{"version":3,"sources":["node_modules/browser-pack/_prelude.js","node_modules/browserify-aes/modes/list.json","node_modules/browserify-sign/browser/algorithms.json","node_modules/browserify-sign/browser/curves.json","node_modules/diffie-hellman/lib/primes.json","node_modules/elliptic/package.json","node_modules/parse-asn1/aesid.json","client/js/app.js","client/js/auth/token.interceptor.js","client/js/auth/token.service.js","client/js/cardterminalactions/cardterminalaction.controller.js","client/js/cardterminalactions/cardterminalaction.service.js","client/js/cardterminalactions/cardterminalsetuprightmenu.controller.js","client/js/cardterminalactions/journals.controller.js","client/js/cardterminalactions/saft.controller..js","client/js/cashstatement/cashstatement.controller.js","client/js/cashstatement/cashstatement.directive.js","client/js/cashstatement/cashstatement.service.js","client/js/cashstatement/morningamount.controller.js","client/js/cashstatement/zreport.service.js","client/js/chart/chart.service.js","client/js/cleanCash/cleanCash.service.js","client/js/cleanCash/cleanCashRepository.js","client/js/debug/debug.controller.js","client/js/depositaccount/depositaccount.controller.js","client/js/downpayment/article-details.controller.js","client/js/downpayment/check-downpayment.controller.js","client/js/downpayment/customer/edit-customer.controller.js","client/js/downpayment/customer/new-address.controller.js","client/js/downpayment/customer/select-billingaddress.controller.js","client/js/downpayment/customer/select-customer.controller.js","client/js/downpayment/customer/serach-customer.controller.js","client/js/downpayment/downpay-config.service.js","client/js/downpayment/downpay-find-booking.js","client/js/downpayment/downpay-item.service.js","client/js/downpayment/downpay-order.service.js","client/js/downpayment/downpay-print.controller.js","client/js/downpayment/downpaymentcertificate.controller.js","client/js/downpayment/shipment/shipment-address.controller.js","client/js/downpayment/shipment/shipment-store.controller.js","client/js/downpayment/shipment/shipment.controller.js","client/js/downpayment/stock-lookup.controller.js","client/js/expense/expense.controller.js","client/js/fiscalisation/norwegian-fiscalisation.service.js","client/js/fiscalisation/swedish-fiscalisation.service.js","client/js/giftcertificate/giftcertificate.controller.js","client/js/giftcertificate/giftcertificate.service.js","client/js/infrasec/infrasec.repository.js","client/js/infrasec/infrasec.service.js","client/js/itemgroup/itemgroup.controller.js","client/js/itemgroup/itemgroup.service.js","client/js/itemshortcuts/itemshortcuts.controller.js","client/js/itemshortcuts/itemshortcuts.service.js","client/js/login/clerklogin.controller.js","client/js/login/clerklogin.service.js","client/js/modal/giftaidModal.directive.js","client/js/modal/posModal.directive.js","client/js/modal/returnModal.directive.js","client/js/modal/voucherModal.directive.js","client/js/modal/voucheractionModal.directive.js","client/js/modal/weborderModal.directive.js","client/js/modules.js","client/js/payment/account.paymenttype.js","client/js/payment/cardtransactionstatus.service.js","client/js/payment/continuationResults.enum.js","client/js/payment/default.paymenttype.js","client/js/payment/defaultcard.paymenttype.js","client/js/payment/defaultvoucher.paymenttype.js","client/js/payment/downPayment.paymenttype.js","client/js/payment/intersolve.paymenttype.js","client/js/payment/mobilepay.paymenttype.js","client/js/payment/payment.controller.js","client/js/payment/payment.service.js","client/js/payment/paymentFinished.controller.js","client/js/payment/paymenttype.directive.js","client/js/payment/payplaza.paymenttype.js","client/js/payment/paywidget.controller.js","client/js/payment/receiptCompleter.paymenttype.js","client/js/payment/reconcile-paymenttype-choice.controller.js","client/js/payment/rightmenupay.controller.js","client/js/payment/sale.service.js","client/js/payment/trimit.paymenttype.js","client/js/payment/verifone.service.js","client/js/picklist/picklist.controller.js","client/js/picklist/picklist.repository.js","client/js/picklist/picklist.service.js","client/js/receipt/discountoptions.repository.js","client/js/receipt/discountoptions.service.js","client/js/receipt/discountreasons.service.js","client/js/receipt/findreceipt.controller.js","client/js/receipt/labeltemplates.service.js","client/js/receipt/parkreceipt.controller.js","client/js/receipt/receipt.controller.js","client/js/receipt/receipt.service.js","client/js/receipt/receiptitem.directive.js","client/js/receipt/returnreasons.service.js","client/js/receipt/transactionTypes.value.js","client/js/revide/revide.integration.controller.js","client/js/revide/revide.integration.repository.js","client/js/searcharticle/searcharticle.controller.js","client/js/selectDimensionCombo/selectDimensionCombo.controller.js","client/js/selectDimensionCombo/selectDimensionCombo.service.js","client/js/sellasset/sellasset.controller.js","client/js/sellasset/set.service.js","client/js/shared/articles.service.js","client/js/shared/aside.service.js","client/js/shared/autofocus.directive.js","client/js/shared/backdrop/backdrop.directive.js","client/js/shared/backdrop/backdrop.service.js","client/js/shared/backend/backend.module.js","client/js/shared/backend/offlinedevice.service.js","client/js/shared/backend/sale.repository.js","client/js/shared/backend/voucher.repository.js","client/js/shared/backend/widgets.repository.js","client/js/shared/buttonState/buttonState.directive.js","client/js/shared/connector/connector.service.js","client/js/shared/connector/connectorLock.service.js","client/js/shared/connector/giftPrintingOption.value.js","client/js/shared/connector/gifts.service.js","client/js/shared/errorService.js","client/js/shared/eventBus/eventBus.service.js","client/js/shared/eventBus/eventBus.value.js","client/js/shared/flipToggle.directive.js","client/js/shared/fluctuatingProperties.service.js","client/js/shared/fullscreenMode.service.js","client/js/shared/globalinput.directive.js","client/js/shared/header.controller.js","client/js/shared/healthChecker.service.js","client/js/shared/idlechecker.service.js","client/js/shared/indexdb.service.js","client/js/shared/input-popup.directive.js","client/js/shared/input.service.js","client/js/shared/inputvalidation.service.js","client/js/shared/itemInfo/itemInfo.repository.js","client/js/shared/itemInfo/itemInfo.values.js","client/js/shared/itemInfo/iteminfo.service.js","client/js/shared/keypad/keypad.directive.js","client/js/shared/momentFormat.value.js","client/js/shared/notification.service.js","client/js/shared/notificationmessage.directive.js","client/js/shared/offlinechecker.interceptor.js","client/js/shared/portal.service.js","client/js/shared/posconfig.service.js","client/js/shared/posstorage.service.js","client/js/shared/quagga.service.js","client/js/shared/returnReceipt.service.js","client/js/shared/rightmenunav.controller.js","client/js/shared/signalr.service.js","client/js/shared/slideAction.directive.js","client/js/shared/solid/solid.service.js","client/js/shared/storeNamespace.factory.js","client/js/shared/toggleNavigation/toggleNavigation.directive.js","client/js/shared/toggleNavigation/toggleNavigation.service.js","client/js/shared/userAgent/useragent.directive.js","client/js/shared/userAgent/useragent.service.js","client/js/shared/utility.directive.js","client/js/shared/utility.services.js","client/js/shared/version.service.js","client/js/shared/voucher/voucherMessageService.js","client/js/shared/voucher/voucherModalsService.js","client/js/shared/voucher/voucherService.js","client/js/weborder/pickweborder.controller.js","client/js/weborder/pickweborder.values.js","client/js/weborder/weborder.service.js","client/js/weborder/weborderView.directive.js","client/js/widgets/articleStatistic.widget.js","client/js/widgets/coreloyalty.service.js","client/js/widgets/customer-display.widget.js","client/js/widgets/customerorder.service.js","client/js/widgets/customerorder.widget.js","client/js/widgets/downpay-order.widget.js","client/js/widgets/dummy.widget.js","client/js/widgets/find-customer.service.js","client/js/widgets/find-customer.widget.js","client/js/widgets/insurance.service.js","client/js/widgets/insurance.values.js","client/js/widgets/insurance.widget.js","client/js/widgets/kega.service.js","client/js/widgets/kega.widget.js","client/js/widgets/logo.widget.js","client/js/widgets/loyalty.service.js","client/js/widgets/loyalty.widget.js","client/js/widgets/loyaltyintersolve.service.js","client/js/widgets/loyaltyintersolve.widget.js","client/js/widgets/loyaltystaticdiscount.service.js","client/js/widgets/masteritemstock.service.js","client/js/widgets/mpaddaddress.service.js","client/js/widgets/mpaddaddress.widget.js","client/js/widgets/mpcustomer.widget.js","client/js/widgets/mpcustomerorder.widget.js","client/js/widgets/mpeditcustomer.widget.js","client/js/widgets/mpeditinsurance.widget.js","client/js/widgets/mpproductimage.widget.js","client/js/widgets/mpstock.widget.js","client/js/widgets/mpweborder.widget.js","client/js/widgets/payplaza.service.js","client/js/widgets/payplaza.widget.js","client/js/widgets/pricepromotion.service.js","client/js/widgets/pricepromotion.widget.js","client/js/widgets/productimage.widget.js","client/js/widgets/quagga.widget.js","client/js/widgets/revide.service.js","client/js/widgets/revide.widget.js","client/js/widgets/stock.service.js","client/js/widgets/stock.widget.js","client/js/widgets/store.service.js","client/js/widgets/trimit.service.js","client/js/widgets/trimit.widget.js","client/js/widgets/trimitnewcustomer.widget.js","client/js/widgets/trimitweborder.widget.js","client/js/widgets/weborder.service.js","client/js/widgets/weborder.widget.js","client/js/widgets/widgets.controller.js","client/js/widgets/widgets.directive.js","client/js/widgets/widgets.factory.js","client/js/widgets/widgets.mainpane.controller.js","client/js/xreport/xreport.controller.js","node_modules/@aspnet/signalr/dist/cjs/AbortController.js","node_modules/@aspnet/signalr/dist/cjs/DefaultHttpClient.js","node_modules/@aspnet/signalr/dist/cjs/Errors.js","node_modules/@aspnet/signalr/dist/cjs/HandshakeProtocol.js","node_modules/@aspnet/signalr/dist/cjs/HttpClient.js","node_modules/@aspnet/signalr/dist/cjs/HttpConnection.js","node_modules/@aspnet/signalr/dist/cjs/HubConnection.js","node_modules/@aspnet/signalr/dist/cjs/HubConnectionBuilder.js","node_modules/@aspnet/signalr/dist/cjs/IHubProtocol.js","node_modules/@aspnet/signalr/dist/cjs/ILogger.js","node_modules/@aspnet/signalr/dist/cjs/ITransport.js","node_modules/@aspnet/signalr/dist/cjs/JsonHubProtocol.js","node_modules/@aspnet/signalr/dist/cjs/Loggers.js","node_modules/@aspnet/signalr/dist/cjs/LongPollingTransport.js","node_modules/@aspnet/signalr/dist/cjs/NodeHttpClient.js","node_modules/@aspnet/signalr/dist/cjs/ServerSentEventsTransport.js","node_modules/@aspnet/signalr/dist/cjs/TextMessageFormat.js","node_modules/@aspnet/signalr/dist/cjs/Utils.js","node_modules/@aspnet/signalr/dist/cjs/WebSocketTransport.js","node_modules/@aspnet/signalr/dist/cjs/XhrHttpClient.js","node_modules/@aspnet/signalr/dist/cjs/index.js","node_modules/@babel/polyfill/lib/index.js","node_modules/@babel/polyfill/lib/noConflict.js","node_modules/angular-animate/angular-animate.js","node_modules/angular-animate/index.js","node_modules/angular-chart.js/dist/angular-chart.js","node_modules/angular-chart.js/node_modules/chart.js/src/chart.js","node_modules/angular-chart.js/node_modules/chart.js/src/charts/Chart.Bar.js","node_modules/angular-chart.js/node_modules/chart.js/src/charts/Chart.Bubble.js","node_modules/angular-chart.js/node_modules/chart.js/src/charts/Chart.Doughnut.js","node_modules/angular-chart.js/node_modules/chart.js/src/charts/Chart.Line.js","node_modules/angular-chart.js/node_modules/chart.js/src/charts/Chart.PolarArea.js","node_modules/angular-chart.js/node_modules/chart.js/src/charts/Chart.Radar.js","node_modules/angular-chart.js/node_modules/chart.js/src/charts/Chart.Scatter.js","node_modules/angular-chart.js/node_modules/chart.js/src/controllers/controller.bar.js","node_modules/angular-chart.js/node_modules/chart.js/src/controllers/controller.bubble.js","node_modules/angular-chart.js/node_modules/chart.js/src/controllers/controller.doughnut.js","node_modules/angular-chart.js/node_modules/chart.js/src/controllers/controller.line.js","node_modules/angular-chart.js/node_modules/chart.js/src/controllers/controller.polarArea.js","node_modules/angular-chart.js/node_modules/chart.js/src/controllers/controller.radar.js","node_modules/angular-chart.js/node_modules/chart.js/src/core/core.animation.js","node_modules/angular-chart.js/node_modules/chart.js/src/core/core.canvasHelpers.js","node_modules/angular-chart.js/node_modules/chart.js/src/core/core.controller.js","node_modules/angular-chart.js/node_modules/chart.js/src/core/core.datasetController.js","node_modules/angular-chart.js/node_modules/chart.js/src/core/core.element.js","node_modules/angular-chart.js/node_modules/chart.js/src/core/core.helpers.js","node_modules/angular-chart.js/node_modules/chart.js/src/core/core.js","node_modules/angular-chart.js/node_modules/chart.js/src/core/core.layoutService.js","node_modules/angular-chart.js/node_modules/chart.js/src/core/core.legend.js","node_modules/angular-chart.js/node_modules/chart.js/src/core/core.plugin.js","node_modules/angular-chart.js/node_modules/chart.js/src/core/core.scale.js","node_modules/angular-chart.js/node_modules/chart.js/src/core/core.scaleService.js","node_modules/angular-chart.js/node_modules/chart.js/src/core/core.title.js","node_modules/angular-chart.js/node_modules/chart.js/src/core/core.tooltip.js","node_modules/angular-chart.js/node_modules/chart.js/src/elements/element.arc.js","node_modules/angular-chart.js/node_modules/chart.js/src/elements/element.line.js","node_modules/angular-chart.js/node_modules/chart.js/src/elements/element.point.js","node_modules/angular-chart.js/node_modules/chart.js/src/elements/element.rectangle.js","node_modules/angular-chart.js/node_modules/chart.js/src/scales/scale.category.js","node_modules/angular-chart.js/node_modules/chart.js/src/scales/scale.linear.js","node_modules/angular-chart.js/node_modules/chart.js/src/scales/scale.linearbase.js","node_modules/angular-chart.js/node_modules/chart.js/src/scales/scale.logarithmic.js","node_modules/angular-chart.js/node_modules/chart.js/src/scales/scale.radialLinear.js","node_modules/angular-chart.js/node_modules/chart.js/src/scales/scale.time.js","node_modules/angular-cookies/angular-cookies.js","node_modules/angular-cookies/index.js","node_modules/angular-dynamic-locale/src/tmhDynamicLocale.js","node_modules/angular-iscroll/dist/lib/angular-iscroll.js","node_modules/angular-loading-bar/build/loading-bar.js","node_modules/angular-loading-bar/index.js","node_modules/angular-sanitize/angular-sanitize.js","node_modules/angular-sanitize/index.js","node_modules/angular-storage/dist/angular-storage.js","node_modules/angular-storage/index.js","node_modules/angular-strap/dist/angular-strap.js","node_modules/angular-strap/dist/angular-strap.tpl.min.js","node_modules/angular-strap/index.js","node_modules/angular-touch/angular-touch.js","node_modules/angular-touch/index.js","node_modules/angular-translate-loader-static-files/angular-translate-loader-static-files.js","node_modules/angular-translate/dist/angular-translate.js","node_modules/angular-ui-router/release/angular-ui-router.js","node_modules/angular/angular.js","node_modules/angular/index.js","node_modules/angularjs-datepicker/dist/angular-datepicker.min.js","node_modules/asn1.js/lib/asn1.js","node_modules/asn1.js/lib/asn1/api.js","node_modules/asn1.js/lib/asn1/base/buffer.js","node_modules/asn1.js/lib/asn1/base/index.js","node_modules/asn1.js/lib/asn1/base/node.js","node_modules/asn1.js/lib/asn1/base/reporter.js","node_modules/asn1.js/lib/asn1/constants/der.js","node_modules/asn1.js/lib/asn1/constants/index.js","node_modules/asn1.js/lib/asn1/decoders/der.js","node_modules/asn1.js/lib/asn1/decoders/index.js","node_modules/asn1.js/lib/asn1/decoders/pem.js","node_modules/asn1.js/lib/asn1/encoders/der.js","node_modules/asn1.js/lib/asn1/encoders/index.js","node_modules/asn1.js/lib/asn1/encoders/pem.js","node_modules/asn1.js/node_modules/bn.js/lib/bn.js","node_modules/base64-js/index.js","node_modules/bn.js/lib/bn.js","node_modules/brorand/index.js","node_modules/browserify-aes/aes.js","node_modules/browserify-aes/authCipher.js","node_modules/browserify-aes/browser.js","node_modules/browserify-aes/decrypter.js","node_modules/browserify-aes/encrypter.js","node_modules/browserify-aes/ghash.js","node_modules/browserify-aes/incr32.js","node_modules/browserify-aes/modes/cbc.js","node_modules/browserify-aes/modes/cfb.js","node_modules/browserify-aes/modes/cfb1.js","node_modules/browserify-aes/modes/cfb8.js","node_modules/browserify-aes/modes/ctr.js","node_modules/browserify-aes/modes/ecb.js","node_modules/browserify-aes/modes/index.js","node_modules/browserify-aes/modes/ofb.js","node_modules/browserify-aes/streamCipher.js","node_modules/browserify-cipher/browser.js","node_modules/browserify-des/index.js","node_modules/browserify-des/modes.js","node_modules/browserify-rsa/index.js","node_modules/browserify-sign/algos.js","node_modules/browserify-sign/browser/index.js","node_modules/browserify-sign/browser/sign.js","node_modules/browserify-sign/browser/verify.js","node_modules/buffer-xor/index.js","node_modules/buffer/index.js","node_modules/chart.js/dist/Chart.js","node_modules/chartjs-color-string/color-string.js","node_modules/chartjs-color/index.js","node_modules/cipher-base/index.js","node_modules/color-convert/conversions.js","node_modules/color-convert/index.js","node_modules/color-convert/route.js","node_modules/color-name/index.js","node_modules/core-js/es6/index.js","node_modules/core-js/fn/array/flat-map.js","node_modules/core-js/fn/array/includes.js","node_modules/core-js/fn/object/entries.js","node_modules/core-js/fn/object/get-own-property-descriptors.js","node_modules/core-js/fn/object/values.js","node_modules/core-js/fn/promise/finally.js","node_modules/core-js/fn/string/pad-end.js","node_modules/core-js/fn/string/pad-start.js","node_modules/core-js/fn/string/trim-end.js","node_modules/core-js/fn/string/trim-start.js","node_modules/core-js/fn/symbol/async-iterator.js","node_modules/core-js/library/fn/global.js","node_modules/core-js/library/modules/_a-function.js","node_modules/core-js/library/modules/_an-object.js","node_modules/core-js/library/modules/_core.js","node_modules/core-js/library/modules/_ctx.js","node_modules/core-js/library/modules/_descriptors.js","node_modules/core-js/library/modules/_dom-create.js","node_modules/core-js/library/modules/_export.js","node_modules/core-js/library/modules/_fails.js","node_modules/core-js/library/modules/_global.js","node_modules/core-js/library/modules/_has.js","node_modules/core-js/library/modules/_hide.js","node_modules/core-js/library/modules/_ie8-dom-define.js","node_modules/core-js/library/modules/_is-object.js","node_modules/core-js/library/modules/_object-dp.js","node_modules/core-js/library/modules/_property-desc.js","node_modules/core-js/library/modules/_to-primitive.js","node_modules/core-js/library/modules/es7.global.js","node_modules/core-js/modules/_a-number-value.js","node_modules/core-js/modules/_add-to-unscopables.js","node_modules/core-js/modules/_advance-string-index.js","node_modules/core-js/modules/_an-instance.js","node_modules/core-js/modules/_array-copy-within.js","node_modules/core-js/modules/_array-fill.js","node_modules/core-js/modules/_array-includes.js","node_modules/core-js/modules/_array-methods.js","node_modules/core-js/modules/_array-reduce.js","node_modules/core-js/modules/_array-species-constructor.js","node_modules/core-js/modules/_array-species-create.js","node_modules/core-js/modules/_bind.js","node_modules/core-js/modules/_classof.js","node_modules/core-js/modules/_cof.js","node_modules/core-js/modules/_collection-strong.js","node_modules/core-js/modules/_collection-weak.js","node_modules/core-js/modules/_collection.js","node_modules/core-js/modules/_create-property.js","node_modules/core-js/modules/_date-to-iso-string.js","node_modules/core-js/modules/_date-to-primitive.js","node_modules/core-js/modules/_defined.js","node_modules/core-js/modules/_enum-bug-keys.js","node_modules/core-js/modules/_enum-keys.js","node_modules/core-js/modules/_export.js","node_modules/core-js/modules/_fails-is-regexp.js","node_modules/core-js/modules/_fix-re-wks.js","node_modules/core-js/modules/_flags.js","node_modules/core-js/modules/_flatten-into-array.js","node_modules/core-js/modules/_for-of.js","node_modules/core-js/modules/_function-to-string.js","node_modules/core-js/modules/_html.js","node_modules/core-js/modules/_inherit-if-required.js","node_modules/core-js/modules/_invoke.js","node_modules/core-js/modules/_iobject.js","node_modules/core-js/modules/_is-array-iter.js","node_modules/core-js/modules/_is-array.js","node_modules/core-js/modules/_is-integer.js","node_modules/core-js/modules/_is-regexp.js","node_modules/core-js/modules/_iter-call.js","node_modules/core-js/modules/_iter-create.js","node_modules/core-js/modules/_iter-define.js","node_modules/core-js/modules/_iter-detect.js","node_modules/core-js/modules/_iter-step.js","node_modules/core-js/modules/_iterators.js","node_modules/core-js/modules/_library.js","node_modules/core-js/modules/_math-expm1.js","node_modules/core-js/modules/_math-fround.js","node_modules/core-js/modules/_math-log1p.js","node_modules/core-js/modules/_math-sign.js","node_modules/core-js/modules/_meta.js","node_modules/core-js/modules/_microtask.js","node_modules/core-js/modules/_new-promise-capability.js","node_modules/core-js/modules/_object-assign.js","node_modules/core-js/modules/_object-create.js","node_modules/core-js/modules/_object-dps.js","node_modules/core-js/modules/_object-gopd.js","node_modules/core-js/modules/_object-gopn-ext.js","node_modules/core-js/modules/_object-gopn.js","node_modules/core-js/modules/_object-gops.js","node_modules/core-js/modules/_object-gpo.js","node_modules/core-js/modules/_object-keys-internal.js","node_modules/core-js/modules/_object-keys.js","node_modules/core-js/modules/_object-pie.js","node_modules/core-js/modules/_object-sap.js","node_modules/core-js/modules/_object-to-array.js","node_modules/core-js/modules/_own-keys.js","node_modules/core-js/modules/_parse-float.js","node_modules/core-js/modules/_parse-int.js","node_modules/core-js/modules/_perform.js","node_modules/core-js/modules/_promise-resolve.js","node_modules/core-js/modules/_redefine-all.js","node_modules/core-js/modules/_redefine.js","node_modules/core-js/modules/_regexp-exec-abstract.js","node_modules/core-js/modules/_regexp-exec.js","node_modules/core-js/modules/_same-value.js","node_modules/core-js/modules/_set-proto.js","node_modules/core-js/modules/_set-species.js","node_modules/core-js/modules/_set-to-string-tag.js","node_modules/core-js/modules/_shared-key.js","node_modules/core-js/modules/_shared.js","node_modules/core-js/modules/_species-constructor.js","node_modules/core-js/modules/_strict-method.js","node_modules/core-js/modules/_string-at.js","node_modules/core-js/modules/_string-context.js","node_modules/core-js/modules/_string-html.js","node_modules/core-js/modules/_string-pad.js","node_modules/core-js/modules/_string-repeat.js","node_modules/core-js/modules/_string-trim.js","node_modules/core-js/modules/_string-ws.js","node_modules/core-js/modules/_task.js","node_modules/core-js/modules/_to-absolute-index.js","node_modules/core-js/modules/_to-index.js","node_modules/core-js/modules/_to-integer.js","node_modules/core-js/modules/_to-iobject.js","node_modules/core-js/modules/_to-length.js","node_modules/core-js/modules/_to-object.js","node_modules/core-js/modules/_typed-array.js","node_modules/core-js/modules/_typed-buffer.js","node_modules/core-js/modules/_typed.js","node_modules/core-js/modules/_uid.js","node_modules/core-js/modules/_user-agent.js","node_modules/core-js/modules/_validate-collection.js","node_modules/core-js/modules/_wks-define.js","node_modules/core-js/modules/_wks-ext.js","node_modules/core-js/modules/_wks.js","node_modules/core-js/modules/core.get-iterator-method.js","node_modules/core-js/modules/es6.array.copy-within.js","node_modules/core-js/modules/es6.array.every.js","node_modules/core-js/modules/es6.array.fill.js","node_modules/core-js/modules/es6.array.filter.js","node_modules/core-js/modules/es6.array.find-index.js","node_modules/core-js/modules/es6.array.find.js","node_modules/core-js/modules/es6.array.for-each.js","node_modules/core-js/modules/es6.array.from.js","node_modules/core-js/modules/es6.array.index-of.js","node_modules/core-js/modules/es6.array.is-array.js","node_modules/core-js/modules/es6.array.iterator.js","node_modules/core-js/modules/es6.array.join.js","node_modules/core-js/modules/es6.array.last-index-of.js","node_modules/core-js/modules/es6.array.map.js","node_modules/core-js/modules/es6.array.of.js","node_modules/core-js/modules/es6.array.reduce-right.js","node_modules/core-js/modules/es6.array.reduce.js","node_modules/core-js/modules/es6.array.slice.js","node_modules/core-js/modules/es6.array.some.js","node_modules/core-js/modules/es6.array.sort.js","node_modules/core-js/modules/es6.array.species.js","node_modules/core-js/modules/es6.date.now.js","node_modules/core-js/modules/es6.date.to-iso-string.js","node_modules/core-js/modules/es6.date.to-json.js","node_modules/core-js/modules/es6.date.to-primitive.js","node_modules/core-js/modules/es6.date.to-string.js","node_modules/core-js/modules/es6.function.bind.js","node_modules/core-js/modules/es6.function.has-instance.js","node_modules/core-js/modules/es6.function.name.js","node_modules/core-js/modules/es6.map.js","node_modules/core-js/modules/es6.math.acosh.js","node_modules/core-js/modules/es6.math.asinh.js","node_modules/core-js/modules/es6.math.atanh.js","node_modules/core-js/modules/es6.math.cbrt.js","node_modules/core-js/modules/es6.math.clz32.js","node_modules/core-js/modules/es6.math.cosh.js","node_modules/core-js/modules/es6.math.expm1.js","node_modules/core-js/modules/es6.math.fround.js","node_modules/core-js/modules/es6.math.hypot.js","node_modules/core-js/modules/es6.math.imul.js","node_modules/core-js/modules/es6.math.log10.js","node_modules/core-js/modules/es6.math.log1p.js","node_modules/core-js/modules/es6.math.log2.js","node_modules/core-js/modules/es6.math.sign.js","node_modules/core-js/modules/es6.math.sinh.js","node_modules/core-js/modules/es6.math.tanh.js","node_modules/core-js/modules/es6.math.trunc.js","node_modules/core-js/modules/es6.number.constructor.js","node_modules/core-js/modules/es6.number.epsilon.js","node_modules/core-js/modules/es6.number.is-finite.js","node_modules/core-js/modules/es6.number.is-integer.js","node_modules/core-js/modules/es6.number.is-nan.js","node_modules/core-js/modules/es6.number.is-safe-integer.js","node_modules/core-js/modules/es6.number.max-safe-integer.js","node_modules/core-js/modules/es6.number.min-safe-integer.js","node_modules/core-js/modules/es6.number.parse-float.js","node_modules/core-js/modules/es6.number.parse-int.js","node_modules/core-js/modules/es6.number.to-fixed.js","node_modules/core-js/modules/es6.number.to-precision.js","node_modules/core-js/modules/es6.object.assign.js","node_modules/core-js/modules/es6.object.create.js","node_modules/core-js/modules/es6.object.define-properties.js","node_modules/core-js/modules/es6.object.define-property.js","node_modules/core-js/modules/es6.object.freeze.js","node_modules/core-js/modules/es6.object.get-own-property-descriptor.js","node_modules/core-js/modules/es6.object.get-own-property-names.js","node_modules/core-js/modules/es6.object.get-prototype-of.js","node_modules/core-js/modules/es6.object.is-extensible.js","node_modules/core-js/modules/es6.object.is-frozen.js","node_modules/core-js/modules/es6.object.is-sealed.js","node_modules/core-js/modules/es6.object.is.js","node_modules/core-js/modules/es6.object.keys.js","node_modules/core-js/modules/es6.object.prevent-extensions.js","node_modules/core-js/modules/es6.object.seal.js","node_modules/core-js/modules/es6.object.set-prototype-of.js","node_modules/core-js/modules/es6.object.to-string.js","node_modules/core-js/modules/es6.parse-float.js","node_modules/core-js/modules/es6.parse-int.js","node_modules/core-js/modules/es6.promise.js","node_modules/core-js/modules/es6.reflect.apply.js","node_modules/core-js/modules/es6.reflect.construct.js","node_modules/core-js/modules/es6.reflect.define-property.js","node_modules/core-js/modules/es6.reflect.delete-property.js","node_modules/core-js/modules/es6.reflect.enumerate.js","node_modules/core-js/modules/es6.reflect.get-own-property-descriptor.js","node_modules/core-js/modules/es6.reflect.get-prototype-of.js","node_modules/core-js/modules/es6.reflect.get.js","node_modules/core-js/modules/es6.reflect.has.js","node_modules/core-js/modules/es6.reflect.is-extensible.js","node_modules/core-js/modules/es6.reflect.own-keys.js","node_modules/core-js/modules/es6.reflect.prevent-extensions.js","node_modules/core-js/modules/es6.reflect.set-prototype-of.js","node_modules/core-js/modules/es6.reflect.set.js","node_modules/core-js/modules/es6.regexp.constructor.js","node_modules/core-js/modules/es6.regexp.exec.js","node_modules/core-js/modules/es6.regexp.flags.js","node_modules/core-js/modules/es6.regexp.match.js","node_modules/core-js/modules/es6.regexp.replace.js","node_modules/core-js/modules/es6.regexp.search.js","node_modules/core-js/modules/es6.regexp.split.js","node_modules/core-js/modules/es6.regexp.to-string.js","node_modules/core-js/modules/es6.set.js","node_modules/core-js/modules/es6.string.anchor.js","node_modules/core-js/modules/es6.string.big.js","node_modules/core-js/modules/es6.string.blink.js","node_modules/core-js/modules/es6.string.bold.js","node_modules/core-js/modules/es6.string.code-point-at.js","node_modules/core-js/modules/es6.string.ends-with.js","node_modules/core-js/modules/es6.string.fixed.js","node_modules/core-js/modules/es6.string.fontcolor.js","node_modules/core-js/modules/es6.string.fontsize.js","node_modules/core-js/modules/es6.string.from-code-point.js","node_modules/core-js/modules/es6.string.includes.js","node_modules/core-js/modules/es6.string.italics.js","node_modules/core-js/modules/es6.string.iterator.js","node_modules/core-js/modules/es6.string.link.js","node_modules/core-js/modules/es6.string.raw.js","node_modules/core-js/modules/es6.string.repeat.js","node_modules/core-js/modules/es6.string.small.js","node_modules/core-js/modules/es6.string.starts-with.js","node_modules/core-js/modules/es6.string.strike.js","node_modules/core-js/modules/es6.string.sub.js","node_modules/core-js/modules/es6.string.sup.js","node_modules/core-js/modules/es6.string.trim.js","node_modules/core-js/modules/es6.symbol.js","node_modules/core-js/modules/es6.typed.array-buffer.js","node_modules/core-js/modules/es6.typed.data-view.js","node_modules/core-js/modules/es6.typed.float32-array.js","node_modules/core-js/modules/es6.typed.float64-array.js","node_modules/core-js/modules/es6.typed.int16-array.js","node_modules/core-js/modules/es6.typed.int32-array.js","node_modules/core-js/modules/es6.typed.int8-array.js","node_modules/core-js/modules/es6.typed.uint16-array.js","node_modules/core-js/modules/es6.typed.uint32-array.js","node_modules/core-js/modules/es6.typed.uint8-array.js","node_modules/core-js/modules/es6.typed.uint8-clamped-array.js","node_modules/core-js/modules/es6.weak-map.js","node_modules/core-js/modules/es6.weak-set.js","node_modules/core-js/modules/es7.array.flat-map.js","node_modules/core-js/modules/es7.array.includes.js","node_modules/core-js/modules/es7.object.entries.js","node_modules/core-js/modules/es7.object.get-own-property-descriptors.js","node_modules/core-js/modules/es7.object.values.js","node_modules/core-js/modules/es7.promise.finally.js","node_modules/core-js/modules/es7.string.pad-end.js","node_modules/core-js/modules/es7.string.pad-start.js","node_modules/core-js/modules/es7.string.trim-left.js","node_modules/core-js/modules/es7.string.trim-right.js","node_modules/core-js/modules/es7.symbol.async-iterator.js","node_modules/core-js/modules/web.dom.iterable.js","node_modules/core-js/modules/web.immediate.js","node_modules/core-js/modules/web.timers.js","node_modules/core-js/web/index.js","node_modules/core-util-is/lib/util.js","node_modules/create-ecdh/browser.js","node_modules/create-hash/browser.js","node_modules/create-hash/md5.js","node_modules/create-hmac/browser.js","node_modules/create-hmac/legacy.js","node_modules/crypto-browserify/index.js","node_modules/ddd-assets/dist/ddd-assets.min.js","node_modules/ddd-assets/index.js","node_modules/decimal.js/decimal.js","node_modules/des.js/lib/des.js","node_modules/des.js/lib/des/cbc.js","node_modules/des.js/lib/des/cipher.js","node_modules/des.js/lib/des/des.js","node_modules/des.js/lib/des/ede.js","node_modules/des.js/lib/des/utils.js","node_modules/dexie/dist/dexie.js","node_modules/diffie-hellman/browser.js","node_modules/diffie-hellman/lib/dh.js","node_modules/diffie-hellman/lib/generatePrime.js","node_modules/elliptic/lib/elliptic.js","node_modules/elliptic/lib/elliptic/curve/base.js","node_modules/elliptic/lib/elliptic/curve/edwards.js","node_modules/elliptic/lib/elliptic/curve/index.js","node_modules/elliptic/lib/elliptic/curve/mont.js","node_modules/elliptic/lib/elliptic/curve/short.js","node_modules/elliptic/lib/elliptic/curves.js","node_modules/elliptic/lib/elliptic/ec/index.js","node_modules/elliptic/lib/elliptic/ec/key.js","node_modules/elliptic/lib/elliptic/ec/signature.js","node_modules/elliptic/lib/elliptic/eddsa/index.js","node_modules/elliptic/lib/elliptic/eddsa/key.js","node_modules/elliptic/lib/elliptic/eddsa/signature.js","node_modules/elliptic/lib/elliptic/precomputed/secp256k1.js","node_modules/elliptic/lib/elliptic/utils.js","node_modules/error-stack-parser/error-stack-parser.js","node_modules/events/events.js","node_modules/evp_bytestokey/index.js","node_modules/file-saver/dist/FileSaver.min.js","node_modules/google-libphonenumber/dist/libphonenumber.js","node_modules/hash-base/index.js","node_modules/hash.js/lib/hash.js","node_modules/hash.js/lib/hash/common.js","node_modules/hash.js/lib/hash/hmac.js","node_modules/hash.js/lib/hash/ripemd.js","node_modules/hash.js/lib/hash/sha.js","node_modules/hash.js/lib/hash/sha/1.js","node_modules/hash.js/lib/hash/sha/224.js","node_modules/hash.js/lib/hash/sha/256.js","node_modules/hash.js/lib/hash/sha/384.js","node_modules/hash.js/lib/hash/sha/512.js","node_modules/hash.js/lib/hash/sha/common.js","node_modules/hash.js/lib/hash/utils.js","node_modules/hmac-drbg/lib/hmac-drbg.js","node_modules/ieee754/index.js","node_modules/inherits/inherits_browser.js","node_modules/is-buffer/index.js","node_modules/isarray/index.js","node_modules/iscroll/build/iscroll.js","node_modules/jquery-ui-bundle/jquery-ui.js","node_modules/jquery-ui-touch-punch/jquery.ui.touch-punch.js","node_modules/jquery/dist/jquery.js","node_modules/jsbarcode/bin/JsBarcode.js","node_modules/jsbarcode/bin/barcodes/Barcode.js","node_modules/jsbarcode/bin/barcodes/CODE128/CODE128.js","node_modules/jsbarcode/bin/barcodes/CODE128/CODE128A.js","node_modules/jsbarcode/bin/barcodes/CODE128/CODE128B.js","node_modules/jsbarcode/bin/barcodes/CODE128/CODE128C.js","node_modules/jsbarcode/bin/barcodes/CODE128/CODE128_AUTO.js","node_modules/jsbarcode/bin/barcodes/CODE128/auto.js","node_modules/jsbarcode/bin/barcodes/CODE128/constants.js","node_modules/jsbarcode/bin/barcodes/CODE128/index.js","node_modules/jsbarcode/bin/barcodes/CODE39/index.js","node_modules/jsbarcode/bin/barcodes/EAN_UPC/EAN.js","node_modules/jsbarcode/bin/barcodes/EAN_UPC/EAN13.js","node_modules/jsbarcode/bin/barcodes/EAN_UPC/EAN2.js","node_modules/jsbarcode/bin/barcodes/EAN_UPC/EAN5.js","node_modules/jsbarcode/bin/barcodes/EAN_UPC/EAN8.js","node_modules/jsbarcode/bin/barcodes/EAN_UPC/UPC.js","node_modules/jsbarcode/bin/barcodes/EAN_UPC/UPCE.js","node_modules/jsbarcode/bin/barcodes/EAN_UPC/constants.js","node_modules/jsbarcode/bin/barcodes/EAN_UPC/encoder.js","node_modules/jsbarcode/bin/barcodes/EAN_UPC/index.js","node_modules/jsbarcode/bin/barcodes/GenericBarcode/index.js","node_modules/jsbarcode/bin/barcodes/ITF/ITF.js","node_modules/jsbarcode/bin/barcodes/ITF/ITF14.js","node_modules/jsbarcode/bin/barcodes/ITF/constants.js","node_modules/jsbarcode/bin/barcodes/ITF/index.js","node_modules/jsbarcode/bin/barcodes/MSI/MSI.js","node_modules/jsbarcode/bin/barcodes/MSI/MSI10.js","node_modules/jsbarcode/bin/barcodes/MSI/MSI1010.js","node_modules/jsbarcode/bin/barcodes/MSI/MSI11.js","node_modules/jsbarcode/bin/barcodes/MSI/MSI1110.js","node_modules/jsbarcode/bin/barcodes/MSI/checksums.js","node_modules/jsbarcode/bin/barcodes/MSI/index.js","node_modules/jsbarcode/bin/barcodes/codabar/index.js","node_modules/jsbarcode/bin/barcodes/index.js","node_modules/jsbarcode/bin/barcodes/pharmacode/index.js","node_modules/jsbarcode/bin/exceptions/ErrorHandler.js","node_modules/jsbarcode/bin/exceptions/exceptions.js","node_modules/jsbarcode/bin/help/fixOptions.js","node_modules/jsbarcode/bin/help/getOptionsFromElement.js","node_modules/jsbarcode/bin/help/getRenderProperties.js","node_modules/jsbarcode/bin/help/linearizeEncodings.js","node_modules/jsbarcode/bin/help/merge.js","node_modules/jsbarcode/bin/help/optionsFromStrings.js","node_modules/jsbarcode/bin/options/defaults.js","node_modules/jsbarcode/bin/renderers/canvas.js","node_modules/jsbarcode/bin/renderers/index.js","node_modules/jsbarcode/bin/renderers/object.js","node_modules/jsbarcode/bin/renderers/shared.js","node_modules/jsbarcode/bin/renderers/svg.js","node_modules/lodash/lodash.js","node_modules/logrocket/dist/build.umd.js","node_modules/md5.js/index.js","node_modules/miller-rabin/lib/mr.js","node_modules/minimalistic-assert/index.js","node_modules/minimalistic-crypto-utils/lib/utils.js","node_modules/moment/moment.js","node_modules/ng-toast/dist/ngToast.js","node_modules/node-uuid/uuid.js","node_modules/parse-asn1/asn1.js","node_modules/parse-asn1/certificate.js","node_modules/parse-asn1/fixProc.js","node_modules/parse-asn1/index.js","node_modules/pbkdf2/browser.js","node_modules/pbkdf2/lib/async.js","node_modules/pbkdf2/lib/default-encoding.js","node_modules/pbkdf2/lib/precondition.js","node_modules/pbkdf2/lib/sync-browser.js","node_modules/pbkdf2/lib/to-buffer.js","node_modules/process-nextick-args/index.js","node_modules/process/browser.js","node_modules/public-encrypt/browser.js","node_modules/public-encrypt/mgf.js","node_modules/public-encrypt/privateDecrypt.js","node_modules/public-encrypt/publicEncrypt.js","node_modules/public-encrypt/withPublic.js","node_modules/public-encrypt/xor.js","node_modules/quagga/dist/quagga.min.js","node_modules/randombytes/browser.js","node_modules/randomfill/browser.js","node_modules/readable-stream/duplex-browser.js","node_modules/readable-stream/lib/_stream_duplex.js","node_modules/readable-stream/lib/_stream_passthrough.js","node_modules/readable-stream/lib/_stream_readable.js","node_modules/readable-stream/lib/_stream_transform.js","node_modules/readable-stream/lib/_stream_writable.js","node_modules/readable-stream/lib/internal/streams/BufferList.js","node_modules/readable-stream/lib/internal/streams/destroy.js","node_modules/readable-stream/lib/internal/streams/stream-browser.js","node_modules/readable-stream/node_modules/safe-buffer/index.js","node_modules/readable-stream/passthrough.js","node_modules/readable-stream/readable-browser.js","node_modules/readable-stream/transform.js","node_modules/readable-stream/writable-browser.js","node_modules/regenerator-runtime/runtime.js","node_modules/ripemd160/index.js","node_modules/safe-buffer/index.js","node_modules/sha.js/hash.js","node_modules/sha.js/index.js","node_modules/sha.js/sha.js","node_modules/sha.js/sha1.js","node_modules/sha.js/sha224.js","node_modules/sha.js/sha256.js","node_modules/sha.js/sha384.js","node_modules/sha.js/sha512.js","node_modules/stack-generator/node_modules/stackframe/stackframe.js","node_modules/stack-generator/stack-generator.js","node_modules/stackframe/stackframe.js","node_modules/stacktrace-gps/node_modules/source-map/lib/array-set.js","node_modules/stacktrace-gps/node_modules/source-map/lib/base64-vlq.js","node_modules/stacktrace-gps/node_modules/source-map/lib/base64.js","node_modules/stacktrace-gps/node_modules/source-map/lib/binary-search.js","node_modules/stacktrace-gps/node_modules/source-map/lib/quick-sort.js","node_modules/stacktrace-gps/node_modules/source-map/lib/source-map-consumer.js","node_modules/stacktrace-gps/node_modules/source-map/lib/util.js","node_modules/stacktrace-gps/stacktrace-gps.js","node_modules/stacktrace-js/stacktrace.js","node_modules/stream-browserify/index.js","node_modules/string_decoder/lib/string_decoder.js","node_modules/string_decoder/node_modules/safe-buffer/index.js","node_modules/timers-browserify/main.js","node_modules/util-deprecate/browser.js","node_modules/vm-browserify/index.js"],"names":["toDecimalPlacesUnrounded","dp","numberString","this","toString","parts","split","length","Decimal","decimalPoints","unroundedDecimalPoints","substr","unroundedDecimal","window","pos","angular","module","run","$rootScope","$state","$stateParams","$interval","$animate","backend","posInfoRepository","versionService","idleChecker","healthChecker","getVersion","showKeys","showWidgets","isPaymentPage","selectedItem","selectedCustomer","isDownPaymentBooking","$watch","defaultDevice","index","device","getDeviceByIndex","api","saveDeviceConnection","showLeftAside","$broadcast","showRightAsideNotificationCenter","showRightAsideArmSelector","currentDate","Date","init","pageOpenedOn","now","localStorage","setItem","addEventListener","latestPageOpenedOn","getItem","go","$on","event","toState","toParams","fromState","fromParams","name","preventDefault","error","routeTo","config","$stateProvider","$urlRouterProvider","$touchProvider","backendProvider","apiUrl","ngClickOverrideEnabled","widgets","templateUrl","controller","navigation","otherwise","state","abstract","resolve","posConfig","views","header","content@","$log","debug","url","clerkLoginService","logout","left","middle","right","params","type","savedReceipt","rightMenuDisabled","screenChangeAction","$scope","emptyReceipt","receipt","$q","$translate","notification","isEmpty","then","translation","pop","reject","middle@root.split","right@root.split","cache","isBillingAddress","$asideProvider","extend","defaults","container","html","$logProvider","debugEnabled","$translateProvider","tmhDynamicLocaleProvider","localeLocationPattern","useStaticFilesLoader","prefix","suffix","useSanitizeValueStrategy","fallbackLanguage","preferredLanguage","ngToastProvider","configure","animation","timeout","additionalClasses","$animateProvider","classNameFilter","filter","propertyName","propertyValue","collection","i","len","precision","prototype","decimal","value","base","replace","isNaN","NaN","d","min","max","exp","ln","log","noConflict","pow","random","sqrt","moment","fn","toJSON","format","String","startsWith","str","slice","endsWith","Array","indexOfDecimal","toNumber","factory","$injector","replayRequest","deferredPromise","$http","get","response","replayRequestError","request","isApi","isVirtual","tokenService","headers","token","getToken","Authorization","id","virtualConfiguration","receiptPrinterMacAddress","labelPrinterMacAddress","responseError","rejection","status","getRequestTokenUrl","deferred","defer","registerTokenRequestedCallbacks","requestingToken","refreshToken","refreshError","promise","$httpProvider","interceptors","push","provider","tokenStore","refreshTokenStore","unauthorizedCallbacks","registerUnauthorizedTokenRequestCallback","callback","$get","tokenRepository","posStorage","indexdb","setRequesting","requestCallback","data","access_token","refresh_token","console","setToken","setRefreshToken","tokenRequestCallbacks","shift","requestError","doUnauthorizedCallbacks","requestRefreshToken","username","password","clientid","authorize","requestAuthToken","refreshAuthToken","setupToken","credentials","client_id","getTokenClientId","setTokenClientId","getRefreshToken","tokenRequestUrl","getUnauthorizedTokenRequestCallbacks","temp","set","remove","navigator","serviceWorkerConstants","terminalActionService","sales","cardTransactionStatus","initiateAction","serviceMethod","success","actionEventHandler","action","awaitingResponse","sessionId","getTerminalStatus","isCompleted","actionTemplate","partialsPath","deviceId","actionFeedback","displayText","bonText","printTerminalReceipt","result","cancelTransaction","canceledReceipt","terminalCancellationRequest","showError","prepareReceipt","newReceipt","getReceipt","items","payments","loadReceipt","negateReceipt","saveSale","saveResponse","completeSaleOnDevice","setCompleted","message","armDevice","devices","defaultArm","deviceName","shouldDisableInput","options","stop","terminalActionRepository","createAction","service","printTerminalJournal","from","to","printReceiptJournal","printSAFT","company","getSAFTFileName","asideButtonsTemplate","reconciliation","emptybuffer","canceltransaction","xreport","zreport","sendofflinetrans","printstoredeottrans","printlastreceipt","downloadapp","downloadcardagreements","validDates","toDate","maxDateInput","fromDate","ok","fromPlaceholder","toPlaceholder","toDateString","fromTerminal","toTerminal","_typeof","o","Symbol","iterator","constructor","_regeneratorRuntime","c","t","r","e","n","Object","defineProperty","enumerable","configurable","writable","h","Generator","a","create","Error","done","method","arg","u","delegate","f","sent","_sent","dispatchException","abrupt","s","Context","call","GeneratorFunction","GeneratorFunctionPrototype","g","forEach","_invoke","AsyncIterator","__await","TypeError","next","w","tryEntries","m","reset","x","hasOwnProperty","asyncIterator","toStringTag","wrap","l","p","getPrototypeOf","y","v","displayName","isGeneratorFunction","mark","setPrototypeOf","__proto__","awrap","async","Promise","keys","unshift","values","prev","charAt","rval","complete","finish","catch","delegateYield","asyncGeneratorStep","_asyncToGenerator","arguments","_next","_throw","apply","_fileSaver","require","_init","_callee2","translations","_context2","successMessage","companyNamePlaceholder","loadSAFTFile","encodeURIComponent","companyName","filename","myBlob","Blob","Result","saveAs","validCompanyName","subtract","_callee","_context","t0","t1","datepicker","date","_slicedToArray","_arrayWithHoles","_iterableToArrayLimit","_unsupportedIterableToArray","_nonIterableRest","_arrayLikeToArray","test","isArray","_require","cashStatements","eventBus","findCustomerService","_callee3","canProceed","firstClosureToday","translate","_context3","notifyAsync","events","cashStatementStart","i18nOffline","i18nPleaseWait","i18nWaitingForDrawer","i18nConnectorFailedTitle","i18nConnectorFailedText","undefined","openDrawer","currentUser","identifier","getDrawerStatus","currencies","reconcilations","entries","_ref2","_ref3","key","expectedInDrawer","reduce","acc","cur","plus","amountInDrawer","times","currencyValue","dividedBy","some","firstToday","ready","selectedIndex","apiOnline","isOnline","currentPaymentType","currentlyReconcilingPaymentType","getDeviceName","isSelected","setSelected","getCashStatementTotal","total","currency","local","covertValueToMachineCulture","statementTotal","div","getDrawerDiffFromExpected","minus","reconcilation","unitCounts","unit","count","amount","bank","eveningAmount","confirmModal","isVisible","openConfirm","confirmYes","submitCashStatement","confirmNo","cashDrawerInputs","element","cashDrawerInput","makeCashStatement","errorResponse","cancel","clearReceipt","removeSelectedCustomer","subscribe","cashstatement","failed","ev","retryModal","buttons","label","isDefault","closes","validateText","_action","submitCashStatementAndTransaction","title","description","directive","$compile","$templateCache","$locale","getTemplate","contentType","templateLoader","baseUrl","templateMap","foreign","custom","linker","scope","attrs","replaceChar","NUMBER_FORMATS","DECIMAL_SEP","removeGroupSeparator","indexOf","GROUP_SEP","newAmount","RegExp","i18nIllegalGroupSep","i18nRoundingHappened","content","enterCashPlaceholder","enterBankPlaceholder","enterEveningPlaceholder","cashUnit","unitAmount","unitQuantity","separator","setAmount","setAmountFromCount","updateCurrencyTotal","setCount","amunt","oldAmount","setCountFromAmount","Number","setBank","eveAmt","cashTotal","toSD","setEveningAmount","bankAmt","removeGroupSeparatorAndClearUnits","clearUnits","getUnitDisplay","toFixed","getDenominationDisplay","column","displayValue","selectNext","focus","restrict","isselected","currencyIndex","iscrollInstance","paymenttype","link","cashStatementRepository","transactionTypeEnum","saleRepository","isLocal","createUnitCount","units","loadConfig","getLocalCurrency","currencySetups","getCurrencySetup","paymentTypesToReconcile","getPaymentTypeConfigs","shouldReconcile","drawerIndex","morningAmounts","previousEveningAmounts","statements","find","includes","currencySetup","current","exchangeRate","morningAmount","previousEveningAmount","paymentType","payment","currencyCode","currencyName","map","pre","_ref","currenciesCopy","cashStatementResponse","toApi","copy","setArmId","getArmId","currencyEvening","currencyMorning","currencyBank","addItemGroup","cashStatement","addPayment","getTotal","rounding","code","completed","setTransactionType","CashStatement","zReport","XzReport","posReceipt","safeReceipt","DailyClosure","connectorId","connectorName","getArmName","closeReceipt","_x","_x2","notify","_x3","makeMorningAmount","submitMorningAmountResponse","submitMorningAmount","_x4","_x5","unitCountStr","unitAmountStr","flooredCount","floor","roundedAmount","newVal","getCashStatement","posId","receiptId","reprintCashStatement","newConfig","keypadManager","getMorningAmountTotal","selectNone","hide","clearCounts","zreportRepository","reprintLastZReport","getZReport","getCurrentDevice","mac","printZReport","xzReport","transformDaily","salesData","hours","hour","createEmptyDaily","chart","getSalesData","cachedFrom","cachedTo","lastCheck","isBetween","isSame","getWeeklySalesData","getMonthlySalesData","getYearlySalesData","getWeeklyBudgetsData","_ref4","_callee4","_context4","getMonthlyBudgetsData","_ref5","_callee5","_context5","getYearlyBudgetsData","_ref6","_callee6","_context6","_x6","cleanCashRepository","getCleanCashOptions","getShopFeatures","cleanCash","isCleanCashEnabled","ccOption","active","findCleanCashConnectorOption","selectedConnector","matchedOption","connectorOptions","connectorOption","cleanCashService","isCleanCashActiveForSale","canConnectToCleanCash","cvr","getCvr","cleanCashConnection","retailId","shopId","getCleanCashCode","generateNewCode","codeType","getCleanCashCodeIfActive","isCleanCashActive","when","toogleCleanCashStatus","canConnect","setDefaultDevice","oldDefaultDevice","instant","receiptType","put","clearLocalStorage","clear","getLocalStorage","ls","fluctuatingPropertiesHelper","setMaxPaymentAmount","maxAmountToPay","getMaxPaymentValue","price","maxAmount","i18nProperAmount","placeHolder","i18nGreaterThanTotal","addToReceipt","isZero","addAccountDeposit","downpayItemService","article","selectedArticle","stock","enableExendedData","stockValid","qtyReceived","qtyRequested","addItem","item","isStockValid","validateStock","isAvailable","quantity","maxQuantityOne","availableStock","downpayOrderService","reciptItems","templateType","downpaymentItem","book","removeDownpayment","splice","saveSuccess","addresses","customer","setSelectedCustomer","attach","isBooking","saveFailed","i18nCheckLog","countryData","getCountries","countries","editMode","getSelectedCustomer","formSubmitted","dropdownExpanded","countryDropdownExpanded","currencyCodes","countryError","userCanChangeCurrencyCode","emailPattern","toggleDropdown","toggleCountryDropdown","setCurrencyCode","setCountry","country","countryName","countryCode","saveCustomer","formState","lenght","isActive","addUpdateDownPaymentCustomer","downpayConfigService","validateAddress","addressLengthError","errorMessage","extendedAddressLength","address","address1","addressValidation","i18nInvalidAddress1","city","i18nInvalidCity","address2","address3","addressExtended","i18nInvalidAddressExtended","zipCode","i18nInvalidZipCode","i18nInvalidCountryCode","i18nNoCustomerSelected","getAddressValidationConfig","GetSelectedBillingAddress","selectedBillingAddress","getSelectedBillingAddress","useBillingAddressForShipping","saveAddress","customerId","isPrimaryBilling","isPrimaryShipping","externalUniqueId","addDownPaymentAddress","refreshSelectedCustomer","copyAddress","validateCountry","note","getBillingAddresses","billingAddresses","selectBillingAddress","setBillingAddress","createAddress","customers","getCustomerSearch","selectCustomerLine","customerEmail","i18nCustomerEmailInvalid","customerSearch","email","getCustomerByEmail","customerSearchMembership","membership","getCustomerByMembership","tenantFeatureRepository","whenReady","downPaymentEnabled","_","getWidgets","widget","loadShippingConfig","loadTenantConfig","shippingFeatureName","configFeatureName","addressFieldLenght","defaultShippingFeature","shippingFee","deliveryDateOffset","freeShippingOrderThreshold","defaultConfigFeature","postNewCustomer","postEditCustomer","postNewAddress","getStockFromClient","checkStock","displayArticleDetails","postTransactionData","checkAvailability","customFeautures","defaultAddressFieldLength","downPaymentShippingConfig","downPaymentTenantConfig","addressValidationConfig","isDownPaymentWidgetEnabled","dpoWidget","getTenantFetureByName","featureName","getShippingConfig","getTenantConfig","loadAddressValidationConfig","receiptHelper","getBookings","_getBookings","customerNo","decimalifyReceipt","receipts","i18nNoItems","i18nOne","i18nOther","i18nErrorEmailFormat","i18nPaymentFormat","i18nTotalToPayFormat","cashStatementTranslations","emailReceiptConfiguration","getOptions","askEmailReceipt","noteConfiguration","printTranslations","runningProcess","selectedReceipt","vatPersentage","selectLine","getReceiptVatTotal","selectedLineIndex","vNumber","getVNumber","printCopy","printReceiptCopy","err","payBooking","currentReceipt","setVNumber","setDownPaymentNo","getDownPaymentNo","setBookingPayment","setMaxPaymentValue","getBookingAmountToBePaid","getAmountToPay","getBookingPayments","emailReceiptCopy","getStringSafe","variable","trim","constructReceiptId","receiptObject","totalItems","sum","showReceiptDiscount","totalDiscount","getReceiptTotalDiscount","isNeg","getShopLocalCurrency","getTransactionType","fluctuatingProperties","transactionType","getPaymentDescription","getLineInfo","stockService","storeRepository","i18nOutOfStock","qty","configData","availabilityRequest","itemAvailability","toLowerCase","unitCode","getItemDimensionCode","itemCode","parameter3","shop","storeCode","getItemAvailability","available","getStock","stockCount","stockLookupRequest","stockLevels","selectedStock","_stockLevels","_selectedStock","variantCode","shopCode","getItemStockLevels","itemNo","locationName","quantityOnHand","getStockAllShops","shops","localStockLevels","getAllStores","selectedShop","shopName","itemDimensionValues","customerRepository","addressRepository","paymentService","addressHelper","countryRepository","articles","$filter","i18nCustomerNotFound","i18nCustomerUpdated","i18nCustomerInserted","i18nErrorCustomerUpdate","i18nErrorCustomerInsert","i18nCustomerNoUsed","i18nAddressInserted","i18nErrorAddressInsert","i18nInvalidBooking","i18nNoCustomer","i18nNoBillingAddress","i18nNoShipment","i18nSelect","i18nStoreNotFound","subscribeAsync","downpayment","openBooking","addDownpaymentConfirmation","showItemDetails","increase","addToReceiptBarcode","ean","showItemDetailsWithBarcode","finishTransaction","currentCurrency","sale","downPaymentPrint","printReceipt","close","clearReceiptAfterBooking","cancelled","detach","detachCustomerInDownpayment","beforeSelect","addCustomerRedirect","afterSelect","addBillingAddressRedirect","selected","cancelPaymentRestorereceipt","hasRecieptContainShippment","receiptItems","shippingIndex","findIndex","constructNextReceiptId","concat","padStart","_validateStock","_showItemDetailsWithBarcode","findArticleByEAN","_showItemDetails","_callee7","_context7","_printReceipt","_callee8","_context8","totalValue","bookWithoutDownpayment","setDownPaymentValue","setIsBooking","clearDownPaymentData","getPaymentType","validateAmount","makePayment","bookingContainDownpayment","downPaymentBooking","attachCustomer","emailAddress","getReceiptItems","addReceiptItems","downPaymentNo","downPaymentValue","errorHandler","billingAddress","shipment","setTransactionBookingType","clearTransactionBookingType","clearCustomer","getIsBooking","loadSelectedCustomer","custNumber","getCustomer","customerNumber","getCustomerByNumber","setCustomerSearch","birthDate","searchForCustomer","updateDownPaymentCustomer","addDownPaymentCustomer","clearBillingAddress","initShipment","homeDelivery","getShipment","shippmentConfig","getShippingFee","partialDelivery","lease","add","parseInt","canBeDeliveredEarlier","fee","updateShipment","homeDeliveryChanged","store","orderValue","getTotalWithoutShippingFee","parseFloat","setShippingFee","shipingValue","shipping","setShippingAddress","setShippingStore","clearShippingAddress","getStores","saveDownPaymentNoAndValue","downPaymentLine","voucherNumber","salesPrice","moveItemsFromReceipt","orderDataValid","checkBooking","shippingConfig","booking","customerCode","bookingNotes","lines","orderId","deliveryId","line","deliveryChangeDate","isLease","deliveryDate","netPrice","productCode","enteredText","_line","salesOrderId","languageCode","language","getByLanguageCode","saveShipping","removeLine","addShipment","getAddressString","uuid","delivery","deliveryAddress","deliveryValue","itemGroup","transactionNumber","orderNumber","totalOrderValue","remainingValue","print","showLineFullPrice","giftCertificate","changeCertificateValue","giftNo","generateGiftCertificate","getTotalWithoutDownpayment","addDownPaymentNote","getShippingAddresses","shippingAddresses","selectShippingAddress","stores","selectStore","i18nShipmentSaved","updateFee","selectAddress","itemgroup","$timeout","inputValidationService","priceField","numberField","targetValues","selectedItemLineIndex","placeholder1","placeholder2","getExpenseGroups","selectItemLine","search","no","convertToDecimal","filteredExpenses","addExpense","hideKeypad","nfShopFeature","norwegianFiscalisation","reprint","onReprint","reprintOffline","onAttemptReprintOffline","showingQty","onShowQtyAdj","itemDeleted","onLineDelete","onSaleCancelled","canDoCashStatement","login","drawerOpen","nf","reprinted","reprintsAllowed","effectiveSalesPrice","insertCancelledSale","insertDeletedLine","itemGroupName","_canDoCashStatement","parkedReceiptsResponse","getParkedReceipts","_drawerOpen","isDrawerOpen","sfShopFeature","swedishFiscalisation","sf","update","dotIndex","fracUnit","substring","addGiftCertificate","voucherRepository","padLength","pad","getPosId","incSeqNo","seqKey","getSeqNo","seqDateKey","resetSeqNo","today","usedDate","getDate","getTenantId","tenantIdKey","getSeqNoString","dd","mm","getMonth","yy","getFullYear","width","padding","join","generateGiftNo","addPadding","extVouchersFeature","externalVouchers","enabled","preview","giftCert","generateCreditVoucher","lastVoucherNoReceived","lastVoucher","seqNoFromLastVoucher","verifyGiftCertificate","giftCertificateNumber","setDateSpecificExpiry","receiptDate","expiryInDays","isGiftCertificate","getGiftCertificateExpiryInDays","getCreditnoteExpiryInDays","actualDate","utc","startOf","addKeyValue","isExpired","giftcertificate","expirationDate","toISOString","vouchernumber","repository","signReceipt","registerId","organizationNumber","storePayload","query","post","isCopy","registerStatus","infrasecRepository","$cookies","receiptData","settings","infrasec","copyCode","getInfrasecCopyCode","getMatchedOption","getTcsMatchedOption","controlUnit","getInfrasecData","infrasecResponse","responseCode","responseMessage","responseReason","isTcsEnabled","tcsOption","endOfDay","setHours","expires","path","setInfrasecDetails","controlCode","ctuid","requestID","sequenceNumber","IsTcsConfigured","signReceiptCopy","setInfrasecCopyCTUID","setInfrasecCopyCode","setInfrasecSequenceNumber","updateFluctuatingProperties","getItemGroups","sortByName","sortByNo","sortSelect","backToReceipt","filteredItemGroups","vat","taxCodeId","imageUrl","sortItems","itemgroupRepository","getAll","itemgroups","getAllExpenseGroups","expensegroups","_toConsumableArray","_arrayWithoutHoles","_iterableToArray","_nonIterableSpread","itemShortcutService","itemInfoService","getItemShortcuts","shortcuts","selectNewFolder","enableSerialNumberTracking","tenantGeneralPosSettings","i18nInvalidBarcode","i18nYesAnswer","i18nNoAnswer","getItems","folder","childItems","children","flatMap","navPath","currentFolder","availableFolders","availableItems","up","newFolder","ignoreNavPath","selectItem","resp","findArticleById","requiredToScanSerialNumber","repo","updateIndexDbCache","_updateIndexDbCache","updateShortcuts","isResolved","whenReadyDefered","whenReadyPromise","getShortcuts","infrasecService","chartService","getTranslations","invalidClerk","incorrectPass","welcome","loggedin","defaultButton","accumulatedButton","hourlyToday","hourlyLastYear","accumulatedHourlyToday","accumulatedHourlyLastYear","salesTarget","cleanCashTitle","cleanCashDescription","closeDrawer","loginClerk","_loginClerk","responseClerk","clerkNo","resetState","isLoggedIn","countdown","clerk","passwordVerified","welcomeClerk","handleInput","verifyPassword","clerkLoginState","clerkPwd","isValid","buildGraph","dataset1","dataset2","accumulated","detail","array","transform","currentValue","firstValueIndex","lastValueIndex","accumulate","trimmedCopy","trimEnd","labels","trimStart","arr","itemsRemoved","isDataAvailable","algorithm","serie","trimIndex","lowestTrimIndex","dataObject","lowestEndTrimIndex","graphLength","simpleBuild","todayData","lastYearData","budgetData","todaySerie","lastYearSerie","budgetSerie","month","todaySum","lastYearSum","budgetSum","currentBudgetData","graphData","posNumber","isAccumulated","ACCUMULATED_SAVE_KEY","lastTotal","lastChange","hideChart","chartBtnControl","radio","cleanCashConfirmation","chartTypes","freeze","hourly","weekly","monthly","yearly","selectedChartType","chartType","chartOptions","legend","display","position","responsive","maintainAspectRatio","scales","yAxes","ticks","input","tooltips","callbacks","tooltipItem","datasets","datasetIndex","yLabel","buttonStates","hideLastSaleDetails","logouter","counter","logoutCountdown","fullName","stopCounter","canLogin","allowLogin","responseStatus","storedDate","registerResponse","checkCleanCashOptions","checkCleanCashStatus","loadConfiguration","toggleCleanCash","wakeUpPaymentDevices","getChartData","todayLastYear","todayPromise","lastYearPromise","budgetPromise","results","budgetResult","todayBudget","simpleGraphing","_simpleGraphing","dataFunc","budgetFunc","todayBudgetPromise","all","clone","week","day","series","onClick","points","evt","clerkRepository","initiateLogin","firstName","lastName","doLogin","clerkLogin","setLangStoreCookies","saveLogin","clerkKey","setButtonStates","updateClerks","clerks","updateClerk","sha256","_x9","_x0","_sha","clerkId","clearTextPassword","buf","msgBuffer","strLen","hashBuffer","hashArray","hashHex","ArrayBuffer","Uint16Array","charCodeAt","crypto","subtle","digest","Uint8Array","b","toUpperCase","setLanguage","getClerk","hash","disableBroadcast","resetLanguage","getButtonStates","clerkRole","getRole","roleId","startManagerVerification","isManager","flowDeferred","managerVerificationRequested","eventPointer","managerVerificationResponse","validateClerk","correctPassword","hashedInput","pin","startClerkVerification","clerkVerificationRequested","clerkVerificationResponse","_x7","_x8","noAuthStates","i18nErrorInput","btn","save","details","houseNumber","postalCode","defaultAction","_$scope$content","_$scope$content2","i18nErrorInputLength","i18nErrorInputValueFormat","i18nErrorInputValueRange","prefilledValue","vm","inputText","toaster","clicked","inputMin","validationPattern","regex","patternErrorMessage","isValueInput","minValueInput","maxValueInput","defaultBtn","oldVal","allowedCharacters","newChar","inputMax","transclude","modalInputFocusRequested","inputs","querySelector","validateQuantity","remainingQuantity","selectall","deselectall","_$scope$content$retur","warningShown","itemIsSelected","returnReasons","returnCode","orgWeborder","global","jQuery","$","StackTrace","signalR","Quagga","Dexie","LogRocket","app","auth","token.interceptor","token.service","cardterminalactions","cardterminalaction.controller","cardterminalaction.service","cardterminalsetuprightmenu.controller","journals.controller","saft.controller.","cashstatement.controller","cashstatement.directive","cashstatement.service","morningamount.controller","zreport.service","chart.service","cleanCash.service","debug.controller","depositaccount","depositaccount.controller","article-details.controller","check-downpayment.controller","edit-customer.controller","new-address.controller","select-billingaddress.controller","select-customer.controller","serach-customer.controller","downpay-config.service","downpay-find-booking","downpay-item.service","downpay-order.service","downpay-print.controller","downpaymentcertificate.controller","shipment-address.controller","shipment-store.controller","shipment.controller","stock-lookup.controller","expense","expense.controller","fiscalisation","norwegian-fiscalisation.service","swedish-fiscalisation.service","giftcertificate.controller","giftcertificate.service","infrasec.repository","infrasec.service","itemgroup.controller","itemgroup.service","itemshortcuts","itemshortcuts.controller","itemshortcuts.service","clerklogin.controller","clerklogin.service","modal","giftaidModal.directive","posModal.directive","returnModal.directive","voucheractionModal.directive","voucherModal.directive","weborderModal.directive","modules","account.paymenttype","cardtransactionstatus.service","continuationResults.enum","default.paymenttype","defaultcard.paymenttype","defaultvoucher.paymenttype","downPayment.paymenttype","intersolve.paymenttype","mobilepay.paymenttype","payment.controller","payment.service","paymentFinished.controller","paymenttype.directive","payplaza.paymenttype","paywidget.controller","receiptCompleter.paymenttype","reconcile-paymenttype-choice.controller","rightmenupay.controller","sale.service","trimit.paymenttype","verifone.service","picklist","picklist.controller","picklist.repository","picklist.service","discountoptions.repository","discountoptions.service","discountreasons.service","findreceipt.controller","labeltemplates.service","parkreceipt.controller","receipt.controller","receipt.service","receiptitem.directive","returnreasons.service","transactionTypes.value","revide","revide.integration.controller","revide.integration.repository","searcharticle","searcharticle.controller","selectDimensionCombo","selectDimensionCombo.controller","selectDimensionCombo.service","sellasset","sellasset.controller","set.service","shared","articles.service","aside.service","autofocus.directive","backdrop","backdrop.directive","backdrop.service","backend.module","offlinedevice.service","sale.repository","voucher.repository","widgets.repository","buttonState","buttonState.directive","connector","connector.service","connectorLock.service","giftPrintingOption.value","gifts.service","errorService","eventBus.service","eventBus.value","flipToggle.directive","fluctuatingProperties.service","fullscreenMode.service","globalinput.directive","header.controller","healthChecker.service","idlechecker.service","indexdb.service","input-popup.directive","input.service","inputvalidation.service","itemInfo","itemInfo.repository","iteminfo.service","itemInfo.values","keypad","keypad.directive","momentFormat.value","notification.service","notificationmessage.directive","offlinechecker.interceptor","portal.service","posconfig.service","posstorage.service","quagga.service","returnReceipt.service","rightmenunav.controller","signalr.service","slideAction.directive","solid","solid.service","storeNamespace.factory","toggleNavigation","toggleNavigation.directive","toggleNavigation.service","userAgent","useragent.directive","useragent.service","utility.directive","utility.services","version.service","voucher","voucherMessageService","voucherModalsService","voucherService","weborder","pickweborder.controller","pickweborder.values","weborder.service","weborderView.directive","articleStatistic.widget","coreloyalty.service","customer-display.widget","customerorder.service","customerorder.widget","downpay-order.widget","dummy.widget","find-customer.service","find-customer.widget","insurance.service","insurance.values","insurance.widget","kega.service","kega.widget","logo.widget","loyalty.service","loyalty.widget","loyaltyintersolve.service","loyaltyintersolve.widget","loyaltystaticdiscount.service","masteritemstock.service","mpaddaddress.service","mpaddaddress.widget","mpcustomer.widget","mpcustomerorder.widget","mpeditcustomer.widget","mpeditinsurance.widget","mpproductimage.widget","mpstock.widget","mpweborder.widget","payplaza.service","payplaza.widget","pricepromotion.service","pricepromotion.widget","productimage.widget","quagga.widget","revide.service","revide.widget","stock.service","stock.widget","store.service","trimit.service","trimit.widget","trimitnewcustomer.widget","trimitweborder.widget","weborder.widget","widgets.controller","widgets.directive","widgets.factory","widgets.mainpane.controller","xreport.controller","logRocketCookieValue","injector","defaultPaymentType","isUsingTrimit","trimitWidget","validateBalance","remainder","chargeToCompany","creditLimit","balance","currentBalance","remainderInAccountCurrency","convertToCurrency","creditLimitDecimal","newBalance","lt","unboundCreditLimit","exceeds","abs","text","i18nCreditLimitExceededCompany","i18nCreditLimitExceeded","i18nCreditLimitExceededTitle","validateCurrency","currencySetupForShop","contextInfo","currentCustomer","isAmountInvalid","getPaymentsTotal","isNegative","neg","paymentStatus","gt","paymentState","validatePaymentChoice","choice","validationResults","getChargeToCompany","start","isInProgress","val","signatureRequired","referral","giftsService","containsCashPayment","containsChangePayment","selectedPaymentDevice","defaultDeviceIndex","isStatic","addPaymentToReceipt","isPaymentEnough","itemsTotalAbs","paymentsTotalAbs","gte","doRounding","diffCanBeRounded","round","getPaymentCorrection","roundingState","roundingResponse","roundingError","doChange","changeNeeded","change","lowestUnit","eq","changeState","changeResponse","changeError","finishReceipt","_finishReceipt","totalPayed","finalRounding","giftReceipt","updateProperties","completeOnDevice","getGiftReceipt","activateVouchersInReceipt","printGiftDocumentation","guaranteedFinishReceipt","verifoneService","continuationResults","i18nSurcharge","i18nTranslations","i18nPopupHeading","handleCardPayment","cardPayment","paymentDeviceId","cardReceipt","cardNumber","cardId","cardName","popupText","surchargeAmount","surcharge","persist","rejected","cardStatus","continuationResult","startVoiceReferralFlow","startSignatureFlow","cancellationEvent","abortCardPayment","cardPaymentRejected","cardOffline","errorText","cardRejected","allowPaymentCardOvercharge","receiptTotal","paymentTotal","amountDec","lte","payRemainderWithVoucher","findLastUsedVoucherNo","greaterThan","flucProp","voucherPayments","getExpirationDateFromOldVoucher","sort","keyboardInput","voucherNo","barcodeIsDefinedAsVoucher","createVoucherPayment","alternativeVoucherNumber","getDownPaymentValue","paymentCustomerAccount","_paymentCustomerAccount","zero","valueToPay","accountPaymentState","addAccountPaymentToReceipt","signalr","$emit","loyaltyIntersolveService","getSumOfNettoItems","loadAttachedCustomer","loyaltyCustomer","intersolveAttrib","createIntersolveAttributes","isIntersolve","refPos","ticketNumber","handleIntersolveTransaction","subtractBalance","intersolveResponse","noErrorMessage","thisReceipt","thisDate","milliseconds","getTime","lastNumberOfYear","paddedPosId","padWithZeros","paddedReceiptId","number","paddedString","backendHelper","_callee0","mobilePayShopFeature","mobilePayPoses","currentConnectorMac","mobilePayPos","_context0","mobilePay","pointOfSales","ConnectorId","MobilePayPosId","vatNumber","initialized","loopingPaymentStatuses","paymentId","refundId","isRefund","receiptLocal","returnReceiptNumber","getRefundId","getPaymentId","handlePayment","paymentResult","mobilePayPayment","retry","pollPaymentStatus","cancelPayment","_yield$service$getPay","pollDelayInMs","getPayment","setTimeout","idempotency","_yield$service$loopRe","v4","loopRequest","plannedCaptureDelay","xMobilePayIdempotencyKey","ignoreError","originalOrderId","refundOrderId","_yield$service$loopRe2","mobilePayMerchantVATNumber","_ref7","_x1","capturePayment","_ref8","captured","_x10","endpoint","body","initialFailureTranslation","attempts","_loopFn","_ref9","_callee9","_context9","_x11","promptEveryType","coreLoyaltyService","handleStateParam","amountSuggestion","setPaymentChoice","validateChoice","getRemainder","currencyDenominations","getDenominations","IsNumericOnly","show","handleDenominationClick","paymentChoice","isPayingWithVoucher","selectAll","currencyChoice","notes","handlePaymentSignalTranslation","interpolation","paymentSignal","voucheri18nLabel","isVoucher","keepKeypadOpen","checkPaymentType","checkAmountSuggestion","checkAmountDecimal","totalAmount","JSON","stringify","enableMaxCashPayment","maxCashPayment","totalCashPayments","getPaymentTypeTotal","i18nMaxCashPayment","resetPaymentChoice","setIsPaymentProcessing","saveSaleHandler","finishPaymentValidation","hideSpinner","amountDecimal","handleOfflineCardPayment","authenticationCode","requestOfflineCardAuthCode","finishSaleModal","finishTimeout","finishSale","receiptContainsSerializedItemsWithoutSerialNumber","getSerialNo","setupErrorHandlerMapping","errorHandlerMapping","INVALID_AMOUNT","infoMsgHandler","INVALID_FORMAT","INVALID_TYPE_AMOUNT","i18nInvalidTypeAmount","VOUCHER_USED_ON_RECEIPT","errorMsgHandler","i18nVoucherUsedOnReceipt","VOUCHER_EXPIRED","i18nVoucherExpired","VOUCHER_NOT_FOUND","i18nVoucherNotFound","VOUCHER_CONFLICT","i18nVoucherConflict","VOUCHER_ERROR","i18nVoucherError","i18nVoucherFaulty","INVALID_CREDITNOTE_AMOUNT","i18nInvalidCreditNoteAmount","INVALID_PAYMENTDEVICE","i18nInvalidPaymentDevice","PAYMENT_AMOUNT_EXCEEDS_REMAINING_AMOUNT","i18nOvertenderNotAllowed","NO_CUSTOMER_SELECTED","i18nSelectCustomer","ISSUE_GIFT_CERTIFICATE_CHANGE","i18nCannotIssueGiftCertificateAsChange","CUSTOMER_NO_ACCOUNT_CURRENCY","i18nNoAccountCurrency","CUSTOMER_ACCT_CURRENCY_NOT_SETUP","i18nNoExchangeRateBetweenAccountCurrencyAndLocal","OVERCHARGE_NOT_ALLOWED","i18nOverchargeNotAllowed","LOYALTY_OVERCHARGE_NOT_ALLOWED","i18nLoyaltyOverchargeNotAllowed","LOYALTY_OVERPAY_NOT_ALLOWED","i18nLoyaltyOverpayNotAllowed","LOYALTY_GIFTCERTIFICATE_PURCHASE_NOT_ALLOWED","i18nLoyaltyGiftCertificatePurchaseNotAllowed","CARD_FAULT_STATE","i18nCardFaultState","MOBILEPAY_NOT_SETUP","i18nMobilePayNotSetup","MOBILEPAY_INVALID_REFUND","i18nMobilePayInvalidRefund","_errorResponse$respon","showWarningIfLoyaltyNotConfigured","loyaltyRatios","loyalty","ratios","ratioCurrencyToPoint","ratioPointToCurrency","isShopExcluded","i18nLoyaltyNotConfiguredText","initiateNavigation","reload","checkTerminalModal","getLoyaltyConfiguration","paymentTypes","quickCashAvailable","quickCardAvailable","verifoneVoiceApproval","args","verifoneVoiceModal","descriptionPlaceholderValues","activeElement","getRegisteredInput","activeOnEnter","getRegisteredOnEnter","verifoneSignatureApproval","verifoneSignatureModal","setGiftAidDetailsData","giftAidDetailsModal","getTransactionGiftAidTitle","getTransactionGiftAidFirstName","getTransactionGiftAidLastName","getTransactionGiftAidHouseNumber","getTransactionGiftAidPostalCode","itemLine","paymentLine","paymentIndex","saleFinished","moneyRemainder","onehundred","i18nGiftCertificateInvalid","i18ncantNavigate","i18nCloseDrawer","$onInit","t2","t3","executeItemInfo","transaction","showGiftAidModal","isItemGiftAidable","isGiftAidable","giftAidModal","removeTransactionGiftAidProperties","isNavigationBlocked","retryPayment","recoverCardPayment","newValue","translateKey","checkVoucherNumber","rounded","shouldShowChangeInfo","selectPaymentline","selectedPaymentline","showLinePrice","showLineDiscountPct","paymentInputRequired","numericOnly","numpad","detachCustomer","emailReceiptIsDefault","stayLoggedInAfterSale","finishSaleWithoutLogin","msgHandler","goToPayment","currentDevice","terminalType","hasTextInput","verifone","voiceReferralApprovalResponse","registerInput","signatureApprovalResponse","containsDownPayment","voiceReferralApproval","signatureApproval","setGiftAidable","headertext","firstname","lastname","housenumber","postalcode","setTransactionGiftAidDetails","defaultVoucherPaymentType","defaultCardPaymentType","receiptCompleterPaymentType","accountPaymentType","mobilePayPaymentType","downPaymentPaymentType","getPaymentAmountSuggestion","suggestionName","remainingAmount","receiptService","remainderRounded","salesService","isPaymentTypeBlocking","currentPaymentTypes","blockedPaymentTypes","j","removePlaceholder","isSuccess","promiseCallback","removePayment","newResponse","paymentLines","strategies","default","responseSteps","validatePaymentAmount","accountPayment","defaultDiffCorrection","defaultVoucher","defaultDownPayment","defaultCard","foreignVoucher","receiptCompleter","isPaymentProcessing","getIsPaymentProcessing","isProcessing","getPaymentStrategies","setPaymentStrategy","strategy","getBlockNavigationPaymentTypes","isCancellationBlocked","getBlockCancellationPaymentTypes","typeName","getPaymentTypes","resolvePaymentStrategy","paymentStrategy","paymentPlaceholder","displayType","step","fakeResponse","cancelVoucherPayment","webOrderWidgetService","setIsPrinting","isPrinting","gotoStartScreen","i18nFinishedErrorText","i18nFinishedSuccessText","i18nFinishedSuccessTitle","emailRegEx","paymentEmail","savedItemlines","savedPayments","donePrinting","evnt","emailReceipt","successText","weborderModal","getWeborderModal","showWebOrderModal","showWebOrderModalFromReceipt","showDispatchNoteButton","Card","Currency","payPlazaCard","Placeholder","MobilePay","scrollToElement","timeoutTime","scrollIntoView","islast","showButton","changeButton","getLocalAmount","resumeCardPayment","removeline","cancelPayPlazaTransaction","cancelIntersolvePayment","isAborting","showAbortButton","abortMobilePayPayment","resumeMobilePayPayment","paymentscroll","i18nPayPlazaErrorTitle","i18nPayPlazaErrorMessage","posProxy","payPlazaHub","on","paymentGuid","terminalIPAddress","terminalPortNumber","WebSocket","payplazaService","getEftId","isPayPlaza","handlePayplazaTransaction","getLastReceipt","orderRef","transactionSucceeded","appPreferredName","formattedReceipt","payPlazaResponse","notifyClerkIfSignatureRequired","sendPayPlazaTransaction","handleError","printPayPlazaTerminalReceipt","acknowledgePayment","payPlazaReceipt","fromJson","printCommandMessage","ConnectorService","connectorLockService","updateDisableSelection","paymentCount","disableSelection","selectedArmDevice","isConnectorLocked","isLocked","connectors","getConnectors","filterConnectors","connectorIsSelected","connectorIndex","deviceIndex","setDefaultArm","armIndex","extraPayments","selectedPaymentType","newSelectedPaymentType","idx","accountPaymentIndex","i18nExpensePaymentTypeNotAllowedBody","i18nExpensePaymentTypeNotAllowedTitle","navigationElement","ownKeys","getOwnPropertySymbols","getOwnPropertyDescriptor","_objectSpread","_defineProperty","getOwnPropertyDescriptors","defineProperties","_toPropertyKey","_toPrimitive","toPrimitive","payPlazaRepository","pushSale","queue","SALE_STORE","getPaperStatus","PrinterPaperStatus","tryUnloadSaleQueue","unload","popReceiptQueue","armId","notDelivered","startSaleUnloader","cleanCashCode","saleUnloader","UNLOAD_FREQUENCY","currencyIdentifier","isChange","groupId","handleSavedSale","finishedReceipt","storeItemInfoResponses","stashReceipt","finishingReceipt","completingOnDevice","updateReceipt","finalizeReceipt","receiptIsSigned","completeSale","incrementReprint","equals","smallestUnit","wholeNumber","absoluteValue","diff","mindist","lessThan","lessThanOrEqualTo","roundedDecimal","roundedValue","reprintReceipt","rec","receiptFromBackend","notifyEvent","receiptFromConnector","defaultPrevented","getPayPlazaTerminalStatus","stopSaleUnloader","getAllDevicesReceipts","skip","pageSize","getReceipts","allShops","page","includeLoyaltyData","getReturnedQuantities","transactionUuid","printGiftReceipt","exchangeBarcodes","printingPromise","printingFunc","isGift","barcode","returnArray","_loop","merge","exLblIdx","lbl","transactionLineUuid","exchangeBarcode","setExchangeBarcode","printGiftLabel","_loop2","itemData","parameter1","itemDescription","parameter4","itemVariantDescription","parameter8","parameter9","parameter10","parameter11","parameter12","variantId","exchangeExpiryDate","giftLabelTemplateId","receiverEmail","terminalReceipt","makeLoyaltyPayment","trimitService","paymentResponse","loadCustomer","bonusAmount","makeAccountPayment","responseHandler","splitDisplayTextParameters","curr","textInput","approved","picklistService","validateInputs","picklistInvalidInputs","picklistTypeByVendors","picklistTypeByProducts","picklistOrderByItemNo","picklistOrderByItemName","picklistOrderByItemDescription","picklistOrderByVendorItemNo","picklistDefaultConnectorTitle","picklistDefaultConnectorMsg","order","orderDropdownExpanded","printPicklistForConnector","pickList","printPicklist","picklistTimestamp","orderBy","listType","getPicklistTimestamp","endOf","printFromLastPrint","getLastPrintDate","untickPrintFromLastPrint","toggleOrderDropdown","setPicklistTypeByVendors","picklistType","setPicklistTypeByProducts","setPicklistOrderByItemNo","picklistOrder","setPicklistOrderByItemName","setPicklistOrderByItemDescription","setPicklistOrderByVendorItemNo","getPicklist","creationDate","picklistRepository","discountOptions","getDiscountOptions","discountOptionsRepository","turnOnOverlay","discountMethod","receiptReasonItems","setDiscountOnAll","receiptDiscountOverlay","overlay","getDiscountReasons","getReceiptDiscountReasons","discountToApply","lineDefaultFunction","discountDetails","discountReasonsSelector","defaultFunction","applyDiscountReason","discountReason","getFilteredDiscountReasons","lineDisciount","percentageDiscount","discountTypeSelection","returnReceiptService","_getReceipts","currentPage","fetchMore","_getCashStatement","currentCashStatement","PAGE_SIZE","emailRegex","getConnectorName","getDeviceById","returnReceipt","loadedReceipt","showReturnModal","printGiftCopy","initGiftCopy","getGiftExchanges","giftCopyInfo","resendEmailReceiptModal","i18nEmailSent","i18nInvalidEmail","returnModal","getReturnModal","showFilters","searchAllShops","showItemDiscount","getLineDiscountPct","itemDiscount","getTotalGroup","group","getTotalCashSale","cashSales","calculateExpectedInDrawer","totalCashSale","morning","calculateTotalInDrawer","evening","insertedInBank","bankCash","printCashStatementCopy","dailyClosure","getLabelTemplates","labelTemplateDeffered","selectLabelTemplate","hasLabelTemplates","printLabelTemplate","labelTemplate","dismissed","receiptBox","putToClerkDictionary","receiptsBoxes","i18nParkedReceipt","getClerkName","isObject","deleteParkedReceipt","deleteParkedNote","discountReasons","quaggaService","selectDimensionComboService","discountOptionsService","startQuaggaScanner","quaggaScanner","stopQuaggaScanner","quickCashDisabled","IsQuickCashButtonDisabled","quickCardDisabled","IsQuickCardButtonDisabled","paymentDisabled","IsPaymentButtonDisabled","loadDiscountOptions","_loadDiscountOptions","_response$data$","_response$data$2","discount10","discount20","discountAmount","toggleButton","func","signalText","containsDiscountableItem","serialNo","inputValue","switchValue","activeFunction","forceNumpad","globalInput","buttonStatesList","setArticlePrice","salesPriceInput","activateDefaultFunction","i18nPromtForPriceWarning","handleSerialNumberResponse","serialNumberResponse","serialNumber","hasSerialNo","setItemAsSerialized","i18nSerialNumberDoesNotMatchVariantId","setArticleSerialNumber","_setArticleSerialNumber","requestCompleted","receiptItem","addAwaitingResponse","i18alreadyScanned","findArticleBySerialNumber","userResponse","executeSerializedNotFoundItemInfo","addArticleToSerialNumberRepository","removeLineCustomerOrder","removeAwaitingResponse","setClerkId","i18nInvalidClerkId","setLineAmountDiscount","discount","getSelectedLineTotal","i18nAmountLtProduct","calculateDiscountPercentage","selectedReasonCodes","setLineDiscount","keepInput","i18nEnterBarcode","setCustomPercentDiscount","pctDiscount","i18nProperAmountPercent","i18nNoMoreDiscount","i18nDiscountLt100","setLinePrice","newPrice","i18nProperAmountNull","setExchangeExpiryPeriod","newExpiryPeriod","setTotalPercentDiscount","pctDiscountTotal","i18nInRange","setReceiptPercentDiscount","isPercentage","setReceiptAmountDiscount","setTotalAmountDiscount","discountTotal","setNewPriceTotal","totalPrice","setCustomQuantity","setLineQuantity","i18nMaxQtyExceeded","i18nMaxAmountExceeded","_addToReceipt","hasExpenseItems","i18nExpenseLine","categorizeBarcode","_categorizeBarcode","promotionPrefix","getPromotionBarcodePrefix","promotionBarcodeScanned","getPricefromCode","errorMsgAndActivateDefault","i18nNonEmptyReceipt","getReturnReceipt","getItemLineFromExchangeBarcode","showVoucherModal","getItemline","_getReturnReceipt","_callee1","_context1","getSavedReceipt","noteCancel","i18nUnableToCancelTitle","i18nUnableToCancelBody","createCancellationReceipt","doNotChangeUuid","separatorMatch","match","i18nInvalidReceiptNumber","ids","loadSavedReceipt","msg","getBySerialNumber","getByBarcode","findArticle","setMasterItemData","setCallBack","findArticleByExchangeBarcode","_response$data","giftExchange","usedOn","i18nBeAware","i18nExchangeLabelUsed","isBefore","i18nExchangeLabelExpired","setReturnTransactionLineId","getCurrentTransactionType","mulength","finalPrice","priceString","convertValueToRegionalFormat","addTextLine","addEnteredText","awaitingResponses","eventHandlers","i18nLineNewPrice","i18nTotalNewPrice","i18nTotalPct","i18nTotalAmount","i18nEnterAmount","i18nEnterDiscount","i18nEnterText","i18nEnterClerkId","i18nConfirmSetDeletion","i18nEnterQuantity","i18nInputToCancelPlaceholder","i18nReturnReasonError","i18nChangeExpiryPeriod","i18nManagerVerificationDenied","i18nScanSerialNumber","i18nSerialNumberDoesNotMatchMask","setCallback","quagga","disable","enable","canShowQtyAdjustments","clearItemInfoTransactionData","isReceiptEmpty","childscope","Math","removeItem","allowedStates","getDefaultExpiryPeriodType","haveReturnReasons","returnReasonsSelector","setReturnReason","removeReturnReason","changeSalesType","setIsGift","setHasSerialNo","setOrderInStore","setExcludeFromLoyalty","confirm","cancelLineDiscount","selectSetNo","eventHandler","inputBlurHandler","selectedSetNo","totalPercent","cancelAllDiscounts","cancelAllDiscount","cancelReceiptDiscounts","doRecalculations","setDiscountOnTotal","toBroadcast","itemSelected","receiptPercentDiscount","receiptAmountDiscount","getTotalWithoutDiscount","getDiscount","getCurrency","containsDiscounts","receiptHasDiscount","containsTotalDiscount","receiptHasTotalDiscount","containsExpenses","IsPaymentButtonActive","IsCompleteTransactionButtonActive","ShowCompleteTransactionModal","completeTransactionModal","returnRequireManager","receiptContainsReturns","onlyManagersCanDoReturns","forceGetConfig","goToBooking","webOrderService","costPrice","calculatedDiscount","k","selectDiscountedItemLine","selectLastItemLine","lastIndex","createEmptyReceipt","getReceiptId","dataType","clerkNumber","clerkName","chargeCompany","persistReceipt","currentPosUser","exchange","shopCurrencyCode","setLastUsedReceiptId","currentId","modifyQuantity","itemIndex","changeValue","modifier","saleType","previousQuantity","roundingDiff","negateItem","returnType","checkIfOrderInStoreAndSet","isOrderInStore","getWebOrderType","getLocale","i18nTotalDiscountsLeft","i18nWeborderPayment","i18nAccountDeposit","i18nDeductLoyalty","i18nDownPayment","i18nShipment","discountExcludes","nonPersistantDiscountTypes","totalQty","previousQty","isDiscounted","reCalculateDiscounts","populatedReceipt","receiptIds","deviceReceiptId","apiReceiptId","clientReceiptId","lastReceiptId","populateMissingItemProperties","generateUUID","containsDeactivatedVoucher","receiptClone","parse","newValues","receiptCopy","getChangeTotal","overrideAutoaggregate","autoAggregateItemLines","giftAidAttributeId","attribute","getGiftAidAttributeId","itemAttributeValues","customAttributeId","attributeValue","setItemAsGiftAidable","serialButtonIsVisible","discountCode","insuranceNumber","itemType","object","itemgroupName","addWebOrder","orderNo","webShopId","isNetto","source","webOrderNumber","setWebshopId","addCustomerOrder","customerOrder","_this","customerOrderTotalToPay","customerOrderLines","setCustomerOrderNo","lineTotal","isPaid","isGiftCert","disableDiscount","getGiftCertificateVat","getCreditNoteVat","addVoucher","parameter2","containsVoucher","downPaymentIndex","addInsurance","addSet","removeset","setNo","itemUuid","setWebOrderType","isExcludedFromLoyalty","setIsExcludedFromLoyalty","lineIndex","addToDiscountList","setItemDiscountPercentage","_item$discountDetails","discountReasonName","reason","saveLineDiscount","discountValue","roundToAllowedDecimalPlaces","oldEffectiveSalesPrice","totalEffectiveSalesPrice","totalCalculatedSalesPrice","totalSalesPrice","totalDiscountPercent","discountType","originalDiscountAmount","calculateEffectiveLineDiscount","excludedFromDiscountAmount","sumOfIsNettoItems","sumOfDisabledDiscounts","sumOfReturnAdditionalItems","excludeFunc","amountLeftToPay","receiptDiscounts","getReceiptDiscounts","currItem","currItemDiscounts","currentDiscount","newDiscount","discountsToReapply","discountableItems","discounts","singleItem","head","negativeQuantity","quantityChange","getSalesPrice","createReturnReceipt","cancellationReceipt","receiptInstance","returnReason","returnReasonName","setReceiptReturnReason","parkCurrentReceipt","parkReceipt","optionalReceipt","itm","getItemById","itemId","matchedItems","addLoyaltyCustomer","getLoyaltyCustomerNumber","hasTotalDiscount","isDiscount","localTimeOffsetMinutes","getTimezoneOffset","setTransactionAsGiftAidable","isTransactionGiftAidable","setTransactionGiftAidTitle","setTransactionGiftAidFirstName","setTransactionGiftAidLastName","setTransactionGiftAidHouseNumber","setTransactionGiftAidPostalCode","requestId","organisationNumber","setInfrasecCTUID","setInfrasecCode","setInfrasecRegisterId","setInfrasecRequestId","setInfrasecOrganisationNumber","giftPrintingOptionValue","creditNote","setStart","setEnd","deleted","insurance","accountdeposit","downPayment","shipmentTemplate","setTemplate","applyDiscountWithReason","discountAction","i18nCantAddDiscount","i18nItemHasDiscountBlocked","applyDiscountPlainDiscount","setupOrderInStore","shopFeatures","webshop","orderInStoreWebShop","orderInStoreEnabled","promtForPrice","requiredToEnterManualPrice","didPromtForPrice","promtForSerialNumber","didPromtForSerialNumber","evaluateShowExcludeFromLoyaltyBtn","showExcludedFromLoyaltyBtn","downPaymenttWidget","showStockLookupButton","i18nOrderInStoreErrorNoCustomer","i18nOrderInStoreNotEnabled","i18nOrderInStoreNoShippingAddress","i18nCantChangeItemPrice","i18nCantChangeQuantity","i18nItemHasQuantityRestriction","maxClerkIdLength","deleteTimeout","RESTORE_SECONDS","expiryPeriod","getDefaultExpiryPeriod","showExchangePeriod","giftPrintingOption","showExpiryPeriodDate","minimunExpiryPeriodDateInput","getDefaultExpiryPeriodDate","oldValue","applyDiscount","canDelete","showDelete","lineprice","exchangeExpiryPeriod","amountdiscount","customdiscount","tenpercent","twentypercent","addone","removeone","returnitem","addtext","isDeactivatedVoucher","cancelDeactivatedVoucher","succeeded","confirmDeletion","restoreLine","removeWeborderLine","resetLines","customquantity","canceldiscount","toggleGiftState","toggleSerialNoState","toggleOrderInStoreState","getSelectedShippingAddress","toggleExcludeFromLoyalty","stockLookup","toDecimal","getLineEffectiveSalesPriceTotal","getLineSalesPriceTotal","isLineDiscounted","includesLineDiscount","showDiscountButton","receiptReturnOverlay","getReturnReasons","getReceiptReturnReasons","itemDeffered","receiptDeffered","returnReceiptReasonsSelector","applyReturnReason","applyReceiptReturnReason","blur","haveReceiptReturnReasons","return","RevideIntegrationController","revideRepository","hideDivSuppressor","buildCustomerSearchParameters","searchParams","socialSecurityNumber","phonenumber","findCustomer","searchResult","findCustomerBySsn","handleCustomerResult","findCustomerByEmail","findCustomerByPhoneNumber","searchCustomer","target","after","fetchFailed","showSearch","paginationSize","showFilter","memberNumber","$inject","apikey","ssn","phoneNumber","postTransaction","setService","labelTemplates","printRepository","fetchSuccess","fromOfflineCache","disableInfiniteScroll","fetchError","products","i18nOfflineCache","fetchFinally","labelQuantity","stateParamsContext","context","searchValues","searchItems","addSetItem","back","printLabel","selectedLabelTemplate","successMsg","errorMsg","getMoreItems","searchByParameter","masterItem","getMasterItemData","dimensions","attributes","dimensionName","noOfDimensions","dimension","valueSequence","dimensionValue","dictTemplate","selections","offsets","select","isDisabled","selection","isReadyToProcceed","calculateMaxOnPage","maxOnPage","innerHeight","pageUp","pageDown","currentValidItems","articleResponse","callCallBack","clearMasterItemData","mi","cb","barcodePlaceholder","i18nUnknownEan","i18nGrtThanTotal","i18nMoreThanOne","i18nSetPrice","selectedSetLine","pricePlaceholder","getSet","instance","refresh","scrollTo","maxScrollY","evaluateSet","setPrice","resetField","clearSet","displayItems","isEffectiveLessThanSalesPrice","selectSetLine","deleteSetItem","removeSetItem","setSetPrice","getSetTotal","getSetPrice","added","addSetToReceipt","persistSet","correctRoundingDifference","topItem","setTotal","articleRepository","serialNumberRepository","decodeSalesPrice","allowPriceEmbeddedBarcode","findSerialNumberByItemId","getOfflineArticleByEAN","innerError","dateCreated","serialNumbers","getOfflineArticleById","setExchangeLabelBarcodeScanned","searchString","findByBarcode","findByItemNo","printBarcodesToConsole","getEANs","loadOfflineArticles","getOfflineArticles","updateCache","$aside","Aside","theScope","defaultOptions","defaultAsideTpl","defaultAside","placement","theAside","$promise","isShown","$isShown","ele","backdropTarget","backdropElement","backdropContainer","exists","append","verifyBackdrop","backdropBool","getConnectorUrl","deviceUrl","listeners","scheme","listener","URL","protocol","port","apiName","offlineDevice","$location","createDevice","force","POS-Locale","createShortMethods","names","createShortMethodsWithData","preventEventDispatchOrOptions","maybeOptions","preventEventDispatch","manual","unlock","shouldBlockSwitch","previousDefaultDevice","newDefaultDevice","addDevice","addOfflineDevice","rebootConnector","tenantId","command","created","$date","guiName","json","getDevice","deviceCount","tryForEachDevice","tryDevice","normalize","camelCase","toCamel","build","destKey","safeifyList","list","blacklist","safeList","safeify","obj","prop","safeItem","property","dontTrackData","overrideAlreadyAssigned","_query","dontTrack","tokens","Content-Type","apiTokenRequestUrl","getPaymentDevices","getConfiguration","ignoreLoadingBar","wakeUp","getCurrentShop","printerIdentifier","templateId","currentPrice","momentFormat","submitCashStatementToApi","connectorResponse","submitMorningAmountApi","salesprice","deletedLine","ItemGroupName","SalesPrice","cancelledSale","closures","currentClerk","closure","morningCounts","timestamp","morningAmountCounts","routeName","suppressStatus","getCurrentClerk","startDate","endDate","terminalEndOfDay","terminalXReport","terminalSendOfflineTransactions","terminalDownloadApplication","terminalEmptyPrintBuffer","terminalPrintLatestReceipt","terminalZReport","terminalPrintStoresTransactions","terminalDownloadCardAgreements","isAproved","authCode","posInfos","loginData","loginTime","deviceConnection","armMappingId","armName","host","connectTime","handleOfflineRequest","urlParts","CardName","CardId","DisplayText","ResponseCode","paymentRequest","Quantity","Position","VoucherNumber","PaymentType","Amount","ResponseAmount","Rounding","ResponseRounding","ExchangeRate","exchangerate","Message","Completed","CardNumber","CardReceipt","CurrencyCode","foreignCurrencyCode","CurrencyName","Cashregister","deviceIndexOrDevice","skipPages","_saveSale","completing","statusCode","getLastReceiptId","receiptUuid","createExchangeLabels","getExchangeLabels","_makePayment","demo","getPrinterPaperStatus","promises","that","responseAmount","responseRounding","printerTranslation","cleancash","labelTemplateId","payload","receiptHeaderBlacklist","itemsBlacklist","paymentsBlacklist","safe","getVoucher","clientRequestDate","deactivateVoucher","transactionReference","printVoucherAction","voucherAction","activateVouchers","activationRequests","purchaseWithVoucher","puchaseRequest","cancelAction","uniqueActionId","cancelRequest","lookupCustomer","getDiscounts","basket","getWebOrders","addCustomer","getCustomerFields","toggleMember","isMember","patch","phoneNo","getWebOrder","webshopId","printPickList","webOrder","saleCompleted","orderNos","createOrderInStore","getCustomerOrders","saveCustomerOrder","changeStatusCustomerOrder","customerOrderPickList","statusText","pickListLines","pickListLine","inStock","currentOnHandQuantity","toPick","picked","quantityPicked","parseBirthDate","phone","recordCount","filters","or","cust","updateCustomer","getCompany","companyId","getCalculatedLoyaltyPoints","getLoyaltyCustomer","searchForLoyaltyCustomer","streetname","zipcode","town","mobile","subtractAmount","CancelSubtractBalance","includeInactiveShops","getMasterItemStockInfo","storeId","getInsurance","createInsuranceInformation","cancelInsurance","cancelInsuranceInformation","retailerId","retailerPassword","handleTransaction","ecrId","transId","payPlazaAssociationBaseUrl","api_token","setScannerServiceBaseUrl","getScannerServiceBaseUrl","initializeAssociation","getAssociationId","nonce","associationNonce","finalizeAssociation","associationId","activateAssociation","getConnectionState","getBarcode","canceler","abort","getTenantFetures","clerkButtonStates","addClass","defaultConnector","click","reboot","anyConnectorOnline","currentConnector","isLockableDevice","isSelectedConnector","STORAGE_LOCKED","getLockedConnectorId","STORAGE_CONNECTOR_ID","getLockedDeviceIndex","lockedId","notifyChanged","lock","toggleLock","targetIndex","lockedIndex","restoreLockedConnector","giftLabel","giftReceiptAndLabel","_printGiftReceipt","_printGiftLabel","isReprint","exchangeBarcodesPromise","exchangeBarcodeResponse","strackTrace","stackframes","stringifiedStack","getStackTrace","fromError","flatten","ifValidEvent","eventName","eventNames","asyncEventListeners","handler","cbPromises","resolved","updated","rangedValueInputRequested","rangedValueInputResponse","pinRequested","pinResponse","deactivate","retryDeactivation","printFailure","retryAction","printAction","keyboard","hidden","attr","bind","resetTimeout","removeClass","initProps","webOrderTypeKey","customerOrderNo","isExcluded","bookingPayment","getExchangeBarcode","getExchangeExpiryDate","isGiftAidableProperty","giftAidTitlePropertyName","giftAidFirstNamePropertyName","giftAidLastNamePropertyName","giftAidHouseNumberPropertyName","giftAidPostalCodePropertyName","serialNumberPropertyName","getTransactionGiftAidValue","infrasecCTUIDPropertyName","infrasecCodePropertyName","infrasecRegisterIdPropertyName","infrasecRequestIdPropertyName","infrasecOrganisationNumberPropertyName","infrasecCopyCTUIDPropertyName","infrasecCopy_CodePropertyName","infrasecSequenceNumberPropertyName","getInfrasecSequenceNumber","removeTransactionGiftAidProperty","webshopIdPropertyName","getWebshopId","uniqueTransactionId","setUniqueTransactionId","getUniqueTransactionId","voucherResponseCode","setVoucherResponseCode","getVoucherResponseCode","voucherBalance","setVoucherBalance","voucherExpiryDate","setVoucherExpiryDate","voucherDescription","setVoucherDescription","returnTransactionLineIdPropertyName","$document","fullscreenMode","toggle","isEnabled","isSupported","fullscreenSupportedDevices","exitFullscreen","msExitFullscreen","mozCancelFullScreen","webkitExitFullscreen","fullscreenElement","webkitIsFullScreen","msFullscreenElement","mozFullScreen","documentElement","requestFullscreen","msRequestFullscreen","mozRequestFullScreen","webkitRequestFullscreen","Element","ALLOW_KEYBOARD_INPUT","inputService","$parse","nodeName","initializing","attrValue","onEnter","attrOnDenominationValue","onDenomination","onDenominationFunc","enableGlobalCapture","disableGlobalCapture","switcher","dddCaptureGlobalInput","$window","Widgets","ModalService","zreportService","GetTranslations","cleanCashModalTitle","cleanCashModalDangerButton","cleanCashModalDescription","cleanCashModalSuccessButton","cleanCashChangeConnectorModal","nsaft","apiOffline","currentShop","notificationChildScope","$new","armChilScope","menuChildScope","notificationAside","armsAside","menuAside","versionNumber","rebootableArmDevice","toggleConnectorLock","$event","stopPropagation","$current","widgetsDisabled","level","first","second","textColor","0","1","2","3","4","goToPortal","location","showSAFT","printLastReceipt","printLastZReport","gotoCashStatement","canReconsile","reloadApplication","notificationMessages","getMessages","getNotificationClass","getEnvelopeColor","maxLevel","removeNotificationMessage","removeMessage","clearAllNotifications","clearMessages","selectedAside","toggleFullscreenMode","isFullscreen","apiConnecting","defaultConnectorWarningModal","paymentDeviceIndex","rebootArm","rebootConnectorWarningModal","hideAside","managerVerificationDeferred","managerVerificationModal","isPassword","isManagerModal","rangedValueInputDeferred","rangedValueInputModal","pinDeferred","pinModal","useNumpad","clerkVerificationDeferred","clerkVerificationModal","isClerkModal","rebootingConnectorWarningModal","rebootConnectorRecommendationWarningModal","resetManagerVerification","resetClerkVerification","voucherModal","getVoucherModal","deleteConfirmModal","getDeleteConfirmModal","actionModal","getActionModal","itemInfoModal","getItemInfoModal","self","checkHealth","_checkHealth","resetIdleTime","idleTime","isIdle","document","storeNamespace","serviceWorkerDb","version","constants","dexie","notifications","openInsurances","insurances","bulkAdd","toArray","MAX_CLERKS_CACHED","cachedAt","sortBy","reverse","limit","_ref0","_ref10","_callee10","_context10","_callee11","_context11","_ref12","_callee12","_context12","_callee13","_context13","_ref14","_callee14","_context14","_ref15","_callee15","messages","_context15","bulkPut","_ref16","_callee16","_context16","_ref17","_callee17","_context17","_x12","_callee18","dbInsurances","_context18","_ref19","_callee19","_context19","_x13","_x14","_ref20","_callee20","newShortcuts","_context20","_x15","_callee21","_context21","trigger","inputPopup","$sniffer","cancelBufferToInputPromise","inputDelay","cancelAndShiftToInput","shiftBufferToInput","inputString","inputBuffer","insertString","setSelection","end","setSelectionRange","onEnterFunc","doc","inputPressedHandler","keyEvent","capturedInput","fromCharCode","charCode","inputDownHandler","keyCode","doDelete","doEnter","isDirty","inputElement","isBackspace","del","selectionStart","selectionEnd","inputEle","tail","newInput","getSelection","buttonName","stateName","clientTime","posVersion","doSpace","string","setString","off","continueFunc","optionalUnboundInput","isWithinRange","range","decimalVal","maxAmountAllowed","maxQuantityAllowed","decimalPlaces","validateNewPhoneNumber","oldPhone","newPhone","phoneUtil","PhoneNumberUtil","getInstance","parseAndKeepRawInput","isValidNumber","unrounded","toDecimalPlaces","machineCultureValue","getApplicableItemInfos","customAttributeIds","promptType","itemInfoResponses","info","question","itemInfoRepository","itemInfoType","executeItemInfos","hasConfiguredItemInfos","getCustomAttributeIds","handleItemInfos","getCustomAttributeIdsFromitem","getCustomAttributeIdsFromReceipt","_handleItemInfos","itemInfoResponse","showItemInfo","handleItemInfoResponse","_showItemInfo","createButtons","questionChoices","createButton","visible","createItemInfoResponse","storeItemInfoResponse","ItemInfoId","TransactionLineUuid","Value","storeItemInfoResponseOnItem","storeItemInfoResponseOnReceipt","i18nYesButton","i18nNoButton","i18nSerializedItemDisplayText","executeSerializedItemInfo","executeSerializedItemScanSerialNumber","TransactionUuid","registerKeypad","_keypad","isNumericOnly","denominationCurrency","$keypadElement","inputOffset","getBoundingClientRect","outerHeight","top","setVoucherInformation","clearVoucherInformation","noEvent","hideKeys","onscreenKeysForceNumpad","autoSelect","onscreenKeysAutoSelect","onscreenKeys","attrDenominationValue","denominationFunc","activator","onscreenKeysActivator","lowercase","isExpanded","clearInput","deleteChar","enter","addCharacter","denominationClick","isLowerCase","toggleCase","keysClear","keysCopy","clipboard","writeText","keysClip","keysPaste","readText","keypadCtrl","toggleReflection","reflector","placeholder","reflection","groupDenominations","denominations","groupSize","groupedDenominations","shopLanguage","mainView","expandedKeys","showKeysArguments","focusSelfTriggered","activeElementIsRegisteredInput","_isPassword","toggleExpandedKeys","hideKeyboard","decimalSeparator","keypadArray","keysSelectAll","getDotOrComma","ngToast","messageArray","ns","currentLogLevel","logLevel","INFO","SUCCESS","WARNING","ERROR","DISABLED","setLogLevel","otherOptions","className","onDismiss","bodyOutputType","existingMessage","extractText","translatedMessage","getLanguage","clerkLanguage","displayLanguage","mapToLanguage","helper","getMessageBody","getMessageTitle","getMessageTimestamp","notificationHelper","offlineChecker","reconnect","_response","buildMessage","redirectToPortalWithMessage","configRepository","tmhDynamicLocale","portalService","getCredentials","posconfig","groupid","shopid","posid","identify","validationError","validateConfig","loadArticleParameters","Parameter","addParameters","articleParameters","parameter","toElementId","styleParameters","variantParameters","setupLanguage","setLocale","setupPaymentDevices","finalizePaymentDeviceSetup","realIndex","realCount","paymentDevices","setupNoteConfiguration","nc","showBarcode","showEmployee","showLoyalty","setupPrintTranslations","accountDeposit","setLine","itemAmount","vatIncluded","vatIncludedTotal","youWereServedBy","one","two","three","four","five","six","seven","eight","nine","customerName","customerAddress","customerCity","customerPhone","customerSignature","earnedLoyaltyPoints","loyaltyPointsAvailable","loyaltyPointsSpent","totalNumberItems","giftCopy","terminalJournal","receiptJournal","periodStart","periodEnd","printedOn","orderLineVariant","orderLineNotes","sold","vendorName","itemName","returned","restockLevel","hierarchyNodeName","vendorItemNo","net","salesReceipt","salesAndReturnReceipt","loanReceipt","recallLoanReceipt","customerReturnDetails","lineExcludedFromLoyalty","expiresOn","Cash","ManualCard","ForeignCurrency","GiftCertificate","DownPaymewnt","ForeignGiftCertificate","CreditVoucher","ForeignCreditVoucher","Webshop","Account","Bank","Bonus","DebitCard","CreditCard","MobilePayment","Change","LoyaltyBonus","LoyaltyDiscount","TrimitLoyaltyBonus","cashReturn","expenses","bankedCash","currencyCalculated","totalInDrawer","cashDifference","printedBy","reportNumber","Discounts","DrawerOpenings","Miscellaneus","NumberOfReceipts","Qty","ReceiptCopys","Returns","Total","Balance","CreditnoteIssued","CreditnoteRedeemed","GiftvoucherIssued","GiftvoucherRedeemed","ForeignCreditnotasRedeemed","ForeignGiftvouchersRedeemed","Payments","Reconciliation","Vat","PaymentsByClerk","GiftvoucherAndCreditnotes","ItemGroups","Payouts","XReport","ZReport","GiftVoucherDiscount","DeletedReceiptLines","AmountOfDifferentReceiptTypes","AmountOfReturnReceipts","AmountOfSaleReceipts","CancelledSales","Copy","setupPosConfigReload","secondsBetweenReloads","posConfigReloadIntervalPromise","reloadFn","currentCfg","newCfg","CONFIG_KEY","lang","setupCurrencies","validateConfigExists","setupVoucherNo","lastVoucherNo","setupGiftPrintingConfig","setupVoucherSettings","creditNoteExpiryInDays","giftCertificateExpiryInDays","setupGeneralPosSettings","clearCacheReload","fetch","els","getElementsByTagName","src","tagName","getAttribute","href","updateAfterTimeout","updateNotification","i18nUpdate","i18nNowRefresh","setupServiceWorker","i18nDownloaded","res","serviceWorker","register","serviceWorkerInitialised","warn","readyPromise","blockNavigationPaymentTypes","blockCancellationPaymentTypes","icons","creditvoucher","defaultPaymentTypes","icon","style","iconSource","itemgroupService","notificationService","saleService","receiptPromise","lastReceiptIdPromose","paperStatusPromise","currentShopPromise","returnPromise","doSetup","defaultExchangeExpiryPeriodDate","use","getCustomerOrderHoldingPeriod","customerOrderSettings","holdingPeriod","configs","roles","getPhoneNumberValidationEnabled","phoneNumberValidationEnabled","receiptDiscountReasons","getWebOrderDispatchNoteLines","webOrderDispatchNoteLines","receiptReturnReasons","giftCertificateVat","creditNoteVat","setPaymentTypeConfigs","defaultExchangeExpiryPeriod","defaultExchangeExpiryPeriodType","_config$giftAid","giftAid","promotionSettings","promotionBarcodePrefix","getVoucherDefinitions","voucherDefinitions","addBlockNavigationPaymentType","addBlockCancellationPaymentType","getNamespacedStore","quaggaConfig","scannerDelay","delay","barcodeCallback","delayReached","beep","Audio","onBarcodeDetected","play","codeResult","elementId","onInitFinished","onError","onDetected","onStart","inputStream","decoder","readers","frequency","offDetected","handleLoadedReceipt","returnedQuantities","hasReturnableItems","returnedQuantity","originalQuantity","button","reasons","returnItems","_reasons$find","logoutUser","i18nClaimMessage","i18nCancelSale","i18nUnableToParkReceipt","i18nCancelSaleDeactivatedVouchers","is","customerAttached","includeS","displayMakeExpense","cancelSale","parkNote","noteCopy","startHub","hub","reconnecter","hubReconnecter","_start","dir","onclose","buildHub","SIGNALR_ENABLED","HubConnectionBuilder","withUrl","configureLogging","isLocalDevelopment","LogLevel","Information","supportHubUrl","signalrService","posControlHub","queryParams","connection","invoke","slideAction","slideActionIscrollInstance","$slideToggle","$slideLabel","slideMaxed","draggable","axis","containment","drag","ui","parent","animate","cookieShopId","storeContextShopId","storeShopId","tenant","namespace","navigationClass","open","closeNavigation","targetElement","activeClass","toggleClass","directtargetElement","hasClass","userAgentService","getUserAgent","$set","deviceEscaped","browserEscaped","osEscaped","deviceCharacterSplits","deviceAliases","original","alias","browserAliases","CriOS","Trident","osAliases","Computer","Mac","iPhone","iPad","iPod","osVersionAliases","Windows NT 6.1","Windows NT 6.2","Windows NT 10.0","devicePatterns","osPatterns","osVersionPatterns","osVersionFilters","browserPatterns","detectDevice","devicePattern","patternMatches","exec","ua","character","originalDevice","detectOperatingSystem","osPattern","isOperatingSystem","operatingSystem","detectOperatingSystemVersion","versionPattern","filterKey","filterValue","filterRegex","detectBrowser","browserPattern","userAgentObject","isMobile","Boolean","os","osVersion","browser","escapeUaString","nextFocus","focusOnClick","which","ctrl","$parsers","viewValue","isSuppressed","focusBack","suppressor","divClicked","suppress","followElement","readonlyWhenVisible","removeAttr","directiveName","xnor","elementStr","checkElement","iscroll","locateIscroll","iscrollToMe","_require2","findLast","getReceiptSalesPriceTotal","getReceiptEffectiveSalesPriceTotal","getLineEffectiveSalesPrice","getReceiptRoundingDifference","getReceiptTotal","roundingDifference","getReceiptTotalDiscountCurrency","getItemCount","getPaymentCount","getLineDiscountPctWithRounding","getReceiptDiscountPctWithRounding","finalData","groupedData","groupBy","vatItem","itemVat","vatPercent","vatAmount","assign","whitespace","seperator","g1","county","g2","g3","g4","filtered","migrateToNamedStore","namedStore","lskey","versionCompare","v1","v2","isValidPart","lexicographical","zeroExtend","v1parts","v2parts","every","VERSION_STORE_KEY","compare","versionElement","previousVersion","strictVersion","strictPreviousVersion","translationkeys","errorcode","getErrorMessage","errorCode","getStatusMessage","getPaymentMessage","zip","defaultVoucherModal","defaultActionModal","warinig","retryActionButton","printActionButton","closeActionButton","cancelButton","sellButton","deactivationButton","hideVoucherModal","initVoucherData","addButtons","expiryDate","_voucherModal","canBeDeactivated","isVoucherModalVisible","showActionModal","actions","actionType","hasFailedActions","warning","hideActionModal","i18nVoucherAlreadyExists","i18nClerkVerificationDenied","i18nVoucherActionDeactivation","i18nVoucherActionActivation","i18nVoucherActionCancellation","i18nVoucherActionFailed","i18nVoucherActionSucceeded","i18nErrorPaymentCancellation","i18nDeactivated","i18nIsBusy","i18nGeneralError","isBusy","voucherSaleInProgress","voucherDeactivationInProgress","voucherLoadingInProgress","voucherCancelInProgress","_cancelAction","eventpointer","_response$data2","_response$data3","_response$data4","createPayment","_createPayment","responseData","clearKeyboard","setKeyboard","handlePurchaseAmount","minPurchaseValue","maxPurchaseValue","pinRequired","_handlePurchaseAmount","minValue","maxValue","requestPurchaseAmount","_x16","_requestPurchaseAmount","suggestedAmount","t4","t5","t6","t7","t8","t9","t10","t11","requestPinEntry","_requestPinEntry","_x17","_x18","_x19","_x20","_handlePayment","fullFunctionality","voucherSale","addVoucherToReceipt","requestValue","minActivationValue","maxActivationValue","_x21","_x22","_activateVouchers","activationVouchers","vouchersToActivate","getActivationVoucherItems","barcodeIsVoucher","voucherDefinition","deactivateVoucherWithAuthorization","_x23","_deactivateVoucherWithAuthorization","canDeactivateVoucher","deactivateVoucherAsync","_x24","_x25","_x26","_x27","_x28","_deactivateVoucherAsync","_response$data5","_response$data6","_response$data7","_response$data9","_response$data8","vouchers","_payment$fluctuatingP","_payment$fluctuatingP4","_payment$fluctuatingP5","_payment$fluctuatingP2","_payment$fluctuatingP3","_item$fluctuatingProp3","_item$fluctuatingProp4","_item$fluctuatingProp","_item$fluctuatingProp2","webOrderRepository","webOrderStatusEnum","orderStatusTranslations","reserved","delivered","returnedPayment","skipped","translateStatus","statusId","statusTranslation","pick","updateAsPicked","toggleItem","oldStatus","clickAndCollect","orderInStore","setupWebshop","i18nCreateError","shippingAddress","getSelectedShippingAddressString","JsBarcode","height","getArticleStatistic","_getArticleStatistic","itemHierarchyNodeName","stockInfo","i18n","selectLocation","inTransit","onHand","purchaseOrders","selectedLocation","dropdown","expanded","originalStockInfo","quantityInTransit","quantityOnPurchaseOrder","quantityReserved","computedStockInfo","currentScroll","scrollTop","newScroll","originalEvent","deltaY","getGiftCertificatesAmount","getNonGiftCertificatesAmount","addOrRemoveLoyaltyPayment","enableLoyaltyPayment","addLoyaltyPayment","removeLoyaltyPayment","loyaltyPayment","toUse","getMoneyToUse","remaining","canPurchaseGiftCertificateWithLoyalty","giftCertificatesAmount","loyaltySpendings","convertionRatio","initConfig","localCurrency","cfg","loyaltyRatio","ratio","minimumBeforeSpending","minAvailablePointsBeforeSpending","canPurchaseGiftVouchersWithPoints","pt","loyaltyEnabledPredicate","loyaltyWatcher","isPos","setLoyaltyPaymentType","isUsingMoreThanCurrentBalance","isUsingMoreThanRemainder","isPayingWithLoyaltyForGiftCertificates","messageReceived","windowRef","postMessage","conf","sendReceipt","customerDisplay","widgetsService","openDisplay","targetDisplay","hideWidgets","customerOrderRepository","getArticleData","GetAdditionalInfo","promisses","taxAmount","showModal","customerOrderWidgetService","downpayOrder","i18nYes","i18nNo","getBoolText","addLoyaltyPoints","_addLoyaltyPoints","loyaltyPointsEarned","i18nPhoneNumberValidationError","i18nMobileNumberValidationError","oldPhoneNumber","oldMobileNumber","addLeadingPlus","selectedShippingAddress","mobilePhone","setCompany","setChargeToCompany","setSelectedShippingAddress","canUpdate","addUpdateCustomer","customerSelected","loading","chargeToDropdownExpanded","showChargeTo","i18nCustomerNumberEmpty","selectCustomer","cancelCustomerLookup","deselectCustomer","toggleChargeToDropdown","addNewShippingAddress","getLoyaltyString","pointsInCurrency","insuranceRepository","canInsureReturnEnum","validateCustomer","FirstName","LastName","StreetAddress","PostalCode","City","Country","Telephone","Email","getItemInformation","itemInformation","productBrand","parameter6","productGroup","productModel","productIdNumber","productPrice","productDateofPurchase","setupInsurance","solidConfig","priceList","i18nSolidConfigMissingNotification","i18nSellInsuranceNotification","customerCache","errorTexts","insuranceInformation","premium","getPremiumPrice","ExternalId","CustomerPersonNumber","PersonNumber","CustomerFirstName","CustomerLastName","CustomerCoAddress","CoAddress","CustomerStreetAddress","CustomerBoxAddress","BoxAddress","CustomerPostalCode","CustomerCity","CustomerCountry","CustomerTelephone","CustomerEmail","ProductBrand","ProductGroup","ProductModel","ProductIdNumber","ProductDateOfPurchase","ProductPrice","SalesPerson","Premium","PaidPremium","RetailerId","RetailerPassword","InsuranceCompany","insuranceCompany","InsuranceProductCode","insuranceProductCode","InsurancePeriodMonths","insurancePeriodMonths","IsTestMode","testEnvironment","itemBeingRemoved","addedArticle","canBeInsured","yes","clearCustomerCache","cancelInsuranceInfo","InsuranceNumber","currentItem","itemPrice","priceFrom","cacheCustomer","defaultCountry","getCachedCustomer","alreadyInsured","insuranceService","i18nErrorAlreadyInsured","i18nErrorCannotInsure","enableButton","re","widgetName","kegaRepository","kegaService","ordersVisible","loadingOrders","ordersInitiallyFetched","toggleOrder","activeOrder","ordersQuery","availableOrders","orderNr","isAddedToReceipt","loyatyWidgetEnabled","loyaltyRepository","loyaltyStaticDiscountService","i18nMemberNotFound","i18nMemberLookupError","i18nMixedSalesWarning","member","currentMember","isMixedSale","hasSaleItems","hasReturnItems","preventMixedSalesOnLoyalty","showErrorAndTrack","internalTitle","publicTitle","attachMemberToReceipt","attachCustomerToReceipt","isStaticDiscountEngineMember","engineTypeIdentifier","loyaltyService","customerInput","detachCustomerAndHideKeyPad","getNextLevel","nextLevel","i18nNoLevel","i18nCustomerNumberPlaceholder","attachMember","getLevelUpPercentage","percentageOfNextLevel","totalPoints","startPoints","getCurrentLevel","currentLevel","levelName","showLevelEngineMemberInfo","showStaticDiscountEngineMemberInfo","intersolveRepository","intersolvePaymentType","processResponse","cancellation","pushCancelPayment","INTERSOLVE_CANCELLATIONS","tryUnloadCancelPaymentQueue","startCancelPaymentUnloader","checkCancellationRetryList","cancelList","cancelPaymentUnloader","i18ncancelling","i18ncancellationRequestFailed","i18ntoastcancellationRequestFailed","i18nCardWrongCurrency","UNLOAD_CANCELPAYMENT_FREQUENCY","loyaltyPaymentType","intersolvePaymentStrategy","totalExcludes","customerBalance","moneyToUse","successful","_receipt","_total","isNettoSum","payedWithLoyalty","stopCancelPaymentUnloader","getURL","membercard","branch","i18nCardNotFound","i18nCommsError","i18nNoResults","i18nMissingDetails","street","searching","i18nInputPlaceholder","i18nLastName","i18nTown","i18nZipCode","i18nEmail","i18nFirstName","i18nStreet","i18nHouseNr","i18nMobile","i18nAddDetails","i18nAddMembercard","newMembercard","membercardUrl","customerDisplayName","toGo","customerStatus","missingDetails","toggleCustomer","activeCustomer","clearSearch","backToSearch","addMembercard","addDetails","memberHasChanged","watchReceiptItemCount","receiptBon","receiptItemCountWatcher","newItemCount","oldItemCount","setStaticDiscountOnReceiptItems","unwatchReceiptItemCount","staticDiscount","discountPercentage","discountName","discountRemovedByUser","attachDiscountRemovalWatcher","cancelAllStaticDiscountsOnReceipt","staticDiscountName","unwatchDiscountRemoval","enableStaticDiscountAttachmentOnAllReceiptItems","discountRemovalWatcher","markDiscountAsRemovedByUser","masterItemStockRepository","getByMasterItemStock","addAddress","addressService","el","searchResults","getMoreCustomers","_addCustomer","_selectCustomerLine","selectedCustomerLineIndex","buildCustomerOrderSearchParameters","orderDate","isNotSelected","showPrintWindow","currentStatus","newWindow","write","getElementById","innerHTML","customerOrderModal","searchCustomerOrders","getSearchParams","mapToTableData","sortAsc","newSearchParams","showCustomerOrder","_showCustomerOrder","dataLoaded","getDecimal","addToBasket","selectedAction","printerModal","startPickingCustomerOrder","unpickWarningModal","hasQuantityPickedDifferences","cancelWarningModal","closeCustomerOrderModal","getOrginalCustomerOrder","differences","originalCustomerOrder","unpickCustomerOrder","customerOrderStatusEnums","i18nSaveCustomerOrder","i18nSaveCustomerOrderNoChanges","allPicked","partiallyPicked","createdDateFormatted","createdDate","fulfillment","customerOrderTypeEnums","orderType","i18nCustomerOrderOrderNo","i18nCustomerOrderStatus","i18nArticleNotFound","5","_action2","_action3","_action4","selectCustomerOrder","currencyCodeError","userCanChangeExternalUniqueId","minDate","maxDate","loadingModalContent","showLoading","onSsnChange","streetAddress","coAddress","_link","insuranceItemGroup","getSelectedItem","insuredItemIndex","inputActive","cancelInputActive","insureItem","insuranceNumberResponse","insuranceNumberText","itemToBeInsured","insuranceAmount","move","toggleInput","toggleCancelInput","resetValues","closeOnscreenKeyboard","onSelectedItemChange","masterItemStockService","storeService","vert","horz","stockItems","selectedStore","generateStoreArray","verticalDimensions","horizontalDimensions","storeChanged","webOrderTypeEnum","buildWebOrderSearchParameters","searchWebOrder","getMoreWebOrders","successCallback","errorCallback","i18nMultipleWebordersInReceipt","isClickAndCollect","skipWebOrder","showWebOrder","showWebOrderModalFromWeborder","tryResumeScanning","scanning","getScannerAssociationId","isScanning","connectionState","connectionStateResponse","scannerConnected","terminalIsConnected","startScannerPull","disconnectScanner","scannerAssociationErrorHandler","recoverTerminalStatus","eftid","initializeTerminalRecovery","intervalPromise","terminalRecovery","intervalDelay","isOngoing","blockedPaymentLineId","finalizeTerminalRecovery","recoveredPaymentId","blockedPaymentLine","resolveTerminalStatus","retries","handleOngoingRecoveredPayment","maxRetries","resolveRecoveredPayment","terminalResponse","receiptPayment","barcodePollPromise","barcodeResponse","i18nBarcodeFailed","stopGetBarcode","i18nAssFailedTitle","i18nAssFailedBody","setScannerAssociationId","getScannerNonce","setScannerNonce","i18nNoAssociationId","i18nNoSucessActivation","i18nClrkSignatureRqrd","i18nCustSignatureRqrd","isInitialized","noScanningStates","doingOnFocusCheck","payplazaPaymentStrategy","paymentTypeConfigs","paymentTypeConfig","onfocus","getAssociationIdResponse","finalizeAssociationResponse","scanServiceBaseUrl","scanServiceBaseURL","setEftId","connectScanner","initializeAssociationResponse","customUrl","customURL","payPlazaCompleteSale","eftId","removeEftId","jsonReceipt","merchantReceipt","passwordProtectedMethod","requestPassword","validateAndRun","inputPwd","i18nIncorrectPwd","eftIdExists","enterEftId","i18nEnterPassword","i18nUncoupleEft","pricePromotionRepository","getDiscountsBuffer","getDiscountsTimeout","getDiscountsPending","isRequesting","availablePromotions","applyDiscounts","REQUEST_BUFFER","promotions","basketReturnLines","discountLine","discountPercent","itemIdx","sequenceNo","discountGroups","percent","promotionType","xs","rv","i18nPriceAndPromotionScanned","availableDiscounts","currentScannedPromotionBarcodes","resetScannedBarcodes","basketHeader","posNo","basketDate","promotionBarcodes","basketLines","pricePromotionService","i18nEnable","i18nDisable","toggleQuagga","i18nErrorOnSubmit","sendSaleToRevide","revideParameters","contact","matchKey","matchKeyType","uniqueReceiptId","receiptNumber","storeExternalId","totalGrossPrice","paymentMethods","sku","grossPaidPrice","taxPercent","articleNumber","articleName","taxDetails","revideService","revideCustomer","revideCustomerNumber","revideCustomerSelected","stockRepository","trimitRepository","trimitPaymentType","i18nMemberDiscount","i18nFailedToGetDiscounts","i18nExceedingCreditLimit","customerFields","getDiscountsOngoing","trimitLoyaltyPayment","trimitAccountPayment","trimitLoyaltyPaymentStrategy","trimitAccountPaymentStrategy","getTrimitDiscountsBuffer","getTrimitDiscounts","alertIfOverAvailableBalance","setCustomer","discountResponse","addTrimitAccountPayment","removeTrimitDiscounts","removeTrimitAccountPayment","setMemberNumber","memberEmail","availableCreditDecimal","availableCredit","trimitPaymentIndex","accountIndex","cardIndex","storeNo","userId","trimitDiscountIndex","memberDiscPct","lineNo","fallbackReasonCode","reasonCode","reasonCodeId","reasonCodeText","createdOn","webOrderLines","barCode","netSalesPrice","orderDescription","orderIndex","wOrder","trimit","memberToggle","i18nFailedToChangeMembership","i18nFetchingCustomer","i18nCheckingDiscounts","i18nMissingNumber","requestOngoing","isReceiptOpen","toggleTrimitMember","displayInSidebar","customerAttrib","attrib","fieldName","visibleLeftPanel","clearTrimitCustomer","getTrimitCustomer","newCustomer","i18nFailedToAddCustomer","displayInEditPanel","visibleEditPanel","isFieldRequired","isRequiredField","required","isDisabledField","readOnly","handleWebOrders","notifyError","cacheWebOrderObj","currentWeborders","STORAGE","orderedOn","pickedUpOn","dispatchedUpOn","sumTotal","sumVatAmount","webOrderLine","cachedWebOrders","webOrderIdx","averageVatPercentage","orderLine","onSaleCompleted","webOrderItem","logoWidgetIdx","logoWidget","activeWidget","setActiveWidget","isActiveWidget","mobileMode","elementArray","getElementsByClassName","$interpolate","template","mpWidget","disabled","noDailyClosure","unexpectedErrorTitle","localTime","exports","AbortController","isAborted","onabort","__extends","extendStatics","__","Errors_1","HttpClient_1","NodeHttpClient_1","XhrHttpClient_1","DefaultHttpClient","_super","logger","XMLHttpRequest","httpClient","XhrHttpClient","NodeHttpClient","send","abortSignal","aborted","AbortError","getCookieString","HttpClient","HttpError","_newTarget","trueProto","TimeoutError","TextMessageFormat_1","Utils_1","HandshakeProtocol","writeHandshakeRequest","handshakeRequest","TextMessageFormat","parseHandshakeResponse","messageData","remainingData","isArrayBuffer","Buffer","binaryData","separatorIndex","RecordSeparatorCode","responseLength","byteLength","buffer","textData","RecordSeparator","__assign","HttpResponse","transportMatches","requestedTransport","actualTransport","__awaiter","thisArg","_arguments","P","generator","fulfilled","__generator","verb","op","ops","trys","throw","DefaultHttpClient_1","ILogger_1","ITransport_1","LongPollingTransport_1","ServerSentEventsTransport_1","WebSocketTransport_1","MAX_REDIRECTS","WebSocketModule","EventSourceModule","requireFunc","__webpack_require__","__non_webpack_require__","HttpConnection","features","Arg","isRequired","createLogger","resolveUrl","logMessageContent","isNode","EventSource","onreceive","transferFormat","TransferFormat","Binary","isIn","Debug","startPromise","startInternal","transport","e_1","_a","stopError","negotiateResponse","redirects","_loop_1","this_1","state_1","e_2","accessTokenFactory","skipNegotiation","HttpTransportType","WebSockets","constructTransport","connect","accessToken_1","getNegotiationResponse","ProtocolVersion","accessToken","createTransport","LongPollingTransport","inherentKeepAlive","stopConnection","negotiateUrl","e_3","_b","resolveNegotiateUrl","createConnectUrl","connectionId","requestedTransferFormat","connectUrl","transports","_i","transports_1","ex_1","isITransport","availableTransports","resolveTransport","WebSocketTransport","ServerSentEvents","ServerSentEventsTransport","LongPolling","transferFormats","lastIndexOf","aTag","createElement","HandshakeProtocol_1","IHubProtocol_1","DEFAULT_TIMEOUT_IN_MS","DEFAULT_PING_INTERVAL_IN_MS","HubConnectionState","HubConnection","serverTimeoutInMilliseconds","keepAliveIntervalInMilliseconds","handshakeProtocol","processIncomingData","connectionClosed","methods","closedCallbacks","receivedHandshakeResponse","Disconnected","cachedPingMessage","writeMessage","MessageType","Ping","handshakePromise","handshakeResolver","handshakeRejecter","sendMessage","cleanupTimeout","resetTimeoutPeriod","resetKeepAliveInterval","Connected","cleanupPingTimer","stream","methodName","promiseQueue","invocationDescriptor","createStreamInvocation","subject","Subject","cancelCallback","cancelInvocation","createCancelInvocation","invocationId","cancelMessage","invocationEvent","Completion","createInvocation","newMethod","handlers","removeIdx","processHandshakeResponse","parseMessages","messages_1","Invocation","invokeClientMethod","StreamItem","Close","Warning","pingServerHandle","timeoutHandle","serverTimeout","invocationMessage","clearTimeout","nonblocking","StreamInvocation","CancelInvocation","isLogger","HttpConnection_1","HubConnection_1","JsonHubProtocol_1","Loggers_1","logging","ConsoleLogger","transportTypeOrOptions","httpConnectionOptions","withHubProtocol","NullLogger","JsonHubProtocol","JSON_HUB_PROTOCOL_NAME","Text","hubMessages","parsedMessage","isInvocationMessage","isStreamItemMessage","isCompletionMessage","assertNotEmptyString","_logLevel","_message","AbortController_1","pollAbort","running","pollOptions","pollUrl","Trace","responseType","signal","getAccessToken","updateHeaderToken","closeError","receiving","poll","getDataDetail","pollAborted","raiseOnClose","deleteOptions","logMessage","requestModule","cookieJar","jar","httpRequest","requestBody","currentRequest","encoding","X-Requested-With","statusMessage","eventSourceConstructor","opened","eventSource","withCredentials","cookies","Cookie","onmessage","onerror","onopen","output","includeContent","formatArrayBuffer","view","num","transportName","observers","observer","SubjectSubscription","dispose","minimumLogLevel","Critical","webSocketConstructor","webSocket","binaryType","_event","ErrorEvent","readyState","OPEN","wasClean","xhr","setRequestHeader","onload","responseText","ontimeout","VERSION","HubConnectionBuilder_1","_interopRequireDefault","__esModule","_global","_babelPolyfill","assertArg","ngMinErr","mergeClasses","packageStyles","styles","pendClasses","classes","fix","isPrefix","isString","klass","removeFromArray","stripCommentsFromElement","jqLite","nodeType","ELEMENT_NODE","extractElementNode","elm","$$addClass","$$jqLite","$$removeClass","applyAnimationClassesFactory","prepareAnimationOptions","$$prepared","domOperation","noop","$$domOperationFired","applyAnimationStyles","applyAnimationFromStyles","applyAnimationToStyles","css","mergeAnimationDetails","oldAnimation","newAnimation","newOptions","toAdd","toRemove","resolveElementClasses","preparationClasses","concatWithSpace","realDomOperation","existing","splitClassesToLookup","ADD_CLASS","REMOVE_CLASS","flags","allow","REMOVE_CLASS_SUFFIX","ADD_CLASS_SUFFIX","getDomNode","applyGeneratedPreparationClasses","EVENT_CLASS_PREFIX","clearGeneratedClasses","activeClasses","blockTransitions","node","duration","applyInlineStyle","TRANSITION_DELAY_PROP","blockKeyframeAnimations","applyBlock","ANIMATION_PROP","ANIMATION_PLAYSTATE_KEY","styleTuple","getCssKeyframeDurationStyle","ANIMATION_DURATION_PROP","getCssDelayStyle","isKeyframeAnimation","ANIMATION_DELAY_PROP","computeCssStyles","properties","detectedStyles","getComputedStyle","formalStyleName","actualStyleName","parseMaxTime","truthyTimingValue","getCssTransitionDurationStyle","applyOnlyDuration","TRANSITION_PROP","DURATION_KEY","createLocalCacheLookup","flush","entry","registerRestorableStyles","backup","isDefined","getPropertyValue","TRANSITIONEND_EVENT","ANIMATIONEND_EVENT","ACTIVE_CLASS_SUFFIX","PREPARE_CLASS_SUFFIX","NG_ANIMATE_CLASSNAME","NG_ANIMATE_CHILDREN_DATA","CSS_PREFIX","ontransitionend","onwebkittransitionend","onanimationend","onwebkitanimationend","isElement","isFunction","isUndefined","PROPERTY_KEY","DELAY_KEY","TIMING_KEY","ANIMATION_ITERATION_COUNT_KEY","SAFE_FAST_FORWARD_DURATION_VALUE","TRANSITION_DURATION_PROP","$$minErr","$$rAFSchedulerFactory","$$rAF","scheduler","tasks","nextTick","cancelFn","waitUntilQuiet","$$AnimateChildrenDirective","setData","ngAnimateChildren","$observe","ANIMATE_TIMER_KEY","ONE_SECOND","ELAPSED_TIME_MAX_DECIMAL_PLACES","CLOSING_TIME_BUFFER","DETECT_CSS_PROPERTIES","transitionDuration","transitionDelay","transitionProperty","animationDuration","animationDelay","animationIterationCount","DETECT_STAGGER_CSS_PROPERTIES","$AnimateCssProvider","gcsLookup","gcsStaggerLookup","$$AnimateRunner","$$forceReflow","$$rAFScheduler","$$animateQueue","gcsHashFn","extraClasses","KEY","parentNode","parentID","parentCounter","computeCachedCssStyles","cacheKey","timings","computeCachedCssStaggerStyles","stagger","staggerClassName","rafWaitQueue","pageWidth","computeTimings","aD","tD","maxDelay","maxDuration","applyAnimationClasses","initialOptions","endFn","animationClosed","animationCompleted","animationPaused","$$skipPreparationClasses","temporaryStyles","restoreStyles","setProperty","removeProperty","onDone","onAnimationProgress","animationTimerData","timer","removeData","runner","applyBlocking","blockTransition","blockKeyframeAnimation","closeAndReturnNoopAnimator","$$willAnimate","timeStamp","$manualTimeStamp","elapsedTime","startTime","maxDelayTime","triggerAnimationStart","recalculateTimingStyles","fullClassName","relativeDelay","hasTransitions","hasAnimations","applyAnimationDelay","delayStyle","maxDurationTime","easing","easeProp","easeVal","timerTime","endTime","animationsData","setupFallbackTimer","currentTimerData","expectedEndTime","onAnimationExpired","cleanupStyles","playPause","playAnimation","maxStagger","runnerHost","resume","pause","animations","transitions","isStructural","structural","structuralClassName","addRemoveClassName","applyClassesEarly","hasToStyles","containsKeyframeAnimation","keyframeStyle","staggerVal","transitionStyle","durationStyle","staggerIndex","isFirst","skipBlocking","hasTransitionAll","applyTransitionDuration","applyAnimationDuration","applyTransitionDelay","$$AnimateCssDriverProvider","$$animationProvider","isDocumentFragment","drivers","NG_ANIMATE_SHIM_CLASS_NAME","NG_ANIMATE_ANCHOR_CLASS_NAME","NG_OUT_ANCHOR_CLASS_NAME","NG_IN_ANCHOR_CLASS_NAME","$animateCss","$rootElement","filterCssClasses","getUniqueValues","prepareAnchoredAnimation","outAnchor","inAnchor","calculateAnchorStyles","anchor","coords","bodyNode","scrollLeft","prepareOutAnimation","animator","getClassVal","prepareInAnimation","endingClasses","startingClasses","cloneNode","rootBodyElement","animatorIn","animatorOut","startingAnimator","currentAnimation","prepareFromToAnchorAnimation","anchors","fromAnimation","prepareRegularAnimation","toAnimation","anchorAnimations","outElement","inElement","animationRunners","animationDetails","rootNode","contains","$$AnimateJsProvider","lookupAnimations","matches","flagMap","animationFactory","$$registeredAnimations","applyOptions","executeAnimationFn","classesToAdd","classesToRemove","groupEventedAnimations","fnName","operations","ani","endProgressCb","onAnimationComplete","packageAnimations","runners","animateFn","before","afterFn","beforeFn","onComplete","endAnimations","closeActiveAnimations","chain","setHost","$$AnimateJsDriverProvider","$$animateJs","prepareAnimation","endFnFactory","NG_ANIMATE_ATTR_NAME","NG_ANIMATE_PIN_DATA","$$AnimateQueueProvider","makeTruthyCssClassMap","classString","ONE_SPACE","hasMatchingClasses","newClassString","currentClassString","currentClassMap","isAllowed","ruleType","previousAnimation","rules","hasAnimationClasses","and","PRE_DIGEST_STATE","RUNNING_STATE","nA","nR","cA","cR","$$HashMap","$$animation","$templateRequest","postDigestTaskFactory","postDigestCalled","$$postDigest","normalizeAnimationDetails","findCallbacks","targetNode","targetParentNode","callbackRegistry","filterFromRegistry","matchContainer","matchCallback","containerNode","isMatch","cleanupEventListeners","phase","queueAnimation","notifyProgress","runInNextPostDigestOrNow","progress","isAnimatableClassName","documentHidden","skipAnimations","animationsEnabled","disabledElementsLookup","existingAnimation","activeAnimationsLookup","hasExistingAnimation","areAnimationsAllowed","closeChildAnimations","skipAnimationFlag","cancelAnimationFlag","joinAnimationFlag","isValidAnimation","clearElementAnimationState","markElementAnimationState","animationCancelled","parentElement","realRunner","querySelectorAll","child","removeAttribute","isMatchingElement","nodeOrElmA","nodeOrElmB","animateChildren","bodyElement","bodyElementDetected","rootElementDetected","parentAnimationDetected","elementDisabled","parentHost","parentElementDisabled","allowAnimation","setAttribute","deregisterWatch","totalPendingRequests","Node","compareDocumentPosition","eventType","bool","argCount","hasElement","$$AnimationProvider","setRunner","RUNNER_STORAGE_KEY","removeRunner","getRunner","NG_ANIMATE_REF_ATTR","sortAnimations","processNode","processed","elementNode","domNode","lookup","parentEntry","tree","remainingLevelEntries","nextLevelEntries","row","childEntry","animationQueue","getAnchorNodes","SELECTOR","hasAttribute","groupAnimations","preparedAnimations","refLookup","enterOrMove","anchorNodes","direction","animationID","usedIndicesLookup","anchorGroups","indexKey","lookupKey","beforeStart","cssClassesIntersection","out","in","aa","invokeFirstDriver","driverName","driver","tempClasses","prepareClassName","updateAnimationRunners","newRunner","handleDestroyedElement","groupedAnimations","toBeSortedAnimations","animationEntry","startAnimationFn","closeFn","operation","animationRunner","ngAnimateSwapDirective","terminal","priority","$element","$transclude","previousElement","previousScope","$watchCollection","ngAnimateSwap","leave","$destroy","Chart","define","amd","ChartJsProvider","ChartJs","typeOptions","setOptions","customOptions","ChartJsFactory","createChart","elem","getChartOptions","hasData","canDisplay","cvs","ctx","getContext","chartGetColor","getChartColorFn","destroyChart","bindEvents","canUpdateChart","carry","getEventHandler","triggerOnlyOnChange","lastState","point","atEvent","getElementAtEvent","getPointAtEvent","atEvents","getElementsAtEvent","getPointsAtEvent","getColors","colors","chartColors","notEnoughColors","chartData","convertColor","color","getColor","rgbStringToRgb","hexToRgb","getRandomColor","getRandomInt","alpha","backgroundColor","rgba","pointBackgroundColor","pointHoverBackgroundColor","borderColor","pointBorderColor","pointHoverBorderColor","useExcanvas","hex","bigint","getDataSets","chartLabels","chartSeries","chartDatasetOverride","getData","datasetOverride","dataset","hoverBackgroundColor","onclick","chartClick","onmousemove","chartHover","updateChart","clientHeight","destroy","watchData","watchOther","watchType","G_vmlCanvasManager","initElement","resize","multiTooltipTemplate","mode","elements","borderWidth","rectangle","Bar","Bubble","Doughnut","Line","PolarArea","Radar","helpers","configMerge","aspectRatio","defaultConfig","hover","xAxes","xLabel","scatter","controllers","Scatter","bar","categoryPercentage","barPercentage","gridLines","offsetGridLines","DatasetController","dataElementType","Rectangle","initialize","getMeta","getBarCount","me","barCount","each","meta","getDatasetMeta","isDatasetVisible","updateElement","xScale","getScaleForId","xAxisID","yScale","yAxisID","scaleBase","getBasePixel","rectangleElementOptions","getDataset","_xScale","_yScale","_datasetIndex","_index","_model","calculateBarX","calculateBarY","datasetLabel","calculateBarBase","calculateBarWidth","getValueAtIndexOrDefault","borderSkipped","pivot","stacked","currentDs","currentDsMeta","currentVal","getPixelForValue","getRuler","tickWidth","datasetCount","getPixelForTick","categoryWidth","categorySpacing","fullBarWidth","perc","barWidth","barSpacing","barThickness","ruler","getBarIndex","barIndex","leftTick","isCombo","sumPos","sumNeg","ds","dsMeta","stackedVal","draw","ease","easingDecimal","transition","setHoverStyle","model","getHoverColor","hoverBorderColor","hoverBorderWidth","removeHoverStyle","horizontalBar","tooltipItems","calculateBarHeight","cornerAt","cornerIndex","corners","startCorner","_chart","_view","halfHeight","topY","bottomY","halfStroke","beginPath","fillStyle","strokeStyle","lineWidth","borders","moveTo","lineTo","fill","stroke","inRange","mouseX","mouseY","tickHeight","categoryHeight","fullBarHeight","barHeight","topTick","bubble","dataPoint","Point","pointElementOptions","dsIndex","getPixelForDecimal","radius","getRadius","hitRadius","hoverRadius","dataVal","doughnut","animateRotate","animateScale","legendCallback","generateLabels","arc","arcOpts","bw","legendItem","ilen","cutoutPercentage","rotation","PI","circumference","pie","Arc","linkScales","getRingIndex","ringIndex","chartArea","opts","availableWidth","availableHeight","bottom","minSize","offset","startAngle","endAngle","cos","sin","contains0","contains90","contains180","contains270","cutout","size","getMaxBorderWidth","outerRadius","innerRadius","radiusLength","getVisibleDatasetCount","offsetX","offsetY","calculateTotal","animationOpts","centerX","centerY","calculateCircumference","valueAtIndexOrDefault","hoverWidth","lineEnabled","getValueOrDefault","showLine","showLines","spanGaps","datasetElementType","addElementAndReset","tension","updateBezierControlPoints","lineElementOptions","scale","lineTension","_scale","_children","borderCapStyle","borderDash","borderDashOffset","borderJoinStyle","steppedLine","stepped","cubicInterpolationMode","scaleTop","scaleBottom","scaleZero","getPointBackgroundColor","getPointBorderColor","getPointBorderWidth","pointBorderWidth","pointOptions","includeOffset","pointRadius","pointHitRadius","calculatePointY","pointStyle","stackedRightValue","getRightValue","rightValue","capControlPoint","controlPoints","area","splineCurveMonotone","splineCurve","previousItem","nextItem","controlPointPreviousX","previous","controlPointPreviousY","controlPointNextX","controlPointNextY","capBezierPoints","pointHoverRadius","pointHoverBorderWidth","polarArea","lineArc","beginAtZero","countVisibleElements","xCenter","yCenter","visibleCount","datasetStartAngle","distance","getDistanceFromCenterForValue","resetRadius","radar","getBasePosition","pointPosition","getPointPositionForValue","onProgress","Animation","currentStep","numSteps","render","animationService","frameDuration","dropFrames","addAnimation","chartInstance","animationObject","lazy","animating","requestAnimationFrame","cancelAnimation","animationWrapper","requestAnimFrame","startDigest","framesToDrop","canvasHelpers","drawPoint","edgeLength","xOffset","yOffset","drawImage","closePath","SQRT2","fillRect","strokeRect","types","instances","Controller","uid","plugins","ensureScalesHaveIDs","buildOrUpdateControllers","buildScales","updateLayout","resetElements","initToolTip","silent","canvas","newWidth","getMaximumWidth","newHeight","isFinite","getMaximumHeight","sizeChanged","retinaScale","newSize","onResize","responsiveAnimationDuration","scalesOptions","scaleOptions","xAxisOptions","yAxisOptions","dtype","scaleType","scaleClass","scaleService","getScaleConstructor","addScalesToLayout","layoutService","newControllers","updateIndex","tooltip","_data","buildOrUpdateElements","updateDatasets","animationOptions","easingFunction","easingEffects","stepDecimal","easeDecimal","boxes","box","eventPosition","getRelativePosition","elementsArray","found","getElementsAtXAxis","inLabelRange","it","getElementsAtEventForMode","getDatasetAtEvent","_meta","generateLegend","unbindEvents","removeResizeListener","originalDevicePixelRatio","originalCanvasStyleWidth","originalCanvasStyleHeight","toBase64Image","toDataURL","Tooltip","_chartInstance","_options","updateHoverStyle","hoverOptions","tooltipsOptions","lastActive","lastTooltipActive","tooltipActive","onHover","handleEvent","_active","arrayEquals","addElements","scaleID","createMetaDataset","createMetaData","metaData","md","numData","numMetaData","elementOpts","valueOrDefault","inherits","configuration","mix","rgbString","startVal","tooltipPosition","hasValue","isNumber","parseMaxStyle","styleValue","parentProperty","valueInPixels","isConstrainedValue","getConstraintDimension","maxStyle","percentageProperty","defaultView","constrainedNode","constrainedContainer","hasCNode","hasCContainer","infinity","POSITIVE_INFINITY","loopable","objClone","setFn","_base","extension","scaleMerge","getScaleDefaults","baseArray","valueObj","axisType","axisDefaults","defaultValue","where","filterCallback","findNextWhere","arrayToSearch","startIndex","findPreviousWhere","extensions","ChartElement","Surrogate","__super__","almostEquals","epsilon","NEGATIVE_INFINITY","sign","log10","LN10","toRadians","degrees","toDegrees","radians","getAngleFromPoint","centrePoint","anglePoint","distanceFromXCenter","distanceFromYCenter","radialDistanceFromCenter","angle","atan2","aliasPixel","pixelWidth","firstPoint","middlePoint","afterPoint","d01","d12","s01","s12","fa","fb","EPSILON","pointBefore","pointCurrent","pointAfter","pointsWithTangents","deltaK","mK","pointsLen","alphaK","betaK","tauK","squaredMagnitude","deltaX","loop","niceNum","niceFraction","exponent","fraction","linear","easeInQuad","easeOutQuad","easeInOutQuad","easeInCubic","easeOutCubic","easeInOutCubic","easeInQuart","easeOutQuart","easeInOutQuart","easeInQuint","easeOutQuint","easeInOutQuint","easeInSine","easeOutSine","easeInOutSine","easeInExpo","easeOutExpo","easeInOutExpo","easeInCirc","easeOutCirc","easeInOutCirc","easeInElastic","asin","easeOutElastic","easeInOutElastic","easeInBack","easeOutBack","easeInOutBack","easeInBounce","easeOutBounce","easeInOutBounce","webkitRequestAnimationFrame","mozRequestAnimationFrame","oRequestAnimationFrame","msRequestAnimationFrame","cancelAnimFrame","cancelAnimationFrame","webkitCancelAnimationFrame","mozCancelAnimationFrame","oCancelAnimationFrame","msCancelAnimationFrame","currentTarget","srcElement","boundingRect","touches","clientX","clientY","paddingLeft","getStyle","paddingTop","paddingRight","paddingBottom","currentDevicePixelRatio","addEvent","attachEvent","removeEvent","removeEventListener","detachEvent","arrayOfEvents","getConstraintWidth","getConstraintHeight","clientWidth","cw","ch","currentStyle","pixelRatio","devicePixelRatio","clearRect","fontString","pixelSize","fontStyle","fontFamily","longestText","font","arrayOfThings","gc","garbageCollect","longest","thing","measureText","nestedThing","gcLen","textWidth","numberOfLabelLines","numberOfLines","drawRoundedRectangle","quadraticCurveTo","CanvasGradient","defaultColor","addResizeListener","hiddenIframe","hiddenIframeClass","classlist","tabIndex","border","margin","insertBefore","firstChild","contentWindow","onresize","removeChild","a0","a1","v0","callCallback","_tArg","colorValue","CanvasPattern","saturate","darken","defaultFontColor","defaultFontFamily","defaultFontSize","defaultFontStyle","addBox","removeBox","getMinimumBoxSize","isHorizontal","fullWidth","chartWidth","maxChartAreaWidth","horizontalBoxHeight","maxChartAreaHeight","verticalBoxWidth","chartAreaHeight","minBoxSizes","horizontal","fitBox","minBoxSize","minBox","scaleMargin","totalLeftBoxesWidth","totalRightBoxesWidth","chartHeight","finalFitVerticalBox","totalTopBoxesHeight","totalBottomBoxesHeight","placeBox","xPadding","yPadding","leftBoxes","rightBoxes","topBoxes","bottomBoxes","chartAreaBoxes","chartAreaWidth","newMaxChartAreaHeight","newMaxChartAreaWidth","ci","boxWidth","lineCap","lineDash","lineDashOffset","lineJoin","Legend","legendHitBoxes","doughnutMode","beforeUpdate","maxWidth","maxHeight","margins","beforeSetDimensions","setDimensions","afterSetDimensions","beforeBuildLabels","buildLabels","afterBuildLabels","beforeFit","fit","afterFit","afterUpdate","legendItems","labelOpts","globalDefault","itemOrDefault","fontSize","labelFont","hitboxes","lineWidths","totalHeight","textAlign","textBaseline","usePointStyle","vPadding","columnWidths","totalWidth","currentColWidth","currentColHeight","itemHeight","itemWidth","lineDefault","legendWidth","cursor","fontColor","drawLegendBox","isLineWidthZero","setLineDash","offSet","restore","fillText","lh","hitBox","beforeInit","legendOpts","_plugins","plugin","unregister","PluginBase","afterInit","beforeDraw","afterDraw","pluginService","drawBorder","drawOnChartArea","drawTicks","tickMarkLength","zeroLineWidth","zeroLineColor","scaleLabel","labelString","minRotation","maxRotation","mirror","autoSkip","autoSkipPadding","labelOffset","Scale","beforeDataLimits","determineDataLimits","afterDataLimits","beforeBuildTicks","buildTicks","afterBuildTicks","beforeTickToLabelConversion","convertTicksToLabels","afterTickToLabelConversion","beforeCalculateTickRotation","calculateTickRotation","afterCalculateTickRotation","numericalTick","userCallback","globalDefaults","optionTicks","tickFontSize","tickFontStyle","tickFontFamily","tickLabelFont","firstRotated","firstWidth","lastWidth","labelRotation","longestTextCache","cosRotation","sinRotation","originalLabelWidth","labelWidth","yLabelWidth","tickOpts","scaleLabelOpts","gridLineOpts","scaleLabelFontSize","isFullWidth","largestTextWidth","tallestLabelHeightInLines","lineSpace","longestLabelWidth","labelHeight","firstLabelWidth","lastLabelWidth","maxLabelWidth","rawValue","getLabelForIndex","getValueForPixel","innerWidth","pixel","finalVal","valueOffset","skipRatio","maxTicks","isRotated","useAutoskipper","maxTicksLimit","tickFontColor","tl","scaleLabelFontColor","scaleLabelFontStyle","scaleLabelFontFamily","scaleLabelFont","labelRotationRadians","longestRotatedLabel","itemsToDraw","xTickStart","xTickEnd","yTickStart","yTickEnd","isLastTick","shouldSkip","lineColor","zeroLineIndex","tx1","ty1","tx2","ty2","x1","y1","x2","y2","labelX","labelY","xLineValue","yLineValue","glWidth","glColor","glBorderDash","glBorderDashOffset","itemToDraw","rotate","scaleLabelX","scaleLabelY","isLeft","constructors","registerScaleType","scaleConstructor","updateScaleDefaults","additions","Title","chartOpts","titleX","titleY","titleFont","titleOpts","titleBlock","pushOrConcat","toPush","getAveragePosition","xPositions","yPositions","createTooltipItem","titleFontStyle","titleSpacing","titleMarginBottom","titleFontColor","titleAlign","bodySpacing","bodyFontColor","bodyAlign","footerFontStyle","footerSpacing","footerMarginTop","footerFontColor","footerAlign","yAlign","xAlign","caretSize","cornerRadius","multiKeyBackground","beforeTitle","labelCount","afterTitle","beforeBody","beforeLabel","labelColor","afterLabel","afterBody","beforeFooter","footer","afterFooter","tooltipOpts","_bodyFontFamily","bodyFontFamily","_bodyFontStyle","bodyFontStyle","_bodyAlign","bodyFontSize","_titleFontFamily","titleFontFamily","_titleFontStyle","titleFontSize","_titleAlign","_footerFontFamily","footerFontFamily","_footerFontStyle","footerFontSize","_footerAlign","opacity","legendColorBackground","getTitle","getBeforeBody","getBody","bodyItems","bodyItem","getAfterBody","getFooter","changed","labelColors","itemSort","caretPadding","tooltipSize","getTooltipSize","determineAlignment","getBackgroundPoint","combinedBodyLength","titleLineCount","footerLineCount","widthPadding","maxLineWidth","lf","rf","olf","orf","yf","midX","midY","paddingAndSize","radiusAndPadding","drawCaret","tooltipPoint","x3","y3","ptX","ptY","bgColor","drawTitle","drawBody","xLinePadding","fillLineOfText","drawColorBoxes","rgbaString","drawFooter","globalOpts","chartX","chartY","pointRelativePosition","betweenAngles","withinRadius","centreAngle","rangeFromCentre","sA","eA","lineToPoint","previousPoint","pointVM","bezierCurveTo","lastDrawnIndex","currentVM","globalOptionLineElements","halfWidth","leftX","rightX","DatasetScale","getLabels","xLabels","yLabels","minIndex","maxIndex","offsetAmt","valueWidth","widthOffset","valueHeight","heightOffset","innerDimension","valueDimension","tickValue","delta","logDelta","tickString","numDecimal","LinearScale","LinearScaleBase","IDMatches","valuesPerType","positiveValues","negativeValues","relativePoints","valuesForType","minVal","maxVal","handleTickRangeOptions","getTickLimit","ceil","handleDirectionalChanges","ticksAsNumbers","minSign","maxSign","suggestedMin","suggestedMax","spacing","fixedStepSizeSet","fixedStepSize","stepSize","niceRange","niceMin","niceMax","numSpaces","remain","toExponential","LogarithmicScale","minNotZero","tickVal","significand","lastTick","tickValues","angleLines","showLabelBackdrop","backdropColor","backdropPaddingY","backdropPaddingX","pointLabels","LinearRadialScale","getValueCount","drawingArea","halfTextWidth","furthestRightIndex","furthestRightAngle","furthestLeftIndex","furthestLeftAngle","xProtrusionLeft","xProtrusionRight","radiusReductionRight","radiusReductionLeft","pointLabelFontSize","pointLabeFontStyle","pointLabeFontFamily","pointLabeFont","largestPossibleRadius","furthestRight","furthestLeft","getPointPosition","angleRadians","getIndexAngle","setCenterPoint","leftMovement","rightMovement","maxRight","maxLeft","angleMultiplier","startAngleRadians","scalingFactor","distanceFromCenter","thisAngle","angleLineOpts","pointLabelOpts","yCenterOffset","yHeight","outerDistance","outerPosition","pointLabelPosition","pointLabelFontColor","time","steps","maxStep","parser","displayFormat","isoWeekday","minUnit","displayFormats","millisecond","minute","quarter","year","TimeScale","getLabelMoment","labelMoments","getLabelDiff","labelDiffs","buildLabelDiffs","getMomentStartOf","tick","tickUnit","scaleLabelMoments","labelMoment","parseTime","firstTick","momentsForDataset","datasetVisible","scaleLabelDiffs","diffsForDataset","unitScale","scaleSizeInUnits","unitStepSize","tempFirstLabel","tickFormatFunction","tickLabelWidth","labelCapacity","unitDefinitionIndex","unitDefinition","leadingUnitBuffer","trailingUnitBuffer","roundedStart","roundedEnd","newTick","tooltipFormat","formattedTick","tickMoments","asSeconds","$$CookieWriter","$browser","buildCookieString","cookiePath","domain","toUTCString","secure","cookieLength","baseHref","rawDocument","cookie","calcOptions","$$cookieReader","$$cookieWriter","getObject","putObject","toJson","root","$provide","makeStateful","$delegate","$stateful","decorator","constant","STORAGE_KEY","loadScript","script","nodeToAppend","removed","onreadystatechange","appendChild","loadLocale","localeUrl","localeId","localeCache","overrideValues","oldObject","newObject","activeLocale","promiseCache","cachedLocale","$evalAsync","storage","storagePut","storageKey","localInjector","externalLocale","$applyAsync","defaultLocale","storageFactory","storageGet","extraProperties","appendScriptTo","nodeElement","useStorage","storageName","useCookieStorage","minor","addLocalePatternValue","interpolate","locale","tmhDynamicLocaleCache","loadLocaleFn","baseProperties","angularVersion","full","localeLocation","initialLocale","$cacheFactory","angularIscroll","IScroll","_capitalizeFirst","toLocaleUpperCase","iScrollServiceProvider","_configureDefaults","_getDefaults","iScrollService","iScrollSignals","_disable","signalOnly","_state","useIScroll","_enable","_toggle","_refresh","iScroll","momentum","mouseWheel","asyncRefreshDelay","refreshInterval","iScrollEventHandlerMap","configureDefaults","getDefaults","_call","functor","asyncRefresh","_createInstance","_destroyInstance","deregistrators","_refreshInstance","refreshEnabled","_disableRefresh","_enableRefresh","option","_removeEnableHandlers","enableHandlers","signals","iScrollEvents","interceptor","cfpLoadingBar","setComplete","startTimeout","reqsCompleted","reqsTotal","isCached","defaultCache","cached","latencyThreshold","autoIncrement","includeSpinner","includeBar","startSize","parentSelector","spinnerTemplate","loadingBarTemplate","completeTimeout","started","$parentSelector","$parent","$after","lastChild","loadingBarContainer","spinner","_set","pct","loadingBar","incTimeout","_inc","_status","rnd","stat","_completeAnimation","_complete","inc","$SanitizeProvider","toMap","lowercaseKeys","htmlParserImpl","inertBodyElement","mXSSAttempts","$sanitizeMinErr","documentMode","stripCustomNsAttrs","attrToMap","chars","textContent","nextNode","nextSibling","ii","encodeEntities","SURROGATE_PAIR_REGEXP","hi","low","NON_ALPHANUMERIC_REGEXP","htmlSanitizeWriterImpl","uriValidator","ignoreCurrentElement","tag","blockedElements","validElements","lkey","isImage","validAttrs","uriAttrs","voidElements","attrNode","attrName","removeAttributeNode","svgEnabled","$$sanitizeUri","svgElements","htmlParser","htmlSanitizeWriter","uri","enableSvg","optionalEndTagBlockElements","optionalEndTagInlineElements","optionalEndTagElements","blockElements","inlineElements","htmlAttrs","svgAttrs","implementation","createHTMLDocument","docElement","getDocumentElement","bodyElements","sanitizeText","writer","$sanitize","LINKY_URL_REGEXP","MAILTO_REGEXP","linkyMinErr","addText","addLink","linkAttributes","attributesFn","raw","what","InternalStore","delimiter","useCache","inMemoryCache","getNamespacedKey","saved","localStorageAvailable","cookieStorage","sessionStorageAvailable","sessionStorage","_storage","_caching","setStore","setCaching","bsCompilerService","$controller","findElement","fetchTemplate","fetchPromises","compile","controllerAs","locals","transformTemplate","identity","bindToController","$template","titleTemplate","templates","templateEl","outerHTML","contentTemplate","contentEl","contents","linkFn","invokeCtrl","prefixClass","prefixEvent","minLength","comparator","trimValue","$tooltip","TypeaheadFactory","$typeahead","parentScope","$resetMatches","$matches","$activeIndex","$activate","activate","$select","$isVisible","safeDigest","$applyPlacement","$setViewValue","$render","$digest","onSelect","$viewValue","$getIndex","$onMouseDown","$$updateScrollTop","clientTop","offsetTop","clientBottom","highWatermark","lowWatermark","$onKeyDown","$$phase","$root","expression","$parseOptions","falseValueRegExp","bsKey","$eval","bsOptions","parsedOptions","typeahead","watchOptions","watchedOptions","$match","valuesFn","ngModel","$modelValue","selectMode","$formatters","modelValue","$isEmpty","ss","sd","customClass","autoClose","bsEnabled","mouseDownPreventDefault","mouseDownStopPropagation","viewport","selector","$bsCompiler","$sce","TooltipFactory","enterAnimateCallback","onShow","leaveAnimateCallback","onHide","tipElement","_tipToHide","_blur","destroyTipElement","bindTriggerEvents","triggers","isTouch","$onFocusElementMouseDown","unbindTriggerEvents","bindKeyboardEvents","$onKeyUp","$onFocusKeyUp","unbindKeyboardEvents","bindAutoCloseEvents","stopEventPropagation","$body","_autoCloseEventsBinded","unbindAutoCloseEvents","getPosition","isBody","elRect","rect","elOffset","scroll","outerDims","getCalculatedOffset","actualWidth","actualHeight","applyPlacement","tip","offsetWidth","offsetHeight","marginTop","marginLeft","setOffset","using","props","getViewportAdjustedDelta","isVertical","arrowDelta","arrowOffsetPosition","replaceArrow","$viewport","viewportPadding","viewportDimensions","topEdgeOffset","bottomEdgeOffset","leftEdgeOffset","rightEdgeOffset","$arrow","tipScope","$options","$id","trustAsHtml","$setEnabled","setEnabled","$hide","$show","$toggle","hoverState","compileData","tipContainer","onBeforeShow","clonedElement","visibility","prepend","onBeforeHide","setViewport","autoToken","autoPlace","elementPosition","tipWidth","tipHeight","originalPlacement","viewportPosition","tipPosition","isNative","transclusion","dataTarget","bsTooltip","bsShow","defaultDate","useNative","timeType","timeFormat","timezone","modelTimeFormat","autoclose","minTime","Infinity","maxTime","hourStep","minuteStep","secondStep","roundDisplay","iconUp","iconDown","arrowBehavior","$dateFormatter","timepickerFactory","floorMinutes","coeff","createSelection","createTextRange","selRange","collapse","moveStart","moveEnd","focusElement","$timepicker","formatDate","$dateValue","viewDate","getHours","meridian","getMinutes","getSeconds","getMilliseconds","getDatetimeFormat","hoursFormat","timeSeparator","minutesFormat","secondsFormat","showSeconds","showAM","$iconUp","$iconDown","$moveIndex","$switchMeridian","switchMeridian","isDate","$build","$isBuilt","keep","setMinutes","setSeconds","midIndex","$isSelected","$isDisabled","minutes","seconds","rows","isAM","selectedTime","$arrowAction","$setTimeByStep","newDate","targetDate","targetEl","triggerHandler","shiftKey","altKey","hoursLength","minutesLength","secondsLength","sepLength","lateralMove","selectRange","incr","isSeconds","isMeridian","_destroy","_show","_hide","getDefaultLocale","$dateParser","validateAgainstMinMaxTime","parsedTime","isMinValid","setFullYear","isMaxValid","$setValidity","getTimeFormattedString","timepicker","dateParser","getTimeForAttribute","timezoneOffsetAdjust","navClass","$attrs","$navClass","$activeClass","$panes","$activePaneChangeListeners","$viewChangeListeners","$push","pane","$active","$setActive","$remove","activeIndex","$isActive","$pane","$index","$tab","ngModelCtrl","bsTabsCtrl","bsActivePane","parsedBsActivePane","multiple","allNoneButtons","caretHtml","allText","noneText","maxLength","maxLengthHtml","iconCheckmark","SelectFactory","$isMultiple","$showAllNoneButtons","$iconCheckmark","$allText","$noneText","$selectAll","$selectNone","$updateActiveIndex","$apply","anchorCandidate","$isIE","$selectScrollFix","stopImmediatePropagation","dataMultiple","inputEl","spies","$$spies","debounce","throttle","ScrollSpyFactory","bodyEl","isWindowSpy","scrollEl","windowEl","scrollId","$$count","unbindViewContentLoaded","unbindIncludeContentLoaded","activeTarget","debouncedCheckPosition","throttledCheckPosition","debouncedCheckOffsets","viewportHeight","$scrollspy","trackedElements","$trackedElements","sortedElements","checkPosition","checkPositionWithEventLoop","checkOffsets","pageYOffset","docEl","$activateElement","$getTrackedElement","trackedElement","trackElement","untrackElement","toDelete","scrollspy","childEl","PopoverFactory","$popover","popover","bsPopover","routeAttr","strict","$navbar","liElements","li","liElement","pattern","regexp","backdropAnimation","zIndex","ModalFactory","$modal","bindBackdropEvents","modalElement","hideOnBackdropClick","preventEventDefault","unbindBackdropEvents","destroyModalElement","modalScope","dialogBaseZindex","backdropBaseZindex","z-index","backdropCount","validSizes","lg","sm","modalClass","bsModal","dot","webkitCancelRequestAnimationFrame","rafSupported","raf","supported","ParseOptionsFactory","parseValues","valueName","displayFn","valueFn","$values","keyName","groupByFn","offsetParentElement","ownerDocument","offsetParent","extra","boxRect","pageXOffset","clientLeft","curPosition","curLeft","curCSSTop","curTop","curOffset","curCSSLeft","calculatePosition","curElem","offsetParentEl","offsetParentRect","outer","wait","immediate","callNow","leading","trailing","$localeProvider","ParseDate","isNumeric","indexOfCaseInsensitive","setMilliseconds","setDate","setMonth","proto","dateFilter","DateParserFactory","regExpForFormat","buildDateAbstractRegex","buildDateParseRegex","escapedFormat","escapeReservedSymbols","escapedLiteralFormat","literalRegex","formatParts","dateElements","regExpMap","dateRegexParts","part","isFormatStringLiteral","trimLiteralEscapeChars","abstractRegex","setMapForFormat","buildDateParseValuesMap","valuesMatch","keyIndex","valueKey","valueFunction","valuesRegex","valuesFunctionMap","setFnMap","setMap","sss","HH","H","hh","EEEE","DATETIME_FORMATS","DAY","EEE","SHORTDAY","MMMM","MONTH","MMM","SHORTMONTH","MM","M","yyyy","$format","baseDate","formatRegex","formatSetMap","getDateForAttribute","daylightSavingAdjust","undo","splitTimeFormat","weekdaysShort","DropdownFactory","onBodyClick","$dropdown","parentEl","matchesSelector","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","oMatchesSelector","tElement","tAttrs","bsDropdown","toggleEvent","$button","constantValueRegExp","isInput","trueValue","falseValue","hasExoticValues","checked","dateType","dateFormat","modelDateFormat","dayFormat","monthFormat","yearFormat","monthTitleFormat","yearTitleFormat","strictFormat","startView","minView","startWeek","daysOfWeekDisabled","hasToday","hasClear","iconLeft","iconRight","datepickerViews","DatepickerFactory","updateSelected","$datepicker","pickerViews","$views","$mode","$iconLeft","$iconRight","$hasToday","$hasClear","$picker","$selectPane","$toggleMode","setMode","$setToday","$clear","updateDisabledDates","dateRanges","disabledDateRanges","$setDisabledEl","pristine","built","$updateSelected","UTC","getUTCFullYear","getUTCMonth","getUTCDate","onKeyDown","normalizeDateRanges","ranges","validateAgainstMinMaxDate","parsedDate","getDateFormattedString","disabledDates","disabledRanges","previousValue","arrays","mod","picker","weekDaysMin","weekDaysLabels","weekDaysLabelsHtml","firstDayOfMonth","firstDayOfMonthOffset","firstDate","getDay","firstDateOffset","days","isToday","muted","showLabels","isTodayDisabled","actualTime","months","lastDate","actualMonth","firstYear","years","actualYear","setYear","disallowToggle","startCollapsed","allowMultiple","fixActiveItemIndexes","activeIndexes","$targets","activeItems","deactivateItem","activateItem","$toggles","$registerToggle","$registerTarget","$unregisterToggle","$unregisterTarget","$activeIndexes","$collapse","bsCollapseCtrl","bsCollapseToggle","AsideFactory","bsAside","aside","dismissable","AlertFactory","$alert","bsAlert","alert","inlineStyles","setWidth","AffixFactory","getRequiredAffixClass","_unpin","elementHeight","getScrollTop","scrollHeight","getScrollHeight","offsetBottom","initialAffixTop","$affix","initialOffsetTop","affixed","unpin","$parseOffsets","$debouncedOnResize","affix","offsetUnpin","$onResize","initialPosition","initialTop","affixTarget","nodeName_","$TouchProvider","$compileProvider","ngClickDirectiveAdded","ngTouchClickDirectiveFactory","$$moduleName","makeSwipeDirective","ngTouch","$swipe","MAX_VERTICAL_DISTANCE","MAX_VERTICAL_RATIO","MIN_HORIZONTAL_DISTANCE","validSwipe","startCoords","valid","swipeHandler","pointerTypes","getCoordinates","changedTouches","getEvents","pointerType","POINTER_EVENTS","MOVE_BUFFER_RADIUS","mouse","touch","pointer","totalX","totalY","lastPos","hit","CLICKBUSTER_THRESHOLD","checkAllowableRegions","touchCoordinates","lastPreventedTime","PREVENT_DURATION","lastLabelClickCoordinates","onTouchStart","preventGhostClick","TAP_DURATION","MOVE_TOLERANCE","ACTIVE_CLASS_NAME","tapping","tapElement","touchStartX","touchStartY","clickHandler","ngClick","dist","touchend","$translateStaticFilesLoader","files","load","file","fileUrl","fileMap","mergedData","runTranslate","fallbackFromIncorrectStorageValue","preferred","$translateSanitizationProvider","currentStrategy","hasConfiguredStrategy","hasShownNoStrategyConfiguredWarning","sanitize","htmlSanitizeValue","escape","htmlEscapeValue","sanitizeParameters","mapInterpolationParameters","escapeParameters","sce","htmlTrustValue","sceParameters","escaped","addStrategy","strategyName","strategyFunction","removeStrategy","useStrategy","cachedStrategyMap","applyStrategies","selectedStrategies","selectedStrategy","showNoStrategyConfiguredWarning","has","iteratee","stack","propertyKey","$STORAGE_KEY","$windowProvider","pascalprechtTranslateOverrider","$preferredLanguage","$languageKeyAliases","$fallbackLanguage","$fallbackWasString","$uses","$nextLang","$storageFactory","$storagePrefix","$missingTranslationHandlerFactory","$interpolationFactory","$loaderFactory","$loaderOptions","$notFoundIndicatorLeft","$notFoundIndicatorRight","loaderCache","postProcessFn","$translationTable","$availableLanguageKeys","$storageKey","$interpolatorFactories","$cloakClassName","$postCompilingEnabled","$forceAsyncReloadEnabled","$allowNamespaces","$nestedObjectDelimeter","$isReady","$keepContent","directivePriority","statefulFilter","uniformLanguageTagResolver","languageTagResolver","java","bcp47","iso639-1","getFirstBrowserLanguage","nav","browserLanguagePropertyKeys","languages","searchElement","negotiateLocale","avail","langKeyAlias","hasWildcardKey","hasExactKey","langKey","translationTable","flatObject","cloakClassName","allowNamespaces","namespacesEnabled","nestedObjectDelimeter","prevKey","keyWithPath","keyWithShortPath","addInterpolation","useMessageFormatInterpolation","useInterpolation","setupPreferredLanguage","translationNotFoundIndicator","indicator","translationNotFoundIndicatorLeft","translationNotFoundIndicatorRight","fallbackStack","resolveClientLocale","useUrlLoader","useLoader","loaderFactory","useLocalStorage","storagePrefix","useMissingTranslationHandlerLog","useMissingTranslationHandler","usePostCompiling","forceAsyncReload","uniformLanguageTag","standard","determinePreferredLanguage","registerAvailableLanguageKeys","languageKeys","aliases","useLoaderCache","postProcess","keepContent","Storage","fallbackIndex","startFallbackIteration","defaultInterpolator","pendingLoader","interpolatorHashMap","langPromises","translationId","interpolateParams","interpolationId","defaultTranslationText","forceLanguage","sanitizeStrategy","uses","loadTranslationsIfMissing","translateAll","translationIds","regardless","promiseToWaitFor","promiseResolved","determineTranslation","applyNotFoundIndicators","useLanguage","eachInterpolator","interpolator","loadAsync","loaderOptions","onLoaderSuccess","table","onLoaderError","eachInterpolationFactory","interpolatorFactory","getInterpolationIdentifier","getTranslationTable","onResolve","getFallbackTranslation","Interpolator","interpolatedValue","applyPostProcessing","getFallbackTranslationInstant","$$unwrapTrustedValue","result2","translateByHandler","resolveForFallbackLanguage","fallbackLanguageIndex","missingTranslationHandlerTranslation","resolveForFallbackLanguageInstant","fallbackTranslation","fallbackTranslationInstant","resolvedTranslation","_translationId","determineTranslationInstant","clearNextLangAndPromise","useFallbackLanguage","langKeyPosition","proposedLanguage","aliasedKey","isPostCompilingEnabled","isForceAsyncReloadEnabled","isKeepContent","loadNewData","languageKey","updatedLanguages","languagesToReload","possibleLangKeys","possibleLangKey","versionInfo","isReady","$onReadyDeferred","onReady","getAvailableLanguageKeys","globalOnReadyListener","globalOnChangeListener","processAsyncResult","fallbackLanguageId","$translateDefaultInterpolation","$translateSanitization","$translateInterpolator","$identifier","interpolationParams","interpolatedText","translateDirective","tAttr","translateValuesExist","translateValues","translateInterpolation","translateSanitizeStrategyExist","translateSanitizeStrategy","translateValueExist","interpolateRegExp","startSymbol","endSymbol","watcherRegExp","iElement","iAttr","preText","postText","translateNamespace","getTranslateNamespace","initInterpolationParams","attributeName","observeElementTranslation","_unwatchOld","iElementText","interpolateMatches","watcherMatches","updateTranslations","observeAttributeTranslation","translateAttr","firstAttributeChangedEvent","defaultText","observeValueAttribute","updateTranslation","translateLanguage","applyTranslation","translateKeepContent","empty","globallyEnabled","locallyDefined","translateCompile","locallyEnabled","$attr","translateDefault","unbind","translateAttrDirective","previousAttributes","flag","watchAttribute","valueCallback","changeCallback","translateCloakDirective","applyCloak","removeCloak","iRemoveCloak","iApplyCloak","translateCloak","translateNamespaceDirective","iAttrs","_getTranslateNamespace","translateLanguageDirective","newTranslateLanguage","translateFilterFactory","translateFilter","__SCOPE_IS_NOT_AVAILABLE","$translationCache","inherit","dst","ancestors","objectKeys","inheritParams","currentParams","newParams","$to","parentParams","parents","inherited","inheritList","equalForKeys","filterByKeys","omit","silenceUncaughtInPromise","$Resolve","VISIT_IN_PROGRESS","VISIT_DONE","NOTHING","NO_DEPENDENCIES","NO_LOCALS","NO_PARENT","$$promises","$$values","study","invocables","visit","visited","cycle","plan","annotate","param","isResolve","invocableKeys","merged","$$inheritedValues","resolution","fail","$$failure","invocable","onfailure","invocation","proceed","waitParams","dep","$TemplateFactory","fromConfig","fromString","fromUrl","templateProvider","fromProvider","Accept","UrlMatcher","parentMatcher","addParameter","paramNames","$$UMFP","Param","quoteRegExp","squash","optional","surroundPattern","matchDetails","isSearch","segment","last","caseInsensitive","searchPlaceholder","compiled","segments","$$new","ParamSet","isOptional","sourceSearch","sourcePath","$$paramNames","Type","$UrlMatcherFactory","valToString","~","/","valFromString","~~","~2F","getDefaultConfig","isStrictMode","isCaseInsensitive","isInjectable","flushTypeQueue","typeQueue","$types","def","defaultSquashPolicy","enqueue","defaultTypes","encode","decode","int","capture","valueOf","any","$$getDefaultValue","strictMode","isMatcher","definition","definitionFn","unwrapShorthand","isShorthand","$$fn","getType","urlType","getArrayMode","arrayDefaults","arrayParamNomenclature","getSquashPolicy","getReplace","arrayMode","configuredKeys","defaultPolicy","$value","hasReplaceVal","$replace","replacement","$normalize","$asArray","dynamic","$$parent","$$keys","ignore","paramset","paramValues","$$equals","paramValues1","paramValues2","equal","$$validates","rawVal","normalized","encoded","$UrlRouterProvider","$locationProvider","$urlMatcherFactory","regExpPrefix","handleIfMatch","appendBasePath","isHtml5","absolute","check","rule","handled","lastPushedUrl","listen","interceptDeferred","sync","read","urlMatcher","$$avoidResync","validates","html5Mode","history","hashPrefix","slash","redirect","handlerIsString","matcher","sticky","deferIntercept","$StateProvider","isRelative","findState","stateOrName","isStr","rel","pathLength","states","queueState","parentName","flushQueuedChildren","queued","registerState","stateBuilder","$delegates","abstractKey","navigable","transitionTo","isGlob","doesStateMatchGlob","glob","globSegments","MAX_VALUE","$view","$resolve","$urlRouter","handleRedirect","TransitionAborted","$retry","TransitionFailed","retryTransition","TransitionSuperseded","resolveState","paramsAreFiltered","resolveViews","viewsPromises","injectables","globals","controllerProvider","injectLocals","$$controller","$$state","$$controllerAs","$$resolveAs","resolveAs","TransitionSupersededError","TransitionPrevented","relative","fromPath","redirectResult","toPath","toLocals","reloadState","ownParams","shouldSkipReload","entering","exiting","onExit","paramDef","lossy","nonSearchParamsEqual","fromAndToState","notSearchParam","nonQueryParamKeys","nonQueryParams","nonQueryParamSet","reloadOnSearch","compositeName","","$ViewProvider","$templateFactory","$ViewScrollProvider","useAnchorScroll","$anchorScroll","$ViewDirective","$uiViewScroll","getService","getRenderer","statics","$animator","cleanupLastView","previousEl","currentScope","currentEl","$uiViewData","renderer","$$animLeave","updateView","firstTime","newScope","getUiViewName","previousLocals","latestLocals","animEnter","animLeave","viewAnimData","$animEnter","$animLeave","autoScrollExp","onloadExp","autoscroll","inheritedData","$ViewDirectiveFill","initial","resolveData","uiView","uiViewCreatedBy","parseStateRef","ref","parsed","preparsed","paramExpr","stateContext","stateData","getTypeInfo","isSvg","isForm","isAnchor","clickable","clickHook","ctrlKey","metaKey","ignorePreventDefaultCount","defaultOpts","$StateRefDirective","uiSrefActive","hookFn","uiSref","unlinkInfoFn","uiSrefOpts","$$addStateInfo","$StateRefDynamicDirective","runStateRefLink","uiState","uiStateParams","uiStateOpts","watch","$StateRefActiveDirective","addState","stateParams","stateHash","createStateHash","stateInfo","anyMatch","exactMatch","activeEqClass","uiSrefActiveEq","newState","deregister","$IsStateFilter","isFilter","$IncludedByStateFilter","includesFilter","decodePathArray","reverseString","unquoteDashes","allReversed","paramName","parameters","nTotal","nPath","paramVal","encodeDashes","isPathParam","isDefaultValue","nextSegment","isFinalPathParam","$subPattern","sub","ArrayType","bindTo","callbackName","arrayWrap","arrayUnwrap","falsey","arrayHandler","allTruthyMode","arrayEqualsHandler","val1","val2","$arrayMode","autoinject","minErr","ErrorConstructor","paramPrefix","SKIP_INDEXES","templateArgs","shiftedIndex","toDebugString","isArrayLike","isWindow","isPrimitive","isBlankObject","forEachSorted","reverseParams","iteratorFn","nextUid","setHashKey","$$hashKey","baseExtend","objs","deep","jj","isRegExp","toInt","hasCustomToString","isScope","isFile","isFormData","isBlob","isBoolean","isPromiseLike","isTypedArray","TYPED_ARRAY_REGEXP","makeMap","arrayRemove","destination","copyRecurse","copyElement","stackSource","stackDest","needsRecurse","copyType","byteOffset","copied","o1","o2","keySet","createMap","array1","array2","sliceArgs","curryArgs","toJsonReplacer","pretty","timezoneToOffset","fallback","ALL_COLONS","requestedTimezoneOffset","addDateMinutes","convertTimezoneToLocal","dateTimezoneOffset","timezoneOffset","startingTag","elemHtml","NODE_TYPE_TEXT","tryDecodeURIComponent","decodeURIComponent","parseKeyValue","keyValue","splitPoint","toKeyValue","arrayValue","encodeUriQuery","encodeUriSegment","pctEncodeSpaces","getNgAttribute","ngAttr","ngAttrPrefixes","angularInit","bootstrap","appElement","candidate","strictDi","doBootstrap","debugInfoEnabled","createInjector","NG_ENABLE_DEBUG_INFO","NG_DEFER_BOOTSTRAP","resumeBootstrap","extraModules","resumeDeferredBootstrap","reloadWithDebugInfo","getTestability","rootElement","snake_case","SNAKE_CASE_REGEXP","letter","bindJQuery","originalCleanData","bindJQueryFired","jqName","jq","JQLitePrototype","isolateScope","cleanData","elems","JQLite","assertArgFn","acceptArrayAnnotation","assertNotHasOwnProperty","getter","bindFnToScope","lastInstance","getBlockNodes","nodes","blockNodes","endNode","setupModuleLoader","ensure","$injectorMinErr","requires","configFn","invokeLater","insertMethod","invokeQueue","moduleInstance","invokeLaterAndSetModuleName","recipeName","factoryFunction","configBlocks","runBlocks","_invokeQueue","_configBlocks","_runBlocks","component","block","shallowCopy","serializeObject","seen","publishExternalAPI","uppercase","$$counter","$$csp","csp","angularModule","$$SanitizeUriProvider","$CompileProvider","htmlAnchorDirective","inputDirective","textarea","form","formDirective","scriptDirective","selectDirective","styleDirective","optionDirective","ngBind","ngBindDirective","ngBindHtml","ngBindHtmlDirective","ngBindTemplate","ngBindTemplateDirective","ngClass","ngClassDirective","ngClassEven","ngClassEvenDirective","ngClassOdd","ngClassOddDirective","ngCloak","ngCloakDirective","ngController","ngControllerDirective","ngForm","ngFormDirective","ngHide","ngHideDirective","ngIf","ngIfDirective","ngInclude","ngIncludeDirective","ngInit","ngInitDirective","ngNonBindable","ngNonBindableDirective","ngPluralize","ngPluralizeDirective","ngRepeat","ngRepeatDirective","ngShow","ngShowDirective","ngStyle","ngStyleDirective","ngSwitch","ngSwitchDirective","ngSwitchWhen","ngSwitchWhenDirective","ngSwitchDefault","ngSwitchDefaultDirective","ngOptions","ngOptionsDirective","ngTransclude","ngTranscludeDirective","ngModelDirective","ngList","ngListDirective","ngChange","ngChangeDirective","patternDirective","ngPattern","requiredDirective","ngRequired","minlength","minlengthDirective","ngMinlength","maxlength","maxlengthDirective","ngMaxlength","ngValue","ngValueDirective","ngModelOptions","ngModelOptionsDirective","ngIncludeFillContentDirective","ngAttributeAliasDirectives","ngEventDirectives","$AnchorScrollProvider","$AnimateProvider","$CoreAnimateCssProvider","$$CoreAnimateJsProvider","$$CoreAnimateQueueProvider","$$AnimateRunnerFactoryProvider","$$animateAsyncRun","$$AnimateAsyncRunFactoryProvider","$BrowserProvider","$CacheFactoryProvider","$ControllerProvider","$DocumentProvider","$exceptionHandler","$ExceptionHandlerProvider","$FilterProvider","$$ForceReflowProvider","$InterpolateProvider","$IntervalProvider","$HttpProvider","$httpParamSerializer","$HttpParamSerializerProvider","$httpParamSerializerJQLike","$HttpParamSerializerJQLikeProvider","$httpBackend","$HttpBackendProvider","$xhrFactory","$xhrFactoryProvider","$jsonpCallbacks","$jsonpCallbacksProvider","$LocationProvider","$LogProvider","$ParseProvider","$RootScopeProvider","$QProvider","$$q","$$QProvider","$SceProvider","$sceDelegate","$SceDelegateProvider","$SnifferProvider","$TemplateCacheProvider","$TemplateRequestProvider","$$testability","$$TestabilityProvider","$TimeoutProvider","$WindowProvider","$$RAFProvider","$$jqLiteProvider","$$HashMapProvider","$$CookieReaderProvider","jqNextId","jqId","SPECIAL_CHARS_REGEXP","MOZ_HACK_REGEXP","jqLiteIsTextNode","HTML_REGEXP","jqLiteAcceptsData","NODE_TYPE_ELEMENT","NODE_TYPE_DOCUMENT","jqLiteHasData","jqCache","ng339","jqLiteCleanData","jqLiteRemoveData","jqLiteBuildFragment","tmp","fragment","createDocumentFragment","createTextNode","TAG_NAME_REGEXP","wrapMap","_default","XHTML_TAG_REGEXP","childNodes","jqLiteParseHTML","SINGLE_TAG_REGEXP","jqLiteWrapNode","wrapper","replaceChild","argIsString","jqLiteMinErr","jqLiteAddNodes","jqLiteClone","jqLiteDealoc","onlyDescendants","descendants","jqLiteOff","unsupported","expandoStore","jqLiteExpandoStore","handle","removeHandler","listenerFns","removeEventListenerFn","MOUSE_EVENT_MAP","expandoId","createIfNecessary","jqLiteData","isSimpleSetter","isSimpleGetter","massGetter","jqLiteHasClass","jqLiteRemoveClass","cssClasses","cssClass","jqLiteAddClass","existingClasses","jqLiteController","jqLiteInheritedData","NODE_TYPE_DOCUMENT_FRAGMENT","jqLiteEmpty","jqLiteRemove","keepData","jqLiteDocumentLoaded","win","getBooleanAttrName","booleanAttr","BOOLEAN_ATTR","BOOLEAN_ELEMENTS","getAliasedAttrName","ALIASED_ATTR","createEventHandler","isDefaultPrevented","eventFns","eventFnsLength","immediatePropagationStopped","originalStopImmediatePropagation","isImmediatePropagationStopped","handlerWrapper","specialHandlerWrapper","defaultHandlerWrapper","specialMouseHandlerWrapper","related","relatedTarget","jqLiteContains","hashKey","nextUidFn","objType","HashMap","isolatedUid","stringifyFn","Function","extractArgs","fnText","STRIP_COMMENTS","ARROW_ARG","FN_ARGS","anonFn","argDecl","FN_ARG_SPLIT","FN_ARG","underscore","modulesToLoad","supportObject","provider_","providerInjector","instantiate","providerCache","providerSuffix","enforceReturnValue","instanceInjector","factoryFn","enforce","instanceCache","serviceName","decorFn","origProvider","orig$get","origInstance","loadModules","moduleFn","runInvokeQueue","invokeArgs","loadedModules","createInternalInjector","caller","INSTANTIATING","injectionArgs","$$annotate","isClass","msie","ctor","protoInstanceInjector","autoScrollingEnabled","disableAutoScrolling","getFirstAnchor","getYOffset","elemTop","scrollBy","getElementsByName","splitClasses","prepareAnimateOptions","Browser","completeOutstandingRequest","outstandingRequestCount","outstandingRequestCallbacks","getHash","cacheStateAndFireUrlChange","pendingLocation","cacheState","fireUrlChange","cachedState","getCurrentState","lastCachedState","lastBrowserUrl","lastHistoryState","urlChangeListeners","pendingDeferIds","isMock","$$completeOutstandingRequest","$$incOutstandingRequestCount","notifyWhenNoOutstandingRequests","baseElement","sameState","sameBase","stripHash","urlChangeInit","onUrlChange","$$applicationDestroyed","$$checkUrlChange","timeoutId","deferId","cacheFactory","cacheId","freshEnd","staleEnd","nextEntry","prevEntry","caches","stats","capacity","lruHash","lruEntry","removeAll","UNINITIALIZED_VALUE","$$sanitizeUriProvider","parseIsolateBindings","isController","LOCAL_REGEXP","bindings","scopeName","bindingCache","$compileMinErr","parseDirectiveBindings","identifierForController","assertValidDirectiveName","getDirectiveRequire","REQUIRE_PREFIX_REGEXP","hasDirectives","Suffix","COMMENT_DIRECTIVE_REGEXP","CLASS_DIRECTIVE_REGEXP","ALL_OR_NOTHING_ATTRS","EVENT_HANDLER_ATTR_REGEXP","registerDirective","directiveFactory","directives","makeInjectable","ddo","aHrefSanitizationWhitelist","imgSrcSanitizationWhitelist","TTL","onChangesTtl","flushOnChangesQueue","onChangesQueue","errors","Attributes","attributesToCopy","$$element","setSpecialAttr","specialAttrHolder","removeNamedItem","setNamedItem","safeAddClass","$compileNodes","transcludeFn","maxPriority","ignoreDirective","previousCompileContext","NOT_EMPTY","nodeValue","compositeLinkFn","compileNodes","$$addScopeClass","cloneConnectFn","needsNewScope","parentBoundTranscludeFn","transcludeControllers","futureParentElement","$$boundTransclude","detectNamespaceForChildElements","$linkNode","wrapTemplate","controllerName","$$addScopeInfo","nodeList","nodeLinkFn","childLinkFn","childScope","childBoundTranscludeFn","stableNodeList","nodeLinkFnFound","nodeListLength","linkFns","transcludeOnThisElement","createBoundTranscludeFn","templateOnThisElement","linkFnFound","collectDirectives","applyDirectivesToNode","previousBoundTranscludeFn","boundTranscludeFn","transcludedScope","cloneFn","containingScope","$$transcluded","boundSlots","$$slots","slotName","attrsMap","addDirective","directiveNormalize","nName","ngAttrName","isNgAttr","nAttrs","attrStartName","attrEndName","NG_ATTR_BINDING","PREFIX_REGEXP","multiElementMatch","MULTI_ELEMENT_DIR_RE","directiveIsMultiElement","addAttrInterpolateDirective","animVal","addTextInterpolateDirective","NODE_TYPE_COMMENT","collectCommentDirectives","byPriority","groupScan","attrStart","attrEnd","depth","groupElementsLinkFnWrapper","compilationGenerator","eager","compileNode","templateAttrs","jqCollection","originalReplaceDirective","preLinkFns","postLinkFns","addLinkFns","newIsolateScopeDirective","$$isolateScope","cloneAndAnnotateFn","linkNode","controllersBoundTransclude","cloneAttachFn","hasElementTranscludeDirective","elementControllers","scopeToChild","slotTranscludeFn","controllerScope","scopeBindingInfo","newScopeDirective","isSlotFilled","controllerDirectives","setupControllers","templateDirective","$$originalDirective","$$isolateBindings","initializeDirectiveBindings","removeWatches","controllerDirective","$$bindings","bindingInfo","controllerResult","getControllers","controllerInstance","$onChanges","initialChanges","$doCheck","$onDestroy","invokeLinkFn","$postLink","directiveValue","terminalPriority","nonTlbTranscludeDirective","hasTranscludeDirective","hasTemplate","$compileNode","replaceDirective","childTranscludeFn","didScanForMultipleTransclusion","mightHaveMultipleTransclusionError","$$start","$$end","assertNoDuplicate","$$tlb","candidateDirective","scanningIndex","$$createComment","replaceWith","$$parentNode","slots","slotMap","filledSlots","elementSelector","filled","$$newScope","denormalizeTemplate","removeComments","templateNamespace","newTemplateAttrs","templateDirectives","unprocessedDirectives","markDirectiveScope","mergeTemplateAttributes","compileTemplateUrl","inheritType","dataName","controllerKey","tDirectives","startAttrName","endAttrName","multiElement","srcAttr","dstAttr","afterTemplateNodeLinkFn","afterTemplateChildLinkFn","linkQueue","beforeTemplateCompileNode","origAsyncDirective","derivedSyncDirective","tempTemplateAttrs","beforeTemplateLinkNode","linkRootElement","$$destroyed","oldClasses","ignoreChildLinkFn","previousDirective","wrapModuleNameIfDefined","moduleName","interpolateFn","templateNode","templateNodeParent","hasCompileParent","$$addBindingClass","$$addBindingInfo","expressions","getTrustedContext","attrNormalizedName","HTML","RESOURCE_URL","allOrNothing","trustedContext","$$observers","$$inter","$$scope","$updateClass","elementsToRemove","newNode","firstElementToRemove","removeCount","j2","annotation","recordChanges","changes","triggerOnChangesHook","SimpleChange","removeWatchCollection","lastValue","parentGet","parentSet","removeWatch","_UNINITIALIZED_VALUE","literal","parentValueWatch","parentValue","initialValue","SIMPLE_ATTR_NAME","$addClass","classVal","$removeClass","newClasses","tokenDifference","writeAttr","booleanKey","trimmedSrcset","srcPattern","rawUris","nbrUrisWith2parts","innerIdx","lastTuple","binding","isolated","noTemplate","comment","createComment","str1","str2","tokens1","tokens2","jqNodes","ident","CNTRL_REG","allowGlobals","addIdentifier","later","$controllerMinErr","controllerPrototype","exception","cause","serializeValue","serialize","toSerialize","topLevel","defaultHttpResponseTransform","tempData","JSON_PROTECTION_PREFIX","APPLICATION_JSON","isJsonLike","jsonStart","JSON_START","JSON_ENDS","parseHeaders","fillInParsed","headerVal","headerKey","headersGetter","headersObj","transformData","fns","transformResponse","transformRequest","common","CONTENT_TYPE_APPLICATION_JSON","xsrfCookieName","xsrfHeaderName","paramSerializer","useApplyAsync","useLegacyPromise","useLegacyPromiseExtensions","interceptorFactories","requestConfig","chainInterceptors","thenFn","rejectFn","executeHeaderFns","headerContent","processedHeaders","headerFn","mergeHeaders","defHeaderName","lowercaseDefHeaderName","reqHeaderName","defHeaders","reqHeaders","defaultHeadersIteration","serverRequest","reqData","sendReq","requestInterceptors","responseInterceptors","reversedInterceptors","$httpMinErrLegacyFn","createApplyHandlers","applyHandlers","callEventHandler","headersString","resolveHttpPromise","resolvePromise","resolvePromiseWithResult","removePendingReq","pendingRequests","cachedResp","buildUrl","xsrfValue","urlIsSameOrigin","uploadEventHandlers","serializedParams","interceptorFactory","createHttpBackend","createXhr","$browserDefer","jsonpReq","callbackPath","wasCalled","addEventListenerFn","timeoutRequest","jsonpDone","completeRequest","createCallback","getResponse","removeCallback","urlResolve","getAllResponseHeaders","upload","unescapeText","escapedStartRegexp","escapedEndRegexp","constantWatchDelegate","objectEquality","constantInterp","unwatch","mustHaveExpression","parseStringifyInterceptor","getValue","$interpolateMinErr","interr","unescapedText","$$watchDelegate","endIndex","parseFns","textLength","expressionPositions","startSymbolLength","endSymbolLength","throwNoconcat","compute","getTrusted","$watchGroup","oldValues","currValue","interval","invokeApply","hasParams","iteration","setInterval","clearInterval","skipApply","$$intervalId","intervals","encodePath","parseAbsoluteUrl","absoluteUrl","locationObj","parsedUrl","$$protocol","$$host","hostname","$$port","DEFAULT_PORTS","parseAppUrl","relativeUrl","prefixed","$$path","pathname","$$search","$$hash","haystack","needle","stripBaseUrl","trimEmptyHash","stripFile","serverBase","LocationHtml5Url","appBase","appBaseNoFile","basePrefix","$$html5","$$parse","pathUrl","$locationMinErr","$$compose","$$url","$$absUrl","$$parseLinkUrl","relHref","appUrl","prevAppUrl","rewrittenUrl","LocationHashbangUrl","removeWindowsDriveName","firstPathSegmentMatch","windowsFilePathExp","withoutHashUrl","withoutBaseUrl","LocationHashbangInHtml5Url","locationGetter","locationGetterSetter","preprocess","requireBase","rewriteLinks","setBrowserUrlWithFallback","oldUrl","oldState","afterLocationChange","absUrl","LocationMode","initialUrl","IGNORE_URI_REGEXP","absHref","newUrl","currentReplace","$$replace","urlOrStateChanged","formatError","sourceURL","consoleLog","logFn","hasApply","arg1","arg2","ensureSafeMemberName","fullExpression","$parseMinErr","getStringValue","ensureSafeObject","ensureSafeFunction","CALL","APPLY","BIND","ensureSafeAssignContext","ifDefined","plusFn","isStateless","filterName","findConstantAndWatchExpressions","ast","allConstants","argsToWatch","AST","Program","expr","Literal","toWatch","UnaryExpression","argument","BinaryExpression","LogicalExpression","ConditionalExpression","alternate","consequent","Identifier","MemberExpression","computed","CallExpression","callee","AssignmentExpression","ArrayExpression","ObjectExpression","ThisExpression","LocalsExpression","getInputs","lastExpression","isAssignable","assignableAST","NGValueParameter","operator","isLiteral","isConstant","ASTCompiler","astBuilder","ASTInterpreter","isPossiblyDangerousMemberName","getValueOf","objectValueOf","identStart","identContinue","cacheDefault","cacheExpensive","literals","true","false","null","addLiteral","literalName","literalValue","setIdentifierFns","identifierStart","identifierContinue","interceptorFn","expensiveChecks","parsedExpression","oneTime","runningChecksEnabled","parseOptions","$parseOptionsExpensive","lexer","Lexer","Parser","oneTimeLiteralWatchDelegate","oneTimeWatchDelegate","inputsWatchDelegate","expensiveChecksInterceptor","addInterceptor","expensiveCheckFn","expensiveCheckOldValue","expressionInputDirtyCheck","oldValueOfValue","prettyPrintExpression","lastResult","inputExpressions","oldInputValueOf","newInputValue","oldInputValueOfValues","oldInputValues","old","isAllDefined","allDefined","watchDelegate","useInputs","regularWatch","noUnsafeEval","isIdentifierStart","isIdentifierContinue","$$runningExpensiveChecks","qFactory","exceptionHandler","simpleBind","processQueue","pending","processScheduled","scheduleProcessQueue","Deferred","race","$qMinErr","onFulfilled","onRejected","progressBack","finally","handleCallback","$$reject","$$resolve","rejectPromise","makePromise","callbackOutput","errback","$Q","resolver","resolveFn","createChildScopeClass","ChildScope","$$watchers","$$nextSibling","$$childHead","$$childTail","$$listeners","$$listenerCount","$$watchersCount","$$ChildScope","$rootScopeMinErr","lastDirtyWatch","applyAsyncId","digestTtl","destroyChildScope","cleanUpScope","$$prevSibling","Scope","beginPhase","clearPhase","incrementWatchersCount","decrementListenerCount","initWatchVal","flushApplyAsync","applyAsyncQueue","scheduleApplyAsync","isolate","watchExp","watcher","watchExpressions","watchGroupAction","changeReactionScheduled","firstRun","deregisterFns","shouldCall","unwatchFn","$watchCollectionInterceptor","_value","newLength","bothNaN","newItem","oldItem","internalArray","oldLength","changeDetected","internalObject","$watchCollectionAction","initRun","veryOldValue","trackVeryOldValue","changeDetector","watchers","dirty","logIdx","asyncTask","ttl","watchLog","asyncQueuePosition","asyncQueue","traverseScopesLoop","postDigestQueuePosition","postDigestQueue","$applyAsyncExpression","namedListeners","indexOfListener","targetScope","listenerArgs","$$asyncQueue","$$postDigestQueue","$$applyAsyncQueue","normalizedVal","adjustMatcher","$sceMinErr","escapeForRegexp","adjustMatchers","matchers","adjustedMatchers","SCE_CONTEXTS","resourceUrlWhitelist","resourceUrlBlacklist","matchUrl","isResourceUrlAllowedByPolicy","allowed","generateHolderType","Base","holderType","trustedValue","trustAs","Constructor","byType","maybeTrusted","trustedValueHolderBase","htmlSanitizer","CSS","JS","parseAs","enumValue","lName","vendorPrefix","eventSupport","isChromePackagedApp","chrome","runtime","hasHistoryPushState","pushState","android","boxee","vendorRegex","bodyStyle","webkitTransition","webkitAnimation","hasEvent","divElm","httpOptions","handleRequestFn","tpl","ignoreRequestError","$templateRequestMinErr","getTrustedResourceUrl","transformer","testability","findBindings","opt_exactMatch","dataBinding","bindingName","findModels","prefixes","attributeEquals","getLocation","setLocation","whenStable","deferreds","$$timeoutId","urlParsingNode","requestUrl","originUrl","$$CookieReader","safeDecodeURIComponent","lastCookies","lastCookieString","cookieArray","currentCookieString","currencyFilter","filterFilter","jsonFilter","limitToFilter","lowercaseFilter","numberFilter","orderByFilter","uppercaseFilter","anyPropertyKey","predicateFn","matchAgainstAnyProp","expressionType","getTypeForFilter","createPredicateFn","shouldMatchPrimitives","actual","expected","deepCompare","dontMatchWholeObject","actualType","expectedType","expectedVal","matchAnyProperty","actualVal","formats","currencySymbol","fractionSize","CURRENCY_SYM","PATTERNS","maxFrac","formatNumber","numStr","digits","numberOfIntegerDigits","zeros","ZERO_CHAR","MAX_DIGITS","roundNumber","parsedNumber","minFrac","fractionLen","roundAt","digit","reduceRight","groupSep","decimalSep","isInfinity","formattedText","integerLen","decimals","groups","lgSize","gSize","negPre","negSuf","posPre","posSuf","padNumber","negWrap","dateGetter","dateStrGetter","shortForm","standAlone","propPrefix","timeZoneGetter","zone","paddedZone","getFirstThursdayOfYear","dayOfWeekOnFirst","getThursdayThisWeek","datetime","weekGetter","firstThurs","thisThurs","ampmGetter","AMPMS","eraGetter","ERAS","longEraGetter","ERANAMES","jsonStringToDate","R_ISO8601_STR","tzHour","tzMin","dateSetter","setUTCFullYear","timeSetter","setUTCHours","ms","NUMBER_STRING","DATE_FORMATS_SPLIT","DATE_FORMATS","begin","sliceFn","processPredicates","sortPredicates","predicate","descending","objectValue","getPredicateValue","defaultCompare","type1","type2","value1","value2","sortPredicate","reverseOrder","compareFn","getComparisonObject","tieBreaker","predicateValues","predicates","doComparison","compareValues","ngDirective","nullFormRenameControl","control","$name","FormController","controls","$error","$$success","$pending","$dirty","$pristine","$valid","$invalid","$submitted","$$parentForm","nullFormCtrl","$rollbackViewValue","$commitViewValue","$addControl","$$renameControl","newName","oldName","$removeControl","addSetValidityMethod","unset","$setDirty","PRISTINE_CLASS","DIRTY_CLASS","$setPristine","setClass","SUBMITTED_CLASS","$setUntouched","$setSubmitted","stringBasedInputType","textInputType","baseInputType","composing","ngTrim","$$hasNativeValidators","deferListener","origValue","PARTIAL_VALIDATION_TYPES","PARTIAL_VALIDATION_EVENTS","validity","VALIDITY_STATE_PROPERTY","origBadInput","badInput","origTypeMismatch","typeMismatch","weekParser","isoWeek","existingDate","WEEK_REGEXP","addDays","createDateParser","mapping","iso","ISO_DATE_REGEXP","createDateInputType","parseDate","isValidDate","parseObservedDateValue","badInputChecker","previousDate","$$parserName","ngModelMinErr","ngMin","$validators","$validate","ngMax","nativeValidation","numberInputType","NUMBER_REGEXP","urlInputType","URL_REGEXP","emailInputType","EMAIL_REGEXP","radioInputType","parseConstantExpr","parseFn","checkboxInputType","ngTrueValue","ngFalseValue","classDirective","arrayDifference","arrayClasses","addClasses","digestClassCounts","removeClasses","classCounts","classesToUpdate","updateClasses","ngClassWatchAction","old$index","setValidity","validationErrorKey","createAndSet","unsetAndCleanup","cachedToggleClass","PENDING_CLASS","toggleValidationCss","isObjectEmpty","combinedState","classCache","VALID_CLASS","INVALID_CLASS","chromeHack","optionElement","REGEX_STRING_REGEXP","manualLowercase","manualUppercase","ngCspElement","ngCspAttribute","noInlineStyle","name_","NODE_TYPE_ATTRIBUTE","major","codeName","expando","mouseleave","mouseenter","thead","col","tr","td","optgroup","tbody","tfoot","colgroup","caption","th","fired","lowercasedName","getNamedItem","specified","ret","getText","$dv","nodeCount","addHandler","noEventListener","onFn","replaceNode","contentDocument","wrapNode","newElement","condition","classCondition","nextElementSibling","extraParameters","dummyEvent","eventFnsCopy","handlerArgs","arg3","$animateMinErr","postDigestElements","updateData","handleCSSClassChanges","addRemoveClassesPostDigest","classesAdded","classesRemoved","$$classNameFilter","reservedRegex","domInsert","afterElement","afterNode","previousElementSibling","addclass","waitForTick","waitQueue","passed","AnimateRunner","rafTick","timeoutTick","_doneCallbacks","_tick","INITIAL_STATE","DONE_PENDING_STATE","DONE_COMPLETE_STATE","getPromise","resolveHandler","rejectHandler","_resolve","applyAnimationContents","closed","isFirstChange","[","{","$httpMinErr","callbackId","called","callbackMap","PATH_MATCH","http","https","ftp","locationPrototype","paramValue","Location","OPERATORS","ESCAPE","'","\"","lex","readString","peek","readNumber","peekMultichar","readIdent","isWhitespace","ch2","ch3","op1","op2","op3","throwError","codePointAt","isValidIdentifierStart","isValidIdentifierContinue","cp","cp1","cp2","isExpOperator","colStr","peekCh","quote","rawString","rep","ExpressionStatement","Property","program","expressionStatement","expect","filterChain","assignment","ternary","logicalOR","consume","logicalAND","equality","relational","additive","multiplicative","unary","primary","arrayDeclaration","selfReferential","parseArguments","baseExpression","peekToken","kind","e1","e2","e3","e4","peekAhead","$locals","nextId","vars","own","assignable","stage","computing","recurse","return_","generateFunction","fnKey","intoId","watchId","fnString","USE","STRICT","filterPrefix","watchFns","varsPrefix","section","nameId","recursionFn","skipWatchIdCheck","if_","lazyAssign","computedMember","lazyRecurse","not","getHasOwnProperty","nonComputedMember","addEnsureSafeObject","notNull","addEnsureSafeAssignContext","addEnsureSafeMemberName","addEnsureSafeFunction","SAFE_IDENTIFIER","UNSAFE_CHARACTERS","stringEscapeFn","stringEscapeRegex","rhs","lhs","unary+","unary-","unary!","binary+","binary-","binary*","binary/","binary%","binary===","binary!==","binary==","binary!=","binary<","binary>","binary<=","binary>=","binary&&","binary||","ternary?:","astCompiler","LLLL","Z","ww","G","GG","GGG","GGGG","xlinkHref","propName","defaultLinkFn","htmlAttr","formDirectiveFactory","isNgForm","getSetter","formElement","nameAttr","ctrls","handleFormSubmission","parentFormCtrl","setter","DATE_REGEXP","DATETIMELOCAL_REGEXP","MONTH_REGEXP","TIME_REGEXP","inputType","datetime-local","checkbox","submit","CONSTANT_VALUE_REGEXP","tplAttr","templateElement","ngBindHtmlGetter","ngBindHtmlWatch","getTrustedHtml","forceAsyncEvents","previousElements","srcExp","currentElement","changeCounter","cleanupLastIncludeContent","afterAnimation","thisChangeId","trimValues","UNTOUCHED_CLASS","TOUCHED_CLASS","EMPTY_CLASS","NOT_EMPTY_CLASS","NgModelController","$$rawModelValue","$asyncValidators","$untouched","$touched","parserValid","parsedNgModel","parsedNgModelAssign","ngModelGet","ngModelSet","pendingDebounce","$$setOptions","getterSetter","invokeModelGetter","invokeModelSetter","$$$p","$$updateEmptyClasses","currentValidationRunId","$setTouched","$$lastCommittedViewValue","prevValid","prevModelValue","allowInvalid","$$runValidators","allValid","$$writeModelToScope","doneCallback","processParseErrors","errorKey","processSyncValidators","syncValidatorsValid","validator","processAsyncValidators","validatorPromises","validationDone","localValidationRunId","$$parseAndValidate","writeToModelIfNeeded","updateOnDefault","$$debounceViewValueCommit","debounceDelay","formatters","modelCtrl","formCtrl","updateOn","DEFAULT_REGEXP","ngOptionsMinErr","NG_OPTIONS_REGEXP","parseOptionsExpression","optionsExp","selectElement","Option","selectValue","getOptionValuesKeys","optionValues","optionValuesKeys","itemKey","selectAs","trackBy","selectAsFn","viewValueFn","trackByFn","getTrackByValueFn","getTrackByValue","getLocals","disableWhenFn","getWatchables","watchedArray","optionValuesLength","disableWhen","optionItems","selectValueMap","optionItem","getOptionFromViewValue","getViewValueFromOption","ngOptionsPostLink","addOptionElement","optionTemplate","updateOptionElement","updateOptions","selectCtrl","readValue","groupElementMap","providedEmptyOption","emptyOption","groupElement","optGroupTemplate","listFragment","nextValue","isNotPrimitive","unknownOption","renderEmptyOption","removeEmptyOption","renderUnknownOption","removeUnknownOption","writeValue","selectedValues","selectedOption","registerOption","BRACE","IS_WHEN","updateElementText","newText","lastCount","numberExp","whenExp","whens","whensExpFns","braceReplacement","watchRemover","tmpMatch","whenKey","countIsNaN","pluralCat","whenExpFn","NG_REMOVED","ngRepeatMinErr","updateScope","valueIdentifier","keyIdentifier","arrayLength","$first","$last","$middle","$odd","$even","getBlockStart","getBlockEnd","ngRepeatEndComment","aliasAs","trackByExp","trackByExpGetter","trackByIdExpFn","trackByIdArrayFn","trackByIdObjFn","hashFnLocals","lastBlockMap","collectionLength","trackById","trackByIdFn","collectionKeys","nextBlockOrder","previousNode","nextBlockMap","blockKey","NG_HIDE_CLASS","NG_HIDE_IN_PROGRESS_CLASS","newStyles","oldStyles","cases","ngSwitchController","watchExpr","selectedTranscludes","selectedElements","previousLeaveAnimations","selectedScopes","spliceFactory","selectedTransclude","caseElement","selectedScope","ngTranscludeMinErr","fallbackLinkFn","ngTranscludeCloneAttachFn","useFallbackContent","ngTranscludeSlot","noopNgModelController","SelectController","optionsMap","unknownVal","hasOption","addOption","removeOption","optionScope","optionAttrs","interpolateValueFn","interpolateTextFn","selectPreLink","lastView","lastViewRef","selectPostLink","selectCtrlName","patternExp","intVal","getDecimals","getVF","opt_precision","PLURAL_CATEGORY","ZERO","ONE","TWO","FEW","MANY","OTHER","FIRSTDAYOFWEEK","STANDALONEMONTH","WEEKENDRANGE","fullDate","longDate","medium","mediumDate","mediumTime","short","shortDate","shortTime","minInt","localeID","vf","dateSet","dateMinLimit","dateMaxLimit","dateMonthTitle","dateYearTitle","buttonNextTitle","buttonPrevTitle","dateDisabledDates","dateEnabledDates","dateDisabledWeekdays","dateSetHidden","dateTyper","dateWeekStartDay","datepickerAppendTo","datepickerToggle","datepickerClass","datepickerShow","buttonPrev","buttonNext","D","N","S","datepickerMobile","Y","T","hideCalendar","L","validateWeekDay","prevMonthDays","nextMonthDays","monthNumber","A","W","E","isSelectableMinDate","isSelectableMaxDate","O","F","classList","selectedMonth","selectedDay","selectedYear","I","C","B","z","isSelectableDate","R","nextMonth","willPrevMonthBeSelectable","willNextMonthBeSelectable","prevMonth","selectedMonthHandle","setNewYear","isSelectableMaxYear","isSelectableMinYear","paginateYears","showYearsPagination","setDatepickerDay","isSelectableDay","paginationYears","paginationYearsNextDisabled","paginationYearsPrevDisabled","daysInString","datepickerID","checkVisibility","asn1","bignum","decoders","encoders","Entity","_createNamed","named","runInThisContext","entity","_initNamed","_getDecoder","enc","_getEncoder","reporter","DecoderBuffer","Reporter","isBuffer","EncoderBuffer","readUInt8","bytes","_reporterState","_baseState","reverseArgs","useDecoder","explicit","implicit","_wrap","assert","tags","overrided","stateProps","cstate","_useArgs","newKey","_decode","wrapResult","present","enterKey","_peekTag","isError","_decodeGeneric","_decodeChoice","prevObj","enterObject","_decodeTag","track","_getUse","leaveObject","exitKey","leaveKey","_decodeList","_decodeStr","_decodeObjid","_decodeTime","_decodeNull","_decodeBool","_decodeInt","_use","_createEncoderBuffer","_encode","_encodeValue","_skipDefault","primitive","_encodeChoice","_encodePrimitive","cls","_encodeComposite","_encodeStr","_encodeObjid","_encodeTime","_encodeNull","_encodeInt","_encodeBool","_isNumstr","_isPrintstr","ReporterError","rethrow","pathLen","partial","captureStackTrace","tagClass","tagClassByName","_reverse","6","7","8","9","10","11","12","13","16","17","18","19","20","21","22","23","24","25","26","27","28","29","30","tagByName","der","DERDecoder","DERNode","derDecodeTag","oct","tagStr","derDecodeLen","decodedTag","_skipUntilEnd","possibleEnd","unused","readUInt16BE","numstr","printstr","identifiers","subident","mon","sec","pem","PEMDecoder","base64","DEREncoder","encodeTag","encodedTag","lenOctets","writeUInt16BE","objid","getUTCHours","getUTCMinutes","getUTCSeconds","numArray","dataBuffer","defaultBuffer","PEMEncoder","superCtor","super_","TempCtor","BN","endian","isBN","negative","words","red","parseHex4Bits","parseHexByte","lowerBound","parseBase","mul","toBitArray","bitLength","bit","wbit","smallMulTo","lo","ncarry","rword","maxJ","strip","bigMulTo","hncarry","jumboMulTo","fftm","FFTM","mulp","MPrime","iushln","isub","_tmp","K256","P224","P192","P25519","Red","prime","_prime","gtn","Mont","r2","imod","sqr","rinv","_invmp","minv","isubn","umod","wordSize","cmp","_initNumber","_initArray","_parseHex","_parseBase","parseLength","limbLen","limbPow","word","imuln","_iaddn","dest","_expand","_normSign","inspect","groupSizes","groupBases","groupBase","modn","idivn","toBuffer","toArrayLike","reqLength","littleEndian","q","andln","iushrn","clz32","_countBits","_zeroBits","zeroBits","toTwos","inotn","iaddn","fromTwos","testn","notn","ineg","iuor","ior","uor","iuand","iand","uand","iuxor","ixor","xor","uxor","bytesNeeded","bitsLeft","setn","iadd","comb10MulTo","mid","al0","ah0","al1","ah1","a2","al2","ah2","a3","al3","ah3","a4","al4","ah4","a5","al5","ah5","a6","al6","ah6","a7","al7","ah7","a8","al8","ah8","a9","al9","ah9","b0","bl0","bh0","b1","bl1","bh1","b2","bl2","bh2","b3","bl3","bh3","b4","bl4","bh4","b5","bl5","bh5","b6","bl6","bh6","b7","bl7","bh7","b8","bl8","bh8","b9","bl9","bh9","imul","w0","w1","w2","w3","w4","w5","w6","w7","w8","w9","w10","w11","w12","w13","w14","w15","w16","w17","w18","mulTo","makeRBT","revBin","rb","permute","rbt","rws","iws","rtws","itws","rtwdf","itwdf","rtwdf_","itwdf_","ie","ro","io","rx","guessLen13b","odd","conjugate","normalize13b","ws","convert13b","stub","ph","rwst","iwst","nrws","nrwst","niwst","rmws","mulf","muln","isqr","bits","carryMask","newCarry","ishln","hint","extended","mask","maskedWords","ishrn","shln","ushln","shrn","ushrn","imaskn","maskn","addn","subn","iabs","_ishlnsubmul","_wordDiv","bhi","bhiBits","qj","divmod","positive","divn","divRound","dm","half","egcd","isEven","yp","xp","im","isOdd","jm","gcd","cmpn","invm","bincn","ucmp","gten","ltn","lten","eqn","toRed","convertTo","_forceRed","fromRed","convertFrom","forceRed","redAdd","redIAdd","redSub","redISub","redShl","shl","redMul","_verify2","redIMul","redSqr","_verify1","redISqr","redSqrt","redInvm","redNeg","redPow","primes","k256","p224","p192","p25519","ireduce","rlen","imulK","_strip","outLen","mod3","nOne","lpow","inv","windowSize","wnd","currentLen","mont","getLens","b64","validLen","placeHoldersLen","lens","_byteLength","toByteArray","Arr","curByte","revLookup","tripletToBase64","encodeChunk","uint8","fromByteArray","extraBytes","maxChunkLength","len2","_move","modrn","allocate","allocUnsafe","postfix","_toArrayLikeLE","_toArrayLikeBE","isNegNum","Rand","rand","generate","_rand","getBytes","getByte","getRandomValues","msCrypto","randomBytes","asUInt32Array","readUInt32BE","scrubVec","cryptBlock","keySchedule","SUB_MIX","SBOX","nRounds","SUB_MIX0","SUB_MIX1","SUB_MIX2","SUB_MIX3","s0","s1","s2","s3","ksRow","AES","_key","_reset","RCON","INV_SBOX","INV_SUB_MIX","xi","sx","x4","x8","blockSize","keySize","keyWords","ksRows","invKeySchedule","ik","ksR","tt","_nRounds","_keySchedule","_invKeySchedule","encryptBlockRaw","encryptBlock","writeUInt32BE","decryptBlock","m1","scrub","xorTest","calcIv","iv","ck","_finID","ghash","GHASH","toPad","alloc","ivBits","writeUIntBE","incr32","StreamCipher","decrypt","Transform","_cipher","aes","_ghash","_prev","_cache","_secCache","_decrypt","_alen","_len","_mode","_authTag","_called","_update","chunk","rump","encrypt","_final","getAuthTag","setAuthTag","setAAD","getCiphers","modes","ciphers","deciphers","createCipher","Cipher","createCipheriv","Cipheriv","createDecipher","Decipher","createDecipheriv","Decipheriv","listCiphers","Splitter","_last","_autopadding","unpad","padded","suite","MODES","AuthCipher","ebtk","setAutoPadding","setTo","autoPadding","PADDING","padBuff","writeUInt8","fromArray","ZEROES","_multiply","lsbVi","Vi","Zi","abl","bl","encryptStart","encryptByte","byteParam","shiftIn","getBlock","chunkNum","modeModules","ECB","CBC","CFB","CFB8","CFB1","OFB","CTR","GCM","keyLen","ivLen","aesModes","desModes","DES","CipherBase","modeName","_des","des","des-ede3-cbc","EDE","des-ede3","des-ede-cbc","des-ede","des-cbc","des-ecb","des3","getr","priv","modulus","prime1","prime2","blind","blinder","publicExponent","unblinder","crt","blinds","blinded","c1","c2","qinv","coefficient","exponent1","m2","exponent2","Sign","Writable","algorithms","_hashType","_hash","createHash","_tag","_signType","Verify","createSign","createVerify","verify","_write","sig","sigBuffer","hashType","signType","parseKeys","curve","ecSign","dsaSign","RSA_PKCS1_PADDING","curveId","curves","EC","keyFromPrivate","privateKey","toDER","algo","priv_key","bits2int","kv","getKey","makeKey","makeR","hlen","hbits","bits2octets","createHmac","obits","ec","pub","ecVerify","dsaVerify","padNum","pubkey","subjectPrivateKey","pub_key","unpacked","signature","checkValue","montp","typedArraySupport","foo","createBuffer","K_MAX_LENGTH","RangeError","encodingOrOffset","isView","fromArrayLike","isInstance","fromArrayBuffer","fromObject","assertSize","isEncoding","numberIsNaN","SlowBuffer","mustMatch","loweredCase","utf8ToBytes","base64ToBytes","slowToString","hexSlice","utf8Slice","asciiSlice","latin1Slice","base64Slice","utf16leSlice","swap","bidirectionalIndexOf","arrayIndexOf","indexSize","arrLength","valLength","foundIndex","hexWrite","utf8Write","blitBuffer","asciiWrite","asciiToBytes","latin1Write","base64Write","ucs2Write","utf16leToBytes","firstByte","codePoint","bytesPerSequence","secondByte","thirdByte","fourthByte","tempCodePoint","decodeCodePointsArray","codePoints","MAX_ARGUMENTS_LENGTH","toHex","checkOffset","ext","checkInt","checkIEEE754","writeFloat","noAssert","ieee754","writeDouble","base64clean","INVALID_BASE64_RE","leadSurrogate","byteArray","INSPECT_MAX_BYTES","kMaxLength","TYPED_ARRAY_SUPPORT","species","poolSize","allocUnsafeSlow","_isBuffer","swap16","swap32","swap64","toLocaleString","thisStart","thisEnd","thisCopy","targetCopy","_arr","newBuf","subarray","readUIntLE","readUIntBE","readUInt16LE","readUInt32LE","readIntLE","readIntBE","readInt8","readInt16LE","readInt16BE","readInt32LE","readInt32BE","readFloatLE","readFloatBE","readDoubleLE","readDoubleBE","writeUIntLE","maxBytes","writeUInt16LE","writeUInt32LE","writeIntLE","writeIntBE","writeInt8","writeInt16LE","writeInt16BE","writeInt32LE","writeInt32BE","writeFloatLE","writeFloatBE","writeDoubleLE","writeDoubleBE","targetStart","copyWithin","createCommonjsModule","getCjsExportFromNamespace","graph","models","conversions","deriveBFS","fromModel","adjacents","adjacent","wrapConversion","toModel","conversion","wrapRaw","wrappedFn","wrapRounded","getRgba","abbr","per","keyword","rgb","hexAlpha","colorName$1","getHsla","hsl","getHwb","hwb","getRgb","getHsl","hsla","getAlpha","vals","hexString","hexDouble","percentString","percentaString","hslString","hslaString","hwbString","reverseNames","isValidKey","toFontString","helpers_core","isNullOrUndef","family","weight","origin","c0","chartjsColor","helpers$1","listenArrayEvents","_chartjs","arrayEvents","unlistenArrayEvents","clipArc","pixelMargin","angleMargin","clip","drawFullCircleBorders","inner","TAU","fullCircles","borderAlign","xRange","yRange","getBarBounds","orig","parseBorderSkipped","edge","parseBorderWidth","maxW","maxH","boundingRects","bounds","skipX","skipY","computeMinSampleSize","pixels","_length","getTicks","computeFitCategoryTraits","thickness","stackCount","computeFlexCategoryTraits","scaleClip","halfBorderWidth","defaultClip","toClip","parseVisibleItems","metadata","jlen","metasets","_getSortedVisibleDatasetMetas","getIntersectItems","getNearestItems","intersect","distanceMetric","minDistance","nearestItems","center","getCenterPoint","getDistanceMetricForAxis","useX","useY","pt1","pt2","indexMode","filterByPosition","sortByWeight","wrapBoxes","layoutBoxes","setLayoutDims","layouts","layout","vBoxMaxWidth","hBoxMaxHeight","buildLayoutBoxes","leftAndTop","rightAndBottom","vertical","getCombinedMax","maxPadding","updateDims","getPadding","boxPadding","outerWidth","sizes","handleMaxPadding","updatePos","getMargins","marginForPositions","positions","fitBoxes","refit","refitBoxes","placeBoxes","userPadding","readUsedSize","initCanvas","renderHeight","renderWidth","EXPANDO_KEY","displayWidth","displayHeight","addListener","eventListenerOptions","removeListener","createEvent","nativeEvent","native","fromNativeEvent","EVENT_TYPES","throttled","ticking","createDiv","createResizer","maxSize","resizer","CSS_SIZE_MONITOR","expand","shrink","onScroll","watchForRender","proxy","renderProxy","animationName","CSS_RENDER_ANIMATION","ANIMATION_START_EVENTS","reflow","CSS_RENDER_MONITOR","unwatchForRender","injectCSS","containsStyles","splitNewlines","indexScale","_getIndexScale","valueScale","_getValueScale","getBaseModel","core_defaults","rtl","textDirection","valueOrDefault$8","displayColors","alignment","getAlignedX","align","getBeforeAfterBodyLines","mergeScaleConfig","merger","slen","valueOrDefault$9","core_scaleService","_merger","mergeConfig","tval","sval","updateConfig","core_layouts","buildOrUpdateScales","nextAvailableScaleId","axesOpts","hasId","positionIsHorizontal","compare2Level","l1","l2","DateAdapter","sample","numItems","increment","getPixelForGridLine","validIndex","lineValue","_startPixel","_endPixel","computeLabelSizes","tickFonts","valueAt","widths","heights","tickFont","lineHeight","nestedLabel","widest","highest","widestLabelSize","highestLabelSize","getTickMarkLength","getScaleLabelHeight","_parseFont","toPadding","parseFontOptions","nestedOpts","valueOrDefault$a","parseTickFontOptions","nonSkipped","ticksToFilter","getEvenSpacing","calculateSpacing","majorIndices","axisLength","ticksLimit","factors","factor","evenMajorSpacing","math","_factorize","getMajorIndices","skipMajors","majorStart","majorEnd","generateTicks","generationOptions","dataRange","MIN_SPACING","maxNumSpaces","rmin","rmax","isNullOrUndef$2","_decimalPlaces","almostWhole","getOrCreateStack","stacks","stackData","_parseValue","updateMinMax","generateTicks$1","valueOrDefault$b","endExp","endSignificand","nonNegativeOrDefault","getTickBackdropHeight","valueOrDefault$c","measureLabelSize","determineLimits","fitWithPointLabels","textSize","plFont","furthestLimits","furthestAngles","_pointLabelSizes","valueCount","hLimits","vLimits","setReductions","getTextAlignForAngle","adjustPointPositionForLabelHeight","drawPointLabels","tickBackdropHeight","valueAtIndexOrDefault$1","drawRadiusLine","circular","numberOrZero","sorter","arrayUnique","getMin","getMax","buildLookupTable","timestamps","distribution","i0","i1","interpolate$1","skey","tkey","span","toTimestamp","adapter","_adapter","determineUnitForAutoTicks","UNITS","INTERVALS","MAX_INTEGER","determineUnitForFormatting","numTicks","determineMajorUnit","timeOpts","resolve$5","weekday","computeOffsets","setMajorTicks","majorUnit","ticksFromTimestamps","decodeFill","computeLinearBoundary","computeCircularBoundary","cx","cy","computeBoundary","resolveTarget","sources","propagate","createMapper","mappers","isDrawable","drawArea","curve0","curve1","len0","len1","doFill","mapper","p0","p1","d0","d1","loopOffset","getBoxWidth","createNewLegendAndAttach","createNewTitleBlockAndAttach","colorName","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkgrey","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","green","greenyellow","grey","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgreen","lightgrey","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightslategrey","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","rebeccapurple","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","slategrey","snow","springgreen","steelblue","tan","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen","comparativeDistance","reverseKeywords","convert","channels","hsv","cmyk","xyz","lab","lch","ansi16","ansi256","hcg","apple","rdif","gdif","bdif","diffc","reversed","currentClosestKeyword","currentClosestDistance","sv","smin","lmin","sl","vmin","wh","z2","hr","ansi","mult","rem","integer","colorString","char","grayscale","hue","chroma","pure","mg","route","routes","routeModels","colorConvert","Color","setValues","lightness","whiteness","setSpace","rgbArray","hslArray","hsvArray","hwbArray","cmykArray","rgbaArray","hslaArray","setChannel","saturation","saturationv","blackness","rgbNumber","luminosity","lum","chan","contrast","color2","lum1","lum2","contrastRatio","dark","yiq","light","negate","lighten","desaturate","whiten","blacken","greyscale","clearer","opaquer","mixinColor","color1","spaces","maxes","getValues","space","chans","capped","sname","svalues","klen","_mergerIf","mergeIf","_deprecated","fromIndex","effects","helpers_easing","RAD_PER_DEG","DOUBLE_PI","HALF_PI","QUARTER_PI","TWO_THIRDS_PI","exports$1","roundedRect","rad","SQRT1_2","_isPointInArea","clipArea","unclipArea","flip","midpoint","helpers_canvas","defaultLineHeight","helpers_options","toLineHeight","cacheable","exports$2","LOG10E","powerOf10","isPowerOf10","helpers_math","getRtlAdapter","rectX","xPlus","leftForLtr","getLtrAdapter","_itemWidth","getAdapter","overrideTextDirection","getPropertyPriority","prevTextDirection","restoreTextDirection","helpers_rtl","_type","core_element","exports$3","core_animation","core_animations","advance","nextStep","_datasetElementOptions","_dataElementOptions","scalesOpts","_getValueScaleId","_getIndexScaleId","isExtensible","resyncElements","_configure","_config","_cachedDataOpts","easingValue","_resolveDatasetElementOptions","_resolveDataElementOptions","readKey","datasetOpts","elementOptions","dataIndex","$previousStyle","_removeDatasetHoverStyle","_setDatasetHoverStyle","numMeta","insertElements","onDataPush","onDataPop","onDataShift","onDataSplice","onDataUnshift","core_datasetController","element_arc","halfAngle","halfRadius","getArea","valueOrDefault$1","element_line","valueOrDefault$2","defaultColor$1","element_point","inXRange","inYRange","defaultColor$2","element_rectangle","rects","deprecated","valueOrDefault$3","controller_bar","scaleOpts","minBarLength","maxBarThickness","_ruler","_updateElementGeometry","vscale","vpixels","calculateBarValuePixels","ipixels","calculateBarIndexPixels","_getStacks","_getMatchingVisibleMetas","getStackCount","getStackIndex","imeta","ivalue","stackLength","stackIndex","indexOpts","valueOpts","valueOrDefault$4","resolve$1","controller_bubble","valueOrDefault$5","PI$1","DOUBLE_PI$1","HALF_PI$1","listItem","listItemSpan","dataLabel","controller_doughnut","ratioX","ratioY","arcs","chartWeight","_getRingWeight","startX","startY","endX","endY","minX","minY","maxX","maxY","_getVisibleDatasetWeightTotal","_getRingWeightOffset","ringWeightOffset","dataSetIndex","controller_horizontalBar","valueOrDefault$6","resolve$2","isPointInArea","controller_line","_showLine","lineModel","lineOptions","resolve$3","controller_polarArea","starts","_starts","angles","_angles","_updateRadius","_computeAngle","controller_pie","valueOrDefault$7","controller_radar","controller_scatter","core_interaction","single","x-axis","nearest","intersectsItem","_layers","layoutItem","layoutOptions","verticalBoxes","horizontalBoxes","platform_basic","acquireContext","platform_dom","platform_dom$1","stylesheet","touchstart","touchmove","pointerenter","pointerdown","pointermove","pointerup","pointerleave","pointerout","supportsEventListenerOptions","supports","passive","platform_dom$2","disableCSSInjection","_enabled","_ensureLoaded","getRootNode","releaseContext","proxies","platform","core_plugins","_cacheId","hook","descriptor","descriptors","$plugins","_invalidate","scaleDefaults","getRtlHelper","labelTextColor","positioners","average","nearestElement","distanceBetweenPoints","tp","exports$4","_lastActive","existingModel","backgroundPoint","caretX","caretY","labelTextColors","_eventPosition","dataPoints","caretPosition","getCaretPosition","rtlHelper","colorX","bodyAlignForCalculation","rtlColorX","drawBackground","hasTooltipContent","globalAlpha","positioners_1","core_tooltip","construct","_bufferedRender","dposition","mergeTicksOptions","hasUpdated","destroyDatasetMeta","ControllerClass","_bufferedRequest","_idx","updateDataset","layers","drawDatasets","_drawTooltip","_getSortedDatasetMetas","filterVisible","drawDataset","_listeners","bufferedRequest","core_controller","core_helpers","_getParentNode","_alignPixel","slopeDeltaX","_calculatePadding","parentDimension","forceRatio","_create","override","members","_date","core_adapters","core_ticks","maxTick","logTick","numExponential","logarithmic","zeroLineBorderDash","zeroLineBorderDashOffset","_ticks","_getLabels","samplingEnabled","sampleSize","_labelSizes","_maxLabelLines","_gridLineItems","_labelItems","_convertTicksToLabels","_ticksToDraw","_autoSkip","startPixel","endPixel","reversePixels","_reversePixels","labelSizes","maxLabelHeight","maxLabelDiagonal","_isVisible","_getLabelSizes","isBottom","firstLabelSize","lastLabelSize","tickPadding","offsetLeft","offsetRight","handleMargins","_getScaleLabel","getDecimalForPixel","getBaseValue","avgMajorSpacing","_tickSize","numMajorIndices","rot","_computeGridLineItems","borderValue","alignedLineValue","ticksLength","axisWidth","axisHalfWidth","alignPixel","alignBorderValue","_computeLabelItems","lineCount","textOffset","isMirrored","fonts","_drawGrid","firstLineWidth","lastLineWidth","_drawLabels","_drawTitle","scaleLabelPadding","halfLineHeight","tz","gz","_draw","core_scale","isNullOrUndef$1","scale_category","ticksOpts","_startValue","_valueRange","valueCategory","_defaults","scale_linearbase","setMin","setMax","_computeTickLimit","numericGeneratorOptions","_endValue","defaultConfig$1","DEFAULT_MIN","DEFAULT_MAX","scale_linear","hasStacks","stackValues","_defaults$1","defaultConfig$2","scale_logarithmic","valuesPerStack","_getFirstTickValue","_valueOffset","_defaults$2","resolve$4","defaultConfig$3","scale_radialLinear","radiusReductionTop","radiusReductionBottom","topMovement","bottomMovement","maxTop","maxBottom","_defaults$3","deprecated$1","valueOrDefault$d","MIN_INTEGER","MIN_SAFE_INTEGER","MAX_SAFE_INTEGER","defaultConfig$4","adapters","scale_time","labelsAdded","dataLabels","_table","_timestamps","getLabelCapacity","_unit","_majorUnit","_offsets","minorFormat","majorFormat","nestedTickOpts","formatter","getPixelForOffset","_getLabelSize","getLabelWidth","exampleTime","exampleLabel","_defaults$4","category","radialLinear","FORMATS","_id","filler","boundary","plugin_filler","afterDatasetsUpdate","$filler","beforeDatasetsDraw","getRtlHelper$1","noop$1","valueOrDefault$e","onLeave","_hoveredItem","columnHeights","legendHeight","halfFontSize","xLeft","yMiddle","alignmentOffset","realX","_getLegendItemAt","hoveredItem","plugin_legend","_element","afterEvent","noop$2","fontOpts","plugin_title","_adapters","Interaction","Ticks","colorNames","hashMode","_finalOrDigest","__final","_decoder","_encoding","useArrayBuffer","useUint8Array","StringDecoder","inputEnc","outputEnc","bufferData","outData","_toString","_transform","_flush","fin","cssKeywords","padEnd","trimRight","trimLeft","core","__e","aFunction","PROTOTYPE","$export","IS_FORCED","IS_GLOBAL","IS_STATIC","IS_PROTO","IS_BIND","IS_WRAP","expProto","virtual","U","__g","dP","createDesc","anObject","IE8_DOM_DEFINE","bitmap","cof","UNSCOPABLES","ArrayProto","at","unicode","forbiddenField","toObject","toAbsoluteIndex","toLength","aLen","endPos","toIObject","IS_INCLUDES","$this","IObject","asc","TYPE","$create","IS_MAP","IS_FILTER","IS_SOME","IS_EVERY","IS_FIND_INDEX","NO_HOLES","callbackfn","memo","isRight","SPECIES","speciesConstructor","arraySlice","factories","partArgs","bound","TAG","ARG","tryGet","redefineAll","anInstance","forOf","$iterDefine","setSpecies","DESCRIPTORS","fastKey","validate","SIZE","getEntry","_f","getConstructor","NAME","ADDER","iterable","_t","_l","delete","setStrong","iterated","_k","getWeak","createArrayMethod","$has","arrayFind","arrayFindIndex","uncaughtFrozenStore","UncaughtFrozenStore","findUncaughtFrozen","ufstore","redefine","fails","$iterDetect","setToStringTag","inheritIfRequired","IS_WEAK","fixMethod","HASNT_CHAINING","THROWS_ON_PRIMITIVES","ACCEPT_ITERABLES","iter","BUGGY_ZERO","$instance","NEED","$defineProperty","$toISOString","lz","getUTCMilliseconds","NUMBER","getKeys","gOPS","pIE","getSymbols","symbols","isEnum","MATCH","defined","wks","regexpExec","REPLACE_SUPPORTS_NAMED_GROUPS","SPLIT_WORKS_WITH_OVERWRITTEN_EXEC","originalExec","SYMBOL","DELEGATES_TO_SYMBOL","DELEGATES_TO_EXEC","execCalled","nativeRegExpMethod","nativeMethod","forceStringMethod","strfn","rxfn","ignoreCase","multiline","flattenIntoArray","sourceLen","spreadable","sourceIndex","mapFn","IS_CONCAT_SPREADABLE","isArrayIter","getIterFn","BREAK","RETURN","ITERATOR","iterFn","un","propertyIsEnumerable","Iterators","IteratorPrototype","LIBRARY","$iterCreate","BUGGY","FF_ITERATOR","KEYS","VALUES","returnThis","DEFAULT","IS_SET","FORCED","getMethod","DEF_VALUES","VALUES_BUG","$native","$default","$entries","$anyNative","SAFE_CLOSING","riter","skipClosing","$expm1","expm1","EPSILON32","MAX32","MIN32","roundTiesToEven","fround","$abs","$sign","log1p","META","setDesc","FREEZE","preventExtensions","setMeta","onFreeze","macrotask","Observer","MutationObserver","WebKitMutationObserver","process","exit","standalone","observe","characterData","task","PromiseCapability","$assign","K","dPs","enumBugKeys","IE_PROTO","Empty","createDict","iframeDocument","iframe","Properties","gOPD","gOPN","windowNames","getOwnPropertyNames","getWindowNames","$keys","hiddenKeys","ObjectProto","isEntries","Reflect","$parseFloat","$trim","$parseInt","radix","newPromiseCapability","promiseCapability","SRC","$toString","TO_STRING","TPL","inspectSource","classof","builtinExec","regexpFlags","nativeExec","nativeReplace","patchedExec","LAST_INDEX","UPDATES_LAST_INDEX_WRONG","re1","re2","NPCG_INCLUDED","PATCH","reCopy","buggy","SHARED","copyright","toInteger","quot","createHTML","repeat","fillString","stringLength","fillStr","intMaxLength","fillLen","stringFiller","non","ltrim","rtrim","exporter","ALIAS","FORCE","cel","setTask","setImmediate","clearTask","clearImmediate","MessageChannel","Dispatch","ONREADYSTATECHANGE","channel","port2","port1","importScripts","$typed","$buffer","propertyDesc","toIndex","createArrayIncludes","ArrayIterators","arrayFill","arrayCopyWithin","$DP","$GOPD","ARRAY_BUFFER","SHARED_BUFFER","BYTES_PER_ELEMENT","$ArrayBuffer","$DataView","DataView","arrayForEach","arrayFilter","arraySome","arrayEvery","arrayIncludes","arrayValues","arrayKeys","arrayEntries","arrayLastIndexOf","arrayReduce","arrayReduceRight","arrayJoin","arraySort","arrayToString","arrayToLocaleString","TYPED_CONSTRUCTOR","DEF_CONSTRUCTOR","ALL_CONSTRUCTORS","CONSTR","TYPED_ARRAY","TYPED","VIEW","WRONG_LENGTH","$map","LITTLE_ENDIAN","FORCED_SET","toOffset","BYTES","speciesFromList","fromList","addGetter","internal","_d","$from","mapfn","$of","TO_LOCALE_BUG","$toLocaleString","comparefn","$begin","$slice","arrayLike","$iterators","isTAIndex","$getDesc","$setDesc","desc","$TypedArrayPrototype$","CLAMPED","GETTER","SETTER","TypedArray","TAC","ABV","TypedArrayPrototype","addElement","$offset","$length","$len","$nativeIterator","CORRECT_ITER_NAME","$iterator","of","packIEEE754","mLen","nBytes","eLen","eMax","eBias","rt","LN2","unpackIEEE754","nBits","unpackI32","packI8","packI16","packI32","packF64","packF32","isLittleEndian","numIndex","intIndex","$LENGTH","WRONG_INDEX","$BUFFER","$OFFSET","pack","DATA_VIEW","BaseBuffer","BUFFER","BYTE_LENGTH","BYTE_OFFSET","ArrayBufferProto","$setInt8","setInt8","getInt8","setUint8","bufferLength","getUint8","getInt16","getUint16","getInt32","getUint32","getFloat32","getFloat64","setInt16","setUint16","setInt32","setUint32","setFloat32","setFloat64","Typed","TypedArrayConstructors","px","wksExt","$Symbol","USE_SYMBOL","$exports","getIteratorMethod","$every","$find","forced","$forEach","createProperty","$indexOf","NEGATIVE_ZERO","addToUnscopables","Arguments","$reduce","upTo","cloned","$some","$sort","pv","TO_PRIMITIVE","DateProto","INVALID_DATE","HAS_INSTANCE","FunctionProto","FProto","nameRE","strong","MAP","$acosh","acosh","asinh","$asinh","$atanh","atanh","cbrt","LOG2E","cosh","hypot","larg","$imul","UINT16","xn","yn","xl","yl","log2","sinh","tanh","trunc","$Number","BROKEN_COF","TRIM","third","maxCode","_isFinite","isInteger","isSafeInteger","aNumberValue","$toFixed","multiply","divide","numToString","fractionDigits","$fails","$toPrecision","toPrecision","$freeze","$getOwnPropertyDescriptor","$getPrototypeOf","$isExtensible","$isFrozen","$isSealed","$preventExtensions","$seal","microtask","newPromiseCapabilityModule","perform","promiseResolve","PROMISE","versions","v8","$Promise","Internal","newGenericPromiseCapability","OwnPromiseCapability","Wrapper","USE_NATIVE","FakePromise","PromiseRejectionEvent","isThenable","isReject","_n","_c","_v","_s","reaction","exited","_h","onHandleUnhandled","onUnhandled","unhandled","isUnhandled","emit","onunhandledrejection","onrejectionhandled","$reject","_w","executor","capability","alreadyCalled","rApply","fApply","thisArgument","argumentsList","rConstruct","NEW_TARGET_BUG","ARGS_BUG","Target","newTarget","$args","deleteProperty","Enumerate","enumerate","getProto","receiver","setProto","V","existingDescriptor","ownDesc","$flags","$RegExp","CORRECT_NEW","tiRE","piRE","fiU","advanceStringIndex","regExpExec","maybeCallNative","fullUnicode","matchStr","SUBSTITUTION_SYMBOLS","SUBSTITUTION_SYMBOLS_NO_NAMED","maybeToString","REPLACE","getSubstitution","matched","captures","namedCaptures","tailPos","searchValue","replaceValue","functionalReplace","accumulatedResult","nextSourcePosition","replacerArgs","sameValue","SEARCH","$search","previousLastIndex","callRegExpExec","$min","$SPLIT","LENGTH","MAX_UINT32","SUPPORTS_Y","SPLIT","$split","internalSplit","lastLength","lastLastIndex","splitLimit","separatorCopy","splitter","unicodeMatching","lim","SET","$at","ENDS_WITH","$endsWith","endPosition","$fromCodePoint","fromCodePoint","INCLUDES","callSite","STARTS_WITH","$startsWith","wksDefine","enumKeys","gOPNExt","$GOPS","$JSON","_stringify","HIDDEN","SymbolRegistry","AllSymbols","OPSymbols","QObject","findChild","setSymbolDesc","protoDesc","sym","isSymbol","$defineProperties","$propertyIsEnumerable","$getOwnPropertyNames","$getOwnPropertySymbols","IS_OP","es6Symbols","wellKnownSymbols","for","keyFor","useSetter","useSimple","FAILS_ON_PRIMITIVES","replacer","$replacer","$isView","viewS","viewT","weak","NATIVE_WEAK_MAP","IS_IE11","ActiveXObject","WEAK_MAP","InternalMap","$WeakMap","WEAK_SET","arraySpeciesCreate","$includes","getDesc","onFinally","$pad","WEBKIT_BUG","TO_STRING_TAG","ArrayValues","DOMIterables","CSSRuleList","CSSStyleDeclaration","CSSValueList","ClientRectList","DOMRectList","DOMStringList","DOMTokenList","DataTransferItemList","FileList","HTMLAllCollection","HTMLCollection","HTMLFormElement","HTMLSelectElement","MediaList","MimeTypeArray","NamedNodeMap","NodeList","PaintRequestList","Plugin","PluginArray","SVGLengthList","SVGNumberList","SVGPathSegList","SVGPointList","SVGStringList","SVGTransformList","SourceBufferList","StyleSheetList","TextTrackCueList","TextTrackList","TouchList","collections","Collection","$task","MSIE","boundArgs","objectToString","isNull","isNullOrUndefined","ECDH","curveType","elliptic","formatReturnValue","bn","secp256k1","secp224r1","prime256v1","prime192v1","ed25519","secp384r1","secp521r1","p256","secp256r1","secp192r1","p384","p521","generateKeys","genKeyPair","getPublicKey","computeSecret","other","inenc","otherPub","keyFromPublic","getPublic","getPrivate","getX","getPrivateKey","setPublicKey","_importPublic","setPrivateKey","_priv","_importPrivate","Hash","MD5","RIPEMD160","sha","alg","Hmac","blocksize","_alg","ZEROS","ipad","_ipad","opad","_opad","Legacy","md5","rng","pseudoRandomBytes","prng","algos","algoKeys","hashes","getHashes","pbkdf2","pbkdf2Sync","dh","DiffieHellmanGroup","createDiffieHellmanGroup","getDiffieHellman","createDiffieHellman","DiffieHellman","createECDH","publicEncrypt","privateEncrypt","publicDecrypt","privateDecrypt","randomFill","randomFillSync","createCredentials","DH_CHECK_P_NOT_SAFE_PRIME","DH_CHECK_P_NOT_PRIME","DH_UNABLE_TO_CHECK_GENERATOR","DH_NOT_SUITABLE_GENERATOR","NPN_ENABLED","ALPN_ENABLED","RSA_SSLV23_PADDING","RSA_NO_PADDING","RSA_PKCS1_OAEP_PADDING","RSA_X931_PADDING","RSA_PKCS1_PSS_PADDING","POINT_CONVERSION_COMPRESSED","POINT_CONVERSION_UNCOMPRESSED","POINT_CONVERSION_HYBRID","initiallyEnabled","autoDetectedUseNativeScroll","useNativeScroll","ngSwipeDisableMouse","./angular-touch","scroller","scrollerStyle","resizeScrollbars","mouseWheelSpeed","snapThreshold","disablePointer","hasPointer","disableTouch","hasTouch","disableMouse","scrollY","directionLockThreshold","bounce","bounceTime","bounceEasing","preventDefaultException","HWCompositing","useTransition","useTransform","bindToWrapper","onmousedown","translateZ","hasPerspective","hasTransition","hasTransform","eventPassthrough","scrollX","freeScroll","resizePolling","tap","shrinkScrollbars","invertWheelDirection","directionX","directionY","_events","cssText","pointerEvents","wrapperStyle","indicatorStyle","listenX","listenY","interactive","defaultScrollbars","fade","speedRatioX","speedRatioY","sizeRatioX","sizeRatioY","maxPosX","maxPosY","prefixPointerEvent","isBadAndroid","MSPointerEvent","PointerEvent","appVersion","transitionTimingFunction","transformOrigin","mousedown","mousemove","mouseup","MSPointerDown","MSPointerMove","MSPointerUp","quadratic","elastic","initEvent","pageX","pageY","dispatchEvent","initMouseEvent","screenX","screenY","_constructed","_initEvents","scrollbars","indicators","_initIndicators","_initWheel","snap","_initSnap","keyBindings","_initKeys","resizeTimeout","_execEvent","_transitionEnd","isInTransition","_transitionTime","resetPosition","initiated","moved","distX","distY","directionLocked","getComputedPosition","_translate","isAnimating","absStartX","absStartY","pointX","pointY","hasHorizontalScroll","hasVerticalScroll","maxScrollX","_end","flick","wrapperWidth","deceleration","wrapperHeight","_nearestSnap","snapSpeed","_resize","scrollerWidth","scrollerHeight","wrapperOffset","_transitionTimingFunction","_animate","transitionTime","updatePosition","interactiveScrollbars","customStyle","fadeScrollbars","wheelTimeout","_wheel","deltaMode","wheelDeltaX","wheelDeltaY","wheelDelta","goToPage","snapStepX","snapStepY","pages","snapThresholdX","snapThresholdY","home","down","keyTime","keyAcceleration","fadeTimeout","lastPointX","lastPointY","_pos","indicatorWidth","minBoundaryX","maxBoundaryX","indicatorHeight","minBoundaryY","maxBoundaryY","ignoreBoundaries","utils","10.0","6.4","6.3","6.2","6.1","6.0","5.2","5.1","5.01","5.0","4.0","4.90","likeChrome","X","environment","operamini","opera","Apple","Archos","Amazon","Kindle","Kindle Fire","Asus","Transformer","Barnes & Noble","Nook","BlackBerry","PlayBook","Google","Google TV","Nexus","HP","TouchPad","HTC","LG","Microsoft","Xbox","Xbox One","Motorola","Xoom","Nintendo","Wii U","Wii","Nokia","Lumia","Samsung","Galaxy S","Galaxy S2","Galaxy S3","Galaxy S4","Sony","PlayStation","PlayStation Vita","manufacturer","product","System","getProperty","system","electron","nw","arch","flash","Capabilities","phantom","appMinorVersion","external","architecture","cpuClass","prerelease","function","./components/Aside","./components/Button","./components/Checkbox","./components/Dropdown","./components/Grid","./components/Header","./components/HeaderButton","./components/InnerSidebar","./components/InnerSidebarItem","./components/InputGroup","./components/List","./components/ListItem","./components/ListItemGroup","./components/Logo","./components/Modal","./components/Multiselect","./components/Navigation","./components/NavigationItem","./components/PageActions","./components/PageSplash","./components/Progress","./components/SelectMenu","./components/Spacer","./components/SplitButton","./components/SplitView","./components/ToggleSwitch","./components/Toolbar","./components/View","./directives/Flex","./directives/Input","./directives/ToggleElement","./directives/iScroll","./services/Platform","angular-iscroll","angular-touch","./template.html","buttonType","customStateControl","currentState","onChange","onToggleState","showCheckboxBackground","singleWayCheckbox","toggleCheckbox","errorIf","sucessIf","displayProperty","valueProperty","onFocus","useNumber","unselectedValue","unselectedText","14","15","headerHeading","headerSubheading","theme","animateIn","labelIcon","sublabel","sublabelIcon","31","32","33","hideIfEnabled","closeable","closeableAction","34","35","listItems","36","37","main","drawer","38","39","navigationTrigger","navigationDrawer","triggerNavigation","40","41","showWhen","42","43","44","45","46","47","heading","inputPlaceholder","selectedProperties","48","49","50","iconLabel","hoverIcon","fullClick","51","52","53","setStateValue","currentStateValue","54","55","56","57","screen","58","59","60","61","toggleElement","62","toBottom","iscrollUiSref","iscrollUiSrefOpts","MSStream","63","globalScope","digitsToString","indexOfLastWord","LOG_BASE","getZeroString","checkInt32","invalidArgument","checkRoundingDigits","rm","repeating","di","rd","mathpow","convertBase","baseIn","baseOut","arrL","strL","NUMERALS","cosine","Ctor","tinyPow","taylorSeries","cos2x","finalise","isTruncated","roundUp","xd","xdi","BASE","maxE","minE","finiteToString","isExp","nonFiniteToString","getBase10Exponent","getLn10","pr","LN10_PRECISION","precisionLimitExceeded","getPi","PI_PRECISION","getPrecision","zs","intPow","truncate","mathfloor","maxOrMin","naturalExponential","denominator","guard","wpr","naturalLogarithm","numerator","parseDecimal","parseOther","divisor","isFloat","xe","isDecimal","isHex","isBinary","isOctal","sine","sin2_x","d5","d16","d20","isHyperbolic","toLessThanHalfPi","pi","halfPi","quadrant","divToInt","toStringBinary","inexact","acos","atan","clamp","decimalError","useDefaults","ps","EXP_LIMIT","DEFAULTS","cryptoUnavailable","isDecimalInstance","ROUND_UP","ROUND_DOWN","ROUND_CEIL","ROUND_FLOOR","ROUND_HALF_UP","ROUND_HALF_DOWN","ROUND_HALF_EVEN","ROUND_HALF_CEIL","ROUND_HALF_FLOOR","EUCLID","Uint32Array","modulo","toExpNeg","toExpPos","clampedTo","comparedTo","xdL","ydL","yd","ys","cubeRoot","t3plusx","dividedToIntegerBy","greaterThanOrEqualTo","hyperbolicCosine","cosh2_x","d8","hyperbolicSine","sinh2_x","hyperbolicTangent","inverseCosine","inverseHyperbolicCosine","inverseHyperbolicSine","inverseHyperbolicTangent","xsd","inverseSine","inverseTangent","isInt","isPositive","logarithm","isBase10","inf","xLTy","negated","squareRoot","tangent","rL","toBinary","toDP","toFraction","maxD","d2","n0","n1","toHexadecimal","toNearest","toOctal","toPower","toSignificantDigits","truncated","multiplyInteger","aL","bL","logBase","more","prod","prodL","qd","remL","rem0","xL","yd0","yL","yz","CBCState","_cbcInit","_cbcState","inp","inOff","outOff","superProto","bufferOff","_updateDecrypt","_updateEncrypt","_buffer","_flushBuffer","inputOff","outputOff","_finalEncrypt","_finalDecrypt","_pad","_unpad","DESState","_desState","deriveKeys","shiftTable","kL","kR","pc1","r28shl","pc2","ip","_encrypt","lStart","rStart","keyL","keyR","substitute","rip","EDEState","k1","k2","k3","_edeState","inL","inR","outL","outR","pc2table","sTable","sb","permuteTable","padSplit","hasOwn","_hasOwn","setProp","functionOrGetSet","derive","Child","Parent","getPropertyDescriptor","pd","_slice","origFunc","overridedFactory","asap","arrayToObject","extractor","nameAndValue","trycatcher","tryCatch","ex","getByKeyPath","keyPath","period","innerObj","setByKeyPath","isFrozen","currentKeyPath","remainingKeyPath","delByKeyPath","kp","shallowClone","deepClone","intrinsicTypes","getObjectDiff","prfx","ap","bp","getArrayOf","NO_CHAR_ARRAY","getIteratorOf","setDebug","libraryFilter","getErrorWithStack","NEEDS_THROW_FOR_STACK","prettyStack","numIgnoredFrames","frame","DexieError","_e","getMultiErrorMessage","failures","ModifyError","successCount","failedKeys","BulkError","mapError","domError","SyntaxError","exceptionMap","nop","pureFunctionChain","f1","f2","callBoth","on1","on2","hookCreatingChain","onsuccess","res2","hookDeletingChain","hookUpdatingChain","modifications","reverseStoppableEventChain","promisableChain","thiz","onuncatched","_lib","psd","_PSD","PSD","_stackHolder","_numPrev","INTERNAL","handleRejection","executePromiseTask","Listener","shouldExecuteTick","beginMicroTickScope","_then","propagateAllListeners","endMicroTickScope","rejectingErrors","rejectionMapper","_promise","origProp","stack_being_generated","addPossiblyUnhandledError","propagateToListener","finalize","numScheduledCalls","asap$1","finalizePhysicalTick","callListener","currentFulfiller","markErrorAsHandled","getStack","errorName","failure","linkToPreviousPromise","numPrev","LONG_STACKS_CLIP_LIMIT","physicalTick","wasRootExec","isOutsideMicroTick","needsNewPhysicalTick","microtickQueue","unhandledErrs","unhandledErrors","onunhandled","finalizers","tickFinalizers","run_at_end_of_this_or_next_physical_tick","finalizer","PromiseReject","errorCatcher","outerScope","switchToZone","props$$1","zone_id_counter","globalEnv","globalPSD","env","patchGlobalPromise","PromiseProp","nthen","getPatchedPromiseThen","gthen","usePSD","incrementExpectedAwaits","taskCounter","awaits","echoes","ZONE_ECHO_LIMIT","decrementExpectedAwaits","sourceTaskId","onPossibleParallellAsync","possiblePromise","NativePromise","zoneEnterEcho","targetZone","totalEchoes","zoneStack","zoneLeaveEcho","bEnteringZone","currentZone","zoneEchoes","enqueueNativeMicroTask","snapShot","GlobalPromise","targetEnv","nativePromiseProto","job","nativePromiseThen","resolvedNativePromise","nativeAwaitCompatibleWrap","possibleAwait","outerZone","origThen","onResolved","globalError","eventData","UNHANDLEDREJECTION","CustomEvent","Events","chainFunction","addConfiguredEvents","subscribers","fire","unsubscribe","evs","exceptions","InvalidArgument","subscriber","addEventType","dbName","db","newVersion","oldVersion","Version","_cfg","storesSource","dbschema","tables","contentUpgrade","runUpgraders","idbtrans","trans","_createTransaction","READWRITE","dbStoreNames","globalSchema","_completion","rejectTransaction","_reject","tableName","createTable","primKey","indexes","follow","populate","updateTablesAndIndexes","runQueue","oldVersionStruct","Upgrade","_dbSchema","anyContentUpgraderHasRun","versToRun","oldSchema","newSchema","adjustToExistingIndexNames","getSchemaDiff","tuple","recreate","objectStore","addIndex","deleteIndex","idxName","hasIEDeleteObjectStoreBug","deleteRemovedTables","createMissingTables","oldDef","newDef","oldIndexes","idxByName","newIndexes","oldIdx","newIdx","createObjectStore","auto","objectStoreNames","storeName","deleteObjectStore","createIndex","unique","multiEntry","multi","tempTransaction","storeNames","openComplete","letThrough","isBeingOpened","autoOpen","DatabaseClosed","dbReadyPromise","extractTransactionArgs","_tableArgs_","scopeFunc","Table","tableSchema","optionalTrans","schema","_tx","allTables","creating","reading","updating","deleting","BulkErrorHandlerCatchAll","errorList","supportHooks","hookedEventRejectHandler","eventRejectHandler","bulkDelete","idbstore","keysOrTuples","hasDeleteHook","deletingHook","lastItem","hookCtx","successHandler","hookedEventSuccessHandler","req","_hookCtx","Transaction","_reculock","_blockedFuncs","_waitingFor","_waitingQueue","_spinCount","wasActive","WhereClause","orCollection","_ctx","whereClause","keyRangeGenerator","keyRange","whereCtx","isPrimKey","keysOnly","replayFilter","justLimit","valueMapper","isPlainKeyRange","ignoreLimitFilter","lowerVersionFirst","setApiOnPlace","tableNames","removeTablesApi","iterate","mappedFn","advancer","parseIndexSyntax","IndexSpec","key1","key2","indexedDB","ascending","simpleCompare","simpleCompareReverse","combine","filter1","filter2","readGlobalSchema","verno","idbdb","safariMultiStoreFix","dotted","indexNames","idbindex","TableSchema","hasGetAll","indexName","dexieName","indexSpec","WorkerGlobalScope","fireOnBlocked","connections","_vcFired","dbReadyResolve","cancelOpen","deps","dependencies","addons","IDBKeyRange","dbOpenError","onReadyBeingFired","READONLY","openCanceller","autoSchema","hasNativeGetDatabaseNames","getNativeGetDatabaseNamesFn","Schema","versionInstance","storesSpec","_parseStoresSpec","upgrade","upgradeFunction","outSchema","instanceTemplate","compound","_allTables","parentTransaction","_whenReady","resolveDbReady","upgradeTransaction","MissingAPI","onblocked","onupgradeneeded","_allowEmptyDB","delreq","deleteDatabase","NoSuchDatabase","oldVer","onversionchange","dbNamesDB","dbnames","vip","fireRemainders","remainders","hasArguments","backendDB","isOpen","hasBeenClosed","hasFailed","dynamicallyOpened","bSticky","_transaction","enterTransactionScope","transless","zoneProps","AsyncFunction","returnValue","promiseFollowed","decrementor","awaitIterator","PrematureCommit","onlyIfCompatible","SubTransaction","InvalidTable","_trans","writeLocked","_idbstore","supplyIdbStore","NotFound","keyOrCrit","indexOrCrit","keyPaths","compoundIndex","ix","maxKey","maxString","simpleIndex","toCollection","numRows","filterFunction","mapToClass","structure","mappedClass","applyStructure","readHook","defineClass","keys$$1","anyOf","objects","numObjs","eventSuccessHandler","effectiveKeys","objectLookup","modify","objsToAdd","keysToAdd","lastAddedKey","lastEffectiveKey","creatingHook","effectiveKey","keyToUse","updatingHook","keyOrObject","_lock","lockOwnerFor","_unlock","_locked","fnAndPSD","OpenFailed","TransactionInactive","Abort","oncomplete","bWriteLock","ReadOnly","_root","waitFor","spin","currentWaitPromise","collectionOrWhereClause","emptyCollection","only","upperFactory","lowerFactory","nextCasing","lowerKey","upperNeedle","lowerNeedle","llp","lwrKeyChar","addIgnoreCaseAlgorithm","needles","initDirection","upper","lower","needleBounds","upperNeedles","nb","lowerNeedles","nextKeySuffix","needlesLen","STRING_EXPECTED","_ondirectionchange","firstPossibleNeedle","_addAlgorithm","lowestPossibleCasing","casing","between","includeLower","includeUpper","INVALID_KEY_ARGUMENT","above","aboveOrEqual","below","upperBound","belowOrEqual","startsWithIgnoreCase","equalsIgnoreCase","anyOfIgnoreCase","startsWithAnyOfIgnoreCase","notEqual","inAnyRange","minKey","includeLowers","includeUppers","noneOf","addRange","newRange","rangeSorter","sortDirection","keyWithinCurrentRange","keyIsBeyondCurrentEntry","keyIsBeforeCurrentEntry","checkKey","startsWithAnyOf","addFilter","addReplayFilter","isLimitFilter","addMatchFilter","getIndexOrStore","openCursor","idxOrStore","openKeyCursor","resolveboth","union","primaryKey","_iterate","_read","getval","lastPart","aVal","bVal","readingHook","rowsLeft","until","bIncludeStopEntry","eachKey","eachUniqueKey","eachPrimaryKey","primaryKeys","getAllKeys","uniqueKeys","firstKey","lastKey","distinct","strKey","modifyItem","failKeys","thisContext","checkFinished","currentKey","modifyer","bDelete","doReject","iterationComplete","origItem","objectDiff","additionalChanges","numKeys","anythingModified","origChanges","hangsOnDeleteLargeKeyRange","countReq","delReq","CHUNKSIZE","totalCount","nextChunk","parseType","hookSuccessHandler","hookErrorHandler","getNext","onSuccess","callNext","doThrow","keyPathSrc","getDatabaseNames","webkitGetDatabaseNames","iteratorSymbol","dexieErrorNames","idbDomErrorNames","defaultTexts","VersionChanged","_stack","errnames","BaseException","msgOrInner","Syntax","Range","fullNameExceptions","MAX_LONG_STACKS","nativePromiseInstanceAndProto","resolvedGlobalPromise","schedulePhysicalTick","hiddenDiv","unhandleds","pgp","uh","thenProp","microTaskId","Timeout","newPSD","DEXIE_VERSION","isIEOrEdge","dexieStackFrameFilter","databaseName","NoSuchDatabaseError","Class","ignoreTransaction","generatorFn","spawn","currentTransaction","promiseOrFunction","optionalTimeout","MultiModifyError","Modify","mozIndexedDB","webkitIndexedDB","msIndexedDB","webkitIDBKeyRange","semVer","DBNAMES","gen","DH","genc","ENCODINGS","generatePrime","binary","_pub","checkPrime","primeCache","simpleSieve","fermatTest","millerRabin","TWENTYFOUR","ELEVEN","TEN","THREE","SEVEN","malleable","setGenerator","__prime","_primeLen","_primeCode","MillerRabin","__gen","_gen","secret","getPrime","front","getGenerator","_getPrimes","findPrime","n2","FIVE","FOUR","SIXTEEN","EIGHT","TWELVE","eddsa","BaseCurve","pointFromJSON","gRed","_wnafT1","_wnafT2","_wnafT3","_wnafT4","_bitLength","adjustCount","redN","_maxwellTrick","BasePoint","precomputed","getNAF","getJSF","_fixedNafMul","doubles","_getDoubles","naf","nafW","repr","jpoint","mixedAdd","toP","_wnafMul","nafPoints","_getNAFPoints","dblp","_wnafMulAdd","defW","coeffs","jacobianResult","wndWidth","comb","toJ","jsf","ja","jb","decodePoint","pointFromX","encodeCompressed","compact","getY","precompute","power","beta","_getBeta","_hasDoubles","dbl","EdwardsCurve","twisted","mOneA","oneC","zOne","_mulA","_mulC","pointFromY","fromJSON","_extDbl","nx","ny","nt","nz","_projDbl","_extAdd","_projAdd","mulAdd","jmulAdd","zi","eqXToP","xc","edwards","MontCurve","i4","a24","bb","diffAdd","da","jumlAdd","ShortCurve","tinv","zeroA","threeA","endo","_getEndomorphism","_endoWnafT1","_endoWnafT2","isRed","JPoint","lambda","betas","_getEndoRoots","lambdas","basis","vec","_getEndoBasis","ntinv","prevR","aprxSqrt","_endoSplit","p2","q1","q2","ax","_endoWnafMulAdd","npoints","ncoeffs","endoMul","obj2point","ys1","dyinv","_precompute","zinv","zinv2","ay","pz2","u1","u2","h2","h3","jx","jy","jz","jz4","jyd","jx2","jyd2","jyd4","dny","_zeroDbl","_threeDbl","_dbl","xx","yyyy8","c8","gamma","beta4","beta8","ggamma8","jy2","jxd4","jyd8","trpl","zz","ee","yyu4","kbase","z3","pz3","PresetCurve","defineCurve","sha384","sha512","nh","HmacDRBG","KeyPair","Signature","keyPair","fromPrivate","fromPublic","drbg","pers","persEnc","entropy","hmacStrength","entropyEnc","ns2","_truncateToN","truncOnly","msgBitLength","bkey","ns1","kpX","recoveryParam","canonical","sinv","recoverPubKey","isYOdd","isSecondKey","rInv","getKeyRecoveryParam","Q","Qprime","privEnc","pubEnc","_importDER","place","getLength","octetLen","rmPadding","constructLength","octets","backHalf","EDDSA","pointClass","encodingLength","parseBytes","keyFromSecret","hashInt","messagePrefix","Rencoded","encodePoint","s_","pubBytes","makeSignature","SG","RplusAh","intFromLE","fromSecret","lastIx","normed","xIsOdd","encodeInt","decodeInt","isPoint","_secret","_pubBytes","cachedProperty","privBytes","getSecret","_R","_S","_Rencoded","_Sencoded","Sencoded","toBytes","m8","m14","m24","computer","minAssert","minUtils","zero2","ErrorStackParser","StackFrame","_map","_filter","_indexOf","FIREFOX_SAFARI_STACK_REGEXP","CHROME_IE_STACK_REGEXP","SAFARI_NATIVE_CODE_REGEXP","stacktrace","parseOpera","parseV8OrIE","parseFFOrSafari","extractLocation","urlLike","regExp","locationParts","functionName","fileName","parseOpera9","parseOpera11","parseOpera10","lineRE","argsRaw","functionCall","EventEmitter","objectCreate","_eventsCount","_maxListeners","$getMaxListeners","defaultMaxListeners","emitNone","isFn","arrayClone","emitOne","emitTwo","emitThree","emitMany","_addListener","newListener","warned","emitter","onceWrapper","wrapFn","_onceWrap","wrapped","unwrap","evlistener","unwrapListeners","listenerCount","spliceOne","objectCreatePolyfill","objectKeysPolyfill","functionBindPolyfill","hasDefineProperty","setMaxListeners","getMaxListeners","er","doError","prependListener","once","prependOnceListener","originalListener","removeAllListeners","rawListeners","EVP_BytesToKey","salt","keyBits","used","keyStart","ivStart","FileSaver","autoBom","MouseEvent","HTMLAnchorElement","webkitURL","download","createObjectURL","revokeObjectURL","msSaveOrOpenBlob","innerText","HTMLElement","safari","FileReader","onloadend","readAsDataURL","libphonenumber","module$contents$goog$debug$Error_DebugError","reportErrorToServer","module$contents$goog$array_peek","module$contents$goog$array_forEachRight","module$contents$goog$array_count","module$contents$goog$array_forEach","module$contents$goog$array_find","module$contents$goog$array_findIndex","module$contents$goog$array_findRight","module$contents$goog$array_findIndexRight","module$contents$goog$array_contains","module$contents$goog$array_indexOf","module$contents$goog$array_isEmpty","module$contents$goog$array_clear","module$contents$goog$array_insert","module$contents$goog$array_insertAt","module$contents$goog$array_splice","module$contents$goog$array_insertArrayAt","goog","module$contents$goog$array_insertBefore","module$contents$goog$array_remove","module$contents$goog$array_removeAt","module$contents$goog$array_removeLast","module$contents$goog$array_lastIndexOf","asserts","module$contents$goog$array_removeIf","module$contents$goog$array_removeAllIf","module$contents$goog$array_concat","module$contents$goog$array_join","module$contents$goog$array_toArray","module$contents$goog$array_extend","module$contents$goog$array_slice","module$contents$goog$array_removeDuplicates","getUid","module$contents$goog$array_binarySearch","module$contents$goog$array_binarySearch_","module$contents$goog$array_defaultCompare","module$contents$goog$array_binarySelect","module$contents$goog$array_sort","module$contents$goog$array_stableSort","module$contents$goog$array_sortByKey","module$contents$goog$array_sortObjectsByKey","module$contents$goog$array_isSorted","module$contents$goog$array_equals","module$contents$goog$array_defaultCompareEquality","module$contents$goog$array_compare3","module$contents$goog$array_inverseDefaultCompare","module$contents$goog$array_binaryInsert","module$contents$goog$array_binaryRemove","module$contents$goog$array_bucket","module$contents$goog$array_toObject","module$contents$goog$array_range","module$contents$goog$array_repeat","module$contents$goog$array_flatten","module$contents$goog$array_rotate","module$contents$goog$array_moveItem","module$contents$goog$array_zip","module$contents$goog$array_shuffle","module$contents$goog$array_copyByIndex","module$contents$goog$array_concatMap","module$contents$goog$array_map","$jscomp","createTemplateTagFirstArg","createTemplateTagFirstArgWithRaw","arrayIteratorImpl","arrayIterator","makeIterator","arrayFromIterator","arrayFromIterable","checkStringArgs","ASSUME_ES5","ASSUME_NO_NATIVE_MAP","ASSUME_NO_NATIVE_SET","SIMPLE_FROUND_POLYFILL","ISOLATE_POLYFILLS","FORCE_POLYFILL_PROMISE","FORCE_POLYFILL_PROMISE_WHEN_NO_UNHANDLED_REJECTION","getGlobal","globalThis","IS_SYMBOL_NATIVE","TRUST_ES6_POLYFILLS","polyfills","propertyToPolyfillSymbol","POLYFILL_PREFIX","$jscomp$lookupPolyfilledValue","polyfill","polyfillIsolated","polyfillUnisolated","findInternal","initSymbol","$jscomp$symbol$id_","iteratorPrototype","iteratorFromArray","COMPILED","exportPath_","execScript","CLOSURE_UNCOMPILED_DEFINES","CLOSURE_DEFINES","FEATURESET_YEAR","DEBUG","LOCALE","TRUSTED_SITE","DISALLOW_TEST_ONLY_CODE","ENABLE_CHROME_APP_SAFE_SCRIPT_LOADING","provide","isInModuleLoader_","isProvided_","constructNamespace_","implicitNamespaces_","getObjectByName","getScriptNonce","getScriptNonce_","cspNonce_","NONCE_PATTERN_","VALID_MODULE_RE_","isInGoogModuleLoader_","moduleLoaderState_","getInternal_","loadedModules_","ModuleType","ES6","GOOG","isInEs6ModuleLoader_","getCurrentModulePath","declareLegacyNamespace","declareModuleId","moduleId","setTestOnly","forwardDeclare","goog.module","addDependency","DEPENDENCIES_ENABLED","debugLoader_","ENABLE_DEBUG_LOADER","logToConsole_","requested","load_","requireType","basePath","nullFunction","abstractMethod","addSingletonGetter","instance_","instantiatedSingletons_","LOAD_MODULE_USING_EVAL","SEAL_MODULE_EXPORTS","TRANSPILE","ASSUME_ES_MODULES_TRANSPILED","TRANSPILE_TO_LANGUAGE","TRANSPILER","hasBadLetScoping","useSafari10Workaround","eval","workaroundSafari10EvalBug","loadModule","loadModuleFromSource_","seal","normalizePath_","loadFileSync_","CLOSURE_LOAD_FILE_SYNC","transpile_","transpile","$gwtExport","typeOf","isDateLike","UID_PROPERTY_","uidCounter_","hasUid","removeUid","cloneObject","bindNative_","bindJs_","mixin","globalEval","getCssName","cssNameMapping_","cssNameMappingStyle_","CLOSURE_CSS_NAME_MAP_FN","setCssNameMapping","CLOSURE_CSS_NAME_MAPPING","getMsg","unescapeHtmlEntities","getMsgWithFallback","exportSymbol","exportProperty","superClass_","createSealingConstructor_","applyProperties_","SEAL_CLASS_INSTANCES","OBJECT_PROTOTYPE_FIELDS_","inHtmlDocument_","isDocumentLoading_","findBasePath_","CLOSURE_BASE_PATH","currentScript","Transpiler","requiresTranspilation_","transpilationTarget_","createRequiresTranspilation_","es3","needsTranspile","transpiler_","protectScriptTag_","DebugLoader_","dependencies_","idToPath_","written_","loadingDeps_","depsToLoad_","paused_","factory_","DependencyFactory","deferredCallbacks_","deferredQueue_","getPathFromDeps_","onLoad","loadClosureDeps","createDependency","loadDeps_","areDepsLoaded_","setDependencyFactory","loading_","resume_","loaded","loaded_","setModuleState","registerEs6ModuleExports","registerGoogModuleExports","clearModuleState","defer_","areDepsLoaded","pause_","LoadController","Dependency","relativePath","provides","loadFlags","loadCallbacks_","getPathName","callbackMap_","registerCallback_","unregisterCallback_","callback_","CLOSURE_IMPORT_SCRIPT","TRUSTED_TYPES_POLICY_","IS_OLD_IE_","createScriptURL","Es6ModuleDependency","createScript","TransformedDependency","contents_","lazyFetch_","TranspiledDependency","transpiler","PreTranspiledEs6ModuleDependency","GoogModuleDependency","needsTranspile_","atob","TRUSTED_TYPES_POLICY_NAME","createTrustedTypesPolicy","CLOSURE_NO_DEPS","identity_","trustedTypes","createPolicy","dom","NodeType","ELEMENT","ATTRIBUTE","TEXT","CDATA_SECTION","ENTITY_REFERENCE","ENTITY","PROCESSING_INSTRUCTION","COMMENT","DOCUMENT","DOCUMENT_TYPE","DOCUMENT_FRAGMENT","NOTATION","ENABLE_ASSERTS","AssertionError","subs_","messagePattern","DEFAULT_ERROR_HANDLER","errorHandler_","doAssertFailure_","setErrorHandler","assertExists","assertNumber","assertString","assertFunction","assertObject","assertArray","assertBoolean","assertElement","assertInstanceof","getType_","assertFinite","assertObjectPrototypeIsIntact","NATIVE_ARRAY_PROTOTYPES","module$contents$goog$array_ASSUME_NATIVE_FUNCTIONS","ASSUME_NATIVE_FUNCTIONS","forEachRight","module$contents$goog$array_filter","module$contents$goog$array_reduce","module$contents$goog$array_reduceRight","module$contents$goog$array_some","module$contents$goog$array_every","findRight","findIndexRight","insert","insertAt","insertArrayAt","removeLast","removeAt","removeIf","removeAllIf","module$contents$goog$array_clone","removeDuplicates","binarySearch","binarySelect","stableSort","sortByKey","sortObjectsByKey","isSorted","compare3","inverseDefaultCompare","defaultCompareEquality","binaryInsert","binaryRemove","bucket","moveItem","shuffle","copyByIndex","concatMap","assertIsLocation","getWindow_","debugStringForType_","assertIsElementType_","assertIsHTMLAnchorElement","assertIsHTMLButtonElement","assertIsHTMLLinkElement","assertIsHTMLImageElement","assertIsHTMLAudioElement","assertIsHTMLVideoElement","assertIsHTMLInputElement","assertIsHTMLTextAreaElement","assertIsHTMLCanvasElement","assertIsHTMLEmbedElement","assertIsHTMLFormElement","assertIsHTMLFrameElement","assertIsHTMLIFrameElement","assertIsHTMLObjectElement","assertIsHTMLScriptElement","parentWindow","HtmlElement","functions","FALSE","TRUE","NULL","nth","partialRight","withReturnValue","sequence","equalTo","compose","CACHE_RETURN_VALUE","cacheReturnValue","rateLimit","TagName","cast","ABBR","ACRONYM","ADDRESS","APPLET","AREA","ARTICLE","ASIDE","AUDIO","BASEFONT","BDI","BDO","BIG","BLOCKQUOTE","BODY","BR","BUTTON","CANVAS","CAPTION","CENTER","CITE","CODE","COL","COLGROUP","COMMAND","DATA","DATALIST","DD","DEL","DETAILS","DFN","DIALOG","DIR","DIV","DL","DT","EM","EMBED","FIELDSET","FIGCAPTION","FIGURE","FONT","FOOTER","FORM","FRAME","FRAMESET","H1","H2","H3","H4","H5","H6","HEAD","HEADER","HGROUP","HR","IFRAME","IMG","INPUT","INS","ISINDEX","KBD","KEYGEN","LABEL","LEGEND","LI","LINK","MAIN","MARK","MATH","MENU","MENUITEM","METER","NAV","NOFRAMES","NOSCRIPT","OBJECT","OL","OPTGROUP","OPTION","OUTPUT","PARAM","PICTURE","PRE","PROGRESS","RP","RT","RTC","RUBY","SAMP","SCRIPT","SECTION","SELECT","SMALL","SOURCE","SPAN","STRIKE","STRONG","STYLE","SUB","SUMMARY","SUP","SVG","TABLE","TBODY","TD","TEMPLATE","TEXTAREA","TFOOT","TH","THEAD","TIME","TITLE","TR","TRACK","TT","UL","VAR","VIDEO","WBR","getCount","getAnyKey","getAnyValue","containsValue","getValueByKeys","containsKey","findKey","findValue","setIfUndefined","setWithReturnValueIfNotSet","unsafeClone","transpose","PROTOTYPE_FIELDS_","createSet","createImmutableView","isImmutableView","getAllPropertyNames","getSuperClass","VOID_TAGS_","br","embed","img","keygen","wbr","isVoidTag","TypedString","Const","stringConstValueWithSecurityContract__googStringSecurityPrivate_","GOOG_STRING_CONSTRUCTOR_TOKEN_PRIVATE_","STRING_CONST_TYPE_MARKER__GOOG_STRING_SECURITY_PRIVATE_","TYPE_MARKER_","implementsGoogStringTypedString","getTypedStringValue","EMPTY","trustedtypes","getPolicyPrivateDoNotAccessOrElse","cachedPolicy_","module$contents$goog$html$SafeScript_CONSTRUCTOR_TOKEN_PRIVATE","module$contents$goog$html$SafeScript_SafeScript","privateDoNotAccessOrElseSafeScriptWrappedValue_","fromConstant","createSafeScriptSecurityPrivateDoNotAccessOrElse","fromConstantAndArgs","stringify_","unwrapTrustedScript","SafeScript","fs","createObjectUrl","getUrlObject_","revokeObjectUrl","UrlObject_","findUrlObject_","browserSupportsObjectUrls","blob","getBlob","BlobBuilder","WebKitBlobBuilder","getBlobWithProperties","endings","bidi","FORCE_RTL","IS_RTL","Format","LRE","RLE","PDF","LRM","RLM","Dir","LTR","RTL","NEUTRAL","RIGHT","LEFT","I18N_RIGHT","I18N_LEFT","toDir","ltrChars_","rtlChars_","htmlSkipReg_","stripHtmlIfNeeded_","rtlCharReg_","ltrCharReg_","hasAnyRtl","hasRtlChar","hasAnyLtr","ltrRe_","rtlRe_","isRtlChar","isLtrChar","isNeutralChar","ltrDirCheckRe_","rtlDirCheckRe_","startsWithRtl","isRtlText","startsWithLtr","isLtrText","isRequiredLtrRe_","isNeutralText","ltrExitDirCheckRe_","rtlExitDirCheckRe_","endsWithLtr","isLtrExitText","endsWithRtl","isRtlExitText","rtlLocalesRe_","isRtlLanguage","bracketGuardTextRe_","guardBracketInText","enforceRtlInHtml","enforceRtlInText","enforceLtrInHtml","enforceLtrInText","dimensionsRe_","leftRe_","rightRe_","tempRe_","mirrorCSS","doubleQuoteSubstituteRe_","singleQuoteSubstituteRe_","normalizeHebrewQuote","wordSeparatorRe_","hasNumeralsRe_","rtlDetectionThreshold_","estimateDirection","detectRtlDirectionality","setElementDirAndAlign","setElementDirByTextDirectionality","DirectionalString","TrustedResourceUrl","privateDoNotAccessOrElseTrustedResourceUrlWrappedValue_","CONSTRUCTOR_TOKEN_PRIVATE_","implementsGoogI18nBidiDirectionalString","getDirection","cloneWithParams","URL_PARAM_PARSER_","createTrustedResourceUrlSecurityPrivateDoNotAccessOrElse","stringifyParams_","unwrapTrustedScriptURL","BASE_URL_","FORMAT_MARKER_","formatWithParams","fromConstants","fromSafeScript","caseInsensitiveStartsWith","caseInsensitiveCompare","caseInsensitiveEndsWith","caseInsensitiveEquals","isEmptyOrWhitespace","newLineToBr","htmlEscape","AMP_RE_","LT_RE_","GT_RE_","QUOT_RE_","SINGLE_QUOTE_RE_","NULL_RE_","ALL_RE_","whitespaceEscape","caseInsensitiveContains","compareVersions","compareElements_","SafeUrl","privateDoNotAccessOrElseSafeUrlWrappedValue_","INNOCUOUS_STRING","createSafeUrlSecurityPrivateDoNotAccessOrElse","SAFE_MIME_TYPE_PATTERN_","isSafeMimeType","fromBlob","fromMediaSource","MediaSource","DATA_URL_PATTERN_","tryFromDataUrl","fromDataUrl","INNOCUOUS_URL","fromTelUrl","SIP_URL_PATTERN_","fromSipUrl","fromFacebookMessengerUrl","fromWhatsAppUrl","fromSmsUrl","isSmsUrlBodyValid_","fromSshUrl","sanitizeChromeExtensionUrl","sanitizeExtensionUrl_","sanitizeFirefoxExtensionUrl","sanitizeEdgeExtensionUrl","fromTrustedResourceUrl","SAFE_URL_PATTERN_","SAFE_URL_PATTERN","trySanitize","sanitizeAssertUnchanged","ABOUT_BLANK","SafeStyle","privateDoNotAccessOrElseSafeStyleWrappedValue_","createSafeStyleSecurityPrivateDoNotAccessOrElse","sanitizePropertyValue_","sanitizePropertyValueString_","FUNCTIONS_RE_","URL_RE_","VALUE_RE_","COMMENT_RE_","hasBalancedQuotes_","hasBalancedSquareBrackets_","sanitizeUrl_","VALUE_ALLOWED_CHARS_","ALLOWED_FUNCTIONS_","module$contents$goog$html$SafeStyleSheet_CONSTRUCTOR_TOKEN_PRIVATE","module$contents$goog$html$SafeStyleSheet_SafeStyleSheet","privateDoNotAccessOrElseSafeStyleSheetWrappedValue_","createRule","hasBalancedBrackets_","createSafeStyleSheetSecurityPrivateDoNotAccessOrElse","(","SafeStyleSheet","labs","util","getNativeUserAgentString_","getNavigator_","userAgent_","setUserAgent","matchUserAgent","matchUserAgentIgnoreCase","extractVersionTuples","matchOpera_","matchIE_","matchEdgeHtml_","matchEdgeChromium_","matchOperaChromium_","matchFirefox_","matchSafari_","matchChrome_","matchCoast_","isSilk","matchIosWebview_","matchAndroidBrowser_","isChrome","isFirefox","isOpera","isIE","isEdge","isEdgeChromium","isOperaChromium","isSafari","isCoast","isIosWebview","isAndroidBrowser","getIEVersion_","isVersionOrHigher","SafeHtml","privateDoNotAccessOrElseSafeHtmlWrappedValue_","dir_","ENABLE_ERROR_MESSAGES","SUPPORT_STYLE_ATTRIBUTE","unwrapTrustedHTML","createSafeHtmlSecurityPrivateDoNotAccessOrElse","htmlEscapePreservingNewlines","htmlEscapePreservingNewlinesAndSpaces","VALID_NAMES_IN_TAG_","URL_ATTRIBUTES_","cite","formaction","manifest","poster","NOT_ALLOWED_TAG_NAMES_","verifyTagName","createSafeHtmlTagSecurityPrivateDoNotAccessOrElse","createIframe","srcdoc","combineAttributes","sandbox","createSandboxIframe","canUseSandboxIframe","HTMLIFrameElement","createScriptSrc","createStyle","createMetaRefresh","http-equiv","getAttrNameAndValue_","getStyleValue_","createWithDir","concatWithDir","stringifyAttributes","DOCTYPE_HTML","emptyHTML","uncheckedconversions","safeHtmlFromStringKnownToSatisfyTypeContract","safeScriptFromStringKnownToSatisfyTypeContract","safeStyleFromStringKnownToSatisfyTypeContract","safeStyleSheetFromStringKnownToSatisfyTypeContract","safeUrlFromStringKnownToSatisfyTypeContract","trustedResourceUrlFromStringKnownToSatisfyTypeContract","InsertAdjacentHtmlPosition","AFTERBEGIN","AFTEREND","BEFOREBEGIN","BEFOREEND","insertAdjacentHtml","insertAdjacentHTML","SET_INNER_HTML_DISALLOWED_TAGS_","isInnerHtmlCleanupRecursive_","unsafeSetInnerHtmlDoNotUseOrElse","setInnerHtml","setInnerHtmlFromConstant","setOuterHtml","setFormElementAction","setButtonFormAction","formAction","setInputFormAction","setStyle","documentWrite","setAnchorHref","setImageSrc","setAudioSrc","setVideoSrc","setEmbedSrc","setFrameSrc","setIframeSrc","setIframeSrcdoc","setLinkHrefAndRel","setObjectData","setScriptSrc","setNonceForScriptElement_","setScriptContent","setLocationHref","assignLocation","replaceLocation","openInWindow","parseFromStringHtml","parseFromString","createImageFromBlob","Image","DETECT_DOUBLE_ESCAPING","FORCE_NON_DOM_HTML_UNESCAPING","Unicode","NBSP","subs","collapseWhitespace","isEmptyString","isEmptyOrWhitespaceSafe","makeSafe","isEmptySafe","isBreakingWhitespace","isAlpha","isAlphaNumeric","isSpace","isUnicodeChar","stripNewlines","canonicalizeNewlines","normalizeWhitespace","normalizeSpaces","collapseBreakingSpaces","numberAwareCompare_","intAwareCompare","floatAwareCompare","numerateCompare","urlEncode","urlDecode","E_RE_","unescapeEntities","unescapeEntitiesUsingDom_","unescapePureXmlEntities_","unescapeEntitiesWithDocument","&amp;","&lt;","&gt;","&quot;","HTML_ENTITY_PATTERN_","preserveSpaces","stripQuotes","truncateMiddle","specialEscapeChars_","\u0000","\b","\f","\n","\r","\t","\u000b","\\","<","jsEscapeCache_","escapeChar","escapeString","countOf","regExpEscape","replaceAll","buildString","getRandomString","hashCode","uniqueStringCounter_","createUniqueString","isLowerCamelCase","isUpperCamelCase","toCamelCase","toSelectorCase","toTitleCase","capitalize","lastComponent","editDistance","proto2","Descriptor","messageType_","fullName_","containingType_","containingType","fields_","getTag","getName","getFullName","getContainingType","getDescriptor","getFields","getFieldsMap","findFieldByName","findFieldByTag","createMessageInstance","FieldDescriptor","parent_","tag_","isPacked_","packed","isRepeated_","repeated","isRequired_","fieldType_","fieldType","nativeType_","deserializationConversionPermitted_","FieldType","INT64","UINT64","FIXED64","SFIXED64","SINT64","FLOAT","DOUBLE","defaultValue_","INT32","FIXED32","BOOL","STRING","GROUP","MESSAGE","UINT32","ENUM","SFIXED32","SINT32","getDefaultValue","getFieldType","getNativeType","deserializationConversionPermitted","getFieldMessageType","isCompositeType","isPacked","isRepeated","values_","deserializedFields_","lazyDeserializer_","initializeForLazyDeserializer","setUnknown","forEachUnknown","has$Value","arrayOf","array$Values","count$Values","get$Value","getOrDefault","get$ValueOrDefault","set$Value","add$Value","clear$Field","getValueForTag_","copyFrom","mergeFrom","initDefaults","deserializeField","checkFieldType_","createDescriptor","Serializer","DECODE_SYMBOLIC_ENUMS","getSerializedValue","deserialize","deserializeTo","getDeserializedValue","INTEGER_REGEX","LazyDeserializer","PbLiteSerializer","zeroIndexing_","setZeroIndexed","StringBuffer","buffer_","phonenumbers","NumberFormat","descriptor_","getPattern","getPatternOrDefault","setPattern","hasPattern","patternCount","clearPattern","getFormat","getFormatOrDefault","setFormat","hasFormat","formatCount","clearFormat","getLeadingDigitsPattern","getLeadingDigitsPatternOrDefault","addLeadingDigitsPattern","leadingDigitsPatternArray","hasLeadingDigitsPattern","leadingDigitsPatternCount","clearLeadingDigitsPattern","getNationalPrefixFormattingRule","getNationalPrefixFormattingRuleOrDefault","setNationalPrefixFormattingRule","hasNationalPrefixFormattingRule","nationalPrefixFormattingRuleCount","clearNationalPrefixFormattingRule","getNationalPrefixOptionalWhenFormatting","getNationalPrefixOptionalWhenFormattingOrDefault","setNationalPrefixOptionalWhenFormatting","hasNationalPrefixOptionalWhenFormatting","nationalPrefixOptionalWhenFormattingCount","clearNationalPrefixOptionalWhenFormatting","getDomesticCarrierCodeFormattingRule","getDomesticCarrierCodeFormattingRuleOrDefault","setDomesticCarrierCodeFormattingRule","hasDomesticCarrierCodeFormattingRule","domesticCarrierCodeFormattingRuleCount","clearDomesticCarrierCodeFormattingRule","PhoneNumberDesc","getNationalNumberPattern","getNationalNumberPatternOrDefault","setNationalNumberPattern","hasNationalNumberPattern","nationalNumberPatternCount","clearNationalNumberPattern","getPossibleLength","getPossibleLengthOrDefault","addPossibleLength","possibleLengthArray","hasPossibleLength","possibleLengthCount","clearPossibleLength","getPossibleLengthLocalOnly","getPossibleLengthLocalOnlyOrDefault","addPossibleLengthLocalOnly","possibleLengthLocalOnlyArray","hasPossibleLengthLocalOnly","possibleLengthLocalOnlyCount","clearPossibleLengthLocalOnly","getExampleNumber","getExampleNumberOrDefault","setExampleNumber","hasExampleNumber","exampleNumberCount","clearExampleNumber","PhoneMetadata","getGeneralDesc","getGeneralDescOrDefault","setGeneralDesc","hasGeneralDesc","generalDescCount","clearGeneralDesc","getFixedLine","getFixedLineOrDefault","setFixedLine","hasFixedLine","fixedLineCount","clearFixedLine","getMobile","getMobileOrDefault","setMobile","hasMobile","mobileCount","clearMobile","getTollFree","getTollFreeOrDefault","setTollFree","hasTollFree","tollFreeCount","clearTollFree","getPremiumRate","getPremiumRateOrDefault","setPremiumRate","hasPremiumRate","premiumRateCount","clearPremiumRate","getSharedCost","getSharedCostOrDefault","setSharedCost","hasSharedCost","sharedCostCount","clearSharedCost","getPersonalNumber","getPersonalNumberOrDefault","setPersonalNumber","hasPersonalNumber","personalNumberCount","clearPersonalNumber","getVoip","getVoipOrDefault","setVoip","hasVoip","voipCount","clearVoip","getPager","getPagerOrDefault","setPager","hasPager","pagerCount","clearPager","getUan","getUanOrDefault","setUan","hasUan","uanCount","clearUan","getEmergency","getEmergencyOrDefault","setEmergency","hasEmergency","emergencyCount","clearEmergency","getVoicemail","getVoicemailOrDefault","setVoicemail","hasVoicemail","voicemailCount","clearVoicemail","getShortCode","getShortCodeOrDefault","setShortCode","hasShortCode","shortCodeCount","clearShortCode","getStandardRate","getStandardRateOrDefault","setStandardRate","hasStandardRate","standardRateCount","clearStandardRate","getCarrierSpecific","getCarrierSpecificOrDefault","setCarrierSpecific","hasCarrierSpecific","carrierSpecificCount","clearCarrierSpecific","getSmsServices","getSmsServicesOrDefault","setSmsServices","hasSmsServices","smsServicesCount","clearSmsServices","getNoInternationalDialling","getNoInternationalDiallingOrDefault","setNoInternationalDialling","hasNoInternationalDialling","noInternationalDiallingCount","clearNoInternationalDialling","getId","getIdOrDefault","setId","idCount","clearId","getCountryCode","getCountryCodeOrDefault","setCountryCode","hasCountryCode","countryCodeCount","clearCountryCode","getInternationalPrefix","getInternationalPrefixOrDefault","setInternationalPrefix","hasInternationalPrefix","internationalPrefixCount","clearInternationalPrefix","getPreferredInternationalPrefix","getPreferredInternationalPrefixOrDefault","setPreferredInternationalPrefix","hasPreferredInternationalPrefix","preferredInternationalPrefixCount","clearPreferredInternationalPrefix","getNationalPrefix","getNationalPrefixOrDefault","setNationalPrefix","hasNationalPrefix","nationalPrefixCount","clearNationalPrefix","getPreferredExtnPrefix","getPreferredExtnPrefixOrDefault","setPreferredExtnPrefix","hasPreferredExtnPrefix","preferredExtnPrefixCount","clearPreferredExtnPrefix","getNationalPrefixForParsing","getNationalPrefixForParsingOrDefault","setNationalPrefixForParsing","hasNationalPrefixForParsing","nationalPrefixForParsingCount","clearNationalPrefixForParsing","getNationalPrefixTransformRule","getNationalPrefixTransformRuleOrDefault","setNationalPrefixTransformRule","hasNationalPrefixTransformRule","nationalPrefixTransformRuleCount","clearNationalPrefixTransformRule","getSameMobileAndFixedLinePattern","getSameMobileAndFixedLinePatternOrDefault","setSameMobileAndFixedLinePattern","hasSameMobileAndFixedLinePattern","sameMobileAndFixedLinePatternCount","clearSameMobileAndFixedLinePattern","getNumberFormat","getNumberFormatOrDefault","addNumberFormat","numberFormatArray","hasNumberFormat","numberFormatCount","clearNumberFormat","getIntlNumberFormat","getIntlNumberFormatOrDefault","addIntlNumberFormat","intlNumberFormatArray","hasIntlNumberFormat","intlNumberFormatCount","clearIntlNumberFormat","getMainCountryForCode","getMainCountryForCodeOrDefault","setMainCountryForCode","hasMainCountryForCode","mainCountryForCodeCount","clearMainCountryForCode","getLeadingDigits","getLeadingDigitsOrDefault","setLeadingDigits","hasLeadingDigits","leadingDigitsCount","clearLeadingDigits","PhoneMetadataCollection","getMetadata","getMetadataOrDefault","addMetadata","metadataArray","hasMetadata","metadataCount","clearMetadata","PhoneNumber","getNationalNumber","getNationalNumberOrDefault","setNationalNumber","hasNationalNumber","nationalNumberCount","clearNationalNumber","getExtension","getExtensionOrDefault","setExtension","hasExtension","extensionCount","clearExtension","getItalianLeadingZero","getItalianLeadingZeroOrDefault","setItalianLeadingZero","hasItalianLeadingZero","italianLeadingZeroCount","clearItalianLeadingZero","getNumberOfLeadingZeros","getNumberOfLeadingZerosOrDefault","setNumberOfLeadingZeros","hasNumberOfLeadingZeros","numberOfLeadingZerosCount","clearNumberOfLeadingZeros","getRawInput","getRawInputOrDefault","setRawInput","hasRawInput","rawInputCount","clearRawInput","getCountryCodeSource","getCountryCodeSourceOrDefault","setCountryCodeSource","hasCountryCodeSource","countryCodeSourceCount","clearCountryCodeSource","getPreferredDomesticCarrierCode","getPreferredDomesticCarrierCodeOrDefault","setPreferredDomesticCarrierCode","hasPreferredDomesticCarrierCode","preferredDomesticCarrierCodeCount","clearPreferredDomesticCarrierCode","CountryCodeSource","UNSPECIFIED","FROM_NUMBER_WITH_PLUS_SIGN","FROM_NUMBER_WITH_IDD","FROM_NUMBER_WITHOUT_PLUS_SIGN","FROM_DEFAULT_COUNTRY","countryCodeToRegionCodeMap","64","65","66","81","82","84","86","90","91","92","93","94","95","98","211","212","213","216","218","220","221","222","223","224","225","226","227","228","229","230","231","232","233","234","235","236","237","238","239","240","241","242","243","244","245","246","247","248","249","250","251","252","253","254","255","256","257","258","260","261","262","263","264","265","266","267","268","269","290","291","297","298","299","350","351","352","353","354","355","356","357","358","359","370","371","372","373","374","375","376","377","378","380","381","382","383","385","386","387","389","420","421","423","500","501","502","503","504","505","506","507","508","509","590","591","592","593","594","595","596","597","598","599","670","672","673","674","675","676","677","678","679","680","681","682","683","685","686","687","688","689","690","691","692","800","808","850","852","853","855","856","870","878","880","881","882","883","886","888","960","961","962","963","964","965","966","967","968","970","971","972","973","974","975","976","977","979","992","993","994","995","996","998","countryToMetadata","AC","AD","AE","AF","AG","AI","AL","AM","AO","AR","AS","AT","AU","AW","AX","AZ","BA","BB","BD","BE","BF","BG","BH","BI","BJ","BL","BM","BO","BQ","BS","BT","BW","BY","BZ","CA","CC","CD","CF","CG","CH","CI","CK","CL","CM","CN","CO","CR","CU","CV","CW","CX","CY","CZ","DE","DJ","DK","DM","DO","DZ","EE","EG","EH","ER","ES","ET","FI","FJ","FK","FM","FO","FR","GA","GB","GD","GE","GF","GH","GI","GL","GM","GN","GP","GQ","GR","GT","GU","GW","GY","HK","HN","HT","HU","ID","IE","IL","IM","IN","IO","IQ","IR","IS","IT","JE","JM","JO","JP","KE","KG","KH","KI","KM","KN","KP","KR","KW","KY","KZ","LA","LB","LC","LK","LR","LS","LT","LU","LV","LY","MA","MC","MD","ME","MF","MG","MH","MK","ML","MN","MO","MP","MQ","MR","MS","MT","MU","MV","MW","MX","MY","MZ","NA","NC","NE","NF","NG","NI","NL","NO","NP","NR","NU","NZ","OM","PA","PE","PF","PG","PH","PK","PL","PM","PR","PS","PT","PW","PY","QA","RE","RO","RS","RU","RW","SA","SB","SC","SD","SE","SH","SI","SJ","SK","SL","SM","SN","SO","SR","SS","ST","SV","SX","SY","SZ","TA","TC","TG","TJ","TK","TL","TM","TN","TO","TV","TW","TZ","UA","UG","US","UY","UZ","VA","VC","VE","VG","VI","VN","VU","WF","WS","XK","YE","YT","ZA","ZM","ZW","regionToMetadataMap","INVALID_COUNTRY_CODE","NOT_A_NUMBER","TOO_SHORT_AFTER_IDD","TOO_SHORT_NSN","TOO_LONG","NANPA_COUNTRY_CODE_","MIN_LENGTH_FOR_NSN_","MAX_LENGTH_FOR_NSN_","MAX_LENGTH_COUNTRY_CODE_","MAX_INPUT_STRING_LENGTH_","UNKNOWN_REGION_","MOBILE_TOKEN_MAPPINGS_","GEO_MOBILE_COUNTRIES_","PLUS_SIGN","STAR_SIGN_","RFC3966_EXTN_PREFIX_","RFC3966_PREFIX_","RFC3966_PHONE_CONTEXT_","RFC3966_ISDN_SUBADDRESS_","DIGIT_MAPPINGS","０","１","２","３","４","５","６","７","８","９","٠","١","٢","٣","٤","٥","٦","٧","٨","٩","۰","۱","۲","۳","۴","۵","۶","۷","۸","۹","DIALLABLE_CHAR_MAPPINGS_","+","*","#","ALPHA_MAPPINGS_","J","ALL_NORMALIZATION_MAPPINGS_","ALL_PLUS_NUMBER_GROUPING_SYMBOLS_","-","－","‐","‑","‒","–","—","―","−","／"," ","　","⁠",".","．","SINGLE_INTERNATIONAL_PREFIX_","VALID_PUNCTUATION","VALID_DIGITS_","VALID_ALPHA_","PLUS_CHARS_","PLUS_CHARS_PATTERN","LEADING_PLUS_CHARS_PATTERN","SEPARATOR_PATTERN_","CAPTURING_DIGIT_PATTERN","VALID_START_CHAR_PATTERN_","SECOND_NUMBER_START_PATTERN_","UNWANTED_END_CHAR_PATTERN_","VALID_ALPHA_PHONE_PATTERN_","MIN_LENGTH_PHONE_NUMBER_PATTERN_","VALID_PHONE_NUMBER_","DEFAULT_EXTN_PREFIX_","RFC3966_VISUAL_SEPARATOR_","RFC3966_PHONE_DIGIT_","RFC3966_GLOBAL_NUMBER_DIGITS_","RFC3966_GLOBAL_NUMBER_DIGITS_PATTERN_","ALPHANUM_","RFC3966_DOMAINLABEL_","RFC3966_TOPLABEL_","RFC3966_DOMAINNAME_","RFC3966_DOMAINNAME_PATTERN_","extnDigits_","createExtnPattern_","EXTN_PATTERN_","VALID_PHONE_NUMBER_PATTERN_","NON_DIGITS_PATTERN_","FIRST_GROUP_PATTERN_","NP_PATTERN_","FG_PATTERN_","CC_PATTERN_","FIRST_GROUP_ONLY_PREFIX_PATTERN_","REGION_CODE_FOR_NON_GEO_ENTITY","PhoneNumberFormat","E164","INTERNATIONAL","NATIONAL","RFC3966","PhoneNumberType","FIXED_LINE","MOBILE","FIXED_LINE_OR_MOBILE","TOLL_FREE","PREMIUM_RATE","SHARED_COST","VOIP","PERSONAL_NUMBER","PAGER","UAN","VOICEMAIL","UNKNOWN","MatchType","NO_MATCH","SHORT_NSN_MATCH","NSN_MATCH","EXACT_MATCH","ValidationResult","IS_POSSIBLE","IS_POSSIBLE_LOCAL_ONLY","TOO_SHORT","INVALID_LENGTH","extractPossibleNumber","isViablePhoneNumber","matchesEntirely","normalizeHelper_","normalizeDigitsOnly","normalizeSB_","normalizeDiallableCharsOnly","convertAlphaCharactersInNumber","getLengthOfGeographicalAreaCode","getMetadataForRegion","getRegionCodeForNumber","isNumberGeographical","getLengthOfNationalDestinationCode","getNumberType","getCountryMobileToken","getSupportedRegions","getSupportedGlobalNetworkCallingCodes","getSupportedCallingCodes","descHasPossibleNumberData_","descHasData_","getSupportedTypesForMetadata_","getNumberDescByType_","getSupportedTypesForRegion","isValidRegionCode_","getSupportedTypesForNonGeoEntity","getMetadataForNonGeographicalRegion","formattingRuleHasFirstGroupOnly","hasValidCountryCallingCode_","getNationalSignificantNumber","prefixNumberWithCountryCallingCode_","getRegionCodeForCountryCode","getMetadataForRegionOrCallingCode_","maybeGetFormattedExtension_","formatNsn_","formatByPattern","chooseFormattingPatternForNumber_","formatNsnUsingPattern_","formatNationalNumberWithCarrierCode","formatNationalNumberWithPreferredCarrierCode","formatNumberForMobileDialing","canBeInternationallyDialled","testNumberLength_","formatOutOfCountryCallingNumber","isNANPACountry","getCountryCodeForValidRegion_","formatInOriginalFormat","hasFormattingPatternForNumber_","getNddPrefixForRegion","rawInputContainsNationalPrefix_","formatOutOfCountryKeepingAlphaChars","getExampleNumberForType","getExampleNumberForNonGeoEntity","getNumberTypeHelper_","isNumberMatchingDesc_","isValidNumberForRegion","getRegionCodeForNumberFromRegionList_","getRegionCodesForCountryCode","getCountryCodeForRegion","isAlphaNumber","maybeStripExtension","isPossibleNumber","isPossibleNumberWithReason","isPossibleNumberForType","isPossibleNumberForTypeWithReason","testNumberLengthForType_","isPossibleNumberString","truncateTooLongNumber","extractCountryCode","maybeExtractCountryCode","maybeStripInternationalPrefixAndNormalize","maybeStripNationalPrefixAndCarrierCode","parsePrefixAsIdd_","checkRegionForParsing_","parseHelper_","setItalianLeadingZerosForPhoneNumber_","buildNationalNumberForParsing_","extractPhoneContext_","isPhoneContextValid_","copyCoreFieldsOnly_","isNumberMatch","isNationalNumberSuffixOfTheOther_","matchesPrefix","shortnumbermetadata","ShortNumberInfo","REGIONS_WHERE_EMERGENCY_NUMBERS_MUST_BE_EXACT_","ShortNumberCost","STANDARD_RATE","UNKNOWN_COST","getRegionCodesForCountryCode_","regionDialingFromMatchesNumber_","isPossibleShortNumberForRegion","getMetadataForRegion_","getNationalSignificantNumber_","isPossibleShortNumber","isValidShortNumberForRegion","matchesPossibleNumberAndNationalNumber_","isValidShortNumber","getRegionCodeForShortNumberFromRegionList_","getExpectedCostForRegion","isEmergencyNumber","getExpectedCost","getExampleShortNumber","getExampleShortNumberForCost","connectsToEmergencyNumber","matchesEmergencyNumberHelper_","isCarrierSpecific","isCarrierSpecificForRegion","isSmsServiceForRegion","AsYouTypeFormatter","DIGIT_PLACEHOLDER_","DIGIT_PATTERN_","currentOutput_","formattingTemplate_","currentFormattingPattern_","accruedInput_","accruedInputWithoutFormatting_","ableToFormat_","isExpectingCountryCallingCode_","isCompleteNumber_","inputHasFormatting_","phoneUtil_","positionToRemember_","originalPosition_","lastMatchPosition_","prefixBeforeNationalNumber_","shouldAddSpaceAfterNationalPrefix_","extractedNationalPrefix_","nationalNumber_","possibleFormats_","defaultCountry_","defaultMetadata_","currentMetadata_","SEPARATOR_BEFORE_NATIONAL_NUMBER_","EMPTY_METADATA_","ELIGIBLE_FORMAT_PATTERN_","NATIONAL_PREFIX_SEPARATORS_PATTERN_","MIN_LEADING_DIGITS_LENGTH_","maybeCreateNewTemplate_","createFormattingTemplate_","getAvailableFormats_","narrowDownPossibleFormats_","getFormattingTemplate_","inputDigit","inputDigitWithOptionToRememberPosition_","inputDigitAndRememberPosition","isDigitOrLeadingPlusSign_","normalizeAndAccrueDigitsAndPlusSign_","attemptToExtractIdd_","attemptToExtractCountryCallingCode_","attemptToChoosePatternWithPrefixExtracted_","ableToExtractLongerNdd_","removeNationalPrefixFromNationalNumber_","attemptToChooseFormattingPattern_","inputDigitHelper_","attemptToFormatAccruedDigits_","inputAccruedNationalNumber_","appendNationalNumber_","getExtractedNationalPrefix_","getRememberedPosition","isNanpaNumberWithNationalPrefix_","HashBase","_block","_blockSize","_blockOffset","_finalized","_digest","ripemd","hmac","sha1","sha224","ripemd160","BlockHash","pendingTotal","outSize","_delta8","_delta32","join32","Kh","rotl32","sum32","sum32_3","sum32_4","Ah","Bh","Ch","Dh","Eh","rh","sh","toHex32","split32","SHA1","shaCommon","sum32_5","ft_1","sha1_K","SHA224","SHA256","sha256_K","ch32","maj32","s0_256","s1_256","g0_256","g1_256","T1","T2","SHA384","SHA512","sha512_K","ch64_hi","xh","yh","zh","ch64_lo","zl","maj64_hi","maj64_lo","s0_512_hi","c0_hi","rotr64_hi","c1_hi","c2_hi","s0_512_lo","c0_lo","rotr64_lo","c1_lo","c2_lo","s1_512_hi","s1_512_lo","g0_512_hi","shr64_hi","g0_512_lo","shr64_lo","g1_512_hi","g1_512_lo","sum64","sum64_hi","sum64_lo","sum64_4_hi","sum64_4_lo","sum64_5_hi","sum64_5_lo","_prepareBlock","c3_hi","c3_lo","ah","al","bh","cl","dl","eh","fh","fl","gh","gl","hl","c4_hi","c4_lo","T1_hi","T1_lo","T2_hi","T2_lo","p32","rotr32","isSurrogatePair","htonl","zero8","predResist","minEntropy","_reseed","reseedInterval","nonceEnc","seed","_hmac","kmac","reseed","addEnc","isLE","isSlowBuffer","createDefaultScrollbar","scrollbar","Indicator","durationProp","rAF","_prefixStyle","_vendor","_elementStyle","vendors","pointerEvent","lowerMargin","wrapperSize","speed","safariVersion","newclass","newX","newY","absDistX","absDistY","momentumX","momentumY","distanceX","distanceY","transitionType","matrix","_indicatorsMap","stepX","stepY","posX","posY","prevTime","acceleration","destX","destY","easingFn","destTime","hold","datepicker_getZindex","Datepicker","_curInst","_keyEvent","_disabledInputs","_datepickerShowing","_inDialog","_mainDivId","_inlineClass","_appendClass","_triggerClass","_dialogClass","_disableClass","_unselectableClass","_currentClass","_dayOverClass","regional","closeText","prevText","nextText","currentText","monthNames","monthNamesShort","dayNames","dayNamesShort","dayNamesMin","weekHeader","firstDay","isRTL","showMonthAfterYear","yearSuffix","showOn","showAnim","showOptions","appendText","buttonText","buttonImage","buttonImageOnly","hideIfNoPrevNext","navigationAsDateFormat","gotoCurrent","changeMonth","changeYear","yearRange","showOtherMonths","selectOtherMonths","showWeek","calculateWeek","iso8601Week","shortYearCutoff","beforeShowDay","beforeShow","onChangeMonthYear","onClose","numberOfMonths","showCurrentAtPos","stepMonths","stepBigMonths","altField","altFormat","constrainInput","showButtonPanel","autoSize","en","dpDiv","datepicker_bindHover","datepicker_handleMouseover","_isDisabledDatepicker","datepicker_instActive","inline","datepicker_extendRemove","spinnerModifer","_trigger","widgetUuid","widgetSlice","existingConstructor","basePrototype","proxiedPrototype","Widget","_createWidget","_proto","_childConstructors","_superApply","__super","__superApply","widgetEventPrefix","widgetFullName","childPrototype","bridge","inputIndex","inputLength","isPlainObject","isMethodCall","methodValue","jquery","pushStack","defaultElement","eventNamespace","hoverable","focusable","classesElementLookup","_on","_getCreateOptions","_setOptionDisabled","_getCreateEventData","_removeClass","curOption","_setOptions","_setOption","_setOptionClasses","classKey","currentElements","_classes","_toggleClass","processClassString","checkOption","_untrackClassesElement","inArray","_addClass","suppressDisabledCheck","delegateElement","handlerProxy","guid","_off","_delay","_hoverable","_focusable","focusin","focusout","Event","defaultEffect","effect","hasOptions","effectName","isEmptyObject","getOffsets","rpercent","parseCss","getDimensions","cachedScrollbarWidth","rhorizontal","rvertical","roffset","rposition","_position","scrollbarWidth","innerDiv","getScrollInfo","within","overflowX","isDocument","overflowY","hasOverflowX","scrollWidth","hasOverflowY","getWithinInfo","withinElement","hasOffset","atOffset","targetWidth","targetHeight","targetOffset","basePosition","scrollInfo","collision","horizontalOffset","verticalOffset","collisionPosition","elemWidth","elemHeight","collisionWidth","collisionHeight","myOffset","my","feedback","important","newOverRight","withinOffset","collisionPosLeft","overLeft","overRight","newOverBottom","collisionPosTop","overTop","overBottom","newOverLeft","newOverTop","flipfit","createPseudo","enableSelection","hasTabindex","mapName","focusableIfVisible","fieldset","closest","formResetMixin","_formResetHandler","_bindFormResetHandler","_unbindFormResetHandler","side","addBack","prevObject","mouseHandled","BACKSPACE","COMMA","DELETE","DOWN","END","ENTER","HOME","PAGE_DOWN","PAGE_UP","PERIOD","SPACE","TAB","UP","escapeSelector","selectorEscape","ancestor","siblings","scrollParent","includeHidden","excludeStaticParent","overflowRegex","tabbable","uniqueId","removeUniqueId","_mouseInit","_mouseDown","_mouseDestroy","_mouseMoveDelegate","_mouseUpDelegate","_mouseMoved","_mouseStarted","_mouseUp","_mouseDownEvent","btnIsLeft","elIsCancel","_mouseCapture","mouseDelayMet","_mouseDelayTimer","_mouseDistanceMet","_mouseDelayMet","_mouseStart","_mouseMove","ignoreMissingWhich","_mouseDrag","_mouseStop","allowDisconnected","safeActiveElement","safeBlur","appendTo","connectToSortable","cursorAt","grid","iframeFix","refreshPositions","revert","revertDuration","scrollSensitivity","scrollSpeed","snapMode","snapTolerance","_setPositionRelative","_setHandleClassName","_removeHandleClassName","destroyOnClear","_getHandle","_blurActiveElement","_blockFrames","iframeBlocks","_unblockFrames","_createHelper","_cacheHelperProportions","ddmanager","_cacheMargins","cssPosition","hasFixedAncestor","positionAbs","_refreshOffsets","originalPosition","_generatePosition","originalPageX","originalPageY","_adjustOffsetFromHelper","_setContainment","_clear","dropBehaviour","prepareOffsets","dragStart","_getParentOffset","_getRelativeOffset","noPropagation","_convertPositionTo","_uiHash","dropped","drop","dragStop","handleElement","helperIsFunction","helperProportions","_isRootNode","po","scrollIsRootNode","isUserScrollable","ce","relativeContainer","constrainPosition","co","cancelHelperRemoval","uiSortable","sortables","sortable","isOver","_storedCSS","_helper","innermostIntersecting","_intersectsWith","containerCache","_parent","fromOutside","_revert","_cursor","_opacity","scrollParentNotHidden","overflowOffset","scrolled","snapElements","$t","$o","inst","ts","bs","rs","snapping","release","snapItem","makeArray","_zIndex","accept","greedy","tolerance","over","proportions","isover","isout","_addToManager","droppables","_splice","_activate","_addActiveClass","_deactivate","_removeActiveClass","_over","_addHoverClass","_out","_removeHoverClass","_drop","childrenIntersection","droppable","isOverAxis","reference","toleranceMode","droppablesLoop","parentsUntil","greedyChild","parentInstance","intersects","uiBackCompat","hoverClass","alsoResize","animateDuration","animateEasing","autoHide","ui-resizable-se","ghost","handles","minHeight","minWidth","_num","_isNumber","_hasScroll","_aspectRatio","originalElement","_proportionallyResizeElements","resizable","elementIsWrapper","marginRight","marginBottom","originalResizeStyle","zoom","_proportionallyResize","_setupHandles","_handles","resizing","insertAfter","_removeHandles","hname","se","sw","ne","_renderAxis","padPos","padWrapper","curleft","curtop","_renderProxy","originalSize","sizeDiff","originalMousePosition","_propagate","smp","dx","dy","_change","_updatePrevProperties","_updateVirtualBoundaries","_updateRatio","_respectSize","_updateCache","_applyChanges","ista","soffseth","soffsetw","prevPosition","prevSize","forceAspectRatio","pMinWidth","pMaxWidth","pMinHeight","pMaxHeight","_vBoundaries","cpos","csize","ismaxw","ismaxh","isminw","isminh","dw","_getPaddingPlusBorderDimensions","paddings","prel","outerDimensions","elementOffset","cs","sp","oc","containerElement","containerOffset","containerPosition","parentData","containerSize","woset","hoset","isParent","isOffsetRelative","pRatio","cop","continueResize","ho","gridX","gridY","ox","oy","isMaxWidth","isMaxHeight","isMinWidth","isMinHeight","autoRefresh","selecting","unselected","unselecting","dragged","elementPos","selectees","selecteeOffset","startselected","opos","selectee","doSelect","connectWith","dropOnEmpty","forcePlaceholderSize","forceHelperSize","beforeStop","receive","_isOverAxis","_isFloating","overrideHandle","validHandle","reverting","_refreshItems","_removeCurrentsFromItems","noActivation","currentContainer","domPosition","_createPlaceholder","storedCursor","storedStylesheet","_storedOpacity","_storedZIndex","_preserveHelperProportions","containers","dragging","itemElement","intersection","lastPositionAbs","_intersectsWithPointer","_intersectsWithSides","_rearrange","_contactContainers","_noFinalSort","_getItemsAsjQuery","connected","dyClick","dxClick","isOverElementHeight","isOverElementWidth","isOverElement","forcePointerForContainers","floating","verticalDirection","horizontalDirection","_getDragVerticalDirection","_getDragHorizontalDirection","isOverBottomHalf","isOverRightHalf","_connectWith","addItems","queries","grep","targetData","_queries","queriesLength","fast","toleranceElement","refreshContainers","_createTrPlaceholder","sourceTr","targetTr","itemWithLeastDistance","posProperty","sizeProperty","nearBottom","innermostContainer","innermostIndex","hardRefresh","delayEvent","delayedTriggers","_inst","sender","ui-accordion-header","ui-accordion-header-collapsed","ui-accordion-content","collapsible","heightStyle","activeHeader","beforeActivate","hideProps","borderTopWidth","borderBottomWidth","showProps","prevShow","prevHide","_processPanels","panel","_createIcons","prependTo","_destroyIcons","_setupEvents","_keydown","currentIndex","toFocus","_eventHandler","_panelKeyDown","prevHeaders","prevPanels","panels","_findActive","headerId","panelId","aria-selected","aria-expanded","aria-hidden","keydown","activeChildren","clickedChildren","clickedIsActive","collapsing","toShow","toHide","oldHeader","oldPanel","newHeader","newPanel","_toggleComplete","adjust","boxSizing","fx","submenu","menus","role","activeMenu","mousedown .ui-menu-item","click .ui-menu-item","isPropagationStopped","mouseenter .ui-menu-item","previousFilter","actualTarget","mouseleave .ui-menu","keepActiveItem","notContained","collapseAll","_closeOnDocumentClick","submenus","previousPage","nextPage","filterTimer","_filterMenuItems","nextAll","newSubmenus","newItems","newWrappers","menu","submenuCaret","_isDivider","_itemRole","listbox","nested","focused","activeParent","_scrollIntoView","_close","_startOpening","borderTop","fromFocus","_open","currentMenu","startMenu","isFirstItem","prevAll","isLastItem","escapedCharacter","autoFocus","requestIndex","suppressKeyPress","suppressKeyPressRepeat","suppressInput","isTextarea","isMultiLine","_isContentEditable","valueMethod","isNewMenu","term","_searchTimeout","keypress","cancelBlur","_initSource","_appendTo","menufocus","liveRegion","menuselect","aria-live","aria-relevant","beforeunload","_isEventTargetInWidget","menuElement","_closeOnClickOutside","autocomplete","ajax","equalValues","menuVisible","modifierKey","_search","cancelSearch","__response","_normalize","_suggest","ul","_renderMenu","_resizeMenu","_renderItemData","_renderItem","editable","escapeRegex","noResults","controlgroupCornerRegex","onlyVisible","controlgroupLabel","checkboxradio","selectmenu","_enhance","_callChildMethod","childWidgets","_initWidgets","wrapAll","instanceOptions","_resolveClassesValues","widgetElement","_updateCornerClass","_buildSimpleOptions","_spinnerOptions","_buttonOptions","_checkboxradioOptions","_selectmenuOptions","ui-selectmenu-button-open","ui-selectmenu-button-closed","ui-checkboxradio-label","ui-checkboxradio-icon","_readType","originalLabel","_updateLabel","_updateIcon","_getRadioGroup","nameSelector","_toggleClasses","iconSpace","ui-button","iconPosition","showLabel","hasTitle","keyup","_updateTooltip","displayBlock","_attachIcon","_attachIconSpace","newShowLabel","newIcon","secondary","buttonset","controlgroup","markerClassName","maxRows","_widgetDatepicker","setDefaults","_attachDatepicker","_newInst","_connectDatepicker","_inlineDatepicker","drawMonth","drawYear","_attachments","_doKeyDown","_doKeyPress","_doKeyUp","_autoSize","_disableDatepicker","_get","_showDatepicker","alt","_lastInput","_hideDatepicker","findMax","maxI","_formatDate","divSpan","_setDate","_getDefaultDate","_updateDatepicker","_updateAlternate","_dialogDatepicker","browserWidth","browserHeight","_dialogInst","_dialogInput","blockUI","_destroyDatepicker","$target","_enableDatepicker","_getInst","_optionDatepicker","_getDateDatepicker","_getMinMaxDate","_changeDatepicker","_refreshDatepicker","_setDateDatepicker","noDefault","_setDateFromField","_getDate","dateStr","sel","_selectDay","_adjustDate","_clearDate","_gotoToday","chr","_possibleChars","lastVal","_getFormatConfig","beforeShowSettings","isFixed","_findPos","_checkOffset","_shouldFocusInput","_generateHTML","_attachHandlers","origyearshtml","numMonths","_getNumberOfMonths","cols","activeCell","yearshtml","dpWidth","dpHeight","inputWidth","inputHeight","viewWidth","viewHeight","_tidyDialog","unblockUI","_checkExternalClick","_adjustInstDate","currentDay","currentMonth","currentYear","_notifyChange","_selectMonthYear","_selectDate","noWeekends","checkDate","iFormat","dim","iValue","shortYearCutoffTemp","doy","lookAhead","getNumber","isDoubled","shortNames","longNames","pair","checkLiteral","_ticksTo1970","_getDaysInMonth","_daylightSavingAdjust","ATOM","COOKIE","ISO_8601","RFC_822","RFC_850","RFC_1036","RFC_1123","RFC_2822","RSS","TICKS","TIMESTAMP","W3C","formatName","dates","_restrictMinMax","_determineDate","offsetNumeric","offsetString","noChange","origMonth","origYear","selectDay","selectMonth","selectYear","maxDraw","gotoDate","buttonPanel","dow","selectedDate","cornerClass","calender","daysInMonth","leadDays","curRows","printDate","dRow","daySettings","otherMonth","unselectable","tempDate","isMultiMonth","_canAdjustMonth","_isInRange","_generateMonthYearHeader","_getFirstDayOfMonth","inMinYear","inMaxYear","thisYear","determineYear","endYear","monthHtml","minMax","curYear","curMonth","yearSplit","minYear","maxYear","otherArgs","ui-dialog","ui-dialog-titlebar","closeOnEscape","topOffset","beforeClose","resizeStart","resizeStop","sizeRelatedOptions","resizableRelatedOptions","originalCss","originalTitle","_createWrapper","uiDialog","_createTitlebar","_createButtonPane","_makeDraggable","_makeResizable","_isOpen","_trackFocus","_untrackInstance","_destroyOverlay","_focusedElement","opener","moveToTop","_moveToTop","zIndices","zIndexMax","_focusTabbable","_size","_createOverlay","_makeFocusTarget","hasFocus","uiDialogButtonPane","uiDialogTitlebarClose","_keepFocus","checkFocus","tabbables","aria-describedby","uiDialogTitle","uiDialogTitlebar","_title","aria-labelledby","uiButtonSet","_createButtons","buttonOptions","filteredUi","resizeHandles","_minHeight","_trackingInstances","resizableOptions","isDraggable","isResizable","nonContentHeight","minContentHeight","maxContentHeight","_allowInteraction","isOpening","overlays","dialog","dialogClass","ui-progressbar","ui-progressbar-value","ui-progressbar-complete","_constrainedValue","aria-valuemin","valueDiv","_refreshValue","indeterminate","_percentage","percentage","overlayDiv","aria-valuemax","aria-valuenow","selectmenuId","_drawButton","_drawMenu","_rendered","menuItems","_parseOption","tabindex","aria-autocomplete","aria-owns","aria-haspopup","buttonItem","_renderButtonItem","_resizeButton","_buttonEvents","_refreshMenu","menuWrap","menuInstance","ui-menu","_setSelection","_select","focusIndex","_getSelectedItem","_parseOptions","_setAria","_toggleAttr","_documentClick","menuWidget","_setText","currentOptgroup","removeAllRanges","rangeCount","getRangeAt","createRange","_selectFocusedItem","oldIndex","aria-activedescendant","ui-slider","ui-slider-handle","ui-slider-range","orientation","slide","numPages","_keySliding","_mouseSliding","_animateOff","_handleIndex","_detectOrientation","_calculateNewMax","_createRange","_createHandles","handleCount","existingHandles","_valueMin","_handleEvents","normValue","closestHandle","mouseOverHandle","elementSize","_normValueFromMouse","_valueMax","thisDistance","_lastChangedValue","_clickOffset","_slide","_stop","pixelTotal","pixelMouse","percentMouse","valueTotal","valueMouse","_trimAlignValue","uiHash","handleIndex","_hasMultipleValues","otherVal","_values","valsLength","_refreshRange","valModStep","alignValue","aboveMin","_precision","_precisionOf","lastValPercent","valPercent","valueMin","valueMax","oRange","curVal","ui-spinner","ui-spinner-down","ui-spinner-up","culture","incremental","numberFormat","mousewheel","spinning","_spin","mousewheelTimer","mousedown .ui-spinner-button","_repeat","mouseup .ui-spinner-button","mouseenter .ui-spinner-button","mouseleave .ui-spinner-button","uiSpinner","_adjustValue","_increment","prevValue","_parse","_format","Globalize","allowAny","stepUp","_stepUp","stepDown","_stepDown","_uiSpinnerHtml","_buttonHtml","ui-tabs","ui-tabs-nav","ui-tabs-panel","ui-tabs-tab","beforeLoad","_isLocal","rhash","anchorUrl","locationUrl","_processTabs","_initialActive","tabs","locationHash","tab","_getPanelForTab","_tabKeydown","focusedTab","goingForward","_handlePageNav","activating","_focusNextTab","_panelKeydown","_findNextTab","constrain","lastTabIndex","_setupHeightStyle","_sanitizeSelector","lis","tablist","prevTabs","prevAnchors","_getList","anchorId","originalAriaControls","_createPanel","aria-controls","oldTab","newTab","_getIndex","jqXHR","_ajaxSettings","beforeSend","ajaxSettings","ui-tooltip","_addDescribedBy","describedby","_removeDescribedBy","mouseover","disabledTitles","tooltipData","_updateContent","blurEvent","_registerCloseHandlers","contentOption","positionOption","delayedShow","a11yContent","_find","_tooltip","fakeEvent","_removeTooltip","closing","hiding","tooltipClass","dataSpace","dataSpaceStyle","dataSpaceAnimated","allowEmpty","propTypes","stringParse","_rgba","stringParsers","spaceName","transparent","hue2rgb","stepHooks","rplusequals","execResult","byte","support","supportElem","same","localCache","isCache","_space","startColor","startValue","endValue","blend","opaque","toRgbaString","toHslaString","toHexString","includeAlpha","vtype","_hsla","hooks","cssHooks","colorInit","getElementStyles","styleDifference","oldStyle","newStyle","shorthandStyles","classAnimationActions","borderBottom","borderLeft","borderRight","setAttr","animateClass","applyClassChange","animated","baseClass","allAnimations","styleInfo","dfd","classNames","switchClass","_normalizeArguments","speeds","standardAnimationOption","parseClip","clipRegex","createWrapper","float","background","removeWrapper","scaledDimensions","clipToBox","queueLength","dequeue","saveStyle","restoreStyle","getBaseline","createPlaceholder","dataKey","cleanUp","setTransition","cssUnit","cleanup","defaultMode","effectMethod","queueName","prefilter","normalizedMode","cssClip","clipObj","transfer","targetFixed","fixTop","fixLeft","startPosition","clipInit","baseEasings","Sine","Circ","Elastic","Back","Bounce","pow2","easeIn","upAnim","downAnim","refValue","anims","motion","queuelen","both","oppositeMotion","childComplete","pieces","cells","animComplete","mx","overflow","horizFirst","animation1","animation2","backgroundImage","baseline","cProps","vProps","hProps","childOriginal","childFrom","childTo","showhide","animateTo","positiveMotion","startClip","startRef","simulateMouseEvent","simulatedType","simulatedEvent","touchHandled","mouseProto","_touchStart","_touchMoved","_touchMove","_touchEnd","noGlobal","DOMEval","preservedScriptAttributes","toType","class2type","fcssescape","asCodePoint","winnow","qualifier","sibling","createOptions","rnothtmlwhite","Identity","Thrower","adoptValue","noValue","fcamelCase","_all","rmsPrefix","rdashAlpha","Data","rbrace","dataAttr","rmultiDash","dataUser","adjustCSS","valueParts","tween","adjusted","maxIterations","cssNumber","initialInUnit","rcssNum","getDefaultDisplay","defaultDisplayMap","showHide","dataPriv","isHiddenWithinTree","setGlobalEval","refElements","buildFragment","scripts","ignored","attached","rhtml","rtagName","htmlPrefilter","isAttached","rscriptType","returnTrue","returnFalse","origFn","leverageNative","isSetup","isTrigger","special","delegateType","manipulationTarget","disableScript","restoreScript","cloneCopyEvent","pdataOld","udataOld","udataCur","access","fixInput","rcheckableType","domManip","flat","hasScripts","iNoClone","valueIsFunction","checkClone","rchecked","_evalUrl","noModule","rcleanScript","curCSS","isCustomProp","rcustomProp","getStyles","rtrimCSS","pixelBoxStyles","rnumnonpx","rboxStyle","addGetHookIf","conditionFn","vendorPropName","capName","cssPrefixes","emptyStyle","finalPropName","final","cssProps","vendorProps","setPositiveNumber","_elem","boxModelAdjustment","isBorderBox","computedVal","marginDelta","cssExpand","getWidthOrHeight","boxSizingNeeded","boxSizingReliable","valueIsBorderBox","offsetProp","reliableTrDimensions","getClientRects","Tween","schedule","inProgress","createFxNow","fxNow","genFx","includeWidth","createTween","tweeners","defaultPrefilter","oldfire","propTween","restoreDisplay","isBox","anim","dataShow","_queueHooks","unqueued","always","rfxtypes","propFilter","specialEasing","stopped","prefilters","currentTime","tweens","notifyWith","resolveWith","originalProperties","originalOptions","gotoEnd","rejectWith","stripAndCollapse","getClass","classesToArray","buildParams","traditional","rbracket","addToPrefiltersOrTransports","dataTypeExpression","dataTypes","inspectPrefiltersOrTransports","inspected","prefilterOrFactory","dataTypeOrTransport","seekingTransport","ajaxExtend","flatOptions","ajaxHandleResponses","responses","ct","finalDataType","firstDataType","mimeType","getResponseHeader","converters","ajaxConvert","conv2","conv","responseFields","dataFilter","fnToString","ObjectFunctionString","rhtmlSuffix","even","copyIsArray","isXMLDoc","namespaceURI","docElem","invert","callbackInverse","callbackExpect","bup","rcssescape","preferredDoc","pushNative","nid","newSelector","newContext","setDocument","documentIsHTML","rquickExpr","nonnativeSelectorCache","rbuggyQSA","rdescend","rleadingCombinator","rsibling","testContext","tokenize","toSelector","qsaError","createCache","Expr","cacheLength","markFunction","createInputPseudo","createButtonPseudo","createDisabledPseudo","inDisabledFieldset","createPositionalPseudo","matchIndexes","subWindow","unloadHandler","getById","disconnectedMatch","cssHas","attrId","runescape","funescape","getAttributeNode","CLASS","booleans","sortOrder","hasDuplicate","sortDetached","sortInput","setFilters","parseOnly","soFar","preFilters","tokenCache","preFilter","rcomma","matchExpr","addCombinator","combinator","checkNonElements","doneName","xml","oldCache","outerCache","newCache","dirruns","elementMatcher","multipleContexts","contexts","condense","unmatched","newUnmatched","mapped","setMatcher","postFilter","postFinder","postSelector","matcherOut","preMap","postMap","preexisting","matcherIn","matcherFromTokens","checkContext","leadingRelative","implicitRelative","matchContext","matchAnyContext","outermostContext","matcherFromGroupMatchers","elementMatchers","setMatchers","bySet","byElement","superMatcher","outermost","matchedCount","setMatched","contextBackup","dirrunsUnique","uniqueSort","compilerCache","needsContext","pseudos","rwhitespace","rpseudo","ridentifier","ATTR","PSEUDO","CHILD","rinputs","rheader","nonHex","high","attrHandle","duplicates","sortStable",">","excess","unquoted","nodeNameSelector","expectedNodeName","_argument","simple","forward","ofType","nodeIndex","pseudo","elemLang","_matchIndexes","image","isXML","selectors","rneedsContext","rsingleTag","rootjQuery","parseHTML","rparentsprev","guaranteedUnique","targets","nextUntil","prevUntil","Callbacks","firing","memory","locked","firingIndex","stopOnFalse","fireWith","tuples","pipe","newDefer","mightThrow","maxDepth","exceptionHook","getErrorHook","getStackHook","stateString","singleValue","resolveContexts","resolveValues","updateFunc","rerrorNames","asyncError","readyException","readyList","readyWait","doScroll","chainable","emptyGet","bulk","acceptData","owner","_removeData","startLength","clearQueue","pnum","composed","noCloneChecked","rtypenamespace","handleObjIn","eventHandle","handleObj","namespaces","origType","elemData","triggered","dispatch","bindType","delegateCount","setup","mappedTypes","origCount","teardown","handlerQueue","delegateTarget","preDispatch","rnamespace","postDispatch","matchedHandlers","matchedSelectors","addProp","noBubble","isSimulated","bubbles","cancelable","eventPhase","pointerId","targetTouches","toElement","focusMappedHandler","simulate","attaches","dataHolder","rnoInnerhtml","dataAndEvents","deepDataAndEvents","srcElements","destElements","inPage","computeStyleTests","divStyle","pixelPositionVal","reliableMarginLeftVal","roundPixelMeasures","pixelBoxStylesVal","boxSizingReliableVal","scrollboxSizeVal","measure","reliableTrDimensionsVal","backgroundClip","clearCloneStyle","pixelPosition","reliableMarginLeft","scrollboxSize","trChild","trStyle","rdisplayswap","cssShow","cssNormalTransform","letterSpacing","fontWeight","borderImageSlice","columnCount","flexGrow","flexShrink","gridArea","gridColumn","gridColumnEnd","gridColumnStart","gridRow","gridRowEnd","gridRowStart","orphans","widows","fillOpacity","floodOpacity","stopOpacity","strokeMiterlimit","strokeOpacity","origName","scrollboxSizeBuggy","propHooks","eased","swing","rrun","tweener","opt","fadeTo","optall","doAnimation","stopQueue","timers","cssFn","slideDown","slideUp","slideToggle","fadeIn","fadeOut","fadeToggle","slow","checkOn","optSelected","radioValue","boolHook","nType","attrHooks","attrNames","lowercaseName","rfocusable","rclickable","removeProp","propFix","class","curValue","finalValue","stateVal","isValidValue","rreturn","valHooks","optionSet","rquery","parseXML","parserErrorElem","DOMParser","rfocusMorph","stopPropagationCallback","onlyHandlers","bubbleType","ontype","lastElement","eventPath","rCRLF","rsubmitterTypes","rsubmittable","valueOrFunction","serializeArray","r20","rantiCache","rheaders","rlocalProtocol","rnoContent","rprotocol","allTypes","originAnchor","lastModified","etag","processData","accepts","* text","text html","text json","text xml","ajaxSetup","ajaxPrefilter","ajaxTransport","nativeStatusText","modified","timeoutTimer","responseHeadersString","ifModified","cacheURL","callbackContext","fireGlobals","globalEventContext","completeDeferred","responseHeaders","urlAnchor","uncached","requestHeaders","requestHeadersNames","strAbort","overrideMimeType","finalText","crossDomain","hasContent","getJSON","getScript","text script","firstElementChild","wrapInner","htmlIsFunction","xhrSuccessStatus","1223","xhrSupported","cors","xhrFields","scriptAttrs","charset","scriptCharset","oldCallbacks","rjsonp","jsonp","jsonpCallback","originalSettings","overwritten","responseContainer","jsonProp","keepScripts","parentOffset","Height","Width","defaultExtra","funcName","undelegate","fnOver","fnOut","holdReady","parseJSON","_jQuery","_$","registerBarcode","barcodes","API","_errorHandler","wrapBarcodeCall","_merge2","_optionsFromStrings2","Encoder","_encodings","encoder","_exceptions","InvalidInputException","_linearizeEncodings2","autoSelectBarcode","_barcodes2","renderProperties","encodings","_fixOptions2","Renderer","afterRender","_barcodes","_merge","_linearizeEncodings","_fixOptions","_getRenderProperties","_getRenderProperties2","_optionsFromStrings","_ErrorHandler","_ErrorHandler2","_defaults2","_renderProperties","getModule","blank","zeroes","renderProperty","NoElementException","_classCallCheck","Barcode","_possibleConstructorReturn","ReferenceError","_inherits","subClass","superClass","_createClass","protoProps","staticProps","_Barcode2","_Barcode3","_constants","CODE128","_Barcode","startSet","SET_BY_CODE","shouldEncodeAsEan128","FNC1","encodingResult","getBar","checksum","MODULO","STOP","isEAN128","ean128","BARS","SET_A","SET_B","nextCode","nextSet","SWAP","SHIFT","correctIndex","_CODE2","_CODE3","CODE128A","_CODE","A_START_CHAR","A_CHARS","CODE128B","B_START_CHAR","B_CHARS","CODE128C","C_START_CHAR","C_CHARS","_auto","_auto2","CODE128AUTO","autoSelectFromAB","isA","untilC","autoSelectFromC","cMatch","matchSetC","matchSetALength","matchSetBLength","newString","cLength","_SET_BY_CODE","SET_C","START_A","START_B","START_C","101","100","99","_CODE128_AUTO","_CODE128_AUTO2","_CODE128A","_CODE128A2","_CODE128B","_CODE128B2","_CODE128C","_CODE128C2","getEncoding","getBinary","characterValue","getCharacter","characters","mod43checksum","CODE39","mod43","_encoder","_encoder2","EAN","guardHeight","textMargin","encodeFlat","encodeGuarded","textOptions","guardOptions","SIDE_BIN","leftEncode","leftText","MIDDLE_BIN","rightEncode","rightText","_EAN2","_EAN3","EAN13","_EAN","lastChar","EAN13_STRUCTURE","EAN2","EAN2_STRUCTURE","EAN5","EAN5_STRUCTURE","EAN8","UPC","flatEncoding","guardedEncoding","expandToUPCA","middleDigits","numberSystem","lastUpcE","expansion","EXPANSIONS","digitIndex","_UPC","PARITIES","UPCE","upcA","encodeMiddleDigits","checkDigit","parity","BINARIES","_EAN4","_EAN5","_EAN6","_EAN7","_EAN8","_UPC2","_UPCE","_UPCE2","GenericBarcode","ITF","_this2","encodePair","START_BIN","END_BIN","_ITF2","_ITF3","ITF14","_ITF","_ITF4","addZeroes","MSI","bin","_MSI2","_MSI3","_checksums","MSI10","_MSI","mod10","MSI1010","MSI11","mod11","MSI1110","weights","_MSI4","_MSI5","_MSI6","_MSI7","_MSI8","_MSI9","_MSI10","codabar","getEncodings",":","_EAN_UPC","_pharmacode","_codabar","_GenericBarcode","pharmacode","ErrorHandler","handleCatch","_Error","symbology","InvalidElementException","_Error2","_Error3","_this3","fixOptions","getOptionsFromElement","getRenderProperties","querySelectedRenderProperties","HTMLCanvasElement","HTMLImageElement","newCanvasRenderProperties","SVGElement","_getOptionsFromElement2","_renderers2","SVGRenderer","CanvasRenderer","ObjectRenderer","imgElement","_getOptionsFromElement","_renderers","linearizeEncodings","linearEncodings","_extends","replaceObj","optionsFromStrings","intOptions","intOption","fontOptions","textPosition","_shared","prepareCanvas","encodingOptions","drawCanvasBarcode","drawCanvasText","moveCanvasDrawing","restoreCanvas","calculateEncodingAttributes","getTotalWidthOfEncodings","getMaximumHeightOfEncodings","yFrom","barcodePadding","_canvas","_canvas2","_svg","_svg2","_object","_object2","getEncodingHeight","getBarcodePadding","barcodeWidth","barcodeOptions","messureText","measureTextResult","svgns","svg","xmlDocument","currentX","prepareSVG","createGroup","setGroupOptions","drawSvgBarcode","drawSVGText","setSvgAttributes","drawRect","textElem","createElementNS","arrayAggregator","accumulator","arrayEach","arrayEachRight","resIndex","baseIndexOf","arrayIncludesWith","arrayMap","arrayPush","initAccum","asciiToArray","asciiWords","reAsciiWord","baseFindKey","eachFunc","baseFindIndex","fromRight","strictIndexOf","baseIsNaN","baseIndexOfWith","baseMean","baseSum","NAN","baseProperty","basePropertyOf","baseReduce","baseSortBy","comparer","baseTimes","baseToPairs","baseTrim","trimmedEndIndex","reTrimStart","baseUnary","baseValues","cacheHas","charsStartIndex","strSymbols","chrSymbols","charsEndIndex","countHolders","escapeStringChar","stringEscapes","hasUnicode","reHasUnicode","hasUnicodeWord","reHasUnicodeWord","iteratorToArray","mapToArray","overArg","replaceHolders","PLACEHOLDER","setToArray","setToPairs","strictLastIndexOf","stringSize","unicodeSize","asciiSize","stringToArray","unicodeToArray","reWhitespace","reUnicode","unicodeWords","reUnicodeWord","LARGE_ARRAY_SIZE","CORE_ERROR_TEXT","FUNC_ERROR_TEXT","INVALID_TEMPL_VAR_ERROR_TEXT","HASH_UNDEFINED","MAX_MEMOIZE_SIZE","CLONE_DEEP_FLAG","CLONE_FLAT_FLAG","CLONE_SYMBOLS_FLAG","COMPARE_PARTIAL_FLAG","COMPARE_UNORDERED_FLAG","WRAP_BIND_FLAG","WRAP_BIND_KEY_FLAG","WRAP_CURRY_BOUND_FLAG","WRAP_CURRY_FLAG","WRAP_CURRY_RIGHT_FLAG","WRAP_PARTIAL_FLAG","WRAP_PARTIAL_RIGHT_FLAG","WRAP_ARY_FLAG","WRAP_REARG_FLAG","WRAP_FLIP_FLAG","DEFAULT_TRUNC_LENGTH","DEFAULT_TRUNC_OMISSION","HOT_COUNT","HOT_SPAN","LAZY_FILTER_FLAG","LAZY_MAP_FLAG","LAZY_WHILE_FLAG","INFINITY","MAX_ARRAY_LENGTH","MAX_ARRAY_INDEX","HALF_MAX_ARRAY_LENGTH","wrapFlags","argsTag","arrayTag","asyncTag","boolTag","dateTag","domExcTag","errorTag","funcTag","genTag","mapTag","numberTag","nullTag","objectTag","promiseTag","proxyTag","regexpTag","setTag","stringTag","symbolTag","undefinedTag","weakMapTag","weakSetTag","arrayBufferTag","dataViewTag","float32Tag","float64Tag","int8Tag","int16Tag","int32Tag","uint8Tag","uint8ClampedTag","uint16Tag","uint32Tag","reEmptyStringLeading","reEmptyStringMiddle","reEmptyStringTrailing","reEscapedHtml","reUnescapedHtml","reHasEscapedHtml","reHasUnescapedHtml","reEscape","reEvaluate","reInterpolate","reIsDeepProp","reIsPlainProp","rePropName","reRegExpChar","reHasRegExpChar","reWrapComment","reWrapDetails","reSplitDetails","reForbiddenIdentifierChars","reEscapeChar","reEsTemplate","reFlags","reIsBadHex","reIsBinary","reIsHostCtor","reIsOctal","reIsUint","reLatin","reNoMatch","reUnescapedString","rsAstralRange","rsComboMarksRange","reComboHalfMarksRange","rsComboSymbolsRange","rsComboRange","rsDingbatRange","rsLowerRange","rsMathOpRange","rsNonCharRange","rsPunctuationRange","rsSpaceRange","rsUpperRange","rsVarRange","rsBreakRange","rsApos","rsAstral","rsBreak","rsCombo","rsDigits","rsDingbat","rsLower","rsMisc","rsFitz","rsModifier","rsNonAstral","rsRegional","rsSurrPair","rsUpper","rsZWJ","rsMiscLower","rsMiscUpper","rsOptContrLower","rsOptContrUpper","reOptMod","rsOptVar","rsOptJoin","rsOrdLower","rsOrdUpper","rsSeq","rsEmoji","rsSymbol","reApos","reComboMark","contextProps","templateCounter","typedArrayTags","cloneableTags","deburredLetters","À","Á","Â","Ã","Ä","Å","à","á","â","ã","ä","å","Ç","ç","Ð","ð","È","É","Ê","Ë","è","é","ê","ë","Ì","Í","Î","Ï","ì","í","î","ï","Ñ","ñ","Ò","Ó","Ô","Õ","Ö","Ø","ò","ó","ô","õ","ö","ø","Ù","Ú","Û","Ü","ù","ú","û","ü","Ý","ý","ÿ","Æ","æ","Þ","þ","ß","Ā","Ă","Ą","ā","ă","ą","Ć","Ĉ","Ċ","Č","ć","ĉ","ċ","č","Ď","Đ","ď","đ","Ē","Ĕ","Ė","Ę","Ě","ē","ĕ","ė","ę","ě","Ĝ","Ğ","Ġ","Ģ","ĝ","ğ","ġ","ģ","Ĥ","Ħ","ĥ","ħ","Ĩ","Ī","Ĭ","Į","İ","ĩ","ī","ĭ","į","ı","Ĵ","ĵ","Ķ","ķ","ĸ","Ĺ","Ļ","Ľ","Ŀ","Ł","ĺ","ļ","ľ","ŀ","ł","Ń","Ņ","Ň","Ŋ","ń","ņ","ň","ŋ","Ō","Ŏ","Ő","ō","ŏ","ő","Ŕ","Ŗ","Ř","ŕ","ŗ","ř","Ś","Ŝ","Ş","Š","ś","ŝ","ş","š","Ţ","Ť","Ŧ","ţ","ť","ŧ","Ũ","Ū","Ŭ","Ů","Ű","Ų","ũ","ū","ŭ","ů","ű","ų","Ŵ","ŵ","Ŷ","ŷ","Ÿ","Ź","Ż","Ž","ź","ż","ž","Ĳ","ĳ","Œ","œ","ŉ","ſ","htmlEscapes","&","htmlUnescapes","&#39;"," "," ","freeParseFloat","freeParseInt","freeGlobal","freeSelf","freeExports","freeModule","moduleExports","freeProcess","nodeUtil","nodeIsArrayBuffer","nodeIsDate","nodeIsMap","isMap","nodeIsRegExp","nodeIsSet","isSet","nodeIsTypedArray","deburrLetter","escapeHtmlChar","unescapeHtmlChar","runInContext","lodash","isObjectLike","LazyWrapper","LodashWrapper","wrapperClone","baseLodash","chainAll","__wrapped__","__actions__","__chain__","__index__","__values__","__dir__","__filtered__","__iteratees__","__takeCount__","__views__","lazyClone","copyArray","lazyReverse","lazyValue","isArr","getView","iteratees","iterLength","takeCount","nativeMin","baseWrapperValue","iterIndex","hashClear","__data__","nativeCreate","hashDelete","hashGet","hashHas","hashSet","ListCache","listCacheClear","listCacheDelete","assocIndexOf","listCacheGet","listCacheHas","listCacheSet","MapCache","mapCacheClear","Map","mapCacheDelete","getMapData","mapCacheGet","mapCacheHas","mapCacheSet","SetCache","setCacheAdd","setCacheHas","Stack","stackClear","stackDelete","stackGet","stackHas","stackSet","pairs","arrayLikeKeys","isArg","isArguments","isBuff","isType","skipIndexes","isIndex","arraySample","baseRandom","arraySampleSize","shuffleSelf","baseClamp","arrayShuffle","assignMergeValue","baseAssignValue","assignValue","objValue","baseAggregator","baseEach","baseAssign","copyObject","baseAssignIn","keysIn","baseAt","paths","baseClone","bitmask","customizer","isDeep","isFlat","isFull","initCloneArray","isFunc","cloneBuffer","initCloneObject","copySymbolsIn","copySymbols","initCloneByTag","subValue","keysFunc","getAllKeysIn","baseConforms","baseConformsTo","baseDelay","baseDifference","isCommon","valuesLength","valuesIndex","baseEvery","baseExtremum","baseFill","baseFilter","baseFlatten","isStrict","isFlattenable","baseForOwn","baseFor","baseForOwnRight","baseForRight","baseFunctions","baseGet","castPath","toKey","baseGetAllKeys","symbolsFunc","baseGetTag","symToStringTag","getRawTag","baseGt","baseHas","baseHasIn","baseInRange","nativeMax","baseIntersection","othLength","othIndex","baseInverter","baseInvoke","baseIsArguments","baseIsArrayBuffer","baseIsDate","baseIsEqual","baseIsEqualDeep","equalFunc","objIsArr","othIsArr","objTag","othTag","objIsObj","othIsObj","isSameTag","equalArrays","equalByTag","objIsWrapped","othIsWrapped","objUnwrapped","othUnwrapped","equalObjects","baseIsMap","baseIsMatch","matchData","noCustomizer","srcValue","baseIsNative","isMasked","reIsNative","toSource","baseIsRegExp","baseIsSet","baseIsTypedArray","isLength","baseIteratee","baseMatchesProperty","baseMatches","baseKeys","isPrototype","nativeKeys","baseKeysIn","nativeKeysIn","isProto","baseLt","baseMap","getMatchData","matchesStrictComparable","isKey","isStrictComparable","hasIn","baseMerge","srcIndex","baseMergeDeep","safeGet","mergeFunc","isTyped","isArrayLikeObject","cloneTypedArray","toPlainObject","baseNth","baseOrderBy","orders","getIteratee","criteria","compareMultiple","basePick","basePickBy","baseSet","basePropertyDeep","basePullAll","basePullAt","baseUnset","nativeFloor","nativeRandom","baseRange","nativeCeil","baseRepeat","baseRest","setToString","overRest","baseSample","baseSampleSize","baseShuffle","baseSlice","baseSome","baseSortedIndex","retHighest","baseSortedIndexBy","valIsNaN","valIsNull","valIsSymbol","valIsUndefined","othIsDefined","othIsNull","othIsReflexive","othIsSymbol","setLow","baseSortedUniq","baseToNumber","baseToString","symbolToString","baseUniq","seenIndex","baseUpdate","updater","baseWhile","isDrop","baseXor","baseZipObject","assignFunc","castArrayLikeObject","castFunction","stringToPath","castSlice","cloneArrayBuffer","arrayBuffer","cloneDataView","dataView","cloneRegExp","cloneSymbol","symbol","symbolValueOf","typedArray","compareAscending","valIsDefined","valIsReflexive","objCriteria","othCriteria","ordersLength","composeArgs","partials","holders","isCurried","argsIndex","argsLength","holdersLength","leftIndex","leftLength","rangeLength","isUncurried","composeArgsRight","holdersIndex","rightIndex","rightLength","isNew","getSymbolsIn","createAggregator","initializer","createAssigner","assigner","isIterateeCall","createBaseEach","createBaseFor","createBind","isBind","createCtor","createCaseFirst","createCompounder","deburr","thisBinding","baseCreate","createCurry","arity","getHolder","createRecurry","createHybrid","createFind","findIndexFunc","createFlow","flatRest","funcs","prereq","thru","getFuncName","isLaziable","plant","partialsRight","holdersRight","argPos","ary","holdersCount","newHolders","isBindKey","reorder","isFlip","isAry","createInverter","toIteratee","createMathOperation","createOver","arrayFunc","createPadding","charsLength","createPartial","toFinite","createRelationalOperation","wrapFunc","isCurry","newHoldersRight","newPartials","newPartialsRight","newData","setWrapToString","createRound","nativeIsFinite","createToPairs","createWrap","mergeData","baseSetData","customDefaultsAssignIn","objectProto","customDefaultsMerge","customOmitClone","isPartial","arrStacked","othStacked","arrValue","othValue","compared","objProps","objLength","othProps","objStacked","skipCtor","objCtor","othCtor","realNames","otherFunc","isKeyable","getNative","isOwn","unmasked","nativeObjectToString","transforms","getWrapDetails","hasPath","hasFunc","getPrototype","insertWrapDetails","spreadableSymbol","maskSrcKey","memoizeCapped","memoize","srcBitmask","newBitmask","oldArray","updateWrapDetails","shortOut","lastCalled","stamp","nativeNow","funcToString","dropRight","dropRightWhile","dropWhile","findLastIndex","flattenDeep","flattenDepth","fromPairs","nativeJoin","pullAll","pullAllBy","pullAllWith","nativeReverse","sortedIndex","sortedIndexBy","sortedIndexOf","sortedLastIndex","sortedLastIndexBy","sortedLastIndexOf","sortedUniq","sortedUniqBy","take","takeRight","takeRightWhile","takeWhile","uniq","uniqBy","uniqWith","unzip","unzipWith","zipObject","zipObjectDeep","wrapperChain","wrapperCommit","wrapperNext","wrapperToIterator","wrapperPlant","wrapperReverse","wrapperValue","flatMapDeep","flatMapDepth","baseEachRight","curry","curryRight","invokeFunc","lastArgs","lastThis","lastInvokeTime","leadingEdge","timerId","timerExpired","remainingWait","timeSinceLastCall","lastCallTime","timeSinceLastInvoke","timeWaiting","maxing","maxWait","shouldInvoke","trailingEdge","debounced","isInvoking","memoized","Cache","rest","spread","castArray","cloneWith","cloneDeep","cloneDeepWith","conformsTo","isEqual","isEqualWith","isMatchWith","isMaskable","isNil","objectCtorString","isWeakMap","isWeakSet","symIterator","toSafeInteger","findLastKey","forIn","forInRight","forOwn","forOwnRight","functionsIn","mapKeys","mapValues","omitBy","pickBy","setWith","isArrLike","updateWith","valuesIn","upperFirst","escapeRegExp","strLength","nativeParseInt","templateSettings","assignInWith","isEscaping","isEvaluating","imports","importsKeys","importsValues","reDelimiters","evaluate","escapeValue","interpolateValue","esTemplateValue","evaluateValue","attempt","toLower","toUpper","omission","newEnd","unescape","cond","conforms","defaultTo","matchesProperty","methodNames","oldDash","nthArg","propertyOf","stubArray","stubFalse","stubObject","stubString","stubTrue","idCounter","maxBy","mean","meanBy","minBy","sumBy","arrayProto","funcProto","coreJsData","isConcatSpreadable","ctxClearTimeout","ctxNow","ctxSetTimeout","nativeGetSymbols","nativeIsBuffer","Set","WeakMap","metaMap","dataViewCtorString","mapCtorString","promiseCtorString","setCtorString","weakMapCtorString","symbolProto","baseSetToString","castRest","ctorString","subString","difference","differenceBy","differenceWith","intersectionBy","intersectionWith","pull","pullAt","unionBy","unionWith","without","xorBy","xorWith","zipWith","wrapperAt","countBy","invokeMap","keyBy","partition","bindKey","overArgs","funcsLength","rearg","assignIn","assignWith","propsIndex","propsLength","defaultsDeep","mergeWith","invertBy","toPairs","toPairsIn","kebabCase","lowerCase","lowerFirst","snakeCase","startCase","upperCase","bindAll","flow","flowRight","methodOf","overEvery","overSome","rangeRight","augend","addend","dividend","multiplier","multiplicand","minuend","subtrahend","entriesIn","extendWith","eachRight","takeName","dropName","checkIteratee","isTaker","lodashFunc","retUnwrapped","isLazy","useLazy","isHybrid","isUnwrapped","onlyLazy","chainName","commit","installedModules","./node_modules/@babel/runtime/helpers/arrayLikeToArray.js","arr2","./node_modules/@babel/runtime/helpers/arrayWithoutHoles.js","arrayLikeToArray","./node_modules/@babel/runtime/helpers/classCallCheck.js","./node_modules/@babel/runtime/helpers/createClass.js","_defineProperties","./node_modules/@babel/runtime/helpers/defineProperty.js","./node_modules/@babel/runtime/helpers/interopRequireDefault.js","./node_modules/@babel/runtime/helpers/interopRequireWildcard.js","_getRequireWildcardCache","nodeInterop","cacheBabelInterop","cacheNodeInterop","_interopRequireWildcard","newObj","hasPropertyDescriptor","./node_modules/@babel/runtime/helpers/iterableToArray.js","./node_modules/@babel/runtime/helpers/nonIterableSpread.js","./node_modules/@babel/runtime/helpers/objectWithoutProperties.js","_objectWithoutProperties","excluded","objectWithoutPropertiesLoose","sourceSymbolKeys","./node_modules/@babel/runtime/helpers/objectWithoutPropertiesLoose.js","_objectWithoutPropertiesLoose","sourceKeys","./node_modules/@babel/runtime/helpers/toConsumableArray.js","arrayWithoutHoles","iterableToArray","unsupportedIterableToArray","nonIterableSpread","./node_modules/@babel/runtime/helpers/typeof.js","./node_modules/@babel/runtime/helpers/unsupportedIterableToArray.js","minLen","./node_modules/webpack/buildin/global.js","./packages/@apphub:logrocket-console/src/index.js","_registerConsole","./packages/@apphub:logrocket-console/src/registerConsole.js","registerConsole","unsubFunctions","_enhanceFunc","consoleOptions","_typeof2","shouldAggregateConsoleErrors","_logrocketExceptions","Capture","captureMessage","unsubFunction","./packages/@apphub:logrocket-exceptions/src/Capture.js","isScalar","optionalScalars","_optionalScalars","field","optionalMaps","_i2","_optionalMaps","_field","scrubbed","_i3","_Object$keys","isConsole","exceptionType","browserHref","captureException","preppedTrace","trace","_TraceKit","computeStackTrace","errorType","addEventOptions","_stackTrace","_stackTraceFromError","./packages/@apphub:logrocket-exceptions/src/index.js","_registerExceptions","./packages/@apphub:logrocket-exceptions/src/raven/raven.js","hasKey","objectPrototype","_classCallCheck2","_createClass2","_window","Handler","_ignoreOnError","_wrappedBuiltIns","report","_instrumentTryCatch","builtin","_before","_ignoreNextOnError","__lr__","__lr_wrapper__","__inner__","wrapTimeFn","originalCallback","wrapEventTarget","evtName","wrappedBuiltIns","eventTargets","./packages/@apphub:logrocket-exceptions/src/registerExceptions.js","registerCore","raven","_raven","errorReport","rejectionHandler","uninstall","./packages/@apphub:logrocket-exceptions/src/stackTraceFromError.js","stackTraceFromError","makeNotNull","lineNumber","columnNumber","./packages/@apphub:logrocket-network/src/fetchIntercept.js","makeInterceptor","fetchId","_toConsumableArray2","_registerXHR","setActive","_err","isPolyfill","_len2","_key2","didAttach","./packages/@apphub:logrocket-network/src/index.js","enumerableOnly","_defineProperty2","registerNetwork","isReactNative","shouldAugmentNPS","ignoredNetwork","beginning","addRequest","reqId","_ref$isEnabled","_ref$requestSanitizer","requestSanitizer","sanitized","_mapValues","headerValue","referrer","addResponse","_ref2$isEnabled","_ref2$responseSanitiz","responseSanitizer","isIgnored","unsubFetch","_registerFetch","unsubXHR","unsubNetworkInformation","_registerNetworkInformation","./packages/@apphub:logrocket-network/src/registerFetch.js","makeObjectFromHeaders","pluckFetchFields","stringifyHeaders","registerFetch","LOGROCKET_FETCH_LABEL","fetchMethodMap","_fetchIntercept","Request","clonedText","responseHash","./packages/@apphub:logrocket-network/src/registerNetworkInformation.js","registerNetworkInformation","sendNetworkInformation","newStatus","online","onLine","effectiveType","EFFECTIVE_TYPE_VALS","lastStatus","slow-2g","2g","3g","4g","./packages/@apphub:logrocket-network/src/registerXHR.js","shouldBeActive","registerXHR","_ref$shouldAugmentNPS","_XHR","xhrMap","unsubscribedFromXhr","LOGROCKET_XHR_LABEL","_lrXMLHttpRequest","mozAnon","mozSystem","openShim","_nps","WOOTRIC_RESPONSES_REGEX","logrocketSessionURL","recordingURL","urlObj","openOriginal","sendShim","currentXHR","xhrObject","DELIGHTED_RESPONSES_REGEX","DELIGHTED_FEEDBACK_PREFIX","dataString","_startsWith","sendOriginal","xhrId","currentXHRId","headerValues","xhrListeners","readystatechange","headerString","headerParts","_shouldCloneResponse","responseXML","./packages/@apphub:logrocket-redux/src/createEnhancer.js","createEnhancer","_ref$stateSanitizer","stateSanitizer","_ref$actionSanitizer","actionSanitizer","createStore","reducer","initialState","enhancer","originalDispatch","storeIdCounter","sanitizedState","getState","_now","sanitizedAction","stateDelta","./packages/@apphub:logrocket-redux/src/createMiddleware.js","createMiddleware","./packages/@apphub:logrocket-redux/src/index.js","_createEnhancer","_createMiddleware","./packages/@apphub:logrocket-utils/src/TraceKit.js","getLocationHref","TraceKit","collectWindowErrors","UNKNOWN_FUNCTION","ERROR_TYPES_RE","installGlobalHandler","unsubscribeAll","uninstallGlobalHandler","notifyHandlers","isWindowError","traceKitWindowOnError","colNo","lastExceptionStack","augmentStackTraceWithInitialElement","processLastException","_oldOnerrorHandler","_onErrorHandlerInstalled","_lastExceptionStack","_lastArgs","lastException","incomplete","computeStackTraceFromStackProp","gecko","winjs","stackInfo","computeStackTraceByWalkingCallerChain","recursion","./packages/@apphub:logrocket-utils/src/constants/nps.js","./packages/@apphub:logrocket-utils/src/enhanceFunc.js","enhanceFunc","shim","./packages/@apphub:logrocket-utils/src/mapValues.js","./packages/@apphub:logrocket-utils/src/startsWith.js","./packages/@apphub:now/src/index.js","dateNow","loadTime","performance","./packages/logrocket/src/LogRocket.js","MAX_QUEUE_SIZE","_objectWithoutProperties2","_logrocketNetwork","_logrocketConsole","_logrocketRedux","considerIngestServerOption","ingestServer","serverURL","statsURL","shouldCaptureStackTrace","_isInitialized","_installed","getMessage","_run","timeOverride","_logger","_isDisabled","appID","_opts$shouldAugmentNP","registerExceptions","startNewSession","customEventName","eventProperties","getSessionURL","recordingID","threadID","tabID","./packages/logrocket/src/makeLogRocket.js","makeLogRocket","getLogger","REACT_NATIVE_NOTICE","_disableLogRocket","makeNoopPolyfill","_lrMutationObserver","_LogRocket","reduxEnhancer","reduxMiddleware","onLogger","setClock","./packages/logrocket/src/module-npm.js","_setup","./packages/logrocket/src/setup.js","scriptIngest","enterpriseServer","_ref$sdkVersion","sdkVersion","scriptOrigin","scriptTag","scriptHostname","CDN_SERVER_MAP","sdkServer","_makeLogRocket","__SDKCONFIG__","loggerURL","_lrAsyncScript","_LRLogger","cdn.logrocket.io","cdn.lr-ingest.io","cdn-staging.logrocket.io","cdn-staging.lr-ingest.io","rotl","fnF","fnG","fnH","fnI","ARRAY16","brorand","_randbelow","min_bytes","_randrange","rone","rn1","getDivisor","hookCallback","setHookCallback","hasOwnProp","arrLen","createUTC","createLocalOrUTC","defaultParsingFlags","unusedTokens","unusedInput","charsLeftOver","nullInput","invalidEra","invalidMonth","invalidFormat","userInvalidated","parsedDateParts","era","meridiem","rfc2822","weekdayMismatch","getParsingFlags","_pf","parsedParts","isNowValid","invalidWeekday","_strict","bigHour","_isValid","createInvalid","copyConfig","momentPropertiesLen","momentProperties","_isAMomentObject","_tzm","_isUTC","_offset","_locale","Moment","updateInProgress","updateOffset","isMoment","suppressDeprecationWarnings","deprecate","deprecationHandler","argLen","deprecateSimple","deprecations","_dayOfMonthOrdinalParseLenient","_dayOfMonthOrdinalParse","_ordinalParse","mergeConfigs","parentConfig","childConfig","Locale","calendar","mom","_calendar","zeroFill","targetLength","forceSign","absNumber","zerosToFill","addFormatToken","ordinal","formatTokenFunctions","localeData","removeFormattingTokens","makeFormatFunction","formattingTokens","formatMoment","expandFormat","formatFunctions","invalidDate","replaceLongDateFormatTokens","longDateFormat","localFormattingTokens","_longDateFormat","formatUpper","tok","_invalidDate","_ordinal","relativeTime","withoutSuffix","isFuture","_relativeTime","pastFuture","normalizeUnits","normalizeObjectUnits","inputObject","normalizedProp","normalizedInput","getPrioritizedUnits","unitsObj","priorities","addRegexToken","strictRegex","regexes","getParseRegexForToken","unescapeFormat","regexEscape","p3","p4","absFloor","argumentForCoercion","coercedNumber","addParseToken","tokenLen","addWeekParseToken","addTimeToArrayFromToken","isLeapYear","daysInYear","getIsLeapYear","makeGetSet","keepTime","set$1","isUTC","getUTCDay","setUTCMilliseconds","setUTCSeconds","setUTCMinutes","setUTCDate","stringGet","stringSet","prioritized","prioritizedLen","modMonth","localeMonths","_months","isFormat","MONTHS_IN_FORMAT","localeMonthsShort","_monthsShort","handleStrictParse","monthName","llc","toLocaleLowerCase","_monthsParse","_longMonthsParse","_shortMonthsParse","monthsShort","localeMonthsParse","_monthsParseExact","monthsParse","setUTCMonth","getSetMonth","getDaysInMonth","monthsShortRegex","computeMonthsParse","_monthsShortStrictRegex","_monthsShortRegex","defaultMonthsShortRegex","monthsRegex","_monthsStrictRegex","_monthsRegex","defaultMonthsRegex","cmpLenRev","shortP","longP","shortPieces","longPieces","mixedPieces","createDate","createUTCDate","firstWeekOffset","fwd","fwdlw","dayOfYearFromWeeks","resYear","resDayOfYear","localWeekday","weekOffset","dayOfYear","weekOfYear","resWeek","weeksInYear","weekOffsetNext","localeWeek","_week","localeFirstDayOfWeek","localeFirstDayOfYear","getSetWeek","getSetISOWeek","parseWeekday","weekdaysParse","parseIsoWeekday","shiftWeekdays","localeWeekdays","weekdays","_weekdays","localeWeekdaysShort","_weekdaysShort","localeWeekdaysMin","_weekdaysMin","handleStrictParse$1","weekdayName","_weekdaysParse","_shortWeekdaysParse","_minWeekdaysParse","weekdaysMin","localeWeekdaysParse","_weekdaysParseExact","_fullWeekdaysParse","getSetDayOfWeek","getSetLocaleDayOfWeek","getSetISODayOfWeek","weekdaysRegex","computeWeekdaysParse","_weekdaysStrictRegex","_weekdaysRegex","defaultWeekdaysRegex","weekdaysShortRegex","_weekdaysShortStrictRegex","_weekdaysShortRegex","defaultWeekdaysShortRegex","weekdaysMinRegex","_weekdaysMinStrictRegex","_weekdaysMinRegex","defaultWeekdaysMinRegex","minp","shortp","longp","minPieces","hFormat","kFormat","matchMeridiem","_meridiemParse","localeIsPM","localeMeridiem","isLower","commonPrefix","arr1","minl","normalizeLocale","chooseLocale","globalLocale","isLocaleNameSane","aliasedRequire","oldLocale","locales","_abbr","getSetGlobalLocale","defineLocale","baseConfig","parentLocale","localeFamilies","updateLocale","tmpLocale","listLocales","checkOverflow","DATE","YEAR","HOUR","MINUTE","SECOND","MILLISECOND","_overflowDayOfYear","_overflowWeeks","WEEK","_overflowWeekday","WEEKDAY","configFromISO","allowTime","tzFormat","extendedIsoRegex","basicIsoRegex","isoDatesLen","isoDates","isoTimesLen","isoTimes","tzRegex","configFromStringAndFormat","extractFromRFC2822Strings","yearStr","monthStr","dayStr","hourStr","minuteStr","secondStr","untruncateYear","defaultLocaleMonthsShort","preprocessRFC2822","checkWeekday","weekdayStr","parsedInput","weekdayProvided","defaultLocaleWeekdaysShort","weekdayActual","calculateOffset","obsOffset","militaryOffset","numOffset","obsOffsets","hm","configFromRFC2822","parsedArray","configFromString","aspNetJsonRegex","createFromInputFallback","currentDateArray","nowValue","_useUTC","configFromArray","expectedWeekday","yearToUse","dayOfYearFromWeekInfo","_dayOfYear","_nextDay","weekYear","weekdayOverflow","curWeek","createLocal","gg","totalParsedInputLength","_meridiem","meridiemFixWrap","erasConvertYear","isPm","meridiemHour","isPM","configFromStringAndArray","tempConfig","bestMoment","scoreToBeat","currentScore","validFormatFound","bestFormatIsValid","configfLen","score","configFromObject","dayOrDate","createFromConfig","prepareConfig","preparse","configFromInput","moments","isDurationValid","unitHasDecimal","orderLen","ordering","isValid$1","createInvalid$1","createDuration","Duration","quarters","weeks","_milliseconds","_days","_bubble","isDuration","absRound","compareArrays","dontConvert","lengthDiff","diffs","utcOffset","offsetFromString","chunkOffset","cloneWithOffset","setTime","getDateOffset","getSetOffset","keepLocalTime","keepMinutes","localAdjust","matchShortOffset","_changeInProgress","addSubtract","getSetZone","setOffsetToUTC","setOffsetToLocal","setOffsetToParsedOffset","tZone","matchOffset","hasAlignedHourOffset","isDaylightSavingTime","isDaylightSavingTimeShifted","_isDSTShifted","isUtcOffset","isUtc","diffRes","aspNetRegex","isoRegex","parseIso","momentsDifference","positiveMomentsDifference","isAfter","createAdder","dur","isAdding","isMomentInput","isNumberOrStringArray","isMomentInputObject","objectTest","propertyTest","propertyLen","arrayTest","dataTypeTest","isCalendarSpec","getCalendarFormat","myMoment","calendar$1","sod","calendarFormat","localInput","inclusivity","localFrom","localTo","inputMs","isSameOrAfter","isSameOrBefore","asFloat","zoneDelta","monthDiff","anchor2","wholeMonthDiff","keepOffset","defaultFormatUtc","defaultFormat","postformat","humanize","fromNow","toNow","newLocaleData","mod$1","localStartOfDate","MS_PER_400_YEARS","utcStartOfDate","startOfDate","MS_PER_MINUTE","MS_PER_HOUR","MS_PER_SECOND","unix","isValid$2","parsingFlags","invalidAt","creationData","localeEras","eras","_eras","since","localeErasParse","eraName","narrow","localeErasConvertYear","getEraName","getEraNarrow","getEraAbbr","getEraYear","erasNameRegex","computeErasParse","_erasNameRegex","_erasRegex","erasAbbrRegex","_erasAbbrRegex","erasNarrowRegex","_erasNarrowRegex","matchEraAbbr","matchEraName","matchEraNarrow","matchEraYearOrdinal","_eraYearOrdinalRegex","matchUnsigned","erasName","erasAbbr","erasNarrow","abbrPieces","namePieces","narrowPieces","addWeekYearFormatToken","getSetWeekYear","getSetWeekYearHelper","getSetISOWeekYear","getISOWeeksInYear","getISOWeeksInISOWeekYear","isoWeekYear","getWeeksInYear","weekInfo","getWeeksInWeekYear","weeksTarget","setWeekAll","dayOfYearData","getSetQuarter","getSetDayOfYear","parseMs","getZoneAbbr","getZoneName","createUnix","createInZone","parseZone","preParsePostFormat","get$1","listMonthsImpl","listWeekdaysImpl","localeSorted","listMonths","listMonthsShort","listWeekdays","listWeekdaysShort","listWeekdaysMin","mathAbs","addSubtract$1","add$1","subtract$1","absCeil","monthsFromDays","monthsToDays","daysToMonths","as","makeAs","clone$1","get$2","makeGetter","substituteTimeAgo","relativeTime$1","posNegDuration","thresholds","getSetRelativeTimeRounding","roundingFunction","getSetRelativeTimeThreshold","threshold","argWithSuffix","argThresholds","withSuffix","toISOString$1","totalSign","ymSign","daysSign","hmsSign","abs$1","fun","defaultCalendar","sameDay","nextDay","nextWeek","lastDay","lastWeek","sameElse","defaultLongDateFormat","LTS","LL","LLL","defaultInvalidDate","defaultOrdinal","defaultDayOfMonthOrdinalParse","defaultRelativeTime","future","past","isoweekdays","isoweekday","DDD","dayofyears","dayofyear","weekyears","weekyear","isoweekyears","isoweekyear","isoweeks","isoweek","match1","match2","match3","match4","match6","match1to2","match3to4","match5to6","match1to3","match1to4","match1to6","matchSigned","matchTimestamp","matchWord","match1to2NoLeadingZero","match1to2HasZero","parseTwoDigitYear","getSetYear","defaultLocaleMonths","defaultLocaleWeek","defaultLocaleWeekdays","defaultLocaleWeekdaysMin","kInput","_isPm","pos1","pos2","defaultLocaleMeridiemParse","getSetHour","dayOfMonthOrdinalParse","meridiemParse","UT","GMT","EDT","EST","CDT","CST","MDT","MST","PDT","PST","prototypeMin","prototypeMax","invalid","erasParse","eraYearOrdinalParse","getSetDayOfMonth","getSetMinute","getSetSecond","getSetMillisecond","eraNarrow","eraAbbr","eraYear","isoWeeks","weeksInWeekYear","isoWeeksInYear","isoWeeksInISOWeekYear","isDST","zoneAbbr","zoneName","isDSTShifted","proto$1","firstDayOfYear","firstDayOfWeek","langData","asMilliseconds","asMinutes","asHours","asDays","asWeeks","asMonths","asQuarters","asYears","valueOf$1","proto$2","toIsoString","relativeTimeRounding","relativeTimeThreshold","HTML5_FMT","DATETIME_LOCAL","DATETIME_LOCAL_SECONDS","DATETIME_LOCAL_MS","TIME_SECONDS","TIME_MS","dismissOnTimeout","dismissButton","dismissButtonHtml","dismissOnClick","compileContent","messageStack","combineDuplications","horizontalPosition","verticalPosition","maxNumber","newestOnTop","_createWithClassName","dismiss","_msg","_className","newMsg","danger","tElem","hPos","vPos","dismissTimeout","scopeToBind","cancelTimeout","onMouseEnter","onMouseLeave","transcludedEl","compiledClone","setupBrowser","_crypto","_rng","_rnds8","_whatwgRNG","_rnds","_mathRNG","setupNode","_rb","_nodeRNG","_hexToByte","unparse","bth","_byteToHex","clockseq","_clockseq","msecs","nsecs","_lastNSecs","dt","_lastMSecs","tmh","_nodeId","BufferClass","rnds","_previousRoot","_seedBytes","certificate","RSAPrivateKey","seq","RSAPublicKey","AlgorithmIdentifier","null_","PublicKey","bitstr","PrivateKeyInfo","octstr","PrivateKey","EncryptedPrivateKeyInfo","EncryptedPrivateKey","DSAPrivateKey","DSAparam","ECParameters","namedCurve","ECPrivateKey","asn","Time","utcTime","utctime","generalTime","gentime","AttributeTypeValue","SubjectPublicKeyInfo","RelativeDistinguishedName","setof","RDNSequence","seqof","Name","rdnSequence","Validity","Extension","TBSCertificate","X509Certificate","findProc","startRegex","fullRegex","evp","okey","decrypted","cipherText","cipherKey","cipher","kde","kdeparams","iters","aesid","keylen","compat","passphrase","subtype","ndata","stripped","fixProc","tbsCertificate","subjectPublicKeyInfo","subjectPublicKey","checkNative","importKey","deriveBits","checks","ZERO_BUF","prom","browserPbkdf2","getNextTick","queueMicrotask","iterations","checkParameters","defaultEncoding","toBrowser","sha-1","sha-256","sha-384","sha-512","pVersionMajor","MAX_ALLOC","saltLen","getDigest","ipad1","ipad2","shaFunc","rmd160Func","block1","destPos","hLen","rmd160","defaultSetTimout","defaultClearTimeout","runTimeout","cachedSetTimeout","runClearTimeout","marker","cachedClearTimeout","cleanUpNextTick","draining","currentQueue","queueIndex","drainQueue","Item","argv","cwd","chdir","umask","i2ops","oaep","iHash","maskedSeed","maskedDb","mgf","pkcs1","dif","withPublic","zBuffer","hLen2","dblen","nonZero","publicKey","paddedMsg","_row","supplements","_nextUnset","_matchPattern","SINGLE_CODE_ERROR","_nextSet","_correctBars","_matchTrace","decodePattern","DIRECTION","REVERSE","FORWARD","FORMAT","_matchRange","_fillCounters","_toCounters","writeable","Exception","StartNotFoundException","CodeNotFoundException","PatternNotFoundException","CONFIG_KEYS","toPointList","CODE_L_START","CODE_G_START","START_PATTERN","STOP_PATTERN","MIDDLE_PATTERN","EXTENSION_START_PATTERN","CODE_PATTERN","CODE_FREQUENCY","AVG_CODE_ERROR","_decodeCode","_findPattern","_findStart","_verifyTrailingWhitespace","_findEnd","_calculateFirstDigit","_decodePayload","_checksum","_decodeExtensions","decodedCodes","supplement","codeset","startInfo","Float32Array","drawPath","getImageData","putImageData","toVec2","toVec3","Int32Array","fits","createPoint","singleChannel","x-small","small","large","x-large","sy","inImageWithBorder","clearArray","subImage","subImageAsCopy","copyTo","getSafe","indexMapping","zeroBorder","convolve","m00","m01","m10","m11","m02","m20","theta","webpackPolyfill","searchDirections","contourTracing","ALPHABETH_STRING","ALPHABET","CHARACTER_ENCODINGS","ASTERISK","_toPattern","_patternToChar","_findNextWidth","createVideoStream","createImageStream","createLiveStream","constraints","setInputStream","checkImageConstraints","locator","numOfWorkers","getCanvasSize","getWidth","getHeight","locate","getTopRight","addResult","publish","decodeFromBoundingBoxes","busy","attachData","imageData","grab","worker","cmd","Worker","ImageWrapper","onProcessed","setReaders","terminate","clearEventHandlers","offProcessed","registerResultCollector","decodeSingle","halfSample","ImageDebug","ResultCollector","CameraAccess","getResults","getPoints","getCenter","mediaDevices","enumerateDevices","getUserMedia","updateFrom","facingMode","patchSize","code_128_reader","ean_reader","ean_5_reader","ean_2_reader","ean_8_reader","code_39_reader","code_39_vin_reader","codabar_reader","upc_reader","upc_e_reader","i2of5_reader","2of5_reader","code_93_reader","getBarcodeLine","toBinaryLine","barcodeLine","decodeFromBoundingBox","printFrequency","printPattern","fillColor","videoWidth","videoHeight","srcObject","minAspectRatio","facing","audio","video","getVideoTracks","enumerateVideoDevices","getActiveStreamLabel","getActiveTrack","readAsArrayBuffer","DONE","274","getConfig","getRealWidth","getRealHeight","getFrame","getSize","notLoaded","addImage","setHeight","ended","setCurrentTime","setTopRight","setCanvasSize","useWorker","transformMat2","rasterize","skeletonize","createContour2D","firstVertex","insideContours","nextpeer","prevpeer","CONTOUR_DIR","CW_DIR","CCW_DIR","UNKNOWN_DIR","OUTSIDE_EDGE","INSIDE_EDGE","cc","drawContour","__webpack_exports__","Skeletonizer","stdlib","images","erode","inImagePtr","outImagePtr","yStart1","yStart2","xStart1","xStart2","aImagePtr","bImagePtr","bitwiseOr","countNonZero","imagePtr","dilate","memcpy","srcImagePtr","dstImagePtr","subImagePtr","erodedImagePtr","tempImagePtr","skelImagePtr","barSpaceRatio","_verifyCounterLength","_counters","START_END","MIN_ENCODED_CHARS","MAX_ACCEPTABLE","startCounter","_isStartEnd","_verifyWhitespace","_validateResult","_sumCounters","_calculatePatternLength","_thresholdResultPattern","counts","wide","_charToPattern","_computeAlternatingThreshold","endCounter","CODE_SHIFT","CODE_C","CODE_B","CODE_A","START_CODE_A","START_CODE_B","START_CODE_C","STOP_CODE","MODULE_INDICES","correction","_correct","endInfo","IOQ","AZ09","_checkChecksum","_verifyEnd","_verifyChecksums","_decodeExtended","_matchCheckChar","normalizeBarSpaceWidth","MAX_CORRECTION_FACTOR","_decodePair","_determineParity","_convertToUPCA","oldBrowser","MAX_BYTES","generated","assertOffset","kMaxUint32","kBufferMaxLength","actualFill","ourBuf","uint","randombytes","safeBuffer","Duplex","Readable","readable","allowHalfOpen","onend","_writableState","pna","onEndNT","highWaterMark","_readableState","destroyed","PassThrough","_uint8ArrayToBuffer","_isUint8Array","OurUint8Array","ReadableState","isDuplex","objectMode","readableObjectMode","hwm","readableHwm","readableHighWaterMark","defaultHwm","BufferList","pipes","pipesCount","flowing","endEmitted","needReadable","emittedReadable","readableListening","resumeScheduled","awaitDrain","readingMore","Stream","readableAddChunk","addToFront","skipChunkCheck","onEofChunk","chunkInvalid","addChunk","maybeReadMore","needMoreData","emitReadable","computeNewHighWaterMark","MAX_HWM","howMuchToRead","emitReadable_","maybeReadMore_","pipeOnDrain","EElistenerCount","nReadingNextTick","fromListPartial","hasStrings","copyFromBufferString","copyFromBuffer","endReadable","endReadableNT","debugUtil","debuglog","destroyImpl","kProxyEvents","_undestroy","undestroy","isPaused","setEncoding","nOrig","doRead","pipeOpts","onunpipe","unpipeInfo","hasUnpiped","onfinish","ondrain","unpipe","ondata","cleanedUp","needDrain","increasedAwaitDrain","doEnd","stdout","stderr","dests","paused","_fromList","afterTransform","_transformState","transforming","writecb","writechunk","needTransform","writeencoding","prefinish","err2","WriteReq","CorkedRequest","onCorkedFinish","WritableState","writableObjectMode","writableHwm","writableHighWaterMark","finalCalled","ending","finished","noDecode","decodeStrings","writing","corked","bufferProcessing","onwrite","writelen","lastBufferedRequest","pendingcb","prefinished","errorEmitted","bufferedRequestCount","corkedRequestsFree","realHasInstance","writev","_writev","writeAfterEnd","validChunk","decodeChunk","writeOrBuffer","isBuf","newChunk","doWrite","onwriteError","finishMaybe","onwriteStateUpdate","needFinish","clearBuffer","asyncWrite","afterWrite","onwriteDrain","holder","allBuffers","callFinal","need","endWritable","corkReq","internalUtil","getBuffer","hasInstance","cork","uncork","setDefaultEncoding","copyBuffer","readableDestroyed","writableDestroyed","emitErrorNT","copyProps","SafeBuffer","innerFn","outerFn","tryLocsList","protoGenerator","makeInvokeMethod","defineIteratorMethods","PromiseImpl","record","unwrapped","callInvokeWithMethodAndArg","previousPromise","GenStateSuspendedStart","GenStateExecuting","GenStateCompleted","doneResult","delegateResult","maybeInvokeDelegate","ContinueSentinel","GenStateSuspendedYield","resultName","nextLoc","pushTryEntry","locs","tryLoc","catchLoc","finallyLoc","afterLoc","resetTryEntry","completion","iteratorMethod","Op","asyncIteratorSymbol","toStringTagSymbol","NativeIteratorPrototype","Gp","genFun","skipTempReset","rootEntry","rootRecord","loc","caught","hasCatch","hasFinally","finallyEntry","thrown","regeneratorRuntime","accidentalStrictMode","fn1","fn2","fn3","fn4","fn5","zr","sr","ar","cr","dr","finalSize","_finalSize","accum","assigned","lowBits","highBits","Algorithm","Sha","rotl5","rotl30","ft","Sha1","rotl1","Sha224","Sha256","_g","maj","sigma0","sigma1","gamma0","gamma1","Sha384","_ah","_bh","_ch","_dh","_eh","_fh","_gh","_hh","_al","_bl","_cl","_dl","_el","_fl","_gl","_hl","writeInt64BE","Sha512","Gamma0","Gamma0l","Gamma1","Gamma1l","getCarry","gamma0l","gamma1l","Wi7h","Wi7l","Wi16h","Wi16l","Wil","Wih","majh","majl","sigma0h","sigma0l","sigma1h","sigma1l","Kih","Kil","chh","chl","t1l","t1h","t2l","t2h","_capitalize","_getter","booleanProps","numericProps","stringProps","arrayProps","objectProps","getArgs","setArgs","getEvalOrigin","evalOrigin","setEvalOrigin","getFileName","getLineNumber","getColumnNumber","getFunctionName","getIsEval","argsStartIndex","argsEndIndex","locationString","StackGenerator","backtrace","maxStackSize","$1","setFunctionName","setFileName","setLineNumber","setColumnNumber","setSource","getSource","ArraySet","_array","aArray","aAllowDuplicates","aStr","sStr","toSetString","isDuplicate","aIdx","toVLQSigned","aValue","fromVLQSigned","shifted","VLQ_BASE_SHIFT","VLQ_BASE","VLQ_BASE_MASK","VLQ_CONTINUATION_BIT","vlq","aIndex","aOutParam","continuation","intToCharMap","bigA","bigZ","littleA","littleZ","littleOffset","numberOffset","recursiveSearch","aLow","aHigh","aNeedle","aHaystack","aCompare","aBias","LEAST_UPPER_BOUND","GREATEST_LOWER_BOUND","randomIntInRange","doQuickSort","pivotIndex","quickSort","SourceMapConsumer","aSourceMap","sourceMap","sections","IndexedSourceMapConsumer","BasicSourceMapConsumer","getArg","sourceRoot","sourcesContent","mappings","_version","isAbsolute","_names","_sources","_mappings","Mapping","generatedLine","generatedColumn","originalLine","originalColumn","lastOffset","_sections","offsetLine","offsetColumn","generatedOffset","consumer","base64VLQ","fromSourceMap","__generatedMappings","_parseMappings","__originalMappings","_charIsMappingSeparator","aSourceRoot","GENERATED_ORDER","ORIGINAL_ORDER","eachMapping","aCallback","aContext","aOrder","_generatedMappings","_originalMappings","allGeneratedPositionsFor","aArgs","_findMapping","compareByOriginalPositions","lastColumn","smc","_sourceRoot","_generateSourcesContent","_file","generatedMappings","destGeneratedMappings","destOriginalMappings","srcMapping","destMapping","previousGeneratedColumn","previousOriginalLine","previousOriginalColumn","previousSource","previousName","cachedSegments","originalMappings","compareByGeneratedPositionsDeflated","aMappings","aLineName","aColumnName","aComparator","computeColumnSpans","nextMapping","lastGeneratedColumn","originalPositionFor","hasContentsOfAllSources","sc","sourceContentFor","aSource","nullOnMissing","urlParse","fileUriAbsPath","generatedPositionFor","sectionIndex","bias","generatedPosition","sectionMappings","adjustedMapping","aName","aDefaultValue","aUrl","urlRegexp","urlGenerate","aParsedUrl","aPath","aRoot","aPathUrl","aRootUrl","dataUrlRegexp","joined","isProtoString","fromSetString","mappingA","mappingB","onlyCompareOriginal","onlyCompareGenerated","strcmp","aStr1","aStr2","compareByGeneratedPositionsInflated","supportsNullProto","StackTraceGPS","SourceMap","_xdr","_atob","b64str","_parseJson","_findFunctionName","reFunctionDeclaration","reFunctionExpression","reFunctionEvaluation","maxLines","commentPos","_ensureSupportedEnvironment","_ensureStackFrameIsLegit","stackframe","_findSourceMappingURL","_extractLocationInfoFromSourceMap","rawSourceMap","sourceCache","mapConsumer","mappedSource","isDataUrl","offline","supportedEncodingRegexp","sourceMapStart","encodedSource","xhrPromise","pinpoint","getMappedLocation","mappedStackFrame","resolveMappedStackFrame","findFunctionName","guessedFunctionName","sourceMappingURL","_isShapedLikeParsableError","_filtered","_generateError","generateArtificially","getSync","gps","resolveOriginal","stackFrames","instrument","__stacktraceOriginalFn","instrumented","deinstrument","reportPayload","didOnEnd","_isStdio","_normalizeEncoding","retried","normalizeEncoding","nenc","utf16Text","utf16End","fillLast","utf8FillLast","base64Text","base64End","simpleWrite","simpleEnd","lastNeed","utf8CheckByte","utf8CheckIncomplete","utf8CheckExtraBytes","utf8Text","utf8End","clearFn","_clearFn","immediateIds","nextImmediateId","unref","enroll","_idleTimeoutId","_idleTimeout","unenroll","_unrefActive","_onTimeout","Object_keys","defineProp","Script","wEval","wExecScript","winKeys","runInNewContext","createContext","isContext"],"mappings":"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GA,mEACA,qEAGA,mEACA,qEAGA,mEACA,oEAGA,mEACA,qEAGA,mEACA,qEAGA,mEACA,oEAGA,mEACA,qEAGA,kEACA,qEAGA,mEACA,qEAGA,mEACA,qEAGA,mEACA,qEAGA,mEACA,qEAGA,mEACA,qEAGA,mEACA,qEAGA,mEACA,oEAGA,mEACA,oEAGA,mEACA,qEAGA,mEACA,qEAGA,mEACA,qEAGA,mEACA,qEAGA,mEACA,qEAGA,mEACA,qEAGA,mEACA,qEAGA,mEACA,qEAGA,mEACA,qEAGA,mEACA,qEAGA,mEACA,qEAGA,mEACA,qEAGA,mEACA,qEAGA,mEACA,qEAGA,mEACA,qEAGA,mEACA,qEAGA,mEACA,qEAGA,mEACA,qEAGA,mEACA,oEAGA,mEACA,qEAGA,mEACA,oEAGA,mEACA,qEAGA,mEACA,qEAGA,mEACA,qEAGA,mEACA,qEAGA,mEACA,qEAGA,mEACA,qEAGA,mEACA,qEAGA,kEACA,qEAGA,mEACA,qEAGA,mEACA,qEAGA,mEACA,oEAGA,mEACA,oEAGA,mEACA,qEAGA,mEACA,qEAGA,kEACA,qEAGA,mEACA,qEAGA,mEACA,oEAGA,mEACA,qEAGA,mEACA,oEAGA,mEACA,qEAGA,kEACA,qEAGA,mEACA,qEAGA,mEACA,qEAGA,mEACA,qEAGA,iEACA,qEAGA,mEACA,qEAGA,mEACA,qEAGA,mEACA,qEAGA,mEACA,qEAGA,mEACA,qEAGA,kEACA,qEAGA,mEACA,oEAGA,mEACA,qEAGA,mEACA,qEAGA,mEACA,qEAGA,mEACA,qEAGA,mEACA,qEAGA,mEACA,qEAGA,mEACA,qEAGA,mEACA,qEAGA,mEACA,qEAGA,mEACA,qEAGA,mEACA,qEAGA,mEACA,qEAGA,mEACA,qEAGA,mEACA,qEAGA,mEACA,qEAGA,mEACA,qEAGA,mEACA,qEAGA,mEACA,qEAGA,mEACA,oEAGA,mEACA,qEAGA,mEACA,qEAGA,mEACA,oEAGA,mEACA,qEAGA,mEACA,qEAGA,mEACA,qEAGA,mEACA,qEAGA,mEACA,oEAGA,mEACA,qEAGA,mEACA,qEAGA,mEACA,qEAGA,mEACA,qEA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AAK,MAAMC,KAAK,MAAMC,KAAK,MAAMC,KAAK,MAAMC,KAAK,MAAMC,KAAK,MAAMC,KAAK,MAAMC,KAAK,MAAMC,KAAK,MAAMC,KAAK,MAAMC,KAAK,MAAMC,KAAK,MAAMC,KAAK,KAAK,MAAMC,KAAK,MAAMC,KAAK,MAAMC,KAAK,MAAMC,KAAK,MAAMC,KAAK,MAAMC,KAAK,MAAMC,KAAK,MAAMC,KAAK,KAAK,MAAMC,KAAK,MAAMC,KAAK,MAAMC,KAAK,MAAMC,KAAK,MAAMC,KAAK,MAAMC,KAAK,MAAMC,KAAK,MAAMC,KAAK,MAAMC,KAAK,MAAMC,KAAK,MAAMC,KAAK,MAAMC,KAAK,MAAMC,KAAK,KAAK,MAAMC,KAAK,MAAMC,KAAK,MAAMC,KAAK,MAAMC,KAAK,MAAMC,KAAK,MAAMC,KAAK,MAAMC,KAAK,MAAMC,KAAK,MAAMC,KAAK,MAAMC,KAAK,MAAMC,KAAK,MACxfC,KAAK,MAAMC,KAAK,MAAMC,KAAK,MAAMC,KAAK,MAAMC,KAAK,MAAMC,KAAK,MAAMC,KAAK,MAAMC,KAAK,MAAMC,KAAK,MAAMC,KAAK,MAAMC,KAAK,MAAMC,KAAK,MAAMC,KAAK,MAAMC,KAAK,MAAMC,KAAK,MAAMC,KAAK,MAAMC,KAAK,MAAMC,KAAK,MAAMC,KAAK,MAAMC,KAAK,MAAMC,KAAK,KAAK,KAAK,MAAMC,KAAK,MAAMC,KAAK,MAAMC,KAAK,MAAMC,KAAK,MAAMC,KAAK,MAAMC,KAAK,MAAMC,KAAK,MAAMC,KAAK,MAAMC,KAAK,KAAK,MAAMC,KAAK,MAAMC,KAAK,MAAMC,KAAK,MAAMC,KAAK,MAAMC,KAAK,MAAMC,KAAK,MAAMC,KAAK,MAAMC,KAAK,MAAMC,KAAK,MAAMC,KAAK,MAAMC,KAAK,MAAMC,KAAK,MAAMC,KAAK,MAAMC,KAAK,MAAMC,KAAK,MACxfC,KAAK,MAAMC,KAAK,MAAMC,KAAK,MAAMC,KAAK,MAAMC,KAAK,MAAMC,KAAK,MAAMC,KAAK,OAAOC,KAAK,OAAOC,KAAK,MAAMC,KAAK,MAAMC,KAAK,MAAMC,KAAK,MAAMC,KAAK,MAAMC,KAAK,OAAOC,KAAK,OAAOC,KAAK,MAAMC,KAA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AAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,E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","file":"bundle.js","sourcesContent":["(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c=\"function\"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error(\"Cannot find module '\"+i+\"'\");throw a.code=\"MODULE_NOT_FOUND\",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u=\"function\"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()","module.exports={\"aes-128-ecb\":{\"cipher\":\"AES\",\"key\":128,\"iv\":0,\"mode\":\"ECB\",\"type\":\"block\"},\"aes-192-ecb\":{\"cipher\":\"AES\",\"key\":192,\"iv\":0,\"mode\":\"ECB\",\"type\":\"block\"},\"aes-256-ecb\":{\"cipher\":\"AES\",\"key\":256,\"iv\":0,\"mode\":\"ECB\",\"type\":\"block\"},\"aes-128-cbc\":{\"cipher\":\"AES\",\"key\":128,\"iv\":16,\"mode\":\"CBC\",\"type\":\"block\"},\"aes-192-cbc\":{\"cipher\":\"AES\",\"key\":192,\"iv\":16,\"mode\":\"CBC\",\"type\":\"block\"},\"aes-256-cbc\":{\"cipher\":\"AES\",\"key\":256,\"iv\":16,\"mode\":\"CBC\",\"type\":\"block\"},\"aes128\":{\"cipher\":\"AES\",\"key\":128,\"iv\":16,\"mode\":\"CBC\",\"type\":\"block\"},\"aes192\":{\"cipher\":\"AES\",\"key\":192,\"iv\":16,\"mode\":\"CBC\",\"type\":\"block\"},\"aes256\":{\"cipher\":\"AES\",\"key\":256,\"iv\":16,\"mode\":\"CBC\",\"type\":\"block\"},\"aes-128-cfb\":{\"cipher\":\"AES\",\"key\":128,\"iv\":16,\"mode\":\"CFB\",\"type\":\"stream\"},\"aes-192-cfb\":{\"cipher\":\"AES\",\"key\":192,\"iv\":16,\"mode\":\"CFB\",\"type\":\"stream\"},\"aes-256-cfb\":{\"cipher\":\"AES\",\"key\":256,\"iv\":16,\"mode\":\"CFB\",\"type\":\"stream\"},\"aes-128-cfb8\":{\"cipher\":\"AES\",\"key\":128,\"iv\":16,\"mode\":\"CFB8\",\"type\":\"stream\"},\"aes-192-cfb8\":{\"cipher\":\"AES\",\"key\":192,\"iv\":16,\"mode\":\"CFB8\",\"type\":\"stream\"},\"aes-256-cfb8\":{\"cipher\":\"AES\",\"key\":256,\"iv\":16,\"mode\":\"CFB8\",\"type\":\"stream\"},\"aes-128-cfb1\":{\"cipher\":\"AES\",\"key\":128,\"iv\":16,\"mode\":\"CFB1\",\"type\":\"stream\"},\"aes-192-cfb1\":{\"cipher\":\"AES\",\"key\":192,\"iv\":16,\"mode\":\"CFB1\",\"type\":\"stream\"},\"aes-256-cfb1\":{\"cipher\":\"AES\",\"key\":256,\"iv\":16,\"mode\":\"CFB1\",\"type\":\"stream\"},\"aes-128-ofb\":{\"cipher\":\"AES\",\"key\":128,\"iv\":16,\"mode\":\"OFB\",\"type\":\"stream\"},\"aes-192-ofb\":{\"cipher\":\"AES\",\"key\":192,\"iv\":16,\"mode\":\"OFB\",\"type\":\"stream\"},\"aes-256-ofb\":{\"cipher\":\"AES\",\"key\":256,\"iv\":16,\"mode\":\"OFB\",\"type\":\"stream\"},\"aes-128-ctr\":{\"cipher\":\"AES\",\"key\":128,\"iv\":16,\"mode\":\"CTR\",\"type\":\"stream\"},\"aes-192-ctr\":{\"cipher\":\"AES\",\"key\":192,\"iv\":16,\"mode\":\"CTR\",\"type\":\"stream\"},\"aes-256-ctr\":{\"cipher\":\"AES\",\"key\":256,\"iv\":16,\"mode\":\"CTR\",\"type\":\"stream\"},\"aes-128-gcm\":{\"cipher\":\"AES\",\"key\":128,\"iv\":12,\"mode\":\"GCM\",\"type\":\"auth\"},\"aes-192-gcm\":{\"cipher\":\"AES\",\"key\":192,\"iv\":12,\"mode\":\"GCM\",\"type\":\"auth\"},\"aes-256-gcm\":{\"cipher\":\"AES\",\"key\":256,\"iv\":12,\"mode\":\"GCM\",\"type\":\"auth\"}}","module.exports={\"sha224WithRSAEncryption\":{\"sign\":\"rsa\",\"hash\":\"sha224\",\"id\":\"302d300d06096086480165030402040500041c\"},\"RSA-SHA224\":{\"sign\":\"ecdsa/rsa\",\"hash\":\"sha224\",\"id\":\"302d300d06096086480165030402040500041c\"},\"sha256WithRSAEncryption\":{\"sign\":\"rsa\",\"hash\":\"sha256\",\"id\":\"3031300d060960864801650304020105000420\"},\"RSA-SHA256\":{\"sign\":\"ecdsa/rsa\",\"hash\":\"sha256\",\"id\":\"3031300d060960864801650304020105000420\"},\"sha384WithRSAEncryption\":{\"sign\":\"rsa\",\"hash\":\"sha384\",\"id\":\"3041300d060960864801650304020205000430\"},\"RSA-SHA384\":{\"sign\":\"ecdsa/rsa\",\"hash\":\"sha384\",\"id\":\"3041300d060960864801650304020205000430\"},\"sha512WithRSAEncryption\":{\"sign\":\"rsa\",\"hash\":\"sha512\",\"id\":\"3051300d060960864801650304020305000440\"},\"RSA-SHA512\":{\"sign\":\"ecdsa/rsa\",\"hash\":\"sha512\",\"id\":\"3051300d060960864801650304020305000440\"},\"RSA-SHA1\":{\"sign\":\"rsa\",\"hash\":\"sha1\",\"id\":\"3021300906052b0e03021a05000414\"},\"ecdsa-with-SHA1\":{\"sign\":\"ecdsa\",\"hash\":\"sha1\",\"id\":\"\"},\"sha256\":{\"sign\":\"ecdsa\",\"hash\":\"sha256\",\"id\":\"\"},\"sha224\":{\"sign\":\"ecdsa\",\"hash\":\"sha224\",\"id\":\"\"},\"sha384\":{\"sign\":\"ecdsa\",\"hash\":\"sha384\",\"id\":\"\"},\"sha512\":{\"sign\":\"ecdsa\",\"hash\":\"sha512\",\"id\":\"\"},\"DSA-SHA\":{\"sign\":\"dsa\",\"hash\":\"sha1\",\"id\":\"\"},\"DSA-SHA1\":{\"sign\":\"dsa\",\"hash\":\"sha1\",\"id\":\"\"},\"DSA\":{\"sign\":\"dsa\",\"hash\":\"sha1\",\"id\":\"\"},\"DSA-WITH-SHA224\":{\"sign\":\"dsa\",\"hash\":\"sha224\",\"id\":\"\"},\"DSA-SHA224\":{\"sign\":\"dsa\",\"hash\":\"sha224\",\"id\":\"\"},\"DSA-WITH-SHA256\":{\"sign\":\"dsa\",\"hash\":\"sha256\",\"id\":\"\"},\"DSA-SHA256\":{\"sign\":\"dsa\",\"hash\":\"sha256\",\"id\":\"\"},\"DSA-WITH-SHA384\":{\"sign\":\"dsa\",\"hash\":\"sha384\",\"id\":\"\"},\"DSA-SHA384\":{\"sign\":\"dsa\",\"hash\":\"sha384\",\"id\":\"\"},\"DSA-WITH-SHA512\":{\"sign\":\"dsa\",\"hash\":\"sha512\",\"id\":\"\"},\"DSA-SHA512\":{\"sign\":\"dsa\",\"hash\":\"sha512\",\"id\":\"\"},\"DSA-RIPEMD160\":{\"sign\":\"dsa\",\"hash\":\"rmd160\",\"id\":\"\"},\"ripemd160WithRSA\":{\"sign\":\"rsa\",\"hash\":\"rmd160\",\"id\":\"3021300906052b2403020105000414\"},\"RSA-RIPEMD160\":{\"sign\":\"rsa\",\"hash\":\"rmd160\",\"id\":\"3021300906052b2403020105000414\"},\"md5WithRSAEncryption\":{\"sign\":\"rsa\",\"hash\":\"md5\",\"id\":\"3020300c06082a864886f70d020505000410\"},\"RSA-MD5\":{\"sign\":\"rsa\",\"hash\":\"md5\",\"id\":\"3020300c06082a864886f70d020505000410\"}}","module.exports={\"1.3.132.0.10\":\"secp256k1\",\"1.3.132.0.33\":\"p224\",\"1.2.840.10045.3.1.1\":\"p192\",\"1.2.840.10045.3.1.7\":\"p256\",\"1.3.132.0.34\":\"p384\",\"1.3.132.0.35\":\"p521\"}","module.exports={\"modp1\":{\"gen\":\"02\",\"prime\":\"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a63a3620ffffffffffffffff\"},\"modp2\":{\"gen\":\"02\",\"prime\":\"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece65381ffffffffffffffff\"},\"modp5\":{\"gen\":\"02\",\"prime\":\"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca237327ffffffffffffffff\"},\"modp14\":{\"gen\":\"02\",\"prime\":\"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aacaa68ffffffffffffffff\"},\"modp15\":{\"gen\":\"02\",\"prime\":\"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a93ad2caffffffffffffffff\"},\"modp16\":{\"gen\":\"02\",\"prime\":\"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c934063199ffffffffffffffff\"},\"modp17\":{\"gen\":\"02\",\"prime\":\"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c93402849236c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bdf8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1bdb7f1447e6cc254b332051512bd7af426fb8f401378cd2bf5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6d55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f323a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aacc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be32806a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55cda56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee12bf2d5b0b7474d6e694f91e6dcc4024ffffffffffffffff\"},\"modp18\":{\"gen\":\"02\",\"prime\":\"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c93402849236c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bdf8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1bdb7f1447e6cc254b332051512bd7af426fb8f401378cd2bf5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6d55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f323a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aacc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be32806a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55cda56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee12bf2d5b0b7474d6e694f91e6dbe115974a3926f12fee5e438777cb6a932df8cd8bec4d073b931ba3bc832b68d9dd300741fa7bf8afc47ed2576f6936ba424663aab639c5ae4f5683423b4742bf1c978238f16cbe39d652de3fdb8befc848ad922222e04a4037c0713eb57a81a23f0c73473fc646cea306b4bcbc8862f8385ddfa9d4b7fa2c087e879683303ed5bdd3a062b3cf5b3a278a66d2a13f83f44f82ddf310ee074ab6a364597e899a0255dc164f31cc50846851df9ab48195ded7ea1b1d510bd7ee74d73faf36bc31ecfa268359046f4eb879f924009438b481c6cd7889a002ed5ee382bc9190da6fc026e479558e4475677e9aa9e3050e2765694dfc81f56e880b96e7160c980dd98edd3dfffffffffffffffff\"}}","module.exports={\"name\":\"elliptic\",\"version\":\"6.6.1\",\"description\":\"EC cryptography\",\"main\":\"lib/elliptic.js\",\"files\":[\"lib\"],\"scripts\":{\"lint\":\"eslint lib test\",\"lint:fix\":\"npm run lint -- --fix\",\"unit\":\"istanbul test _mocha --reporter=spec test/index.js\",\"test\":\"npm run lint && npm run unit\",\"version\":\"grunt dist && git add dist/\"},\"repository\":{\"type\":\"git\",\"url\":\"git@github.com:indutny/elliptic\"},\"keywords\":[\"EC\",\"Elliptic\",\"curve\",\"Cryptography\"],\"author\":\"Fedor Indutny <fedor@indutny.com>\",\"license\":\"MIT\",\"bugs\":{\"url\":\"https://github.com/indutny/elliptic/issues\"},\"homepage\":\"https://github.com/indutny/elliptic\",\"devDependencies\":{\"brfs\":\"^2.0.2\",\"coveralls\":\"^3.1.0\",\"eslint\":\"^7.6.0\",\"grunt\":\"^1.2.1\",\"grunt-browserify\":\"^5.3.0\",\"grunt-cli\":\"^1.3.2\",\"grunt-contrib-connect\":\"^3.0.0\",\"grunt-contrib-copy\":\"^1.0.0\",\"grunt-contrib-uglify\":\"^5.0.0\",\"grunt-mocha-istanbul\":\"^5.0.2\",\"grunt-saucelabs\":\"^9.0.1\",\"istanbul\":\"^0.4.5\",\"mocha\":\"^8.0.1\"},\"dependencies\":{\"bn.js\":\"^4.11.9\",\"brorand\":\"^1.1.0\",\"hash.js\":\"^1.0.0\",\"hmac-drbg\":\"^1.0.1\",\"inherits\":\"^2.0.4\",\"minimalistic-assert\":\"^1.0.1\",\"minimalistic-crypto-utils\":\"^1.0.1\"},\"_resolved\":\"https://registry.npmjs.org/elliptic/-/elliptic-6.6.1.tgz\",\"_integrity\":\"sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==\",\"_from\":\"elliptic@6.6.1\"}","module.exports={\"2.16.840.1.101.3.4.1.1\":\"aes-128-ecb\",\"2.16.840.1.101.3.4.1.2\":\"aes-128-cbc\",\"2.16.840.1.101.3.4.1.3\":\"aes-128-ofb\",\"2.16.840.1.101.3.4.1.4\":\"aes-128-cfb\",\"2.16.840.1.101.3.4.1.21\":\"aes-192-ecb\",\"2.16.840.1.101.3.4.1.22\":\"aes-192-cbc\",\"2.16.840.1.101.3.4.1.23\":\"aes-192-ofb\",\"2.16.840.1.101.3.4.1.24\":\"aes-192-cfb\",\"2.16.840.1.101.3.4.1.41\":\"aes-256-ecb\",\"2.16.840.1.101.3.4.1.42\":\"aes-256-cbc\",\"2.16.840.1.101.3.4.1.43\":\"aes-256-ofb\",\"2.16.840.1.101.3.4.1.44\":\"aes-256-cfb\"}","\"use strict\";\n\nwindow.pos = angular.module(\"pos\", [\"ui.router\", \"angular-storage\", \"ngAnimate\", \"pascalprecht.translate\", \"tmh.dynamicLocale\", \"ngCookies\", \"ngSanitize\", \"ddd-auth\", \"mgcrea.ngStrap\", \"720kb.datepicker\", \"angular-iscroll\", \"angular-loading-bar\", \"ngTouch\", \"chart.js\", \"dddAssets\", \"ngToast\"]).run(function ($rootScope, $state, $stateParams, $interval, $animate, backend, posInfoRepository, versionService, idleChecker, healthChecker) {\n  // just make sure that the version service is the very first thing being run\n  versionService.getVersion();\n  $rootScope.$state = $state;\n  $rootScope.showKeys = false;\n  $rootScope.showWidgets = false;\n  $rootScope.isPaymentPage = false;\n  $rootScope.$stateParams = $stateParams;\n  $rootScope.selectedItem = false;\n  $rootScope.selectedCustomer = false;\n  $rootScope.isDownPaymentBooking = false;\n  $rootScope.$watch(function () {\n    return backend.defaultDevice;\n  }, function (index) {\n    var device = backend.getDeviceByIndex(index);\n    if (device) {\n      posInfoRepository.api.saveDeviceConnection(device);\n    }\n  });\n  $rootScope.showLeftAside = function () {\n    $rootScope.$broadcast(\"showLeftAside\");\n  };\n  $rootScope.showRightAsideNotificationCenter = function () {\n    $rootScope.$broadcast(\"showRightAsideNotificationCenter\");\n  };\n  $rootScope.showRightAsideArmSelector = function () {\n    $rootScope.$broadcast(\"showRightAsideArmSelector\");\n  };\n  $rootScope.currentDate = new Date();\n  var updateTime = $interval(function () {\n    $rootScope.currentDate = new Date();\n  }, 1000, 0); // every second\n  healthChecker.init();\n  // Logic below disallows users to have multiple tabs\n  var pageOpenedOn = Date.now().toString();\n  localStorage.setItem(\"openPage\", pageOpenedOn);\n  window.addEventListener(\"focus\", function () {\n    var latestPageOpenedOn = localStorage.getItem(\"openPage\");\n    if (latestPageOpenedOn !== pageOpenedOn) {\n      $rootScope.$state.go(\"invalidTabs\");\n    }\n  });\n  $rootScope.$on(\"$stateChangeStart\", function (event, toState, toParams, fromState, fromParams) {\n    if (fromState.name === \"invalidTabs\") {\n      event.preventDefault();\n      $rootScope.$state.go(\"invalidTabs\");\n    }\n  });\n\n  // Event for redirecting a route if the option is set.\n  // It needs to be set manually, it does not happen automatically by ui-router\n  $rootScope.$on(\"$stateChangeError\", function (event, toState, toParams, fromState, fromParams, error) {\n    if (IN_DEBUG_MODE) console.log(\"stateChangeError:\");\n    if (IN_DEBUG_MODE) console.log(error);\n    if (error && error.routeTo) $state.go(error.routeTo);\n  });\n}).config(function ($stateProvider, $urlRouterProvider, $touchProvider, backendProvider) {\n  backendProvider.apiUrl = \"DDD_API_URL_PLACEHOLDER\";\n  //$qProvider.errorOnUnhandledRejections(false);\n\n  $touchProvider.ngClickOverrideEnabled(true);\n  var widgets = {\n    templateUrl: \"views/widgets/widget-list\",\n    controller: \"WidgetsCtrl\"\n  };\n  var selectConnector = {\n    templateUrl: \"views/payment/payment-widget\",\n    controller: \"PayWidgetCtrl\"\n  };\n  var navigation = {\n    templateUrl: \"views/partials/rightmenu-wrapper\",\n    controller: \"RightMenuNavCtrl\"\n  };\n  $urlRouterProvider.otherwise(\"/\");\n  $stateProvider.state(\"root\", {\n    \"abstract\": true,\n    resolve: {\n      init: function init(posConfig) {\n        return posConfig.init();\n      }\n    },\n    views: {\n      header: {\n        templateUrl: \"views/shared/header\",\n        controller: \"HeaderCtrl\"\n      }\n    }\n  }).state(\"root.split\", {\n    \"abstract\": true,\n    views: {\n      \"content@\": {\n        templateUrl: \"views/shared/threesplit\",\n        controller: function controller($log) {\n          $log.debug(\"Creating three split view\");\n        }\n      }\n    }\n  }).state(\"root.twosplit\", {\n    \"abstract\": true,\n    views: {\n      \"content@\": {\n        templateUrl: \"views/shared/twosplit\",\n        controller: function controller($log) {\n          $log.debug(\"Creating twosplit split view\");\n        }\n      }\n    }\n  }).state(\"root.login\", {\n    url: \"/\",\n    views: {\n      \"content@\": {\n        templateUrl: \"views/login/login\",\n        controller: \"ClerkLoginCtrl\"\n      }\n    }\n  }).state(\"root.logout\", {\n    views: {\n      \"content@\": {\n        controller: function controller($state, clerkLoginService) {\n          clerkLoginService.logout();\n          $state.go(\"root.login\");\n        }\n      }\n    }\n  }).state(\"root.split.pos\", {\n    url: \"/pos\",\n    views: {\n      left: widgets,\n      middle: {\n        templateUrl: \"views/receipt/receipt\",\n        controller: \"ReceiptCtrl\"\n      },\n      right: navigation\n    }\n  }).state(\"root.split.selectdimensioncombo\", {\n    url: \"/select-dimension-combo\",\n    views: {\n      left: widgets,\n      middle: {\n        templateUrl: \"views/selectDimensionCombo/selectDimensionCombo\",\n        controller: \"SelectDimensionComboCtrl\"\n      },\n      right: navigation\n    }\n  }).state(\"root.split.payment\", {\n    url: \"/payment\",\n    params: {\n      type: null\n    },\n    views: {\n      left: {\n        templateUrl: \"views/payment/payment-widget\",\n        controller: \"PayWidgetCtrl\"\n      },\n      middle: {\n        templateUrl: \"views/payment/payment\",\n        controller: \"PaymentCtrl\"\n      },\n      right: {\n        templateUrl: \"views/partials/rightmenu-wrapper\",\n        controller: \"RightMenuPayCtrl\"\n      }\n    }\n  }).state(\"root.split.paymentfinished\", {\n    url: \"/payment-finished\",\n    views: {\n      left: {\n        templateUrl: \"views/payment/payment-widget\",\n        controller: \"PayWidgetCtrl\"\n      },\n      middle: {\n        templateUrl: \"views/payment/payment-finished\",\n        controller: \"PaymentFinishedCtrl\"\n      },\n      right: {\n        templateUrl: \"views/partials/rightmenu-wrapper\",\n        controller: \"RightMenuPayCtrl\"\n      }\n    },\n    params: {\n      savedReceipt: false,\n      rightMenuDisabled: true\n    }\n  }).state(\"root.split.payment.receipt\", {\n    views: {\n      screenChangeAction: {\n        templateUrl: \"views/partials/payment-finish-button\"\n      }\n    }\n  }).state(\"root.about\", {\n    url: \"/about/{name}\",\n    views: {\n      \"content@\": {\n        templateUrl: \"views/about/index\",\n        controller: function controller($scope) {\n          $scope.name = $scope.$stateParams.name;\n        }\n      }\n    }\n  }).state(\"root.split.itemgroup\", {\n    url: \"/itemgroup\",\n    views: {\n      left: widgets,\n      middle: {\n        templateUrl: \"views/itemgroup/itemgroup\",\n        controller: \"ItemgroupCtrl\"\n      },\n      right: navigation\n    }\n  }).state(\"root.split.shortcuts\", {\n    url: \"/item-shortcuts\",\n    views: {\n      left: widgets,\n      middle: {\n        templateUrl: \"views/itemshortcuts/item-shortcuts\",\n        controller: \"ItemShortcutsCtrl\"\n      },\n      right: navigation\n    }\n  }).state(\"root.split.giftcertificate\", {\n    url: \"/giftcertificate\",\n    views: {\n      left: widgets,\n      middle: {\n        templateUrl: \"views/giftcertificate/giftcertificate\",\n        controller: \"GiftCertificateCtrl\"\n      },\n      right: navigation\n    }\n  }).state(\"root.split.downpaymentcertificate\", {\n    url: \"/downpaymentcertificate\",\n    views: {\n      left: widgets,\n      middle: {\n        templateUrl: \"views/downpayment/downpaymentcertificate\",\n        controller: \"DownPaymentCertificateCtrl\"\n      },\n      right: navigation\n    }\n  }).state(\"root.split.accountdeposit\", {\n    url: \"/account-deposit\",\n    views: {\n      left: widgets,\n      middle: {\n        templateUrl: \"views/depositaccount/depositaccount\",\n        controller: \"AccountDepositCtrl\"\n      },\n      right: navigation\n    }\n  }).state(\"root.split.sellasset\", {\n    url: \"/sellasset\",\n    views: {\n      left: widgets,\n      middle: {\n        templateUrl: \"views/sellasset/sellasset\",\n        controller: \"SellAsSetCtrl\"\n      },\n      right: navigation\n    }\n  }).state(\"root.split.searcharticle\", {\n    url: \"/search/:context\",\n    views: {\n      left: widgets,\n      middle: {\n        templateUrl: \"views/searcharticle/searcharticle\",\n        controller: \"SearchArticleCtrl\"\n      },\n      right: navigation\n    }\n  }).state(\"root.split.expense\", {\n    url: \"/expense\",\n    resolve: {\n      emptyReceipt: function emptyReceipt(receipt, $state, $q, $translate, notification) {\n        // allow the state change if the receipt is empty\n        if (receipt.isEmpty()) return $q.resolve();\n        // if receipt is not empty reject and redirect back to pos screen\n        $translate(\"toast/claim message\").then(function (translation) {\n          notification.pop(\"warning\", translation);\n        });\n        return $q.reject({\n          routeTo: \"root.split.pos\"\n        });\n      }\n    },\n    views: {\n      left: widgets,\n      middle: {\n        templateUrl: \"views/itemgroup/itemgroup\",\n        controller: \"ExpenseCtrl\"\n      },\n      right: navigation\n    }\n  }).state(\"root.split.xreport\", {\n    url: \"/xreport\",\n    views: {\n      left: {\n        templateUrl: \"views/payment/payment-widget\",\n        controller: \"PayWidgetCtrl\"\n      },\n      middle: {\n        templateUrl: \"views/xreport/xreport\",\n        controller: \"ConnectorXReportCtrl\"\n      },\n      right: navigation\n    }\n  }).state(\"root.split.cashstatement\", {\n    url: \"/cashstatement\",\n    views: {\n      left: {\n        templateUrl: \"views/payment/payment-widget\",\n        controller: \"PayWidgetCtrl\"\n      },\n      middle: {\n        templateUrl: \"views/cashstatement/drawer-selection\",\n        controller: \"CashStatementCtrl\"\n      }\n    }\n  }).state(\"root.split.cashstatement.drawer\", {\n    url: \"/:id\",\n    views: {\n      \"middle@root.split\": {\n        templateUrl: \"views/cashstatement/cashstatement\",\n        controller: \"CashStatementCtrl\"\n      },\n      \"right@root.split\": {\n        templateUrl: \"views/partials/rightmenu-wrapper\",\n        controller: \"ReconcilePayCtrl\"\n      }\n    }\n  }).state(\"root.split.morningamount\", {\n    url: \"/morningamount\",\n    views: {\n      left: {\n        templateUrl: \"views/payment/payment-widget\",\n        controller: \"PayWidgetCtrl\"\n      },\n      middle: {\n        templateUrl: \"views/cashstatement/drawer-selection\",\n        controller: \"MorningAmountCtrl\"\n      }\n    }\n  }).state(\"root.split.morningamount.drawer\", {\n    url: \"/:id\",\n    views: {\n      \"middle@root.split\": {\n        templateUrl: \"views/cashstatement/morningamount\",\n        controller: \"MorningAmountCtrl\"\n      }\n    }\n  }).state(\"root.split.terminalfunctions\", {\n    url: \"/cardterminalactions\",\n    views: {\n      left: widgets,\n      middle: {\n        templateUrl: \"views/cardterminalactions/cardterminalaction\",\n        controller: \"CardTerminalActionCtrl\"\n      },\n      right: {\n        templateUrl: \"views/partials/rightmenu-wrapper\",\n        controller: \"CardTerminalRightMenuCtrl\"\n      }\n    }\n  }).state(\"root.split.journals\", {\n    url: \"/journals\",\n    views: {\n      left: widgets,\n      middle: {\n        templateUrl: \"views/cardterminalactions/journals\",\n        controller: \"JournalsCtrl\"\n      },\n      right: navigation\n    }\n  }).state(\"root.split.saft\", {\n    url: \"/saft\",\n    views: {\n      left: widgets,\n      middle: {\n        templateUrl: \"views/cardterminalactions/saft\",\n        controller: \"SaftCtrl\"\n      },\n      right: navigation\n    }\n  }).state(\"root.split.parkedreceipts\", {\n    url: \"/parked\",\n    views: {\n      left: widgets,\n      middle: {\n        templateUrl: \"views/receipt/parked-receipts\",\n        controller: \"ParkedReceiptsCtrl\"\n      },\n      right: navigation\n    }\n  }).state(\"root.split.findreceipt\", {\n    url: \"/receipts\",\n    views: {\n      left: widgets,\n      middle: {\n        templateUrl: \"views/receipt/findreceipt\",\n        controller: \"FindReceiptCtrl\"\n      },\n      right: navigation\n    }\n  }).state(\"root.split.picklist\", {\n    url: \"/picklist\",\n    views: {\n      left: widgets,\n      middle: {\n        templateUrl: \"views/picklist/picklist\",\n        controller: \"PicklistCtrl\"\n      },\n      right: navigation\n    }\n  }).state(\"root.split.customer-purchases\", {\n    url: \"/receipts/:customerNo\",\n    views: {\n      left: widgets,\n      middle: {\n        templateUrl: \"views/receipt/findreceipt\",\n        controller: \"FindReceiptCtrl\"\n      },\n      right: navigation\n    }\n  }).state(\"root.split.widgetpane\", {\n    url: \"/widget/{widgetName}\",\n    views: {\n      left: widgets,\n      middle: {\n        templateUrl: \"views/widgets/main-pane\",\n        cache: false,\n        controller: \"mainPaneWidgetCtrl\"\n      },\n      right: navigation\n    }\n  }).state(\"root.split.revidefindcustomer\", {\n    url: \"/findcustomer\",\n    views: {\n      left: widgets,\n      middle: {\n        templateUrl: \"views/revide/findcustomer\",\n        cache: false,\n        controller: \"RevideIntegrationController as revide\"\n      },\n      right: navigation\n    }\n  }).state(\"debug\", {\n    url: \"/debug\",\n    views: {\n      \"content@\": {\n        templateUrl: \"views/debug/debug\",\n        controller: \"DebugController\"\n      }\n    }\n  }).state(\"root.split.pickweborder\", {\n    url: \"/pickweborder/{orderNo}\",\n    views: {\n      left: widgets,\n      middle: {\n        templateUrl: \"views/weborder/pickweborder\",\n        controller: \"PickWeborderController\"\n      },\n      right: navigation\n    }\n  }).state(\"root.split.downpayment-searchcustomer\", {\n    url: \"/downpayment/searchcustomer\",\n    views: {\n      left: widgets,\n      middle: {\n        templateUrl: \"views/downpayment/search-customer\",\n        controller: \"DownPaymentSearchCustomerController\"\n      },\n      right: navigation\n    }\n  }).state(\"root.split.downpayment-selectcustomer\", {\n    url: \"/downpayment/selectcustomer\",\n    views: {\n      left: widgets,\n      middle: {\n        templateUrl: \"views/downpayment/select-customer\",\n        controller: \"DownPaymentSelectCustomerController\"\n      },\n      right: navigation\n    }\n  }).state(\"root.split.downpayment-editcustomer\", {\n    url: \"/downpayment/editcustomer\",\n    views: {\n      left: widgets,\n      middle: {\n        templateUrl: \"views/downpayment/edit-customer\",\n        controller: \"DownPaymentEditCustomerController\"\n      },\n      right: navigation\n    }\n  }).state(\"root.split.downpayment-selectbillingaddress\", {\n    url: \"/downpayment/selectbillingaddress\",\n    views: {\n      left: widgets,\n      middle: {\n        templateUrl: \"views/downpayment/select-billingaddress\",\n        controller: \"DownPaymentSelectBillingAddressController\"\n      },\n      right: navigation\n    }\n  }).state(\"root.split.downpayment-newaddress\", {\n    url: \"/downpayment/newaddress\",\n    views: {\n      left: widgets,\n      middle: {\n        templateUrl: \"views/downpayment/new-address\",\n        controller: \"DownPaymenNewAddressController\"\n      },\n      right: navigation\n    },\n    params: {\n      isBillingAddress: false\n    }\n  }).state(\"root.split.downpayment-shipment\", {\n    url: \"/downpayment/shipment\",\n    views: {\n      left: widgets,\n      middle: {\n        templateUrl: \"views/downpayment/shipment\",\n        controller: \"DownPaymentShipmentController\"\n      },\n      right: navigation\n    }\n  }).state(\"root.split.downpayment-shipmentaddress\", {\n    url: \"/downpayment/shipmentaddress\",\n    views: {\n      left: widgets,\n      middle: {\n        templateUrl: \"views/downpayment/shipment-address\",\n        controller: \"DownPaymentShipmentAddressController\"\n      },\n      right: navigation\n    }\n  }).state(\"root.split.downpayment-shipmentstore\", {\n    url: \"/downpayment/shipmentstore\",\n    views: {\n      left: widgets,\n      middle: {\n        templateUrl: \"views/downpayment/shipment-store\",\n        controller: \"DownPaymentShipmentStoreController\"\n      },\n      right: navigation\n    }\n  }).state(\"root.split.downpayment-articledetails\", {\n    url: \"/downpayment/articledetails\",\n    views: {\n      left: widgets,\n      middle: {\n        templateUrl: \"views/downpayment/article-details\",\n        controller: \"DownPaymentArticleDetailsController\"\n      },\n      right: navigation\n    }\n  }).state(\"root.split.check-downpayment\", {\n    url: \"/downpayment/check\",\n    views: {\n      left: widgets,\n      middle: {\n        templateUrl: \"views/downpayment/check-downpayment\",\n        controller: \"CheckDownpaymentController\"\n      },\n      right: navigation\n    }\n  }).state(\"root.split.downpayment-print\", {\n    url: \"/downpayment/print\",\n    views: {\n      \"content@\": {\n        templateUrl: \"views/downpayment/downpaymentprint\",\n        controller: \"DownPaymentPrintController\"\n      }\n    },\n    params: {\n      savedReceipt: false\n    }\n  }).state(\"root.split.downpayment-findbooking\", {\n    url: \"/downpayment/bookings/:customerNo\",\n    views: {\n      left: widgets,\n      middle: {\n        templateUrl: \"views/downpayment/downpaymentfindbooking\",\n        controller: \"DownPaymentFindBookingController\"\n      },\n      right: navigation\n    }\n  }).state(\"root.split.stock-lookup\", {\n    url: \"/article/stocklookup\",\n    views: {\n      left: widgets,\n      middle: {\n        templateUrl: \"views/downpayment/stockLookup\",\n        controller: \"StockLookupController\"\n      },\n      right: navigation\n    }\n  }).state(\"invalidTabs\", {\n    url: \"/invalidTabs\",\n    views: {\n      \"content@\": {\n        templateUrl: \"views/invalidTabs\"\n      }\n    }\n  });\n})\n/*\n.config(function($touchProvider) {\n  $touchProvider.ngClickOverrideEnabled(true);\n})\n*/.config(function ($asideProvider) {\n  angular.extend($asideProvider.defaults, {\n    container: \"body\",\n    html: true\n  });\n}).config(function ($logProvider) {\n  $logProvider.debugEnabled(IN_DEBUG_MODE);\n})\n\n// region 3rd party module configuration, i18n, l10n, angular-snap\n.config(function ($translateProvider, tmhDynamicLocaleProvider) {\n  \"use strict\";\n\n  tmhDynamicLocaleProvider.localeLocationPattern(\"assets/language/l10n/angular-locale_{{locale}}.js\");\n  $translateProvider.useStaticFilesLoader({\n    prefix: \"assets/language/i18n/json/\",\n    suffix: \".json\"\n  });\n  $translateProvider.useSanitizeValueStrategy(\"escaped\");\n  $translateProvider.fallbackLanguage(\"en-gb\");\n  $translateProvider.preferredLanguage(\"en-gb\");\n}).config(function (ngToastProvider) {\n  ngToastProvider.configure({\n    animation: \"slide\",\n    timeout: 5000,\n    additionalClasses: \"toasts\"\n  });\n}).config(function ($animateProvider) {\n  $animateProvider.classNameFilter(/ng-toast/);\n});\n\n//#region Directives\n//#endregion\n\n//#region Filters\npos.filter(\"getByProperty\", function () {\n  \"use strict\";\n\n  return function (propertyName, propertyValue, collection) {\n    var i = 0,\n      len = collection.length;\n    for (; i < len; i++) {\n      if (collection[i][propertyName] == +propertyValue) {\n        return collection[i];\n      }\n    }\n    return null;\n  };\n});\n\n// set the max precision in calculation - we use the same precision as C#'s decimal type\nDecimal.config({\n  precision: 30\n});\nDecimal.prototype.toDecimalPlacesUnrounded = toDecimalPlacesUnrounded;\nfunction toDecimalPlacesUnrounded(dp) {\n  var numberString = this.toString();\n  var parts = numberString.split(\".\");\n  // if there's no decimal point then there's nothing to do\n  if (parts.length === 1) return new Decimal(this);\n  var decimalPoints = parts[1];\n  var unroundedDecimalPoints = decimalPoints.substr(0, dp);\n  var unroundedDecimal = parts[0] + \".\" + unroundedDecimalPoints;\n  return new Decimal(unroundedDecimal);\n}\n(function () {\n  var decimal = Decimal;\n  Decimal = function Decimal(value, base) {\n    if (typeof value === \"string\") {\n      value = value.replace(\",\", \".\");\n    }\n    if (value === \"\" || isNaN(value)) {\n      return new decimal(NaN, base);\n    }\n    var d = new decimal(value, base);\n    return d;\n  };\n  Decimal.min = decimal.min;\n  Decimal.max = decimal.max;\n  Decimal.config = decimal.config;\n  Decimal.exp = decimal.exp;\n  Decimal.ln = decimal.ln;\n  Decimal.log = decimal.log;\n  Decimal.noConflict = decimal.noConflict;\n  Decimal.pow = decimal.pow;\n  Decimal.random = decimal.random;\n  Decimal.sqrt = decimal.sqrt;\n})();\nmoment.fn.toJSON = function () {\n  return this.format();\n};\nif (typeof String.prototype.startsWith != \"function\") {\n  String.prototype.startsWith = function (str) {\n    return this.slice(0, str.length) == str;\n  };\n}\nif (typeof String.prototype.endsWith != \"function\") {\n  String.prototype.endsWith = function (str) {\n    return this.slice(-str.length) == str;\n  };\n}\nif (typeof Array.prototype.indexOfDecimal != \"function\") {\n  Array.prototype.indexOfDecimal = function (decimal) {\n    for (var i = 0; i < this.length; i++) {\n      if (this[i].toNumber() == decimal.toNumber()) {\n        return i;\n      }\n    }\n    return -1;\n  };\n}\n","\"use strict\";\n\nangular.module(\"ddd-auth\").factory(\"tokenInterceptor\", function ($injector, $q) {\n  function replayRequest(config, deferredPromise) {\n    var $http = $injector.get(\"$http\");\n    $http(config).then(function (response) {\n      deferredPromise.resolve(response);\n    }, function (replayRequestError) {\n      deferredPromise.reject(replayRequestError);\n    });\n  }\n  return {\n    request: function request(config) {\n      // only inject auth headers on requests sent to our own API or to Virtual Connector\n      if (!config.device || !config.device.isApi && !config.device.isVirtual) {\n        return config;\n      }\n      var tokenService = $injector.get(\"tokenService\");\n      config.headers = config.headers || {};\n      var token = tokenService.getToken();\n      if (token) {\n        config.headers.Authorization = \"Bearer \" + token;\n      }\n      if (config.device.isVirtual) {\n        config.headers[\"ConnectorId\"] = config.device.id;\n        config.headers[\"ReceiptPrinterMacAddress\"] = config.device.virtualConfiguration.receiptPrinterMacAddress;\n        config.headers[\"LabelPrinterMacAddress\"] = config.device.virtualConfiguration.labelPrinterMacAddress;\n      }\n      return config;\n    },\n    responseError: function responseError(rejection) {\n      var tokenService = $injector.get(\"tokenService\");\n      // stop here if:\n      // 1: the status is not 401 or 403 (unauth codes)\n      // 2: config.device is not set\n      // 3: config.device is set, but it's not an API call (i.e. a call to an ARM device)\n      if (rejection.status !== 401 && rejection.status !== 403 || !rejection.config.device || rejection.config.device && !rejection.config.device.isApi && !rejection.config.device.isVirtual) {\n        return $q.reject(rejection);\n      }\n      if (rejection.config.url === tokenService.getRequestTokenUrl()) {\n        return $q.reject(rejection);\n      }\n      var deferred = $q.defer();\n      tokenService.registerTokenRequestedCallbacks(function () {\n        replayRequest(rejection.config, deferred);\n      });\n      if (!tokenService.requestingToken) {\n        tokenService.refreshToken().then(null, function (refreshError) {\n          deferred.reject(refreshError);\n        });\n      }\n      return deferred.promise;\n    }\n  };\n}).config(function ($httpProvider) {\n  $httpProvider.interceptors.push(\"tokenInterceptor\");\n});\n","\"use strict\";\n\nangular.module(\"ddd-auth\", [\"ng\", \"ngCookies\", \"angular-storage\"]).provider(\"tokenService\", function () {\n  \"use strict\";\n\n  this.tokenStore = \"webposApiToken\";\n  this.refreshTokenStore = \"webposRefreshToken\";\n  var unauthorizedCallbacks = [];\n  this.registerUnauthorizedTokenRequestCallback = function (callback) {\n    unauthorizedCallbacks.push(callback);\n  };\n  this.$get = function (tokenRepository, $q, posStorage, indexdb) {\n    var tokenService = {};\n    var provider = this;\n    tokenService.tokenRequestCallbacks = [];\n    tokenService.requestRefreshToken = function (username, password, clientid) {\n      var deferred = $q.defer();\n      setRequesting(deferred);\n      tokenRepository.api.authorize(username, password, clientid).then(function (response, status) {\n        tokenService.setRefreshToken(response.data.refresh_token);\n        requestCallback(response, status, deferred);\n      }, function (error) {\n        requestError(error, deferred);\n      });\n      return deferred.promise;\n    };\n    tokenService.requestAuthToken = function (refreshToken, clientid) {\n      var deferred = $q.defer();\n      setRequesting(deferred);\n      tokenRepository.api.refreshAuthToken(refreshToken, clientid).then(function (response, status) {\n        requestCallback(response, status, deferred);\n      }, function (error) {\n        requestError(error, deferred);\n      });\n      return deferred.promise;\n    };\n    function setRequesting(deferred) {\n      tokenService.requestingToken = true;\n      deferred.promise[\"finally\"](function () {\n        tokenService.requestingToken = false;\n      });\n    }\n    function requestCallback(response, status, deferred) {\n      var token = response.data.token || response.data.access_token;\n      var refreshToken = response.data.refresh_token;\n      console.log(\"Code:1000 requestCallback token:\" + token);\n      console.log(\"Code:1001 requestCallback refreshToken:\" + refreshToken);\n      if (token) {\n        tokenService.setToken(token);\n        tokenService.setRefreshToken(refreshToken);\n        deferred.resolve(response);\n        while (tokenService.tokenRequestCallbacks.length > 0) {\n          tokenService.tokenRequestCallbacks.shift()();\n        }\n      } else deferred.reject(\"No token available in data\");\n    }\n    function requestError(error, deferred) {\n      deferred.reject(error);\n      // we dont want to be do the unauth rutine if the API /token is just unavailable\n      if (error.status === 401 || error.status === 403 || error.status === 400) doUnauthorizedCallbacks(error);\n    }\n    function doUnauthorizedCallbacks(error) {\n      tokenService.tokenRequestCallbacks = [];\n      for (var i = 0; i < unauthorizedCallbacks.length; i++) {\n        unauthorizedCallbacks[i](error);\n      }\n    }\n    tokenService.setupToken = function (credentials) {\n      var client_id = credentials.client_id || this.getTokenClientId();\n      this.setTokenClientId(client_id);\n      if (!this.getRefreshToken()) return this.requestRefreshToken(credentials.username, credentials.password, client_id);else return this.requestAuthToken(this.getRefreshToken(), this.getTokenClientId());\n    };\n    tokenService.refreshToken = function () {\n      if (!this.getRefreshToken() || !this.getTokenClientId()) return $q.reject({\n        data: {\n          error: \"No refresh token or client_id available\"\n        }\n      });\n      return this.requestAuthToken(this.getRefreshToken(), this.getTokenClientId());\n    };\n    tokenService.getRequestTokenUrl = function () {\n      return tokenRepository.api.tokenRequestUrl;\n    };\n    tokenService.registerTokenRequestedCallbacks = function (callback) {\n      this.tokenRequestCallbacks.push(callback);\n    };\n    tokenService.registerUnauthorizedTokenRequestCallback = function (callback) {\n      provider.registerUnauthorizedTokenRequestCallback(callback);\n    };\n    tokenService.getUnauthorizedTokenRequestCallbacks = function () {\n      return unauthorizedCallbacks;\n    };\n    tokenService.getToken = function () {\n      var temp = posStorage.get(provider.tokenStore);\n      return temp;\n    };\n    tokenService.setToken = function (token) {\n      if (!token) return posStorage.remove(provider.tokenStore);\n      posStorage.set(provider.tokenStore, token);\n    };\n    tokenService.getRefreshToken = function () {\n      console.log(\"Code:1003 tokenService.getRefreshToken refreshToken:\" + provider.refreshTokenStore);\n      return posStorage.get(provider.refreshTokenStore);\n    };\n    tokenService.setRefreshToken = function (token) {\n      if (!token) return posStorage.remove(provider.refreshTokenStore);\n      console.log(\"Code:1002 tokenService.setRefreshToken refreshToken:\" + provider.refreshTokenStore + \" - Token:\" + token);\n      posStorage.set(provider.refreshTokenStore, token);\n    };\n    tokenService.getTokenClientId = function () {\n      return posStorage.get(\"client_id\");\n    };\n    tokenService.setTokenClientId = function (clientid) {\n      if (\"serviceWorker\" in navigator) {\n        indexdb.serviceWorkerConstants.set(\"clientId\", clientid);\n      }\n      return posStorage.set(\"client_id\", clientid);\n    };\n    return tokenService;\n  };\n});\n","\"use strict\";\n\npos.controller(\"CardTerminalActionCtrl\", function ($scope, backend, terminalActionService, receipt, sales, $log, cardTransactionStatus) {\n  var partialsPath = \"views/cardterminalactions/\";\n  $scope.isCompleted = false;\n  $scope.$watch(function () {\n    return backend.defaultDevice;\n  }, function (index) {\n    var armDevice = backend.devices[index];\n    $scope.defaultArm = armDevice ? armDevice : {\n      deviceName: \"Select K3 Connector\"\n    };\n  });\n  function initiateAction(serviceMethod, success, error) {\n    $scope.isCompleted = false;\n    $scope.actionTemplate = partialsPath + \"basic-feedback\";\n    function actionEventHandler(event) {\n      $scope.action = event.name;\n      $scope.awaitingResponse = true;\n      terminalActionService[serviceMethod]().then(function (response) {\n        var sessionId = response.data.d;\n        var device = response.config.device;\n        return getTerminalStatus(device.id, sessionId);\n      }).then(success, error)[\"finally\"](function () {\n        $scope.awaitingResponse = false;\n      });\n    }\n    return actionEventHandler;\n  }\n  function getTerminalStatus(deviceId, sessionId) {\n    return terminalActionService.getTerminalStatus(deviceId, sessionId).then(function (response) {\n      var status = response.data.d;\n      if (!status) {\n        $scope.actionFeedback = \"Invalid response\";\n        return;\n      }\n      $scope.actionFeedback = status.displayText || $scope.actionFeedback;\n      if (status.bonText) {\n        return sales.printTerminalReceipt(status.bonText).then(function () {\n          return getTerminalStatus(deviceId, sessionId);\n        });\n      }\n      if (status.result >= 0) return response;\n      return getTerminalStatus(deviceId, sessionId);\n    });\n  }\n  function cancelTransaction(event) {\n    $scope.actionTemplate = partialsPath + \"basic-feedback\";\n    $scope.action = \"cancelTransaction\";\n    $scope.awaitingResponse = true;\n    $scope.isCompleted = false;\n    var canceledReceipt;\n    terminalActionService.terminalCancellationRequest().then(function (response) {\n      var sessionId = response.data.d.sessionId;\n      canceledReceipt = response.data.d.receipt;\n      var device = response.config.device;\n      return getTerminalStatus(device.id, sessionId);\n    }, showError).then(function (response) {\n      receipt.prepareReceipt();\n      var newReceipt = receipt.getReceipt();\n      newReceipt.items = canceledReceipt.items;\n      newReceipt.payments = canceledReceipt.payments;\n      receipt.loadReceipt(newReceipt);\n      receipt.negateReceipt();\n      return sales.saveSale().then(function (saveResponse) {\n        sales.completeSaleOnDevice(response.config.device.id);\n        setCompleted();\n      })[\"finally\"](receipt.prepareReceipt);\n    })[\"finally\"](function () {\n      $scope.awaitingResponse = false;\n    });\n  }\n  function showError(response) {\n    $log.debug(response);\n    $scope.actionFeedback = response.data.message;\n  }\n  function setCompleted() {\n    $scope.isCompleted = true;\n  }\n  $scope.shouldDisableInput = function () {\n    return $scope.awaitingResponse;\n  };\n  $scope.$on(\"$stateChangeStart\", function (event, toState, toParams, fromState, fromParams, options) {\n    if ($scope.shouldDisableInput()) event.preventDefault();\n  });\n  $scope.$on(\"terminal:reconciliation\", initiateAction(\"terminalEndOfDay\", setCompleted, showError));\n  $scope.$on(\"terminal:emptybuffer\", initiateAction(\"terminalEmptyPrintBuffer\", setCompleted, showError));\n  $scope.$on(\"terminal:canceltransaction\", cancelTransaction);\n  $scope.$on(\"terminal:xreport\", initiateAction(\"terminalXReport\", setCompleted, showError));\n  $scope.$on(\"terminal:zreport\", initiateAction(\"terminalZReport\", setCompleted, showError));\n  $scope.$on(\"terminal:sendofflinetrans\", initiateAction(\"terminalSendOfflineTransactions\", setCompleted, showError));\n  $scope.$on(\"terminal:print:storedeottrans\", initiateAction(\"terminalPrintStoresTransactions\", setCompleted, showError));\n  $scope.$on(\"terminal:download:app\", initiateAction(\"terminalDownloadApplication\", setCompleted, showError));\n  $scope.$on(\"terminal:download:cardagreements\", initiateAction(\"terminalDownloadCardAgreements\", setCompleted, showError));\n  $scope.$on(\"terminal:print:lastreceipt\", initiateAction(\"terminalPrintLatestReceipt\", function () {\n    setCompleted();\n    cardTransactionStatus.stop();\n  }, showError));\n});\n","\"use strict\";\n\npos.factory(\"terminalActionService\", function (terminalActionRepository) {\n  var service = {};\n  createAction(\"terminalEndOfDay\");\n  createAction(\"terminalCancellationRequest\");\n  createAction(\"terminalXReport\");\n  createAction(\"terminalSendOfflineTransactions\");\n  createAction(\"terminalDownloadApplication\");\n  createAction(\"terminalEmptyPrintBuffer\");\n  createAction(\"terminalPrintLatestReceipt\");\n  createAction(\"terminalZReport\");\n  createAction(\"terminalPrintStoresTransactions\");\n  createAction(\"terminalDownloadCardAgreements\");\n  service.getTerminalStatus = function (deviceId, sessionId) {\n    return terminalActionRepository.getTerminalStatus(deviceId, sessionId);\n  };\n  function createAction(action) {\n    service[action] = function () {\n      return terminalActionRepository.device()[action]();\n    };\n  }\n  service.printTerminalJournal = function (from, to) {\n    return terminalActionRepository.device().printTerminalJournal(from, to);\n  };\n  service.printReceiptJournal = function (from, to) {\n    return terminalActionRepository.device().printReceiptJournal(from, to);\n  };\n  service.printSAFT = function (company, from, to) {\n    return terminalActionRepository.device().printSAFT(company, from, to);\n  };\n  service.getSAFTFileName = function (company, from, to) {\n    return terminalActionRepository.device().getSAFTFileName(company, from, to);\n  };\n  return service;\n});\n","\"use strict\";\n\npos.controller(\"CardTerminalRightMenuCtrl\", function ($scope, $rootScope) {\n  $scope.asideButtonsTemplate = \"views/cardterminalactions/rightmenucardterminalNetsDK\";\n  $rootScope.reconciliation = function () {\n    $rootScope.$broadcast(\"terminal:reconciliation\");\n  };\n  $rootScope.emptybuffer = function () {\n    $rootScope.$broadcast(\"terminal:emptybuffer\");\n  };\n  $rootScope.canceltransaction = function () {\n    $rootScope.$broadcast(\"terminal:canceltransaction\");\n  };\n  $rootScope.xreport = function () {\n    $rootScope.$broadcast(\"terminal:xreport\");\n  };\n  $rootScope.zreport = function () {\n    $rootScope.$broadcast(\"terminal:zreport\");\n  };\n  $rootScope.sendofflinetrans = function () {\n    $rootScope.$broadcast(\"terminal:sendofflinetrans\");\n  };\n  $rootScope.printstoredeottrans = function () {\n    $rootScope.$broadcast(\"terminal:print:storedeottrans\");\n  };\n  $rootScope.printlastreceipt = function () {\n    $rootScope.$broadcast(\"terminal:print:lastreceipt\");\n  };\n  $rootScope.downloadapp = function () {\n    $rootScope.$broadcast(\"terminal:download:app\");\n  };\n  $rootScope.downloadcardagreements = function () {\n    $rootScope.$broadcast(\"terminal:download:cardagreements\");\n  };\n});\n","\"use strict\";\n\npos.controller(\"JournalsCtrl\", function ($scope, terminalActionService, notification) {\n  $scope.fromPlaceholder = \"From\";\n  $scope.toPlaceholder = \"To\";\n  $scope.fromDate = new moment().format(\"D/MMM/YYYY\");\n  $scope.toDate = new moment().format(\"D/MMM/YYYY\");\n  $scope.maxDateInput = new Date().toDateString(\"dd/MMM/yyyy\");\n  $scope.printTerminalJournal = function () {\n    if (!validDates()) return;\n    var fromTerminal = moment($scope.fromDate).format(\"DD/MM/YYYY\");\n    var toTerminal = moment($scope.toDate).format(\"DD/MM/YYYY\");\n    terminalActionService.printTerminalJournal(fromTerminal, toTerminal).then(ok);\n  };\n  $scope.printReceiptJournal = function () {\n    if (!validDates()) return;\n    var from = moment($scope.fromDate).format(\"DD/MM/YYYY\");\n    var to = moment($scope.toDate).format(\"DD/MM/YYYY\");\n    terminalActionService.printReceiptJournal(from, to).then(ok);\n  };\n  function validDates() {\n    if ($scope.toDate > $scope.maxDateInput) {\n      $scope.toDate = $scope.maxDateInput;\n    }\n    if ($scope.fromDate > $scope.maxDateInput) {\n      $scope.fromDate = $scope.maxDateInput;\n    }\n    if ($scope.fromDate && $scope.toDate) return true;\n    notification.pop(\"error\", \"Incorrect date range\", \"Please select valid date ranges\");\n    return false;\n  }\n  function ok() {\n    notification.pop(\"success\", \"Done!\", \"\");\n  }\n});\n","\"use strict\";\n\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nvar _fileSaver = require(\"file-saver\");\nfunction _regeneratorRuntime() { \"use strict\"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return r; }; var t, r = {}, e = Object.prototype, n = e.hasOwnProperty, o = \"function\" == typeof Symbol ? Symbol : {}, i = o.iterator || \"@@iterator\", a = o.asyncIterator || \"@@asyncIterator\", u = o.toStringTag || \"@@toStringTag\"; function c(t, r, e, n) { return Object.defineProperty(t, r, { value: e, enumerable: !n, configurable: !n, writable: !n }); } try { c({}, \"\"); } catch (t) { c = function c(t, r, e) { return t[r] = e; }; } function h(r, e, n, o) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype); return c(a, \"_invoke\", function (r, e, n) { var o = 1; return function (i, a) { if (3 === o) throw Error(\"Generator is already running\"); if (4 === o) { if (\"throw\" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var u = n.delegate; if (u) { var c = d(u, n); if (c) { if (c === f) continue; return c; } } if (\"next\" === n.method) n.sent = n._sent = n.arg;else if (\"throw\" === n.method) { if (1 === o) throw o = 4, n.arg; n.dispatchException(n.arg); } else \"return\" === n.method && n.abrupt(\"return\", n.arg); o = 3; var h = s(r, e, n); if (\"normal\" === h.type) { if (o = n.done ? 4 : 2, h.arg === f) continue; return { value: h.arg, done: n.done }; } \"throw\" === h.type && (o = 4, n.method = \"throw\", n.arg = h.arg); } }; }(r, n, new Context(o || [])), !0), a; } function s(t, r, e) { try { return { type: \"normal\", arg: t.call(r, e) }; } catch (t) { return { type: \"throw\", arg: t }; } } r.wrap = h; var f = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var l = {}; c(l, i, function () { return this; }); var p = Object.getPrototypeOf, y = p && p(p(x([]))); y && y !== e && n.call(y, i) && (l = y); var v = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(l); function g(t) { [\"next\", \"throw\", \"return\"].forEach(function (r) { c(t, r, function (t) { return this._invoke(r, t); }); }); } function AsyncIterator(t, r) { function e(o, i, a, u) { var c = s(t[o], t, i); if (\"throw\" !== c.type) { var h = c.arg, f = h.value; return f && \"object\" == _typeof(f) && n.call(f, \"__await\") ? r.resolve(f.__await).then(function (t) { e(\"next\", t, a, u); }, function (t) { e(\"throw\", t, a, u); }) : r.resolve(f).then(function (t) { h.value = t, a(h); }, function (t) { return e(\"throw\", t, a, u); }); } u(c.arg); } var o; c(this, \"_invoke\", function (t, n) { function i() { return new r(function (r, o) { e(t, n, r, o); }); } return o = o ? o.then(i, i) : i(); }, !0); } function d(r, e) { var n = e.method, o = r.i[n]; if (o === t) return e.delegate = null, \"throw\" === n && r.i[\"return\"] && (e.method = \"return\", e.arg = t, d(r, e), \"throw\" === e.method) || \"return\" !== n && (e.method = \"throw\", e.arg = new TypeError(\"The iterator does not provide a '\" + n + \"' method\")), f; var i = s(o, r.i, e.arg); if (\"throw\" === i.type) return e.method = \"throw\", e.arg = i.arg, e.delegate = null, f; var a = i.arg; return a ? a.done ? (e[r.r] = a.value, e.next = r.n, \"return\" !== e.method && (e.method = \"next\", e.arg = t), e.delegate = null, f) : a : (e.method = \"throw\", e.arg = new TypeError(\"iterator result is not an object\"), e.delegate = null, f); } function w(t) { this.tryEntries.push(t); } function m(r) { var e = r[4] || {}; e.type = \"normal\", e.arg = t, r[4] = e; } function Context(t) { this.tryEntries = [[-1]], t.forEach(w, this), this.reset(!0); } function x(r) { if (null != r) { var e = r[i]; if (e) return e.call(r); if (\"function\" == typeof r.next) return r; if (!isNaN(r.length)) { var o = -1, a = function e() { for (; ++o < r.length;) if (n.call(r, o)) return e.value = r[o], e.done = !1, e; return e.value = t, e.done = !0, e; }; return a.next = a; } } throw new TypeError(_typeof(r) + \" is not iterable\"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, c(v, \"constructor\", GeneratorFunctionPrototype), c(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction), GeneratorFunction.displayName = c(GeneratorFunctionPrototype, u, \"GeneratorFunction\"), r.isGeneratorFunction = function (t) { var r = \"function\" == typeof t && t.constructor; return !!r && (r === GeneratorFunction || \"GeneratorFunction\" === (r.displayName || r.name)); }, r.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, c(t, u, \"GeneratorFunction\")), t.prototype = Object.create(v), t; }, r.awrap = function (t) { return { __await: t }; }, g(AsyncIterator.prototype), c(AsyncIterator.prototype, a, function () { return this; }), r.AsyncIterator = AsyncIterator, r.async = function (t, e, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(h(t, e, n, o), i); return r.isGeneratorFunction(e) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, g(v), c(v, u, \"Generator\"), c(v, i, function () { return this; }), c(v, \"toString\", function () { return \"[object Generator]\"; }), r.keys = function (t) { var r = Object(t), e = []; for (var n in r) e.unshift(n); return function t() { for (; e.length;) if ((n = e.pop()) in r) return t.value = n, t.done = !1, t; return t.done = !0, t; }; }, r.values = x, Context.prototype = { constructor: Context, reset: function reset(r) { if (this.prev = this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = \"next\", this.arg = t, this.tryEntries.forEach(m), !r) for (var e in this) \"t\" === e.charAt(0) && n.call(this, e) && !isNaN(+e.slice(1)) && (this[e] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0][4]; if (\"throw\" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(r) { if (this.done) throw r; var e = this; function n(t) { a.type = \"throw\", a.arg = r, e.next = t; } for (var o = e.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i[4], u = this.prev, c = i[1], h = i[2]; if (-1 === i[0]) return n(\"end\"), !1; if (!c && !h) throw Error(\"try statement without catch or finally\"); if (null != i[0] && i[0] <= u) { if (u < c) return this.method = \"next\", this.arg = t, n(c), !0; if (u < h) return n(h), !1; } } }, abrupt: function abrupt(t, r) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var n = this.tryEntries[e]; if (n[0] > -1 && n[0] <= this.prev && this.prev < n[2]) { var o = n; break; } } o && (\"break\" === t || \"continue\" === t) && o[0] <= r && r <= o[2] && (o = null); var i = o ? o[4] : {}; return i.type = t, i.arg = r, o ? (this.method = \"next\", this.next = o[2], f) : this.complete(i); }, complete: function complete(t, r) { if (\"throw\" === t.type) throw t.arg; return \"break\" === t.type || \"continue\" === t.type ? this.next = t.arg : \"return\" === t.type ? (this.rval = this.arg = t.arg, this.method = \"return\", this.next = \"end\") : \"normal\" === t.type && r && (this.next = r), f; }, finish: function finish(t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[2] === t) return this.complete(e[4], e[3]), m(e), f; } }, \"catch\": function _catch(t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[0] === t) { var n = e[4]; if (\"throw\" === n.type) { var o = n.arg; m(e); } return o; } } throw Error(\"illegal catch attempt\"); }, delegateYield: function delegateYield(r, e, n) { return this.delegate = { i: x(r), r: e, n: n }, \"next\" === this.method && (this.arg = t), f; } }, r; }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"next\", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"throw\", n); } _next(void 0); }); }; }\npos.controller(\"SaftCtrl\", function ($scope, $translate, terminalActionService, notification, posConfig) {\n  $scope.fromDate = moment().subtract(1, \"months\").format(\"DD/MM/YYYY\");\n  $scope.toDate = moment().format(\"DD/MM/YYYY\");\n  $scope.companyName = \"\";\n  init();\n  function init() {\n    return _init.apply(this, arguments);\n  }\n  function _init() {\n    _init = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee2() {\n      var translations;\n      return _regeneratorRuntime().wrap(function _callee2$(_context2) {\n        while (1) switch (_context2.prev = _context2.next) {\n          case 0:\n            _context2.next = 2;\n            return $translate([\"toast/SAFTReportComplete\", \"placeholder/SAFTCompany\", \"label/SAFTTo\", \"label/SAFTFrom\"]);\n          case 2:\n            translations = _context2.sent;\n            $scope.translations = translations;\n            $scope.successMessage = translations[\"toast/SAFTReportComplete\"];\n            $scope.companyNamePlaceholder = translations[\"placeholder/SAFTCompany\"];\n            $scope.toPlaceholder = translations[\"label/SAFTTo\"];\n            $scope.fromPlaceholder = translations[\"label/SAFTFrom\"];\n          case 8:\n          case \"end\":\n            return _context2.stop();\n        }\n      }, _callee2);\n    }));\n    return _init.apply(this, arguments);\n  }\n  $scope.printSAFT = /*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee() {\n    var from, to, company;\n    return _regeneratorRuntime().wrap(function _callee$(_context) {\n      while (1) switch (_context.prev = _context.next) {\n        case 0:\n          if (validDates()) {\n            _context.next = 2;\n            break;\n          }\n          return _context.abrupt(\"return\");\n        case 2:\n          if (validCompanyName()) {\n            _context.next = 4;\n            break;\n          }\n          return _context.abrupt(\"return\");\n        case 4:\n          from = moment($scope.fromDate, \"DD/MM/YYYY\").format(\"MM/DD/YYYY\");\n          to = moment($scope.toDate, \"DD/MM/YYYY\").format(\"MM/DD/YYYY\");\n          company = encodeURIComponent($scope.companyName);\n          terminalActionService.printSAFT(company, from, to).then(loadSAFTFile);\n          _context.t0 = notification;\n          _context.next = 11;\n          return $translate(\"toast/SAFTReportRequested\");\n        case 11:\n          _context.t1 = _context.sent;\n          _context.t0.pop.call(_context.t0, \"success\", _context.t1);\n        case 13:\n        case \"end\":\n          return _context.stop();\n      }\n    }, _callee);\n  }));\n\n  //https://stackoverflow.com/questions/5143504/how-to-create-and-download-an-xml-file-on-the-fly-using-javascript\n\n  function loadSAFTFile(response) {\n    var from = moment($scope.fromDate, \"DD/MM/YYYY\").format(\"MM/DD/YYYY\");\n    var to = moment($scope.toDate, \"DD/MM/YYYY\").format(\"MM/DD/YYYY\");\n    var company = encodeURIComponent($scope.companyName);\n    notification.pop(\"success\", $scope.successMessage);\n    terminalActionService.getSAFTFileName(company, from, to).then(function (filename) {\n      var myBlob = new Blob([response.data.d.Result], {\n        type: \"application/octet-stream\"\n      });\n      (0, _fileSaver.saveAs)(myBlob, filename.data.d.Result);\n    });\n  }\n  $scope.datepicker = {\n    date: new Date(\"2016-10-06T00:00:00.000Z\")\n  };\n  function validDates() {\n    if ($scope.fromDate && $scope.toDate) return true;\n    notification.pop(\"error\", \"Incorrect date range\", \"Please select valid date ranges\");\n    return false;\n  }\n  function validCompanyName() {\n    if ($scope.companyName) return true;\n    notification.pop(\"error\", \"Company Name is Required\", \"Please select valid date ranges\");\n    return false;\n  }\n});\n","\"use strict\";\n\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t[\"return\"] && (u = t[\"return\"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(r) { if (Array.isArray(r)) return r; }\nfunction _regeneratorRuntime() { \"use strict\"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return r; }; var t, r = {}, e = Object.prototype, n = e.hasOwnProperty, o = \"function\" == typeof Symbol ? Symbol : {}, i = o.iterator || \"@@iterator\", a = o.asyncIterator || \"@@asyncIterator\", u = o.toStringTag || \"@@toStringTag\"; function c(t, r, e, n) { return Object.defineProperty(t, r, { value: e, enumerable: !n, configurable: !n, writable: !n }); } try { c({}, \"\"); } catch (t) { c = function c(t, r, e) { return t[r] = e; }; } function h(r, e, n, o) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype); return c(a, \"_invoke\", function (r, e, n) { var o = 1; return function (i, a) { if (3 === o) throw Error(\"Generator is already running\"); if (4 === o) { if (\"throw\" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var u = n.delegate; if (u) { var c = d(u, n); if (c) { if (c === f) continue; return c; } } if (\"next\" === n.method) n.sent = n._sent = n.arg;else if (\"throw\" === n.method) { if (1 === o) throw o = 4, n.arg; n.dispatchException(n.arg); } else \"return\" === n.method && n.abrupt(\"return\", n.arg); o = 3; var h = s(r, e, n); if (\"normal\" === h.type) { if (o = n.done ? 4 : 2, h.arg === f) continue; return { value: h.arg, done: n.done }; } \"throw\" === h.type && (o = 4, n.method = \"throw\", n.arg = h.arg); } }; }(r, n, new Context(o || [])), !0), a; } function s(t, r, e) { try { return { type: \"normal\", arg: t.call(r, e) }; } catch (t) { return { type: \"throw\", arg: t }; } } r.wrap = h; var f = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var l = {}; c(l, i, function () { return this; }); var p = Object.getPrototypeOf, y = p && p(p(x([]))); y && y !== e && n.call(y, i) && (l = y); var v = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(l); function g(t) { [\"next\", \"throw\", \"return\"].forEach(function (r) { c(t, r, function (t) { return this._invoke(r, t); }); }); } function AsyncIterator(t, r) { function e(o, i, a, u) { var c = s(t[o], t, i); if (\"throw\" !== c.type) { var h = c.arg, f = h.value; return f && \"object\" == _typeof(f) && n.call(f, \"__await\") ? r.resolve(f.__await).then(function (t) { e(\"next\", t, a, u); }, function (t) { e(\"throw\", t, a, u); }) : r.resolve(f).then(function (t) { h.value = t, a(h); }, function (t) { return e(\"throw\", t, a, u); }); } u(c.arg); } var o; c(this, \"_invoke\", function (t, n) { function i() { return new r(function (r, o) { e(t, n, r, o); }); } return o = o ? o.then(i, i) : i(); }, !0); } function d(r, e) { var n = e.method, o = r.i[n]; if (o === t) return e.delegate = null, \"throw\" === n && r.i[\"return\"] && (e.method = \"return\", e.arg = t, d(r, e), \"throw\" === e.method) || \"return\" !== n && (e.method = \"throw\", e.arg = new TypeError(\"The iterator does not provide a '\" + n + \"' method\")), f; var i = s(o, r.i, e.arg); if (\"throw\" === i.type) return e.method = \"throw\", e.arg = i.arg, e.delegate = null, f; var a = i.arg; return a ? a.done ? (e[r.r] = a.value, e.next = r.n, \"return\" !== e.method && (e.method = \"next\", e.arg = t), e.delegate = null, f) : a : (e.method = \"throw\", e.arg = new TypeError(\"iterator result is not an object\"), e.delegate = null, f); } function w(t) { this.tryEntries.push(t); } function m(r) { var e = r[4] || {}; e.type = \"normal\", e.arg = t, r[4] = e; } function Context(t) { this.tryEntries = [[-1]], t.forEach(w, this), this.reset(!0); } function x(r) { if (null != r) { var e = r[i]; if (e) return e.call(r); if (\"function\" == typeof r.next) return r; if (!isNaN(r.length)) { var o = -1, a = function e() { for (; ++o < r.length;) if (n.call(r, o)) return e.value = r[o], e.done = !1, e; return e.value = t, e.done = !0, e; }; return a.next = a; } } throw new TypeError(_typeof(r) + \" is not iterable\"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, c(v, \"constructor\", GeneratorFunctionPrototype), c(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction), GeneratorFunction.displayName = c(GeneratorFunctionPrototype, u, \"GeneratorFunction\"), r.isGeneratorFunction = function (t) { var r = \"function\" == typeof t && t.constructor; return !!r && (r === GeneratorFunction || \"GeneratorFunction\" === (r.displayName || r.name)); }, r.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, c(t, u, \"GeneratorFunction\")), t.prototype = Object.create(v), t; }, r.awrap = function (t) { return { __await: t }; }, g(AsyncIterator.prototype), c(AsyncIterator.prototype, a, function () { return this; }), r.AsyncIterator = AsyncIterator, r.async = function (t, e, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(h(t, e, n, o), i); return r.isGeneratorFunction(e) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, g(v), c(v, u, \"Generator\"), c(v, i, function () { return this; }), c(v, \"toString\", function () { return \"[object Generator]\"; }), r.keys = function (t) { var r = Object(t), e = []; for (var n in r) e.unshift(n); return function t() { for (; e.length;) if ((n = e.pop()) in r) return t.value = n, t.done = !1, t; return t.done = !0, t; }; }, r.values = x, Context.prototype = { constructor: Context, reset: function reset(r) { if (this.prev = this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = \"next\", this.arg = t, this.tryEntries.forEach(m), !r) for (var e in this) \"t\" === e.charAt(0) && n.call(this, e) && !isNaN(+e.slice(1)) && (this[e] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0][4]; if (\"throw\" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(r) { if (this.done) throw r; var e = this; function n(t) { a.type = \"throw\", a.arg = r, e.next = t; } for (var o = e.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i[4], u = this.prev, c = i[1], h = i[2]; if (-1 === i[0]) return n(\"end\"), !1; if (!c && !h) throw Error(\"try statement without catch or finally\"); if (null != i[0] && i[0] <= u) { if (u < c) return this.method = \"next\", this.arg = t, n(c), !0; if (u < h) return n(h), !1; } } }, abrupt: function abrupt(t, r) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var n = this.tryEntries[e]; if (n[0] > -1 && n[0] <= this.prev && this.prev < n[2]) { var o = n; break; } } o && (\"break\" === t || \"continue\" === t) && o[0] <= r && r <= o[2] && (o = null); var i = o ? o[4] : {}; return i.type = t, i.arg = r, o ? (this.method = \"next\", this.next = o[2], f) : this.complete(i); }, complete: function complete(t, r) { if (\"throw\" === t.type) throw t.arg; return \"break\" === t.type || \"continue\" === t.type ? this.next = t.arg : \"return\" === t.type ? (this.rval = this.arg = t.arg, this.method = \"return\", this.next = \"end\") : \"normal\" === t.type && r && (this.next = r), f; }, finish: function finish(t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[2] === t) return this.complete(e[4], e[3]), m(e), f; } }, \"catch\": function _catch(t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[0] === t) { var n = e[4]; if (\"throw\" === n.type) { var o = n.arg; m(e); } return o; } } throw Error(\"illegal catch attempt\"); }, delegateYield: function delegateYield(r, e, n) { return this.delegate = { i: x(r), r: e, n: n }, \"next\" === this.method && (this.arg = t), f; } }, r; }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"next\", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"throw\", n); } _next(void 0); }); }; }\nvar _require = require(\"decimal.js\"),\n  Decimal = _require[\"default\"];\npos.controller(\"CashStatementCtrl\", function ($scope, $state, backend, cashStatements, notification, $translate, eventBus, $rootScope, receipt, findCustomerService, sales, clerkLoginService) {\n  \"use strict\";\n\n  var awaitingResponse = false;\n  var selectedIndex = -1;\n  $scope.expectedInDrawer = {}; // fetch from service\n  // this needs to be true when initializing, or we'll see the warning when loading the page\n  $scope.firstToday = true;\n  $scope.ready = false;\n  var i18nPleaseWait, i18nWaitingForDrawer, i18nConnectorFailedTitle, i18nConnectorFailedText, i18nOffline;\n  init();\n  $scope.devices = backend.devices;\n  $scope.apiOnline = backend.isOnline;\n  $scope.currentPaymentType = cashStatements.currentlyReconcilingPaymentType;\n  $scope.$watch(function () {\n    return cashStatements.currentlyReconcilingPaymentType;\n  }, function () {\n    return $scope.currentPaymentType = cashStatements.currentlyReconcilingPaymentType;\n  });\n  $scope.reconcilations = {};\n  $scope.getDeviceName = function (index) {\n    var device = backend.devices[index];\n    if (device) return device.deviceName;\n    return \"N/A\";\n  };\n  $scope.$on(\"device:offline\", function (event, device) {\n    $scope.apiOnline = false;\n  });\n  $scope.$on(\"device:retry:success\", function (event, device) {\n    $scope.apiOnline = true;\n  });\n  $scope.isSelected = function (index) {\n    return selectedIndex === index;\n  };\n  $scope.setSelected = function (index) {\n    selectedIndex = selectedIndex !== index ? index : -1;\n  };\n  $scope.getCashStatementTotal = function () {\n    var total = new Decimal(0);\n    angular.forEach($scope.reconcilations[$scope.currentPaymentType.type], function (currency) {\n      var local = new Decimal(cashStatements.covertValueToMachineCulture(currency.statementTotal || 0)).times(currency.currencyValue).div(100);\n      total = total.plus(local);\n    });\n    return total;\n  };\n  $scope.getDrawerDiffFromExpected = function () {\n    var expectedInDrawer = $scope.expectedInDrawer[$scope.currentPaymentType.type];\n    return expectedInDrawer ? $scope.getCashStatementTotal().minus(expectedInDrawer) : new Decimal(0);\n  };\n  $scope.reset = function () {\n    Object.values($scope.reconcilations).forEach(function (reconcilation) {\n      reconcilation.forEach(function (currency) {\n        currency.unitCounts.forEach(function (unit) {\n          unit.count = 0;\n          unit.amount = 0;\n        });\n        currency.statementTotal = null;\n        currency.bank = 0;\n        currency.eveningAmount = 0;\n      });\n    });\n  };\n  $scope.confirmModal = {\n    isVisible: false\n  };\n  $scope.openConfirm = function () {\n    $scope.confirmModal.isVisible = true;\n  };\n  $scope.confirmYes = function () {\n    $scope.confirmModal.isVisible = false;\n    $scope.submitCashStatement(); // run original function\n  };\n  $scope.confirmNo = function () {\n    $scope.confirmModal.isVisible = false; // just close\n  };\n  $scope.submitCashStatement = function () {\n    if (awaitingResponse) return notification.pop(\"info\", i18nPleaseWait);\n    if (!$scope.apiOnline) return notification.pop(\"info\", i18nOffline);\n    var cashDrawerInputs = angular.element(\".cash-drawer__list-input\");\n    for (var i = 0; i < cashDrawerInputs.length; i++) {\n      var cashDrawerInput = cashDrawerInputs[i];\n      if (!cashDrawerInput.value) {\n        cashDrawerInput.value = \"0\";\n      }\n    }\n    awaitingResponse = true;\n    cashStatements.makeCashStatement($scope.$stateParams.id, $scope.reconcilations).then(function () {\n      $scope.$state.go(\"root.login\");\n    }, function (errorResponse) {\n      if (errorResponse === \"NULL_CURRENCIES\") return notification.pop(\"info\", i18nPleaseWait, i18nWaitingForDrawer);\n      notification.pop(\"error\", i18nConnectorFailedTitle, i18nConnectorFailedText);\n    })[\"finally\"](function () {\n      awaitingResponse = false;\n    });\n  };\n  $scope.cancel = /*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee() {\n    return _regeneratorRuntime().wrap(function _callee$(_context) {\n      while (1) switch (_context.prev = _context.next) {\n        case 0:\n          receipt.clearReceipt();\n          findCustomerService.removeSelectedCustomer();\n          $rootScope.selectedItem = false;\n          $state.go(\"root.logout\");\n        case 4:\n        case \"end\":\n          return _context.stop();\n      }\n    }, _callee);\n  }));\n  function init() {\n    return _init.apply(this, arguments);\n  }\n  function _init() {\n    _init = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee3() {\n      var canProceed, translations, firstClosureToday, translate;\n      return _regeneratorRuntime().wrap(function _callee3$(_context3) {\n        while (1) switch (_context3.prev = _context3.next) {\n          case 0:\n            _context3.next = 2;\n            return eventBus.notifyAsync(eventBus.events.pos.cashStatementStart);\n          case 2:\n            canProceed = _context3.sent;\n            if (!canProceed) {\n              _context3.next = 16;\n              break;\n            }\n            _context3.next = 6;\n            return $translate([\"toast/offline-cashstatement\", \"toast/pleasewait\", \"toast/waitingfordrawerstatus\", \"toast/connector_failed_request_text\", \"toast/connector_failed_request_title\"]);\n          case 6:\n            translations = _context3.sent;\n            i18nOffline = translations[\"toast/offline-cashstatement\"];\n            i18nPleaseWait = translations[\"toast/pleasewait\"];\n            i18nWaitingForDrawer = translations[\"toast/waitingfordrawerstatus\"];\n            i18nConnectorFailedTitle = translations[\"toast/connector_failed_request_title\"];\n            i18nConnectorFailedText = translations[\"toast/connector_failed_request_text\"];\n            if ($scope.$stateParams.id !== undefined) {\n              firstClosureToday = false;\n              sales.openDrawer(clerkLoginService.currentUser().identifier, $scope.$stateParams.id);\n              cashStatements.getDrawerStatus($scope.$stateParams.id).then(function (currencies) {\n                $scope.reconcilations = currencies;\n                Object.entries($scope.reconcilations).forEach(function (_ref2) {\n                  var _ref3 = _slicedToArray(_ref2, 2),\n                    key = _ref3[0],\n                    values = _ref3[1];\n                  $scope.expectedInDrawer[key] = values.reduce(function (acc, cur) {\n                    return acc.plus(cur.amountInDrawer.times(new Decimal(cur.currencyValue).dividedBy(100)));\n                  }, new Decimal(0));\n                  firstClosureToday = firstClosureToday || values.some(function (o) {\n                    return o.firstToday;\n                  });\n                });\n              })[\"finally\"](function () {\n                $scope.firstToday = firstClosureToday;\n              });\n            }\n            $scope.ready = true;\n            _context3.next = 21;\n            break;\n          case 16:\n            _context3.next = 18;\n            return $translate(\"toast/prevent-cashstatement\");\n          case 18:\n            translate = _context3.sent;\n            notification.pop(\"warn\", translate);\n            $state.go(\"root.split.pos\");\n          case 21:\n          case \"end\":\n            return _context3.stop();\n        }\n      }, _callee3);\n    }));\n    return _init.apply(this, arguments);\n  }\n  eventBus.subscribe(eventBus.events.cashstatement.failed, null, function (ev, params) {\n    $scope.retryModal.buttons = [{\n      label: \"label/no\",\n      type: \"default\",\n      isDefault: false,\n      closes: true,\n      validateText: false,\n      action: function action() {\n        params.deferred.resolve();\n      }\n    }, {\n      label: \"label/yes\",\n      type: \"success\",\n      isDefault: true,\n      closes: true,\n      action: function () {\n        var _action = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee2() {\n          return _regeneratorRuntime().wrap(function _callee2$(_context2) {\n            while (1) switch (_context2.prev = _context2.next) {\n              case 0:\n                _context2.next = 2;\n                return cashStatements.submitCashStatementAndTransaction(params.cashstatement);\n              case 2:\n                params.deferred.resolve();\n              case 3:\n              case \"end\":\n                return _context2.stop();\n            }\n          }, _callee2);\n        }));\n        function action() {\n          return _action.apply(this, arguments);\n        }\n        return action;\n      }()\n    }];\n    $scope.retryModal.isVisible = true;\n  });\n  $scope.retryModal = {\n    title: \"cashstatement/failed/retry/title\",\n    description: \"cashstatement/failed/retry/description\",\n    isVisible: false\n  };\n});\n","\"use strict\";\n\npos.directive(\"dddCashstatement\", function ($compile, $http, $templateCache, $translate, $locale, notification, cashStatements) {\n  // returns a promise which, when resolved, will return the partial's HTML\n  var getTemplate = function getTemplate(contentType) {\n    var templateLoader,\n      baseUrl = \"views/partials/\",\n      templateMap = {\n        local: \"cash-local\",\n        foreign: \"cash-local\",\n        custom: \"cash-local\"\n      };\n    var templateUrl = baseUrl + templateMap[contentType];\n    templateLoader = $http.get(templateUrl, {\n      cache: $templateCache\n    });\n    return templateLoader;\n  };\n  var linker = function linker(scope, element, attrs) {\n    var i18nRoundingHappened, i18nIllegalGroupSep;\n    getTemplate(scope.content.type).then(function (response) {\n      element.html($compile(response.data)(scope));\n    });\n    $translate([\"label/entercash\", \"label/enterbank\", \"label/enterevening\", \"text/cashStatementRoundedValues\", \"label/cashUnit\", \"label/unitQuantity\", \"label/unitAmount\"]).then(function (translations) {\n      scope.enterCashPlaceholder = translations[\"label/entercash\"];\n      scope.enterBankPlaceholder = translations[\"label/enterbank\"];\n      scope.enterEveningPlaceholder = translations[\"label/enterevening\"];\n      scope.cashUnit = translations[\"label/cashUnit\"];\n      scope.unitAmount = translations[\"label/unitAmount\"];\n      scope.unitQuantity = translations[\"label/unitQuantity\"];\n      i18nRoundingHappened = translations[\"text/cashStatementRoundedValues\"];\n    });\n    $translate(\"toast/illegalgroupseparator\", {\n      separator: $locale.NUMBER_FORMATS.DECIMAL_SEP\n    }).then(function (translation) {\n      i18nIllegalGroupSep = translation;\n    });\n    function replaceChar(value) {\n      value = String(value).replace(\".\", $locale.NUMBER_FORMATS.DECIMAL_SEP);\n      return value;\n    }\n    scope.setAmount = function (unit) {\n      cashStatements.setAmountFromCount(unit);\n      unit.count = replaceChar(unit.count);\n      unit.amount = replaceChar(unit.amount);\n      scope.updateCurrencyTotal();\n    };\n    scope.setCount = function (unit) {\n      unit.amunt = removeGroupSeparator(unit.amount);\n      var oldAmount = cashStatements.covertValueToMachineCulture(unit.amount);\n      cashStatements.setCountFromAmount(unit);\n      if (unit.amount.toNumber() < Number(oldAmount)) notification.pop(\"warning\", i18nRoundingHappened);\n      unit.count = replaceChar(unit.count);\n      unit.amount = replaceChar(unit.amount);\n      scope.updateCurrencyTotal();\n    };\n    scope.setBank = function () {\n      scope.content.eveningAmount = removeGroupSeparator(scope.content.eveningAmount);\n      var eveAmt = !scope.content.eveningAmount ? new Decimal(0) : new Decimal(scope.content.eveningAmount);\n      var cashTotal = new Decimal(scope.content.statementTotal || 0);\n      scope.content.bank = replaceChar(cashTotal.minus(eveAmt).toSD(15).toNumber());\n    };\n    scope.setEveningAmount = function () {\n      scope.content.bank = removeGroupSeparator(scope.content.bank);\n      var bankAmt = !scope.content.bank ? new Decimal(0) : new Decimal(scope.content.bank);\n      var cashTotal = new Decimal(scope.content.statementTotal || 0);\n      scope.content.eveningAmount = replaceChar(cashTotal.minus(bankAmt).toSD(15).toNumber());\n    };\n    scope.removeGroupSeparatorAndClearUnits = function () {\n      scope.content.statementTotal = removeGroupSeparator(scope.content.statementTotal);\n      scope.clearUnits();\n    };\n    function removeGroupSeparator(amount) {\n      if ((\"\" + amount).indexOf($locale.NUMBER_FORMATS.GROUP_SEP) < 0) return amount;\n      // remove the GROUP_SEP (e.g. comma or dot depending on region)\n      var newAmount = amount.replace(new RegExp(\"[\" + $locale.NUMBER_FORMATS.GROUP_SEP + \"]\", \"gi\"), \"\");\n      notification.pop(\"info\", i18nIllegalGroupSep);\n      return newAmount;\n    }\n    scope.updateCurrencyTotal = function () {\n      var amount = new Decimal(0);\n      angular.forEach(scope.content.unitCounts, function (unit) {\n        if (unit.amount) amount = amount.plus(new Decimal(unit.amount));\n      });\n      scope.content.statementTotal = replaceChar(amount.toSD(15).toNumber());\n    };\n    scope.clearUnits = function () {\n      angular.forEach(scope.content.unitCounts, function (unit) {\n        unit.count = \"0\";\n        unit.amount = \"0\";\n      });\n    };\n    scope.reset = function () {\n      angular.forEach(scope.content.unitCounts, function (unit) {\n        unit.count = 0;\n        unit.amount = 0;\n      });\n    };\n    scope.getUnitDisplay = function (unit) {\n      return unit.unit < 1 ? unit.unit.toFixed(2) : unit.unit.toFixed(0);\n    };\n    scope.getDenominationDisplay = function (unit, column) {\n      var displayValue = scope.cashUnit + \" \" + scope.getUnitDisplay(unit).toString() + \" \";\n      if (column == \"pieces\") {\n        return displayValue + scope.unitQuantity;\n      }\n      if (column == \"amount\") {\n        return displayValue + scope.unitAmount;\n      }\n    };\n    scope.$watch(function () {\n      return scope.content.statementTotal;\n    }, function (amount) {\n      scope.content.eveningAmount = new Decimal(cashStatements.covertValueToMachineCulture(amount || 0)).minus(cashStatements.covertValueToMachineCulture(scope.content.bank || 0)).toSD(15).toNumber();\n      scope.content.eveningAmount = replaceChar(scope.content.eveningAmount);\n    });\n    scope.selectNext = function (id) {\n      angular.element(\"#\" + id).focus();\n    };\n  };\n  return {\n    restrict: \"E\",\n    scope: {\n      content: \"=\",\n      isselected: \"=\",\n      currencyIndex: \"=\",\n      iscrollInstance: \"=\",\n      paymenttype: \"=\"\n    },\n    link: linker\n  };\n});\n","\"use strict\";\n\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _regeneratorRuntime() { \"use strict\"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return r; }; var t, r = {}, e = Object.prototype, n = e.hasOwnProperty, o = \"function\" == typeof Symbol ? Symbol : {}, i = o.iterator || \"@@iterator\", a = o.asyncIterator || \"@@asyncIterator\", u = o.toStringTag || \"@@toStringTag\"; function c(t, r, e, n) { return Object.defineProperty(t, r, { value: e, enumerable: !n, configurable: !n, writable: !n }); } try { c({}, \"\"); } catch (t) { c = function c(t, r, e) { return t[r] = e; }; } function h(r, e, n, o) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype); return c(a, \"_invoke\", function (r, e, n) { var o = 1; return function (i, a) { if (3 === o) throw Error(\"Generator is already running\"); if (4 === o) { if (\"throw\" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var u = n.delegate; if (u) { var c = d(u, n); if (c) { if (c === f) continue; return c; } } if (\"next\" === n.method) n.sent = n._sent = n.arg;else if (\"throw\" === n.method) { if (1 === o) throw o = 4, n.arg; n.dispatchException(n.arg); } else \"return\" === n.method && n.abrupt(\"return\", n.arg); o = 3; var h = s(r, e, n); if (\"normal\" === h.type) { if (o = n.done ? 4 : 2, h.arg === f) continue; return { value: h.arg, done: n.done }; } \"throw\" === h.type && (o = 4, n.method = \"throw\", n.arg = h.arg); } }; }(r, n, new Context(o || [])), !0), a; } function s(t, r, e) { try { return { type: \"normal\", arg: t.call(r, e) }; } catch (t) { return { type: \"throw\", arg: t }; } } r.wrap = h; var f = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var l = {}; c(l, i, function () { return this; }); var p = Object.getPrototypeOf, y = p && p(p(x([]))); y && y !== e && n.call(y, i) && (l = y); var v = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(l); function g(t) { [\"next\", \"throw\", \"return\"].forEach(function (r) { c(t, r, function (t) { return this._invoke(r, t); }); }); } function AsyncIterator(t, r) { function e(o, i, a, u) { var c = s(t[o], t, i); if (\"throw\" !== c.type) { var h = c.arg, f = h.value; return f && \"object\" == _typeof(f) && n.call(f, \"__await\") ? r.resolve(f.__await).then(function (t) { e(\"next\", t, a, u); }, function (t) { e(\"throw\", t, a, u); }) : r.resolve(f).then(function (t) { h.value = t, a(h); }, function (t) { return e(\"throw\", t, a, u); }); } u(c.arg); } var o; c(this, \"_invoke\", function (t, n) { function i() { return new r(function (r, o) { e(t, n, r, o); }); } return o = o ? o.then(i, i) : i(); }, !0); } function d(r, e) { var n = e.method, o = r.i[n]; if (o === t) return e.delegate = null, \"throw\" === n && r.i[\"return\"] && (e.method = \"return\", e.arg = t, d(r, e), \"throw\" === e.method) || \"return\" !== n && (e.method = \"throw\", e.arg = new TypeError(\"The iterator does not provide a '\" + n + \"' method\")), f; var i = s(o, r.i, e.arg); if (\"throw\" === i.type) return e.method = \"throw\", e.arg = i.arg, e.delegate = null, f; var a = i.arg; return a ? a.done ? (e[r.r] = a.value, e.next = r.n, \"return\" !== e.method && (e.method = \"next\", e.arg = t), e.delegate = null, f) : a : (e.method = \"throw\", e.arg = new TypeError(\"iterator result is not an object\"), e.delegate = null, f); } function w(t) { this.tryEntries.push(t); } function m(r) { var e = r[4] || {}; e.type = \"normal\", e.arg = t, r[4] = e; } function Context(t) { this.tryEntries = [[-1]], t.forEach(w, this), this.reset(!0); } function x(r) { if (null != r) { var e = r[i]; if (e) return e.call(r); if (\"function\" == typeof r.next) return r; if (!isNaN(r.length)) { var o = -1, a = function e() { for (; ++o < r.length;) if (n.call(r, o)) return e.value = r[o], e.done = !1, e; return e.value = t, e.done = !0, e; }; return a.next = a; } } throw new TypeError(_typeof(r) + \" is not iterable\"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, c(v, \"constructor\", GeneratorFunctionPrototype), c(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction), GeneratorFunction.displayName = c(GeneratorFunctionPrototype, u, \"GeneratorFunction\"), r.isGeneratorFunction = function (t) { var r = \"function\" == typeof t && t.constructor; return !!r && (r === GeneratorFunction || \"GeneratorFunction\" === (r.displayName || r.name)); }, r.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, c(t, u, \"GeneratorFunction\")), t.prototype = Object.create(v), t; }, r.awrap = function (t) { return { __await: t }; }, g(AsyncIterator.prototype), c(AsyncIterator.prototype, a, function () { return this; }), r.AsyncIterator = AsyncIterator, r.async = function (t, e, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(h(t, e, n, o), i); return r.isGeneratorFunction(e) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, g(v), c(v, u, \"Generator\"), c(v, i, function () { return this; }), c(v, \"toString\", function () { return \"[object Generator]\"; }), r.keys = function (t) { var r = Object(t), e = []; for (var n in r) e.unshift(n); return function t() { for (; e.length;) if ((n = e.pop()) in r) return t.value = n, t.done = !1, t; return t.done = !0, t; }; }, r.values = x, Context.prototype = { constructor: Context, reset: function reset(r) { if (this.prev = this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = \"next\", this.arg = t, this.tryEntries.forEach(m), !r) for (var e in this) \"t\" === e.charAt(0) && n.call(this, e) && !isNaN(+e.slice(1)) && (this[e] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0][4]; if (\"throw\" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(r) { if (this.done) throw r; var e = this; function n(t) { a.type = \"throw\", a.arg = r, e.next = t; } for (var o = e.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i[4], u = this.prev, c = i[1], h = i[2]; if (-1 === i[0]) return n(\"end\"), !1; if (!c && !h) throw Error(\"try statement without catch or finally\"); if (null != i[0] && i[0] <= u) { if (u < c) return this.method = \"next\", this.arg = t, n(c), !0; if (u < h) return n(h), !1; } } }, abrupt: function abrupt(t, r) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var n = this.tryEntries[e]; if (n[0] > -1 && n[0] <= this.prev && this.prev < n[2]) { var o = n; break; } } o && (\"break\" === t || \"continue\" === t) && o[0] <= r && r <= o[2] && (o = null); var i = o ? o[4] : {}; return i.type = t, i.arg = r, o ? (this.method = \"next\", this.next = o[2], f) : this.complete(i); }, complete: function complete(t, r) { if (\"throw\" === t.type) throw t.arg; return \"break\" === t.type || \"continue\" === t.type ? this.next = t.arg : \"return\" === t.type ? (this.rval = this.arg = t.arg, this.method = \"return\", this.next = \"end\") : \"normal\" === t.type && r && (this.next = r), f; }, finish: function finish(t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[2] === t) return this.complete(e[4], e[3]), m(e), f; } }, \"catch\": function _catch(t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[0] === t) { var n = e[4]; if (\"throw\" === n.type) { var o = n.arg; m(e); } return o; } } throw Error(\"illegal catch attempt\"); }, delegateYield: function delegateYield(r, e, n) { return this.delegate = { i: x(r), r: e, n: n }, \"next\" === this.method && (this.arg = t), f; } }, r; }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"next\", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"throw\", n); } _next(void 0); }); }; }\npos.factory(\"cashStatements\", function ($q, posConfig, cashStatementRepository, sales, receipt, $locale, backend, $log, transactionTypeEnum, eventBus, saleRepository, posStorage) {\n  var service = {};\n  var local;\n  var currencySetups;\n  var paymentTypesToReconcile;\n  loadConfig();\n  function isLocal(currency) {\n    return currency === local.name;\n  }\n  service.getDrawerStatus = function (drawerIndex) {\n    return cashStatementRepository.device(drawerIndex).getDrawerStatus(new Date()).then(function (response) {\n      var status = response.data.d; // unboxing\n      status.morningAmounts = status.morningAmounts || {};\n      status.previousEveningAmounts = status.previousEveningAmounts || {};\n      var statements = {};\n      if (paymentTypesToReconcile.find(function (o) {\n        return [\"Cash\", \"Change\", \"Currrency\"].includes(o.type);\n      })) {\n        var currencies = [];\n        angular.forEach(currencySetups, function (currencySetup, currency) {\n          var current = {\n            type: isLocal(currency) ? \"local\" : \"foreign\",\n            currency: currency,\n            currencyValue: currencySetup.exchangeRate,\n            morningAmount: status.morningAmounts[currency] || 0,\n            eveningAmount: 0,\n            bank: 0,\n            previousEveningAmount: status.previousEveningAmounts[currency] || 0,\n            unitCounts: isLocal(currency) ? createUnitCount(currencySetup) : [],\n            firstToday: status.firstToday\n          };\n          current.amountInDrawer = new Decimal(current.morningAmount);\n          angular.forEach(status.payments.filter(function (o) {\n            return [\"Cash\", \"Change\", \"Currency\"].includes(o.paymentType);\n          }), function (payment) {\n            if (currencySetup.currencyCode == payment.currencyName) current.amountInDrawer = current.amountInDrawer.plus(payment.amount);\n          });\n          if (isLocal(currency)) currencies.unshift(current);else currencies.push(current);\n        });\n        statements[\"Cash\"] = currencies;\n      }\n      paymentTypesToReconcile.filter(function (o) {\n        return o.type != \"Cash\";\n      }).forEach(function (paymentType) {\n        statements[paymentType.type] = [{\n          type: \"custom\",\n          currency: local.currencyCode,\n          currencyValue: 100,\n          morningAmount: status.morningAmounts[paymentType.type],\n          eveningAmount: 0,\n          bank: 0,\n          previousEveningAmount: status.previousEveningAmounts[paymentType.type] || 0,\n          unitCounts: [],\n          firstToday: status.firstToday,\n          amountInDrawer: status.payments.filter(function (o) {\n            return o.paymentType == paymentType.type;\n          }).map(function (o) {\n            return o.amount;\n          }).reduce(function (pre, cur) {\n            return pre.plus(new Decimal(cur));\n          }, new Decimal(status.morningAmounts[paymentType.type] || 0))\n        }];\n      });\n      return statements;\n    });\n  };\n  service.makeCashStatement = /*#__PURE__*/function () {\n    var _ref = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee(drawerIndex, currencies) {\n      var currenciesCopy, cashStatementResponse, toApi;\n      return _regeneratorRuntime().wrap(function _callee$(_context) {\n        while (1) switch (_context.prev = _context.next) {\n          case 0:\n            if (currencies) {\n              _context.next = 2;\n              break;\n            }\n            return _context.abrupt(\"return\", $q.reject(\"NULL_CURRENCIES\"));\n          case 2:\n            // we need to make a copy of the currencies because we need to change the numbers to machine invariance\n            // this would propagate out to the user if we do not copy\n            currenciesCopy = angular.copy(currencies);\n            receipt.prepareReceipt();\n            receipt.setArmId(cashStatementRepository.device(drawerIndex).getArmId());\n\n            // calculate the local value of all the counted currencies and sum the evening, morning and bank\n            Object.keys(currenciesCopy).forEach(function (paymentType) {\n              var morningAmount = new Decimal(0);\n              var eveningAmount = new Decimal(0);\n              var bank = new Decimal(0);\n              var firstToday = true;\n              angular.forEach(currenciesCopy[paymentType], function (currency) {\n                angular.forEach(currency.unitCounts, function (unit) {\n                  unit.amount = Number(service.covertValueToMachineCulture(unit.amount));\n                  unit.count = Number(unit.count);\n                });\n\n                // note that we _must not_ convert morning amount to machine culture, as this is already in machine culture\n                // since we get it directly from the ARM and is never manipulated or shown when doing a cash statement\n                // if there's ever a need to show the morning amount where the regional format is correct, then we need\n                // to convert it back to machine culture here afterwards\n                currency.statementTotal = Number(service.covertValueToMachineCulture(currency.statementTotal));\n                currency.eveningAmount = Number(service.covertValueToMachineCulture(currency.eveningAmount));\n                currency.bank = Number(service.covertValueToMachineCulture(currency.bank));\n\n                // if any currency has been counted then we need to know that the one we are doing is not the first\n                firstToday = !currency.firstToday ? false : firstToday;\n                currency.eveningAmount = new Decimal(currency.eveningAmount || 0);\n                currency.morningAmount = new Decimal(currency.morningAmount || 0);\n                currency.bank = new Decimal(currency.bank || 0);\n                currency.statementTotal = new Decimal(currency.statementTotal || 0);\n                var exchangeRate = new Decimal(currency.currencyValue).dividedBy(100);\n                var previousEveningAmount = new Decimal(currency.previousEveningAmount).times(exchangeRate);\n                var currencyEvening = new Decimal(currency.eveningAmount).times(exchangeRate);\n                if (!currency.firstToday) currencyEvening = currencyEvening.minus(previousEveningAmount);\n                var currencyMorning = new Decimal(currency.morningAmount).times(exchangeRate);\n                var currencyBank = new Decimal(currency.bank).times(exchangeRate);\n                eveningAmount = eveningAmount.plus(currencyEvening);\n                morningAmount = morningAmount.plus(currencyMorning);\n                bank = bank.plus(currencyBank);\n              });\n\n              // build the backoffice receipt which represents the cash statement\n              if (firstToday) receipt.addItemGroup(morningAmount, \"morning\", 9921, undefined, undefined, undefined, transactionTypeEnum.cashStatement, paymentType);\n              receipt.addItemGroup(eveningAmount, \"evening\", 9922, undefined, undefined, undefined, transactionTypeEnum.cashStatement, paymentType);\n              receipt.addItemGroup(bank, \"bank\", 9923, undefined, undefined, undefined, transactionTypeEnum.cashStatement, paymentType);\n            });\n\n            // since a cash statement is just a sale on itemgroups we also need a payment line to cancel\n            // out the value of the itemgroups added above\n            receipt.addPayment({\n              amount: receipt.getTotal(),\n              paymentType: \"Rounding\",\n              rounding: new Decimal(0),\n              currencyCode: local.code,\n              exchangeRate: local.exchangeRate,\n              completed: true\n            });\n            receipt.setTransactionType(transactionTypeEnum.cashStatement);\n            _context.prev = 8;\n            _context.next = 11;\n            return cashStatementRepository.device(drawerIndex).submitCashStatement(currenciesCopy);\n          case 11:\n            cashStatementResponse = _context.sent;\n            toApi = {\n              cashStatement: cashStatementResponse.data.d.Result.CashStatement,\n              zReport: cashStatementResponse.data.d.Result.XzReport,\n              posReceipt: saleRepository.safeReceipt(angular.copy(receipt.getReceipt()))\n            };\n            toApi.cashStatement.DailyClosure.connectorId = cashStatementRepository.device(drawerIndex).getArmId();\n            toApi.cashStatement.DailyClosure.connectorName = cashStatementRepository.device(drawerIndex).getArmName();\n            toApi.cashStatement.DailyClosure.date = moment(toApi.cashStatement.DailyClosure.date);\n            toApi.posReceipt.date = moment(toApi.posReceipt.date).format();\n            _context.next = 19;\n            return service.submitCashStatementAndTransaction(toApi);\n          case 19:\n            _context.prev = 19;\n            $log.debug(\"preparing new receipt for sale\");\n            receipt.closeReceipt();\n            return _context.finish(19);\n          case 23:\n          case \"end\":\n            return _context.stop();\n        }\n      }, _callee, null, [[8,, 19, 23]]);\n    }));\n    return function (_x, _x2) {\n      return _ref.apply(this, arguments);\n    };\n  }();\n  service.submitCashStatementAndTransaction = /*#__PURE__*/function () {\n    var _ref2 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee2(cashstatement) {\n      var deferred;\n      return _regeneratorRuntime().wrap(function _callee2$(_context2) {\n        while (1) switch (_context2.prev = _context2.next) {\n          case 0:\n            deferred = $q.defer();\n            _context2.prev = 1;\n            _context2.next = 4;\n            return cashStatementRepository.api.submitCashStatementAndTransaction(cashstatement);\n          case 4:\n            deferred.resolve();\n            _context2.next = 10;\n            break;\n          case 7:\n            _context2.prev = 7;\n            _context2.t0 = _context2[\"catch\"](1);\n            eventBus.notify(eventBus.events.cashstatement.failed, {\n              cashstatement: cashstatement,\n              deferred: deferred\n            });\n          case 10:\n            return _context2.abrupt(\"return\", deferred.promise);\n          case 11:\n          case \"end\":\n            return _context2.stop();\n        }\n      }, _callee2, null, [[1, 7]]);\n    }));\n    return function (_x3) {\n      return _ref2.apply(this, arguments);\n    };\n  }();\n  service.makeMorningAmount = /*#__PURE__*/function () {\n    var _ref3 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee3(drawerIndex, currencies) {\n      var morningAmounts, submitMorningAmountResponse, toApi;\n      return _regeneratorRuntime().wrap(function _callee3$(_context3) {\n        while (1) switch (_context3.prev = _context3.next) {\n          case 0:\n            if (currencies) {\n              _context3.next = 2;\n              break;\n            }\n            return _context3.abrupt(\"return\", $q.reject(\"NULL_CURRENCIES\"));\n          case 2:\n            morningAmounts = [];\n            angular.forEach(currencies, function (currency) {\n              morningAmounts.push({\n                currency: currency.currency,\n                currencyValue: Number(currency.currencyValue),\n                amount: new Decimal(Number(service.covertValueToMachineCulture(currency.morningAmount)))\n              });\n            });\n            _context3.next = 6;\n            return cashStatementRepository.device(drawerIndex).submitMorningAmount(morningAmounts);\n          case 6:\n            submitMorningAmountResponse = _context3.sent;\n            toApi = submitMorningAmountResponse.data.d.Result;\n            toApi.connectorId = cashStatementRepository.device(drawerIndex).getArmId();\n            toApi.connectorName = cashStatementRepository.device(drawerIndex).getArmName();\n            _context3.next = 12;\n            return cashStatementRepository.api.submitMorningAmount(toApi);\n          case 12:\n          case \"end\":\n            return _context3.stop();\n        }\n      }, _callee3);\n    }));\n    return function (_x4, _x5) {\n      return _ref3.apply(this, arguments);\n    };\n  }();\n  service.setAmountFromCount = function (unit) {\n    // if there's alphanumeric chars then nothing works\n    if (!/^[0-9]+$/.test(unit.count)) {\n      var unitCountStr = unit.count + \"\";\n      unit.count = unitCountStr.replace(/\\D+/, \"\");\n    }\n    unit.count = new Decimal(unit.count || \"0\");\n    unit.amount = unit.count.times(unit.unit);\n    return unit;\n  };\n  service.setCountFromAmount = function (unit) {\n    if (!/^[0-9.,]+$/.test(unit.amount)) {\n      var unitAmountStr = unit.amount + \"\";\n      unit.amount = unitAmountStr.replace(/[^0-9]+/, \"\");\n    }\n    unit.amount = unit.amount || \"0\";\n    // make sure that the format is machine culture\n    unit.amount = service.covertValueToMachineCulture(unit.amount);\n    var amount = new Decimal(unit.amount);\n    var count = amount.div(unit.unit);\n    var flooredCount = count.floor();\n    var roundedAmount = flooredCount.times(unit.unit);\n    unit.count = flooredCount;\n    unit.amount = roundedAmount;\n    return unit;\n  };\n  service.covertValueToMachineCulture = function (value) {\n    var newVal = (\"\" + value).replace($locale.NUMBER_FORMATS.GROUP_SEP, \"\");\n    newVal = (\"\" + newVal).replace($locale.NUMBER_FORMATS.DECIMAL_SEP, \".\");\n    return newVal;\n  };\n  service.getCashStatement = function (posId, receiptId) {\n    return cashStatementRepository.api.getCashStatement(posId, receiptId);\n  };\n  service.reprintCashStatement = function (cashStatement) {\n    return cashStatementRepository.device(+posStorage.get(\"defaultDeviceIndex\")).reprintCashStatement(cashStatement, posStorage.get(\"printTranslations\"));\n  };\n  service.currentlyReconcilingPaymentType = null;\n  function createUnitCount(currency) {\n    var unitCounts = [];\n    angular.forEach(currency.units, function (unit) {\n      unitCounts.push({\n        unit: unit,\n        count: 0,\n        amount: 0\n      });\n    });\n    return unitCounts;\n  }\n  function loadConfig() {\n    local = posConfig.getLocalCurrency();\n    currencySetups = posConfig.getCurrencySetup();\n    paymentTypesToReconcile = posConfig.getPaymentTypeConfigs().filter(function (o) {\n      return o.shouldReconcile;\n    });\n  }\n  eventBus.subscribe(eventBus.events.pos.newConfig, null, loadConfig);\n  return service;\n});\n","\"use strict\";\n\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _regeneratorRuntime() { \"use strict\"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return r; }; var t, r = {}, e = Object.prototype, n = e.hasOwnProperty, o = \"function\" == typeof Symbol ? Symbol : {}, i = o.iterator || \"@@iterator\", a = o.asyncIterator || \"@@asyncIterator\", u = o.toStringTag || \"@@toStringTag\"; function c(t, r, e, n) { return Object.defineProperty(t, r, { value: e, enumerable: !n, configurable: !n, writable: !n }); } try { c({}, \"\"); } catch (t) { c = function c(t, r, e) { return t[r] = e; }; } function h(r, e, n, o) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype); return c(a, \"_invoke\", function (r, e, n) { var o = 1; return function (i, a) { if (3 === o) throw Error(\"Generator is already running\"); if (4 === o) { if (\"throw\" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var u = n.delegate; if (u) { var c = d(u, n); if (c) { if (c === f) continue; return c; } } if (\"next\" === n.method) n.sent = n._sent = n.arg;else if (\"throw\" === n.method) { if (1 === o) throw o = 4, n.arg; n.dispatchException(n.arg); } else \"return\" === n.method && n.abrupt(\"return\", n.arg); o = 3; var h = s(r, e, n); if (\"normal\" === h.type) { if (o = n.done ? 4 : 2, h.arg === f) continue; return { value: h.arg, done: n.done }; } \"throw\" === h.type && (o = 4, n.method = \"throw\", n.arg = h.arg); } }; }(r, n, new Context(o || [])), !0), a; } function s(t, r, e) { try { return { type: \"normal\", arg: t.call(r, e) }; } catch (t) { return { type: \"throw\", arg: t }; } } r.wrap = h; var f = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var l = {}; c(l, i, function () { return this; }); var p = Object.getPrototypeOf, y = p && p(p(x([]))); y && y !== e && n.call(y, i) && (l = y); var v = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(l); function g(t) { [\"next\", \"throw\", \"return\"].forEach(function (r) { c(t, r, function (t) { return this._invoke(r, t); }); }); } function AsyncIterator(t, r) { function e(o, i, a, u) { var c = s(t[o], t, i); if (\"throw\" !== c.type) { var h = c.arg, f = h.value; return f && \"object\" == _typeof(f) && n.call(f, \"__await\") ? r.resolve(f.__await).then(function (t) { e(\"next\", t, a, u); }, function (t) { e(\"throw\", t, a, u); }) : r.resolve(f).then(function (t) { h.value = t, a(h); }, function (t) { return e(\"throw\", t, a, u); }); } u(c.arg); } var o; c(this, \"_invoke\", function (t, n) { function i() { return new r(function (r, o) { e(t, n, r, o); }); } return o = o ? o.then(i, i) : i(); }, !0); } function d(r, e) { var n = e.method, o = r.i[n]; if (o === t) return e.delegate = null, \"throw\" === n && r.i[\"return\"] && (e.method = \"return\", e.arg = t, d(r, e), \"throw\" === e.method) || \"return\" !== n && (e.method = \"throw\", e.arg = new TypeError(\"The iterator does not provide a '\" + n + \"' method\")), f; var i = s(o, r.i, e.arg); if (\"throw\" === i.type) return e.method = \"throw\", e.arg = i.arg, e.delegate = null, f; var a = i.arg; return a ? a.done ? (e[r.r] = a.value, e.next = r.n, \"return\" !== e.method && (e.method = \"next\", e.arg = t), e.delegate = null, f) : a : (e.method = \"throw\", e.arg = new TypeError(\"iterator result is not an object\"), e.delegate = null, f); } function w(t) { this.tryEntries.push(t); } function m(r) { var e = r[4] || {}; e.type = \"normal\", e.arg = t, r[4] = e; } function Context(t) { this.tryEntries = [[-1]], t.forEach(w, this), this.reset(!0); } function x(r) { if (null != r) { var e = r[i]; if (e) return e.call(r); if (\"function\" == typeof r.next) return r; if (!isNaN(r.length)) { var o = -1, a = function e() { for (; ++o < r.length;) if (n.call(r, o)) return e.value = r[o], e.done = !1, e; return e.value = t, e.done = !0, e; }; return a.next = a; } } throw new TypeError(_typeof(r) + \" is not iterable\"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, c(v, \"constructor\", GeneratorFunctionPrototype), c(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction), GeneratorFunction.displayName = c(GeneratorFunctionPrototype, u, \"GeneratorFunction\"), r.isGeneratorFunction = function (t) { var r = \"function\" == typeof t && t.constructor; return !!r && (r === GeneratorFunction || \"GeneratorFunction\" === (r.displayName || r.name)); }, r.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, c(t, u, \"GeneratorFunction\")), t.prototype = Object.create(v), t; }, r.awrap = function (t) { return { __await: t }; }, g(AsyncIterator.prototype), c(AsyncIterator.prototype, a, function () { return this; }), r.AsyncIterator = AsyncIterator, r.async = function (t, e, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(h(t, e, n, o), i); return r.isGeneratorFunction(e) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, g(v), c(v, u, \"Generator\"), c(v, i, function () { return this; }), c(v, \"toString\", function () { return \"[object Generator]\"; }), r.keys = function (t) { var r = Object(t), e = []; for (var n in r) e.unshift(n); return function t() { for (; e.length;) if ((n = e.pop()) in r) return t.value = n, t.done = !1, t; return t.done = !0, t; }; }, r.values = x, Context.prototype = { constructor: Context, reset: function reset(r) { if (this.prev = this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = \"next\", this.arg = t, this.tryEntries.forEach(m), !r) for (var e in this) \"t\" === e.charAt(0) && n.call(this, e) && !isNaN(+e.slice(1)) && (this[e] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0][4]; if (\"throw\" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(r) { if (this.done) throw r; var e = this; function n(t) { a.type = \"throw\", a.arg = r, e.next = t; } for (var o = e.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i[4], u = this.prev, c = i[1], h = i[2]; if (-1 === i[0]) return n(\"end\"), !1; if (!c && !h) throw Error(\"try statement without catch or finally\"); if (null != i[0] && i[0] <= u) { if (u < c) return this.method = \"next\", this.arg = t, n(c), !0; if (u < h) return n(h), !1; } } }, abrupt: function abrupt(t, r) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var n = this.tryEntries[e]; if (n[0] > -1 && n[0] <= this.prev && this.prev < n[2]) { var o = n; break; } } o && (\"break\" === t || \"continue\" === t) && o[0] <= r && r <= o[2] && (o = null); var i = o ? o[4] : {}; return i.type = t, i.arg = r, o ? (this.method = \"next\", this.next = o[2], f) : this.complete(i); }, complete: function complete(t, r) { if (\"throw\" === t.type) throw t.arg; return \"break\" === t.type || \"continue\" === t.type ? this.next = t.arg : \"return\" === t.type ? (this.rval = this.arg = t.arg, this.method = \"return\", this.next = \"end\") : \"normal\" === t.type && r && (this.next = r), f; }, finish: function finish(t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[2] === t) return this.complete(e[4], e[3]), m(e), f; } }, \"catch\": function _catch(t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[0] === t) { var n = e[4]; if (\"throw\" === n.type) { var o = n.arg; m(e); } return o; } } throw Error(\"illegal catch attempt\"); }, delegateYield: function delegateYield(r, e, n) { return this.delegate = { i: x(r), r: e, n: n }, \"next\" === this.method && (this.arg = t), f; } }, r; }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"next\", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"throw\", n); } _next(void 0); }); }; }\npos.controller(\"MorningAmountCtrl\", function ($scope, cashStatements, backend, clerkLoginService, keypadManager, sales, $translate, $locale, notification, $state, receipt, $rootScope, findCustomerService) {\n  $scope.devices = backend.devices;\n  var awaitingResponse = false;\n  var selectedIndex = -1;\n  var i18nRoundingHappened, i18nIllegalGroupSep, i18nPleaseWait, i18nWaitingForDrawer;\n  $scope.ready = true;\n  if ($scope.$stateParams.id !== undefined) {\n    $translate([\"label/entercash\", \"text/cashStatementRoundedValues\", \"toast/pleasewait\", \"toast/waitingfordrawerstatus\"]).then(function (translations) {\n      $scope.enterCashPlaceholder = translations[\"label/entercash\"];\n      i18nRoundingHappened = translations[\"text/cashStatementRoundedValues\"];\n      i18nPleaseWait = translations[\"toast/pleasewait\"];\n      i18nWaitingForDrawer = translations[\"toast/waitingfordrawerstatus\"];\n    });\n    sales.openDrawer(clerkLoginService.currentUser().identifier, $scope.$stateParams.id);\n    cashStatements.getDrawerStatus($scope.$stateParams.id).then(function (currencies) {\n      angular.forEach(currencies[\"Cash\"], function (currency) {\n        currency.morningAmount = replaceChar(currency.morningAmount);\n      });\n      $scope.currencies = currencies[\"Cash\"];\n    });\n    $translate(\"toast/illegalgroupseparator\", {\n      separator: $locale.NUMBER_FORMATS.DECIMAL_SEP\n    }).then(function (translation) {\n      i18nIllegalGroupSep = translation;\n    });\n  }\n  $scope.getDeviceName = function (index) {\n    var device = backend.devices[index];\n    if (device) return device.deviceName;\n    return \"N/A\";\n  };\n  $scope.getMorningAmountTotal = function () {\n    var total = new Decimal(0);\n    angular.forEach($scope.currencies, function (currency) {\n      var local = new Decimal(currency.morningAmount || 0).times(currency.currencyValue).div(100);\n      total = total.plus(local);\n    });\n    return total;\n  };\n  function replaceChar(value) {\n    value = String(value).replace(\".\", $locale.NUMBER_FORMATS.DECIMAL_SEP);\n    return value;\n  }\n  $scope.setAmount = function (unit, currency) {\n    cashStatements.setAmountFromCount(unit);\n    unit.count = replaceChar(unit.count);\n    unit.amount = replaceChar(unit.amount);\n    $scope.updateCurrencyTotal(currency);\n  };\n  $scope.setCount = function (unit, currency) {\n    unit.amunt = removeGroupSeparator(unit.amount);\n    var oldAmount = cashStatements.covertValueToMachineCulture(unit.amount);\n    cashStatements.setCountFromAmount(unit);\n    if (unit.amount.toNumber() < Number(oldAmount)) notification.pop(\"warning\", i18nRoundingHappened);\n    unit.count = replaceChar(unit.count);\n    unit.amount = replaceChar(unit.amount);\n    $scope.updateCurrencyTotal(currency);\n  };\n  $scope.updateCurrencyTotal = function (currency) {\n    var amount = new Decimal(0);\n    angular.forEach(currency.unitCounts, function (unit) {\n      if (unit.amount) amount = amount.plus(new Decimal(unit.amount).toNumber());\n    });\n    currency.morningAmount = replaceChar(amount.toSD(15).toNumber());\n  };\n  $scope.removeGroupSeparatorAndClearUnits = function (currency) {\n    currency.morningAmount = removeGroupSeparator(currency.morningAmount);\n    clearUnits(currency.unitCounts);\n  };\n  function removeGroupSeparator(amount) {\n    if ((\"\" + amount).indexOf($locale.NUMBER_FORMATS.GROUP_SEP) < 0) return amount;\n    // remove the GROUP_SEP (e.g. comma or dot depending on region)\n    var newAmount = amount.replace(new RegExp(\"[\" + $locale.NUMBER_FORMATS.GROUP_SEP + \"]\", \"gi\"), \"\");\n    notification.pop(\"info\", i18nIllegalGroupSep);\n    return newAmount;\n  }\n  $scope.selectNext = function (id) {\n    angular.element(\"#\" + id).focus();\n  };\n  $scope.selectNone = function () {\n    keypadManager.hide();\n  };\n  function replaceAll(search, replacement) {\n    var target = this;\n    return target.replace(new RegExp(search, \"g\"), replacement);\n  }\n  $scope.getUnitDisplay = function (unit) {\n    return unit.unit < 1 ? unit.unit.toFixed(2) : unit.unit.toFixed(0);\n  };\n  $scope.setSelected = function (index) {\n    selectedIndex = selectedIndex !== index ? index : -1;\n  };\n  $scope.isSelected = function (index) {\n    return selectedIndex === index;\n  };\n  $scope.reset = function () {\n    angular.forEach($scope.currencies, function (currency) {\n      currency.morningAmount = 0;\n    });\n    $scope.clearCounts();\n  };\n  $scope.clearCounts = function () {\n    angular.forEach($scope.currencies, function (currency) {\n      clearUnits(currency.unitCounts);\n    });\n  };\n  function clearUnits(units) {\n    angular.forEach(units, function (unit) {\n      unit.amount = \"0\";\n      unit.count = \"0\";\n    });\n  }\n  $scope.submitMorningAmount = function () {\n    if (awaitingResponse) return notification.pop(\"info\", i18nPleaseWait);\n    var cashDrawerInputs = angular.element(\".cash-drawer__input\");\n    for (var i = 0; i < cashDrawerInputs.length; i++) {\n      var cashDrawerInput = cashDrawerInputs[i];\n      if (!cashDrawerInput.value) {\n        cashDrawerInput.value = \"0\";\n      }\n    }\n    awaitingResponse = true;\n    cashStatements.makeMorningAmount($scope.$stateParams.id, $scope.currencies).then(function () {\n      $scope.$state.go(\"root.login\");\n    })[\"catch\"](function (errorResponse) {\n      if (errorResponse === \"NULL_CURRENCIES\") return notification.pop(\"info\", i18nPleaseWait, i18nWaitingForDrawer);\n    })[\"finally\"](function () {\n      awaitingResponse = false;\n    });\n  };\n  $scope.cancel = /*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee() {\n    return _regeneratorRuntime().wrap(function _callee$(_context) {\n      while (1) switch (_context.prev = _context.next) {\n        case 0:\n          receipt.clearReceipt();\n          findCustomerService.removeSelectedCustomer();\n          $rootScope.selectedItem = false;\n          $state.go(\"root.logout\");\n        case 4:\n        case \"end\":\n          return _context.stop();\n      }\n    }, _callee);\n  }));\n});\n","\"use strict\";\n\npos.factory(\"zreportService\", function (backend, zreportRepository) {\n  var service = {};\n  service.reprintLastZReport = function () {\n    return zreportRepository.api.getZReport(backend.getCurrentDevice().mac).then(function (response) {\n      return zreportRepository.device().printZReport({\n        xzReport: response.data\n      });\n    });\n  };\n  return service;\n});\n","\"use strict\";\n\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _regeneratorRuntime() { \"use strict\"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return r; }; var t, r = {}, e = Object.prototype, n = e.hasOwnProperty, o = \"function\" == typeof Symbol ? Symbol : {}, i = o.iterator || \"@@iterator\", a = o.asyncIterator || \"@@asyncIterator\", u = o.toStringTag || \"@@toStringTag\"; function c(t, r, e, n) { return Object.defineProperty(t, r, { value: e, enumerable: !n, configurable: !n, writable: !n }); } try { c({}, \"\"); } catch (t) { c = function c(t, r, e) { return t[r] = e; }; } function h(r, e, n, o) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype); return c(a, \"_invoke\", function (r, e, n) { var o = 1; return function (i, a) { if (3 === o) throw Error(\"Generator is already running\"); if (4 === o) { if (\"throw\" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var u = n.delegate; if (u) { var c = d(u, n); if (c) { if (c === f) continue; return c; } } if (\"next\" === n.method) n.sent = n._sent = n.arg;else if (\"throw\" === n.method) { if (1 === o) throw o = 4, n.arg; n.dispatchException(n.arg); } else \"return\" === n.method && n.abrupt(\"return\", n.arg); o = 3; var h = s(r, e, n); if (\"normal\" === h.type) { if (o = n.done ? 4 : 2, h.arg === f) continue; return { value: h.arg, done: n.done }; } \"throw\" === h.type && (o = 4, n.method = \"throw\", n.arg = h.arg); } }; }(r, n, new Context(o || [])), !0), a; } function s(t, r, e) { try { return { type: \"normal\", arg: t.call(r, e) }; } catch (t) { return { type: \"throw\", arg: t }; } } r.wrap = h; var f = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var l = {}; c(l, i, function () { return this; }); var p = Object.getPrototypeOf, y = p && p(p(x([]))); y && y !== e && n.call(y, i) && (l = y); var v = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(l); function g(t) { [\"next\", \"throw\", \"return\"].forEach(function (r) { c(t, r, function (t) { return this._invoke(r, t); }); }); } function AsyncIterator(t, r) { function e(o, i, a, u) { var c = s(t[o], t, i); if (\"throw\" !== c.type) { var h = c.arg, f = h.value; return f && \"object\" == _typeof(f) && n.call(f, \"__await\") ? r.resolve(f.__await).then(function (t) { e(\"next\", t, a, u); }, function (t) { e(\"throw\", t, a, u); }) : r.resolve(f).then(function (t) { h.value = t, a(h); }, function (t) { return e(\"throw\", t, a, u); }); } u(c.arg); } var o; c(this, \"_invoke\", function (t, n) { function i() { return new r(function (r, o) { e(t, n, r, o); }); } return o = o ? o.then(i, i) : i(); }, !0); } function d(r, e) { var n = e.method, o = r.i[n]; if (o === t) return e.delegate = null, \"throw\" === n && r.i[\"return\"] && (e.method = \"return\", e.arg = t, d(r, e), \"throw\" === e.method) || \"return\" !== n && (e.method = \"throw\", e.arg = new TypeError(\"The iterator does not provide a '\" + n + \"' method\")), f; var i = s(o, r.i, e.arg); if (\"throw\" === i.type) return e.method = \"throw\", e.arg = i.arg, e.delegate = null, f; var a = i.arg; return a ? a.done ? (e[r.r] = a.value, e.next = r.n, \"return\" !== e.method && (e.method = \"next\", e.arg = t), e.delegate = null, f) : a : (e.method = \"throw\", e.arg = new TypeError(\"iterator result is not an object\"), e.delegate = null, f); } function w(t) { this.tryEntries.push(t); } function m(r) { var e = r[4] || {}; e.type = \"normal\", e.arg = t, r[4] = e; } function Context(t) { this.tryEntries = [[-1]], t.forEach(w, this), this.reset(!0); } function x(r) { if (null != r) { var e = r[i]; if (e) return e.call(r); if (\"function\" == typeof r.next) return r; if (!isNaN(r.length)) { var o = -1, a = function e() { for (; ++o < r.length;) if (n.call(r, o)) return e.value = r[o], e.done = !1, e; return e.value = t, e.done = !0, e; }; return a.next = a; } } throw new TypeError(_typeof(r) + \" is not iterable\"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, c(v, \"constructor\", GeneratorFunctionPrototype), c(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction), GeneratorFunction.displayName = c(GeneratorFunctionPrototype, u, \"GeneratorFunction\"), r.isGeneratorFunction = function (t) { var r = \"function\" == typeof t && t.constructor; return !!r && (r === GeneratorFunction || \"GeneratorFunction\" === (r.displayName || r.name)); }, r.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, c(t, u, \"GeneratorFunction\")), t.prototype = Object.create(v), t; }, r.awrap = function (t) { return { __await: t }; }, g(AsyncIterator.prototype), c(AsyncIterator.prototype, a, function () { return this; }), r.AsyncIterator = AsyncIterator, r.async = function (t, e, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(h(t, e, n, o), i); return r.isGeneratorFunction(e) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, g(v), c(v, u, \"Generator\"), c(v, i, function () { return this; }), c(v, \"toString\", function () { return \"[object Generator]\"; }), r.keys = function (t) { var r = Object(t), e = []; for (var n in r) e.unshift(n); return function t() { for (; e.length;) if ((n = e.pop()) in r) return t.value = n, t.done = !1, t; return t.done = !0, t; }; }, r.values = x, Context.prototype = { constructor: Context, reset: function reset(r) { if (this.prev = this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = \"next\", this.arg = t, this.tryEntries.forEach(m), !r) for (var e in this) \"t\" === e.charAt(0) && n.call(this, e) && !isNaN(+e.slice(1)) && (this[e] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0][4]; if (\"throw\" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(r) { if (this.done) throw r; var e = this; function n(t) { a.type = \"throw\", a.arg = r, e.next = t; } for (var o = e.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i[4], u = this.prev, c = i[1], h = i[2]; if (-1 === i[0]) return n(\"end\"), !1; if (!c && !h) throw Error(\"try statement without catch or finally\"); if (null != i[0] && i[0] <= u) { if (u < c) return this.method = \"next\", this.arg = t, n(c), !0; if (u < h) return n(h), !1; } } }, abrupt: function abrupt(t, r) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var n = this.tryEntries[e]; if (n[0] > -1 && n[0] <= this.prev && this.prev < n[2]) { var o = n; break; } } o && (\"break\" === t || \"continue\" === t) && o[0] <= r && r <= o[2] && (o = null); var i = o ? o[4] : {}; return i.type = t, i.arg = r, o ? (this.method = \"next\", this.next = o[2], f) : this.complete(i); }, complete: function complete(t, r) { if (\"throw\" === t.type) throw t.arg; return \"break\" === t.type || \"continue\" === t.type ? this.next = t.arg : \"return\" === t.type ? (this.rval = this.arg = t.arg, this.method = \"return\", this.next = \"end\") : \"normal\" === t.type && r && (this.next = r), f; }, finish: function finish(t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[2] === t) return this.complete(e[4], e[3]), m(e), f; } }, \"catch\": function _catch(t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[0] === t) { var n = e[4]; if (\"throw\" === n.type) { var o = n.arg; m(e); } return o; } } throw Error(\"illegal catch attempt\"); }, delegateYield: function delegateYield(r, e, n) { return this.delegate = { i: x(r), r: e, n: n }, \"next\" === this.method && (this.arg = t), f; } }, r; }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"next\", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"throw\", n); } _next(void 0); }); }; }\npos.factory(\"chartService\", function ($log, $q, saleRepository) {\n  \"use strict\";\n\n  var chart = {};\n  var cache = {};\n  chart.getSalesData = function (from, to) {\n    var deferred = $q.defer();\n    if (!(from instanceof moment)) from = moment(from);\n    if (!(to instanceof moment)) to = moment(to);\n    var cachedFrom = cache[from.format(\"DDMMYY\")] || {};\n    var cachedTo = cachedFrom[to.format(\"DDMMYY\")] || {};\n    var lastCheck = cachedTo.lastCheck || moment().subtract(10, \"y\");\n\n    // use cached data if the date today is not in the span between from and to (data in the past is unlikely to change)\n    if (!moment().isBetween(from, to, \"day\") && !moment().isSame(from, \"day\") && !moment().isSame(to, \"day\") && Object.keys(cachedTo).length > 0) {\n      deferred.resolve(cachedTo.data);\n      return deferred.promise;\n    }\n    saleRepository.api.getSalesData(from, to, lastCheck).then(function (response) {\n      var salesData = response.data;\n      if (from.isSame(to, \"day\")) {\n        cachedTo.data = cachedTo.data || createEmptyDaily();\n        cachedTo.data = transformDaily(salesData) || cachedTo.data;\n      }\n      cachedTo.lastCheck = moment();\n      cachedFrom[to.format(\"DDMMYY\")] = cachedTo;\n      cache[from.format(\"DDMMYY\")] = cachedFrom;\n      deferred.resolve(cachedTo.data);\n    }, function () {\n      deferred.resolve(cachedTo.data || createEmptyDaily());\n    });\n    return deferred.promise;\n  };\n  chart.getWeeklySalesData = /*#__PURE__*/function () {\n    var _ref = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee(date) {\n      return _regeneratorRuntime().wrap(function _callee$(_context) {\n        while (1) switch (_context.prev = _context.next) {\n          case 0:\n            _context.next = 2;\n            return saleRepository.api.getWeeklySalesData(date);\n          case 2:\n            return _context.abrupt(\"return\", _context.sent);\n          case 3:\n          case \"end\":\n            return _context.stop();\n        }\n      }, _callee);\n    }));\n    return function (_x) {\n      return _ref.apply(this, arguments);\n    };\n  }();\n  chart.getMonthlySalesData = /*#__PURE__*/function () {\n    var _ref2 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee2(date) {\n      return _regeneratorRuntime().wrap(function _callee2$(_context2) {\n        while (1) switch (_context2.prev = _context2.next) {\n          case 0:\n            _context2.next = 2;\n            return saleRepository.api.getMonthlySalesData(date);\n          case 2:\n            return _context2.abrupt(\"return\", _context2.sent);\n          case 3:\n          case \"end\":\n            return _context2.stop();\n        }\n      }, _callee2);\n    }));\n    return function (_x2) {\n      return _ref2.apply(this, arguments);\n    };\n  }();\n  chart.getYearlySalesData = /*#__PURE__*/function () {\n    var _ref3 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee3(date) {\n      return _regeneratorRuntime().wrap(function _callee3$(_context3) {\n        while (1) switch (_context3.prev = _context3.next) {\n          case 0:\n            _context3.next = 2;\n            return saleRepository.api.getYearlySalesData(date);\n          case 2:\n            return _context3.abrupt(\"return\", _context3.sent);\n          case 3:\n          case \"end\":\n            return _context3.stop();\n        }\n      }, _callee3);\n    }));\n    return function (_x3) {\n      return _ref3.apply(this, arguments);\n    };\n  }();\n  chart.getWeeklyBudgetsData = /*#__PURE__*/function () {\n    var _ref4 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee4(date) {\n      return _regeneratorRuntime().wrap(function _callee4$(_context4) {\n        while (1) switch (_context4.prev = _context4.next) {\n          case 0:\n            _context4.next = 2;\n            return saleRepository.api.getWeeklyBudgetsData(date);\n          case 2:\n            return _context4.abrupt(\"return\", _context4.sent);\n          case 3:\n          case \"end\":\n            return _context4.stop();\n        }\n      }, _callee4);\n    }));\n    return function (_x4) {\n      return _ref4.apply(this, arguments);\n    };\n  }();\n  chart.getMonthlyBudgetsData = /*#__PURE__*/function () {\n    var _ref5 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee5(date) {\n      return _regeneratorRuntime().wrap(function _callee5$(_context5) {\n        while (1) switch (_context5.prev = _context5.next) {\n          case 0:\n            _context5.next = 2;\n            return saleRepository.api.getMonthlyBudgetsData(date);\n          case 2:\n            return _context5.abrupt(\"return\", _context5.sent);\n          case 3:\n          case \"end\":\n            return _context5.stop();\n        }\n      }, _callee5);\n    }));\n    return function (_x5) {\n      return _ref5.apply(this, arguments);\n    };\n  }();\n  chart.getYearlyBudgetsData = /*#__PURE__*/function () {\n    var _ref6 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee6(date) {\n      return _regeneratorRuntime().wrap(function _callee6$(_context6) {\n        while (1) switch (_context6.prev = _context6.next) {\n          case 0:\n            _context6.next = 2;\n            return saleRepository.api.getYearlyBudgetsData(date);\n          case 2:\n            return _context6.abrupt(\"return\", _context6.sent);\n          case 3:\n          case \"end\":\n            return _context6.stop();\n        }\n      }, _callee6);\n    }));\n    return function (_x6) {\n      return _ref6.apply(this, arguments);\n    };\n  }();\n  function transformDaily(salesData) {\n    if (!salesData || Object.keys(salesData).length === 0) return null;\n    var hours = [];\n    for (var date in salesData) if (salesData.hasOwnProperty(date)) for (var hour in salesData[date]) hours.push([hour, salesData[date][hour]]);\n    return hours;\n  }\n  function createEmptyDaily() {\n    var hours = [];\n    for (var i = 0; i <= 23; i++) hours.push([i, 0]);\n    return hours;\n  }\n  return chart;\n});\n","\"use strict\";\n\n/**\n * A factory service to handle logic for the Clean Cash integration\n * @return {cleanCashService}\n */\npos.factory(\"cleanCashService\", function (posConfig, backend, $q, cleanCashRepository, $rootScope, notification, $translate) {\n  \"use strict\";\n\n  var cleanCashService = {};\n  this.isCleanCashActiveForSale = false;\n\n  //Public methods\n\n  /**\n   * Is the clean cash feature enabled in the shop features.\n   */\n  cleanCashService.isCleanCashEnabled = function () {\n    var ccOption = getCleanCashOptions();\n    return isCleanCashEnabled(ccOption);\n  };\n\n  /**\n   * Test if the selected connector can connect to clean cash.\n   */\n  cleanCashService.canConnectToCleanCash = function () {\n    var cvr = posConfig.getCvr();\n    var matchedOption = findCleanCashConnectorOption();\n    if (!matchedOption) return $q.resolve(false);\n    var status = false;\n    return cleanCashRepository.api.cleanCashConnection(matchedOption.retailId, posConfig.shopId, cvr).then(function (response) {\n      status = response.data;\n      return status;\n    }, function (errorResponse) {\n      status = false;\n      return status;\n    });\n  };\n\n  /**\n   * Will get at clean cash code based on the receipt object.\n   * @param {receipt} receipt [Receipt object the clean cash code should be generated from]\n   * @param {bool} generateNewCode [Should a new code be generated, or old code reused]\n   */\n  cleanCashService.getCleanCashCode = function (receipt, generateNewCode) {\n    var cvr = posConfig.getCvr();\n    var matchedOption = findCleanCashConnectorOption();\n    var codeType = generateNewCode ? \"N\" : \"C\";\n    return cleanCashRepository.api.cleanCash(receipt, matchedOption.retailId, codeType, cvr);\n  };\n\n  /**\n   * Will get at clean cash code based on the receipt object, if clean cash is active for\n   * the current sale\n   * @param {receipt} receipt Receipt object the clean cash code should be generated from\n   * @param {bool} generateNewCode Should a new code be generated, or old code reused\n   */\n  cleanCashService.getCleanCashCodeIfActive = function (receipt, generateNewCode) {\n    if (cleanCashService.isCleanCashActive()) {\n      // Remove MongoDb id to avoid type error when sending the receipt to the backend.\n      var receiptId = receipt.id;\n      receipt.id = 0;\n      return cleanCashService.getCleanCashCode(receipt, generateNewCode).then(function (response) {\n        receipt.id = receiptId;\n        return response.data;\n      });\n    } else {\n      return $q.when(\"\");\n    }\n  };\n\n  /**\n   * Set the status of clean cash for the current sale.\n   * @param {bool} status Status of clean cash for the current sale\n   */\n  cleanCashService.toogleCleanCashStatus = function (status) {\n    this.isCleanCashActiveForSale = status;\n  };\n\n  /**\n   * Check if clean cash is active for the current sale.\n   */\n  cleanCashService.isCleanCashActive = function () {\n    return this.isCleanCashActiveForSale;\n  };\n\n  // Private methods\n\n  function getCleanCashOptions() {\n    return posConfig.getShopFeatures().cleanCash;\n  }\n  function isCleanCashEnabled(ccOption) {\n    return ccOption !== undefined && ccOption !== null && ccOption.values !== null && ccOption.values.active;\n  }\n  function findCleanCashConnectorOption() {\n    var ccOption = getCleanCashOptions();\n    if (!isCleanCashEnabled(ccOption)) return undefined;\n    var selectedConnector = backend.getCurrentDevice();\n    var matchedOption = ccOption.values.connectorOptions.find(function (connectorOption) {\n      return connectorOption.mac === selectedConnector.mac;\n    });\n    return matchedOption;\n  }\n\n  // Event handlers\n  $rootScope.$on(\"clerklogin:logout\", function () {\n    cleanCashService.toogleCleanCashStatus(false);\n  });\n  $rootScope.$on(\"backend:setdefaultdevice\", function (e, options) {\n    if (!cleanCashService.isCleanCashEnabled()) return;\n    cleanCashService.canConnectToCleanCash().then(function (canConnect) {\n      if (canConnect) {\n        cleanCashService.toogleCleanCashStatus(true);\n      } else {\n        backend.setDefaultDevice(options.oldDefaultDevice, true);\n        notification.pop(\"error\", $translate.instant(\"connectorchange/cleanCashModalTitle\"), $translate.instant(\"connectorchange/cleanCashModalDescription\"), 5000);\n      }\n    });\n  });\n  return cleanCashService;\n});\n","\"use strict\";\n\npos.factory(\"cleanCashRepository\", function (backend) {\n  var cleanCash = {};\n  cleanCash.api = {\n    cleanCash: function cleanCash(receipt, retailId, receiptType, cvr) {\n      return backend.api.put(\"api/cleancash\", {\n        receipt: receipt,\n        retailId: retailId,\n        receiptType: receiptType,\n        cvr: cvr\n      });\n    },\n    cleanCashConnection: function cleanCashConnection(retailId, shopId, cvr) {\n      return backend.api.get(\"api/cleancash/checkstatus/\" + shopId + \"/\" + retailId + \"/\" + cvr);\n    }\n  };\n  return cleanCash;\n});\n","\"use strict\";\n\npos.controller(\"DebugController\", function ($scope, $log) {\n  $scope.clearLocalStorage = function () {\n    localStorage.clear();\n  };\n  $scope.localStorage = [];\n  $scope.getLocalStorage = function () {\n    var ls = [];\n    for (var i = 0; i < localStorage.length; i++) {\n      var key = localStorage.key(i);\n      $log.debug(key);\n      var value = localStorage.getItem(localStorage.key(i));\n      ls.push({\n        key: key,\n        value: value\n      });\n    }\n    $scope.localStorage = ls;\n    $log.debug($scope.localStorage);\n  };\n  $scope.getLocalStorage();\n});\n","\"use strict\";\n\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _regeneratorRuntime() { \"use strict\"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return r; }; var t, r = {}, e = Object.prototype, n = e.hasOwnProperty, o = \"function\" == typeof Symbol ? Symbol : {}, i = o.iterator || \"@@iterator\", a = o.asyncIterator || \"@@asyncIterator\", u = o.toStringTag || \"@@toStringTag\"; function c(t, r, e, n) { return Object.defineProperty(t, r, { value: e, enumerable: !n, configurable: !n, writable: !n }); } try { c({}, \"\"); } catch (t) { c = function c(t, r, e) { return t[r] = e; }; } function h(r, e, n, o) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype); return c(a, \"_invoke\", function (r, e, n) { var o = 1; return function (i, a) { if (3 === o) throw Error(\"Generator is already running\"); if (4 === o) { if (\"throw\" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var u = n.delegate; if (u) { var c = d(u, n); if (c) { if (c === f) continue; return c; } } if (\"next\" === n.method) n.sent = n._sent = n.arg;else if (\"throw\" === n.method) { if (1 === o) throw o = 4, n.arg; n.dispatchException(n.arg); } else \"return\" === n.method && n.abrupt(\"return\", n.arg); o = 3; var h = s(r, e, n); if (\"normal\" === h.type) { if (o = n.done ? 4 : 2, h.arg === f) continue; return { value: h.arg, done: n.done }; } \"throw\" === h.type && (o = 4, n.method = \"throw\", n.arg = h.arg); } }; }(r, n, new Context(o || [])), !0), a; } function s(t, r, e) { try { return { type: \"normal\", arg: t.call(r, e) }; } catch (t) { return { type: \"throw\", arg: t }; } } r.wrap = h; var f = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var l = {}; c(l, i, function () { return this; }); var p = Object.getPrototypeOf, y = p && p(p(x([]))); y && y !== e && n.call(y, i) && (l = y); var v = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(l); function g(t) { [\"next\", \"throw\", \"return\"].forEach(function (r) { c(t, r, function (t) { return this._invoke(r, t); }); }); } function AsyncIterator(t, r) { function e(o, i, a, u) { var c = s(t[o], t, i); if (\"throw\" !== c.type) { var h = c.arg, f = h.value; return f && \"object\" == _typeof(f) && n.call(f, \"__await\") ? r.resolve(f.__await).then(function (t) { e(\"next\", t, a, u); }, function (t) { e(\"throw\", t, a, u); }) : r.resolve(f).then(function (t) { h.value = t, a(h); }, function (t) { return e(\"throw\", t, a, u); }); } u(c.arg); } var o; c(this, \"_invoke\", function (t, n) { function i() { return new r(function (r, o) { e(t, n, r, o); }); } return o = o ? o.then(i, i) : i(); }, !0); } function d(r, e) { var n = e.method, o = r.i[n]; if (o === t) return e.delegate = null, \"throw\" === n && r.i[\"return\"] && (e.method = \"return\", e.arg = t, d(r, e), \"throw\" === e.method) || \"return\" !== n && (e.method = \"throw\", e.arg = new TypeError(\"The iterator does not provide a '\" + n + \"' method\")), f; var i = s(o, r.i, e.arg); if (\"throw\" === i.type) return e.method = \"throw\", e.arg = i.arg, e.delegate = null, f; var a = i.arg; return a ? a.done ? (e[r.r] = a.value, e.next = r.n, \"return\" !== e.method && (e.method = \"next\", e.arg = t), e.delegate = null, f) : a : (e.method = \"throw\", e.arg = new TypeError(\"iterator result is not an object\"), e.delegate = null, f); } function w(t) { this.tryEntries.push(t); } function m(r) { var e = r[4] || {}; e.type = \"normal\", e.arg = t, r[4] = e; } function Context(t) { this.tryEntries = [[-1]], t.forEach(w, this), this.reset(!0); } function x(r) { if (null != r) { var e = r[i]; if (e) return e.call(r); if (\"function\" == typeof r.next) return r; if (!isNaN(r.length)) { var o = -1, a = function e() { for (; ++o < r.length;) if (n.call(r, o)) return e.value = r[o], e.done = !1, e; return e.value = t, e.done = !0, e; }; return a.next = a; } } throw new TypeError(_typeof(r) + \" is not iterable\"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, c(v, \"constructor\", GeneratorFunctionPrototype), c(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction), GeneratorFunction.displayName = c(GeneratorFunctionPrototype, u, \"GeneratorFunction\"), r.isGeneratorFunction = function (t) { var r = \"function\" == typeof t && t.constructor; return !!r && (r === GeneratorFunction || \"GeneratorFunction\" === (r.displayName || r.name)); }, r.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, c(t, u, \"GeneratorFunction\")), t.prototype = Object.create(v), t; }, r.awrap = function (t) { return { __await: t }; }, g(AsyncIterator.prototype), c(AsyncIterator.prototype, a, function () { return this; }), r.AsyncIterator = AsyncIterator, r.async = function (t, e, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(h(t, e, n, o), i); return r.isGeneratorFunction(e) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, g(v), c(v, u, \"Generator\"), c(v, i, function () { return this; }), c(v, \"toString\", function () { return \"[object Generator]\"; }), r.keys = function (t) { var r = Object(t), e = []; for (var n in r) e.unshift(n); return function t() { for (; e.length;) if ((n = e.pop()) in r) return t.value = n, t.done = !1, t; return t.done = !0, t; }; }, r.values = x, Context.prototype = { constructor: Context, reset: function reset(r) { if (this.prev = this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = \"next\", this.arg = t, this.tryEntries.forEach(m), !r) for (var e in this) \"t\" === e.charAt(0) && n.call(this, e) && !isNaN(+e.slice(1)) && (this[e] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0][4]; if (\"throw\" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(r) { if (this.done) throw r; var e = this; function n(t) { a.type = \"throw\", a.arg = r, e.next = t; } for (var o = e.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i[4], u = this.prev, c = i[1], h = i[2]; if (-1 === i[0]) return n(\"end\"), !1; if (!c && !h) throw Error(\"try statement without catch or finally\"); if (null != i[0] && i[0] <= u) { if (u < c) return this.method = \"next\", this.arg = t, n(c), !0; if (u < h) return n(h), !1; } } }, abrupt: function abrupt(t, r) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var n = this.tryEntries[e]; if (n[0] > -1 && n[0] <= this.prev && this.prev < n[2]) { var o = n; break; } } o && (\"break\" === t || \"continue\" === t) && o[0] <= r && r <= o[2] && (o = null); var i = o ? o[4] : {}; return i.type = t, i.arg = r, o ? (this.method = \"next\", this.next = o[2], f) : this.complete(i); }, complete: function complete(t, r) { if (\"throw\" === t.type) throw t.arg; return \"break\" === t.type || \"continue\" === t.type ? this.next = t.arg : \"return\" === t.type ? (this.rval = this.arg = t.arg, this.method = \"return\", this.next = \"end\") : \"normal\" === t.type && r && (this.next = r), f; }, finish: function finish(t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[2] === t) return this.complete(e[4], e[3]), m(e), f; } }, \"catch\": function _catch(t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[0] === t) { var n = e[4]; if (\"throw\" === n.type) { var o = n.arg; m(e); } return o; } } throw Error(\"illegal catch attempt\"); }, delegateYield: function delegateYield(r, e, n) { return this.delegate = { i: x(r), r: e, n: n }, \"next\" === this.method && (this.arg = t), f; } }, r; }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"next\", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"throw\", n); } _next(void 0); }); }; }\npos.controller(\"AccountDepositCtrl\", function ($scope, $state, notification, $translate, receipt, fluctuatingPropertiesHelper) {\n  var i18nProperAmount;\n  var i18nGreaterThanTotal;\n  $scope.price = 0;\n  var maxAmount = 0;\n  init();\n  $scope.addToReceipt = function () {\n    $scope.price = new Decimal($scope.price);\n    if ($scope.price.isNaN() || $scope.price.isZero()) {\n      notification.pop(\"info\", i18nProperAmount);\n      return;\n    }\n    if (maxAmount > 0) {\n      if ($scope.price > maxAmount) {\n        notification.pop(\"info\", i18nGreaterThanTotal);\n        return;\n      }\n    }\n    receipt.addAccountDeposit($scope.price);\n    $state.go(\"root.split.pos\");\n  };\n  $scope.reset = function () {\n    $scope.price = \"\";\n  };\n  function setMaxPaymentAmount() {\n    var maxAmountToPay = fluctuatingPropertiesHelper.getMaxPaymentValue(receipt.getReceipt());\n    if (maxAmountToPay) {\n      $scope.price = maxAmountToPay;\n      maxAmount = maxAmountToPay;\n    }\n  }\n  function init() {\n    return _init.apply(this, arguments);\n  }\n  function _init() {\n    _init = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee() {\n      var translations;\n      return _regeneratorRuntime().wrap(function _callee$(_context) {\n        while (1) switch (_context.prev = _context.next) {\n          case 0:\n            setMaxPaymentAmount();\n            _context.next = 3;\n            return $translate([\"input/enter_amount\", \"toast/proper amount\", \"toast/greater than combine total\"]);\n          case 3:\n            translations = _context.sent;\n            i18nProperAmount = translations[\"toast/proper amount\"];\n            $scope.placeHolder = translations[\"input/enter_amount\"];\n            i18nGreaterThanTotal = translations[\"toast/greater than combine total\"];\n          case 7:\n          case \"end\":\n            return _context.stop();\n        }\n      }, _callee);\n    }));\n    return _init.apply(this, arguments);\n  }\n});\n","\"use strict\";\n\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _regeneratorRuntime() { \"use strict\"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return r; }; var t, r = {}, e = Object.prototype, n = e.hasOwnProperty, o = \"function\" == typeof Symbol ? Symbol : {}, i = o.iterator || \"@@iterator\", a = o.asyncIterator || \"@@asyncIterator\", u = o.toStringTag || \"@@toStringTag\"; function c(t, r, e, n) { return Object.defineProperty(t, r, { value: e, enumerable: !n, configurable: !n, writable: !n }); } try { c({}, \"\"); } catch (t) { c = function c(t, r, e) { return t[r] = e; }; } function h(r, e, n, o) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype); return c(a, \"_invoke\", function (r, e, n) { var o = 1; return function (i, a) { if (3 === o) throw Error(\"Generator is already running\"); if (4 === o) { if (\"throw\" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var u = n.delegate; if (u) { var c = d(u, n); if (c) { if (c === f) continue; return c; } } if (\"next\" === n.method) n.sent = n._sent = n.arg;else if (\"throw\" === n.method) { if (1 === o) throw o = 4, n.arg; n.dispatchException(n.arg); } else \"return\" === n.method && n.abrupt(\"return\", n.arg); o = 3; var h = s(r, e, n); if (\"normal\" === h.type) { if (o = n.done ? 4 : 2, h.arg === f) continue; return { value: h.arg, done: n.done }; } \"throw\" === h.type && (o = 4, n.method = \"throw\", n.arg = h.arg); } }; }(r, n, new Context(o || [])), !0), a; } function s(t, r, e) { try { return { type: \"normal\", arg: t.call(r, e) }; } catch (t) { return { type: \"throw\", arg: t }; } } r.wrap = h; var f = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var l = {}; c(l, i, function () { return this; }); var p = Object.getPrototypeOf, y = p && p(p(x([]))); y && y !== e && n.call(y, i) && (l = y); var v = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(l); function g(t) { [\"next\", \"throw\", \"return\"].forEach(function (r) { c(t, r, function (t) { return this._invoke(r, t); }); }); } function AsyncIterator(t, r) { function e(o, i, a, u) { var c = s(t[o], t, i); if (\"throw\" !== c.type) { var h = c.arg, f = h.value; return f && \"object\" == _typeof(f) && n.call(f, \"__await\") ? r.resolve(f.__await).then(function (t) { e(\"next\", t, a, u); }, function (t) { e(\"throw\", t, a, u); }) : r.resolve(f).then(function (t) { h.value = t, a(h); }, function (t) { return e(\"throw\", t, a, u); }); } u(c.arg); } var o; c(this, \"_invoke\", function (t, n) { function i() { return new r(function (r, o) { e(t, n, r, o); }); } return o = o ? o.then(i, i) : i(); }, !0); } function d(r, e) { var n = e.method, o = r.i[n]; if (o === t) return e.delegate = null, \"throw\" === n && r.i[\"return\"] && (e.method = \"return\", e.arg = t, d(r, e), \"throw\" === e.method) || \"return\" !== n && (e.method = \"throw\", e.arg = new TypeError(\"The iterator does not provide a '\" + n + \"' method\")), f; var i = s(o, r.i, e.arg); if (\"throw\" === i.type) return e.method = \"throw\", e.arg = i.arg, e.delegate = null, f; var a = i.arg; return a ? a.done ? (e[r.r] = a.value, e.next = r.n, \"return\" !== e.method && (e.method = \"next\", e.arg = t), e.delegate = null, f) : a : (e.method = \"throw\", e.arg = new TypeError(\"iterator result is not an object\"), e.delegate = null, f); } function w(t) { this.tryEntries.push(t); } function m(r) { var e = r[4] || {}; e.type = \"normal\", e.arg = t, r[4] = e; } function Context(t) { this.tryEntries = [[-1]], t.forEach(w, this), this.reset(!0); } function x(r) { if (null != r) { var e = r[i]; if (e) return e.call(r); if (\"function\" == typeof r.next) return r; if (!isNaN(r.length)) { var o = -1, a = function e() { for (; ++o < r.length;) if (n.call(r, o)) return e.value = r[o], e.done = !1, e; return e.value = t, e.done = !0, e; }; return a.next = a; } } throw new TypeError(_typeof(r) + \" is not iterable\"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, c(v, \"constructor\", GeneratorFunctionPrototype), c(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction), GeneratorFunction.displayName = c(GeneratorFunctionPrototype, u, \"GeneratorFunction\"), r.isGeneratorFunction = function (t) { var r = \"function\" == typeof t && t.constructor; return !!r && (r === GeneratorFunction || \"GeneratorFunction\" === (r.displayName || r.name)); }, r.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, c(t, u, \"GeneratorFunction\")), t.prototype = Object.create(v), t; }, r.awrap = function (t) { return { __await: t }; }, g(AsyncIterator.prototype), c(AsyncIterator.prototype, a, function () { return this; }), r.AsyncIterator = AsyncIterator, r.async = function (t, e, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(h(t, e, n, o), i); return r.isGeneratorFunction(e) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, g(v), c(v, u, \"Generator\"), c(v, i, function () { return this; }), c(v, \"toString\", function () { return \"[object Generator]\"; }), r.keys = function (t) { var r = Object(t), e = []; for (var n in r) e.unshift(n); return function t() { for (; e.length;) if ((n = e.pop()) in r) return t.value = n, t.done = !1, t; return t.done = !0, t; }; }, r.values = x, Context.prototype = { constructor: Context, reset: function reset(r) { if (this.prev = this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = \"next\", this.arg = t, this.tryEntries.forEach(m), !r) for (var e in this) \"t\" === e.charAt(0) && n.call(this, e) && !isNaN(+e.slice(1)) && (this[e] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0][4]; if (\"throw\" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(r) { if (this.done) throw r; var e = this; function n(t) { a.type = \"throw\", a.arg = r, e.next = t; } for (var o = e.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i[4], u = this.prev, c = i[1], h = i[2]; if (-1 === i[0]) return n(\"end\"), !1; if (!c && !h) throw Error(\"try statement without catch or finally\"); if (null != i[0] && i[0] <= u) { if (u < c) return this.method = \"next\", this.arg = t, n(c), !0; if (u < h) return n(h), !1; } } }, abrupt: function abrupt(t, r) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var n = this.tryEntries[e]; if (n[0] > -1 && n[0] <= this.prev && this.prev < n[2]) { var o = n; break; } } o && (\"break\" === t || \"continue\" === t) && o[0] <= r && r <= o[2] && (o = null); var i = o ? o[4] : {}; return i.type = t, i.arg = r, o ? (this.method = \"next\", this.next = o[2], f) : this.complete(i); }, complete: function complete(t, r) { if (\"throw\" === t.type) throw t.arg; return \"break\" === t.type || \"continue\" === t.type ? this.next = t.arg : \"return\" === t.type ? (this.rval = this.arg = t.arg, this.method = \"return\", this.next = \"end\") : \"normal\" === t.type && r && (this.next = r), f; }, finish: function finish(t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[2] === t) return this.complete(e[4], e[3]), m(e), f; } }, \"catch\": function _catch(t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[0] === t) { var n = e[4]; if (\"throw\" === n.type) { var o = n.arg; m(e); } return o; } } throw Error(\"illegal catch attempt\"); }, delegateYield: function delegateYield(r, e, n) { return this.delegate = { i: x(r), r: e, n: n }, \"next\" === this.method && (this.arg = t), f; } }, r; }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"next\", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"throw\", n); } _next(void 0); }); }; }\npos.controller(\"DownPaymentArticleDetailsController\", function ($scope, downpayItemService, receipt, $state) {\n  \"use strict\";\n\n  $scope.article = downpayItemService.selectedArticle;\n  $scope.stock = 0;\n  $scope.enableExendedData = false;\n  $scope.stockValid = false;\n  $scope.qtyReceived = false;\n  $scope.qtyRequested = 0;\n  $scope.addItem = /*#__PURE__*/function () {\n    var _ref = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee(item) {\n      var isStockValid;\n      return _regeneratorRuntime().wrap(function _callee$(_context) {\n        while (1) switch (_context.prev = _context.next) {\n          case 0:\n            _context.next = 2;\n            return downpayItemService.validateStock(item, $scope.qtyRequested);\n          case 2:\n            isStockValid = _context.sent;\n            if (isStockValid.isAvailable) {\n              item.quantity = $scope.qtyRequested;\n              item.maxQuantityOne = false;\n              receipt.addToReceipt(item);\n              $state.go(\"root.split.pos\");\n            }\n          case 4:\n          case \"end\":\n            return _context.stop();\n        }\n      }, _callee);\n    }));\n    return function (_x) {\n      return _ref.apply(this, arguments);\n    };\n  }();\n  $scope.validateStock = function (quantity) {\n    downpayItemService.validateStock($scope.article, quantity).then(function (result) {\n      if (result) {\n        $scope.qtyReceived = true;\n        $scope.stockValid = result.isAvailable;\n        $scope.stock = result.availableStock;\n        $scope.qtyRequested = quantity;\n        $scope.addItem($scope.article);\n      }\n    });\n  };\n});\n","\"use strict\";\n\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _regeneratorRuntime() { \"use strict\"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return r; }; var t, r = {}, e = Object.prototype, n = e.hasOwnProperty, o = \"function\" == typeof Symbol ? Symbol : {}, i = o.iterator || \"@@iterator\", a = o.asyncIterator || \"@@asyncIterator\", u = o.toStringTag || \"@@toStringTag\"; function c(t, r, e, n) { return Object.defineProperty(t, r, { value: e, enumerable: !n, configurable: !n, writable: !n }); } try { c({}, \"\"); } catch (t) { c = function c(t, r, e) { return t[r] = e; }; } function h(r, e, n, o) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype); return c(a, \"_invoke\", function (r, e, n) { var o = 1; return function (i, a) { if (3 === o) throw Error(\"Generator is already running\"); if (4 === o) { if (\"throw\" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var u = n.delegate; if (u) { var c = d(u, n); if (c) { if (c === f) continue; return c; } } if (\"next\" === n.method) n.sent = n._sent = n.arg;else if (\"throw\" === n.method) { if (1 === o) throw o = 4, n.arg; n.dispatchException(n.arg); } else \"return\" === n.method && n.abrupt(\"return\", n.arg); o = 3; var h = s(r, e, n); if (\"normal\" === h.type) { if (o = n.done ? 4 : 2, h.arg === f) continue; return { value: h.arg, done: n.done }; } \"throw\" === h.type && (o = 4, n.method = \"throw\", n.arg = h.arg); } }; }(r, n, new Context(o || [])), !0), a; } function s(t, r, e) { try { return { type: \"normal\", arg: t.call(r, e) }; } catch (t) { return { type: \"throw\", arg: t }; } } r.wrap = h; var f = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var l = {}; c(l, i, function () { return this; }); var p = Object.getPrototypeOf, y = p && p(p(x([]))); y && y !== e && n.call(y, i) && (l = y); var v = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(l); function g(t) { [\"next\", \"throw\", \"return\"].forEach(function (r) { c(t, r, function (t) { return this._invoke(r, t); }); }); } function AsyncIterator(t, r) { function e(o, i, a, u) { var c = s(t[o], t, i); if (\"throw\" !== c.type) { var h = c.arg, f = h.value; return f && \"object\" == _typeof(f) && n.call(f, \"__await\") ? r.resolve(f.__await).then(function (t) { e(\"next\", t, a, u); }, function (t) { e(\"throw\", t, a, u); }) : r.resolve(f).then(function (t) { h.value = t, a(h); }, function (t) { return e(\"throw\", t, a, u); }); } u(c.arg); } var o; c(this, \"_invoke\", function (t, n) { function i() { return new r(function (r, o) { e(t, n, r, o); }); } return o = o ? o.then(i, i) : i(); }, !0); } function d(r, e) { var n = e.method, o = r.i[n]; if (o === t) return e.delegate = null, \"throw\" === n && r.i[\"return\"] && (e.method = \"return\", e.arg = t, d(r, e), \"throw\" === e.method) || \"return\" !== n && (e.method = \"throw\", e.arg = new TypeError(\"The iterator does not provide a '\" + n + \"' method\")), f; var i = s(o, r.i, e.arg); if (\"throw\" === i.type) return e.method = \"throw\", e.arg = i.arg, e.delegate = null, f; var a = i.arg; return a ? a.done ? (e[r.r] = a.value, e.next = r.n, \"return\" !== e.method && (e.method = \"next\", e.arg = t), e.delegate = null, f) : a : (e.method = \"throw\", e.arg = new TypeError(\"iterator result is not an object\"), e.delegate = null, f); } function w(t) { this.tryEntries.push(t); } function m(r) { var e = r[4] || {}; e.type = \"normal\", e.arg = t, r[4] = e; } function Context(t) { this.tryEntries = [[-1]], t.forEach(w, this), this.reset(!0); } function x(r) { if (null != r) { var e = r[i]; if (e) return e.call(r); if (\"function\" == typeof r.next) return r; if (!isNaN(r.length)) { var o = -1, a = function e() { for (; ++o < r.length;) if (n.call(r, o)) return e.value = r[o], e.done = !1, e; return e.value = t, e.done = !0, e; }; return a.next = a; } } throw new TypeError(_typeof(r) + \" is not iterable\"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, c(v, \"constructor\", GeneratorFunctionPrototype), c(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction), GeneratorFunction.displayName = c(GeneratorFunctionPrototype, u, \"GeneratorFunction\"), r.isGeneratorFunction = function (t) { var r = \"function\" == typeof t && t.constructor; return !!r && (r === GeneratorFunction || \"GeneratorFunction\" === (r.displayName || r.name)); }, r.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, c(t, u, \"GeneratorFunction\")), t.prototype = Object.create(v), t; }, r.awrap = function (t) { return { __await: t }; }, g(AsyncIterator.prototype), c(AsyncIterator.prototype, a, function () { return this; }), r.AsyncIterator = AsyncIterator, r.async = function (t, e, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(h(t, e, n, o), i); return r.isGeneratorFunction(e) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, g(v), c(v, u, \"Generator\"), c(v, i, function () { return this; }), c(v, \"toString\", function () { return \"[object Generator]\"; }), r.keys = function (t) { var r = Object(t), e = []; for (var n in r) e.unshift(n); return function t() { for (; e.length;) if ((n = e.pop()) in r) return t.value = n, t.done = !1, t; return t.done = !0, t; }; }, r.values = x, Context.prototype = { constructor: Context, reset: function reset(r) { if (this.prev = this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = \"next\", this.arg = t, this.tryEntries.forEach(m), !r) for (var e in this) \"t\" === e.charAt(0) && n.call(this, e) && !isNaN(+e.slice(1)) && (this[e] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0][4]; if (\"throw\" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(r) { if (this.done) throw r; var e = this; function n(t) { a.type = \"throw\", a.arg = r, e.next = t; } for (var o = e.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i[4], u = this.prev, c = i[1], h = i[2]; if (-1 === i[0]) return n(\"end\"), !1; if (!c && !h) throw Error(\"try statement without catch or finally\"); if (null != i[0] && i[0] <= u) { if (u < c) return this.method = \"next\", this.arg = t, n(c), !0; if (u < h) return n(h), !1; } } }, abrupt: function abrupt(t, r) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var n = this.tryEntries[e]; if (n[0] > -1 && n[0] <= this.prev && this.prev < n[2]) { var o = n; break; } } o && (\"break\" === t || \"continue\" === t) && o[0] <= r && r <= o[2] && (o = null); var i = o ? o[4] : {}; return i.type = t, i.arg = r, o ? (this.method = \"next\", this.next = o[2], f) : this.complete(i); }, complete: function complete(t, r) { if (\"throw\" === t.type) throw t.arg; return \"break\" === t.type || \"continue\" === t.type ? this.next = t.arg : \"return\" === t.type ? (this.rval = this.arg = t.arg, this.method = \"return\", this.next = \"end\") : \"normal\" === t.type && r && (this.next = r), f; }, finish: function finish(t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[2] === t) return this.complete(e[4], e[3]), m(e), f; } }, \"catch\": function _catch(t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[0] === t) { var n = e[4]; if (\"throw\" === n.type) { var o = n.arg; m(e); } return o; } } throw Error(\"illegal catch attempt\"); }, delegateYield: function delegateYield(r, e, n) { return this.delegate = { i: x(r), r: e, n: n }, \"next\" === this.method && (this.arg = t), f; } }, r; }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"next\", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"throw\", n); } _next(void 0); }); }; }\npos.controller(\"CheckDownpaymentController\", function ($scope, downpayOrderService, receipt) {\n  \"use strict\";\n\n  $scope.downpaymentItem = null;\n  $scope.book = /*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee() {\n    return _regeneratorRuntime().wrap(function _callee$(_context) {\n      while (1) switch (_context.prev = _context.next) {\n        case 0:\n          _context.next = 2;\n          return downpayOrderService.book();\n        case 2:\n        case \"end\":\n          return _context.stop();\n      }\n    }, _callee);\n  }));\n  $scope.removeDownpayment = function () {\n    var reciptItems = receipt.getReceipt().items;\n    for (var i = reciptItems.length; i--;) {\n      if (reciptItems[i].templateType === \"downPayment\") {\n        reciptItems.splice(i, 1);\n      }\n    }\n    $scope.book();\n  };\n  init();\n  function init() {\n    var reciptItems = receipt.getReceipt().items;\n    for (var i = reciptItems.length; i--;) {\n      if (reciptItems[i].templateType === \"downPayment\") {\n        $scope.downpaymentItem = reciptItems[i];\n      }\n    }\n  }\n});\n","\"use strict\";\n\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _regeneratorRuntime() { \"use strict\"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return r; }; var t, r = {}, e = Object.prototype, n = e.hasOwnProperty, o = \"function\" == typeof Symbol ? Symbol : {}, i = o.iterator || \"@@iterator\", a = o.asyncIterator || \"@@asyncIterator\", u = o.toStringTag || \"@@toStringTag\"; function c(t, r, e, n) { return Object.defineProperty(t, r, { value: e, enumerable: !n, configurable: !n, writable: !n }); } try { c({}, \"\"); } catch (t) { c = function c(t, r, e) { return t[r] = e; }; } function h(r, e, n, o) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype); return c(a, \"_invoke\", function (r, e, n) { var o = 1; return function (i, a) { if (3 === o) throw Error(\"Generator is already running\"); if (4 === o) { if (\"throw\" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var u = n.delegate; if (u) { var c = d(u, n); if (c) { if (c === f) continue; return c; } } if (\"next\" === n.method) n.sent = n._sent = n.arg;else if (\"throw\" === n.method) { if (1 === o) throw o = 4, n.arg; n.dispatchException(n.arg); } else \"return\" === n.method && n.abrupt(\"return\", n.arg); o = 3; var h = s(r, e, n); if (\"normal\" === h.type) { if (o = n.done ? 4 : 2, h.arg === f) continue; return { value: h.arg, done: n.done }; } \"throw\" === h.type && (o = 4, n.method = \"throw\", n.arg = h.arg); } }; }(r, n, new Context(o || [])), !0), a; } function s(t, r, e) { try { return { type: \"normal\", arg: t.call(r, e) }; } catch (t) { return { type: \"throw\", arg: t }; } } r.wrap = h; var f = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var l = {}; c(l, i, function () { return this; }); var p = Object.getPrototypeOf, y = p && p(p(x([]))); y && y !== e && n.call(y, i) && (l = y); var v = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(l); function g(t) { [\"next\", \"throw\", \"return\"].forEach(function (r) { c(t, r, function (t) { return this._invoke(r, t); }); }); } function AsyncIterator(t, r) { function e(o, i, a, u) { var c = s(t[o], t, i); if (\"throw\" !== c.type) { var h = c.arg, f = h.value; return f && \"object\" == _typeof(f) && n.call(f, \"__await\") ? r.resolve(f.__await).then(function (t) { e(\"next\", t, a, u); }, function (t) { e(\"throw\", t, a, u); }) : r.resolve(f).then(function (t) { h.value = t, a(h); }, function (t) { return e(\"throw\", t, a, u); }); } u(c.arg); } var o; c(this, \"_invoke\", function (t, n) { function i() { return new r(function (r, o) { e(t, n, r, o); }); } return o = o ? o.then(i, i) : i(); }, !0); } function d(r, e) { var n = e.method, o = r.i[n]; if (o === t) return e.delegate = null, \"throw\" === n && r.i[\"return\"] && (e.method = \"return\", e.arg = t, d(r, e), \"throw\" === e.method) || \"return\" !== n && (e.method = \"throw\", e.arg = new TypeError(\"The iterator does not provide a '\" + n + \"' method\")), f; var i = s(o, r.i, e.arg); if (\"throw\" === i.type) return e.method = \"throw\", e.arg = i.arg, e.delegate = null, f; var a = i.arg; return a ? a.done ? (e[r.r] = a.value, e.next = r.n, \"return\" !== e.method && (e.method = \"next\", e.arg = t), e.delegate = null, f) : a : (e.method = \"throw\", e.arg = new TypeError(\"iterator result is not an object\"), e.delegate = null, f); } function w(t) { this.tryEntries.push(t); } function m(r) { var e = r[4] || {}; e.type = \"normal\", e.arg = t, r[4] = e; } function Context(t) { this.tryEntries = [[-1]], t.forEach(w, this), this.reset(!0); } function x(r) { if (null != r) { var e = r[i]; if (e) return e.call(r); if (\"function\" == typeof r.next) return r; if (!isNaN(r.length)) { var o = -1, a = function e() { for (; ++o < r.length;) if (n.call(r, o)) return e.value = r[o], e.done = !1, e; return e.value = t, e.done = !0, e; }; return a.next = a; } } throw new TypeError(_typeof(r) + \" is not iterable\"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, c(v, \"constructor\", GeneratorFunctionPrototype), c(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction), GeneratorFunction.displayName = c(GeneratorFunctionPrototype, u, \"GeneratorFunction\"), r.isGeneratorFunction = function (t) { var r = \"function\" == typeof t && t.constructor; return !!r && (r === GeneratorFunction || \"GeneratorFunction\" === (r.displayName || r.name)); }, r.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, c(t, u, \"GeneratorFunction\")), t.prototype = Object.create(v), t; }, r.awrap = function (t) { return { __await: t }; }, g(AsyncIterator.prototype), c(AsyncIterator.prototype, a, function () { return this; }), r.AsyncIterator = AsyncIterator, r.async = function (t, e, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(h(t, e, n, o), i); return r.isGeneratorFunction(e) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, g(v), c(v, u, \"Generator\"), c(v, i, function () { return this; }), c(v, \"toString\", function () { return \"[object Generator]\"; }), r.keys = function (t) { var r = Object(t), e = []; for (var n in r) e.unshift(n); return function t() { for (; e.length;) if ((n = e.pop()) in r) return t.value = n, t.done = !1, t; return t.done = !0, t; }; }, r.values = x, Context.prototype = { constructor: Context, reset: function reset(r) { if (this.prev = this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = \"next\", this.arg = t, this.tryEntries.forEach(m), !r) for (var e in this) \"t\" === e.charAt(0) && n.call(this, e) && !isNaN(+e.slice(1)) && (this[e] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0][4]; if (\"throw\" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(r) { if (this.done) throw r; var e = this; function n(t) { a.type = \"throw\", a.arg = r, e.next = t; } for (var o = e.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i[4], u = this.prev, c = i[1], h = i[2]; if (-1 === i[0]) return n(\"end\"), !1; if (!c && !h) throw Error(\"try statement without catch or finally\"); if (null != i[0] && i[0] <= u) { if (u < c) return this.method = \"next\", this.arg = t, n(c), !0; if (u < h) return n(h), !1; } } }, abrupt: function abrupt(t, r) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var n = this.tryEntries[e]; if (n[0] > -1 && n[0] <= this.prev && this.prev < n[2]) { var o = n; break; } } o && (\"break\" === t || \"continue\" === t) && o[0] <= r && r <= o[2] && (o = null); var i = o ? o[4] : {}; return i.type = t, i.arg = r, o ? (this.method = \"next\", this.next = o[2], f) : this.complete(i); }, complete: function complete(t, r) { if (\"throw\" === t.type) throw t.arg; return \"break\" === t.type || \"continue\" === t.type ? this.next = t.arg : \"return\" === t.type ? (this.rval = this.arg = t.arg, this.method = \"return\", this.next = \"end\") : \"normal\" === t.type && r && (this.next = r), f; }, finish: function finish(t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[2] === t) return this.complete(e[4], e[3]), m(e), f; } }, \"catch\": function _catch(t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[0] === t) { var n = e[4]; if (\"throw\" === n.type) { var o = n.arg; m(e); } return o; } } throw Error(\"illegal catch attempt\"); }, delegateYield: function delegateYield(r, e, n) { return this.delegate = { i: x(r), r: e, n: n }, \"next\" === this.method && (this.arg = t), f; } }, r; }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"next\", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"throw\", n); } _next(void 0); }); }; }\npos.controller(\"DownPaymentEditCustomerController\", function ($scope, notification, $translate, $state, downpayOrderService, posConfig, eventBus) {\n  \"use strict\";\n\n  var i18nCheckLog;\n  $scope.customer = downpayOrderService.getSelectedCustomer();\n  $scope.formSubmitted = false;\n  $scope.dropdownExpanded = false;\n  $scope.countryDropdownExpanded = false;\n  $scope.currencyCodes = Object.values(posConfig.getCurrencySetup()).map(function (x) {\n    return x.name;\n  });\n  $scope.countries = {};\n  $scope.countryError = false;\n  init();\n  $scope.userCanChangeCurrencyCode = !$scope.editMode;\n  $scope.emailPattern = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]{2,}$/;\n  $scope.toggleDropdown = function () {\n    if ($scope.userCanChangeCurrencyCode) {\n      $scope.dropdownExpanded = !$scope.dropdownExpanded;\n    }\n  };\n  $scope.toggleCountryDropdown = function () {\n    $scope.countryDropdownExpanded = !$scope.countryDropdownExpanded;\n  };\n  $scope.setCurrencyCode = function (currencyCode) {\n    if (!$scope.customer) {\n      $scope.customer = {};\n    }\n    $scope.dropdownExpanded = false;\n    $scope.customer.currencyCode = currencyCode;\n  };\n  $scope.setCountry = function (country) {\n    if (!$scope.customer) {\n      $scope.customer = {};\n    }\n    $scope.countryDropdownExpanded = false;\n    $scope.customer.country = country.countryName;\n    $scope.customer.countryCode = country.countryCode;\n  };\n  $scope.saveCustomer = function (formState) {\n    $scope.countryError = false;\n    $scope.formSubmitted = true;\n    if (!formState) return;\n    if (!$scope.customer.country || $scope.customer.country.lenght === 0) {\n      $scope.countryError = true;\n      return;\n    }\n    $scope.customer.isActive = true;\n    downpayOrderService.addUpdateDownPaymentCustomer($scope.customer).then(saveSuccess, saveFailed);\n  };\n  function saveSuccess(response) {\n    if (response) {\n      response.addresses = $scope.customer.addresses;\n      downpayOrderService.setSelectedCustomer(response);\n      eventBus.notify(eventBus.events.customer.attach, response);\n      if (downpayOrderService.isBooking) {\n        $state.go(\"root.split.downpayment-selectbillingaddress\");\n      } else {\n        $state.go(\"root.split.pos\");\n      }\n    }\n  }\n  function saveFailed(errorResponse) {\n    notification.pop(\"error\", i18nCheckLog);\n  }\n  function init() {\n    return _init.apply(this, arguments);\n  }\n  function _init() {\n    _init = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee() {\n      var countryData, translations;\n      return _regeneratorRuntime().wrap(function _callee$(_context) {\n        while (1) switch (_context.prev = _context.next) {\n          case 0:\n            _context.next = 2;\n            return downpayOrderService.getCountries();\n          case 2:\n            countryData = _context.sent;\n            _context.next = 5;\n            return $translate([\"toast/check log\"]);\n          case 5:\n            translations = _context.sent;\n            i18nCheckLog = translations[\"toast/check log\"];\n            $scope.countries = countryData;\n            if ($scope.customer) {\n              $scope.editMode = true;\n            } else {\n              $scope.editMode = false;\n            }\n          case 9:\n          case \"end\":\n            return _context.stop();\n        }\n      }, _callee);\n    }));\n    return _init.apply(this, arguments);\n  }\n});\n","\"use strict\";\n\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _regeneratorRuntime() { \"use strict\"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return r; }; var t, r = {}, e = Object.prototype, n = e.hasOwnProperty, o = \"function\" == typeof Symbol ? Symbol : {}, i = o.iterator || \"@@iterator\", a = o.asyncIterator || \"@@asyncIterator\", u = o.toStringTag || \"@@toStringTag\"; function c(t, r, e, n) { return Object.defineProperty(t, r, { value: e, enumerable: !n, configurable: !n, writable: !n }); } try { c({}, \"\"); } catch (t) { c = function c(t, r, e) { return t[r] = e; }; } function h(r, e, n, o) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype); return c(a, \"_invoke\", function (r, e, n) { var o = 1; return function (i, a) { if (3 === o) throw Error(\"Generator is already running\"); if (4 === o) { if (\"throw\" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var u = n.delegate; if (u) { var c = d(u, n); if (c) { if (c === f) continue; return c; } } if (\"next\" === n.method) n.sent = n._sent = n.arg;else if (\"throw\" === n.method) { if (1 === o) throw o = 4, n.arg; n.dispatchException(n.arg); } else \"return\" === n.method && n.abrupt(\"return\", n.arg); o = 3; var h = s(r, e, n); if (\"normal\" === h.type) { if (o = n.done ? 4 : 2, h.arg === f) continue; return { value: h.arg, done: n.done }; } \"throw\" === h.type && (o = 4, n.method = \"throw\", n.arg = h.arg); } }; }(r, n, new Context(o || [])), !0), a; } function s(t, r, e) { try { return { type: \"normal\", arg: t.call(r, e) }; } catch (t) { return { type: \"throw\", arg: t }; } } r.wrap = h; var f = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var l = {}; c(l, i, function () { return this; }); var p = Object.getPrototypeOf, y = p && p(p(x([]))); y && y !== e && n.call(y, i) && (l = y); var v = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(l); function g(t) { [\"next\", \"throw\", \"return\"].forEach(function (r) { c(t, r, function (t) { return this._invoke(r, t); }); }); } function AsyncIterator(t, r) { function e(o, i, a, u) { var c = s(t[o], t, i); if (\"throw\" !== c.type) { var h = c.arg, f = h.value; return f && \"object\" == _typeof(f) && n.call(f, \"__await\") ? r.resolve(f.__await).then(function (t) { e(\"next\", t, a, u); }, function (t) { e(\"throw\", t, a, u); }) : r.resolve(f).then(function (t) { h.value = t, a(h); }, function (t) { return e(\"throw\", t, a, u); }); } u(c.arg); } var o; c(this, \"_invoke\", function (t, n) { function i() { return new r(function (r, o) { e(t, n, r, o); }); } return o = o ? o.then(i, i) : i(); }, !0); } function d(r, e) { var n = e.method, o = r.i[n]; if (o === t) return e.delegate = null, \"throw\" === n && r.i[\"return\"] && (e.method = \"return\", e.arg = t, d(r, e), \"throw\" === e.method) || \"return\" !== n && (e.method = \"throw\", e.arg = new TypeError(\"The iterator does not provide a '\" + n + \"' method\")), f; var i = s(o, r.i, e.arg); if (\"throw\" === i.type) return e.method = \"throw\", e.arg = i.arg, e.delegate = null, f; var a = i.arg; return a ? a.done ? (e[r.r] = a.value, e.next = r.n, \"return\" !== e.method && (e.method = \"next\", e.arg = t), e.delegate = null, f) : a : (e.method = \"throw\", e.arg = new TypeError(\"iterator result is not an object\"), e.delegate = null, f); } function w(t) { this.tryEntries.push(t); } function m(r) { var e = r[4] || {}; e.type = \"normal\", e.arg = t, r[4] = e; } function Context(t) { this.tryEntries = [[-1]], t.forEach(w, this), this.reset(!0); } function x(r) { if (null != r) { var e = r[i]; if (e) return e.call(r); if (\"function\" == typeof r.next) return r; if (!isNaN(r.length)) { var o = -1, a = function e() { for (; ++o < r.length;) if (n.call(r, o)) return e.value = r[o], e.done = !1, e; return e.value = t, e.done = !0, e; }; return a.next = a; } } throw new TypeError(_typeof(r) + \" is not iterable\"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, c(v, \"constructor\", GeneratorFunctionPrototype), c(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction), GeneratorFunction.displayName = c(GeneratorFunctionPrototype, u, \"GeneratorFunction\"), r.isGeneratorFunction = function (t) { var r = \"function\" == typeof t && t.constructor; return !!r && (r === GeneratorFunction || \"GeneratorFunction\" === (r.displayName || r.name)); }, r.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, c(t, u, \"GeneratorFunction\")), t.prototype = Object.create(v), t; }, r.awrap = function (t) { return { __await: t }; }, g(AsyncIterator.prototype), c(AsyncIterator.prototype, a, function () { return this; }), r.AsyncIterator = AsyncIterator, r.async = function (t, e, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(h(t, e, n, o), i); return r.isGeneratorFunction(e) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, g(v), c(v, u, \"Generator\"), c(v, i, function () { return this; }), c(v, \"toString\", function () { return \"[object Generator]\"; }), r.keys = function (t) { var r = Object(t), e = []; for (var n in r) e.unshift(n); return function t() { for (; e.length;) if ((n = e.pop()) in r) return t.value = n, t.done = !1, t; return t.done = !0, t; }; }, r.values = x, Context.prototype = { constructor: Context, reset: function reset(r) { if (this.prev = this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = \"next\", this.arg = t, this.tryEntries.forEach(m), !r) for (var e in this) \"t\" === e.charAt(0) && n.call(this, e) && !isNaN(+e.slice(1)) && (this[e] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0][4]; if (\"throw\" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(r) { if (this.done) throw r; var e = this; function n(t) { a.type = \"throw\", a.arg = r, e.next = t; } for (var o = e.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i[4], u = this.prev, c = i[1], h = i[2]; if (-1 === i[0]) return n(\"end\"), !1; if (!c && !h) throw Error(\"try statement without catch or finally\"); if (null != i[0] && i[0] <= u) { if (u < c) return this.method = \"next\", this.arg = t, n(c), !0; if (u < h) return n(h), !1; } } }, abrupt: function abrupt(t, r) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var n = this.tryEntries[e]; if (n[0] > -1 && n[0] <= this.prev && this.prev < n[2]) { var o = n; break; } } o && (\"break\" === t || \"continue\" === t) && o[0] <= r && r <= o[2] && (o = null); var i = o ? o[4] : {}; return i.type = t, i.arg = r, o ? (this.method = \"next\", this.next = o[2], f) : this.complete(i); }, complete: function complete(t, r) { if (\"throw\" === t.type) throw t.arg; return \"break\" === t.type || \"continue\" === t.type ? this.next = t.arg : \"return\" === t.type ? (this.rval = this.arg = t.arg, this.method = \"return\", this.next = \"end\") : \"normal\" === t.type && r && (this.next = r), f; }, finish: function finish(t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[2] === t) return this.complete(e[4], e[3]), m(e), f; } }, \"catch\": function _catch(t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[0] === t) { var n = e[4]; if (\"throw\" === n.type) { var o = n.arg; m(e); } return o; } } throw Error(\"illegal catch attempt\"); }, delegateYield: function delegateYield(r, e, n) { return this.delegate = { i: x(r), r: e, n: n }, \"next\" === this.method && (this.arg = t), f; } }, r; }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"next\", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"throw\", n); } _next(void 0); }); }; }\npos.controller(\"DownPaymenNewAddressController\", function ($scope, notification, $translate, $state, $stateParams, downpayOrderService, downpayConfigService) {\n  \"use strict\";\n\n  var isBillingAddress = $stateParams.isBillingAddress;\n  $scope.address = {};\n  $scope.formSubmitted = false;\n  $scope.countryDropdownExpanded = false;\n  $scope.countries = {};\n  $scope.countryError = false;\n  var addressValidation = {};\n  $scope.useBillingAddressForShipping = false;\n  var selectedBillingAddress = {};\n  var i18nCheckLog, i18nNoCustomerSelected, i18nInvalidCity, i18nInvalidCountryCode, i18nInvalidAddress1, i18nInvalidAddressExtended, i18nInvalidZipCode;\n  init();\n  $scope.toggleCountryDropdown = function () {\n    $scope.countryDropdownExpanded = !$scope.countryDropdownExpanded;\n  };\n  $scope.setCountry = function (country) {\n    $scope.countryDropdownExpanded = false;\n    $scope.address.country = country.countryName;\n    $scope.address.countryCode = country.countryCode;\n  };\n  $scope.saveAddress = /*#__PURE__*/function () {\n    var _ref = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee(formState) {\n      var customer;\n      return _regeneratorRuntime().wrap(function _callee$(_context) {\n        while (1) switch (_context.prev = _context.next) {\n          case 0:\n            $scope.countryError = false;\n            $scope.formSubmitted = true;\n            if (formState) {\n              _context.next = 4;\n              break;\n            }\n            return _context.abrupt(\"return\");\n          case 4:\n            if (!(!$scope.address.country || $scope.address.country.lenght === 0)) {\n              _context.next = 7;\n              break;\n            }\n            $scope.countryError = true;\n            return _context.abrupt(\"return\");\n          case 7:\n            if (!validateAddress()) {\n              _context.next = 9;\n              break;\n            }\n            return _context.abrupt(\"return\");\n          case 9:\n            customer = downpayOrderService.getSelectedCustomer();\n            if (customer) {\n              _context.next = 13;\n              break;\n            }\n            notification.pop(\"error\", i18nNoCustomerSelected);\n            return _context.abrupt(\"return\");\n          case 13:\n            _context.prev = 13;\n            $scope.address.customerId = customer.id;\n            if (isBillingAddress) {\n              $scope.address.isPrimaryBilling = true;\n              $scope.address.isPrimaryShipping = false;\n            } else {\n              $scope.address.isPrimaryBilling = false;\n              $scope.address.isPrimaryShipping = true;\n            }\n            $scope.address.externalUniqueId = customer.externalUniqueId;\n            _context.next = 19;\n            return downpayOrderService.addDownPaymentAddress($scope.address);\n          case 19:\n            _context.next = 21;\n            return downpayOrderService.refreshSelectedCustomer();\n          case 21:\n            if (isBillingAddress) {\n              $state.go(\"root.split.downpayment-selectbillingaddress\");\n            } else {\n              $state.go(\"root.split.downpayment-shipmentaddress\");\n            }\n            _context.next = 27;\n            break;\n          case 24:\n            _context.prev = 24;\n            _context.t0 = _context[\"catch\"](13);\n            notification.pop(\"error\", i18nCheckLog);\n          case 27:\n          case \"end\":\n            return _context.stop();\n        }\n      }, _callee, null, [[13, 24]]);\n    }));\n    return function (_x) {\n      return _ref.apply(this, arguments);\n    };\n  }();\n  $scope.cancel = function () {\n    var billingAddress = downpayOrderService.getSelectedBillingAddress();\n    if (isBillingAddress) {\n      $state.go(\"root.split.downpayment-selectbillingaddress\");\n    } else {\n      $state.go(\"root.split.downpayment-shipmentaddress\");\n    }\n  };\n  $scope.copyAddress = function () {\n    var validateCountry = $scope.countries.find(function (x) {\n      return x.countryCode === selectedBillingAddress.countryCode;\n    });\n    $scope.address = selectedBillingAddress;\n    $scope.address.id = 0;\n    $scope.address.isPrimaryBilling = false;\n    $scope.address.isPrimaryShipping = true;\n    $scope.address.note = \"\";\n    if (validateCountry) {\n      $scope.address.country = validateCountry.countryName;\n      $scope.address.countryCode = validateCountry.countryCode;\n    } else {\n      $scope.address.country = undefined;\n      $scope.address.countryCode = undefined;\n    }\n  };\n  function validateAddress() {\n    var addressLengthError = false;\n    var errorMessage = \"\";\n    var extendedAddressLength = 0;\n    if ($scope.address.address1 && $scope.address.address1.length > addressValidation.address1) {\n      addressLengthError = true;\n      errorMessage += i18nInvalidAddress1;\n    }\n    if ($scope.address.city && $scope.address.city.length > addressValidation.city) {\n      addressLengthError = true;\n      if (errorMessage.lenght > 0) errorMessage += \" \";\n      errorMessage += i18nInvalidCity;\n    }\n    if ($scope.address.address2) extendedAddressLength += $scope.address.address2.length;\n    if ($scope.address.address3) extendedAddressLength += $scope.address.address3.length;\n    if (extendedAddressLength > addressValidation.addressExtended) {\n      addressLengthError = true;\n      if (errorMessage.lenght > 0) errorMessage += \" \";\n      errorMessage += i18nInvalidAddressExtended;\n    }\n    if ($scope.address.zipCode && $scope.address.zipCode.length > addressValidation.zipCode) {\n      addressLengthError = true;\n      if (errorMessage.lenght > 0) errorMessage += \" \";\n      errorMessage += i18nInvalidZipCode;\n    }\n    if ($scope.address.countryCode && $scope.address.countryCode.length > addressValidation.countryCode) {\n      addressLengthError = true;\n      if (errorMessage.lenght > 0) errorMessage += \" \";\n      errorMessage += i18nInvalidCountryCode;\n    }\n    if (addressLengthError) notification.pop(\"error\", errorMessage);\n    return addressLengthError;\n  }\n  function init() {\n    return _init.apply(this, arguments);\n  }\n  function _init() {\n    _init = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee2() {\n      var countryData, translations;\n      return _regeneratorRuntime().wrap(function _callee2$(_context2) {\n        while (1) switch (_context2.prev = _context2.next) {\n          case 0:\n            _context2.next = 2;\n            return downpayOrderService.getCountries();\n          case 2:\n            countryData = _context2.sent;\n            _context2.next = 5;\n            return $translate([\"toast/check log\", \"widget/add-address/no-customer-selected\", \"downpayment/address/validation/length-city\", \"downpayment/address/validation/length-countryCode\", \"downpayment/address/validation/length-address1\", \"downpayment/address/validation/length-addressExtended\", \"downpayment/address/validation/length-zipCode\"]);\n          case 5:\n            translations = _context2.sent;\n            i18nCheckLog = translations[\"toast/check log\"];\n            i18nNoCustomerSelected = translations[\"widget/add-address/no-customer-selected\"];\n            i18nInvalidCity = translations[\"downpayment/address/validation/length-city\"];\n            i18nInvalidCountryCode = translations[\"downpayment/address/validation/length-countryCode\"];\n            i18nInvalidAddress1 = translations[\"downpayment/address/validation/length-address1\"];\n            i18nInvalidAddressExtended = translations[\"downpayment/address/validation/length-addressExtended\"];\n            i18nInvalidZipCode = translations[\"downpayment/address/validation/length-zipCode\"];\n            $scope.countries = countryData;\n            _context2.next = 16;\n            return downpayConfigService.getAddressValidationConfig();\n          case 16:\n            addressValidation = _context2.sent;\n            if ($scope.customer) {\n              $scope.editMode = true;\n            } else {\n              $scope.editMode = false;\n            }\n            GetSelectedBillingAddress();\n          case 19:\n          case \"end\":\n            return _context2.stop();\n        }\n      }, _callee2);\n    }));\n    return _init.apply(this, arguments);\n  }\n  function GetSelectedBillingAddress() {\n    if (isBillingAddress) {\n      return null;\n    }\n    selectedBillingAddress = downpayOrderService.getSelectedBillingAddress();\n    if (selectedBillingAddress) {\n      $scope.useBillingAddressForShipping = true;\n    }\n  }\n});\n","\"use strict\";\n\npos.controller(\"DownPaymentSelectBillingAddressController\", function ($scope, $state, downpayOrderService) {\n  \"use strict\";\n\n  var selectedIndex = -1;\n  $scope.addresses = getBillingAddresses();\n  $scope.selectBillingAddress = function (index, address) {\n    if (selectedIndex === index) {\n      selectedIndex = -1;\n      return;\n    }\n    selectedIndex = index;\n    downpayOrderService.setBillingAddress(address);\n    if (downpayOrderService.isBooking) {\n      $state.go(\"root.split.downpayment-shipment\");\n    } else {\n      $state.go(\"root.split.pos\");\n    }\n  };\n  $scope.createAddress = function () {\n    $state.go(\"root.split.downpayment-newaddress\", {\n      isBillingAddress: true\n    });\n  };\n  function getBillingAddresses() {\n    var addresses = downpayOrderService.getSelectedCustomer().addresses;\n    var billingAddresses = [];\n    if (addresses) {\n      billingAddresses = addresses.filter(function (address) {\n        return address.isPrimaryBilling === true;\n      });\n    }\n    return billingAddresses;\n  }\n});\n","\"use strict\";\n\npos.controller(\"DownPaymentSelectCustomerController\", function ($state, downpayOrderService, $scope) {\n  \"use strict\";\n\n  $scope.customers = downpayOrderService.getCustomerSearch();\n  $scope.selectCustomerLine = function (customer) {\n    downpayOrderService.setSelectedCustomer(customer);\n    if (downpayOrderService.isBooking) {\n      $state.go(\"root.split.downpayment-selectbillingaddress\");\n    } else {\n      $state.go(\"root.split.pos\");\n    }\n  };\n});\n","\"use strict\";\n\npos.controller(\"DownPaymentSearchCustomerController\", function ($scope, notification, $translate, $state, downpayOrderService) {\n  \"use strict\";\n\n  $scope.customerEmail = \"\";\n  var emailPattern = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]{2,}$/;\n  var i18nCustomerEmailInvalid;\n  $translate([\"toast/invalidEmail\"]).then(function (translations) {\n    i18nCustomerEmailInvalid = translations[\"toast/invalidEmail\"];\n  });\n  $scope.customerSearch = function (email) {\n    if (email.length < 1 || !emailPattern.test(email)) {\n      notification.pop(\"warning\", i18nCustomerEmailInvalid);\n      return false;\n    }\n    downpayOrderService.getCustomerByEmail(email).then(function (result) {\n      if (result) {\n        var customers = downpayOrderService.getCustomerSearch();\n        if (customers.length > 1) {\n          $state.go(\"root.split.downpayment-selectcustomer\");\n        } else {\n          downpayOrderService.setSelectedCustomer(customers[0]);\n          if (downpayOrderService.isBooking) {\n            $state.go(\"root.split.downpayment-selectbillingaddress\");\n          } else {\n            $state.go(\"root.split.pos\");\n          }\n        }\n      }\n    });\n  };\n  $scope.customerSearchMembership = function (membership) {\n    if (membership.length < 1) {\n      notification.pop(\"warning\", i18nCustomerEmailInvalid);\n      return false;\n    }\n    downpayOrderService.getCustomerByMembership(membership).then(function (result) {\n      if (result) {\n        var customers = downpayOrderService.getCustomerSearch();\n        if (customers.length > 1) {\n          $state.go(\"root.split.downpayment-selectcustomer\");\n        } else {\n          downpayOrderService.setSelectedCustomer(customers[0]);\n          if (downpayOrderService.isBooking) {\n            $state.go(\"root.split.downpayment-selectbillingaddress\");\n          } else {\n            $state.go(\"root.split.pos\");\n          }\n        }\n      }\n    });\n  };\n});\n","\"use strict\";\n\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _regeneratorRuntime() { \"use strict\"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return r; }; var t, r = {}, e = Object.prototype, n = e.hasOwnProperty, o = \"function\" == typeof Symbol ? Symbol : {}, i = o.iterator || \"@@iterator\", a = o.asyncIterator || \"@@asyncIterator\", u = o.toStringTag || \"@@toStringTag\"; function c(t, r, e, n) { return Object.defineProperty(t, r, { value: e, enumerable: !n, configurable: !n, writable: !n }); } try { c({}, \"\"); } catch (t) { c = function c(t, r, e) { return t[r] = e; }; } function h(r, e, n, o) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype); return c(a, \"_invoke\", function (r, e, n) { var o = 1; return function (i, a) { if (3 === o) throw Error(\"Generator is already running\"); if (4 === o) { if (\"throw\" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var u = n.delegate; if (u) { var c = d(u, n); if (c) { if (c === f) continue; return c; } } if (\"next\" === n.method) n.sent = n._sent = n.arg;else if (\"throw\" === n.method) { if (1 === o) throw o = 4, n.arg; n.dispatchException(n.arg); } else \"return\" === n.method && n.abrupt(\"return\", n.arg); o = 3; var h = s(r, e, n); if (\"normal\" === h.type) { if (o = n.done ? 4 : 2, h.arg === f) continue; return { value: h.arg, done: n.done }; } \"throw\" === h.type && (o = 4, n.method = \"throw\", n.arg = h.arg); } }; }(r, n, new Context(o || [])), !0), a; } function s(t, r, e) { try { return { type: \"normal\", arg: t.call(r, e) }; } catch (t) { return { type: \"throw\", arg: t }; } } r.wrap = h; var f = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var l = {}; c(l, i, function () { return this; }); var p = Object.getPrototypeOf, y = p && p(p(x([]))); y && y !== e && n.call(y, i) && (l = y); var v = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(l); function g(t) { [\"next\", \"throw\", \"return\"].forEach(function (r) { c(t, r, function (t) { return this._invoke(r, t); }); }); } function AsyncIterator(t, r) { function e(o, i, a, u) { var c = s(t[o], t, i); if (\"throw\" !== c.type) { var h = c.arg, f = h.value; return f && \"object\" == _typeof(f) && n.call(f, \"__await\") ? r.resolve(f.__await).then(function (t) { e(\"next\", t, a, u); }, function (t) { e(\"throw\", t, a, u); }) : r.resolve(f).then(function (t) { h.value = t, a(h); }, function (t) { return e(\"throw\", t, a, u); }); } u(c.arg); } var o; c(this, \"_invoke\", function (t, n) { function i() { return new r(function (r, o) { e(t, n, r, o); }); } return o = o ? o.then(i, i) : i(); }, !0); } function d(r, e) { var n = e.method, o = r.i[n]; if (o === t) return e.delegate = null, \"throw\" === n && r.i[\"return\"] && (e.method = \"return\", e.arg = t, d(r, e), \"throw\" === e.method) || \"return\" !== n && (e.method = \"throw\", e.arg = new TypeError(\"The iterator does not provide a '\" + n + \"' method\")), f; var i = s(o, r.i, e.arg); if (\"throw\" === i.type) return e.method = \"throw\", e.arg = i.arg, e.delegate = null, f; var a = i.arg; return a ? a.done ? (e[r.r] = a.value, e.next = r.n, \"return\" !== e.method && (e.method = \"next\", e.arg = t), e.delegate = null, f) : a : (e.method = \"throw\", e.arg = new TypeError(\"iterator result is not an object\"), e.delegate = null, f); } function w(t) { this.tryEntries.push(t); } function m(r) { var e = r[4] || {}; e.type = \"normal\", e.arg = t, r[4] = e; } function Context(t) { this.tryEntries = [[-1]], t.forEach(w, this), this.reset(!0); } function x(r) { if (null != r) { var e = r[i]; if (e) return e.call(r); if (\"function\" == typeof r.next) return r; if (!isNaN(r.length)) { var o = -1, a = function e() { for (; ++o < r.length;) if (n.call(r, o)) return e.value = r[o], e.done = !1, e; return e.value = t, e.done = !0, e; }; return a.next = a; } } throw new TypeError(_typeof(r) + \" is not iterable\"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, c(v, \"constructor\", GeneratorFunctionPrototype), c(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction), GeneratorFunction.displayName = c(GeneratorFunctionPrototype, u, \"GeneratorFunction\"), r.isGeneratorFunction = function (t) { var r = \"function\" == typeof t && t.constructor; return !!r && (r === GeneratorFunction || \"GeneratorFunction\" === (r.displayName || r.name)); }, r.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, c(t, u, \"GeneratorFunction\")), t.prototype = Object.create(v), t; }, r.awrap = function (t) { return { __await: t }; }, g(AsyncIterator.prototype), c(AsyncIterator.prototype, a, function () { return this; }), r.AsyncIterator = AsyncIterator, r.async = function (t, e, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(h(t, e, n, o), i); return r.isGeneratorFunction(e) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, g(v), c(v, u, \"Generator\"), c(v, i, function () { return this; }), c(v, \"toString\", function () { return \"[object Generator]\"; }), r.keys = function (t) { var r = Object(t), e = []; for (var n in r) e.unshift(n); return function t() { for (; e.length;) if ((n = e.pop()) in r) return t.value = n, t.done = !1, t; return t.done = !0, t; }; }, r.values = x, Context.prototype = { constructor: Context, reset: function reset(r) { if (this.prev = this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = \"next\", this.arg = t, this.tryEntries.forEach(m), !r) for (var e in this) \"t\" === e.charAt(0) && n.call(this, e) && !isNaN(+e.slice(1)) && (this[e] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0][4]; if (\"throw\" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(r) { if (this.done) throw r; var e = this; function n(t) { a.type = \"throw\", a.arg = r, e.next = t; } for (var o = e.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i[4], u = this.prev, c = i[1], h = i[2]; if (-1 === i[0]) return n(\"end\"), !1; if (!c && !h) throw Error(\"try statement without catch or finally\"); if (null != i[0] && i[0] <= u) { if (u < c) return this.method = \"next\", this.arg = t, n(c), !0; if (u < h) return n(h), !1; } } }, abrupt: function abrupt(t, r) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var n = this.tryEntries[e]; if (n[0] > -1 && n[0] <= this.prev && this.prev < n[2]) { var o = n; break; } } o && (\"break\" === t || \"continue\" === t) && o[0] <= r && r <= o[2] && (o = null); var i = o ? o[4] : {}; return i.type = t, i.arg = r, o ? (this.method = \"next\", this.next = o[2], f) : this.complete(i); }, complete: function complete(t, r) { if (\"throw\" === t.type) throw t.arg; return \"break\" === t.type || \"continue\" === t.type ? this.next = t.arg : \"return\" === t.type ? (this.rval = this.arg = t.arg, this.method = \"return\", this.next = \"end\") : \"normal\" === t.type && r && (this.next = r), f; }, finish: function finish(t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[2] === t) return this.complete(e[4], e[3]), m(e), f; } }, \"catch\": function _catch(t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[0] === t) { var n = e[4]; if (\"throw\" === n.type) { var o = n.arg; m(e); } return o; } } throw Error(\"illegal catch attempt\"); }, delegateYield: function delegateYield(r, e, n) { return this.delegate = { i: x(r), r: e, n: n }, \"next\" === this.method && (this.arg = t), f; } }, r; }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"next\", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"throw\", n); } _next(void 0); }); }; }\npos.factory(\"downpayConfigService\", function (posConfig, tenantFeatureRepository, $q) {\n  var shippingFeatureName = \"DownPaymentShippingConfig\";\n  var configFeatureName = \"DownPaymentTenantConfig\";\n  var addressFieldLenght = \"AddressFieldsLenghtValidation\";\n  // Default features are used if Tenant features are not set on portal or for some reason they can't be retrive so app will not crash\n  // It will switch off communication with external endpoints and sets default values for shipping\n  var defaultShippingFeature = {\n    shippingFee: \"50\",\n    deliveryDateOffset: \"21\",\n    freeShippingOrderThreshold: \"300\"\n  };\n  var defaultConfigFeature = {\n    postNewCustomer: \"false\",\n    postEditCustomer: \"false\",\n    postNewAddress: \"false\",\n    getStockFromClient: \"false\",\n    checkStock: \"false\",\n    displayArticleDetails: \"false\",\n    postTransactionData: \"false\",\n    checkAvailability: \"false\",\n    customFeautures: \"default\"\n  };\n  var defaultAddressFieldLength = {\n    city: 200,\n    countryCode: 3,\n    address1: 200,\n    addressExtended: 200,\n    zipCode: 100\n  };\n  var service = {\n    downPaymentShippingConfig: null,\n    downPaymentTenantConfig: null,\n    addressValidationConfig: null\n  };\n  function init() {\n    posConfig.whenReady().then(function () {\n      var downPaymentEnabled = _.some(posConfig.getWidgets(), function (widget) {\n        return widget.name === \"downpay-order\";\n      });\n      if (downPaymentEnabled) {\n        service.loadShippingConfig();\n        service.loadTenantConfig();\n      }\n    });\n  }\n  service.isDownPaymentWidgetEnabled = function () {\n    var dpoWidget = posConfig.getWidgets().find(function (widget) {\n      return widget.name === \"downpay-order\";\n    });\n    return !!dpoWidget;\n  };\n  service.loadShippingConfig = function () {\n    return tenantFeatureRepository.api.getTenantFetureByName(shippingFeatureName).then(function (response) {\n      if (!response.data) {\n        service.downPaymentShippingConfig = defaultShippingFeature;\n        return false;\n      }\n      if (response.data.featureName === shippingFeatureName) {\n        service.downPaymentShippingConfig = response.data.values;\n        return true;\n      }\n      service.downPaymentShippingConfig = defaultShippingFeature;\n      return false;\n    })[\"catch\"](function () {\n      service.downPaymentShippingConfig = defaultShippingFeature;\n      return false;\n    });\n  };\n  service.getShippingConfig = function () {\n    if (service.downPaymentShippingConfig) {\n      return $q.resolve(service.downPaymentShippingConfig);\n    }\n    return service.loadShippingConfig().then(function () {\n      return service.downPaymentShippingConfig;\n    });\n  };\n  service.loadTenantConfig = function () {\n    return tenantFeatureRepository.api.getTenantFetureByName(configFeatureName).then(function (response) {\n      if (!response.data) {\n        service.downPaymentTenantConfig = defaultConfigFeature;\n        return false;\n      }\n      service.downPaymentTenantConfig = response.data.values;\n      return true;\n    })[\"catch\"](function () {\n      service.downPaymentTenantConfig = defaultConfigFeature;\n      return false;\n    });\n  };\n  service.getTenantConfig = function () {\n    if (service.downPaymentTenantConfig) {\n      return $q.resolve(service.downPaymentTenantConfig);\n    }\n    return service.loadTenantConfig().then(function () {\n      return service.downPaymentTenantConfig;\n    });\n  };\n  service.loadAddressValidationConfig = /*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee() {\n    var data;\n    return _regeneratorRuntime().wrap(function _callee$(_context) {\n      while (1) switch (_context.prev = _context.next) {\n        case 0:\n          _context.next = 2;\n          return tenantFeatureRepository.api.getTenantFetureByName(addressFieldLenght);\n        case 2:\n          data = _context.sent;\n          if (data.data) {\n            _context.next = 6;\n            break;\n          }\n          service.addressValidationConfig = defaultAddressFieldLength;\n          return _context.abrupt(\"return\");\n        case 6:\n          service.addressValidationConfig = data.data.values;\n        case 7:\n        case \"end\":\n          return _context.stop();\n      }\n    }, _callee);\n  }));\n  service.getAddressValidationConfig = /*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee2() {\n    return _regeneratorRuntime().wrap(function _callee2$(_context2) {\n      while (1) switch (_context2.prev = _context2.next) {\n        case 0:\n          if (!service.addressValidationConfig) {\n            _context2.next = 2;\n            break;\n          }\n          return _context2.abrupt(\"return\", service.addressValidationConfig);\n        case 2:\n          _context2.next = 4;\n          return service.loadAddressValidationConfig();\n        case 4:\n          return _context2.abrupt(\"return\", service.addressValidationConfig);\n        case 5:\n        case \"end\":\n          return _context2.stop();\n      }\n    }, _callee2);\n  }));\n  init();\n  return service;\n});\n","\"use strict\";\n\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _regeneratorRuntime() { \"use strict\"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return r; }; var t, r = {}, e = Object.prototype, n = e.hasOwnProperty, o = \"function\" == typeof Symbol ? Symbol : {}, i = o.iterator || \"@@iterator\", a = o.asyncIterator || \"@@asyncIterator\", u = o.toStringTag || \"@@toStringTag\"; function c(t, r, e, n) { return Object.defineProperty(t, r, { value: e, enumerable: !n, configurable: !n, writable: !n }); } try { c({}, \"\"); } catch (t) { c = function c(t, r, e) { return t[r] = e; }; } function h(r, e, n, o) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype); return c(a, \"_invoke\", function (r, e, n) { var o = 1; return function (i, a) { if (3 === o) throw Error(\"Generator is already running\"); if (4 === o) { if (\"throw\" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var u = n.delegate; if (u) { var c = d(u, n); if (c) { if (c === f) continue; return c; } } if (\"next\" === n.method) n.sent = n._sent = n.arg;else if (\"throw\" === n.method) { if (1 === o) throw o = 4, n.arg; n.dispatchException(n.arg); } else \"return\" === n.method && n.abrupt(\"return\", n.arg); o = 3; var h = s(r, e, n); if (\"normal\" === h.type) { if (o = n.done ? 4 : 2, h.arg === f) continue; return { value: h.arg, done: n.done }; } \"throw\" === h.type && (o = 4, n.method = \"throw\", n.arg = h.arg); } }; }(r, n, new Context(o || [])), !0), a; } function s(t, r, e) { try { return { type: \"normal\", arg: t.call(r, e) }; } catch (t) { return { type: \"throw\", arg: t }; } } r.wrap = h; var f = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var l = {}; c(l, i, function () { return this; }); var p = Object.getPrototypeOf, y = p && p(p(x([]))); y && y !== e && n.call(y, i) && (l = y); var v = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(l); function g(t) { [\"next\", \"throw\", \"return\"].forEach(function (r) { c(t, r, function (t) { return this._invoke(r, t); }); }); } function AsyncIterator(t, r) { function e(o, i, a, u) { var c = s(t[o], t, i); if (\"throw\" !== c.type) { var h = c.arg, f = h.value; return f && \"object\" == _typeof(f) && n.call(f, \"__await\") ? r.resolve(f.__await).then(function (t) { e(\"next\", t, a, u); }, function (t) { e(\"throw\", t, a, u); }) : r.resolve(f).then(function (t) { h.value = t, a(h); }, function (t) { return e(\"throw\", t, a, u); }); } u(c.arg); } var o; c(this, \"_invoke\", function (t, n) { function i() { return new r(function (r, o) { e(t, n, r, o); }); } return o = o ? o.then(i, i) : i(); }, !0); } function d(r, e) { var n = e.method, o = r.i[n]; if (o === t) return e.delegate = null, \"throw\" === n && r.i[\"return\"] && (e.method = \"return\", e.arg = t, d(r, e), \"throw\" === e.method) || \"return\" !== n && (e.method = \"throw\", e.arg = new TypeError(\"The iterator does not provide a '\" + n + \"' method\")), f; var i = s(o, r.i, e.arg); if (\"throw\" === i.type) return e.method = \"throw\", e.arg = i.arg, e.delegate = null, f; var a = i.arg; return a ? a.done ? (e[r.r] = a.value, e.next = r.n, \"return\" !== e.method && (e.method = \"next\", e.arg = t), e.delegate = null, f) : a : (e.method = \"throw\", e.arg = new TypeError(\"iterator result is not an object\"), e.delegate = null, f); } function w(t) { this.tryEntries.push(t); } function m(r) { var e = r[4] || {}; e.type = \"normal\", e.arg = t, r[4] = e; } function Context(t) { this.tryEntries = [[-1]], t.forEach(w, this), this.reset(!0); } function x(r) { if (null != r) { var e = r[i]; if (e) return e.call(r); if (\"function\" == typeof r.next) return r; if (!isNaN(r.length)) { var o = -1, a = function e() { for (; ++o < r.length;) if (n.call(r, o)) return e.value = r[o], e.done = !1, e; return e.value = t, e.done = !0, e; }; return a.next = a; } } throw new TypeError(_typeof(r) + \" is not iterable\"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, c(v, \"constructor\", GeneratorFunctionPrototype), c(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction), GeneratorFunction.displayName = c(GeneratorFunctionPrototype, u, \"GeneratorFunction\"), r.isGeneratorFunction = function (t) { var r = \"function\" == typeof t && t.constructor; return !!r && (r === GeneratorFunction || \"GeneratorFunction\" === (r.displayName || r.name)); }, r.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, c(t, u, \"GeneratorFunction\")), t.prototype = Object.create(v), t; }, r.awrap = function (t) { return { __await: t }; }, g(AsyncIterator.prototype), c(AsyncIterator.prototype, a, function () { return this; }), r.AsyncIterator = AsyncIterator, r.async = function (t, e, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(h(t, e, n, o), i); return r.isGeneratorFunction(e) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, g(v), c(v, u, \"Generator\"), c(v, i, function () { return this; }), c(v, \"toString\", function () { return \"[object Generator]\"; }), r.keys = function (t) { var r = Object(t), e = []; for (var n in r) e.unshift(n); return function t() { for (; e.length;) if ((n = e.pop()) in r) return t.value = n, t.done = !1, t; return t.done = !0, t; }; }, r.values = x, Context.prototype = { constructor: Context, reset: function reset(r) { if (this.prev = this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = \"next\", this.arg = t, this.tryEntries.forEach(m), !r) for (var e in this) \"t\" === e.charAt(0) && n.call(this, e) && !isNaN(+e.slice(1)) && (this[e] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0][4]; if (\"throw\" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(r) { if (this.done) throw r; var e = this; function n(t) { a.type = \"throw\", a.arg = r, e.next = t; } for (var o = e.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i[4], u = this.prev, c = i[1], h = i[2]; if (-1 === i[0]) return n(\"end\"), !1; if (!c && !h) throw Error(\"try statement without catch or finally\"); if (null != i[0] && i[0] <= u) { if (u < c) return this.method = \"next\", this.arg = t, n(c), !0; if (u < h) return n(h), !1; } } }, abrupt: function abrupt(t, r) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var n = this.tryEntries[e]; if (n[0] > -1 && n[0] <= this.prev && this.prev < n[2]) { var o = n; break; } } o && (\"break\" === t || \"continue\" === t) && o[0] <= r && r <= o[2] && (o = null); var i = o ? o[4] : {}; return i.type = t, i.arg = r, o ? (this.method = \"next\", this.next = o[2], f) : this.complete(i); }, complete: function complete(t, r) { if (\"throw\" === t.type) throw t.arg; return \"break\" === t.type || \"continue\" === t.type ? this.next = t.arg : \"return\" === t.type ? (this.rval = this.arg = t.arg, this.method = \"return\", this.next = \"end\") : \"normal\" === t.type && r && (this.next = r), f; }, finish: function finish(t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[2] === t) return this.complete(e[4], e[3]), m(e), f; } }, \"catch\": function _catch(t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[0] === t) { var n = e[4]; if (\"throw\" === n.type) { var o = n.arg; m(e); } return o; } } throw Error(\"illegal catch attempt\"); }, delegateYield: function delegateYield(r, e, n) { return this.delegate = { i: x(r), r: e, n: n }, \"next\" === this.method && (this.arg = t), f; } }, r; }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"next\", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"throw\", n); } _next(void 0); }); }; }\nvar _require = require(\"angular\"),\n  forEach = _require.forEach;\npos.controller(\"DownPaymentFindBookingController\", function ($scope, sales, backend, $state, $translate, posConfig, receipt, receiptHelper, posStorage, eventBus, notification, fluctuatingPropertiesHelper) {\n  var selectedIndex = -1;\n  loadConfig();\n  $scope.receiptHelper = receiptHelper;\n  $scope.printTranslations = posStorage.get(\"printTranslations\");\n  $scope.receipts = [];\n  $scope.runningProcess = false;\n  $scope.selectedReceipt = null;\n  $scope.items = null;\n  $scope.apiOnline = backend.isOnline;\n  $scope.vatPersentage = [];\n  $scope.$on(\"device:offline\", function (event, device) {\n    $scope.apiOnline = false;\n  });\n  $scope.$on(\"device:retry:success\", function (event, device) {\n    $scope.apiOnline = true;\n  });\n  $scope.selectLine = function (index, receipt) {\n    $scope.vatPersentage = receiptHelper.getReceiptVatTotal(receipt);\n    if (selectedIndex === index) {\n      selectedIndex = -1;\n      return;\n    }\n    selectedIndex = index;\n  };\n  $scope.selectedLineIndex = function () {\n    return selectedIndex;\n  };\n  $scope.isSelected = function (index) {\n    return selectedIndex === index;\n  };\n  $scope.vNumber = function (receipt) {\n    return fluctuatingPropertiesHelper.getVNumber(receipt);\n  };\n  $scope.printCopy = function (receipt) {\n    if ($scope.runningProcess) return;\n    $scope.runningProcess = true;\n    sales.printReceiptCopy(angular.copy(receipt), true).then(function () {\n      return $state.go(\"root.login\");\n    })[\"catch\"](/*#__PURE__*/function () {\n      var _ref = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee(err) {\n        var translation;\n        return _regeneratorRuntime().wrap(function _callee$(_context) {\n          while (1) switch (_context.prev = _context.next) {\n            case 0:\n              _context.next = 2;\n              return $translate(err);\n            case 2:\n              translation = _context.sent;\n              notification.pop(\"warn\", translation);\n              $scope.runningProcess = false;\n            case 5:\n            case \"end\":\n              return _context.stop();\n          }\n        }, _callee);\n      }));\n      return function (_x) {\n        return _ref.apply(this, arguments);\n      };\n    }());\n  };\n  $scope.payBooking = function (currentReceipt) {\n    fluctuatingPropertiesHelper.setVNumber(receipt.getReceipt(), fluctuatingPropertiesHelper.getVNumber(currentReceipt));\n    fluctuatingPropertiesHelper.setDownPaymentNo(receipt.getReceipt(), fluctuatingPropertiesHelper.getDownPaymentNo(currentReceipt));\n    fluctuatingPropertiesHelper.setBookingPayment(receipt.getReceipt(), true);\n    fluctuatingPropertiesHelper.setMaxPaymentValue(receipt.getReceipt(), fluctuatingPropertiesHelper.getBookingAmountToBePaid(currentReceipt));\n    $state.go(\"root.split.accountdeposit\");\n  };\n  $scope.getAmountToPay = function (currentReceipt) {\n    return fluctuatingPropertiesHelper.getBookingAmountToBePaid(currentReceipt);\n  };\n  $scope.getBookingPayments = function (currentReceipt) {\n    return fluctuatingPropertiesHelper.getBookingPayments(currentReceipt);\n  };\n  $scope.emailReceiptCopy = function (receipt) {\n    if ($scope.runningProcess || !$scope.apiOnline) return;\n    $scope.runningProcess = true;\n    $scope.selectedReceipt = receipt;\n  };\n  $scope.getStringSafe = function (variable) {\n    return typeof variable === \"string\" ? variable.trim() : \"\";\n  };\n  $scope.constructReceiptId = function (receiptObject) {\n    return receipt.constructReceiptId(receiptObject);\n  };\n  $scope.totalItems = function (receipt) {\n    return receipt.items.reduce(function (sum, item) {\n      return sum + item.quantity;\n    }, 0);\n  };\n  $scope.showReceiptDiscount = function (receipt) {\n    var totalDiscount = receiptHelper.getReceiptTotalDiscount(receipt);\n    return !totalDiscount.isZero() && !totalDiscount.isNeg();\n  };\n  $scope.getShopLocalCurrency = function () {\n    return posConfig.getLocalCurrency().currencyCode;\n  };\n  $scope.getTransactionType = function (receipt) {\n    if (receipt.fluctuatingProperties) if (receipt.fluctuatingProperties.isBooking) return \"Booking\";\n    return receipt.transactionType;\n  };\n  $scope.getPaymentDescription = function (receipt, payment) {\n    if (payment.paymentType === \"DownPayment\") return \"Down Payment\";\n    return receiptHelper.getLineInfo(payment);\n  };\n  init();\n  function getBookings() {\n    return _getBookings.apply(this, arguments);\n  }\n  function _getBookings() {\n    _getBookings = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee2() {\n      var response;\n      return _regeneratorRuntime().wrap(function _callee2$(_context2) {\n        while (1) switch (_context2.prev = _context2.next) {\n          case 0:\n            _context2.next = 2;\n            return sales.getBookings($scope.$stateParams.customerNo);\n          case 2:\n            response = _context2.sent;\n            response = response.data.map(receipt.decimalifyReceipt).forEach(function (r) {\n              return $scope.receipts.push(r);\n            });\n          case 4:\n          case \"end\":\n            return _context2.stop();\n        }\n      }, _callee2);\n    }));\n    return _getBookings.apply(this, arguments);\n  }\n  function init() {\n    return _init.apply(this, arguments);\n  }\n  function _init() {\n    _init = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee3() {\n      var translations;\n      return _regeneratorRuntime().wrap(function _callee3$(_context3) {\n        while (1) switch (_context3.prev = _context3.next) {\n          case 0:\n            getBookings();\n            _context3.next = 3;\n            return $translate([\"label/noItemsReceipt\", \"label/oneItemReceipt\", \"label/otherItemsReceipt\", \"toast/error_emailformat\", \"label/payment\", \"label/totalToPay\"]);\n          case 3:\n            translations = _context3.sent;\n            $scope.i18nNoItems = translations[\"label/noItemsReceipt\"];\n            $scope.i18nOne = translations[\"label/oneItemReceipt\"];\n            $scope.i18nOther = translations[\"label/otherItemsReceipt\"];\n            $scope.i18nErrorEmailFormat = translations[\"toast/error_emailformat\"];\n            $scope.i18nPaymentFormat = translations[\"label/payment\"];\n            $scope.i18nTotalToPayFormat = translations[\"label/totalToPay\"];\n          case 10:\n          case \"end\":\n            return _context3.stop();\n        }\n      }, _callee3);\n    }));\n    return _init.apply(this, arguments);\n  }\n  function loadConfig() {\n    $scope.cashStatementTranslations = posConfig.cashStatementTranslations;\n    $scope.emailReceiptConfiguration = posConfig.getOptions().askEmailReceipt;\n    $scope.noteConfiguration = posConfig.noteConfiguration;\n  }\n  eventBus.subscribe(eventBus.events.pos.newConfig, $scope, loadConfig);\n});\n","\"use strict\";\n\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _regeneratorRuntime() { \"use strict\"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return r; }; var t, r = {}, e = Object.prototype, n = e.hasOwnProperty, o = \"function\" == typeof Symbol ? Symbol : {}, i = o.iterator || \"@@iterator\", a = o.asyncIterator || \"@@asyncIterator\", u = o.toStringTag || \"@@toStringTag\"; function c(t, r, e, n) { return Object.defineProperty(t, r, { value: e, enumerable: !n, configurable: !n, writable: !n }); } try { c({}, \"\"); } catch (t) { c = function c(t, r, e) { return t[r] = e; }; } function h(r, e, n, o) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype); return c(a, \"_invoke\", function (r, e, n) { var o = 1; return function (i, a) { if (3 === o) throw Error(\"Generator is already running\"); if (4 === o) { if (\"throw\" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var u = n.delegate; if (u) { var c = d(u, n); if (c) { if (c === f) continue; return c; } } if (\"next\" === n.method) n.sent = n._sent = n.arg;else if (\"throw\" === n.method) { if (1 === o) throw o = 4, n.arg; n.dispatchException(n.arg); } else \"return\" === n.method && n.abrupt(\"return\", n.arg); o = 3; var h = s(r, e, n); if (\"normal\" === h.type) { if (o = n.done ? 4 : 2, h.arg === f) continue; return { value: h.arg, done: n.done }; } \"throw\" === h.type && (o = 4, n.method = \"throw\", n.arg = h.arg); } }; }(r, n, new Context(o || [])), !0), a; } function s(t, r, e) { try { return { type: \"normal\", arg: t.call(r, e) }; } catch (t) { return { type: \"throw\", arg: t }; } } r.wrap = h; var f = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var l = {}; c(l, i, function () { return this; }); var p = Object.getPrototypeOf, y = p && p(p(x([]))); y && y !== e && n.call(y, i) && (l = y); var v = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(l); function g(t) { [\"next\", \"throw\", \"return\"].forEach(function (r) { c(t, r, function (t) { return this._invoke(r, t); }); }); } function AsyncIterator(t, r) { function e(o, i, a, u) { var c = s(t[o], t, i); if (\"throw\" !== c.type) { var h = c.arg, f = h.value; return f && \"object\" == _typeof(f) && n.call(f, \"__await\") ? r.resolve(f.__await).then(function (t) { e(\"next\", t, a, u); }, function (t) { e(\"throw\", t, a, u); }) : r.resolve(f).then(function (t) { h.value = t, a(h); }, function (t) { return e(\"throw\", t, a, u); }); } u(c.arg); } var o; c(this, \"_invoke\", function (t, n) { function i() { return new r(function (r, o) { e(t, n, r, o); }); } return o = o ? o.then(i, i) : i(); }, !0); } function d(r, e) { var n = e.method, o = r.i[n]; if (o === t) return e.delegate = null, \"throw\" === n && r.i[\"return\"] && (e.method = \"return\", e.arg = t, d(r, e), \"throw\" === e.method) || \"return\" !== n && (e.method = \"throw\", e.arg = new TypeError(\"The iterator does not provide a '\" + n + \"' method\")), f; var i = s(o, r.i, e.arg); if (\"throw\" === i.type) return e.method = \"throw\", e.arg = i.arg, e.delegate = null, f; var a = i.arg; return a ? a.done ? (e[r.r] = a.value, e.next = r.n, \"return\" !== e.method && (e.method = \"next\", e.arg = t), e.delegate = null, f) : a : (e.method = \"throw\", e.arg = new TypeError(\"iterator result is not an object\"), e.delegate = null, f); } function w(t) { this.tryEntries.push(t); } function m(r) { var e = r[4] || {}; e.type = \"normal\", e.arg = t, r[4] = e; } function Context(t) { this.tryEntries = [[-1]], t.forEach(w, this), this.reset(!0); } function x(r) { if (null != r) { var e = r[i]; if (e) return e.call(r); if (\"function\" == typeof r.next) return r; if (!isNaN(r.length)) { var o = -1, a = function e() { for (; ++o < r.length;) if (n.call(r, o)) return e.value = r[o], e.done = !1, e; return e.value = t, e.done = !0, e; }; return a.next = a; } } throw new TypeError(_typeof(r) + \" is not iterable\"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, c(v, \"constructor\", GeneratorFunctionPrototype), c(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction), GeneratorFunction.displayName = c(GeneratorFunctionPrototype, u, \"GeneratorFunction\"), r.isGeneratorFunction = function (t) { var r = \"function\" == typeof t && t.constructor; return !!r && (r === GeneratorFunction || \"GeneratorFunction\" === (r.displayName || r.name)); }, r.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, c(t, u, \"GeneratorFunction\")), t.prototype = Object.create(v), t; }, r.awrap = function (t) { return { __await: t }; }, g(AsyncIterator.prototype), c(AsyncIterator.prototype, a, function () { return this; }), r.AsyncIterator = AsyncIterator, r.async = function (t, e, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(h(t, e, n, o), i); return r.isGeneratorFunction(e) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, g(v), c(v, u, \"Generator\"), c(v, i, function () { return this; }), c(v, \"toString\", function () { return \"[object Generator]\"; }), r.keys = function (t) { var r = Object(t), e = []; for (var n in r) e.unshift(n); return function t() { for (; e.length;) if ((n = e.pop()) in r) return t.value = n, t.done = !1, t; return t.done = !0, t; }; }, r.values = x, Context.prototype = { constructor: Context, reset: function reset(r) { if (this.prev = this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = \"next\", this.arg = t, this.tryEntries.forEach(m), !r) for (var e in this) \"t\" === e.charAt(0) && n.call(this, e) && !isNaN(+e.slice(1)) && (this[e] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0][4]; if (\"throw\" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(r) { if (this.done) throw r; var e = this; function n(t) { a.type = \"throw\", a.arg = r, e.next = t; } for (var o = e.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i[4], u = this.prev, c = i[1], h = i[2]; if (-1 === i[0]) return n(\"end\"), !1; if (!c && !h) throw Error(\"try statement without catch or finally\"); if (null != i[0] && i[0] <= u) { if (u < c) return this.method = \"next\", this.arg = t, n(c), !0; if (u < h) return n(h), !1; } } }, abrupt: function abrupt(t, r) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var n = this.tryEntries[e]; if (n[0] > -1 && n[0] <= this.prev && this.prev < n[2]) { var o = n; break; } } o && (\"break\" === t || \"continue\" === t) && o[0] <= r && r <= o[2] && (o = null); var i = o ? o[4] : {}; return i.type = t, i.arg = r, o ? (this.method = \"next\", this.next = o[2], f) : this.complete(i); }, complete: function complete(t, r) { if (\"throw\" === t.type) throw t.arg; return \"break\" === t.type || \"continue\" === t.type ? this.next = t.arg : \"return\" === t.type ? (this.rval = this.arg = t.arg, this.method = \"return\", this.next = \"end\") : \"normal\" === t.type && r && (this.next = r), f; }, finish: function finish(t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[2] === t) return this.complete(e[4], e[3]), m(e), f; } }, \"catch\": function _catch(t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[0] === t) { var n = e[4]; if (\"throw\" === n.type) { var o = n.arg; m(e); } return o; } } throw Error(\"illegal catch attempt\"); }, delegateYield: function delegateYield(r, e, n) { return this.delegate = { i: x(r), r: e, n: n }, \"next\" === this.method && (this.arg = t), f; } }, r; }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"next\", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"throw\", n); } _next(void 0); }); }; }\npos.factory(\"downpayItemService\", function (stockService, posStorage, downpayConfigService, notification, $translate, receipt, storeRepository) {\n  var service = {\n    selectedArticle: null\n  };\n  var i18nOutOfStock;\n  init();\n  service.validateStock = /*#__PURE__*/function () {\n    var _ref = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee(item, qty) {\n      var response, configData, availabilityRequest, itemAvailability;\n      return _regeneratorRuntime().wrap(function _callee$(_context) {\n        while (1) switch (_context.prev = _context.next) {\n          case 0:\n            response = {\n              isAvailable: false,\n              availableStock: 0\n            };\n            _context.next = 3;\n            return downpayConfigService.getTenantConfig();\n          case 3:\n            configData = _context.sent;\n            if (!(configData.checkAvailability.toLowerCase() == \"true\")) {\n              _context.next = 15;\n              break;\n            }\n            availabilityRequest = {\n              unitCode: service.getItemDimensionCode(item),\n              itemCode: item.parameter3,\n              shop: posStorage.get(\"current_shop\").storeCode,\n              quantity: qty\n            };\n            _context.next = 8;\n            return stockService.getItemAvailability(availabilityRequest);\n          case 8:\n            itemAvailability = _context.sent;\n            if (!(itemAvailability.response.toLowerCase() !== \"true\")) {\n              _context.next = 12;\n              break;\n            }\n            notification.pop(\"info\", i18nOutOfStock);\n            return _context.abrupt(\"return\", response);\n          case 12:\n            response.isAvailable = true;\n            response.availableStock = itemAvailability.available;\n            return _context.abrupt(\"return\", response);\n          case 15:\n          case \"end\":\n            return _context.stop();\n        }\n      }, _callee);\n    }));\n    return function (_x, _x2) {\n      return _ref.apply(this, arguments);\n    };\n  }();\n  service.getStock = /*#__PURE__*/function () {\n    var _ref2 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee2(item) {\n      var stockCount, shop, configData, stockLookupRequest, stockLevels, selectedStock, _stockLevels, _selectedStock;\n      return _regeneratorRuntime().wrap(function _callee2$(_context2) {\n        while (1) switch (_context2.prev = _context2.next) {\n          case 0:\n            stockCount = 0;\n            shop = posStorage.get(\"current_shop\");\n            _context2.next = 4;\n            return downpayConfigService.getTenantConfig();\n          case 4:\n            configData = _context2.sent;\n            if (!(configData.getStockFromClient.toLowerCase() === \"true\")) {\n              _context2.next = 13;\n              break;\n            }\n            stockLookupRequest = {\n              itemCode: item.parameter3,\n              variantCode: service.getItemDimensionCode(item),\n              shopCode: [shop.storeCode]\n            };\n            _context2.next = 9;\n            return stockService.getStockFromClient(stockLookupRequest);\n          case 9:\n            stockLevels = _context2.sent;\n            if (stockLevels) {\n              selectedStock = stockLevels.find(function (s) {\n                return s.shop === shop.storeCode;\n              });\n              stockCount = selectedStock.quantity;\n            }\n            _context2.next = 18;\n            break;\n          case 13:\n            _context2.next = 15;\n            return stockService.getItemStockLevels(item.itemNo, true);\n          case 15:\n            _stockLevels = _context2.sent;\n            _selectedStock = _stockLevels.find(function (s) {\n              return s.locationName === shop.description;\n            });\n            if (_selectedStock) {\n              stockCount = _selectedStock.quantityOnHand;\n            }\n          case 18:\n            return _context2.abrupt(\"return\", stockCount);\n          case 19:\n          case \"end\":\n            return _context2.stop();\n        }\n      }, _callee2);\n    }));\n    return function (_x3) {\n      return _ref2.apply(this, arguments);\n    };\n  }();\n  service.getStockAllShops = /*#__PURE__*/function () {\n    var _ref3 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee3(item) {\n      var stockCount, shops, configData, stockLookupRequest, stockLevels, localStockLevels;\n      return _regeneratorRuntime().wrap(function _callee3$(_context3) {\n        while (1) switch (_context3.prev = _context3.next) {\n          case 0:\n            stockCount = [];\n            _context3.next = 3;\n            return storeRepository.api.getAllStores();\n          case 3:\n            shops = _context3.sent;\n            _context3.next = 6;\n            return downpayConfigService.getTenantConfig();\n          case 6:\n            configData = _context3.sent;\n            if (!(configData.getStockFromClient.toLowerCase() === \"true\")) {\n              _context3.next = 15;\n              break;\n            }\n            stockLookupRequest = {\n              itemCode: item.parameter3,\n              variantCode: service.getItemDimensionCode(item),\n              shopCode: []\n            };\n            shops.data.forEach(function (item, index) {\n              stockLookupRequest.shopCode.push(item.storeCode);\n            });\n            _context3.next = 12;\n            return stockService.getStockFromClient(stockLookupRequest);\n          case 12:\n            stockLevels = _context3.sent;\n            if (stockLevels) {\n              stockLevels.forEach(function (item, index) {\n                var selectedShop = shops.data.find(function (s) {\n                  return s.storeCode === item.shop;\n                });\n                stockCount.push({\n                  stock: item.quantity,\n                  shopName: selectedShop.description\n                });\n              });\n            }\n            return _context3.abrupt(\"return\", stockCount);\n          case 15:\n            _context3.next = 17;\n            return stockService.getItemStockLevels(itemNo, true);\n          case 17:\n            localStockLevels = _context3.sent;\n            if (localStockLevels) {\n              localStockLevels.forEach(function (item, index) {\n                var selectedShop = shops.data.find(function (s) {\n                  return s.description === item.locationName;\n                });\n                stockCount.push({\n                  stock: item.quantityOnHand,\n                  shopName: selectedShop.description\n                });\n              });\n            }\n            return _context3.abrupt(\"return\", stockCount);\n          case 20:\n          case \"end\":\n            return _context3.stop();\n        }\n      }, _callee3);\n    }));\n    return function (_x4) {\n      return _ref3.apply(this, arguments);\n    };\n  }();\n  service.getItemDimensionCode = function (item) {\n    if (item) {\n      if (item.itemDimensionValues) {\n        if (item.itemDimensionValues.length > 0) {\n          return item.itemDimensionValues[0].code;\n        }\n      }\n    }\n    return \"\";\n  };\n  function init() {\n    return _init.apply(this, arguments);\n  }\n  function _init() {\n    _init = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee4() {\n      var translations;\n      return _regeneratorRuntime().wrap(function _callee4$(_context4) {\n        while (1) switch (_context4.prev = _context4.next) {\n          case 0:\n            _context4.next = 2;\n            return $translate([\"toast/item/outOfStock\"]);\n          case 2:\n            translations = _context4.sent;\n            i18nOutOfStock = translations[\"toast/item/outOfStock\"];\n          case 4:\n          case \"end\":\n            return _context4.stop();\n        }\n      }, _callee4);\n    }));\n    return _init.apply(this, arguments);\n  }\n  return service;\n});\n","\"use strict\";\n\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _regeneratorRuntime() { \"use strict\"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return r; }; var t, r = {}, e = Object.prototype, n = e.hasOwnProperty, o = \"function\" == typeof Symbol ? Symbol : {}, i = o.iterator || \"@@iterator\", a = o.asyncIterator || \"@@asyncIterator\", u = o.toStringTag || \"@@toStringTag\"; function c(t, r, e, n) { return Object.defineProperty(t, r, { value: e, enumerable: !n, configurable: !n, writable: !n }); } try { c({}, \"\"); } catch (t) { c = function c(t, r, e) { return t[r] = e; }; } function h(r, e, n, o) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype); return c(a, \"_invoke\", function (r, e, n) { var o = 1; return function (i, a) { if (3 === o) throw Error(\"Generator is already running\"); if (4 === o) { if (\"throw\" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var u = n.delegate; if (u) { var c = d(u, n); if (c) { if (c === f) continue; return c; } } if (\"next\" === n.method) n.sent = n._sent = n.arg;else if (\"throw\" === n.method) { if (1 === o) throw o = 4, n.arg; n.dispatchException(n.arg); } else \"return\" === n.method && n.abrupt(\"return\", n.arg); o = 3; var h = s(r, e, n); if (\"normal\" === h.type) { if (o = n.done ? 4 : 2, h.arg === f) continue; return { value: h.arg, done: n.done }; } \"throw\" === h.type && (o = 4, n.method = \"throw\", n.arg = h.arg); } }; }(r, n, new Context(o || [])), !0), a; } function s(t, r, e) { try { return { type: \"normal\", arg: t.call(r, e) }; } catch (t) { return { type: \"throw\", arg: t }; } } r.wrap = h; var f = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var l = {}; c(l, i, function () { return this; }); var p = Object.getPrototypeOf, y = p && p(p(x([]))); y && y !== e && n.call(y, i) && (l = y); var v = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(l); function g(t) { [\"next\", \"throw\", \"return\"].forEach(function (r) { c(t, r, function (t) { return this._invoke(r, t); }); }); } function AsyncIterator(t, r) { function e(o, i, a, u) { var c = s(t[o], t, i); if (\"throw\" !== c.type) { var h = c.arg, f = h.value; return f && \"object\" == _typeof(f) && n.call(f, \"__await\") ? r.resolve(f.__await).then(function (t) { e(\"next\", t, a, u); }, function (t) { e(\"throw\", t, a, u); }) : r.resolve(f).then(function (t) { h.value = t, a(h); }, function (t) { return e(\"throw\", t, a, u); }); } u(c.arg); } var o; c(this, \"_invoke\", function (t, n) { function i() { return new r(function (r, o) { e(t, n, r, o); }); } return o = o ? o.then(i, i) : i(); }, !0); } function d(r, e) { var n = e.method, o = r.i[n]; if (o === t) return e.delegate = null, \"throw\" === n && r.i[\"return\"] && (e.method = \"return\", e.arg = t, d(r, e), \"throw\" === e.method) || \"return\" !== n && (e.method = \"throw\", e.arg = new TypeError(\"The iterator does not provide a '\" + n + \"' method\")), f; var i = s(o, r.i, e.arg); if (\"throw\" === i.type) return e.method = \"throw\", e.arg = i.arg, e.delegate = null, f; var a = i.arg; return a ? a.done ? (e[r.r] = a.value, e.next = r.n, \"return\" !== e.method && (e.method = \"next\", e.arg = t), e.delegate = null, f) : a : (e.method = \"throw\", e.arg = new TypeError(\"iterator result is not an object\"), e.delegate = null, f); } function w(t) { this.tryEntries.push(t); } function m(r) { var e = r[4] || {}; e.type = \"normal\", e.arg = t, r[4] = e; } function Context(t) { this.tryEntries = [[-1]], t.forEach(w, this), this.reset(!0); } function x(r) { if (null != r) { var e = r[i]; if (e) return e.call(r); if (\"function\" == typeof r.next) return r; if (!isNaN(r.length)) { var o = -1, a = function e() { for (; ++o < r.length;) if (n.call(r, o)) return e.value = r[o], e.done = !1, e; return e.value = t, e.done = !0, e; }; return a.next = a; } } throw new TypeError(_typeof(r) + \" is not iterable\"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, c(v, \"constructor\", GeneratorFunctionPrototype), c(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction), GeneratorFunction.displayName = c(GeneratorFunctionPrototype, u, \"GeneratorFunction\"), r.isGeneratorFunction = function (t) { var r = \"function\" == typeof t && t.constructor; return !!r && (r === GeneratorFunction || \"GeneratorFunction\" === (r.displayName || r.name)); }, r.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, c(t, u, \"GeneratorFunction\")), t.prototype = Object.create(v), t; }, r.awrap = function (t) { return { __await: t }; }, g(AsyncIterator.prototype), c(AsyncIterator.prototype, a, function () { return this; }), r.AsyncIterator = AsyncIterator, r.async = function (t, e, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(h(t, e, n, o), i); return r.isGeneratorFunction(e) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, g(v), c(v, u, \"Generator\"), c(v, i, function () { return this; }), c(v, \"toString\", function () { return \"[object Generator]\"; }), r.keys = function (t) { var r = Object(t), e = []; for (var n in r) e.unshift(n); return function t() { for (; e.length;) if ((n = e.pop()) in r) return t.value = n, t.done = !1, t; return t.done = !0, t; }; }, r.values = x, Context.prototype = { constructor: Context, reset: function reset(r) { if (this.prev = this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = \"next\", this.arg = t, this.tryEntries.forEach(m), !r) for (var e in this) \"t\" === e.charAt(0) && n.call(this, e) && !isNaN(+e.slice(1)) && (this[e] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0][4]; if (\"throw\" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(r) { if (this.done) throw r; var e = this; function n(t) { a.type = \"throw\", a.arg = r, e.next = t; } for (var o = e.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i[4], u = this.prev, c = i[1], h = i[2]; if (-1 === i[0]) return n(\"end\"), !1; if (!c && !h) throw Error(\"try statement without catch or finally\"); if (null != i[0] && i[0] <= u) { if (u < c) return this.method = \"next\", this.arg = t, n(c), !0; if (u < h) return n(h), !1; } } }, abrupt: function abrupt(t, r) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var n = this.tryEntries[e]; if (n[0] > -1 && n[0] <= this.prev && this.prev < n[2]) { var o = n; break; } } o && (\"break\" === t || \"continue\" === t) && o[0] <= r && r <= o[2] && (o = null); var i = o ? o[4] : {}; return i.type = t, i.arg = r, o ? (this.method = \"next\", this.next = o[2], f) : this.complete(i); }, complete: function complete(t, r) { if (\"throw\" === t.type) throw t.arg; return \"break\" === t.type || \"continue\" === t.type ? this.next = t.arg : \"return\" === t.type ? (this.rval = this.arg = t.arg, this.method = \"return\", this.next = \"end\") : \"normal\" === t.type && r && (this.next = r), f; }, finish: function finish(t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[2] === t) return this.complete(e[4], e[3]), m(e), f; } }, \"catch\": function _catch(t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[0] === t) { var n = e[4]; if (\"throw\" === n.type) { var o = n.arg; m(e); } return o; } } throw Error(\"illegal catch attempt\"); }, delegateYield: function delegateYield(r, e, n) { return this.delegate = { i: x(r), r: e, n: n }, \"next\" === this.method && (this.arg = t), f; } }, r; }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"next\", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"throw\", n); } _next(void 0); }); }; }\npos.factory(\"downpayOrderService\", function (receipt, customerRepository, addressRepository, storeRepository, notification, $translate, $rootScope, saleRepository, posStorage, downpayConfigService, downpayItemService, eventBus, $state, $q, fluctuatingPropertiesHelper, paymentService, addressHelper, keypadManager, posConfig, countryRepository, articles, $filter) {\n  var service = {\n    customer: null,\n    billingAddress: null,\n    shipment: null,\n    vNumber: null,\n    customerSearch: [],\n    items: [],\n    downPaymentNo: null,\n    downPaymentValue: 0,\n    isBooking: false,\n    totalValue: null\n  };\n  var i18nCustomerNotFound, i18nErrorCustomerInsert, i18nCustomerUpdated, i18nErrorCustomerUpdate, i18nCustomerInserted, i18nCustomerNoUsed, i18nAddressInserted, i18nErrorAddressInsert, i18nInvalidBooking, i18nSelect, i18nNoCustomer, i18nNoBillingAddress, i18nNoShipment, i18nStoreNotFound;\n  function init() {\n    $translate([\"toast/customer_not_found\", \"toast/customer_updated\", \"toast/customer_inserted\", \"toast/customer_update_error\", \"toast/customer_insert_error\", \"toast/customer_id_used\", \"toast/address_insert\", \"toast/address_not_inserted\", \"toast/invalidBooking\", \"toast/customer\", \"toast/billingAddress\", \"toast/shipment\", \"toast/pleaseSelect\", \"toast/storeNotFound\"]).then(function (translations) {\n      i18nCustomerNotFound = translations[\"toast/customer_not_found\"];\n      i18nCustomerUpdated = translations[\"toast/customer_updated\"];\n      i18nCustomerInserted = translations[\"toast/customer_inserted\"];\n      i18nErrorCustomerUpdate = translations[\"toast/customer_update_error\"];\n      i18nErrorCustomerInsert = translations[\"toast/customer_insert_error\"];\n      i18nCustomerNoUsed = translations[\"toast/customer_id_used\"];\n      i18nAddressInserted = translations[\"toast/address_insert\"];\n      i18nErrorAddressInsert = translations[\"toast/address_not_inserted\"];\n      i18nInvalidBooking = translations[\"toast/invalidBooking\"];\n      i18nNoCustomer = translations[\"toast/customer\"];\n      i18nNoBillingAddress = translations[\"toast/billingAddress\"];\n      i18nNoShipment = translations[\"toast/shipment\"];\n      i18nSelect = translations[\"toast/pleaseSelect\"];\n      i18nStoreNotFound = translations[\"toast/storeNotFound\"];\n    });\n    eventBus.subscribeAsync(eventBus.events.downpayment.openBooking, null, function () {\n      return addDownpaymentConfirmation();\n    });\n    eventBus.subscribeAsync(eventBus.events.article.addToReceipt, null, function (item) {\n      return showItemDetails(item);\n    });\n    eventBus.subscribeAsync(eventBus.events.article.increase, null, function (item) {\n      return validateStock(item, 1);\n    });\n    eventBus.subscribeAsync(eventBus.events.article.addToReceiptBarcode, null, function (ean) {\n      return showItemDetailsWithBarcode(ean);\n    });\n    eventBus.subscribeAsync(eventBus.events.downpayment.finishTransaction, null, function (currentCurrency) {\n      return finishTransaction(currentCurrency);\n    });\n    eventBus.subscribeAsync(eventBus.events.sale.downPaymentPrint, null, function (savedReceipt) {\n      return printReceipt(savedReceipt);\n    });\n    eventBus.subscribeAsync(eventBus.events.sale.close, null, function () {\n      return service.clearReceiptAfterBooking();\n    });\n    eventBus.subscribe(eventBus.events.sale.cancelled, null, function () {\n      return service.clearReceiptAfterBooking();\n    });\n    eventBus.subscribe(eventBus.events.customer.detach, null, function () {\n      return service.detachCustomerInDownpayment();\n    });\n    eventBus.subscribeAsync(eventBus.events.customer.beforeSelect, null, function () {\n      return service.addCustomerRedirect();\n    });\n    eventBus.subscribeAsync(eventBus.events.customer.afterSelect, null, function () {\n      return service.addBillingAddressRedirect();\n    });\n    eventBus.subscribeAsync(eventBus.events.customer.selected, null, function (customer) {\n      return service.setSelectedCustomer(customer);\n    });\n    eventBus.subscribe(eventBus.events.payment.cancel, null, function () {\n      return service.cancelPaymentRestorereceipt();\n    });\n  }\n  service.clearDownPaymentData = function () {\n    service.items = [];\n    service.downPaymentNo = null;\n    service.vNumber = null;\n    service.downPaymentValue = 0;\n  };\n  service.getReceiptItems = function () {\n    return service.items;\n  };\n  service.setTransactionBookingType = function () {\n    service.isBooking = true;\n    $rootScope.isDownPaymentBooking = true;\n  };\n  service.clearTransactionBookingType = function () {\n    service.clearDownPaymentData();\n    service.totalValue = null;\n    service.isBooking = false;\n    $rootScope.isDownPaymentBooking = false;\n  };\n  service.clearReceiptAfterBooking = function () {\n    service.clearDownPaymentData();\n    service.clearCustomer();\n    service.totalValue = null;\n    service.isBooking = false;\n    $rootScope.isDownPaymentBooking = false;\n    if (fluctuatingPropertiesHelper.getIsBooking(receipt.getReceipt())) {\n      receipt.closeReceipt();\n      receipt.prepareReceipt();\n    }\n  };\n  service.cancelPaymentRestorereceipt = function () {\n    var items = service.getReceiptItems();\n    if (items.length > 0) {\n      receipt.addReceiptItems(items);\n      service.clearDownPaymentData();\n    }\n  };\n  service.loadSelectedCustomer = function () {\n    if (service.customer) return service.customer;\n    var custNumber = receipt.getCustomer().customerNumber;\n    if (custNumber) {\n      service.getCustomerByNumber(custNumber).then(function () {\n        return service.customer;\n      });\n    }\n  };\n  service.refreshSelectedCustomer = function () {\n    var custNumber = receipt.getCustomer().customerNumber;\n    if (custNumber) {\n      return service.getCustomerByNumber(custNumber).then(function () {\n        return service.customer;\n      });\n    }\n  };\n  service.getSelectedCustomer = function () {\n    return service.customer;\n  };\n  service.setCustomerSearch = function (customers) {\n    service.customerSearch = customers;\n  };\n  service.getCustomerSearch = function () {\n    return service.customerSearch;\n  };\n  service.setSelectedCustomer = function (customer) {\n    customer.birthDate = customer.birthDate ? moment(customer.birthDate, \"YYYY-MM-DD\").format(\"YYYY-MM-DD\") : null;\n    service.customer = customer;\n  };\n  service.getCustomerByEmail = function (email) {\n    return customerRepository.api.searchForCustomer(\"\", \"\", email, \"\", \"\", \"\", \"\", 0, 10).then(function (response) {\n      if (!response.data) {\n        return errorHandler(i18nCustomerNotFound);\n      }\n      service.setCustomerSearch(response.data);\n      return true;\n    })[\"catch\"](function () {\n      return errorHandler(i18nCustomerNotFound);\n    });\n  };\n  service.getCustomerByMembership = function (membership) {\n    return customerRepository.api.searchForCustomer(\"\", \"\", \"\", \"\", \"\", \"\", membership, 0, 10).then(function (response) {\n      if (!response.data) {\n        return errorHandler(i18nCustomerNotFound);\n      }\n      service.setCustomerSearch(response.data);\n      return true;\n    })[\"catch\"](function () {\n      return errorHandler(i18nCustomerNotFound);\n    });\n  };\n  service.getCustomerByNumber = function (custNumber) {\n    return customerRepository.api.getCustomer(custNumber).then(function (response) {\n      if (!response.data) {\n        return errorHandler(i18nCustomerNotFound);\n      }\n      service.setSelectedCustomer(response.data);\n      return response.data;\n    })[\"catch\"](function () {\n      return errorHandler(i18nCustomerNotFound);\n    });\n  };\n  service.addUpdateDownPaymentCustomer = function (customer) {\n    customer.shopCode = posStorage.get(\"current_shop\").storeCode;\n    if (customer.id !== undefined) {\n      return customerRepository.api.updateDownPaymentCustomer(customer).then(function (response) {\n        notification.pop(\"info\", i18nCustomerUpdated);\n        return response.data;\n      })[\"catch\"](function () {\n        return errorHandler(i18nErrorCustomerUpdate);\n      });\n    } else {\n      return customerRepository.api.addDownPaymentCustomer(customer).then(function (response) {\n        notification.pop(\"info\", i18nCustomerInserted);\n        return response.data;\n      })[\"catch\"](function (response) {\n        return errorHandler(response.status == 409 ? i18nCustomerNoUsed : i18nErrorCustomerInsert);\n      });\n    }\n  };\n  service.detachCustomerInDownpayment = function () {\n    service.customer = null;\n    service.billingAddress = null;\n    service.shipment = null;\n  };\n  service.clearCustomer = function () {\n    service.detachCustomerInDownpayment();\n  };\n  service.setBillingAddress = function (address) {\n    service.billingAddress = address;\n    $rootScope.selectedBillingAddress = address;\n  };\n  service.getSelectedBillingAddress = function () {\n    return service.billingAddress;\n  };\n  service.clearBillingAddress = function () {\n    service.billingAddress = null;\n    $rootScope.selectedBillingAddress = null;\n  };\n  service.addDownPaymentAddress = function (address) {\n    address.shopCode = posStorage.get(\"current_shop\").storeCode;\n    return addressRepository.api.addDownPaymentAddress(address).then(function (response) {\n      notification.pop(\"info\", i18nAddressInserted);\n      return response;\n    })[\"catch\"](function () {\n      return errorHandler(i18nErrorAddressInsert);\n    });\n  };\n  service.initShipment = function (homeDelivery) {\n    if (service.getShipment()) {\n      return $q.resolve(service.getShipment());\n    }\n    return downpayConfigService.getShippingConfig().then(function (shippmentConfig) {\n      return service.getShippingFee().then(function (shippingFee) {\n        service.shipment = {\n          homeDelivery: homeDelivery,\n          partialDelivery: false,\n          lease: false,\n          date: moment().add(parseInt(shippmentConfig.deliveryDateOffset), \"days\").format(\"YYYY-MM-DD\"),\n          canBeDeliveredEarlier: false,\n          fee: shippingFee,\n          note: \"\"\n        };\n        return service.shipment;\n      });\n    });\n  };\n  service.getShipment = function () {\n    return service.shipment;\n  };\n  service.updateShipment = function (shipment, homeDeliveryChanged) {\n    if (homeDeliveryChanged) {\n      shipment.address = null;\n      shipment.store = null;\n    }\n    service.shipment = shipment;\n  };\n  service.getShippingFee = function () {\n    return downpayConfigService.getShippingConfig().then(function (shippmentConfig) {\n      var orderValue = receipt.getTotalWithoutShippingFee();\n      if (service.shipment) {\n        if (parseFloat(orderValue) >= parseFloat(shippmentConfig.freeShippingOrderThreshold) || !service.shipment.homeDelivery) {\n          return 0.0;\n        }\n        return parseFloat(shippmentConfig.shippingFee);\n      }\n      if (orderValue >= parseFloat(shippmentConfig.freeShippingOrderThreshold)) {\n        return 0.0;\n      }\n      return parseFloat(shippmentConfig.shippingFee);\n    });\n  };\n  service.setShippingFee = function () {\n    service.getShippingFee().then(function (shipingValue) {\n      var shipping = service.getShipment();\n      if (shipping) {\n        service.shipment.fee = shipingValue;\n      } else {\n        service.initShipment(true);\n      }\n    });\n  };\n  service.setShippingAddress = function (address) {\n    if (!service.shipment) {\n      service.initShipment(true);\n    }\n    service.shipment.address = address;\n    service.shipment.store = null;\n  };\n  service.setShippingStore = function (store) {\n    if (!service.shipment) {\n      service.initShipment(false);\n    }\n    service.shipment.address = null;\n    service.shipment.store = store;\n  };\n  service.clearShippingAddress = function () {\n    service.shipment.address = null;\n    service.shipment.store = null;\n  };\n  service.getStores = function () {\n    return storeRepository.api.getAllStores().then(function (response) {\n      if (!response.data) {\n        return errorHandler(i18nStoreNotFound);\n      }\n      return response.data;\n    })[\"catch\"](function () {\n      return errorHandler(i18nStoreNotFound);\n    });\n  };\n  service.saveDownPaymentNoAndValue = function () {\n    var reciptItems = receipt.getReceipt().items;\n    var downPaymentLine = reciptItems.find(function (x) {\n      return x.templateType === \"downPayment\";\n    });\n    if (downPaymentLine) {\n      service.downPaymentNo = downPaymentLine.voucherNumber;\n      service.downPaymentValue = downPaymentLine.salesPrice;\n    }\n  };\n  service.moveItemsFromReceipt = function () {\n    service.items = [];\n    var reciptItems = receipt.getReceipt().items;\n    for (var i = reciptItems.length; i--;) {\n      if (reciptItems[i].templateType != \"downPayment\") {\n        service.items.push(reciptItems[i]);\n        reciptItems.splice(i, 1);\n      }\n    }\n  };\n  service.orderDataValid = function () {\n    var result = true;\n    var message = i18nSelect + \" : \";\n    if (!service.customer) {\n      result = false;\n      message += i18nNoCustomer + \" \";\n    }\n    if (!service.billingAddress) {\n      result = false;\n      message += i18nNoBillingAddress + \" \";\n    }\n    if (!service.shipment) {\n      result = false;\n      message += i18nNoShipment + \" \";\n    } else {\n      if (!service.shipment.address && !service.shipment.store) {\n        result = false;\n        message += i18nNoShipment + \" \";\n      } else if (!hasRecieptContainShippment()) {\n        result = false;\n        message += i18nNoShipment + \" \";\n      }\n    }\n    if (!result) {\n      errorHandler(message);\n    }\n    return result;\n  };\n  service.downPaymentBooking = function () {\n    if (service.downPaymentNo && service.items.length > 0) {\n      return true;\n    }\n    return false;\n  };\n  service.checkBooking = function (shippingConfig) {\n    var booking = {\n      shopCode: posStorage.get(\"current_shop\").storeCode,\n      customerCode: service.customer.externalUniqueId,\n      date: moment().format(\"YYYY-MM-DD\"),\n      bookingNotes: service.shipment.note,\n      partialDelivery: service.shipment.partialDelivery,\n      canBeDeliveredEarlier: service.shipment.canBeDeliveredEarlier,\n      lines: []\n    };\n    if (bookingContainDownpayment()) {\n      booking.orderId = constructNextReceiptId(receipt.getReceipt());\n    } else {\n      booking.orderId = receipt.constructReceiptId(receipt.getReceipt());\n    }\n    if (service.shipment.homeDelivery) {\n      booking.deliveryId = service.shipment.address.name;\n    } else {\n      booking.deliveryId = service.shipment.store.storeCode;\n    }\n    booking.bookingNotes = service.shipment.note;\n    var items = receipt.getReceipt().items || [];\n    for (var i = 0; i < items.length; i++) {\n      var item = items[i];\n      if (item.templateType != \"shipmentTemplate\" && item.templateType != \"downPayment\") {\n        var line = {\n          deliveryChangeDate: true,\n          isLease: service.shipment.lease,\n          deliveryDate: service.shipment.date,\n          netPrice: item.salesPrice,\n          productCode: item.parameter3,\n          variantCode: downpayItemService.getItemDimensionCode(item),\n          qty: item.quantity,\n          note: item.enteredText,\n          currency: posConfig.getLocalCurrency().name\n        };\n        booking.lines.push(line);\n      }\n      if (item.templateType === \"shipmentTemplate\" && item.salesPrice > 0) {\n        var _line = {\n          deliveryChangeDate: false,\n          isLease: false,\n          deliveryDate: service.shipment.date,\n          netPrice: item.salesPrice,\n          productCode: shippingConfig.itemCode,\n          variantCode: shippingConfig.variantCode,\n          qty: 1,\n          note: \"\",\n          currency: posConfig.getLocalCurrency().name\n        };\n        booking.lines.push(_line);\n      }\n    }\n    return saleRepository.api.checkBooking(booking).then(function (response) {\n      if (response.data.status === \"OK\") {\n        service.vNumber = response.data.salesOrderId;\n        return true;\n      }\n      service.vNumber = null;\n      errorHandler(i18nInvalidBooking);\n      $state.go(\"root.split.pos\");\n      return;\n    })[\"catch\"](function () {\n      service.vNumber = null;\n      errorHandler(i18nInvalidBooking);\n      $state.go(\"root.split.pos\");\n      return;\n    });\n  };\n  service.getCountries = /*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee() {\n    var languageCode, countries;\n    return _regeneratorRuntime().wrap(function _callee$(_context) {\n      while (1) switch (_context.prev = _context.next) {\n        case 0:\n          languageCode = posStorage.get(\"posConfig\").language;\n          _context.next = 3;\n          return countryRepository.api.getByLanguageCode(languageCode);\n        case 3:\n          countries = _context.sent;\n          return _context.abrupt(\"return\", $filter(\"orderBy\")(countries.data, \"countryName\"));\n        case 5:\n        case \"end\":\n          return _context.stop();\n      }\n    }, _callee);\n  }));\n  service.saveShipping = function () {\n    var shipping = service.getShipment();\n    if (!shipping) return;\n    var address;\n    if (shipping.homeDelivery) {\n      address = shipping.address;\n    } else {\n      address = shipping.store;\n    }\n    var receiptItems = receipt.getReceipt().items || [];\n    var shippingIndex = receiptItems.findIndex(function (x) {\n      return x.templateType === \"shipmentTemplate\";\n    });\n    if (shippingIndex >= 0) {\n      receipt.removeLine(shippingIndex);\n    }\n    receipt.addShipment(shipping.fee, addressHelper.getAddressString(address));\n  };\n  function hasRecieptContainShippment() {\n    var receiptItems = receipt.getReceipt().items || [];\n    var shippingIndex = receiptItems.findIndex(function (x) {\n      return x.templateType === \"shipmentTemplate\";\n    });\n    if (shippingIndex >= 0) {\n      return true;\n    }\n    return false;\n  }\n  function constructNextReceiptId(receiptObject) {\n    if (!receiptObject.shop) receiptObject.shop = 0;\n    return \"R\".concat(receiptObject.shop.toString().padStart(4, \"0\"), \"-\").concat(receiptObject.posId.toString().padStart(4, \"0\"), \"-\").concat((receiptObject.receiptId + 1).toString().padStart(6, \"0\"));\n  }\n  init();\n  function validateStock(_x, _x2) {\n    return _validateStock.apply(this, arguments);\n  }\n  function _validateStock() {\n    _validateStock = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee5(item, qty) {\n      var isStockValid;\n      return _regeneratorRuntime().wrap(function _callee5$(_context5) {\n        while (1) switch (_context5.prev = _context5.next) {\n          case 0:\n            _context5.next = 2;\n            return downpayItemService.validateStock(item, qty);\n          case 2:\n            isStockValid = _context5.sent;\n            return _context5.abrupt(\"return\", isStockValid);\n          case 4:\n          case \"end\":\n            return _context5.stop();\n        }\n      }, _callee5);\n    }));\n    return _validateStock.apply(this, arguments);\n  }\n  function showItemDetailsWithBarcode(_x3) {\n    return _showItemDetailsWithBarcode.apply(this, arguments);\n  }\n  function _showItemDetailsWithBarcode() {\n    _showItemDetailsWithBarcode = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee6(ean) {\n      var item, result;\n      return _regeneratorRuntime().wrap(function _callee6$(_context6) {\n        while (1) switch (_context6.prev = _context6.next) {\n          case 0:\n            if (service.isBooking) {\n              _context6.next = 2;\n              break;\n            }\n            return _context6.abrupt(\"return\", true);\n          case 2:\n            _context6.next = 4;\n            return articles.findArticleByEAN(ean);\n          case 4:\n            item = _context6.sent;\n            _context6.next = 7;\n            return showItemDetails(item.data);\n          case 7:\n            result = _context6.sent;\n            return _context6.abrupt(\"return\", result);\n          case 9:\n          case \"end\":\n            return _context6.stop();\n        }\n      }, _callee6);\n    }));\n    return _showItemDetailsWithBarcode.apply(this, arguments);\n  }\n  function showItemDetails(_x4) {\n    return _showItemDetails.apply(this, arguments);\n  }\n  function _showItemDetails() {\n    _showItemDetails = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee7(item) {\n      var enableExendedData, configData, isStockValid;\n      return _regeneratorRuntime().wrap(function _callee7$(_context7) {\n        while (1) switch (_context7.prev = _context7.next) {\n          case 0:\n            if (service.isBooking) {\n              _context7.next = 2;\n              break;\n            }\n            return _context7.abrupt(\"return\", true);\n          case 2:\n            enableExendedData = false;\n            _context7.next = 5;\n            return downpayConfigService.getTenantConfig();\n          case 5:\n            configData = _context7.sent;\n            if (configData.displayArticleDetails.toLowerCase() === \"true\") {\n              enableExendedData = true;\n            }\n            if (!enableExendedData) {\n              _context7.next = 11;\n              break;\n            }\n            downpayItemService.selectedArticle = item;\n            $state.go(\"root.split.downpayment-articledetails\");\n            return _context7.abrupt(\"return\", false);\n          case 11:\n            _context7.next = 13;\n            return downpayItemService.validateStock(item, 1);\n          case 13:\n            isStockValid = _context7.sent;\n            return _context7.abrupt(\"return\", isStockValid);\n          case 15:\n          case \"end\":\n            return _context7.stop();\n        }\n      }, _callee7);\n    }));\n    return _showItemDetails.apply(this, arguments);\n  }\n  function printReceipt(_x5) {\n    return _printReceipt.apply(this, arguments);\n  }\n  function _printReceipt() {\n    _printReceipt = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee8(savedReceipt) {\n      return _regeneratorRuntime().wrap(function _callee8$(_context8) {\n        while (1) switch (_context8.prev = _context8.next) {\n          case 0:\n            service.totalValue = receipt.getTotal();\n            if (service.isBooking) {\n              _context8.next = 3;\n              break;\n            }\n            return _context8.abrupt(\"return\", true);\n          case 3:\n            $state.go(\"root.split.downpayment-print\", {\n              savedReceipt: savedReceipt\n            });\n            return _context8.abrupt(\"return\", false);\n          case 5:\n          case \"end\":\n            return _context8.stop();\n        }\n      }, _callee8);\n    }));\n    return _printReceipt.apply(this, arguments);\n  }\n  $rootScope.$on(\"receipt:updated\", function (event, uuid) {\n    if (service.shipment) {\n      service.getShippingFee().then(function (shippingFee) {\n        if (service.shipment.fee === shippingFee) {\n          return;\n        }\n        if (service.shipment.fee > 0 && shippingFee > 0) {\n          return;\n        }\n        service.shipment.fee = shippingFee;\n        if (hasRecieptContainShippment()) {\n          service.saveShipping();\n        }\n      });\n    }\n  });\n  function addDownpaymentConfirmation() {\n    $state.go(\"root.split.check-downpayment\");\n  }\n  service.book = /*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee2() {\n    var configData, shippingConfig;\n    return _regeneratorRuntime().wrap(function _callee2$(_context2) {\n      while (1) switch (_context2.prev = _context2.next) {\n        case 0:\n          if (service.orderDataValid()) {\n            _context2.next = 2;\n            break;\n          }\n          return _context2.abrupt(\"return\");\n        case 2:\n          _context2.next = 4;\n          return downpayConfigService.getTenantConfig();\n        case 4:\n          configData = _context2.sent;\n          _context2.next = 7;\n          return downpayConfigService.getShippingConfig();\n        case 7:\n          shippingConfig = _context2.sent;\n          if (!(configData.postTransactionData.toLowerCase() === \"false\")) {\n            _context2.next = 11;\n            break;\n          }\n          if (bookingContainDownpayment()) {\n            service.moveItemsFromReceipt();\n            service.saveDownPaymentNoAndValue();\n            fluctuatingPropertiesHelper.setDownPaymentValue(receipt.getReceipt(), service.downPaymentValue ? service.downPaymentValue : new Decimal(0));\n            fluctuatingPropertiesHelper.setDownPaymentNo(receipt.getReceipt(), service.downPaymentNo ? service.downPaymentNo : \"\");\n            $state.go(\"root.split.payment\");\n          } else {\n            bookWithoutDownpayment(\"\");\n          }\n          return _context2.abrupt(\"return\");\n        case 11:\n          service.checkBooking(shippingConfig).then(function (response) {\n            if (response) {\n              if (bookingContainDownpayment()) {\n                // put vNumber in reciept\n                var vNumber = service.vNumber;\n                service.saveDownPaymentNoAndValue();\n                fluctuatingPropertiesHelper.setVNumber(receipt.getReceipt(), vNumber);\n                fluctuatingPropertiesHelper.setDownPaymentValue(receipt.getReceipt(), service.downPaymentValue ? service.downPaymentValue : new Decimal(0));\n                fluctuatingPropertiesHelper.setDownPaymentNo(receipt.getReceipt(), service.downPaymentNo ? service.downPaymentNo : \"\");\n                service.downPaymentValue;\n                service.moveItemsFromReceipt();\n                $state.go(\"root.split.payment\");\n              } else {\n                bookWithoutDownpayment(service.vNumber);\n              }\n            }\n          })[\"catch\"](function (response) {\n            notification.pop(\"error\", i18nInvalidBooking);\n          });\n        case 12:\n        case \"end\":\n          return _context2.stop();\n      }\n    }, _callee2);\n  }));\n  function bookWithoutDownpayment(vNumber) {\n    var currentCurrency = posConfig.getLocalCurrency();\n    fluctuatingPropertiesHelper.setVNumber(receipt.getReceipt(), vNumber);\n    fluctuatingPropertiesHelper.setDownPaymentNo(receipt.getReceipt(), \"\");\n    fluctuatingPropertiesHelper.setDownPaymentValue(receipt.getReceipt(), new Decimal(0));\n    fluctuatingPropertiesHelper.setIsBooking(receipt.getReceipt(), true);\n    service.clearDownPaymentData();\n    // For down payment amount is already saved so parameter from handlePayment is ignored;\n    keypadManager.hide();\n    var paymentType = paymentService.getPaymentType(\"DownPayment\");\n    return paymentService.getPaymentType(\"DownPayment\").validateAmount(0, \"DownPayment\", \"\").then(function () {\n      return paymentType.makePayment(0, currentCurrency, \"\").then(function () {\n        var savedReceipt = angular.copy(receipt.getReceipt());\n        $state.go(\"root.split.paymentfinished\", {\n          savedReceipt: savedReceipt\n        });\n      });\n    });\n  }\n  function bookingContainDownpayment() {\n    var reciptItems = receipt.getReceipt().items;\n    return reciptItems.some(function (x) {\n      return x.templateType === \"downPayment\";\n    });\n  }\n  function finishTransaction(currentCurrency) {\n    if (!service.isBooking) return true;\n    if (service.downPaymentBooking()) {\n      receipt.prepareReceipt();\n      var customer = service.getSelectedCustomer();\n      receipt.attachCustomer(customer.externalUniqueId, customer.emailAddress);\n      // move back items\n      var items = service.getReceiptItems();\n      receipt.addReceiptItems(items);\n      var vNumber = service.vNumber;\n      var downPaymentNo = service.downPaymentNo;\n      var downPaymentValue = service.downPaymentValue;\n      fluctuatingPropertiesHelper.setVNumber(receipt.getReceipt(), vNumber);\n      fluctuatingPropertiesHelper.setDownPaymentNo(receipt.getReceipt(), downPaymentNo);\n      fluctuatingPropertiesHelper.setDownPaymentValue(receipt.getReceipt(), downPaymentValue);\n      fluctuatingPropertiesHelper.setIsBooking(receipt.getReceipt(), true);\n      service.clearDownPaymentData();\n      // For down payment amount is already saved so parameter from handlePayment is ignored;\n      keypadManager.hide();\n      var paymentType = paymentService.getPaymentType(\"DownPayment\");\n      return paymentService.getPaymentType(\"DownPayment\").validateAmount(0, \"DownPayment\", \"\").then(function () {\n        return paymentType.makePayment(0, currentCurrency, \"\").then(function () {\n          return true;\n        });\n      });\n    } else {\n      return true;\n    }\n  }\n  function errorHandler(err) {\n    notification.pop(\"error\", err);\n    return false;\n  }\n  service.addCustomerRedirect = /*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee3() {\n    var configData;\n    return _regeneratorRuntime().wrap(function _callee3$(_context3) {\n      while (1) switch (_context3.prev = _context3.next) {\n        case 0:\n          _context3.next = 2;\n          return downpayConfigService.getTenantConfig();\n        case 2:\n          configData = _context3.sent;\n          if (!(configData.customFeautures.toLowerCase() !== \"riviera\")) {\n            _context3.next = 5;\n            break;\n          }\n          return _context3.abrupt(\"return\", true);\n        case 5:\n          $state.go(\"root.split.downpayment-editcustomer\");\n          return _context3.abrupt(\"return\", false);\n        case 7:\n        case \"end\":\n          return _context3.stop();\n      }\n    }, _callee3);\n  }));\n  service.addBillingAddressRedirect = /*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee4() {\n    return _regeneratorRuntime().wrap(function _callee4$(_context4) {\n      while (1) switch (_context4.prev = _context4.next) {\n        case 0:\n          if (!$rootScope.isDownPaymentBooking) {\n            _context4.next = 3;\n            break;\n          }\n          $state.go(\"root.split.downpayment-selectbillingaddress\");\n          return _context4.abrupt(\"return\", false);\n        case 3:\n          return _context4.abrupt(\"return\", true);\n        case 4:\n        case \"end\":\n          return _context4.stop();\n      }\n    }, _callee4);\n  }));\n  return service;\n});\n","\"use strict\";\n\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _regeneratorRuntime() { \"use strict\"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return r; }; var t, r = {}, e = Object.prototype, n = e.hasOwnProperty, o = \"function\" == typeof Symbol ? Symbol : {}, i = o.iterator || \"@@iterator\", a = o.asyncIterator || \"@@asyncIterator\", u = o.toStringTag || \"@@toStringTag\"; function c(t, r, e, n) { return Object.defineProperty(t, r, { value: e, enumerable: !n, configurable: !n, writable: !n }); } try { c({}, \"\"); } catch (t) { c = function c(t, r, e) { return t[r] = e; }; } function h(r, e, n, o) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype); return c(a, \"_invoke\", function (r, e, n) { var o = 1; return function (i, a) { if (3 === o) throw Error(\"Generator is already running\"); if (4 === o) { if (\"throw\" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var u = n.delegate; if (u) { var c = d(u, n); if (c) { if (c === f) continue; return c; } } if (\"next\" === n.method) n.sent = n._sent = n.arg;else if (\"throw\" === n.method) { if (1 === o) throw o = 4, n.arg; n.dispatchException(n.arg); } else \"return\" === n.method && n.abrupt(\"return\", n.arg); o = 3; var h = s(r, e, n); if (\"normal\" === h.type) { if (o = n.done ? 4 : 2, h.arg === f) continue; return { value: h.arg, done: n.done }; } \"throw\" === h.type && (o = 4, n.method = \"throw\", n.arg = h.arg); } }; }(r, n, new Context(o || [])), !0), a; } function s(t, r, e) { try { return { type: \"normal\", arg: t.call(r, e) }; } catch (t) { return { type: \"throw\", arg: t }; } } r.wrap = h; var f = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var l = {}; c(l, i, function () { return this; }); var p = Object.getPrototypeOf, y = p && p(p(x([]))); y && y !== e && n.call(y, i) && (l = y); var v = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(l); function g(t) { [\"next\", \"throw\", \"return\"].forEach(function (r) { c(t, r, function (t) { return this._invoke(r, t); }); }); } function AsyncIterator(t, r) { function e(o, i, a, u) { var c = s(t[o], t, i); if (\"throw\" !== c.type) { var h = c.arg, f = h.value; return f && \"object\" == _typeof(f) && n.call(f, \"__await\") ? r.resolve(f.__await).then(function (t) { e(\"next\", t, a, u); }, function (t) { e(\"throw\", t, a, u); }) : r.resolve(f).then(function (t) { h.value = t, a(h); }, function (t) { return e(\"throw\", t, a, u); }); } u(c.arg); } var o; c(this, \"_invoke\", function (t, n) { function i() { return new r(function (r, o) { e(t, n, r, o); }); } return o = o ? o.then(i, i) : i(); }, !0); } function d(r, e) { var n = e.method, o = r.i[n]; if (o === t) return e.delegate = null, \"throw\" === n && r.i[\"return\"] && (e.method = \"return\", e.arg = t, d(r, e), \"throw\" === e.method) || \"return\" !== n && (e.method = \"throw\", e.arg = new TypeError(\"The iterator does not provide a '\" + n + \"' method\")), f; var i = s(o, r.i, e.arg); if (\"throw\" === i.type) return e.method = \"throw\", e.arg = i.arg, e.delegate = null, f; var a = i.arg; return a ? a.done ? (e[r.r] = a.value, e.next = r.n, \"return\" !== e.method && (e.method = \"next\", e.arg = t), e.delegate = null, f) : a : (e.method = \"throw\", e.arg = new TypeError(\"iterator result is not an object\"), e.delegate = null, f); } function w(t) { this.tryEntries.push(t); } function m(r) { var e = r[4] || {}; e.type = \"normal\", e.arg = t, r[4] = e; } function Context(t) { this.tryEntries = [[-1]], t.forEach(w, this), this.reset(!0); } function x(r) { if (null != r) { var e = r[i]; if (e) return e.call(r); if (\"function\" == typeof r.next) return r; if (!isNaN(r.length)) { var o = -1, a = function e() { for (; ++o < r.length;) if (n.call(r, o)) return e.value = r[o], e.done = !1, e; return e.value = t, e.done = !0, e; }; return a.next = a; } } throw new TypeError(_typeof(r) + \" is not iterable\"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, c(v, \"constructor\", GeneratorFunctionPrototype), c(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction), GeneratorFunction.displayName = c(GeneratorFunctionPrototype, u, \"GeneratorFunction\"), r.isGeneratorFunction = function (t) { var r = \"function\" == typeof t && t.constructor; return !!r && (r === GeneratorFunction || \"GeneratorFunction\" === (r.displayName || r.name)); }, r.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, c(t, u, \"GeneratorFunction\")), t.prototype = Object.create(v), t; }, r.awrap = function (t) { return { __await: t }; }, g(AsyncIterator.prototype), c(AsyncIterator.prototype, a, function () { return this; }), r.AsyncIterator = AsyncIterator, r.async = function (t, e, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(h(t, e, n, o), i); return r.isGeneratorFunction(e) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, g(v), c(v, u, \"Generator\"), c(v, i, function () { return this; }), c(v, \"toString\", function () { return \"[object Generator]\"; }), r.keys = function (t) { var r = Object(t), e = []; for (var n in r) e.unshift(n); return function t() { for (; e.length;) if ((n = e.pop()) in r) return t.value = n, t.done = !1, t; return t.done = !0, t; }; }, r.values = x, Context.prototype = { constructor: Context, reset: function reset(r) { if (this.prev = this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = \"next\", this.arg = t, this.tryEntries.forEach(m), !r) for (var e in this) \"t\" === e.charAt(0) && n.call(this, e) && !isNaN(+e.slice(1)) && (this[e] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0][4]; if (\"throw\" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(r) { if (this.done) throw r; var e = this; function n(t) { a.type = \"throw\", a.arg = r, e.next = t; } for (var o = e.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i[4], u = this.prev, c = i[1], h = i[2]; if (-1 === i[0]) return n(\"end\"), !1; if (!c && !h) throw Error(\"try statement without catch or finally\"); if (null != i[0] && i[0] <= u) { if (u < c) return this.method = \"next\", this.arg = t, n(c), !0; if (u < h) return n(h), !1; } } }, abrupt: function abrupt(t, r) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var n = this.tryEntries[e]; if (n[0] > -1 && n[0] <= this.prev && this.prev < n[2]) { var o = n; break; } } o && (\"break\" === t || \"continue\" === t) && o[0] <= r && r <= o[2] && (o = null); var i = o ? o[4] : {}; return i.type = t, i.arg = r, o ? (this.method = \"next\", this.next = o[2], f) : this.complete(i); }, complete: function complete(t, r) { if (\"throw\" === t.type) throw t.arg; return \"break\" === t.type || \"continue\" === t.type ? this.next = t.arg : \"return\" === t.type ? (this.rval = this.arg = t.arg, this.method = \"return\", this.next = \"end\") : \"normal\" === t.type && r && (this.next = r), f; }, finish: function finish(t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[2] === t) return this.complete(e[4], e[3]), m(e), f; } }, \"catch\": function _catch(t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[0] === t) { var n = e[4]; if (\"throw\" === n.type) { var o = n.arg; m(e); } return o; } } throw Error(\"illegal catch attempt\"); }, delegateYield: function delegateYield(r, e, n) { return this.delegate = { i: x(r), r: e, n: n }, \"next\" === this.method && (this.arg = t), f; } }, r; }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"next\", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"throw\", n); } _next(void 0); }); }; }\npos.controller(\"DownPaymentPrintController\", function ($scope, posStorage, downpayOrderService, $state, $stateParams, receipt) {\n  \"use strict\";\n\n  var savedReceipt = $stateParams.savedReceipt;\n  $scope.shop;\n  $scope.billingAddress;\n  $scope.deliveryAddress;\n  $scope.orderNumber;\n  $scope.transactionNumber;\n  $scope.customerNo;\n  $scope.deliveryValue;\n  $scope.totalOrderValue;\n  $scope.downPaymentValue;\n  $scope.remainingValue;\n  $scope.items;\n  $scope.date = new Date();\n  init();\n  $scope.print = function () {\n    window.print();\n  };\n  $scope.close = function () {\n    $state.go(\"root.split.paymentfinished\");\n  };\n  $scope.showLineFullPrice = function (article) {\n    return article.salesPrice.times(article.quantity);\n  };\n  function init() {\n    return _init.apply(this, arguments);\n  }\n  function _init() {\n    _init = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee() {\n      var currentReceipt, receiptId, delivery;\n      return _regeneratorRuntime().wrap(function _callee$(_context) {\n        while (1) switch (_context.prev = _context.next) {\n          case 0:\n            _context.next = 2;\n            return receipt.loadReceipt(savedReceipt);\n          case 2:\n            currentReceipt = _context.sent;\n            receiptId = receipt.constructReceiptId(currentReceipt);\n            $scope.shop = posStorage.get(\"current_shop\");\n            delivery = downpayOrderService.getShipment();\n            if (delivery.homeDelivery) {\n              $scope.deliveryAddress = delivery.address;\n            } else {\n              $scope.deliveryAddress = delivery.store;\n            }\n            $scope.deliveryValue = delivery.fee;\n            $scope.billingAddress = downpayOrderService.getSelectedBillingAddress();\n            $scope.items = savedReceipt.items.filter(function (x) {\n              return x.itemGroup > 0;\n            });\n            $scope.customerNo = savedReceipt.customerNumber;\n            $scope.transactionNumber = receiptId;\n            if (savedReceipt.fluctuatingProperties.vNumber) {\n              $scope.orderNumber = savedReceipt.fluctuatingProperties.vNumber;\n            } else {\n              $scope.orderNumber = receiptId;\n            }\n            $scope.totalOrderValue = downpayOrderService.totalValue;\n            if (savedReceipt.fluctuatingProperties.downPaymentValue) {\n              $scope.downPaymentValue = savedReceipt.fluctuatingProperties.downPaymentValue;\n              $scope.remainingValue = $scope.totalOrderValue.minus($scope.downPaymentValue);\n            } else {\n              $scope.downPaymentValue = 0.0;\n              $scope.remainingValue = $scope.totalOrderValue;\n            }\n          case 15:\n          case \"end\":\n            return _context.stop();\n        }\n      }, _callee);\n    }));\n    return _init.apply(this, arguments);\n  }\n});\n","\"use strict\";\n\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _regeneratorRuntime() { \"use strict\"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return r; }; var t, r = {}, e = Object.prototype, n = e.hasOwnProperty, o = \"function\" == typeof Symbol ? Symbol : {}, i = o.iterator || \"@@iterator\", a = o.asyncIterator || \"@@asyncIterator\", u = o.toStringTag || \"@@toStringTag\"; function c(t, r, e, n) { return Object.defineProperty(t, r, { value: e, enumerable: !n, configurable: !n, writable: !n }); } try { c({}, \"\"); } catch (t) { c = function c(t, r, e) { return t[r] = e; }; } function h(r, e, n, o) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype); return c(a, \"_invoke\", function (r, e, n) { var o = 1; return function (i, a) { if (3 === o) throw Error(\"Generator is already running\"); if (4 === o) { if (\"throw\" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var u = n.delegate; if (u) { var c = d(u, n); if (c) { if (c === f) continue; return c; } } if (\"next\" === n.method) n.sent = n._sent = n.arg;else if (\"throw\" === n.method) { if (1 === o) throw o = 4, n.arg; n.dispatchException(n.arg); } else \"return\" === n.method && n.abrupt(\"return\", n.arg); o = 3; var h = s(r, e, n); if (\"normal\" === h.type) { if (o = n.done ? 4 : 2, h.arg === f) continue; return { value: h.arg, done: n.done }; } \"throw\" === h.type && (o = 4, n.method = \"throw\", n.arg = h.arg); } }; }(r, n, new Context(o || [])), !0), a; } function s(t, r, e) { try { return { type: \"normal\", arg: t.call(r, e) }; } catch (t) { return { type: \"throw\", arg: t }; } } r.wrap = h; var f = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var l = {}; c(l, i, function () { return this; }); var p = Object.getPrototypeOf, y = p && p(p(x([]))); y && y !== e && n.call(y, i) && (l = y); var v = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(l); function g(t) { [\"next\", \"throw\", \"return\"].forEach(function (r) { c(t, r, function (t) { return this._invoke(r, t); }); }); } function AsyncIterator(t, r) { function e(o, i, a, u) { var c = s(t[o], t, i); if (\"throw\" !== c.type) { var h = c.arg, f = h.value; return f && \"object\" == _typeof(f) && n.call(f, \"__await\") ? r.resolve(f.__await).then(function (t) { e(\"next\", t, a, u); }, function (t) { e(\"throw\", t, a, u); }) : r.resolve(f).then(function (t) { h.value = t, a(h); }, function (t) { return e(\"throw\", t, a, u); }); } u(c.arg); } var o; c(this, \"_invoke\", function (t, n) { function i() { return new r(function (r, o) { e(t, n, r, o); }); } return o = o ? o.then(i, i) : i(); }, !0); } function d(r, e) { var n = e.method, o = r.i[n]; if (o === t) return e.delegate = null, \"throw\" === n && r.i[\"return\"] && (e.method = \"return\", e.arg = t, d(r, e), \"throw\" === e.method) || \"return\" !== n && (e.method = \"throw\", e.arg = new TypeError(\"The iterator does not provide a '\" + n + \"' method\")), f; var i = s(o, r.i, e.arg); if (\"throw\" === i.type) return e.method = \"throw\", e.arg = i.arg, e.delegate = null, f; var a = i.arg; return a ? a.done ? (e[r.r] = a.value, e.next = r.n, \"return\" !== e.method && (e.method = \"next\", e.arg = t), e.delegate = null, f) : a : (e.method = \"throw\", e.arg = new TypeError(\"iterator result is not an object\"), e.delegate = null, f); } function w(t) { this.tryEntries.push(t); } function m(r) { var e = r[4] || {}; e.type = \"normal\", e.arg = t, r[4] = e; } function Context(t) { this.tryEntries = [[-1]], t.forEach(w, this), this.reset(!0); } function x(r) { if (null != r) { var e = r[i]; if (e) return e.call(r); if (\"function\" == typeof r.next) return r; if (!isNaN(r.length)) { var o = -1, a = function e() { for (; ++o < r.length;) if (n.call(r, o)) return e.value = r[o], e.done = !1, e; return e.value = t, e.done = !0, e; }; return a.next = a; } } throw new TypeError(_typeof(r) + \" is not iterable\"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, c(v, \"constructor\", GeneratorFunctionPrototype), c(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction), GeneratorFunction.displayName = c(GeneratorFunctionPrototype, u, \"GeneratorFunction\"), r.isGeneratorFunction = function (t) { var r = \"function\" == typeof t && t.constructor; return !!r && (r === GeneratorFunction || \"GeneratorFunction\" === (r.displayName || r.name)); }, r.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, c(t, u, \"GeneratorFunction\")), t.prototype = Object.create(v), t; }, r.awrap = function (t) { return { __await: t }; }, g(AsyncIterator.prototype), c(AsyncIterator.prototype, a, function () { return this; }), r.AsyncIterator = AsyncIterator, r.async = function (t, e, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(h(t, e, n, o), i); return r.isGeneratorFunction(e) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, g(v), c(v, u, \"Generator\"), c(v, i, function () { return this; }), c(v, \"toString\", function () { return \"[object Generator]\"; }), r.keys = function (t) { var r = Object(t), e = []; for (var n in r) e.unshift(n); return function t() { for (; e.length;) if ((n = e.pop()) in r) return t.value = n, t.done = !1, t; return t.done = !0, t; }; }, r.values = x, Context.prototype = { constructor: Context, reset: function reset(r) { if (this.prev = this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = \"next\", this.arg = t, this.tryEntries.forEach(m), !r) for (var e in this) \"t\" === e.charAt(0) && n.call(this, e) && !isNaN(+e.slice(1)) && (this[e] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0][4]; if (\"throw\" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(r) { if (this.done) throw r; var e = this; function n(t) { a.type = \"throw\", a.arg = r, e.next = t; } for (var o = e.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i[4], u = this.prev, c = i[1], h = i[2]; if (-1 === i[0]) return n(\"end\"), !1; if (!c && !h) throw Error(\"try statement without catch or finally\"); if (null != i[0] && i[0] <= u) { if (u < c) return this.method = \"next\", this.arg = t, n(c), !0; if (u < h) return n(h), !1; } } }, abrupt: function abrupt(t, r) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var n = this.tryEntries[e]; if (n[0] > -1 && n[0] <= this.prev && this.prev < n[2]) { var o = n; break; } } o && (\"break\" === t || \"continue\" === t) && o[0] <= r && r <= o[2] && (o = null); var i = o ? o[4] : {}; return i.type = t, i.arg = r, o ? (this.method = \"next\", this.next = o[2], f) : this.complete(i); }, complete: function complete(t, r) { if (\"throw\" === t.type) throw t.arg; return \"break\" === t.type || \"continue\" === t.type ? this.next = t.arg : \"return\" === t.type ? (this.rval = this.arg = t.arg, this.method = \"return\", this.next = \"end\") : \"normal\" === t.type && r && (this.next = r), f; }, finish: function finish(t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[2] === t) return this.complete(e[4], e[3]), m(e), f; } }, \"catch\": function _catch(t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[0] === t) { var n = e[4]; if (\"throw\" === n.type) { var o = n.arg; m(e); } return o; } } throw Error(\"illegal catch attempt\"); }, delegateYield: function delegateYield(r, e, n) { return this.delegate = { i: x(r), r: e, n: n }, \"next\" === this.method && (this.arg = t), f; } }, r; }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"next\", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"throw\", n); } _next(void 0); }); }; }\npos.controller(\"DownPaymentCertificateCtrl\", function ($scope, giftCertificate, notification, $translate, receipt, downpayOrderService) {\n  \"use strict\";\n\n  var i18nProperAmount;\n  var i18nInvalidBooking;\n  $translate([\"input/enter_amount\", \"toast/proper amount\", \"toast/invalidBooking\"]).then(function (translations) {\n    i18nProperAmount = translations[\"toast/proper amount\"];\n    i18nInvalidBooking = translations[\"toast/invalidBooking\"];\n  });\n  $scope.$watch(\"price\", function (price) {\n    if (!price) {\n      $scope.giftNo = giftCertificate.generateGiftCertificate(true);\n      return;\n    }\n    $scope.changeCertificateValue(\"\" + price);\n  });\n  $scope.changeCertificateValue = function (price) {\n    price = new Decimal(price).toFixed(2);\n    $scope.displayValue = price;\n    $scope.giftNo = giftCertificate.generateGiftCertificate(true);\n  };\n  $scope.addToReceipt = /*#__PURE__*/function () {\n    var _ref = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee(price) {\n      var totalValue, value;\n      return _regeneratorRuntime().wrap(function _callee$(_context) {\n        while (1) switch (_context.prev = _context.next) {\n          case 0:\n            price = new Decimal(price);\n            if (!(price.isNaN() || price.isZero())) {\n              _context.next = 4;\n              break;\n            }\n            notification.pop(\"info\", i18nProperAmount);\n            return _context.abrupt(\"return\");\n          case 4:\n            totalValue = parseFloat(receipt.getTotalWithoutDownpayment());\n            value = parseFloat(price);\n            if (!(value > totalValue)) {\n              _context.next = 9;\n              break;\n            }\n            notification.pop(\"info\", i18nProperAmount);\n            return _context.abrupt(\"return\");\n          case 9:\n            receipt.addDownPaymentNote(price, giftCertificate.generateGiftCertificate());\n            _context.next = 12;\n            return downpayOrderService.book();\n          case 12:\n          case \"end\":\n            return _context.stop();\n        }\n      }, _callee);\n    }));\n    return function (_x) {\n      return _ref.apply(this, arguments);\n    };\n  }();\n});\n","\"use strict\";\n\npos.controller(\"DownPaymentShipmentAddressController\", function ($scope, $state, downpayOrderService) {\n  \"use strict\";\n\n  var selectedIndex = -1;\n  $scope.addresses = getShippingAddresses();\n  $scope.selectShippingAddress = function (index, address) {\n    if (selectedIndex === index) {\n      selectedIndex = -1;\n      return;\n    }\n    selectedIndex = index;\n    downpayOrderService.setShippingAddress(address);\n    downpayOrderService.saveShipping();\n    $state.go(\"root.split.pos\");\n  };\n  $scope.createAddress = function () {\n    $state.go(\"root.split.downpayment-newaddress\", {\n      isBillingAddress: false\n    });\n  };\n  function getShippingAddresses() {\n    var addresses = downpayOrderService.getSelectedCustomer().addresses;\n    var shippingAddresses = [];\n    if (addresses) {\n      shippingAddresses = addresses.filter(function (address) {\n        return address.isPrimaryShipping === true;\n      });\n    }\n    return shippingAddresses;\n  }\n});\n","\"use strict\";\n\npos.controller(\"DownPaymentShipmentStoreController\", function ($scope, $state, downpayOrderService) {\n  \"use strict\";\n\n  $scope.stores = [];\n  downpayOrderService.getStores().then(function (data) {\n    return $scope.stores = data;\n  });\n  var selectedIndex = -1;\n  $scope.selectStore = function (index, store) {\n    if (selectedIndex === index) {\n      selectedIndex = -1;\n      return;\n    }\n    selectedIndex = index;\n    downpayOrderService.setShippingStore(store);\n    downpayOrderService.saveShipping();\n    $state.go(\"root.split.pos\");\n  };\n});\n","\"use strict\";\n\npos.controller(\"DownPaymentShipmentController\", function ($scope, $translate, $state, downpayOrderService) {\n  \"use strict\";\n\n  downpayOrderService.initShipment(true).then(function (shipping) {\n    $scope.shipment = shipping;\n  });\n  var i18nShipmentSaved;\n  $translate([\"toast/shipment/saved\"]).then(function (translations) {\n    i18nShipmentSaved = translations[\"toast/shipment/saved\"];\n  });\n  $scope.updateFee = function () {\n    if ($scope.shipment.homeDelivery) {\n      $scope.shipment.store = null;\n    } else {\n      $scope.shipment.address = null;\n    }\n    downpayOrderService.getShippingFee().then(function (fee) {\n      $scope.shipment.fee = fee;\n    });\n  };\n  $scope.selectAddress = function () {\n    if ($scope.shipment.homeDelivery) {\n      $state.go(\"root.split.downpayment-shipmentaddress\");\n    } else {\n      $state.go(\"root.split.downpayment-shipmentstore\");\n    }\n  };\n});\n","\"use strict\";\n\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _regeneratorRuntime() { \"use strict\"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return r; }; var t, r = {}, e = Object.prototype, n = e.hasOwnProperty, o = \"function\" == typeof Symbol ? Symbol : {}, i = o.iterator || \"@@iterator\", a = o.asyncIterator || \"@@asyncIterator\", u = o.toStringTag || \"@@toStringTag\"; function c(t, r, e, n) { return Object.defineProperty(t, r, { value: e, enumerable: !n, configurable: !n, writable: !n }); } try { c({}, \"\"); } catch (t) { c = function c(t, r, e) { return t[r] = e; }; } function h(r, e, n, o) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype); return c(a, \"_invoke\", function (r, e, n) { var o = 1; return function (i, a) { if (3 === o) throw Error(\"Generator is already running\"); if (4 === o) { if (\"throw\" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var u = n.delegate; if (u) { var c = d(u, n); if (c) { if (c === f) continue; return c; } } if (\"next\" === n.method) n.sent = n._sent = n.arg;else if (\"throw\" === n.method) { if (1 === o) throw o = 4, n.arg; n.dispatchException(n.arg); } else \"return\" === n.method && n.abrupt(\"return\", n.arg); o = 3; var h = s(r, e, n); if (\"normal\" === h.type) { if (o = n.done ? 4 : 2, h.arg === f) continue; return { value: h.arg, done: n.done }; } \"throw\" === h.type && (o = 4, n.method = \"throw\", n.arg = h.arg); } }; }(r, n, new Context(o || [])), !0), a; } function s(t, r, e) { try { return { type: \"normal\", arg: t.call(r, e) }; } catch (t) { return { type: \"throw\", arg: t }; } } r.wrap = h; var f = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var l = {}; c(l, i, function () { return this; }); var p = Object.getPrototypeOf, y = p && p(p(x([]))); y && y !== e && n.call(y, i) && (l = y); var v = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(l); function g(t) { [\"next\", \"throw\", \"return\"].forEach(function (r) { c(t, r, function (t) { return this._invoke(r, t); }); }); } function AsyncIterator(t, r) { function e(o, i, a, u) { var c = s(t[o], t, i); if (\"throw\" !== c.type) { var h = c.arg, f = h.value; return f && \"object\" == _typeof(f) && n.call(f, \"__await\") ? r.resolve(f.__await).then(function (t) { e(\"next\", t, a, u); }, function (t) { e(\"throw\", t, a, u); }) : r.resolve(f).then(function (t) { h.value = t, a(h); }, function (t) { return e(\"throw\", t, a, u); }); } u(c.arg); } var o; c(this, \"_invoke\", function (t, n) { function i() { return new r(function (r, o) { e(t, n, r, o); }); } return o = o ? o.then(i, i) : i(); }, !0); } function d(r, e) { var n = e.method, o = r.i[n]; if (o === t) return e.delegate = null, \"throw\" === n && r.i[\"return\"] && (e.method = \"return\", e.arg = t, d(r, e), \"throw\" === e.method) || \"return\" !== n && (e.method = \"throw\", e.arg = new TypeError(\"The iterator does not provide a '\" + n + \"' method\")), f; var i = s(o, r.i, e.arg); if (\"throw\" === i.type) return e.method = \"throw\", e.arg = i.arg, e.delegate = null, f; var a = i.arg; return a ? a.done ? (e[r.r] = a.value, e.next = r.n, \"return\" !== e.method && (e.method = \"next\", e.arg = t), e.delegate = null, f) : a : (e.method = \"throw\", e.arg = new TypeError(\"iterator result is not an object\"), e.delegate = null, f); } function w(t) { this.tryEntries.push(t); } function m(r) { var e = r[4] || {}; e.type = \"normal\", e.arg = t, r[4] = e; } function Context(t) { this.tryEntries = [[-1]], t.forEach(w, this), this.reset(!0); } function x(r) { if (null != r) { var e = r[i]; if (e) return e.call(r); if (\"function\" == typeof r.next) return r; if (!isNaN(r.length)) { var o = -1, a = function e() { for (; ++o < r.length;) if (n.call(r, o)) return e.value = r[o], e.done = !1, e; return e.value = t, e.done = !0, e; }; return a.next = a; } } throw new TypeError(_typeof(r) + \" is not iterable\"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, c(v, \"constructor\", GeneratorFunctionPrototype), c(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction), GeneratorFunction.displayName = c(GeneratorFunctionPrototype, u, \"GeneratorFunction\"), r.isGeneratorFunction = function (t) { var r = \"function\" == typeof t && t.constructor; return !!r && (r === GeneratorFunction || \"GeneratorFunction\" === (r.displayName || r.name)); }, r.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, c(t, u, \"GeneratorFunction\")), t.prototype = Object.create(v), t; }, r.awrap = function (t) { return { __await: t }; }, g(AsyncIterator.prototype), c(AsyncIterator.prototype, a, function () { return this; }), r.AsyncIterator = AsyncIterator, r.async = function (t, e, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(h(t, e, n, o), i); return r.isGeneratorFunction(e) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, g(v), c(v, u, \"Generator\"), c(v, i, function () { return this; }), c(v, \"toString\", function () { return \"[object Generator]\"; }), r.keys = function (t) { var r = Object(t), e = []; for (var n in r) e.unshift(n); return function t() { for (; e.length;) if ((n = e.pop()) in r) return t.value = n, t.done = !1, t; return t.done = !0, t; }; }, r.values = x, Context.prototype = { constructor: Context, reset: function reset(r) { if (this.prev = this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = \"next\", this.arg = t, this.tryEntries.forEach(m), !r) for (var e in this) \"t\" === e.charAt(0) && n.call(this, e) && !isNaN(+e.slice(1)) && (this[e] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0][4]; if (\"throw\" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(r) { if (this.done) throw r; var e = this; function n(t) { a.type = \"throw\", a.arg = r, e.next = t; } for (var o = e.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i[4], u = this.prev, c = i[1], h = i[2]; if (-1 === i[0]) return n(\"end\"), !1; if (!c && !h) throw Error(\"try statement without catch or finally\"); if (null != i[0] && i[0] <= u) { if (u < c) return this.method = \"next\", this.arg = t, n(c), !0; if (u < h) return n(h), !1; } } }, abrupt: function abrupt(t, r) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var n = this.tryEntries[e]; if (n[0] > -1 && n[0] <= this.prev && this.prev < n[2]) { var o = n; break; } } o && (\"break\" === t || \"continue\" === t) && o[0] <= r && r <= o[2] && (o = null); var i = o ? o[4] : {}; return i.type = t, i.arg = r, o ? (this.method = \"next\", this.next = o[2], f) : this.complete(i); }, complete: function complete(t, r) { if (\"throw\" === t.type) throw t.arg; return \"break\" === t.type || \"continue\" === t.type ? this.next = t.arg : \"return\" === t.type ? (this.rval = this.arg = t.arg, this.method = \"return\", this.next = \"end\") : \"normal\" === t.type && r && (this.next = r), f; }, finish: function finish(t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[2] === t) return this.complete(e[4], e[3]), m(e), f; } }, \"catch\": function _catch(t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[0] === t) { var n = e[4]; if (\"throw\" === n.type) { var o = n.arg; m(e); } return o; } } throw Error(\"illegal catch attempt\"); }, delegateYield: function delegateYield(r, e, n) { return this.delegate = { i: x(r), r: e, n: n }, \"next\" === this.method && (this.arg = t), f; } }, r; }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"next\", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"throw\", n); } _next(void 0); }); }; }\npos.controller(\"StockLookupController\", function ($scope, downpayItemService) {\n  \"use strict\";\n\n  init();\n  function init() {\n    return _init.apply(this, arguments);\n  }\n  function _init() {\n    _init = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee() {\n      return _regeneratorRuntime().wrap(function _callee$(_context) {\n        while (1) switch (_context.prev = _context.next) {\n          case 0:\n            $scope.article = downpayItemService.selectedArticle;\n            _context.next = 3;\n            return downpayItemService.getStockAllShops($scope.article);\n          case 3:\n            $scope.stock = _context.sent;\n          case 4:\n          case \"end\":\n            return _context.stop();\n        }\n      }, _callee);\n    }));\n    return _init.apply(this, arguments);\n  }\n});\n","\"use strict\";\n\npos.controller(\"ExpenseCtrl\", function ($scope, $log, $state, itemgroup, receipt, notification, $translate, keypadManager, $filter, sales, $timeout, inputValidationService) {\n  \"use strict\";\n\n  $scope.priceField = 0;\n  $scope.numberField = 1;\n  $scope.targetValues = [\"\", \"\"];\n  var i18nProperAmount;\n  var selectedItemLineIndex = 0;\n  $translate([\"button/itemgroup no/name\", \"input/enter_amount\", \"toast/proper amount\"]).then(function (translations) {\n    $scope.placeholder1 = translations[\"button/itemgroup no/name\"];\n    $scope.placeholder2 = translations[\"input/enter_amount\"];\n    i18nProperAmount = translations[\"toast/proper amount\"];\n  });\n  itemgroup.getExpenseGroups().then(function (response) {\n    $scope.itemgroup = response.data;\n    $scope.itemgroup = $filter(\"orderBy\")($scope.itemgroup, \"name\");\n  });\n  $scope.selectItemLine = function (index) {\n    selectedItemLineIndex = index;\n  };\n  $scope.selectedItemLineIndex = function () {\n    return selectedItemLineIndex;\n  };\n  $scope.reset = function () {\n    $scope.itemNo = \"\";\n    $scope.amount = \"\";\n  };\n  $scope.search = function (itemGroup) {\n    if (!$scope.itemNo || itemGroup.name.toLowerCase().indexOf($scope.itemNo.toLowerCase()) != -1 || itemGroup.no.toString().toLowerCase().indexOf($scope.itemNo.toLowerCase()) != -1) {\n      return true;\n    }\n    return false;\n  };\n  $scope.addToReceipt = function (price) {\n    try {\n      price = inputValidationService.convertToDecimal(price);\n      if (price.isNaN() || price.isZero() || !inputValidationService.validateAmount(price)) throw \"INVALID_AMOUNT\";\n    } catch (err) {\n      notification.pop(\"info\", i18nProperAmount);\n      return;\n    }\n    var filteredExpenses = $filter(\"filter\")($scope.itemgroup, $scope.itemNo);\n    receipt.addExpense(price * -1, filteredExpenses[selectedItemLineIndex].name, filteredExpenses[selectedItemLineIndex].no);\n    $state.go(\"root.split.pos\");\n  };\n  $scope.hideKeypad = function () {\n    keypadManager.hide(); //Hide Keypad\n  };\n});\n","\"use strict\";\n\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _regeneratorRuntime() { \"use strict\"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return r; }; var t, r = {}, e = Object.prototype, n = e.hasOwnProperty, o = \"function\" == typeof Symbol ? Symbol : {}, i = o.iterator || \"@@iterator\", a = o.asyncIterator || \"@@asyncIterator\", u = o.toStringTag || \"@@toStringTag\"; function c(t, r, e, n) { return Object.defineProperty(t, r, { value: e, enumerable: !n, configurable: !n, writable: !n }); } try { c({}, \"\"); } catch (t) { c = function c(t, r, e) { return t[r] = e; }; } function h(r, e, n, o) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype); return c(a, \"_invoke\", function (r, e, n) { var o = 1; return function (i, a) { if (3 === o) throw Error(\"Generator is already running\"); if (4 === o) { if (\"throw\" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var u = n.delegate; if (u) { var c = d(u, n); if (c) { if (c === f) continue; return c; } } if (\"next\" === n.method) n.sent = n._sent = n.arg;else if (\"throw\" === n.method) { if (1 === o) throw o = 4, n.arg; n.dispatchException(n.arg); } else \"return\" === n.method && n.abrupt(\"return\", n.arg); o = 3; var h = s(r, e, n); if (\"normal\" === h.type) { if (o = n.done ? 4 : 2, h.arg === f) continue; return { value: h.arg, done: n.done }; } \"throw\" === h.type && (o = 4, n.method = \"throw\", n.arg = h.arg); } }; }(r, n, new Context(o || [])), !0), a; } function s(t, r, e) { try { return { type: \"normal\", arg: t.call(r, e) }; } catch (t) { return { type: \"throw\", arg: t }; } } r.wrap = h; var f = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var l = {}; c(l, i, function () { return this; }); var p = Object.getPrototypeOf, y = p && p(p(x([]))); y && y !== e && n.call(y, i) && (l = y); var v = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(l); function g(t) { [\"next\", \"throw\", \"return\"].forEach(function (r) { c(t, r, function (t) { return this._invoke(r, t); }); }); } function AsyncIterator(t, r) { function e(o, i, a, u) { var c = s(t[o], t, i); if (\"throw\" !== c.type) { var h = c.arg, f = h.value; return f && \"object\" == _typeof(f) && n.call(f, \"__await\") ? r.resolve(f.__await).then(function (t) { e(\"next\", t, a, u); }, function (t) { e(\"throw\", t, a, u); }) : r.resolve(f).then(function (t) { h.value = t, a(h); }, function (t) { return e(\"throw\", t, a, u); }); } u(c.arg); } var o; c(this, \"_invoke\", function (t, n) { function i() { return new r(function (r, o) { e(t, n, r, o); }); } return o = o ? o.then(i, i) : i(); }, !0); } function d(r, e) { var n = e.method, o = r.i[n]; if (o === t) return e.delegate = null, \"throw\" === n && r.i[\"return\"] && (e.method = \"return\", e.arg = t, d(r, e), \"throw\" === e.method) || \"return\" !== n && (e.method = \"throw\", e.arg = new TypeError(\"The iterator does not provide a '\" + n + \"' method\")), f; var i = s(o, r.i, e.arg); if (\"throw\" === i.type) return e.method = \"throw\", e.arg = i.arg, e.delegate = null, f; var a = i.arg; return a ? a.done ? (e[r.r] = a.value, e.next = r.n, \"return\" !== e.method && (e.method = \"next\", e.arg = t), e.delegate = null, f) : a : (e.method = \"throw\", e.arg = new TypeError(\"iterator result is not an object\"), e.delegate = null, f); } function w(t) { this.tryEntries.push(t); } function m(r) { var e = r[4] || {}; e.type = \"normal\", e.arg = t, r[4] = e; } function Context(t) { this.tryEntries = [[-1]], t.forEach(w, this), this.reset(!0); } function x(r) { if (null != r) { var e = r[i]; if (e) return e.call(r); if (\"function\" == typeof r.next) return r; if (!isNaN(r.length)) { var o = -1, a = function e() { for (; ++o < r.length;) if (n.call(r, o)) return e.value = r[o], e.done = !1, e; return e.value = t, e.done = !0, e; }; return a.next = a; } } throw new TypeError(_typeof(r) + \" is not iterable\"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, c(v, \"constructor\", GeneratorFunctionPrototype), c(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction), GeneratorFunction.displayName = c(GeneratorFunctionPrototype, u, \"GeneratorFunction\"), r.isGeneratorFunction = function (t) { var r = \"function\" == typeof t && t.constructor; return !!r && (r === GeneratorFunction || \"GeneratorFunction\" === (r.displayName || r.name)); }, r.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, c(t, u, \"GeneratorFunction\")), t.prototype = Object.create(v), t; }, r.awrap = function (t) { return { __await: t }; }, g(AsyncIterator.prototype), c(AsyncIterator.prototype, a, function () { return this; }), r.AsyncIterator = AsyncIterator, r.async = function (t, e, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(h(t, e, n, o), i); return r.isGeneratorFunction(e) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, g(v), c(v, u, \"Generator\"), c(v, i, function () { return this; }), c(v, \"toString\", function () { return \"[object Generator]\"; }), r.keys = function (t) { var r = Object(t), e = []; for (var n in r) e.unshift(n); return function t() { for (; e.length;) if ((n = e.pop()) in r) return t.value = n, t.done = !1, t; return t.done = !0, t; }; }, r.values = x, Context.prototype = { constructor: Context, reset: function reset(r) { if (this.prev = this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = \"next\", this.arg = t, this.tryEntries.forEach(m), !r) for (var e in this) \"t\" === e.charAt(0) && n.call(this, e) && !isNaN(+e.slice(1)) && (this[e] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0][4]; if (\"throw\" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(r) { if (this.done) throw r; var e = this; function n(t) { a.type = \"throw\", a.arg = r, e.next = t; } for (var o = e.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i[4], u = this.prev, c = i[1], h = i[2]; if (-1 === i[0]) return n(\"end\"), !1; if (!c && !h) throw Error(\"try statement without catch or finally\"); if (null != i[0] && i[0] <= u) { if (u < c) return this.method = \"next\", this.arg = t, n(c), !0; if (u < h) return n(h), !1; } } }, abrupt: function abrupt(t, r) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var n = this.tryEntries[e]; if (n[0] > -1 && n[0] <= this.prev && this.prev < n[2]) { var o = n; break; } } o && (\"break\" === t || \"continue\" === t) && o[0] <= r && r <= o[2] && (o = null); var i = o ? o[4] : {}; return i.type = t, i.arg = r, o ? (this.method = \"next\", this.next = o[2], f) : this.complete(i); }, complete: function complete(t, r) { if (\"throw\" === t.type) throw t.arg; return \"break\" === t.type || \"continue\" === t.type ? this.next = t.arg : \"return\" === t.type ? (this.rval = this.arg = t.arg, this.method = \"return\", this.next = \"end\") : \"normal\" === t.type && r && (this.next = r), f; }, finish: function finish(t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[2] === t) return this.complete(e[4], e[3]), m(e), f; } }, \"catch\": function _catch(t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[0] === t) { var n = e[4]; if (\"throw\" === n.type) { var o = n.arg; m(e); } return o; } } throw Error(\"illegal catch attempt\"); }, delegateYield: function delegateYield(r, e, n) { return this.delegate = { i: x(r), r: e, n: n }, \"next\" === this.method && (this.arg = t), f; } }, r; }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"next\", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"throw\", n); } _next(void 0); }); }; }\n//#region Eager loading\npos.run(function (posConfig, $injector, $log, eventBus) {\n  loadConfig();\n  function loadConfig() {\n    posConfig.whenReady().then(function () {\n      var nfShopFeature = posConfig.getShopFeatures().norwegianFiscalisation;\n      if (nfShopFeature && nfShopFeature.values.active) {\n        $log.debug(\"Eager loading Norwegian Fiscalisation Service.\");\n        return $injector.get(\"norwegianFiscalisation\");\n      }\n    });\n  }\n  eventBus.subscribe(eventBus.events.pos.newConfig, null, loadConfig);\n});\n//#endregion\n\npos.service(\"norwegianFiscalisation\", [\"eventBus\", \"$log\", \"posConfig\", \"receipt\", \"saleRepository\", \"cashStatementRepository\", function (eventBus, $log, posConfig, receipt, saleRepository, cashStatementRepository) {\n  var config = null;\n  posConfig.whenReady().then(function () {\n    init();\n    loadConfig();\n  });\n  function init() {\n    eventBus.subscribe(eventBus.events.pos.newConfig, null, function () {\n      return loadConfig();\n    });\n    eventBus.subscribe(eventBus.events.sale.reprint, null, function (ev, receipt) {\n      return onReprint(ev, receipt);\n    });\n    eventBus.subscribe(eventBus.events.sale.reprintOffline, null, function (ev) {\n      return onAttemptReprintOffline(ev);\n    });\n    eventBus.subscribe(eventBus.events.pos.showingQty, null, function (ev) {\n      return onShowQtyAdj(ev);\n    });\n    eventBus.subscribe(eventBus.events.sale.itemDeleted, null, function (ev, item) {\n      return onLineDelete(item);\n    });\n    eventBus.subscribe(eventBus.events.sale.cancelled, null, function (ev, receipt) {\n      return onSaleCancelled(receipt);\n    });\n    eventBus.subscribeAsync(eventBus.events.pos.cashStatementStart, null, function () {\n      return canDoCashStatement();\n    });\n    eventBus.subscribeAsync(eventBus.events.pos.login, null, function () {\n      return drawerOpen();\n    });\n  }\n  function loadConfig() {\n    var nf = posConfig.getShopFeatures().norwegianFiscalisation;\n    var newConfig = nf && nf.values ? nf.values : null;\n    if (config && config.active != newConfig.active) {\n      init();\n    }\n    config = newConfig;\n  }\n  function onReprint(ev, receipt) {\n    if (config.active && receipt.reprinted >= config.reprintsAllowed) {\n      $log.debug(\"Prevented reprint due to norwegian reprint policy.\");\n      ev.preventDefault();\n    } else {\n      $log.debug(\"Allowing reprint\");\n    }\n  }\n  function onAttemptReprintOffline(ev) {\n    if (config.active) {\n      $log.debug(\"Prevented offline reprint due to norwegian reprint policy.\");\n      ev.preventDefault();\n    }\n  }\n  function onShowQtyAdj(ev) {\n    if (config.active) {\n      $log.debug(\"Preventing QTY adjustment due to norwegian fiscalization.\");\n      ev.preventDefault();\n    }\n  }\n  function onSaleCancelled(receipt) {\n    $log.debug(\"Sending information of cancelled receipt to Connector --> \", receipt);\n    var total = receipt.items.reduce(function (pre, cur) {\n      return pre.plus(cur.effectiveSalesPrice.times(cur.quantity));\n    }, new Decimal(0));\n    cashStatementRepository.device().insertCancelledSale(total);\n    receipt.items.forEach(onLineDelete);\n  }\n  function onLineDelete(item) {\n    $log.debug(\"Sending information of line removal to Connector --> \", item);\n    cashStatementRepository.device().insertDeletedLine(item.itemGroupName, item.salesPrice);\n  }\n  function canDoCashStatement() {\n    return _canDoCashStatement.apply(this, arguments);\n  }\n  function _canDoCashStatement() {\n    _canDoCashStatement = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee() {\n      var parkedReceiptsResponse;\n      return _regeneratorRuntime().wrap(function _callee$(_context) {\n        while (1) switch (_context.prev = _context.next) {\n          case 0:\n            _context.next = 2;\n            return receipt.getParkedReceipts();\n          case 2:\n            parkedReceiptsResponse = _context.sent;\n            return _context.abrupt(\"return\", parkedReceiptsResponse.data.length == 0);\n          case 4:\n          case \"end\":\n            return _context.stop();\n        }\n      }, _callee);\n    }));\n    return _canDoCashStatement.apply(this, arguments);\n  }\n  function drawerOpen() {\n    return _drawerOpen.apply(this, arguments);\n  }\n  function _drawerOpen() {\n    _drawerOpen = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee2() {\n      var result;\n      return _regeneratorRuntime().wrap(function _callee2$(_context2) {\n        while (1) switch (_context2.prev = _context2.next) {\n          case 0:\n            _context2.next = 2;\n            return saleRepository.device().isDrawerOpen();\n          case 2:\n            result = _context2.sent;\n            $log.debug(\"Norwegian Fiscalisation Open Drawer Check: \" + result);\n            return _context2.abrupt(\"return\", !result);\n          case 5:\n          case \"end\":\n            return _context2.stop();\n        }\n      }, _callee2);\n    }));\n    return _drawerOpen.apply(this, arguments);\n  }\n  return {};\n}]);\n","\"use strict\";\n\n//#region Eager loading\npos.run(function (posConfig, $injector, $log, eventBus) {\n  loadConfig();\n  function loadConfig() {\n    posConfig.whenReady().then(function () {\n      var sfShopFeature = posConfig.getShopFeatures().swedishFiscalisation;\n      if (sfShopFeature && sfShopFeature.values.active) {\n        $log.debug(\"Eager loading Swedish Fiscalisation Service.\");\n        return $injector.get(\"swedishFiscalisation\");\n      }\n    });\n  }\n  eventBus.subscribe(eventBus.events.pos.newConfig, null, loadConfig);\n});\n//#endregion\n\npos.service(\"swedishFiscalisation\", [\"eventBus\", \"$log\", \"posConfig\", function (eventBus, $log, posConfig) {\n  var config = null;\n  posConfig.whenReady().then(function () {\n    init();\n    loadConfig();\n  });\n  function init() {\n    eventBus.subscribe(eventBus.events.pos.newConfig, null, function () {\n      return loadConfig();\n    });\n    eventBus.subscribe(eventBus.events.sale.reprint, null, function (ev, receipt) {\n      return onReprint(ev, receipt);\n    });\n    eventBus.subscribe(eventBus.events.sale.reprintOffline, null, function (ev) {\n      return onAttemptReprintOffline(ev);\n    });\n  }\n  function loadConfig() {\n    var sf = posConfig.getShopFeatures().swedishFiscalisation;\n    var newConfig = sf && sf.values ? sf.values : null;\n    if (config && config.active != newConfig.active) {\n      init();\n    }\n    config = newConfig;\n  }\n  function onReprint(ev, receipt) {\n    if (config.active && receipt.reprinted >= config.reprintsAllowed) {\n      $log.debug(\"Prevented reprint due to Swedish reprint policy.\");\n      ev.preventDefault();\n    } else {\n      $log.debug(\"Allowing reprint\");\n    }\n  }\n  function onAttemptReprintOffline(ev) {\n    if (config.active) {\n      $log.debug(\"Prevented offline reprint due to Swedish reprint policy.\");\n      ev.preventDefault();\n    }\n  }\n  return {};\n}]);\n","\"use strict\";\n\npos.controller(\"GiftCertificateCtrl\", function ($scope, giftCertificate, $state, notification, $translate, receipt, keypadManager, $timeout) {\n  \"use strict\";\n\n  var i18nProperAmount;\n  $translate([\"input/enter_amount\", \"toast/max 4 digit\", \"toast/proper amount\"]).then(function (translations) {\n    $scope.placeHolder = $translate.instant(\"input/enter_amount\");\n    i18nProperAmount = translations[\"toast/proper amount\"];\n  });\n  $scope.$watch(\"price\", function (price) {\n    if (!price) {\n      $scope.giftNo = giftCertificate.generateGiftCertificate(true);\n      return;\n    }\n    $scope.update(\"\" + price);\n  });\n  $scope.update = function (price) {\n    price = new Decimal(price);\n    var dotIndex = price.toString();\n    dotIndex = dotIndex.indexOf(\".\");\n    if (dotIndex != -1) {\n      //Dot found\n      var fracUnit = price.toString().substr(dotIndex + 1);\n      if (fracUnit.length > 2) {\n        $scope.price = Number(price.toString().substring(0, price.toString().length - 1));\n        return;\n      }\n    }\n    $scope.displayValue = price.toNumber();\n    $scope.giftNo = giftCertificate.generateGiftCertificate(true);\n  };\n  $scope.addToReceipt = function (price) {\n    price = new Decimal(price);\n    if (price.isNaN() || price.isZero()) {\n      notification.pop(\"info\", i18nProperAmount);\n      return;\n    }\n    receipt.addGiftCertificate(price, giftCertificate.generateGiftCertificate());\n    $state.go(\"root.split.pos\");\n  };\n  $scope.reset = function () {\n    $scope.price = \"\";\n  };\n});\n","\"use strict\";\n\npos.factory(\"giftCertificate\", function (posStorage, posConfig, voucherRepository, fluctuatingPropertiesHelper) {\n  \"use strict\";\n\n  var giftCertificate = {};\n  var seqKey = \"sequenceNo\";\n  var seqDateKey = \"sequenceNoDate\";\n  var tenantIdKey = \"tenantId\";\n  function shopId() {\n    var padLength = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 6;\n    return pad(posConfig.shopId, padLength);\n  }\n  function getPosId() {\n    return pad(posConfig.posId, 3);\n  }\n  function incSeqNo() {\n    posStorage.set(seqKey, getSeqNo() + 1);\n    posStorage.set(seqDateKey, new Date());\n  }\n  function resetSeqNo() {\n    posStorage.set(seqKey, 1);\n    posStorage.set(seqDateKey, new Date());\n  }\n  function getSeqNo() {\n    var today = new Date();\n    var usedDate = new Date(posStorage.get(seqDateKey)) || today;\n    if (usedDate.getDate() !== today.getDate()) resetSeqNo();\n    return Number(posStorage.get(seqKey));\n  }\n  function getTenantId() {\n    return pad(posStorage.get(tenantIdKey), 5);\n  }\n  function getSeqNoString() {\n    return pad(getSeqNo(), 3);\n  }\n  function getDate() {\n    var today = new Date();\n    var dd = pad(today.getDate(), 2);\n    var mm = pad(today.getMonth() + 1, 2);\n    var yy = today.getFullYear() % 100;\n    return dd + mm + yy;\n  }\n  function pad(value, width, padding) {\n    padding = padding || \"0\";\n    value = value + \"\";\n    return value.length >= width ? value : new Array(width - value.length + 1).join(padding) + value;\n  }\n\n  // the giftno should have a even number of characters otherwise it cannot be printed ITF - Interleave 2 or 5\n  function generateGiftNo(type, addPadding) {\n    var giftNo;\n    var posId = getPosId();\n    if (addPadding) {\n      posId = pad(posId, posId.length + 1);\n    }\n    var extVouchersFeature = posConfig.getShopFeatures().externalVouchers;\n    if (extVouchersFeature) {\n      if (extVouchersFeature.values.enabled && extVouchersFeature.values.provider.toLowerCase() == \"shopify\") giftNo = [type, shopId(5), getDate(), posId, getSeqNoString()].join(\"\");\n    }\n    if (!giftNo) giftNo = [type, getTenantId(), shopId(), getDate(), posId, getSeqNoString()].join(\"\");\n    if (giftNo.length % 2 == 1) giftNo = generateGiftNo(type, true);\n    return giftNo;\n  }\n  giftCertificate.generateGiftCertificate = function (preview) {\n    var giftCert = generateGiftNo(1);\n    if (!preview) incSeqNo();\n    return giftCert;\n  };\n  giftCertificate.generateCreditVoucher = function (preview) {\n    var giftCert = generateGiftNo(2);\n    if (!preview) incSeqNo();\n    return giftCert;\n  };\n  giftCertificate.lastVoucherNoReceived = function (lastVoucher) {\n    var seqNoFromLastVoucher = +lastVoucher.substr(lastVoucher.length - 3);\n    while (seqNoFromLastVoucher >= getSeqNo()) {\n      incSeqNo();\n    }\n  };\n  giftCertificate.verifyGiftCertificate = function (giftCertificateNumber) {\n    return voucherRepository.api.verifyGiftCertificate(giftCertificateNumber);\n  };\n  giftCertificate.setDateSpecificExpiry = function (item, receiptDate) {\n    var isGiftCertificate = giftCertificate.isGiftCertificate(item.voucherNumber);\n    var expiryInDays;\n    if (isGiftCertificate && posConfig.getGiftCertificateExpiryInDays()) {\n      expiryInDays = posConfig.getGiftCertificateExpiryInDays();\n    } else if (!isGiftCertificate && posConfig.getCreditnoteExpiryInDays()) {\n      expiryInDays = posConfig.getCreditnoteExpiryInDays();\n    }\n    if (expiryInDays) {\n      var actualDate = moment.utc(receiptDate, \"YYYY-MM-DD\").startOf(\"day\").add(expiryInDays + 1, \"days\").toJSON();\n      fluctuatingPropertiesHelper.addKeyValue(\"expirationDate\", actualDate, item);\n    }\n  };\n  giftCertificate.isExpired = function (giftcertificate) {\n    if (giftcertificate.expirationDate && new Date(giftcertificate.expirationDate).toISOString() < new Date(Date.now()).toISOString()) {\n      return true;\n    }\n    return false;\n  };\n  giftCertificate.isGiftCertificate = function (vouchernumber) {\n    return vouchernumber.startsWith(\"1\");\n  };\n  return giftCertificate;\n});\n","\"use strict\";\n\npos.factory(\"infrasecRepository\", function (backend, posConfig) {\n  var repository = {};\n  repository.api = {\n    signReceipt: function signReceipt(receipt, registerId, organizationNumber, storePayload, copy) {\n      var query = \"\";\n      if (storePayload) query += (query === \"\" ? \"?\" : \"&\") + \"storePayload=\" + storePayload;\n      return backend.api.post(\"api/infrasec\" + query, {\n        items: receipt.items,\n        receiptId: receipt.receiptId,\n        registerId: registerId,\n        organizationNumber: organizationNumber,\n        isCopy: copy,\n        date: receipt.date,\n        shopId: posConfig.shopId,\n        posId: posConfig.posId\n      });\n    },\n    registerStatus: function registerStatus(registerId, organizationNumber, storePayload) {\n      var query = \"\";\n      if (storePayload) query += (query === \"\" ? \"?\" : \"&\") + \"storePayload=\" + storePayload;\n      return backend.api.post(\"api/Infrasec/registerStatus\" + query, {\n        registerId: registerId,\n        organizationNumber: organizationNumber\n      });\n    }\n  };\n  return repository;\n});\n","\"use strict\";\n\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _regeneratorRuntime() { \"use strict\"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return r; }; var t, r = {}, e = Object.prototype, n = e.hasOwnProperty, o = \"function\" == typeof Symbol ? Symbol : {}, i = o.iterator || \"@@iterator\", a = o.asyncIterator || \"@@asyncIterator\", u = o.toStringTag || \"@@toStringTag\"; function c(t, r, e, n) { return Object.defineProperty(t, r, { value: e, enumerable: !n, configurable: !n, writable: !n }); } try { c({}, \"\"); } catch (t) { c = function c(t, r, e) { return t[r] = e; }; } function h(r, e, n, o) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype); return c(a, \"_invoke\", function (r, e, n) { var o = 1; return function (i, a) { if (3 === o) throw Error(\"Generator is already running\"); if (4 === o) { if (\"throw\" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var u = n.delegate; if (u) { var c = d(u, n); if (c) { if (c === f) continue; return c; } } if (\"next\" === n.method) n.sent = n._sent = n.arg;else if (\"throw\" === n.method) { if (1 === o) throw o = 4, n.arg; n.dispatchException(n.arg); } else \"return\" === n.method && n.abrupt(\"return\", n.arg); o = 3; var h = s(r, e, n); if (\"normal\" === h.type) { if (o = n.done ? 4 : 2, h.arg === f) continue; return { value: h.arg, done: n.done }; } \"throw\" === h.type && (o = 4, n.method = \"throw\", n.arg = h.arg); } }; }(r, n, new Context(o || [])), !0), a; } function s(t, r, e) { try { return { type: \"normal\", arg: t.call(r, e) }; } catch (t) { return { type: \"throw\", arg: t }; } } r.wrap = h; var f = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var l = {}; c(l, i, function () { return this; }); var p = Object.getPrototypeOf, y = p && p(p(x([]))); y && y !== e && n.call(y, i) && (l = y); var v = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(l); function g(t) { [\"next\", \"throw\", \"return\"].forEach(function (r) { c(t, r, function (t) { return this._invoke(r, t); }); }); } function AsyncIterator(t, r) { function e(o, i, a, u) { var c = s(t[o], t, i); if (\"throw\" !== c.type) { var h = c.arg, f = h.value; return f && \"object\" == _typeof(f) && n.call(f, \"__await\") ? r.resolve(f.__await).then(function (t) { e(\"next\", t, a, u); }, function (t) { e(\"throw\", t, a, u); }) : r.resolve(f).then(function (t) { h.value = t, a(h); }, function (t) { return e(\"throw\", t, a, u); }); } u(c.arg); } var o; c(this, \"_invoke\", function (t, n) { function i() { return new r(function (r, o) { e(t, n, r, o); }); } return o = o ? o.then(i, i) : i(); }, !0); } function d(r, e) { var n = e.method, o = r.i[n]; if (o === t) return e.delegate = null, \"throw\" === n && r.i[\"return\"] && (e.method = \"return\", e.arg = t, d(r, e), \"throw\" === e.method) || \"return\" !== n && (e.method = \"throw\", e.arg = new TypeError(\"The iterator does not provide a '\" + n + \"' method\")), f; var i = s(o, r.i, e.arg); if (\"throw\" === i.type) return e.method = \"throw\", e.arg = i.arg, e.delegate = null, f; var a = i.arg; return a ? a.done ? (e[r.r] = a.value, e.next = r.n, \"return\" !== e.method && (e.method = \"next\", e.arg = t), e.delegate = null, f) : a : (e.method = \"throw\", e.arg = new TypeError(\"iterator result is not an object\"), e.delegate = null, f); } function w(t) { this.tryEntries.push(t); } function m(r) { var e = r[4] || {}; e.type = \"normal\", e.arg = t, r[4] = e; } function Context(t) { this.tryEntries = [[-1]], t.forEach(w, this), this.reset(!0); } function x(r) { if (null != r) { var e = r[i]; if (e) return e.call(r); if (\"function\" == typeof r.next) return r; if (!isNaN(r.length)) { var o = -1, a = function e() { for (; ++o < r.length;) if (n.call(r, o)) return e.value = r[o], e.done = !1, e; return e.value = t, e.done = !0, e; }; return a.next = a; } } throw new TypeError(_typeof(r) + \" is not iterable\"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, c(v, \"constructor\", GeneratorFunctionPrototype), c(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction), GeneratorFunction.displayName = c(GeneratorFunctionPrototype, u, \"GeneratorFunction\"), r.isGeneratorFunction = function (t) { var r = \"function\" == typeof t && t.constructor; return !!r && (r === GeneratorFunction || \"GeneratorFunction\" === (r.displayName || r.name)); }, r.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, c(t, u, \"GeneratorFunction\")), t.prototype = Object.create(v), t; }, r.awrap = function (t) { return { __await: t }; }, g(AsyncIterator.prototype), c(AsyncIterator.prototype, a, function () { return this; }), r.AsyncIterator = AsyncIterator, r.async = function (t, e, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(h(t, e, n, o), i); return r.isGeneratorFunction(e) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, g(v), c(v, u, \"Generator\"), c(v, i, function () { return this; }), c(v, \"toString\", function () { return \"[object Generator]\"; }), r.keys = function (t) { var r = Object(t), e = []; for (var n in r) e.unshift(n); return function t() { for (; e.length;) if ((n = e.pop()) in r) return t.value = n, t.done = !1, t; return t.done = !0, t; }; }, r.values = x, Context.prototype = { constructor: Context, reset: function reset(r) { if (this.prev = this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = \"next\", this.arg = t, this.tryEntries.forEach(m), !r) for (var e in this) \"t\" === e.charAt(0) && n.call(this, e) && !isNaN(+e.slice(1)) && (this[e] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0][4]; if (\"throw\" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(r) { if (this.done) throw r; var e = this; function n(t) { a.type = \"throw\", a.arg = r, e.next = t; } for (var o = e.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i[4], u = this.prev, c = i[1], h = i[2]; if (-1 === i[0]) return n(\"end\"), !1; if (!c && !h) throw Error(\"try statement without catch or finally\"); if (null != i[0] && i[0] <= u) { if (u < c) return this.method = \"next\", this.arg = t, n(c), !0; if (u < h) return n(h), !1; } } }, abrupt: function abrupt(t, r) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var n = this.tryEntries[e]; if (n[0] > -1 && n[0] <= this.prev && this.prev < n[2]) { var o = n; break; } } o && (\"break\" === t || \"continue\" === t) && o[0] <= r && r <= o[2] && (o = null); var i = o ? o[4] : {}; return i.type = t, i.arg = r, o ? (this.method = \"next\", this.next = o[2], f) : this.complete(i); }, complete: function complete(t, r) { if (\"throw\" === t.type) throw t.arg; return \"break\" === t.type || \"continue\" === t.type ? this.next = t.arg : \"return\" === t.type ? (this.rval = this.arg = t.arg, this.method = \"return\", this.next = \"end\") : \"normal\" === t.type && r && (this.next = r), f; }, finish: function finish(t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[2] === t) return this.complete(e[4], e[3]), m(e), f; } }, \"catch\": function _catch(t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[0] === t) { var n = e[4]; if (\"throw\" === n.type) { var o = n.arg; m(e); } return o; } } throw Error(\"illegal catch attempt\"); }, delegateYield: function delegateYield(r, e, n) { return this.delegate = { i: x(r), r: e, n: n }, \"next\" === this.method && (this.arg = t), f; } }, r; }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"next\", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"throw\", n); } _next(void 0); }); }; }\npos.factory(\"infrasecService\", function (posConfig, backend, infrasecRepository, notification, $translate, eventBus, receipt, fluctuatingPropertiesHelper, saleRepository, $cookies) {\n  var service = {};\n  var settings = null;\n  posConfig.whenReady().then(function () {\n    init();\n    loadConfig();\n  });\n  function init() {\n    eventBus.subscribe(eventBus.events.pos.newConfig, null, function () {\n      return loadConfig();\n    });\n    eventBus.subscribe(eventBus.events.sale.reprint, null, function (ev, receiptData) {\n      return onReprint(ev, receiptData);\n    });\n    eventBus.subscribe(eventBus.events.sale.reprintOffline, null, function (ev) {\n      return onAttemptReprintOffline(ev);\n    });\n  }\n  function loadConfig() {\n    settings = posConfig.getShopFeatures().infrasec;\n  }\n  function onReprint(ev, receiptData) {\n    if (isActive() && receiptData.reprinted > 0) {\n      ev.preventDefault();\n    }\n    var copyCode = fluctuatingPropertiesHelper.getInfrasecCopyCode(receiptData);\n    if (copyCode) {\n      ev.preventDefault();\n    }\n  }\n  function onAttemptReprintOffline(ev) {\n    if (isActive()) {\n      ev.preventDefault();\n    }\n  }\n  function isActive() {\n    if (settings && settings.values && settings.values.active) {\n      return true;\n    }\n    return false;\n  }\n  function getMatchedOption() {\n    var selectedConnector = backend.getCurrentDevice();\n    var matchedOption = settings.values.connectorOptions.find(function (connectorOption) {\n      return connectorOption.mac === selectedConnector.mac;\n    });\n    if (!matchedOption || !matchedOption.organizationNumber || !matchedOption.registerId) {\n      notification.pop(\"error\", $translate.instant(\"infrasec/error\"), $translate.instant(\"infrasec/missingConfiguration\"), 10000);\n      return;\n    }\n    return matchedOption;\n  }\n  function getTcsMatchedOption() {\n    var selectedConnector = backend.getCurrentDevice();\n    var matchedOption = settings.values.connectorOptions.find(function (connectorOption) {\n      return connectorOption.mac === selectedConnector.mac && connectorOption.controlUnit === 'TCS';\n    });\n    if (!matchedOption || !matchedOption.organizationNumber || !matchedOption.registerId) {\n      notification.pop(\"error\", $translate.instant(\"infrasec/error\"), $translate.instant(\"infrasec/tcsMissingConfiguration\"), 10000);\n      return;\n    }\n    return matchedOption;\n  }\n  function getInfrasecData(matchedOption, receiptData, copy) {\n    if (!isActive()) return;\n    return infrasecRepository.api.signReceipt(receiptData, matchedOption.registerId, matchedOption.organizationNumber, matchedOption.storePayload, copy).then(function (response) {\n      var infrasecResponse = response.data;\n      if (!infrasecResponse) return;\n      if (infrasecResponse.responseCode !== 0) {\n        notification.pop(\"error\", $translate.instant(\"infrasec/signingReceiptFialed\"), infrasecResponse.responseMessage + \" \" + infrasecResponse.responseReason, 10000);\n      }\n      return infrasecResponse;\n    });\n  }\n  service.isActive = function () {\n    return isActive();\n  };\n\n  /**\n    * Is the TCS infrasec feature enabled in the shop features.\n  */\n  service.isTcsEnabled = /*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee() {\n    var tcsOption, matchedOption;\n    return _regeneratorRuntime().wrap(function _callee$(_context) {\n      while (1) switch (_context.prev = _context.next) {\n        case 0:\n          if (settings) {\n            _context.next = 2;\n            break;\n          }\n          return _context.abrupt(\"return\", Promise.resolve(true));\n        case 2:\n          tcsOption = settings.values.connectorOptions.find(function (connectorOption) {\n            return connectorOption.controlUnit === 'TCS';\n          });\n          if (!tcsOption) {\n            _context.next = 10;\n            break;\n          }\n          matchedOption = getTcsMatchedOption();\n          if (matchedOption) {\n            _context.next = 7;\n            break;\n          }\n          return _context.abrupt(\"return\", Promise.resolve(false));\n        case 7:\n          return _context.abrupt(\"return\", infrasecRepository.api.registerStatus(matchedOption.registerId, matchedOption.organizationNumber, matchedOption.storePayload).then(function (response) {\n            var infrasecResponse = response.data;\n            if (!infrasecResponse) return false;\n            if (infrasecResponse.responseCode !== 0) {\n              notification.pop(\"error\", $translate.instant(\"infrasec/registerStatusFailed\"), infrasecResponse.responseMessage + \" \" + infrasecResponse.responseReason, 10000);\n              return false;\n            }\n            var today = new Date();\n            var endOfDay = new Date();\n            endOfDay.setHours(23, 59, 59, 999);\n            $cookies.put('infraSecRegisterStatus', today.toISOString(), {\n              expires: endOfDay,\n              path: '/'\n            });\n            return true;\n          }));\n        case 10:\n          return _context.abrupt(\"return\", Promise.resolve(true));\n        case 11:\n        case \"end\":\n          return _context.stop();\n      }\n    }, _callee);\n  }));\n  service.signReceipt = function (receiptData) {\n    if (!isActive()) return;\n    var matchedOption = getMatchedOption();\n    if (!matchedOption) return;\n    return getInfrasecData(matchedOption, receiptData, false).then(function (response) {\n      if (response && response.responseCode === 0) {\n        receipt.setInfrasecDetails(response.controlCode.ctuid, response.controlCode.code, matchedOption.registerId, response.requestID, matchedOption.organizationNumber, response.sequenceNumber);\n        return true;\n      }\n    });\n  };\n  service.IsTcsConfigured = function () {\n    if (isActive()) {\n      var tcsOption = settings.values.connectorOptions.find(function (connectorOption) {\n        return connectorOption.controlUnit === 'TCS';\n      });\n      return !!tcsOption;\n    }\n    return false;\n  };\n  service.signReceiptCopy = function (receiptData) {\n    if (!isActive()) return;\n    var matchedOption = getMatchedOption();\n    if (!matchedOption) return;\n    return getInfrasecData(matchedOption, receiptData, true).then(function (response) {\n      if (response && response.responseCode === 0) {\n        fluctuatingPropertiesHelper.setInfrasecCopyCTUID(receiptData, response.controlCode.ctuid);\n        fluctuatingPropertiesHelper.setInfrasecCopyCode(receiptData, response.controlCode.code);\n        fluctuatingPropertiesHelper.setInfrasecSequenceNumber(receiptData, response.sequenceNumber);\n        return saleRepository.api.updateFluctuatingProperties(receiptData).then(function (response) {\n          return receiptData;\n        });\n      }\n    });\n  };\n  return service;\n});\n","\"use strict\";\n\npos.controller(\"ItemgroupCtrl\", function ($scope, $log, $state, itemgroup, receipt, notification, $translate, keypadManager, $timeout, $filter, inputValidationService) {\n  \"use strict\";\n\n  itemgroup.getItemGroups().then(function (response) {\n    $scope.itemgroup = response.data;\n    $scope.itemgroup = $filter(\"orderBy\")($scope.itemgroup, \"name\");\n  });\n  $scope.search = function (itemGroup) {\n    if (!$scope.itemNo || itemGroup.name.toLowerCase().indexOf($scope.itemNo.toLowerCase()) != -1 || itemGroup.no.toString().toLowerCase().indexOf($scope.itemNo.toLowerCase()) != -1) {\n      return true;\n    }\n    return false;\n  };\n  var selectedItemLineIndex = 0;\n  var i18nProperAmount;\n  $translate([\"button/itemgroup no/name\", \"input/enter_amount\", \"toast/proper amount\", \"button/sort by name\", \"button/sort by no\"]).then(function (translations) {\n    $scope.placeholder1 = translations[\"button/itemgroup no/name\"];\n    $scope.placeholder2 = translations[\"input/enter_amount\"];\n    i18nProperAmount = translations[\"toast/proper amount\"];\n    $scope.sortByName = translations[\"button/sort by name\"];\n    $scope.sortByNo = translations[\"button/sort by no\"];\n  });\n  $scope.sortSelect = \"name\";\n  $scope.backToReceipt = function () {\n    $state.go(\"root.split.pos\");\n  };\n  $scope.addToReceipt = function (price) {\n    try {\n      price = inputValidationService.convertToDecimal(price);\n      if (price.isNaN() || price.isZero() || !inputValidationService.validateAmount(price)) throw \"INVALID_AMOUNT\";\n    } catch (err) {\n      notification.pop(\"info\", i18nProperAmount);\n      return;\n    }\n\n    // apply the same filtering as seen on the view to make sure the selected index matches what's shown in the view\n    var filteredItemGroups = $filter(\"filter\")($scope.itemgroup, $scope.itemNo);\n    receipt.addItemGroup(price, filteredItemGroups[selectedItemLineIndex].name, filteredItemGroups[selectedItemLineIndex].no, filteredItemGroups[selectedItemLineIndex].vat, filteredItemGroups[selectedItemLineIndex].taxCodeId, filteredItemGroups[selectedItemLineIndex].imageUrl);\n    $state.go(\"root.split.pos\");\n  };\n  $scope.selectItemLine = function (index) {\n    selectedItemLineIndex = index;\n  };\n  $scope.selectedItemLineIndex = function () {\n    return selectedItemLineIndex;\n  };\n  $scope.sortItems = function (type) {\n    $scope.itemgroup = $filter(\"orderBy\")($scope.itemgroup, type);\n  };\n  $scope.reset = function () {\n    $scope.itemNo = \"\";\n    $scope.amount = \"\";\n  };\n  $scope.hideKeypad = function () {\n    keypadManager.hide(); //Hide Keypad\n  };\n});\n","\"use strict\";\n\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _regeneratorRuntime() { \"use strict\"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return r; }; var t, r = {}, e = Object.prototype, n = e.hasOwnProperty, o = \"function\" == typeof Symbol ? Symbol : {}, i = o.iterator || \"@@iterator\", a = o.asyncIterator || \"@@asyncIterator\", u = o.toStringTag || \"@@toStringTag\"; function c(t, r, e, n) { return Object.defineProperty(t, r, { value: e, enumerable: !n, configurable: !n, writable: !n }); } try { c({}, \"\"); } catch (t) { c = function c(t, r, e) { return t[r] = e; }; } function h(r, e, n, o) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype); return c(a, \"_invoke\", function (r, e, n) { var o = 1; return function (i, a) { if (3 === o) throw Error(\"Generator is already running\"); if (4 === o) { if (\"throw\" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var u = n.delegate; if (u) { var c = d(u, n); if (c) { if (c === f) continue; return c; } } if (\"next\" === n.method) n.sent = n._sent = n.arg;else if (\"throw\" === n.method) { if (1 === o) throw o = 4, n.arg; n.dispatchException(n.arg); } else \"return\" === n.method && n.abrupt(\"return\", n.arg); o = 3; var h = s(r, e, n); if (\"normal\" === h.type) { if (o = n.done ? 4 : 2, h.arg === f) continue; return { value: h.arg, done: n.done }; } \"throw\" === h.type && (o = 4, n.method = \"throw\", n.arg = h.arg); } }; }(r, n, new Context(o || [])), !0), a; } function s(t, r, e) { try { return { type: \"normal\", arg: t.call(r, e) }; } catch (t) { return { type: \"throw\", arg: t }; } } r.wrap = h; var f = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var l = {}; c(l, i, function () { return this; }); var p = Object.getPrototypeOf, y = p && p(p(x([]))); y && y !== e && n.call(y, i) && (l = y); var v = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(l); function g(t) { [\"next\", \"throw\", \"return\"].forEach(function (r) { c(t, r, function (t) { return this._invoke(r, t); }); }); } function AsyncIterator(t, r) { function e(o, i, a, u) { var c = s(t[o], t, i); if (\"throw\" !== c.type) { var h = c.arg, f = h.value; return f && \"object\" == _typeof(f) && n.call(f, \"__await\") ? r.resolve(f.__await).then(function (t) { e(\"next\", t, a, u); }, function (t) { e(\"throw\", t, a, u); }) : r.resolve(f).then(function (t) { h.value = t, a(h); }, function (t) { return e(\"throw\", t, a, u); }); } u(c.arg); } var o; c(this, \"_invoke\", function (t, n) { function i() { return new r(function (r, o) { e(t, n, r, o); }); } return o = o ? o.then(i, i) : i(); }, !0); } function d(r, e) { var n = e.method, o = r.i[n]; if (o === t) return e.delegate = null, \"throw\" === n && r.i[\"return\"] && (e.method = \"return\", e.arg = t, d(r, e), \"throw\" === e.method) || \"return\" !== n && (e.method = \"throw\", e.arg = new TypeError(\"The iterator does not provide a '\" + n + \"' method\")), f; var i = s(o, r.i, e.arg); if (\"throw\" === i.type) return e.method = \"throw\", e.arg = i.arg, e.delegate = null, f; var a = i.arg; return a ? a.done ? (e[r.r] = a.value, e.next = r.n, \"return\" !== e.method && (e.method = \"next\", e.arg = t), e.delegate = null, f) : a : (e.method = \"throw\", e.arg = new TypeError(\"iterator result is not an object\"), e.delegate = null, f); } function w(t) { this.tryEntries.push(t); } function m(r) { var e = r[4] || {}; e.type = \"normal\", e.arg = t, r[4] = e; } function Context(t) { this.tryEntries = [[-1]], t.forEach(w, this), this.reset(!0); } function x(r) { if (null != r) { var e = r[i]; if (e) return e.call(r); if (\"function\" == typeof r.next) return r; if (!isNaN(r.length)) { var o = -1, a = function e() { for (; ++o < r.length;) if (n.call(r, o)) return e.value = r[o], e.done = !1, e; return e.value = t, e.done = !0, e; }; return a.next = a; } } throw new TypeError(_typeof(r) + \" is not iterable\"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, c(v, \"constructor\", GeneratorFunctionPrototype), c(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction), GeneratorFunction.displayName = c(GeneratorFunctionPrototype, u, \"GeneratorFunction\"), r.isGeneratorFunction = function (t) { var r = \"function\" == typeof t && t.constructor; return !!r && (r === GeneratorFunction || \"GeneratorFunction\" === (r.displayName || r.name)); }, r.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, c(t, u, \"GeneratorFunction\")), t.prototype = Object.create(v), t; }, r.awrap = function (t) { return { __await: t }; }, g(AsyncIterator.prototype), c(AsyncIterator.prototype, a, function () { return this; }), r.AsyncIterator = AsyncIterator, r.async = function (t, e, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(h(t, e, n, o), i); return r.isGeneratorFunction(e) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, g(v), c(v, u, \"Generator\"), c(v, i, function () { return this; }), c(v, \"toString\", function () { return \"[object Generator]\"; }), r.keys = function (t) { var r = Object(t), e = []; for (var n in r) e.unshift(n); return function t() { for (; e.length;) if ((n = e.pop()) in r) return t.value = n, t.done = !1, t; return t.done = !0, t; }; }, r.values = x, Context.prototype = { constructor: Context, reset: function reset(r) { if (this.prev = this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = \"next\", this.arg = t, this.tryEntries.forEach(m), !r) for (var e in this) \"t\" === e.charAt(0) && n.call(this, e) && !isNaN(+e.slice(1)) && (this[e] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0][4]; if (\"throw\" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(r) { if (this.done) throw r; var e = this; function n(t) { a.type = \"throw\", a.arg = r, e.next = t; } for (var o = e.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i[4], u = this.prev, c = i[1], h = i[2]; if (-1 === i[0]) return n(\"end\"), !1; if (!c && !h) throw Error(\"try statement without catch or finally\"); if (null != i[0] && i[0] <= u) { if (u < c) return this.method = \"next\", this.arg = t, n(c), !0; if (u < h) return n(h), !1; } } }, abrupt: function abrupt(t, r) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var n = this.tryEntries[e]; if (n[0] > -1 && n[0] <= this.prev && this.prev < n[2]) { var o = n; break; } } o && (\"break\" === t || \"continue\" === t) && o[0] <= r && r <= o[2] && (o = null); var i = o ? o[4] : {}; return i.type = t, i.arg = r, o ? (this.method = \"next\", this.next = o[2], f) : this.complete(i); }, complete: function complete(t, r) { if (\"throw\" === t.type) throw t.arg; return \"break\" === t.type || \"continue\" === t.type ? this.next = t.arg : \"return\" === t.type ? (this.rval = this.arg = t.arg, this.method = \"return\", this.next = \"end\") : \"normal\" === t.type && r && (this.next = r), f; }, finish: function finish(t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[2] === t) return this.complete(e[4], e[3]), m(e), f; } }, \"catch\": function _catch(t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[0] === t) { var n = e[4]; if (\"throw\" === n.type) { var o = n.arg; m(e); } return o; } } throw Error(\"illegal catch attempt\"); }, delegateYield: function delegateYield(r, e, n) { return this.delegate = { i: x(r), r: e, n: n }, \"next\" === this.method && (this.arg = t), f; } }, r; }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"next\", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"throw\", n); } _next(void 0); }); }; }\npos.factory(\"itemgroup\", function ($log, itemgroupRepository, indexdb) {\n  \"use strict\";\n\n  $log.debug(\"Creating itemgroup service\");\n  var itemgroup = {};\n  itemgroup.getItemGroups = /*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee() {\n    var response;\n    return _regeneratorRuntime().wrap(function _callee$(_context) {\n      while (1) switch (_context.prev = _context.next) {\n        case 0:\n          _context.prev = 0;\n          _context.next = 3;\n          return itemgroupRepository.api.getAll();\n        case 3:\n          response = _context.sent;\n          _context.next = 6;\n          return indexdb.itemgroups.update(response.data);\n        case 6:\n          return _context.abrupt(\"return\", response);\n        case 9:\n          _context.prev = 9;\n          _context.t0 = _context[\"catch\"](0);\n          _context.next = 13;\n          return indexdb.itemgroups.getAll();\n        case 13:\n          _context.t1 = _context.sent;\n          if (_context.t1) {\n            _context.next = 16;\n            break;\n          }\n          _context.t1 = _context.t0.data;\n        case 16:\n          _context.t0.data = _context.t1;\n          return _context.abrupt(\"return\", _context.t0);\n        case 18:\n        case \"end\":\n          return _context.stop();\n      }\n    }, _callee, null, [[0, 9]]);\n  }));\n  itemgroup.getExpenseGroups = /*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee2() {\n    var response;\n    return _regeneratorRuntime().wrap(function _callee2$(_context2) {\n      while (1) switch (_context2.prev = _context2.next) {\n        case 0:\n          _context2.prev = 0;\n          _context2.next = 3;\n          return itemgroupRepository.api.getAllExpenseGroups();\n        case 3:\n          response = _context2.sent;\n          indexdb.expensegroups.update(response.data);\n          return _context2.abrupt(\"return\", response);\n        case 8:\n          _context2.prev = 8;\n          _context2.t0 = _context2[\"catch\"](0);\n          _context2.next = 12;\n          return indexdb.expensegroups.getAll();\n        case 12:\n          _context2.t1 = _context2.sent;\n          if (_context2.t1) {\n            _context2.next = 15;\n            break;\n          }\n          _context2.t1 = _context2.t0.data;\n        case 15:\n          _context2.t0.data = _context2.t1;\n          return _context2.abrupt(\"return\", _context2.t0);\n        case 17:\n        case \"end\":\n          return _context2.stop();\n      }\n    }, _callee2, null, [[0, 8]]);\n  }));\n  return itemgroup;\n});\n","\"use strict\";\n\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _regeneratorRuntime() { \"use strict\"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return r; }; var t, r = {}, e = Object.prototype, n = e.hasOwnProperty, o = \"function\" == typeof Symbol ? Symbol : {}, i = o.iterator || \"@@iterator\", a = o.asyncIterator || \"@@asyncIterator\", u = o.toStringTag || \"@@toStringTag\"; function c(t, r, e, n) { return Object.defineProperty(t, r, { value: e, enumerable: !n, configurable: !n, writable: !n }); } try { c({}, \"\"); } catch (t) { c = function c(t, r, e) { return t[r] = e; }; } function h(r, e, n, o) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype); return c(a, \"_invoke\", function (r, e, n) { var o = 1; return function (i, a) { if (3 === o) throw Error(\"Generator is already running\"); if (4 === o) { if (\"throw\" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var u = n.delegate; if (u) { var c = d(u, n); if (c) { if (c === f) continue; return c; } } if (\"next\" === n.method) n.sent = n._sent = n.arg;else if (\"throw\" === n.method) { if (1 === o) throw o = 4, n.arg; n.dispatchException(n.arg); } else \"return\" === n.method && n.abrupt(\"return\", n.arg); o = 3; var h = s(r, e, n); if (\"normal\" === h.type) { if (o = n.done ? 4 : 2, h.arg === f) continue; return { value: h.arg, done: n.done }; } \"throw\" === h.type && (o = 4, n.method = \"throw\", n.arg = h.arg); } }; }(r, n, new Context(o || [])), !0), a; } function s(t, r, e) { try { return { type: \"normal\", arg: t.call(r, e) }; } catch (t) { return { type: \"throw\", arg: t }; } } r.wrap = h; var f = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var l = {}; c(l, i, function () { return this; }); var p = Object.getPrototypeOf, y = p && p(p(x([]))); y && y !== e && n.call(y, i) && (l = y); var v = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(l); function g(t) { [\"next\", \"throw\", \"return\"].forEach(function (r) { c(t, r, function (t) { return this._invoke(r, t); }); }); } function AsyncIterator(t, r) { function e(o, i, a, u) { var c = s(t[o], t, i); if (\"throw\" !== c.type) { var h = c.arg, f = h.value; return f && \"object\" == _typeof(f) && n.call(f, \"__await\") ? r.resolve(f.__await).then(function (t) { e(\"next\", t, a, u); }, function (t) { e(\"throw\", t, a, u); }) : r.resolve(f).then(function (t) { h.value = t, a(h); }, function (t) { return e(\"throw\", t, a, u); }); } u(c.arg); } var o; c(this, \"_invoke\", function (t, n) { function i() { return new r(function (r, o) { e(t, n, r, o); }); } return o = o ? o.then(i, i) : i(); }, !0); } function d(r, e) { var n = e.method, o = r.i[n]; if (o === t) return e.delegate = null, \"throw\" === n && r.i[\"return\"] && (e.method = \"return\", e.arg = t, d(r, e), \"throw\" === e.method) || \"return\" !== n && (e.method = \"throw\", e.arg = new TypeError(\"The iterator does not provide a '\" + n + \"' method\")), f; var i = s(o, r.i, e.arg); if (\"throw\" === i.type) return e.method = \"throw\", e.arg = i.arg, e.delegate = null, f; var a = i.arg; return a ? a.done ? (e[r.r] = a.value, e.next = r.n, \"return\" !== e.method && (e.method = \"next\", e.arg = t), e.delegate = null, f) : a : (e.method = \"throw\", e.arg = new TypeError(\"iterator result is not an object\"), e.delegate = null, f); } function w(t) { this.tryEntries.push(t); } function m(r) { var e = r[4] || {}; e.type = \"normal\", e.arg = t, r[4] = e; } function Context(t) { this.tryEntries = [[-1]], t.forEach(w, this), this.reset(!0); } function x(r) { if (null != r) { var e = r[i]; if (e) return e.call(r); if (\"function\" == typeof r.next) return r; if (!isNaN(r.length)) { var o = -1, a = function e() { for (; ++o < r.length;) if (n.call(r, o)) return e.value = r[o], e.done = !1, e; return e.value = t, e.done = !0, e; }; return a.next = a; } } throw new TypeError(_typeof(r) + \" is not iterable\"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, c(v, \"constructor\", GeneratorFunctionPrototype), c(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction), GeneratorFunction.displayName = c(GeneratorFunctionPrototype, u, \"GeneratorFunction\"), r.isGeneratorFunction = function (t) { var r = \"function\" == typeof t && t.constructor; return !!r && (r === GeneratorFunction || \"GeneratorFunction\" === (r.displayName || r.name)); }, r.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, c(t, u, \"GeneratorFunction\")), t.prototype = Object.create(v), t; }, r.awrap = function (t) { return { __await: t }; }, g(AsyncIterator.prototype), c(AsyncIterator.prototype, a, function () { return this; }), r.AsyncIterator = AsyncIterator, r.async = function (t, e, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(h(t, e, n, o), i); return r.isGeneratorFunction(e) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, g(v), c(v, u, \"Generator\"), c(v, i, function () { return this; }), c(v, \"toString\", function () { return \"[object Generator]\"; }), r.keys = function (t) { var r = Object(t), e = []; for (var n in r) e.unshift(n); return function t() { for (; e.length;) if ((n = e.pop()) in r) return t.value = n, t.done = !1, t; return t.done = !0, t; }; }, r.values = x, Context.prototype = { constructor: Context, reset: function reset(r) { if (this.prev = this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = \"next\", this.arg = t, this.tryEntries.forEach(m), !r) for (var e in this) \"t\" === e.charAt(0) && n.call(this, e) && !isNaN(+e.slice(1)) && (this[e] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0][4]; if (\"throw\" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(r) { if (this.done) throw r; var e = this; function n(t) { a.type = \"throw\", a.arg = r, e.next = t; } for (var o = e.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i[4], u = this.prev, c = i[1], h = i[2]; if (-1 === i[0]) return n(\"end\"), !1; if (!c && !h) throw Error(\"try statement without catch or finally\"); if (null != i[0] && i[0] <= u) { if (u < c) return this.method = \"next\", this.arg = t, n(c), !0; if (u < h) return n(h), !1; } } }, abrupt: function abrupt(t, r) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var n = this.tryEntries[e]; if (n[0] > -1 && n[0] <= this.prev && this.prev < n[2]) { var o = n; break; } } o && (\"break\" === t || \"continue\" === t) && o[0] <= r && r <= o[2] && (o = null); var i = o ? o[4] : {}; return i.type = t, i.arg = r, o ? (this.method = \"next\", this.next = o[2], f) : this.complete(i); }, complete: function complete(t, r) { if (\"throw\" === t.type) throw t.arg; return \"break\" === t.type || \"continue\" === t.type ? this.next = t.arg : \"return\" === t.type ? (this.rval = this.arg = t.arg, this.method = \"return\", this.next = \"end\") : \"normal\" === t.type && r && (this.next = r), f; }, finish: function finish(t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[2] === t) return this.complete(e[4], e[3]), m(e), f; } }, \"catch\": function _catch(t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[0] === t) { var n = e[4]; if (\"throw\" === n.type) { var o = n.arg; m(e); } return o; } } throw Error(\"illegal catch attempt\"); }, delegateYield: function delegateYield(r, e, n) { return this.delegate = { i: x(r), r: e, n: n }, \"next\" === this.method && (this.arg = t), f; } }, r; }\nfunction _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); }\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _iterableToArray(r) { if (\"undefined\" != typeof Symbol && null != r[Symbol.iterator] || null != r[\"@@iterator\"]) return Array.from(r); }\nfunction _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"next\", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"throw\", n); } _next(void 0); }); }; }\npos.controller(\"ItemShortcutsCtrl\", function ($scope, itemShortcutService, receipt, articles, $translate, notification, eventBus, posConfig, $log, itemInfoService) {\n  var i18nInvalidBarcode;\n  var i18nYesAnswer;\n  var i18nNoAnswer;\n  $scope.navPath = [];\n  $scope.currentFolder = null;\n  $scope.availableFolders = [];\n  $scope.availableItems = [];\n  function init() {\n    return _init.apply(this, arguments);\n  }\n  function _init() {\n    _init = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee2() {\n      var translations;\n      return _regeneratorRuntime().wrap(function _callee2$(_context2) {\n        while (1) switch (_context2.prev = _context2.next) {\n          case 0:\n            _context2.next = 2;\n            return itemShortcutService.getItemShortcuts();\n          case 2:\n            $scope.shortcuts = _context2.sent;\n            $scope.selectNewFolder(null);\n            $scope.enableSerialNumberTracking = posConfig.tenantGeneralPosSettings.enableSerialNumberTracking;\n            _context2.next = 7;\n            return $translate([\"toast/unknown ean\", \"label/yes\", \"label/no\"]);\n          case 7:\n            translations = _context2.sent;\n            i18nInvalidBarcode = translations[\"toast/unknown ean\"];\n            i18nYesAnswer = translations[\"label/yes\"];\n            i18nNoAnswer = translations[\"label/no\"];\n          case 11:\n          case \"end\":\n            return _context2.stop();\n        }\n      }, _callee2);\n    }));\n    return _init.apply(this, arguments);\n  }\n  function getItems(folder) {\n    var childItems = folder.children.flatMap(function (o) {\n      return getItems(o);\n    });\n    return [].concat(_toConsumableArray(folder.items), _toConsumableArray(childItems));\n  }\n  $scope.up = function () {\n    var folder = $scope.navPath.pop();\n    $scope.selectNewFolder(folder, true);\n  };\n  $scope.selectNewFolder = function (newFolder, ignoreNavPath) {\n    if (newFolder) {\n      if (!ignoreNavPath) $scope.navPath.push($scope.currentFolder);\n      $scope.currentFolder = newFolder;\n      $scope.availableItems = getItems(newFolder);\n      $scope.availableFolders = newFolder.children;\n    } else {\n      $scope.availableFolders = $scope.shortcuts;\n      $scope.availableItems = $scope.shortcuts.flatMap(function (o) {\n        return getItems(o);\n      });\n      $scope.navPath.length = 0;\n      $scope.currentFolder = null;\n    }\n  };\n  $scope.selectItem = /*#__PURE__*/function () {\n    var _ref = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee(item) {\n      var resp, canProceed;\n      return _regeneratorRuntime().wrap(function _callee$(_context) {\n        while (1) switch (_context.prev = _context.next) {\n          case 0:\n            _context.prev = 0;\n            _context.next = 3;\n            return articles.findArticleById(item.itemNo);\n          case 3:\n            resp = _context.sent;\n            if ($scope.enableSerialNumberTracking && resp && resp.data.type == 2) {\n              resp.data.requiredToScanSerialNumber = true;\n            }\n            _context.next = 7;\n            return eventBus.notifyAsync(eventBus.events.article.addToReceipt, item);\n          case 7:\n            canProceed = _context.sent;\n            if (canProceed) {\n              receipt.addToReceipt(resp.data);\n              $scope.$state.go(\"root.split.pos\");\n            }\n            _context.next = 14;\n            break;\n          case 11:\n            _context.prev = 11;\n            _context.t0 = _context[\"catch\"](0);\n            notification.pop(\"warning\", i18nInvalidBarcode);\n          case 14:\n          case \"end\":\n            return _context.stop();\n        }\n      }, _callee, null, [[0, 11]]);\n    }));\n    return function (_x) {\n      return _ref.apply(this, arguments);\n    };\n  }();\n  init();\n});\n","\"use strict\";\n\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _regeneratorRuntime() { \"use strict\"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return r; }; var t, r = {}, e = Object.prototype, n = e.hasOwnProperty, o = \"function\" == typeof Symbol ? Symbol : {}, i = o.iterator || \"@@iterator\", a = o.asyncIterator || \"@@asyncIterator\", u = o.toStringTag || \"@@toStringTag\"; function c(t, r, e, n) { return Object.defineProperty(t, r, { value: e, enumerable: !n, configurable: !n, writable: !n }); } try { c({}, \"\"); } catch (t) { c = function c(t, r, e) { return t[r] = e; }; } function h(r, e, n, o) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype); return c(a, \"_invoke\", function (r, e, n) { var o = 1; return function (i, a) { if (3 === o) throw Error(\"Generator is already running\"); if (4 === o) { if (\"throw\" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var u = n.delegate; if (u) { var c = d(u, n); if (c) { if (c === f) continue; return c; } } if (\"next\" === n.method) n.sent = n._sent = n.arg;else if (\"throw\" === n.method) { if (1 === o) throw o = 4, n.arg; n.dispatchException(n.arg); } else \"return\" === n.method && n.abrupt(\"return\", n.arg); o = 3; var h = s(r, e, n); if (\"normal\" === h.type) { if (o = n.done ? 4 : 2, h.arg === f) continue; return { value: h.arg, done: n.done }; } \"throw\" === h.type && (o = 4, n.method = \"throw\", n.arg = h.arg); } }; }(r, n, new Context(o || [])), !0), a; } function s(t, r, e) { try { return { type: \"normal\", arg: t.call(r, e) }; } catch (t) { return { type: \"throw\", arg: t }; } } r.wrap = h; var f = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var l = {}; c(l, i, function () { return this; }); var p = Object.getPrototypeOf, y = p && p(p(x([]))); y && y !== e && n.call(y, i) && (l = y); var v = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(l); function g(t) { [\"next\", \"throw\", \"return\"].forEach(function (r) { c(t, r, function (t) { return this._invoke(r, t); }); }); } function AsyncIterator(t, r) { function e(o, i, a, u) { var c = s(t[o], t, i); if (\"throw\" !== c.type) { var h = c.arg, f = h.value; return f && \"object\" == _typeof(f) && n.call(f, \"__await\") ? r.resolve(f.__await).then(function (t) { e(\"next\", t, a, u); }, function (t) { e(\"throw\", t, a, u); }) : r.resolve(f).then(function (t) { h.value = t, a(h); }, function (t) { return e(\"throw\", t, a, u); }); } u(c.arg); } var o; c(this, \"_invoke\", function (t, n) { function i() { return new r(function (r, o) { e(t, n, r, o); }); } return o = o ? o.then(i, i) : i(); }, !0); } function d(r, e) { var n = e.method, o = r.i[n]; if (o === t) return e.delegate = null, \"throw\" === n && r.i[\"return\"] && (e.method = \"return\", e.arg = t, d(r, e), \"throw\" === e.method) || \"return\" !== n && (e.method = \"throw\", e.arg = new TypeError(\"The iterator does not provide a '\" + n + \"' method\")), f; var i = s(o, r.i, e.arg); if (\"throw\" === i.type) return e.method = \"throw\", e.arg = i.arg, e.delegate = null, f; var a = i.arg; return a ? a.done ? (e[r.r] = a.value, e.next = r.n, \"return\" !== e.method && (e.method = \"next\", e.arg = t), e.delegate = null, f) : a : (e.method = \"throw\", e.arg = new TypeError(\"iterator result is not an object\"), e.delegate = null, f); } function w(t) { this.tryEntries.push(t); } function m(r) { var e = r[4] || {}; e.type = \"normal\", e.arg = t, r[4] = e; } function Context(t) { this.tryEntries = [[-1]], t.forEach(w, this), this.reset(!0); } function x(r) { if (null != r) { var e = r[i]; if (e) return e.call(r); if (\"function\" == typeof r.next) return r; if (!isNaN(r.length)) { var o = -1, a = function e() { for (; ++o < r.length;) if (n.call(r, o)) return e.value = r[o], e.done = !1, e; return e.value = t, e.done = !0, e; }; return a.next = a; } } throw new TypeError(_typeof(r) + \" is not iterable\"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, c(v, \"constructor\", GeneratorFunctionPrototype), c(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction), GeneratorFunction.displayName = c(GeneratorFunctionPrototype, u, \"GeneratorFunction\"), r.isGeneratorFunction = function (t) { var r = \"function\" == typeof t && t.constructor; return !!r && (r === GeneratorFunction || \"GeneratorFunction\" === (r.displayName || r.name)); }, r.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, c(t, u, \"GeneratorFunction\")), t.prototype = Object.create(v), t; }, r.awrap = function (t) { return { __await: t }; }, g(AsyncIterator.prototype), c(AsyncIterator.prototype, a, function () { return this; }), r.AsyncIterator = AsyncIterator, r.async = function (t, e, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(h(t, e, n, o), i); return r.isGeneratorFunction(e) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, g(v), c(v, u, \"Generator\"), c(v, i, function () { return this; }), c(v, \"toString\", function () { return \"[object Generator]\"; }), r.keys = function (t) { var r = Object(t), e = []; for (var n in r) e.unshift(n); return function t() { for (; e.length;) if ((n = e.pop()) in r) return t.value = n, t.done = !1, t; return t.done = !0, t; }; }, r.values = x, Context.prototype = { constructor: Context, reset: function reset(r) { if (this.prev = this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = \"next\", this.arg = t, this.tryEntries.forEach(m), !r) for (var e in this) \"t\" === e.charAt(0) && n.call(this, e) && !isNaN(+e.slice(1)) && (this[e] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0][4]; if (\"throw\" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(r) { if (this.done) throw r; var e = this; function n(t) { a.type = \"throw\", a.arg = r, e.next = t; } for (var o = e.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i[4], u = this.prev, c = i[1], h = i[2]; if (-1 === i[0]) return n(\"end\"), !1; if (!c && !h) throw Error(\"try statement without catch or finally\"); if (null != i[0] && i[0] <= u) { if (u < c) return this.method = \"next\", this.arg = t, n(c), !0; if (u < h) return n(h), !1; } } }, abrupt: function abrupt(t, r) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var n = this.tryEntries[e]; if (n[0] > -1 && n[0] <= this.prev && this.prev < n[2]) { var o = n; break; } } o && (\"break\" === t || \"continue\" === t) && o[0] <= r && r <= o[2] && (o = null); var i = o ? o[4] : {}; return i.type = t, i.arg = r, o ? (this.method = \"next\", this.next = o[2], f) : this.complete(i); }, complete: function complete(t, r) { if (\"throw\" === t.type) throw t.arg; return \"break\" === t.type || \"continue\" === t.type ? this.next = t.arg : \"return\" === t.type ? (this.rval = this.arg = t.arg, this.method = \"return\", this.next = \"end\") : \"normal\" === t.type && r && (this.next = r), f; }, finish: function finish(t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[2] === t) return this.complete(e[4], e[3]), m(e), f; } }, \"catch\": function _catch(t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[0] === t) { var n = e[4]; if (\"throw\" === n.type) { var o = n.arg; m(e); } return o; } } throw Error(\"illegal catch attempt\"); }, delegateYield: function delegateYield(r, e, n) { return this.delegate = { i: x(r), r: e, n: n }, \"next\" === this.method && (this.arg = t), f; } }, r; }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"next\", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"throw\", n); } _next(void 0); }); }; }\n//#region Eager loading\npos.run(function ($log, $injector) {\n  $log.debug(\"Eager loading Item Shortcut Service.\");\n  $injector.get(\"itemShortcutService\");\n});\n//#endregion\n\npos.service(\"itemShortcutService\", [\"itemShortcutsRepository\", \"$interval\", \"$q\", \"indexdb\", function (repo, $interval, $q, indexdb) {\n  var whenReadyDefered = $q.defer();\n  var whenReadyPromise = whenReadyDefered.promise;\n  var isResolved = false;\n  updateIndexDbCache();\n  $interval(function () {\n    return updateIndexDbCache();\n  }, 5 * 60 * 1000);\n  function updateIndexDbCache() {\n    return _updateIndexDbCache.apply(this, arguments);\n  }\n  function _updateIndexDbCache() {\n    _updateIndexDbCache = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee() {\n      var response;\n      return _regeneratorRuntime().wrap(function _callee$(_context) {\n        while (1) switch (_context.prev = _context.next) {\n          case 0:\n            _context.next = 2;\n            return repo.api.getItemShortcuts();\n          case 2:\n            response = _context.sent;\n            _context.next = 5;\n            return indexdb.shortcuts.updateShortcuts(response.data);\n          case 5:\n            if (!isResolved) {\n              whenReadyDefered.resolve();\n              isResolved = true;\n            }\n          case 6:\n          case \"end\":\n            return _context.stop();\n        }\n      }, _callee);\n    }));\n    return _updateIndexDbCache.apply(this, arguments);\n  }\n  return {\n    getItemShortcuts: function getItemShortcuts() {\n      return whenReadyPromise.then(function () {\n        return $q.when(indexdb.shortcuts.getShortcuts());\n      });\n    }\n  };\n}]);\n","\"use strict\";\n\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _regeneratorRuntime() { \"use strict\"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return r; }; var t, r = {}, e = Object.prototype, n = e.hasOwnProperty, o = \"function\" == typeof Symbol ? Symbol : {}, i = o.iterator || \"@@iterator\", a = o.asyncIterator || \"@@asyncIterator\", u = o.toStringTag || \"@@toStringTag\"; function c(t, r, e, n) { return Object.defineProperty(t, r, { value: e, enumerable: !n, configurable: !n, writable: !n }); } try { c({}, \"\"); } catch (t) { c = function c(t, r, e) { return t[r] = e; }; } function h(r, e, n, o) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype); return c(a, \"_invoke\", function (r, e, n) { var o = 1; return function (i, a) { if (3 === o) throw Error(\"Generator is already running\"); if (4 === o) { if (\"throw\" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var u = n.delegate; if (u) { var c = d(u, n); if (c) { if (c === f) continue; return c; } } if (\"next\" === n.method) n.sent = n._sent = n.arg;else if (\"throw\" === n.method) { if (1 === o) throw o = 4, n.arg; n.dispatchException(n.arg); } else \"return\" === n.method && n.abrupt(\"return\", n.arg); o = 3; var h = s(r, e, n); if (\"normal\" === h.type) { if (o = n.done ? 4 : 2, h.arg === f) continue; return { value: h.arg, done: n.done }; } \"throw\" === h.type && (o = 4, n.method = \"throw\", n.arg = h.arg); } }; }(r, n, new Context(o || [])), !0), a; } function s(t, r, e) { try { return { type: \"normal\", arg: t.call(r, e) }; } catch (t) { return { type: \"throw\", arg: t }; } } r.wrap = h; var f = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var l = {}; c(l, i, function () { return this; }); var p = Object.getPrototypeOf, y = p && p(p(x([]))); y && y !== e && n.call(y, i) && (l = y); var v = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(l); function g(t) { [\"next\", \"throw\", \"return\"].forEach(function (r) { c(t, r, function (t) { return this._invoke(r, t); }); }); } function AsyncIterator(t, r) { function e(o, i, a, u) { var c = s(t[o], t, i); if (\"throw\" !== c.type) { var h = c.arg, f = h.value; return f && \"object\" == _typeof(f) && n.call(f, \"__await\") ? r.resolve(f.__await).then(function (t) { e(\"next\", t, a, u); }, function (t) { e(\"throw\", t, a, u); }) : r.resolve(f).then(function (t) { h.value = t, a(h); }, function (t) { return e(\"throw\", t, a, u); }); } u(c.arg); } var o; c(this, \"_invoke\", function (t, n) { function i() { return new r(function (r, o) { e(t, n, r, o); }); } return o = o ? o.then(i, i) : i(); }, !0); } function d(r, e) { var n = e.method, o = r.i[n]; if (o === t) return e.delegate = null, \"throw\" === n && r.i[\"return\"] && (e.method = \"return\", e.arg = t, d(r, e), \"throw\" === e.method) || \"return\" !== n && (e.method = \"throw\", e.arg = new TypeError(\"The iterator does not provide a '\" + n + \"' method\")), f; var i = s(o, r.i, e.arg); if (\"throw\" === i.type) return e.method = \"throw\", e.arg = i.arg, e.delegate = null, f; var a = i.arg; return a ? a.done ? (e[r.r] = a.value, e.next = r.n, \"return\" !== e.method && (e.method = \"next\", e.arg = t), e.delegate = null, f) : a : (e.method = \"throw\", e.arg = new TypeError(\"iterator result is not an object\"), e.delegate = null, f); } function w(t) { this.tryEntries.push(t); } function m(r) { var e = r[4] || {}; e.type = \"normal\", e.arg = t, r[4] = e; } function Context(t) { this.tryEntries = [[-1]], t.forEach(w, this), this.reset(!0); } function x(r) { if (null != r) { var e = r[i]; if (e) return e.call(r); if (\"function\" == typeof r.next) return r; if (!isNaN(r.length)) { var o = -1, a = function e() { for (; ++o < r.length;) if (n.call(r, o)) return e.value = r[o], e.done = !1, e; return e.value = t, e.done = !0, e; }; return a.next = a; } } throw new TypeError(_typeof(r) + \" is not iterable\"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, c(v, \"constructor\", GeneratorFunctionPrototype), c(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction), GeneratorFunction.displayName = c(GeneratorFunctionPrototype, u, \"GeneratorFunction\"), r.isGeneratorFunction = function (t) { var r = \"function\" == typeof t && t.constructor; return !!r && (r === GeneratorFunction || \"GeneratorFunction\" === (r.displayName || r.name)); }, r.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, c(t, u, \"GeneratorFunction\")), t.prototype = Object.create(v), t; }, r.awrap = function (t) { return { __await: t }; }, g(AsyncIterator.prototype), c(AsyncIterator.prototype, a, function () { return this; }), r.AsyncIterator = AsyncIterator, r.async = function (t, e, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(h(t, e, n, o), i); return r.isGeneratorFunction(e) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, g(v), c(v, u, \"Generator\"), c(v, i, function () { return this; }), c(v, \"toString\", function () { return \"[object Generator]\"; }), r.keys = function (t) { var r = Object(t), e = []; for (var n in r) e.unshift(n); return function t() { for (; e.length;) if ((n = e.pop()) in r) return t.value = n, t.done = !1, t; return t.done = !0, t; }; }, r.values = x, Context.prototype = { constructor: Context, reset: function reset(r) { if (this.prev = this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = \"next\", this.arg = t, this.tryEntries.forEach(m), !r) for (var e in this) \"t\" === e.charAt(0) && n.call(this, e) && !isNaN(+e.slice(1)) && (this[e] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0][4]; if (\"throw\" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(r) { if (this.done) throw r; var e = this; function n(t) { a.type = \"throw\", a.arg = r, e.next = t; } for (var o = e.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i[4], u = this.prev, c = i[1], h = i[2]; if (-1 === i[0]) return n(\"end\"), !1; if (!c && !h) throw Error(\"try statement without catch or finally\"); if (null != i[0] && i[0] <= u) { if (u < c) return this.method = \"next\", this.arg = t, n(c), !0; if (u < h) return n(h), !1; } } }, abrupt: function abrupt(t, r) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var n = this.tryEntries[e]; if (n[0] > -1 && n[0] <= this.prev && this.prev < n[2]) { var o = n; break; } } o && (\"break\" === t || \"continue\" === t) && o[0] <= r && r <= o[2] && (o = null); var i = o ? o[4] : {}; return i.type = t, i.arg = r, o ? (this.method = \"next\", this.next = o[2], f) : this.complete(i); }, complete: function complete(t, r) { if (\"throw\" === t.type) throw t.arg; return \"break\" === t.type || \"continue\" === t.type ? this.next = t.arg : \"return\" === t.type ? (this.rval = this.arg = t.arg, this.method = \"return\", this.next = \"end\") : \"normal\" === t.type && r && (this.next = r), f; }, finish: function finish(t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[2] === t) return this.complete(e[4], e[3]), m(e), f; } }, \"catch\": function _catch(t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[0] === t) { var n = e[4]; if (\"throw\" === n.type) { var o = n.arg; m(e); } return o; } } throw Error(\"illegal catch attempt\"); }, delegateYield: function delegateYield(r, e, n) { return this.delegate = { i: x(r), r: e, n: n }, \"next\" === this.method && (this.arg = t), f; } }, r; }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"next\", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"throw\", n); } _next(void 0); }); }; }\npos.controller(\"ClerkLoginCtrl\", function ($scope, $cookies, $log, $state, clerkLoginService, infrasecService, notification, receipt, $translate, $timeout, $interval, chartService, posConfig, $q, keypadManager, backend, eventBus, $filter, posStorage, cardTransactionStatus) {\n  \"use strict\";\n\n  var ACCUMULATED_SAVE_KEY = \"IsGraphAccumulated\";\n  $log.debug(\"Creating ClerkLoginCtrl\");\n  $scope.lastTotal = receipt.lastTotal;\n  $scope.lastChange = receipt.lastChange;\n  $scope.hideChart = posConfig.getOptions().hideChart;\n  resetState();\n  $scope.clerkNo = \"\";\n  $scope.clerkPwd = \"\";\n  $scope.chartBtnControl = {\n    radio: 0\n  };\n  $scope.cleanCashConfirmation = false;\n  $scope.chartTypes = Object.freeze({\n    hourly: \"hourly\",\n    weekly: \"weekly\",\n    monthly: \"monthly\",\n    yearly: \"yearly\"\n  });\n  $scope.selectedChartType = $scope.chartTypes.hourly;\n  loadConfig();\n  var clerk;\n  $scope.chartType = \"Accumulated\";\n  // var toggle = false;\n  var invalidClerk, incorrectPass, welcome, loggedin, defaultButton, accumulatedButton, hourlyToday, hourlyLastYear, accumulatedHourlyToday, accumulatedHourlyLastYear, salesTarget, cleanCashTitle, cleanCashDescription, closeDrawer;\n  $scope.$watch(function () {\n    return backend.defaultDevice;\n  }, function (index) {\n    var armDevice = backend.devices[index];\n    $scope.defaultArm = armDevice ? armDevice : {\n      deviceName: \"Select K3 Connector\"\n    };\n  });\n  $scope.chartService = chartService;\n  // initialize translations\n  getTranslations();\n  function getTranslations() {\n    $translate([\"toast/ invalid clerk\", \"toast/incorrect_password\", \"toast/welcome\", \"toast/you_are_logged_in\", \"button/default\", \"button/accumulated\", \"dashboardChart/today\", \"dashboardChart/lastYear\", \"dashboardChart/accumulatedToday\", \"dashboardChart/accumulatedLastYear\", \"dashboardChart/budget\", \"clerklogin/cleanCashModalTitle\", \"clerklogin/cleanCashModalDescription\", \"toast/close-drawer\"]).then(function (translations) {\n      invalidClerk = translations[\"toast/ invalid clerk\"];\n      incorrectPass = translations[\"toast/incorrect_password\"];\n      welcome = translations[\"toast/welcome\"];\n      loggedin = translations[\"toast/you_are_logged_in\"];\n      defaultButton = translations[\"button/default\"];\n      accumulatedButton = translations[\"button/accumulated\"];\n      hourlyToday = translations[\"dashboardChart/today\"];\n      hourlyLastYear = translations[\"dashboardChart/lastYear\"];\n      accumulatedHourlyToday = translations[\"dashboardChart/accumulatedToday\"];\n      accumulatedHourlyLastYear = translations[\"dashboardChart/accumulatedLastYear\"];\n      salesTarget = translations[\"dashboardChart/budget\"];\n      cleanCashTitle = translations[\"clerklogin/cleanCashModalTitle\"];\n      cleanCashDescription = translations[\"clerklogin/cleanCashModalDescription\"];\n      closeDrawer = translations[\"toast/close-drawer\"];\n    });\n  }\n  $scope.chartOptions = {\n    legend: {\n      display: true,\n      position: \"bottom\"\n    },\n    responsive: true,\n    maintainAspectRatio: false,\n    scales: {\n      yAxes: [{\n        ticks: {\n          callback: function callback(input) {\n            return $filter(\"number\")(input, 2);\n          }\n        }\n      }]\n    },\n    tooltips: {\n      callbacks: {\n        label: function label(tooltipItem, data) {\n          var label = data.datasets[tooltipItem.datasetIndex].label || \"\";\n          if (label) {\n            label += \": \";\n          }\n          label += $filter(\"number\")(tooltipItem.yLabel, 2);\n          return label;\n        }\n      }\n    }\n  };\n  $scope.$watch(function () {\n    return clerkLoginService.isLoggedIn();\n  }, function (isLoggedIn) {\n    var options = posConfig.getOptions();\n    if (!options.buttonStates[\"receipt/totalDrawer\"] && (options.buttonStates[\"receipt/totalPercent\"] || options.buttonStates[\"receipt/totalAmount\"] || options.buttonStates[\"receipt/tenPercent\"] || options.buttonStates[\"receipt/twentyPercent\"] || options.buttonStates[\"receipt/amountDiscount\"] || options.buttonStates[\"receipt/customDiscount\"])) options.buttonStates[\"receipt/totalDrawer\"] = true;\n    $scope.hideLastSaleDetails = !isLoggedIn && options.hideLastSaleDetails;\n    $scope.hideChart = options.hideChart;\n  });\n  var logoutCountdown = 10;\n  var logouter;\n  var counter;\n  if (clerkLoginService.isLoggedIn()) {\n    $scope.currentUser = clerkLoginService.currentUser().fullName;\n    $scope.countdown = logoutCountdown - 1;\n    logouter = $timeout(function () {\n      $scope.logout();\n    }, logoutCountdown * 1000);\n    counter = $interval(function () {\n      $scope.countdown--;\n    }, 1000);\n  }\n  $scope.logout = function () {\n    clerkLoginService.logout(true);\n    $scope.currentUser = null;\n    $timeout.cancel(logouter);\n    $interval.cancel(counter);\n    getTranslations();\n    // trigger the watcher to update translations\n    $scope.isAccumulated = !!$scope.isAccumulated;\n  };\n  $scope.$on(\"$destroy\", function () {\n    $timeout.cancel(logouter);\n    $interval.cancel(counter);\n  });\n  $scope.stopCounter = function () {\n    if ($scope.countdown) $scope.logout();\n  };\n  function loginClerk() {\n    return _loginClerk.apply(this, arguments);\n  }\n  function _loginClerk() {\n    _loginClerk = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee4() {\n      var responseClerk;\n      return _regeneratorRuntime().wrap(function _callee4$(_context4) {\n        while (1) switch (_context4.prev = _context4.next) {\n          case 0:\n            if ($scope.clerkNo) {\n              _context4.next = 4;\n              break;\n            }\n            notification.pop(\"info\", invalidClerk);\n            resetState();\n            return _context4.abrupt(\"return\");\n          case 4:\n            if (!(clerkLoginService.isLoggedIn() && $scope.countdown !== 0)) {\n              _context4.next = 6;\n              break;\n            }\n            return _context4.abrupt(\"return\");\n          case 6:\n            _context4.next = 8;\n            return clerkLoginService.login($scope.clerkNo);\n          case 8:\n            responseClerk = _context4.sent;\n            clerk = responseClerk;\n            if (clerk) {\n              _context4.next = 13;\n              break;\n            }\n            notification.pop(\"info\", invalidClerk);\n            return _context4.abrupt(\"return\", resetState());\n          case 13:\n            if (clerk.passwordVerified) {\n              $scope.welcomeClerk();\n            } else {\n              $timeout(function () {\n                $scope.clerkNo = null;\n                $scope.handleInput = verifyPassword;\n                $scope.clerkLoginState = false;\n                keypadManager.hide();\n              });\n            }\n          case 14:\n          case \"end\":\n            return _context4.stop();\n        }\n      }, _callee4);\n    }));\n    return _loginClerk.apply(this, arguments);\n  }\n  function verifyPassword() {\n    $timeout(function () {\n      if (!clerk) return resetState();\n      clerkLoginService.verifyPassword(clerk, $scope.clerkPwd).then(function (isValid) {\n        if (isValid) {\n          $scope.welcomeClerk();\n        } else {\n          notification.pop(\"warning\", incorrectPass);\n          resetState();\n        }\n      });\n    });\n  }\n  $scope.resetState = function () {\n    return resetState();\n  };\n  function resetState() {\n    keypadManager.hide();\n    $scope.clerkLoginState = true;\n    $scope.clerkNo = null;\n    $scope.clerkPwd = null;\n    $scope.handleInput = loginClerk;\n    clerk = null;\n  }\n  $scope.welcomeClerk = /*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee() {\n    var canLogin, allowLogin, responseStatus, registerStatus, storedDate, today, registerResponse;\n    return _regeneratorRuntime().wrap(function _callee$(_context) {\n      while (1) switch (_context.prev = _context.next) {\n        case 0:\n          _context.next = 2;\n          return eventBus.notifyAsync(eventBus.events.pos.login);\n        case 2:\n          canLogin = _context.sent;\n          if (canLogin) {\n            _context.next = 6;\n            break;\n          }\n          notification.pop(\"warn\", closeDrawer);\n          return _context.abrupt(\"return\", resetState());\n        case 6:\n          allowLogin = false;\n          if (!clerkLoginService.checkCleanCashOptions()) {\n            _context.next = 27;\n            break;\n          }\n          _context.next = 10;\n          return clerkLoginService.checkCleanCashStatus();\n        case 10:\n          responseStatus = _context.sent;\n          clerkLoginService.checkCleanCashStatus();\n          $scope.cleanCashConfirmation = responseStatus;\n          if ($scope.cleanCashConfirmation) {\n            _context.next = 21;\n            break;\n          }\n          notification.pop(\"error\", cleanCashTitle, cleanCashDescription, 10000);\n          resetState();\n          allowLogin = false;\n          _context.next = 19;\n          return posConfig.loadConfiguration();\n        case 19:\n          _context.next = 25;\n          break;\n        case 21:\n          clerkLoginService.toggleCleanCash(true);\n          receipt.prepareReceipt();\n          posConfig.wakeUpPaymentDevices();\n          allowLogin = true;\n        case 25:\n          _context.next = 31;\n          break;\n        case 27:\n          clerkLoginService.toggleCleanCash(false);\n          receipt.prepareReceipt();\n          posConfig.wakeUpPaymentDevices();\n          allowLogin = true;\n        case 31:\n          registerStatus = $cookies.get('infraSecRegisterStatus');\n          if (!registerStatus) {\n            _context.next = 38;\n            break;\n          }\n          storedDate = new Date(registerStatus);\n          today = new Date(); // Compare ONLY the date part\n          if (storedDate.getFullYear() === today.getFullYear() && storedDate.getMonth() === today.getMonth() && storedDate.getDate() === today.getDate()) {\n            allowLogin = true;\n          }\n          _context.next = 42;\n          break;\n        case 38:\n          _context.next = 40;\n          return infrasecService.isTcsEnabled();\n        case 40:\n          registerResponse = _context.sent;\n          if (registerResponse) {\n            allowLogin = true;\n          } else {\n            allowLogin = false;\n          }\n        case 42:\n          if (allowLogin) {\n            $state.go(\"root.split.pos\");\n          }\n        case 43:\n        case \"end\":\n          return _context.stop();\n      }\n    }, _callee);\n  }));\n  $scope.getChartData = /*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee3() {\n    var options, today, todayLastYear, todayPromise, lastYearPromise, budgetPromise, results, budgetResult, todayBudget, simpleGraphing, _simpleGraphing;\n    return _regeneratorRuntime().wrap(function _callee3$(_context3) {\n      while (1) switch (_context3.prev = _context3.next) {\n        case 0:\n          _simpleGraphing = function _simpleGraphing3() {\n            _simpleGraphing = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee2(dataFunc, budgetFunc) {\n              var todayPromise, lastYearPromise, todayBudgetPromise, result;\n              return _regeneratorRuntime().wrap(function _callee2$(_context2) {\n                while (1) switch (_context2.prev = _context2.next) {\n                  case 0:\n                    todayPromise = dataFunc(today);\n                    lastYearPromise = dataFunc(todayLastYear);\n                    todayBudgetPromise = budgetFunc(today);\n                    _context2.next = 5;\n                    return $q.all([todayPromise, lastYearPromise, todayBudgetPromise]);\n                  case 5:\n                    result = _context2.sent;\n                    $scope.graphData = result;\n                    simpleBuild(result[0].data, result[1].data, result[2].data, $scope.isAccumulated);\n                  case 8:\n                  case \"end\":\n                    return _context2.stop();\n                }\n              }, _callee2);\n            }));\n            return _simpleGraphing.apply(this, arguments);\n          };\n          simpleGraphing = function _simpleGraphing2(_x, _x2) {\n            return _simpleGraphing.apply(this, arguments);\n          };\n          $scope.data = [];\n          $scope.labels = [];\n          $scope.todayBudget = null;\n          options = posConfig.getOptions();\n          if (!options.hideChart) {\n            _context3.next = 8;\n            break;\n          }\n          return _context3.abrupt(\"return\");\n        case 8:\n          today = moment();\n          todayLastYear = today.clone().subtract(1, \"y\").week(today.week()).day(today.day());\n          _context3.t0 = $scope.selectedChartType;\n          _context3.next = _context3.t0 === $scope.chartTypes.hourly ? 13 : _context3.t0 === $scope.chartTypes.weekly ? 25 : _context3.t0 === $scope.chartTypes.monthly ? 28 : _context3.t0 === $scope.chartTypes.yearly ? 31 : 34;\n          break;\n        case 13:\n          todayPromise = chartService.getSalesData(today, today);\n          lastYearPromise = chartService.getSalesData(todayLastYear, todayLastYear);\n          budgetPromise = chartService.getWeeklyBudgetsData(today);\n          _context3.next = 18;\n          return $q.all([todayPromise, lastYearPromise, budgetPromise]);\n        case 18:\n          results = _context3.sent;\n          $scope.graphData = results;\n          budgetResult = results[2].data;\n          todayBudget = budgetResult.find(function (o) {\n            return o[0] == today.date();\n          });\n          if (todayBudget) $scope.todayBudget = todayBudget[1];\n          buildGraph(results[0], results[1], $scope.isAccumulated);\n          return _context3.abrupt(\"break\", 34);\n        case 25:\n          _context3.next = 27;\n          return simpleGraphing(chartService.getWeeklySalesData, chartService.getWeeklyBudgetsData);\n        case 27:\n          return _context3.abrupt(\"break\", 34);\n        case 28:\n          _context3.next = 30;\n          return simpleGraphing(chartService.getMonthlySalesData, chartService.getMonthlyBudgetsData);\n        case 30:\n          return _context3.abrupt(\"break\", 34);\n        case 31:\n          _context3.next = 33;\n          return simpleGraphing(chartService.getYearlySalesData, chartService.getYearlyBudgetsData);\n        case 33:\n          return _context3.abrupt(\"break\", 34);\n        case 34:\n        case \"end\":\n          return _context3.stop();\n      }\n    }, _callee3);\n  }));\n  $scope.$watch(\"isAccumulated\", function (accumulated) {\n    posStorage.set(ACCUMULATED_SAVE_KEY, accumulated);\n    if (accumulated) {\n      $scope.series = [accumulatedHourlyToday, accumulatedHourlyLastYear, salesTarget];\n    } else {\n      $scope.series = [hourlyToday, hourlyLastYear, salesTarget];\n    }\n    if ($scope.graphData) {\n      switch ($scope.selectedChartType) {\n        case $scope.chartTypes.hourly:\n          buildGraph($scope.graphData[0], $scope.graphData[1], accumulated);\n          break;\n        case $scope.chartTypes.weekly:\n        case $scope.chartTypes.monthly:\n        case $scope.chartTypes.yearly:\n          simpleBuild($scope.graphData[0], $scope.graphData[1], $scope.graphData[2], accumulated);\n          break;\n      }\n    }\n  });\n  $scope.getChartData();\n  $scope.onClick = function (points, evt) {\n    $log.debug(points, evt);\n  };\n  function buildGraph(dataset1, dataset2, accumulated) {\n    function detail(array) {\n      var firstValueIndex = 0,\n        lastValueIndex = 0;\n      for (var i = 0; i < array.length; i++) {\n        if (array[i][1] && firstValueIndex) lastValueIndex = i;else if (array[i][1]) firstValueIndex = i;\n      }\n      if (lastValueIndex < firstValueIndex) lastValueIndex = firstValueIndex;\n      function transform(currentValue, index, array) {\n        if (index < firstValueIndex || lastValueIndex < index) {\n          return null;\n        }\n        return currentValue[1];\n      }\n      return array.map(transform);\n    }\n    function accumulate(array) {\n      var trimmedCopy = detail(array.slice());\n      trimEnd(trimmedCopy);\n      var result = [];\n      for (var i = 0; i < array.length; i++) {\n        if (i >= trimmedCopy.length) result.push(0);else result.push((result[i - 1] || 0) + trimmedCopy[i]);\n      }\n      return result;\n    }\n    function labels(currentValue, index, array) {\n      return currentValue[0];\n    }\n    function trimStart(arr) {\n      var itemsRemoved = 0;\n      while (!arr[0] && arr.length !== 0) {\n        // While the first element is a 0,\n        arr.shift(); // Remove that last element\n        itemsRemoved++;\n      }\n      return itemsRemoved;\n    }\n    function trimEnd(arr) {\n      var itemsRemoved = 0;\n      while (!arr[arr.length - 1] && arr.length !== 0) {\n        // While the last element is a 0,\n        arr.pop(); // Remove that last element\n        itemsRemoved++;\n      }\n      return itemsRemoved;\n    }\n    var algorithm = accumulated ? accumulate : detail;\n    var data = [{\n      serie: algorithm(dataset1),\n      trimIndex: 0\n    }, {\n      serie: algorithm(dataset2),\n      trimIndex: 0\n    }];\n    var lowestTrimIndex = dataset1.length;\n    angular.forEach(data, function (dataObject) {\n      dataObject.trimIndex = trimStart(dataObject.serie);\n      lowestTrimIndex = dataObject.trimIndex < lowestTrimIndex ? dataObject.trimIndex : lowestTrimIndex;\n    });\n    angular.forEach(data, function (dataObject) {\n      for (var i = lowestTrimIndex; i < dataObject.trimIndex; i++) {\n        dataObject.serie.unshift(0);\n      }\n    });\n    var lowestEndTrimIndex = dataset1.length;\n    angular.forEach(data, function (dataObject) {\n      var trim = trimEnd(dataObject.serie);\n      lowestEndTrimIndex = trim < lowestEndTrimIndex ? trim : lowestEndTrimIndex;\n    });\n    var graphLength = dataset1.length - lowestEndTrimIndex - lowestTrimIndex;\n    angular.forEach(data, function (dataObject) {\n      for (var i = dataObject.serie.length; i < graphLength; i++) {\n        dataObject.serie.push(0);\n      }\n    });\n    $scope.data[0] = data[0].serie;\n    $scope.data[1] = data[1].serie;\n    function isDataAvailable() {\n      return $scope.data[0].length > 0 || $scope.data[1].length > 0;\n    }\n    $scope.labels = isDataAvailable() ? dataset1.map(labels).slice(lowestTrimIndex, dataset1.length - lowestEndTrimIndex) : dataset1.map(labels);\n  }\n  function simpleBuild(todayData, lastYearData, budgetData, accumulated) {\n    var todaySerie = [];\n    var lastYearSerie = [];\n    var budgetSerie = [];\n    var labels = [];\n    if (moment().month() == 1 && todayData.length != lastYearData.length) {\n      // handle february in leap years\n      if (todayData.length > lastYearData.length) {\n        lastYearData.push([[\"29\", 0]]); // we push the 29th day into the last year array\n      } else if (todayData.length < lastYearData.length) {\n        todayData.push([[\"29\", 0]]); // if last year had 29 days in feb we push it to this years array\n      }\n    } else if (todayData.length != lastYearData.length) throw new Error(\"Not equal arrays\");\n    var todaySum = 0;\n    var lastYearSum = 0;\n    var budgetSum = 0;\n    for (var i = 0; i < todayData.length; i++) {\n      var currentBudgetData = budgetData.filter(function (o) {\n        return o[0] == todayData[i][0];\n      });\n      if (accumulated) {\n        todaySum += todayData[i][1];\n        lastYearSum += lastYearData[i][1];\n        if (currentBudgetData.length > 0) budgetSum += currentBudgetData[0][1];\n        todaySerie.push(todaySum);\n        lastYearSerie.push(lastYearSum);\n        budgetSerie.push(budgetSum);\n      } else {\n        todaySerie.push(todayData[i][1]);\n        lastYearSerie.push(lastYearData[i][1]);\n        budgetSerie.push(currentBudgetData[0][1]);\n      }\n      labels.push(todayData[i][0]);\n    }\n    $scope.labels = labels;\n    $scope.data[0] = todaySerie;\n    $scope.data[1] = lastYearSerie;\n    $scope.data[2] = budgetSerie;\n    $scope.graphData = [todayData, lastYearData, budgetData];\n  }\n  function loadConfig() {\n    $scope.posNumber = posConfig.posId;\n    $scope.posId = posConfig.posId;\n    $scope.isAccumulated = posStorage.get(ACCUMULATED_SAVE_KEY);\n  }\n  eventBus.subscribe(eventBus.events.pos.newConfig, $scope, loadConfig);\n});\n","\"use strict\";\n\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _regeneratorRuntime() { \"use strict\"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return r; }; var t, r = {}, e = Object.prototype, n = e.hasOwnProperty, o = \"function\" == typeof Symbol ? Symbol : {}, i = o.iterator || \"@@iterator\", a = o.asyncIterator || \"@@asyncIterator\", u = o.toStringTag || \"@@toStringTag\"; function c(t, r, e, n) { return Object.defineProperty(t, r, { value: e, enumerable: !n, configurable: !n, writable: !n }); } try { c({}, \"\"); } catch (t) { c = function c(t, r, e) { return t[r] = e; }; } function h(r, e, n, o) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype); return c(a, \"_invoke\", function (r, e, n) { var o = 1; return function (i, a) { if (3 === o) throw Error(\"Generator is already running\"); if (4 === o) { if (\"throw\" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var u = n.delegate; if (u) { var c = d(u, n); if (c) { if (c === f) continue; return c; } } if (\"next\" === n.method) n.sent = n._sent = n.arg;else if (\"throw\" === n.method) { if (1 === o) throw o = 4, n.arg; n.dispatchException(n.arg); } else \"return\" === n.method && n.abrupt(\"return\", n.arg); o = 3; var h = s(r, e, n); if (\"normal\" === h.type) { if (o = n.done ? 4 : 2, h.arg === f) continue; return { value: h.arg, done: n.done }; } \"throw\" === h.type && (o = 4, n.method = \"throw\", n.arg = h.arg); } }; }(r, n, new Context(o || [])), !0), a; } function s(t, r, e) { try { return { type: \"normal\", arg: t.call(r, e) }; } catch (t) { return { type: \"throw\", arg: t }; } } r.wrap = h; var f = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var l = {}; c(l, i, function () { return this; }); var p = Object.getPrototypeOf, y = p && p(p(x([]))); y && y !== e && n.call(y, i) && (l = y); var v = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(l); function g(t) { [\"next\", \"throw\", \"return\"].forEach(function (r) { c(t, r, function (t) { return this._invoke(r, t); }); }); } function AsyncIterator(t, r) { function e(o, i, a, u) { var c = s(t[o], t, i); if (\"throw\" !== c.type) { var h = c.arg, f = h.value; return f && \"object\" == _typeof(f) && n.call(f, \"__await\") ? r.resolve(f.__await).then(function (t) { e(\"next\", t, a, u); }, function (t) { e(\"throw\", t, a, u); }) : r.resolve(f).then(function (t) { h.value = t, a(h); }, function (t) { return e(\"throw\", t, a, u); }); } u(c.arg); } var o; c(this, \"_invoke\", function (t, n) { function i() { return new r(function (r, o) { e(t, n, r, o); }); } return o = o ? o.then(i, i) : i(); }, !0); } function d(r, e) { var n = e.method, o = r.i[n]; if (o === t) return e.delegate = null, \"throw\" === n && r.i[\"return\"] && (e.method = \"return\", e.arg = t, d(r, e), \"throw\" === e.method) || \"return\" !== n && (e.method = \"throw\", e.arg = new TypeError(\"The iterator does not provide a '\" + n + \"' method\")), f; var i = s(o, r.i, e.arg); if (\"throw\" === i.type) return e.method = \"throw\", e.arg = i.arg, e.delegate = null, f; var a = i.arg; return a ? a.done ? (e[r.r] = a.value, e.next = r.n, \"return\" !== e.method && (e.method = \"next\", e.arg = t), e.delegate = null, f) : a : (e.method = \"throw\", e.arg = new TypeError(\"iterator result is not an object\"), e.delegate = null, f); } function w(t) { this.tryEntries.push(t); } function m(r) { var e = r[4] || {}; e.type = \"normal\", e.arg = t, r[4] = e; } function Context(t) { this.tryEntries = [[-1]], t.forEach(w, this), this.reset(!0); } function x(r) { if (null != r) { var e = r[i]; if (e) return e.call(r); if (\"function\" == typeof r.next) return r; if (!isNaN(r.length)) { var o = -1, a = function e() { for (; ++o < r.length;) if (n.call(r, o)) return e.value = r[o], e.done = !1, e; return e.value = t, e.done = !0, e; }; return a.next = a; } } throw new TypeError(_typeof(r) + \" is not iterable\"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, c(v, \"constructor\", GeneratorFunctionPrototype), c(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction), GeneratorFunction.displayName = c(GeneratorFunctionPrototype, u, \"GeneratorFunction\"), r.isGeneratorFunction = function (t) { var r = \"function\" == typeof t && t.constructor; return !!r && (r === GeneratorFunction || \"GeneratorFunction\" === (r.displayName || r.name)); }, r.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, c(t, u, \"GeneratorFunction\")), t.prototype = Object.create(v), t; }, r.awrap = function (t) { return { __await: t }; }, g(AsyncIterator.prototype), c(AsyncIterator.prototype, a, function () { return this; }), r.AsyncIterator = AsyncIterator, r.async = function (t, e, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(h(t, e, n, o), i); return r.isGeneratorFunction(e) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, g(v), c(v, u, \"Generator\"), c(v, i, function () { return this; }), c(v, \"toString\", function () { return \"[object Generator]\"; }), r.keys = function (t) { var r = Object(t), e = []; for (var n in r) e.unshift(n); return function t() { for (; e.length;) if ((n = e.pop()) in r) return t.value = n, t.done = !1, t; return t.done = !0, t; }; }, r.values = x, Context.prototype = { constructor: Context, reset: function reset(r) { if (this.prev = this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = \"next\", this.arg = t, this.tryEntries.forEach(m), !r) for (var e in this) \"t\" === e.charAt(0) && n.call(this, e) && !isNaN(+e.slice(1)) && (this[e] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0][4]; if (\"throw\" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(r) { if (this.done) throw r; var e = this; function n(t) { a.type = \"throw\", a.arg = r, e.next = t; } for (var o = e.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i[4], u = this.prev, c = i[1], h = i[2]; if (-1 === i[0]) return n(\"end\"), !1; if (!c && !h) throw Error(\"try statement without catch or finally\"); if (null != i[0] && i[0] <= u) { if (u < c) return this.method = \"next\", this.arg = t, n(c), !0; if (u < h) return n(h), !1; } } }, abrupt: function abrupt(t, r) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var n = this.tryEntries[e]; if (n[0] > -1 && n[0] <= this.prev && this.prev < n[2]) { var o = n; break; } } o && (\"break\" === t || \"continue\" === t) && o[0] <= r && r <= o[2] && (o = null); var i = o ? o[4] : {}; return i.type = t, i.arg = r, o ? (this.method = \"next\", this.next = o[2], f) : this.complete(i); }, complete: function complete(t, r) { if (\"throw\" === t.type) throw t.arg; return \"break\" === t.type || \"continue\" === t.type ? this.next = t.arg : \"return\" === t.type ? (this.rval = this.arg = t.arg, this.method = \"return\", this.next = \"end\") : \"normal\" === t.type && r && (this.next = r), f; }, finish: function finish(t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[2] === t) return this.complete(e[4], e[3]), m(e), f; } }, \"catch\": function _catch(t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[0] === t) { var n = e[4]; if (\"throw\" === n.type) { var o = n.arg; m(e); } return o; } } throw Error(\"illegal catch attempt\"); }, delegateYield: function delegateYield(r, e, n) { return this.delegate = { i: x(r), r: e, n: n }, \"next\" === this.method && (this.arg = t), f; } }, r; }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"next\", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"throw\", n); } _next(void 0); }); }; }\n/**\n * A factory service to handle logic for logging in a clerk to the POS system.\n *\n * TODO: Persist clerks in localstorage for offline use\n * TODO: login() should try and lookup a clerk on the API if the clerk is not found in the stored list\n * @return {clerkLogin}\n */\npos.factory(\"clerkLoginService\", function ($cookies, clerkRepository, $q, $rootScope, posConfig, posInfoRepository, cleanCashService, indexdb, eventBus, posStorage) {\n  \"use strict\";\n\n  var buttonStates = null;\n  var clerkKey = \"currentUser\";\n  var clerkLogin = {\n    clerks: []\n  };\n\n  /**\n   * Login a clerk by searching in the stored list and persisting the found clerk in currentUser.\n   * @param  {userId}\n   * @return {Boolean}\n   */\n\n  clerkLogin.setLangStoreCookies = function (clerk) {\n    posConfig.setLanguage(clerk.language);\n    posStorage.set(clerkKey, clerk);\n  };\n  clerkLogin.login = function (clerkNo) {\n    return clerkRepository.api.getClerk(clerkNo).then(function (response) {\n      var clerk = response.data;\n      return initiateLogin(clerk);\n    }, /*#__PURE__*/function () {\n      var _ref = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee(errorResponse) {\n        return _regeneratorRuntime().wrap(function _callee$(_context) {\n          while (1) switch (_context.prev = _context.next) {\n            case 0:\n              _context.t0 = initiateLogin;\n              _context.next = 3;\n              return indexdb.clerks.getClerk(clerkNo);\n            case 3:\n              _context.t1 = _context.sent;\n              return _context.abrupt(\"return\", (0, _context.t0)(_context.t1));\n            case 5:\n            case \"end\":\n              return _context.stop();\n          }\n        }, _callee);\n      }));\n      return function (_x) {\n        return _ref.apply(this, arguments);\n      };\n    }());\n  };\n  function initiateLogin(clerk) {\n    if (!clerk) return null;\n    clerk.fullName = clerk.firstName + \" \" + clerk.lastName;\n    clerk.passwordVerified = !clerk.password;\n    if (clerk.passwordVerified) {\n      doLogin(clerk);\n    }\n    return clerk;\n  }\n  function doLogin(clerk) {\n    clerkLogin.setLangStoreCookies(clerk);\n    posInfoRepository.api.saveLogin(clerk);\n    posStorage.set(clerkKey, clerk);\n    clerkLogin.setButtonStates(clerk);\n    updateClerks(clerk);\n  }\n  function updateClerks(clerk) {\n    indexdb.clerks.updateClerk(clerk);\n  }\n  clerkLogin.checkCleanCashOptions = function () {\n    return cleanCashService.isCleanCashEnabled();\n  };\n  clerkLogin.checkCleanCashStatus = function () {\n    return cleanCashService.canConnectToCleanCash();\n  };\n  clerkLogin.toggleCleanCash = function (status) {\n    cleanCashService.toogleCleanCashStatus(status);\n  };\n  clerkLogin.verifyPassword = /*#__PURE__*/function () {\n    var _ref2 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee2(clerk, password) {\n      var hash;\n      return _regeneratorRuntime().wrap(function _callee2$(_context2) {\n        while (1) switch (_context2.prev = _context2.next) {\n          case 0:\n            _context2.next = 2;\n            return sha256(clerk.identifier, password);\n          case 2:\n            hash = _context2.sent;\n            if (!(clerk.password === hash)) {\n              _context2.next = 6;\n              break;\n            }\n            doLogin(clerk);\n            return _context2.abrupt(\"return\", true);\n          case 6:\n            clerkLogin.logout();\n            return _context2.abrupt(\"return\", false);\n          case 8:\n          case \"end\":\n            return _context2.stop();\n        }\n      }, _callee2);\n    }));\n    return function (_x2, _x3) {\n      return _ref2.apply(this, arguments);\n    };\n  }();\n\n  /**\n   * Logout by removing the currentUser from the cookie\n   * @return {currentUser}\n   */\n  clerkLogin.logout = function (disableBroadcast) {\n    posStorage.remove(clerkKey);\n    buttonStates = null;\n    posConfig.resetLanguage();\n    if (disableBroadcast) return;\n    $rootScope.$broadcast(\"clerklogin:logout\");\n  };\n  /**\n   * Returns a boolean to tell if anyone is logged in. Can be used to decide if a Logout button should be shown instead of login\n   * @return {Boolean}\n   */\n  clerkLogin.isLoggedIn = function () {\n    return posStorage.get(clerkKey);\n  };\n\n  /**\n   * Get the user object for the current logged in clerk\n   * @return {currentUser}\n   */\n  clerkLogin.currentUser = function () {\n    return posStorage.get(clerkKey);\n  };\n  clerkLogin.getClerk = /*#__PURE__*/function () {\n    var _ref3 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee3(clerkNo) {\n      var clerk, response;\n      return _regeneratorRuntime().wrap(function _callee3$(_context3) {\n        while (1) switch (_context3.prev = _context3.next) {\n          case 0:\n            _context3.next = 2;\n            return indexdb.clerks.getClerk(clerkNo);\n          case 2:\n            clerk = _context3.sent;\n            if (!clerk) {\n              _context3.next = 5;\n              break;\n            }\n            return _context3.abrupt(\"return\", clerk);\n          case 5:\n            _context3.next = 7;\n            return clerkRepository.api.getClerk(clerkNo);\n          case 7:\n            response = _context3.sent;\n            updateClerks(response.data);\n            return _context3.abrupt(\"return\", response.data);\n          case 10:\n          case \"end\":\n            return _context3.stop();\n        }\n      }, _callee3);\n    }));\n    return function (_x4) {\n      return _ref3.apply(this, arguments);\n    };\n  }();\n  clerkLogin.getButtonStates = function () {\n    if (buttonStates) {\n      return buttonStates;\n    }\n    var clerk = clerkLogin.currentUser();\n    return clerkLogin.setButtonStates(clerk);\n  };\n  clerkLogin.setButtonStates = function (clerk) {\n    if (!clerk || !clerk.hasOwnProperty(\"roleId\")) return posConfig.getOptions().buttonStates;\n    var clerkRole = posConfig.getRole(clerk.roleId);\n    // If clerk is assigned to a role that does no longer exist\n    if (!clerkRole || !clerkRole.hasOwnProperty(\"buttonStates\")) return posConfig.getOptions().buttonStates;\n    buttonStates = clerkRole.buttonStates;\n    return clerkRole.buttonStates;\n  };\n  clerkLogin.startManagerVerification = function () {\n    if (clerkLogin.currentUser().isManager) {\n      return $q.resolve();\n    }\n    var flowDeferred = $q.defer();\n    eventBus.notify(eventBus.events.pos.managerVerificationRequested);\n    var eventPointer = eventBus.subscribe(eventBus.events.pos.managerVerificationResponse, null, function (ev, credentials) {\n      if (credentials) {\n        clerkLogin.getClerk(credentials.clerkNo).then(function (clerk) {\n          return validateClerk(clerk, credentials);\n        }, function () {\n          return flowDeferred.reject();\n        });\n      } else {\n        flowDeferred.reject();\n      }\n      eventPointer();\n    });\n    var validateClerk = /*#__PURE__*/function () {\n      var _ref4 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee4(clerk, credentials) {\n        var correctPassword, hashedInput;\n        return _regeneratorRuntime().wrap(function _callee4$(_context4) {\n          while (1) switch (_context4.prev = _context4.next) {\n            case 0:\n              correctPassword = clerk.password || \"\";\n              _context4.next = 3;\n              return sha256(clerk.identifier, credentials.pin);\n            case 3:\n              hashedInput = _context4.sent;\n              if (clerk && clerk.isManager && correctPassword == hashedInput) flowDeferred.resolve();else flowDeferred.reject();\n            case 5:\n            case \"end\":\n              return _context4.stop();\n          }\n        }, _callee4);\n      }));\n      return function validateClerk(_x5, _x6) {\n        return _ref4.apply(this, arguments);\n      };\n    }();\n    return flowDeferred.promise;\n  };\n  clerkLogin.startClerkVerification = function () {\n    var flowDeferred = $q.defer();\n    eventBus.notify(eventBus.events.pos.clerkVerificationRequested);\n    var eventPointer = eventBus.subscribe(eventBus.events.pos.clerkVerificationResponse, null, function (ev, credentials) {\n      if (credentials) {\n        clerkLogin.getClerk(credentials.clerkNo).then(function (clerk) {\n          return validateClerk(clerk, credentials);\n        }, function () {\n          return flowDeferred.reject();\n        });\n      } else {\n        flowDeferred.reject();\n      }\n      eventPointer();\n    });\n    var validateClerk = /*#__PURE__*/function () {\n      var _ref5 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee5(clerk, credentials) {\n        var correctPassword, hashedInput;\n        return _regeneratorRuntime().wrap(function _callee5$(_context5) {\n          while (1) switch (_context5.prev = _context5.next) {\n            case 0:\n              if (!(!clerk.password || clerk.password == \"\" && credentials.pin == \"\")) {\n                _context5.next = 4;\n                break;\n              }\n              flowDeferred.resolve(clerk);\n              _context5.next = 9;\n              break;\n            case 4:\n              correctPassword = clerk.password || \"\";\n              _context5.next = 7;\n              return sha256(clerk.identifier, credentials.pin);\n            case 7:\n              hashedInput = _context5.sent;\n              if (clerk && correctPassword == hashedInput) {\n                flowDeferred.resolve(clerk);\n              } else {\n                flowDeferred.reject();\n              }\n            case 9:\n            case \"end\":\n              return _context5.stop();\n          }\n        }, _callee5);\n      }));\n      return function validateClerk(_x7, _x8) {\n        return _ref5.apply(this, arguments);\n      };\n    }();\n    return flowDeferred.promise;\n  };\n\n  // redirect to login page if not logged in, unless it's a route that doesn't require login\n  var noAuthStates = [\"root.login\", \"root.settings\", \"debug\", \"invalidTabs\"];\n  $rootScope.$on(\"$stateChangeStart\", function (event, toState, toParams, fromState, fromParams) {\n    if (!clerkLogin.isLoggedIn() && noAuthStates.indexOf(toState.name) === -1) {\n      event.preventDefault();\n      $rootScope.$state.go(\"root.login\");\n    }\n  });\n  function sha256(_x9, _x0) {\n    return _sha.apply(this, arguments);\n  }\n  function _sha() {\n    _sha = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee6(clerkId, clearTextPassword) {\n      var message, buf, msgBuffer, i, strLen, hashBuffer, hashArray, hashHex;\n      return _regeneratorRuntime().wrap(function _callee6$(_context6) {\n        while (1) switch (_context6.prev = _context6.next) {\n          case 0:\n            // encode as UTF-16\n            message = \"\".concat(clerkId, \".\").concat(clearTextPassword);\n            buf = new ArrayBuffer(message.length * 2);\n            msgBuffer = new Uint16Array(buf);\n            for (i = 0, strLen = message.length; i < strLen; i++) {\n              msgBuffer[i] = message.charCodeAt(i);\n            }\n\n            // hash the message\n            _context6.next = 6;\n            return crypto.subtle.digest(\"SHA-256\", msgBuffer);\n          case 6:\n            hashBuffer = _context6.sent;\n            // convert ArrayBuffer to Array\n            hashArray = Array.from(new Uint8Array(hashBuffer)); // convert bytes to hex string\n            hashHex = hashArray.map(function (b) {\n              return (\"00\" + b.toString(16)).slice(-2);\n            }).join(\"\");\n            return _context6.abrupt(\"return\", hashHex.toUpperCase());\n          case 10:\n          case \"end\":\n            return _context6.stop();\n        }\n      }, _callee6);\n    }));\n    return _sha.apply(this, arguments);\n  }\n  return clerkLogin;\n});\n","\"use strict\";\n\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _regeneratorRuntime() { \"use strict\"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return r; }; var t, r = {}, e = Object.prototype, n = e.hasOwnProperty, o = \"function\" == typeof Symbol ? Symbol : {}, i = o.iterator || \"@@iterator\", a = o.asyncIterator || \"@@asyncIterator\", u = o.toStringTag || \"@@toStringTag\"; function c(t, r, e, n) { return Object.defineProperty(t, r, { value: e, enumerable: !n, configurable: !n, writable: !n }); } try { c({}, \"\"); } catch (t) { c = function c(t, r, e) { return t[r] = e; }; } function h(r, e, n, o) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype); return c(a, \"_invoke\", function (r, e, n) { var o = 1; return function (i, a) { if (3 === o) throw Error(\"Generator is already running\"); if (4 === o) { if (\"throw\" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var u = n.delegate; if (u) { var c = d(u, n); if (c) { if (c === f) continue; return c; } } if (\"next\" === n.method) n.sent = n._sent = n.arg;else if (\"throw\" === n.method) { if (1 === o) throw o = 4, n.arg; n.dispatchException(n.arg); } else \"return\" === n.method && n.abrupt(\"return\", n.arg); o = 3; var h = s(r, e, n); if (\"normal\" === h.type) { if (o = n.done ? 4 : 2, h.arg === f) continue; return { value: h.arg, done: n.done }; } \"throw\" === h.type && (o = 4, n.method = \"throw\", n.arg = h.arg); } }; }(r, n, new Context(o || [])), !0), a; } function s(t, r, e) { try { return { type: \"normal\", arg: t.call(r, e) }; } catch (t) { return { type: \"throw\", arg: t }; } } r.wrap = h; var f = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var l = {}; c(l, i, function () { return this; }); var p = Object.getPrototypeOf, y = p && p(p(x([]))); y && y !== e && n.call(y, i) && (l = y); var v = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(l); function g(t) { [\"next\", \"throw\", \"return\"].forEach(function (r) { c(t, r, function (t) { return this._invoke(r, t); }); }); } function AsyncIterator(t, r) { function e(o, i, a, u) { var c = s(t[o], t, i); if (\"throw\" !== c.type) { var h = c.arg, f = h.value; return f && \"object\" == _typeof(f) && n.call(f, \"__await\") ? r.resolve(f.__await).then(function (t) { e(\"next\", t, a, u); }, function (t) { e(\"throw\", t, a, u); }) : r.resolve(f).then(function (t) { h.value = t, a(h); }, function (t) { return e(\"throw\", t, a, u); }); } u(c.arg); } var o; c(this, \"_invoke\", function (t, n) { function i() { return new r(function (r, o) { e(t, n, r, o); }); } return o = o ? o.then(i, i) : i(); }, !0); } function d(r, e) { var n = e.method, o = r.i[n]; if (o === t) return e.delegate = null, \"throw\" === n && r.i[\"return\"] && (e.method = \"return\", e.arg = t, d(r, e), \"throw\" === e.method) || \"return\" !== n && (e.method = \"throw\", e.arg = new TypeError(\"The iterator does not provide a '\" + n + \"' method\")), f; var i = s(o, r.i, e.arg); if (\"throw\" === i.type) return e.method = \"throw\", e.arg = i.arg, e.delegate = null, f; var a = i.arg; return a ? a.done ? (e[r.r] = a.value, e.next = r.n, \"return\" !== e.method && (e.method = \"next\", e.arg = t), e.delegate = null, f) : a : (e.method = \"throw\", e.arg = new TypeError(\"iterator result is not an object\"), e.delegate = null, f); } function w(t) { this.tryEntries.push(t); } function m(r) { var e = r[4] || {}; e.type = \"normal\", e.arg = t, r[4] = e; } function Context(t) { this.tryEntries = [[-1]], t.forEach(w, this), this.reset(!0); } function x(r) { if (null != r) { var e = r[i]; if (e) return e.call(r); if (\"function\" == typeof r.next) return r; if (!isNaN(r.length)) { var o = -1, a = function e() { for (; ++o < r.length;) if (n.call(r, o)) return e.value = r[o], e.done = !1, e; return e.value = t, e.done = !0, e; }; return a.next = a; } } throw new TypeError(_typeof(r) + \" is not iterable\"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, c(v, \"constructor\", GeneratorFunctionPrototype), c(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction), GeneratorFunction.displayName = c(GeneratorFunctionPrototype, u, \"GeneratorFunction\"), r.isGeneratorFunction = function (t) { var r = \"function\" == typeof t && t.constructor; return !!r && (r === GeneratorFunction || \"GeneratorFunction\" === (r.displayName || r.name)); }, r.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, c(t, u, \"GeneratorFunction\")), t.prototype = Object.create(v), t; }, r.awrap = function (t) { return { __await: t }; }, g(AsyncIterator.prototype), c(AsyncIterator.prototype, a, function () { return this; }), r.AsyncIterator = AsyncIterator, r.async = function (t, e, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(h(t, e, n, o), i); return r.isGeneratorFunction(e) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, g(v), c(v, u, \"Generator\"), c(v, i, function () { return this; }), c(v, \"toString\", function () { return \"[object Generator]\"; }), r.keys = function (t) { var r = Object(t), e = []; for (var n in r) e.unshift(n); return function t() { for (; e.length;) if ((n = e.pop()) in r) return t.value = n, t.done = !1, t; return t.done = !0, t; }; }, r.values = x, Context.prototype = { constructor: Context, reset: function reset(r) { if (this.prev = this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = \"next\", this.arg = t, this.tryEntries.forEach(m), !r) for (var e in this) \"t\" === e.charAt(0) && n.call(this, e) && !isNaN(+e.slice(1)) && (this[e] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0][4]; if (\"throw\" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(r) { if (this.done) throw r; var e = this; function n(t) { a.type = \"throw\", a.arg = r, e.next = t; } for (var o = e.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i[4], u = this.prev, c = i[1], h = i[2]; if (-1 === i[0]) return n(\"end\"), !1; if (!c && !h) throw Error(\"try statement without catch or finally\"); if (null != i[0] && i[0] <= u) { if (u < c) return this.method = \"next\", this.arg = t, n(c), !0; if (u < h) return n(h), !1; } } }, abrupt: function abrupt(t, r) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var n = this.tryEntries[e]; if (n[0] > -1 && n[0] <= this.prev && this.prev < n[2]) { var o = n; break; } } o && (\"break\" === t || \"continue\" === t) && o[0] <= r && r <= o[2] && (o = null); var i = o ? o[4] : {}; return i.type = t, i.arg = r, o ? (this.method = \"next\", this.next = o[2], f) : this.complete(i); }, complete: function complete(t, r) { if (\"throw\" === t.type) throw t.arg; return \"break\" === t.type || \"continue\" === t.type ? this.next = t.arg : \"return\" === t.type ? (this.rval = this.arg = t.arg, this.method = \"return\", this.next = \"end\") : \"normal\" === t.type && r && (this.next = r), f; }, finish: function finish(t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[2] === t) return this.complete(e[4], e[3]), m(e), f; } }, \"catch\": function _catch(t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[0] === t) { var n = e[4]; if (\"throw\" === n.type) { var o = n.arg; m(e); } return o; } } throw Error(\"illegal catch attempt\"); }, delegateYield: function delegateYield(r, e, n) { return this.delegate = { i: x(r), r: e, n: n }, \"next\" === this.method && (this.arg = t), f; } }, r; }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"next\", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"throw\", n); } _next(void 0); }); }; }\npos.directive(\"giftaidModal\", [\"eventBus\", function (eventBus) {\n  var controller = function controller($scope, notification, $translate, keypadManager) {\n    var i18nErrorInput;\n    init();\n    function init() {\n      return _init.apply(this, arguments);\n    }\n    function _init() {\n      _init = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee() {\n        return _regeneratorRuntime().wrap(function _callee$(_context) {\n          while (1) switch (_context.prev = _context.next) {\n            case 0:\n              _context.next = 2;\n              return $translate(\"giftaid/error/notallfieldsarefilled\");\n            case 2:\n              i18nErrorInput = _context.sent;\n            case 3:\n            case \"end\":\n              return _context.stop();\n          }\n        }, _callee);\n      }));\n      return _init.apply(this, arguments);\n    }\n    $scope.action = function (btn) {\n      if (btn.save) {\n        if (!$scope.content.details.title || !$scope.content.details.firstName || !$scope.content.details.lastName || !$scope.content.details.houseNumber || !$scope.content.details.postalCode) {\n          notification.pop(\"warning\", i18nErrorInput);\n          return;\n        }\n      }\n      if (btn.closes) {\n        btn.action($scope.content.details);\n        $scope.content.isVisible = false;\n      }\n    };\n    $scope.defaultAction = function () {\n      keypadManager.hide();\n    };\n  };\n  return {\n    templateUrl: \"views/posModal/giftaidModal-directive\",\n    controller: controller,\n    scope: {\n      content: \"=\"\n    }\n  };\n}]);\n","\"use strict\";\n\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _regeneratorRuntime() { \"use strict\"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return r; }; var t, r = {}, e = Object.prototype, n = e.hasOwnProperty, o = \"function\" == typeof Symbol ? Symbol : {}, i = o.iterator || \"@@iterator\", a = o.asyncIterator || \"@@asyncIterator\", u = o.toStringTag || \"@@toStringTag\"; function c(t, r, e, n) { return Object.defineProperty(t, r, { value: e, enumerable: !n, configurable: !n, writable: !n }); } try { c({}, \"\"); } catch (t) { c = function c(t, r, e) { return t[r] = e; }; } function h(r, e, n, o) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype); return c(a, \"_invoke\", function (r, e, n) { var o = 1; return function (i, a) { if (3 === o) throw Error(\"Generator is already running\"); if (4 === o) { if (\"throw\" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var u = n.delegate; if (u) { var c = d(u, n); if (c) { if (c === f) continue; return c; } } if (\"next\" === n.method) n.sent = n._sent = n.arg;else if (\"throw\" === n.method) { if (1 === o) throw o = 4, n.arg; n.dispatchException(n.arg); } else \"return\" === n.method && n.abrupt(\"return\", n.arg); o = 3; var h = s(r, e, n); if (\"normal\" === h.type) { if (o = n.done ? 4 : 2, h.arg === f) continue; return { value: h.arg, done: n.done }; } \"throw\" === h.type && (o = 4, n.method = \"throw\", n.arg = h.arg); } }; }(r, n, new Context(o || [])), !0), a; } function s(t, r, e) { try { return { type: \"normal\", arg: t.call(r, e) }; } catch (t) { return { type: \"throw\", arg: t }; } } r.wrap = h; var f = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var l = {}; c(l, i, function () { return this; }); var p = Object.getPrototypeOf, y = p && p(p(x([]))); y && y !== e && n.call(y, i) && (l = y); var v = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(l); function g(t) { [\"next\", \"throw\", \"return\"].forEach(function (r) { c(t, r, function (t) { return this._invoke(r, t); }); }); } function AsyncIterator(t, r) { function e(o, i, a, u) { var c = s(t[o], t, i); if (\"throw\" !== c.type) { var h = c.arg, f = h.value; return f && \"object\" == _typeof(f) && n.call(f, \"__await\") ? r.resolve(f.__await).then(function (t) { e(\"next\", t, a, u); }, function (t) { e(\"throw\", t, a, u); }) : r.resolve(f).then(function (t) { h.value = t, a(h); }, function (t) { return e(\"throw\", t, a, u); }); } u(c.arg); } var o; c(this, \"_invoke\", function (t, n) { function i() { return new r(function (r, o) { e(t, n, r, o); }); } return o = o ? o.then(i, i) : i(); }, !0); } function d(r, e) { var n = e.method, o = r.i[n]; if (o === t) return e.delegate = null, \"throw\" === n && r.i[\"return\"] && (e.method = \"return\", e.arg = t, d(r, e), \"throw\" === e.method) || \"return\" !== n && (e.method = \"throw\", e.arg = new TypeError(\"The iterator does not provide a '\" + n + \"' method\")), f; var i = s(o, r.i, e.arg); if (\"throw\" === i.type) return e.method = \"throw\", e.arg = i.arg, e.delegate = null, f; var a = i.arg; return a ? a.done ? (e[r.r] = a.value, e.next = r.n, \"return\" !== e.method && (e.method = \"next\", e.arg = t), e.delegate = null, f) : a : (e.method = \"throw\", e.arg = new TypeError(\"iterator result is not an object\"), e.delegate = null, f); } function w(t) { this.tryEntries.push(t); } function m(r) { var e = r[4] || {}; e.type = \"normal\", e.arg = t, r[4] = e; } function Context(t) { this.tryEntries = [[-1]], t.forEach(w, this), this.reset(!0); } function x(r) { if (null != r) { var e = r[i]; if (e) return e.call(r); if (\"function\" == typeof r.next) return r; if (!isNaN(r.length)) { var o = -1, a = function e() { for (; ++o < r.length;) if (n.call(r, o)) return e.value = r[o], e.done = !1, e; return e.value = t, e.done = !0, e; }; return a.next = a; } } throw new TypeError(_typeof(r) + \" is not iterable\"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, c(v, \"constructor\", GeneratorFunctionPrototype), c(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction), GeneratorFunction.displayName = c(GeneratorFunctionPrototype, u, \"GeneratorFunction\"), r.isGeneratorFunction = function (t) { var r = \"function\" == typeof t && t.constructor; return !!r && (r === GeneratorFunction || \"GeneratorFunction\" === (r.displayName || r.name)); }, r.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, c(t, u, \"GeneratorFunction\")), t.prototype = Object.create(v), t; }, r.awrap = function (t) { return { __await: t }; }, g(AsyncIterator.prototype), c(AsyncIterator.prototype, a, function () { return this; }), r.AsyncIterator = AsyncIterator, r.async = function (t, e, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(h(t, e, n, o), i); return r.isGeneratorFunction(e) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, g(v), c(v, u, \"Generator\"), c(v, i, function () { return this; }), c(v, \"toString\", function () { return \"[object Generator]\"; }), r.keys = function (t) { var r = Object(t), e = []; for (var n in r) e.unshift(n); return function t() { for (; e.length;) if ((n = e.pop()) in r) return t.value = n, t.done = !1, t; return t.done = !0, t; }; }, r.values = x, Context.prototype = { constructor: Context, reset: function reset(r) { if (this.prev = this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = \"next\", this.arg = t, this.tryEntries.forEach(m), !r) for (var e in this) \"t\" === e.charAt(0) && n.call(this, e) && !isNaN(+e.slice(1)) && (this[e] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0][4]; if (\"throw\" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(r) { if (this.done) throw r; var e = this; function n(t) { a.type = \"throw\", a.arg = r, e.next = t; } for (var o = e.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i[4], u = this.prev, c = i[1], h = i[2]; if (-1 === i[0]) return n(\"end\"), !1; if (!c && !h) throw Error(\"try statement without catch or finally\"); if (null != i[0] && i[0] <= u) { if (u < c) return this.method = \"next\", this.arg = t, n(c), !0; if (u < h) return n(h), !1; } } }, abrupt: function abrupt(t, r) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var n = this.tryEntries[e]; if (n[0] > -1 && n[0] <= this.prev && this.prev < n[2]) { var o = n; break; } } o && (\"break\" === t || \"continue\" === t) && o[0] <= r && r <= o[2] && (o = null); var i = o ? o[4] : {}; return i.type = t, i.arg = r, o ? (this.method = \"next\", this.next = o[2], f) : this.complete(i); }, complete: function complete(t, r) { if (\"throw\" === t.type) throw t.arg; return \"break\" === t.type || \"continue\" === t.type ? this.next = t.arg : \"return\" === t.type ? (this.rval = this.arg = t.arg, this.method = \"return\", this.next = \"end\") : \"normal\" === t.type && r && (this.next = r), f; }, finish: function finish(t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[2] === t) return this.complete(e[4], e[3]), m(e), f; } }, \"catch\": function _catch(t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[0] === t) { var n = e[4]; if (\"throw\" === n.type) { var o = n.arg; m(e); } return o; } } throw Error(\"illegal catch attempt\"); }, delegateYield: function delegateYield(r, e, n) { return this.delegate = { i: x(r), r: e, n: n }, \"next\" === this.method && (this.arg = t), f; } }, r; }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"next\", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"throw\", n); } _next(void 0); }); }; }\npos.directive(\"posModal\", [\"eventBus\", function (eventBus) {\n  var controller = function controller($scope, notification, $translate) {\n    var i18nErrorInputLength;\n    var i18nErrorInputValueFormat;\n    var i18nErrorInputValueRange;\n    $scope.vm = {\n      inputText: \"\"\n    };\n    init(eventBus.subscribe(eventBus.events.toaster.clicked, null, function (ev, value) {\n      $scope.vm.inputText = \"\";\n    }));\n    function init() {\n      return _init.apply(this, arguments);\n    }\n    function _init() {\n      _init = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee() {\n        var _$scope$content;\n        var _$scope$content2;\n        return _regeneratorRuntime().wrap(function _callee$(_context) {\n          while (1) switch (_context.prev = _context.next) {\n            case 0:\n              _context.next = 2;\n              return $translate(\"toast/error_inputlength\");\n            case 2:\n              i18nErrorInputLength = _context.sent;\n              _context.next = 5;\n              return $translate(\"toast/error_value_format\");\n            case 5:\n              i18nErrorInputValueFormat = _context.sent;\n              _context.next = 8;\n              return $translate(\"toast/error_value_range\");\n            case 8:\n              i18nErrorInputValueRange = _context.sent;\n              if ((_$scope$content = $scope.content) !== null && _$scope$content !== void 0 && _$scope$content.prefilledValue) {\n                $scope.vm.inputText = (_$scope$content2 = $scope.content) === null || _$scope$content2 === void 0 ? void 0 : _$scope$content2.prefilledValue;\n              }\n            case 10:\n            case \"end\":\n              return _context.stop();\n          }\n        }, _callee);\n      }));\n      return _init.apply(this, arguments);\n    }\n    $scope.action = function (btn) {\n      if (btn.cancel) {\n        $scope.content.isVisible = false;\n        btn.action();\n        return;\n      }\n      if (btn.validateText && $scope.content.inputMin != undefined && $scope.vm.inputText.length < $scope.content.inputMin) {\n        notification.pop(\"warning\", i18nErrorInputLength);\n        return;\n      }\n      if (btn.validateText && $scope.content.validationPattern) {\n        var regex = new RegExp($scope.vm.validationPattern);\n        if (!regex.test($scope.vm.inputText)) {\n          notification.pop(\"warning\", $scope.vm.patternErrorMessage);\n          return;\n        }\n      }\n      if ($scope.content.isValueInput) {\n        var value = Number($scope.vm.inputText);\n        if (!value) {\n          notification.pop(\"warning\", i18nErrorInputValueFormat);\n          return;\n        }\n        var min = Number($scope.content.minValueInput);\n        var max = Number($scope.content.maxValueInput);\n        if (min >= 0 && max >= min) {\n          if (value < min || value > max) {\n            notification.pop(\"warning\", i18nErrorInputValueRange + $scope.content.minValueInput.toFixed(2) + \" - \" + $scope.content.maxValueInput.toFixed(2));\n            return;\n          }\n        }\n      }\n      if ($scope.vm.inputText) {\n        btn.action($scope.vm.inputText);\n      } else {\n        btn.action();\n      }\n      if (btn.closes) {\n        $scope.content.isVisible = false;\n      } else {\n        $scope.vm.inputText = \"\";\n      }\n    };\n    $scope.defaultAction = function () {\n      var defaultBtn = $scope.content.buttons.find(function (o) {\n        return o.isDefault;\n      });\n      if (defaultBtn) {\n        $scope.action(defaultBtn);\n      }\n    };\n    $scope.$watch(\"vm.inputText\", function (newVal, oldVal) {\n      if ($scope.content.allowedCharacters && newVal) {\n        var newChar = newVal[newVal.length - 1];\n        if (!$scope.content.allowedCharacters.includes(newChar)) {\n          $scope.vm.inputText = oldVal;\n        }\n      }\n      if ($scope.content.inputMax != undefined && newVal.length > $scope.content.inputMax) {\n        $scope.vm.inputText = oldVal;\n      }\n    });\n  };\n  return {\n    templateUrl: \"views/posModal/posModal-directive\",\n    controller: controller,\n    transclude: true,\n    link: function link(scope, element, attrs) {\n      eventBus.subscribe(eventBus.events.pos.modalInputFocusRequested, scope, function () {\n        var inputs = element[0].querySelector(\"input\");\n        inputs.focus();\n      });\n    },\n    scope: {\n      content: \"=\"\n    }\n  };\n}]);\n","\"use strict\";\n\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _regeneratorRuntime() { \"use strict\"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return r; }; var t, r = {}, e = Object.prototype, n = e.hasOwnProperty, o = \"function\" == typeof Symbol ? Symbol : {}, i = o.iterator || \"@@iterator\", a = o.asyncIterator || \"@@asyncIterator\", u = o.toStringTag || \"@@toStringTag\"; function c(t, r, e, n) { return Object.defineProperty(t, r, { value: e, enumerable: !n, configurable: !n, writable: !n }); } try { c({}, \"\"); } catch (t) { c = function c(t, r, e) { return t[r] = e; }; } function h(r, e, n, o) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype); return c(a, \"_invoke\", function (r, e, n) { var o = 1; return function (i, a) { if (3 === o) throw Error(\"Generator is already running\"); if (4 === o) { if (\"throw\" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var u = n.delegate; if (u) { var c = d(u, n); if (c) { if (c === f) continue; return c; } } if (\"next\" === n.method) n.sent = n._sent = n.arg;else if (\"throw\" === n.method) { if (1 === o) throw o = 4, n.arg; n.dispatchException(n.arg); } else \"return\" === n.method && n.abrupt(\"return\", n.arg); o = 3; var h = s(r, e, n); if (\"normal\" === h.type) { if (o = n.done ? 4 : 2, h.arg === f) continue; return { value: h.arg, done: n.done }; } \"throw\" === h.type && (o = 4, n.method = \"throw\", n.arg = h.arg); } }; }(r, n, new Context(o || [])), !0), a; } function s(t, r, e) { try { return { type: \"normal\", arg: t.call(r, e) }; } catch (t) { return { type: \"throw\", arg: t }; } } r.wrap = h; var f = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var l = {}; c(l, i, function () { return this; }); var p = Object.getPrototypeOf, y = p && p(p(x([]))); y && y !== e && n.call(y, i) && (l = y); var v = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(l); function g(t) { [\"next\", \"throw\", \"return\"].forEach(function (r) { c(t, r, function (t) { return this._invoke(r, t); }); }); } function AsyncIterator(t, r) { function e(o, i, a, u) { var c = s(t[o], t, i); if (\"throw\" !== c.type) { var h = c.arg, f = h.value; return f && \"object\" == _typeof(f) && n.call(f, \"__await\") ? r.resolve(f.__await).then(function (t) { e(\"next\", t, a, u); }, function (t) { e(\"throw\", t, a, u); }) : r.resolve(f).then(function (t) { h.value = t, a(h); }, function (t) { return e(\"throw\", t, a, u); }); } u(c.arg); } var o; c(this, \"_invoke\", function (t, n) { function i() { return new r(function (r, o) { e(t, n, r, o); }); } return o = o ? o.then(i, i) : i(); }, !0); } function d(r, e) { var n = e.method, o = r.i[n]; if (o === t) return e.delegate = null, \"throw\" === n && r.i[\"return\"] && (e.method = \"return\", e.arg = t, d(r, e), \"throw\" === e.method) || \"return\" !== n && (e.method = \"throw\", e.arg = new TypeError(\"The iterator does not provide a '\" + n + \"' method\")), f; var i = s(o, r.i, e.arg); if (\"throw\" === i.type) return e.method = \"throw\", e.arg = i.arg, e.delegate = null, f; var a = i.arg; return a ? a.done ? (e[r.r] = a.value, e.next = r.n, \"return\" !== e.method && (e.method = \"next\", e.arg = t), e.delegate = null, f) : a : (e.method = \"throw\", e.arg = new TypeError(\"iterator result is not an object\"), e.delegate = null, f); } function w(t) { this.tryEntries.push(t); } function m(r) { var e = r[4] || {}; e.type = \"normal\", e.arg = t, r[4] = e; } function Context(t) { this.tryEntries = [[-1]], t.forEach(w, this), this.reset(!0); } function x(r) { if (null != r) { var e = r[i]; if (e) return e.call(r); if (\"function\" == typeof r.next) return r; if (!isNaN(r.length)) { var o = -1, a = function e() { for (; ++o < r.length;) if (n.call(r, o)) return e.value = r[o], e.done = !1, e; return e.value = t, e.done = !0, e; }; return a.next = a; } } throw new TypeError(_typeof(r) + \" is not iterable\"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, c(v, \"constructor\", GeneratorFunctionPrototype), c(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction), GeneratorFunction.displayName = c(GeneratorFunctionPrototype, u, \"GeneratorFunction\"), r.isGeneratorFunction = function (t) { var r = \"function\" == typeof t && t.constructor; return !!r && (r === GeneratorFunction || \"GeneratorFunction\" === (r.displayName || r.name)); }, r.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, c(t, u, \"GeneratorFunction\")), t.prototype = Object.create(v), t; }, r.awrap = function (t) { return { __await: t }; }, g(AsyncIterator.prototype), c(AsyncIterator.prototype, a, function () { return this; }), r.AsyncIterator = AsyncIterator, r.async = function (t, e, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(h(t, e, n, o), i); return r.isGeneratorFunction(e) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, g(v), c(v, u, \"Generator\"), c(v, i, function () { return this; }), c(v, \"toString\", function () { return \"[object Generator]\"; }), r.keys = function (t) { var r = Object(t), e = []; for (var n in r) e.unshift(n); return function t() { for (; e.length;) if ((n = e.pop()) in r) return t.value = n, t.done = !1, t; return t.done = !0, t; }; }, r.values = x, Context.prototype = { constructor: Context, reset: function reset(r) { if (this.prev = this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = \"next\", this.arg = t, this.tryEntries.forEach(m), !r) for (var e in this) \"t\" === e.charAt(0) && n.call(this, e) && !isNaN(+e.slice(1)) && (this[e] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0][4]; if (\"throw\" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(r) { if (this.done) throw r; var e = this; function n(t) { a.type = \"throw\", a.arg = r, e.next = t; } for (var o = e.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i[4], u = this.prev, c = i[1], h = i[2]; if (-1 === i[0]) return n(\"end\"), !1; if (!c && !h) throw Error(\"try statement without catch or finally\"); if (null != i[0] && i[0] <= u) { if (u < c) return this.method = \"next\", this.arg = t, n(c), !0; if (u < h) return n(h), !1; } } }, abrupt: function abrupt(t, r) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var n = this.tryEntries[e]; if (n[0] > -1 && n[0] <= this.prev && this.prev < n[2]) { var o = n; break; } } o && (\"break\" === t || \"continue\" === t) && o[0] <= r && r <= o[2] && (o = null); var i = o ? o[4] : {}; return i.type = t, i.arg = r, o ? (this.method = \"next\", this.next = o[2], f) : this.complete(i); }, complete: function complete(t, r) { if (\"throw\" === t.type) throw t.arg; return \"break\" === t.type || \"continue\" === t.type ? this.next = t.arg : \"return\" === t.type ? (this.rval = this.arg = t.arg, this.method = \"return\", this.next = \"end\") : \"normal\" === t.type && r && (this.next = r), f; }, finish: function finish(t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[2] === t) return this.complete(e[4], e[3]), m(e), f; } }, \"catch\": function _catch(t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[0] === t) { var n = e[4]; if (\"throw\" === n.type) { var o = n.arg; m(e); } return o; } } throw Error(\"illegal catch attempt\"); }, delegateYield: function delegateYield(r, e, n) { return this.delegate = { i: x(r), r: e, n: n }, \"next\" === this.method && (this.arg = t), f; } }, r; }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"next\", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"throw\", n); } _next(void 0); }); }; }\npos.directive(\"returnModal\", [\"eventBus\", function (eventBus) {\n  var controller = function controller($scope, notification, $translate) {\n    init();\n    function init() {\n      return _init.apply(this, arguments);\n    }\n    function _init() {\n      _init = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee() {\n        return _regeneratorRuntime().wrap(function _callee$(_context) {\n          while (1) switch (_context.prev = _context.next) {\n            case 0:\n            case \"end\":\n              return _context.stop();\n          }\n        }, _callee);\n      }));\n      return _init.apply(this, arguments);\n    }\n    $scope.validateQuantity = function (item) {\n      if (!item.quantity) {\n        item.quantity = item.remainingQuantity;\n      }\n    };\n    $scope.selectall = function () {\n      if ($scope.content.receipt.items) {\n        angular.forEach($scope.content.receipt.items, function (item) {\n          item.selected = true;\n        });\n      }\n      $scope.content.selectall = false;\n    };\n    $scope.deselectall = function () {\n      if ($scope.content.receipt.items) {\n        angular.forEach($scope.content.receipt.items, function (item) {\n          item.selected = false;\n        });\n      }\n      $scope.content.selectall = true;\n    };\n    $scope.action = function (btn) {\n      if (btn.save) {\n        var _$scope$content$retur;\n        var warningShown = false;\n        var itemIsSelected = false;\n        if (((_$scope$content$retur = $scope.content.returnReasons) === null || _$scope$content$retur === void 0 ? void 0 : _$scope$content$retur.length) > 0) {\n          angular.forEach($scope.content.receipt.items, function (item) {\n            if (!warningShown && item.selected) {\n              itemIsSelected = true;\n              if (item.returnCode == \"0\") {\n                notification.pop(\"warning\", \"return reason is not filled in\");\n                warningShown = true;\n              }\n            }\n          });\n        } else {\n          itemIsSelected = true;\n        }\n        if (warningShown || !itemIsSelected) {\n          return;\n        }\n      }\n      if (btn.closes) {\n        btn.action($scope.content.receipt);\n        $scope.content.isVisible = false;\n      }\n    };\n    $scope.defaultAction = function () {\n      var defaultBtn = $scope.content.buttons.find(function (o) {\n        return o.isDefault;\n      });\n      if (defaultBtn) {\n        $scope.action(defaultBtn);\n      }\n    };\n  };\n  return {\n    templateUrl: \"views/posModal/returnModal-directive\",\n    controller: controller,\n    scope: {\n      content: \"=\"\n    }\n  };\n}]);\n","\"use strict\";\n\npos.directive(\"voucherModal\", [\"eventBus\", function (eventBus) {\n  var controller = function controller($scope) {\n    $scope.action = function (btn) {\n      if (btn.cancel) {\n        $scope.content.isVisible = false;\n      } else {\n        btn.action();\n      }\n    };\n  };\n  return {\n    templateUrl: \"views/posModal/voucherModal-directive\",\n    controller: controller,\n    scope: {\n      content: \"=\"\n    }\n  };\n}]);\n","\"use strict\";\n\npos.directive(\"voucheractionModal\", [\"eventBus\", function (eventBus) {\n  var controller = function controller($scope) {\n    $scope.action = function (btn) {\n      if (btn.cancel) {\n        $scope.content.isVisible = false;\n      }\n      btn.action();\n    };\n  };\n  return {\n    templateUrl: \"views/posModal/voucheractionModal-directive\",\n    controller: controller,\n    scope: {\n      content: \"=\"\n    }\n  };\n}]);\n","\"use strict\";\n\npos.directive(\"weborderModal\", [\"eventBus\", function (eventBus) {\n  var controller = function controller($scope, notification, $translate) {\n    $scope.action = function (btn) {\n      if (btn.closes) {\n        btn.action($scope.content.orgWeborder);\n        $scope.content.isVisible = false;\n      }\n    };\n    $scope.defaultAction = function () {};\n  };\n  return {\n    templateUrl: \"views/posModal/weborderModal-directive\",\n    controller: controller,\n    scope: {\n      content: \"=\"\n    }\n  };\n}]);\n","\"use strict\";\n\n// require dependencies\nglobal.jQuery = global.$ = require(\"jquery\");\nrequire(\"jquery-ui-bundle\");\nrequire(\"jquery-ui-touch-punch\");\nrequire(\"angular\");\nrequire(\"angular-ui-router\");\nrequire(\"angular-storage\");\nrequire(\"angular-animate\");\nrequire(\"angular-translate\");\nrequire(\"angular-translate-loader-static-files\");\nrequire(\"angular-cookies\");\nglobal.Decimal = require(\"decimal.js\");\nrequire(\"angular-sanitize\");\nrequire(\"angular-dynamic-locale\");\nrequire(\"angular-strap\");\nrequire(\"angular-iscroll\");\nrequire(\"angular-loading-bar\");\nrequire(\"angular-touch\");\nrequire(\"angularjs-datepicker\");\nrequire(\"chart.js\");\nrequire(\"angular-chart.js\");\nrequire(\"ddd-assets\");\nrequire(\"ng-toast\");\nrequire(\"google-libphonenumber\");\nglobal.StackTrace = require(\"stacktrace-js\");\nglobal.moment = require(\"moment\");\nglobal.signalR = require(\"@aspnet/signalr\");\nrequire(\"@babel/polyfill\");\nglobal.Quagga = require(\"quagga\");\nglobal._ = require(\"lodash\");\nglobal.Dexie = require(\"dexie\");\nglobal.LogRocket = require(\"logrocket\");\nvar bulk = require(\"bulk-require\");\n\n// perequire module definitions before the app\nrequire(\"./auth/token.service\");\n\n// require the rest of the app\nbulk(__dirname, \"**/*.js\");\n\n// Get the value of the \"logRocketEnabled\" cookie\nvar logRocketCookieValue = angular.injector([\"ngCookies\"]).get(\"$cookies\").get(\"logRocketEnabled\");\n\n// Initialize LogRocket\nif (!IN_DEBUG_MODE && logRocketCookieValue === \"true\") {\n  console.log(\"Initializing LogRocket\", logRocketCookieValue);\n  global.LogRocket.init(\"LOGROCKET_IDENTIFIER\");\n}\n","\"use strict\";\n\npos.factory(\"accountPaymentType\", function (receipt, $q, findCustomerService, defaultPaymentType, inputValidationService, sales, $filter, notification, posConfig, $translate, $injector) {\n  var service = {};\n  var i18nCreditLimitExceededTitle, i18nCreditLimitExceeded, i18nCreditLimitExceededCompany;\n  $translate([\"toast/credit-limit-exceeded\", \"toast/credit-limit-exceeded-company\", \"toast/credit-limit-exceeded-title\"]).then(function (translations) {\n    i18nCreditLimitExceeded = translations[\"toast/credit-limit-exceeded\"];\n    i18nCreditLimitExceededTitle = translations[\"toast/credit-limit-exceeded-title\"];\n    i18nCreditLimitExceededCompany = translations[\"toast/credit-limit-exceeded-company\"];\n  });\n\n  /**\n   * Initialise an account payment type.\n   * @param  {string} paymentType         The type of payment, e.g. 'Cash', 'ManualCard', etc.\n   * @param  {Decimal|number} amount      The amount passed in by the keyboard\n   * @param  {object} currency            A curreny object, usually fetch from posConfig.getCurrencySetup(name) or posConfig.getLocalCurrency()\n   * @param  {string} contextInfo         Any additional information this payment type may carry\n   * @return {promise}                    $q promise which is rejected with a status or resolved with the makePayment response\n   */\n  service.makePayment = function (paymentType, amount, currency, contextInfo) {\n    var currentCustomer = receipt.getCustomer();\n    if (!currentCustomer || !currentCustomer.customerNumber) {\n      return $q.reject(\"NO_CUSTOMER_SELECTED\");\n    }\n    try {\n      amount = inputValidationService.convertToDecimal(amount);\n    } catch (err) {\n      return $q.reject(err);\n    }\n\n    // we require a correct format for the amount and if the receipt is a return (negative total)\n    // then we do not allow the clerk to try and pay back more than the total amount, because the sale\n    // has to sum to 0 when all is said and done\n    if (defaultPaymentType.isAmountInvalid(amount)) {\n      return $q.reject(\"INVALID_AMOUNT\");\n    }\n\n    // we allow 0 payments if there's items on the receipt (e.g. an exchanged item is a return + a sold at same price)\n    // we also allow payments without any items, if the clerk want to withdraw some money\n    // we only require that there either must a value in the payment OR items on the reciept\n    if (amount.isZero() && receipt.getReceipt().items.length === 0) {\n      return $q.reject(\"INVALID_TYPE_AMOUNT\");\n    }\n    try {\n      if (!validateBalance(amount, findCustomerService.getSelectedCustomer())) return $q.reject();\n    } catch (err) {\n      return $q.reject(err);\n    }\n    if (receipt.getTotal().minus(receipt.getPaymentsTotal()).isNegative() && !amount.isNegative()) amount = amount.abs().neg(); // make sure that it's positive before we negate it\n\n    var paymentStatus = receipt.getTotal().minus(receipt.getPaymentsTotal());\n    if (amount.abs().gt(paymentStatus.abs())) {\n      return $q.reject(\"PAYMENT_AMOUNT_EXCEEDS_REMAINING_AMOUNT\");\n    }\n    return sales.makePayment(paymentType, amount, currency, contextInfo);\n  };\n  service.clearCustomer = function (paymentState) {\n    findCustomerService.removeSelectedCustomer();\n    return $q.resolve(paymentState);\n  };\n  service.validatePaymentChoice = function (choice, remainder, currency) {\n    //If we're using trimit skip the validate payment choice\n    //As there are no imagine customers to link on\n    if (isUsingTrimit() === true) {\n      return true;\n    }\n    var customer = findCustomerService.getSelectedCustomer();\n    var company = findCustomerService.company;\n    if (!customer) {\n      throw \"NO_CUSTOMER_SELECTED\";\n    }\n    var validationResults = [];\n    validationResults.push(validateCurrency(customer));\n    validationResults.push(validateBalance(remainder, customer, company, findCustomerService.getChargeToCompany()));\n    return validationResults.reduce(function (acc, cur) {\n      return acc && cur;\n    }, true);\n  };\n  function isUsingTrimit() {\n    var trimitWidget = posConfig.getWidgets().find(function (widget) {\n      return widget.name === \"trimit\";\n    });\n    if (trimitWidget) {\n      return true;\n    } else {\n      return false;\n    }\n  }\n  function validateBalance(remainder, customer, company, chargeToCompany) {\n    //If we're using trimit skip the validate balance choice\n    //As there are no imagine customers to link on to get a currency\n    if (isUsingTrimit() === true) {\n      return true;\n    }\n    if (!remainder.isNeg()) {\n      var paymentService = $injector.get(\"paymentService\");\n      var currencies = posConfig.getCurrencySetup();\n      var currency = Object.keys(currencies).map(function (cur) {\n        return currencies[cur];\n      }).find(function (o) {\n        return o.name == customer.currencyCode;\n      });\n      if (!currency) throw \"CUSTOMER_ACCT_CURRENCY_NOT_SETUP\";\n      var creditLimit = chargeToCompany ? company.creditLimit : customer.creditLimit;\n      var balance = chargeToCompany ? company.currentBalance : customer.currentBalance;\n      var remainderInAccountCurrency = paymentService.convertToCurrency(currency, remainder);\n      var creditLimitDecimal = new Decimal(creditLimit);\n      var newBalance = new Decimal(balance).minus(remainderInAccountCurrency);\n      if (newBalance.lt(creditLimitDecimal)) {\n        if (!customer.unboundCreditLimit) {\n          var exceeds = $filter(\"number\")(newBalance.minus(creditLimitDecimal).abs().toNumber(), 2);\n          var name = customer.externalUniqueId;\n          if (customer.firstName || customer.lastName) name = \"\".concat(customer.firstName ? customer.firstName : \"\").concat(customer.lastName ? \" \" + customer.lastName : \"\");\n          var text = chargeToCompany ? i18nCreditLimitExceededCompany.replace(\"{exceeds}\", exceeds).replace(\"{currency}\", currency.name) : i18nCreditLimitExceeded.replace(\"{name}\", name).replace(\"{exceeds}\", exceeds).replace(\"{currency}\", currency.name);\n          notification.pop(\"error\", i18nCreditLimitExceededTitle, text, 8000);\n          return false;\n        }\n      }\n    }\n    return true;\n  }\n  function validateCurrency(customer) {\n    if (!customer.currencyCode) {\n      throw \"CUSTOMER_NO_ACCOUNT_CURRENCY\";\n    }\n    var currencies = posConfig.getCurrencySetup();\n    var currencySetupForShop = Object.keys(currencies).map(function (cur) {\n      return currencies[cur];\n    }).map(function (cur) {\n      return cur.name;\n    }).includes(customer.currencyCode);\n    if (!currencySetupForShop) {\n      throw \"CUSTOMER_ACCT_CURRENCY_NOT_SETUP\";\n    }\n    return true;\n  }\n  return service;\n});\n","\"use strict\";\n\npos.factory(\"cardTransactionStatus\", [\"posStorage\", function (posStorage) {\n  var key = \"card-transaction-in-progress\";\n  var service = {};\n  service.start = function () {\n    posStorage.set(key, true);\n  };\n  service.stop = function () {\n    posStorage.remove(key);\n  };\n  service.isInProgress = function () {\n    var val = posStorage.get(key);\n    return !!val;\n  };\n  return service;\n}]);\n","\"use strict\";\n\npos.value(\"continuationResults\", Object.freeze({\n  signatureRequired: 3,\n  referral: 5\n}));\n","\"use strict\";\n\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _regeneratorRuntime() { \"use strict\"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return r; }; var t, r = {}, e = Object.prototype, n = e.hasOwnProperty, o = \"function\" == typeof Symbol ? Symbol : {}, i = o.iterator || \"@@iterator\", a = o.asyncIterator || \"@@asyncIterator\", u = o.toStringTag || \"@@toStringTag\"; function c(t, r, e, n) { return Object.defineProperty(t, r, { value: e, enumerable: !n, configurable: !n, writable: !n }); } try { c({}, \"\"); } catch (t) { c = function c(t, r, e) { return t[r] = e; }; } function h(r, e, n, o) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype); return c(a, \"_invoke\", function (r, e, n) { var o = 1; return function (i, a) { if (3 === o) throw Error(\"Generator is already running\"); if (4 === o) { if (\"throw\" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var u = n.delegate; if (u) { var c = d(u, n); if (c) { if (c === f) continue; return c; } } if (\"next\" === n.method) n.sent = n._sent = n.arg;else if (\"throw\" === n.method) { if (1 === o) throw o = 4, n.arg; n.dispatchException(n.arg); } else \"return\" === n.method && n.abrupt(\"return\", n.arg); o = 3; var h = s(r, e, n); if (\"normal\" === h.type) { if (o = n.done ? 4 : 2, h.arg === f) continue; return { value: h.arg, done: n.done }; } \"throw\" === h.type && (o = 4, n.method = \"throw\", n.arg = h.arg); } }; }(r, n, new Context(o || [])), !0), a; } function s(t, r, e) { try { return { type: \"normal\", arg: t.call(r, e) }; } catch (t) { return { type: \"throw\", arg: t }; } } r.wrap = h; var f = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var l = {}; c(l, i, function () { return this; }); var p = Object.getPrototypeOf, y = p && p(p(x([]))); y && y !== e && n.call(y, i) && (l = y); var v = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(l); function g(t) { [\"next\", \"throw\", \"return\"].forEach(function (r) { c(t, r, function (t) { return this._invoke(r, t); }); }); } function AsyncIterator(t, r) { function e(o, i, a, u) { var c = s(t[o], t, i); if (\"throw\" !== c.type) { var h = c.arg, f = h.value; return f && \"object\" == _typeof(f) && n.call(f, \"__await\") ? r.resolve(f.__await).then(function (t) { e(\"next\", t, a, u); }, function (t) { e(\"throw\", t, a, u); }) : r.resolve(f).then(function (t) { h.value = t, a(h); }, function (t) { return e(\"throw\", t, a, u); }); } u(c.arg); } var o; c(this, \"_invoke\", function (t, n) { function i() { return new r(function (r, o) { e(t, n, r, o); }); } return o = o ? o.then(i, i) : i(); }, !0); } function d(r, e) { var n = e.method, o = r.i[n]; if (o === t) return e.delegate = null, \"throw\" === n && r.i[\"return\"] && (e.method = \"return\", e.arg = t, d(r, e), \"throw\" === e.method) || \"return\" !== n && (e.method = \"throw\", e.arg = new TypeError(\"The iterator does not provide a '\" + n + \"' method\")), f; var i = s(o, r.i, e.arg); if (\"throw\" === i.type) return e.method = \"throw\", e.arg = i.arg, e.delegate = null, f; var a = i.arg; return a ? a.done ? (e[r.r] = a.value, e.next = r.n, \"return\" !== e.method && (e.method = \"next\", e.arg = t), e.delegate = null, f) : a : (e.method = \"throw\", e.arg = new TypeError(\"iterator result is not an object\"), e.delegate = null, f); } function w(t) { this.tryEntries.push(t); } function m(r) { var e = r[4] || {}; e.type = \"normal\", e.arg = t, r[4] = e; } function Context(t) { this.tryEntries = [[-1]], t.forEach(w, this), this.reset(!0); } function x(r) { if (null != r) { var e = r[i]; if (e) return e.call(r); if (\"function\" == typeof r.next) return r; if (!isNaN(r.length)) { var o = -1, a = function e() { for (; ++o < r.length;) if (n.call(r, o)) return e.value = r[o], e.done = !1, e; return e.value = t, e.done = !0, e; }; return a.next = a; } } throw new TypeError(_typeof(r) + \" is not iterable\"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, c(v, \"constructor\", GeneratorFunctionPrototype), c(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction), GeneratorFunction.displayName = c(GeneratorFunctionPrototype, u, \"GeneratorFunction\"), r.isGeneratorFunction = function (t) { var r = \"function\" == typeof t && t.constructor; return !!r && (r === GeneratorFunction || \"GeneratorFunction\" === (r.displayName || r.name)); }, r.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, c(t, u, \"GeneratorFunction\")), t.prototype = Object.create(v), t; }, r.awrap = function (t) { return { __await: t }; }, g(AsyncIterator.prototype), c(AsyncIterator.prototype, a, function () { return this; }), r.AsyncIterator = AsyncIterator, r.async = function (t, e, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(h(t, e, n, o), i); return r.isGeneratorFunction(e) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, g(v), c(v, u, \"Generator\"), c(v, i, function () { return this; }), c(v, \"toString\", function () { return \"[object Generator]\"; }), r.keys = function (t) { var r = Object(t), e = []; for (var n in r) e.unshift(n); return function t() { for (; e.length;) if ((n = e.pop()) in r) return t.value = n, t.done = !1, t; return t.done = !0, t; }; }, r.values = x, Context.prototype = { constructor: Context, reset: function reset(r) { if (this.prev = this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = \"next\", this.arg = t, this.tryEntries.forEach(m), !r) for (var e in this) \"t\" === e.charAt(0) && n.call(this, e) && !isNaN(+e.slice(1)) && (this[e] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0][4]; if (\"throw\" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(r) { if (this.done) throw r; var e = this; function n(t) { a.type = \"throw\", a.arg = r, e.next = t; } for (var o = e.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i[4], u = this.prev, c = i[1], h = i[2]; if (-1 === i[0]) return n(\"end\"), !1; if (!c && !h) throw Error(\"try statement without catch or finally\"); if (null != i[0] && i[0] <= u) { if (u < c) return this.method = \"next\", this.arg = t, n(c), !0; if (u < h) return n(h), !1; } } }, abrupt: function abrupt(t, r) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var n = this.tryEntries[e]; if (n[0] > -1 && n[0] <= this.prev && this.prev < n[2]) { var o = n; break; } } o && (\"break\" === t || \"continue\" === t) && o[0] <= r && r <= o[2] && (o = null); var i = o ? o[4] : {}; return i.type = t, i.arg = r, o ? (this.method = \"next\", this.next = o[2], f) : this.complete(i); }, complete: function complete(t, r) { if (\"throw\" === t.type) throw t.arg; return \"break\" === t.type || \"continue\" === t.type ? this.next = t.arg : \"return\" === t.type ? (this.rval = this.arg = t.arg, this.method = \"return\", this.next = \"end\") : \"normal\" === t.type && r && (this.next = r), f; }, finish: function finish(t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[2] === t) return this.complete(e[4], e[3]), m(e), f; } }, \"catch\": function _catch(t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[0] === t) { var n = e[4]; if (\"throw\" === n.type) { var o = n.arg; m(e); } return o; } } throw Error(\"illegal catch attempt\"); }, delegateYield: function delegateYield(r, e, n) { return this.delegate = { i: x(r), r: e, n: n }, \"next\" === this.method && (this.arg = t), f; } }, r; }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"next\", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"throw\", n); } _next(void 0); }); }; }\npos.factory(\"defaultPaymentType\", function (receipt, sales, $q, $injector, posConfig, inputValidationService, $log, backend, giftsService, fluctuatingPropertiesHelper, voucherService) {\n  var service = {};\n\n  /**\n   * Initialise a payment as a default payment type. The default payment type sends it's request to a Connector\n   * And expects more or less the same values back\n   * @param  {string} paymentType         The type of payment, e.g. 'Cash', 'ManualCard', etc.\n   * @param  {Decimal|number} amount      The amount passed in by the keyboard\n   * @param  {object} currency            A curreny object, usually fetch from posConfig.getCurrencySetup(name) or posConfig.getLocalCurrency()\n   * @param  {string} contextInfo         Any additional information this payment type may carry\n   * @return {promise}                    $q promise which is rejected with a status or resolved with the makePayment response\n   */\n  service.makePayment = function (paymentType, amount, currency, contextInfo) {\n    try {\n      amount = inputValidationService.convertToDecimal(amount);\n    } catch (err) {\n      return $q.reject(err);\n    }\n\n    // we require a correct format for the amount and if the receipt is a return (negative total)\n    // then we do not allow the clerk to try and pay back more than the total amount, because the sale\n    // has to sum to 0 when all is said and done\n    // validate amounts for regular sale\n    if (service.isAmountInvalid(amount)) {\n      return $q.reject(\"INVALID_AMOUNT\");\n    }\n\n    // we allow 0 payments if there's items on the receipt (e.g. an exchanged item is a return + a sold at same price)\n    // we also allow payments without any items, if the clerk want to withdraw some money\n    // we only require that there either must a value in the payment OR items on the reciept\n    if (amount.isZero() && receipt.getReceipt().items.length === 0) {\n      return $q.reject(\"INVALID_TYPE_AMOUNT\");\n    }\n    if (receipt.getTotal().minus(receipt.getPaymentsTotal()).isNegative() && !amount.isNegative()) amount = amount.abs().neg();\n\n    // a negative cash amount is not possible. that should be a change\n    if (amount.isNegative() && paymentType === \"Cash\") paymentType = \"Change\";\n\n    // we want to prevent users to be able to make a card payment on the Default connector\n    var selectedPaymentDevice = backend.getDeviceByIndex(backend.defaultDeviceIndex);\n    if (selectedPaymentDevice && selectedPaymentDevice.isStatic && (paymentType === \"Card\" || paymentType === \"ManualCard\")) return $q.reject(\"INVALID_PAYMENTDEVICE\");\n    return sales.makePayment(paymentType, amount, currency, contextInfo);\n  };\n\n  /**\n   * Verify that there is data in the response and add the payment to the payments\n   * list on the receipt\n   * @param  {Object} paymentState Response from the Payment Device (ARM) after an AddPayment call.\n   * @return {Promise}             Q promise with paymentState\n   */\n  service.addPaymentToReceipt = function handlePaymentSuccess(paymentState) {\n    $log.debug(\"default: handling payment response\");\n    if (paymentState.response.data.d) {\n      $log.debug(\"default: payment amount received: \" + paymentState.response.data.d.amount);\n      receipt.addPayment(paymentState.response.data.d);\n      return $q.resolve(paymentState);\n    } else return $q.reject(\"No payment available in response\");\n  };\n\n  /**\n   * Calculate if enough has been paid to satify the value of the items on the receipt\n   *\n   * @param  {Object}  paymentState    Response passed from previous handler\n   * @return {Promise}                 Q promise with paymentState\n   */\n  service.isPaymentEnough = function isPaymentEnough(paymentState) {\n    $log.debug(\"default: in isPaymentEnough\");\n    paymentState.itemsTotalAbs = new Decimal(receipt.getTotal().abs().toFixed(2));\n    paymentState.paymentsTotalAbs = new Decimal(receipt.getPaymentsTotal().abs().toFixed(2));\n    $log.debug(\"default: abs itemsTotal: \" + paymentState.itemsTotalAbs.toString());\n    $log.debug(\"default: abs paymentTotal: \" + paymentState.paymentsTotalAbs.toString());\n    paymentState.isPaymentEnough = paymentState.paymentsTotalAbs.gte(paymentState.itemsTotalAbs);\n    return $q.resolve(paymentState);\n  };\n\n  /**\n   * Check if the receipt payments and item value can equal zero if we use the local currencies rounding rules\n   *\n   * @param  {Object}  paymentState    Response passed from previous handler\n   * @return {Promise}                 Q promise with paymentState added the response from makePayment chain that adds rounding\n   */\n  service.doRounding = function doRounding(paymentState) {\n    $log.debug(\"default: in rounding\");\n    var diffCanBeRounded = sales.round(paymentState.itemsTotalAbs.minus(paymentState.paymentsTotalAbs), sales.getLocalCurrency(), false).isZero() && containsCashPayment();\n    if (receipt.getTotal() < 0) diffCanBeRounded = sales.round(paymentState.itemsTotalAbs.minus(paymentState.paymentsTotalAbs), sales.getLocalCurrency(), false).isZero() && containsChangePayment();\n\n    // no need to do rounding if there's already paid enough or rounding wont settle the diff\n    if (paymentState.isPaymentEnough || !diffCanBeRounded) return paymentState;\n    // we need to lazily inject the paymentService to avoid circular references\n    var paymentService = $injector.get(\"paymentService\");\n    var rounding = receipt.getTotal().minus(receipt.getPaymentsTotal());\n    $log.debug(\"default: Requesting \" + rounding.toString() + \" Rounding\");\n    return paymentService.getPaymentCorrection(\"Rounding\")(rounding, sales.getLocalCurrency()).then(function (roundingState) {\n      // the result of giving change back leads to a new chain of events where isPaymentEnough should be set to true\n      // this allows us to now change the state of the original chain of events so that it will complete correctly\n      paymentState.isPaymentEnough = roundingState.isPaymentEnough;\n      paymentState.roundingResponse = roundingState;\n      return paymentState;\n    }, function (roundingError) {\n      paymentState.roundingResponse = roundingError;\n      $q.reject(paymentState);\n    });\n  };\n\n  /**\n   * Check if there was paid more than the total and therefore we need to give change to\n   * get the receipt to equal out.\n   *\n   * @param  {Object}  paymentState    Response passed from previous handler\n   * @return {Promise}                 Q promise with paymentState added the response from the makePayment chain that adds change\n   */\n  service.doChange = function doChange(paymentState) {\n    $log.debug(\"default: in change\");\n    var changeNeeded = paymentState.paymentsTotalAbs.gt(paymentState.itemsTotalAbs);\n    if (!changeNeeded) return paymentState;\n    // we need to lazily inject the paymentService to avoid circular references\n    var paymentService = $injector.get(\"paymentService\");\n    var change = paymentState.itemsTotalAbs.minus(paymentState.paymentsTotalAbs);\n    var lowestUnit = new Decimal(posConfig.getLocalCurrency().units.reduce(function (pre, cur) {\n      return pre > cur ? cur : pre;\n    }, 10000));\n    if (!change.eq(new Decimal(0)) && change.abs().gte(lowestUnit)) {\n      $log.debug(\"default: Requesting \" + change.toString() + \" Change\");\n      return paymentService.getPaymentCorrection(\"Change\")(change, posConfig.getLocalCurrency()).then(function (changeState) {\n        // the result of giving change back leads to a new chain of events where isPaymentEnough should be set to true\n        // this allows us to now change the state of the original chain of events so that it will complete correctly\n        paymentState.isPaymentEnough = changeState.isPaymentEnough;\n        paymentState.changeResponse = changeState;\n        return paymentState;\n      }, function (changeError) {\n        paymentState.changeResponse = changeError;\n        $q.reject(paymentState);\n      });\n    } else if (!change.eq(new Decimal(0))) {\n      // the overpayment is smaller than the lowest local unit (e.g. a foreign currency payment converting to 10.05 for a 10.00 sale),\n      // so it can't be handed back as change - book it as rounding so payments equal the receipt total\n      var rounding = receipt.getTotal().minus(receipt.getPaymentsTotal());\n      $log.debug(\"default: Requesting \" + rounding.toString() + \" Rounding for overpayment below lowest unit\");\n      return paymentService.getPaymentCorrection(\"Rounding\")(rounding, posConfig.getLocalCurrency()).then(function (roundingState) {\n        paymentState.isPaymentEnough = roundingState.isPaymentEnough;\n        paymentState.roundingResponse = roundingState;\n        return paymentState;\n      }, function (roundingError) {\n        paymentState.roundingResponse = roundingError;\n        return $q.reject(paymentState);\n      });\n    } else {\n      return paymentState;\n    }\n  };\n\n  /**\n   * Check if enough is paid and then finish the receipt by sending a completeReceipt request to the Connector\n   * and trying to save the sale in Backoffice as well.\n   *\n   * @param  {Object}  paymentState    Response passed from previous handler\n   * @return {Promise}                 Q promise  with paymentState added the response from the completeReceipt request on the Connector\n   */\n  service.finishReceipt = /*#__PURE__*/function () {\n    var _finishReceipt = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee(paymentState) {\n      var totalPayed, finalRounding, paymentService, response, giftReceipt;\n      return _regeneratorRuntime().wrap(function _callee$(_context) {\n        while (1) switch (_context.prev = _context.next) {\n          case 0:\n            $log.debug(\"default: finish receipt - isPaymentEnough?: \" + paymentState.isPaymentEnough);\n            if (paymentState.isPaymentEnough) {\n              _context.next = 3;\n              break;\n            }\n            return _context.abrupt(\"return\", $q.reject(paymentState));\n          case 3:\n            if (!(containsCashPayment() || receipt.getTotal().isNegative() && containsChangePayment())) {\n              _context.next = 11;\n              break;\n            }\n            // Calculate final rounding\n            totalPayed = receipt.getReceipt().payments.filter(function (p) {\n              return p.completed;\n            }).reduce(function (pre, cur) {\n              return pre.plus(cur.amount * (cur.exchangeRate / 100));\n            }, new Decimal(0));\n            finalRounding = receipt.getTotal().minus(totalPayed);\n            if (finalRounding.eq(new Decimal(0))) {\n              _context.next = 11;\n              break;\n            }\n            $log.debug(\"default: finish receipt - final rounding: \" + finalRounding);\n            paymentService = $injector.get(\"paymentService\");\n            _context.next = 11;\n            return paymentService.getPaymentCorrection(\"Rounding\")(finalRounding, sales.getLocalCurrency());\n          case 11:\n            receipt.getReceipt().items.forEach(fluctuatingPropertiesHelper.updateProperties);\n\n            // the success or failure to complete the sale on the device decides whether to reject or resolve the chain\n            // we need to do something very clever if this promise rejects - right now we'll just be stuck on the payment screen\n            // with 0 total and nothing happens\n            _context.prev = 12;\n            _context.next = 15;\n            return sales.completeSaleOnDevice(paymentState.response.config.device.id);\n          case 15:\n            response = _context.sent;\n            paymentState.completeOnDevice = response;\n            return _context.abrupt(\"return\", paymentState);\n          case 20:\n            _context.prev = 20;\n            _context.t0 = _context[\"catch\"](12);\n            paymentState.completeOnDevice = _context.t0;\n            return _context.abrupt(\"return\", $q.reject(paymentState));\n          case 24:\n            _context.prev = 24;\n            giftReceipt = receipt.getGiftReceipt(); // we have to wait with saveSale call till it's been saved on ARM since this also pops again from the ARM\n            // if this fails, it will be stashed and retried automatically, so we don't really care if this fails or not right now\n            _context.next = 28;\n            return voucherService.activateVouchersInReceipt();\n          case 28:\n            sales.saveSale(paymentState.response.config.device.id).then(function (response) {\n              return giftsService.printGiftDocumentation(giftReceipt, response.data.uuid);\n            })[\"catch\"](null);\n            return _context.finish(24);\n          case 30:\n          case \"end\":\n            return _context.stop();\n        }\n      }, _callee, null, [[12, 20, 24, 30]]);\n    }));\n    function finishReceipt(_x) {\n      return _finishReceipt.apply(this, arguments);\n    }\n    return finishReceipt;\n  }();\n\n  /**\n   * The same as finishReceipt though this finishReceipt guarantees to keep the promise chain\n   * in the success branch even though the call to complete on the Connector fails. Use this\n   * if it's important that the flow of completing a sale is not interrupted for any reason.\n   */\n  service.guaranteedFinishReceipt = function finishReceipt(paymentState) {\n    $log.debug(\"default: guaranteed finish receipt - isPaymentEnough?: \" + paymentState.isPaymentEnough);\n    var deferred = $q.defer();\n    service.finishReceipt(paymentState).then(deferred.resolve, deferred.resolve);\n    return deferred.promise;\n  };\n  service.isAmountInvalid = function (amount) {\n    return amount.isNaN() || !inputValidationService.validateAmount(amount.abs()) ||\n    // validate amounts for return sale\n    receipt.getTotal().isNegative() && sales.round(amount.abs(), sales.getLocalCurrency(), false).gt(sales.round(receipt.getTotal().abs(), sales.getLocalCurrency(), false));\n  };\n  function containsCashPayment() {\n    var currentReceipt = receipt.getReceipt();\n    return currentReceipt && currentReceipt.payments && currentReceipt.payments[currentReceipt.payments.length - 1].paymentType == \"Cash\";\n  }\n  function containsChangePayment() {\n    var currentReceipt = receipt.getReceipt();\n    return currentReceipt && currentReceipt.payments && currentReceipt.payments[currentReceipt.payments.length - 1].paymentType == \"Change\";\n  }\n  return service;\n});\n","\"use strict\";\n\npos.factory(\"defaultCardPaymentType\", function (receipt, sales, $q, $timeout, $translate, $log, notification, verifoneService, inputValidationService, continuationResults, posConfig, $rootScope, keypadManager, cardTransactionStatus) {\n  var service = {};\n  var i18nSurcharge;\n  var i18nTranslations;\n  var i18nPopupHeading;\n  $translate([\"label/surcharge\", \"terminal/requestSignature\", \"terminal/requestMerchantSignature\", \"terminal/requestIdentification\", \"terminal/requestIdentificationAndRequestSignature\", \"terminal/popupTextHeading\", \"terminal/checkOriginalReceiptForEftTransaction\"]).then(function (translations) {\n    i18nSurcharge = translations[\"label/surcharge\"];\n    i18nPopupHeading = translations[\"terminal/popupTextHeading\"];\n    i18nTranslations = translations;\n  });\n  service.handleCardPayment = function handleCardPayment(paymentState) {\n    $log.debug(\"defaultCard: in handleCardPayment\");\n    $log.debug(paymentState);\n    cardTransactionStatus.start();\n    keypadManager.hide();\n    var deferred = $q.defer();\n    var cardPayment = paymentState.response.data.d;\n    cardPayment.cardReceipt = \"\";\n    // make sure that we always have a card status no matter which case we return from\n    paymentState.cardStatus = {};\n\n    // we use the closure to keep the cardPayment reference in the scope throughout the recursion\n    function getTerminalStatus() {\n      cardPayment.awaitingResponse = true;\n      sales.getTerminalStatus(cardPayment.paymentDeviceId, cardPayment.message).then(function (response) {\n        var status = response.data.d;\n        $timeout(function () {\n          $log.debug('current: \"' + cardPayment.displayText + '\" status: \"' + status.displayText + '\"');\n          cardPayment.displayText = status.displayText || cardPayment.displayText;\n        });\n        if (cardPayment.cardReceipt && status.bonText) cardPayment.cardReceipt += \"<CLIP>\";\n        cardPayment.cardReceipt += status.bonText;\n        cardPayment.cardNumber = status.cardId || cardPayment.cardNumber;\n        cardPayment.cardName = status.cardName || cardPayment.cardName;\n        // delete because we don't want to persist this temporary property in localStorage\n        delete cardPayment.awaitingResponse;\n\n        // The terminal has sent a popup message show it to the clerk\n        if (status.popupText && status.popupText !== \"0\") {\n          var popupText = i18nTranslations[status.popupText] || status.popupText;\n          notification.pop(\"info\", i18nPopupHeading, popupText, 6000);\n        }\n        if (status.result === 0) {\n          if (status.surchargeAmount) {\n            var surcharge = new Decimal(status.surchargeAmount).dividedBy(100);\n            cardPayment.amount = cardPayment.amount.plus(surcharge);\n            receipt.addItemGroup(surcharge, i18nSurcharge, 9918);\n          }\n          cardPayment.completed = true;\n          receipt.persist();\n          cardTransactionStatus.stop();\n          deferred.resolve(paymentState);\n        } else if (status.result > 0) {\n          cardPayment.rejected = true;\n          receipt.persist();\n          paymentState.cardStatus = status;\n          cardTransactionStatus.stop();\n          deferred.reject(paymentState);\n        } else {\n          if (status.continuationResult == continuationResults.referral) {\n            verifoneService.startVoiceReferralFlow(status, cardPayment).then(function () {\n              return getTerminalStatus();\n            });\n          } else if (status.continuationResult == continuationResults.signatureRequired) {\n            verifoneService.startSignatureFlow(status, cardPayment).then(function () {\n              return getTerminalStatus();\n            });\n          } else {\n            getTerminalStatus();\n          }\n        }\n      }, function (error) {\n        delete cardPayment.awaitingResponse;\n        receipt.persist();\n        deferred.reject(paymentState);\n      });\n    }\n    getTerminalStatus();\n    var cancellationEvent = $rootScope.$on(\"payment:card:abort\", function () {\n      sales.abortCardPayment(cardPayment.paymentDeviceId, cardPayment.message);\n    });\n    deferred.promise[\"finally\"](function () {\n      return cancellationEvent();\n    });\n    return deferred.promise;\n  };\n  service.cardPaymentRejected = function cardPaymentRejected(paymentState) {\n    $log.debug(\"defaultCard: in cardPayment rejected\");\n    var rejection = paymentState.response;\n    // sanity check the data before trying to recover\n    if (!rejection || !rejection.data || !rejection.data.d) return $q.reject(paymentState);\n    var cardPayment = rejection.data.d;\n    if (cardPayment.cardReceipt) sales.printTerminalReceipt(cardPayment.cardReceipt);\n\n    // Nets offline handling\n    if (cardPayment.cardNumber === 601 && paymentState.cardStatus.responseCode === \"Z3\") {\n      paymentState.cardOffline = true;\n      return $q.reject(paymentState);\n    }\n    cardPayment.displayText = paymentState.cardStatus.errorText || cardPayment.displayText;\n    paymentState.cardRejected = true;\n    return $q.reject(paymentState);\n  };\n  service.validateAmount = function (amount) {\n    if (!posConfig.getOptions().allowPaymentCardOvercharge) {\n      var receiptTotal = receipt.getTotal();\n      var paymentTotal = receipt.getPaymentsTotal();\n      var remainder = receiptTotal.minus(paymentTotal);\n      var amountDec = inputValidationService.convertToDecimal(amount);\n      var canProceed = amountDec.lte(remainder.abs());\n      return canProceed ? $q.resolve() : $q.reject(\"OVERCHARGE_NOT_ALLOWED\");\n    } else {\n      return $q.resolve();\n    }\n  };\n  service.validatePaymentChoice = function (choice, remainder, currency) {\n    if (cardTransactionStatus.isInProgress()) {\n      //Clear flag\n      cardTransactionStatus.stop();\n      throw \"CARD_FAULT_STATE\";\n    }\n    return true;\n  };\n  return service;\n});\n","\"use strict\";\n\npos.factory(\"defaultVoucherPaymentType\", function (receipt, sales, $q, giftCertificate, $log, voucherService) {\n  var service = {};\n\n  /**\n   * Initialise a payment as a default payment type. The default payment type sends it's request to a Connector\n   * And expects more or less the same values back\n   * @param  {string} paymentType            The type of payment, e.g. 'Cash', 'ManualCard', etc.\n   * @param  {Decimal|number} keyboardInput  The value passed in by the keyboard, typically a voucher number can also be an amount if it's a credit note\n   * @param  {object} currency               A curreny object, usually fetch from posConfig.getCurrencySetup(name) or posConfig.getLocalCurrency()\n   * @return {promise}                       $q promise which is rejected with a status or resolved with the makePayment response\n   */\n  service.makePayment = function makeVoucherPayment(paymentType, keyboardInput, currency) {\n    var payments = receipt.getReceipt().payments;\n    if (receipt.getTotal().minus(receipt.getPaymentsTotal()).isNegative()) {\n      var amount = new Decimal(keyboardInput); // if it's a negative then it's an amount to pay out as creditnote or giftcertificate\n      var expirationDate = getExpirationDateFromOldVoucher(payments);\n      return payRemainderWithVoucher(paymentType, amount, currency, expirationDate);\n    }\n    var voucherNo = keyboardInput;\n    if (voucherService.barcodeIsDefinedAsVoucher(voucherNo)) {\n      return voucherService.createVoucherPayment(voucherNo);\n    }\n\n    // verify that the voucher is available and fetch the amount available\n    return giftCertificate.verifyGiftCertificate(voucherNo).then(function (response) {\n      var voucher = response.data;\n      var flucProp = {\n        expirationDate: voucher.expirationDate\n      };\n      if (giftCertificate.isExpired(voucher)) {\n        // notification.pop(\"warning\", \"expired\");\n        return $q.reject(\"VOUCHER_EXPIRED\");\n      }\n\n      // the voucher wont be redeemed until the sale is complete\n      // so we need to make sure that we don't try to use the same voucher twice\n      // since a new call to verify would give the impression that it's still available\n      // as we haven't completed the sale yet\n      for (var i = 0; i < payments.length; i++) {\n        if (payments[i].voucherNumber) {\n          if (payments[i].voucherNumber === voucher.voucherNumber || payments[i].voucherNumber === voucher.alternativeVoucherNumber) return $q.reject(\"VOUCHER_USED_ON_RECEIPT\");\n        }\n      }\n      // choice is either GiftCertificate or CreditVoucher\n      return sales.makePayment(paymentType, voucher.amount, currency, voucherNo, flucProp);\n    }, function (errorResponse) {\n      switch (errorResponse.status) {\n        case 404:\n          return $q.reject(\"VOUCHER_NOT_FOUND\");\n        case 409:\n          return $q.reject(\"VOUCHER_CONFLICT\");\n        // most likely a 500\n        default:\n          return $q.reject(\"VOUCHER_ERROR\");\n      }\n    });\n  };\n  service.validatePaymentChoice = function (choice, remainder, currency) {\n    return true;\n  };\n\n  /**\n   * Pay out change as a credit note\n   * @param  {Decimal} amount  Amount to pay out as credit note\n   * @param  {object} currency A curreny object, usually fetch from posConfig.getCurrencySetup(name) or posConfig.getLocalCurrency()\n   * @return {promise}         $q promise with the request response\n   */\n  function payRemainderWithVoucher(paymentType, amount, currency, expirationDate) {\n    // Attempt to partially redeem the used voucher of the same type, otherwise create a new one\n    var voucherNumber = findLastUsedVoucherNo(paymentType);\n    if (!voucherNumber) {\n      if (paymentType == \"GiftCertificate\") voucherNumber = giftCertificate.generateGiftCertificate();else if (paymentType == \"CreditVoucher\") voucherNumber = giftCertificate.generateCreditVoucher();\n    }\n    if (amount.greaterThan(receipt.getTotal().minus(receipt.getPaymentsTotal()).abs())) return $q.reject(\"INVALID_CREDITNOTE_AMOUNT\");\n    var flucProp = null;\n    if (expirationDate) {\n      flucProp = {\n        expirationDate: expirationDate\n      };\n    }\n    return sales.makePayment(paymentType, amount.neg(), currency, voucherNumber, flucProp);\n  }\n  function findLastUsedVoucherNo(paymentType) {\n    var voucherPayments = receipt.getReceipt().payments.filter(function (p) {\n      return p.paymentType === paymentType;\n    });\n    if (!voucherPayments || voucherPayments.length === 0) return null;\n    return voucherPayments.reduce(function (p, cur) {\n      return cur;\n    }).voucherNumber;\n  }\n  service.isPaymentEnough = function isPaymentEnough(paymentState) {\n    $log.debug(\"defaultvoucher: in isPaymentEnough\");\n    paymentState.itemsTotalAbs = new Decimal(receipt.getTotal().abs().toFixed(2));\n    paymentState.paymentsTotalAbs = new Decimal(receipt.getPaymentsTotal().abs().toFixed(2));\n    $log.debug(\"defaultvoucher: abs itemsTotal: \" + paymentState.itemsTotalAbs.toString());\n    $log.debug(\"defaultvoucher: abs paymentTotal: \" + paymentState.paymentsTotalAbs.toString());\n    paymentState.isPaymentEnough = paymentState.paymentsTotalAbs.eq(paymentState.itemsTotalAbs);\n    return $q.resolve(paymentState);\n  };\n  function getExpirationDateFromOldVoucher(payments) {\n    var expirationDate = payments.filter(function (payment) {\n      return payment.paymentType == \"CreditVoucher\" || payment.paymentType == \"GiftCertificate\";\n    }).map(function (payment) {\n      return payment.fluctuatingProperties.expirationDate;\n    }).sort(function (a, b) {\n      return new Date(b) - new Date(a);\n    })[0];\n    return expirationDate;\n  }\n  return service;\n});\n","\"use strict\";\n\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _regeneratorRuntime() { \"use strict\"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return r; }; var t, r = {}, e = Object.prototype, n = e.hasOwnProperty, o = \"function\" == typeof Symbol ? Symbol : {}, i = o.iterator || \"@@iterator\", a = o.asyncIterator || \"@@asyncIterator\", u = o.toStringTag || \"@@toStringTag\"; function c(t, r, e, n) { return Object.defineProperty(t, r, { value: e, enumerable: !n, configurable: !n, writable: !n }); } try { c({}, \"\"); } catch (t) { c = function c(t, r, e) { return t[r] = e; }; } function h(r, e, n, o) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype); return c(a, \"_invoke\", function (r, e, n) { var o = 1; return function (i, a) { if (3 === o) throw Error(\"Generator is already running\"); if (4 === o) { if (\"throw\" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var u = n.delegate; if (u) { var c = d(u, n); if (c) { if (c === f) continue; return c; } } if (\"next\" === n.method) n.sent = n._sent = n.arg;else if (\"throw\" === n.method) { if (1 === o) throw o = 4, n.arg; n.dispatchException(n.arg); } else \"return\" === n.method && n.abrupt(\"return\", n.arg); o = 3; var h = s(r, e, n); if (\"normal\" === h.type) { if (o = n.done ? 4 : 2, h.arg === f) continue; return { value: h.arg, done: n.done }; } \"throw\" === h.type && (o = 4, n.method = \"throw\", n.arg = h.arg); } }; }(r, n, new Context(o || [])), !0), a; } function s(t, r, e) { try { return { type: \"normal\", arg: t.call(r, e) }; } catch (t) { return { type: \"throw\", arg: t }; } } r.wrap = h; var f = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var l = {}; c(l, i, function () { return this; }); var p = Object.getPrototypeOf, y = p && p(p(x([]))); y && y !== e && n.call(y, i) && (l = y); var v = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(l); function g(t) { [\"next\", \"throw\", \"return\"].forEach(function (r) { c(t, r, function (t) { return this._invoke(r, t); }); }); } function AsyncIterator(t, r) { function e(o, i, a, u) { var c = s(t[o], t, i); if (\"throw\" !== c.type) { var h = c.arg, f = h.value; return f && \"object\" == _typeof(f) && n.call(f, \"__await\") ? r.resolve(f.__await).then(function (t) { e(\"next\", t, a, u); }, function (t) { e(\"throw\", t, a, u); }) : r.resolve(f).then(function (t) { h.value = t, a(h); }, function (t) { return e(\"throw\", t, a, u); }); } u(c.arg); } var o; c(this, \"_invoke\", function (t, n) { function i() { return new r(function (r, o) { e(t, n, r, o); }); } return o = o ? o.then(i, i) : i(); }, !0); } function d(r, e) { var n = e.method, o = r.i[n]; if (o === t) return e.delegate = null, \"throw\" === n && r.i[\"return\"] && (e.method = \"return\", e.arg = t, d(r, e), \"throw\" === e.method) || \"return\" !== n && (e.method = \"throw\", e.arg = new TypeError(\"The iterator does not provide a '\" + n + \"' method\")), f; var i = s(o, r.i, e.arg); if (\"throw\" === i.type) return e.method = \"throw\", e.arg = i.arg, e.delegate = null, f; var a = i.arg; return a ? a.done ? (e[r.r] = a.value, e.next = r.n, \"return\" !== e.method && (e.method = \"next\", e.arg = t), e.delegate = null, f) : a : (e.method = \"throw\", e.arg = new TypeError(\"iterator result is not an object\"), e.delegate = null, f); } function w(t) { this.tryEntries.push(t); } function m(r) { var e = r[4] || {}; e.type = \"normal\", e.arg = t, r[4] = e; } function Context(t) { this.tryEntries = [[-1]], t.forEach(w, this), this.reset(!0); } function x(r) { if (null != r) { var e = r[i]; if (e) return e.call(r); if (\"function\" == typeof r.next) return r; if (!isNaN(r.length)) { var o = -1, a = function e() { for (; ++o < r.length;) if (n.call(r, o)) return e.value = r[o], e.done = !1, e; return e.value = t, e.done = !0, e; }; return a.next = a; } } throw new TypeError(_typeof(r) + \" is not iterable\"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, c(v, \"constructor\", GeneratorFunctionPrototype), c(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction), GeneratorFunction.displayName = c(GeneratorFunctionPrototype, u, \"GeneratorFunction\"), r.isGeneratorFunction = function (t) { var r = \"function\" == typeof t && t.constructor; return !!r && (r === GeneratorFunction || \"GeneratorFunction\" === (r.displayName || r.name)); }, r.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, c(t, u, \"GeneratorFunction\")), t.prototype = Object.create(v), t; }, r.awrap = function (t) { return { __await: t }; }, g(AsyncIterator.prototype), c(AsyncIterator.prototype, a, function () { return this; }), r.AsyncIterator = AsyncIterator, r.async = function (t, e, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(h(t, e, n, o), i); return r.isGeneratorFunction(e) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, g(v), c(v, u, \"Generator\"), c(v, i, function () { return this; }), c(v, \"toString\", function () { return \"[object Generator]\"; }), r.keys = function (t) { var r = Object(t), e = []; for (var n in r) e.unshift(n); return function t() { for (; e.length;) if ((n = e.pop()) in r) return t.value = n, t.done = !1, t; return t.done = !0, t; }; }, r.values = x, Context.prototype = { constructor: Context, reset: function reset(r) { if (this.prev = this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = \"next\", this.arg = t, this.tryEntries.forEach(m), !r) for (var e in this) \"t\" === e.charAt(0) && n.call(this, e) && !isNaN(+e.slice(1)) && (this[e] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0][4]; if (\"throw\" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(r) { if (this.done) throw r; var e = this; function n(t) { a.type = \"throw\", a.arg = r, e.next = t; } for (var o = e.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i[4], u = this.prev, c = i[1], h = i[2]; if (-1 === i[0]) return n(\"end\"), !1; if (!c && !h) throw Error(\"try statement without catch or finally\"); if (null != i[0] && i[0] <= u) { if (u < c) return this.method = \"next\", this.arg = t, n(c), !0; if (u < h) return n(h), !1; } } }, abrupt: function abrupt(t, r) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var n = this.tryEntries[e]; if (n[0] > -1 && n[0] <= this.prev && this.prev < n[2]) { var o = n; break; } } o && (\"break\" === t || \"continue\" === t) && o[0] <= r && r <= o[2] && (o = null); var i = o ? o[4] : {}; return i.type = t, i.arg = r, o ? (this.method = \"next\", this.next = o[2], f) : this.complete(i); }, complete: function complete(t, r) { if (\"throw\" === t.type) throw t.arg; return \"break\" === t.type || \"continue\" === t.type ? this.next = t.arg : \"return\" === t.type ? (this.rval = this.arg = t.arg, this.method = \"return\", this.next = \"end\") : \"normal\" === t.type && r && (this.next = r), f; }, finish: function finish(t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[2] === t) return this.complete(e[4], e[3]), m(e), f; } }, \"catch\": function _catch(t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[0] === t) { var n = e[4]; if (\"throw\" === n.type) { var o = n.arg; m(e); } return o; } } throw Error(\"illegal catch attempt\"); }, delegateYield: function delegateYield(r, e, n) { return this.delegate = { i: x(r), r: e, n: n }, \"next\" === this.method && (this.arg = t), f; } }, r; }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"next\", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"throw\", n); } _next(void 0); }); }; }\npos.factory(\"downPaymentPaymentType\", function (receipt, sales, $q, fluctuatingPropertiesHelper) {\n  var service = {};\n\n  /**\n   * And expects more or less the same values back\n   * @param  {string} paymentType         The type of payment, e.g. 'Cash', 'ManualCard', etc.\n   * @param  {Decimal|number} amount      The value passed in by the keyboard, typically a voucher number can also be an amount if it's a credit note\n   * @param  {object} currency            A curreny object, usually fetch from posConfig.getCurrencySetup(name) or posConfig.getLocalCurrency()\n   * @return {promise}                    $q promise which is rejected with a status or resolved with the makePayment response\n   */\n  service.makePayment = function makeDownPaymentPayment(paymentType, voucher, currency) {\n    var voucherNo = fluctuatingPropertiesHelper.getDownPaymentNo(receipt.getReceipt());\n    var amount = fluctuatingPropertiesHelper.getDownPaymentValue(receipt.getReceipt());\n    return sales.makePayment(paymentType, amount || 0, currency, voucherNo || \"\");\n  };\n\n  /**\n   * Add remaining value to the customer account\n   * @param  {Object}  paymentState    Response passed from previous handler\n   * @return {Promise}                 Q promise  with paymentState added the response from the completeReceipt request on the Connector\n   */\n\n  service.paymentCustomerAccount = /*#__PURE__*/function () {\n    var _paymentCustomerAccount = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee(paymentState) {\n      var result, currentReceipt, zero, valueToPay, accountPaymentState;\n      return _regeneratorRuntime().wrap(function _callee$(_context) {\n        while (1) switch (_context.prev = _context.next) {\n          case 0:\n            result = paymentState;\n            currentReceipt = receipt.getReceipt();\n            zero = new Decimal(0);\n            if (!receipt.getTotal().minus(receipt.getPaymentsTotal()).gt(zero)) {\n              _context.next = 11;\n              break;\n            }\n            valueToPay = receipt.getTotal().minus(receipt.getPaymentsTotal());\n            _context.next = 7;\n            return sales.makePayment(\"Account\", valueToPay, null, \"Booking - \" & currentReceipt.receiptId);\n          case 7:\n            accountPaymentState = _context.sent;\n            _context.next = 10;\n            return service.addAccountPaymentToReceipt(accountPaymentState);\n          case 10:\n            result = _context.sent;\n          case 11:\n            return _context.abrupt(\"return\", paymentState);\n          case 12:\n          case \"end\":\n            return _context.stop();\n        }\n      }, _callee);\n    }));\n    function paymentCustomerAccount(_x) {\n      return _paymentCustomerAccount.apply(this, arguments);\n    }\n    return paymentCustomerAccount;\n  }();\n\n  /**\n   * Check if enough is paid and then finish the receipt by sending a completeReceipt request to the Connector\n   * and trying to save the sale in Backoffice as well.\n   *\n   * @param  {Object}  paymentState    Response passed from previous handler\n   * @return {Promise}                 Q promise  with paymentState added the response from the completeReceipt request on the Connector\n   */\n  service.finishReceipt = /*#__PURE__*/function () {\n    var _finishReceipt = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee2(paymentState) {\n      var response, giftReceipt;\n      return _regeneratorRuntime().wrap(function _callee2$(_context2) {\n        while (1) switch (_context2.prev = _context2.next) {\n          case 0:\n            receipt.getReceipt().items.forEach(fluctuatingPropertiesHelper.updateProperties);\n\n            // the success or failure to complete the sale on the device decides whether to reject or resolve the chain\n            // we need to do something very clever if this promise rejects - right now we'll just be stuck on the payment screen\n            // with 0 total and nothing happens\n            paymentState.isPaymentEnough = true;\n            _context2.prev = 2;\n            _context2.next = 5;\n            return sales.completeSaleOnDevice(paymentState.response.config.device.id);\n          case 5:\n            response = _context2.sent;\n            paymentState.completeOnDevice = response;\n            return _context2.abrupt(\"return\", paymentState);\n          case 10:\n            _context2.prev = 10;\n            _context2.t0 = _context2[\"catch\"](2);\n            paymentState.completeOnDevice = _context2.t0;\n            return _context2.abrupt(\"return\", $q.reject(paymentState));\n          case 14:\n            _context2.prev = 14;\n            giftReceipt = receipt.getGiftReceipt(); // we have to wait with saveSale call till it's been saved on ARM since this also pops again from the ARM\n            // if this fails, it will be stashed and retried automatically, so we don't really care if this fails or not right now\n            sales.saveSale(paymentState.response.config.device.id)[\"catch\"](null);\n            return _context2.finish(14);\n          case 18:\n          case \"end\":\n            return _context2.stop();\n        }\n      }, _callee2, null, [[2, 10, 14, 18]]);\n    }));\n    function finishReceipt(_x2) {\n      return _finishReceipt.apply(this, arguments);\n    }\n    return finishReceipt;\n  }();\n  service.addAccountPaymentToReceipt = function handlePaymentSuccess(paymentState) {\n    if (paymentState.data.d) {\n      receipt.addPayment(paymentState.data.d);\n      return $q.resolve(paymentState);\n    } else return $q.reject(\"No payment available in response\");\n  };\n  return service;\n});\n","\"use strict\";\n\npos.factory(\"intersolvePaymentType\", function (receipt, sales, $q, $rootScope, signalr, backend, $injector, inputValidationService, defaultPaymentType, $log) {\n  var service = {};\n  function getPayment(uuid) {\n    // look backwards for the payment\n    var payments = receipt.getReceipt().payments;\n    for (var i = payments.length - 1; i >= 0; i--) {\n      var payment = payments[i];\n      if (payment.uuid === uuid) {\n        return payment;\n      }\n    }\n  }\n\n  /**\n   * Initialise a payment as a default payment type. The default payment type sends it's request to a Connector\n   * And expects more or less the same values back\n   * @param  {string} paymentType         The type of payment, e.g. 'Cash', 'ManualCard', etc.\n   * @param  {Decimal|number} amount      The amount passed in by the keyboard\n   * @param  {object} currency            A curreny object, usually fetch from posConfig.getCurrencySetup(name) or posConfig.getLocalCurrency()\n   * @param  {string} contextInfo         Any additional information this payment type may carry\n   * @return {promise}                    $q promise which is rejected with a status or resolved with the makePayment response\n   */\n  service.makePayment = function (paymentType, amount, currency, contextInfo) {\n    $log.debug(\"intersolve: make payment\");\n    try {\n      amount = inputValidationService.convertToDecimal(amount);\n    } catch (err) {\n      return $q.reject(err);\n    }\n    var paymentStatus = receipt.getTotal().minus(receipt.getPaymentsTotal());\n    var maxValueAllowed = 9999999.99;\n\n    // we require a correct format for the amount and if the receipt is a return (negative total)\n    // then we do not allow the clerk to try and pay back more than the total amount, because the sale\n    // has to sum to 0 when all is said and done\n    if (defaultPaymentType.isAmountInvalid(amount)) {\n      return $q.reject(\"INVALID_AMOUNT\");\n    }\n\n    // we allow 0 payments if there's items on the receipt (e.g. an exchanged item is a return + a sold at same price)\n    // we also allow payments without any items, if the clerk want to withdraw some money\n    // we only require that there either must a value in the payment OR items on the reciept\n    if (amount.isZero()) {\n      $rootScope.$emit(\"payment:intersolveError\", \"Loyalty transaction with amount 0 is not allowed\");\n      return $q.reject(\"INVALID_TYPE_AMOUNT\");\n    }\n    if (receipt.getTotal().minus(receipt.getPaymentsTotal()).isNegative() && !amount.isNegative()) amount = amount.abs().neg();\n    if (amount.abs().gt(paymentStatus.abs())) {\n      $rootScope.$emit(\"payment:intersolveError\", \"Payment amount can not exceed remaining amount\");\n      return $q.reject(\"INTERSOLVE_AMOUNT_EXCEEDS_REMAINING_AMOUNT\");\n    }\n    //loyaltyIntersolveService.getSumOfNettoItems(receipt)\n    var loyaltyIntersolveService = $injector.get(\"loyaltyIntersolveService\");\n    if (amount.abs().gt(loyaltyIntersolveService.getSumOfNettoItems().abs())) {\n      $rootScope.$emit(\"payment:intersolveError\", \"Web orders can not be payed for with loyalty credits\");\n      return $q.reject(\"INVALID_NETTO_AMOUNT\");\n    }\n    return loyaltyIntersolveService.loadAttachedCustomer().then(function (result) {\n      var loyaltyCustomer = result;\n      var intersolveAttrib = createIntersolveAttributes();\n      if (amount.gt(loyaltyCustomer.balance)) {\n        $rootScope.$emit(\"payment:intersolveError\", \"Payment amount can not exceed loyalty customer balance\");\n        return $q.reject(\"INTERSOLVE_AMOUNT_EXCEEDS_BALANCE\");\n      }\n      return sales.makePayment(paymentType, amount, currency, contextInfo).then(function (response) {\n        var payment = response.data.d;\n        payment.isIntersolve = true;\n        payment.completed = false;\n        payment.refPos = intersolveAttrib.refPos;\n        payment.ticketNumber = intersolveAttrib.ticketNumber;\n        payment.status = \"Connecting\";\n        payment.customer = loyaltyCustomer;\n        return response;\n      });\n\n      // return $q.resolve({\n      //     data: {\n      //         d: {\n      //             voucherNumber: '',\n      //             paymentType: 'LoyaltyDiscount',\n      //             amount: amount,\n      //             rounding: 0,\n      //             exchangeRate: currency.exchangeRate,\n      //             message: 'OK',\n      //             completed: false,\n      //             currencyCode: currency.code,\n      //             currencyName: currency.name,\n      //             customer: loyaltyCustomer,\n      //             isIntersolve: true,\n      //             refPos: intersolveAttrib.refPos,\n      //             ticketNumber: intersolveAttrib.ticketNumber,\n      //             status: \"Connecting\",\n      //         }\n      //     },\n      //     config: {\n      //         device: backend.getDeviceByIndex(backend.defaultDevice)\n      //     },\n      //     status: 200\n      // });\n    });\n  };\n  service.handleIntersolveTransaction = function handleIntersolveTransaction(paymentState) {\n    $log.debug(\"intersolve: in handleIntersolveTransaction\");\n    var payment = paymentState.response.data.d;\n    var customer = payment.customer;\n    var receiptId = receipt.getReceipt().receiptId;\n    payment.awaitingResponse = true;\n    receipt.persist();\n\n    //TODO get loyaltycustomer's card number\n    var loyaltyIntersolveService = $injector.get(\"loyaltyIntersolveService\");\n    return loyaltyIntersolveService.subtractBalance(payment.refPos, customer.customerId, payment.ticketNumber, payment.amount.times(100)).then(function (response) {\n      payment.completed = true;\n      payment.awaitingResponse = false;\n      payment.status = response.data.description;\n      receipt.persist();\n\n      // payments with loyalty cards are excluded in the discounts. Therefor\n      // a recalc is required after adding such a payment.\n      $rootScope.$emit(\"payment:intersolve\", \"Recalculate discounts\");\n      return paymentState;\n    }, function (errorResponse) {\n      if (errorResponse.data && errorResponse.data.description) {\n        payment.status = errorResponse.data.description;\n      }\n      paymentState.intersolveResponse = errorResponse;\n      payment.awaitingResponse = false;\n      paymentState.noErrorMessage = true;\n      receipt.persist();\n      return $q.reject(paymentState);\n    });\n  };\n  var createIntersolveAttributes = function createIntersolveAttributes() {\n    var thisReceipt = receipt.getReceipt();\n    var thisDate = new Date();\n    var milliseconds = thisDate.getTime();\n    var lastNumberOfYear = thisDate.getFullYear().toString().slice(-1);\n    var paddedPosId = padWithZeros(thisReceipt.posId, 2);\n    var paddedReceiptId = padWithZeros(thisReceipt.receiptId, 5);\n    return {\n      ticketNumber: Number(lastNumberOfYear + paddedPosId + paddedReceiptId),\n      refPos: Number(thisReceipt.posId + milliseconds)\n    };\n  };\n  var padWithZeros = function padWithZeros(number, length) {\n    var paddedString = number.toString().slice(-length);\n    while (paddedString.length < length) {\n      paddedString = \"0\" + paddedString;\n    }\n    return paddedString;\n  };\n  return service;\n});\n","\"use strict\";\n\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _regeneratorRuntime() { \"use strict\"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return r; }; var t, r = {}, e = Object.prototype, n = e.hasOwnProperty, o = \"function\" == typeof Symbol ? Symbol : {}, i = o.iterator || \"@@iterator\", a = o.asyncIterator || \"@@asyncIterator\", u = o.toStringTag || \"@@toStringTag\"; function c(t, r, e, n) { return Object.defineProperty(t, r, { value: e, enumerable: !n, configurable: !n, writable: !n }); } try { c({}, \"\"); } catch (t) { c = function c(t, r, e) { return t[r] = e; }; } function h(r, e, n, o) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype); return c(a, \"_invoke\", function (r, e, n) { var o = 1; return function (i, a) { if (3 === o) throw Error(\"Generator is already running\"); if (4 === o) { if (\"throw\" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var u = n.delegate; if (u) { var c = d(u, n); if (c) { if (c === f) continue; return c; } } if (\"next\" === n.method) n.sent = n._sent = n.arg;else if (\"throw\" === n.method) { if (1 === o) throw o = 4, n.arg; n.dispatchException(n.arg); } else \"return\" === n.method && n.abrupt(\"return\", n.arg); o = 3; var h = s(r, e, n); if (\"normal\" === h.type) { if (o = n.done ? 4 : 2, h.arg === f) continue; return { value: h.arg, done: n.done }; } \"throw\" === h.type && (o = 4, n.method = \"throw\", n.arg = h.arg); } }; }(r, n, new Context(o || [])), !0), a; } function s(t, r, e) { try { return { type: \"normal\", arg: t.call(r, e) }; } catch (t) { return { type: \"throw\", arg: t }; } } r.wrap = h; var f = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var l = {}; c(l, i, function () { return this; }); var p = Object.getPrototypeOf, y = p && p(p(x([]))); y && y !== e && n.call(y, i) && (l = y); var v = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(l); function g(t) { [\"next\", \"throw\", \"return\"].forEach(function (r) { c(t, r, function (t) { return this._invoke(r, t); }); }); } function AsyncIterator(t, r) { function e(o, i, a, u) { var c = s(t[o], t, i); if (\"throw\" !== c.type) { var h = c.arg, f = h.value; return f && \"object\" == _typeof(f) && n.call(f, \"__await\") ? r.resolve(f.__await).then(function (t) { e(\"next\", t, a, u); }, function (t) { e(\"throw\", t, a, u); }) : r.resolve(f).then(function (t) { h.value = t, a(h); }, function (t) { return e(\"throw\", t, a, u); }); } u(c.arg); } var o; c(this, \"_invoke\", function (t, n) { function i() { return new r(function (r, o) { e(t, n, r, o); }); } return o = o ? o.then(i, i) : i(); }, !0); } function d(r, e) { var n = e.method, o = r.i[n]; if (o === t) return e.delegate = null, \"throw\" === n && r.i[\"return\"] && (e.method = \"return\", e.arg = t, d(r, e), \"throw\" === e.method) || \"return\" !== n && (e.method = \"throw\", e.arg = new TypeError(\"The iterator does not provide a '\" + n + \"' method\")), f; var i = s(o, r.i, e.arg); if (\"throw\" === i.type) return e.method = \"throw\", e.arg = i.arg, e.delegate = null, f; var a = i.arg; return a ? a.done ? (e[r.r] = a.value, e.next = r.n, \"return\" !== e.method && (e.method = \"next\", e.arg = t), e.delegate = null, f) : a : (e.method = \"throw\", e.arg = new TypeError(\"iterator result is not an object\"), e.delegate = null, f); } function w(t) { this.tryEntries.push(t); } function m(r) { var e = r[4] || {}; e.type = \"normal\", e.arg = t, r[4] = e; } function Context(t) { this.tryEntries = [[-1]], t.forEach(w, this), this.reset(!0); } function x(r) { if (null != r) { var e = r[i]; if (e) return e.call(r); if (\"function\" == typeof r.next) return r; if (!isNaN(r.length)) { var o = -1, a = function e() { for (; ++o < r.length;) if (n.call(r, o)) return e.value = r[o], e.done = !1, e; return e.value = t, e.done = !0, e; }; return a.next = a; } } throw new TypeError(_typeof(r) + \" is not iterable\"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, c(v, \"constructor\", GeneratorFunctionPrototype), c(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction), GeneratorFunction.displayName = c(GeneratorFunctionPrototype, u, \"GeneratorFunction\"), r.isGeneratorFunction = function (t) { var r = \"function\" == typeof t && t.constructor; return !!r && (r === GeneratorFunction || \"GeneratorFunction\" === (r.displayName || r.name)); }, r.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, c(t, u, \"GeneratorFunction\")), t.prototype = Object.create(v), t; }, r.awrap = function (t) { return { __await: t }; }, g(AsyncIterator.prototype), c(AsyncIterator.prototype, a, function () { return this; }), r.AsyncIterator = AsyncIterator, r.async = function (t, e, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(h(t, e, n, o), i); return r.isGeneratorFunction(e) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, g(v), c(v, u, \"Generator\"), c(v, i, function () { return this; }), c(v, \"toString\", function () { return \"[object Generator]\"; }), r.keys = function (t) { var r = Object(t), e = []; for (var n in r) e.unshift(n); return function t() { for (; e.length;) if ((n = e.pop()) in r) return t.value = n, t.done = !1, t; return t.done = !0, t; }; }, r.values = x, Context.prototype = { constructor: Context, reset: function reset(r) { if (this.prev = this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = \"next\", this.arg = t, this.tryEntries.forEach(m), !r) for (var e in this) \"t\" === e.charAt(0) && n.call(this, e) && !isNaN(+e.slice(1)) && (this[e] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0][4]; if (\"throw\" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(r) { if (this.done) throw r; var e = this; function n(t) { a.type = \"throw\", a.arg = r, e.next = t; } for (var o = e.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i[4], u = this.prev, c = i[1], h = i[2]; if (-1 === i[0]) return n(\"end\"), !1; if (!c && !h) throw Error(\"try statement without catch or finally\"); if (null != i[0] && i[0] <= u) { if (u < c) return this.method = \"next\", this.arg = t, n(c), !0; if (u < h) return n(h), !1; } } }, abrupt: function abrupt(t, r) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var n = this.tryEntries[e]; if (n[0] > -1 && n[0] <= this.prev && this.prev < n[2]) { var o = n; break; } } o && (\"break\" === t || \"continue\" === t) && o[0] <= r && r <= o[2] && (o = null); var i = o ? o[4] : {}; return i.type = t, i.arg = r, o ? (this.method = \"next\", this.next = o[2], f) : this.complete(i); }, complete: function complete(t, r) { if (\"throw\" === t.type) throw t.arg; return \"break\" === t.type || \"continue\" === t.type ? this.next = t.arg : \"return\" === t.type ? (this.rval = this.arg = t.arg, this.method = \"return\", this.next = \"end\") : \"normal\" === t.type && r && (this.next = r), f; }, finish: function finish(t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[2] === t) return this.complete(e[4], e[3]), m(e), f; } }, \"catch\": function _catch(t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[0] === t) { var n = e[4]; if (\"throw\" === n.type) { var o = n.arg; m(e); } return o; } } throw Error(\"illegal catch attempt\"); }, delegateYield: function delegateYield(r, e, n) { return this.delegate = { i: x(r), r: e, n: n }, \"next\" === this.method && (this.arg = t), f; } }, r; }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"next\", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"throw\", n); } _next(void 0); }); }; }\nvar uuid = require(\"node-uuid\");\npos.factory(\"mobilePayPaymentType\", function ($rootScope, receipt, $translate, notification, backendHelper, $q, inputValidationService, sales, posConfig) {\n  var service = {};\n  var currencyCode;\n  var posId;\n  var vatNumber;\n  var orderId;\n  var backend = backendHelper.backend;\n  var loopingPaymentStatuses = [\"Initiated\", \"IssuedToUser\", \"Paired\"];\n  var paymentId = \"\";\n  var refundId = \"\";\n  var translations = {};\n  var initialized = false;\n  var isRefund = false;\n\n  /**\n   * The payment flow method\n   *\n   * @param {*} paymentType\n   * @param {*} amount\n   * @param {*} currency\n   * @param {*} contextInfo\n   */\n  service.makePayment = /*#__PURE__*/function () {\n    var _ref = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee(paymentType, amount, currency, contextInfo) {\n      var receiptLocal, paymentStatus;\n      return _regeneratorRuntime().wrap(function _callee$(_context) {\n        while (1) switch (_context.prev = _context.next) {\n          case 0:\n            if (initialized) {\n              _context.next = 3;\n              break;\n            }\n            _context.next = 3;\n            return init();\n          case 3:\n            _context.prev = 3;\n            amount = inputValidationService.convertToDecimal(amount);\n            _context.next = 10;\n            break;\n          case 7:\n            _context.prev = 7;\n            _context.t0 = _context[\"catch\"](3);\n            return _context.abrupt(\"return\", $q.reject(_context.t0));\n          case 10:\n            receiptLocal = receipt.getReceipt();\n            orderId = receipt.constructReceiptId(receiptLocal);\n            if (!service.isAmountInvalid(amount)) {\n              _context.next = 14;\n              break;\n            }\n            return _context.abrupt(\"return\", $q.reject(\"INVALID_AMOUNT\"));\n          case 14:\n            if (!(amount.isZero() && receiptLocal.items.length === 0)) {\n              _context.next = 16;\n              break;\n            }\n            return _context.abrupt(\"return\", $q.reject(\"INVALID_TYPE_AMOUNT\"));\n          case 16:\n            //Look at receipt if it is a refund then obtain the original receipt Id and initialize refund process in mobilepay\n            paymentStatus = receipt.getTotal().minus(receipt.getPaymentsTotal());\n            if (!paymentStatus.isNegative()) {\n              _context.next = 31;\n              break;\n            }\n            if (!receiptLocal.returnReceiptNumber) {\n              _context.next = 28;\n              break;\n            }\n            isRefund = true;\n            _context.next = 22;\n            return service.getRefundId(amount, receiptLocal.returnReceiptNumber, orderId);\n          case 22:\n            refundId = _context.sent;\n            if (refundId) {\n              _context.next = 26;\n              break;\n            }\n            notification.pop(\"info\", translations[\"toast/mobilepay/payment-failed\"]);\n            return _context.abrupt(\"return\", false);\n          case 26:\n            _context.next = 29;\n            break;\n          case 28:\n            return _context.abrupt(\"return\", $q.reject(\"MOBILEPAY_INVALID_REFUND\"));\n          case 29:\n            _context.next = 38;\n            break;\n          case 31:\n            isRefund = false;\n            _context.next = 34;\n            return service.getPaymentId(amount);\n          case 34:\n            paymentId = _context.sent;\n            if (paymentId) {\n              _context.next = 38;\n              break;\n            }\n            notification.pop(\"info\", translations[\"toast/mobilepay/payment-failed\"]);\n            return _context.abrupt(\"return\", false);\n          case 38:\n            return _context.abrupt(\"return\", sales.makePayment(paymentType, amount, currency, contextInfo));\n          case 39:\n          case \"end\":\n            return _context.stop();\n        }\n      }, _callee, null, [[3, 7]]);\n    }));\n    return function (_x, _x2, _x3, _x4) {\n      return _ref.apply(this, arguments);\n    };\n  }();\n\n  /**\n   * Handles the various payment states from MobilePay\n   *\n   * @param {*} paymentState\n   */\n  service.handlePayment = /*#__PURE__*/function () {\n    var _ref2 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee2(paymentState) {\n      var paymentResult, mobilePayPayment, paymentStatus;\n      return _regeneratorRuntime().wrap(function _callee2$(_context2) {\n        while (1) switch (_context2.prev = _context2.next) {\n          case 0:\n            if (initialized) {\n              _context2.next = 3;\n              break;\n            }\n            _context2.next = 3;\n            return init();\n          case 3:\n            paymentResult = paymentState;\n            if (!isRefund) {\n              _context2.next = 6;\n              break;\n            }\n            return _context2.abrupt(\"return\", paymentResult);\n          case 6:\n            mobilePayPayment = paymentState.response.data.d;\n            if (!mobilePayPayment.retry) mobilePayPayment.paymentId = paymentId;\n            mobilePayPayment.awaitingResponse = true;\n            mobilePayPayment.displayText = \"\".concat(translations[\"mobilepay/status/Initiated\"], \" [Initiated]\");\n            _context2.prev = 10;\n            _context2.next = 13;\n            return service.pollPaymentStatus(mobilePayPayment);\n          case 13:\n            paymentStatus = _context2.sent;\n            mobilePayPayment.cancelled = paymentStatus === \"CancelledByUser\" || paymentStatus === \"CancelledByClient\";\n            mobilePayPayment.completed = !mobilePayPayment.cancelled;\n            _context2.next = 31;\n            break;\n          case 18:\n            _context2.prev = 18;\n            _context2.t0 = _context2[\"catch\"](10);\n            mobilePayPayment.completed = false;\n\n            // Attempt to cancel the payment\n            _context2.prev = 21;\n            mobilePayPayment.displayText = translations[\"mobilepay/status/FailedWithdrawing\"];\n            _context2.next = 25;\n            return service.cancelPayment(mobilePayPayment);\n          case 25:\n            mobilePayPayment.displayText = translations[\"mobilepay/status/PaymentFailed\"];\n            _context2.next = 31;\n            break;\n          case 28:\n            _context2.prev = 28;\n            _context2.t1 = _context2[\"catch\"](21);\n            mobilePayPayment.displayText = translations[\"mobilepay/status/FailedCouldNotCancel\"];\n          case 31:\n            _context2.prev = 31;\n            delete mobilePayPayment.awaitingResponse;\n            receipt.persist();\n            return _context2.finish(31);\n          case 35:\n            return _context2.abrupt(\"return\", paymentResult);\n          case 36:\n          case \"end\":\n            return _context2.stop();\n        }\n      }, _callee2, null, [[10, 18, 31, 35], [21, 28]]);\n    }));\n    return function (_x5) {\n      return _ref2.apply(this, arguments);\n    };\n  }();\n\n  /**\n   * Polls the payment status, and loops until\n   * it passes the items of loopingPaymentStatuses\n   *\n   * @param {*} mobilePayPayment\n   */\n  service.pollPaymentStatus = /*#__PURE__*/function () {\n    var _ref3 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee4(mobilePayPayment) {\n      var _yield$service$getPay, status, pollDelayInMs;\n      return _regeneratorRuntime().wrap(function _callee4$(_context4) {\n        while (1) switch (_context4.prev = _context4.next) {\n          case 0:\n            _context4.next = 2;\n            return service.getPayment(mobilePayPayment);\n          case 2:\n            _yield$service$getPay = _context4.sent;\n            status = _yield$service$getPay.status;\n            pollDelayInMs = _yield$service$getPay.pollDelayInMs;\n            mobilePayPayment.displayText = \"\".concat(translations[\"mobilepay/status/\".concat(status)], \" [\").concat(status, \"]\");\n            if (!loopingPaymentStatuses.includes(status)) {\n              _context4.next = 10;\n              break;\n            }\n            _context4.next = 9;\n            return new Promise(function (resolve) {\n              return setTimeout(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee3() {\n                return _regeneratorRuntime().wrap(function _callee3$(_context3) {\n                  while (1) switch (_context3.prev = _context3.next) {\n                    case 0:\n                      resolve(service.pollPaymentStatus(mobilePayPayment));\n                    case 1:\n                    case \"end\":\n                      return _context3.stop();\n                  }\n                }, _callee3);\n              })), pollDelayInMs);\n            });\n          case 9:\n            status = _context4.sent;\n          case 10:\n            return _context4.abrupt(\"return\", status);\n          case 11:\n          case \"end\":\n            return _context4.stop();\n        }\n      }, _callee4);\n    }));\n    return function (_x6) {\n      return _ref3.apply(this, arguments);\n    };\n  }();\n\n  /**\n   * Retrieves the payment ID\n   *\n   * @param {*} amount\n   */\n  service.getPaymentId = /*#__PURE__*/function () {\n    var _ref5 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee5(amount) {\n      var idempotency, _yield$service$loopRe, paymentId;\n      return _regeneratorRuntime().wrap(function _callee5$(_context5) {\n        while (1) switch (_context5.prev = _context5.next) {\n          case 0:\n            idempotency = uuid.v4();\n            _context5.next = 3;\n            return service.loopRequest(\"post\", \"api/mobilepay\", {\n              plannedCaptureDelay: \"None\",\n              currencyCode: currencyCode,\n              posId: posId,\n              orderId: orderId,\n              amount: amount\n            }, {\n              params: {\n                xMobilePayIdempotencyKey: idempotency,\n                vatNumber: vatNumber\n              },\n              ignoreError: true\n            }, \"mobilepay/toast/PaymentIdPollFail\");\n          case 3:\n            _yield$service$loopRe = _context5.sent;\n            paymentId = _yield$service$loopRe.paymentId;\n            return _context5.abrupt(\"return\", paymentId);\n          case 6:\n          case \"end\":\n            return _context5.stop();\n        }\n      }, _callee5);\n    }));\n    return function (_x7) {\n      return _ref5.apply(this, arguments);\n    };\n  }();\n\n  /**\n   *  Retrieves the refund Id\n   */\n  service.getRefundId = /*#__PURE__*/function () {\n    var _ref6 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee6(amount, originalOrderId, refundOrderId) {\n      var idempotency, _yield$service$loopRe2, refundId;\n      return _regeneratorRuntime().wrap(function _callee6$(_context6) {\n        while (1) switch (_context6.prev = _context6.next) {\n          case 0:\n            idempotency = uuid.v4();\n            _context6.next = 3;\n            return service.loopRequest(\"post\", \"api/mobilepay/refund\", {\n              plannedCaptureDelay: \"None\",\n              currencyCode: currencyCode,\n              posId: posId,\n              refundOrderId: refundOrderId,\n              originalOrderId: originalOrderId,\n              mobilePayMerchantVATNumber: vatNumber,\n              amount: amount\n            }, {\n              params: {\n                xMobilePayIdempotencyKey: idempotency\n              },\n              ignoreError: true\n            }, \"mobilepay/toast/RefundIdPollFail\");\n          case 3:\n            _yield$service$loopRe2 = _context6.sent;\n            refundId = _yield$service$loopRe2.refundId;\n            return _context6.abrupt(\"return\", refundId);\n          case 6:\n          case \"end\":\n            return _context6.stop();\n        }\n      }, _callee6);\n    }));\n    return function (_x8, _x9, _x0) {\n      return _ref6.apply(this, arguments);\n    };\n  }();\n\n  /**\n   * Retrieves the current payment\n   */\n  service.getPayment = /*#__PURE__*/function () {\n    var _ref7 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee7(mobilePayPayment) {\n      var response;\n      return _regeneratorRuntime().wrap(function _callee7$(_context7) {\n        while (1) switch (_context7.prev = _context7.next) {\n          case 0:\n            _context7.next = 2;\n            return backend.api.get(\"api/mobilepay/\".concat(mobilePayPayment.paymentId), {\n              params: {\n                vatNumber: vatNumber\n              }\n            });\n          case 2:\n            response = _context7.sent;\n            return _context7.abrupt(\"return\", response.data);\n          case 4:\n          case \"end\":\n            return _context7.stop();\n        }\n      }, _callee7);\n    }));\n    return function (_x1) {\n      return _ref7.apply(this, arguments);\n    };\n  }();\n\n  /**\n   * Captures the payment for finalization\n   *\n   * @param {*} paymentState\n   */\n  service.capturePayment = /*#__PURE__*/function () {\n    var _ref8 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee8(paymentState) {\n      var mobilePayPayment;\n      return _regeneratorRuntime().wrap(function _callee8$(_context8) {\n        while (1) switch (_context8.prev = _context8.next) {\n          case 0:\n            mobilePayPayment = paymentState.response.data.d;\n            if (mobilePayPayment.completed) {\n              _context8.next = 3;\n              break;\n            }\n            return _context8.abrupt(\"return\", paymentState);\n          case 3:\n            mobilePayPayment.awaitingResponse = true;\n            mobilePayPayment.displayText = translations[\"mobilepay/status/CapturingPayment\"];\n            _context8.prev = 5;\n            if (!isRefund) {\n              _context8.next = 11;\n              break;\n            }\n            _context8.next = 9;\n            return service.loopRequest(\"post\", \"api/mobilepay/refund/\".concat(refundId, \"/capture\"), {\n              amount: mobilePayPayment.amount.toNumber()\n            }, {\n              params: {\n                vatNumber: vatNumber\n              },\n              ignoreError: true\n            }, \"mobilepay/toast/PaymentCapturePollFail\");\n          case 9:\n            _context8.next = 13;\n            break;\n          case 11:\n            _context8.next = 13;\n            return service.loopRequest(\"post\", \"api/mobilepay/\".concat(mobilePayPayment.paymentId, \"/capture\"), {\n              amount: mobilePayPayment.amount.toNumber()\n            }, {\n              params: {\n                vatNumber: vatNumber\n              },\n              ignoreError: true\n            }, \"mobilepay/toast/PaymentCapturePollFail\");\n          case 13:\n            paymentState.captured = true;\n            mobilePayPayment.displayText = translations[\"mobilepay/status/PaymentCompleted\"];\n            _context8.next = 23;\n            break;\n          case 17:\n            _context8.prev = 17;\n            _context8.t0 = _context8[\"catch\"](5);\n            _context8.next = 21;\n            return service.cancelPayment(mobilePayPayment);\n          case 21:\n            paymentState.captured = false;\n            mobilePayPayment.displayText = translations[\"mobilepay/status/PaymentFailed\"];\n          case 23:\n            _context8.prev = 23;\n            mobilePayPayment.awaitingResponse = false;\n            return _context8.finish(23);\n          case 26:\n            receipt.persist();\n            return _context8.abrupt(\"return\", paymentState);\n          case 28:\n          case \"end\":\n            return _context8.stop();\n        }\n      }, _callee8, null, [[5, 17, 23, 26]]);\n    }));\n    return function (_x10) {\n      return _ref8.apply(this, arguments);\n    };\n  }();\n\n  /**\n   * Loops the provided method until success or limit\n   *\n   * @param {*} incomingMethod\n   * @param {*} initialFailTranslation\n   */\n  service.loopRequest = function (type, endpoint, body, params) {\n    var initialFailureTranslation = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : undefined;\n    var deferred = $q.defer();\n    var attempts = 0;\n    var _loopFn = function loopFn() {\n      return backend.api[type](endpoint, body, params).then(function (response) {\n        return deferred.resolve(response.data);\n      }, function () {\n        if (attempts++ >= 5) {\n          deferred.reject(false);\n        } else {\n          if (initialFailureTranslation && attempts === 1) notification.pop(\"info\", translations[initialFailureTranslation]);\n          setTimeout(function () {\n            return _loopFn();\n          }, 1000);\n        }\n      });\n    };\n    _loopFn();\n    return deferred.promise;\n  };\n\n  /**\n   * Validates the requested payment amount\n   *\n   * @param {*} amount\n   */\n  service.isAmountInvalid = function (amount) {\n    return amount.isNaN() || !inputValidationService.validateAmount(amount.abs());\n  };\n\n  /**\n   * Cancels the payment\n   */\n  service.cancelPayment = /*#__PURE__*/function () {\n    var _ref9 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee9(mobilePayPayment) {\n      var response;\n      return _regeneratorRuntime().wrap(function _callee9$(_context9) {\n        while (1) switch (_context9.prev = _context9.next) {\n          case 0:\n            _context9.next = 2;\n            return service.loopRequest(\"post\", \"api/mobilepay/\".concat(mobilePayPayment.paymentId, \"/cancel\"), null, {\n              ignoreError: true,\n              params: {\n                vatNumber: vatNumber\n              }\n            }, translations[\"mobilepay/status/RetryingCancel\"]);\n          case 2:\n            response = _context9.sent;\n            mobilePayPayment.cancelled = true;\n            return _context9.abrupt(\"return\", response);\n          case 5:\n          case \"end\":\n            return _context9.stop();\n        }\n      }, _callee9);\n    }));\n    return function (_x11) {\n      return _ref9.apply(this, arguments);\n    };\n  }();\n  function init() {\n    return _init.apply(this, arguments);\n  }\n  /**\n   * Reacts to a trigger for aborting the payment\n   */\n  function _init() {\n    _init = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee0() {\n      var err, mobilePayShopFeature, mobilePayPoses, currentConnectorMac, mobilePayPos;\n      return _regeneratorRuntime().wrap(function _callee0$(_context0) {\n        while (1) switch (_context0.prev = _context0.next) {\n          case 0:\n            err = \"MOBILEPAY_NOT_SETUP\";\n            mobilePayShopFeature = posConfig.getShopFeatures().mobilePay;\n            if (mobilePayShopFeature) {\n              _context0.next = 4;\n              break;\n            }\n            throw err;\n          case 4:\n            mobilePayPoses = mobilePayShopFeature.values.pointOfSales;\n            if (!(!mobilePayPoses || mobilePayPoses.length == 0)) {\n              _context0.next = 7;\n              break;\n            }\n            throw err;\n          case 7:\n            currentConnectorMac = backend.getCurrentDevice().mac;\n            mobilePayPos = mobilePayPoses.find(function (o) {\n              return o.ConnectorId == currentConnectorMac;\n            });\n            if (mobilePayPos) {\n              _context0.next = 11;\n              break;\n            }\n            throw err;\n          case 11:\n            posId = mobilePayPos.MobilePayPosId;\n            vatNumber = posConfig.getCvr();\n            currencyCode = posConfig.getLocalCurrency().currencyCode;\n            _context0.next = 16;\n            return $translate([\"toast/mobilepay/payment-failed\", \"mobilepay/status/Initiated\", \"mobilepay/status/IssuedToUser\", \"mobilepay/status/CancelledByUser\", \"mobilepay/status/CancelledByClient\", \"mobilepay/status/Reserved\", \"mobilepay/toast/PaymentIdPollFail\", \"mobilepay/toast/PaymentCapturePollFail\", \"mobilepay/status/CapturingPayment\", \"mobilepay/status/PaymentCompleted\", \"mobilepay/status/PaymentFailed\", \"mobilepay/status/FailedWithdrawing\", \"mobilepay/status/FailedCouldNotCancel\", \"mobilepay/status/RetryingCancel\", \"mobilepay/status/Paired\"]);\n          case 16:\n            translations = _context0.sent;\n            initialized = true;\n          case 18:\n          case \"end\":\n            return _context0.stop();\n        }\n      }, _callee0);\n    }));\n    return _init.apply(this, arguments);\n  }\n  $rootScope.$on(\"payment:mobilepay:abort\", function (_, payment) {\n    service.cancelPayment(payment);\n  });\n  return service;\n});\n","\"use strict\";\n\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _regeneratorRuntime() { \"use strict\"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return r; }; var t, r = {}, e = Object.prototype, n = e.hasOwnProperty, o = \"function\" == typeof Symbol ? Symbol : {}, i = o.iterator || \"@@iterator\", a = o.asyncIterator || \"@@asyncIterator\", u = o.toStringTag || \"@@toStringTag\"; function c(t, r, e, n) { return Object.defineProperty(t, r, { value: e, enumerable: !n, configurable: !n, writable: !n }); } try { c({}, \"\"); } catch (t) { c = function c(t, r, e) { return t[r] = e; }; } function h(r, e, n, o) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype); return c(a, \"_invoke\", function (r, e, n) { var o = 1; return function (i, a) { if (3 === o) throw Error(\"Generator is already running\"); if (4 === o) { if (\"throw\" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var u = n.delegate; if (u) { var c = d(u, n); if (c) { if (c === f) continue; return c; } } if (\"next\" === n.method) n.sent = n._sent = n.arg;else if (\"throw\" === n.method) { if (1 === o) throw o = 4, n.arg; n.dispatchException(n.arg); } else \"return\" === n.method && n.abrupt(\"return\", n.arg); o = 3; var h = s(r, e, n); if (\"normal\" === h.type) { if (o = n.done ? 4 : 2, h.arg === f) continue; return { value: h.arg, done: n.done }; } \"throw\" === h.type && (o = 4, n.method = \"throw\", n.arg = h.arg); } }; }(r, n, new Context(o || [])), !0), a; } function s(t, r, e) { try { return { type: \"normal\", arg: t.call(r, e) }; } catch (t) { return { type: \"throw\", arg: t }; } } r.wrap = h; var f = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var l = {}; c(l, i, function () { return this; }); var p = Object.getPrototypeOf, y = p && p(p(x([]))); y && y !== e && n.call(y, i) && (l = y); var v = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(l); function g(t) { [\"next\", \"throw\", \"return\"].forEach(function (r) { c(t, r, function (t) { return this._invoke(r, t); }); }); } function AsyncIterator(t, r) { function e(o, i, a, u) { var c = s(t[o], t, i); if (\"throw\" !== c.type) { var h = c.arg, f = h.value; return f && \"object\" == _typeof(f) && n.call(f, \"__await\") ? r.resolve(f.__await).then(function (t) { e(\"next\", t, a, u); }, function (t) { e(\"throw\", t, a, u); }) : r.resolve(f).then(function (t) { h.value = t, a(h); }, function (t) { return e(\"throw\", t, a, u); }); } u(c.arg); } var o; c(this, \"_invoke\", function (t, n) { function i() { return new r(function (r, o) { e(t, n, r, o); }); } return o = o ? o.then(i, i) : i(); }, !0); } function d(r, e) { var n = e.method, o = r.i[n]; if (o === t) return e.delegate = null, \"throw\" === n && r.i[\"return\"] && (e.method = \"return\", e.arg = t, d(r, e), \"throw\" === e.method) || \"return\" !== n && (e.method = \"throw\", e.arg = new TypeError(\"The iterator does not provide a '\" + n + \"' method\")), f; var i = s(o, r.i, e.arg); if (\"throw\" === i.type) return e.method = \"throw\", e.arg = i.arg, e.delegate = null, f; var a = i.arg; return a ? a.done ? (e[r.r] = a.value, e.next = r.n, \"return\" !== e.method && (e.method = \"next\", e.arg = t), e.delegate = null, f) : a : (e.method = \"throw\", e.arg = new TypeError(\"iterator result is not an object\"), e.delegate = null, f); } function w(t) { this.tryEntries.push(t); } function m(r) { var e = r[4] || {}; e.type = \"normal\", e.arg = t, r[4] = e; } function Context(t) { this.tryEntries = [[-1]], t.forEach(w, this), this.reset(!0); } function x(r) { if (null != r) { var e = r[i]; if (e) return e.call(r); if (\"function\" == typeof r.next) return r; if (!isNaN(r.length)) { var o = -1, a = function e() { for (; ++o < r.length;) if (n.call(r, o)) return e.value = r[o], e.done = !1, e; return e.value = t, e.done = !0, e; }; return a.next = a; } } throw new TypeError(_typeof(r) + \" is not iterable\"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, c(v, \"constructor\", GeneratorFunctionPrototype), c(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction), GeneratorFunction.displayName = c(GeneratorFunctionPrototype, u, \"GeneratorFunction\"), r.isGeneratorFunction = function (t) { var r = \"function\" == typeof t && t.constructor; return !!r && (r === GeneratorFunction || \"GeneratorFunction\" === (r.displayName || r.name)); }, r.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, c(t, u, \"GeneratorFunction\")), t.prototype = Object.create(v), t; }, r.awrap = function (t) { return { __await: t }; }, g(AsyncIterator.prototype), c(AsyncIterator.prototype, a, function () { return this; }), r.AsyncIterator = AsyncIterator, r.async = function (t, e, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(h(t, e, n, o), i); return r.isGeneratorFunction(e) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, g(v), c(v, u, \"Generator\"), c(v, i, function () { return this; }), c(v, \"toString\", function () { return \"[object Generator]\"; }), r.keys = function (t) { var r = Object(t), e = []; for (var n in r) e.unshift(n); return function t() { for (; e.length;) if ((n = e.pop()) in r) return t.value = n, t.done = !1, t; return t.done = !0, t; }; }, r.values = x, Context.prototype = { constructor: Context, reset: function reset(r) { if (this.prev = this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = \"next\", this.arg = t, this.tryEntries.forEach(m), !r) for (var e in this) \"t\" === e.charAt(0) && n.call(this, e) && !isNaN(+e.slice(1)) && (this[e] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0][4]; if (\"throw\" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(r) { if (this.done) throw r; var e = this; function n(t) { a.type = \"throw\", a.arg = r, e.next = t; } for (var o = e.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i[4], u = this.prev, c = i[1], h = i[2]; if (-1 === i[0]) return n(\"end\"), !1; if (!c && !h) throw Error(\"try statement without catch or finally\"); if (null != i[0] && i[0] <= u) { if (u < c) return this.method = \"next\", this.arg = t, n(c), !0; if (u < h) return n(h), !1; } } }, abrupt: function abrupt(t, r) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var n = this.tryEntries[e]; if (n[0] > -1 && n[0] <= this.prev && this.prev < n[2]) { var o = n; break; } } o && (\"break\" === t || \"continue\" === t) && o[0] <= r && r <= o[2] && (o = null); var i = o ? o[4] : {}; return i.type = t, i.arg = r, o ? (this.method = \"next\", this.next = o[2], f) : this.complete(i); }, complete: function complete(t, r) { if (\"throw\" === t.type) throw t.arg; return \"break\" === t.type || \"continue\" === t.type ? this.next = t.arg : \"return\" === t.type ? (this.rval = this.arg = t.arg, this.method = \"return\", this.next = \"end\") : \"normal\" === t.type && r && (this.next = r), f; }, finish: function finish(t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[2] === t) return this.complete(e[4], e[3]), m(e), f; } }, \"catch\": function _catch(t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[0] === t) { var n = e[4]; if (\"throw\" === n.type) { var o = n.arg; m(e); } return o; } } throw Error(\"illegal catch attempt\"); }, delegateYield: function delegateYield(r, e, n) { return this.delegate = { i: x(r), r: e, n: n }, \"next\" === this.method && (this.arg = t), f; } }, r; }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"next\", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"throw\", n); } _next(void 0); }); }; }\npos.controller(\"PaymentCtrl\", function ($scope, $state, receipt, notification, keypadManager, sales, $translate, $timeout, $interval, posConfig, $filter, $locale, paymentService, $rootScope, $log, eventBus, fluctuatingPropertiesHelper, itemInfoService, promptEveryType, backend, infrasecService, coreLoyaltyService) {\n  \"use strict\";\n\n  $scope.itemLine = receipt.getReceipt().items; //array of itemobject\n  $scope.paymentLine = receipt.getReceipt().payments; // array of paymentoject\n  $scope.paymentIndex = -1;\n  $scope.saleFinished = false;\n  loadConfig();\n  $scope.moneyRemainder = true;\n  var suggestion;\n  var currentCurrency;\n  var onehundred = new Decimal(100);\n  var finishTimeout;\n  var counter;\n  $scope.handleInput = handlePayment;\n  $scope.handleDenominationClick = handleDenominationClick;\n  var i18nProperAmount, i18nGiftCertificateInvalid, i18nInvalidTypeAmount, i18nInvalidCreditNoteAmount, i18nSurcharge, i18ncantNavigate, i18nPleaseWait, i18nInvalidPaymentDevice, i18nOvertenderNotAllowed, i18nNoCustomerSelected, i18nSelectCustomer, i18nCloseDrawer, i18nCannotIssueGiftCertificateAsChange, i18nNoAccountCurrency, i18nNoExchangeRateBetweenAccountCurrencyAndLocal, i18nVoucherUsedOnReceipt, i18nVoucherNotFound, i18nVoucherExpired, i18nVoucherConflict, i18nVoucherError, i18nVoucherFaulty, i18nOverchargeNotAllowed, i18nLoyaltyOverchargeNotAllowed, i18nLoyaltyOverpayNotAllowed, i18nConnectorFailedTitle, i18nConnectorFailedText, i18nLoyaltyNotConfiguredText, i18nLoyaltyGiftCertificatePurchaseNotAllowed, i18nCardFaultState, i18nMobilePayNotSetup, i18nMobilePayInvalidRefund, i18nMaxCashPayment;\n  $translate([\"toast/proper amount\", \"toast/giftcertificate_invalid\", \"toast/invalid_type_amount\", \"toast/invalid_creditnote_amount\", \"label/surcharge\", \"label/cantNavigateAway\", \"toast/pleasewait\", \"toast/invalid_paymentdevice\", \"toast/overtender_not_allowed\", \"toast/no_customer_selected\", \"toast/select_customer\", \"toast/cannot_certificate_as_change\", \"toast/close-drawer\", \"toast/no-account-currency\", \"toast/no-exhance-account-local\", \"toast/voucher/used-on-receipt\", \"toast/voucher/not-found\", \"toast/voucher/expired\", \"toast/voucher/conflict\", \"toast/voucher/error\", \"toast/voucher/faulty\", \"toast/overcharge-not-allowed\", \"toast/loyalty-overcharge-not-allowed\", \"toast/loyalty-overpay-not-allowed\", \"toast/connector_failed_payment_title\", \"toast/connector_failed_payment_text\", \"toast/loyalty/currencynotconfigured\", \"toast/loyalty/loyalty-giftcertificate-purchase-not-allowed\", \"toast/card/fault-state\", \"toast/mobilepay-not-setup\", \"toast/mobilepay-invalid-refund\", \"toast/max-cash-payment\"]).then(function (translations) {\n    i18nProperAmount = translations[\"toast/proper amount\"];\n    i18nGiftCertificateInvalid = translations[\"toast/giftcertificate_invalid\"];\n    i18nInvalidTypeAmount = translations[\"toast/invalid_type_amount\"];\n    i18nInvalidCreditNoteAmount = translations[\"toast/invalid_creditnote_amount\"];\n    i18nSurcharge = translations[\"label/surcharge\"];\n    i18ncantNavigate = translations[\"label/cantNavigateAway\"];\n    i18nPleaseWait = translations[\"toast/pleasewait\"];\n    i18nInvalidPaymentDevice = translations[\"toast/invalid_paymentdevice\"];\n    i18nOvertenderNotAllowed = translations[\"toast/overtender_not_allowed\"];\n    i18nNoCustomerSelected = translations[\"toast/no_customer_selected\"];\n    i18nSelectCustomer = translations[\"toast/select_customer\"];\n    i18nCannotIssueGiftCertificateAsChange = translations[\"toast/cannot_certificate_as_change\"];\n    i18nCloseDrawer = translations[\"toast/close-drawer\"];\n    i18nNoAccountCurrency = translations[\"toast/no-account-currency\"];\n    i18nNoExchangeRateBetweenAccountCurrencyAndLocal = translations[\"toast/no-exhance-account-local\"];\n    i18nVoucherUsedOnReceipt = translations[\"toast/voucher/used-on-receipt\"];\n    i18nVoucherNotFound = translations[\"toast/voucher/not-found\"];\n    i18nVoucherExpired = translations[\"toast/voucher/expired\"];\n    i18nVoucherConflict = translations[\"toast/voucher/conflict\"];\n    i18nVoucherError = translations[\"toast/voucher/error\"];\n    i18nVoucherFaulty = translations[\"toast/voucher/faulty\"];\n    i18nOverchargeNotAllowed = translations[\"toast/overcharge-not-allowed\"];\n    i18nLoyaltyOverchargeNotAllowed = translations[\"toast/loyalty-overcharge-not-allowed\"];\n    i18nLoyaltyOverpayNotAllowed = translations[\"toast/loyalty-overpay-not-allowed\"];\n    i18nConnectorFailedTitle = translations[\"toast/connector_failed_payment_title\"];\n    i18nConnectorFailedText = translations[\"toast/connector_failed_payment_text\"];\n    i18nLoyaltyNotConfiguredText = translations[\"toast/loyalty/currencynotconfigured\"];\n    i18nLoyaltyGiftCertificatePurchaseNotAllowed = translations[\"toast/loyalty/loyalty-giftcertificate-purchase-not-allowed\"];\n    i18nCardFaultState = translations[\"toast/card/fault-state\"];\n    i18nMobilePayNotSetup = translations[\"toast/mobilepay-not-setup\"];\n    i18nMobilePayInvalidRefund = translations[\"toast/mobilepay-invalid-refund\"];\n    i18nMaxCashPayment = translations[\"toast/max-cash-payment\"];\n    setupErrorHandlerMapping();\n    showWarningIfLoyaltyNotConfigured(posConfig.getLocalCurrency());\n  });\n  if (!receipt.getReceipt()) {\n    receipt.prepareReceipt();\n  }\n  this.$onInit = /*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee() {\n    return _regeneratorRuntime().wrap(function _callee$(_context) {\n      while (1) switch (_context.prev = _context.next) {\n        case 0:\n          if (!(posConfig.tenantGeneralPosSettings.enableSerialNumberTracking && receiptContainsSerializedItemsWithoutSerialNumber())) {\n            _context.next = 8;\n            break;\n          }\n          _context.t0 = notification;\n          _context.next = 4;\n          return $translate(\"toast/serialized_item/no_serial_number\");\n        case 4:\n          _context.t1 = _context.sent;\n          _context.t0.pop.call(_context.t0, \"error\", _context.t1);\n          $scope.$state.go(\"root.split.pos\");\n          return _context.abrupt(\"return\");\n        case 8:\n          if (!infrasecService.isActive()) {\n            _context.next = 17;\n            break;\n          }\n          if (!(receipt.getReceipt().items.find(function (i) {\n            return i.quantity > 0;\n          }) && receipt.getReceipt().items.find(function (i) {\n            return i.quantity < 0;\n          }))) {\n            _context.next = 17;\n            break;\n          }\n          _context.t2 = notification;\n          _context.next = 13;\n          return $translate(\"infrasec/saleAndReturnNotAllowed\");\n        case 13:\n          _context.t3 = _context.sent;\n          _context.t2.pop.call(_context.t2, \"error\", _context.t3);\n          $scope.$state.go(\"root.split.pos\");\n          return _context.abrupt(\"return\");\n        case 17:\n          if (receipt.getReceipt().payments.length > 0 && receipt.getReceipt().payments[0].paymentType == \"PrePaid\") {\n            handlePayment(0, receipt.getReceipt().payments[0].paymentType);\n          }\n          _context.next = 20;\n          return itemInfoService.executeItemInfo(receipt.getReceipt(), undefined, promptEveryType.transaction);\n        case 20:\n          if ($rootScope.showGiftAidModal && receipt.getReceipt().items.find(function (i) {\n            return fluctuatingPropertiesHelper.isItemGiftAidable(i);\n          })) {\n            if (!receipt.isGiftAidable()) {\n              $scope.giftAidModal.isVisible = true;\n            } else {\n              setGiftAidDetailsData();\n              $scope.giftAidDetailsModal.isVisible = true;\n            }\n            $rootScope.showGiftAidModal = false;\n          } else {\n            receipt.removeTransactionGiftAidProperties();\n            handleStateParam();\n          }\n        case 21:\n        case \"end\":\n          return _context.stop();\n      }\n    }, _callee);\n  }));\n  function handleStateParam() {\n    if ($scope.$stateParams.type && receipt.getReceipt().items.length > 0) {\n      $log.debug($scope.$stateParams.type);\n      var paymentType = paymentService.getPaymentType($scope.$stateParams.type);\n      handlePayment(paymentType.amountSuggestion(), paymentType.type);\n    }\n  }\n  $scope.$on(\"$stateChangeStart\", function (event, toState, toParams, fromState, fromParams) {\n    // transitionTo() promise will be rejected with\n    // a 'transition prevented' error\n    if (paymentService.isNavigationBlocked(receipt.getReceipt().payments) && !$scope.saleFinished) {\n      event.preventDefault();\n      notification.pop(\"warning\", i18ncantNavigate);\n      return;\n    }\n\n    // disable changing state when a request is ongoing\n    if ($scope.shouldDisableInput()) {\n      notification.pop(\"info\", i18nPleaseWait);\n      event.preventDefault();\n      return;\n    }\n  });\n  var paymentChoice = $scope.$on(\"paymentChoice\", function (event, choice, currency, amountSuggestion) {\n    currentCurrency = currency ? currency : posConfig.getLocalCurrency();\n    showWarningIfLoyaltyNotConfigured(currentCurrency);\n    setPaymentChoice(choice, currency);\n  });\n  $scope.$on(\"$destroy\", paymentChoice);\n  $scope.$on(\"payment:mobilepay:resume\", function (event, payment) {\n    $scope.awaitingResponse = true;\n    paymentService.retryPayment(payment, \"MobilePay\").then(saveSaleHandler)[\"catch\"](errorHandler)[\"finally\"](hideSpinner);\n  });\n  $scope.$on(\"payment:card:resume\", function (event, payment) {\n    $scope.awaitingResponse = true;\n    paymentService.retryPayment(payment, \"Card\").then(saveSaleHandler)[\"catch\"](errorHandler)[\"finally\"](hideSpinner);\n  });\n  $rootScope.$on(\"payment:card:recover\", function (event, payment) {\n    $log.debug(\"payment:card:recover\");\n    $log.debug(payment);\n    paymentService.recoverCardPayment(payment).then(saveSaleHandler)[\"catch\"](errorHandler)[\"finally\"](hideSpinner);\n  });\n\n  // paymentChoice is not always changed from the same place (e.g. 'OfflineCard'), which is why we watch it\n  $scope.$watch(\"paymentChoice\", function (newValue) {\n    if (!newValue) handlePaymentSignalTranslation(\"label/choosepayment\");else if (isPayingWithVoucher(newValue)) handlePaymentSignalTranslation(\"label/entervoucher\", {\n      u: $translate.instant(voucheri18nLabel(newValue)).toLowerCase()\n    });else if (newValue === \"OfflineCard\") $scope.paymentSignal = \"Please enter terminal authentication code\";else {\n      var translateKey = \"button/\" + newValue.toLowerCase();\n      var translation = $translate.instant(\"button/\" + newValue.toLowerCase()).toLowerCase();\n      handlePaymentSignalTranslation(\"label/enteramount\", {\n        u: translation == translateKey ? newValue : translation\n      });\n    }\n  });\n  function setPaymentChoice(choice, currency) {\n    var paymentType = paymentService.getPaymentType(choice);\n    if ($scope.shouldDisableInput() || !validateChoice(paymentType, choice, $scope.getRemainder(), currency)) return;\n    var currencyDenominations = getDenominations(choice, currency);\n    $rootScope.IsNumericOnly = true;\n    keypadManager.show(null, null, true, false, handleDenominationClick, currencyDenominations);\n    $scope.paymentChoice = choice;\n    $scope.currency = currency;\n    if (isPayingWithVoucher(choice)) {\n      $log.debug(\"Pays with voucher\", choice);\n      return;\n    }\n    setAmount(paymentType.amountSuggestion(currency));\n    keypadManager.selectAll();\n  }\n  function getDenominations(paymentChoice, currencyChoice) {\n    var currencies = posConfig.getCurrencySetup();\n    if ([\"Cash\", \"Card\"].includes(paymentChoice)) {\n      return Object.values(currencies).find(function (cur) {\n        return cur.isLocal;\n      }).notes;\n    } else if (paymentChoice == \"Currency\") {\n      return Object.values(currencies).find(function (cur) {\n        return cur.name == currencyChoice.name;\n      }).notes;\n    } else {\n      return [];\n    }\n  }\n  $scope.resetPaymentChoice = function () {\n    $scope.paymentChoice = \"\";\n    $scope.amount = \"\";\n    currentCurrency = null;\n    $scope.handleInput = handlePayment;\n  };\n  function handlePaymentSignalTranslation(label, interpolation) {\n    $translate(label, interpolation).then(function (translation) {\n      $scope.paymentSignal = translation;\n    });\n  }\n  function setAmount(amount) {\n    $scope.amount = $filter(\"number\")(amount.toFixed(2), 2).replace($locale.NUMBER_FORMATS.GROUP_SEP, \"\");\n  }\n  function voucheri18nLabel(choice) {\n    choice = choice.toLowerCase();\n    switch (choice) {\n      case \"foreigngiftcertificate\":\n      case \"giftcertificate\":\n        return \"label/auto number\";\n      case \"foreigncreditvoucher\":\n      case \"creditvoucher\":\n        return \"label/voucher_number\";\n      case \"downpayment\":\n        return \"label/downPayment\";\n    }\n  }\n  function isVoucher(choice) {\n    choice = choice.toLowerCase();\n    return [\"giftcertificate\", \"creditvoucher\", \"downpayment\"].includes(choice);\n  }\n  function isPayingWithVoucher(choice) {\n    return isVoucher(choice) && !receipt.getTotal().minus(receipt.getPaymentsTotal()).isNegative();\n  }\n  $scope.checkVoucherNumber = function (payment) {\n    return payment.vouchernumber && payment.vouchernumber.trim().length !== 0;\n  };\n  $scope.getRemainder = function (rounded) {\n    var remainder = receipt.getTotal().minus(receipt.getPaymentsTotal());\n    return rounded ? sales.round(remainder, sales.getLocalCurrency(), false) : remainder;\n  };\n  $scope.shouldShowChangeInfo = function () {\n    var total = receipt.getTotal();\n    if (total.isNeg()) return false;\n    return $scope.getRemainder().isNeg();\n  };\n  $scope.selectPaymentline = function (index) {\n    // $scope.paymentIndex = index;\n    if ($scope.paymentIndex === index) {\n      //Work as Accordion\n      $scope.paymentIndex = -1;\n    } else $scope.paymentIndex = index;\n  };\n  $scope.selectedPaymentline = function () {\n    return $scope.paymentIndex;\n  };\n  $scope.shouldDisableInput = function () {\n    return $scope.awaitingResponse;\n  };\n  $scope.showLinePrice = function (article) {\n    return article.effectiveSalesPrice.times(article.quantity);\n  };\n  $scope.showLineFullPrice = function (article) {\n    return article.salesPrice.times(article.quantity);\n  };\n  $scope.showLineDiscountPct = function (article) {\n    return onehundred.minus(article.effectiveSalesPrice.times(onehundred).dividedBy(article.salesPrice));\n  };\n  function handlePayment(amount, paymentChoice, contextInfo, keepKeypadOpen) {\n    if ($scope.awaitingResponse) return;\n    var checkPaymentType = paymentService.getPaymentType(paymentChoice);\n    var checkAmountSuggestion = checkPaymentType.amountSuggestion($scope.currency);\n    var checkAmountDecimal = new Decimal(amount);\n    var totalAmount = receipt.getTotal();\n    if (paymentChoice == \"Cash\" && totalAmount < 0) {\n      if (checkAmountDecimal.gte(checkAmountSuggestion) && JSON.stringify(checkAmountDecimal) !== JSON.stringify(checkAmountSuggestion)) return notification.pop(\"danger\", i18nProperAmount);\n    }\n    if (paymentChoice == \"Cash\" && $scope.options.enableMaxCashPayment) {\n      var maxCashPayment = new Decimal($scope.options.maxCashPayment);\n      var totalCashPayments = checkAmountDecimal.plus(receipt.getPaymentTypeTotal(\"Cash\"));\n      if (maxCashPayment.gt(0) && totalCashPayments.gt(maxCashPayment)) {\n        return notification.pop(\"danger\", i18nMaxCashPayment + \" \" + maxCashPayment.toFixed(2));\n      }\n    }\n    if (!paymentChoice) {\n      this.resetPaymentChoice();\n      return;\n    }\n    $scope.awaitingResponse = true;\n    paymentService.setIsPaymentProcessing(true);\n    if (!keepKeypadOpen) keypadManager.hide();\n    var paymentType = paymentService.getPaymentType(paymentChoice);\n    return paymentService.getPaymentType(paymentChoice).validateAmount(amount, paymentChoice, contextInfo).then(function () {\n      return paymentType.makePayment(amount, currentCurrency, contextInfo).then(saveSaleHandler);\n    }).then(finishPaymentValidation)[\"catch\"](errorHandler)[\"finally\"](hideSpinner);\n  }\n  function handleDenominationClick(amount, paymentChoice, contextInfo) {\n    if ($scope.awaitingResponse) return;\n    var paymentType = paymentService.getPaymentType(paymentChoice);\n    var amountSuggestion = paymentType.amountSuggestion($scope.currency);\n    var amountDecimal = new Decimal(amount);\n    var totalAmount = receipt.getTotal();\n    if (amountDecimal.gte(amountSuggestion) && totalAmount < 0) return notification.pop(\"danger\", i18nProperAmount);\n    handlePayment(amount, paymentChoice, contextInfo, amountDecimal.lte(amountSuggestion)).then(function () {\n      var amountSuggestion = paymentType.amountSuggestion($scope.currency);\n      if (amountSuggestion.gt(new Decimal(0))) setAmount(amountSuggestion);\n    });\n  }\n  function handleOfflineCardPayment(authenticationCode, amount) {\n    if (authenticationCode.length > 6) return notification.pop(\"info\", \"Easy there tiger!\", \"The terminal authentication code cannot exceed 6 characters\");\n    authenticationCode = authenticationCode || \"9999\";\n    handlePayment(amount, \"Card\", authenticationCode);\n  }\n  eventBus.subscribe(eventBus.events.payment.paymentInputRequired, null, function (ev, params) {\n    $scope.paymentSignal = params.text;\n    $scope.amount = params.input;\n    if (params.numericOnly) {\n      if (params.input) {\n        setAmount(params.input);\n      }\n      $rootScope.IsNumericOnly = true;\n    }\n    $scope.handleInput = params.handleInput;\n    setTimeout(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee2() {\n      return _regeneratorRuntime().wrap(function _callee2$(_context2) {\n        while (1) switch (_context2.prev = _context2.next) {\n          case 0:\n            if (params.numpad) {\n              keypadManager.show(null, null, true);\n            } else {\n              keypadManager.show();\n            }\n          case 1:\n          case \"end\":\n            return _context2.stop();\n        }\n      }, _callee2);\n    })), 250);\n  });\n  function requestOfflineCardAuthCode(paymentState) {\n    // this needs to be out of the chain otherwise it will be suppressed\n    // timeout ensures that it will be executed after the chain ends\n    $timeout(function () {\n      $scope.handleInput = function (authenticationCode) {\n        handleOfflineCardPayment(authenticationCode, paymentState.response.data.d.amount);\n      };\n      $scope.amount = \"\";\n      $scope.paymentChoice = \"OfflineCard\";\n      $log.debug($scope.paymentChoice);\n      keypadManager.show(null, null, true);\n    });\n  }\n\n  /**\n   * Handles a successful save sale. Begins the transition back to the login screen.\n   * @param  {Object} response Q promise response\n   */\n  function saveSaleHandler(paymentState) {\n    if (!paymentState.isPaymentEnough) return;\n    if (paymentState.isPaymentEnough && paymentState.completeOnDevice.status !== 200) notification.pop(\"warn\", \"Sale is finished but printing receipt failed\");\n    $scope.finishSaleModal.isVisible = true;\n    $scope.countdown = 0;\n    finishTimeout = $timeout(function () {\n      $scope.finishSale();\n    }, $scope.countdown * 1000);\n    counter = $interval(function () {\n      $scope.countdown--;\n    }, 1000);\n  }\n  function finishPaymentValidation() {\n    paymentService.setIsPaymentProcessing(false);\n  }\n  function receiptContainsSerializedItemsWithoutSerialNumber() {\n    if (receipt.getReceipt().items.find(function (i) {\n      return i.type == 2 && !fluctuatingPropertiesHelper.getSerialNo(i);\n    })) {\n      return true;\n    }\n    return false;\n  }\n\n  /**\n   * Transition back to the login screen.\n   * @return {[type]} [description]\n   */\n  $scope.finishSale = /*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee3() {\n    var savedReceipt, canProceed;\n    return _regeneratorRuntime().wrap(function _callee3$(_context3) {\n      while (1) switch (_context3.prev = _context3.next) {\n        case 0:\n          if (finishTimeout) $timeout.cancel(finishTimeout);\n          $interval.cancel(counter);\n          savedReceipt = angular.copy(receipt.getReceipt());\n          $scope.saleFinished = true;\n          receipt.closeReceipt();\n          coreLoyaltyService.detachCustomer();\n          _context3.next = 8;\n          return eventBus.notifyAsync(eventBus.events.downpayment.finishTransaction, currentCurrency);\n        case 8:\n          canProceed = _context3.sent;\n          if (canProceed) {\n            $scope.finishSaleModal.isVisible = false;\n            if ($scope.options.emailReceiptIsDefault || $scope.options.askEmailReceipt) {\n              $scope.$state.go(\"root.split.paymentfinished\", {\n                savedReceipt: savedReceipt\n              });\n            } else if (!$scope.options.stayLoggedInAfterSale) {\n              $scope.$state.go(\"root.login\");\n            } else {\n              receipt.prepareReceipt();\n            }\n          }\n        case 10:\n        case \"end\":\n          return _context3.stop();\n      }\n    }, _callee3);\n  }));\n  $scope.finishSaleWithoutLogin = /*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee4() {\n    var canProceed;\n    return _regeneratorRuntime().wrap(function _callee4$(_context4) {\n      while (1) switch (_context4.prev = _context4.next) {\n        case 0:\n          _context4.next = 2;\n          return eventBus.notifyAsync(eventBus.events.pos.login);\n        case 2:\n          canProceed = _context4.sent;\n          if (canProceed) {\n            $scope.$state.go(\"root.split.pos\");\n          } else {\n            notification.pop(\"warn\", i18nCloseDrawer);\n          }\n        case 4:\n        case \"end\":\n          return _context4.stop();\n      }\n    }, _callee4);\n  }));\n  $scope.cancelPayment = /*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee5() {\n    return _regeneratorRuntime().wrap(function _callee5$(_context5) {\n      while (1) switch (_context5.prev = _context5.next) {\n        case 0:\n          eventBus.notify(eventBus.events.payment.cancel, null);\n          $scope.$state.go(\"root.split.pos\");\n        case 2:\n        case \"end\":\n          return _context5.stop();\n      }\n    }, _callee5);\n  }));\n  var msgHandler = function msgHandler(type, title, message) {\n    return function () {\n      return notification.pop(type, title, message);\n    };\n  };\n  var infoMsgHandler = function infoMsgHandler(title, message) {\n    return msgHandler(\"info\", title, message);\n  };\n  var errorMsgHandler = function errorMsgHandler(title, message) {\n    return msgHandler(\"error\", title, message);\n  };\n  var errorHandlerMapping = {};\n  function setupErrorHandlerMapping() {\n    errorHandlerMapping = {\n      INVALID_AMOUNT: infoMsgHandler(i18nProperAmount),\n      INVALID_FORMAT: infoMsgHandler(i18nProperAmount),\n      INVALID_TYPE_AMOUNT: infoMsgHandler(i18nInvalidTypeAmount),\n      VOUCHER_USED_ON_RECEIPT: errorMsgHandler(i18nVoucherUsedOnReceipt),\n      VOUCHER_EXPIRED: errorMsgHandler(i18nVoucherExpired),\n      VOUCHER_NOT_FOUND: errorMsgHandler(i18nVoucherNotFound),\n      VOUCHER_CONFLICT: errorMsgHandler(i18nVoucherConflict),\n      VOUCHER_ERROR: errorMsgHandler(i18nVoucherError, i18nVoucherFaulty),\n      INVALID_CREDITNOTE_AMOUNT: errorMsgHandler(i18nInvalidCreditNoteAmount),\n      INVALID_PAYMENTDEVICE: errorMsgHandler(i18nInvalidPaymentDevice),\n      PAYMENT_AMOUNT_EXCEEDS_REMAINING_AMOUNT: errorMsgHandler(i18nOvertenderNotAllowed),\n      NO_CUSTOMER_SELECTED: errorMsgHandler(i18nNoCustomerSelected, i18nSelectCustomer),\n      ISSUE_GIFT_CERTIFICATE_CHANGE: errorMsgHandler(i18nCannotIssueGiftCertificateAsChange),\n      CUSTOMER_NO_ACCOUNT_CURRENCY: errorMsgHandler(i18nNoAccountCurrency),\n      CUSTOMER_ACCT_CURRENCY_NOT_SETUP: errorMsgHandler(i18nNoExchangeRateBetweenAccountCurrencyAndLocal),\n      OVERCHARGE_NOT_ALLOWED: errorMsgHandler(i18nOverchargeNotAllowed),\n      LOYALTY_OVERCHARGE_NOT_ALLOWED: errorMsgHandler(i18nLoyaltyOverchargeNotAllowed),\n      LOYALTY_OVERPAY_NOT_ALLOWED: errorMsgHandler(i18nLoyaltyOverpayNotAllowed),\n      LOYALTY_GIFTCERTIFICATE_PURCHASE_NOT_ALLOWED: errorMsgHandler(i18nLoyaltyGiftCertificatePurchaseNotAllowed),\n      CARD_FAULT_STATE: errorMsgHandler(i18nCardFaultState),\n      MOBILEPAY_NOT_SETUP: errorMsgHandler(i18nMobilePayNotSetup),\n      MOBILEPAY_INVALID_REFUND: errorMsgHandler(i18nMobilePayInvalidRefund)\n    };\n  }\n  function errorHandler(errorResponse) {\n    var _errorResponse$respon;\n    $log.debug(\"in error handler\");\n    $log.debug(errorResponse);\n    finishPaymentValidation();\n    if (errorResponse in errorHandlerMapping) {\n      errorHandlerMapping[errorResponse]();\n    }\n    if (errorResponse !== null && errorResponse !== void 0 && (_errorResponse$respon = errorResponse.response) !== null && _errorResponse$respon !== void 0 && _errorResponse$respon.message) {\n      return notification.pop(\"error\", errorResponse.response.message);\n    }\n    if (typeof errorResponse === \"string\") return;\n    if (errorResponse.cardOffline) return requestOfflineCardAuthCode(errorResponse);\n\n    // if it's a card rejection then just break - the error reason will be displayed in the paymentline\n    if (errorResponse.cardRejected || errorResponse.noErrorMessage) return;\n\n    // this works because === is type strict - otherwise undefined would also hit here and incorrectly suppress an error\n    // note that this is more than just a log line - it's a break guard due to the return.\n    if (errorResponse.isPaymentEnough === false) return $log.debug(\"not enough paid\");\n    notification.pop(\"error\", i18nConnectorFailedTitle, i18nConnectorFailedText);\n  }\n  function showWarningIfLoyaltyNotConfigured(currency) {\n    var loyaltyRatios = $scope.loyalty.ratios.find(function (x) {\n      return x.currencyCode == currency.name;\n    });\n    if (!loyaltyRatios || loyaltyRatios.ratioCurrencyToPoint === 0 && loyaltyRatios.ratioPointToCurrency === 0) {\n      if (!$scope.loyalty.settings.isShopExcluded) {\n        notification.pop(\"warning\", i18nLoyaltyNotConfiguredText);\n      }\n    }\n  }\n  function hideSpinner(result) {\n    $scope.awaitingResponse = false;\n  }\n  $scope.goToPayment = /*#__PURE__*/function () {\n    var _ref6 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee6(payment) {\n      var currentDevice;\n      return _regeneratorRuntime().wrap(function _callee6$(_context6) {\n        while (1) switch (_context6.prev = _context6.next) {\n          case 0:\n            if (payment === \"QuickCard\") {\n              currentDevice = backend.getCurrentDevice();\n              if (currentDevice.terminalType) payment = \"Card\";else payment = \"ManualCard\";\n            }\n            initiateNavigation(payment);\n          case 2:\n          case \"end\":\n            return _context6.stop();\n        }\n      }, _callee6);\n    }));\n    return function (_x) {\n      return _ref6.apply(this, arguments);\n    };\n  }();\n  function initiateNavigation(payment) {\n    var state = \"root.split.payment\";\n    if (payment) {\n      $state.go(state, {\n        type: payment\n      }, {\n        reload: true\n      });\n    } else {\n      $state.go(state);\n    }\n  }\n  function validateChoice(paymentType, choice, remainder, currency) {\n    try {\n      return paymentType.validatePaymentChoice(choice, remainder, currency);\n    } catch (err) {\n      $scope.checkTerminalModal.isVisible = true;\n      return false;\n    }\n  }\n  function loadConfig() {\n    $scope.options = posConfig.getOptions();\n    $scope.loyalty = posConfig.getLoyaltyConfiguration();\n    var paymentTypes = posConfig.getPaymentTypeConfigs();\n    $scope.quickCashAvailable = !!paymentTypes.find(function (o) {\n      return o.type === \"Cash\";\n    });\n    $scope.quickCardAvailable = !!paymentTypes.find(function (o) {\n      return o.type === \"ManualCard\";\n    });\n  }\n  $scope.verifoneVoiceModal = {\n    title: \"verifone/voice/title\",\n    description: \"verifone/voice/description\",\n    descriptionPlaceholderValues: {},\n    isVisible: false,\n    hasTextInput: true,\n    allowedCharacters: \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\",\n    inputMin: 1,\n    inputMax: 9,\n    buttons: [{\n      label: \"verifone/accept\",\n      type: \"success\",\n      isDefault: true,\n      closes: true,\n      validateText: true,\n      action: function action(text) {\n        eventBus.notify(eventBus.events.payment.verifone.voiceReferralApprovalResponse, text);\n        keypadManager.registerInput($scope.activeElement, $scope.activeOnEnter);\n      }\n    }, {\n      label: \"verifone/reject\",\n      type: \"danger\",\n      isDefault: false,\n      closes: true,\n      validateText: false,\n      action: function action() {\n        eventBus.notify(eventBus.events.payment.verifone.voiceReferralApprovalResponse, null);\n        keypadManager.registerInput($scope.activeElement, $scope.activeOnEnter);\n      }\n    }]\n  };\n  $scope.verifoneSignatureModal = {\n    title: \"verifone/signature/title\",\n    description: \"verifone/signature/description\",\n    descriptionPlaceholderValues: {},\n    isVisible: false,\n    hasTextInput: false,\n    // If active connector is verifone only then show re-print button\n    buttons: localStorage.getItem(\"selectedTerminalType\") == 6 ? [{\n      label: \"verifone/accept\",\n      type: \"success\",\n      isDefault: true,\n      closes: true,\n      validateText: false,\n      action: function action() {\n        eventBus.notify(eventBus.events.payment.verifone.signatureApprovalResponse, true);\n      }\n    }, {\n      label: \"verifone/reject\",\n      type: \"danger\",\n      isDefault: false,\n      closes: true,\n      validateText: false,\n      action: function action() {\n        eventBus.notify(eventBus.events.payment.verifone.signatureApprovalResponse, false);\n      }\n    }, {\n      label: \"button/note copy\",\n      type: \"success\",\n      isDefault: false,\n      closes: false,\n      validateText: false,\n      action: function action() {\n        eventBus.notify(eventBus.events.payment.verifone.signatureApprovalResponse, null);\n      }\n    }] : [{\n      label: \"verifone/accept\",\n      type: \"success\",\n      isDefault: true,\n      closes: true,\n      validateText: false,\n      action: function action() {\n        eventBus.notify(eventBus.events.payment.verifone.signatureApprovalResponse, true);\n      }\n    }, {\n      label: \"verifone/reject\",\n      type: \"danger\",\n      isDefault: false,\n      closes: true,\n      validateText: false,\n      action: function action() {\n        eventBus.notify(eventBus.events.payment.verifone.signatureApprovalResponse, false);\n      }\n    }]\n  };\n  $scope.containsDownPayment = function () {\n    return !!$scope.itemLine.find(function (x) {\n      return x.templateType === \"downPayment\";\n    });\n  };\n  function verifoneVoiceApproval(ev, args) {\n    $scope.verifoneVoiceModal.descriptionPlaceholderValues = args;\n    $scope.verifoneVoiceModal.isVisible = true;\n    $scope.activeElement = keypadManager.getRegisteredInput();\n    $scope.activeOnEnter = keypadManager.getRegisteredOnEnter();\n  }\n  function verifoneSignatureApproval() {\n    $scope.verifoneSignatureModal.isVisible = true;\n  }\n  eventBus.subscribe(eventBus.events.pos.newConfig, $scope, loadConfig);\n  eventBus.subscribe(eventBus.events.payment.verifone.voiceReferralApproval, $scope, verifoneVoiceApproval);\n  eventBus.subscribe(eventBus.events.payment.verifone.signatureApproval, $scope, verifoneSignatureApproval);\n  function setGiftAidDetailsData() {\n    $scope.giftAidDetailsModal.details = {\n      title: receipt.getTransactionGiftAidTitle(),\n      firstName: receipt.getTransactionGiftAidFirstName(),\n      lastName: receipt.getTransactionGiftAidLastName(),\n      houseNumber: receipt.getTransactionGiftAidHouseNumber(),\n      postalCode: receipt.getTransactionGiftAidPostalCode()\n    };\n  }\n  $scope.giftAidModal = {\n    title: \"giftaid/headertext\",\n    isVisible: false,\n    hasTextInput: false,\n    buttons: [{\n      label: \"label/yes\",\n      type: \"success\",\n      isDefault: true,\n      closes: true,\n      validateText: false,\n      action: function () {\n        var _action = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee7() {\n          return _regeneratorRuntime().wrap(function _callee7$(_context7) {\n            while (1) switch (_context7.prev = _context7.next) {\n              case 0:\n                setGiftAidDetailsData();\n                $scope.giftAidDetailsModal.isVisible = true;\n                $scope.activeElement = keypadManager.getRegisteredInput();\n                $scope.activeOnEnter = keypadManager.getRegisteredOnEnter();\n              case 4:\n              case \"end\":\n                return _context7.stop();\n            }\n          }, _callee7);\n        }));\n        function action() {\n          return _action.apply(this, arguments);\n        }\n        return action;\n      }()\n    }, {\n      label: \"label/no\",\n      type: \"danger\",\n      isDefault: false,\n      closes: true,\n      validateText: false,\n      action: function action() {\n        receipt.removeTransactionGiftAidProperties();\n        receipt.setGiftAidable(false);\n        handleStateParam();\n      }\n    }]\n  };\n  $scope.checkTerminalModal = {\n    title: \"error/card/fault-state-header\",\n    description: \"error/card/fault-state\",\n    descriptionPlaceholderValues: {},\n    isVisible: false,\n    hasTextInput: false,\n    buttons: [{\n      label: \"button/ok\",\n      type: \"success\",\n      isDefault: true,\n      closes: true,\n      action: function action() {}\n    }]\n  };\n  $scope.giftAidDetailsModal = {\n    headertext: \"giftaid/details/headertext\",\n    title: \"giftaid/details/title\",\n    firstname: \"giftaid/details/firstname\",\n    lastname: \"giftaid/details/lastname\",\n    housenumber: \"giftaid/details/housenumber\",\n    postalcode: \"giftaid/details/postalcode\",\n    isVisible: false,\n    hasTextInput: false,\n    buttons: [{\n      save: true,\n      label: \"button/ok\",\n      type: \"success\",\n      isDefault: false,\n      closes: true,\n      action: function action(details) {\n        receipt.setGiftAidable(true);\n        receipt.setTransactionGiftAidDetails(details);\n        $scope.awaitingResponse = false;\n        handleStateParam();\n        keypadManager.registerInput($scope.activeElement, $scope.activeOnEnter);\n      }\n    }, {\n      save: false,\n      label: \"giftaid/button/cancel\",\n      type: \"danger\",\n      isDefault: true,\n      closes: true,\n      action: function action() {\n        receipt.removeTransactionGiftAidProperties();\n        receipt.setGiftAidable(false);\n        $scope.awaitingResponse = false;\n        handleStateParam();\n        keypadManager.registerInput($scope.activeElement, $scope.activeOnEnter);\n      }\n    }]\n  };\n  $scope.finishSaleModal = {\n    description: \"finishsale/description\"\n  };\n});\n","\"use strict\";\n\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _regeneratorRuntime() { \"use strict\"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return r; }; var t, r = {}, e = Object.prototype, n = e.hasOwnProperty, o = \"function\" == typeof Symbol ? Symbol : {}, i = o.iterator || \"@@iterator\", a = o.asyncIterator || \"@@asyncIterator\", u = o.toStringTag || \"@@toStringTag\"; function c(t, r, e, n) { return Object.defineProperty(t, r, { value: e, enumerable: !n, configurable: !n, writable: !n }); } try { c({}, \"\"); } catch (t) { c = function c(t, r, e) { return t[r] = e; }; } function h(r, e, n, o) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype); return c(a, \"_invoke\", function (r, e, n) { var o = 1; return function (i, a) { if (3 === o) throw Error(\"Generator is already running\"); if (4 === o) { if (\"throw\" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var u = n.delegate; if (u) { var c = d(u, n); if (c) { if (c === f) continue; return c; } } if (\"next\" === n.method) n.sent = n._sent = n.arg;else if (\"throw\" === n.method) { if (1 === o) throw o = 4, n.arg; n.dispatchException(n.arg); } else \"return\" === n.method && n.abrupt(\"return\", n.arg); o = 3; var h = s(r, e, n); if (\"normal\" === h.type) { if (o = n.done ? 4 : 2, h.arg === f) continue; return { value: h.arg, done: n.done }; } \"throw\" === h.type && (o = 4, n.method = \"throw\", n.arg = h.arg); } }; }(r, n, new Context(o || [])), !0), a; } function s(t, r, e) { try { return { type: \"normal\", arg: t.call(r, e) }; } catch (t) { return { type: \"throw\", arg: t }; } } r.wrap = h; var f = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var l = {}; c(l, i, function () { return this; }); var p = Object.getPrototypeOf, y = p && p(p(x([]))); y && y !== e && n.call(y, i) && (l = y); var v = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(l); function g(t) { [\"next\", \"throw\", \"return\"].forEach(function (r) { c(t, r, function (t) { return this._invoke(r, t); }); }); } function AsyncIterator(t, r) { function e(o, i, a, u) { var c = s(t[o], t, i); if (\"throw\" !== c.type) { var h = c.arg, f = h.value; return f && \"object\" == _typeof(f) && n.call(f, \"__await\") ? r.resolve(f.__await).then(function (t) { e(\"next\", t, a, u); }, function (t) { e(\"throw\", t, a, u); }) : r.resolve(f).then(function (t) { h.value = t, a(h); }, function (t) { return e(\"throw\", t, a, u); }); } u(c.arg); } var o; c(this, \"_invoke\", function (t, n) { function i() { return new r(function (r, o) { e(t, n, r, o); }); } return o = o ? o.then(i, i) : i(); }, !0); } function d(r, e) { var n = e.method, o = r.i[n]; if (o === t) return e.delegate = null, \"throw\" === n && r.i[\"return\"] && (e.method = \"return\", e.arg = t, d(r, e), \"throw\" === e.method) || \"return\" !== n && (e.method = \"throw\", e.arg = new TypeError(\"The iterator does not provide a '\" + n + \"' method\")), f; var i = s(o, r.i, e.arg); if (\"throw\" === i.type) return e.method = \"throw\", e.arg = i.arg, e.delegate = null, f; var a = i.arg; return a ? a.done ? (e[r.r] = a.value, e.next = r.n, \"return\" !== e.method && (e.method = \"next\", e.arg = t), e.delegate = null, f) : a : (e.method = \"throw\", e.arg = new TypeError(\"iterator result is not an object\"), e.delegate = null, f); } function w(t) { this.tryEntries.push(t); } function m(r) { var e = r[4] || {}; e.type = \"normal\", e.arg = t, r[4] = e; } function Context(t) { this.tryEntries = [[-1]], t.forEach(w, this), this.reset(!0); } function x(r) { if (null != r) { var e = r[i]; if (e) return e.call(r); if (\"function\" == typeof r.next) return r; if (!isNaN(r.length)) { var o = -1, a = function e() { for (; ++o < r.length;) if (n.call(r, o)) return e.value = r[o], e.done = !1, e; return e.value = t, e.done = !0, e; }; return a.next = a; } } throw new TypeError(_typeof(r) + \" is not iterable\"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, c(v, \"constructor\", GeneratorFunctionPrototype), c(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction), GeneratorFunction.displayName = c(GeneratorFunctionPrototype, u, \"GeneratorFunction\"), r.isGeneratorFunction = function (t) { var r = \"function\" == typeof t && t.constructor; return !!r && (r === GeneratorFunction || \"GeneratorFunction\" === (r.displayName || r.name)); }, r.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, c(t, u, \"GeneratorFunction\")), t.prototype = Object.create(v), t; }, r.awrap = function (t) { return { __await: t }; }, g(AsyncIterator.prototype), c(AsyncIterator.prototype, a, function () { return this; }), r.AsyncIterator = AsyncIterator, r.async = function (t, e, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(h(t, e, n, o), i); return r.isGeneratorFunction(e) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, g(v), c(v, u, \"Generator\"), c(v, i, function () { return this; }), c(v, \"toString\", function () { return \"[object Generator]\"; }), r.keys = function (t) { var r = Object(t), e = []; for (var n in r) e.unshift(n); return function t() { for (; e.length;) if ((n = e.pop()) in r) return t.value = n, t.done = !1, t; return t.done = !0, t; }; }, r.values = x, Context.prototype = { constructor: Context, reset: function reset(r) { if (this.prev = this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = \"next\", this.arg = t, this.tryEntries.forEach(m), !r) for (var e in this) \"t\" === e.charAt(0) && n.call(this, e) && !isNaN(+e.slice(1)) && (this[e] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0][4]; if (\"throw\" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(r) { if (this.done) throw r; var e = this; function n(t) { a.type = \"throw\", a.arg = r, e.next = t; } for (var o = e.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i[4], u = this.prev, c = i[1], h = i[2]; if (-1 === i[0]) return n(\"end\"), !1; if (!c && !h) throw Error(\"try statement without catch or finally\"); if (null != i[0] && i[0] <= u) { if (u < c) return this.method = \"next\", this.arg = t, n(c), !0; if (u < h) return n(h), !1; } } }, abrupt: function abrupt(t, r) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var n = this.tryEntries[e]; if (n[0] > -1 && n[0] <= this.prev && this.prev < n[2]) { var o = n; break; } } o && (\"break\" === t || \"continue\" === t) && o[0] <= r && r <= o[2] && (o = null); var i = o ? o[4] : {}; return i.type = t, i.arg = r, o ? (this.method = \"next\", this.next = o[2], f) : this.complete(i); }, complete: function complete(t, r) { if (\"throw\" === t.type) throw t.arg; return \"break\" === t.type || \"continue\" === t.type ? this.next = t.arg : \"return\" === t.type ? (this.rval = this.arg = t.arg, this.method = \"return\", this.next = \"end\") : \"normal\" === t.type && r && (this.next = r), f; }, finish: function finish(t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[2] === t) return this.complete(e[4], e[3]), m(e), f; } }, \"catch\": function _catch(t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[0] === t) { var n = e[4]; if (\"throw\" === n.type) { var o = n.arg; m(e); } return o; } } throw Error(\"illegal catch attempt\"); }, delegateYield: function delegateYield(r, e, n) { return this.delegate = { i: x(r), r: e, n: n }, \"next\" === this.method && (this.arg = t), f; } }, r; }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"next\", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"throw\", n); } _next(void 0); }); }; }\npos.factory(\"paymentService\", function (receipt, sales, posConfig, uuid, $q, $rootScope, backend, defaultPaymentType, defaultVoucherPaymentType, defaultCardPaymentType, receiptCompleterPaymentType, accountPaymentType, mobilePayPaymentType, coreLoyaltyService, $log, downPaymentPaymentType, voucherService) {\n  var receiptService = receipt;\n  var salesService = sales;\n  var service = {\n    paymentLines: receipt.getReceipt().payments\n  };\n  var strategies = {\n    \"default\": {\n      makePayment: defaultPaymentType.makePayment,\n      responseSteps: [{\n        success: defaultPaymentType.addPaymentToReceipt\n      }, {\n        success: defaultPaymentType.isPaymentEnough\n      }, {\n        success: defaultPaymentType.doRounding\n      }, {\n        success: defaultPaymentType.doChange\n      }, {\n        success: defaultPaymentType.finishReceipt\n      }]\n    },\n    loyalty: {\n      makePayment: defaultPaymentType.makePayment,\n      validateAmount: coreLoyaltyService.validatePaymentAmount,\n      responseSteps: [{\n        success: defaultPaymentType.addPaymentToReceipt\n      }, {\n        success: defaultPaymentType.isPaymentEnough\n      }, {\n        success: defaultPaymentType.doRounding\n      }, {\n        success: defaultPaymentType.doChange\n      }, {\n        success: defaultPaymentType.finishReceipt\n      }]\n    },\n    accountPayment: {\n      makePayment: accountPaymentType.makePayment,\n      validatePaymentChoice: accountPaymentType.validatePaymentChoice,\n      responseSteps: [{\n        success: defaultPaymentType.addPaymentToReceipt\n      }, {\n        success: defaultPaymentType.isPaymentEnough\n      }, {\n        success: defaultPaymentType.doRounding\n      }, {\n        success: defaultPaymentType.finishReceipt\n      }, {\n        success: accountPaymentType.clearCustomer\n      }]\n    },\n    defaultDiffCorrection: {\n      makePayment: defaultPaymentType.makePayment,\n      responseSteps: [{\n        success: defaultPaymentType.addPaymentToReceipt\n      }, {\n        success: defaultPaymentType.isPaymentEnough\n      }]\n    },\n    defaultVoucher: {\n      makePayment: defaultVoucherPaymentType.makePayment,\n      validatePaymentChoice: defaultVoucherPaymentType.validatePaymentChoice,\n      // the same as default, just without automatic change\n      responseSteps: [{\n        success: defaultPaymentType.addPaymentToReceipt\n      }, {\n        success: defaultVoucherPaymentType.isPaymentEnough\n      }, {\n        success: defaultPaymentType.doRounding\n      }, {\n        success: defaultPaymentType.finishReceipt\n      }]\n    },\n    defaultDownPayment: {\n      makePayment: downPaymentPaymentType.makePayment,\n      responseSteps: [{\n        success: defaultPaymentType.addPaymentToReceipt\n      }, {\n        success: downPaymentPaymentType.paymentCustomerAccount\n      }, {\n        success: downPaymentPaymentType.finishReceipt\n      }]\n    },\n    defaultCard: {\n      validateAmount: defaultCardPaymentType.validateAmount,\n      validatePaymentChoice: defaultCardPaymentType.validatePaymentChoice,\n      makePayment: defaultPaymentType.makePayment,\n      responseSteps: [{\n        success: defaultPaymentType.addPaymentToReceipt\n      }, {\n        success: defaultCardPaymentType.handleCardPayment\n      }, {\n        success: defaultPaymentType.isPaymentEnough,\n        error: defaultCardPaymentType.cardPaymentRejected\n      }, {\n        success: defaultPaymentType.doChange\n      }, {\n        success: defaultPaymentType.finishReceipt\n      }]\n    },\n    foreignVoucher: {\n      makePayment: defaultPaymentType.makePayment,\n      responseSteps: [{\n        success: defaultPaymentType.addPaymentToReceipt\n      }, {\n        success: defaultVoucherPaymentType.isPaymentEnough\n      }, {\n        success: defaultPaymentType.doRounding\n      }, {\n        success: defaultPaymentType.finishReceipt\n      }]\n    },\n    mobilePay: {\n      makePayment: mobilePayPaymentType.makePayment,\n      responseSteps: [{\n        success: defaultPaymentType.addPaymentToReceipt\n      }, {\n        success: mobilePayPaymentType.handlePayment\n      }, {\n        success: defaultPaymentType.isPaymentEnough\n      }, {\n        success: mobilePayPaymentType.capturePayment\n      }, {\n        success: defaultPaymentType.doChange\n      }, {\n        success: defaultPaymentType.finishReceipt\n      }]\n    },\n    receiptCompleter: {\n      makePayment: receiptCompleterPaymentType.makePayment,\n      responseSteps: [{\n        success: defaultPaymentType.isPaymentEnough\n      }, {\n        success: defaultPaymentType.finishReceipt\n      }]\n    }\n  };\n  var isPaymentProcessing = false;\n  function getPaymentAmountSuggestion(suggestionName) {\n    function remainder(currency) {\n      currency = currency || posConfig.getLocalCurrency();\n      var remainingAmount = receiptService.getTotal().minus(receiptService.getPaymentsTotal()).abs();\n      return service.convertToCurrency(currency, remainingAmount);\n    }\n    function remainderRounded(currency) {\n      currency = currency || posConfig.getLocalCurrency();\n      var remainingAmount = remainder(currency);\n      return salesService.round(remainingAmount, currency, false);\n    }\n    switch (suggestionName) {\n      case \"rounded\":\n        return remainderRounded;\n      default:\n        return remainder;\n    }\n  }\n  service.getIsPaymentProcessing = function () {\n    return isPaymentProcessing;\n  };\n  service.setIsPaymentProcessing = function (isProcessing) {\n    isPaymentProcessing = isProcessing;\n  };\n  service.convertToCurrency = function (currency, amount) {\n    return amount.div(new Decimal(currency.exchangeRate).div(100));\n  };\n  service.getPaymentStrategies = function () {\n    return strategies;\n  };\n  service.setPaymentStrategy = function (name, strategy) {\n    strategies[name] = strategy;\n  };\n\n  // Check if currentPaymentTypes contains one of the elems in blockNavigationPaymentTypes\n  service.isNavigationBlocked = function (currentPaymentTypes) {\n    return isPaymentTypeBlocking(currentPaymentTypes, posConfig.getBlockNavigationPaymentTypes());\n  };\n  service.isCancellationBlocked = function (currentPaymentTypes) {\n    return isPaymentTypeBlocking(currentPaymentTypes, posConfig.getBlockCancellationPaymentTypes());\n  };\n  function isPaymentTypeBlocking(currentPaymentTypes, blockedPaymentTypes) {\n    if (!currentPaymentTypes) return false;\n    $log.debug(blockedPaymentTypes);\n    for (var j = 0; j < currentPaymentTypes.length; j++) {\n      for (var i = 0; i < blockedPaymentTypes.length; i++) {\n        if (currentPaymentTypes[j].paymentType === blockedPaymentTypes[i] && currentPaymentTypes[j].completed) return true;\n      }\n    }\n    return false;\n  }\n  service.getPaymentType = function (typeName) {\n    var paymentTypes = this.getPaymentTypes();\n    for (var i = 0; i < paymentTypes.length; i++) {\n      if (paymentTypes[i].type === typeName) return paymentTypes[i];\n    }\n  };\n  service.getPaymentTypes = function () {\n    var paymentTypes = posConfig.getPaymentTypeConfigs();\n    angular.forEach(paymentTypes, function (paymentType) {\n      if (!paymentType.amountSuggestion || typeof paymentType.amountSuggestion === \"string\") {\n        paymentType.amountSuggestion = getPaymentAmountSuggestion(paymentType.amountSuggestion);\n      }\n      paymentType.makePayment = service.resolvePaymentStrategy(paymentType.paymentStrategy, paymentType.type);\n      var strategy = strategies[paymentType.paymentStrategy];\n      paymentType.validatePaymentChoice = strategy && strategy.validatePaymentChoice ? strategy.validatePaymentChoice : function () {\n        return true;\n      };\n      paymentType.validateAmount = strategy && strategy.validateAmount ? strategy.validateAmount : function () {\n        return $q.resolve();\n      };\n    });\n    return paymentTypes;\n  };\n  service.getPaymentCorrection = function (type) {\n    return service.resolvePaymentStrategy(\"defaultDiffCorrection\", type);\n  };\n  service.resolvePaymentStrategy = function resolvePaymentStrategy(strategy, paymentType) {\n    return function (amount, currencyName, contextInfo) {\n      var paymentPlaceholder = {\n        paymentType: \"Placeholder\",\n        displayType: paymentType,\n        amount: new Decimal(amount),\n        rounding: new Decimal(0),\n        uuid: uuid()\n      };\n      // before the request starts we add a placeholder which is a blurred box that represents the request is started\n      service.paymentLines.push(paymentPlaceholder);\n      var paymentStrategy = strategies[strategy] || strategies[\"default\"]; // find the specified strategy or use the default if none exists with the given name\n      $log.debug(\"paymentStrategy\");\n      $log.debug(strategy);\n      // start the payment\n      var promise = paymentStrategy.makePayment(paymentType, amount, currencyName, contextInfo);\n      // first step is always to remove the placeholder\n      promise = promise.then(removePlaceholder(paymentPlaceholder.uuid, true), removePlaceholder(paymentPlaceholder.uuid, false));\n      // add the chain steps for this strategy, each step has the option to define a success handler, error handler, or both.\n      for (var i = 0; i < paymentStrategy.responseSteps.length; i++) {\n        var step = paymentStrategy.responseSteps[i];\n        promise = promise.then(step.success, step.error);\n      }\n      return promise;\n    };\n  };\n  function removePlaceholder(uuid, isSuccess) {\n    var deferred = $q.defer();\n    var resolve = isSuccess ? deferred.resolve : deferred.reject;\n    function promiseCallback(response) {\n      receipt.removePayment(uuid);\n      // we also wrap the response in the \"state\" object, where additional state through the chain can be attached\n      // unless the input is a string - then it's probably some error code and we just pass that through\n      var newResponse = typeof response === \"string\" ? response : {\n        response: response\n      };\n      resolve(newResponse);\n      return deferred.promise;\n    }\n    return promiseCallback;\n  }\n  service.retryPayment = function (payment, type) {\n    var fakeResponse = {\n      config: {\n        device: backend.getDeviceByIndex(backend.defaultDevice)\n      },\n      data: {\n        d: payment\n      }\n    };\n    payment.retry = true;\n    var paymentType = service.getPaymentType(type);\n    var paymentStrategy = strategies[paymentType.paymentStrategy];\n    // it is currently _VERY_ specific to the card strategies that we need to start at step 1 (zero based)\n    // we need to figure out a way to pin point a resume point for card-like types.\n    var promise = paymentStrategy.responseSteps[1].success({\n      response: fakeResponse\n    });\n    for (var i = 2; i < paymentStrategy.responseSteps.length; i++) {\n      var step = paymentStrategy.responseSteps[i];\n      promise = promise.then(step.success, step.error);\n    }\n    return promise;\n  };\n  service.recoverCardPayment = function (payment) {\n    $log.debug(\"RECOVER CARD PAYMENT\");\n    var paymentType = service.getPaymentType(\"Card\");\n    var paymentStrategy = strategies[paymentType.paymentStrategy];\n    // it is currently _VERY_ specific to the card strategies that we need to start at step 1 (zero based)\n    // we need to figure out a way to pin point a resume point for card-like types.\n    $log.debug(\"payment status \" + payment.data.d.displayText);\n    var promise;\n    if (payment.data.d.displayText === \"SUCCESS\") {\n      promise = paymentStrategy.responseSteps[2].success({\n        response: payment\n      });\n      $log.debug(\"payment success\");\n    } else {\n      promise = paymentStrategy.responseSteps[2].error(payment);\n      $log.debug(\"payment error\");\n    }\n    for (var i = 3; i < paymentStrategy.responseSteps.length; i++) {\n      var step = paymentStrategy.responseSteps[i];\n      promise = promise.then(step.success, step.error);\n    }\n    return promise;\n  };\n  $rootScope.$on(\"payment:remove\", /*#__PURE__*/function () {\n    var _ref = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee(event, payment) {\n      return _regeneratorRuntime().wrap(function _callee$(_context) {\n        while (1) switch (_context.prev = _context.next) {\n          case 0:\n            _context.next = 2;\n            return voucherService.cancelVoucherPayment(payment);\n          case 2:\n            receipt.removePayment(payment.uuid);\n          case 3:\n          case \"end\":\n            return _context.stop();\n        }\n      }, _callee);\n    }));\n    return function (_x, _x2) {\n      return _ref.apply(this, arguments);\n    };\n  }());\n  return service;\n});\n","\"use strict\";\n\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _regeneratorRuntime() { \"use strict\"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return r; }; var t, r = {}, e = Object.prototype, n = e.hasOwnProperty, o = \"function\" == typeof Symbol ? Symbol : {}, i = o.iterator || \"@@iterator\", a = o.asyncIterator || \"@@asyncIterator\", u = o.toStringTag || \"@@toStringTag\"; function c(t, r, e, n) { return Object.defineProperty(t, r, { value: e, enumerable: !n, configurable: !n, writable: !n }); } try { c({}, \"\"); } catch (t) { c = function c(t, r, e) { return t[r] = e; }; } function h(r, e, n, o) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype); return c(a, \"_invoke\", function (r, e, n) { var o = 1; return function (i, a) { if (3 === o) throw Error(\"Generator is already running\"); if (4 === o) { if (\"throw\" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var u = n.delegate; if (u) { var c = d(u, n); if (c) { if (c === f) continue; return c; } } if (\"next\" === n.method) n.sent = n._sent = n.arg;else if (\"throw\" === n.method) { if (1 === o) throw o = 4, n.arg; n.dispatchException(n.arg); } else \"return\" === n.method && n.abrupt(\"return\", n.arg); o = 3; var h = s(r, e, n); if (\"normal\" === h.type) { if (o = n.done ? 4 : 2, h.arg === f) continue; return { value: h.arg, done: n.done }; } \"throw\" === h.type && (o = 4, n.method = \"throw\", n.arg = h.arg); } }; }(r, n, new Context(o || [])), !0), a; } function s(t, r, e) { try { return { type: \"normal\", arg: t.call(r, e) }; } catch (t) { return { type: \"throw\", arg: t }; } } r.wrap = h; var f = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var l = {}; c(l, i, function () { return this; }); var p = Object.getPrototypeOf, y = p && p(p(x([]))); y && y !== e && n.call(y, i) && (l = y); var v = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(l); function g(t) { [\"next\", \"throw\", \"return\"].forEach(function (r) { c(t, r, function (t) { return this._invoke(r, t); }); }); } function AsyncIterator(t, r) { function e(o, i, a, u) { var c = s(t[o], t, i); if (\"throw\" !== c.type) { var h = c.arg, f = h.value; return f && \"object\" == _typeof(f) && n.call(f, \"__await\") ? r.resolve(f.__await).then(function (t) { e(\"next\", t, a, u); }, function (t) { e(\"throw\", t, a, u); }) : r.resolve(f).then(function (t) { h.value = t, a(h); }, function (t) { return e(\"throw\", t, a, u); }); } u(c.arg); } var o; c(this, \"_invoke\", function (t, n) { function i() { return new r(function (r, o) { e(t, n, r, o); }); } return o = o ? o.then(i, i) : i(); }, !0); } function d(r, e) { var n = e.method, o = r.i[n]; if (o === t) return e.delegate = null, \"throw\" === n && r.i[\"return\"] && (e.method = \"return\", e.arg = t, d(r, e), \"throw\" === e.method) || \"return\" !== n && (e.method = \"throw\", e.arg = new TypeError(\"The iterator does not provide a '\" + n + \"' method\")), f; var i = s(o, r.i, e.arg); if (\"throw\" === i.type) return e.method = \"throw\", e.arg = i.arg, e.delegate = null, f; var a = i.arg; return a ? a.done ? (e[r.r] = a.value, e.next = r.n, \"return\" !== e.method && (e.method = \"next\", e.arg = t), e.delegate = null, f) : a : (e.method = \"throw\", e.arg = new TypeError(\"iterator result is not an object\"), e.delegate = null, f); } function w(t) { this.tryEntries.push(t); } function m(r) { var e = r[4] || {}; e.type = \"normal\", e.arg = t, r[4] = e; } function Context(t) { this.tryEntries = [[-1]], t.forEach(w, this), this.reset(!0); } function x(r) { if (null != r) { var e = r[i]; if (e) return e.call(r); if (\"function\" == typeof r.next) return r; if (!isNaN(r.length)) { var o = -1, a = function e() { for (; ++o < r.length;) if (n.call(r, o)) return e.value = r[o], e.done = !1, e; return e.value = t, e.done = !0, e; }; return a.next = a; } } throw new TypeError(_typeof(r) + \" is not iterable\"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, c(v, \"constructor\", GeneratorFunctionPrototype), c(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction), GeneratorFunction.displayName = c(GeneratorFunctionPrototype, u, \"GeneratorFunction\"), r.isGeneratorFunction = function (t) { var r = \"function\" == typeof t && t.constructor; return !!r && (r === GeneratorFunction || \"GeneratorFunction\" === (r.displayName || r.name)); }, r.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, c(t, u, \"GeneratorFunction\")), t.prototype = Object.create(v), t; }, r.awrap = function (t) { return { __await: t }; }, g(AsyncIterator.prototype), c(AsyncIterator.prototype, a, function () { return this; }), r.AsyncIterator = AsyncIterator, r.async = function (t, e, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(h(t, e, n, o), i); return r.isGeneratorFunction(e) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, g(v), c(v, u, \"Generator\"), c(v, i, function () { return this; }), c(v, \"toString\", function () { return \"[object Generator]\"; }), r.keys = function (t) { var r = Object(t), e = []; for (var n in r) e.unshift(n); return function t() { for (; e.length;) if ((n = e.pop()) in r) return t.value = n, t.done = !1, t; return t.done = !0, t; }; }, r.values = x, Context.prototype = { constructor: Context, reset: function reset(r) { if (this.prev = this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = \"next\", this.arg = t, this.tryEntries.forEach(m), !r) for (var e in this) \"t\" === e.charAt(0) && n.call(this, e) && !isNaN(+e.slice(1)) && (this[e] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0][4]; if (\"throw\" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(r) { if (this.done) throw r; var e = this; function n(t) { a.type = \"throw\", a.arg = r, e.next = t; } for (var o = e.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i[4], u = this.prev, c = i[1], h = i[2]; if (-1 === i[0]) return n(\"end\"), !1; if (!c && !h) throw Error(\"try statement without catch or finally\"); if (null != i[0] && i[0] <= u) { if (u < c) return this.method = \"next\", this.arg = t, n(c), !0; if (u < h) return n(h), !1; } } }, abrupt: function abrupt(t, r) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var n = this.tryEntries[e]; if (n[0] > -1 && n[0] <= this.prev && this.prev < n[2]) { var o = n; break; } } o && (\"break\" === t || \"continue\" === t) && o[0] <= r && r <= o[2] && (o = null); var i = o ? o[4] : {}; return i.type = t, i.arg = r, o ? (this.method = \"next\", this.next = o[2], f) : this.complete(i); }, complete: function complete(t, r) { if (\"throw\" === t.type) throw t.arg; return \"break\" === t.type || \"continue\" === t.type ? this.next = t.arg : \"return\" === t.type ? (this.rval = this.arg = t.arg, this.method = \"return\", this.next = \"end\") : \"normal\" === t.type && r && (this.next = r), f; }, finish: function finish(t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[2] === t) return this.complete(e[4], e[3]), m(e), f; } }, \"catch\": function _catch(t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[0] === t) { var n = e[4]; if (\"throw\" === n.type) { var o = n.arg; m(e); } return o; } } throw Error(\"illegal catch attempt\"); }, delegateYield: function delegateYield(r, e, n) { return this.delegate = { i: x(r), r: e, n: n }, \"next\" === this.method && (this.arg = t), f; } }, r; }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"next\", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"throw\", n); } _next(void 0); }); }; }\npos.controller(\"PaymentFinishedCtrl\", function ($scope, $stateParams, notification, sales, keypadManager, $translate, $rootScope, posConfig, posStorage, receipt, eventBus, findCustomerService, webOrderWidgetService, backend) {\n  \"use strict\";\n\n  var emailRegEx = /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\n  var savedReceipt = $stateParams.savedReceipt;\n  var i18nFinishedErrorText, i18nFinishedSuccessText, i18nFinishedSuccessTitle;\n  if (!savedReceipt) {\n    gotoStartScreen();\n  }\n  $scope.paymentEmail = savedReceipt.customerEmail;\n  $scope.savedItemlines = savedReceipt.items;\n  $scope.savedPayments = savedReceipt.payments;\n  $scope.isPrinting = false;\n  $scope.emailReceiptIsDefault = posConfig.getOptions().emailReceiptIsDefault;\n  $scope.apiOnline = backend.isOnline;\n  $scope.$on(\"device:offline\", function (event, device) {\n    $scope.apiOnline = false;\n  });\n  eventBus.subscribe(eventBus.events.sale.isPrinting, null, function () {\n    return setIsPrinting(true);\n  });\n  eventBus.subscribe(eventBus.events.sale.donePrinting, null, function () {\n    return setIsPrinting(false);\n  });\n  function setIsPrinting(isPrinting) {\n    $scope.isPrinting = isPrinting;\n  }\n  $scope.$on(\"$locationChangeStart\", function (evnt, next, current) {\n    //Prevent browser's back button default action.\n    evnt.preventDefault();\n  });\n  $scope.$on(\"device:retry:success\", function (event, device) {\n    $scope.apiOnline = true;\n  });\n  $scope.finishSale = function () {\n    findCustomerService.removeSelectedCustomer();\n    $rootScope.selectedItem = false;\n    gotoStartScreen();\n  };\n  $scope.printReceipt = /*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee() {\n    var canProceed;\n    return _regeneratorRuntime().wrap(function _callee$(_context) {\n      while (1) switch (_context.prev = _context.next) {\n        case 0:\n          if (!$scope.isPrinting) {\n            _context.next = 2;\n            break;\n          }\n          return _context.abrupt(\"return\");\n        case 2:\n          _context.next = 4;\n          return eventBus.notifyAsync(eventBus.events.sale.downPaymentPrint, savedReceipt);\n        case 4:\n          canProceed = _context.sent;\n          if (canProceed) {\n            sales.printReceiptCopy(savedReceipt, false);\n            $scope.finishSale();\n          }\n        case 6:\n        case \"end\":\n          return _context.stop();\n      }\n    }, _callee);\n  }));\n  $scope.emailReceipt = function () {\n    // if no email is available then popup the keypad\n    // notice the 'return' it stops the logic and gives the clerk a chance to input an email\n    if (!$scope.apiOnline) return;\n    if (!$scope.paymentEmail) return keypadManager.show();\n    $translate([\"paymentFinished/errorText\", \"paymentFinished/successText\", \"paymentFinished/successTitle\"]).then(function (translations) {\n      i18nFinishedErrorText = translations[\"paymentFinished/errorText\"];\n      i18nFinishedSuccessText = translations[\"paymentFinished/successText\"];\n      i18nFinishedSuccessTitle = translations[\"paymentFinished/successTitle\"];\n\n      // if some email exists but it's not a correct email, then we need to let them know they've messed up\n      if (emailRegEx.test($scope.paymentEmail)) {\n        savedReceipt.customerEmail = $scope.paymentEmail;\n        sales.emailReceipt($scope.paymentEmail, savedReceipt);\n        var successText = i18nFinishedSuccessText.replace(\"[EMAIL]\", $scope.paymentEmail);\n\n        // $scope.paymentEmail\n        notification.pop(\"info\", i18nFinishedSuccessTitle, successText, 10000);\n        $scope.finishSale();\n      } else {\n        notification.pop(\"warn\", i18nFinishedErrorText);\n        keypadManager.show();\n      }\n    });\n  };\n  function gotoStartScreen() {\n    eventBus.notifyAsync(eventBus.events.sale.close);\n    if (posConfig.getOptions().stayLoggedInAfterSale) {\n      receipt.prepareReceipt();\n      $scope.$state.go(\"root.split.pos\");\n    } else {\n      $scope.$state.go(\"root.login\");\n    }\n  }\n  $scope.weborderModal = webOrderWidgetService.getWeborderModal(\"dispatch\");\n  $scope.showWebOrderModal = function (receipt) {\n    if (savedReceipt) {\n      webOrderWidgetService.showWebOrderModalFromReceipt(savedReceipt);\n    }\n  };\n  $scope.showDispatchNoteButton = function (receipt) {\n    if (savedReceipt) return webOrderWidgetService.showDispatchNoteButton(savedReceipt);\n  };\n});\n","\"use strict\";\n\npos.directive(\"dddPaymentType\", function ($compile, $http, $templateCache, $timeout, backend, paymentService) {\n  var getTemplate = function getTemplate(contentType) {\n    var templateLoader,\n      baseUrl = \"views/partials/\",\n      templateMap = {\n        Card: \"payment-nonexpandable\",\n        Currency: \"payment-currency\",\n        payPlazaCard: \"payment-nonexpandable\",\n        Placeholder: \"payment-placeholder\",\n        MobilePay: \"payment-mobilepay\"\n      };\n    var templateUrl = baseUrl + (templateMap[contentType] || \"payment-expandable\"); // default to expandable\n    templateLoader = $http.get(templateUrl, {\n      cache: $templateCache\n    });\n    return templateLoader;\n  };\n  var linker = function linker(scope, element, attrs) {\n    getTemplate(scope.content.paymentType).then(function (response) {\n      element.html($compile(response.data)(scope));\n    });\n    if (scope.islast) {\n      scrollToElement(500);\n    }\n    function scrollToElement(timeoutTime) {\n      $timeout(function () {\n        if (scope.iscrollInstance) scope.iscrollInstance.scrollToElement(element[0], 0, true, true);else element[0].scrollIntoView(false);\n      }, timeoutTime);\n    }\n    var showButton = true;\n    scope.showButton = function () {\n      return showButton;\n    };\n    scope.changeButton = function () {\n      showButton = !showButton;\n    };\n    scope.getLocalAmount = function () {\n      return scope.content.amount.times(scope.content.exchangeRate).div(100).toFixed(2);\n    };\n    scope.resumeCardPayment = function () {\n      scope.$emit(\"payment:card:resume\", scope.content);\n    };\n    scope.isPaymentProcessing = function () {\n      return paymentService.getIsPaymentProcessing();\n    };\n    scope.removeline = function () {\n      scope.$emit(\"payment:remove\", scope.content);\n    };\n    scope.cancelPayPlazaTransaction = function () {\n      scope.$emit(\"payment:cancelPayPlazaTransaction\", scope.content);\n    };\n    scope.cancelIntersolvePayment = function () {\n      scope.$emit(\"payment:cancelIntersolvePayment\", scope.content);\n    };\n    scope.abortCardPayment = function () {\n      scope.content.isAborting = true;\n      scope.$emit(\"payment:card:abort\", scope.content);\n    };\n    scope.showAbortButton = function () {\n      var currentDevice = backend.getCurrentDevice();\n      return currentDevice && [1, 2, 3, 4, 8].includes(currentDevice.terminalType) && scope.content.awaitingResponse && !scope.content.isAborting;\n    };\n    scope.abortMobilePayPayment = function () {\n      scope.content.isAborting = true;\n      scope.$emit(\"payment:mobilepay:abort\", scope.content);\n    };\n    scope.resumeMobilePayPayment = function () {\n      scope.$emit(\"payment:mobilepay:resume\", scope.content);\n    };\n  };\n  return {\n    restrict: \"E\",\n    scope: {\n      content: \"=\",\n      isselected: \"=\",\n      islast: \"=\",\n      paymentscroll: \"=\"\n    },\n    link: linker\n  };\n});\n","\"use strict\";\n\npos.factory(\"payPlazaCard\", function (receipt, sales, $q, $rootScope, signalr, $injector, notification, $translate, inputValidationService, defaultPaymentType, $log) {\n  var service = {};\n  var i18nPayPlazaErrorTitle;\n  var i18nPayPlazaErrorMessage;\n  $translate([\"toast/payplaza/unexpectedTitle\", \"toast/payplaza/unexpectedMessage\"]).then(function (translations) {\n    i18nPayPlazaErrorTitle = translations[\"toast/payplaza/unexpectedTitle\"];\n    i18nPayPlazaErrorMessage = translations[\"toast/payplaza/unexpectedMessage\"];\n  });\n  signalr.posProxy.payPlazaHub.on(\"setDisplayText\", function (paymentGuid, displayText) {\n    var payment = getPayment(paymentGuid);\n    if (payment !== undefined) {\n      payment.displayText = displayText;\n    }\n  });\n  signalr.posProxy.payPlazaHub.on(\"wakeUpTerminal\", function (paymentGuid, terminalIPAddress, terminalPortNumber) {\n    // Wakes up an ordinary payment terminal. Has no effect on the BluePad.\n    try {\n      new WebSocket(\"ws://\" + terminalIPAddress + \":\" + terminalPortNumber);\n    } catch (error) {\n      // PayPlaza uses the websocket like this and ignores error, the terminal only needs a \"kick\"\n    }\n  });\n  function getPayment(uuid) {\n    // look backwards for the payment\n    var payments = receipt.getReceipt().payments;\n    for (var i = payments.length - 1; i >= 0; i--) {\n      var payment = payments[i];\n      if (payment.uuid === uuid) {\n        return payment;\n      }\n    }\n  }\n\n  /**\n   * Initialise a payment as a default payment type. The default payment type sends it's request to a Connector\n   * And expects more or less the same values back\n   * @param  {string} paymentType         The type of payment, e.g. 'Cash', 'ManualCard', etc.\n   * @param  {Decimal|number} amount      The amount passed in by the keyboard\n   * @param  {object} currency            A curreny object, usually fetch from posConfig.getCurrencySetup(name) or posConfig.getLocalCurrency()\n   * @param  {string} contextInfo         Any additional information this payment type may carry\n   * @return {promise}                    $q promise which is rejected with a status or resolved with the makePayment response\n   */\n  service.makePayment = function (paymentType, amount, currency, contextInfo) {\n    var payplazaService = $injector.get(\"payplazaService\");\n    if (!payplazaService.getEftId()) {\n      $rootScope.$emit(\"payment:payplazaEftMissing\");\n      return $q.reject(\"EFT_CONFIG_MISSING\");\n    }\n    try {\n      amount = inputValidationService.convertToDecimal(amount);\n    } catch (err) {\n      return $q.reject(err);\n    }\n    var paymentStatus = receipt.getTotal().minus(receipt.getPaymentsTotal());\n    // we require a correct format for the amount and if the receipt is a return (negative total)\n    // then we do not allow the clerk to try and pay back more than the total amount, because the sale\n    // has to sum to 0 when all is said and done\n    if (defaultPaymentType.isAmountInvalid(amount)) {\n      return $q.reject(\"INVALID_AMOUNT\");\n    }\n\n    // we allow 0 payments if there's items on the receipt (e.g. an exchanged item is a return + a sold at same price)\n    // we also allow payments without any items, if the clerk want to withdraw some money\n    // we only require that there either must a value in the payment OR items on the reciept\n    if (amount.isZero() && receipt.getReceipt().items.length === 0) {\n      return $q.reject(\"INVALID_TYPE_AMOUNT\");\n    }\n    if (receipt.getTotal().minus(receipt.getPaymentsTotal()).isNegative() && !amount.isNegative()) amount = amount.abs().neg(); // make sure that it's positive before we negate it\n\n    if (amount.abs().gt(paymentStatus.abs())) {\n      $rootScope.$emit(\"payment:payPlazaPaymentTooLarge\", amount);\n      return $q.reject(\"PAYMENT_AMOUNT_EXCEEDS_REMAINING_AMOUNT\");\n    }\n\n    // we can't send in 'Card' right now, because the ARM will mistake it for a Nets terminal.\n    // Can be changed to 'Card' when armgateway knows to check the terminal type before starting\n    // anything\n    return sales.makePayment(\"PayPlaza\", amount, currency, contextInfo).then(function (response) {\n      response.data.d.isPayPlaza = true;\n      response.data.d.paymentType = \"Card\";\n      response.data.d.completed = false;\n      response.data.d.cardNumber = 600;\n      return response;\n    });\n  };\n\n  /**\n   * A long poll request which triggers SignalR events that will do different required actions\n   * e.g. ping the EFT and update displayText\n   * @param  {object} paymentState The payment state\n   * @return {promise}             $q promise\n   */\n  service.handlePayplazaTransaction = function handlePayplazaTransaction(paymentState) {\n    $log.debug(\"payPlazaCard: in handlePayplazaTransaction\");\n    var payment = paymentState.response.data.d;\n    var receiptId = receipt.getReceipt().receiptId;\n    receipt.persist();\n    payment.awaitingResponse = true;\n    if (payment.retry) {\n      var payplazaService = $injector.get(\"payplazaService\");\n      return payplazaService.getLastReceipt().then(function (response) {\n        if (response.orderRef == receiptId && response.transactionSucceeded === \"true\") {\n          $log.debug(\"payPlazaCard: previous transaction was successful\");\n          payment.completed = true;\n          payment.awaitingResponse = false;\n          payment.displayText = \"SUCCESS\";\n          payment.cardName = response.appPreferredName;\n          payment.cardReceipt = JSON.stringify(response.formattedReceipt);\n          paymentState.payPlazaResponse = response;\n          receipt.persist();\n          payplazaService.notifyClerkIfSignatureRequired(response.data);\n          return paymentState;\n        }\n        return sendPayPlazaTransaction(paymentState);\n      }, function (errorResponse) {\n        $log.debug(errorResponse);\n      });\n    }\n    return sendPayPlazaTransaction(paymentState);\n  };\n  var sendPayPlazaTransaction = function sendPayPlazaTransaction(paymentState) {\n    $log.debug(\"payPlazaCard: in sendPayPlazaTransaction\");\n    var payment = paymentState.response.data.d;\n    var receiptId = receipt.getReceipt().receiptId;\n    payment.awaitingResponse = true;\n    var payplazaService = $injector.get(\"payplazaService\");\n    // Payplaza expects the decimals to be multiplied into the amount, hence *100\n    return payplazaService.handlePayplazaTransaction(payment.uuid, receiptId, payment.currencyName, new Decimal(payment.amount).times(100)).then(function (response) {\n      try {\n        if (response.data.result !== \"SUCCESS\") return handleError(response);\n        var payPlazaReceipt = angular.fromJson(response.data.receipt);\n        payment.completed = true;\n        payment.awaitingResponse = false;\n        payment.displayText = response.data.result; // \"SUCCESS\"\n        payment.cardName = payPlazaReceipt.printCommandMessage.appPreferredName;\n        payment.cardReceipt = JSON.stringify(response.data.formattedReceipt);\n        payplazaService.acknowledgePayment();\n        // TODO: do we need to do anything else?\n      } catch (err) {\n        notification.pop(\"warning\", \"Something unexpected happend with PayPlaza\", \"You may need to manually reprint the terminal receipt for this transaction.\");\n      }\n      receipt.persist();\n      paymentState.payPlazaResponse = response;\n      payplazaService.notifyClerkIfSignatureRequired(response.data);\n      return paymentState;\n    }, handleError);\n    function handleError(errorResponse) {\n      if (errorResponse.data) {\n        // Updating terminal message on the pos\n        if (errorResponse.data.result) {\n          payment.displayText = errorResponse.data.result;\n        }\n        // Sending the terminal receipt for the failed transaction to the ARM for printing\n        if (errorResponse.data.formattedReceipt && errorResponse.data.formattedReceipt.length > 0) {\n          payplazaService.notifyClerkIfSignatureRequired(errorResponse.data);\n          payplazaService.printPayPlazaTerminalReceipt(JSON.stringify(errorResponse.data.formattedReceipt));\n        }\n      }\n      paymentState.payPlazaResponse = errorResponse;\n      payment.awaitingResponse = false;\n      receipt.persist();\n      payplazaService.acknowledgePayment();\n      return $q.reject(paymentState);\n    }\n  };\n  service.cardPaymentRejected = function cardPaymentRejected(paymentState) {\n    // just pass the error along if it didn't originate from the payplaza calls\n    if (!paymentState.payPlazaResponse) return $q.reject(paymentState);\n    $log.debug(\"payPlazaCard: in cardPayment rejected\");\n    var rejection = paymentState.payPlazaResponse;\n    paymentState.cardRejected = true;\n    return $q.reject(paymentState);\n  };\n  return service;\n});\n","\"use strict\";\n\n/**\n * Payment left-panel connector list. When connector lock is enabled, this panel\n * shows status only — switching must be done from the header USB device menu.\n */\npos.controller(\"PayWidgetCtrl\", function ($scope, backend, ConnectorService, connectorLockService, receipt) {\n  $scope.selectedArmDevice = null;\n  $scope.isConnectorLocked = connectorLockService.isLocked();\n  function updateDisableSelection() {\n    var payments = receipt.getReceipt().payments;\n    var paymentCount = angular.isArray(payments) ? payments.length : 0;\n    // Unchanged from original: disable once a payment exists on the receipt.\n    $scope.disableSelection = paymentCount > 0;\n  }\n  updateDisableSelection();\n  $scope.$on(\"connectorLock:changed\", function () {\n    $scope.isConnectorLocked = connectorLockService.isLocked();\n  });\n  $scope.$watch(function () {\n    return backend.defaultDevice;\n  }, function (index) {\n    $scope.selectedArmDevice = index;\n  });\n  $scope.$watch(function () {\n    var payments = receipt.getReceipt().payments;\n    return angular.isArray(payments) ? payments.length : 0;\n  }, function () {\n    updateDisableSelection();\n  });\n  $scope.connectors = ConnectorService.getConnectors();\n  $scope.filterConnectors = ConnectorService.filterConnectors;\n  $scope.connectorIsSelected = function (connectorIndex, connector) {\n    var deviceIndex = connector && connector.deviceIndex != null ? connector.deviceIndex : connectorIndex;\n    if (connector && deviceIndex == $scope.selectedArmDevice) {\n      localStorage.setItem(\"selectedTerminalType\", connector.terminalType);\n    }\n    return ConnectorService.connectorIsSelected({\n      index: deviceIndex,\n      connector: connector\n    }, $scope.selectedArmDevice);\n  };\n  $scope.setDefaultArm = function (armIndex) {\n    // Locked: left panel must not switch or unlock; header device menu handles that.\n    if (connectorLockService.isLocked()) return;\n    if ($scope.disableSelection || !backend.devices[armIndex].isOnline) return;\n    backend.setDefaultDevice(armIndex);\n  };\n});\n","\"use strict\";\n\npos.factory(\"receiptCompleterPaymentType\", function ($q, backend) {\n  var service = {};\n  service.makePayment = function () {\n    return $q.resolve({\n      config: {\n        device: backend.devices[backend.defaultDevice]\n      }\n    });\n  };\n  return service;\n});\n","\"use strict\";\n\npos.controller(\"ReconcilePayCtrl\", function ($scope, cashStatements, posConfig, eventBus) {\n  \"use strict\";\n\n  $scope.asideButtonsTemplate = \"views/payment/paymentchoicebuttons\";\n  $scope.setPaymentChoice = function (choice) {\n    var newSelectedPaymentType = $scope.paymentTypes.find(function (o) {\n      return o.type == choice;\n    });\n    if (newSelectedPaymentType) {\n      $scope.selectedPaymentType = newSelectedPaymentType.id;\n      cashStatements.currentlyReconcilingPaymentType = newSelectedPaymentType;\n    }\n  };\n  function loadConfig() {\n    var extraPayments;\n    if ($scope.paymentTypes) {\n      extraPayments = $scope.paymentTypes.filter(function (x) {\n        return x.addPayment;\n      });\n    }\n    $scope.paymentTypes = posConfig.getPaymentTypeConfigs().filter(function (o) {\n      return o.shouldReconcile;\n    });\n\n    // Some payment types are not added via posConfig\n    if (extraPayments) {\n      angular.forEach(extraPayments, function (element) {\n        if (!$scope.paymentTypes.find(function (x) {\n          return x.type == element.type;\n        })) element.addPayment($scope.paymentTypes);\n      });\n    }\n    if (!$scope.selectedPaymentType) {\n      $scope.setPaymentChoice($scope.paymentTypes[0].type);\n    }\n  }\n  eventBus.subscribe(eventBus.events.pos.newConfig, $scope, loadConfig);\n  loadConfig();\n});\n","\"use strict\";\n\npos.controller(\"RightMenuPayCtrl\", function ($scope, $rootScope, toggleNavigation, posConfig, eventBus, backend, receipt, notification, $translate) {\n  \"use strict\";\n\n  var i18nExpensePaymentTypeNotAllowedBody = \"\",\n    i18nExpensePaymentTypeNotAllowedTitle = \"\";\n  $translate([\"toast/expense-payment-not-allowed-title\", \"toast/expense-payment-not-allowed-body\"]).then(function (translations) {\n    i18nExpensePaymentTypeNotAllowedTitle = translations[\"toast/expense-payment-not-allowed-title\"];\n    i18nExpensePaymentTypeNotAllowedBody = translations[\"toast/expense-payment-not-allowed-body\"];\n  });\n  $scope.asideButtonsTemplate = \"views/payment/paymentchoicebuttons\";\n  loadConfig();\n  $scope.setPaymentChoice = function (choice, currency, navigationElement) {\n    navigationElement = navigationElement || false;\n    if (receipt.getReceipt().transactionType == \"Expense\" && choice !== \"Cash\") {\n      notification.pop(\"warning\", i18nExpensePaymentTypeNotAllowedTitle, i18nExpensePaymentTypeNotAllowedBody);\n      return;\n    }\n    if (choice !== \"Currency\" || currency) {\n      if (navigationElement) {\n        toggleNavigation.close(navigationElement, true);\n      }\n      if (typeof amountSuggestion === \"function\") amountSuggestion = amountSuggestion();\n      return $rootScope.$broadcast(\"paymentChoice\", choice, currency);\n    }\n    $scope.currency = !$scope.currency;\n  };\n  function loadConfig() {\n    var extraPayments;\n    if ($scope.paymentTypes) {\n      extraPayments = $scope.paymentTypes.filter(function (x) {\n        return x.addPayment;\n      });\n    }\n    $scope.paymentTypes = posConfig.getPaymentTypeConfigs();\n\n    // Remove card as a paymenttype if no terminal is configured on the Connector\n    var currentDevice = backend.getCurrentDevice();\n    if (!currentDevice.terminalType) {\n      var idx = $scope.paymentTypes.findIndex(function (o) {\n        return o.type == \"Card\";\n      });\n      if (idx > -1) {\n        $scope.paymentTypes.splice(idx, 1);\n      }\n    }\n    // Remove account as paymentType if no customer is attached to the receipt\n    var currentCustomer = receipt.getCustomer();\n    if (!currentCustomer || !currentCustomer.customerNumber) {\n      var accountPaymentIndex = $scope.paymentTypes.findIndex(function (x) {\n        return x.type === \"Account\";\n      });\n      if (accountPaymentIndex > -1) {\n        $scope.paymentTypes.splice(accountPaymentIndex, 1);\n      }\n    }\n\n    // Some payment types are not added via posConfig\n    if (extraPayments) {\n      angular.forEach(extraPayments, function (element) {\n        if (!$scope.paymentTypes.find(function (x) {\n          return x.type == element.type;\n        })) element.addPayment($scope.paymentTypes);\n      });\n    }\n    $scope.currencies = angular.copy(posConfig.getCurrencySetup());\n    delete $scope.currencies[posConfig.getLocalCurrency().name];\n  }\n  eventBus.subscribe(eventBus.events.pos.newConfig, $scope, loadConfig);\n});\n","\"use strict\";\n\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); }\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _iterableToArray(r) { if (\"undefined\" != typeof Symbol && null != r[Symbol.iterator] || null != r[\"@@iterator\"]) return Array.from(r); }\nfunction _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nfunction _regeneratorRuntime() { \"use strict\"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return r; }; var t, r = {}, e = Object.prototype, n = e.hasOwnProperty, o = \"function\" == typeof Symbol ? Symbol : {}, i = o.iterator || \"@@iterator\", a = o.asyncIterator || \"@@asyncIterator\", u = o.toStringTag || \"@@toStringTag\"; function c(t, r, e, n) { return Object.defineProperty(t, r, { value: e, enumerable: !n, configurable: !n, writable: !n }); } try { c({}, \"\"); } catch (t) { c = function c(t, r, e) { return t[r] = e; }; } function h(r, e, n, o) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype); return c(a, \"_invoke\", function (r, e, n) { var o = 1; return function (i, a) { if (3 === o) throw Error(\"Generator is already running\"); if (4 === o) { if (\"throw\" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var u = n.delegate; if (u) { var c = d(u, n); if (c) { if (c === f) continue; return c; } } if (\"next\" === n.method) n.sent = n._sent = n.arg;else if (\"throw\" === n.method) { if (1 === o) throw o = 4, n.arg; n.dispatchException(n.arg); } else \"return\" === n.method && n.abrupt(\"return\", n.arg); o = 3; var h = s(r, e, n); if (\"normal\" === h.type) { if (o = n.done ? 4 : 2, h.arg === f) continue; return { value: h.arg, done: n.done }; } \"throw\" === h.type && (o = 4, n.method = \"throw\", n.arg = h.arg); } }; }(r, n, new Context(o || [])), !0), a; } function s(t, r, e) { try { return { type: \"normal\", arg: t.call(r, e) }; } catch (t) { return { type: \"throw\", arg: t }; } } r.wrap = h; var f = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var l = {}; c(l, i, function () { return this; }); var p = Object.getPrototypeOf, y = p && p(p(x([]))); y && y !== e && n.call(y, i) && (l = y); var v = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(l); function g(t) { [\"next\", \"throw\", \"return\"].forEach(function (r) { c(t, r, function (t) { return this._invoke(r, t); }); }); } function AsyncIterator(t, r) { function e(o, i, a, u) { var c = s(t[o], t, i); if (\"throw\" !== c.type) { var h = c.arg, f = h.value; return f && \"object\" == _typeof(f) && n.call(f, \"__await\") ? r.resolve(f.__await).then(function (t) { e(\"next\", t, a, u); }, function (t) { e(\"throw\", t, a, u); }) : r.resolve(f).then(function (t) { h.value = t, a(h); }, function (t) { return e(\"throw\", t, a, u); }); } u(c.arg); } var o; c(this, \"_invoke\", function (t, n) { function i() { return new r(function (r, o) { e(t, n, r, o); }); } return o = o ? o.then(i, i) : i(); }, !0); } function d(r, e) { var n = e.method, o = r.i[n]; if (o === t) return e.delegate = null, \"throw\" === n && r.i[\"return\"] && (e.method = \"return\", e.arg = t, d(r, e), \"throw\" === e.method) || \"return\" !== n && (e.method = \"throw\", e.arg = new TypeError(\"The iterator does not provide a '\" + n + \"' method\")), f; var i = s(o, r.i, e.arg); if (\"throw\" === i.type) return e.method = \"throw\", e.arg = i.arg, e.delegate = null, f; var a = i.arg; return a ? a.done ? (e[r.r] = a.value, e.next = r.n, \"return\" !== e.method && (e.method = \"next\", e.arg = t), e.delegate = null, f) : a : (e.method = \"throw\", e.arg = new TypeError(\"iterator result is not an object\"), e.delegate = null, f); } function w(t) { this.tryEntries.push(t); } function m(r) { var e = r[4] || {}; e.type = \"normal\", e.arg = t, r[4] = e; } function Context(t) { this.tryEntries = [[-1]], t.forEach(w, this), this.reset(!0); } function x(r) { if (null != r) { var e = r[i]; if (e) return e.call(r); if (\"function\" == typeof r.next) return r; if (!isNaN(r.length)) { var o = -1, a = function e() { for (; ++o < r.length;) if (n.call(r, o)) return e.value = r[o], e.done = !1, e; return e.value = t, e.done = !0, e; }; return a.next = a; } } throw new TypeError(_typeof(r) + \" is not iterable\"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, c(v, \"constructor\", GeneratorFunctionPrototype), c(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction), GeneratorFunction.displayName = c(GeneratorFunctionPrototype, u, \"GeneratorFunction\"), r.isGeneratorFunction = function (t) { var r = \"function\" == typeof t && t.constructor; return !!r && (r === GeneratorFunction || \"GeneratorFunction\" === (r.displayName || r.name)); }, r.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, c(t, u, \"GeneratorFunction\")), t.prototype = Object.create(v), t; }, r.awrap = function (t) { return { __await: t }; }, g(AsyncIterator.prototype), c(AsyncIterator.prototype, a, function () { return this; }), r.AsyncIterator = AsyncIterator, r.async = function (t, e, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(h(t, e, n, o), i); return r.isGeneratorFunction(e) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, g(v), c(v, u, \"Generator\"), c(v, i, function () { return this; }), c(v, \"toString\", function () { return \"[object Generator]\"; }), r.keys = function (t) { var r = Object(t), e = []; for (var n in r) e.unshift(n); return function t() { for (; e.length;) if ((n = e.pop()) in r) return t.value = n, t.done = !1, t; return t.done = !0, t; }; }, r.values = x, Context.prototype = { constructor: Context, reset: function reset(r) { if (this.prev = this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = \"next\", this.arg = t, this.tryEntries.forEach(m), !r) for (var e in this) \"t\" === e.charAt(0) && n.call(this, e) && !isNaN(+e.slice(1)) && (this[e] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0][4]; if (\"throw\" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(r) { if (this.done) throw r; var e = this; function n(t) { a.type = \"throw\", a.arg = r, e.next = t; } for (var o = e.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i[4], u = this.prev, c = i[1], h = i[2]; if (-1 === i[0]) return n(\"end\"), !1; if (!c && !h) throw Error(\"try statement without catch or finally\"); if (null != i[0] && i[0] <= u) { if (u < c) return this.method = \"next\", this.arg = t, n(c), !0; if (u < h) return n(h), !1; } } }, abrupt: function abrupt(t, r) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var n = this.tryEntries[e]; if (n[0] > -1 && n[0] <= this.prev && this.prev < n[2]) { var o = n; break; } } o && (\"break\" === t || \"continue\" === t) && o[0] <= r && r <= o[2] && (o = null); var i = o ? o[4] : {}; return i.type = t, i.arg = r, o ? (this.method = \"next\", this.next = o[2], f) : this.complete(i); }, complete: function complete(t, r) { if (\"throw\" === t.type) throw t.arg; return \"break\" === t.type || \"continue\" === t.type ? this.next = t.arg : \"return\" === t.type ? (this.rval = this.arg = t.arg, this.method = \"return\", this.next = \"end\") : \"normal\" === t.type && r && (this.next = r), f; }, finish: function finish(t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[2] === t) return this.complete(e[4], e[3]), m(e), f; } }, \"catch\": function _catch(t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[0] === t) { var n = e[4]; if (\"throw\" === n.type) { var o = n.arg; m(e); } return o; } } throw Error(\"illegal catch attempt\"); }, delegateYield: function delegateYield(r, e, n) { return this.delegate = { i: x(r), r: e, n: n }, \"next\" === this.method && (this.arg = t), f; } }, r; }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"next\", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"throw\", n); } _next(void 0); }); }; }\npos.factory(\"sales\", function (saleRepository, posConfig, receipt, posStorage, $timeout, $q, terminalActionRepository, payPlazaRepository, $rootScope, cleanCashService, eventBus, fluctuatingPropertiesHelper, itemInfoService, infrasecService) {\n  var sales = {};\n  // Requires posConfig to be loaded and initialized before this line is executed\n  var SALE_STORE = \"saleQueue\";\n  var saleUnloader;\n  var UNLOAD_FREQUENCY = 1000 * 60 * 5; // 5 minutes;\n  var payPlazaRequest = null;\n  sales.getLocalCurrency = posConfig.getLocalCurrency;\n\n  /**\n   * Service handler for sending payment requests to payment devices. It handles exchange rates and rounding.\n   * @param  {String} type               Payment type, i.e. \"Cash\", \"Change\", \"Card\", etc.\n   * @param  {Number} amount             Amount paid to be addede to the receipt\n   * @param  {String} currencyIdentifier Same as currencyCode with added \"Local\".\n   * @param  {String} contextInfo        Any additional info the request should carry\n   * @return {promise}                   The request promise.\n   */\n  sales.makePayment = function (type, amount, currencyIdentifier, contextInfo, fluctuatingProperties) {\n    getPaperStatus();\n    var currency;\n    if (currencyIdentifier) currency = typeof currencyIdentifier === \"string\" ? posConfig.getCurrencySetup(currencyIdentifier) : currencyIdentifier;else currency = this.getLocalCurrency();\n    amount = new Decimal(amount);\n    var isChange = type === \"Change\";\n    var rounding = 0;\n    if (isChange) {\n      var rounded = this.round(amount, currency, isChange);\n      rounding = rounded.abs().minus(amount.abs());\n      amount = rounded;\n    }\n    receipt.setArmId(saleRepository.device().getArmId());\n    return saleRepository.device().makePayment(posConfig.groupId, type, amount, rounding, receipt.getReceipt(), currency, contextInfo, fluctuatingProperties);\n  };\n  sales.saveSale = function (device) {\n    var deferred = $q.defer();\n    var finishedReceipt = angular.copy(receipt.getReceipt());\n    saleRepository.api.saveSale(finishedReceipt).then(handleSavedSale, function (response) {\n      // keep the receipt in the unload queue only if we failed to deliver due to -1 (offline), 404 or 500 (temporary error), otherwise stash it and pop queue on ARM\n      if (response.status === -1 || response.status === 404 || response.status === 500) {\n        pushSale(finishedReceipt);\n        return deferred.resolve(response);\n      }\n      var message = response.data ? response.data.message : \"\";\n      return saleRepository.api.stashReceipt(finishedReceipt, response.status, message).then(handleSavedSale);\n    });\n    function handleSavedSale(response) {\n      if (device) {\n        saleRepository.popReceiptQueue(device, finishedReceipt.receiptId, posConfig.posId);\n      }\n      deferred.resolve(response);\n      itemInfoService.storeItemInfoResponses(finishedReceipt, response.data.uuid);\n    }\n    return deferred.promise;\n  };\n  sales.completeSaleOnDevice = function (deviceId) {\n    var finishingReceipt = receipt.getReceipt();\n    return eventBus.notifyAsync(eventBus.events.sale.completingOnDevice, finishingReceipt).then(function (canProceed) {\n      receipt.updateReceipt(finishingReceipt);\n      receipt.finalizeReceipt();\n      var finishedReceipt = angular.copy(receipt.getReceipt());\n      finishedReceipt.printReceipt = !posConfig.getOptions().emailReceiptIsDefault;\n      if (canProceed) {\n        if (infrasecService.isActive()) {\n          return infrasecService.signReceipt(receipt.getReceipt()).then(function (receiptIsSigned) {\n            if (receiptIsSigned) {\n              return saleRepository.completeSale(deviceId, angular.copy(receipt.getReceipt()), \"\");\n            }\n          });\n        } else {\n          return cleanCashService.getCleanCashCodeIfActive(finishedReceipt, true).then(function (cleanCashCode) {\n            return saleRepository.completeSale(deviceId, finishedReceipt, cleanCashCode);\n          }, function (errorResponse) {\n            return saleRepository.completeSale(deviceId, finishedReceipt, \"\");\n          });\n        }\n      }\n    });\n  };\n  sales.incrementReprint = saleRepository.api.incrementReprint;\n\n  /**\n   * Push sale to the to-be-delivered queue. If the sale is not popped, the POS will try to deliver this sale\n   * every time the sale unloader runs\n   * @param  {[type]} receipt [description]\n   * @return {[type]}         [description]\n   */\n  function pushSale(receipt) {\n    var queue = posStorage.get(SALE_STORE) || [];\n    queue.push(receipt);\n    posStorage.set(SALE_STORE, queue);\n  }\n\n  /**\n   * Pop a sale from the to-be-delivered queue.\n   * @param  {[type]} receiptId [description]\n   * @return {[type]}           [description]\n   */\n  function popSale(receiptId) {\n    var queue = posStorage.get(SALE_STORE) || [];\n    if (queue.length === 0) return; // shouldn't really happen\n    if (queue[queue.length - 1].receiptId === receiptId) queue.pop();else {\n      // somehow it's not at the end of the queue, search for it\n      var saleIndex;\n      for (var i = 0; i < queue.length; i++) {\n        if (queue[i].receiptId === receiptId) saleIndex = queue[i].receiptId;\n      }\n      queue = queue.splice(saleIndex, 1);\n    }\n    posStorage.set(SALE_STORE, queue);\n  }\n  function getPaperStatus() {\n    return saleRepository.device().PrinterPaperStatus().then(function (response) {\n      posStorage.set(\"paperStatus\", response);\n      return response;\n    });\n  }\n  sales.round = function (val, currency, isChange) {\n    var zero = new Decimal(0);\n    var onehundred = new Decimal(100);\n    if (val.equals(zero)) return zero;\n    var values = [];\n    var smallestUnit = new Decimal(currency.units[0]).times(100);\n    var times = onehundred.dividedBy(smallestUnit);\n    for (var a = 0; a <= times; a++) {\n      // values.push(a * currency.smallestUnit);\n      values.push(smallestUnit.times(a));\n    }\n\n    // var wholeNumber = Math.floor(Math.abs(val));\n    // var diff = Math.abs((Math.abs(val) - wholeNumber)) * 100; //in frac unit\n\n    var wholeNumber = val.absoluteValue().floor();\n    var diff = val.abs().minus(wholeNumber).abs().times(onehundred); //in frac unit\n    var index = zero;\n    var mindist = new Decimal(101);\n    angular.forEach(values, function (v) {\n      if (isChange) {\n        if (v.minus(diff).abs().lessThan(mindist)) {\n          mindist = v.minus(diff).abs();\n          index = values.indexOfDecimal(v);\n        }\n      } else {\n        if (v.minus(diff).abs().lessThanOrEqualTo(mindist)) {\n          mindist = v.minus(diff).abs();\n          index = values.indexOfDecimal(v);\n        }\n      }\n    });\n\n    // var roundedDecimal = values[index] / 100;\n    // var roundedValue = wholeNumber + roundedDecimal;\n\n    var roundedDecimal = values[index].dividedBy(onehundred);\n    var roundedValue = wholeNumber.plus(roundedDecimal);\n    return val.isNegative() ? roundedValue.neg() : roundedValue;\n  };\n  sales.openDrawer = function (clerkId, device) {\n    return saleRepository.device(device).openDrawer(clerkId);\n  };\n  sales.reprintReceipt = /*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee() {\n    var rec, receiptFromBackend, notifyEvent, receiptFromConnector;\n    return _regeneratorRuntime().wrap(function _callee$(_context) {\n      while (1) switch (_context.prev = _context.next) {\n        case 0:\n          rec = null;\n          _context.prev = 1;\n          _context.next = 4;\n          return saleRepository.api.getLastReceipt();\n        case 4:\n          receiptFromBackend = _context.sent.data;\n          if (receiptFromBackend) rec = receipt.decimalifyReceipt(receiptFromBackend);\n          _context.next = 19;\n          break;\n        case 8:\n          _context.prev = 8;\n          _context.t0 = _context[\"catch\"](1);\n          notifyEvent = eventBus.notify(eventBus.events.sale.reprintOffline);\n          if (notifyEvent.defaultPrevented) {\n            _context.next = 18;\n            break;\n          }\n          _context.next = 14;\n          return saleRepository.device().getLastReceipt();\n        case 14:\n          receiptFromConnector = _context.sent.data.d[0];\n          if (receiptFromConnector) rec = receipt.decimalifyReceipt(receiptFromConnector);\n          _context.next = 19;\n          break;\n        case 18:\n          return _context.abrupt(\"return\", $q.reject(\"toast/cannot-reprint-offline\"));\n        case 19:\n          if (!rec) {\n            _context.next = 25;\n            break;\n          }\n          _context.next = 22;\n          return sales.printReceiptCopy(rec, true);\n        case 22:\n          return _context.abrupt(\"return\", _context.sent);\n        case 25:\n          return _context.abrupt(\"return\", $q.reject(\"toast/cannot-reprint\"));\n        case 26:\n        case \"end\":\n          return _context.stop();\n      }\n    }, _callee, null, [[1, 8]]);\n  }));\n  sales.getTerminalStatus = function (deviceId, sessionId) {\n    return terminalActionRepository.getTerminalStatus(deviceId, sessionId);\n  };\n  sales.abortCardPayment = function (deviceId, sessionId) {\n    return terminalActionRepository.abortCardPayment(deviceId, sessionId);\n  };\n  sales.verifoneVoiceApproval = terminalActionRepository.verifoneVoiceApproval;\n  sales.verifoneSignatureApproval = terminalActionRepository.verifoneSignatureApproval;\n  sales.getPayPlazaTerminalStatus = function (deviceId, sessionId) {\n    return payPlazaRepository.getTerminalStatus(deviceId, sessionId);\n  };\n  sales.startSaleUnloader = function () {\n    saleUnloader = $timeout(tryUnloadSaleQueue, UNLOAD_FREQUENCY);\n  };\n  function tryUnloadSaleQueue() {\n    var queue = posStorage.get(SALE_STORE) || [];\n    if (queue.length === 0) return sales.startSaleUnloader();\n    var notDelivered = [];\n    // start unloading from the first receipt in the saleQueue - it will run recursively through the list\n    unload(0);\n    function unload(index) {\n      var receipt = queue[index];\n      saleRepository.api.saveSale(queue[index]).then(function () {\n        saleRepository.popReceiptQueue(receipt.armId, receipt.receiptId, receipt.posId);\n      }, function (response) {\n        // if it's a 409 conflict, then the ARM has delivered it, then we just drop it.\n        // a 400 Bad Request should already have been caught and stashed at the original save try\n        // 404 or 500 (temporary error) is the only legit reason to keep trying to unload the sale\n        if (response.status === 404 || response.status === 500) notDelivered.push(receipt);\n      })[\"finally\"](function () {\n        if (index !== queue.length - 1) return unload(++index);\n        posStorage.set(SALE_STORE, notDelivered);\n        sales.startSaleUnloader();\n      });\n    }\n  }\n  sales.stopSaleUnloader = function () {\n    if (saleUnloader) $timeout.cancel(saleUnloader);\n  };\n  sales.getAllDevicesReceipts = function (skip, pageSize) {\n    return saleRepository.all.getReceipts(skip, pageSize);\n  };\n  sales.getReceipts = function (from, to, filter, allShops, pageSize, page, customerNo, includeLoyaltyData) {\n    return saleRepository.api.getReceipts(from, to, filter, allShops, pageSize, page, customerNo, includeLoyaltyData);\n  };\n  sales.getBookings = function (customerNo) {\n    return saleRepository.api.getBookings(customerNo);\n  };\n  sales.getReturnedQuantities = function (transactionUuid) {\n    return saleRepository.api.getReturnedQuantities(transactionUuid).then(function (response) {\n      return response.data;\n    });\n  };\n  sales.printReceiptCopy = function (receipt, isCopy) {\n    var event = eventBus.notify(eventBus.events.sale.reprint, receipt);\n    if (!event.defaultPrevented) {\n      if (infrasecService.isActive()) {\n        return infrasecService.signReceiptCopy(receipt).then(function (response) {\n          if (response) {\n            return printReceiptCopy(response, isCopy);\n          }\n        });\n      } else {\n        if (isCopy) {\n          sales.incrementReprint(receipt.uuid);\n        }\n        return printReceiptCopy(receipt, isCopy);\n      }\n    } else {\n      return $q.reject(\"toast/cannot-reprint\");\n    }\n  };\n  function printReceiptCopy(receipt, isCopy) {\n    return cleanCashService.getCleanCashCodeIfActive(receipt, false).then(function (cleanCashCode) {\n      return saleRepository.device().printReceiptCopy(receipt, cleanCashCode, isCopy);\n    });\n  }\n  sales.printGiftReceipt = function (receipt, exchangeBarcodes) {\n    return cleanCashService.getCleanCashCodeIfActive(receipt, false).then(function (cleanCashCode) {\n      var printingPromise = $q.resolve();\n      var printingFunc = function printingFunc(r) {\n        return saleRepository.device().printGiftReceipt(r, cleanCashCode);\n      };\n      receipt.items.filter(function (item) {\n        return item.fluctuatingProperties;\n      }).filter(function (item) {\n        return item.fluctuatingProperties.isGift;\n      }).map(function (item) {\n        // One receipt per item\n        var newReceipt = _objectSpread({}, receipt);\n        newReceipt.items = [item];\n        return newReceipt;\n      }).map(function (r) {\n        // One receipt per quantity\n        var returnArray = [];\n        var _loop = function _loop() {\n            var newReceipt = _objectSpread({}, r);\n            newReceipt.items = [];\n            newReceipt.items[0] = _.merge({}, r.items[0]);\n            newReceipt.items[0].quantity = 1;\n            var exLblIdx = exchangeBarcodes.findIndex(function (lbl) {\n              return lbl.transactionLineUuid == newReceipt.items[0].uuid;\n            });\n            var exchangeBarcode = exchangeBarcodes.splice(exLblIdx, 1)[0];\n            barcode = exchangeBarcode.barcode;\n            if (barcode) fluctuatingPropertiesHelper.setExchangeBarcode(barcode, newReceipt.items[0]);\n            returnArray.push(newReceipt);\n          },\n          barcode;\n        for (var i = 0; i < r.items[0].quantity; i++) {\n          _loop();\n        }\n        return returnArray;\n      }).reduce(function (pre, cur) {\n        return [].concat(_toConsumableArray(pre), _toConsumableArray(cur));\n      }, []) // Flatmap\n      .forEach(function (r) {\n        return printingPromise = printingPromise.then(function () {\n          return printingFunc(r);\n        });\n      }); // Queue the prints\n\n      return printingPromise;\n    });\n  };\n  sales.printGiftLabel = /*#__PURE__*/function () {\n    var _ref2 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee2(receipt, exchangeBarcodes) {\n      var currencies, currency, printingPromise;\n      return _regeneratorRuntime().wrap(function _callee2$(_context2) {\n        while (1) switch (_context2.prev = _context2.next) {\n          case 0:\n            currencies = posConfig.getCurrencySetup();\n            currency = Object.values(currencies).find(function (o) {\n              return o.isLocal;\n            });\n            printingPromise = null;\n            receipt.items.forEach(function (item) {\n              var _loop2 = function _loop2() {\n                var exLblIdx = exchangeBarcodes.findIndex(function (lbl) {\n                  return lbl.transactionLineUuid == item.uuid;\n                });\n                var exchangeBarcode = exchangeBarcodes.splice(exLblIdx, 1)[0];\n                var itemData = {\n                  itemNo: item.parameter1,\n                  itemDescription: item.parameter4,\n                  itemVariantDescription: [item.parameter8, item.parameter9, item.parameter10, item.parameter11, item.parameter12].filter(function (p) {\n                    return !!p;\n                  }).join(\" \"),\n                  barcode: item.ean,\n                  price: item.effectiveSalesPrice,\n                  currency: currency.name,\n                  identifier: item.variantId,\n                  exchangeExpiryDate: moment(exchangeBarcode.exchangeExpiryDate).format(\"DD/MM/YYYY\"),\n                  exchangeBarcode: exchangeBarcode.barcode\n                };\n                var fn = function fn() {\n                  return saleRepository.device().printGiftLabel(posConfig.giftLabelTemplateId, itemData, 1);\n                };\n                if (!printingPromise) {\n                  printingPromise = fn();\n                } else {\n                  printingPromise.then(function () {\n                    return fn();\n                  });\n                }\n              };\n              for (var i = 0; i < item.quantity; i++) {\n                _loop2();\n              }\n            });\n            return _context2.abrupt(\"return\", printingPromise);\n          case 5:\n          case \"end\":\n            return _context2.stop();\n        }\n      }, _callee2);\n    }));\n    return function (_x, _x2) {\n      return _ref2.apply(this, arguments);\n    };\n  }();\n  sales.emailReceipt = function (receiverEmail, receipt, isCopy) {\n    return saleRepository.api.emailReceipt(receiverEmail, receipt, posConfig.printTranslations, isCopy);\n  };\n  sales.printTerminalReceipt = function (terminalReceipt) {\n    return saleRepository.device().printTerminalReceipt(terminalReceipt);\n  };\n  return sales;\n});\n","\"use strict\";\n\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _regeneratorRuntime() { \"use strict\"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return r; }; var t, r = {}, e = Object.prototype, n = e.hasOwnProperty, o = \"function\" == typeof Symbol ? Symbol : {}, i = o.iterator || \"@@iterator\", a = o.asyncIterator || \"@@asyncIterator\", u = o.toStringTag || \"@@toStringTag\"; function c(t, r, e, n) { return Object.defineProperty(t, r, { value: e, enumerable: !n, configurable: !n, writable: !n }); } try { c({}, \"\"); } catch (t) { c = function c(t, r, e) { return t[r] = e; }; } function h(r, e, n, o) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype); return c(a, \"_invoke\", function (r, e, n) { var o = 1; return function (i, a) { if (3 === o) throw Error(\"Generator is already running\"); if (4 === o) { if (\"throw\" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var u = n.delegate; if (u) { var c = d(u, n); if (c) { if (c === f) continue; return c; } } if (\"next\" === n.method) n.sent = n._sent = n.arg;else if (\"throw\" === n.method) { if (1 === o) throw o = 4, n.arg; n.dispatchException(n.arg); } else \"return\" === n.method && n.abrupt(\"return\", n.arg); o = 3; var h = s(r, e, n); if (\"normal\" === h.type) { if (o = n.done ? 4 : 2, h.arg === f) continue; return { value: h.arg, done: n.done }; } \"throw\" === h.type && (o = 4, n.method = \"throw\", n.arg = h.arg); } }; }(r, n, new Context(o || [])), !0), a; } function s(t, r, e) { try { return { type: \"normal\", arg: t.call(r, e) }; } catch (t) { return { type: \"throw\", arg: t }; } } r.wrap = h; var f = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var l = {}; c(l, i, function () { return this; }); var p = Object.getPrototypeOf, y = p && p(p(x([]))); y && y !== e && n.call(y, i) && (l = y); var v = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(l); function g(t) { [\"next\", \"throw\", \"return\"].forEach(function (r) { c(t, r, function (t) { return this._invoke(r, t); }); }); } function AsyncIterator(t, r) { function e(o, i, a, u) { var c = s(t[o], t, i); if (\"throw\" !== c.type) { var h = c.arg, f = h.value; return f && \"object\" == _typeof(f) && n.call(f, \"__await\") ? r.resolve(f.__await).then(function (t) { e(\"next\", t, a, u); }, function (t) { e(\"throw\", t, a, u); }) : r.resolve(f).then(function (t) { h.value = t, a(h); }, function (t) { return e(\"throw\", t, a, u); }); } u(c.arg); } var o; c(this, \"_invoke\", function (t, n) { function i() { return new r(function (r, o) { e(t, n, r, o); }); } return o = o ? o.then(i, i) : i(); }, !0); } function d(r, e) { var n = e.method, o = r.i[n]; if (o === t) return e.delegate = null, \"throw\" === n && r.i[\"return\"] && (e.method = \"return\", e.arg = t, d(r, e), \"throw\" === e.method) || \"return\" !== n && (e.method = \"throw\", e.arg = new TypeError(\"The iterator does not provide a '\" + n + \"' method\")), f; var i = s(o, r.i, e.arg); if (\"throw\" === i.type) return e.method = \"throw\", e.arg = i.arg, e.delegate = null, f; var a = i.arg; return a ? a.done ? (e[r.r] = a.value, e.next = r.n, \"return\" !== e.method && (e.method = \"next\", e.arg = t), e.delegate = null, f) : a : (e.method = \"throw\", e.arg = new TypeError(\"iterator result is not an object\"), e.delegate = null, f); } function w(t) { this.tryEntries.push(t); } function m(r) { var e = r[4] || {}; e.type = \"normal\", e.arg = t, r[4] = e; } function Context(t) { this.tryEntries = [[-1]], t.forEach(w, this), this.reset(!0); } function x(r) { if (null != r) { var e = r[i]; if (e) return e.call(r); if (\"function\" == typeof r.next) return r; if (!isNaN(r.length)) { var o = -1, a = function e() { for (; ++o < r.length;) if (n.call(r, o)) return e.value = r[o], e.done = !1, e; return e.value = t, e.done = !0, e; }; return a.next = a; } } throw new TypeError(_typeof(r) + \" is not iterable\"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, c(v, \"constructor\", GeneratorFunctionPrototype), c(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction), GeneratorFunction.displayName = c(GeneratorFunctionPrototype, u, \"GeneratorFunction\"), r.isGeneratorFunction = function (t) { var r = \"function\" == typeof t && t.constructor; return !!r && (r === GeneratorFunction || \"GeneratorFunction\" === (r.displayName || r.name)); }, r.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, c(t, u, \"GeneratorFunction\")), t.prototype = Object.create(v), t; }, r.awrap = function (t) { return { __await: t }; }, g(AsyncIterator.prototype), c(AsyncIterator.prototype, a, function () { return this; }), r.AsyncIterator = AsyncIterator, r.async = function (t, e, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(h(t, e, n, o), i); return r.isGeneratorFunction(e) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, g(v), c(v, u, \"Generator\"), c(v, i, function () { return this; }), c(v, \"toString\", function () { return \"[object Generator]\"; }), r.keys = function (t) { var r = Object(t), e = []; for (var n in r) e.unshift(n); return function t() { for (; e.length;) if ((n = e.pop()) in r) return t.value = n, t.done = !1, t; return t.done = !0, t; }; }, r.values = x, Context.prototype = { constructor: Context, reset: function reset(r) { if (this.prev = this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = \"next\", this.arg = t, this.tryEntries.forEach(m), !r) for (var e in this) \"t\" === e.charAt(0) && n.call(this, e) && !isNaN(+e.slice(1)) && (this[e] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0][4]; if (\"throw\" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(r) { if (this.done) throw r; var e = this; function n(t) { a.type = \"throw\", a.arg = r, e.next = t; } for (var o = e.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i[4], u = this.prev, c = i[1], h = i[2]; if (-1 === i[0]) return n(\"end\"), !1; if (!c && !h) throw Error(\"try statement without catch or finally\"); if (null != i[0] && i[0] <= u) { if (u < c) return this.method = \"next\", this.arg = t, n(c), !0; if (u < h) return n(h), !1; } } }, abrupt: function abrupt(t, r) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var n = this.tryEntries[e]; if (n[0] > -1 && n[0] <= this.prev && this.prev < n[2]) { var o = n; break; } } o && (\"break\" === t || \"continue\" === t) && o[0] <= r && r <= o[2] && (o = null); var i = o ? o[4] : {}; return i.type = t, i.arg = r, o ? (this.method = \"next\", this.next = o[2], f) : this.complete(i); }, complete: function complete(t, r) { if (\"throw\" === t.type) throw t.arg; return \"break\" === t.type || \"continue\" === t.type ? this.next = t.arg : \"return\" === t.type ? (this.rval = this.arg = t.arg, this.method = \"return\", this.next = \"end\") : \"normal\" === t.type && r && (this.next = r), f; }, finish: function finish(t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[2] === t) return this.complete(e[4], e[3]), m(e), f; } }, \"catch\": function _catch(t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[0] === t) { var n = e[4]; if (\"throw\" === n.type) { var o = n.arg; m(e); } return o; } } throw Error(\"illegal catch attempt\"); }, delegateYield: function delegateYield(r, e, n) { return this.delegate = { i: x(r), r: e, n: n }, \"next\" === this.method && (this.arg = t), f; } }, r; }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"next\", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"throw\", n); } _next(void 0); }); }; }\npos.factory(\"trimitPaymentType\", function (receipt, sales, $q, $rootScope, signalr, backend, $injector, inputValidationService, defaultPaymentType, $log) {\n  var service = {};\n\n  /**\n   * Initialise a payment as a trimit loyalty payment type. The trimit loyalty payment type sends it's request to a Connector\n   * And expects more or less the same values back\n   * @param  {string} paymentType         The type of payment, e.g. 'Cash', 'ManualCard', etc.\n   * @param  {Decimal|number} amount      The amount passed in by the keyboard\n   * @param  {object} currency            A curreny object, usually fetch from posConfig.getCurrencySetup(name) or posConfig.getLocalCurrency()\n   * @param  {string} contextInfo         Any additional information this payment type may carry\n   * @return {promise}                    $q promise which is rejected with a status or resolved with the makePayment response\n   */\n  service.makeLoyaltyPayment = /*#__PURE__*/function () {\n    var _ref = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee(paymentType, amount, currency, contextInfo) {\n      var paymentStatus, trimitService, loyaltyCustomer, paymentResponse;\n      return _regeneratorRuntime().wrap(function _callee$(_context) {\n        while (1) switch (_context.prev = _context.next) {\n          case 0:\n            $log.debug(\"trimit: make loyalty payment\");\n            _context.prev = 1;\n            amount = inputValidationService.convertToDecimal(amount);\n            _context.next = 8;\n            break;\n          case 5:\n            _context.prev = 5;\n            _context.t0 = _context[\"catch\"](1);\n            return _context.abrupt(\"return\", $q.reject(_context.t0));\n          case 8:\n            paymentStatus = receipt.getTotal().minus(receipt.getPaymentsTotal()); // we require a correct format for the amount and if the receipt is a return (negative total)\n            // then we do not allow the clerk to try and pay back more than the total amount, because the sale\n            // has to sum to 0 when all is said and done\n            if (!defaultPaymentType.isAmountInvalid(amount)) {\n              _context.next = 11;\n              break;\n            }\n            return _context.abrupt(\"return\", $q.reject(\"INVALID_AMOUNT\"));\n          case 11:\n            if (!amount.isZero()) {\n              _context.next = 14;\n              break;\n            }\n            $rootScope.$emit(\"payment:trimitError\", \"Bonus Points with amount 0 is not allowed\");\n            return _context.abrupt(\"return\", $q.reject(\"INVALID_TYPE_AMOUNT\"));\n          case 14:\n            if (receipt.getTotal().minus(receipt.getPaymentsTotal()).isNegative() && !amount.isNegative()) amount = amount.neg();\n            if (!amount.abs().gt(paymentStatus.abs())) {\n              _context.next = 18;\n              break;\n            }\n            $rootScope.$emit(\"payment:trimitError\", \"Payment amount can not exceed remaining amount\");\n            return _context.abrupt(\"return\", $q.reject(\"TRIMIT_AMOUNT_EXCEEDS_REMAINING_AMOUNT\"));\n          case 18:\n            trimitService = $injector.get(\"trimitService\");\n            _context.next = 21;\n            return trimitService.loadCustomer();\n          case 21:\n            loyaltyCustomer = _context.sent;\n            if (!amount.gt(loyaltyCustomer.bonusAmount)) {\n              _context.next = 25;\n              break;\n            }\n            $rootScope.$emit(\"payment:trimitError\", \"Payment amount can not exceed loyalty customer bonus points\");\n            return _context.abrupt(\"return\", $q.reject(\"TRIMIT_AMOUNT_EXCEEDS_BALANCE\"));\n          case 25:\n            _context.next = 27;\n            return sales.makePayment(paymentType, amount, currency, contextInfo);\n          case 27:\n            paymentResponse = _context.sent;\n            paymentResponse.data.d.customer = loyaltyCustomer;\n            return _context.abrupt(\"return\", paymentResponse);\n          case 30:\n          case \"end\":\n            return _context.stop();\n        }\n      }, _callee, null, [[1, 5]]);\n    }));\n    return function (_x, _x2, _x3, _x4) {\n      return _ref.apply(this, arguments);\n    };\n  }();\n\n  /**\n   * Initialise a payment as a trimit account payment type. The trimit account payment type sends it's request to a Connector\n   * And expects more or less the same values back\n   * @param  {string} paymentType         The type of payment, e.g. 'Cash', 'ManualCard', etc.\n   * @param  {Decimal|number} amount      The amount passed in by the keyboard\n   * @param  {object} currency            A curreny object, usually fetch from posConfig.getCurrencySetup(name) or posConfig.getLocalCurrency()\n   * @param  {string} contextInfo         Any additional information this payment type may carry\n   * @return {promise}                    $q promise which is rejected with a status or resolved with the makePayment response\n   */\n  service.makeAccountPayment = /*#__PURE__*/function () {\n    var _ref2 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee2(paymentType, amount, currency, contextInfo) {\n      var paymentStatus, trimitService, loyaltyCustomer, paymentResponse;\n      return _regeneratorRuntime().wrap(function _callee2$(_context2) {\n        while (1) switch (_context2.prev = _context2.next) {\n          case 0:\n            $log.debug(\"trimit: make account payment\");\n            _context2.prev = 1;\n            amount = inputValidationService.convertToDecimal(amount);\n            _context2.next = 8;\n            break;\n          case 5:\n            _context2.prev = 5;\n            _context2.t0 = _context2[\"catch\"](1);\n            return _context2.abrupt(\"return\", $q.reject(_context2.t0));\n          case 8:\n            paymentStatus = receipt.getTotal().minus(receipt.getPaymentsTotal()); // we require a correct format for the amount and if the receipt is a return (negative total)\n            // then we do not allow the clerk to try and pay back more than the total amount, because the sale\n            // has to sum to 0 when all is said and done\n            if (!defaultPaymentType.isAmountInvalid(amount)) {\n              _context2.next = 11;\n              break;\n            }\n            return _context2.abrupt(\"return\", $q.reject(\"INVALID_AMOUNT\"));\n          case 11:\n            if (!amount.isZero()) {\n              _context2.next = 14;\n              break;\n            }\n            $rootScope.$emit(\"payment:trimitError\", \"Trimit Account payment with zero amount is not allowed\");\n            return _context2.abrupt(\"return\", $q.reject(\"INVALID_TYPE_AMOUNT\"));\n          case 14:\n            if (receipt.getTotal().minus(receipt.getPaymentsTotal()).isNegative() && !amount.isNegative()) amount = amount.neg();\n            if (!amount.abs().gt(paymentStatus.abs())) {\n              _context2.next = 18;\n              break;\n            }\n            $rootScope.$emit(\"payment:trimitError\", \"Payment amount can not exceed remaining amount\");\n            return _context2.abrupt(\"return\", $q.reject(\"TRIMIT_AMOUNT_EXCEEDS_REMAINING_AMOUNT\"));\n          case 18:\n            trimitService = $injector.get(\"trimitService\");\n            _context2.next = 21;\n            return trimitService.loadCustomer();\n          case 21:\n            loyaltyCustomer = _context2.sent;\n            _context2.next = 24;\n            return sales.makePayment(paymentType, amount, currency, contextInfo);\n          case 24:\n            paymentResponse = _context2.sent;\n            paymentResponse.data.d.customer = loyaltyCustomer;\n            return _context2.abrupt(\"return\", paymentResponse);\n          case 27:\n          case \"end\":\n            return _context2.stop();\n        }\n      }, _callee2, null, [[1, 5]]);\n    }));\n    return function (_x5, _x6, _x7, _x8) {\n      return _ref2.apply(this, arguments);\n    };\n  }();\n  return service;\n});\n","\"use strict\";\n\npos.factory(\"verifoneService\", [\"eventBus\", \"sales\", \"$q\", function (eventBus, sales, $q) {\n  var responseHandler;\n  var flowDeferred;\n  var service = {};\n  var splitDisplayTextParameters = function splitDisplayTextParameters(displayText) {\n    return displayText.split(\";\").map(function (o) {\n      return o.split(\"=\");\n    }).reduce(function (pre, curr) {\n      pre[curr[0].toLowerCase()] = curr[1];\n      return pre;\n    }, {});\n  };\n  service.startVoiceReferralFlow = function (status, cardPayment) {\n    flowDeferred = $q.defer();\n    eventBus.notify(eventBus.events.payment.verifone.voiceReferralApproval, splitDisplayTextParameters(status.displayText));\n    responseHandler = eventBus.subscribe(eventBus.events.payment.verifone.voiceReferralApprovalResponse, null, function (ev, textInput) {\n      return voiceReferralApprovalResponse(textInput, cardPayment);\n    });\n    return flowDeferred.promise;\n  };\n  service.startSignatureFlow = function (status, cardPayment) {\n    flowDeferred = $q.defer();\n    cardPayment.cardReceipt = cardPayment.cardReceipt.substring(0, cardPayment.cardReceipt.length - status.bonText.length);\n    if (cardPayment.cardReceipt === \"\") {\n      cardPayment.cardReceipt = null;\n    }\n    sales.printTerminalReceipt(status.bonText);\n    eventBus.notify(eventBus.events.payment.verifone.signatureApproval);\n    responseHandler = eventBus.subscribe(eventBus.events.payment.verifone.signatureApprovalResponse, null, function (ev, approved) {\n      return approved != null ? signatureApprovalResponse(approved, cardPayment) : sales.printTerminalReceipt(status.bonText);\n    });\n    return flowDeferred.promise;\n  };\n  var voiceReferralApprovalResponse = function voiceReferralApprovalResponse(textInput, cardPayment) {\n    if (textInput) {\n      sales.verifoneVoiceApproval(cardPayment.paymentDeviceId, cardPayment.message, cardPayment.amount, true, textInput.toUpperCase()).then(function () {\n        return flowDeferred.resolve();\n      });\n    } else {\n      sales.verifoneVoiceApproval(cardPayment.paymentDeviceId, cardPayment.message, cardPayment.amount, false, \"\").then(function () {\n        return flowDeferred.resolve();\n      });\n    }\n    responseHandler();\n    responseHandler = null;\n  };\n  var signatureApprovalResponse = function signatureApprovalResponse(approved, cardPayment) {\n    sales.verifoneSignatureApproval(cardPayment.paymentDeviceId, cardPayment.message, cardPayment.amount, approved).then(function () {\n      return flowDeferred.resolve();\n    });\n    responseHandler();\n    responseHandler = null;\n  };\n  return service;\n}]);\n","\"use strict\";\n\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _regeneratorRuntime() { \"use strict\"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return r; }; var t, r = {}, e = Object.prototype, n = e.hasOwnProperty, o = \"function\" == typeof Symbol ? Symbol : {}, i = o.iterator || \"@@iterator\", a = o.asyncIterator || \"@@asyncIterator\", u = o.toStringTag || \"@@toStringTag\"; function c(t, r, e, n) { return Object.defineProperty(t, r, { value: e, enumerable: !n, configurable: !n, writable: !n }); } try { c({}, \"\"); } catch (t) { c = function c(t, r, e) { return t[r] = e; }; } function h(r, e, n, o) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype); return c(a, \"_invoke\", function (r, e, n) { var o = 1; return function (i, a) { if (3 === o) throw Error(\"Generator is already running\"); if (4 === o) { if (\"throw\" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var u = n.delegate; if (u) { var c = d(u, n); if (c) { if (c === f) continue; return c; } } if (\"next\" === n.method) n.sent = n._sent = n.arg;else if (\"throw\" === n.method) { if (1 === o) throw o = 4, n.arg; n.dispatchException(n.arg); } else \"return\" === n.method && n.abrupt(\"return\", n.arg); o = 3; var h = s(r, e, n); if (\"normal\" === h.type) { if (o = n.done ? 4 : 2, h.arg === f) continue; return { value: h.arg, done: n.done }; } \"throw\" === h.type && (o = 4, n.method = \"throw\", n.arg = h.arg); } }; }(r, n, new Context(o || [])), !0), a; } function s(t, r, e) { try { return { type: \"normal\", arg: t.call(r, e) }; } catch (t) { return { type: \"throw\", arg: t }; } } r.wrap = h; var f = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var l = {}; c(l, i, function () { return this; }); var p = Object.getPrototypeOf, y = p && p(p(x([]))); y && y !== e && n.call(y, i) && (l = y); var v = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(l); function g(t) { [\"next\", \"throw\", \"return\"].forEach(function (r) { c(t, r, function (t) { return this._invoke(r, t); }); }); } function AsyncIterator(t, r) { function e(o, i, a, u) { var c = s(t[o], t, i); if (\"throw\" !== c.type) { var h = c.arg, f = h.value; return f && \"object\" == _typeof(f) && n.call(f, \"__await\") ? r.resolve(f.__await).then(function (t) { e(\"next\", t, a, u); }, function (t) { e(\"throw\", t, a, u); }) : r.resolve(f).then(function (t) { h.value = t, a(h); }, function (t) { return e(\"throw\", t, a, u); }); } u(c.arg); } var o; c(this, \"_invoke\", function (t, n) { function i() { return new r(function (r, o) { e(t, n, r, o); }); } return o = o ? o.then(i, i) : i(); }, !0); } function d(r, e) { var n = e.method, o = r.i[n]; if (o === t) return e.delegate = null, \"throw\" === n && r.i[\"return\"] && (e.method = \"return\", e.arg = t, d(r, e), \"throw\" === e.method) || \"return\" !== n && (e.method = \"throw\", e.arg = new TypeError(\"The iterator does not provide a '\" + n + \"' method\")), f; var i = s(o, r.i, e.arg); if (\"throw\" === i.type) return e.method = \"throw\", e.arg = i.arg, e.delegate = null, f; var a = i.arg; return a ? a.done ? (e[r.r] = a.value, e.next = r.n, \"return\" !== e.method && (e.method = \"next\", e.arg = t), e.delegate = null, f) : a : (e.method = \"throw\", e.arg = new TypeError(\"iterator result is not an object\"), e.delegate = null, f); } function w(t) { this.tryEntries.push(t); } function m(r) { var e = r[4] || {}; e.type = \"normal\", e.arg = t, r[4] = e; } function Context(t) { this.tryEntries = [[-1]], t.forEach(w, this), this.reset(!0); } function x(r) { if (null != r) { var e = r[i]; if (e) return e.call(r); if (\"function\" == typeof r.next) return r; if (!isNaN(r.length)) { var o = -1, a = function e() { for (; ++o < r.length;) if (n.call(r, o)) return e.value = r[o], e.done = !1, e; return e.value = t, e.done = !0, e; }; return a.next = a; } } throw new TypeError(_typeof(r) + \" is not iterable\"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, c(v, \"constructor\", GeneratorFunctionPrototype), c(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction), GeneratorFunction.displayName = c(GeneratorFunctionPrototype, u, \"GeneratorFunction\"), r.isGeneratorFunction = function (t) { var r = \"function\" == typeof t && t.constructor; return !!r && (r === GeneratorFunction || \"GeneratorFunction\" === (r.displayName || r.name)); }, r.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, c(t, u, \"GeneratorFunction\")), t.prototype = Object.create(v), t; }, r.awrap = function (t) { return { __await: t }; }, g(AsyncIterator.prototype), c(AsyncIterator.prototype, a, function () { return this; }), r.AsyncIterator = AsyncIterator, r.async = function (t, e, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(h(t, e, n, o), i); return r.isGeneratorFunction(e) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, g(v), c(v, u, \"Generator\"), c(v, i, function () { return this; }), c(v, \"toString\", function () { return \"[object Generator]\"; }), r.keys = function (t) { var r = Object(t), e = []; for (var n in r) e.unshift(n); return function t() { for (; e.length;) if ((n = e.pop()) in r) return t.value = n, t.done = !1, t; return t.done = !0, t; }; }, r.values = x, Context.prototype = { constructor: Context, reset: function reset(r) { if (this.prev = this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = \"next\", this.arg = t, this.tryEntries.forEach(m), !r) for (var e in this) \"t\" === e.charAt(0) && n.call(this, e) && !isNaN(+e.slice(1)) && (this[e] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0][4]; if (\"throw\" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(r) { if (this.done) throw r; var e = this; function n(t) { a.type = \"throw\", a.arg = r, e.next = t; } for (var o = e.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i[4], u = this.prev, c = i[1], h = i[2]; if (-1 === i[0]) return n(\"end\"), !1; if (!c && !h) throw Error(\"try statement without catch or finally\"); if (null != i[0] && i[0] <= u) { if (u < c) return this.method = \"next\", this.arg = t, n(c), !0; if (u < h) return n(h), !1; } } }, abrupt: function abrupt(t, r) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var n = this.tryEntries[e]; if (n[0] > -1 && n[0] <= this.prev && this.prev < n[2]) { var o = n; break; } } o && (\"break\" === t || \"continue\" === t) && o[0] <= r && r <= o[2] && (o = null); var i = o ? o[4] : {}; return i.type = t, i.arg = r, o ? (this.method = \"next\", this.next = o[2], f) : this.complete(i); }, complete: function complete(t, r) { if (\"throw\" === t.type) throw t.arg; return \"break\" === t.type || \"continue\" === t.type ? this.next = t.arg : \"return\" === t.type ? (this.rval = this.arg = t.arg, this.method = \"return\", this.next = \"end\") : \"normal\" === t.type && r && (this.next = r), f; }, finish: function finish(t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[2] === t) return this.complete(e[4], e[3]), m(e), f; } }, \"catch\": function _catch(t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[0] === t) { var n = e[4]; if (\"throw\" === n.type) { var o = n.arg; m(e); } return o; } } throw Error(\"illegal catch attempt\"); }, delegateYield: function delegateYield(r, e, n) { return this.delegate = { i: x(r), r: e, n: n }, \"next\" === this.method && (this.arg = t), f; } }, r; }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"next\", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"throw\", n); } _next(void 0); }); }; }\npos.controller(\"PicklistCtrl\", function ($scope, backend, $translate, posConfig, posStorage, notification, picklistService) {\n  $scope.printTranslations = posStorage.get(\"printTranslations\");\n  $scope.dropdownExpanded = false;\n  $scope.orderDropdownExpanded = false;\n  $scope.picklistInvalidInputs = \"\";\n  $scope.picklistTypeByVendors = [];\n  $scope.picklistTypeByProducts = [];\n  $scope.printPicklistForConnector = function (picklist) {\n    if (backend.devices[backend.defaultDevice].id == 999) {\n      notification.pop(\"warning\", $scope.picklistDefaultConnectorTitle, $scope.picklistDefaultConnectorMsg, 20000);\n    } else {\n      return backend.devices[backend.defaultDevice].post(\"/POSServiceHandler.aspx/PrintPickList\", {\n        pickList: picklist,\n        printTranslations: posConfig.printTranslations\n      });\n    }\n  };\n  $scope.printPicklist = /*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee() {\n    var picklist;\n    return _regeneratorRuntime().wrap(function _callee$(_context) {\n      while (1) switch (_context.prev = _context.next) {\n        case 0:\n          if ($scope.picklist.toDate) $scope.picklist.picklistTimestamp = $scope.picklist.toDate;\n          if ($scope.picklist.order == $scope.picklistOrderByItemNo) $scope.picklist.orderBy = 0;\n          if ($scope.picklist.order == $scope.picklistOrderByItemName) $scope.picklist.orderBy = 1;\n          if ($scope.picklist.order == $scope.picklistOrderByItemDescription) $scope.picklist.orderBy = 2;\n          if ($scope.picklist.order == $scope.picklistOrderByVendorItemNo) $scope.picklist.orderBy = 3;\n          if ($scope.picklist.type == $scope.picklistTypeByVendors) $scope.picklist.listType = 0;\n          if ($scope.picklist.type == $scope.picklistTypeByProducts) $scope.picklist.listType = 1;\n          if (validateInputs()) {\n            _context.next = 9;\n            break;\n          }\n          return _context.abrupt(\"return\");\n        case 9:\n          _context.next = 11;\n          return picklistService.getPicklistTimestamp();\n        case 11:\n          $scope.picklistTimestamp = _context.sent;\n          $scope.picklist.fromDate = new Date(moment($scope.picklist.fromDate).startOf(\"day\"));\n          $scope.picklist.toDate = new Date(moment($scope.picklist.toDate).endOf(\"day\"));\n          _context.next = 16;\n          return picklistService.printPicklist($scope.picklist.listType, $scope.picklist.orderBy, $scope.picklist.printFromLastPrint, $scope.picklist.picklistTimestamp, $scope.picklist.fromDate, $scope.picklist.toDate);\n        case 16:\n          picklist = _context.sent;\n          this.printPicklistForConnector(picklist.data);\n        case 18:\n        case \"end\":\n          return _context.stop();\n      }\n    }, _callee, this);\n  }));\n  function validateInputs() {\n    if ($scope.picklist.fromDate && $scope.picklist.toDate) return true;\n    notification.pop(\"error\", $scope.picklistInvalidInputs);\n    return false;\n  }\n  $scope.getLastPrintDate = /*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee2() {\n    var response;\n    return _regeneratorRuntime().wrap(function _callee2$(_context2) {\n      while (1) switch (_context2.prev = _context2.next) {\n        case 0:\n          if (!$scope.picklist.printFromLastPrint) {\n            _context2.next = 6;\n            break;\n          }\n          _context2.next = 3;\n          return picklistService.getPicklistTimestamp();\n        case 3:\n          response = _context2.sent;\n          $scope.picklist.fromDate = new Date(response.data);\n          $scope.picklist.toDate = new Date();\n        case 6:\n        case \"end\":\n          return _context2.stop();\n      }\n    }, _callee2);\n  }));\n  $scope.untickPrintFromLastPrint = /*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee3() {\n    return _regeneratorRuntime().wrap(function _callee3$(_context3) {\n      while (1) switch (_context3.prev = _context3.next) {\n        case 0:\n          if ($scope.picklist.printFromLastPrint) {\n            $scope.picklist.printFromLastPrint = false;\n          }\n        case 1:\n        case \"end\":\n          return _context3.stop();\n      }\n    }, _callee3);\n  }));\n  $scope.toggleDropdown = function () {\n    $scope.dropdownExpanded = !$scope.dropdownExpanded;\n  };\n  $scope.toggleOrderDropdown = function () {\n    $scope.orderDropdownExpanded = !$scope.orderDropdownExpanded;\n  };\n  $scope.setPicklistTypeByVendors = function (picklistType) {\n    $scope.dropdownExpanded = false;\n    $scope.picklist.type = $scope.picklistTypeByVendors;\n  };\n  $scope.setPicklistTypeByProducts = function (picklistType) {\n    $scope.dropdownExpanded = false;\n    $scope.picklist.type = $scope.picklistTypeByProducts;\n  };\n  $scope.setPicklistOrderByItemNo = function (picklistOrder) {\n    $scope.orderDropdownExpanded = false;\n    $scope.picklist.order = $scope.picklistOrderByItemNo;\n  };\n  $scope.setPicklistOrderByItemName = function (picklistOrder) {\n    $scope.orderDropdownExpanded = false;\n    $scope.picklist.order = $scope.picklistOrderByItemName;\n  };\n  $scope.setPicklistOrderByItemDescription = function (picklistOrder) {\n    $scope.orderDropdownExpanded = false;\n    $scope.picklist.order = $scope.picklistOrderByItemDescription;\n  };\n  $scope.setPicklistOrderByVendorItemNo = function (picklistOrder) {\n    $scope.orderDropdownExpanded = false;\n    $scope.picklist.order = $scope.picklistOrderByVendorItemNo;\n  };\n  init();\n  function init() {\n    return _init.apply(this, arguments);\n  }\n  function _init() {\n    _init = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee4() {\n      var translations;\n      return _regeneratorRuntime().wrap(function _callee4$(_context4) {\n        while (1) switch (_context4.prev = _context4.next) {\n          case 0:\n            _context4.next = 2;\n            return $translate([\"dropdown/picklistVendorsThenProductGroups\", \"dropdown/picklistProductGroupsThenVendors\", \"dropdown/picklistItemNo\", \"dropdown/picklistItemName\", \"dropdown/picklistItemDescription\", \"dropdown/picklistVendorItemNo\", \"notification/picklistInvalidInputs\", \"notification/picklistDefaultConnectorTitle\", \"notification/picklistDefaultConnectorMsg\"]);\n          case 2:\n            translations = _context4.sent;\n            $scope.picklistTypeByVendors = translations[\"dropdown/picklistVendorsThenProductGroups\"];\n            $scope.picklistTypeByProducts = translations[\"dropdown/picklistProductGroupsThenVendors\"];\n            $scope.picklistOrderByItemNo = translations[\"dropdown/picklistItemNo\"];\n            $scope.picklistOrderByItemName = translations[\"dropdown/picklistItemName\"];\n            $scope.picklistOrderByItemDescription = translations[\"dropdown/picklistItemDescription\"];\n            $scope.picklistOrderByVendorItemNo = translations[\"dropdown/picklistVendorItemNo\"];\n            $scope.picklistInvalidInputs = translations[\"notification/picklistInvalidInputs\"];\n            $scope.picklistDefaultConnectorTitle = translations[\"notification/picklistDefaultConnectorTitle\"];\n            $scope.picklistDefaultConnectorMsg = translations[\"notification/picklistDefaultConnectorMsg\"];\n            $scope.picklist.type = $scope.picklistTypeByVendors;\n            $scope.picklist.order = $scope.picklistOrderByItemNo;\n            $scope.picklist.fromDate = new Date(moment().subtract(2, \"days\"));\n            $scope.picklist.toDate = new Date(moment());\n          case 16:\n          case \"end\":\n            return _context4.stop();\n        }\n      }, _callee4);\n    }));\n    return _init.apply(this, arguments);\n  }\n});\n","\"use strict\";\n\npos.factory(\"picklistRepository\", function (backend) {\n  var picklist = {};\n  picklist.api = {\n    getPicklist: function getPicklist(type, order, printFromLastPrint, creationDate, fromDate, toDate) {\n      var query = {};\n      query.type = type;\n      query.order = order;\n      if (printFromLastPrint) query.printFromLastPrint = printFromLastPrint;\n      query.creationDate = moment(new Date()).format();\n      if (fromDate) query.fromDate = fromDate;\n      if (toDate) query.toDate = toDate;\n      return backend.api.post(\"api/picklist\", query);\n    },\n    getPicklistTimestamp: function getPicklistTimestamp() {\n      return backend.api.get(\"api/picklist/timestamp\");\n    }\n  };\n  return picklist;\n});\n","\"use strict\";\n\npos.factory(\"picklistService\", function (picklistRepository) {\n  var service = {};\n  service.printPicklist = function (type, orderBy, printFromLastPrint, creationDate, fromDate, toDate) {\n    return picklistRepository.api.getPicklist(type, orderBy, printFromLastPrint, creationDate, fromDate, toDate);\n  };\n  service.getPicklistTimestamp = function () {\n    return picklistRepository.api.getPicklistTimestamp();\n  };\n  return service;\n});\n","\"use strict\";\n\npos.factory(\"discountOptionsRepository\", function (backend) {\n  var discountOptions = {};\n  discountOptions.api = {\n    getDiscountOptions: function getDiscountOptions() {\n      return backend.api.get(\"api/discountoptions/posdiscountoptions\");\n    }\n  };\n  return discountOptions;\n});\n","\"use strict\";\n\npos.factory(\"discountOptionsService\", function (posConfig, $timeout, receipt, eventBus, discountOptionsRepository) {\n  \"use strict\";\n\n  var service = {};\n  service.getDiscountOptions = function () {\n    var discountOptions = discountOptionsRepository.api.getDiscountOptions();\n    return discountOptions;\n  };\n  return service;\n});\n","\"use strict\";\n\npos.factory(\"discountReasons\", function (posConfig, $timeout, receipt, eventBus) {\n  \"use strict\";\n\n  var service = {};\n  loadConfig();\n  service.overlay = false;\n  service.receiptDiscountOverlay = false;\n  service.discountToApply = 0;\n  service.lineDefaultFunction = false;\n  service.discountMethod = false;\n  service.discountDetails = false;\n  service.discountReasonsSelector = function (discountMethod, discountToApply, defaultFunction, discountDetails) {\n    service.discountMethod = discountMethod;\n    service.discountToApply = discountToApply;\n    service.lineDefaultFunction = defaultFunction;\n    service.discountDetails = discountDetails;\n    turnOnOverlay(discountMethod);\n  };\n  service.applyDiscountReason = function (discountReason) {\n    $timeout(function () {\n      service.discountMethod(service.discountToApply, discountReason, service.discountDetails);\n      service.lineDefaultFunction();\n      service.overlay = false;\n      service.receiptDiscountOverlay = false;\n    });\n  };\n  service.getFilteredDiscountReasons = function (lineDisciount, percentageDiscount) {\n    if (lineDisciount) {\n      if (percentageDiscount) return service.items.filter(function (x) {\n        return x.discountTypeSelection !== 2;\n      });\n      return service.items.filter(function (x) {\n        return x.discountTypeSelection !== 1;\n      });\n    }\n    if (percentageDiscount) return service.receiptReasonItems.filter(function (x) {\n      return x.discountTypeSelection !== 2;\n    });\n    return service.receiptReasonItems.filter(function (x) {\n      return x.discountTypeSelection !== 1;\n    });\n  };\n\n  // Since dealing with two unsynced backends, it checks if posConfig has discountReasons for receipts\n  // and uses them if available. If not, it falls back on using the older single array of discountReasons\n  function turnOnOverlay(discountMethod) {\n    if (service.receiptReasonItems.length && discountMethod == receipt.setDiscountOnAll) {\n      service.receiptDiscountOverlay = true;\n    } else {\n      service.overlay = true;\n    }\n  }\n  function loadConfig() {\n    service.items = posConfig.getDiscountReasons();\n    service.receiptReasonItems = posConfig.getReceiptDiscountReasons();\n  }\n  eventBus.subscribe(eventBus.events.pos.newConfig, null, loadConfig);\n  return service;\n});\n","\"use strict\";\n\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _regeneratorRuntime() { \"use strict\"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return r; }; var t, r = {}, e = Object.prototype, n = e.hasOwnProperty, o = \"function\" == typeof Symbol ? Symbol : {}, i = o.iterator || \"@@iterator\", a = o.asyncIterator || \"@@asyncIterator\", u = o.toStringTag || \"@@toStringTag\"; function c(t, r, e, n) { return Object.defineProperty(t, r, { value: e, enumerable: !n, configurable: !n, writable: !n }); } try { c({}, \"\"); } catch (t) { c = function c(t, r, e) { return t[r] = e; }; } function h(r, e, n, o) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype); return c(a, \"_invoke\", function (r, e, n) { var o = 1; return function (i, a) { if (3 === o) throw Error(\"Generator is already running\"); if (4 === o) { if (\"throw\" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var u = n.delegate; if (u) { var c = d(u, n); if (c) { if (c === f) continue; return c; } } if (\"next\" === n.method) n.sent = n._sent = n.arg;else if (\"throw\" === n.method) { if (1 === o) throw o = 4, n.arg; n.dispatchException(n.arg); } else \"return\" === n.method && n.abrupt(\"return\", n.arg); o = 3; var h = s(r, e, n); if (\"normal\" === h.type) { if (o = n.done ? 4 : 2, h.arg === f) continue; return { value: h.arg, done: n.done }; } \"throw\" === h.type && (o = 4, n.method = \"throw\", n.arg = h.arg); } }; }(r, n, new Context(o || [])), !0), a; } function s(t, r, e) { try { return { type: \"normal\", arg: t.call(r, e) }; } catch (t) { return { type: \"throw\", arg: t }; } } r.wrap = h; var f = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var l = {}; c(l, i, function () { return this; }); var p = Object.getPrototypeOf, y = p && p(p(x([]))); y && y !== e && n.call(y, i) && (l = y); var v = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(l); function g(t) { [\"next\", \"throw\", \"return\"].forEach(function (r) { c(t, r, function (t) { return this._invoke(r, t); }); }); } function AsyncIterator(t, r) { function e(o, i, a, u) { var c = s(t[o], t, i); if (\"throw\" !== c.type) { var h = c.arg, f = h.value; return f && \"object\" == _typeof(f) && n.call(f, \"__await\") ? r.resolve(f.__await).then(function (t) { e(\"next\", t, a, u); }, function (t) { e(\"throw\", t, a, u); }) : r.resolve(f).then(function (t) { h.value = t, a(h); }, function (t) { return e(\"throw\", t, a, u); }); } u(c.arg); } var o; c(this, \"_invoke\", function (t, n) { function i() { return new r(function (r, o) { e(t, n, r, o); }); } return o = o ? o.then(i, i) : i(); }, !0); } function d(r, e) { var n = e.method, o = r.i[n]; if (o === t) return e.delegate = null, \"throw\" === n && r.i[\"return\"] && (e.method = \"return\", e.arg = t, d(r, e), \"throw\" === e.method) || \"return\" !== n && (e.method = \"throw\", e.arg = new TypeError(\"The iterator does not provide a '\" + n + \"' method\")), f; var i = s(o, r.i, e.arg); if (\"throw\" === i.type) return e.method = \"throw\", e.arg = i.arg, e.delegate = null, f; var a = i.arg; return a ? a.done ? (e[r.r] = a.value, e.next = r.n, \"return\" !== e.method && (e.method = \"next\", e.arg = t), e.delegate = null, f) : a : (e.method = \"throw\", e.arg = new TypeError(\"iterator result is not an object\"), e.delegate = null, f); } function w(t) { this.tryEntries.push(t); } function m(r) { var e = r[4] || {}; e.type = \"normal\", e.arg = t, r[4] = e; } function Context(t) { this.tryEntries = [[-1]], t.forEach(w, this), this.reset(!0); } function x(r) { if (null != r) { var e = r[i]; if (e) return e.call(r); if (\"function\" == typeof r.next) return r; if (!isNaN(r.length)) { var o = -1, a = function e() { for (; ++o < r.length;) if (n.call(r, o)) return e.value = r[o], e.done = !1, e; return e.value = t, e.done = !0, e; }; return a.next = a; } } throw new TypeError(_typeof(r) + \" is not iterable\"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, c(v, \"constructor\", GeneratorFunctionPrototype), c(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction), GeneratorFunction.displayName = c(GeneratorFunctionPrototype, u, \"GeneratorFunction\"), r.isGeneratorFunction = function (t) { var r = \"function\" == typeof t && t.constructor; return !!r && (r === GeneratorFunction || \"GeneratorFunction\" === (r.displayName || r.name)); }, r.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, c(t, u, \"GeneratorFunction\")), t.prototype = Object.create(v), t; }, r.awrap = function (t) { return { __await: t }; }, g(AsyncIterator.prototype), c(AsyncIterator.prototype, a, function () { return this; }), r.AsyncIterator = AsyncIterator, r.async = function (t, e, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(h(t, e, n, o), i); return r.isGeneratorFunction(e) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, g(v), c(v, u, \"Generator\"), c(v, i, function () { return this; }), c(v, \"toString\", function () { return \"[object Generator]\"; }), r.keys = function (t) { var r = Object(t), e = []; for (var n in r) e.unshift(n); return function t() { for (; e.length;) if ((n = e.pop()) in r) return t.value = n, t.done = !1, t; return t.done = !0, t; }; }, r.values = x, Context.prototype = { constructor: Context, reset: function reset(r) { if (this.prev = this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = \"next\", this.arg = t, this.tryEntries.forEach(m), !r) for (var e in this) \"t\" === e.charAt(0) && n.call(this, e) && !isNaN(+e.slice(1)) && (this[e] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0][4]; if (\"throw\" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(r) { if (this.done) throw r; var e = this; function n(t) { a.type = \"throw\", a.arg = r, e.next = t; } for (var o = e.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i[4], u = this.prev, c = i[1], h = i[2]; if (-1 === i[0]) return n(\"end\"), !1; if (!c && !h) throw Error(\"try statement without catch or finally\"); if (null != i[0] && i[0] <= u) { if (u < c) return this.method = \"next\", this.arg = t, n(c), !0; if (u < h) return n(h), !1; } } }, abrupt: function abrupt(t, r) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var n = this.tryEntries[e]; if (n[0] > -1 && n[0] <= this.prev && this.prev < n[2]) { var o = n; break; } } o && (\"break\" === t || \"continue\" === t) && o[0] <= r && r <= o[2] && (o = null); var i = o ? o[4] : {}; return i.type = t, i.arg = r, o ? (this.method = \"next\", this.next = o[2], f) : this.complete(i); }, complete: function complete(t, r) { if (\"throw\" === t.type) throw t.arg; return \"break\" === t.type || \"continue\" === t.type ? this.next = t.arg : \"return\" === t.type ? (this.rval = this.arg = t.arg, this.method = \"return\", this.next = \"end\") : \"normal\" === t.type && r && (this.next = r), f; }, finish: function finish(t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[2] === t) return this.complete(e[4], e[3]), m(e), f; } }, \"catch\": function _catch(t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[0] === t) { var n = e[4]; if (\"throw\" === n.type) { var o = n.arg; m(e); } return o; } } throw Error(\"illegal catch attempt\"); }, delegateYield: function delegateYield(r, e, n) { return this.delegate = { i: x(r), r: e, n: n }, \"next\" === this.method && (this.arg = t), f; } }, r; }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"next\", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"throw\", n); } _next(void 0); }); }; }\npos.controller(\"FindReceiptCtrl\", function ($scope, sales, backend, $state, $translate, posConfig, receipt, receiptHelper, posStorage, keypadManager, returnReasons, eventBus, cashStatements, notification, giftsService, webOrderWidgetService, returnReceiptService) {\n  var PAGE_SIZE = 100;\n  var currentSkip = 0;\n  var currentPage = 0;\n  var selectedIndex = -1;\n  loadConfig();\n  $scope.receiptHelper = receiptHelper;\n  $scope.printTranslations = posStorage.get(\"printTranslations\");\n  $scope.receipts = [];\n  $scope.currentCashStatement = null;\n  $scope.runningProcess = false;\n  $scope.selectedReceipt = null;\n  $scope.items = null;\n  $scope.apiOnline = backend.isOnline;\n  $scope.vatPersentage = [];\n  $scope.$on(\"device:offline\", function (event, device) {\n    $scope.apiOnline = false;\n  });\n  $scope.$on(\"device:retry:success\", function (event, device) {\n    $scope.apiOnline = true;\n  });\n  var emailRegex = /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\n  $scope.selectLine = function (index, receipt) {\n    $scope.vatPersentage = receiptHelper.getReceiptVatTotal(receipt);\n    if (selectedIndex === index) {\n      selectedIndex = -1;\n      return;\n    }\n    selectedIndex = index;\n    if (receipt.transactionType == \"CashStatement\") {\n      getCashStatement(receipt.posId, receipt.receiptId);\n    }\n  };\n  $scope.selectedLineIndex = function () {\n    return selectedIndex;\n  };\n  $scope.isSelected = function (index) {\n    return selectedIndex === index;\n  };\n  $scope.getConnectorName = function (id) {\n    var connector = backend.getDeviceById(id);\n    return connector ? connector.deviceName : id;\n  };\n  $scope.printCopy = function (receipt) {\n    if ($scope.runningProcess) return;\n    $scope.runningProcess = true;\n    sales.printReceiptCopy(angular.copy(receipt), true).then(function () {\n      return $state.go(\"root.login\");\n    })[\"catch\"](/*#__PURE__*/function () {\n      var _ref = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee(err) {\n        var translation;\n        return _regeneratorRuntime().wrap(function _callee$(_context) {\n          while (1) switch (_context.prev = _context.next) {\n            case 0:\n              _context.next = 2;\n              return $translate(err);\n            case 2:\n              translation = _context.sent;\n              notification.pop(\"warn\", translation);\n              $scope.runningProcess = false;\n            case 5:\n            case \"end\":\n              return _context.stop();\n          }\n        }, _callee);\n      }));\n      return function (_x) {\n        return _ref.apply(this, arguments);\n      };\n    }());\n  };\n  $scope.returnReceipt = /*#__PURE__*/function () {\n    var _ref2 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee2(loadedReceipt) {\n      return _regeneratorRuntime().wrap(function _callee2$(_context2) {\n        while (1) switch (_context2.prev = _context2.next) {\n          case 0:\n            if (!$scope.runningProcess) {\n              _context2.next = 2;\n              break;\n            }\n            return _context2.abrupt(\"return\");\n          case 2:\n            returnReceiptService.showReturnModal(loadedReceipt);\n          case 3:\n          case \"end\":\n            return _context2.stop();\n        }\n      }, _callee2);\n    }));\n    return function (_x2) {\n      return _ref2.apply(this, arguments);\n    };\n  }();\n  $scope.printGiftCopy = function (receipt) {\n    if ($scope.runningProcess) return;\n    $scope.runningProcess = true;\n    giftsService.printGiftDocumentation(receipt, receipt.uuid, true).then(function () {\n      return $scope.runningProcess = false;\n    });\n  };\n  $scope.initGiftCopy = function (receipt) {\n    giftsService.getGiftExchanges(receipt, receipt.uuid, true).then(function (result) {\n      console.log(result, result.count, result.length);\n      receipt.giftCopyInfo = result; // object from backend\n    })[\"catch\"](function (err) {\n      console.error(err);\n    });\n  };\n  $scope.resendEmailReceiptModal = {\n    title: \"find-receipt/resend-email/title\",\n    description: \"find-receipt/resend-email/description\",\n    descriptionPlaceholderValues: {},\n    isVisible: false,\n    validationPattern: emailRegex,\n    patternErrorMessage: $scope.i18nErrorEmailFormat,\n    hasTextInput: true,\n    buttons: [{\n      label: \"find-receipt/resend-email/btn-cancel-send\",\n      type: \"default\",\n      isDefault: false,\n      closes: true,\n      validateText: false,\n      action: function action() {\n        $scope.runningProcess = false;\n      }\n    }, {\n      label: \"find-receipt/resend-email/btn-send-email\",\n      type: \"success\",\n      isDefault: true,\n      closes: true,\n      validateText: true,\n      action: function () {\n        var _action = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee3(text) {\n          var i18nEmailSent, i18nInvalidEmail;\n          return _regeneratorRuntime().wrap(function _callee3$(_context3) {\n            while (1) switch (_context3.prev = _context3.next) {\n              case 0:\n                if (!emailRegex.test(text)) {\n                  _context3.next = 9;\n                  break;\n                }\n                sales.emailReceipt(text, $scope.selectedReceipt, true);\n                $scope.runningProcess = false;\n                _context3.next = 5;\n                return $translate(\"find-receipt/resend-email/email-was-sent\", {\n                  email: text\n                });\n              case 5:\n                i18nEmailSent = _context3.sent;\n                notification.pop(\"info\", i18nEmailSent);\n                _context3.next = 14;\n                break;\n              case 9:\n                $scope.runningProcess = false;\n                _context3.next = 12;\n                return $translate(\"find-receipt/resend-email/invalidEmail\");\n              case 12:\n                i18nInvalidEmail = _context3.sent;\n                notification.pop(\"warn\", i18nInvalidEmail);\n              case 14:\n              case \"end\":\n                return _context3.stop();\n            }\n          }, _callee3);\n        }));\n        function action(_x3) {\n          return _action.apply(this, arguments);\n        }\n        return action;\n      }()\n    }]\n  };\n  $scope.emailReceiptCopy = function (receipt) {\n    if ($scope.runningProcess || !$scope.apiOnline) return;\n    $scope.runningProcess = true;\n    $scope.resendEmailReceiptModal.isVisible = true;\n    $scope.selectedReceipt = receipt;\n  };\n  $scope.weborderModal = webOrderWidgetService.getWeborderModal(\"dispatch\");\n  $scope.returnModal = returnReceiptService.getReturnModal();\n  $scope.showWebOrderModal = function (receipt) {\n    webOrderWidgetService.showWebOrderModalFromReceipt(receipt);\n  };\n  $scope.showDispatchNoteButton = function (receipt) {\n    return webOrderWidgetService.showDispatchNoteButton(receipt);\n  };\n  $scope.search = function () {\n    $scope.showFilters = false;\n    currentPage = 0;\n    $scope.receipts.length = 0;\n    $scope.vatPersentage.length = 0;\n    $scope.fetchMore();\n  };\n  $scope.fetchMore = function () {\n    keypadManager.hide();\n    getReceipts($scope.filter.from, $scope.filter.to, $scope.filter.filter, $scope.filter.searchAllShops, PAGE_SIZE);\n  };\n  $scope.getStringSafe = function (variable) {\n    return typeof variable === \"string\" ? variable.trim() : \"\";\n  };\n  $scope.constructReceiptId = function (receiptObject) {\n    return receipt.constructReceiptId(receiptObject);\n  };\n  $scope.totalItems = function (receipt) {\n    return receipt.items.reduce(function (sum, item) {\n      return sum + item.quantity;\n    }, 0);\n  };\n  $scope.showItemDiscount = function (item) {\n    return !receiptHelper.getLineDiscountPct(item).isZero();\n  };\n  $scope.itemDiscount = function (item) {\n    return receiptHelper.getLineDiscountPct(item);\n  };\n  $scope.showReceiptDiscount = function (receipt) {\n    var totalDiscount = receiptHelper.getReceiptTotalDiscount(receipt);\n    return !totalDiscount.isZero() && !totalDiscount.isNeg();\n  };\n  $scope.filter = {\n    from: moment().subtract(1, \"years\").format(\"YYYY-MM-DD\"),\n    to: moment().format(\"YYYY-MM-DD\"),\n    filter: \"\"\n  };\n  $scope.getTotalGroup = function (group) {\n    return Object.keys(group).map(function (key) {\n      return group[key];\n    }).map(function (value) {\n      return value.amount;\n    }).reduce(function (prev, curr) {\n      return prev + curr;\n    }, 0);\n  };\n  $scope.getTotalCashSale = function () {\n    return Object.keys($scope.currentCashStatement.cashSales).map(function (key) {\n      return $scope.currentCashStatement.cashSales[key];\n    }).reduce(function (prev, curr) {\n      return prev + curr;\n    }, 0);\n  };\n  $scope.calculateExpectedInDrawer = function () {\n    var totalCashSale = $scope.getTotalCashSale();\n    var morningAmount = $scope.getTotalGroup($scope.currentCashStatement.morning);\n    return totalCashSale + morningAmount;\n  };\n  $scope.getShopLocalCurrency = function () {\n    return posConfig.getLocalCurrency().currencyCode;\n  };\n  $scope.calculateTotalInDrawer = function () {\n    var eveningAmount = $scope.getTotalGroup($scope.currentCashStatement.evening);\n    var insertedInBank = $scope.getTotalGroup($scope.currentCashStatement.bankCash);\n    return eveningAmount + insertedInBank;\n  };\n  $scope.printCashStatementCopy = function () {\n    if ($scope.currentCashStatement) {\n      cashStatements.reprintCashStatement($scope.currentCashStatement.dailyClosure);\n    }\n  };\n  $scope.getTransactionType = function (receipt) {\n    if (receipt.fluctuatingProperties) if (receipt.fluctuatingProperties.isBooking) return \"Booking\";\n    return receipt.transactionType;\n  };\n  $scope.getPaymentDescription = function (receipt, payment) {\n    if (payment.paymentType === \"DownPayment\") return \"Down Payment\";\n    return receiptHelper.getLineInfo(payment);\n  };\n  init();\n  function getReceipts(_x4, _x5, _x6, _x7, _x8) {\n    return _getReceipts.apply(this, arguments);\n  }\n  function _getReceipts() {\n    _getReceipts = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee4(from, to, filter, allShops, pageSize) {\n      var response;\n      return _regeneratorRuntime().wrap(function _callee4$(_context4) {\n        while (1) switch (_context4.prev = _context4.next) {\n          case 0:\n            _context4.next = 2;\n            return sales.getReceipts(from, to, filter, !!allShops, pageSize, ++currentPage, $scope.$stateParams.customerNo, true);\n          case 2:\n            response = _context4.sent;\n            response = response.data.map(receipt.decimalifyReceipt).forEach(function (r) {\n              return $scope.receipts.push(r);\n            });\n          case 4:\n          case \"end\":\n            return _context4.stop();\n        }\n      }, _callee4);\n    }));\n    return _getReceipts.apply(this, arguments);\n  }\n  function init() {\n    return _init.apply(this, arguments);\n  }\n  function _init() {\n    _init = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee5() {\n      var translations;\n      return _regeneratorRuntime().wrap(function _callee5$(_context5) {\n        while (1) switch (_context5.prev = _context5.next) {\n          case 0:\n            $scope.fetchMore();\n            _context5.next = 3;\n            return $translate([\"label/noItemsReceipt\", \"label/oneItemReceipt\", \"label/otherItemsReceipt\", \"toast/error_emailformat\"]);\n          case 3:\n            translations = _context5.sent;\n            $scope.i18nNoItems = translations[\"label/noItemsReceipt\"];\n            $scope.i18nOne = translations[\"label/oneItemReceipt\"];\n            $scope.i18nOther = translations[\"label/otherItemsReceipt\"];\n            $scope.i18nErrorEmailFormat = translations[\"toast/error_emailformat\"];\n          case 8:\n          case \"end\":\n            return _context5.stop();\n        }\n      }, _callee5);\n    }));\n    return _init.apply(this, arguments);\n  }\n  function getCashStatement(_x9, _x0) {\n    return _getCashStatement.apply(this, arguments);\n  }\n  function _getCashStatement() {\n    _getCashStatement = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee6(posId, receiptId) {\n      var response;\n      return _regeneratorRuntime().wrap(function _callee6$(_context6) {\n        while (1) switch (_context6.prev = _context6.next) {\n          case 0:\n            $scope.currentCashStatement = null;\n            _context6.next = 3;\n            return cashStatements.getCashStatement(posId, receiptId);\n          case 3:\n            response = _context6.sent;\n            $scope.currentCashStatement = response.data;\n          case 5:\n          case \"end\":\n            return _context6.stop();\n        }\n      }, _callee6);\n    }));\n    return _getCashStatement.apply(this, arguments);\n  }\n  function loadConfig() {\n    $scope.cashStatementTranslations = posConfig.cashStatementTranslations;\n    $scope.emailReceiptConfiguration = posConfig.getOptions().askEmailReceipt;\n    $scope.noteConfiguration = posConfig.noteConfiguration;\n  }\n  eventBus.subscribe(eventBus.events.pos.newConfig, $scope, loadConfig);\n});\n","\"use strict\";\n\npos.factory(\"labelTemplates\", function (posConfig, $q, eventBus) {\n  \"use strict\";\n\n  var service = {};\n  loadConfig();\n  service.overlay = false;\n  var labelTemplateDeffered;\n  service.selectLabelTemplate = function () {\n    labelTemplateDeffered = $q.defer();\n    var promise = labelTemplateDeffered.promise;\n    if (service.hasLabelTemplates() && service.items.length > 1) {\n      service.overlay = true;\n    } else {\n      labelTemplateDeffered.resolve(service.items[0]);\n      labelTemplateDeffered = null;\n    }\n    return promise;\n  };\n  service.printLabelTemplate = function (labelTemplate) {\n    service.overlay = false;\n    if (labelTemplateDeffered) {\n      labelTemplateDeffered.resolve(labelTemplate);\n      labelTemplateDeffered = null;\n    }\n  };\n  service.hasLabelTemplates = function () {\n    return service.items && service.items.length > 0;\n  };\n  service.dismissed = function () {\n    service.overlay = false;\n    if (labelTemplateDeffered) {\n      labelTemplateDeffered.reject();\n      labelTemplateDeffered = null;\n    }\n  };\n  function loadConfig() {\n    service.items = posConfig.getLabelTemplates();\n  }\n  eventBus.subscribe(eventBus.events.pos.newConfig, null, loadConfig);\n  return service;\n});\n","\"use strict\";\n\npos.controller(\"ParkedReceiptsCtrl\", function ($scope, receipt, notification, $translate, posConfig, receiptHelper, posStorage, clerkLoginService, eventBus) {\n  init();\n  var selectedIndex = -1;\n  var i18nParkedReceipt;\n  var clerks = {};\n  loadConfig();\n  $scope.receiptHelper = receiptHelper;\n  $scope.printTranslations = posStorage.get(\"printTranslations\");\n  $translate([\"label/noItemsReceipt\", \"label/oneItemReceipt\", \"toast/parked note\"]).then(function (translations) {\n    $scope.i18nNoItems = translations[\"label/noItemsReceipt\"];\n    $scope.i18nOne = translations[\"label/oneItemReceipt\"];\n    i18nParkedReceipt = translations[\"toast/parked note\"];\n  });\n  $translate(\"label/otherItemsReceipt\", {\n    u: \"{}\"\n  }).then(function (translation) {\n    $scope.i18nOther = translation;\n  });\n  $scope.selectLine = function (index) {\n    if (selectedIndex === index) {\n      selectedIndex = -1;\n      return;\n    }\n    selectedIndex = index;\n  };\n  $scope.selectedLineIndex = function () {\n    return selectedIndex;\n  };\n  $scope.isSelected = function (index) {\n    return selectedIndex === index;\n  };\n  $scope.getClerkName = function (id) {\n    return _.isObject(clerks[id]) ? clerks[id].firstName : clerks[id];\n  };\n  $scope.getStringSafe = function (variable) {\n    return typeof variable === \"string\" ? variable : \"\";\n  };\n  $scope.totalItems = function (receipt) {\n    return receipt.items.reduce(function (sum, item) {\n      return sum + item.quantity;\n    }, 0);\n  };\n  $scope.showReceiptDiscount = function (receipt) {\n    var totalDiscount = receiptHelper.getReceiptTotalDiscount(receipt);\n    return !totalDiscount.isZero() && !totalDiscount.isNeg();\n  };\n  function init() {\n    receipt.getParkedReceipts().then(function (response) {\n      if (!response.data) return;\n      angular.forEach(response.data, function (receiptBox) {\n        receiptBox.receipt = receipt.decimalifyReceipt(receiptBox.receipt);\n        putToClerkDictionary(receiptBox.receipt.clerk);\n      });\n      $scope.receiptsBoxes = response.data;\n    });\n  }\n  function putToClerkDictionary(clerkId) {\n    clerks[clerkId] = clerkId;\n    clerkLoginService.getClerk(clerkId).then(function (clerk) {\n      clerks[clerkId] = clerk;\n    });\n  }\n  $scope.loadReceipt = function (receiptBox) {\n    if (!receipt.isEmpty()) return notification.pop(\"warning\", i18nParkedReceipt);\n    receiptBox.receipt.date = new Date();\n    receipt.loadReceipt(receiptBox.receipt);\n    receipt.deleteParkedReceipt(receiptBox.id);\n    $scope.$state.go(\"root.split.pos\");\n  };\n  $scope.deleteParkedNote = function (receiptBox) {\n    receipt.deleteParkedReceipt(receiptBox.id).then(init);\n  };\n  function loadConfig() {\n    $scope.noteConfiguration = posConfig.noteConfiguration;\n  }\n  eventBus.subscribe(eventBus.events.pos.newConfig, $scope, loadConfig);\n});\n","\"use strict\";\n\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _regeneratorRuntime() { \"use strict\"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return r; }; var t, r = {}, e = Object.prototype, n = e.hasOwnProperty, o = \"function\" == typeof Symbol ? Symbol : {}, i = o.iterator || \"@@iterator\", a = o.asyncIterator || \"@@asyncIterator\", u = o.toStringTag || \"@@toStringTag\"; function c(t, r, e, n) { return Object.defineProperty(t, r, { value: e, enumerable: !n, configurable: !n, writable: !n }); } try { c({}, \"\"); } catch (t) { c = function c(t, r, e) { return t[r] = e; }; } function h(r, e, n, o) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype); return c(a, \"_invoke\", function (r, e, n) { var o = 1; return function (i, a) { if (3 === o) throw Error(\"Generator is already running\"); if (4 === o) { if (\"throw\" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var u = n.delegate; if (u) { var c = d(u, n); if (c) { if (c === f) continue; return c; } } if (\"next\" === n.method) n.sent = n._sent = n.arg;else if (\"throw\" === n.method) { if (1 === o) throw o = 4, n.arg; n.dispatchException(n.arg); } else \"return\" === n.method && n.abrupt(\"return\", n.arg); o = 3; var h = s(r, e, n); if (\"normal\" === h.type) { if (o = n.done ? 4 : 2, h.arg === f) continue; return { value: h.arg, done: n.done }; } \"throw\" === h.type && (o = 4, n.method = \"throw\", n.arg = h.arg); } }; }(r, n, new Context(o || [])), !0), a; } function s(t, r, e) { try { return { type: \"normal\", arg: t.call(r, e) }; } catch (t) { return { type: \"throw\", arg: t }; } } r.wrap = h; var f = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var l = {}; c(l, i, function () { return this; }); var p = Object.getPrototypeOf, y = p && p(p(x([]))); y && y !== e && n.call(y, i) && (l = y); var v = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(l); function g(t) { [\"next\", \"throw\", \"return\"].forEach(function (r) { c(t, r, function (t) { return this._invoke(r, t); }); }); } function AsyncIterator(t, r) { function e(o, i, a, u) { var c = s(t[o], t, i); if (\"throw\" !== c.type) { var h = c.arg, f = h.value; return f && \"object\" == _typeof(f) && n.call(f, \"__await\") ? r.resolve(f.__await).then(function (t) { e(\"next\", t, a, u); }, function (t) { e(\"throw\", t, a, u); }) : r.resolve(f).then(function (t) { h.value = t, a(h); }, function (t) { return e(\"throw\", t, a, u); }); } u(c.arg); } var o; c(this, \"_invoke\", function (t, n) { function i() { return new r(function (r, o) { e(t, n, r, o); }); } return o = o ? o.then(i, i) : i(); }, !0); } function d(r, e) { var n = e.method, o = r.i[n]; if (o === t) return e.delegate = null, \"throw\" === n && r.i[\"return\"] && (e.method = \"return\", e.arg = t, d(r, e), \"throw\" === e.method) || \"return\" !== n && (e.method = \"throw\", e.arg = new TypeError(\"The iterator does not provide a '\" + n + \"' method\")), f; var i = s(o, r.i, e.arg); if (\"throw\" === i.type) return e.method = \"throw\", e.arg = i.arg, e.delegate = null, f; var a = i.arg; return a ? a.done ? (e[r.r] = a.value, e.next = r.n, \"return\" !== e.method && (e.method = \"next\", e.arg = t), e.delegate = null, f) : a : (e.method = \"throw\", e.arg = new TypeError(\"iterator result is not an object\"), e.delegate = null, f); } function w(t) { this.tryEntries.push(t); } function m(r) { var e = r[4] || {}; e.type = \"normal\", e.arg = t, r[4] = e; } function Context(t) { this.tryEntries = [[-1]], t.forEach(w, this), this.reset(!0); } function x(r) { if (null != r) { var e = r[i]; if (e) return e.call(r); if (\"function\" == typeof r.next) return r; if (!isNaN(r.length)) { var o = -1, a = function e() { for (; ++o < r.length;) if (n.call(r, o)) return e.value = r[o], e.done = !1, e; return e.value = t, e.done = !0, e; }; return a.next = a; } } throw new TypeError(_typeof(r) + \" is not iterable\"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, c(v, \"constructor\", GeneratorFunctionPrototype), c(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction), GeneratorFunction.displayName = c(GeneratorFunctionPrototype, u, \"GeneratorFunction\"), r.isGeneratorFunction = function (t) { var r = \"function\" == typeof t && t.constructor; return !!r && (r === GeneratorFunction || \"GeneratorFunction\" === (r.displayName || r.name)); }, r.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, c(t, u, \"GeneratorFunction\")), t.prototype = Object.create(v), t; }, r.awrap = function (t) { return { __await: t }; }, g(AsyncIterator.prototype), c(AsyncIterator.prototype, a, function () { return this; }), r.AsyncIterator = AsyncIterator, r.async = function (t, e, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(h(t, e, n, o), i); return r.isGeneratorFunction(e) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, g(v), c(v, u, \"Generator\"), c(v, i, function () { return this; }), c(v, \"toString\", function () { return \"[object Generator]\"; }), r.keys = function (t) { var r = Object(t), e = []; for (var n in r) e.unshift(n); return function t() { for (; e.length;) if ((n = e.pop()) in r) return t.value = n, t.done = !1, t; return t.done = !0, t; }; }, r.values = x, Context.prototype = { constructor: Context, reset: function reset(r) { if (this.prev = this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = \"next\", this.arg = t, this.tryEntries.forEach(m), !r) for (var e in this) \"t\" === e.charAt(0) && n.call(this, e) && !isNaN(+e.slice(1)) && (this[e] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0][4]; if (\"throw\" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(r) { if (this.done) throw r; var e = this; function n(t) { a.type = \"throw\", a.arg = r, e.next = t; } for (var o = e.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i[4], u = this.prev, c = i[1], h = i[2]; if (-1 === i[0]) return n(\"end\"), !1; if (!c && !h) throw Error(\"try statement without catch or finally\"); if (null != i[0] && i[0] <= u) { if (u < c) return this.method = \"next\", this.arg = t, n(c), !0; if (u < h) return n(h), !1; } } }, abrupt: function abrupt(t, r) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var n = this.tryEntries[e]; if (n[0] > -1 && n[0] <= this.prev && this.prev < n[2]) { var o = n; break; } } o && (\"break\" === t || \"continue\" === t) && o[0] <= r && r <= o[2] && (o = null); var i = o ? o[4] : {}; return i.type = t, i.arg = r, o ? (this.method = \"next\", this.next = o[2], f) : this.complete(i); }, complete: function complete(t, r) { if (\"throw\" === t.type) throw t.arg; return \"break\" === t.type || \"continue\" === t.type ? this.next = t.arg : \"return\" === t.type ? (this.rval = this.arg = t.arg, this.method = \"return\", this.next = \"end\") : \"normal\" === t.type && r && (this.next = r), f; }, finish: function finish(t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[2] === t) return this.complete(e[4], e[3]), m(e), f; } }, \"catch\": function _catch(t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[0] === t) { var n = e[4]; if (\"throw\" === n.type) { var o = n.arg; m(e); } return o; } } throw Error(\"illegal catch attempt\"); }, delegateYield: function delegateYield(r, e, n) { return this.delegate = { i: x(r), r: e, n: n }, \"next\" === this.method && (this.arg = t), f; } }, r; }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"next\", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"throw\", n); } _next(void 0); }); }; }\npos.controller(\"ReceiptCtrl\", function ($scope, $state, $log, receipt, notification, $translate, articles, keypadManager, posConfig, $timeout, discountReasons, returnReasons, paymentService, $q, inputValidationService, $rootScope, quaggaService, eventBus, selectDimensionComboService, clerkLoginService, returnReceiptService, fluctuatingPropertiesHelper, discountOptionsService, voucherService, itemInfoService, backend) {\n  \"use strict\";\n\n  $log.debug(\"Creating ReceiptCtrl\");\n  $scope.buttonStatesList = $scope.buttonStatesList || {};\n  var defaultFunction = \"addToReceipt\";\n  var activeFunction;\n  var eventHandlers = [];\n  $scope.forceNumpad = true;\n  $scope.quaggaScanner = false;\n  var awaitingResponses = [];\n  $rootScope.showGiftAidModal = true;\n  $scope.discount10 = 10;\n  $scope.discount20 = 20;\n  $scope.selectedReasonCodes = [];\n  $scope.enableSerialNumberTracking = posConfig.tenantGeneralPosSettings.enableSerialNumberTracking;\n  var i18nNonEmptyReceipt, i18nInvalidReceiptNumber, i18nInvalidBarcode, i18nNoMoreDiscount, i18nEnterBarcode, i18nDiscountLt100, i18nAmountLtProduct, i18nInRange, i18nLineNewPrice, i18nTotalNewPrice, i18nTotalPct, i18nTotalAmount, i18nEnterAmount, i18nEnterDiscount, i18nEnterText, i18nProperAmount, i18nProperAmountPercent, i18nProperAmountNull, i18nExpenseLine, i18nInvalidClerkId, i18nEnterClerkId, i18nConfirmSetDeletion, i18nEnterQuantity, i18nPleaseWait, i18nUnableToCancelTitle, i18nUnableToCancelBody, i18nInputToCancelPlaceholder, i18nMaxQtyExceeded, i18nMaxAmountExceeded, i18nReturnReasonError, i18nChangeExpiryPeriod, i18nBeAware, i18nExchangeLabelUsed, i18nExchangeLabelExpired, i18nManagerVerificationDenied, i18alreadyScanned, i18nYesAnswer, i18nScanSerialNumber, i18nSerialNumberDoesNotMatchVariantId, i18nSerialNumberDoesNotMatchMask, i18nPromtForPriceWarning;\n  $translate([\"toast/invalid discount barcode\", \"toast/old receipt\", \"toast/invalid receipt\", \"toast/non empty receipt\", \"toast/unknown ean\", \"toast/no more discount\", \"input/enter_barcode\", \"toast/discount less than 100\", \"toast/amount less than product\", \"toast/in range\", \"toast/need ean\", \"button/line new price\", \"button/total new price\", \"button/total %\", \"button/total amount\", \"input/enter_amount\", \"label/discount\", \"button/text\", \"toast/proper amount\", \"toast/proper amount percent\", \"toast/proper amount null\", \"toast/expenseline\", \"toast/invalidclerkid\", \"input/enter_clerkid\", \"receipt/deleteEntireSet\", \"input/enter_quantity\", \"toast/pleasewait\", \"toast/unabletocanceltitle\", \"toast/unabletocancelbody\", \"placeholder/inputtocancel\", \"toast/maxQuantityExceeded\", \"toast/maxAmountExceeded\", \"returnReasons/error\", \"label/enter-new-expiry-period\", \"toast/please_be_aware\", \"toast/exchange_label_used\", \"toast/exchange_label_expired\", \"manager/verification/denied\", \"receiptItem/toast/promtForpriceInvalidInput\", \"toast/serialized-item-already-scanned\", \"label/yes\", \"label/scan-enter-serial-number\", \"toast/serial-number-does-not-match-variantId\", \"label/serialNumberDoesNotMatchConfiguredMask\"]).then(function (translations) {\n    i18nInvalidReceiptNumber = translations[\"toast/invalid receipt\"];\n    i18nNonEmptyReceipt = translations[\"toast/non empty receipt\"];\n    i18nInvalidBarcode = translations[\"toast/unknown ean\"];\n    i18nNoMoreDiscount = translations[\"toast/no more discount\"];\n    i18nEnterBarcode = translations[\"input/enter_barcode\"];\n    i18nDiscountLt100 = translations[\"toast/discount less than 100\"];\n    i18nAmountLtProduct = translations[\"toast/amount less than product\"];\n    i18nInRange = translations[\"toast/in range\"];\n    i18nLineNewPrice = translations[\"button/line new price\"];\n    i18nTotalNewPrice = translations[\"button/total new price\"];\n    i18nTotalPct = translations[\"button/total %\"];\n    i18nTotalAmount = translations[\"button/total amount\"];\n    i18nEnterAmount = translations[\"input/enter_amount\"];\n    i18nEnterDiscount = translations[\"label/discount\"];\n    i18nEnterText = translations[\"button/text\"];\n    i18nProperAmount = translations[\"toast/proper amount\"];\n    i18nProperAmountPercent = translations[\"toast/proper amount percent\"];\n    i18nProperAmountNull = translations[\"toast/proper amount null\"];\n    i18nExpenseLine = translations[\"toast/expenseline\"];\n    i18nInvalidClerkId = translations[\"toast/invalidclerkid\"];\n    i18nEnterClerkId = translations[\"input/enter_clerkid\"];\n    i18nConfirmSetDeletion = translations[\"receipt/deleteEntireSet\"];\n    i18nEnterQuantity = translations[\"input/enter_quantity\"];\n    i18nPleaseWait = translations[\"toast/pleasewait\"];\n    i18nUnableToCancelTitle = translations[\"toast/unabletocanceltitle\"];\n    i18nUnableToCancelBody = translations[\"toast/unabletocancelbody\"];\n    i18nInputToCancelPlaceholder = translations[\"placeholder/inputtocancel\"];\n    i18nMaxQtyExceeded = translations[\"toast/maxQuantityExceeded\"];\n    i18nMaxAmountExceeded = translations[\"toast/maxAmountExceeded\"];\n    i18nReturnReasonError = translations[\"returnReasons/error\"];\n    i18nChangeExpiryPeriod = translations[\"label/enter-new-expiry-period\"];\n    i18nBeAware = translations[\"toast/please_be_aware\"];\n    i18nExchangeLabelUsed = translations[\"toast/exchange_label_used\"];\n    i18nExchangeLabelExpired = translations[\"toast/exchange_label_expired\"];\n    i18nManagerVerificationDenied = translations[\"manager/verification/denied\"];\n    i18nPromtForPriceWarning = translations[\"receiptItem/toast/promtForpriceInvalidInput\"];\n    i18alreadyScanned = translations[\"toast/serialized-item-already-scanned\"];\n    i18nYesAnswer = translations[\"label/yes\"];\n    i18nScanSerialNumber = translations[\"label/scan-enter-serial-number\"];\n    i18nSerialNumberDoesNotMatchVariantId = translations[\"toast/serial-number-does-not-match-variantId\"];\n    i18nSerialNumberDoesNotMatchMask = translations[\"label/serialNumberDoesNotMatchConfiguredMask\"];\n  })[\"finally\"](activateDefaultFunction);\n  this.$onInit = /*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee() {\n    return _regeneratorRuntime().wrap(function _callee$(_context) {\n      while (1) switch (_context.prev = _context.next) {\n        case 0:\n          quaggaService.setCallback($scope.handleInput);\n          eventBus.subscribe(eventBus.events.quagga.disable, $scope, stopQuaggaScanner);\n          eventBus.subscribe(eventBus.events.quagga.enable, $scope, startQuaggaScanner);\n          eventBus.subscribe(eventBus.events.pos.newConfig, $scope, loadConfig);\n          $scope.canShowQtyAdjustments = !eventBus.notify(eventBus.events.pos.showingQty).defaultPrevented;\n          loadConfig();\n          loadDiscountOptions();\n          $scope.selectedReasonCodes = posConfig.getDiscountReasons();\n          itemInfoService.clearItemInfoTransactionData(receipt.getReceipt());\n        case 9:\n        case \"end\":\n          return _context.stop();\n      }\n    }, _callee);\n  }));\n  function startQuaggaScanner() {\n    $scope.quaggaScanner = true;\n    quaggaService.start(\"#quaggaCamera\");\n  }\n  function stopQuaggaScanner() {\n    $scope.quaggaScanner = false;\n    quaggaService.stop();\n  }\n  function loadConfig() {\n    var paymentTypes = posConfig.getPaymentTypeConfigs();\n    $scope.quickCashAvailable = !!paymentTypes.find(function (o) {\n      return o.type === \"Cash\";\n    });\n    $scope.quickCardAvailable = !!paymentTypes.find(function (o) {\n      return o.type === \"ManualCard\";\n    });\n    $scope.quickCashDisabled = IsQuickCashButtonDisabled();\n    $scope.quickCardDisabled = IsQuickCardButtonDisabled();\n    $scope.paymentDisabled = IsPaymentButtonDisabled();\n  }\n  function loadDiscountOptions() {\n    return _loadDiscountOptions.apply(this, arguments);\n  }\n  function _loadDiscountOptions() {\n    _loadDiscountOptions = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee6() {\n      var response, _response$data$, _response$data$2;\n      return _regeneratorRuntime().wrap(function _callee6$(_context6) {\n        while (1) switch (_context6.prev = _context6.next) {\n          case 0:\n            _context6.next = 2;\n            return discountOptionsService.getDiscountOptions();\n          case 2:\n            response = _context6.sent;\n            if (response.data == undefined) {\n              $scope.discount10 = 10;\n              $scope.discount20 = 20;\n            } else {\n              $scope.discount10 = (_response$data$ = response.data[0]) === null || _response$data$ === void 0 ? void 0 : _response$data$.discountAmount;\n              $scope.discount20 = (_response$data$2 = response.data[1]) === null || _response$data$2 === void 0 ? void 0 : _response$data$2.discountAmount;\n            }\n          case 4:\n          case \"end\":\n            return _context6.stop();\n        }\n      }, _callee6);\n    }));\n    return _loadDiscountOptions.apply(this, arguments);\n  }\n  $scope.$watch(receipt.getReceipt, function (newVal) {\n    $scope.items = newVal.items;\n    $scope.payments = newVal.payments;\n    $scope.isReceiptEmpty = $scope.items.length === 0;\n    $scope.quickCashDisabled = IsQuickCashButtonDisabled();\n    $scope.quickCardDisabled = IsQuickCardButtonDisabled();\n    $scope.paymentDisabled = IsPaymentButtonDisabled();\n  }, true);\n  $scope.discountReasons = discountReasons;\n  $scope.returnReasons = returnReasons;\n\n  /**\n   * Returns the total number of receipt items (quantity)\n   *\n   * @returns {bool} result\n   */\n  $scope.totalItems = function () {\n    var childscope = {\n      result: 0,\n      receiptItems: $scope.items\n    };\n    // Iterate through the receipt and catch the quantity of each\n    for (var i = 0; i < childscope.receiptItems.length; i++) {\n      var receiptItem = childscope.receiptItems[i];\n      var quantity = 0;\n      if (receiptItem.templateType != \"downPayment\") {\n        quantity = receiptItem.quantity;\n      }\n\n      // Add quantity to result. If the number is negative, display it as positive.\n      childscope.result += quantity > -1 ? quantity : Math.abs(quantity);\n    }\n    // Return the value as a number, to avoid it being read as a bool\n    return Number(childscope.result);\n  };\n  $scope.$watch(function () {\n    return receipt.getTotalWithoutDownpayment().toString();\n  }, function (newVal) {\n    $scope.receiptTotal = new Decimal(newVal);\n  });\n  if (!receipt.getReceipt()) {\n    receipt.prepareReceipt();\n  }\n  $scope.removeItem = function () {\n    receipt.removeItem();\n  };\n  eventHandlers.push($scope.$on(\"promtForPrice\", function (event, args) {\n    $scope.article = args;\n    toggleButton(\"promtForPrice\", \"enter item price\");\n  }));\n  eventHandlers.push($scope.$on(\"promtForSerialNumber\", function (event, args) {\n    $scope.article = args;\n    toggleButton(\"promtForSerialNumber\", i18nScanSerialNumber);\n  }));\n  eventHandlers.push($scope.$on(\"$stateChangeStart\", function (event, toState, toParams, fromState, fromParams) {\n    var allowedStates = [\"root.login\", \"root.split.payment\"];\n    if (receipt.hasExpenseItems() && allowedStates.indexOf(toState.name) === -1) {\n      event.preventDefault();\n      notification.pop(\"warning\", i18nExpenseLine);\n    }\n  }));\n  eventHandlers.push($scope.$on(\"$stateChangeStart\", function (event, toState, toParams, fromState, fromParams) {\n    if (awaitingResponses.length > 0 && toState.name === \"root.split.payment\") {\n      event.preventDefault();\n      notification.pop(\"info\", i18nPleaseWait);\n    }\n  }));\n  eventHandlers.push($scope.$on(\"totalPercent\", function (event, discountReason) {\n    toggleButton(\"totalPercent\", i18nTotalPct, discountReason);\n  }));\n  eventHandlers.push($scope.$on(\"totalAmount\", function (event, discountReason) {\n    toggleButton(\"totalAmount\", i18nTotalAmount, discountReason);\n  }));\n  eventHandlers.push($scope.$on(\"newPrice\", function (event, discountReason) {\n    toggleButton(\"newPrice\", i18nTotalNewPrice, discountReason);\n  }));\n  eventHandlers.push($scope.$on(\"newLinePrice\", function (event, discountReason) {\n    toggleButton(\"newLinePrice\", i18nLineNewPrice, discountReason);\n  }));\n  eventHandlers.push($scope.$on(\"lineprice\", function (event, discountReason) {\n    toggleButton(\"newLinePrice\", i18nLineNewPrice, discountReason);\n  }));\n  eventHandlers.push($scope.$on(\"exchangeexpiryperiod\", function (event, uuid) {\n    if (posConfig.getDefaultExpiryPeriodType() == 0) {\n      toggleButton(\"exchangeexpiryperiod\", i18nChangeExpiryPeriod);\n    }\n  }));\n  eventHandlers.push($scope.$on(\"amountdiscount\", function (event, discountReason) {\n    toggleButton(\"lineAmount\", i18nEnterAmount, discountReason);\n  }));\n  eventHandlers.push($scope.$on(\"customdiscount\", function (event, discountReason) {\n    toggleButton(\"customPercent\", i18nEnterDiscount, discountReason);\n  }));\n  eventHandlers.push($scope.$on(\"addtext\", function (event, args) {\n    toggleButton(\"addText\", i18nEnterText);\n  }));\n  eventHandlers.push($scope.$on(\"details\", function (event, args) {\n    $state.go(\"root.split.downpayment-articledetails\");\n  }));\n  eventHandlers.push($scope.$on(\"stockLookup\", function (event, args) {\n    $state.go(\"root.split.stock-lookup\");\n  }));\n  eventHandlers.push($scope.$on(\"percentdiscount\", function (event, discount, discountReason) {\n    if (receipt.getSelectedLineTotal() === 0) {\n      notification.pop(\"info\", i18nNoMoreDiscount);\n    } else {\n      setCustomPercentDiscount(discount, discountReason);\n    }\n  }));\n  eventHandlers.push($scope.$on(\"addone\", /*#__PURE__*/function () {\n    var _ref2 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee2(event, args) {\n      var item, canProceed;\n      return _regeneratorRuntime().wrap(function _callee2$(_context2) {\n        while (1) switch (_context2.prev = _context2.next) {\n          case 0:\n            item = $scope.items[receipt.selectedItemLineIndex];\n            if (!(item.type == \"giftCertificate\")) {\n              _context2.next = 3;\n              break;\n            }\n            return _context2.abrupt(\"return\");\n          case 3:\n            _context2.next = 5;\n            return eventBus.notifyAsync(eventBus.events.article.increase, item);\n          case 5:\n            canProceed = _context2.sent;\n            if (canProceed) {\n              receipt.addItem();\n            }\n          case 7:\n          case \"end\":\n            return _context2.stop();\n        }\n      }, _callee2);\n    }));\n    return function (_x, _x2) {\n      return _ref2.apply(this, arguments);\n    };\n  }()));\n  eventHandlers.push($scope.$on(\"removeone\", function (event, args) {\n    receipt.removeItem();\n  }));\n  eventHandlers.push($scope.$on(\"returnitem\", /*#__PURE__*/function () {\n    var _ref3 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee3(event, args) {\n      return _regeneratorRuntime().wrap(function _callee3$(_context3) {\n        while (1) switch (_context3.prev = _context3.next) {\n          case 0:\n            _context3.prev = 0;\n            if (!($rootScope.selectedItem.quantity > 0 && returnReasons.haveReturnReasons())) {\n              _context3.next = 9;\n              break;\n            }\n            _context3.t0 = receipt;\n            _context3.next = 5;\n            return returnReasons.returnReasonsSelector();\n          case 5:\n            _context3.t1 = _context3.sent;\n            _context3.t0.setReturnReason.call(_context3.t0, _context3.t1);\n            _context3.next = 10;\n            break;\n          case 9:\n            receipt.removeReturnReason();\n          case 10:\n            receipt.changeSalesType();\n            _context3.next = 16;\n            break;\n          case 13:\n            _context3.prev = 13;\n            _context3.t2 = _context3[\"catch\"](0);\n            if (_context3.t2 != \"dismissed\") {\n              console.error(_context3.t2);\n              notification.pop(\"error\", i18nReturnReasonError);\n            }\n          case 16:\n          case \"end\":\n            return _context3.stop();\n        }\n      }, _callee3, null, [[0, 13]]);\n    }));\n    return function (_x3, _x4) {\n      return _ref3.apply(this, arguments);\n    };\n  }()));\n  eventHandlers.push($scope.$on(\"isgift\", function (event, args) {\n    receipt.setIsGift(args);\n  }));\n  eventHandlers.push($scope.$on(\"hasSerialNo\", function (event, args) {\n    receipt.setHasSerialNo(args);\n  }));\n  eventHandlers.push($scope.$on(\"orderinstore\", function (event, args) {\n    receipt.setOrderInStore(args);\n  }));\n  eventHandlers.push($scope.$on(\"excludefromloyalty\", function (event, args) {\n    receipt.setExcludeFromLoyalty(args);\n  }));\n  eventHandlers.push($scope.$on(\"removeset\", function (event, args) {\n    if (confirm(i18nConfirmSetDeletion) === true) {\n      $scope.removeItem(receipt.selectedItemLineIndex);\n    }\n  }));\n  eventHandlers.push($scope.$on(\"receipt:clerkid:set\", function (event, clerkId) {\n    $scope.inputValue = clerkId;\n    toggleButton(\"setClerkId\", i18nEnterClerkId);\n  }));\n  eventHandlers.push($scope.$on(\"removeline\", function (event, uuid) {\n    var items = receipt.getReceipt().items || [];\n    for (var i = 0; i < receipt.getReceipt().items.length; i++) {\n      if (uuid === items[i].uuid) {\n        eventBus.notify(eventBus.events.sale.itemDeleted, items[i]);\n        receipt.removeLine(i);\n        break;\n      }\n    }\n  }));\n  eventHandlers.push($scope.$on(\"customquantity\", function (event, args) {\n    toggleButton(\"enterQuantity\", i18nEnterQuantity);\n  }));\n  eventHandlers.push($scope.$on(\"canceldiscount\", function (event, args) {\n    receipt.cancelLineDiscount(args);\n  }));\n  eventHandlers.push($scope.$on(\"selectsetno\", function (event, args) {\n    $scope.selectSetNo(args);\n  }));\n  eventHandlers.push($scope.$on(\"navigation:notecancel\", function (event, args) {\n    activeFunction = \"noteCancel\";\n    $scope.placeHolder = i18nInputToCancelPlaceholder;\n    $timeout(function () {\n      keypadManager.show($scope.globalInput, function () {\n        $scope.handleInput($scope.inputValue);\n      }, true);\n    });\n  }));\n\n  // unsubscribe eventhandlers when scope is destroyed\n  angular.forEach(eventHandlers, function (eventHandler) {\n    $scope.$on(\"$destroy\", eventHandler);\n  });\n  $scope.inputBlurHandler = function () {\n    activateDefaultFunction(activeFunction === defaultFunction);\n  };\n  $scope.clearReceipt = function () {\n    receipt.clearReceipt();\n  };\n  $scope.selectedItemLineIndex = function () {\n    return receipt.selectedItemLineIndex;\n  };\n  $scope.selectSetNo = function (index) {\n    receipt.selectedSetNo = index;\n  };\n  $scope.totalPercent = function () {\n    toggleButton(\"totalPercent\", \"Total %\");\n  };\n  $scope.totalAmount = function () {\n    toggleButton(\"totalAmount\", \"Total Amount\");\n  };\n  $scope.newPrice = function () {\n    toggleButton(\"newPrice\", \"New Total Price\");\n  };\n  $scope.cancelAllDiscounts = function () {\n    receipt.cancelAllDiscount();\n  };\n  $scope.cancelReceiptDiscounts = function (doRecalculations) {\n    receipt.cancelReceiptDiscounts(doRecalculations);\n  };\n  $scope.cancelLineDiscount = function () {\n    receipt.cancelLineDiscount();\n  };\n  $scope.setDiscountOnTotal = function (discount) {\n    receipt.setDiscountOnAll(discount);\n  };\n  $scope.selectItemLine = function (index, article) {\n    var toBroadcast = null;\n    if (receipt.selectedItemLineIndex === index) {\n      //Work as Accordion\n      receipt.selectedItemLineIndex = -1;\n      $rootScope.selectedItem = false;\n    } else {\n      receipt.selectedItemLineIndex = index;\n      $rootScope.selectedItem = article;\n      toBroadcast = article;\n    }\n    eventBus.notify(eventBus.events.pos.itemSelected, toBroadcast);\n  };\n  $scope.receiptPercentDiscount = function () {\n    toggleButton(\"receiptPercentDiscount\", \"Total %\");\n  };\n  $scope.receiptAmountDiscount = function () {\n    toggleButton(\"receiptAmountDiscount\", \"Total Amount\");\n  };\n  $scope.setReceiptPercentDiscount = function (discount) {\n    setReceiptPercentDiscount(discount);\n  };\n  $scope.getTotalWithoutDiscount = function () {\n    return receipt.getTotalWithoutDiscount();\n  };\n  $scope.getDiscount = function () {\n    return new Decimal(100).minus(receipt.getTotal().times(100).dividedBy(receipt.getTotalWithoutDiscount()));\n  };\n  $scope.getCurrency = function () {\n    return posConfig.getLocalCurrency().name;\n  };\n  $scope.containsDiscounts = function () {\n    return receipt.receiptHasDiscount();\n  };\n  $scope.containsTotalDiscount = function () {\n    return receipt.receiptHasTotalDiscount();\n  };\n  $scope.containsExpenses = function () {\n    return receipt.hasExpenseItems();\n  };\n  $scope.IsPaymentButtonActive = function () {\n    return !(receipt.getReceipt().items.length > 0 && receipt.getTotal() == 0);\n  };\n  $scope.IsCompleteTransactionButtonActive = function () {\n    return receipt.getReceipt().items.length > 0 && receipt.getTotal() == 0;\n  };\n  $scope.ShowCompleteTransactionModal = function () {\n    $scope.completeTransactionModal.isVisible = true;\n  };\n  function toggleButton(func, signalText, discountReason) {\n    if (receipt.getReceipt().items.length === 0) return;\n    if (func === \"receiptPercentDiscount\" || func === \"receiptAmountDiscount\") {\n      if (!receipt.containsDiscountableItem()) {\n        $translate([\"receiptItem/toast/noItemsDiscountable\", \"receiptItem/toast/cantAddDiscount\"]).then(function (translations) {\n          return notification.pop(\"info\", translations[\"receiptItem/toast/cantAddDiscount\"], translations[\"receiptItem/toast/noItemsDiscountable\"], 10000);\n        });\n        return;\n      }\n    }\n    if (func === \"promtForSerialNumber\") {\n      var serialNo = fluctuatingPropertiesHelper.getSerialNo($scope.article);\n      if (serialNo) $scope.inputValue = serialNo;\n    }\n    var switchValue = activeFunction !== func;\n    if (switchValue) {\n      activeFunction = func;\n      $scope.placeHolder = signalText;\n      var forceNumpad = func !== \"addText\";\n      $timeout(function () {\n        keypadManager.show($scope.globalInput, function () {\n          $scope.handleInput($scope.inputValue, discountReason);\n        }, forceNumpad);\n      });\n    }\n  }\n  $scope.handleInput = function (input, discountReason) {\n    switch (activeFunction) {\n      case \"customPercent\":\n        setCustomPercentDiscount(input, discountReason);\n        break;\n      case \"lineAmount\":\n        setLineAmountDiscount(input, discountReason);\n        break;\n      case \"newLinePrice\":\n        setLinePrice(input, discountReason);\n        break;\n      case \"totalPercent\":\n        setTotalPercentDiscount(input, discountReason);\n        break;\n      case \"totalAmount\":\n        setTotalAmountDiscount(input, discountReason);\n        break;\n      case \"newPrice\":\n        setNewPriceTotal(input, discountReason);\n        break;\n      case \"addText\":\n        addTextLine(input);\n        break;\n      case \"enterQuantity\":\n        setCustomQuantity(input);\n        break;\n      case \"setClerkId\":\n        setClerkId(input);\n        break;\n      case \"receiptPercentDiscount\":\n        setReceiptPercentDiscount(input, discountReason);\n        break;\n      case \"receiptAmountDiscount\":\n        setReceiptAmountDiscount(input, discountReason);\n        break;\n      case \"exchangeexpiryperiod\":\n        setExchangeExpiryPeriod(input);\n        break;\n      case \"noteCancel\":\n        noteCancel(input);\n        break;\n      case \"promtForPrice\":\n        setArticlePrice(input);\n        break;\n      case \"promtForSerialNumber\":\n        setArticleSerialNumber(input);\n        break;\n      default:\n        addToReceipt(input);\n    }\n  };\n  $scope.goToPayment = /*#__PURE__*/function () {\n    var _ref4 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee4(payment) {\n      var currentDevice, returnRequireManager, receiptContainsReturns;\n      return _regeneratorRuntime().wrap(function _callee4$(_context4) {\n        while (1) switch (_context4.prev = _context4.next) {\n          case 0:\n            if (payment === \"QuickCard\") {\n              currentDevice = backend.getCurrentDevice();\n              if (currentDevice.terminalType) payment = \"Card\";else payment = \"ManualCard\";\n            }\n            returnRequireManager = posConfig.getOptions().onlyManagersCanDoReturns;\n            receiptContainsReturns = receipt.getReceipt().items.some(function (item) {\n              return item.quantity < 0;\n            });\n            if (returnRequireManager && receiptContainsReturns) {\n              clerkLoginService.startManagerVerification().then(function () {\n                return initiateNavigation(payment);\n              }, function () {\n                return notification.pop(\"error\", i18nManagerVerificationDenied);\n              });\n            } else {\n              initiateNavigation(payment);\n            }\n\n            //Reload pos configuration on payment to ensure we have the correct payment methods loaded\n            _context4.next = 6;\n            return posConfig.forceGetConfig();\n          case 6:\n          case \"end\":\n            return _context4.stop();\n        }\n      }, _callee4);\n    }));\n    return function (_x5) {\n      return _ref4.apply(this, arguments);\n    };\n  }();\n  $scope.goToBooking = function () {\n    return eventBus.notifyAsync(eventBus.events.downpayment.openBooking);\n  };\n  function initiateNavigation(payment) {\n    var state = \"root.split.payment\";\n    if (payment) {\n      $state.go(state, {\n        type: payment\n      });\n    } else {\n      $state.go(state);\n    }\n  }\n  function IsQuickCashButtonDisabled() {\n    if (receipt.getReceipt().items.length == 0 || receipt.getReceipt().items.length > 0 && receipt.getTotal() == 0) return true;\n    return !$scope.buttonStatesList[\"receipt/quickCash\"];\n  }\n  function IsQuickCardButtonDisabled() {\n    if (receipt.getReceipt().items.length == 0 || receipt.getReceipt().items.length > 0 && receipt.getTotal() == 0) return true;\n    return !$scope.buttonStatesList[\"receipt/quickCard\"];\n  }\n  function IsPaymentButtonDisabled() {\n    if (receipt.getReceipt().items.length == 0) return true;\n    return !$scope.buttonStatesList[\"receipt/payment\"];\n  }\n  function setArticlePrice(salesPriceInput) {\n    if (salesPriceInput > 0) {\n      $scope.article.salesPrice = new Decimal(salesPriceInput);\n      $scope.article.effectiveSalesPrice = new Decimal(salesPriceInput);\n      keypadManager.hide();\n      activateDefaultFunction();\n    } else {\n      notification.pop(\"warning\", i18nPromtForPriceWarning);\n    }\n  }\n  function handleSerialNumberResponse(serialNumberResponse) {\n    var article = serialNumberResponse.article;\n    if (article && article.variantId == $scope.article.variantId) {\n      $scope.article.serialNo = serialNumberResponse.serialNumber.serialNo;\n      $scope.article.available = serialNumberResponse.serialNumber.status == 1;\n      $scope.article.maxQuantityOne = true;\n      $scope.article.hasSerialNo = true;\n      fluctuatingPropertiesHelper.setItemAsSerialized($scope.article);\n    } else {\n      notification.pop(\"warning\", i18nSerialNumberDoesNotMatchVariantId);\n    }\n  }\n  function setArticleSerialNumber(_x6) {\n    return _setArticleSerialNumber.apply(this, arguments);\n  }\n  function _setArticleSerialNumber() {\n    _setArticleSerialNumber = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee8(serialNumber) {\n      var requestCompleted, receiptItem;\n      return _regeneratorRuntime().wrap(function _callee8$(_context8) {\n        while (1) switch (_context8.prev = _context8.next) {\n          case 0:\n            requestCompleted = true;\n            if (!(serialNumber && serialNumber.length > 0)) {\n              _context8.next = 9;\n              break;\n            }\n            addAwaitingResponse(serialNumber);\n            receiptItem = receipt.getReceipt().items.find(function (x) {\n              return x.serialNo === serialNumber;\n            });\n            if (!(receiptItem && receiptItem.serialNo && receiptItem.serialNo === serialNumber)) {\n              _context8.next = 7;\n              break;\n            }\n            notification.pop(\"info\", i18alreadyScanned);\n            return _context8.abrupt(\"return\");\n          case 7:\n            _context8.next = 9;\n            return articles.findArticleBySerialNumber(serialNumber).then(/*#__PURE__*/function () {\n              var _ref6 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee7(response) {\n                var userResponse, query;\n                return _regeneratorRuntime().wrap(function _callee7$(_context7) {\n                  while (1) switch (_context7.prev = _context7.next) {\n                    case 0:\n                      if (!(response.data && response.data.serialNumber)) {\n                        _context7.next = 4;\n                        break;\n                      }\n                      handleSerialNumberResponse(response.data);\n                      _context7.next = 50;\n                      break;\n                    case 4:\n                      keypadManager.hide();\n                      _context7.t0 = response.status;\n                      _context7.next = _context7.t0 === 404 ? 8 : _context7.t0 === 406 ? 23 : _context7.t0 === 409 ? 38 : 50;\n                      break;\n                    case 8:\n                      _context7.next = 10;\n                      return itemInfoService.executeSerializedNotFoundItemInfo(\"label/serializedItemDoesNotExist\");\n                    case 10:\n                      userResponse = _context7.sent;\n                      if (!(userResponse == $translate.instant(\"label/yes\"))) {\n                        _context7.next = 21;\n                        break;\n                      }\n                      $scope.article.serialNo = serialNumber;\n                      $scope.article.available = false;\n                      $scope.article.maxQuantityOne = true;\n                      $scope.article.hasSerialNo = true;\n                      fluctuatingPropertiesHelper.setItemAsSerialized($scope.article);\n                      _context7.next = 19;\n                      return articles.addArticleToSerialNumberRepository(serialNumber, $scope.article.ean);\n                    case 19:\n                      _context7.next = 22;\n                      break;\n                    case 21:\n                      receipt.removeLineCustomerOrder(receipt.selectedItemLineIndex);\n                    case 22:\n                      return _context7.abrupt(\"break\", 50);\n                    case 23:\n                      _context7.next = 25;\n                      return itemInfoService.executeSerializedNotFoundItemInfo(\"label/serialNumberDoesNotMatchConfiguredMask\");\n                    case 25:\n                      userResponse = _context7.sent;\n                      if (!(userResponse == $translate.instant(\"label/yes\"))) {\n                        _context7.next = 36;\n                        break;\n                      }\n                      $scope.article.serialNo = serialNumber;\n                      $scope.article.available = false;\n                      $scope.article.maxQuantityOne = true;\n                      $scope.article.hasSerialNo = true;\n                      fluctuatingPropertiesHelper.setItemAsSerialized($scope.article);\n                      _context7.next = 34;\n                      return articles.addArticleToSerialNumberRepository(serialNumber, $scope.article.ean);\n                    case 34:\n                      _context7.next = 37;\n                      break;\n                    case 36:\n                      receipt.removeLineCustomerOrder(receipt.selectedItemLineIndex);\n                    case 37:\n                      return _context7.abrupt(\"break\", 50);\n                    case 38:\n                      _context7.next = 40;\n                      return itemInfoService.executeSerializedNotFoundItemInfo(\"label/serializedItemIsAlreadyAssigned\");\n                    case 40:\n                      userResponse = _context7.sent;\n                      if (!(userResponse == $translate.instant(\"label/yes\"))) {\n                        _context7.next = 48;\n                        break;\n                      }\n                      _context7.next = 44;\n                      return articles.query(0, 2, serialNumber);\n                    case 44:\n                      query = _context7.sent;\n                      if (query && query.data.length > 0) {\n                        handleSerialNumberResponse(query.data[0]);\n                      }\n                      _context7.next = 49;\n                      break;\n                    case 48:\n                      receipt.removeLineCustomerOrder(receipt.selectedItemLineIndex);\n                    case 49:\n                      return _context7.abrupt(\"break\", 50);\n                    case 50:\n                    case \"end\":\n                      return _context7.stop();\n                  }\n                }, _callee7);\n              }));\n              return function (_x1) {\n                return _ref6.apply(this, arguments);\n              };\n            }())[\"finally\"](function () {\n              if (requestCompleted) {\n                removeAwaitingResponse(serialNumber);\n                keypadManager.hide();\n                activateDefaultFunction();\n              }\n            });\n          case 9:\n          case \"end\":\n            return _context8.stop();\n        }\n      }, _callee8);\n    }));\n    return _setArticleSerialNumber.apply(this, arguments);\n  }\n  function setClerkId(clerkId) {\n    receipt.setClerkId(clerkId).then(function () {\n      keypadManager.hide();\n      activateDefaultFunction();\n    }, function (error) {\n      if (error && error.id === \"INVALID_CLERK_ID\") notification.pop(\"warning\", i18nInvalidClerkId);\n    });\n  }\n  function setLineAmountDiscount(discount, discountReason) {\n    try {\n      discount = inputValidationService.convertToDecimal(discount);\n      if (discount.isZero() || discount.isNaN() || discount.isNegative()) throw \"INVALID_AMOUNT\";\n    } catch (err) {\n      return notification.pop(\"info\", i18nProperAmount);\n    }\n    if (discount.greaterThan(receipt.getSelectedLineTotal().abs())) return notification.pop(\"info\", i18nAmountLtProduct);\n    var discountToApply = new Decimal(100).minus(receipt.calculateDiscountPercentage(discount, receipt.getSelectedLineTotal().abs()));\n    keypadManager.hide();\n    if (discountReasons.items.length) {\n      $scope.selectedReasonCodes = discountReasons.getFilteredDiscountReasons(true, false);\n      discountReasons.discountReasonsSelector(receipt.setLineDiscount, discountToApply, activateDefaultFunction);\n      keypadManager.hide();\n    } else {\n      receipt.setLineDiscount(discountToApply, discountReason);\n      activateDefaultFunction();\n    }\n  }\n  function activateDefaultFunction(keepInput) {\n    activeFunction = defaultFunction;\n    $scope.placeHolder = i18nEnterBarcode;\n    $scope.forceNumpad = true;\n    if (!keepInput) $scope.inputValue = \"\";\n  }\n  function setCustomPercentDiscount(pctDiscount, discountReason) {\n    try {\n      pctDiscount = inputValidationService.convertToDecimal(pctDiscount);\n      if (pctDiscount.isZero() || pctDiscount.isNaN() || pctDiscount.isNegative()) throw \"INVALID_AMOUNT\";\n    } catch (err) {\n      return notification.pop(\"info\", i18nProperAmountPercent);\n    }\n    if (pctDiscount.lessThan(101)) {\n      if (receipt.getSelectedLineTotal() === 0) {\n        notification.pop(\"info\", i18nNoMoreDiscount);\n      } else {\n        keypadManager.hide();\n        if (discountReasons.items.length) {\n          $scope.selectedReasonCodes = discountReasons.getFilteredDiscountReasons(true, true);\n          discountReasons.discountReasonsSelector(receipt.setLineDiscount, pctDiscount, activateDefaultFunction);\n        } else {\n          receipt.setLineDiscount(pctDiscount, discountReason);\n        }\n      }\n      activateDefaultFunction();\n    } else {\n      notification.pop(\"info\", i18nDiscountLt100);\n    }\n  }\n  function setLinePrice(newPrice, discountReason) {\n    try {\n      newPrice = inputValidationService.convertToDecimal(newPrice);\n      if (newPrice.isZero() || newPrice.isNaN() || newPrice.isNegative() || !inputValidationService.validateAmount(newPrice)) throw \"INVALID_AMOUNT\";\n    } catch (err) {\n      return notification.pop(\"info\", i18nProperAmountNull);\n    }\n    if (receipt.getSelectedLineTotal().abs().isZero()) {\n      receipt.setLinePrice(newPrice);\n      keypadManager.hide();\n      return;\n    }\n    var discountToApply;\n    discountToApply = receipt.calculateDiscountPercentage(newPrice, receipt.getSelectedLineTotal().abs());\n    keypadManager.hide();\n    if (discountReasons.items.length && newPrice.lt(receipt.getSelectedLineTotal().abs())) {\n      discountReasons.discountReasonsSelector(receipt.setLineDiscount, discountToApply, activateDefaultFunction);\n    } else {\n      receipt.setLineDiscount(discountToApply, discountReason);\n      activateDefaultFunction();\n    }\n  }\n  function setExchangeExpiryPeriod(newExpiryPeriod) {\n    try {\n      newExpiryPeriod = inputValidationService.convertToDecimal(newExpiryPeriod);\n      if (newExpiryPeriod.isZero() || newExpiryPeriod.isNaN() || newExpiryPeriod.isNegative() || !inputValidationService.validateAmount(newExpiryPeriod)) throw \"INVALID_AMOUNT\";\n    } catch (err) {\n      return notification.pop(\"info\", i18nProperAmountNull);\n    }\n    $rootScope.selectedItem.exchangeExpiryDate = moment().add(newExpiryPeriod, \"days\").toDate();\n    keypadManager.hide();\n  }\n  function setTotalPercentDiscount(pctDiscountTotal, discountReason) {\n    try {\n      pctDiscountTotal = inputValidationService.convertToDecimal(pctDiscountTotal);\n      if (pctDiscountTotal.isZero() || pctDiscountTotal.isNaN() || pctDiscountTotal.isNegative()) throw \"INVALID_AMOUNT\";\n    } catch (err) {\n      return notification.pop(\"info\", i18nProperAmount);\n    }\n    if (pctDiscountTotal.lessThanOrEqualTo(0) || pctDiscountTotal.greaterThan(100)) return notification.pop(\"info\", i18nInRange);\n    keypadManager.hide();\n    if (discountReasons.items.length) {\n      discountReasons.discountReasonsSelector(receipt.setDiscountOnAll, pctDiscountTotal, activateDefaultFunction);\n    } else {\n      receipt.setDiscountOnAll(pctDiscountTotal, discountReason);\n      activateDefaultFunction();\n    }\n  }\n  function setReceiptPercentDiscount(pctDiscountTotal, discountReason) {\n    if (!receipt.containsDiscountableItem()) {\n      $translate([\"receiptItem/toast/noItemsDiscountable\", \"receiptItem/toast/cantAddDiscount\"]).then(function (translations) {\n        return notification.pop(\"info\", translations[\"receiptItem/toast/cantAddDiscount\"], translations[\"receiptItem/toast/noItemsDiscountable\"], 10000);\n      });\n      return;\n    }\n    pctDiscountTotal = new Decimal(pctDiscountTotal);\n    var discountDetails = {\n      isPercentage: true\n    };\n    if (pctDiscountTotal.isZero() || pctDiscountTotal.isNaN()) {\n      return notification.pop(\"info\", i18nProperAmount);\n    }\n    if (pctDiscountTotal.lessThanOrEqualTo(0) || pctDiscountTotal.greaterThan(100)) {\n      return notification.pop(\"info\", i18nInRange);\n    }\n    if (discountReasons.items.length) {\n      keypadManager.hide();\n      $scope.selectedReasonCodes = discountReasons.getFilteredDiscountReasons(false, true);\n      discountReasons.discountReasonsSelector(receipt.setDiscountOnAll, pctDiscountTotal, activateDefaultFunction, discountDetails);\n    } else {\n      receipt.setDiscountOnAll(pctDiscountTotal, null, discountDetails);\n      activateDefaultFunction();\n    }\n  }\n  function setReceiptAmountDiscount(totalAmount, discountReason) {\n    if (!receipt.containsDiscountableItem()) {\n      $translate([\"receiptItem/toast/noItemsDiscountable\", \"receiptItem/toast/cantAddDiscount\"]).then(function (translations) {\n        return notification.pop(\"info\", translations[\"receiptItem/toast/cantAddDiscount\"], translations[\"receiptItem/toast/noItemsDiscountable\"], 10000);\n      });\n      return;\n    }\n    totalAmount = new Decimal(totalAmount);\n    var discountDetails = {\n      isPercentage: false\n    };\n    if (totalAmount.isNaN() || totalAmount.lessThanOrEqualTo(0) || totalAmount.greaterThan(receipt.getTotal().abs())) {\n      return notification.pop(\"info\", i18nProperAmount);\n    } else if (discountReasons.items.length) {\n      keypadManager.hide();\n      $scope.selectedReasonCodes = discountReasons.getFilteredDiscountReasons(false, false);\n      discountReasons.discountReasonsSelector(receipt.setDiscountOnAll, totalAmount, activateDefaultFunction, discountDetails);\n    } else {\n      receipt.setDiscountOnAll(totalAmount, null, discountDetails);\n      activateDefaultFunction();\n    }\n  }\n  function setTotalAmountDiscount(discountTotal, discountReason) {\n    try {\n      discountTotal = inputValidationService.convertToDecimal(discountTotal);\n      if (discountTotal.isNaN() || discountTotal.lessThanOrEqualTo(0) || discountTotal.greaterThan(receipt.getTotal().abs())) throw \"INVALID_AMOUNT\";\n    } catch (err) {\n      return notification.pop(\"info\", i18nProperAmount);\n    }\n    var discountToApply = new Decimal(100).minus(receipt.calculateDiscountPercentage(discountTotal, receipt.getTotal().abs()));\n    keypadManager.hide();\n    if (discountReasons.items.length) {\n      discountReasons.discountReasonsSelector(receipt.setDiscountOnAll, discountToApply, activateDefaultFunction);\n    } else {\n      receipt.setDiscountOnAll(discountToApply, discountReason);\n      activateDefaultFunction();\n    }\n  }\n  function setNewPriceTotal(totalPrice, discountReason) {\n    try {\n      totalPrice = inputValidationService.convertToDecimal(totalPrice);\n      if (totalPrice.isNaN() || totalPrice.lessThanOrEqualTo(0) || totalPrice.greaterThan(receipt.getTotal().abs())) throw \"INVALID_AMOUNT\";\n    } catch (err) {\n      return notification.pop(\"info\", i18nProperAmount);\n    }\n    var discountToApply = receipt.calculateDiscountPercentage(totalPrice, receipt.getTotal().abs());\n    keypadManager.hide();\n    if (discountReasons.items.length) {\n      discountReasons.discountReasonsSelector(receipt.setDiscountOnAll, discountToApply, activateDefaultFunction);\n    } else {\n      receipt.setDiscountOnAll(discountToApply, discountReason);\n      activateDefaultFunction();\n    }\n  }\n  function setCustomQuantity(quantity) {\n    try {\n      if (isNaN(quantity) || quantity <= 0) notification.pop(\"info\", i18nProperAmount);else {\n        if (quantity % 1 === 0) {\n          receipt.setLineQuantity(quantity);\n          keypadManager.hide();\n          activateDefaultFunction();\n        } else {\n          notification.pop(\"info\", i18nProperAmount);\n        }\n      }\n    } catch (err) {\n      if (err === \"QUANTITY_VALUE_EXCEEDED\") notification.pop(\"warning\", i18nMaxQtyExceeded);\n      if (err === \"AMOUNT_VALUE_EXCEEDED\") notification.pop(\"warning\", i18nMaxAmountExceeded);\n    }\n  }\n  function addToReceipt(_x7) {\n    return _addToReceipt.apply(this, arguments);\n  }\n  function _addToReceipt() {\n    _addToReceipt = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee9(ean) {\n      var canProceed;\n      return _regeneratorRuntime().wrap(function _callee9$(_context9) {\n        while (1) switch (_context9.prev = _context9.next) {\n          case 0:\n            _context9.next = 2;\n            return eventBus.notifyAsync(eventBus.events.article.addToReceiptBarcode, ean);\n          case 2:\n            canProceed = _context9.sent;\n            if (!canProceed) {\n              _context9.next = 11;\n              break;\n            }\n            if (!receipt.hasExpenseItems()) {\n              _context9.next = 8;\n              break;\n            }\n            activateDefaultFunction();\n            notification.pop(\"warning\", i18nExpenseLine);\n            return _context9.abrupt(\"return\");\n          case 8:\n            if (ean) {\n              _context9.next = 10;\n              break;\n            }\n            return _context9.abrupt(\"return\");\n          case 10:\n            categorizeBarcode(ean);\n          case 11:\n          case \"end\":\n            return _context9.stop();\n        }\n      }, _callee9);\n    }));\n    return _addToReceipt.apply(this, arguments);\n  }\n  function categorizeBarcode(_x8) {\n    return _categorizeBarcode.apply(this, arguments);\n  }\n  function _categorizeBarcode() {\n    _categorizeBarcode = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee0(ean) {\n      var promotionPrefix;\n      return _regeneratorRuntime().wrap(function _callee0$(_context0) {\n        while (1) switch (_context0.prev = _context0.next) {\n          case 0:\n            promotionPrefix = posConfig.getPromotionBarcodePrefix();\n            if (!(promotionPrefix && ean.startsWith(promotionPrefix))) {\n              _context0.next = 6;\n              break;\n            }\n            eventBus.notify(eventBus.events.pos.promotionBarcodeScanned, ean);\n            activateDefaultFunction();\n            keypadManager.hide();\n            return _context0.abrupt(\"return\");\n          case 6:\n            _context0.t0 = true;\n            _context0.next = _context0.t0 === /^A\\d{7}$/i.test(ean) ? 9 : _context0.t0 === /^00\\d{6}$/.test(ean) ? 11 : _context0.t0 === /^%\\d{1}\\.\\d{2}$/.test(ean) ? 13 : _context0.t0 === /^%\\d{2}\\.\\d{2}$/.test(ean) ? 15 : _context0.t0 === /^%\\d{3}\\.\\d{2}$/.test(ean) ? 17 : _context0.t0 === /^R\\d{4,6}\\D\\d{2,4}\\D\\d{5,6}$/i.test(ean) ? 19 : _context0.t0 === /^G([a-z]|[A-Z]|[0-9]){15}$/.test(ean) ? 24 : _context0.t0 === voucherService.barcodeIsDefinedAsVoucher(ean) ? 27 : 29;\n            break;\n          case 9:\n            // AXXXXXXX / aXXXXXXXX\n            getPricefromCode(ean, 1, 5, \"newPrice\");\n            return _context0.abrupt(\"break\", 30);\n          case 11:\n            // 00XXXXXX\n            getPricefromCode(ean, 2, 4, \"newPrice\");\n            return _context0.abrupt(\"break\", 30);\n          case 13:\n            // %X.XX\n            getPricefromCode(ean, 1, 1, \"discount\");\n            return _context0.abrupt(\"break\", 30);\n          case 15:\n            // %XX.XX\n            getPricefromCode(ean, 1, 2, \"discount\");\n            return _context0.abrupt(\"break\", 30);\n          case 17:\n            // %XXX.XX\n            getPricefromCode(ean, 1, 3, \"discount\");\n            return _context0.abrupt(\"break\", 30);\n          case 19:\n            if (!(receipt.getReceipt().items.length !== 0)) {\n              _context0.next = 21;\n              break;\n            }\n            return _context0.abrupt(\"return\", errorMsgAndActivateDefault(i18nNonEmptyReceipt));\n          case 21:\n            _context0.next = 23;\n            return getReturnReceipt(ean);\n          case 23:\n            return _context0.abrupt(\"break\", 30);\n          case 24:\n            // GXXXXXXXXXXXXXXX\n            $log.debug(\"Scanned exchange barcode: \".concat(ean));\n            getItemLineFromExchangeBarcode(ean);\n            return _context0.abrupt(\"break\", 30);\n          case 27:\n            voucherService.showVoucherModal(ean, receipt.getReceipt().clerk);\n            return _context0.abrupt(\"break\", 30);\n          case 29:\n            getItemline(ean);\n          case 30:\n            activateDefaultFunction();\n          case 31:\n          case \"end\":\n            return _context0.stop();\n        }\n      }, _callee0);\n    }));\n    return _categorizeBarcode.apply(this, arguments);\n  }\n  function getReturnReceipt(_x9) {\n    return _getReturnReceipt.apply(this, arguments);\n  }\n  function _getReturnReceipt() {\n    _getReturnReceipt = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee1(id) {\n      var loadedReceipt;\n      return _regeneratorRuntime().wrap(function _callee1$(_context1) {\n        while (1) switch (_context1.prev = _context1.next) {\n          case 0:\n            _context1.prev = 0;\n            _context1.next = 3;\n            return getSavedReceipt(id, true);\n          case 3:\n            loadedReceipt = _context1.sent;\n            keypadManager.hide();\n            _context1.next = 10;\n            break;\n          case 7:\n            _context1.prev = 7;\n            _context1.t0 = _context1[\"catch\"](0);\n            return _context1.abrupt(\"return\");\n          case 10:\n            returnReceiptService.showReturnModal(loadedReceipt);\n          case 11:\n          case \"end\":\n            return _context1.stop();\n        }\n      }, _callee1, null, [[0, 7]]);\n    }));\n    return _getReturnReceipt.apply(this, arguments);\n  }\n  function noteCancel(id) {\n    if (!/^R\\d{6}\\D\\d{2}\\D\\d{5}$/i.test(id) && !/^R\\d{4}\\D\\d{3}\\D\\d{6}$/i.test(id)) return notification.pop(\"info\", \"Incorrect receipt barcode format\");\n    if (receipt.getReceipt().items.length !== 0) return errorMsgAndActivateDefault(i18nNonEmptyReceipt);\n    getSavedReceipt(id).then(function (loadedReceipt) {\n      if (paymentService.isCancellationBlocked(loadedReceipt.payments)) {\n        notification.pop(\"warning\", i18nUnableToCancelTitle, i18nUnableToCancelBody);\n        return;\n      }\n      receipt.createCancellationReceipt(loadedReceipt);\n      $state.go(\"root.split.payment\", {\n        type: \"ReceiptCompleter\"\n      });\n    });\n    keypadManager.hide();\n    activateDefaultFunction();\n  }\n  function getSavedReceipt(id, doNotChangeUuid) {\n    id = id.substr(1);\n    var separatorMatch = id.match(/\\D/);\n    if (!separatorMatch) return errorMsgAndActivateDefault(i18nInvalidReceiptNumber);\n    var ids = id.split(separatorMatch[0]); // 'RXXXXXX-YY-ZZZZZ' where X = shopId, Y = posId, Z = receiptId => ['XXXXXX', 'YY', 'ZZZZ']\n    return receipt.loadSavedReceipt(ids[0] /*shopId*/, ids[1] /*posId*/, ids[2] /*receiptId*/, doNotChangeUuid).then(function (loadedReceipt) {\n      if (!loadedReceipt) {\n        errorMsgAndActivateDefault(i18nInvalidReceiptNumber);\n        return $q.reject(loadedReceipt);\n      }\n      return loadedReceipt;\n    });\n  }\n  function errorMsgAndActivateDefault(msg) {\n    notification.pop(\"warning\", msg);\n    activateDefaultFunction();\n  }\n  function getBySerialNumber(barcode) {\n    articles.findArticleBySerialNumber(barcode).then(function (response) {\n      if (response.data) {\n        if (response.data.serialNumber) {\n          var article = response.data.article;\n          if (article) {\n            article.serialNo = response.data.serialNumber.serialNo;\n            article.available = response.data.serialNumber.status == 1;\n            article.maxQuantityOne = true;\n            article.hasSerialNo = true;\n            fluctuatingPropertiesHelper.setItemAsSerialized(article);\n            receipt.addToReceipt(article);\n            activateDefaultFunction();\n          }\n        } else {\n          getByBarcode(barcode);\n        }\n      } else getByBarcode(barcode);\n      keypadManager.hide();\n    }, function (data) {\n      $log.debug(data);\n      getByBarcode(barcode);\n    })[\"finally\"](function () {\n      removeAwaitingResponse(barcode);\n    });\n  }\n  function getByBarcode(barcode) {\n    articles.findArticle(barcode).then(/*#__PURE__*/function () {\n      var _ref5 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee5(response) {\n        return _regeneratorRuntime().wrap(function _callee5$(_context5) {\n          while (1) switch (_context5.prev = _context5.next) {\n            case 0:\n              if (response.status == 226) {\n                if (response.data.items.length > 1) {\n                  selectDimensionComboService.setMasterItemData(response.data);\n                  selectDimensionComboService.setCallBack(function (item) {\n                    receipt.addToReceipt(item);\n                    $state.go(\"root.split.pos\");\n                  });\n                  $state.go(\"root.split.selectdimensioncombo\");\n                } else if (response.data.items.length == 1) {\n                  getItemline(response.data.items[0].barcode);\n                }\n              } else {\n                if ($scope.enableSerialNumberTracking && response.data && response.data.type == 2) {\n                  keypadManager.hide();\n                  response.data.requiredToScanSerialNumber = true;\n                }\n                receipt.addToReceipt(response.data);\n                activateDefaultFunction();\n              }\n              keypadManager.hide();\n            case 2:\n            case \"end\":\n              return _context5.stop();\n          }\n        }, _callee5);\n      }));\n      return function (_x0) {\n        return _ref5.apply(this, arguments);\n      };\n    }(), function (data) {\n      errorMsgAndActivateDefault(i18nInvalidBarcode);\n    })[\"finally\"](function () {\n      removeAwaitingResponse(barcode);\n    });\n  }\n  function getItemline(barcode) {\n    addAwaitingResponse(barcode);\n    if (posConfig.tenantGeneralPosSettings && posConfig.tenantGeneralPosSettings.enableSerialNumberTracking) {\n      getBySerialNumber(barcode);\n    } else getByBarcode(barcode);\n  }\n  function getItemLineFromExchangeBarcode(barcode) {\n    addAwaitingResponse(barcode);\n    if (posConfig.tenantGeneralPosSettings && posConfig.tenantGeneralPosSettings.enableSerialNumberTracking) getBySerialNumber(barcode);else {\n      articles.findArticleByExchangeBarcode(barcode).then(function (response) {\n        var _response$data = response.data,\n          giftExchange = _response$data.giftExchange,\n          item = _response$data.item;\n        if (giftExchange.usedOn) {\n          notification.pop(\"warn\", i18nBeAware, i18nExchangeLabelUsed, 15000);\n        } else if (moment(giftExchange.exchangeExpiryDate).isBefore()) {\n          notification.pop(\"warn\", i18nBeAware, i18nExchangeLabelExpired, 15000);\n        }\n        fluctuatingPropertiesHelper.setReturnTransactionLineId(item, item.uuid);\n        receipt.addToReceipt(item);\n\n        // the emition of the 'returnitem' should only be done when the type is sale\n        var transactionType = receipt.getCurrentTransactionType();\n        if (transactionType == \"Sale\") {\n          //the emition of 'returnitem' flips the quantity and type, but also does this when this is already done, so it keeps flipping the quantity and type.\n          // it should only do this when the type is a 'Sale' which is the base state\n          $scope.$emit(\"returnitem\");\n        }\n        activateDefaultFunction();\n        keypadManager.hide();\n      }, function () {\n        errorMsgAndActivateDefault(i18nInvalidBarcode);\n      })[\"finally\"](function () {\n        return removeAwaitingResponse(barcode);\n      });\n    }\n  }\n  function getPricefromCode(ean, start, mulength, type) {\n    if (type === \"newPrice\") {\n      var finalPrice;\n      var priceString = ean.substring(start, ean.length);\n      if (ean.substring(0, 2) === \"00\") {\n        //Add second, first, fourth and third digit\n        finalPrice = priceString.substr(1, 1) + priceString.substr(0, 1) + priceString.substr(3, 1) + priceString.substr(2, 1) + \".\" + priceString.substring(mulength, priceString.length); //mainUnit + . + fracUnit\n      } else {\n        finalPrice = priceString.substring(0, mulength) + \".\" + priceString.substring(mulength, priceString.length); //mainUnit + . + fracUnit\n      }\n      setLinePrice(finalPrice);\n    } else {\n      setCustomPercentDiscount(inputValidationService.convertValueToRegionalFormat(ean.substring(start, ean.length)));\n    }\n  }\n  function addTextLine(text) {\n    keypadManager.hide();\n    receipt.addEnteredText(text);\n    activateDefaultFunction();\n  }\n  function addAwaitingResponse(id) {\n    awaitingResponses.push(id);\n  }\n  function removeAwaitingResponse(id) {\n    var index = awaitingResponses.indexOf(id);\n    if (index < 0) return;\n    awaitingResponses.splice(index, 1);\n  }\n  $scope.completeTransactionModal = {\n    title: \"completeTransactionModal/title\",\n    description: \"completeTransactionModal/description\",\n    descriptionPlaceholderValues: {},\n    isVisible: false,\n    hasTextInput: false,\n    buttons: [{\n      label: \"completeTransactionModal/button/back\",\n      type: \"danger\",\n      isDefault: true,\n      closes: true,\n      validateText: false,\n      action: function action() {}\n    }, {\n      label: \"completeTransactionModal/button/complete\",\n      type: \"success\",\n      isDefault: false,\n      closes: true,\n      validateText: false,\n      action: function action() {\n        $scope.goToPayment(\"Cash\");\n      }\n    }]\n  };\n  $scope.returnModal = returnReceiptService.getReturnModal();\n});\n","\"use strict\";\n\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); }\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _iterableToArray(r) { if (\"undefined\" != typeof Symbol && null != r[Symbol.iterator] || null != r[\"@@iterator\"]) return Array.from(r); }\nfunction _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nfunction _regeneratorRuntime() { \"use strict\"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return r; }; var t, r = {}, e = Object.prototype, n = e.hasOwnProperty, o = \"function\" == typeof Symbol ? Symbol : {}, i = o.iterator || \"@@iterator\", a = o.asyncIterator || \"@@asyncIterator\", u = o.toStringTag || \"@@toStringTag\"; function c(t, r, e, n) { return Object.defineProperty(t, r, { value: e, enumerable: !n, configurable: !n, writable: !n }); } try { c({}, \"\"); } catch (t) { c = function c(t, r, e) { return t[r] = e; }; } function h(r, e, n, o) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype); return c(a, \"_invoke\", function (r, e, n) { var o = 1; return function (i, a) { if (3 === o) throw Error(\"Generator is already running\"); if (4 === o) { if (\"throw\" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var u = n.delegate; if (u) { var c = d(u, n); if (c) { if (c === f) continue; return c; } } if (\"next\" === n.method) n.sent = n._sent = n.arg;else if (\"throw\" === n.method) { if (1 === o) throw o = 4, n.arg; n.dispatchException(n.arg); } else \"return\" === n.method && n.abrupt(\"return\", n.arg); o = 3; var h = s(r, e, n); if (\"normal\" === h.type) { if (o = n.done ? 4 : 2, h.arg === f) continue; return { value: h.arg, done: n.done }; } \"throw\" === h.type && (o = 4, n.method = \"throw\", n.arg = h.arg); } }; }(r, n, new Context(o || [])), !0), a; } function s(t, r, e) { try { return { type: \"normal\", arg: t.call(r, e) }; } catch (t) { return { type: \"throw\", arg: t }; } } r.wrap = h; var f = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var l = {}; c(l, i, function () { return this; }); var p = Object.getPrototypeOf, y = p && p(p(x([]))); y && y !== e && n.call(y, i) && (l = y); var v = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(l); function g(t) { [\"next\", \"throw\", \"return\"].forEach(function (r) { c(t, r, function (t) { return this._invoke(r, t); }); }); } function AsyncIterator(t, r) { function e(o, i, a, u) { var c = s(t[o], t, i); if (\"throw\" !== c.type) { var h = c.arg, f = h.value; return f && \"object\" == _typeof(f) && n.call(f, \"__await\") ? r.resolve(f.__await).then(function (t) { e(\"next\", t, a, u); }, function (t) { e(\"throw\", t, a, u); }) : r.resolve(f).then(function (t) { h.value = t, a(h); }, function (t) { return e(\"throw\", t, a, u); }); } u(c.arg); } var o; c(this, \"_invoke\", function (t, n) { function i() { return new r(function (r, o) { e(t, n, r, o); }); } return o = o ? o.then(i, i) : i(); }, !0); } function d(r, e) { var n = e.method, o = r.i[n]; if (o === t) return e.delegate = null, \"throw\" === n && r.i[\"return\"] && (e.method = \"return\", e.arg = t, d(r, e), \"throw\" === e.method) || \"return\" !== n && (e.method = \"throw\", e.arg = new TypeError(\"The iterator does not provide a '\" + n + \"' method\")), f; var i = s(o, r.i, e.arg); if (\"throw\" === i.type) return e.method = \"throw\", e.arg = i.arg, e.delegate = null, f; var a = i.arg; return a ? a.done ? (e[r.r] = a.value, e.next = r.n, \"return\" !== e.method && (e.method = \"next\", e.arg = t), e.delegate = null, f) : a : (e.method = \"throw\", e.arg = new TypeError(\"iterator result is not an object\"), e.delegate = null, f); } function w(t) { this.tryEntries.push(t); } function m(r) { var e = r[4] || {}; e.type = \"normal\", e.arg = t, r[4] = e; } function Context(t) { this.tryEntries = [[-1]], t.forEach(w, this), this.reset(!0); } function x(r) { if (null != r) { var e = r[i]; if (e) return e.call(r); if (\"function\" == typeof r.next) return r; if (!isNaN(r.length)) { var o = -1, a = function e() { for (; ++o < r.length;) if (n.call(r, o)) return e.value = r[o], e.done = !1, e; return e.value = t, e.done = !0, e; }; return a.next = a; } } throw new TypeError(_typeof(r) + \" is not iterable\"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, c(v, \"constructor\", GeneratorFunctionPrototype), c(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction), GeneratorFunction.displayName = c(GeneratorFunctionPrototype, u, \"GeneratorFunction\"), r.isGeneratorFunction = function (t) { var r = \"function\" == typeof t && t.constructor; return !!r && (r === GeneratorFunction || \"GeneratorFunction\" === (r.displayName || r.name)); }, r.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, c(t, u, \"GeneratorFunction\")), t.prototype = Object.create(v), t; }, r.awrap = function (t) { return { __await: t }; }, g(AsyncIterator.prototype), c(AsyncIterator.prototype, a, function () { return this; }), r.AsyncIterator = AsyncIterator, r.async = function (t, e, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(h(t, e, n, o), i); return r.isGeneratorFunction(e) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, g(v), c(v, u, \"Generator\"), c(v, i, function () { return this; }), c(v, \"toString\", function () { return \"[object Generator]\"; }), r.keys = function (t) { var r = Object(t), e = []; for (var n in r) e.unshift(n); return function t() { for (; e.length;) if ((n = e.pop()) in r) return t.value = n, t.done = !1, t; return t.done = !0, t; }; }, r.values = x, Context.prototype = { constructor: Context, reset: function reset(r) { if (this.prev = this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = \"next\", this.arg = t, this.tryEntries.forEach(m), !r) for (var e in this) \"t\" === e.charAt(0) && n.call(this, e) && !isNaN(+e.slice(1)) && (this[e] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0][4]; if (\"throw\" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(r) { if (this.done) throw r; var e = this; function n(t) { a.type = \"throw\", a.arg = r, e.next = t; } for (var o = e.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i[4], u = this.prev, c = i[1], h = i[2]; if (-1 === i[0]) return n(\"end\"), !1; if (!c && !h) throw Error(\"try statement without catch or finally\"); if (null != i[0] && i[0] <= u) { if (u < c) return this.method = \"next\", this.arg = t, n(c), !0; if (u < h) return n(h), !1; } } }, abrupt: function abrupt(t, r) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var n = this.tryEntries[e]; if (n[0] > -1 && n[0] <= this.prev && this.prev < n[2]) { var o = n; break; } } o && (\"break\" === t || \"continue\" === t) && o[0] <= r && r <= o[2] && (o = null); var i = o ? o[4] : {}; return i.type = t, i.arg = r, o ? (this.method = \"next\", this.next = o[2], f) : this.complete(i); }, complete: function complete(t, r) { if (\"throw\" === t.type) throw t.arg; return \"break\" === t.type || \"continue\" === t.type ? this.next = t.arg : \"return\" === t.type ? (this.rval = this.arg = t.arg, this.method = \"return\", this.next = \"end\") : \"normal\" === t.type && r && (this.next = r), f; }, finish: function finish(t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[2] === t) return this.complete(e[4], e[3]), m(e), f; } }, \"catch\": function _catch(t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[0] === t) { var n = e[4]; if (\"throw\" === n.type) { var o = n.arg; m(e); } return o; } } throw Error(\"illegal catch attempt\"); }, delegateYield: function delegateYield(r, e, n) { return this.delegate = { i: x(r), r: e, n: n }, \"next\" === this.method && (this.arg = t), f; } }, r; }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"next\", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"throw\", n); } _next(void 0); }); }; }\npos.factory(\"receipt\", function ($log, $filter, posStorage, notification, saleRepository, posConfig, $translate, clerkLoginService, giftCertificate, webOrderService, fluctuatingPropertiesHelper, $q, uuid, $rootScope, $injector, $state, $timeout, inputValidationService, transactionTypeEnum, eventBus, articles, findCustomerService, itemInfoService, promptEveryType) {\n  \"use strict\";\n\n  var receipt;\n  var saleType = \"Sale\";\n  var returnType = \"Return\";\n  var receiptService = {\n    selectedItemLineIndex: -1,\n    lastTotal: 0,\n    lastChange: 0\n  };\n  var i18nTotalDiscountsLeft;\n  var i18nWeborderPayment;\n  var i18nAccountDeposit;\n  var i18nDeductLoyalty;\n  var i18nDownPayment;\n  var i18nShipment;\n  receiptService.discountExcludes = [];\n  receiptService.nonPersistantDiscountTypes = [];\n  posConfig.whenReady().then(function () {\n    return loadConfig();\n  });\n\n  // In order to adjust for discount rounding difference, the discounts needs\n  // to be recalculated when the number of items in the basket changes\n  $rootScope.$watch(function () {\n    var totalQty = 0;\n    if (receipt) {\n      angular.forEach(receipt.items, function (item) {\n        totalQty += item.quantity;\n      });\n    }\n    return totalQty;\n  }, function (qty, previousQty) {\n    if (!qty || !receipt) return;\n    var isDiscounted = receiptService.receiptHasDiscount();\n    if (qty != previousQty && isDiscounted) receiptService.reCalculateDiscounts();\n  });\n  receiptService.loadReceipt = /*#__PURE__*/function () {\n    var _ref = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee(newReceipt) {\n      var populatedReceipt, receiptIds, deviceReceiptId, apiReceiptId, clientReceiptId, lastReceiptId;\n      return _regeneratorRuntime().wrap(function _callee$(_context) {\n        while (1) switch (_context.prev = _context.next) {\n          case 0:\n            $log.debug(\"load receipt\");\n            if (!newReceipt) {\n              _context.next = 5;\n              break;\n            }\n            _context.next = 4;\n            return receiptService.populateMissingItemProperties(newReceipt);\n          case 4:\n            populatedReceipt = _context.sent;\n          case 5:\n            receipt = decimalifyReceipt(populatedReceipt || newReceipt || posStorage.get(\"receipt\")) || {\n              items: [],\n              payments: []\n            };\n            if (receipt.customerNumber && receipt.customerNumber != \"0\") {\n              findCustomerService.getCustomerByNumber(receipt.customerNumber).then(function (customer) {\n                return findCustomerService.setSelectedCustomer(customer);\n              });\n            }\n\n            // TODO: Check all ARMs as well\n\n            selectLastItemLine();\n            _context.prev = 8;\n            _context.next = 11;\n            return Promise.all([saleRepository.device().lastReceiptId(posConfig.posId), saleRepository.api.lastReceiptId()]);\n          case 11:\n            receiptIds = _context.sent;\n            deviceReceiptId = receiptIds[0];\n            apiReceiptId = receiptIds[1].data;\n            clientReceiptId = getReceiptId();\n            lastReceiptId = Math.max(apiReceiptId, deviceReceiptId, clientReceiptId); // maybe we have undelivered sale, and then we don't want to set our ids back to the one the backend knows about\n            if (lastReceiptId > clientReceiptId) {\n              setLastUsedReceiptId(lastReceiptId);\n            }\n          case 17:\n            _context.prev = 17;\n            receipt.receiptId = getReceiptId();\n            receipt.posId = posConfig.posId;\n            if (newReceipt) persistReceipt();\n            return _context.finish(17);\n          case 22:\n          case \"end\":\n            return _context.stop();\n        }\n      }, _callee, null, [[8,, 17, 22]]);\n    }));\n    return function (_x) {\n      return _ref.apply(this, arguments);\n    };\n  }();\n  function decimalifyReceipt(receipt) {\n    if (!receipt) return receipt;\n    receipt.items = receipt.items || [];\n    receipt.payments = receipt.payments || [];\n    for (var i = 0; i < receipt.items.length; i++) {\n      var item = receipt.items[i];\n      item.salesPrice = new Decimal(item.salesPrice);\n      item.costPrice = new Decimal(item.costPrice || 0);\n      // circumvent max 15 sd limitation in Decimal\n      // we may need to solve this by avoiding JavaScript numbers: https://github.com/MikeMcl/bignumber.js/issues/11\n      item.effectiveSalesPrice = new Decimal(item.effectiveSalesPrice + \"\");\n      item.calculatedDiscount = item.calculatedDiscount ? new Decimal(item.calculatedDiscount) : new Decimal(0);\n    }\n    for (var k = 0; k < receipt.payments.length; k++) {\n      var payment = receipt.payments[k];\n      payment.amount = new Decimal(payment.amount);\n      payment.rounding = new Decimal(payment.rounding);\n    }\n    return receipt;\n  }\n  receiptService.decimalifyReceipt = decimalifyReceipt;\n  function selectDiscountedItemLine(index) {\n    receiptService.selectedItemLineIndex = index;\n  }\n  function selectLastItemLine() {\n    if (receipt !== undefined && receipt !== null && receipt.items.length > 0) {\n      var lastIndex = receipt.items.length - 1;\n      receiptService.selectedItemLineIndex = lastIndex;\n\n      //Set selected item here for stock widget\n      $rootScope.selectedItem = receipt.items[lastIndex];\n    } else {\n      receiptService.selectedItemLineIndex = -1;\n      $rootScope.selectedItem = false;\n    }\n    eventBus.notify(eventBus.events.pos.itemSelected, $rootScope.selectedItem);\n  }\n  function createEmptyReceipt() {\n    var paymentService = $injector.get(\"paymentService\");\n    if (paymentService.isNavigationBlocked(receipt.payments)) {\n      $timeout(function () {\n        $state.go(\"root.split.payment\");\n      });\n      receipt.clerk = clerkLoginService.currentUser().identifier;\n      return receipt;\n    }\n    receipt = {};\n    receipt.receiptId = getReceiptId();\n    receipt.dataType = \"Sale\";\n    receipt.shop = posConfig.shopId;\n    receipt.clerk = clerkLoginService.currentUser().clerkNumber;\n    receipt.clerkName = clerkLoginService.currentUser().fullName;\n    receipt.posId = posConfig.posId;\n    receipt.date = moment(new Date()).format();\n    receipt.items = [];\n    receipt.payments = [];\n    receipt.selectedItemLineIndex = -1;\n    receipt.chargeCompany = false;\n    $rootScope.selectedItem = false;\n    return receipt;\n  }\n  function persistReceipt() {\n    var currentPosUser = clerkLoginService.currentUser();\n    if ((!receipt.clerkId || !receipt.clerk) && currentPosUser) {\n      receipt.clerk = currentPosUser.clerkNumber;\n      receipt.clerkName = currentPosUser.fullName;\n      $log.debug(\"Clerk info was missing, manually added current clerk\");\n    }\n    if (receipt.items.find(function (i) {\n      return i.templateType == \"expense\";\n    })) {\n      receiptService.setTransactionType(transactionTypeEnum.expense);\n    } else if (receipt.items.length == receipt.items.filter(function (i) {\n      return i.quantity > 0;\n    }).length) {\n      receiptService.setTransactionType(transactionTypeEnum.sale);\n    } else if (receipt.items.length == receipt.items.filter(function (i) {\n      return i.quantity < 0;\n    }).length) {\n      receiptService.setTransactionType(transactionTypeEnum[\"return\"]);\n    } else {\n      receiptService.setTransactionType(transactionTypeEnum.exchange);\n    }\n    receipt.shopCurrencyCode = posConfig.getLocalCurrency().currencyCode;\n    posStorage.set(\"receipt\", receipt);\n    $rootScope.$broadcast(\"receipt:updated\", receipt);\n  }\n  receiptService.persistReceipt = persistReceipt;\n  function getReceiptId() {\n    return posStorage.get(\"last_used_receiptId\") + 1 || 1;\n  }\n  function setLastUsedReceiptId(receiptId) {\n    var currentId = getReceiptId() - 1;\n    if (receiptId <= currentId) {\n      return;\n    }\n    posStorage.set(\"last_used_receiptId\", receiptId);\n  }\n  receiptService.generateUUID = uuid;\n  receiptService.persist = persistReceipt;\n  receiptService.prepareReceipt = function () {\n    receipt = createEmptyReceipt();\n    persistReceipt();\n    $rootScope.$broadcast(\"receipt:new\");\n  };\n  receiptService.getReceipt = function () {\n    return receipt;\n  };\n  receiptService.containsDeactivatedVoucher = function () {\n    return receipt.items.some(function (i) {\n      return i.templateType === \"voucher\" && i.transactionType === \"Return\";\n    });\n  };\n  receiptService.getGiftReceipt = function () {\n    var giftReceipt = angular.copy(receipt);\n    giftReceipt.items = giftReceipt.items.filter(function (i) {\n      return i.isGift;\n    });\n    return giftReceipt.items.length ? giftReceipt : null;\n  };\n  receiptService.clearReceipt = function () {\n    var receiptClone = JSON.parse(JSON.stringify(receipt));\n    receipt.items = [];\n    receipt.payments = [];\n    $rootScope.selectedItem = false;\n    findCustomerService.removeSelectedCustomer();\n    receiptService.selectedItemLineIndex = -1;\n    persistReceipt();\n    $rootScope.$broadcast(\"receipt:clear\", receiptClone);\n  };\n  receiptService.updateReceipt = function (newValues) {\n    receipt = _objectSpread(_objectSpread({}, receipt), newValues);\n    persistReceipt();\n  };\n  receiptService.closeReceipt = function () {\n    var receiptCopy = angular.copy(receipt);\n    this.lastTotal = this.getTotal();\n    this.lastChange = this.getChangeTotal();\n    setLastUsedReceiptId(receipt.receiptId);\n    receipt = {\n      items: [],\n      payments: []\n    };\n    persistReceipt();\n    $rootScope.$broadcast(\"receipt:close\", receiptCopy);\n    $rootScope.$broadcast(\"receipt:change\", this.lastChange);\n  };\n  receiptService.setTransactionType = function (type) {\n    if (receipt.transactionType != transactionTypeEnum.cashStatement) {\n      receipt.transactionType = type;\n    }\n  };\n  receiptService.setArmId = function (id) {\n    receipt.armId = id;\n    persistReceipt();\n  };\n  receiptService.addToReceipt = /*#__PURE__*/function () {\n    var _ref2 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee2(article, overrideAutoaggregate) {\n      var autoAggregateItemLines, giftAidAttributeId, attribute, i;\n      return _regeneratorRuntime().wrap(function _callee2$(_context2) {\n        while (1) switch (_context2.prev = _context2.next) {\n          case 0:\n            autoAggregateItemLines = article.maxQuantityOne ? false : posConfig.getOptions().autoAggregateItemLines;\n            giftAidAttributeId = posConfig.getGiftAidAttributeId();\n            if (giftAidAttributeId && article.itemAttributeValues) {\n              attribute = article.itemAttributeValues.find(function (a) {\n                return a.customAttributeId == giftAidAttributeId;\n              });\n              if (attribute && (attribute.attributeValue ? attribute.attributeValue == \"true\" : false) == true) {\n                fluctuatingPropertiesHelper.setItemAsGiftAidable(article);\n              }\n            }\n            if (article.requiredToScanSerialNumber) {\n              autoAggregateItemLines = false;\n              article.maxQuantityOne = true;\n              article.serialButtonIsVisible = true;\n            } else {\n              article.serialButtonIsVisible = false;\n            }\n            _context2.next = 6;\n            return itemInfoService.executeItemInfo(receipt, article, promptEveryType.line);\n          case 6:\n            if (!(autoAggregateItemLines && !overrideAutoaggregate)) {\n              _context2.next = 17;\n              break;\n            }\n            i = 0;\n          case 8:\n            if (!(i < receipt.items.length)) {\n              _context2.next = 17;\n              break;\n            }\n            if (!(receipt.items[i].templateType === \"sale\")) {\n              _context2.next = 14;\n              break;\n            }\n            if (!(receipt.items[i].variantId === article.variantId && receipt.items[i].calculatedDiscount.equals(0) && receipt.items[i].maxQuantityOne === false)) {\n              _context2.next = 14;\n              break;\n            }\n            receiptService.addItem(i);\n            selectDiscountedItemLine(i);\n            return _context2.abrupt(\"return\");\n          case 14:\n            i++;\n            _context2.next = 8;\n            break;\n          case 17:\n            // Extend Article with properties needed for receipt\n            article.quantity = article.quantity || 1;\n            article.discount = 0;\n            article.returnCode = \"0\";\n            article.discountCode = \"0\";\n            article.salesPrice = new Decimal(article.salesPrice);\n            article.costPrice = new Decimal(article.costPrice || 0);\n            article.calculatedDiscount = new Decimal(0); //Stores discount in value. eg 59 - 10% = 5.9\n            article.effectiveSalesPrice = article.salesPrice; //To store orignal salesPrice.\n\n            article.transactionType = saleType; //To store the type of sale\n            if (article.templateType != \"customerOrder\") {\n              article.templateType = \"sale\";\n            }\n            article.enteredText = \"\";\n            article.insuranceNumber = \"\";\n            article.uuid = receiptService.generateUUID();\n            article.clerkId = receipt.clerk;\n            article.discountDetails = [];\n            receipt.items.push(article);\n            selectLastItemLine();\n            persistReceipt();\n            $rootScope.$broadcast(\"receipt:article:added\", article.uuid);\n          case 36:\n          case \"end\":\n            return _context2.stop();\n        }\n      }, _callee2);\n    }));\n    return function (_x2, _x3) {\n      return _ref2.apply(this, arguments);\n    };\n  }();\n  receiptService.addReceiptItems = function (items) {\n    receipt.items = receipt.items.concat(items);\n    persistReceipt();\n  };\n  receiptService.addItemGroup = function (price, itemType, itemNo, vat, taxCodeId, imageUrl, transactionType, enteredText) {\n    var object = {};\n    object.effectiveSalesPrice = object.salesPrice = new Decimal(price);\n    object.calculatedDiscount = new Decimal(0);\n    object.vat = vat;\n    object.taxCodeId = taxCodeId;\n    object.quantity = 1;\n    object.itemgroup = itemNo;\n    object.itemgroupName = itemType;\n    object.templateType = \"itemgroup\";\n    object.transactionType = transactionType || saleType;\n    object.uuid = receiptService.generateUUID();\n    object.clerkId = receipt.clerk;\n    object.discountDetails = [];\n    object.enteredText = enteredText || null;\n    object.imageUrl = imageUrl;\n    receipt.items.push(object);\n    selectLastItemLine();\n    persistReceipt();\n  };\n  receiptService.addWebOrder = function (price, itemGroup, orderNo, webShopId, isNetto, vat, source) {\n    var object = {};\n    object.effectiveSalesPrice = object.salesPrice = new Decimal(price);\n    object.calculatedDiscount = new Decimal(0);\n    object.quantity = 1;\n    object.itemgroup = itemGroup;\n    object.itemgroupName = i18nWeborderPayment;\n    object.webOrderNumber = orderNo;\n    object.webShopId = webShopId;\n    object.templateType = \"weborder\";\n    object.transactionType = saleType;\n    object.uuid = receiptService.generateUUID();\n    object.clerkId = receipt.clerk;\n    object.isNetto = isNetto;\n    object.source = source || \"weborder\";\n    object.vat = vat;\n    fluctuatingPropertiesHelper.setWebshopId(object, webShopId);\n    receipt.items.push(object);\n    selectLastItemLine();\n    persistReceipt();\n  };\n  receiptService.addCustomerOrder = function (customerOrder) {\n    var _this = this;\n    $log.debug(customerOrder);\n    var customerOrderTotalToPay = 0.0;\n    customerOrder.customerOrderLines.forEach(function (line) {\n      if (line.article.type == 2 && line.article.requiredToScanSerialNumber && line.article.quantity > 1) {\n        for (var i = 0; i < line.article.quantity; i++) {\n          var article = JSON.parse(JSON.stringify(line.article));\n          article.quantity = 1;\n          article.templateType = \"customerOrder\";\n          fluctuatingPropertiesHelper.setCustomerOrderNo(article, customerOrder.orderNo);\n          _this.addToReceipt(article, true);\n        }\n      } else {\n        var article = JSON.parse(JSON.stringify(line.article));\n        article.templateType = \"customerOrder\";\n        fluctuatingPropertiesHelper.setCustomerOrderNo(article, customerOrder.orderNo);\n        _this.addToReceipt(article, true);\n      }\n      var lineTotal = line.salesPrice * line.quantity;\n      customerOrderTotalToPay = customerOrderTotalToPay + lineTotal;\n    });\n    if (customerOrder.isPaid === true) {\n      var local = posConfig.getLocalCurrency();\n      receiptService.addPayment({\n        amount: customerOrderTotalToPay,\n        paymentType: \"PrePaid\",\n        rounding: new Decimal(0),\n        currencyCode: local.currencyCode,\n        exchangeRate: local.exchangeRate,\n        completed: true\n      });\n    }\n    selectLastItemLine();\n    persistReceipt();\n  };\n  receiptService.addExpense = function (price, itemType, itemNo) {\n    var object = {};\n    object.effectiveSalesPrice = object.salesPrice = new Decimal(price);\n    object.quantity = 1;\n    object.parameter1 = itemType;\n    object.itemgroup = itemNo;\n    object.itemgroupName = itemType;\n    object.templateType = \"expense\";\n    object.transactionType = saleType;\n    object.uuid = receiptService.generateUUID();\n    object.clerkId = receipt.clerk;\n    receipt.items.push(object);\n    selectLastItemLine();\n    persistReceipt();\n  };\n  receiptService.addGiftCertificate = function (price, giftNo, discount) {\n    $log.debug(\"add gift certificate\");\n    var object = {};\n    var isGiftCert = giftNo.startsWith(\"1\");\n    object.calculatedDiscount = new Decimal(discount || 0);\n    object.effectiveSalesPrice = new Decimal(price).minus(object.calculatedDiscount);\n    object.salesPrice = new Decimal(price);\n    object.quantity = 1;\n    object.disableDiscount = true;\n    object.parameter1 = isGiftCert ? \"Gift Certificate\" : \"Credit Note\";\n    object.voucherNumber = giftNo;\n    object.templateType = isGiftCert ? \"giftCertificate\" : \"creditNote\";\n    object.itemgroup = isGiftCert ? 9911 : 9912;\n    object.transactionType = saleType;\n    object.uuid = receiptService.generateUUID();\n    object.clerkId = receipt.clerk;\n    object.discountDetails = [];\n    object.vat = isGiftCert ? posConfig.getGiftCertificateVat() : posConfig.getCreditNoteVat();\n    giftCertificate.setDateSpecificExpiry(object, receipt.date);\n    receipt.items.push(object);\n    selectLastItemLine();\n    persistReceipt();\n  };\n  receiptService.addVoucher = function (voucherNo, value, description, ean, type, quantity, clerkId) {\n    $log.debug(\"add voucher\");\n    var voucher = {};\n    voucher.calculatedDiscount = new Decimal(0);\n    voucher.effectiveSalesPrice = new Decimal(value);\n    voucher.salesPrice = new Decimal(value);\n    voucher.quantity = quantity;\n    voucher.voucherNumber = voucherNo;\n    voucher.templateType = \"voucher\";\n    voucher.parameter1 = description;\n    voucher.parameter2 = ean;\n    voucher.transactionType = type;\n    voucher.uuid = receiptService.generateUUID();\n    voucher.clerkId = clerkId;\n    voucher.disableDiscount = true, voucher.itemgroup = 0;\n    voucher.discountDetails = [];\n    receipt.items.push(voucher);\n    selectLastItemLine();\n    persistReceipt();\n    return voucher;\n  };\n  receiptService.containsVoucher = function (voucherNo) {\n    var item = receipt.items.find(function (i) {\n      return i.voucherNumber == voucherNo;\n    });\n    if (item) {\n      return true;\n    }\n    return false;\n  };\n  receiptService.addDownPaymentNote = function (price, giftNo) {\n    var downPaymentIndex = receipt.items.findIndex(function (x) {\n      return x.templateType === \"downPayment\";\n    });\n    if (downPaymentIndex >= 0) {\n      receipt.items[downPaymentIndex].effectiveSalesPrice = new Decimal(price);\n      receipt.items[downPaymentIndex].salesPrice = new Decimal(price);\n      receipt.items[downPaymentIndex].voucherNumber = giftNo;\n      return;\n    }\n    var object = {};\n    var isGiftCert = false;\n    object.calculatedDiscount = new Decimal(0);\n    object.effectiveSalesPrice = new Decimal(price);\n    object.salesPrice = new Decimal(price);\n    object.quantity = 1;\n    object.parameter1 = i18nDownPayment;\n    object.voucherNumber = giftNo;\n    object.templateType = \"downPayment\";\n    object.itemgroup = 9911;\n    object.transactionType = saleType;\n    object.uuid = receiptService.generateUUID();\n    object.clerkId = receipt.clerk;\n    object.discountDetails = [];\n    object.vat = 0;\n    receipt.items.push(object);\n    selectLastItemLine();\n    persistReceipt();\n  };\n  receiptService.addShipment = function (price, address) {\n    var object = {};\n    var isGiftCert = false;\n    object.calculatedDiscount = new Decimal(0);\n    object.effectiveSalesPrice = new Decimal(price);\n    object.salesPrice = new Decimal(price);\n    object.quantity = 1;\n    object.parameter1 = i18nShipment;\n    object.voucherNumber = \"\";\n    object.templateType = \"shipmentTemplate\";\n    object.itemgroup = 0;\n    object.transactionType = saleType;\n    object.enteredText = address;\n    object.uuid = receiptService.generateUUID();\n    object.clerkId = receipt.clerk;\n    object.discountDetails = [];\n    object.vat = isGiftCert ? posConfig.getGiftCertificateVat() : posConfig.getCreditNoteVat();\n    receipt.items.push(object);\n    selectLastItemLine();\n    persistReceipt();\n  };\n  receiptService.addAccountDeposit = function (amount) {\n    var object = {\n      calculatedDiscount: new Decimal(0),\n      effectiveSalesPrice: new Decimal(amount),\n      salesPrice: new Decimal(amount),\n      quantity: 1,\n      parameter1: i18nAccountDeposit,\n      templateType: \"accountdeposit\",\n      itemgroup: 9913,\n      transactionType: saleType,\n      uuid: receiptService.generateUUID(),\n      clerkId: receipt.clerk,\n      discountDetails: []\n    };\n    receipt.items.push(object);\n    selectLastItemLine();\n    persistReceipt();\n  };\n  receiptService.addInsurance = function (price, itemType, itemNo, vat, insuranceNumber) {\n    var object = {};\n    object.effectiveSalesPrice = object.salesPrice = new Decimal(price);\n    object.calculatedDiscount = new Decimal(0);\n    object.vat = vat;\n    object.quantity = 1;\n    object.itemgroup = itemNo;\n    object.itemgroupName = itemType;\n    object.templateType = \"insurance\";\n    object.transactionType = saleType;\n    object.uuid = receiptService.generateUUID();\n    object.clerkId = receipt.clerk;\n    object.insuranceNumber = insuranceNumber;\n    object.discountDetails = [];\n    receipt.items.push(object);\n    selectLastItemLine();\n    persistReceipt();\n  };\n  receiptService.addSet = function (items) {\n    angular.forEach(items, function (item) {\n      item.transactionType = saleType;\n      item.clerkId = receipt.clerk;\n      receipt.items.push(item);\n    });\n    selectLastItemLine();\n    persistReceipt();\n  };\n  receiptService.addPayment = function (payment) {\n    payment.amount = new Decimal(payment.amount.toString());\n    payment.rounding = new Decimal(payment.rounding.toString());\n    payment.uuid = this.generateUUID();\n    this.getReceipt().payments.push(payment);\n    persistReceipt();\n  };\n  receiptService.removePayment = function (uuid) {\n    for (var i = 0; i < receipt.payments.length; i++) {\n      if (receipt.payments[i].uuid === uuid) receipt.payments.splice(i, 1);\n    }\n    persistReceipt();\n  };\n  receiptService.removeset = function () {\n    for (var i = receipt.items.length; i--;) {\n      if (receipt.items[i].setNo === receiptService.selectedSetNo) {\n        receipt.items.splice(i, 1);\n      }\n    }\n    persistReceipt();\n  };\n  receiptService.removeItem = function (itemIndex) {\n    if (itemIndex === undefined) itemIndex = receiptService.selectedItemLineIndex;\n    var itemUuid = receipt.items[itemIndex].uuid;\n    $rootScope.$broadcast(\"receipt:article:removing\", itemUuid);\n    modifyQuantity(itemIndex, -1);\n    if (receipt.items[itemIndex].templateType === \"setItem\" || receipt.items[itemIndex].templateType === \"setStart\" || receipt.items[itemIndex].templateType === \"setEnd\") {\n      receiptService.removeset();\n      selectLastItemLine();\n    } else if (receipt.items[itemIndex].quantity === 0) {\n      receipt.items.splice(itemIndex, 1);\n      if (receipt.items.length - 1 < itemIndex) {\n        selectLastItemLine();\n      } else {\n        $rootScope.selectedItem = receipt.items[itemIndex];\n      }\n    }\n    persistReceipt();\n    return true;\n  };\n  receiptService.removeLine = function (itemIndex) {\n    $log.debug(itemIndex);\n    var itemUuid = receipt.items[itemIndex].uuid;\n    $rootScope.$broadcast(\"receipt:article:removing\", itemUuid);\n    receipt.items[itemIndex].quantity = 0;\n    receipt.items.splice(itemIndex, 1);\n    if (receipt.items.length - 1 < itemIndex) {\n      selectLastItemLine();\n    } else {\n      $rootScope.selectedItem = receipt.items[itemIndex];\n    }\n    persistReceipt();\n    return true;\n  };\n  receiptService.removeLineCustomerOrder = function (itemIndex) {\n    $log.debug(itemIndex);\n    var itemUuid = receipt.items[itemIndex].uuid;\n    $rootScope.$broadcast(\"receipt:article:removing\", itemUuid);\n    receipt.items[itemIndex].quantity = 0;\n    // When remove customer order from basket, remove both item and payment record associated with receipt\n    receipt.items.splice(itemIndex, 1);\n    receipt.payments.splice(itemIndex, 1);\n    if (receipt.items.length - 1 < itemIndex) {\n      selectLastItemLine();\n    } else {\n      $rootScope.selectedItem = receipt.items[itemIndex];\n    }\n    persistReceipt();\n    return true;\n  };\n  receiptService.addItem = function (itemIndex) {\n    if (itemIndex === undefined) itemIndex = receiptService.selectedItemLineIndex;\n    if (receipt.items[itemIndex].templateType === \"giftCertificate\") {\n      receiptService.addGiftCertificate(receipt.items[itemIndex].salesPrice, giftCertificate.generateGiftCertificate(), receipt.items[itemIndex].calculatedDiscount);\n    } else {\n      modifyQuantity(itemIndex, 1);\n    }\n    persistReceipt();\n  };\n  receiptService.setIsGift = function (isGift) {\n    var itemIndex = receiptService.selectedItemLineIndex;\n    receipt.items[itemIndex].isGift = isGift;\n    persistReceipt();\n  };\n  receiptService.setHasSerialNo = function (hasSerialNo) {\n    var itemIndex = receiptService.selectedItemLineIndex;\n    receipt.items[itemIndex].hasSerialNo = hasSerialNo;\n    receipt.items[itemIndex].requiredToScanSerialNumber = receipt.items[itemIndex].type == 2;\n    persistReceipt();\n  };\n  receiptService.setOrderInStore = function (isOrderInStore) {\n    var itemIndex = receiptService.selectedItemLineIndex;\n    var item = receipt.items[itemIndex];\n    item.isOrderInStore = isOrderInStore;\n    item.templateType = isOrderInStore ? \"weborder\" : \"sale\";\n    fluctuatingPropertiesHelper.setWebOrderType(item, isOrderInStore ? 1 : 0);\n    persistReceipt();\n  };\n  receiptService.setExcludeFromLoyalty = function (isExcludedFromLoyalty) {\n    var itemIndex = receiptService.selectedItemLineIndex;\n    if (itemIndex > -1) {\n      var item = receipt.items[itemIndex];\n      item.isExcludedFromLoyalty = isExcludedFromLoyalty;\n      fluctuatingPropertiesHelper.setIsExcludedFromLoyalty(item, isExcludedFromLoyalty);\n      persistReceipt();\n    }\n  };\n  function modifyQuantity(itemIndex, changeValue) {\n    var modifier = receipt.items[itemIndex].transactionType == saleType ? changeValue : changeValue * -1;\n    if (!inputValidationService.validateQuantity(receipt.items[itemIndex].quantity + modifier)) throw \"QUANTITY_VALUE_EXCEEDED\";\n    var item = receipt.items[itemIndex];\n    var previousQuantity = item.quantity;\n    item.roundingDiff = 0;\n    item.quantity += modifier;\n\n    // Since roundingDiff change when item quantity is modified, it needs to be recalculated.\n    // This is already done by triggering reCalc on receipt quantity changes, but we need to\n    // handle remove specificly discounts that have special functionality (like PPE)\n    if (!item.effectiveSalesPrice.eq(item.salesPrice) && item.discountDetails.some(function (detail) {\n      return detail.type == \"PPE\";\n    })) {\n      receiptService.cancelLineDiscount(null, receiptService.selectedItemLineIndex);\n    }\n    if (!inputValidationService.validateAmount(receiptService.getSelectedLineTotal(item))) {\n      receipt.items[itemIndex].quantity = previousQuantity;\n      throw \"AMOUNT_VALUE_EXCEEDED\";\n    }\n  }\n\n  /**\n   * Get the total value of the items added to the receipt\n   * @return {Number} Total value of receipt\n   */\n  receiptService.getTotal = function () {\n    var total = new Decimal(0);\n    angular.forEach(receipt.items, function (article) {\n      total = total.plus(receiptService.getSelectedLineTotal(article));\n    });\n    return total;\n  };\n  receiptService.getTotalWithoutDownpayment = function () {\n    var total = new Decimal(0);\n    angular.forEach(receipt.items, function (article) {\n      if (article.templateType != \"downPayment\") {\n        total = total.plus(receiptService.getSelectedLineTotal(article));\n      }\n    });\n    return total;\n  };\n  receiptService.getTotalWithoutShippingFee = function () {\n    var total = new Decimal(0);\n    angular.forEach(receipt.items, function (article) {\n      if (article.templateType != \"downPayment\" && article.templateType != \"shipmentTemplate\") {\n        total = total.plus(receiptService.getSelectedLineTotal(article));\n      }\n    });\n    return total;\n  };\n  receiptService.getPaymentTypeTotal = function (paymentType) {\n    var payments = receipt.payments.filter(function (p) {\n      return p.paymentType === paymentType;\n    });\n    var total = new Decimal(0);\n    angular.forEach(payments, function (payment) {\n      if (payment.completed) {\n        total = total.plus(payment.amount.plus(payment.rounding).times(payment.exchangeRate).div(100));\n      }\n    });\n    return total;\n  };\n\n  /**\n   * Gets the total non-runded value of payments, including change.\n   * @return {Number} Total payments in the receipt\n   */\n  receiptService.getPaymentsTotal = function () {\n    var total = new Decimal(0);\n    angular.forEach(receipt.payments, function (payment) {\n      if (payment.completed) {\n        total = total.plus(payment.amount.plus(payment.rounding).times(payment.exchangeRate).div(100));\n      }\n    });\n    return total;\n  };\n\n  /**\n   * Get a human friendly total of change, i.e. inclusive rounding\n   * @return {Number} Human friendly change total\n   */\n  receiptService.getChangeTotal = function () {\n    var total = new Decimal(0);\n    angular.forEach(receipt.payments, function (payment) {\n      if (payment.paymentType === \"Change\") total = total.plus(payment.amount);\n    });\n    return total;\n  };\n  receiptService.getTotalWithoutDiscount = function () {\n    var total = new Decimal(0);\n    angular.forEach(receipt.items, function (article) {\n      if (article.templateType != \"downPayment\") {\n        total = total.plus(article.salesPrice.times(article.quantity));\n      }\n    });\n    return total;\n  };\n\n  /**\n   *  The result will be cut off at 3 decimals unrounded and then rounded down to 2 decimals.\n   * This is because decimal.js and C# decimal does not agree when there's 28 or 29 significant digits\n   * When ever they do not agree we get a rounding error.\n   *\n   * Cutting at 3 and then rounding down is a hack to avoid having the two environments calculate differently.\n   * Note however that this method can give rounding errors which should be addressed by the user of this method.\n   * @param  {number|Decimal} discount  discount in percentage\n   * @param  {number|undefined|null} lineIndex the index of the line you want to modify\n   * @param  {object|undefined} discountDetails contains information about type of discount (Line, Total, PPE, etc) and if\n   * it was set as an amount or percentage\n   * @param {boolean|undefined} addToDiscountList boolean that states if the discount should be saved or not (reCalculations)\n   */\n  receiptService.setLineDiscount = function (discount, discountReason, lineIndex, discountDetails, addToDiscountList) {\n    if (!(discount instanceof Decimal)) discount = new Decimal(discount);\n\n    // If function is called without following attributes, defaulting on a line discount\n    if (addToDiscountList === undefined) addToDiscountList = true;\n    if (discountDetails === undefined) discountDetails = {\n      type: \"Line\"\n    };\n    if (receipt.items.length === 0 || discount === 0) return;\n    if (lineIndex === undefined) lineIndex = receiptService.selectedItemLineIndex;\n    var item = receipt.items[lineIndex];\n    receiptService.setItemDiscountPercentage(item, discount, discountReason, discountDetails, addToDiscountList);\n    persistReceipt();\n  };\n\n  /**\n   * Calculates the effectiveSalesPrice and calculatedDiscount for an item\n   * The item object reference is modified and then returned. No new items are being created.\n   *\n   * @param  {[type]} item     The item to modify\n   * @param  {[type]} discount The discount in percentage to apply to the item\n   * @return {object}          The modified item\n   */\n  receiptService.setItemDiscountPercentage = function (item, discount, discountReason, discountDetails, addToDiscountList) {\n    var _item$discountDetails;\n    if (!item.calculatedDiscount) item.calculatedDiscount = new Decimal(0);\n    if (discountReason) {\n      item.discountReasonName = discountReason.reason;\n      item.discountCode = discountReason.id;\n    }\n\n    // When recalculating discount, you might not want to add the discount again to the item's discountlist\n    if (addToDiscountList) receiptService.saveLineDiscount(discount, discountReason, item, discountDetails);\n    var discountValue = discount.times(item.effectiveSalesPrice).dividedBy(100);\n    discountValue = inputValidationService.roundToAllowedDecimalPlaces(discountValue);\n\n    // Keeping oldEffectiveSalesPrice in order to calculate the \"should-be\" discount on the itemline\n    var oldEffectiveSalesPrice = item.effectiveSalesPrice;\n    item.calculatedDiscount = inputValidationService.roundToAllowedDecimalPlaces(item.calculatedDiscount.plus(discountValue));\n    item.effectiveSalesPrice = item.effectiveSalesPrice.minus(discountValue);\n\n    // Checking / calculating rounding errors\n    // The usual total sales price per line calculations:\n    var totalEffectiveSalesPrice = item.effectiveSalesPrice.times(item.quantity);\n    // Expected total sale price per line, not rounded until after calculations giving more accuracy:\n    var totalCalculatedSalesPrice = oldEffectiveSalesPrice.minus(discountValue).times(item.quantity);\n    // Difference between expected price vs. POS calculations. To be added to the POS calculations when displaying price per line:\n    var diff = totalCalculatedSalesPrice.minus(totalEffectiveSalesPrice);\n\n    // When itemprice is the lowest possible rounded number (0.01), the rounding-error\n    // with discounts gets blown out of proportion with increasing quantity since rounding\n    // a discount on a 0.01 item makes it either 0 or 0.01.  Adding the rounding-diff can\n    // therefor make the discounted items more expensive than it is full priced.\n    //\n    // 10% discount on 1000 items of value 0.01 should be 1\n    // pos calculates discount per item, so 10% discount results a price of 10 (not 9)\n    // adding the diff (1) to the discounted price yields 11.\n    //\n    // To make sure giving a discount to a customer doesn't do that. The diff is not\n    // added if it would result in a higher totalEffectiveSalesPrice\n\n    var totalSalesPrice = item.salesPrice.times(item.quantity);\n    if (diff.plus(totalEffectiveSalesPrice) < totalSalesPrice) item.roundingDiff = diff;\n\n    // adjustment for the customerDisplayUI\n    if (((_item$discountDetails = item.discountDetails) === null || _item$discountDetails === void 0 ? void 0 : _item$discountDetails.length) > 1) {\n      var onehundred = new Decimal(100);\n      item.totalDiscountPercent = onehundred.minus(receiptService.getSelectedLineTotal(item).times(onehundred).dividedBy(item.salesPrice));\n      item.totalDiscountPercent = item.totalDiscountPercent.toDecimalPlacesUnrounded(2);\n    }\n    return item;\n  };\n  receiptService.calculateDiscountPercentage = function (discount, price) {\n    if (price.isZero()) return new Decimal(0);\n    return new Decimal(100).minus(discount.times(100).dividedBy(price));\n  };\n  receiptService.containsDiscountableItem = function () {\n    return receipt.items.some(function (i) {\n      return i.disableDiscount === false;\n    });\n  };\n\n  /**\n   * Handles total discounts\n   * Takes the accompanied discount information and distributes it on all applicable lines\n   *\n   * @param  {[type]} discount The discount in percentage to apply to the item\n   * @param  {object} discountDetails contains information about type of discount (Line, Total, etc) and if\n   * it was set as an amount or percentage\n   * @param {boolean|undefined} addToDiscountList boolean that states if the discount should be saved or not (reCalculations)\n   * @return {object}          The modified item\n   */\n  receiptService.setDiscountOnAll = function (discount, discountReason, discountDetails, addToDiscountList) {\n    // If function is called without new attributes, it's handled as line discounts that are distributed\n    // to all items (like previous calculations). Needs to be refactored if new discountTypes emerge that\n    // should use this function.\n\n    if (addToDiscountList === undefined) addToDiscountList = true;\n    var discountType = \"Line\";\n    if (discountDetails) {\n      discountType = \"Receipt\";\n      discountDetails.type = discountType;\n      discountDetails.originalDiscountAmount = discount;\n      discount = receiptService.calculateEffectiveLineDiscount(discount, discountDetails.isPercentage);\n      discountDetails.discount = discount;\n    }\n    for (var i = 0; i < receipt.items.length; i++) {\n      // discounts should not applied to isNetto items or items that have discounts disabled.\n      if (!receipt.items[i].isNetto && !receipt.items[i].disableDiscount && !(receipt.transactionType == \"Exchange\" && receipt.items[i].returnCode == \"0\")) {\n        receiptService.setLineDiscount(discount, discountReason, i, discountDetails, addToDiscountList);\n      }\n    }\n    persistReceipt();\n  };\n\n  /**\n   * Calculates the receipt discount which takes into account:\n   *\n   * Is not applicable to \"isNetto\" items\n   * Is not applicable to LoyaltyDiscount paymentType\n   * Amount discount is converted to a percentage\n   */\n  receiptService.calculateEffectiveLineDiscount = function (discount, isPercentage) {\n    var excludedFromDiscountAmount = new Decimal(0);\n    var totalEffectiveSalesPrice = receiptService.getTotal();\n    var totalSalesPrice = receiptService.getTotalWithoutDiscount();\n    var sumOfIsNettoItems = new Decimal(0);\n    var sumOfDisabledDiscounts = new Decimal(0);\n    var sumOfReturnAdditionalItems = new Decimal(0);\n\n    // Checking for isNetto items\n    _.forEach(receipt.items, function (item) {\n      if (item.isNetto) sumOfIsNettoItems = sumOfIsNettoItems.plus(item.effectiveSalesPrice);\n      if (item.disableDiscount) sumOfDisabledDiscounts = sumOfDisabledDiscounts.plus(item.effectiveSalesPrice);\n      if (receipt.transactionType == \"Exchange\" && item.returnCode == \"0\") {\n        sumOfReturnAdditionalItems = sumOfReturnAdditionalItems.plus(item.effectiveSalesPrice * item.quantity);\n      }\n    });\n\n    // Allows for any items having a disabled discount\n    totalEffectiveSalesPrice = totalEffectiveSalesPrice.minus(sumOfDisabledDiscounts);\n\n    //Allows for items added to the receipt after a return\n    totalEffectiveSalesPrice = totalEffectiveSalesPrice.minus(sumOfReturnAdditionalItems);\n\n    // Allows for all sorts of exclution of discounts. Introduced for the Intersolve widget.\n    _.forEach(receiptService.discountExcludes, function (excludeFunc) {\n      excludedFromDiscountAmount = excludedFromDiscountAmount.plus(excludeFunc(receiptService.getReceipt()));\n    });\n    var amountLeftToPay = totalEffectiveSalesPrice.minus(excludedFromDiscountAmount);\n    if (!isPercentage) {\n      if (sumOfIsNettoItems.gt(new Decimal(0))) discount = sumOfIsNettoItems.dividedBy(totalSalesPrice).times(discount);\n      discount = discount.dividedBy(amountLeftToPay.minus(sumOfIsNettoItems)).times(100);\n    }\n    if (excludedFromDiscountAmount.gt(new Decimal(0))) {\n      return amountLeftToPay.dividedBy(totalEffectiveSalesPrice).times(discount);\n    }\n\n    //Let user know if there are no items to discount\n    if (amountLeftToPay.isZero()) {\n      $translate([\"receiptItem/toast/noItemsDiscountable\", \"receiptItem/toast/cantAddDiscount\"]).then(function (translations) {\n        notification.pop(\"info\", translations[\"receiptItem/toast/cantAddDiscount\"], translations[\"receiptItem/toast/noItemsDiscountable\"], 10000);\n      });\n    }\n    return discount;\n  };\n\n  /**\n   * Total discounts should apply to new items added to the receipt and might need to be recalculated\n   */\n  receiptService.reCalculateDiscounts = function () {\n    // Getting a copy of all the receiptDiscounts to be reapplied. If they are set in amount\n    // their effective discount % might not be the same after changes to the receipt quantity.\n    var receiptDiscounts = receiptService.getReceiptDiscounts();\n    receiptService.cancelReceiptDiscounts();\n    for (var i = 0; i < receipt.items.length; i++) {\n      var currItem = receipt.items[i];\n      var currItemDiscounts = currItem.discountDetails;\n      currItem.calculatedDiscount = new Decimal(0);\n      if (currItem.salesPrice != 0) {\n        currItem.effectiveSalesPrice = currItem.salesPrice;\n      }\n      delete currItem.discountCode;\n      delete currItem.discountReasonName;\n      delete currItem.totalDiscountPercent;\n      if (currItemDiscounts) {\n        for (var j = 0; j < currItemDiscounts.length; j++) {\n          receiptService.setLineDiscount(currItemDiscounts[j].discount, currItemDiscounts[j].reason, i, currItemDiscounts[j].type, false);\n        }\n      }\n    }\n\n    // Reapply ReceiptDiscounts\n    for (var k = 0; k < receiptDiscounts.length; k++) {\n      var currentDiscount = receiptDiscounts[k];\n      var discountAmount = 0;\n\n      //If we are dealing with amount discounts rather than percentage discounts\n      //We need to use the original discount amount to calculate the effective discount\n      if (currentDiscount.isPercentage !== undefined) {\n        if (currentDiscount.isPercentage) discountAmount = currentDiscount.discount;else discountAmount = currentDiscount.originalDiscountAmount;\n      } else discountAmount = currentDiscount.discount;\n      receiptService.setDiscountOnAll(discountAmount, currentDiscount.reason, {\n        isPercentage: currentDiscount.isPercentage !== undefined ? currentDiscount.isPercentage : true\n      }, true);\n    }\n    persistReceipt();\n  };\n\n  /**\n   * @param  {[type]} item            The item to modify\n   * @param  {[type]} discount        The discount in percentage to apply to the item\n   * @param  {object} discountDetails contains information about type of discount (Line, Total, etc) and if\n   *                                  it was set as an amount or percentage\n   */\n  receiptService.saveLineDiscount = function (discount, discountReason, item, discountDetails) {\n    var newDiscount = {\n      discount: discount,\n      reason: discountReason\n    };\n\n    // In case of a Receipt discount that's entered as an amount. The entered value is stored\n    // as originalDiscountAmount in case the discount is recalculated and the quantity of receipt\n    // items have changed - then the amount to percentage calculations will change.\n    if (!discountDetails || discountDetails.type === \"Line\") {\n      newDiscount.type = \"Line\";\n    } else {\n      newDiscount.type = discountDetails.type;\n      newDiscount.isPercentage = discountDetails.isPercentage;\n      newDiscount.originalDiscountAmount = discountDetails.originalDiscountAmount;\n    }\n    if (!item.discountDetails) item.discountDetails = [];\n    item.discountDetails.push(newDiscount);\n  };\n  receiptService.getSelectedLineTotal = function (line) {\n    var item = line || receipt.items[receiptService.selectedItemLineIndex];\n    var total = item.effectiveSalesPrice.times(item.quantity);\n    return total;\n  };\n  receiptService.cancelAllDiscount = function () {\n    for (var i = 0; i < receipt.items.length; i++) {\n      receipt.items[i].calculatedDiscount = new Decimal(0);\n      receipt.items[i].effectiveSalesPrice = receipt.items[i].salesPrice;\n      receipt.items[i].roundingDiff = new Decimal(0);\n      receipt.items[i].discountDetails = [];\n    }\n    persistReceipt();\n  };\n  receiptService.cancelLineDiscount = function (discount, index) {\n    if (discount.type === \"Receipt\") {\n      notification.pop(\"info\", i18nTotalDiscountsLeft);\n      return;\n    }\n    index = typeof index != \"undefined\" ? index : receiptService.selectedItemLineIndex;\n    var currItem = receipt.items[index];\n    currItem.calculatedDiscount = new Decimal(0);\n    currItem.effectiveSalesPrice = receipt.items[index].salesPrice;\n    currItem.roundingDiff = new Decimal(0);\n    delete currItem.discountCode;\n    delete currItem.discountReasonName;\n    delete currItem.totalDiscountPercent;\n    var discountsToReapply = _toConsumableArray(currItem.discountDetails.filter(function (detail) {\n      return detail != discount;\n    }));\n    currItem.discountDetails = [];\n\n    // Reapplying receiptDiscounts\n    for (var i = 0; i < discountsToReapply.length; i++) {\n      var details = {\n        type: discountsToReapply[i].type,\n        isPercentage: discountsToReapply[i].isPercentage,\n        originalDiscountAmount: discountsToReapply[i].originalDiscountAmount\n      };\n      receiptService.setLineDiscount(discountsToReapply[i].discount, discountsToReapply[i].reason, index, details, true);\n    }\n    persistReceipt();\n  };\n\n  // Iterates through the receipt items and removes all discounts of type \"Receipt\".\n  receiptService.cancelReceiptDiscounts = function (doRecalculations) {\n    var discountableItems = _.filter(receipt.items, function (item) {\n      return !item.isNetto;\n    });\n    _.forEach(discountableItems, function (item) {\n      _.remove(item.discountDetails, function (discounts) {\n        return discounts.type === \"Receipt\";\n      });\n    });\n    if (doRecalculations) receiptService.reCalculateDiscounts();\n  };\n\n  // Returns array of discounts with discountType \"Receipt\"\n  receiptService.getReceiptDiscounts = function () {\n    var receiptDiscounts = [];\n\n    // All items that is not \"isNetto\" have the same receipt items in their discountDetails.\n    // This function goes through the list of receipt items and returns all the \"Receipt\"\n    // discounts on the first (if any) non \"isNetto\" item.\n    var discountableItems = _.filter(receipt.items, function (item) {\n      return !item.isNetto;\n    });\n    var singleItem = _.head(discountableItems);\n    if (typeof singleItem === \"undefined\") return receiptDiscounts;\n    receiptDiscounts = _.filter(singleItem.discountDetails, function (discount) {\n      return discount.type === \"Receipt\";\n    });\n    return receiptDiscounts;\n  };\n  receiptService.changeSalesType = function () {\n    var i = receiptService.selectedItemLineIndex;\n    receipt.items[i] = negateItem(receipt.items[i]);\n    if (receipt.items[i].quantity < 0 && !!findCustomerService.getSelectedCustomer()) notification.pop(\"warning\", i18nDeductLoyalty);\n    persistReceipt();\n  };\n  function negateItem(item) {\n    item.transactionType = item.transactionType == saleType ? returnType : saleType;\n    item.quantity *= -1;\n    return item;\n  }\n  receiptService.setLinePrice = function (newPrice) {\n    if (!inputValidationService.validateAmount(newPrice)) throw \"AMOUNT_VALUE_EXCEEDED\";\n    if (receipt.items[receiptService.selectedItemLineIndex].quantity > 1) {\n      if (receipt.items[receiptService.selectedItemLineIndex].effectiveSalesPrice.isZero()) {\n        receipt.items[receiptService.selectedItemLineIndex].salesPrice = newPrice.dividedBy(receipt.items[receiptService.selectedItemLineIndex].quantity);\n      }\n      receipt.items[receiptService.selectedItemLineIndex].effectiveSalesPrice = newPrice.dividedBy(receipt.items[receiptService.selectedItemLineIndex].quantity);\n    } else {\n      if (receipt.items[receiptService.selectedItemLineIndex].effectiveSalesPrice.isZero()) {\n        receipt.items[receiptService.selectedItemLineIndex].salesPrice = newPrice;\n      }\n      receipt.items[receiptService.selectedItemLineIndex].effectiveSalesPrice = newPrice;\n    }\n    persistReceipt();\n  };\n  receiptService.setLineQuantity = function (quantity) {\n    if (!inputValidationService.validateQuantity(quantity)) throw \"QUANTITY_VALUE_EXCEEDED\";\n    var index = receiptService.selectedItemLineIndex;\n    var item = receipt.items[index];\n    var negativeQuantity = item.quantity < 0;\n    var quantityChange = quantity - item.quantity;\n    if (negativeQuantity) {\n      quantity = -Math.abs(quantity);\n      quantityChange = item.quantity - quantity;\n    }\n    modifyQuantity(index, quantityChange);\n    persistReceipt();\n  };\n  receiptService.addEnteredText = function (text, lineIndex) {\n    if (receipt.items.length === 0) return;\n    if (lineIndex === undefined) lineIndex = receiptService.selectedItemLineIndex;\n    receipt.items[lineIndex].enteredText = text;\n    persistReceipt();\n  };\n  receiptService.getSalesPrice = function () {\n    return receipt.items[receiptService.selectedItemLineIndex].salesPrice;\n  };\n  receiptService.getCurrentTransactionType = function () {\n    return receipt.items[receiptService.selectedItemLineIndex].transactionType;\n  };\n  receiptService.hasExpenseItems = function () {\n    if (receipt.items.length > 0) {\n      if (receipt.items[0].templateType === \"expense\") {\n        return true;\n      }\n    }\n  };\n  receiptService.loadSavedReceipt = function (shopId, posId, receiptId, doNotChangeUuid) {\n    return saleRepository.api.getReceipt(shopId, posId, receiptId).then(function (response) {\n      if (!response.data || !response.data[0]) return null;\n      var loadedReceipt = response.data[0];\n      if (doNotChangeUuid) return loadedReceipt;\n      angular.forEach(loadedReceipt.items, function (item) {\n        item.uuid = uuid();\n      });\n      angular.forEach(loadedReceipt.payments, function (payment) {\n        payment.uuid = uuid();\n      });\n      return loadedReceipt;\n    });\n  };\n  receiptService.createReturnReceipt = /*#__PURE__*/function () {\n    var _ref3 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee3(loadedReceipt) {\n      var cancellationReceipt;\n      return _regeneratorRuntime().wrap(function _callee3$(_context3) {\n        while (1) switch (_context3.prev = _context3.next) {\n          case 0:\n            cancellationReceipt = receiptService.createCancellationReceipt(loadedReceipt);\n            _context3.next = 3;\n            return receiptService.loadReceipt(cancellationReceipt);\n          case 3:\n            return _context3.abrupt(\"return\", receiptService.getReceipt());\n          case 4:\n          case \"end\":\n            return _context3.stop();\n        }\n      }, _callee3);\n    }));\n    return function (_x4) {\n      return _ref3.apply(this, arguments);\n    };\n  }();\n  receiptService.populateMissingItemProperties = /*#__PURE__*/function () {\n    var _ref4 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee5(receiptInstance) {\n      var newReceipt;\n      return _regeneratorRuntime().wrap(function _callee5$(_context5) {\n        while (1) switch (_context5.prev = _context5.next) {\n          case 0:\n            newReceipt = angular.copy(receiptInstance);\n            newReceipt.items = newReceipt.items.map(/*#__PURE__*/function () {\n              var _ref5 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee4(item) {\n                var response, article;\n                return _regeneratorRuntime().wrap(function _callee4$(_context4) {\n                  while (1) switch (_context4.prev = _context4.next) {\n                    case 0:\n                      if (!item.ean) {\n                        _context4.next = 8;\n                        break;\n                      }\n                      _context4.next = 3;\n                      return articles.findArticleByEAN(item.ean);\n                    case 3:\n                      response = _context4.sent;\n                      article = response.data;\n                      return _context4.abrupt(\"return\", _objectSpread(_objectSpread({}, article), item));\n                    case 8:\n                      return _context4.abrupt(\"return\", item);\n                    case 9:\n                    case \"end\":\n                      return _context4.stop();\n                  }\n                }, _callee4);\n              }));\n              return function (_x6) {\n                return _ref5.apply(this, arguments);\n              };\n            }());\n            _context5.next = 4;\n            return Promise.all(newReceipt.items);\n          case 4:\n            newReceipt.items = _context5.sent;\n            return _context5.abrupt(\"return\", newReceipt);\n          case 6:\n          case \"end\":\n            return _context5.stop();\n        }\n      }, _callee5);\n    }));\n    return function (_x5) {\n      return _ref4.apply(this, arguments);\n    };\n  }();\n  receiptService.setReturnReason = function (returnReason) {\n    var item = receipt.items[receiptService.selectedItemLineIndex];\n    item.returnCode = returnReason.id;\n    item.returnReasonName = returnReason.reason;\n  };\n  receiptService.setReceiptReturnReason = function (returnReason) {\n    receipt.items.forEach(function (item) {\n      item.returnCode = returnReason.id;\n      item.returnReasonName = returnReason.reason;\n    });\n    persistReceipt();\n  };\n  receiptService.removeReturnReason = function () {\n    var item = receipt.items[receiptService.selectedItemLineIndex];\n    delete item.returnCode;\n    delete item.returnReasonName;\n  };\n  receiptService.createCancellationReceipt = function (loadedReceipt) {\n    if (!loadedReceipt) throw \"Invalid receipt\";\n    loadedReceipt.items.forEach(function (item) {\n      fluctuatingPropertiesHelper.setReturnTransactionLineId(item, item.uuid);\n    });\n    receipt.items = loadedReceipt.items.map(function (item) {\n      return _objectSpread(_objectSpread({}, item), {}, {\n        uuid: receiptService.generateUUID()\n      });\n    });\n    receipt.payments = [];\n    loadedReceipt.payments.forEach(function (payment) {\n      if (payment.paymentType === \"LoyaltyBonus\") {\n        if (payment.exchangeRate === 0.0) {\n          payment.exchangeRate = 100.0;\n        }\n        payment.uuid = receiptService.generateUUID();\n        receiptService.addPayment(payment);\n      }\n    });\n    receipt = decimalifyReceipt(receipt);\n    receipt.customerNumber = loadedReceipt.customerNumber;\n    if (loadedReceipt.payments.find(function (p) {\n      return p.paymentType === \"MobilePay\";\n    })) {\n      receipt.returnReceiptNumber = receiptService.constructReceiptId(loadedReceipt);\n    }\n    receiptService.negateReceipt();\n    receipt.items.forEach(function (i) {\n      return checkIfOrderInStoreAndSet(i);\n    });\n    return receiptService.getReceipt();\n  };\n  function checkIfOrderInStoreAndSet(item) {\n    item.isOrderInStore = fluctuatingPropertiesHelper.getWebOrderType(item) === 1;\n  }\n  receiptService.parkCurrentReceipt = function () {\n    return saleRepository.api.parkReceipt(receipt).then(function () {\n      receiptService.clearReceipt();\n    });\n  };\n  receiptService.getParkedReceipts = function () {\n    return saleRepository.api.getParkedReceipts();\n  };\n  receiptService.deleteParkedReceipt = function (id) {\n    return saleRepository.api.deleteParkedReceipt(id);\n  };\n  receiptService.negateReceipt = function () {\n    angular.forEach(receipt.items, function (item) {\n      negateItem(item);\n    });\n    angular.forEach(receipt.payments, function (payment) {\n      payment.quantity = payment.quantity * -1;\n      payment.amount = payment.amount.neg();\n    });\n    persistReceipt();\n  };\n  receiptService.isEmpty = function (optionalReceipt) {\n    var r = optionalReceipt || receipt;\n    return r.items.length === 0 && r.payments.length === 0;\n  };\n  receiptService.attachCustomer = /*#__PURE__*/function () {\n    var _ref6 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee6(customerNumber, customerEmail) {\n      return _regeneratorRuntime().wrap(function _callee6$(_context6) {\n        while (1) switch (_context6.prev = _context6.next) {\n          case 0:\n            receipt.customerNumber = customerNumber;\n            receipt.customerEmail = customerEmail;\n            //every time we attach a customer we need to force a config Update because the PaymenType 'Account' should be loaded.\n            _context6.next = 4;\n            return posConfig.loadConfiguration();\n          case 4:\n            persistReceipt();\n          case 5:\n          case \"end\":\n            return _context6.stop();\n        }\n      }, _callee6);\n    }));\n    return function (_x7, _x8) {\n      return _ref6.apply(this, arguments);\n    };\n  }();\n  receiptService.getCustomer = function () {\n    return {\n      customerNumber: receipt.customerNumber,\n      customerEmail: receipt.customerEmail\n    };\n  };\n  receiptService.detachCustomer = function () {\n    delete receipt.customerNumber;\n    delete receipt.customerEmail;\n    receipt.items.filter(function (itm) {\n      return itm.isOrderInStore;\n    }).forEach(function (itm) {\n      return itm.isOrderInStore = false;\n    });\n    eventBus.notify(eventBus.events.customer.detach, receipt);\n    persistReceipt();\n  };\n  receiptService.getItemById = function (itemId) {\n    if (!receipt || !receipt.items) return;\n    var matchedItems = receipt.items.filter(function (item) {\n      return item.uuid === itemId;\n    });\n    if (!matchedItems) return;\n    return matchedItems[0];\n  };\n  receiptService.addLoyaltyCustomer = function (customerNumber, customerEmail) {\n    receipt.customerNumber = customerNumber;\n    receipt.customerEmail = customerEmail;\n    persistReceipt();\n  };\n  receiptService.getLoyaltyCustomerNumber = function () {\n    return receipt.customerNumber;\n  };\n  receiptService.setClerkId = function (clerkId, itemIndex) {\n    if (itemIndex === undefined) itemIndex = receiptService.selectedItemLineIndex;\n    return clerkLoginService.getClerk(clerkId).then(function () {\n      receipt.items[itemIndex].clerkId = clerkId;\n      persistReceipt();\n    });\n  };\n  receiptService.receiptHasTotalDiscount = function () {\n    var hasTotalDiscount = false;\n    _.forEach(receipt.items, function (item) {\n      if (_.some(item.discountDetails, [\"type\", \"Receipt\"])) {\n        hasTotalDiscount = true;\n        // return false breaks the lodash _.forEach loop.\n        return false;\n      }\n    });\n    return hasTotalDiscount;\n  };\n  receiptService.receiptHasDiscount = function () {\n    var isDiscount = false;\n    _.forEach(receipt.items, function (item) {\n      if (!item.effectiveSalesPrice.eq(item.salesPrice)) {\n        isDiscount = true;\n        // return false breaks the lodash _.forEach loop.\n        return false;\n      }\n    });\n    return isDiscount;\n  };\n  receiptService.finalizeReceipt = function () {\n    receipt.date = moment(new Date()).format();\n    receipt.localTimeOffsetMinutes = new Date().getTimezoneOffset();\n    if (!receipt.shop) {\n      receipt.shop = posConfig.shopId;\n      persistReceipt();\n    }\n  };\n  receiptService.constructReceiptId = function () {\n    var receiptObject = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : receipt;\n    if (!receiptObject.shop) receiptObject.shop = 0; // Used as fallback, will be overwritten once the clerk logs in\n    return \"R\".concat(receiptObject.shop.toString().padStart(4, \"0\"), \"-\").concat(receiptObject.posId.toString().padStart(3, \"0\"), \"-\").concat(receiptObject.receiptId.toString().padStart(6, \"0\"));\n  };\n  receiptService.setGiftAidable = function (isGiftAidable) {\n    fluctuatingPropertiesHelper.setTransactionAsGiftAidable(receipt, isGiftAidable);\n    persistReceipt();\n  };\n  receiptService.isGiftAidable = function () {\n    return fluctuatingPropertiesHelper.isTransactionGiftAidable(receipt);\n  };\n  receiptService.setTransactionGiftAidDetails = function (details) {\n    fluctuatingPropertiesHelper.setTransactionGiftAidTitle(receipt, details.title);\n    fluctuatingPropertiesHelper.setTransactionGiftAidFirstName(receipt, details.firstName);\n    fluctuatingPropertiesHelper.setTransactionGiftAidLastName(receipt, details.lastName);\n    fluctuatingPropertiesHelper.setTransactionGiftAidHouseNumber(receipt, details.houseNumber);\n    fluctuatingPropertiesHelper.setTransactionGiftAidPostalCode(receipt, details.postalCode);\n    persistReceipt();\n  };\n  receiptService.setInfrasecDetails = function (ctuid, code, registerId, requestId, organisationNumber, sequenceNumber) {\n    fluctuatingPropertiesHelper.setInfrasecCTUID(receipt, ctuid);\n    fluctuatingPropertiesHelper.setInfrasecCode(receipt, code);\n    fluctuatingPropertiesHelper.setInfrasecRegisterId(receipt, registerId);\n    fluctuatingPropertiesHelper.setInfrasecRequestId(receipt, requestId);\n    fluctuatingPropertiesHelper.setInfrasecOrganisationNumber(receipt, organisationNumber);\n    fluctuatingPropertiesHelper.setInfrasecSequenceNumber(receipt, sequenceNumber);\n    persistReceipt();\n  };\n  receiptService.getTransactionGiftAidTitle = function () {\n    return fluctuatingPropertiesHelper.getTransactionGiftAidTitle(receipt);\n  };\n  receiptService.getTransactionGiftAidFirstName = function () {\n    return fluctuatingPropertiesHelper.getTransactionGiftAidFirstName(receipt);\n  };\n  receiptService.getTransactionGiftAidLastName = function () {\n    return fluctuatingPropertiesHelper.getTransactionGiftAidLastName(receipt);\n  };\n  receiptService.getTransactionGiftAidHouseNumber = function () {\n    return fluctuatingPropertiesHelper.getTransactionGiftAidHouseNumber(receipt);\n  };\n  receiptService.getTransactionGiftAidPostalCode = function () {\n    return fluctuatingPropertiesHelper.getTransactionGiftAidPostalCode(receipt);\n  };\n  receiptService.removeTransactionGiftAidProperties = function () {\n    fluctuatingPropertiesHelper.removeTransactionGiftAidProperties(receipt);\n    persistReceipt();\n  };\n  function loadConfig() {\n    receiptService.discountReasons = posConfig.getOptions().discountReasons;\n    $translate([\"receipt/totalDiscountsLeft\", \"widget/kega/weborderpayment\", \"button/account-deposit\", \"toast/return-with-loyalty\", \"label/downPayment\", \"label/shipment\"], {}, undefined, undefined, posConfig.getLocale()).then(function (translations) {\n      i18nTotalDiscountsLeft = translations[\"receipt/totalDiscountsLeft\"];\n      i18nWeborderPayment = translations[\"widget/kega/weborderpayment\"];\n      i18nAccountDeposit = translations[\"button/account-deposit\"];\n      i18nDeductLoyalty = translations[\"toast/return-with-loyalty\"];\n      i18nDownPayment = translations[\"label/downPayment\"];\n      i18nShipment = translations[\"label/shipment\"];\n    });\n  }\n  eventBus.subscribe(eventBus.events.pos.newConfig, null, loadConfig);\n  return receiptService;\n});\n","\"use strict\";\n\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _regeneratorRuntime() { \"use strict\"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return r; }; var t, r = {}, e = Object.prototype, n = e.hasOwnProperty, o = \"function\" == typeof Symbol ? Symbol : {}, i = o.iterator || \"@@iterator\", a = o.asyncIterator || \"@@asyncIterator\", u = o.toStringTag || \"@@toStringTag\"; function c(t, r, e, n) { return Object.defineProperty(t, r, { value: e, enumerable: !n, configurable: !n, writable: !n }); } try { c({}, \"\"); } catch (t) { c = function c(t, r, e) { return t[r] = e; }; } function h(r, e, n, o) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype); return c(a, \"_invoke\", function (r, e, n) { var o = 1; return function (i, a) { if (3 === o) throw Error(\"Generator is already running\"); if (4 === o) { if (\"throw\" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var u = n.delegate; if (u) { var c = d(u, n); if (c) { if (c === f) continue; return c; } } if (\"next\" === n.method) n.sent = n._sent = n.arg;else if (\"throw\" === n.method) { if (1 === o) throw o = 4, n.arg; n.dispatchException(n.arg); } else \"return\" === n.method && n.abrupt(\"return\", n.arg); o = 3; var h = s(r, e, n); if (\"normal\" === h.type) { if (o = n.done ? 4 : 2, h.arg === f) continue; return { value: h.arg, done: n.done }; } \"throw\" === h.type && (o = 4, n.method = \"throw\", n.arg = h.arg); } }; }(r, n, new Context(o || [])), !0), a; } function s(t, r, e) { try { return { type: \"normal\", arg: t.call(r, e) }; } catch (t) { return { type: \"throw\", arg: t }; } } r.wrap = h; var f = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var l = {}; c(l, i, function () { return this; }); var p = Object.getPrototypeOf, y = p && p(p(x([]))); y && y !== e && n.call(y, i) && (l = y); var v = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(l); function g(t) { [\"next\", \"throw\", \"return\"].forEach(function (r) { c(t, r, function (t) { return this._invoke(r, t); }); }); } function AsyncIterator(t, r) { function e(o, i, a, u) { var c = s(t[o], t, i); if (\"throw\" !== c.type) { var h = c.arg, f = h.value; return f && \"object\" == _typeof(f) && n.call(f, \"__await\") ? r.resolve(f.__await).then(function (t) { e(\"next\", t, a, u); }, function (t) { e(\"throw\", t, a, u); }) : r.resolve(f).then(function (t) { h.value = t, a(h); }, function (t) { return e(\"throw\", t, a, u); }); } u(c.arg); } var o; c(this, \"_invoke\", function (t, n) { function i() { return new r(function (r, o) { e(t, n, r, o); }); } return o = o ? o.then(i, i) : i(); }, !0); } function d(r, e) { var n = e.method, o = r.i[n]; if (o === t) return e.delegate = null, \"throw\" === n && r.i[\"return\"] && (e.method = \"return\", e.arg = t, d(r, e), \"throw\" === e.method) || \"return\" !== n && (e.method = \"throw\", e.arg = new TypeError(\"The iterator does not provide a '\" + n + \"' method\")), f; var i = s(o, r.i, e.arg); if (\"throw\" === i.type) return e.method = \"throw\", e.arg = i.arg, e.delegate = null, f; var a = i.arg; return a ? a.done ? (e[r.r] = a.value, e.next = r.n, \"return\" !== e.method && (e.method = \"next\", e.arg = t), e.delegate = null, f) : a : (e.method = \"throw\", e.arg = new TypeError(\"iterator result is not an object\"), e.delegate = null, f); } function w(t) { this.tryEntries.push(t); } function m(r) { var e = r[4] || {}; e.type = \"normal\", e.arg = t, r[4] = e; } function Context(t) { this.tryEntries = [[-1]], t.forEach(w, this), this.reset(!0); } function x(r) { if (null != r) { var e = r[i]; if (e) return e.call(r); if (\"function\" == typeof r.next) return r; if (!isNaN(r.length)) { var o = -1, a = function e() { for (; ++o < r.length;) if (n.call(r, o)) return e.value = r[o], e.done = !1, e; return e.value = t, e.done = !0, e; }; return a.next = a; } } throw new TypeError(_typeof(r) + \" is not iterable\"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, c(v, \"constructor\", GeneratorFunctionPrototype), c(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction), GeneratorFunction.displayName = c(GeneratorFunctionPrototype, u, \"GeneratorFunction\"), r.isGeneratorFunction = function (t) { var r = \"function\" == typeof t && t.constructor; return !!r && (r === GeneratorFunction || \"GeneratorFunction\" === (r.displayName || r.name)); }, r.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, c(t, u, \"GeneratorFunction\")), t.prototype = Object.create(v), t; }, r.awrap = function (t) { return { __await: t }; }, g(AsyncIterator.prototype), c(AsyncIterator.prototype, a, function () { return this; }), r.AsyncIterator = AsyncIterator, r.async = function (t, e, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(h(t, e, n, o), i); return r.isGeneratorFunction(e) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, g(v), c(v, u, \"Generator\"), c(v, i, function () { return this; }), c(v, \"toString\", function () { return \"[object Generator]\"; }), r.keys = function (t) { var r = Object(t), e = []; for (var n in r) e.unshift(n); return function t() { for (; e.length;) if ((n = e.pop()) in r) return t.value = n, t.done = !1, t; return t.done = !0, t; }; }, r.values = x, Context.prototype = { constructor: Context, reset: function reset(r) { if (this.prev = this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = \"next\", this.arg = t, this.tryEntries.forEach(m), !r) for (var e in this) \"t\" === e.charAt(0) && n.call(this, e) && !isNaN(+e.slice(1)) && (this[e] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0][4]; if (\"throw\" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(r) { if (this.done) throw r; var e = this; function n(t) { a.type = \"throw\", a.arg = r, e.next = t; } for (var o = e.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i[4], u = this.prev, c = i[1], h = i[2]; if (-1 === i[0]) return n(\"end\"), !1; if (!c && !h) throw Error(\"try statement without catch or finally\"); if (null != i[0] && i[0] <= u) { if (u < c) return this.method = \"next\", this.arg = t, n(c), !0; if (u < h) return n(h), !1; } } }, abrupt: function abrupt(t, r) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var n = this.tryEntries[e]; if (n[0] > -1 && n[0] <= this.prev && this.prev < n[2]) { var o = n; break; } } o && (\"break\" === t || \"continue\" === t) && o[0] <= r && r <= o[2] && (o = null); var i = o ? o[4] : {}; return i.type = t, i.arg = r, o ? (this.method = \"next\", this.next = o[2], f) : this.complete(i); }, complete: function complete(t, r) { if (\"throw\" === t.type) throw t.arg; return \"break\" === t.type || \"continue\" === t.type ? this.next = t.arg : \"return\" === t.type ? (this.rval = this.arg = t.arg, this.method = \"return\", this.next = \"end\") : \"normal\" === t.type && r && (this.next = r), f; }, finish: function finish(t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[2] === t) return this.complete(e[4], e[3]), m(e), f; } }, \"catch\": function _catch(t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[0] === t) { var n = e[4]; if (\"throw\" === n.type) { var o = n.arg; m(e); } return o; } } throw Error(\"illegal catch attempt\"); }, delegateYield: function delegateYield(r, e, n) { return this.delegate = { i: x(r), r: e, n: n }, \"next\" === this.method && (this.arg = t), f; } }, r; }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"next\", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"throw\", n); } _next(void 0); }); }; }\npos.directive(\"dddReceiptItem\", function ($compile, $http, $templateCache, $timeout, $interval, posConfig, receiptHelper, discountReasons, eventBus, notification, $translate, findCustomerService, giftPrintingOptionValue, downpayItemService, $q, webOrderWidgetService, $rootScope, discountOptionsService, voucherService, voucherModalsService) {\n  // returns a promise which, when resolved, will return the partial's HTML\n  var getTemplate = function getTemplate(contentType) {\n    if (contentType === \"sale\" && $rootScope.isDownPaymentBooking) {\n      contentType = \"booking\";\n    }\n    var templateLoader,\n      baseUrl = \"views/partials/\",\n      templateMap = {\n        sale: \"receipt-article\",\n        itemgroup: \"receipt-itemgroup\",\n        giftCertificate: \"receipt-giftcertificate\",\n        creditNote: \"receipt-creditnote\",\n        setStart: \"receipt-setstart\",\n        setItem: \"receipt-sellasset\",\n        setEnd: \"receipt-setend\",\n        deleted: \"receipt-deleted\",\n        expense: \"receipt-expense\",\n        weborder: \"receipt-weborder\",\n        insurance: \"receipt-insurance\",\n        accountdeposit: \"receipt-account-deposit\",\n        downPayment: \"receipt-dpocertificate\",\n        shipmentTemplate: \"receipt-shipment\",\n        booking: \"receipt-dpoarticle\",\n        voucher: \"receipt-voucher\",\n        customerOrder: \"receipt-customer-order\"\n      };\n    var templateUrl = baseUrl + templateMap[contentType];\n    templateLoader = $http.get(templateUrl, {\n      cache: $templateCache\n    });\n    return templateLoader;\n  };\n  var linker = function linker(scope, element, attrs) {\n    var i18nOrderInStoreErrorNoCustomer, i18nOrderInStoreNotEnabled, i18nOrderInStoreNoShippingAddress, i18nCantAddDiscount, i18nItemHasDiscountBlocked, i18nCantChangeItemPrice, i18nCantChangeQuantity, i18nItemHasQuantityRestriction;\n    $translate([\"toast/order_in_store/error_customer_empty\", \"toast/order_in_store/not_enabled\", \"toast/order_in_store/error_no_shipping_address\", \"receiptItem/toast/cantAddDiscount\", \"receiptItem/toast/itemHasDiscountBlocked\", \"receiptItem/toast/cantChangeItemPrice\", \"receiptItem/toast/cantChangeQuantity\", \"receiptItem/toast/itemHasQuantityRestriction\"]).then(function (translations) {\n      i18nOrderInStoreErrorNoCustomer = translations[\"toast/order_in_store/error_customer_empty\"];\n      i18nOrderInStoreNotEnabled = translations[\"toast/order_in_store/not_enabled\"];\n      i18nOrderInStoreNoShippingAddress = translations[\"toast/order_in_store/error_no_shipping_address\"];\n      i18nCantAddDiscount = translations[\"receiptItem/toast/cantAddDiscount\"];\n      i18nItemHasDiscountBlocked = translations[\"receiptItem/toast/itemHasDiscountBlocked\"];\n      i18nCantChangeItemPrice = translations[\"receiptItem/toast/cantChangeItemPrice\"];\n      i18nCantChangeQuantity = translations[\"receiptItem/toast/cantChangeQuantity\"];\n      i18nItemHasQuantityRestriction = translations[\"receiptItem/toast/itemHasQuantityRestriction\"];\n    });\n    scope.discountReasons = discountReasons;\n    scope.orderInStoreWebShop;\n    scope.isGift = false;\n    scope.hasSerialNo = false;\n    scope.isOrderInStore = false;\n    scope.isExcludedFromLoyalty = false;\n    scope.showStockLookupButton = false;\n    scope.discount10 = 10;\n    scope.discount20 = 20;\n    scope.maxClerkIdLength = 4;\n    setTemplate(scope.content.templateType);\n    loadConfig();\n    loadDiscountOptions();\n    var RESTORE_SECONDS = 5;\n    var deleteTimeout;\n    var expiryPeriod = posConfig.getDefaultExpiryPeriod();\n    scope.showExchangePeriod = posConfig.giftPrintingOption != giftPrintingOptionValue.giftReceipt;\n    scope.countdown = RESTORE_SECONDS;\n    scope.showExpiryPeriodDate = posConfig.getDefaultExpiryPeriodType() == 1;\n    scope.minimunExpiryPeriodDateInput = new Date().toDateString();\n    if (posConfig.getDefaultExpiryPeriodType() == 1 || scope.content.exchangeExpiryDate == null) {\n      scope.content.exchangeExpiryDate = posConfig.getDefaultExpiryPeriodDate();\n    }\n    setupOrderInStore();\n    function setTemplate(type) {\n      getTemplate(type).then(function (response) {\n        element.html($compile(response.data)(scope));\n      });\n    }\n    function applyDiscountWithReason(discountAction) {\n      if (scope.content.disableDiscount) {\n        notification.pop(\"info\", i18nCantAddDiscount, i18nItemHasDiscountBlocked);\n      } else {\n        discountAction();\n      }\n    }\n    function applyDiscountPlainDiscount(discountAction) {\n      if (scope.content.disableDiscount) {\n        notification.pop(\"info\", i18nCantAddDiscount, i18nItemHasDiscountBlocked);\n      } else {\n        discountAction();\n      }\n    }\n    function setupOrderInStore() {\n      var shopFeatures = posConfig.getShopFeatures();\n      if (shopFeatures.webshop && shopFeatures.webshop.values.id) {\n        scope.orderInStoreWebShop = shopFeatures.webshop.values.id;\n        scope.orderInStoreEnabled = true;\n      }\n    }\n    function promtForPrice() {\n      if (scope.content.requiredToEnterManualPrice && !scope.content.didPromtForPrice) {\n        scope.content.didPromtForPrice = true;\n        scope.$emit(\"promtForPrice\", scope.content);\n      }\n    }\n    function promtForSerialNumber() {\n      if (scope.content.requiredToScanSerialNumber && !scope.content.didPromtForSerialNumber && scope.content.type === 2) {\n        scope.content.didPromtForSerialNumber = true;\n        scope.$emit(\"promtForSerialNumber\", scope.content);\n      }\n    }\n\n    // if the lgruntine is seleceted when being rendered then we want to scroll to this element\n    scope.$watch(\"isselected\", function (isselected) {\n      if (isselected) {\n        scrollToElement(500);\n      }\n    });\n\n    //focus and center on the element if quantity is changed and the item line is already selected\n    scope.$watch(\"content.quantity\", function (newValue, oldValue) {\n      if (newValue !== oldValue && scope.isselected) {\n        scrollToElement(0);\n      }\n    });\n    scope.$watch(function () {\n      return findCustomerService.getSelectedCustomer();\n    }, function (newValue) {\n      evaluateShowExcludeFromLoyaltyBtn(newValue);\n    });\n    function scrollToElement(timeoutTime) {\n      $timeout(function () {\n        if (scope.iscrollInstance) scope.iscrollInstance.scrollToElement(element[0], 0, true, true);else element[0].scrollIntoView(false);\n      }, timeoutTime);\n    }\n    scope.applyDiscount = discountReasons.items.length ? applyDiscountWithReason : applyDiscountPlainDiscount;\n    scope.canDelete = function (discount) {\n      return [\"line\", \"receipt\"].includes(discount.type.toLowerCase());\n    };\n    scope.showDelete = function (discount) {\n      return [\"line\"].includes(discount.type.toLowerCase());\n    };\n    scope.lineprice = function (discountReason) {\n      if (scope.content.disableDiscount) {\n        notification.pop(\"info\", i18nCantChangeItemPrice, i18nItemHasDiscountBlocked);\n      } else {\n        scope.$emit(\"lineprice\", discountReason);\n      }\n    };\n    scope.exchangeExpiryPeriod = function () {\n      scope.$emit(\"exchangeexpiryperiod\", scope.content.uuid);\n    };\n    scope.amountdiscount = function (discountReason) {\n      scope.$emit(\"amountdiscount\", discountReason);\n    };\n    scope.customdiscount = function (discountReason) {\n      scope.$emit(\"customdiscount\", discountReason);\n    };\n    scope.tenpercent = function (discountReason) {\n      scope.$emit(\"percentdiscount\", scope.discount10, discountReason);\n    };\n    scope.twentypercent = function (discountReason) {\n      scope.$emit(\"percentdiscount\", scope.discount20, discountReason);\n    };\n    scope.addone = function () {\n      if (scope.content.maxQuantityOne) {\n        notification.pop(\"info\", i18nCantChangeQuantity, i18nItemHasQuantityRestriction);\n      } else {\n        scope.$emit(\"addone\");\n      }\n    };\n    scope.removeone = function () {\n      if (scope.content.quantity === 1 || scope.content.quantity === -1) scope.removeline();else scope.$emit(\"removeone\");\n    };\n    scope.returnitem = function () {\n      scope.$emit(\"returnitem\");\n    };\n    scope.removeset = function () {\n      scope.$emit(\"removeset\");\n    };\n    scope.addtext = function () {\n      scope.$emit(\"addtext\");\n    };\n    scope.details = function (article) {\n      downpayItemService.selectedArticle = article;\n      scope.$emit(\"details\");\n    };\n    scope.removeline = function () {\n      var deferred = $q.defer();\n      setTemplate(\"deleted\");\n      deleteTimeout = $timeout(function () {\n        if (voucherService.isDeactivatedVoucher(scope.content.uuid)) {\n          voucherService.cancelDeactivatedVoucher(scope.content.uuid).then(function (succeeded) {\n            if (succeeded) {\n              scope.$emit(\"removeline\", scope.content.uuid);\n            } else {\n              voucherModalsService.confirmDeletion().then(function () {\n                return scope.$emit(\"removeline\", scope.content.uuid);\n              }, function () {\n                return scope.restoreLine();\n              });\n            }\n          }, function () {\n            return scope.restoreLine();\n          });\n        } else {\n          scope.$emit(\"removeline\", scope.content.uuid);\n        }\n        deferred.resolve();\n      }, RESTORE_SECONDS * 1000);\n      var counter = $interval(function () {\n        scope.countdown--;\n      }, 1000);\n      deleteTimeout[\"catch\"](function () {\n        return deferred.reject();\n      });\n      deleteTimeout[\"finally\"](function () {\n        $interval.cancel(counter);\n        deleteTimeout = null;\n      });\n      return deferred.promise;\n    };\n    scope.removeWeborderLine = function () {\n      var weborder = scope.content;\n      scope.removeline().then(function () {\n        return webOrderWidgetService.resetLines(weborder);\n      });\n    };\n    scope.restoreLine = function () {\n      $timeout.cancel(deleteTimeout);\n      scope.countdown = RESTORE_SECONDS;\n      setTemplate(scope.content.templateType);\n    };\n    scope.customquantity = function () {\n      if (scope.content.maxQuantityOne) {\n        notification.pop(\"info\", i18nCantChangeQuantity, i18nItemHasQuantityRestriction);\n      } else if (scope.canShowQtyAdjustments) {\n        scope.$emit(\"customquantity\");\n      }\n    };\n    scope.canceldiscount = function (discount) {\n      if (scope.canDelete(discount)) scope.$emit(\"canceldiscount\", discount);\n    };\n    scope.selectSetNo = function (setNo) {\n      scope.$emit(\"selectsetno\", setNo);\n    };\n    scope.toggleGiftState = function () {\n      scope.isGift = !scope.isGift;\n      if (scope.isGift && !scope.showExpiryPeriodDate) {\n        scope.content.exchangeExpiryDate = moment().add(expiryPeriod, \"days\").toDate();\n      }\n      scope.$emit(\"isgift\", scope.isGift);\n    };\n    scope.toggleSerialNoState = function () {\n      scope.content.didPromtForSerialNumber = false;\n      promtForSerialNumber();\n      scope.$emit(\"hasSerialNo\", scope.content.hasSerialNo);\n    };\n    scope.toggleOrderInStoreState = function () {\n      if (!scope.orderInStoreWebShop) {\n        notification.pop(\"warning\", i18nOrderInStoreNotEnabled);\n        return;\n      }\n      if (!findCustomerService.getSelectedCustomer()) {\n        notification.pop(\"warning\", i18nOrderInStoreErrorNoCustomer);\n        return;\n      } else if (!findCustomerService.getSelectedShippingAddress()) {\n        notification.pop(\"warning\", i18nOrderInStoreNoShippingAddress);\n        return;\n      }\n      scope.isOrderInStore = !scope.isOrderInStore;\n      scope.$emit(\"orderinstore\", scope.isOrderInStore);\n    };\n    scope.toggleExcludeFromLoyalty = function () {\n      scope.isExcludedFromLoyalty = !scope.isExcludedFromLoyalty;\n      scope.$emit(\"excludefromloyalty\", scope.isExcludedFromLoyalty);\n    };\n    scope.stockLookup = function (article) {\n      downpayItemService.selectedArticle = article;\n      scope.$emit(\"stockLookup\");\n    };\n    scope.toDecimal = function (no) {\n      return new Decimal(no);\n    };\n    scope.showLinePrice = receiptHelper.getLineEffectiveSalesPriceTotal;\n    scope.showLineDiscountPct = receiptHelper.getLineDiscountPct;\n    scope.showLineFullPrice = receiptHelper.getLineSalesPriceTotal;\n    scope.isLineDiscounted = receiptHelper.isLineDiscounted;\n    scope.includesLineDiscount = receiptHelper.includesLineDiscount;\n    scope.getCurrency = function () {\n      return posConfig.getLocalCurrency().name;\n    };\n    scope.setClerkId = function (clerkId) {\n      scope.$emit(\"receipt:clerkid:set\", clerkId);\n    };\n    scope.showDiscountButton = function () {\n      return new Decimal(scope.content.calculatedDiscount).gt(0);\n    };\n    scope.$on(\"$stateChangeStart\", function () {\n      if (deleteTimeout) {\n        $timeout.cancel(deleteTimeout);\n        scope.$emit(\"removeline\", scope.content.uuid);\n      }\n    });\n    function evaluateShowExcludeFromLoyaltyBtn(customer) {\n      scope.showExcludedFromLoyaltyBtn = customer && posConfig.getWidgets().some(function (o) {\n        return o.name == \"find-customer\";\n      }) && !posConfig.getLoyaltyConfiguration().settings.isShopExcluded;\n      if (!scope.showExcludedFromLoyaltyBtn) {\n        scope.isExcludedFromLoyalty = false;\n        scope.$emit(\"excludefromloyalty\", scope.isExcludedFromLoyalty);\n      }\n    }\n    function loadConfig() {\n      scope.noteConfiguration = posConfig.noteConfiguration;\n      evaluateShowExcludeFromLoyaltyBtn(findCustomerService.getSelectedCustomer());\n      var downPaymenttWidget = posConfig.getWidgets().find(function (widget) {\n        return widget.name === \"downpay-order\";\n      });\n      if (downPaymenttWidget) {\n        scope.showStockLookupButton = true;\n      }\n    }\n    function loadDiscountOptions() {\n      return _loadDiscountOptions.apply(this, arguments);\n    }\n    function _loadDiscountOptions() {\n      _loadDiscountOptions = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee() {\n        var response, _response$data$, _response$data$2;\n        return _regeneratorRuntime().wrap(function _callee$(_context) {\n          while (1) switch (_context.prev = _context.next) {\n            case 0:\n              _context.next = 2;\n              return discountOptionsService.getDiscountOptions();\n            case 2:\n              response = _context.sent;\n              if (response.data == undefined) {\n                scope.discount10 = 10;\n                scope.discount20 = 20;\n              } else {\n                scope.discount10 = (_response$data$ = response.data[0]) === null || _response$data$ === void 0 ? void 0 : _response$data$.discountAmount;\n                scope.discount20 = (_response$data$2 = response.data[1]) === null || _response$data$2 === void 0 ? void 0 : _response$data$2.discountAmount;\n              }\n            case 4:\n            case \"end\":\n              return _context.stop();\n          }\n        }, _callee);\n      }));\n      return _loadDiscountOptions.apply(this, arguments);\n    }\n    promtForPrice();\n    promtForSerialNumber();\n    eventBus.subscribe(eventBus.events.pos.newConfig, scope, loadConfig);\n  };\n  return {\n    restrict: \"E\",\n    scope: {\n      content: \"=\",\n      isselected: \"=\",\n      iscrollInstance: \"=\",\n      canShowQtyAdjustments: \"=\"\n    },\n    link: linker\n  };\n});\n","\"use strict\";\n\npos.factory(\"returnReasons\", function (posConfig, $q, eventBus) {\n  \"use strict\";\n\n  var service = {};\n  var itemDeffered, receiptDeffered;\n  loadConfig();\n  service.overlay = false;\n  service.receiptReturnOverlay = false;\n  service.returnReasonsSelector = function () {\n    itemDeffered = $q.defer();\n    service.overlay = true;\n    return itemDeffered.promise;\n  };\n  service.returnReceiptReasonsSelector = function () {\n    receiptDeffered = $q.defer();\n    service.receiptReturnOverlay = true;\n    return receiptDeffered.promise;\n  };\n  service.applyReturnReason = function (returnReason) {\n    hide();\n    itemDeffered.resolve(returnReason);\n    itemDeffered = null;\n  };\n  service.applyReceiptReturnReason = function (returnReason) {\n    hide();\n    receiptDeffered.resolve(returnReason);\n    receiptDeffered = null;\n  };\n  service.blur = function () {\n    if (itemDeffered) {\n      itemDeffered.reject(\"dismissed\");\n      itemDeffered = null;\n    }\n    if (receiptDeffered) {\n      receiptDeffered.reject(\"dismissed\");\n      receiptDeffered = null;\n    }\n  };\n  service.haveReturnReasons = function () {\n    return service.items && service.items.length > 0;\n  };\n  service.haveReceiptReturnReasons = function () {\n    return service.receiptReasonItems && service.receiptReasonItems.length > 0;\n  };\n  function hide() {\n    service.overlay = false;\n    service.receiptReturnOverlay = false;\n  }\n  function loadConfig() {\n    service.items = posConfig.getReturnReasons();\n    service.receiptReasonItems = posConfig.getReceiptReturnReasons();\n  }\n  service.getReturnReasons = function () {\n    return service.items;\n  };\n  eventBus.subscribe(eventBus.events.pos.newConfig, null, loadConfig);\n  return service;\n});\n","\"use strict\";\n\npos.value(\"transactionTypeEnum\", Object.freeze({\n  \"return\": \"Return\",\n  exchange: \"Exchange\",\n  sale: \"Sale\",\n  expense: \"Expense\",\n  cashStatement: \"CashStatement\"\n}));\n","\"use strict\";\n\n(function () {\n  \"use strict\";\n\n  angular.module(\"pos\").controller(\"RevideIntegrationController\", RevideIntegrationController);\n  RevideIntegrationController.$inject = [\"revideRepository\", \"receipt\", \"$state\", \"notification\", \"$translate\", \"keypadManager\", \"hideDivSuppressor\", \"eventBus\"];\n  function RevideIntegrationController(revideRepository, receipt, $state, notification, $translate, keypadManager, hideDivSuppressor, eventBus) {\n    var vm = this;\n    buildCustomerSearchParameters();\n    vm.paginationSize = 20;\n    vm.after = 0;\n    vm.showFilter = true;\n    vm.searchCustomer = searchCustomer;\n    vm.buildCustomerSearchParameters = buildCustomerSearchParameters;\n    vm.reset = function () {\n      vm.showSearch = false;\n      vm.searchResult = null;\n      vm.searchParams.socialSecurityNumber.value = \"\";\n      vm.searchParams.email.value = \"\";\n      vm.searchParams.phonenumber.value = \"\";\n    };\n    function buildCustomerSearchParameters() {\n      vm.searchParams = {\n        socialSecurityNumber: {\n          name: \"Social Security Number\",\n          value: \"\"\n        },\n        email: {\n          name: \"Email\",\n          value: \"\"\n        },\n        phonenumber: {\n          name: \"Phone Number\",\n          value: \"\"\n        }\n      };\n      $translate([\"widget/customerFilter/ssn\", \"widget/customerFilter/searchEmail\", \"widget/customerFilter/phoneNumber\"]).then(function (translations) {\n        vm.searchParams.socialSecurityNumber.name = translations[\"widget/customerFilter/ssn\"];\n        vm.searchParams.email.name = translations[\"widget/customerFilter/searchEmail\"];\n        vm.searchParams.phonenumber.name = translations[\"widget/customerFilter/phoneNumber\"];\n      });\n    }\n    function findCustomer() {\n      if (!vm.searchParams.socialSecurityNumber.value && !vm.searchParams.email.value && !vm.searchParams.phonenumber.value) {\n        notification.pop(\"warning\", \"Please enter a search criteria.\");\n      }\n      if (vm.searchParams.socialSecurityNumber.value) {\n        vm.searchResult = revideRepository.api.findCustomerBySsn(vm.searchParams.socialSecurityNumber.value).then(handleCustomerResult);\n      } else if (vm.searchParams.email.value) {\n        revideRepository.api.findCustomerByEmail(vm.searchParams.email.value).then(handleCustomerResult);\n      } else if (vm.searchParams.phonenumber.value) {\n        revideRepository.api.findCustomerByPhoneNumber(vm.searchParams.phonenumber.value).then(handleCustomerResult);\n      }\n    }\n    function searchCustomer() {\n      keypadManager.hide();\n      if (hideDivSuppressor.target) hideDivSuppressor.target.hide();\n      vm.after = 0;\n      vm.fetchFailed = false;\n      vm.searchResult = null;\n      findCustomer();\n    }\n    vm.attachCustomer = function (customer) {\n      receipt.attachCustomer(customer.memberNumber, customer.email);\n      $state.go(\"root.split.pos\");\n      eventBus.notify(eventBus.events.customer.attach, customer);\n    };\n    function handleCustomerResult(response) {\n      if (response && response.data) {\n        vm.showSearch = false;\n        vm.searchResult = response.data;\n      }\n    }\n  }\n})();\n","\"use strict\";\n\npos.factory(\"revideRepository\", function (backendHelper, posConfig, eventBus) {\n  var backend = backendHelper.backend;\n  var repo = {};\n  var params = null;\n  loadConfig();\n  repo.api = {\n    findCustomerBySsn: function findCustomerBySsn(ssn) {\n      return backend.api.get(\"api/revide/contact/ssn/\" + encodeURIComponent(ssn), params);\n    },\n    findCustomerByEmail: function findCustomerByEmail(email) {\n      return backend.api.get(\"api/revide/contact/email/\" + encodeURIComponent(email), params);\n    },\n    findCustomerByPhoneNumber: function findCustomerByPhoneNumber(phoneNumber) {\n      return backend.api.get(\"api/revide/contact/phonenumber/\" + encodeURIComponent(phoneNumber), params);\n    },\n    postTransaction: function postTransaction(transaction) {\n      return backend.api.post(\"api/revide/transaction\", transaction, params);\n    }\n  };\n  function loadConfig() {\n    params = {\n      headers: {\n        apikey: posConfig.getShopFeatures().revide.values.apikey\n      }\n    };\n  }\n  eventBus.subscribe(eventBus.events.pos.newConfig, null, loadConfig);\n  return repo;\n});\n","\"use strict\";\n\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _regeneratorRuntime() { \"use strict\"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return r; }; var t, r = {}, e = Object.prototype, n = e.hasOwnProperty, o = \"function\" == typeof Symbol ? Symbol : {}, i = o.iterator || \"@@iterator\", a = o.asyncIterator || \"@@asyncIterator\", u = o.toStringTag || \"@@toStringTag\"; function c(t, r, e, n) { return Object.defineProperty(t, r, { value: e, enumerable: !n, configurable: !n, writable: !n }); } try { c({}, \"\"); } catch (t) { c = function c(t, r, e) { return t[r] = e; }; } function h(r, e, n, o) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype); return c(a, \"_invoke\", function (r, e, n) { var o = 1; return function (i, a) { if (3 === o) throw Error(\"Generator is already running\"); if (4 === o) { if (\"throw\" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var u = n.delegate; if (u) { var c = d(u, n); if (c) { if (c === f) continue; return c; } } if (\"next\" === n.method) n.sent = n._sent = n.arg;else if (\"throw\" === n.method) { if (1 === o) throw o = 4, n.arg; n.dispatchException(n.arg); } else \"return\" === n.method && n.abrupt(\"return\", n.arg); o = 3; var h = s(r, e, n); if (\"normal\" === h.type) { if (o = n.done ? 4 : 2, h.arg === f) continue; return { value: h.arg, done: n.done }; } \"throw\" === h.type && (o = 4, n.method = \"throw\", n.arg = h.arg); } }; }(r, n, new Context(o || [])), !0), a; } function s(t, r, e) { try { return { type: \"normal\", arg: t.call(r, e) }; } catch (t) { return { type: \"throw\", arg: t }; } } r.wrap = h; var f = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var l = {}; c(l, i, function () { return this; }); var p = Object.getPrototypeOf, y = p && p(p(x([]))); y && y !== e && n.call(y, i) && (l = y); var v = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(l); function g(t) { [\"next\", \"throw\", \"return\"].forEach(function (r) { c(t, r, function (t) { return this._invoke(r, t); }); }); } function AsyncIterator(t, r) { function e(o, i, a, u) { var c = s(t[o], t, i); if (\"throw\" !== c.type) { var h = c.arg, f = h.value; return f && \"object\" == _typeof(f) && n.call(f, \"__await\") ? r.resolve(f.__await).then(function (t) { e(\"next\", t, a, u); }, function (t) { e(\"throw\", t, a, u); }) : r.resolve(f).then(function (t) { h.value = t, a(h); }, function (t) { return e(\"throw\", t, a, u); }); } u(c.arg); } var o; c(this, \"_invoke\", function (t, n) { function i() { return new r(function (r, o) { e(t, n, r, o); }); } return o = o ? o.then(i, i) : i(); }, !0); } function d(r, e) { var n = e.method, o = r.i[n]; if (o === t) return e.delegate = null, \"throw\" === n && r.i[\"return\"] && (e.method = \"return\", e.arg = t, d(r, e), \"throw\" === e.method) || \"return\" !== n && (e.method = \"throw\", e.arg = new TypeError(\"The iterator does not provide a '\" + n + \"' method\")), f; var i = s(o, r.i, e.arg); if (\"throw\" === i.type) return e.method = \"throw\", e.arg = i.arg, e.delegate = null, f; var a = i.arg; return a ? a.done ? (e[r.r] = a.value, e.next = r.n, \"return\" !== e.method && (e.method = \"next\", e.arg = t), e.delegate = null, f) : a : (e.method = \"throw\", e.arg = new TypeError(\"iterator result is not an object\"), e.delegate = null, f); } function w(t) { this.tryEntries.push(t); } function m(r) { var e = r[4] || {}; e.type = \"normal\", e.arg = t, r[4] = e; } function Context(t) { this.tryEntries = [[-1]], t.forEach(w, this), this.reset(!0); } function x(r) { if (null != r) { var e = r[i]; if (e) return e.call(r); if (\"function\" == typeof r.next) return r; if (!isNaN(r.length)) { var o = -1, a = function e() { for (; ++o < r.length;) if (n.call(r, o)) return e.value = r[o], e.done = !1, e; return e.value = t, e.done = !0, e; }; return a.next = a; } } throw new TypeError(_typeof(r) + \" is not iterable\"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, c(v, \"constructor\", GeneratorFunctionPrototype), c(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction), GeneratorFunction.displayName = c(GeneratorFunctionPrototype, u, \"GeneratorFunction\"), r.isGeneratorFunction = function (t) { var r = \"function\" == typeof t && t.constructor; return !!r && (r === GeneratorFunction || \"GeneratorFunction\" === (r.displayName || r.name)); }, r.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, c(t, u, \"GeneratorFunction\")), t.prototype = Object.create(v), t; }, r.awrap = function (t) { return { __await: t }; }, g(AsyncIterator.prototype), c(AsyncIterator.prototype, a, function () { return this; }), r.AsyncIterator = AsyncIterator, r.async = function (t, e, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(h(t, e, n, o), i); return r.isGeneratorFunction(e) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, g(v), c(v, u, \"Generator\"), c(v, i, function () { return this; }), c(v, \"toString\", function () { return \"[object Generator]\"; }), r.keys = function (t) { var r = Object(t), e = []; for (var n in r) e.unshift(n); return function t() { for (; e.length;) if ((n = e.pop()) in r) return t.value = n, t.done = !1, t; return t.done = !0, t; }; }, r.values = x, Context.prototype = { constructor: Context, reset: function reset(r) { if (this.prev = this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = \"next\", this.arg = t, this.tryEntries.forEach(m), !r) for (var e in this) \"t\" === e.charAt(0) && n.call(this, e) && !isNaN(+e.slice(1)) && (this[e] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0][4]; if (\"throw\" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(r) { if (this.done) throw r; var e = this; function n(t) { a.type = \"throw\", a.arg = r, e.next = t; } for (var o = e.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i[4], u = this.prev, c = i[1], h = i[2]; if (-1 === i[0]) return n(\"end\"), !1; if (!c && !h) throw Error(\"try statement without catch or finally\"); if (null != i[0] && i[0] <= u) { if (u < c) return this.method = \"next\", this.arg = t, n(c), !0; if (u < h) return n(h), !1; } } }, abrupt: function abrupt(t, r) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var n = this.tryEntries[e]; if (n[0] > -1 && n[0] <= this.prev && this.prev < n[2]) { var o = n; break; } } o && (\"break\" === t || \"continue\" === t) && o[0] <= r && r <= o[2] && (o = null); var i = o ? o[4] : {}; return i.type = t, i.arg = r, o ? (this.method = \"next\", this.next = o[2], f) : this.complete(i); }, complete: function complete(t, r) { if (\"throw\" === t.type) throw t.arg; return \"break\" === t.type || \"continue\" === t.type ? this.next = t.arg : \"return\" === t.type ? (this.rval = this.arg = t.arg, this.method = \"return\", this.next = \"end\") : \"normal\" === t.type && r && (this.next = r), f; }, finish: function finish(t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[2] === t) return this.complete(e[4], e[3]), m(e), f; } }, \"catch\": function _catch(t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[0] === t) { var n = e[4]; if (\"throw\" === n.type) { var o = n.arg; m(e); } return o; } } throw Error(\"illegal catch attempt\"); }, delegateYield: function delegateYield(r, e, n) { return this.delegate = { i: x(r), r: e, n: n }, \"next\" === this.method && (this.arg = t), f; } }, r; }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"next\", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"throw\", n); } _next(void 0); }); }; }\npos.controller(\"SearchArticleCtrl\", function ($scope, receipt, posConfig, articles, notification, $translate, keypadManager, hideDivSuppressor, setService, $log, eventBus, indexdb, labelTemplates, printRepository, posStorage, itemInfoService, backend) {\n  \"use strict\";\n\n  loadConfig();\n  $scope.searchResult = [];\n  $scope.disableInfiniteScroll = false;\n  $scope.fetchFailed = false;\n  $scope.searchParams = {\n    value: \"\"\n  };\n  $scope.labelTemplates = labelTemplates;\n  $scope.labelQuantity = 1;\n  $scope.stateParamsContext = $scope.$stateParams.context;\n  $scope.enableSerialNumberTracking = posConfig.tenantGeneralPosSettings.enableSerialNumberTracking;\n  var page = 0;\n  var pageSize = 30;\n  var searchValues;\n  var selectedItemLineIndex = 0;\n  var i18nCheckLog = $translate.instant(\"toast/check log\");\n  var i18nYesAnswer = $translate.instant(\"label/yes\");\n  var i18nOfflineCache = $translate.instant(\"toast/offline-cache\");\n  $scope.reset = function () {\n    $scope.searchParams.value = \"\";\n    $scope.searchItems();\n  };\n  $scope.selectItemLine = function (index) {\n    selectedItemLineIndex = index;\n  };\n  $scope.selectedItemLineIndex = function () {\n    return selectedItemLineIndex;\n  };\n  $scope.addToReceipt = /*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee() {\n    var item, canProceed;\n    return _regeneratorRuntime().wrap(function _callee$(_context) {\n      while (1) switch (_context.prev = _context.next) {\n        case 0:\n          item = $scope.searchResult[selectedItemLineIndex];\n          _context.next = 3;\n          return eventBus.notifyAsync(eventBus.events.article.addToReceipt, item);\n        case 3:\n          canProceed = _context.sent;\n          if (canProceed) {\n            if ($scope.$stateParams.context === \"set\") {\n              if (item.disableDiscount) {\n                $translate([\"receiptItem/toast/itemHasDiscountBlocked\", \"receiptItem/toast/cantAddItemToSet\"]).then(function (translations) {\n                  notification.pop(\"info\", translations[\"receiptItem/toast/cantAddItemToSet\"], translations[\"receiptItem/toast/itemHasDiscountBlocked\"]);\n                });\n              } else {\n                setService.addSetItem(item);\n                $scope.back();\n              }\n            } else {\n              if ($scope.enableSerialNumberTracking && item && item.type == 2) {\n                item.requiredToScanSerialNumber = true;\n              }\n              receipt.addToReceipt(item);\n              $scope.back();\n            }\n          }\n        case 5:\n        case \"end\":\n          return _context.stop();\n      }\n    }, _callee);\n  }));\n  $scope.printLabel = /*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee2() {\n    var selectedLabelTemplate, item, barcode, shopId, mac, successMsg, errorMsg;\n    return _regeneratorRuntime().wrap(function _callee2$(_context2) {\n      while (1) switch (_context2.prev = _context2.next) {\n        case 0:\n          if (!labelTemplates.hasLabelTemplates()) {\n            _context2.next = 30;\n            break;\n          }\n          _context2.prev = 1;\n          _context2.next = 4;\n          return labelTemplates.selectLabelTemplate();\n        case 4:\n          selectedLabelTemplate = _context2.sent;\n          _context2.next = 10;\n          break;\n        case 7:\n          _context2.prev = 7;\n          _context2.t0 = _context2[\"catch\"](1);\n          return _context2.abrupt(\"return\");\n        case 10:\n          item = $scope.searchResult[selectedItemLineIndex];\n          barcode = item.ean;\n          shopId = posStorage.get(\"shopId\");\n          mac = backend.getCurrentDevice().mac;\n          _context2.prev = 14;\n          _context2.next = 17;\n          return printRepository.api.printLabel(shopId, mac, barcode, $scope.labelQuantity, selectedLabelTemplate.id, item.salesPrice);\n        case 17:\n          _context2.next = 19;\n          return $translate(\"labelTemplate/printing\");\n        case 19:\n          successMsg = _context2.sent;\n          notification.pop(\"success\", successMsg);\n          $scope.labelQuantity = 1;\n          _context2.next = 30;\n          break;\n        case 24:\n          _context2.prev = 24;\n          _context2.t1 = _context2[\"catch\"](14);\n          _context2.next = 28;\n          return $translate(\"labelTemplate/could-not-print\");\n        case 28:\n          errorMsg = _context2.sent;\n          notification.pop(\"error\", errorMsg);\n        case 30:\n        case \"end\":\n          return _context2.stop();\n      }\n    }, _callee2, null, [[1, 7], [14, 24]]);\n  }));\n  function fetchSuccess(response, fromOfflineCache) {\n    $scope.disableInfiniteScroll = false;\n    for (var i = 0; i < response.data.length; i++) {\n      $scope.searchResult.push(response.data[i]);\n    }\n    if (response.data.length === 0) {\n      $scope.fetchFailed = true;\n      $scope.disableInfiniteScroll = true;\n    }\n    $scope.fromOfflineCache = !!fromOfflineCache;\n    if (fromOfflineCache) {\n      $scope.disableInfiniteScroll = $scope.fromOfflineCache;\n    }\n    page++;\n  }\n  function fetchError(errorResponse) {\n    $log.debug(\"searchByParameter error\");\n    $log.debug(errorResponse);\n    if (errorResponse.status == 404 || errorResponse.status == -1) {\n      indexdb.products.getAll().then(function (products) {\n        errorResponse.data = products;\n        notification.pop(\"info\", i18nOfflineCache);\n        fetchSuccess(errorResponse, true);\n      });\n    } else {\n      notification.pop(\"error\", i18nCheckLog);\n    }\n  }\n  function fetchFinally() {\n    $scope.disableInfiniteScroll = false;\n  }\n  $scope.getMoreItems = function () {\n    articles.searchByParameter(searchValues.value, page, pageSize).then(fetchSuccess, fetchError, fetchFinally);\n  };\n  $scope.searchItems = function () {\n    keypadManager.hide();\n    if (hideDivSuppressor.target) hideDivSuppressor.target.hide();\n    page = 0;\n    searchValues = angular.copy($scope.searchParams);\n    $scope.fetchFailed = false;\n    $scope.disableInfiniteScroll = false;\n    $scope.searchResult = [];\n    $scope.getMoreItems();\n  };\n  $scope.quantity = function () {\n    keypadManager.hide();\n  };\n  $scope.back = function () {\n    if ($scope.$stateParams.context === \"set\") return $scope.$state.go(\"root.split.sellasset\");\n    $scope.$state.go(\"root.split.pos\");\n  };\n\n  // initialize page with a wild card search\n  $scope.searchItems();\n  function loadConfig() {\n    $scope.noteConfiguration = posConfig.noteConfiguration;\n  }\n  eventBus.subscribe(eventBus.events.pos.newConfig, $scope, loadConfig);\n});\n","\"use strict\";\n\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nfunction _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); }\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _iterableToArray(r) { if (\"undefined\" != typeof Symbol && null != r[Symbol.iterator] || null != r[\"@@iterator\"]) return Array.from(r); }\nfunction _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\npos.controller(\"SelectDimensionComboCtrl\", function ($scope, $state, receipt, articles, selectDimensionComboService) {\n  \"use strict\";\n\n  $scope.masterItem = selectDimensionComboService.getMasterItemData();\n\n  // Fill with dimension names\n  $scope.dimensions = $scope.masterItem.items.map(function (o) {\n    return o.attributes;\n  }).reduce(function (pre, cur) {\n    return [].concat(_toConsumableArray(pre), _toConsumableArray(cur));\n  }, []).map(function (o) {\n    return o.dimensionName;\n  }).reduce(function (acc, cur) {\n    if (!(cur in acc)) acc[cur] = [];\n    return acc;\n  }, {});\n\n  // Count no of dimensions so CSS grid can be setup correctly\n  $scope.noOfDimensions = Object.keys($scope.dimensions).length;\n\n  // Fill with dimension values\n  Object.keys($scope.dimensions).forEach(function (dimension) {\n    return $scope.masterItem.items.map(function (o) {\n      return o.attributes;\n    }).reduce(function (pre, cur) {\n      return [].concat(_toConsumableArray(pre), _toConsumableArray(cur));\n    }, []).filter(function (o) {\n      return o.dimensionName == dimension;\n    }).sort(function (o) {\n      return o.valueSequence;\n    }).map(function (o) {\n      return o.value;\n    }).forEach(function (dimensionValue) {\n      if (!$scope.dimensions[dimension].includes(dimensionValue)) {\n        $scope.dimensions[dimension].push(dimensionValue);\n      }\n    });\n  });\n\n  // Create a dictionary template of the dimensions\n  var dictTemplate = Object.keys($scope.dimensions).reduce(function (acc, cur) {\n    acc[cur] = null;\n    return acc;\n  }, {});\n  $scope.selections = _objectSpread({}, dictTemplate);\n  $scope.offsets = _objectSpread({}, dictTemplate);\n  Object.keys($scope.offsets).forEach(function (key) {\n    return $scope.offsets[key] = 0;\n  });\n  $scope.select = function (dimension, value) {\n    if ($scope.isDisabled(dimension, value)) return;\n    var selection = $scope.selections[dimension];\n    if (selection == value) $scope.selections[dimension] = null;else $scope.selections[dimension] = value;\n  };\n  $scope.isSelected = function (dimension, value) {\n    return $scope.selections[dimension] == value;\n  };\n  $scope.isReadyToProcceed = function () {\n    return Object.values($scope.selections).reduce(function (pre, cur) {\n      return pre && !!cur;\n    }, true);\n  };\n\n  // Calculate maximum number of values in each column based on resolution\n  var calculateMaxOnPage = function calculateMaxOnPage() {\n    return $scope.maxOnPage = Math.floor(window.innerHeight / 160);\n  };\n  calculateMaxOnPage();\n  $scope.$watch(function () {\n    return window.innerHeight;\n  }, calculateMaxOnPage);\n  $scope.pageUp = function (dimension) {\n    if ($scope.offsets[dimension] < $scope.dimensions[dimension].length - $scope.maxOnPage) $scope.offsets[dimension]++;else $scope.offsets[dimension] = 0;\n  };\n  $scope.pageDown = function (dimension) {\n    if ($scope.offsets[dimension] > 0) $scope.offsets[dimension]--;else $scope.offsets[dimension] = $scope.dimensions[dimension].length - $scope.maxOnPage;\n  };\n  $scope.isDisabled = function (dimension, value) {\n    var currentValidItems = $scope.masterItem.items.filter(function (item) {\n      return Object.keys($scope.selections).filter(function (key) {\n        return !!$scope.selections[key];\n      }).reduce(function (pre, cur) {\n        return pre && item.attributes.find(function (o) {\n          return o.dimensionName == cur && o.value == $scope.selections[cur];\n        });\n      }, true);\n    });\n    return !currentValidItems.find(function (item) {\n      return item.attributes.find(function (o) {\n        return o.dimensionName == dimension && o.value == value;\n      });\n    });\n  };\n  $scope.ok = function () {\n    // Find item with all matching dimension selections\n    var item = $scope.masterItem.items.find(function (item) {\n      return Object.keys($scope.selections).reduce(function (pre, cur) {\n        return pre && item.attributes.find(function (o) {\n          return o.dimensionName == cur && o.value == $scope.selections[cur];\n        });\n      }, true);\n    });\n\n    // Query for full article information and add to receipt\n    articles.findArticle(item.barcode).then(function (articleResponse) {\n      return selectDimensionComboService.callCallBack(articleResponse.data);\n    });\n    selectDimensionComboService.clearMasterItemData();\n  };\n});\n","\"use strict\";\n\npos.factory(\"selectDimensionComboService\", function (posStorage) {\n  var callback;\n  var service = {};\n  service.setMasterItemData = function (mi) {\n    return posStorage.set(\"dimension-select-masteritem\", mi);\n  };\n  service.getMasterItemData = function () {\n    return posStorage.get(\"dimension-select-masteritem\");\n  };\n  service.clearMasterItemData = function () {\n    return posStorage.remove(\"dimension-select-masteritem\");\n  };\n  service.setCallBack = function (cb) {\n    return callback = cb;\n  };\n  service.callCallBack = function (item) {\n    return callback(item);\n  };\n  return service;\n});\n","\"use strict\";\n\npos.controller(\"SellAsSetCtrl\", function ($scope, $state, articles, notification, receipt, posConfig, $translate, keypadManager, setService, $timeout, inputValidationService, selectDimensionComboService) {\n  var barcodePlaceholder, pricePlaceholder, i18nUnknownEan, i18nGrtThanTotal, i18nMoreThanOne, i18nSetPrice, i18nProperAmount;\n  $scope.placeHolder = barcodePlaceholder;\n  $scope.inputValue = \"\";\n  var onehundred = new Decimal(100),\n    selectedSetLine;\n  loadConfig();\n  $translate([\"input/enter_barcode\", \"input/enter_amount\", \"toast/need ean\", \"toast/unknown ean\", \"toast/greater than combine total\", \"toast/morethanone\", \"toast/setPrice\", \"toast/proper amount\"]).then(function (translations) {\n    $scope.barcodePlaceholder = translations[\"input/enter_barcode\"];\n    $scope.pricePlaceholder = translations[\"input/enter_amount\"];\n    i18nUnknownEan = translations[\"toast/unknown ean\"];\n    i18nGrtThanTotal = translations[\"toast/greater than combine total\"];\n    i18nMoreThanOne = translations[\"toast/morethanone\"];\n    i18nSetPrice = translations[\"toast/setPrice\"];\n    i18nProperAmount = translations[\"toast/proper amount\"];\n  });\n  $scope.$watch(function () {\n    return setService.getSet().length;\n  }, function () {\n    if ($scope.instance) {\n      $timeout(function () {\n        $scope.instance.refresh();\n        $scope.instance.scrollTo(0, $scope.instance.maxScrollY);\n      });\n    }\n  });\n  $scope.evaluateSet = function () {\n    if (!$scope.price) return keypadManager.show(angular.element(\"#sellAsSetInput\"), function () {\n      $scope.setPrice($scope.price);\n    }, true);\n    $scope.addToReceipt();\n  };\n  $scope.resetField = function () {\n    $scope.inputValue = \"\";\n    setService.clearSet();\n  };\n  $scope.handleInput = function enterEAN(value) {\n    $scope.displayItems(value);\n    $scope.inputValue = \"\";\n  };\n  $scope.displayItems = function (value) {\n    if (!value || !/^\\d+$/.test(value))\n      // check that there's no alphanumeric characters in the barcode\n      return;else {\n      articles.findArticle(value).then(function (response) {\n        if (response.status == 226) {\n          if (response.data.items.length > 1) {\n            selectDimensionComboService.setMasterItemData(response.data);\n            selectDimensionComboService.setCallBack(function (item) {\n              setService.addSetItem(item);\n              $state.go(\"root.split.sellasset\");\n            });\n            $state.go(\"root.split.selectdimensioncombo\");\n          } else if (response.data.items.length == 1) {\n            $scope.displayItems(response.data.items[0].barcode);\n          }\n        } else {\n          setService.addSetItem(response.data);\n          keypadManager.hide(); //Hide Keypad\n        }\n      }, function (errorResponse) {\n        notification.pop(\"warning\", i18nUnknownEan);\n      });\n    }\n  };\n  $scope.showLineDiscountPct = function (article) {\n    return onehundred.minus(article.effectiveSalesPrice.times(onehundred).dividedBy(article.salesPrice));\n  };\n  $scope.isEffectiveLessThanSalesPrice = function (article) {\n    if (article.effectiveSalesPrice.lessThan(article.salesPrice)) return true;\n  };\n  $scope.selectSetLine = function (index) {\n    if (selectedSetLine === index) {\n      //Work as Accordion\n      selectedSetLine = -1;\n    } else selectedSetLine = index;\n  };\n  $scope.selectedSetLine = function () {\n    return selectedSetLine;\n  };\n  $scope.deleteSetItem = function (itemIndex) {\n    setService.removeSetItem(itemIndex);\n  };\n  $scope.setPrice = function setSetPrice(price) {\n    try {\n      price = inputValidationService.convertToDecimal(price);\n    } catch (err) {\n      return notification.pop(\"info\", i18nProperAmount);\n    }\n    if (price.isNaN() || price.isZero() || !inputValidationService.validateAmount(price)) {\n      return notification.pop(\"info\", i18nProperAmount);\n    }\n    keypadManager.hide();\n    $scope.price = \"\";\n    setService.setSetPrice(price);\n    $scope.addToReceipt();\n  };\n  $scope.addToReceipt = function () {\n    if (setService.getSetTotal() === setService.getSetPrice()) {\n      return notification.pop(\"info\", i18nSetPrice);\n    }\n    var added = setService.addSetToReceipt();\n    if (!added) return notification.pop(\"info\", i18nMoreThanOne);\n    $scope.backToReceipt();\n  };\n  $scope.$watch(setService.getSet, function (set) {\n    $scope.set = set;\n  });\n  $scope.getSetTotal = setService.getSetTotal;\n  $scope.getSetPrice = setService.getSetPrice;\n  $scope.backToReceipt = function () {\n    $scope.resetField();\n    $state.go(\"root.split.pos\");\n  };\n  function loadConfig() {\n    $scope.noteConfiguration = posConfig.noteConfiguration;\n  }\n});\n","\"use strict\";\n\npos.factory(\"setService\", function (posStorage, receipt, $translate, notification) {\n  var service = {};\n  var setPrice = new Decimal(0);\n  var set = [];\n  function persistSet() {\n    posStorage.set(\"setList\", set);\n  }\n  function init() {\n    set = posStorage.get(\"setList\") || [];\n    angular.forEach(set, function (item) {\n      item.effectiveSalesPrice = new Decimal(item.effectiveSalesPrice);\n      item.salesPrice = new Decimal(item.salesPrice);\n    });\n    if (service.getSetTotal() !== service.getSetPrice()) setPrice = service.getSetPrice();\n  }\n  service.addSetItem = function addSetItem(item) {\n    if (item.disableDiscount) {\n      $translate([\"receiptItem/toast/itemHasDiscountBlocked\", \"receiptItem/toast/cantAddItemToSet\"]).then(function (translations) {\n        notification.pop(\"info\", translations[\"receiptItem/toast/cantAddItemToSet\"], translations[\"receiptItem/toast/itemHasDiscountBlocked\"]);\n      });\n      return;\n    }\n    item.quantity = 1;\n    item.salesPrice = new Decimal(item.salesPrice);\n    item.effectiveSalesPrice = new Decimal(item.salesPrice);\n    item.calculatedDiscount = new Decimal(0);\n    item.setNo = (posStorage.get(\"setNo\") || 0) + 1;\n    item.uuid = receipt.generateUUID();\n    item.discountDetails = [];\n\n    // mark the new item as the new setEnd or setStart\n    item.templateType = set.length === 0 ? \"setStart\" : \"setEnd\";\n    // change the current setEnd to setItem\n    if (set.length >= 2) {\n      set[set.length - 1].templateType = \"setItem\";\n    }\n    // add the new item to the set\n    set.push(item);\n\n    // changing price also persists\n    if (!setPrice.isZero()) service.setSetPrice(setPrice);else persistSet();\n  };\n  service.removeSetItem = function removeSetItem(index) {\n    set.splice(index, 1);\n    persistSet();\n  };\n  service.clearSet = function clearSet() {\n    set = [];\n    setPrice = new Decimal(0);\n    persistSet();\n  };\n  service.getSetTotal = function getSetTotal() {\n    var total = new Decimal(0);\n    angular.forEach(set, function (item) {\n      total = total.plus(item.salesPrice);\n    });\n    return total;\n  };\n  service.getSetPrice = function getSetTotal() {\n    var total = new Decimal(0);\n    angular.forEach(set, function (item) {\n      total = total.plus(item.effectiveSalesPrice);\n    });\n    return total;\n  };\n  service.setSetPrice = function setSetPrice(price) {\n    setPrice = new Decimal(price);\n    // calculate the discount percentage for the total\n    var discount = receipt.calculateDiscountPercentage(setPrice, service.getSetTotal());\n    angular.forEach(set, function (item) {\n      // apply the discount percentage to each line\n\n      receipt.setItemDiscountPercentage(item, discount, undefined, \"Line\", true);\n    });\n    correctRoundingDifference();\n    persistSet();\n  };\n  function correctRoundingDifference() {\n    var setTotal = service.getSetTotal();\n    var totalDiscount = new Decimal(0);\n    var topItem;\n    angular.forEach(set, function (item) {\n      totalDiscount = totalDiscount.plus(item.calculatedDiscount);\n      // store the highest value item\n      if (!topItem || topItem.salesPrice.lt(item.salesPrice)) topItem = item;\n    });\n\n    // it would be weird if there wasn't a sigle item in the set\n    if (!topItem) return;\n    var diff = totalDiscount.plus(setPrice).minus(setTotal);\n    topItem.effectiveSalesPrice = topItem.effectiveSalesPrice.plus(diff);\n  }\n  service.getSet = function getSet() {\n    return set;\n  };\n  service.addSetToReceipt = function addSetToReceipt() {\n    if (set.length < 2) return false;\n    posStorage.set(\"setNo\", posStorage.get(\"setNo\") + 1);\n    receipt.addSet(set);\n    service.clearSet();\n    return true;\n  };\n  init();\n  return service;\n});\n","\"use strict\";\n\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _regeneratorRuntime() { \"use strict\"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return r; }; var t, r = {}, e = Object.prototype, n = e.hasOwnProperty, o = \"function\" == typeof Symbol ? Symbol : {}, i = o.iterator || \"@@iterator\", a = o.asyncIterator || \"@@asyncIterator\", u = o.toStringTag || \"@@toStringTag\"; function c(t, r, e, n) { return Object.defineProperty(t, r, { value: e, enumerable: !n, configurable: !n, writable: !n }); } try { c({}, \"\"); } catch (t) { c = function c(t, r, e) { return t[r] = e; }; } function h(r, e, n, o) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype); return c(a, \"_invoke\", function (r, e, n) { var o = 1; return function (i, a) { if (3 === o) throw Error(\"Generator is already running\"); if (4 === o) { if (\"throw\" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var u = n.delegate; if (u) { var c = d(u, n); if (c) { if (c === f) continue; return c; } } if (\"next\" === n.method) n.sent = n._sent = n.arg;else if (\"throw\" === n.method) { if (1 === o) throw o = 4, n.arg; n.dispatchException(n.arg); } else \"return\" === n.method && n.abrupt(\"return\", n.arg); o = 3; var h = s(r, e, n); if (\"normal\" === h.type) { if (o = n.done ? 4 : 2, h.arg === f) continue; return { value: h.arg, done: n.done }; } \"throw\" === h.type && (o = 4, n.method = \"throw\", n.arg = h.arg); } }; }(r, n, new Context(o || [])), !0), a; } function s(t, r, e) { try { return { type: \"normal\", arg: t.call(r, e) }; } catch (t) { return { type: \"throw\", arg: t }; } } r.wrap = h; var f = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var l = {}; c(l, i, function () { return this; }); var p = Object.getPrototypeOf, y = p && p(p(x([]))); y && y !== e && n.call(y, i) && (l = y); var v = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(l); function g(t) { [\"next\", \"throw\", \"return\"].forEach(function (r) { c(t, r, function (t) { return this._invoke(r, t); }); }); } function AsyncIterator(t, r) { function e(o, i, a, u) { var c = s(t[o], t, i); if (\"throw\" !== c.type) { var h = c.arg, f = h.value; return f && \"object\" == _typeof(f) && n.call(f, \"__await\") ? r.resolve(f.__await).then(function (t) { e(\"next\", t, a, u); }, function (t) { e(\"throw\", t, a, u); }) : r.resolve(f).then(function (t) { h.value = t, a(h); }, function (t) { return e(\"throw\", t, a, u); }); } u(c.arg); } var o; c(this, \"_invoke\", function (t, n) { function i() { return new r(function (r, o) { e(t, n, r, o); }); } return o = o ? o.then(i, i) : i(); }, !0); } function d(r, e) { var n = e.method, o = r.i[n]; if (o === t) return e.delegate = null, \"throw\" === n && r.i[\"return\"] && (e.method = \"return\", e.arg = t, d(r, e), \"throw\" === e.method) || \"return\" !== n && (e.method = \"throw\", e.arg = new TypeError(\"The iterator does not provide a '\" + n + \"' method\")), f; var i = s(o, r.i, e.arg); if (\"throw\" === i.type) return e.method = \"throw\", e.arg = i.arg, e.delegate = null, f; var a = i.arg; return a ? a.done ? (e[r.r] = a.value, e.next = r.n, \"return\" !== e.method && (e.method = \"next\", e.arg = t), e.delegate = null, f) : a : (e.method = \"throw\", e.arg = new TypeError(\"iterator result is not an object\"), e.delegate = null, f); } function w(t) { this.tryEntries.push(t); } function m(r) { var e = r[4] || {}; e.type = \"normal\", e.arg = t, r[4] = e; } function Context(t) { this.tryEntries = [[-1]], t.forEach(w, this), this.reset(!0); } function x(r) { if (null != r) { var e = r[i]; if (e) return e.call(r); if (\"function\" == typeof r.next) return r; if (!isNaN(r.length)) { var o = -1, a = function e() { for (; ++o < r.length;) if (n.call(r, o)) return e.value = r[o], e.done = !1, e; return e.value = t, e.done = !0, e; }; return a.next = a; } } throw new TypeError(_typeof(r) + \" is not iterable\"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, c(v, \"constructor\", GeneratorFunctionPrototype), c(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction), GeneratorFunction.displayName = c(GeneratorFunctionPrototype, u, \"GeneratorFunction\"), r.isGeneratorFunction = function (t) { var r = \"function\" == typeof t && t.constructor; return !!r && (r === GeneratorFunction || \"GeneratorFunction\" === (r.displayName || r.name)); }, r.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, c(t, u, \"GeneratorFunction\")), t.prototype = Object.create(v), t; }, r.awrap = function (t) { return { __await: t }; }, g(AsyncIterator.prototype), c(AsyncIterator.prototype, a, function () { return this; }), r.AsyncIterator = AsyncIterator, r.async = function (t, e, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(h(t, e, n, o), i); return r.isGeneratorFunction(e) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, g(v), c(v, u, \"Generator\"), c(v, i, function () { return this; }), c(v, \"toString\", function () { return \"[object Generator]\"; }), r.keys = function (t) { var r = Object(t), e = []; for (var n in r) e.unshift(n); return function t() { for (; e.length;) if ((n = e.pop()) in r) return t.value = n, t.done = !1, t; return t.done = !0, t; }; }, r.values = x, Context.prototype = { constructor: Context, reset: function reset(r) { if (this.prev = this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = \"next\", this.arg = t, this.tryEntries.forEach(m), !r) for (var e in this) \"t\" === e.charAt(0) && n.call(this, e) && !isNaN(+e.slice(1)) && (this[e] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0][4]; if (\"throw\" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(r) { if (this.done) throw r; var e = this; function n(t) { a.type = \"throw\", a.arg = r, e.next = t; } for (var o = e.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i[4], u = this.prev, c = i[1], h = i[2]; if (-1 === i[0]) return n(\"end\"), !1; if (!c && !h) throw Error(\"try statement without catch or finally\"); if (null != i[0] && i[0] <= u) { if (u < c) return this.method = \"next\", this.arg = t, n(c), !0; if (u < h) return n(h), !1; } } }, abrupt: function abrupt(t, r) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var n = this.tryEntries[e]; if (n[0] > -1 && n[0] <= this.prev && this.prev < n[2]) { var o = n; break; } } o && (\"break\" === t || \"continue\" === t) && o[0] <= r && r <= o[2] && (o = null); var i = o ? o[4] : {}; return i.type = t, i.arg = r, o ? (this.method = \"next\", this.next = o[2], f) : this.complete(i); }, complete: function complete(t, r) { if (\"throw\" === t.type) throw t.arg; return \"break\" === t.type || \"continue\" === t.type ? this.next = t.arg : \"return\" === t.type ? (this.rval = this.arg = t.arg, this.method = \"return\", this.next = \"end\") : \"normal\" === t.type && r && (this.next = r), f; }, finish: function finish(t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[2] === t) return this.complete(e[4], e[3]), m(e), f; } }, \"catch\": function _catch(t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[0] === t) { var n = e[4]; if (\"throw\" === n.type) { var o = n.arg; m(e); } return o; } } throw Error(\"illegal catch attempt\"); }, delegateYield: function delegateYield(r, e, n) { return this.delegate = { i: x(r), r: e, n: n }, \"next\" === this.method && (this.arg = t), f; } }, r; }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"next\", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"throw\", n); } _next(void 0); }); }; }\n/**\n * The article service handles searching for items and loading offline articles\n * It leverages the localstorage to save offline articles for use when the API is unavailable.\n *\n * Note that the 'products' (offline articles) are not stored in the posStorage (namespaced storage)\n * because it uses a lot of our available localstorage space and therefore we cannot have an offline\n * cache for each shop. The offline cache will therefore be replaced by the current shop logged in.\n *\n * It can happen that a user starts the POS as shopId 996001 and then shuts it down. The next time\n * he wants to start the POS he's offline but now wants to start it as 110110. He will then have\n * the offline products for 996 and NOT the ones for 110 since he's not online to load new ones.\n * This would be a rare occurence since it would require him to have access to the portal\n * which is where he can change shopId.\n *\n * @param  {string} 'articles'     name of the service\n * @param  {function} function     dependencies\n */\npos.factory(\"articles\", function (articleRepository, serialNumberRepository, $q, indexdb, $log, fluctuatingPropertiesHelper, $injector) {\n  \"use strict\";\n\n  var articles = {};\n  articles.findArticle = function (barcode) {\n    var posConfig = $injector.get(\"posConfig\");\n    var deferred = $q.defer();\n    var identifier = barcode;\n    var findArticle = articles.findArticleByEAN;\n    if (posConfig.tenantGeneralPosSettings && posConfig.tenantGeneralPosSettings.allowPriceEmbeddedBarcode) {\n      if (barcode.length == 18 && barcode[5] === \"9\") {\n        identifier = barcode.substr(6, 6);\n        findArticle = articles.findArticleById;\n      }\n    }\n    findArticle(identifier).then(function (response) {\n      var result = response.data;\n      if (!result) return deferred.reject();\n      if (barcode.length === 18 && posConfig.tenantGeneralPosSettings.allowPriceEmbeddedBarcode) {\n        result.salesPrice = decodeSalesPrice(barcode.substr(12, 6)) / 100;\n        result.ean = barcode;\n      }\n      deferred.resolve(response);\n    }, deferred.reject);\n    return deferred.promise;\n  };\n  articles.findArticleBySerialNumber = function (serialNumber) {\n    var deferred = $q.defer();\n    var identifier = serialNumber;\n    var findArticle = articles.findArticleBySerialNumber;\n    findArticle(identifier).then(function (response) {\n      if (!response.data) return deferred.reject();\n      deferred.resolve(response);\n    }, deferred.reject);\n    return deferred.promise;\n  };\n  articles.findSerialNumberByItemId = function (itemId) {\n    var deferred = $q.defer();\n    var identifier = itemId;\n    var query = articles.query;\n    query(identifier).then(function (response) {\n      if (!response.data) return deferred.reject();\n      deferred.resolve(response);\n    }, deferred.reject);\n    return deferred.promise;\n  };\n  function decodeSalesPrice(price) {\n    var newPrice = \"\";\n    for (var i = 0; i < price.length; i++) {\n      if (i > 3) newPrice += price[i];else newPrice += price[i % 2 === 0 ? i + 1 : i - 1];\n    }\n    return Number(newPrice);\n  }\n\n  // Try and fetch from API if it's offline then look in the offline cache\n  articles.findArticleByEAN = /*#__PURE__*/function () {\n    var _ref = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee(ean) {\n      var article;\n      return _regeneratorRuntime().wrap(function _callee$(_context) {\n        while (1) switch (_context.prev = _context.next) {\n          case 0:\n            _context.prev = 0;\n            _context.next = 3;\n            return articleRepository.api.findArticleByEAN(ean);\n          case 3:\n            return _context.abrupt(\"return\", _context.sent);\n          case 6:\n            _context.prev = 6;\n            _context.t0 = _context[\"catch\"](0);\n            if (!(_context.t0 && (_context.t0.status != 404 || _context.t0.data === \"offline\"))) {\n              _context.next = 14;\n              break;\n            }\n            _context.next = 11;\n            return articles.getOfflineArticleByEAN(ean);\n          case 11:\n            article = _context.sent;\n            if (!article) {\n              _context.next = 14;\n              break;\n            }\n            return _context.abrupt(\"return\", {\n              data: article,\n              config: _context.t0.config,\n              status: _context.t0.status\n            });\n          case 14:\n            throw _context.t0;\n          case 15:\n          case \"end\":\n            return _context.stop();\n        }\n      }, _callee, null, [[0, 6]]);\n    }));\n    return function (_x) {\n      return _ref.apply(this, arguments);\n    };\n  }();\n  articles.findArticleBySerialNumber = /*#__PURE__*/function () {\n    var _ref2 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee2(serialNumber) {\n      return _regeneratorRuntime().wrap(function _callee2$(_context2) {\n        while (1) switch (_context2.prev = _context2.next) {\n          case 0:\n            _context2.prev = 0;\n            _context2.next = 3;\n            return serialNumberRepository.api.getBySerialNumber(serialNumber, true);\n          case 3:\n            return _context2.abrupt(\"return\", _context2.sent);\n          case 6:\n            _context2.prev = 6;\n            _context2.t0 = _context2[\"catch\"](0);\n            if (!_context2.t0.data.innerError) {\n              _context2.next = 10;\n              break;\n            }\n            return _context2.abrupt(\"return\", {\n              data: _context2.t0.data.innerError.error,\n              config: _context2.t0.config,\n              status: _context2.t0.status\n            });\n          case 10:\n            return _context2.abrupt(\"return\", {\n              data: _context2.t0.data.message,\n              config: _context2.t0.config,\n              status: _context2.t0.status\n            });\n          case 11:\n          case \"end\":\n            return _context2.stop();\n        }\n      }, _callee2, null, [[0, 6]]);\n    }));\n    return function (_x2) {\n      return _ref2.apply(this, arguments);\n    };\n  }();\n  articles.addArticleToSerialNumberRepository = /*#__PURE__*/function () {\n    var _ref3 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee3(serialNo, barcode) {\n      var serialNumber;\n      return _regeneratorRuntime().wrap(function _callee3$(_context3) {\n        while (1) switch (_context3.prev = _context3.next) {\n          case 0:\n            serialNumber = {};\n            serialNumber.serialNo = serialNo;\n            serialNumber.itemId = 0;\n            serialNumber.barcode = barcode;\n            serialNumber.dateCreated = moment(new Date().toISOString());\n            serialNumber.shopId = 0;\n            serialNumber.status = 1;\n            _context3.prev = 7;\n            _context3.next = 10;\n            return serialNumberRepository.api.create(serialNumber);\n          case 10:\n            return _context3.abrupt(\"return\", _context3.sent);\n          case 13:\n            _context3.prev = 13;\n            _context3.t0 = _context3[\"catch\"](7);\n            return _context3.abrupt(\"return\", {\n              data: _context3.t0.data.innerError.error,\n              config: _context3.t0.config,\n              status: _context3.t0.status\n            });\n          case 16:\n          case \"end\":\n            return _context3.stop();\n        }\n      }, _callee3, null, [[7, 13]]);\n    }));\n    return function (_x3, _x4) {\n      return _ref3.apply(this, arguments);\n    };\n  }();\n  articles.query = /*#__PURE__*/function () {\n    var _ref4 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee4(itemId, status, serialNumber) {\n      var query;\n      return _regeneratorRuntime().wrap(function _callee4$(_context4) {\n        while (1) switch (_context4.prev = _context4.next) {\n          case 0:\n            query = {};\n            query.itemId = itemId;\n            query.status = status;\n            query.serialNumbers = [];\n            if (serialNumber) query.serialNumbers.push(serialNumber);\n            _context4.next = 7;\n            return serialNumberRepository.api.query(query);\n          case 7:\n            return _context4.abrupt(\"return\", _context4.sent);\n          case 8:\n          case \"end\":\n            return _context4.stop();\n        }\n      }, _callee4);\n    }));\n    return function (_x5, _x6, _x7) {\n      return _ref4.apply(this, arguments);\n    };\n  }();\n  articles.findArticleById = /*#__PURE__*/function () {\n    var _ref5 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee5(id) {\n      var article;\n      return _regeneratorRuntime().wrap(function _callee5$(_context5) {\n        while (1) switch (_context5.prev = _context5.next) {\n          case 0:\n            _context5.prev = 0;\n            _context5.next = 3;\n            return articleRepository.api.findArticleById(id);\n          case 3:\n            return _context5.abrupt(\"return\", _context5.sent);\n          case 6:\n            _context5.prev = 6;\n            _context5.t0 = _context5[\"catch\"](0);\n            if (!(_context5.t0 && (_context5.t0.status != 404 || _context5.t0.data === \"offline\"))) {\n              _context5.next = 14;\n              break;\n            }\n            _context5.next = 11;\n            return articles.getOfflineArticleById(id);\n          case 11:\n            article = _context5.sent;\n            if (!article) {\n              _context5.next = 14;\n              break;\n            }\n            return _context5.abrupt(\"return\", {\n              data: article,\n              config: _context5.t0.config,\n              status: _context5.t0.status\n            });\n          case 14:\n            throw _context5.t0;\n          case 15:\n          case \"end\":\n            return _context5.stop();\n        }\n      }, _callee5, null, [[0, 6]]);\n    }));\n    return function (_x8) {\n      return _ref5.apply(this, arguments);\n    };\n  }();\n  articles.findArticleByExchangeBarcode = function (barcode) {\n    return articleRepository.api.findArticleByExchangeBarcode(barcode).then(function (response) {\n      fluctuatingPropertiesHelper.setExchangeLabelBarcodeScanned(response.data.item, barcode);\n      return response;\n    });\n  };\n  articles.searchByParameter = function (searchString, page, paginationSize) {\n    return articleRepository.api.searchByParameter(searchString, page, paginationSize);\n  };\n  articles.getOfflineArticleByEAN = /*#__PURE__*/function () {\n    var _ref6 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee6(ean) {\n      return _regeneratorRuntime().wrap(function _callee6$(_context6) {\n        while (1) switch (_context6.prev = _context6.next) {\n          case 0:\n            _context6.next = 2;\n            return indexdb.products.findByBarcode(ean);\n          case 2:\n            return _context6.abrupt(\"return\", _context6.sent);\n          case 3:\n          case \"end\":\n            return _context6.stop();\n        }\n      }, _callee6);\n    }));\n    return function (_x9) {\n      return _ref6.apply(this, arguments);\n    };\n  }();\n  articles.getOfflineArticleById = /*#__PURE__*/function () {\n    var _ref7 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee7(id) {\n      return _regeneratorRuntime().wrap(function _callee7$(_context7) {\n        while (1) switch (_context7.prev = _context7.next) {\n          case 0:\n            _context7.next = 2;\n            return indexdb.products.findByItemNo(id);\n          case 2:\n            return _context7.abrupt(\"return\", _context7.sent);\n          case 3:\n          case \"end\":\n            return _context7.stop();\n        }\n      }, _callee7);\n    }));\n    return function (_x0) {\n      return _ref7.apply(this, arguments);\n    };\n  }();\n  articles.printBarcodesToConsole = function (amount) {\n    articleRepository.api.getEANs(10).then(function (response) {\n      $log.debug(response.data);\n    });\n  };\n  articles.loadOfflineArticles = /*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee8() {\n    var response;\n    return _regeneratorRuntime().wrap(function _callee8$(_context8) {\n      while (1) switch (_context8.prev = _context8.next) {\n        case 0:\n          _context8.next = 2;\n          return articleRepository.api.getOfflineArticles();\n        case 2:\n          response = _context8.sent;\n          _context8.next = 5;\n          return indexdb.products.updateCache(response.data);\n        case 5:\n          return _context8.abrupt(\"return\", response.data);\n        case 6:\n        case \"end\":\n          return _context8.stop();\n      }\n    }, _callee8);\n  }));\n  return articles;\n});\n","\"use strict\";\n\npos.service(\"Aside\", function ($aside) {\n  var defaultAsideTpl = \"/views/shared/aside\";\n  var defaultAside = {\n    content: \" \"\n  };\n  var theScope;\n  function Aside(scope, options) {\n    theScope = scope;\n    var defaultOptions = {\n      scope: scope,\n      templateUrl: defaultAsideTpl,\n      title: defaultAside.title,\n      content: defaultAside.content,\n      animation: \"am-slide-right\",\n      placement: \"right\",\n      show: false\n    };\n    if (options && !angular.isObject(options)) {\n      angular.extend(defaultOptions, {\n        placement: options,\n        animation: \"am-slide-\" + options\n      });\n    } else angular.extend(defaultOptions, options);\n    var theAside = $aside(defaultOptions);\n    theAside.$promise.then(function () {});\n    this.isShown = function () {\n      return theAside.$isShown;\n    };\n    this.hide = function () {\n      theAside.hide();\n    };\n    this.show = function () {\n      theAside.show();\n    };\n  }\n  return Aside;\n});\n","\"use strict\";\n\npos.directive(\"autofocus\", function ($timeout) {\n  return {\n    link: function link(scope, element, attrs) {\n      $timeout(function () {\n        element.focus();\n      });\n    }\n  };\n});\n","\"use strict\";\n\npos.directive(\"toggleBackdrop\", function ($rootScope, $compile, backdrop, $timeout) {\n  return {\n    restrict: \"A\",\n    link: function link(scope, ele, attrs) {\n      ele.on(\"click\", function () {\n        var backdropTarget = \".menu-backdrop\",\n          backdropElement = angular.element(\".menu-backdrop\"),\n          backdropContainer = angular.element(\"#content__inner\");\n        if (backdrop.exists(backdropElement)) {\n          backdropElement.remove();\n        } else {\n          $timeout(function () {\n            backdropContainer.append($compile('<div class=\"' + backdropTarget.substring(1) + '\" close-navigation=\"#globalNavigation\" navigation-class=\"menu--open\" remove-backdrop></div>')($rootScope));\n          }, 0);\n        }\n      });\n    }\n  };\n}).directive(\"addBackdrop\", function ($rootScope, $compile, backdrop, $timeout) {\n  return {\n    restrict: \"A\",\n    link: function link(scope, ele, attrs) {\n      ele.on(\"click\", function () {\n        var backdropTarget = \".menu-backdrop\",\n          backdropContainer = angular.element(\"#content__inner\");\n        if (!backdrop.exists(backdropElement)) {\n          $timeout(function () {\n            backdropContainer.append($compile('<div class=\"' + backdropTarget.substring(1) + '\" close-navigation=\"#globalNavigation\" navigation-class=\"menu--open\" remove-backdrop></div>')($rootScope));\n          });\n        }\n      });\n    }\n  };\n}).directive(\"removeBackdrop\", function (backdrop) {\n  return {\n    restrict: \"A\",\n    link: function link(scope, ele, attrs) {\n      ele.on(\"click\", function () {\n        var backdropElement = angular.element(\".menu-backdrop\");\n        backdropElement.remove();\n      });\n    }\n  };\n});\n","\"use strict\";\n\npos.factory(\"backdrop\", function ($rootScope) {\n  var backdrop = {};\n  backdrop.exists = function (backdropElement) {\n    return verifyBackdrop(backdropElement);\n  };\n  function verifyBackdrop(backdropElement) {\n    var backdropBool = backdropElement.length == 1 ? true : false;\n    return backdropBool;\n  }\n  return backdrop;\n});\n","\"use strict\";\n\nfunction _regeneratorRuntime() { \"use strict\"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return r; }; var t, r = {}, e = Object.prototype, n = e.hasOwnProperty, o = \"function\" == typeof Symbol ? Symbol : {}, i = o.iterator || \"@@iterator\", a = o.asyncIterator || \"@@asyncIterator\", u = o.toStringTag || \"@@toStringTag\"; function c(t, r, e, n) { return Object.defineProperty(t, r, { value: e, enumerable: !n, configurable: !n, writable: !n }); } try { c({}, \"\"); } catch (t) { c = function c(t, r, e) { return t[r] = e; }; } function h(r, e, n, o) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype); return c(a, \"_invoke\", function (r, e, n) { var o = 1; return function (i, a) { if (3 === o) throw Error(\"Generator is already running\"); if (4 === o) { if (\"throw\" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var u = n.delegate; if (u) { var c = d(u, n); if (c) { if (c === f) continue; return c; } } if (\"next\" === n.method) n.sent = n._sent = n.arg;else if (\"throw\" === n.method) { if (1 === o) throw o = 4, n.arg; n.dispatchException(n.arg); } else \"return\" === n.method && n.abrupt(\"return\", n.arg); o = 3; var h = s(r, e, n); if (\"normal\" === h.type) { if (o = n.done ? 4 : 2, h.arg === f) continue; return { value: h.arg, done: n.done }; } \"throw\" === h.type && (o = 4, n.method = \"throw\", n.arg = h.arg); } }; }(r, n, new Context(o || [])), !0), a; } function s(t, r, e) { try { return { type: \"normal\", arg: t.call(r, e) }; } catch (t) { return { type: \"throw\", arg: t }; } } r.wrap = h; var f = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var l = {}; c(l, i, function () { return this; }); var p = Object.getPrototypeOf, y = p && p(p(x([]))); y && y !== e && n.call(y, i) && (l = y); var v = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(l); function g(t) { [\"next\", \"throw\", \"return\"].forEach(function (r) { c(t, r, function (t) { return this._invoke(r, t); }); }); } function AsyncIterator(t, r) { function e(o, i, a, u) { var c = s(t[o], t, i); if (\"throw\" !== c.type) { var h = c.arg, f = h.value; return f && \"object\" == _typeof(f) && n.call(f, \"__await\") ? r.resolve(f.__await).then(function (t) { e(\"next\", t, a, u); }, function (t) { e(\"throw\", t, a, u); }) : r.resolve(f).then(function (t) { h.value = t, a(h); }, function (t) { return e(\"throw\", t, a, u); }); } u(c.arg); } var o; c(this, \"_invoke\", function (t, n) { function i() { return new r(function (r, o) { e(t, n, r, o); }); } return o = o ? o.then(i, i) : i(); }, !0); } function d(r, e) { var n = e.method, o = r.i[n]; if (o === t) return e.delegate = null, \"throw\" === n && r.i[\"return\"] && (e.method = \"return\", e.arg = t, d(r, e), \"throw\" === e.method) || \"return\" !== n && (e.method = \"throw\", e.arg = new TypeError(\"The iterator does not provide a '\" + n + \"' method\")), f; var i = s(o, r.i, e.arg); if (\"throw\" === i.type) return e.method = \"throw\", e.arg = i.arg, e.delegate = null, f; var a = i.arg; return a ? a.done ? (e[r.r] = a.value, e.next = r.n, \"return\" !== e.method && (e.method = \"next\", e.arg = t), e.delegate = null, f) : a : (e.method = \"throw\", e.arg = new TypeError(\"iterator result is not an object\"), e.delegate = null, f); } function w(t) { this.tryEntries.push(t); } function m(r) { var e = r[4] || {}; e.type = \"normal\", e.arg = t, r[4] = e; } function Context(t) { this.tryEntries = [[-1]], t.forEach(w, this), this.reset(!0); } function x(r) { if (null != r) { var e = r[i]; if (e) return e.call(r); if (\"function\" == typeof r.next) return r; if (!isNaN(r.length)) { var o = -1, a = function e() { for (; ++o < r.length;) if (n.call(r, o)) return e.value = r[o], e.done = !1, e; return e.value = t, e.done = !0, e; }; return a.next = a; } } throw new TypeError(_typeof(r) + \" is not iterable\"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, c(v, \"constructor\", GeneratorFunctionPrototype), c(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction), GeneratorFunction.displayName = c(GeneratorFunctionPrototype, u, \"GeneratorFunction\"), r.isGeneratorFunction = function (t) { var r = \"function\" == typeof t && t.constructor; return !!r && (r === GeneratorFunction || \"GeneratorFunction\" === (r.displayName || r.name)); }, r.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, c(t, u, \"GeneratorFunction\")), t.prototype = Object.create(v), t; }, r.awrap = function (t) { return { __await: t }; }, g(AsyncIterator.prototype), c(AsyncIterator.prototype, a, function () { return this; }), r.AsyncIterator = AsyncIterator, r.async = function (t, e, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(h(t, e, n, o), i); return r.isGeneratorFunction(e) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, g(v), c(v, u, \"Generator\"), c(v, i, function () { return this; }), c(v, \"toString\", function () { return \"[object Generator]\"; }), r.keys = function (t) { var r = Object(t), e = []; for (var n in r) e.unshift(n); return function t() { for (; e.length;) if ((n = e.pop()) in r) return t.value = n, t.done = !1, t; return t.done = !0, t; }; }, r.values = x, Context.prototype = { constructor: Context, reset: function reset(r) { if (this.prev = this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = \"next\", this.arg = t, this.tryEntries.forEach(m), !r) for (var e in this) \"t\" === e.charAt(0) && n.call(this, e) && !isNaN(+e.slice(1)) && (this[e] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0][4]; if (\"throw\" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(r) { if (this.done) throw r; var e = this; function n(t) { a.type = \"throw\", a.arg = r, e.next = t; } for (var o = e.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i[4], u = this.prev, c = i[1], h = i[2]; if (-1 === i[0]) return n(\"end\"), !1; if (!c && !h) throw Error(\"try statement without catch or finally\"); if (null != i[0] && i[0] <= u) { if (u < c) return this.method = \"next\", this.arg = t, n(c), !0; if (u < h) return n(h), !1; } } }, abrupt: function abrupt(t, r) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var n = this.tryEntries[e]; if (n[0] > -1 && n[0] <= this.prev && this.prev < n[2]) { var o = n; break; } } o && (\"break\" === t || \"continue\" === t) && o[0] <= r && r <= o[2] && (o = null); var i = o ? o[4] : {}; return i.type = t, i.arg = r, o ? (this.method = \"next\", this.next = o[2], f) : this.complete(i); }, complete: function complete(t, r) { if (\"throw\" === t.type) throw t.arg; return \"break\" === t.type || \"continue\" === t.type ? this.next = t.arg : \"return\" === t.type ? (this.rval = this.arg = t.arg, this.method = \"return\", this.next = \"end\") : \"normal\" === t.type && r && (this.next = r), f; }, finish: function finish(t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[2] === t) return this.complete(e[4], e[3]), m(e), f; } }, \"catch\": function _catch(t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[0] === t) { var n = e[4]; if (\"throw\" === n.type) { var o = n.arg; m(e); } return o; } } throw Error(\"illegal catch attempt\"); }, delegateYield: function delegateYield(r, e, n) { return this.delegate = { i: x(r), r: e, n: n }, \"next\" === this.method && (this.arg = t), f; } }, r; }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"next\", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"throw\", n); } _next(void 0); }); }; }\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction getConnectorUrl(id, deviceUrl, listeners, scheme) {\n  if (!Array.isArray(listeners)) {\n    console.error(\"Unable to determine listeners of the software connector with ID \".concat(id));\n    return null;\n  }\n  var listener = listeners.find(function (e) {\n    return e.scheme === scheme;\n  });\n  if (!listener) {\n    console.error(\"Unable to determine \".concat(scheme, \" listener of the software connector with ID \").concat(id));\n    return null;\n  }\n  var url = new URL(deviceUrl);\n  url.protocol = \"\".concat(scheme, \":\");\n  url.port = listener.port;\n  return url.toString().replace(/\\/+$/g, \"\");\n}\npos.provider(\"backend\", function () {\n  this.apiUrl = \"\";\n  this.apiName = \"POS-API\";\n  this.$get = function ($http, $log, $q, posStorage, $injector, offlineDevice, $rootScope, $location) {\n    var backend = {};\n    backend.apiName = this.apiName;\n    backend.devices = [];\n    backend.isOnline = true;\n    backend.api = createDevice(this.apiName, this.apiUrl);\n    backend.defaultDevice = posStorage.get(\"defaultDeviceIndex\") || 0;\n    backend.setDefaultDevice = function (index, preventEventDispatchOrOptions, maybeOptions) {\n      var preventEventDispatch = false;\n      var options = {};\n\n      // Second arg may be legacy boolean (preventEventDispatch) or an options object.\n      if (typeof preventEventDispatchOrOptions === \"boolean\") {\n        preventEventDispatch = preventEventDispatchOrOptions;\n        options = maybeOptions || {};\n      } else if (_typeof(preventEventDispatchOrOptions) === \"object\" && preventEventDispatchOrOptions !== null) {\n        options = preventEventDispatchOrOptions;\n      }\n      var connectorLockService = $injector.get(\"connectorLockService\");\n\n      // Connector lock: block automatic failover unless restoring (force) or user picks a device (manual).\n      // manual on a different index unlocks first; shouldBlockSwitch handles all other automatic calls.\n      if (options.manual && index !== backend.defaultDevice) connectorLockService.unlock();else if (connectorLockService.shouldBlockSwitch(index, options)) return false;\n      if (index === backend.defaultDevice) return true;\n      var previousDefaultDevice = backend.defaultDevice;\n      backend.defaultDevice = index;\n      posStorage.set(\"defaultDeviceIndex\", index);\n      if (!preventEventDispatch) {\n        $rootScope.$broadcast(\"backend:setdefaultdevice\", {\n          newDefaultDevice: index,\n          oldDefaultDevice: previousDefaultDevice\n        });\n      }\n      return true;\n    };\n    backend.addDevice = function (name, deviceUrl, id, mac, terminalType, isVirtual, virtualConfiguration, listeners) {\n      backend.devices.push(createDevice(name, deviceUrl, id, mac, terminalType, isVirtual, virtualConfiguration, listeners));\n    };\n    backend.addOfflineDevice = function (name, id) {\n      backend.devices.push(createDevice(name, offlineDevice, id));\n    };\n    backend.getDeviceById = function (id) {\n      for (var i = 0; i < this.devices.length; i++) {\n        if (this.devices[i].id == id) return this.devices[i];\n      }\n    };\n    backend.getDeviceByIndex = function (index) {\n      if (typeof index !== \"undefined\" && index <= this.devices.length) {\n        return this.devices[index];\n      }\n      return null;\n    };\n    backend.getCurrentDevice = function () {\n      if (backend.defaultDevice !== \"undefined\" && backend.defaultDevice > -1) {\n        return this.devices[backend.defaultDevice];\n      }\n      return null;\n    };\n    $rootScope.$on(\"device:offline\", function (event, device) {\n      backend.isOnline = false;\n    });\n    $rootScope.$on(\"device:retry:success\", function (event, device) {\n      backend.isOnline = true;\n    });\n    backend.rebootConnector = /*#__PURE__*/function () {\n      var _ref = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee(armDevice, shopId, tenantId, posId) {\n        var command;\n        return _regeneratorRuntime().wrap(function _callee$(_context) {\n          while (1) switch (_context.prev = _context.next) {\n            case 0:\n              command = {};\n              command.shopId = shopId;\n              command.tenantId = tenantId;\n              command.posId = posId;\n              command.mac = armDevice.mac;\n              command.created = {\n                $date: new Date().getTime()\n              };\n              command.command = \"reboot\";\n              command.guiName = \"reboot\";\n              _context.next = 10;\n              return backend.api.post(\"api/armcommand\", {\n                json: JSON.stringify(command)\n              });\n            case 10:\n              return _context.abrupt(\"return\", _context.sent);\n            case 11:\n            case \"end\":\n              return _context.stop();\n          }\n        }, _callee);\n      }));\n      return function (_x, _x2, _x3, _x4) {\n        return _ref.apply(this, arguments);\n      };\n    }();\n    function createDevice(name, deviceUrl, id, mac, terminalType, isVirtual, virtualConfiguration, listeners) {\n      function device(config, force) {\n        angular.extend(config, {\n          device: device,\n          headers: angular.extend(config.headers || {}, {\n            \"POS-Locale\": $injector.get(\"posConfig\").getLocale()\n          })\n        });\n        if (typeof deviceUrl === \"function\") return deviceUrl(config);\n        if (!device.isOnline && !force) {\n          // TODO: Notify / broadcast offline\n          var rejection = {\n            data: \"offline\",\n            status: 404,\n            config: config\n          };\n          return $q.reject(rejection);\n        }\n        var scheme = $location.protocol();\n\n        // add http:// infront of calls to an ARM device, since the deviceUrl can just be an IP\n        var protocol = scheme + \"://\";\n        if (!deviceUrl.startsWith(protocol) && deviceUrl.length > 0 && !device.isApi) deviceUrl = protocol + deviceUrl;\n        if (!config.url.startsWith(\"/\") && !deviceUrl.endsWith(\"/\") && deviceUrl.length !== 0) {\n          config.url = \"/\" + config.url;\n        }\n\n        // all software connectors have MAC address with the first two octets being \"ff\"\n        if (typeof mac === \"string\" && mac.startsWith(\"ff-ff-\")) {\n          var url = getConnectorUrl(id, deviceUrl, listeners, scheme);\n          config.url = (url || deviceUrl) + config.url;\n        } else {\n          config.url = deviceUrl + config.url;\n        }\n        return $http(config);\n      }\n      device.deviceName = name;\n      device.url = deviceUrl;\n      device.id = id;\n      device.isOnline = true;\n      device.isApi = id === undefined;\n      device.isStatic = typeof deviceUrl === \"function\";\n      device.mac = mac;\n      device.terminalType = terminalType;\n      device.isVirtual = isVirtual;\n      device.virtualConfiguration = virtualConfiguration;\n      createShortMethods(\"get\", \"delete\", \"head\", \"jsonp\");\n      createShortMethodsWithData(\"post\", \"put\", \"patch\");\n      return device;\n      function createShortMethods(names) {\n        angular.forEach(arguments, function (name) {\n          device[name] = function (url, config) {\n            return device(angular.extend(config || {}, {\n              method: name,\n              url: url\n            }));\n          };\n        });\n      }\n      function createShortMethodsWithData(names) {\n        angular.forEach(arguments, function (name) {\n          device[name] = function (url, data, config) {\n            return device(angular.extend(config || {}, {\n              method: name,\n              url: url,\n              data: data\n            }));\n          };\n        });\n      }\n    }\n    backend.getDevice = function (name) {\n      for (var i = 0; i < backend.devices.length; i++) {\n        if (backend.devices[i].deviceName === name) return backend.devices[i];\n      }\n    };\n    return backend;\n  };\n}).service(\"backendHelper\", function (backend, $q) {\n  var backendHelper = {\n    backend: backend\n  };\n  backendHelper.deviceCount = function () {\n    return backend.devices.length;\n  };\n  backendHelper.tryForEachDevice = function (method, args) {\n    var deferred = $q.defer();\n    var scope = {\n      deviceId: 0\n    };\n    tryDevice();\n    function tryDevice() {\n      method.apply(scope, args).then(deferred.resolve, function (error) {\n        scope.deviceId++;\n        if (scope.deviceId < backend.devices.length) tryDevice();else deferred.reject(error);\n      });\n    }\n    return deferred.promise;\n  };\n  backendHelper.normalize = function (promise) {\n    var deferred = $q.defer();\n    promise.then(function (response) {\n      if (response.config.device && response.data.d && response.data.d.hasOwnProperty(\"IsCompleted\")) response.data.d = response.data.d.Result;\n      deferred.resolve(backendHelper.camelCase(response));\n    }, function (response) {\n      deferred.reject(backendHelper.camelCase(response));\n    });\n    return deferred.promise;\n  };\n  backendHelper.camelCase = function (response) {\n    response.data = toCamel(response.data);\n    function toCamel(o) {\n      var build, key, destKey, value;\n      if (o instanceof Array) {\n        build = [];\n        for (key in o) {\n          if (!o.hasOwnProperty(key)) continue;\n          value = o[key];\n          if (_typeof(value) === \"object\" && value !== null) {\n            value = toCamel(value);\n          }\n          build.push(value);\n        }\n      } else {\n        build = {};\n        for (key in o) {\n          destKey = key.toUpperCase() === key ? key : (key.charAt(0).toLowerCase() + key.slice(1) || key).toString();\n          value = o[key];\n          if (_typeof(value) === \"object\" && value !== null) {\n            value = toCamel(value);\n          }\n          build[destKey] = value;\n        }\n      }\n      return build;\n    }\n    return response;\n  };\n  backendHelper.safeifyList = function (list, blacklist) {\n    var safeList = [];\n    angular.forEach(list, function (item) {\n      this.push(backendHelper.safeify(item, blacklist));\n    }, safeList);\n    return safeList;\n  };\n  backendHelper.safeify = function (item, blacklist) {\n    blacklist = blacklist || [];\n    var safeItem = {};\n    for (var property in item) {\n      if (item.hasOwnProperty(property) && blacklist.indexOf(property) === -1 && !isEmpty(item[property])) {\n        safeItem[property] = item[property];\n      }\n    }\n    return safeItem;\n    function isEmpty(obj) {\n      if (obj !== Object(obj) || Object.prototype.toString.call(obj) === \"[object Date]\") return false; // input is a primitive or date (which looks like an empty object)\n      for (var prop in obj) {\n        if (obj.hasOwnProperty(prop)) return false;\n      }\n      return true;\n    }\n  };\n  return backendHelper;\n}).service(\"clerkRepository\", function ($q, backend) {\n  var clerks = {};\n  clerks.api = {\n    // dontTrackData: we dont want to track this request because we can use SignalR to fetch the values from localStorage if needed\n    getAll: function getAll() {\n      return backend.api.get(\"api/clerks\", {\n        dontTrackData: true\n      });\n    },\n    getClerk: function getClerk(id) {\n      return backend.api.get(\"api/clerks/\" + id, {\n        ignoreError: true\n      })[\"catch\"](function () {\n        return $q.reject({\n          id: \"INVALID_CLERK_ID\",\n          clerkId: id\n        });\n      });\n    }\n  };\n  return clerks;\n}).factory(\"itemgroupRepository\", function (backendHelper) {\n  var itemgroups = {};\n  var backend = backendHelper.backend;\n  itemgroups.api = {\n    getAll: function getAll() {\n      return backend.api.get(\"api/itemgroups/\");\n    },\n    getAllExpenseGroups: function getAllExpenseGroups() {\n      return backend.api.get(\"api/itemgroups/expense\");\n    }\n  };\n  return itemgroups;\n}).service(\"serialNumberRepository\", function (backendHelper) {\n  var serialNumbers = {};\n  var backend = backendHelper.backend;\n  serialNumbers.api = {\n    getBySerialNumber: function getBySerialNumber(serialNumber, overrideAlreadyAssigned) {\n      return backend.api.get(\"api/serialnumber\", {\n        ignoreError: true,\n        params: {\n          serialNumber: serialNumber,\n          overrideAlreadyAssigned: overrideAlreadyAssigned\n        }\n      });\n    },\n    query: function query(_query) {\n      return backend.api.post(\"api/serialnumber/query\", _query);\n    },\n    create: function create(serialNumber) {\n      return backend.api.post(\"api/serialnumber/\", serialNumber);\n    }\n  };\n  return serialNumbers;\n}).service(\"articleRepository\", function (backendHelper) {\n  var articles = {};\n  var backend = backendHelper.backend;\n  articles.api = {\n    getOfflineArticles: function getOfflineArticles() {\n      return backend.api.get(\"api/articles/offlinecache\", {\n        dontTrackData: true\n      });\n    },\n    findArticleByEAN: function findArticleByEAN(ean) {\n      return backend.api.get(\"api/articles/ean/\" + ean, {\n        ignoreError: true\n      });\n    },\n    findArticleById: function findArticleById(id) {\n      return backend.api.get(\"api/articles/id/\" + id, {\n        ignoreError: true\n      });\n    },\n    findArticleByExchangeBarcode: function findArticleByExchangeBarcode(barcode) {\n      return backend.api.get(\"api/giftexchange/\".concat(barcode, \"/line\"), {\n        ignoreError: true\n      });\n    },\n    getEANs: function getEANs(amount) {\n      return backend.api.get(\"api/articles/eans/\" + amount, {\n        dontTrack: true\n      });\n    },\n    searchByParameter: function searchByParameter(searchString, page, paginationSize) {\n      var params = {};\n      if (searchString) {\n        params.searchString = searchString;\n      }\n      return backend.api.post(\"api/articles/search/defaults/\".concat(page, \"/\").concat(paginationSize), null, {\n        params: params\n      });\n    }\n  };\n  return articles;\n}).service(\"tokenRepository\", function (backendHelper, indexdb) {\n  var tokens = {};\n  var backend = backendHelper.backend;\n  var header = {\n    \"Content-Type\": \"application/x-www-form-urlencoded\"\n  };\n  var apiTokenRequestUrl = \"token\";\n  tokens.api = {\n    tokenRequestUrl: backend.api.url + apiTokenRequestUrl,\n    authorize: function authorize(username, password, clientid) {\n      return backend.api({\n        method: \"POST\",\n        url: apiTokenRequestUrl,\n        data: \"grant_type=password&username=\" + username + \"&password=\" + password + \"&client_id=\" + clientid,\n        headers: header\n      }).then(setToken);\n    },\n    refreshAuthToken: function refreshAuthToken(refreshToken, clientid) {\n      return backend.api({\n        method: \"POST\",\n        url: apiTokenRequestUrl,\n        data: \"grant_type=refresh_token&refresh_token=\" + refreshToken + \"&client_id=\" + clientid,\n        headers: header\n      }).then(setToken);\n    }\n  };\n  function setToken(response) {\n    if (\"serviceWorker\" in navigator) {\n      indexdb.serviceWorkerConstants.set(\"webposApiToken\", response.data.token || response.data.access_token);\n      if (response.data.refresh_token) {\n        indexdb.serviceWorkerConstants.set(\"webposRefreshToken\", response.data.refresh_token);\n      }\n    }\n    return response;\n  }\n  return tokens;\n}).service(\"configRepository\", function (backendHelper, $http) {\n  var config = {\n    getTranslations: function getTranslations(language) {\n      return $http.get(\"assets/language/i18n/json/\" + language + \".json\");\n    }\n  };\n  var backend = backendHelper.backend;\n  config.api = {\n    getPaymentDevices: function getPaymentDevices() {\n      return backend.api.get(\"api/config/paymentdevices\");\n    },\n    getConfiguration: function getConfiguration(posId) {\n      return backend.api.get(\"api/config\", {\n        dontTrackData: true,\n        ignoreLoadingBar: true,\n        params: {\n          posId: posId\n        }\n      });\n    }\n  };\n  config.device = function (index) {\n    if (index === undefined) index = backend.defaultDevice;\n    return {\n      deviceId: index,\n      wakeUp: wakeUp\n    };\n  };\n  var wakeUp = function wakeUp() {\n    return backend.devices[this.deviceId].post(\"/POSServiceHandler.aspx/WakeUp\", {}, {\n      ignoreLoadingBar: true,\n      ignoreError: true,\n      dontTrack: true\n    });\n  };\n  return config;\n}).service(\"shopRepository\", function (backendHelper) {\n  var backend = backendHelper.backend;\n  var service = {};\n  service.api = {\n    getCurrentShop: function getCurrentShop() {\n      return backend.api.get(\"api/shops/current\");\n    }\n  };\n  return service;\n}).service(\"printRepository\", function (backendHelper) {\n  var backend = backendHelper.backend;\n  var service = {};\n  service.api = {\n    printLabel: function printLabel(shopId, printerIdentifier, barcode, quantity, templateId, currentPrice) {\n      var data = {\n        shopId: shopId,\n        printerIdentifier: printerIdentifier,\n        labels: [{\n          barcode: barcode,\n          quantity: quantity,\n          templateId: templateId,\n          currentPrice: currentPrice\n        }]\n      };\n      return backend.api.post(\"api/labeltemplate/multiplelabeldata\", data);\n    }\n  };\n  return service;\n}).factory(\"cashStatementRepository\", function (backendHelper, posConfig, clerkLoginService, momentFormat, $q) {\n  var backend = backendHelper.backend;\n  var repo = {};\n  repo.api = {\n    submitCashStatement: submitCashStatementToApi,\n    submitMorningAmount: submitMorningAmountApi,\n    getCashStatement: getCashStatement,\n    submitCashStatementAndTransaction: submitCashStatementAndTransaction\n  };\n  repo.device = function (index) {\n    if (index === undefined) index = backend.defaultDevice;\n    return {\n      deviceId: index,\n      getDrawerStatus: getDrawerStatus,\n      submitCashStatement: submitCashStatement,\n      submitMorningAmount: submitMorningAmount,\n      reprintCashStatement: reprintCashStatement,\n      insertDeletedLine: insertDeletedLine,\n      insertCancelledSale: insertCancelledSale,\n      getArmId: function getArmId() {\n        return backend.devices[index].id;\n      },\n      getArmName: function getArmName() {\n        return backend.devices[index].deviceName;\n      }\n    };\n  };\n  var getDrawerStatus = function getDrawerStatus(date) {\n    return backendHelper.normalize(backend.devices[this.deviceId].post(\"/POSServiceHandler.aspx/RequestDrawerStatus\", {\n      date: moment(date)\n    }));\n  };\n  var insertDeletedLine = function insertDeletedLine(itemgroup, salesprice) {\n    return backendHelper.normalize(backend.devices[this.deviceId].post(\"/POSServiceHandler.aspx/InsertDeletedLine\", {\n      deletedLine: {\n        ItemGroupName: itemgroup,\n        SalesPrice: salesprice\n      }\n    }));\n  };\n  var insertCancelledSale = function insertCancelledSale(amount) {\n    return backendHelper.normalize(backend.devices[this.deviceId].post(\"/POSServiceHandler.aspx/InsertCancelledSale\", {\n      cancelledSale: {\n        amount: amount\n      }\n    }));\n  };\n  var submitCashStatement = function submitCashStatement(closures) {\n    var currentClerk = clerkLoginService.currentUser();\n    var request = {\n      closure: {\n        date: moment(),\n        translations: posConfig.cashStatementTranslations,\n        closures: closures,\n        clerkId: currentClerk.identifier,\n        clerkName: currentClerk.fullName\n      },\n      clerkNo: currentClerk.clerkNumber\n    };\n    return backend.devices[this.deviceId].post(\"/POSServiceHandler.aspx/DoCashStatement\", request);\n  };\n  var reprintCashStatement = function reprintCashStatement(dailyClosure, printTranslations) {\n    return backend.devices[this.deviceId].post(\"/POSServiceHandler.aspx/RePrintCashStatement\", {\n      dailyClosure: dailyClosure,\n      printTranslations: printTranslations\n    });\n  };\n  function submitCashStatementToApi(connectorResponse) {\n    return backend.api.post(\"api/cash/cashstatement\", connectorResponse);\n  }\n  function submitCashStatementAndTransaction(request) {\n    return backend.api.post(\"api/cash/cashstatement-and-transaction\", request);\n  }\n  var submitMorningAmount = function submitMorningAmount(morningCounts) {\n    return backend.devices[this.deviceId].post(\"/POSServiceHandler.aspx/DoMorningAmount\", {\n      morningAmount: {\n        timestamp: moment().toISOString(),\n        translations: posConfig.cashStatementTranslations,\n        morningAmountCounts: morningCounts,\n        clerkId: clerkLoginService.currentUser().identifier,\n        clerkName: clerkLoginService.currentUser().fullName\n      }\n    });\n  };\n  function submitMorningAmountApi(connectorResponse) {\n    return backend.api.post(\"api/cash/morningamount\", connectorResponse);\n  }\n  function getCashStatement(posId, receiptId) {\n    return backend.api.get(\"api/cash/cashstatement/posid/\".concat(posId, \"/receiptId/\").concat(receiptId));\n  }\n  return repo;\n}).factory(\"zreportRepository\", function (backendHelper) {\n  var backend = backendHelper.backend;\n  var repo = {};\n  repo.api = {\n    getZReport: getZReport\n  };\n  repo.device = function (index) {\n    if (index === undefined) index = backend.defaultDevice;\n    return {\n      deviceId: index,\n      printZReport: printZReport\n    };\n  };\n  function getZReport(connectorId) {\n    return backend.api.get(\"api/zreport/\".concat(connectorId));\n  }\n  function printZReport(zreport) {\n    return backend.devices[this.deviceId].post(\"/POSServiceHandler.aspx/ReprintZReport\", zreport);\n  }\n  return repo;\n}).factory(\"terminalActionRepository\", function (backendHelper, posConfig, momentFormat, clerkLoginService) {\n  var repo = {};\n  var backend = backendHelper.backend;\n  repo.device = function (index) {\n    if (index === undefined) index = backend.defaultDevice;\n    return {\n      deviceId: index,\n      terminalEndOfDay: createAction(\"TerminalEndOfDay\"),\n      terminalCancellationRequest: createAction(\"TerminalCancellationRequest\"),\n      terminalXReport: createAction(\"TerminalXReport\"),\n      terminalSendOfflineTransactions: createAction(\"TerminalSendOfflineTransactions\"),\n      terminalDownloadApplication: createAction(\"TerminalDownloadApplication\"),\n      terminalEmptyPrintBuffer: createAction(\"TerminalEmptyPrintBuffer\"),\n      terminalPrintLatestReceipt: createAction(\"TerminalPrintLatestReceipt\"),\n      terminalZReport: createAction(\"TerminalZReport\"),\n      terminalPrintStoresTransactions: createAction(\"TerminalPrintStoresTransactions\"),\n      terminalDownloadCardAgreements: createAction(\"TerminalDownloadCardAgreements\"),\n      printTerminalJournal: printTerminalJournal,\n      printReceiptJournal: printReceiptJournal,\n      printSAFT: printSAFT,\n      getSAFTFileName: getSAFTFileName\n    };\n  };\n  function createAction(routeName) {\n    return function (suppressStatus) {\n      return backendHelper.normalize(backend.devices[this.deviceId].post(\"/POSServiceHandler.aspx/\" + routeName, {\n        suppressStatus: !!suppressStatus,\n        clerkNo: getCurrentClerk()\n      }, {\n        ignoreError: true\n      }));\n    };\n  }\n  function printSAFT(company, from, to) {\n    return backend.devices[this.deviceId].post(\"/POSServiceHandler.aspx/GenerateSAFTReport\", {\n      startDate: from,\n      endDate: to,\n      company: company,\n      clerkNo: getCurrentClerk()\n    });\n  }\n  function getSAFTFileName(company, from, to) {\n    return backend.devices[this.deviceId].post(\"/POSServiceHandler.aspx/GenerateSAFTReportName\", {\n      startDate: from,\n      endDate: to,\n      company: company,\n      clerkNo: getCurrentClerk()\n    });\n  }\n  function printTerminalJournal(from, to) {\n    from = moment(from, momentFormat);\n    to = moment(to, momentFormat);\n    return backend.devices[this.deviceId].post(\"/POSServiceHandler.aspx/PrintTerminalJournal\", {\n      startDate: from,\n      endDate: to,\n      translations: posConfig.printTranslations,\n      clerkNo: getCurrentClerk()\n    });\n  }\n  function printReceiptJournal(from, to) {\n    from = moment(from, momentFormat);\n    to = moment(to, momentFormat);\n    return backend.devices[this.deviceId].post(\"/POSServiceHandler.aspx/PrintReceiptJournal\", {\n      startDate: from,\n      endDate: to,\n      translations: posConfig.printTranslations,\n      clerkNo: getCurrentClerk()\n    });\n  }\n  function getCurrentClerk() {\n    var currentClerk = clerkLoginService.currentUser();\n    return !!currentClerk ? currentClerk.clerkNumber : \"\";\n  }\n  repo.getTerminalStatus = function (deviceId, sessionId) {\n    var device = backend.getDeviceById(deviceId);\n    return backendHelper.normalize(device.post(\"/POSServiceHandler.aspx/GetTerminalStatus\", {\n      sessionId: sessionId\n    }));\n  };\n  repo.abortCardPayment = function (deviceId, sessionId) {\n    var device = backend.getDeviceById(deviceId);\n    return backendHelper.normalize(device.post(\"/POSServiceHandler.aspx/TerminalAbortCardPayment\", {\n      sessionId: sessionId,\n      clerkNo: getCurrentClerk()\n    }));\n  };\n  repo.verifoneVoiceApproval = function (deviceId, sessionId, amount, isAproved, authCode) {\n    var device = backend.getDeviceById(deviceId);\n    return backendHelper.normalize(device.post(\"/POSServiceHandler.aspx/VerifoneVoiceApprovalResponse\", {\n      sessionId: sessionId,\n      amount: amount,\n      isAproved: isAproved,\n      authCode: authCode,\n      clerkNo: getCurrentClerk()\n    }));\n  };\n  repo.verifoneSignatureApproval = function (deviceId, sessionId, amount, isAproved) {\n    var device = backend.getDeviceById(deviceId);\n    return backendHelper.normalize(device.post(\"/POSServiceHandler.aspx/VerifoneSignatureApprovalResponse\", {\n      sessionId: sessionId,\n      amount: amount,\n      isAproved: isAproved,\n      clerkNo: getCurrentClerk()\n    }));\n  };\n  return repo;\n}).service(\"posInfoRepository\", function (backendHelper) {\n  var posInfos = {};\n  var backend = backendHelper.backend;\n  var options = {\n    dontTrack: true\n  };\n  posInfos.api = {\n    saveLogin: function saveLogin(clerk) {\n      var loginData = {\n        clerkId: clerk.identifier,\n        clerkName: clerk.fullName,\n        loginTime: moment().toISOString()\n      };\n      return backend.api.put(\"api/posinfos/clerklogin\", loginData, options);\n    },\n    saveDeviceConnection: function saveDeviceConnection(device) {\n      var deviceConnection = {\n        armMappingId: device.id,\n        armName: device.deviceName,\n        host: typeof device.url === \"function\" ? \"\" : device.url,\n        // The offline device contains a function. The 'ordinary' devices contain the host URL.\n        connectTime: moment().toISOString()\n      };\n      return backend.api.put(\"api/posInfos/armConnection\", deviceConnection, options);\n    }\n  };\n  return posInfos;\n}).service(\"itemShortcutsRepository\", function (backendHelper) {\n  var repo = {};\n  var backend = backendHelper.backend;\n  repo.api = {\n    getItemShortcuts: function getItemShortcuts() {\n      return backend.api.get(\"api/shortcuts\", {\n        dontTrack: true,\n        ignoreLoadingBar: true\n      });\n    }\n  };\n  return repo;\n});\n","\"use strict\";\n\npos.factory(\"offlineDevice\", function ($q, $log) {\n  function handleOfflineRequest(config) {\n    var deferred = $q.defer();\n    var urlParts = config.url.split(\"/\");\n    var func = urlParts.pop();\n    $log.debug(\"default device route: \" + func);\n    switch (func) {\n      case \"AddPayment\":\n        deferred.resolve(handlePayment(config));\n        break;\n      case \"PopReceiptQueue\":\n        deferred.resolve(response(config));\n        break;\n      case \"OpenCashDrawer\":\n        deferred.resolve(response(config));\n        break;\n      case \"WakeUp\":\n        deferred.resolve(response(config));\n        break;\n      case \"TerminalAbortCardPayment\":\n        deferred.resolve(response(config));\n        break;\n      case \"GetTerminalStatus\":\n        setTimeout(function () {\n          return deferred.resolve(response(config, {\n            CardName: \"VISA\",\n            CardId: 601,\n            DisplayText: \"Great success\",\n            Result: 0,\n            ResponseCode: \"Z3\"\n          }));\n        }, 3000);\n        break;\n      case \"CompleteReceipt\":\n        deferred.resolve(response(config));\n        break;\n      case \"TerminalPrintLatestReceipt\":\n        deferred.resolve(response(config));\n        break;\n      default:\n        return $q.reject(response(config, {\n          message: \"Unsupported route\"\n        }, 500));\n    }\n    return deferred.promise;\n  }\n  function handlePayment(config) {\n    var data = config.data.paymentRequest;\n    var payment = {\n      Quantity: 1,\n      Position: 1,\n      VoucherNumber: \"\",\n      PaymentType: data.paymentType,\n      Amount: data.amount,\n      ResponseAmount: data.amount,\n      Rounding: data.rounding,\n      ResponseRounding: data.rounding,\n      ExchangeRate: data.exchangerate,\n      Message: \"OK\",\n      Completed: data.paymentType === \"Card\" ? false : true,\n      CardNumber: data.paymentType === \"Card\" ? 600 : 0,\n      CardName: \"\",\n      CardReceipt: \"\",\n      CurrencyCode: data.foreignCurrencyCode,\n      CurrencyName: data.currencyName,\n      Cashregister: data.posId\n    };\n    var paymentType = payment.PaymentType.toLowerCase();\n    if ([\"creditvoucher\", \"giftcertificate\", \"downpayment\", \"foreigngiftcertificate\"].includes(paymentType)) payment.VoucherNumber = data.contextInfo;\n    return response(config, payment);\n  }\n  function response(config, data, status) {\n    return {\n      status: status || 200,\n      data: {\n        d: data || {}\n      },\n      config: config || {}\n    };\n  }\n  return handleOfflineRequest;\n});\n","\"use strict\";\n\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _regeneratorRuntime() { \"use strict\"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return r; }; var t, r = {}, e = Object.prototype, n = e.hasOwnProperty, o = \"function\" == typeof Symbol ? Symbol : {}, i = o.iterator || \"@@iterator\", a = o.asyncIterator || \"@@asyncIterator\", u = o.toStringTag || \"@@toStringTag\"; function c(t, r, e, n) { return Object.defineProperty(t, r, { value: e, enumerable: !n, configurable: !n, writable: !n }); } try { c({}, \"\"); } catch (t) { c = function c(t, r, e) { return t[r] = e; }; } function h(r, e, n, o) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype); return c(a, \"_invoke\", function (r, e, n) { var o = 1; return function (i, a) { if (3 === o) throw Error(\"Generator is already running\"); if (4 === o) { if (\"throw\" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var u = n.delegate; if (u) { var c = d(u, n); if (c) { if (c === f) continue; return c; } } if (\"next\" === n.method) n.sent = n._sent = n.arg;else if (\"throw\" === n.method) { if (1 === o) throw o = 4, n.arg; n.dispatchException(n.arg); } else \"return\" === n.method && n.abrupt(\"return\", n.arg); o = 3; var h = s(r, e, n); if (\"normal\" === h.type) { if (o = n.done ? 4 : 2, h.arg === f) continue; return { value: h.arg, done: n.done }; } \"throw\" === h.type && (o = 4, n.method = \"throw\", n.arg = h.arg); } }; }(r, n, new Context(o || [])), !0), a; } function s(t, r, e) { try { return { type: \"normal\", arg: t.call(r, e) }; } catch (t) { return { type: \"throw\", arg: t }; } } r.wrap = h; var f = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var l = {}; c(l, i, function () { return this; }); var p = Object.getPrototypeOf, y = p && p(p(x([]))); y && y !== e && n.call(y, i) && (l = y); var v = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(l); function g(t) { [\"next\", \"throw\", \"return\"].forEach(function (r) { c(t, r, function (t) { return this._invoke(r, t); }); }); } function AsyncIterator(t, r) { function e(o, i, a, u) { var c = s(t[o], t, i); if (\"throw\" !== c.type) { var h = c.arg, f = h.value; return f && \"object\" == _typeof(f) && n.call(f, \"__await\") ? r.resolve(f.__await).then(function (t) { e(\"next\", t, a, u); }, function (t) { e(\"throw\", t, a, u); }) : r.resolve(f).then(function (t) { h.value = t, a(h); }, function (t) { return e(\"throw\", t, a, u); }); } u(c.arg); } var o; c(this, \"_invoke\", function (t, n) { function i() { return new r(function (r, o) { e(t, n, r, o); }); } return o = o ? o.then(i, i) : i(); }, !0); } function d(r, e) { var n = e.method, o = r.i[n]; if (o === t) return e.delegate = null, \"throw\" === n && r.i[\"return\"] && (e.method = \"return\", e.arg = t, d(r, e), \"throw\" === e.method) || \"return\" !== n && (e.method = \"throw\", e.arg = new TypeError(\"The iterator does not provide a '\" + n + \"' method\")), f; var i = s(o, r.i, e.arg); if (\"throw\" === i.type) return e.method = \"throw\", e.arg = i.arg, e.delegate = null, f; var a = i.arg; return a ? a.done ? (e[r.r] = a.value, e.next = r.n, \"return\" !== e.method && (e.method = \"next\", e.arg = t), e.delegate = null, f) : a : (e.method = \"throw\", e.arg = new TypeError(\"iterator result is not an object\"), e.delegate = null, f); } function w(t) { this.tryEntries.push(t); } function m(r) { var e = r[4] || {}; e.type = \"normal\", e.arg = t, r[4] = e; } function Context(t) { this.tryEntries = [[-1]], t.forEach(w, this), this.reset(!0); } function x(r) { if (null != r) { var e = r[i]; if (e) return e.call(r); if (\"function\" == typeof r.next) return r; if (!isNaN(r.length)) { var o = -1, a = function e() { for (; ++o < r.length;) if (n.call(r, o)) return e.value = r[o], e.done = !1, e; return e.value = t, e.done = !0, e; }; return a.next = a; } } throw new TypeError(_typeof(r) + \" is not iterable\"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, c(v, \"constructor\", GeneratorFunctionPrototype), c(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction), GeneratorFunction.displayName = c(GeneratorFunctionPrototype, u, \"GeneratorFunction\"), r.isGeneratorFunction = function (t) { var r = \"function\" == typeof t && t.constructor; return !!r && (r === GeneratorFunction || \"GeneratorFunction\" === (r.displayName || r.name)); }, r.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, c(t, u, \"GeneratorFunction\")), t.prototype = Object.create(v), t; }, r.awrap = function (t) { return { __await: t }; }, g(AsyncIterator.prototype), c(AsyncIterator.prototype, a, function () { return this; }), r.AsyncIterator = AsyncIterator, r.async = function (t, e, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(h(t, e, n, o), i); return r.isGeneratorFunction(e) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, g(v), c(v, u, \"Generator\"), c(v, i, function () { return this; }), c(v, \"toString\", function () { return \"[object Generator]\"; }), r.keys = function (t) { var r = Object(t), e = []; for (var n in r) e.unshift(n); return function t() { for (; e.length;) if ((n = e.pop()) in r) return t.value = n, t.done = !1, t; return t.done = !0, t; }; }, r.values = x, Context.prototype = { constructor: Context, reset: function reset(r) { if (this.prev = this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = \"next\", this.arg = t, this.tryEntries.forEach(m), !r) for (var e in this) \"t\" === e.charAt(0) && n.call(this, e) && !isNaN(+e.slice(1)) && (this[e] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0][4]; if (\"throw\" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(r) { if (this.done) throw r; var e = this; function n(t) { a.type = \"throw\", a.arg = r, e.next = t; } for (var o = e.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i[4], u = this.prev, c = i[1], h = i[2]; if (-1 === i[0]) return n(\"end\"), !1; if (!c && !h) throw Error(\"try statement without catch or finally\"); if (null != i[0] && i[0] <= u) { if (u < c) return this.method = \"next\", this.arg = t, n(c), !0; if (u < h) return n(h), !1; } } }, abrupt: function abrupt(t, r) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var n = this.tryEntries[e]; if (n[0] > -1 && n[0] <= this.prev && this.prev < n[2]) { var o = n; break; } } o && (\"break\" === t || \"continue\" === t) && o[0] <= r && r <= o[2] && (o = null); var i = o ? o[4] : {}; return i.type = t, i.arg = r, o ? (this.method = \"next\", this.next = o[2], f) : this.complete(i); }, complete: function complete(t, r) { if (\"throw\" === t.type) throw t.arg; return \"break\" === t.type || \"continue\" === t.type ? this.next = t.arg : \"return\" === t.type ? (this.rval = this.arg = t.arg, this.method = \"return\", this.next = \"end\") : \"normal\" === t.type && r && (this.next = r), f; }, finish: function finish(t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[2] === t) return this.complete(e[4], e[3]), m(e), f; } }, \"catch\": function _catch(t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[0] === t) { var n = e[4]; if (\"throw\" === n.type) { var o = n.arg; m(e); } return o; } } throw Error(\"illegal catch attempt\"); }, delegateYield: function delegateYield(r, e, n) { return this.delegate = { i: x(r), r: e, n: n }, \"next\" === this.method && (this.arg = t), f; } }, r; }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"next\", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"throw\", n); } _next(void 0); }); }; }\npos.factory(\"saleRepository\", function (backendHelper, $q, posConfig, $filter, eventBus) {\n  var sale = {};\n  var backend = backendHelper.backend;\n  var options = {\n    ignoreLoadingBar: true,\n    ignoreError: true\n  };\n  sale.api = {\n    saveSale: function () {\n      var _saveSale = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee(receipt) {\n        var canProceed;\n        return _regeneratorRuntime().wrap(function _callee$(_context) {\n          while (1) switch (_context.prev = _context.next) {\n            case 0:\n              _context.next = 2;\n              return eventBus.notifyAsync(eventBus.events.sale.completing, receipt);\n            case 2:\n              canProceed = _context.sent;\n              if (!canProceed) {\n                _context.next = 6;\n                break;\n              }\n              receipt.date = moment(receipt.date).format();\n              return _context.abrupt(\"return\", backend.api.put(\"api/sales\", sale.safeReceipt(receipt), {\n                ignoreError: true\n              }));\n            case 6:\n            case \"end\":\n              return _context.stop();\n          }\n        }, _callee);\n      }));\n      function saveSale(_x) {\n        return _saveSale.apply(this, arguments);\n      }\n      return saveSale;\n    }(),\n    lastReceiptId: function lastReceiptId(id) {\n      // the id is a temporary hack to get the ArmIds last note id when doing cash statement\n      return backend.api.get(\"api/sales/noteid\" + (id ? \"/\" + id : \"\"));\n    },\n    getSalesData: function getSalesData(from, to, lastCheck) {\n      return backend.api.get(\"api/sales/figures?from=\" + from.format() + \"&to=\" + to.format() + \"&lastCheck=\" + lastCheck.format(), options); // assumes momentjs objects\n    },\n    getWeeklySalesData: function getWeeklySalesData(date) {\n      return backend.api.get(\"api/sales/figures/week?date=\" + date.format(\"YYYY-MM-DD\"), options); // assumes momentjs objects\n    },\n    getMonthlySalesData: function getMonthlySalesData(date) {\n      return backend.api.get(\"api/sales/figures/month?date=\" + date.format(\"YYYY-MM-DD\"), options); // assumes momentjs objects\n    },\n    getYearlySalesData: function getYearlySalesData(date) {\n      return backend.api.get(\"api/sales/figures/year?date=\" + date.format(\"YYYY-MM-DD\"), options); // assumes momentjs objects\n    },\n    getWeeklyBudgetsData: function getWeeklyBudgetsData(date) {\n      return backend.api.get(\"api/sales/budgets/week?date=\" + date.format(\"YYYY-MM-DD\"), options); // assumes momentjs objects\n    },\n    getMonthlyBudgetsData: function getMonthlyBudgetsData(date) {\n      return backend.api.get(\"api/sales/budgets/month?date=\" + date.format(\"YYYY-MM-DD\"), options); // assumes momentjs objects\n    },\n    getYearlyBudgetsData: function getYearlyBudgetsData(date) {\n      return backend.api.get(\"api/sales/budgets/year?date=\" + date.format(\"YYYY-MM-DD\"), options); // assumes momentjs objects\n    },\n    getReceipt: function getReceipt(shopId, posId, receiptId) {\n      return backend.api.get(\"api/sales/shop/\".concat(+shopId, \"/pos/\").concat(+posId, \"/receipt/\").concat(+receiptId));\n    },\n    parkReceipt: function parkReceipt(receipt) {\n      return backend.api.put(\"api/sales/park\", receipt);\n    },\n    getParkedReceipts: function getParkedReceipts() {\n      return backend.api.get(\"api/sales/park\");\n    },\n    deleteParkedReceipt: function deleteParkedReceipt(id) {\n      return backend.api[\"delete\"](\"api/sales/park/\" + id);\n    },\n    stashReceipt: function stashReceipt(receipt, statusCode, message) {\n      return backend.api.put(\"api/sales/stash\", {\n        receipt: sale.safeReceipt(receipt),\n        statusCode: statusCode,\n        message: message\n      });\n    },\n    emailReceipt: function emailReceipt(receiverEmail, receipt, printTranslations, isCopy) {\n      return backend.api.post(\"api/sales/email\" + (isCopy ? \"?isCopy=\" + isCopy : \"\"), {\n        receiverEmail: receiverEmail,\n        receipt: receipt,\n        translation: printTranslations\n      });\n    },\n    getReceipts: function getReceipts(from, to, filter, allShops, pageSize, page, customerNo, includeLoyaltyData) {\n      return backend.api.get(\"api/sales\", {\n        params: {\n          from: from,\n          to: to,\n          filter: filter,\n          pageSize: pageSize,\n          page: page,\n          searchAllShops: allShops,\n          customerNo: customerNo,\n          includeLoyaltyData: includeLoyaltyData\n        }\n      });\n    },\n    getBookings: function getBookings(customerNo) {\n      return backend.api.get(\"api/sales/pendingBookings\", {\n        params: {\n          customerNo: customerNo\n        }\n      });\n    },\n    getReturnedQuantities: function getReturnedQuantities(transactionUuid) {\n      return backend.api.get(\"api/sales/returnedQuantities?transactionUuid=\".concat(transactionUuid));\n    },\n    getLastReceiptId: function getLastReceiptId() {\n      return backend.api.get(\"api/sales/receiptid\");\n    },\n    getLastReceipt: function getLastReceipt() {\n      return backend.api.get(\"api/sales/lastreceipt\");\n    },\n    incrementReprint: function incrementReprint(receiptUuid) {\n      return backend.api.put(\"api/sales/reprint/\".concat(receiptUuid));\n    },\n    createExchangeLabels: function createExchangeLabels(receipt) {\n      return backend.api.post(\"api/sales/\".concat(receipt.uuid, \"/giftExchanges\"), receipt);\n    },\n    getExchangeLabels: function getExchangeLabels(transactionUuid) {\n      return backend.api.get(\"api/sales/\".concat(transactionUuid, \"/giftExchanges\"));\n    },\n    checkBooking: function checkBooking(booking) {\n      return backend.api.post(\"api/sales/checkBooking\", booking);\n    },\n    updateFluctuatingProperties: function updateFluctuatingProperties(receipt) {\n      return backend.api.put(\"api/sales/\".concat(receipt.uuid, \"/FluctuatingProperties\"), receipt.fluctuatingProperties);\n    }\n  };\n  sale.device = function (index) {\n    if (index === undefined) index = backend.defaultDevice;\n    return {\n      deviceId: index,\n      // deprecated, use the more clear deviceIndex instead\n      deviceIndex: index,\n      makePayment: _makePayment,\n      demo: demo,\n      saveSale: saveSale,\n      openDrawer: openDrawer,\n      reprintReceipt: reprintReceipt,\n      printReceiptCopy: printReceiptCopy,\n      printGiftReceipt: printGiftReceipt,\n      printGiftLabel: printGiftLabel,\n      getLastReceipt: getLastReceipt,\n      lastReceiptId: lastReceiptId,\n      isDrawerOpen: isDrawerOpen,\n      PrinterPaperStatus: getPrinterPaperStatus,\n      getArmId: function getArmId() {\n        return backend.devices[index].id;\n      },\n      printTerminalReceipt: printTerminalReceipt\n    };\n  };\n  sale.all = {\n    getReceipts: function getReceipts(skip, pageSize) {\n      var promises = [];\n      angular.forEach(backend.devices, function (device) {\n        promises.push(_getReceipts(device, skip, pageSize));\n      });\n      return promises;\n    }\n  };\n  sale.tryForEachDevice = {\n    makePayment: function makePayment(group, paymentType, amount, rounding, receipt, currency, contextInfo, fluctuatingProperties) {\n      return backendHelper.tryForEachDevice(_makePayment, [group, paymentType, amount, rounding, receipt, currency, exchangeRate, contextInfo, fluctuatingProperties]);\n    },\n    saveSale: saveSale\n  };\n  sale.deviceCount = backendHelper.deviceCount;\n\n  // ARM methods\n  var _makePayment = function _makePayment(group, paymentType, amount, rounding, receipt, currency, contextInfo, fluctuatingProperties) {\n    receipt.date = moment(receipt.date).format();\n    var data = {\n      paymentRequest: {\n        receipt: sale.safeReceipt(receipt),\n        group: group,\n        paymentType: paymentType,\n        amount: amount,\n        rounding: rounding,\n        foreignCurrencyCode: String(currency.code),\n        currencyName: currency.name,\n        exchangerate: currency.exchangeRate,\n        contextInfo: contextInfo,\n        printTranslations: posConfig.printTranslations\n      }\n    };\n    var deferred = $q.defer();\n    var that = this;\n    backendHelper.normalize(backend.devices[that.deviceId].post(\"/POSServiceHandler.aspx/AddPayment\", data, {\n      timeout: 10 * 1000 /* 10 seconds */\n    })).then(function (response) {\n      if (response.data && response.data.d) {\n        var payment = response.data.d;\n        payment.amount = payment.responseAmount;\n        payment.rounding = payment.responseRounding;\n        payment.paymentDeviceId = backend.devices[that.deviceId].id;\n        payment.fluctuatingProperties = fluctuatingProperties;\n        delete payment.responseAmount;\n        delete payment.responseRounding;\n      }\n      deferred.resolve(response);\n    }, deferred.reject);\n    return deferred.promise;\n  };\n  var openDrawer = function openDrawer(clerkId) {\n    return backend.devices[this.deviceId].post(\"/POSServiceHandler.aspx/OpenCashDrawer\", {\n      openDrawer: {\n        printTranslations: posConfig.printTranslations,\n        clerkId: clerkId,\n        date: moment()\n      }\n    });\n  };\n  var isDrawerOpen = function isDrawerOpen() {\n    return backend.devices[this.deviceId].post(\"/POSServiceHandler.aspx/IsDrawerOpen\", {}).then(function (response) {\n      return response.data.d.Result;\n    })[\"catch\"](function (response) {\n      return true;\n    });\n  };\n  var lastReceiptId = /*#__PURE__*/function () {\n    var _ref = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee2(posId) {\n      var response;\n      return _regeneratorRuntime().wrap(function _callee2$(_context2) {\n        while (1) switch (_context2.prev = _context2.next) {\n          case 0:\n            _context2.prev = 0;\n            _context2.next = 3;\n            return backend.devices[this.deviceId].post(\"/POSServiceHandler.aspx/GetMaxReceiptId\", {\n              posId: posId\n            });\n          case 3:\n            response = _context2.sent;\n            return _context2.abrupt(\"return\", response.data.d.Result);\n          case 7:\n            _context2.prev = 7;\n            _context2.t0 = _context2[\"catch\"](0);\n            return _context2.abrupt(\"return\", 0);\n          case 10:\n          case \"end\":\n            return _context2.stop();\n        }\n      }, _callee2, this, [[0, 7]]);\n    }));\n    return function lastReceiptId(_x2) {\n      return _ref.apply(this, arguments);\n    };\n  }();\n  var getPrinterPaperStatus = /*#__PURE__*/function () {\n    var _ref2 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee3() {\n      var response;\n      return _regeneratorRuntime().wrap(function _callee3$(_context3) {\n        while (1) switch (_context3.prev = _context3.next) {\n          case 0:\n            _context3.prev = 0;\n            _context3.next = 3;\n            return backend.devices[this.deviceId].post(\"/POSServiceHandler.aspx/PaperStatus\", {});\n          case 3:\n            response = _context3.sent;\n            return _context3.abrupt(\"return\", response.data.d);\n          case 7:\n            _context3.prev = 7;\n            _context3.t0 = _context3[\"catch\"](0);\n            return _context3.abrupt(\"return\", 1);\n          case 10:\n          case \"end\":\n            return _context3.stop();\n        }\n      }, _callee3, this, [[0, 7]]);\n    }));\n    return function getPrinterPaperStatus() {\n      return _ref2.apply(this, arguments);\n    };\n  }();\n  var getLastReceipt = function getLastReceipt(deviceIndex) {\n    deviceIndex = deviceIndex || this.deviceId;\n    return _getReceipts(deviceIndex, 0, 1);\n  };\n  function _getReceipts(deviceIndexOrDevice, skipPages, pageSize) {\n    var device = typeof deviceIndexOrDevice === \"function\" ? deviceIndexOrDevice : backend.devices[deviceIndexOrDevice];\n    return backendHelper.normalize(device.post(\"/POSServiceHandler.aspx/GetReceiptsPaged\", {\n      skip: skipPages,\n      pageSize: pageSize\n    }))\n    // convert the date from a C# object to a JavaScript date.\n    .then(function (response) {\n      var receipts = response.data.d;\n      if (!receipts) return response;\n      _.forEach(receipts, function (receipt) {\n        receipt.date = moment(receipt.date).format();\n      });\n      return response;\n    });\n  }\n\n  /**\n   * reprintReceipt does not support clean cash functionality.\n   * As long as CleanCash is mushed directly into the POS core we cannot use this for reprinting if CleanCash is active.\n   * Use GetLastReceipt to find the lastest receipt and pass that to printReceiptCopty instead if CleanCash is required.\n   */\n  var reprintReceipt = function reprintReceipt() {\n    return backend.devices[this.deviceId].post(\"/POSServiceHandler.aspx/PrintLastReceipt\", {\n      printerTranslation: posConfig.printTranslations\n    });\n  };\n  var printReceiptCopy = function printReceiptCopy(receipt, cleancash, isCopy) {\n    receipt.date = moment(receipt.date).format();\n    return backend.devices[this.deviceId].post(\"/POSServiceHandler.aspx/PrintReceiptCopy\", {\n      receipt: sale.safeReceipt(receipt),\n      printTranslations: posConfig.printTranslations,\n      cleanCash: cleancash,\n      isCopy: isCopy\n    });\n  };\n  var printGiftReceipt = function printGiftReceipt(receipt, cleancash) {\n    return backend.devices[this.deviceId].post(\"/POSServiceHandler.aspx/PrintGiftReceipt\", {\n      receipt: sale.safeReceipt(receipt),\n      printTranslations: posConfig.printTranslations,\n      cleanCash: cleancash\n    });\n  };\n  var printGiftLabel = function printGiftLabel(labelTemplateId, itemData, quantity) {\n    var request = {\n      templateId: labelTemplateId,\n      qty: quantity,\n      attributes: itemData\n    };\n    return backend.devices[this.deviceId].post(\"/POSServiceHandler.aspx/PrintLabel\", request, {\n      headers: {\n        \"Content-Type\": \"application/json\"\n      },\n      timeout: 10000\n    });\n  };\n  sale.completeSale = function (deviceId, receipt, cleancash) {\n    var device = backend.getDeviceById(deviceId);\n    var promise = device.post(\"/POSServiceHandler.aspx/CompleteReceipt\", {\n      receipt: sale.safeReceipt(receipt),\n      printTranslations: posConfig.printTranslations,\n      cleanCash: cleancash\n    });\n    promise.then(function (resp) {\n      return eventBus.notify(eventBus.events.sale.completed, receipt);\n    });\n    return promise;\n  };\n  sale.popReceiptQueue = function (device, receiptId, posId) {\n    if (device === parseInt(device, 10)) device = backend.getDeviceById(device);\n    var payload = {\n      receiptId: receiptId,\n      posId: posId\n    };\n    return device.post(\"/POSServiceHandler.aspx/PopReceiptQueue\", payload);\n  };\n  var saveSale = function saveSale(receipt) {\n    throw \"Not Implemented\";\n  };\n  var demo = function demo() {\n    return backend.devices[this.deviceId]({\n      method: \"POST\",\n      url: \"POSServiceHandler.aspx/PrintLines\",\n      data: {}\n    });\n  };\n  var printTerminalReceipt = function printTerminalReceipt(receipt) {\n    var data = {\n      receipt: receipt\n    };\n    var that = this;\n    return backendHelper.normalize(backend.devices[that.deviceId].post(\"/POSServiceHandler.aspx/PrintCardReceipt\", data));\n  };\n  sale.safeReceipt = function (receipt) {\n    var receiptHeaderBlacklist = [],\n      itemsBlacklist = [\"discount\"],\n      paymentsBlacklist = [\"__type\"];\n    var safe = backendHelper.safeify(receipt, receiptHeaderBlacklist);\n    safe.shopCurrencyCode = posConfig.getLocalCurrency().currencyCode;\n    safe.customerNumber = receipt.customerNumber || \"0\";\n    safe.items = backendHelper.safeifyList(receipt.items, itemsBlacklist);\n    safe.payments = backendHelper.safeifyList(receipt.payments, paymentsBlacklist);\n    return safe;\n  };\n  return sale;\n});\n","\"use strict\";\n\npos.factory(\"voucherRepository\", function (backendHelper, posStorage) {\n  var voucher = {};\n  var backend = backendHelper.backend;\n  voucher.api = {\n    verifyGiftCertificate: function verifyGiftCertificate(voucherNo) {\n      return backend.api.get(\"api/vouchers/verify/\" + voucherNo, {\n        ignoreError: true\n      });\n    },\n    getVoucher: function getVoucher(voucherNo, clerkId, pin) {\n      var request = {};\n      request.voucherNo = voucherNo;\n      request.clerkId = clerkId;\n      request.clientRequestDate = moment();\n      if (pin) query.pin = pin;\n      return backend.api.post(\"api/v1.0/voucher/get\", request);\n    },\n    deactivateVoucher: function deactivateVoucher(voucherNo, clerkId, transactionReference) {\n      return backend.api.post(\"api/v1.0/voucher/deactivate\", {\n        voucherNo: voucherNo,\n        clerkId: clerkId,\n        transactionReference: transactionReference,\n        clientRequestDate: moment()\n      });\n    },\n    printVoucherAction: function printVoucherAction(voucherAction) {\n      var printTranslations = posStorage.get(\"printTranslations\");\n      return backend.devices[backend.defaultDevice].post(\"/POSServiceHandler.aspx/PrintVoucherAction\", {\n        voucherAction: voucherAction,\n        printTranslations: printTranslations\n      });\n    },\n    activateVouchers: function activateVouchers(items, transactionReference, currencyCode) {\n      var activationRequests = [];\n      angular.forEach(items, function (item) {\n        var request = {\n          voucherNo: item.voucherNumber,\n          clerkId: item.clerkId,\n          value: item.salesPrice,\n          currencyCode: currencyCode,\n          transactionReference: transactionReference,\n          clientRequestDate: moment()\n        };\n        activationRequests.push(request);\n      });\n      return backend.api.post(\"api/v1.0/voucher/activate\", activationRequests);\n    },\n    purchaseWithVoucher: function purchaseWithVoucher(voucherNo, clerkId, amount, currencyCode, transactionReference, pin) {\n      var puchaseRequest = {\n        voucherNo: voucherNo,\n        clerkId: clerkId,\n        value: amount,\n        currencyCode: currencyCode,\n        transactionReference: transactionReference,\n        clientRequestDate: moment()\n      };\n      if (pin) puchaseRequest.pin = pin;\n      return backend.api.post(\"api/v1.0/voucher/purchase\", puchaseRequest);\n    },\n    cancelAction: function cancelAction(voucherNo, clerkId, uniqueActionId, transactionReference) {\n      var cancelRequest = {\n        voucherNo: voucherNo,\n        clerkId: clerkId,\n        uniqueActionId: uniqueActionId,\n        transactionReference: transactionReference,\n        clientRequestDate: moment()\n      };\n      return backend.api.post(\"api/v1.0/voucher/cancel\", cancelRequest);\n    }\n  };\n  return voucher;\n});\n","\"use strict\";\n\npos.factory(\"loyaltyRepository\", function (backendHelper) {\n  var backend = backendHelper.backend;\n  var repo = {};\n  repo.api = {\n    lookupCustomer: function lookupCustomer(customerNumber) {\n      return backend.api.get(\"api/loyalty/members/customerNumber/\" + customerNumber);\n    }\n  };\n  return repo;\n}).factory(\"pricePromotionRepository\", function (backendHelper) {\n  var backend = backendHelper.backend;\n  var repo = {\n    getDiscounts: function getDiscounts(basket) {\n      return backend.api.post(\"api/ppe/basket\", basket);\n    }\n  };\n  return repo;\n}).factory(\"kegaRepository\", function (backendHelper) {\n  var backend = backendHelper.backend;\n  var repo = {};\n  repo.api = {\n    getWebOrders: function getWebOrders() {\n      return backend.api.get(\"api/kega/orders\");\n    }\n  };\n  return repo;\n}).factory(\"trimitRepository\", function (backendHelper) {\n  var backend = backendHelper.backend;\n  var repo = {};\n  repo.api = {\n    addCustomer: function addCustomer(customer) {\n      return backend.api.post(\"api/trimit/customer\", customer);\n    },\n    getCustomer: function getCustomer(searchString) {\n      return backend.api.get(\"api/trimit/search/customer/withdetails?searchString=\".concat(searchString));\n    },\n    getCustomerFields: function getCustomerFields() {\n      return backend.api.get(\"api/trimit/fieldSetup\");\n    },\n    toggleMember: function toggleMember(customerNumber, isMember) {\n      return backend.api.patch(\"api/trimit/customer/customerId/\".concat(customerNumber, \"/ismember/\").concat(isMember));\n    },\n    getDiscounts: function getDiscounts(basket) {\n      return backend.api.post(\"api/trimit/basketprice\", basket);\n    },\n    getWebOrders: function getWebOrders(firstName, lastName, email, phoneNo, orderNo) {\n      var query = {};\n      if (firstName) query.firstName = firstName;\n      if (lastName) query.lastName = lastName;\n      if (email) query.email = email;\n      if (phoneNo) query.phoneNo = phoneNo;\n      if (orderNo) query.orderNo = orderNo;\n      return backend.api.get(\"api/trimit/orders\", {\n        params: query\n      });\n    },\n    skip: function skip(weborder) {\n      return backend.api[\"delete\"](\"api/trimit/orders/\" + weborder.orderNo);\n    }\n  };\n  return repo;\n}).factory(\"webOrderRepository\", function (backendHelper) {\n  var backend = backendHelper.backend;\n  var repo = {};\n  repo.api = {\n    getWebOrder: function getWebOrder(orderNo, webshopId) {\n      return backend.api.get(\"api/weborders?orderNo=\" + orderNo + \"&webShopId=\" + webshopId);\n    },\n    getWebOrders: function getWebOrders(firstName, lastName, email, phoneNo, orderNo, externalUniqueId) {\n      var query = \"\";\n      if (firstName) query += (query === \"\" ? \"?\" : \"&\") + \"firstName=\" + firstName;\n      if (lastName) query += (query === \"\" ? \"?\" : \"&\") + \"lastName=\" + lastName;\n      if (email) query += (query === \"\" ? \"?\" : \"&\") + \"email=\" + email;\n      if (phoneNo) query += (query === \"\" ? \"?\" : \"&\") + \"phoneNo=\" + phoneNo;\n      if (orderNo) query += (query === \"\" ? \"?\" : \"&\") + \"orderNo=\" + orderNo;\n      if (externalUniqueId) query += (query === \"\" ? \"?\" : \"&\") + \"externalUniqueId=\" + externalUniqueId;\n      return backend.api.get(\"api/weborders/query\" + query);\n    },\n    printPickList: function printPickList(deviceIndex, webOrder, printTranslations) {\n      var device = backend.getDeviceByIndex(deviceIndex);\n      return device.post(\"/POSServiceHandler.aspx/PrintWebOrderPickList\", {\n        webOrder: webOrder,\n        printTranslations: printTranslations\n      });\n    },\n    update: function update(weborder) {\n      return backend.api.put(\"api/weborders/linestatus\", weborder);\n    },\n    skip: function skip(weborder) {\n      return backend.api.patch(\"api/weborders/\" + encodeURIComponent(weborder.orderNo) + \"/webshops/\" + weborder.webShopId + \"/skip\");\n    },\n    saleCompleted: function saleCompleted(orderNos) {\n      return backend.api.put(\"api/weborders/completesale\", orderNos);\n    },\n    createOrderInStore: function createOrderInStore(weborder, webshopId) {\n      return backend.api.post(\"api/orderinstore/webshops/\" + webshopId, weborder);\n    }\n  };\n  return repo;\n}).factory(\"customerOrderRepository\", function (backendHelper) {\n  var backend = backendHelper.backend;\n  var repo = {};\n  repo.api = {\n    getCustomerOrders: function getCustomerOrders(searchParams) {\n      return backend.api.post(\"api/customerorder/query\", searchParams);\n    },\n    saveCustomerOrder: function saveCustomerOrder(customerOrder) {\n      return backend.api.put(\"api/customerorder\", customerOrder);\n    },\n    changeStatusCustomerOrder: function changeStatusCustomerOrder(id, status) {\n      return backend.api.put(\"api/customerorder/\".concat(id, \"/status?status=\").concat(status));\n    },\n    printPickList: function printPickList(deviceIndex, customerOrder, printTranslations) {\n      var device = backend.getDeviceByIndex(deviceIndex);\n      var customerOrderPickList = {\n        orderNo: customerOrder.orderNo,\n        status: customerOrder.statusText,\n        pickListLines: []\n      };\n      angular.forEach(customerOrder.customerOrderLines, function (line) {\n        var pickListLine = {\n          barcode: line.article.ean,\n          itemNo: line.itemNo,\n          inStock: line.currentOnHandQuantity,\n          toPick: line.quantity,\n          picked: line.quantityPicked\n        };\n        customerOrderPickList.pickListLines.push(pickListLine);\n      });\n      return device.post(\"/POSServiceHandler.aspx/PrintCustomerOrderPickList\", {\n        customerOrderPickList: customerOrderPickList,\n        printTranslations: printTranslations\n      });\n    }\n  };\n  return repo;\n}).factory(\"customerRepository\", function (backendHelper) {\n  var backend = backendHelper.backend;\n  var repo = {};\n  function parseBirthDate(date) {\n    if (date) {\n      return date.split(\"T\")[0];\n    }\n    return null;\n  }\n  repo.api = {\n    searchForCustomer: function searchForCustomer(firstName, lastName, email, customerNo, phone, zipCode, membership, after, recordCount) {\n      var filters = [];\n      if (firstName) filters.push({\n        name: \"firstName\",\n        value: firstName,\n        or: false\n      });\n      if (lastName) filters.push({\n        name: \"lastName\",\n        value: lastName,\n        or: false\n      });\n      if (email) filters.push({\n        name: \"email\",\n        value: email,\n        or: false\n      });\n      if (customerNo) filters.push({\n        name: \"externalUniqueId\",\n        value: customerNo,\n        or: false\n      });\n      if (phone) filters.push({\n        name: \"phone\",\n        value: phone,\n        or: false\n      });\n      if (zipCode) filters.push({\n        name: \"zipCode\",\n        value: zipCode,\n        or: false\n      });\n      if (membership) filters.push({\n        name: \"uniqueIdentifier\",\n        value: membership,\n        or: false\n      });\n      return backend.api.post(\"api/Customer/Search?after=\" + after + \"&recordCount=\" + recordCount, filters).then(function (resp) {\n        resp.data.forEach(function (cust) {\n          return cust.birthDate = parseBirthDate(cust.birthDate);\n        });\n        return resp;\n      });\n    },\n    getCustomer: function getCustomer(customerNumber) {\n      return backend.api.get(\"api/Customer/\" + customerNumber).then(function (resp) {\n        resp.data.birthDate = parseBirthDate(resp.data.birthDate);\n        return resp;\n      });\n    },\n    addCustomer: function addCustomer(customer) {\n      return backend.api.post(\"api/Customer\", customer);\n    },\n    addDownPaymentCustomer: function addDownPaymentCustomer(customer) {\n      return backend.api.post(\"api/customer/createDownPaymentCustomer\", customer);\n    },\n    updateDownPaymentCustomer: function updateDownPaymentCustomer(customer) {\n      return backend.api.put(\"api/customer/updateDownPaymentCustomer/\" + customer.id, customer).then(function (resp) {\n        resp.data.birthDate = parseBirthDate(resp.data.birthDate);\n        return resp;\n      });\n    },\n    updateCustomer: function updateCustomer(customer) {\n      return backend.api.put(\"api/Customer/\" + customer.id, customer).then(function (resp) {\n        resp.data.birthDate = parseBirthDate(resp.data.birthDate);\n        return resp;\n      });\n    },\n    getCompany: function getCompany(companyId) {\n      return backend.api.get(\"api/company/\" + companyId);\n    },\n    getCalculatedLoyaltyPoints: function getCalculatedLoyaltyPoints(receipt) {\n      return backend.api.post(\"api/customer/loyaltyPointsCalculationBeforeSale\", receipt);\n    }\n  };\n  return repo;\n}).factory(\"addressRepository\", function (backendHelper) {\n  var backend = backendHelper.backend;\n  var repo = {};\n  repo.api = {\n    add: function add(address) {\n      return backend.api.post(\"api/Address\", address);\n    },\n    addDownPaymentAddress: function addDownPaymentAddress(address) {\n      return backend.api.post(\"api/address/addDownPaymentCustomerAddress\", address);\n    }\n  };\n  return repo;\n}).factory(\"countryRepository\", function (backendHelper) {\n  var backend = backendHelper.backend;\n  var repo = {};\n  repo.api = {\n    getByLanguageCode: function getByLanguageCode(languageCode) {\n      return backend.api.get(\"api/country/getcountries/\" + languageCode);\n    }\n  };\n  return repo;\n}).factory(\"intersolveRepository\", function (backendHelper) {\n  var backend = backendHelper.backend;\n  var repo = {};\n  repo.api = {\n    getLoyaltyCustomer: function getLoyaltyCustomer(cardId) {\n      return backend.api.get(\"api/intersolve/details/\" + cardId, {\n        ignoreError: true\n      });\n    },\n    searchForLoyaltyCustomer: function searchForLoyaltyCustomer(firstname, lastname, streetname, zipcode, town, housenumber, email, mobile) {\n      var data = {\n        firstname: firstname,\n        lastname: lastname,\n        streetname: streetname,\n        zipcode: zipcode,\n        town: town,\n        housenumber: housenumber,\n        email: email,\n        mobile: mobile\n      };\n      return backend.api.post(\"api/intersolve/customer/search/\", data);\n    },\n    subtractBalance: function subtractBalance(refPos, customerId, ticketNumber, subtractAmount) {\n      var data = {\n        cardId: customerId,\n        subtractAmount: subtractAmount,\n        refPos: refPos,\n        ticketNumber: ticketNumber\n      };\n      return backend.api.post(\"api/intersolve/giftcard/subtractbalance/\", data);\n    },\n    CancelSubtractBalance: function CancelSubtractBalance(cardId, refPos) {\n      var data = {\n        cardId: cardId,\n        refPos: refPos\n      };\n      return backend.api.post(\"api/intersolve/giftcard/cancel/\", data);\n    }\n  };\n  return repo;\n}).factory(\"stockRepository\", function (backendHelper, $q, $http, posStorage) {\n  var repo = {};\n  var backend = backendHelper.backend;\n  repo.api = {\n    getItemStockLevels: function getItemStockLevels(itemId, includeInactiveShops) {\n      return backend.api.get(\"api/Items/\" + itemId + \"/stocklevels?includeInactiveShops=\" + includeInactiveShops);\n    },\n    getStockFromClient: function getStockFromClient(stockLookupRequest) {\n      return backend.api.post(\"api/StockLookup/getStockFromClient\", stockLookupRequest);\n    },\n    getItemAvailability: function getItemAvailability(request) {\n      return backend.api.post(\"api/StockLookup/itemAvailability\", request);\n    }\n  };\n  return repo;\n}).factory(\"masterItemStockRepository\", function (backendHelper, $q, $http, posStorage) {\n  var repo = {};\n  var backend = backendHelper.backend;\n  repo.api = {\n    getMasterItemStockInfo: function getMasterItemStockInfo(itemNo, storeId) {\n      return backend.api.get(\"api/StockLookup/masteritem?masterItemNo=\" + itemNo + \"&storeId=\" + storeId);\n    }\n  };\n  return repo;\n}).factory(\"storeRepository\", function (backendHelper, $q, $http, posStorage) {\n  var backend = backendHelper.backend;\n  var repo = {};\n  repo.api = {\n    getStores: function getStores() {\n      return backend.api.get(\"api/StockLookup/locations\");\n    },\n    getAllStores: function getAllStores() {\n      return backend.api.get(\"api/shops/shops\");\n    }\n  };\n  return repo;\n}).factory(\"insuranceRepository\", function (backendHelper) {\n  var backend = backendHelper.backend;\n  var repo = {};\n  repo.api = {\n    getInsurance: function getInsurance(createInsuranceInformation) {\n      return backend.api.post(\"api/insurance/create\", createInsuranceInformation);\n    },\n    cancelInsurance: function cancelInsurance(cancelInsuranceInformation) {\n      return backend.api.post(\"api/insurance/cancel\", cancelInsuranceInformation);\n    },\n    getCustomer: function getCustomer(ssn, retailerId, retailerPassword) {\n      var payload = {\n        ssn: ssn,\n        retailerId: retailerId,\n        retailerPassword: retailerPassword\n      };\n      return backend.api.post(\"api/insurance/getcustomer/\", payload);\n    }\n  };\n  return repo;\n}).factory(\"payPlazaRepository\", function (backendHelper, $q, $http, posStorage, $log) {\n  var repo = {};\n  var backend = backendHelper.backend;\n  repo.api = {\n    handleTransaction: function handleTransaction(paymentId, receiptId, currencyName, ecrId, amount) {\n      var data = {\n        paymentId: paymentId,\n        transId: receiptId,\n        currency: currencyName,\n        ecrId: ecrId,\n        amount: amount\n      };\n      return backend.api.post(\"api/payment/payplaza\", data, {\n        timeout: 0 /* long poll: should never time out */\n      });\n    },\n    cancelTransaction: function cancelTransaction(ecrId, paymentId) {\n      backend.api.get(\"api/payment/payplaza/cancel/\" + ecrId);\n    },\n    getLastReceipt: function getLastReceipt(ecrId) {\n      return backend.api.get(\"api/payment/payplaza/receipt/\" + ecrId);\n    },\n    acknowledgePayment: function acknowledgePayment(ecrId) {\n      backend.api.get(\"api/payment/payplaza/acknowledge/\" + ecrId);\n    },\n    getTerminalStatus: function getTerminalStatus(ecrId) {\n      return backend.api.get(\"api/payment/payplaza/status/\" + ecrId);\n    }\n  };\n  repo.device = function (index) {\n    if (index === undefined) index = backend.defaultDevice;\n    return {\n      deviceId: index,\n      printTerminalReceipt: function printTerminalReceipt(receipt) {\n        var data = {\n          receipt: receipt\n        };\n        $log.debug(\"Print receipt: \");\n        $log.debug(receipt);\n        var that = this;\n        return backendHelper.normalize(backend.devices[that.deviceId].post(\"/POSServiceHandler.aspx/PrintCardReceipt\", data));\n      }\n    };\n  };\n\n  //var payPlazaAssociationBaseUrl = 'http://barcodesample.payplaza.software:8080/mpos-ecr-rest-api-3.0/api/'; // production\n  //var api_token = 'ifvmjadlgi0ahs3k57a6p74v8ci6q09n'; // simulator\n  //var api_token = 'j92jcsjgsuegcgcjej6gqcrubi29v5kk' // mbposbackground - development\n  //var api_token = 'ifvmjadlgi0ahs3k57a6p74v8ci6q09n'; // simulator\n\n  var payPlazaAssociationBaseUrl = \"https://mpos-ecr-p01.payplaza.software/mpos-ecr-rest-api-3.0/api/\"; // production\n  var api_token = \"pk7is1t5f72vf40o93hedik7u7qicdm1\"; // production\n\n  var headers = {\n    Authorization: \"Bearer \" + api_token\n  };\n  repo.setScannerServiceBaseUrl = function (url) {\n    posStorage.set(\"payPlazaScannerBaseUrl\", url);\n  };\n  repo.getScannerServiceBaseUrl = function () {\n    return posStorage.get(\"payPlazaScannerBaseUrl\");\n  };\n  repo.initializeAssociation = function () {\n    return $http.post(payPlazaAssociationBaseUrl + \"initializeAssociation\", {}, {\n      headers: headers\n    });\n  };\n  repo.getAssociationId = function (nonce) {\n    return $http.post(payPlazaAssociationBaseUrl + \"getAssociationId\", {\n      associationNonce: nonce\n    }, {\n      headers: headers\n    });\n  };\n  repo.finalizeAssociation = function (associationId) {\n    return $http.post(payPlazaAssociationBaseUrl + \"finalizeAssociation\", {\n      associationId: associationId\n    }, {\n      headers: headers\n    });\n  };\n  repo.activateAssociation = function (associationId) {\n    $log.debug(moment().format(\"HH:mm:ss.SS\") + \": activateAss with Id: \" + associationId);\n    return $http.post(repo.getScannerServiceBaseUrl() + \"activateAssociation\", {\n      associationId: associationId\n    }, {\n      headers: headers\n    });\n  };\n  repo.getConnectionState = function (associationId) {\n    return $http.post(repo.getScannerServiceBaseUrl() + \"getConnectionState\", {\n      associationId: associationId\n    }, {\n      headers: headers\n    });\n  };\n  repo.getBarcode = function (associationId) {\n    var canceler = $q.defer();\n    $log.debug(moment().format(\"HH:mm:ss.SS\") + \": getBarcode with Id: \" + associationId);\n    var promise = $http.post(repo.getScannerServiceBaseUrl() + \"getBarcode\", {\n      associationId: associationId\n    }, {\n      headers: headers,\n      ignoreLoadingBar: true,\n      dontTrack: true,\n      timeout: canceler.promise\n    });\n    promise.isResolved = false;\n    promise[\"finally\"](function () {\n      promise.isResolved = true;\n    });\n    promise.abort = function () {\n      $log.debug(\"cancelling long poll\");\n      canceler.resolve();\n    };\n    return promise;\n  };\n  return repo;\n}).factory(\"tenantFeatureRepository\", function (backendHelper) {\n  var backend = backendHelper.backend;\n  var repo = {};\n  repo.api = {\n    getTenantFetures: function getTenantFetures() {\n      return backend.api.get(\"api/tenantFeature\");\n    },\n    getTenantFetureByName: function getTenantFetureByName(featureName) {\n      return backend.api.get(\"api/tenantFeature/byname/\" + featureName);\n    }\n  };\n  return repo;\n});\n","\"use strict\";\n\npos.directive(\"buttonState\", function () {\n  \"use strict\";\n\n  return {\n    restrict: \"A\",\n    controller: function controller($scope, posConfig, clerkLoginService, eventBus) {\n      var clerkButtonStates = clerkLoginService.getButtonStates();\n      if (!_.isEmpty(clerkButtonStates)) {\n        $scope.buttonStatesList = clerkButtonStates;\n      } else {\n        var loadConfig = function loadConfig() {\n          $scope.buttonStatesList = posConfig.getOptions().buttonStates;\n        };\n        loadConfig();\n        eventBus.subscribe(eventBus.events.pos.newConfig, $scope, loadConfig);\n      }\n    },\n    link: function link(scope, ele, attrs) {\n      scope.buttonStatesList && scope.buttonStatesList[attrs.buttonState] === false && ele.addClass(\"button-state__disabled\");\n    }\n  };\n});\n","\"use strict\";\n\n/**\n * Service for hooking onto the connector part\n * of the backend service.\n *\n * @returns {object} scope\n */\npos.service(\"ConnectorService\", function (backend, connectorLockService) {\n  var scope = {};\n  scope.defaultConnector = \"\";\n\n  /**\n   * Defines the connectors based on backend data\n   *\n   * @returns {object} connectors\n   */\n  scope.getConnectors = function () {\n    var connectors = [];\n\n    // Iterate through connectors\n    for (var i = 0; i < backend.devices.length; i++) {\n      var connector = backend.devices[i];\n\n      // Append the connector to the connectors array\n      connectors.push({\n        text: connector.deviceName,\n        click: \"setDefaultArm(\" + i + \")\",\n        reboot: \"rebootArm(\" + i + \")\",\n        terminalType: connector.terminalType,\n        deviceIndex: i,\n        device: connector\n      });\n    }\n    return connectors;\n  };\n\n  /**\n   * Checks whether any devices are online.\n   *\n   * @returns {bool} childscope.result\n   */\n  scope.anyConnectorOnline = function () {\n    for (var i = 0; i < backend.devices.length; i++) {\n      var currentConnector = backend.devices[i];\n\n      // If an online connector is encounted, break the loop\n      // and set the online property to true\n      if (!currentConnector.isStatic && currentConnector.isOnline) {\n        return true;\n      }\n    }\n    return false;\n  };\n\n  /**\n   * Method for filtering connectors, only showing static\n   * connectors if all other connectors are offline.\n   *\n   * @param {object} connector\n   * @returns {bool} chilscope.result\n   */\n  scope.filterConnectors = function (connector) {\n    // When locked, never offer the static Default connector as an offline failover target.\n    if (connectorLockService.isLocked() && connector.device.isStatic === true) {\n      return false;\n    }\n\n    // Enable the static connector (Default) if no devices are online\n    if (connector.device.isStatic === true) {\n      return !scope.anyConnectorOnline();\n    }\n    return true;\n  };\n  scope.isLockableDevice = function (device) {\n    return device && device.isStatic !== true && device.id != 999;\n  };\n\n  /** True when this row is the active default device (green selection bar). */\n  scope.isSelectedConnector = function (connector) {\n    if (!connector || connector.deviceIndex == null || !scope.isLockableDevice(connector.device)) return false;\n    return Number(connector.deviceIndex) === Number(backend.defaultDevice);\n  };\n\n  /**\n   * Returns a boolean depending on whether the\n   * device is selected or not.\n   *\n   * @param {number} currentConnector - The current connector index\n   * @param {object} selectedConnector - The currently selected connector\n   * @returns {bool} chilscope.result\n   */\n  scope.connectorIsSelected = function (currentConnector, selectedConnector) {\n    return currentConnector.index == selectedConnector;\n  };\n\n  // Serve the service\n  return scope;\n});\n","\"use strict\";\n\n/**\n * Persists and enforces connector lock state so the POS stays bound to one\n * payment device and does not fail over when connectivity is intermittent.\n *\n * Persistence (localStorage, survives refresh and browser restart):\n *   - isConnectorLocked (boolean string: \"true\" / \"false\")\n *   - selectedConnectorId (single connector device id — only one may be locked)\n *\n * lock() always overwrites both keys for the current connector; there is no\n * multi-lock list. restoreLockedConnector() reapplies the binding after config load.\n */\npos.service(\"connectorLockService\", function ($rootScope, backend) {\n  var STORAGE_LOCKED = \"isConnectorLocked\";\n  var STORAGE_CONNECTOR_ID = \"selectedConnectorId\";\n\n  /** @returns {boolean} Whether a connector lock is active in localStorage. */\n  function isLocked() {\n    return localStorage.getItem(STORAGE_LOCKED) === \"true\";\n  }\n\n  /** @returns {string|null} Persisted device id of the locked connector. */\n  function getLockedConnectorId() {\n    var id = localStorage.getItem(STORAGE_CONNECTOR_ID);\n    return id != null && id !== \"\" ? id : null;\n  }\n\n  /** @returns {number|null} backend.devices index for the locked connector, or null if not found. */\n  function getLockedDeviceIndex() {\n    if (!isLocked()) return null;\n    var lockedId = getLockedConnectorId();\n    if (lockedId == null) return null;\n    for (var i = 0; i < backend.devices.length; i++) {\n      if (String(backend.devices[i].id) === String(lockedId)) return i;\n    }\n    return null;\n  }\n  function notifyChanged() {\n    $rootScope.$broadcast(\"connectorLock:changed\");\n  }\n  var service = {\n    isLocked: isLocked,\n    getLockedConnectorId: getLockedConnectorId,\n    getLockedDeviceIndex: getLockedDeviceIndex,\n    /** Binds lock to the given device. Only real connectors — not Default (999). */\n    lock: function lock(device) {\n      device = device || backend.getCurrentDevice();\n      if (!device || device.isStatic === true || device.id == 999) return;\n\n      // Single-slot: replaces any previous lock for this browser session/storage scope.\n      localStorage.setItem(STORAGE_LOCKED, \"true\");\n      localStorage.setItem(STORAGE_CONNECTOR_ID, String(device.id));\n      notifyChanged();\n    },\n    /** Clears lock state from localStorage. */\n    unlock: function unlock() {\n      localStorage.setItem(STORAGE_LOCKED, \"false\");\n      localStorage.removeItem(STORAGE_CONNECTOR_ID);\n      notifyChanged();\n    },\n    toggleLock: function toggleLock() {\n      if (isLocked()) service.unlock();else service.lock();\n    },\n    /**\n     * Returns true when setDefaultDevice should reject an automatic switch.\n     * @param {number} targetIndex - Proposed backend.devices index.\n     * @param {{ manual?: boolean, force?: boolean }} options - manual: user picked a device; force: restore on load.\n     */\n    shouldBlockSwitch: function shouldBlockSwitch(targetIndex, options) {\n      options = options || {};\n      // force: restore on load; manual: header device menu (handled in setDefaultDevice).\n      if (options.force || options.manual) return false;\n      if (!isLocked()) return false;\n      var lockedIndex = getLockedDeviceIndex();\n      if (lockedIndex == null) return false;\n\n      // Block every automatic switch away from the locked connector, including when it is offline.\n      return targetIndex !== lockedIndex;\n    },\n    /** Called after payment devices load; rebinds or clears stale lock from localStorage. */\n    restoreLockedConnector: function restoreLockedConnector() {\n      if (!isLocked()) return;\n      var lockedIndex = getLockedDeviceIndex();\n      // Locked connector no longer in config — clear stale lock state.\n      if (lockedIndex == null) {\n        service.unlock();\n        return;\n      }\n      if (lockedIndex !== backend.defaultDevice) {\n        backend.setDefaultDevice(lockedIndex, false, {\n          force: true\n        });\n      }\n    }\n  };\n\n  // Clear inconsistent persisted state (locked flag without a connector id).\n  if (isLocked() && getLockedConnectorId() == null) {\n    localStorage.setItem(STORAGE_LOCKED, \"false\");\n  }\n  return service;\n});\n","\"use strict\";\n\npos.value(\"giftPrintingOptionValue\", Object.freeze({\n  giftReceipt: 0,\n  giftLabel: 1,\n  giftReceiptAndLabel: 2\n}));\n","\"use strict\";\n\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _regeneratorRuntime() { \"use strict\"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return r; }; var t, r = {}, e = Object.prototype, n = e.hasOwnProperty, o = \"function\" == typeof Symbol ? Symbol : {}, i = o.iterator || \"@@iterator\", a = o.asyncIterator || \"@@asyncIterator\", u = o.toStringTag || \"@@toStringTag\"; function c(t, r, e, n) { return Object.defineProperty(t, r, { value: e, enumerable: !n, configurable: !n, writable: !n }); } try { c({}, \"\"); } catch (t) { c = function c(t, r, e) { return t[r] = e; }; } function h(r, e, n, o) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype); return c(a, \"_invoke\", function (r, e, n) { var o = 1; return function (i, a) { if (3 === o) throw Error(\"Generator is already running\"); if (4 === o) { if (\"throw\" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var u = n.delegate; if (u) { var c = d(u, n); if (c) { if (c === f) continue; return c; } } if (\"next\" === n.method) n.sent = n._sent = n.arg;else if (\"throw\" === n.method) { if (1 === o) throw o = 4, n.arg; n.dispatchException(n.arg); } else \"return\" === n.method && n.abrupt(\"return\", n.arg); o = 3; var h = s(r, e, n); if (\"normal\" === h.type) { if (o = n.done ? 4 : 2, h.arg === f) continue; return { value: h.arg, done: n.done }; } \"throw\" === h.type && (o = 4, n.method = \"throw\", n.arg = h.arg); } }; }(r, n, new Context(o || [])), !0), a; } function s(t, r, e) { try { return { type: \"normal\", arg: t.call(r, e) }; } catch (t) { return { type: \"throw\", arg: t }; } } r.wrap = h; var f = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var l = {}; c(l, i, function () { return this; }); var p = Object.getPrototypeOf, y = p && p(p(x([]))); y && y !== e && n.call(y, i) && (l = y); var v = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(l); function g(t) { [\"next\", \"throw\", \"return\"].forEach(function (r) { c(t, r, function (t) { return this._invoke(r, t); }); }); } function AsyncIterator(t, r) { function e(o, i, a, u) { var c = s(t[o], t, i); if (\"throw\" !== c.type) { var h = c.arg, f = h.value; return f && \"object\" == _typeof(f) && n.call(f, \"__await\") ? r.resolve(f.__await).then(function (t) { e(\"next\", t, a, u); }, function (t) { e(\"throw\", t, a, u); }) : r.resolve(f).then(function (t) { h.value = t, a(h); }, function (t) { return e(\"throw\", t, a, u); }); } u(c.arg); } var o; c(this, \"_invoke\", function (t, n) { function i() { return new r(function (r, o) { e(t, n, r, o); }); } return o = o ? o.then(i, i) : i(); }, !0); } function d(r, e) { var n = e.method, o = r.i[n]; if (o === t) return e.delegate = null, \"throw\" === n && r.i[\"return\"] && (e.method = \"return\", e.arg = t, d(r, e), \"throw\" === e.method) || \"return\" !== n && (e.method = \"throw\", e.arg = new TypeError(\"The iterator does not provide a '\" + n + \"' method\")), f; var i = s(o, r.i, e.arg); if (\"throw\" === i.type) return e.method = \"throw\", e.arg = i.arg, e.delegate = null, f; var a = i.arg; return a ? a.done ? (e[r.r] = a.value, e.next = r.n, \"return\" !== e.method && (e.method = \"next\", e.arg = t), e.delegate = null, f) : a : (e.method = \"throw\", e.arg = new TypeError(\"iterator result is not an object\"), e.delegate = null, f); } function w(t) { this.tryEntries.push(t); } function m(r) { var e = r[4] || {}; e.type = \"normal\", e.arg = t, r[4] = e; } function Context(t) { this.tryEntries = [[-1]], t.forEach(w, this), this.reset(!0); } function x(r) { if (null != r) { var e = r[i]; if (e) return e.call(r); if (\"function\" == typeof r.next) return r; if (!isNaN(r.length)) { var o = -1, a = function e() { for (; ++o < r.length;) if (n.call(r, o)) return e.value = r[o], e.done = !1, e; return e.value = t, e.done = !0, e; }; return a.next = a; } } throw new TypeError(_typeof(r) + \" is not iterable\"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, c(v, \"constructor\", GeneratorFunctionPrototype), c(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction), GeneratorFunction.displayName = c(GeneratorFunctionPrototype, u, \"GeneratorFunction\"), r.isGeneratorFunction = function (t) { var r = \"function\" == typeof t && t.constructor; return !!r && (r === GeneratorFunction || \"GeneratorFunction\" === (r.displayName || r.name)); }, r.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, c(t, u, \"GeneratorFunction\")), t.prototype = Object.create(v), t; }, r.awrap = function (t) { return { __await: t }; }, g(AsyncIterator.prototype), c(AsyncIterator.prototype, a, function () { return this; }), r.AsyncIterator = AsyncIterator, r.async = function (t, e, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(h(t, e, n, o), i); return r.isGeneratorFunction(e) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, g(v), c(v, u, \"Generator\"), c(v, i, function () { return this; }), c(v, \"toString\", function () { return \"[object Generator]\"; }), r.keys = function (t) { var r = Object(t), e = []; for (var n in r) e.unshift(n); return function t() { for (; e.length;) if ((n = e.pop()) in r) return t.value = n, t.done = !1, t; return t.done = !0, t; }; }, r.values = x, Context.prototype = { constructor: Context, reset: function reset(r) { if (this.prev = this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = \"next\", this.arg = t, this.tryEntries.forEach(m), !r) for (var e in this) \"t\" === e.charAt(0) && n.call(this, e) && !isNaN(+e.slice(1)) && (this[e] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0][4]; if (\"throw\" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(r) { if (this.done) throw r; var e = this; function n(t) { a.type = \"throw\", a.arg = r, e.next = t; } for (var o = e.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i[4], u = this.prev, c = i[1], h = i[2]; if (-1 === i[0]) return n(\"end\"), !1; if (!c && !h) throw Error(\"try statement without catch or finally\"); if (null != i[0] && i[0] <= u) { if (u < c) return this.method = \"next\", this.arg = t, n(c), !0; if (u < h) return n(h), !1; } } }, abrupt: function abrupt(t, r) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var n = this.tryEntries[e]; if (n[0] > -1 && n[0] <= this.prev && this.prev < n[2]) { var o = n; break; } } o && (\"break\" === t || \"continue\" === t) && o[0] <= r && r <= o[2] && (o = null); var i = o ? o[4] : {}; return i.type = t, i.arg = r, o ? (this.method = \"next\", this.next = o[2], f) : this.complete(i); }, complete: function complete(t, r) { if (\"throw\" === t.type) throw t.arg; return \"break\" === t.type || \"continue\" === t.type ? this.next = t.arg : \"return\" === t.type ? (this.rval = this.arg = t.arg, this.method = \"return\", this.next = \"end\") : \"normal\" === t.type && r && (this.next = r), f; }, finish: function finish(t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[2] === t) return this.complete(e[4], e[3]), m(e), f; } }, \"catch\": function _catch(t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[0] === t) { var n = e[4]; if (\"throw\" === n.type) { var o = n.arg; m(e); } return o; } } throw Error(\"illegal catch attempt\"); }, delegateYield: function delegateYield(r, e, n) { return this.delegate = { i: x(r), r: e, n: n }, \"next\" === this.method && (this.arg = t), f; } }, r; }\nfunction _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); }\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _iterableToArray(r) { if (\"undefined\" != typeof Symbol && null != r[Symbol.iterator] || null != r[\"@@iterator\"]) return Array.from(r); }\nfunction _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"next\", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"throw\", n); } _next(void 0); }); }; }\npos.service(\"giftsService\", function (sales, posConfig, giftPrintingOptionValue, saleRepository, fluctuatingPropertiesHelper, eventBus) {\n  var service = {};\n  function printGiftReceipt(_x, _x2) {\n    return _printGiftReceipt.apply(this, arguments);\n  }\n  function _printGiftReceipt() {\n    _printGiftReceipt = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee(receipt, exchangeBarcodes) {\n      return _regeneratorRuntime().wrap(function _callee$(_context) {\n        while (1) switch (_context.prev = _context.next) {\n          case 0:\n            _context.next = 2;\n            return sales.printGiftReceipt(receipt, exchangeBarcodes);\n          case 2:\n            return _context.abrupt(\"return\", _context.sent);\n          case 3:\n          case \"end\":\n            return _context.stop();\n        }\n      }, _callee);\n    }));\n    return _printGiftReceipt.apply(this, arguments);\n  }\n  function printGiftLabel(_x3, _x4) {\n    return _printGiftLabel.apply(this, arguments);\n  }\n  function _printGiftLabel() {\n    _printGiftLabel = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee2(receipt, exchangeBarcodes) {\n      return _regeneratorRuntime().wrap(function _callee2$(_context2) {\n        while (1) switch (_context2.prev = _context2.next) {\n          case 0:\n            _context2.next = 2;\n            return sales.printGiftLabel(receipt, exchangeBarcodes);\n          case 2:\n            return _context2.abrupt(\"return\", _context2.sent);\n          case 3:\n          case \"end\":\n            return _context2.stop();\n        }\n      }, _callee2);\n    }));\n    return _printGiftLabel.apply(this, arguments);\n  }\n  service.printGiftDocumentation = function (receipt, transactionUuid, isReprint) {\n    if (!receipt) return;\n    eventBus.notify(eventBus.events.sale.isPrinting, null);\n    receipt.uuid = transactionUuid;\n    var exchangeBarcodesPromise;\n    if (isReprint) {\n      exchangeBarcodesPromise = saleRepository.api.getExchangeLabels(transactionUuid);\n    } else {\n      exchangeBarcodesPromise = saleRepository.api.createExchangeLabels(receipt);\n    }\n    return exchangeBarcodesPromise.then(function (exchangeBarcodeResponse) {\n      var exchangeBarcodes = exchangeBarcodeResponse.data;\n      switch (posConfig.giftPrintingOption) {\n        case giftPrintingOptionValue.giftReceipt:\n          return printGiftReceipt(receipt, _toConsumableArray(exchangeBarcodes)).then(function () {\n            return eventBus.notify(eventBus.events.sale.donePrinting, null);\n          });\n        case giftPrintingOptionValue.giftLabel:\n          return printGiftLabel(receipt, _toConsumableArray(exchangeBarcodes)).then(function () {\n            return eventBus.notify(eventBus.events.sale.donePrinting, null);\n          });\n        case giftPrintingOptionValue.giftReceiptAndLabel:\n          return printGiftReceipt(receipt, _toConsumableArray(exchangeBarcodes)).then(function () {\n            return printGiftLabel(receipt, _toConsumableArray(exchangeBarcodes));\n          }).then(function () {\n            return eventBus.notify(eventBus.events.sale.donePrinting, null);\n          });\n      }\n    });\n  };\n  service.getGiftExchanges = function (receipt, transactionUuid, isReprint) {\n    if (!receipt) return;\n    eventBus.notify(eventBus.events.sale.isPrinting, null);\n    receipt.uuid = transactionUuid;\n    var exchangeBarcodesPromise;\n    if (isReprint) {\n      exchangeBarcodesPromise = saleRepository.api.getExchangeLabels(transactionUuid);\n    } else {\n      exchangeBarcodesPromise = saleRepository.api.createExchangeLabels(receipt);\n    }\n    return exchangeBarcodesPromise.then(function (exchangeBarcodeResponse) {\n      return exchangeBarcodeResponse.data;\n    });\n  };\n\n  // Serve the service\n  return service;\n});\n","\"use strict\";\n\npos.factory(\"strackTrace\", function () {\n  return StackTrace;\n});\npos.factory(\"errorService\", function (strackTrace, $injector, $log) {\n  var service = {};\n  var stringify = function stringify(stackframes) {\n    var stringifiedStack = stackframes.map(function (sf) {\n      return sf.toString();\n    }).join(\"\\n\");\n    return stringifiedStack;\n  };\n  var errback = function errback(err) {\n    $log.debug(err.message);\n  };\n  service.getStackTrace = function (error) {\n    var deferred = $injector.get(\"$q\").defer();\n    strackTrace.fromError(error).then(function (stackframes) {\n      deferred.resolve(stringify(stackframes));\n    })[\"catch\"](deferred.reject);\n    return deferred.promise;\n  };\n  return service;\n});\n","\"use strict\";\n\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\npos.factory(\"eventBus\", [\"$rootScope\", \"events\", \"$q\", function ($rootScope, events, $q) {\n  var eventBus = {};\n  var eventNames = flatten(events);\n  var asyncEventListeners = {};\n\n  /**\n   * Subscribe to an event when it is triggered on the event bus.\n   * @param {string} eventName The event to subscribe to. These can be found in the eventBus.value.js file.\n   * @param {scope} scope The $scope of the subscriber. This is used to destroy the event handler when the subscriber is destroyed.\n   * @param {function} callback The actual function to call.\n   */\n  eventBus.subscribe = function (eventName, scope, callback) {\n    return ifValidEvent(eventName, function () {\n      var handler = $rootScope.$on(eventName, callback);\n      if (scope) {\n        scope.$on(\"$destroy\", handler);\n      } else {\n        return handler;\n      }\n    });\n  };\n  eventBus.subscribeAsync = function (eventName, scope, callback) {\n    return ifValidEvent(eventName, function () {\n      if (!asyncEventListeners[eventName]) {\n        asyncEventListeners[eventName] = [];\n      }\n      asyncEventListeners[eventName].push(callback);\n      if (scope) {\n        scope.$on(\"$destroy\", function () {\n          var idx = asyncEventListeners[eventName].indexOf(callback);\n          asyncEventListeners[eventName].splice(idx, 1);\n        });\n      }\n    });\n  };\n\n  /**\n   * Notifies all subscribers of the given event.\n   * @param {string} eventName The event to emit. This event must be registed in the eventBus.value.js file\n   */\n  eventBus.notify = function (eventName, args) {\n    return ifValidEvent(eventName, function () {\n      return $rootScope.$emit(eventName, args);\n    });\n  };\n  eventBus.notifyAsync = function (eventName, args) {\n    return ifValidEvent(eventName, function () {\n      var callbacks = asyncEventListeners[eventName] || [];\n      var cbPromises = callbacks.map(function (cb) {\n        return cb(args);\n      });\n      return $q.all(cbPromises).then(function (resolved) {\n        if (resolved) {\n          return resolved.reduce(function (pre, curr) {\n            return pre && curr;\n          }, true);\n        } else {\n          return true;\n        }\n      });\n    });\n  };\n  eventBus.events = events;\n\n  /**\n   * Flattens the given object, so you are left with an array containing all the property values of the object\n   * @param {object} obj The object to flatten\n   */\n  function flatten(obj) {\n    var values = [];\n    var keys = Object.keys(obj);\n    for (var i = 0; i < keys.length; i++) {\n      if (_typeof(obj[keys[i]]) == \"object\") {\n        values = values.concat(flatten(obj[keys[i]]));\n      } else {\n        values.push(obj[keys[i]]);\n      }\n    }\n    return values;\n  }\n\n  /**\n   * If the given eventname is valid, execute the callback.\n   * @param {string} eventName The name of the event\n   * @param {function} callback The callback if the event is valid\n   */\n  function ifValidEvent(eventName, callback) {\n    if (eventNames.includes(eventName)) {\n      return callback();\n    } else {\n      console.error(\"Unregistered event used:\", eventName);\n    }\n  }\n  return eventBus;\n}]);\n","\"use strict\";\n\npos.value(\"events\", {\n  sale: {\n    completing: \"sale.completing\",\n    isPrinting: \"sale.isPrinting\",\n    donePrinting: \"sale.donePrinting\",\n    completed: \"sale.completed\",\n    reprint: \"sale.reprint\",\n    reprintOffline: \"sale.reprintoffline\",\n    itemDeleted: \"sale.itemDeleted\",\n    cancelled: \"sale.cancelled\",\n    completingOnDevice: \"sale.completing-on-device\",\n    downPaymentPrint: \"sale.downPaymentPrint\",\n    close: \"sale.close\"\n  },\n  customer: {\n    attach: \"customer.attach\",\n    detach: \"customer.detach\",\n    updated: \"customer.updated\",\n    beforeSelect: \"customer.beforeSelect\",\n    afterSelect: \"customer.afterSelect\",\n    selected: \"customer.selected\"\n  },\n  quagga: {\n    enable: \"quagga.enable\",\n    disable: \"quagga.disable\"\n  },\n  pos: {\n    itemSelected: \"pos.itemSelected\",\n    cashStatementStart: \"pos.cashStatementStart\",\n    newConfig: \"pos.newConfig\",\n    login: \"pos.login\",\n    showingQty: \"pos.showingQty\",\n    managerVerificationRequested: \"pos.managerVerificationRequested\",\n    managerVerificationResponse: \"pos.managerVerificationResponse\",\n    clerkVerificationRequested: \"pos.clerkVerificationRequested\",\n    clerkVerificationResponse: \"pos.clerkVerificationResponse\",\n    modalInputFocusRequested: \"pos.modalInputFocusRequested\",\n    promotionBarcodeScanned: \"pos.promotionBarcodeScanned\",\n    rangedValueInputRequested: \"pos.rangedValueInputRequested\",\n    rangedValueInputResponse: \"pos.rangedValueInputResponse\",\n    pinRequested: \"pos.pinRequested\",\n    pinResponse: \"pos.pinResponse\"\n  },\n  voucher: {\n    sale: \"voucher.sale\",\n    deactivate: \"voucher.deactivate\",\n    retryDeactivation: \"voucher.retryDeactivation\",\n    printFailure: \"voucher.printFailure\",\n    retryAction: \"voucher.retryAction\",\n    printAction: \"voucher.printAction\"\n  },\n  payment: {\n    cancel: \"payment.cancel\",\n    verifone: {\n      voiceReferralApproval: \"payment.verifone.voiceReferralApproval\",\n      voiceReferralApprovalResponse: \"payment.verifone.voiceReferralApprovalResponse\",\n      signatureApproval: \"payment.verifone.signatureApproval\",\n      signatureApprovalResponse: \"payment.verifone.signatureApprovalResponse\"\n    },\n    paymentInputRequired: \"payment.paymentInputRequired\"\n  },\n  article: {\n    addToReceipt: \"article.addToReceipt\",\n    addToReceiptBarcode: \"article.addToReceiptBarcode\",\n    increase: \"article.increase\"\n  },\n  downpayment: {\n    finishTransaction: \"downpayment.finishTransaction\",\n    openBooking: \"downpayment.openbooking\"\n  },\n  keyboard: {\n    hidden: \"keyboard.hidden\"\n  },\n  toaster: {\n    clicked: \"toaster.clicked\"\n  },\n  cashstatement: {\n    failed: \"cashstatement.failed\"\n  }\n});\n","\"use strict\";\n\npos.directive(\"flipToggle\", function flipToggle() {\n  return {\n    restrict: \"A\",\n    link: function link(scope, ele, attr) {\n      ele.bind(\"click touchstart\", function () {\n        ele.addClass(\"flip-toggle__pre--active\");\n        scope.resetTimeout = setTimeout(function () {\n          ele.removeClass(\"flip-toggle__pre--active\");\n        }, 5000);\n      });\n    }\n  };\n});\n","\"use strict\";\n\npos.factory(\"fluctuatingPropertiesHelper\", function () {\n  var webOrderTypeKey = \"webOrderType\";\n  var fluctuatingPropertiesHelper = {};\n  fluctuatingPropertiesHelper.setWebOrderType = function (item, value) {\n    initProps(item);\n    item.fluctuatingProperties[webOrderTypeKey] = value;\n  };\n  var customerOrderNo = \"customerOrderNo\";\n  fluctuatingPropertiesHelper.setCustomerOrderNo = function (item, value) {\n    initProps(item);\n    item.fluctuatingProperties[customerOrderNo] = value;\n  };\n  fluctuatingPropertiesHelper.getWebOrderType = function (item) {\n    if (!item.fluctuatingProperties || !item.fluctuatingProperties[webOrderTypeKey]) return;\n    return item.fluctuatingProperties[webOrderTypeKey];\n  };\n  fluctuatingPropertiesHelper.updateProperties = function (item) {\n    initProps(item);\n\n    // Exchange related properties\n    if (item.isGift) {\n      item.fluctuatingProperties[\"isGift\"] = item.isGift;\n      item.fluctuatingProperties[\"exchangeExpiryDate\"] = moment.utc(item.exchangeExpiryDate, \"DD/MM/YYYY\").toISOString();\n    }\n  };\n  fluctuatingPropertiesHelper.setExchangeLabelBarcodeScanned = function (item, barcode) {\n    initProps(item);\n    item.fluctuatingProperties[\"usedExchangeLabelBarcode\"] = barcode;\n    item.isGift = item.fluctuatingProperties[\"isGift\"];\n    item.exchangeExpiryDate = item.fluctuatingProperties[\"exchangeExpiryDate\"];\n  };\n  fluctuatingPropertiesHelper.setIsExcludedFromLoyalty = function (item, isExcluded) {\n    initProps(item);\n    if (isExcluded) {\n      item.fluctuatingProperties[\"isExcludedFromLoyalty\"] = isExcluded;\n    } else {\n      delete item.fluctuatingProperties[\"isExcludedFromLoyalty\"];\n    }\n    item.isExcludedFromLoyalty = isExcluded;\n  };\n  fluctuatingPropertiesHelper.setVNumber = function (item, vNumber) {\n    initProps(item);\n    if (vNumber) {\n      item.fluctuatingProperties[\"vNumber\"] = vNumber;\n    } else {\n      delete item.fluctuatingProperties[\"vNumber\"];\n    }\n  };\n  fluctuatingPropertiesHelper.getVNumber = function (item) {\n    if (!item.fluctuatingProperties || !item.fluctuatingProperties[\"vNumber\"]) return;\n    return item.fluctuatingProperties[\"vNumber\"];\n  };\n  fluctuatingPropertiesHelper.setIsBooking = function (item, isBooking) {\n    initProps(item);\n    if (isBooking) {\n      item.fluctuatingProperties[\"isBooking\"] = isBooking;\n    } else {\n      delete item.fluctuatingProperties[\"isBooking\"];\n    }\n  };\n  fluctuatingPropertiesHelper.getIsBooking = function (item) {\n    if (!item.fluctuatingProperties || !item.fluctuatingProperties[\"isBooking\"]) return;\n    return item.fluctuatingProperties[\"isBooking\"];\n  };\n  fluctuatingPropertiesHelper.getDownPaymentNo = function (item) {\n    if (!item.fluctuatingProperties || !item.fluctuatingProperties[\"downPaymentNo\"]) return;\n    return item.fluctuatingProperties[\"downPaymentNo\"];\n  };\n  fluctuatingPropertiesHelper.setDownPaymentNo = function (item, downPaymentNo) {\n    initProps(item);\n    if (downPaymentNo) {\n      item.fluctuatingProperties[\"downPaymentNo\"] = downPaymentNo;\n    } else {\n      delete item.fluctuatingProperties[\"downPaymentNo\"];\n    }\n  };\n  fluctuatingPropertiesHelper.getIsBooking = function (item) {\n    if (!item.fluctuatingProperties || !item.fluctuatingProperties[\"isBooking\"]) return;\n    return item.fluctuatingProperties[\"isBooking\"];\n  };\n  fluctuatingPropertiesHelper.getMaxPaymentValue = function (item) {\n    if (!item.fluctuatingProperties || !item.fluctuatingProperties[\"maxPaymentValue\"]) return;\n    return item.fluctuatingProperties[\"maxPaymentValue\"];\n  };\n  fluctuatingPropertiesHelper.setMaxPaymentValue = function (item, value) {\n    initProps(item);\n    if (value) {\n      item.fluctuatingProperties[\"maxPaymentValue\"] = value;\n    } else {\n      delete item.fluctuatingProperties[\"maxPaymentValue\"];\n    }\n  };\n  fluctuatingPropertiesHelper.getDownPaymentValue = function (item) {\n    if (!item.fluctuatingProperties || !item.fluctuatingProperties[\"downPaymentValue\"]) return;\n    return item.fluctuatingProperties[\"downPaymentValue\"];\n  };\n  fluctuatingPropertiesHelper.setDownPaymentValue = function (item, downPaymentValue) {\n    initProps(item);\n    if (downPaymentValue) {\n      item.fluctuatingProperties[\"downPaymentValue\"] = downPaymentValue;\n    } else {\n      delete item.fluctuatingProperties[\"downPaymentValue\"];\n    }\n  };\n  fluctuatingPropertiesHelper.setBookingPayment = function (item, bookingPayment) {\n    initProps(item);\n    if (bookingPayment) {\n      item.fluctuatingProperties[\"bookingPayment\"] = bookingPayment;\n    } else {\n      delete item.fluctuatingProperties[\"bookingPayment\"];\n    }\n  };\n  fluctuatingPropertiesHelper.getBookingAmountToBePaid = function (item) {\n    if (!item.fluctuatingProperties || !item.fluctuatingProperties[\"amountToBePaid\"]) return;\n    return item.fluctuatingProperties[\"amountToBePaid\"];\n  };\n  fluctuatingPropertiesHelper.getBookingPayments = function (item) {\n    if (!item.fluctuatingProperties || !item.fluctuatingProperties[\"bookingPayments\"]) return;\n    return item.fluctuatingProperties[\"bookingPayments\"];\n  };\n  fluctuatingPropertiesHelper.addKeyValue = function (key, value, item) {\n    initProps(item);\n    item.fluctuatingProperties[key] = value;\n  };\n  fluctuatingPropertiesHelper.setExchangeBarcode = function (value, item) {\n    initProps(item);\n    item.fluctuatingProperties[\"exchangeBarcode\"] = value;\n  };\n  fluctuatingPropertiesHelper.getExchangeBarcode = function (item) {\n    if (!item.fluctuatingProperties || !item.fluctuatingProperties[\"exchangeBarcode\"]) return;\n    return item.fluctuatingProperties[\"exchangeBarcode\"];\n  };\n  fluctuatingPropertiesHelper.getExchangeExpiryDate = function (item) {\n    if (!item.fluctuatingProperties || !item.fluctuatingProperties[\"exchangeExpiryDate\"]) return;\n    return item.fluctuatingProperties[\"exchangeExpiryDate\"];\n  };\n  var isGiftAidableProperty = \"GiftAid_isGiftAidable\";\n  var giftAidTitlePropertyName = \"GiftAid_title\";\n  var giftAidFirstNamePropertyName = \"GiftAid_firstName\";\n  var giftAidLastNamePropertyName = \"GiftAid_lastName\";\n  var giftAidHouseNumberPropertyName = \"GiftAid_houseNumber\";\n  var giftAidPostalCodePropertyName = \"GiftAid_postalCode\";\n  fluctuatingPropertiesHelper.setItemAsGiftAidable = function (item) {\n    initProps(item);\n    item.fluctuatingProperties[isGiftAidableProperty] = true;\n  };\n  var serialNumberPropertyName = \"SerialNo\";\n  fluctuatingPropertiesHelper.setItemAsSerialized = function (item) {\n    initProps(item);\n    item.serialButtonIsVisible = true;\n    item.fluctuatingProperties[serialNumberPropertyName] = item.serialNo;\n  };\n  fluctuatingPropertiesHelper.getSerialNo = function (item) {\n    if (!item.fluctuatingProperties || !item.fluctuatingProperties[\"SerialNo\"]) return;\n    return item.fluctuatingProperties[\"SerialNo\"];\n  };\n  fluctuatingPropertiesHelper.isItemGiftAidable = function (item) {\n    if (!item.fluctuatingProperties || !item.fluctuatingProperties[isGiftAidableProperty]) return;\n    return item.fluctuatingProperties[isGiftAidableProperty];\n  };\n  fluctuatingPropertiesHelper.setTransactionAsGiftAidable = function (receipt, isGiftAidable) {\n    initProps(receipt);\n    receipt.fluctuatingProperties[isGiftAidableProperty] = isGiftAidable;\n  };\n  fluctuatingPropertiesHelper.isTransactionGiftAidable = function (receipt) {\n    if (!receipt.fluctuatingProperties) return;\n    return receipt.fluctuatingProperties[isGiftAidableProperty];\n  };\n  fluctuatingPropertiesHelper.setTransactionGiftAidTitle = function (receipt, value) {\n    initProps(receipt);\n    receipt.fluctuatingProperties[giftAidTitlePropertyName] = value;\n  };\n  fluctuatingPropertiesHelper.getTransactionGiftAidTitle = function (receipt) {\n    return fluctuatingPropertiesHelper.getTransactionGiftAidValue(receipt, giftAidTitlePropertyName);\n  };\n  fluctuatingPropertiesHelper.setTransactionGiftAidFirstName = function (receipt, value) {\n    initProps(receipt);\n    receipt.fluctuatingProperties[giftAidFirstNamePropertyName] = value;\n  };\n  fluctuatingPropertiesHelper.getTransactionGiftAidFirstName = function (receipt) {\n    return fluctuatingPropertiesHelper.getTransactionGiftAidValue(receipt, giftAidFirstNamePropertyName);\n  };\n  fluctuatingPropertiesHelper.setTransactionGiftAidLastName = function (receipt, value) {\n    initProps(receipt);\n    receipt.fluctuatingProperties[giftAidLastNamePropertyName] = value;\n  };\n  fluctuatingPropertiesHelper.getTransactionGiftAidLastName = function (receipt) {\n    return fluctuatingPropertiesHelper.getTransactionGiftAidValue(receipt, giftAidLastNamePropertyName);\n  };\n  fluctuatingPropertiesHelper.setTransactionGiftAidHouseNumber = function (receipt, value) {\n    initProps(receipt);\n    receipt.fluctuatingProperties[giftAidHouseNumberPropertyName] = value;\n  };\n  fluctuatingPropertiesHelper.getTransactionGiftAidHouseNumber = function (receipt) {\n    return fluctuatingPropertiesHelper.getTransactionGiftAidValue(receipt, giftAidHouseNumberPropertyName);\n  };\n  fluctuatingPropertiesHelper.setTransactionGiftAidPostalCode = function (receipt, value) {\n    initProps(receipt);\n    receipt.fluctuatingProperties[giftAidPostalCodePropertyName] = value;\n  };\n  var infrasecCTUIDPropertyName = \"Infrasec_CTUID\";\n  fluctuatingPropertiesHelper.setInfrasecCTUID = function (receipt, value) {\n    initProps(receipt);\n    receipt.fluctuatingProperties[infrasecCTUIDPropertyName] = value;\n  };\n  var infrasecCodePropertyName = \"Infrasec_Code\";\n  fluctuatingPropertiesHelper.setInfrasecCode = function (receipt, value) {\n    initProps(receipt);\n    receipt.fluctuatingProperties[infrasecCodePropertyName] = value;\n  };\n  var infrasecRegisterIdPropertyName = \"Infrasec_RegisterId\";\n  fluctuatingPropertiesHelper.setInfrasecRegisterId = function (receipt, value) {\n    initProps(receipt);\n    receipt.fluctuatingProperties[infrasecRegisterIdPropertyName] = value;\n  };\n  var infrasecRequestIdPropertyName = \"Infrasec_RequestId\";\n  fluctuatingPropertiesHelper.setInfrasecRequestId = function (receipt, value) {\n    initProps(receipt);\n    receipt.fluctuatingProperties[infrasecRequestIdPropertyName] = value;\n  };\n  var infrasecOrganisationNumberPropertyName = \"Infrasec_OrganisationNumber\";\n  fluctuatingPropertiesHelper.setInfrasecOrganisationNumber = function (receipt, value) {\n    initProps(receipt);\n    receipt.fluctuatingProperties[infrasecOrganisationNumberPropertyName] = value;\n  };\n  var infrasecCopyCTUIDPropertyName = \"Infrasec_Copy_CTUID\";\n  fluctuatingPropertiesHelper.setInfrasecCopyCTUID = function (receipt, value) {\n    initProps(receipt);\n    receipt.fluctuatingProperties[infrasecCopyCTUIDPropertyName] = value;\n  };\n  var infrasecCopy_CodePropertyName = \"Infrasec_Copy_Code\";\n  fluctuatingPropertiesHelper.setInfrasecCopyCode = function (receipt, value) {\n    initProps(receipt);\n    receipt.fluctuatingProperties[infrasecCopy_CodePropertyName] = value;\n  };\n  fluctuatingPropertiesHelper.getInfrasecCopyCode = function (receipt) {\n    if (!receipt.fluctuatingProperties || !receipt.fluctuatingProperties[infrasecCopy_CodePropertyName]) return;\n    return receipt.fluctuatingProperties[infrasecCopy_CodePropertyName];\n  };\n  var infrasecSequenceNumberPropertyName = \"Infrasec_SequenceNumber\";\n  fluctuatingPropertiesHelper.setInfrasecSequenceNumber = function (receipt, value) {\n    initProps(receipt);\n    receipt.fluctuatingProperties[infrasecSequenceNumberPropertyName] = value;\n  };\n  fluctuatingPropertiesHelper.getInfrasecSequenceNumber = function (receipt) {\n    if (!receipt.fluctuatingProperties || !receipt.fluctuatingProperties[infrasecSequenceNumberPropertyName]) return;\n    return receipt.fluctuatingProperties[infrasecSequenceNumberPropertyName];\n  };\n  fluctuatingPropertiesHelper.getTransactionGiftAidPostalCode = function (receipt) {\n    return fluctuatingPropertiesHelper.getTransactionGiftAidValue(receipt, giftAidPostalCodePropertyName);\n  };\n  fluctuatingPropertiesHelper.getTransactionGiftAidValue = function (receipt, key) {\n    if (!receipt.fluctuatingProperties) return;\n    return receipt.fluctuatingProperties[key];\n  };\n  fluctuatingPropertiesHelper.removeTransactionGiftAidProperties = function (receipt) {\n    fluctuatingPropertiesHelper.removeTransactionGiftAidProperty(receipt, isGiftAidableProperty);\n    fluctuatingPropertiesHelper.removeTransactionGiftAidProperty(receipt, giftAidTitlePropertyName);\n    fluctuatingPropertiesHelper.removeTransactionGiftAidProperty(receipt, giftAidFirstNamePropertyName);\n    fluctuatingPropertiesHelper.removeTransactionGiftAidProperty(receipt, giftAidLastNamePropertyName);\n    fluctuatingPropertiesHelper.removeTransactionGiftAidProperty(receipt, giftAidHouseNumberPropertyName);\n    fluctuatingPropertiesHelper.removeTransactionGiftAidProperty(receipt, giftAidPostalCodePropertyName);\n  };\n  fluctuatingPropertiesHelper.removeTransactionGiftAidProperty = function (receipt, key) {\n    if (!receipt.fluctuatingProperties) return;\n    if (receipt.fluctuatingProperties[key]) receipt.fluctuatingProperties[key] = undefined;\n  };\n  var webshopIdPropertyName = \"webShopId\";\n  fluctuatingPropertiesHelper.setWebshopId = function (item, value) {\n    initProps(item);\n    item.fluctuatingProperties[webshopIdPropertyName] = value;\n  };\n  fluctuatingPropertiesHelper.getWebshopId = function (item) {\n    if (!item.fluctuatingProperties || !item.fluctuatingProperties[webshopIdPropertyName]) return;\n    return item.fluctuatingProperties[webshopIdPropertyName];\n  };\n  var uniqueTransactionId = \"uniqueTransactionId\";\n  fluctuatingPropertiesHelper.setUniqueTransactionId = function (item, value) {\n    initProps(item);\n    item.fluctuatingProperties[uniqueTransactionId] = value;\n  };\n  fluctuatingPropertiesHelper.getUniqueTransactionId = function (item) {\n    if (!item.fluctuatingProperties || !item.fluctuatingProperties[uniqueTransactionId]) return;\n    return item.fluctuatingProperties[uniqueTransactionId];\n  };\n  var voucherResponseCode = \"voucherResponseCode\";\n  fluctuatingPropertiesHelper.setVoucherResponseCode = function (item, value) {\n    initProps(item);\n    item.fluctuatingProperties[voucherResponseCode] = value;\n  };\n  fluctuatingPropertiesHelper.getVoucherResponseCode = function (item) {\n    if (!item.fluctuatingProperties || item.fluctuatingProperties[voucherResponseCode] == undefined) return;\n    return item.fluctuatingProperties[voucherResponseCode];\n  };\n  var voucherBalance = \"voucherBalance\";\n  fluctuatingPropertiesHelper.setVoucherBalance = function (item, value) {\n    initProps(item);\n    item.fluctuatingProperties[voucherBalance] = value;\n  };\n  var voucherExpiryDate = \"voucherExpiryDate\";\n  fluctuatingPropertiesHelper.setVoucherExpiryDate = function (item, value) {\n    initProps(item);\n    item.fluctuatingProperties[voucherExpiryDate] = value;\n  };\n  var voucherDescription = \"voucherDescription\";\n  fluctuatingPropertiesHelper.setVoucherDescription = function (item, value) {\n    initProps(item);\n    item.fluctuatingProperties[voucherDescription] = value;\n  };\n  var returnTransactionLineIdPropertyName = \"Return_TransactionLineId\";\n  fluctuatingPropertiesHelper.setReturnTransactionLineId = function (item, value) {\n    initProps(item);\n    item.fluctuatingProperties[returnTransactionLineIdPropertyName] = value;\n  };\n  function initProps(item) {\n    item.fluctuatingProperties = item.fluctuatingProperties || {};\n  }\n  return fluctuatingPropertiesHelper;\n});\n","\"use strict\";\n\npos.factory(\"fullscreenMode\", function ($document) {\n  var fullscreenMode = {};\n\n  /**\n   * Toggle fullscreen mode\n   */\n  fullscreenMode.toggle = function () {\n    fullscreenMode.isEnabled() ? fullscreenMode.disable() : fullscreenMode.enable();\n  };\n  /**\n   * Check if fullscreen mode is supported\n   */\n  fullscreenMode.isSupported = function () {\n    var fullscreenSupportedDevices = $document[0].exitFullscreen || $document[0].msExitFullscreen || $document[0].mozCancelFullScreen || $document[0].webkitExitFullscreen;\n    return fullscreenSupportedDevices ? true : false;\n  };\n\n  /**\n   * Check if fullscreen mode is enabled\n   */\n  fullscreenMode.isEnabled = function () {\n    var fullscreenElement = $document[0].webkitIsFullScreen || $document[0].msFullscreenElement || $document[0].mozFullScreen || $document[0].fullscreenElement;\n    return fullscreenElement ? true : false;\n  };\n\n  /**\n   * Enable fullscreen mode\n   */\n  fullscreenMode.enable = function () {\n    if ($document[0].documentElement.requestFullscreen) {\n      $document[0].documentElement.requestFullscreen();\n    } else if ($document[0].documentElement.msRequestFullscreen) {\n      $document[0].documentElement.msRequestFullscreen();\n    } else if ($document[0].documentElement.mozRequestFullScreen) {\n      $document[0].documentElement.mozRequestFullScreen();\n    } else if ($document[0].documentElement.webkitRequestFullscreen) {\n      $document[0].documentElement.webkitRequestFullscreen(Element.ALLOW_KEYBOARD_INPUT);\n    }\n  };\n\n  /**\n   * Disable fullscreen mode\n   */\n  fullscreenMode.disable = function () {\n    if ($document[0].exitFullscreen) {\n      $document[0].exitFullscreen();\n    } else if ($document[0].msExitFullscreen) {\n      $document[0].msExitFullscreen();\n    } else if ($document[0].mozCancelFullScreen) {\n      $document[0].mozCancelFullScreen();\n    } else if ($document[0].webkitExitFullscreen) {\n      $document[0].webkitExitFullscreen();\n    }\n  };\n  return fullscreenMode;\n});\n","\"use strict\";\n\npos.directive(\"dddCaptureGlobalInput\", function (inputService, $parse, $rootScope, keypadManager, $state, $document, $timeout) {\n  \"use strict\";\n\n  return {\n    restrict: \"A\",\n    link: function link(scope, ele, attrs) {\n      if (ele[0].nodeName !== \"INPUT\") return;\n      var initializing = true;\n      var attrValue = attrs.onEnter;\n      var attrOnDenominationValue = attrs.onDenomination;\n      var onDenominationFunc = $parse(attrOnDenominationValue);\n      var onDenomination = !onDenominationFunc ? function () {} : function () {\n        onDenominationFunc(scope);\n      };\n      var func = $parse(attrValue);\n      var onEnter = !func ? function () {} : function () {\n        func(scope);\n      };\n\n      // register the global input element on the controller's scope, so we may access it through the controller later\n      scope.globalInput = ele;\n      var handleOnEnter = function handleOnEnter(event) {\n        if ($document[0].activeElement !== ele[0] || event.keyCode !== 13) return;\n        $timeout(onEnter, 0);\n      };\n      var start = function start() {\n        inputService.enableGlobalCapture(ele, onEnter, onDenomination);\n      };\n      var stop = function stop() {\n        inputService.disableGlobalCapture(ele);\n      };\n      var switcher = $rootScope.$watch(function () {\n        var attrValue = attrs.dddCaptureGlobalInput !== \"ddd-capture-global-input\" ? $parse(attrs.dddCaptureGlobalInput)(scope) : true;\n        // enable/disable by looking at attribute value, if keypad is visible or not and whether the input is readonly or not\n        return attrValue && !keypadManager.isVisible() && ele.attr(\"readonly\");\n      }, function (value, prev) {\n        if (value && (!prev || initializing)) start();else if (!value) stop();\n        initializing = false;\n      });\n      ele.on(\"$destroy\", stop);\n      ele.on(\"$destroy\", switcher);\n    }\n  };\n});\n","\"use strict\";\n\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nfunction _regeneratorRuntime() { \"use strict\"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return r; }; var t, r = {}, e = Object.prototype, n = e.hasOwnProperty, o = \"function\" == typeof Symbol ? Symbol : {}, i = o.iterator || \"@@iterator\", a = o.asyncIterator || \"@@asyncIterator\", u = o.toStringTag || \"@@toStringTag\"; function c(t, r, e, n) { return Object.defineProperty(t, r, { value: e, enumerable: !n, configurable: !n, writable: !n }); } try { c({}, \"\"); } catch (t) { c = function c(t, r, e) { return t[r] = e; }; } function h(r, e, n, o) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype); return c(a, \"_invoke\", function (r, e, n) { var o = 1; return function (i, a) { if (3 === o) throw Error(\"Generator is already running\"); if (4 === o) { if (\"throw\" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var u = n.delegate; if (u) { var c = d(u, n); if (c) { if (c === f) continue; return c; } } if (\"next\" === n.method) n.sent = n._sent = n.arg;else if (\"throw\" === n.method) { if (1 === o) throw o = 4, n.arg; n.dispatchException(n.arg); } else \"return\" === n.method && n.abrupt(\"return\", n.arg); o = 3; var h = s(r, e, n); if (\"normal\" === h.type) { if (o = n.done ? 4 : 2, h.arg === f) continue; return { value: h.arg, done: n.done }; } \"throw\" === h.type && (o = 4, n.method = \"throw\", n.arg = h.arg); } }; }(r, n, new Context(o || [])), !0), a; } function s(t, r, e) { try { return { type: \"normal\", arg: t.call(r, e) }; } catch (t) { return { type: \"throw\", arg: t }; } } r.wrap = h; var f = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var l = {}; c(l, i, function () { return this; }); var p = Object.getPrototypeOf, y = p && p(p(x([]))); y && y !== e && n.call(y, i) && (l = y); var v = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(l); function g(t) { [\"next\", \"throw\", \"return\"].forEach(function (r) { c(t, r, function (t) { return this._invoke(r, t); }); }); } function AsyncIterator(t, r) { function e(o, i, a, u) { var c = s(t[o], t, i); if (\"throw\" !== c.type) { var h = c.arg, f = h.value; return f && \"object\" == _typeof(f) && n.call(f, \"__await\") ? r.resolve(f.__await).then(function (t) { e(\"next\", t, a, u); }, function (t) { e(\"throw\", t, a, u); }) : r.resolve(f).then(function (t) { h.value = t, a(h); }, function (t) { return e(\"throw\", t, a, u); }); } u(c.arg); } var o; c(this, \"_invoke\", function (t, n) { function i() { return new r(function (r, o) { e(t, n, r, o); }); } return o = o ? o.then(i, i) : i(); }, !0); } function d(r, e) { var n = e.method, o = r.i[n]; if (o === t) return e.delegate = null, \"throw\" === n && r.i[\"return\"] && (e.method = \"return\", e.arg = t, d(r, e), \"throw\" === e.method) || \"return\" !== n && (e.method = \"throw\", e.arg = new TypeError(\"The iterator does not provide a '\" + n + \"' method\")), f; var i = s(o, r.i, e.arg); if (\"throw\" === i.type) return e.method = \"throw\", e.arg = i.arg, e.delegate = null, f; var a = i.arg; return a ? a.done ? (e[r.r] = a.value, e.next = r.n, \"return\" !== e.method && (e.method = \"next\", e.arg = t), e.delegate = null, f) : a : (e.method = \"throw\", e.arg = new TypeError(\"iterator result is not an object\"), e.delegate = null, f); } function w(t) { this.tryEntries.push(t); } function m(r) { var e = r[4] || {}; e.type = \"normal\", e.arg = t, r[4] = e; } function Context(t) { this.tryEntries = [[-1]], t.forEach(w, this), this.reset(!0); } function x(r) { if (null != r) { var e = r[i]; if (e) return e.call(r); if (\"function\" == typeof r.next) return r; if (!isNaN(r.length)) { var o = -1, a = function e() { for (; ++o < r.length;) if (n.call(r, o)) return e.value = r[o], e.done = !1, e; return e.value = t, e.done = !0, e; }; return a.next = a; } } throw new TypeError(_typeof(r) + \" is not iterable\"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, c(v, \"constructor\", GeneratorFunctionPrototype), c(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction), GeneratorFunction.displayName = c(GeneratorFunctionPrototype, u, \"GeneratorFunction\"), r.isGeneratorFunction = function (t) { var r = \"function\" == typeof t && t.constructor; return !!r && (r === GeneratorFunction || \"GeneratorFunction\" === (r.displayName || r.name)); }, r.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, c(t, u, \"GeneratorFunction\")), t.prototype = Object.create(v), t; }, r.awrap = function (t) { return { __await: t }; }, g(AsyncIterator.prototype), c(AsyncIterator.prototype, a, function () { return this; }), r.AsyncIterator = AsyncIterator, r.async = function (t, e, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(h(t, e, n, o), i); return r.isGeneratorFunction(e) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, g(v), c(v, u, \"Generator\"), c(v, i, function () { return this; }), c(v, \"toString\", function () { return \"[object Generator]\"; }), r.keys = function (t) { var r = Object(t), e = []; for (var n in r) e.unshift(n); return function t() { for (; e.length;) if ((n = e.pop()) in r) return t.value = n, t.done = !1, t; return t.done = !0, t; }; }, r.values = x, Context.prototype = { constructor: Context, reset: function reset(r) { if (this.prev = this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = \"next\", this.arg = t, this.tryEntries.forEach(m), !r) for (var e in this) \"t\" === e.charAt(0) && n.call(this, e) && !isNaN(+e.slice(1)) && (this[e] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0][4]; if (\"throw\" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(r) { if (this.done) throw r; var e = this; function n(t) { a.type = \"throw\", a.arg = r, e.next = t; } for (var o = e.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i[4], u = this.prev, c = i[1], h = i[2]; if (-1 === i[0]) return n(\"end\"), !1; if (!c && !h) throw Error(\"try statement without catch or finally\"); if (null != i[0] && i[0] <= u) { if (u < c) return this.method = \"next\", this.arg = t, n(c), !0; if (u < h) return n(h), !1; } } }, abrupt: function abrupt(t, r) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var n = this.tryEntries[e]; if (n[0] > -1 && n[0] <= this.prev && this.prev < n[2]) { var o = n; break; } } o && (\"break\" === t || \"continue\" === t) && o[0] <= r && r <= o[2] && (o = null); var i = o ? o[4] : {}; return i.type = t, i.arg = r, o ? (this.method = \"next\", this.next = o[2], f) : this.complete(i); }, complete: function complete(t, r) { if (\"throw\" === t.type) throw t.arg; return \"break\" === t.type || \"continue\" === t.type ? this.next = t.arg : \"return\" === t.type ? (this.rval = this.arg = t.arg, this.method = \"return\", this.next = \"end\") : \"normal\" === t.type && r && (this.next = r), f; }, finish: function finish(t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[2] === t) return this.complete(e[4], e[3]), m(e), f; } }, \"catch\": function _catch(t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[0] === t) { var n = e[4]; if (\"throw\" === n.type) { var o = n.arg; m(e); } return o; } } throw Error(\"illegal catch attempt\"); }, delegateYield: function delegateYield(r, e, n) { return this.delegate = { i: x(r), r: e, n: n }, \"next\" === this.method && (this.arg = t), f; } }, r; }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"next\", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"throw\", n); } _next(void 0); }); }; }\npos.controller(\"HeaderCtrl\", function ($scope, $log, $state, $q, Aside, backend, ConnectorService, connectorLockService, fullscreenMode, receipt, clerkLoginService, posConfig, notification, $window, $timeout, versionService, Widgets, ModalService, $translate, sales, eventBus, zreportService, posStorage, keypadManager, voucherModalsService, itemInfoService) {\n  \"use strict\";\n\n  $scope.apiOffline = !backend.api.isOnline;\n  $scope.currentShop = posStorage.get(\"current_shop\");\n  var notificationChildScope = $scope.$new();\n  var armChilScope = $scope.$new();\n  var menuChildScope = $scope.$new();\n  var notificationAside = new Aside(notificationChildScope, {\n    templateUrl: \"views/shared/aside-notifications\"\n  });\n  var armsAside = new Aside(armChilScope, {\n    templateUrl: \"views/shared/aside-armselector\"\n  });\n  var menuAside = new Aside(menuChildScope, {\n    templateUrl: \"views/shared/aside-functions\"\n  });\n  $scope.versionNumber = versionService.getVersion();\n  loadConfig();\n  $scope.widgets = Widgets;\n  $scope.selectedArmDevice = null;\n  $scope.rebootableArmDevice = null;\n  $scope.modal = ModalService;\n\n  // Connector lock: padlock per row in the USB device selection aside.\n  $scope.isConnectorLocked = connectorLockService.isLocked();\n  $scope.$on(\"connectorLock:changed\", function () {\n    $scope.isConnectorLocked = connectorLockService.isLocked();\n  });\n\n  // Only the selected connector row can be locked.\n  $scope.toggleConnectorLock = function ($event, armIndex, connector) {\n    if ($event) $event.stopPropagation();\n    if (!ConnectorService.isSelectedConnector(connector)) return;\n    var device = connector.device;\n    if (!ConnectorService.isLockableDevice(device)) return;\n    if (connectorLockService.isLocked()) {\n      connectorLockService.unlock();\n    } else {\n      connectorLockService.lock(device);\n    }\n    $scope.isConnectorLocked = connectorLockService.isLocked();\n  };\n  $scope.isSelectedConnector = function (connector) {\n    return ConnectorService.isSelectedConnector(connector);\n  };\n  $scope.$watch(function () {\n    return $state.$current.name;\n  }, function (newVal, oldVal) {\n    $scope.widgetsDisabled = $state.includes(\"root.split.payment\") || $state.includes(\"root.login\");\n  });\n  $scope.$watch(function () {\n    return backend.defaultDevice;\n  }, function (index) {\n    $scope.selectedArmDevice = index;\n  });\n  var level = function level(type) {\n    switch (type) {\n      case \"info\":\n        return 1;\n      case \"success\":\n        return 2;\n      case \"warning\":\n        return 3;\n      case \"error\":\n        return 4;\n      default:\n        return 0;\n    }\n  };\n  var max = function max(first, second) {\n    return first > second ? first : second;\n  };\n  var textColor = {\n    0: \"\",\n    1: \"text-info\",\n    2: \"text-success\",\n    3: \"text-warning\",\n    4: \"text-danger\"\n  };\n  $scope.showWidgets = function () {\n    $scope.widgets.showWidgets = true;\n    $(\"#center-content\").addClass(\"center-content--downscale\");\n  };\n  $scope.goToPortal = function () {\n    $window.location = \"DDD_PORTAL_URL_PLACEHOLDER\";\n  };\n  $scope.showSAFT = function () {\n    return $scope.nsaft && $scope.nsaft.values.active;\n  };\n  $scope.printLastReceipt = function () {\n    sales.reprintReceipt();\n  };\n  $scope.printLastZReport = function () {\n    zreportService.reprintLastZReport().then(function () {\n      clerkLoginService.logout();\n      $state.go(\"root.login\");\n    })[\"catch\"](function (err) {\n      return $translate(\"error/print last zreport\").then(function (translation) {\n        notification.pop(\"error\", translation);\n        $log.error(err);\n      });\n    });\n  };\n  $scope.printPicklist = function () {\n    $scope.$state.go(\"root.split.picklist\");\n  };\n  $scope.gotoCashStatement = function () {\n    var canReconsile = posConfig.getPaymentTypeConfigs().some(function (o) {\n      return o.shouldReconcile;\n    });\n    if (canReconsile) {\n      $scope.$state.go(\"root.split.cashstatement\");\n    } else {\n      $translate([\"error/nothing-to-reconsile\"]).then(function (translation) {\n        return notification.pop(\"error\", translation[\"error/nothing-to-reconsile\"]);\n      });\n    }\n  };\n  $scope.reloadApplication = function () {\n    location.reload();\n  };\n  $scope.notificationMessages = notification.getMessages();\n  /**\n   * Used in notification aside to decide the correct class to use for a message\n   * @param  {Object} message A notification message with type\n   * @return {string}         A bootstrap class to decide the color of the notification element\n   */\n  $scope.getNotificationClass = function (message) {\n    return message.type === \"error\" ? \"alert-danger\" : \"alert-\" + message.type;\n  };\n  $scope.getEnvelopeColor = function () {\n    var maxLevel = 0;\n    angular.forEach($scope.notificationMessages, function (message) {\n      maxLevel = max(maxLevel, level(message.type));\n    });\n    return textColor[maxLevel];\n  };\n  $scope.removeNotificationMessage = function (message) {\n    notification.removeMessage(message);\n  };\n  $scope.notify = function (message) {\n    notification.notify(message);\n  };\n  $scope.clearAllNotifications = function () {\n    notification.clearMessages();\n  };\n  $scope.clerkLoginService = clerkLoginService;\n  $scope.$on(\"showLeftAside\", function () {\n    $scope.selectedAside = \"showLeftAside\";\n\n    // Hide active instances\n    notificationAside.isShown() && notificationAside.hide();\n    armsAside.isShown() && armsAside.hide();\n    menuAside.isShown() ? menuAside.hide() : menuAside.show();\n  });\n  $scope.$on(\"showRightAsideNotificationCenter\", function () {\n    $scope.selectedAside = \"showRightAsideNotificationCenter\";\n\n    // Hide active instances\n    menuAside.isShown() && menuAside.hide();\n    armsAside.isShown() && armsAside.hide();\n    notificationAside.isShown() ? notificationAside.hide() : notificationAside.show();\n  });\n\n  /**\n   *  Fullscreen toggle\n   */\n\n  $scope.toggleFullscreenMode = function () {\n    fullscreenMode.toggle();\n  };\n  $scope.isFullscreen = false; // Fullscreen will always be false by default\n\n  $scope.$watch(function () {\n    return fullscreenMode.isEnabled();\n  }, function (isEnabled) {\n    $scope.isFullscreen = isEnabled;\n  });\n  $scope.$on(\"showRightAsideArmSelector\", function () {\n    $scope.selectedAside = \"showRightAsideArmSelector\";\n    $scope.connectors = ConnectorService.getConnectors();\n\n    // Hide active instances\n    notificationAside.isShown() && notificationAside.hide();\n    menuAside.isShown() && menuAside.hide();\n    armsAside.isShown() ? armsAside.hide() : armsAside.show();\n  });\n  $scope.$on(\"device:offline\", function (event, device) {\n    if (device.isApi) $scope.apiOffline = true;\n  });\n  $scope.$on(\"device:retry:success\", function (event, device) {\n    if (device.isApi) {\n      $scope.apiOffline = false;\n      $scope.apiConnecting = false;\n    }\n  });\n  $scope.$on(\"device:retry:start\", function (event, device) {\n    if (device.isApi) $scope.apiConnecting = true;\n  });\n  $scope.$on(\"device:retry:failed\", function (event, device) {\n    if (device.isApi) $scope.apiConnecting = false;\n  });\n  $scope.$watch(function () {\n    return notificationAside.isShown() || menuAside.isShown() || armsAside.isShown();\n  }, function (n, o) {\n    if (!n) $scope.selectedAside = \"\";\n  });\n\n  // Get connector list\n  $scope.connectors = ConnectorService.getConnectors();\n\n  // Filter connectors\n  $scope.filterConnectors = ConnectorService.filterConnectors;\n\n  // Selected connector comparator\n  $scope.connectorIsSelected = function (connectorIndex, connector) {\n    var deviceIndex = connector && connector.deviceIndex != null ? connector.deviceIndex : connectorIndex;\n    if (connector && deviceIndex == $scope.selectedArmDevice) {\n      localStorage.setItem(\"selectedTerminalType\", connector.terminalType);\n    }\n    return ConnectorService.connectorIsSelected({\n      index: deviceIndex,\n      connector: connector\n    }, $scope.selectedArmDevice);\n  };\n  $scope.$watch(function () {\n    return clerkLoginService.currentUser();\n  }, function (clerk) {\n    if (clerk) $scope.clerk = clerk.fullName;else $scope.clerk = null;\n  });\n  $scope.$watch(function () {\n    return backend.defaultDevice;\n  }, function (index) {\n    var armDevice = backend.devices[index];\n    $scope.defaultArm = armDevice ? armDevice : {\n      deviceName: \"Select pay station\"\n    };\n    if ($scope.defaultArm.id == 999) {\n      $translate([\"error/offline-device-header\", \"error/offline-device-notify-body\"]).then(function (translations) {\n        notification.notify(\"warning\", translations[\"error/offline-device-header\"], translations[\"error/offline-device-notify-body\"]);\n      });\n      $scope.defaultConnectorWarningModal.isVisible = true;\n    }\n  });\n  $scope.$watch(function () {\n    var payments = receipt.getReceipt().payments;\n    return angular.isArray(payments) ? payments.length : 0;\n  }, function (length) {\n    var payments = receipt.getReceipt().payments;\n    for (var i = length; i > 0; i--) {\n      var index = i - 1;\n      if (typeof payments[index].paymentDeviceIndex === \"number\") {\n        // Automatic switch after payment; blocked by connector lock when enabled.\n        backend.setDefaultDevice(payments[index].paymentDeviceIndex);\n        break;\n      }\n    }\n    $scope.disableSelection = length > 0;\n  });\n  $scope.setDefaultArm = function (armIndex) {\n    // manual: true unlocks when picking a different connector; same device keeps lock.\n    backend.setDefaultDevice(armIndex, {\n      manual: true\n    });\n  };\n  $scope.rebootArm = function (armIndex) {\n    $translate([\"warning/reboot-connector\"]).then(function (translations) {\n      notification.notify(\"warning\", translations[\"warning/reboot-connector\"]);\n    });\n    var armDevice = backend.devices[armIndex];\n    $scope.rebootableArmDevice = armDevice;\n    $scope.rebootConnectorWarningModal.description = armDevice.deviceName;\n    $scope.rebootConnectorWarningModal.isVisible = true;\n  };\n  $scope.hideAside = function () {\n    $timeout(function () {\n      notificationAside.hide();\n      armsAside.hide();\n      menuAside.hide();\n    }, 200);\n  };\n  var managerVerificationDeferred;\n  $scope.managerVerificationModal = {\n    title: \"manager/verification/title\",\n    description: \"manager/verification/clerkid\",\n    descriptionPlaceholderValues: {},\n    isVisible: false,\n    hasTextInput: true,\n    isPassword: false,\n    isManagerModal: true,\n    allowedCharacters: \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\",\n    inputMin: 1,\n    inputMax: 9,\n    buttons: [{\n      label: \"manager/verification/accept\",\n      type: \"success\",\n      isDefault: true,\n      closes: false,\n      validateText: true,\n      action: function action(text) {\n        managerVerificationDeferred.resolve(text || \"\");\n        keypadManager.hide();\n      }\n    }, {\n      label: \"manager/verification/reject\",\n      type: \"danger\",\n      isDefault: false,\n      closes: true,\n      validateText: false,\n      action: function action() {\n        managerVerificationDeferred.reject();\n        keypadManager.hide();\n      }\n    }]\n  };\n  var rangedValueInputDeferred;\n  $scope.rangedValueInputModal = {\n    isVisible: false,\n    isValueInput: true,\n    minValueInput: 0.0,\n    maxValueInput: 0.0,\n    hasTextInput: true,\n    buttons: [{\n      label: \"button/ok\",\n      type: \"success\",\n      isDefault: true,\n      closes: true,\n      action: function action(text) {\n        rangedValueInputDeferred.resolve(text || \"\");\n        keypadManager.hide();\n      }\n    }, {\n      label: \"button/cancel\",\n      type: \"danger\",\n      isDefault: false,\n      closes: true,\n      cancel: true,\n      validateText: false,\n      action: function action() {\n        rangedValueInputDeferred.reject();\n        keypadManager.hide();\n      }\n    }]\n  };\n  var pinDeferred;\n  $scope.pinModal = {\n    isVisible: false,\n    hasTextInput: true,\n    useNumpad: true,\n    buttons: [{\n      label: \"button/ok\",\n      type: \"success\",\n      isDefault: true,\n      closes: true,\n      action: function action(text) {\n        pinDeferred.resolve(text || \"\");\n        keypadManager.hide();\n      }\n    }, {\n      label: \"button/cancel\",\n      type: \"danger\",\n      isDefault: false,\n      closes: true,\n      cancel: true,\n      validateText: false,\n      action: function action() {\n        pinDeferred.reject();\n        keypadManager.hide();\n      }\n    }]\n  };\n  var clerkVerificationDeferred;\n  $scope.clerkVerificationModal = {\n    title: \"clerk\",\n    description: \"manager/verification/clerkid\",\n    descriptionPlaceholderValues: {},\n    isVisible: false,\n    hasTextInput: true,\n    isPassword: false,\n    isClerkModal: true,\n    allowedCharacters: \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\",\n    inputMin: 1,\n    inputMax: 9,\n    buttons: [{\n      label: \"manager/verification/accept\",\n      type: \"success\",\n      isDefault: true,\n      closes: false,\n      validateText: true,\n      action: function action(text) {\n        clerkVerificationDeferred.resolve(text || \"\");\n        keypadManager.hide();\n      }\n    }, {\n      label: \"manager/verification/reject\",\n      type: \"danger\",\n      isDefault: false,\n      closes: true,\n      validateText: false,\n      action: function action() {\n        clerkVerificationDeferred.reject();\n        keypadManager.hide();\n      }\n    }]\n  };\n  $scope.defaultConnectorWarningModal = {\n    title: \"error/offline-device-header\",\n    description: \"error/offline-device-notify-body\",\n    descriptionPlaceholderValues: {},\n    isVisible: false,\n    hasTextInput: false,\n    buttons: [{\n      label: \"button/ok\",\n      type: \"success\",\n      isDefault: true,\n      closes: true,\n      action: function action() {}\n    }]\n  };\n  $scope.rebootConnectorWarningModal = {\n    title: \"warning/update-connector\",\n    isVisible: false,\n    hasTextInput: false,\n    buttons: [{\n      label: \"button/ok\",\n      type: \"success\",\n      isDefault: false,\n      closes: false,\n      action: function () {\n        var _action = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee() {\n          return _regeneratorRuntime().wrap(function _callee$(_context) {\n            while (1) switch (_context.prev = _context.next) {\n              case 0:\n                if (!$scope.rebootableArmDevice) {\n                  _context.next = 6;\n                  break;\n                }\n                $scope.rebootingConnectorWarningModal.isVisible = true;\n                _context.next = 4;\n                return backend.rebootConnector($scope.rebootableArmDevice, posConfig.shopId, posConfig.tenantId, posConfig.posId);\n              case 4:\n                $scope.rebootingConnectorWarningModal.isVisible = false;\n                $scope.rebootConnectorRecommendationWarningModal.isVisible = true;\n              case 6:\n              case \"end\":\n                return _context.stop();\n            }\n          }, _callee);\n        }));\n        function action() {\n          return _action.apply(this, arguments);\n        }\n        return action;\n      }()\n    }, {\n      label: \"button/cancel\",\n      type: \"danger\",\n      isDefault: true,\n      closes: true,\n      action: function action() {}\n    }]\n  };\n  $scope.rebootConnectorRecommendationWarningModal = {\n    title: \"warning/update-connector-completed\",\n    description: \"warning/update-connector-completed-recommendation\",\n    descriptionPlaceholderValues: {},\n    isVisible: false,\n    hasTextInput: false,\n    buttons: [{\n      label: \"button/ok\",\n      type: \"success\",\n      isDefault: true,\n      closes: true,\n      action: function action() {\n        $scope.rebootConnectorWarningModal.isVisible = false;\n      }\n    }]\n  };\n  $scope.rebootingConnectorWarningModal = {\n    title: \"warning/update-connector-rebooting\",\n    description: \"warning/update-connector-description\",\n    descriptionPlaceholderValues: {},\n    isVisible: false,\n    hasTextInput: false\n  };\n  eventBus.subscribe(eventBus.events.pos.managerVerificationRequested, $scope, function () {\n    managerVerificationDeferred = $q.defer();\n    $scope.managerVerificationModal = _objectSpread(_objectSpread({}, $scope.managerVerificationModal), {}, {\n      title: \"manager/verification/title\",\n      isManagerModal: true,\n      description: \"manager/verification/clerkid\",\n      inputMin: 1,\n      isVisible: true\n    });\n    setTimeout(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee2() {\n      return _regeneratorRuntime().wrap(function _callee2$(_context2) {\n        while (1) switch (_context2.prev = _context2.next) {\n          case 0:\n            eventBus.notify(eventBus.events.pos.modalInputFocusRequested);\n          case 1:\n          case \"end\":\n            return _context2.stop();\n        }\n      }, _callee2);\n    })), 10);\n    managerVerificationDeferred.promise.then(function (clerkNo) {\n      managerVerificationDeferred = $q.defer();\n      $scope.managerVerificationModal = _objectSpread(_objectSpread({}, $scope.managerVerificationModal), {}, {\n        title: \"manager/verification/title\",\n        isManagerModal: true,\n        description: \"manager/verification/pin\",\n        inputMin: 0,\n        isPassword: true\n      });\n      setTimeout(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee3() {\n        return _regeneratorRuntime().wrap(function _callee3$(_context3) {\n          while (1) switch (_context3.prev = _context3.next) {\n            case 0:\n              eventBus.notify(eventBus.events.pos.modalInputFocusRequested);\n            case 1:\n            case \"end\":\n              return _context3.stop();\n          }\n        }, _callee3);\n      })), 10);\n      keypadManager.isPassword(true);\n      managerVerificationDeferred.promise.then(function (pin) {\n        eventBus.notify(eventBus.events.pos.managerVerificationResponse, {\n          clerkNo: clerkNo,\n          pin: pin\n        });\n        resetManagerVerification();\n      }, function () {\n        return resetManagerVerification();\n      });\n    }, function () {\n      return resetManagerVerification();\n    });\n  });\n  var resetManagerVerification = function resetManagerVerification() {\n    $scope.managerVerificationModal = _objectSpread(_objectSpread({}, $scope.managerVerificationModal), {}, {\n      title: \"manager/verification/title\",\n      isManagerModal: true,\n      isVisible: false,\n      isPassword: false\n    });\n    keypadManager.isPassword(false);\n    eventBus.notify(eventBus.events.pos.managerVerificationResponse, null);\n  };\n  eventBus.subscribe(eventBus.events.pos.clerkVerificationRequested, $scope, function () {\n    clerkVerificationDeferred = $q.defer();\n    $scope.clerkVerificationModal = _objectSpread(_objectSpread({}, $scope.clerkVerificationModal), {}, {\n      title: \"clerk/verification/title\",\n      isClerkModal: true,\n      description: \"clerk/verification/clerkid\",\n      inputMin: 1,\n      isVisible: true\n    });\n    setTimeout(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee4() {\n      return _regeneratorRuntime().wrap(function _callee4$(_context4) {\n        while (1) switch (_context4.prev = _context4.next) {\n          case 0:\n            eventBus.notify(eventBus.events.pos.modalInputFocusRequested);\n          case 1:\n          case \"end\":\n            return _context4.stop();\n        }\n      }, _callee4);\n    })), 10);\n    clerkVerificationDeferred.promise.then(function (clerkNo) {\n      clerkLoginService.getClerk(clerkNo).then(function (clerk) {\n        if (!clerk.password || clerk.password == \"\") {\n          eventBus.notify(eventBus.events.pos.clerkVerificationResponse, {\n            clerkNo: clerkNo,\n            pin: \"\"\n          });\n          resetClerkVerification(500);\n          return;\n        }\n        clerkVerificationDeferred = $q.defer();\n        $scope.clerkVerificationModal = _objectSpread(_objectSpread({}, $scope.clerkVerificationModal), {}, {\n          title: \"clerk/verification/title\",\n          isClerkModal: true,\n          description: \"clerk/verification/pin\",\n          inputMin: 0,\n          isPassword: true\n        });\n        setTimeout(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee5() {\n          return _regeneratorRuntime().wrap(function _callee5$(_context5) {\n            while (1) switch (_context5.prev = _context5.next) {\n              case 0:\n                eventBus.notify(eventBus.events.pos.modalInputFocusRequested);\n              case 1:\n              case \"end\":\n                return _context5.stop();\n            }\n          }, _callee5);\n        })), 10);\n        setTimeout(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee6() {\n          return _regeneratorRuntime().wrap(function _callee6$(_context6) {\n            while (1) switch (_context6.prev = _context6.next) {\n              case 0:\n                eventBus.notify(eventBus.events.pos.modalInputFocusRequested);\n              case 1:\n              case \"end\":\n                return _context6.stop();\n            }\n          }, _callee6);\n        })), 500);\n        keypadManager.isPassword(true);\n        clerkVerificationDeferred.promise.then(function (pin) {\n          eventBus.notify(eventBus.events.pos.clerkVerificationResponse, {\n            clerkNo: clerkNo,\n            pin: pin\n          });\n          resetClerkVerification(500);\n        }, function () {\n          return resetClerkVerification();\n        });\n      }, function () {\n        $translate(\"toast/ invalid clerk\").then(function (translation) {\n          notification.pop(\"error\", translation);\n          resetClerkVerification();\n        });\n      });\n    }, function () {\n      return resetClerkVerification();\n    });\n  });\n  var resetClerkVerification = function resetClerkVerification() {\n    var timeout = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n    $scope.clerkVerificationModal = _objectSpread(_objectSpread({}, $scope.clerkVerificationModal), {}, {\n      title: \"clerk/verification/title\",\n      isClerkModal: true,\n      isVisible: false,\n      isPassword: false\n    });\n    keypadManager.isPassword(false);\n    setTimeout(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee7() {\n      return _regeneratorRuntime().wrap(function _callee7$(_context7) {\n        while (1) switch (_context7.prev = _context7.next) {\n          case 0:\n            eventBus.notify(eventBus.events.pos.clerkVerificationResponse, null);\n          case 1:\n          case \"end\":\n            return _context7.stop();\n        }\n      }, _callee7);\n    })), timeout);\n  };\n  eventBus.subscribe(eventBus.events.pos.rangedValueInputRequested, $scope, function (ev, params) {\n    rangedValueInputDeferred = $q.defer();\n    $scope.rangedValueInputModal.isVisible = true;\n    $scope.rangedValueInputModal.title = params.title;\n    $scope.rangedValueInputModal.minValueInput = params.minValueInput;\n    $scope.rangedValueInputModal.maxValueInput = params.maxValueInput;\n    if (params.prefilledValue) {\n      $scope.rangedValueInputModal.prefilledValue = params.prefilledValue;\n    }\n    setTimeout(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee8() {\n      return _regeneratorRuntime().wrap(function _callee8$(_context8) {\n        while (1) switch (_context8.prev = _context8.next) {\n          case 0:\n            eventBus.notify(eventBus.events.pos.modalInputFocusRequested);\n          case 1:\n          case \"end\":\n            return _context8.stop();\n        }\n      }, _callee8);\n    })), 10);\n    setTimeout(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee9() {\n      return _regeneratorRuntime().wrap(function _callee9$(_context9) {\n        while (1) switch (_context9.prev = _context9.next) {\n          case 0:\n            eventBus.notify(eventBus.events.pos.modalInputFocusRequested);\n          case 1:\n          case \"end\":\n            return _context9.stop();\n        }\n      }, _callee9);\n    })), 500);\n    rangedValueInputDeferred.promise.then(function (value) {\n      return eventBus.notify(eventBus.events.pos.rangedValueInputResponse, value);\n    }, function () {\n      return eventBus.notify(eventBus.events.pos.rangedValueInputResponse, null);\n    });\n  });\n  eventBus.subscribe(eventBus.events.pos.pinRequested, $scope, function (ev, params) {\n    pinDeferred = $q.defer();\n    $scope.pinModal.isVisible = true;\n    $scope.pinModal.title = params.title;\n    setTimeout(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee0() {\n      return _regeneratorRuntime().wrap(function _callee0$(_context0) {\n        while (1) switch (_context0.prev = _context0.next) {\n          case 0:\n            eventBus.notify(eventBus.events.pos.modalInputFocusRequested);\n          case 1:\n          case \"end\":\n            return _context0.stop();\n        }\n      }, _callee0);\n    })), 10);\n    setTimeout(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee1() {\n      return _regeneratorRuntime().wrap(function _callee1$(_context1) {\n        while (1) switch (_context1.prev = _context1.next) {\n          case 0:\n            eventBus.notify(eventBus.events.pos.modalInputFocusRequested);\n          case 1:\n          case \"end\":\n            return _context1.stop();\n        }\n      }, _callee1);\n    })), 500);\n    pinDeferred.promise.then(function (pin) {\n      return eventBus.notify(eventBus.events.pos.pinResponse, pin);\n    }, function () {\n      return eventBus.notify(eventBus.events.pos.pinResponse, null);\n    });\n  });\n\n  /*****************************************************************\n   * Clean Cash Modal\n   *****************************************************************/\n  var cleanCashModalTitle, cleanCashModalDangerButton, cleanCashModalSuccessButton, cleanCashModalDescription;\n  GetTranslations();\n  function GetTranslations() {\n    $translate([\"connectorchange/cleanCashModalTitle\", \"connectorchange/cleanCashModalDescription\", \"connectorchange/cleanCashModalSuccessButton\", \"connectorchange/cleanCashModalDangerButton\"]).then(function (translations) {\n      cleanCashModalTitle = translations[\"connectorchange/cleanCashModalTitle\"];\n      cleanCashModalDangerButton = translations[\"connectorchange/cleanCashModalDangerButton\"];\n      cleanCashModalDescription = translations[\"connectorchange/cleanCashModalDescription\"];\n      cleanCashModalSuccessButton = translations[\"connectorchange/cleanCashModalSuccessButton\"];\n    })[\"finally\"](function () {\n      $scope.cleanCashChangeConnectorModal = {\n        title: cleanCashModalTitle,\n        description: cleanCashModalDescription,\n        buttons: [{\n          label: cleanCashModalDangerButton,\n          type: \"danger\",\n          closes: true,\n          action: function action() {\n            clerkLoginService.logout();\n            $state.go(\"root.login\");\n          }\n        }, {\n          label: cleanCashModalSuccessButton,\n          type: \"success\",\n          closes: true,\n          action: function action() {\n            clerkLoginService.toggleCleanCash(false);\n          }\n        }]\n      };\n    });\n  }\n  function loadConfig() {\n    $scope.posNumber = posConfig.posId;\n    $scope.shopId = posConfig.shopId;\n    $scope.posId = posConfig.posId;\n    $scope.nsaft = posConfig.getShopFeatures().norwegianFiscalisation;\n  }\n  eventBus.subscribe(eventBus.events.pos.newConfig, $scope, loadConfig);\n  $scope.voucherModal = voucherModalsService.getVoucherModal();\n  $scope.deleteConfirmModal = voucherModalsService.getDeleteConfirmModal();\n  $scope.actionModal = voucherModalsService.getActionModal();\n  $scope.itemInfoModal = itemInfoService.getItemInfoModal();\n});\n","\"use strict\";\n\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _regeneratorRuntime() { \"use strict\"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return r; }; var t, r = {}, e = Object.prototype, n = e.hasOwnProperty, o = \"function\" == typeof Symbol ? Symbol : {}, i = o.iterator || \"@@iterator\", a = o.asyncIterator || \"@@asyncIterator\", u = o.toStringTag || \"@@toStringTag\"; function c(t, r, e, n) { return Object.defineProperty(t, r, { value: e, enumerable: !n, configurable: !n, writable: !n }); } try { c({}, \"\"); } catch (t) { c = function c(t, r, e) { return t[r] = e; }; } function h(r, e, n, o) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype); return c(a, \"_invoke\", function (r, e, n) { var o = 1; return function (i, a) { if (3 === o) throw Error(\"Generator is already running\"); if (4 === o) { if (\"throw\" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var u = n.delegate; if (u) { var c = d(u, n); if (c) { if (c === f) continue; return c; } } if (\"next\" === n.method) n.sent = n._sent = n.arg;else if (\"throw\" === n.method) { if (1 === o) throw o = 4, n.arg; n.dispatchException(n.arg); } else \"return\" === n.method && n.abrupt(\"return\", n.arg); o = 3; var h = s(r, e, n); if (\"normal\" === h.type) { if (o = n.done ? 4 : 2, h.arg === f) continue; return { value: h.arg, done: n.done }; } \"throw\" === h.type && (o = 4, n.method = \"throw\", n.arg = h.arg); } }; }(r, n, new Context(o || [])), !0), a; } function s(t, r, e) { try { return { type: \"normal\", arg: t.call(r, e) }; } catch (t) { return { type: \"throw\", arg: t }; } } r.wrap = h; var f = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var l = {}; c(l, i, function () { return this; }); var p = Object.getPrototypeOf, y = p && p(p(x([]))); y && y !== e && n.call(y, i) && (l = y); var v = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(l); function g(t) { [\"next\", \"throw\", \"return\"].forEach(function (r) { c(t, r, function (t) { return this._invoke(r, t); }); }); } function AsyncIterator(t, r) { function e(o, i, a, u) { var c = s(t[o], t, i); if (\"throw\" !== c.type) { var h = c.arg, f = h.value; return f && \"object\" == _typeof(f) && n.call(f, \"__await\") ? r.resolve(f.__await).then(function (t) { e(\"next\", t, a, u); }, function (t) { e(\"throw\", t, a, u); }) : r.resolve(f).then(function (t) { h.value = t, a(h); }, function (t) { return e(\"throw\", t, a, u); }); } u(c.arg); } var o; c(this, \"_invoke\", function (t, n) { function i() { return new r(function (r, o) { e(t, n, r, o); }); } return o = o ? o.then(i, i) : i(); }, !0); } function d(r, e) { var n = e.method, o = r.i[n]; if (o === t) return e.delegate = null, \"throw\" === n && r.i[\"return\"] && (e.method = \"return\", e.arg = t, d(r, e), \"throw\" === e.method) || \"return\" !== n && (e.method = \"throw\", e.arg = new TypeError(\"The iterator does not provide a '\" + n + \"' method\")), f; var i = s(o, r.i, e.arg); if (\"throw\" === i.type) return e.method = \"throw\", e.arg = i.arg, e.delegate = null, f; var a = i.arg; return a ? a.done ? (e[r.r] = a.value, e.next = r.n, \"return\" !== e.method && (e.method = \"next\", e.arg = t), e.delegate = null, f) : a : (e.method = \"throw\", e.arg = new TypeError(\"iterator result is not an object\"), e.delegate = null, f); } function w(t) { this.tryEntries.push(t); } function m(r) { var e = r[4] || {}; e.type = \"normal\", e.arg = t, r[4] = e; } function Context(t) { this.tryEntries = [[-1]], t.forEach(w, this), this.reset(!0); } function x(r) { if (null != r) { var e = r[i]; if (e) return e.call(r); if (\"function\" == typeof r.next) return r; if (!isNaN(r.length)) { var o = -1, a = function e() { for (; ++o < r.length;) if (n.call(r, o)) return e.value = r[o], e.done = !1, e; return e.value = t, e.done = !0, e; }; return a.next = a; } } throw new TypeError(_typeof(r) + \" is not iterable\"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, c(v, \"constructor\", GeneratorFunctionPrototype), c(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction), GeneratorFunction.displayName = c(GeneratorFunctionPrototype, u, \"GeneratorFunction\"), r.isGeneratorFunction = function (t) { var r = \"function\" == typeof t && t.constructor; return !!r && (r === GeneratorFunction || \"GeneratorFunction\" === (r.displayName || r.name)); }, r.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, c(t, u, \"GeneratorFunction\")), t.prototype = Object.create(v), t; }, r.awrap = function (t) { return { __await: t }; }, g(AsyncIterator.prototype), c(AsyncIterator.prototype, a, function () { return this; }), r.AsyncIterator = AsyncIterator, r.async = function (t, e, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(h(t, e, n, o), i); return r.isGeneratorFunction(e) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, g(v), c(v, u, \"Generator\"), c(v, i, function () { return this; }), c(v, \"toString\", function () { return \"[object Generator]\"; }), r.keys = function (t) { var r = Object(t), e = []; for (var n in r) e.unshift(n); return function t() { for (; e.length;) if ((n = e.pop()) in r) return t.value = n, t.done = !1, t; return t.done = !0, t; }; }, r.values = x, Context.prototype = { constructor: Context, reset: function reset(r) { if (this.prev = this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = \"next\", this.arg = t, this.tryEntries.forEach(m), !r) for (var e in this) \"t\" === e.charAt(0) && n.call(this, e) && !isNaN(+e.slice(1)) && (this[e] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0][4]; if (\"throw\" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(r) { if (this.done) throw r; var e = this; function n(t) { a.type = \"throw\", a.arg = r, e.next = t; } for (var o = e.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i[4], u = this.prev, c = i[1], h = i[2]; if (-1 === i[0]) return n(\"end\"), !1; if (!c && !h) throw Error(\"try statement without catch or finally\"); if (null != i[0] && i[0] <= u) { if (u < c) return this.method = \"next\", this.arg = t, n(c), !0; if (u < h) return n(h), !1; } } }, abrupt: function abrupt(t, r) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var n = this.tryEntries[e]; if (n[0] > -1 && n[0] <= this.prev && this.prev < n[2]) { var o = n; break; } } o && (\"break\" === t || \"continue\" === t) && o[0] <= r && r <= o[2] && (o = null); var i = o ? o[4] : {}; return i.type = t, i.arg = r, o ? (this.method = \"next\", this.next = o[2], f) : this.complete(i); }, complete: function complete(t, r) { if (\"throw\" === t.type) throw t.arg; return \"break\" === t.type || \"continue\" === t.type ? this.next = t.arg : \"return\" === t.type ? (this.rval = this.arg = t.arg, this.method = \"return\", this.next = \"end\") : \"normal\" === t.type && r && (this.next = r), f; }, finish: function finish(t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[2] === t) return this.complete(e[4], e[3]), m(e), f; } }, \"catch\": function _catch(t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[0] === t) { var n = e[4]; if (\"throw\" === n.type) { var o = n.arg; m(e); } return o; } } throw Error(\"illegal catch attempt\"); }, delegateYield: function delegateYield(r, e, n) { return this.delegate = { i: x(r), r: e, n: n }, \"next\" === this.method && (this.arg = t), f; } }, r; }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"next\", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"throw\", n); } _next(void 0); }); }; }\n/* checks health for pos systems every 30 seconds to determine if\n the POS can operate normally. */\npos.factory(\"healthChecker\", function ($rootScope, $translate, backendHelper, $interval, notification) {\n  var self = {\n    checkHealth: function () {\n      var _checkHealth = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee() {\n        var device, random, result;\n        return _regeneratorRuntime().wrap(function _callee$(_context) {\n          while (1) switch (_context.prev = _context.next) {\n            case 0:\n              device = {\n                isApi: true\n              };\n              random = Math.floor(Math.random() * 1000000000);\n              _context.next = 4;\n              return backendHelper.backend.api.get(\"isOnline/?\" + random);\n            case 4:\n              result = _context.sent;\n              if (result.data) {\n                _context.next = 14;\n                break;\n              }\n              // if we return false from the isOnline endpoint some services are down.\n              $rootScope.$broadcast(\"device:offline\", device);\n              _context.t0 = notification;\n              _context.next = 10;\n              return $translate(\"toast/healthCheckIssues\");\n            case 10:\n              _context.t1 = _context.sent;\n              _context.t0.pop.call(_context.t0, \"warning\", \"POS services\", _context.t1);\n              _context.next = 15;\n              break;\n            case 14:\n              $rootScope.$broadcast(\"device:retry:success\", device);\n            case 15:\n            case \"end\":\n              return _context.stop();\n          }\n        }, _callee);\n      }));\n      function checkHealth() {\n        return _checkHealth.apply(this, arguments);\n      }\n      return checkHealth;\n    }(),\n    init: function init() {\n      // do the checkhealth every 30 seconds\n      $interval(this.checkHealth, 30000);\n    }\n  };\n  return self;\n});\n","\"use strict\";\n\n/* Tracks now long a user has been idle.  secondsIdle can be polled \n   at any time to know how long user has been idle. */\npos.factory(\"idleChecker\", [function () {\n  var self = {\n    idleTime: moment(new Date()).add(10, \"minutes\"),\n    isIdle: function isIdle() {\n      return moment(new Date()) >= self.idleTime;\n    },\n    reset: function reset() {\n      self.idleTime = moment(new Date()).add(10, \"minutes\");\n    },\n    init: function init() {\n      $(document).on(\"keydown\", resetIdleTime);\n      $(document).on(\"keypress\", resetIdleTime);\n      $(document).on(\"mousedown\", resetIdleTime);\n      $(document).on(\"mousemove\", resetIdleTime);\n    }\n  };\n  function resetIdleTime(event) {\n    self.reset();\n  }\n  return self;\n}]);\n","\"use strict\";\n\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _regeneratorRuntime() { \"use strict\"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return r; }; var t, r = {}, e = Object.prototype, n = e.hasOwnProperty, o = \"function\" == typeof Symbol ? Symbol : {}, i = o.iterator || \"@@iterator\", a = o.asyncIterator || \"@@asyncIterator\", u = o.toStringTag || \"@@toStringTag\"; function c(t, r, e, n) { return Object.defineProperty(t, r, { value: e, enumerable: !n, configurable: !n, writable: !n }); } try { c({}, \"\"); } catch (t) { c = function c(t, r, e) { return t[r] = e; }; } function h(r, e, n, o) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype); return c(a, \"_invoke\", function (r, e, n) { var o = 1; return function (i, a) { if (3 === o) throw Error(\"Generator is already running\"); if (4 === o) { if (\"throw\" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var u = n.delegate; if (u) { var c = d(u, n); if (c) { if (c === f) continue; return c; } } if (\"next\" === n.method) n.sent = n._sent = n.arg;else if (\"throw\" === n.method) { if (1 === o) throw o = 4, n.arg; n.dispatchException(n.arg); } else \"return\" === n.method && n.abrupt(\"return\", n.arg); o = 3; var h = s(r, e, n); if (\"normal\" === h.type) { if (o = n.done ? 4 : 2, h.arg === f) continue; return { value: h.arg, done: n.done }; } \"throw\" === h.type && (o = 4, n.method = \"throw\", n.arg = h.arg); } }; }(r, n, new Context(o || [])), !0), a; } function s(t, r, e) { try { return { type: \"normal\", arg: t.call(r, e) }; } catch (t) { return { type: \"throw\", arg: t }; } } r.wrap = h; var f = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var l = {}; c(l, i, function () { return this; }); var p = Object.getPrototypeOf, y = p && p(p(x([]))); y && y !== e && n.call(y, i) && (l = y); var v = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(l); function g(t) { [\"next\", \"throw\", \"return\"].forEach(function (r) { c(t, r, function (t) { return this._invoke(r, t); }); }); } function AsyncIterator(t, r) { function e(o, i, a, u) { var c = s(t[o], t, i); if (\"throw\" !== c.type) { var h = c.arg, f = h.value; return f && \"object\" == _typeof(f) && n.call(f, \"__await\") ? r.resolve(f.__await).then(function (t) { e(\"next\", t, a, u); }, function (t) { e(\"throw\", t, a, u); }) : r.resolve(f).then(function (t) { h.value = t, a(h); }, function (t) { return e(\"throw\", t, a, u); }); } u(c.arg); } var o; c(this, \"_invoke\", function (t, n) { function i() { return new r(function (r, o) { e(t, n, r, o); }); } return o = o ? o.then(i, i) : i(); }, !0); } function d(r, e) { var n = e.method, o = r.i[n]; if (o === t) return e.delegate = null, \"throw\" === n && r.i[\"return\"] && (e.method = \"return\", e.arg = t, d(r, e), \"throw\" === e.method) || \"return\" !== n && (e.method = \"throw\", e.arg = new TypeError(\"The iterator does not provide a '\" + n + \"' method\")), f; var i = s(o, r.i, e.arg); if (\"throw\" === i.type) return e.method = \"throw\", e.arg = i.arg, e.delegate = null, f; var a = i.arg; return a ? a.done ? (e[r.r] = a.value, e.next = r.n, \"return\" !== e.method && (e.method = \"next\", e.arg = t), e.delegate = null, f) : a : (e.method = \"throw\", e.arg = new TypeError(\"iterator result is not an object\"), e.delegate = null, f); } function w(t) { this.tryEntries.push(t); } function m(r) { var e = r[4] || {}; e.type = \"normal\", e.arg = t, r[4] = e; } function Context(t) { this.tryEntries = [[-1]], t.forEach(w, this), this.reset(!0); } function x(r) { if (null != r) { var e = r[i]; if (e) return e.call(r); if (\"function\" == typeof r.next) return r; if (!isNaN(r.length)) { var o = -1, a = function e() { for (; ++o < r.length;) if (n.call(r, o)) return e.value = r[o], e.done = !1, e; return e.value = t, e.done = !0, e; }; return a.next = a; } } throw new TypeError(_typeof(r) + \" is not iterable\"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, c(v, \"constructor\", GeneratorFunctionPrototype), c(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction), GeneratorFunction.displayName = c(GeneratorFunctionPrototype, u, \"GeneratorFunction\"), r.isGeneratorFunction = function (t) { var r = \"function\" == typeof t && t.constructor; return !!r && (r === GeneratorFunction || \"GeneratorFunction\" === (r.displayName || r.name)); }, r.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, c(t, u, \"GeneratorFunction\")), t.prototype = Object.create(v), t; }, r.awrap = function (t) { return { __await: t }; }, g(AsyncIterator.prototype), c(AsyncIterator.prototype, a, function () { return this; }), r.AsyncIterator = AsyncIterator, r.async = function (t, e, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(h(t, e, n, o), i); return r.isGeneratorFunction(e) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, g(v), c(v, u, \"Generator\"), c(v, i, function () { return this; }), c(v, \"toString\", function () { return \"[object Generator]\"; }), r.keys = function (t) { var r = Object(t), e = []; for (var n in r) e.unshift(n); return function t() { for (; e.length;) if ((n = e.pop()) in r) return t.value = n, t.done = !1, t; return t.done = !0, t; }; }, r.values = x, Context.prototype = { constructor: Context, reset: function reset(r) { if (this.prev = this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = \"next\", this.arg = t, this.tryEntries.forEach(m), !r) for (var e in this) \"t\" === e.charAt(0) && n.call(this, e) && !isNaN(+e.slice(1)) && (this[e] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0][4]; if (\"throw\" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(r) { if (this.done) throw r; var e = this; function n(t) { a.type = \"throw\", a.arg = r, e.next = t; } for (var o = e.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i[4], u = this.prev, c = i[1], h = i[2]; if (-1 === i[0]) return n(\"end\"), !1; if (!c && !h) throw Error(\"try statement without catch or finally\"); if (null != i[0] && i[0] <= u) { if (u < c) return this.method = \"next\", this.arg = t, n(c), !0; if (u < h) return n(h), !1; } } }, abrupt: function abrupt(t, r) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var n = this.tryEntries[e]; if (n[0] > -1 && n[0] <= this.prev && this.prev < n[2]) { var o = n; break; } } o && (\"break\" === t || \"continue\" === t) && o[0] <= r && r <= o[2] && (o = null); var i = o ? o[4] : {}; return i.type = t, i.arg = r, o ? (this.method = \"next\", this.next = o[2], f) : this.complete(i); }, complete: function complete(t, r) { if (\"throw\" === t.type) throw t.arg; return \"break\" === t.type || \"continue\" === t.type ? this.next = t.arg : \"return\" === t.type ? (this.rval = this.arg = t.arg, this.method = \"return\", this.next = \"end\") : \"normal\" === t.type && r && (this.next = r), f; }, finish: function finish(t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[2] === t) return this.complete(e[4], e[3]), m(e), f; } }, \"catch\": function _catch(t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[0] === t) { var n = e[4]; if (\"throw\" === n.type) { var o = n.arg; m(e); } return o; } } throw Error(\"illegal catch attempt\"); }, delegateYield: function delegateYield(r, e, n) { return this.delegate = { i: x(r), r: e, n: n }, \"next\" === this.method && (this.arg = t), f; } }, r; }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"next\", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"throw\", n); } _next(void 0); }); }; }\npos.factory(\"indexdb\", function (storeNamespace) {\n  var dexie, service, serviceWorkerDb;\n  init();\n  function init() {\n    serviceWorkerDb = new Dexie(\"imagine_serviceworker\");\n    serviceWorkerDb.version(1).stores({\n      constants: \"key\"\n    });\n    dexie = new Dexie(\"imagine_db_\".concat(storeNamespace));\n    dexie.version(1).stores({\n      constants: \"key\",\n      products: \"ean,itemNo\"\n    });\n    dexie.version(2).stores({\n      constants: \"key\",\n      products: \"ean,itemNo\",\n      clerks: \"identifier\"\n    });\n    dexie.version(3).stores({\n      constants: \"key\",\n      products: \"ean,itemNo\",\n      clerks: \"identifier\",\n      itemgroups: \"no\",\n      expensegroups: \"no\",\n      notifications: \"uuid\"\n    });\n    dexie.version(4).stores({\n      constants: \"key\",\n      products: \"ean,itemNo\",\n      clerks: \"identifier\",\n      itemgroups: \"no\",\n      expensegroups: \"no\",\n      notifications: \"uuid\",\n      openInsurances: \"no\"\n    });\n    dexie.version(5).stores({\n      constants: \"key\",\n      products: \"ean,itemNo\",\n      clerks: \"identifier\",\n      itemgroups: \"no\",\n      expensegroups: \"no\",\n      notifications: \"uuid\",\n      openInsurances: \"no\"\n    });\n    dexie.version(6).stores({\n      constants: \"key\",\n      products: \"ean,itemNo\",\n      clerks: \"identifier\",\n      itemgroups: \"no\",\n      expensegroups: \"no\",\n      notifications: \"uuid\",\n      openInsurances: \"no\",\n      shortcuts: \"id\"\n    });\n    service = {\n      products: {},\n      clerks: {},\n      itemgroups: {},\n      expensegroups: {},\n      notifications: {},\n      insurances: {},\n      serviceWorkerConstants: {},\n      shortcuts: {}\n    };\n  }\n\n  //#region Products\n  service.products.findByBarcode = /*#__PURE__*/function () {\n    var _ref = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee(ean) {\n      return _regeneratorRuntime().wrap(function _callee$(_context) {\n        while (1) switch (_context.prev = _context.next) {\n          case 0:\n            _context.next = 2;\n            return dexie.products.get({\n              ean: ean\n            });\n          case 2:\n            return _context.abrupt(\"return\", _context.sent);\n          case 3:\n          case \"end\":\n            return _context.stop();\n        }\n      }, _callee);\n    }));\n    return function (_x) {\n      return _ref.apply(this, arguments);\n    };\n  }();\n  service.products.findByItemNo = /*#__PURE__*/function () {\n    var _ref2 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee2(itemNo) {\n      return _regeneratorRuntime().wrap(function _callee2$(_context2) {\n        while (1) switch (_context2.prev = _context2.next) {\n          case 0:\n            _context2.next = 2;\n            return dexie.products.get({\n              itemNo: itemNo\n            });\n          case 2:\n            return _context2.abrupt(\"return\", _context2.sent);\n          case 3:\n          case \"end\":\n            return _context2.stop();\n        }\n      }, _callee2);\n    }));\n    return function (_x2) {\n      return _ref2.apply(this, arguments);\n    };\n  }();\n  service.products.updateCache = /*#__PURE__*/function () {\n    var _ref3 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee3(items) {\n      return _regeneratorRuntime().wrap(function _callee3$(_context3) {\n        while (1) switch (_context3.prev = _context3.next) {\n          case 0:\n            _context3.next = 2;\n            return dexie.products.clear();\n          case 2:\n            _context3.next = 4;\n            return dexie.products.bulkAdd(items);\n          case 4:\n          case \"end\":\n            return _context3.stop();\n        }\n      }, _callee3);\n    }));\n    return function (_x3) {\n      return _ref3.apply(this, arguments);\n    };\n  }();\n  service.products.getAll = /*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee4() {\n    return _regeneratorRuntime().wrap(function _callee4$(_context4) {\n      while (1) switch (_context4.prev = _context4.next) {\n        case 0:\n          _context4.next = 2;\n          return dexie.products.toArray();\n        case 2:\n          return _context4.abrupt(\"return\", _context4.sent);\n        case 3:\n        case \"end\":\n          return _context4.stop();\n      }\n    }, _callee4);\n  }));\n  //#endregion\n\n  //#region Clerks\n\n  var MAX_CLERKS_CACHED = 500;\n  service.clerks.updateClerk = /*#__PURE__*/function () {\n    var _ref5 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee5(clerk) {\n      var count;\n      return _regeneratorRuntime().wrap(function _callee5$(_context5) {\n        while (1) switch (_context5.prev = _context5.next) {\n          case 0:\n            clerk.cachedAt = new Date();\n            _context5.next = 3;\n            return dexie.clerks.put(clerk);\n          case 3:\n            _context5.next = 5;\n            return dexie.clerks.count();\n          case 5:\n            count = _context5.sent;\n            if (!(count > MAX_CLERKS_CACHED)) {\n              _context5.next = 9;\n              break;\n            }\n            _context5.next = 9;\n            return dexie.clerks.sortBy(\"cachedAt\").reverse().limit(1)[\"delete\"]();\n          case 9:\n          case \"end\":\n            return _context5.stop();\n        }\n      }, _callee5);\n    }));\n    return function (_x4) {\n      return _ref5.apply(this, arguments);\n    };\n  }();\n  service.clerks.getClerk = /*#__PURE__*/function () {\n    var _ref6 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee6(id) {\n      return _regeneratorRuntime().wrap(function _callee6$(_context6) {\n        while (1) switch (_context6.prev = _context6.next) {\n          case 0:\n            _context6.next = 2;\n            return dexie.clerks.get({\n              identifier: parseInt(id)\n            });\n          case 2:\n            return _context6.abrupt(\"return\", _context6.sent);\n          case 3:\n          case \"end\":\n            return _context6.stop();\n        }\n      }, _callee6);\n    }));\n    return function (_x5) {\n      return _ref6.apply(this, arguments);\n    };\n  }();\n\n  //#endregion\n\n  //#region ItemGroups\n\n  service.itemgroups.get = /*#__PURE__*/function () {\n    var _ref7 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee7(no) {\n      return _regeneratorRuntime().wrap(function _callee7$(_context7) {\n        while (1) switch (_context7.prev = _context7.next) {\n          case 0:\n            _context7.next = 2;\n            return dexie.itemgroups.get({\n              no: no\n            });\n          case 2:\n            return _context7.abrupt(\"return\", _context7.sent);\n          case 3:\n          case \"end\":\n            return _context7.stop();\n        }\n      }, _callee7);\n    }));\n    return function (_x6) {\n      return _ref7.apply(this, arguments);\n    };\n  }();\n  service.itemgroups.getAll = /*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee8() {\n    return _regeneratorRuntime().wrap(function _callee8$(_context8) {\n      while (1) switch (_context8.prev = _context8.next) {\n        case 0:\n          _context8.next = 2;\n          return dexie.itemgroups.toArray();\n        case 2:\n          return _context8.abrupt(\"return\", _context8.sent);\n        case 3:\n        case \"end\":\n          return _context8.stop();\n      }\n    }, _callee8);\n  }));\n  service.itemgroups.update = /*#__PURE__*/function () {\n    var _ref9 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee9(itemgroups) {\n      return _regeneratorRuntime().wrap(function _callee9$(_context9) {\n        while (1) switch (_context9.prev = _context9.next) {\n          case 0:\n            _context9.next = 2;\n            return dexie.itemgroups.clear();\n          case 2:\n            _context9.next = 4;\n            return dexie.itemgroups.bulkAdd(itemgroups);\n          case 4:\n          case \"end\":\n            return _context9.stop();\n        }\n      }, _callee9);\n    }));\n    return function (_x7) {\n      return _ref9.apply(this, arguments);\n    };\n  }();\n\n  //#endregion\n\n  //#region ExpenseGroups\n\n  service.expensegroups.get = /*#__PURE__*/function () {\n    var _ref0 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee0(no) {\n      return _regeneratorRuntime().wrap(function _callee0$(_context0) {\n        while (1) switch (_context0.prev = _context0.next) {\n          case 0:\n            _context0.next = 2;\n            return dexie.expensegroups.get({\n              no: no\n            });\n          case 2:\n            return _context0.abrupt(\"return\", _context0.sent);\n          case 3:\n          case \"end\":\n            return _context0.stop();\n        }\n      }, _callee0);\n    }));\n    return function (_x8) {\n      return _ref0.apply(this, arguments);\n    };\n  }();\n  service.expensegroups.getAll = /*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee1() {\n    return _regeneratorRuntime().wrap(function _callee1$(_context1) {\n      while (1) switch (_context1.prev = _context1.next) {\n        case 0:\n          _context1.next = 2;\n          return dexie.expensegroups.toArray();\n        case 2:\n          return _context1.abrupt(\"return\", _context1.sent);\n        case 3:\n        case \"end\":\n          return _context1.stop();\n      }\n    }, _callee1);\n  }));\n  service.expensegroups.update = /*#__PURE__*/function () {\n    var _ref10 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee10(expensegroups) {\n      return _regeneratorRuntime().wrap(function _callee10$(_context10) {\n        while (1) switch (_context10.prev = _context10.next) {\n          case 0:\n            _context10.next = 2;\n            return dexie.expensegroups.clear();\n          case 2:\n            _context10.next = 4;\n            return dexie.expensegroups.bulkAdd(expensegroups);\n          case 4:\n          case \"end\":\n            return _context10.stop();\n        }\n      }, _callee10);\n    }));\n    return function (_x9) {\n      return _ref10.apply(this, arguments);\n    };\n  }();\n\n  //#endregion\n\n  //#region Notifications\n\n  service.notifications.getAll = /*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee11() {\n    return _regeneratorRuntime().wrap(function _callee11$(_context11) {\n      while (1) switch (_context11.prev = _context11.next) {\n        case 0:\n          _context11.next = 2;\n          return dexie.notifications.toArray();\n        case 2:\n          return _context11.abrupt(\"return\", _context11.sent);\n        case 3:\n        case \"end\":\n          return _context11.stop();\n      }\n    }, _callee11);\n  }));\n  service.notifications.add = /*#__PURE__*/function () {\n    var _ref12 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee12(message) {\n      return _regeneratorRuntime().wrap(function _callee12$(_context12) {\n        while (1) switch (_context12.prev = _context12.next) {\n          case 0:\n            _context12.next = 2;\n            return dexie.notifications.add(message);\n          case 2:\n          case \"end\":\n            return _context12.stop();\n        }\n      }, _callee12);\n    }));\n    return function (_x0) {\n      return _ref12.apply(this, arguments);\n    };\n  }();\n  service.notifications.clear = /*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee13() {\n    return _regeneratorRuntime().wrap(function _callee13$(_context13) {\n      while (1) switch (_context13.prev = _context13.next) {\n        case 0:\n          _context13.next = 2;\n          return dexie.notifications.clear();\n        case 2:\n        case \"end\":\n          return _context13.stop();\n      }\n    }, _callee13);\n  }));\n  service.notifications.remove = /*#__PURE__*/function () {\n    var _ref14 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee14(uuid) {\n      return _regeneratorRuntime().wrap(function _callee14$(_context14) {\n        while (1) switch (_context14.prev = _context14.next) {\n          case 0:\n            _context14.next = 2;\n            return dexie.notifications[\"delete\"](uuid);\n          case 2:\n          case \"end\":\n            return _context14.stop();\n        }\n      }, _callee14);\n    }));\n    return function (_x1) {\n      return _ref14.apply(this, arguments);\n    };\n  }();\n  service.notifications.merge = /*#__PURE__*/function () {\n    var _ref15 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee15(messages) {\n      return _regeneratorRuntime().wrap(function _callee15$(_context15) {\n        while (1) switch (_context15.prev = _context15.next) {\n          case 0:\n            _context15.next = 2;\n            return dexie.notifications.bulkPut(messages);\n          case 2:\n          case \"end\":\n            return _context15.stop();\n        }\n      }, _callee15);\n    }));\n    return function (_x10) {\n      return _ref15.apply(this, arguments);\n    };\n  }();\n\n  //#endregion\n\n  //#region Open Insurances\n  service.insurances.add = /*#__PURE__*/function () {\n    var _ref16 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee16(insurance) {\n      return _regeneratorRuntime().wrap(function _callee16$(_context16) {\n        while (1) switch (_context16.prev = _context16.next) {\n          case 0:\n            _context16.next = 2;\n            return dexie.openInsurances.add({\n              no: insurance\n            });\n          case 2:\n          case \"end\":\n            return _context16.stop();\n        }\n      }, _callee16);\n    }));\n    return function (_x11) {\n      return _ref16.apply(this, arguments);\n    };\n  }();\n  service.insurances.remove = /*#__PURE__*/function () {\n    var _ref17 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee17(insurance) {\n      return _regeneratorRuntime().wrap(function _callee17$(_context17) {\n        while (1) switch (_context17.prev = _context17.next) {\n          case 0:\n            _context17.next = 2;\n            return dexie.openInsurances[\"delete\"](insurance);\n          case 2:\n          case \"end\":\n            return _context17.stop();\n        }\n      }, _callee17);\n    }));\n    return function (_x12) {\n      return _ref17.apply(this, arguments);\n    };\n  }();\n  service.insurances.getAll = /*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee18() {\n    var dbInsurances;\n    return _regeneratorRuntime().wrap(function _callee18$(_context18) {\n      while (1) switch (_context18.prev = _context18.next) {\n        case 0:\n          _context18.next = 2;\n          return dexie.openInsurances.toArray();\n        case 2:\n          dbInsurances = _context18.sent;\n          return _context18.abrupt(\"return\", dbInsurances.map(function (i) {\n            return i.no;\n          }));\n        case 4:\n        case \"end\":\n          return _context18.stop();\n      }\n    }, _callee18);\n  }));\n  //#endregion\n\n  //#region Contants\n  service.serviceWorkerConstants.set = /*#__PURE__*/function () {\n    var _ref19 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee19(key, value) {\n      return _regeneratorRuntime().wrap(function _callee19$(_context19) {\n        while (1) switch (_context19.prev = _context19.next) {\n          case 0:\n            _context19.next = 2;\n            return serviceWorkerDb.constants.put({\n              key: key,\n              value: value\n            });\n          case 2:\n          case \"end\":\n            return _context19.stop();\n        }\n      }, _callee19);\n    }));\n    return function (_x13, _x14) {\n      return _ref19.apply(this, arguments);\n    };\n  }();\n  //#endregion\n\n  //#region Shortcuts\n  service.shortcuts.updateShortcuts = /*#__PURE__*/function () {\n    var _ref20 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee20(newShortcuts) {\n      return _regeneratorRuntime().wrap(function _callee20$(_context20) {\n        while (1) switch (_context20.prev = _context20.next) {\n          case 0:\n            _context20.next = 2;\n            return dexie.shortcuts.clear();\n          case 2:\n            _context20.next = 4;\n            return dexie.shortcuts.bulkAdd(newShortcuts);\n          case 4:\n          case \"end\":\n            return _context20.stop();\n        }\n      }, _callee20);\n    }));\n    return function (_x15) {\n      return _ref20.apply(this, arguments);\n    };\n  }();\n  service.shortcuts.getShortcuts = /*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee21() {\n    return _regeneratorRuntime().wrap(function _callee21$(_context21) {\n      while (1) switch (_context21.prev = _context21.next) {\n        case 0:\n          _context21.next = 2;\n          return dexie.shortcuts.toArray();\n        case 2:\n          return _context21.abrupt(\"return\", _context21.sent);\n        case 3:\n        case \"end\":\n          return _context21.stop();\n      }\n    }, _callee21);\n  }));\n  //#endregion\n\n  return service;\n});\n","\"use strict\";\n\npos.directive(\"inputPopup\", function (keypadManager, $timeout, $parse) {\n  return {\n    restrict: \"A\",\n    link: function link(scope, ele, attr) {\n      ele.on(\"blur\", function (event) {\n        scope.trigger = false;\n      });\n      scope.$watch(function () {\n        return scope[attr.inputPopup];\n      }, function (trigger) {\n        if (trigger) $timeout(function () {\n          var attrValue = attr.onEnter;\n          var func = $parse(attrValue);\n          var onEnter = !func ? function () {} : function () {\n            func(scope);\n            keypadManager.hide();\n          };\n          keypadManager.show(ele, onEnter);\n        }, 10);\n      });\n    }\n  };\n});\n","\"use strict\";\n\npos.factory(\"inputService\", function ($document, $sniffer, $state, $timeout, versionService, $log, $rootScope) {\n  var inputService = {};\n  var doc = angular.element($document);\n  var input;\n  var onEnterFunc;\n  var onDenominationFunc;\n  var version = versionService.getVersion();\n  var inputDelay;\n  var inputBuffer = \"\";\n  var inputPressedHandler = function inputPressedHandler(keyEvent) {\n    var capturedInput = String.fromCharCode(keyEvent.charCode);\n    if (!/[a-z0-9%.+-æøå]/i.test(capturedInput)) return;\n    inputBuffer += capturedInput;\n    cancelBufferToInputPromise();\n    inputDelay = $timeout(shiftBufferToInput, 50);\n  };\n  function cancelBufferToInputPromise() {\n    if (inputDelay) $timeout.cancel(inputDelay);\n  }\n  function cancelAndShiftToInput() {\n    cancelBufferToInputPromise();\n    shiftBufferToInput();\n  }\n  function shiftBufferToInput() {\n    var inputString = inputBuffer;\n    inputBuffer = \"\";\n    inputService.insertString(inputString);\n  }\n  var inputDownHandler = function inputDownHandler(keyEvent) {\n    switch (keyEvent.keyCode) {\n      case 8:\n        // Backspace\n        cancelAndShiftToInput();\n        keyEvent.preventDefault();\n        inputService.doDelete(null, true);\n        break;\n      case 46:\n        // Del\n        cancelAndShiftToInput();\n        inputService.doDelete();\n        break;\n      case 13:\n        // Enter\n        cancelAndShiftToInput();\n        inputService.doEnter();\n        break;\n      case 32:\n        // Space\n        cancelAndShiftToInput();\n        keyEvent.preventDefault();\n        inputService.insertString(\" \", input);\n        break;\n      case 27:\n        // Escape\n        cancelBufferToInputPromise();\n        input.val(\"\");\n        input.trigger(\"change\");\n        break;\n    }\n  };\n  inputService.isDirty = false;\n  inputService.doDelete = function (inputElement, isBackspace) {\n    var inputEle = inputElement || input;\n    inputService.getSelection(inputEle, del);\n    function del(selectionStart, selectionEnd) {\n      var head = inputEle.val().substr(0, selectionStart);\n      var tail = inputEle.val().substr(selectionEnd);\n      if (selectionStart === selectionEnd) {\n        if (isBackspace) head = head.substr(0, head.length - 1);else tail = tail.substr(1);\n      }\n      var newInput = head + tail;\n      inputEle.val(newInput);\n      inputEle.trigger(\"change\");\n    }\n  };\n  inputService.doEnter = function () {\n    var data = {};\n    data.buttonName = input.val();\n    data.stateName = $state.$current.name;\n    data.clientTime = new Date();\n    data.posVersion = version;\n    $timeout(onEnterFunc, 0);\n  };\n  inputService.doSpace = function (inputElement) {\n    var head = inputElement.val();\n    var tail = \"\";\n    var newInput = head + \" \" + tail;\n    inputElement.val(newInput);\n    inputElement.trigger(\"change\");\n  };\n  inputService.insertString = function (string, inputElement) {\n    if (string) {\n      var inputEle = inputElement || input;\n      var currentValue = inputEle.val();\n      var newValue;\n      var regex = /^[0-9]*(\\.|,)?[0-9]*$/;\n      if ($rootScope.IsNumericOnly && !string.match(regex)) {\n        $log.debug(\"Non allowed characters in value: \" + string);\n        string = \"\";\n      }\n      if (inputService.isDirty) {\n        newValue = \"\".concat(currentValue).concat(string);\n      } else {\n        newValue = string.toString();\n        inputService.isDirty = true;\n      }\n      inputEle.val(newValue);\n      inputEle.trigger(\"change\");\n    }\n  };\n  inputService.setString = function (string, inputElement) {\n    var inputEle = inputElement || input;\n    inputEle.val(string);\n    inputEle.trigger(\"change\");\n  };\n  inputService.enableGlobalCapture = function (inputElement, onEnter, onDenomination) {\n    if (inputElement[0].nodeName.toUpperCase() !== \"INPUT\") return;\n    // disable the previous input capture if one was active\n    inputService.disableGlobalCapture();\n\n    // update the current input to the one passed here\n    if (inputElement) input = inputElement;\n    // update the on enter func to match the one with the input\n    if (onEnter) onEnterFunc = onEnter;\n    if (onDenomination) onDenominationFunc = onDenomination;\n    doc.on(\"keypress\", inputPressedHandler);\n    doc.on(\"keydown\", inputDownHandler);\n  };\n  inputService.disableGlobalCapture = function (inputElement) {\n    // disable only if the input element matches the current one\n    // or if disable is called without arguments\n    if (inputElement !== input && inputElement) return;\n    doc.off(\"keypress\", inputPressedHandler);\n    doc.off(\"keydown\", inputDownHandler);\n  };\n\n  /**\n   * Get the start and end index of the current selection for an input element\n   *\n   * Chrome does not allow selection on number inputs so we try out different ways\n   * if we have to change type to allow selection, we have to use $timeout and\n   * allow the rest of the function to continue inside that timeout.\n   *\n   * slectionEnd wont be correct on the FIRST run unless we use the timeout\n   * BUT! Only if the input is populated by any other source than the keypad\n   * @param  {DOMElement} input           The input element to get selection on\n   * @param  {function}   continueFunc    Callback which takes start and end\n   *                                      index as parameters\n   * @return {object}                     Has the selectionStart and selectionEnd properties\n   */\n  inputService.getSelection = function (input, continueFunc) {\n    var selectionStart, selectionEnd;\n    try {\n      selectionStart = input[0].selectionStart;\n      selectionEnd = input[0].selectionEnd;\n      if (continueFunc) continueFunc(selectionStart, selectionEnd);\n    } catch (e) {\n      var type = input.attr(\"type\");\n      input.attr(\"type\", \"text\");\n      $timeout(function () {\n        selectionStart = input[0].selectionStart;\n        selectionEnd = input[0].selectionEnd;\n        input.attr(\"type\", type);\n        if (continueFunc) continueFunc(selectionStart, selectionEnd);\n      }, 0);\n    }\n    return {\n      selectionStart: selectionStart,\n      selectionEnd: selectionEnd\n    };\n  };\n\n  /**\n   * Select range of text in an input element\n   * @param  {Number}          start                zero-based index of start position of selection\n   * @param  {Number}          end                  zero-based index of end position of selection\n   * @param  {DOMElement|null} optionalUnboundInput An unbound input to use instead of the registered one\n   */\n  inputService.select = function (start, end, optionalUnboundInput) {\n    var input = optionalUnboundInput || input;\n    if (input) {\n      $timeout(function () {\n        setSelection(input, start, end);\n      }, 0);\n    }\n  };\n\n  /**\n   * Select all the text in an input element\n   * @param  {DOMElement|null} optionalUnboundInput An unbound input to use instead of the registered one\n   */\n  inputService.selectAll = function (optionalUnboundInput) {\n    var input = optionalUnboundInput || input;\n    if (input) {\n      $timeout(function () {\n        setSelection(input, 0, input[0].value.length);\n      }, 0);\n    }\n  };\n\n  /**\n   * Private helper method used by select and selectAll\n   * @param {DOMElement}  input    Input element to select on\n   * @param {Number}      start    Zero-based start index\n   * @param {Number}      end      Zero-based end index\n   */\n  function setSelection(input, start, end) {\n    try {\n      input[0].setSelectionRange(start, end);\n    } catch (e) {\n      var type = input.attr(\"type\");\n      input.attr(\"type\", \"text\");\n      input[0].setSelectionRange(start, end);\n      input.attr(\"type\", type);\n    }\n  }\n  return inputService;\n});\n","\"use strict\";\n\npos.factory(\"inputValidationService\", function ($locale) {\n  var service = {};\n  var maxAmountAllowed = 9999999.99;\n  var maxQuantityAllowed = 99999;\n  service.decimalPlaces = 2;\n  service.validateNewPhoneNumber = function (oldPhone, newPhone) {\n    if (!newPhone) return true;\n    if (newPhone === oldPhone) return true;\n    var phoneUtil = require(\"google-libphonenumber\").PhoneNumberUtil.getInstance();\n    try {\n      var phoneNumber = phoneUtil.parseAndKeepRawInput(newPhone, null);\n      return phoneUtil.isValidNumber(phoneNumber);\n    } catch (e) {\n      return false;\n    }\n  };\n  service.convertToDecimal = function val(amount, unrounded) {\n    // we know that toDecimalPlacesUnrounded() only exists on `Decimal`. This is a temporary workaround\n    // till we have removed the constructor overload of Decimal in app.js. When that is removed we can\n    // change this to use `if (amount instaceof Decimal) return amount;` for proper type checking\n    if (typeof amount.toDecimalPlacesUnrounded === \"function\") return amount;\n    // safe convertion to string\n    amount = \"\" + amount;\n    amount = amount.replace(/\\s+/g, \"\");\n\n    // Disallowing thousand separators because they only add complications and no value, who writes thousand separators\n    // Allowing both dor or comma to be used as a decimal separator, so input is language agnostic\n    // Only allowing two numeric inputs after decimal separator because we only work with two decimals\n    if (!amount.match(/^[0-9]*(\\.|,)?[0-9]{0,2}$/g)) throw \"INVALID_FORMAT\";\n    if (amount.includes(\",\")) amount = amount.replace(\",\", \".\");\n    var value = new Decimal(amount);\n    if (unrounded) return value;\n    return service.roundToAllowedDecimalPlaces(value);\n  };\n  service.roundToAllowedDecimalPlaces = function (value) {\n    return value.toDecimalPlacesUnrounded(service.decimalPlaces + 1).toDecimalPlaces(service.decimalPlaces);\n  };\n  service.validateAmount = function (amount) {\n    return isWithinRange(amount, maxAmountAllowed);\n  };\n  service.validateQuantity = function (quantity) {\n    return isWithinRange(quantity, maxQuantityAllowed);\n  };\n\n  /**\n   * Converts machine culture to regional format.\n   * Machine culture uses period as decimal separator and has no group separator\n   */\n  service.convertValueToRegionalFormat = function (machineCultureValue) {\n    if (isNaN(Number(machineCultureValue))) throw \"INVALID_ARGUMENT\";\n    var decimal = $locale.NUMBER_FORMATS.DECIMAL_SEP;\n    return machineCultureValue.replace(\".\", decimal);\n  };\n\n  /**\n   * Converts reginal format to machine culture\n   */\n  service.covertValueToMachineCulture = function (value) {\n    var newVal = (\"\" + value).replace($locale.NUMBER_FORMATS.GROUP_SEP, \"\");\n    newVal = (\"\" + newVal).replace($locale.NUMBER_FORMATS.DECIMAL_SEP, \".\");\n    return newVal;\n  };\n  function isWithinRange(val, range) {\n    var decimalVal = service.convertToDecimal(val);\n    return decimalVal.abs().lte(range);\n  }\n  return service;\n});\n","\"use strict\";\n\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _regeneratorRuntime() { \"use strict\"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return r; }; var t, r = {}, e = Object.prototype, n = e.hasOwnProperty, o = \"function\" == typeof Symbol ? Symbol : {}, i = o.iterator || \"@@iterator\", a = o.asyncIterator || \"@@asyncIterator\", u = o.toStringTag || \"@@toStringTag\"; function c(t, r, e, n) { return Object.defineProperty(t, r, { value: e, enumerable: !n, configurable: !n, writable: !n }); } try { c({}, \"\"); } catch (t) { c = function c(t, r, e) { return t[r] = e; }; } function h(r, e, n, o) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype); return c(a, \"_invoke\", function (r, e, n) { var o = 1; return function (i, a) { if (3 === o) throw Error(\"Generator is already running\"); if (4 === o) { if (\"throw\" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var u = n.delegate; if (u) { var c = d(u, n); if (c) { if (c === f) continue; return c; } } if (\"next\" === n.method) n.sent = n._sent = n.arg;else if (\"throw\" === n.method) { if (1 === o) throw o = 4, n.arg; n.dispatchException(n.arg); } else \"return\" === n.method && n.abrupt(\"return\", n.arg); o = 3; var h = s(r, e, n); if (\"normal\" === h.type) { if (o = n.done ? 4 : 2, h.arg === f) continue; return { value: h.arg, done: n.done }; } \"throw\" === h.type && (o = 4, n.method = \"throw\", n.arg = h.arg); } }; }(r, n, new Context(o || [])), !0), a; } function s(t, r, e) { try { return { type: \"normal\", arg: t.call(r, e) }; } catch (t) { return { type: \"throw\", arg: t }; } } r.wrap = h; var f = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var l = {}; c(l, i, function () { return this; }); var p = Object.getPrototypeOf, y = p && p(p(x([]))); y && y !== e && n.call(y, i) && (l = y); var v = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(l); function g(t) { [\"next\", \"throw\", \"return\"].forEach(function (r) { c(t, r, function (t) { return this._invoke(r, t); }); }); } function AsyncIterator(t, r) { function e(o, i, a, u) { var c = s(t[o], t, i); if (\"throw\" !== c.type) { var h = c.arg, f = h.value; return f && \"object\" == _typeof(f) && n.call(f, \"__await\") ? r.resolve(f.__await).then(function (t) { e(\"next\", t, a, u); }, function (t) { e(\"throw\", t, a, u); }) : r.resolve(f).then(function (t) { h.value = t, a(h); }, function (t) { return e(\"throw\", t, a, u); }); } u(c.arg); } var o; c(this, \"_invoke\", function (t, n) { function i() { return new r(function (r, o) { e(t, n, r, o); }); } return o = o ? o.then(i, i) : i(); }, !0); } function d(r, e) { var n = e.method, o = r.i[n]; if (o === t) return e.delegate = null, \"throw\" === n && r.i[\"return\"] && (e.method = \"return\", e.arg = t, d(r, e), \"throw\" === e.method) || \"return\" !== n && (e.method = \"throw\", e.arg = new TypeError(\"The iterator does not provide a '\" + n + \"' method\")), f; var i = s(o, r.i, e.arg); if (\"throw\" === i.type) return e.method = \"throw\", e.arg = i.arg, e.delegate = null, f; var a = i.arg; return a ? a.done ? (e[r.r] = a.value, e.next = r.n, \"return\" !== e.method && (e.method = \"next\", e.arg = t), e.delegate = null, f) : a : (e.method = \"throw\", e.arg = new TypeError(\"iterator result is not an object\"), e.delegate = null, f); } function w(t) { this.tryEntries.push(t); } function m(r) { var e = r[4] || {}; e.type = \"normal\", e.arg = t, r[4] = e; } function Context(t) { this.tryEntries = [[-1]], t.forEach(w, this), this.reset(!0); } function x(r) { if (null != r) { var e = r[i]; if (e) return e.call(r); if (\"function\" == typeof r.next) return r; if (!isNaN(r.length)) { var o = -1, a = function e() { for (; ++o < r.length;) if (n.call(r, o)) return e.value = r[o], e.done = !1, e; return e.value = t, e.done = !0, e; }; return a.next = a; } } throw new TypeError(_typeof(r) + \" is not iterable\"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, c(v, \"constructor\", GeneratorFunctionPrototype), c(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction), GeneratorFunction.displayName = c(GeneratorFunctionPrototype, u, \"GeneratorFunction\"), r.isGeneratorFunction = function (t) { var r = \"function\" == typeof t && t.constructor; return !!r && (r === GeneratorFunction || \"GeneratorFunction\" === (r.displayName || r.name)); }, r.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, c(t, u, \"GeneratorFunction\")), t.prototype = Object.create(v), t; }, r.awrap = function (t) { return { __await: t }; }, g(AsyncIterator.prototype), c(AsyncIterator.prototype, a, function () { return this; }), r.AsyncIterator = AsyncIterator, r.async = function (t, e, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(h(t, e, n, o), i); return r.isGeneratorFunction(e) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, g(v), c(v, u, \"Generator\"), c(v, i, function () { return this; }), c(v, \"toString\", function () { return \"[object Generator]\"; }), r.keys = function (t) { var r = Object(t), e = []; for (var n in r) e.unshift(n); return function t() { for (; e.length;) if ((n = e.pop()) in r) return t.value = n, t.done = !1, t; return t.done = !0, t; }; }, r.values = x, Context.prototype = { constructor: Context, reset: function reset(r) { if (this.prev = this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = \"next\", this.arg = t, this.tryEntries.forEach(m), !r) for (var e in this) \"t\" === e.charAt(0) && n.call(this, e) && !isNaN(+e.slice(1)) && (this[e] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0][4]; if (\"throw\" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(r) { if (this.done) throw r; var e = this; function n(t) { a.type = \"throw\", a.arg = r, e.next = t; } for (var o = e.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i[4], u = this.prev, c = i[1], h = i[2]; if (-1 === i[0]) return n(\"end\"), !1; if (!c && !h) throw Error(\"try statement without catch or finally\"); if (null != i[0] && i[0] <= u) { if (u < c) return this.method = \"next\", this.arg = t, n(c), !0; if (u < h) return n(h), !1; } } }, abrupt: function abrupt(t, r) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var n = this.tryEntries[e]; if (n[0] > -1 && n[0] <= this.prev && this.prev < n[2]) { var o = n; break; } } o && (\"break\" === t || \"continue\" === t) && o[0] <= r && r <= o[2] && (o = null); var i = o ? o[4] : {}; return i.type = t, i.arg = r, o ? (this.method = \"next\", this.next = o[2], f) : this.complete(i); }, complete: function complete(t, r) { if (\"throw\" === t.type) throw t.arg; return \"break\" === t.type || \"continue\" === t.type ? this.next = t.arg : \"return\" === t.type ? (this.rval = this.arg = t.arg, this.method = \"return\", this.next = \"end\") : \"normal\" === t.type && r && (this.next = r), f; }, finish: function finish(t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[2] === t) return this.complete(e[4], e[3]), m(e), f; } }, \"catch\": function _catch(t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[0] === t) { var n = e[4]; if (\"throw\" === n.type) { var o = n.arg; m(e); } return o; } } throw Error(\"illegal catch attempt\"); }, delegateYield: function delegateYield(r, e, n) { return this.delegate = { i: x(r), r: e, n: n }, \"next\" === this.method && (this.arg = t), f; } }, r; }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"next\", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"throw\", n); } _next(void 0); }); }; }\npos.factory(\"itemInfoRepository\", function (backendHelper) {\n  var voucher = {};\n  var backend = backendHelper.backend;\n  init();\n  function init() {\n    return _init.apply(this, arguments);\n  }\n  function _init() {\n    _init = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee() {\n      return _regeneratorRuntime().wrap(function _callee$(_context) {\n        while (1) switch (_context.prev = _context.next) {\n          case 0:\n          case \"end\":\n            return _context.stop();\n        }\n      }, _callee);\n    }));\n    return _init.apply(this, arguments);\n  }\n  voucher.api = {\n    getApplicableItemInfos: function getApplicableItemInfos(customAttributeIds, promptType) {\n      return backend.api.post(\"api/ItemInfo/applicable\", {\n        customAttributeIds: customAttributeIds,\n        promptType: promptType\n      });\n    },\n    storeItemInfoResponses: function storeItemInfoResponses(itemInfoResponses) {\n      return backend.api.post(\"api/ItemInfo/response\", itemInfoResponses);\n    }\n  };\n  return voucher;\n});\n","\"use strict\";\n\npos.value(\"promptEveryType\", Object.freeze({\n  transaction: 1,\n  line: 2\n}));\npos.value(\"itemInfoType\", Object.freeze({\n  info: 1,\n  question: 2\n}));\n","\"use strict\";\n\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _regeneratorRuntime() { \"use strict\"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return r; }; var t, r = {}, e = Object.prototype, n = e.hasOwnProperty, o = \"function\" == typeof Symbol ? Symbol : {}, i = o.iterator || \"@@iterator\", a = o.asyncIterator || \"@@asyncIterator\", u = o.toStringTag || \"@@toStringTag\"; function c(t, r, e, n) { return Object.defineProperty(t, r, { value: e, enumerable: !n, configurable: !n, writable: !n }); } try { c({}, \"\"); } catch (t) { c = function c(t, r, e) { return t[r] = e; }; } function h(r, e, n, o) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype); return c(a, \"_invoke\", function (r, e, n) { var o = 1; return function (i, a) { if (3 === o) throw Error(\"Generator is already running\"); if (4 === o) { if (\"throw\" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var u = n.delegate; if (u) { var c = d(u, n); if (c) { if (c === f) continue; return c; } } if (\"next\" === n.method) n.sent = n._sent = n.arg;else if (\"throw\" === n.method) { if (1 === o) throw o = 4, n.arg; n.dispatchException(n.arg); } else \"return\" === n.method && n.abrupt(\"return\", n.arg); o = 3; var h = s(r, e, n); if (\"normal\" === h.type) { if (o = n.done ? 4 : 2, h.arg === f) continue; return { value: h.arg, done: n.done }; } \"throw\" === h.type && (o = 4, n.method = \"throw\", n.arg = h.arg); } }; }(r, n, new Context(o || [])), !0), a; } function s(t, r, e) { try { return { type: \"normal\", arg: t.call(r, e) }; } catch (t) { return { type: \"throw\", arg: t }; } } r.wrap = h; var f = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var l = {}; c(l, i, function () { return this; }); var p = Object.getPrototypeOf, y = p && p(p(x([]))); y && y !== e && n.call(y, i) && (l = y); var v = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(l); function g(t) { [\"next\", \"throw\", \"return\"].forEach(function (r) { c(t, r, function (t) { return this._invoke(r, t); }); }); } function AsyncIterator(t, r) { function e(o, i, a, u) { var c = s(t[o], t, i); if (\"throw\" !== c.type) { var h = c.arg, f = h.value; return f && \"object\" == _typeof(f) && n.call(f, \"__await\") ? r.resolve(f.__await).then(function (t) { e(\"next\", t, a, u); }, function (t) { e(\"throw\", t, a, u); }) : r.resolve(f).then(function (t) { h.value = t, a(h); }, function (t) { return e(\"throw\", t, a, u); }); } u(c.arg); } var o; c(this, \"_invoke\", function (t, n) { function i() { return new r(function (r, o) { e(t, n, r, o); }); } return o = o ? o.then(i, i) : i(); }, !0); } function d(r, e) { var n = e.method, o = r.i[n]; if (o === t) return e.delegate = null, \"throw\" === n && r.i[\"return\"] && (e.method = \"return\", e.arg = t, d(r, e), \"throw\" === e.method) || \"return\" !== n && (e.method = \"throw\", e.arg = new TypeError(\"The iterator does not provide a '\" + n + \"' method\")), f; var i = s(o, r.i, e.arg); if (\"throw\" === i.type) return e.method = \"throw\", e.arg = i.arg, e.delegate = null, f; var a = i.arg; return a ? a.done ? (e[r.r] = a.value, e.next = r.n, \"return\" !== e.method && (e.method = \"next\", e.arg = t), e.delegate = null, f) : a : (e.method = \"throw\", e.arg = new TypeError(\"iterator result is not an object\"), e.delegate = null, f); } function w(t) { this.tryEntries.push(t); } function m(r) { var e = r[4] || {}; e.type = \"normal\", e.arg = t, r[4] = e; } function Context(t) { this.tryEntries = [[-1]], t.forEach(w, this), this.reset(!0); } function x(r) { if (null != r) { var e = r[i]; if (e) return e.call(r); if (\"function\" == typeof r.next) return r; if (!isNaN(r.length)) { var o = -1, a = function e() { for (; ++o < r.length;) if (n.call(r, o)) return e.value = r[o], e.done = !1, e; return e.value = t, e.done = !0, e; }; return a.next = a; } } throw new TypeError(_typeof(r) + \" is not iterable\"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, c(v, \"constructor\", GeneratorFunctionPrototype), c(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction), GeneratorFunction.displayName = c(GeneratorFunctionPrototype, u, \"GeneratorFunction\"), r.isGeneratorFunction = function (t) { var r = \"function\" == typeof t && t.constructor; return !!r && (r === GeneratorFunction || \"GeneratorFunction\" === (r.displayName || r.name)); }, r.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, c(t, u, \"GeneratorFunction\")), t.prototype = Object.create(v), t; }, r.awrap = function (t) { return { __await: t }; }, g(AsyncIterator.prototype), c(AsyncIterator.prototype, a, function () { return this; }), r.AsyncIterator = AsyncIterator, r.async = function (t, e, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(h(t, e, n, o), i); return r.isGeneratorFunction(e) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, g(v), c(v, u, \"Generator\"), c(v, i, function () { return this; }), c(v, \"toString\", function () { return \"[object Generator]\"; }), r.keys = function (t) { var r = Object(t), e = []; for (var n in r) e.unshift(n); return function t() { for (; e.length;) if ((n = e.pop()) in r) return t.value = n, t.done = !1, t; return t.done = !0, t; }; }, r.values = x, Context.prototype = { constructor: Context, reset: function reset(r) { if (this.prev = this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = \"next\", this.arg = t, this.tryEntries.forEach(m), !r) for (var e in this) \"t\" === e.charAt(0) && n.call(this, e) && !isNaN(+e.slice(1)) && (this[e] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0][4]; if (\"throw\" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(r) { if (this.done) throw r; var e = this; function n(t) { a.type = \"throw\", a.arg = r, e.next = t; } for (var o = e.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i[4], u = this.prev, c = i[1], h = i[2]; if (-1 === i[0]) return n(\"end\"), !1; if (!c && !h) throw Error(\"try statement without catch or finally\"); if (null != i[0] && i[0] <= u) { if (u < c) return this.method = \"next\", this.arg = t, n(c), !0; if (u < h) return n(h), !1; } } }, abrupt: function abrupt(t, r) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var n = this.tryEntries[e]; if (n[0] > -1 && n[0] <= this.prev && this.prev < n[2]) { var o = n; break; } } o && (\"break\" === t || \"continue\" === t) && o[0] <= r && r <= o[2] && (o = null); var i = o ? o[4] : {}; return i.type = t, i.arg = r, o ? (this.method = \"next\", this.next = o[2], f) : this.complete(i); }, complete: function complete(t, r) { if (\"throw\" === t.type) throw t.arg; return \"break\" === t.type || \"continue\" === t.type ? this.next = t.arg : \"return\" === t.type ? (this.rval = this.arg = t.arg, this.method = \"return\", this.next = \"end\") : \"normal\" === t.type && r && (this.next = r), f; }, finish: function finish(t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[2] === t) return this.complete(e[4], e[3]), m(e), f; } }, \"catch\": function _catch(t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[0] === t) { var n = e[4]; if (\"throw\" === n.type) { var o = n.arg; m(e); } return o; } } throw Error(\"illegal catch attempt\"); }, delegateYield: function delegateYield(r, e, n) { return this.delegate = { i: x(r), r: e, n: n }, \"next\" === this.method && (this.arg = t), f; } }, r; }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"next\", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"throw\", n); } _next(void 0); }); }; }\npos.factory(\"itemInfoService\", function (posConfig, itemInfoRepository, promptEveryType, itemInfoType, $q, posStorage, $translate) {\n  var service = {};\n  var i18nYesButton;\n  var i18nNoButton;\n  var i18nSerializedItemDisplayText;\n  var itemInfoModal = {\n    isVisible: false\n  };\n  service.getItemInfoModal = function () {\n    return itemInfoModal;\n  };\n  service.executeItemInfo = /*#__PURE__*/function () {\n    var _ref = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee(receipt, item, promptType) {\n      var deferred;\n      return _regeneratorRuntime().wrap(function _callee$(_context) {\n        while (1) switch (_context.prev = _context.next) {\n          case 0:\n            deferred = $q.defer();\n            executeItemInfos(deferred, receipt, item, promptType);\n            return _context.abrupt(\"return\", deferred.promise);\n          case 3:\n          case \"end\":\n            return _context.stop();\n        }\n      }, _callee);\n    }));\n    return function (_x, _x2, _x3) {\n      return _ref.apply(this, arguments);\n    };\n  }();\n  service.executeSerializedItemInfo = /*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee2() {\n    var itemInfo;\n    return _regeneratorRuntime().wrap(function _callee2$(_context2) {\n      while (1) switch (_context2.prev = _context2.next) {\n        case 0:\n          _context2.next = 2;\n          return $translate([\"label/yes\", \"label/no\", \"label/serializedItemNotAvailable\"]).then(function (translations) {\n            i18nYesButton = translations[\"label/yes\"];\n            i18nNoButton = translations[\"label/no\"];\n            i18nSerializedItemDisplayText = translations[\"label/serializedItemNotAvailable\"];\n          });\n        case 2:\n          itemInfo = {\n            type: 2,\n            displayText: i18nSerializedItemDisplayText,\n            questionChoices: [i18nYesButton, i18nNoButton]\n          };\n          _context2.next = 5;\n          return showItemInfo(itemInfo);\n        case 5:\n          return _context2.abrupt(\"return\", _context2.sent);\n        case 6:\n        case \"end\":\n          return _context2.stop();\n      }\n    }, _callee2);\n  }));\n  service.executeSerializedNotFoundItemInfo = /*#__PURE__*/function () {\n    var _ref3 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee3(label) {\n      var itemInfo;\n      return _regeneratorRuntime().wrap(function _callee3$(_context3) {\n        while (1) switch (_context3.prev = _context3.next) {\n          case 0:\n            _context3.next = 2;\n            return $translate([\"label/yes\", \"label/no\", label]).then(function (translations) {\n              i18nYesButton = translations[\"label/yes\"];\n              i18nNoButton = translations[\"label/no\"];\n              i18nSerializedItemDisplayText = translations[label];\n            });\n          case 2:\n            itemInfo = {\n              type: 2,\n              displayText: i18nSerializedItemDisplayText,\n              questionChoices: [i18nYesButton, i18nNoButton]\n            };\n            _context3.next = 5;\n            return showItemInfo(itemInfo);\n          case 5:\n            return _context3.abrupt(\"return\", _context3.sent);\n          case 6:\n          case \"end\":\n            return _context3.stop();\n        }\n      }, _callee3);\n    }));\n    return function (_x4) {\n      return _ref3.apply(this, arguments);\n    };\n  }();\n  service.executeSerializedItemScanSerialNumber = /*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee4() {\n    var itemInfo;\n    return _regeneratorRuntime().wrap(function _callee4$(_context4) {\n      while (1) switch (_context4.prev = _context4.next) {\n        case 0:\n          _context4.next = 2;\n          return $translate([\"label/yes\", \"label/no\", \"label/serializedItemScanSerialNumber\"]).then(function (translations) {\n            i18nYesButton = translations[\"label/yes\"];\n            i18nNoButton = translations[\"label/no\"];\n            i18nSerializedItemDisplayText = translations[\"label/serializedItemScanSerialNumber\"];\n          });\n        case 2:\n          itemInfo = {\n            type: 2,\n            displayText: i18nSerializedItemDisplayText,\n            questionChoices: [i18nYesButton, i18nNoButton]\n          };\n          _context4.next = 5;\n          return showItemInfo(itemInfo);\n        case 5:\n          return _context4.abrupt(\"return\", _context4.sent);\n        case 6:\n        case \"end\":\n          return _context4.stop();\n      }\n    }, _callee4);\n  }));\n  service.storeItemInfoResponses = /*#__PURE__*/function () {\n    var _ref5 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee5(receipt, transactionUuid) {\n      var itemInfoResponses;\n      return _regeneratorRuntime().wrap(function _callee5$(_context5) {\n        while (1) switch (_context5.prev = _context5.next) {\n          case 0:\n            itemInfoResponses = [];\n            angular.forEach(receipt.items, function (item) {\n              if (item.itemInfoResponses && item.itemInfoResponses.length > 0) {\n                itemInfoResponses = itemInfoResponses.concat(item.itemInfoResponses);\n              }\n            });\n            if (itemInfoResponses && itemInfoResponses.length > 0) {\n              if (receipt.itemInfoResponses && receipt.itemInfoResponses.length > 0) {\n                itemInfoResponses = receipt.itemInfoResponses.concat(itemInfoResponses);\n              }\n            } else {\n              itemInfoResponses = receipt.itemInfoResponses;\n            }\n            angular.forEach(itemInfoResponses, function (itemInfoResponse) {\n              itemInfoResponse.TransactionUuid = transactionUuid;\n            });\n            if (itemInfoResponses && itemInfoResponses.length > 0) {\n              itemInfoRepository.api.storeItemInfoResponses(itemInfoResponses);\n            }\n          case 5:\n          case \"end\":\n            return _context5.stop();\n        }\n      }, _callee5);\n    }));\n    return function (_x5, _x6) {\n      return _ref5.apply(this, arguments);\n    };\n  }();\n  service.clearItemInfoTransactionData = function (receipt) {\n    receipt.itemInfoResponses = undefined;\n  };\n  function executeItemInfos(deferred, receipt, item, promptType) {\n    if (!posConfig.hasConfiguredItemInfos()) {\n      deferred.resolve();\n      return;\n    }\n    if (promptType == promptEveryType.transaction && receipt.itemInfoResponses && receipt.itemInfoResponses.length > 0) {\n      deferred.resolve();\n      return;\n    }\n    var customAttributeIds = getCustomAttributeIds(receipt, item, promptType);\n    if (!customAttributeIds || customAttributeIds.length == 0) {\n      deferred.resolve();\n      return;\n    }\n    itemInfoRepository.api.getApplicableItemInfos(customAttributeIds, promptType).then(function (response) {\n      handleItemInfos(deferred, receipt, item, promptType, response);\n    }, function (error) {\n      deferred.resolve(error);\n    });\n  }\n  function getCustomAttributeIds(receipt, item, promptType) {\n    switch (promptType) {\n      case promptEveryType.line:\n        return getCustomAttributeIdsFromitem(item);\n      case promptEveryType.transaction:\n        return getCustomAttributeIdsFromReceipt(receipt);\n      default:\n        return;\n    }\n  }\n  function getCustomAttributeIdsFromitem(item) {\n    if (!item || !item.itemAttributeValues) {\n      return;\n    }\n    return item.itemAttributeValues.map(function (a) {\n      return a.customAttributeId;\n    });\n  }\n  function getCustomAttributeIdsFromReceipt(receipt) {\n    if (!receipt || !receipt.items) {\n      return;\n    }\n    var customAttributeIds = [];\n    angular.forEach(receipt.items, function (item) {\n      if (item.itemAttributeValues && item.itemAttributeValues.length > 0) {\n        customAttributeIds = customAttributeIds.concat(item.itemAttributeValues.map(function (a) {\n          return a.customAttributeId;\n        }));\n      }\n    });\n    return customAttributeIds;\n  }\n  function handleItemInfos(_x7, _x8, _x9, _x0, _x1) {\n    return _handleItemInfos.apply(this, arguments);\n  }\n  function _handleItemInfos() {\n    _handleItemInfos = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee6(deferred, receipt, item, promptType, response) {\n      var x, itemInfo, attributeValue, j, itemInfoResponse;\n      return _regeneratorRuntime().wrap(function _callee6$(_context6) {\n        while (1) switch (_context6.prev = _context6.next) {\n          case 0:\n            if (!(!response || !response.data)) {\n              _context6.next = 3;\n              break;\n            }\n            deferred.resolve();\n            return _context6.abrupt(\"return\");\n          case 3:\n            x = 0;\n          case 4:\n            if (!(x < response.data.length)) {\n              _context6.next = 23;\n              break;\n            }\n            itemInfo = response.data[x];\n            if (!(itemInfo.type === 2)) {\n              _context6.next = 16;\n              break;\n            }\n            attributeValue = false;\n            for (j = 0; j < item.itemAttributeValues.length; j++) {\n              if (itemInfo.customAttributeId === item.itemAttributeValues[j].customAttributeId && item.itemAttributeValues[j].attributeValue === \"true\") {\n                attributeValue = true;\n              }\n            }\n            if (!attributeValue) {\n              _context6.next = 14;\n              break;\n            }\n            _context6.next = 12;\n            return showItemInfo(itemInfo);\n          case 12:\n            itemInfoResponse = _context6.sent;\n            handleItemInfoResponse(receipt, item, itemInfo, promptType, itemInfoResponse);\n          case 14:\n            _context6.next = 20;\n            break;\n          case 16:\n            _context6.next = 18;\n            return showItemInfo(itemInfo);\n          case 18:\n            itemInfoResponse = _context6.sent;\n            handleItemInfoResponse(receipt, item, itemInfo, promptType, itemInfoResponse);\n          case 20:\n            x++;\n            _context6.next = 4;\n            break;\n          case 23:\n            posStorage.set(\"receipt\", receipt);\n            deferred.resolve();\n          case 25:\n          case \"end\":\n            return _context6.stop();\n        }\n      }, _callee6);\n    }));\n    return _handleItemInfos.apply(this, arguments);\n  }\n  function showItemInfo(_x10) {\n    return _showItemInfo.apply(this, arguments);\n  }\n  function _showItemInfo() {\n    _showItemInfo = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee7(itemInfo) {\n      var deferred;\n      return _regeneratorRuntime().wrap(function _callee7$(_context7) {\n        while (1) switch (_context7.prev = _context7.next) {\n          case 0:\n            deferred = $q.defer();\n            itemInfoModal.title = itemInfo.displayText;\n            createButtons(deferred, itemInfo);\n            itemInfoModal.isVisible = true;\n            return _context7.abrupt(\"return\", deferred.promise);\n          case 5:\n          case \"end\":\n            return _context7.stop();\n        }\n      }, _callee7);\n    }));\n    return _showItemInfo.apply(this, arguments);\n  }\n  function createButtons(deferred, itemInfo) {\n    itemInfoModal.buttons = [];\n    if (itemInfo.type == itemInfoType.question) {\n      if (itemInfo.questionChoices && itemInfo.questionChoices.length > 0) {\n        angular.forEach(itemInfo.questionChoices, function (choice) {\n          itemInfoModal.buttons.push(createButton(deferred, choice));\n        });\n      } else {\n        itemInfoModal.buttons.push(createButton(deferred, \"Ok\"));\n      }\n    } else {\n      itemInfoModal.buttons.push(createButton(deferred, \"OK\"));\n    }\n  }\n  function createButton(deferred, text) {\n    return {\n      label: text,\n      type: \"success\",\n      isDefault: false,\n      visible: true,\n      closes: true,\n      action: function action() {\n        return deferred.resolve(text);\n      }\n    };\n  }\n  function handleItemInfoResponse(receipt, item, itemInfo, promptType, response) {\n    if (itemInfo.type == itemInfoType.question) {\n      var itemInfoResponse = createItemInfoResponse(item, itemInfo, promptType, response);\n      storeItemInfoResponse(receipt, item, promptType, itemInfoResponse);\n    }\n  }\n  function createItemInfoResponse(item, itemInfo, promptType, response) {\n    var transactionLineUuid;\n    if (promptType == promptEveryType.line) {\n      transactionLineUuid = item.uuid;\n    }\n    return {\n      ItemInfoId: itemInfo.id,\n      TransactionLineUuid: transactionLineUuid,\n      Value: response\n    };\n  }\n  function storeItemInfoResponse(receipt, item, promptType, itemInfoResponse) {\n    if (promptType == promptEveryType.line) {\n      storeItemInfoResponseOnItem(item, itemInfoResponse);\n    } else if (promptType == promptEveryType.transaction) {\n      storeItemInfoResponseOnReceipt(receipt, itemInfoResponse);\n    }\n  }\n  function storeItemInfoResponseOnItem(item, itemInfoResponse) {\n    item.itemInfoResponses = [];\n    item.itemInfoResponses.push(itemInfoResponse);\n  }\n  function storeItemInfoResponseOnReceipt(receipt, itemInfoResponse) {\n    receipt.itemInfoResponses = [];\n    receipt.itemInfoResponses.push(itemInfoResponse);\n  }\n  return service;\n});\n","\"use strict\";\n\n/**\n * Manager factory service for the on-screen keyboard. Inject this into your controller\n * if you want to show or hide the keyboard programatically. Registering inputs is primarily\n * done by the onscreen-keys directive, but can also be used from a controller if needed.\n * Register keypad is only done by the global keypad directive.\n * @param  {$timeout}                 angular's $timeout service\n * @return {keypadManager}            The keypadManager service for using in controllers\n */\npos.factory(\"keypadManager\", function ($timeout, $parse, inputService, $window, $log, $rootScope) {\n  var keypadManager = {};\n  var keypad;\n\n  /**\n   * Register the keypads API methods\n   * @param  {object} _keypad The functions we need exposed from the keypad to register which input it should use, etc.\n   */\n  keypadManager.registerKeypad = function (_keypad) {\n    keypad = _keypad;\n  };\n\n  /**\n   * Register the active input. Primarily used by the onscreen-keys directive\n   * @param  {DOMElement}     input       Input DOM element\n   * @param  {function}       onEnter     Callback function for the OK button\n   * @param  {boolean}        forceNumpad\n   */\n  keypadManager.registerInput = function (input, onEnter, onDenomination) {\n    keypad.registerInput(input, onEnter, onDenomination);\n  };\n\n  /**\n   * Show the onscreen keyboard for an input element.\n   * If called with no parameters it will use the last registered input element as\n   * receiver of keypad input. If an inputElement is passed this will be saved as\n   * the last used input element.\n   * @param  {DOMELement|null|undefined} inputElement input to use as receiver of keypad buttons presses\n   * @param  {function} onEnter      Callback function for the OK button\n   */\n  keypadManager.show = function (inputElement, onEnter, forceNumpad, isNumericOnly, onDenomination, denominationCurrency) {\n    inputService.isDirty = false;\n    if (isNumericOnly) $rootScope.IsNumericOnly = true;\n    keypad.showKeys(inputElement, onEnter, forceNumpad, onDenomination, denominationCurrency);\n\n    /**\n     * Hide inputs below keypad, to prevent caret-bleeding\n     */\n    if (inputElement != null) {\n      var $keypadElement = angular.element(\".keyboard-wrap\"),\n        inputOffset = inputElement[0].getBoundingClientRect();\n\n      // Add a 400ms delay to ensure the the keypad height has been rendered properly\n      setTimeout(function () {\n        // Validate the input position relative to the keypad.\n        if ($window.innerHeight - $keypadElement.outerHeight() <= inputOffset.top) {\n          inputElement.addClass(\"below-keypad\");\n        }\n      }, 400);\n    }\n  };\n  keypadManager.setVoucherInformation = function (voucher) {\n    keypad.setVoucherInformation(voucher);\n  };\n  keypadManager.clearVoucherInformation = function () {\n    keypad.clearVoucherInformation();\n  };\n  keypadManager.isPassword = function (isPassword) {\n    keypad.isPassword(isPassword);\n  };\n\n  /**\n   * Hides the keypad\n   */\n  keypadManager.hide = function (noEvent) {\n    // hide disables global input, so we must only call hide if keypad was shown\n    // otherwise we'll end up disabling the global input directive instead\n    $rootScope.IsNumericOnly = false;\n    if (keypadManager.isVisible()) {\n      keypad.hideKeys(noEvent);\n    }\n  };\n\n  /**\n   * Returns keypad status\n   */\n  keypadManager.isVisible = function () {\n    return keypad.isVisible();\n  };\n\n  /**\n   * Get the start and end index of the current selection for an input element\n   *\n   * Chrome does not allow selection on number inputs so we try out different ways\n   * if we have to change type to allow selection, we have to use $timeout and\n   * allow the rest of the function to continue inside that timeout.\n   *\n   * slectionEnd wont be correct on the FIRST run unless we use the timeout\n   * BUT! Only if the input is populated by any other source than the keypad\n   * @param  {DOMElement} input           The input element to get selection on\n   * @param  {function}   continueFunc    Callback which takes start and end\n   *                                      index as parameters\n   * @return {object}                     Has the selectionStart and selectionEnd properties\n   */\n  keypadManager.getSelection = inputService.getSelection;\n\n  /**\n   * Select range of text in an input element\n   * @param  {Number}          start                zero-based index of start position of selection\n   * @param  {Number}          end                  zero-based index of end position of selection\n   * @param  {DOMElement|null} optionalUnboundInput An unbound input to use instead of the registered one\n   */\n  keypadManager.select = function (start, end, optionalUnboundInput) {\n    inputService.select(start, end, optionalUnboundInput || keypad.getRegisteredInput());\n  };\n  /**\n   * Select all the text in an input element\n   * @param  {DOMElement|null} optionalUnboundInput An unbound input to use instead of the registered one\n   */\n  keypadManager.selectAll = function (optionalUnboundInput) {\n    inputService.selectAll(optionalUnboundInput || keypad.getRegisteredInput());\n  };\n\n  /**\n   * Used to return the id of the registeredInput\n   */\n  keypadManager.getRegisteredInput = function () {\n    return keypad.getRegisteredInput();\n  };\n\n  /**\n   * Used to return the reference to the current set onEnter function\n   */\n  keypadManager.getRegisteredOnEnter = function () {\n    return keypad.getRegisteredOnEnter();\n  };\n  return keypadManager;\n});\n\n//\n/**\n * Directive for enabling focus on an input field to activate the on-screen keyboard.\n *\n * Usage:\n * <input onscreen-keys[=\"onEnterFunc()\"] [onscreen-keys-force-numpad='boolean']> or\n * <input onscreen-keys [on-enter=\"onEnterFunc()\"] (this works along side ddd-capture-global-input\n * which also uses on-enter)\n *\n * If you need the input to register it self as the current active input (for showing the keypad\n * programatically without knowing the element) you can use the onscreen-keys-activator='variable' attribute\n *\n * <input onscreen-keys[=\"onEnterFunc()\"] [onscreen-keys-activator='variable']>\n */\npos.directive(\"onscreenKeys\", function (keypadManager, $parse, $document, $timeout) {\n  return {\n    restrict: \"A\",\n    link: function link(scope, ele, attrs) {\n      var isNumericOnly = attrs.isNumericOnly ? attrs.isNumericOnly.toLowerCase() === \"true\" : false;\n      var forceNumpad = attrs.onscreenKeysForceNumpad ? attrs.onscreenKeysForceNumpad.toLowerCase() === \"true\" : false;\n      var autoSelect = attrs.onscreenKeysAutoSelect ? attrs.onscreenKeysAutoSelect.toLowerCase() === \"true\" : false;\n      var attrValue = attrs.onscreenKeys;\n      var attrDenominationValue = attrs.onDenomination;\n      ele.attr(\"readonly\", \"readonly\");\n      if (!attrValue || attrValue === \"onscreen-keys\") {\n        attrValue = attrs.onEnter;\n      }\n      var hideKeypad = function hideKeypad() {\n        $document[0].activeElement.blur();\n      };\n      var func = attrValue ? $parse(attrValue) : hideKeypad;\n      var onEnter = !func ? null : function () {\n        func(scope);\n      };\n      var hide = function hide() {\n        $timeout(keypadManager.hide, 0);\n      };\n      var denominationFunc = attrDenominationValue ? $parse(attrDenominationValue) : hideKeypad;\n      var onDenomination = !denominationFunc ? null : function () {\n        denominationFunc(scope);\n      };\n      keypadManager.registerInput(ele, onEnter, onDenomination);\n      ele.on(\"focus\", function (event, data) {\n        $timeout(function () {\n          keypadManager.show(ele, onEnter, forceNumpad, isNumericOnly);\n        }, 0);\n        if (autoSelect) keypadManager.selectAll();\n      });\n      ele.on(\"blur\", hide);\n      ele.on(\"$destroy\", hide);\n      var activator = attrs.onscreenKeysActivator;\n      if (activator) {\n        scope[activator] = function () {\n          keypadManager.show(ele, onEnter);\n        };\n      }\n    }\n  };\n});\npos.directive(\"keypad\", function ($state, versionService, posStorage) {\n  return {\n    restrict: \"E\",\n    controller: function controller(inputService, $timeout, $q) {\n      var input;\n      var onEnter;\n      var onDenomination;\n      var lowercase = false;\n      var version = versionService.getVersion();\n      this.getRegisteredInput = function () {\n        return input;\n      };\n      this.getRegisteredOnEnter = function () {\n        return onEnter;\n      };\n      this.registerInput = function (inputElement, onEnterFunc, onDenominationFunc) {\n        input = inputElement;\n        onEnter = onEnterFunc;\n        onDenomination = onDenominationFunc;\n      };\n      this.isExpanded = function () {\n        if (!input) throw \"Keypad not paired with an input element\";\n        return input.attr(\"type\") === \"text\" || input.attr(\"type\") === \"password\";\n      };\n      this.clearInput = function () {\n        input.val(\"\");\n        input.trigger(\"change\");\n      };\n      this.deleteChar = function () {\n        if (input.val().length > 0) {\n          input.val(input.val().substr(0, input.val().length - 1));\n          input.trigger(\"change\");\n        }\n      };\n      this.enter = function () {\n        if (onEnter) {\n          onEnter();\n        }\n      };\n      this.addCharacter = function (obj) {\n        // convert decimal seperator function to string\n        // the function binds on compile time so we need to pass in a function instead of a literal\n        // since the localization happens after the directive is compiled\n        if (typeof obj === \"function\") obj = obj();\n        if (obj.length > 2) {\n          obj = String.fromCharCode(obj.substr(2, obj.length));\n        }\n        if (lowercase) obj = obj.toLowerCase();\n        inputService.insertString(obj, input);\n      };\n      this.denominationClick = function (obj) {\n        inputService.setString(obj, input);\n        if (onDenomination) {\n          onDenomination();\n        } else if (onEnter) {\n          onEnter();\n        }\n      };\n      this.isLowerCase = function () {\n        return lowercase;\n      };\n      this.toggleCase = function () {\n        lowercase = !lowercase;\n      };\n      this.keysClear = function () {\n        if (input.val().length > 0) {\n          input.val(\"\");\n          input.trigger(\"change\");\n        }\n      };\n      this.keysCopy = function () {\n        if (!input.val().length == 0) {\n          navigator.clipboard.writeText(input.val());\n        }\n      };\n      this.keysClip = function () {\n        if (!input.val().length == 0) {\n          navigator.clipboard.writeText(input.val());\n          input.val(\"\");\n          input.trigger(\"change\");\n        }\n      };\n      this.keysPaste = function () {\n        navigator.clipboard.readText().then(function (text) {\n          return inputService.insertString(text, input);\n        });\n      };\n      if (!navigator.clipboard) {\n        navigator.clipboard = {\n          writeText: function writeText(text) {\n            return posStorage.set(\"keysClipboard\", text);\n          },\n          readText: function readText() {\n            var defer = $q.defer();\n            var text = posStorage.get(\"keysClipboard\");\n            defer.resolve(text);\n            return defer.promise;\n          }\n        };\n      }\n    }\n  };\n});\npos.directive(\"overlay\", function (keypadManager, $document, $timeout, inputService, $locale, $http, $templateCache, posConfig, $log, eventBus) {\n  return {\n    restrict: \"A\",\n    scope: true,\n    require: \"^keypad\",\n    templateUrl: \"views/partials/key-wrapper\",\n    link: function link(scope, ele, attrs, keypadCtrl) {\n      loadConfig();\n      $log.debug(\"Shop language: \" + scope.shopLanguage);\n      $http.get(\"views/keyboard/keyboard-\" + scope.shopLanguage).then(function success(response) {\n        $templateCache.put(\"views/keyboard/keyboard-\" + scope.shopLanguage, response.data);\n        scope.mainView = \"views/keyboard/keyboard-\" + scope.shopLanguage;\n      }, function error(response) {\n        scope.mainView = \"views/keyboard/keyboard-da-dk\";\n      });\n      scope.expandedKeys = false;\n      scope.showKeys = false;\n      scope.isPassword = false;\n      scope.denominationCurrency = null;\n      scope.voucher = null;\n      scope.placeholder = \"\";\n      var showKeysArguments = [];\n      var focusSelfTriggered = false;\n      ele.on(\"mousedown\", function (event) {\n        event.preventDefault();\n      });\n      var reflector;\n      function toggleReflection(input) {\n        if (typeof reflector === \"function\") {\n          reflector();\n        }\n        if (!input) return;\n        scope.placeholder = input.attr(\"placeholder\");\n        reflector = scope.$watch(function () {\n          return input.val();\n        }, function (value) {\n          return scope.reflection = value;\n        });\n      }\n      function groupDenominations(denominations) {\n        if (!denominations || denominations.length == 0) return null;\n        var groupSize = 5;\n        var groupedDenominations = [];\n        var index = 0;\n        while (index < denominations.length) {\n          groupedDenominations.push(denominations.slice(index, groupSize + index));\n          index += groupSize;\n        }\n        return groupedDenominations;\n      }\n      var keypad = {\n        showKeys: function showKeys(inputElement, onEnter, forceNumpad, onDenomination, denominationCurrency) {\n          // when showKeys is triggered programatically from keypadManager, we'll use the focus event\n          // to put the input in focus, which in return will end back here in showKeys. The only catch is that\n          // in the second trip to showKeys we will have lost the original function arguments but the one from the\n          // onscreen-keys directive. Therefore we'll keep track on whether this invocation is due to our own focus roundtrip\n          // and then use the arguments from the previous invocation.\n\n          if (!focusSelfTriggered) showKeysArguments = arguments;else focusSelfTriggered = false;\n          var activeElementIsRegisteredInput = $document[0].activeElement === keypadCtrl.getRegisteredInput()[0];\n          if (scope.showKeys && activeElementIsRegisteredInput) return;\n          if (showKeysArguments[0] /* inputElement */) {\n            keypadCtrl.registerInput(showKeysArguments[0] /* inputElement */, showKeysArguments[1] /* onEnter */, showKeysArguments[3] /* onDenomination */);\n          }\n          if (!activeElementIsRegisteredInput) {\n            // let the next function invocation know that we triggered this ourselves\n            focusSelfTriggered = true;\n            keypadCtrl.getRegisteredInput().focus();\n            scope.denominationCurrency = groupDenominations(denominationCurrency);\n            return;\n          }\n          toggleReflection(keypadCtrl.getRegisteredInput());\n          scope.expandedKeys = !(showKeysArguments[2] /* forceNumpad */ || !keypadCtrl.isExpanded());\n          scope.showKeys = true;\n          $timeout(function () {\n            inputService.enableGlobalCapture(keypadCtrl.getRegisteredInput(), showKeysArguments[1] /* onEnter */);\n          });\n        },\n        hideKeys: function hideKeys(noEvent) {\n          if (!noEvent) {\n            eventBus.notify(eventBus.events.keyboard.hidden);\n          }\n          toggleReflection();\n          scope.showKeys = false;\n          var input = keypadCtrl.getRegisteredInput() || {};\n          inputService.disableGlobalCapture(input);\n          $timeout(function () {\n            var activeElementIsRegisteredInput = $document[0].activeElement === input[0];\n            if (activeElementIsRegisteredInput) {\n              $document[0].activeElement.blur();\n            }\n          });\n\n          // Reset any input field, that has the below-keypad class.\n          angular.element(\".below-keypad\").length && angular.element(\".below-keypad\").removeClass(\"below-keypad\");\n        },\n        isVisible: function isVisible() {\n          return scope.showKeys;\n        },\n        isPassword: function isPassword(_isPassword) {\n          scope.isPassword = _isPassword;\n        },\n        setVoucherInformation: function setVoucherInformation(voucher) {\n          scope.voucher = voucher;\n        },\n        clearVoucherInformation: function clearVoucherInformation() {\n          scope.voucher = null;\n        },\n        registerInput: keypadCtrl.registerInput,\n        getRegisteredInput: keypadCtrl.getRegisteredInput,\n        getRegisteredOnEnter: keypadCtrl.getRegisteredOnEnter\n      };\n      keypadManager.registerKeypad(keypad);\n      scope.toggleExpandedKeys = function () {\n        scope.expandedKeys = !scope.expandedKeys;\n      };\n      scope.hideKeyboard = function () {\n        return keypad.hideKeys();\n      };\n      scope.decimalSeparator = function () {\n        return $locale.NUMBER_FORMATS.DECIMAL_SEP;\n      };\n      scope.enter = keypadCtrl.enter;\n      scope.toggleCase = keypadCtrl.toggleCase;\n      scope.keypadArray = keypadCtrl.addCharacter;\n      scope.denominationClick = keypadCtrl.denominationClick;\n      scope.deleteChar = keypadCtrl.deleteChar;\n      scope.clearInput = keypadCtrl.clearInput;\n      scope.isLowerCase = keypadCtrl.isLowerCase;\n      scope.keysSelectAll = keypadCtrl.keysSelectAll;\n      scope.keysClear = keypadCtrl.keysClear;\n      scope.keysCopy = keypadCtrl.keysCopy;\n      scope.keysClip = keypadCtrl.keysClip;\n      scope.keysPaste = keypadCtrl.keysPaste;\n      function loadConfig() {\n        scope.shopLanguage = posConfig.getLocale();\n      }\n      eventBus.subscribe(eventBus.events.pos.newConfig, scope, loadConfig);\n    }\n  };\n});\npos.directive(\"inview\", function ($locale) {\n  return {\n    restrict: \"A\",\n    require: \"keypad\",\n    scope: {\n      target: \"=\",\n      onEnter: \"&\"\n    },\n    templateUrl: \"views/partials/key-pad-inview\",\n    link: function link(scope, ele, attrs, keypadCtrl) {\n      var input = angular.element(scope.target);\n      keypadCtrl.registerInput(input, scope.onEnter);\n      scope.decimalSeparator = function () {\n        return $locale.NUMBER_FORMATS.DECIMAL_SEP;\n      };\n      scope.enter = keypadCtrl.enter;\n      scope.toggleCase = keypadCtrl.toggleCase;\n      scope.keypadArray = keypadCtrl.addCharacter;\n      scope.deleteChar = keypadCtrl.deleteChar;\n      scope.clearInput = keypadCtrl.clearInput;\n      scope.getDotOrComma = keypadCtrl.getDotOrComma;\n    }\n  };\n});\n","\"use strict\";\n\npos.value(\"momentFormat\", \"DD/MM/YYYY\");\n","\"use strict\";\n\npos.factory(\"notification\", function ($injector, posStorage, uuid, $q, indexdb, ngToast, eventBus) {\n  var notification = {};\n  var INFO_MESSAGE_UPDATED_KEY = \"infoMessageUpdated\";\n  var NOTIFICATIONS_KEY = \"notifications\";\n  var messageArray = [];\n  indexdb.notifications.getAll().then(function (ns) {\n    return ns.forEach(function (n) {\n      return messageArray.push(n);\n    });\n  });\n\n  //TODO: remove and replace with trackPosMessage service\n  notification.currentLogLevel = 0;\n  notification.logLevel = {};\n  notification.logLevel.INFO = 0;\n  notification.logLevel.SUCCESS = 1;\n  notification.logLevel.WARNING = 2;\n  notification.logLevel.ERROR = 3;\n  notification.logLevel.DISABLED = 99;\n  notification.getMessages = function () {\n    return messageArray;\n  };\n  notification.clearMessages = function () {\n    // setting a new empty array will decouple the reference from header controller and break notification aside, so we do this instead.\n    messageArray.length = 0;\n    indexdb.notifications.clear();\n  };\n\n  //TODO: remove and replace with trackPosMessage service\n  var logLevel = function logLevel(type) {\n    if (isNaN(type)) {\n      switch (type) {\n        case \"info\":\n          return notification.logLevel.INFO;\n        case \"success\":\n          return notification.logLevel.SUCCESS;\n        case \"warning\":\n          return notification.logLevel.WARNING;\n        case \"error\":\n          return notification.logLevel.ERROR;\n        default:\n          return notification.logLevel.INFO;\n      }\n    }\n    return type;\n  };\n\n  //TODO: remove and replace with trackPosMessage service\n  var generateLogModel = function generateLogModel(type, title, body, data) {\n    var posConfig = $injector.get(\"posConfig\");\n    var version = $injector.get(\"versionService\").getVersion();\n    return {\n      shopId: posConfig.shopId,\n      posId: posConfig.posId,\n      message: title + \": \" + body,\n      clientTime: new Date(),\n      type: logLevel(type),\n      posVersion: version,\n      data: data ? JSON.stringify(data) : null\n    };\n  };\n  notification.removeMessage = function (message) {\n    var index = messageArray.indexOf(message);\n    if (index >= 0) {\n      messageArray.splice(index, 1);\n      indexdb.notifications.remove(message.uuid);\n    }\n  };\n  notification.setLogLevel = function (level) {\n    notification.currentLogLevel = logLevel(level);\n  };\n  notification.pop = function (type, title, body, timeout, otherOptions) {\n    if (type == \"warn\") type = \"warning\";else if (type == \"error\") {\n      type = \"danger\";\n    }\n    var options = otherOptions || {};\n    options.className = type;\n    options.timeout = timeout || 5000;\n    options.onDismiss = function () {\n      eventBus.notify(eventBus.events.toaster.clicked, null);\n    };\n    if (body) {\n      options.content = \"<strong>\".concat(title, \"</strong><br /><p>\").concat(body, \"</p>\");\n    } else {\n      options.content = \"<p>\".concat(title, \"</p>\");\n    }\n    ngToast.create(options);\n  };\n  notification.notify = function (type, title, body, timeout, bodyOutputType) {\n    var obj = {};\n    if (!angular.isObject(type)) {\n      obj = {\n        type: type,\n        title: title,\n        body: body,\n        bodyOutputType: bodyOutputType,\n        timestamp: new Date()\n      };\n    } else {\n      obj = type;\n    }\n    var existingMessage;\n    angular.forEach(messageArray, function (message) {\n      if (message.type === obj.type && message.title === obj.title && message.body === obj.body) existingMessage = message;\n    });\n    if (!existingMessage) {\n      obj.uuid = uuid();\n      messageArray.unshift(obj);\n      indexdb.notifications.add(obj);\n      return obj;\n    } else {\n      return existingMessage;\n    }\n  };\n  function handleMessages(messages) {\n    var messageGroups = {};\n    var newestMessageDate;\n    angular.forEach(messages, function (message) {\n      // skip message if it's expired\n      if (moment(message.expireAt).isBefore(moment())) return;\n\n      // find the newest message's createdAt date\n      if (!newestMessageDate) newestMessageDate = moment(message.createdAt);else if (moment(message.createdAt).isAfter(newestMessageDate)) newestMessageDate = moment(message.createdAt);\n\n      // find the message GUID object or create a new one\n      var messageGroup = messageGroups[message.messageGuid] || {\n        uuid: uuid()\n      };\n      messageGroup.type = message.type;\n      messageGroup.timestamp = message.createdAt;\n      messageGroup[message.language] = {\n        title: message.title,\n        body: message.message,\n        bodyOutputType: \"trustedHtml\"\n      };\n      messageGroups[message.messageGuid] = messageGroup;\n    });\n\n    // store the newest message's createdAt date\n    if (newestMessageDate) posStorage.set(INFO_MESSAGE_UPDATED_KEY, newestMessageDate.toISOString());\n    angular.forEach(messageGroups, function (message) {\n      messageArray.unshift(message);\n    });\n    indexdb.notifications.merge(messageArray);\n    return messageGroups;\n  }\n  return notification;\n}).factory(\"notificationHelper\", function ($injector) {\n  var helper = {};\n  helper.getMessageBody = function getMessageBody(message) {\n    return extractText(message, \"body\");\n  };\n  helper.getMessageTitle = function getMessageTitle(message) {\n    return extractText(message, \"title\");\n  };\n  helper.getMessageTimestamp = function getMessageTimestamp(message) {\n    return extractText(message, \"timestamp\");\n  };\n  function extractText(message, property) {\n    // if it's not an API info message there wont be any language groups, just return the message\n    if (message[property]) return message[property];\n\n    // get the message for the current language or get the first message on the object if we can't find anything suitable\n    var translatedMessage = message[getLanguage(message)] || message[Object.keys(message)[1]];\n    return translatedMessage[property];\n  }\n  function getLanguage(message) {\n    var posConfig = $injector.get(\"posConfig\");\n    var clerkLoginService = $injector.get(\"clerkLoginService\");\n\n    // set default language to to shop language\n    var displayLanguage = \"en-gb\"; // use as fallback\n    var shopLanguage = posConfig.getLocale();\n    var clerkLanguage;\n    if (clerkLoginService.isLoggedIn()) clerkLanguage = posConfig.mapToLanguage(clerkLoginService.currentUser().language);\n    if (clerkLanguage && message[clerkLanguage]) displayLanguage = clerkLanguage;else if (message[shopLanguage]) displayLanguage = shopLanguage;\n    return displayLanguage;\n  }\n  return helper;\n});\n","\"use strict\";\n\npos.directive(\"notificationMessage\", function (notificationHelper) {\n  return {\n    restrict: \"E\",\n    templateUrl: \"views/partials/notification-message\",\n    scope: {\n      message: \"=\"\n    },\n    link: function link(scope, ele, attrs) {\n      scope.getMessageBody = function () {\n        return notificationHelper.getMessageBody(scope.message);\n      };\n      scope.getMessageTitle = function () {\n        return notificationHelper.getMessageTitle(scope.message);\n      };\n      scope.getMessageTimestamp = function () {\n        return notificationHelper.getMessageTimestamp(scope.message);\n      };\n    }\n  };\n});\n","\"use strict\";\n\npos.factory(\"offlineChecker\", function ($q, $log, notification, $timeout, $rootScope) {\n  var offlineChecker = {\n    responseError: function responseError(response) {\n      response.config = response.config || {};\n      // if the error is due to 401 Unauthorized or 403 Forbidden let auth interceptor handle it or it's not requested as a trackable device\n      if (response.status === 401 || response.status === 403 || !response.config.device) {\n        return $q.reject(response);\n      }\n      var device = response.config.device;\n      if (response.status !== 404 && response.status !== -1) {\n        if (!response.config.ignoreError && response.status === 500 && device.isOnline) {\n          notification.pop(\"error\", \"Whoops\", \"It appears a request to \" + response.config.url + \" failed with status \" + response.status);\n        }\n        return $q.reject(response);\n      }\n\n      // If the API is returning a status other than -1 it is not offline\n      if (device.isApi && response.status !== -1) {\n        return $q.reject(response);\n      }\n      if (device.isOnline) $rootScope.$broadcast(\"device:offline\", device);else $rootScope.$broadcast(\"device:retry:failed\", device);\n\n      // Begin reconnect procedure for device\n      if (response.config.reconnect || device.isOnline) {\n        var random = Math.floor(Math.random() * 1000000000);\n        var url = device.isApi ? \"isonline?_\" + random : \"/POSServiceHandler.aspx/WakeUp\";\n        $timeout(function () {\n          return device({\n            method: device.isApi ? \"GET\" : \"POST\",\n            url: url,\n            data: {},\n            reconnect: true,\n            ignoreLoadingBar: true,\n            dontTrack: true\n          }, true);\n        }, 10000);\n      }\n      device.isOnline = false;\n      return $q.reject(response);\n    },\n    response: function response(_response) {\n      if (!_response) return _response;\n      _response.config = _response.config || {};\n      var device = _response.config.device;\n      if (device !== undefined) {\n        if (!device.isOnline) $rootScope.$broadcast(\"device:retry:success\", device);\n        device.isOnline = true;\n      }\n      return _response;\n    },\n    request: function request(config) {\n      if (config.device !== undefined && !config.device.isOnline) $rootScope.$broadcast(\"device:retry:start\", config.device);\n      return config;\n    }\n  };\n  return offlineChecker;\n});\npos.config(function ($httpProvider) {\n  $httpProvider.interceptors.push(\"offlineChecker\");\n});\n","\"use strict\";\n\npos.factory(\"portalService\", function ($window) {\n  var service = {};\n  service.buildMessage = function (type, title, text) {\n    var message = {\n      title: title,\n      text: text,\n      type: type\n    };\n    return encodeURIComponent(JSON.stringify(message));\n  };\n  service.redirectToPortalWithMessage = function (type, title, text) {\n    var message = this.buildMessage(type, title, text);\n    if (IN_DEBUG_MODE) {\n      console.warn(\"Debugging active => redirection to Portal aborted. Message was '\" + title + \"' and '\" + text + \"' \");\n      return;\n    }\n    $window.location = \"DDD_PORTAL_URL_PLACEHOLDER/#/?message=\" + message;\n  };\n  return service;\n});\n","\"use strict\";\n\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _regeneratorRuntime() { \"use strict\"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return r; }; var t, r = {}, e = Object.prototype, n = e.hasOwnProperty, o = \"function\" == typeof Symbol ? Symbol : {}, i = o.iterator || \"@@iterator\", a = o.asyncIterator || \"@@asyncIterator\", u = o.toStringTag || \"@@toStringTag\"; function c(t, r, e, n) { return Object.defineProperty(t, r, { value: e, enumerable: !n, configurable: !n, writable: !n }); } try { c({}, \"\"); } catch (t) { c = function c(t, r, e) { return t[r] = e; }; } function h(r, e, n, o) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype); return c(a, \"_invoke\", function (r, e, n) { var o = 1; return function (i, a) { if (3 === o) throw Error(\"Generator is already running\"); if (4 === o) { if (\"throw\" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var u = n.delegate; if (u) { var c = d(u, n); if (c) { if (c === f) continue; return c; } } if (\"next\" === n.method) n.sent = n._sent = n.arg;else if (\"throw\" === n.method) { if (1 === o) throw o = 4, n.arg; n.dispatchException(n.arg); } else \"return\" === n.method && n.abrupt(\"return\", n.arg); o = 3; var h = s(r, e, n); if (\"normal\" === h.type) { if (o = n.done ? 4 : 2, h.arg === f) continue; return { value: h.arg, done: n.done }; } \"throw\" === h.type && (o = 4, n.method = \"throw\", n.arg = h.arg); } }; }(r, n, new Context(o || [])), !0), a; } function s(t, r, e) { try { return { type: \"normal\", arg: t.call(r, e) }; } catch (t) { return { type: \"throw\", arg: t }; } } r.wrap = h; var f = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var l = {}; c(l, i, function () { return this; }); var p = Object.getPrototypeOf, y = p && p(p(x([]))); y && y !== e && n.call(y, i) && (l = y); var v = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(l); function g(t) { [\"next\", \"throw\", \"return\"].forEach(function (r) { c(t, r, function (t) { return this._invoke(r, t); }); }); } function AsyncIterator(t, r) { function e(o, i, a, u) { var c = s(t[o], t, i); if (\"throw\" !== c.type) { var h = c.arg, f = h.value; return f && \"object\" == _typeof(f) && n.call(f, \"__await\") ? r.resolve(f.__await).then(function (t) { e(\"next\", t, a, u); }, function (t) { e(\"throw\", t, a, u); }) : r.resolve(f).then(function (t) { h.value = t, a(h); }, function (t) { return e(\"throw\", t, a, u); }); } u(c.arg); } var o; c(this, \"_invoke\", function (t, n) { function i() { return new r(function (r, o) { e(t, n, r, o); }); } return o = o ? o.then(i, i) : i(); }, !0); } function d(r, e) { var n = e.method, o = r.i[n]; if (o === t) return e.delegate = null, \"throw\" === n && r.i[\"return\"] && (e.method = \"return\", e.arg = t, d(r, e), \"throw\" === e.method) || \"return\" !== n && (e.method = \"throw\", e.arg = new TypeError(\"The iterator does not provide a '\" + n + \"' method\")), f; var i = s(o, r.i, e.arg); if (\"throw\" === i.type) return e.method = \"throw\", e.arg = i.arg, e.delegate = null, f; var a = i.arg; return a ? a.done ? (e[r.r] = a.value, e.next = r.n, \"return\" !== e.method && (e.method = \"next\", e.arg = t), e.delegate = null, f) : a : (e.method = \"throw\", e.arg = new TypeError(\"iterator result is not an object\"), e.delegate = null, f); } function w(t) { this.tryEntries.push(t); } function m(r) { var e = r[4] || {}; e.type = \"normal\", e.arg = t, r[4] = e; } function Context(t) { this.tryEntries = [[-1]], t.forEach(w, this), this.reset(!0); } function x(r) { if (null != r) { var e = r[i]; if (e) return e.call(r); if (\"function\" == typeof r.next) return r; if (!isNaN(r.length)) { var o = -1, a = function e() { for (; ++o < r.length;) if (n.call(r, o)) return e.value = r[o], e.done = !1, e; return e.value = t, e.done = !0, e; }; return a.next = a; } } throw new TypeError(_typeof(r) + \" is not iterable\"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, c(v, \"constructor\", GeneratorFunctionPrototype), c(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction), GeneratorFunction.displayName = c(GeneratorFunctionPrototype, u, \"GeneratorFunction\"), r.isGeneratorFunction = function (t) { var r = \"function\" == typeof t && t.constructor; return !!r && (r === GeneratorFunction || \"GeneratorFunction\" === (r.displayName || r.name)); }, r.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, c(t, u, \"GeneratorFunction\")), t.prototype = Object.create(v), t; }, r.awrap = function (t) { return { __await: t }; }, g(AsyncIterator.prototype), c(AsyncIterator.prototype, a, function () { return this; }), r.AsyncIterator = AsyncIterator, r.async = function (t, e, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(h(t, e, n, o), i); return r.isGeneratorFunction(e) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, g(v), c(v, u, \"Generator\"), c(v, i, function () { return this; }), c(v, \"toString\", function () { return \"[object Generator]\"; }), r.keys = function (t) { var r = Object(t), e = []; for (var n in r) e.unshift(n); return function t() { for (; e.length;) if ((n = e.pop()) in r) return t.value = n, t.done = !1, t; return t.done = !0, t; }; }, r.values = x, Context.prototype = { constructor: Context, reset: function reset(r) { if (this.prev = this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = \"next\", this.arg = t, this.tryEntries.forEach(m), !r) for (var e in this) \"t\" === e.charAt(0) && n.call(this, e) && !isNaN(+e.slice(1)) && (this[e] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0][4]; if (\"throw\" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(r) { if (this.done) throw r; var e = this; function n(t) { a.type = \"throw\", a.arg = r, e.next = t; } for (var o = e.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i[4], u = this.prev, c = i[1], h = i[2]; if (-1 === i[0]) return n(\"end\"), !1; if (!c && !h) throw Error(\"try statement without catch or finally\"); if (null != i[0] && i[0] <= u) { if (u < c) return this.method = \"next\", this.arg = t, n(c), !0; if (u < h) return n(h), !1; } } }, abrupt: function abrupt(t, r) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var n = this.tryEntries[e]; if (n[0] > -1 && n[0] <= this.prev && this.prev < n[2]) { var o = n; break; } } o && (\"break\" === t || \"continue\" === t) && o[0] <= r && r <= o[2] && (o = null); var i = o ? o[4] : {}; return i.type = t, i.arg = r, o ? (this.method = \"next\", this.next = o[2], f) : this.complete(i); }, complete: function complete(t, r) { if (\"throw\" === t.type) throw t.arg; return \"break\" === t.type || \"continue\" === t.type ? this.next = t.arg : \"return\" === t.type ? (this.rval = this.arg = t.arg, this.method = \"return\", this.next = \"end\") : \"normal\" === t.type && r && (this.next = r), f; }, finish: function finish(t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[2] === t) return this.complete(e[4], e[3]), m(e), f; } }, \"catch\": function _catch(t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[0] === t) { var n = e[4]; if (\"throw\" === n.type) { var o = n.arg; m(e); } return o; } } throw Error(\"illegal catch attempt\"); }, delegateYield: function delegateYield(r, e, n) { return this.delegate = { i: x(r), r: e, n: n }, \"next\" === this.method && (this.arg = t), f; } }, r; }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"next\", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"throw\", n); } _next(void 0); }); }; }\nvar LogRocket = require(\"logrocket\");\npos.factory(\"posConfig\",\n/**\n * A factory service to handle all needed configuration for the POS. All functions exposed on the posconfig object is\n * meant to be called individually at some point. Helper methods are just defined in the local scope.\n * @return {promise}\n */\nfunction ($log, articles, posStorage, store, backend, $cookies, configRepository, $q, tokenService, $window, $translate, tmhDynamicLocale, $injector, indexdb, signalr, portalService, notification, eventBus, $timeout, $interval, $state, idleChecker, $http) {\n  \"use strict\";\n\n  $log.debug(\"Creating PosConfig service\");\n  var CONFIG_KEY = \"posConfig\";\n  var posconfig = {};\n  var currencies = {};\n  var readyPromise = $q.defer();\n  var blockNavigationPaymentTypes = [\"Card\"];\n  var blockCancellationPaymentTypes = [\"Card\", \"ManualCard\"];\n  var posConfigReloadIntervalPromise = null;\n  var serviceWorkerInitialised = false;\n  // Unused since ID-771 (virtual connectors are filtered out); removed with the old virtual connector code in ID-707.\n  // eslint-disable-next-line no-unused-vars\n  var _virtualConnectorUrl = \"VIRTUAL_CONNECTOR_URL_PLACEHOLDER\";\n  idleChecker.init();\n  var icons = {\n    creditvoucher: \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAB6klEQVR4Xu2ZPU7EQAyFbZYejsBN4AoLFVoKKJEWwRFyBBBIlFCwooK9AtyEI0DPYpRIFBkRWZZnnJHyto0z4/n8/JNZpon/eOLnJwCAAiZOACkwcQGMWwTvn9d7bQDOj+cfYwVitBS4Xa0vSaTpDs7cXCzmN2NACAfQRn2zkQdiOugdWOhtNuOzaDWEAviLOjPt/hdtEfqMVkMIgMGoD2k+UA1mAHerV8mVq0L03pUAov1cay4Xh6YzmYxbJ/MAkC8SapYnR9fdmk8vV8TUEPGOF0T1ANqob2/xaVrs2jT5/pFHrxoqBtCP+lCkvWoIB2Dd0Cvx9P00Ja3+uGuAdUMAyEwACkjaslWRSAGrIr2Ss+6n2Xv9gQI0wrnbjnU/zb46BWgOeUfptMhp+2kAs6eA5hAAOL8moYDkc1dTXHgKaBvmfg4AmAT7N1QYhaOvxKxVGW0QbdB3q2xVnNZ1MAlqhPAxlBDwDh5W4Jq915/sKaA5nPs5ANQ2CWoRwRyAOQBzgOvv9eoHodxVXltPqzna+2iDGiFMgpgE+wS8OWdVnGbv9Qc1QCOs1QDr+6Xtw+8ESx/Iuj4ARF+KWiNU2r64AkofIHp9cxeIdrD0fgBQmnDt60MBtUeotH9QQGnCta8PBdQeodL+/QLjwNVQdESyUAAAAABJRU5ErkJggg==\"\n  };\n  var defaultPaymentTypes = [{\n    type: \"Cash\",\n    translation: \"button/cash\",\n    icon: \"icons8-coins\",\n    style: null,\n    amountSuggestion: \"rounded\",\n    paymentStrategy: \"default\",\n    // default is send request to Connector and just add the response as paymentLine,\n    buttonState: \"rightmenupayment/cash\"\n  }, {\n    type: \"Card\",\n    translation: \"button/card\",\n    icon: \"icons8-bank-cards\",\n    paymentStrategy: \"defaultCard\",\n    // default card uses the Connector to handle the terminal integration\n    buttonState: \"rightmenupayment/card\"\n  }, {\n    type: \"ManualCard\",\n    translation: \"button/manualcard\",\n    icon: \"icons8-Bank-Cards\",\n    buttonState: \"rightmenupayment/manualCard\",\n    iconSource: \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAACHUlEQVRYR+2XsU7bUBSG/2MnoEwVT9B2A4kB3iBvAEyV6lJVqh2x0aHCwNKyQJKpY+W0agVYiA3egPACQWKuRIeqKwwtCCk+1Ulyo4vl2E6wQwc8ebg+/3fP/c8514QHfuiB9fEI8H9loOr5nwAsEOFZFt5gxgURvruOtTUoXj8DIk6E1SyEI2JsuY71MSq2DnBJhCfEmF+rWGdZgNQ9f44JLcnEesV6HgtQa/gsC1zHytQXSXH7YvpC9Z5FFvQYUZ4YK4AG0/dEJECWO9czG+WJsQLIxsKeGBuAiDNwTECnwlRZjgWAGVdMweKGs3wSPt7cAaqef2kAZdVbthu77wpt4/fayqtDgckdQIwn4vXP+y+Y6BsMlDpZCHBtmtczuQOIVkfcpIPehtu9YzDBwY/cAXTxgPmmaNxMC0CbSxfiy1wBosTf2/bPbW/vi0nGWwHKbRgliXfLkqt6BmRcfhi1C0qpKbenEW9z8HWzsmzfmXy1hi8QbwA8HQZkVPE7ZRgWTBqjUYDD7Fx9P3D2SwMZ5oIyinhSBpI9QbTk2i+PhhVXzSkWoDe5Yj0xUbid+vN3crY4wafSZFSd66XWrfmu4TpNqdcZE48grQn1mpYmEyceeydMKxheV/X2W0Q0B6DpOlZZAYV3Pij+vS+gyqwyXJhQJEIhrXiiB9JkJeoCq595Uox7ZUBmO7GxY4B/MXAeEDc3ndfyd5X6+Qcil66GP3yDzwAAAABJRU5ErkJggg==\"\n  }, {\n    type: \"Currency\",\n    translation: \"button/currency\",\n    icon: \"icons8-money-bag-yen\",\n    buttonState: \"rightmenupayment/currency\"\n  }, {\n    type: \"GiftCertificate\",\n    translation: \"button/giftcertificate\",\n    icon: \"icons8-gift-card\",\n    paymentStrategy: \"defaultVoucher\",\n    buttonState: \"rightmenupayment/giftCertificate\"\n  }, {\n    type: \"Voucher\",\n    translation: \"button/giftcertificate\",\n    icon: \"icons8-gift-card\",\n    paymentStrategy: \"defaultVoucher\",\n    buttonState: \"rightmenupayment/giftCertificate\"\n  }, {\n    type: \"DownPayment\",\n    translation: \"button/downPayment\",\n    icon: \"icons8-View-details\",\n    paymentStrategy: \"defaultDownPayment\",\n    buttonState: \"rightmenupayment/downPayment\",\n    iconSource: icons.creditvoucher,\n    style: \"display: none;\"\n  }, {\n    type: \"ForeignGiftCertificate\",\n    translation: \"button/foreigngiftcertificate\",\n    icon: \"icons8-Gift-Card\",\n    buttonState: \"rightmenupayment/foreignGiftCertificate\",\n    paymentStrategy: \"foreignVoucher\",\n    iconSource: \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAACw0lEQVRYR+1WQXISURB9PQRYwg3EE4gnkJxA1plYQpXMNmSTISvNiuCGsLIKrALLoEvxBCEnkJxAuAEuBZm2epiPfybADAiVTdjBH7pfv37v/SE88IceuD8eATwy4GPgstm9AvCSCJl9iJMZQyJ07JJ5oeovAEhzIpzso/GSmhd2yXwnv+sAxkRIEeP5mWUOlgGptbosv9slcyvtvG92s0z4IUxULPOpD0CU4lGeCWMwWGMxSZTiUZ7ZGYC5Jvi1FGSmXjI+OT0tFsfyvd5up39PE3Uizs8b0pUurHUgIjGwVJCMQSI+OZTik2niBoRsoNFCWLsAsBDkbGaMKTbrEdEzBveJiUB4wcx3PIvlYzEnHRTWTgGIIzzKxcOp+UrwKxmfZGQlStkARnbJDM2PSCuotbri0bdhglq2AtUg7L/Kyitd4IEoAHgSUmwEuOnmBksQgKyKiHogGjg8Gxswcsycr1jHrobW2lCo1wQ3cuAUwEaGAEnNFDxhKneETb3sfC0AtQqZIhmf5vw2jPdFmABC1V9tfc4RjJTBND6zjm51IGsBXDavB9LEgXN4XnrV1wUkRQ0YNwJO0RmcsPbxSx7stAFK/zvjsZ4boUkoa1CTBxWsnwWbV5vdgkFoz13DdwD1CciKhT0ndSqWWQwFoBeOGsXVD18zxoHzU/7rMIrnltlRddx1sNETDQmzewGgkpQZjYpllu+tpnVdBqjOwPe9XMe1ZrcvVCvt3FuPx5D7gqIOtwwff23GrW2ZuagAJD19LxYbhM9Ky0vC1TyKAf5kl44lzHwf/XyrN5uwwNHvDmaUK5bZWDDtWpO/uQLVRRhWdJNz3YKe5YYgHhJTWl3jSqA7Z8DvfzQAznmJ6c4gNykZVLDfHPV8d8EmE656Vm+u+19yAQd/3KtaEnVpFP8vgHXhs672TlcgDLhTaskXNthftuHZabPLqlYAAAAASUVORK5CYII=\"\n  }, {\n    type: \"CreditVoucher\",\n    translation: \"button/creditvoucher\",\n    icon: \"icons8-View-details\",\n    paymentStrategy: \"defaultVoucher\",\n    buttonState: \"rightmenupayment/creditVoucher\",\n    iconSource: icons.creditvoucher\n  }, {\n    type: \"ForeignCreditVoucher\",\n    translation: \"button/foreigncreditvoucher\",\n    icon: \"icons8-View-Details\",\n    buttonState: \"rightmenupayment/foreignCreditVoucher\",\n    paymentStrategy: \"foreignVoucher\",\n    iconSource: \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAACEklEQVRYR+2WQXISURCG/38qUOyCJzDegBvIDWK2GSyhymErbBxcaVYxboLbsABLWYsn0NwATyCeQNwpmUxbzfiUTDG+eWRSlFWZ5Uy/6a//v997TWz54Zbz4xZgYwWOB2/rFG+oFgrj1rPg4adN7HQGOB0Oq4uo9Bxg52pC6YdBo+sKkQlwMhiL7WcieK0xJJ7YYsPAX5trU4CvMeKmkV3t8OCNANzNAtkYIGuhrWLz3Sh5C/D/K5D20rZLTMWF9cDWAfJ2fTquMAW2DnANC2YARmHgv1hXhPUkzGqmvE1oUy43gO1H//r+6mxcA7irMU/bh+ersTcKYK5sEnt/k8ocYD8M/KPlRZZFnuV52pI164/U7+OzcdMjknlB5DPIGQVVEPeTdxj12n6rcIA48u5VKj/mi6j0BWAVkG4YNPoG9LcqExK7IA9yA7j0wMngXQfgqQAfeoH/IL32jzqC8xsBeDkYTwjsa4Xh48NJGiCZqsrfnHrAUYERwEeFALgk1tjyzuLOIio11QIIJmHbP7iWBS4AIvgul15Nm/DnRXmmjSaCTq/tL2dHfZLxje+1QWNB9i5wSZyO1YNHKB+TXaB7DlMBpqDsEawn8fImDBpN57HcBraaXHcBgdrqsKoqkdCDaHk3FApwtfKkQk2i7y8ZL9Wo7ETTbqs1N4UUBqBby/hu5LWpVbgCyQEjdVN5HoBfPK5cESpTq4AAAAAASUVORK5CYII=\"\n  }, {\n    type: \"Webshop\",\n    translation: \"button/webshop\",\n    icon: \"icons8-shopping-basket\",\n    buttonState: \"rightmenupayment/webshop\"\n  }, {\n    type: \"Bank\",\n    translation: \"button/bank\",\n    icon: \"icons8-library\",\n    buttonState: \"rightmenupayment/bank\"\n  }, {\n    type: \"DebitCard\",\n    translation: \"button/debitcard\",\n    icon: \"icons8-Bank-Cards\",\n    buttonState: \"rightmenupayment/debitCard\",\n    iconSource: \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAABmUlEQVRYR+2WPU7DQBCF31j8lMAJgBMQTgK0uCESTovSYLrYnUMDtYOUFJgWboK5QY6QOoUHrbHNYq03TrKxkSBVitHMN89vZ4bQ8o9aro9/gN+lQBBGjwDOiHBkwhvMmBJh4jq2X5WvUEAUJ8KNicKKHL7r2J4qtwwwI8IeMU5ve3ZsAuQ+jDpMeBdK3PXsYy3AcBSxCHAd26gvFuUtismB+X8TKsg5VJ5oFECCKTyhBDDZuaysyhONAojGyp5oDKCsam72RgB0L+tPAExdx05Hu2ombFyBh/F4v9/tzloDSAs/vZwj4QEIHdmMwhsbVyAtzvyqmi0/AIIwMr6MRNEgfI6J6ASAciPKCoh1OTA1BfOnV3sZZSYREFcADtcF2dmaHwjzSQp4qsOkcvUuIq8LqPQAI4ZFvnt9+VYJYNITAoKTxMu88M1OdKFTYG1PMGOyuz3v53MgrzwcRV+5GbH2+skCV/aEbgfkn9jo+VXbF5kCzPzRCEDliafzQN1u6sSVAdLOLcvTvoI6iZeN0W7DZZOtEq8C+AT6xv5M6EvhYwAAAABJRU5ErkJggg==\"\n  }, {\n    type: \"MobilePayment\",\n    translation: \"button/mobilepayment\",\n    icon: \"icons8-iphone\",\n    buttonState: \"rightmenupayment/mobilePayment\"\n  }, {\n    type: \"MobilePay\",\n    translation: \"button/mobilePay\",\n    icon: \"icons8-iphone\",\n    buttonState: \"rightmenupayment/mobilePay\",\n    paymentStrategy: \"mobilePay\"\n  }, {\n    type: \"ReceiptCompleter\",\n    style: \"display: none;\",\n    paymentStrategy: \"receiptCompleter\"\n  }, {\n    type: \"PrePaid\",\n    style: \"display: none;\",\n    paymentStrategy: \"receiptCompleter\"\n  }, {\n    type: \"Account\",\n    translation: \"button/account\",\n    icon: \"icons8-gender-neutral-user\",\n    style: null,\n    amountSuggestion: \"rounded\",\n    paymentStrategy: \"accountPayment\",\n    // default is send request to Connector and just add the response as paymentLine,\n    buttonState: \"rightmenupayment/account\"\n  }];\n\n  /**\n   * Do setup for the POS to run, including requesting token, loading config, etc. The returned promise must never be rejected.\n   * If the promise is rejected then the root state will be resolved and instead throw a stateChangeError.\n   *\n   * The setup is done in two different ways. Tasks that we must wait for, before we load the login screen, and tasks that\n   * can be finished async. The tasks we wait for must return a promise which will be included in the promise list for $q.all.\n   * @return {promise}\n   */\n  posconfig.init = function () {\n    var deferred = $q.defer();\n\n    // signal that posConfig is ready when the promise is resolved\n    deferred.promise[\"finally\"](function () {\n      readyPromise.resolve();\n      readyPromise = null;\n    });\n    var receiptService = $injector.get(\"receipt\");\n    var tokenPromise = setupToken().then(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee() {\n      var clerkLoginService, itemgroupService, notificationService, saleService, receiptPromise, lastReceiptIdPromose, paperStatusPromise, currentShopPromise;\n      return _regeneratorRuntime().wrap(function _callee$(_context) {\n        while (1) switch (_context.prev = _context.next) {\n          case 0:\n            // promises we do not want to wait for to finish before resolving init()'s promise\n            signalr.start(posconfig.tenantId, posconfig.shopId, posconfig.groupId, posconfig.posId);\n            articles.printBarcodesToConsole(10);\n            articles.loadOfflineArticles();\n            setupPosConfigReload();\n            clerkLoginService = $injector.get(\"clerkLoginService\");\n            itemgroupService = $injector.get(\"itemgroup\");\n            notificationService = $injector.get(\"notification\");\n            saleService = $injector.get(\"sales\");\n            itemgroupService.getItemGroups();\n            itemgroupService.getExpenseGroups();\n            saleService.startSaleUnloader();\n\n            /*\n                    SignalR has been disabled until new implementation has been done to support\n                    the new version of SignalR.\n                    THIS IS NOT A PERMANENT SOLUTION AND SHOULD BE SOLVED AS SOON AS POSIBLE\n                    signalr.start(posconfig.shopId, posconfig.groupId, posconfig.posId);\n                    */\n            // end region\n            // system critical settings which needs to be resolved before we load root state\n            _context.next = 13;\n            return posconfig.loadConfiguration();\n          case 13:\n            receiptPromise = receiptService.loadReceipt();\n            lastReceiptIdPromose = $injector.get(\"saleRepository\").api.getLastReceiptId();\n            paperStatusPromise = $injector.get(\"saleRepository\").device().PrinterPaperStatus();\n            currentShopPromise = $injector.get(\"shopRepository\").api.getCurrentShop(); // when the configPromise is resolved we'll need to wakeup all the ARM devices to make them respond faster\n            // also we need to set language to clerk's preference if one is logged in\n            if (clerkLoginService.isLoggedIn()) {\n              posconfig.setLanguage(clerkLoginService.currentUser().language);\n            }\n            posconfig.wakeUpPaymentDevices();\n            lastReceiptIdPromose.then(function (response) {\n              var id = 1;\n              var returnPromise = undefined;\n              var setLastUsedReceiptId = false;\n              if (response.status == 200) {\n                id = parseInt(response.data);\n                if (id > posStorage.get(\"last_used_receiptId\")) {\n                  setLastUsedReceiptId = true;\n                }\n                if (id == 999999) {\n                  id = 1;\n                  posStorage.remove(\"webposRefreshToken\");\n                  returnPromise = getToken();\n                  setLastUsedReceiptId = true;\n                }\n              }\n              if (setLastUsedReceiptId === true) {\n                posStorage.set(\"last_used_receiptId\", id);\n              }\n              return returnPromise;\n            });\n            currentShopPromise.then(function (response) {\n              posStorage.set(\"current_shop\", response.data);\n            });\n            setTimeout(function () {\n              paperStatusPromise.then(function (response) {\n                posStorage.set(\"paperStatus\", response);\n              });\n            }, 700);\n\n            // all promises included in this array will be resolved before init()s promise resolves.\n            $q.all([receiptPromise, lastReceiptIdPromose, currentShopPromise]).then(null, function (error) {\n              $log.error(\"Promises failed\");\n            })[\"finally\"](deferred.resolve);\n            // end region\n          case 23:\n          case \"end\":\n            return _context.stop();\n        }\n      }, _callee);\n    })));\n    return deferred.promise;\n  };\n\n  /**\n   * This function can be used to do some action when the pos' configuration is ready for use.\n   * @return {promise} A promise which will be resolved when posConfig has been init'd\n   */\n  posconfig.whenReady = function () {\n    return readyPromise ? readyPromise.promise : $q.resolve();\n  };\n\n  /**\n   * Load all configurations for the POS from the API.\n   * @return {promise}\n   */\n  posconfig.loadConfiguration = function () {\n    function doSetup(config) {\n      setupPaymentDevices(config);\n      setupLanguage(config);\n      setupPrintTranslations(config);\n      loadArticleParameters(config);\n      setupNoteConfiguration(config);\n      setupCurrencies(config);\n      setupVoucherNo(config);\n      setupGiftPrintingConfig(config);\n      setupServiceWorker();\n      setupVoucherSettings(config);\n      setupGeneralPosSettings(config);\n    }\n    return new Promise(function (resolve) {\n      configRepository.api.getConfiguration(posconfig.posId).then(function (response) {\n        response.data.defaultExchangeExpiryPeriodDate = moment(response.data.defaultExchangeExpiryPeriodDate).format(\"DD/MM/YYYY\");\n        var config = response.data;\n        posStorage.set(CONFIG_KEY, config);\n        doSetup(config);\n      }, function () {\n        var config = posStorage.get(CONFIG_KEY);\n        if (!config) return deferred.reject(\"No not able to fetch configuration and not available in local storage\");\n        doSetup(config);\n      })[\"finally\"](resolve);\n    });\n  };\n  posconfig.wakeUpPaymentDevices = function () {\n    for (var i = 0; i < backend.devices.length; i++) {\n      configRepository.device(i).wakeUp();\n    }\n  };\n  posconfig.forceGetConfig = /*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee2() {\n    var currentCfg, newCfg;\n    return _regeneratorRuntime().wrap(function _callee2$(_context2) {\n      while (1) switch (_context2.prev = _context2.next) {\n        case 0:\n          if (!idleChecker.isIdle()) {\n            _context2.next = 6;\n            break;\n          }\n          $log.debug(\"Getting updates to the POS, user has been idle.\");\n          idleChecker.reset();\n          $state.go(\"root.logout\");\n          _context2.next = 12;\n          break;\n        case 6:\n          $log.debug(\"Reloading POSConfig from server.\");\n          currentCfg = posStorage.get(CONFIG_KEY);\n          _context2.next = 10;\n          return posconfig.loadConfiguration();\n        case 10:\n          newCfg = posStorage.get(CONFIG_KEY);\n          if (JSON.stringify(currentCfg) != JSON.stringify(newCfg)) {\n            $log.debug(\"Updated config received. Notifing relevant components.\");\n            eventBus.notify(eventBus.events.pos.newConfig);\n          } else {\n            $log.debug(\"No changes in config.\");\n          }\n        case 12:\n        case \"end\":\n          return _context2.stop();\n      }\n    }, _callee2);\n  }));\n  function setupToken() {\n    tokenService.registerUnauthorizedTokenRequestCallback(function (error) {\n      if (_typeof(error) === \"object\" && (error.data && error.data.error && error.data.error === \"invalid_grant\" || error.status === 400)) {\n        tokenService.setRefreshToken(null);\n        tokenService.setToken(null);\n      }\n      portalService.redirectToPortalWithMessage(\"warning\", \"The POS credentials were invalid\", \"Please open the POS from the dashboard tile to reestablish credentials.\");\n    });\n    return getToken();\n  }\n  function getToken() {\n    var credentials = getCredentials();\n    var deferred = $q.defer();\n    tokenService.setupToken(credentials).then(function (response) {\n      posconfig.groupId = response.data.groupid;\n      posconfig.shopId = response.data.shopid;\n      posconfig.posId = response.data.posid;\n      posconfig.tenantId = response.data.tenantId;\n      posStorage.set(\"tenantId\", response.data.tenantId);\n      posStorage.set(\"groupId\", response.data.groupid);\n      posStorage.set(\"posId\", response.data.posid);\n      posStorage.set(\"shopId\", response.data.shopid);\n      // we use this as a fallback for the namedStore if the cookie.shopId should be missing\n      store.set(\"contextShopId\", response.data.shopid);\n      store.set(\"contextTenantId\", response.data.tenantId);\n      // Adds user information to LogRocket logs. If LogRocket haven't been initialized this won't do anywhing\n      LogRocket.identify(\"\".concat(posconfig.tenantId, \"-\").concat(posconfig.shopId, \"-\").concat(posconfig.posId), {\n        tenantId: posconfig.tenantId,\n        shopId: posconfig.shopId,\n        posId: posconfig.posId\n      });\n\n      // Sanity check data is valid before we start the session\n      var validationError = posconfig.validateConfig();\n      if (validationError) {\n        portalService.redirectToPortalWithMessage(\"warning\", \"The POS configuration is invalid: \" + validationError, \"Please open the POS from the dashboard tile to reestablish credentials.\");\n      }\n      deferred.resolve(response);\n    }, function () {\n      posconfig.groupId = posStorage.get(\"groupId\");\n      posconfig.shopId = (credentials === null || credentials === void 0 ? void 0 : credentials.client_id) || posStorage.get(\"shopId\");\n      posconfig.posId = posStorage.get(\"posId\");\n      deferred.resolve();\n    });\n\n    // we must always resolve this promise, otherwise the root state\n    // will get a stateChangeError and the POS wont load\n    return deferred.promise;\n  }\n  function getCredentials() {\n    var shopId = $cookies.get(\"shopId\");\n    if (!shopId || shopId == \"undefined\") shopId = posStorage.get(\"shopId\");\n    var password = $cookies.get(\"portalRefreshToken\");\n    return {\n      username: shopId,\n      password: IN_DEBUG_MODE && !password ? \"FAKE_TOKEN\" : password,\n      client_id: shopId\n    };\n  }\n  function loadArticleParameters(config) {\n    if (!config.articleParameters) return;\n    function Parameter(id, name) {\n      this.id = id;\n      this.name = name;\n      this.value = \"\";\n    }\n    Parameter.prototype.toElementId = function () {\n      return this.name.replace(/\\s+/g, \"\");\n    };\n    posconfig.articleParameters = {\n      styleParameters: [],\n      variantParameters: []\n    };\n    function addParameters(type) {\n      angular.forEach(config.articleParameters[type], function (parameter) {\n        posconfig.articleParameters[type].push(new Parameter(parameter.position, parameter.name));\n      });\n    }\n    addParameters(\"styleParameters\");\n    addParameters(\"variantParameters\");\n  }\n  function setupLanguage(config) {\n    if (config.language) {\n      posconfig.setLanguage(config.language);\n      posconfig.setLocale(config.language);\n    }\n  }\n  function setupPaymentDevices(config) {\n    if (!config.paymentDevices) return;\n    var connectorLockService = $injector.get(\"connectorLockService\");\n    // Virtual connectors are Adaptive POS only (ID-771): this POS never shows or calls them. Their old path to\n    // ps-cloudconnector (VIRTUAL_CONNECTOR_URL) is no longer live; removing that code is ID-707.\n    var devices = config.paymentDevices.filter(function (device) {\n      return !device.isVirtual;\n    });\n    backend.devices = [];\n    angular.forEach(devices, function (device) {\n      backend.addDevice(device.name, device.host, device.id, device.mac, device.terminalType, device.isVirtual, device.virtualConfiguration, device.listeners);\n    });\n    function finalizePaymentDeviceSetup() {\n      // defaultDeviceIndex may point at 999 from a prior session; clamp to a valid index.\n      if (backend.defaultDevice >= backend.devices.length || backend.defaultDevice < 0) {\n        backend.defaultDevice = 0;\n        posStorage.set(\"defaultDeviceIndex\", 0);\n      }\n      var current = backend.devices[backend.defaultDevice];\n      // With a single real connector, do not leave selection on the hidden static Default (999).\n      if (current && current.isStatic) {\n        var realIndex = null;\n        var realCount = 0;\n        for (var i = 0; i < backend.devices.length; i++) {\n          if (!backend.devices[i].isStatic) {\n            realCount++;\n            realIndex = i;\n          }\n        }\n        if (realCount === 1 && realIndex != null) {\n          backend.defaultDevice = realIndex;\n          posStorage.set(\"defaultDeviceIndex\", realIndex);\n        }\n      }\n      connectorLockService.restoreLockedConnector();\n    }\n    if (config.language) {\n      configRepository.getTranslations(config.language).then(function (response) {\n        var translations = response.data;\n        backend.addOfflineDevice(translations[\"button/default\"], 999);\n        finalizePaymentDeviceSetup();\n      });\n    } else {\n      backend.addOfflineDevice(\"Default\", 999);\n      finalizePaymentDeviceSetup();\n    }\n  }\n  function setupNoteConfiguration(config) {\n    var nc = config.noteConfiguration;\n    posconfig.noteConfiguration = {\n      lines: {},\n      showBarcode: nc.showBarcode === \"1\",\n      // convert to bool from \"1\"/\"0\"\n      showEmployee: nc.showEmployee === \"1\",\n      showLoyalty: nc.showLoyalty === \"1\"\n    };\n    function transform(currentValue, index, array) {\n      if (currentValue.toLowerCase().startsWith(\"parameter\")) return currentValue.toLowerCase();\n      return \"parameter\" + (Number(currentValue.slice(-1)) + 5);\n    }\n    for (var key in nc) {\n      if (key.startsWith(\"line\") && nc[key]) posconfig.noteConfiguration.lines[key] = nc[key].split(\";\").map(transform);\n    }\n  }\n  function setupPrintTranslations(config) {\n    if (!config.language) return;\n    configRepository.getTranslations(config.language).then(function (response) {\n      var translations = response.data;\n      posconfig.printTranslations = {\n        accountDeposit: translations[\"button/account-deposit\"],\n        giftCertificate: translations[\"button/giftcertificate\"],\n        creditNote: translations[\"button/creditvoucher\"],\n        setStart: translations[\"label/set start\"],\n        setLine: translations[\"label/set item\"],\n        setEnd: translations[\"label/set end\"],\n        discount: translations[\"label/discount\"],\n        totalDiscount: translations[\"label/totaldiscount\"],\n        total: translations[\"label/total\"],\n        itemAmount: translations[\"label/itemamount\"],\n        vatIncluded: translations[\"label/vat\"],\n        vatIncludedTotal: translations[\"label/vattotal\"],\n        price: translations[\"label/price\"],\n        youWereServedBy: translations[\"label/servedby\"],\n        currency: translations[\"label/localcurrency\"],\n        barcode: translations[\"label/barcode\"],\n        zero: translations[\"general/zero\"],\n        one: translations[\"general/one\"],\n        two: translations[\"general/two\"],\n        three: translations[\"general/three\"],\n        four: translations[\"general/four\"],\n        five: translations[\"general/five\"],\n        six: translations[\"general/six\"],\n        seven: translations[\"general/seven\"],\n        eight: translations[\"general/eight\"],\n        nine: translations[\"general/nine\"],\n        \"return\": translations[\"general/return\"],\n        reason: translations[\"general/reason\"],\n        returnReceipt: translations[\"general/returnreceipt\"],\n        customerName: translations[\"general/customername\"],\n        customerAddress: translations[\"general/customeraddress\"],\n        customerCity: translations[\"general/customercity\"],\n        customerPhone: translations[\"general/customerphone\"],\n        customerSignature: translations[\"general/customersignature\"],\n        customerNumber: translations[\"general/customerNumber\"],\n        earnedLoyaltyPoints: translations[\"general/loyaltypointsearned\"],\n        loyaltyPointsAvailable: translations[\"general/loyaltyPointsAvailable\"],\n        loyaltyPointsSpent: translations[\"general/loyaltypointsspent\"],\n        openDrawer: translations[\"general/opendrawer\"],\n        vatNumber: translations[\"general/vatnumber\"],\n        totalNumberItems: translations[\"general/totalnumberitems\"],\n        expense: translations[\"general/expense\"],\n        copy: translations[\"general/copy\"],\n        giftCopy: translations[\"general/giftcopy\"],\n        terminalJournal: translations[\"general/terminalJournal\"],\n        receiptJournal: translations[\"general/receiptJournal\"],\n        periodStart: translations[\"general/periodStart\"],\n        periodEnd: translations[\"general/periodEnd\"],\n        pickList: translations[\"general/pickList\"],\n        printedOn: translations[\"general/printedOn\"],\n        orderLineVariant: translations[\"general/orderlinevariant\"],\n        orderLineNotes: translations[\"general/orderlinenotes\"],\n        sold: translations[\"general/sold\"],\n        description: translations[\"general/description\"],\n        vendorName: [\"general/vendorname\"],\n        itemNo: translations[\"general/itemno\"],\n        itemName: translations[\"general/itemname\"],\n        itemDescription: translations[\"general/itemdescription\"],\n        returned: translations[\"general/returned\"],\n        quantityOnHand: translations[\"general/quantityonhand\"],\n        restockLevel: translations[\"general/restocklevel\"],\n        hierarchyNodeName: translations[\"general/hierarchynodename\"],\n        vendorItemNo: translations[\"general/vendoritemno\"],\n        net: translations[\"general/net\"],\n        from: translations[\"general/from\"],\n        to: translations[\"general/to\"],\n        salesReceipt: translations[\"print/sales-receipt\"],\n        salesAndReturnReceipt: translations[\"print/sales-return-receipt\"],\n        serialNumber: translations[\"print/serialnumber\"],\n        loanReceipt: translations[\"general/loan-receipt\"],\n        recallLoanReceipt: translations[\"general/recall-loan-receipt\"],\n        customerReturnDetails: translations[\"general/customer-return-details\"],\n        lineExcludedFromLoyalty: translations[\"general/line-is-excluded-from-loyalty\"],\n        expiresOn: translations[\"print/expiresOn\"],\n        balance: translations[\"print/balance\"],\n        exchangeExpiryPeriod: translations[\"label/exchange-expiry-period\"],\n        inStock: translations[\"widget/customerorder/quantityInStock\"],\n        toPick: translations[\"widget/customerorder/quantityToPick\"],\n        picked: translations[\"widget/customerorder/quantityPicked\"],\n        orderNo: translations[\"widget/customerorder/orderNo\"],\n        status: translations[\"widget/customerorder/status\"],\n        paymentTypes: {\n          Cash: translations[\"button/cash\"],\n          Card: translations[\"button/card\"],\n          ManualCard: translations[\"button/manualcard\"],\n          ForeignCurrency: translations[\"button/currency\"],\n          GiftCertificate: translations[\"button/giftcertificate\"],\n          DownPaymewnt: translations[\"button/downPayment\"],\n          ForeignGiftCertificate: translations[\"button/foreigngiftcertificate\"],\n          CreditVoucher: translations[\"button/credit voucher\"],\n          ForeignCreditVoucher: translations[\"button/foreigncreditvoucher\"],\n          Webshop: translations[\"button/webshop\"],\n          Account: translations[\"button/account\"],\n          Bank: translations[\"button/bank\"],\n          Bonus: translations[\"button/bonus\"],\n          DebitCard: translations[\"button/debitcard\"],\n          CreditCard: translations[\"button/creditcard\"],\n          MobilePayment: translations[\"button/mobilepayment\"],\n          MobilePay: translations[\"button/mobilepay\"],\n          Change: translations[\"button/change\"],\n          Rounding: translations[\"button/rounding\"],\n          Currency: translations[\"button/currency\"],\n          LoyaltyBonus: translations[\"button/loyaltybonus\"],\n          LoyaltyDiscount: translations[\"button/loyaltydiscount\"],\n          TrimitLoyaltyBonus: translations[\"button/trimitloyaltybonus\"]\n        }\n      };\n      posconfig.cashStatementTranslations = {\n        cashStatement: translations[\"cashstatement/cashstatement\"],\n        periodStart: translations[\"cashstatement/periodstart\"],\n        periodEnd: translations[\"cashstatement/periodend\"],\n        armDevice: translations[\"cashstatement/armname\"],\n        morning: translations[\"cashstatement/morningamount\"],\n        cashSales: translations[\"cashstatement/cashsales\"],\n        cashReturn: translations[\"cashstatement/cashreturn\"],\n        expenses: translations[\"cashstatement/expenses\"],\n        expectedInDrawer: translations[\"cashstatement/expectedindrawer\"],\n        evening: translations[\"cashstatement/eveningamount\"],\n        bankedCash: translations[\"cashstatement/bankedcash\"],\n        currencyCalculated: translations[\"cashstatement/currencycalculated\"],\n        totalInDrawer: translations[\"cashstatement/totalindrawer\"],\n        cashDifference: translations[\"cashstatement/cashdifference\"],\n        printedBy: translations[\"cashstatement/printedby\"],\n        cashTotal: translations[\"cashstatement/cashTotal\"],\n        reportNumber: translations[\"cashstatement/reportnumber\"],\n        vatNumber: translations[\"general/vatnumber\"],\n        Amount: translations[\"zxreport/Amount\"],\n        Discounts: translations[\"zxreport/Discounts\"],\n        DrawerOpenings: translations[\"zxreport/DrawerOpenings\"],\n        Miscellaneus: translations[\"zxreport/Miscellaneus\"],\n        NumberOfReceipts: translations[\"zxreport/NumberOfReceipts\"],\n        Qty: translations[\"zxreport/Qty\"],\n        ReceiptCopys: translations[\"zxreport/ReceiptCopys\"],\n        Returns: translations[\"zxreport/Returns\"],\n        Total: translations[\"zxreport/Total\"],\n        Balance: translations[\"zxreport/Balance\"],\n        CreditnoteIssued: translations[\"zxreport/CreditnoteIssued\"],\n        CreditnoteRedeemed: translations[\"zxreport/CreditnoteRedeemed\"],\n        GiftvoucherIssued: translations[\"zxreport/GiftvoucherIssued\"],\n        GiftvoucherRedeemed: translations[\"zxreport/GiftvoucherRedeemed\"],\n        ForeignCreditnotasRedeemed: translations[\"zxreport/ForeignCreditnotasRedeemed\"],\n        ForeignGiftvouchersRedeemed: translations[\"zxreport/ForeignGiftvouchersRedeemed\"],\n        Payments: translations[\"zxreport/Payments\"],\n        Reconciliation: translations[\"zxreport/Reconciliation\"],\n        Vat: translations[\"zxreport/Vat\"],\n        PaymentsByClerk: translations[\"zxreport/PaymentsByClerk\"],\n        GiftvoucherAndCreditnotes: translations[\"zxreport/GiftvoucherAndCreditnotes\"],\n        ItemGroups: translations[\"zxreport/ItemGroups\"],\n        Payouts: translations[\"zxreport/Payouts\"],\n        XReport: translations[\"zxreport/XReport\"],\n        ZReport: translations[\"zxreport/ZReport\"],\n        GiftVoucherDiscount: translations[\"zxreport/GiftVoucherDiscount\"],\n        DeletedReceiptLines: translations[\"zxreport/deletedlines\"],\n        AmountOfDifferentReceiptTypes: translations[\"cashstatement/receipt-type-qty\"],\n        AmountOfReturnReceipts: translations[\"cashstatement/return-receipt-qty\"],\n        AmountOfSaleReceipts: translations[\"cashstatement/sale-receipt-qty\"],\n        CancelledSales: translations[\"cashstatement/cancelled-sales\"],\n        Copy: translations[\"general/copy\"],\n        paymentTypes: {\n          Cash: translations[\"button/cash\"],\n          Card: translations[\"button/card\"],\n          ManualCard: translations[\"button/manualcard\"],\n          ForeignCurrency: translations[\"button/currency\"],\n          GiftCertificate: translations[\"button/giftcertificate\"],\n          DownPaymewnt: translations[\"button/downPayment\"],\n          ForeignGiftCertificate: translations[\"button/foreigngiftcertificate\"],\n          CreditVoucher: translations[\"button/credit voucher\"],\n          ForeignCreditVoucher: translations[\"button/foreigncreditvoucher\"],\n          Webshop: translations[\"button/webshop\"],\n          Account: translations[\"button/account\"],\n          Bank: translations[\"button/bank\"],\n          Bonus: translations[\"button/bonus\"],\n          DebitCard: translations[\"button/debitcard\"],\n          CreditCard: translations[\"button/creditcard\"],\n          MobilePayment: translations[\"button/mobilepayment\"],\n          MobilePay: translations[\"button/mobilepay\"],\n          Change: translations[\"button/change\"],\n          Rounding: translations[\"button/rounding\"],\n          Currency: translations[\"button/currency\"],\n          LoyaltyBonus: translations[\"button/loyaltybonus\"],\n          LoyaltyDiscount: translations[\"button/loyaltydiscount\"],\n          TrimitLoyaltyBonus: translations[\"button/trimitloyaltybonus\"]\n        }\n      };\n      posStorage.set(\"printTranslations\", posconfig.printTranslations);\n      posStorage.set(\"cashStatementTranslations\", posconfig.cashStatementTranslations);\n    });\n  }\n  function setupPosConfigReload() {\n    var secondsBetweenReloads = 60;\n\n    // Cancel an old interval timer if present\n    if (posConfigReloadIntervalPromise) {\n      $interval.cancel(posConfigReloadIntervalPromise);\n      posConfigReloadIntervalPromise = null;\n    }\n    var reloadFn = /*#__PURE__*/function () {\n      var _ref3 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee3() {\n        var currentCfg, newCfg;\n        return _regeneratorRuntime().wrap(function _callee3$(_context3) {\n          while (1) switch (_context3.prev = _context3.next) {\n            case 0:\n              if (!idleChecker.isIdle()) {\n                _context3.next = 6;\n                break;\n              }\n              $log.debug(\"Getting updates to the POS, user has been idle.\");\n              idleChecker.reset();\n              $state.go(\"root.logout\");\n              _context3.next = 12;\n              break;\n            case 6:\n              $log.debug(\"Reloading POSConfig from server.\");\n              currentCfg = posStorage.get(CONFIG_KEY);\n              _context3.next = 10;\n              return posconfig.loadConfiguration();\n            case 10:\n              newCfg = posStorage.get(CONFIG_KEY);\n              if (JSON.stringify(currentCfg) != JSON.stringify(newCfg)) {\n                $log.debug(\"Updated config received. Notifing relevant components.\");\n                eventBus.notify(eventBus.events.pos.newConfig);\n              } else {\n                $log.debug(\"No changes in config.\");\n              }\n            case 12:\n            case \"end\":\n              return _context3.stop();\n          }\n        }, _callee3);\n      }));\n      return function reloadFn() {\n        return _ref3.apply(this, arguments);\n      };\n    }();\n    posConfigReloadIntervalPromise = $interval(reloadFn, secondsBetweenReloads * 1000);\n  }\n  posconfig.setLanguage = function (lang) {\n    var clerkLoginService = $injector.get(\"clerkLoginService\");\n    if (clerkLoginService.isLoggedIn()) {\n      $translate.use(mapToLanguage(clerkLoginService.currentUser().language));\n    } else {\n      if (typeof lang === \"number\") lang = mapToLanguage(lang);\n      $translate.use(lang);\n    }\n  };\n  posconfig.getLocale = function () {\n    var config = posStorage.get(CONFIG_KEY) || {};\n    return config.language;\n  };\n  posconfig.setLocale = function (lang) {\n    if (typeof lang === \"number\") lang = mapToLanguage(lang);\n    tmhDynamicLocale.set(lang);\n  };\n  posconfig.resetLanguage = function () {\n    var config = posStorage.get(CONFIG_KEY);\n    if (config && config.language) this.setLanguage(config.language);\n  };\n  function mapToLanguage(lang) {\n    switch (lang) {\n      case 1:\n        return \"en-gb\";\n      case 2:\n        return \"da-dk\";\n      case 3:\n        return \"no-no\";\n      case 4:\n        return \"sv-se\";\n      case 5:\n        return \"nl-nl\";\n      case 6:\n        return \"fi-fi\";\n      case 7:\n        return \"de-de\";\n      case 8:\n        return \"et-ee\";\n      case 9:\n        return \"fr-fr\";\n      case 10:\n        return \"en-us\";\n      case 11:\n        return \"en-ca\";\n      case 12:\n        return \"es-es\";\n      case 13:\n        return \"eb-ph\";\n      default:\n        return \"da-dk\";\n    }\n  }\n  posconfig.mapToLanguage = mapToLanguage;\n  function setupCurrencies(config) {\n    validateConfigExists(config.currencies);\n    validateConfigExists(_.find(config.currencies, {\n      isLocal: true\n    }));\n    currencies = {};\n    for (var key in config.currencies) {\n      currencies[key.toUpperCase()] = config.currencies[key];\n    }\n  }\n  function setupVoucherNo(config) {\n    if (config.lastVoucherNo) {\n      var voucherService = $injector.get(\"giftCertificate\");\n      voucherService.lastVoucherNoReceived(config.lastVoucherNo);\n    }\n  }\n  function setupGiftPrintingConfig(config) {\n    posconfig.giftLabelTemplateId = config.giftLabelTemplateId;\n    posconfig.giftPrintingOption = config.giftPrintingOption;\n  }\n  function setupVoucherSettings(config) {\n    posconfig.creditNoteExpiryInDays = config.creditNoteExpiryInDays;\n    posconfig.giftCertificateExpiryInDays = config.giftCertificateExpiryInDays;\n  }\n  function setupGeneralPosSettings(config) {\n    if (config.tenantGeneralPosSettings) {\n      posconfig.tenantGeneralPosSettings = config.tenantGeneralPosSettings;\n    }\n  }\n  posconfig.getLocalCurrency = function () {\n    for (var key in currencies) {\n      if (currencies.hasOwnProperty(key)) {\n        if (currencies[key].isLocal) {\n          return currencies[key];\n        }\n      }\n    }\n  };\n  posconfig.getCustomerOrderHoldingPeriod = function () {\n    if (posconfig.customerOrderSettings) return posconfig.customerOrderSettings.holdingPeriod;\n    return 2;\n  };\n  posconfig.getCurrencySetup = function (currency) {\n    return currency ? currencies[currency] : currencies;\n  };\n  posconfig.getOptions = function () {\n    var config = posStorage.get(CONFIG_KEY) || {};\n    return config.options || {};\n  };\n  posconfig.getRole = function (roleId) {\n    var config = posStorage.get(CONFIG_KEY) || {};\n    var configs = config.roles || [];\n    return _.find(configs, [\"id\", roleId]);\n  };\n  posconfig.getShopFeatures = function () {\n    var config = posStorage.get(CONFIG_KEY) || {};\n    return config.shopFeatures || {};\n  };\n  posconfig.getCvr = function () {\n    var config = posStorage.get(CONFIG_KEY) || {};\n    return config.cvr || \"\";\n  };\n  posconfig.getPhoneNumberValidationEnabled = function () {\n    var config = posStorage.get(CONFIG_KEY) || {};\n    return config.phoneNumberValidationEnabled || false;\n  };\n  posconfig.hasConfiguredItemInfos = function () {\n    var config = posStorage.get(CONFIG_KEY) || {};\n    return config.hasConfiguredItemInfos || false;\n  };\n  posconfig.getWidgets = function () {\n    var config = posStorage.get(CONFIG_KEY) || {};\n    return config.widgets || [];\n  };\n  posconfig.getDiscountReasons = function () {\n    var config = posStorage.get(CONFIG_KEY) || {};\n    return config.discountReasons || [];\n  };\n  posconfig.getReceiptDiscountReasons = function () {\n    var config = posStorage.get(CONFIG_KEY) || {};\n    return config.receiptDiscountReasons || [];\n  };\n  posconfig.getWebOrderDispatchNoteLines = function () {\n    var config = posStorage.get(CONFIG_KEY) || {};\n    return config.webOrderDispatchNoteLines || [];\n  };\n  posconfig.getReturnReasons = function () {\n    var config = posStorage.get(CONFIG_KEY) || {};\n    return config.returnReasons || [];\n  };\n  posconfig.getReceiptReturnReasons = function () {\n    var config = posStorage.get(CONFIG_KEY) || {};\n    return config.receiptReturnReasons || [];\n  };\n  posconfig.getLabelTemplates = function () {\n    var config = posStorage.get(CONFIG_KEY) || {};\n    return config.labelTemplates || [];\n  };\n  posconfig.getGiftCertificateVat = function () {\n    var config = posStorage.get(CONFIG_KEY) || {};\n    return +config.giftCertificateVat;\n  };\n  posconfig.getCreditNoteVat = function () {\n    var config = posStorage.get(CONFIG_KEY) || {};\n    return +config.creditNoteVat;\n  };\n  posconfig.getPaymentTypeConfigs = function () {\n    var config = posStorage.get(CONFIG_KEY) || {};\n    var paymentTypes = config.paymentTypes || defaultPaymentTypes;\n    return paymentTypes;\n  };\n  posconfig.setPaymentTypeConfigs = function (paymentTypes) {\n    var config = posStorage.get(CONFIG_KEY) || {};\n    config.paymentTypes = paymentTypes;\n    posStorage.set(CONFIG_KEY, config);\n  };\n  posconfig.getDefaultExpiryPeriod = function () {\n    var config = posStorage.get(CONFIG_KEY) || {};\n    return +config.defaultExchangeExpiryPeriod;\n  };\n  posconfig.getDefaultExpiryPeriodType = function () {\n    var config = posStorage.get(CONFIG_KEY) || {};\n    return config.defaultExchangeExpiryPeriodType;\n  };\n  posconfig.getDefaultExpiryPeriodDate = function () {\n    var config = posStorage.get(CONFIG_KEY) || {};\n    return config.defaultExchangeExpiryPeriodDate;\n  };\n  posconfig.getCreditnoteExpiryInDays = function () {\n    var config = posStorage.get(CONFIG_KEY) || {};\n    return config.creditNoteExpiryInDays;\n  };\n  posconfig.getGiftCertificateExpiryInDays = function () {\n    var config = posStorage.get(CONFIG_KEY) || {};\n    return config.giftCertificateExpiryInDays;\n  };\n  posconfig.getGiftAidAttributeId = function () {\n    var _config$giftAid;\n    var config = posStorage.get(CONFIG_KEY) || {};\n    return (_config$giftAid = config.giftAid) === null || _config$giftAid === void 0 ? void 0 : _config$giftAid.customAttributeId;\n  };\n  posconfig.getPromotionBarcodePrefix = function () {\n    var config = posStorage.get(CONFIG_KEY) || {};\n    var promotionSettings = config.promotionSettings || {};\n    return promotionSettings.promotionBarcodePrefix || null;\n  };\n  posconfig.getVoucherDefinitions = function () {\n    var config = posStorage.get(CONFIG_KEY) || {};\n    return config.voucherDefinitions;\n  };\n  posconfig.addBlockNavigationPaymentType = function (paymentType) {\n    $log.debug(paymentType);\n    blockNavigationPaymentTypes.push(paymentType);\n    $log.debug(blockNavigationPaymentTypes);\n  };\n  posconfig.getBlockNavigationPaymentTypes = function () {\n    return blockNavigationPaymentTypes;\n  };\n  posconfig.addBlockCancellationPaymentType = function (paymentType) {\n    $log.debug(paymentType);\n    blockCancellationPaymentTypes.push(paymentType);\n    $log.debug(blockCancellationPaymentTypes);\n  };\n  posconfig.getBlockCancellationPaymentTypes = function () {\n    return blockCancellationPaymentTypes;\n  };\n  posconfig.getLoyaltyConfiguration = function () {\n    var config = posStorage.get(CONFIG_KEY) || {};\n    return config.loyalty;\n  };\n  posconfig.validateConfig = function () {\n    if (!this.shopId) return \"missing shopId\";\n    if (!this.posId) return \"missing posId\";\n    if (!this.tenantId) return \"missing tenantId\";\n    return null;\n  };\n  function validateConfigExists(config) {\n    if (config) return true;\n    return false;\n  }\n\n  //This routine first captures all elements on the current page with attributes href and src\n  //The browser then fetches these from the remote server without looking into the cache\n  //It then updates the cache with the downloaded resource and reloads the page\n  function clearCacheReload() {\n    if (!window.fetch) return document.location.reload();\n    var els = document.getElementsByTagName(\"*\");\n    for (var i = 0; i < els.length; i++) {\n      var src = \"\";\n      if (els[i].tagName == \"A\") continue;\n      if (!src && els[i].src) src = els[i].getAttribute(\"src\");\n      if (!src && els[i].href) src = els[i].getAttribute(\"href\");\n      if (!src) continue;\n      fetch(src, {\n        cache: \"reload\"\n      });\n    }\n    return document.location.reload();\n  }\n  function updateAfterTimeout() {\n    $timeout(function () {\n      notification.removeMessage(updateNotification);\n      clearCacheReload();\n    }, 4000);\n    notification.pop(\"warn\", i18nUpdate, i18nNowRefresh);\n  }\n  function setupServiceWorker() {\n    if (\"serviceWorker\" in navigator && !IN_DEBUG_MODE) {\n      var i18nUpdate, i18nDownloaded, i18nNowRefresh;\n      $q.all([indexdb.serviceWorkerConstants.set(\"tenantId\", posconfig.tenantId), indexdb.serviceWorkerConstants.set(\"shopId\", posconfig.shopId), indexdb.serviceWorkerConstants.set(\"webposApiToken\", posStorage.get(\"webposApiToken\")), indexdb.serviceWorkerConstants.set(\"webposRefreshToken\", posStorage.get(\"webposRefreshToken\")), $translate([\"toast/update/title\", \"toast/update/downloaded\", \"toast/update/will-refresh\"])]).then(function (res) {\n        navigator.serviceWorker.register(\"/sw\", {\n          scope: \"/\"\n        });\n        var translations = res[4];\n        i18nUpdate = translations[\"toast/update/title\"];\n        i18nDownloaded = translations[\"toast/update/downloaded\"];\n        i18nNowRefresh = translations[\"toast/update/will-refresh\"];\n      });\n      if (!serviceWorkerInitialised) {\n        var updateNotification;\n        navigator.serviceWorker.addEventListener(\"message\", function (ev) {\n          var payload = JSON.parse(ev.data);\n          ev.stopPropagation();\n          switch (payload.type) {\n            case \"refresh\":\n              if ($state.$current.name == \"root.login\") {\n                updateAfterTimeout();\n              } else {\n                eventBus.subscribe(eventBus.events.sale.completed, null, function () {\n                  updateAfterTimeout();\n                });\n              }\n              updateNotification = notification.notify(\"info\", i18nUpdate, i18nDownloaded);\n              notification.pop(\"info\", i18nUpdate, i18nDownloaded, 20000);\n              break;\n            default:\n              $log.warn(\"Unknown message event received from SW:\");\n              $log.debug(ev);\n              break;\n          }\n        });\n        serviceWorkerInitialised = true;\n      }\n    }\n  }\n  return posconfig;\n});\n","\"use strict\";\n\npos.factory(\"posStorage\", function (store, storeNamespace) {\n  return store.getNamespacedStore(storeNamespace);\n});\n","\"use strict\";\n\npos.service(\"quaggaService\", function (notification, $timeout, posConfig, $log, eventBus) {\n  var service = {};\n  var barcodeCallback = function barcodeCallback() {};\n  var delayReached = true;\n  var beep = new Audio(\"/assets/audio/beep.wav\");\n  var quaggaConfig = null;\n  var delay = 0;\n  loadConfig();\n  var onBarcodeDetected = function onBarcodeDetected(result) {\n    if (barcodeCallback && delayReached) {\n      beep.play();\n      barcodeCallback(result.codeResult.code);\n      delayReached = false;\n      $timeout(function () {\n        return delayReached = true;\n      }, delay);\n    }\n  };\n  service.start = function (elementId) {\n    var onInitFinished = function onInitFinished(error) {\n      if (error) {\n        onError(error);\n      } else {\n        Quagga.onDetected(onBarcodeDetected);\n        onStart();\n      }\n    };\n    var onError = function onError(error) {\n      notification.pop(\"error\", error);\n      $log.error(error);\n    };\n    var onStart = function onStart() {\n      Quagga.start();\n    };\n    Quagga.init({\n      inputStream: {\n        name: \"Live\",\n        type: \"LiveStream\",\n        target: document.querySelector(elementId)\n      },\n      decoder: {\n        readers: [\"ean_reader\", \"code_39_reader\", \"i2of5_reader\"]\n      },\n      frequency: 1\n    }, onInitFinished);\n  };\n  service.setCallback = function (cb) {\n    barcodeCallback = cb;\n  };\n  service.stop = function () {\n    Quagga.stop();\n    Quagga.offDetected();\n  };\n  function loadConfig() {\n    quaggaConfig = posConfig.getShopFeatures().quagga || {\n      values: {\n        scannerDelay: 1000\n      }\n    };\n    delay = quaggaConfig.values.scannerDelay;\n  }\n  eventBus.subscribe(eventBus.events.pos.newConfig, null, loadConfig);\n  return service;\n});\n","\"use strict\";\n\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _regeneratorRuntime() { \"use strict\"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return r; }; var t, r = {}, e = Object.prototype, n = e.hasOwnProperty, o = \"function\" == typeof Symbol ? Symbol : {}, i = o.iterator || \"@@iterator\", a = o.asyncIterator || \"@@asyncIterator\", u = o.toStringTag || \"@@toStringTag\"; function c(t, r, e, n) { return Object.defineProperty(t, r, { value: e, enumerable: !n, configurable: !n, writable: !n }); } try { c({}, \"\"); } catch (t) { c = function c(t, r, e) { return t[r] = e; }; } function h(r, e, n, o) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype); return c(a, \"_invoke\", function (r, e, n) { var o = 1; return function (i, a) { if (3 === o) throw Error(\"Generator is already running\"); if (4 === o) { if (\"throw\" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var u = n.delegate; if (u) { var c = d(u, n); if (c) { if (c === f) continue; return c; } } if (\"next\" === n.method) n.sent = n._sent = n.arg;else if (\"throw\" === n.method) { if (1 === o) throw o = 4, n.arg; n.dispatchException(n.arg); } else \"return\" === n.method && n.abrupt(\"return\", n.arg); o = 3; var h = s(r, e, n); if (\"normal\" === h.type) { if (o = n.done ? 4 : 2, h.arg === f) continue; return { value: h.arg, done: n.done }; } \"throw\" === h.type && (o = 4, n.method = \"throw\", n.arg = h.arg); } }; }(r, n, new Context(o || [])), !0), a; } function s(t, r, e) { try { return { type: \"normal\", arg: t.call(r, e) }; } catch (t) { return { type: \"throw\", arg: t }; } } r.wrap = h; var f = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var l = {}; c(l, i, function () { return this; }); var p = Object.getPrototypeOf, y = p && p(p(x([]))); y && y !== e && n.call(y, i) && (l = y); var v = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(l); function g(t) { [\"next\", \"throw\", \"return\"].forEach(function (r) { c(t, r, function (t) { return this._invoke(r, t); }); }); } function AsyncIterator(t, r) { function e(o, i, a, u) { var c = s(t[o], t, i); if (\"throw\" !== c.type) { var h = c.arg, f = h.value; return f && \"object\" == _typeof(f) && n.call(f, \"__await\") ? r.resolve(f.__await).then(function (t) { e(\"next\", t, a, u); }, function (t) { e(\"throw\", t, a, u); }) : r.resolve(f).then(function (t) { h.value = t, a(h); }, function (t) { return e(\"throw\", t, a, u); }); } u(c.arg); } var o; c(this, \"_invoke\", function (t, n) { function i() { return new r(function (r, o) { e(t, n, r, o); }); } return o = o ? o.then(i, i) : i(); }, !0); } function d(r, e) { var n = e.method, o = r.i[n]; if (o === t) return e.delegate = null, \"throw\" === n && r.i[\"return\"] && (e.method = \"return\", e.arg = t, d(r, e), \"throw\" === e.method) || \"return\" !== n && (e.method = \"throw\", e.arg = new TypeError(\"The iterator does not provide a '\" + n + \"' method\")), f; var i = s(o, r.i, e.arg); if (\"throw\" === i.type) return e.method = \"throw\", e.arg = i.arg, e.delegate = null, f; var a = i.arg; return a ? a.done ? (e[r.r] = a.value, e.next = r.n, \"return\" !== e.method && (e.method = \"next\", e.arg = t), e.delegate = null, f) : a : (e.method = \"throw\", e.arg = new TypeError(\"iterator result is not an object\"), e.delegate = null, f); } function w(t) { this.tryEntries.push(t); } function m(r) { var e = r[4] || {}; e.type = \"normal\", e.arg = t, r[4] = e; } function Context(t) { this.tryEntries = [[-1]], t.forEach(w, this), this.reset(!0); } function x(r) { if (null != r) { var e = r[i]; if (e) return e.call(r); if (\"function\" == typeof r.next) return r; if (!isNaN(r.length)) { var o = -1, a = function e() { for (; ++o < r.length;) if (n.call(r, o)) return e.value = r[o], e.done = !1, e; return e.value = t, e.done = !0, e; }; return a.next = a; } } throw new TypeError(_typeof(r) + \" is not iterable\"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, c(v, \"constructor\", GeneratorFunctionPrototype), c(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction), GeneratorFunction.displayName = c(GeneratorFunctionPrototype, u, \"GeneratorFunction\"), r.isGeneratorFunction = function (t) { var r = \"function\" == typeof t && t.constructor; return !!r && (r === GeneratorFunction || \"GeneratorFunction\" === (r.displayName || r.name)); }, r.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, c(t, u, \"GeneratorFunction\")), t.prototype = Object.create(v), t; }, r.awrap = function (t) { return { __await: t }; }, g(AsyncIterator.prototype), c(AsyncIterator.prototype, a, function () { return this; }), r.AsyncIterator = AsyncIterator, r.async = function (t, e, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(h(t, e, n, o), i); return r.isGeneratorFunction(e) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, g(v), c(v, u, \"Generator\"), c(v, i, function () { return this; }), c(v, \"toString\", function () { return \"[object Generator]\"; }), r.keys = function (t) { var r = Object(t), e = []; for (var n in r) e.unshift(n); return function t() { for (; e.length;) if ((n = e.pop()) in r) return t.value = n, t.done = !1, t; return t.done = !0, t; }; }, r.values = x, Context.prototype = { constructor: Context, reset: function reset(r) { if (this.prev = this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = \"next\", this.arg = t, this.tryEntries.forEach(m), !r) for (var e in this) \"t\" === e.charAt(0) && n.call(this, e) && !isNaN(+e.slice(1)) && (this[e] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0][4]; if (\"throw\" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(r) { if (this.done) throw r; var e = this; function n(t) { a.type = \"throw\", a.arg = r, e.next = t; } for (var o = e.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i[4], u = this.prev, c = i[1], h = i[2]; if (-1 === i[0]) return n(\"end\"), !1; if (!c && !h) throw Error(\"try statement without catch or finally\"); if (null != i[0] && i[0] <= u) { if (u < c) return this.method = \"next\", this.arg = t, n(c), !0; if (u < h) return n(h), !1; } } }, abrupt: function abrupt(t, r) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var n = this.tryEntries[e]; if (n[0] > -1 && n[0] <= this.prev && this.prev < n[2]) { var o = n; break; } } o && (\"break\" === t || \"continue\" === t) && o[0] <= r && r <= o[2] && (o = null); var i = o ? o[4] : {}; return i.type = t, i.arg = r, o ? (this.method = \"next\", this.next = o[2], f) : this.complete(i); }, complete: function complete(t, r) { if (\"throw\" === t.type) throw t.arg; return \"break\" === t.type || \"continue\" === t.type ? this.next = t.arg : \"return\" === t.type ? (this.rval = this.arg = t.arg, this.method = \"return\", this.next = \"end\") : \"normal\" === t.type && r && (this.next = r), f; }, finish: function finish(t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[2] === t) return this.complete(e[4], e[3]), m(e), f; } }, \"catch\": function _catch(t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[0] === t) { var n = e[4]; if (\"throw\" === n.type) { var o = n.arg; m(e); } return o; } } throw Error(\"illegal catch attempt\"); }, delegateYield: function delegateYield(r, e, n) { return this.delegate = { i: x(r), r: e, n: n }, \"next\" === this.method && (this.arg = t), f; } }, r; }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"next\", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"throw\", n); } _next(void 0); }); }; }\npos.factory(\"returnReceiptService\", function ($state, receipt, returnReasons, sales) {\n  var service = {};\n  var returnModal = null;\n  service.getReturnModal = function () {\n    returnModal = {\n      title: \"general/returnreceiptselection\",\n      isVisible: false,\n      selectall: true,\n      buttons: [{\n        save: true,\n        label: \"button/ok\",\n        type: \"success\",\n        isDefault: false,\n        visible: true,\n        closes: true,\n        action: function () {\n          var _action = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee(loadedReceipt) {\n            var reasons, returnItems, position;\n            return _regeneratorRuntime().wrap(function _callee$(_context) {\n              while (1) switch (_context.prev = _context.next) {\n                case 0:\n                  reasons = returnReasons.getReturnReasons();\n                  returnItems = loadedReceipt.items.filter(function (i) {\n                    return i.selected;\n                  });\n                  position = 0;\n                  angular.forEach(returnItems, function (item) {\n                    var _reasons$find;\n                    item.position = position;\n                    item.returnReasonName = reasons === null || reasons === void 0 || (_reasons$find = reasons.find(function (r) {\n                      return r.id == item.returnCode;\n                    })) === null || _reasons$find === void 0 ? void 0 : _reasons$find.reason;\n                    position++;\n                  });\n                  loadedReceipt.items = returnItems;\n                  _context.next = 7;\n                  return receipt.createReturnReceipt(loadedReceipt);\n                case 7:\n                  $state.go(\"root.split.pos\");\n                case 8:\n                case \"end\":\n                  return _context.stop();\n              }\n            }, _callee);\n          }));\n          function action(_x) {\n            return _action.apply(this, arguments);\n          }\n          return action;\n        }()\n      }, {\n        save: false,\n        label: \"button/cancel\",\n        type: \"danger\",\n        isDefault: true,\n        visible: true,\n        closes: true,\n        action: function action() {}\n      }]\n    };\n    return returnModal;\n  };\n  service.showReturnModal = function (loadedReceipt) {\n    sales.getReturnedQuantities(loadedReceipt.uuid).then(function (returnedQuantities) {\n      handleLoadedReceipt(returnedQuantities, loadedReceipt);\n    })[\"catch\"](/*#__PURE__*/function () {\n      var _ref = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee2(err) {\n        return _regeneratorRuntime().wrap(function _callee2$(_context2) {\n          while (1) switch (_context2.prev = _context2.next) {\n            case 0:\n              handleLoadedReceipt(null, loadedReceipt);\n            case 1:\n            case \"end\":\n              return _context2.stop();\n          }\n        }, _callee2);\n      }));\n      return function (_x2) {\n        return _ref.apply(this, arguments);\n      };\n    }());\n  };\n  function handleLoadedReceipt(returnedQuantities, loadedReceipt) {\n    var receiptObject = _.merge({}, loadedReceipt);\n    returnModal.hasReturnableItems = false;\n    angular.forEach(receiptObject.items, function (item) {\n      item.selected = false;\n      item.remainingQuantity = item.quantity;\n      if (returnedQuantities) {\n        var returnedQuantity = returnedQuantities.find(function (r) {\n          return r.transactionLineUuid == item.uuid;\n        });\n        if (returnedQuantity != undefined) item.remainingQuantity = item.quantity - returnedQuantity.returnedQuantity;\n      }\n      if (item.remainingQuantity < 0) item.remainingQuantity = 0;\n      item.originalQuantity = item.quantity;\n      item.quantity = item.remainingQuantity;\n      item.returnCode = \"0\";\n      if (item.quantity) returnModal.hasReturnableItems = true;\n    });\n    returnModal.receipt = receiptObject;\n    returnModal.returnReasons = returnReasons.getReturnReasons();\n    returnModal.isVisible = true;\n    var button = returnModal.buttons.find(function (b) {\n      return b.save;\n    });\n    button.visible = returnModal.hasReturnableItems;\n  }\n  return service;\n});\n","\"use strict\";\n\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _regeneratorRuntime() { \"use strict\"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return r; }; var t, r = {}, e = Object.prototype, n = e.hasOwnProperty, o = \"function\" == typeof Symbol ? Symbol : {}, i = o.iterator || \"@@iterator\", a = o.asyncIterator || \"@@asyncIterator\", u = o.toStringTag || \"@@toStringTag\"; function c(t, r, e, n) { return Object.defineProperty(t, r, { value: e, enumerable: !n, configurable: !n, writable: !n }); } try { c({}, \"\"); } catch (t) { c = function c(t, r, e) { return t[r] = e; }; } function h(r, e, n, o) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype); return c(a, \"_invoke\", function (r, e, n) { var o = 1; return function (i, a) { if (3 === o) throw Error(\"Generator is already running\"); if (4 === o) { if (\"throw\" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var u = n.delegate; if (u) { var c = d(u, n); if (c) { if (c === f) continue; return c; } } if (\"next\" === n.method) n.sent = n._sent = n.arg;else if (\"throw\" === n.method) { if (1 === o) throw o = 4, n.arg; n.dispatchException(n.arg); } else \"return\" === n.method && n.abrupt(\"return\", n.arg); o = 3; var h = s(r, e, n); if (\"normal\" === h.type) { if (o = n.done ? 4 : 2, h.arg === f) continue; return { value: h.arg, done: n.done }; } \"throw\" === h.type && (o = 4, n.method = \"throw\", n.arg = h.arg); } }; }(r, n, new Context(o || [])), !0), a; } function s(t, r, e) { try { return { type: \"normal\", arg: t.call(r, e) }; } catch (t) { return { type: \"throw\", arg: t }; } } r.wrap = h; var f = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var l = {}; c(l, i, function () { return this; }); var p = Object.getPrototypeOf, y = p && p(p(x([]))); y && y !== e && n.call(y, i) && (l = y); var v = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(l); function g(t) { [\"next\", \"throw\", \"return\"].forEach(function (r) { c(t, r, function (t) { return this._invoke(r, t); }); }); } function AsyncIterator(t, r) { function e(o, i, a, u) { var c = s(t[o], t, i); if (\"throw\" !== c.type) { var h = c.arg, f = h.value; return f && \"object\" == _typeof(f) && n.call(f, \"__await\") ? r.resolve(f.__await).then(function (t) { e(\"next\", t, a, u); }, function (t) { e(\"throw\", t, a, u); }) : r.resolve(f).then(function (t) { h.value = t, a(h); }, function (t) { return e(\"throw\", t, a, u); }); } u(c.arg); } var o; c(this, \"_invoke\", function (t, n) { function i() { return new r(function (r, o) { e(t, n, r, o); }); } return o = o ? o.then(i, i) : i(); }, !0); } function d(r, e) { var n = e.method, o = r.i[n]; if (o === t) return e.delegate = null, \"throw\" === n && r.i[\"return\"] && (e.method = \"return\", e.arg = t, d(r, e), \"throw\" === e.method) || \"return\" !== n && (e.method = \"throw\", e.arg = new TypeError(\"The iterator does not provide a '\" + n + \"' method\")), f; var i = s(o, r.i, e.arg); if (\"throw\" === i.type) return e.method = \"throw\", e.arg = i.arg, e.delegate = null, f; var a = i.arg; return a ? a.done ? (e[r.r] = a.value, e.next = r.n, \"return\" !== e.method && (e.method = \"next\", e.arg = t), e.delegate = null, f) : a : (e.method = \"throw\", e.arg = new TypeError(\"iterator result is not an object\"), e.delegate = null, f); } function w(t) { this.tryEntries.push(t); } function m(r) { var e = r[4] || {}; e.type = \"normal\", e.arg = t, r[4] = e; } function Context(t) { this.tryEntries = [[-1]], t.forEach(w, this), this.reset(!0); } function x(r) { if (null != r) { var e = r[i]; if (e) return e.call(r); if (\"function\" == typeof r.next) return r; if (!isNaN(r.length)) { var o = -1, a = function e() { for (; ++o < r.length;) if (n.call(r, o)) return e.value = r[o], e.done = !1, e; return e.value = t, e.done = !0, e; }; return a.next = a; } } throw new TypeError(_typeof(r) + \" is not iterable\"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, c(v, \"constructor\", GeneratorFunctionPrototype), c(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction), GeneratorFunction.displayName = c(GeneratorFunctionPrototype, u, \"GeneratorFunction\"), r.isGeneratorFunction = function (t) { var r = \"function\" == typeof t && t.constructor; return !!r && (r === GeneratorFunction || \"GeneratorFunction\" === (r.displayName || r.name)); }, r.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, c(t, u, \"GeneratorFunction\")), t.prototype = Object.create(v), t; }, r.awrap = function (t) { return { __await: t }; }, g(AsyncIterator.prototype), c(AsyncIterator.prototype, a, function () { return this; }), r.AsyncIterator = AsyncIterator, r.async = function (t, e, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(h(t, e, n, o), i); return r.isGeneratorFunction(e) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, g(v), c(v, u, \"Generator\"), c(v, i, function () { return this; }), c(v, \"toString\", function () { return \"[object Generator]\"; }), r.keys = function (t) { var r = Object(t), e = []; for (var n in r) e.unshift(n); return function t() { for (; e.length;) if ((n = e.pop()) in r) return t.value = n, t.done = !1, t; return t.done = !0, t; }; }, r.values = x, Context.prototype = { constructor: Context, reset: function reset(r) { if (this.prev = this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = \"next\", this.arg = t, this.tryEntries.forEach(m), !r) for (var e in this) \"t\" === e.charAt(0) && n.call(this, e) && !isNaN(+e.slice(1)) && (this[e] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0][4]; if (\"throw\" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(r) { if (this.done) throw r; var e = this; function n(t) { a.type = \"throw\", a.arg = r, e.next = t; } for (var o = e.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i[4], u = this.prev, c = i[1], h = i[2]; if (-1 === i[0]) return n(\"end\"), !1; if (!c && !h) throw Error(\"try statement without catch or finally\"); if (null != i[0] && i[0] <= u) { if (u < c) return this.method = \"next\", this.arg = t, n(c), !0; if (u < h) return n(h), !1; } } }, abrupt: function abrupt(t, r) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var n = this.tryEntries[e]; if (n[0] > -1 && n[0] <= this.prev && this.prev < n[2]) { var o = n; break; } } o && (\"break\" === t || \"continue\" === t) && o[0] <= r && r <= o[2] && (o = null); var i = o ? o[4] : {}; return i.type = t, i.arg = r, o ? (this.method = \"next\", this.next = o[2], f) : this.complete(i); }, complete: function complete(t, r) { if (\"throw\" === t.type) throw t.arg; return \"break\" === t.type || \"continue\" === t.type ? this.next = t.arg : \"return\" === t.type ? (this.rval = this.arg = t.arg, this.method = \"return\", this.next = \"end\") : \"normal\" === t.type && r && (this.next = r), f; }, finish: function finish(t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[2] === t) return this.complete(e[4], e[3]), m(e), f; } }, \"catch\": function _catch(t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[0] === t) { var n = e[4]; if (\"throw\" === n.type) { var o = n.arg; m(e); } return o; } } throw Error(\"illegal catch attempt\"); }, delegateYield: function delegateYield(r, e, n) { return this.delegate = { i: x(r), r: e, n: n }, \"next\" === this.method && (this.arg = t), f; } }, r; }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"next\", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"throw\", n); } _next(void 0); }); }; }\npos.controller(\"RightMenuNavCtrl\", function ($scope, $state, $log, notification, receipt, $translate, $rootScope, sales, clerkLoginService, $timeout, eventBus, findCustomerService) {\n  \"use strict\";\n\n  $log.debug(\"Creating RightMenuNavCtrl\");\n  var i18nClaimMessage, i18nCancelSale, i18nNonEmptyReceipt, i18nUnableToParkReceipt, i18nCancelSaleDeactivatedVouchers;\n  $translate([\"toast/claim message\", \"toast/cancel sale\", \"toast/non empty receipt\", \"toast/unable to park receipt\", \"toast/cancel_sale/deactivated_voucher\"]).then(function (translations) {\n    i18nClaimMessage = translations[\"toast/claim message\"];\n    i18nCancelSale = translations[\"toast/cancel sale\"];\n    i18nCancelSaleDeactivatedVouchers = translations[\"toast/cancel_sale/deactivated_voucher\"];\n    i18nNonEmptyReceipt = translations[\"toast/non empty receipt\"];\n    i18nUnableToParkReceipt = translations[\"toast/unable to park receipt\"];\n  });\n  $scope.asideButtonsTemplate = \"views/shared/rightmenunav\";\n  $scope.is = function (state) {\n    return $state.is(state);\n  };\n  $scope.customerAttached = function () {\n    return !!receipt.getLoyaltyCustomerNumber();\n  };\n  $scope.includes = function (state) {\n    return $state.includeS(state);\n  };\n  $scope.displayMakeExpense = function () {\n    if (receipt.getReceipt().items.length === 0) $state.go(\"root.makeexpense\");else notification.pop(\"info\", i18nClaimMessage);\n  };\n  $scope.cancelSale = function () {\n    if (receipt.getPaymentsTotal().greaterThan(0)) {\n      notification.pop(\"info\", i18nCancelSale);\n    } else if (receipt.containsDeactivatedVoucher()) {\n      notification.pop(\"info\", i18nCancelSaleDeactivatedVouchers);\n    } else {\n      eventBus.notify(eventBus.events.sale.cancelled, angular.copy(receipt.getReceipt()));\n      receipt.clearReceipt();\n      findCustomerService.removeSelectedCustomer();\n      $rootScope.selectedItem = false;\n      $state.go(\"root.logout\");\n    }\n  };\n  $scope.parkNote = function () {\n    //Check to only allow to park if there are items or customer present\n    if (receipt.getReceipt().items.length === 0 && !this.customerAttached()) {\n      notification.pop(\"warning\", i18nUnableToParkReceipt);\n      return;\n    }\n    receipt.parkCurrentReceipt().then(function () {\n      $state.go(\"root.login\");\n    }, function (error) {\n      $log.debug(\"park note error\");\n      $log.debug(error);\n    });\n  };\n  $scope.noteCopy = /*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee() {\n    var translate;\n    return _regeneratorRuntime().wrap(function _callee$(_context) {\n      while (1) switch (_context.prev = _context.next) {\n        case 0:\n          _context.prev = 0;\n          _context.next = 3;\n          return sales.reprintReceipt();\n        case 3:\n          logoutUser();\n          _context.next = 12;\n          break;\n        case 6:\n          _context.prev = 6;\n          _context.t0 = _context[\"catch\"](0);\n          _context.next = 10;\n          return $translate(_context.t0);\n        case 10:\n          translate = _context.sent;\n          notification.pop(\"warning\", translate);\n        case 12:\n        case \"end\":\n          return _context.stop();\n      }\n    }, _callee, null, [[0, 6]]);\n  }));\n  function logoutUser() {\n    if (receipt.isEmpty()) {\n      $state.go(\"root.login\");\n    }\n  }\n  $scope.openDrawer = function () {\n    sales.openDrawer(clerkLoginService.currentUser().identifier).then(logoutUser);\n  };\n  $scope.noteCancel = function () {\n    if (receipt.getReceipt().items.length !== 0) return notification.pop(\"warning\", i18nNonEmptyReceipt);\n    if (!$state.is(\"root.split.pos\")) $state.go(\"root.split.pos\");\n    $timeout(function () {\n      $rootScope.$broadcast(\"navigation:notecancel\");\n    });\n  };\n});\n","\"use strict\";\n\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _regeneratorRuntime() { \"use strict\"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return r; }; var t, r = {}, e = Object.prototype, n = e.hasOwnProperty, o = \"function\" == typeof Symbol ? Symbol : {}, i = o.iterator || \"@@iterator\", a = o.asyncIterator || \"@@asyncIterator\", u = o.toStringTag || \"@@toStringTag\"; function c(t, r, e, n) { return Object.defineProperty(t, r, { value: e, enumerable: !n, configurable: !n, writable: !n }); } try { c({}, \"\"); } catch (t) { c = function c(t, r, e) { return t[r] = e; }; } function h(r, e, n, o) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype); return c(a, \"_invoke\", function (r, e, n) { var o = 1; return function (i, a) { if (3 === o) throw Error(\"Generator is already running\"); if (4 === o) { if (\"throw\" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var u = n.delegate; if (u) { var c = d(u, n); if (c) { if (c === f) continue; return c; } } if (\"next\" === n.method) n.sent = n._sent = n.arg;else if (\"throw\" === n.method) { if (1 === o) throw o = 4, n.arg; n.dispatchException(n.arg); } else \"return\" === n.method && n.abrupt(\"return\", n.arg); o = 3; var h = s(r, e, n); if (\"normal\" === h.type) { if (o = n.done ? 4 : 2, h.arg === f) continue; return { value: h.arg, done: n.done }; } \"throw\" === h.type && (o = 4, n.method = \"throw\", n.arg = h.arg); } }; }(r, n, new Context(o || [])), !0), a; } function s(t, r, e) { try { return { type: \"normal\", arg: t.call(r, e) }; } catch (t) { return { type: \"throw\", arg: t }; } } r.wrap = h; var f = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var l = {}; c(l, i, function () { return this; }); var p = Object.getPrototypeOf, y = p && p(p(x([]))); y && y !== e && n.call(y, i) && (l = y); var v = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(l); function g(t) { [\"next\", \"throw\", \"return\"].forEach(function (r) { c(t, r, function (t) { return this._invoke(r, t); }); }); } function AsyncIterator(t, r) { function e(o, i, a, u) { var c = s(t[o], t, i); if (\"throw\" !== c.type) { var h = c.arg, f = h.value; return f && \"object\" == _typeof(f) && n.call(f, \"__await\") ? r.resolve(f.__await).then(function (t) { e(\"next\", t, a, u); }, function (t) { e(\"throw\", t, a, u); }) : r.resolve(f).then(function (t) { h.value = t, a(h); }, function (t) { return e(\"throw\", t, a, u); }); } u(c.arg); } var o; c(this, \"_invoke\", function (t, n) { function i() { return new r(function (r, o) { e(t, n, r, o); }); } return o = o ? o.then(i, i) : i(); }, !0); } function d(r, e) { var n = e.method, o = r.i[n]; if (o === t) return e.delegate = null, \"throw\" === n && r.i[\"return\"] && (e.method = \"return\", e.arg = t, d(r, e), \"throw\" === e.method) || \"return\" !== n && (e.method = \"throw\", e.arg = new TypeError(\"The iterator does not provide a '\" + n + \"' method\")), f; var i = s(o, r.i, e.arg); if (\"throw\" === i.type) return e.method = \"throw\", e.arg = i.arg, e.delegate = null, f; var a = i.arg; return a ? a.done ? (e[r.r] = a.value, e.next = r.n, \"return\" !== e.method && (e.method = \"next\", e.arg = t), e.delegate = null, f) : a : (e.method = \"throw\", e.arg = new TypeError(\"iterator result is not an object\"), e.delegate = null, f); } function w(t) { this.tryEntries.push(t); } function m(r) { var e = r[4] || {}; e.type = \"normal\", e.arg = t, r[4] = e; } function Context(t) { this.tryEntries = [[-1]], t.forEach(w, this), this.reset(!0); } function x(r) { if (null != r) { var e = r[i]; if (e) return e.call(r); if (\"function\" == typeof r.next) return r; if (!isNaN(r.length)) { var o = -1, a = function e() { for (; ++o < r.length;) if (n.call(r, o)) return e.value = r[o], e.done = !1, e; return e.value = t, e.done = !0, e; }; return a.next = a; } } throw new TypeError(_typeof(r) + \" is not iterable\"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, c(v, \"constructor\", GeneratorFunctionPrototype), c(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction), GeneratorFunction.displayName = c(GeneratorFunctionPrototype, u, \"GeneratorFunction\"), r.isGeneratorFunction = function (t) { var r = \"function\" == typeof t && t.constructor; return !!r && (r === GeneratorFunction || \"GeneratorFunction\" === (r.displayName || r.name)); }, r.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, c(t, u, \"GeneratorFunction\")), t.prototype = Object.create(v), t; }, r.awrap = function (t) { return { __await: t }; }, g(AsyncIterator.prototype), c(AsyncIterator.prototype, a, function () { return this; }), r.AsyncIterator = AsyncIterator, r.async = function (t, e, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(h(t, e, n, o), i); return r.isGeneratorFunction(e) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, g(v), c(v, u, \"Generator\"), c(v, i, function () { return this; }), c(v, \"toString\", function () { return \"[object Generator]\"; }), r.keys = function (t) { var r = Object(t), e = []; for (var n in r) e.unshift(n); return function t() { for (; e.length;) if ((n = e.pop()) in r) return t.value = n, t.done = !1, t; return t.done = !0, t; }; }, r.values = x, Context.prototype = { constructor: Context, reset: function reset(r) { if (this.prev = this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = \"next\", this.arg = t, this.tryEntries.forEach(m), !r) for (var e in this) \"t\" === e.charAt(0) && n.call(this, e) && !isNaN(+e.slice(1)) && (this[e] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0][4]; if (\"throw\" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(r) { if (this.done) throw r; var e = this; function n(t) { a.type = \"throw\", a.arg = r, e.next = t; } for (var o = e.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i[4], u = this.prev, c = i[1], h = i[2]; if (-1 === i[0]) return n(\"end\"), !1; if (!c && !h) throw Error(\"try statement without catch or finally\"); if (null != i[0] && i[0] <= u) { if (u < c) return this.method = \"next\", this.arg = t, n(c), !0; if (u < h) return n(h), !1; } } }, abrupt: function abrupt(t, r) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var n = this.tryEntries[e]; if (n[0] > -1 && n[0] <= this.prev && this.prev < n[2]) { var o = n; break; } } o && (\"break\" === t || \"continue\" === t) && o[0] <= r && r <= o[2] && (o = null); var i = o ? o[4] : {}; return i.type = t, i.arg = r, o ? (this.method = \"next\", this.next = o[2], f) : this.complete(i); }, complete: function complete(t, r) { if (\"throw\" === t.type) throw t.arg; return \"break\" === t.type || \"continue\" === t.type ? this.next = t.arg : \"return\" === t.type ? (this.rval = this.arg = t.arg, this.method = \"return\", this.next = \"end\") : \"normal\" === t.type && r && (this.next = r), f; }, finish: function finish(t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[2] === t) return this.complete(e[4], e[3]), m(e), f; } }, \"catch\": function _catch(t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[0] === t) { var n = e[4]; if (\"throw\" === n.type) { var o = n.arg; m(e); } return o; } } throw Error(\"illegal catch attempt\"); }, delegateYield: function delegateYield(r, e, n) { return this.delegate = { i: x(r), r: e, n: n }, \"next\" === this.method && (this.arg = t), f; } }, r; }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"next\", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"throw\", n); } _next(void 0); }); }; }\npos.factory(\"signalr\", function ($timeout, posStorage, $log) {\n  var supportHubUrl = \"DDD_SUPPORT_SIGNALR_URL_PLACEHOLDER\";\n  var isLocalDevelopment = IN_DEBUG_MODE;\n  var SIGNALR_ENABLED = false;\n  var signalrService = {\n    posControlHub: buildHub(supportHubUrl + \"/poscontrolhub\")\n  };\n  signalrService.start = function (tenantId, shopId, groupId, posId) {\n    if (!SIGNALR_ENABLED) return;\n    var queryParams = \"?tenantId=\".concat(tenantId, \"&shopId=\").concat(shopId, \"&groupId=\").concat(groupId, \"&posId=\").concat(posId);\n    this.posControlHub.connection.baseUrl = this.posControlHub.connection.baseUrl + queryParams;\n    startHub(this.posControlHub);\n  };\n  if (SIGNALR_ENABLED) {\n    signalrService.posControlHub.on(\"getLocalStorage\", function (key) {\n      $log.debug(\"Requested to report localstorage: \".concat(key, \".\"));\n      signalrService.posControlHub.invoke(\"ReceiveLocalStorage\", posStorage.get(\"tenantId\"), posStorage.get(\"shopId\"), posStorage.get(\"posId\"), key, JSON.stringify(posStorage.get(key)));\n    });\n    signalrService.posControlHub.on(\"clearLocalStorage\", function (key) {\n      $log.debug(\"Requested to clear localstorage: \".concat(key, \".\"));\n      posStorage.remove(key);\n    });\n  }\n  function startHub(hub) {\n    var hubReconnecter;\n    function reconnecter() {\n      hubReconnecter = $timeout(function () {\n        start();\n      }, 10000, false);\n    }\n    function start() {\n      return _start.apply(this, arguments);\n    }\n    function _start() {\n      _start = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee() {\n        return _regeneratorRuntime().wrap(function _callee$(_context) {\n          while (1) switch (_context.prev = _context.next) {\n            case 0:\n              _context.prev = 0;\n              _context.next = 3;\n              return hub.start();\n            case 3:\n              $log.debug(\"signalr hub connected\");\n              $timeout.cancel(hubReconnecter);\n              _context.next = 11;\n              break;\n            case 7:\n              _context.prev = 7;\n              _context.t0 = _context[\"catch\"](0);\n              console.dir(_context.t0);\n              $log.debug(\"signalr hub could not connect.\");\n            case 11:\n            case \"end\":\n              return _context.stop();\n          }\n        }, _callee, null, [[0, 7]]);\n      }));\n      return _start.apply(this, arguments);\n    }\n    hub.onclose(reconnecter);\n    start();\n  }\n  function buildHub(url) {\n    if (!SIGNALR_ENABLED) return;\n    return new signalR.HubConnectionBuilder().withUrl(url).configureLogging(isLocalDevelopment ? signalR.LogLevel.Information : signalR.LogLevel.Error).build();\n  }\n  return signalrService;\n});\n","\"use strict\";\n\npos.directive(\"slideAction\", function slideAction($log) {\n  return {\n    restrict: \"A\",\n    scope: {\n      slideAction: \"&\",\n      slideActionIscrollInstance: \"=\"\n    },\n    link: function link(scope, ele, attr) {\n      var $ = jQuery;\n      var $slideToggle = ele.find(\".slide-action__slider\");\n      var $slideLabel = ele.find(\".slide-action__slider-label\");\n      var slideMaxed = false;\n      if (scope.slideActionIscrollInstance) {\n        ele.on(\"mouseenter\", function () {\n          scope.slideActionIscrollInstance.disable();\n        });\n        ele.on(\"mouseleave\", function () {\n          scope.slideActionIscrollInstance.enable();\n        });\n      }\n      $slideToggle.draggable({\n        axis: \"x\",\n        containment: \"parent\",\n        drag: function drag(event, ui) {\n          if (ui.position.left + 50 >= $slideToggle.parent().width() - $slideToggle.parent().width() / 100 * 20 && slideMaxed == false) {\n            slideMaxed = true;\n            $slideLabel.addClass(\"slide-action__slider-label--visible\");\n          }\n          if (ui.position.left + 50 < $slideToggle.parent().width() - $slideToggle.parent().width() / 100 * 20 && slideMaxed == true) {\n            slideMaxed = false;\n            $slideLabel.removeClass(\"slide-action__slider-label--visible\");\n          }\n        },\n        stop: function stop(event, ui) {\n          if (ui.position.left + 50 >= $slideToggle.parent().width() - $slideToggle.parent().width() / 100 * 20) {\n            slideMaxed = false;\n            $slideLabel.removeClass(\"slide-action__slider-label--visible\");\n            scope.slideAction();\n            $slideToggle.animate({\n              left: 0\n            }, 200);\n          }\n          if (ui.position.left + 50 < $slideToggle.parent().width() - $slideToggle.parent().width() / 100 * 20) {\n            $log.debug(\"not maximum\", attr.slideAction);\n            slideMaxed = false;\n            $slideLabel.removeClass(\"slide-action__slider-label--visible\");\n            $slideToggle.animate({\n              left: 0\n            }, 200);\n          }\n        }\n      });\n    }\n  };\n});\n","\"use strict\";\n","\"use strict\";\n\npos.factory(\"storeNamespace\", function (store, $cookies, $log) {\n  var cookieShopId = $cookies.get(\"shopId\");\n  var shopId = cookieShopId && cookieShopId != \"undefined\" ? cookieShopId : undefined;\n  var storeContextShopId = store.get(\"contextShopId\");\n  var storeShopId = store.get(\"shopId\");\n  var shop = shopId || storeContextShopId || storeShopId || \"\";\n\n  /*\n  if (storeContextShopId && shopId && storeContextShopId !== shopId) {\n    //$cookies.remove(\"shopId\");\n    $cookies.put(\"shopId\", storeContextShopId, {\n      domain: \".k3imagine.com\"\n    });\n  }\n  */\n\n  var tenant = $cookies.get(\"tenantId\") || store.get(\"contextTenantId\") || store.get(\"tenantId\") || \"\";\n  var namespace = \"\".concat(tenant, \"-\").concat(shop);\n  if (namespace === \"-\" && IN_DEBUG_MODE) namespace = \"2208-9961\";\n  $log.debug(\"getting posStorage as tennant/shopId: \" + namespace);\n  return namespace;\n});\n","\"use strict\";\n\npos.directive(\"toggleNavigation\", function (toggleNavigation, backdrop) {\n  return {\n    restrict: \"A\",\n    link: function link(scope, ele, attrs) {\n      ele.on(\"click\", function () {\n        toggleNavigation.toggle(angular.element(attrs.toggleNavigation), attrs.navigationClass);\n      });\n    }\n  };\n});\npos.directive(\"openNavigation\", function (toggleNavigation, backdrop) {\n  return {\n    restrict: \"A\",\n    link: function link(scope, ele, attrs) {\n      ele.on(\"click\", function (event) {\n        toggleNavigation.open(angular.element(attrs.toggleNavigation), attrs.navigationClass);\n      });\n    }\n  };\n});\npos.directive(\"closeNavigation\", function (toggleNavigation, backdrop) {\n  return {\n    restrict: \"A\",\n    link: function link(scope, ele, attrs) {\n      ele.on(\"click\", function () {\n        toggleNavigation.close(angular.element(attrs.closeNavigation), attrs.navigationClass);\n      });\n    }\n  };\n});\n","\"use strict\";\n\npos.factory(\"toggleNavigation\", function ($compile) {\n  var toggleNavigation = {};\n\n  /**\n   * Navigation Menu\n   */\n  toggleNavigation.toggle = function (targetElement, activeClass) {\n    targetElement.toggleClass(activeClass);\n  };\n  toggleNavigation.open = function (targetElement, activeClass) {\n    if (directtargetElement) {\n      targetElement.addClass(activeClass);\n    } else if (!targetElement.hasClass(activeClass)) {\n      targetElement.addClass(activeClass);\n    }\n  };\n  toggleNavigation.close = function (targetElement, activeClass) {\n    if (targetElement.hasClass(activeClass)) {\n      targetElement.removeClass(activeClass);\n    }\n  };\n  return toggleNavigation;\n});\n","\"use strict\";\n\npos.directive(\"userAgentDetection\", function (userAgentService) {\n  \"use strict\";\n\n  return {\n    restrict: \"A\",\n    link: function link(scope, ele, attrs) {\n      var userAgent = userAgentService.getUserAgent();\n      attrs.$set(\"ua-device\", userAgent.deviceEscaped);\n      attrs.$set(\"ua-browser\", userAgent.browserEscaped);\n      attrs.$set(\"ua-os\", userAgent.osEscaped);\n    }\n  };\n});\n","\"use strict\";\n\npos.factory(\"userAgentService\", function () {\n  \"use strict\";\n\n  var scope = {};\n\n  /**\n   * Device character splits\n   * Used for splitting the final \"get device\" filter-result\n   *\n   * @returns {}\n   */\n  scope.deviceCharacterSplits = [\";\", \")\"];\n\n  /**\n   * Device aliases\n   * If the user agent device matches any of the below,\n   * the device alias will be set to the corresponding value\n   *\n   * @returns {}\n   */\n  scope.deviceAliases = [{\n    original: \"Windows NT\",\n    alias: \"Computer\"\n  }, {\n    original: \"Macintosh\",\n    alias: \"Mac\"\n  }];\n\n  /**\n   * Browser aliases\n   * A list of known vendor-defined browser aliases\n   *\n   * @returns {Browser alias: New browser alias}\n   */\n  scope.browserAliases = {\n    CriOS: \"Chrome\",\n    Trident: \"Internet Explorer\"\n  };\n\n  /**\n   * Operating system aliases\n   * Create operating system aliases based on known devices\n   *\n   * @returns {Device: Operating system alias}\n   */\n  scope.osAliases = {\n    Computer: \"Windows\",\n    Mac: \"Mac OS\",\n    iPhone: \"iOS\",\n    iPad: \"iOS\",\n    iPod: \"iOS\"\n  };\n\n  /**\n   * Operating system version aliases\n   * Known operating system version aliases\n   *\n   * @returns {Device: Operating system alias}\n   */\n  scope.osVersionAliases = {\n    \"Windows NT 6.1\": \"7\",\n    \"Windows NT 6.2\": \"8\",\n    \"Windows NT 10.0\": \"10\"\n  };\n\n  /**\n   * Device detection patterns.\n   * Patterns are automatically applied. This is a way\n   * to define known patterns for device alias detection.\n   *\n   * @returns {array}\n   */\n  scope.devicePatterns = [/Mozilla\\/[0-9.,]* \\((.*); |Mozilla\\/[0-9.,]* \\((.*)\\)/];\n\n  /**\n   * OS detection patterns.\n   * Patterns are automatically applied. This is a way\n   * to define known patterns for OS detection.\n   *\n   * @returns {array}\n   */\n  scope.osPatterns = [/(Android) [0-9,.]*;/ // Android\n  ];\n\n  /**\n   * OS version detection patterns.\n   * Patterns are automatically applied. This is a way\n   * to define known patterns for OS version detection.\n   *\n   * @returns {array}\n   */\n  scope.osVersionPatterns = [/(CPU(.*)OS )([0-9.,_]*) like/i,\n  // iOS (Insert before Mac OS, as it contains Mac OS X in the agent)\n  /(Mac [A-Z ]*)([0-9._,]*)/i,\n  // Mac OS\n  /Android(.*);/i // Android\n  ];\n  scope.osVersionFilters = [[\"OS X\", \"\"], [\"_\", \".\", /_/g]];\n\n  /**\n   * Browser detection patterns.\n   * Patterns are automatically applied. This is a way\n   * to define known patterns for browser alias detection.\n   *\n   * @returns {array}\n   */\n  scope.browserPatterns = [/(.*)(Edge)/i,\n  // MS Edge\n  /(.*)(Chrome|CriOS)/i,\n  // Chrome\n  /(.*)(Firefox)/i,\n  // Firefox\n  /(.*)(Safari)/i,\n  // Safari\n  /(.*)(Trident)/i // Internet Explorer\n  ///Gecko\\) (.*)\\/[0-9.,]* /,          // Chrome\n  ///Gecko\\/[0-9]* (.*)\\/[0-9.,]*/      // Firefox\n  ];\n\n  /**\n   * Returns the user device as an object.\n   *\n   * @returns {object array} result\n   */\n  scope.detectDevice = function () {\n    // Iterate user agent through known device patterns\n    for (var a = 0; a < scope.devicePatterns.length; a++) {\n      var devicePattern = scope.devicePatterns[a];\n      var patternMatches = new RegExp(devicePattern).exec(scope.ua);\n      if (patternMatches) {\n        var result = patternMatches[1];\n\n        // Remove potential unwanted string content\n        for (var b = 0; b < scope.deviceCharacterSplits.length; b++) {\n          var character = scope.deviceCharacterSplits[b];\n          if (result.indexOf(character)) {\n            result = result.split(character)[0];\n          }\n        }\n        scope.originalDevice = result;\n\n        // Iterate original device through known device aliases\n        var abort = false;\n        for (var index = 0; index < scope.deviceAliases.length; index++) {\n          if (abort == true) break;\n          var alias = scope.deviceAliases[index];\n          if (new RegExp(alias.original).test(scope.originalDevice)) {\n            result = alias.alias;\n            abort = true;\n          }\n        }\n        return result;\n      }\n    }\n    return \"Unknown\";\n  };\n\n  /**\n   * Returns the operating system name\n   *\n   * @returns {string} result\n   */\n  scope.detectOperatingSystem = function () {\n    var device = scope.detectDevice();\n\n    // Check if the device matches a known operating system alias\n    if (scope.osAliases[device]) {\n      return scope.osAliases[device];\n    }\n\n    // Iterate through known operating system patterns\n    for (var a = 0; a < scope.osPatterns.length; a++) {\n      var osPattern = scope.osPatterns[a];\n      var patternMatches = new RegExp(osPattern).exec(scope.ua);\n      if (patternMatches) {\n        return patternMatches[1];\n      }\n    }\n    return \"Unknown\";\n  };\n\n  /**\n   * Checks if the operating system matches |operatingSystem|\n   *\n   * @param {string} operatingSystem\n   * @returns {bool} result\n   */\n  scope.isOperatingSystem = function (operatingSystem) {\n    return scope.detectOperatingSystem() == operatingSystem;\n  };\n\n  /**\n   * Returns the OS version\n   *\n   * @returns {string} result\n   */\n  scope.detectOperatingSystemVersion = function () {\n    var result = \"Unknown\";\n    if (scope.osVersionAliases[scope.originalDevice]) {\n      return scope.osVersionAliases[scope.originalDevice];\n    } else {\n      for (var a = 0; a < scope.osVersionPatterns.length; a++) {\n        var versionPattern = scope.osVersionPatterns[a];\n        var patternMatches = new RegExp(versionPattern).exec(scope.ua);\n        if (patternMatches) {\n          result = patternMatches[patternMatches.length - 1];\n          break;\n        }\n      }\n    }\n\n    // Filter version string\n    for (var b = 0; b < scope.osVersionFilters.length; b++) {\n      var filter = scope.osVersionFilters[b];\n      var filterKey = filter[0];\n      var filterValue = filter[1];\n      var filterRegex = filter[2];\n      if (new RegExp(filterKey).test(result)) {\n        result = result.replace(filterRegex, filterValue);\n      }\n    }\n    return result;\n  };\n\n  /**\n   * Returns the name of the user's browser\n   *\n   * @returns {string} result\n   */\n  scope.detectBrowser = function () {\n    var result = \"Unknown\";\n\n    // Iterate user agent through known browser patterns\n    for (var i = 0; i < scope.browserPatterns.length; i++) {\n      var browserPattern = scope.browserPatterns[i];\n      var patternMatches = new RegExp(browserPattern).exec(scope.ua);\n      if (patternMatches) {\n        result = patternMatches[patternMatches.length - 1];\n        break;\n      }\n    }\n\n    // Rename the matched pattern if it matches any known aliases\n    if (scope.browserAliases[result]) {\n      result = scope.browserAliases[result];\n    }\n\n    // Check for iOS/Mac OS browser defaults\n    if (result == \"Version\" && (scope.isOperatingSystem(\"iOS\") || scope.isOperatingSystem(\"Mac OS\"))) {\n      result = \"Safari\";\n    }\n    return result;\n  };\n\n  /**\n   * Returns an object with userAgent details\n   *\n   * @returns {object) childscope\n   */\n  scope.getUserAgent = function () {\n    scope.ua = navigator.userAgent;\n    var result = \"Unknown\";\n\n    // Set UserAgent defaults\n    var userAgentObject = {\n      isMobile: Boolean,\n      device: String,\n      os: String,\n      osVersion: Number,\n      browser: String,\n      string: String\n    };\n\n    // Set user device parameters\n    userAgentObject.string = scope.ua;\n    userAgentObject.device = scope.detectDevice();\n    userAgentObject.originalDevice = scope.originalDevice;\n    userAgentObject.os = scope.detectOperatingSystem();\n    userAgentObject.osVersion = scope.detectOperatingSystemVersion();\n    userAgentObject.browser = scope.detectBrowser();\n\n    // Formatted device paramters\n    userAgentObject.deviceEscaped = scope.escapeUaString(userAgentObject.device);\n    userAgentObject.osEscaped = scope.escapeUaString(userAgentObject.os);\n    userAgentObject.browserEscaped = scope.escapeUaString(userAgentObject.browser);\n\n    // Set resultset\n    result = userAgentObject;\n    return result;\n  };\n  scope.escapeUaString = function (string) {\n    return string.toLowerCase().replace(\" \", \"-\");\n  };\n  return scope;\n});\n","\"use strict\";\n\npos.directive(\"nextFocus\", function ($timeout) {\n  return {\n    restrict: \"A\",\n    link: function link(scope, ele, attrs) {\n      var next = angular.element(attrs.nextFocus);\n      ele.on(\"blur\", function () {\n        $timeout(function () {\n          next.trigger(\"focus\");\n        }, 0);\n      });\n    }\n  };\n});\npos.directive(\"focusOnClick\", function ($timeout) {\n  return {\n    restrict: \"EA\",\n    link: function link(scope, ele, attrs) {\n      var next = angular.element(attrs.focusOnClick);\n      var trigger = function trigger() {\n        next.focus();\n      };\n      ele.on(\"click\", trigger);\n      ele.on(\"tap\", trigger);\n    }\n  };\n});\npos.directive(\"fullscreenChange\", function (fullscreenMode) {\n  return {\n    restrict: \"A\",\n    link: function link(scope, ele, attr) {\n      // Act on F11\n      ele.on(\"keydown\", function (event) {\n        if (event.which == 122) {\n          event.preventDefault();\n          fullscreenMode.toggle();\n        }\n      });\n    }\n  };\n});\npos.directive(\"autoFocus\", function () {\n  return {\n    restrict: \"A\",\n    link: function link(scope, ele, attrs) {\n      ele.focus();\n    }\n  };\n});\npos.directive(\"dddInteger\", function () {\n  return {\n    restrict: \"A\",\n    require: \"ngModel\",\n    link: function link(scope, ele, attr, ctrl) {\n      ctrl.$parsers.unshift(function (viewValue) {\n        return parseInt(viewValue);\n      });\n    }\n  };\n});\npos.factory(\"hideDivSuppressor\", function () {\n  return {\n    isSuppressed: false\n  };\n});\npos.directive(\"dddHideDiv\", function ($document, $timeout, hideDivSuppressor) {\n  return {\n    restrict: \"A\",\n    scope: {\n      target: \"@\"\n    },\n    link: function link(scope, ele, attr) {\n      var divClicked = false;\n      var suppress = false;\n      var target = angular.element(scope.target);\n      hideDivSuppressor.target = target;\n      target.hide();\n      ele.on(\"mousedown\", function () {\n        divClicked = true;\n      });\n      ele.on(\"click\", function () {\n        if (!suppress && $document[0].activeElement != target[0]) {\n          $timeout(function () {\n            target.show();\n            target.addClass(\"is-visible\");\n            target.trigger(\"focus\");\n          }, 0);\n        }\n        suppress = divClicked = false;\n      });\n      target.on(\"click\", function (event) {\n        $timeout(hide, 0);\n      });\n      target.on(\"blur\", function (event) {\n        suppress = divClicked;\n        $timeout(hide, 0);\n      });\n      function hide() {\n        var suppressor = hideDivSuppressor.isSuppressed;\n        hideDivSuppressor.isSuppressed = false;\n        target.removeClass(\"is-visible\");\n        if (!suppressor) return target.hide();\n        function focusBack() {\n          suppressor.off(\"blur\", focusBack);\n          $timeout(function () {\n            target.trigger(\"focus\");\n          }, 0);\n        }\n        suppressor.on(\"blur\", focusBack);\n      }\n    }\n  };\n});\npos.directive(\"dddDontHideDiv\", function (hideDivSuppressor) {\n  return {\n    restrict: \"A\",\n    link: function link(scope, ele, attr) {\n      function suppress() {\n        hideDivSuppressor.isSuppressed = ele;\n      }\n      if (ele.is(\"input\") || ele.is(\"select\")) {\n        ele.on(\"mousedown\", suppress);\n        ele.on(\"click\", suppress);\n        ele.on(\"tap\", suppress);\n        return;\n      }\n      ele.on(\"mousedown\", function (event) {\n        event.preventDefault();\n      });\n      ele.on(\"click\", function (event) {\n        event.stopPropagation();\n      });\n    }\n  };\n});\npos.directive(\"readonlyWhenVisible\", function () {\n  return {\n    link: function link(scope, ele, attr) {\n      var followElement = angular.element(attr.readonlyWhenVisible);\n      scope.$watch(function () {\n        return followElement.is(\":visible\");\n      }, function (visible) {\n        if (visible) ele.attr(\"readonly\", \"readonly\");else ele.removeAttr(\"readonly\");\n      });\n    }\n  };\n});\nangular.forEach([\"showWhenFocusOn\", \"hideWhenFocusOn\"], function (directiveName) {\n  pos.directive(directiveName, /*@ngInject*/function ($document) {\n    var xnor = function xnor(a, b) {\n      return !(a ^ b);\n    };\n    return {\n      restrict: \"A\",\n      link: function link(scope, ele, attr) {\n        var elementStr = attr[directiveName];\n        if (!elementStr.startsWith(\"#\")) elementStr = \"#\" + elementStr;\n        var checkElement = angular.element(elementStr)[0];\n        scope.$watch(function () {\n          return $document[0].activeElement;\n        }, function (activeElement) {\n          if (xnor(directiveName === \"showWhenFocusOn\", activeElement === checkElement)) ele.show();else ele.hide();\n        });\n      }\n    };\n  });\n});\npos.directive(\"iscrollToMe\", function ($interval) {\n  return {\n    link: function link(scope, ele, attr) {\n      // we need to find the iscroll instance, but it might not be available yet when the directive is compiled\n      // we'll keep looking for it until we find it\n      var context = {};\n      var iscroll;\n      context.locateIscroll = $interval(function () {\n        // use the passed in iscroll variable name or try and guess where it is\n        iscroll = scope[attr.iscrollToMe] || scope.instance || scope.iscroll || scope.iscrollInstance;\n        if (iscroll) $interval.cancel(context.locateIscroll);\n      }, 200, 50); // try for 10 secs to find the iscroll instance then drop it\n\n      // clean up if the user navigates away from the view quickly\n      ele.on(\"$destroy\", function () {\n        $interval.cancel(context.locateIscroll);\n      });\n\n      // scroll to the element when it's focused\n      ele.on(\"focus\", function () {\n        if (!iscroll) return;\n        iscroll.scrollToElement(ele[0], 0, true, true);\n      });\n    }\n  };\n});\n","\"use strict\";\n\nvar _require = require(\"decimal.js\"),\n  Decimal = _require[\"default\"];\nvar _require2 = require(\"lodash\"),\n  findLast = _require2.findLast;\npos.factory(\"uuid\", function ($window) {\n  function generateUUID() {\n    var d = new Date().getTime();\n    var uuid = \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(/[xy]/g, function (c) {\n      var r = (d + $window.Math.random() * 16) % 16 | 0;\n      d = $window.Math.floor(d / 16);\n      return (c == \"x\" ? r : r & 0x3 | 0x8).toString(16);\n    });\n    return uuid;\n  }\n  return generateUUID;\n});\npos.factory(\"receiptHelper\", function (receipt) {\n  var onehundred = new Decimal(100);\n  function getReceiptSalesPriceTotal(receipt) {\n    var total = new Decimal(0);\n    angular.forEach(receipt.items, function (item) {\n      total = total.plus(new Decimal(item.quantity).abs().times(item.salesPrice));\n    });\n    return total;\n  }\n  function getReceiptEffectiveSalesPriceTotal(receipt) {\n    var total = new Decimal(0);\n    angular.forEach(receipt.items, function (item) {\n      total = total.plus(new Decimal(item.quantity).abs().times(getLineEffectiveSalesPrice(item)));\n    });\n    return total.minus(getReceiptRoundingDifference(receipt));\n  }\n  function getReceiptTotal(receipt) {\n    var total = new Decimal(0);\n    angular.forEach(receipt.items, function (item) {\n      total = total.plus(new Decimal(item.quantity).times(getLineEffectiveSalesPrice(item)));\n    });\n    return total;\n  }\n  function getReceiptRoundingDifference(receipt) {\n    var roundingDifference = new Decimal(0);\n    if (receipt.payments) receipt.payments.forEach(function (payment) {\n      if (payment.paymentType === \"Rounding\") roundingDifference = roundingDifference.plus(payment.amount);\n    });\n    return roundingDifference;\n  }\n  function getReceiptTotalDiscount(receipt) {\n    if (receipt.payments) return onehundred.minus(getReceiptEffectiveSalesPriceTotal(receipt).times(onehundred).dividedBy(getReceiptSalesPriceTotal(receipt)));\n    return new Decimal(0);\n  }\n  function getReceiptTotalDiscountCurrency(receipt) {\n    var discount = getReceiptEffectiveSalesPriceTotal(receipt);\n    var total = getReceiptSalesPriceTotal(receipt);\n    return total.minus(discount);\n  }\n  function getItemCount(receipt) {\n    var total = Decimal(0);\n    angular.forEach(receipt.items, function (item) {\n      if (item.itemgroup === 9918) return;\n      total = total.plus(new Decimal(item.quantity).abs());\n    });\n    return total.toNumber();\n  }\n  function getPaymentCount(receipt) {\n    var total = Decimal(0);\n    angular.forEach(receipt.payments, function (item) {\n      total = total.plus(new Decimal(item.quantity).abs());\n    });\n    return total.toNumber();\n  }\n  function getLineDiscountPctWithRounding(line) {\n    if (line.roundingDiff === undefined) {\n      line.totalDiscountPercent = onehundred.minus(line.effectiveSalesPrice.times(onehundred).dividedBy(line.salesPrice));\n    } else {\n      line.totalDiscountPercent = onehundred.minus(getLineEffectiveSalesPrice(line).times(onehundred).dividedBy(line.salesPrice));\n    }\n    line.totalDiscountPercent = line.totalDiscountPercent.toDecimalPlacesUnrounded(2);\n    return line.totalDiscountPercent;\n  }\n  function getReceiptDiscountPctWithRounding(line, receipt) {\n    line.totalDiscountPercent = onehundred.minus(getLineEffectiveSalesPriceTotal(line).times(onehundred).dividedBy(line.salesPrice));\n    line.totalDiscountPercent = line.totalDiscountPercent.toDecimalPlacesUnrounded(2);\n    return line.totalDiscountPercent;\n  }\n  function getLineDiscountPct(line, receipt) {\n    if (receipt === undefined) {\n      return getLineDiscountPctWithRounding(line);\n    }\n    return getReceiptDiscountPctWithRounding(line, receipt);\n  }\n  function getLineEffectiveSalesPrice(line) {\n    if (line.roundingDiff) {\n      return line.effectiveSalesPrice.plus(line.roundingDiff / line.quantity);\n    }\n    return line.effectiveSalesPrice;\n  }\n  function getLineEffectiveSalesPriceTotal(line) {\n    return receipt.getSelectedLineTotal(line);\n  }\n  function getLineSalesPriceTotal(line) {\n    return line.salesPrice.times(line.quantity);\n  }\n  function isLineDiscounted(line) {\n    return line.effectiveSalesPrice.lessThan(line.salesPrice);\n  }\n  function includesLineDiscount(line) {\n    return _.some(line.discountDetails, [\"type\", \"Line\"]);\n  }\n  function getLineInfo(line) {\n    // Add cases to return relevant info for different types of payment\n    switch (line.paymentType) {\n      case \"Card\":\n        return line.cardName;\n      default:\n        return \"\";\n    }\n  }\n  function getReceiptVatTotal(receipt) {\n    var finalData = [];\n    var groupedData = _.groupBy(receipt.items, \"vat\");\n    angular.forEach(groupedData, function (vatItem) {\n      angular.forEach(vatItem, function (item) {\n        var quantity = new Decimal(item.quantity).times(getLineEffectiveSalesPrice(item));\n        var itemVat = quantity - new Decimal(quantity / (100 + item.vat) * 100);\n        var data = {\n          vatPercent: item.vat,\n          vatAmount: itemVat\n        };\n        finalData.push(data);\n      });\n    });\n    var helper = {};\n    var result = finalData.reduce(function (r, o) {\n      var key = o.vatPercent;\n      if (!helper[key]) {\n        helper[key] = Object.assign({}, o); // create a copy of o\n        r.push(helper[key]);\n      } else {\n        helper[key].vatAmount += o.vatAmount;\n      }\n      return r;\n    }, []);\n    return result;\n  }\n  return {\n    getReceiptSalesPriceTotal: getReceiptSalesPriceTotal,\n    getReceiptEffectiveSalesPriceTotal: getReceiptEffectiveSalesPriceTotal,\n    getReceiptTotal: getReceiptTotal,\n    getReceiptVatTotal: getReceiptVatTotal,\n    getReceiptTotalDiscount: getReceiptTotalDiscount,\n    getReceiptTotalDiscountCurrency: getReceiptTotalDiscountCurrency,\n    getItemCount: getItemCount,\n    getPaymentCount: getPaymentCount,\n    getLineDiscountPct: getLineDiscountPct,\n    getLineEffectiveSalesPriceTotal: getLineEffectiveSalesPriceTotal,\n    getLineSalesPriceTotal: getLineSalesPriceTotal,\n    isLineDiscounted: isLineDiscounted,\n    includesLineDiscount: includesLineDiscount,\n    getLineInfo: getLineInfo\n  };\n});\npos.factory(\"addressHelper\", function () {\n  function getAddressString(a) {\n    var arr = [];\n    var whitespace = \" \";\n    var seperator = \", \";\n    var g = [];\n    if (a.address1) g.push(a.address1);\n    if (a.address2) g.push(a.address2);\n    if (a.address3) g.push(a.address3);\n    var g1 = g.join(whitespace);\n    g = [];\n    if (a.city) g.push(a.city);\n    if (a.county) g.push(a.county);\n    var g2 = g.join(whitespace);\n    g = [];\n    if (a.state) g.push(a.state);\n    if (a.zipCode) g.push(a.zipCode);\n    var g3 = g.join(whitespace);\n    g = [];\n    if (a.country) g.push(a.country);\n    var g4 = g.join(whitespace);\n    arr.push(g1, g2, g3, g4);\n    var filtered = arr.filter(function (x) {\n      return x !== \"\" && x;\n    });\n    return filtered.join(seperator);\n  }\n  return {\n    getAddressString: getAddressString\n  };\n});\n","\"use strict\";\n\npos.factory(\"versionService\", function (store, notification, $timeout, posStorage, $log) {\n  var VERSION_STORE_KEY = \"version\";\n  var service = {\n    compare: versionCompare\n  };\n  var versionElement = angular.element(\"#version\") || {\n    text: function text() {\n      return \"UNKNOWN\";\n    }\n  };\n  var version = versionElement.text().replace(\"v\", \"\");\n  var previousVersion = store.get(VERSION_STORE_KEY) || \"\";\n  var strictVersion = version.split(\"-\").shift();\n  var strictPreviousVersion = previousVersion.split(\"-\").shift();\n  if (previousVersion && versionCompare(strictVersion, strictPreviousVersion) > 0) {\n    var type = \"info\";\n    var title = \"You've been updated!\";\n    var message = \"Hi there! We're happy to let you know that you've just been updated from v\" + previousVersion + \" to v\" + version + \" (latest)\";\n    $timeout(function () {\n      notification.pop(type, title, message);\n      notification.notify(type, title, message);\n    });\n  }\n\n  // 2.3.0 is the version where named storage is added, thus we need to migrate\n  // if the previous version is lower than 2.3.0\n  if (previousVersion && versionCompare(strictPreviousVersion, \"2.3.0\") < 0) migrateToNamedStore(posStorage, store);\n  store.set(VERSION_STORE_KEY, version);\n  service.getVersion = function getVersion() {\n    return version;\n  };\n  function migrateToNamedStore(namedStore, store) {\n    var keys = [];\n    for (var i = 0; i < localStorage.length; i++) {\n      var key = localStorage.key(i);\n      // don't double migrate if we're unlucky that this method is invoked twice\n      // and don't move global keys\n      if (key.split(\".\").length == 2 || key === \"products\" || key === \"version\" || key === \"contextShopId\") continue;\n      keys.push(key);\n    }\n    for (var k = 0; k < keys.length; k++) {\n      var lskey = keys[k];\n      try {\n        namedStore.set(lskey, store.get(lskey));\n        $log.debug(\"removing \" + lskey);\n        store.remove(lskey);\n      } catch (e) {\n        $log.error(\"error migrating key \" + lskey);\n        $log.error(e);\n      }\n    }\n  }\n  return service;\n\n  /**\n   * Compares two software version numbers (e.g. \"1.7.1\" or \"1.2b\").\n   *\n   * This function was born in http://stackoverflow.com/a/6832721.\n   *\n   * @param {string} v1 The first version to be compared.\n   * @param {string} v2 The second version to be compared.\n   * @param {object} [options] Optional flags that affect comparison behavior:\n   * <ul>\n   *     <li>\n   *         <tt>lexicographical: true</tt> compares each part of the version strings lexicographically instead of\n   *         naturally; this allows suffixes such as \"b\" or \"dev\" but will cause \"1.10\" to be considered smaller than\n   *         \"1.2\".\n   *     </li>\n   *     <li>\n   *         <tt>zeroExtend: true</tt> changes the result if one version string has less parts than the other. In\n   *         this case the shorter string will be padded with \"zero\" parts instead of being considered smaller.\n   *     </li>\n   * </ul>\n   * @returns {number|NaN}\n   * <ul>\n   *    <li>0 if the versions are equal</li>\n   *    <li>a negative integer iff v1 < v2</li>\n   *    <li>a positive integer iff v1 > v2</li>\n   *    <li>NaN if either version string is in the wrong format</li>\n   * </ul>\n   *\n   * @copyright by Jon Papaioannou ([\"john\", \"papaioannou\"].join(\".\") + \"@gmail.com\")\n   * @license This function is in the public domain. Do what you want with it, no strings attached.\n   */\n  function versionCompare(v1, v2, options) {\n    var lexicographical = options && options.lexicographical,\n      zeroExtend = options && options.zeroExtend,\n      v1parts = v1.split(\".\"),\n      v2parts = v2.split(\".\");\n    function isValidPart(x) {\n      return (lexicographical ? /^\\d+[A-Za-z]*$/ : /^\\d+$/).test(x);\n    }\n    if (!v1parts.every(isValidPart) || !v2parts.every(isValidPart)) {\n      return NaN;\n    }\n    if (zeroExtend) {\n      while (v1parts.length < v2parts.length) v1parts.push(\"0\");\n      while (v2parts.length < v1parts.length) v2parts.push(\"0\");\n    }\n    if (!lexicographical) {\n      v1parts = v1parts.map(Number);\n      v2parts = v2parts.map(Number);\n    }\n    for (var i = 0; i < v1parts.length; ++i) {\n      if (v2parts.length == i) {\n        return 1;\n      }\n      if (v1parts[i] == v2parts[i]) {\n        continue;\n      } else if (v1parts[i] > v2parts[i]) {\n        return 1;\n      } else {\n        return -1;\n      }\n    }\n    if (v1parts.length != v2parts.length) {\n      return -1;\n    }\n    return 0;\n  }\n});\n","\"use strict\";\n\npos.factory(\"voucherMessageService\", function ($translate) {\n  var service = {};\n  var translationkeys = [{\n    errorcode: -3,\n    key: \"voucher/errorcode/CommunicationError\"\n  }, {\n    errorcode: -2,\n    key: \"voucher/errorcode/BrokerConfigurationError\"\n  }, {\n    errorcode: -1,\n    key: \"voucher/errorcode/BrokerServiceError\"\n  }, {\n    errorcode: 0,\n    key: \"voucher/errorcode/Succeeded\"\n  }, {\n    errorcode: 1,\n    key: \"voucher/errorcode/InvalidOperation\"\n  }, {\n    errorcode: 2,\n    key: \"voucher/errorcode/XmlSyntaxError\"\n  }, {\n    errorcode: 3,\n    key: \"voucher/errorcode/NotLoggedIn\"\n  }, {\n    errorcode: 4,\n    key: \"voucher/errorcode/LoginFailed\"\n  }, {\n    errorcode: 5,\n    key: \"voucher/errorcode/InvalidParameters\"\n  }, {\n    errorcode: 6,\n    key: \"voucher/errorcode/NotAllowedToImportThisCardHolder\"\n  }, {\n    errorcode: 7,\n    key: \"voucher/errorcode/RetailerNotInGroup\"\n  }, {\n    errorcode: 8,\n    key: \"voucher/errorcode/InvalidIdentifier\"\n  }, {\n    errorcode: 9,\n    key: \"voucher/errorcode/InvalidUnknownRetailer\"\n  }, {\n    errorcode: 10,\n    key: \"voucher/errorcode/InvalidUnknownTerminal\"\n  }, {\n    errorcode: 11,\n    key: \"voucher/errorcode/NotAuthorized\"\n  }, {\n    errorcode: 12,\n    key: \"voucher/errorcode/InvalidTerminalOriginatingAddress\"\n  }, {\n    errorcode: 13,\n    key: \"voucher/errorcode/NoConfigurationAvailable\"\n  }, {\n    errorcode: 14,\n    key: \"voucher/errorcode/OriginationAddressNotAuthorized\"\n  }, {\n    errorcode: 15,\n    key: \"voucher/errorcode/NoTransactionAvailableToConfirmOrCancel\"\n  }, {\n    errorcode: 16,\n    key: \"voucher/errorcode/RetaileridTerminalidCombinationDoesNotExist\"\n  }, {\n    errorcode: 18,\n    key: \"voucher/errorcode/UnableToCancel\"\n  }, {\n    errorcode: 19,\n    key: \"voucher/errorcode/TransactionCanNotBeCanceledAtThisMoment\"\n  }, {\n    errorcode: 20,\n    key: \"voucher/errorcode/AddCardFailed\"\n  }, {\n    errorcode: 21,\n    key: \"voucher/errorcode/CardAlreadyExists\"\n  }, {\n    errorcode: 22,\n    key: \"voucher/errorcode/UnknownBrandType\"\n  }, {\n    errorcode: 23,\n    key: \"voucher/errorcode/DeviceBlockedDueToLicenseAgreementViolation\"\n  }, {\n    errorcode: 24,\n    key: \"voucher/errorcode/DeviceUsageExceedsLicenseAgreement\"\n  }, {\n    errorcode: 100,\n    key: \"voucher/errorcode/PostIssueFailed\"\n  }, {\n    errorcode: 101,\n    key: \"voucher/errorcode/CardOrCustomerDoesNotExist\"\n  }, {\n    errorcode: 102,\n    key: \"voucher/errorcode/CardIsExpired\"\n  }, {\n    errorcode: 103,\n    key: \"voucher/errorcode/CardIsBlocked\"\n  }, {\n    errorcode: 104,\n    key: \"voucher/errorcode/InsufficientBalanceToPerformTransaction\"\n  }, {\n    errorcode: 105,\n    key: \"voucher/errorcode/UsernamePasswordDoNotMatchWithCardholder\"\n  }, {\n    errorcode: 106,\n    key: \"voucher/errorcode/CardholderNotRegistered\"\n  }, {\n    errorcode: 107,\n    key: \"voucher/errorcode/InvalidSequenceNumber\"\n  }, {\n    errorcode: 108,\n    key: \"voucher/errorcode/CardNotRelatedToAGroup\"\n  }, {\n    errorcode: 109,\n    key: \"voucher/errorcode/InvalidCardid\"\n  }, {\n    errorcode: 110,\n    key: \"voucher/errorcode/InvalidEmailAddress\"\n  }, {\n    errorcode: 111,\n    key: \"voucher/errorcode/InvalidCountry\"\n  }, {\n    errorcode: 112,\n    key: \"voucher/errorcode/InvalidObjectidOrObjecttype\"\n  }, {\n    errorcode: 113,\n    key: \"voucher/errorcode/InvalidCardcodeInCustomerid\"\n  }, {\n    errorcode: 114,\n    key: \"voucher/errorcode/CardIsAlreadyActive\"\n  }, {\n    errorcode: 115,\n    key: \"voucher/errorcode/InvalidGroupid\"\n  }, {\n    errorcode: 116,\n    key: \"voucher/errorcode/InvalidCardFormat\"\n  }, {\n    errorcode: 117,\n    key: \"voucher/errorcode/InvalidScheme\"\n  }, {\n    errorcode: 118,\n    key: \"voucher/errorcode/CardIsTransferred\"\n  }, {\n    errorcode: 119,\n    key: \"voucher/errorcode/CardIsNotActive\"\n  }, {\n    errorcode: 120,\n    key: \"voucher/errorcode/IncorrectActivationOrPurchaseValue\"\n  }, {\n    errorcode: 121,\n    key: \"voucher/errorcode/CustomerAlreadyExists\"\n  }, {\n    errorcode: 122,\n    key: \"voucher/errorcode/CardAlreadyExists1\"\n  }, {\n    errorcode: 123,\n    key: \"voucher/errorcode/CustomerDoesNotExist\"\n  }, {\n    errorcode: 124,\n    key: \"voucher/errorcode/MaximumNumberOfTransactionsPerDayReached\"\n  }, {\n    errorcode: 125,\n    key: \"voucher/errorcode/MaximumNumberOfTransactionsPerDayPerRetailerReached\"\n  }, {\n    errorcode: 126,\n    key: \"voucher/errorcode/MaximumIssuePointsPerDayIsReached\"\n  }, {\n    errorcode: 127,\n    key: \"voucher/errorcode/CardNotAvailable\"\n  }, {\n    errorcode: 128,\n    key: \"voucher/errorcode/NotAllowedToRedeemOnDateOfFirstTransaction\"\n  }, {\n    errorcode: 129,\n    key: \"voucher/errorcode/NumberOfPointsForIssueOrRedeemTransactionIsTooHigh\"\n  }, {\n    errorcode: 130,\n    key: \"voucher/errorcode/TheServiceIsNotAvailableOnTheCard\"\n  }, {\n    errorcode: 131,\n    key: \"voucher/errorcode/TheServiceCannotBeVerified\"\n  }, {\n    errorcode: 132,\n    key: \"voucher/errorcode/ReceiptNotFound\"\n  }, {\n    errorcode: 133,\n    key: \"voucher/errorcode/ReceiptAlreadyClaimed\"\n  }, {\n    errorcode: 134,\n    key: \"voucher/errorcode/InvalidBlockDate\"\n  }, {\n    errorcode: 135,\n    key: \"voucher/errorcode/SchemeidAlreadyExists\"\n  }, {\n    errorcode: 136,\n    key: \"voucher/errorcode/BalanceNotAvailable\"\n  }, {\n    errorcode: 140,\n    key: \"voucher/errorcode/InvalidBrand\"\n  }, {\n    errorcode: 141,\n    key: \"voucher/errorcode/InvalidBrandtype\"\n  }, {\n    errorcode: 161,\n    key: \"voucher/errorcode/MaximumCardBalanceIsReached\"\n  }, {\n    errorcode: 162,\n    key: \"voucher/errorcode/CardIsNotReloadable\"\n  }, {\n    errorcode: 163,\n    key: \"voucher/errorcode/CardIsAlreadyAssignedToACustomer\"\n  }, {\n    errorcode: 164,\n    key: \"voucher/errorcode/WrongCurrency\"\n  }, {\n    errorcode: 165,\n    key: \"voucher/errorcode/TransactionWouldExceedConfiguredLimits\"\n  }, {\n    errorcode: 201,\n    key: \"voucher/errorcode/LoginFailedUnknownUser\"\n  }, {\n    errorcode: 202,\n    key: \"voucher/errorcode/MaximumSimultaneousLoginsReached\"\n  }, {\n    errorcode: 203,\n    key: \"voucher/errorcode/UserIsAlreadyLoggedIn\"\n  }, {\n    errorcode: 204,\n    key: \"voucher/errorcode/LoginAccountIsSetInactive\"\n  }, {\n    errorcode: 205,\n    key: \"voucher/errorcode/DatabaseIsLocked\"\n  }, {\n    errorcode: 206,\n    key: \"voucher/errorcode/DatabaseIsExpiredAndNowSetToLocked\"\n  }, {\n    errorcode: 207,\n    key: \"voucher/errorcode/LoginFailedInvalidPassword\"\n  }, {\n    errorcode: 208,\n    key: \"voucher/errorcode/InvalidUsername\"\n  }, {\n    errorcode: 209,\n    key: \"voucher/errorcode/InvalidSecretanswer\"\n  }, {\n    errorcode: 210,\n    key: \"voucher/errorcode/InvalidSecretquestion\"\n  }, {\n    errorcode: 211,\n    key: \"voucher/errorcode/InvalidPin\"\n  }, {\n    errorcode: 212,\n    key: \"voucher/errorcode/InvalidEanCode\"\n  }, {\n    errorcode: 250,\n    key: \"voucher/errorcode/InvalidEmailAddress1\"\n  }, {\n    errorcode: 251,\n    key: \"voucher/errorcode/EmailOrCustomerInformationIsMissing\"\n  }, {\n    errorcode: 252,\n    key: \"voucher/errorcode/EmailAddressAlreadyInUse\"\n  }, {\n    errorcode: 300,\n    key: \"voucher/errorcode/InvalidConfigurationid\"\n  }, {\n    errorcode: 301,\n    key: \"voucher/errorcode/InvalidVoucherid\"\n  }, {\n    errorcode: 302,\n    key: \"voucher/errorcode/InvalidIssuedvoucherid\"\n  }, {\n    errorcode: 303,\n    key: \"voucher/errorcode/VoucherNotFound\"\n  }, {\n    errorcode: 304,\n    key: \"voucher/errorcode/VoucherNotAvailable\"\n  }, {\n    errorcode: 305,\n    key: \"voucher/errorcode/InvalidVoucherownerCombination\"\n  }, {\n    errorcode: 306,\n    key: \"voucher/errorcode/InvalidMediaidmediatype\"\n  }, {\n    errorcode: 307,\n    key: \"voucher/errorcode/VoucherHasBeenRedeemedAlready\"\n  }, {\n    errorcode: 308,\n    key: \"voucher/errorcode/DeactivationNotSupportedForThisVoucher\"\n  }, {\n    errorcode: 309,\n    key: \"voucher/errorcode/VoucherRedeemCurrentlyDeniedForThisVoucher\"\n  }, {\n    errorcode: 310,\n    key: \"voucher/errorcode/InvalidRedeemCurrentlyDeniedForThisVoucher\"\n  }, {\n    errorcode: 311,\n    key: \"voucher/errorcode/MaximumNumberOfVoucherIssuesExceededForThisVoucher\"\n  }, {\n    errorcode: 312,\n    key: \"voucher/errorcode/VoucherHasBeenPurchasedAlready\"\n  }, {\n    errorcode: 313,\n    key: \"voucher/errorcode/VoucherReservationExpired\"\n  }, {\n    errorcode: 314,\n    key: \"voucher/errorcode/InvalidDeliveryMethod\"\n  }, {\n    errorcode: 401,\n    key: \"voucher/errorcode/CardidinitialaccesscodeMismatch\"\n  }, {\n    errorcode: 402,\n    key: \"voucher/errorcode/SchemeNotFound\"\n  }, {\n    errorcode: 403,\n    key: \"voucher/errorcode/InvalidRegistercode\"\n  }, {\n    errorcode: 404,\n    key: \"voucher/errorcode/CardDoesNotBelongToTheCustomer\"\n  }, {\n    errorcode: 405,\n    key: \"voucher/errorcode/TheSourceAndDestinationCardMustBeSpecified\"\n  }, {\n    errorcode: 406,\n    key: \"voucher/errorcode/MayNotTransferToTheSameCard\"\n  }, {\n    errorcode: 407,\n    key: \"voucher/errorcode/TransferCustomerFailed\"\n  }, {\n    errorcode: 408,\n    key: \"voucher/errorcode/CustomerNotFound\"\n  }, {\n    errorcode: 409,\n    key: \"voucher/errorcode/InvalidCustomeridFormat\"\n  }, {\n    errorcode: 500,\n    key: \"voucher/errorcode/NoActiveDraw\"\n  }, {\n    errorcode: 501,\n    key: \"voucher/errorcode/DrawIsClosedNewSalesStartsTomorrow\"\n  }, {\n    errorcode: 502,\n    key: \"voucher/errorcode/NoLotteryTicketsAvailable\"\n  }, {\n    errorcode: 503,\n    key: \"voucher/errorcode/NoActiveDrawForThisProduct\"\n  }, {\n    errorcode: 504,\n    key: \"voucher/errorcode/SoldOutSelectADifferentDay\"\n  }, {\n    errorcode: 550,\n    key: \"voucher/errorcode/CustomerDoesNotExist1\"\n  }, {\n    errorcode: 551,\n    key: \"voucher/errorcode/ValidationField1NotValid\"\n  }, {\n    errorcode: 552,\n    key: \"voucher/errorcode/ValidationField2NotValid\"\n  }, {\n    errorcode: 553,\n    key: \"voucher/errorcode/ValidationField3NotValid\"\n  }, {\n    errorcode: 554,\n    key: \"voucher/errorcode/DeliveryTypeIsNotSupported\"\n  }, {\n    errorcode: 555,\n    key: \"voucher/errorcode/CardAlreadyHasAPin\"\n  }, {\n    errorcode: 556,\n    key: \"voucher/errorcode/CardDoesHaveAPin\"\n  }, {\n    errorcode: 557,\n    key: \"voucher/errorcode/InvalidPin1\"\n  }, {\n    errorcode: 558,\n    key: \"voucher/errorcode/CouldNotEncryptPin\"\n  }, {\n    errorcode: 700,\n    key: \"voucher/errorcode/PaymentOk\"\n  }, {\n    errorcode: 701,\n    key: \"voucher/errorcode/PaymentFailed\"\n  }, {\n    errorcode: 702,\n    key: \"voucher/errorcode/PaymentDeclined\"\n  }, {\n    errorcode: 703,\n    key: \"voucher/errorcode/PaymentPending\"\n  }, {\n    errorcode: 704,\n    key: \"voucher/errorcode/PaymentRevoked\"\n  }, {\n    errorcode: 705,\n    key: \"voucher/errorcode/TransactionNotFound\"\n  }, {\n    errorcode: 706,\n    key: \"voucher/errorcode/PaymentNeedsToBeCanceled\"\n  }, {\n    errorcode: 914,\n    key: \"voucher/errorcode/SpecialFixedValueActivationAlreadyDone\"\n  }, {\n    errorcode: 919,\n    key: \"voucher/errorcode/SpecialFixedValueActivation\"\n  }];\n  service.getErrorMessage = function (errorCode) {\n    if (errorCode == 0) return;\n    var message = errorCode + \" - \";\n    var translation = translationkeys.find(function (t) {\n      return t.errorcode == errorCode;\n    });\n    if (translation) message += $translate.instant(translation.key);else message += $translate.instant(\"error_not_found\");\n    return message;\n  };\n  service.getStatusMessage = function (statusCode) {\n    switch (statusCode) {\n      case 1:\n        return $translate.instant(\"voucher/status/inactive\");\n      case 2:\n        return $translate.instant(\"voucher/status/active\");\n      case 3:\n        return $translate.instant(\"voucher/status/blocked\");\n      case 4:\n        return $translate.instant(\"voucher/status/redeemed\");\n      case 5:\n        return $translate.instant(\"voucher/status/expired\");\n      case 6:\n        return $translate.instant(\"voucher/status/subsituted\");\n      case 7:\n        return $translate.instant(\"voucher/status/disabled\");\n      default:\n        return $translate.instant(\"voucher/status/undefined\");\n    }\n  };\n  service.getPaymentMessage = function (responseCode, balance, statusCode) {\n    if (responseCode != 0) {\n      return this.getErrorMessage(responseCode);\n    }\n    if (statusCode != 2) {\n      return $translate.instant(\"voucher/payment/wrong_status\") + this.getStatusMessage(statusCode);\n    }\n    if (balance <= 0) {\n      return $translate.instant(\"voucher/payment/insufficient_balance\");\n    }\n  };\n  return service;\n});\n","\"use strict\";\n\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _regeneratorRuntime() { \"use strict\"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return r; }; var t, r = {}, e = Object.prototype, n = e.hasOwnProperty, o = \"function\" == typeof Symbol ? Symbol : {}, i = o.iterator || \"@@iterator\", a = o.asyncIterator || \"@@asyncIterator\", u = o.toStringTag || \"@@toStringTag\"; function c(t, r, e, n) { return Object.defineProperty(t, r, { value: e, enumerable: !n, configurable: !n, writable: !n }); } try { c({}, \"\"); } catch (t) { c = function c(t, r, e) { return t[r] = e; }; } function h(r, e, n, o) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype); return c(a, \"_invoke\", function (r, e, n) { var o = 1; return function (i, a) { if (3 === o) throw Error(\"Generator is already running\"); if (4 === o) { if (\"throw\" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var u = n.delegate; if (u) { var c = d(u, n); if (c) { if (c === f) continue; return c; } } if (\"next\" === n.method) n.sent = n._sent = n.arg;else if (\"throw\" === n.method) { if (1 === o) throw o = 4, n.arg; n.dispatchException(n.arg); } else \"return\" === n.method && n.abrupt(\"return\", n.arg); o = 3; var h = s(r, e, n); if (\"normal\" === h.type) { if (o = n.done ? 4 : 2, h.arg === f) continue; return { value: h.arg, done: n.done }; } \"throw\" === h.type && (o = 4, n.method = \"throw\", n.arg = h.arg); } }; }(r, n, new Context(o || [])), !0), a; } function s(t, r, e) { try { return { type: \"normal\", arg: t.call(r, e) }; } catch (t) { return { type: \"throw\", arg: t }; } } r.wrap = h; var f = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var l = {}; c(l, i, function () { return this; }); var p = Object.getPrototypeOf, y = p && p(p(x([]))); y && y !== e && n.call(y, i) && (l = y); var v = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(l); function g(t) { [\"next\", \"throw\", \"return\"].forEach(function (r) { c(t, r, function (t) { return this._invoke(r, t); }); }); } function AsyncIterator(t, r) { function e(o, i, a, u) { var c = s(t[o], t, i); if (\"throw\" !== c.type) { var h = c.arg, f = h.value; return f && \"object\" == _typeof(f) && n.call(f, \"__await\") ? r.resolve(f.__await).then(function (t) { e(\"next\", t, a, u); }, function (t) { e(\"throw\", t, a, u); }) : r.resolve(f).then(function (t) { h.value = t, a(h); }, function (t) { return e(\"throw\", t, a, u); }); } u(c.arg); } var o; c(this, \"_invoke\", function (t, n) { function i() { return new r(function (r, o) { e(t, n, r, o); }); } return o = o ? o.then(i, i) : i(); }, !0); } function d(r, e) { var n = e.method, o = r.i[n]; if (o === t) return e.delegate = null, \"throw\" === n && r.i[\"return\"] && (e.method = \"return\", e.arg = t, d(r, e), \"throw\" === e.method) || \"return\" !== n && (e.method = \"throw\", e.arg = new TypeError(\"The iterator does not provide a '\" + n + \"' method\")), f; var i = s(o, r.i, e.arg); if (\"throw\" === i.type) return e.method = \"throw\", e.arg = i.arg, e.delegate = null, f; var a = i.arg; return a ? a.done ? (e[r.r] = a.value, e.next = r.n, \"return\" !== e.method && (e.method = \"next\", e.arg = t), e.delegate = null, f) : a : (e.method = \"throw\", e.arg = new TypeError(\"iterator result is not an object\"), e.delegate = null, f); } function w(t) { this.tryEntries.push(t); } function m(r) { var e = r[4] || {}; e.type = \"normal\", e.arg = t, r[4] = e; } function Context(t) { this.tryEntries = [[-1]], t.forEach(w, this), this.reset(!0); } function x(r) { if (null != r) { var e = r[i]; if (e) return e.call(r); if (\"function\" == typeof r.next) return r; if (!isNaN(r.length)) { var o = -1, a = function e() { for (; ++o < r.length;) if (n.call(r, o)) return e.value = r[o], e.done = !1, e; return e.value = t, e.done = !0, e; }; return a.next = a; } } throw new TypeError(_typeof(r) + \" is not iterable\"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, c(v, \"constructor\", GeneratorFunctionPrototype), c(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction), GeneratorFunction.displayName = c(GeneratorFunctionPrototype, u, \"GeneratorFunction\"), r.isGeneratorFunction = function (t) { var r = \"function\" == typeof t && t.constructor; return !!r && (r === GeneratorFunction || \"GeneratorFunction\" === (r.displayName || r.name)); }, r.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, c(t, u, \"GeneratorFunction\")), t.prototype = Object.create(v), t; }, r.awrap = function (t) { return { __await: t }; }, g(AsyncIterator.prototype), c(AsyncIterator.prototype, a, function () { return this; }), r.AsyncIterator = AsyncIterator, r.async = function (t, e, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(h(t, e, n, o), i); return r.isGeneratorFunction(e) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, g(v), c(v, u, \"Generator\"), c(v, i, function () { return this; }), c(v, \"toString\", function () { return \"[object Generator]\"; }), r.keys = function (t) { var r = Object(t), e = []; for (var n in r) e.unshift(n); return function t() { for (; e.length;) if ((n = e.pop()) in r) return t.value = n, t.done = !1, t; return t.done = !0, t; }; }, r.values = x, Context.prototype = { constructor: Context, reset: function reset(r) { if (this.prev = this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = \"next\", this.arg = t, this.tryEntries.forEach(m), !r) for (var e in this) \"t\" === e.charAt(0) && n.call(this, e) && !isNaN(+e.slice(1)) && (this[e] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0][4]; if (\"throw\" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(r) { if (this.done) throw r; var e = this; function n(t) { a.type = \"throw\", a.arg = r, e.next = t; } for (var o = e.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i[4], u = this.prev, c = i[1], h = i[2]; if (-1 === i[0]) return n(\"end\"), !1; if (!c && !h) throw Error(\"try statement without catch or finally\"); if (null != i[0] && i[0] <= u) { if (u < c) return this.method = \"next\", this.arg = t, n(c), !0; if (u < h) return n(h), !1; } } }, abrupt: function abrupt(t, r) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var n = this.tryEntries[e]; if (n[0] > -1 && n[0] <= this.prev && this.prev < n[2]) { var o = n; break; } } o && (\"break\" === t || \"continue\" === t) && o[0] <= r && r <= o[2] && (o = null); var i = o ? o[4] : {}; return i.type = t, i.arg = r, o ? (this.method = \"next\", this.next = o[2], f) : this.complete(i); }, complete: function complete(t, r) { if (\"throw\" === t.type) throw t.arg; return \"break\" === t.type || \"continue\" === t.type ? this.next = t.arg : \"return\" === t.type ? (this.rval = this.arg = t.arg, this.method = \"return\", this.next = \"end\") : \"normal\" === t.type && r && (this.next = r), f; }, finish: function finish(t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[2] === t) return this.complete(e[4], e[3]), m(e), f; } }, \"catch\": function _catch(t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[0] === t) { var n = e[4]; if (\"throw\" === n.type) { var o = n.arg; m(e); } return o; } } throw Error(\"illegal catch attempt\"); }, delegateYield: function delegateYield(r, e, n) { return this.delegate = { i: x(r), r: e, n: n }, \"next\" === this.method && (this.arg = t), f; } }, r; }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"next\", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"throw\", n); } _next(void 0); }); }; }\nvar _require = require(\"lodash\"),\n  zip = _require.zip;\npos.factory(\"voucherModalsService\", function (voucherMessageService, eventBus, $q) {\n  var service = {};\n  var voucherModal = null;\n  var actionModal = null;\n  var defaultVoucherModal = {\n    response: undefined,\n    isVisible: false\n  };\n  var defaultActionModal = {\n    isVisible: false,\n    warinig: null,\n    items: [],\n    buttons: []\n  };\n  var retryActionButton = {\n    label: \"voucher/button/retry_action\",\n    type: \"success\",\n    isDefault: false,\n    visible: true\n  };\n  var printActionButton = {\n    label: \"voucher/button/print\",\n    type: \"warning\",\n    isDefault: false,\n    closes: false,\n    visible: true\n  };\n  var closeActionButton = {\n    label: \"button/close\",\n    type: \"danger\",\n    isDefault: true,\n    visible: true,\n    cancel: true,\n    closes: true\n  };\n  var cancelButton = {\n    label: \"button/cancel\",\n    type: \"danger\",\n    isDefault: true,\n    visible: true,\n    cancel: true,\n    action: function action() {}\n  };\n  var sellButton = {\n    label: \"voucher/button/activate\",\n    type: \"success\",\n    isDefault: false,\n    visible: true,\n    action: function action() {\n      return eventBus.notify(eventBus.events.voucher.sale, voucherModal.response.voucher);\n    }\n  };\n  var deactivationButton = {\n    label: \"voucher/button/deactivate\",\n    type: \"warning\",\n    isDefault: false,\n    visible: true,\n    action: function action() {\n      return eventBus.notify(eventBus.events.voucher.deactivate, voucherModal.response.voucher);\n    }\n  };\n  var deleteConfirmModal = {\n    title: \"voucher/warning/deactivate\",\n    isVisible: false\n  };\n  service.showVoucherModal = function () {\n    voucherModal.isVisible = true;\n  };\n  service.hideVoucherModal = function () {\n    voucherModal.isVisible = false;\n  };\n  service.initVoucherData = function (response, addButtons) {\n    voucherModal = defaultVoucherModal;\n    voucherModal.response = response;\n    voucherModal.response.voucher.statusText = voucherMessageService.getStatusMessage(voucherModal.response.voucher.status);\n    voucherModal.response.headertext = voucherMessageService.getErrorMessage(voucherModal.response.responseCode);\n    voucherModal.response.voucher.expiryDate = moment(voucherModal.response.voucher.expiryDate).format(\"DD-MM-YYYY\");\n    voucherModal.buttons = [];\n    if (addButtons) {\n      var _voucherModal;\n      if ((_voucherModal = voucherModal) !== null && _voucherModal !== void 0 && (_voucherModal = _voucherModal.response) !== null && _voucherModal !== void 0 && (_voucherModal = _voucherModal.voucher) !== null && _voucherModal !== void 0 && _voucherModal.status) {\n        switch (voucherModal.response.voucher.status) {\n          case 1:\n            voucherModal.buttons.push(sellButton);\n            break;\n          case 2:\n            if (voucherModal.response.voucher.canBeDeactivated) voucherModal.buttons.push(deactivationButton);\n            break;\n        }\n      }\n    }\n    voucherModal.buttons.push(cancelButton);\n  };\n  service.isVoucherModalVisible = function () {\n    return voucherModal.isVisible;\n  };\n  service.getVoucherModal = function () {\n    voucherModal = defaultVoucherModal;\n    return voucherModal;\n  };\n  service.getDeleteConfirmModal = function () {\n    return deleteConfirmModal;\n  };\n  service.getActionModal = function () {\n    actionModal = defaultActionModal;\n    return actionModal;\n  };\n  service.showActionModal = /*#__PURE__*/function () {\n    var _ref = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee(actions, actionType, flowDeferred) {\n      var hasFailedActions;\n      return _regeneratorRuntime().wrap(function _callee$(_context) {\n        while (1) switch (_context.prev = _context.next) {\n          case 0:\n            hasFailedActions = actions.find(function (a) {\n              return !a.succeeded;\n            });\n            actionModal = defaultActionModal;\n            _context.t0 = actionType;\n            _context.next = _context.t0 === \"activation\" ? 5 : _context.t0 === \"purchaseCancellation\" ? 8 : _context.t0 === \"deactivation\" ? 11 : _context.t0 === \"cancelDeactivation\" ? 14 : 17;\n            break;\n          case 5:\n            actionModal.title = \"voucher/actionmodal/activation/title\";\n            actionModal.column = \"voucher/action/activation\";\n            return _context.abrupt(\"break\", 17);\n          case 8:\n            actionModal.title = \"voucher/actionmodal/purchase_cancellation/title\";\n            actionModal.column = \"voucher/action/cancellation\";\n            return _context.abrupt(\"break\", 17);\n          case 11:\n            actionModal.title = \"voucher/actionmodal/deactivate/title\";\n            actionModal.column = \"voucher/action/deactivate\";\n            return _context.abrupt(\"break\", 17);\n          case 14:\n            actionModal.title = \"voucher/actionmodal/deactivate_cancellation/title\";\n            actionModal.column = \"voucher/action/cancel_deactivate\";\n            return _context.abrupt(\"break\", 17);\n          case 17:\n            actionModal.actions = actions;\n            actionModal.buttons = [];\n            if (!hasFailedActions) {\n              _context.next = 29;\n              break;\n            }\n            retryActionButton.action = function () {\n              return eventBus.notify(eventBus.events.voucher.retryAction, {\n                actionType: actionType,\n                flowDeferred: flowDeferred\n              });\n            };\n            _context.t1 = actionType;\n            _context.next = _context.t1 === \"activation\" ? 24 : 26;\n            break;\n          case 24:\n            actionModal.warning = \"voucher/actionmodal/activation/warning\";\n            return _context.abrupt(\"break\", 28);\n          case 26:\n            actionModal.warning = null;\n            return _context.abrupt(\"break\", 28);\n          case 28:\n            actionModal.buttons.push(retryActionButton);\n          case 29:\n            printActionButton.action = function () {\n              return eventBus.notify(eventBus.events.voucher.printAction, {\n                actionType: actionType,\n                flowDeferred: flowDeferred,\n                actions: actions\n              });\n            };\n            actionModal.buttons.push(printActionButton);\n            closeActionButton.action = function () {\n              flowDeferred.resolve(!hasFailedActions);\n            };\n            actionModal.buttons.push(closeActionButton);\n            actionModal.isVisible = true;\n            return _context.abrupt(\"return\", flowDeferred.promise);\n          case 35:\n          case \"end\":\n            return _context.stop();\n        }\n      }, _callee);\n    }));\n    return function (_x, _x2, _x3) {\n      return _ref.apply(this, arguments);\n    };\n  }();\n  service.hideActionModal = function () {\n    actionModal.isVisible = false;\n  };\n  service.confirmDeletion = function () {\n    var flowDeferred = $q.defer();\n    deleteConfirmModal.buttons = [{\n      label: \"voucher/button/accept\",\n      type: \"success\",\n      isDefault: true,\n      closes: true,\n      action: function action() {\n        flowDeferred.resolve();\n      }\n    }, {\n      label: \"voucher/button/reject\",\n      type: \"danger\",\n      isDefault: false,\n      closes: true,\n      action: function action() {\n        flowDeferred.reject();\n      }\n    }];\n    deleteConfirmModal.isVisible = true;\n    return flowDeferred.promise;\n  };\n  return service;\n});\n","\"use strict\";\n\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _regeneratorRuntime() { \"use strict\"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return r; }; var t, r = {}, e = Object.prototype, n = e.hasOwnProperty, o = \"function\" == typeof Symbol ? Symbol : {}, i = o.iterator || \"@@iterator\", a = o.asyncIterator || \"@@asyncIterator\", u = o.toStringTag || \"@@toStringTag\"; function c(t, r, e, n) { return Object.defineProperty(t, r, { value: e, enumerable: !n, configurable: !n, writable: !n }); } try { c({}, \"\"); } catch (t) { c = function c(t, r, e) { return t[r] = e; }; } function h(r, e, n, o) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype); return c(a, \"_invoke\", function (r, e, n) { var o = 1; return function (i, a) { if (3 === o) throw Error(\"Generator is already running\"); if (4 === o) { if (\"throw\" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var u = n.delegate; if (u) { var c = d(u, n); if (c) { if (c === f) continue; return c; } } if (\"next\" === n.method) n.sent = n._sent = n.arg;else if (\"throw\" === n.method) { if (1 === o) throw o = 4, n.arg; n.dispatchException(n.arg); } else \"return\" === n.method && n.abrupt(\"return\", n.arg); o = 3; var h = s(r, e, n); if (\"normal\" === h.type) { if (o = n.done ? 4 : 2, h.arg === f) continue; return { value: h.arg, done: n.done }; } \"throw\" === h.type && (o = 4, n.method = \"throw\", n.arg = h.arg); } }; }(r, n, new Context(o || [])), !0), a; } function s(t, r, e) { try { return { type: \"normal\", arg: t.call(r, e) }; } catch (t) { return { type: \"throw\", arg: t }; } } r.wrap = h; var f = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var l = {}; c(l, i, function () { return this; }); var p = Object.getPrototypeOf, y = p && p(p(x([]))); y && y !== e && n.call(y, i) && (l = y); var v = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(l); function g(t) { [\"next\", \"throw\", \"return\"].forEach(function (r) { c(t, r, function (t) { return this._invoke(r, t); }); }); } function AsyncIterator(t, r) { function e(o, i, a, u) { var c = s(t[o], t, i); if (\"throw\" !== c.type) { var h = c.arg, f = h.value; return f && \"object\" == _typeof(f) && n.call(f, \"__await\") ? r.resolve(f.__await).then(function (t) { e(\"next\", t, a, u); }, function (t) { e(\"throw\", t, a, u); }) : r.resolve(f).then(function (t) { h.value = t, a(h); }, function (t) { return e(\"throw\", t, a, u); }); } u(c.arg); } var o; c(this, \"_invoke\", function (t, n) { function i() { return new r(function (r, o) { e(t, n, r, o); }); } return o = o ? o.then(i, i) : i(); }, !0); } function d(r, e) { var n = e.method, o = r.i[n]; if (o === t) return e.delegate = null, \"throw\" === n && r.i[\"return\"] && (e.method = \"return\", e.arg = t, d(r, e), \"throw\" === e.method) || \"return\" !== n && (e.method = \"throw\", e.arg = new TypeError(\"The iterator does not provide a '\" + n + \"' method\")), f; var i = s(o, r.i, e.arg); if (\"throw\" === i.type) return e.method = \"throw\", e.arg = i.arg, e.delegate = null, f; var a = i.arg; return a ? a.done ? (e[r.r] = a.value, e.next = r.n, \"return\" !== e.method && (e.method = \"next\", e.arg = t), e.delegate = null, f) : a : (e.method = \"throw\", e.arg = new TypeError(\"iterator result is not an object\"), e.delegate = null, f); } function w(t) { this.tryEntries.push(t); } function m(r) { var e = r[4] || {}; e.type = \"normal\", e.arg = t, r[4] = e; } function Context(t) { this.tryEntries = [[-1]], t.forEach(w, this), this.reset(!0); } function x(r) { if (null != r) { var e = r[i]; if (e) return e.call(r); if (\"function\" == typeof r.next) return r; if (!isNaN(r.length)) { var o = -1, a = function e() { for (; ++o < r.length;) if (n.call(r, o)) return e.value = r[o], e.done = !1, e; return e.value = t, e.done = !0, e; }; return a.next = a; } } throw new TypeError(_typeof(r) + \" is not iterable\"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, c(v, \"constructor\", GeneratorFunctionPrototype), c(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction), GeneratorFunction.displayName = c(GeneratorFunctionPrototype, u, \"GeneratorFunction\"), r.isGeneratorFunction = function (t) { var r = \"function\" == typeof t && t.constructor; return !!r && (r === GeneratorFunction || \"GeneratorFunction\" === (r.displayName || r.name)); }, r.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, c(t, u, \"GeneratorFunction\")), t.prototype = Object.create(v), t; }, r.awrap = function (t) { return { __await: t }; }, g(AsyncIterator.prototype), c(AsyncIterator.prototype, a, function () { return this; }), r.AsyncIterator = AsyncIterator, r.async = function (t, e, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(h(t, e, n, o), i); return r.isGeneratorFunction(e) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, g(v), c(v, u, \"Generator\"), c(v, i, function () { return this; }), c(v, \"toString\", function () { return \"[object Generator]\"; }), r.keys = function (t) { var r = Object(t), e = []; for (var n in r) e.unshift(n); return function t() { for (; e.length;) if ((n = e.pop()) in r) return t.value = n, t.done = !1, t; return t.done = !0, t; }; }, r.values = x, Context.prototype = { constructor: Context, reset: function reset(r) { if (this.prev = this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = \"next\", this.arg = t, this.tryEntries.forEach(m), !r) for (var e in this) \"t\" === e.charAt(0) && n.call(this, e) && !isNaN(+e.slice(1)) && (this[e] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0][4]; if (\"throw\" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(r) { if (this.done) throw r; var e = this; function n(t) { a.type = \"throw\", a.arg = r, e.next = t; } for (var o = e.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i[4], u = this.prev, c = i[1], h = i[2]; if (-1 === i[0]) return n(\"end\"), !1; if (!c && !h) throw Error(\"try statement without catch or finally\"); if (null != i[0] && i[0] <= u) { if (u < c) return this.method = \"next\", this.arg = t, n(c), !0; if (u < h) return n(h), !1; } } }, abrupt: function abrupt(t, r) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var n = this.tryEntries[e]; if (n[0] > -1 && n[0] <= this.prev && this.prev < n[2]) { var o = n; break; } } o && (\"break\" === t || \"continue\" === t) && o[0] <= r && r <= o[2] && (o = null); var i = o ? o[4] : {}; return i.type = t, i.arg = r, o ? (this.method = \"next\", this.next = o[2], f) : this.complete(i); }, complete: function complete(t, r) { if (\"throw\" === t.type) throw t.arg; return \"break\" === t.type || \"continue\" === t.type ? this.next = t.arg : \"return\" === t.type ? (this.rval = this.arg = t.arg, this.method = \"return\", this.next = \"end\") : \"normal\" === t.type && r && (this.next = r), f; }, finish: function finish(t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[2] === t) return this.complete(e[4], e[3]), m(e), f; } }, \"catch\": function _catch(t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[0] === t) { var n = e[4]; if (\"throw\" === n.type) { var o = n.arg; m(e); } return o; } } throw Error(\"illegal catch attempt\"); }, delegateYield: function delegateYield(r, e, n) { return this.delegate = { i: x(r), r: e, n: n }, \"next\" === this.method && (this.arg = t), f; } }, r; }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"next\", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"throw\", n); } _next(void 0); }); }; }\npos.factory(\"voucherService\", function ($translate, voucherRepository, receipt, notification, clerkLoginService, voucherModalsService, voucherMessageService, eventBus, $q, returnReasons, posStorage, posConfig, fluctuatingPropertiesHelper, keypadManager, sales, inputValidationService) {\n  var service = {};\n  var voucherLoadingInProgress = false;\n  var voucherSaleInProgress = false;\n  var voucherDeactivationInProgress = false;\n  var voucherCancelInProgress = false;\n  var i18nVoucherAlreadyExists;\n  var i18nClerkVerificationDenied;\n  var i18nVoucherActionDeactivation;\n  var i18nVoucherActionActivation;\n  var i18nVoucherActionCancellation;\n  var i18nVoucherActionFailed;\n  var i18nVoucherActionSucceeded;\n  var i18nErrorInputValueRange;\n  var i18nErrorPaymentCancellation;\n  var i18nDeactivated;\n  var i18nIsBusy;\n  var i18nGeneralError;\n  init();\n  function init() {\n    return _init.apply(this, arguments);\n  }\n  function _init() {\n    _init = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee5() {\n      return _regeneratorRuntime().wrap(function _callee5$(_context5) {\n        while (1) switch (_context5.prev = _context5.next) {\n          case 0:\n            _context5.next = 2;\n            return $translate(\"toast/voucher_already_exists\");\n          case 2:\n            i18nVoucherAlreadyExists = _context5.sent;\n            _context5.next = 5;\n            return $translate(\"clerk/verification/denied\");\n          case 5:\n            i18nClerkVerificationDenied = _context5.sent;\n            _context5.next = 8;\n            return $translate(\"voucher/action/deactivate\");\n          case 8:\n            i18nVoucherActionDeactivation = _context5.sent;\n            _context5.next = 11;\n            return $translate(\"voucher/action/activation\");\n          case 11:\n            i18nVoucherActionActivation = _context5.sent;\n            _context5.next = 14;\n            return $translate(\"voucher/action/cancellation\");\n          case 14:\n            i18nVoucherActionCancellation = _context5.sent;\n            _context5.next = 17;\n            return $translate(\"voucher/action/failed\");\n          case 17:\n            i18nVoucherActionFailed = _context5.sent;\n            _context5.next = 20;\n            return $translate(\"voucher/action/succeeded\");\n          case 20:\n            i18nVoucherActionSucceeded = _context5.sent;\n            _context5.next = 23;\n            return $translate(\"toast/error_value_range\");\n          case 23:\n            i18nErrorInputValueRange = _context5.sent;\n            _context5.next = 26;\n            return $translate(\"toast/error_payment_cancellation\");\n          case 26:\n            i18nErrorPaymentCancellation = _context5.sent;\n            _context5.next = 29;\n            return $translate(\"voucher/deactivated\");\n          case 29:\n            i18nDeactivated = _context5.sent;\n            _context5.next = 32;\n            return $translate(\"toast/voucher/process_is_busy\");\n          case 32:\n            i18nIsBusy = _context5.sent;\n            _context5.next = 35;\n            return $translate(\"toast/voucher/general_error\");\n          case 35:\n            i18nGeneralError = _context5.sent;\n          case 36:\n          case \"end\":\n            return _context5.stop();\n        }\n      }, _callee5);\n    }));\n    return _init.apply(this, arguments);\n  }\n  service.barcodeIsDefinedAsVoucher = function (barcode) {\n    return barcodeIsVoucher(barcode);\n  };\n  service.showVoucherModal = function (voucherNo, clerkId) {\n    if (!isBusy()) {\n      voucherLoadingInProgress = true;\n      voucherRepository.api.getVoucher(voucherNo, clerkId).then(function (response) {\n        showVoucherModal(response.data, true);\n        voucherLoadingInProgress = false;\n      }, function () {\n        return voucherLoadingInProgress = false;\n      });\n    } else {\n      notification.pop(\"info\", i18nIsBusy);\n    }\n  };\n  service.createVoucherPayment = /*#__PURE__*/function () {\n    var _ref = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee(voucherNo) {\n      var deferred;\n      return _regeneratorRuntime().wrap(function _callee$(_context) {\n        while (1) switch (_context.prev = _context.next) {\n          case 0:\n            deferred = $q.defer();\n            createPayment(deferred, voucherNo);\n            return _context.abrupt(\"return\", deferred.promise);\n          case 3:\n          case \"end\":\n            return _context.stop();\n        }\n      }, _callee);\n    }));\n    return function (_x) {\n      return _ref.apply(this, arguments);\n    };\n  }();\n  service.activateVouchersInReceipt = /*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee2() {\n    var deferred, eventPointer;\n    return _regeneratorRuntime().wrap(function _callee2$(_context2) {\n      while (1) switch (_context2.prev = _context2.next) {\n        case 0:\n          deferred = $q.defer();\n          eventPointer = eventBus.subscribe(eventBus.events.voucher.retryAction, null, function (ev, params) {\n            activateVouchers(deferred, eventPointer);\n          });\n          activateVouchers(deferred, eventPointer);\n          return _context2.abrupt(\"return\", deferred.promise);\n        case 4:\n        case \"end\":\n          return _context2.stop();\n      }\n    }, _callee2);\n  }));\n  service.cancelVoucherPayment = /*#__PURE__*/function () {\n    var _ref3 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee3(payment) {\n      var _payment$fluctuatingP, _payment$fluctuatingP4, _payment$fluctuatingP5;\n      var deferred, eventPointer;\n      return _regeneratorRuntime().wrap(function _callee3$(_context3) {\n        while (1) switch (_context3.prev = _context3.next) {\n          case 0:\n            deferred = $q.defer();\n            if (!(payment.paymentType !== \"ForeignGiftCertificate\" || !((_payment$fluctuatingP = payment.fluctuatingProperties) !== null && _payment$fluctuatingP !== void 0 && _payment$fluctuatingP.uniqueTransactionId))) {\n              _context3.next = 3;\n              break;\n            }\n            return _context3.abrupt(\"return\", deferred.resolve());\n          case 3:\n            eventPointer = eventBus.subscribe(eventBus.events.voucher.retryAction, null, function (ev, params) {\n              var _payment$fluctuatingP2, _payment$fluctuatingP3;\n              cancelAction(deferred, \"purchaseCancellation\", payment.voucherNumber, (_payment$fluctuatingP2 = payment.fluctuatingProperties) === null || _payment$fluctuatingP2 === void 0 ? void 0 : _payment$fluctuatingP2.voucherDescription, payment.amount, (_payment$fluctuatingP3 = payment.fluctuatingProperties) === null || _payment$fluctuatingP3 === void 0 ? void 0 : _payment$fluctuatingP3.uniqueTransactionId, eventPointer);\n            });\n            cancelAction(deferred, \"purchaseCancellation\", payment.voucherNumber, (_payment$fluctuatingP4 = payment.fluctuatingProperties) === null || _payment$fluctuatingP4 === void 0 ? void 0 : _payment$fluctuatingP4.voucherDescription, payment.amount, (_payment$fluctuatingP5 = payment.fluctuatingProperties) === null || _payment$fluctuatingP5 === void 0 ? void 0 : _payment$fluctuatingP5.uniqueTransactionId, eventPointer);\n            return _context3.abrupt(\"return\", deferred.promise);\n          case 6:\n          case \"end\":\n            return _context3.stop();\n        }\n      }, _callee3);\n    }));\n    return function (_x2) {\n      return _ref3.apply(this, arguments);\n    };\n  }();\n  service.isDeactivatedVoucher = function (uuid) {\n    var items = receipt.getReceipt().items || [];\n    var item = items.find(function (i) {\n      return i.uuid == uuid;\n    });\n    if (item && item.templateType === \"voucher\" && item.transactionType === \"Return\") return item;\n  };\n  service.cancelDeactivatedVoucher = /*#__PURE__*/function () {\n    var _ref4 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee4(uuid) {\n      var _item$fluctuatingProp3, _item$fluctuatingProp4;\n      var deferred, item, eventPointer;\n      return _regeneratorRuntime().wrap(function _callee4$(_context4) {\n        while (1) switch (_context4.prev = _context4.next) {\n          case 0:\n            deferred = $q.defer();\n            item = this.isDeactivatedVoucher(uuid);\n            if (item) {\n              _context4.next = 4;\n              break;\n            }\n            return _context4.abrupt(\"return\", deferred.resolve(true));\n          case 4:\n            eventPointer = eventBus.subscribe(eventBus.events.voucher.retryAction, null, function (ev, params) {\n              var _item$fluctuatingProp, _item$fluctuatingProp2;\n              cancelAction(deferred, \"cancelDeactivation\", item.voucherNumber, (_item$fluctuatingProp = item.fluctuatingProperties) === null || _item$fluctuatingProp === void 0 ? void 0 : _item$fluctuatingProp.voucherDescription, item.salesPrice, (_item$fluctuatingProp2 = item.fluctuatingProperties) === null || _item$fluctuatingProp2 === void 0 ? void 0 : _item$fluctuatingProp2.uniqueTransactionId, eventPointer);\n            });\n            cancelAction(deferred, \"cancelDeactivation\", item.voucherNumber, (_item$fluctuatingProp3 = item.fluctuatingProperties) === null || _item$fluctuatingProp3 === void 0 ? void 0 : _item$fluctuatingProp3.voucherDescription, item.salesPrice, (_item$fluctuatingProp4 = item.fluctuatingProperties) === null || _item$fluctuatingProp4 === void 0 ? void 0 : _item$fluctuatingProp4.uniqueTransactionId, eventPointer);\n            return _context4.abrupt(\"return\", deferred.promise);\n          case 7:\n          case \"end\":\n            return _context4.stop();\n        }\n      }, _callee4, this);\n    }));\n    return function (_x3) {\n      return _ref4.apply(this, arguments);\n    };\n  }();\n  eventBus.subscribe(eventBus.events.voucher.sale, null, function (ev, voucher) {\n    voucherSale(voucher);\n  });\n  eventBus.subscribe(eventBus.events.voucher.deactivate, null, function (ev, voucher) {\n    deactivateVoucherWithAuthorization(voucher);\n  });\n  eventBus.subscribe(eventBus.events.voucher.printFailure, null, function (ev, params) {\n    var actions = [];\n    actions.push({\n      voucherNumber: params.voucher.voucherNo,\n      description: params.voucher.description,\n      balance: params.voucher.balance,\n      succeeded: false,\n      message: params.message\n    });\n    printAction(\"deactivationFailure\", params.clerkId, actions);\n  });\n  eventBus.subscribe(eventBus.events.voucher.printAction, null, function (ev, params) {\n    var clerkId = receipt.getReceipt().clerk;\n    printAction(params.actionType, clerkId, params.actions);\n  });\n  function isBusy() {\n    if (voucherSaleInProgress || voucherDeactivationInProgress || voucherLoadingInProgress || voucherCancelInProgress || voucherModalsService.isVoucherModalVisible()) {\n      return true;\n    }\n  }\n  function cancelAction(_x4, _x5, _x6, _x7, _x8, _x9, _x0) {\n    return _cancelAction.apply(this, arguments);\n  }\n  function _cancelAction() {\n    _cancelAction = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee6(deferred, type, voucherNumber, description, amount, uniqueTransactionId, eventpointer) {\n      var _response$data, _response$data2, _response$data3, response, actions, _response$data4;\n      return _regeneratorRuntime().wrap(function _callee6$(_context6) {\n        while (1) switch (_context6.prev = _context6.next) {\n          case 0:\n            _context6.prev = 0;\n            voucherCancelInProgress = true;\n            _context6.next = 4;\n            return voucherRepository.api.cancelAction(voucherNumber, receipt.getReceipt().clerk, uniqueTransactionId, receipt.constructReceiptId(receipt.getReceipt()));\n          case 4:\n            response = _context6.sent;\n            if (!(response !== null && response !== void 0 && response.data)) {\n              notification.pop(\"error\", i18nErrorPaymentCancellation);\n            }\n            actions = [];\n            actions.push({\n              voucherNumber: voucherNumber,\n              description: description,\n              balance: amount,\n              succeeded: (response === null || response === void 0 || (_response$data = response.data) === null || _response$data === void 0 ? void 0 : _response$data.responseCode) == 0,\n              message: voucherMessageService.getErrorMessage(response === null || response === void 0 || (_response$data2 = response.data) === null || _response$data2 === void 0 ? void 0 : _response$data2.responseCode)\n            });\n            if ((response === null || response === void 0 || (_response$data3 = response.data) === null || _response$data3 === void 0 ? void 0 : _response$data3.responseCode) != 0) {\n              notification.pop(\"error\", voucherMessageService.getErrorMessage(response === null || response === void 0 || (_response$data4 = response.data) === null || _response$data4 === void 0 ? void 0 : _response$data4.responseCode));\n            }\n            _context6.next = 11;\n            return voucherModalsService.showActionModal(actions, type, deferred);\n          case 11:\n            _context6.next = 16;\n            break;\n          case 13:\n            _context6.prev = 13;\n            _context6.t0 = _context6[\"catch\"](0);\n            notification.pop(\"error\", i18nGeneralError);\n          case 16:\n            voucherCancelInProgress = false;\n            if (eventpointer) {\n              eventpointer();\n            }\n          case 18:\n          case \"end\":\n            return _context6.stop();\n        }\n      }, _callee6, null, [[0, 13]]);\n    }));\n    return _cancelAction.apply(this, arguments);\n  }\n  function createPayment(_x1, _x10) {\n    return _createPayment.apply(this, arguments);\n  }\n  function _createPayment() {\n    _createPayment = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee7(deferred, voucherNo) {\n      var response, responseData, result, eventpointer, voucher, amount, currencyCode, flucProp;\n      return _regeneratorRuntime().wrap(function _callee7$(_context7) {\n        while (1) switch (_context7.prev = _context7.next) {\n          case 0:\n            _context7.prev = 0;\n            _context7.next = 3;\n            return voucherRepository.api.getVoucher(voucherNo, receipt.getReceipt().clerk);\n          case 3:\n            response = _context7.sent;\n            responseData = response === null || response === void 0 ? void 0 : response.data;\n            result = {\n              message: \"\"\n            };\n            if (!responseData) {\n              _context7.next = 11;\n              break;\n            }\n            if (!(responseData.responseCode != 0 || responseData.voucher.balance <= 0 || responseData.voucher.status != 2)) {\n              _context7.next = 11;\n              break;\n            }\n            showVoucherModal(responseData);\n            result.message = voucherMessageService.getPaymentMessage(responseData.responseCode, responseData.voucher.balance, responseData.voucher.status);\n            return _context7.abrupt(\"return\", deferred.reject(result));\n          case 11:\n            eventpointer = eventBus.subscribe(eventBus.events.keyboard.hidden, null, function (ev, params) {\n              eventpointer();\n              clearKeyboard();\n              return deferred.reject(\"\");\n            });\n            voucher = responseData.voucher;\n            setKeyboard(voucher);\n            _context7.next = 16;\n            return handlePurchaseAmount(voucher.balance, voucher.minPurchaseValue, voucher.maxPurchaseValue);\n          case 16:\n            amount = _context7.sent;\n            currencyCode = posConfig.getLocalCurrency().currencyCode;\n            _context7.next = 20;\n            return handlePayment(voucherNo, amount, currencyCode, voucher.pinRequired);\n          case 20:\n            responseData = _context7.sent;\n            clearKeyboard();\n            if (responseData) {\n              _context7.next = 24;\n              break;\n            }\n            return _context7.abrupt(\"return\", deferred.reject(\"\"));\n          case 24:\n            flucProp = {\n              ean: voucher.ean,\n              voucherDescription: voucher.description,\n              voucherBalance: voucher.balance,\n              voucherExpiryDate: moment(voucher.expiryDate).format(\"DD-MM-YYYY\"),\n              uniqueTransactionId: responseData.uniqueTransactionId\n            };\n            _context7.t0 = deferred;\n            _context7.next = 28;\n            return sales.makePayment(\"ForeignGiftCertificate\", amount, currencyCode, voucherNo, flucProp);\n          case 28:\n            _context7.t1 = _context7.sent;\n            return _context7.abrupt(\"return\", _context7.t0.resolve.call(_context7.t0, _context7.t1));\n          case 32:\n            _context7.prev = 32;\n            _context7.t2 = _context7[\"catch\"](0);\n            clearKeyboard();\n            if (_context7.t2) {\n              deferred.reject(_context7.t2);\n            } else {\n              deferred.reject(\"VOUCHER_ERROR\");\n            }\n          case 36:\n          case \"end\":\n            return _context7.stop();\n        }\n      }, _callee7, null, [[0, 32]]);\n    }));\n    return _createPayment.apply(this, arguments);\n  }\n  function setKeyboard(voucher) {\n    voucher.statusText = voucherMessageService.getStatusMessage(voucher.status);\n    voucher.expiryDate = moment(voucher.expiryDate).format(\"DD-MM-YYYY\");\n    keypadManager.setVoucherInformation(voucher);\n  }\n  function clearKeyboard() {\n    keypadManager.clearVoucherInformation();\n    keypadManager.hide(true);\n  }\n  function handlePurchaseAmount(_x11, _x12, _x13) {\n    return _handlePurchaseAmount.apply(this, arguments);\n  }\n  function _handlePurchaseAmount() {\n    _handlePurchaseAmount = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee8(balance, minPurchaseValue, maxPurchaseValue) {\n      var remainingAmount, minValue, maxValue, amount;\n      return _regeneratorRuntime().wrap(function _callee8$(_context8) {\n        while (1) switch (_context8.prev = _context8.next) {\n          case 0:\n            remainingAmount = receipt.getTotal().minus(receipt.getPaymentsTotal()).abs();\n            minValue = 0;\n            if (minPurchaseValue && minPurchaseValue > 0) minValue = minPurchaseValue;\n            maxValue = remainingAmount < balance ? remainingAmount : balance;\n            if (maxPurchaseValue && maxPurchaseValue < maxValue) maxValue = maxPurchaseValue;\n            amount = -1.0;\n          case 6:\n            if (!(amount < minValue || amount > maxValue)) {\n              _context8.next = 13;\n              break;\n            }\n            _context8.next = 9;\n            return requestPurchaseAmount(maxValue, minValue, maxValue);\n          case 9:\n            amount = _context8.sent;\n            if (amount < minValue || amount > maxValue) {\n              notification.pop(\"warning\", i18nErrorInputValueRange + minValue.toFixed(2) + \" - \" + maxValue.toFixed(2));\n            }\n            _context8.next = 6;\n            break;\n          case 13:\n            return _context8.abrupt(\"return\", amount);\n          case 14:\n          case \"end\":\n            return _context8.stop();\n        }\n      }, _callee8);\n    }));\n    return _handlePurchaseAmount.apply(this, arguments);\n  }\n  function requestPurchaseAmount(_x14, _x15, _x16) {\n    return _requestPurchaseAmount.apply(this, arguments);\n  }\n  function _requestPurchaseAmount() {\n    _requestPurchaseAmount = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee9(suggestedAmount, minValue, maxValue) {\n      var deferred;\n      return _regeneratorRuntime().wrap(function _callee9$(_context9) {\n        while (1) switch (_context9.prev = _context9.next) {\n          case 0:\n            deferred = $q.defer();\n            _context9.t0 = eventBus;\n            _context9.t1 = eventBus.events.payment.paymentInputRequired;\n            _context9.t2 = function handleInput(amount) {\n              keypadManager.hide(true);\n              amount = inputValidationService.convertToDecimal(amount);\n              deferred.resolve(parseFloat(amount));\n            };\n            _context9.t3 = suggestedAmount;\n            _context9.next = 7;\n            return $translate(\"voucher/purchase/amount\");\n          case 7:\n            _context9.t4 = _context9.sent;\n            _context9.t5 = _context9.t4 + \" \";\n            _context9.t6 = minValue.toFixed(2);\n            _context9.t7 = _context9.t5 + _context9.t6;\n            _context9.t8 = _context9.t7 + \" - \";\n            _context9.t9 = maxValue.toFixed(2);\n            _context9.t10 = _context9.t8 + _context9.t9;\n            _context9.t11 = {\n              handleInput: _context9.t2,\n              input: _context9.t3,\n              text: _context9.t10,\n              numpad: true,\n              numericOnly: true\n            };\n            _context9.t0.notify.call(_context9.t0, _context9.t1, _context9.t11);\n            return _context9.abrupt(\"return\", deferred.promise);\n          case 17:\n          case \"end\":\n            return _context9.stop();\n        }\n      }, _callee9);\n    }));\n    return _requestPurchaseAmount.apply(this, arguments);\n  }\n  function requestPinEntry() {\n    return _requestPinEntry.apply(this, arguments);\n  }\n  function _requestPinEntry() {\n    _requestPinEntry = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee0() {\n      var deferred;\n      return _regeneratorRuntime().wrap(function _callee0$(_context0) {\n        while (1) switch (_context0.prev = _context0.next) {\n          case 0:\n            deferred = $q.defer();\n            _context0.t0 = eventBus;\n            _context0.t1 = eventBus.events.payment.paymentInputRequired;\n            _context0.t2 = function handleInput(pin) {\n              return deferred.resolve(pin);\n            };\n            _context0.next = 6;\n            return $translate(\"voucher/purchase/pin\");\n          case 6:\n            _context0.t3 = _context0.sent;\n            _context0.t4 = {\n              handleInput: _context0.t2,\n              text: _context0.t3,\n              numpad: true,\n              numericOnly: false\n            };\n            _context0.t0.notify.call(_context0.t0, _context0.t1, _context0.t4);\n            return _context0.abrupt(\"return\", deferred.promise);\n          case 10:\n          case \"end\":\n            return _context0.stop();\n        }\n      }, _callee0);\n    }));\n    return _requestPinEntry.apply(this, arguments);\n  }\n  function handlePayment(_x17, _x18, _x19, _x20) {\n    return _handlePayment.apply(this, arguments);\n  }\n  function _handlePayment() {\n    _handlePayment = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee1(voucherNo, value, currencyCode, pinRequired) {\n      var deferred, pin, response, result;\n      return _regeneratorRuntime().wrap(function _callee1$(_context1) {\n        while (1) switch (_context1.prev = _context1.next) {\n          case 0:\n            deferred = $q.defer();\n            _context1.prev = 1;\n            pin = null;\n            if (!pinRequired) {\n              _context1.next = 7;\n              break;\n            }\n            _context1.next = 6;\n            return requestPinEntry();\n          case 6:\n            pin = _context1.sent;\n          case 7:\n            _context1.next = 9;\n            return voucherRepository.api.purchaseWithVoucher(voucherNo, receipt.getReceipt().clerk, value, currencyCode, receipt.constructReceiptId(receipt.getReceipt()), pin);\n          case 9:\n            response = _context1.sent;\n            if (!(!response || !response.data)) {\n              _context1.next = 12;\n              break;\n            }\n            return _context1.abrupt(\"return\", deferred.reject(\"\"));\n          case 12:\n            if (!(response.data.responseCode == 211 || response.data.responseCode == 557)) {\n              _context1.next = 17;\n              break;\n            }\n            notification.pop(\"error\", voucherMessageService.getErrorMessage(response.data.responseCode));\n            _context1.next = 16;\n            return handlePayment(voucherNo, value, currencyCode, pinRequired);\n          case 16:\n            return _context1.abrupt(\"return\", _context1.sent);\n          case 17:\n            if (response.data.responseCode != 0) {\n              result = {\n                message: \"\"\n              };\n              result.message = voucherMessageService.getErrorMessage(response.data.responseCode);\n              deferred.reject(result);\n            } else {\n              deferred.resolve(response.data);\n            }\n            _context1.next = 23;\n            break;\n          case 20:\n            _context1.prev = 20;\n            _context1.t0 = _context1[\"catch\"](1);\n            deferred.reject(\"\");\n          case 23:\n            return _context1.abrupt(\"return\", deferred.promise);\n          case 24:\n          case \"end\":\n            return _context1.stop();\n        }\n      }, _callee1, null, [[1, 20]]);\n    }));\n    return _handlePayment.apply(this, arguments);\n  }\n  function showVoucherModal(responseData, fullFunctionality) {\n    voucherModalsService.initVoucherData(responseData, fullFunctionality);\n    voucherModalsService.showVoucherModal();\n    keypadManager.hide(true);\n  }\n  function voucherSale(voucher) {\n    voucherSaleInProgress = true;\n    if (receipt.containsVoucher(voucher.voucherNo)) {\n      notification.pop(\"warning\", i18nVoucherAlreadyExists);\n      voucherSaleInProgress = false;\n      return;\n    }\n    voucherModalsService.hideVoucherModal();\n    if (voucher.balance > 0) {\n      addVoucherToReceipt(voucher);\n      voucherSaleInProgress = false;\n    } else {\n      requestValue(voucher.minActivationValue, voucher.maxActivationValue, \"voucher/activation/value\").then(function (value) {\n        if (value) {\n          voucher.balance = value;\n          addVoucherToReceipt(voucher);\n        }\n        voucherSaleInProgress = false;\n      }, function () {\n        voucherSaleInProgress = false;\n        voucherModalsService.showVoucherModal();\n      });\n    }\n  }\n  function activateVouchers(_x21, _x22) {\n    return _activateVouchers.apply(this, arguments);\n  }\n  function _activateVouchers() {\n    _activateVouchers = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee10(flowDeferred, eventPointer) {\n      var activationVouchers, vouchersToActivate, response, actions;\n      return _regeneratorRuntime().wrap(function _callee10$(_context10) {\n        while (1) switch (_context10.prev = _context10.next) {\n          case 0:\n            _context10.prev = 0;\n            voucherModalsService.hideActionModal();\n            activationVouchers = getActivationVoucherItems();\n            if (!(activationVouchers && activationVouchers.length > 0)) {\n              _context10.next = 16;\n              break;\n            }\n            vouchersToActivate = activationVouchers.filter(function (i) {\n              return fluctuatingPropertiesHelper.getVoucherResponseCode(i) != 0;\n            });\n            _context10.next = 7;\n            return voucherRepository.api.activateVouchers(vouchersToActivate, receipt.constructReceiptId(receipt.getReceipt()), posConfig.getLocalCurrency().currencyCode);\n          case 7:\n            response = _context10.sent;\n            if (!response) {\n              _context10.next = 16;\n              break;\n            }\n            response.data.forEach(function (response) {\n              var item = activationVouchers.find(function (i) {\n                return i.voucherNumber == response.voucher.voucherNo;\n              });\n              fluctuatingPropertiesHelper.setVoucherResponseCode(item, response.responseCode);\n              fluctuatingPropertiesHelper.setVoucherBalance(item, parseFloat(item.salesPrice));\n              fluctuatingPropertiesHelper.setVoucherExpiryDate(item, moment(response.voucher.expiryDate).format(\"DD-MM-YYYY\"));\n              fluctuatingPropertiesHelper.setVoucherDescription(item, response.voucher.description);\n              if (response.responseCode == 0 && response.uniqueTransactionId) fluctuatingPropertiesHelper.setUniqueTransactionId(item, response.uniqueTransactionId);\n            });\n            receipt.persist();\n            actions = [];\n            activationVouchers.forEach(function (item) {\n              actions.push({\n                voucherNumber: item.voucherNumber,\n                description: item.parameter1,\n                balance: item.salesPrice,\n                succeeded: fluctuatingPropertiesHelper.getVoucherResponseCode(item) == 0,\n                message: voucherMessageService.getErrorMessage(fluctuatingPropertiesHelper.getVoucherResponseCode(item))\n              });\n            });\n            _context10.next = 15;\n            return voucherModalsService.showActionModal(actions, \"activation\", flowDeferred);\n          case 15:\n            sales.printReceiptCopy(receipt.getReceipt(), false);\n          case 16:\n            _context10.next = 21;\n            break;\n          case 18:\n            _context10.prev = 18;\n            _context10.t0 = _context10[\"catch\"](0);\n            notification.pop(\"error\", i18nGeneralError);\n          case 21:\n            if (eventPointer) {\n              eventPointer();\n            }\n            flowDeferred.resolve();\n          case 23:\n          case \"end\":\n            return _context10.stop();\n        }\n      }, _callee10, null, [[0, 18]]);\n    }));\n    return _activateVouchers.apply(this, arguments);\n  }\n  function getActivationVoucherItems() {\n    var currentReceipt = receipt.getReceipt();\n    var activationVouchers = currentReceipt.items.filter(function (i) {\n      return i.templateType === \"voucher\" && i.quantity == 1 && barcodeIsVoucher(i.voucherNumber);\n    });\n    return activationVouchers;\n  }\n  function barcodeIsVoucher(barcode) {\n    if (barcode) {\n      var voucherDefinitions = posConfig.getVoucherDefinitions();\n      if (voucherDefinitions) {\n        var voucherDefinition = voucherDefinitions.find(function (v) {\n          return barcode.startsWith(v.prefix) && v.length == barcode.length;\n        });\n        if (voucherDefinition) return true;\n      }\n    }\n    return false;\n  }\n  function requestValue(minValueInput, maxValueInput, title, prefilledValue) {\n    var flowDeferred = $q.defer();\n    eventBus.notify(eventBus.events.pos.rangedValueInputRequested, {\n      minValueInput: minValueInput,\n      maxValueInput: maxValueInput,\n      title: title,\n      prefilledValue: prefilledValue\n    });\n    var eventpointer = eventBus.subscribe(eventBus.events.pos.rangedValueInputResponse, null, function (ev, value) {\n      if (value) {\n        flowDeferred.resolve(value);\n      } else {\n        flowDeferred.resolve();\n      }\n      eventpointer();\n    });\n    return flowDeferred.promise;\n  }\n  function addVoucherToReceipt(voucher) {\n    receipt.addVoucher(voucher.voucherNo, voucher.balance, voucher.description, voucher.ean, \"Sale\", 1, clerkLoginService.currentUser().clerkNumber);\n  }\n  function deactivateVoucherWithAuthorization(_x23) {\n    return _deactivateVoucherWithAuthorization.apply(this, arguments);\n  }\n  function _deactivateVoucherWithAuthorization() {\n    _deactivateVoucherWithAuthorization = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee11(voucher) {\n      var currentClerk, clerk;\n      return _regeneratorRuntime().wrap(function _callee11$(_context11) {\n        while (1) switch (_context11.prev = _context11.next) {\n          case 0:\n            voucherDeactivationInProgress = true;\n            _context11.prev = 1;\n            if (!receipt.containsVoucher(voucher.voucherNo)) {\n              _context11.next = 6;\n              break;\n            }\n            notification.pop(\"warning\", i18nVoucherAlreadyExists);\n            voucherDeactivationInProgress = false;\n            return _context11.abrupt(\"return\");\n          case 6:\n            currentClerk = null;\n            currentClerk = clerkLoginService.currentUser();\n            voucherModalsService.hideVoucherModal();\n            clerk = null;\n            if (!(!currentClerk || !currentClerk.canDeactivateVoucher)) {\n              _context11.next = 31;\n              break;\n            }\n            _context11.prev = 11;\n            _context11.next = 14;\n            return clerkLoginService.startClerkVerification();\n          case 14:\n            clerk = _context11.sent;\n            _context11.next = 19;\n            break;\n          case 17:\n            _context11.prev = 17;\n            _context11.t0 = _context11[\"catch\"](11);\n          case 19:\n            if (!(!clerk || !clerk.canDeactivateVoucher)) {\n              _context11.next = 26;\n              break;\n            }\n            notification.pop(\"error\", i18nClerkVerificationDenied);\n            voucherModalsService.showVoucherModal();\n            voucherDeactivationInProgress = false;\n            return _context11.abrupt(\"return\");\n          case 26:\n            _context11.next = 28;\n            return deactivateVoucher(voucher, clerk.clerkNumber, receipt.constructReceiptId(receipt.getReceipt()));\n          case 28:\n            voucherDeactivationInProgress = false;\n          case 29:\n            _context11.next = 34;\n            break;\n          case 31:\n            _context11.next = 33;\n            return deactivateVoucher(voucher, currentClerk.clerkNumber, receipt.constructReceiptId(receipt.getReceipt()));\n          case 33:\n            voucherDeactivationInProgress = false;\n          case 34:\n            _context11.next = 40;\n            break;\n          case 36:\n            _context11.prev = 36;\n            _context11.t1 = _context11[\"catch\"](1);\n            notification.pop(\"error\", i18nGeneralError);\n            voucherModalsService.showVoucherModal();\n          case 40:\n            voucherDeactivationInProgress = false;\n          case 41:\n          case \"end\":\n            return _context11.stop();\n        }\n      }, _callee11, null, [[1, 36], [11, 17]]);\n    }));\n    return _deactivateVoucherWithAuthorization.apply(this, arguments);\n  }\n  function deactivateVoucher(voucher, clerkId, transactionReference) {\n    var deferred = $q.defer();\n    var eventPointer = eventBus.subscribe(eventBus.events.voucher.retryAction, null, function (ev, params) {\n      deactivateVoucherAsync(voucher, clerkId, transactionReference, deferred, eventPointer);\n    });\n    deactivateVoucherAsync(voucher, clerkId, transactionReference, deferred, eventPointer);\n    return deferred.promise;\n  }\n  function deactivateVoucherAsync(_x24, _x25, _x26, _x27, _x28) {\n    return _deactivateVoucherAsync.apply(this, arguments);\n  }\n  function _deactivateVoucherAsync() {\n    _deactivateVoucherAsync = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee12(voucher, clerkId, transactionReference, deferred, eventPointer) {\n      var _response$data5, _response$data6, _response$data7, _response$data9, response, actions, _response$data8, item;\n      return _regeneratorRuntime().wrap(function _callee12$(_context12) {\n        while (1) switch (_context12.prev = _context12.next) {\n          case 0:\n            _context12.prev = 0;\n            _context12.next = 3;\n            return voucherRepository.api.deactivateVoucher(voucher.voucherNo, clerkId, transactionReference);\n          case 3:\n            response = _context12.sent;\n            actions = [];\n            actions.push({\n              voucherNumber: voucher.voucherNo,\n              description: voucher.description,\n              balance: voucher.balance,\n              succeeded: (response === null || response === void 0 || (_response$data5 = response.data) === null || _response$data5 === void 0 ? void 0 : _response$data5.responseCode) == 0,\n              message: voucherMessageService.getErrorMessage(response === null || response === void 0 || (_response$data6 = response.data) === null || _response$data6 === void 0 ? void 0 : _response$data6.responseCode)\n            });\n            if ((response === null || response === void 0 || (_response$data7 = response.data) === null || _response$data7 === void 0 ? void 0 : _response$data7.responseCode) != 0) {\n              notification.pop(\"error\", voucherMessageService.getErrorMessage(response === null || response === void 0 || (_response$data8 = response.data) === null || _response$data8 === void 0 ? void 0 : _response$data8.responseCode));\n            }\n            _context12.next = 9;\n            return voucherModalsService.showActionModal(actions, \"deactivation\", deferred);\n          case 9:\n            if (((_response$data9 = response.data) === null || _response$data9 === void 0 ? void 0 : _response$data9.responseCode) == 0) {\n              item = receipt.addVoucher(voucher.voucherNo, voucher.balance, voucher.description, voucher.ean, \"Return\", -1, clerkId);\n              fluctuatingPropertiesHelper.setVoucherBalance(item, 0);\n              fluctuatingPropertiesHelper.setVoucherExpiryDate(item, i18nDeactivated);\n              fluctuatingPropertiesHelper.setVoucherDescription(item, voucher.description);\n              if (response.data.responseCode == 0 && response.data.uniqueTransactionId) {\n                fluctuatingPropertiesHelper.setUniqueTransactionId(item, response.data.uniqueTransactionId);\n              }\n              if (returnReasons.haveReturnReasons()) {\n                returnReasons.returnReasonsSelector().then(function (returnReason) {\n                  receipt.setReturnReason(returnReason);\n                });\n              }\n              receipt.persist();\n            }\n            voucherDeactivationInProgress = false;\n            _context12.next = 17;\n            break;\n          case 13:\n            _context12.prev = 13;\n            _context12.t0 = _context12[\"catch\"](0);\n            notification.pop(\"error\", i18nGeneralError);\n            voucherDeactivationInProgress = false;\n          case 17:\n            if (eventPointer) {\n              eventPointer();\n            }\n          case 18:\n          case \"end\":\n            return _context12.stop();\n        }\n      }, _callee12, null, [[0, 13]]);\n    }));\n    return _deactivateVoucherAsync.apply(this, arguments);\n  }\n  function printAction(actionType, clerkId, actions) {\n    clerkLoginService.getClerk(clerkId).then(function (clerk) {\n      var voucherAction = {\n        date: moment().format(\"YYYY-MM-DD HH:mm:ss.SS\"),\n        clerkName: clerk.firstName + \" \" + clerk.lastName,\n        clerkId: clerkId,\n        shopName: posStorage.get(\"current_shop\").description,\n        shopId: posStorage.get(\"shopId\"),\n        vouchers: []\n      };\n      actions.forEach(function (action) {\n        voucherAction.vouchers.push({\n          no: action.voucherNumber,\n          description: action.description,\n          balance: action.balance,\n          result: action.succeeded ? i18nVoucherActionSucceeded : i18nVoucherActionFailed,\n          message: action.message\n        });\n      });\n      switch (actionType) {\n        case \"activation\":\n          {\n            voucherAction.type = i18nVoucherActionActivation;\n          }\n          break;\n        case \"purchaseCancellation\":\n          {\n            voucherAction.type = i18nVoucherActionCancellation;\n          }\n          break;\n        case \"cancelDeactivation\":\n          {\n            voucherAction.type = i18nVoucherActionCancellation;\n          }\n          break;\n        case \"deactivation\":\n          {\n            voucherAction.type = i18nVoucherActionDeactivation;\n          }\n          break;\n      }\n      voucherRepository.api.printVoucherAction(voucherAction);\n    });\n  }\n  return service;\n});\n","\"use strict\";\n\npos.controller(\"PickWeborderController\", function ($scope, $translate, webOrderRepository, notification, $location, webOrderStatusEnum) {\n  $scope.webOrderStatusEnum = webOrderStatusEnum;\n  if ($scope.$stateParams.orderNo) {\n    $scope.orderNo = $scope.$stateParams.orderNo;\n  } else {\n    $location.path(\"/\"); // Cancel sale if no order no is present\n  }\n\n  // Get order status translations\n  var orderStatusTranslations = {};\n  $translate([\"pickweborder/orderstatus/reserved\", \"pickweborder/orderstatus/picked\", \"pickweborder/orderstatus/delivered\", \"pickweborder/orderstatus/returned\", \"pickweborder/orderstatus/returnedpayment\", \"pickweborder/orderstatus/skipped\"]).then(function (translations) {\n    orderStatusTranslations[webOrderStatusEnum.reserved] = translations[\"pickweborder/orderstatus/reserved\"];\n    orderStatusTranslations[webOrderStatusEnum.picked] = translations[\"pickweborder/orderstatus/picked\"];\n    orderStatusTranslations[webOrderStatusEnum.delivered] = translations[\"pickweborder/orderstatus/delivered\"];\n    orderStatusTranslations[webOrderStatusEnum.returned] = translations[\"pickweborder/orderstatus/returned\"];\n    orderStatusTranslations[webOrderStatusEnum.returnedPayment] = translations[\"pickweborder/orderstatus/returnedpayment\"];\n    orderStatusTranslations[webOrderStatusEnum.skipped] = translations[\"pickweborder/orderstatus/skipped\"];\n  });\n\n  // Private methods\n  function getWebOrder(orderNo, webShopId) {\n    webOrderRepository.api.getWebOrder(orderNo, webShopId).then(function (response) {\n      if (response && response.data) {\n        $scope.weborder = response.data;\n      }\n    });\n  }\n\n  // Public methods\n  $scope.translateStatus = function (statusId) {\n    var statusTranslation = orderStatusTranslations[statusId];\n    if (statusTranslation === undefined) return \"\";\n    return statusTranslation;\n  };\n  $scope.pick = function () {\n    webOrderRepository.api.updateAsPicked($scope.weborder).then(function (response) {\n      if (!response || !response.data) {\n        notification.pop(\"warning\", \"Picking order failed\");\n      }\n\n      // Refresh view to show changes\n      getWebOrder($scope.orderNo, $scope.webShopId);\n    });\n  };\n  $scope.toggleItem = function (item) {\n    // Certain statuses cannot change\n    if (item.status === webOrderStatusEnum.delivered || item.status === webOrderStatusEnum.returned || item.status === webOrderStatusEnum.returnedPayment) return;\n\n    // Item cannot change status from 'picked' if that status came from the server\n    if (item.status === webOrderStatusEnum.picked && item.oldStatus) {\n      item.status = item.oldStatus;\n    } else {\n      item.oldStatus = item.status;\n      item.status = webOrderStatusEnum.picked;\n    }\n  };\n\n  // Init\n  getWebOrder($scope.orderNo, $scope.webShopId);\n});\n","\"use strict\";\n\npos.value(\"webOrderStatusEnum\", Object.freeze({\n  reserved: 2,\n  picked: 4,\n  delivered: 6,\n  returned: 8,\n  returnedPayment: 10,\n  skipped: 20\n}));\npos.value(\"webOrderTypeEnum\", Object.freeze({\n  clickAndCollect: 0,\n  orderInStore: 1\n}));\n","\"use strict\";\n\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _regeneratorRuntime() { \"use strict\"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return r; }; var t, r = {}, e = Object.prototype, n = e.hasOwnProperty, o = \"function\" == typeof Symbol ? Symbol : {}, i = o.iterator || \"@@iterator\", a = o.asyncIterator || \"@@asyncIterator\", u = o.toStringTag || \"@@toStringTag\"; function c(t, r, e, n) { return Object.defineProperty(t, r, { value: e, enumerable: !n, configurable: !n, writable: !n }); } try { c({}, \"\"); } catch (t) { c = function c(t, r, e) { return t[r] = e; }; } function h(r, e, n, o) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype); return c(a, \"_invoke\", function (r, e, n) { var o = 1; return function (i, a) { if (3 === o) throw Error(\"Generator is already running\"); if (4 === o) { if (\"throw\" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var u = n.delegate; if (u) { var c = d(u, n); if (c) { if (c === f) continue; return c; } } if (\"next\" === n.method) n.sent = n._sent = n.arg;else if (\"throw\" === n.method) { if (1 === o) throw o = 4, n.arg; n.dispatchException(n.arg); } else \"return\" === n.method && n.abrupt(\"return\", n.arg); o = 3; var h = s(r, e, n); if (\"normal\" === h.type) { if (o = n.done ? 4 : 2, h.arg === f) continue; return { value: h.arg, done: n.done }; } \"throw\" === h.type && (o = 4, n.method = \"throw\", n.arg = h.arg); } }; }(r, n, new Context(o || [])), !0), a; } function s(t, r, e) { try { return { type: \"normal\", arg: t.call(r, e) }; } catch (t) { return { type: \"throw\", arg: t }; } } r.wrap = h; var f = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var l = {}; c(l, i, function () { return this; }); var p = Object.getPrototypeOf, y = p && p(p(x([]))); y && y !== e && n.call(y, i) && (l = y); var v = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(l); function g(t) { [\"next\", \"throw\", \"return\"].forEach(function (r) { c(t, r, function (t) { return this._invoke(r, t); }); }); } function AsyncIterator(t, r) { function e(o, i, a, u) { var c = s(t[o], t, i); if (\"throw\" !== c.type) { var h = c.arg, f = h.value; return f && \"object\" == _typeof(f) && n.call(f, \"__await\") ? r.resolve(f.__await).then(function (t) { e(\"next\", t, a, u); }, function (t) { e(\"throw\", t, a, u); }) : r.resolve(f).then(function (t) { h.value = t, a(h); }, function (t) { return e(\"throw\", t, a, u); }); } u(c.arg); } var o; c(this, \"_invoke\", function (t, n) { function i() { return new r(function (r, o) { e(t, n, r, o); }); } return o = o ? o.then(i, i) : i(); }, !0); } function d(r, e) { var n = e.method, o = r.i[n]; if (o === t) return e.delegate = null, \"throw\" === n && r.i[\"return\"] && (e.method = \"return\", e.arg = t, d(r, e), \"throw\" === e.method) || \"return\" !== n && (e.method = \"throw\", e.arg = new TypeError(\"The iterator does not provide a '\" + n + \"' method\")), f; var i = s(o, r.i, e.arg); if (\"throw\" === i.type) return e.method = \"throw\", e.arg = i.arg, e.delegate = null, f; var a = i.arg; return a ? a.done ? (e[r.r] = a.value, e.next = r.n, \"return\" !== e.method && (e.method = \"next\", e.arg = t), e.delegate = null, f) : a : (e.method = \"throw\", e.arg = new TypeError(\"iterator result is not an object\"), e.delegate = null, f); } function w(t) { this.tryEntries.push(t); } function m(r) { var e = r[4] || {}; e.type = \"normal\", e.arg = t, r[4] = e; } function Context(t) { this.tryEntries = [[-1]], t.forEach(w, this), this.reset(!0); } function x(r) { if (null != r) { var e = r[i]; if (e) return e.call(r); if (\"function\" == typeof r.next) return r; if (!isNaN(r.length)) { var o = -1, a = function e() { for (; ++o < r.length;) if (n.call(r, o)) return e.value = r[o], e.done = !1, e; return e.value = t, e.done = !0, e; }; return a.next = a; } } throw new TypeError(_typeof(r) + \" is not iterable\"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, c(v, \"constructor\", GeneratorFunctionPrototype), c(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction), GeneratorFunction.displayName = c(GeneratorFunctionPrototype, u, \"GeneratorFunction\"), r.isGeneratorFunction = function (t) { var r = \"function\" == typeof t && t.constructor; return !!r && (r === GeneratorFunction || \"GeneratorFunction\" === (r.displayName || r.name)); }, r.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, c(t, u, \"GeneratorFunction\")), t.prototype = Object.create(v), t; }, r.awrap = function (t) { return { __await: t }; }, g(AsyncIterator.prototype), c(AsyncIterator.prototype, a, function () { return this; }), r.AsyncIterator = AsyncIterator, r.async = function (t, e, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(h(t, e, n, o), i); return r.isGeneratorFunction(e) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, g(v), c(v, u, \"Generator\"), c(v, i, function () { return this; }), c(v, \"toString\", function () { return \"[object Generator]\"; }), r.keys = function (t) { var r = Object(t), e = []; for (var n in r) e.unshift(n); return function t() { for (; e.length;) if ((n = e.pop()) in r) return t.value = n, t.done = !1, t; return t.done = !0, t; }; }, r.values = x, Context.prototype = { constructor: Context, reset: function reset(r) { if (this.prev = this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = \"next\", this.arg = t, this.tryEntries.forEach(m), !r) for (var e in this) \"t\" === e.charAt(0) && n.call(this, e) && !isNaN(+e.slice(1)) && (this[e] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0][4]; if (\"throw\" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(r) { if (this.done) throw r; var e = this; function n(t) { a.type = \"throw\", a.arg = r, e.next = t; } for (var o = e.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i[4], u = this.prev, c = i[1], h = i[2]; if (-1 === i[0]) return n(\"end\"), !1; if (!c && !h) throw Error(\"try statement without catch or finally\"); if (null != i[0] && i[0] <= u) { if (u < c) return this.method = \"next\", this.arg = t, n(c), !0; if (u < h) return n(h), !1; } } }, abrupt: function abrupt(t, r) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var n = this.tryEntries[e]; if (n[0] > -1 && n[0] <= this.prev && this.prev < n[2]) { var o = n; break; } } o && (\"break\" === t || \"continue\" === t) && o[0] <= r && r <= o[2] && (o = null); var i = o ? o[4] : {}; return i.type = t, i.arg = r, o ? (this.method = \"next\", this.next = o[2], f) : this.complete(i); }, complete: function complete(t, r) { if (\"throw\" === t.type) throw t.arg; return \"break\" === t.type || \"continue\" === t.type ? this.next = t.arg : \"return\" === t.type ? (this.rval = this.arg = t.arg, this.method = \"return\", this.next = \"end\") : \"normal\" === t.type && r && (this.next = r), f; }, finish: function finish(t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[2] === t) return this.complete(e[4], e[3]), m(e), f; } }, \"catch\": function _catch(t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[0] === t) { var n = e[4]; if (\"throw\" === n.type) { var o = n.arg; m(e); } return o; } } throw Error(\"illegal catch attempt\"); }, delegateYield: function delegateYield(r, e, n) { return this.delegate = { i: x(r), r: e, n: n }, \"next\" === this.method && (this.arg = t), f; } }, r; }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"next\", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"throw\", n); } _next(void 0); }); }; }\npos.factory(\"webOrderService\", function (webOrderRepository, findCustomerService, notification, $translate, posConfig, eventBus) {\n  var service = {};\n  var i18nCreateError = \"\";\n  var webshopId;\n  $translate([\"toast/could_not_create_weborder\"]).then(function (translations) {\n    i18nCreateError = translations[\"toast/could_not_create_weborder\"];\n  });\n  setupWebshop();\n  function setupWebshop() {\n    var shopFeatures = posConfig.getShopFeatures();\n    if (shopFeatures.webshop && shopFeatures.webshop.values) {\n      webshopId = shopFeatures.webshop.values.id;\n    }\n  }\n  service.create = /*#__PURE__*/function () {\n    var _ref = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee(receipt) {\n      var copy, customer, address, shippingAddress, webOrder, response;\n      return _regeneratorRuntime().wrap(function _callee$(_context) {\n        while (1) switch (_context.prev = _context.next) {\n          case 0:\n            if (!webshopId) {\n              _context.next = 12;\n              break;\n            }\n            copy = angular.copy(receipt);\n            copy.items = copy.items.filter(function (item) {\n              return item.isOrderInStore;\n            });\n            if (!(copy.items.length > 0)) {\n              _context.next = 12;\n              break;\n            }\n            customer = findCustomerService.getSelectedCustomer();\n            address = findCustomerService.getSelectedShippingAddress();\n            shippingAddress = findCustomerService.getSelectedShippingAddressString();\n            webOrder = {\n              receipt: copy,\n              firstName: customer.firstName,\n              lastname: customer.lastName,\n              shippingAddress: shippingAddress,\n              email: address.email,\n              phoneNumber: address.phone,\n              isPaid: false\n            };\n            _context.next = 10;\n            return webOrderRepository.api.createOrderInStore(webOrder, webshopId);\n          case 10:\n            response = _context.sent;\n            if (response.data) {\n              receipt.items.filter(function (item) {\n                return item.isOrderInStore;\n              }).forEach(function (i) {\n                return i.webOrderNumber = response.data.orderNo;\n              });\n            } else {\n              notification.pop(\"error\", i18nCreateError);\n            }\n          case 12:\n            return _context.abrupt(\"return\", true);\n          case 13:\n          case \"end\":\n            return _context.stop();\n        }\n      }, _callee);\n    }));\n    return function (_x) {\n      return _ref.apply(this, arguments);\n    };\n  }();\n  eventBus.subscribeAsync(eventBus.events.sale.completing, null, function (receipt) {\n    return service.create(receipt);\n  });\n  return service;\n});\n","\"use strict\";\n\npos.directive(\"weborderView\", [\"eventBus\", function (eventBus) {\n  var controller = function controller($scope, notification, $translate) {\n    var JsBarcode = require(\"jsbarcode\");\n    JsBarcode(\"#barcode\", $scope.content.webOrder.orderNo, {\n      format: \"code128\",\n      width: 2,\n      height: 15,\n      displayValue: false\n    });\n  };\n  return {\n    templateUrl: \"views/weborder/weborderView\",\n    controller: controller,\n    scope: {\n      content: \"=\"\n    }\n  };\n}]);\n","\"use strict\";\n\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _regeneratorRuntime() { \"use strict\"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return r; }; var t, r = {}, e = Object.prototype, n = e.hasOwnProperty, o = \"function\" == typeof Symbol ? Symbol : {}, i = o.iterator || \"@@iterator\", a = o.asyncIterator || \"@@asyncIterator\", u = o.toStringTag || \"@@toStringTag\"; function c(t, r, e, n) { return Object.defineProperty(t, r, { value: e, enumerable: !n, configurable: !n, writable: !n }); } try { c({}, \"\"); } catch (t) { c = function c(t, r, e) { return t[r] = e; }; } function h(r, e, n, o) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype); return c(a, \"_invoke\", function (r, e, n) { var o = 1; return function (i, a) { if (3 === o) throw Error(\"Generator is already running\"); if (4 === o) { if (\"throw\" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var u = n.delegate; if (u) { var c = d(u, n); if (c) { if (c === f) continue; return c; } } if (\"next\" === n.method) n.sent = n._sent = n.arg;else if (\"throw\" === n.method) { if (1 === o) throw o = 4, n.arg; n.dispatchException(n.arg); } else \"return\" === n.method && n.abrupt(\"return\", n.arg); o = 3; var h = s(r, e, n); if (\"normal\" === h.type) { if (o = n.done ? 4 : 2, h.arg === f) continue; return { value: h.arg, done: n.done }; } \"throw\" === h.type && (o = 4, n.method = \"throw\", n.arg = h.arg); } }; }(r, n, new Context(o || [])), !0), a; } function s(t, r, e) { try { return { type: \"normal\", arg: t.call(r, e) }; } catch (t) { return { type: \"throw\", arg: t }; } } r.wrap = h; var f = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var l = {}; c(l, i, function () { return this; }); var p = Object.getPrototypeOf, y = p && p(p(x([]))); y && y !== e && n.call(y, i) && (l = y); var v = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(l); function g(t) { [\"next\", \"throw\", \"return\"].forEach(function (r) { c(t, r, function (t) { return this._invoke(r, t); }); }); } function AsyncIterator(t, r) { function e(o, i, a, u) { var c = s(t[o], t, i); if (\"throw\" !== c.type) { var h = c.arg, f = h.value; return f && \"object\" == _typeof(f) && n.call(f, \"__await\") ? r.resolve(f.__await).then(function (t) { e(\"next\", t, a, u); }, function (t) { e(\"throw\", t, a, u); }) : r.resolve(f).then(function (t) { h.value = t, a(h); }, function (t) { return e(\"throw\", t, a, u); }); } u(c.arg); } var o; c(this, \"_invoke\", function (t, n) { function i() { return new r(function (r, o) { e(t, n, r, o); }); } return o = o ? o.then(i, i) : i(); }, !0); } function d(r, e) { var n = e.method, o = r.i[n]; if (o === t) return e.delegate = null, \"throw\" === n && r.i[\"return\"] && (e.method = \"return\", e.arg = t, d(r, e), \"throw\" === e.method) || \"return\" !== n && (e.method = \"throw\", e.arg = new TypeError(\"The iterator does not provide a '\" + n + \"' method\")), f; var i = s(o, r.i, e.arg); if (\"throw\" === i.type) return e.method = \"throw\", e.arg = i.arg, e.delegate = null, f; var a = i.arg; return a ? a.done ? (e[r.r] = a.value, e.next = r.n, \"return\" !== e.method && (e.method = \"next\", e.arg = t), e.delegate = null, f) : a : (e.method = \"throw\", e.arg = new TypeError(\"iterator result is not an object\"), e.delegate = null, f); } function w(t) { this.tryEntries.push(t); } function m(r) { var e = r[4] || {}; e.type = \"normal\", e.arg = t, r[4] = e; } function Context(t) { this.tryEntries = [[-1]], t.forEach(w, this), this.reset(!0); } function x(r) { if (null != r) { var e = r[i]; if (e) return e.call(r); if (\"function\" == typeof r.next) return r; if (!isNaN(r.length)) { var o = -1, a = function e() { for (; ++o < r.length;) if (n.call(r, o)) return e.value = r[o], e.done = !1, e; return e.value = t, e.done = !0, e; }; return a.next = a; } } throw new TypeError(_typeof(r) + \" is not iterable\"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, c(v, \"constructor\", GeneratorFunctionPrototype), c(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction), GeneratorFunction.displayName = c(GeneratorFunctionPrototype, u, \"GeneratorFunction\"), r.isGeneratorFunction = function (t) { var r = \"function\" == typeof t && t.constructor; return !!r && (r === GeneratorFunction || \"GeneratorFunction\" === (r.displayName || r.name)); }, r.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, c(t, u, \"GeneratorFunction\")), t.prototype = Object.create(v), t; }, r.awrap = function (t) { return { __await: t }; }, g(AsyncIterator.prototype), c(AsyncIterator.prototype, a, function () { return this; }), r.AsyncIterator = AsyncIterator, r.async = function (t, e, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(h(t, e, n, o), i); return r.isGeneratorFunction(e) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, g(v), c(v, u, \"Generator\"), c(v, i, function () { return this; }), c(v, \"toString\", function () { return \"[object Generator]\"; }), r.keys = function (t) { var r = Object(t), e = []; for (var n in r) e.unshift(n); return function t() { for (; e.length;) if ((n = e.pop()) in r) return t.value = n, t.done = !1, t; return t.done = !0, t; }; }, r.values = x, Context.prototype = { constructor: Context, reset: function reset(r) { if (this.prev = this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = \"next\", this.arg = t, this.tryEntries.forEach(m), !r) for (var e in this) \"t\" === e.charAt(0) && n.call(this, e) && !isNaN(+e.slice(1)) && (this[e] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0][4]; if (\"throw\" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(r) { if (this.done) throw r; var e = this; function n(t) { a.type = \"throw\", a.arg = r, e.next = t; } for (var o = e.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i[4], u = this.prev, c = i[1], h = i[2]; if (-1 === i[0]) return n(\"end\"), !1; if (!c && !h) throw Error(\"try statement without catch or finally\"); if (null != i[0] && i[0] <= u) { if (u < c) return this.method = \"next\", this.arg = t, n(c), !0; if (u < h) return n(h), !1; } } }, abrupt: function abrupt(t, r) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var n = this.tryEntries[e]; if (n[0] > -1 && n[0] <= this.prev && this.prev < n[2]) { var o = n; break; } } o && (\"break\" === t || \"continue\" === t) && o[0] <= r && r <= o[2] && (o = null); var i = o ? o[4] : {}; return i.type = t, i.arg = r, o ? (this.method = \"next\", this.next = o[2], f) : this.complete(i); }, complete: function complete(t, r) { if (\"throw\" === t.type) throw t.arg; return \"break\" === t.type || \"continue\" === t.type ? this.next = t.arg : \"return\" === t.type ? (this.rval = this.arg = t.arg, this.method = \"return\", this.next = \"end\") : \"normal\" === t.type && r && (this.next = r), f; }, finish: function finish(t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[2] === t) return this.complete(e[4], e[3]), m(e), f; } }, \"catch\": function _catch(t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[0] === t) { var n = e[4]; if (\"throw\" === n.type) { var o = n.arg; m(e); } return o; } } throw Error(\"illegal catch attempt\"); }, delegateYield: function delegateYield(r, e, n) { return this.delegate = { i: x(r), r: e, n: n }, \"next\" === this.method && (this.arg = t), f; } }, r; }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"next\", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"throw\", n); } _next(void 0); }); }; }\npos.directive(\"articleStatisticWidget\", function ($rootScope, $log, stockService, $translate) {\n  function controller($scope) {\n    $scope.i18n = {};\n    init();\n    $scope.itemHierarchyNodeName = null;\n    $scope.itemName = null;\n    $scope.itemNo = null;\n    $scope.stockInfo = null;\n    $scope.selectedLocation = null;\n    $scope.dropdown = {\n      expanded: false\n    };\n    var originalStockInfo = {\n      quantityInTransit: 0,\n      quantityOnHand: 0,\n      quantityOnPurchaseOrder: 0,\n      quantityReserved: 0\n    };\n    $scope.computedStockInfo = angular.copy(originalStockInfo);\n    $scope.toggleDropdown = function () {\n      $scope.dropdown.expanded = !$scope.dropdown.expanded;\n    };\n\n    /**\n     * Selects a new location, and updates the UI\n     * @param {StockLocation} location The location to show information for\n     */\n    $scope.selectLocation = /*#__PURE__*/function () {\n      var _ref = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee(location) {\n        var stock;\n        return _regeneratorRuntime().wrap(function _callee$(_context) {\n          while (1) switch (_context.prev = _context.next) {\n            case 0:\n              $scope.selectedLocation = location;\n              $scope.dropdown.expanded = false;\n              stock = $scope.stockInfo;\n              if (location.locationName == $scope.i18n.all) {\n                // Summarize all quantities across all locations\n                $scope.computedStockInfo = stock.filter(function (s) {\n                  return s.locationName != $scope.i18n.all;\n                }).reduce(function (cur, s) {\n                  cur.quantityInTransit += s.quantityInTransit;\n                  cur.quantityOnHand += s.quantityOnHand;\n                  cur.quantityOnPurchaseOrder += s.quantityOnPurchaseOrder;\n                  cur.quantityReserved += s.quantityReserved;\n                  return cur;\n                }, angular.copy(originalStockInfo));\n              } else {\n                $scope.computedStockInfo = angular.copy(location);\n              }\n            case 4:\n            case \"end\":\n              return _context.stop();\n          }\n        }, _callee);\n      }));\n      return function (_x) {\n        return _ref.apply(this, arguments);\n      };\n    }();\n\n    /**\n     * Get the article statistics to display for the given item\n     * @param {Item} selectedItem The selected item from the receipt panel\n     */\n    function getArticleStatistic(_x2) {\n      return _getArticleStatistic.apply(this, arguments);\n    }\n    /**\n     * Initializes the translations for the widget\n     */\n    function _getArticleStatistic() {\n      _getArticleStatistic = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee2(selectedItem) {\n        return _regeneratorRuntime().wrap(function _callee2$(_context2) {\n          while (1) switch (_context2.prev = _context2.next) {\n            case 0:\n              if (!(selectedItem !== false)) {\n                _context2.next = 11;\n                break;\n              }\n              $scope.itemHierarchyNodeName = selectedItem.itemGroupName;\n              $scope.itemName = selectedItem.parameter2;\n              $scope.itemNo = selectedItem.itemNo;\n              _context2.next = 6;\n              return stockService.getItemStockLevels(selectedItem.variantId, false);\n            case 6:\n              $scope.stockInfo = _context2.sent;\n              $scope.stockInfo.push({\n                locationName: $scope.i18n.all\n              });\n              $scope.selectLocation($scope.stockInfo[0]);\n              _context2.next = 15;\n              break;\n            case 11:\n              $scope.stockInfo = null;\n              $scope.itemHierarchyNodeName = null;\n              $scope.itemName = null;\n              $scope.itemNo = null;\n            case 15:\n            case \"end\":\n              return _context2.stop();\n          }\n        }, _callee2);\n      }));\n      return _getArticleStatistic.apply(this, arguments);\n    }\n    function init() {\n      return _init.apply(this, arguments);\n    }\n    function _init() {\n      _init = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee3() {\n        var translations;\n        return _regeneratorRuntime().wrap(function _callee3$(_context3) {\n          while (1) switch (_context3.prev = _context3.next) {\n            case 0:\n              _context3.next = 2;\n              return $translate([\"widget/article-statistic/all\", \"widget/article-statistic/qtyInTransit\", \"widget/article-statistic/qtyOnHand\", \"widget/article-statistic/qtyPurchaseOrders\", \"widget/article-statistic/qtyReserved\"]);\n            case 2:\n              translations = _context3.sent;\n              $scope.i18n = {\n                all: translations[\"widget/article-statistic/all\"],\n                qty: {\n                  inTransit: translations[\"widget/article-statistic/qtyInTransit\"],\n                  onHand: translations[\"widget/article-statistic/qtyOnHand\"],\n                  purchaseOrders: translations[\"widget/article-statistic/qtyPurchaseOrders\"],\n                  reserved: translations[\"widget/article-statistic/qtyReserved\"]\n                }\n              };\n            case 4:\n            case \"end\":\n              return _context3.stop();\n          }\n        }, _callee3);\n      }));\n      return _init.apply(this, arguments);\n    }\n    $scope.$watch(function () {\n      return $rootScope.selectedItem;\n    }, getArticleStatistic);\n  }\n  return {\n    templateUrl: \"views/widgets/widget-article-statistic\",\n    controller: controller,\n    link: function link(scope, ele, attr) {\n      // This class caused unnecesary scrollbars when the dropdown were open\n      $(ele).removeClass(\"widget-overflow\");\n\n      // Somehow scrolling could not be done in the individual widget in the widget pane\n      // so I introduced this to mimick the default behaviour\n      $(ele).find(\"ul.stock-dropdown__items\").on(\"wheel\", function (e) {\n        var currentScroll = $(this).scrollTop();\n        var newScroll = currentScroll + e.originalEvent.deltaY;\n        $(this).scrollTop(newScroll);\n      });\n    }\n  };\n});\n","\"use strict\";\n\npos.factory(\"coreLoyaltyService\", function ($rootScope, receipt, posConfig, eventBus, notification, $translate, $q) {\n  var service = {};\n  var canPurchaseGiftCertificateWithLoyalty;\n  var minimumBeforeSpending = 0;\n  var convertionRatio = 0;\n  var loyaltyCustomer;\n  var loyaltyWatcher;\n  var loyaltyPayment = {\n    type: \"LoyaltyBonus\",\n    translation: \"button/loyaltybonus\",\n    icon: \"icons8-discount\",\n    style: \"\",\n    // TODO: add look-at-me-styling\n    paymentStrategy: \"loyalty\",\n    buttonState: \"rightmenupayment/loyaltyBonus\"\n  };\n  var i18nDeductLoyalty;\n  var loyaltyEnabledPredicate = function loyaltyEnabledPredicate() {\n    if (canPurchaseGiftCertificateWithLoyalty) {\n      return loyaltyCustomer && loyaltyCustomer.loyaltyPointsAvailable >= minimumBeforeSpending && receipt.getTotal().isPos() && getMoneyToUse(loyaltyCustomer).gt(0);\n    } else {\n      return getNonGiftCertificatesAmount(receipt.getReceipt().items) > 0 && !canPurchaseGiftCertificateWithLoyalty && loyaltyCustomer && loyaltyCustomer.loyaltyPointsAvailable >= minimumBeforeSpending && receipt.getTotal().isPos() && getMoneyToUse(loyaltyCustomer).gt(0);\n    }\n  };\n  $translate(\"toast/return-with-loyalty\").then(function (translation) {\n    return i18nDeductLoyalty = translation;\n  });\n\n  /**\n   * Replace the default loyalty paymenttype.\n   * It should have the same properties defined as the default one\n   */\n  service.setLoyaltyPaymentType = function (paymentType) {\n    loyaltyPayment = paymentType;\n  };\n\n  /**\n   * Attach customer to receipt and setup watcher for loyalty payment\n   * customer = {\n   *      customerNumber: <customerNumber(Number)>\n   *      moneyToUse: <spendings available(Number)>\n   * }\n   */\n  service.attachCustomer = function (customer) {\n    // disable watcher if one is running, to avoid leaking\n    this.detachCustomer();\n\n    // add the customerNmber to the receipt\n    loyaltyCustomer = customer;\n    receipt.addLoyaltyCustomer(customer.customerNumber, customer.customerEmail);\n    if (receipt.getTotal().isNeg()) notification.pop(\"warning\", i18nDeductLoyalty);\n\n    // setup a watcher to decide if the loyalty payment should be available or not\n    loyaltyWatcher = $rootScope.$watch(loyaltyEnabledPredicate, addOrRemoveLoyaltyPayment);\n  };\n\n  /**\n   * Remove customer from receipt and cancel watcher\n   */\n  service.detachCustomer = function () {\n    if (loyaltyWatcher) loyaltyWatcher();\n    loyaltyCustomer = null;\n    removeLoyaltyPayment();\n    receipt.addLoyaltyCustomer(null, null);\n  };\n  service.validatePaymentAmount = function (amount) {\n    var amountDecimal = new Decimal(amount);\n    var isUsingMoreThanCurrentBalance = getMoneyToUse(loyaltyCustomer).lt(new Decimal(amountDecimal));\n    var isUsingMoreThanRemainder = receipt.getTotal().minus(receipt.getPaymentsTotal()).lt(new Decimal(amountDecimal));\n    if (isUsingMoreThanCurrentBalance) return $q.reject(\"LOYALTY_OVERCHARGE_NOT_ALLOWED\");\n    if (isUsingMoreThanRemainder) return $q.reject(\"LOYALTY_OVERPAY_NOT_ALLOWED\");\n    if (!canPurchaseGiftCertificateWithLoyalty) {\n      var isPayingWithLoyaltyForGiftCertificates = receipt.getTotal().minus(getGiftCertificatesAmount(receipt.getReceipt().items)).lt(new Decimal(amountDecimal));\n      if (isPayingWithLoyaltyForGiftCertificates) return $q.reject(\"LOYALTY_GIFTCERTIFICATE_PURCHASE_NOT_ALLOWED\");\n    }\n    return $q.resolve();\n  };\n  function getGiftCertificatesAmount(items) {\n    return items.filter(function (element) {\n      return element.templateType === \"giftCertificate\";\n    }).reduce(function (acc, element) {\n      return acc.plus(element.effectiveSalesPrice);\n    }, new Decimal(0));\n  }\n  function getNonGiftCertificatesAmount(items) {\n    return items.filter(function (element) {\n      return element.templateType !== \"giftCertificate\";\n    }).reduce(function (acc, element) {\n      return acc.plus(element.effectiveSalesPrice);\n    }, new Decimal(0));\n  }\n  function addOrRemoveLoyaltyPayment(enableLoyaltyPayment) {\n    if (enableLoyaltyPayment) addLoyaltyPayment();else removeLoyaltyPayment();\n  }\n  function removeLoyaltyPayment() {\n    var paymentTypes = posConfig.getPaymentTypeConfigs();\n    for (var i = 0; i < paymentTypes.length; i++) {\n      if (paymentTypes[i].type !== loyaltyPayment.type) continue;\n      paymentTypes.splice(i, 1);\n      break;\n    }\n    posConfig.setPaymentTypeConfigs(paymentTypes);\n    delete loyaltyPayment.amountSuggestion;\n  }\n  function addLoyaltyPayment() {\n    var paymentTypes = posConfig.getPaymentTypeConfigs();\n    // the amount suggestion strategy is currently not changeable\n    loyaltyPayment.amountSuggestion = function () {\n      var toUse = getMoneyToUse(loyaltyCustomer);\n      var remaining = receipt.getTotal().minus(receipt.getPaymentsTotal()).abs();\n      if (!canPurchaseGiftCertificateWithLoyalty) {\n        var giftCertificatesAmount = getGiftCertificatesAmount(receipt.getReceipt().items);\n        remaining = remaining.minus(giftCertificatesAmount);\n      }\n      return toUse.gt(remaining) ? remaining : toUse;\n    };\n    paymentTypes.unshift(loyaltyPayment);\n    posConfig.setPaymentTypeConfigs(paymentTypes);\n  }\n  function getMoneyToUse(customer) {\n    var payments = receipt.getReceipt().payments;\n    var loyaltySpendings = payments.filter(function (o) {\n      return o.paymentType === loyaltyPayment.type;\n    }).reduce(function (pre, cur) {\n      return pre.plus(cur.amount);\n    }, new Decimal(0));\n    return new Decimal(customer.loyaltyPointsAvailable || 0).times(convertionRatio).minus(loyaltySpendings);\n  }\n  function initConfig() {\n    var localCurrency = posConfig.getLocalCurrency();\n    var cfg = posConfig.getLoyaltyConfiguration();\n    var loyaltyRatio = cfg.ratios.find(function (ratio) {\n      return ratio.currencyCode == localCurrency.name;\n    });\n    convertionRatio = loyaltyRatio ? loyaltyRatio.ratioPointToCurrency : 0;\n    minimumBeforeSpending = cfg.settings.minAvailablePointsBeforeSpending;\n    canPurchaseGiftCertificateWithLoyalty = cfg.settings.canPurchaseGiftVouchersWithPoints;\n    // If there is a loyalty customer attached and the payment types array does not contain the loyalty payment type - readd it\n    if (!!loyaltyCustomer && !posConfig.getPaymentTypeConfigs().find(function (pt) {\n      return pt.type == loyaltyPayment.type;\n    })) {\n      addOrRemoveLoyaltyPayment(loyaltyEnabledPredicate());\n    }\n  }\n  eventBus.subscribe(eventBus.events.pos.newConfig, null, function () {\n    return initConfig();\n  });\n  initConfig();\n  return service;\n});\n","\"use strict\";\n\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\npos.directive(\"customerDisplayWidget\", function () {\n  return {\n    templateUrl: \"views/widgets/widget-customer-display\",\n    controller: function controller($scope, Widgets, $rootScope, posStorage, receipt, eventBus) {\n      var windowRef = null;\n      var conf = null;\n      loadConfig();\n      $scope.widgetsService = Widgets;\n      $scope.openDisplay = function () {\n        windowRef = window.open(\"DDD_CUSTOMER_DISPLAY_URL?targetDisplay=\".concat(conf.targetDisplay), \"customer-display\", \"width=800,height=600\");\n        window.addEventListener(\"message\", function (ev) {\n          return messageReceived(ev);\n        });\n      };\n      $scope.hideWidgets = function () {\n        $scope.widgetsService.showWidgets = false;\n        $(\"#center-content.center-content--downscale\").removeClass(\"center-content--downscale\");\n      };\n      $rootScope.$on(\"receipt:updated\", function (e, receipt) {\n        sendReceipt(receipt);\n      });\n      $rootScope.$on(\"receipt:change\", function (e, lastChange) {\n        if (windowRef) {\n          windowRef.postMessage({\n            type: \"change\",\n            payload: lastChange.toNumber()\n          }, \"DDD_CUSTOMER_DISPLAY_URL\");\n        }\n      });\n      function messageReceived(ev) {\n        if (ev.data.type == \"ready\" && windowRef) {\n          windowRef.postMessage({\n            type: \"config\",\n            payload: conf\n          }, \"DDD_CUSTOMER_DISPLAY_URL\");\n          sendReceipt(receipt.getReceipt());\n        }\n      }\n      function sendReceipt(receipt) {\n        if (windowRef) {\n          windowRef.postMessage({\n            type: \"receipt\",\n            payload: JSON.parse(JSON.stringify(receipt))\n          }, \"DDD_CUSTOMER_DISPLAY_URL\");\n        }\n      }\n      function loadConfig() {\n        var posConfig = posStorage.get(\"posConfig\");\n        conf = _objectSpread(_objectSpread({}, posConfig.customerDisplay), {}, {\n          noteConfiguration: posConfig.noteConfiguration,\n          language: posConfig.language\n        });\n        messageReceived({\n          data: {\n            type: \"ready\"\n          }\n        });\n      }\n      eventBus.subscribe(eventBus.events.pos.newConfig, $scope, loadConfig);\n    }\n  };\n});\n","\"use strict\";\n\npos.factory(\"customerOrderWidgetService\", function (customerOrderRepository, $q, receipt, articles, posConfig, backend) {\n  var service = {};\n  service.getCustomerOrders = function (searchParams) {\n    return customerOrderRepository.api.getCustomerOrders(searchParams).then(function (response) {\n      return response.data;\n    });\n  };\n  function getArticleData(line) {\n    var d = $q.defer();\n    articles.findArticleById(line.itemNo).then(function (response) {\n      d.resolve(response.data);\n    });\n    return d.promise;\n  }\n  service.GetAdditionalInfo = function (customerOrder) {\n    var d = $q.defer();\n    var promisses = [];\n    customerOrder.customerOrderLines.forEach(function (line) {\n      promisses.push(getArticleData(line));\n    });\n    $q.all(promisses).then(function (data) {\n      customerOrder.customerOrderLines.forEach(function (line) {\n        var article = data.find(function (a) {\n          return a.itemNo == line.itemNo;\n        });\n        if (article) {\n          line.article = article;\n          line.article.disableDiscount = true;\n          line.article.requiredToEnterManualPrice = false;\n          line.article.discountDetails = [];\n          line.article.itemAttributeValues = [];\n          line.article.salesPrice = new Decimal(line.salesPrice);\n          line.article.quantity = line.quantity;\n          line.article.effectiveSalesPrice = new Decimal(line.salesPrice - line.taxAmount);\n          line.article.taxAmount = line.taxAmount;\n          line.article.vat = new Decimal(line.taxAmount / (line.salesPrice - line.taxAmount) * 100);\n          if (posConfig.tenantGeneralPosSettings.enableSerialNumberTracking && article.type == 2) line.article.requiredToScanSerialNumber = true;\n        }\n      });\n      d.resolve(customerOrder);\n    });\n    return d.promise;\n  };\n  service.saveCustomerOrder = function (customerOrder) {\n    return customerOrderRepository.api.saveCustomerOrder(customerOrder).then(function (response) {\n      return response.data;\n    });\n  };\n  service.changeStatusCustomerOrder = function (id, status) {\n    return customerOrderRepository.api.changeStatusCustomerOrder(id, status).then(function (response) {\n      return response.data;\n    });\n  };\n  service.addToReceipt = function (customerOrder) {\n    customerOrder.showModal = false;\n    receipt.addCustomerOrder(customerOrder);\n  };\n  service.printPickList = function (customerOrder) {\n    if (!customerOrder) return;\n    var deviceIndex = backend.defaultDevice;\n    return customerOrderRepository.api.printPickList(deviceIndex, customerOrder, posConfig.printTranslations);\n  };\n  return service;\n});\n","\"use strict\";\n\npos.directive(\"customerorderWidget\", function (customerOrderWidgetService) {\n  return {\n    templateUrl: \"views/widgets/widget-customerorder\",\n    controller: function controller($scope, Widgets) {\n      $scope.widgetsService = Widgets;\n    }\n  };\n});\n","\"use strict\";\n\npos.directive(\"downpayOrderWidget\", function (downpayOrderService, addressHelper, $translate, $state, $location) {\n  return {\n    templateUrl: \"views/widgets/widget-downpay-order\",\n    link: function link(scope) {\n      scope.downpayOrder = {\n        customer: downpayOrderService.loadSelectedCustomer(),\n        billingAddress: null,\n        shipment: null\n      };\n      scope.isBooking = downpayOrderService.isBooking;\n      var i18nYes;\n      var i18nNo;\n      $translate([\"label/yes\", \"label/no\"]).then(function (translations) {\n        i18nYes = translations[\"label/yes\"];\n        i18nNo = translations[\"label/no\"];\n      });\n      scope.$watch(function () {\n        return downpayOrderService.getSelectedCustomer();\n      }, function (customer) {\n        if (customer) {\n          scope.downpayOrder.customer = customer;\n        } else {\n          scope.downpayOrder.customer = null;\n        }\n      });\n      scope.$watch(function () {\n        return downpayOrderService.getShipment();\n      }, function (shipment) {\n        if (shipment) {\n          scope.downpayOrder.shipment = shipment;\n        } else {\n          scope.downpayOrder.shipment = null;\n        }\n      });\n      scope.$watch(function () {\n        return downpayOrderService.getSelectedBillingAddress();\n      }, function (address) {\n        if (address) {\n          scope.downpayOrder.billingAddress = address;\n        } else {\n          scope.downpayOrder.billingAddress = null;\n        }\n      });\n      scope.clearCustomer = function () {\n        scope.downpayOrder.customer = null;\n        scope.downpayOrder.billingAddress = null;\n        scope.downpayOrder.shipping = null;\n        downpayOrderService.clearCustomer();\n      };\n      scope.clearBillingAddress = function () {\n        downpayOrderService.clearBillingAddress();\n        scope.downpayOrder.billingAddress = null;\n      };\n      scope.clearShippingAddress = function () {\n        downpayOrderService.clearShippingAddress();\n        scope.downpayOrder.shipment.address = null;\n        scope.downpayOrder.shipment.store = null;\n      };\n      scope.getAddressString = function (address) {\n        return addressHelper.getAddressString(address);\n      };\n      scope.setTransactionBookingType = function () {\n        downpayOrderService.setTransactionBookingType();\n        scope.isBooking = downpayOrderService.isBooking;\n        if (scope.downpayOrder.customer) {\n          if (scope.downpayOrder.billingAddress) {\n            $state.go(\"root.split.downpayment-shipment\");\n          } else {\n            $state.go(\"root.split.downpayment-selectbillingaddress\");\n          }\n        } else {\n          $location.path(\"widget/mpcustomer\");\n        }\n      };\n      scope.clearTransactionBookingType = function () {\n        downpayOrderService.clearTransactionBookingType();\n        scope.isBooking = downpayOrderService.isBooking;\n        $state.go(\"root.split.pos\");\n      };\n      scope.getBoolText = function (value) {\n        if (value) {\n          return i18nYes;\n        }\n        return i18nNo;\n      };\n    }\n  };\n});\n","\"use strict\";\n\npos.directive(\"dummyWidget\", function (keypadManager, posConfig) {\n  return {\n    templateUrl: \"views/widgets/widget-dummy\",\n    link: function link(scope, ele, attr) {\n      //dummy comment\n    }\n  };\n});\n","\"use strict\";\n\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _regeneratorRuntime() { \"use strict\"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return r; }; var t, r = {}, e = Object.prototype, n = e.hasOwnProperty, o = \"function\" == typeof Symbol ? Symbol : {}, i = o.iterator || \"@@iterator\", a = o.asyncIterator || \"@@asyncIterator\", u = o.toStringTag || \"@@toStringTag\"; function c(t, r, e, n) { return Object.defineProperty(t, r, { value: e, enumerable: !n, configurable: !n, writable: !n }); } try { c({}, \"\"); } catch (t) { c = function c(t, r, e) { return t[r] = e; }; } function h(r, e, n, o) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype); return c(a, \"_invoke\", function (r, e, n) { var o = 1; return function (i, a) { if (3 === o) throw Error(\"Generator is already running\"); if (4 === o) { if (\"throw\" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var u = n.delegate; if (u) { var c = d(u, n); if (c) { if (c === f) continue; return c; } } if (\"next\" === n.method) n.sent = n._sent = n.arg;else if (\"throw\" === n.method) { if (1 === o) throw o = 4, n.arg; n.dispatchException(n.arg); } else \"return\" === n.method && n.abrupt(\"return\", n.arg); o = 3; var h = s(r, e, n); if (\"normal\" === h.type) { if (o = n.done ? 4 : 2, h.arg === f) continue; return { value: h.arg, done: n.done }; } \"throw\" === h.type && (o = 4, n.method = \"throw\", n.arg = h.arg); } }; }(r, n, new Context(o || [])), !0), a; } function s(t, r, e) { try { return { type: \"normal\", arg: t.call(r, e) }; } catch (t) { return { type: \"throw\", arg: t }; } } r.wrap = h; var f = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var l = {}; c(l, i, function () { return this; }); var p = Object.getPrototypeOf, y = p && p(p(x([]))); y && y !== e && n.call(y, i) && (l = y); var v = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(l); function g(t) { [\"next\", \"throw\", \"return\"].forEach(function (r) { c(t, r, function (t) { return this._invoke(r, t); }); }); } function AsyncIterator(t, r) { function e(o, i, a, u) { var c = s(t[o], t, i); if (\"throw\" !== c.type) { var h = c.arg, f = h.value; return f && \"object\" == _typeof(f) && n.call(f, \"__await\") ? r.resolve(f.__await).then(function (t) { e(\"next\", t, a, u); }, function (t) { e(\"throw\", t, a, u); }) : r.resolve(f).then(function (t) { h.value = t, a(h); }, function (t) { return e(\"throw\", t, a, u); }); } u(c.arg); } var o; c(this, \"_invoke\", function (t, n) { function i() { return new r(function (r, o) { e(t, n, r, o); }); } return o = o ? o.then(i, i) : i(); }, !0); } function d(r, e) { var n = e.method, o = r.i[n]; if (o === t) return e.delegate = null, \"throw\" === n && r.i[\"return\"] && (e.method = \"return\", e.arg = t, d(r, e), \"throw\" === e.method) || \"return\" !== n && (e.method = \"throw\", e.arg = new TypeError(\"The iterator does not provide a '\" + n + \"' method\")), f; var i = s(o, r.i, e.arg); if (\"throw\" === i.type) return e.method = \"throw\", e.arg = i.arg, e.delegate = null, f; var a = i.arg; return a ? a.done ? (e[r.r] = a.value, e.next = r.n, \"return\" !== e.method && (e.method = \"next\", e.arg = t), e.delegate = null, f) : a : (e.method = \"throw\", e.arg = new TypeError(\"iterator result is not an object\"), e.delegate = null, f); } function w(t) { this.tryEntries.push(t); } function m(r) { var e = r[4] || {}; e.type = \"normal\", e.arg = t, r[4] = e; } function Context(t) { this.tryEntries = [[-1]], t.forEach(w, this), this.reset(!0); } function x(r) { if (null != r) { var e = r[i]; if (e) return e.call(r); if (\"function\" == typeof r.next) return r; if (!isNaN(r.length)) { var o = -1, a = function e() { for (; ++o < r.length;) if (n.call(r, o)) return e.value = r[o], e.done = !1, e; return e.value = t, e.done = !0, e; }; return a.next = a; } } throw new TypeError(_typeof(r) + \" is not iterable\"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, c(v, \"constructor\", GeneratorFunctionPrototype), c(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction), GeneratorFunction.displayName = c(GeneratorFunctionPrototype, u, \"GeneratorFunction\"), r.isGeneratorFunction = function (t) { var r = \"function\" == typeof t && t.constructor; return !!r && (r === GeneratorFunction || \"GeneratorFunction\" === (r.displayName || r.name)); }, r.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, c(t, u, \"GeneratorFunction\")), t.prototype = Object.create(v), t; }, r.awrap = function (t) { return { __await: t }; }, g(AsyncIterator.prototype), c(AsyncIterator.prototype, a, function () { return this; }), r.AsyncIterator = AsyncIterator, r.async = function (t, e, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(h(t, e, n, o), i); return r.isGeneratorFunction(e) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, g(v), c(v, u, \"Generator\"), c(v, i, function () { return this; }), c(v, \"toString\", function () { return \"[object Generator]\"; }), r.keys = function (t) { var r = Object(t), e = []; for (var n in r) e.unshift(n); return function t() { for (; e.length;) if ((n = e.pop()) in r) return t.value = n, t.done = !1, t; return t.done = !0, t; }; }, r.values = x, Context.prototype = { constructor: Context, reset: function reset(r) { if (this.prev = this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = \"next\", this.arg = t, this.tryEntries.forEach(m), !r) for (var e in this) \"t\" === e.charAt(0) && n.call(this, e) && !isNaN(+e.slice(1)) && (this[e] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0][4]; if (\"throw\" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(r) { if (this.done) throw r; var e = this; function n(t) { a.type = \"throw\", a.arg = r, e.next = t; } for (var o = e.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i[4], u = this.prev, c = i[1], h = i[2]; if (-1 === i[0]) return n(\"end\"), !1; if (!c && !h) throw Error(\"try statement without catch or finally\"); if (null != i[0] && i[0] <= u) { if (u < c) return this.method = \"next\", this.arg = t, n(c), !0; if (u < h) return n(h), !1; } } }, abrupt: function abrupt(t, r) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var n = this.tryEntries[e]; if (n[0] > -1 && n[0] <= this.prev && this.prev < n[2]) { var o = n; break; } } o && (\"break\" === t || \"continue\" === t) && o[0] <= r && r <= o[2] && (o = null); var i = o ? o[4] : {}; return i.type = t, i.arg = r, o ? (this.method = \"next\", this.next = o[2], f) : this.complete(i); }, complete: function complete(t, r) { if (\"throw\" === t.type) throw t.arg; return \"break\" === t.type || \"continue\" === t.type ? this.next = t.arg : \"return\" === t.type ? (this.rval = this.arg = t.arg, this.method = \"return\", this.next = \"end\") : \"normal\" === t.type && r && (this.next = r), f; }, finish: function finish(t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[2] === t) return this.complete(e[4], e[3]), m(e), f; } }, \"catch\": function _catch(t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[0] === t) { var n = e[4]; if (\"throw\" === n.type) { var o = n.arg; m(e); } return o; } } throw Error(\"illegal catch attempt\"); }, delegateYield: function delegateYield(r, e, n) { return this.delegate = { i: x(r), r: e, n: n }, \"next\" === this.method && (this.arg = t), f; } }, r; }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"next\", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"throw\", n); } _next(void 0); }); }; }\npos.factory(\"findCustomerService\", function (customerRepository, notification, $translate, $injector, addressHelper, eventBus, posConfig, inputValidationService) {\n  var service = {};\n  var i18nCustomerNotFound, i18nErrorCustomerInsert, i18nCustomerUpdated, i18nErrorCustomerUpdate, i18nCustomerInserted, i18nCustomerNoUsed;\n  var i18nPhoneNumberValidationError, i18nMobileNumberValidationError;\n  var oldPhoneNumber, oldMobileNumber;\n  init();\n  service.addLeadingPlus = function (phoneNumber) {\n    if (phoneNumber && phoneNumber[0] != \"+\") return \"+\" + phoneNumber;\n    return phoneNumber;\n  };\n  service.selectedCustomer = false;\n  service.selectedShippingAddress = null;\n  service.getSelectedCustomer = function () {\n    return service.selectedCustomer;\n  };\n  service.setSelectedCustomer = function (customer) {\n    service.selectedCustomer = customer;\n    this.oldMobileNumber = service.selectedCustomer.mobilePhone;\n    this.oldPhoneNumber = service.selectedCustomer.phone;\n    if (!!customer.companyId) {\n      service.setCompany(customer.companyId);\n    }\n    eventBus.notifyAsync(eventBus.events.customer.selected, customer);\n  };\n  service.removeSelectedCustomer = function () {\n    service.selectedCustomer = false;\n    service.selectedShippingAddress = null;\n    service.setChargeToCompany(false);\n    service.company = null;\n    oldPhoneNumber = \"\";\n    oldMobileNumber = \"\";\n  };\n  service.setSelectedShippingAddress = function (address) {\n    service.selectedShippingAddress = address;\n  };\n  service.getSelectedShippingAddress = function () {\n    return service.selectedShippingAddress;\n  };\n  service.getSelectedShippingAddressString = function () {\n    return addressHelper.getAddressString(service.selectedShippingAddress);\n  };\n  service.setCompany = function (companyId) {\n    return customerRepository.api.getCompany(companyId).then(function (response) {\n      service.company = response.data;\n    });\n  };\n  service.setChargeToCompany = function (chargeToCompany) {\n    var receipt = $injector.get(\"receipt\");\n    receipt.getReceipt().chargeCompany = chargeToCompany;\n  };\n  service.getChargeToCompany = function () {\n    var receipt = $injector.get(\"receipt\");\n    return receipt.getReceipt().chargeCompany;\n  };\n  service.getCustomerByNumber = function (customerNumber) {\n    return customerRepository.api.getCustomer(customerNumber).then(function (response) {\n      return response.data;\n    })[\"catch\"](function (errorResponse) {\n      notification.pop(\"error\", i18nCustomerNotFound);\n      return false;\n    });\n  };\n  service.searchForCustomer = function (searchParams, after, recordCount) {\n    var firstName = !searchParams.firstName ? \"\" : searchParams.firstName.value;\n    var lastName = !searchParams.lastName ? \"\" : searchParams.lastName.value;\n    var email = !searchParams.email ? \"\" : searchParams.email.value;\n    var customerNumber = !searchParams.customerNo ? \"\" : searchParams.customerNo.value;\n    var phone = !searchParams.phone ? \"\" : searchParams.phone.value;\n    var zipCode = !searchParams.zipCode ? \"\" : searchParams.zipCode.value;\n    var membership = !searchParams.membership ? \"\" : searchParams.membership.value;\n    return customerRepository.api.searchForCustomer(firstName, lastName, email, customerNumber, phone, zipCode, membership, after, recordCount).then(function (response) {\n      return response.data;\n    })[\"catch\"](function () {\n      notification.pop(\"error\", i18nCustomerNotFound);\n      return false;\n    });\n  };\n  service.canUpdate = function (customer) {\n    if (!posConfig.getPhoneNumberValidationEnabled()) return true;\n    customer.phone = service.addLeadingPlus(customer.phone);\n    customer.mobilePhone = service.addLeadingPlus(customer.mobilePhone);\n    if (!inputValidationService.validateNewPhoneNumber(this.oldPhoneNumber, customer.phone)) {\n      notification.pop(\"error\", i18nPhoneNumberValidationError);\n      return false;\n    }\n    if (!inputValidationService.validateNewPhoneNumber(this.oldMobileNumber, customer.mobilePhone)) {\n      notification.pop(\"error\", i18nMobileNumberValidationError);\n      return false;\n    }\n    return true;\n  };\n  service.addUpdateCustomer = function (customer) {\n    if (typeof customer.id !== \"undefined\") {\n      return customerRepository.api.updateCustomer(customer).then(function (response) {\n        notification.pop(\"info\", i18nCustomerUpdated);\n        return response.data;\n      })[\"catch\"](function () {\n        notification.pop(\"error\", i18nErrorCustomerUpdate);\n        return false;\n      });\n    } else {\n      return customerRepository.api.addCustomer(customer).then(function (response) {\n        notification.pop(\"info\", i18nCustomerInserted);\n        return response.data;\n      })[\"catch\"](function (response) {\n        notification.pop(\"error\", response.status == 409 ? i18nCustomerNoUsed : i18nErrorCustomerInsert);\n        return false;\n      });\n    }\n  };\n  function addLoyaltyPoints(_x) {\n    return _addLoyaltyPoints.apply(this, arguments);\n  }\n  function _addLoyaltyPoints() {\n    _addLoyaltyPoints = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee(receipt) {\n      var response;\n      return _regeneratorRuntime().wrap(function _callee$(_context) {\n        while (1) switch (_context.prev = _context.next) {\n          case 0:\n            if (!(receipt.customerNumber && receipt.customerNumber != \"0\" && posConfig.noteConfiguration.showLoyalty)) {\n              _context.next = 11;\n              break;\n            }\n            _context.prev = 1;\n            _context.next = 4;\n            return customerRepository.api.getCalculatedLoyaltyPoints(receipt);\n          case 4:\n            response = _context.sent;\n            receipt.earnedLoyaltyPoints = response.data.loyaltyPointsEarned;\n            receipt.loyaltyPointsAvailable = response.data.loyaltyPointsAvailable;\n            _context.next = 11;\n            break;\n          case 9:\n            _context.prev = 9;\n            _context.t0 = _context[\"catch\"](1);\n          case 11:\n            return _context.abrupt(\"return\", true);\n          case 12:\n          case \"end\":\n            return _context.stop();\n        }\n      }, _callee, null, [[1, 9]]);\n    }));\n    return _addLoyaltyPoints.apply(this, arguments);\n  }\n  function init() {\n    $translate([\"toast/customer_not_found\", \"toast/customer_updated\", \"toast/customer_inserted\", \"toast/customer_update_error\", \"toast/customer_insert_error\", \"toast/customer_id_used\", \"toast/phone_not_e164_format\", \"toast/mobile_not_e164_format\"]).then(function (translations) {\n      i18nCustomerNotFound = translations[\"toast/customer_not_found\"];\n      i18nCustomerUpdated = translations[\"toast/customer_updated\"];\n      i18nCustomerInserted = translations[\"toast/customer_inserted\"];\n      i18nErrorCustomerUpdate = translations[\"toast/customer_update_error\"];\n      i18nErrorCustomerInsert = translations[\"toast/customer_insert_error\"];\n      i18nCustomerNoUsed = translations[\"toast/customer_id_used\"];\n      i18nPhoneNumberValidationError = translations[\"toast/phone_not_e164_format\"];\n      i18nMobileNumberValidationError = translations[\"toast/mobile_not_e164_format\"];\n    });\n    eventBus.subscribeAsync(eventBus.events.sale.completingOnDevice, null, function (receipt) {\n      return addLoyaltyPoints(receipt);\n    });\n  }\n  return service;\n});\n","\"use strict\";\n\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _regeneratorRuntime() { \"use strict\"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return r; }; var t, r = {}, e = Object.prototype, n = e.hasOwnProperty, o = \"function\" == typeof Symbol ? Symbol : {}, i = o.iterator || \"@@iterator\", a = o.asyncIterator || \"@@asyncIterator\", u = o.toStringTag || \"@@toStringTag\"; function c(t, r, e, n) { return Object.defineProperty(t, r, { value: e, enumerable: !n, configurable: !n, writable: !n }); } try { c({}, \"\"); } catch (t) { c = function c(t, r, e) { return t[r] = e; }; } function h(r, e, n, o) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype); return c(a, \"_invoke\", function (r, e, n) { var o = 1; return function (i, a) { if (3 === o) throw Error(\"Generator is already running\"); if (4 === o) { if (\"throw\" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var u = n.delegate; if (u) { var c = d(u, n); if (c) { if (c === f) continue; return c; } } if (\"next\" === n.method) n.sent = n._sent = n.arg;else if (\"throw\" === n.method) { if (1 === o) throw o = 4, n.arg; n.dispatchException(n.arg); } else \"return\" === n.method && n.abrupt(\"return\", n.arg); o = 3; var h = s(r, e, n); if (\"normal\" === h.type) { if (o = n.done ? 4 : 2, h.arg === f) continue; return { value: h.arg, done: n.done }; } \"throw\" === h.type && (o = 4, n.method = \"throw\", n.arg = h.arg); } }; }(r, n, new Context(o || [])), !0), a; } function s(t, r, e) { try { return { type: \"normal\", arg: t.call(r, e) }; } catch (t) { return { type: \"throw\", arg: t }; } } r.wrap = h; var f = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var l = {}; c(l, i, function () { return this; }); var p = Object.getPrototypeOf, y = p && p(p(x([]))); y && y !== e && n.call(y, i) && (l = y); var v = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(l); function g(t) { [\"next\", \"throw\", \"return\"].forEach(function (r) { c(t, r, function (t) { return this._invoke(r, t); }); }); } function AsyncIterator(t, r) { function e(o, i, a, u) { var c = s(t[o], t, i); if (\"throw\" !== c.type) { var h = c.arg, f = h.value; return f && \"object\" == _typeof(f) && n.call(f, \"__await\") ? r.resolve(f.__await).then(function (t) { e(\"next\", t, a, u); }, function (t) { e(\"throw\", t, a, u); }) : r.resolve(f).then(function (t) { h.value = t, a(h); }, function (t) { return e(\"throw\", t, a, u); }); } u(c.arg); } var o; c(this, \"_invoke\", function (t, n) { function i() { return new r(function (r, o) { e(t, n, r, o); }); } return o = o ? o.then(i, i) : i(); }, !0); } function d(r, e) { var n = e.method, o = r.i[n]; if (o === t) return e.delegate = null, \"throw\" === n && r.i[\"return\"] && (e.method = \"return\", e.arg = t, d(r, e), \"throw\" === e.method) || \"return\" !== n && (e.method = \"throw\", e.arg = new TypeError(\"The iterator does not provide a '\" + n + \"' method\")), f; var i = s(o, r.i, e.arg); if (\"throw\" === i.type) return e.method = \"throw\", e.arg = i.arg, e.delegate = null, f; var a = i.arg; return a ? a.done ? (e[r.r] = a.value, e.next = r.n, \"return\" !== e.method && (e.method = \"next\", e.arg = t), e.delegate = null, f) : a : (e.method = \"throw\", e.arg = new TypeError(\"iterator result is not an object\"), e.delegate = null, f); } function w(t) { this.tryEntries.push(t); } function m(r) { var e = r[4] || {}; e.type = \"normal\", e.arg = t, r[4] = e; } function Context(t) { this.tryEntries = [[-1]], t.forEach(w, this), this.reset(!0); } function x(r) { if (null != r) { var e = r[i]; if (e) return e.call(r); if (\"function\" == typeof r.next) return r; if (!isNaN(r.length)) { var o = -1, a = function e() { for (; ++o < r.length;) if (n.call(r, o)) return e.value = r[o], e.done = !1, e; return e.value = t, e.done = !0, e; }; return a.next = a; } } throw new TypeError(_typeof(r) + \" is not iterable\"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, c(v, \"constructor\", GeneratorFunctionPrototype), c(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction), GeneratorFunction.displayName = c(GeneratorFunctionPrototype, u, \"GeneratorFunction\"), r.isGeneratorFunction = function (t) { var r = \"function\" == typeof t && t.constructor; return !!r && (r === GeneratorFunction || \"GeneratorFunction\" === (r.displayName || r.name)); }, r.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, c(t, u, \"GeneratorFunction\")), t.prototype = Object.create(v), t; }, r.awrap = function (t) { return { __await: t }; }, g(AsyncIterator.prototype), c(AsyncIterator.prototype, a, function () { return this; }), r.AsyncIterator = AsyncIterator, r.async = function (t, e, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(h(t, e, n, o), i); return r.isGeneratorFunction(e) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, g(v), c(v, u, \"Generator\"), c(v, i, function () { return this; }), c(v, \"toString\", function () { return \"[object Generator]\"; }), r.keys = function (t) { var r = Object(t), e = []; for (var n in r) e.unshift(n); return function t() { for (; e.length;) if ((n = e.pop()) in r) return t.value = n, t.done = !1, t; return t.done = !0, t; }; }, r.values = x, Context.prototype = { constructor: Context, reset: function reset(r) { if (this.prev = this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = \"next\", this.arg = t, this.tryEntries.forEach(m), !r) for (var e in this) \"t\" === e.charAt(0) && n.call(this, e) && !isNaN(+e.slice(1)) && (this[e] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0][4]; if (\"throw\" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(r) { if (this.done) throw r; var e = this; function n(t) { a.type = \"throw\", a.arg = r, e.next = t; } for (var o = e.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i[4], u = this.prev, c = i[1], h = i[2]; if (-1 === i[0]) return n(\"end\"), !1; if (!c && !h) throw Error(\"try statement without catch or finally\"); if (null != i[0] && i[0] <= u) { if (u < c) return this.method = \"next\", this.arg = t, n(c), !0; if (u < h) return n(h), !1; } } }, abrupt: function abrupt(t, r) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var n = this.tryEntries[e]; if (n[0] > -1 && n[0] <= this.prev && this.prev < n[2]) { var o = n; break; } } o && (\"break\" === t || \"continue\" === t) && o[0] <= r && r <= o[2] && (o = null); var i = o ? o[4] : {}; return i.type = t, i.arg = r, o ? (this.method = \"next\", this.next = o[2], f) : this.complete(i); }, complete: function complete(t, r) { if (\"throw\" === t.type) throw t.arg; return \"break\" === t.type || \"continue\" === t.type ? this.next = t.arg : \"return\" === t.type ? (this.rval = this.arg = t.arg, this.method = \"return\", this.next = \"end\") : \"normal\" === t.type && r && (this.next = r), f; }, finish: function finish(t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[2] === t) return this.complete(e[4], e[3]), m(e), f; } }, \"catch\": function _catch(t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[0] === t) { var n = e[4]; if (\"throw\" === n.type) { var o = n.arg; m(e); } return o; } } throw Error(\"illegal catch attempt\"); }, delegateYield: function delegateYield(r, e, n) { return this.delegate = { i: x(r), r: e, n: n }, \"next\" === this.method && (this.arg = t), f; } }, r; }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"next\", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"throw\", n); } _next(void 0); }); }; }\npos.directive(\"findCustomerWidget\", function (findCustomerService, notification, receipt, $translate, $rootScope, eventBus, $state, posConfig, coreLoyaltyService) {\n  return {\n    templateUrl: \"views/widgets/widget-find-customer\",\n    link: function link(scope, ele, attr) {\n      scope.customer = null;\n      scope.customerNumber = \"\";\n      scope.customerSelected = false;\n      scope.loading = false;\n      scope.dropdownExpanded = false;\n      scope.chargeToDropdownExpanded = false;\n      scope.chargeToCompany = findCustomerService.getChargeToCompany();\n      scope.showChargeTo = false;\n      scope.billingAddress = null;\n      scope.selectedShippingAddress = null;\n      var i18nCustomerNumberEmpty;\n      $translate([\"toast/customer_number_empty\"]).then(function (translations) {\n        i18nCustomerNumberEmpty = translations[\"toast/customer_number_empty\"];\n      });\n\n      // Detaches the customer from the receipt and cleans the selected customer cache.\n      // This is needed after a sale has been completed/cancelled and a new sale gets started.\n      scope.$watch(function () {\n        return receipt.getLoyaltyCustomerNumber();\n      }, function (customerNumber) {\n        if (!customerNumber) {\n          findCustomerService.removeSelectedCustomer();\n          scope.customerSelected = false;\n          scope.customer = null;\n        }\n      });\n      scope.$watch(function () {\n        return findCustomerService.getSelectedCustomer();\n      }, function (customer, oldVal) {\n        if (customer) {\n          scope.customer = customer;\n          scope.customerSelected = true;\n          scope.selectCustomer();\n        } else {\n          scope.customer = null;\n          scope.customerSelected = false;\n        }\n      });\n      scope.$watch(function () {\n        return findCustomerService.getChargeToCompany();\n      }, function (val) {\n        scope.chargeToCompany = val;\n      });\n      scope.$watch(\"selectedShippingAddress\", function (address) {\n        findCustomerService.setSelectedShippingAddress(address);\n      });\n      scope.findCustomer = /*#__PURE__*/function () {\n        var _ref = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee(customerNumber) {\n          return _regeneratorRuntime().wrap(function _callee$(_context) {\n            while (1) switch (_context.prev = _context.next) {\n              case 0:\n                if (!(customerNumber.length < 1)) {\n                  _context.next = 3;\n                  break;\n                }\n                notification.pop(\"warning\", i18nCustomerNumberEmpty);\n                return _context.abrupt(\"return\", false);\n              case 3:\n                scope.loading = true;\n                findCustomerService.getCustomerByNumber(customerNumber).then(function (customer) {\n                  scope.loading = false;\n                  scope.customer = customer;\n                  scope.selectCustomer();\n                  eventBus.notifyAsync(eventBus.events.customer.afterSelect);\n                });\n              case 5:\n              case \"end\":\n                return _context.stop();\n            }\n          }, _callee);\n        }));\n        return function (_x) {\n          return _ref.apply(this, arguments);\n        };\n      }();\n      scope.cancelCustomerLookup = function () {\n        scope.customer = null;\n      };\n      scope.selectCustomer = function () {\n        if (!scope.customer) return;\n        if ($rootScope.selectedCustomer !== scope.customer) {\n          $rootScope.selectedCustomer = scope.customer;\n          $rootScope.selectedShippingAddress = null;\n          scope.billingAddress = null;\n          scope.customerSelected = true;\n          if (scope.customer.addresses && scope.customer.addresses.length > 0) {\n            scope.billingAddress = scope.customer.addresses.find(function (i) {\n              return i.isPrimaryBilling;\n            }) || scope.customer.addresses[0];\n            scope.selectedShippingAddress = scope.customer.addresses.find(function (i) {\n              return i.isPrimaryShipping;\n            }) || scope.customer.addresses[0];\n          }\n          findCustomerService.setSelectedCustomer(scope.customer);\n          coreLoyaltyService.attachCustomer(scope.customer);\n          receipt.attachCustomer(scope.customer.externalUniqueId, scope.customer.emailAddress);\n          scope.showChargeTo = scope.customer.companyId && !isNaN(scope.customer.companyId);\n        } else {\n          if ($rootScope.selectedShippingAddress) {\n            scope.selectedShippingAddress = $rootScope.selectedShippingAddress;\n          }\n        }\n      };\n      scope.deselectCustomer = function () {\n        findCustomerService.removeSelectedCustomer();\n        $rootScope.selectedCustomer = false;\n        scope.customerSelected = false;\n        scope.customer = null;\n        scope.billingAddress = \"\";\n        receipt.detachCustomer();\n        coreLoyaltyService.detachCustomer();\n        $state.go(\"root.split.pos\");\n      };\n      scope.toggleDropdown = function () {\n        scope.dropdownExpanded = !scope.dropdownExpanded;\n      };\n      scope.toggleChargeToDropdown = function () {\n        scope.chargeToDropdownExpanded = !scope.chargeToDropdownExpanded;\n      };\n      scope.setChargeToCompany = function (chargeToCompany) {\n        findCustomerService.setChargeToCompany(chargeToCompany);\n        scope.chargeToDropdownExpanded = false;\n      };\n      scope.selectShippingAddress = /*#__PURE__*/function () {\n        var _ref2 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee2(address) {\n          return _regeneratorRuntime().wrap(function _callee2$(_context2) {\n            while (1) switch (_context2.prev = _context2.next) {\n              case 0:\n                $rootScope.selectedShippingAddress = address;\n                scope.selectedShippingAddress = address;\n                scope.dropdownExpanded = false;\n              case 3:\n              case \"end\":\n                return _context2.stop();\n            }\n          }, _callee2);\n        }));\n        return function (_x2) {\n          return _ref2.apply(this, arguments);\n        };\n      }();\n      scope.addNewShippingAddress = function () {\n        scope.dropdownExpanded = false;\n      };\n      scope.getLoyaltyString = function (points) {\n        var ratio = scope.loyalty.ratios.find(function (r) {\n          return r.currencyCode == scope.localCurrency;\n        });\n        points = points || 0;\n        if (ratio) {\n          var pointsInCurrency = points * ratio.ratioPointToCurrency;\n          return \"\".concat(points, \"pt / \").concat(pointsInCurrency.toFixed(2), \" \").concat(ratio.currencyCode);\n        } else {\n          return \"\".concat(points, \"pt\");\n        }\n      };\n      function loadConfig() {\n        scope.loyalty = posConfig.getLoyaltyConfiguration();\n        scope.localCurrency = posConfig.getLocalCurrency().name;\n      }\n      eventBus.subscribe(eventBus.events.customer.updated, scope, function () {\n        return scope.findCustomer(scope.customer.externalUniqueId);\n      });\n      eventBus.subscribe(eventBus.events.sale.completed, scope, function () {\n        return scope.deselectCustomer();\n      });\n      eventBus.subscribe(eventBus.events.pos.newConfig, scope, function () {\n        return loadConfig();\n      });\n      eventBus.subscribe(eventBus.events.customer.attach, scope, function (ev, customer) {\n        if (scope.customer != customer) {\n          scope.customer = customer;\n          scope.selectCustomer();\n          scope.loading = false;\n        }\n      });\n      loadConfig();\n    }\n  };\n});\n","\"use strict\";\n\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _regeneratorRuntime() { \"use strict\"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return r; }; var t, r = {}, e = Object.prototype, n = e.hasOwnProperty, o = \"function\" == typeof Symbol ? Symbol : {}, i = o.iterator || \"@@iterator\", a = o.asyncIterator || \"@@asyncIterator\", u = o.toStringTag || \"@@toStringTag\"; function c(t, r, e, n) { return Object.defineProperty(t, r, { value: e, enumerable: !n, configurable: !n, writable: !n }); } try { c({}, \"\"); } catch (t) { c = function c(t, r, e) { return t[r] = e; }; } function h(r, e, n, o) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype); return c(a, \"_invoke\", function (r, e, n) { var o = 1; return function (i, a) { if (3 === o) throw Error(\"Generator is already running\"); if (4 === o) { if (\"throw\" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var u = n.delegate; if (u) { var c = d(u, n); if (c) { if (c === f) continue; return c; } } if (\"next\" === n.method) n.sent = n._sent = n.arg;else if (\"throw\" === n.method) { if (1 === o) throw o = 4, n.arg; n.dispatchException(n.arg); } else \"return\" === n.method && n.abrupt(\"return\", n.arg); o = 3; var h = s(r, e, n); if (\"normal\" === h.type) { if (o = n.done ? 4 : 2, h.arg === f) continue; return { value: h.arg, done: n.done }; } \"throw\" === h.type && (o = 4, n.method = \"throw\", n.arg = h.arg); } }; }(r, n, new Context(o || [])), !0), a; } function s(t, r, e) { try { return { type: \"normal\", arg: t.call(r, e) }; } catch (t) { return { type: \"throw\", arg: t }; } } r.wrap = h; var f = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var l = {}; c(l, i, function () { return this; }); var p = Object.getPrototypeOf, y = p && p(p(x([]))); y && y !== e && n.call(y, i) && (l = y); var v = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(l); function g(t) { [\"next\", \"throw\", \"return\"].forEach(function (r) { c(t, r, function (t) { return this._invoke(r, t); }); }); } function AsyncIterator(t, r) { function e(o, i, a, u) { var c = s(t[o], t, i); if (\"throw\" !== c.type) { var h = c.arg, f = h.value; return f && \"object\" == _typeof(f) && n.call(f, \"__await\") ? r.resolve(f.__await).then(function (t) { e(\"next\", t, a, u); }, function (t) { e(\"throw\", t, a, u); }) : r.resolve(f).then(function (t) { h.value = t, a(h); }, function (t) { return e(\"throw\", t, a, u); }); } u(c.arg); } var o; c(this, \"_invoke\", function (t, n) { function i() { return new r(function (r, o) { e(t, n, r, o); }); } return o = o ? o.then(i, i) : i(); }, !0); } function d(r, e) { var n = e.method, o = r.i[n]; if (o === t) return e.delegate = null, \"throw\" === n && r.i[\"return\"] && (e.method = \"return\", e.arg = t, d(r, e), \"throw\" === e.method) || \"return\" !== n && (e.method = \"throw\", e.arg = new TypeError(\"The iterator does not provide a '\" + n + \"' method\")), f; var i = s(o, r.i, e.arg); if (\"throw\" === i.type) return e.method = \"throw\", e.arg = i.arg, e.delegate = null, f; var a = i.arg; return a ? a.done ? (e[r.r] = a.value, e.next = r.n, \"return\" !== e.method && (e.method = \"next\", e.arg = t), e.delegate = null, f) : a : (e.method = \"throw\", e.arg = new TypeError(\"iterator result is not an object\"), e.delegate = null, f); } function w(t) { this.tryEntries.push(t); } function m(r) { var e = r[4] || {}; e.type = \"normal\", e.arg = t, r[4] = e; } function Context(t) { this.tryEntries = [[-1]], t.forEach(w, this), this.reset(!0); } function x(r) { if (null != r) { var e = r[i]; if (e) return e.call(r); if (\"function\" == typeof r.next) return r; if (!isNaN(r.length)) { var o = -1, a = function e() { for (; ++o < r.length;) if (n.call(r, o)) return e.value = r[o], e.done = !1, e; return e.value = t, e.done = !0, e; }; return a.next = a; } } throw new TypeError(_typeof(r) + \" is not iterable\"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, c(v, \"constructor\", GeneratorFunctionPrototype), c(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction), GeneratorFunction.displayName = c(GeneratorFunctionPrototype, u, \"GeneratorFunction\"), r.isGeneratorFunction = function (t) { var r = \"function\" == typeof t && t.constructor; return !!r && (r === GeneratorFunction || \"GeneratorFunction\" === (r.displayName || r.name)); }, r.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, c(t, u, \"GeneratorFunction\")), t.prototype = Object.create(v), t; }, r.awrap = function (t) { return { __await: t }; }, g(AsyncIterator.prototype), c(AsyncIterator.prototype, a, function () { return this; }), r.AsyncIterator = AsyncIterator, r.async = function (t, e, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(h(t, e, n, o), i); return r.isGeneratorFunction(e) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, g(v), c(v, u, \"Generator\"), c(v, i, function () { return this; }), c(v, \"toString\", function () { return \"[object Generator]\"; }), r.keys = function (t) { var r = Object(t), e = []; for (var n in r) e.unshift(n); return function t() { for (; e.length;) if ((n = e.pop()) in r) return t.value = n, t.done = !1, t; return t.done = !0, t; }; }, r.values = x, Context.prototype = { constructor: Context, reset: function reset(r) { if (this.prev = this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = \"next\", this.arg = t, this.tryEntries.forEach(m), !r) for (var e in this) \"t\" === e.charAt(0) && n.call(this, e) && !isNaN(+e.slice(1)) && (this[e] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0][4]; if (\"throw\" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(r) { if (this.done) throw r; var e = this; function n(t) { a.type = \"throw\", a.arg = r, e.next = t; } for (var o = e.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i[4], u = this.prev, c = i[1], h = i[2]; if (-1 === i[0]) return n(\"end\"), !1; if (!c && !h) throw Error(\"try statement without catch or finally\"); if (null != i[0] && i[0] <= u) { if (u < c) return this.method = \"next\", this.arg = t, n(c), !0; if (u < h) return n(h), !1; } } }, abrupt: function abrupt(t, r) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var n = this.tryEntries[e]; if (n[0] > -1 && n[0] <= this.prev && this.prev < n[2]) { var o = n; break; } } o && (\"break\" === t || \"continue\" === t) && o[0] <= r && r <= o[2] && (o = null); var i = o ? o[4] : {}; return i.type = t, i.arg = r, o ? (this.method = \"next\", this.next = o[2], f) : this.complete(i); }, complete: function complete(t, r) { if (\"throw\" === t.type) throw t.arg; return \"break\" === t.type || \"continue\" === t.type ? this.next = t.arg : \"return\" === t.type ? (this.rval = this.arg = t.arg, this.method = \"return\", this.next = \"end\") : \"normal\" === t.type && r && (this.next = r), f; }, finish: function finish(t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[2] === t) return this.complete(e[4], e[3]), m(e), f; } }, \"catch\": function _catch(t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[0] === t) { var n = e[4]; if (\"throw\" === n.type) { var o = n.arg; m(e); } return o; } } throw Error(\"illegal catch attempt\"); }, delegateYield: function delegateYield(r, e, n) { return this.delegate = { i: x(r), r: e, n: n }, \"next\" === this.method && (this.arg = t), f; } }, r; }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"next\", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"throw\", n); } _next(void 0); }); }; }\npos.factory(\"insuranceService\", function (insuranceRepository, $rootScope, receipt, posConfig, receiptHelper, $http, $translate, $q, notification, canInsureReturnEnum, indexdb, eventBus) {\n  var service = {};\n  var shopFeatures = null;\n  var solidConfig = null;\n  var priceList = null;\n  var customerCache = {};\n  var i18nSellInsuranceNotification, i18nSolidConfigMissingNotification;\n  loadConfig();\n  $translate([\"widget/insurance/info/sellinsurancenotification\", \"widget/insurance/error/solidconfigmissingnotification\"]).then(function (translations) {\n    i18nSellInsuranceNotification = translations[\"widget/insurance/info/sellinsurancenotification\"];\n    i18nSolidConfigMissingNotification = translations[\"widget/insurance/error/solidconfigmissingnotification\"];\n    setupInsurance();\n  });\n  service.getInsurance = /*#__PURE__*/function () {\n    var _ref = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee(customer) {\n      var errorTexts, currentReceipt, selectedItemLineIndex, itemInformation, insuranceInformation, premium, response;\n      return _regeneratorRuntime().wrap(function _callee$(_context) {\n        while (1) switch (_context.prev = _context.next) {\n          case 0:\n            _context.next = 2;\n            return $translate([\"widget/insurance/error/customerinformationnotvalid\", \"widget/insurance/error/itemalreadyinsured\"]);\n          case 2:\n            errorTexts = _context.sent;\n            if (validateCustomer(customer)) {\n              _context.next = 5;\n              break;\n            }\n            return _context.abrupt(\"return\", $q.reject(errorTexts[\"widget/insurance/error/customerinformationnotvalid\"]));\n          case 5:\n            if (solidConfig) {\n              _context.next = 7;\n              break;\n            }\n            return _context.abrupt(\"return\");\n          case 7:\n            currentReceipt = receipt.getReceipt();\n            selectedItemLineIndex = receipt.selectedItemLineIndex;\n            _context.next = 11;\n            return getItemInformation(currentReceipt, selectedItemLineIndex);\n          case 11:\n            itemInformation = _context.sent;\n            insuranceInformation = {};\n            premium = service.getPremiumPrice(itemInformation.productPrice);\n            insuranceInformation.ExternalId = currentReceipt.receiptId.toString(); // TODO: Maybe we need to add group and pos id here as well...\n            insuranceInformation.CustomerPersonNumber = customer.PersonNumber;\n            insuranceInformation.CustomerFirstName = customer.FirstName;\n            insuranceInformation.CustomerLastName = customer.LastName;\n            insuranceInformation.CustomerCoAddress = customer.CoAddress;\n            insuranceInformation.CustomerStreetAddress = customer.StreetAddress;\n            insuranceInformation.CustomerBoxAddress = customer.BoxAddress;\n            insuranceInformation.CustomerPostalCode = customer.PostalCode;\n            insuranceInformation.CustomerCity = customer.City;\n            insuranceInformation.CustomerCountry = customer.Country;\n            insuranceInformation.CustomerTelephone = customer.Telephone;\n            insuranceInformation.CustomerEmail = customer.Email;\n            insuranceInformation.ProductBrand = itemInformation.productBrand;\n            insuranceInformation.ProductGroup = itemInformation.productGroup;\n            insuranceInformation.ProductModel = itemInformation.productModel;\n            insuranceInformation.ProductIdNumber = itemInformation.productIdNumber;\n            insuranceInformation.ProductDateOfPurchase = receipt.getReceipt().date;\n            insuranceInformation.ProductPrice = itemInformation.productPrice.round();\n            insuranceInformation.SalesPerson = receipt.getReceipt().clerkName;\n            insuranceInformation.Premium = parseInt(premium);\n            insuranceInformation.PaidPremium = parseInt(premium); // TODO: Check with Ur&Penn if it's free today! 0 = FREE\n            insuranceInformation.RetailerId = solidConfig.retailerId;\n            insuranceInformation.RetailerPassword = solidConfig.retailerPassword;\n            insuranceInformation.InsuranceCompany = solidConfig.insuranceCompany;\n            insuranceInformation.InsuranceProductCode = solidConfig.insuranceProductCode;\n            insuranceInformation.InsurancePeriodMonths = solidConfig.insurancePeriodMonths;\n            insuranceInformation.IsTestMode = solidConfig.testEnvironment;\n            _context.prev = 41;\n            _context.next = 44;\n            return insuranceRepository.api.getInsurance(insuranceInformation);\n          case 44:\n            response = _context.sent;\n            _context.next = 47;\n            return indexdb.insurances.add(response.data);\n          case 47:\n            return _context.abrupt(\"return\", response.data);\n          case 50:\n            _context.prev = 50;\n            _context.t0 = _context[\"catch\"](41);\n            throw new Error(_context.t0.data.error);\n          case 53:\n          case \"end\":\n            return _context.stop();\n        }\n      }, _callee, null, [[41, 50]]);\n    }));\n    return function (_x) {\n      return _ref.apply(this, arguments);\n    };\n  }();\n  $rootScope.$on(\"receipt:article:removing\", function (event, uuid) {\n    var itemBeingRemoved = receipt.getItemById(uuid);\n    if (!itemBeingRemoved || !itemBeingRemoved.insuranceNumber) return;\n    service.cancelInsurance(itemBeingRemoved.insuranceNumber);\n  });\n  $rootScope.$on(\"receipt:article:added\", function (event, uuid) {\n    var addedArticle = receipt.getItemById(uuid);\n    if (addedArticle && service.canBeInsured(addedArticle) === canInsureReturnEnum.yes) {\n      notification.pop(\"info\", i18nSellInsuranceNotification + \" \" + addedArticle.parameter1);\n    }\n  });\n  $rootScope.$on(\"receipt:close\", function (ev, receipt) {\n    service.clearCustomerCache();\n    receipt.items.filter(function (i) {\n      return i.insuranceNumber;\n    }).forEach(function (i) {\n      return indexdb.insurances.remove(i.insuranceNumber);\n    });\n  });\n  $rootScope.$on(\"receipt:clear\", function (ev, receipt) {\n    receipt.items.filter(function (o) {\n      return o.templateType == \"insurance\";\n    }).forEach(function (o) {\n      return service.cancelInsurance(o.insuranceNumber);\n    });\n    service.clearCustomerCache();\n  });\n  $rootScope.$on(\"receipt:new\", /*#__PURE__*/function () {\n    var _ref2 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee2(ev) {\n      var openInsurances;\n      return _regeneratorRuntime().wrap(function _callee2$(_context2) {\n        while (1) switch (_context2.prev = _context2.next) {\n          case 0:\n            _context2.next = 2;\n            return indexdb.insurances.getAll();\n          case 2:\n            openInsurances = _context2.sent;\n            openInsurances.forEach(function (i) {\n              return service.cancelInsurance(i);\n            });\n          case 4:\n          case \"end\":\n            return _context2.stop();\n        }\n      }, _callee2);\n    }));\n    return function (_x2) {\n      return _ref2.apply(this, arguments);\n    };\n  }());\n  service.cancelInsurance = function (insuranceNumber) {\n    if (!solidConfig) {\n      return;\n    }\n    var cancelInsuranceInfo = {\n      InsuranceCompany: solidConfig.insuranceCompany,\n      RetailerId: solidConfig.retailerId,\n      RetailerPassword: solidConfig.retailerPassword,\n      InsuranceNumber: insuranceNumber,\n      IsTestMode: solidConfig.testEnvironment\n    };\n    return insuranceRepository.api.cancelInsurance(cancelInsuranceInfo).then(function (response) {\n      indexdb.insurances.remove(insuranceNumber);\n      var items = receipt.getReceipt().items || [];\n      for (var i = 0; i < receipt.getReceipt().items.length; i++) {\n        var currentItem = items[i];\n        if (currentItem.insuranceNumber === insuranceNumber && currentItem.templateType === \"insurance\") {\n          receipt.removeLine(i);\n        } else if (currentItem.insuranceNumber === insuranceNumber && currentItem.templateType != \"insurance\") {\n          currentItem.insuranceNumber = \"\";\n          currentItem.enteredText = \"\";\n          receipt.persistReceipt();\n        }\n      }\n      return response;\n    });\n  };\n  service.getPremiumPrice = function (itemPrice) {\n    var premium = 0.0;\n    if (itemPrice <= 0 && priceList.length > 0) {\n      premium = priceList[0].premium;\n    }\n    for (var i = 0; i < priceList.length; i++) {\n      if (itemPrice > priceList[i].priceFrom) {\n        premium = priceList[i].premium;\n      } else break;\n    }\n    return premium;\n  };\n  service.getCustomer = /*#__PURE__*/function () {\n    var _ref3 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee3(ssn) {\n      var response;\n      return _regeneratorRuntime().wrap(function _callee3$(_context3) {\n        while (1) switch (_context3.prev = _context3.next) {\n          case 0:\n            if (ssn) {\n              _context3.next = 2;\n              break;\n            }\n            return _context3.abrupt(\"return\");\n          case 2:\n            _context3.next = 4;\n            return insuranceRepository.api.getCustomer(ssn, solidConfig.retailerId, solidConfig.retailerPassword);\n          case 4:\n            response = _context3.sent;\n            return _context3.abrupt(\"return\", response.data);\n          case 6:\n          case \"end\":\n            return _context3.stop();\n        }\n      }, _callee3);\n    }));\n    return function (_x3) {\n      return _ref3.apply(this, arguments);\n    };\n  }();\n  service.cacheCustomer = function (customer) {\n    return customerCache = customer;\n  };\n  service.clearCustomerCache = function () {\n    return customerCache = {\n      Country: shopFeatures.solid.values.defaultCountry\n    };\n  };\n  service.getCachedCustomer = function () {\n    return customerCache;\n  };\n  service.canBeInsured = function (item) {\n    if (item) {\n      if (item.templateType === \"sale\" && item.ean) {\n        if (item.insuranceNumber) {\n          return canInsureReturnEnum.alreadyInsured;\n        } else {\n          return canInsureReturnEnum.yes;\n        }\n      }\n    }\n    return canInsureReturnEnum.no;\n  };\n  function validateCustomer(customer) {\n    return customer.FirstName != null && customer.LastName != null && customer.StreetAddress != null && customer.PostalCode != null && customer.City != null && customer.Country != null && customer.Telephone != null && customer.Email != null;\n  }\n  function getItemInformation(receipt, selectedItemLineIndex) {\n    return $translate(\"widget/insurance/error/itemcannotbeinsured\").then(function (errorText) {\n      var itemInformation = {};\n      var item = receipt.items[selectedItemLineIndex];\n      if (item.ean === undefined) {\n        return $q.reject(errorText);\n      }\n      itemInformation.productBrand = item.parameter6;\n      itemInformation.productGroup = item.itemGroup;\n      itemInformation.productModel = item.parameter2;\n      itemInformation.productIdNumber = item.ean;\n      itemInformation.productPrice = item.effectiveSalesPrice;\n      itemInformation.productDateofPurchase = receipt.date;\n      return $q.resolve(itemInformation);\n    });\n  }\n  function setupInsurance() {\n    if (shopFeatures.solid && shopFeatures.solid.values) {\n      solidConfig = shopFeatures.solid.values;\n      priceList = solidConfig.priceList;\n    } else {\n      notification.pop(\"error\", i18nSolidConfigMissingNotification);\n    }\n  }\n  function loadConfig() {\n    shopFeatures = posConfig.getShopFeatures();\n  }\n  eventBus.subscribe(eventBus.events.pos.newConfig, null, loadConfig);\n  Array.prototype.diff = function (a) {\n    return this.filter(function (i) {\n      return a.indexOf(i) < 0;\n    });\n  };\n  return service;\n});\n","\"use strict\";\n\npos.value(\"canInsureReturnEnum\", Object.freeze({\n  alreadyInsured: -1,\n  no: 0,\n  yes: 1\n}));\n","\"use strict\";\n\npos.directive(\"insuranceWidget\", function (receipt, $rootScope, $state, notification, $translate, insuranceService, canInsureReturnEnum) {\n  return {\n    templateUrl: \"views/widgets/widget-insurancewidget\",\n    controller: function controller($scope, Widgets) {\n      var i18nErrorAlreadyInsured, i18nErrorCannotInsure;\n      $translate([\"widget/insurance/error/itemalreadyinsured\", \"widget/insurance/error/itemcannotbeinsured\", \"widget/insurance/error/cannotinsureinsurance\"]).then(function (translations) {\n        i18nErrorAlreadyInsured = translations[\"widget/insurance/error/itemalreadyinsured\"];\n        i18nErrorCannotInsure = translations[\"widget/insurance/error/itemcannotbeinsured\"];\n      });\n      $scope.widgetsService = Widgets;\n      $scope.hideWidgets = function () {\n        $scope.widgetsService.showWidgets = false;\n        $(\"#center-content.center-content--downscale\").removeClass(\"center-content--downscale\");\n      };\n      $scope.enableButton = function () {\n        return receipt.selectedItemLineIndex < 0;\n      };\n      $scope.open = function () {\n        var re = receipt.getReceipt().items;\n        var selectedItem = re.length >= receipt.selectedItemLineIndex && receipt.selectedItemLineIndex >= 0 ? re[receipt.selectedItemLineIndex] : null;\n        switch (insuranceService.canBeInsured(selectedItem)) {\n          case canInsureReturnEnum.yes:\n            $state.go(\"root.split.widgetpane\", {\n              widgetName: \"mpeditinsurance\"\n            });\n            break;\n          case canInsureReturnEnum.no:\n            notification.pop(\"error\", i18nErrorCannotInsure);\n            break;\n          case canInsureReturnEnum.alreadyInsured:\n            notification.pop(\"error\", i18nErrorAlreadyInsured);\n            break;\n        }\n      };\n    }\n  };\n});\n","\"use strict\";\n\npos.factory(\"kegaService\", function (kegaRepository) {\n  var service = {};\n  service.getWebOrders = function () {\n    return kegaRepository.api.getWebOrders().then(function (response) {\n      response.data.date = new Date(response.data.date);\n      return response.data;\n    });\n  };\n  return service;\n});\n","\"use strict\";\n\npos.directive(\"kegaWidget\", function (kegaService, receipt, $filter, $translate) {\n  return {\n    templateUrl: \"views/widgets/widget-kega\",\n    controller: function controller($scope, Widgets) {\n      $scope.widgetsService = Widgets;\n      $scope.hideWidgets = function () {\n        $scope.widgetsService.showWidgets = false;\n        $(\"#center-content.center-content--downscale\").removeClass(\"center-content--downscale\");\n      };\n    },\n    link: function link(scope, ele, attr) {\n      scope.ordersVisible = false;\n      scope.loadingOrders = false;\n      scope.ordersInitiallyFetched = false;\n      scope.error = false;\n      var i18nWeborderPayment;\n      $translate(\"widget/kega/weborderpayment\").then(function (translation) {\n        i18nWeborderPayment = translation;\n      });\n      scope.toggleOrder = function (order) {\n        scope.activeOrder = scope.activeOrder == order ? null : order;\n      };\n      scope.getWebOrders = function () {\n        // getWebOrders(); ordersVisible = !ordersVisible\n        if (scope.ordersInitiallyFetched) {\n          scope.ordersVisible = false;\n        }\n        scope.loadingOrders = true;\n        scope.getWebOrders();\n      };\n\n      // Fetch available products\n      scope.getWebOrders = function () {\n        if (scope.ordersInitiallyFetched) {\n          //scope.ordersVisible = false;\n        }\n\n        // Indicate loading\n        scope.loadingOrders = true;\n\n        // Fetch products\n        kegaService.getWebOrders().then(function (response) {\n          var ordersQuery = $filter(\"orderBy\")(response, \"-orderNr\");\n          angular.forEach(ordersQuery, function (item) {\n            item.price = new Decimal(item.price);\n          });\n\n          // Check if the new orders are equal to the old\n          if (scope.availableOrders != ordersQuery) {\n            scope.availableOrders = ordersQuery;\n            scope.ordersInitiallyFetched = true;\n          }\n          scope.loadingOrders = false;\n          scope.ordersVisible = true;\n          scope.error = false;\n        }, function (error) {\n          scope.loadingOrders = false;\n          scope.error = error;\n        });\n      };\n\n      // Add order to receipt\n      scope.addToReceipt = function (weborder, index) {\n        receipt.addWebOrder(weborder.price, i18nWeborderPayment, weborder.itemGroup, weborder.vat, weborder.orderNr, true);\n        scope.activeOrder = null;\n\n        // Close widget drawer\n        scope.hideWidgets();\n      };\n      scope.isAddedToReceipt = function (weborder) {\n        var items = receipt.getReceipt().items;\n        for (var i = 0; i < items.length; i++) {\n          var item = items[i];\n          if (item.webOrderNumber === weborder.orderNr) return true;\n        }\n        return false;\n      };\n    }\n  };\n});\n","\"use strict\";\n\npos.directive(\"logoWidget\", function () {\n  return {\n    templateUrl: \"views/widgets/widget-logo\",\n    controller: function controller($scope, posStorage) {\n      $scope.shop = posStorage.get(\"current_shop\");\n    }\n  };\n});\n","\"use strict\";\n\n// Eager load the \"loyaltyService\" \"loyalty\" widget is in the widget list.\n// This also loads all its dependencies as the \"coreLoyaltyService\" and therefore ensures\n// that ALL THE watchers, POS manipulations...  get triggered, even in situations in which\n// the Widget itself is not shown and loaded. Such a situation occurs for example, if the\n// user refreshes (F5) on the \"Payment View\" in which the Widget is not shown, but the\n// logic/watchers of the Loyalty services still needs to run.\npos.run(function (posConfig, $injector, $log, eventBus) {\n  // we need to await that posConfig is ready, then we know the latest config is loaded\n  loadConfig();\n  function loadConfig() {\n    posConfig.whenReady().then(function () {\n      var loyatyWidgetEnabled = _.some(posConfig.getWidgets(), function (widget) {\n        return widget.name === \"loyalty\";\n      });\n      if (loyatyWidgetEnabled) {\n        $log.debug(\"eager loading  DdD Loyalty service\");\n        return $injector.get(\"loyaltyService\");\n      }\n    });\n  }\n  eventBus.subscribe(eventBus.events.pos.newConfig, null, loadConfig);\n});\npos.factory(\"loyaltyService\", function ($rootScope, $q, $translate, loyaltyRepository, coreLoyaltyService, loyaltyStaticDiscountService, receipt, notification) {\n  var service = {};\n  var currentMember = null;\n  var i18nMemberNotFound, i18nMemberLookupError, i18nMixedSalesWarning;\n  translate();\n  function translate() {\n    $translate([\"loyalty/service/toast/memberNotFound\", \"loyalty/service/toast/memberLookupError\", \"loyalty/service/toast/mixedSalesWarning\"]).then(function (translations) {\n      i18nMemberNotFound = translations[\"loyalty/service/toast/memberNotFound\"];\n      i18nMemberLookupError = translations[\"loyalty/service/toast/memberLookupError\"];\n      i18nMixedSalesWarning = translations[\"loyalty/service/toast/mixedSalesWarning\"];\n    });\n  }\n\n  // Detaches the customer from the receipt and cleans the current member cache.\n  // This is needed after a sale has been completed/cancelled and a new sale gets started.\n  $rootScope.$watch(function () {\n    return receipt.getLoyaltyCustomerNumber();\n  }, function (customerNumber) {\n    if (!customerNumber) {\n      service.detachCustomer();\n    }\n  });\n\n  // This handles the change event of \"States\". For ex. when changing to \"Payment State\"\n  $rootScope.$on(\"$stateChangeStart\", function (event, toState) {\n    preventMixedSalesOnLoyalty(event, toState);\n  });\n\n  // This handles event, when \"Translations\" have been loaded.\n  // Needed when the language has changed on runtime (due to Clerk language change for ex).\n  $rootScope.$on(\"$translateChangeSuccess\", function () {\n    translate(); // Update the translations cached in this service.\n  });\n\n  /**\n   * Get the current currentMember. It will return the object cached in the currentMember variable\n   * if it's available. If the variable is undefined (i.e. when the app is refreshed) we will get the customerNumber\n   * from the receipt and try and find the customer from the number and then return that. Resolving the customer\n   * from the customerNumber will also trigger the customer be be \"reattached\" (i.e. starting the payment watcher).\n   * @return {promise} Promise which resolves the currentMember object\n   */\n  service.getLoyaltyCustomer = function () {\n    var attachMemberToReceipt = true;\n    var customerNumber = receipt.getLoyaltyCustomerNumber();\n    if (!customerNumber) return $q.reject();\n    if (currentMember && currentMember.customerNumber === customerNumber) return $q.resolve(currentMember);\n    return service.lookupCustomer(customerNumber, attachMemberToReceipt).then(function (member) {\n      return member;\n    });\n  };\n  service.lookupCustomer = function (customerNumber, attachCustomerToReceipt) {\n    return loyaltyRepository.api.lookupCustomer(customerNumber).then(function (response) {\n      var member = response.data;\n      if (attachCustomerToReceipt) attachCustomer(member);\n      return member;\n    }, function (errorResponse) {\n      if (errorResponse.status === 400) notification.pop(\"warning\", i18nMemberNotFound);else showErrorAndTrack(\"MemberLookupError\", i18nMemberLookupError, errorResponse.data);\n      return $q.reject(errorResponse);\n    });\n  };\n  service.detachCustomer = function () {\n    currentMember = null;\n    coreLoyaltyService.detachCustomer();\n    loyaltyStaticDiscountService.detachCustomer();\n  };\n  service.isStaticDiscountEngineMember = function (member) {\n    return member && member.engineTypeIdentifier === 2;\n  };\n  function attachCustomer(member) {\n    currentMember = member; // Cache member\n    coreLoyaltyService.attachCustomer(member);\n    loyaltyStaticDiscountService.attachCustomer(member);\n  }\n  function isMixedSale() {\n    var receiptItems = receipt.getReceipt().items;\n    var hasSaleItems = _.some(receiptItems, function (item) {\n      return item.quantity >= 0;\n    });\n    var hasReturnItems = _.some(receiptItems, function (item) {\n      return item.quantity < 0;\n    });\n    return hasSaleItems && hasReturnItems;\n  }\n  function preventMixedSalesOnLoyalty(event, toState) {\n    var customerNumber = receipt.getLoyaltyCustomerNumber();\n    if (customerNumber && toState.name == \"root.split.payment\" && isMixedSale()) {\n      event.preventDefault(); // Prevent changing to \"Payment area\" state\n      notification.pop(\"warning\", i18nMixedSalesWarning);\n    }\n  }\n  function showErrorAndTrack(internalTitle, publicTitle, errorMessage) {\n    notification.pop(\"error\", publicTitle);\n  }\n\n  // Calling \"getLoyaltyCustomer\" here on the load of the \"loyaltyService\" ensures that:\n  // 1. The customer is get (if his 'CustomerNumber' is already on the receipt)\n  // 2. Attached using the \"coreLoyaltyService\"\n  // 3. Watcher for payment types gets initialized\n  // The watcher is needed to have the Loyalty payment types in place, even if the user refreshes on the \"Payment View\".\n  // Additionally see the \"eager loading\" of the \"loyaltyService\" on \"pos.run()\".\n  service.getLoyaltyCustomer();\n  return service;\n});\n","\"use strict\";\n\npos.directive(\"loyaltyWidget\", function (loyaltyService, loyaltyStaticDiscountService, keypadManager, $translate) {\n  return {\n    templateUrl: \"views/widgets/widget-loyalty\",\n    link: function link(scope) {\n      var i18nNoLevel;\n      scope.i18nCustomerNumberPlaceholder = \"\";\n      $translate([\"widget/loyalty/customerNumberPlaceholder\", \"widget/loyalty/noLevel\"]).then(function (translations) {\n        scope.i18nCustomerNumberPlaceholder = translations[\"widget/loyalty/customerNumberPlaceholder\"];\n        i18nNoLevel = translations[\"widget/loyalty/noLevel\"];\n      });\n      loyaltyService.getLoyaltyCustomer().then(function (member) {\n        scope.loyaltyCustomer = member;\n        if (member) scope.customerInput = member.customerNumber;\n      });\n      scope.lookupCustomer = function () {\n        var attachMember = true;\n        if (!scope.customerInput || isNaN(scope.customerInput)) return;\n        loyaltyService.lookupCustomer(scope.customerInput, attachMember).then(function (member) {\n          attachCustomer(member);\n        }, function () {\n          detachCustomerAndHideKeyPad();\n        });\n      };\n      function attachCustomer(customer) {\n        keypadManager.hide();\n        scope.loyaltyCustomer = customer;\n        scope.customerInput = customer.customerNumber;\n      }\n      function detachCustomerAndHideKeyPad() {\n        scope.detachCustomer();\n        return keypadManager.hide();\n      }\n      scope.detachCustomer = function () {\n        loyaltyService.detachCustomer();\n        scope.loyaltyCustomer = null;\n        scope.customerInput = \"\";\n      };\n      scope.getLevelUpPercentage = function (member) {\n        var nextLevel = getNextLevel(member);\n        if (!member || !nextLevel) return 0;\n        var percentageOfNextLevel = new Decimal(member.totalPoints).div(nextLevel.startPoints).times(100).toFixed(2);\n        return percentageOfNextLevel;\n      };\n      scope.getCurrentLevel = function (member) {\n        if (!member || !member.currentLevel) return {\n          levelName: i18nNoLevel,\n          value: 0\n        };\n        return member.currentLevel;\n      };\n      function getNextLevel(member) {\n        if (!member || !member.nextLevel) return null;\n        return member.nextLevel;\n      }\n      scope.showLevelEngineMemberInfo = function (member) {\n        return member && (member.engineTypeIdentifier == 1 || member.engineTypeIdentifier == 3); // DiscountLevelEngine or BonusLevelEngine\n      };\n      scope.showStaticDiscountEngineMemberInfo = function (member) {\n        return loyaltyStaticDiscountService.isStaticDiscountEngineMember(member);\n      };\n    }\n  };\n});\n","\"use strict\";\n\n// eager load the intersolve service if the loyaltyintersolve widget is in the widget list\n// this ensures that all the services watchers and POS manipulations get's triggered\n// immediately instead of waiting for the widget to load the service (due to the depdenency).\n// Basically we're creating a \"fake\" dependency with the $injector service to eager load the intersolve service\npos.run(function (posConfig, $injector, $log, eventBus) {\n  function loadConfig() {\n    // we need to await that posConfig is ready, then we know the latest config is loaded\n    posConfig.whenReady().then(function () {\n      var widgets = posConfig.getWidgets();\n      // search for loyaltyintersolve in the list of widgets\n      for (var i = 0; i < widgets.length; i++) {\n        var widget = widgets[i];\n        if (widget.name === \"loyaltyintersolve\") {\n          // eager load the service by getting it with the $injector\n          $log.debug(\"eager load intersolve\");\n          return $injector.get(\"loyaltyIntersolveService\");\n        }\n      }\n    });\n  }\n  loadConfig();\n  eventBus.subscribe(eventBus.events.pos.newConfig, null, loadConfig);\n});\npos.factory(\"loyaltyIntersolveService\", function (intersolveRepository, notification, coreLoyaltyService, $q, $timeout, receipt, $rootScope, posConfig, $translate, paymentService, intersolvePaymentType, defaultPaymentType, posStorage, $log) {\n  $log.debug(\"Creating Intersolve Service\");\n  var service = {};\n  var loyaltyCustomer;\n  var cancelPaymentUnloader;\n  var UNLOAD_CANCELPAYMENT_FREQUENCY = 60000;\n  var INTERSOLVE_CANCELLATIONS = \"intersolveFailedCancels\";\n  var loyaltyPaymentType = {\n    type: \"LoyaltyDiscount\",\n    translation: \"button/loyaltydiscount\",\n    icon: \"fa-star\",\n    style: \"\",\n    // TODO: add look-at-me-styling\n    paymentStrategy: \"intersolve\"\n  };\n  var intersolvePaymentStrategy = {\n    makePayment: intersolvePaymentType.makePayment,\n    responseSteps: [{\n      success: defaultPaymentType.addPaymentToReceipt\n    }, {\n      success: intersolvePaymentType.handleIntersolveTransaction\n    }, {\n      success: defaultPaymentType.isPaymentEnough\n    }, {\n      success: defaultPaymentType.doChange\n    }, {\n      success: defaultPaymentType.guaranteedFinishReceipt\n    }]\n  };\n  var i18ncancelling, i18ncancellationRequestFailed, i18ntoastcancellationRequestFailed, i18nCardWrongCurrency;\n  $translate([\"label/cancellingPayment\", \"label/cancellationRequestFailed\", \"widget/intersolve/cardWrongCurrency\", \"toast/cancellationRequestFailed\"]).then(function (translations) {\n    i18ncancelling = translations[\"label/cancellingPayment\"];\n    i18ncancellationRequestFailed = translations[\"label/cancellationRequestFailed\"];\n    i18nCardWrongCurrency = translations[\"widget/intersolve/cardWrongCurrency\"];\n    i18ntoastcancellationRequestFailed = translations[\"toast/cancellationRequestFailed\"];\n  });\n  posConfig.addBlockNavigationPaymentType(loyaltyPaymentType.type);\n  paymentService.setPaymentStrategy(loyaltyPaymentType.paymentStrategy, intersolvePaymentStrategy);\n  coreLoyaltyService.setLoyaltyPaymentType(loyaltyPaymentType);\n\n  /**\n   * Intersolve payments are not allowed to be used in (total) discount calculations.\n   * This function is injected to exclude them.\n   */\n  receipt.discountExcludes.push(function (receipt) {\n    var totalExcludes = new Decimal(0);\n    _.forEach(receipt.payments, function (payment) {\n      if (payment.paymentType === \"LoyaltyDiscount\") {\n        totalExcludes = totalExcludes.plus(payment.amount);\n      }\n    });\n    return totalExcludes;\n  });\n\n  /**\n   * Clear the cached loyaltyCustomer if the customerNumber is removed from the receipt\n   */\n  $rootScope.$watch(function () {\n    return receipt.getLoyaltyCustomerNumber();\n  }, function (cardId) {\n    if (!cardId) {\n      loyaltyCustomer = null;\n      coreLoyaltyService.detachCustomer();\n    }\n  });\n  $rootScope.$on(\"payment:intersolveError\", function (event, error) {\n    notification.pop(\"warning\", error);\n  });\n  $rootScope.$on(\"payment:cancelIntersolvePayment\", function (event, payment) {\n    service.cancelIntersolvePayment(payment);\n  });\n\n  // Intersolve payments are exluded from discounts, so they require a recalculation.\n  $rootScope.$on(\"payment:intersolve\", function (event, message) {\n    receipt.reCalculateDiscounts();\n  });\n  service.getLoyaltyCustomer = function (cardId) {\n    return intersolveRepository.api.getLoyaltyCustomer(cardId).then(function (response) {\n      var customer = response.data;\n      var customerBalance = customer.balance;\n      loyaltyCustomer = customer;\n      if (!customer.currency) {\n        customer.currency = posConfig.getLocalCurrency().name;\n      }\n      if (posConfig.getLocalCurrency().name !== customer.currency) {\n        notification.pop(\"warning\", i18nCardWrongCurrency);\n        customerBalance = 0;\n      }\n      coreLoyaltyService.attachCustomer({\n        customerNumber: customer.customerId,\n        customerEmail: customer.email,\n        moneyToUse: customerBalance\n      });\n      customer.balance = new Decimal(customer.balance);\n      return customer;\n    });\n  };\n  service.searchForLoyaltyCustomer = function (firstname, lastname, streetname, zipcode, town, housenumber, email, mobile) {\n    return intersolveRepository.api.searchForLoyaltyCustomer(firstname, lastname, streetname, zipcode, town, housenumber, email, mobile).then(function (response) {\n      var customers = response.data;\n      return customers;\n    });\n  };\n  service.loadAttachedCustomer = function () {\n    if (loyaltyCustomer) return $q.resolve(loyaltyCustomer);\n    var cardId = receipt.getLoyaltyCustomerNumber();\n    if (cardId) return service.getLoyaltyCustomer(cardId);\n    return $q.reject();\n  };\n  service.clearCustomer = function () {\n    loyaltyCustomer = null;\n    coreLoyaltyService.detachCustomer();\n  };\n  service.subtractBalance = function (refPos, customerId, ticketNumber, amount) {\n    $log.debug(\"LoyaltyIntersolveService: SubtractBalance\");\n    if (checkCancellationRetryList(customerId)) {\n      var response = {\n        data: {\n          description: \"Failed, previous cancellation in progress\"\n        }\n      };\n      notification.pop(\"warning\", \"Failed, previous cancellation in progress\");\n      return $q.reject(response);\n    }\n    return intersolveRepository.api.subtractBalance(refPos, customerId, ticketNumber, amount).then(function (response) {\n      var successful = processResponse(response.data, customerId, refPos);\n      if (!successful) {\n        return $q.reject(response);\n      }\n      return response;\n    }, function (response) {\n      // An error represents an unsuccessful API call\n      var cancellation = {\n        customerId: customerId,\n        refPos: refPos\n      };\n      pushCancelPayment(cancellation);\n      return response;\n    });\n  };\n  service.cancelIntersolvePayment = function (payment) {\n    $log.debug(\"LoyaltyIntersolveService: CancelIntersolvePayment\");\n    // don't try and subtract if the payment didn't even complete in the first go\n    if (!payment.completed) return receipt.removePayment(payment.uuid);\n    payment.awaitingResponse = true;\n    payment.status = i18ncancelling;\n    var customer = payment.customer;\n    var retries = 0;\n    intersolveRepository.api.CancelSubtractBalance(customer.customerId, payment.refPos).then(function (response) {\n      var successful = processResponse(response.data, customer.customerId, payment.refPos);\n      if (successful) {\n        receipt.removePayment(payment.uuid);\n      } else {\n        receipt.removePayment(payment.uuid);\n        notification.pop(\"warning\", response.data.description);\n      }\n      payment.awaitingResponse = false;\n    }, function (errorResponse) {\n      // An error represents an unsuccessful API call\n      var cancellation = {\n        customerId: customer.customerId,\n        refPos: payment.refPos\n      };\n      pushCancelPayment(cancellation);\n      payment.awaitingResponse = false;\n      payment.status = i18ncancellationRequestFailed;\n      notification.pop(\"warning\", i18ntoastcancellationRequestFailed);\n    });\n  };\n  service.getSumOfNettoItems = function () {\n    var _receipt = receipt.getReceipt();\n    var _total = receipt.getTotal();\n    var isNettoSum = new Decimal(0);\n    var payedWithLoyalty = new Decimal(0);\n\n    // Getting total sum of \"isNetto\" items\n    for (var i = 0; i < _receipt.items.length; i++) {\n      $log.debug(_receipt.items[i]);\n      if (_receipt.items[i].isNetto) {\n        isNettoSum = isNettoSum.plus(new Decimal(_receipt.items[i].effectiveSalesPrice));\n      }\n    }\n\n    // checking previous loyalty payments on receipt\n    for (var j = 0; j < _receipt.payments.length; j++) {\n      $log.debug(_receipt.payments[j]);\n      if (_receipt.payments[j].paymentType === \"LoyaltyDiscount\" && _receipt.payments[j].completed) {\n        payedWithLoyalty = payedWithLoyalty.plus(new Decimal(_receipt.payments[j].amount));\n      }\n    }\n    return _total.minus(payedWithLoyalty.plus(isNettoSum));\n  };\n  function processResponse(response, customerId, refPos) {\n    // id 0 is a success while -99 indicates a failure where the API successfully\n    // sent a cancel request to Intersove service.\n    if (response.id == 0) {\n      return true;\n    } else if (response.id != -99) {\n      var cancellation = {\n        customerId: customerId,\n        refPos: refPos\n      };\n      pushCancelPayment(cancellation);\n    }\n    return false;\n  }\n  function pushCancelPayment(cancellation) {\n    var queue = posStorage.get(INTERSOLVE_CANCELLATIONS) || [];\n    queue.push(cancellation);\n    posStorage.set(INTERSOLVE_CANCELLATIONS, queue);\n  }\n  service.startCancelPaymentUnloader = function () {\n    cancelPaymentUnloader = $timeout(tryUnloadCancelPaymentQueue, UNLOAD_CANCELPAYMENT_FREQUENCY);\n  };\n  function tryUnloadCancelPaymentQueue() {\n    var queue = posStorage.get(INTERSOLVE_CANCELLATIONS) || [];\n    if (queue.length === 0) return service.startCancelPaymentUnloader();\n    var notDelivered = [];\n    // start unloading from the first receipt in the saleQueue - it will run recursively through the list\n\n    unload(0);\n    function unload(index) {\n      var cancellation = queue[index];\n      intersolveRepository.api.CancelSubtractBalance(cancellation.customerId, cancellation.refPos).then(function (response) {\n        if (response.data.id != 0) notDelivered.push(cancellation);\n      }, function (errorResponse) {\n        notDelivered.push(cancellation);\n      })[\"finally\"](function () {\n        if (index !== queue.length - 1) return unload(++index);\n        posStorage.set(INTERSOLVE_CANCELLATIONS, notDelivered);\n        service.startCancelPaymentUnloader();\n      });\n    }\n  }\n  function checkCancellationRetryList(customerId) {\n    var cancelList = posStorage.get(INTERSOLVE_CANCELLATIONS) || [];\n    for (var i = 0; i < cancelList.length; i++) {\n      if (cancelList[i].customerId === customerId) {\n        return true;\n      }\n    }\n    return false;\n  }\n  service.stopCancelPaymentUnloader = function () {\n    if (cancelPaymentUnloader) $timeout.cancel(cancelPaymentUnloader);\n  };\n  service.loadAttachedCustomer();\n  service.startCancelPaymentUnloader();\n  return service;\n});\n","\"use strict\";\n\npos.directive(\"loyaltyintersolveWidget\", function (loyaltyIntersolveService, notification, $translate, $timeout, keypadManager, posConfig, clerkLoginService, $log) {\n  return {\n    templateUrl: \"views/widgets/widget-loyaltyintersolve\",\n    link: function link(scope, ele, attr) {\n      var i18nCardNotFound;\n      var i18nCommsError;\n      var i18nNoResults;\n      var i18nMissingDetails;\n      scope.firstname = \"\";\n      scope.lastname = \"\";\n      scope.zipcode = null;\n      scope.town = \"\";\n      scope.email = \"\";\n      scope.street = \"\";\n      scope.housenumber = null;\n      scope.mobile = null;\n      scope.searching = false;\n      scope.i18nInputPlaceholder = \"Placeholder\";\n      scope.i18nLastName = \"Last name\";\n      scope.i18nTown = \"Town\";\n      scope.i18nZipCode = \"Zip code\";\n      scope.i18nEmail = \"Email\";\n      scope.i18nFirstName = \"First name\";\n      scope.i18nStreet = \"Street\";\n      scope.i18nHouseNr = \"House number\";\n      scope.i18nMobile = \"Mobile number\";\n      scope.i18nAddDetails = \"Add details\";\n      scope.i18nAddMembercard = \"Add membercard\";\n      $translate([\"widget/intersolve/inputplaceholder\", \"widget/intersolve/cardnotfound\", \"widget/intersolve/commserror\", \"widget/intersolve/noresults\", \"widget/intersolve/missingdetails\", \"widget/intersolve/lastname\", \"widget/intersolve/town\", \"widget/intersolve/zipcode\", \"widget/intersolve/email\", \"widget/intersolve/firstname\", \"widget/intersolve/street\", \"widget/intersolve/housenr\", \"widget/intersolve/mobile\", \"widget/intersolve/adddetails\", \"widget/intersolve/addmembercard\"]).then(function (translations) {\n        scope.i18nInputPlaceholder = translations[\"widget/intersolve/inputplaceholder\"];\n        i18nCardNotFound = translations[\"widget/intersolve/cardnotfound\"];\n        i18nCommsError = translations[\"widget/intersolve/commserror\"];\n        i18nNoResults = translations[\"widget/intersolve/noresults\"];\n        i18nMissingDetails = translations[\"widget/intersolve/missingdetails\"];\n        scope.i18nLastName = translations[\"widget/intersolve/lastname\"];\n        scope.i18nTown = translations[\"widget/intersolve/town\"];\n        scope.i18nZipCode = translations[\"widget/intersolve/zipcode\"];\n        scope.i18nEmail = translations[\"widget/intersolve/email\"];\n        scope.i18nFirstName = translations[\"widget/intersolve/firstname\"];\n        scope.i18nStreet = translations[\"widget/intersolve/street\"];\n        scope.i18nHouseNr = translations[\"widget/intersolve/housenr\"];\n        scope.i18nMobile = translations[\"widget/intersolve/mobile\"];\n        scope.i18nAddDetails = translations[\"widget/intersolve/adddetails\"];\n        scope.i18nAddMembercard = translations[\"widget/intersolve/addmembercard\"];\n      });\n      scope.customers = [];\n      loyaltyIntersolveService.loadAttachedCustomer().then(function (customer) {\n        scope.loyaltyCustomer = customer;\n      })[\"catch\"]();\n      scope.lookupCustomer = function (cardId) {\n        scope.newMembercard = false;\n        loyaltyIntersolveService.getLoyaltyCustomer(cardId).then(function (response) {\n          scope.baseUrl = response.membercardUrl;\n          scope.branch = response.branch;\n          if (response.cardStatus === \"Pending\") {\n            notification.pop(\"warn\", \"Card is not assigned to a user, click 'Add membercard'\");\n            scope.loyaltyCustomer = {\n              customerId: cardId,\n              customerDisplayName: \"New card\",\n              email: \"\",\n              balance: 0,\n              currency: \"\",\n              toGo: 0\n            };\n            scope.newMembercard = cardId;\n          } else if (response.customerStatus === \"Check\") {\n            notification.pop(\"warn\", i18nMissingDetails);\n            scope.missingDetails = true;\n            scope.loyaltyCustomer = response;\n          } else {\n            scope.loyaltyCustomer = response;\n          }\n          $timeout(keypadManager.hide, 100);\n        })[\"catch\"](function (errorResponse) {\n          if (errorResponse.status === 400) {\n            notification.pop(\"info\", i18nCardNotFound);\n            $timeout(keypadManager.hide, 100);\n          } else notification.pop(\"error\", i18nCommsError, errorResponse.message);\n        });\n      };\n      scope.searchForCustomer = function () {\n        loyaltyIntersolveService.searchForLoyaltyCustomer(scope.firstname, scope.lastname, scope.street, scope.zipcode, scope.town, scope.housenumber, scope.email, scope.mobile).then(function (customers) {\n          if (customers === null) {\n            notification.pop(\"warn\", i18nNoResults);\n          } else {\n            scope.customers = customers;\n          }\n        })[\"catch\"](function (errorResponse) {\n          notification.pop(\"error\", i18nCommsError, errorResponse.message);\n        });\n      };\n      scope.toggleCustomer = function (customer) {\n        scope.activeCustomer = scope.activeCustomer == customer ? null : customer;\n      };\n      scope.selectCustomer = function (customer) {\n        scope.cardId = customer.customerId;\n        scope.lookupCustomer(customer.customerId);\n        scope.clearSearch();\n      };\n      scope.clearSearch = function () {\n        scope.searching = false;\n        scope.activeCustomer = null;\n        scope.customers = [];\n      };\n      scope.backToSearch = function () {\n        scope.activeCustomer = null;\n        scope.customers = [];\n      };\n      scope.clearCustomer = function () {\n        scope.loyaltyCustomer = null;\n        scope.missingDetails = false;\n        scope.newMembercard = null;\n        scope.cardId = \"\";\n        loyaltyIntersolveService.clearCustomer();\n      };\n      scope.addMembercard = function () {\n        scope.newMembercard = null;\n        var url = getURL(scope.cardId);\n        window.open(url, \"_blank\");\n      };\n      scope.addDetails = function () {\n        scope.missingDetails = false;\n        var url = getURL(scope.cardId);\n        window.open(url, \"_blank\");\n      };\n      function getURL(membercard) {\n        var url = scope.baseUrl + \"?branch=\" + scope.branch + \"&pos=\" + posConfig.posId + \"&cashier=\" + clerkLoginService.currentUser().identifier;\n        if (membercard != \"\") url = url + \"&membercard=\" + membercard;\n        $log.debug(\"Intersolve redirect URL: \" + url);\n        return url;\n      }\n    }\n  };\n});\n","\"use strict\";\n\npos.factory(\"loyaltyStaticDiscountService\", function ($rootScope, $timeout, receipt) {\n  var service = {};\n  var currentMember = null;\n  var receiptItemCountWatcher = null;\n  service.attachCustomer = function (member) {\n    unwatchReceiptItemCount();\n    cancelAllStaticDiscountsOnReceipt();\n\n    // Only if the member has really changed, but NOT if 'attach' is called due to a Refresh/F5.\n    if (memberHasChanged(member)) enableStaticDiscountAttachmentOnAllReceiptItems();\n    if (!service.isStaticDiscountEngineMember(member)) return;\n    currentMember = member; // Cache member\n    setStaticDiscountOnReceiptItems(member);\n    watchReceiptItemCount();\n  };\n  service.detachCustomer = function () {\n    enableStaticDiscountAttachmentOnAllReceiptItems();\n    cancelAllStaticDiscountsOnReceipt();\n    unwatchReceiptItemCount();\n    currentMember = null;\n  };\n  service.isStaticDiscountEngineMember = function (member) {\n    return member && member.engineTypeIdentifier === 2;\n  };\n  function memberHasChanged(member) {\n    return currentMember && currentMember.customerNumber != member.customerNumber;\n  }\n  function watchReceiptItemCount() {\n    var receiptBon = receipt.getReceipt();\n    receiptItemCountWatcher = $rootScope.$watch(function () {\n      return receiptBon.items.length;\n    }, function (newItemCount, oldItemCount) {\n      if (newItemCount > oldItemCount) setStaticDiscountOnReceiptItems(currentMember);\n    });\n  }\n  function unwatchReceiptItemCount() {\n    if (receiptItemCountWatcher) receiptItemCountWatcher();\n    receiptItemCountWatcher = null;\n  }\n  function setStaticDiscountOnReceiptItems(member) {\n    var discount = member.staticDiscount.discountPercentage;\n    var discountReason = {\n      reason: member.staticDiscount.discountName\n    };\n    receipt.cancelAllDiscount(); // Only the Loyalty discount shall be applied and only ONCE!\n    receipt.getReceipt().items.forEach(function (item, index) {\n      if (item.transactionType !== \"Return\" && !item.discountRemovedByUser) {\n        receipt.setLineDiscount(discount, discountReason, index);\n        attachDiscountRemovalWatcher(item);\n      }\n    });\n  }\n  function cancelAllStaticDiscountsOnReceipt() {\n    if (!service.isStaticDiscountEngineMember(currentMember)) return;\n\n    // Only remove static Loyalty discounts (not any other manually given discount).\n    var staticDiscountName = currentMember.staticDiscount.discountName;\n    receipt.getReceipt().items.forEach(function (item, index) {\n      if (item.discountReasonName === staticDiscountName) {\n        unwatchDiscountRemoval(item);\n        receipt.cancelLineDiscount(null, index);\n      }\n    });\n  }\n  function enableStaticDiscountAttachmentOnAllReceiptItems() {\n    receipt.getReceipt().items.forEach(function (item) {\n      delete item.discountRemovedByUser;\n    });\n  }\n\n  /**\n   * Creates a watcher that sets a flag, to indicate that the user has explicitly removed a static discount.\n   * We use this flag to decide if we must auto-add a static discount when refreshing the page (F5).\n   */\n  function attachDiscountRemovalWatcher(receiptItem) {\n    if (receiptItem.discountRemovalWatcher) return;\n    receiptItem.discountRemovalWatcher = $rootScope.$watch(function () {\n      return receiptItem.calculatedDiscount;\n    }, function (calculatedDiscount) {\n      if (!calculatedDiscount.isZero()) return;\n      unwatchDiscountRemoval(receiptItem);\n      markDiscountAsRemovedByUser(receiptItem);\n    });\n  }\n  function markDiscountAsRemovedByUser(receiptItem) {\n    receiptItem.discountRemovedByUser = true;\n    receipt.persist(); // To get \"discountRemovedByUser\" after refreshing again.\n  }\n  function unwatchDiscountRemoval(receiptItem) {\n    if (!receiptItem.discountRemovalWatcher) return;\n    receiptItem.discountRemovalWatcher();\n    delete receiptItem.discountRemovalWatcher;\n  }\n  return service;\n});\n","\"use strict\";\n\npos.factory(\"masterItemStockService\", function (masterItemStockRepository) {\n  var service = {};\n  service.getByMasterItemStock = function (itemNo, storeId) {\n    return masterItemStockRepository.api.getMasterItemStockInfo(itemNo, storeId).then(function (response) {\n      return response.data;\n    });\n  };\n  return service;\n});\n","\"use strict\";\n\npos.factory(\"addressService\", function (addressRepository, notification, $translate) {\n  var service = {};\n  var i18nAddressInserted, i18nErrorAddressInsert;\n  $translate([\"toast/address_insert\", \"toast/address_not_inserted\"]).then(function (translations) {\n    i18nAddressInserted = translations[\"toast/address_insert\"];\n    i18nErrorAddressInsert = translations[\"toast/address_not_inserted\"];\n  });\n  service.addAddress = function (address) {\n    return addressRepository.api.add(address).then(function (response) {\n      notification.pop(\"info\", i18nAddressInserted);\n      return response;\n    })[\"catch\"](function (response) {\n      notification.pop(\"error\", i18nErrorAddressInsert);\n    });\n  };\n  return service;\n});\n","\"use strict\";\n\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _regeneratorRuntime() { \"use strict\"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return r; }; var t, r = {}, e = Object.prototype, n = e.hasOwnProperty, o = \"function\" == typeof Symbol ? Symbol : {}, i = o.iterator || \"@@iterator\", a = o.asyncIterator || \"@@asyncIterator\", u = o.toStringTag || \"@@toStringTag\"; function c(t, r, e, n) { return Object.defineProperty(t, r, { value: e, enumerable: !n, configurable: !n, writable: !n }); } try { c({}, \"\"); } catch (t) { c = function c(t, r, e) { return t[r] = e; }; } function h(r, e, n, o) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype); return c(a, \"_invoke\", function (r, e, n) { var o = 1; return function (i, a) { if (3 === o) throw Error(\"Generator is already running\"); if (4 === o) { if (\"throw\" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var u = n.delegate; if (u) { var c = d(u, n); if (c) { if (c === f) continue; return c; } } if (\"next\" === n.method) n.sent = n._sent = n.arg;else if (\"throw\" === n.method) { if (1 === o) throw o = 4, n.arg; n.dispatchException(n.arg); } else \"return\" === n.method && n.abrupt(\"return\", n.arg); o = 3; var h = s(r, e, n); if (\"normal\" === h.type) { if (o = n.done ? 4 : 2, h.arg === f) continue; return { value: h.arg, done: n.done }; } \"throw\" === h.type && (o = 4, n.method = \"throw\", n.arg = h.arg); } }; }(r, n, new Context(o || [])), !0), a; } function s(t, r, e) { try { return { type: \"normal\", arg: t.call(r, e) }; } catch (t) { return { type: \"throw\", arg: t }; } } r.wrap = h; var f = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var l = {}; c(l, i, function () { return this; }); var p = Object.getPrototypeOf, y = p && p(p(x([]))); y && y !== e && n.call(y, i) && (l = y); var v = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(l); function g(t) { [\"next\", \"throw\", \"return\"].forEach(function (r) { c(t, r, function (t) { return this._invoke(r, t); }); }); } function AsyncIterator(t, r) { function e(o, i, a, u) { var c = s(t[o], t, i); if (\"throw\" !== c.type) { var h = c.arg, f = h.value; return f && \"object\" == _typeof(f) && n.call(f, \"__await\") ? r.resolve(f.__await).then(function (t) { e(\"next\", t, a, u); }, function (t) { e(\"throw\", t, a, u); }) : r.resolve(f).then(function (t) { h.value = t, a(h); }, function (t) { return e(\"throw\", t, a, u); }); } u(c.arg); } var o; c(this, \"_invoke\", function (t, n) { function i() { return new r(function (r, o) { e(t, n, r, o); }); } return o = o ? o.then(i, i) : i(); }, !0); } function d(r, e) { var n = e.method, o = r.i[n]; if (o === t) return e.delegate = null, \"throw\" === n && r.i[\"return\"] && (e.method = \"return\", e.arg = t, d(r, e), \"throw\" === e.method) || \"return\" !== n && (e.method = \"throw\", e.arg = new TypeError(\"The iterator does not provide a '\" + n + \"' method\")), f; var i = s(o, r.i, e.arg); if (\"throw\" === i.type) return e.method = \"throw\", e.arg = i.arg, e.delegate = null, f; var a = i.arg; return a ? a.done ? (e[r.r] = a.value, e.next = r.n, \"return\" !== e.method && (e.method = \"next\", e.arg = t), e.delegate = null, f) : a : (e.method = \"throw\", e.arg = new TypeError(\"iterator result is not an object\"), e.delegate = null, f); } function w(t) { this.tryEntries.push(t); } function m(r) { var e = r[4] || {}; e.type = \"normal\", e.arg = t, r[4] = e; } function Context(t) { this.tryEntries = [[-1]], t.forEach(w, this), this.reset(!0); } function x(r) { if (null != r) { var e = r[i]; if (e) return e.call(r); if (\"function\" == typeof r.next) return r; if (!isNaN(r.length)) { var o = -1, a = function e() { for (; ++o < r.length;) if (n.call(r, o)) return e.value = r[o], e.done = !1, e; return e.value = t, e.done = !0, e; }; return a.next = a; } } throw new TypeError(_typeof(r) + \" is not iterable\"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, c(v, \"constructor\", GeneratorFunctionPrototype), c(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction), GeneratorFunction.displayName = c(GeneratorFunctionPrototype, u, \"GeneratorFunction\"), r.isGeneratorFunction = function (t) { var r = \"function\" == typeof t && t.constructor; return !!r && (r === GeneratorFunction || \"GeneratorFunction\" === (r.displayName || r.name)); }, r.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, c(t, u, \"GeneratorFunction\")), t.prototype = Object.create(v), t; }, r.awrap = function (t) { return { __await: t }; }, g(AsyncIterator.prototype), c(AsyncIterator.prototype, a, function () { return this; }), r.AsyncIterator = AsyncIterator, r.async = function (t, e, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(h(t, e, n, o), i); return r.isGeneratorFunction(e) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, g(v), c(v, u, \"Generator\"), c(v, i, function () { return this; }), c(v, \"toString\", function () { return \"[object Generator]\"; }), r.keys = function (t) { var r = Object(t), e = []; for (var n in r) e.unshift(n); return function t() { for (; e.length;) if ((n = e.pop()) in r) return t.value = n, t.done = !1, t; return t.done = !0, t; }; }, r.values = x, Context.prototype = { constructor: Context, reset: function reset(r) { if (this.prev = this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = \"next\", this.arg = t, this.tryEntries.forEach(m), !r) for (var e in this) \"t\" === e.charAt(0) && n.call(this, e) && !isNaN(+e.slice(1)) && (this[e] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0][4]; if (\"throw\" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(r) { if (this.done) throw r; var e = this; function n(t) { a.type = \"throw\", a.arg = r, e.next = t; } for (var o = e.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i[4], u = this.prev, c = i[1], h = i[2]; if (-1 === i[0]) return n(\"end\"), !1; if (!c && !h) throw Error(\"try statement without catch or finally\"); if (null != i[0] && i[0] <= u) { if (u < c) return this.method = \"next\", this.arg = t, n(c), !0; if (u < h) return n(h), !1; } } }, abrupt: function abrupt(t, r) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var n = this.tryEntries[e]; if (n[0] > -1 && n[0] <= this.prev && this.prev < n[2]) { var o = n; break; } } o && (\"break\" === t || \"continue\" === t) && o[0] <= r && r <= o[2] && (o = null); var i = o ? o[4] : {}; return i.type = t, i.arg = r, o ? (this.method = \"next\", this.next = o[2], f) : this.complete(i); }, complete: function complete(t, r) { if (\"throw\" === t.type) throw t.arg; return \"break\" === t.type || \"continue\" === t.type ? this.next = t.arg : \"return\" === t.type ? (this.rval = this.arg = t.arg, this.method = \"return\", this.next = \"end\") : \"normal\" === t.type && r && (this.next = r), f; }, finish: function finish(t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[2] === t) return this.complete(e[4], e[3]), m(e), f; } }, \"catch\": function _catch(t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[0] === t) { var n = e[4]; if (\"throw\" === n.type) { var o = n.arg; m(e); } return o; } } throw Error(\"illegal catch attempt\"); }, delegateYield: function delegateYield(r, e, n) { return this.delegate = { i: x(r), r: e, n: n }, \"next\" === this.method && (this.arg = t), f; } }, r; }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"next\", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"throw\", n); } _next(void 0); }); }; }\npos.directive(\"mpaddaddressWidget\", function ($location, $translate, addressService, notification, eventBus, findCustomerService) {\n  return {\n    templateUrl: \"views/widgets/widget-mpaddaddress\",\n    link: function link(scope, el, attr) {\n      scope.address = {};\n      scope.formSubmitted = false;\n      var i18nCheckLog, i18nNoCustomerSelected;\n      $translate([\"toast/check log\"]).then(function (translations) {\n        i18nCheckLog = translations[\"toast/check log\"];\n        i18nNoCustomerSelected = translations[\"widget/add-address/no-customer-selected\"];\n      });\n      scope.saveAddress = /*#__PURE__*/function () {\n        var _ref = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee(formState) {\n          var customer;\n          return _regeneratorRuntime().wrap(function _callee$(_context) {\n            while (1) switch (_context.prev = _context.next) {\n              case 0:\n                scope.formSubmitted = true;\n                if (formState) {\n                  _context.next = 3;\n                  break;\n                }\n                return _context.abrupt(\"return\");\n              case 3:\n                customer = findCustomerService.getSelectedCustomer();\n                if (customer) {\n                  _context.next = 7;\n                  break;\n                }\n                notification.pop(\"error\", i18nNoCustomerSelected);\n                return _context.abrupt(\"return\");\n              case 7:\n                _context.prev = 7;\n                scope.address.customerId = customer.id;\n                _context.next = 11;\n                return addressService.addAddress(scope.address);\n              case 11:\n                eventBus.notify(eventBus.events.customer.updated);\n                $location.path(\"pos\");\n                _context.next = 18;\n                break;\n              case 15:\n                _context.prev = 15;\n                _context.t0 = _context[\"catch\"](7);\n                notification.pop(\"error\", i18nCheckLog);\n              case 18:\n              case \"end\":\n                return _context.stop();\n            }\n          }, _callee, null, [[7, 15]]);\n        }));\n        return function (_x) {\n          return _ref.apply(this, arguments);\n        };\n      }();\n    }\n  };\n});\n","\"use strict\";\n\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _regeneratorRuntime() { \"use strict\"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return r; }; var t, r = {}, e = Object.prototype, n = e.hasOwnProperty, o = \"function\" == typeof Symbol ? Symbol : {}, i = o.iterator || \"@@iterator\", a = o.asyncIterator || \"@@asyncIterator\", u = o.toStringTag || \"@@toStringTag\"; function c(t, r, e, n) { return Object.defineProperty(t, r, { value: e, enumerable: !n, configurable: !n, writable: !n }); } try { c({}, \"\"); } catch (t) { c = function c(t, r, e) { return t[r] = e; }; } function h(r, e, n, o) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype); return c(a, \"_invoke\", function (r, e, n) { var o = 1; return function (i, a) { if (3 === o) throw Error(\"Generator is already running\"); if (4 === o) { if (\"throw\" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var u = n.delegate; if (u) { var c = d(u, n); if (c) { if (c === f) continue; return c; } } if (\"next\" === n.method) n.sent = n._sent = n.arg;else if (\"throw\" === n.method) { if (1 === o) throw o = 4, n.arg; n.dispatchException(n.arg); } else \"return\" === n.method && n.abrupt(\"return\", n.arg); o = 3; var h = s(r, e, n); if (\"normal\" === h.type) { if (o = n.done ? 4 : 2, h.arg === f) continue; return { value: h.arg, done: n.done }; } \"throw\" === h.type && (o = 4, n.method = \"throw\", n.arg = h.arg); } }; }(r, n, new Context(o || [])), !0), a; } function s(t, r, e) { try { return { type: \"normal\", arg: t.call(r, e) }; } catch (t) { return { type: \"throw\", arg: t }; } } r.wrap = h; var f = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var l = {}; c(l, i, function () { return this; }); var p = Object.getPrototypeOf, y = p && p(p(x([]))); y && y !== e && n.call(y, i) && (l = y); var v = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(l); function g(t) { [\"next\", \"throw\", \"return\"].forEach(function (r) { c(t, r, function (t) { return this._invoke(r, t); }); }); } function AsyncIterator(t, r) { function e(o, i, a, u) { var c = s(t[o], t, i); if (\"throw\" !== c.type) { var h = c.arg, f = h.value; return f && \"object\" == _typeof(f) && n.call(f, \"__await\") ? r.resolve(f.__await).then(function (t) { e(\"next\", t, a, u); }, function (t) { e(\"throw\", t, a, u); }) : r.resolve(f).then(function (t) { h.value = t, a(h); }, function (t) { return e(\"throw\", t, a, u); }); } u(c.arg); } var o; c(this, \"_invoke\", function (t, n) { function i() { return new r(function (r, o) { e(t, n, r, o); }); } return o = o ? o.then(i, i) : i(); }, !0); } function d(r, e) { var n = e.method, o = r.i[n]; if (o === t) return e.delegate = null, \"throw\" === n && r.i[\"return\"] && (e.method = \"return\", e.arg = t, d(r, e), \"throw\" === e.method) || \"return\" !== n && (e.method = \"throw\", e.arg = new TypeError(\"The iterator does not provide a '\" + n + \"' method\")), f; var i = s(o, r.i, e.arg); if (\"throw\" === i.type) return e.method = \"throw\", e.arg = i.arg, e.delegate = null, f; var a = i.arg; return a ? a.done ? (e[r.r] = a.value, e.next = r.n, \"return\" !== e.method && (e.method = \"next\", e.arg = t), e.delegate = null, f) : a : (e.method = \"throw\", e.arg = new TypeError(\"iterator result is not an object\"), e.delegate = null, f); } function w(t) { this.tryEntries.push(t); } function m(r) { var e = r[4] || {}; e.type = \"normal\", e.arg = t, r[4] = e; } function Context(t) { this.tryEntries = [[-1]], t.forEach(w, this), this.reset(!0); } function x(r) { if (null != r) { var e = r[i]; if (e) return e.call(r); if (\"function\" == typeof r.next) return r; if (!isNaN(r.length)) { var o = -1, a = function e() { for (; ++o < r.length;) if (n.call(r, o)) return e.value = r[o], e.done = !1, e; return e.value = t, e.done = !0, e; }; return a.next = a; } } throw new TypeError(_typeof(r) + \" is not iterable\"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, c(v, \"constructor\", GeneratorFunctionPrototype), c(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction), GeneratorFunction.displayName = c(GeneratorFunctionPrototype, u, \"GeneratorFunction\"), r.isGeneratorFunction = function (t) { var r = \"function\" == typeof t && t.constructor; return !!r && (r === GeneratorFunction || \"GeneratorFunction\" === (r.displayName || r.name)); }, r.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, c(t, u, \"GeneratorFunction\")), t.prototype = Object.create(v), t; }, r.awrap = function (t) { return { __await: t }; }, g(AsyncIterator.prototype), c(AsyncIterator.prototype, a, function () { return this; }), r.AsyncIterator = AsyncIterator, r.async = function (t, e, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(h(t, e, n, o), i); return r.isGeneratorFunction(e) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, g(v), c(v, u, \"Generator\"), c(v, i, function () { return this; }), c(v, \"toString\", function () { return \"[object Generator]\"; }), r.keys = function (t) { var r = Object(t), e = []; for (var n in r) e.unshift(n); return function t() { for (; e.length;) if ((n = e.pop()) in r) return t.value = n, t.done = !1, t; return t.done = !0, t; }; }, r.values = x, Context.prototype = { constructor: Context, reset: function reset(r) { if (this.prev = this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = \"next\", this.arg = t, this.tryEntries.forEach(m), !r) for (var e in this) \"t\" === e.charAt(0) && n.call(this, e) && !isNaN(+e.slice(1)) && (this[e] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0][4]; if (\"throw\" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(r) { if (this.done) throw r; var e = this; function n(t) { a.type = \"throw\", a.arg = r, e.next = t; } for (var o = e.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i[4], u = this.prev, c = i[1], h = i[2]; if (-1 === i[0]) return n(\"end\"), !1; if (!c && !h) throw Error(\"try statement without catch or finally\"); if (null != i[0] && i[0] <= u) { if (u < c) return this.method = \"next\", this.arg = t, n(c), !0; if (u < h) return n(h), !1; } } }, abrupt: function abrupt(t, r) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var n = this.tryEntries[e]; if (n[0] > -1 && n[0] <= this.prev && this.prev < n[2]) { var o = n; break; } } o && (\"break\" === t || \"continue\" === t) && o[0] <= r && r <= o[2] && (o = null); var i = o ? o[4] : {}; return i.type = t, i.arg = r, o ? (this.method = \"next\", this.next = o[2], f) : this.complete(i); }, complete: function complete(t, r) { if (\"throw\" === t.type) throw t.arg; return \"break\" === t.type || \"continue\" === t.type ? this.next = t.arg : \"return\" === t.type ? (this.rval = this.arg = t.arg, this.method = \"return\", this.next = \"end\") : \"normal\" === t.type && r && (this.next = r), f; }, finish: function finish(t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[2] === t) return this.complete(e[4], e[3]), m(e), f; } }, \"catch\": function _catch(t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[0] === t) { var n = e[4]; if (\"throw\" === n.type) { var o = n.arg; m(e); } return o; } } throw Error(\"illegal catch attempt\"); }, delegateYield: function delegateYield(r, e, n) { return this.delegate = { i: x(r), r: e, n: n }, \"next\" === this.method && (this.arg = t), f; } }, r; }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"next\", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"throw\", n); } _next(void 0); }); }; }\npos.directive(\"mpcustomerWidget\", function (findCustomerService, $translate, receipt, keypadManager, hideDivSuppressor, notification, $location, $log, eventBus) {\n  return {\n    templateUrl: \"views/widgets/widget-mpcustomer\",\n    controller: function controller($scope) {\n      buildCustomerSearchParameters();\n      $scope.paginationSize = 20;\n      $scope.after = 0;\n      $scope.searchCustomer = searchCustomer;\n      $scope.getMoreCustomers = getMoreCustomers;\n      $scope.buildCustomerSearchParameters = buildCustomerSearchParameters;\n      var i18nCheckLog;\n      $translate([\"toast/check log\"]).then(function () {\n        i18nCheckLog = $translate.instant(\"toast/check log\");\n      });\n      searchCustomer();\n      function buildCustomerSearchParameters() {\n        $scope.searchParams = {\n          firstName: {\n            name: \"Supplier\",\n            value: \"\"\n          },\n          lastName: {\n            name: \"ItemGroup\",\n            value: \"\"\n          },\n          email: {\n            name: \"Email\",\n            value: \"\"\n          },\n          customerNo: {\n            name: \"CustomerNo\",\n            value: \"\"\n          },\n          phone: {\n            name: \"Phone\",\n            value: \"\"\n          },\n          zipCode: {\n            name: \"Zip\",\n            value: \"\"\n          }\n        };\n        $translate([\"widget/customerFilter/searchFirstName\", \"widget/customerFilter/searchLastName\", \"widget/customerFilter/searchEmail\", \"widget/customerFilter/searchCustomerNo\", \"widget/customerFilter/phoneNumber\", \"widget/customerFilter/zip\"]).then(function (translations) {\n          $scope.searchParams.firstName.name = translations[\"widget/customerFilter/searchFirstName\"];\n          $scope.searchParams.lastName.name = translations[\"widget/customerFilter/searchLastName\"];\n          $scope.searchParams.email.name = translations[\"widget/customerFilter/searchEmail\"];\n          $scope.searchParams.customerNo.name = translations[\"widget/customerFilter/searchCustomerNo\"];\n          $scope.searchParams.phone.name = translations[\"widget/customerFilter/phoneNumber\"];\n          $scope.searchParams.zipCode.name = translations[\"widget/customerFilter/zip\"];\n        });\n      }\n      function searchCustomer() {\n        keypadManager.hide();\n        if (hideDivSuppressor.target) hideDivSuppressor.target.hide();\n        $scope.after = 0;\n        $scope.fetchFailed = false;\n        $scope.searchResults = [];\n        getMoreCustomers();\n      }\n      function getMoreCustomers() {\n        findCustomerService.searchForCustomer($scope.searchParams, $scope.after, $scope.paginationSize).then(fetchSuccess, fetchError);\n      }\n      function fetchSuccess(response) {\n        for (var i = 0; i < response.length; i++) {\n          $scope.searchResults.push(response[i]);\n        }\n        if (response.length === 0) {\n          $scope.fetchFailed = true;\n        }\n        $scope.after += $scope.paginationSize;\n      }\n      function fetchError(errorResponse) {\n        $log.debug(\"searchByParameter error\");\n        $log.debug(errorResponse);\n        notification.pop(\"error\", i18nCheckLog);\n      }\n    },\n    link: function link(scope, el, attr, controller) {\n      scope.selectedCustomerLineIndex = -1;\n      scope.reset = reset;\n      scope.addCustomer = addCustomer;\n      scope.selectCustomerLine = selectCustomerLine;\n      function reset() {\n        scope.buildCustomerSearchParameters();\n        scope.searchCustomer();\n      }\n      function addCustomer() {\n        return _addCustomer.apply(this, arguments);\n      }\n      function _addCustomer() {\n        _addCustomer = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee() {\n          var canProceed;\n          return _regeneratorRuntime().wrap(function _callee$(_context) {\n            while (1) switch (_context.prev = _context.next) {\n              case 0:\n                findCustomerService.removeSelectedCustomer();\n                _context.next = 3;\n                return eventBus.notifyAsync(eventBus.events.customer.beforeSelect);\n              case 3:\n                canProceed = _context.sent;\n                if (canProceed) {\n                  $location.path(\"widget/mpeditcustomer\");\n                }\n              case 5:\n              case \"end\":\n                return _context.stop();\n            }\n          }, _callee);\n        }));\n        return _addCustomer.apply(this, arguments);\n      }\n      function selectCustomerLine(_x, _x2) {\n        return _selectCustomerLine.apply(this, arguments);\n      }\n      function _selectCustomerLine() {\n        _selectCustomerLine = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee2(index, customer) {\n          var canProceed;\n          return _regeneratorRuntime().wrap(function _callee2$(_context2) {\n            while (1) switch (_context2.prev = _context2.next) {\n              case 0:\n                scope.billingAddress = null;\n                if (!(scope.selectedCustomerLineIndex === index)) {\n                  _context2.next = 7;\n                  break;\n                }\n                scope.selectedCustomerLineIndex = -1;\n                findCustomerService.removeSelectedCustomer();\n                receipt.detachCustomer();\n                _context2.next = 16;\n                break;\n              case 7:\n                scope.selectedCustomerLineIndex = index;\n                receipt.attachCustomer(customer.externalUniqueId, customer.emailAddress);\n                findCustomerService.setSelectedCustomer(customer);\n                scope.billingAddress = customer.addresses.find(function (i) {\n                  return i.isPrimaryBilling;\n                }) || customer.addresses[0];\n                scope.selectedShippingAddress = customer.addresses.find(function (i) {\n                  return i.isPrimaryShipping;\n                }) || customer.addresses[0];\n                _context2.next = 14;\n                return eventBus.notifyAsync(eventBus.events.customer.afterSelect);\n              case 14:\n                canProceed = _context2.sent;\n                if (canProceed) {\n                  $location.path(\"pos\");\n                }\n              case 16:\n              case \"end\":\n                return _context2.stop();\n            }\n          }, _callee2);\n        }));\n        return _selectCustomerLine.apply(this, arguments);\n      }\n    }\n  };\n});\n","\"use strict\";\n\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _regeneratorRuntime() { \"use strict\"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return r; }; var t, r = {}, e = Object.prototype, n = e.hasOwnProperty, o = \"function\" == typeof Symbol ? Symbol : {}, i = o.iterator || \"@@iterator\", a = o.asyncIterator || \"@@asyncIterator\", u = o.toStringTag || \"@@toStringTag\"; function c(t, r, e, n) { return Object.defineProperty(t, r, { value: e, enumerable: !n, configurable: !n, writable: !n }); } try { c({}, \"\"); } catch (t) { c = function c(t, r, e) { return t[r] = e; }; } function h(r, e, n, o) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype); return c(a, \"_invoke\", function (r, e, n) { var o = 1; return function (i, a) { if (3 === o) throw Error(\"Generator is already running\"); if (4 === o) { if (\"throw\" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var u = n.delegate; if (u) { var c = d(u, n); if (c) { if (c === f) continue; return c; } } if (\"next\" === n.method) n.sent = n._sent = n.arg;else if (\"throw\" === n.method) { if (1 === o) throw o = 4, n.arg; n.dispatchException(n.arg); } else \"return\" === n.method && n.abrupt(\"return\", n.arg); o = 3; var h = s(r, e, n); if (\"normal\" === h.type) { if (o = n.done ? 4 : 2, h.arg === f) continue; return { value: h.arg, done: n.done }; } \"throw\" === h.type && (o = 4, n.method = \"throw\", n.arg = h.arg); } }; }(r, n, new Context(o || [])), !0), a; } function s(t, r, e) { try { return { type: \"normal\", arg: t.call(r, e) }; } catch (t) { return { type: \"throw\", arg: t }; } } r.wrap = h; var f = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var l = {}; c(l, i, function () { return this; }); var p = Object.getPrototypeOf, y = p && p(p(x([]))); y && y !== e && n.call(y, i) && (l = y); var v = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(l); function g(t) { [\"next\", \"throw\", \"return\"].forEach(function (r) { c(t, r, function (t) { return this._invoke(r, t); }); }); } function AsyncIterator(t, r) { function e(o, i, a, u) { var c = s(t[o], t, i); if (\"throw\" !== c.type) { var h = c.arg, f = h.value; return f && \"object\" == _typeof(f) && n.call(f, \"__await\") ? r.resolve(f.__await).then(function (t) { e(\"next\", t, a, u); }, function (t) { e(\"throw\", t, a, u); }) : r.resolve(f).then(function (t) { h.value = t, a(h); }, function (t) { return e(\"throw\", t, a, u); }); } u(c.arg); } var o; c(this, \"_invoke\", function (t, n) { function i() { return new r(function (r, o) { e(t, n, r, o); }); } return o = o ? o.then(i, i) : i(); }, !0); } function d(r, e) { var n = e.method, o = r.i[n]; if (o === t) return e.delegate = null, \"throw\" === n && r.i[\"return\"] && (e.method = \"return\", e.arg = t, d(r, e), \"throw\" === e.method) || \"return\" !== n && (e.method = \"throw\", e.arg = new TypeError(\"The iterator does not provide a '\" + n + \"' method\")), f; var i = s(o, r.i, e.arg); if (\"throw\" === i.type) return e.method = \"throw\", e.arg = i.arg, e.delegate = null, f; var a = i.arg; return a ? a.done ? (e[r.r] = a.value, e.next = r.n, \"return\" !== e.method && (e.method = \"next\", e.arg = t), e.delegate = null, f) : a : (e.method = \"throw\", e.arg = new TypeError(\"iterator result is not an object\"), e.delegate = null, f); } function w(t) { this.tryEntries.push(t); } function m(r) { var e = r[4] || {}; e.type = \"normal\", e.arg = t, r[4] = e; } function Context(t) { this.tryEntries = [[-1]], t.forEach(w, this), this.reset(!0); } function x(r) { if (null != r) { var e = r[i]; if (e) return e.call(r); if (\"function\" == typeof r.next) return r; if (!isNaN(r.length)) { var o = -1, a = function e() { for (; ++o < r.length;) if (n.call(r, o)) return e.value = r[o], e.done = !1, e; return e.value = t, e.done = !0, e; }; return a.next = a; } } throw new TypeError(_typeof(r) + \" is not iterable\"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, c(v, \"constructor\", GeneratorFunctionPrototype), c(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction), GeneratorFunction.displayName = c(GeneratorFunctionPrototype, u, \"GeneratorFunction\"), r.isGeneratorFunction = function (t) { var r = \"function\" == typeof t && t.constructor; return !!r && (r === GeneratorFunction || \"GeneratorFunction\" === (r.displayName || r.name)); }, r.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, c(t, u, \"GeneratorFunction\")), t.prototype = Object.create(v), t; }, r.awrap = function (t) { return { __await: t }; }, g(AsyncIterator.prototype), c(AsyncIterator.prototype, a, function () { return this; }), r.AsyncIterator = AsyncIterator, r.async = function (t, e, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(h(t, e, n, o), i); return r.isGeneratorFunction(e) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, g(v), c(v, u, \"Generator\"), c(v, i, function () { return this; }), c(v, \"toString\", function () { return \"[object Generator]\"; }), r.keys = function (t) { var r = Object(t), e = []; for (var n in r) e.unshift(n); return function t() { for (; e.length;) if ((n = e.pop()) in r) return t.value = n, t.done = !1, t; return t.done = !0, t; }; }, r.values = x, Context.prototype = { constructor: Context, reset: function reset(r) { if (this.prev = this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = \"next\", this.arg = t, this.tryEntries.forEach(m), !r) for (var e in this) \"t\" === e.charAt(0) && n.call(this, e) && !isNaN(+e.slice(1)) && (this[e] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0][4]; if (\"throw\" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(r) { if (this.done) throw r; var e = this; function n(t) { a.type = \"throw\", a.arg = r, e.next = t; } for (var o = e.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i[4], u = this.prev, c = i[1], h = i[2]; if (-1 === i[0]) return n(\"end\"), !1; if (!c && !h) throw Error(\"try statement without catch or finally\"); if (null != i[0] && i[0] <= u) { if (u < c) return this.method = \"next\", this.arg = t, n(c), !0; if (u < h) return n(h), !1; } } }, abrupt: function abrupt(t, r) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var n = this.tryEntries[e]; if (n[0] > -1 && n[0] <= this.prev && this.prev < n[2]) { var o = n; break; } } o && (\"break\" === t || \"continue\" === t) && o[0] <= r && r <= o[2] && (o = null); var i = o ? o[4] : {}; return i.type = t, i.arg = r, o ? (this.method = \"next\", this.next = o[2], f) : this.complete(i); }, complete: function complete(t, r) { if (\"throw\" === t.type) throw t.arg; return \"break\" === t.type || \"continue\" === t.type ? this.next = t.arg : \"return\" === t.type ? (this.rval = this.arg = t.arg, this.method = \"return\", this.next = \"end\") : \"normal\" === t.type && r && (this.next = r), f; }, finish: function finish(t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[2] === t) return this.complete(e[4], e[3]), m(e), f; } }, \"catch\": function _catch(t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[0] === t) { var n = e[4]; if (\"throw\" === n.type) { var o = n.arg; m(e); } return o; } } throw Error(\"illegal catch attempt\"); }, delegateYield: function delegateYield(r, e, n) { return this.delegate = { i: x(r), r: e, n: n }, \"next\" === this.method && (this.arg = t), f; } }, r; }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"next\", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"throw\", n); } _next(void 0); }); }; }\nvar _require = require(\"decimal.js\"),\n  Decimal = _require[\"default\"];\npos.directive(\"mpcustomerorderWidget\", function (customerOrderWidgetService, $translate, notification, $state, keypadManager, $filter) {\n  return {\n    templateUrl: \"views/widgets/widget-mpcustomerorder\",\n    controller: function controller($scope, $log, $rootScope, $q) {\n      $translate([\"widget/customerorder/orderNo\", \"widget/customerorder/status\", \"widget/customerorder/save\", \"widget/customerorder/save/no_changes\", \"toast/item/notFound\"]).then(function (translations) {\n        $scope.i18nCustomerOrderOrderNo = translations[\"widget/customerorder/orderNo\"];\n        $scope.i18nCustomerOrderStatus = translations[\"widget/customerorder/status\"];\n        $scope.i18nSaveCustomerOrder = translations[\"widget/customerorder/save\"];\n        $scope.i18nSaveCustomerOrderNoChanges = translations[\"widget/customerorder/save/no_changes\"];\n        $scope.i18nArticleNotFound = translations[\"toast/item/notFound\"];\n      });\n      var customerOrderStatusEnums = Object.freeze({\n        0: \"Open\",\n        1: \"In Pick\",\n        2: \"Partially Picked\",\n        3: \"Ready\",\n        4: \"Overdue\",\n        5: \"Closed\"\n      });\n      $scope.customerOrderStatusEnums = customerOrderStatusEnums;\n      var customerOrderTypeEnums = Object.freeze({\n        0: \"Click And Collect\",\n        1: \"Delivery\"\n      });\n      $scope.customerOrderTypeEnums = customerOrderTypeEnums;\n      $scope.data = [];\n      buildCustomerOrderSearchParameters();\n      getCustomerOrders();\n      var customerOrderModal = {};\n      customerOrderModal.showModal = false;\n      customerOrderModal.customerOrder = {};\n      $scope.customerOrderModal = customerOrderModal;\n      $scope.showCustomerOrder = showCustomerOrder;\n      $scope.selectedAction = selectedAction;\n      $scope.getDecimal = getDecimal;\n      $scope.inputValue = \"\";\n      $scope.isSelected = isSelected;\n      $scope.isNotSelected = isNotSelected;\n      $scope.setSelected = setSelected;\n      $scope.searchCustomerOrders = searchCustomerOrders;\n      $scope.buildCustomerOrderSearchParameters = buildCustomerOrderSearchParameters;\n      $scope.sort = sort;\n      $scope.propertyName = \"createdDate\";\n      $scope.sortAsc = true;\n      var selectedIndex = -1;\n      $scope.cancelWarningModal = {\n        title: \"widget/customerorder/warning/cancel\",\n        isVisible: false,\n        hasTextInput: false,\n        buttons: [{\n          label: \"label/yes\",\n          type: \"success\",\n          isDefault: false,\n          closes: true,\n          action: function () {\n            var _action = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee() {\n              return _regeneratorRuntime().wrap(function _callee$(_context) {\n                while (1) switch (_context.prev = _context.next) {\n                  case 0:\n                    closeCustomerOrderModal();\n                    getCustomerOrders();\n                  case 2:\n                  case \"end\":\n                    return _context.stop();\n                }\n              }, _callee);\n            }));\n            function action() {\n              return _action.apply(this, arguments);\n            }\n            return action;\n          }()\n        }, {\n          label: \"label/no\",\n          type: \"danger\",\n          isDefault: true,\n          closes: true,\n          action: function action() {}\n        }]\n      };\n      $scope.unpickWarningModal = {\n        title: \"widget/customerorder/warning/unpick\",\n        isVisible: false,\n        hasTextInput: false,\n        buttons: [{\n          label: \"label/yes\",\n          type: \"success\",\n          isDefault: false,\n          closes: true,\n          action: function () {\n            var _action2 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee2() {\n              return _regeneratorRuntime().wrap(function _callee2$(_context2) {\n                while (1) switch (_context2.prev = _context2.next) {\n                  case 0:\n                    unpickCustomerOrder();\n                  case 1:\n                  case \"end\":\n                    return _context2.stop();\n                }\n              }, _callee2);\n            }));\n            function action() {\n              return _action2.apply(this, arguments);\n            }\n            return action;\n          }()\n        }, {\n          label: \"label/no\",\n          type: \"danger\",\n          isDefault: true,\n          closes: true,\n          action: function action() {}\n        }]\n      };\n      $scope.printerModal = {\n        title: \"widget/customerorder/printer\",\n        isVisible: false,\n        hasTextInput: false,\n        buttons: [{\n          label: \"widget/customerorder/windowsprinter\",\n          type: \"success\",\n          isDefault: false,\n          closes: true,\n          action: function () {\n            var _action3 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee3() {\n              var currentStatus;\n              return _regeneratorRuntime().wrap(function _callee3$(_context3) {\n                while (1) switch (_context3.prev = _context3.next) {\n                  case 0:\n                    currentStatus = customerOrderModal.customerOrder.status;\n                    customerOrderModal.customerOrder.status = 0;\n                    setTimeout(function () {\n                      showPrintWindow(currentStatus);\n                    }, 300);\n                  case 3:\n                  case \"end\":\n                    return _context3.stop();\n                }\n              }, _callee3);\n            }));\n            function action() {\n              return _action3.apply(this, arguments);\n            }\n            return action;\n          }()\n        }, {\n          label: \"widget/customerorder/receiptprinter\",\n          type: \"success\",\n          isDefault: false,\n          closes: true,\n          action: function () {\n            var _action4 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee4() {\n              return _regeneratorRuntime().wrap(function _callee4$(_context4) {\n                while (1) switch (_context4.prev = _context4.next) {\n                  case 0:\n                    customerOrderWidgetService.printPickList(customerOrderModal.customerOrder);\n                  case 1:\n                  case \"end\":\n                    return _context4.stop();\n                }\n              }, _callee4);\n            }));\n            function action() {\n              return _action4.apply(this, arguments);\n            }\n            return action;\n          }()\n        }, {\n          label: \"button/cancel\",\n          type: \"danger\",\n          isDefault: true,\n          closes: true,\n          action: function action() {}\n        }]\n      };\n      function buildCustomerOrderSearchParameters() {\n        $scope.searchParams = {\n          orderNo: {\n            description: \"Order Ref\",\n            id: \"orderNo\",\n            value: \"\"\n          },\n          firstName: {\n            description: \"First Name\",\n            id: \"firstName\",\n            value: \"\"\n          },\n          lastName: {\n            description: \"Last Name\",\n            id: \"lastName\",\n            value: \"\"\n          },\n          email: {\n            description: \"Email\",\n            id: \"email\",\n            value: \"\"\n          },\n          phoneNo: {\n            description: \"Phone No\",\n            id: \"phoneNo\",\n            value: \"\"\n          },\n          orderDate: {\n            description: \"Order Date\",\n            id: \"orderDate\",\n            value: \"\"\n          }\n        };\n        $translate([\"widget/customerorder/orderReference\", \"widget/customerorder/search/firstName\", \"widget/customerorder/search/lastName\", \"widget/customerorder/search/email\", \"widget/customerorder/search/phoneNo\", \"widget/customerorder/createdDate\"]).then(function (translations) {\n          $scope.searchParams.orderNo.description = translations[\"widget/customerorder/orderReference\"];\n          $scope.searchParams.firstName.description = translations[\"widget/customerorder/search/firstName\"];\n          $scope.searchParams.lastName.description = translations[\"widget/customerorder/search/lastName\"];\n          $scope.searchParams.email.description = translations[\"widget/customerorder/search/email\"];\n          $scope.searchParams.phoneNo.description = translations[\"widget/customerorder/search/phoneNo\"];\n          $scope.searchParams.orderDate.description = translations[\"widget/customerorder/createdDate\"];\n        });\n      }\n      function isSelected(index) {\n        return index === selectedIndex;\n      }\n      function isNotSelected(index) {\n        return !isSelected(index);\n      }\n      function setSelected(index) {\n        selectedIndex = index;\n      }\n      $scope.handleInput = function () {\n        var input = $scope.inputValue;\n        $scope.inputValue = \"\";\n        if (customerOrderModal.customerOrder.status == 1 || customerOrderModal.customerOrder.status == 2) {\n          var line = customerOrderModal.customerOrder.customerOrderLines.find(function (l) {\n            return l.article.ean == input;\n          });\n          if (line) {\n            if (line.quantityPicked < line.quantity) line.quantityPicked++;\n          } else {\n            notification.pop(\"error\", $scope.i18nArticleNotFound);\n          }\n        }\n      };\n      function showPrintWindow(currentStatus) {\n        var newWindow = window.open();\n        newWindow.document.write(document.getElementById(\"customerOrderOverview\").innerHTML);\n        customerOrderModal.customerOrder.status = currentStatus;\n        setTimeout(function () {\n          newWindow.print();\n          newWindow.close();\n        }, 300);\n      }\n      function searchCustomerOrders() {\n        keypadManager.hide();\n        getCustomerOrders();\n      }\n      function getCustomerOrders() {\n        customerOrderWidgetService.getCustomerOrders(getSearchParams()).then(function (response) {\n          $scope.data = [];\n          response.forEach(function (element) {\n            $scope.data.push(mapToTableData(element));\n          });\n          sort($scope.propertyName);\n        });\n      }\n      function sort(propertyName) {\n        if ($scope.propertyName === propertyName) {\n          $scope.sortAsc = !$scope.sortAsc;\n        } else {\n          $scope.sortAsc = true;\n          $scope.propertyName = propertyName;\n        }\n        if ($scope.sortAsc) {\n          $scope.data = $filter(\"orderBy\")($scope.data, propertyName);\n        } else {\n          $scope.data = $filter(\"orderBy\")($scope.data, \"-\" + propertyName);\n        }\n      }\n      function getSearchParams() {\n        var newSearchParams = {};\n        angular.forEach($scope.searchParams, function (element) {\n          newSearchParams[element.id] = element.value;\n        });\n        return newSearchParams;\n      }\n      function showCustomerOrder(_x) {\n        return _showCustomerOrder.apply(this, arguments);\n      }\n      function _showCustomerOrder() {\n        _showCustomerOrder = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee5(customerOrder) {\n          return _regeneratorRuntime().wrap(function _callee5$(_context5) {\n            while (1) switch (_context5.prev = _context5.next) {\n              case 0:\n                customerOrderModal.showModal = true;\n                customerOrderModal.dataLoaded = false;\n                _context5.next = 4;\n                return customerOrderWidgetService.GetAdditionalInfo(customerOrder);\n              case 4:\n                customerOrder = _context5.sent;\n                customerOrderModal.dataLoaded = true;\n                customerOrderModal.customerOrder = customerOrder;\n              case 7:\n              case \"end\":\n                return _context5.stop();\n            }\n          }, _callee5);\n        }));\n        return _showCustomerOrder.apply(this, arguments);\n      }\n      $scope.selectCustomerOrder = function (customerOrder) {\n        if (customerOrder) {\n          showCustomerOrder(angular.copy(customerOrder));\n        } else {\n          cancel();\n        }\n      };\n      function getDecimal(decimal) {\n        if (!decimal) return new Decimal(0).toFixed(2);\n        return decimal.toFixed(2);\n      }\n      function addToBasket() {\n        customerOrderWidgetService.addToReceipt(customerOrderModal.customerOrder);\n        $state.go(\"root.split.pos\");\n      }\n      function selectedAction(data) {\n        if (data) {\n          if (data == \"back\") {\n            $state.go(\"root.split.pos\");\n          } else if (data == \"printPicklist\") {\n            $scope.printerModal.isVisible = true;\n          } else if (data == \"startPicking\") {\n            startPickingCustomerOrder();\n          } else if (data == \"unpick\") {\n            $scope.unpickWarningModal.isVisible = true;\n          } else if (data == \"addToBasket\") {\n            addToBasket();\n          } else if (data == \"save\") {\n            saveCustomerOrder();\n          } else if (data == \"cancel\") {\n            cancelAction();\n          }\n        }\n      }\n      function cancelAction() {\n        if (hasQuantityPickedDifferences(customerOrderModal.customerOrder)) {\n          $scope.cancelWarningModal.isVisible = true;\n        } else {\n          closeCustomerOrderModal();\n          getCustomerOrders();\n        }\n      }\n      function closeCustomerOrderModal() {\n        customerOrderModal.customerOrder = {};\n        customerOrderModal.showModal = false;\n      }\n      function getOrginalCustomerOrder(id) {\n        return $scope.data.find(function (c) {\n          return c.id == id;\n        });\n      }\n      function hasQuantityPickedDifferences(customerOrder) {\n        var differences = false;\n        var originalCustomerOrder = getOrginalCustomerOrder(customerOrder.id);\n        angular.forEach(customerOrder.customerOrderLines, function (line) {\n          if (!differences) {\n            var result = originalCustomerOrder.customerOrderLines.find(function (l) {\n              return l.itemNo == line.itemNo;\n            });\n            if (line.quantityPicked !== result.quantityPicked) differences = true;\n          }\n        });\n        return differences;\n      }\n      function unpickCustomerOrder() {\n        angular.forEach(customerOrderModal.customerOrder.customerOrderLines, function (line) {\n          line.quantityPicked = 0;\n        });\n        customerOrderModal.customerOrder.status = 0;\n        customerOrderWidgetService.saveCustomerOrder(customerOrderModal.customerOrder).then(function () {\n          customerOrderModal.customerOrder.statusText = $scope.customerOrderStatusEnums[customerOrderModal.customerOrder.status];\n          getCustomerOrders();\n          notification.pop(\"succes\", $scope.i18nSaveCustomerOrder);\n        });\n      }\n      function startPickingCustomerOrder() {\n        customerOrderWidgetService.changeStatusCustomerOrder(customerOrderModal.customerOrder.id, 1).then(function () {\n          customerOrderModal.customerOrder.status = 1;\n          customerOrderModal.customerOrder.statusText = $scope.customerOrderStatusEnums[customerOrderModal.customerOrder.status];\n        });\n      }\n      function saveCustomerOrder() {\n        if (!hasQuantityPickedDifferences(customerOrderModal.customerOrder)) {\n          notification.pop(\"warn\", $scope.i18nSaveCustomerOrderNoChanges);\n          return;\n        }\n        var allPicked = true;\n        var partiallyPicked = false;\n        angular.forEach(customerOrderModal.customerOrder.customerOrderLines, function (line) {\n          if (line.quantityPicked != line.quantity) {\n            allPicked = false;\n            if (line.quantityPicked > 0) partiallyPicked = true;\n          }\n        });\n        if (allPicked) customerOrderModal.customerOrder.status = 3;\n        //ready\n        else if (partiallyPicked) customerOrderModal.customerOrder.status = 2; //partially picked\n\n        customerOrderWidgetService.saveCustomerOrder(customerOrderModal.customerOrder).then(function () {\n          notification.pop(\"succes\", $scope.i18nSaveCustomerOrder);\n          getCustomerOrders();\n          closeCustomerOrderModal();\n        });\n      }\n      function mapToTableData(customerOrder) {\n        customerOrder.createdDateFormatted = moment(customerOrder.createdDate).format(\"DD-MM-YYYY\");\n        customerOrder.statusText = $scope.customerOrderStatusEnums[customerOrder.status];\n        customerOrder.name = customerOrder.firstName + \" \" + customerOrder.lastName;\n        customerOrder.fulfillment = $scope.customerOrderTypeEnums[customerOrder.orderType];\n        return customerOrder;\n      }\n    }\n  };\n});\n","\"use strict\";\n\npos.directive(\"mpeditcustomerWidget\", function ($location, $translate, findCustomerService, notification, $log, posConfig) {\n  return {\n    templateUrl: \"views/widgets/widget-mpeditcustomer\",\n    controller: function controller($scope) {\n      $scope.customer = findCustomerService.getSelectedCustomer() || {};\n      $scope.currencyCodeError = false;\n      $scope.formSubmitted = false;\n      $scope.dropdownExpanded = false;\n      $scope.userCanChangeCurrencyCode = !$scope.customer.currencyCode;\n      $scope.userCanChangeExternalUniqueId = $scope.customer.externalUniqueId === undefined;\n      $scope.currencyCodes = Object.values(posConfig.getCurrencySetup()).map(function (x) {\n        return x.name;\n      });\n      var minDate = new Date(1900, 1, 0); //starts with 0 eg month january = 0\n      var m = moment(minDate);\n      $scope.minDate = m.format(\"YYYY-MM-DD\");\n      $scope.maxDate = moment().format(\"YYYY-MM-DD\");\n      $scope.editMode = Object.keys($scope.customer).length > 0;\n      $scope.emailPattern = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]{2,}$/;\n    },\n    link: function link(scope, el, attr, controller) {\n      var i18nCheckLog;\n      $translate([\"toast/check log\"]).then(function () {\n        i18nCheckLog = $translate.instant(\"toast/check log\");\n      });\n      scope.saveCustomer = saveCustomer;\n      scope.toggleDropdown = function () {\n        if (scope.userCanChangeCurrencyCode) {\n          scope.dropdownExpanded = !scope.dropdownExpanded;\n        }\n      };\n      scope.setCurrencyCode = function (currencyCode) {\n        scope.dropdownExpanded = false;\n        scope.customer.currencyCode = currencyCode;\n      };\n      function saveCustomer(formState) {\n        scope.formSubmitted = true;\n        if (!scope.customer.currencyCode) {\n          scope.currencyCodeError = true;\n          return;\n        }\n        if (!formState) return;\n        scope.customer.isActive = true;\n        if (findCustomerService.canUpdate(scope.customer)) findCustomerService.addUpdateCustomer(scope.customer).then(saveSuccess, saveFailed);\n      }\n      function saveSuccess(response) {\n        if (response) {\n          findCustomerService.setSelectedCustomer(response);\n          $location.path(\"widget/mpcustomer\");\n        }\n      }\n      function saveFailed(errorResponse) {\n        $log.debug(\"save customer error\");\n        $log.debug(errorResponse);\n        notification.pop(\"error\", i18nCheckLog);\n      }\n    }\n  };\n});\n","\"use strict\";\n\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _regeneratorRuntime() { \"use strict\"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return r; }; var t, r = {}, e = Object.prototype, n = e.hasOwnProperty, o = \"function\" == typeof Symbol ? Symbol : {}, i = o.iterator || \"@@iterator\", a = o.asyncIterator || \"@@asyncIterator\", u = o.toStringTag || \"@@toStringTag\"; function c(t, r, e, n) { return Object.defineProperty(t, r, { value: e, enumerable: !n, configurable: !n, writable: !n }); } try { c({}, \"\"); } catch (t) { c = function c(t, r, e) { return t[r] = e; }; } function h(r, e, n, o) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype); return c(a, \"_invoke\", function (r, e, n) { var o = 1; return function (i, a) { if (3 === o) throw Error(\"Generator is already running\"); if (4 === o) { if (\"throw\" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var u = n.delegate; if (u) { var c = d(u, n); if (c) { if (c === f) continue; return c; } } if (\"next\" === n.method) n.sent = n._sent = n.arg;else if (\"throw\" === n.method) { if (1 === o) throw o = 4, n.arg; n.dispatchException(n.arg); } else \"return\" === n.method && n.abrupt(\"return\", n.arg); o = 3; var h = s(r, e, n); if (\"normal\" === h.type) { if (o = n.done ? 4 : 2, h.arg === f) continue; return { value: h.arg, done: n.done }; } \"throw\" === h.type && (o = 4, n.method = \"throw\", n.arg = h.arg); } }; }(r, n, new Context(o || [])), !0), a; } function s(t, r, e) { try { return { type: \"normal\", arg: t.call(r, e) }; } catch (t) { return { type: \"throw\", arg: t }; } } r.wrap = h; var f = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var l = {}; c(l, i, function () { return this; }); var p = Object.getPrototypeOf, y = p && p(p(x([]))); y && y !== e && n.call(y, i) && (l = y); var v = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(l); function g(t) { [\"next\", \"throw\", \"return\"].forEach(function (r) { c(t, r, function (t) { return this._invoke(r, t); }); }); } function AsyncIterator(t, r) { function e(o, i, a, u) { var c = s(t[o], t, i); if (\"throw\" !== c.type) { var h = c.arg, f = h.value; return f && \"object\" == _typeof(f) && n.call(f, \"__await\") ? r.resolve(f.__await).then(function (t) { e(\"next\", t, a, u); }, function (t) { e(\"throw\", t, a, u); }) : r.resolve(f).then(function (t) { h.value = t, a(h); }, function (t) { return e(\"throw\", t, a, u); }); } u(c.arg); } var o; c(this, \"_invoke\", function (t, n) { function i() { return new r(function (r, o) { e(t, n, r, o); }); } return o = o ? o.then(i, i) : i(); }, !0); } function d(r, e) { var n = e.method, o = r.i[n]; if (o === t) return e.delegate = null, \"throw\" === n && r.i[\"return\"] && (e.method = \"return\", e.arg = t, d(r, e), \"throw\" === e.method) || \"return\" !== n && (e.method = \"throw\", e.arg = new TypeError(\"The iterator does not provide a '\" + n + \"' method\")), f; var i = s(o, r.i, e.arg); if (\"throw\" === i.type) return e.method = \"throw\", e.arg = i.arg, e.delegate = null, f; var a = i.arg; return a ? a.done ? (e[r.r] = a.value, e.next = r.n, \"return\" !== e.method && (e.method = \"next\", e.arg = t), e.delegate = null, f) : a : (e.method = \"throw\", e.arg = new TypeError(\"iterator result is not an object\"), e.delegate = null, f); } function w(t) { this.tryEntries.push(t); } function m(r) { var e = r[4] || {}; e.type = \"normal\", e.arg = t, r[4] = e; } function Context(t) { this.tryEntries = [[-1]], t.forEach(w, this), this.reset(!0); } function x(r) { if (null != r) { var e = r[i]; if (e) return e.call(r); if (\"function\" == typeof r.next) return r; if (!isNaN(r.length)) { var o = -1, a = function e() { for (; ++o < r.length;) if (n.call(r, o)) return e.value = r[o], e.done = !1, e; return e.value = t, e.done = !0, e; }; return a.next = a; } } throw new TypeError(_typeof(r) + \" is not iterable\"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, c(v, \"constructor\", GeneratorFunctionPrototype), c(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction), GeneratorFunction.displayName = c(GeneratorFunctionPrototype, u, \"GeneratorFunction\"), r.isGeneratorFunction = function (t) { var r = \"function\" == typeof t && t.constructor; return !!r && (r === GeneratorFunction || \"GeneratorFunction\" === (r.displayName || r.name)); }, r.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, c(t, u, \"GeneratorFunction\")), t.prototype = Object.create(v), t; }, r.awrap = function (t) { return { __await: t }; }, g(AsyncIterator.prototype), c(AsyncIterator.prototype, a, function () { return this; }), r.AsyncIterator = AsyncIterator, r.async = function (t, e, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(h(t, e, n, o), i); return r.isGeneratorFunction(e) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, g(v), c(v, u, \"Generator\"), c(v, i, function () { return this; }), c(v, \"toString\", function () { return \"[object Generator]\"; }), r.keys = function (t) { var r = Object(t), e = []; for (var n in r) e.unshift(n); return function t() { for (; e.length;) if ((n = e.pop()) in r) return t.value = n, t.done = !1, t; return t.done = !0, t; }; }, r.values = x, Context.prototype = { constructor: Context, reset: function reset(r) { if (this.prev = this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = \"next\", this.arg = t, this.tryEntries.forEach(m), !r) for (var e in this) \"t\" === e.charAt(0) && n.call(this, e) && !isNaN(+e.slice(1)) && (this[e] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0][4]; if (\"throw\" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(r) { if (this.done) throw r; var e = this; function n(t) { a.type = \"throw\", a.arg = r, e.next = t; } for (var o = e.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i[4], u = this.prev, c = i[1], h = i[2]; if (-1 === i[0]) return n(\"end\"), !1; if (!c && !h) throw Error(\"try statement without catch or finally\"); if (null != i[0] && i[0] <= u) { if (u < c) return this.method = \"next\", this.arg = t, n(c), !0; if (u < h) return n(h), !1; } } }, abrupt: function abrupt(t, r) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var n = this.tryEntries[e]; if (n[0] > -1 && n[0] <= this.prev && this.prev < n[2]) { var o = n; break; } } o && (\"break\" === t || \"continue\" === t) && o[0] <= r && r <= o[2] && (o = null); var i = o ? o[4] : {}; return i.type = t, i.arg = r, o ? (this.method = \"next\", this.next = o[2], f) : this.complete(i); }, complete: function complete(t, r) { if (\"throw\" === t.type) throw t.arg; return \"break\" === t.type || \"continue\" === t.type ? this.next = t.arg : \"return\" === t.type ? (this.rval = this.arg = t.arg, this.method = \"return\", this.next = \"end\") : \"normal\" === t.type && r && (this.next = r), f; }, finish: function finish(t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[2] === t) return this.complete(e[4], e[3]), m(e), f; } }, \"catch\": function _catch(t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[0] === t) { var n = e[4]; if (\"throw\" === n.type) { var o = n.arg; m(e); } return o; } } throw Error(\"illegal catch attempt\"); }, delegateYield: function delegateYield(r, e, n) { return this.delegate = { i: x(r), r: e, n: n }, \"next\" === this.method && (this.arg = t), f; } }, r; }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"next\", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"throw\", n); } _next(void 0); }); }; }\npos.directive(\"mpeditinsuranceWidget\", function (insuranceService, $translate, receipt, keypadManager, posStorage, $state, notification, indexdb) {\n  return {\n    templateUrl: \"views/widgets/widget-mpeditinsurance\",\n    controller: function controller($scope, ModalService, posConfig, eventBus) {\n      $scope.formSubmitted = false;\n      $scope.editMode = $scope.customer !== false;\n      $scope.emailPattern = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]{2,}$/;\n      $scope.showLoading = false;\n      $scope.modal = ModalService;\n      $scope.loadingModalContent = {};\n      $scope.customer = {};\n      init();\n      function init() {\n        return _init.apply(this, arguments);\n      }\n      function _init() {\n        _init = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee2() {\n          var translations, solidConfig;\n          return _regeneratorRuntime().wrap(function _callee2$(_context2) {\n            while (1) switch (_context2.prev = _context2.next) {\n              case 0:\n                _context2.next = 2;\n                return $translate([\"widget/insurance/loading/title\", \"widget/insurance/loading/description\"]);\n              case 2:\n                translations = _context2.sent;\n                solidConfig = posConfig.getShopFeatures().solid || {\n                  values: {\n                    defaultCountry: \"\"\n                  }\n                };\n                $scope.customer.Country = solidConfig.values.defaultCountry;\n                $scope.loadingModalContent = {\n                  title: translations[\"widget/insurance/loading/title\"],\n                  description: \"\".concat(translations[\"widget/insurance/loading/description\"], \"...\")\n                };\n              case 6:\n              case \"end\":\n                return _context2.stop();\n            }\n          }, _callee2);\n        }));\n        return _init.apply(this, arguments);\n      }\n      $scope.onSsnChange = /*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee() {\n        var customer;\n        return _regeneratorRuntime().wrap(function _callee$(_context) {\n          while (1) switch (_context.prev = _context.next) {\n            case 0:\n              $scope.modal.show(\"loadingModal\");\n              _context.prev = 1;\n              _context.next = 4;\n              return insuranceService.getCustomer($scope.customer.PersonNumber);\n            case 4:\n              customer = _context.sent;\n              if (customer) {\n                $scope.customer.FirstName = customer.firstName;\n                $scope.customer.LastName = customer.lastName;\n                $scope.customer.StreetAddress = customer.streetAddress;\n                $scope.customer.PostalCode = customer.postalCode;\n                $scope.customer.City = customer.city;\n                $scope.customer.CoAddress = customer.coAddress;\n              }\n            case 6:\n              _context.prev = 6;\n              $scope.modal.hide(\"loadingModal\");\n              return _context.finish(6);\n            case 9:\n            case \"end\":\n              return _context.stop();\n          }\n        }, _callee, null, [[1,, 6, 9]]);\n      }));\n      function loadConfig() {\n        init();\n      }\n      eventBus.subscribe(eventBus.events.pos.newConfig, $scope, loadConfig);\n    },\n    link: function () {\n      var _link = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee4(scope, ele, attr) {\n        var insuranceItemGroup, getSelectedItem;\n        return _regeneratorRuntime().wrap(function _callee4$(_context4) {\n          while (1) switch (_context4.prev = _context4.next) {\n            case 0:\n              getSelectedItem = function _getSelectedItem() {\n                var insuredItemIndex = receipt.selectedItemLineIndex;\n                return receipt.getReceipt().items[insuredItemIndex];\n              };\n              scope.inputActive = false;\n              scope.cancelInputActive = false;\n              scope.customer = insuranceService.getCachedCustomer();\n              scope.selectedItemLineIndex = null;\n              scope.formSubmitted = false;\n              scope.emailPattern = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]{2,}$/;\n              scope.selectedItem = getSelectedItem();\n              _context4.next = 10;\n              return indexdb.itemgroups.getAll();\n            case 10:\n              insuranceItemGroup = _context4.sent.filter(function (itemgroup) {\n                return itemgroup.name == \"Insurance\";\n              })[0];\n              if (insuranceItemGroup) {\n                _context4.next = 18;\n                break;\n              }\n              _context4.t0 = notification;\n              _context4.next = 15;\n              return $translate(\"widget/insurance/error/missingitemgroup\");\n            case 15:\n              _context4.t1 = _context4.sent;\n              _context4.t0.pop.call(_context4.t0, \"error\", _context4.t1);\n              $state.go(\"root.split.pos\");\n            case 18:\n              scope.insureItem = /*#__PURE__*/function () {\n                var _ref2 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee3(formState) {\n                  var insuranceNumberResponse, insuranceNumberText, itemToBeInsured, itemPrice, insuranceAmount;\n                  return _regeneratorRuntime().wrap(function _callee3$(_context3) {\n                    while (1) switch (_context3.prev = _context3.next) {\n                      case 0:\n                        // If user input is not valid reject request for insurance\n                        scope.formSubmitted = true;\n                        if (formState) {\n                          _context3.next = 3;\n                          break;\n                        }\n                        return _context3.abrupt(\"return\");\n                      case 3:\n                        _context3.prev = 3;\n                        _context3.next = 6;\n                        return insuranceService.getInsurance(scope.customer);\n                      case 6:\n                        insuranceNumberResponse = _context3.sent;\n                        _context3.next = 13;\n                        break;\n                      case 9:\n                        _context3.prev = 9;\n                        _context3.t0 = _context3[\"catch\"](3);\n                        notification.pop(\"error\", _context3.t0.message);\n                        return _context3.abrupt(\"return\");\n                      case 13:\n                        if (insuranceNumberResponse) {\n                          _context3.next = 15;\n                          break;\n                        }\n                        return _context3.abrupt(\"return\");\n                      case 15:\n                        _context3.next = 17;\n                        return $translate(\"widget/insurance/insurancenumberlabel\");\n                      case 17:\n                        insuranceNumberText = _context3.sent;\n                        itemToBeInsured = getSelectedItem();\n                        if (itemToBeInsured) {\n                          _context3.next = 21;\n                          break;\n                        }\n                        return _context3.abrupt(\"return\");\n                      case 21:\n                        // Mark item as being insured\n                        itemToBeInsured.insuranceNumber = insuranceNumberResponse;\n                        itemPrice = itemToBeInsured.effectiveSalesPrice;\n                        insuranceAmount = insuranceService.getPremiumPrice(itemPrice);\n                        receipt.addInsurance(insuranceAmount, insuranceItemGroup.name, insuranceItemGroup.no, insuranceItemGroup.vat, insuranceNumberResponse);\n                        receipt.addEnteredText(insuranceNumberText + insuranceNumberResponse, receipt.selectedItemLineIndex);\n                        receipt.getReceipt().items.move(receipt.selectedItemLineIndex, receipt.selectedItemLineIndex + 1);\n\n                        // RESET ALL VALUES\n                        scope.toggleInput();\n                        insuranceService.cacheCustomer(scope.customer);\n                        $state.go(\"root.split.pos\");\n                      case 30:\n                      case \"end\":\n                        return _context3.stop();\n                    }\n                  }, _callee3, null, [[3, 9]]);\n                }));\n                return function (_x4) {\n                  return _ref2.apply(this, arguments);\n                };\n              }();\n              scope.cancelInsurance = function () {\n                insuranceService.cancelInsurance(scope.InsuranceNumber);\n                scope.toggleCancelInput();\n              };\n              scope.resetValues = function () {\n                scope.InsuranceNumber = \"\";\n                scope.selectedItemLineIndex = null;\n                scope.customer = {};\n              };\n              scope.toggleInput = function () {\n                if (scope.inputActive) {\n                  scope.inputActive = false;\n                  scope.resetValues();\n                } else {\n                  scope.inputActive = true;\n                  scope.selectedItemLineIndex = receipt.selectedItemLineIndex.toString();\n                }\n              };\n              scope.toggleCancelInput = function () {\n                scope.InsuranceNumber = \"\";\n                scope.cancelInputActive = scope.cancelInputActive ? false : true;\n              };\n              scope.closeOnscreenKeyboard = function () {\n                $timeout(keypadManager.hide, 0);\n              };\n              Array.prototype.move = function (from, to) {\n                this.splice(to, 0, this.splice(from, 1)[0]);\n              };\n            case 25:\n            case \"end\":\n              return _context4.stop();\n          }\n        }, _callee4);\n      }));\n      function link(_x, _x2, _x3) {\n        return _link.apply(this, arguments);\n      }\n      return link;\n    }()\n  };\n});\n","\"use strict\";\n\npos.directive(\"mpproductimageWidget\", function () {\n  return {\n    templateUrl: \"views/widgets/widget-mpproduct-image\",\n    controller: function controller($scope, $rootScope) {\n      $scope.currentItem = null;\n      $scope.$watch(function () {\n        return $rootScope.selectedItem;\n      }, function (item) {\n        return onSelectedItemChange(item);\n      });\n      function onSelectedItemChange(item) {\n        $scope.currentItem = item;\n      }\n    }\n  };\n});\n","\"use strict\";\n\npos.directive(\"mpstockWidget\", function ($rootScope, masterItemStockService, storeService) {\n  return {\n    templateUrl: \"views/widgets/widget-mpstock\",\n    controller: function controller($scope) {},\n    link: function link(scope, ele, attr) {\n      scope.title = \"\";\n      scope.getStock = function (vert, horz) {\n        if (scope.response) {\n          var stockItems = scope.response.stock.filter(function (o) {\n            return o.vert == vert && o.horz == horz;\n          });\n          return stockItems ? stockItems.reduce(function (acc, obj) {\n            if (!obj.active) {\n              return;\n            } else {\n              if (!acc) return obj.quantity;else {\n                return acc + obj.quantity;\n              }\n            }\n          }, 0) : 0;\n        }\n      };\n\n      //Stores\n      storeService.getStores().then(function (response) {\n        scope.stores = response;\n        scope.selectedStore = scope.stores.length > 0 ? scope.stores[0].id : 0;\n        generateStoreArray($rootScope.selectedItem.parameter3, masterItemStockService);\n      });\n\n      //Stock\n      var generateStoreArray = function generateStoreArray(itemNo, masterItemStockService) {\n        masterItemStockService.getByMasterItemStock(itemNo, scope.selectedStore).then(function (response) {\n          scope.response = response;\n          var title = response.verticalDimensions != null ? response.verticalDimensions.name : \"\";\n          if (response.horizontalDimensions != null) {\n            title = title.length > 0 ? title + \" / \" + response.horizontalDimensions.name : response.horizontalDimensions.name;\n          }\n          if (!title) title = $rootScope.selectedItem.parameter4;\n          scope.title = title;\n        });\n      };\n      scope.storeChanged = function () {\n        generateStoreArray($rootScope.selectedItem.parameter3, masterItemStockService);\n      };\n    }\n  };\n});\n","\"use strict\";\n\npos.directive(\"mpweborderWidget\", function (webOrderWidgetService, $translate, keypadManager, hideDivSuppressor, notification, webOrderTypeEnum, $state, receipt) {\n  return {\n    templateUrl: \"views/widgets/widget-mpweborder\",\n    controller: function controller($scope, $log) {\n      buildWebOrderSearchParameters();\n      $scope.paginationSize = 20;\n      $scope.after = 0;\n      $scope.searchWebOrder = searchWebOrder;\n      $scope.getMoreWebOrders = getMoreWebOrders;\n      $scope.buildWebOrderSearchParameters = buildWebOrderSearchParameters;\n      $scope.addToReceipt = addToReceipt;\n      $scope.isSelected = isSelected;\n      $scope.isNotSelected = isNotSelected;\n      $scope.setSelected = setSelected;\n      $scope.isClickAndCollect = isClickAndCollect;\n      $scope.isOrderInStore = isOrderInStore;\n      $scope.skipWebOrder = skipWebOrder;\n      $scope.showWebOrder = showWebOrder;\n      $scope.weborderModal = webOrderWidgetService.getWeborderModal(\"picklist\");\n      var selectedIndex = -1;\n      var i18nCheckLog;\n      var i18nMultipleWebordersInReceipt;\n      $translate([\"toast/check log\", \"weborder/error/multipleordersinreceipt\"]).then(function () {\n        i18nCheckLog = $translate.instant(\"toast/check log\");\n        i18nMultipleWebordersInReceipt = $translate.instant(\"weborder/error/multipleordersinreceipt\");\n      });\n      searchWebOrder();\n      function buildWebOrderSearchParameters() {\n        $scope.searchParams = {\n          firstName: {\n            name: \"FirstName\",\n            value: \"\"\n          },\n          lastName: {\n            name: \"LastName\",\n            value: \"\"\n          },\n          email: {\n            name: \"Email\",\n            value: \"\"\n          },\n          phoneNo: {\n            name: \"PhoneNo\",\n            value: \"\"\n          },\n          orderNo: {\n            name: \"OrderNo\",\n            value: \"\"\n          }\n        };\n        $translate([\"widget/webOrderFilter/searchFirstName\", \"widget/webOrderFilter/searchLastName\", \"widget/webOrderFilter/searchEmail\", \"widget/webOrderFilter/searchPhoneNo\", \"widget/webOrderFilter/searchOrderNo\"]).then(function (translations) {\n          $scope.searchParams.firstName.name = translations[\"widget/webOrderFilter/searchFirstName\"];\n          $scope.searchParams.lastName.name = translations[\"widget/webOrderFilter/searchLastName\"];\n          $scope.searchParams.email.name = translations[\"widget/webOrderFilter/searchEmail\"];\n          $scope.searchParams.phoneNo.name = translations[\"widget/webOrderFilter/searchPhoneNo\"];\n          $scope.searchParams.orderNo.name = translations[\"widget/webOrderFilter/searchOrderNo\"];\n        });\n      }\n      function searchWebOrder() {\n        keypadManager.hide();\n        if (hideDivSuppressor.target) hideDivSuppressor.target.hide();\n        $scope.searchResults = [];\n        $scope.after = 0;\n        $scope.fetchFailed = false;\n        getMoreWebOrders();\n      }\n      function getMoreWebOrders() {\n        webOrderWidgetService.getMoreWebOrders($scope.searchParams, $scope.after, $scope.paginationSize).then(successCallback, errorCallback);\n      }\n      function addToReceipt(webOrder) {\n        if (receipt.getReceipt().items.some(function (i) {\n          return i.webOrderNumber;\n        })) {\n          notification.pop(\"error\", i18nMultipleWebordersInReceipt);\n          return;\n        }\n        webOrderWidgetService.addToReceipt(webOrder);\n        $state.go(\"root.split.pos\");\n      }\n      function isSelected(index) {\n        return index === selectedIndex;\n      }\n      function isNotSelected(index) {\n        return !isSelected(index);\n      }\n      function setSelected(index) {\n        selectedIndex = index;\n      }\n      function isOrderInStore(webOrder) {\n        return webOrder.orderType === webOrderTypeEnum.orderInStore;\n      }\n      function isClickAndCollect(webOrder) {\n        return webOrder.orderType === webOrderTypeEnum.clickAndCollect;\n      }\n      function skipWebOrder(webOrder) {\n        webOrderWidgetService.skipWebOrder(webOrder).then(function (res) {\n          var index = $scope.searchResults.findIndex(function (o) {\n            return o.orderNo === webOrder.orderNo;\n          });\n          if (index > -1) {\n            if (res.data && res.data.orderNo === webOrder.orderNo) {\n              $scope.searchResults[index] = res.data;\n            } else {\n              $scope.searchResults.splice(index, 1);\n            }\n          }\n        });\n      }\n      function showWebOrder(webOrder) {\n        webOrderWidgetService.showWebOrderModalFromWeborder(webOrder);\n      }\n      function successCallback(response) {\n        for (var i = 0; i < response.length; i++) {\n          $scope.searchResults.push(response[i]);\n        }\n        if (response.length === 0) {\n          $scope.fetchFailed = true;\n        }\n        $scope.after += $scope.paginationSize;\n      }\n      function errorCallback(errorResponse) {\n        $log.debug(\"searchByParameter error\");\n        $log.debug(errorResponse);\n        notification.pop(\"error\", i18nCheckLog);\n      }\n    },\n    link: function link(scope, el, attr, controller) {\n      scope.reset = reset;\n      function reset() {\n        scope.buildWebOrderSearchParameters();\n        scope.searchWebOrder();\n      }\n    }\n  };\n});\n","\"use strict\";\n\n// eager load the intersolve service if the loyaltyintersolve widget is in the widget list\n// this ensures that all the services watchers and POS manipulations get's triggered\n// immediately instead of waiting for the widget to load the service (due to the depdenency).\n// Basically we're creating a \"fake\" dependency with the $injector service to eager load the intersolve service\npos.run(function (posConfig, $injector, $log, eventBus) {\n  function loadConfig() {\n    // we need to await that posConfig is ready, then we know the latest config is loaded\n    posConfig.whenReady().then(function () {\n      var widgets = posConfig.getWidgets();\n      // search for loyaltyintersolve in the list of widgets\n      for (var i = 0; i < widgets.length; i++) {\n        var widget = widgets[i];\n        if (widget.name === \"payplaza\") {\n          // eager load the service by getting it with the $injector\n          $log.debug(\"eager load payplaza\");\n          return $injector.get(\"payplazaService\");\n        }\n      }\n    });\n  }\n  loadConfig();\n  eventBus.subscribe(eventBus.events.pos.newConfig, null, loadConfig);\n});\npos.factory(\"payplazaService\", function (posStorage, payPlazaRepository, $q, receipt, $rootScope, notification, inputService, $window, $translate, paymentService, payPlazaCard, defaultPaymentType, posConfig, sales, $timeout, backend, $interval, $log) {\n  var service = {\n    // the connected state we get from PayPlaza from getConnectionState\n    scannerConnected: false,\n    // describes our intent - are we trying to have the scanner running or not\n    scanning: false,\n    // holds the request promise if getBarcode is running\n    barcodePollPromise: null\n  };\n  // If CardTerminal is recovering and status is ongoing, we need to check again.\n  var terminalRecovery = {\n    isInitialized: false,\n    isOngoing: false,\n    retries: 0,\n    maxRetries: 10,\n    status: \"\",\n    response: \"\",\n    intervalDelay: 5000,\n    blockedPaymentLineId: null\n  };\n  var intervalPromise;\n  var noScanningStates = [\"root.login\"];\n  var doingOnFocusCheck = false;\n  var i18nNoAssociationId,\n    // Cannot start scanner without association Id. Please reassociate the scanner\n    i18nNoSucessActivation,\n    // Scanner activation unsuccessful\n    i18nBarcodeFailed,\n    // Failed to get barcode from Pair2Pay. Service stopped.\n    i18nAssFailedTitle,\n    // Scanner assocation unsuccessful\n    i18nAssFailedBody,\n    // An error occured while attempting to pair the Pair2Pay Barcode Scanner. Please try again.\n    i18nClrkSignatureRqrd,\n    // Cashier signature is required\n    i18nCustSignatureRqrd; // Customer signature is required\n\n  var payplazaPaymentStrategy = {\n    makePayment: payPlazaCard.makePayment,\n    responseSteps: [{\n      success: defaultPaymentType.addPaymentToReceipt\n    }, {\n      success: payPlazaCard.handlePayplazaTransaction\n    }, {\n      success: defaultPaymentType.isPaymentEnough,\n      error: payPlazaCard.cardPaymentRejected\n    }, {\n      success: defaultPaymentType.doChange\n    }, {\n      success: defaultPaymentType.guaranteedFinishReceipt\n    }]\n  };\n  paymentService.setPaymentStrategy(\"payPlazaCard\", payplazaPaymentStrategy);\n  var paymentTypeConfigs = posConfig.getPaymentTypeConfigs();\n  for (var i = 0; i < paymentTypeConfigs.length; i++) {\n    var paymentTypeConfig = paymentTypeConfigs[i];\n    if (paymentTypeConfig.type !== \"Card\") continue;\n    paymentTypeConfig.paymentStrategy = \"payPlazaCard\";\n    break;\n  }\n\n  // when the service is loaded we'll try and see if there's an active scanning\n  // connection we can resume\n  tryResumeScanning();\n\n  // when the service is loaded we'll try and see if there's an unAcknowledge\n  // transaction that needs to be wrapped up\n  recoverTerminalStatus();\n  $translate([\"toast/payplaza/noassociationid\", \"toast/payplaza/nosuccessactivation\", \"toast/payplaza/barcodefailed\", \"toast/payplaza/associationfailedtitle\", \"toast/payplaza/associationfailedbody\", \"toast/payplaza/cashiersignaturerequired\", \"toast/payplaza/customersignaturerequired\"]).then(function (translations) {\n    i18nNoAssociationId = translations[\"toast/payplaza/noassociationid\"];\n    i18nNoSucessActivation = translations[\"toast/payplaza/nosuccessactivation\"];\n    i18nBarcodeFailed = translations[\"toast/payplaza/barcodefailed\"];\n    i18nAssFailedTitle = translations[\"toast/payplaza/associationfailedtitle\"];\n    i18nAssFailedBody = translations[\"toast/payplaza/associationfailedbody\"];\n    i18nClrkSignatureRqrd = translations[\"toast/payplaza/cashiersignaturerequired\"];\n    i18nCustSignatureRqrd = translations[\"toast/payplaza/customersignaturerequired\"];\n  });\n\n  // If we start the app and the nonce exists then it's because we need to continue the process\n  // of obtaining an associationId - the nonce will be cleared once used\n  // this only happens when the service is loaded which in turn only happens when\n  // the widget has been loaded at least once\n  if (typeof $window.onfocus !== \"function\") {\n    $window.onfocus = function () {\n      // iOS Safari apparently triggers onfocus twice when resuming the browser, so we do some dirty hacking\n      // to make sure that the logic is only executed once\n      if (doingOnFocusCheck) return;\n      doingOnFocusCheck = true;\n      $log.debug(moment().format(\"HH:mm:ss.SS\") + \": window on focus fired - checking if nonce exists\");\n      if (getScannerNonce()) {\n        $log.debug(moment().format(\"HH:mm:ss.SS\") + \": nonce existed - getting association Id from webservice\");\n        payPlazaRepository.getAssociationId(getScannerNonce()).then(function (response) {\n          var associationId = response.data.getAssociationIdResponse.associationId;\n          setScannerNonce(null); // destroy after using to get associationId\n          return payPlazaRepository.finalizeAssociation(associationId).then(function (response) {\n            var data = response.data.finalizeAssociationResponse;\n            var scanServiceBaseUrl = data.scanServiceBaseURL;\n            var ecrId = data.ecrId;\n            setScannerAssociationId(associationId);\n            // only set the ECR ID if it has a truthy value so we don't risc removing it\n            if (ecrId) service.setEftId(ecrId);\n            payPlazaRepository.setScannerServiceBaseUrl(scanServiceBaseUrl);\n            service.scannerConnected = true;\n            service.startScannerPull();\n          });\n        })[\"catch\"](scannerAssociationErrorHandler)[\"finally\"](function () {\n          doingOnFocusCheck = false;\n        });\n        // if there's no nonce but instead an associationId, the app probably has just been suspended\n        // and we can continue pulling\n      } else {\n        tryResumeScanning();\n      }\n    };\n  }\n\n  // turn off the scanner on the login page and turn it on, on every other page\n  // TODO: Fix this - it doesn't work right now\n  $rootScope.$on(\"$stateChangeSuccess\", function (event, toState, toParams, fromState, fromParams) {\n    if (noScanningStates.indexOf(toState.name) >= 0 && service.barcodePollPromise) stopGetBarcode();\n    if (noScanningStates.indexOf(toState.name) === -1 && !service.barcodePollPromise && service.scannerConnected) tryResumeScanning();\n  });\n\n  // when the service is created we want to check if we already know an associationId and if so\n  // we check if the connection with it is still active and begin polling the scanner\n  function tryResumeScanning() {\n    service.scanning = true;\n    $log.debug(moment().format(\"HH:mm:ss.SS\") + \": checking association Id to see if we should getConnectionState\");\n    if (getScannerAssociationId() && !isScanning()) {\n      $log.debug(moment().format(\"HH:mm:ss.SS\") + \": getting connection state\");\n      payPlazaRepository.getConnectionState().then(function (response) {\n        var connectionState = response.data.connectionStateResponse;\n        service.scannerConnected = connectionState.isActive && connectionState.terminalIsConnected;\n        if (service.scannerConnected) service.startScannerPull();else {\n          notification.pop(\"warn\", \"Scanner connection closed by PayPlaza service\");\n          service.disconnectScanner();\n        }\n      })[\"catch\"](scannerAssociationErrorHandler);\n    }\n  }\n\n  // Recovery\n  // When the factory is initialized, the API is queried for unAcknowledged/ongoing transaction\n  function recoverTerminalStatus() {\n    $log.debug(\"Recovering terminal status\");\n    var eftid = posStorage.get(\"eftid\");\n    // If there is not eftID available, the API hasn't enough information to check the status. Exiting.\n    if (!eftid) return;\n    initializeTerminalRecovery();\n    intervalPromise = $interval(function () {\n      getTerminalStatus(eftid);\n    }, terminalRecovery.intervalDelay);\n  }\n  function initializeTerminalRecovery() {\n    terminalRecovery.isOngoing = true;\n    // Check if there is a card payment that's not completed. Setting it's status to awaiting receipt\n    // to ensure that the user doesn't use the retry or delete functions of the card payment line.\n    // Putting status to awaitingResponse displays the cancel button on the payment line, but that is\n    // blocked while terminalRecovery is ongoing.\n    var payments = receipt.getReceipt().payments;\n    for (var i = payments.length - 1; i >= 0; i--) {\n      var payment = payments[i];\n      if (!payment.completed) {\n        terminalRecovery.blockedPaymentLineId = payment.uuid;\n        payment.awaitingResponse = true;\n        payment.displayText = \"Recovering Card Terminal Action. Please wait...\";\n        break;\n      }\n    }\n  }\n  function finalizeTerminalRecovery(recoveredPaymentId) {\n    terminalRecovery.isOngoing = false;\n    $interval.cancel(intervalPromise);\n\n    // If recovered payment is not the same as the paymentLine initially blocked (can this happen?)\n    // changing the awaitingResponse on the blockedPaymentLine back to false\n    if (recoveredPaymentId) {\n      if (recoveredPaymentId != terminalRecovery.blockedPaymentLineId) {\n        var blockedPaymentLine = getPayment(terminalRecovery.blockedPaymentLineId);\n        blockedPaymentLine.awaitingResponse = false;\n      }\n    }\n  }\n  function getTerminalStatus(eftid) {\n    payPlazaRepository.api.getTerminalStatus(eftid).then(function (success) {\n      terminalRecovery.response = success.data;\n      terminalRecovery.status = terminalRecovery.response.result;\n      $log.debug(\"TerminalRecovery Status: \" + terminalRecovery.status);\n      resolveTerminalStatus();\n    });\n  }\n  function resolveTerminalStatus() {\n    switch (terminalRecovery.status) {\n      case \"READY\":\n        finalizeTerminalRecovery();\n        break;\n      case \"ONGOING\":\n        if (terminalRecovery.retries === 0) {\n          handleOngoingRecoveredPayment(terminalRecovery.response);\n          notification.pop(\"warning\", \"Card Terminal Transaction is Ongoing\", \"Resolving...\");\n        }\n        terminalRecovery.retries++;\n        if (terminalRecovery.retries === terminalRecovery.maxRetries) {\n          finalizeTerminalRecovery();\n        }\n        break;\n      default:\n        service.acknowledgePayment();\n        $interval.cancel(intervalPromise);\n        if (terminalRecovery.response) {\n          resolveRecoveredPayment(terminalRecovery.response);\n        }\n    }\n  }\n  function resolveRecoveredPayment(terminalResponse) {\n    $log.debug(\"Resolving recovered payment\");\n    var payments = receipt.getReceipt().payments;\n    var receiptPayment = getPayment(terminalResponse.paymentId);\n\n    // TODO: Can we use something else to determine if ther clerk has the payments\n    // in front of him and we should do a payment wrapup?\n    if (window.location.hash == \"#/payment\") {\n      notification.pop(\"warning\", \"CardTerminal Action Recovered\", \"Finishing Transaction\");\n\n      // Fill in the relevant information to the payment\n      var payPlazaReceipt = angular.fromJson(terminalResponse.receipt);\n      receiptPayment.cardName = \"\";\n      receiptPayment.completed = false;\n      if (terminalResponse.result === \"SUCCESS\") {\n        receiptPayment.cardName = payPlazaReceipt.printCommandMessage ? payPlazaReceipt.printCommandMessage.appPreferredName : \"\";\n        receiptPayment.completed = true;\n      }\n      receiptPayment.awaitingResponse = false;\n      receiptPayment.displayText = terminalResponse.result;\n      receiptPayment.cardReceipt = JSON.stringify(terminalResponse.formattedReceipt);\n      receipt.persist();\n      var fakeResponse = {\n        config: {\n          device: backend.getDeviceByIndex(backend.defaultDevice)\n        },\n        data: {\n          d: receiptPayment\n        },\n        payPlazaResponse: terminalResponse\n      };\n      if (terminalResponse.result !== \"SUCCESS\") {\n        // If the payment did not go through and a receipt is in place, it is printed\n        fakeResponse.cardRejected = true;\n        if (terminalResponse.formattedReceipt && terminalResponse.formattedReceipt.length > 0) {\n          service.printPayPlazaTerminalReceipt(JSON.stringify(terminalResponse.formattedReceipt));\n        }\n      }\n      $rootScope.$emit(\"payment:card:recover\", fakeResponse);\n    } else {\n      // TODO: Check if this is login screen - then login user and finalize the payment\n      // to get the correct data to DdD backoffice.\n      notification.pop(\"warning\", \"Card Terminal Recovery\", \"Receipt printed\");\n      // Sending the terminal receipt for the transaction to the ARM for printing\n      if (terminalResponse.formattedReceipt && terminalResponse.formattedReceipt.length > 0) {\n        service.printPayPlazaTerminalReceipt(JSON.stringify(terminalResponse.formattedReceipt));\n      }\n    }\n    finalizeTerminalRecovery(receiptPayment.uuid);\n  }\n  function handleOngoingRecoveredPayment(terminalResponse) {\n    // If there is an ongoing transaction, the paymentline is updated\n    var payments = receipt.getReceipt().payments;\n    var receiptPayment = getPayment(terminalResponse.paymentId);\n    if (receiptPayment) {\n      receiptPayment.completed = false;\n      receiptPayment.awaitingResponse = true;\n      receiptPayment.displayText = \"Card Terminal Action is Ongoing. Please wait...\";\n    }\n  }\n  service.connectScanner = function () {\n    setScannerNonce(null);\n    setScannerAssociationId(null);\n    payPlazaRepository.initializeAssociation().then(function (response) {\n      var data = response.data.initializeAssociationResponse;\n      var customUrl = data.customURL;\n      var nonce = data.associationNonce;\n      setScannerNonce(nonce);\n      //var url = customUrl + '?associationNonce=' + nonce;\n      var url = customUrl + \"DdDPOS/getID?\" + nonce;\n      $log.debug(moment().format(\"HH:mm:ss.SS\") + \": Opening deep link to: \" + url);\n      window.location = url;\n    })[\"catch\"](scannerAssociationErrorHandler);\n  };\n  service.disconnectScanner = function () {\n    setScannerNonce(null);\n    setScannerAssociationId(null);\n    stopGetBarcode();\n    service.scannerConnected = false;\n  };\n  service.startScannerPull = function () {\n    var associationId = getScannerAssociationId();\n    if (!associationId) return notification.pop(\"error\", i18nNoAssociationId);\n    payPlazaRepository.activateAssociation(associationId).then(function (response) {\n      getBarcode(associationId);\n    })[\"catch\"](function (errorResponse) {\n      $log.debug(errorResponse);\n      notification.pop(\"warning\", i18nNoSucessActivation);\n    });\n  };\n  service.isScanning = isScanning;\n  function isScanning() {\n    if (!service.barcodePollPromise) return false;\n    return !service.barcodePollPromise.isResolved;\n  }\n  function getBarcode(associationId) {\n    $log.debug(moment().format(\"HH:mm:ss.SS\") + \": polling barcode...\");\n    // save the promise so we can cancel it if needed\n    service.barcodePollPromise = payPlazaRepository.getBarcode(associationId);\n    // attach promise functions - note this cannot be a single line, because the promise from the last chain function will be saved then\n    service.barcodePollPromise.then(function (response) {\n      $log.debug(response);\n      var data = response.data.barcodeResponse;\n      if (!data || data === \"GET_BARCODE_ERROR\" || data.barcode === \"No data\") return getBarcode(associationId);\n      if (response.status === -1 /* aborted */ || data.error === \"NOT ACTIVE\") return;\n      inputService.insertString(data.barcode);\n      inputService.doEnter();\n      getBarcode(associationId);\n    })[\"catch\"](function (errorResponse) {\n      // if the server returns a 500 Internal Server Error - then we just stop\n      if (errorResponse.status === 500) {\n        $log.debug(errorResponse);\n        notification.pop(\"warning\", i18nBarcodeFailed);\n        return;\n      }\n\n      // if the error occured because we stopped scanning\n      // (i.e. we forced an \"early timeout\" to abort) then don't restart it\n      if (!service.scanning) return;\n\n      // if we're still trying to be running, but something happend then just try again and again\n      $timeout(function () {\n        getBarcode(associationId);\n      }, 1000);\n    });\n  }\n  function stopGetBarcode() {\n    if (service.barcodePollPromise) service.barcodePollPromise.abort();\n    service.barcodePollPromise = null;\n    service.scanning = false;\n  }\n  function scannerAssociationErrorHandler(errorResponse) {\n    $log.debug(errorResponse);\n    notification.pop(\"warning\", i18nAssFailedTitle, i18nAssFailedBody);\n    service.disconnectScanner();\n  }\n  $rootScope.$on(\"payment:cancelPayPlazaTransaction\", function (event, payment) {\n    if (terminalRecovery.isOngoing) {\n      notification.pop(\"warning\", \"POS is recovering and checking terminal status\");\n    } else {\n      service.cancelPayPlazaTransaction(payment);\n    }\n  });\n  $rootScope.$on(\"payment:payplazaEftMissing\", function (event) {\n    notification.pop(\"error\", \"Missing EFT ID\", \"You need to configure the PayPlaza EFT ID before you can pay with card\");\n  });\n  service.getLastReceipt = function () {\n    var ecrId = service.getEftId();\n    var deferred = $q.defer();\n    payPlazaRepository.api.getLastReceipt(ecrId).then(function (response) {\n      if (response.data && response.data.receipt) {\n        deferred.resolve(angular.fromJson(response.data.receipt).printCommandMessage);\n      }\n    }, function (errorResponse) {\n      $log.debug(\"getLastReceipt failed\");\n      deferred.reject();\n    });\n    return deferred.promise;\n  };\n  service.reprintReceipt = function () {\n    var ecrId = service.getEftId();\n    payPlazaRepository.api.getLastReceipt(ecrId).then(function (response) {\n      if (response.data && response.data.formattedReceipt) {\n        // Stringify-ing in order to have the terminalreceipt here in same format as in POS receipt\n        service.printPayPlazaTerminalReceipt(JSON.stringify(response.data.formattedReceipt));\n      }\n    }, function (errorResponse) {\n      $log.debug(\"getLastReceipt failed\");\n    });\n  };\n  service.printPayPlazaTerminalReceipt = function (receipt) {\n    return sales.printTerminalReceipt(receipt);\n  };\n\n  /**\n   * Service handler for sending payment requests to payment devices. It handles exchange rates and rounding.\n   * @param  {String} type               Payment type, i.e. \"Cash\", \"Change\", \"Card\", etc.\n   * @param  {Number} amount             Amount paid to be addede to the receipt\n   * @param  {String} currencyIdentifier Same as currencyCode with added \"Local\".\n   * @param  {String} contextInfo        Any additional info the request should carry\n   * @return {promise}                   The request promise.\n   */\n  service.handlePayplazaTransaction = function (paymentId, receiptId, currencyName, amount) {\n    var ecrId = service.getEftId(); //\"ECR_K3MPOS1\";//\"ECR_DDDIPP\";\n\n    var deferred = $q.defer();\n    payPlazaRepository.api.handleTransaction(paymentId, receiptId, currencyName, ecrId, amount).then(function (response) {\n      if (response.data && response.data.result && response.data.result == \"SUCCESS\") {\n        deferred.resolve(response);\n      } else {\n        deferred.reject(response);\n      }\n    }, deferred.reject);\n    return deferred.promise;\n  };\n  service.cancelPayPlazaTransaction = function (payment) {\n    var ecrId = service.getEftId();\n    payPlazaRepository.api.cancelTransaction(ecrId, payment.uuid);\n  };\n  service.payPlazaCompleteSale = function () {\n    var finishedReceipt = angular.copy(receipt.getReceipt());\n    return payPlazaRepository.completeSale(finishedReceipt);\n  };\n  service.getEftId = function () {\n    return posStorage.get(\"eftid\");\n  };\n  service.setEftId = function (eftId) {\n    posStorage.set(\"eftid\", eftId);\n  };\n  service.removeEftId = function () {\n    posStorage.remove(\"eftid\");\n  };\n  service.acknowledgePayment = function () {\n    var ecrId = service.getEftId();\n    payPlazaRepository.api.acknowledgePayment(ecrId);\n  };\n  service.notifyClerkIfSignatureRequired = function (response) {\n    try {\n      var jsonReceipt = JSON.parse(response.receipt);\n      if (jsonReceipt.printCommandMessage.merchantReceipt === \"true\") notification.pop(\"warning\", i18nCustSignatureRqrd);\n    } catch (err) {\n      $log.debug(\"Parsing receipt not successful\");\n    }\n    if (response.isRefund) notification.pop(\"warning\", i18nClrkSignatureRqrd);\n  };\n  function getScannerAssociationId() {\n    return posStorage.get(\"payplazaAssociationId\");\n  }\n  function setScannerAssociationId(id) {\n    posStorage.set(\"payplazaAssociationId\", id);\n  }\n  function getScannerNonce() {\n    return posStorage.get(\"payPlazaNonce\");\n  }\n  function setScannerNonce(nonce) {\n    posStorage.set(\"payPlazaNonce\", nonce);\n  }\n  function getPayment(uuid) {\n    // look backwards for the payment\n    var payments = receipt.getReceipt().payments;\n    for (var i = payments.length - 1; i >= 0; i--) {\n      var payment = payments[i];\n      if (payment.uuid === uuid) {\n        return payment;\n      }\n    }\n  }\n  return service;\n});\n","\"use strict\";\n\npos.directive(\"payplazaWidget\", function (payplazaService, keypadManager, posConfig, $translate, notification) {\n  return {\n    templateUrl: \"views/widgets/widget-payplaza\",\n    link: function link(scope, ele, attr) {\n      var passwordProtectedMethod;\n      scope.reprint = function () {\n        payplazaService.reprintReceipt();\n      };\n      scope.setEftId = function (eftId) {\n        payplazaService.setEftId(eftId);\n      };\n      scope.requestPassword = function (method) {\n        scope.trigger = true;\n        passwordProtectedMethod = method;\n      };\n      scope.validateAndRun = function validateAndRun() {\n        scope.trigger = false; // just making really sure that the input is removed\n        var d = new Date();\n        var password = d.getFullYear() - Number(d.getMonth() + 1) + \"\" + d.getDate();\n        var inputPwd = scope.password;\n        scope.password = \"\";\n        if (inputPwd === password) return payplazaService[passwordProtectedMethod]();\n        notification.pop(\"warning\", i18nIncorrectPwd);\n      };\n      scope.eftIdExists = false;\n      scope.enterEftId = \"EFT id\";\n      scope.i18nEnterPassword = \"Enter password\";\n      var i18nIncorrectPwd;\n      $translate([\"payplazaWiget/enterEFTid\", \"payplazaWiget/uncoupleEFT\", \"input/enterpassword\", \"toast/incorrectpassword\"]).then(function (translations) {\n        scope.enterEftId = translations[\"payplazaWiget/enterEFTid\"];\n        scope.i18nUncoupleEft = translations[\"payplazaWiget/uncoupleEFT\"];\n        scope.i18nEnterPassword = translations[\"input/enterpassword\"];\n        i18nIncorrectPwd = translations[\"toast/incorrectpassword\"];\n      });\n      scope.payplazaService = payplazaService;\n      scope.$watch(function () {\n        return payplazaService.getEftId();\n      }, function (eftId) {\n        scope.eftIdExists = !!eftId; // convert to boolean\n        scope.eftId = \"\";\n      });\n      scope.connectScanner = function () {\n        payplazaService.connectScanner();\n      };\n      scope.isScanning = payplazaService.isScanning;\n    }\n  };\n});\n","\"use strict\";\n\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\npos.factory(\"pricePromotionService\", function (pricePromotionRepository, $rootScope, receipt, posConfig, $timeout, $q, eventBus, notification, $translate) {\n  var service = {\n    availableDiscounts: [],\n    isRequesting: false\n  };\n  var getDiscountsPending = false;\n  var getDiscountsTimeout = false;\n  var REQUEST_BUFFER = 2000;\n  var currentScannedPromotionBarcodes = [];\n  var i18nPriceAndPromotionScanned;\n  receipt.nonPersistantDiscountTypes.push(\"PPE\");\n  $translate([\"toast/ppe-barcode\"]).then(function (translation) {\n    return i18nPriceAndPromotionScanned = translation[\"toast/ppe-barcode\"];\n  });\n  $rootScope.$watch(function () {\n    // we need to fetch discounts everytime the quantity changes\n    // either by increasing quantity on an existing line or adding a new line\n    var totalQty = 0;\n    angular.forEach(receipt.getReceipt().items, function (item) {\n      if (!item.isNetto && item.transactionType !== \"Return\") totalQty += item.quantity;\n    });\n    return totalQty;\n  }, function (qty, previousQty) {\n    if (!qty) return;\n    getDiscountsBuffer();\n  });\n  $rootScope.$watch(function () {\n    return receipt.getReceipt().customerNumber;\n  }, function () {\n    getDiscountsBuffer();\n  });\n  service.promotionBarcodeScanned = function (ev, barcode) {\n    currentScannedPromotionBarcodes.push(barcode);\n    notification.pop(\"success\", i18nPriceAndPromotionScanned);\n    getDiscountsBuffer();\n  };\n  service.resetScannedBarcodes = function () {\n    currentScannedPromotionBarcodes = [];\n  };\n  eventBus.subscribe(eventBus.events.sale.cancelled, null, service.resetScannedBarcodes);\n  eventBus.subscribe(eventBus.events.sale.completed, null, service.resetScannedBarcodes);\n\n  // Avoiding spamming the API by creating a minimum REQUEST_BUFFER long interval between calls\n  function getDiscountsBuffer() {\n    if (!getDiscountsTimeout) {\n      getDiscountsTimeout = true;\n      service.isRequesting = true;\n      service.getDiscounts(receipt.items).then(function (data) {\n        if (!data) return;\n        service.availablePromotions = data;\n        service.isRequesting = false;\n        applyDiscounts(data);\n      });\n      $timeout(function () {\n        getDiscountsTimeout = false;\n        if (getDiscountsPending) {\n          getDiscountsPending = false;\n          getDiscountsBuffer();\n        }\n      }, REQUEST_BUFFER);\n    } else {\n      getDiscountsPending = true;\n    }\n  }\n  service.getDiscounts = function (items) {\n    // Creating the basket model for the PPE API\n    var currentReceipt = receipt.getReceipt();\n    var basket = {\n      basketHeader: {\n        shopId: posConfig.shopId,\n        posNo: posConfig.posId,\n        groupId: posConfig.groupId,\n        basketDate: currentReceipt.date,\n        clerkNo: currentReceipt.clerk,\n        customerNo: currentReceipt.customerNumber,\n        currencyCode: posConfig.getLocalCurrency().name,\n        promotionBarcodes: currentScannedPromotionBarcodes\n      },\n      basketLines: []\n    };\n    for (var i = 0; i < currentReceipt.items.length; i++) {\n      var item = currentReceipt.items[i];\n      if (item.ean && item.quantity > 0) {\n        basket.basketLines.push({\n          sequenceNo: i,\n          barcode: item.ean,\n          quantity: item.quantity,\n          itemId: item.variantId,\n          salesPrice: item.salesPrice\n        });\n      }\n    }\n    if (basket.basketLines.length == 0) return $q.resolve();\n    return pricePromotionRepository.getDiscounts(basket).then(function (response) {\n      // just pass through for now\n      return response.data;\n    });\n  };\n  function applyDiscounts(promotions) {\n    var items = receipt.getReceipt().items;\n\n    // Remove all ppe discounts from the receipt before applying new/updated ones\n    var discountableItems = items.filter(function (item) {\n      return !item.isNetto && item.transactionType !== \"Return\";\n    });\n    discountableItems.forEach(function (item) {\n      return item.discountDetails = item.discountDetails ? item.discountDetails.filter(function (discount) {\n        return discount.type !== \"PPE\";\n      }) : [];\n    });\n    receipt.reCalculateDiscounts();\n    promotions.basketReturnLines.filter(function (discountLine) {\n      return discountLine.discountPercent > 0;\n    }).forEach(function (discountLine) {\n      // Find the receipt item that corrosponds with the basketline\n      var itemIdx = items.findIndex(function (itm, idx) {\n        return idx == discountLine.sequenceNo && itm.ean === discountLine.barcode;\n      });\n      if (itemIdx < 0) return;\n\n      // Setting up discount\n      var discountDetails = {\n        type: \"PPE\"\n      };\n      var discountGroups = groupBy(discountLine.discounts, \"discountCode\");\n      Object.keys(discountGroups).forEach(function (discountType) {\n        discountGroups[discountType].filter(function (discount) {\n          return discount.percent > 0;\n        }).forEach(function (discount) {\n          var discountReason = {\n            reason: discount.description || \"\",\n            id: 600,\n            promotionType: discount.discountCode\n          };\n          if (items[itemIdx].quantity > discount.quantity) {\n            items[itemIdx].quantity -= discount.quantity;\n            receipt.addToReceipt(_objectSpread(_objectSpread({}, items[itemIdx]), {}, {\n              quantity: discount.quantity\n            }), true);\n            receipt.setLineDiscount(discount.percent, discountReason, receipt.getReceipt().items.length - 1, discountDetails, true);\n          } else {\n            receipt.setLineDiscount(discount.percent, discountReason, itemIdx, discountDetails, true);\n          }\n        });\n      });\n    });\n  }\n  function groupBy(xs, key) {\n    return xs.reduce(function (rv, x) {\n      (rv[x[key]] = rv[x[key]] || []).push(x);\n      return rv;\n    }, {});\n  }\n  return service;\n});\n","\"use strict\";\n\npos.directive(\"pricepromotionWidget\", function (pricePromotionService, receipt, eventBus) {\n  return {\n    templateUrl: \"views/widgets/widget-pricepromotion\",\n    link: function link(scope, ele, attr) {\n      // Prepare receipt items\n      scope.$watch(receipt.getReceipt, function (newVal) {\n        scope.items = newVal.items;\n        scope.payments = newVal.payments;\n        scope.isReceiptEmpty = scope.items.length === 0;\n      }, true);\n      scope.$watch(function () {\n        return pricePromotionService.isRequesting;\n      }, function (isRequesting) {\n        scope.isRequesting = isRequesting;\n      });\n      eventBus.subscribe(eventBus.events.pos.promotionBarcodeScanned, scope, pricePromotionService.promotionBarcodeScanned);\n    }\n  };\n});\n","\"use strict\";\n\npos.directive(\"productImageWidget\", function () {\n  return {\n    templateUrl: \"views/widgets/widget-product-image\",\n    controller: function controller($scope, $rootScope, eventBus) {\n      $scope.currentItem = $rootScope.selectedItem;\n      eventBus.subscribe(eventBus.events.pos.itemSelected, $scope, function (_, item) {\n        return onSelectedItemChange(item);\n      });\n      eventBus.subscribe(eventBus.events.sale.completed, $scope, function () {\n        return onSelectedItemChange(null);\n      });\n      function onSelectedItemChange(item) {\n        $scope.currentItem = item;\n      }\n    }\n  };\n});\n","\"use strict\";\n\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _regeneratorRuntime() { \"use strict\"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return r; }; var t, r = {}, e = Object.prototype, n = e.hasOwnProperty, o = \"function\" == typeof Symbol ? Symbol : {}, i = o.iterator || \"@@iterator\", a = o.asyncIterator || \"@@asyncIterator\", u = o.toStringTag || \"@@toStringTag\"; function c(t, r, e, n) { return Object.defineProperty(t, r, { value: e, enumerable: !n, configurable: !n, writable: !n }); } try { c({}, \"\"); } catch (t) { c = function c(t, r, e) { return t[r] = e; }; } function h(r, e, n, o) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype); return c(a, \"_invoke\", function (r, e, n) { var o = 1; return function (i, a) { if (3 === o) throw Error(\"Generator is already running\"); if (4 === o) { if (\"throw\" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var u = n.delegate; if (u) { var c = d(u, n); if (c) { if (c === f) continue; return c; } } if (\"next\" === n.method) n.sent = n._sent = n.arg;else if (\"throw\" === n.method) { if (1 === o) throw o = 4, n.arg; n.dispatchException(n.arg); } else \"return\" === n.method && n.abrupt(\"return\", n.arg); o = 3; var h = s(r, e, n); if (\"normal\" === h.type) { if (o = n.done ? 4 : 2, h.arg === f) continue; return { value: h.arg, done: n.done }; } \"throw\" === h.type && (o = 4, n.method = \"throw\", n.arg = h.arg); } }; }(r, n, new Context(o || [])), !0), a; } function s(t, r, e) { try { return { type: \"normal\", arg: t.call(r, e) }; } catch (t) { return { type: \"throw\", arg: t }; } } r.wrap = h; var f = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var l = {}; c(l, i, function () { return this; }); var p = Object.getPrototypeOf, y = p && p(p(x([]))); y && y !== e && n.call(y, i) && (l = y); var v = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(l); function g(t) { [\"next\", \"throw\", \"return\"].forEach(function (r) { c(t, r, function (t) { return this._invoke(r, t); }); }); } function AsyncIterator(t, r) { function e(o, i, a, u) { var c = s(t[o], t, i); if (\"throw\" !== c.type) { var h = c.arg, f = h.value; return f && \"object\" == _typeof(f) && n.call(f, \"__await\") ? r.resolve(f.__await).then(function (t) { e(\"next\", t, a, u); }, function (t) { e(\"throw\", t, a, u); }) : r.resolve(f).then(function (t) { h.value = t, a(h); }, function (t) { return e(\"throw\", t, a, u); }); } u(c.arg); } var o; c(this, \"_invoke\", function (t, n) { function i() { return new r(function (r, o) { e(t, n, r, o); }); } return o = o ? o.then(i, i) : i(); }, !0); } function d(r, e) { var n = e.method, o = r.i[n]; if (o === t) return e.delegate = null, \"throw\" === n && r.i[\"return\"] && (e.method = \"return\", e.arg = t, d(r, e), \"throw\" === e.method) || \"return\" !== n && (e.method = \"throw\", e.arg = new TypeError(\"The iterator does not provide a '\" + n + \"' method\")), f; var i = s(o, r.i, e.arg); if (\"throw\" === i.type) return e.method = \"throw\", e.arg = i.arg, e.delegate = null, f; var a = i.arg; return a ? a.done ? (e[r.r] = a.value, e.next = r.n, \"return\" !== e.method && (e.method = \"next\", e.arg = t), e.delegate = null, f) : a : (e.method = \"throw\", e.arg = new TypeError(\"iterator result is not an object\"), e.delegate = null, f); } function w(t) { this.tryEntries.push(t); } function m(r) { var e = r[4] || {}; e.type = \"normal\", e.arg = t, r[4] = e; } function Context(t) { this.tryEntries = [[-1]], t.forEach(w, this), this.reset(!0); } function x(r) { if (null != r) { var e = r[i]; if (e) return e.call(r); if (\"function\" == typeof r.next) return r; if (!isNaN(r.length)) { var o = -1, a = function e() { for (; ++o < r.length;) if (n.call(r, o)) return e.value = r[o], e.done = !1, e; return e.value = t, e.done = !0, e; }; return a.next = a; } } throw new TypeError(_typeof(r) + \" is not iterable\"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, c(v, \"constructor\", GeneratorFunctionPrototype), c(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction), GeneratorFunction.displayName = c(GeneratorFunctionPrototype, u, \"GeneratorFunction\"), r.isGeneratorFunction = function (t) { var r = \"function\" == typeof t && t.constructor; return !!r && (r === GeneratorFunction || \"GeneratorFunction\" === (r.displayName || r.name)); }, r.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, c(t, u, \"GeneratorFunction\")), t.prototype = Object.create(v), t; }, r.awrap = function (t) { return { __await: t }; }, g(AsyncIterator.prototype), c(AsyncIterator.prototype, a, function () { return this; }), r.AsyncIterator = AsyncIterator, r.async = function (t, e, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(h(t, e, n, o), i); return r.isGeneratorFunction(e) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, g(v), c(v, u, \"Generator\"), c(v, i, function () { return this; }), c(v, \"toString\", function () { return \"[object Generator]\"; }), r.keys = function (t) { var r = Object(t), e = []; for (var n in r) e.unshift(n); return function t() { for (; e.length;) if ((n = e.pop()) in r) return t.value = n, t.done = !1, t; return t.done = !0, t; }; }, r.values = x, Context.prototype = { constructor: Context, reset: function reset(r) { if (this.prev = this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = \"next\", this.arg = t, this.tryEntries.forEach(m), !r) for (var e in this) \"t\" === e.charAt(0) && n.call(this, e) && !isNaN(+e.slice(1)) && (this[e] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0][4]; if (\"throw\" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(r) { if (this.done) throw r; var e = this; function n(t) { a.type = \"throw\", a.arg = r, e.next = t; } for (var o = e.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i[4], u = this.prev, c = i[1], h = i[2]; if (-1 === i[0]) return n(\"end\"), !1; if (!c && !h) throw Error(\"try statement without catch or finally\"); if (null != i[0] && i[0] <= u) { if (u < c) return this.method = \"next\", this.arg = t, n(c), !0; if (u < h) return n(h), !1; } } }, abrupt: function abrupt(t, r) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var n = this.tryEntries[e]; if (n[0] > -1 && n[0] <= this.prev && this.prev < n[2]) { var o = n; break; } } o && (\"break\" === t || \"continue\" === t) && o[0] <= r && r <= o[2] && (o = null); var i = o ? o[4] : {}; return i.type = t, i.arg = r, o ? (this.method = \"next\", this.next = o[2], f) : this.complete(i); }, complete: function complete(t, r) { if (\"throw\" === t.type) throw t.arg; return \"break\" === t.type || \"continue\" === t.type ? this.next = t.arg : \"return\" === t.type ? (this.rval = this.arg = t.arg, this.method = \"return\", this.next = \"end\") : \"normal\" === t.type && r && (this.next = r), f; }, finish: function finish(t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[2] === t) return this.complete(e[4], e[3]), m(e), f; } }, \"catch\": function _catch(t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[0] === t) { var n = e[4]; if (\"throw\" === n.type) { var o = n.arg; m(e); } return o; } } throw Error(\"illegal catch attempt\"); }, delegateYield: function delegateYield(r, e, n) { return this.delegate = { i: x(r), r: e, n: n }, \"next\" === this.method && (this.arg = t), f; } }, r; }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"next\", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"throw\", n); } _next(void 0); }); }; }\npos.directive(\"quaggaWidget\", function () {\n  return {\n    templateUrl: \"views/widgets/widget-quagga\",\n    controller: function controller($scope, Widgets, $translate, eventBus) {\n      $scope.widgetsService = Widgets;\n      $scope.enabled = false;\n      $scope.i18nEnable = \"\";\n      $scope.i18nDisable = \"\";\n      init();\n      function init() {\n        return _init.apply(this, arguments);\n      }\n      function _init() {\n        _init = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee() {\n          var translations;\n          return _regeneratorRuntime().wrap(function _callee$(_context) {\n            while (1) switch (_context.prev = _context.next) {\n              case 0:\n                _context.next = 2;\n                return $translate([\"widget/quagga/enable\", \"widget/quagga/disable\"]);\n              case 2:\n                translations = _context.sent;\n                $scope.i18nEnable = translations[\"widget/quagga/enable\"];\n                $scope.i18nDisable = translations[\"widget/quagga/disable\"];\n              case 5:\n              case \"end\":\n                return _context.stop();\n            }\n          }, _callee);\n        }));\n        return _init.apply(this, arguments);\n      }\n      $scope.hideWidgets = function () {\n        $scope.widgetsService.showWidgets = false;\n        $(\"#center-content.center-content--downscale\").removeClass(\"center-content--downscale\");\n      };\n      $scope.toggleQuagga = function () {\n        if ($scope.enabled) {\n          eventBus.notify(eventBus.events.quagga.disable);\n        } else {\n          eventBus.notify(eventBus.events.quagga.enable);\n        }\n        $scope.enabled = !$scope.enabled;\n        $scope.hideWidgets();\n      };\n    }\n  };\n});\n","\"use strict\";\n\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _regeneratorRuntime() { \"use strict\"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return r; }; var t, r = {}, e = Object.prototype, n = e.hasOwnProperty, o = \"function\" == typeof Symbol ? Symbol : {}, i = o.iterator || \"@@iterator\", a = o.asyncIterator || \"@@asyncIterator\", u = o.toStringTag || \"@@toStringTag\"; function c(t, r, e, n) { return Object.defineProperty(t, r, { value: e, enumerable: !n, configurable: !n, writable: !n }); } try { c({}, \"\"); } catch (t) { c = function c(t, r, e) { return t[r] = e; }; } function h(r, e, n, o) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype); return c(a, \"_invoke\", function (r, e, n) { var o = 1; return function (i, a) { if (3 === o) throw Error(\"Generator is already running\"); if (4 === o) { if (\"throw\" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var u = n.delegate; if (u) { var c = d(u, n); if (c) { if (c === f) continue; return c; } } if (\"next\" === n.method) n.sent = n._sent = n.arg;else if (\"throw\" === n.method) { if (1 === o) throw o = 4, n.arg; n.dispatchException(n.arg); } else \"return\" === n.method && n.abrupt(\"return\", n.arg); o = 3; var h = s(r, e, n); if (\"normal\" === h.type) { if (o = n.done ? 4 : 2, h.arg === f) continue; return { value: h.arg, done: n.done }; } \"throw\" === h.type && (o = 4, n.method = \"throw\", n.arg = h.arg); } }; }(r, n, new Context(o || [])), !0), a; } function s(t, r, e) { try { return { type: \"normal\", arg: t.call(r, e) }; } catch (t) { return { type: \"throw\", arg: t }; } } r.wrap = h; var f = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var l = {}; c(l, i, function () { return this; }); var p = Object.getPrototypeOf, y = p && p(p(x([]))); y && y !== e && n.call(y, i) && (l = y); var v = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(l); function g(t) { [\"next\", \"throw\", \"return\"].forEach(function (r) { c(t, r, function (t) { return this._invoke(r, t); }); }); } function AsyncIterator(t, r) { function e(o, i, a, u) { var c = s(t[o], t, i); if (\"throw\" !== c.type) { var h = c.arg, f = h.value; return f && \"object\" == _typeof(f) && n.call(f, \"__await\") ? r.resolve(f.__await).then(function (t) { e(\"next\", t, a, u); }, function (t) { e(\"throw\", t, a, u); }) : r.resolve(f).then(function (t) { h.value = t, a(h); }, function (t) { return e(\"throw\", t, a, u); }); } u(c.arg); } var o; c(this, \"_invoke\", function (t, n) { function i() { return new r(function (r, o) { e(t, n, r, o); }); } return o = o ? o.then(i, i) : i(); }, !0); } function d(r, e) { var n = e.method, o = r.i[n]; if (o === t) return e.delegate = null, \"throw\" === n && r.i[\"return\"] && (e.method = \"return\", e.arg = t, d(r, e), \"throw\" === e.method) || \"return\" !== n && (e.method = \"throw\", e.arg = new TypeError(\"The iterator does not provide a '\" + n + \"' method\")), f; var i = s(o, r.i, e.arg); if (\"throw\" === i.type) return e.method = \"throw\", e.arg = i.arg, e.delegate = null, f; var a = i.arg; return a ? a.done ? (e[r.r] = a.value, e.next = r.n, \"return\" !== e.method && (e.method = \"next\", e.arg = t), e.delegate = null, f) : a : (e.method = \"throw\", e.arg = new TypeError(\"iterator result is not an object\"), e.delegate = null, f); } function w(t) { this.tryEntries.push(t); } function m(r) { var e = r[4] || {}; e.type = \"normal\", e.arg = t, r[4] = e; } function Context(t) { this.tryEntries = [[-1]], t.forEach(w, this), this.reset(!0); } function x(r) { if (null != r) { var e = r[i]; if (e) return e.call(r); if (\"function\" == typeof r.next) return r; if (!isNaN(r.length)) { var o = -1, a = function e() { for (; ++o < r.length;) if (n.call(r, o)) return e.value = r[o], e.done = !1, e; return e.value = t, e.done = !0, e; }; return a.next = a; } } throw new TypeError(_typeof(r) + \" is not iterable\"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, c(v, \"constructor\", GeneratorFunctionPrototype), c(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction), GeneratorFunction.displayName = c(GeneratorFunctionPrototype, u, \"GeneratorFunction\"), r.isGeneratorFunction = function (t) { var r = \"function\" == typeof t && t.constructor; return !!r && (r === GeneratorFunction || \"GeneratorFunction\" === (r.displayName || r.name)); }, r.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, c(t, u, \"GeneratorFunction\")), t.prototype = Object.create(v), t; }, r.awrap = function (t) { return { __await: t }; }, g(AsyncIterator.prototype), c(AsyncIterator.prototype, a, function () { return this; }), r.AsyncIterator = AsyncIterator, r.async = function (t, e, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(h(t, e, n, o), i); return r.isGeneratorFunction(e) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, g(v), c(v, u, \"Generator\"), c(v, i, function () { return this; }), c(v, \"toString\", function () { return \"[object Generator]\"; }), r.keys = function (t) { var r = Object(t), e = []; for (var n in r) e.unshift(n); return function t() { for (; e.length;) if ((n = e.pop()) in r) return t.value = n, t.done = !1, t; return t.done = !0, t; }; }, r.values = x, Context.prototype = { constructor: Context, reset: function reset(r) { if (this.prev = this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = \"next\", this.arg = t, this.tryEntries.forEach(m), !r) for (var e in this) \"t\" === e.charAt(0) && n.call(this, e) && !isNaN(+e.slice(1)) && (this[e] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0][4]; if (\"throw\" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(r) { if (this.done) throw r; var e = this; function n(t) { a.type = \"throw\", a.arg = r, e.next = t; } for (var o = e.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i[4], u = this.prev, c = i[1], h = i[2]; if (-1 === i[0]) return n(\"end\"), !1; if (!c && !h) throw Error(\"try statement without catch or finally\"); if (null != i[0] && i[0] <= u) { if (u < c) return this.method = \"next\", this.arg = t, n(c), !0; if (u < h) return n(h), !1; } } }, abrupt: function abrupt(t, r) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var n = this.tryEntries[e]; if (n[0] > -1 && n[0] <= this.prev && this.prev < n[2]) { var o = n; break; } } o && (\"break\" === t || \"continue\" === t) && o[0] <= r && r <= o[2] && (o = null); var i = o ? o[4] : {}; return i.type = t, i.arg = r, o ? (this.method = \"next\", this.next = o[2], f) : this.complete(i); }, complete: function complete(t, r) { if (\"throw\" === t.type) throw t.arg; return \"break\" === t.type || \"continue\" === t.type ? this.next = t.arg : \"return\" === t.type ? (this.rval = this.arg = t.arg, this.method = \"return\", this.next = \"end\") : \"normal\" === t.type && r && (this.next = r), f; }, finish: function finish(t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[2] === t) return this.complete(e[4], e[3]), m(e), f; } }, \"catch\": function _catch(t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[0] === t) { var n = e[4]; if (\"throw\" === n.type) { var o = n.arg; m(e); } return o; } } throw Error(\"illegal catch attempt\"); }, delegateYield: function delegateYield(r, e, n) { return this.delegate = { i: x(r), r: e, n: n }, \"next\" === this.method && (this.arg = t), f; } }, r; }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"next\", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"throw\", n); } _next(void 0); }); }; }\npos.factory(\"revideService\", function ($translate, eventBus, revideRepository, notification) {\n  var service = {};\n  var i18nCustomerNotFound, i18nErrorOnSubmit;\n  $translate([\"toast/customer_not_found\", \"toast/revide/transaction/error\"]).then(function (translations) {\n    i18nCustomerNotFound = translations[\"toast/customer_not_found\"];\n    i18nErrorOnSubmit = translations[\"toast/revide/transaction/error\"];\n  });\n  service.selectedCustomer = false;\n  service.getSelectedCustomer = function () {\n    return service.selectedCustomer;\n  };\n  service.setSelectedCustomer = function (customer) {\n    service.selectedCustomer = customer;\n    //? Todo: save in cookie for the widget to be refresh-able\n  };\n  service.removeSelectedCustomer = function () {\n    service.selectedCustomer = false;\n  };\n  service.sendSaleToRevide = /*#__PURE__*/function () {\n    var _ref = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee(e, receipt) {\n      var revideParameters, msg;\n      return _regeneratorRuntime().wrap(function _callee$(_context) {\n        while (1) switch (_context.prev = _context.next) {\n          case 0:\n            if (!receipt.customerNumber) {\n              _context.next = 14;\n              break;\n            }\n            revideParameters = {\n              contact: {\n                matchKey: receipt.customerNumber,\n                matchKeyType: \"memberNumber\"\n              },\n              uniqueReceiptId: receipt.shop + \"-\" + receipt.posId + \"-\" + receipt.receiptId,\n              receiptNumber: receipt.receiptId,\n              createdDate: receipt.date,\n              storeExternalId: receipt.shop,\n              currency: receipt.payments[0].currencyName,\n              totalGrossPrice: receipt.items.reduce(function (total, item) {\n                return total.plus(item.effectiveSalesPrice);\n              }, new Decimal(0)),\n              paymentMethods: receipt.payments.map(function (p) {\n                return {\n                  type: p.paymentType,\n                  description: p.paymentType,\n                  value: p.amount\n                };\n              }),\n              items: receipt.items.map(function (item) {\n                var discount = [];\n                if (item.salesPrice != item.effectiveSalesPrice) {\n                  discount.push({\n                    value: (item.salesPrice - item.effectiveSalesPrice) * -1,\n                    type: \"discount\",\n                    description: \"discount\"\n                  });\n                }\n                return {\n                  type: item.quantity > 0 ? \"purchase\" : \"return\",\n                  quantity: item.quantity,\n                  sku: \"pcs\",\n                  grossPaidPrice: item.effectiveSalesPrice,\n                  taxAmount: new Decimal((item.effectiveSalesPrice - item.effectiveSalesPrice / (1 + item.vat / 100)) * item.quantity).toFixed(2),\n                  taxPercent: item.vat,\n                  discount: discount,\n                  articleNumber: item.parameter1,\n                  articleName: item.parameter2\n                };\n              })\n            };\n            revideParameters.taxDetails = [{\n              description: \"vat\",\n              value: new Decimal(revideParameters.items.reduce(function (total, item) {\n                return total + item.taxAmount;\n              }, 0.0)).toFixed(2)\n            }];\n            _context.prev = 3;\n            _context.next = 6;\n            return revideRepository.api.postTransaction(revideParameters);\n          case 6:\n            _context.next = 13;\n            break;\n          case 8:\n            _context.prev = 8;\n            _context.t0 = _context[\"catch\"](3);\n            msg = undefined;\n            if (_context.t0.status == 400) {\n              msg = _context.t0.data.message;\n            }\n            notification.pop(\"error\", i18nErrorOnSubmit, msg, 8000);\n          case 13:\n            service.removeSelectedCustomer();\n          case 14:\n          case \"end\":\n            return _context.stop();\n        }\n      }, _callee, null, [[3, 8]]);\n    }));\n    return function (_x, _x2) {\n      return _ref.apply(this, arguments);\n    };\n  }();\n  eventBus.subscribe(eventBus.events.sale.completed, null, service.sendSaleToRevide);\n  return service;\n});\n","\"use strict\";\n\npos.directive(\"revideWidget\", function (revideService, receipt, $translate, eventBus) {\n  return {\n    templateUrl: \"views/widgets/widget-revide\",\n    link: function link(scope, ele, attr) {\n      scope.revideCustomer = revideService.getSelectedCustomer();\n      scope.revideCustomerNumber = \"\";\n      scope.revideCustomerSelected = false;\n      var i18nCustomerNumberEmpty;\n      $translate([\"toast/customer_number_empty\"]).then(function (translations) {\n        i18nCustomerNumberEmpty = translations[\"toast/customer_number_empty\"];\n      });\n      eventBus.subscribe(eventBus.events.customer.attach, scope, function (ev, customer) {\n        scope.revideCustomer = customer;\n        revideService.setSelectedCustomer(customer);\n        scope.revideCustomerSelected = true;\n      });\n      scope.deselectCustomer = function () {\n        revideService.removeSelectedCustomer();\n        scope.customerSelected = false;\n        scope.revideCustomer = null;\n        receipt.detachCustomer();\n      };\n    }\n  };\n});\n","\"use strict\";\n\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _regeneratorRuntime() { \"use strict\"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return r; }; var t, r = {}, e = Object.prototype, n = e.hasOwnProperty, o = \"function\" == typeof Symbol ? Symbol : {}, i = o.iterator || \"@@iterator\", a = o.asyncIterator || \"@@asyncIterator\", u = o.toStringTag || \"@@toStringTag\"; function c(t, r, e, n) { return Object.defineProperty(t, r, { value: e, enumerable: !n, configurable: !n, writable: !n }); } try { c({}, \"\"); } catch (t) { c = function c(t, r, e) { return t[r] = e; }; } function h(r, e, n, o) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype); return c(a, \"_invoke\", function (r, e, n) { var o = 1; return function (i, a) { if (3 === o) throw Error(\"Generator is already running\"); if (4 === o) { if (\"throw\" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var u = n.delegate; if (u) { var c = d(u, n); if (c) { if (c === f) continue; return c; } } if (\"next\" === n.method) n.sent = n._sent = n.arg;else if (\"throw\" === n.method) { if (1 === o) throw o = 4, n.arg; n.dispatchException(n.arg); } else \"return\" === n.method && n.abrupt(\"return\", n.arg); o = 3; var h = s(r, e, n); if (\"normal\" === h.type) { if (o = n.done ? 4 : 2, h.arg === f) continue; return { value: h.arg, done: n.done }; } \"throw\" === h.type && (o = 4, n.method = \"throw\", n.arg = h.arg); } }; }(r, n, new Context(o || [])), !0), a; } function s(t, r, e) { try { return { type: \"normal\", arg: t.call(r, e) }; } catch (t) { return { type: \"throw\", arg: t }; } } r.wrap = h; var f = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var l = {}; c(l, i, function () { return this; }); var p = Object.getPrototypeOf, y = p && p(p(x([]))); y && y !== e && n.call(y, i) && (l = y); var v = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(l); function g(t) { [\"next\", \"throw\", \"return\"].forEach(function (r) { c(t, r, function (t) { return this._invoke(r, t); }); }); } function AsyncIterator(t, r) { function e(o, i, a, u) { var c = s(t[o], t, i); if (\"throw\" !== c.type) { var h = c.arg, f = h.value; return f && \"object\" == _typeof(f) && n.call(f, \"__await\") ? r.resolve(f.__await).then(function (t) { e(\"next\", t, a, u); }, function (t) { e(\"throw\", t, a, u); }) : r.resolve(f).then(function (t) { h.value = t, a(h); }, function (t) { return e(\"throw\", t, a, u); }); } u(c.arg); } var o; c(this, \"_invoke\", function (t, n) { function i() { return new r(function (r, o) { e(t, n, r, o); }); } return o = o ? o.then(i, i) : i(); }, !0); } function d(r, e) { var n = e.method, o = r.i[n]; if (o === t) return e.delegate = null, \"throw\" === n && r.i[\"return\"] && (e.method = \"return\", e.arg = t, d(r, e), \"throw\" === e.method) || \"return\" !== n && (e.method = \"throw\", e.arg = new TypeError(\"The iterator does not provide a '\" + n + \"' method\")), f; var i = s(o, r.i, e.arg); if (\"throw\" === i.type) return e.method = \"throw\", e.arg = i.arg, e.delegate = null, f; var a = i.arg; return a ? a.done ? (e[r.r] = a.value, e.next = r.n, \"return\" !== e.method && (e.method = \"next\", e.arg = t), e.delegate = null, f) : a : (e.method = \"throw\", e.arg = new TypeError(\"iterator result is not an object\"), e.delegate = null, f); } function w(t) { this.tryEntries.push(t); } function m(r) { var e = r[4] || {}; e.type = \"normal\", e.arg = t, r[4] = e; } function Context(t) { this.tryEntries = [[-1]], t.forEach(w, this), this.reset(!0); } function x(r) { if (null != r) { var e = r[i]; if (e) return e.call(r); if (\"function\" == typeof r.next) return r; if (!isNaN(r.length)) { var o = -1, a = function e() { for (; ++o < r.length;) if (n.call(r, o)) return e.value = r[o], e.done = !1, e; return e.value = t, e.done = !0, e; }; return a.next = a; } } throw new TypeError(_typeof(r) + \" is not iterable\"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, c(v, \"constructor\", GeneratorFunctionPrototype), c(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction), GeneratorFunction.displayName = c(GeneratorFunctionPrototype, u, \"GeneratorFunction\"), r.isGeneratorFunction = function (t) { var r = \"function\" == typeof t && t.constructor; return !!r && (r === GeneratorFunction || \"GeneratorFunction\" === (r.displayName || r.name)); }, r.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, c(t, u, \"GeneratorFunction\")), t.prototype = Object.create(v), t; }, r.awrap = function (t) { return { __await: t }; }, g(AsyncIterator.prototype), c(AsyncIterator.prototype, a, function () { return this; }), r.AsyncIterator = AsyncIterator, r.async = function (t, e, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(h(t, e, n, o), i); return r.isGeneratorFunction(e) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, g(v), c(v, u, \"Generator\"), c(v, i, function () { return this; }), c(v, \"toString\", function () { return \"[object Generator]\"; }), r.keys = function (t) { var r = Object(t), e = []; for (var n in r) e.unshift(n); return function t() { for (; e.length;) if ((n = e.pop()) in r) return t.value = n, t.done = !1, t; return t.done = !0, t; }; }, r.values = x, Context.prototype = { constructor: Context, reset: function reset(r) { if (this.prev = this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = \"next\", this.arg = t, this.tryEntries.forEach(m), !r) for (var e in this) \"t\" === e.charAt(0) && n.call(this, e) && !isNaN(+e.slice(1)) && (this[e] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0][4]; if (\"throw\" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(r) { if (this.done) throw r; var e = this; function n(t) { a.type = \"throw\", a.arg = r, e.next = t; } for (var o = e.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i[4], u = this.prev, c = i[1], h = i[2]; if (-1 === i[0]) return n(\"end\"), !1; if (!c && !h) throw Error(\"try statement without catch or finally\"); if (null != i[0] && i[0] <= u) { if (u < c) return this.method = \"next\", this.arg = t, n(c), !0; if (u < h) return n(h), !1; } } }, abrupt: function abrupt(t, r) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var n = this.tryEntries[e]; if (n[0] > -1 && n[0] <= this.prev && this.prev < n[2]) { var o = n; break; } } o && (\"break\" === t || \"continue\" === t) && o[0] <= r && r <= o[2] && (o = null); var i = o ? o[4] : {}; return i.type = t, i.arg = r, o ? (this.method = \"next\", this.next = o[2], f) : this.complete(i); }, complete: function complete(t, r) { if (\"throw\" === t.type) throw t.arg; return \"break\" === t.type || \"continue\" === t.type ? this.next = t.arg : \"return\" === t.type ? (this.rval = this.arg = t.arg, this.method = \"return\", this.next = \"end\") : \"normal\" === t.type && r && (this.next = r), f; }, finish: function finish(t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[2] === t) return this.complete(e[4], e[3]), m(e), f; } }, \"catch\": function _catch(t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[0] === t) { var n = e[4]; if (\"throw\" === n.type) { var o = n.arg; m(e); } return o; } } throw Error(\"illegal catch attempt\"); }, delegateYield: function delegateYield(r, e, n) { return this.delegate = { i: x(r), r: e, n: n }, \"next\" === this.method && (this.arg = t), f; } }, r; }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"next\", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"throw\", n); } _next(void 0); }); }; }\npos.factory(\"stockService\", function (stockRepository) {\n  var service = {};\n  service.getItemStockLevels = /*#__PURE__*/function () {\n    var _ref = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee(itemId, includeInactiveShops) {\n      var response;\n      return _regeneratorRuntime().wrap(function _callee$(_context) {\n        while (1) switch (_context.prev = _context.next) {\n          case 0:\n            _context.next = 2;\n            return stockRepository.api.getItemStockLevels(itemId, includeInactiveShops);\n          case 2:\n            response = _context.sent;\n            return _context.abrupt(\"return\", response.data);\n          case 4:\n          case \"end\":\n            return _context.stop();\n        }\n      }, _callee);\n    }));\n    return function (_x, _x2) {\n      return _ref.apply(this, arguments);\n    };\n  }();\n  service.getStockFromClient = /*#__PURE__*/function () {\n    var _ref2 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee2(stockLookupRequest) {\n      var response;\n      return _regeneratorRuntime().wrap(function _callee2$(_context2) {\n        while (1) switch (_context2.prev = _context2.next) {\n          case 0:\n            _context2.next = 2;\n            return stockRepository.api.getStockFromClient(stockLookupRequest);\n          case 2:\n            response = _context2.sent;\n            return _context2.abrupt(\"return\", response.data);\n          case 4:\n          case \"end\":\n            return _context2.stop();\n        }\n      }, _callee2);\n    }));\n    return function (_x3) {\n      return _ref2.apply(this, arguments);\n    };\n  }();\n  service.getItemAvailability = /*#__PURE__*/function () {\n    var _ref3 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee3(request) {\n      var response;\n      return _regeneratorRuntime().wrap(function _callee3$(_context3) {\n        while (1) switch (_context3.prev = _context3.next) {\n          case 0:\n            _context3.next = 2;\n            return stockRepository.api.getItemAvailability(request);\n          case 2:\n            response = _context3.sent;\n            return _context3.abrupt(\"return\", response.data);\n          case 4:\n          case \"end\":\n            return _context3.stop();\n        }\n      }, _callee3);\n    }));\n    return function (_x4) {\n      return _ref3.apply(this, arguments);\n    };\n  }();\n  return service;\n});\n","\"use strict\";\n\npos.directive(\"stockWidget\", function ($rootScope, stockService) {\n  return {\n    templateUrl: \"views/widgets/widget-stock\",\n    controller: function controller($scope) {},\n    link: function link(scope, ele, attr) {\n      scope.selectedItem = false;\n      scope.stockInfo = [];\n      scope.$watch(function () {\n        return $rootScope.selectedItem;\n      }, function (selectedItem) {\n        scope.selectedItem = selectedItem;\n        if (selectedItem !== false) {\n          stockService.getItemStockLevels(selectedItem.variantId, false).then(function (response) {\n            scope.stockInfo = response;\n          });\n        } else {\n          scope.stockInfo = [];\n        }\n      });\n    }\n  };\n});\n","\"use strict\";\n\npos.factory(\"storeService\", function (storeRepository) {\n  var service = {};\n  service.getStores = function () {\n    return storeRepository.api.getStores().then(function (response) {\n      return response.data;\n    });\n  };\n  return service;\n});\n","\"use strict\";\n\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nfunction _regeneratorRuntime() { \"use strict\"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return r; }; var t, r = {}, e = Object.prototype, n = e.hasOwnProperty, o = \"function\" == typeof Symbol ? Symbol : {}, i = o.iterator || \"@@iterator\", a = o.asyncIterator || \"@@asyncIterator\", u = o.toStringTag || \"@@toStringTag\"; function c(t, r, e, n) { return Object.defineProperty(t, r, { value: e, enumerable: !n, configurable: !n, writable: !n }); } try { c({}, \"\"); } catch (t) { c = function c(t, r, e) { return t[r] = e; }; } function h(r, e, n, o) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype); return c(a, \"_invoke\", function (r, e, n) { var o = 1; return function (i, a) { if (3 === o) throw Error(\"Generator is already running\"); if (4 === o) { if (\"throw\" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var u = n.delegate; if (u) { var c = d(u, n); if (c) { if (c === f) continue; return c; } } if (\"next\" === n.method) n.sent = n._sent = n.arg;else if (\"throw\" === n.method) { if (1 === o) throw o = 4, n.arg; n.dispatchException(n.arg); } else \"return\" === n.method && n.abrupt(\"return\", n.arg); o = 3; var h = s(r, e, n); if (\"normal\" === h.type) { if (o = n.done ? 4 : 2, h.arg === f) continue; return { value: h.arg, done: n.done }; } \"throw\" === h.type && (o = 4, n.method = \"throw\", n.arg = h.arg); } }; }(r, n, new Context(o || [])), !0), a; } function s(t, r, e) { try { return { type: \"normal\", arg: t.call(r, e) }; } catch (t) { return { type: \"throw\", arg: t }; } } r.wrap = h; var f = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var l = {}; c(l, i, function () { return this; }); var p = Object.getPrototypeOf, y = p && p(p(x([]))); y && y !== e && n.call(y, i) && (l = y); var v = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(l); function g(t) { [\"next\", \"throw\", \"return\"].forEach(function (r) { c(t, r, function (t) { return this._invoke(r, t); }); }); } function AsyncIterator(t, r) { function e(o, i, a, u) { var c = s(t[o], t, i); if (\"throw\" !== c.type) { var h = c.arg, f = h.value; return f && \"object\" == _typeof(f) && n.call(f, \"__await\") ? r.resolve(f.__await).then(function (t) { e(\"next\", t, a, u); }, function (t) { e(\"throw\", t, a, u); }) : r.resolve(f).then(function (t) { h.value = t, a(h); }, function (t) { return e(\"throw\", t, a, u); }); } u(c.arg); } var o; c(this, \"_invoke\", function (t, n) { function i() { return new r(function (r, o) { e(t, n, r, o); }); } return o = o ? o.then(i, i) : i(); }, !0); } function d(r, e) { var n = e.method, o = r.i[n]; if (o === t) return e.delegate = null, \"throw\" === n && r.i[\"return\"] && (e.method = \"return\", e.arg = t, d(r, e), \"throw\" === e.method) || \"return\" !== n && (e.method = \"throw\", e.arg = new TypeError(\"The iterator does not provide a '\" + n + \"' method\")), f; var i = s(o, r.i, e.arg); if (\"throw\" === i.type) return e.method = \"throw\", e.arg = i.arg, e.delegate = null, f; var a = i.arg; return a ? a.done ? (e[r.r] = a.value, e.next = r.n, \"return\" !== e.method && (e.method = \"next\", e.arg = t), e.delegate = null, f) : a : (e.method = \"throw\", e.arg = new TypeError(\"iterator result is not an object\"), e.delegate = null, f); } function w(t) { this.tryEntries.push(t); } function m(r) { var e = r[4] || {}; e.type = \"normal\", e.arg = t, r[4] = e; } function Context(t) { this.tryEntries = [[-1]], t.forEach(w, this), this.reset(!0); } function x(r) { if (null != r) { var e = r[i]; if (e) return e.call(r); if (\"function\" == typeof r.next) return r; if (!isNaN(r.length)) { var o = -1, a = function e() { for (; ++o < r.length;) if (n.call(r, o)) return e.value = r[o], e.done = !1, e; return e.value = t, e.done = !0, e; }; return a.next = a; } } throw new TypeError(_typeof(r) + \" is not iterable\"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, c(v, \"constructor\", GeneratorFunctionPrototype), c(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction), GeneratorFunction.displayName = c(GeneratorFunctionPrototype, u, \"GeneratorFunction\"), r.isGeneratorFunction = function (t) { var r = \"function\" == typeof t && t.constructor; return !!r && (r === GeneratorFunction || \"GeneratorFunction\" === (r.displayName || r.name)); }, r.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, c(t, u, \"GeneratorFunction\")), t.prototype = Object.create(v), t; }, r.awrap = function (t) { return { __await: t }; }, g(AsyncIterator.prototype), c(AsyncIterator.prototype, a, function () { return this; }), r.AsyncIterator = AsyncIterator, r.async = function (t, e, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(h(t, e, n, o), i); return r.isGeneratorFunction(e) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, g(v), c(v, u, \"Generator\"), c(v, i, function () { return this; }), c(v, \"toString\", function () { return \"[object Generator]\"; }), r.keys = function (t) { var r = Object(t), e = []; for (var n in r) e.unshift(n); return function t() { for (; e.length;) if ((n = e.pop()) in r) return t.value = n, t.done = !1, t; return t.done = !0, t; }; }, r.values = x, Context.prototype = { constructor: Context, reset: function reset(r) { if (this.prev = this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = \"next\", this.arg = t, this.tryEntries.forEach(m), !r) for (var e in this) \"t\" === e.charAt(0) && n.call(this, e) && !isNaN(+e.slice(1)) && (this[e] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0][4]; if (\"throw\" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(r) { if (this.done) throw r; var e = this; function n(t) { a.type = \"throw\", a.arg = r, e.next = t; } for (var o = e.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i[4], u = this.prev, c = i[1], h = i[2]; if (-1 === i[0]) return n(\"end\"), !1; if (!c && !h) throw Error(\"try statement without catch or finally\"); if (null != i[0] && i[0] <= u) { if (u < c) return this.method = \"next\", this.arg = t, n(c), !0; if (u < h) return n(h), !1; } } }, abrupt: function abrupt(t, r) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var n = this.tryEntries[e]; if (n[0] > -1 && n[0] <= this.prev && this.prev < n[2]) { var o = n; break; } } o && (\"break\" === t || \"continue\" === t) && o[0] <= r && r <= o[2] && (o = null); var i = o ? o[4] : {}; return i.type = t, i.arg = r, o ? (this.method = \"next\", this.next = o[2], f) : this.complete(i); }, complete: function complete(t, r) { if (\"throw\" === t.type) throw t.arg; return \"break\" === t.type || \"continue\" === t.type ? this.next = t.arg : \"return\" === t.type ? (this.rval = this.arg = t.arg, this.method = \"return\", this.next = \"end\") : \"normal\" === t.type && r && (this.next = r), f; }, finish: function finish(t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[2] === t) return this.complete(e[4], e[3]), m(e), f; } }, \"catch\": function _catch(t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[0] === t) { var n = e[4]; if (\"throw\" === n.type) { var o = n.arg; m(e); } return o; } } throw Error(\"illegal catch attempt\"); }, delegateYield: function delegateYield(r, e, n) { return this.delegate = { i: x(r), r: e, n: n }, \"next\" === this.method && (this.arg = t), f; } }, r; }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"next\", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"throw\", n); } _next(void 0); }); }; }\n// eager load the trimit service if the trimit widget is in the widget list\n// this ensures that all the services watchers and POS manipulations get's triggered\n// immediately instead of waiting for the widget to load the service (due to the depdenency).\n// Basically we're creating a \"fake\" dependency with the $injector service to eager load the trimit service\npos.run(function (posConfig, $injector, $log, eventBus) {\n  //async function loadConfig() {\n  var loadConfig = /*#__PURE__*/function () {\n    var _ref = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee() {\n      var trimitWidget;\n      return _regeneratorRuntime().wrap(function _callee$(_context) {\n        while (1) switch (_context.prev = _context.next) {\n          case 0:\n            _context.next = 2;\n            return posConfig.whenReady();\n          case 2:\n            trimitWidget = posConfig.getWidgets().find(function (widget) {\n              return widget.name === \"trimit\";\n            });\n            if (!trimitWidget) {\n              _context.next = 6;\n              break;\n            }\n            $log.debug(\"eager load trimit\");\n            return _context.abrupt(\"return\", $injector.get(\"trimitService\"));\n          case 6:\n          case \"end\":\n            return _context.stop();\n        }\n      }, _callee);\n    }));\n    return function loadConfig() {\n      return _ref.apply(this, arguments);\n    };\n  }();\n  loadConfig();\n  eventBus.subscribe(eventBus.events.pos.newConfig, null, loadConfig);\n});\npos.factory(\"trimitService\", function (trimitRepository, $rootScope, receipt, posConfig, $translate, notification, coreLoyaltyService, paymentService, defaultPaymentType, trimitPaymentType, eventBus) {\n  var service = {\n    isRequesting: false,\n    getDiscountsOngoing: false,\n    customer: null,\n    customerFields: null\n  };\n  var getDiscountsPending = false;\n  var i18nMemberDiscount;\n  var i18nFailedToGetDiscounts;\n  var i18nExceedingCreditLimit;\n  var trimitLoyaltyPayment = {\n    type: \"TrimitLoyaltyBonus\",\n    translation: \"button/trimitloyaltybonus\",\n    icon: \"fa-star\",\n    style: \"\",\n    paymentStrategy: \"trimitLoyalty\"\n  };\n  var trimitAccountPayment = {\n    type: \"Account\",\n    translation: \"button/account\",\n    icon: \"icons8-gender-neutral-user\",\n    style: \"\",\n    paymentStrategy: \"trimitAccount\"\n  };\n  var trimitLoyaltyPaymentStrategy = {\n    makePayment: trimitPaymentType.makeLoyaltyPayment,\n    responseSteps: [{\n      success: defaultPaymentType.addPaymentToReceipt\n    }, {\n      success: defaultPaymentType.isPaymentEnough\n    }, {\n      success: defaultPaymentType.doChange\n    }, {\n      success: defaultPaymentType.guaranteedFinishReceipt\n    }]\n  };\n  var trimitAccountPaymentStrategy = {\n    makePayment: trimitPaymentType.makeAccountPayment,\n    responseSteps: [{\n      success: defaultPaymentType.addPaymentToReceipt\n    }, {\n      success: defaultPaymentType.isPaymentEnough\n    }, {\n      success: defaultPaymentType.doChange\n    }, {\n      success: defaultPaymentType.guaranteedFinishReceipt\n    }]\n  };\n  posConfig.addBlockNavigationPaymentType(trimitLoyaltyPayment.type);\n  paymentService.setPaymentStrategy(trimitLoyaltyPayment.paymentStrategy, trimitLoyaltyPaymentStrategy);\n  paymentService.setPaymentStrategy(trimitAccountPayment.paymentStrategy, trimitAccountPaymentStrategy);\n  coreLoyaltyService.setLoyaltyPaymentType(trimitLoyaltyPayment);\n  function init() {\n    $translate([\"widget/trimit/memberdiscount\", \"widget/trimit/failedtogetdiscounts\", \"widget/trimit/exceedingcreditlimit\"]).then(function (translations) {\n      i18nMemberDiscount = translations[\"widget/trimit/memberdiscount\"];\n      i18nFailedToGetDiscounts = translations[\"widget/trimit/failedtogetdiscounts\"];\n      i18nExceedingCreditLimit = translations[\"widget/trimit/exceedingcreditlimit\"];\n    });\n    receipt.nonPersistantDiscountTypes.push(\"TRIMIT\");\n    trimitRepository.api.getCustomerFields().then(function (response) {\n      service.customerFields = response.data;\n    });\n  }\n  $rootScope.$watch(function () {\n    // we need to fetch discounts everytime the quantity changes\n    // either by increasing quantity on an existing line or adding a new line\n    return receipt.getReceipt().items.filter(function (item) {\n      return !item.isNetto;\n    }).reduce(function (pre, cur) {\n      return pre + cur.quantity;\n    }, 0);\n  }, function (qty) {\n    if (!qty || !service.customer || !service.customer.number) return;\n    service.getTrimitDiscountsBuffer(service.customer.number)[\"catch\"](function () {\n      service.getDiscountsOngoing = false;\n      notification.pop(\"error\", i18nFailedToGetDiscounts);\n    });\n  });\n\n  /**\n   * Clear the cached customer if the customerNumber is removed from the receipt\n   */\n  $rootScope.$watch(function () {\n    return receipt.getLoyaltyCustomerNumber();\n  }, function (customerNumber) {\n    if (!customerNumber) {\n      service.clearCustomer();\n    }\n  });\n  $rootScope.$on(\"payment:trimitError\", function (event, error) {\n    notification.pop(\"warning\", error);\n  });\n\n  /**\n   * Making sure we don't get overlapping requests to the Trimit service.\n   * If a change (or changes) on the receipt is detected while a request is ongoing,\n   * a single new discount request will fire as soon as the previous one finishes.\n   */\n  service.getTrimitDiscountsBuffer = /*#__PURE__*/function () {\n    var _ref2 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee2(customerNumber) {\n      var response;\n      return _regeneratorRuntime().wrap(function _callee2$(_context2) {\n        while (1) switch (_context2.prev = _context2.next) {\n          case 0:\n            if (service.getDiscountsOngoing) {\n              _context2.next = 12;\n              break;\n            }\n            service.getDiscountsOngoing = true;\n            _context2.next = 4;\n            return service.getTrimitDiscounts(customerNumber);\n          case 4:\n            response = _context2.sent;\n            service.getDiscountsOngoing = false;\n            _context2.next = 8;\n            return service.applyDiscounts(response.data);\n          case 8:\n            service.alertIfOverAvailableBalance();\n            if (getDiscountsPending) {\n              getDiscountsPending = false;\n              service.getTrimitDiscountsBuffer(customerNumber);\n            }\n            _context2.next = 13;\n            break;\n          case 12:\n            getDiscountsPending = true;\n          case 13:\n          case \"end\":\n            return _context2.stop();\n        }\n      }, _callee2);\n    }));\n    return function (_x) {\n      return _ref2.apply(this, arguments);\n    };\n  }();\n  service.getCustomer = function (searchString) {\n    return trimitRepository.api.getCustomer(searchString).then(function (response) {\n      var customer = response.data;\n      service.setCustomer(customer);\n      return customer;\n    });\n  };\n  service.toggleMember = /*#__PURE__*/function () {\n    var _ref3 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee3(customerNumber, isMember) {\n      return _regeneratorRuntime().wrap(function _callee3$(_context3) {\n        while (1) switch (_context3.prev = _context3.next) {\n          case 0:\n            _context3.next = 2;\n            return trimitRepository.api.toggleMember(customerNumber, isMember);\n          case 2:\n            service.customer.member = !isMember;\n          case 3:\n          case \"end\":\n            return _context3.stop();\n        }\n      }, _callee3);\n    }));\n    return function (_x2, _x3) {\n      return _ref3.apply(this, arguments);\n    };\n  }();\n  service.getDiscounts = /*#__PURE__*/function () {\n    var _ref4 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee4(customerNumber) {\n      var discountResponse;\n      return _regeneratorRuntime().wrap(function _callee4$(_context4) {\n        while (1) switch (_context4.prev = _context4.next) {\n          case 0:\n            if (!customerNumber) {\n              _context4.next = 7;\n              break;\n            }\n            _context4.next = 3;\n            return service.getTrimitDiscounts(customerNumber);\n          case 3:\n            discountResponse = _context4.sent;\n            _context4.next = 6;\n            return service.applyDiscounts(discountResponse.data);\n          case 6:\n            service.alertIfOverAvailableBalance();\n          case 7:\n          case \"end\":\n            return _context4.stop();\n        }\n      }, _callee4);\n    }));\n    return function (_x4) {\n      return _ref4.apply(this, arguments);\n    };\n  }();\n\n  /**\n   * Serving customer data if widget is reloaded or page refreshed\n   */\n  service.loadCustomer = /*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee5() {\n    return _regeneratorRuntime().wrap(function _callee5$(_context5) {\n      while (1) switch (_context5.prev = _context5.next) {\n        case 0:\n          if (!service.customer) {\n            _context5.next = 4;\n            break;\n          }\n          return _context5.abrupt(\"return\", service.customer);\n        case 4:\n          if (!receipt.getLoyaltyCustomerNumber()) {\n            _context5.next = 8;\n            break;\n          }\n          return _context5.abrupt(\"return\", service.getCustomer(receipt.getLoyaltyCustomerNumber()));\n        case 8:\n          return _context5.abrupt(\"return\", null);\n        case 9:\n        case \"end\":\n          return _context5.stop();\n      }\n    }, _callee5);\n  }));\n  service.addCustomer = /*#__PURE__*/function () {\n    var _ref6 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee6(customer) {\n      var response;\n      return _regeneratorRuntime().wrap(function _callee6$(_context6) {\n        while (1) switch (_context6.prev = _context6.next) {\n          case 0:\n            _context6.next = 2;\n            return trimitRepository.api.addCustomer(customer);\n          case 2:\n            response = _context6.sent;\n            return _context6.abrupt(\"return\", response.data);\n          case 4:\n          case \"end\":\n            return _context6.stop();\n        }\n      }, _callee6);\n    }));\n    return function (_x5) {\n      return _ref6.apply(this, arguments);\n    };\n  }();\n  service.setCustomer = function (customer) {\n    receipt.attachCustomer(customer.number, customer.email);\n    coreLoyaltyService.attachCustomer({\n      customerNumber: customer.number,\n      customerEmail: customer.emailAddress,\n      loyaltyPointsAvailable: customer.bonusAmount\n    });\n    if (customer.creditLimit) {\n      service.addTrimitAccountPayment();\n    }\n    service.customer = customer;\n  };\n  service.clearCustomer = function () {\n    service.customer = null;\n    var items = receipt.getReceipt().items;\n    service.removeTrimitDiscounts(items);\n    service.removeTrimitAccountPayment();\n    coreLoyaltyService.detachCustomer();\n    receipt.detachCustomer();\n  };\n  service.setMemberNumber = function (memberNumber, memberEmail) {\n    receipt.attachCustomer(memberNumber, memberEmail);\n    service.memberNumber = memberNumber;\n    if (!memberNumber) {\n      var items = receipt.getReceipt().items;\n      service.removeTrimitDiscounts(items);\n    }\n  };\n  service.alertIfOverAvailableBalance = function () {\n    var availableCreditDecimal = new Decimal(service.customer.availableCredit || 0);\n    if (service.customer.creditLimit > 0 && receipt.getTotal().gt(availableCreditDecimal)) {\n      notification.pop(\"info\", i18nExceedingCreditLimit);\n    }\n  };\n  service.removeTrimitAccountPayment = function () {\n    var paymentTypes = posConfig.getPaymentTypeConfigs();\n    var trimitPaymentIndex = paymentTypes.findIndex(function (payment) {\n      return payment.paymentStrategy === trimitAccountPayment.paymentStrategy;\n    });\n    if (trimitPaymentIndex > -1) {\n      paymentTypes.splice(trimitPaymentIndex, 1);\n      posConfig.setPaymentTypeConfigs(paymentTypes);\n    }\n  };\n  service.addTrimitAccountPayment = function () {\n    var paymentTypes = posConfig.getPaymentTypeConfigs();\n    var accountIndex = paymentTypes.findIndex(function (paymentType) {\n      return paymentType.type === \"Account\";\n    });\n    if (accountIndex == -1) {\n      // Adding the account payment type after 'Card' in the list of payment types.\n      // If for a very strange reason 'Card' is not found, it's added on top.\n      var cardIndex = paymentTypes.findIndex(function (paymentType) {\n        return paymentType.type === \"Card\";\n      });\n      if (cardIndex > -1) {\n        paymentTypes.splice(cardIndex + 1, 0, trimitAccountPayment);\n      } else {\n        paymentTypes.unshift(trimitAccountPayment);\n      }\n      posConfig.setPaymentTypeConfigs(paymentTypes);\n    }\n  };\n  service.getTrimitDiscounts = function (customerNumber) {\n    // Creating a basket model\n    var currentReceipt = receipt.getReceipt();\n    var basket = {\n      basketHeader: {\n        storeNo: posConfig.shopId,\n        posNo: posConfig.posId,\n        groupId: posConfig.groupId,\n        basketDate: currentReceipt.date,\n        userId: currentReceipt.clerk,\n        customerNo: customerNumber,\n        currencyCode: posConfig.getLocalCurrency().name\n      },\n      basketLines: []\n    };\n    currentReceipt.items.forEach(function (item, index) {\n      if (item.ean) {\n        basket.basketLines.push({\n          sequenceNo: index,\n          barcode: item.ean,\n          itemNo: item.itemNo,\n          totalPrice: item.salesPrice.times(item.quantity),\n          quantity: item.quantity\n        });\n      }\n    });\n    return trimitRepository.api.getDiscounts(basket);\n  };\n  service.removeTrimitDiscounts = /*#__PURE__*/function () {\n    var _ref7 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee7(items) {\n      var discountableItems;\n      return _regeneratorRuntime().wrap(function _callee7$(_context7) {\n        while (1) switch (_context7.prev = _context7.next) {\n          case 0:\n            discountableItems = items.filter(function (item) {\n              return !item.isNetto && item.discountDetails;\n            });\n            discountableItems.forEach(function (item) {\n              var trimitDiscountIndex = item.discountDetails.findIndex(function (discount) {\n                return discount.type === \"TRIMIT\";\n              });\n              if (trimitDiscountIndex > -1) {\n                item.discountDetails.splice(trimitDiscountIndex, 1);\n              }\n            });\n            receipt.reCalculateDiscounts();\n          case 3:\n          case \"end\":\n            return _context7.stop();\n        }\n      }, _callee7);\n    }));\n    return function (_x6) {\n      return _ref7.apply(this, arguments);\n    };\n  }();\n  service.applyDiscounts = /*#__PURE__*/function () {\n    var _ref8 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee8(promotions) {\n      var items;\n      return _regeneratorRuntime().wrap(function _callee8$(_context8) {\n        while (1) switch (_context8.prev = _context8.next) {\n          case 0:\n            items = receipt.getReceipt().items; //Remove TRIMIT discounts from the receipt before applying new/updated ones\n            _context8.next = 3;\n            return service.removeTrimitDiscounts(items);\n          case 3:\n            promotions.forEach(function (discountLine) {\n              // Iterate through the response from the TRIMIT and if there is a discount, it finds\n              // the corresponding item in the receipt to apply the discount too.\n              if (discountLine.memberDiscPct > 0) {\n                items.forEach(function (item, index) {\n                  // Sequence number and item number must match\n                  if (Number(index) === Number(discountLine.lineNo) && item.itemNo == discountLine.itemNo) {\n                    var fallbackReasonCode = 1990;\n                    var reasonCode = discountLine.reasonCodeId && !isNaN(discountLine.reasonCodeId) ? discountLine.reasonCodeId : fallbackReasonCode;\n                    var reasonCodeText = discountLine.reasonCodeText ? discountLine.reasonCodeText : i18nMemberDiscount;\n                    // Setting up discount\n                    var addToDiscountList = true;\n                    var discountDetails = {\n                      type: \"TRIMIT\"\n                    };\n                    var lineIndex = index;\n                    var discountReason = {\n                      reason: reasonCodeText,\n                      id: Number(reasonCode) //Id must be an integer for the ARM device to validate\n                    };\n                    receipt.setLineDiscount(discountLine.memberDiscPct, discountReason, lineIndex, discountDetails, addToDiscountList);\n                  }\n                });\n              }\n            });\n          case 4:\n          case \"end\":\n            return _context8.stop();\n        }\n      }, _callee8);\n    }));\n    return function (_x7) {\n      return _ref8.apply(this, arguments);\n    };\n  }();\n\n  /** Weborders */\n  service.getWebOrders = function () {\n    return webOrderRepository.api.getWebOrders().then(function (response) {\n      if (response && response.data) {\n        response.data = response.data.map(function (weborder) {\n          return _objectSpread(_objectSpread({}, weborder), {}, {\n            date: new Date(weborder.createdOn),\n            webOrderLines: [{\n              barcode: weborder.barCode,\n              effectiveSalesPrice: weborder.netSalesPrice,\n              notes: weborder.orderDescription\n            }]\n          });\n        });\n      }\n      return response.data;\n    });\n  };\n  service.getMoreWebOrders = function (searchParams, after, recordCount) {\n    var firstName, lastName, email, phoneNo, orderNo;\n    if (searchParams.firstName) firstName = searchParams.firstName.value;\n    if (searchParams.lastName) lastName = searchParams.lastName.value;\n    if (searchParams.email) email = searchParams.email.value;\n    if (searchParams.phoneNo) phoneNo = searchParams.phoneNo.value;\n    if (searchParams.orderNo) orderNo = searchParams.orderNo.value;\n    return trimitRepository.api.getWebOrders(firstName, lastName, email, phoneNo, orderNo).then(function (response) {\n      if (response && response.data) {\n        response.data = response.data.map(function (weborder) {\n          return _objectSpread(_objectSpread({}, weborder), {}, {\n            date: new Date(weborder.createdOn),\n            webOrderLines: [{\n              effectiveSalesPrice: weborder.netSalesPrice,\n              notes: weborder.orderDescription\n            }]\n          });\n        });\n        return response.data;\n      }\n      return [];\n    });\n  };\n  service.addToReceipt = function (webOrder) {\n    if (!webOrder || service.isAddedToReceipt(webOrder)) return;\n    receipt.addWebOrder(webOrder.netSalesPrice, webOrder.itemGroup, webOrder.orderNo, webOrder.shopId, true, webOrder.vatPercent, \"trimit\");\n\n    // Used by trimit services to tell trimit weborders apart from other weborders\n    var orderIndex = receipt.getReceipt().items.findIndex(function (wOrder) {\n      return wOrder.webOrderNumber === webOrder.orderNo;\n    });\n    receipt.addEnteredText(\"TrimitOrder: \".concat(webOrder.orderNo), orderIndex);\n  };\n  service.skipWebOrder = function (webOrder) {\n    if (!webOrder) return;\n    return trimitRepository.api.skip(webOrder);\n  };\n  service.isAddedToReceipt = function (webOrder) {\n    return receipt.getReceipt().items.findIndex(function (item) {\n      return item.webOrderNumber === webOrder.orderNo;\n    }) > -1;\n  };\n  eventBus.subscribe(eventBus.events.pos.newConfig, null, function () {\n    if (service.customer && service.customer.creditLimit) {\n      service.addTrimitAccountPayment();\n    }\n  });\n  init();\n  return service;\n});\n","\"use strict\";\n\npos.directive(\"trimitWidget\", function (trimitService, receipt, $translate, notification, keypadManager) {\n  return {\n    templateUrl: \"views/widgets/widget-trimit\",\n    link: function link(scope, ele, attr) {\n      scope.trimit = {\n        customer: null,\n        customerFields: null,\n        searchString: \"\"\n      };\n      scope.loading = {\n        text: \"\",\n        trimit: false,\n        memberToggle: false\n      };\n      var i18nCustomerNotFound;\n      var i18nFailedToChangeMembership;\n      var i18nFailedToGetDiscounts;\n      var i18nFetchingCustomer;\n      var i18nCheckingDiscounts;\n      var i18nMissingNumber;\n      $translate([\"widget/trimit/customernotfound\", \"widget/trimit/failedtochangestatus\", \"widget/trimit/failedtogetdiscounts\", \"widget/trimit/fetchingcustomer\", \"widget/trimit/checkingdiscounts\", \"widget/trimit/missingNumber\"]).then(function (translations) {\n        i18nCustomerNotFound = translations[\"widget/trimit/customernotfound\"];\n        i18nFailedToChangeMembership = translations[\"widget/trimit/failedtochangestatus\"];\n        i18nFailedToGetDiscounts = translations[\"widget/trimit/failedtogetdiscounts\"];\n        i18nFetchingCustomer = translations[\"widget/trimit/fetchingcustomer\"];\n        i18nCheckingDiscounts = translations[\"widget/trimit/checkingdiscounts\"];\n        i18nMissingNumber = translations[\"widget/trimit/missingNumber\"];\n      });\n      trimitService.loadCustomer().then(function (response) {\n        scope.trimit.customer = response;\n        scope.trimit.customerFields = trimitService.customerFields;\n      });\n      scope.$watch(function () {\n        return trimitService.getDiscountsOngoing;\n      }, function (requestOngoing) {\n        scope.loading.text = i18nCheckingDiscounts;\n        scope.loading.trimit = requestOngoing;\n      });\n      scope.$watch(function () {\n        return trimitService.customer;\n      }, function (customer) {\n        if (customer && !scope.trimit.customer && scope.isReceiptOpen()) {\n          scope.trimit.customer = customer;\n          scope.trimit.customerFields = trimitService.customerFields;\n          scope.getTrimitDiscounts();\n        }\n      });\n      scope.toggleTrimitMember = function () {\n        scope.loading.memberToggle = true;\n        trimitService.toggleMember(scope.trimit.customer.number, scope.trimit.customer.member)[\"catch\"](function () {\n          return notification.pop(\"error\", i18nFailedToChangeMembership);\n        })[\"finally\"](function () {\n          return scope.loading.memberToggle = false;\n        });\n      };\n      scope.displayInSidebar = function (attribute) {\n        var customerAttrib = scope.trimit.customerFields.find(function (attrib) {\n          return attrib.fieldName === attribute;\n        });\n        return customerAttrib && customerAttrib.visibleLeftPanel;\n      };\n      scope.clearTrimitCustomer = function () {\n        scope.trimit.customer = null;\n        trimitService.clearCustomer();\n      };\n      scope.getTrimitCustomer = function (searchString) {\n        if (!searchString) {\n          notification.pop(\"info\", i18nMissingNumber);\n          return;\n        }\n\n        // Indicate loading\n        scope.loading.text = i18nFetchingCustomer;\n        scope.loading.trimit = true;\n        trimitService.getCustomer(searchString).then(function () {\n          scope.trimit.searchString = \"\";\n          scope.loading.trimit = false;\n          scope.getTrimitDiscounts();\n        })[\"catch\"](function () {\n          notification.pop(\"info\", i18nCustomerNotFound);\n          scope.loading.trimit = false;\n        });\n      };\n      scope.getTrimitDiscounts = function () {\n        keypadManager.hide();\n        if (!receipt.isEmpty() && scope.trimit.customer && !scope.loading.trimit) {\n          scope.loading.trimit = true;\n          trimitService.getDiscounts(scope.trimit.customer.number)[\"catch\"](function () {\n            return notification.pop(\"error\", i18nFailedToGetDiscounts);\n          })[\"finally\"](function () {\n            return scope.loading.trimit = false;\n          });\n        }\n      };\n      scope.isReceiptOpen = function () {\n        return window.location.hash == \"#/pos\";\n      };\n    }\n  };\n});\n","\"use strict\";\n\npos.directive(\"trimitnewcustomerWidget\", function ($location, $translate, trimitService, notification) {\n  return {\n    templateUrl: \"views/widgets/widget-trimitnewcustomer\",\n    controller: function controller($scope) {\n      $scope.formSubmitted = false;\n      $scope.customerFields = trimitService.customerFields;\n      $scope.emailPattern = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]{2,}$/;\n      $scope.newCustomer = {};\n    },\n    link: function link(scope) {\n      var i18nFailedToAddCustomer;\n      $translate([\"widget/trimit/failedtoaddcustomer\"]).then(function (translations) {\n        i18nFailedToAddCustomer = translations[\"widget/trimit/failedtoaddcustomer\"];\n      });\n      scope.displayInEditPanel = function (fieldName) {\n        var customerAttrib = scope.customerFields.find(function (attrib) {\n          return attrib.fieldName === fieldName;\n        });\n        return customerAttrib && customerAttrib.visibleEditPanel;\n      };\n      scope.isFieldRequired = function (fieldName) {\n        var isRequiredField = scope.customerFields.find(function (attrib) {\n          return attrib.fieldName === fieldName;\n        });\n        return isRequiredField && isRequiredField.required;\n      };\n      scope.isDisabled = function (fieldName) {\n        var isDisabledField = scope.customerFields.find(function (attrib) {\n          return attrib.fieldName === fieldName;\n        });\n        return isDisabledField && isDisabledField.readOnly;\n      };\n      scope.saveCustomer = function (formState) {\n        scope.formSubmitted = true;\n        if (!formState) return;\n        trimitService.addCustomer(scope.newCustomer).then(function (response) {\n          scope.saveSuccess(response);\n        })[\"catch\"](function (error) {\n          scope.saveFailed(error);\n        });\n      };\n      scope.saveSuccess = function (response) {\n        if (response) {\n          trimitService.setCustomer(response);\n          $location.path(\"pos\");\n        }\n      };\n      scope.saveFailed = function (errorResponse) {\n        notification.pop(\"error\", i18nFailedToAddCustomer, errorResponse);\n      };\n    }\n  };\n});\n","\"use strict\";\n\nfunction _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); }\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _iterableToArray(r) { if (\"undefined\" != typeof Symbol && null != r[Symbol.iterator] || null != r[\"@@iterator\"]) return Array.from(r); }\nfunction _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\npos.directive(\"trimitweborderWidget\", function (trimitService, $translate, keypadManager, hideDivSuppressor, notification, $state) {\n  return {\n    templateUrl: \"views/widgets/widget-trimitweborder\",\n    controller: function controller($scope, $log) {\n      $scope.paginationSize = 20;\n      $scope.after = 0;\n      var selectedIndex = -1;\n      var i18nCheckLog;\n      $scope.buildWebOrderSearchParameters = function () {\n        $scope.searchParams = {\n          firstName: {\n            name: \"FirstName\",\n            value: \"\"\n          },\n          lastName: {\n            name: \"LastName\",\n            value: \"\"\n          },\n          email: {\n            name: \"Email\",\n            value: \"\"\n          },\n          phoneNo: {\n            name: \"PhoneNo\",\n            value: \"\"\n          },\n          orderNo: {\n            name: \"OrderNo\",\n            value: \"\"\n          }\n        };\n        $translate([\"widget/webOrderFilter/searchFirstName\", \"widget/webOrderFilter/searchLastName\", \"widget/webOrderFilter/searchEmail\", \"widget/webOrderFilter/searchPhoneNo\", \"widget/webOrderFilter/searchOrderNo\", \"toast/check log\"]).then(function (translations) {\n          $scope.searchParams.firstName.name = translations[\"widget/webOrderFilter/searchFirstName\"];\n          $scope.searchParams.lastName.name = translations[\"widget/webOrderFilter/searchLastName\"];\n          $scope.searchParams.email.name = translations[\"widget/webOrderFilter/searchEmail\"];\n          $scope.searchParams.phoneNo.name = translations[\"widget/webOrderFilter/searchPhoneNo\"];\n          $scope.searchParams.orderNo.name = translations[\"widget/webOrderFilter/searchOrderNo\"];\n          i18nCheckLog = translations[\"toast/check log\"];\n        });\n      };\n      $scope.searchWebOrder = function () {\n        keypadManager.hide();\n        if (hideDivSuppressor.target) hideDivSuppressor.target.hide();\n        $scope.searchResults = [];\n        $scope.after = 0;\n        $scope.fetchFailed = false;\n        $scope.getMoreWebOrders();\n      };\n      $scope.getMoreWebOrders = function () {\n        trimitService.getMoreWebOrders($scope.searchParams, $scope.after, $scope.paginationSize).then(handleWebOrders, notifyError);\n      };\n      $scope.addToReceipt = function (webOrder) {\n        trimitService.addToReceipt(webOrder);\n        $state.go(\"root.split.pos\");\n      };\n      $scope.isSelected = function (index) {\n        return index === selectedIndex;\n      };\n      $scope.isNotSelected = function (index) {\n        return !$scope.isSelected(index);\n      };\n      $scope.setSelected = function (index) {\n        selectedIndex = index;\n      };\n      $scope.skipWebOrder = function (webOrder) {\n        trimitService.skipWebOrder(webOrder).then(function (res) {\n          var index = $scope.searchResults.findIndex(function (o) {\n            return o.orderNo === webOrder.orderNo;\n          });\n          if (index > -1) {\n            if (res.data && res.data.orderNo === webOrder.orderNo) {\n              $scope.searchResults[index] = res.data;\n            } else {\n              $scope.searchResults.splice(index, 1);\n            }\n          }\n        });\n      };\n      function handleWebOrders(response) {\n        $scope.searchResults = [].concat(_toConsumableArray($scope.searchResults), _toConsumableArray(response));\n        if (response.length === 0) {\n          $scope.fetchFailed = true;\n        }\n        $scope.after += $scope.paginationSize;\n      }\n      function notifyError(errorResponse) {\n        $log.debug(\"searchByParameter error\");\n        $log.debug(errorResponse);\n        notification.pop(\"error\", i18nCheckLog);\n      }\n      $scope.buildWebOrderSearchParameters();\n      $scope.searchWebOrder();\n    },\n    link: function link(scope, el, attr, controller) {\n      scope.reset = reset;\n      function reset() {\n        scope.buildWebOrderSearchParameters();\n        scope.searchWebOrder();\n      }\n    }\n  };\n});\n","\"use strict\";\n\npos.factory(\"webOrderWidgetService\", function (webOrderRepository, posConfig, backend, receipt, webOrderStatusEnum, eventBus, findCustomerService, posStorage, fluctuatingPropertiesHelper) {\n  var STORAGE = \"weborders\";\n  var weborderModal = null;\n  var service = {};\n  service.getWebOrders = function () {\n    return webOrderRepository.api.getWebOrders().then(function (response) {\n      response.data.date = new Date(response.data.date);\n      return response.data;\n    });\n  };\n  service.getMoreWebOrders = function (searchParams, after, recordCount) {\n    var firstName = !searchParams.firstName ? \"\" : searchParams.firstName.value;\n    var lastName = !searchParams.lastName ? \"\" : searchParams.lastName.value;\n    var email = !searchParams.email ? \"\" : searchParams.email.value;\n    var phoneNo = !searchParams.phoneNo ? \"\" : searchParams.phoneNo.value;\n    var orderNo = !searchParams.orderNo ? \"\" : searchParams.orderNo.value;\n    var externalUniqueId = \"\";\n    var cust = receipt.getCustomer();\n    if (cust.customerNumber) {\n      externalUniqueId = cust.customerNumber;\n    }\n    return webOrderRepository.api.getWebOrders(firstName, lastName, email, phoneNo, orderNo, externalUniqueId).then(function (response) {\n      if (response) {\n        response.data.date = new Date(response.data.date);\n        return response.data;\n      }\n      return [];\n    });\n  };\n  service.resetLines = function (webOrderLine) {\n    var cachedWebOrders = posStorage.get(STORAGE) || [];\n    var webOrderIdx = cachedWebOrders.findIndex(function (o) {\n      return o.orderNo == webOrderLine.webOrderNumber;\n    });\n    if (webOrderIdx > -1) {\n      var weborder = cachedWebOrders.splice(webOrderIdx, 1)[0];\n      weborder.webOrderLines.forEach(function (line) {\n        return line.status = webOrderStatusEnum.reserved;\n      });\n      webOrderRepository.api.update(weborder);\n      posStorage.set(STORAGE, cachedWebOrders);\n    }\n  };\n  service.skipWebOrder = function (webOrder) {\n    if (!webOrder) return;\n    return webOrderRepository.api.skip(webOrder);\n  };\n  service.printPickList = function (webOrder) {\n    if (!webOrder) return;\n    var deviceIndex = backend.defaultDevice;\n    return webOrderRepository.api.printPickList(deviceIndex, webOrder, posConfig.printTranslations);\n  };\n\n  // All web order lines are picked when adding to receipt\n  // TODO: unpick them if it gets removed from the receipt\n  service.addToReceipt = function (webOrder) {\n    if (!webOrder || this.isAddedToReceipt(webOrder)) return;\n    webOrder.webOrderLines.forEach(function (line) {\n      return line.status = webOrderStatusEnum.picked;\n    });\n    var promise = webOrderRepository.api.update(webOrder);\n    var price = this.sumTotal(webOrder.webOrderLines);\n    var vatAmount = this.sumVatAmount(webOrder.webOrderLines);\n    var averageVatPercentage = price - vatAmount > 0 ? vatAmount * (100 / (price - vatAmount)) : 0;\n\n    //load customer to receipt when the weborder contains a customer\n    if (webOrder.externalUniqueId) {\n      var cust = receipt.getCustomer();\n      if (!cust.customerNumber) {\n        findCustomerService.getCustomerByNumber(webOrder.externalUniqueId).then(function (customer) {\n          receipt.attachCustomer(customer.externalUniqueId, customer.emailAddress);\n          eventBus.notify(eventBus.events.customer.attach, customer);\n        });\n      }\n    }\n    cacheWebOrderObj(webOrder);\n    receipt.addWebOrder(price, webOrder.itemGroup, webOrder.orderNo, webOrder.webShopId, 0, averageVatPercentage);\n    return promise;\n  };\n  service.isAddedToReceipt = function (webOrder) {\n    return receipt.getReceipt().items.findIndex(function (item) {\n      return item.webOrderNumber === webOrder.orderNo;\n    }) > -1;\n  };\n  service.sumTotal = function (webOrderLines) {\n    if (!webOrderLines) return 0;\n    return webOrderLines.filter(function (line) {\n      return line.status != webOrderStatusEnum.skipped;\n    }).reduce(function (total, orderLine) {\n      return total + orderLine.effectiveSalesPrice;\n    }, 0);\n  };\n  service.sumVatAmount = function (webOrderLines) {\n    if (!webOrderLines) return 0;\n    return webOrderLines.filter(function (line) {\n      return line.status != webOrderStatusEnum.skipped;\n    }).reduce(function (total, orderLine) {\n      return total + orderLine.vatAmount;\n    }, 0);\n  };\n\n  // Updates all weborders on the receipt to sold\n  service.onSaleCompleted = function (finishedReceipt) {\n    var orderNos = [];\n    receipt.getReceipt().items.filter(function (item) {\n      return item.webOrderNumber && item.source === \"weborder\";\n    }).forEach(function (item) {\n      return orderNos.push({\n        orderNo: item.webOrderNumber,\n        webShopId: item.webShopId\n      });\n    });\n    posStorage.remove(STORAGE);\n    if (orderNos.length) webOrderRepository.api.saleCompleted(orderNos);\n  };\n  service.onSaleCancelled = function (e, receipt) {\n    var webOrderLines = receipt.items.filter(function (item) {\n      return item.webOrderNumber && item.source == \"weborder\";\n    });\n    webOrderLines.forEach(function (line) {\n      return service.resetLines(line);\n    });\n  };\n  function cacheWebOrderObj(weborder) {\n    var currentWeborders = posStorage.get(STORAGE) || [];\n    currentWeborders.push(weborder);\n    posStorage.set(STORAGE, currentWeborders);\n  }\n  service.getWeborderModal = function (type) {\n    weborderModal = {};\n    weborderModal.type = type;\n    weborderModal.isVisible = false;\n    weborderModal.location = posStorage.get(\"current_shop\").description;\n    weborderModal.imageUrl = posStorage.get(\"current_shop\").imageUrl;\n    weborderModal.webOrderDispatchNoteLines = posConfig.getWebOrderDispatchNoteLines();\n    weborderModal.buttons = [];\n    if (weborderModal.type === \"picklist\") {\n      weborderModal.buttons.push({\n        label: \"widget/weborder/receiptprinter\",\n        type: \"success\",\n        isDefault: false,\n        closes: true,\n        action: function action(webOrder) {\n          service.printPickList(webOrder);\n        }\n      });\n    }\n    weborderModal.buttons.push({\n      label: \"weborder/windowsprinter\",\n      type: \"success\",\n      isDefault: false,\n      closes: true,\n      action: function action(webOrder) {\n        var newWindow = window.open();\n        newWindow.document.write(document.getElementsByTagName(\"weborder-view\")[0].innerHTML);\n        setTimeout(function () {\n          newWindow.print();\n          newWindow.close();\n        }, 300);\n      }\n    });\n    weborderModal.buttons.push({\n      label: \"button/cancel\",\n      type: \"warning\",\n      isDefault: true,\n      closes: true,\n      action: function action() {}\n    });\n    return weborderModal;\n  };\n  service.showDispatchNoteButton = function (receipt) {\n    return receipt.items.some(function (i) {\n      return i.webOrderNumber;\n    });\n  };\n  service.showWebOrderModalFromReceipt = function (receipt) {\n    var webOrderItem = receipt.items.find(function (i) {\n      return i.webOrderNumber;\n    });\n    if (webOrderItem) {\n      var webShopId = fluctuatingPropertiesHelper.getWebshopId(webOrderItem);\n      webOrderRepository.api.getWebOrder(webOrderItem.webOrderNumber, webShopId).then(function (response) {\n        showWebOrder(response.data);\n      });\n    }\n  };\n  service.showWebOrderModalFromWeborder = function (weborder) {\n    showWebOrder(weborder);\n  };\n  function showWebOrder(webOrder) {\n    weborderModal.isVisible = true;\n    weborderModal.orgWeborder = webOrder;\n    weborderModal.webOrder = angular.copy(webOrder);\n    weborderModal.webOrder.orderedOn = webOrder.orderedOn ? moment(webOrder.orderedOn).format(\"YYYY-MM-DD\") : \"-\";\n    weborderModal.webOrder.pickedUpOn = webOrder.pickedUpOn ? moment(webOrder.pickedUpOn).format(\"YYYY-MM-DD\") : \"-\";\n    weborderModal.webOrder.dispatchedUpOn = moment().format(\"YYYY-MM-DD\");\n    weborderModal.total = service.sumTotal(webOrder.webOrderLines);\n    weborderModal.vat = service.sumVatAmount(webOrder.webOrderLines);\n  }\n  eventBus.subscribe(eventBus.events.sale.completed, null, service.onSaleCompleted);\n  eventBus.subscribe(eventBus.events.sale.cancelled, null, service.onSaleCancelled);\n  return service;\n});\n","\"use strict\";\n\npos.directive(\"weborderWidget\", function (webOrderWidgetService, $filter, $translate) {\n  return {\n    templateUrl: \"views/widgets/widget-weborder\",\n    controller: function controller($scope, Widgets) {\n      $scope.widgetsService = Widgets;\n      $scope.hideWidgets = function () {\n        $scope.widgetsService.showWidgets = false;\n        $(\"#center-content.center-content--downscale\").removeClass(\"center-content--downscale\");\n      };\n    },\n    link: function link(scope, ele, attr) {\n      scope.ordersVisible = false;\n      scope.loadingOrders = false;\n      scope.ordersInitiallyFetched = false;\n      scope.error = false;\n      scope.toggleOrder = function (order) {\n        scope.activeOrder = scope.activeOrder == order ? null : order;\n      };\n      scope.getWebOrders = function () {\n        // Indicate loading\n        scope.loadingOrders = true;\n\n        // Fetch products\n        webOrderWidgetService.getWebOrders().then(function (response) {\n          var ordersQuery = $filter(\"orderBy\")(response, \"-orderNo\");\n          angular.forEach(ordersQuery, function (item) {\n            item.price = new Decimal(item.price);\n          });\n\n          // Check if the new orders are equal to the old\n          if (scope.availableOrders != ordersQuery) {\n            scope.availableOrders = ordersQuery;\n            scope.ordersInitiallyFetched = true;\n          }\n          scope.loadingOrders = false;\n          scope.ordersVisible = true;\n          scope.error = false;\n        }, function (error) {\n          scope.loadingOrders = false;\n          scope.error = error;\n        });\n      };\n    }\n  };\n});\n","\"use strict\";\n\npos.controller(\"WidgetsCtrl\", function ($scope, posConfig, Widgets, eventBus, backend) {\n  loadConfig();\n  if (!$scope.widgets || $scope.widgets.length === 0) {\n    $scope.widgets = [{\n      name: \"teaser\"\n    }];\n  }\n  $scope.widgetsService = Widgets;\n  $scope.activeWidget = 0;\n  $scope.apiOnline = backend.api.isOnline;\n  $scope.hideWidgets = function () {\n    $scope.widgetsService.showWidgets = false;\n    $(\"#center-content.center-content--downscale\").removeClass(\"center-content--downscale\");\n  };\n\n  // Set the active widget (on mobile)\n  $scope.setActiveWidget = function (index) {\n    $scope.activeWidget = index;\n  };\n  $scope.isActiveWidget = function (index) {\n    return \"w\" + $scope.activeWidget === \"w\" + index;\n  };\n  $scope.$on(\"device:offline\", function (event, device) {\n    if (device.isApi) $scope.apiOnline = false;\n  });\n  $scope.$on(\"device:retry:success\", function (event, device) {\n    if (device.isApi) {\n      $scope.apiOnline = true;\n    }\n  });\n  $scope.mobileMode = function () {\n    // The element with the \"widget-tray__body--mobile\" class\n    // is only visible if the POS is in mobile-mode (width < 992)\n    var elementArray = document.getElementsByClassName(\"widget-tray__body--mobile\");\n    return elementArray.length > 0;\n  };\n  function loadConfig() {\n    $scope.widgets = posConfig.getWidgets();\n\n    // If the logo widget is there, it should always be the first shown\n    var logoWidgetIdx = $scope.widgets.findIndex(function (widget) {\n      return widget.name == \"logo\";\n    });\n    if (logoWidgetIdx >= 0) {\n      var logoWidget = $scope.widgets.splice(logoWidgetIdx, 1)[0];\n      $scope.widgets.unshift(logoWidget);\n    }\n  }\n  eventBus.subscribe(eventBus.events.pos.newConfig, $scope, loadConfig);\n});\n","\"use strict\";\n\npos.directive(\"widget\", function ($compile, $interpolate) {\n  return {\n    template: \"\",\n    scope: {\n      options: \"=\"\n    },\n    link: function link(scope, element, attributes) {\n      element.append($compile(\"<div \" + scope.options.name + '-widget class=\"widget-overflow\"></div>')(scope));\n    }\n  };\n}).directive(\"teaserWidget\", function () {\n  return {\n    templateUrl: \"views/widgets/teaser-widget\"\n  };\n});\npos.directive(\"mpwidget\", function ($compile, $interpolate) {\n  return {\n    template: \"\",\n    scope: {\n      options: \"=\"\n    },\n    link: function link(scope, element) {\n      element.append($compile(\"<\" + scope.options.name + \"-widget></\" + scope.options.name + \">\")(scope));\n    }\n  };\n});\n","\"use strict\";\n\npos.factory(\"Widgets\", function () {\n  return {\n    showWidgets: false\n  };\n});\n","\"use strict\";\n\npos.controller(\"mainPaneWidgetCtrl\", function ($scope, $stateParams) {\n  var widgetName = $stateParams.widgetName;\n  $scope.mpWidget = {\n    name: widgetName,\n    icon: \"icons8-gender-neutral-user\"\n  };\n});\n","\"use strict\";\n\npos.controller(\"ConnectorXReportCtrl\", function ($scope, receipt, backend, clerkLoginService, notification, $translate) {\n  \"use strict\";\n\n  $scope.disabled = false;\n  var noDailyClosure = \"\";\n  var unexpectedErrorTitle = \"\";\n  $translate([\"xreport/noDailyClosure\", \"toast/unexpectedErrorTitle\"]).then(function (translations) {\n    noDailyClosure = translations[\"xreport/noDailyClosure\"];\n  });\n  $scope.print = function () {\n    $scope.disabled = true;\n    var localTime = moment(new Date()).format();\n    backend.devices[backend.defaultDevice].post(\"/POSServiceHandler.aspx/PrintXReport\", {\n      localTime: localTime\n    }).then(function () {\n      return $scope.disabled = false;\n    }, function (err) {\n      $scope.disabled = false;\n      if (err.status === 417) {\n        notification.pop(\"warning\", noDailyClosure);\n      } else {\n        notification.pop(\"error\", unexpectedErrorTitle);\n      }\n    });\n  };\n});\n","\"use strict\";\r\n// Copyright (c) .NET Foundation. All rights reserved.\r\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\n// Rough polyfill of https://developer.mozilla.org/en-US/docs/Web/API/AbortController\r\n// We don't actually ever use the API being polyfilled, we always use the polyfill because\r\n// it's a very new API right now.\r\n// Not exported from index.\r\n/** @private */\r\nvar AbortController = /** @class */ (function () {\r\n    function AbortController() {\r\n        this.isAborted = false;\r\n        this.onabort = null;\r\n    }\r\n    AbortController.prototype.abort = function () {\r\n        if (!this.isAborted) {\r\n            this.isAborted = true;\r\n            if (this.onabort) {\r\n                this.onabort();\r\n            }\r\n        }\r\n    };\r\n    Object.defineProperty(AbortController.prototype, \"signal\", {\r\n        get: function () {\r\n            return this;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(AbortController.prototype, \"aborted\", {\r\n        get: function () {\r\n            return this.isAborted;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    return AbortController;\r\n}());\r\nexports.AbortController = AbortController;\r\n//# sourceMappingURL=AbortController.js.map","\"use strict\";\r\n// Copyright (c) .NET Foundation. All rights reserved.\r\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\r\nvar __extends = (this && this.__extends) || (function () {\r\n    var extendStatics = Object.setPrototypeOf ||\r\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n    return function (d, b) {\r\n        extendStatics(d, b);\r\n        function __() { this.constructor = d; }\r\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n    };\r\n})();\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar Errors_1 = require(\"./Errors\");\r\nvar HttpClient_1 = require(\"./HttpClient\");\r\nvar NodeHttpClient_1 = require(\"./NodeHttpClient\");\r\nvar XhrHttpClient_1 = require(\"./XhrHttpClient\");\r\n/** Default implementation of {@link @aspnet/signalr.HttpClient}. */\r\nvar DefaultHttpClient = /** @class */ (function (_super) {\r\n    __extends(DefaultHttpClient, _super);\r\n    /** Creates a new instance of the {@link @aspnet/signalr.DefaultHttpClient}, using the provided {@link @aspnet/signalr.ILogger} to log messages. */\r\n    function DefaultHttpClient(logger) {\r\n        var _this = _super.call(this) || this;\r\n        if (typeof XMLHttpRequest !== \"undefined\") {\r\n            _this.httpClient = new XhrHttpClient_1.XhrHttpClient(logger);\r\n        }\r\n        else {\r\n            _this.httpClient = new NodeHttpClient_1.NodeHttpClient(logger);\r\n        }\r\n        return _this;\r\n    }\r\n    /** @inheritDoc */\r\n    DefaultHttpClient.prototype.send = function (request) {\r\n        // Check that abort was not signaled before calling send\r\n        if (request.abortSignal && request.abortSignal.aborted) {\r\n            return Promise.reject(new Errors_1.AbortError());\r\n        }\r\n        if (!request.method) {\r\n            return Promise.reject(new Error(\"No method defined.\"));\r\n        }\r\n        if (!request.url) {\r\n            return Promise.reject(new Error(\"No url defined.\"));\r\n        }\r\n        return this.httpClient.send(request);\r\n    };\r\n    DefaultHttpClient.prototype.getCookieString = function (url) {\r\n        return this.httpClient.getCookieString(url);\r\n    };\r\n    return DefaultHttpClient;\r\n}(HttpClient_1.HttpClient));\r\nexports.DefaultHttpClient = DefaultHttpClient;\r\n//# sourceMappingURL=DefaultHttpClient.js.map","\"use strict\";\r\n// Copyright (c) .NET Foundation. All rights reserved.\r\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\r\nvar __extends = (this && this.__extends) || (function () {\r\n    var extendStatics = Object.setPrototypeOf ||\r\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n    return function (d, b) {\r\n        extendStatics(d, b);\r\n        function __() { this.constructor = d; }\r\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n    };\r\n})();\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\n/** Error thrown when an HTTP request fails. */\r\nvar HttpError = /** @class */ (function (_super) {\r\n    __extends(HttpError, _super);\r\n    /** Constructs a new instance of {@link @aspnet/signalr.HttpError}.\r\n     *\r\n     * @param {string} errorMessage A descriptive error message.\r\n     * @param {number} statusCode The HTTP status code represented by this error.\r\n     */\r\n    function HttpError(errorMessage, statusCode) {\r\n        var _newTarget = this.constructor;\r\n        var _this = this;\r\n        var trueProto = _newTarget.prototype;\r\n        _this = _super.call(this, errorMessage) || this;\r\n        _this.statusCode = statusCode;\r\n        // Workaround issue in Typescript compiler\r\n        // https://github.com/Microsoft/TypeScript/issues/13965#issuecomment-278570200\r\n        _this.__proto__ = trueProto;\r\n        return _this;\r\n    }\r\n    return HttpError;\r\n}(Error));\r\nexports.HttpError = HttpError;\r\n/** Error thrown when a timeout elapses. */\r\nvar TimeoutError = /** @class */ (function (_super) {\r\n    __extends(TimeoutError, _super);\r\n    /** Constructs a new instance of {@link @aspnet/signalr.TimeoutError}.\r\n     *\r\n     * @param {string} errorMessage A descriptive error message.\r\n     */\r\n    function TimeoutError(errorMessage) {\r\n        var _newTarget = this.constructor;\r\n        if (errorMessage === void 0) { errorMessage = \"A timeout occurred.\"; }\r\n        var _this = this;\r\n        var trueProto = _newTarget.prototype;\r\n        _this = _super.call(this, errorMessage) || this;\r\n        // Workaround issue in Typescript compiler\r\n        // https://github.com/Microsoft/TypeScript/issues/13965#issuecomment-278570200\r\n        _this.__proto__ = trueProto;\r\n        return _this;\r\n    }\r\n    return TimeoutError;\r\n}(Error));\r\nexports.TimeoutError = TimeoutError;\r\n/** Error thrown when an action is aborted. */\r\nvar AbortError = /** @class */ (function (_super) {\r\n    __extends(AbortError, _super);\r\n    /** Constructs a new instance of {@link AbortError}.\r\n     *\r\n     * @param {string} errorMessage A descriptive error message.\r\n     */\r\n    function AbortError(errorMessage) {\r\n        var _newTarget = this.constructor;\r\n        if (errorMessage === void 0) { errorMessage = \"An abort occurred.\"; }\r\n        var _this = this;\r\n        var trueProto = _newTarget.prototype;\r\n        _this = _super.call(this, errorMessage) || this;\r\n        // Workaround issue in Typescript compiler\r\n        // https://github.com/Microsoft/TypeScript/issues/13965#issuecomment-278570200\r\n        _this.__proto__ = trueProto;\r\n        return _this;\r\n    }\r\n    return AbortError;\r\n}(Error));\r\nexports.AbortError = AbortError;\r\n//# sourceMappingURL=Errors.js.map","\"use strict\";\r\n// Copyright (c) .NET Foundation. All rights reserved.\r\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar TextMessageFormat_1 = require(\"./TextMessageFormat\");\r\nvar Utils_1 = require(\"./Utils\");\r\n/** @private */\r\nvar HandshakeProtocol = /** @class */ (function () {\r\n    function HandshakeProtocol() {\r\n    }\r\n    // Handshake request is always JSON\r\n    HandshakeProtocol.prototype.writeHandshakeRequest = function (handshakeRequest) {\r\n        return TextMessageFormat_1.TextMessageFormat.write(JSON.stringify(handshakeRequest));\r\n    };\r\n    HandshakeProtocol.prototype.parseHandshakeResponse = function (data) {\r\n        var responseMessage;\r\n        var messageData;\r\n        var remainingData;\r\n        if (Utils_1.isArrayBuffer(data) || (typeof Buffer !== \"undefined\" && data instanceof Buffer)) {\r\n            // Format is binary but still need to read JSON text from handshake response\r\n            var binaryData = new Uint8Array(data);\r\n            var separatorIndex = binaryData.indexOf(TextMessageFormat_1.TextMessageFormat.RecordSeparatorCode);\r\n            if (separatorIndex === -1) {\r\n                throw new Error(\"Message is incomplete.\");\r\n            }\r\n            // content before separator is handshake response\r\n            // optional content after is additional messages\r\n            var responseLength = separatorIndex + 1;\r\n            messageData = String.fromCharCode.apply(null, binaryData.slice(0, responseLength));\r\n            remainingData = (binaryData.byteLength > responseLength) ? binaryData.slice(responseLength).buffer : null;\r\n        }\r\n        else {\r\n            var textData = data;\r\n            var separatorIndex = textData.indexOf(TextMessageFormat_1.TextMessageFormat.RecordSeparator);\r\n            if (separatorIndex === -1) {\r\n                throw new Error(\"Message is incomplete.\");\r\n            }\r\n            // content before separator is handshake response\r\n            // optional content after is additional messages\r\n            var responseLength = separatorIndex + 1;\r\n            messageData = textData.substring(0, responseLength);\r\n            remainingData = (textData.length > responseLength) ? textData.substring(responseLength) : null;\r\n        }\r\n        // At this point we should have just the single handshake message\r\n        var messages = TextMessageFormat_1.TextMessageFormat.parse(messageData);\r\n        var response = JSON.parse(messages[0]);\r\n        if (response.type) {\r\n            throw new Error(\"Expected a handshake response from the server.\");\r\n        }\r\n        responseMessage = response;\r\n        // multiple messages could have arrived with handshake\r\n        // return additional data to be parsed as usual, or null if all parsed\r\n        return [remainingData, responseMessage];\r\n    };\r\n    return HandshakeProtocol;\r\n}());\r\nexports.HandshakeProtocol = HandshakeProtocol;\r\n//# sourceMappingURL=HandshakeProtocol.js.map","\"use strict\";\r\n// Copyright (c) .NET Foundation. All rights reserved.\r\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\r\nvar __assign = (this && this.__assign) || Object.assign || function(t) {\r\n    for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n        s = arguments[i];\r\n        for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\r\n            t[p] = s[p];\r\n    }\r\n    return t;\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\n/** Represents an HTTP response. */\r\nvar HttpResponse = /** @class */ (function () {\r\n    function HttpResponse(statusCode, statusText, content) {\r\n        this.statusCode = statusCode;\r\n        this.statusText = statusText;\r\n        this.content = content;\r\n    }\r\n    return HttpResponse;\r\n}());\r\nexports.HttpResponse = HttpResponse;\r\n/** Abstraction over an HTTP client.\r\n *\r\n * This class provides an abstraction over an HTTP client so that a different implementation can be provided on different platforms.\r\n */\r\nvar HttpClient = /** @class */ (function () {\r\n    function HttpClient() {\r\n    }\r\n    HttpClient.prototype.get = function (url, options) {\r\n        return this.send(__assign({}, options, { method: \"GET\", url: url }));\r\n    };\r\n    HttpClient.prototype.post = function (url, options) {\r\n        return this.send(__assign({}, options, { method: \"POST\", url: url }));\r\n    };\r\n    HttpClient.prototype.delete = function (url, options) {\r\n        return this.send(__assign({}, options, { method: \"DELETE\", url: url }));\r\n    };\r\n    /** Gets all cookies that apply to the specified URL.\r\n     *\r\n     * @param url The URL that the cookies are valid for.\r\n     * @returns {string} A string containing all the key-value cookie pairs for the specified URL.\r\n     */\r\n    // @ts-ignore\r\n    HttpClient.prototype.getCookieString = function (url) {\r\n        return \"\";\r\n    };\r\n    return HttpClient;\r\n}());\r\nexports.HttpClient = HttpClient;\r\n//# sourceMappingURL=HttpClient.js.map","\"use strict\";\r\n// Copyright (c) .NET Foundation. All rights reserved.\r\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\r\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\r\n    return new (P || (P = Promise))(function (resolve, reject) {\r\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n        function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\r\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n    });\r\n};\r\nvar __generator = (this && this.__generator) || function (thisArg, body) {\r\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n    return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n    function verb(n) { return function (v) { return step([n, v]); }; }\r\n    function step(op) {\r\n        if (f) throw new TypeError(\"Generator is already executing.\");\r\n        while (_) try {\r\n            if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n            if (y = 0, t) op = [op[0] & 2, t.value];\r\n            switch (op[0]) {\r\n                case 0: case 1: t = op; break;\r\n                case 4: _.label++; return { value: op[1], done: false };\r\n                case 5: _.label++; y = op[1]; op = [0]; continue;\r\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n                default:\r\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n                    if (t[2]) _.ops.pop();\r\n                    _.trys.pop(); continue;\r\n            }\r\n            op = body.call(thisArg, _);\r\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n    }\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar DefaultHttpClient_1 = require(\"./DefaultHttpClient\");\r\nvar ILogger_1 = require(\"./ILogger\");\r\nvar ITransport_1 = require(\"./ITransport\");\r\nvar LongPollingTransport_1 = require(\"./LongPollingTransport\");\r\nvar ServerSentEventsTransport_1 = require(\"./ServerSentEventsTransport\");\r\nvar Utils_1 = require(\"./Utils\");\r\nvar WebSocketTransport_1 = require(\"./WebSocketTransport\");\r\nvar MAX_REDIRECTS = 100;\r\nvar WebSocketModule = null;\r\nvar EventSourceModule = null;\r\nif (typeof window === \"undefined\" && typeof require !== \"undefined\") {\r\n    // In order to ignore the dynamic require in webpack builds we need to do this magic\r\n    // @ts-ignore: TS doesn't know about these names\r\n    var requireFunc = typeof __webpack_require__ === \"function\" ? __non_webpack_require__ : require;\r\n    WebSocketModule = requireFunc(\"ws\");\r\n    EventSourceModule = requireFunc(\"eventsource\");\r\n}\r\n/** @private */\r\nvar HttpConnection = /** @class */ (function () {\r\n    function HttpConnection(url, options) {\r\n        if (options === void 0) { options = {}; }\r\n        this.features = {};\r\n        Utils_1.Arg.isRequired(url, \"url\");\r\n        this.logger = Utils_1.createLogger(options.logger);\r\n        this.baseUrl = this.resolveUrl(url);\r\n        options = options || {};\r\n        options.logMessageContent = options.logMessageContent || false;\r\n        var isNode = typeof window === \"undefined\";\r\n        if (!isNode && typeof WebSocket !== \"undefined\" && !options.WebSocket) {\r\n            options.WebSocket = WebSocket;\r\n        }\r\n        else if (isNode && !options.WebSocket) {\r\n            if (WebSocketModule) {\r\n                options.WebSocket = WebSocketModule;\r\n            }\r\n        }\r\n        if (!isNode && typeof EventSource !== \"undefined\" && !options.EventSource) {\r\n            options.EventSource = EventSource;\r\n        }\r\n        else if (isNode && !options.EventSource) {\r\n            if (typeof EventSourceModule !== \"undefined\") {\r\n                options.EventSource = EventSourceModule;\r\n            }\r\n        }\r\n        this.httpClient = options.httpClient || new DefaultHttpClient_1.DefaultHttpClient(this.logger);\r\n        this.connectionState = 2 /* Disconnected */;\r\n        this.options = options;\r\n        this.onreceive = null;\r\n        this.onclose = null;\r\n    }\r\n    HttpConnection.prototype.start = function (transferFormat) {\r\n        transferFormat = transferFormat || ITransport_1.TransferFormat.Binary;\r\n        Utils_1.Arg.isIn(transferFormat, ITransport_1.TransferFormat, \"transferFormat\");\r\n        this.logger.log(ILogger_1.LogLevel.Debug, \"Starting connection with transfer format '\" + ITransport_1.TransferFormat[transferFormat] + \"'.\");\r\n        if (this.connectionState !== 2 /* Disconnected */) {\r\n            return Promise.reject(new Error(\"Cannot start a connection that is not in the 'Disconnected' state.\"));\r\n        }\r\n        this.connectionState = 0 /* Connecting */;\r\n        this.startPromise = this.startInternal(transferFormat);\r\n        return this.startPromise;\r\n    };\r\n    HttpConnection.prototype.send = function (data) {\r\n        if (this.connectionState !== 1 /* Connected */) {\r\n            throw new Error(\"Cannot send data if the connection is not in the 'Connected' State.\");\r\n        }\r\n        // Transport will not be null if state is connected\r\n        return this.transport.send(data);\r\n    };\r\n    HttpConnection.prototype.stop = function (error) {\r\n        return __awaiter(this, void 0, void 0, function () {\r\n            var e_1;\r\n            return __generator(this, function (_a) {\r\n                switch (_a.label) {\r\n                    case 0:\r\n                        this.connectionState = 2 /* Disconnected */;\r\n                        // Set error as soon as possible otherwise there is a race between\r\n                        // the transport closing and providing an error and the error from a close message\r\n                        // We would prefer the close message error.\r\n                        this.stopError = error;\r\n                        _a.label = 1;\r\n                    case 1:\r\n                        _a.trys.push([1, 3, , 4]);\r\n                        return [4 /*yield*/, this.startPromise];\r\n                    case 2:\r\n                        _a.sent();\r\n                        return [3 /*break*/, 4];\r\n                    case 3:\r\n                        e_1 = _a.sent();\r\n                        return [3 /*break*/, 4];\r\n                    case 4:\r\n                        if (!this.transport) return [3 /*break*/, 6];\r\n                        return [4 /*yield*/, this.transport.stop()];\r\n                    case 5:\r\n                        _a.sent();\r\n                        this.transport = undefined;\r\n                        _a.label = 6;\r\n                    case 6: return [2 /*return*/];\r\n                }\r\n            });\r\n        });\r\n    };\r\n    HttpConnection.prototype.startInternal = function (transferFormat) {\r\n        return __awaiter(this, void 0, void 0, function () {\r\n            var url, negotiateResponse, redirects, _loop_1, this_1, state_1, e_2;\r\n            var _this = this;\r\n            return __generator(this, function (_a) {\r\n                switch (_a.label) {\r\n                    case 0:\r\n                        url = this.baseUrl;\r\n                        this.accessTokenFactory = this.options.accessTokenFactory;\r\n                        _a.label = 1;\r\n                    case 1:\r\n                        _a.trys.push([1, 12, , 13]);\r\n                        if (!this.options.skipNegotiation) return [3 /*break*/, 5];\r\n                        if (!(this.options.transport === ITransport_1.HttpTransportType.WebSockets)) return [3 /*break*/, 3];\r\n                        // No need to add a connection ID in this case\r\n                        this.transport = this.constructTransport(ITransport_1.HttpTransportType.WebSockets);\r\n                        // We should just call connect directly in this case.\r\n                        // No fallback or negotiate in this case.\r\n                        return [4 /*yield*/, this.transport.connect(url, transferFormat)];\r\n                    case 2:\r\n                        // We should just call connect directly in this case.\r\n                        // No fallback or negotiate in this case.\r\n                        _a.sent();\r\n                        return [3 /*break*/, 4];\r\n                    case 3: throw Error(\"Negotiation can only be skipped when using the WebSocket transport directly.\");\r\n                    case 4: return [3 /*break*/, 11];\r\n                    case 5:\r\n                        negotiateResponse = null;\r\n                        redirects = 0;\r\n                        _loop_1 = function () {\r\n                            var accessToken_1;\r\n                            return __generator(this, function (_a) {\r\n                                switch (_a.label) {\r\n                                    case 0: return [4 /*yield*/, this_1.getNegotiationResponse(url)];\r\n                                    case 1:\r\n                                        negotiateResponse = _a.sent();\r\n                                        // the user tries to stop the connection when it is being started\r\n                                        if (this_1.connectionState === 2 /* Disconnected */) {\r\n                                            return [2 /*return*/, { value: void 0 }];\r\n                                        }\r\n                                        if (negotiateResponse.error) {\r\n                                            throw Error(negotiateResponse.error);\r\n                                        }\r\n                                        if (negotiateResponse.ProtocolVersion) {\r\n                                            throw Error(\"Detected a connection attempt to an ASP.NET SignalR Server. This client only supports connecting to an ASP.NET Core SignalR Server. See https://aka.ms/signalr-core-differences for details.\");\r\n                                        }\r\n                                        if (negotiateResponse.url) {\r\n                                            url = negotiateResponse.url;\r\n                                        }\r\n                                        if (negotiateResponse.accessToken) {\r\n                                            accessToken_1 = negotiateResponse.accessToken;\r\n                                            this_1.accessTokenFactory = function () { return accessToken_1; };\r\n                                        }\r\n                                        redirects++;\r\n                                        return [2 /*return*/];\r\n                                }\r\n                            });\r\n                        };\r\n                        this_1 = this;\r\n                        _a.label = 6;\r\n                    case 6: return [5 /*yield**/, _loop_1()];\r\n                    case 7:\r\n                        state_1 = _a.sent();\r\n                        if (typeof state_1 === \"object\")\r\n                            return [2 /*return*/, state_1.value];\r\n                        _a.label = 8;\r\n                    case 8:\r\n                        if (negotiateResponse.url && redirects < MAX_REDIRECTS) return [3 /*break*/, 6];\r\n                        _a.label = 9;\r\n                    case 9:\r\n                        if (redirects === MAX_REDIRECTS && negotiateResponse.url) {\r\n                            throw Error(\"Negotiate redirection limit exceeded.\");\r\n                        }\r\n                        return [4 /*yield*/, this.createTransport(url, this.options.transport, negotiateResponse, transferFormat)];\r\n                    case 10:\r\n                        _a.sent();\r\n                        _a.label = 11;\r\n                    case 11:\r\n                        if (this.transport instanceof LongPollingTransport_1.LongPollingTransport) {\r\n                            this.features.inherentKeepAlive = true;\r\n                        }\r\n                        this.transport.onreceive = this.onreceive;\r\n                        this.transport.onclose = function (e) { return _this.stopConnection(e); };\r\n                        // only change the state if we were connecting to not overwrite\r\n                        // the state if the connection is already marked as Disconnected\r\n                        this.changeState(0 /* Connecting */, 1 /* Connected */);\r\n                        return [3 /*break*/, 13];\r\n                    case 12:\r\n                        e_2 = _a.sent();\r\n                        this.logger.log(ILogger_1.LogLevel.Error, \"Failed to start the connection: \" + e_2);\r\n                        this.connectionState = 2 /* Disconnected */;\r\n                        this.transport = undefined;\r\n                        throw e_2;\r\n                    case 13: return [2 /*return*/];\r\n                }\r\n            });\r\n        });\r\n    };\r\n    HttpConnection.prototype.getNegotiationResponse = function (url) {\r\n        return __awaiter(this, void 0, void 0, function () {\r\n            var _a, headers, token, negotiateUrl, response, e_3;\r\n            return __generator(this, function (_b) {\r\n                switch (_b.label) {\r\n                    case 0:\r\n                        if (!this.accessTokenFactory) return [3 /*break*/, 2];\r\n                        return [4 /*yield*/, this.accessTokenFactory()];\r\n                    case 1:\r\n                        token = _b.sent();\r\n                        if (token) {\r\n                            headers = (_a = {},\r\n                                _a[\"Authorization\"] = \"Bearer \" + token,\r\n                                _a);\r\n                        }\r\n                        _b.label = 2;\r\n                    case 2:\r\n                        negotiateUrl = this.resolveNegotiateUrl(url);\r\n                        this.logger.log(ILogger_1.LogLevel.Debug, \"Sending negotiation request: \" + negotiateUrl + \".\");\r\n                        _b.label = 3;\r\n                    case 3:\r\n                        _b.trys.push([3, 5, , 6]);\r\n                        return [4 /*yield*/, this.httpClient.post(negotiateUrl, {\r\n                                content: \"\",\r\n                                headers: headers,\r\n                            })];\r\n                    case 4:\r\n                        response = _b.sent();\r\n                        if (response.statusCode !== 200) {\r\n                            throw Error(\"Unexpected status code returned from negotiate \" + response.statusCode);\r\n                        }\r\n                        return [2 /*return*/, JSON.parse(response.content)];\r\n                    case 5:\r\n                        e_3 = _b.sent();\r\n                        this.logger.log(ILogger_1.LogLevel.Error, \"Failed to complete negotiation with the server: \" + e_3);\r\n                        throw e_3;\r\n                    case 6: return [2 /*return*/];\r\n                }\r\n            });\r\n        });\r\n    };\r\n    HttpConnection.prototype.createConnectUrl = function (url, connectionId) {\r\n        if (!connectionId) {\r\n            return url;\r\n        }\r\n        return url + (url.indexOf(\"?\") === -1 ? \"?\" : \"&\") + (\"id=\" + connectionId);\r\n    };\r\n    HttpConnection.prototype.createTransport = function (url, requestedTransport, negotiateResponse, requestedTransferFormat) {\r\n        return __awaiter(this, void 0, void 0, function () {\r\n            var connectUrl, transports, _i, transports_1, endpoint, transport, ex_1;\r\n            return __generator(this, function (_a) {\r\n                switch (_a.label) {\r\n                    case 0:\r\n                        connectUrl = this.createConnectUrl(url, negotiateResponse.connectionId);\r\n                        if (!this.isITransport(requestedTransport)) return [3 /*break*/, 2];\r\n                        this.logger.log(ILogger_1.LogLevel.Debug, \"Connection was provided an instance of ITransport, using that directly.\");\r\n                        this.transport = requestedTransport;\r\n                        return [4 /*yield*/, this.transport.connect(connectUrl, requestedTransferFormat)];\r\n                    case 1:\r\n                        _a.sent();\r\n                        // only change the state if we were connecting to not overwrite\r\n                        // the state if the connection is already marked as Disconnected\r\n                        this.changeState(0 /* Connecting */, 1 /* Connected */);\r\n                        return [2 /*return*/];\r\n                    case 2:\r\n                        transports = negotiateResponse.availableTransports || [];\r\n                        _i = 0, transports_1 = transports;\r\n                        _a.label = 3;\r\n                    case 3:\r\n                        if (!(_i < transports_1.length)) return [3 /*break*/, 9];\r\n                        endpoint = transports_1[_i];\r\n                        this.connectionState = 0 /* Connecting */;\r\n                        transport = this.resolveTransport(endpoint, requestedTransport, requestedTransferFormat);\r\n                        if (!(typeof transport === \"number\")) return [3 /*break*/, 8];\r\n                        this.transport = this.constructTransport(transport);\r\n                        if (!!negotiateResponse.connectionId) return [3 /*break*/, 5];\r\n                        return [4 /*yield*/, this.getNegotiationResponse(url)];\r\n                    case 4:\r\n                        negotiateResponse = _a.sent();\r\n                        connectUrl = this.createConnectUrl(url, negotiateResponse.connectionId);\r\n                        _a.label = 5;\r\n                    case 5:\r\n                        _a.trys.push([5, 7, , 8]);\r\n                        return [4 /*yield*/, this.transport.connect(connectUrl, requestedTransferFormat)];\r\n                    case 6:\r\n                        _a.sent();\r\n                        this.changeState(0 /* Connecting */, 1 /* Connected */);\r\n                        return [2 /*return*/];\r\n                    case 7:\r\n                        ex_1 = _a.sent();\r\n                        this.logger.log(ILogger_1.LogLevel.Error, \"Failed to start the transport '\" + ITransport_1.HttpTransportType[transport] + \"': \" + ex_1);\r\n                        this.connectionState = 2 /* Disconnected */;\r\n                        negotiateResponse.connectionId = undefined;\r\n                        return [3 /*break*/, 8];\r\n                    case 8:\r\n                        _i++;\r\n                        return [3 /*break*/, 3];\r\n                    case 9: throw new Error(\"Unable to initialize any of the available transports.\");\r\n                }\r\n            });\r\n        });\r\n    };\r\n    HttpConnection.prototype.constructTransport = function (transport) {\r\n        switch (transport) {\r\n            case ITransport_1.HttpTransportType.WebSockets:\r\n                if (!this.options.WebSocket) {\r\n                    throw new Error(\"'WebSocket' is not supported in your environment.\");\r\n                }\r\n                return new WebSocketTransport_1.WebSocketTransport(this.httpClient, this.accessTokenFactory, this.logger, this.options.logMessageContent || false, this.options.WebSocket);\r\n            case ITransport_1.HttpTransportType.ServerSentEvents:\r\n                if (!this.options.EventSource) {\r\n                    throw new Error(\"'EventSource' is not supported in your environment.\");\r\n                }\r\n                return new ServerSentEventsTransport_1.ServerSentEventsTransport(this.httpClient, this.accessTokenFactory, this.logger, this.options.logMessageContent || false, this.options.EventSource);\r\n            case ITransport_1.HttpTransportType.LongPolling:\r\n                return new LongPollingTransport_1.LongPollingTransport(this.httpClient, this.accessTokenFactory, this.logger, this.options.logMessageContent || false);\r\n            default:\r\n                throw new Error(\"Unknown transport: \" + transport + \".\");\r\n        }\r\n    };\r\n    HttpConnection.prototype.resolveTransport = function (endpoint, requestedTransport, requestedTransferFormat) {\r\n        var transport = ITransport_1.HttpTransportType[endpoint.transport];\r\n        if (transport === null || transport === undefined) {\r\n            this.logger.log(ILogger_1.LogLevel.Debug, \"Skipping transport '\" + endpoint.transport + \"' because it is not supported by this client.\");\r\n        }\r\n        else {\r\n            var transferFormats = endpoint.transferFormats.map(function (s) { return ITransport_1.TransferFormat[s]; });\r\n            if (transportMatches(requestedTransport, transport)) {\r\n                if (transferFormats.indexOf(requestedTransferFormat) >= 0) {\r\n                    if ((transport === ITransport_1.HttpTransportType.WebSockets && !this.options.WebSocket) ||\r\n                        (transport === ITransport_1.HttpTransportType.ServerSentEvents && !this.options.EventSource)) {\r\n                        this.logger.log(ILogger_1.LogLevel.Debug, \"Skipping transport '\" + ITransport_1.HttpTransportType[transport] + \"' because it is not supported in your environment.'\");\r\n                    }\r\n                    else {\r\n                        this.logger.log(ILogger_1.LogLevel.Debug, \"Selecting transport '\" + ITransport_1.HttpTransportType[transport] + \"'.\");\r\n                        return transport;\r\n                    }\r\n                }\r\n                else {\r\n                    this.logger.log(ILogger_1.LogLevel.Debug, \"Skipping transport '\" + ITransport_1.HttpTransportType[transport] + \"' because it does not support the requested transfer format '\" + ITransport_1.TransferFormat[requestedTransferFormat] + \"'.\");\r\n                }\r\n            }\r\n            else {\r\n                this.logger.log(ILogger_1.LogLevel.Debug, \"Skipping transport '\" + ITransport_1.HttpTransportType[transport] + \"' because it was disabled by the client.\");\r\n            }\r\n        }\r\n        return null;\r\n    };\r\n    HttpConnection.prototype.isITransport = function (transport) {\r\n        return transport && typeof (transport) === \"object\" && \"connect\" in transport;\r\n    };\r\n    HttpConnection.prototype.changeState = function (from, to) {\r\n        if (this.connectionState === from) {\r\n            this.connectionState = to;\r\n            return true;\r\n        }\r\n        return false;\r\n    };\r\n    HttpConnection.prototype.stopConnection = function (error) {\r\n        this.transport = undefined;\r\n        // If we have a stopError, it takes precedence over the error from the transport\r\n        error = this.stopError || error;\r\n        if (error) {\r\n            this.logger.log(ILogger_1.LogLevel.Error, \"Connection disconnected with error '\" + error + \"'.\");\r\n        }\r\n        else {\r\n            this.logger.log(ILogger_1.LogLevel.Information, \"Connection disconnected.\");\r\n        }\r\n        this.connectionState = 2 /* Disconnected */;\r\n        if (this.onclose) {\r\n            this.onclose(error);\r\n        }\r\n    };\r\n    HttpConnection.prototype.resolveUrl = function (url) {\r\n        // startsWith is not supported in IE\r\n        if (url.lastIndexOf(\"https://\", 0) === 0 || url.lastIndexOf(\"http://\", 0) === 0) {\r\n            return url;\r\n        }\r\n        if (typeof window === \"undefined\" || !window || !window.document) {\r\n            throw new Error(\"Cannot resolve '\" + url + \"'.\");\r\n        }\r\n        // Setting the url to the href propery of an anchor tag handles normalization\r\n        // for us. There are 3 main cases.\r\n        // 1. Relative  path normalization e.g \"b\" -> \"http://localhost:5000/a/b\"\r\n        // 2. Absolute path normalization e.g \"/a/b\" -> \"http://localhost:5000/a/b\"\r\n        // 3. Networkpath reference normalization e.g \"//localhost:5000/a/b\" -> \"http://localhost:5000/a/b\"\r\n        var aTag = window.document.createElement(\"a\");\r\n        aTag.href = url;\r\n        this.logger.log(ILogger_1.LogLevel.Information, \"Normalizing '\" + url + \"' to '\" + aTag.href + \"'.\");\r\n        return aTag.href;\r\n    };\r\n    HttpConnection.prototype.resolveNegotiateUrl = function (url) {\r\n        var index = url.indexOf(\"?\");\r\n        var negotiateUrl = url.substring(0, index === -1 ? url.length : index);\r\n        if (negotiateUrl[negotiateUrl.length - 1] !== \"/\") {\r\n            negotiateUrl += \"/\";\r\n        }\r\n        negotiateUrl += \"negotiate\";\r\n        negotiateUrl += index === -1 ? \"\" : url.substring(index);\r\n        return negotiateUrl;\r\n    };\r\n    return HttpConnection;\r\n}());\r\nexports.HttpConnection = HttpConnection;\r\nfunction transportMatches(requestedTransport, actualTransport) {\r\n    return !requestedTransport || ((actualTransport & requestedTransport) !== 0);\r\n}\r\n//# sourceMappingURL=HttpConnection.js.map","\"use strict\";\r\n// Copyright (c) .NET Foundation. All rights reserved.\r\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\r\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\r\n    return new (P || (P = Promise))(function (resolve, reject) {\r\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n        function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\r\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n    });\r\n};\r\nvar __generator = (this && this.__generator) || function (thisArg, body) {\r\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n    return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n    function verb(n) { return function (v) { return step([n, v]); }; }\r\n    function step(op) {\r\n        if (f) throw new TypeError(\"Generator is already executing.\");\r\n        while (_) try {\r\n            if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n            if (y = 0, t) op = [op[0] & 2, t.value];\r\n            switch (op[0]) {\r\n                case 0: case 1: t = op; break;\r\n                case 4: _.label++; return { value: op[1], done: false };\r\n                case 5: _.label++; y = op[1]; op = [0]; continue;\r\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n                default:\r\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n                    if (t[2]) _.ops.pop();\r\n                    _.trys.pop(); continue;\r\n            }\r\n            op = body.call(thisArg, _);\r\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n    }\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar HandshakeProtocol_1 = require(\"./HandshakeProtocol\");\r\nvar IHubProtocol_1 = require(\"./IHubProtocol\");\r\nvar ILogger_1 = require(\"./ILogger\");\r\nvar Utils_1 = require(\"./Utils\");\r\nvar DEFAULT_TIMEOUT_IN_MS = 30 * 1000;\r\nvar DEFAULT_PING_INTERVAL_IN_MS = 15 * 1000;\r\n/** Describes the current state of the {@link HubConnection} to the server. */\r\nvar HubConnectionState;\r\n(function (HubConnectionState) {\r\n    /** The hub connection is disconnected. */\r\n    HubConnectionState[HubConnectionState[\"Disconnected\"] = 0] = \"Disconnected\";\r\n    /** The hub connection is connected. */\r\n    HubConnectionState[HubConnectionState[\"Connected\"] = 1] = \"Connected\";\r\n})(HubConnectionState = exports.HubConnectionState || (exports.HubConnectionState = {}));\r\n/** Represents a connection to a SignalR Hub. */\r\nvar HubConnection = /** @class */ (function () {\r\n    function HubConnection(connection, logger, protocol) {\r\n        var _this = this;\r\n        Utils_1.Arg.isRequired(connection, \"connection\");\r\n        Utils_1.Arg.isRequired(logger, \"logger\");\r\n        Utils_1.Arg.isRequired(protocol, \"protocol\");\r\n        this.serverTimeoutInMilliseconds = DEFAULT_TIMEOUT_IN_MS;\r\n        this.keepAliveIntervalInMilliseconds = DEFAULT_PING_INTERVAL_IN_MS;\r\n        this.logger = logger;\r\n        this.protocol = protocol;\r\n        this.connection = connection;\r\n        this.handshakeProtocol = new HandshakeProtocol_1.HandshakeProtocol();\r\n        this.connection.onreceive = function (data) { return _this.processIncomingData(data); };\r\n        this.connection.onclose = function (error) { return _this.connectionClosed(error); };\r\n        this.callbacks = {};\r\n        this.methods = {};\r\n        this.closedCallbacks = [];\r\n        this.id = 0;\r\n        this.receivedHandshakeResponse = false;\r\n        this.connectionState = HubConnectionState.Disconnected;\r\n        this.cachedPingMessage = this.protocol.writeMessage({ type: IHubProtocol_1.MessageType.Ping });\r\n    }\r\n    /** @internal */\r\n    // Using a public static factory method means we can have a private constructor and an _internal_\r\n    // create method that can be used by HubConnectionBuilder. An \"internal\" constructor would just\r\n    // be stripped away and the '.d.ts' file would have no constructor, which is interpreted as a\r\n    // public parameter-less constructor.\r\n    HubConnection.create = function (connection, logger, protocol) {\r\n        return new HubConnection(connection, logger, protocol);\r\n    };\r\n    Object.defineProperty(HubConnection.prototype, \"state\", {\r\n        /** Indicates the state of the {@link HubConnection} to the server. */\r\n        get: function () {\r\n            return this.connectionState;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    /** Starts the connection.\r\n     *\r\n     * @returns {Promise<void>} A Promise that resolves when the connection has been successfully established, or rejects with an error.\r\n     */\r\n    HubConnection.prototype.start = function () {\r\n        return __awaiter(this, void 0, void 0, function () {\r\n            var handshakeRequest, handshakePromise;\r\n            var _this = this;\r\n            return __generator(this, function (_a) {\r\n                switch (_a.label) {\r\n                    case 0:\r\n                        handshakeRequest = {\r\n                            protocol: this.protocol.name,\r\n                            version: this.protocol.version,\r\n                        };\r\n                        this.logger.log(ILogger_1.LogLevel.Debug, \"Starting HubConnection.\");\r\n                        this.receivedHandshakeResponse = false;\r\n                        handshakePromise = new Promise(function (resolve, reject) {\r\n                            _this.handshakeResolver = resolve;\r\n                            _this.handshakeRejecter = reject;\r\n                        });\r\n                        return [4 /*yield*/, this.connection.start(this.protocol.transferFormat)];\r\n                    case 1:\r\n                        _a.sent();\r\n                        this.logger.log(ILogger_1.LogLevel.Debug, \"Sending handshake request.\");\r\n                        return [4 /*yield*/, this.sendMessage(this.handshakeProtocol.writeHandshakeRequest(handshakeRequest))];\r\n                    case 2:\r\n                        _a.sent();\r\n                        this.logger.log(ILogger_1.LogLevel.Information, \"Using HubProtocol '\" + this.protocol.name + \"'.\");\r\n                        // defensively cleanup timeout in case we receive a message from the server before we finish start\r\n                        this.cleanupTimeout();\r\n                        this.resetTimeoutPeriod();\r\n                        this.resetKeepAliveInterval();\r\n                        // Wait for the handshake to complete before marking connection as connected\r\n                        return [4 /*yield*/, handshakePromise];\r\n                    case 3:\r\n                        // Wait for the handshake to complete before marking connection as connected\r\n                        _a.sent();\r\n                        this.connectionState = HubConnectionState.Connected;\r\n                        return [2 /*return*/];\r\n                }\r\n            });\r\n        });\r\n    };\r\n    /** Stops the connection.\r\n     *\r\n     * @returns {Promise<void>} A Promise that resolves when the connection has been successfully terminated, or rejects with an error.\r\n     */\r\n    HubConnection.prototype.stop = function () {\r\n        this.logger.log(ILogger_1.LogLevel.Debug, \"Stopping HubConnection.\");\r\n        this.cleanupTimeout();\r\n        this.cleanupPingTimer();\r\n        return this.connection.stop();\r\n    };\r\n    /** Invokes a streaming hub method on the server using the specified name and arguments.\r\n     *\r\n     * @typeparam T The type of the items returned by the server.\r\n     * @param {string} methodName The name of the server method to invoke.\r\n     * @param {any[]} args The arguments used to invoke the server method.\r\n     * @returns {IStreamResult<T>} An object that yields results from the server as they are received.\r\n     */\r\n    HubConnection.prototype.stream = function (methodName) {\r\n        var _this = this;\r\n        var args = [];\r\n        for (var _i = 1; _i < arguments.length; _i++) {\r\n            args[_i - 1] = arguments[_i];\r\n        }\r\n        var invocationDescriptor = this.createStreamInvocation(methodName, args);\r\n        var promiseQueue;\r\n        var subject = new Utils_1.Subject();\r\n        subject.cancelCallback = function () {\r\n            var cancelInvocation = _this.createCancelInvocation(invocationDescriptor.invocationId);\r\n            var cancelMessage = _this.protocol.writeMessage(cancelInvocation);\r\n            delete _this.callbacks[invocationDescriptor.invocationId];\r\n            return promiseQueue.then(function () {\r\n                return _this.sendMessage(cancelMessage);\r\n            });\r\n        };\r\n        this.callbacks[invocationDescriptor.invocationId] = function (invocationEvent, error) {\r\n            if (error) {\r\n                subject.error(error);\r\n                return;\r\n            }\r\n            else if (invocationEvent) {\r\n                // invocationEvent will not be null when an error is not passed to the callback\r\n                if (invocationEvent.type === IHubProtocol_1.MessageType.Completion) {\r\n                    if (invocationEvent.error) {\r\n                        subject.error(new Error(invocationEvent.error));\r\n                    }\r\n                    else {\r\n                        subject.complete();\r\n                    }\r\n                }\r\n                else {\r\n                    subject.next((invocationEvent.item));\r\n                }\r\n            }\r\n        };\r\n        var message = this.protocol.writeMessage(invocationDescriptor);\r\n        promiseQueue = this.sendMessage(message)\r\n            .catch(function (e) {\r\n            subject.error(e);\r\n            delete _this.callbacks[invocationDescriptor.invocationId];\r\n        });\r\n        return subject;\r\n    };\r\n    HubConnection.prototype.sendMessage = function (message) {\r\n        this.resetKeepAliveInterval();\r\n        return this.connection.send(message);\r\n    };\r\n    /** Invokes a hub method on the server using the specified name and arguments. Does not wait for a response from the receiver.\r\n     *\r\n     * The Promise returned by this method resolves when the client has sent the invocation to the server. The server may still\r\n     * be processing the invocation.\r\n     *\r\n     * @param {string} methodName The name of the server method to invoke.\r\n     * @param {any[]} args The arguments used to invoke the server method.\r\n     * @returns {Promise<void>} A Promise that resolves when the invocation has been successfully sent, or rejects with an error.\r\n     */\r\n    HubConnection.prototype.send = function (methodName) {\r\n        var args = [];\r\n        for (var _i = 1; _i < arguments.length; _i++) {\r\n            args[_i - 1] = arguments[_i];\r\n        }\r\n        var invocationDescriptor = this.createInvocation(methodName, args, true);\r\n        var message = this.protocol.writeMessage(invocationDescriptor);\r\n        return this.sendMessage(message);\r\n    };\r\n    /** Invokes a hub method on the server using the specified name and arguments.\r\n     *\r\n     * The Promise returned by this method resolves when the server indicates it has finished invoking the method. When the promise\r\n     * resolves, the server has finished invoking the method. If the server method returns a result, it is produced as the result of\r\n     * resolving the Promise.\r\n     *\r\n     * @typeparam T The expected return type.\r\n     * @param {string} methodName The name of the server method to invoke.\r\n     * @param {any[]} args The arguments used to invoke the server method.\r\n     * @returns {Promise<T>} A Promise that resolves with the result of the server method (if any), or rejects with an error.\r\n     */\r\n    HubConnection.prototype.invoke = function (methodName) {\r\n        var _this = this;\r\n        var args = [];\r\n        for (var _i = 1; _i < arguments.length; _i++) {\r\n            args[_i - 1] = arguments[_i];\r\n        }\r\n        var invocationDescriptor = this.createInvocation(methodName, args, false);\r\n        var p = new Promise(function (resolve, reject) {\r\n            // invocationId will always have a value for a non-blocking invocation\r\n            _this.callbacks[invocationDescriptor.invocationId] = function (invocationEvent, error) {\r\n                if (error) {\r\n                    reject(error);\r\n                    return;\r\n                }\r\n                else if (invocationEvent) {\r\n                    // invocationEvent will not be null when an error is not passed to the callback\r\n                    if (invocationEvent.type === IHubProtocol_1.MessageType.Completion) {\r\n                        if (invocationEvent.error) {\r\n                            reject(new Error(invocationEvent.error));\r\n                        }\r\n                        else {\r\n                            resolve(invocationEvent.result);\r\n                        }\r\n                    }\r\n                    else {\r\n                        reject(new Error(\"Unexpected message type: \" + invocationEvent.type));\r\n                    }\r\n                }\r\n            };\r\n            var message = _this.protocol.writeMessage(invocationDescriptor);\r\n            _this.sendMessage(message)\r\n                .catch(function (e) {\r\n                reject(e);\r\n                // invocationId will always have a value for a non-blocking invocation\r\n                delete _this.callbacks[invocationDescriptor.invocationId];\r\n            });\r\n        });\r\n        return p;\r\n    };\r\n    /** Registers a handler that will be invoked when the hub method with the specified method name is invoked.\r\n     *\r\n     * @param {string} methodName The name of the hub method to define.\r\n     * @param {Function} newMethod The handler that will be raised when the hub method is invoked.\r\n     */\r\n    HubConnection.prototype.on = function (methodName, newMethod) {\r\n        if (!methodName || !newMethod) {\r\n            return;\r\n        }\r\n        methodName = methodName.toLowerCase();\r\n        if (!this.methods[methodName]) {\r\n            this.methods[methodName] = [];\r\n        }\r\n        // Preventing adding the same handler multiple times.\r\n        if (this.methods[methodName].indexOf(newMethod) !== -1) {\r\n            return;\r\n        }\r\n        this.methods[methodName].push(newMethod);\r\n    };\r\n    HubConnection.prototype.off = function (methodName, method) {\r\n        if (!methodName) {\r\n            return;\r\n        }\r\n        methodName = methodName.toLowerCase();\r\n        var handlers = this.methods[methodName];\r\n        if (!handlers) {\r\n            return;\r\n        }\r\n        if (method) {\r\n            var removeIdx = handlers.indexOf(method);\r\n            if (removeIdx !== -1) {\r\n                handlers.splice(removeIdx, 1);\r\n                if (handlers.length === 0) {\r\n                    delete this.methods[methodName];\r\n                }\r\n            }\r\n        }\r\n        else {\r\n            delete this.methods[methodName];\r\n        }\r\n    };\r\n    /** Registers a handler that will be invoked when the connection is closed.\r\n     *\r\n     * @param {Function} callback The handler that will be invoked when the connection is closed. Optionally receives a single argument containing the error that caused the connection to close (if any).\r\n     */\r\n    HubConnection.prototype.onclose = function (callback) {\r\n        if (callback) {\r\n            this.closedCallbacks.push(callback);\r\n        }\r\n    };\r\n    HubConnection.prototype.processIncomingData = function (data) {\r\n        this.cleanupTimeout();\r\n        if (!this.receivedHandshakeResponse) {\r\n            data = this.processHandshakeResponse(data);\r\n            this.receivedHandshakeResponse = true;\r\n        }\r\n        // Data may have all been read when processing handshake response\r\n        if (data) {\r\n            // Parse the messages\r\n            var messages = this.protocol.parseMessages(data, this.logger);\r\n            for (var _i = 0, messages_1 = messages; _i < messages_1.length; _i++) {\r\n                var message = messages_1[_i];\r\n                switch (message.type) {\r\n                    case IHubProtocol_1.MessageType.Invocation:\r\n                        this.invokeClientMethod(message);\r\n                        break;\r\n                    case IHubProtocol_1.MessageType.StreamItem:\r\n                    case IHubProtocol_1.MessageType.Completion:\r\n                        var callback = this.callbacks[message.invocationId];\r\n                        if (callback != null) {\r\n                            if (message.type === IHubProtocol_1.MessageType.Completion) {\r\n                                delete this.callbacks[message.invocationId];\r\n                            }\r\n                            callback(message);\r\n                        }\r\n                        break;\r\n                    case IHubProtocol_1.MessageType.Ping:\r\n                        // Don't care about pings\r\n                        break;\r\n                    case IHubProtocol_1.MessageType.Close:\r\n                        this.logger.log(ILogger_1.LogLevel.Information, \"Close message received from server.\");\r\n                        // We don't want to wait on the stop itself.\r\n                        // tslint:disable-next-line:no-floating-promises\r\n                        this.connection.stop(message.error ? new Error(\"Server returned an error on close: \" + message.error) : undefined);\r\n                        break;\r\n                    default:\r\n                        this.logger.log(ILogger_1.LogLevel.Warning, \"Invalid message type: \" + message.type + \".\");\r\n                        break;\r\n                }\r\n            }\r\n        }\r\n        this.resetTimeoutPeriod();\r\n    };\r\n    HubConnection.prototype.processHandshakeResponse = function (data) {\r\n        var _a;\r\n        var responseMessage;\r\n        var remainingData;\r\n        try {\r\n            _a = this.handshakeProtocol.parseHandshakeResponse(data), remainingData = _a[0], responseMessage = _a[1];\r\n        }\r\n        catch (e) {\r\n            var message = \"Error parsing handshake response: \" + e;\r\n            this.logger.log(ILogger_1.LogLevel.Error, message);\r\n            var error = new Error(message);\r\n            // We don't want to wait on the stop itself.\r\n            // tslint:disable-next-line:no-floating-promises\r\n            this.connection.stop(error);\r\n            this.handshakeRejecter(error);\r\n            throw error;\r\n        }\r\n        if (responseMessage.error) {\r\n            var message = \"Server returned handshake error: \" + responseMessage.error;\r\n            this.logger.log(ILogger_1.LogLevel.Error, message);\r\n            this.handshakeRejecter(message);\r\n            // We don't want to wait on the stop itself.\r\n            // tslint:disable-next-line:no-floating-promises\r\n            this.connection.stop(new Error(message));\r\n            throw new Error(message);\r\n        }\r\n        else {\r\n            this.logger.log(ILogger_1.LogLevel.Debug, \"Server handshake complete.\");\r\n        }\r\n        this.handshakeResolver();\r\n        return remainingData;\r\n    };\r\n    HubConnection.prototype.resetKeepAliveInterval = function () {\r\n        var _this = this;\r\n        this.cleanupPingTimer();\r\n        this.pingServerHandle = setTimeout(function () { return __awaiter(_this, void 0, void 0, function () {\r\n            var _a;\r\n            return __generator(this, function (_b) {\r\n                switch (_b.label) {\r\n                    case 0:\r\n                        if (!(this.connectionState === HubConnectionState.Connected)) return [3 /*break*/, 4];\r\n                        _b.label = 1;\r\n                    case 1:\r\n                        _b.trys.push([1, 3, , 4]);\r\n                        return [4 /*yield*/, this.sendMessage(this.cachedPingMessage)];\r\n                    case 2:\r\n                        _b.sent();\r\n                        return [3 /*break*/, 4];\r\n                    case 3:\r\n                        _a = _b.sent();\r\n                        // We don't care about the error. It should be seen elsewhere in the client.\r\n                        // The connection is probably in a bad or closed state now, cleanup the timer so it stops triggering\r\n                        this.cleanupPingTimer();\r\n                        return [3 /*break*/, 4];\r\n                    case 4: return [2 /*return*/];\r\n                }\r\n            });\r\n        }); }, this.keepAliveIntervalInMilliseconds);\r\n    };\r\n    HubConnection.prototype.resetTimeoutPeriod = function () {\r\n        var _this = this;\r\n        if (!this.connection.features || !this.connection.features.inherentKeepAlive) {\r\n            // Set the timeout timer\r\n            this.timeoutHandle = setTimeout(function () { return _this.serverTimeout(); }, this.serverTimeoutInMilliseconds);\r\n        }\r\n    };\r\n    HubConnection.prototype.serverTimeout = function () {\r\n        // The server hasn't talked to us in a while. It doesn't like us anymore ... :(\r\n        // Terminate the connection, but we don't need to wait on the promise.\r\n        // tslint:disable-next-line:no-floating-promises\r\n        this.connection.stop(new Error(\"Server timeout elapsed without receiving a message from the server.\"));\r\n    };\r\n    HubConnection.prototype.invokeClientMethod = function (invocationMessage) {\r\n        var _this = this;\r\n        var methods = this.methods[invocationMessage.target.toLowerCase()];\r\n        if (methods) {\r\n            methods.forEach(function (m) { return m.apply(_this, invocationMessage.arguments); });\r\n            if (invocationMessage.invocationId) {\r\n                // This is not supported in v1. So we return an error to avoid blocking the server waiting for the response.\r\n                var message = \"Server requested a response, which is not supported in this version of the client.\";\r\n                this.logger.log(ILogger_1.LogLevel.Error, message);\r\n                // We don't need to wait on this Promise.\r\n                // tslint:disable-next-line:no-floating-promises\r\n                this.connection.stop(new Error(message));\r\n            }\r\n        }\r\n        else {\r\n            this.logger.log(ILogger_1.LogLevel.Warning, \"No client method with the name '\" + invocationMessage.target + \"' found.\");\r\n        }\r\n    };\r\n    HubConnection.prototype.connectionClosed = function (error) {\r\n        var _this = this;\r\n        var callbacks = this.callbacks;\r\n        this.callbacks = {};\r\n        this.connectionState = HubConnectionState.Disconnected;\r\n        // if handshake is in progress start will be waiting for the handshake promise, so we complete it\r\n        // if it has already completed this should just noop\r\n        if (this.handshakeRejecter) {\r\n            this.handshakeRejecter(error);\r\n        }\r\n        Object.keys(callbacks)\r\n            .forEach(function (key) {\r\n            var callback = callbacks[key];\r\n            callback(null, error ? error : new Error(\"Invocation canceled due to connection being closed.\"));\r\n        });\r\n        this.cleanupTimeout();\r\n        this.cleanupPingTimer();\r\n        this.closedCallbacks.forEach(function (c) { return c.apply(_this, [error]); });\r\n    };\r\n    HubConnection.prototype.cleanupPingTimer = function () {\r\n        if (this.pingServerHandle) {\r\n            clearTimeout(this.pingServerHandle);\r\n        }\r\n    };\r\n    HubConnection.prototype.cleanupTimeout = function () {\r\n        if (this.timeoutHandle) {\r\n            clearTimeout(this.timeoutHandle);\r\n        }\r\n    };\r\n    HubConnection.prototype.createInvocation = function (methodName, args, nonblocking) {\r\n        if (nonblocking) {\r\n            return {\r\n                arguments: args,\r\n                target: methodName,\r\n                type: IHubProtocol_1.MessageType.Invocation,\r\n            };\r\n        }\r\n        else {\r\n            var id = this.id;\r\n            this.id++;\r\n            return {\r\n                arguments: args,\r\n                invocationId: id.toString(),\r\n                target: methodName,\r\n                type: IHubProtocol_1.MessageType.Invocation,\r\n            };\r\n        }\r\n    };\r\n    HubConnection.prototype.createStreamInvocation = function (methodName, args) {\r\n        var id = this.id;\r\n        this.id++;\r\n        return {\r\n            arguments: args,\r\n            invocationId: id.toString(),\r\n            target: methodName,\r\n            type: IHubProtocol_1.MessageType.StreamInvocation,\r\n        };\r\n    };\r\n    HubConnection.prototype.createCancelInvocation = function (id) {\r\n        return {\r\n            invocationId: id,\r\n            type: IHubProtocol_1.MessageType.CancelInvocation,\r\n        };\r\n    };\r\n    return HubConnection;\r\n}());\r\nexports.HubConnection = HubConnection;\r\n//# sourceMappingURL=HubConnection.js.map","\"use strict\";\r\n// Copyright (c) .NET Foundation. All rights reserved.\r\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar HttpConnection_1 = require(\"./HttpConnection\");\r\nvar HubConnection_1 = require(\"./HubConnection\");\r\nvar JsonHubProtocol_1 = require(\"./JsonHubProtocol\");\r\nvar Loggers_1 = require(\"./Loggers\");\r\nvar Utils_1 = require(\"./Utils\");\r\n/** A builder for configuring {@link @aspnet/signalr.HubConnection} instances. */\r\nvar HubConnectionBuilder = /** @class */ (function () {\r\n    function HubConnectionBuilder() {\r\n    }\r\n    HubConnectionBuilder.prototype.configureLogging = function (logging) {\r\n        Utils_1.Arg.isRequired(logging, \"logging\");\r\n        if (isLogger(logging)) {\r\n            this.logger = logging;\r\n        }\r\n        else {\r\n            this.logger = new Utils_1.ConsoleLogger(logging);\r\n        }\r\n        return this;\r\n    };\r\n    HubConnectionBuilder.prototype.withUrl = function (url, transportTypeOrOptions) {\r\n        Utils_1.Arg.isRequired(url, \"url\");\r\n        this.url = url;\r\n        // Flow-typing knows where it's at. Since HttpTransportType is a number and IHttpConnectionOptions is guaranteed\r\n        // to be an object, we know (as does TypeScript) this comparison is all we need to figure out which overload was called.\r\n        if (typeof transportTypeOrOptions === \"object\") {\r\n            this.httpConnectionOptions = transportTypeOrOptions;\r\n        }\r\n        else {\r\n            this.httpConnectionOptions = {\r\n                transport: transportTypeOrOptions,\r\n            };\r\n        }\r\n        return this;\r\n    };\r\n    /** Configures the {@link @aspnet/signalr.HubConnection} to use the specified Hub Protocol.\r\n     *\r\n     * @param {IHubProtocol} protocol The {@link @aspnet/signalr.IHubProtocol} implementation to use.\r\n     */\r\n    HubConnectionBuilder.prototype.withHubProtocol = function (protocol) {\r\n        Utils_1.Arg.isRequired(protocol, \"protocol\");\r\n        this.protocol = protocol;\r\n        return this;\r\n    };\r\n    /** Creates a {@link @aspnet/signalr.HubConnection} from the configuration options specified in this builder.\r\n     *\r\n     * @returns {HubConnection} The configured {@link @aspnet/signalr.HubConnection}.\r\n     */\r\n    HubConnectionBuilder.prototype.build = function () {\r\n        // If httpConnectionOptions has a logger, use it. Otherwise, override it with the one\r\n        // provided to configureLogger\r\n        var httpConnectionOptions = this.httpConnectionOptions || {};\r\n        // If it's 'null', the user **explicitly** asked for null, don't mess with it.\r\n        if (httpConnectionOptions.logger === undefined) {\r\n            // If our logger is undefined or null, that's OK, the HttpConnection constructor will handle it.\r\n            httpConnectionOptions.logger = this.logger;\r\n        }\r\n        // Now create the connection\r\n        if (!this.url) {\r\n            throw new Error(\"The 'HubConnectionBuilder.withUrl' method must be called before building the connection.\");\r\n        }\r\n        var connection = new HttpConnection_1.HttpConnection(this.url, httpConnectionOptions);\r\n        return HubConnection_1.HubConnection.create(connection, this.logger || Loggers_1.NullLogger.instance, this.protocol || new JsonHubProtocol_1.JsonHubProtocol());\r\n    };\r\n    return HubConnectionBuilder;\r\n}());\r\nexports.HubConnectionBuilder = HubConnectionBuilder;\r\nfunction isLogger(logger) {\r\n    return logger.log !== undefined;\r\n}\r\n//# sourceMappingURL=HubConnectionBuilder.js.map","\"use strict\";\r\n// Copyright (c) .NET Foundation. All rights reserved.\r\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\n/** Defines the type of a Hub Message. */\r\nvar MessageType;\r\n(function (MessageType) {\r\n    /** Indicates the message is an Invocation message and implements the {@link @aspnet/signalr.InvocationMessage} interface. */\r\n    MessageType[MessageType[\"Invocation\"] = 1] = \"Invocation\";\r\n    /** Indicates the message is a StreamItem message and implements the {@link @aspnet/signalr.StreamItemMessage} interface. */\r\n    MessageType[MessageType[\"StreamItem\"] = 2] = \"StreamItem\";\r\n    /** Indicates the message is a Completion message and implements the {@link @aspnet/signalr.CompletionMessage} interface. */\r\n    MessageType[MessageType[\"Completion\"] = 3] = \"Completion\";\r\n    /** Indicates the message is a Stream Invocation message and implements the {@link @aspnet/signalr.StreamInvocationMessage} interface. */\r\n    MessageType[MessageType[\"StreamInvocation\"] = 4] = \"StreamInvocation\";\r\n    /** Indicates the message is a Cancel Invocation message and implements the {@link @aspnet/signalr.CancelInvocationMessage} interface. */\r\n    MessageType[MessageType[\"CancelInvocation\"] = 5] = \"CancelInvocation\";\r\n    /** Indicates the message is a Ping message and implements the {@link @aspnet/signalr.PingMessage} interface. */\r\n    MessageType[MessageType[\"Ping\"] = 6] = \"Ping\";\r\n    /** Indicates the message is a Close message and implements the {@link @aspnet/signalr.CloseMessage} interface. */\r\n    MessageType[MessageType[\"Close\"] = 7] = \"Close\";\r\n})(MessageType = exports.MessageType || (exports.MessageType = {}));\r\n//# sourceMappingURL=IHubProtocol.js.map","\"use strict\";\r\n// Copyright (c) .NET Foundation. All rights reserved.\r\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\n// These values are designed to match the ASP.NET Log Levels since that's the pattern we're emulating here.\r\n/** Indicates the severity of a log message.\r\n *\r\n * Log Levels are ordered in increasing severity. So `Debug` is more severe than `Trace`, etc.\r\n */\r\nvar LogLevel;\r\n(function (LogLevel) {\r\n    /** Log level for very low severity diagnostic messages. */\r\n    LogLevel[LogLevel[\"Trace\"] = 0] = \"Trace\";\r\n    /** Log level for low severity diagnostic messages. */\r\n    LogLevel[LogLevel[\"Debug\"] = 1] = \"Debug\";\r\n    /** Log level for informational diagnostic messages. */\r\n    LogLevel[LogLevel[\"Information\"] = 2] = \"Information\";\r\n    /** Log level for diagnostic messages that indicate a non-fatal problem. */\r\n    LogLevel[LogLevel[\"Warning\"] = 3] = \"Warning\";\r\n    /** Log level for diagnostic messages that indicate a failure in the current operation. */\r\n    LogLevel[LogLevel[\"Error\"] = 4] = \"Error\";\r\n    /** Log level for diagnostic messages that indicate a failure that will terminate the entire application. */\r\n    LogLevel[LogLevel[\"Critical\"] = 5] = \"Critical\";\r\n    /** The highest possible log level. Used when configuring logging to indicate that no log messages should be emitted. */\r\n    LogLevel[LogLevel[\"None\"] = 6] = \"None\";\r\n})(LogLevel = exports.LogLevel || (exports.LogLevel = {}));\r\n//# sourceMappingURL=ILogger.js.map","\"use strict\";\r\n// Copyright (c) .NET Foundation. All rights reserved.\r\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\n// This will be treated as a bit flag in the future, so we keep it using power-of-two values.\r\n/** Specifies a specific HTTP transport type. */\r\nvar HttpTransportType;\r\n(function (HttpTransportType) {\r\n    /** Specifies no transport preference. */\r\n    HttpTransportType[HttpTransportType[\"None\"] = 0] = \"None\";\r\n    /** Specifies the WebSockets transport. */\r\n    HttpTransportType[HttpTransportType[\"WebSockets\"] = 1] = \"WebSockets\";\r\n    /** Specifies the Server-Sent Events transport. */\r\n    HttpTransportType[HttpTransportType[\"ServerSentEvents\"] = 2] = \"ServerSentEvents\";\r\n    /** Specifies the Long Polling transport. */\r\n    HttpTransportType[HttpTransportType[\"LongPolling\"] = 4] = \"LongPolling\";\r\n})(HttpTransportType = exports.HttpTransportType || (exports.HttpTransportType = {}));\r\n/** Specifies the transfer format for a connection. */\r\nvar TransferFormat;\r\n(function (TransferFormat) {\r\n    /** Specifies that only text data will be transmitted over the connection. */\r\n    TransferFormat[TransferFormat[\"Text\"] = 1] = \"Text\";\r\n    /** Specifies that binary data will be transmitted over the connection. */\r\n    TransferFormat[TransferFormat[\"Binary\"] = 2] = \"Binary\";\r\n})(TransferFormat = exports.TransferFormat || (exports.TransferFormat = {}));\r\n//# sourceMappingURL=ITransport.js.map","\"use strict\";\r\n// Copyright (c) .NET Foundation. All rights reserved.\r\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar IHubProtocol_1 = require(\"./IHubProtocol\");\r\nvar ILogger_1 = require(\"./ILogger\");\r\nvar ITransport_1 = require(\"./ITransport\");\r\nvar Loggers_1 = require(\"./Loggers\");\r\nvar TextMessageFormat_1 = require(\"./TextMessageFormat\");\r\nvar JSON_HUB_PROTOCOL_NAME = \"json\";\r\n/** Implements the JSON Hub Protocol. */\r\nvar JsonHubProtocol = /** @class */ (function () {\r\n    function JsonHubProtocol() {\r\n        /** @inheritDoc */\r\n        this.name = JSON_HUB_PROTOCOL_NAME;\r\n        /** @inheritDoc */\r\n        this.version = 1;\r\n        /** @inheritDoc */\r\n        this.transferFormat = ITransport_1.TransferFormat.Text;\r\n    }\r\n    /** Creates an array of {@link @aspnet/signalr.HubMessage} objects from the specified serialized representation.\r\n     *\r\n     * @param {string} input A string containing the serialized representation.\r\n     * @param {ILogger} logger A logger that will be used to log messages that occur during parsing.\r\n     */\r\n    JsonHubProtocol.prototype.parseMessages = function (input, logger) {\r\n        // The interface does allow \"ArrayBuffer\" to be passed in, but this implementation does not. So let's throw a useful error.\r\n        if (typeof input !== \"string\") {\r\n            throw new Error(\"Invalid input for JSON hub protocol. Expected a string.\");\r\n        }\r\n        if (!input) {\r\n            return [];\r\n        }\r\n        if (logger === null) {\r\n            logger = Loggers_1.NullLogger.instance;\r\n        }\r\n        // Parse the messages\r\n        var messages = TextMessageFormat_1.TextMessageFormat.parse(input);\r\n        var hubMessages = [];\r\n        for (var _i = 0, messages_1 = messages; _i < messages_1.length; _i++) {\r\n            var message = messages_1[_i];\r\n            var parsedMessage = JSON.parse(message);\r\n            if (typeof parsedMessage.type !== \"number\") {\r\n                throw new Error(\"Invalid payload.\");\r\n            }\r\n            switch (parsedMessage.type) {\r\n                case IHubProtocol_1.MessageType.Invocation:\r\n                    this.isInvocationMessage(parsedMessage);\r\n                    break;\r\n                case IHubProtocol_1.MessageType.StreamItem:\r\n                    this.isStreamItemMessage(parsedMessage);\r\n                    break;\r\n                case IHubProtocol_1.MessageType.Completion:\r\n                    this.isCompletionMessage(parsedMessage);\r\n                    break;\r\n                case IHubProtocol_1.MessageType.Ping:\r\n                    // Single value, no need to validate\r\n                    break;\r\n                case IHubProtocol_1.MessageType.Close:\r\n                    // All optional values, no need to validate\r\n                    break;\r\n                default:\r\n                    // Future protocol changes can add message types, old clients can ignore them\r\n                    logger.log(ILogger_1.LogLevel.Information, \"Unknown message type '\" + parsedMessage.type + \"' ignored.\");\r\n                    continue;\r\n            }\r\n            hubMessages.push(parsedMessage);\r\n        }\r\n        return hubMessages;\r\n    };\r\n    /** Writes the specified {@link @aspnet/signalr.HubMessage} to a string and returns it.\r\n     *\r\n     * @param {HubMessage} message The message to write.\r\n     * @returns {string} A string containing the serialized representation of the message.\r\n     */\r\n    JsonHubProtocol.prototype.writeMessage = function (message) {\r\n        return TextMessageFormat_1.TextMessageFormat.write(JSON.stringify(message));\r\n    };\r\n    JsonHubProtocol.prototype.isInvocationMessage = function (message) {\r\n        this.assertNotEmptyString(message.target, \"Invalid payload for Invocation message.\");\r\n        if (message.invocationId !== undefined) {\r\n            this.assertNotEmptyString(message.invocationId, \"Invalid payload for Invocation message.\");\r\n        }\r\n    };\r\n    JsonHubProtocol.prototype.isStreamItemMessage = function (message) {\r\n        this.assertNotEmptyString(message.invocationId, \"Invalid payload for StreamItem message.\");\r\n        if (message.item === undefined) {\r\n            throw new Error(\"Invalid payload for StreamItem message.\");\r\n        }\r\n    };\r\n    JsonHubProtocol.prototype.isCompletionMessage = function (message) {\r\n        if (message.result && message.error) {\r\n            throw new Error(\"Invalid payload for Completion message.\");\r\n        }\r\n        if (!message.result && message.error) {\r\n            this.assertNotEmptyString(message.error, \"Invalid payload for Completion message.\");\r\n        }\r\n        this.assertNotEmptyString(message.invocationId, \"Invalid payload for Completion message.\");\r\n    };\r\n    JsonHubProtocol.prototype.assertNotEmptyString = function (value, errorMessage) {\r\n        if (typeof value !== \"string\" || value === \"\") {\r\n            throw new Error(errorMessage);\r\n        }\r\n    };\r\n    return JsonHubProtocol;\r\n}());\r\nexports.JsonHubProtocol = JsonHubProtocol;\r\n//# sourceMappingURL=JsonHubProtocol.js.map","\"use strict\";\r\n// Copyright (c) .NET Foundation. All rights reserved.\r\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\n/** A logger that does nothing when log messages are sent to it. */\r\nvar NullLogger = /** @class */ (function () {\r\n    function NullLogger() {\r\n    }\r\n    /** @inheritDoc */\r\n    // tslint:disable-next-line\r\n    NullLogger.prototype.log = function (_logLevel, _message) {\r\n    };\r\n    /** The singleton instance of the {@link @aspnet/signalr.NullLogger}. */\r\n    NullLogger.instance = new NullLogger();\r\n    return NullLogger;\r\n}());\r\nexports.NullLogger = NullLogger;\r\n//# sourceMappingURL=Loggers.js.map","\"use strict\";\r\n// Copyright (c) .NET Foundation. All rights reserved.\r\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\r\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\r\n    return new (P || (P = Promise))(function (resolve, reject) {\r\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n        function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\r\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n    });\r\n};\r\nvar __generator = (this && this.__generator) || function (thisArg, body) {\r\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n    return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n    function verb(n) { return function (v) { return step([n, v]); }; }\r\n    function step(op) {\r\n        if (f) throw new TypeError(\"Generator is already executing.\");\r\n        while (_) try {\r\n            if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n            if (y = 0, t) op = [op[0] & 2, t.value];\r\n            switch (op[0]) {\r\n                case 0: case 1: t = op; break;\r\n                case 4: _.label++; return { value: op[1], done: false };\r\n                case 5: _.label++; y = op[1]; op = [0]; continue;\r\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n                default:\r\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n                    if (t[2]) _.ops.pop();\r\n                    _.trys.pop(); continue;\r\n            }\r\n            op = body.call(thisArg, _);\r\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n    }\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar AbortController_1 = require(\"./AbortController\");\r\nvar Errors_1 = require(\"./Errors\");\r\nvar ILogger_1 = require(\"./ILogger\");\r\nvar ITransport_1 = require(\"./ITransport\");\r\nvar Utils_1 = require(\"./Utils\");\r\n// Not exported from 'index', this type is internal.\r\n/** @private */\r\nvar LongPollingTransport = /** @class */ (function () {\r\n    function LongPollingTransport(httpClient, accessTokenFactory, logger, logMessageContent) {\r\n        this.httpClient = httpClient;\r\n        this.accessTokenFactory = accessTokenFactory;\r\n        this.logger = logger;\r\n        this.pollAbort = new AbortController_1.AbortController();\r\n        this.logMessageContent = logMessageContent;\r\n        this.running = false;\r\n        this.onreceive = null;\r\n        this.onclose = null;\r\n    }\r\n    Object.defineProperty(LongPollingTransport.prototype, \"pollAborted\", {\r\n        // This is an internal type, not exported from 'index' so this is really just internal.\r\n        get: function () {\r\n            return this.pollAbort.aborted;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    LongPollingTransport.prototype.connect = function (url, transferFormat) {\r\n        return __awaiter(this, void 0, void 0, function () {\r\n            var pollOptions, token, pollUrl, response;\r\n            return __generator(this, function (_a) {\r\n                switch (_a.label) {\r\n                    case 0:\r\n                        Utils_1.Arg.isRequired(url, \"url\");\r\n                        Utils_1.Arg.isRequired(transferFormat, \"transferFormat\");\r\n                        Utils_1.Arg.isIn(transferFormat, ITransport_1.TransferFormat, \"transferFormat\");\r\n                        this.url = url;\r\n                        this.logger.log(ILogger_1.LogLevel.Trace, \"(LongPolling transport) Connecting.\");\r\n                        // Allow binary format on Node and Browsers that support binary content (indicated by the presence of responseType property)\r\n                        if (transferFormat === ITransport_1.TransferFormat.Binary &&\r\n                            (typeof XMLHttpRequest !== \"undefined\" && typeof new XMLHttpRequest().responseType !== \"string\")) {\r\n                            throw new Error(\"Binary protocols over XmlHttpRequest not implementing advanced features are not supported.\");\r\n                        }\r\n                        pollOptions = {\r\n                            abortSignal: this.pollAbort.signal,\r\n                            headers: {},\r\n                            timeout: 100000,\r\n                        };\r\n                        if (transferFormat === ITransport_1.TransferFormat.Binary) {\r\n                            pollOptions.responseType = \"arraybuffer\";\r\n                        }\r\n                        return [4 /*yield*/, this.getAccessToken()];\r\n                    case 1:\r\n                        token = _a.sent();\r\n                        this.updateHeaderToken(pollOptions, token);\r\n                        pollUrl = url + \"&_=\" + Date.now();\r\n                        this.logger.log(ILogger_1.LogLevel.Trace, \"(LongPolling transport) polling: \" + pollUrl + \".\");\r\n                        return [4 /*yield*/, this.httpClient.get(pollUrl, pollOptions)];\r\n                    case 2:\r\n                        response = _a.sent();\r\n                        if (response.statusCode !== 200) {\r\n                            this.logger.log(ILogger_1.LogLevel.Error, \"(LongPolling transport) Unexpected response code: \" + response.statusCode + \".\");\r\n                            // Mark running as false so that the poll immediately ends and runs the close logic\r\n                            this.closeError = new Errors_1.HttpError(response.statusText || \"\", response.statusCode);\r\n                            this.running = false;\r\n                        }\r\n                        else {\r\n                            this.running = true;\r\n                        }\r\n                        this.receiving = this.poll(this.url, pollOptions);\r\n                        return [2 /*return*/];\r\n                }\r\n            });\r\n        });\r\n    };\r\n    LongPollingTransport.prototype.getAccessToken = function () {\r\n        return __awaiter(this, void 0, void 0, function () {\r\n            return __generator(this, function (_a) {\r\n                switch (_a.label) {\r\n                    case 0:\r\n                        if (!this.accessTokenFactory) return [3 /*break*/, 2];\r\n                        return [4 /*yield*/, this.accessTokenFactory()];\r\n                    case 1: return [2 /*return*/, _a.sent()];\r\n                    case 2: return [2 /*return*/, null];\r\n                }\r\n            });\r\n        });\r\n    };\r\n    LongPollingTransport.prototype.updateHeaderToken = function (request, token) {\r\n        if (!request.headers) {\r\n            request.headers = {};\r\n        }\r\n        if (token) {\r\n            // tslint:disable-next-line:no-string-literal\r\n            request.headers[\"Authorization\"] = \"Bearer \" + token;\r\n            return;\r\n        }\r\n        // tslint:disable-next-line:no-string-literal\r\n        if (request.headers[\"Authorization\"]) {\r\n            // tslint:disable-next-line:no-string-literal\r\n            delete request.headers[\"Authorization\"];\r\n        }\r\n    };\r\n    LongPollingTransport.prototype.poll = function (url, pollOptions) {\r\n        return __awaiter(this, void 0, void 0, function () {\r\n            var token, pollUrl, response, e_1;\r\n            return __generator(this, function (_a) {\r\n                switch (_a.label) {\r\n                    case 0:\r\n                        _a.trys.push([0, , 8, 9]);\r\n                        _a.label = 1;\r\n                    case 1:\r\n                        if (!this.running) return [3 /*break*/, 7];\r\n                        return [4 /*yield*/, this.getAccessToken()];\r\n                    case 2:\r\n                        token = _a.sent();\r\n                        this.updateHeaderToken(pollOptions, token);\r\n                        _a.label = 3;\r\n                    case 3:\r\n                        _a.trys.push([3, 5, , 6]);\r\n                        pollUrl = url + \"&_=\" + Date.now();\r\n                        this.logger.log(ILogger_1.LogLevel.Trace, \"(LongPolling transport) polling: \" + pollUrl + \".\");\r\n                        return [4 /*yield*/, this.httpClient.get(pollUrl, pollOptions)];\r\n                    case 4:\r\n                        response = _a.sent();\r\n                        if (response.statusCode === 204) {\r\n                            this.logger.log(ILogger_1.LogLevel.Information, \"(LongPolling transport) Poll terminated by server.\");\r\n                            this.running = false;\r\n                        }\r\n                        else if (response.statusCode !== 200) {\r\n                            this.logger.log(ILogger_1.LogLevel.Error, \"(LongPolling transport) Unexpected response code: \" + response.statusCode + \".\");\r\n                            // Unexpected status code\r\n                            this.closeError = new Errors_1.HttpError(response.statusText || \"\", response.statusCode);\r\n                            this.running = false;\r\n                        }\r\n                        else {\r\n                            // Process the response\r\n                            if (response.content) {\r\n                                this.logger.log(ILogger_1.LogLevel.Trace, \"(LongPolling transport) data received. \" + Utils_1.getDataDetail(response.content, this.logMessageContent) + \".\");\r\n                                if (this.onreceive) {\r\n                                    this.onreceive(response.content);\r\n                                }\r\n                            }\r\n                            else {\r\n                                // This is another way timeout manifest.\r\n                                this.logger.log(ILogger_1.LogLevel.Trace, \"(LongPolling transport) Poll timed out, reissuing.\");\r\n                            }\r\n                        }\r\n                        return [3 /*break*/, 6];\r\n                    case 5:\r\n                        e_1 = _a.sent();\r\n                        if (!this.running) {\r\n                            // Log but disregard errors that occur after stopping\r\n                            this.logger.log(ILogger_1.LogLevel.Trace, \"(LongPolling transport) Poll errored after shutdown: \" + e_1.message);\r\n                        }\r\n                        else {\r\n                            if (e_1 instanceof Errors_1.TimeoutError) {\r\n                                // Ignore timeouts and reissue the poll.\r\n                                this.logger.log(ILogger_1.LogLevel.Trace, \"(LongPolling transport) Poll timed out, reissuing.\");\r\n                            }\r\n                            else {\r\n                                // Close the connection with the error as the result.\r\n                                this.closeError = e_1;\r\n                                this.running = false;\r\n                            }\r\n                        }\r\n                        return [3 /*break*/, 6];\r\n                    case 6: return [3 /*break*/, 1];\r\n                    case 7: return [3 /*break*/, 9];\r\n                    case 8:\r\n                        this.logger.log(ILogger_1.LogLevel.Trace, \"(LongPolling transport) Polling complete.\");\r\n                        // We will reach here with pollAborted==false when the server returned a response causing the transport to stop.\r\n                        // If pollAborted==true then client initiated the stop and the stop method will raise the close event after DELETE is sent.\r\n                        if (!this.pollAborted) {\r\n                            this.raiseOnClose();\r\n                        }\r\n                        return [7 /*endfinally*/];\r\n                    case 9: return [2 /*return*/];\r\n                }\r\n            });\r\n        });\r\n    };\r\n    LongPollingTransport.prototype.send = function (data) {\r\n        return __awaiter(this, void 0, void 0, function () {\r\n            return __generator(this, function (_a) {\r\n                if (!this.running) {\r\n                    return [2 /*return*/, Promise.reject(new Error(\"Cannot send until the transport is connected\"))];\r\n                }\r\n                return [2 /*return*/, Utils_1.sendMessage(this.logger, \"LongPolling\", this.httpClient, this.url, this.accessTokenFactory, data, this.logMessageContent)];\r\n            });\r\n        });\r\n    };\r\n    LongPollingTransport.prototype.stop = function () {\r\n        return __awaiter(this, void 0, void 0, function () {\r\n            var deleteOptions, token;\r\n            return __generator(this, function (_a) {\r\n                switch (_a.label) {\r\n                    case 0:\r\n                        this.logger.log(ILogger_1.LogLevel.Trace, \"(LongPolling transport) Stopping polling.\");\r\n                        // Tell receiving loop to stop, abort any current request, and then wait for it to finish\r\n                        this.running = false;\r\n                        this.pollAbort.abort();\r\n                        _a.label = 1;\r\n                    case 1:\r\n                        _a.trys.push([1, , 5, 6]);\r\n                        return [4 /*yield*/, this.receiving];\r\n                    case 2:\r\n                        _a.sent();\r\n                        // Send DELETE to clean up long polling on the server\r\n                        this.logger.log(ILogger_1.LogLevel.Trace, \"(LongPolling transport) sending DELETE request to \" + this.url + \".\");\r\n                        deleteOptions = {\r\n                            headers: {},\r\n                        };\r\n                        return [4 /*yield*/, this.getAccessToken()];\r\n                    case 3:\r\n                        token = _a.sent();\r\n                        this.updateHeaderToken(deleteOptions, token);\r\n                        return [4 /*yield*/, this.httpClient.delete(this.url, deleteOptions)];\r\n                    case 4:\r\n                        _a.sent();\r\n                        this.logger.log(ILogger_1.LogLevel.Trace, \"(LongPolling transport) DELETE request sent.\");\r\n                        return [3 /*break*/, 6];\r\n                    case 5:\r\n                        this.logger.log(ILogger_1.LogLevel.Trace, \"(LongPolling transport) Stop finished.\");\r\n                        // Raise close event here instead of in polling\r\n                        // It needs to happen after the DELETE request is sent\r\n                        this.raiseOnClose();\r\n                        return [7 /*endfinally*/];\r\n                    case 6: return [2 /*return*/];\r\n                }\r\n            });\r\n        });\r\n    };\r\n    LongPollingTransport.prototype.raiseOnClose = function () {\r\n        if (this.onclose) {\r\n            var logMessage = \"(LongPolling transport) Firing onclose event.\";\r\n            if (this.closeError) {\r\n                logMessage += \" Error: \" + this.closeError;\r\n            }\r\n            this.logger.log(ILogger_1.LogLevel.Trace, logMessage);\r\n            this.onclose(this.closeError);\r\n        }\r\n    };\r\n    return LongPollingTransport;\r\n}());\r\nexports.LongPollingTransport = LongPollingTransport;\r\n//# sourceMappingURL=LongPollingTransport.js.map","\"use strict\";\r\n// Copyright (c) .NET Foundation. All rights reserved.\r\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\r\nvar __extends = (this && this.__extends) || (function () {\r\n    var extendStatics = Object.setPrototypeOf ||\r\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n    return function (d, b) {\r\n        extendStatics(d, b);\r\n        function __() { this.constructor = d; }\r\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n    };\r\n})();\r\nvar __assign = (this && this.__assign) || Object.assign || function(t) {\r\n    for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n        s = arguments[i];\r\n        for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\r\n            t[p] = s[p];\r\n    }\r\n    return t;\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar Errors_1 = require(\"./Errors\");\r\nvar HttpClient_1 = require(\"./HttpClient\");\r\nvar ILogger_1 = require(\"./ILogger\");\r\nvar Utils_1 = require(\"./Utils\");\r\nvar requestModule;\r\nif (typeof XMLHttpRequest === \"undefined\") {\r\n    // In order to ignore the dynamic require in webpack builds we need to do this magic\r\n    // @ts-ignore: TS doesn't know about these names\r\n    var requireFunc = typeof __webpack_require__ === \"function\" ? __non_webpack_require__ : require;\r\n    requestModule = requireFunc(\"request\");\r\n}\r\nvar NodeHttpClient = /** @class */ (function (_super) {\r\n    __extends(NodeHttpClient, _super);\r\n    function NodeHttpClient(logger) {\r\n        var _this = _super.call(this) || this;\r\n        if (typeof requestModule === \"undefined\") {\r\n            throw new Error(\"The 'request' module could not be loaded.\");\r\n        }\r\n        _this.logger = logger;\r\n        _this.cookieJar = requestModule.jar();\r\n        _this.request = requestModule.defaults({ jar: _this.cookieJar });\r\n        return _this;\r\n    }\r\n    NodeHttpClient.prototype.send = function (httpRequest) {\r\n        var _this = this;\r\n        return new Promise(function (resolve, reject) {\r\n            var requestBody;\r\n            if (Utils_1.isArrayBuffer(httpRequest.content)) {\r\n                requestBody = Buffer.from(httpRequest.content);\r\n            }\r\n            else {\r\n                requestBody = httpRequest.content || \"\";\r\n            }\r\n            var currentRequest = _this.request(httpRequest.url, {\r\n                body: requestBody,\r\n                // If binary is expected 'null' should be used, otherwise for text 'utf8'\r\n                encoding: httpRequest.responseType === \"arraybuffer\" ? null : \"utf8\",\r\n                headers: __assign({ \r\n                    // Tell auth middleware to 401 instead of redirecting\r\n                    \"X-Requested-With\": \"XMLHttpRequest\" }, httpRequest.headers),\r\n                method: httpRequest.method,\r\n                timeout: httpRequest.timeout,\r\n            }, function (error, response, body) {\r\n                if (httpRequest.abortSignal) {\r\n                    httpRequest.abortSignal.onabort = null;\r\n                }\r\n                if (error) {\r\n                    if (error.code === \"ETIMEDOUT\") {\r\n                        _this.logger.log(ILogger_1.LogLevel.Warning, \"Timeout from HTTP request.\");\r\n                        reject(new Errors_1.TimeoutError());\r\n                    }\r\n                    _this.logger.log(ILogger_1.LogLevel.Warning, \"Error from HTTP request. \" + error);\r\n                    reject(error);\r\n                    return;\r\n                }\r\n                if (response.statusCode >= 200 && response.statusCode < 300) {\r\n                    resolve(new HttpClient_1.HttpResponse(response.statusCode, response.statusMessage || \"\", body));\r\n                }\r\n                else {\r\n                    reject(new Errors_1.HttpError(response.statusMessage || \"\", response.statusCode || 0));\r\n                }\r\n            });\r\n            if (httpRequest.abortSignal) {\r\n                httpRequest.abortSignal.onabort = function () {\r\n                    currentRequest.abort();\r\n                    reject(new Errors_1.AbortError());\r\n                };\r\n            }\r\n        });\r\n    };\r\n    NodeHttpClient.prototype.getCookieString = function (url) {\r\n        return this.cookieJar.getCookieString(url);\r\n    };\r\n    return NodeHttpClient;\r\n}(HttpClient_1.HttpClient));\r\nexports.NodeHttpClient = NodeHttpClient;\r\n//# sourceMappingURL=NodeHttpClient.js.map","\"use strict\";\r\n// Copyright (c) .NET Foundation. All rights reserved.\r\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\r\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\r\n    return new (P || (P = Promise))(function (resolve, reject) {\r\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n        function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\r\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n    });\r\n};\r\nvar __generator = (this && this.__generator) || function (thisArg, body) {\r\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n    return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n    function verb(n) { return function (v) { return step([n, v]); }; }\r\n    function step(op) {\r\n        if (f) throw new TypeError(\"Generator is already executing.\");\r\n        while (_) try {\r\n            if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n            if (y = 0, t) op = [op[0] & 2, t.value];\r\n            switch (op[0]) {\r\n                case 0: case 1: t = op; break;\r\n                case 4: _.label++; return { value: op[1], done: false };\r\n                case 5: _.label++; y = op[1]; op = [0]; continue;\r\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n                default:\r\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n                    if (t[2]) _.ops.pop();\r\n                    _.trys.pop(); continue;\r\n            }\r\n            op = body.call(thisArg, _);\r\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n    }\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar ILogger_1 = require(\"./ILogger\");\r\nvar ITransport_1 = require(\"./ITransport\");\r\nvar Utils_1 = require(\"./Utils\");\r\n/** @private */\r\nvar ServerSentEventsTransport = /** @class */ (function () {\r\n    function ServerSentEventsTransport(httpClient, accessTokenFactory, logger, logMessageContent, eventSourceConstructor) {\r\n        this.httpClient = httpClient;\r\n        this.accessTokenFactory = accessTokenFactory;\r\n        this.logger = logger;\r\n        this.logMessageContent = logMessageContent;\r\n        this.eventSourceConstructor = eventSourceConstructor;\r\n        this.onreceive = null;\r\n        this.onclose = null;\r\n    }\r\n    ServerSentEventsTransport.prototype.connect = function (url, transferFormat) {\r\n        return __awaiter(this, void 0, void 0, function () {\r\n            var token;\r\n            var _this = this;\r\n            return __generator(this, function (_a) {\r\n                switch (_a.label) {\r\n                    case 0:\r\n                        Utils_1.Arg.isRequired(url, \"url\");\r\n                        Utils_1.Arg.isRequired(transferFormat, \"transferFormat\");\r\n                        Utils_1.Arg.isIn(transferFormat, ITransport_1.TransferFormat, \"transferFormat\");\r\n                        this.logger.log(ILogger_1.LogLevel.Trace, \"(SSE transport) Connecting.\");\r\n                        // set url before accessTokenFactory because this.url is only for send and we set the auth header instead of the query string for send\r\n                        this.url = url;\r\n                        if (!this.accessTokenFactory) return [3 /*break*/, 2];\r\n                        return [4 /*yield*/, this.accessTokenFactory()];\r\n                    case 1:\r\n                        token = _a.sent();\r\n                        if (token) {\r\n                            url += (url.indexOf(\"?\") < 0 ? \"?\" : \"&\") + (\"access_token=\" + encodeURIComponent(token));\r\n                        }\r\n                        _a.label = 2;\r\n                    case 2: return [2 /*return*/, new Promise(function (resolve, reject) {\r\n                            var opened = false;\r\n                            if (transferFormat !== ITransport_1.TransferFormat.Text) {\r\n                                reject(new Error(\"The Server-Sent Events transport only supports the 'Text' transfer format\"));\r\n                                return;\r\n                            }\r\n                            var eventSource;\r\n                            if (typeof window !== \"undefined\") {\r\n                                eventSource = new _this.eventSourceConstructor(url, { withCredentials: true });\r\n                            }\r\n                            else {\r\n                                // Non-browser passes cookies via the dictionary\r\n                                var cookies = _this.httpClient.getCookieString(url);\r\n                                eventSource = new _this.eventSourceConstructor(url, { withCredentials: true, headers: { Cookie: cookies } });\r\n                            }\r\n                            try {\r\n                                eventSource.onmessage = function (e) {\r\n                                    if (_this.onreceive) {\r\n                                        try {\r\n                                            _this.logger.log(ILogger_1.LogLevel.Trace, \"(SSE transport) data received. \" + Utils_1.getDataDetail(e.data, _this.logMessageContent) + \".\");\r\n                                            _this.onreceive(e.data);\r\n                                        }\r\n                                        catch (error) {\r\n                                            _this.close(error);\r\n                                            return;\r\n                                        }\r\n                                    }\r\n                                };\r\n                                eventSource.onerror = function (e) {\r\n                                    var error = new Error(e.data || \"Error occurred\");\r\n                                    if (opened) {\r\n                                        _this.close(error);\r\n                                    }\r\n                                    else {\r\n                                        reject(error);\r\n                                    }\r\n                                };\r\n                                eventSource.onopen = function () {\r\n                                    _this.logger.log(ILogger_1.LogLevel.Information, \"SSE connected to \" + _this.url);\r\n                                    _this.eventSource = eventSource;\r\n                                    opened = true;\r\n                                    resolve();\r\n                                };\r\n                            }\r\n                            catch (e) {\r\n                                reject(e);\r\n                                return;\r\n                            }\r\n                        })];\r\n                }\r\n            });\r\n        });\r\n    };\r\n    ServerSentEventsTransport.prototype.send = function (data) {\r\n        return __awaiter(this, void 0, void 0, function () {\r\n            return __generator(this, function (_a) {\r\n                if (!this.eventSource) {\r\n                    return [2 /*return*/, Promise.reject(new Error(\"Cannot send until the transport is connected\"))];\r\n                }\r\n                return [2 /*return*/, Utils_1.sendMessage(this.logger, \"SSE\", this.httpClient, this.url, this.accessTokenFactory, data, this.logMessageContent)];\r\n            });\r\n        });\r\n    };\r\n    ServerSentEventsTransport.prototype.stop = function () {\r\n        this.close();\r\n        return Promise.resolve();\r\n    };\r\n    ServerSentEventsTransport.prototype.close = function (e) {\r\n        if (this.eventSource) {\r\n            this.eventSource.close();\r\n            this.eventSource = undefined;\r\n            if (this.onclose) {\r\n                this.onclose(e);\r\n            }\r\n        }\r\n    };\r\n    return ServerSentEventsTransport;\r\n}());\r\nexports.ServerSentEventsTransport = ServerSentEventsTransport;\r\n//# sourceMappingURL=ServerSentEventsTransport.js.map","\"use strict\";\r\n// Copyright (c) .NET Foundation. All rights reserved.\r\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\n// Not exported from index\r\n/** @private */\r\nvar TextMessageFormat = /** @class */ (function () {\r\n    function TextMessageFormat() {\r\n    }\r\n    TextMessageFormat.write = function (output) {\r\n        return \"\" + output + TextMessageFormat.RecordSeparator;\r\n    };\r\n    TextMessageFormat.parse = function (input) {\r\n        if (input[input.length - 1] !== TextMessageFormat.RecordSeparator) {\r\n            throw new Error(\"Message is incomplete.\");\r\n        }\r\n        var messages = input.split(TextMessageFormat.RecordSeparator);\r\n        messages.pop();\r\n        return messages;\r\n    };\r\n    TextMessageFormat.RecordSeparatorCode = 0x1e;\r\n    TextMessageFormat.RecordSeparator = String.fromCharCode(TextMessageFormat.RecordSeparatorCode);\r\n    return TextMessageFormat;\r\n}());\r\nexports.TextMessageFormat = TextMessageFormat;\r\n//# sourceMappingURL=TextMessageFormat.js.map","\"use strict\";\r\n// Copyright (c) .NET Foundation. All rights reserved.\r\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\r\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\r\n    return new (P || (P = Promise))(function (resolve, reject) {\r\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n        function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\r\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n    });\r\n};\r\nvar __generator = (this && this.__generator) || function (thisArg, body) {\r\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n    return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n    function verb(n) { return function (v) { return step([n, v]); }; }\r\n    function step(op) {\r\n        if (f) throw new TypeError(\"Generator is already executing.\");\r\n        while (_) try {\r\n            if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n            if (y = 0, t) op = [op[0] & 2, t.value];\r\n            switch (op[0]) {\r\n                case 0: case 1: t = op; break;\r\n                case 4: _.label++; return { value: op[1], done: false };\r\n                case 5: _.label++; y = op[1]; op = [0]; continue;\r\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n                default:\r\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n                    if (t[2]) _.ops.pop();\r\n                    _.trys.pop(); continue;\r\n            }\r\n            op = body.call(thisArg, _);\r\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n    }\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar ILogger_1 = require(\"./ILogger\");\r\nvar Loggers_1 = require(\"./Loggers\");\r\n/** @private */\r\nvar Arg = /** @class */ (function () {\r\n    function Arg() {\r\n    }\r\n    Arg.isRequired = function (val, name) {\r\n        if (val === null || val === undefined) {\r\n            throw new Error(\"The '\" + name + \"' argument is required.\");\r\n        }\r\n    };\r\n    Arg.isIn = function (val, values, name) {\r\n        // TypeScript enums have keys for **both** the name and the value of each enum member on the type itself.\r\n        if (!(val in values)) {\r\n            throw new Error(\"Unknown \" + name + \" value: \" + val + \".\");\r\n        }\r\n    };\r\n    return Arg;\r\n}());\r\nexports.Arg = Arg;\r\n/** @private */\r\nfunction getDataDetail(data, includeContent) {\r\n    var detail = \"\";\r\n    if (isArrayBuffer(data)) {\r\n        detail = \"Binary data of length \" + data.byteLength;\r\n        if (includeContent) {\r\n            detail += \". Content: '\" + formatArrayBuffer(data) + \"'\";\r\n        }\r\n    }\r\n    else if (typeof data === \"string\") {\r\n        detail = \"String data of length \" + data.length;\r\n        if (includeContent) {\r\n            detail += \". Content: '\" + data + \"'\";\r\n        }\r\n    }\r\n    return detail;\r\n}\r\nexports.getDataDetail = getDataDetail;\r\n/** @private */\r\nfunction formatArrayBuffer(data) {\r\n    var view = new Uint8Array(data);\r\n    // Uint8Array.map only supports returning another Uint8Array?\r\n    var str = \"\";\r\n    view.forEach(function (num) {\r\n        var pad = num < 16 ? \"0\" : \"\";\r\n        str += \"0x\" + pad + num.toString(16) + \" \";\r\n    });\r\n    // Trim of trailing space.\r\n    return str.substr(0, str.length - 1);\r\n}\r\nexports.formatArrayBuffer = formatArrayBuffer;\r\n// Also in signalr-protocol-msgpack/Utils.ts\r\n/** @private */\r\nfunction isArrayBuffer(val) {\r\n    return val && typeof ArrayBuffer !== \"undefined\" &&\r\n        (val instanceof ArrayBuffer ||\r\n            // Sometimes we get an ArrayBuffer that doesn't satisfy instanceof\r\n            (val.constructor && val.constructor.name === \"ArrayBuffer\"));\r\n}\r\nexports.isArrayBuffer = isArrayBuffer;\r\n/** @private */\r\nfunction sendMessage(logger, transportName, httpClient, url, accessTokenFactory, content, logMessageContent) {\r\n    return __awaiter(this, void 0, void 0, function () {\r\n        var _a, headers, token, responseType, response;\r\n        return __generator(this, function (_b) {\r\n            switch (_b.label) {\r\n                case 0:\r\n                    if (!accessTokenFactory) return [3 /*break*/, 2];\r\n                    return [4 /*yield*/, accessTokenFactory()];\r\n                case 1:\r\n                    token = _b.sent();\r\n                    if (token) {\r\n                        headers = (_a = {},\r\n                            _a[\"Authorization\"] = \"Bearer \" + token,\r\n                            _a);\r\n                    }\r\n                    _b.label = 2;\r\n                case 2:\r\n                    logger.log(ILogger_1.LogLevel.Trace, \"(\" + transportName + \" transport) sending data. \" + getDataDetail(content, logMessageContent) + \".\");\r\n                    responseType = isArrayBuffer(content) ? \"arraybuffer\" : \"text\";\r\n                    return [4 /*yield*/, httpClient.post(url, {\r\n                            content: content,\r\n                            headers: headers,\r\n                            responseType: responseType,\r\n                        })];\r\n                case 3:\r\n                    response = _b.sent();\r\n                    logger.log(ILogger_1.LogLevel.Trace, \"(\" + transportName + \" transport) request complete. Response status: \" + response.statusCode + \".\");\r\n                    return [2 /*return*/];\r\n            }\r\n        });\r\n    });\r\n}\r\nexports.sendMessage = sendMessage;\r\n/** @private */\r\nfunction createLogger(logger) {\r\n    if (logger === undefined) {\r\n        return new ConsoleLogger(ILogger_1.LogLevel.Information);\r\n    }\r\n    if (logger === null) {\r\n        return Loggers_1.NullLogger.instance;\r\n    }\r\n    if (logger.log) {\r\n        return logger;\r\n    }\r\n    return new ConsoleLogger(logger);\r\n}\r\nexports.createLogger = createLogger;\r\n/** @private */\r\nvar Subject = /** @class */ (function () {\r\n    function Subject() {\r\n        this.observers = [];\r\n    }\r\n    Subject.prototype.next = function (item) {\r\n        for (var _i = 0, _a = this.observers; _i < _a.length; _i++) {\r\n            var observer = _a[_i];\r\n            observer.next(item);\r\n        }\r\n    };\r\n    Subject.prototype.error = function (err) {\r\n        for (var _i = 0, _a = this.observers; _i < _a.length; _i++) {\r\n            var observer = _a[_i];\r\n            if (observer.error) {\r\n                observer.error(err);\r\n            }\r\n        }\r\n    };\r\n    Subject.prototype.complete = function () {\r\n        for (var _i = 0, _a = this.observers; _i < _a.length; _i++) {\r\n            var observer = _a[_i];\r\n            if (observer.complete) {\r\n                observer.complete();\r\n            }\r\n        }\r\n    };\r\n    Subject.prototype.subscribe = function (observer) {\r\n        this.observers.push(observer);\r\n        return new SubjectSubscription(this, observer);\r\n    };\r\n    return Subject;\r\n}());\r\nexports.Subject = Subject;\r\n/** @private */\r\nvar SubjectSubscription = /** @class */ (function () {\r\n    function SubjectSubscription(subject, observer) {\r\n        this.subject = subject;\r\n        this.observer = observer;\r\n    }\r\n    SubjectSubscription.prototype.dispose = function () {\r\n        var index = this.subject.observers.indexOf(this.observer);\r\n        if (index > -1) {\r\n            this.subject.observers.splice(index, 1);\r\n        }\r\n        if (this.subject.observers.length === 0 && this.subject.cancelCallback) {\r\n            this.subject.cancelCallback().catch(function (_) { });\r\n        }\r\n    };\r\n    return SubjectSubscription;\r\n}());\r\nexports.SubjectSubscription = SubjectSubscription;\r\n/** @private */\r\nvar ConsoleLogger = /** @class */ (function () {\r\n    function ConsoleLogger(minimumLogLevel) {\r\n        this.minimumLogLevel = minimumLogLevel;\r\n    }\r\n    ConsoleLogger.prototype.log = function (logLevel, message) {\r\n        if (logLevel >= this.minimumLogLevel) {\r\n            switch (logLevel) {\r\n                case ILogger_1.LogLevel.Critical:\r\n                case ILogger_1.LogLevel.Error:\r\n                    console.error(\"[\" + new Date().toISOString() + \"] \" + ILogger_1.LogLevel[logLevel] + \": \" + message);\r\n                    break;\r\n                case ILogger_1.LogLevel.Warning:\r\n                    console.warn(\"[\" + new Date().toISOString() + \"] \" + ILogger_1.LogLevel[logLevel] + \": \" + message);\r\n                    break;\r\n                case ILogger_1.LogLevel.Information:\r\n                    console.info(\"[\" + new Date().toISOString() + \"] \" + ILogger_1.LogLevel[logLevel] + \": \" + message);\r\n                    break;\r\n                default:\r\n                    // console.debug only goes to attached debuggers in Node, so we use console.log for Trace and Debug\r\n                    console.log(\"[\" + new Date().toISOString() + \"] \" + ILogger_1.LogLevel[logLevel] + \": \" + message);\r\n                    break;\r\n            }\r\n        }\r\n    };\r\n    return ConsoleLogger;\r\n}());\r\nexports.ConsoleLogger = ConsoleLogger;\r\n//# sourceMappingURL=Utils.js.map","\"use strict\";\r\n// Copyright (c) .NET Foundation. All rights reserved.\r\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\r\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\r\n    return new (P || (P = Promise))(function (resolve, reject) {\r\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n        function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\r\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n    });\r\n};\r\nvar __generator = (this && this.__generator) || function (thisArg, body) {\r\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n    return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n    function verb(n) { return function (v) { return step([n, v]); }; }\r\n    function step(op) {\r\n        if (f) throw new TypeError(\"Generator is already executing.\");\r\n        while (_) try {\r\n            if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n            if (y = 0, t) op = [op[0] & 2, t.value];\r\n            switch (op[0]) {\r\n                case 0: case 1: t = op; break;\r\n                case 4: _.label++; return { value: op[1], done: false };\r\n                case 5: _.label++; y = op[1]; op = [0]; continue;\r\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n                default:\r\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n                    if (t[2]) _.ops.pop();\r\n                    _.trys.pop(); continue;\r\n            }\r\n            op = body.call(thisArg, _);\r\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n    }\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar ILogger_1 = require(\"./ILogger\");\r\nvar ITransport_1 = require(\"./ITransport\");\r\nvar Utils_1 = require(\"./Utils\");\r\n/** @private */\r\nvar WebSocketTransport = /** @class */ (function () {\r\n    function WebSocketTransport(httpClient, accessTokenFactory, logger, logMessageContent, webSocketConstructor) {\r\n        this.logger = logger;\r\n        this.accessTokenFactory = accessTokenFactory;\r\n        this.logMessageContent = logMessageContent;\r\n        this.webSocketConstructor = webSocketConstructor;\r\n        this.httpClient = httpClient;\r\n        this.onreceive = null;\r\n        this.onclose = null;\r\n    }\r\n    WebSocketTransport.prototype.connect = function (url, transferFormat) {\r\n        return __awaiter(this, void 0, void 0, function () {\r\n            var token;\r\n            var _this = this;\r\n            return __generator(this, function (_a) {\r\n                switch (_a.label) {\r\n                    case 0:\r\n                        Utils_1.Arg.isRequired(url, \"url\");\r\n                        Utils_1.Arg.isRequired(transferFormat, \"transferFormat\");\r\n                        Utils_1.Arg.isIn(transferFormat, ITransport_1.TransferFormat, \"transferFormat\");\r\n                        this.logger.log(ILogger_1.LogLevel.Trace, \"(WebSockets transport) Connecting.\");\r\n                        if (!this.accessTokenFactory) return [3 /*break*/, 2];\r\n                        return [4 /*yield*/, this.accessTokenFactory()];\r\n                    case 1:\r\n                        token = _a.sent();\r\n                        if (token) {\r\n                            url += (url.indexOf(\"?\") < 0 ? \"?\" : \"&\") + (\"access_token=\" + encodeURIComponent(token));\r\n                        }\r\n                        _a.label = 2;\r\n                    case 2: return [2 /*return*/, new Promise(function (resolve, reject) {\r\n                            url = url.replace(/^http/, \"ws\");\r\n                            var webSocket;\r\n                            var cookies = _this.httpClient.getCookieString(url);\r\n                            if (typeof window === \"undefined\" && cookies) {\r\n                                // Only pass cookies when in non-browser environments\r\n                                webSocket = new _this.webSocketConstructor(url, undefined, {\r\n                                    headers: {\r\n                                        Cookie: \"\" + cookies,\r\n                                    },\r\n                                });\r\n                            }\r\n                            if (!webSocket) {\r\n                                // Chrome is not happy with passing 'undefined' as protocol\r\n                                webSocket = new _this.webSocketConstructor(url);\r\n                            }\r\n                            if (transferFormat === ITransport_1.TransferFormat.Binary) {\r\n                                webSocket.binaryType = \"arraybuffer\";\r\n                            }\r\n                            // tslint:disable-next-line:variable-name\r\n                            webSocket.onopen = function (_event) {\r\n                                _this.logger.log(ILogger_1.LogLevel.Information, \"WebSocket connected to \" + url + \".\");\r\n                                _this.webSocket = webSocket;\r\n                                resolve();\r\n                            };\r\n                            webSocket.onerror = function (event) {\r\n                                var error = null;\r\n                                // ErrorEvent is a browser only type we need to check if the type exists before using it\r\n                                if (typeof ErrorEvent !== \"undefined\" && event instanceof ErrorEvent) {\r\n                                    error = event.error;\r\n                                }\r\n                                reject(error);\r\n                            };\r\n                            webSocket.onmessage = function (message) {\r\n                                _this.logger.log(ILogger_1.LogLevel.Trace, \"(WebSockets transport) data received. \" + Utils_1.getDataDetail(message.data, _this.logMessageContent) + \".\");\r\n                                if (_this.onreceive) {\r\n                                    _this.onreceive(message.data);\r\n                                }\r\n                            };\r\n                            webSocket.onclose = function (event) { return _this.close(event); };\r\n                        })];\r\n                }\r\n            });\r\n        });\r\n    };\r\n    WebSocketTransport.prototype.send = function (data) {\r\n        if (this.webSocket && this.webSocket.readyState === this.webSocketConstructor.OPEN) {\r\n            this.logger.log(ILogger_1.LogLevel.Trace, \"(WebSockets transport) sending data. \" + Utils_1.getDataDetail(data, this.logMessageContent) + \".\");\r\n            this.webSocket.send(data);\r\n            return Promise.resolve();\r\n        }\r\n        return Promise.reject(\"WebSocket is not in the OPEN state\");\r\n    };\r\n    WebSocketTransport.prototype.stop = function () {\r\n        if (this.webSocket) {\r\n            // Clear websocket handlers because we are considering the socket closed now\r\n            this.webSocket.onclose = function () { };\r\n            this.webSocket.onmessage = function () { };\r\n            this.webSocket.onerror = function () { };\r\n            this.webSocket.close();\r\n            this.webSocket = undefined;\r\n            // Manually invoke onclose callback inline so we know the HttpConnection was closed properly before returning\r\n            // This also solves an issue where websocket.onclose could take 18+ seconds to trigger during network disconnects\r\n            this.close(undefined);\r\n        }\r\n        return Promise.resolve();\r\n    };\r\n    WebSocketTransport.prototype.close = function (event) {\r\n        // webSocket will be null if the transport did not start successfully\r\n        this.logger.log(ILogger_1.LogLevel.Trace, \"(WebSockets transport) socket closed.\");\r\n        if (this.onclose) {\r\n            if (event && (event.wasClean === false || event.code !== 1000)) {\r\n                this.onclose(new Error(\"WebSocket closed with status code: \" + event.code + \" (\" + event.reason + \").\"));\r\n            }\r\n            else {\r\n                this.onclose();\r\n            }\r\n        }\r\n    };\r\n    return WebSocketTransport;\r\n}());\r\nexports.WebSocketTransport = WebSocketTransport;\r\n//# sourceMappingURL=WebSocketTransport.js.map","\"use strict\";\r\n// Copyright (c) .NET Foundation. All rights reserved.\r\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\r\nvar __extends = (this && this.__extends) || (function () {\r\n    var extendStatics = Object.setPrototypeOf ||\r\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n    return function (d, b) {\r\n        extendStatics(d, b);\r\n        function __() { this.constructor = d; }\r\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n    };\r\n})();\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar Errors_1 = require(\"./Errors\");\r\nvar HttpClient_1 = require(\"./HttpClient\");\r\nvar ILogger_1 = require(\"./ILogger\");\r\nvar XhrHttpClient = /** @class */ (function (_super) {\r\n    __extends(XhrHttpClient, _super);\r\n    function XhrHttpClient(logger) {\r\n        var _this = _super.call(this) || this;\r\n        _this.logger = logger;\r\n        return _this;\r\n    }\r\n    /** @inheritDoc */\r\n    XhrHttpClient.prototype.send = function (request) {\r\n        var _this = this;\r\n        // Check that abort was not signaled before calling send\r\n        if (request.abortSignal && request.abortSignal.aborted) {\r\n            return Promise.reject(new Errors_1.AbortError());\r\n        }\r\n        if (!request.method) {\r\n            return Promise.reject(new Error(\"No method defined.\"));\r\n        }\r\n        if (!request.url) {\r\n            return Promise.reject(new Error(\"No url defined.\"));\r\n        }\r\n        return new Promise(function (resolve, reject) {\r\n            var xhr = new XMLHttpRequest();\r\n            xhr.open(request.method, request.url, true);\r\n            xhr.withCredentials = true;\r\n            xhr.setRequestHeader(\"X-Requested-With\", \"XMLHttpRequest\");\r\n            // Explicitly setting the Content-Type header for React Native on Android platform.\r\n            xhr.setRequestHeader(\"Content-Type\", \"text/plain;charset=UTF-8\");\r\n            var headers = request.headers;\r\n            if (headers) {\r\n                Object.keys(headers)\r\n                    .forEach(function (header) {\r\n                    xhr.setRequestHeader(header, headers[header]);\r\n                });\r\n            }\r\n            if (request.responseType) {\r\n                xhr.responseType = request.responseType;\r\n            }\r\n            if (request.abortSignal) {\r\n                request.abortSignal.onabort = function () {\r\n                    xhr.abort();\r\n                    reject(new Errors_1.AbortError());\r\n                };\r\n            }\r\n            if (request.timeout) {\r\n                xhr.timeout = request.timeout;\r\n            }\r\n            xhr.onload = function () {\r\n                if (request.abortSignal) {\r\n                    request.abortSignal.onabort = null;\r\n                }\r\n                if (xhr.status >= 200 && xhr.status < 300) {\r\n                    resolve(new HttpClient_1.HttpResponse(xhr.status, xhr.statusText, xhr.response || xhr.responseText));\r\n                }\r\n                else {\r\n                    reject(new Errors_1.HttpError(xhr.statusText, xhr.status));\r\n                }\r\n            };\r\n            xhr.onerror = function () {\r\n                _this.logger.log(ILogger_1.LogLevel.Warning, \"Error from HTTP request. \" + xhr.status + \": \" + xhr.statusText + \".\");\r\n                reject(new Errors_1.HttpError(xhr.statusText, xhr.status));\r\n            };\r\n            xhr.ontimeout = function () {\r\n                _this.logger.log(ILogger_1.LogLevel.Warning, \"Timeout from HTTP request.\");\r\n                reject(new Errors_1.TimeoutError());\r\n            };\r\n            xhr.send(request.content || \"\");\r\n        });\r\n    };\r\n    return XhrHttpClient;\r\n}(HttpClient_1.HttpClient));\r\nexports.XhrHttpClient = XhrHttpClient;\r\n//# sourceMappingURL=XhrHttpClient.js.map","\"use strict\";\r\n// Copyright (c) .NET Foundation. All rights reserved.\r\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\n// Version token that will be replaced by the prepack command\r\n/** The version of the SignalR client. */\r\nexports.VERSION = \"1.1.4\";\r\nvar Errors_1 = require(\"./Errors\");\r\nexports.AbortError = Errors_1.AbortError;\r\nexports.HttpError = Errors_1.HttpError;\r\nexports.TimeoutError = Errors_1.TimeoutError;\r\nvar HttpClient_1 = require(\"./HttpClient\");\r\nexports.HttpClient = HttpClient_1.HttpClient;\r\nexports.HttpResponse = HttpClient_1.HttpResponse;\r\nvar DefaultHttpClient_1 = require(\"./DefaultHttpClient\");\r\nexports.DefaultHttpClient = DefaultHttpClient_1.DefaultHttpClient;\r\nvar HubConnection_1 = require(\"./HubConnection\");\r\nexports.HubConnection = HubConnection_1.HubConnection;\r\nexports.HubConnectionState = HubConnection_1.HubConnectionState;\r\nvar HubConnectionBuilder_1 = require(\"./HubConnectionBuilder\");\r\nexports.HubConnectionBuilder = HubConnectionBuilder_1.HubConnectionBuilder;\r\nvar IHubProtocol_1 = require(\"./IHubProtocol\");\r\nexports.MessageType = IHubProtocol_1.MessageType;\r\nvar ILogger_1 = require(\"./ILogger\");\r\nexports.LogLevel = ILogger_1.LogLevel;\r\nvar ITransport_1 = require(\"./ITransport\");\r\nexports.HttpTransportType = ITransport_1.HttpTransportType;\r\nexports.TransferFormat = ITransport_1.TransferFormat;\r\nvar Loggers_1 = require(\"./Loggers\");\r\nexports.NullLogger = Loggers_1.NullLogger;\r\nvar JsonHubProtocol_1 = require(\"./JsonHubProtocol\");\r\nexports.JsonHubProtocol = JsonHubProtocol_1.JsonHubProtocol;\r\n//# sourceMappingURL=index.js.map","\"use strict\";\n\nrequire(\"./noConflict\");\n\nvar _global = _interopRequireDefault(require(\"core-js/library/fn/global\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nif (_global[\"default\"]._babelPolyfill && typeof console !== \"undefined\" && console.warn) {\n  console.warn(\"@babel/polyfill is loaded more than once on this page. This is probably not desirable/intended \" + \"and may have consequences if different versions of the polyfills are applied sequentially. \" + \"If you do need to load the polyfill more than once, use @babel/polyfill/noConflict \" + \"instead to bypass the warning.\");\n}\n\n_global[\"default\"]._babelPolyfill = true;","\"use strict\";\n\nrequire(\"core-js/es6\");\n\nrequire(\"core-js/fn/array/includes\");\n\nrequire(\"core-js/fn/array/flat-map\");\n\nrequire(\"core-js/fn/string/pad-start\");\n\nrequire(\"core-js/fn/string/pad-end\");\n\nrequire(\"core-js/fn/string/trim-start\");\n\nrequire(\"core-js/fn/string/trim-end\");\n\nrequire(\"core-js/fn/symbol/async-iterator\");\n\nrequire(\"core-js/fn/object/get-own-property-descriptors\");\n\nrequire(\"core-js/fn/object/values\");\n\nrequire(\"core-js/fn/object/entries\");\n\nrequire(\"core-js/fn/promise/finally\");\n\nrequire(\"core-js/web\");\n\nrequire(\"regenerator-runtime/runtime\");","/**\n * @license AngularJS v1.5.8\n * (c) 2010-2016 Google, Inc. http://angularjs.org\n * License: MIT\n */\n(function(window, angular) {'use strict';\n\nvar ELEMENT_NODE = 1;\nvar COMMENT_NODE = 8;\n\nvar ADD_CLASS_SUFFIX = '-add';\nvar REMOVE_CLASS_SUFFIX = '-remove';\nvar EVENT_CLASS_PREFIX = 'ng-';\nvar ACTIVE_CLASS_SUFFIX = '-active';\nvar PREPARE_CLASS_SUFFIX = '-prepare';\n\nvar NG_ANIMATE_CLASSNAME = 'ng-animate';\nvar NG_ANIMATE_CHILDREN_DATA = '$$ngAnimateChildren';\n\n// Detect proper transitionend/animationend event names.\nvar CSS_PREFIX = '', TRANSITION_PROP, TRANSITIONEND_EVENT, ANIMATION_PROP, ANIMATIONEND_EVENT;\n\n// If unprefixed events are not supported but webkit-prefixed are, use the latter.\n// Otherwise, just use W3C names, browsers not supporting them at all will just ignore them.\n// Note: Chrome implements `window.onwebkitanimationend` and doesn't implement `window.onanimationend`\n// but at the same time dispatches the `animationend` event and not `webkitAnimationEnd`.\n// Register both events in case `window.onanimationend` is not supported because of that,\n// do the same for `transitionend` as Safari is likely to exhibit similar behavior.\n// Also, the only modern browser that uses vendor prefixes for transitions/keyframes is webkit\n// therefore there is no reason to test anymore for other vendor prefixes:\n// http://caniuse.com/#search=transition\nif ((window.ontransitionend === void 0) && (window.onwebkittransitionend !== void 0)) {\n  CSS_PREFIX = '-webkit-';\n  TRANSITION_PROP = 'WebkitTransition';\n  TRANSITIONEND_EVENT = 'webkitTransitionEnd transitionend';\n} else {\n  TRANSITION_PROP = 'transition';\n  TRANSITIONEND_EVENT = 'transitionend';\n}\n\nif ((window.onanimationend === void 0) && (window.onwebkitanimationend !== void 0)) {\n  CSS_PREFIX = '-webkit-';\n  ANIMATION_PROP = 'WebkitAnimation';\n  ANIMATIONEND_EVENT = 'webkitAnimationEnd animationend';\n} else {\n  ANIMATION_PROP = 'animation';\n  ANIMATIONEND_EVENT = 'animationend';\n}\n\nvar DURATION_KEY = 'Duration';\nvar PROPERTY_KEY = 'Property';\nvar DELAY_KEY = 'Delay';\nvar TIMING_KEY = 'TimingFunction';\nvar ANIMATION_ITERATION_COUNT_KEY = 'IterationCount';\nvar ANIMATION_PLAYSTATE_KEY = 'PlayState';\nvar SAFE_FAST_FORWARD_DURATION_VALUE = 9999;\n\nvar ANIMATION_DELAY_PROP = ANIMATION_PROP + DELAY_KEY;\nvar ANIMATION_DURATION_PROP = ANIMATION_PROP + DURATION_KEY;\nvar TRANSITION_DELAY_PROP = TRANSITION_PROP + DELAY_KEY;\nvar TRANSITION_DURATION_PROP = TRANSITION_PROP + DURATION_KEY;\n\nvar ngMinErr = angular.$$minErr('ng');\nfunction assertArg(arg, name, reason) {\n  if (!arg) {\n    throw ngMinErr('areq', \"Argument '{0}' is {1}\", (name || '?'), (reason || \"required\"));\n  }\n  return arg;\n}\n\nfunction mergeClasses(a,b) {\n  if (!a && !b) return '';\n  if (!a) return b;\n  if (!b) return a;\n  if (isArray(a)) a = a.join(' ');\n  if (isArray(b)) b = b.join(' ');\n  return a + ' ' + b;\n}\n\nfunction packageStyles(options) {\n  var styles = {};\n  if (options && (options.to || options.from)) {\n    styles.to = options.to;\n    styles.from = options.from;\n  }\n  return styles;\n}\n\nfunction pendClasses(classes, fix, isPrefix) {\n  var className = '';\n  classes = isArray(classes)\n      ? classes\n      : classes && isString(classes) && classes.length\n          ? classes.split(/\\s+/)\n          : [];\n  forEach(classes, function(klass, i) {\n    if (klass && klass.length > 0) {\n      className += (i > 0) ? ' ' : '';\n      className += isPrefix ? fix + klass\n                            : klass + fix;\n    }\n  });\n  return className;\n}\n\nfunction removeFromArray(arr, val) {\n  var index = arr.indexOf(val);\n  if (val >= 0) {\n    arr.splice(index, 1);\n  }\n}\n\nfunction stripCommentsFromElement(element) {\n  if (element instanceof jqLite) {\n    switch (element.length) {\n      case 0:\n        return element;\n\n      case 1:\n        // there is no point of stripping anything if the element\n        // is the only element within the jqLite wrapper.\n        // (it's important that we retain the element instance.)\n        if (element[0].nodeType === ELEMENT_NODE) {\n          return element;\n        }\n        break;\n\n      default:\n        return jqLite(extractElementNode(element));\n    }\n  }\n\n  if (element.nodeType === ELEMENT_NODE) {\n    return jqLite(element);\n  }\n}\n\nfunction extractElementNode(element) {\n  if (!element[0]) return element;\n  for (var i = 0; i < element.length; i++) {\n    var elm = element[i];\n    if (elm.nodeType == ELEMENT_NODE) {\n      return elm;\n    }\n  }\n}\n\nfunction $$addClass($$jqLite, element, className) {\n  forEach(element, function(elm) {\n    $$jqLite.addClass(elm, className);\n  });\n}\n\nfunction $$removeClass($$jqLite, element, className) {\n  forEach(element, function(elm) {\n    $$jqLite.removeClass(elm, className);\n  });\n}\n\nfunction applyAnimationClassesFactory($$jqLite) {\n  return function(element, options) {\n    if (options.addClass) {\n      $$addClass($$jqLite, element, options.addClass);\n      options.addClass = null;\n    }\n    if (options.removeClass) {\n      $$removeClass($$jqLite, element, options.removeClass);\n      options.removeClass = null;\n    }\n  };\n}\n\nfunction prepareAnimationOptions(options) {\n  options = options || {};\n  if (!options.$$prepared) {\n    var domOperation = options.domOperation || noop;\n    options.domOperation = function() {\n      options.$$domOperationFired = true;\n      domOperation();\n      domOperation = noop;\n    };\n    options.$$prepared = true;\n  }\n  return options;\n}\n\nfunction applyAnimationStyles(element, options) {\n  applyAnimationFromStyles(element, options);\n  applyAnimationToStyles(element, options);\n}\n\nfunction applyAnimationFromStyles(element, options) {\n  if (options.from) {\n    element.css(options.from);\n    options.from = null;\n  }\n}\n\nfunction applyAnimationToStyles(element, options) {\n  if (options.to) {\n    element.css(options.to);\n    options.to = null;\n  }\n}\n\nfunction mergeAnimationDetails(element, oldAnimation, newAnimation) {\n  var target = oldAnimation.options || {};\n  var newOptions = newAnimation.options || {};\n\n  var toAdd = (target.addClass || '') + ' ' + (newOptions.addClass || '');\n  var toRemove = (target.removeClass || '') + ' ' + (newOptions.removeClass || '');\n  var classes = resolveElementClasses(element.attr('class'), toAdd, toRemove);\n\n  if (newOptions.preparationClasses) {\n    target.preparationClasses = concatWithSpace(newOptions.preparationClasses, target.preparationClasses);\n    delete newOptions.preparationClasses;\n  }\n\n  // noop is basically when there is no callback; otherwise something has been set\n  var realDomOperation = target.domOperation !== noop ? target.domOperation : null;\n\n  extend(target, newOptions);\n\n  // TODO(matsko or sreeramu): proper fix is to maintain all animation callback in array and call at last,but now only leave has the callback so no issue with this.\n  if (realDomOperation) {\n    target.domOperation = realDomOperation;\n  }\n\n  if (classes.addClass) {\n    target.addClass = classes.addClass;\n  } else {\n    target.addClass = null;\n  }\n\n  if (classes.removeClass) {\n    target.removeClass = classes.removeClass;\n  } else {\n    target.removeClass = null;\n  }\n\n  oldAnimation.addClass = target.addClass;\n  oldAnimation.removeClass = target.removeClass;\n\n  return target;\n}\n\nfunction resolveElementClasses(existing, toAdd, toRemove) {\n  var ADD_CLASS = 1;\n  var REMOVE_CLASS = -1;\n\n  var flags = {};\n  existing = splitClassesToLookup(existing);\n\n  toAdd = splitClassesToLookup(toAdd);\n  forEach(toAdd, function(value, key) {\n    flags[key] = ADD_CLASS;\n  });\n\n  toRemove = splitClassesToLookup(toRemove);\n  forEach(toRemove, function(value, key) {\n    flags[key] = flags[key] === ADD_CLASS ? null : REMOVE_CLASS;\n  });\n\n  var classes = {\n    addClass: '',\n    removeClass: ''\n  };\n\n  forEach(flags, function(val, klass) {\n    var prop, allow;\n    if (val === ADD_CLASS) {\n      prop = 'addClass';\n      allow = !existing[klass] || existing[klass + REMOVE_CLASS_SUFFIX];\n    } else if (val === REMOVE_CLASS) {\n      prop = 'removeClass';\n      allow = existing[klass] || existing[klass + ADD_CLASS_SUFFIX];\n    }\n    if (allow) {\n      if (classes[prop].length) {\n        classes[prop] += ' ';\n      }\n      classes[prop] += klass;\n    }\n  });\n\n  function splitClassesToLookup(classes) {\n    if (isString(classes)) {\n      classes = classes.split(' ');\n    }\n\n    var obj = {};\n    forEach(classes, function(klass) {\n      // sometimes the split leaves empty string values\n      // incase extra spaces were applied to the options\n      if (klass.length) {\n        obj[klass] = true;\n      }\n    });\n    return obj;\n  }\n\n  return classes;\n}\n\nfunction getDomNode(element) {\n  return (element instanceof jqLite) ? element[0] : element;\n}\n\nfunction applyGeneratedPreparationClasses(element, event, options) {\n  var classes = '';\n  if (event) {\n    classes = pendClasses(event, EVENT_CLASS_PREFIX, true);\n  }\n  if (options.addClass) {\n    classes = concatWithSpace(classes, pendClasses(options.addClass, ADD_CLASS_SUFFIX));\n  }\n  if (options.removeClass) {\n    classes = concatWithSpace(classes, pendClasses(options.removeClass, REMOVE_CLASS_SUFFIX));\n  }\n  if (classes.length) {\n    options.preparationClasses = classes;\n    element.addClass(classes);\n  }\n}\n\nfunction clearGeneratedClasses(element, options) {\n  if (options.preparationClasses) {\n    element.removeClass(options.preparationClasses);\n    options.preparationClasses = null;\n  }\n  if (options.activeClasses) {\n    element.removeClass(options.activeClasses);\n    options.activeClasses = null;\n  }\n}\n\nfunction blockTransitions(node, duration) {\n  // we use a negative delay value since it performs blocking\n  // yet it doesn't kill any existing transitions running on the\n  // same element which makes this safe for class-based animations\n  var value = duration ? '-' + duration + 's' : '';\n  applyInlineStyle(node, [TRANSITION_DELAY_PROP, value]);\n  return [TRANSITION_DELAY_PROP, value];\n}\n\nfunction blockKeyframeAnimations(node, applyBlock) {\n  var value = applyBlock ? 'paused' : '';\n  var key = ANIMATION_PROP + ANIMATION_PLAYSTATE_KEY;\n  applyInlineStyle(node, [key, value]);\n  return [key, value];\n}\n\nfunction applyInlineStyle(node, styleTuple) {\n  var prop = styleTuple[0];\n  var value = styleTuple[1];\n  node.style[prop] = value;\n}\n\nfunction concatWithSpace(a,b) {\n  if (!a) return b;\n  if (!b) return a;\n  return a + ' ' + b;\n}\n\nvar $$rAFSchedulerFactory = ['$$rAF', function($$rAF) {\n  var queue, cancelFn;\n\n  function scheduler(tasks) {\n    // we make a copy since RAFScheduler mutates the state\n    // of the passed in array variable and this would be difficult\n    // to track down on the outside code\n    queue = queue.concat(tasks);\n    nextTick();\n  }\n\n  queue = scheduler.queue = [];\n\n  /* waitUntilQuiet does two things:\n   * 1. It will run the FINAL `fn` value only when an uncanceled RAF has passed through\n   * 2. It will delay the next wave of tasks from running until the quiet `fn` has run.\n   *\n   * The motivation here is that animation code can request more time from the scheduler\n   * before the next wave runs. This allows for certain DOM properties such as classes to\n   * be resolved in time for the next animation to run.\n   */\n  scheduler.waitUntilQuiet = function(fn) {\n    if (cancelFn) cancelFn();\n\n    cancelFn = $$rAF(function() {\n      cancelFn = null;\n      fn();\n      nextTick();\n    });\n  };\n\n  return scheduler;\n\n  function nextTick() {\n    if (!queue.length) return;\n\n    var items = queue.shift();\n    for (var i = 0; i < items.length; i++) {\n      items[i]();\n    }\n\n    if (!cancelFn) {\n      $$rAF(function() {\n        if (!cancelFn) nextTick();\n      });\n    }\n  }\n}];\n\n/**\n * @ngdoc directive\n * @name ngAnimateChildren\n * @restrict AE\n * @element ANY\n *\n * @description\n *\n * ngAnimateChildren allows you to specify that children of this element should animate even if any\n * of the children's parents are currently animating. By default, when an element has an active `enter`, `leave`, or `move`\n * (structural) animation, child elements that also have an active structural animation are not animated.\n *\n * Note that even if `ngAnimteChildren` is set, no child animations will run when the parent element is removed from the DOM (`leave` animation).\n *\n *\n * @param {string} ngAnimateChildren If the value is empty, `true` or `on`,\n *     then child animations are allowed. If the value is `false`, child animations are not allowed.\n *\n * @example\n * <example module=\"ngAnimateChildren\" name=\"ngAnimateChildren\" deps=\"angular-animate.js\" animations=\"true\">\n     <file name=\"index.html\">\n       <div ng-controller=\"mainController as main\">\n         <label>Show container? <input type=\"checkbox\" ng-model=\"main.enterElement\" /></label>\n         <label>Animate children? <input type=\"checkbox\" ng-model=\"main.animateChildren\" /></label>\n         <hr>\n         <div ng-animate-children=\"{{main.animateChildren}}\">\n           <div ng-if=\"main.enterElement\" class=\"container\">\n             List of items:\n             <div ng-repeat=\"item in [0, 1, 2, 3]\" class=\"item\">Item {{item}}</div>\n           </div>\n         </div>\n       </div>\n     </file>\n     <file name=\"animations.css\">\n\n      .container.ng-enter,\n      .container.ng-leave {\n        transition: all ease 1.5s;\n      }\n\n      .container.ng-enter,\n      .container.ng-leave-active {\n        opacity: 0;\n      }\n\n      .container.ng-leave,\n      .container.ng-enter-active {\n        opacity: 1;\n      }\n\n      .item {\n        background: firebrick;\n        color: #FFF;\n        margin-bottom: 10px;\n      }\n\n      .item.ng-enter,\n      .item.ng-leave {\n        transition: transform 1.5s ease;\n      }\n\n      .item.ng-enter {\n        transform: translateX(50px);\n      }\n\n      .item.ng-enter-active {\n        transform: translateX(0);\n      }\n    </file>\n    <file name=\"script.js\">\n      angular.module('ngAnimateChildren', ['ngAnimate'])\n        .controller('mainController', function() {\n          this.animateChildren = false;\n          this.enterElement = false;\n        });\n    </file>\n  </example>\n */\nvar $$AnimateChildrenDirective = ['$interpolate', function($interpolate) {\n  return {\n    link: function(scope, element, attrs) {\n      var val = attrs.ngAnimateChildren;\n      if (isString(val) && val.length === 0) { //empty attribute\n        element.data(NG_ANIMATE_CHILDREN_DATA, true);\n      } else {\n        // Interpolate and set the value, so that it is available to\n        // animations that run right after compilation\n        setData($interpolate(val)(scope));\n        attrs.$observe('ngAnimateChildren', setData);\n      }\n\n      function setData(value) {\n        value = value === 'on' || value === 'true';\n        element.data(NG_ANIMATE_CHILDREN_DATA, value);\n      }\n    }\n  };\n}];\n\nvar ANIMATE_TIMER_KEY = '$$animateCss';\n\n/**\n * @ngdoc service\n * @name $animateCss\n * @kind object\n *\n * @description\n * The `$animateCss` service is a useful utility to trigger customized CSS-based transitions/keyframes\n * from a JavaScript-based animation or directly from a directive. The purpose of `$animateCss` is NOT\n * to side-step how `$animate` and ngAnimate work, but the goal is to allow pre-existing animations or\n * directives to create more complex animations that can be purely driven using CSS code.\n *\n * Note that only browsers that support CSS transitions and/or keyframe animations are capable of\n * rendering animations triggered via `$animateCss` (bad news for IE9 and lower).\n *\n * ## Usage\n * Once again, `$animateCss` is designed to be used inside of a registered JavaScript animation that\n * is powered by ngAnimate. It is possible to use `$animateCss` directly inside of a directive, however,\n * any automatic control over cancelling animations and/or preventing animations from being run on\n * child elements will not be handled by Angular. For this to work as expected, please use `$animate` to\n * trigger the animation and then setup a JavaScript animation that injects `$animateCss` to trigger\n * the CSS animation.\n *\n * The example below shows how we can create a folding animation on an element using `ng-if`:\n *\n * ```html\n * <!-- notice the `fold-animation` CSS class -->\n * <div ng-if=\"onOff\" class=\"fold-animation\">\n *   This element will go BOOM\n * </div>\n * <button ng-click=\"onOff=true\">Fold In</button>\n * ```\n *\n * Now we create the **JavaScript animation** that will trigger the CSS transition:\n *\n * ```js\n * ngModule.animation('.fold-animation', ['$animateCss', function($animateCss) {\n *   return {\n *     enter: function(element, doneFn) {\n *       var height = element[0].offsetHeight;\n *       return $animateCss(element, {\n *         from: { height:'0px' },\n *         to: { height:height + 'px' },\n *         duration: 1 // one second\n *       });\n *     }\n *   }\n * }]);\n * ```\n *\n * ## More Advanced Uses\n *\n * `$animateCss` is the underlying code that ngAnimate uses to power **CSS-based animations** behind the scenes. Therefore CSS hooks\n * like `.ng-EVENT`, `.ng-EVENT-active`, `.ng-EVENT-stagger` are all features that can be triggered using `$animateCss` via JavaScript code.\n *\n * This also means that just about any combination of adding classes, removing classes, setting styles, dynamically setting a keyframe animation,\n * applying a hardcoded duration or delay value, changing the animation easing or applying a stagger animation are all options that work with\n * `$animateCss`. The service itself is smart enough to figure out the combination of options and examine the element styling properties in order\n * to provide a working animation that will run in CSS.\n *\n * The example below showcases a more advanced version of the `.fold-animation` from the example above:\n *\n * ```js\n * ngModule.animation('.fold-animation', ['$animateCss', function($animateCss) {\n *   return {\n *     enter: function(element, doneFn) {\n *       var height = element[0].offsetHeight;\n *       return $animateCss(element, {\n *         addClass: 'red large-text pulse-twice',\n *         easing: 'ease-out',\n *         from: { height:'0px' },\n *         to: { height:height + 'px' },\n *         duration: 1 // one second\n *       });\n *     }\n *   }\n * }]);\n * ```\n *\n * Since we're adding/removing CSS classes then the CSS transition will also pick those up:\n *\n * ```css\n * /&#42; since a hardcoded duration value of 1 was provided in the JavaScript animation code,\n * the CSS classes below will be transitioned despite them being defined as regular CSS classes &#42;/\n * .red { background:red; }\n * .large-text { font-size:20px; }\n *\n * /&#42; we can also use a keyframe animation and $animateCss will make it work alongside the transition &#42;/\n * .pulse-twice {\n *   animation: 0.5s pulse linear 2;\n *   -webkit-animation: 0.5s pulse linear 2;\n * }\n *\n * @keyframes pulse {\n *   from { transform: scale(0.5); }\n *   to { transform: scale(1.5); }\n * }\n *\n * @-webkit-keyframes pulse {\n *   from { -webkit-transform: scale(0.5); }\n *   to { -webkit-transform: scale(1.5); }\n * }\n * ```\n *\n * Given this complex combination of CSS classes, styles and options, `$animateCss` will figure everything out and make the animation happen.\n *\n * ## How the Options are handled\n *\n * `$animateCss` is very versatile and intelligent when it comes to figuring out what configurations to apply to the element to ensure the animation\n * works with the options provided. Say for example we were adding a class that contained a keyframe value and we wanted to also animate some inline\n * styles using the `from` and `to` properties.\n *\n * ```js\n * var animator = $animateCss(element, {\n *   from: { background:'red' },\n *   to: { background:'blue' }\n * });\n * animator.start();\n * ```\n *\n * ```css\n * .rotating-animation {\n *   animation:0.5s rotate linear;\n *   -webkit-animation:0.5s rotate linear;\n * }\n *\n * @keyframes rotate {\n *   from { transform: rotate(0deg); }\n *   to { transform: rotate(360deg); }\n * }\n *\n * @-webkit-keyframes rotate {\n *   from { -webkit-transform: rotate(0deg); }\n *   to { -webkit-transform: rotate(360deg); }\n * }\n * ```\n *\n * The missing pieces here are that we do not have a transition set (within the CSS code nor within the `$animateCss` options) and the duration of the animation is\n * going to be detected from what the keyframe styles on the CSS class are. In this event, `$animateCss` will automatically create an inline transition\n * style matching the duration detected from the keyframe style (which is present in the CSS class that is being added) and then prepare both the transition\n * and keyframe animations to run in parallel on the element. Then when the animation is underway the provided `from` and `to` CSS styles will be applied\n * and spread across the transition and keyframe animation.\n *\n * ## What is returned\n *\n * `$animateCss` works in two stages: a preparation phase and an animation phase. Therefore when `$animateCss` is first called it will NOT actually\n * start the animation. All that is going on here is that the element is being prepared for the animation (which means that the generated CSS classes are\n * added and removed on the element). Once `$animateCss` is called it will return an object with the following properties:\n *\n * ```js\n * var animator = $animateCss(element, { ... });\n * ```\n *\n * Now what do the contents of our `animator` variable look like:\n *\n * ```js\n * {\n *   // starts the animation\n *   start: Function,\n *\n *   // ends (aborts) the animation\n *   end: Function\n * }\n * ```\n *\n * To actually start the animation we need to run `animation.start()` which will then return a promise that we can hook into to detect when the animation ends.\n * If we choose not to run the animation then we MUST run `animation.end()` to perform a cleanup on the element (since some CSS classes and styles may have been\n * applied to the element during the preparation phase). Note that all other properties such as duration, delay, transitions and keyframes are just properties\n * and that changing them will not reconfigure the parameters of the animation.\n *\n * ### runner.done() vs runner.then()\n * It is documented that `animation.start()` will return a promise object and this is true, however, there is also an additional method available on the\n * runner called `.done(callbackFn)`. The done method works the same as `.finally(callbackFn)`, however, it does **not trigger a digest to occur**.\n * Therefore, for performance reasons, it's always best to use `runner.done(callback)` instead of `runner.then()`, `runner.catch()` or `runner.finally()`\n * unless you really need a digest to kick off afterwards.\n *\n * Keep in mind that, to make this easier, ngAnimate has tweaked the JS animations API to recognize when a runner instance is returned from $animateCss\n * (so there is no need to call `runner.done(doneFn)` inside of your JavaScript animation code).\n * Check the {@link ngAnimate.$animateCss#usage animation code above} to see how this works.\n *\n * @param {DOMElement} element the element that will be animated\n * @param {object} options the animation-related options that will be applied during the animation\n *\n * * `event` - The DOM event (e.g. enter, leave, move). When used, a generated CSS class of `ng-EVENT` and `ng-EVENT-active` will be applied\n * to the element during the animation. Multiple events can be provided when spaces are used as a separator. (Note that this will not perform any DOM operation.)\n * * `structural` - Indicates that the `ng-` prefix will be added to the event class. Setting to `false` or omitting will turn `ng-EVENT` and\n * `ng-EVENT-active` in `EVENT` and `EVENT-active`. Unused if `event` is omitted.\n * * `easing` - The CSS easing value that will be applied to the transition or keyframe animation (or both).\n * * `transitionStyle` - The raw CSS transition style that will be used (e.g. `1s linear all`).\n * * `keyframeStyle` - The raw CSS keyframe animation style that will be used (e.g. `1s my_animation linear`).\n * * `from` - The starting CSS styles (a key/value object) that will be applied at the start of the animation.\n * * `to` - The ending CSS styles (a key/value object) that will be applied across the animation via a CSS transition.\n * * `addClass` - A space separated list of CSS classes that will be added to the element and spread across the animation.\n * * `removeClass` - A space separated list of CSS classes that will be removed from the element and spread across the animation.\n * * `duration` - A number value representing the total duration of the transition and/or keyframe (note that a value of 1 is 1000ms). If a value of `0`\n * is provided then the animation will be skipped entirely.\n * * `delay` - A number value representing the total delay of the transition and/or keyframe (note that a value of 1 is 1000ms). If a value of `true` is\n * used then whatever delay value is detected from the CSS classes will be mirrored on the elements styles (e.g. by setting delay true then the style value\n * of the element will be `transition-delay: DETECTED_VALUE`). Using `true` is useful when you want the CSS classes and inline styles to all share the same\n * CSS delay value.\n * * `stagger` - A numeric time value representing the delay between successively animated elements\n * ({@link ngAnimate#css-staggering-animations Click here to learn how CSS-based staggering works in ngAnimate.})\n * * `staggerIndex` - The numeric index representing the stagger item (e.g. a value of 5 is equal to the sixth item in the stagger; therefore when a\n *   `stagger` option value of `0.1` is used then there will be a stagger delay of `600ms`)\n * * `applyClassesEarly` - Whether or not the classes being added or removed will be used when detecting the animation. This is set by `$animate` when enter/leave/move animations are fired to ensure that the CSS classes are resolved in time. (Note that this will prevent any transitions from occurring on the classes being added and removed.)\n * * `cleanupStyles` - Whether or not the provided `from` and `to` styles will be removed once\n *    the animation is closed. This is useful for when the styles are used purely for the sake of\n *    the animation and do not have a lasting visual effect on the element (e.g. a collapse and open animation).\n *    By default this value is set to `false`.\n *\n * @return {object} an object with start and end methods and details about the animation.\n *\n * * `start` - The method to start the animation. This will return a `Promise` when called.\n * * `end` - This method will cancel the animation and remove all applied CSS classes and styles.\n */\nvar ONE_SECOND = 1000;\nvar BASE_TEN = 10;\n\nvar ELAPSED_TIME_MAX_DECIMAL_PLACES = 3;\nvar CLOSING_TIME_BUFFER = 1.5;\n\nvar DETECT_CSS_PROPERTIES = {\n  transitionDuration:      TRANSITION_DURATION_PROP,\n  transitionDelay:         TRANSITION_DELAY_PROP,\n  transitionProperty:      TRANSITION_PROP + PROPERTY_KEY,\n  animationDuration:       ANIMATION_DURATION_PROP,\n  animationDelay:          ANIMATION_DELAY_PROP,\n  animationIterationCount: ANIMATION_PROP + ANIMATION_ITERATION_COUNT_KEY\n};\n\nvar DETECT_STAGGER_CSS_PROPERTIES = {\n  transitionDuration:      TRANSITION_DURATION_PROP,\n  transitionDelay:         TRANSITION_DELAY_PROP,\n  animationDuration:       ANIMATION_DURATION_PROP,\n  animationDelay:          ANIMATION_DELAY_PROP\n};\n\nfunction getCssKeyframeDurationStyle(duration) {\n  return [ANIMATION_DURATION_PROP, duration + 's'];\n}\n\nfunction getCssDelayStyle(delay, isKeyframeAnimation) {\n  var prop = isKeyframeAnimation ? ANIMATION_DELAY_PROP : TRANSITION_DELAY_PROP;\n  return [prop, delay + 's'];\n}\n\nfunction computeCssStyles($window, element, properties) {\n  var styles = Object.create(null);\n  var detectedStyles = $window.getComputedStyle(element) || {};\n  forEach(properties, function(formalStyleName, actualStyleName) {\n    var val = detectedStyles[formalStyleName];\n    if (val) {\n      var c = val.charAt(0);\n\n      // only numerical-based values have a negative sign or digit as the first value\n      if (c === '-' || c === '+' || c >= 0) {\n        val = parseMaxTime(val);\n      }\n\n      // by setting this to null in the event that the delay is not set or is set directly as 0\n      // then we can still allow for negative values to be used later on and not mistake this\n      // value for being greater than any other negative value.\n      if (val === 0) {\n        val = null;\n      }\n      styles[actualStyleName] = val;\n    }\n  });\n\n  return styles;\n}\n\nfunction parseMaxTime(str) {\n  var maxValue = 0;\n  var values = str.split(/\\s*,\\s*/);\n  forEach(values, function(value) {\n    // it's always safe to consider only second values and omit `ms` values since\n    // getComputedStyle will always handle the conversion for us\n    if (value.charAt(value.length - 1) == 's') {\n      value = value.substring(0, value.length - 1);\n    }\n    value = parseFloat(value) || 0;\n    maxValue = maxValue ? Math.max(value, maxValue) : value;\n  });\n  return maxValue;\n}\n\nfunction truthyTimingValue(val) {\n  return val === 0 || val != null;\n}\n\nfunction getCssTransitionDurationStyle(duration, applyOnlyDuration) {\n  var style = TRANSITION_PROP;\n  var value = duration + 's';\n  if (applyOnlyDuration) {\n    style += DURATION_KEY;\n  } else {\n    value += ' linear all';\n  }\n  return [style, value];\n}\n\nfunction createLocalCacheLookup() {\n  var cache = Object.create(null);\n  return {\n    flush: function() {\n      cache = Object.create(null);\n    },\n\n    count: function(key) {\n      var entry = cache[key];\n      return entry ? entry.total : 0;\n    },\n\n    get: function(key) {\n      var entry = cache[key];\n      return entry && entry.value;\n    },\n\n    put: function(key, value) {\n      if (!cache[key]) {\n        cache[key] = { total: 1, value: value };\n      } else {\n        cache[key].total++;\n      }\n    }\n  };\n}\n\n// we do not reassign an already present style value since\n// if we detect the style property value again we may be\n// detecting styles that were added via the `from` styles.\n// We make use of `isDefined` here since an empty string\n// or null value (which is what getPropertyValue will return\n// for a non-existing style) will still be marked as a valid\n// value for the style (a falsy value implies that the style\n// is to be removed at the end of the animation). If we had a simple\n// \"OR\" statement then it would not be enough to catch that.\nfunction registerRestorableStyles(backup, node, properties) {\n  forEach(properties, function(prop) {\n    backup[prop] = isDefined(backup[prop])\n        ? backup[prop]\n        : node.style.getPropertyValue(prop);\n  });\n}\n\nvar $AnimateCssProvider = ['$animateProvider', function($animateProvider) {\n  var gcsLookup = createLocalCacheLookup();\n  var gcsStaggerLookup = createLocalCacheLookup();\n\n  this.$get = ['$window', '$$jqLite', '$$AnimateRunner', '$timeout',\n               '$$forceReflow', '$sniffer', '$$rAFScheduler', '$$animateQueue',\n       function($window,   $$jqLite,   $$AnimateRunner,   $timeout,\n                $$forceReflow,   $sniffer,   $$rAFScheduler, $$animateQueue) {\n\n    var applyAnimationClasses = applyAnimationClassesFactory($$jqLite);\n\n    var parentCounter = 0;\n    function gcsHashFn(node, extraClasses) {\n      var KEY = \"$$ngAnimateParentKey\";\n      var parentNode = node.parentNode;\n      var parentID = parentNode[KEY] || (parentNode[KEY] = ++parentCounter);\n      return parentID + '-' + node.getAttribute('class') + '-' + extraClasses;\n    }\n\n    function computeCachedCssStyles(node, className, cacheKey, properties) {\n      var timings = gcsLookup.get(cacheKey);\n\n      if (!timings) {\n        timings = computeCssStyles($window, node, properties);\n        if (timings.animationIterationCount === 'infinite') {\n          timings.animationIterationCount = 1;\n        }\n      }\n\n      // we keep putting this in multiple times even though the value and the cacheKey are the same\n      // because we're keeping an internal tally of how many duplicate animations are detected.\n      gcsLookup.put(cacheKey, timings);\n      return timings;\n    }\n\n    function computeCachedCssStaggerStyles(node, className, cacheKey, properties) {\n      var stagger;\n\n      // if we have one or more existing matches of matching elements\n      // containing the same parent + CSS styles (which is how cacheKey works)\n      // then staggering is possible\n      if (gcsLookup.count(cacheKey) > 0) {\n        stagger = gcsStaggerLookup.get(cacheKey);\n\n        if (!stagger) {\n          var staggerClassName = pendClasses(className, '-stagger');\n\n          $$jqLite.addClass(node, staggerClassName);\n\n          stagger = computeCssStyles($window, node, properties);\n\n          // force the conversion of a null value to zero incase not set\n          stagger.animationDuration = Math.max(stagger.animationDuration, 0);\n          stagger.transitionDuration = Math.max(stagger.transitionDuration, 0);\n\n          $$jqLite.removeClass(node, staggerClassName);\n\n          gcsStaggerLookup.put(cacheKey, stagger);\n        }\n      }\n\n      return stagger || {};\n    }\n\n    var cancelLastRAFRequest;\n    var rafWaitQueue = [];\n    function waitUntilQuiet(callback) {\n      rafWaitQueue.push(callback);\n      $$rAFScheduler.waitUntilQuiet(function() {\n        gcsLookup.flush();\n        gcsStaggerLookup.flush();\n\n        // DO NOT REMOVE THIS LINE OR REFACTOR OUT THE `pageWidth` variable.\n        // PLEASE EXAMINE THE `$$forceReflow` service to understand why.\n        var pageWidth = $$forceReflow();\n\n        // we use a for loop to ensure that if the queue is changed\n        // during this looping then it will consider new requests\n        for (var i = 0; i < rafWaitQueue.length; i++) {\n          rafWaitQueue[i](pageWidth);\n        }\n        rafWaitQueue.length = 0;\n      });\n    }\n\n    function computeTimings(node, className, cacheKey) {\n      var timings = computeCachedCssStyles(node, className, cacheKey, DETECT_CSS_PROPERTIES);\n      var aD = timings.animationDelay;\n      var tD = timings.transitionDelay;\n      timings.maxDelay = aD && tD\n          ? Math.max(aD, tD)\n          : (aD || tD);\n      timings.maxDuration = Math.max(\n          timings.animationDuration * timings.animationIterationCount,\n          timings.transitionDuration);\n\n      return timings;\n    }\n\n    return function init(element, initialOptions) {\n      // all of the animation functions should create\n      // a copy of the options data, however, if a\n      // parent service has already created a copy then\n      // we should stick to using that\n      var options = initialOptions || {};\n      if (!options.$$prepared) {\n        options = prepareAnimationOptions(copy(options));\n      }\n\n      var restoreStyles = {};\n      var node = getDomNode(element);\n      if (!node\n          || !node.parentNode\n          || !$$animateQueue.enabled()) {\n        return closeAndReturnNoopAnimator();\n      }\n\n      var temporaryStyles = [];\n      var classes = element.attr('class');\n      var styles = packageStyles(options);\n      var animationClosed;\n      var animationPaused;\n      var animationCompleted;\n      var runner;\n      var runnerHost;\n      var maxDelay;\n      var maxDelayTime;\n      var maxDuration;\n      var maxDurationTime;\n      var startTime;\n      var events = [];\n\n      if (options.duration === 0 || (!$sniffer.animations && !$sniffer.transitions)) {\n        return closeAndReturnNoopAnimator();\n      }\n\n      var method = options.event && isArray(options.event)\n            ? options.event.join(' ')\n            : options.event;\n\n      var isStructural = method && options.structural;\n      var structuralClassName = '';\n      var addRemoveClassName = '';\n\n      if (isStructural) {\n        structuralClassName = pendClasses(method, EVENT_CLASS_PREFIX, true);\n      } else if (method) {\n        structuralClassName = method;\n      }\n\n      if (options.addClass) {\n        addRemoveClassName += pendClasses(options.addClass, ADD_CLASS_SUFFIX);\n      }\n\n      if (options.removeClass) {\n        if (addRemoveClassName.length) {\n          addRemoveClassName += ' ';\n        }\n        addRemoveClassName += pendClasses(options.removeClass, REMOVE_CLASS_SUFFIX);\n      }\n\n      // there may be a situation where a structural animation is combined together\n      // with CSS classes that need to resolve before the animation is computed.\n      // However this means that there is no explicit CSS code to block the animation\n      // from happening (by setting 0s none in the class name). If this is the case\n      // we need to apply the classes before the first rAF so we know to continue if\n      // there actually is a detected transition or keyframe animation\n      if (options.applyClassesEarly && addRemoveClassName.length) {\n        applyAnimationClasses(element, options);\n      }\n\n      var preparationClasses = [structuralClassName, addRemoveClassName].join(' ').trim();\n      var fullClassName = classes + ' ' + preparationClasses;\n      var activeClasses = pendClasses(preparationClasses, ACTIVE_CLASS_SUFFIX);\n      var hasToStyles = styles.to && Object.keys(styles.to).length > 0;\n      var containsKeyframeAnimation = (options.keyframeStyle || '').length > 0;\n\n      // there is no way we can trigger an animation if no styles and\n      // no classes are being applied which would then trigger a transition,\n      // unless there a is raw keyframe value that is applied to the element.\n      if (!containsKeyframeAnimation\n           && !hasToStyles\n           && !preparationClasses) {\n        return closeAndReturnNoopAnimator();\n      }\n\n      var cacheKey, stagger;\n      if (options.stagger > 0) {\n        var staggerVal = parseFloat(options.stagger);\n        stagger = {\n          transitionDelay: staggerVal,\n          animationDelay: staggerVal,\n          transitionDuration: 0,\n          animationDuration: 0\n        };\n      } else {\n        cacheKey = gcsHashFn(node, fullClassName);\n        stagger = computeCachedCssStaggerStyles(node, preparationClasses, cacheKey, DETECT_STAGGER_CSS_PROPERTIES);\n      }\n\n      if (!options.$$skipPreparationClasses) {\n        $$jqLite.addClass(element, preparationClasses);\n      }\n\n      var applyOnlyDuration;\n\n      if (options.transitionStyle) {\n        var transitionStyle = [TRANSITION_PROP, options.transitionStyle];\n        applyInlineStyle(node, transitionStyle);\n        temporaryStyles.push(transitionStyle);\n      }\n\n      if (options.duration >= 0) {\n        applyOnlyDuration = node.style[TRANSITION_PROP].length > 0;\n        var durationStyle = getCssTransitionDurationStyle(options.duration, applyOnlyDuration);\n\n        // we set the duration so that it will be picked up by getComputedStyle later\n        applyInlineStyle(node, durationStyle);\n        temporaryStyles.push(durationStyle);\n      }\n\n      if (options.keyframeStyle) {\n        var keyframeStyle = [ANIMATION_PROP, options.keyframeStyle];\n        applyInlineStyle(node, keyframeStyle);\n        temporaryStyles.push(keyframeStyle);\n      }\n\n      var itemIndex = stagger\n          ? options.staggerIndex >= 0\n              ? options.staggerIndex\n              : gcsLookup.count(cacheKey)\n          : 0;\n\n      var isFirst = itemIndex === 0;\n\n      // this is a pre-emptive way of forcing the setup classes to be added and applied INSTANTLY\n      // without causing any combination of transitions to kick in. By adding a negative delay value\n      // it forces the setup class' transition to end immediately. We later then remove the negative\n      // transition delay to allow for the transition to naturally do it's thing. The beauty here is\n      // that if there is no transition defined then nothing will happen and this will also allow\n      // other transitions to be stacked on top of each other without any chopping them out.\n      if (isFirst && !options.skipBlocking) {\n        blockTransitions(node, SAFE_FAST_FORWARD_DURATION_VALUE);\n      }\n\n      var timings = computeTimings(node, fullClassName, cacheKey);\n      var relativeDelay = timings.maxDelay;\n      maxDelay = Math.max(relativeDelay, 0);\n      maxDuration = timings.maxDuration;\n\n      var flags = {};\n      flags.hasTransitions          = timings.transitionDuration > 0;\n      flags.hasAnimations           = timings.animationDuration > 0;\n      flags.hasTransitionAll        = flags.hasTransitions && timings.transitionProperty == 'all';\n      flags.applyTransitionDuration = hasToStyles && (\n                                        (flags.hasTransitions && !flags.hasTransitionAll)\n                                         || (flags.hasAnimations && !flags.hasTransitions));\n      flags.applyAnimationDuration  = options.duration && flags.hasAnimations;\n      flags.applyTransitionDelay    = truthyTimingValue(options.delay) && (flags.applyTransitionDuration || flags.hasTransitions);\n      flags.applyAnimationDelay     = truthyTimingValue(options.delay) && flags.hasAnimations;\n      flags.recalculateTimingStyles = addRemoveClassName.length > 0;\n\n      if (flags.applyTransitionDuration || flags.applyAnimationDuration) {\n        maxDuration = options.duration ? parseFloat(options.duration) : maxDuration;\n\n        if (flags.applyTransitionDuration) {\n          flags.hasTransitions = true;\n          timings.transitionDuration = maxDuration;\n          applyOnlyDuration = node.style[TRANSITION_PROP + PROPERTY_KEY].length > 0;\n          temporaryStyles.push(getCssTransitionDurationStyle(maxDuration, applyOnlyDuration));\n        }\n\n        if (flags.applyAnimationDuration) {\n          flags.hasAnimations = true;\n          timings.animationDuration = maxDuration;\n          temporaryStyles.push(getCssKeyframeDurationStyle(maxDuration));\n        }\n      }\n\n      if (maxDuration === 0 && !flags.recalculateTimingStyles) {\n        return closeAndReturnNoopAnimator();\n      }\n\n      if (options.delay != null) {\n        var delayStyle;\n        if (typeof options.delay !== \"boolean\") {\n          delayStyle = parseFloat(options.delay);\n          // number in options.delay means we have to recalculate the delay for the closing timeout\n          maxDelay = Math.max(delayStyle, 0);\n        }\n\n        if (flags.applyTransitionDelay) {\n          temporaryStyles.push(getCssDelayStyle(delayStyle));\n        }\n\n        if (flags.applyAnimationDelay) {\n          temporaryStyles.push(getCssDelayStyle(delayStyle, true));\n        }\n      }\n\n      // we need to recalculate the delay value since we used a pre-emptive negative\n      // delay value and the delay value is required for the final event checking. This\n      // property will ensure that this will happen after the RAF phase has passed.\n      if (options.duration == null && timings.transitionDuration > 0) {\n        flags.recalculateTimingStyles = flags.recalculateTimingStyles || isFirst;\n      }\n\n      maxDelayTime = maxDelay * ONE_SECOND;\n      maxDurationTime = maxDuration * ONE_SECOND;\n      if (!options.skipBlocking) {\n        flags.blockTransition = timings.transitionDuration > 0;\n        flags.blockKeyframeAnimation = timings.animationDuration > 0 &&\n                                       stagger.animationDelay > 0 &&\n                                       stagger.animationDuration === 0;\n      }\n\n      if (options.from) {\n        if (options.cleanupStyles) {\n          registerRestorableStyles(restoreStyles, node, Object.keys(options.from));\n        }\n        applyAnimationFromStyles(element, options);\n      }\n\n      if (flags.blockTransition || flags.blockKeyframeAnimation) {\n        applyBlocking(maxDuration);\n      } else if (!options.skipBlocking) {\n        blockTransitions(node, false);\n      }\n\n      // TODO(matsko): for 1.5 change this code to have an animator object for better debugging\n      return {\n        $$willAnimate: true,\n        end: endFn,\n        start: function() {\n          if (animationClosed) return;\n\n          runnerHost = {\n            end: endFn,\n            cancel: cancelFn,\n            resume: null, //this will be set during the start() phase\n            pause: null\n          };\n\n          runner = new $$AnimateRunner(runnerHost);\n\n          waitUntilQuiet(start);\n\n          // we don't have access to pause/resume the animation\n          // since it hasn't run yet. AnimateRunner will therefore\n          // set noop functions for resume and pause and they will\n          // later be overridden once the animation is triggered\n          return runner;\n        }\n      };\n\n      function endFn() {\n        close();\n      }\n\n      function cancelFn() {\n        close(true);\n      }\n\n      function close(rejected) { // jshint ignore:line\n        // if the promise has been called already then we shouldn't close\n        // the animation again\n        if (animationClosed || (animationCompleted && animationPaused)) return;\n        animationClosed = true;\n        animationPaused = false;\n\n        if (!options.$$skipPreparationClasses) {\n          $$jqLite.removeClass(element, preparationClasses);\n        }\n        $$jqLite.removeClass(element, activeClasses);\n\n        blockKeyframeAnimations(node, false);\n        blockTransitions(node, false);\n\n        forEach(temporaryStyles, function(entry) {\n          // There is only one way to remove inline style properties entirely from elements.\n          // By using `removeProperty` this works, but we need to convert camel-cased CSS\n          // styles down to hyphenated values.\n          node.style[entry[0]] = '';\n        });\n\n        applyAnimationClasses(element, options);\n        applyAnimationStyles(element, options);\n\n        if (Object.keys(restoreStyles).length) {\n          forEach(restoreStyles, function(value, prop) {\n            value ? node.style.setProperty(prop, value)\n                  : node.style.removeProperty(prop);\n          });\n        }\n\n        // the reason why we have this option is to allow a synchronous closing callback\n        // that is fired as SOON as the animation ends (when the CSS is removed) or if\n        // the animation never takes off at all. A good example is a leave animation since\n        // the element must be removed just after the animation is over or else the element\n        // will appear on screen for one animation frame causing an overbearing flicker.\n        if (options.onDone) {\n          options.onDone();\n        }\n\n        if (events && events.length) {\n          // Remove the transitionend / animationend listener(s)\n          element.off(events.join(' '), onAnimationProgress);\n        }\n\n        //Cancel the fallback closing timeout and remove the timer data\n        var animationTimerData = element.data(ANIMATE_TIMER_KEY);\n        if (animationTimerData) {\n          $timeout.cancel(animationTimerData[0].timer);\n          element.removeData(ANIMATE_TIMER_KEY);\n        }\n\n        // if the preparation function fails then the promise is not setup\n        if (runner) {\n          runner.complete(!rejected);\n        }\n      }\n\n      function applyBlocking(duration) {\n        if (flags.blockTransition) {\n          blockTransitions(node, duration);\n        }\n\n        if (flags.blockKeyframeAnimation) {\n          blockKeyframeAnimations(node, !!duration);\n        }\n      }\n\n      function closeAndReturnNoopAnimator() {\n        runner = new $$AnimateRunner({\n          end: endFn,\n          cancel: cancelFn\n        });\n\n        // should flush the cache animation\n        waitUntilQuiet(noop);\n        close();\n\n        return {\n          $$willAnimate: false,\n          start: function() {\n            return runner;\n          },\n          end: endFn\n        };\n      }\n\n      function onAnimationProgress(event) {\n        event.stopPropagation();\n        var ev = event.originalEvent || event;\n\n        // we now always use `Date.now()` due to the recent changes with\n        // event.timeStamp in Firefox, Webkit and Chrome (see #13494 for more info)\n        var timeStamp = ev.$manualTimeStamp || Date.now();\n\n        /* Firefox (or possibly just Gecko) likes to not round values up\n         * when a ms measurement is used for the animation */\n        var elapsedTime = parseFloat(ev.elapsedTime.toFixed(ELAPSED_TIME_MAX_DECIMAL_PLACES));\n\n        /* $manualTimeStamp is a mocked timeStamp value which is set\n         * within browserTrigger(). This is only here so that tests can\n         * mock animations properly. Real events fallback to event.timeStamp,\n         * or, if they don't, then a timeStamp is automatically created for them.\n         * We're checking to see if the timeStamp surpasses the expected delay,\n         * but we're using elapsedTime instead of the timeStamp on the 2nd\n         * pre-condition since animationPauseds sometimes close off early */\n        if (Math.max(timeStamp - startTime, 0) >= maxDelayTime && elapsedTime >= maxDuration) {\n          // we set this flag to ensure that if the transition is paused then, when resumed,\n          // the animation will automatically close itself since transitions cannot be paused.\n          animationCompleted = true;\n          close();\n        }\n      }\n\n      function start() {\n        if (animationClosed) return;\n        if (!node.parentNode) {\n          close();\n          return;\n        }\n\n        // even though we only pause keyframe animations here the pause flag\n        // will still happen when transitions are used. Only the transition will\n        // not be paused since that is not possible. If the animation ends when\n        // paused then it will not complete until unpaused or cancelled.\n        var playPause = function(playAnimation) {\n          if (!animationCompleted) {\n            animationPaused = !playAnimation;\n            if (timings.animationDuration) {\n              var value = blockKeyframeAnimations(node, animationPaused);\n              animationPaused\n                  ? temporaryStyles.push(value)\n                  : removeFromArray(temporaryStyles, value);\n            }\n          } else if (animationPaused && playAnimation) {\n            animationPaused = false;\n            close();\n          }\n        };\n\n        // checking the stagger duration prevents an accidentally cascade of the CSS delay style\n        // being inherited from the parent. If the transition duration is zero then we can safely\n        // rely that the delay value is an intentional stagger delay style.\n        var maxStagger = itemIndex > 0\n                         && ((timings.transitionDuration && stagger.transitionDuration === 0) ||\n                            (timings.animationDuration && stagger.animationDuration === 0))\n                         && Math.max(stagger.animationDelay, stagger.transitionDelay);\n        if (maxStagger) {\n          $timeout(triggerAnimationStart,\n                   Math.floor(maxStagger * itemIndex * ONE_SECOND),\n                   false);\n        } else {\n          triggerAnimationStart();\n        }\n\n        // this will decorate the existing promise runner with pause/resume methods\n        runnerHost.resume = function() {\n          playPause(true);\n        };\n\n        runnerHost.pause = function() {\n          playPause(false);\n        };\n\n        function triggerAnimationStart() {\n          // just incase a stagger animation kicks in when the animation\n          // itself was cancelled entirely\n          if (animationClosed) return;\n\n          applyBlocking(false);\n\n          forEach(temporaryStyles, function(entry) {\n            var key = entry[0];\n            var value = entry[1];\n            node.style[key] = value;\n          });\n\n          applyAnimationClasses(element, options);\n          $$jqLite.addClass(element, activeClasses);\n\n          if (flags.recalculateTimingStyles) {\n            fullClassName = node.className + ' ' + preparationClasses;\n            cacheKey = gcsHashFn(node, fullClassName);\n\n            timings = computeTimings(node, fullClassName, cacheKey);\n            relativeDelay = timings.maxDelay;\n            maxDelay = Math.max(relativeDelay, 0);\n            maxDuration = timings.maxDuration;\n\n            if (maxDuration === 0) {\n              close();\n              return;\n            }\n\n            flags.hasTransitions = timings.transitionDuration > 0;\n            flags.hasAnimations = timings.animationDuration > 0;\n          }\n\n          if (flags.applyAnimationDelay) {\n            relativeDelay = typeof options.delay !== \"boolean\" && truthyTimingValue(options.delay)\n                  ? parseFloat(options.delay)\n                  : relativeDelay;\n\n            maxDelay = Math.max(relativeDelay, 0);\n            timings.animationDelay = relativeDelay;\n            delayStyle = getCssDelayStyle(relativeDelay, true);\n            temporaryStyles.push(delayStyle);\n            node.style[delayStyle[0]] = delayStyle[1];\n          }\n\n          maxDelayTime = maxDelay * ONE_SECOND;\n          maxDurationTime = maxDuration * ONE_SECOND;\n\n          if (options.easing) {\n            var easeProp, easeVal = options.easing;\n            if (flags.hasTransitions) {\n              easeProp = TRANSITION_PROP + TIMING_KEY;\n              temporaryStyles.push([easeProp, easeVal]);\n              node.style[easeProp] = easeVal;\n            }\n            if (flags.hasAnimations) {\n              easeProp = ANIMATION_PROP + TIMING_KEY;\n              temporaryStyles.push([easeProp, easeVal]);\n              node.style[easeProp] = easeVal;\n            }\n          }\n\n          if (timings.transitionDuration) {\n            events.push(TRANSITIONEND_EVENT);\n          }\n\n          if (timings.animationDuration) {\n            events.push(ANIMATIONEND_EVENT);\n          }\n\n          startTime = Date.now();\n          var timerTime = maxDelayTime + CLOSING_TIME_BUFFER * maxDurationTime;\n          var endTime = startTime + timerTime;\n\n          var animationsData = element.data(ANIMATE_TIMER_KEY) || [];\n          var setupFallbackTimer = true;\n          if (animationsData.length) {\n            var currentTimerData = animationsData[0];\n            setupFallbackTimer = endTime > currentTimerData.expectedEndTime;\n            if (setupFallbackTimer) {\n              $timeout.cancel(currentTimerData.timer);\n            } else {\n              animationsData.push(close);\n            }\n          }\n\n          if (setupFallbackTimer) {\n            var timer = $timeout(onAnimationExpired, timerTime, false);\n            animationsData[0] = {\n              timer: timer,\n              expectedEndTime: endTime\n            };\n            animationsData.push(close);\n            element.data(ANIMATE_TIMER_KEY, animationsData);\n          }\n\n          if (events.length) {\n            element.on(events.join(' '), onAnimationProgress);\n          }\n\n          if (options.to) {\n            if (options.cleanupStyles) {\n              registerRestorableStyles(restoreStyles, node, Object.keys(options.to));\n            }\n            applyAnimationToStyles(element, options);\n          }\n        }\n\n        function onAnimationExpired() {\n          var animationsData = element.data(ANIMATE_TIMER_KEY);\n\n          // this will be false in the event that the element was\n          // removed from the DOM (via a leave animation or something\n          // similar)\n          if (animationsData) {\n            for (var i = 1; i < animationsData.length; i++) {\n              animationsData[i]();\n            }\n            element.removeData(ANIMATE_TIMER_KEY);\n          }\n        }\n      }\n    };\n  }];\n}];\n\nvar $$AnimateCssDriverProvider = ['$$animationProvider', function($$animationProvider) {\n  $$animationProvider.drivers.push('$$animateCssDriver');\n\n  var NG_ANIMATE_SHIM_CLASS_NAME = 'ng-animate-shim';\n  var NG_ANIMATE_ANCHOR_CLASS_NAME = 'ng-anchor';\n\n  var NG_OUT_ANCHOR_CLASS_NAME = 'ng-anchor-out';\n  var NG_IN_ANCHOR_CLASS_NAME = 'ng-anchor-in';\n\n  function isDocumentFragment(node) {\n    return node.parentNode && node.parentNode.nodeType === 11;\n  }\n\n  this.$get = ['$animateCss', '$rootScope', '$$AnimateRunner', '$rootElement', '$sniffer', '$$jqLite', '$document',\n       function($animateCss,   $rootScope,   $$AnimateRunner,   $rootElement,   $sniffer,   $$jqLite,   $document) {\n\n    // only browsers that support these properties can render animations\n    if (!$sniffer.animations && !$sniffer.transitions) return noop;\n\n    var bodyNode = $document[0].body;\n    var rootNode = getDomNode($rootElement);\n\n    var rootBodyElement = jqLite(\n      // this is to avoid using something that exists outside of the body\n      // we also special case the doc fragment case because our unit test code\n      // appends the $rootElement to the body after the app has been bootstrapped\n      isDocumentFragment(rootNode) || bodyNode.contains(rootNode) ? rootNode : bodyNode\n    );\n\n    var applyAnimationClasses = applyAnimationClassesFactory($$jqLite);\n\n    return function initDriverFn(animationDetails) {\n      return animationDetails.from && animationDetails.to\n          ? prepareFromToAnchorAnimation(animationDetails.from,\n                                         animationDetails.to,\n                                         animationDetails.classes,\n                                         animationDetails.anchors)\n          : prepareRegularAnimation(animationDetails);\n    };\n\n    function filterCssClasses(classes) {\n      //remove all the `ng-` stuff\n      return classes.replace(/\\bng-\\S+\\b/g, '');\n    }\n\n    function getUniqueValues(a, b) {\n      if (isString(a)) a = a.split(' ');\n      if (isString(b)) b = b.split(' ');\n      return a.filter(function(val) {\n        return b.indexOf(val) === -1;\n      }).join(' ');\n    }\n\n    function prepareAnchoredAnimation(classes, outAnchor, inAnchor) {\n      var clone = jqLite(getDomNode(outAnchor).cloneNode(true));\n      var startingClasses = filterCssClasses(getClassVal(clone));\n\n      outAnchor.addClass(NG_ANIMATE_SHIM_CLASS_NAME);\n      inAnchor.addClass(NG_ANIMATE_SHIM_CLASS_NAME);\n\n      clone.addClass(NG_ANIMATE_ANCHOR_CLASS_NAME);\n\n      rootBodyElement.append(clone);\n\n      var animatorIn, animatorOut = prepareOutAnimation();\n\n      // the user may not end up using the `out` animation and\n      // only making use of the `in` animation or vice-versa.\n      // In either case we should allow this and not assume the\n      // animation is over unless both animations are not used.\n      if (!animatorOut) {\n        animatorIn = prepareInAnimation();\n        if (!animatorIn) {\n          return end();\n        }\n      }\n\n      var startingAnimator = animatorOut || animatorIn;\n\n      return {\n        start: function() {\n          var runner;\n\n          var currentAnimation = startingAnimator.start();\n          currentAnimation.done(function() {\n            currentAnimation = null;\n            if (!animatorIn) {\n              animatorIn = prepareInAnimation();\n              if (animatorIn) {\n                currentAnimation = animatorIn.start();\n                currentAnimation.done(function() {\n                  currentAnimation = null;\n                  end();\n                  runner.complete();\n                });\n                return currentAnimation;\n              }\n            }\n            // in the event that there is no `in` animation\n            end();\n            runner.complete();\n          });\n\n          runner = new $$AnimateRunner({\n            end: endFn,\n            cancel: endFn\n          });\n\n          return runner;\n\n          function endFn() {\n            if (currentAnimation) {\n              currentAnimation.end();\n            }\n          }\n        }\n      };\n\n      function calculateAnchorStyles(anchor) {\n        var styles = {};\n\n        var coords = getDomNode(anchor).getBoundingClientRect();\n\n        // we iterate directly since safari messes up and doesn't return\n        // all the keys for the coords object when iterated\n        forEach(['width','height','top','left'], function(key) {\n          var value = coords[key];\n          switch (key) {\n            case 'top':\n              value += bodyNode.scrollTop;\n              break;\n            case 'left':\n              value += bodyNode.scrollLeft;\n              break;\n          }\n          styles[key] = Math.floor(value) + 'px';\n        });\n        return styles;\n      }\n\n      function prepareOutAnimation() {\n        var animator = $animateCss(clone, {\n          addClass: NG_OUT_ANCHOR_CLASS_NAME,\n          delay: true,\n          from: calculateAnchorStyles(outAnchor)\n        });\n\n        // read the comment within `prepareRegularAnimation` to understand\n        // why this check is necessary\n        return animator.$$willAnimate ? animator : null;\n      }\n\n      function getClassVal(element) {\n        return element.attr('class') || '';\n      }\n\n      function prepareInAnimation() {\n        var endingClasses = filterCssClasses(getClassVal(inAnchor));\n        var toAdd = getUniqueValues(endingClasses, startingClasses);\n        var toRemove = getUniqueValues(startingClasses, endingClasses);\n\n        var animator = $animateCss(clone, {\n          to: calculateAnchorStyles(inAnchor),\n          addClass: NG_IN_ANCHOR_CLASS_NAME + ' ' + toAdd,\n          removeClass: NG_OUT_ANCHOR_CLASS_NAME + ' ' + toRemove,\n          delay: true\n        });\n\n        // read the comment within `prepareRegularAnimation` to understand\n        // why this check is necessary\n        return animator.$$willAnimate ? animator : null;\n      }\n\n      function end() {\n        clone.remove();\n        outAnchor.removeClass(NG_ANIMATE_SHIM_CLASS_NAME);\n        inAnchor.removeClass(NG_ANIMATE_SHIM_CLASS_NAME);\n      }\n    }\n\n    function prepareFromToAnchorAnimation(from, to, classes, anchors) {\n      var fromAnimation = prepareRegularAnimation(from, noop);\n      var toAnimation = prepareRegularAnimation(to, noop);\n\n      var anchorAnimations = [];\n      forEach(anchors, function(anchor) {\n        var outElement = anchor['out'];\n        var inElement = anchor['in'];\n        var animator = prepareAnchoredAnimation(classes, outElement, inElement);\n        if (animator) {\n          anchorAnimations.push(animator);\n        }\n      });\n\n      // no point in doing anything when there are no elements to animate\n      if (!fromAnimation && !toAnimation && anchorAnimations.length === 0) return;\n\n      return {\n        start: function() {\n          var animationRunners = [];\n\n          if (fromAnimation) {\n            animationRunners.push(fromAnimation.start());\n          }\n\n          if (toAnimation) {\n            animationRunners.push(toAnimation.start());\n          }\n\n          forEach(anchorAnimations, function(animation) {\n            animationRunners.push(animation.start());\n          });\n\n          var runner = new $$AnimateRunner({\n            end: endFn,\n            cancel: endFn // CSS-driven animations cannot be cancelled, only ended\n          });\n\n          $$AnimateRunner.all(animationRunners, function(status) {\n            runner.complete(status);\n          });\n\n          return runner;\n\n          function endFn() {\n            forEach(animationRunners, function(runner) {\n              runner.end();\n            });\n          }\n        }\n      };\n    }\n\n    function prepareRegularAnimation(animationDetails) {\n      var element = animationDetails.element;\n      var options = animationDetails.options || {};\n\n      if (animationDetails.structural) {\n        options.event = animationDetails.event;\n        options.structural = true;\n        options.applyClassesEarly = true;\n\n        // we special case the leave animation since we want to ensure that\n        // the element is removed as soon as the animation is over. Otherwise\n        // a flicker might appear or the element may not be removed at all\n        if (animationDetails.event === 'leave') {\n          options.onDone = options.domOperation;\n        }\n      }\n\n      // We assign the preparationClasses as the actual animation event since\n      // the internals of $animateCss will just suffix the event token values\n      // with `-active` to trigger the animation.\n      if (options.preparationClasses) {\n        options.event = concatWithSpace(options.event, options.preparationClasses);\n      }\n\n      var animator = $animateCss(element, options);\n\n      // the driver lookup code inside of $$animation attempts to spawn a\n      // driver one by one until a driver returns a.$$willAnimate animator object.\n      // $animateCss will always return an object, however, it will pass in\n      // a flag as a hint as to whether an animation was detected or not\n      return animator.$$willAnimate ? animator : null;\n    }\n  }];\n}];\n\n// TODO(matsko): use caching here to speed things up for detection\n// TODO(matsko): add documentation\n//  by the time...\n\nvar $$AnimateJsProvider = ['$animateProvider', function($animateProvider) {\n  this.$get = ['$injector', '$$AnimateRunner', '$$jqLite',\n       function($injector,   $$AnimateRunner,   $$jqLite) {\n\n    var applyAnimationClasses = applyAnimationClassesFactory($$jqLite);\n         // $animateJs(element, 'enter');\n    return function(element, event, classes, options) {\n      var animationClosed = false;\n\n      // the `classes` argument is optional and if it is not used\n      // then the classes will be resolved from the element's className\n      // property as well as options.addClass/options.removeClass.\n      if (arguments.length === 3 && isObject(classes)) {\n        options = classes;\n        classes = null;\n      }\n\n      options = prepareAnimationOptions(options);\n      if (!classes) {\n        classes = element.attr('class') || '';\n        if (options.addClass) {\n          classes += ' ' + options.addClass;\n        }\n        if (options.removeClass) {\n          classes += ' ' + options.removeClass;\n        }\n      }\n\n      var classesToAdd = options.addClass;\n      var classesToRemove = options.removeClass;\n\n      // the lookupAnimations function returns a series of animation objects that are\n      // matched up with one or more of the CSS classes. These animation objects are\n      // defined via the module.animation factory function. If nothing is detected then\n      // we don't return anything which then makes $animation query the next driver.\n      var animations = lookupAnimations(classes);\n      var before, after;\n      if (animations.length) {\n        var afterFn, beforeFn;\n        if (event == 'leave') {\n          beforeFn = 'leave';\n          afterFn = 'afterLeave'; // TODO(matsko): get rid of this\n        } else {\n          beforeFn = 'before' + event.charAt(0).toUpperCase() + event.substr(1);\n          afterFn = event;\n        }\n\n        if (event !== 'enter' && event !== 'move') {\n          before = packageAnimations(element, event, options, animations, beforeFn);\n        }\n        after  = packageAnimations(element, event, options, animations, afterFn);\n      }\n\n      // no matching animations\n      if (!before && !after) return;\n\n      function applyOptions() {\n        options.domOperation();\n        applyAnimationClasses(element, options);\n      }\n\n      function close() {\n        animationClosed = true;\n        applyOptions();\n        applyAnimationStyles(element, options);\n      }\n\n      var runner;\n\n      return {\n        $$willAnimate: true,\n        end: function() {\n          if (runner) {\n            runner.end();\n          } else {\n            close();\n            runner = new $$AnimateRunner();\n            runner.complete(true);\n          }\n          return runner;\n        },\n        start: function() {\n          if (runner) {\n            return runner;\n          }\n\n          runner = new $$AnimateRunner();\n          var closeActiveAnimations;\n          var chain = [];\n\n          if (before) {\n            chain.push(function(fn) {\n              closeActiveAnimations = before(fn);\n            });\n          }\n\n          if (chain.length) {\n            chain.push(function(fn) {\n              applyOptions();\n              fn(true);\n            });\n          } else {\n            applyOptions();\n          }\n\n          if (after) {\n            chain.push(function(fn) {\n              closeActiveAnimations = after(fn);\n            });\n          }\n\n          runner.setHost({\n            end: function() {\n              endAnimations();\n            },\n            cancel: function() {\n              endAnimations(true);\n            }\n          });\n\n          $$AnimateRunner.chain(chain, onComplete);\n          return runner;\n\n          function onComplete(success) {\n            close(success);\n            runner.complete(success);\n          }\n\n          function endAnimations(cancelled) {\n            if (!animationClosed) {\n              (closeActiveAnimations || noop)(cancelled);\n              onComplete(cancelled);\n            }\n          }\n        }\n      };\n\n      function executeAnimationFn(fn, element, event, options, onDone) {\n        var args;\n        switch (event) {\n          case 'animate':\n            args = [element, options.from, options.to, onDone];\n            break;\n\n          case 'setClass':\n            args = [element, classesToAdd, classesToRemove, onDone];\n            break;\n\n          case 'addClass':\n            args = [element, classesToAdd, onDone];\n            break;\n\n          case 'removeClass':\n            args = [element, classesToRemove, onDone];\n            break;\n\n          default:\n            args = [element, onDone];\n            break;\n        }\n\n        args.push(options);\n\n        var value = fn.apply(fn, args);\n        if (value) {\n          if (isFunction(value.start)) {\n            value = value.start();\n          }\n\n          if (value instanceof $$AnimateRunner) {\n            value.done(onDone);\n          } else if (isFunction(value)) {\n            // optional onEnd / onCancel callback\n            return value;\n          }\n        }\n\n        return noop;\n      }\n\n      function groupEventedAnimations(element, event, options, animations, fnName) {\n        var operations = [];\n        forEach(animations, function(ani) {\n          var animation = ani[fnName];\n          if (!animation) return;\n\n          // note that all of these animations will run in parallel\n          operations.push(function() {\n            var runner;\n            var endProgressCb;\n\n            var resolved = false;\n            var onAnimationComplete = function(rejected) {\n              if (!resolved) {\n                resolved = true;\n                (endProgressCb || noop)(rejected);\n                runner.complete(!rejected);\n              }\n            };\n\n            runner = new $$AnimateRunner({\n              end: function() {\n                onAnimationComplete();\n              },\n              cancel: function() {\n                onAnimationComplete(true);\n              }\n            });\n\n            endProgressCb = executeAnimationFn(animation, element, event, options, function(result) {\n              var cancelled = result === false;\n              onAnimationComplete(cancelled);\n            });\n\n            return runner;\n          });\n        });\n\n        return operations;\n      }\n\n      function packageAnimations(element, event, options, animations, fnName) {\n        var operations = groupEventedAnimations(element, event, options, animations, fnName);\n        if (operations.length === 0) {\n          var a,b;\n          if (fnName === 'beforeSetClass') {\n            a = groupEventedAnimations(element, 'removeClass', options, animations, 'beforeRemoveClass');\n            b = groupEventedAnimations(element, 'addClass', options, animations, 'beforeAddClass');\n          } else if (fnName === 'setClass') {\n            a = groupEventedAnimations(element, 'removeClass', options, animations, 'removeClass');\n            b = groupEventedAnimations(element, 'addClass', options, animations, 'addClass');\n          }\n\n          if (a) {\n            operations = operations.concat(a);\n          }\n          if (b) {\n            operations = operations.concat(b);\n          }\n        }\n\n        if (operations.length === 0) return;\n\n        // TODO(matsko): add documentation\n        return function startAnimation(callback) {\n          var runners = [];\n          if (operations.length) {\n            forEach(operations, function(animateFn) {\n              runners.push(animateFn());\n            });\n          }\n\n          runners.length ? $$AnimateRunner.all(runners, callback) : callback();\n\n          return function endFn(reject) {\n            forEach(runners, function(runner) {\n              reject ? runner.cancel() : runner.end();\n            });\n          };\n        };\n      }\n    };\n\n    function lookupAnimations(classes) {\n      classes = isArray(classes) ? classes : classes.split(' ');\n      var matches = [], flagMap = {};\n      for (var i=0; i < classes.length; i++) {\n        var klass = classes[i],\n            animationFactory = $animateProvider.$$registeredAnimations[klass];\n        if (animationFactory && !flagMap[klass]) {\n          matches.push($injector.get(animationFactory));\n          flagMap[klass] = true;\n        }\n      }\n      return matches;\n    }\n  }];\n}];\n\nvar $$AnimateJsDriverProvider = ['$$animationProvider', function($$animationProvider) {\n  $$animationProvider.drivers.push('$$animateJsDriver');\n  this.$get = ['$$animateJs', '$$AnimateRunner', function($$animateJs, $$AnimateRunner) {\n    return function initDriverFn(animationDetails) {\n      if (animationDetails.from && animationDetails.to) {\n        var fromAnimation = prepareAnimation(animationDetails.from);\n        var toAnimation = prepareAnimation(animationDetails.to);\n        if (!fromAnimation && !toAnimation) return;\n\n        return {\n          start: function() {\n            var animationRunners = [];\n\n            if (fromAnimation) {\n              animationRunners.push(fromAnimation.start());\n            }\n\n            if (toAnimation) {\n              animationRunners.push(toAnimation.start());\n            }\n\n            $$AnimateRunner.all(animationRunners, done);\n\n            var runner = new $$AnimateRunner({\n              end: endFnFactory(),\n              cancel: endFnFactory()\n            });\n\n            return runner;\n\n            function endFnFactory() {\n              return function() {\n                forEach(animationRunners, function(runner) {\n                  // at this point we cannot cancel animations for groups just yet. 1.5+\n                  runner.end();\n                });\n              };\n            }\n\n            function done(status) {\n              runner.complete(status);\n            }\n          }\n        };\n      } else {\n        return prepareAnimation(animationDetails);\n      }\n    };\n\n    function prepareAnimation(animationDetails) {\n      // TODO(matsko): make sure to check for grouped animations and delegate down to normal animations\n      var element = animationDetails.element;\n      var event = animationDetails.event;\n      var options = animationDetails.options;\n      var classes = animationDetails.classes;\n      return $$animateJs(element, event, classes, options);\n    }\n  }];\n}];\n\nvar NG_ANIMATE_ATTR_NAME = 'data-ng-animate';\nvar NG_ANIMATE_PIN_DATA = '$ngAnimatePin';\nvar $$AnimateQueueProvider = ['$animateProvider', function($animateProvider) {\n  var PRE_DIGEST_STATE = 1;\n  var RUNNING_STATE = 2;\n  var ONE_SPACE = ' ';\n\n  var rules = this.rules = {\n    skip: [],\n    cancel: [],\n    join: []\n  };\n\n  function makeTruthyCssClassMap(classString) {\n    if (!classString) {\n      return null;\n    }\n\n    var keys = classString.split(ONE_SPACE);\n    var map = Object.create(null);\n\n    forEach(keys, function(key) {\n      map[key] = true;\n    });\n    return map;\n  }\n\n  function hasMatchingClasses(newClassString, currentClassString) {\n    if (newClassString && currentClassString) {\n      var currentClassMap = makeTruthyCssClassMap(currentClassString);\n      return newClassString.split(ONE_SPACE).some(function(className) {\n        return currentClassMap[className];\n      });\n    }\n  }\n\n  function isAllowed(ruleType, element, currentAnimation, previousAnimation) {\n    return rules[ruleType].some(function(fn) {\n      return fn(element, currentAnimation, previousAnimation);\n    });\n  }\n\n  function hasAnimationClasses(animation, and) {\n    var a = (animation.addClass || '').length > 0;\n    var b = (animation.removeClass || '').length > 0;\n    return and ? a && b : a || b;\n  }\n\n  rules.join.push(function(element, newAnimation, currentAnimation) {\n    // if the new animation is class-based then we can just tack that on\n    return !newAnimation.structural && hasAnimationClasses(newAnimation);\n  });\n\n  rules.skip.push(function(element, newAnimation, currentAnimation) {\n    // there is no need to animate anything if no classes are being added and\n    // there is no structural animation that will be triggered\n    return !newAnimation.structural && !hasAnimationClasses(newAnimation);\n  });\n\n  rules.skip.push(function(element, newAnimation, currentAnimation) {\n    // why should we trigger a new structural animation if the element will\n    // be removed from the DOM anyway?\n    return currentAnimation.event == 'leave' && newAnimation.structural;\n  });\n\n  rules.skip.push(function(element, newAnimation, currentAnimation) {\n    // if there is an ongoing current animation then don't even bother running the class-based animation\n    return currentAnimation.structural && currentAnimation.state === RUNNING_STATE && !newAnimation.structural;\n  });\n\n  rules.cancel.push(function(element, newAnimation, currentAnimation) {\n    // there can never be two structural animations running at the same time\n    return currentAnimation.structural && newAnimation.structural;\n  });\n\n  rules.cancel.push(function(element, newAnimation, currentAnimation) {\n    // if the previous animation is already running, but the new animation will\n    // be triggered, but the new animation is structural\n    return currentAnimation.state === RUNNING_STATE && newAnimation.structural;\n  });\n\n  rules.cancel.push(function(element, newAnimation, currentAnimation) {\n    // cancel the animation if classes added / removed in both animation cancel each other out,\n    // but only if the current animation isn't structural\n\n    if (currentAnimation.structural) return false;\n\n    var nA = newAnimation.addClass;\n    var nR = newAnimation.removeClass;\n    var cA = currentAnimation.addClass;\n    var cR = currentAnimation.removeClass;\n\n    // early detection to save the global CPU shortage :)\n    if ((isUndefined(nA) && isUndefined(nR)) || (isUndefined(cA) && isUndefined(cR))) {\n      return false;\n    }\n\n    return hasMatchingClasses(nA, cR) || hasMatchingClasses(nR, cA);\n  });\n\n  this.$get = ['$$rAF', '$rootScope', '$rootElement', '$document', '$$HashMap',\n               '$$animation', '$$AnimateRunner', '$templateRequest', '$$jqLite', '$$forceReflow',\n       function($$rAF,   $rootScope,   $rootElement,   $document,   $$HashMap,\n                $$animation,   $$AnimateRunner,   $templateRequest,   $$jqLite,   $$forceReflow) {\n\n    var activeAnimationsLookup = new $$HashMap();\n    var disabledElementsLookup = new $$HashMap();\n    var animationsEnabled = null;\n\n    function postDigestTaskFactory() {\n      var postDigestCalled = false;\n      return function(fn) {\n        // we only issue a call to postDigest before\n        // it has first passed. This prevents any callbacks\n        // from not firing once the animation has completed\n        // since it will be out of the digest cycle.\n        if (postDigestCalled) {\n          fn();\n        } else {\n          $rootScope.$$postDigest(function() {\n            postDigestCalled = true;\n            fn();\n          });\n        }\n      };\n    }\n\n    // Wait until all directive and route-related templates are downloaded and\n    // compiled. The $templateRequest.totalPendingRequests variable keeps track of\n    // all of the remote templates being currently downloaded. If there are no\n    // templates currently downloading then the watcher will still fire anyway.\n    var deregisterWatch = $rootScope.$watch(\n      function() { return $templateRequest.totalPendingRequests === 0; },\n      function(isEmpty) {\n        if (!isEmpty) return;\n        deregisterWatch();\n\n        // Now that all templates have been downloaded, $animate will wait until\n        // the post digest queue is empty before enabling animations. By having two\n        // calls to $postDigest calls we can ensure that the flag is enabled at the\n        // very end of the post digest queue. Since all of the animations in $animate\n        // use $postDigest, it's important that the code below executes at the end.\n        // This basically means that the page is fully downloaded and compiled before\n        // any animations are triggered.\n        $rootScope.$$postDigest(function() {\n          $rootScope.$$postDigest(function() {\n            // we check for null directly in the event that the application already called\n            // .enabled() with whatever arguments that it provided it with\n            if (animationsEnabled === null) {\n              animationsEnabled = true;\n            }\n          });\n        });\n      }\n    );\n\n    var callbackRegistry = Object.create(null);\n\n    // remember that the classNameFilter is set during the provider/config\n    // stage therefore we can optimize here and setup a helper function\n    var classNameFilter = $animateProvider.classNameFilter();\n    var isAnimatableClassName = !classNameFilter\n              ? function() { return true; }\n              : function(className) {\n                return classNameFilter.test(className);\n              };\n\n    var applyAnimationClasses = applyAnimationClassesFactory($$jqLite);\n\n    function normalizeAnimationDetails(element, animation) {\n      return mergeAnimationDetails(element, animation, {});\n    }\n\n    // IE9-11 has no method \"contains\" in SVG element and in Node.prototype. Bug #10259.\n    var contains = window.Node.prototype.contains || function(arg) {\n      // jshint bitwise: false\n      return this === arg || !!(this.compareDocumentPosition(arg) & 16);\n      // jshint bitwise: true\n    };\n\n    function findCallbacks(parent, element, event) {\n      var targetNode = getDomNode(element);\n      var targetParentNode = getDomNode(parent);\n\n      var matches = [];\n      var entries = callbackRegistry[event];\n      if (entries) {\n        forEach(entries, function(entry) {\n          if (contains.call(entry.node, targetNode)) {\n            matches.push(entry.callback);\n          } else if (event === 'leave' && contains.call(entry.node, targetParentNode)) {\n            matches.push(entry.callback);\n          }\n        });\n      }\n\n      return matches;\n    }\n\n    function filterFromRegistry(list, matchContainer, matchCallback) {\n      var containerNode = extractElementNode(matchContainer);\n      return list.filter(function(entry) {\n        var isMatch = entry.node === containerNode &&\n                        (!matchCallback || entry.callback === matchCallback);\n        return !isMatch;\n      });\n    }\n\n    function cleanupEventListeners(phase, element) {\n      if (phase === 'close' && !element[0].parentNode) {\n        // If the element is not attached to a parentNode, it has been removed by\n        // the domOperation, and we can safely remove the event callbacks\n        $animate.off(element);\n      }\n    }\n\n    var $animate = {\n      on: function(event, container, callback) {\n        var node = extractElementNode(container);\n        callbackRegistry[event] = callbackRegistry[event] || [];\n        callbackRegistry[event].push({\n          node: node,\n          callback: callback\n        });\n\n        // Remove the callback when the element is removed from the DOM\n        jqLite(container).on('$destroy', function() {\n          var animationDetails = activeAnimationsLookup.get(node);\n\n          if (!animationDetails) {\n            // If there's an animation ongoing, the callback calling code will remove\n            // the event listeners. If we'd remove here, the callbacks would be removed\n            // before the animation ends\n            $animate.off(event, container, callback);\n          }\n        });\n      },\n\n      off: function(event, container, callback) {\n        if (arguments.length === 1 && !isString(arguments[0])) {\n          container = arguments[0];\n          for (var eventType in callbackRegistry) {\n            callbackRegistry[eventType] = filterFromRegistry(callbackRegistry[eventType], container);\n          }\n\n          return;\n        }\n\n        var entries = callbackRegistry[event];\n        if (!entries) return;\n\n        callbackRegistry[event] = arguments.length === 1\n            ? null\n            : filterFromRegistry(entries, container, callback);\n      },\n\n      pin: function(element, parentElement) {\n        assertArg(isElement(element), 'element', 'not an element');\n        assertArg(isElement(parentElement), 'parentElement', 'not an element');\n        element.data(NG_ANIMATE_PIN_DATA, parentElement);\n      },\n\n      push: function(element, event, options, domOperation) {\n        options = options || {};\n        options.domOperation = domOperation;\n        return queueAnimation(element, event, options);\n      },\n\n      // this method has four signatures:\n      //  () - global getter\n      //  (bool) - global setter\n      //  (element) - element getter\n      //  (element, bool) - element setter<F37>\n      enabled: function(element, bool) {\n        var argCount = arguments.length;\n\n        if (argCount === 0) {\n          // () - Global getter\n          bool = !!animationsEnabled;\n        } else {\n          var hasElement = isElement(element);\n\n          if (!hasElement) {\n            // (bool) - Global setter\n            bool = animationsEnabled = !!element;\n          } else {\n            var node = getDomNode(element);\n\n            if (argCount === 1) {\n              // (element) - Element getter\n              bool = !disabledElementsLookup.get(node);\n            } else {\n              // (element, bool) - Element setter\n              disabledElementsLookup.put(node, !bool);\n            }\n          }\n        }\n\n        return bool;\n      }\n    };\n\n    return $animate;\n\n    function queueAnimation(element, event, initialOptions) {\n      // we always make a copy of the options since\n      // there should never be any side effects on\n      // the input data when running `$animateCss`.\n      var options = copy(initialOptions);\n\n      var node, parent;\n      element = stripCommentsFromElement(element);\n      if (element) {\n        node = getDomNode(element);\n        parent = element.parent();\n      }\n\n      options = prepareAnimationOptions(options);\n\n      // we create a fake runner with a working promise.\n      // These methods will become available after the digest has passed\n      var runner = new $$AnimateRunner();\n\n      // this is used to trigger callbacks in postDigest mode\n      var runInNextPostDigestOrNow = postDigestTaskFactory();\n\n      if (isArray(options.addClass)) {\n        options.addClass = options.addClass.join(' ');\n      }\n\n      if (options.addClass && !isString(options.addClass)) {\n        options.addClass = null;\n      }\n\n      if (isArray(options.removeClass)) {\n        options.removeClass = options.removeClass.join(' ');\n      }\n\n      if (options.removeClass && !isString(options.removeClass)) {\n        options.removeClass = null;\n      }\n\n      if (options.from && !isObject(options.from)) {\n        options.from = null;\n      }\n\n      if (options.to && !isObject(options.to)) {\n        options.to = null;\n      }\n\n      // there are situations where a directive issues an animation for\n      // a jqLite wrapper that contains only comment nodes... If this\n      // happens then there is no way we can perform an animation\n      if (!node) {\n        close();\n        return runner;\n      }\n\n      var className = [node.className, options.addClass, options.removeClass].join(' ');\n      if (!isAnimatableClassName(className)) {\n        close();\n        return runner;\n      }\n\n      var isStructural = ['enter', 'move', 'leave'].indexOf(event) >= 0;\n\n      var documentHidden = $document[0].hidden;\n\n      // this is a hard disable of all animations for the application or on\n      // the element itself, therefore  there is no need to continue further\n      // past this point if not enabled\n      // Animations are also disabled if the document is currently hidden (page is not visible\n      // to the user), because browsers slow down or do not flush calls to requestAnimationFrame\n      var skipAnimations = !animationsEnabled || documentHidden || disabledElementsLookup.get(node);\n      var existingAnimation = (!skipAnimations && activeAnimationsLookup.get(node)) || {};\n      var hasExistingAnimation = !!existingAnimation.state;\n\n      // there is no point in traversing the same collection of parent ancestors if a followup\n      // animation will be run on the same element that already did all that checking work\n      if (!skipAnimations && (!hasExistingAnimation || existingAnimation.state != PRE_DIGEST_STATE)) {\n        skipAnimations = !areAnimationsAllowed(element, parent, event);\n      }\n\n      if (skipAnimations) {\n        // Callbacks should fire even if the document is hidden (regression fix for issue #14120)\n        if (documentHidden) notifyProgress(runner, event, 'start');\n        close();\n        if (documentHidden) notifyProgress(runner, event, 'close');\n        return runner;\n      }\n\n      if (isStructural) {\n        closeChildAnimations(element);\n      }\n\n      var newAnimation = {\n        structural: isStructural,\n        element: element,\n        event: event,\n        addClass: options.addClass,\n        removeClass: options.removeClass,\n        close: close,\n        options: options,\n        runner: runner\n      };\n\n      if (hasExistingAnimation) {\n        var skipAnimationFlag = isAllowed('skip', element, newAnimation, existingAnimation);\n        if (skipAnimationFlag) {\n          if (existingAnimation.state === RUNNING_STATE) {\n            close();\n            return runner;\n          } else {\n            mergeAnimationDetails(element, existingAnimation, newAnimation);\n            return existingAnimation.runner;\n          }\n        }\n        var cancelAnimationFlag = isAllowed('cancel', element, newAnimation, existingAnimation);\n        if (cancelAnimationFlag) {\n          if (existingAnimation.state === RUNNING_STATE) {\n            // this will end the animation right away and it is safe\n            // to do so since the animation is already running and the\n            // runner callback code will run in async\n            existingAnimation.runner.end();\n          } else if (existingAnimation.structural) {\n            // this means that the animation is queued into a digest, but\n            // hasn't started yet. Therefore it is safe to run the close\n            // method which will call the runner methods in async.\n            existingAnimation.close();\n          } else {\n            // this will merge the new animation options into existing animation options\n            mergeAnimationDetails(element, existingAnimation, newAnimation);\n\n            return existingAnimation.runner;\n          }\n        } else {\n          // a joined animation means that this animation will take over the existing one\n          // so an example would involve a leave animation taking over an enter. Then when\n          // the postDigest kicks in the enter will be ignored.\n          var joinAnimationFlag = isAllowed('join', element, newAnimation, existingAnimation);\n          if (joinAnimationFlag) {\n            if (existingAnimation.state === RUNNING_STATE) {\n              normalizeAnimationDetails(element, newAnimation);\n            } else {\n              applyGeneratedPreparationClasses(element, isStructural ? event : null, options);\n\n              event = newAnimation.event = existingAnimation.event;\n              options = mergeAnimationDetails(element, existingAnimation, newAnimation);\n\n              //we return the same runner since only the option values of this animation will\n              //be fed into the `existingAnimation`.\n              return existingAnimation.runner;\n            }\n          }\n        }\n      } else {\n        // normalization in this case means that it removes redundant CSS classes that\n        // already exist (addClass) or do not exist (removeClass) on the element\n        normalizeAnimationDetails(element, newAnimation);\n      }\n\n      // when the options are merged and cleaned up we may end up not having to do\n      // an animation at all, therefore we should check this before issuing a post\n      // digest callback. Structural animations will always run no matter what.\n      var isValidAnimation = newAnimation.structural;\n      if (!isValidAnimation) {\n        // animate (from/to) can be quickly checked first, otherwise we check if any classes are present\n        isValidAnimation = (newAnimation.event === 'animate' && Object.keys(newAnimation.options.to || {}).length > 0)\n                            || hasAnimationClasses(newAnimation);\n      }\n\n      if (!isValidAnimation) {\n        close();\n        clearElementAnimationState(element);\n        return runner;\n      }\n\n      // the counter keeps track of cancelled animations\n      var counter = (existingAnimation.counter || 0) + 1;\n      newAnimation.counter = counter;\n\n      markElementAnimationState(element, PRE_DIGEST_STATE, newAnimation);\n\n      $rootScope.$$postDigest(function() {\n        var animationDetails = activeAnimationsLookup.get(node);\n        var animationCancelled = !animationDetails;\n        animationDetails = animationDetails || {};\n\n        // if addClass/removeClass is called before something like enter then the\n        // registered parent element may not be present. The code below will ensure\n        // that a final value for parent element is obtained\n        var parentElement = element.parent() || [];\n\n        // animate/structural/class-based animations all have requirements. Otherwise there\n        // is no point in performing an animation. The parent node must also be set.\n        var isValidAnimation = parentElement.length > 0\n                                && (animationDetails.event === 'animate'\n                                    || animationDetails.structural\n                                    || hasAnimationClasses(animationDetails));\n\n        // this means that the previous animation was cancelled\n        // even if the follow-up animation is the same event\n        if (animationCancelled || animationDetails.counter !== counter || !isValidAnimation) {\n          // if another animation did not take over then we need\n          // to make sure that the domOperation and options are\n          // handled accordingly\n          if (animationCancelled) {\n            applyAnimationClasses(element, options);\n            applyAnimationStyles(element, options);\n          }\n\n          // if the event changed from something like enter to leave then we do\n          // it, otherwise if it's the same then the end result will be the same too\n          if (animationCancelled || (isStructural && animationDetails.event !== event)) {\n            options.domOperation();\n            runner.end();\n          }\n\n          // in the event that the element animation was not cancelled or a follow-up animation\n          // isn't allowed to animate from here then we need to clear the state of the element\n          // so that any future animations won't read the expired animation data.\n          if (!isValidAnimation) {\n            clearElementAnimationState(element);\n          }\n\n          return;\n        }\n\n        // this combined multiple class to addClass / removeClass into a setClass event\n        // so long as a structural event did not take over the animation\n        event = !animationDetails.structural && hasAnimationClasses(animationDetails, true)\n            ? 'setClass'\n            : animationDetails.event;\n\n        markElementAnimationState(element, RUNNING_STATE);\n        var realRunner = $$animation(element, event, animationDetails.options);\n\n        // this will update the runner's flow-control events based on\n        // the `realRunner` object.\n        runner.setHost(realRunner);\n        notifyProgress(runner, event, 'start', {});\n\n        realRunner.done(function(status) {\n          close(!status);\n          var animationDetails = activeAnimationsLookup.get(node);\n          if (animationDetails && animationDetails.counter === counter) {\n            clearElementAnimationState(getDomNode(element));\n          }\n          notifyProgress(runner, event, 'close', {});\n        });\n      });\n\n      return runner;\n\n      function notifyProgress(runner, event, phase, data) {\n        runInNextPostDigestOrNow(function() {\n          var callbacks = findCallbacks(parent, element, event);\n          if (callbacks.length) {\n            // do not optimize this call here to RAF because\n            // we don't know how heavy the callback code here will\n            // be and if this code is buffered then this can\n            // lead to a performance regression.\n            $$rAF(function() {\n              forEach(callbacks, function(callback) {\n                callback(element, phase, data);\n              });\n              cleanupEventListeners(phase, element);\n            });\n          } else {\n            cleanupEventListeners(phase, element);\n          }\n        });\n        runner.progress(event, phase, data);\n      }\n\n      function close(reject) { // jshint ignore:line\n        clearGeneratedClasses(element, options);\n        applyAnimationClasses(element, options);\n        applyAnimationStyles(element, options);\n        options.domOperation();\n        runner.complete(!reject);\n      }\n    }\n\n    function closeChildAnimations(element) {\n      var node = getDomNode(element);\n      var children = node.querySelectorAll('[' + NG_ANIMATE_ATTR_NAME + ']');\n      forEach(children, function(child) {\n        var state = parseInt(child.getAttribute(NG_ANIMATE_ATTR_NAME));\n        var animationDetails = activeAnimationsLookup.get(child);\n        if (animationDetails) {\n          switch (state) {\n            case RUNNING_STATE:\n              animationDetails.runner.end();\n              /* falls through */\n            case PRE_DIGEST_STATE:\n              activeAnimationsLookup.remove(child);\n              break;\n          }\n        }\n      });\n    }\n\n    function clearElementAnimationState(element) {\n      var node = getDomNode(element);\n      node.removeAttribute(NG_ANIMATE_ATTR_NAME);\n      activeAnimationsLookup.remove(node);\n    }\n\n    function isMatchingElement(nodeOrElmA, nodeOrElmB) {\n      return getDomNode(nodeOrElmA) === getDomNode(nodeOrElmB);\n    }\n\n    /**\n     * This fn returns false if any of the following is true:\n     * a) animations on any parent element are disabled, and animations on the element aren't explicitly allowed\n     * b) a parent element has an ongoing structural animation, and animateChildren is false\n     * c) the element is not a child of the body\n     * d) the element is not a child of the $rootElement\n     */\n    function areAnimationsAllowed(element, parentElement, event) {\n      var bodyElement = jqLite($document[0].body);\n      var bodyElementDetected = isMatchingElement(element, bodyElement) || element[0].nodeName === 'HTML';\n      var rootElementDetected = isMatchingElement(element, $rootElement);\n      var parentAnimationDetected = false;\n      var animateChildren;\n      var elementDisabled = disabledElementsLookup.get(getDomNode(element));\n\n      var parentHost = jqLite.data(element[0], NG_ANIMATE_PIN_DATA);\n      if (parentHost) {\n        parentElement = parentHost;\n      }\n\n      parentElement = getDomNode(parentElement);\n\n      while (parentElement) {\n        if (!rootElementDetected) {\n          // angular doesn't want to attempt to animate elements outside of the application\n          // therefore we need to ensure that the rootElement is an ancestor of the current element\n          rootElementDetected = isMatchingElement(parentElement, $rootElement);\n        }\n\n        if (parentElement.nodeType !== ELEMENT_NODE) {\n          // no point in inspecting the #document element\n          break;\n        }\n\n        var details = activeAnimationsLookup.get(parentElement) || {};\n        // either an enter, leave or move animation will commence\n        // therefore we can't allow any animations to take place\n        // but if a parent animation is class-based then that's ok\n        if (!parentAnimationDetected) {\n          var parentElementDisabled = disabledElementsLookup.get(parentElement);\n\n          if (parentElementDisabled === true && elementDisabled !== false) {\n            // disable animations if the user hasn't explicitly enabled animations on the\n            // current element\n            elementDisabled = true;\n            // element is disabled via parent element, no need to check anything else\n            break;\n          } else if (parentElementDisabled === false) {\n            elementDisabled = false;\n          }\n          parentAnimationDetected = details.structural;\n        }\n\n        if (isUndefined(animateChildren) || animateChildren === true) {\n          var value = jqLite.data(parentElement, NG_ANIMATE_CHILDREN_DATA);\n          if (isDefined(value)) {\n            animateChildren = value;\n          }\n        }\n\n        // there is no need to continue traversing at this point\n        if (parentAnimationDetected && animateChildren === false) break;\n\n        if (!bodyElementDetected) {\n          // we also need to ensure that the element is or will be a part of the body element\n          // otherwise it is pointless to even issue an animation to be rendered\n          bodyElementDetected = isMatchingElement(parentElement, bodyElement);\n        }\n\n        if (bodyElementDetected && rootElementDetected) {\n          // If both body and root have been found, any other checks are pointless,\n          // as no animation data should live outside the application\n          break;\n        }\n\n        if (!rootElementDetected) {\n          // If no rootElement is detected, check if the parentElement is pinned to another element\n          parentHost = jqLite.data(parentElement, NG_ANIMATE_PIN_DATA);\n          if (parentHost) {\n            // The pin target element becomes the next parent element\n            parentElement = getDomNode(parentHost);\n            continue;\n          }\n        }\n\n        parentElement = parentElement.parentNode;\n      }\n\n      var allowAnimation = (!parentAnimationDetected || animateChildren) && elementDisabled !== true;\n      return allowAnimation && rootElementDetected && bodyElementDetected;\n    }\n\n    function markElementAnimationState(element, state, details) {\n      details = details || {};\n      details.state = state;\n\n      var node = getDomNode(element);\n      node.setAttribute(NG_ANIMATE_ATTR_NAME, state);\n\n      var oldValue = activeAnimationsLookup.get(node);\n      var newValue = oldValue\n          ? extend(oldValue, details)\n          : details;\n      activeAnimationsLookup.put(node, newValue);\n    }\n  }];\n}];\n\nvar $$AnimationProvider = ['$animateProvider', function($animateProvider) {\n  var NG_ANIMATE_REF_ATTR = 'ng-animate-ref';\n\n  var drivers = this.drivers = [];\n\n  var RUNNER_STORAGE_KEY = '$$animationRunner';\n\n  function setRunner(element, runner) {\n    element.data(RUNNER_STORAGE_KEY, runner);\n  }\n\n  function removeRunner(element) {\n    element.removeData(RUNNER_STORAGE_KEY);\n  }\n\n  function getRunner(element) {\n    return element.data(RUNNER_STORAGE_KEY);\n  }\n\n  this.$get = ['$$jqLite', '$rootScope', '$injector', '$$AnimateRunner', '$$HashMap', '$$rAFScheduler',\n       function($$jqLite,   $rootScope,   $injector,   $$AnimateRunner,   $$HashMap,   $$rAFScheduler) {\n\n    var animationQueue = [];\n    var applyAnimationClasses = applyAnimationClassesFactory($$jqLite);\n\n    function sortAnimations(animations) {\n      var tree = { children: [] };\n      var i, lookup = new $$HashMap();\n\n      // this is done first beforehand so that the hashmap\n      // is filled with a list of the elements that will be animated\n      for (i = 0; i < animations.length; i++) {\n        var animation = animations[i];\n        lookup.put(animation.domNode, animations[i] = {\n          domNode: animation.domNode,\n          fn: animation.fn,\n          children: []\n        });\n      }\n\n      for (i = 0; i < animations.length; i++) {\n        processNode(animations[i]);\n      }\n\n      return flatten(tree);\n\n      function processNode(entry) {\n        if (entry.processed) return entry;\n        entry.processed = true;\n\n        var elementNode = entry.domNode;\n        var parentNode = elementNode.parentNode;\n        lookup.put(elementNode, entry);\n\n        var parentEntry;\n        while (parentNode) {\n          parentEntry = lookup.get(parentNode);\n          if (parentEntry) {\n            if (!parentEntry.processed) {\n              parentEntry = processNode(parentEntry);\n            }\n            break;\n          }\n          parentNode = parentNode.parentNode;\n        }\n\n        (parentEntry || tree).children.push(entry);\n        return entry;\n      }\n\n      function flatten(tree) {\n        var result = [];\n        var queue = [];\n        var i;\n\n        for (i = 0; i < tree.children.length; i++) {\n          queue.push(tree.children[i]);\n        }\n\n        var remainingLevelEntries = queue.length;\n        var nextLevelEntries = 0;\n        var row = [];\n\n        for (i = 0; i < queue.length; i++) {\n          var entry = queue[i];\n          if (remainingLevelEntries <= 0) {\n            remainingLevelEntries = nextLevelEntries;\n            nextLevelEntries = 0;\n            result.push(row);\n            row = [];\n          }\n          row.push(entry.fn);\n          entry.children.forEach(function(childEntry) {\n            nextLevelEntries++;\n            queue.push(childEntry);\n          });\n          remainingLevelEntries--;\n        }\n\n        if (row.length) {\n          result.push(row);\n        }\n\n        return result;\n      }\n    }\n\n    // TODO(matsko): document the signature in a better way\n    return function(element, event, options) {\n      options = prepareAnimationOptions(options);\n      var isStructural = ['enter', 'move', 'leave'].indexOf(event) >= 0;\n\n      // there is no animation at the current moment, however\n      // these runner methods will get later updated with the\n      // methods leading into the driver's end/cancel methods\n      // for now they just stop the animation from starting\n      var runner = new $$AnimateRunner({\n        end: function() { close(); },\n        cancel: function() { close(true); }\n      });\n\n      if (!drivers.length) {\n        close();\n        return runner;\n      }\n\n      setRunner(element, runner);\n\n      var classes = mergeClasses(element.attr('class'), mergeClasses(options.addClass, options.removeClass));\n      var tempClasses = options.tempClasses;\n      if (tempClasses) {\n        classes += ' ' + tempClasses;\n        options.tempClasses = null;\n      }\n\n      var prepareClassName;\n      if (isStructural) {\n        prepareClassName = 'ng-' + event + PREPARE_CLASS_SUFFIX;\n        $$jqLite.addClass(element, prepareClassName);\n      }\n\n      animationQueue.push({\n        // this data is used by the postDigest code and passed into\n        // the driver step function\n        element: element,\n        classes: classes,\n        event: event,\n        structural: isStructural,\n        options: options,\n        beforeStart: beforeStart,\n        close: close\n      });\n\n      element.on('$destroy', handleDestroyedElement);\n\n      // we only want there to be one function called within the post digest\n      // block. This way we can group animations for all the animations that\n      // were apart of the same postDigest flush call.\n      if (animationQueue.length > 1) return runner;\n\n      $rootScope.$$postDigest(function() {\n        var animations = [];\n        forEach(animationQueue, function(entry) {\n          // the element was destroyed early on which removed the runner\n          // form its storage. This means we can't animate this element\n          // at all and it already has been closed due to destruction.\n          if (getRunner(entry.element)) {\n            animations.push(entry);\n          } else {\n            entry.close();\n          }\n        });\n\n        // now any future animations will be in another postDigest\n        animationQueue.length = 0;\n\n        var groupedAnimations = groupAnimations(animations);\n        var toBeSortedAnimations = [];\n\n        forEach(groupedAnimations, function(animationEntry) {\n          toBeSortedAnimations.push({\n            domNode: getDomNode(animationEntry.from ? animationEntry.from.element : animationEntry.element),\n            fn: function triggerAnimationStart() {\n              // it's important that we apply the `ng-animate` CSS class and the\n              // temporary classes before we do any driver invoking since these\n              // CSS classes may be required for proper CSS detection.\n              animationEntry.beforeStart();\n\n              var startAnimationFn, closeFn = animationEntry.close;\n\n              // in the event that the element was removed before the digest runs or\n              // during the RAF sequencing then we should not trigger the animation.\n              var targetElement = animationEntry.anchors\n                  ? (animationEntry.from.element || animationEntry.to.element)\n                  : animationEntry.element;\n\n              if (getRunner(targetElement)) {\n                var operation = invokeFirstDriver(animationEntry);\n                if (operation) {\n                  startAnimationFn = operation.start;\n                }\n              }\n\n              if (!startAnimationFn) {\n                closeFn();\n              } else {\n                var animationRunner = startAnimationFn();\n                animationRunner.done(function(status) {\n                  closeFn(!status);\n                });\n                updateAnimationRunners(animationEntry, animationRunner);\n              }\n            }\n          });\n        });\n\n        // we need to sort each of the animations in order of parent to child\n        // relationships. This ensures that the child classes are applied at the\n        // right time.\n        $$rAFScheduler(sortAnimations(toBeSortedAnimations));\n      });\n\n      return runner;\n\n      // TODO(matsko): change to reference nodes\n      function getAnchorNodes(node) {\n        var SELECTOR = '[' + NG_ANIMATE_REF_ATTR + ']';\n        var items = node.hasAttribute(NG_ANIMATE_REF_ATTR)\n              ? [node]\n              : node.querySelectorAll(SELECTOR);\n        var anchors = [];\n        forEach(items, function(node) {\n          var attr = node.getAttribute(NG_ANIMATE_REF_ATTR);\n          if (attr && attr.length) {\n            anchors.push(node);\n          }\n        });\n        return anchors;\n      }\n\n      function groupAnimations(animations) {\n        var preparedAnimations = [];\n        var refLookup = {};\n        forEach(animations, function(animation, index) {\n          var element = animation.element;\n          var node = getDomNode(element);\n          var event = animation.event;\n          var enterOrMove = ['enter', 'move'].indexOf(event) >= 0;\n          var anchorNodes = animation.structural ? getAnchorNodes(node) : [];\n\n          if (anchorNodes.length) {\n            var direction = enterOrMove ? 'to' : 'from';\n\n            forEach(anchorNodes, function(anchor) {\n              var key = anchor.getAttribute(NG_ANIMATE_REF_ATTR);\n              refLookup[key] = refLookup[key] || {};\n              refLookup[key][direction] = {\n                animationID: index,\n                element: jqLite(anchor)\n              };\n            });\n          } else {\n            preparedAnimations.push(animation);\n          }\n        });\n\n        var usedIndicesLookup = {};\n        var anchorGroups = {};\n        forEach(refLookup, function(operations, key) {\n          var from = operations.from;\n          var to = operations.to;\n\n          if (!from || !to) {\n            // only one of these is set therefore we can't have an\n            // anchor animation since all three pieces are required\n            var index = from ? from.animationID : to.animationID;\n            var indexKey = index.toString();\n            if (!usedIndicesLookup[indexKey]) {\n              usedIndicesLookup[indexKey] = true;\n              preparedAnimations.push(animations[index]);\n            }\n            return;\n          }\n\n          var fromAnimation = animations[from.animationID];\n          var toAnimation = animations[to.animationID];\n          var lookupKey = from.animationID.toString();\n          if (!anchorGroups[lookupKey]) {\n            var group = anchorGroups[lookupKey] = {\n              structural: true,\n              beforeStart: function() {\n                fromAnimation.beforeStart();\n                toAnimation.beforeStart();\n              },\n              close: function() {\n                fromAnimation.close();\n                toAnimation.close();\n              },\n              classes: cssClassesIntersection(fromAnimation.classes, toAnimation.classes),\n              from: fromAnimation,\n              to: toAnimation,\n              anchors: [] // TODO(matsko): change to reference nodes\n            };\n\n            // the anchor animations require that the from and to elements both have at least\n            // one shared CSS class which effectively marries the two elements together to use\n            // the same animation driver and to properly sequence the anchor animation.\n            if (group.classes.length) {\n              preparedAnimations.push(group);\n            } else {\n              preparedAnimations.push(fromAnimation);\n              preparedAnimations.push(toAnimation);\n            }\n          }\n\n          anchorGroups[lookupKey].anchors.push({\n            'out': from.element, 'in': to.element\n          });\n        });\n\n        return preparedAnimations;\n      }\n\n      function cssClassesIntersection(a,b) {\n        a = a.split(' ');\n        b = b.split(' ');\n        var matches = [];\n\n        for (var i = 0; i < a.length; i++) {\n          var aa = a[i];\n          if (aa.substring(0,3) === 'ng-') continue;\n\n          for (var j = 0; j < b.length; j++) {\n            if (aa === b[j]) {\n              matches.push(aa);\n              break;\n            }\n          }\n        }\n\n        return matches.join(' ');\n      }\n\n      function invokeFirstDriver(animationDetails) {\n        // we loop in reverse order since the more general drivers (like CSS and JS)\n        // may attempt more elements, but custom drivers are more particular\n        for (var i = drivers.length - 1; i >= 0; i--) {\n          var driverName = drivers[i];\n          var factory = $injector.get(driverName);\n          var driver = factory(animationDetails);\n          if (driver) {\n            return driver;\n          }\n        }\n      }\n\n      function beforeStart() {\n        element.addClass(NG_ANIMATE_CLASSNAME);\n        if (tempClasses) {\n          $$jqLite.addClass(element, tempClasses);\n        }\n        if (prepareClassName) {\n          $$jqLite.removeClass(element, prepareClassName);\n          prepareClassName = null;\n        }\n      }\n\n      function updateAnimationRunners(animation, newRunner) {\n        if (animation.from && animation.to) {\n          update(animation.from.element);\n          update(animation.to.element);\n        } else {\n          update(animation.element);\n        }\n\n        function update(element) {\n          var runner = getRunner(element);\n          if (runner) runner.setHost(newRunner);\n        }\n      }\n\n      function handleDestroyedElement() {\n        var runner = getRunner(element);\n        if (runner && (event !== 'leave' || !options.$$domOperationFired)) {\n          runner.end();\n        }\n      }\n\n      function close(rejected) { // jshint ignore:line\n        element.off('$destroy', handleDestroyedElement);\n        removeRunner(element);\n\n        applyAnimationClasses(element, options);\n        applyAnimationStyles(element, options);\n        options.domOperation();\n\n        if (tempClasses) {\n          $$jqLite.removeClass(element, tempClasses);\n        }\n\n        element.removeClass(NG_ANIMATE_CLASSNAME);\n        runner.complete(!rejected);\n      }\n    };\n  }];\n}];\n\n/**\n * @ngdoc directive\n * @name ngAnimateSwap\n * @restrict A\n * @scope\n *\n * @description\n *\n * ngAnimateSwap is a animation-oriented directive that allows for the container to\n * be removed and entered in whenever the associated expression changes. A\n * common usecase for this directive is a rotating banner or slider component which\n * contains one image being present at a time. When the active image changes\n * then the old image will perform a `leave` animation and the new element\n * will be inserted via an `enter` animation.\n *\n * @animations\n * | Animation                        | Occurs                               |\n * |----------------------------------|--------------------------------------|\n * | {@link ng.$animate#enter enter}  | when the new element is inserted to the DOM  |\n * | {@link ng.$animate#leave leave}  | when the old element is removed from the DOM |\n *\n * @example\n * <example name=\"ngAnimateSwap-directive\" module=\"ngAnimateSwapExample\"\n *          deps=\"angular-animate.js\"\n *          animations=\"true\" fixBase=\"true\">\n *   <file name=\"index.html\">\n *     <div class=\"container\" ng-controller=\"AppCtrl\">\n *       <div ng-animate-swap=\"number\" class=\"cell swap-animation\" ng-class=\"colorClass(number)\">\n *         {{ number }}\n *       </div>\n *     </div>\n *   </file>\n *   <file name=\"script.js\">\n *     angular.module('ngAnimateSwapExample', ['ngAnimate'])\n *       .controller('AppCtrl', ['$scope', '$interval', function($scope, $interval) {\n *         $scope.number = 0;\n *         $interval(function() {\n *           $scope.number++;\n *         }, 1000);\n *\n *         var colors = ['red','blue','green','yellow','orange'];\n *         $scope.colorClass = function(number) {\n *           return colors[number % colors.length];\n *         };\n *       }]);\n *   </file>\n *  <file name=\"animations.css\">\n *  .container {\n *    height:250px;\n *    width:250px;\n *    position:relative;\n *    overflow:hidden;\n *    border:2px solid black;\n *  }\n *  .container .cell {\n *    font-size:150px;\n *    text-align:center;\n *    line-height:250px;\n *    position:absolute;\n *    top:0;\n *    left:0;\n *    right:0;\n *    border-bottom:2px solid black;\n *  }\n *  .swap-animation.ng-enter, .swap-animation.ng-leave {\n *    transition:0.5s linear all;\n *  }\n *  .swap-animation.ng-enter {\n *    top:-250px;\n *  }\n *  .swap-animation.ng-enter-active {\n *    top:0px;\n *  }\n *  .swap-animation.ng-leave {\n *    top:0px;\n *  }\n *  .swap-animation.ng-leave-active {\n *    top:250px;\n *  }\n *  .red { background:red; }\n *  .green { background:green; }\n *  .blue { background:blue; }\n *  .yellow { background:yellow; }\n *  .orange { background:orange; }\n *  </file>\n * </example>\n */\nvar ngAnimateSwapDirective = ['$animate', '$rootScope', function($animate, $rootScope) {\n  return {\n    restrict: 'A',\n    transclude: 'element',\n    terminal: true,\n    priority: 600, // we use 600 here to ensure that the directive is caught before others\n    link: function(scope, $element, attrs, ctrl, $transclude) {\n      var previousElement, previousScope;\n      scope.$watchCollection(attrs.ngAnimateSwap || attrs['for'], function(value) {\n        if (previousElement) {\n          $animate.leave(previousElement);\n        }\n        if (previousScope) {\n          previousScope.$destroy();\n          previousScope = null;\n        }\n        if (value || value === 0) {\n          previousScope = scope.$new();\n          $transclude(previousScope, function(element) {\n            previousElement = element;\n            $animate.enter(element, null, $element);\n          });\n        }\n      });\n    }\n  };\n}];\n\n/**\n * @ngdoc module\n * @name ngAnimate\n * @description\n *\n * The `ngAnimate` module provides support for CSS-based animations (keyframes and transitions) as well as JavaScript-based animations via\n * callback hooks. Animations are not enabled by default, however, by including `ngAnimate` the animation hooks are enabled for an Angular app.\n *\n * <div doc-module-components=\"ngAnimate\"></div>\n *\n * # Usage\n * Simply put, there are two ways to make use of animations when ngAnimate is used: by using **CSS** and **JavaScript**. The former works purely based\n * using CSS (by using matching CSS selectors/styles) and the latter triggers animations that are registered via `module.animation()`. For\n * both CSS and JS animations the sole requirement is to have a matching `CSS class` that exists both in the registered animation and within\n * the HTML element that the animation will be triggered on.\n *\n * ## Directive Support\n * The following directives are \"animation aware\":\n *\n * | Directive                                                                                                | Supported Animations                                                     |\n * |----------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------|\n * | {@link ng.directive:ngRepeat#animations ngRepeat}                                                        | enter, leave and move                                                    |\n * | {@link ngRoute.directive:ngView#animations ngView}                                                       | enter and leave                                                          |\n * | {@link ng.directive:ngInclude#animations ngInclude}                                                      | enter and leave                                                          |\n * | {@link ng.directive:ngSwitch#animations ngSwitch}                                                        | enter and leave                                                          |\n * | {@link ng.directive:ngIf#animations ngIf}                                                                | enter and leave                                                          |\n * | {@link ng.directive:ngClass#animations ngClass}                                                          | add and remove (the CSS class(es) present)                               |\n * | {@link ng.directive:ngShow#animations ngShow} & {@link ng.directive:ngHide#animations ngHide}            | add and remove (the ng-hide class value)                                 |\n * | {@link ng.directive:form#animation-hooks form} & {@link ng.directive:ngModel#animation-hooks ngModel}    | add and remove (dirty, pristine, valid, invalid & all other validations) |\n * | {@link module:ngMessages#animations ngMessages}                                                          | add and remove (ng-active & ng-inactive)                                 |\n * | {@link module:ngMessages#animations ngMessage}                                                           | enter and leave                                                          |\n *\n * (More information can be found by visiting each the documentation associated with each directive.)\n *\n * ## CSS-based Animations\n *\n * CSS-based animations with ngAnimate are unique since they require no JavaScript code at all. By using a CSS class that we reference between our HTML\n * and CSS code we can create an animation that will be picked up by Angular when an the underlying directive performs an operation.\n *\n * The example below shows how an `enter` animation can be made possible on an element using `ng-if`:\n *\n * ```html\n * <div ng-if=\"bool\" class=\"fade\">\n *    Fade me in out\n * </div>\n * <button ng-click=\"bool=true\">Fade In!</button>\n * <button ng-click=\"bool=false\">Fade Out!</button>\n * ```\n *\n * Notice the CSS class **fade**? We can now create the CSS transition code that references this class:\n *\n * ```css\n * /&#42; The starting CSS styles for the enter animation &#42;/\n * .fade.ng-enter {\n *   transition:0.5s linear all;\n *   opacity:0;\n * }\n *\n * /&#42; The finishing CSS styles for the enter animation &#42;/\n * .fade.ng-enter.ng-enter-active {\n *   opacity:1;\n * }\n * ```\n *\n * The key thing to remember here is that, depending on the animation event (which each of the directives above trigger depending on what's going on) two\n * generated CSS classes will be applied to the element; in the example above we have `.ng-enter` and `.ng-enter-active`. For CSS transitions, the transition\n * code **must** be defined within the starting CSS class (in this case `.ng-enter`). The destination class is what the transition will animate towards.\n *\n * If for example we wanted to create animations for `leave` and `move` (ngRepeat triggers move) then we can do so using the same CSS naming conventions:\n *\n * ```css\n * /&#42; now the element will fade out before it is removed from the DOM &#42;/\n * .fade.ng-leave {\n *   transition:0.5s linear all;\n *   opacity:1;\n * }\n * .fade.ng-leave.ng-leave-active {\n *   opacity:0;\n * }\n * ```\n *\n * We can also make use of **CSS Keyframes** by referencing the keyframe animation within the starting CSS class:\n *\n * ```css\n * /&#42; there is no need to define anything inside of the destination\n * CSS class since the keyframe will take charge of the animation &#42;/\n * .fade.ng-leave {\n *   animation: my_fade_animation 0.5s linear;\n *   -webkit-animation: my_fade_animation 0.5s linear;\n * }\n *\n * @keyframes my_fade_animation {\n *   from { opacity:1; }\n *   to { opacity:0; }\n * }\n *\n * @-webkit-keyframes my_fade_animation {\n *   from { opacity:1; }\n *   to { opacity:0; }\n * }\n * ```\n *\n * Feel free also mix transitions and keyframes together as well as any other CSS classes on the same element.\n *\n * ### CSS Class-based Animations\n *\n * Class-based animations (animations that are triggered via `ngClass`, `ngShow`, `ngHide` and some other directives) have a slightly different\n * naming convention. Class-based animations are basic enough that a standard transition or keyframe can be referenced on the class being added\n * and removed.\n *\n * For example if we wanted to do a CSS animation for `ngHide` then we place an animation on the `.ng-hide` CSS class:\n *\n * ```html\n * <div ng-show=\"bool\" class=\"fade\">\n *   Show and hide me\n * </div>\n * <button ng-click=\"bool=!bool\">Toggle</button>\n *\n * <style>\n * .fade.ng-hide {\n *   transition:0.5s linear all;\n *   opacity:0;\n * }\n * </style>\n * ```\n *\n * All that is going on here with ngShow/ngHide behind the scenes is the `.ng-hide` class is added/removed (when the hidden state is valid). Since\n * ngShow and ngHide are animation aware then we can match up a transition and ngAnimate handles the rest.\n *\n * In addition the addition and removal of the CSS class, ngAnimate also provides two helper methods that we can use to further decorate the animation\n * with CSS styles.\n *\n * ```html\n * <div ng-class=\"{on:onOff}\" class=\"highlight\">\n *   Highlight this box\n * </div>\n * <button ng-click=\"onOff=!onOff\">Toggle</button>\n *\n * <style>\n * .highlight {\n *   transition:0.5s linear all;\n * }\n * .highlight.on-add {\n *   background:white;\n * }\n * .highlight.on {\n *   background:yellow;\n * }\n * .highlight.on-remove {\n *   background:black;\n * }\n * </style>\n * ```\n *\n * We can also make use of CSS keyframes by placing them within the CSS classes.\n *\n *\n * ### CSS Staggering Animations\n * A Staggering animation is a collection of animations that are issued with a slight delay in between each successive operation resulting in a\n * curtain-like effect. The ngAnimate module (versions >=1.2) supports staggering animations and the stagger effect can be\n * performed by creating a **ng-EVENT-stagger** CSS class and attaching that class to the base CSS class used for\n * the animation. The style property expected within the stagger class can either be a **transition-delay** or an\n * **animation-delay** property (or both if your animation contains both transitions and keyframe animations).\n *\n * ```css\n * .my-animation.ng-enter {\n *   /&#42; standard transition code &#42;/\n *   transition: 1s linear all;\n *   opacity:0;\n * }\n * .my-animation.ng-enter-stagger {\n *   /&#42; this will have a 100ms delay between each successive leave animation &#42;/\n *   transition-delay: 0.1s;\n *\n *   /&#42; As of 1.4.4, this must always be set: it signals ngAnimate\n *     to not accidentally inherit a delay property from another CSS class &#42;/\n *   transition-duration: 0s;\n * }\n * .my-animation.ng-enter.ng-enter-active {\n *   /&#42; standard transition styles &#42;/\n *   opacity:1;\n * }\n * ```\n *\n * Staggering animations work by default in ngRepeat (so long as the CSS class is defined). Outside of ngRepeat, to use staggering animations\n * on your own, they can be triggered by firing multiple calls to the same event on $animate. However, the restrictions surrounding this\n * are that each of the elements must have the same CSS className value as well as the same parent element. A stagger operation\n * will also be reset if one or more animation frames have passed since the multiple calls to `$animate` were fired.\n *\n * The following code will issue the **ng-leave-stagger** event on the element provided:\n *\n * ```js\n * var kids = parent.children();\n *\n * $animate.leave(kids[0]); //stagger index=0\n * $animate.leave(kids[1]); //stagger index=1\n * $animate.leave(kids[2]); //stagger index=2\n * $animate.leave(kids[3]); //stagger index=3\n * $animate.leave(kids[4]); //stagger index=4\n *\n * window.requestAnimationFrame(function() {\n *   //stagger has reset itself\n *   $animate.leave(kids[5]); //stagger index=0\n *   $animate.leave(kids[6]); //stagger index=1\n *\n *   $scope.$digest();\n * });\n * ```\n *\n * Stagger animations are currently only supported within CSS-defined animations.\n *\n * ### The `ng-animate` CSS class\n *\n * When ngAnimate is animating an element it will apply the `ng-animate` CSS class to the element for the duration of the animation.\n * This is a temporary CSS class and it will be removed once the animation is over (for both JavaScript and CSS-based animations).\n *\n * Therefore, animations can be applied to an element using this temporary class directly via CSS.\n *\n * ```css\n * .zipper.ng-animate {\n *   transition:0.5s linear all;\n * }\n * .zipper.ng-enter {\n *   opacity:0;\n * }\n * .zipper.ng-enter.ng-enter-active {\n *   opacity:1;\n * }\n * .zipper.ng-leave {\n *   opacity:1;\n * }\n * .zipper.ng-leave.ng-leave-active {\n *   opacity:0;\n * }\n * ```\n *\n * (Note that the `ng-animate` CSS class is reserved and it cannot be applied on an element directly since ngAnimate will always remove\n * the CSS class once an animation has completed.)\n *\n *\n * ### The `ng-[event]-prepare` class\n *\n * This is a special class that can be used to prevent unwanted flickering / flash of content before\n * the actual animation starts. The class is added as soon as an animation is initialized, but removed\n * before the actual animation starts (after waiting for a $digest).\n * It is also only added for *structural* animations (`enter`, `move`, and `leave`).\n *\n * In practice, flickering can appear when nesting elements with structural animations such as `ngIf`\n * into elements that have class-based animations such as `ngClass`.\n *\n * ```html\n * <div ng-class=\"{red: myProp}\">\n *   <div ng-class=\"{blue: myProp}\">\n *     <div class=\"message\" ng-if=\"myProp\"></div>\n *   </div>\n * </div>\n * ```\n *\n * It is possible that during the `enter` animation, the `.message` div will be briefly visible before it starts animating.\n * In that case, you can add styles to the CSS that make sure the element stays hidden before the animation starts:\n *\n * ```css\n * .message.ng-enter-prepare {\n *   opacity: 0;\n * }\n *\n * ```\n *\n * ## JavaScript-based Animations\n *\n * ngAnimate also allows for animations to be consumed by JavaScript code. The approach is similar to CSS-based animations (where there is a shared\n * CSS class that is referenced in our HTML code) but in addition we need to register the JavaScript animation on the module. By making use of the\n * `module.animation()` module function we can register the animation.\n *\n * Let's see an example of a enter/leave animation using `ngRepeat`:\n *\n * ```html\n * <div ng-repeat=\"item in items\" class=\"slide\">\n *   {{ item }}\n * </div>\n * ```\n *\n * See the **slide** CSS class? Let's use that class to define an animation that we'll structure in our module code by using `module.animation`:\n *\n * ```js\n * myModule.animation('.slide', [function() {\n *   return {\n *     // make note that other events (like addClass/removeClass)\n *     // have different function input parameters\n *     enter: function(element, doneFn) {\n *       jQuery(element).fadeIn(1000, doneFn);\n *\n *       // remember to call doneFn so that angular\n *       // knows that the animation has concluded\n *     },\n *\n *     move: function(element, doneFn) {\n *       jQuery(element).fadeIn(1000, doneFn);\n *     },\n *\n *     leave: function(element, doneFn) {\n *       jQuery(element).fadeOut(1000, doneFn);\n *     }\n *   }\n * }]);\n * ```\n *\n * The nice thing about JS-based animations is that we can inject other services and make use of advanced animation libraries such as\n * greensock.js and velocity.js.\n *\n * If our animation code class-based (meaning that something like `ngClass`, `ngHide` and `ngShow` triggers it) then we can still define\n * our animations inside of the same registered animation, however, the function input arguments are a bit different:\n *\n * ```html\n * <div ng-class=\"color\" class=\"colorful\">\n *   this box is moody\n * </div>\n * <button ng-click=\"color='red'\">Change to red</button>\n * <button ng-click=\"color='blue'\">Change to blue</button>\n * <button ng-click=\"color='green'\">Change to green</button>\n * ```\n *\n * ```js\n * myModule.animation('.colorful', [function() {\n *   return {\n *     addClass: function(element, className, doneFn) {\n *       // do some cool animation and call the doneFn\n *     },\n *     removeClass: function(element, className, doneFn) {\n *       // do some cool animation and call the doneFn\n *     },\n *     setClass: function(element, addedClass, removedClass, doneFn) {\n *       // do some cool animation and call the doneFn\n *     }\n *   }\n * }]);\n * ```\n *\n * ## CSS + JS Animations Together\n *\n * AngularJS 1.4 and higher has taken steps to make the amalgamation of CSS and JS animations more flexible. However, unlike earlier versions of Angular,\n * defining CSS and JS animations to work off of the same CSS class will not work anymore. Therefore the example below will only result in **JS animations taking\n * charge of the animation**:\n *\n * ```html\n * <div ng-if=\"bool\" class=\"slide\">\n *   Slide in and out\n * </div>\n * ```\n *\n * ```js\n * myModule.animation('.slide', [function() {\n *   return {\n *     enter: function(element, doneFn) {\n *       jQuery(element).slideIn(1000, doneFn);\n *     }\n *   }\n * }]);\n * ```\n *\n * ```css\n * .slide.ng-enter {\n *   transition:0.5s linear all;\n *   transform:translateY(-100px);\n * }\n * .slide.ng-enter.ng-enter-active {\n *   transform:translateY(0);\n * }\n * ```\n *\n * Does this mean that CSS and JS animations cannot be used together? Do JS-based animations always have higher priority? We can make up for the\n * lack of CSS animations by using the `$animateCss` service to trigger our own tweaked-out, CSS-based animations directly from\n * our own JS-based animation code:\n *\n * ```js\n * myModule.animation('.slide', ['$animateCss', function($animateCss) {\n *   return {\n *     enter: function(element) {\n*        // this will trigger `.slide.ng-enter` and `.slide.ng-enter-active`.\n *       return $animateCss(element, {\n *         event: 'enter',\n *         structural: true\n *       });\n *     }\n *   }\n * }]);\n * ```\n *\n * The nice thing here is that we can save bandwidth by sticking to our CSS-based animation code and we don't need to rely on a 3rd-party animation framework.\n *\n * The `$animateCss` service is very powerful since we can feed in all kinds of extra properties that will be evaluated and fed into a CSS transition or\n * keyframe animation. For example if we wanted to animate the height of an element while adding and removing classes then we can do so by providing that\n * data into `$animateCss` directly:\n *\n * ```js\n * myModule.animation('.slide', ['$animateCss', function($animateCss) {\n *   return {\n *     enter: function(element) {\n *       return $animateCss(element, {\n *         event: 'enter',\n *         structural: true,\n *         addClass: 'maroon-setting',\n *         from: { height:0 },\n *         to: { height: 200 }\n *       });\n *     }\n *   }\n * }]);\n * ```\n *\n * Now we can fill in the rest via our transition CSS code:\n *\n * ```css\n * /&#42; the transition tells ngAnimate to make the animation happen &#42;/\n * .slide.ng-enter { transition:0.5s linear all; }\n *\n * /&#42; this extra CSS class will be absorbed into the transition\n * since the $animateCss code is adding the class &#42;/\n * .maroon-setting { background:red; }\n * ```\n *\n * And `$animateCss` will figure out the rest. Just make sure to have the `done()` callback fire the `doneFn` function to signal when the animation is over.\n *\n * To learn more about what's possible be sure to visit the {@link ngAnimate.$animateCss $animateCss service}.\n *\n * ## Animation Anchoring (via `ng-animate-ref`)\n *\n * ngAnimate in AngularJS 1.4 comes packed with the ability to cross-animate elements between\n * structural areas of an application (like views) by pairing up elements using an attribute\n * called `ng-animate-ref`.\n *\n * Let's say for example we have two views that are managed by `ng-view` and we want to show\n * that there is a relationship between two components situated in within these views. By using the\n * `ng-animate-ref` attribute we can identify that the two components are paired together and we\n * can then attach an animation, which is triggered when the view changes.\n *\n * Say for example we have the following template code:\n *\n * ```html\n * <!-- index.html -->\n * <div ng-view class=\"view-animation\">\n * </div>\n *\n * <!-- home.html -->\n * <a href=\"#/banner-page\">\n *   <img src=\"./banner.jpg\" class=\"banner\" ng-animate-ref=\"banner\">\n * </a>\n *\n * <!-- banner-page.html -->\n * <img src=\"./banner.jpg\" class=\"banner\" ng-animate-ref=\"banner\">\n * ```\n *\n * Now, when the view changes (once the link is clicked), ngAnimate will examine the\n * HTML contents to see if there is a match reference between any components in the view\n * that is leaving and the view that is entering. It will scan both the view which is being\n * removed (leave) and inserted (enter) to see if there are any paired DOM elements that\n * contain a matching ref value.\n *\n * The two images match since they share the same ref value. ngAnimate will now create a\n * transport element (which is a clone of the first image element) and it will then attempt\n * to animate to the position of the second image element in the next view. For the animation to\n * work a special CSS class called `ng-anchor` will be added to the transported element.\n *\n * We can now attach a transition onto the `.banner.ng-anchor` CSS class and then\n * ngAnimate will handle the entire transition for us as well as the addition and removal of\n * any changes of CSS classes between the elements:\n *\n * ```css\n * .banner.ng-anchor {\n *   /&#42; this animation will last for 1 second since there are\n *          two phases to the animation (an `in` and an `out` phase) &#42;/\n *   transition:0.5s linear all;\n * }\n * ```\n *\n * We also **must** include animations for the views that are being entered and removed\n * (otherwise anchoring wouldn't be possible since the new view would be inserted right away).\n *\n * ```css\n * .view-animation.ng-enter, .view-animation.ng-leave {\n *   transition:0.5s linear all;\n *   position:fixed;\n *   left:0;\n *   top:0;\n *   width:100%;\n * }\n * .view-animation.ng-enter {\n *   transform:translateX(100%);\n * }\n * .view-animation.ng-leave,\n * .view-animation.ng-enter.ng-enter-active {\n *   transform:translateX(0%);\n * }\n * .view-animation.ng-leave.ng-leave-active {\n *   transform:translateX(-100%);\n * }\n * ```\n *\n * Now we can jump back to the anchor animation. When the animation happens, there are two stages that occur:\n * an `out` and an `in` stage. The `out` stage happens first and that is when the element is animated away\n * from its origin. Once that animation is over then the `in` stage occurs which animates the\n * element to its destination. The reason why there are two animations is to give enough time\n * for the enter animation on the new element to be ready.\n *\n * The example above sets up a transition for both the in and out phases, but we can also target the out or\n * in phases directly via `ng-anchor-out` and `ng-anchor-in`.\n *\n * ```css\n * .banner.ng-anchor-out {\n *   transition: 0.5s linear all;\n *\n *   /&#42; the scale will be applied during the out animation,\n *          but will be animated away when the in animation runs &#42;/\n *   transform: scale(1.2);\n * }\n *\n * .banner.ng-anchor-in {\n *   transition: 1s linear all;\n * }\n * ```\n *\n *\n *\n *\n * ### Anchoring Demo\n *\n  <example module=\"anchoringExample\"\n           name=\"anchoringExample\"\n           id=\"anchoringExample\"\n           deps=\"angular-animate.js;angular-route.js\"\n           animations=\"true\">\n    <file name=\"index.html\">\n      <a href=\"#/\">Home</a>\n      <hr />\n      <div class=\"view-container\">\n        <div ng-view class=\"view\"></div>\n      </div>\n    </file>\n    <file name=\"script.js\">\n      angular.module('anchoringExample', ['ngAnimate', 'ngRoute'])\n        .config(['$routeProvider', function($routeProvider) {\n          $routeProvider.when('/', {\n            templateUrl: 'home.html',\n            controller: 'HomeController as home'\n          });\n          $routeProvider.when('/profile/:id', {\n            templateUrl: 'profile.html',\n            controller: 'ProfileController as profile'\n          });\n        }])\n        .run(['$rootScope', function($rootScope) {\n          $rootScope.records = [\n            { id:1, title: \"Miss Beulah Roob\" },\n            { id:2, title: \"Trent Morissette\" },\n            { id:3, title: \"Miss Ava Pouros\" },\n            { id:4, title: \"Rod Pouros\" },\n            { id:5, title: \"Abdul Rice\" },\n            { id:6, title: \"Laurie Rutherford Sr.\" },\n            { id:7, title: \"Nakia McLaughlin\" },\n            { id:8, title: \"Jordon Blanda DVM\" },\n            { id:9, title: \"Rhoda Hand\" },\n            { id:10, title: \"Alexandrea Sauer\" }\n          ];\n        }])\n        .controller('HomeController', [function() {\n          //empty\n        }])\n        .controller('ProfileController', ['$rootScope', '$routeParams', function($rootScope, $routeParams) {\n          var index = parseInt($routeParams.id, 10);\n          var record = $rootScope.records[index - 1];\n\n          this.title = record.title;\n          this.id = record.id;\n        }]);\n    </file>\n    <file name=\"home.html\">\n      <h2>Welcome to the home page</h1>\n      <p>Please click on an element</p>\n      <a class=\"record\"\n         ng-href=\"#/profile/{{ record.id }}\"\n         ng-animate-ref=\"{{ record.id }}\"\n         ng-repeat=\"record in records\">\n        {{ record.title }}\n      </a>\n    </file>\n    <file name=\"profile.html\">\n      <div class=\"profile record\" ng-animate-ref=\"{{ profile.id }}\">\n        {{ profile.title }}\n      </div>\n    </file>\n    <file name=\"animations.css\">\n      .record {\n        display:block;\n        font-size:20px;\n      }\n      .profile {\n        background:black;\n        color:white;\n        font-size:100px;\n      }\n      .view-container {\n        position:relative;\n      }\n      .view-container > .view.ng-animate {\n        position:absolute;\n        top:0;\n        left:0;\n        width:100%;\n        min-height:500px;\n      }\n      .view.ng-enter, .view.ng-leave,\n      .record.ng-anchor {\n        transition:0.5s linear all;\n      }\n      .view.ng-enter {\n        transform:translateX(100%);\n      }\n      .view.ng-enter.ng-enter-active, .view.ng-leave {\n        transform:translateX(0%);\n      }\n      .view.ng-leave.ng-leave-active {\n        transform:translateX(-100%);\n      }\n      .record.ng-anchor-out {\n        background:red;\n      }\n    </file>\n  </example>\n *\n * ### How is the element transported?\n *\n * When an anchor animation occurs, ngAnimate will clone the starting element and position it exactly where the starting\n * element is located on screen via absolute positioning. The cloned element will be placed inside of the root element\n * of the application (where ng-app was defined) and all of the CSS classes of the starting element will be applied. The\n * element will then animate into the `out` and `in` animations and will eventually reach the coordinates and match\n * the dimensions of the destination element. During the entire animation a CSS class of `.ng-animate-shim` will be applied\n * to both the starting and destination elements in order to hide them from being visible (the CSS styling for the class\n * is: `visibility:hidden`). Once the anchor reaches its destination then it will be removed and the destination element\n * will become visible since the shim class will be removed.\n *\n * ### How is the morphing handled?\n *\n * CSS Anchoring relies on transitions and keyframes and the internal code is intelligent enough to figure out\n * what CSS classes differ between the starting element and the destination element. These different CSS classes\n * will be added/removed on the anchor element and a transition will be applied (the transition that is provided\n * in the anchor class). Long story short, ngAnimate will figure out what classes to add and remove which will\n * make the transition of the element as smooth and automatic as possible. Be sure to use simple CSS classes that\n * do not rely on DOM nesting structure so that the anchor element appears the same as the starting element (since\n * the cloned element is placed inside of root element which is likely close to the body element).\n *\n * Note that if the root element is on the `<html>` element then the cloned node will be placed inside of body.\n *\n *\n * ## Using $animate in your directive code\n *\n * So far we've explored how to feed in animations into an Angular application, but how do we trigger animations within our own directives in our application?\n * By injecting the `$animate` service into our directive code, we can trigger structural and class-based hooks which can then be consumed by animations. Let's\n * imagine we have a greeting box that shows and hides itself when the data changes\n *\n * ```html\n * <greeting-box active=\"onOrOff\">Hi there</greeting-box>\n * ```\n *\n * ```js\n * ngModule.directive('greetingBox', ['$animate', function($animate) {\n *   return function(scope, element, attrs) {\n *     attrs.$observe('active', function(value) {\n *       value ? $animate.addClass(element, 'on') : $animate.removeClass(element, 'on');\n *     });\n *   });\n * }]);\n * ```\n *\n * Now the `on` CSS class is added and removed on the greeting box component. Now if we add a CSS class on top of the greeting box element\n * in our HTML code then we can trigger a CSS or JS animation to happen.\n *\n * ```css\n * /&#42; normally we would create a CSS class to reference on the element &#42;/\n * greeting-box.on { transition:0.5s linear all; background:green; color:white; }\n * ```\n *\n * The `$animate` service contains a variety of other methods like `enter`, `leave`, `animate` and `setClass`. To learn more about what's\n * possible be sure to visit the {@link ng.$animate $animate service API page}.\n *\n *\n * ## Callbacks and Promises\n *\n * When `$animate` is called it returns a promise that can be used to capture when the animation has ended. Therefore if we were to trigger\n * an animation (within our directive code) then we can continue performing directive and scope related activities after the animation has\n * ended by chaining onto the returned promise that animation method returns.\n *\n * ```js\n * // somewhere within the depths of the directive\n * $animate.enter(element, parent).then(function() {\n *   //the animation has completed\n * });\n * ```\n *\n * (Note that earlier versions of Angular prior to v1.4 required the promise code to be wrapped using `$scope.$apply(...)`. This is not the case\n * anymore.)\n *\n * In addition to the animation promise, we can also make use of animation-related callbacks within our directives and controller code by registering\n * an event listener using the `$animate` service. Let's say for example that an animation was triggered on our view\n * routing controller to hook into that:\n *\n * ```js\n * ngModule.controller('HomePageController', ['$animate', function($animate) {\n *   $animate.on('enter', ngViewElement, function(element) {\n *     // the animation for this route has completed\n *   }]);\n * }])\n * ```\n *\n * (Note that you will need to trigger a digest within the callback to get angular to notice any scope-related changes.)\n */\n\nvar copy;\nvar extend;\nvar forEach;\nvar isArray;\nvar isDefined;\nvar isElement;\nvar isFunction;\nvar isObject;\nvar isString;\nvar isUndefined;\nvar jqLite;\nvar noop;\n\n/**\n * @ngdoc service\n * @name $animate\n * @kind object\n *\n * @description\n * The ngAnimate `$animate` service documentation is the same for the core `$animate` service.\n *\n * Click here {@link ng.$animate to learn more about animations with `$animate`}.\n */\nangular.module('ngAnimate', [], function initAngularHelpers() {\n  // Access helpers from angular core.\n  // Do it inside a `config` block to ensure `window.angular` is available.\n  noop        = angular.noop;\n  copy        = angular.copy;\n  extend      = angular.extend;\n  jqLite      = angular.element;\n  forEach     = angular.forEach;\n  isArray     = angular.isArray;\n  isString    = angular.isString;\n  isObject    = angular.isObject;\n  isUndefined = angular.isUndefined;\n  isDefined   = angular.isDefined;\n  isFunction  = angular.isFunction;\n  isElement   = angular.isElement;\n})\n  .directive('ngAnimateSwap', ngAnimateSwapDirective)\n\n  .directive('ngAnimateChildren', $$AnimateChildrenDirective)\n  .factory('$$rAFScheduler', $$rAFSchedulerFactory)\n\n  .provider('$$animateQueue', $$AnimateQueueProvider)\n  .provider('$$animation', $$AnimationProvider)\n\n  .provider('$animateCss', $AnimateCssProvider)\n  .provider('$$animateCssDriver', $$AnimateCssDriverProvider)\n\n  .provider('$$animateJs', $$AnimateJsProvider)\n  .provider('$$animateJsDriver', $$AnimateJsDriverProvider);\n\n\n})(window, window.angular);\n","require('./angular-animate');\nmodule.exports = 'ngAnimate';\n","/*!\n * angular-chart.js - An angular.js wrapper for Chart.js\n * http://jtblin.github.io/angular-chart.js/\n * Version: 1.1.1\n *\n * Copyright 2016 Jerome Touffe-Blin\n * Released under the BSD-2-Clause license\n * https://github.com/jtblin/angular-chart.js/blob/master/LICENSE\n */\n(function (factory) {\n  'use strict';\n  if (typeof exports === 'object') {\n    // Node/CommonJS\n    module.exports = factory(\n      typeof angular !== 'undefined' ? angular : require('angular'),\n      typeof Chart !== 'undefined' ? Chart : require('chart.js'));\n  }  else if (typeof define === 'function' && define.amd) {\n    // AMD. Register as an anonymous module.\n    define(['angular', 'chart'], factory);\n  } else {\n    // Browser globals\n    if (typeof angular === 'undefined') {\n        throw new Error('AngularJS framework needs to be included, see https://angularjs.org/');\n    } else if (typeof Chart === 'undefined') {\n      throw new Error('Chart.js library needs to be included, see http://jtblin.github.io/angular-chart.js/');\n    }\n    factory(angular, Chart);\n  }\n}(function (angular, Chart) {\n  'use strict';\n\n  Chart.defaults.global.multiTooltipTemplate = '<%if (datasetLabel){%><%=datasetLabel%>: <%}%><%= value %>';\n  Chart.defaults.global.tooltips.mode = 'label';\n  Chart.defaults.global.elements.line.borderWidth = 2;\n  Chart.defaults.global.elements.rectangle.borderWidth = 2;\n  Chart.defaults.global.legend.display = false;\n  Chart.defaults.global.colors = [\n    '#97BBCD', // blue\n    '#DCDCDC', // light grey\n    '#F7464A', // red\n    '#46BFBD', // green\n    '#FDB45C', // yellow\n    '#949FB1', // grey\n    '#4D5360'  // dark grey\n  ];\n\n  var useExcanvas = typeof window.G_vmlCanvasManager === 'object' &&\n    window.G_vmlCanvasManager !== null &&\n    typeof window.G_vmlCanvasManager.initElement === 'function';\n\n  if (useExcanvas) Chart.defaults.global.animation = false;\n\n  return angular.module('chart.js', [])\n    .provider('ChartJs', ChartJsProvider)\n    .factory('ChartJsFactory', ['ChartJs', '$timeout', ChartJsFactory])\n    .directive('chartBase', ['ChartJsFactory', function (ChartJsFactory) { return new ChartJsFactory(); }])\n    .directive('chartLine', ['ChartJsFactory', function (ChartJsFactory) { return new ChartJsFactory('line'); }])\n    .directive('chartBar', ['ChartJsFactory', function (ChartJsFactory) { return new ChartJsFactory('bar'); }])\n    .directive('chartHorizontalBar', ['ChartJsFactory', function (ChartJsFactory) { return new ChartJsFactory('horizontalBar'); }])\n    .directive('chartRadar', ['ChartJsFactory', function (ChartJsFactory) { return new ChartJsFactory('radar'); }])\n    .directive('chartDoughnut', ['ChartJsFactory', function (ChartJsFactory) { return new ChartJsFactory('doughnut'); }])\n    .directive('chartPie', ['ChartJsFactory', function (ChartJsFactory) { return new ChartJsFactory('pie'); }])\n    .directive('chartPolarArea', ['ChartJsFactory', function (ChartJsFactory) { return new ChartJsFactory('polarArea'); }])\n    .directive('chartBubble', ['ChartJsFactory', function (ChartJsFactory) { return new ChartJsFactory('bubble'); }])\n    .name;\n\n  /**\n   * Wrapper for chart.js\n   * Allows configuring chart js using the provider\n   *\n   * angular.module('myModule', ['chart.js']).config(function(ChartJsProvider) {\n   *   ChartJsProvider.setOptions({ responsive: false });\n   *   ChartJsProvider.setOptions('Line', { responsive: true });\n   * })))\n   */\n  function ChartJsProvider () {\n    var options = { responsive: true };\n    var ChartJs = {\n      Chart: Chart,\n      getOptions: function (type) {\n        var typeOptions = type && options[type] || {};\n        return angular.extend({}, options, typeOptions);\n      }\n    };\n\n    /**\n     * Allow to set global options during configuration\n     */\n    this.setOptions = function (type, customOptions) {\n      // If no type was specified set option for the global object\n      if (! customOptions) {\n        customOptions = type;\n        options = angular.merge(options, customOptions);\n      } else {\n        // Set options for the specific chart\n        options[type] = angular.merge(options[type] || {}, customOptions);\n      }\n\n      angular.merge(ChartJs.Chart.defaults, options);\n    };\n\n    this.$get = function () {\n      return ChartJs;\n    };\n  }\n\n  function ChartJsFactory (ChartJs, $timeout) {\n    return function chart (type) {\n      return {\n        restrict: 'CA',\n        scope: {\n          chartGetColor: '=?',\n          chartType: '=',\n          chartData: '=?',\n          chartLabels: '=?',\n          chartOptions: '=?',\n          chartSeries: '=?',\n          chartColors: '=?',\n          chartClick: '=?',\n          chartHover: '=?',\n          chartDatasetOverride: '=?'\n        },\n        link: function (scope, elem/*, attrs */) {\n          if (useExcanvas) window.G_vmlCanvasManager.initElement(elem[0]);\n\n          // Order of setting \"watch\" matter\n          scope.$watch('chartData', watchData, true);\n          scope.$watch('chartSeries', watchOther, true);\n          scope.$watch('chartLabels', watchOther, true);\n          scope.$watch('chartOptions', watchOther, true);\n          scope.$watch('chartColors', watchOther, true);\n          scope.$watch('chartDatasetOverride', watchOther, true);\n          scope.$watch('chartType', watchType, false);\n\n          scope.$on('$destroy', function () {\n            destroyChart(scope);\n          });\n\n          scope.$on('$resize', function () {\n            if (scope.chart) scope.chart.resize();\n          });\n\n          function watchData (newVal, oldVal) {\n            if (! newVal || ! newVal.length || (Array.isArray(newVal[0]) && ! newVal[0].length)) {\n              destroyChart(scope);\n              return;\n            }\n            var chartType = type || scope.chartType;\n            if (! chartType) return;\n\n            if (scope.chart && canUpdateChart(newVal, oldVal))\n              return updateChart(newVal, scope);\n\n            createChart(chartType, scope, elem);\n          }\n\n          function watchOther (newVal, oldVal) {\n            if (isEmpty(newVal)) return;\n            if (angular.equals(newVal, oldVal)) return;\n            var chartType = type || scope.chartType;\n            if (! chartType) return;\n\n            // chart.update() doesn't work for series and labels\n            // so we have to re-create the chart entirely\n            createChart(chartType, scope, elem);\n          }\n\n          function watchType (newVal, oldVal) {\n            if (isEmpty(newVal)) return;\n            if (angular.equals(newVal, oldVal)) return;\n            createChart(newVal, scope, elem);\n          }\n        }\n      };\n    };\n\n    function createChart (type, scope, elem) {\n      var options = getChartOptions(type, scope);\n      if (! hasData(scope) || ! canDisplay(type, scope, elem, options)) return;\n\n      var cvs = elem[0];\n      var ctx = cvs.getContext('2d');\n\n      scope.chartGetColor = getChartColorFn(scope);\n      var data = getChartData(type, scope);\n      // Destroy old chart if it exists to avoid ghost charts issue\n      // https://github.com/jtblin/angular-chart.js/issues/187\n      destroyChart(scope);\n\n      scope.chart = new ChartJs.Chart(ctx, {\n        type: type,\n        data: data,\n        options: options\n      });\n      scope.$emit('chart-create', scope.chart);\n      bindEvents(cvs, scope);\n    }\n\n    function canUpdateChart (newVal, oldVal) {\n      if (newVal && oldVal && newVal.length && oldVal.length) {\n        return Array.isArray(newVal[0]) ?\n        newVal.length === oldVal.length && newVal.every(function (element, index) {\n          return element.length === oldVal[index].length; }) :\n          oldVal.reduce(sum, 0) > 0 ? newVal.length === oldVal.length : false;\n      }\n      return false;\n    }\n\n    function sum (carry, val) {\n      return carry + val;\n    }\n\n    function getEventHandler (scope, action, triggerOnlyOnChange) {\n      var lastState = {\n        point: void 0,\n        points: void 0\n      };\n      return function (evt) {\n        var atEvent = scope.chart.getElementAtEvent || scope.chart.getPointAtEvent;\n        var atEvents = scope.chart.getElementsAtEvent || scope.chart.getPointsAtEvent;\n        if (atEvents) {\n          var points = atEvents.call(scope.chart, evt);\n          var point = atEvent ? atEvent.call(scope.chart, evt)[0] : void 0;\n\n          if (triggerOnlyOnChange === false ||\n            (! angular.equals(lastState.points, points) && ! angular.equals(lastState.point, point))\n          ) {\n            lastState.point = point;\n            lastState.points = points;\n            scope[action](points, evt, point);\n          }\n        }\n      };\n    }\n\n    function getColors (type, scope) {\n      var colors = angular.copy(scope.chartColors ||\n        ChartJs.getOptions(type).chartColors ||\n        Chart.defaults.global.colors\n      );\n      var notEnoughColors = colors.length < scope.chartData.length;\n      while (colors.length < scope.chartData.length) {\n        colors.push(scope.chartGetColor());\n      }\n      // mutate colors in this case as we don't want\n      // the colors to change on each refresh\n      if (notEnoughColors) scope.chartColors = colors;\n      return colors.map(convertColor);\n    }\n\n    function convertColor (color) {\n      // Allows RGB and RGBA colors to be input as a string: e.g.: \"rgb(159,204,0)\", \"rgba(159,204,0, 0.5)\"\n      if (typeof color === 'string' && color[0] === 'r') return getColor(rgbStringToRgb(color));\n      // Allows hex colors to be input as a string.\n      if (typeof color === 'string' && color[0] === '#') return getColor(hexToRgb(color.substr(1)));\n      // Allows colors to be input as an object, bypassing getColor() entirely\n      if (typeof color === 'object' && color !== null) return color;\n      return getRandomColor();\n    }\n\n    function getRandomColor () {\n      var color = [getRandomInt(0, 255), getRandomInt(0, 255), getRandomInt(0, 255)];\n      return getColor(color);\n    }\n\n    function getColor (color) {\n      var alpha = color[3] || 1;\n      color = color.slice(0, 3);\n      return {\n        backgroundColor: rgba(color, 0.2),\n        pointBackgroundColor: rgba(color, alpha),\n        pointHoverBackgroundColor: rgba(color, 0.8),\n        borderColor: rgba(color, alpha),\n        pointBorderColor: '#fff',\n        pointHoverBorderColor: rgba(color, alpha)\n      };\n    }\n\n    function getRandomInt (min, max) {\n      return Math.floor(Math.random() * (max - min + 1)) + min;\n    }\n\n    function rgba (color, alpha) {\n      // rgba not supported by IE8\n      return useExcanvas ? 'rgb(' + color.join(',') + ')' : 'rgba(' + color.concat(alpha).join(',') + ')';\n    }\n\n    // Credit: http://stackoverflow.com/a/11508164/1190235\n    function hexToRgb (hex) {\n      var bigint = parseInt(hex, 16),\n        r = (bigint >> 16) & 255,\n        g = (bigint >> 8) & 255,\n        b = bigint & 255;\n\n      return [r, g, b];\n    }\n\n    function rgbStringToRgb (color) {\n      var match = color.match(/^rgba?\\(([\\d,.]+)\\)$/);\n      if (! match) throw new Error('Cannot parse rgb value');\n      color = match[1].split(',');\n      return color.map(Number);\n    }\n\n    function hasData (scope) {\n      return scope.chartData && scope.chartData.length;\n    }\n\n    function getChartColorFn (scope) {\n      return typeof scope.chartGetColor === 'function' ? scope.chartGetColor : getRandomColor;\n    }\n\n    function getChartData (type, scope) {\n      var colors = getColors(type, scope);\n      return Array.isArray(scope.chartData[0]) ?\n        getDataSets(scope.chartLabels, scope.chartData, scope.chartSeries || [], colors, scope.chartDatasetOverride) :\n        getData(scope.chartLabels, scope.chartData, colors, scope.chartDatasetOverride);\n    }\n\n    function getDataSets (labels, data, series, colors, datasetOverride) {\n      return {\n        labels: labels,\n        datasets: data.map(function (item, i) {\n          var dataset = angular.extend({}, colors[i], {\n            label: series[i],\n            data: item\n          });\n          if (datasetOverride && datasetOverride.length >= i) {\n            angular.merge(dataset, datasetOverride[i]);\n          }\n          return dataset;\n        })\n      };\n    }\n\n    function getData (labels, data, colors, datasetOverride) {\n      var dataset = {\n        labels: labels,\n        datasets: [{\n          data: data,\n          backgroundColor: colors.map(function (color) {\n            return color.pointBackgroundColor;\n          }),\n          hoverBackgroundColor: colors.map(function (color) {\n            return color.backgroundColor;\n          })\n        }]\n      };\n      if (datasetOverride) {\n        angular.merge(dataset.datasets[0], datasetOverride);\n      }\n      return dataset;\n    }\n\n    function getChartOptions (type, scope) {\n      return angular.extend({}, ChartJs.getOptions(type), scope.chartOptions);\n    }\n\n    function bindEvents (cvs, scope) {\n      cvs.onclick = scope.chartClick ? getEventHandler(scope, 'chartClick', false) : angular.noop;\n      cvs.onmousemove = scope.chartHover ? getEventHandler(scope, 'chartHover', true) : angular.noop;\n    }\n\n    function updateChart (values, scope) {\n      if (Array.isArray(scope.chartData[0])) {\n        scope.chart.data.datasets.forEach(function (dataset, i) {\n          dataset.data = values[i];\n        });\n      } else {\n        scope.chart.data.datasets[0].data = values;\n      }\n\n      scope.chart.update();\n      scope.$emit('chart-update', scope.chart);\n    }\n\n    function isEmpty (value) {\n      return ! value ||\n        (Array.isArray(value) && ! value.length) ||\n        (typeof value === 'object' && ! Object.keys(value).length);\n    }\n\n    function canDisplay (type, scope, elem, options) {\n      // TODO: check parent?\n      if (options.responsive && elem[0].clientHeight === 0) {\n        $timeout(function () {\n          createChart(type, scope, elem);\n        }, 50, false);\n        return false;\n      }\n      return true;\n    }\n\n    function destroyChart(scope) {\n      if(! scope.chart) return;\n      scope.chart.destroy();\n      scope.$emit('chart-destroy', scope.chart);\n    }\n  }\n}));\n","/**\n * @namespace Chart\n */\nvar Chart = require('./core/core.js')();\n\nrequire('./core/core.helpers')(Chart);\nrequire('./core/core.canvasHelpers')(Chart);\nrequire('./core/core.element')(Chart);\nrequire('./core/core.animation')(Chart);\nrequire('./core/core.controller')(Chart);\nrequire('./core/core.datasetController')(Chart);\nrequire('./core/core.layoutService')(Chart);\nrequire('./core/core.scaleService')(Chart);\nrequire('./core/core.plugin.js')(Chart);\nrequire('./core/core.scale')(Chart);\nrequire('./core/core.title')(Chart);\nrequire('./core/core.legend')(Chart);\nrequire('./core/core.tooltip')(Chart);\n\nrequire('./elements/element.arc')(Chart);\nrequire('./elements/element.line')(Chart);\nrequire('./elements/element.point')(Chart);\nrequire('./elements/element.rectangle')(Chart);\n\nrequire('./scales/scale.linearbase.js')(Chart);\nrequire('./scales/scale.category')(Chart);\nrequire('./scales/scale.linear')(Chart);\nrequire('./scales/scale.logarithmic')(Chart);\nrequire('./scales/scale.radialLinear')(Chart);\nrequire('./scales/scale.time')(Chart);\n\n// Controllers must be loaded after elements\n// See Chart.core.datasetController.dataElementType\nrequire('./controllers/controller.bar')(Chart);\nrequire('./controllers/controller.bubble')(Chart);\nrequire('./controllers/controller.doughnut')(Chart);\nrequire('./controllers/controller.line')(Chart);\nrequire('./controllers/controller.polarArea')(Chart);\nrequire('./controllers/controller.radar')(Chart);\n\nrequire('./charts/Chart.Bar')(Chart);\nrequire('./charts/Chart.Bubble')(Chart);\nrequire('./charts/Chart.Doughnut')(Chart);\nrequire('./charts/Chart.Line')(Chart);\nrequire('./charts/Chart.PolarArea')(Chart);\nrequire('./charts/Chart.Radar')(Chart);\nrequire('./charts/Chart.Scatter')(Chart);\n\nwindow.Chart = module.exports = Chart;\n","'use strict';\n\nmodule.exports = function(Chart) {\n\n\tChart.Bar = function(context, config) {\n\t\tconfig.type = 'bar';\n\n\t\treturn new Chart(context, config);\n\t};\n\n};\n","'use strict';\n\nmodule.exports = function(Chart) {\n\n\tChart.Bubble = function(context, config) {\n\t\tconfig.type = 'bubble';\n\t\treturn new Chart(context, config);\n\t};\n\n};\n","'use strict';\n\nmodule.exports = function(Chart) {\n\n\tChart.Doughnut = function(context, config) {\n\t\tconfig.type = 'doughnut';\n\n\t\treturn new Chart(context, config);\n\t};\n\n};\n","'use strict';\n\nmodule.exports = function(Chart) {\n\n\tChart.Line = function(context, config) {\n\t\tconfig.type = 'line';\n\n\t\treturn new Chart(context, config);\n\t};\n\n};\n","'use strict';\n\nmodule.exports = function(Chart) {\n\n\tChart.PolarArea = function(context, config) {\n\t\tconfig.type = 'polarArea';\n\n\t\treturn new Chart(context, config);\n\t};\n\n};\n","'use strict';\n\nmodule.exports = function(Chart) {\n\n\tChart.Radar = function(context, config) {\n\t\tconfig.options = Chart.helpers.configMerge({aspectRatio: 1}, config.options);\n\t\tconfig.type = 'radar';\n\n\t\treturn new Chart(context, config);\n\t};\n\n};\n","'use strict';\n\nmodule.exports = function(Chart) {\n\n\tvar defaultConfig = {\n\t\thover: {\n\t\t\tmode: 'single'\n\t\t},\n\n\t\tscales: {\n\t\t\txAxes: [{\n\t\t\t\ttype: 'linear', // scatter should not use a category axis\n\t\t\t\tposition: 'bottom',\n\t\t\t\tid: 'x-axis-1' // need an ID so datasets can reference the scale\n\t\t\t}],\n\t\t\tyAxes: [{\n\t\t\t\ttype: 'linear',\n\t\t\t\tposition: 'left',\n\t\t\t\tid: 'y-axis-1'\n\t\t\t}]\n\t\t},\n\n\t\ttooltips: {\n\t\t\tcallbacks: {\n\t\t\t\ttitle: function() {\n\t\t\t\t\t// Title doesn't make sense for scatter since we format the data as a point\n\t\t\t\t\treturn '';\n\t\t\t\t},\n\t\t\t\tlabel: function(tooltipItem) {\n\t\t\t\t\treturn '(' + tooltipItem.xLabel + ', ' + tooltipItem.yLabel + ')';\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t// Register the default config for this type\n\tChart.defaults.scatter = defaultConfig;\n\n\t// Scatter charts use line controllers\n\tChart.controllers.scatter = Chart.controllers.line;\n\n\tChart.Scatter = function(context, config) {\n\t\tconfig.type = 'scatter';\n\t\treturn new Chart(context, config);\n\t};\n\n};\n","'use strict';\n\nmodule.exports = function(Chart) {\n\n\tvar helpers = Chart.helpers;\n\n\tChart.defaults.bar = {\n\t\thover: {\n\t\t\tmode: 'label'\n\t\t},\n\n\t\tscales: {\n\t\t\txAxes: [{\n\t\t\t\ttype: 'category',\n\n\t\t\t\t// Specific to Bar Controller\n\t\t\t\tcategoryPercentage: 0.8,\n\t\t\t\tbarPercentage: 0.9,\n\n\t\t\t\t// grid line settings\n\t\t\t\tgridLines: {\n\t\t\t\t\toffsetGridLines: true\n\t\t\t\t}\n\t\t\t}],\n\t\t\tyAxes: [{\n\t\t\t\ttype: 'linear'\n\t\t\t}]\n\t\t}\n\t};\n\n\tChart.controllers.bar = Chart.DatasetController.extend({\n\n\t\tdataElementType: Chart.elements.Rectangle,\n\n\t\tinitialize: function(chart, datasetIndex) {\n\t\t\tChart.DatasetController.prototype.initialize.call(this, chart, datasetIndex);\n\n\t\t\t// Use this to indicate that this is a bar dataset.\n\t\t\tthis.getMeta().bar = true;\n\t\t},\n\n\t\t// Get the number of datasets that display bars. We use this to correctly calculate the bar width\n\t\tgetBarCount: function() {\n\t\t\tvar me = this;\n\t\t\tvar barCount = 0;\n\t\t\thelpers.each(me.chart.data.datasets, function(dataset, datasetIndex) {\n\t\t\t\tvar meta = me.chart.getDatasetMeta(datasetIndex);\n\t\t\t\tif (meta.bar && me.chart.isDatasetVisible(datasetIndex)) {\n\t\t\t\t\t++barCount;\n\t\t\t\t}\n\t\t\t}, me);\n\t\t\treturn barCount;\n\t\t},\n\n\t\tupdate: function(reset) {\n\t\t\tvar me = this;\n\t\t\thelpers.each(me.getMeta().data, function(rectangle, index) {\n\t\t\t\tme.updateElement(rectangle, index, reset);\n\t\t\t}, me);\n\t\t},\n\n\t\tupdateElement: function(rectangle, index, reset) {\n\t\t\tvar me = this;\n\t\t\tvar meta = me.getMeta();\n\t\t\tvar xScale = me.getScaleForId(meta.xAxisID);\n\t\t\tvar yScale = me.getScaleForId(meta.yAxisID);\n\t\t\tvar scaleBase = yScale.getBasePixel();\n\t\t\tvar rectangleElementOptions = me.chart.options.elements.rectangle;\n\t\t\tvar custom = rectangle.custom || {};\n\t\t\tvar dataset = me.getDataset();\n\n\t\t\thelpers.extend(rectangle, {\n\t\t\t\t// Utility\n\t\t\t\t_xScale: xScale,\n\t\t\t\t_yScale: yScale,\n\t\t\t\t_datasetIndex: me.index,\n\t\t\t\t_index: index,\n\n\t\t\t\t// Desired view properties\n\t\t\t\t_model: {\n\t\t\t\t\tx: me.calculateBarX(index, me.index),\n\t\t\t\t\ty: reset ? scaleBase : me.calculateBarY(index, me.index),\n\n\t\t\t\t\t// Tooltip\n\t\t\t\t\tlabel: me.chart.data.labels[index],\n\t\t\t\t\tdatasetLabel: dataset.label,\n\n\t\t\t\t\t// Appearance\n\t\t\t\t\tbase: reset ? scaleBase : me.calculateBarBase(me.index, index),\n\t\t\t\t\twidth: me.calculateBarWidth(index),\n\t\t\t\t\tbackgroundColor: custom.backgroundColor ? custom.backgroundColor : helpers.getValueAtIndexOrDefault(dataset.backgroundColor, index, rectangleElementOptions.backgroundColor),\n\t\t\t\t\tborderSkipped: custom.borderSkipped ? custom.borderSkipped : rectangleElementOptions.borderSkipped,\n\t\t\t\t\tborderColor: custom.borderColor ? custom.borderColor : helpers.getValueAtIndexOrDefault(dataset.borderColor, index, rectangleElementOptions.borderColor),\n\t\t\t\t\tborderWidth: custom.borderWidth ? custom.borderWidth : helpers.getValueAtIndexOrDefault(dataset.borderWidth, index, rectangleElementOptions.borderWidth)\n\t\t\t\t}\n\t\t\t});\n\t\t\trectangle.pivot();\n\t\t},\n\n\t\tcalculateBarBase: function(datasetIndex, index) {\n\t\t\tvar me = this;\n\t\t\tvar meta = me.getMeta();\n\t\t\tvar yScale = me.getScaleForId(meta.yAxisID);\n\t\t\tvar base = 0;\n\n\t\t\tif (yScale.options.stacked) {\n\t\t\t\tvar chart = me.chart;\n\t\t\t\tvar datasets = chart.data.datasets;\n\t\t\t\tvar value = Number(datasets[datasetIndex].data[index]);\n\n\t\t\t\tfor (var i = 0; i < datasetIndex; i++) {\n\t\t\t\t\tvar currentDs = datasets[i];\n\t\t\t\t\tvar currentDsMeta = chart.getDatasetMeta(i);\n\t\t\t\t\tif (currentDsMeta.bar && currentDsMeta.yAxisID === yScale.id && chart.isDatasetVisible(i)) {\n\t\t\t\t\t\tvar currentVal = Number(currentDs.data[index]);\n\t\t\t\t\t\tbase += value < 0 ? Math.min(currentVal, 0) : Math.max(currentVal, 0);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn yScale.getPixelForValue(base);\n\t\t\t}\n\n\t\t\treturn yScale.getBasePixel();\n\t\t},\n\n\t\tgetRuler: function(index) {\n\t\t\tvar me = this;\n\t\t\tvar meta = me.getMeta();\n\t\t\tvar xScale = me.getScaleForId(meta.xAxisID);\n\t\t\tvar datasetCount = me.getBarCount();\n\n\t\t\tvar tickWidth;\n\n\t\t\tif (xScale.options.type === 'category') {\n\t\t\t\ttickWidth = xScale.getPixelForTick(index + 1) - xScale.getPixelForTick(index);\n\t\t\t} else {\n\t\t\t\t// Average width\n\t\t\t\ttickWidth = xScale.width / xScale.ticks.length;\n\t\t\t}\n\t\t\tvar categoryWidth = tickWidth * xScale.options.categoryPercentage;\n\t\t\tvar categorySpacing = (tickWidth - (tickWidth * xScale.options.categoryPercentage)) / 2;\n\t\t\tvar fullBarWidth = categoryWidth / datasetCount;\n\n\t\t\tif (xScale.ticks.length !== me.chart.data.labels.length) {\n\t\t\t\tvar perc = xScale.ticks.length / me.chart.data.labels.length;\n\t\t\t\tfullBarWidth = fullBarWidth * perc;\n\t\t\t}\n\n\t\t\tvar barWidth = fullBarWidth * xScale.options.barPercentage;\n\t\t\tvar barSpacing = fullBarWidth - (fullBarWidth * xScale.options.barPercentage);\n\n\t\t\treturn {\n\t\t\t\tdatasetCount: datasetCount,\n\t\t\t\ttickWidth: tickWidth,\n\t\t\t\tcategoryWidth: categoryWidth,\n\t\t\t\tcategorySpacing: categorySpacing,\n\t\t\t\tfullBarWidth: fullBarWidth,\n\t\t\t\tbarWidth: barWidth,\n\t\t\t\tbarSpacing: barSpacing\n\t\t\t};\n\t\t},\n\n\t\tcalculateBarWidth: function(index) {\n\t\t\tvar xScale = this.getScaleForId(this.getMeta().xAxisID);\n\t\t\tif (xScale.options.barThickness) {\n\t\t\t\treturn xScale.options.barThickness;\n\t\t\t}\n\t\t\tvar ruler = this.getRuler(index);\n\t\t\treturn xScale.options.stacked ? ruler.categoryWidth : ruler.barWidth;\n\t\t},\n\n\t\t// Get bar index from the given dataset index accounting for the fact that not all bars are visible\n\t\tgetBarIndex: function(datasetIndex) {\n\t\t\tvar barIndex = 0;\n\t\t\tvar meta, j;\n\n\t\t\tfor (j = 0; j < datasetIndex; ++j) {\n\t\t\t\tmeta = this.chart.getDatasetMeta(j);\n\t\t\t\tif (meta.bar && this.chart.isDatasetVisible(j)) {\n\t\t\t\t\t++barIndex;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn barIndex;\n\t\t},\n\n\t\tcalculateBarX: function(index, datasetIndex) {\n\t\t\tvar me = this;\n\t\t\tvar meta = me.getMeta();\n\t\t\tvar xScale = me.getScaleForId(meta.xAxisID);\n\t\t\tvar barIndex = me.getBarIndex(datasetIndex);\n\n\t\t\tvar ruler = me.getRuler(index);\n\t\t\tvar leftTick = xScale.getPixelForValue(null, index, datasetIndex, me.chart.isCombo);\n\t\t\tleftTick -= me.chart.isCombo ? (ruler.tickWidth / 2) : 0;\n\n\t\t\tif (xScale.options.stacked) {\n\t\t\t\treturn leftTick + (ruler.categoryWidth / 2) + ruler.categorySpacing;\n\t\t\t}\n\n\t\t\treturn leftTick +\n\t\t\t\t(ruler.barWidth / 2) +\n\t\t\t\truler.categorySpacing +\n\t\t\t\t(ruler.barWidth * barIndex) +\n\t\t\t\t(ruler.barSpacing / 2) +\n\t\t\t\t(ruler.barSpacing * barIndex);\n\t\t},\n\n\t\tcalculateBarY: function(index, datasetIndex) {\n\t\t\tvar me = this;\n\t\t\tvar meta = me.getMeta();\n\t\t\tvar yScale = me.getScaleForId(meta.yAxisID);\n\t\t\tvar value = Number(me.getDataset().data[index]);\n\n\t\t\tif (yScale.options.stacked) {\n\n\t\t\t\tvar sumPos = 0,\n\t\t\t\t\tsumNeg = 0;\n\n\t\t\t\tfor (var i = 0; i < datasetIndex; i++) {\n\t\t\t\t\tvar ds = me.chart.data.datasets[i];\n\t\t\t\t\tvar dsMeta = me.chart.getDatasetMeta(i);\n\t\t\t\t\tif (dsMeta.bar && dsMeta.yAxisID === yScale.id && me.chart.isDatasetVisible(i)) {\n\t\t\t\t\t\tvar stackedVal = Number(ds.data[index]);\n\t\t\t\t\t\tif (stackedVal < 0) {\n\t\t\t\t\t\t\tsumNeg += stackedVal || 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tsumPos += stackedVal || 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (value < 0) {\n\t\t\t\t\treturn yScale.getPixelForValue(sumNeg + value);\n\t\t\t\t}\n\t\t\t\treturn yScale.getPixelForValue(sumPos + value);\n\t\t\t}\n\n\t\t\treturn yScale.getPixelForValue(value);\n\t\t},\n\n\t\tdraw: function(ease) {\n\t\t\tvar me = this;\n\t\t\tvar easingDecimal = ease || 1;\n\t\t\thelpers.each(me.getMeta().data, function(rectangle, index) {\n\t\t\t\tvar d = me.getDataset().data[index];\n\t\t\t\tif (d !== null && d !== undefined && !isNaN(d)) {\n\t\t\t\t\trectangle.transition(easingDecimal).draw();\n\t\t\t\t}\n\t\t\t}, me);\n\t\t},\n\n\t\tsetHoverStyle: function(rectangle) {\n\t\t\tvar dataset = this.chart.data.datasets[rectangle._datasetIndex];\n\t\t\tvar index = rectangle._index;\n\n\t\t\tvar custom = rectangle.custom || {};\n\t\t\tvar model = rectangle._model;\n\t\t\tmodel.backgroundColor = custom.hoverBackgroundColor ? custom.hoverBackgroundColor : helpers.getValueAtIndexOrDefault(dataset.hoverBackgroundColor, index, helpers.getHoverColor(model.backgroundColor));\n\t\t\tmodel.borderColor = custom.hoverBorderColor ? custom.hoverBorderColor : helpers.getValueAtIndexOrDefault(dataset.hoverBorderColor, index, helpers.getHoverColor(model.borderColor));\n\t\t\tmodel.borderWidth = custom.hoverBorderWidth ? custom.hoverBorderWidth : helpers.getValueAtIndexOrDefault(dataset.hoverBorderWidth, index, model.borderWidth);\n\t\t},\n\n\t\tremoveHoverStyle: function(rectangle) {\n\t\t\tvar dataset = this.chart.data.datasets[rectangle._datasetIndex];\n\t\t\tvar index = rectangle._index;\n\t\t\tvar custom = rectangle.custom || {};\n\t\t\tvar model = rectangle._model;\n\t\t\tvar rectangleElementOptions = this.chart.options.elements.rectangle;\n\n\t\t\tmodel.backgroundColor = custom.backgroundColor ? custom.backgroundColor : helpers.getValueAtIndexOrDefault(dataset.backgroundColor, index, rectangleElementOptions.backgroundColor);\n\t\t\tmodel.borderColor = custom.borderColor ? custom.borderColor : helpers.getValueAtIndexOrDefault(dataset.borderColor, index, rectangleElementOptions.borderColor);\n\t\t\tmodel.borderWidth = custom.borderWidth ? custom.borderWidth : helpers.getValueAtIndexOrDefault(dataset.borderWidth, index, rectangleElementOptions.borderWidth);\n\t\t}\n\n\t});\n\n\n\t// including horizontalBar in the bar file, instead of a file of its own\n\t// it extends bar (like pie extends doughnut)\n\tChart.defaults.horizontalBar = {\n\t\thover: {\n\t\t\tmode: 'label'\n\t\t},\n\n\t\tscales: {\n\t\t\txAxes: [{\n\t\t\t\ttype: 'linear',\n\t\t\t\tposition: 'bottom'\n\t\t\t}],\n\t\t\tyAxes: [{\n\t\t\t\tposition: 'left',\n\t\t\t\ttype: 'category',\n\n\t\t\t\t// Specific to Horizontal Bar Controller\n\t\t\t\tcategoryPercentage: 0.8,\n\t\t\t\tbarPercentage: 0.9,\n\n\t\t\t\t// grid line settings\n\t\t\t\tgridLines: {\n\t\t\t\t\toffsetGridLines: true\n\t\t\t\t}\n\t\t\t}]\n\t\t},\n\t\telements: {\n\t\t\trectangle: {\n\t\t\t\tborderSkipped: 'left'\n\t\t\t}\n\t\t},\n\t\ttooltips: {\n\t\t\tcallbacks: {\n\t\t\t\ttitle: function(tooltipItems, data) {\n\t\t\t\t\t// Pick first xLabel for now\n\t\t\t\t\tvar title = '';\n\n\t\t\t\t\tif (tooltipItems.length > 0) {\n\t\t\t\t\t\tif (tooltipItems[0].yLabel) {\n\t\t\t\t\t\t\ttitle = tooltipItems[0].yLabel;\n\t\t\t\t\t\t} else if (data.labels.length > 0 && tooltipItems[0].index < data.labels.length) {\n\t\t\t\t\t\t\ttitle = data.labels[tooltipItems[0].index];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn title;\n\t\t\t\t},\n\t\t\t\tlabel: function(tooltipItem, data) {\n\t\t\t\t\tvar datasetLabel = data.datasets[tooltipItem.datasetIndex].label || '';\n\t\t\t\t\treturn datasetLabel + ': ' + tooltipItem.xLabel;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\tChart.controllers.horizontalBar = Chart.controllers.bar.extend({\n\t\tupdateElement: function(rectangle, index, reset) {\n\t\t\tvar me = this;\n\t\t\tvar meta = me.getMeta();\n\t\t\tvar xScale = me.getScaleForId(meta.xAxisID);\n\t\t\tvar yScale = me.getScaleForId(meta.yAxisID);\n\t\t\tvar scaleBase = xScale.getBasePixel();\n\t\t\tvar custom = rectangle.custom || {};\n\t\t\tvar dataset = me.getDataset();\n\t\t\tvar rectangleElementOptions = me.chart.options.elements.rectangle;\n\n\t\t\thelpers.extend(rectangle, {\n\t\t\t\t// Utility\n\t\t\t\t_xScale: xScale,\n\t\t\t\t_yScale: yScale,\n\t\t\t\t_datasetIndex: me.index,\n\t\t\t\t_index: index,\n\n\t\t\t\t// Desired view properties\n\t\t\t\t_model: {\n\t\t\t\t\tx: reset ? scaleBase : me.calculateBarX(index, me.index),\n\t\t\t\t\ty: me.calculateBarY(index, me.index),\n\n\t\t\t\t\t// Tooltip\n\t\t\t\t\tlabel: me.chart.data.labels[index],\n\t\t\t\t\tdatasetLabel: dataset.label,\n\n\t\t\t\t\t// Appearance\n\t\t\t\t\tbase: reset ? scaleBase : me.calculateBarBase(me.index, index),\n\t\t\t\t\theight: me.calculateBarHeight(index),\n\t\t\t\t\tbackgroundColor: custom.backgroundColor ? custom.backgroundColor : helpers.getValueAtIndexOrDefault(dataset.backgroundColor, index, rectangleElementOptions.backgroundColor),\n\t\t\t\t\tborderSkipped: custom.borderSkipped ? custom.borderSkipped : rectangleElementOptions.borderSkipped,\n\t\t\t\t\tborderColor: custom.borderColor ? custom.borderColor : helpers.getValueAtIndexOrDefault(dataset.borderColor, index, rectangleElementOptions.borderColor),\n\t\t\t\t\tborderWidth: custom.borderWidth ? custom.borderWidth : helpers.getValueAtIndexOrDefault(dataset.borderWidth, index, rectangleElementOptions.borderWidth)\n\t\t\t\t},\n\n\t\t\t\tdraw: function() {\n\t\t\t\t\tvar ctx = this._chart.ctx;\n\t\t\t\t\tvar vm = this._view;\n\n\t\t\t\t\tvar halfHeight = vm.height / 2,\n\t\t\t\t\t\ttopY = vm.y - halfHeight,\n\t\t\t\t\t\tbottomY = vm.y + halfHeight,\n\t\t\t\t\t\tright = vm.base - (vm.base - vm.x),\n\t\t\t\t\t\thalfStroke = vm.borderWidth / 2;\n\n\t\t\t\t\t// Canvas doesn't allow us to stroke inside the width so we can\n\t\t\t\t\t// adjust the sizes to fit if we're setting a stroke on the line\n\t\t\t\t\tif (vm.borderWidth) {\n\t\t\t\t\t\ttopY += halfStroke;\n\t\t\t\t\t\tbottomY -= halfStroke;\n\t\t\t\t\t\tright += halfStroke;\n\t\t\t\t\t}\n\n\t\t\t\t\tctx.beginPath();\n\n\t\t\t\t\tctx.fillStyle = vm.backgroundColor;\n\t\t\t\t\tctx.strokeStyle = vm.borderColor;\n\t\t\t\t\tctx.lineWidth = vm.borderWidth;\n\n\t\t\t\t\t// Corner points, from bottom-left to bottom-right clockwise\n\t\t\t\t\t// | 1 2 |\n\t\t\t\t\t// | 0 3 |\n\t\t\t\t\tvar corners = [\n\t\t\t\t\t\t[vm.base, bottomY],\n\t\t\t\t\t\t[vm.base, topY],\n\t\t\t\t\t\t[right, topY],\n\t\t\t\t\t\t[right, bottomY]\n\t\t\t\t\t];\n\n\t\t\t\t\t// Find first (starting) corner with fallback to 'bottom'\n\t\t\t\t\tvar borders = ['bottom', 'left', 'top', 'right'];\n\t\t\t\t\tvar startCorner = borders.indexOf(vm.borderSkipped, 0);\n\t\t\t\t\tif (startCorner === -1) {\n\t\t\t\t\t\tstartCorner = 0;\n\t\t\t\t\t}\n\n\t\t\t\t\tfunction cornerAt(cornerIndex) {\n\t\t\t\t\t\treturn corners[(startCorner + cornerIndex) % 4];\n\t\t\t\t\t}\n\n\t\t\t\t\t// Draw rectangle from 'startCorner'\n\t\t\t\t\tctx.moveTo.apply(ctx, cornerAt(0));\n\t\t\t\t\tfor (var i = 1; i < 4; i++) {\n\t\t\t\t\t\tctx.lineTo.apply(ctx, cornerAt(i));\n\t\t\t\t\t}\n\n\t\t\t\t\tctx.fill();\n\t\t\t\t\tif (vm.borderWidth) {\n\t\t\t\t\t\tctx.stroke();\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\tinRange: function(mouseX, mouseY) {\n\t\t\t\t\tvar vm = this._view;\n\t\t\t\t\tvar inRange = false;\n\n\t\t\t\t\tif (vm) {\n\t\t\t\t\t\tif (vm.x < vm.base) {\n\t\t\t\t\t\t\tinRange = (mouseY >= vm.y - vm.height / 2 && mouseY <= vm.y + vm.height / 2) && (mouseX >= vm.x && mouseX <= vm.base);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tinRange = (mouseY >= vm.y - vm.height / 2 && mouseY <= vm.y + vm.height / 2) && (mouseX >= vm.base && mouseX <= vm.x);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn inRange;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\trectangle.pivot();\n\t\t},\n\n\t\tcalculateBarBase: function(datasetIndex, index) {\n\t\t\tvar me = this;\n\t\t\tvar meta = me.getMeta();\n\t\t\tvar xScale = me.getScaleForId(meta.xAxisID);\n\t\t\tvar base = 0;\n\n\t\t\tif (xScale.options.stacked) {\n\t\t\t\tvar chart = me.chart;\n\t\t\t\tvar datasets = chart.data.datasets;\n\t\t\t\tvar value = Number(datasets[datasetIndex].data[index]);\n\n\t\t\t\tfor (var i = 0; i < datasetIndex; i++) {\n\t\t\t\t\tvar currentDs = datasets[i];\n\t\t\t\t\tvar currentDsMeta = chart.getDatasetMeta(i);\n\t\t\t\t\tif (currentDsMeta.bar && currentDsMeta.xAxisID === xScale.id && chart.isDatasetVisible(i)) {\n\t\t\t\t\t\tvar currentVal = Number(currentDs.data[index]);\n\t\t\t\t\t\tbase += value < 0 ? Math.min(currentVal, 0) : Math.max(currentVal, 0);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn xScale.getPixelForValue(base);\n\t\t\t}\n\n\t\t\treturn xScale.getBasePixel();\n\t\t},\n\n\t\tgetRuler: function(index) {\n\t\t\tvar me = this;\n\t\t\tvar meta = me.getMeta();\n\t\t\tvar yScale = me.getScaleForId(meta.yAxisID);\n\t\t\tvar datasetCount = me.getBarCount();\n\n\t\t\tvar tickHeight;\n\t\t\tif (yScale.options.type === 'category') {\n\t\t\t\ttickHeight = yScale.getPixelForTick(index + 1) - yScale.getPixelForTick(index);\n\t\t\t} else {\n\t\t\t\t// Average width\n\t\t\t\ttickHeight = yScale.width / yScale.ticks.length;\n\t\t\t}\n\t\t\tvar categoryHeight = tickHeight * yScale.options.categoryPercentage;\n\t\t\tvar categorySpacing = (tickHeight - (tickHeight * yScale.options.categoryPercentage)) / 2;\n\t\t\tvar fullBarHeight = categoryHeight / datasetCount;\n\n\t\t\tif (yScale.ticks.length !== me.chart.data.labels.length) {\n\t\t\t\tvar perc = yScale.ticks.length / me.chart.data.labels.length;\n\t\t\t\tfullBarHeight = fullBarHeight * perc;\n\t\t\t}\n\n\t\t\tvar barHeight = fullBarHeight * yScale.options.barPercentage;\n\t\t\tvar barSpacing = fullBarHeight - (fullBarHeight * yScale.options.barPercentage);\n\n\t\t\treturn {\n\t\t\t\tdatasetCount: datasetCount,\n\t\t\t\ttickHeight: tickHeight,\n\t\t\t\tcategoryHeight: categoryHeight,\n\t\t\t\tcategorySpacing: categorySpacing,\n\t\t\t\tfullBarHeight: fullBarHeight,\n\t\t\t\tbarHeight: barHeight,\n\t\t\t\tbarSpacing: barSpacing\n\t\t\t};\n\t\t},\n\n\t\tcalculateBarHeight: function(index) {\n\t\t\tvar me = this;\n\t\t\tvar yScale = me.getScaleForId(me.getMeta().yAxisID);\n\t\t\tif (yScale.options.barThickness) {\n\t\t\t\treturn yScale.options.barThickness;\n\t\t\t}\n\t\t\tvar ruler = me.getRuler(index);\n\t\t\treturn yScale.options.stacked ? ruler.categoryHeight : ruler.barHeight;\n\t\t},\n\n\t\tcalculateBarX: function(index, datasetIndex) {\n\t\t\tvar me = this;\n\t\t\tvar meta = me.getMeta();\n\t\t\tvar xScale = me.getScaleForId(meta.xAxisID);\n\t\t\tvar value = Number(me.getDataset().data[index]);\n\n\t\t\tif (xScale.options.stacked) {\n\n\t\t\t\tvar sumPos = 0,\n\t\t\t\t\tsumNeg = 0;\n\n\t\t\t\tfor (var i = 0; i < datasetIndex; i++) {\n\t\t\t\t\tvar ds = me.chart.data.datasets[i];\n\t\t\t\t\tvar dsMeta = me.chart.getDatasetMeta(i);\n\t\t\t\t\tif (dsMeta.bar && dsMeta.xAxisID === xScale.id && me.chart.isDatasetVisible(i)) {\n\t\t\t\t\t\tvar stackedVal = Number(ds.data[index]);\n\t\t\t\t\t\tif (stackedVal < 0) {\n\t\t\t\t\t\t\tsumNeg += stackedVal || 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tsumPos += stackedVal || 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (value < 0) {\n\t\t\t\t\treturn xScale.getPixelForValue(sumNeg + value);\n\t\t\t\t}\n\t\t\t\treturn xScale.getPixelForValue(sumPos + value);\n\t\t\t}\n\n\t\t\treturn xScale.getPixelForValue(value);\n\t\t},\n\n\t\tcalculateBarY: function(index, datasetIndex) {\n\t\t\tvar me = this;\n\t\t\tvar meta = me.getMeta();\n\t\t\tvar yScale = me.getScaleForId(meta.yAxisID);\n\t\t\tvar barIndex = me.getBarIndex(datasetIndex);\n\n\t\t\tvar ruler = me.getRuler(index);\n\t\t\tvar topTick = yScale.getPixelForValue(null, index, datasetIndex, me.chart.isCombo);\n\t\t\ttopTick -= me.chart.isCombo ? (ruler.tickHeight / 2) : 0;\n\n\t\t\tif (yScale.options.stacked) {\n\t\t\t\treturn topTick + (ruler.categoryHeight / 2) + ruler.categorySpacing;\n\t\t\t}\n\n\t\t\treturn topTick +\n\t\t\t\t(ruler.barHeight / 2) +\n\t\t\t\truler.categorySpacing +\n\t\t\t\t(ruler.barHeight * barIndex) +\n\t\t\t\t(ruler.barSpacing / 2) +\n\t\t\t\t(ruler.barSpacing * barIndex);\n\t\t}\n\t});\n};\n","'use strict';\n\nmodule.exports = function(Chart) {\n\n\tvar helpers = Chart.helpers;\n\n\tChart.defaults.bubble = {\n\t\thover: {\n\t\t\tmode: 'single'\n\t\t},\n\n\t\tscales: {\n\t\t\txAxes: [{\n\t\t\t\ttype: 'linear', // bubble should probably use a linear scale by default\n\t\t\t\tposition: 'bottom',\n\t\t\t\tid: 'x-axis-0' // need an ID so datasets can reference the scale\n\t\t\t}],\n\t\t\tyAxes: [{\n\t\t\t\ttype: 'linear',\n\t\t\t\tposition: 'left',\n\t\t\t\tid: 'y-axis-0'\n\t\t\t}]\n\t\t},\n\n\t\ttooltips: {\n\t\t\tcallbacks: {\n\t\t\t\ttitle: function() {\n\t\t\t\t\t// Title doesn't make sense for scatter since we format the data as a point\n\t\t\t\t\treturn '';\n\t\t\t\t},\n\t\t\t\tlabel: function(tooltipItem, data) {\n\t\t\t\t\tvar datasetLabel = data.datasets[tooltipItem.datasetIndex].label || '';\n\t\t\t\t\tvar dataPoint = data.datasets[tooltipItem.datasetIndex].data[tooltipItem.index];\n\t\t\t\t\treturn datasetLabel + ': (' + dataPoint.x + ', ' + dataPoint.y + ', ' + dataPoint.r + ')';\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\tChart.controllers.bubble = Chart.DatasetController.extend({\n\n\t\tdataElementType: Chart.elements.Point,\n\n\t\tupdate: function(reset) {\n\t\t\tvar me = this;\n\t\t\tvar meta = me.getMeta();\n\t\t\tvar points = meta.data;\n\n\t\t\t// Update Points\n\t\t\thelpers.each(points, function(point, index) {\n\t\t\t\tme.updateElement(point, index, reset);\n\t\t\t});\n\t\t},\n\n\t\tupdateElement: function(point, index, reset) {\n\t\t\tvar me = this;\n\t\t\tvar meta = me.getMeta();\n\t\t\tvar xScale = me.getScaleForId(meta.xAxisID);\n\t\t\tvar yScale = me.getScaleForId(meta.yAxisID);\n\n\t\t\tvar custom = point.custom || {};\n\t\t\tvar dataset = me.getDataset();\n\t\t\tvar data = dataset.data[index];\n\t\t\tvar pointElementOptions = me.chart.options.elements.point;\n\t\t\tvar dsIndex = me.index;\n\n\t\t\thelpers.extend(point, {\n\t\t\t\t// Utility\n\t\t\t\t_xScale: xScale,\n\t\t\t\t_yScale: yScale,\n\t\t\t\t_datasetIndex: dsIndex,\n\t\t\t\t_index: index,\n\n\t\t\t\t// Desired view properties\n\t\t\t\t_model: {\n\t\t\t\t\tx: reset ? xScale.getPixelForDecimal(0.5) : xScale.getPixelForValue(typeof data === 'object' ? data : NaN, index, dsIndex, me.chart.isCombo),\n\t\t\t\t\ty: reset ? yScale.getBasePixel() : yScale.getPixelForValue(data, index, dsIndex),\n\t\t\t\t\t// Appearance\n\t\t\t\t\tradius: reset ? 0 : custom.radius ? custom.radius : me.getRadius(data),\n\n\t\t\t\t\t// Tooltip\n\t\t\t\t\thitRadius: custom.hitRadius ? custom.hitRadius : helpers.getValueAtIndexOrDefault(dataset.hitRadius, index, pointElementOptions.hitRadius)\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// Trick to reset the styles of the point\n\t\t\tChart.DatasetController.prototype.removeHoverStyle.call(me, point, pointElementOptions);\n\n\t\t\tvar model = point._model;\n\t\t\tmodel.skip = custom.skip ? custom.skip : (isNaN(model.x) || isNaN(model.y));\n\n\t\t\tpoint.pivot();\n\t\t},\n\n\t\tgetRadius: function(value) {\n\t\t\treturn value.r || this.chart.options.elements.point.radius;\n\t\t},\n\n\t\tsetHoverStyle: function(point) {\n\t\t\tvar me = this;\n\t\t\tChart.DatasetController.prototype.setHoverStyle.call(me, point);\n\n\t\t\t// Radius\n\t\t\tvar dataset = me.chart.data.datasets[point._datasetIndex];\n\t\t\tvar index = point._index;\n\t\t\tvar custom = point.custom || {};\n\t\t\tvar model = point._model;\n\t\t\tmodel.radius = custom.hoverRadius ? custom.hoverRadius : (helpers.getValueAtIndexOrDefault(dataset.hoverRadius, index, me.chart.options.elements.point.hoverRadius)) + me.getRadius(dataset.data[index]);\n\t\t},\n\n\t\tremoveHoverStyle: function(point) {\n\t\t\tvar me = this;\n\t\t\tChart.DatasetController.prototype.removeHoverStyle.call(me, point, me.chart.options.elements.point);\n\n\t\t\tvar dataVal = me.chart.data.datasets[point._datasetIndex].data[point._index];\n\t\t\tvar custom = point.custom || {};\n\t\t\tvar model = point._model;\n\n\t\t\tmodel.radius = custom.radius ? custom.radius : me.getRadius(dataVal);\n\t\t}\n\t});\n};\n","'use strict';\n\nmodule.exports = function(Chart) {\n\n\tvar helpers = Chart.helpers,\n\t\tdefaults = Chart.defaults;\n\n\tdefaults.doughnut = {\n\t\tanimation: {\n\t\t\t// Boolean - Whether we animate the rotation of the Doughnut\n\t\t\tanimateRotate: true,\n\t\t\t// Boolean - Whether we animate scaling the Doughnut from the centre\n\t\t\tanimateScale: false\n\t\t},\n\t\taspectRatio: 1,\n\t\thover: {\n\t\t\tmode: 'single'\n\t\t},\n\t\tlegendCallback: function(chart) {\n\t\t\tvar text = [];\n\t\t\ttext.push('<ul class=\"' + chart.id + '-legend\">');\n\n\t\t\tvar data = chart.data;\n\t\t\tvar datasets = data.datasets;\n\t\t\tvar labels = data.labels;\n\n\t\t\tif (datasets.length) {\n\t\t\t\tfor (var i = 0; i < datasets[0].data.length; ++i) {\n\t\t\t\t\ttext.push('<li><span style=\"background-color:' + datasets[0].backgroundColor[i] + '\"></span>');\n\t\t\t\t\tif (labels[i]) {\n\t\t\t\t\t\ttext.push(labels[i]);\n\t\t\t\t\t}\n\t\t\t\t\ttext.push('</li>');\n\t\t\t\t}\n\t\t\t}\n\n\t\t\ttext.push('</ul>');\n\t\t\treturn text.join('');\n\t\t},\n\t\tlegend: {\n\t\t\tlabels: {\n\t\t\t\tgenerateLabels: function(chart) {\n\t\t\t\t\tvar data = chart.data;\n\t\t\t\t\tif (data.labels.length && data.datasets.length) {\n\t\t\t\t\t\treturn data.labels.map(function(label, i) {\n\t\t\t\t\t\t\tvar meta = chart.getDatasetMeta(0);\n\t\t\t\t\t\t\tvar ds = data.datasets[0];\n\t\t\t\t\t\t\tvar arc = meta.data[i];\n\t\t\t\t\t\t\tvar custom = arc && arc.custom || {};\n\t\t\t\t\t\t\tvar getValueAtIndexOrDefault = helpers.getValueAtIndexOrDefault;\n\t\t\t\t\t\t\tvar arcOpts = chart.options.elements.arc;\n\t\t\t\t\t\t\tvar fill = custom.backgroundColor ? custom.backgroundColor : getValueAtIndexOrDefault(ds.backgroundColor, i, arcOpts.backgroundColor);\n\t\t\t\t\t\t\tvar stroke = custom.borderColor ? custom.borderColor : getValueAtIndexOrDefault(ds.borderColor, i, arcOpts.borderColor);\n\t\t\t\t\t\t\tvar bw = custom.borderWidth ? custom.borderWidth : getValueAtIndexOrDefault(ds.borderWidth, i, arcOpts.borderWidth);\n\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\ttext: label,\n\t\t\t\t\t\t\t\tfillStyle: fill,\n\t\t\t\t\t\t\t\tstrokeStyle: stroke,\n\t\t\t\t\t\t\t\tlineWidth: bw,\n\t\t\t\t\t\t\t\thidden: isNaN(ds.data[i]) || meta.data[i].hidden,\n\n\t\t\t\t\t\t\t\t// Extra data used for toggling the correct item\n\t\t\t\t\t\t\t\tindex: i\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\treturn [];\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tonClick: function(e, legendItem) {\n\t\t\t\tvar index = legendItem.index;\n\t\t\t\tvar chart = this.chart;\n\t\t\t\tvar i, ilen, meta;\n\n\t\t\t\tfor (i = 0, ilen = (chart.data.datasets || []).length; i < ilen; ++i) {\n\t\t\t\t\tmeta = chart.getDatasetMeta(i);\n\t\t\t\t\t// toggle visibility of index if exists\n\t\t\t\t\tif (meta.data[index]) {\n\t\t\t\t\t\tmeta.data[index].hidden = !meta.data[index].hidden;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tchart.update();\n\t\t\t}\n\t\t},\n\n\t\t// The percentage of the chart that we cut out of the middle.\n\t\tcutoutPercentage: 50,\n\n\t\t// The rotation of the chart, where the first data arc begins.\n\t\trotation: Math.PI * -0.5,\n\n\t\t// The total circumference of the chart.\n\t\tcircumference: Math.PI * 2.0,\n\n\t\t// Need to override these to give a nice default\n\t\ttooltips: {\n\t\t\tcallbacks: {\n\t\t\t\ttitle: function() {\n\t\t\t\t\treturn '';\n\t\t\t\t},\n\t\t\t\tlabel: function(tooltipItem, data) {\n\t\t\t\t\treturn data.labels[tooltipItem.index] + ': ' + data.datasets[tooltipItem.datasetIndex].data[tooltipItem.index];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\tdefaults.pie = helpers.clone(defaults.doughnut);\n\thelpers.extend(defaults.pie, {\n\t\tcutoutPercentage: 0\n\t});\n\n\n\tChart.controllers.doughnut = Chart.controllers.pie = Chart.DatasetController.extend({\n\n\t\tdataElementType: Chart.elements.Arc,\n\n\t\tlinkScales: helpers.noop,\n\n\t\t// Get index of the dataset in relation to the visible datasets. This allows determining the inner and outer radius correctly\n\t\tgetRingIndex: function(datasetIndex) {\n\t\t\tvar ringIndex = 0;\n\n\t\t\tfor (var j = 0; j < datasetIndex; ++j) {\n\t\t\t\tif (this.chart.isDatasetVisible(j)) {\n\t\t\t\t\t++ringIndex;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn ringIndex;\n\t\t},\n\n\t\tupdate: function(reset) {\n\t\t\tvar me = this;\n\t\t\tvar chart = me.chart,\n\t\t\t\tchartArea = chart.chartArea,\n\t\t\t\topts = chart.options,\n\t\t\t\tarcOpts = opts.elements.arc,\n\t\t\t\tavailableWidth = chartArea.right - chartArea.left - arcOpts.borderWidth,\n\t\t\t\tavailableHeight = chartArea.bottom - chartArea.top - arcOpts.borderWidth,\n\t\t\t\tminSize = Math.min(availableWidth, availableHeight),\n\t\t\t\toffset = {\n\t\t\t\t\tx: 0,\n\t\t\t\t\ty: 0\n\t\t\t\t},\n\t\t\t\tmeta = me.getMeta(),\n\t\t\t\tcutoutPercentage = opts.cutoutPercentage,\n\t\t\t\tcircumference = opts.circumference;\n\n\t\t\t// If the chart's circumference isn't a full circle, calculate minSize as a ratio of the width/height of the arc\n\t\t\tif (circumference < Math.PI * 2.0) {\n\t\t\t\tvar startAngle = opts.rotation % (Math.PI * 2.0);\n\t\t\t\tstartAngle += Math.PI * 2.0 * (startAngle >= Math.PI ? -1 : startAngle < -Math.PI ? 1 : 0);\n\t\t\t\tvar endAngle = startAngle + circumference;\n\t\t\t\tvar start = {x: Math.cos(startAngle), y: Math.sin(startAngle)};\n\t\t\t\tvar end = {x: Math.cos(endAngle), y: Math.sin(endAngle)};\n\t\t\t\tvar contains0 = (startAngle <= 0 && 0 <= endAngle) || (startAngle <= Math.PI * 2.0 && Math.PI * 2.0 <= endAngle);\n\t\t\t\tvar contains90 = (startAngle <= Math.PI * 0.5 && Math.PI * 0.5 <= endAngle) || (startAngle <= Math.PI * 2.5 && Math.PI * 2.5 <= endAngle);\n\t\t\t\tvar contains180 = (startAngle <= -Math.PI && -Math.PI <= endAngle) || (startAngle <= Math.PI && Math.PI <= endAngle);\n\t\t\t\tvar contains270 = (startAngle <= -Math.PI * 0.5 && -Math.PI * 0.5 <= endAngle) || (startAngle <= Math.PI * 1.5 && Math.PI * 1.5 <= endAngle);\n\t\t\t\tvar cutout = cutoutPercentage / 100.0;\n\t\t\t\tvar min = {x: contains180 ? -1 : Math.min(start.x * (start.x < 0 ? 1 : cutout), end.x * (end.x < 0 ? 1 : cutout)), y: contains270 ? -1 : Math.min(start.y * (start.y < 0 ? 1 : cutout), end.y * (end.y < 0 ? 1 : cutout))};\n\t\t\t\tvar max = {x: contains0 ? 1 : Math.max(start.x * (start.x > 0 ? 1 : cutout), end.x * (end.x > 0 ? 1 : cutout)), y: contains90 ? 1 : Math.max(start.y * (start.y > 0 ? 1 : cutout), end.y * (end.y > 0 ? 1 : cutout))};\n\t\t\t\tvar size = {width: (max.x - min.x) * 0.5, height: (max.y - min.y) * 0.5};\n\t\t\t\tminSize = Math.min(availableWidth / size.width, availableHeight / size.height);\n\t\t\t\toffset = {x: (max.x + min.x) * -0.5, y: (max.y + min.y) * -0.5};\n\t\t\t}\n\n\t\t\tchart.borderWidth = me.getMaxBorderWidth(meta.data);\n\t\t\tchart.outerRadius = Math.max((minSize - chart.borderWidth) / 2, 0);\n\t\t\tchart.innerRadius = Math.max(cutoutPercentage ? (chart.outerRadius / 100) * (cutoutPercentage) : 1, 0);\n\t\t\tchart.radiusLength = (chart.outerRadius - chart.innerRadius) / chart.getVisibleDatasetCount();\n\t\t\tchart.offsetX = offset.x * chart.outerRadius;\n\t\t\tchart.offsetY = offset.y * chart.outerRadius;\n\n\t\t\tmeta.total = me.calculateTotal();\n\n\t\t\tme.outerRadius = chart.outerRadius - (chart.radiusLength * me.getRingIndex(me.index));\n\t\t\tme.innerRadius = me.outerRadius - chart.radiusLength;\n\n\t\t\thelpers.each(meta.data, function(arc, index) {\n\t\t\t\tme.updateElement(arc, index, reset);\n\t\t\t});\n\t\t},\n\n\t\tupdateElement: function(arc, index, reset) {\n\t\t\tvar me = this;\n\t\t\tvar chart = me.chart,\n\t\t\t\tchartArea = chart.chartArea,\n\t\t\t\topts = chart.options,\n\t\t\t\tanimationOpts = opts.animation,\n\t\t\t\tcenterX = (chartArea.left + chartArea.right) / 2,\n\t\t\t\tcenterY = (chartArea.top + chartArea.bottom) / 2,\n\t\t\t\tstartAngle = opts.rotation, // non reset case handled later\n\t\t\t\tendAngle = opts.rotation, // non reset case handled later\n\t\t\t\tdataset = me.getDataset(),\n\t\t\t\tcircumference = reset && animationOpts.animateRotate ? 0 : arc.hidden ? 0 : me.calculateCircumference(dataset.data[index]) * (opts.circumference / (2.0 * Math.PI)),\n\t\t\t\tinnerRadius = reset && animationOpts.animateScale ? 0 : me.innerRadius,\n\t\t\t\touterRadius = reset && animationOpts.animateScale ? 0 : me.outerRadius,\n\t\t\t\tvalueAtIndexOrDefault = helpers.getValueAtIndexOrDefault;\n\n\t\t\thelpers.extend(arc, {\n\t\t\t\t// Utility\n\t\t\t\t_datasetIndex: me.index,\n\t\t\t\t_index: index,\n\n\t\t\t\t// Desired view properties\n\t\t\t\t_model: {\n\t\t\t\t\tx: centerX + chart.offsetX,\n\t\t\t\t\ty: centerY + chart.offsetY,\n\t\t\t\t\tstartAngle: startAngle,\n\t\t\t\t\tendAngle: endAngle,\n\t\t\t\t\tcircumference: circumference,\n\t\t\t\t\touterRadius: outerRadius,\n\t\t\t\t\tinnerRadius: innerRadius,\n\t\t\t\t\tlabel: valueAtIndexOrDefault(dataset.label, index, chart.data.labels[index])\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tvar model = arc._model;\n\t\t\t// Resets the visual styles\n\t\t\tthis.removeHoverStyle(arc);\n\n\t\t\t// Set correct angles if not resetting\n\t\t\tif (!reset || !animationOpts.animateRotate) {\n\t\t\t\tif (index === 0) {\n\t\t\t\t\tmodel.startAngle = opts.rotation;\n\t\t\t\t} else {\n\t\t\t\t\tmodel.startAngle = me.getMeta().data[index - 1]._model.endAngle;\n\t\t\t\t}\n\n\t\t\t\tmodel.endAngle = model.startAngle + model.circumference;\n\t\t\t}\n\n\t\t\tarc.pivot();\n\t\t},\n\n\t\tremoveHoverStyle: function(arc) {\n\t\t\tChart.DatasetController.prototype.removeHoverStyle.call(this, arc, this.chart.options.elements.arc);\n\t\t},\n\n\t\tcalculateTotal: function() {\n\t\t\tvar dataset = this.getDataset();\n\t\t\tvar meta = this.getMeta();\n\t\t\tvar total = 0;\n\t\t\tvar value;\n\n\t\t\thelpers.each(meta.data, function(element, index) {\n\t\t\t\tvalue = dataset.data[index];\n\t\t\t\tif (!isNaN(value) && !element.hidden) {\n\t\t\t\t\ttotal += Math.abs(value);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t/* if (total === 0) {\n\t\t\t\ttotal = NaN;\n\t\t\t}*/\n\n\t\t\treturn total;\n\t\t},\n\n\t\tcalculateCircumference: function(value) {\n\t\t\tvar total = this.getMeta().total;\n\t\t\tif (total > 0 && !isNaN(value)) {\n\t\t\t\treturn (Math.PI * 2.0) * (value / total);\n\t\t\t}\n\t\t\treturn 0;\n\t\t},\n\n\t\t// gets the max border or hover width to properly scale pie charts\n\t\tgetMaxBorderWidth: function(elements) {\n\t\t\tvar max = 0,\n\t\t\t\tindex = this.index,\n\t\t\t\tlength = elements.length,\n\t\t\t\tborderWidth,\n\t\t\t\thoverWidth;\n\n\t\t\tfor (var i = 0; i < length; i++) {\n\t\t\t\tborderWidth = elements[i]._model ? elements[i]._model.borderWidth : 0;\n\t\t\t\thoverWidth = elements[i]._chart ? elements[i]._chart.config.data.datasets[index].hoverBorderWidth : 0;\n\n\t\t\t\tmax = borderWidth > max ? borderWidth : max;\n\t\t\t\tmax = hoverWidth > max ? hoverWidth : max;\n\t\t\t}\n\t\t\treturn max;\n\t\t}\n\t});\n};\n","'use strict';\n\nmodule.exports = function(Chart) {\n\n\tvar helpers = Chart.helpers;\n\n\tChart.defaults.line = {\n\t\tshowLines: true,\n\t\tspanGaps: false,\n\n\t\thover: {\n\t\t\tmode: 'label'\n\t\t},\n\n\t\tscales: {\n\t\t\txAxes: [{\n\t\t\t\ttype: 'category',\n\t\t\t\tid: 'x-axis-0'\n\t\t\t}],\n\t\t\tyAxes: [{\n\t\t\t\ttype: 'linear',\n\t\t\t\tid: 'y-axis-0'\n\t\t\t}]\n\t\t}\n\t};\n\n\tfunction lineEnabled(dataset, options) {\n\t\treturn helpers.getValueOrDefault(dataset.showLine, options.showLines);\n\t}\n\n\tChart.controllers.line = Chart.DatasetController.extend({\n\n\t\tdatasetElementType: Chart.elements.Line,\n\n\t\tdataElementType: Chart.elements.Point,\n\n\t\taddElementAndReset: function(index) {\n\t\t\tvar me = this;\n\t\t\tvar options = me.chart.options;\n\t\t\tvar meta = me.getMeta();\n\n\t\t\tChart.DatasetController.prototype.addElementAndReset.call(me, index);\n\n\t\t\t// Make sure bezier control points are updated\n\t\t\tif (lineEnabled(me.getDataset(), options) && meta.dataset._model.tension !== 0) {\n\t\t\t\tme.updateBezierControlPoints();\n\t\t\t}\n\t\t},\n\n\t\tupdate: function(reset) {\n\t\t\tvar me = this;\n\t\t\tvar meta = me.getMeta();\n\t\t\tvar line = meta.dataset;\n\t\t\tvar points = meta.data || [];\n\t\t\tvar options = me.chart.options;\n\t\t\tvar lineElementOptions = options.elements.line;\n\t\t\tvar scale = me.getScaleForId(meta.yAxisID);\n\t\t\tvar i, ilen, custom;\n\t\t\tvar dataset = me.getDataset();\n\t\t\tvar showLine = lineEnabled(dataset, options);\n\n\t\t\t// Update Line\n\t\t\tif (showLine) {\n\t\t\t\tcustom = line.custom || {};\n\n\t\t\t\t// Compatibility: If the properties are defined with only the old name, use those values\n\t\t\t\tif ((dataset.tension !== undefined) && (dataset.lineTension === undefined)) {\n\t\t\t\t\tdataset.lineTension = dataset.tension;\n\t\t\t\t}\n\n\t\t\t\t// Utility\n\t\t\t\tline._scale = scale;\n\t\t\t\tline._datasetIndex = me.index;\n\t\t\t\t// Data\n\t\t\t\tline._children = points;\n\t\t\t\t// Model\n\t\t\t\tline._model = {\n\t\t\t\t\t// Appearance\n\t\t\t\t\t// The default behavior of lines is to break at null values, according\n\t\t\t\t\t// to https://github.com/chartjs/Chart.js/issues/2435#issuecomment-216718158\n\t\t\t\t\t// This option gives linse the ability to span gaps\n\t\t\t\t\tspanGaps: dataset.spanGaps ? dataset.spanGaps : options.spanGaps,\n\t\t\t\t\ttension: custom.tension ? custom.tension : helpers.getValueOrDefault(dataset.lineTension, lineElementOptions.tension),\n\t\t\t\t\tbackgroundColor: custom.backgroundColor ? custom.backgroundColor : (dataset.backgroundColor || lineElementOptions.backgroundColor),\n\t\t\t\t\tborderWidth: custom.borderWidth ? custom.borderWidth : (dataset.borderWidth || lineElementOptions.borderWidth),\n\t\t\t\t\tborderColor: custom.borderColor ? custom.borderColor : (dataset.borderColor || lineElementOptions.borderColor),\n\t\t\t\t\tborderCapStyle: custom.borderCapStyle ? custom.borderCapStyle : (dataset.borderCapStyle || lineElementOptions.borderCapStyle),\n\t\t\t\t\tborderDash: custom.borderDash ? custom.borderDash : (dataset.borderDash || lineElementOptions.borderDash),\n\t\t\t\t\tborderDashOffset: custom.borderDashOffset ? custom.borderDashOffset : (dataset.borderDashOffset || lineElementOptions.borderDashOffset),\n\t\t\t\t\tborderJoinStyle: custom.borderJoinStyle ? custom.borderJoinStyle : (dataset.borderJoinStyle || lineElementOptions.borderJoinStyle),\n\t\t\t\t\tfill: custom.fill ? custom.fill : (dataset.fill !== undefined ? dataset.fill : lineElementOptions.fill),\n\t\t\t\t\tsteppedLine: custom.steppedLine ? custom.steppedLine : helpers.getValueOrDefault(dataset.steppedLine, lineElementOptions.stepped),\n\t\t\t\t\tcubicInterpolationMode: custom.cubicInterpolationMode ? custom.cubicInterpolationMode : helpers.getValueOrDefault(dataset.cubicInterpolationMode, lineElementOptions.cubicInterpolationMode),\n\t\t\t\t\t// Scale\n\t\t\t\t\tscaleTop: scale.top,\n\t\t\t\t\tscaleBottom: scale.bottom,\n\t\t\t\t\tscaleZero: scale.getBasePixel()\n\t\t\t\t};\n\n\t\t\t\tline.pivot();\n\t\t\t}\n\n\t\t\t// Update Points\n\t\t\tfor (i=0, ilen=points.length; i<ilen; ++i) {\n\t\t\t\tme.updateElement(points[i], i, reset);\n\t\t\t}\n\n\t\t\tif (showLine && line._model.tension !== 0) {\n\t\t\t\tme.updateBezierControlPoints();\n\t\t\t}\n\n\t\t\t// Now pivot the point for animation\n\t\t\tfor (i=0, ilen=points.length; i<ilen; ++i) {\n\t\t\t\tpoints[i].pivot();\n\t\t\t}\n\t\t},\n\n\t\tgetPointBackgroundColor: function(point, index) {\n\t\t\tvar backgroundColor = this.chart.options.elements.point.backgroundColor;\n\t\t\tvar dataset = this.getDataset();\n\t\t\tvar custom = point.custom || {};\n\n\t\t\tif (custom.backgroundColor) {\n\t\t\t\tbackgroundColor = custom.backgroundColor;\n\t\t\t} else if (dataset.pointBackgroundColor) {\n\t\t\t\tbackgroundColor = helpers.getValueAtIndexOrDefault(dataset.pointBackgroundColor, index, backgroundColor);\n\t\t\t} else if (dataset.backgroundColor) {\n\t\t\t\tbackgroundColor = dataset.backgroundColor;\n\t\t\t}\n\n\t\t\treturn backgroundColor;\n\t\t},\n\n\t\tgetPointBorderColor: function(point, index) {\n\t\t\tvar borderColor = this.chart.options.elements.point.borderColor;\n\t\t\tvar dataset = this.getDataset();\n\t\t\tvar custom = point.custom || {};\n\n\t\t\tif (custom.borderColor) {\n\t\t\t\tborderColor = custom.borderColor;\n\t\t\t} else if (dataset.pointBorderColor) {\n\t\t\t\tborderColor = helpers.getValueAtIndexOrDefault(dataset.pointBorderColor, index, borderColor);\n\t\t\t} else if (dataset.borderColor) {\n\t\t\t\tborderColor = dataset.borderColor;\n\t\t\t}\n\n\t\t\treturn borderColor;\n\t\t},\n\n\t\tgetPointBorderWidth: function(point, index) {\n\t\t\tvar borderWidth = this.chart.options.elements.point.borderWidth;\n\t\t\tvar dataset = this.getDataset();\n\t\t\tvar custom = point.custom || {};\n\n\t\t\tif (custom.borderWidth) {\n\t\t\t\tborderWidth = custom.borderWidth;\n\t\t\t} else if (dataset.pointBorderWidth) {\n\t\t\t\tborderWidth = helpers.getValueAtIndexOrDefault(dataset.pointBorderWidth, index, borderWidth);\n\t\t\t} else if (dataset.borderWidth) {\n\t\t\t\tborderWidth = dataset.borderWidth;\n\t\t\t}\n\n\t\t\treturn borderWidth;\n\t\t},\n\n\t\tupdateElement: function(point, index, reset) {\n\t\t\tvar me = this;\n\t\t\tvar meta = me.getMeta();\n\t\t\tvar custom = point.custom || {};\n\t\t\tvar dataset = me.getDataset();\n\t\t\tvar datasetIndex = me.index;\n\t\t\tvar value = dataset.data[index];\n\t\t\tvar yScale = me.getScaleForId(meta.yAxisID);\n\t\t\tvar xScale = me.getScaleForId(meta.xAxisID);\n\t\t\tvar pointOptions = me.chart.options.elements.point;\n\t\t\tvar x, y;\n\t\t\tvar labels = me.chart.data.labels || [];\n\t\t\tvar includeOffset = (labels.length === 1 || dataset.data.length === 1) || me.chart.isCombo;\n\n\t\t\t// Compatibility: If the properties are defined with only the old name, use those values\n\t\t\tif ((dataset.radius !== undefined) && (dataset.pointRadius === undefined)) {\n\t\t\t\tdataset.pointRadius = dataset.radius;\n\t\t\t}\n\t\t\tif ((dataset.hitRadius !== undefined) && (dataset.pointHitRadius === undefined)) {\n\t\t\t\tdataset.pointHitRadius = dataset.hitRadius;\n\t\t\t}\n\n\t\t\tx = xScale.getPixelForValue(typeof value === 'object' ? value : NaN, index, datasetIndex, includeOffset);\n\t\t\ty = reset ? yScale.getBasePixel() : me.calculatePointY(value, index, datasetIndex);\n\n\t\t\t// Utility\n\t\t\tpoint._xScale = xScale;\n\t\t\tpoint._yScale = yScale;\n\t\t\tpoint._datasetIndex = datasetIndex;\n\t\t\tpoint._index = index;\n\n\t\t\t// Desired view properties\n\t\t\tpoint._model = {\n\t\t\t\tx: x,\n\t\t\t\ty: y,\n\t\t\t\tskip: custom.skip || isNaN(x) || isNaN(y),\n\t\t\t\t// Appearance\n\t\t\t\tradius: custom.radius || helpers.getValueAtIndexOrDefault(dataset.pointRadius, index, pointOptions.radius),\n\t\t\t\tpointStyle: custom.pointStyle || helpers.getValueAtIndexOrDefault(dataset.pointStyle, index, pointOptions.pointStyle),\n\t\t\t\tbackgroundColor: me.getPointBackgroundColor(point, index),\n\t\t\t\tborderColor: me.getPointBorderColor(point, index),\n\t\t\t\tborderWidth: me.getPointBorderWidth(point, index),\n\t\t\t\ttension: meta.dataset._model ? meta.dataset._model.tension : 0,\n\t\t\t\tsteppedLine: meta.dataset._model ? meta.dataset._model.steppedLine : false,\n\t\t\t\t// Tooltip\n\t\t\t\thitRadius: custom.hitRadius || helpers.getValueAtIndexOrDefault(dataset.pointHitRadius, index, pointOptions.hitRadius)\n\t\t\t};\n\t\t},\n\n\t\tcalculatePointY: function(value, index, datasetIndex) {\n\t\t\tvar me = this;\n\t\t\tvar chart = me.chart;\n\t\t\tvar meta = me.getMeta();\n\t\t\tvar yScale = me.getScaleForId(meta.yAxisID);\n\t\t\tvar sumPos = 0;\n\t\t\tvar sumNeg = 0;\n\t\t\tvar i, ds, dsMeta;\n\n\t\t\tif (yScale.options.stacked) {\n\t\t\t\tfor (i = 0; i < datasetIndex; i++) {\n\t\t\t\t\tds = chart.data.datasets[i];\n\t\t\t\t\tdsMeta = chart.getDatasetMeta(i);\n\t\t\t\t\tif (dsMeta.type === 'line' && dsMeta.yAxisID === yScale.id && chart.isDatasetVisible(i)) {\n\t\t\t\t\t\tvar stackedRightValue = Number(yScale.getRightValue(ds.data[index]));\n\t\t\t\t\t\tif (stackedRightValue < 0) {\n\t\t\t\t\t\t\tsumNeg += stackedRightValue || 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tsumPos += stackedRightValue || 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tvar rightValue = Number(yScale.getRightValue(value));\n\t\t\t\tif (rightValue < 0) {\n\t\t\t\t\treturn yScale.getPixelForValue(sumNeg + rightValue);\n\t\t\t\t}\n\t\t\t\treturn yScale.getPixelForValue(sumPos + rightValue);\n\t\t\t}\n\n\t\t\treturn yScale.getPixelForValue(value);\n\t\t},\n\n\t\tupdateBezierControlPoints: function() {\n\t\t\tvar me = this;\n\t\t\tvar meta = me.getMeta();\n\t\t\tvar area = me.chart.chartArea;\n\t\t\tvar points = (meta.data || []);\n\t\t\tvar i, ilen, point, model, controlPoints;\n\n\t\t\t// Only consider points that are drawn in case the spanGaps option is used\n\t\t\tif (meta.dataset._model.spanGaps) {\n\t\t\t\tpoints = points.filter(function(pt) {\n\t\t\t\t\treturn !pt._model.skip;\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tfunction capControlPoint(pt, min, max) {\n\t\t\t\treturn Math.max(Math.min(pt, max), min);\n\t\t\t}\n\n\t\t\tif (meta.dataset._model.cubicInterpolationMode === 'monotone') {\n\t\t\t\thelpers.splineCurveMonotone(points);\n\t\t\t} else {\n\t\t\t\tfor (i = 0, ilen = points.length; i < ilen; ++i) {\n\t\t\t\t\tpoint = points[i];\n\t\t\t\t\tmodel = point._model;\n\t\t\t\t\tcontrolPoints = helpers.splineCurve(\n\t\t\t\t\t\thelpers.previousItem(points, i)._model,\n\t\t\t\t\t\tmodel,\n\t\t\t\t\t\thelpers.nextItem(points, i)._model,\n\t\t\t\t\t\tmeta.dataset._model.tension\n\t\t\t\t\t);\n\t\t\t\t\tmodel.controlPointPreviousX = controlPoints.previous.x;\n\t\t\t\t\tmodel.controlPointPreviousY = controlPoints.previous.y;\n\t\t\t\t\tmodel.controlPointNextX = controlPoints.next.x;\n\t\t\t\t\tmodel.controlPointNextY = controlPoints.next.y;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (me.chart.options.elements.line.capBezierPoints) {\n\t\t\t\tfor (i = 0, ilen = points.length; i < ilen; ++i) {\n\t\t\t\t\tmodel = points[i]._model;\n\t\t\t\t\tmodel.controlPointPreviousX = capControlPoint(model.controlPointPreviousX, area.left, area.right);\n\t\t\t\t\tmodel.controlPointPreviousY = capControlPoint(model.controlPointPreviousY, area.top, area.bottom);\n\t\t\t\t\tmodel.controlPointNextX = capControlPoint(model.controlPointNextX, area.left, area.right);\n\t\t\t\t\tmodel.controlPointNextY = capControlPoint(model.controlPointNextY, area.top, area.bottom);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tdraw: function(ease) {\n\t\t\tvar me = this;\n\t\t\tvar meta = me.getMeta();\n\t\t\tvar points = meta.data || [];\n\t\t\tvar easingDecimal = ease || 1;\n\t\t\tvar i, ilen;\n\n\t\t\t// Transition Point Locations\n\t\t\tfor (i=0, ilen=points.length; i<ilen; ++i) {\n\t\t\t\tpoints[i].transition(easingDecimal);\n\t\t\t}\n\n\t\t\t// Transition and Draw the line\n\t\t\tif (lineEnabled(me.getDataset(), me.chart.options)) {\n\t\t\t\tmeta.dataset.transition(easingDecimal).draw();\n\t\t\t}\n\n\t\t\t// Draw the points\n\t\t\tfor (i=0, ilen=points.length; i<ilen; ++i) {\n\t\t\t\tpoints[i].draw();\n\t\t\t}\n\t\t},\n\n\t\tsetHoverStyle: function(point) {\n\t\t\t// Point\n\t\t\tvar dataset = this.chart.data.datasets[point._datasetIndex];\n\t\t\tvar index = point._index;\n\t\t\tvar custom = point.custom || {};\n\t\t\tvar model = point._model;\n\n\t\t\tmodel.radius = custom.hoverRadius || helpers.getValueAtIndexOrDefault(dataset.pointHoverRadius, index, this.chart.options.elements.point.hoverRadius);\n\t\t\tmodel.backgroundColor = custom.hoverBackgroundColor || helpers.getValueAtIndexOrDefault(dataset.pointHoverBackgroundColor, index, helpers.getHoverColor(model.backgroundColor));\n\t\t\tmodel.borderColor = custom.hoverBorderColor || helpers.getValueAtIndexOrDefault(dataset.pointHoverBorderColor, index, helpers.getHoverColor(model.borderColor));\n\t\t\tmodel.borderWidth = custom.hoverBorderWidth || helpers.getValueAtIndexOrDefault(dataset.pointHoverBorderWidth, index, model.borderWidth);\n\t\t},\n\n\t\tremoveHoverStyle: function(point) {\n\t\t\tvar me = this;\n\t\t\tvar dataset = me.chart.data.datasets[point._datasetIndex];\n\t\t\tvar index = point._index;\n\t\t\tvar custom = point.custom || {};\n\t\t\tvar model = point._model;\n\n\t\t\t// Compatibility: If the properties are defined with only the old name, use those values\n\t\t\tif ((dataset.radius !== undefined) && (dataset.pointRadius === undefined)) {\n\t\t\t\tdataset.pointRadius = dataset.radius;\n\t\t\t}\n\n\t\t\tmodel.radius = custom.radius || helpers.getValueAtIndexOrDefault(dataset.pointRadius, index, me.chart.options.elements.point.radius);\n\t\t\tmodel.backgroundColor = me.getPointBackgroundColor(point, index);\n\t\t\tmodel.borderColor = me.getPointBorderColor(point, index);\n\t\t\tmodel.borderWidth = me.getPointBorderWidth(point, index);\n\t\t}\n\t});\n};\n","'use strict';\n\nmodule.exports = function(Chart) {\n\n\tvar helpers = Chart.helpers;\n\n\tChart.defaults.polarArea = {\n\n\t\tscale: {\n\t\t\ttype: 'radialLinear',\n\t\t\tlineArc: true, // so that lines are circular\n\t\t\tticks: {\n\t\t\t\tbeginAtZero: true\n\t\t\t}\n\t\t},\n\n\t\t// Boolean - Whether to animate the rotation of the chart\n\t\tanimation: {\n\t\t\tanimateRotate: true,\n\t\t\tanimateScale: true\n\t\t},\n\n\t\tstartAngle: -0.5 * Math.PI,\n\t\taspectRatio: 1,\n\t\tlegendCallback: function(chart) {\n\t\t\tvar text = [];\n\t\t\ttext.push('<ul class=\"' + chart.id + '-legend\">');\n\n\t\t\tvar data = chart.data;\n\t\t\tvar datasets = data.datasets;\n\t\t\tvar labels = data.labels;\n\n\t\t\tif (datasets.length) {\n\t\t\t\tfor (var i = 0; i < datasets[0].data.length; ++i) {\n\t\t\t\t\ttext.push('<li><span style=\"background-color:' + datasets[0].backgroundColor[i] + '\">');\n\t\t\t\t\tif (labels[i]) {\n\t\t\t\t\t\ttext.push(labels[i]);\n\t\t\t\t\t}\n\t\t\t\t\ttext.push('</span></li>');\n\t\t\t\t}\n\t\t\t}\n\n\t\t\ttext.push('</ul>');\n\t\t\treturn text.join('');\n\t\t},\n\t\tlegend: {\n\t\t\tlabels: {\n\t\t\t\tgenerateLabels: function(chart) {\n\t\t\t\t\tvar data = chart.data;\n\t\t\t\t\tif (data.labels.length && data.datasets.length) {\n\t\t\t\t\t\treturn data.labels.map(function(label, i) {\n\t\t\t\t\t\t\tvar meta = chart.getDatasetMeta(0);\n\t\t\t\t\t\t\tvar ds = data.datasets[0];\n\t\t\t\t\t\t\tvar arc = meta.data[i];\n\t\t\t\t\t\t\tvar custom = arc.custom || {};\n\t\t\t\t\t\t\tvar getValueAtIndexOrDefault = helpers.getValueAtIndexOrDefault;\n\t\t\t\t\t\t\tvar arcOpts = chart.options.elements.arc;\n\t\t\t\t\t\t\tvar fill = custom.backgroundColor ? custom.backgroundColor : getValueAtIndexOrDefault(ds.backgroundColor, i, arcOpts.backgroundColor);\n\t\t\t\t\t\t\tvar stroke = custom.borderColor ? custom.borderColor : getValueAtIndexOrDefault(ds.borderColor, i, arcOpts.borderColor);\n\t\t\t\t\t\t\tvar bw = custom.borderWidth ? custom.borderWidth : getValueAtIndexOrDefault(ds.borderWidth, i, arcOpts.borderWidth);\n\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\ttext: label,\n\t\t\t\t\t\t\t\tfillStyle: fill,\n\t\t\t\t\t\t\t\tstrokeStyle: stroke,\n\t\t\t\t\t\t\t\tlineWidth: bw,\n\t\t\t\t\t\t\t\thidden: isNaN(ds.data[i]) || meta.data[i].hidden,\n\n\t\t\t\t\t\t\t\t// Extra data used for toggling the correct item\n\t\t\t\t\t\t\t\tindex: i\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\treturn [];\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tonClick: function(e, legendItem) {\n\t\t\t\tvar index = legendItem.index;\n\t\t\t\tvar chart = this.chart;\n\t\t\t\tvar i, ilen, meta;\n\n\t\t\t\tfor (i = 0, ilen = (chart.data.datasets || []).length; i < ilen; ++i) {\n\t\t\t\t\tmeta = chart.getDatasetMeta(i);\n\t\t\t\t\tmeta.data[index].hidden = !meta.data[index].hidden;\n\t\t\t\t}\n\n\t\t\t\tchart.update();\n\t\t\t}\n\t\t},\n\n\t\t// Need to override these to give a nice default\n\t\ttooltips: {\n\t\t\tcallbacks: {\n\t\t\t\ttitle: function() {\n\t\t\t\t\treturn '';\n\t\t\t\t},\n\t\t\t\tlabel: function(tooltipItem, data) {\n\t\t\t\t\treturn data.labels[tooltipItem.index] + ': ' + tooltipItem.yLabel;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\tChart.controllers.polarArea = Chart.DatasetController.extend({\n\n\t\tdataElementType: Chart.elements.Arc,\n\n\t\tlinkScales: helpers.noop,\n\n\t\tupdate: function(reset) {\n\t\t\tvar me = this;\n\t\t\tvar chart = me.chart;\n\t\t\tvar chartArea = chart.chartArea;\n\t\t\tvar meta = me.getMeta();\n\t\t\tvar opts = chart.options;\n\t\t\tvar arcOpts = opts.elements.arc;\n\t\t\tvar minSize = Math.min(chartArea.right - chartArea.left, chartArea.bottom - chartArea.top);\n\t\t\tchart.outerRadius = Math.max((minSize - arcOpts.borderWidth / 2) / 2, 0);\n\t\t\tchart.innerRadius = Math.max(opts.cutoutPercentage ? (chart.outerRadius / 100) * (opts.cutoutPercentage) : 1, 0);\n\t\t\tchart.radiusLength = (chart.outerRadius - chart.innerRadius) / chart.getVisibleDatasetCount();\n\n\t\t\tme.outerRadius = chart.outerRadius - (chart.radiusLength * me.index);\n\t\t\tme.innerRadius = me.outerRadius - chart.radiusLength;\n\n\t\t\tmeta.count = me.countVisibleElements();\n\n\t\t\thelpers.each(meta.data, function(arc, index) {\n\t\t\t\tme.updateElement(arc, index, reset);\n\t\t\t});\n\t\t},\n\n\t\tupdateElement: function(arc, index, reset) {\n\t\t\tvar me = this;\n\t\t\tvar chart = me.chart;\n\t\t\tvar dataset = me.getDataset();\n\t\t\tvar opts = chart.options;\n\t\t\tvar animationOpts = opts.animation;\n\t\t\tvar scale = chart.scale;\n\t\t\tvar getValueAtIndexOrDefault = helpers.getValueAtIndexOrDefault;\n\t\t\tvar labels = chart.data.labels;\n\n\t\t\tvar circumference = me.calculateCircumference(dataset.data[index]);\n\t\t\tvar centerX = scale.xCenter;\n\t\t\tvar centerY = scale.yCenter;\n\n\t\t\t// If there is NaN data before us, we need to calculate the starting angle correctly.\n\t\t\t// We could be way more efficient here, but its unlikely that the polar area chart will have a lot of data\n\t\t\tvar visibleCount = 0;\n\t\t\tvar meta = me.getMeta();\n\t\t\tfor (var i = 0; i < index; ++i) {\n\t\t\t\tif (!isNaN(dataset.data[i]) && !meta.data[i].hidden) {\n\t\t\t\t\t++visibleCount;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// var negHalfPI = -0.5 * Math.PI;\n\t\t\tvar datasetStartAngle = opts.startAngle;\n\t\t\tvar distance = arc.hidden ? 0 : scale.getDistanceFromCenterForValue(dataset.data[index]);\n\t\t\tvar startAngle = datasetStartAngle + (circumference * visibleCount);\n\t\t\tvar endAngle = startAngle + (arc.hidden ? 0 : circumference);\n\n\t\t\tvar resetRadius = animationOpts.animateScale ? 0 : scale.getDistanceFromCenterForValue(dataset.data[index]);\n\n\t\t\thelpers.extend(arc, {\n\t\t\t\t// Utility\n\t\t\t\t_datasetIndex: me.index,\n\t\t\t\t_index: index,\n\t\t\t\t_scale: scale,\n\n\t\t\t\t// Desired view properties\n\t\t\t\t_model: {\n\t\t\t\t\tx: centerX,\n\t\t\t\t\ty: centerY,\n\t\t\t\t\tinnerRadius: 0,\n\t\t\t\t\touterRadius: reset ? resetRadius : distance,\n\t\t\t\t\tstartAngle: reset && animationOpts.animateRotate ? datasetStartAngle : startAngle,\n\t\t\t\t\tendAngle: reset && animationOpts.animateRotate ? datasetStartAngle : endAngle,\n\t\t\t\t\tlabel: getValueAtIndexOrDefault(labels, index, labels[index])\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// Apply border and fill style\n\t\t\tme.removeHoverStyle(arc);\n\n\t\t\tarc.pivot();\n\t\t},\n\n\t\tremoveHoverStyle: function(arc) {\n\t\t\tChart.DatasetController.prototype.removeHoverStyle.call(this, arc, this.chart.options.elements.arc);\n\t\t},\n\n\t\tcountVisibleElements: function() {\n\t\t\tvar dataset = this.getDataset();\n\t\t\tvar meta = this.getMeta();\n\t\t\tvar count = 0;\n\n\t\t\thelpers.each(meta.data, function(element, index) {\n\t\t\t\tif (!isNaN(dataset.data[index]) && !element.hidden) {\n\t\t\t\t\tcount++;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\treturn count;\n\t\t},\n\n\t\tcalculateCircumference: function(value) {\n\t\t\tvar count = this.getMeta().count;\n\t\t\tif (count > 0 && !isNaN(value)) {\n\t\t\t\treturn (2 * Math.PI) / count;\n\t\t\t}\n\t\t\treturn 0;\n\t\t}\n\t});\n};\n","'use strict';\n\nmodule.exports = function(Chart) {\n\n\tvar helpers = Chart.helpers;\n\n\tChart.defaults.radar = {\n\t\tscale: {\n\t\t\ttype: 'radialLinear'\n\t\t},\n\t\telements: {\n\t\t\tline: {\n\t\t\t\ttension: 0 // no bezier in radar\n\t\t\t}\n\t\t}\n\t};\n\n\tChart.controllers.radar = Chart.DatasetController.extend({\n\n\t\tdatasetElementType: Chart.elements.Line,\n\n\t\tdataElementType: Chart.elements.Point,\n\n\t\tlinkScales: helpers.noop,\n\n\t\taddElementAndReset: function(index) {\n\t\t\tChart.DatasetController.prototype.addElementAndReset.call(this, index);\n\n\t\t\t// Make sure bezier control points are updated\n\t\t\tthis.updateBezierControlPoints();\n\t\t},\n\n\t\tupdate: function(reset) {\n\t\t\tvar me = this;\n\t\t\tvar meta = me.getMeta();\n\t\t\tvar line = meta.dataset;\n\t\t\tvar points = meta.data;\n\t\t\tvar custom = line.custom || {};\n\t\t\tvar dataset = me.getDataset();\n\t\t\tvar lineElementOptions = me.chart.options.elements.line;\n\t\t\tvar scale = me.chart.scale;\n\n\t\t\t// Compatibility: If the properties are defined with only the old name, use those values\n\t\t\tif ((dataset.tension !== undefined) && (dataset.lineTension === undefined)) {\n\t\t\t\tdataset.lineTension = dataset.tension;\n\t\t\t}\n\n\t\t\thelpers.extend(meta.dataset, {\n\t\t\t\t// Utility\n\t\t\t\t_datasetIndex: me.index,\n\t\t\t\t// Data\n\t\t\t\t_children: points,\n\t\t\t\t_loop: true,\n\t\t\t\t// Model\n\t\t\t\t_model: {\n\t\t\t\t\t// Appearance\n\t\t\t\t\ttension: custom.tension ? custom.tension : helpers.getValueOrDefault(dataset.lineTension, lineElementOptions.tension),\n\t\t\t\t\tbackgroundColor: custom.backgroundColor ? custom.backgroundColor : (dataset.backgroundColor || lineElementOptions.backgroundColor),\n\t\t\t\t\tborderWidth: custom.borderWidth ? custom.borderWidth : (dataset.borderWidth || lineElementOptions.borderWidth),\n\t\t\t\t\tborderColor: custom.borderColor ? custom.borderColor : (dataset.borderColor || lineElementOptions.borderColor),\n\t\t\t\t\tfill: custom.fill ? custom.fill : (dataset.fill !== undefined ? dataset.fill : lineElementOptions.fill),\n\t\t\t\t\tborderCapStyle: custom.borderCapStyle ? custom.borderCapStyle : (dataset.borderCapStyle || lineElementOptions.borderCapStyle),\n\t\t\t\t\tborderDash: custom.borderDash ? custom.borderDash : (dataset.borderDash || lineElementOptions.borderDash),\n\t\t\t\t\tborderDashOffset: custom.borderDashOffset ? custom.borderDashOffset : (dataset.borderDashOffset || lineElementOptions.borderDashOffset),\n\t\t\t\t\tborderJoinStyle: custom.borderJoinStyle ? custom.borderJoinStyle : (dataset.borderJoinStyle || lineElementOptions.borderJoinStyle),\n\n\t\t\t\t\t// Scale\n\t\t\t\t\tscaleTop: scale.top,\n\t\t\t\t\tscaleBottom: scale.bottom,\n\t\t\t\t\tscaleZero: scale.getBasePosition()\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tmeta.dataset.pivot();\n\n\t\t\t// Update Points\n\t\t\thelpers.each(points, function(point, index) {\n\t\t\t\tme.updateElement(point, index, reset);\n\t\t\t}, me);\n\n\n\t\t\t// Update bezier control points\n\t\t\tme.updateBezierControlPoints();\n\t\t},\n\t\tupdateElement: function(point, index, reset) {\n\t\t\tvar me = this;\n\t\t\tvar custom = point.custom || {};\n\t\t\tvar dataset = me.getDataset();\n\t\t\tvar scale = me.chart.scale;\n\t\t\tvar pointElementOptions = me.chart.options.elements.point;\n\t\t\tvar pointPosition = scale.getPointPositionForValue(index, dataset.data[index]);\n\n\t\t\thelpers.extend(point, {\n\t\t\t\t// Utility\n\t\t\t\t_datasetIndex: me.index,\n\t\t\t\t_index: index,\n\t\t\t\t_scale: scale,\n\n\t\t\t\t// Desired view properties\n\t\t\t\t_model: {\n\t\t\t\t\tx: reset ? scale.xCenter : pointPosition.x, // value not used in dataset scale, but we want a consistent API between scales\n\t\t\t\t\ty: reset ? scale.yCenter : pointPosition.y,\n\n\t\t\t\t\t// Appearance\n\t\t\t\t\ttension: custom.tension ? custom.tension : helpers.getValueOrDefault(dataset.tension, me.chart.options.elements.line.tension),\n\t\t\t\t\tradius: custom.radius ? custom.radius : helpers.getValueAtIndexOrDefault(dataset.pointRadius, index, pointElementOptions.radius),\n\t\t\t\t\tbackgroundColor: custom.backgroundColor ? custom.backgroundColor : helpers.getValueAtIndexOrDefault(dataset.pointBackgroundColor, index, pointElementOptions.backgroundColor),\n\t\t\t\t\tborderColor: custom.borderColor ? custom.borderColor : helpers.getValueAtIndexOrDefault(dataset.pointBorderColor, index, pointElementOptions.borderColor),\n\t\t\t\t\tborderWidth: custom.borderWidth ? custom.borderWidth : helpers.getValueAtIndexOrDefault(dataset.pointBorderWidth, index, pointElementOptions.borderWidth),\n\t\t\t\t\tpointStyle: custom.pointStyle ? custom.pointStyle : helpers.getValueAtIndexOrDefault(dataset.pointStyle, index, pointElementOptions.pointStyle),\n\n\t\t\t\t\t// Tooltip\n\t\t\t\t\thitRadius: custom.hitRadius ? custom.hitRadius : helpers.getValueAtIndexOrDefault(dataset.hitRadius, index, pointElementOptions.hitRadius)\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tpoint._model.skip = custom.skip ? custom.skip : (isNaN(point._model.x) || isNaN(point._model.y));\n\t\t},\n\t\tupdateBezierControlPoints: function() {\n\t\t\tvar chartArea = this.chart.chartArea;\n\t\t\tvar meta = this.getMeta();\n\n\t\t\thelpers.each(meta.data, function(point, index) {\n\t\t\t\tvar model = point._model;\n\t\t\t\tvar controlPoints = helpers.splineCurve(\n\t\t\t\t\thelpers.previousItem(meta.data, index, true)._model,\n\t\t\t\t\tmodel,\n\t\t\t\t\thelpers.nextItem(meta.data, index, true)._model,\n\t\t\t\t\tmodel.tension\n\t\t\t\t);\n\n\t\t\t\t// Prevent the bezier going outside of the bounds of the graph\n\t\t\t\tmodel.controlPointPreviousX = Math.max(Math.min(controlPoints.previous.x, chartArea.right), chartArea.left);\n\t\t\t\tmodel.controlPointPreviousY = Math.max(Math.min(controlPoints.previous.y, chartArea.bottom), chartArea.top);\n\n\t\t\t\tmodel.controlPointNextX = Math.max(Math.min(controlPoints.next.x, chartArea.right), chartArea.left);\n\t\t\t\tmodel.controlPointNextY = Math.max(Math.min(controlPoints.next.y, chartArea.bottom), chartArea.top);\n\n\t\t\t\t// Now pivot the point for animation\n\t\t\t\tpoint.pivot();\n\t\t\t});\n\t\t},\n\n\t\tdraw: function(ease) {\n\t\t\tvar meta = this.getMeta();\n\t\t\tvar easingDecimal = ease || 1;\n\n\t\t\t// Transition Point Locations\n\t\t\thelpers.each(meta.data, function(point) {\n\t\t\t\tpoint.transition(easingDecimal);\n\t\t\t});\n\n\t\t\t// Transition and Draw the line\n\t\t\tmeta.dataset.transition(easingDecimal).draw();\n\n\t\t\t// Draw the points\n\t\t\thelpers.each(meta.data, function(point) {\n\t\t\t\tpoint.draw();\n\t\t\t});\n\t\t},\n\n\t\tsetHoverStyle: function(point) {\n\t\t\t// Point\n\t\t\tvar dataset = this.chart.data.datasets[point._datasetIndex];\n\t\t\tvar custom = point.custom || {};\n\t\t\tvar index = point._index;\n\t\t\tvar model = point._model;\n\n\t\t\tmodel.radius = custom.hoverRadius ? custom.hoverRadius : helpers.getValueAtIndexOrDefault(dataset.pointHoverRadius, index, this.chart.options.elements.point.hoverRadius);\n\t\t\tmodel.backgroundColor = custom.hoverBackgroundColor ? custom.hoverBackgroundColor : helpers.getValueAtIndexOrDefault(dataset.pointHoverBackgroundColor, index, helpers.getHoverColor(model.backgroundColor));\n\t\t\tmodel.borderColor = custom.hoverBorderColor ? custom.hoverBorderColor : helpers.getValueAtIndexOrDefault(dataset.pointHoverBorderColor, index, helpers.getHoverColor(model.borderColor));\n\t\t\tmodel.borderWidth = custom.hoverBorderWidth ? custom.hoverBorderWidth : helpers.getValueAtIndexOrDefault(dataset.pointHoverBorderWidth, index, model.borderWidth);\n\t\t},\n\n\t\tremoveHoverStyle: function(point) {\n\t\t\tvar dataset = this.chart.data.datasets[point._datasetIndex];\n\t\t\tvar custom = point.custom || {};\n\t\t\tvar index = point._index;\n\t\t\tvar model = point._model;\n\t\t\tvar pointElementOptions = this.chart.options.elements.point;\n\n\t\t\tmodel.radius = custom.radius ? custom.radius : helpers.getValueAtIndexOrDefault(dataset.radius, index, pointElementOptions.radius);\n\t\t\tmodel.backgroundColor = custom.backgroundColor ? custom.backgroundColor : helpers.getValueAtIndexOrDefault(dataset.pointBackgroundColor, index, pointElementOptions.backgroundColor);\n\t\t\tmodel.borderColor = custom.borderColor ? custom.borderColor : helpers.getValueAtIndexOrDefault(dataset.pointBorderColor, index, pointElementOptions.borderColor);\n\t\t\tmodel.borderWidth = custom.borderWidth ? custom.borderWidth : helpers.getValueAtIndexOrDefault(dataset.pointBorderWidth, index, pointElementOptions.borderWidth);\n\t\t}\n\t});\n};\n","/* global window: false */\n'use strict';\n\nmodule.exports = function(Chart) {\n\n\tvar helpers = Chart.helpers;\n\n\tChart.defaults.global.animation = {\n\t\tduration: 1000,\n\t\teasing: 'easeOutQuart',\n\t\tonProgress: helpers.noop,\n\t\tonComplete: helpers.noop\n\t};\n\n\tChart.Animation = Chart.Element.extend({\n\t\tcurrentStep: null, // the current animation step\n\t\tnumSteps: 60, // default number of steps\n\t\teasing: '', // the easing to use for this animation\n\t\trender: null, // render function used by the animation service\n\n\t\tonAnimationProgress: null, // user specified callback to fire on each step of the animation\n\t\tonAnimationComplete: null // user specified callback to fire when the animation finishes\n\t});\n\n\tChart.animationService = {\n\t\tframeDuration: 17,\n\t\tanimations: [],\n\t\tdropFrames: 0,\n\t\trequest: null,\n\t\taddAnimation: function(chartInstance, animationObject, duration, lazy) {\n\t\t\tvar me = this;\n\n\t\t\tif (!lazy) {\n\t\t\t\tchartInstance.animating = true;\n\t\t\t}\n\n\t\t\tfor (var index = 0; index < me.animations.length; ++index) {\n\t\t\t\tif (me.animations[index].chartInstance === chartInstance) {\n\t\t\t\t\t// replacing an in progress animation\n\t\t\t\t\tme.animations[index].animationObject = animationObject;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tme.animations.push({\n\t\t\t\tchartInstance: chartInstance,\n\t\t\t\tanimationObject: animationObject\n\t\t\t});\n\n\t\t\t// If there are no animations queued, manually kickstart a digest, for lack of a better word\n\t\t\tif (me.animations.length === 1) {\n\t\t\t\tme.requestAnimationFrame();\n\t\t\t}\n\t\t},\n\t\t// Cancel the animation for a given chart instance\n\t\tcancelAnimation: function(chartInstance) {\n\t\t\tvar index = helpers.findIndex(this.animations, function(animationWrapper) {\n\t\t\t\treturn animationWrapper.chartInstance === chartInstance;\n\t\t\t});\n\n\t\t\tif (index !== -1) {\n\t\t\t\tthis.animations.splice(index, 1);\n\t\t\t\tchartInstance.animating = false;\n\t\t\t}\n\t\t},\n\t\trequestAnimationFrame: function() {\n\t\t\tvar me = this;\n\t\t\tif (me.request === null) {\n\t\t\t\t// Skip animation frame requests until the active one is executed.\n\t\t\t\t// This can happen when processing mouse events, e.g. 'mousemove'\n\t\t\t\t// and 'mouseout' events will trigger multiple renders.\n\t\t\t\tme.request = helpers.requestAnimFrame.call(window, function() {\n\t\t\t\t\tme.request = null;\n\t\t\t\t\tme.startDigest();\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\tstartDigest: function() {\n\t\t\tvar me = this;\n\n\t\t\tvar startTime = Date.now();\n\t\t\tvar framesToDrop = 0;\n\n\t\t\tif (me.dropFrames > 1) {\n\t\t\t\tframesToDrop = Math.floor(me.dropFrames);\n\t\t\t\tme.dropFrames = me.dropFrames % 1;\n\t\t\t}\n\n\t\t\tvar i = 0;\n\t\t\twhile (i < me.animations.length) {\n\t\t\t\tif (me.animations[i].animationObject.currentStep === null) {\n\t\t\t\t\tme.animations[i].animationObject.currentStep = 0;\n\t\t\t\t}\n\n\t\t\t\tme.animations[i].animationObject.currentStep += 1 + framesToDrop;\n\n\t\t\t\tif (me.animations[i].animationObject.currentStep > me.animations[i].animationObject.numSteps) {\n\t\t\t\t\tme.animations[i].animationObject.currentStep = me.animations[i].animationObject.numSteps;\n\t\t\t\t}\n\n\t\t\t\tme.animations[i].animationObject.render(me.animations[i].chartInstance, me.animations[i].animationObject);\n\t\t\t\tif (me.animations[i].animationObject.onAnimationProgress && me.animations[i].animationObject.onAnimationProgress.call) {\n\t\t\t\t\tme.animations[i].animationObject.onAnimationProgress.call(me.animations[i].chartInstance, me.animations[i]);\n\t\t\t\t}\n\n\t\t\t\tif (me.animations[i].animationObject.currentStep === me.animations[i].animationObject.numSteps) {\n\t\t\t\t\tif (me.animations[i].animationObject.onAnimationComplete && me.animations[i].animationObject.onAnimationComplete.call) {\n\t\t\t\t\t\tme.animations[i].animationObject.onAnimationComplete.call(me.animations[i].chartInstance, me.animations[i]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// executed the last frame. Remove the animation.\n\t\t\t\t\tme.animations[i].chartInstance.animating = false;\n\n\t\t\t\t\tme.animations.splice(i, 1);\n\t\t\t\t} else {\n\t\t\t\t\t++i;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvar endTime = Date.now();\n\t\t\tvar dropFrames = (endTime - startTime) / me.frameDuration;\n\n\t\t\tme.dropFrames += dropFrames;\n\n\t\t\t// Do we have more stuff to animate?\n\t\t\tif (me.animations.length > 0) {\n\t\t\t\tme.requestAnimationFrame();\n\t\t\t}\n\t\t}\n\t};\n};\n","'use strict';\n\nmodule.exports = function(Chart) {\n\t// Global Chart canvas helpers object for drawing items to canvas\n\tvar helpers = Chart.canvasHelpers = {};\n\n\thelpers.drawPoint = function(ctx, pointStyle, radius, x, y) {\n\t\tvar type, edgeLength, xOffset, yOffset, height, size;\n\n\t\tif (typeof pointStyle === 'object') {\n\t\t\ttype = pointStyle.toString();\n\t\t\tif (type === '[object HTMLImageElement]' || type === '[object HTMLCanvasElement]') {\n\t\t\t\tctx.drawImage(pointStyle, x - pointStyle.width / 2, y - pointStyle.height / 2);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tif (isNaN(radius) || radius <= 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tswitch (pointStyle) {\n\t\t// Default includes circle\n\t\tdefault:\n\t\t\tctx.beginPath();\n\t\t\tctx.arc(x, y, radius, 0, Math.PI * 2);\n\t\t\tctx.closePath();\n\t\t\tctx.fill();\n\t\t\tbreak;\n\t\tcase 'triangle':\n\t\t\tctx.beginPath();\n\t\t\tedgeLength = 3 * radius / Math.sqrt(3);\n\t\t\theight = edgeLength * Math.sqrt(3) / 2;\n\t\t\tctx.moveTo(x - edgeLength / 2, y + height / 3);\n\t\t\tctx.lineTo(x + edgeLength / 2, y + height / 3);\n\t\t\tctx.lineTo(x, y - 2 * height / 3);\n\t\t\tctx.closePath();\n\t\t\tctx.fill();\n\t\t\tbreak;\n\t\tcase 'rect':\n\t\t\tsize = 1 / Math.SQRT2 * radius;\n\t\t\tctx.beginPath();\n\t\t\tctx.fillRect(x - size, y - size, 2 * size, 2 * size);\n\t\t\tctx.strokeRect(x - size, y - size, 2 * size, 2 * size);\n\t\t\tbreak;\n\t\tcase 'rectRot':\n\t\t\tsize = 1 / Math.SQRT2 * radius;\n\t\t\tctx.beginPath();\n\t\t\tctx.moveTo(x - size, y);\n\t\t\tctx.lineTo(x, y + size);\n\t\t\tctx.lineTo(x + size, y);\n\t\t\tctx.lineTo(x, y - size);\n\t\t\tctx.closePath();\n\t\t\tctx.fill();\n\t\t\tbreak;\n\t\tcase 'cross':\n\t\t\tctx.beginPath();\n\t\t\tctx.moveTo(x, y + radius);\n\t\t\tctx.lineTo(x, y - radius);\n\t\t\tctx.moveTo(x - radius, y);\n\t\t\tctx.lineTo(x + radius, y);\n\t\t\tctx.closePath();\n\t\t\tbreak;\n\t\tcase 'crossRot':\n\t\t\tctx.beginPath();\n\t\t\txOffset = Math.cos(Math.PI / 4) * radius;\n\t\t\tyOffset = Math.sin(Math.PI / 4) * radius;\n\t\t\tctx.moveTo(x - xOffset, y - yOffset);\n\t\t\tctx.lineTo(x + xOffset, y + yOffset);\n\t\t\tctx.moveTo(x - xOffset, y + yOffset);\n\t\t\tctx.lineTo(x + xOffset, y - yOffset);\n\t\t\tctx.closePath();\n\t\t\tbreak;\n\t\tcase 'star':\n\t\t\tctx.beginPath();\n\t\t\tctx.moveTo(x, y + radius);\n\t\t\tctx.lineTo(x, y - radius);\n\t\t\tctx.moveTo(x - radius, y);\n\t\t\tctx.lineTo(x + radius, y);\n\t\t\txOffset = Math.cos(Math.PI / 4) * radius;\n\t\t\tyOffset = Math.sin(Math.PI / 4) * radius;\n\t\t\tctx.moveTo(x - xOffset, y - yOffset);\n\t\t\tctx.lineTo(x + xOffset, y + yOffset);\n\t\t\tctx.moveTo(x - xOffset, y + yOffset);\n\t\t\tctx.lineTo(x + xOffset, y - yOffset);\n\t\t\tctx.closePath();\n\t\t\tbreak;\n\t\tcase 'line':\n\t\t\tctx.beginPath();\n\t\t\tctx.moveTo(x - radius, y);\n\t\t\tctx.lineTo(x + radius, y);\n\t\t\tctx.closePath();\n\t\t\tbreak;\n\t\tcase 'dash':\n\t\t\tctx.beginPath();\n\t\t\tctx.moveTo(x, y);\n\t\t\tctx.lineTo(x + radius, y);\n\t\t\tctx.closePath();\n\t\t\tbreak;\n\t\t}\n\n\t\tctx.stroke();\n\t};\n};\n","'use strict';\n\nmodule.exports = function(Chart) {\n\n\tvar helpers = Chart.helpers;\n\t// Create a dictionary of chart types, to allow for extension of existing types\n\tChart.types = {};\n\n\t// Store a reference to each instance - allowing us to globally resize chart instances on window resize.\n\t// Destroy method on the chart will remove the instance of the chart from this reference.\n\tChart.instances = {};\n\n\t// Controllers available for dataset visualization eg. bar, line, slice, etc.\n\tChart.controllers = {};\n\n\t/**\n\t * @class Chart.Controller\n\t * The main controller of a chart.\n\t */\n\tChart.Controller = function(instance) {\n\n\t\tthis.chart = instance;\n\t\tthis.config = instance.config;\n\t\tthis.options = this.config.options = helpers.configMerge(Chart.defaults.global, Chart.defaults[this.config.type], this.config.options || {});\n\t\tthis.id = helpers.uid();\n\n\t\tObject.defineProperty(this, 'data', {\n\t\t\tget: function() {\n\t\t\t\treturn this.config.data;\n\t\t\t}\n\t\t});\n\n\t\t// Add the chart instance to the global namespace\n\t\tChart.instances[this.id] = this;\n\n\t\tif (this.options.responsive) {\n\t\t\t// Silent resize before chart draws\n\t\t\tthis.resize(true);\n\t\t}\n\n\t\tthis.initialize();\n\n\t\treturn this;\n\t};\n\n\thelpers.extend(Chart.Controller.prototype, /** @lends Chart.Controller */ {\n\n\t\tinitialize: function() {\n\t\t\tvar me = this;\n\t\t\t// Before init plugin notification\n\t\t\tChart.plugins.notify('beforeInit', [me]);\n\n\t\t\tme.bindEvents();\n\n\t\t\t// Make sure controllers are built first so that each dataset is bound to an axis before the scales\n\t\t\t// are built\n\t\t\tme.ensureScalesHaveIDs();\n\t\t\tme.buildOrUpdateControllers();\n\t\t\tme.buildScales();\n\t\t\tme.updateLayout();\n\t\t\tme.resetElements();\n\t\t\tme.initToolTip();\n\t\t\tme.update();\n\n\t\t\t// After init plugin notification\n\t\t\tChart.plugins.notify('afterInit', [me]);\n\n\t\t\treturn me;\n\t\t},\n\n\t\tclear: function() {\n\t\t\thelpers.clear(this.chart);\n\t\t\treturn this;\n\t\t},\n\n\t\tstop: function() {\n\t\t\t// Stops any current animation loop occuring\n\t\t\tChart.animationService.cancelAnimation(this);\n\t\t\treturn this;\n\t\t},\n\n\t\tresize: function(silent) {\n\t\t\tvar me = this;\n\t\t\tvar chart = me.chart;\n\t\t\tvar canvas = chart.canvas;\n\t\t\tvar newWidth = helpers.getMaximumWidth(canvas);\n\t\t\tvar aspectRatio = chart.aspectRatio;\n\t\t\tvar newHeight = (me.options.maintainAspectRatio && isNaN(aspectRatio) === false && isFinite(aspectRatio) && aspectRatio !== 0) ? newWidth / aspectRatio : helpers.getMaximumHeight(canvas);\n\n\t\t\tvar sizeChanged = chart.width !== newWidth || chart.height !== newHeight;\n\n\t\t\tif (!sizeChanged) {\n\t\t\t\treturn me;\n\t\t\t}\n\n\t\t\tcanvas.width = chart.width = newWidth;\n\t\t\tcanvas.height = chart.height = newHeight;\n\n\t\t\thelpers.retinaScale(chart);\n\n\t\t\t// Notify any plugins about the resize\n\t\t\tvar newSize = {width: newWidth, height: newHeight};\n\t\t\tChart.plugins.notify('resize', [me, newSize]);\n\n\t\t\t// Notify of resize\n\t\t\tif (me.options.onResize) {\n\t\t\t\tme.options.onResize(me, newSize);\n\t\t\t}\n\n\t\t\tif (!silent) {\n\t\t\t\tme.stop();\n\t\t\t\tme.update(me.options.responsiveAnimationDuration);\n\t\t\t}\n\n\t\t\treturn me;\n\t\t},\n\n\t\tensureScalesHaveIDs: function() {\n\t\t\tvar options = this.options;\n\t\t\tvar scalesOptions = options.scales || {};\n\t\t\tvar scaleOptions = options.scale;\n\n\t\t\thelpers.each(scalesOptions.xAxes, function(xAxisOptions, index) {\n\t\t\t\txAxisOptions.id = xAxisOptions.id || ('x-axis-' + index);\n\t\t\t});\n\n\t\t\thelpers.each(scalesOptions.yAxes, function(yAxisOptions, index) {\n\t\t\t\tyAxisOptions.id = yAxisOptions.id || ('y-axis-' + index);\n\t\t\t});\n\n\t\t\tif (scaleOptions) {\n\t\t\t\tscaleOptions.id = scaleOptions.id || 'scale';\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Builds a map of scale ID to scale object for future lookup.\n\t\t */\n\t\tbuildScales: function() {\n\t\t\tvar me = this;\n\t\t\tvar options = me.options;\n\t\t\tvar scales = me.scales = {};\n\t\t\tvar items = [];\n\n\t\t\tif (options.scales) {\n\t\t\t\titems = items.concat(\n\t\t\t\t\t(options.scales.xAxes || []).map(function(xAxisOptions) {\n\t\t\t\t\t\treturn {options: xAxisOptions, dtype: 'category'};\n\t\t\t\t\t}),\n\t\t\t\t\t(options.scales.yAxes || []).map(function(yAxisOptions) {\n\t\t\t\t\t\treturn {options: yAxisOptions, dtype: 'linear'};\n\t\t\t\t\t})\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tif (options.scale) {\n\t\t\t\titems.push({options: options.scale, dtype: 'radialLinear', isDefault: true});\n\t\t\t}\n\n\t\t\thelpers.each(items, function(item) {\n\t\t\t\tvar scaleOptions = item.options;\n\t\t\t\tvar scaleType = helpers.getValueOrDefault(scaleOptions.type, item.dtype);\n\t\t\t\tvar scaleClass = Chart.scaleService.getScaleConstructor(scaleType);\n\t\t\t\tif (!scaleClass) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tvar scale = new scaleClass({\n\t\t\t\t\tid: scaleOptions.id,\n\t\t\t\t\toptions: scaleOptions,\n\t\t\t\t\tctx: me.chart.ctx,\n\t\t\t\t\tchart: me\n\t\t\t\t});\n\n\t\t\t\tscales[scale.id] = scale;\n\n\t\t\t\t// TODO(SB): I think we should be able to remove this custom case (options.scale)\n\t\t\t\t// and consider it as a regular scale part of the \"scales\"\" map only! This would\n\t\t\t\t// make the logic easier and remove some useless? custom code.\n\t\t\t\tif (item.isDefault) {\n\t\t\t\t\tme.scale = scale;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tChart.scaleService.addScalesToLayout(this);\n\t\t},\n\n\t\tupdateLayout: function() {\n\t\t\tChart.layoutService.update(this, this.chart.width, this.chart.height);\n\t\t},\n\n\t\tbuildOrUpdateControllers: function() {\n\t\t\tvar me = this;\n\t\t\tvar types = [];\n\t\t\tvar newControllers = [];\n\n\t\t\thelpers.each(me.data.datasets, function(dataset, datasetIndex) {\n\t\t\t\tvar meta = me.getDatasetMeta(datasetIndex);\n\t\t\t\tif (!meta.type) {\n\t\t\t\t\tmeta.type = dataset.type || me.config.type;\n\t\t\t\t}\n\n\t\t\t\ttypes.push(meta.type);\n\n\t\t\t\tif (meta.controller) {\n\t\t\t\t\tmeta.controller.updateIndex(datasetIndex);\n\t\t\t\t} else {\n\t\t\t\t\tmeta.controller = new Chart.controllers[meta.type](me, datasetIndex);\n\t\t\t\t\tnewControllers.push(meta.controller);\n\t\t\t\t}\n\t\t\t}, me);\n\n\t\t\tif (types.length > 1) {\n\t\t\t\tfor (var i = 1; i < types.length; i++) {\n\t\t\t\t\tif (types[i] !== types[i - 1]) {\n\t\t\t\t\t\tme.isCombo = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn newControllers;\n\t\t},\n\n\t\tresetElements: function() {\n\t\t\tvar me = this;\n\t\t\thelpers.each(me.data.datasets, function(dataset, datasetIndex) {\n\t\t\t\tme.getDatasetMeta(datasetIndex).controller.reset();\n\t\t\t}, me);\n\t\t},\n\n\t\tupdate: function(animationDuration, lazy) {\n\t\t\tvar me = this;\n\t\t\tChart.plugins.notify('beforeUpdate', [me]);\n\n\t\t\t// In case the entire data object changed\n\t\t\tme.tooltip._data = me.data;\n\n\t\t\t// Make sure dataset controllers are updated and new controllers are reset\n\t\t\tvar newControllers = me.buildOrUpdateControllers();\n\n\t\t\t// Make sure all dataset controllers have correct meta data counts\n\t\t\thelpers.each(me.data.datasets, function(dataset, datasetIndex) {\n\t\t\t\tme.getDatasetMeta(datasetIndex).controller.buildOrUpdateElements();\n\t\t\t}, me);\n\n\t\t\tChart.layoutService.update(me, me.chart.width, me.chart.height);\n\n\t\t\t// Apply changes to the dataets that require the scales to have been calculated i.e BorderColor chages\n\t\t\tChart.plugins.notify('afterScaleUpdate', [me]);\n\n\t\t\t// Can only reset the new controllers after the scales have been updated\n\t\t\thelpers.each(newControllers, function(controller) {\n\t\t\t\tcontroller.reset();\n\t\t\t});\n\n\t\t\tme.updateDatasets();\n\n\t\t\t// Do this before render so that any plugins that need final scale updates can use it\n\t\t\tChart.plugins.notify('afterUpdate', [me]);\n\n\t\t\tme.render(animationDuration, lazy);\n\t\t},\n\n\t\t/**\n\t\t * @method beforeDatasetsUpdate\n\t\t * @description Called before all datasets are updated. If a plugin returns false,\n\t\t * the datasets update will be cancelled until another chart update is triggered.\n\t\t * @param {Object} instance the chart instance being updated.\n\t\t * @returns {Boolean} false to cancel the datasets update.\n\t\t * @memberof Chart.PluginBase\n\t\t * @since version 2.1.5\n\t\t * @instance\n\t\t */\n\n\t\t/**\n\t\t * @method afterDatasetsUpdate\n\t\t * @description Called after all datasets have been updated. Note that this\n\t\t * extension will not be called if the datasets update has been cancelled.\n\t\t * @param {Object} instance the chart instance being updated.\n\t\t * @memberof Chart.PluginBase\n\t\t * @since version 2.1.5\n\t\t * @instance\n\t\t */\n\n\t\t/**\n\t\t * Updates all datasets unless a plugin returns false to the beforeDatasetsUpdate\n\t\t * extension, in which case no datasets will be updated and the afterDatasetsUpdate\n\t\t * notification will be skipped.\n\t\t * @protected\n\t\t * @instance\n\t\t */\n\t\tupdateDatasets: function() {\n\t\t\tvar me = this;\n\t\t\tvar i, ilen;\n\n\t\t\tif (Chart.plugins.notify('beforeDatasetsUpdate', [me])) {\n\t\t\t\tfor (i = 0, ilen = me.data.datasets.length; i < ilen; ++i) {\n\t\t\t\t\tme.getDatasetMeta(i).controller.update();\n\t\t\t\t}\n\n\t\t\t\tChart.plugins.notify('afterDatasetsUpdate', [me]);\n\t\t\t}\n\t\t},\n\n\t\trender: function(duration, lazy) {\n\t\t\tvar me = this;\n\t\t\tChart.plugins.notify('beforeRender', [me]);\n\n\t\t\tvar animationOptions = me.options.animation;\n\t\t\tif (animationOptions && ((typeof duration !== 'undefined' && duration !== 0) || (typeof duration === 'undefined' && animationOptions.duration !== 0))) {\n\t\t\t\tvar animation = new Chart.Animation();\n\t\t\t\tanimation.numSteps = (duration || animationOptions.duration) / 16.66; // 60 fps\n\t\t\t\tanimation.easing = animationOptions.easing;\n\n\t\t\t\t// render function\n\t\t\t\tanimation.render = function(chartInstance, animationObject) {\n\t\t\t\t\tvar easingFunction = helpers.easingEffects[animationObject.easing];\n\t\t\t\t\tvar stepDecimal = animationObject.currentStep / animationObject.numSteps;\n\t\t\t\t\tvar easeDecimal = easingFunction(stepDecimal);\n\n\t\t\t\t\tchartInstance.draw(easeDecimal, stepDecimal, animationObject.currentStep);\n\t\t\t\t};\n\n\t\t\t\t// user events\n\t\t\t\tanimation.onAnimationProgress = animationOptions.onProgress;\n\t\t\t\tanimation.onAnimationComplete = animationOptions.onComplete;\n\n\t\t\t\tChart.animationService.addAnimation(me, animation, duration, lazy);\n\t\t\t} else {\n\t\t\t\tme.draw();\n\t\t\t\tif (animationOptions && animationOptions.onComplete && animationOptions.onComplete.call) {\n\t\t\t\t\tanimationOptions.onComplete.call(me);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn me;\n\t\t},\n\n\t\tdraw: function(ease) {\n\t\t\tvar me = this;\n\t\t\tvar easingDecimal = ease || 1;\n\t\t\tme.clear();\n\n\t\t\tChart.plugins.notify('beforeDraw', [me, easingDecimal]);\n\n\t\t\t// Draw all the scales\n\t\t\thelpers.each(me.boxes, function(box) {\n\t\t\t\tbox.draw(me.chartArea);\n\t\t\t}, me);\n\t\t\tif (me.scale) {\n\t\t\t\tme.scale.draw();\n\t\t\t}\n\n\t\t\tChart.plugins.notify('beforeDatasetsDraw', [me, easingDecimal]);\n\n\t\t\t// Draw each dataset via its respective controller (reversed to support proper line stacking)\n\t\t\thelpers.each(me.data.datasets, function(dataset, datasetIndex) {\n\t\t\t\tif (me.isDatasetVisible(datasetIndex)) {\n\t\t\t\t\tme.getDatasetMeta(datasetIndex).controller.draw(ease);\n\t\t\t\t}\n\t\t\t}, me, true);\n\n\t\t\tChart.plugins.notify('afterDatasetsDraw', [me, easingDecimal]);\n\n\t\t\t// Finally draw the tooltip\n\t\t\tme.tooltip.transition(easingDecimal).draw();\n\n\t\t\tChart.plugins.notify('afterDraw', [me, easingDecimal]);\n\t\t},\n\n\t\t// Get the single element that was clicked on\n\t\t// @return : An object containing the dataset index and element index of the matching element. Also contains the rectangle that was draw\n\t\tgetElementAtEvent: function(e) {\n\t\t\tvar me = this;\n\t\t\tvar eventPosition = helpers.getRelativePosition(e, me.chart);\n\t\t\tvar elementsArray = [];\n\n\t\t\thelpers.each(me.data.datasets, function(dataset, datasetIndex) {\n\t\t\t\tif (me.isDatasetVisible(datasetIndex)) {\n\t\t\t\t\tvar meta = me.getDatasetMeta(datasetIndex);\n\t\t\t\t\thelpers.each(meta.data, function(element) {\n\t\t\t\t\t\tif (element.inRange(eventPosition.x, eventPosition.y)) {\n\t\t\t\t\t\t\telementsArray.push(element);\n\t\t\t\t\t\t\treturn elementsArray;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\n\t\t\treturn elementsArray.slice(0, 1);\n\t\t},\n\n\t\tgetElementsAtEvent: function(e) {\n\t\t\tvar me = this;\n\t\t\tvar eventPosition = helpers.getRelativePosition(e, me.chart);\n\t\t\tvar elementsArray = [];\n\n\t\t\tvar found = function() {\n\t\t\t\tif (me.data.datasets) {\n\t\t\t\t\tfor (var i = 0; i < me.data.datasets.length; i++) {\n\t\t\t\t\t\tvar meta = me.getDatasetMeta(i);\n\t\t\t\t\t\tif (me.isDatasetVisible(i)) {\n\t\t\t\t\t\t\tfor (var j = 0; j < meta.data.length; j++) {\n\t\t\t\t\t\t\t\tif (meta.data[j].inRange(eventPosition.x, eventPosition.y)) {\n\t\t\t\t\t\t\t\t\treturn meta.data[j];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}.call(me);\n\n\t\t\tif (!found) {\n\t\t\t\treturn elementsArray;\n\t\t\t}\n\n\t\t\thelpers.each(me.data.datasets, function(dataset, datasetIndex) {\n\t\t\t\tif (me.isDatasetVisible(datasetIndex)) {\n\t\t\t\t\tvar meta = me.getDatasetMeta(datasetIndex),\n\t\t\t\t\t\telement = meta.data[found._index];\n\t\t\t\t\tif (element && !element._view.skip) {\n\t\t\t\t\t\telementsArray.push(element);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}, me);\n\n\t\t\treturn elementsArray;\n\t\t},\n\n\t\tgetElementsAtXAxis: function(e) {\n\t\t\tvar me = this;\n\t\t\tvar eventPosition = helpers.getRelativePosition(e, me.chart);\n\t\t\tvar elementsArray = [];\n\n\t\t\tvar found = function() {\n\t\t\t\tif (me.data.datasets) {\n\t\t\t\t\tfor (var i = 0; i < me.data.datasets.length; i++) {\n\t\t\t\t\t\tvar meta = me.getDatasetMeta(i);\n\t\t\t\t\t\tif (me.isDatasetVisible(i)) {\n\t\t\t\t\t\t\tfor (var j = 0; j < meta.data.length; j++) {\n\t\t\t\t\t\t\t\tif (meta.data[j].inLabelRange(eventPosition.x, eventPosition.y)) {\n\t\t\t\t\t\t\t\t\treturn meta.data[j];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}.call(me);\n\n\t\t\tif (!found) {\n\t\t\t\treturn elementsArray;\n\t\t\t}\n\n\t\t\thelpers.each(me.data.datasets, function(dataset, datasetIndex) {\n\t\t\t\tif (me.isDatasetVisible(datasetIndex)) {\n\t\t\t\t\tvar meta = me.getDatasetMeta(datasetIndex);\n\t\t\t\t\tvar index = helpers.findIndex(meta.data, function(it) {\n\t\t\t\t\t\treturn found._model.x === it._model.x;\n\t\t\t\t\t});\n\t\t\t\t\tif (index !== -1 && !meta.data[index]._view.skip) {\n\t\t\t\t\t\telementsArray.push(meta.data[index]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}, me);\n\n\t\t\treturn elementsArray;\n\t\t},\n\n\t\tgetElementsAtEventForMode: function(e, mode) {\n\t\t\tvar me = this;\n\t\t\tswitch (mode) {\n\t\t\tcase 'single':\n\t\t\t\treturn me.getElementAtEvent(e);\n\t\t\tcase 'label':\n\t\t\t\treturn me.getElementsAtEvent(e);\n\t\t\tcase 'dataset':\n\t\t\t\treturn me.getDatasetAtEvent(e);\n\t\t\tcase 'x-axis':\n\t\t\t\treturn me.getElementsAtXAxis(e);\n\t\t\tdefault:\n\t\t\t\treturn e;\n\t\t\t}\n\t\t},\n\n\t\tgetDatasetAtEvent: function(e) {\n\t\t\tvar elementsArray = this.getElementAtEvent(e);\n\n\t\t\tif (elementsArray.length > 0) {\n\t\t\t\telementsArray = this.getDatasetMeta(elementsArray[0]._datasetIndex).data;\n\t\t\t}\n\n\t\t\treturn elementsArray;\n\t\t},\n\n\t\tgetDatasetMeta: function(datasetIndex) {\n\t\t\tvar me = this;\n\t\t\tvar dataset = me.data.datasets[datasetIndex];\n\t\t\tif (!dataset._meta) {\n\t\t\t\tdataset._meta = {};\n\t\t\t}\n\n\t\t\tvar meta = dataset._meta[me.id];\n\t\t\tif (!meta) {\n\t\t\t\tmeta = dataset._meta[me.id] = {\n\t\t\t\t\ttype: null,\n\t\t\t\t\tdata: [],\n\t\t\t\t\tdataset: null,\n\t\t\t\t\tcontroller: null,\n\t\t\t\t\thidden: null,\t\t\t// See isDatasetVisible() comment\n\t\t\t\t\txAxisID: null,\n\t\t\t\t\tyAxisID: null\n\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn meta;\n\t\t},\n\n\t\tgetVisibleDatasetCount: function() {\n\t\t\tvar count = 0;\n\t\t\tfor (var i = 0, ilen = this.data.datasets.length; i<ilen; ++i) {\n\t\t\t\tif (this.isDatasetVisible(i)) {\n\t\t\t\t\tcount++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn count;\n\t\t},\n\n\t\tisDatasetVisible: function(datasetIndex) {\n\t\t\tvar meta = this.getDatasetMeta(datasetIndex);\n\n\t\t\t// meta.hidden is a per chart dataset hidden flag override with 3 states: if true or false,\n\t\t\t// the dataset.hidden value is ignored, else if null, the dataset hidden state is returned.\n\t\t\treturn typeof meta.hidden === 'boolean'? !meta.hidden : !this.data.datasets[datasetIndex].hidden;\n\t\t},\n\n\t\tgenerateLegend: function() {\n\t\t\treturn this.options.legendCallback(this);\n\t\t},\n\n\t\tdestroy: function() {\n\t\t\tvar me = this;\n\t\t\tme.stop();\n\t\t\tme.clear();\n\t\t\thelpers.unbindEvents(me, me.events);\n\t\t\thelpers.removeResizeListener(me.chart.canvas.parentNode);\n\n\t\t\t// Reset canvas height/width attributes\n\t\t\tvar canvas = me.chart.canvas;\n\t\t\tcanvas.width = me.chart.width;\n\t\t\tcanvas.height = me.chart.height;\n\n\t\t\t// if we scaled the canvas in response to a devicePixelRatio !== 1, we need to undo that transform here\n\t\t\tif (me.chart.originalDevicePixelRatio !== undefined) {\n\t\t\t\tme.chart.ctx.scale(1 / me.chart.originalDevicePixelRatio, 1 / me.chart.originalDevicePixelRatio);\n\t\t\t}\n\n\t\t\t// Reset to the old style since it may have been changed by the device pixel ratio changes\n\t\t\tcanvas.style.width = me.chart.originalCanvasStyleWidth;\n\t\t\tcanvas.style.height = me.chart.originalCanvasStyleHeight;\n\n\t\t\tChart.plugins.notify('destroy', [me]);\n\n\t\t\tdelete Chart.instances[me.id];\n\t\t},\n\n\t\ttoBase64Image: function() {\n\t\t\treturn this.chart.canvas.toDataURL.apply(this.chart.canvas, arguments);\n\t\t},\n\n\t\tinitToolTip: function() {\n\t\t\tvar me = this;\n\t\t\tme.tooltip = new Chart.Tooltip({\n\t\t\t\t_chart: me.chart,\n\t\t\t\t_chartInstance: me,\n\t\t\t\t_data: me.data,\n\t\t\t\t_options: me.options.tooltips\n\t\t\t}, me);\n\t\t},\n\n\t\tbindEvents: function() {\n\t\t\tvar me = this;\n\t\t\thelpers.bindEvents(me, me.options.events, function(evt) {\n\t\t\t\tme.eventHandler(evt);\n\t\t\t});\n\t\t},\n\n\t\tupdateHoverStyle: function(elements, mode, enabled) {\n\t\t\tvar method = enabled? 'setHoverStyle' : 'removeHoverStyle';\n\t\t\tvar element, i, ilen;\n\n\t\t\tswitch (mode) {\n\t\t\tcase 'single':\n\t\t\t\telements = [elements[0]];\n\t\t\t\tbreak;\n\t\t\tcase 'label':\n\t\t\tcase 'dataset':\n\t\t\tcase 'x-axis':\n\t\t\t\t// elements = elements;\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\t// unsupported mode\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tfor (i=0, ilen=elements.length; i<ilen; ++i) {\n\t\t\t\telement = elements[i];\n\t\t\t\tif (element) {\n\t\t\t\t\tthis.getDatasetMeta(element._datasetIndex).controller[method](element);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\teventHandler: function(e) {\n\t\t\tvar me = this;\n\t\t\tvar tooltip = me.tooltip;\n\t\t\tvar options = me.options || {};\n\t\t\tvar hoverOptions = options.hover;\n\t\t\tvar tooltipsOptions = options.tooltips;\n\n\t\t\tme.lastActive = me.lastActive || [];\n\t\t\tme.lastTooltipActive = me.lastTooltipActive || [];\n\n\t\t\t// Find Active Elements for hover and tooltips\n\t\t\tif (e.type === 'mouseout') {\n\t\t\t\tme.active = [];\n\t\t\t\tme.tooltipActive = [];\n\t\t\t} else {\n\t\t\t\tme.active = me.getElementsAtEventForMode(e, hoverOptions.mode);\n\t\t\t\tme.tooltipActive = me.getElementsAtEventForMode(e, tooltipsOptions.mode);\n\t\t\t}\n\n\t\t\t// On Hover hook\n\t\t\tif (hoverOptions.onHover) {\n\t\t\t\thoverOptions.onHover.call(me, me.active);\n\t\t\t}\n\n\t\t\tif (me.legend && me.legend.handleEvent) {\n\t\t\t\tme.legend.handleEvent(e);\n\t\t\t}\n\n\t\t\tif (e.type === 'mouseup' || e.type === 'click') {\n\t\t\t\tif (options.onClick) {\n\t\t\t\t\toptions.onClick.call(me, e, me.active);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove styling for last active (even if it may still be active)\n\t\t\tif (me.lastActive.length) {\n\t\t\t\tme.updateHoverStyle(me.lastActive, hoverOptions.mode, false);\n\t\t\t}\n\n\t\t\t// Built in hover styling\n\t\t\tif (me.active.length && hoverOptions.mode) {\n\t\t\t\tme.updateHoverStyle(me.active, hoverOptions.mode, true);\n\t\t\t}\n\n\t\t\t// Built in Tooltips\n\t\t\tif (tooltipsOptions.enabled || tooltipsOptions.custom) {\n\t\t\t\ttooltip.initialize();\n\t\t\t\ttooltip._active = me.tooltipActive;\n\t\t\t\ttooltip.update(true);\n\t\t\t}\n\n\t\t\t// Hover animations\n\t\t\ttooltip.pivot();\n\n\t\t\tif (!me.animating) {\n\t\t\t\t// If entering, leaving, or changing elements, animate the change via pivot\n\t\t\t\tif (!helpers.arrayEquals(me.active, me.lastActive) ||\n\t\t\t\t\t!helpers.arrayEquals(me.tooltipActive, me.lastTooltipActive)) {\n\n\t\t\t\t\tme.stop();\n\n\t\t\t\t\tif (tooltipsOptions.enabled || tooltipsOptions.custom) {\n\t\t\t\t\t\ttooltip.update(true);\n\t\t\t\t\t}\n\n\t\t\t\t\t// We only need to render at this point. Updating will cause scales to be\n\t\t\t\t\t// recomputed generating flicker & using more memory than necessary.\n\t\t\t\t\tme.render(hoverOptions.animationDuration, true);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remember Last Actives\n\t\t\tme.lastActive = me.active;\n\t\t\tme.lastTooltipActive = me.tooltipActive;\n\t\t\treturn me;\n\t\t}\n\t});\n};\n","'use strict';\n\nmodule.exports = function(Chart) {\n\n\tvar helpers = Chart.helpers;\n\tvar noop = helpers.noop;\n\n\t// Base class for all dataset controllers (line, bar, etc)\n\tChart.DatasetController = function(chart, datasetIndex) {\n\t\tthis.initialize(chart, datasetIndex);\n\t};\n\n\thelpers.extend(Chart.DatasetController.prototype, {\n\n\t\t/**\n\t\t * Element type used to generate a meta dataset (e.g. Chart.element.Line).\n\t\t * @type {Chart.core.element}\n\t\t */\n\t\tdatasetElementType: null,\n\n\t\t/**\n\t\t * Element type used to generate a meta data (e.g. Chart.element.Point).\n\t\t * @type {Chart.core.element}\n\t\t */\n\t\tdataElementType: null,\n\n\t\tinitialize: function(chart, datasetIndex) {\n\t\t\tvar me = this;\n\t\t\tme.chart = chart;\n\t\t\tme.index = datasetIndex;\n\t\t\tme.linkScales();\n\t\t\tme.addElements();\n\t\t},\n\n\t\tupdateIndex: function(datasetIndex) {\n\t\t\tthis.index = datasetIndex;\n\t\t},\n\n\t\tlinkScales: function() {\n\t\t\tvar me = this;\n\t\t\tvar meta = me.getMeta();\n\t\t\tvar dataset = me.getDataset();\n\n\t\t\tif (meta.xAxisID === null) {\n\t\t\t\tmeta.xAxisID = dataset.xAxisID || me.chart.options.scales.xAxes[0].id;\n\t\t\t}\n\t\t\tif (meta.yAxisID === null) {\n\t\t\t\tmeta.yAxisID = dataset.yAxisID || me.chart.options.scales.yAxes[0].id;\n\t\t\t}\n\t\t},\n\n\t\tgetDataset: function() {\n\t\t\treturn this.chart.data.datasets[this.index];\n\t\t},\n\n\t\tgetMeta: function() {\n\t\t\treturn this.chart.getDatasetMeta(this.index);\n\t\t},\n\n\t\tgetScaleForId: function(scaleID) {\n\t\t\treturn this.chart.scales[scaleID];\n\t\t},\n\n\t\treset: function() {\n\t\t\tthis.update(true);\n\t\t},\n\n\t\tcreateMetaDataset: function() {\n\t\t\tvar me = this;\n\t\t\tvar type = me.datasetElementType;\n\t\t\treturn type && new type({\n\t\t\t\t_chart: me.chart.chart,\n\t\t\t\t_datasetIndex: me.index\n\t\t\t});\n\t\t},\n\n\t\tcreateMetaData: function(index) {\n\t\t\tvar me = this;\n\t\t\tvar type = me.dataElementType;\n\t\t\treturn type && new type({\n\t\t\t\t_chart: me.chart.chart,\n\t\t\t\t_datasetIndex: me.index,\n\t\t\t\t_index: index\n\t\t\t});\n\t\t},\n\n\t\taddElements: function() {\n\t\t\tvar me = this;\n\t\t\tvar meta = me.getMeta();\n\t\t\tvar data = me.getDataset().data || [];\n\t\t\tvar metaData = meta.data;\n\t\t\tvar i, ilen;\n\n\t\t\tfor (i=0, ilen=data.length; i<ilen; ++i) {\n\t\t\t\tmetaData[i] = metaData[i] || me.createMetaData(meta, i);\n\t\t\t}\n\n\t\t\tmeta.dataset = meta.dataset || me.createMetaDataset();\n\t\t},\n\n\t\taddElementAndReset: function(index) {\n\t\t\tvar me = this;\n\t\t\tvar element = me.createMetaData(index);\n\t\t\tme.getMeta().data.splice(index, 0, element);\n\t\t\tme.updateElement(element, index, true);\n\t\t},\n\n\t\tbuildOrUpdateElements: function() {\n\t\t\t// Handle the number of data points changing\n\t\t\tvar meta = this.getMeta(),\n\t\t\t\tmd = meta.data,\n\t\t\t\tnumData = this.getDataset().data.length,\n\t\t\t\tnumMetaData = md.length;\n\n\t\t\t// Make sure that we handle number of datapoints changing\n\t\t\tif (numData < numMetaData) {\n\t\t\t\t// Remove excess bars for data points that have been removed\n\t\t\t\tmd.splice(numData, numMetaData - numData);\n\t\t\t} else if (numData > numMetaData) {\n\t\t\t\t// Add new elements\n\t\t\t\tfor (var index = numMetaData; index < numData; ++index) {\n\t\t\t\t\tthis.addElementAndReset(index);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tupdate: noop,\n\n\t\tdraw: function(ease) {\n\t\t\tvar easingDecimal = ease || 1;\n\t\t\thelpers.each(this.getMeta().data, function(element) {\n\t\t\t\telement.transition(easingDecimal).draw();\n\t\t\t});\n\t\t},\n\n\t\tremoveHoverStyle: function(element, elementOpts) {\n\t\t\tvar dataset = this.chart.data.datasets[element._datasetIndex],\n\t\t\t\tindex = element._index,\n\t\t\t\tcustom = element.custom || {},\n\t\t\t\tvalueOrDefault = helpers.getValueAtIndexOrDefault,\n\t\t\t\tmodel = element._model;\n\n\t\t\tmodel.backgroundColor = custom.backgroundColor ? custom.backgroundColor : valueOrDefault(dataset.backgroundColor, index, elementOpts.backgroundColor);\n\t\t\tmodel.borderColor = custom.borderColor ? custom.borderColor : valueOrDefault(dataset.borderColor, index, elementOpts.borderColor);\n\t\t\tmodel.borderWidth = custom.borderWidth ? custom.borderWidth : valueOrDefault(dataset.borderWidth, index, elementOpts.borderWidth);\n\t\t},\n\n\t\tsetHoverStyle: function(element) {\n\t\t\tvar dataset = this.chart.data.datasets[element._datasetIndex],\n\t\t\t\tindex = element._index,\n\t\t\t\tcustom = element.custom || {},\n\t\t\t\tvalueOrDefault = helpers.getValueAtIndexOrDefault,\n\t\t\t\tgetHoverColor = helpers.getHoverColor,\n\t\t\t\tmodel = element._model;\n\n\t\t\tmodel.backgroundColor = custom.hoverBackgroundColor ? custom.hoverBackgroundColor : valueOrDefault(dataset.hoverBackgroundColor, index, getHoverColor(model.backgroundColor));\n\t\t\tmodel.borderColor = custom.hoverBorderColor ? custom.hoverBorderColor : valueOrDefault(dataset.hoverBorderColor, index, getHoverColor(model.borderColor));\n\t\t\tmodel.borderWidth = custom.hoverBorderWidth ? custom.hoverBorderWidth : valueOrDefault(dataset.hoverBorderWidth, index, model.borderWidth);\n\t\t}\n\n\t});\n\n\tChart.DatasetController.extend = helpers.inherits;\n};\n","'use strict';\n\nmodule.exports = function(Chart) {\n\n\tvar helpers = Chart.helpers;\n\n\tChart.elements = {};\n\n\tChart.Element = function(configuration) {\n\t\thelpers.extend(this, configuration);\n\t\tthis.initialize.apply(this, arguments);\n\t};\n\n\thelpers.extend(Chart.Element.prototype, {\n\n\t\tinitialize: function() {\n\t\t\tthis.hidden = false;\n\t\t},\n\n\t\tpivot: function() {\n\t\t\tvar me = this;\n\t\t\tif (!me._view) {\n\t\t\t\tme._view = helpers.clone(me._model);\n\t\t\t}\n\t\t\tme._start = helpers.clone(me._view);\n\t\t\treturn me;\n\t\t},\n\n\t\ttransition: function(ease) {\n\t\t\tvar me = this;\n\n\t\t\tif (!me._view) {\n\t\t\t\tme._view = helpers.clone(me._model);\n\t\t\t}\n\n\t\t\t// No animation -> No Transition\n\t\t\tif (ease === 1) {\n\t\t\t\tme._view = me._model;\n\t\t\t\tme._start = null;\n\t\t\t\treturn me;\n\t\t\t}\n\n\t\t\tif (!me._start) {\n\t\t\t\tme.pivot();\n\t\t\t}\n\n\t\t\thelpers.each(me._model, function(value, key) {\n\n\t\t\t\tif (key[0] === '_') {\n\t\t\t\t\t// Only non-underscored properties\n\t\t\t\t// Init if doesn't exist\n\t\t\t\t} else if (!me._view.hasOwnProperty(key)) {\n\t\t\t\t\tif (typeof value === 'number' && !isNaN(me._view[key])) {\n\t\t\t\t\t\tme._view[key] = value * ease;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tme._view[key] = value;\n\t\t\t\t\t}\n\t\t\t\t// No unnecessary computations\n\t\t\t\t} else if (value === me._view[key]) {\n\t\t\t\t\t// It's the same! Woohoo!\n\t\t\t\t// Color transitions if possible\n\t\t\t\t} else if (typeof value === 'string') {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tvar color = helpers.color(me._model[key]).mix(helpers.color(me._start[key]), ease);\n\t\t\t\t\t\tme._view[key] = color.rgbString();\n\t\t\t\t\t} catch (err) {\n\t\t\t\t\t\tme._view[key] = value;\n\t\t\t\t\t}\n\t\t\t\t// Number transitions\n\t\t\t\t} else if (typeof value === 'number') {\n\t\t\t\t\tvar startVal = me._start[key] !== undefined && isNaN(me._start[key]) === false ? me._start[key] : 0;\n\t\t\t\t\tme._view[key] = ((me._model[key] - startVal) * ease) + startVal;\n\t\t\t\t// Everything else\n\t\t\t\t} else {\n\t\t\t\t\tme._view[key] = value;\n\t\t\t\t}\n\t\t\t}, me);\n\n\t\t\treturn me;\n\t\t},\n\n\t\ttooltipPosition: function() {\n\t\t\treturn {\n\t\t\t\tx: this._model.x,\n\t\t\t\ty: this._model.y\n\t\t\t};\n\t\t},\n\n\t\thasValue: function() {\n\t\t\treturn helpers.isNumber(this._model.x) && helpers.isNumber(this._model.y);\n\t\t}\n\t});\n\n\tChart.Element.extend = helpers.inherits;\n\n};\n","/* global window: false */\n/* global document: false */\n'use strict';\n\nvar color = require('chartjs-color');\n\nmodule.exports = function(Chart) {\n\t// Global Chart helpers object for utility methods and classes\n\tvar helpers = Chart.helpers = {};\n\n\t// -- Basic js utility methods\n\thelpers.each = function(loopable, callback, self, reverse) {\n\t\t// Check to see if null or undefined firstly.\n\t\tvar i, len;\n\t\tif (helpers.isArray(loopable)) {\n\t\t\tlen = loopable.length;\n\t\t\tif (reverse) {\n\t\t\t\tfor (i = len - 1; i >= 0; i--) {\n\t\t\t\t\tcallback.call(self, loopable[i], i);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor (i = 0; i < len; i++) {\n\t\t\t\t\tcallback.call(self, loopable[i], i);\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (typeof loopable === 'object') {\n\t\t\tvar keys = Object.keys(loopable);\n\t\t\tlen = keys.length;\n\t\t\tfor (i = 0; i < len; i++) {\n\t\t\t\tcallback.call(self, loopable[keys[i]], keys[i]);\n\t\t\t}\n\t\t}\n\t};\n\thelpers.clone = function(obj) {\n\t\tvar objClone = {};\n\t\thelpers.each(obj, function(value, key) {\n\t\t\tif (helpers.isArray(value)) {\n\t\t\t\tobjClone[key] = value.slice(0);\n\t\t\t} else if (typeof value === 'object' && value !== null) {\n\t\t\t\tobjClone[key] = helpers.clone(value);\n\t\t\t} else {\n\t\t\t\tobjClone[key] = value;\n\t\t\t}\n\t\t});\n\t\treturn objClone;\n\t};\n\thelpers.extend = function(base) {\n\t\tvar setFn = function(value, key) {\n\t\t\tbase[key] = value;\n\t\t};\n\t\tfor (var i = 1, ilen = arguments.length; i < ilen; i++) {\n\t\t\thelpers.each(arguments[i], setFn);\n\t\t}\n\t\treturn base;\n\t};\n\t// Need a special merge function to chart configs since they are now grouped\n\thelpers.configMerge = function(_base) {\n\t\tvar base = helpers.clone(_base);\n\t\thelpers.each(Array.prototype.slice.call(arguments, 1), function(extension) {\n\t\t\thelpers.each(extension, function(value, key) {\n\t\t\t\tif (key === 'scales') {\n\t\t\t\t\t// Scale config merging is complex. Add out own function here for that\n\t\t\t\t\tbase[key] = helpers.scaleMerge(base.hasOwnProperty(key) ? base[key] : {}, value);\n\n\t\t\t\t} else if (key === 'scale') {\n\t\t\t\t\t// Used in polar area & radar charts since there is only one scale\n\t\t\t\t\tbase[key] = helpers.configMerge(base.hasOwnProperty(key) ? base[key] : {}, Chart.scaleService.getScaleDefaults(value.type), value);\n\t\t\t\t} else if (base.hasOwnProperty(key) && helpers.isArray(base[key]) && helpers.isArray(value)) {\n\t\t\t\t\t// In this case we have an array of objects replacing another array. Rather than doing a strict replace,\n\t\t\t\t\t// merge. This allows easy scale option merging\n\t\t\t\t\tvar baseArray = base[key];\n\n\t\t\t\t\thelpers.each(value, function(valueObj, index) {\n\n\t\t\t\t\t\tif (index < baseArray.length) {\n\t\t\t\t\t\t\tif (typeof baseArray[index] === 'object' && baseArray[index] !== null && typeof valueObj === 'object' && valueObj !== null) {\n\t\t\t\t\t\t\t\t// Two objects are coming together. Do a merge of them.\n\t\t\t\t\t\t\t\tbaseArray[index] = helpers.configMerge(baseArray[index], valueObj);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t// Just overwrite in this case since there is nothing to merge\n\t\t\t\t\t\t\t\tbaseArray[index] = valueObj;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tbaseArray.push(valueObj); // nothing to merge\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\t} else if (base.hasOwnProperty(key) && typeof base[key] === 'object' && base[key] !== null && typeof value === 'object') {\n\t\t\t\t\t// If we are overwriting an object with an object, do a merge of the properties.\n\t\t\t\t\tbase[key] = helpers.configMerge(base[key], value);\n\n\t\t\t\t} else {\n\t\t\t\t\t// can just overwrite the value in this case\n\t\t\t\t\tbase[key] = value;\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\n\t\treturn base;\n\t};\n\thelpers.scaleMerge = function(_base, extension) {\n\t\tvar base = helpers.clone(_base);\n\n\t\thelpers.each(extension, function(value, key) {\n\t\t\tif (key === 'xAxes' || key === 'yAxes') {\n\t\t\t\t// These properties are arrays of items\n\t\t\t\tif (base.hasOwnProperty(key)) {\n\t\t\t\t\thelpers.each(value, function(valueObj, index) {\n\t\t\t\t\t\tvar axisType = helpers.getValueOrDefault(valueObj.type, key === 'xAxes' ? 'category' : 'linear');\n\t\t\t\t\t\tvar axisDefaults = Chart.scaleService.getScaleDefaults(axisType);\n\t\t\t\t\t\tif (index >= base[key].length || !base[key][index].type) {\n\t\t\t\t\t\t\tbase[key].push(helpers.configMerge(axisDefaults, valueObj));\n\t\t\t\t\t\t} else if (valueObj.type && valueObj.type !== base[key][index].type) {\n\t\t\t\t\t\t\t// Type changed. Bring in the new defaults before we bring in valueObj so that valueObj can override the correct scale defaults\n\t\t\t\t\t\t\tbase[key][index] = helpers.configMerge(base[key][index], axisDefaults, valueObj);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Type is the same\n\t\t\t\t\t\t\tbase[key][index] = helpers.configMerge(base[key][index], valueObj);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tbase[key] = [];\n\t\t\t\t\thelpers.each(value, function(valueObj) {\n\t\t\t\t\t\tvar axisType = helpers.getValueOrDefault(valueObj.type, key === 'xAxes' ? 'category' : 'linear');\n\t\t\t\t\t\tbase[key].push(helpers.configMerge(Chart.scaleService.getScaleDefaults(axisType), valueObj));\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t} else if (base.hasOwnProperty(key) && typeof base[key] === 'object' && base[key] !== null && typeof value === 'object') {\n\t\t\t\t// If we are overwriting an object with an object, do a merge of the properties.\n\t\t\t\tbase[key] = helpers.configMerge(base[key], value);\n\n\t\t\t} else {\n\t\t\t\t// can just overwrite the value in this case\n\t\t\t\tbase[key] = value;\n\t\t\t}\n\t\t});\n\n\t\treturn base;\n\t};\n\thelpers.getValueAtIndexOrDefault = function(value, index, defaultValue) {\n\t\tif (value === undefined || value === null) {\n\t\t\treturn defaultValue;\n\t\t}\n\n\t\tif (helpers.isArray(value)) {\n\t\t\treturn index < value.length ? value[index] : defaultValue;\n\t\t}\n\n\t\treturn value;\n\t};\n\thelpers.getValueOrDefault = function(value, defaultValue) {\n\t\treturn value === undefined ? defaultValue : value;\n\t};\n\thelpers.indexOf = Array.prototype.indexOf?\n\t\tfunction(array, item) {\n\t\t\treturn array.indexOf(item);\n\t\t}:\n\t\tfunction(array, item) {\n\t\t\tfor (var i = 0, ilen = array.length; i < ilen; ++i) {\n\t\t\t\tif (array[i] === item) {\n\t\t\t\t\treturn i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn -1;\n\t\t};\n\thelpers.where = function(collection, filterCallback) {\n\t\tif (helpers.isArray(collection) && Array.prototype.filter) {\n\t\t\treturn collection.filter(filterCallback);\n\t\t}\n\t\tvar filtered = [];\n\n\t\thelpers.each(collection, function(item) {\n\t\t\tif (filterCallback(item)) {\n\t\t\t\tfiltered.push(item);\n\t\t\t}\n\t\t});\n\n\t\treturn filtered;\n\t};\n\thelpers.findIndex = Array.prototype.findIndex?\n\t\tfunction(array, callback, scope) {\n\t\t\treturn array.findIndex(callback, scope);\n\t\t} :\n\t\tfunction(array, callback, scope) {\n\t\t\tscope = scope === undefined? array : scope;\n\t\t\tfor (var i = 0, ilen = array.length; i < ilen; ++i) {\n\t\t\t\tif (callback.call(scope, array[i], i, array)) {\n\t\t\t\t\treturn i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn -1;\n\t\t};\n\thelpers.findNextWhere = function(arrayToSearch, filterCallback, startIndex) {\n\t\t// Default to start of the array\n\t\tif (startIndex === undefined || startIndex === null) {\n\t\t\tstartIndex = -1;\n\t\t}\n\t\tfor (var i = startIndex + 1; i < arrayToSearch.length; i++) {\n\t\t\tvar currentItem = arrayToSearch[i];\n\t\t\tif (filterCallback(currentItem)) {\n\t\t\t\treturn currentItem;\n\t\t\t}\n\t\t}\n\t};\n\thelpers.findPreviousWhere = function(arrayToSearch, filterCallback, startIndex) {\n\t\t// Default to end of the array\n\t\tif (startIndex === undefined || startIndex === null) {\n\t\t\tstartIndex = arrayToSearch.length;\n\t\t}\n\t\tfor (var i = startIndex - 1; i >= 0; i--) {\n\t\t\tvar currentItem = arrayToSearch[i];\n\t\t\tif (filterCallback(currentItem)) {\n\t\t\t\treturn currentItem;\n\t\t\t}\n\t\t}\n\t};\n\thelpers.inherits = function(extensions) {\n\t\t// Basic javascript inheritance based on the model created in Backbone.js\n\t\tvar me = this;\n\t\tvar ChartElement = (extensions && extensions.hasOwnProperty('constructor')) ? extensions.constructor : function() {\n\t\t\treturn me.apply(this, arguments);\n\t\t};\n\n\t\tvar Surrogate = function() {\n\t\t\tthis.constructor = ChartElement;\n\t\t};\n\t\tSurrogate.prototype = me.prototype;\n\t\tChartElement.prototype = new Surrogate();\n\n\t\tChartElement.extend = helpers.inherits;\n\n\t\tif (extensions) {\n\t\t\thelpers.extend(ChartElement.prototype, extensions);\n\t\t}\n\n\t\tChartElement.__super__ = me.prototype;\n\n\t\treturn ChartElement;\n\t};\n\thelpers.noop = function() {};\n\thelpers.uid = (function() {\n\t\tvar id = 0;\n\t\treturn function() {\n\t\t\treturn id++;\n\t\t};\n\t}());\n\t// -- Math methods\n\thelpers.isNumber = function(n) {\n\t\treturn !isNaN(parseFloat(n)) && isFinite(n);\n\t};\n\thelpers.almostEquals = function(x, y, epsilon) {\n\t\treturn Math.abs(x - y) < epsilon;\n\t};\n\thelpers.max = function(array) {\n\t\treturn array.reduce(function(max, value) {\n\t\t\tif (!isNaN(value)) {\n\t\t\t\treturn Math.max(max, value);\n\t\t\t}\n\t\t\treturn max;\n\t\t}, Number.NEGATIVE_INFINITY);\n\t};\n\thelpers.min = function(array) {\n\t\treturn array.reduce(function(min, value) {\n\t\t\tif (!isNaN(value)) {\n\t\t\t\treturn Math.min(min, value);\n\t\t\t}\n\t\t\treturn min;\n\t\t}, Number.POSITIVE_INFINITY);\n\t};\n\thelpers.sign = Math.sign?\n\t\tfunction(x) {\n\t\t\treturn Math.sign(x);\n\t\t} :\n\t\tfunction(x) {\n\t\t\tx = +x; // convert to a number\n\t\t\tif (x === 0 || isNaN(x)) {\n\t\t\t\treturn x;\n\t\t\t}\n\t\t\treturn x > 0 ? 1 : -1;\n\t\t};\n\thelpers.log10 = Math.log10?\n\t\tfunction(x) {\n\t\t\treturn Math.log10(x);\n\t\t} :\n\t\tfunction(x) {\n\t\t\treturn Math.log(x) / Math.LN10;\n\t\t};\n\thelpers.toRadians = function(degrees) {\n\t\treturn degrees * (Math.PI / 180);\n\t};\n\thelpers.toDegrees = function(radians) {\n\t\treturn radians * (180 / Math.PI);\n\t};\n\t// Gets the angle from vertical upright to the point about a centre.\n\thelpers.getAngleFromPoint = function(centrePoint, anglePoint) {\n\t\tvar distanceFromXCenter = anglePoint.x - centrePoint.x,\n\t\t\tdistanceFromYCenter = anglePoint.y - centrePoint.y,\n\t\t\tradialDistanceFromCenter = Math.sqrt(distanceFromXCenter * distanceFromXCenter + distanceFromYCenter * distanceFromYCenter);\n\n\t\tvar angle = Math.atan2(distanceFromYCenter, distanceFromXCenter);\n\n\t\tif (angle < (-0.5 * Math.PI)) {\n\t\t\tangle += 2.0 * Math.PI; // make sure the returned angle is in the range of (-PI/2, 3PI/2]\n\t\t}\n\n\t\treturn {\n\t\t\tangle: angle,\n\t\t\tdistance: radialDistanceFromCenter\n\t\t};\n\t};\n\thelpers.aliasPixel = function(pixelWidth) {\n\t\treturn (pixelWidth % 2 === 0) ? 0 : 0.5;\n\t};\n\thelpers.splineCurve = function(firstPoint, middlePoint, afterPoint, t) {\n\t\t// Props to Rob Spencer at scaled innovation for his post on splining between points\n\t\t// http://scaledinnovation.com/analytics/splines/aboutSplines.html\n\n\t\t// This function must also respect \"skipped\" points\n\n\t\tvar previous = firstPoint.skip ? middlePoint : firstPoint,\n\t\t\tcurrent = middlePoint,\n\t\t\tnext = afterPoint.skip ? middlePoint : afterPoint;\n\n\t\tvar d01 = Math.sqrt(Math.pow(current.x - previous.x, 2) + Math.pow(current.y - previous.y, 2));\n\t\tvar d12 = Math.sqrt(Math.pow(next.x - current.x, 2) + Math.pow(next.y - current.y, 2));\n\n\t\tvar s01 = d01 / (d01 + d12);\n\t\tvar s12 = d12 / (d01 + d12);\n\n\t\t// If all points are the same, s01 & s02 will be inf\n\t\ts01 = isNaN(s01) ? 0 : s01;\n\t\ts12 = isNaN(s12) ? 0 : s12;\n\n\t\tvar fa = t * s01; // scaling factor for triangle Ta\n\t\tvar fb = t * s12;\n\n\t\treturn {\n\t\t\tprevious: {\n\t\t\t\tx: current.x - fa * (next.x - previous.x),\n\t\t\t\ty: current.y - fa * (next.y - previous.y)\n\t\t\t},\n\t\t\tnext: {\n\t\t\t\tx: current.x + fb * (next.x - previous.x),\n\t\t\t\ty: current.y + fb * (next.y - previous.y)\n\t\t\t}\n\t\t};\n\t};\n\thelpers.EPSILON = Number.EPSILON || 1e-14;\n\thelpers.splineCurveMonotone = function(points) {\n\t\t// This function calculates Bézier control points in a similar way than |splineCurve|,\n\t\t// but preserves monotonicity of the provided data and ensures no local extremums are added\n\t\t// between the dataset discrete points due to the interpolation.\n\t\t// See : https://en.wikipedia.org/wiki/Monotone_cubic_interpolation\n\n\t\tvar pointsWithTangents = (points || []).map(function(point) {\n\t\t\treturn {\n\t\t\t\tmodel: point._model,\n\t\t\t\tdeltaK: 0,\n\t\t\t\tmK: 0\n\t\t\t};\n\t\t});\n\n\t\t// Calculate slopes (deltaK) and initialize tangents (mK)\n\t\tvar pointsLen = pointsWithTangents.length;\n\t\tvar i, pointBefore, pointCurrent, pointAfter;\n\t\tfor (i = 0; i < pointsLen; ++i) {\n\t\t\tpointCurrent = pointsWithTangents[i];\n\t\t\tif (pointCurrent.model.skip) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tpointBefore = i > 0 ? pointsWithTangents[i - 1] : null;\n\t\t\tpointAfter = i < pointsLen - 1 ? pointsWithTangents[i + 1] : null;\n\t\t\tif (pointAfter && !pointAfter.model.skip) {\n\t\t\t\tpointCurrent.deltaK = (pointAfter.model.y - pointCurrent.model.y) / (pointAfter.model.x - pointCurrent.model.x);\n\t\t\t}\n\n\t\t\tif (!pointBefore || pointBefore.model.skip) {\n\t\t\t\tpointCurrent.mK = pointCurrent.deltaK;\n\t\t\t} else if (!pointAfter || pointAfter.model.skip) {\n\t\t\t\tpointCurrent.mK = pointBefore.deltaK;\n\t\t\t} else if (this.sign(pointBefore.deltaK) !== this.sign(pointCurrent.deltaK)) {\n\t\t\t\tpointCurrent.mK = 0;\n\t\t\t} else {\n\t\t\t\tpointCurrent.mK = (pointBefore.deltaK + pointCurrent.deltaK) / 2;\n\t\t\t}\n\t\t}\n\n\t\t// Adjust tangents to ensure monotonic properties\n\t\tvar alphaK, betaK, tauK, squaredMagnitude;\n\t\tfor (i = 0; i < pointsLen - 1; ++i) {\n\t\t\tpointCurrent = pointsWithTangents[i];\n\t\t\tpointAfter = pointsWithTangents[i + 1];\n\t\t\tif (pointCurrent.model.skip || pointAfter.model.skip) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (helpers.almostEquals(pointCurrent.deltaK, 0, this.EPSILON)) {\n\t\t\t\tpointCurrent.mK = pointAfter.mK = 0;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\talphaK = pointCurrent.mK / pointCurrent.deltaK;\n\t\t\tbetaK = pointAfter.mK / pointCurrent.deltaK;\n\t\t\tsquaredMagnitude = Math.pow(alphaK, 2) + Math.pow(betaK, 2);\n\t\t\tif (squaredMagnitude <= 9) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\ttauK = 3 / Math.sqrt(squaredMagnitude);\n\t\t\tpointCurrent.mK = alphaK * tauK * pointCurrent.deltaK;\n\t\t\tpointAfter.mK = betaK * tauK * pointCurrent.deltaK;\n\t\t}\n\n\t\t// Compute control points\n\t\tvar deltaX;\n\t\tfor (i = 0; i < pointsLen; ++i) {\n\t\t\tpointCurrent = pointsWithTangents[i];\n\t\t\tif (pointCurrent.model.skip) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tpointBefore = i > 0 ? pointsWithTangents[i - 1] : null;\n\t\t\tpointAfter = i < pointsLen - 1 ? pointsWithTangents[i + 1] : null;\n\t\t\tif (pointBefore && !pointBefore.model.skip) {\n\t\t\t\tdeltaX = (pointCurrent.model.x - pointBefore.model.x) / 3;\n\t\t\t\tpointCurrent.model.controlPointPreviousX = pointCurrent.model.x - deltaX;\n\t\t\t\tpointCurrent.model.controlPointPreviousY = pointCurrent.model.y - deltaX * pointCurrent.mK;\n\t\t\t}\n\t\t\tif (pointAfter && !pointAfter.model.skip) {\n\t\t\t\tdeltaX = (pointAfter.model.x - pointCurrent.model.x) / 3;\n\t\t\t\tpointCurrent.model.controlPointNextX = pointCurrent.model.x + deltaX;\n\t\t\t\tpointCurrent.model.controlPointNextY = pointCurrent.model.y + deltaX * pointCurrent.mK;\n\t\t\t}\n\t\t}\n\t};\n\thelpers.nextItem = function(collection, index, loop) {\n\t\tif (loop) {\n\t\t\treturn index >= collection.length - 1 ? collection[0] : collection[index + 1];\n\t\t}\n\t\treturn index >= collection.length - 1 ? collection[collection.length - 1] : collection[index + 1];\n\t};\n\thelpers.previousItem = function(collection, index, loop) {\n\t\tif (loop) {\n\t\t\treturn index <= 0 ? collection[collection.length - 1] : collection[index - 1];\n\t\t}\n\t\treturn index <= 0 ? collection[0] : collection[index - 1];\n\t};\n\t// Implementation of the nice number algorithm used in determining where axis labels will go\n\thelpers.niceNum = function(range, round) {\n\t\tvar exponent = Math.floor(helpers.log10(range));\n\t\tvar fraction = range / Math.pow(10, exponent);\n\t\tvar niceFraction;\n\n\t\tif (round) {\n\t\t\tif (fraction < 1.5) {\n\t\t\t\tniceFraction = 1;\n\t\t\t} else if (fraction < 3) {\n\t\t\t\tniceFraction = 2;\n\t\t\t} else if (fraction < 7) {\n\t\t\t\tniceFraction = 5;\n\t\t\t} else {\n\t\t\t\tniceFraction = 10;\n\t\t\t}\n\t\t} else if (fraction <= 1.0) {\n\t\t\tniceFraction = 1;\n\t\t} else if (fraction <= 2) {\n\t\t\tniceFraction = 2;\n\t\t} else if (fraction <= 5) {\n\t\t\tniceFraction = 5;\n\t\t} else {\n\t\t\tniceFraction = 10;\n\t\t}\n\n\t\treturn niceFraction * Math.pow(10, exponent);\n\t};\n\t// Easing functions adapted from Robert Penner's easing equations\n\t// http://www.robertpenner.com/easing/\n\tvar easingEffects = helpers.easingEffects = {\n\t\tlinear: function(t) {\n\t\t\treturn t;\n\t\t},\n\t\teaseInQuad: function(t) {\n\t\t\treturn t * t;\n\t\t},\n\t\teaseOutQuad: function(t) {\n\t\t\treturn -1 * t * (t - 2);\n\t\t},\n\t\teaseInOutQuad: function(t) {\n\t\t\tif ((t /= 1 / 2) < 1) {\n\t\t\t\treturn 1 / 2 * t * t;\n\t\t\t}\n\t\t\treturn -1 / 2 * ((--t) * (t - 2) - 1);\n\t\t},\n\t\teaseInCubic: function(t) {\n\t\t\treturn t * t * t;\n\t\t},\n\t\teaseOutCubic: function(t) {\n\t\t\treturn 1 * ((t = t / 1 - 1) * t * t + 1);\n\t\t},\n\t\teaseInOutCubic: function(t) {\n\t\t\tif ((t /= 1 / 2) < 1) {\n\t\t\t\treturn 1 / 2 * t * t * t;\n\t\t\t}\n\t\t\treturn 1 / 2 * ((t -= 2) * t * t + 2);\n\t\t},\n\t\teaseInQuart: function(t) {\n\t\t\treturn t * t * t * t;\n\t\t},\n\t\teaseOutQuart: function(t) {\n\t\t\treturn -1 * ((t = t / 1 - 1) * t * t * t - 1);\n\t\t},\n\t\teaseInOutQuart: function(t) {\n\t\t\tif ((t /= 1 / 2) < 1) {\n\t\t\t\treturn 1 / 2 * t * t * t * t;\n\t\t\t}\n\t\t\treturn -1 / 2 * ((t -= 2) * t * t * t - 2);\n\t\t},\n\t\teaseInQuint: function(t) {\n\t\t\treturn 1 * (t /= 1) * t * t * t * t;\n\t\t},\n\t\teaseOutQuint: function(t) {\n\t\t\treturn 1 * ((t = t / 1 - 1) * t * t * t * t + 1);\n\t\t},\n\t\teaseInOutQuint: function(t) {\n\t\t\tif ((t /= 1 / 2) < 1) {\n\t\t\t\treturn 1 / 2 * t * t * t * t * t;\n\t\t\t}\n\t\t\treturn 1 / 2 * ((t -= 2) * t * t * t * t + 2);\n\t\t},\n\t\teaseInSine: function(t) {\n\t\t\treturn -1 * Math.cos(t / 1 * (Math.PI / 2)) + 1;\n\t\t},\n\t\teaseOutSine: function(t) {\n\t\t\treturn 1 * Math.sin(t / 1 * (Math.PI / 2));\n\t\t},\n\t\teaseInOutSine: function(t) {\n\t\t\treturn -1 / 2 * (Math.cos(Math.PI * t / 1) - 1);\n\t\t},\n\t\teaseInExpo: function(t) {\n\t\t\treturn (t === 0) ? 1 : 1 * Math.pow(2, 10 * (t / 1 - 1));\n\t\t},\n\t\teaseOutExpo: function(t) {\n\t\t\treturn (t === 1) ? 1 : 1 * (-Math.pow(2, -10 * t / 1) + 1);\n\t\t},\n\t\teaseInOutExpo: function(t) {\n\t\t\tif (t === 0) {\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t\tif (t === 1) {\n\t\t\t\treturn 1;\n\t\t\t}\n\t\t\tif ((t /= 1 / 2) < 1) {\n\t\t\t\treturn 1 / 2 * Math.pow(2, 10 * (t - 1));\n\t\t\t}\n\t\t\treturn 1 / 2 * (-Math.pow(2, -10 * --t) + 2);\n\t\t},\n\t\teaseInCirc: function(t) {\n\t\t\tif (t >= 1) {\n\t\t\t\treturn t;\n\t\t\t}\n\t\t\treturn -1 * (Math.sqrt(1 - (t /= 1) * t) - 1);\n\t\t},\n\t\teaseOutCirc: function(t) {\n\t\t\treturn 1 * Math.sqrt(1 - (t = t / 1 - 1) * t);\n\t\t},\n\t\teaseInOutCirc: function(t) {\n\t\t\tif ((t /= 1 / 2) < 1) {\n\t\t\t\treturn -1 / 2 * (Math.sqrt(1 - t * t) - 1);\n\t\t\t}\n\t\t\treturn 1 / 2 * (Math.sqrt(1 - (t -= 2) * t) + 1);\n\t\t},\n\t\teaseInElastic: function(t) {\n\t\t\tvar s = 1.70158;\n\t\t\tvar p = 0;\n\t\t\tvar a = 1;\n\t\t\tif (t === 0) {\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t\tif ((t /= 1) === 1) {\n\t\t\t\treturn 1;\n\t\t\t}\n\t\t\tif (!p) {\n\t\t\t\tp = 1 * 0.3;\n\t\t\t}\n\t\t\tif (a < Math.abs(1)) {\n\t\t\t\ta = 1;\n\t\t\t\ts = p / 4;\n\t\t\t} else {\n\t\t\t\ts = p / (2 * Math.PI) * Math.asin(1 / a);\n\t\t\t}\n\t\t\treturn -(a * Math.pow(2, 10 * (t -= 1)) * Math.sin((t * 1 - s) * (2 * Math.PI) / p));\n\t\t},\n\t\teaseOutElastic: function(t) {\n\t\t\tvar s = 1.70158;\n\t\t\tvar p = 0;\n\t\t\tvar a = 1;\n\t\t\tif (t === 0) {\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t\tif ((t /= 1) === 1) {\n\t\t\t\treturn 1;\n\t\t\t}\n\t\t\tif (!p) {\n\t\t\t\tp = 1 * 0.3;\n\t\t\t}\n\t\t\tif (a < Math.abs(1)) {\n\t\t\t\ta = 1;\n\t\t\t\ts = p / 4;\n\t\t\t} else {\n\t\t\t\ts = p / (2 * Math.PI) * Math.asin(1 / a);\n\t\t\t}\n\t\t\treturn a * Math.pow(2, -10 * t) * Math.sin((t * 1 - s) * (2 * Math.PI) / p) + 1;\n\t\t},\n\t\teaseInOutElastic: function(t) {\n\t\t\tvar s = 1.70158;\n\t\t\tvar p = 0;\n\t\t\tvar a = 1;\n\t\t\tif (t === 0) {\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t\tif ((t /= 1 / 2) === 2) {\n\t\t\t\treturn 1;\n\t\t\t}\n\t\t\tif (!p) {\n\t\t\t\tp = 1 * (0.3 * 1.5);\n\t\t\t}\n\t\t\tif (a < Math.abs(1)) {\n\t\t\t\ta = 1;\n\t\t\t\ts = p / 4;\n\t\t\t} else {\n\t\t\t\ts = p / (2 * Math.PI) * Math.asin(1 / a);\n\t\t\t}\n\t\t\tif (t < 1) {\n\t\t\t\treturn -0.5 * (a * Math.pow(2, 10 * (t -= 1)) * Math.sin((t * 1 - s) * (2 * Math.PI) / p));\n\t\t\t}\n\t\t\treturn a * Math.pow(2, -10 * (t -= 1)) * Math.sin((t * 1 - s) * (2 * Math.PI) / p) * 0.5 + 1;\n\t\t},\n\t\teaseInBack: function(t) {\n\t\t\tvar s = 1.70158;\n\t\t\treturn 1 * (t /= 1) * t * ((s + 1) * t - s);\n\t\t},\n\t\teaseOutBack: function(t) {\n\t\t\tvar s = 1.70158;\n\t\t\treturn 1 * ((t = t / 1 - 1) * t * ((s + 1) * t + s) + 1);\n\t\t},\n\t\teaseInOutBack: function(t) {\n\t\t\tvar s = 1.70158;\n\t\t\tif ((t /= 1 / 2) < 1) {\n\t\t\t\treturn 1 / 2 * (t * t * (((s *= (1.525)) + 1) * t - s));\n\t\t\t}\n\t\t\treturn 1 / 2 * ((t -= 2) * t * (((s *= (1.525)) + 1) * t + s) + 2);\n\t\t},\n\t\teaseInBounce: function(t) {\n\t\t\treturn 1 - easingEffects.easeOutBounce(1 - t);\n\t\t},\n\t\teaseOutBounce: function(t) {\n\t\t\tif ((t /= 1) < (1 / 2.75)) {\n\t\t\t\treturn 1 * (7.5625 * t * t);\n\t\t\t} else if (t < (2 / 2.75)) {\n\t\t\t\treturn 1 * (7.5625 * (t -= (1.5 / 2.75)) * t + 0.75);\n\t\t\t} else if (t < (2.5 / 2.75)) {\n\t\t\t\treturn 1 * (7.5625 * (t -= (2.25 / 2.75)) * t + 0.9375);\n\t\t\t}\n\t\t\treturn 1 * (7.5625 * (t -= (2.625 / 2.75)) * t + 0.984375);\n\t\t},\n\t\teaseInOutBounce: function(t) {\n\t\t\tif (t < 1 / 2) {\n\t\t\t\treturn easingEffects.easeInBounce(t * 2) * 0.5;\n\t\t\t}\n\t\t\treturn easingEffects.easeOutBounce(t * 2 - 1) * 0.5 + 1 * 0.5;\n\t\t}\n\t};\n\t// Request animation polyfill - http://www.paulirish.com/2011/requestanimationframe-for-smart-animating/\n\thelpers.requestAnimFrame = (function() {\n\t\treturn window.requestAnimationFrame ||\n\t\t\twindow.webkitRequestAnimationFrame ||\n\t\t\twindow.mozRequestAnimationFrame ||\n\t\t\twindow.oRequestAnimationFrame ||\n\t\t\twindow.msRequestAnimationFrame ||\n\t\t\tfunction(callback) {\n\t\t\t\treturn window.setTimeout(callback, 1000 / 60);\n\t\t\t};\n\t}());\n\thelpers.cancelAnimFrame = (function() {\n\t\treturn window.cancelAnimationFrame ||\n\t\t\twindow.webkitCancelAnimationFrame ||\n\t\t\twindow.mozCancelAnimationFrame ||\n\t\t\twindow.oCancelAnimationFrame ||\n\t\t\twindow.msCancelAnimationFrame ||\n\t\t\tfunction(callback) {\n\t\t\t\treturn window.clearTimeout(callback, 1000 / 60);\n\t\t\t};\n\t}());\n\t// -- DOM methods\n\thelpers.getRelativePosition = function(evt, chart) {\n\t\tvar mouseX, mouseY;\n\t\tvar e = evt.originalEvent || evt,\n\t\t\tcanvas = evt.currentTarget || evt.srcElement,\n\t\t\tboundingRect = canvas.getBoundingClientRect();\n\n\t\tvar touches = e.touches;\n\t\tif (touches && touches.length > 0) {\n\t\t\tmouseX = touches[0].clientX;\n\t\t\tmouseY = touches[0].clientY;\n\n\t\t} else {\n\t\t\tmouseX = e.clientX;\n\t\t\tmouseY = e.clientY;\n\t\t}\n\n\t\t// Scale mouse coordinates into canvas coordinates\n\t\t// by following the pattern laid out by 'jerryj' in the comments of\n\t\t// http://www.html5canvastutorials.com/advanced/html5-canvas-mouse-coordinates/\n\t\tvar paddingLeft = parseFloat(helpers.getStyle(canvas, 'padding-left'));\n\t\tvar paddingTop = parseFloat(helpers.getStyle(canvas, 'padding-top'));\n\t\tvar paddingRight = parseFloat(helpers.getStyle(canvas, 'padding-right'));\n\t\tvar paddingBottom = parseFloat(helpers.getStyle(canvas, 'padding-bottom'));\n\t\tvar width = boundingRect.right - boundingRect.left - paddingLeft - paddingRight;\n\t\tvar height = boundingRect.bottom - boundingRect.top - paddingTop - paddingBottom;\n\n\t\t// We divide by the current device pixel ratio, because the canvas is scaled up by that amount in each direction. However\n\t\t// the backend model is in unscaled coordinates. Since we are going to deal with our model coordinates, we go back here\n\t\tmouseX = Math.round((mouseX - boundingRect.left - paddingLeft) / (width) * canvas.width / chart.currentDevicePixelRatio);\n\t\tmouseY = Math.round((mouseY - boundingRect.top - paddingTop) / (height) * canvas.height / chart.currentDevicePixelRatio);\n\n\t\treturn {\n\t\t\tx: mouseX,\n\t\t\ty: mouseY\n\t\t};\n\n\t};\n\thelpers.addEvent = function(node, eventType, method) {\n\t\tif (node.addEventListener) {\n\t\t\tnode.addEventListener(eventType, method);\n\t\t} else if (node.attachEvent) {\n\t\t\tnode.attachEvent('on' + eventType, method);\n\t\t} else {\n\t\t\tnode['on' + eventType] = method;\n\t\t}\n\t};\n\thelpers.removeEvent = function(node, eventType, handler) {\n\t\tif (node.removeEventListener) {\n\t\t\tnode.removeEventListener(eventType, handler, false);\n\t\t} else if (node.detachEvent) {\n\t\t\tnode.detachEvent('on' + eventType, handler);\n\t\t} else {\n\t\t\tnode['on' + eventType] = helpers.noop;\n\t\t}\n\t};\n\thelpers.bindEvents = function(chartInstance, arrayOfEvents, handler) {\n\t\t// Create the events object if it's not already present\n\t\tvar events = chartInstance.events = chartInstance.events || {};\n\n\t\thelpers.each(arrayOfEvents, function(eventName) {\n\t\t\tevents[eventName] = function() {\n\t\t\t\thandler.apply(chartInstance, arguments);\n\t\t\t};\n\t\t\thelpers.addEvent(chartInstance.chart.canvas, eventName, events[eventName]);\n\t\t});\n\t};\n\thelpers.unbindEvents = function(chartInstance, arrayOfEvents) {\n\t\tvar canvas = chartInstance.chart.canvas;\n\t\thelpers.each(arrayOfEvents, function(handler, eventName) {\n\t\t\thelpers.removeEvent(canvas, eventName, handler);\n\t\t});\n\t};\n\n\t// Private helper function to convert max-width/max-height values that may be percentages into a number\n\tfunction parseMaxStyle(styleValue, node, parentProperty) {\n\t\tvar valueInPixels;\n\t\tif (typeof(styleValue) === 'string') {\n\t\t\tvalueInPixels = parseInt(styleValue, 10);\n\n\t\t\tif (styleValue.indexOf('%') !== -1) {\n\t\t\t\t// percentage * size in dimension\n\t\t\t\tvalueInPixels = valueInPixels / 100 * node.parentNode[parentProperty];\n\t\t\t}\n\t\t} else {\n\t\t\tvalueInPixels = styleValue;\n\t\t}\n\n\t\treturn valueInPixels;\n\t}\n\n\t/**\n\t * Returns if the given value contains an effective constraint.\n\t * @private\n\t */\n\tfunction isConstrainedValue(value) {\n\t\treturn value !== undefined && value !== null && value !== 'none';\n\t}\n\n\t// Private helper to get a constraint dimension\n\t// @param domNode : the node to check the constraint on\n\t// @param maxStyle : the style that defines the maximum for the direction we are using (maxWidth / maxHeight)\n\t// @param percentageProperty : property of parent to use when calculating width as a percentage\n\t// @see http://www.nathanaeljones.com/blog/2013/reading-max-width-cross-browser\n\tfunction getConstraintDimension(domNode, maxStyle, percentageProperty) {\n\t\tvar view = document.defaultView;\n\t\tvar parentNode = domNode.parentNode;\n\t\tvar constrainedNode = view.getComputedStyle(domNode)[maxStyle];\n\t\tvar constrainedContainer = view.getComputedStyle(parentNode)[maxStyle];\n\t\tvar hasCNode = isConstrainedValue(constrainedNode);\n\t\tvar hasCContainer = isConstrainedValue(constrainedContainer);\n\t\tvar infinity = Number.POSITIVE_INFINITY;\n\n\t\tif (hasCNode || hasCContainer) {\n\t\t\treturn Math.min(\n\t\t\t\thasCNode? parseMaxStyle(constrainedNode, domNode, percentageProperty) : infinity,\n\t\t\t\thasCContainer? parseMaxStyle(constrainedContainer, parentNode, percentageProperty) : infinity);\n\t\t}\n\n\t\treturn 'none';\n\t}\n\t// returns Number or undefined if no constraint\n\thelpers.getConstraintWidth = function(domNode) {\n\t\treturn getConstraintDimension(domNode, 'max-width', 'clientWidth');\n\t};\n\t// returns Number or undefined if no constraint\n\thelpers.getConstraintHeight = function(domNode) {\n\t\treturn getConstraintDimension(domNode, 'max-height', 'clientHeight');\n\t};\n\thelpers.getMaximumWidth = function(domNode) {\n\t\tvar container = domNode.parentNode;\n\t\tvar paddingLeft = parseInt(helpers.getStyle(container, 'padding-left'), 10);\n\t\tvar paddingRight = parseInt(helpers.getStyle(container, 'padding-right'), 10);\n\t\tvar w = container.clientWidth - paddingLeft - paddingRight;\n\t\tvar cw = helpers.getConstraintWidth(domNode);\n\t\treturn isNaN(cw)? w : Math.min(w, cw);\n\t};\n\thelpers.getMaximumHeight = function(domNode) {\n\t\tvar container = domNode.parentNode;\n\t\tvar paddingTop = parseInt(helpers.getStyle(container, 'padding-top'), 10);\n\t\tvar paddingBottom = parseInt(helpers.getStyle(container, 'padding-bottom'), 10);\n\t\tvar h = container.clientHeight - paddingTop - paddingBottom;\n\t\tvar ch = helpers.getConstraintHeight(domNode);\n\t\treturn isNaN(ch)? h : Math.min(h, ch);\n\t};\n\thelpers.getStyle = function(el, property) {\n\t\treturn el.currentStyle ?\n\t\t\tel.currentStyle[property] :\n\t\t\tdocument.defaultView.getComputedStyle(el, null).getPropertyValue(property);\n\t};\n\thelpers.retinaScale = function(chart) {\n\t\tvar ctx = chart.ctx;\n\t\tvar canvas = chart.canvas;\n\t\tvar width = canvas.width;\n\t\tvar height = canvas.height;\n\t\tvar pixelRatio = chart.currentDevicePixelRatio = window.devicePixelRatio || 1;\n\n\t\tif (pixelRatio !== 1) {\n\t\t\tcanvas.height = height * pixelRatio;\n\t\t\tcanvas.width = width * pixelRatio;\n\t\t\tctx.scale(pixelRatio, pixelRatio);\n\n\t\t\t// Store the device pixel ratio so that we can go backwards in `destroy`.\n\t\t\t// The devicePixelRatio changes with zoom, so there are no guarantees that it is the same\n\t\t\t// when destroy is called\n\t\t\tchart.originalDevicePixelRatio = chart.originalDevicePixelRatio || pixelRatio;\n\t\t}\n\n\t\tcanvas.style.width = width + 'px';\n\t\tcanvas.style.height = height + 'px';\n\t};\n\t// -- Canvas methods\n\thelpers.clear = function(chart) {\n\t\tchart.ctx.clearRect(0, 0, chart.width, chart.height);\n\t};\n\thelpers.fontString = function(pixelSize, fontStyle, fontFamily) {\n\t\treturn fontStyle + ' ' + pixelSize + 'px ' + fontFamily;\n\t};\n\thelpers.longestText = function(ctx, font, arrayOfThings, cache) {\n\t\tcache = cache || {};\n\t\tvar data = cache.data = cache.data || {};\n\t\tvar gc = cache.garbageCollect = cache.garbageCollect || [];\n\n\t\tif (cache.font !== font) {\n\t\t\tdata = cache.data = {};\n\t\t\tgc = cache.garbageCollect = [];\n\t\t\tcache.font = font;\n\t\t}\n\n\t\tctx.font = font;\n\t\tvar longest = 0;\n\t\thelpers.each(arrayOfThings, function(thing) {\n\t\t\t// Undefined strings and arrays should not be measured\n\t\t\tif (thing !== undefined && thing !== null && helpers.isArray(thing) !== true) {\n\t\t\t\tlongest = helpers.measureText(ctx, data, gc, longest, thing);\n\t\t\t} else if (helpers.isArray(thing)) {\n\t\t\t\t// if it is an array lets measure each element\n\t\t\t\t// to do maybe simplify this function a bit so we can do this more recursively?\n\t\t\t\thelpers.each(thing, function(nestedThing) {\n\t\t\t\t\t// Undefined strings and arrays should not be measured\n\t\t\t\t\tif (nestedThing !== undefined && nestedThing !== null && !helpers.isArray(nestedThing)) {\n\t\t\t\t\t\tlongest = helpers.measureText(ctx, data, gc, longest, nestedThing);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\n\t\tvar gcLen = gc.length / 2;\n\t\tif (gcLen > arrayOfThings.length) {\n\t\t\tfor (var i = 0; i < gcLen; i++) {\n\t\t\t\tdelete data[gc[i]];\n\t\t\t}\n\t\t\tgc.splice(0, gcLen);\n\t\t}\n\t\treturn longest;\n\t};\n\thelpers.measureText = function(ctx, data, gc, longest, string) {\n\t\tvar textWidth = data[string];\n\t\tif (!textWidth) {\n\t\t\ttextWidth = data[string] = ctx.measureText(string).width;\n\t\t\tgc.push(string);\n\t\t}\n\t\tif (textWidth > longest) {\n\t\t\tlongest = textWidth;\n\t\t}\n\t\treturn longest;\n\t};\n\thelpers.numberOfLabelLines = function(arrayOfThings) {\n\t\tvar numberOfLines = 1;\n\t\thelpers.each(arrayOfThings, function(thing) {\n\t\t\tif (helpers.isArray(thing)) {\n\t\t\t\tif (thing.length > numberOfLines) {\n\t\t\t\t\tnumberOfLines = thing.length;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\treturn numberOfLines;\n\t};\n\thelpers.drawRoundedRectangle = function(ctx, x, y, width, height, radius) {\n\t\tctx.beginPath();\n\t\tctx.moveTo(x + radius, y);\n\t\tctx.lineTo(x + width - radius, y);\n\t\tctx.quadraticCurveTo(x + width, y, x + width, y + radius);\n\t\tctx.lineTo(x + width, y + height - radius);\n\t\tctx.quadraticCurveTo(x + width, y + height, x + width - radius, y + height);\n\t\tctx.lineTo(x + radius, y + height);\n\t\tctx.quadraticCurveTo(x, y + height, x, y + height - radius);\n\t\tctx.lineTo(x, y + radius);\n\t\tctx.quadraticCurveTo(x, y, x + radius, y);\n\t\tctx.closePath();\n\t};\n\thelpers.color = function(c) {\n\t\tif (!color) {\n\t\t\tconsole.error('Color.js not found!');\n\t\t\treturn c;\n\t\t}\n\n\t\t/* global CanvasGradient */\n\t\tif (c instanceof CanvasGradient) {\n\t\t\treturn color(Chart.defaults.global.defaultColor);\n\t\t}\n\n\t\treturn color(c);\n\t};\n\thelpers.addResizeListener = function(node, callback) {\n\t\t// Hide an iframe before the node\n\t\tvar hiddenIframe = document.createElement('iframe');\n\t\tvar hiddenIframeClass = 'chartjs-hidden-iframe';\n\n\t\tif (hiddenIframe.classlist) {\n\t\t\t// can use classlist\n\t\t\thiddenIframe.classlist.add(hiddenIframeClass);\n\t\t} else {\n\t\t\thiddenIframe.setAttribute('class', hiddenIframeClass);\n\t\t}\n\n\t\t// Set the style\n\t\thiddenIframe.tabIndex = -1;\n\t\tvar style = hiddenIframe.style;\n\t\tstyle.width = '100%';\n\t\tstyle.display = 'block';\n\t\tstyle.border = 0;\n\t\tstyle.height = 0;\n\t\tstyle.margin = 0;\n\t\tstyle.position = 'absolute';\n\t\tstyle.left = 0;\n\t\tstyle.right = 0;\n\t\tstyle.top = 0;\n\t\tstyle.bottom = 0;\n\n\t\t// Insert the iframe so that contentWindow is available\n\t\tnode.insertBefore(hiddenIframe, node.firstChild);\n\n\t\t(hiddenIframe.contentWindow || hiddenIframe).onresize = function() {\n\t\t\tif (callback) {\n\t\t\t\treturn callback();\n\t\t\t}\n\t\t};\n\t};\n\thelpers.removeResizeListener = function(node) {\n\t\tvar hiddenIframe = node.querySelector('.chartjs-hidden-iframe');\n\n\t\t// Remove the resize detect iframe\n\t\tif (hiddenIframe) {\n\t\t\thiddenIframe.parentNode.removeChild(hiddenIframe);\n\t\t}\n\t};\n\thelpers.isArray = Array.isArray?\n\t\tfunction(obj) {\n\t\t\treturn Array.isArray(obj);\n\t\t} :\n\t\tfunction(obj) {\n\t\t\treturn Object.prototype.toString.call(obj) === '[object Array]';\n\t\t};\n\t// ! @see http://stackoverflow.com/a/14853974\n\thelpers.arrayEquals = function(a0, a1) {\n\t\tvar i, ilen, v0, v1;\n\n\t\tif (!a0 || !a1 || a0.length !== a1.length) {\n\t\t\treturn false;\n\t\t}\n\n\t\tfor (i = 0, ilen=a0.length; i < ilen; ++i) {\n\t\t\tv0 = a0[i];\n\t\t\tv1 = a1[i];\n\n\t\t\tif (v0 instanceof Array && v1 instanceof Array) {\n\t\t\t\tif (!helpers.arrayEquals(v0, v1)) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t} else if (v0 !== v1) {\n\t\t\t\t// NOTE: two different object instances will never be equal: {x:20} != {x:20}\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\treturn true;\n\t};\n\thelpers.callCallback = function(fn, args, _tArg) {\n\t\tif (fn && typeof fn.call === 'function') {\n\t\t\tfn.apply(_tArg, args);\n\t\t}\n\t};\n\thelpers.getHoverColor = function(colorValue) {\n\t\t/* global CanvasPattern */\n\t\treturn (colorValue instanceof CanvasPattern) ?\n\t\t\tcolorValue :\n\t\t\thelpers.color(colorValue).saturate(0.5).darken(0.1).rgbString();\n\t};\n};\n","'use strict';\n\nmodule.exports = function() {\n\n\t// Occupy the global variable of Chart, and create a simple base class\n\tvar Chart = function(context, config) {\n\t\tvar me = this;\n\t\tvar helpers = Chart.helpers;\n\t\tme.config = config || {\n\t\t\tdata: {\n\t\t\t\tdatasets: []\n\t\t\t}\n\t\t};\n\n\t\t// Support a jQuery'd canvas element\n\t\tif (context.length && context[0].getContext) {\n\t\t\tcontext = context[0];\n\t\t}\n\n\t\t// Support a canvas domnode\n\t\tif (context.getContext) {\n\t\t\tcontext = context.getContext('2d');\n\t\t}\n\n\t\tme.ctx = context;\n\t\tme.canvas = context.canvas;\n\n\t\tcontext.canvas.style.display = context.canvas.style.display || 'block';\n\n\t\t// Figure out what the size of the chart will be.\n\t\t// If the canvas has a specified width and height, we use those else\n\t\t// we look to see if the canvas node has a CSS width and height.\n\t\t// If there is still no height, fill the parent container\n\t\tme.width = context.canvas.width || parseInt(helpers.getStyle(context.canvas, 'width'), 10) || helpers.getMaximumWidth(context.canvas);\n\t\tme.height = context.canvas.height || parseInt(helpers.getStyle(context.canvas, 'height'), 10) || helpers.getMaximumHeight(context.canvas);\n\n\t\tme.aspectRatio = me.width / me.height;\n\n\t\tif (isNaN(me.aspectRatio) || isFinite(me.aspectRatio) === false) {\n\t\t\t// If the canvas has no size, try and figure out what the aspect ratio will be.\n\t\t\t// Some charts prefer square canvases (pie, radar, etc). If that is specified, use that\n\t\t\t// else use the canvas default ratio of 2\n\t\t\tme.aspectRatio = config.aspectRatio !== undefined ? config.aspectRatio : 2;\n\t\t}\n\n\t\t// Store the original style of the element so we can set it back\n\t\tme.originalCanvasStyleWidth = context.canvas.style.width;\n\t\tme.originalCanvasStyleHeight = context.canvas.style.height;\n\n\t\t// High pixel density displays - multiply the size of the canvas height/width by the device pixel ratio, then scale.\n\t\thelpers.retinaScale(me);\n\t\tme.controller = new Chart.Controller(me);\n\n\t\t// Always bind this so that if the responsive state changes we still work\n\t\thelpers.addResizeListener(context.canvas.parentNode, function() {\n\t\t\tif (me.controller && me.controller.config.options.responsive) {\n\t\t\t\tme.controller.resize();\n\t\t\t}\n\t\t});\n\n\t\treturn me.controller ? me.controller : me;\n\n\t};\n\n\t// Globally expose the defaults to allow for user updating/changing\n\tChart.defaults = {\n\t\tglobal: {\n\t\t\tresponsive: true,\n\t\t\tresponsiveAnimationDuration: 0,\n\t\t\tmaintainAspectRatio: true,\n\t\t\tevents: ['mousemove', 'mouseout', 'click', 'touchstart', 'touchmove'],\n\t\t\thover: {\n\t\t\t\tonHover: null,\n\t\t\t\tmode: 'single',\n\t\t\t\tanimationDuration: 400\n\t\t\t},\n\t\t\tonClick: null,\n\t\t\tdefaultColor: 'rgba(0,0,0,0.1)',\n\t\t\tdefaultFontColor: '#666',\n\t\t\tdefaultFontFamily: \"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif\",\n\t\t\tdefaultFontSize: 12,\n\t\t\tdefaultFontStyle: 'normal',\n\t\t\tshowLines: true,\n\n\t\t\t// Element defaults defined in element extensions\n\t\t\telements: {},\n\n\t\t\t// Legend callback string\n\t\t\tlegendCallback: function(chart) {\n\t\t\t\tvar text = [];\n\t\t\t\ttext.push('<ul class=\"' + chart.id + '-legend\">');\n\t\t\t\tfor (var i = 0; i < chart.data.datasets.length; i++) {\n\t\t\t\t\ttext.push('<li><span style=\"background-color:' + chart.data.datasets[i].backgroundColor + '\"></span>');\n\t\t\t\t\tif (chart.data.datasets[i].label) {\n\t\t\t\t\t\ttext.push(chart.data.datasets[i].label);\n\t\t\t\t\t}\n\t\t\t\t\ttext.push('</li>');\n\t\t\t\t}\n\t\t\t\ttext.push('</ul>');\n\n\t\t\t\treturn text.join('');\n\t\t\t}\n\t\t}\n\t};\n\n\tChart.Chart = Chart;\n\n\treturn Chart;\n\n};\n","'use strict';\n\nmodule.exports = function(Chart) {\n\n\tvar helpers = Chart.helpers;\n\n\t// The layout service is very self explanatory.  It's responsible for the layout within a chart.\n\t// Scales, Legends and Plugins all rely on the layout service and can easily register to be placed anywhere they need\n\t// It is this service's responsibility of carrying out that layout.\n\tChart.layoutService = {\n\t\tdefaults: {},\n\n\t\t// Register a box to a chartInstance. A box is simply a reference to an object that requires layout. eg. Scales, Legend, Plugins.\n\t\taddBox: function(chartInstance, box) {\n\t\t\tif (!chartInstance.boxes) {\n\t\t\t\tchartInstance.boxes = [];\n\t\t\t}\n\t\t\tchartInstance.boxes.push(box);\n\t\t},\n\n\t\tremoveBox: function(chartInstance, box) {\n\t\t\tif (!chartInstance.boxes) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tchartInstance.boxes.splice(chartInstance.boxes.indexOf(box), 1);\n\t\t},\n\n\t\t// The most important function\n\t\tupdate: function(chartInstance, width, height) {\n\n\t\t\tif (!chartInstance) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar xPadding = 0;\n\t\t\tvar yPadding = 0;\n\n\t\t\tvar leftBoxes = helpers.where(chartInstance.boxes, function(box) {\n\t\t\t\treturn box.options.position === 'left';\n\t\t\t});\n\t\t\tvar rightBoxes = helpers.where(chartInstance.boxes, function(box) {\n\t\t\t\treturn box.options.position === 'right';\n\t\t\t});\n\t\t\tvar topBoxes = helpers.where(chartInstance.boxes, function(box) {\n\t\t\t\treturn box.options.position === 'top';\n\t\t\t});\n\t\t\tvar bottomBoxes = helpers.where(chartInstance.boxes, function(box) {\n\t\t\t\treturn box.options.position === 'bottom';\n\t\t\t});\n\n\t\t\t// Boxes that overlay the chartarea such as the radialLinear scale\n\t\t\tvar chartAreaBoxes = helpers.where(chartInstance.boxes, function(box) {\n\t\t\t\treturn box.options.position === 'chartArea';\n\t\t\t});\n\n\t\t\t// Ensure that full width boxes are at the very top / bottom\n\t\t\ttopBoxes.sort(function(a, b) {\n\t\t\t\treturn (b.options.fullWidth ? 1 : 0) - (a.options.fullWidth ? 1 : 0);\n\t\t\t});\n\t\t\tbottomBoxes.sort(function(a, b) {\n\t\t\t\treturn (a.options.fullWidth ? 1 : 0) - (b.options.fullWidth ? 1 : 0);\n\t\t\t});\n\n\t\t\t// Essentially we now have any number of boxes on each of the 4 sides.\n\t\t\t// Our canvas looks like the following.\n\t\t\t// The areas L1 and L2 are the left axes. R1 is the right axis, T1 is the top axis and\n\t\t\t// B1 is the bottom axis\n\t\t\t// There are also 4 quadrant-like locations (left to right instead of clockwise) reserved for chart overlays\n\t\t\t// These locations are single-box locations only, when trying to register a chartArea location that is already taken,\n\t\t\t// an error will be thrown.\n\t\t\t//\n\t\t\t// |----------------------------------------------------|\n\t\t\t// |                  T1 (Full Width)                   |\n\t\t\t// |----------------------------------------------------|\n\t\t\t// |    |    |                 T2                  |    |\n\t\t\t// |    |----|-------------------------------------|----|\n\t\t\t// |    |    | C1 |                           | C2 |    |\n\t\t\t// |    |    |----|                           |----|    |\n\t\t\t// |    |    |                                     |    |\n\t\t\t// | L1 | L2 |           ChartArea (C0)            | R1 |\n\t\t\t// |    |    |                                     |    |\n\t\t\t// |    |    |----|                           |----|    |\n\t\t\t// |    |    | C3 |                           | C4 |    |\n\t\t\t// |    |----|-------------------------------------|----|\n\t\t\t// |    |    |                 B1                  |    |\n\t\t\t// |----------------------------------------------------|\n\t\t\t// |                  B2 (Full Width)                   |\n\t\t\t// |----------------------------------------------------|\n\t\t\t//\n\t\t\t// What we do to find the best sizing, we do the following\n\t\t\t// 1. Determine the minimum size of the chart area.\n\t\t\t// 2. Split the remaining width equally between each vertical axis\n\t\t\t// 3. Split the remaining height equally between each horizontal axis\n\t\t\t// 4. Give each layout the maximum size it can be. The layout will return it's minimum size\n\t\t\t// 5. Adjust the sizes of each axis based on it's minimum reported size.\n\t\t\t// 6. Refit each axis\n\t\t\t// 7. Position each axis in the final location\n\t\t\t// 8. Tell the chart the final location of the chart area\n\t\t\t// 9. Tell any axes that overlay the chart area the positions of the chart area\n\n\t\t\t// Step 1\n\t\t\tvar chartWidth = width - (2 * xPadding);\n\t\t\tvar chartHeight = height - (2 * yPadding);\n\t\t\tvar chartAreaWidth = chartWidth / 2; // min 50%\n\t\t\tvar chartAreaHeight = chartHeight / 2; // min 50%\n\n\t\t\t// Step 2\n\t\t\tvar verticalBoxWidth = (width - chartAreaWidth) / (leftBoxes.length + rightBoxes.length);\n\n\t\t\t// Step 3\n\t\t\tvar horizontalBoxHeight = (height - chartAreaHeight) / (topBoxes.length + bottomBoxes.length);\n\n\t\t\t// Step 4\n\t\t\tvar maxChartAreaWidth = chartWidth;\n\t\t\tvar maxChartAreaHeight = chartHeight;\n\t\t\tvar minBoxSizes = [];\n\n\t\t\tfunction getMinimumBoxSize(box) {\n\t\t\t\tvar minSize;\n\t\t\t\tvar isHorizontal = box.isHorizontal();\n\n\t\t\t\tif (isHorizontal) {\n\t\t\t\t\tminSize = box.update(box.options.fullWidth ? chartWidth : maxChartAreaWidth, horizontalBoxHeight);\n\t\t\t\t\tmaxChartAreaHeight -= minSize.height;\n\t\t\t\t} else {\n\t\t\t\t\tminSize = box.update(verticalBoxWidth, chartAreaHeight);\n\t\t\t\t\tmaxChartAreaWidth -= minSize.width;\n\t\t\t\t}\n\n\t\t\t\tminBoxSizes.push({\n\t\t\t\t\thorizontal: isHorizontal,\n\t\t\t\t\tminSize: minSize,\n\t\t\t\t\tbox: box\n\t\t\t\t});\n\t\t\t}\n\n\t\t\thelpers.each(leftBoxes.concat(rightBoxes, topBoxes, bottomBoxes), getMinimumBoxSize);\n\n\t\t\t// At this point, maxChartAreaHeight and maxChartAreaWidth are the size the chart area could\n\t\t\t// be if the axes are drawn at their minimum sizes.\n\n\t\t\t// Steps 5 & 6\n\t\t\tvar totalLeftBoxesWidth = xPadding;\n\t\t\tvar totalRightBoxesWidth = xPadding;\n\t\t\tvar totalTopBoxesHeight = yPadding;\n\t\t\tvar totalBottomBoxesHeight = yPadding;\n\n\t\t\t// Function to fit a box\n\t\t\tfunction fitBox(box) {\n\t\t\t\tvar minBoxSize = helpers.findNextWhere(minBoxSizes, function(minBox) {\n\t\t\t\t\treturn minBox.box === box;\n\t\t\t\t});\n\n\t\t\t\tif (minBoxSize) {\n\t\t\t\t\tif (box.isHorizontal()) {\n\t\t\t\t\t\tvar scaleMargin = {\n\t\t\t\t\t\t\tleft: totalLeftBoxesWidth,\n\t\t\t\t\t\t\tright: totalRightBoxesWidth,\n\t\t\t\t\t\t\ttop: 0,\n\t\t\t\t\t\t\tbottom: 0\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\t// Don't use min size here because of label rotation. When the labels are rotated, their rotation highly depends\n\t\t\t\t\t\t// on the margin. Sometimes they need to increase in size slightly\n\t\t\t\t\t\tbox.update(box.options.fullWidth ? chartWidth : maxChartAreaWidth, chartHeight / 2, scaleMargin);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tbox.update(minBoxSize.minSize.width, maxChartAreaHeight);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Update, and calculate the left and right margins for the horizontal boxes\n\t\t\thelpers.each(leftBoxes.concat(rightBoxes), fitBox);\n\n\t\t\thelpers.each(leftBoxes, function(box) {\n\t\t\t\ttotalLeftBoxesWidth += box.width;\n\t\t\t});\n\n\t\t\thelpers.each(rightBoxes, function(box) {\n\t\t\t\ttotalRightBoxesWidth += box.width;\n\t\t\t});\n\n\t\t\t// Set the Left and Right margins for the horizontal boxes\n\t\t\thelpers.each(topBoxes.concat(bottomBoxes), fitBox);\n\n\t\t\t// Figure out how much margin is on the top and bottom of the vertical boxes\n\t\t\thelpers.each(topBoxes, function(box) {\n\t\t\t\ttotalTopBoxesHeight += box.height;\n\t\t\t});\n\n\t\t\thelpers.each(bottomBoxes, function(box) {\n\t\t\t\ttotalBottomBoxesHeight += box.height;\n\t\t\t});\n\n\t\t\tfunction finalFitVerticalBox(box) {\n\t\t\t\tvar minBoxSize = helpers.findNextWhere(minBoxSizes, function(minSize) {\n\t\t\t\t\treturn minSize.box === box;\n\t\t\t\t});\n\n\t\t\t\tvar scaleMargin = {\n\t\t\t\t\tleft: 0,\n\t\t\t\t\tright: 0,\n\t\t\t\t\ttop: totalTopBoxesHeight,\n\t\t\t\t\tbottom: totalBottomBoxesHeight\n\t\t\t\t};\n\n\t\t\t\tif (minBoxSize) {\n\t\t\t\t\tbox.update(minBoxSize.minSize.width, maxChartAreaHeight, scaleMargin);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Let the left layout know the final margin\n\t\t\thelpers.each(leftBoxes.concat(rightBoxes), finalFitVerticalBox);\n\n\t\t\t// Recalculate because the size of each layout might have changed slightly due to the margins (label rotation for instance)\n\t\t\ttotalLeftBoxesWidth = xPadding;\n\t\t\ttotalRightBoxesWidth = xPadding;\n\t\t\ttotalTopBoxesHeight = yPadding;\n\t\t\ttotalBottomBoxesHeight = yPadding;\n\n\t\t\thelpers.each(leftBoxes, function(box) {\n\t\t\t\ttotalLeftBoxesWidth += box.width;\n\t\t\t});\n\n\t\t\thelpers.each(rightBoxes, function(box) {\n\t\t\t\ttotalRightBoxesWidth += box.width;\n\t\t\t});\n\n\t\t\thelpers.each(topBoxes, function(box) {\n\t\t\t\ttotalTopBoxesHeight += box.height;\n\t\t\t});\n\t\t\thelpers.each(bottomBoxes, function(box) {\n\t\t\t\ttotalBottomBoxesHeight += box.height;\n\t\t\t});\n\n\t\t\t// Figure out if our chart area changed. This would occur if the dataset layout label rotation\n\t\t\t// changed due to the application of the margins in step 6. Since we can only get bigger, this is safe to do\n\t\t\t// without calling `fit` again\n\t\t\tvar newMaxChartAreaHeight = height - totalTopBoxesHeight - totalBottomBoxesHeight;\n\t\t\tvar newMaxChartAreaWidth = width - totalLeftBoxesWidth - totalRightBoxesWidth;\n\n\t\t\tif (newMaxChartAreaWidth !== maxChartAreaWidth || newMaxChartAreaHeight !== maxChartAreaHeight) {\n\t\t\t\thelpers.each(leftBoxes, function(box) {\n\t\t\t\t\tbox.height = newMaxChartAreaHeight;\n\t\t\t\t});\n\n\t\t\t\thelpers.each(rightBoxes, function(box) {\n\t\t\t\t\tbox.height = newMaxChartAreaHeight;\n\t\t\t\t});\n\n\t\t\t\thelpers.each(topBoxes, function(box) {\n\t\t\t\t\tif (!box.options.fullWidth) {\n\t\t\t\t\t\tbox.width = newMaxChartAreaWidth;\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\thelpers.each(bottomBoxes, function(box) {\n\t\t\t\t\tif (!box.options.fullWidth) {\n\t\t\t\t\t\tbox.width = newMaxChartAreaWidth;\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tmaxChartAreaHeight = newMaxChartAreaHeight;\n\t\t\t\tmaxChartAreaWidth = newMaxChartAreaWidth;\n\t\t\t}\n\n\t\t\t// Step 7 - Position the boxes\n\t\t\tvar left = xPadding;\n\t\t\tvar top = yPadding;\n\n\t\t\tfunction placeBox(box) {\n\t\t\t\tif (box.isHorizontal()) {\n\t\t\t\t\tbox.left = box.options.fullWidth ? xPadding : totalLeftBoxesWidth;\n\t\t\t\t\tbox.right = box.options.fullWidth ? width - xPadding : totalLeftBoxesWidth + maxChartAreaWidth;\n\t\t\t\t\tbox.top = top;\n\t\t\t\t\tbox.bottom = top + box.height;\n\n\t\t\t\t\t// Move to next point\n\t\t\t\t\ttop = box.bottom;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tbox.left = left;\n\t\t\t\t\tbox.right = left + box.width;\n\t\t\t\t\tbox.top = totalTopBoxesHeight;\n\t\t\t\t\tbox.bottom = totalTopBoxesHeight + maxChartAreaHeight;\n\n\t\t\t\t\t// Move to next point\n\t\t\t\t\tleft = box.right;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\thelpers.each(leftBoxes.concat(topBoxes), placeBox);\n\n\t\t\t// Account for chart width and height\n\t\t\tleft += maxChartAreaWidth;\n\t\t\ttop += maxChartAreaHeight;\n\n\t\t\thelpers.each(rightBoxes, placeBox);\n\t\t\thelpers.each(bottomBoxes, placeBox);\n\n\t\t\t// Step 8\n\t\t\tchartInstance.chartArea = {\n\t\t\t\tleft: totalLeftBoxesWidth,\n\t\t\t\ttop: totalTopBoxesHeight,\n\t\t\t\tright: totalLeftBoxesWidth + maxChartAreaWidth,\n\t\t\t\tbottom: totalTopBoxesHeight + maxChartAreaHeight\n\t\t\t};\n\n\t\t\t// Step 9\n\t\t\thelpers.each(chartAreaBoxes, function(box) {\n\t\t\t\tbox.left = chartInstance.chartArea.left;\n\t\t\t\tbox.top = chartInstance.chartArea.top;\n\t\t\t\tbox.right = chartInstance.chartArea.right;\n\t\t\t\tbox.bottom = chartInstance.chartArea.bottom;\n\n\t\t\t\tbox.update(maxChartAreaWidth, maxChartAreaHeight);\n\t\t\t});\n\t\t}\n\t};\n};\n","'use strict';\n\nmodule.exports = function(Chart) {\n\n\tvar helpers = Chart.helpers;\n\tvar noop = helpers.noop;\n\n\tChart.defaults.global.legend = {\n\n\t\tdisplay: true,\n\t\tposition: 'top',\n\t\tfullWidth: true, // marks that this box should take the full width of the canvas (pushing down other boxes)\n\t\treverse: false,\n\n\t\t// a callback that will handle\n\t\tonClick: function(e, legendItem) {\n\t\t\tvar index = legendItem.datasetIndex;\n\t\t\tvar ci = this.chart;\n\t\t\tvar meta = ci.getDatasetMeta(index);\n\n\t\t\t// See controller.isDatasetVisible comment\n\t\t\tmeta.hidden = meta.hidden === null? !ci.data.datasets[index].hidden : null;\n\n\t\t\t// We hid a dataset ... rerender the chart\n\t\t\tci.update();\n\t\t},\n\n\t\tonHover: null,\n\n\t\tlabels: {\n\t\t\tboxWidth: 40,\n\t\t\tpadding: 10,\n\t\t\t// Generates labels shown in the legend\n\t\t\t// Valid properties to return:\n\t\t\t// text : text to display\n\t\t\t// fillStyle : fill of coloured box\n\t\t\t// strokeStyle: stroke of coloured box\n\t\t\t// hidden : if this legend item refers to a hidden item\n\t\t\t// lineCap : cap style for line\n\t\t\t// lineDash\n\t\t\t// lineDashOffset :\n\t\t\t// lineJoin :\n\t\t\t// lineWidth :\n\t\t\tgenerateLabels: function(chart) {\n\t\t\t\tvar data = chart.data;\n\t\t\t\treturn helpers.isArray(data.datasets) ? data.datasets.map(function(dataset, i) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\ttext: dataset.label,\n\t\t\t\t\t\tfillStyle: (!helpers.isArray(dataset.backgroundColor) ? dataset.backgroundColor : dataset.backgroundColor[0]),\n\t\t\t\t\t\thidden: !chart.isDatasetVisible(i),\n\t\t\t\t\t\tlineCap: dataset.borderCapStyle,\n\t\t\t\t\t\tlineDash: dataset.borderDash,\n\t\t\t\t\t\tlineDashOffset: dataset.borderDashOffset,\n\t\t\t\t\t\tlineJoin: dataset.borderJoinStyle,\n\t\t\t\t\t\tlineWidth: dataset.borderWidth,\n\t\t\t\t\t\tstrokeStyle: dataset.borderColor,\n\t\t\t\t\t\tpointStyle: dataset.pointStyle,\n\n\t\t\t\t\t\t// Below is extra data used for toggling the datasets\n\t\t\t\t\t\tdatasetIndex: i\n\t\t\t\t\t};\n\t\t\t\t}, this) : [];\n\t\t\t}\n\t\t}\n\t};\n\n\tChart.Legend = Chart.Element.extend({\n\n\t\tinitialize: function(config) {\n\t\t\thelpers.extend(this, config);\n\n\t\t\t// Contains hit boxes for each dataset (in dataset order)\n\t\t\tthis.legendHitBoxes = [];\n\n\t\t\t// Are we in doughnut mode which has a different data type\n\t\t\tthis.doughnutMode = false;\n\t\t},\n\n\t\t// These methods are ordered by lifecyle. Utilities then follow.\n\t\t// Any function defined here is inherited by all legend types.\n\t\t// Any function can be extended by the legend type\n\n\t\tbeforeUpdate: noop,\n\t\tupdate: function(maxWidth, maxHeight, margins) {\n\t\t\tvar me = this;\n\n\t\t\t// Update Lifecycle - Probably don't want to ever extend or overwrite this function ;)\n\t\t\tme.beforeUpdate();\n\n\t\t\t// Absorb the master measurements\n\t\t\tme.maxWidth = maxWidth;\n\t\t\tme.maxHeight = maxHeight;\n\t\t\tme.margins = margins;\n\n\t\t\t// Dimensions\n\t\t\tme.beforeSetDimensions();\n\t\t\tme.setDimensions();\n\t\t\tme.afterSetDimensions();\n\t\t\t// Labels\n\t\t\tme.beforeBuildLabels();\n\t\t\tme.buildLabels();\n\t\t\tme.afterBuildLabels();\n\n\t\t\t// Fit\n\t\t\tme.beforeFit();\n\t\t\tme.fit();\n\t\t\tme.afterFit();\n\t\t\t//\n\t\t\tme.afterUpdate();\n\n\t\t\treturn me.minSize;\n\t\t},\n\t\tafterUpdate: noop,\n\n\t\t//\n\n\t\tbeforeSetDimensions: noop,\n\t\tsetDimensions: function() {\n\t\t\tvar me = this;\n\t\t\t// Set the unconstrained dimension before label rotation\n\t\t\tif (me.isHorizontal()) {\n\t\t\t\t// Reset position before calculating rotation\n\t\t\t\tme.width = me.maxWidth;\n\t\t\t\tme.left = 0;\n\t\t\t\tme.right = me.width;\n\t\t\t} else {\n\t\t\t\tme.height = me.maxHeight;\n\n\t\t\t\t// Reset position before calculating rotation\n\t\t\t\tme.top = 0;\n\t\t\t\tme.bottom = me.height;\n\t\t\t}\n\n\t\t\t// Reset padding\n\t\t\tme.paddingLeft = 0;\n\t\t\tme.paddingTop = 0;\n\t\t\tme.paddingRight = 0;\n\t\t\tme.paddingBottom = 0;\n\n\t\t\t// Reset minSize\n\t\t\tme.minSize = {\n\t\t\t\twidth: 0,\n\t\t\t\theight: 0\n\t\t\t};\n\t\t},\n\t\tafterSetDimensions: noop,\n\n\t\t//\n\n\t\tbeforeBuildLabels: noop,\n\t\tbuildLabels: function() {\n\t\t\tvar me = this;\n\t\t\tme.legendItems = me.options.labels.generateLabels.call(me, me.chart);\n\t\t\tif (me.options.reverse) {\n\t\t\t\tme.legendItems.reverse();\n\t\t\t}\n\t\t},\n\t\tafterBuildLabels: noop,\n\n\t\t//\n\n\t\tbeforeFit: noop,\n\t\tfit: function() {\n\t\t\tvar me = this;\n\t\t\tvar opts = me.options;\n\t\t\tvar labelOpts = opts.labels;\n\t\t\tvar display = opts.display;\n\n\t\t\tvar ctx = me.ctx;\n\n\t\t\tvar globalDefault = Chart.defaults.global,\n\t\t\t\titemOrDefault = helpers.getValueOrDefault,\n\t\t\t\tfontSize = itemOrDefault(labelOpts.fontSize, globalDefault.defaultFontSize),\n\t\t\t\tfontStyle = itemOrDefault(labelOpts.fontStyle, globalDefault.defaultFontStyle),\n\t\t\t\tfontFamily = itemOrDefault(labelOpts.fontFamily, globalDefault.defaultFontFamily),\n\t\t\t\tlabelFont = helpers.fontString(fontSize, fontStyle, fontFamily);\n\n\t\t\t// Reset hit boxes\n\t\t\tvar hitboxes = me.legendHitBoxes = [];\n\n\t\t\tvar minSize = me.minSize;\n\t\t\tvar isHorizontal = me.isHorizontal();\n\n\t\t\tif (isHorizontal) {\n\t\t\t\tminSize.width = me.maxWidth; // fill all the width\n\t\t\t\tminSize.height = display ? 10 : 0;\n\t\t\t} else {\n\t\t\t\tminSize.width = display ? 10 : 0;\n\t\t\t\tminSize.height = me.maxHeight; // fill all the height\n\t\t\t}\n\n\t\t\t// Increase sizes here\n\t\t\tif (display) {\n\t\t\t\tctx.font = labelFont;\n\n\t\t\t\tif (isHorizontal) {\n\t\t\t\t\t// Labels\n\n\t\t\t\t\t// Width of each line of legend boxes. Labels wrap onto multiple lines when there are too many to fit on one\n\t\t\t\t\tvar lineWidths = me.lineWidths = [0];\n\t\t\t\t\tvar totalHeight = me.legendItems.length ? fontSize + (labelOpts.padding) : 0;\n\n\t\t\t\t\tctx.textAlign = 'left';\n\t\t\t\t\tctx.textBaseline = 'top';\n\n\t\t\t\t\thelpers.each(me.legendItems, function(legendItem, i) {\n\t\t\t\t\t\tvar boxWidth = labelOpts.usePointStyle ?\n\t\t\t\t\t\t\tfontSize * Math.sqrt(2) :\n\t\t\t\t\t\t\tlabelOpts.boxWidth;\n\n\t\t\t\t\t\tvar width = boxWidth + (fontSize / 2) + ctx.measureText(legendItem.text).width;\n\t\t\t\t\t\tif (lineWidths[lineWidths.length - 1] + width + labelOpts.padding >= me.width) {\n\t\t\t\t\t\t\ttotalHeight += fontSize + (labelOpts.padding);\n\t\t\t\t\t\t\tlineWidths[lineWidths.length] = me.left;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Store the hitbox width and height here. Final position will be updated in `draw`\n\t\t\t\t\t\thitboxes[i] = {\n\t\t\t\t\t\t\tleft: 0,\n\t\t\t\t\t\t\ttop: 0,\n\t\t\t\t\t\t\twidth: width,\n\t\t\t\t\t\t\theight: fontSize\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tlineWidths[lineWidths.length - 1] += width + labelOpts.padding;\n\t\t\t\t\t});\n\n\t\t\t\t\tminSize.height += totalHeight;\n\n\t\t\t\t} else {\n\t\t\t\t\tvar vPadding = labelOpts.padding;\n\t\t\t\t\tvar columnWidths = me.columnWidths = [];\n\t\t\t\t\tvar totalWidth = labelOpts.padding;\n\t\t\t\t\tvar currentColWidth = 0;\n\t\t\t\t\tvar currentColHeight = 0;\n\t\t\t\t\tvar itemHeight = fontSize + vPadding;\n\n\t\t\t\t\thelpers.each(me.legendItems, function(legendItem, i) {\n\t\t\t\t\t\t// If usePointStyle is set, multiple boxWidth by 2 since it represents\n\t\t\t\t\t\t// the radius and not truly the width\n\t\t\t\t\t\tvar boxWidth = labelOpts.usePointStyle ? 2 * labelOpts.boxWidth : labelOpts.boxWidth;\n\n\t\t\t\t\t\tvar itemWidth = boxWidth + (fontSize / 2) + ctx.measureText(legendItem.text).width;\n\n\t\t\t\t\t\t// If too tall, go to new column\n\t\t\t\t\t\tif (currentColHeight + itemHeight > minSize.height) {\n\t\t\t\t\t\t\ttotalWidth += currentColWidth + labelOpts.padding;\n\t\t\t\t\t\t\tcolumnWidths.push(currentColWidth); // previous column width\n\n\t\t\t\t\t\t\tcurrentColWidth = 0;\n\t\t\t\t\t\t\tcurrentColHeight = 0;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Get max width\n\t\t\t\t\t\tcurrentColWidth = Math.max(currentColWidth, itemWidth);\n\t\t\t\t\t\tcurrentColHeight += itemHeight;\n\n\t\t\t\t\t\t// Store the hitbox width and height here. Final position will be updated in `draw`\n\t\t\t\t\t\thitboxes[i] = {\n\t\t\t\t\t\t\tleft: 0,\n\t\t\t\t\t\t\ttop: 0,\n\t\t\t\t\t\t\twidth: itemWidth,\n\t\t\t\t\t\t\theight: fontSize\n\t\t\t\t\t\t};\n\t\t\t\t\t});\n\n\t\t\t\t\ttotalWidth += currentColWidth;\n\t\t\t\t\tcolumnWidths.push(currentColWidth);\n\t\t\t\t\tminSize.width += totalWidth;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tme.width = minSize.width;\n\t\t\tme.height = minSize.height;\n\t\t},\n\t\tafterFit: noop,\n\n\t\t// Shared Methods\n\t\tisHorizontal: function() {\n\t\t\treturn this.options.position === 'top' || this.options.position === 'bottom';\n\t\t},\n\n\t\t// Actualy draw the legend on the canvas\n\t\tdraw: function() {\n\t\t\tvar me = this;\n\t\t\tvar opts = me.options;\n\t\t\tvar labelOpts = opts.labels;\n\t\t\tvar globalDefault = Chart.defaults.global,\n\t\t\t\tlineDefault = globalDefault.elements.line,\n\t\t\t\tlegendWidth = me.width,\n\t\t\t\tlineWidths = me.lineWidths;\n\n\t\t\tif (opts.display) {\n\t\t\t\tvar ctx = me.ctx,\n\t\t\t\t\tcursor,\n\t\t\t\t\titemOrDefault = helpers.getValueOrDefault,\n\t\t\t\t\tfontColor = itemOrDefault(labelOpts.fontColor, globalDefault.defaultFontColor),\n\t\t\t\t\tfontSize = itemOrDefault(labelOpts.fontSize, globalDefault.defaultFontSize),\n\t\t\t\t\tfontStyle = itemOrDefault(labelOpts.fontStyle, globalDefault.defaultFontStyle),\n\t\t\t\t\tfontFamily = itemOrDefault(labelOpts.fontFamily, globalDefault.defaultFontFamily),\n\t\t\t\t\tlabelFont = helpers.fontString(fontSize, fontStyle, fontFamily);\n\n\t\t\t\t// Canvas setup\n\t\t\t\tctx.textAlign = 'left';\n\t\t\t\tctx.textBaseline = 'top';\n\t\t\t\tctx.lineWidth = 0.5;\n\t\t\t\tctx.strokeStyle = fontColor; // for strikethrough effect\n\t\t\t\tctx.fillStyle = fontColor; // render in correct colour\n\t\t\t\tctx.font = labelFont;\n\n\t\t\t\tvar boxWidth = labelOpts.boxWidth,\n\t\t\t\t\thitboxes = me.legendHitBoxes;\n\n\t\t\t\t// current position\n\t\t\t\tvar drawLegendBox = function(x, y, legendItem) {\n\t\t\t\t\tif (isNaN(boxWidth) || boxWidth <= 0) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Set the ctx for the box\n\t\t\t\t\tctx.save();\n\n\t\t\t\t\tctx.fillStyle = itemOrDefault(legendItem.fillStyle, globalDefault.defaultColor);\n\t\t\t\t\tctx.lineCap = itemOrDefault(legendItem.lineCap, lineDefault.borderCapStyle);\n\t\t\t\t\tctx.lineDashOffset = itemOrDefault(legendItem.lineDashOffset, lineDefault.borderDashOffset);\n\t\t\t\t\tctx.lineJoin = itemOrDefault(legendItem.lineJoin, lineDefault.borderJoinStyle);\n\t\t\t\t\tctx.lineWidth = itemOrDefault(legendItem.lineWidth, lineDefault.borderWidth);\n\t\t\t\t\tctx.strokeStyle = itemOrDefault(legendItem.strokeStyle, globalDefault.defaultColor);\n\t\t\t\t\tvar isLineWidthZero = (itemOrDefault(legendItem.lineWidth, lineDefault.borderWidth) === 0);\n\n\t\t\t\t\tif (ctx.setLineDash) {\n\t\t\t\t\t\t// IE 9 and 10 do not support line dash\n\t\t\t\t\t\tctx.setLineDash(itemOrDefault(legendItem.lineDash, lineDefault.borderDash));\n\t\t\t\t\t}\n\n\t\t\t\t\tif (opts.labels && opts.labels.usePointStyle) {\n\t\t\t\t\t\t// Recalulate x and y for drawPoint() because its expecting\n\t\t\t\t\t\t// x and y to be center of figure (instead of top left)\n\t\t\t\t\t\tvar radius = fontSize * Math.SQRT2 / 2;\n\t\t\t\t\t\tvar offSet = radius / Math.SQRT2;\n\t\t\t\t\t\tvar centerX = x + offSet;\n\t\t\t\t\t\tvar centerY = y + offSet;\n\n\t\t\t\t\t\t// Draw pointStyle as legend symbol\n\t\t\t\t\t\tChart.canvasHelpers.drawPoint(ctx, legendItem.pointStyle, radius, centerX, centerY);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Draw box as legend symbol\n\t\t\t\t\t\tif (!isLineWidthZero) {\n\t\t\t\t\t\t\tctx.strokeRect(x, y, boxWidth, fontSize);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tctx.fillRect(x, y, boxWidth, fontSize);\n\t\t\t\t\t}\n\n\t\t\t\t\tctx.restore();\n\t\t\t\t};\n\t\t\t\tvar fillText = function(x, y, legendItem, textWidth) {\n\t\t\t\t\tctx.fillText(legendItem.text, boxWidth + (fontSize / 2) + x, y);\n\n\t\t\t\t\tif (legendItem.hidden) {\n\t\t\t\t\t\t// Strikethrough the text if hidden\n\t\t\t\t\t\tctx.beginPath();\n\t\t\t\t\t\tctx.lineWidth = 2;\n\t\t\t\t\t\tctx.moveTo(boxWidth + (fontSize / 2) + x, y + (fontSize / 2));\n\t\t\t\t\t\tctx.lineTo(boxWidth + (fontSize / 2) + x + textWidth, y + (fontSize / 2));\n\t\t\t\t\t\tctx.stroke();\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\t// Horizontal\n\t\t\t\tvar isHorizontal = me.isHorizontal();\n\t\t\t\tif (isHorizontal) {\n\t\t\t\t\tcursor = {\n\t\t\t\t\t\tx: me.left + ((legendWidth - lineWidths[0]) / 2),\n\t\t\t\t\t\ty: me.top + labelOpts.padding,\n\t\t\t\t\t\tline: 0\n\t\t\t\t\t};\n\t\t\t\t} else {\n\t\t\t\t\tcursor = {\n\t\t\t\t\t\tx: me.left + labelOpts.padding,\n\t\t\t\t\t\ty: me.top + labelOpts.padding,\n\t\t\t\t\t\tline: 0\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tvar itemHeight = fontSize + labelOpts.padding;\n\t\t\t\thelpers.each(me.legendItems, function(legendItem, i) {\n\t\t\t\t\tvar textWidth = ctx.measureText(legendItem.text).width,\n\t\t\t\t\t\twidth = labelOpts.usePointStyle ?\n\t\t\t\t\t\t\tfontSize + (fontSize / 2) + textWidth :\n\t\t\t\t\t\t\tboxWidth + (fontSize / 2) + textWidth,\n\t\t\t\t\t\tx = cursor.x,\n\t\t\t\t\t\ty = cursor.y;\n\n\t\t\t\t\tif (isHorizontal) {\n\t\t\t\t\t\tif (x + width >= legendWidth) {\n\t\t\t\t\t\t\ty = cursor.y += itemHeight;\n\t\t\t\t\t\t\tcursor.line++;\n\t\t\t\t\t\t\tx = cursor.x = me.left + ((legendWidth - lineWidths[cursor.line]) / 2);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (y + itemHeight > me.bottom) {\n\t\t\t\t\t\tx = cursor.x = x + me.columnWidths[cursor.line] + labelOpts.padding;\n\t\t\t\t\t\ty = cursor.y = me.top;\n\t\t\t\t\t\tcursor.line++;\n\t\t\t\t\t}\n\n\t\t\t\t\tdrawLegendBox(x, y, legendItem);\n\n\t\t\t\t\thitboxes[i].left = x;\n\t\t\t\t\thitboxes[i].top = y;\n\n\t\t\t\t\t// Fill the actual label\n\t\t\t\t\tfillText(x, y, legendItem, textWidth);\n\n\t\t\t\t\tif (isHorizontal) {\n\t\t\t\t\t\tcursor.x += width + (labelOpts.padding);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcursor.y += itemHeight;\n\t\t\t\t\t}\n\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\n\t\t// Handle an event\n\t\thandleEvent: function(e) {\n\t\t\tvar me = this;\n\t\t\tvar opts = me.options;\n\t\t\tvar type = e.type === 'mouseup' ? 'click' : e.type;\n\n\t\t\tif (type === 'mousemove') {\n\t\t\t\tif (!opts.onHover) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t} else if (type === 'click') {\n\t\t\t\tif (!opts.onClick) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar position = helpers.getRelativePosition(e, me.chart.chart),\n\t\t\t\tx = position.x,\n\t\t\t\ty = position.y;\n\n\t\t\tif (x >= me.left && x <= me.right && y >= me.top && y <= me.bottom) {\n\t\t\t\t// See if we are touching one of the dataset boxes\n\t\t\t\tvar lh = me.legendHitBoxes;\n\t\t\t\tfor (var i = 0; i < lh.length; ++i) {\n\t\t\t\t\tvar hitBox = lh[i];\n\n\t\t\t\t\tif (x >= hitBox.left && x <= hitBox.left + hitBox.width && y >= hitBox.top && y <= hitBox.top + hitBox.height) {\n\t\t\t\t\t\t// Touching an element\n\t\t\t\t\t\tif (type === 'click') {\n\t\t\t\t\t\t\topts.onClick.call(me, e, me.legendItems[i]);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t} else if (type === 'mousemove') {\n\t\t\t\t\t\t\topts.onHover.call(me, e, me.legendItems[i]);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\t// Register the legend plugin\n\tChart.plugins.register({\n\t\tbeforeInit: function(chartInstance) {\n\t\t\tvar opts = chartInstance.options;\n\t\t\tvar legendOpts = opts.legend;\n\n\t\t\tif (legendOpts) {\n\t\t\t\tchartInstance.legend = new Chart.Legend({\n\t\t\t\t\tctx: chartInstance.chart.ctx,\n\t\t\t\t\toptions: legendOpts,\n\t\t\t\t\tchart: chartInstance\n\t\t\t\t});\n\n\t\t\t\tChart.layoutService.addBox(chartInstance, chartInstance.legend);\n\t\t\t}\n\t\t}\n\t});\n};\n","'use strict';\n\nmodule.exports = function(Chart) {\n\n\tvar noop = Chart.helpers.noop;\n\n\t/**\n\t * The plugin service singleton\n\t * @namespace Chart.plugins\n\t * @since 2.1.0\n\t */\n\tChart.plugins = {\n\t\t_plugins: [],\n\n\t\t/**\n\t\t * Registers the given plugin(s) if not already registered.\n\t\t * @param {Array|Object} plugins plugin instance(s).\n\t\t */\n\t\tregister: function(plugins) {\n\t\t\tvar p = this._plugins;\n\t\t\t([]).concat(plugins).forEach(function(plugin) {\n\t\t\t\tif (p.indexOf(plugin) === -1) {\n\t\t\t\t\tp.push(plugin);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\t/**\n\t\t * Unregisters the given plugin(s) only if registered.\n\t\t * @param {Array|Object} plugins plugin instance(s).\n\t\t */\n\t\tunregister: function(plugins) {\n\t\t\tvar p = this._plugins;\n\t\t\t([]).concat(plugins).forEach(function(plugin) {\n\t\t\t\tvar idx = p.indexOf(plugin);\n\t\t\t\tif (idx !== -1) {\n\t\t\t\t\tp.splice(idx, 1);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\t/**\n\t\t * Remove all registered p^lugins.\n\t\t * @since 2.1.5\n\t\t */\n\t\tclear: function() {\n\t\t\tthis._plugins = [];\n\t\t},\n\n\t\t/**\n\t\t * Returns the number of registered plugins?\n\t\t * @returns {Number}\n\t\t * @since 2.1.5\n\t\t */\n\t\tcount: function() {\n\t\t\treturn this._plugins.length;\n\t\t},\n\n\t\t/**\n\t\t * Returns all registered plugin intances.\n\t\t * @returns {Array} array of plugin objects.\n\t\t * @since 2.1.5\n\t\t */\n\t\tgetAll: function() {\n\t\t\treturn this._plugins;\n\t\t},\n\n\t\t/**\n\t\t * Calls registered plugins on the specified extension, with the given args. This\n\t\t * method immediately returns as soon as a plugin explicitly returns false. The\n\t\t * returned value can be used, for instance, to interrupt the current action.\n\t\t * @param {String} extension the name of the plugin method to call (e.g. 'beforeUpdate').\n\t\t * @param {Array} [args] extra arguments to apply to the extension call.\n\t\t * @returns {Boolean} false if any of the plugins return false, else returns true.\n\t\t */\n\t\tnotify: function(extension, args) {\n\t\t\tvar plugins = this._plugins;\n\t\t\tvar ilen = plugins.length;\n\t\t\tvar i, plugin;\n\n\t\t\tfor (i=0; i<ilen; ++i) {\n\t\t\t\tplugin = plugins[i];\n\t\t\t\tif (typeof plugin[extension] === 'function') {\n\t\t\t\t\tif (plugin[extension].apply(plugin, args || []) === false) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn true;\n\t\t}\n\t};\n\n\t/**\n\t * Plugin extension methods.\n\t * @interface Chart.PluginBase\n\t * @since 2.1.0\n\t */\n\tChart.PluginBase = Chart.Element.extend({\n\t\t// Called at start of chart init\n\t\tbeforeInit: noop,\n\n\t\t// Called at end of chart init\n\t\tafterInit: noop,\n\n\t\t// Called at start of update\n\t\tbeforeUpdate: noop,\n\n\t\t// Called at end of update\n\t\tafterUpdate: noop,\n\n\t\t// Called at start of draw\n\t\tbeforeDraw: noop,\n\n\t\t// Called at end of draw\n\t\tafterDraw: noop,\n\n\t\t// Called during destroy\n\t\tdestroy: noop\n\t});\n\n\t/**\n\t * Provided for backward compatibility, use Chart.plugins instead\n\t * @namespace Chart.pluginService\n\t * @deprecated since version 2.1.5\n\t * @todo remove me at version 3\n\t */\n\tChart.pluginService = Chart.plugins;\n};\n","'use strict';\n\nmodule.exports = function(Chart) {\n\n\tvar helpers = Chart.helpers;\n\n\tChart.defaults.scale = {\n\t\tdisplay: true,\n\t\tposition: 'left',\n\n\t\t// grid line settings\n\t\tgridLines: {\n\t\t\tdisplay: true,\n\t\t\tcolor: 'rgba(0, 0, 0, 0.1)',\n\t\t\tlineWidth: 1,\n\t\t\tdrawBorder: true,\n\t\t\tdrawOnChartArea: true,\n\t\t\tdrawTicks: true,\n\t\t\ttickMarkLength: 10,\n\t\t\tzeroLineWidth: 1,\n\t\t\tzeroLineColor: 'rgba(0,0,0,0.25)',\n\t\t\toffsetGridLines: false,\n\t\t\tborderDash: [],\n\t\t\tborderDashOffset: 0.0\n\t\t},\n\n\t\t// scale label\n\t\tscaleLabel: {\n\t\t\t// actual label\n\t\t\tlabelString: '',\n\n\t\t\t// display property\n\t\t\tdisplay: false\n\t\t},\n\n\t\t// label settings\n\t\tticks: {\n\t\t\tbeginAtZero: false,\n\t\t\tminRotation: 0,\n\t\t\tmaxRotation: 50,\n\t\t\tmirror: false,\n\t\t\tpadding: 10,\n\t\t\treverse: false,\n\t\t\tdisplay: true,\n\t\t\tautoSkip: true,\n\t\t\tautoSkipPadding: 0,\n\t\t\tlabelOffset: 0,\n\t\t\t// We pass through arrays to be rendered as multiline labels, we convert Others to strings here.\n\t\t\tcallback: function(value) {\n\t\t\t\treturn helpers.isArray(value) ? value : '' + value;\n\t\t\t}\n\t\t}\n\t};\n\n\tChart.Scale = Chart.Element.extend({\n\n\t\t// These methods are ordered by lifecyle. Utilities then follow.\n\t\t// Any function defined here is inherited by all scale types.\n\t\t// Any function can be extended by the scale type\n\n\t\tbeforeUpdate: function() {\n\t\t\thelpers.callCallback(this.options.beforeUpdate, [this]);\n\t\t},\n\t\tupdate: function(maxWidth, maxHeight, margins) {\n\t\t\tvar me = this;\n\n\t\t\t// Update Lifecycle - Probably don't want to ever extend or overwrite this function ;)\n\t\t\tme.beforeUpdate();\n\n\t\t\t// Absorb the master measurements\n\t\t\tme.maxWidth = maxWidth;\n\t\t\tme.maxHeight = maxHeight;\n\t\t\tme.margins = helpers.extend({\n\t\t\t\tleft: 0,\n\t\t\t\tright: 0,\n\t\t\t\ttop: 0,\n\t\t\t\tbottom: 0\n\t\t\t}, margins);\n\n\t\t\t// Dimensions\n\t\t\tme.beforeSetDimensions();\n\t\t\tme.setDimensions();\n\t\t\tme.afterSetDimensions();\n\n\t\t\t// Data min/max\n\t\t\tme.beforeDataLimits();\n\t\t\tme.determineDataLimits();\n\t\t\tme.afterDataLimits();\n\n\t\t\t// Ticks\n\t\t\tme.beforeBuildTicks();\n\t\t\tme.buildTicks();\n\t\t\tme.afterBuildTicks();\n\n\t\t\tme.beforeTickToLabelConversion();\n\t\t\tme.convertTicksToLabels();\n\t\t\tme.afterTickToLabelConversion();\n\n\t\t\t// Tick Rotation\n\t\t\tme.beforeCalculateTickRotation();\n\t\t\tme.calculateTickRotation();\n\t\t\tme.afterCalculateTickRotation();\n\t\t\t// Fit\n\t\t\tme.beforeFit();\n\t\t\tme.fit();\n\t\t\tme.afterFit();\n\t\t\t//\n\t\t\tme.afterUpdate();\n\n\t\t\treturn me.minSize;\n\n\t\t},\n\t\tafterUpdate: function() {\n\t\t\thelpers.callCallback(this.options.afterUpdate, [this]);\n\t\t},\n\n\t\t//\n\n\t\tbeforeSetDimensions: function() {\n\t\t\thelpers.callCallback(this.options.beforeSetDimensions, [this]);\n\t\t},\n\t\tsetDimensions: function() {\n\t\t\tvar me = this;\n\t\t\t// Set the unconstrained dimension before label rotation\n\t\t\tif (me.isHorizontal()) {\n\t\t\t\t// Reset position before calculating rotation\n\t\t\t\tme.width = me.maxWidth;\n\t\t\t\tme.left = 0;\n\t\t\t\tme.right = me.width;\n\t\t\t} else {\n\t\t\t\tme.height = me.maxHeight;\n\n\t\t\t\t// Reset position before calculating rotation\n\t\t\t\tme.top = 0;\n\t\t\t\tme.bottom = me.height;\n\t\t\t}\n\n\t\t\t// Reset padding\n\t\t\tme.paddingLeft = 0;\n\t\t\tme.paddingTop = 0;\n\t\t\tme.paddingRight = 0;\n\t\t\tme.paddingBottom = 0;\n\t\t},\n\t\tafterSetDimensions: function() {\n\t\t\thelpers.callCallback(this.options.afterSetDimensions, [this]);\n\t\t},\n\n\t\t// Data limits\n\t\tbeforeDataLimits: function() {\n\t\t\thelpers.callCallback(this.options.beforeDataLimits, [this]);\n\t\t},\n\t\tdetermineDataLimits: helpers.noop,\n\t\tafterDataLimits: function() {\n\t\t\thelpers.callCallback(this.options.afterDataLimits, [this]);\n\t\t},\n\n\t\t//\n\t\tbeforeBuildTicks: function() {\n\t\t\thelpers.callCallback(this.options.beforeBuildTicks, [this]);\n\t\t},\n\t\tbuildTicks: helpers.noop,\n\t\tafterBuildTicks: function() {\n\t\t\thelpers.callCallback(this.options.afterBuildTicks, [this]);\n\t\t},\n\n\t\tbeforeTickToLabelConversion: function() {\n\t\t\thelpers.callCallback(this.options.beforeTickToLabelConversion, [this]);\n\t\t},\n\t\tconvertTicksToLabels: function() {\n\t\t\tvar me = this;\n\t\t\t// Convert ticks to strings\n\t\t\tme.ticks = me.ticks.map(function(numericalTick, index, ticks) {\n\t\t\t\tif (me.options.ticks.userCallback) {\n\t\t\t\t\treturn me.options.ticks.userCallback(numericalTick, index, ticks);\n\t\t\t\t}\n\t\t\t\treturn me.options.ticks.callback(numericalTick, index, ticks);\n\t\t\t},\n\t\t\tme);\n\t\t},\n\t\tafterTickToLabelConversion: function() {\n\t\t\thelpers.callCallback(this.options.afterTickToLabelConversion, [this]);\n\t\t},\n\n\t\t//\n\n\t\tbeforeCalculateTickRotation: function() {\n\t\t\thelpers.callCallback(this.options.beforeCalculateTickRotation, [this]);\n\t\t},\n\t\tcalculateTickRotation: function() {\n\t\t\tvar me = this;\n\t\t\tvar context = me.ctx;\n\t\t\tvar globalDefaults = Chart.defaults.global;\n\t\t\tvar optionTicks = me.options.ticks;\n\n\t\t\t// Get the width of each grid by calculating the difference\n\t\t\t// between x offsets between 0 and 1.\n\t\t\tvar tickFontSize = helpers.getValueOrDefault(optionTicks.fontSize, globalDefaults.defaultFontSize);\n\t\t\tvar tickFontStyle = helpers.getValueOrDefault(optionTicks.fontStyle, globalDefaults.defaultFontStyle);\n\t\t\tvar tickFontFamily = helpers.getValueOrDefault(optionTicks.fontFamily, globalDefaults.defaultFontFamily);\n\t\t\tvar tickLabelFont = helpers.fontString(tickFontSize, tickFontStyle, tickFontFamily);\n\t\t\tcontext.font = tickLabelFont;\n\n\t\t\tvar firstWidth = context.measureText(me.ticks[0]).width;\n\t\t\tvar lastWidth = context.measureText(me.ticks[me.ticks.length - 1]).width;\n\t\t\tvar firstRotated;\n\n\t\t\tme.labelRotation = optionTicks.minRotation || 0;\n\t\t\tme.paddingRight = 0;\n\t\t\tme.paddingLeft = 0;\n\n\t\t\tif (me.options.display) {\n\t\t\t\tif (me.isHorizontal()) {\n\t\t\t\t\tme.paddingRight = lastWidth / 2 + 3;\n\t\t\t\t\tme.paddingLeft = firstWidth / 2 + 3;\n\n\t\t\t\t\tif (!me.longestTextCache) {\n\t\t\t\t\t\tme.longestTextCache = {};\n\t\t\t\t\t}\n\t\t\t\t\tvar originalLabelWidth = helpers.longestText(context, tickLabelFont, me.ticks, me.longestTextCache);\n\t\t\t\t\tvar labelWidth = originalLabelWidth;\n\t\t\t\t\tvar cosRotation;\n\t\t\t\t\tvar sinRotation;\n\n\t\t\t\t\t// Allow 3 pixels x2 padding either side for label readability\n\t\t\t\t\t// only the index matters for a dataset scale, but we want a consistent interface between scales\n\t\t\t\t\tvar tickWidth = me.getPixelForTick(1) - me.getPixelForTick(0) - 6;\n\n\t\t\t\t\t// Max label rotation can be set or default to 90 - also act as a loop counter\n\t\t\t\t\twhile (labelWidth > tickWidth && me.labelRotation < optionTicks.maxRotation) {\n\t\t\t\t\t\tcosRotation = Math.cos(helpers.toRadians(me.labelRotation));\n\t\t\t\t\t\tsinRotation = Math.sin(helpers.toRadians(me.labelRotation));\n\n\t\t\t\t\t\tfirstRotated = cosRotation * firstWidth;\n\n\t\t\t\t\t\t// We're right aligning the text now.\n\t\t\t\t\t\tif (firstRotated + tickFontSize / 2 > me.yLabelWidth) {\n\t\t\t\t\t\t\tme.paddingLeft = firstRotated + tickFontSize / 2;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tme.paddingRight = tickFontSize / 2;\n\n\t\t\t\t\t\tif (sinRotation * originalLabelWidth > me.maxHeight) {\n\t\t\t\t\t\t\t// go back one step\n\t\t\t\t\t\t\tme.labelRotation--;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tme.labelRotation++;\n\t\t\t\t\t\tlabelWidth = cosRotation * originalLabelWidth;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (me.margins) {\n\t\t\t\tme.paddingLeft = Math.max(me.paddingLeft - me.margins.left, 0);\n\t\t\t\tme.paddingRight = Math.max(me.paddingRight - me.margins.right, 0);\n\t\t\t}\n\t\t},\n\t\tafterCalculateTickRotation: function() {\n\t\t\thelpers.callCallback(this.options.afterCalculateTickRotation, [this]);\n\t\t},\n\n\t\t//\n\n\t\tbeforeFit: function() {\n\t\t\thelpers.callCallback(this.options.beforeFit, [this]);\n\t\t},\n\t\tfit: function() {\n\t\t\tvar me = this;\n\t\t\t// Reset\n\t\t\tvar minSize = me.minSize = {\n\t\t\t\twidth: 0,\n\t\t\t\theight: 0\n\t\t\t};\n\n\t\t\tvar opts = me.options;\n\t\t\tvar globalDefaults = Chart.defaults.global;\n\t\t\tvar tickOpts = opts.ticks;\n\t\t\tvar scaleLabelOpts = opts.scaleLabel;\n\t\t\tvar gridLineOpts = opts.gridLines;\n\t\t\tvar display = opts.display;\n\t\t\tvar isHorizontal = me.isHorizontal();\n\n\t\t\tvar tickFontSize = helpers.getValueOrDefault(tickOpts.fontSize, globalDefaults.defaultFontSize);\n\t\t\tvar tickFontStyle = helpers.getValueOrDefault(tickOpts.fontStyle, globalDefaults.defaultFontStyle);\n\t\t\tvar tickFontFamily = helpers.getValueOrDefault(tickOpts.fontFamily, globalDefaults.defaultFontFamily);\n\t\t\tvar tickLabelFont = helpers.fontString(tickFontSize, tickFontStyle, tickFontFamily);\n\n\t\t\tvar scaleLabelFontSize = helpers.getValueOrDefault(scaleLabelOpts.fontSize, globalDefaults.defaultFontSize);\n\n\t\t\tvar tickMarkLength = opts.gridLines.tickMarkLength;\n\n\t\t\t// Width\n\t\t\tif (isHorizontal) {\n\t\t\t\t// subtract the margins to line up with the chartArea if we are a full width scale\n\t\t\t\tminSize.width = me.isFullWidth() ? me.maxWidth - me.margins.left - me.margins.right : me.maxWidth;\n\t\t\t} else {\n\t\t\t\tminSize.width = display && gridLineOpts.drawTicks ? tickMarkLength : 0;\n\t\t\t}\n\n\t\t\t// height\n\t\t\tif (isHorizontal) {\n\t\t\t\tminSize.height = display && gridLineOpts.drawTicks ? tickMarkLength : 0;\n\t\t\t} else {\n\t\t\t\tminSize.height = me.maxHeight; // fill all the height\n\t\t\t}\n\n\t\t\t// Are we showing a title for the scale?\n\t\t\tif (scaleLabelOpts.display && display) {\n\t\t\t\tif (isHorizontal) {\n\t\t\t\t\tminSize.height += (scaleLabelFontSize * 1.5);\n\t\t\t\t} else {\n\t\t\t\t\tminSize.width += (scaleLabelFontSize * 1.5);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (tickOpts.display && display) {\n\t\t\t\t// Don't bother fitting the ticks if we are not showing them\n\t\t\t\tif (!me.longestTextCache) {\n\t\t\t\t\tme.longestTextCache = {};\n\t\t\t\t}\n\n\t\t\t\tvar largestTextWidth = helpers.longestText(me.ctx, tickLabelFont, me.ticks, me.longestTextCache);\n\t\t\t\tvar tallestLabelHeightInLines = helpers.numberOfLabelLines(me.ticks);\n\t\t\t\tvar lineSpace = tickFontSize * 0.5;\n\n\t\t\t\tif (isHorizontal) {\n\t\t\t\t\t// A horizontal axis is more constrained by the height.\n\t\t\t\t\tme.longestLabelWidth = largestTextWidth;\n\n\t\t\t\t\t// TODO - improve this calculation\n\t\t\t\t\tvar labelHeight = (Math.sin(helpers.toRadians(me.labelRotation)) * me.longestLabelWidth) + (tickFontSize * tallestLabelHeightInLines) + (lineSpace * tallestLabelHeightInLines);\n\n\t\t\t\t\tminSize.height = Math.min(me.maxHeight, minSize.height + labelHeight);\n\t\t\t\t\tme.ctx.font = tickLabelFont;\n\n\t\t\t\t\tvar firstLabelWidth = me.ctx.measureText(me.ticks[0]).width;\n\t\t\t\t\tvar lastLabelWidth = me.ctx.measureText(me.ticks[me.ticks.length - 1]).width;\n\n\t\t\t\t\t// Ensure that our ticks are always inside the canvas. When rotated, ticks are right aligned which means that the right padding is dominated\n\t\t\t\t\t// by the font height\n\t\t\t\t\tvar cosRotation = Math.cos(helpers.toRadians(me.labelRotation));\n\t\t\t\t\tvar sinRotation = Math.sin(helpers.toRadians(me.labelRotation));\n\t\t\t\t\tme.paddingLeft = me.labelRotation !== 0 ? (cosRotation * firstLabelWidth) + 3 : firstLabelWidth / 2 + 3; // add 3 px to move away from canvas edges\n\t\t\t\t\tme.paddingRight = me.labelRotation !== 0 ? (sinRotation * (tickFontSize / 2)) + 3 : lastLabelWidth / 2 + 3; // when rotated\n\t\t\t\t} else {\n\t\t\t\t\t// A vertical axis is more constrained by the width. Labels are the dominant factor here, so get that length first\n\t\t\t\t\tvar maxLabelWidth = me.maxWidth - minSize.width;\n\n\t\t\t\t\t// Account for padding\n\t\t\t\t\tvar mirror = tickOpts.mirror;\n\t\t\t\t\tif (!mirror) {\n\t\t\t\t\t\tlargestTextWidth += me.options.ticks.padding;\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// If mirrored text is on the inside so don't expand\n\t\t\t\t\t\tlargestTextWidth = 0;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (largestTextWidth < maxLabelWidth) {\n\t\t\t\t\t\t// We don't need all the room\n\t\t\t\t\t\tminSize.width += largestTextWidth;\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Expand to max size\n\t\t\t\t\t\tminSize.width = me.maxWidth;\n\t\t\t\t\t}\n\n\t\t\t\t\tme.paddingTop = tickFontSize / 2;\n\t\t\t\t\tme.paddingBottom = tickFontSize / 2;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (me.margins) {\n\t\t\t\tme.paddingLeft = Math.max(me.paddingLeft - me.margins.left, 0);\n\t\t\t\tme.paddingTop = Math.max(me.paddingTop - me.margins.top, 0);\n\t\t\t\tme.paddingRight = Math.max(me.paddingRight - me.margins.right, 0);\n\t\t\t\tme.paddingBottom = Math.max(me.paddingBottom - me.margins.bottom, 0);\n\t\t\t}\n\n\t\t\tme.width = minSize.width;\n\t\t\tme.height = minSize.height;\n\n\t\t},\n\t\tafterFit: function() {\n\t\t\thelpers.callCallback(this.options.afterFit, [this]);\n\t\t},\n\n\t\t// Shared Methods\n\t\tisHorizontal: function() {\n\t\t\treturn this.options.position === 'top' || this.options.position === 'bottom';\n\t\t},\n\t\tisFullWidth: function() {\n\t\t\treturn (this.options.fullWidth);\n\t\t},\n\n\t\t// Get the correct value. NaN bad inputs, If the value type is object get the x or y based on whether we are horizontal or not\n\t\tgetRightValue: function(rawValue) {\n\t\t\t// Null and undefined values first\n\t\t\tif (rawValue === null || typeof(rawValue) === 'undefined') {\n\t\t\t\treturn NaN;\n\t\t\t}\n\t\t\t// isNaN(object) returns true, so make sure NaN is checking for a number\n\t\t\tif (typeof(rawValue) === 'number' && isNaN(rawValue)) {\n\t\t\t\treturn NaN;\n\t\t\t}\n\t\t\t// If it is in fact an object, dive in one more level\n\t\t\tif (typeof(rawValue) === 'object') {\n\t\t\t\tif ((rawValue instanceof Date) || (rawValue.isValid)) {\n\t\t\t\t\treturn rawValue;\n\t\t\t\t}\n\t\t\t\treturn this.getRightValue(this.isHorizontal() ? rawValue.x : rawValue.y);\n\t\t\t}\n\n\t\t\t// Value is good, return it\n\t\t\treturn rawValue;\n\t\t},\n\n\t\t// Used to get the value to display in the tooltip for the data at the given index\n\t\t// function getLabelForIndex(index, datasetIndex)\n\t\tgetLabelForIndex: helpers.noop,\n\n\t\t// Used to get data value locations.  Value can either be an index or a numerical value\n\t\tgetPixelForValue: helpers.noop,\n\n\t\t// Used to get the data value from a given pixel. This is the inverse of getPixelForValue\n\t\tgetValueForPixel: helpers.noop,\n\n\t\t// Used for tick location, should\n\t\tgetPixelForTick: function(index, includeOffset) {\n\t\t\tvar me = this;\n\t\t\tif (me.isHorizontal()) {\n\t\t\t\tvar innerWidth = me.width - (me.paddingLeft + me.paddingRight);\n\t\t\t\tvar tickWidth = innerWidth / Math.max((me.ticks.length - ((me.options.gridLines.offsetGridLines) ? 0 : 1)), 1);\n\t\t\t\tvar pixel = (tickWidth * index) + me.paddingLeft;\n\n\t\t\t\tif (includeOffset) {\n\t\t\t\t\tpixel += tickWidth / 2;\n\t\t\t\t}\n\n\t\t\t\tvar finalVal = me.left + Math.round(pixel);\n\t\t\t\tfinalVal += me.isFullWidth() ? me.margins.left : 0;\n\t\t\t\treturn finalVal;\n\t\t\t}\n\t\t\tvar innerHeight = me.height - (me.paddingTop + me.paddingBottom);\n\t\t\treturn me.top + (index * (innerHeight / (me.ticks.length - 1)));\n\t\t},\n\n\t\t// Utility for getting the pixel location of a percentage of scale\n\t\tgetPixelForDecimal: function(decimal /* , includeOffset*/) {\n\t\t\tvar me = this;\n\t\t\tif (me.isHorizontal()) {\n\t\t\t\tvar innerWidth = me.width - (me.paddingLeft + me.paddingRight);\n\t\t\t\tvar valueOffset = (innerWidth * decimal) + me.paddingLeft;\n\n\t\t\t\tvar finalVal = me.left + Math.round(valueOffset);\n\t\t\t\tfinalVal += me.isFullWidth() ? me.margins.left : 0;\n\t\t\t\treturn finalVal;\n\t\t\t}\n\t\t\treturn me.top + (decimal * me.height);\n\t\t},\n\n\t\tgetBasePixel: function() {\n\t\t\tvar me = this;\n\t\t\tvar min = me.min;\n\t\t\tvar max = me.max;\n\n\t\t\treturn me.getPixelForValue(\n\t\t\t\tme.beginAtZero? 0:\n\t\t\t\tmin < 0 && max < 0? max :\n\t\t\t\tmin > 0 && max > 0? min :\n\t\t\t\t0);\n\t\t},\n\n\t\t// Actualy draw the scale on the canvas\n\t\t// @param {rectangle} chartArea : the area of the chart to draw full grid lines on\n\t\tdraw: function(chartArea) {\n\t\t\tvar me = this;\n\t\t\tvar options = me.options;\n\t\t\tif (!options.display) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar context = me.ctx;\n\t\t\tvar globalDefaults = Chart.defaults.global;\n\t\t\tvar optionTicks = options.ticks;\n\t\t\tvar gridLines = options.gridLines;\n\t\t\tvar scaleLabel = options.scaleLabel;\n\n\t\t\tvar isRotated = me.labelRotation !== 0;\n\t\t\tvar skipRatio;\n\t\t\tvar useAutoskipper = optionTicks.autoSkip;\n\t\t\tvar isHorizontal = me.isHorizontal();\n\n\t\t\t// figure out the maximum number of gridlines to show\n\t\t\tvar maxTicks;\n\t\t\tif (optionTicks.maxTicksLimit) {\n\t\t\t\tmaxTicks = optionTicks.maxTicksLimit;\n\t\t\t}\n\n\t\t\tvar tickFontColor = helpers.getValueOrDefault(optionTicks.fontColor, globalDefaults.defaultFontColor);\n\t\t\tvar tickFontSize = helpers.getValueOrDefault(optionTicks.fontSize, globalDefaults.defaultFontSize);\n\t\t\tvar tickFontStyle = helpers.getValueOrDefault(optionTicks.fontStyle, globalDefaults.defaultFontStyle);\n\t\t\tvar tickFontFamily = helpers.getValueOrDefault(optionTicks.fontFamily, globalDefaults.defaultFontFamily);\n\t\t\tvar tickLabelFont = helpers.fontString(tickFontSize, tickFontStyle, tickFontFamily);\n\t\t\tvar tl = gridLines.tickMarkLength;\n\t\t\tvar borderDash = helpers.getValueOrDefault(gridLines.borderDash, globalDefaults.borderDash);\n\t\t\tvar borderDashOffset = helpers.getValueOrDefault(gridLines.borderDashOffset, globalDefaults.borderDashOffset);\n\n\t\t\tvar scaleLabelFontColor = helpers.getValueOrDefault(scaleLabel.fontColor, globalDefaults.defaultFontColor);\n\t\t\tvar scaleLabelFontSize = helpers.getValueOrDefault(scaleLabel.fontSize, globalDefaults.defaultFontSize);\n\t\t\tvar scaleLabelFontStyle = helpers.getValueOrDefault(scaleLabel.fontStyle, globalDefaults.defaultFontStyle);\n\t\t\tvar scaleLabelFontFamily = helpers.getValueOrDefault(scaleLabel.fontFamily, globalDefaults.defaultFontFamily);\n\t\t\tvar scaleLabelFont = helpers.fontString(scaleLabelFontSize, scaleLabelFontStyle, scaleLabelFontFamily);\n\n\t\t\tvar labelRotationRadians = helpers.toRadians(me.labelRotation);\n\t\t\tvar cosRotation = Math.cos(labelRotationRadians);\n\t\t\tvar longestRotatedLabel = me.longestLabelWidth * cosRotation;\n\n\t\t\t// Make sure we draw text in the correct color and font\n\t\t\tcontext.fillStyle = tickFontColor;\n\n\t\t\tvar itemsToDraw = [];\n\n\t\t\tif (isHorizontal) {\n\t\t\t\tskipRatio = false;\n\n\t\t\t\t// Only calculate the skip ratio with the half width of longestRotateLabel if we got an actual rotation\n\t\t\t\t// See #2584\n\t\t\t\tif (isRotated) {\n\t\t\t\t\tlongestRotatedLabel /= 2;\n\t\t\t\t}\n\n\t\t\t\tif ((longestRotatedLabel + optionTicks.autoSkipPadding) * me.ticks.length > (me.width - (me.paddingLeft + me.paddingRight))) {\n\t\t\t\t\tskipRatio = 1 + Math.floor(((longestRotatedLabel + optionTicks.autoSkipPadding) * me.ticks.length) / (me.width - (me.paddingLeft + me.paddingRight)));\n\t\t\t\t}\n\n\t\t\t\t// if they defined a max number of optionTicks,\n\t\t\t\t// increase skipRatio until that number is met\n\t\t\t\tif (maxTicks && me.ticks.length > maxTicks) {\n\t\t\t\t\twhile (!skipRatio || me.ticks.length / (skipRatio || 1) > maxTicks) {\n\t\t\t\t\t\tif (!skipRatio) {\n\t\t\t\t\t\t\tskipRatio = 1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tskipRatio += 1;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (!useAutoskipper) {\n\t\t\t\t\tskipRatio = false;\n\t\t\t\t}\n\t\t\t}\n\n\n\t\t\tvar xTickStart = options.position === 'right' ? me.left : me.right - tl;\n\t\t\tvar xTickEnd = options.position === 'right' ? me.left + tl : me.right;\n\t\t\tvar yTickStart = options.position === 'bottom' ? me.top : me.bottom - tl;\n\t\t\tvar yTickEnd = options.position === 'bottom' ? me.top + tl : me.bottom;\n\n\t\t\thelpers.each(me.ticks, function(label, index) {\n\t\t\t\t// If the callback returned a null or undefined value, do not draw this line\n\t\t\t\tif (label === undefined || label === null) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tvar isLastTick = me.ticks.length === index + 1;\n\n\t\t\t\t// Since we always show the last tick,we need may need to hide the last shown one before\n\t\t\t\tvar shouldSkip = (skipRatio > 1 && index % skipRatio > 0) || (index % skipRatio === 0 && index + skipRatio >= me.ticks.length);\n\t\t\t\tif (shouldSkip && !isLastTick || (label === undefined || label === null)) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tvar lineWidth, lineColor;\n\t\t\t\tif (index === (typeof me.zeroLineIndex !== 'undefined' ? me.zeroLineIndex : 0)) {\n\t\t\t\t\t// Draw the first index specially\n\t\t\t\t\tlineWidth = gridLines.zeroLineWidth;\n\t\t\t\t\tlineColor = gridLines.zeroLineColor;\n\t\t\t\t} else {\n\t\t\t\t\tlineWidth = helpers.getValueAtIndexOrDefault(gridLines.lineWidth, index);\n\t\t\t\t\tlineColor = helpers.getValueAtIndexOrDefault(gridLines.color, index);\n\t\t\t\t}\n\n\t\t\t\t// Common properties\n\t\t\t\tvar tx1, ty1, tx2, ty2, x1, y1, x2, y2, labelX, labelY;\n\t\t\t\tvar textAlign = 'middle';\n\t\t\t\tvar textBaseline = 'middle';\n\n\t\t\t\tif (isHorizontal) {\n\t\t\t\t\tif (!isRotated) {\n\t\t\t\t\t\ttextBaseline = options.position === 'top' ? 'bottom' : 'top';\n\t\t\t\t\t}\n\n\t\t\t\t\ttextAlign = isRotated ? 'right' : 'center';\n\n\t\t\t\t\tvar xLineValue = me.getPixelForTick(index) + helpers.aliasPixel(lineWidth); // xvalues for grid lines\n\t\t\t\t\tlabelX = me.getPixelForTick(index, gridLines.offsetGridLines) + optionTicks.labelOffset; // x values for optionTicks (need to consider offsetLabel option)\n\t\t\t\t\tlabelY = (isRotated) ? me.top + 12 : options.position === 'top' ? me.bottom - tl : me.top + tl;\n\n\t\t\t\t\ttx1 = tx2 = x1 = x2 = xLineValue;\n\t\t\t\t\tty1 = yTickStart;\n\t\t\t\t\tty2 = yTickEnd;\n\t\t\t\t\ty1 = chartArea.top;\n\t\t\t\t\ty2 = chartArea.bottom;\n\t\t\t\t} else {\n\t\t\t\t\tif (options.position === 'left') {\n\t\t\t\t\t\tif (optionTicks.mirror) {\n\t\t\t\t\t\t\tlabelX = me.right + optionTicks.padding;\n\t\t\t\t\t\t\ttextAlign = 'left';\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tlabelX = me.right - optionTicks.padding;\n\t\t\t\t\t\t\ttextAlign = 'right';\n\t\t\t\t\t\t}\n\t\t\t\t\t// right side\n\t\t\t\t\t} else if (optionTicks.mirror) {\n\t\t\t\t\t\tlabelX = me.left - optionTicks.padding;\n\t\t\t\t\t\ttextAlign = 'right';\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlabelX = me.left + optionTicks.padding;\n\t\t\t\t\t\ttextAlign = 'left';\n\t\t\t\t\t}\n\n\t\t\t\t\tvar yLineValue = me.getPixelForTick(index); // xvalues for grid lines\n\t\t\t\t\tyLineValue += helpers.aliasPixel(lineWidth);\n\t\t\t\t\tlabelY = me.getPixelForTick(index, gridLines.offsetGridLines);\n\n\t\t\t\t\ttx1 = xTickStart;\n\t\t\t\t\ttx2 = xTickEnd;\n\t\t\t\t\tx1 = chartArea.left;\n\t\t\t\t\tx2 = chartArea.right;\n\t\t\t\t\tty1 = ty2 = y1 = y2 = yLineValue;\n\t\t\t\t}\n\n\t\t\t\titemsToDraw.push({\n\t\t\t\t\ttx1: tx1,\n\t\t\t\t\tty1: ty1,\n\t\t\t\t\ttx2: tx2,\n\t\t\t\t\tty2: ty2,\n\t\t\t\t\tx1: x1,\n\t\t\t\t\ty1: y1,\n\t\t\t\t\tx2: x2,\n\t\t\t\t\ty2: y2,\n\t\t\t\t\tlabelX: labelX,\n\t\t\t\t\tlabelY: labelY,\n\t\t\t\t\tglWidth: lineWidth,\n\t\t\t\t\tglColor: lineColor,\n\t\t\t\t\tglBorderDash: borderDash,\n\t\t\t\t\tglBorderDashOffset: borderDashOffset,\n\t\t\t\t\trotation: -1 * labelRotationRadians,\n\t\t\t\t\tlabel: label,\n\t\t\t\t\ttextBaseline: textBaseline,\n\t\t\t\t\ttextAlign: textAlign\n\t\t\t\t});\n\t\t\t});\n\n\t\t\t// Draw all of the tick labels, tick marks, and grid lines at the correct places\n\t\t\thelpers.each(itemsToDraw, function(itemToDraw) {\n\t\t\t\tif (gridLines.display) {\n\t\t\t\t\tcontext.save();\n\t\t\t\t\tcontext.lineWidth = itemToDraw.glWidth;\n\t\t\t\t\tcontext.strokeStyle = itemToDraw.glColor;\n\t\t\t\t\tif (context.setLineDash) {\n\t\t\t\t\t\tcontext.setLineDash(itemToDraw.glBorderDash);\n\t\t\t\t\t\tcontext.lineDashOffset = itemToDraw.glBorderDashOffset;\n\t\t\t\t\t}\n\n\t\t\t\t\tcontext.beginPath();\n\n\t\t\t\t\tif (gridLines.drawTicks) {\n\t\t\t\t\t\tcontext.moveTo(itemToDraw.tx1, itemToDraw.ty1);\n\t\t\t\t\t\tcontext.lineTo(itemToDraw.tx2, itemToDraw.ty2);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (gridLines.drawOnChartArea) {\n\t\t\t\t\t\tcontext.moveTo(itemToDraw.x1, itemToDraw.y1);\n\t\t\t\t\t\tcontext.lineTo(itemToDraw.x2, itemToDraw.y2);\n\t\t\t\t\t}\n\n\t\t\t\t\tcontext.stroke();\n\t\t\t\t\tcontext.restore();\n\t\t\t\t}\n\n\t\t\t\tif (optionTicks.display) {\n\t\t\t\t\tcontext.save();\n\t\t\t\t\tcontext.translate(itemToDraw.labelX, itemToDraw.labelY);\n\t\t\t\t\tcontext.rotate(itemToDraw.rotation);\n\t\t\t\t\tcontext.font = tickLabelFont;\n\t\t\t\t\tcontext.textBaseline = itemToDraw.textBaseline;\n\t\t\t\t\tcontext.textAlign = itemToDraw.textAlign;\n\n\t\t\t\t\tvar label = itemToDraw.label;\n\t\t\t\t\tif (helpers.isArray(label)) {\n\t\t\t\t\t\tfor (var i = 0, y = -(label.length - 1)*tickFontSize*0.75; i < label.length; ++i) {\n\t\t\t\t\t\t\t// We just make sure the multiline element is a string here..\n\t\t\t\t\t\t\tcontext.fillText('' + label[i], 0, y);\n\t\t\t\t\t\t\t// apply same lineSpacing as calculated @ L#320\n\t\t\t\t\t\t\ty += (tickFontSize * 1.5);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcontext.fillText(label, 0, 0);\n\t\t\t\t\t}\n\t\t\t\t\tcontext.restore();\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tif (scaleLabel.display) {\n\t\t\t\t// Draw the scale label\n\t\t\t\tvar scaleLabelX;\n\t\t\t\tvar scaleLabelY;\n\t\t\t\tvar rotation = 0;\n\n\t\t\t\tif (isHorizontal) {\n\t\t\t\t\tscaleLabelX = me.left + ((me.right - me.left) / 2); // midpoint of the width\n\t\t\t\t\tscaleLabelY = options.position === 'bottom' ? me.bottom - (scaleLabelFontSize / 2) : me.top + (scaleLabelFontSize / 2);\n\t\t\t\t} else {\n\t\t\t\t\tvar isLeft = options.position === 'left';\n\t\t\t\t\tscaleLabelX = isLeft ? me.left + (scaleLabelFontSize / 2) : me.right - (scaleLabelFontSize / 2);\n\t\t\t\t\tscaleLabelY = me.top + ((me.bottom - me.top) / 2);\n\t\t\t\t\trotation = isLeft ? -0.5 * Math.PI : 0.5 * Math.PI;\n\t\t\t\t}\n\n\t\t\t\tcontext.save();\n\t\t\t\tcontext.translate(scaleLabelX, scaleLabelY);\n\t\t\t\tcontext.rotate(rotation);\n\t\t\t\tcontext.textAlign = 'center';\n\t\t\t\tcontext.textBaseline = 'middle';\n\t\t\t\tcontext.fillStyle = scaleLabelFontColor; // render in correct colour\n\t\t\t\tcontext.font = scaleLabelFont;\n\t\t\t\tcontext.fillText(scaleLabel.labelString, 0, 0);\n\t\t\t\tcontext.restore();\n\t\t\t}\n\n\t\t\tif (gridLines.drawBorder) {\n\t\t\t\t// Draw the line at the edge of the axis\n\t\t\t\tcontext.lineWidth = helpers.getValueAtIndexOrDefault(gridLines.lineWidth, 0);\n\t\t\t\tcontext.strokeStyle = helpers.getValueAtIndexOrDefault(gridLines.color, 0);\n\t\t\t\tvar x1 = me.left,\n\t\t\t\t\tx2 = me.right,\n\t\t\t\t\ty1 = me.top,\n\t\t\t\t\ty2 = me.bottom;\n\n\t\t\t\tvar aliasPixel = helpers.aliasPixel(context.lineWidth);\n\t\t\t\tif (isHorizontal) {\n\t\t\t\t\ty1 = y2 = options.position === 'top' ? me.bottom : me.top;\n\t\t\t\t\ty1 += aliasPixel;\n\t\t\t\t\ty2 += aliasPixel;\n\t\t\t\t} else {\n\t\t\t\t\tx1 = x2 = options.position === 'left' ? me.right : me.left;\n\t\t\t\t\tx1 += aliasPixel;\n\t\t\t\t\tx2 += aliasPixel;\n\t\t\t\t}\n\n\t\t\t\tcontext.beginPath();\n\t\t\t\tcontext.moveTo(x1, y1);\n\t\t\t\tcontext.lineTo(x2, y2);\n\t\t\t\tcontext.stroke();\n\t\t\t}\n\t\t}\n\t});\n};\n","'use strict';\n\nmodule.exports = function(Chart) {\n\n\tvar helpers = Chart.helpers;\n\n\tChart.scaleService = {\n\t\t// Scale registration object. Extensions can register new scale types (such as log or DB scales) and then\n\t\t// use the new chart options to grab the correct scale\n\t\tconstructors: {},\n\t\t// Use a registration function so that we can move to an ES6 map when we no longer need to support\n\t\t// old browsers\n\n\t\t// Scale config defaults\n\t\tdefaults: {},\n\t\tregisterScaleType: function(type, scaleConstructor, defaults) {\n\t\t\tthis.constructors[type] = scaleConstructor;\n\t\t\tthis.defaults[type] = helpers.clone(defaults);\n\t\t},\n\t\tgetScaleConstructor: function(type) {\n\t\t\treturn this.constructors.hasOwnProperty(type) ? this.constructors[type] : undefined;\n\t\t},\n\t\tgetScaleDefaults: function(type) {\n\t\t\t// Return the scale defaults merged with the global settings so that we always use the latest ones\n\t\t\treturn this.defaults.hasOwnProperty(type) ? helpers.scaleMerge(Chart.defaults.scale, this.defaults[type]) : {};\n\t\t},\n\t\tupdateScaleDefaults: function(type, additions) {\n\t\t\tvar defaults = this.defaults;\n\t\t\tif (defaults.hasOwnProperty(type)) {\n\t\t\t\tdefaults[type] = helpers.extend(defaults[type], additions);\n\t\t\t}\n\t\t},\n\t\taddScalesToLayout: function(chartInstance) {\n\t\t\t// Adds each scale to the chart.boxes array to be sized accordingly\n\t\t\thelpers.each(chartInstance.scales, function(scale) {\n\t\t\t\tChart.layoutService.addBox(chartInstance, scale);\n\t\t\t});\n\t\t}\n\t};\n};\n","'use strict';\n\nmodule.exports = function(Chart) {\n\n\tvar helpers = Chart.helpers;\n\n\tChart.defaults.global.title = {\n\t\tdisplay: false,\n\t\tposition: 'top',\n\t\tfullWidth: true, // marks that this box should take the full width of the canvas (pushing down other boxes)\n\n\t\tfontStyle: 'bold',\n\t\tpadding: 10,\n\n\t\t// actual title\n\t\ttext: ''\n\t};\n\n\tvar noop = helpers.noop;\n\tChart.Title = Chart.Element.extend({\n\n\t\tinitialize: function(config) {\n\t\t\tvar me = this;\n\t\t\thelpers.extend(me, config);\n\t\t\tme.options = helpers.configMerge(Chart.defaults.global.title, config.options);\n\n\t\t\t// Contains hit boxes for each dataset (in dataset order)\n\t\t\tme.legendHitBoxes = [];\n\t\t},\n\n\t\t// These methods are ordered by lifecyle. Utilities then follow.\n\n\t\tbeforeUpdate: function() {\n\t\t\tvar chartOpts = this.chart.options;\n\t\t\tif (chartOpts && chartOpts.title) {\n\t\t\t\tthis.options = helpers.configMerge(Chart.defaults.global.title, chartOpts.title);\n\t\t\t}\n\t\t},\n\t\tupdate: function(maxWidth, maxHeight, margins) {\n\t\t\tvar me = this;\n\n\t\t\t// Update Lifecycle - Probably don't want to ever extend or overwrite this function ;)\n\t\t\tme.beforeUpdate();\n\n\t\t\t// Absorb the master measurements\n\t\t\tme.maxWidth = maxWidth;\n\t\t\tme.maxHeight = maxHeight;\n\t\t\tme.margins = margins;\n\n\t\t\t// Dimensions\n\t\t\tme.beforeSetDimensions();\n\t\t\tme.setDimensions();\n\t\t\tme.afterSetDimensions();\n\t\t\t// Labels\n\t\t\tme.beforeBuildLabels();\n\t\t\tme.buildLabels();\n\t\t\tme.afterBuildLabels();\n\n\t\t\t// Fit\n\t\t\tme.beforeFit();\n\t\t\tme.fit();\n\t\t\tme.afterFit();\n\t\t\t//\n\t\t\tme.afterUpdate();\n\n\t\t\treturn me.minSize;\n\n\t\t},\n\t\tafterUpdate: noop,\n\n\t\t//\n\n\t\tbeforeSetDimensions: noop,\n\t\tsetDimensions: function() {\n\t\t\tvar me = this;\n\t\t\t// Set the unconstrained dimension before label rotation\n\t\t\tif (me.isHorizontal()) {\n\t\t\t\t// Reset position before calculating rotation\n\t\t\t\tme.width = me.maxWidth;\n\t\t\t\tme.left = 0;\n\t\t\t\tme.right = me.width;\n\t\t\t} else {\n\t\t\t\tme.height = me.maxHeight;\n\n\t\t\t\t// Reset position before calculating rotation\n\t\t\t\tme.top = 0;\n\t\t\t\tme.bottom = me.height;\n\t\t\t}\n\n\t\t\t// Reset padding\n\t\t\tme.paddingLeft = 0;\n\t\t\tme.paddingTop = 0;\n\t\t\tme.paddingRight = 0;\n\t\t\tme.paddingBottom = 0;\n\n\t\t\t// Reset minSize\n\t\t\tme.minSize = {\n\t\t\t\twidth: 0,\n\t\t\t\theight: 0\n\t\t\t};\n\t\t},\n\t\tafterSetDimensions: noop,\n\n\t\t//\n\n\t\tbeforeBuildLabels: noop,\n\t\tbuildLabels: noop,\n\t\tafterBuildLabels: noop,\n\n\t\t//\n\n\t\tbeforeFit: noop,\n\t\tfit: function() {\n\t\t\tvar me = this,\n\t\t\t\tvalueOrDefault = helpers.getValueOrDefault,\n\t\t\t\topts = me.options,\n\t\t\t\tglobalDefaults = Chart.defaults.global,\n\t\t\t\tdisplay = opts.display,\n\t\t\t\tfontSize = valueOrDefault(opts.fontSize, globalDefaults.defaultFontSize),\n\t\t\t\tminSize = me.minSize;\n\n\t\t\tif (me.isHorizontal()) {\n\t\t\t\tminSize.width = me.maxWidth; // fill all the width\n\t\t\t\tminSize.height = display ? fontSize + (opts.padding * 2) : 0;\n\t\t\t} else {\n\t\t\t\tminSize.width = display ? fontSize + (opts.padding * 2) : 0;\n\t\t\t\tminSize.height = me.maxHeight; // fill all the height\n\t\t\t}\n\n\t\t\tme.width = minSize.width;\n\t\t\tme.height = minSize.height;\n\n\t\t},\n\t\tafterFit: noop,\n\n\t\t// Shared Methods\n\t\tisHorizontal: function() {\n\t\t\tvar pos = this.options.position;\n\t\t\treturn pos === 'top' || pos === 'bottom';\n\t\t},\n\n\t\t// Actualy draw the title block on the canvas\n\t\tdraw: function() {\n\t\t\tvar me = this,\n\t\t\t\tctx = me.ctx,\n\t\t\t\tvalueOrDefault = helpers.getValueOrDefault,\n\t\t\t\topts = me.options,\n\t\t\t\tglobalDefaults = Chart.defaults.global;\n\n\t\t\tif (opts.display) {\n\t\t\t\tvar fontSize = valueOrDefault(opts.fontSize, globalDefaults.defaultFontSize),\n\t\t\t\t\tfontStyle = valueOrDefault(opts.fontStyle, globalDefaults.defaultFontStyle),\n\t\t\t\t\tfontFamily = valueOrDefault(opts.fontFamily, globalDefaults.defaultFontFamily),\n\t\t\t\t\ttitleFont = helpers.fontString(fontSize, fontStyle, fontFamily),\n\t\t\t\t\trotation = 0,\n\t\t\t\t\ttitleX,\n\t\t\t\t\ttitleY,\n\t\t\t\t\ttop = me.top,\n\t\t\t\t\tleft = me.left,\n\t\t\t\t\tbottom = me.bottom,\n\t\t\t\t\tright = me.right;\n\n\t\t\t\tctx.fillStyle = valueOrDefault(opts.fontColor, globalDefaults.defaultFontColor); // render in correct colour\n\t\t\t\tctx.font = titleFont;\n\n\t\t\t\t// Horizontal\n\t\t\t\tif (me.isHorizontal()) {\n\t\t\t\t\ttitleX = left + ((right - left) / 2); // midpoint of the width\n\t\t\t\t\ttitleY = top + ((bottom - top) / 2); // midpoint of the height\n\t\t\t\t} else {\n\t\t\t\t\ttitleX = opts.position === 'left' ? left + (fontSize / 2) : right - (fontSize / 2);\n\t\t\t\t\ttitleY = top + ((bottom - top) / 2);\n\t\t\t\t\trotation = Math.PI * (opts.position === 'left' ? -0.5 : 0.5);\n\t\t\t\t}\n\n\t\t\t\tctx.save();\n\t\t\t\tctx.translate(titleX, titleY);\n\t\t\t\tctx.rotate(rotation);\n\t\t\t\tctx.textAlign = 'center';\n\t\t\t\tctx.textBaseline = 'middle';\n\t\t\t\tctx.fillText(opts.text, 0, 0);\n\t\t\t\tctx.restore();\n\t\t\t}\n\t\t}\n\t});\n\n\t// Register the title plugin\n\tChart.plugins.register({\n\t\tbeforeInit: function(chartInstance) {\n\t\t\tvar opts = chartInstance.options;\n\t\t\tvar titleOpts = opts.title;\n\n\t\t\tif (titleOpts) {\n\t\t\t\tchartInstance.titleBlock = new Chart.Title({\n\t\t\t\t\tctx: chartInstance.chart.ctx,\n\t\t\t\t\toptions: titleOpts,\n\t\t\t\t\tchart: chartInstance\n\t\t\t\t});\n\n\t\t\t\tChart.layoutService.addBox(chartInstance, chartInstance.titleBlock);\n\t\t\t}\n\t\t}\n\t});\n};\n","'use strict';\n\nmodule.exports = function(Chart) {\n\n\tvar helpers = Chart.helpers;\n\n\tChart.defaults.global.tooltips = {\n\t\tenabled: true,\n\t\tcustom: null,\n\t\tmode: 'single',\n\t\tbackgroundColor: 'rgba(0,0,0,0.8)',\n\t\ttitleFontStyle: 'bold',\n\t\ttitleSpacing: 2,\n\t\ttitleMarginBottom: 6,\n\t\ttitleFontColor: '#fff',\n\t\ttitleAlign: 'left',\n\t\tbodySpacing: 2,\n\t\tbodyFontColor: '#fff',\n\t\tbodyAlign: 'left',\n\t\tfooterFontStyle: 'bold',\n\t\tfooterSpacing: 2,\n\t\tfooterMarginTop: 6,\n\t\tfooterFontColor: '#fff',\n\t\tfooterAlign: 'left',\n\t\tyPadding: 6,\n\t\txPadding: 6,\n\t\tyAlign: 'center',\n\t\txAlign: 'center',\n\t\tcaretSize: 5,\n\t\tcornerRadius: 6,\n\t\tmultiKeyBackground: '#fff',\n\t\tcallbacks: {\n\t\t\t// Args are: (tooltipItems, data)\n\t\t\tbeforeTitle: helpers.noop,\n\t\t\ttitle: function(tooltipItems, data) {\n\t\t\t\t// Pick first xLabel for now\n\t\t\t\tvar title = '';\n\t\t\t\tvar labels = data.labels;\n\t\t\t\tvar labelCount = labels ? labels.length : 0;\n\n\t\t\t\tif (tooltipItems.length > 0) {\n\t\t\t\t\tvar item = tooltipItems[0];\n\n\t\t\t\t\tif (item.xLabel) {\n\t\t\t\t\t\ttitle = item.xLabel;\n\t\t\t\t\t} else if (labelCount > 0 && item.index < labelCount) {\n\t\t\t\t\t\ttitle = labels[item.index];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn title;\n\t\t\t},\n\t\t\tafterTitle: helpers.noop,\n\n\t\t\t// Args are: (tooltipItems, data)\n\t\t\tbeforeBody: helpers.noop,\n\n\t\t\t// Args are: (tooltipItem, data)\n\t\t\tbeforeLabel: helpers.noop,\n\t\t\tlabel: function(tooltipItem, data) {\n\t\t\t\tvar datasetLabel = data.datasets[tooltipItem.datasetIndex].label || '';\n\t\t\t\treturn datasetLabel + ': ' + tooltipItem.yLabel;\n\t\t\t},\n\t\t\tlabelColor: function(tooltipItem, chartInstance) {\n\t\t\t\tvar meta = chartInstance.getDatasetMeta(tooltipItem.datasetIndex);\n\t\t\t\tvar activeElement = meta.data[tooltipItem.index];\n\t\t\t\tvar view = activeElement._view;\n\t\t\t\treturn {\n\t\t\t\t\tborderColor: view.borderColor,\n\t\t\t\t\tbackgroundColor: view.backgroundColor\n\t\t\t\t};\n\t\t\t},\n\t\t\tafterLabel: helpers.noop,\n\n\t\t\t// Args are: (tooltipItems, data)\n\t\t\tafterBody: helpers.noop,\n\n\t\t\t// Args are: (tooltipItems, data)\n\t\t\tbeforeFooter: helpers.noop,\n\t\t\tfooter: helpers.noop,\n\t\t\tafterFooter: helpers.noop\n\t\t}\n\t};\n\n\t// Helper to push or concat based on if the 2nd parameter is an array or not\n\tfunction pushOrConcat(base, toPush) {\n\t\tif (toPush) {\n\t\t\tif (helpers.isArray(toPush)) {\n\t\t\t\t// base = base.concat(toPush);\n\t\t\t\tArray.prototype.push.apply(base, toPush);\n\t\t\t} else {\n\t\t\t\tbase.push(toPush);\n\t\t\t}\n\t\t}\n\n\t\treturn base;\n\t}\n\n\tfunction getAveragePosition(elements) {\n\t\tif (!elements.length) {\n\t\t\treturn false;\n\t\t}\n\n\t\tvar i, len;\n\t\tvar xPositions = [];\n\t\tvar yPositions = [];\n\n\t\tfor (i = 0, len = elements.length; i < len; ++i) {\n\t\t\tvar el = elements[i];\n\t\t\tif (el && el.hasValue()) {\n\t\t\t\tvar pos = el.tooltipPosition();\n\t\t\t\txPositions.push(pos.x);\n\t\t\t\tyPositions.push(pos.y);\n\t\t\t}\n\t\t}\n\n\t\tvar x = 0,\n\t\t\ty = 0;\n\t\tfor (i = 0; i < xPositions.length; ++i) {\n\t\t\tif (xPositions[i]) {\n\t\t\t\tx += xPositions[i];\n\t\t\t\ty += yPositions[i];\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\tx: Math.round(x / xPositions.length),\n\t\t\ty: Math.round(y / xPositions.length)\n\t\t};\n\t}\n\n\t// Private helper to create a tooltip iteam model\n\t// @param element : the chart element (point, arc, bar) to create the tooltip item for\n\t// @return : new tooltip item\n\tfunction createTooltipItem(element) {\n\t\tvar xScale = element._xScale;\n\t\tvar yScale = element._yScale || element._scale; // handle radar || polarArea charts\n\t\tvar index = element._index,\n\t\t\tdatasetIndex = element._datasetIndex;\n\n\t\treturn {\n\t\t\txLabel: xScale ? xScale.getLabelForIndex(index, datasetIndex) : '',\n\t\t\tyLabel: yScale ? yScale.getLabelForIndex(index, datasetIndex) : '',\n\t\t\tindex: index,\n\t\t\tdatasetIndex: datasetIndex\n\t\t};\n\t}\n\n\tChart.Tooltip = Chart.Element.extend({\n\t\tinitialize: function() {\n\t\t\tvar me = this;\n\t\t\tvar globalDefaults = Chart.defaults.global;\n\t\t\tvar tooltipOpts = me._options;\n\t\t\tvar getValueOrDefault = helpers.getValueOrDefault;\n\n\t\t\thelpers.extend(me, {\n\t\t\t\t_model: {\n\t\t\t\t\t// Positioning\n\t\t\t\t\txPadding: tooltipOpts.xPadding,\n\t\t\t\t\tyPadding: tooltipOpts.yPadding,\n\t\t\t\t\txAlign: tooltipOpts.xAlign,\n\t\t\t\t\tyAlign: tooltipOpts.yAlign,\n\n\t\t\t\t\t// Body\n\t\t\t\t\tbodyFontColor: tooltipOpts.bodyFontColor,\n\t\t\t\t\t_bodyFontFamily: getValueOrDefault(tooltipOpts.bodyFontFamily, globalDefaults.defaultFontFamily),\n\t\t\t\t\t_bodyFontStyle: getValueOrDefault(tooltipOpts.bodyFontStyle, globalDefaults.defaultFontStyle),\n\t\t\t\t\t_bodyAlign: tooltipOpts.bodyAlign,\n\t\t\t\t\tbodyFontSize: getValueOrDefault(tooltipOpts.bodyFontSize, globalDefaults.defaultFontSize),\n\t\t\t\t\tbodySpacing: tooltipOpts.bodySpacing,\n\n\t\t\t\t\t// Title\n\t\t\t\t\ttitleFontColor: tooltipOpts.titleFontColor,\n\t\t\t\t\t_titleFontFamily: getValueOrDefault(tooltipOpts.titleFontFamily, globalDefaults.defaultFontFamily),\n\t\t\t\t\t_titleFontStyle: getValueOrDefault(tooltipOpts.titleFontStyle, globalDefaults.defaultFontStyle),\n\t\t\t\t\ttitleFontSize: getValueOrDefault(tooltipOpts.titleFontSize, globalDefaults.defaultFontSize),\n\t\t\t\t\t_titleAlign: tooltipOpts.titleAlign,\n\t\t\t\t\ttitleSpacing: tooltipOpts.titleSpacing,\n\t\t\t\t\ttitleMarginBottom: tooltipOpts.titleMarginBottom,\n\n\t\t\t\t\t// Footer\n\t\t\t\t\tfooterFontColor: tooltipOpts.footerFontColor,\n\t\t\t\t\t_footerFontFamily: getValueOrDefault(tooltipOpts.footerFontFamily, globalDefaults.defaultFontFamily),\n\t\t\t\t\t_footerFontStyle: getValueOrDefault(tooltipOpts.footerFontStyle, globalDefaults.defaultFontStyle),\n\t\t\t\t\tfooterFontSize: getValueOrDefault(tooltipOpts.footerFontSize, globalDefaults.defaultFontSize),\n\t\t\t\t\t_footerAlign: tooltipOpts.footerAlign,\n\t\t\t\t\tfooterSpacing: tooltipOpts.footerSpacing,\n\t\t\t\t\tfooterMarginTop: tooltipOpts.footerMarginTop,\n\n\t\t\t\t\t// Appearance\n\t\t\t\t\tcaretSize: tooltipOpts.caretSize,\n\t\t\t\t\tcornerRadius: tooltipOpts.cornerRadius,\n\t\t\t\t\tbackgroundColor: tooltipOpts.backgroundColor,\n\t\t\t\t\topacity: 0,\n\t\t\t\t\tlegendColorBackground: tooltipOpts.multiKeyBackground\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\t// Get the title\n\t\t// Args are: (tooltipItem, data)\n\t\tgetTitle: function() {\n\t\t\tvar me = this;\n\t\t\tvar opts = me._options;\n\t\t\tvar callbacks = opts.callbacks;\n\n\t\t\tvar beforeTitle = callbacks.beforeTitle.apply(me, arguments),\n\t\t\t\ttitle = callbacks.title.apply(me, arguments),\n\t\t\t\tafterTitle = callbacks.afterTitle.apply(me, arguments);\n\n\t\t\tvar lines = [];\n\t\t\tlines = pushOrConcat(lines, beforeTitle);\n\t\t\tlines = pushOrConcat(lines, title);\n\t\t\tlines = pushOrConcat(lines, afterTitle);\n\n\t\t\treturn lines;\n\t\t},\n\n\t\t// Args are: (tooltipItem, data)\n\t\tgetBeforeBody: function() {\n\t\t\tvar lines = this._options.callbacks.beforeBody.apply(this, arguments);\n\t\t\treturn helpers.isArray(lines) ? lines : lines !== undefined ? [lines] : [];\n\t\t},\n\n\t\t// Args are: (tooltipItem, data)\n\t\tgetBody: function(tooltipItems, data) {\n\t\t\tvar me = this;\n\t\t\tvar callbacks = me._options.callbacks;\n\t\t\tvar bodyItems = [];\n\n\t\t\thelpers.each(tooltipItems, function(tooltipItem) {\n\t\t\t\tvar bodyItem = {\n\t\t\t\t\tbefore: [],\n\t\t\t\t\tlines: [],\n\t\t\t\t\tafter: []\n\t\t\t\t};\n\t\t\t\tpushOrConcat(bodyItem.before, callbacks.beforeLabel.call(me, tooltipItem, data));\n\t\t\t\tpushOrConcat(bodyItem.lines, callbacks.label.call(me, tooltipItem, data));\n\t\t\t\tpushOrConcat(bodyItem.after, callbacks.afterLabel.call(me, tooltipItem, data));\n\n\t\t\t\tbodyItems.push(bodyItem);\n\t\t\t});\n\n\t\t\treturn bodyItems;\n\t\t},\n\n\t\t// Args are: (tooltipItem, data)\n\t\tgetAfterBody: function() {\n\t\t\tvar lines = this._options.callbacks.afterBody.apply(this, arguments);\n\t\t\treturn helpers.isArray(lines) ? lines : lines !== undefined ? [lines] : [];\n\t\t},\n\n\t\t// Get the footer and beforeFooter and afterFooter lines\n\t\t// Args are: (tooltipItem, data)\n\t\tgetFooter: function() {\n\t\t\tvar me = this;\n\t\t\tvar callbacks = me._options.callbacks;\n\n\t\t\tvar beforeFooter = callbacks.beforeFooter.apply(me, arguments);\n\t\t\tvar footer = callbacks.footer.apply(me, arguments);\n\t\t\tvar afterFooter = callbacks.afterFooter.apply(me, arguments);\n\n\t\t\tvar lines = [];\n\t\t\tlines = pushOrConcat(lines, beforeFooter);\n\t\t\tlines = pushOrConcat(lines, footer);\n\t\t\tlines = pushOrConcat(lines, afterFooter);\n\n\t\t\treturn lines;\n\t\t},\n\n\t\tupdate: function(changed) {\n\t\t\tvar me = this;\n\t\t\tvar opts = me._options;\n\t\t\tvar model = me._model;\n\t\t\tvar active = me._active;\n\n\t\t\tvar data = me._data;\n\t\t\tvar chartInstance = me._chartInstance;\n\n\t\t\tvar i, len;\n\n\t\t\tif (active.length) {\n\t\t\t\tmodel.opacity = 1;\n\n\t\t\t\tvar labelColors = [],\n\t\t\t\t\ttooltipPosition = getAveragePosition(active);\n\n\t\t\t\tvar tooltipItems = [];\n\t\t\t\tfor (i = 0, len = active.length; i < len; ++i) {\n\t\t\t\t\ttooltipItems.push(createTooltipItem(active[i]));\n\t\t\t\t}\n\n\t\t\t\t// If the user provided a sorting function, use it to modify the tooltip items\n\t\t\t\tif (opts.itemSort) {\n\t\t\t\t\ttooltipItems = tooltipItems.sort(function(a, b) {\n\t\t\t\t\t\treturn opts.itemSort(a, b, data);\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\t// If there is more than one item, show color items\n\t\t\t\tif (active.length > 1) {\n\t\t\t\t\thelpers.each(tooltipItems, function(tooltipItem) {\n\t\t\t\t\t\tlabelColors.push(opts.callbacks.labelColor.call(me, tooltipItem, chartInstance));\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\t// Build the Text Lines\n\t\t\t\thelpers.extend(model, {\n\t\t\t\t\ttitle: me.getTitle(tooltipItems, data),\n\t\t\t\t\tbeforeBody: me.getBeforeBody(tooltipItems, data),\n\t\t\t\t\tbody: me.getBody(tooltipItems, data),\n\t\t\t\t\tafterBody: me.getAfterBody(tooltipItems, data),\n\t\t\t\t\tfooter: me.getFooter(tooltipItems, data),\n\t\t\t\t\tx: Math.round(tooltipPosition.x),\n\t\t\t\t\ty: Math.round(tooltipPosition.y),\n\t\t\t\t\tcaretPadding: helpers.getValueOrDefault(tooltipPosition.padding, 2),\n\t\t\t\t\tlabelColors: labelColors\n\t\t\t\t});\n\n\t\t\t\t// We need to determine alignment of\n\t\t\t\tvar tooltipSize = me.getTooltipSize(model);\n\t\t\t\tme.determineAlignment(tooltipSize); // Smart Tooltip placement to stay on the canvas\n\n\t\t\t\thelpers.extend(model, me.getBackgroundPoint(model, tooltipSize));\n\t\t\t} else {\n\t\t\t\tme._model.opacity = 0;\n\t\t\t}\n\n\t\t\tif (changed && opts.custom) {\n\t\t\t\topts.custom.call(me, model);\n\t\t\t}\n\n\t\t\treturn me;\n\t\t},\n\t\tgetTooltipSize: function(vm) {\n\t\t\tvar ctx = this._chart.ctx;\n\n\t\t\tvar size = {\n\t\t\t\theight: vm.yPadding * 2, // Tooltip Padding\n\t\t\t\twidth: 0\n\t\t\t};\n\n\t\t\t// Count of all lines in the body\n\t\t\tvar body = vm.body;\n\t\t\tvar combinedBodyLength = body.reduce(function(count, bodyItem) {\n\t\t\t\treturn count + bodyItem.before.length + bodyItem.lines.length + bodyItem.after.length;\n\t\t\t}, 0);\n\t\t\tcombinedBodyLength += vm.beforeBody.length + vm.afterBody.length;\n\n\t\t\tvar titleLineCount = vm.title.length;\n\t\t\tvar footerLineCount = vm.footer.length;\n\t\t\tvar titleFontSize = vm.titleFontSize,\n\t\t\t\tbodyFontSize = vm.bodyFontSize,\n\t\t\t\tfooterFontSize = vm.footerFontSize;\n\n\t\t\tsize.height += titleLineCount * titleFontSize; // Title Lines\n\t\t\tsize.height += (titleLineCount - 1) * vm.titleSpacing; // Title Line Spacing\n\t\t\tsize.height += titleLineCount ? vm.titleMarginBottom : 0; // Title's bottom Margin\n\t\t\tsize.height += combinedBodyLength * bodyFontSize; // Body Lines\n\t\t\tsize.height += combinedBodyLength ? (combinedBodyLength - 1) * vm.bodySpacing : 0; // Body Line Spacing\n\t\t\tsize.height += footerLineCount ? vm.footerMarginTop : 0; // Footer Margin\n\t\t\tsize.height += footerLineCount * (footerFontSize); // Footer Lines\n\t\t\tsize.height += footerLineCount ? (footerLineCount - 1) * vm.footerSpacing : 0; // Footer Line Spacing\n\n\t\t\t// Title width\n\t\t\tvar widthPadding = 0;\n\t\t\tvar maxLineWidth = function(line) {\n\t\t\t\tsize.width = Math.max(size.width, ctx.measureText(line).width + widthPadding);\n\t\t\t};\n\n\t\t\tctx.font = helpers.fontString(titleFontSize, vm._titleFontStyle, vm._titleFontFamily);\n\t\t\thelpers.each(vm.title, maxLineWidth);\n\n\t\t\t// Body width\n\t\t\tctx.font = helpers.fontString(bodyFontSize, vm._bodyFontStyle, vm._bodyFontFamily);\n\t\t\thelpers.each(vm.beforeBody.concat(vm.afterBody), maxLineWidth);\n\n\t\t\t// Body lines may include some extra width due to the color box\n\t\t\twidthPadding = body.length > 1 ? (bodyFontSize + 2) : 0;\n\t\t\thelpers.each(body, function(bodyItem) {\n\t\t\t\thelpers.each(bodyItem.before, maxLineWidth);\n\t\t\t\thelpers.each(bodyItem.lines, maxLineWidth);\n\t\t\t\thelpers.each(bodyItem.after, maxLineWidth);\n\t\t\t});\n\n\t\t\t// Reset back to 0\n\t\t\twidthPadding = 0;\n\n\t\t\t// Footer width\n\t\t\tctx.font = helpers.fontString(footerFontSize, vm._footerFontStyle, vm._footerFontFamily);\n\t\t\thelpers.each(vm.footer, maxLineWidth);\n\n\t\t\t// Add padding\n\t\t\tsize.width += 2 * vm.xPadding;\n\n\t\t\treturn size;\n\t\t},\n\t\tdetermineAlignment: function(size) {\n\t\t\tvar me = this;\n\t\t\tvar model = me._model;\n\t\t\tvar chart = me._chart;\n\t\t\tvar chartArea = me._chartInstance.chartArea;\n\n\t\t\tif (model.y < size.height) {\n\t\t\t\tmodel.yAlign = 'top';\n\t\t\t} else if (model.y > (chart.height - size.height)) {\n\t\t\t\tmodel.yAlign = 'bottom';\n\t\t\t}\n\n\t\t\tvar lf, rf; // functions to determine left, right alignment\n\t\t\tvar olf, orf; // functions to determine if left/right alignment causes tooltip to go outside chart\n\t\t\tvar yf; // function to get the y alignment if the tooltip goes outside of the left or right edges\n\t\t\tvar midX = (chartArea.left + chartArea.right) / 2;\n\t\t\tvar midY = (chartArea.top + chartArea.bottom) / 2;\n\n\t\t\tif (model.yAlign === 'center') {\n\t\t\t\tlf = function(x) {\n\t\t\t\t\treturn x <= midX;\n\t\t\t\t};\n\t\t\t\trf = function(x) {\n\t\t\t\t\treturn x > midX;\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\tlf = function(x) {\n\t\t\t\t\treturn x <= (size.width / 2);\n\t\t\t\t};\n\t\t\t\trf = function(x) {\n\t\t\t\t\treturn x >= (chart.width - (size.width / 2));\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tolf = function(x) {\n\t\t\t\treturn x + size.width > chart.width;\n\t\t\t};\n\t\t\torf = function(x) {\n\t\t\t\treturn x - size.width < 0;\n\t\t\t};\n\t\t\tyf = function(y) {\n\t\t\t\treturn y <= midY ? 'top' : 'bottom';\n\t\t\t};\n\n\t\t\tif (lf(model.x)) {\n\t\t\t\tmodel.xAlign = 'left';\n\n\t\t\t\t// Is tooltip too wide and goes over the right side of the chart.?\n\t\t\t\tif (olf(model.x)) {\n\t\t\t\t\tmodel.xAlign = 'center';\n\t\t\t\t\tmodel.yAlign = yf(model.y);\n\t\t\t\t}\n\t\t\t} else if (rf(model.x)) {\n\t\t\t\tmodel.xAlign = 'right';\n\n\t\t\t\t// Is tooltip too wide and goes outside left edge of canvas?\n\t\t\t\tif (orf(model.x)) {\n\t\t\t\t\tmodel.xAlign = 'center';\n\t\t\t\t\tmodel.yAlign = yf(model.y);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tgetBackgroundPoint: function(vm, size) {\n\t\t\t// Background Position\n\t\t\tvar pt = {\n\t\t\t\tx: vm.x,\n\t\t\t\ty: vm.y\n\t\t\t};\n\n\t\t\tvar caretSize = vm.caretSize,\n\t\t\t\tcaretPadding = vm.caretPadding,\n\t\t\t\tcornerRadius = vm.cornerRadius,\n\t\t\t\txAlign = vm.xAlign,\n\t\t\t\tyAlign = vm.yAlign,\n\t\t\t\tpaddingAndSize = caretSize + caretPadding,\n\t\t\t\tradiusAndPadding = cornerRadius + caretPadding;\n\n\t\t\tif (xAlign === 'right') {\n\t\t\t\tpt.x -= size.width;\n\t\t\t} else if (xAlign === 'center') {\n\t\t\t\tpt.x -= (size.width / 2);\n\t\t\t}\n\n\t\t\tif (yAlign === 'top') {\n\t\t\t\tpt.y += paddingAndSize;\n\t\t\t} else if (yAlign === 'bottom') {\n\t\t\t\tpt.y -= size.height + paddingAndSize;\n\t\t\t} else {\n\t\t\t\tpt.y -= (size.height / 2);\n\t\t\t}\n\n\t\t\tif (yAlign === 'center') {\n\t\t\t\tif (xAlign === 'left') {\n\t\t\t\t\tpt.x += paddingAndSize;\n\t\t\t\t} else if (xAlign === 'right') {\n\t\t\t\t\tpt.x -= paddingAndSize;\n\t\t\t\t}\n\t\t\t} else if (xAlign === 'left') {\n\t\t\t\tpt.x -= radiusAndPadding;\n\t\t\t} else if (xAlign === 'right') {\n\t\t\t\tpt.x += radiusAndPadding;\n\t\t\t}\n\n\t\t\treturn pt;\n\t\t},\n\t\tdrawCaret: function(tooltipPoint, size, opacity) {\n\t\t\tvar vm = this._view;\n\t\t\tvar ctx = this._chart.ctx;\n\t\t\tvar x1, x2, x3;\n\t\t\tvar y1, y2, y3;\n\t\t\tvar caretSize = vm.caretSize;\n\t\t\tvar cornerRadius = vm.cornerRadius;\n\t\t\tvar xAlign = vm.xAlign,\n\t\t\t\tyAlign = vm.yAlign;\n\t\t\tvar ptX = tooltipPoint.x,\n\t\t\t\tptY = tooltipPoint.y;\n\t\t\tvar width = size.width,\n\t\t\t\theight = size.height;\n\n\t\t\tif (yAlign === 'center') {\n\t\t\t\t// Left or right side\n\t\t\t\tif (xAlign === 'left') {\n\t\t\t\t\tx1 = ptX;\n\t\t\t\t\tx2 = x1 - caretSize;\n\t\t\t\t\tx3 = x1;\n\t\t\t\t} else {\n\t\t\t\t\tx1 = ptX + width;\n\t\t\t\t\tx2 = x1 + caretSize;\n\t\t\t\t\tx3 = x1;\n\t\t\t\t}\n\n\t\t\t\ty2 = ptY + (height / 2);\n\t\t\t\ty1 = y2 - caretSize;\n\t\t\t\ty3 = y2 + caretSize;\n\t\t\t} else {\n\t\t\t\tif (xAlign === 'left') {\n\t\t\t\t\tx1 = ptX + cornerRadius;\n\t\t\t\t\tx2 = x1 + caretSize;\n\t\t\t\t\tx3 = x2 + caretSize;\n\t\t\t\t} else if (xAlign === 'right') {\n\t\t\t\t\tx1 = ptX + width - cornerRadius;\n\t\t\t\t\tx2 = x1 - caretSize;\n\t\t\t\t\tx3 = x2 - caretSize;\n\t\t\t\t} else {\n\t\t\t\t\tx2 = ptX + (width / 2);\n\t\t\t\t\tx1 = x2 - caretSize;\n\t\t\t\t\tx3 = x2 + caretSize;\n\t\t\t\t}\n\n\t\t\t\tif (yAlign === 'top') {\n\t\t\t\t\ty1 = ptY;\n\t\t\t\t\ty2 = y1 - caretSize;\n\t\t\t\t\ty3 = y1;\n\t\t\t\t} else {\n\t\t\t\t\ty1 = ptY + height;\n\t\t\t\t\ty2 = y1 + caretSize;\n\t\t\t\t\ty3 = y1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvar bgColor = helpers.color(vm.backgroundColor);\n\t\t\tctx.fillStyle = bgColor.alpha(opacity * bgColor.alpha()).rgbString();\n\t\t\tctx.beginPath();\n\t\t\tctx.moveTo(x1, y1);\n\t\t\tctx.lineTo(x2, y2);\n\t\t\tctx.lineTo(x3, y3);\n\t\t\tctx.closePath();\n\t\t\tctx.fill();\n\t\t},\n\t\tdrawTitle: function(pt, vm, ctx, opacity) {\n\t\t\tvar title = vm.title;\n\n\t\t\tif (title.length) {\n\t\t\t\tctx.textAlign = vm._titleAlign;\n\t\t\t\tctx.textBaseline = 'top';\n\n\t\t\t\tvar titleFontSize = vm.titleFontSize,\n\t\t\t\t\ttitleSpacing = vm.titleSpacing;\n\n\t\t\t\tvar titleFontColor = helpers.color(vm.titleFontColor);\n\t\t\t\tctx.fillStyle = titleFontColor.alpha(opacity * titleFontColor.alpha()).rgbString();\n\t\t\t\tctx.font = helpers.fontString(titleFontSize, vm._titleFontStyle, vm._titleFontFamily);\n\n\t\t\t\tvar i, len;\n\t\t\t\tfor (i = 0, len = title.length; i < len; ++i) {\n\t\t\t\t\tctx.fillText(title[i], pt.x, pt.y);\n\t\t\t\t\tpt.y += titleFontSize + titleSpacing; // Line Height and spacing\n\n\t\t\t\t\tif (i + 1 === title.length) {\n\t\t\t\t\t\tpt.y += vm.titleMarginBottom - titleSpacing; // If Last, add margin, remove spacing\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tdrawBody: function(pt, vm, ctx, opacity) {\n\t\t\tvar bodyFontSize = vm.bodyFontSize;\n\t\t\tvar bodySpacing = vm.bodySpacing;\n\t\t\tvar body = vm.body;\n\n\t\t\tctx.textAlign = vm._bodyAlign;\n\t\t\tctx.textBaseline = 'top';\n\n\t\t\tvar bodyFontColor = helpers.color(vm.bodyFontColor);\n\t\t\tvar textColor = bodyFontColor.alpha(opacity * bodyFontColor.alpha()).rgbString();\n\t\t\tctx.fillStyle = textColor;\n\t\t\tctx.font = helpers.fontString(bodyFontSize, vm._bodyFontStyle, vm._bodyFontFamily);\n\n\t\t\t// Before Body\n\t\t\tvar xLinePadding = 0;\n\t\t\tvar fillLineOfText = function(line) {\n\t\t\t\tctx.fillText(line, pt.x + xLinePadding, pt.y);\n\t\t\t\tpt.y += bodyFontSize + bodySpacing;\n\t\t\t};\n\n\t\t\t// Before body lines\n\t\t\thelpers.each(vm.beforeBody, fillLineOfText);\n\n\t\t\tvar drawColorBoxes = body.length > 1;\n\t\t\txLinePadding = drawColorBoxes ? (bodyFontSize + 2) : 0;\n\n\t\t\t// Draw body lines now\n\t\t\thelpers.each(body, function(bodyItem, i) {\n\t\t\t\thelpers.each(bodyItem.before, fillLineOfText);\n\n\t\t\t\thelpers.each(bodyItem.lines, function(line) {\n\t\t\t\t\t// Draw Legend-like boxes if needed\n\t\t\t\t\tif (drawColorBoxes) {\n\t\t\t\t\t\t// Fill a white rect so that colours merge nicely if the opacity is < 1\n\t\t\t\t\t\tctx.fillStyle = helpers.color(vm.legendColorBackground).alpha(opacity).rgbaString();\n\t\t\t\t\t\tctx.fillRect(pt.x, pt.y, bodyFontSize, bodyFontSize);\n\n\t\t\t\t\t\t// Border\n\t\t\t\t\t\tctx.strokeStyle = helpers.color(vm.labelColors[i].borderColor).alpha(opacity).rgbaString();\n\t\t\t\t\t\tctx.strokeRect(pt.x, pt.y, bodyFontSize, bodyFontSize);\n\n\t\t\t\t\t\t// Inner square\n\t\t\t\t\t\tctx.fillStyle = helpers.color(vm.labelColors[i].backgroundColor).alpha(opacity).rgbaString();\n\t\t\t\t\t\tctx.fillRect(pt.x + 1, pt.y + 1, bodyFontSize - 2, bodyFontSize - 2);\n\n\t\t\t\t\t\tctx.fillStyle = textColor;\n\t\t\t\t\t}\n\n\t\t\t\t\tfillLineOfText(line);\n\t\t\t\t});\n\n\t\t\t\thelpers.each(bodyItem.after, fillLineOfText);\n\t\t\t});\n\n\t\t\t// Reset back to 0 for after body\n\t\t\txLinePadding = 0;\n\n\t\t\t// After body lines\n\t\t\thelpers.each(vm.afterBody, fillLineOfText);\n\t\t\tpt.y -= bodySpacing; // Remove last body spacing\n\t\t},\n\t\tdrawFooter: function(pt, vm, ctx, opacity) {\n\t\t\tvar footer = vm.footer;\n\n\t\t\tif (footer.length) {\n\t\t\t\tpt.y += vm.footerMarginTop;\n\n\t\t\t\tctx.textAlign = vm._footerAlign;\n\t\t\t\tctx.textBaseline = 'top';\n\n\t\t\t\tvar footerFontColor = helpers.color(vm.footerFontColor);\n\t\t\t\tctx.fillStyle = footerFontColor.alpha(opacity * footerFontColor.alpha()).rgbString();\n\t\t\t\tctx.font = helpers.fontString(vm.footerFontSize, vm._footerFontStyle, vm._footerFontFamily);\n\n\t\t\t\thelpers.each(footer, function(line) {\n\t\t\t\t\tctx.fillText(line, pt.x, pt.y);\n\t\t\t\t\tpt.y += vm.footerFontSize + vm.footerSpacing;\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\tdraw: function() {\n\t\t\tvar ctx = this._chart.ctx;\n\t\t\tvar vm = this._view;\n\n\t\t\tif (vm.opacity === 0) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar tooltipSize = this.getTooltipSize(vm);\n\t\t\tvar pt = {\n\t\t\t\tx: vm.x,\n\t\t\t\ty: vm.y\n\t\t\t};\n\n\t\t\t// IE11/Edge does not like very small opacities, so snap to 0\n\t\t\tvar opacity = Math.abs(vm.opacity < 1e-3) ? 0 : vm.opacity;\n\n\t\t\tif (this._options.enabled) {\n\t\t\t\t// Draw Background\n\t\t\t\tvar bgColor = helpers.color(vm.backgroundColor);\n\t\t\t\tctx.fillStyle = bgColor.alpha(opacity * bgColor.alpha()).rgbString();\n\t\t\t\thelpers.drawRoundedRectangle(ctx, pt.x, pt.y, tooltipSize.width, tooltipSize.height, vm.cornerRadius);\n\t\t\t\tctx.fill();\n\n\t\t\t\t// Draw Caret\n\t\t\t\tthis.drawCaret(pt, tooltipSize, opacity);\n\n\t\t\t\t// Draw Title, Body, and Footer\n\t\t\t\tpt.x += vm.xPadding;\n\t\t\t\tpt.y += vm.yPadding;\n\n\t\t\t\t// Titles\n\t\t\t\tthis.drawTitle(pt, vm, ctx, opacity);\n\n\t\t\t\t// Body\n\t\t\t\tthis.drawBody(pt, vm, ctx, opacity);\n\n\t\t\t\t// Footer\n\t\t\t\tthis.drawFooter(pt, vm, ctx, opacity);\n\t\t\t}\n\t\t}\n\t});\n};\n","'use strict';\n\nmodule.exports = function(Chart) {\n\n\tvar helpers = Chart.helpers,\n\t\tglobalOpts = Chart.defaults.global;\n\n\tglobalOpts.elements.arc = {\n\t\tbackgroundColor: globalOpts.defaultColor,\n\t\tborderColor: '#fff',\n\t\tborderWidth: 2\n\t};\n\n\tChart.elements.Arc = Chart.Element.extend({\n\t\tinLabelRange: function(mouseX) {\n\t\t\tvar vm = this._view;\n\n\t\t\tif (vm) {\n\t\t\t\treturn (Math.pow(mouseX - vm.x, 2) < Math.pow(vm.radius + vm.hoverRadius, 2));\n\t\t\t}\n\t\t\treturn false;\n\t\t},\n\t\tinRange: function(chartX, chartY) {\n\t\t\tvar vm = this._view;\n\n\t\t\tif (vm) {\n\t\t\t\tvar pointRelativePosition = helpers.getAngleFromPoint(vm, {\n\t\t\t\t\t\tx: chartX,\n\t\t\t\t\t\ty: chartY\n\t\t\t\t\t}),\n\t\t\t\t\tangle = pointRelativePosition.angle,\n\t\t\t\t\tdistance = pointRelativePosition.distance;\n\n\t\t\t\t// Sanitise angle range\n\t\t\t\tvar startAngle = vm.startAngle;\n\t\t\t\tvar endAngle = vm.endAngle;\n\t\t\t\twhile (endAngle < startAngle) {\n\t\t\t\t\tendAngle += 2.0 * Math.PI;\n\t\t\t\t}\n\t\t\t\twhile (angle > endAngle) {\n\t\t\t\t\tangle -= 2.0 * Math.PI;\n\t\t\t\t}\n\t\t\t\twhile (angle < startAngle) {\n\t\t\t\t\tangle += 2.0 * Math.PI;\n\t\t\t\t}\n\n\t\t\t\t// Check if within the range of the open/close angle\n\t\t\t\tvar betweenAngles = (angle >= startAngle && angle <= endAngle),\n\t\t\t\t\twithinRadius = (distance >= vm.innerRadius && distance <= vm.outerRadius);\n\n\t\t\t\treturn (betweenAngles && withinRadius);\n\t\t\t}\n\t\t\treturn false;\n\t\t},\n\t\ttooltipPosition: function() {\n\t\t\tvar vm = this._view;\n\n\t\t\tvar centreAngle = vm.startAngle + ((vm.endAngle - vm.startAngle) / 2),\n\t\t\t\trangeFromCentre = (vm.outerRadius - vm.innerRadius) / 2 + vm.innerRadius;\n\t\t\treturn {\n\t\t\t\tx: vm.x + (Math.cos(centreAngle) * rangeFromCentre),\n\t\t\t\ty: vm.y + (Math.sin(centreAngle) * rangeFromCentre)\n\t\t\t};\n\t\t},\n\t\tdraw: function() {\n\n\t\t\tvar ctx = this._chart.ctx,\n\t\t\t\tvm = this._view,\n\t\t\t\tsA = vm.startAngle,\n\t\t\t\teA = vm.endAngle;\n\n\t\t\tctx.beginPath();\n\n\t\t\tctx.arc(vm.x, vm.y, vm.outerRadius, sA, eA);\n\t\t\tctx.arc(vm.x, vm.y, vm.innerRadius, eA, sA, true);\n\n\t\t\tctx.closePath();\n\t\t\tctx.strokeStyle = vm.borderColor;\n\t\t\tctx.lineWidth = vm.borderWidth;\n\n\t\t\tctx.fillStyle = vm.backgroundColor;\n\n\t\t\tctx.fill();\n\t\t\tctx.lineJoin = 'bevel';\n\n\t\t\tif (vm.borderWidth) {\n\t\t\t\tctx.stroke();\n\t\t\t}\n\t\t}\n\t});\n};\n","'use strict';\n\nmodule.exports = function(Chart) {\n\n\tvar helpers = Chart.helpers;\n\tvar globalDefaults = Chart.defaults.global;\n\n\tChart.defaults.global.elements.line = {\n\t\ttension: 0.4,\n\t\tbackgroundColor: globalDefaults.defaultColor,\n\t\tborderWidth: 3,\n\t\tborderColor: globalDefaults.defaultColor,\n\t\tborderCapStyle: 'butt',\n\t\tborderDash: [],\n\t\tborderDashOffset: 0.0,\n\t\tborderJoinStyle: 'miter',\n\t\tcapBezierPoints: true,\n\t\tfill: true // do we fill in the area between the line and its base axis\n\t};\n\n\tChart.elements.Line = Chart.Element.extend({\n\t\tdraw: function() {\n\t\t\tvar me = this;\n\t\t\tvar vm = me._view;\n\t\t\tvar spanGaps = vm.spanGaps;\n\t\t\tvar scaleZero = vm.scaleZero;\n\t\t\tvar loop = me._loop;\n\n\t\t\tvar ctx = me._chart.ctx;\n\t\t\tctx.save();\n\n\t\t\t// Helper function to draw a line to a point\n\t\t\tfunction lineToPoint(previousPoint, point) {\n\t\t\t\tvar pointVM = point._view;\n\t\t\t\tif (point._view.steppedLine === true) {\n\t\t\t\t\tctx.lineTo(pointVM.x, previousPoint._view.y);\n\t\t\t\t\tctx.lineTo(pointVM.x, pointVM.y);\n\t\t\t\t} else if (point._view.tension === 0) {\n\t\t\t\t\tctx.lineTo(pointVM.x, pointVM.y);\n\t\t\t\t} else {\n\t\t\t\t\tctx.bezierCurveTo(\n\t\t\t\t\t\tpreviousPoint._view.controlPointNextX,\n\t\t\t\t\t\tpreviousPoint._view.controlPointNextY,\n\t\t\t\t\t\tpointVM.controlPointPreviousX,\n\t\t\t\t\t\tpointVM.controlPointPreviousY,\n\t\t\t\t\t\tpointVM.x,\n\t\t\t\t\t\tpointVM.y\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvar points = me._children.slice(); // clone array\n\t\t\tvar lastDrawnIndex = -1;\n\n\t\t\t// If we are looping, adding the first point again\n\t\t\tif (loop && points.length) {\n\t\t\t\tpoints.push(points[0]);\n\t\t\t}\n\n\t\t\tvar index, current, previous, currentVM;\n\n\t\t\t// Fill Line\n\t\t\tif (points.length && vm.fill) {\n\t\t\t\tctx.beginPath();\n\n\t\t\t\tfor (index = 0; index < points.length; ++index) {\n\t\t\t\t\tcurrent = points[index];\n\t\t\t\t\tprevious = helpers.previousItem(points, index);\n\t\t\t\t\tcurrentVM = current._view;\n\n\t\t\t\t\t// First point moves to it's starting position no matter what\n\t\t\t\t\tif (index === 0) {\n\t\t\t\t\t\tif (loop) {\n\t\t\t\t\t\t\tctx.moveTo(scaleZero.x, scaleZero.y);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tctx.moveTo(currentVM.x, scaleZero);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (!currentVM.skip) {\n\t\t\t\t\t\t\tlastDrawnIndex = index;\n\t\t\t\t\t\t\tctx.lineTo(currentVM.x, currentVM.y);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tprevious = lastDrawnIndex === -1 ? previous : points[lastDrawnIndex];\n\n\t\t\t\t\t\tif (currentVM.skip) {\n\t\t\t\t\t\t\t// Only do this if this is the first point that is skipped\n\t\t\t\t\t\t\tif (!spanGaps && lastDrawnIndex === (index - 1)) {\n\t\t\t\t\t\t\t\tif (loop) {\n\t\t\t\t\t\t\t\t\tctx.lineTo(scaleZero.x, scaleZero.y);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tctx.lineTo(previous._view.x, scaleZero);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif (lastDrawnIndex !== (index - 1)) {\n\t\t\t\t\t\t\t\t// There was a gap and this is the first point after the gap. If we've never drawn a point, this is a special case.\n\t\t\t\t\t\t\t\t// If the first data point is NaN, then there is no real gap to skip\n\t\t\t\t\t\t\t\tif (spanGaps && lastDrawnIndex !== -1) {\n\t\t\t\t\t\t\t\t\t// We are spanning the gap, so simple draw a line to this point\n\t\t\t\t\t\t\t\t\tlineToPoint(previous, current);\n\t\t\t\t\t\t\t\t} else if (loop) {\n\t\t\t\t\t\t\t\t\tctx.lineTo(currentVM.x, currentVM.y);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tctx.lineTo(currentVM.x, scaleZero);\n\t\t\t\t\t\t\t\t\tctx.lineTo(currentVM.x, currentVM.y);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t// Line to next point\n\t\t\t\t\t\t\t\tlineToPoint(previous, current);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tlastDrawnIndex = index;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (!loop && lastDrawnIndex !== -1) {\n\t\t\t\t\tctx.lineTo(points[lastDrawnIndex]._view.x, scaleZero);\n\t\t\t\t}\n\n\t\t\t\tctx.fillStyle = vm.backgroundColor || globalDefaults.defaultColor;\n\t\t\t\tctx.closePath();\n\t\t\t\tctx.fill();\n\t\t\t}\n\n\t\t\t// Stroke Line Options\n\t\t\tvar globalOptionLineElements = globalDefaults.elements.line;\n\t\t\tctx.lineCap = vm.borderCapStyle || globalOptionLineElements.borderCapStyle;\n\n\t\t\t// IE 9 and 10 do not support line dash\n\t\t\tif (ctx.setLineDash) {\n\t\t\t\tctx.setLineDash(vm.borderDash || globalOptionLineElements.borderDash);\n\t\t\t}\n\n\t\t\tctx.lineDashOffset = vm.borderDashOffset || globalOptionLineElements.borderDashOffset;\n\t\t\tctx.lineJoin = vm.borderJoinStyle || globalOptionLineElements.borderJoinStyle;\n\t\t\tctx.lineWidth = vm.borderWidth || globalOptionLineElements.borderWidth;\n\t\t\tctx.strokeStyle = vm.borderColor || globalDefaults.defaultColor;\n\n\t\t\t// Stroke Line\n\t\t\tctx.beginPath();\n\t\t\tlastDrawnIndex = -1;\n\n\t\t\tfor (index = 0; index < points.length; ++index) {\n\t\t\t\tcurrent = points[index];\n\t\t\t\tprevious = helpers.previousItem(points, index);\n\t\t\t\tcurrentVM = current._view;\n\n\t\t\t\t// First point moves to it's starting position no matter what\n\t\t\t\tif (index === 0) {\n\t\t\t\t\tif (!currentVM.skip) {\n\t\t\t\t\t\tctx.moveTo(currentVM.x, currentVM.y);\n\t\t\t\t\t\tlastDrawnIndex = index;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tprevious = lastDrawnIndex === -1 ? previous : points[lastDrawnIndex];\n\n\t\t\t\t\tif (!currentVM.skip) {\n\t\t\t\t\t\tif ((lastDrawnIndex !== (index - 1) && !spanGaps) || lastDrawnIndex === -1) {\n\t\t\t\t\t\t\t// There was a gap and this is the first point after the gap\n\t\t\t\t\t\t\tctx.moveTo(currentVM.x, currentVM.y);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Line to next point\n\t\t\t\t\t\t\tlineToPoint(previous, current);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tlastDrawnIndex = index;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tctx.stroke();\n\t\t\tctx.restore();\n\t\t}\n\t});\n};\n","'use strict';\n\nmodule.exports = function(Chart) {\n\n\tvar helpers = Chart.helpers,\n\t\tglobalOpts = Chart.defaults.global,\n\t\tdefaultColor = globalOpts.defaultColor;\n\n\tglobalOpts.elements.point = {\n\t\tradius: 3,\n\t\tpointStyle: 'circle',\n\t\tbackgroundColor: defaultColor,\n\t\tborderWidth: 1,\n\t\tborderColor: defaultColor,\n\t\t// Hover\n\t\thitRadius: 1,\n\t\thoverRadius: 4,\n\t\thoverBorderWidth: 1\n\t};\n\n\tChart.elements.Point = Chart.Element.extend({\n\t\tinRange: function(mouseX, mouseY) {\n\t\t\tvar vm = this._view;\n\t\t\treturn vm ? ((Math.pow(mouseX - vm.x, 2) + Math.pow(mouseY - vm.y, 2)) < Math.pow(vm.hitRadius + vm.radius, 2)) : false;\n\t\t},\n\t\tinLabelRange: function(mouseX) {\n\t\t\tvar vm = this._view;\n\t\t\treturn vm ? (Math.pow(mouseX - vm.x, 2) < Math.pow(vm.radius + vm.hitRadius, 2)) : false;\n\t\t},\n\t\ttooltipPosition: function() {\n\t\t\tvar vm = this._view;\n\t\t\treturn {\n\t\t\t\tx: vm.x,\n\t\t\t\ty: vm.y,\n\t\t\t\tpadding: vm.radius + vm.borderWidth\n\t\t\t};\n\t\t},\n\t\tdraw: function() {\n\t\t\tvar vm = this._view;\n\t\t\tvar ctx = this._chart.ctx;\n\t\t\tvar pointStyle = vm.pointStyle;\n\t\t\tvar radius = vm.radius;\n\t\t\tvar x = vm.x;\n\t\t\tvar y = vm.y;\n\n\t\t\tif (vm.skip) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tctx.strokeStyle = vm.borderColor || defaultColor;\n\t\t\tctx.lineWidth = helpers.getValueOrDefault(vm.borderWidth, globalOpts.elements.point.borderWidth);\n\t\t\tctx.fillStyle = vm.backgroundColor || defaultColor;\n\n\t\t\tChart.canvasHelpers.drawPoint(ctx, pointStyle, radius, x, y);\n\t\t}\n\t});\n};\n","'use strict';\n\nmodule.exports = function(Chart) {\n\n\tvar globalOpts = Chart.defaults.global;\n\n\tglobalOpts.elements.rectangle = {\n\t\tbackgroundColor: globalOpts.defaultColor,\n\t\tborderWidth: 0,\n\t\tborderColor: globalOpts.defaultColor,\n\t\tborderSkipped: 'bottom'\n\t};\n\n\tChart.elements.Rectangle = Chart.Element.extend({\n\t\tdraw: function() {\n\t\t\tvar ctx = this._chart.ctx;\n\t\t\tvar vm = this._view;\n\n\t\t\tvar halfWidth = vm.width / 2,\n\t\t\t\tleftX = vm.x - halfWidth,\n\t\t\t\trightX = vm.x + halfWidth,\n\t\t\t\ttop = vm.base - (vm.base - vm.y),\n\t\t\t\thalfStroke = vm.borderWidth / 2;\n\n\t\t\t// Canvas doesn't allow us to stroke inside the width so we can\n\t\t\t// adjust the sizes to fit if we're setting a stroke on the line\n\t\t\tif (vm.borderWidth) {\n\t\t\t\tleftX += halfStroke;\n\t\t\t\trightX -= halfStroke;\n\t\t\t\ttop += halfStroke;\n\t\t\t}\n\n\t\t\tctx.beginPath();\n\t\t\tctx.fillStyle = vm.backgroundColor;\n\t\t\tctx.strokeStyle = vm.borderColor;\n\t\t\tctx.lineWidth = vm.borderWidth;\n\n\t\t\t// Corner points, from bottom-left to bottom-right clockwise\n\t\t\t// | 1 2 |\n\t\t\t// | 0 3 |\n\t\t\tvar corners = [\n\t\t\t\t[leftX, vm.base],\n\t\t\t\t[leftX, top],\n\t\t\t\t[rightX, top],\n\t\t\t\t[rightX, vm.base]\n\t\t\t];\n\n\t\t\t// Find first (starting) corner with fallback to 'bottom'\n\t\t\tvar borders = ['bottom', 'left', 'top', 'right'];\n\t\t\tvar startCorner = borders.indexOf(vm.borderSkipped, 0);\n\t\t\tif (startCorner === -1) {\n\t\t\t\tstartCorner = 0;\n\t\t\t}\n\n\t\t\tfunction cornerAt(index) {\n\t\t\t\treturn corners[(startCorner + index) % 4];\n\t\t\t}\n\n\t\t\t// Draw rectangle from 'startCorner'\n\t\t\tctx.moveTo.apply(ctx, cornerAt(0));\n\t\t\tfor (var i = 1; i < 4; i++) {\n\t\t\t\tctx.lineTo.apply(ctx, cornerAt(i));\n\t\t\t}\n\n\t\t\tctx.fill();\n\t\t\tif (vm.borderWidth) {\n\t\t\t\tctx.stroke();\n\t\t\t}\n\t\t},\n\t\theight: function() {\n\t\t\tvar vm = this._view;\n\t\t\treturn vm.base - vm.y;\n\t\t},\n\t\tinRange: function(mouseX, mouseY) {\n\t\t\tvar vm = this._view;\n\t\t\treturn vm ?\n\t\t\t\t\t(vm.y < vm.base ?\n\t\t\t\t\t\t(mouseX >= vm.x - vm.width / 2 && mouseX <= vm.x + vm.width / 2) && (mouseY >= vm.y && mouseY <= vm.base) :\n\t\t\t\t\t\t(mouseX >= vm.x - vm.width / 2 && mouseX <= vm.x + vm.width / 2) && (mouseY >= vm.base && mouseY <= vm.y)) :\n\t\t\t\t\tfalse;\n\t\t},\n\t\tinLabelRange: function(mouseX) {\n\t\t\tvar vm = this._view;\n\t\t\treturn vm ? (mouseX >= vm.x - vm.width / 2 && mouseX <= vm.x + vm.width / 2) : false;\n\t\t},\n\t\ttooltipPosition: function() {\n\t\t\tvar vm = this._view;\n\t\t\treturn {\n\t\t\t\tx: vm.x,\n\t\t\t\ty: vm.y\n\t\t\t};\n\t\t}\n\t});\n\n};\n","'use strict';\n\nmodule.exports = function(Chart) {\n\n\tvar helpers = Chart.helpers;\n\t// Default config for a category scale\n\tvar defaultConfig = {\n\t\tposition: 'bottom'\n\t};\n\n\tvar DatasetScale = Chart.Scale.extend({\n\t\t/**\n\t\t* Internal function to get the correct labels. If data.xLabels or data.yLabels are defined, use tose\n\t\t* else fall back to data.labels\n\t\t* @private\n\t\t*/\n\t\tgetLabels: function() {\n\t\t\tvar data = this.chart.data;\n\t\t\treturn (this.isHorizontal() ? data.xLabels : data.yLabels) || data.labels;\n\t\t},\n\t\t// Implement this so that\n\t\tdetermineDataLimits: function() {\n\t\t\tvar me = this;\n\t\t\tvar labels = me.getLabels();\n\t\t\tme.minIndex = 0;\n\t\t\tme.maxIndex = labels.length - 1;\n\t\t\tvar findIndex;\n\n\t\t\tif (me.options.ticks.min !== undefined) {\n\t\t\t\t// user specified min value\n\t\t\t\tfindIndex = helpers.indexOf(labels, me.options.ticks.min);\n\t\t\t\tme.minIndex = findIndex !== -1 ? findIndex : me.minIndex;\n\t\t\t}\n\n\t\t\tif (me.options.ticks.max !== undefined) {\n\t\t\t\t// user specified max value\n\t\t\t\tfindIndex = helpers.indexOf(labels, me.options.ticks.max);\n\t\t\t\tme.maxIndex = findIndex !== -1 ? findIndex : me.maxIndex;\n\t\t\t}\n\n\t\t\tme.min = labels[me.minIndex];\n\t\t\tme.max = labels[me.maxIndex];\n\t\t},\n\n\t\tbuildTicks: function() {\n\t\t\tvar me = this;\n\t\t\tvar labels = me.getLabels();\n\t\t\t// If we are viewing some subset of labels, slice the original array\n\t\t\tme.ticks = (me.minIndex === 0 && me.maxIndex === labels.length - 1) ? labels : labels.slice(me.minIndex, me.maxIndex + 1);\n\t\t},\n\n\t\tgetLabelForIndex: function(index, datasetIndex) {\n\t\t\tvar me = this;\n\t\t\tvar data = me.chart.data;\n\t\t\tvar isHorizontal = me.isHorizontal();\n\n\t\t\tif ((data.xLabels && isHorizontal) || (data.yLabels && !isHorizontal)) {\n\t\t\t\treturn me.getRightValue(data.datasets[datasetIndex].data[index]);\n\t\t\t}\n\t\t\treturn me.ticks[index];\n\t\t},\n\n\t\t// Used to get data value locations.  Value can either be an index or a numerical value\n\t\tgetPixelForValue: function(value, index, datasetIndex, includeOffset) {\n\t\t\tvar me = this;\n\t\t\t// 1 is added because we need the length but we have the indexes\n\t\t\tvar offsetAmt = Math.max((me.maxIndex + 1 - me.minIndex - ((me.options.gridLines.offsetGridLines) ? 0 : 1)), 1);\n\n\t\t\tif (value !== undefined && isNaN(index)) {\n\t\t\t\tvar labels = me.getLabels();\n\t\t\t\tvar idx = labels.indexOf(value);\n\t\t\t\tindex = idx !== -1 ? idx : index;\n\t\t\t}\n\n\t\t\tif (me.isHorizontal()) {\n\t\t\t\tvar innerWidth = me.width - (me.paddingLeft + me.paddingRight);\n\t\t\t\tvar valueWidth = innerWidth / offsetAmt;\n\t\t\t\tvar widthOffset = (valueWidth * (index - me.minIndex)) + me.paddingLeft;\n\n\t\t\t\tif (me.options.gridLines.offsetGridLines && includeOffset || me.maxIndex === me.minIndex && includeOffset) {\n\t\t\t\t\twidthOffset += (valueWidth / 2);\n\t\t\t\t}\n\n\t\t\t\treturn me.left + Math.round(widthOffset);\n\t\t\t}\n\t\t\tvar innerHeight = me.height - (me.paddingTop + me.paddingBottom);\n\t\t\tvar valueHeight = innerHeight / offsetAmt;\n\t\t\tvar heightOffset = (valueHeight * (index - me.minIndex)) + me.paddingTop;\n\n\t\t\tif (me.options.gridLines.offsetGridLines && includeOffset) {\n\t\t\t\theightOffset += (valueHeight / 2);\n\t\t\t}\n\n\t\t\treturn me.top + Math.round(heightOffset);\n\t\t},\n\t\tgetPixelForTick: function(index, includeOffset) {\n\t\t\treturn this.getPixelForValue(this.ticks[index], index + this.minIndex, null, includeOffset);\n\t\t},\n\t\tgetValueForPixel: function(pixel) {\n\t\t\tvar me = this;\n\t\t\tvar value;\n\t\t\tvar offsetAmt = Math.max((me.ticks.length - ((me.options.gridLines.offsetGridLines) ? 0 : 1)), 1);\n\t\t\tvar horz = me.isHorizontal();\n\t\t\tvar innerDimension = horz ? me.width - (me.paddingLeft + me.paddingRight) : me.height - (me.paddingTop + me.paddingBottom);\n\t\t\tvar valueDimension = innerDimension / offsetAmt;\n\n\t\t\tpixel -= horz ? me.left : me.top;\n\n\t\t\tif (me.options.gridLines.offsetGridLines) {\n\t\t\t\tpixel -= (valueDimension / 2);\n\t\t\t}\n\t\t\tpixel -= horz ? me.paddingLeft : me.paddingTop;\n\n\t\t\tif (pixel <= 0) {\n\t\t\t\tvalue = 0;\n\t\t\t} else {\n\t\t\t\tvalue = Math.round(pixel / valueDimension);\n\t\t\t}\n\n\t\t\treturn value;\n\t\t},\n\t\tgetBasePixel: function() {\n\t\t\treturn this.bottom;\n\t\t}\n\t});\n\n\tChart.scaleService.registerScaleType('category', DatasetScale, defaultConfig);\n\n};\n","'use strict';\n\nmodule.exports = function(Chart) {\n\n\tvar helpers = Chart.helpers;\n\n\tvar defaultConfig = {\n\t\tposition: 'left',\n\t\tticks: {\n\t\t\tcallback: function(tickValue, index, ticks) {\n\t\t\t\t// If we have lots of ticks, don't use the ones\n\t\t\t\tvar delta = ticks.length > 3 ? ticks[2] - ticks[1] : ticks[1] - ticks[0];\n\n\t\t\t\t// If we have a number like 2.5 as the delta, figure out how many decimal places we need\n\t\t\t\tif (Math.abs(delta) > 1) {\n\t\t\t\t\tif (tickValue !== Math.floor(tickValue)) {\n\t\t\t\t\t\t// not an integer\n\t\t\t\t\t\tdelta = tickValue - Math.floor(tickValue);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tvar logDelta = helpers.log10(Math.abs(delta));\n\t\t\t\tvar tickString = '';\n\n\t\t\t\tif (tickValue !== 0) {\n\t\t\t\t\tvar numDecimal = -1 * Math.floor(logDelta);\n\t\t\t\t\tnumDecimal = Math.max(Math.min(numDecimal, 20), 0); // toFixed has a max of 20 decimal places\n\t\t\t\t\ttickString = tickValue.toFixed(numDecimal);\n\t\t\t\t} else {\n\t\t\t\t\ttickString = '0'; // never show decimal places for 0\n\t\t\t\t}\n\n\t\t\t\treturn tickString;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar LinearScale = Chart.LinearScaleBase.extend({\n\t\tdetermineDataLimits: function() {\n\t\t\tvar me = this;\n\t\t\tvar opts = me.options;\n\t\t\tvar chart = me.chart;\n\t\t\tvar data = chart.data;\n\t\t\tvar datasets = data.datasets;\n\t\t\tvar isHorizontal = me.isHorizontal();\n\n\t\t\tfunction IDMatches(meta) {\n\t\t\t\treturn isHorizontal ? meta.xAxisID === me.id : meta.yAxisID === me.id;\n\t\t\t}\n\n\t\t\t// First Calculate the range\n\t\t\tme.min = null;\n\t\t\tme.max = null;\n\n\t\t\tif (opts.stacked) {\n\t\t\t\tvar valuesPerType = {};\n\n\t\t\t\thelpers.each(datasets, function(dataset, datasetIndex) {\n\t\t\t\t\tvar meta = chart.getDatasetMeta(datasetIndex);\n\t\t\t\t\tif (valuesPerType[meta.type] === undefined) {\n\t\t\t\t\t\tvaluesPerType[meta.type] = {\n\t\t\t\t\t\t\tpositiveValues: [],\n\t\t\t\t\t\t\tnegativeValues: []\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\t// Store these per type\n\t\t\t\t\tvar positiveValues = valuesPerType[meta.type].positiveValues;\n\t\t\t\t\tvar negativeValues = valuesPerType[meta.type].negativeValues;\n\n\t\t\t\t\tif (chart.isDatasetVisible(datasetIndex) && IDMatches(meta)) {\n\t\t\t\t\t\thelpers.each(dataset.data, function(rawValue, index) {\n\t\t\t\t\t\t\tvar value = +me.getRightValue(rawValue);\n\t\t\t\t\t\t\tif (isNaN(value) || meta.data[index].hidden) {\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tpositiveValues[index] = positiveValues[index] || 0;\n\t\t\t\t\t\t\tnegativeValues[index] = negativeValues[index] || 0;\n\n\t\t\t\t\t\t\tif (opts.relativePoints) {\n\t\t\t\t\t\t\t\tpositiveValues[index] = 100;\n\t\t\t\t\t\t\t} else if (value < 0) {\n\t\t\t\t\t\t\t\tnegativeValues[index] += value;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tpositiveValues[index] += value;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\thelpers.each(valuesPerType, function(valuesForType) {\n\t\t\t\t\tvar values = valuesForType.positiveValues.concat(valuesForType.negativeValues);\n\t\t\t\t\tvar minVal = helpers.min(values);\n\t\t\t\t\tvar maxVal = helpers.max(values);\n\t\t\t\t\tme.min = me.min === null ? minVal : Math.min(me.min, minVal);\n\t\t\t\t\tme.max = me.max === null ? maxVal : Math.max(me.max, maxVal);\n\t\t\t\t});\n\n\t\t\t} else {\n\t\t\t\thelpers.each(datasets, function(dataset, datasetIndex) {\n\t\t\t\t\tvar meta = chart.getDatasetMeta(datasetIndex);\n\t\t\t\t\tif (chart.isDatasetVisible(datasetIndex) && IDMatches(meta)) {\n\t\t\t\t\t\thelpers.each(dataset.data, function(rawValue, index) {\n\t\t\t\t\t\t\tvar value = +me.getRightValue(rawValue);\n\t\t\t\t\t\t\tif (isNaN(value) || meta.data[index].hidden) {\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (me.min === null) {\n\t\t\t\t\t\t\t\tme.min = value;\n\t\t\t\t\t\t\t} else if (value < me.min) {\n\t\t\t\t\t\t\t\tme.min = value;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (me.max === null) {\n\t\t\t\t\t\t\t\tme.max = value;\n\t\t\t\t\t\t\t} else if (value > me.max) {\n\t\t\t\t\t\t\t\tme.max = value;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// Common base implementation to handle ticks.min, ticks.max, ticks.beginAtZero\n\t\t\tthis.handleTickRangeOptions();\n\t\t},\n\t\tgetTickLimit: function() {\n\t\t\tvar maxTicks;\n\t\t\tvar me = this;\n\t\t\tvar tickOpts = me.options.ticks;\n\n\t\t\tif (me.isHorizontal()) {\n\t\t\t\tmaxTicks = Math.min(tickOpts.maxTicksLimit ? tickOpts.maxTicksLimit : 11, Math.ceil(me.width / 50));\n\t\t\t} else {\n\t\t\t\t// The factor of 2 used to scale the font size has been experimentally determined.\n\t\t\t\tvar tickFontSize = helpers.getValueOrDefault(tickOpts.fontSize, Chart.defaults.global.defaultFontSize);\n\t\t\t\tmaxTicks = Math.min(tickOpts.maxTicksLimit ? tickOpts.maxTicksLimit : 11, Math.ceil(me.height / (2 * tickFontSize)));\n\t\t\t}\n\n\t\t\treturn maxTicks;\n\t\t},\n\t\t// Called after the ticks are built. We need\n\t\thandleDirectionalChanges: function() {\n\t\t\tif (!this.isHorizontal()) {\n\t\t\t\t// We are in a vertical orientation. The top value is the highest. So reverse the array\n\t\t\t\tthis.ticks.reverse();\n\t\t\t}\n\t\t},\n\t\tgetLabelForIndex: function(index, datasetIndex) {\n\t\t\treturn +this.getRightValue(this.chart.data.datasets[datasetIndex].data[index]);\n\t\t},\n\t\t// Utils\n\t\tgetPixelForValue: function(value) {\n\t\t\t// This must be called after fit has been run so that\n\t\t\t// this.left, this.top, this.right, and this.bottom have been defined\n\t\t\tvar me = this;\n\t\t\tvar paddingLeft = me.paddingLeft;\n\t\t\tvar paddingBottom = me.paddingBottom;\n\t\t\tvar start = me.start;\n\n\t\t\tvar rightValue = +me.getRightValue(value);\n\t\t\tvar pixel;\n\t\t\tvar innerDimension;\n\t\t\tvar range = me.end - start;\n\n\t\t\tif (me.isHorizontal()) {\n\t\t\t\tinnerDimension = me.width - (paddingLeft + me.paddingRight);\n\t\t\t\tpixel = me.left + (innerDimension / range * (rightValue - start));\n\t\t\t\treturn Math.round(pixel + paddingLeft);\n\t\t\t}\n\t\t\tinnerDimension = me.height - (me.paddingTop + paddingBottom);\n\t\t\tpixel = (me.bottom - paddingBottom) - (innerDimension / range * (rightValue - start));\n\t\t\treturn Math.round(pixel);\n\t\t},\n\t\tgetValueForPixel: function(pixel) {\n\t\t\tvar me = this;\n\t\t\tvar isHorizontal = me.isHorizontal();\n\t\t\tvar paddingLeft = me.paddingLeft;\n\t\t\tvar paddingBottom = me.paddingBottom;\n\t\t\tvar innerDimension = isHorizontal ? me.width - (paddingLeft + me.paddingRight) : me.height - (me.paddingTop + paddingBottom);\n\t\t\tvar offset = (isHorizontal ? pixel - me.left - paddingLeft : me.bottom - paddingBottom - pixel) / innerDimension;\n\t\t\treturn me.start + ((me.end - me.start) * offset);\n\t\t},\n\t\tgetPixelForTick: function(index) {\n\t\t\treturn this.getPixelForValue(this.ticksAsNumbers[index]);\n\t\t}\n\t});\n\tChart.scaleService.registerScaleType('linear', LinearScale, defaultConfig);\n\n};\n","'use strict';\n\nmodule.exports = function(Chart) {\n\n\tvar helpers = Chart.helpers,\n\t\tnoop = helpers.noop;\n\n\tChart.LinearScaleBase = Chart.Scale.extend({\n\t\thandleTickRangeOptions: function() {\n\t\t\tvar me = this;\n\t\t\tvar opts = me.options;\n\t\t\tvar tickOpts = opts.ticks;\n\n\t\t\t// If we are forcing it to begin at 0, but 0 will already be rendered on the chart,\n\t\t\t// do nothing since that would make the chart weird. If the user really wants a weird chart\n\t\t\t// axis, they can manually override it\n\t\t\tif (tickOpts.beginAtZero) {\n\t\t\t\tvar minSign = helpers.sign(me.min);\n\t\t\t\tvar maxSign = helpers.sign(me.max);\n\n\t\t\t\tif (minSign < 0 && maxSign < 0) {\n\t\t\t\t\t// move the top up to 0\n\t\t\t\t\tme.max = 0;\n\t\t\t\t} else if (minSign > 0 && maxSign > 0) {\n\t\t\t\t\t// move the botttom down to 0\n\t\t\t\t\tme.min = 0;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (tickOpts.min !== undefined) {\n\t\t\t\tme.min = tickOpts.min;\n\t\t\t} else if (tickOpts.suggestedMin !== undefined) {\n\t\t\t\tme.min = Math.min(me.min, tickOpts.suggestedMin);\n\t\t\t}\n\n\t\t\tif (tickOpts.max !== undefined) {\n\t\t\t\tme.max = tickOpts.max;\n\t\t\t} else if (tickOpts.suggestedMax !== undefined) {\n\t\t\t\tme.max = Math.max(me.max, tickOpts.suggestedMax);\n\t\t\t}\n\n\t\t\tif (me.min === me.max) {\n\t\t\t\tme.max++;\n\n\t\t\t\tif (!tickOpts.beginAtZero) {\n\t\t\t\t\tme.min--;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tgetTickLimit: noop,\n\t\thandleDirectionalChanges: noop,\n\n\t\tbuildTicks: function() {\n\t\t\tvar me = this;\n\t\t\tvar opts = me.options;\n\t\t\tvar ticks = me.ticks = [];\n\t\t\tvar tickOpts = opts.ticks;\n\t\t\tvar getValueOrDefault = helpers.getValueOrDefault;\n\n\t\t\t// Figure out what the max number of ticks we can support it is based on the size of\n\t\t\t// the axis area. For now, we say that the minimum tick spacing in pixels must be 50\n\t\t\t// We also limit the maximum number of ticks to 11 which gives a nice 10 squares on\n\t\t\t// the graph\n\n\t\t\tvar maxTicks = me.getTickLimit();\n\n\t\t\t// Make sure we always have at least 2 ticks\n\t\t\tmaxTicks = Math.max(2, maxTicks);\n\n\t\t\t// To get a \"nice\" value for the tick spacing, we will use the appropriately named\n\t\t\t// \"nice number\" algorithm. See http://stackoverflow.com/questions/8506881/nice-label-algorithm-for-charts-with-minimum-ticks\n\t\t\t// for details.\n\n\t\t\tvar spacing;\n\t\t\tvar fixedStepSizeSet = (tickOpts.fixedStepSize && tickOpts.fixedStepSize > 0) || (tickOpts.stepSize && tickOpts.stepSize > 0);\n\t\t\tif (fixedStepSizeSet) {\n\t\t\t\tspacing = getValueOrDefault(tickOpts.fixedStepSize, tickOpts.stepSize);\n\t\t\t} else {\n\t\t\t\tvar niceRange = helpers.niceNum(me.max - me.min, false);\n\t\t\t\tspacing = helpers.niceNum(niceRange / (maxTicks - 1), true);\n\t\t\t}\n\t\t\tvar niceMin = Math.floor(me.min / spacing) * spacing;\n\t\t\tvar niceMax = Math.ceil(me.max / spacing) * spacing;\n\t\t\tvar numSpaces = (niceMax - niceMin) / spacing;\n\n\t\t\t// If very close to our rounded value, use it.\n\t\t\tif (helpers.almostEquals(numSpaces, Math.round(numSpaces), spacing / 1000)) {\n\t\t\t\tnumSpaces = Math.round(numSpaces);\n\t\t\t} else {\n\t\t\t\tnumSpaces = Math.ceil(numSpaces);\n\t\t\t}\n\n\t\t\t// Put the values into the ticks array\n\t\t\tticks.push(tickOpts.min !== undefined ? tickOpts.min : niceMin);\n\t\t\tfor (var j = 1; j < numSpaces; ++j) {\n\t\t\t\tticks.push(niceMin + (j * spacing));\n\t\t\t}\n\t\t\tticks.push(tickOpts.max !== undefined ? tickOpts.max : niceMax);\n\n\t\t\tme.handleDirectionalChanges();\n\n\t\t\t// At this point, we need to update our max and min given the tick values since we have expanded the\n\t\t\t// range of the scale\n\t\t\tme.max = helpers.max(ticks);\n\t\t\tme.min = helpers.min(ticks);\n\n\t\t\tif (tickOpts.reverse) {\n\t\t\t\tticks.reverse();\n\n\t\t\t\tme.start = me.max;\n\t\t\t\tme.end = me.min;\n\t\t\t} else {\n\t\t\t\tme.start = me.min;\n\t\t\t\tme.end = me.max;\n\t\t\t}\n\t\t},\n\t\tconvertTicksToLabels: function() {\n\t\t\tvar me = this;\n\t\t\tme.ticksAsNumbers = me.ticks.slice();\n\t\t\tme.zeroLineIndex = me.ticks.indexOf(0);\n\n\t\t\tChart.Scale.prototype.convertTicksToLabels.call(me);\n\t\t}\n\t});\n};\n","'use strict';\n\nmodule.exports = function(Chart) {\n\n\tvar helpers = Chart.helpers;\n\n\tvar defaultConfig = {\n\t\tposition: 'left',\n\n\t\t// label settings\n\t\tticks: {\n\t\t\tcallback: function(value, index, arr) {\n\t\t\t\tvar remain = value / (Math.pow(10, Math.floor(helpers.log10(value))));\n\n\t\t\t\tif (value === 0) {\n\t\t\t\t\treturn '0';\n\t\t\t\t} else if (remain === 1 || remain === 2 || remain === 5 || index === 0 || index === arr.length - 1) {\n\t\t\t\t\treturn value.toExponential();\n\t\t\t\t}\n\t\t\t\treturn '';\n\t\t\t}\n\t\t}\n\t};\n\n\tvar LogarithmicScale = Chart.Scale.extend({\n\t\tdetermineDataLimits: function() {\n\t\t\tvar me = this;\n\t\t\tvar opts = me.options;\n\t\t\tvar tickOpts = opts.ticks;\n\t\t\tvar chart = me.chart;\n\t\t\tvar data = chart.data;\n\t\t\tvar datasets = data.datasets;\n\t\t\tvar getValueOrDefault = helpers.getValueOrDefault;\n\t\t\tvar isHorizontal = me.isHorizontal();\n\t\t\tfunction IDMatches(meta) {\n\t\t\t\treturn isHorizontal ? meta.xAxisID === me.id : meta.yAxisID === me.id;\n\t\t\t}\n\n\t\t\t// Calculate Range\n\t\t\tme.min = null;\n\t\t\tme.max = null;\n\t\t\tme.minNotZero = null;\n\n\t\t\tif (opts.stacked) {\n\t\t\t\tvar valuesPerType = {};\n\n\t\t\t\thelpers.each(datasets, function(dataset, datasetIndex) {\n\t\t\t\t\tvar meta = chart.getDatasetMeta(datasetIndex);\n\t\t\t\t\tif (chart.isDatasetVisible(datasetIndex) && IDMatches(meta)) {\n\t\t\t\t\t\tif (valuesPerType[meta.type] === undefined) {\n\t\t\t\t\t\t\tvaluesPerType[meta.type] = [];\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\thelpers.each(dataset.data, function(rawValue, index) {\n\t\t\t\t\t\t\tvar values = valuesPerType[meta.type];\n\t\t\t\t\t\t\tvar value = +me.getRightValue(rawValue);\n\t\t\t\t\t\t\tif (isNaN(value) || meta.data[index].hidden) {\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tvalues[index] = values[index] || 0;\n\n\t\t\t\t\t\t\tif (opts.relativePoints) {\n\t\t\t\t\t\t\t\tvalues[index] = 100;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t// Don't need to split positive and negative since the log scale can't handle a 0 crossing\n\t\t\t\t\t\t\t\tvalues[index] += value;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\thelpers.each(valuesPerType, function(valuesForType) {\n\t\t\t\t\tvar minVal = helpers.min(valuesForType);\n\t\t\t\t\tvar maxVal = helpers.max(valuesForType);\n\t\t\t\t\tme.min = me.min === null ? minVal : Math.min(me.min, minVal);\n\t\t\t\t\tme.max = me.max === null ? maxVal : Math.max(me.max, maxVal);\n\t\t\t\t});\n\n\t\t\t} else {\n\t\t\t\thelpers.each(datasets, function(dataset, datasetIndex) {\n\t\t\t\t\tvar meta = chart.getDatasetMeta(datasetIndex);\n\t\t\t\t\tif (chart.isDatasetVisible(datasetIndex) && IDMatches(meta)) {\n\t\t\t\t\t\thelpers.each(dataset.data, function(rawValue, index) {\n\t\t\t\t\t\t\tvar value = +me.getRightValue(rawValue);\n\t\t\t\t\t\t\tif (isNaN(value) || meta.data[index].hidden) {\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (me.min === null) {\n\t\t\t\t\t\t\t\tme.min = value;\n\t\t\t\t\t\t\t} else if (value < me.min) {\n\t\t\t\t\t\t\t\tme.min = value;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (me.max === null) {\n\t\t\t\t\t\t\t\tme.max = value;\n\t\t\t\t\t\t\t} else if (value > me.max) {\n\t\t\t\t\t\t\t\tme.max = value;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (value !== 0 && (me.minNotZero === null || value < me.minNotZero)) {\n\t\t\t\t\t\t\t\tme.minNotZero = value;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tme.min = getValueOrDefault(tickOpts.min, me.min);\n\t\t\tme.max = getValueOrDefault(tickOpts.max, me.max);\n\n\t\t\tif (me.min === me.max) {\n\t\t\t\tif (me.min !== 0 && me.min !== null) {\n\t\t\t\t\tme.min = Math.pow(10, Math.floor(helpers.log10(me.min)) - 1);\n\t\t\t\t\tme.max = Math.pow(10, Math.floor(helpers.log10(me.max)) + 1);\n\t\t\t\t} else {\n\t\t\t\t\tme.min = 1;\n\t\t\t\t\tme.max = 10;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tbuildTicks: function() {\n\t\t\tvar me = this;\n\t\t\tvar opts = me.options;\n\t\t\tvar tickOpts = opts.ticks;\n\t\t\tvar getValueOrDefault = helpers.getValueOrDefault;\n\n\t\t\t// Reset the ticks array. Later on, we will draw a grid line at these positions\n\t\t\t// The array simply contains the numerical value of the spots where ticks will be\n\t\t\tvar ticks = me.ticks = [];\n\n\t\t\t// Figure out what the max number of ticks we can support it is based on the size of\n\t\t\t// the axis area. For now, we say that the minimum tick spacing in pixels must be 50\n\t\t\t// We also limit the maximum number of ticks to 11 which gives a nice 10 squares on\n\t\t\t// the graph\n\n\t\t\tvar tickVal = getValueOrDefault(tickOpts.min, Math.pow(10, Math.floor(helpers.log10(me.min))));\n\n\t\t\twhile (tickVal < me.max) {\n\t\t\t\tticks.push(tickVal);\n\n\t\t\t\tvar exp;\n\t\t\t\tvar significand;\n\n\t\t\t\tif (tickVal === 0) {\n\t\t\t\t\texp = Math.floor(helpers.log10(me.minNotZero));\n\t\t\t\t\tsignificand = Math.round(me.minNotZero / Math.pow(10, exp));\n\t\t\t\t} else {\n\t\t\t\t\texp = Math.floor(helpers.log10(tickVal));\n\t\t\t\t\tsignificand = Math.floor(tickVal / Math.pow(10, exp)) + 1;\n\t\t\t\t}\n\n\t\t\t\tif (significand === 10) {\n\t\t\t\t\tsignificand = 1;\n\t\t\t\t\t++exp;\n\t\t\t\t}\n\n\t\t\t\ttickVal = significand * Math.pow(10, exp);\n\t\t\t}\n\n\t\t\tvar lastTick = getValueOrDefault(tickOpts.max, tickVal);\n\t\t\tticks.push(lastTick);\n\n\t\t\tif (!me.isHorizontal()) {\n\t\t\t\t// We are in a vertical orientation. The top value is the highest. So reverse the array\n\t\t\t\tticks.reverse();\n\t\t\t}\n\n\t\t\t// At this point, we need to update our max and min given the tick values since we have expanded the\n\t\t\t// range of the scale\n\t\t\tme.max = helpers.max(ticks);\n\t\t\tme.min = helpers.min(ticks);\n\n\t\t\tif (tickOpts.reverse) {\n\t\t\t\tticks.reverse();\n\n\t\t\t\tme.start = me.max;\n\t\t\t\tme.end = me.min;\n\t\t\t} else {\n\t\t\t\tme.start = me.min;\n\t\t\t\tme.end = me.max;\n\t\t\t}\n\t\t},\n\t\tconvertTicksToLabels: function() {\n\t\t\tthis.tickValues = this.ticks.slice();\n\n\t\t\tChart.Scale.prototype.convertTicksToLabels.call(this);\n\t\t},\n\t\t// Get the correct tooltip label\n\t\tgetLabelForIndex: function(index, datasetIndex) {\n\t\t\treturn +this.getRightValue(this.chart.data.datasets[datasetIndex].data[index]);\n\t\t},\n\t\tgetPixelForTick: function(index) {\n\t\t\treturn this.getPixelForValue(this.tickValues[index]);\n\t\t},\n\t\tgetPixelForValue: function(value) {\n\t\t\tvar me = this;\n\t\t\tvar innerDimension;\n\t\t\tvar pixel;\n\n\t\t\tvar start = me.start;\n\t\t\tvar newVal = +me.getRightValue(value);\n\t\t\tvar range;\n\t\t\tvar paddingTop = me.paddingTop;\n\t\t\tvar paddingBottom = me.paddingBottom;\n\t\t\tvar paddingLeft = me.paddingLeft;\n\t\t\tvar opts = me.options;\n\t\t\tvar tickOpts = opts.ticks;\n\n\t\t\tif (me.isHorizontal()) {\n\t\t\t\trange = helpers.log10(me.end) - helpers.log10(start); // todo: if start === 0\n\t\t\t\tif (newVal === 0) {\n\t\t\t\t\tpixel = me.left + paddingLeft;\n\t\t\t\t} else {\n\t\t\t\t\tinnerDimension = me.width - (paddingLeft + me.paddingRight);\n\t\t\t\t\tpixel = me.left + (innerDimension / range * (helpers.log10(newVal) - helpers.log10(start)));\n\t\t\t\t\tpixel += paddingLeft;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Bottom - top since pixels increase downard on a screen\n\t\t\t\tinnerDimension = me.height - (paddingTop + paddingBottom);\n\t\t\t\tif (start === 0 && !tickOpts.reverse) {\n\t\t\t\t\trange = helpers.log10(me.end) - helpers.log10(me.minNotZero);\n\t\t\t\t\tif (newVal === start) {\n\t\t\t\t\t\tpixel = me.bottom - paddingBottom;\n\t\t\t\t\t} else if (newVal === me.minNotZero) {\n\t\t\t\t\t\tpixel = me.bottom - paddingBottom - innerDimension * 0.02;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tpixel = me.bottom - paddingBottom - innerDimension * 0.02 - (innerDimension * 0.98/ range * (helpers.log10(newVal)-helpers.log10(me.minNotZero)));\n\t\t\t\t\t}\n\t\t\t\t} else if (me.end === 0 && tickOpts.reverse) {\n\t\t\t\t\trange = helpers.log10(me.start) - helpers.log10(me.minNotZero);\n\t\t\t\t\tif (newVal === me.end) {\n\t\t\t\t\t\tpixel = me.top + paddingTop;\n\t\t\t\t\t} else if (newVal === me.minNotZero) {\n\t\t\t\t\t\tpixel = me.top + paddingTop + innerDimension * 0.02;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tpixel = me.top + paddingTop + innerDimension * 0.02 + (innerDimension * 0.98/ range * (helpers.log10(newVal)-helpers.log10(me.minNotZero)));\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\trange = helpers.log10(me.end) - helpers.log10(start);\n\t\t\t\t\tinnerDimension = me.height - (paddingTop + paddingBottom);\n\t\t\t\t\tpixel = (me.bottom - paddingBottom) - (innerDimension / range * (helpers.log10(newVal) - helpers.log10(start)));\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn pixel;\n\t\t},\n\t\tgetValueForPixel: function(pixel) {\n\t\t\tvar me = this;\n\t\t\tvar range = helpers.log10(me.end) - helpers.log10(me.start);\n\t\t\tvar value, innerDimension;\n\n\t\t\tif (me.isHorizontal()) {\n\t\t\t\tinnerDimension = me.width - (me.paddingLeft + me.paddingRight);\n\t\t\t\tvalue = me.start * Math.pow(10, (pixel - me.left - me.paddingLeft) * range / innerDimension);\n\t\t\t} else {  // todo: if start === 0\n\t\t\t\tinnerDimension = me.height - (me.paddingTop + me.paddingBottom);\n\t\t\t\tvalue = Math.pow(10, (me.bottom - me.paddingBottom - pixel) * range / innerDimension) / me.start;\n\t\t\t}\n\t\t\treturn value;\n\t\t}\n\t});\n\tChart.scaleService.registerScaleType('logarithmic', LogarithmicScale, defaultConfig);\n\n};\n","'use strict';\n\nmodule.exports = function(Chart) {\n\n\tvar helpers = Chart.helpers;\n\tvar globalDefaults = Chart.defaults.global;\n\n\tvar defaultConfig = {\n\t\tdisplay: true,\n\n\t\t// Boolean - Whether to animate scaling the chart from the centre\n\t\tanimate: true,\n\t\tlineArc: false,\n\t\tposition: 'chartArea',\n\n\t\tangleLines: {\n\t\t\tdisplay: true,\n\t\t\tcolor: 'rgba(0, 0, 0, 0.1)',\n\t\t\tlineWidth: 1\n\t\t},\n\n\t\t// label settings\n\t\tticks: {\n\t\t\t// Boolean - Show a backdrop to the scale label\n\t\t\tshowLabelBackdrop: true,\n\n\t\t\t// String - The colour of the label backdrop\n\t\t\tbackdropColor: 'rgba(255,255,255,0.75)',\n\n\t\t\t// Number - The backdrop padding above & below the label in pixels\n\t\t\tbackdropPaddingY: 2,\n\n\t\t\t// Number - The backdrop padding to the side of the label in pixels\n\t\t\tbackdropPaddingX: 2\n\t\t},\n\n\t\tpointLabels: {\n\t\t\t// Number - Point label font size in pixels\n\t\t\tfontSize: 10,\n\n\t\t\t// Function - Used to convert point labels\n\t\t\tcallback: function(label) {\n\t\t\t\treturn label;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar LinearRadialScale = Chart.LinearScaleBase.extend({\n\t\tgetValueCount: function() {\n\t\t\treturn this.chart.data.labels.length;\n\t\t},\n\t\tsetDimensions: function() {\n\t\t\tvar me = this;\n\t\t\tvar opts = me.options;\n\t\t\tvar tickOpts = opts.ticks;\n\t\t\t// Set the unconstrained dimension before label rotation\n\t\t\tme.width = me.maxWidth;\n\t\t\tme.height = me.maxHeight;\n\t\t\tme.xCenter = Math.round(me.width / 2);\n\t\t\tme.yCenter = Math.round(me.height / 2);\n\n\t\t\tvar minSize = helpers.min([me.height, me.width]);\n\t\t\tvar tickFontSize = helpers.getValueOrDefault(tickOpts.fontSize, globalDefaults.defaultFontSize);\n\t\t\tme.drawingArea = opts.display ? (minSize / 2) - (tickFontSize / 2 + tickOpts.backdropPaddingY) : (minSize / 2);\n\t\t},\n\t\tdetermineDataLimits: function() {\n\t\t\tvar me = this;\n\t\t\tvar chart = me.chart;\n\t\t\tme.min = null;\n\t\t\tme.max = null;\n\n\n\t\t\thelpers.each(chart.data.datasets, function(dataset, datasetIndex) {\n\t\t\t\tif (chart.isDatasetVisible(datasetIndex)) {\n\t\t\t\t\tvar meta = chart.getDatasetMeta(datasetIndex);\n\n\t\t\t\t\thelpers.each(dataset.data, function(rawValue, index) {\n\t\t\t\t\t\tvar value = +me.getRightValue(rawValue);\n\t\t\t\t\t\tif (isNaN(value) || meta.data[index].hidden) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (me.min === null) {\n\t\t\t\t\t\t\tme.min = value;\n\t\t\t\t\t\t} else if (value < me.min) {\n\t\t\t\t\t\t\tme.min = value;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (me.max === null) {\n\t\t\t\t\t\t\tme.max = value;\n\t\t\t\t\t\t} else if (value > me.max) {\n\t\t\t\t\t\t\tme.max = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// Common base implementation to handle ticks.min, ticks.max, ticks.beginAtZero\n\t\t\tme.handleTickRangeOptions();\n\t\t},\n\t\tgetTickLimit: function() {\n\t\t\tvar tickOpts = this.options.ticks;\n\t\t\tvar tickFontSize = helpers.getValueOrDefault(tickOpts.fontSize, globalDefaults.defaultFontSize);\n\t\t\treturn Math.min(tickOpts.maxTicksLimit ? tickOpts.maxTicksLimit : 11, Math.ceil(this.drawingArea / (1.5 * tickFontSize)));\n\t\t},\n\t\tconvertTicksToLabels: function() {\n\t\t\tvar me = this;\n\t\t\tChart.LinearScaleBase.prototype.convertTicksToLabels.call(me);\n\n\t\t\t// Point labels\n\t\t\tme.pointLabels = me.chart.data.labels.map(me.options.pointLabels.callback, me);\n\t\t},\n\t\tgetLabelForIndex: function(index, datasetIndex) {\n\t\t\treturn +this.getRightValue(this.chart.data.datasets[datasetIndex].data[index]);\n\t\t},\n\t\tfit: function() {\n\t\t\t/*\n\t\t\t * Right, this is really confusing and there is a lot of maths going on here\n\t\t\t * The gist of the problem is here: https://gist.github.com/nnnick/696cc9c55f4b0beb8fe9\n\t\t\t *\n\t\t\t * Reaction: https://dl.dropboxusercontent.com/u/34601363/toomuchscience.gif\n\t\t\t *\n\t\t\t * Solution:\n\t\t\t *\n\t\t\t * We assume the radius of the polygon is half the size of the canvas at first\n\t\t\t * at each index we check if the text overlaps.\n\t\t\t *\n\t\t\t * Where it does, we store that angle and that index.\n\t\t\t *\n\t\t\t * After finding the largest index and angle we calculate how much we need to remove\n\t\t\t * from the shape radius to move the point inwards by that x.\n\t\t\t *\n\t\t\t * We average the left and right distances to get the maximum shape radius that can fit in the box\n\t\t\t * along with labels.\n\t\t\t *\n\t\t\t * Once we have that, we can find the centre point for the chart, by taking the x text protrusion\n\t\t\t * on each side, removing that from the size, halving it and adding the left x protrusion width.\n\t\t\t *\n\t\t\t * This will mean we have a shape fitted to the canvas, as large as it can be with the labels\n\t\t\t * and position it in the most space efficient manner\n\t\t\t *\n\t\t\t * https://dl.dropboxusercontent.com/u/34601363/yeahscience.gif\n\t\t\t */\n\n\t\t\tvar pointLabels = this.options.pointLabels;\n\t\t\tvar pointLabelFontSize = helpers.getValueOrDefault(pointLabels.fontSize, globalDefaults.defaultFontSize);\n\t\t\tvar pointLabeFontStyle = helpers.getValueOrDefault(pointLabels.fontStyle, globalDefaults.defaultFontStyle);\n\t\t\tvar pointLabeFontFamily = helpers.getValueOrDefault(pointLabels.fontFamily, globalDefaults.defaultFontFamily);\n\t\t\tvar pointLabeFont = helpers.fontString(pointLabelFontSize, pointLabeFontStyle, pointLabeFontFamily);\n\n\t\t\t// Get maximum radius of the polygon. Either half the height (minus the text width) or half the width.\n\t\t\t// Use this to calculate the offset + change. - Make sure L/R protrusion is at least 0 to stop issues with centre points\n\t\t\tvar largestPossibleRadius = helpers.min([(this.height / 2 - pointLabelFontSize - 5), this.width / 2]),\n\t\t\t\tpointPosition,\n\t\t\t\ti,\n\t\t\t\ttextWidth,\n\t\t\t\thalfTextWidth,\n\t\t\t\tfurthestRight = this.width,\n\t\t\t\tfurthestRightIndex,\n\t\t\t\tfurthestRightAngle,\n\t\t\t\tfurthestLeft = 0,\n\t\t\t\tfurthestLeftIndex,\n\t\t\t\tfurthestLeftAngle,\n\t\t\t\txProtrusionLeft,\n\t\t\t\txProtrusionRight,\n\t\t\t\tradiusReductionRight,\n\t\t\t\tradiusReductionLeft;\n\t\t\tthis.ctx.font = pointLabeFont;\n\n\t\t\tfor (i = 0; i < this.getValueCount(); i++) {\n\t\t\t\t// 5px to space the text slightly out - similar to what we do in the draw function.\n\t\t\t\tpointPosition = this.getPointPosition(i, largestPossibleRadius);\n\t\t\t\ttextWidth = this.ctx.measureText(this.pointLabels[i] ? this.pointLabels[i] : '').width + 5;\n\n\t\t\t\t// Add quarter circle to make degree 0 mean top of circle\n\t\t\t\tvar angleRadians = this.getIndexAngle(i) + (Math.PI / 2);\n\t\t\t\tvar angle = (angleRadians * 360 / (2 * Math.PI)) % 360;\n\n\t\t\t\tif (angle === 0 || angle === 180) {\n\t\t\t\t\t// At angle 0 and 180, we're at exactly the top/bottom\n\t\t\t\t\t// of the radar chart, so text will be aligned centrally, so we'll half it and compare\n\t\t\t\t\t// w/left and right text sizes\n\t\t\t\t\thalfTextWidth = textWidth / 2;\n\t\t\t\t\tif (pointPosition.x + halfTextWidth > furthestRight) {\n\t\t\t\t\t\tfurthestRight = pointPosition.x + halfTextWidth;\n\t\t\t\t\t\tfurthestRightIndex = i;\n\t\t\t\t\t}\n\t\t\t\t\tif (pointPosition.x - halfTextWidth < furthestLeft) {\n\t\t\t\t\t\tfurthestLeft = pointPosition.x - halfTextWidth;\n\t\t\t\t\t\tfurthestLeftIndex = i;\n\t\t\t\t\t}\n\t\t\t\t} else if (angle < 180) {\n\t\t\t\t\t// Less than half the values means we'll left align the text\n\t\t\t\t\tif (pointPosition.x + textWidth > furthestRight) {\n\t\t\t\t\t\tfurthestRight = pointPosition.x + textWidth;\n\t\t\t\t\t\tfurthestRightIndex = i;\n\t\t\t\t\t}\n\t\t\t\t// More than half the values means we'll right align the text\n\t\t\t\t} else if (pointPosition.x - textWidth < furthestLeft) {\n\t\t\t\t\tfurthestLeft = pointPosition.x - textWidth;\n\t\t\t\t\tfurthestLeftIndex = i;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\txProtrusionLeft = furthestLeft;\n\t\t\txProtrusionRight = Math.ceil(furthestRight - this.width);\n\n\t\t\tfurthestRightAngle = this.getIndexAngle(furthestRightIndex);\n\t\t\tfurthestLeftAngle = this.getIndexAngle(furthestLeftIndex);\n\n\t\t\tradiusReductionRight = xProtrusionRight / Math.sin(furthestRightAngle + Math.PI / 2);\n\t\t\tradiusReductionLeft = xProtrusionLeft / Math.sin(furthestLeftAngle + Math.PI / 2);\n\n\t\t\t// Ensure we actually need to reduce the size of the chart\n\t\t\tradiusReductionRight = (helpers.isNumber(radiusReductionRight)) ? radiusReductionRight : 0;\n\t\t\tradiusReductionLeft = (helpers.isNumber(radiusReductionLeft)) ? radiusReductionLeft : 0;\n\n\t\t\tthis.drawingArea = Math.round(largestPossibleRadius - (radiusReductionLeft + radiusReductionRight) / 2);\n\t\t\tthis.setCenterPoint(radiusReductionLeft, radiusReductionRight);\n\t\t},\n\t\tsetCenterPoint: function(leftMovement, rightMovement) {\n\t\t\tvar me = this;\n\t\t\tvar maxRight = me.width - rightMovement - me.drawingArea,\n\t\t\t\tmaxLeft = leftMovement + me.drawingArea;\n\n\t\t\tme.xCenter = Math.round(((maxLeft + maxRight) / 2) + me.left);\n\t\t\t// Always vertically in the centre as the text height doesn't change\n\t\t\tme.yCenter = Math.round((me.height / 2) + me.top);\n\t\t},\n\n\t\tgetIndexAngle: function(index) {\n\t\t\tvar angleMultiplier = (Math.PI * 2) / this.getValueCount();\n\t\t\tvar startAngle = this.chart.options && this.chart.options.startAngle ?\n\t\t\t\tthis.chart.options.startAngle :\n\t\t\t\t0;\n\n\t\t\tvar startAngleRadians = startAngle * Math.PI * 2 / 360;\n\n\t\t\t// Start from the top instead of right, so remove a quarter of the circle\n\t\t\treturn index * angleMultiplier - (Math.PI / 2) + startAngleRadians;\n\t\t},\n\t\tgetDistanceFromCenterForValue: function(value) {\n\t\t\tvar me = this;\n\n\t\t\tif (value === null) {\n\t\t\t\treturn 0; // null always in center\n\t\t\t}\n\n\t\t\t// Take into account half font size + the yPadding of the top value\n\t\t\tvar scalingFactor = me.drawingArea / (me.max - me.min);\n\t\t\tif (me.options.reverse) {\n\t\t\t\treturn (me.max - value) * scalingFactor;\n\t\t\t}\n\t\t\treturn (value - me.min) * scalingFactor;\n\t\t},\n\t\tgetPointPosition: function(index, distanceFromCenter) {\n\t\t\tvar me = this;\n\t\t\tvar thisAngle = me.getIndexAngle(index);\n\t\t\treturn {\n\t\t\t\tx: Math.round(Math.cos(thisAngle) * distanceFromCenter) + me.xCenter,\n\t\t\t\ty: Math.round(Math.sin(thisAngle) * distanceFromCenter) + me.yCenter\n\t\t\t};\n\t\t},\n\t\tgetPointPositionForValue: function(index, value) {\n\t\t\treturn this.getPointPosition(index, this.getDistanceFromCenterForValue(value));\n\t\t},\n\n\t\tgetBasePosition: function() {\n\t\t\tvar me = this;\n\t\t\tvar min = me.min;\n\t\t\tvar max = me.max;\n\n\t\t\treturn me.getPointPositionForValue(0,\n\t\t\t\tme.beginAtZero? 0:\n\t\t\t\tmin < 0 && max < 0? max :\n\t\t\t\tmin > 0 && max > 0? min :\n\t\t\t\t0);\n\t\t},\n\n\t\tdraw: function() {\n\t\t\tvar me = this;\n\t\t\tvar opts = me.options;\n\t\t\tvar gridLineOpts = opts.gridLines;\n\t\t\tvar tickOpts = opts.ticks;\n\t\t\tvar angleLineOpts = opts.angleLines;\n\t\t\tvar pointLabelOpts = opts.pointLabels;\n\t\t\tvar getValueOrDefault = helpers.getValueOrDefault;\n\n\t\t\tif (opts.display) {\n\t\t\t\tvar ctx = me.ctx;\n\n\t\t\t\t// Tick Font\n\t\t\t\tvar tickFontSize = getValueOrDefault(tickOpts.fontSize, globalDefaults.defaultFontSize);\n\t\t\t\tvar tickFontStyle = getValueOrDefault(tickOpts.fontStyle, globalDefaults.defaultFontStyle);\n\t\t\t\tvar tickFontFamily = getValueOrDefault(tickOpts.fontFamily, globalDefaults.defaultFontFamily);\n\t\t\t\tvar tickLabelFont = helpers.fontString(tickFontSize, tickFontStyle, tickFontFamily);\n\n\t\t\t\thelpers.each(me.ticks, function(label, index) {\n\t\t\t\t\t// Don't draw a centre value (if it is minimum)\n\t\t\t\t\tif (index > 0 || opts.reverse) {\n\t\t\t\t\t\tvar yCenterOffset = me.getDistanceFromCenterForValue(me.ticksAsNumbers[index]);\n\t\t\t\t\t\tvar yHeight = me.yCenter - yCenterOffset;\n\n\t\t\t\t\t\t// Draw circular lines around the scale\n\t\t\t\t\t\tif (gridLineOpts.display && index !== 0) {\n\t\t\t\t\t\t\tctx.strokeStyle = helpers.getValueAtIndexOrDefault(gridLineOpts.color, index - 1);\n\t\t\t\t\t\t\tctx.lineWidth = helpers.getValueAtIndexOrDefault(gridLineOpts.lineWidth, index - 1);\n\n\t\t\t\t\t\t\tif (opts.lineArc) {\n\t\t\t\t\t\t\t\t// Draw circular arcs between the points\n\t\t\t\t\t\t\t\tctx.beginPath();\n\t\t\t\t\t\t\t\tctx.arc(me.xCenter, me.yCenter, yCenterOffset, 0, Math.PI * 2);\n\t\t\t\t\t\t\t\tctx.closePath();\n\t\t\t\t\t\t\t\tctx.stroke();\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t// Draw straight lines connecting each index\n\t\t\t\t\t\t\t\tctx.beginPath();\n\t\t\t\t\t\t\t\tfor (var i = 0; i < me.getValueCount(); i++) {\n\t\t\t\t\t\t\t\t\tvar pointPosition = me.getPointPosition(i, yCenterOffset);\n\t\t\t\t\t\t\t\t\tif (i === 0) {\n\t\t\t\t\t\t\t\t\t\tctx.moveTo(pointPosition.x, pointPosition.y);\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tctx.lineTo(pointPosition.x, pointPosition.y);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tctx.closePath();\n\t\t\t\t\t\t\t\tctx.stroke();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (tickOpts.display) {\n\t\t\t\t\t\t\tvar tickFontColor = getValueOrDefault(tickOpts.fontColor, globalDefaults.defaultFontColor);\n\t\t\t\t\t\t\tctx.font = tickLabelFont;\n\n\t\t\t\t\t\t\tif (tickOpts.showLabelBackdrop) {\n\t\t\t\t\t\t\t\tvar labelWidth = ctx.measureText(label).width;\n\t\t\t\t\t\t\t\tctx.fillStyle = tickOpts.backdropColor;\n\t\t\t\t\t\t\t\tctx.fillRect(\n\t\t\t\t\t\t\t\t\tme.xCenter - labelWidth / 2 - tickOpts.backdropPaddingX,\n\t\t\t\t\t\t\t\t\tyHeight - tickFontSize / 2 - tickOpts.backdropPaddingY,\n\t\t\t\t\t\t\t\t\tlabelWidth + tickOpts.backdropPaddingX * 2,\n\t\t\t\t\t\t\t\t\ttickFontSize + tickOpts.backdropPaddingY * 2\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tctx.textAlign = 'center';\n\t\t\t\t\t\t\tctx.textBaseline = 'middle';\n\t\t\t\t\t\t\tctx.fillStyle = tickFontColor;\n\t\t\t\t\t\t\tctx.fillText(label, me.xCenter, yHeight);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tif (!opts.lineArc) {\n\t\t\t\t\tctx.lineWidth = angleLineOpts.lineWidth;\n\t\t\t\t\tctx.strokeStyle = angleLineOpts.color;\n\n\t\t\t\t\tvar outerDistance = me.getDistanceFromCenterForValue(opts.reverse ? me.min : me.max);\n\n\t\t\t\t\t// Point Label Font\n\t\t\t\t\tvar pointLabelFontSize = getValueOrDefault(pointLabelOpts.fontSize, globalDefaults.defaultFontSize);\n\t\t\t\t\tvar pointLabeFontStyle = getValueOrDefault(pointLabelOpts.fontStyle, globalDefaults.defaultFontStyle);\n\t\t\t\t\tvar pointLabeFontFamily = getValueOrDefault(pointLabelOpts.fontFamily, globalDefaults.defaultFontFamily);\n\t\t\t\t\tvar pointLabeFont = helpers.fontString(pointLabelFontSize, pointLabeFontStyle, pointLabeFontFamily);\n\n\t\t\t\t\tfor (var i = me.getValueCount() - 1; i >= 0; i--) {\n\t\t\t\t\t\tif (angleLineOpts.display) {\n\t\t\t\t\t\t\tvar outerPosition = me.getPointPosition(i, outerDistance);\n\t\t\t\t\t\t\tctx.beginPath();\n\t\t\t\t\t\t\tctx.moveTo(me.xCenter, me.yCenter);\n\t\t\t\t\t\t\tctx.lineTo(outerPosition.x, outerPosition.y);\n\t\t\t\t\t\t\tctx.stroke();\n\t\t\t\t\t\t\tctx.closePath();\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Extra 3px out for some label spacing\n\t\t\t\t\t\tvar pointLabelPosition = me.getPointPosition(i, outerDistance + 5);\n\n\t\t\t\t\t\t// Keep this in loop since we may support array properties here\n\t\t\t\t\t\tvar pointLabelFontColor = getValueOrDefault(pointLabelOpts.fontColor, globalDefaults.defaultFontColor);\n\t\t\t\t\t\tctx.font = pointLabeFont;\n\t\t\t\t\t\tctx.fillStyle = pointLabelFontColor;\n\n\t\t\t\t\t\tvar pointLabels = me.pointLabels;\n\n\t\t\t\t\t\t// Add quarter circle to make degree 0 mean top of circle\n\t\t\t\t\t\tvar angleRadians = this.getIndexAngle(i) + (Math.PI / 2);\n\t\t\t\t\t\tvar angle = (angleRadians * 360 / (2 * Math.PI)) % 360;\n\n\t\t\t\t\t\tif (angle === 0 || angle === 180) {\n\t\t\t\t\t\t\tctx.textAlign = 'center';\n\t\t\t\t\t\t} else if (angle < 180) {\n\t\t\t\t\t\t\tctx.textAlign = 'left';\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tctx.textAlign = 'right';\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Set the correct text baseline based on outer positioning\n\t\t\t\t\t\tif (angle === 90 || angle === 270) {\n\t\t\t\t\t\t\tctx.textBaseline = 'middle';\n\t\t\t\t\t\t} else if (angle > 270 || angle < 90) {\n\t\t\t\t\t\t\tctx.textBaseline = 'bottom';\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tctx.textBaseline = 'top';\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tctx.fillText(pointLabels[i] ? pointLabels[i] : '', pointLabelPosition.x, pointLabelPosition.y);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\tChart.scaleService.registerScaleType('radialLinear', LinearRadialScale, defaultConfig);\n\n};\n","/* global window: false */\n'use strict';\n\nvar moment = require('moment');\nmoment = typeof(moment) === 'function' ? moment : window.moment;\n\nmodule.exports = function(Chart) {\n\n\tvar helpers = Chart.helpers;\n\tvar time = {\n\t\tunits: [{\n\t\t\tname: 'millisecond',\n\t\t\tsteps: [1, 2, 5, 10, 20, 50, 100, 250, 500]\n\t\t}, {\n\t\t\tname: 'second',\n\t\t\tsteps: [1, 2, 5, 10, 30]\n\t\t}, {\n\t\t\tname: 'minute',\n\t\t\tsteps: [1, 2, 5, 10, 30]\n\t\t}, {\n\t\t\tname: 'hour',\n\t\t\tsteps: [1, 2, 3, 6, 12]\n\t\t}, {\n\t\t\tname: 'day',\n\t\t\tsteps: [1, 2, 5]\n\t\t}, {\n\t\t\tname: 'week',\n\t\t\tmaxStep: 4\n\t\t}, {\n\t\t\tname: 'month',\n\t\t\tmaxStep: 3\n\t\t}, {\n\t\t\tname: 'quarter',\n\t\t\tmaxStep: 4\n\t\t}, {\n\t\t\tname: 'year',\n\t\t\tmaxStep: false\n\t\t}]\n\t};\n\n\tvar defaultConfig = {\n\t\tposition: 'bottom',\n\n\t\ttime: {\n\t\t\tparser: false, // false == a pattern string from http://momentjs.com/docs/#/parsing/string-format/ or a custom callback that converts its argument to a moment\n\t\t\tformat: false, // DEPRECATED false == date objects, moment object, callback or a pattern string from http://momentjs.com/docs/#/parsing/string-format/\n\t\t\tunit: false, // false == automatic or override with week, month, year, etc.\n\t\t\tround: false, // none, or override with week, month, year, etc.\n\t\t\tdisplayFormat: false, // DEPRECATED\n\t\t\tisoWeekday: false, // override week start day - see http://momentjs.com/docs/#/get-set/iso-weekday/\n\t\t\tminUnit: 'millisecond',\n\n\t\t\t// defaults to unit's corresponding unitFormat below or override using pattern string from http://momentjs.com/docs/#/displaying/format/\n\t\t\tdisplayFormats: {\n\t\t\t\tmillisecond: 'h:mm:ss.SSS a', // 11:20:01.123 AM,\n\t\t\t\tsecond: 'h:mm:ss a', // 11:20:01 AM\n\t\t\t\tminute: 'h:mm:ss a', // 11:20:01 AM\n\t\t\t\thour: 'MMM D, hA', // Sept 4, 5PM\n\t\t\t\tday: 'll', // Sep 4 2015\n\t\t\t\tweek: 'll', // Week 46, or maybe \"[W]WW - YYYY\" ?\n\t\t\t\tmonth: 'MMM YYYY', // Sept 2015\n\t\t\t\tquarter: '[Q]Q - YYYY', // Q3\n\t\t\t\tyear: 'YYYY' // 2015\n\t\t\t}\n\t\t},\n\t\tticks: {\n\t\t\tautoSkip: false\n\t\t}\n\t};\n\n\tvar TimeScale = Chart.Scale.extend({\n\t\tinitialize: function() {\n\t\t\tif (!moment) {\n\t\t\t\tthrow new Error('Chart.js - Moment.js could not be found! You must include it before Chart.js to use the time scale. Download at https://momentjs.com');\n\t\t\t}\n\n\t\t\tChart.Scale.prototype.initialize.call(this);\n\t\t},\n\t\tgetLabelMoment: function(datasetIndex, index) {\n\t\t\tif (datasetIndex === null || index === null) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tif (typeof this.labelMoments[datasetIndex] !== 'undefined') {\n\t\t\t\treturn this.labelMoments[datasetIndex][index];\n\t\t\t}\n\n\t\t\treturn null;\n\t\t},\n\t\tgetLabelDiff: function(datasetIndex, index) {\n\t\t\tvar me = this;\n\t\t\tif (datasetIndex === null || index === null) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tif (me.labelDiffs === undefined) {\n\t\t\t\tme.buildLabelDiffs();\n\t\t\t}\n\n\t\t\tif (typeof me.labelDiffs[datasetIndex] !== 'undefined') {\n\t\t\t\treturn me.labelDiffs[datasetIndex][index];\n\t\t\t}\n\n\t\t\treturn null;\n\t\t},\n\t\tgetMomentStartOf: function(tick) {\n\t\t\tvar me = this;\n\t\t\tif (me.options.time.unit === 'week' && me.options.time.isoWeekday !== false) {\n\t\t\t\treturn tick.clone().startOf('isoWeek').isoWeekday(me.options.time.isoWeekday);\n\t\t\t}\n\t\t\treturn tick.clone().startOf(me.tickUnit);\n\t\t},\n\t\tdetermineDataLimits: function() {\n\t\t\tvar me = this;\n\t\t\tme.labelMoments = [];\n\n\t\t\t// Only parse these once. If the dataset does not have data as x,y pairs, we will use\n\t\t\t// these\n\t\t\tvar scaleLabelMoments = [];\n\t\t\tif (me.chart.data.labels && me.chart.data.labels.length > 0) {\n\t\t\t\thelpers.each(me.chart.data.labels, function(label) {\n\t\t\t\t\tvar labelMoment = me.parseTime(label);\n\n\t\t\t\t\tif (labelMoment.isValid()) {\n\t\t\t\t\t\tif (me.options.time.round) {\n\t\t\t\t\t\t\tlabelMoment.startOf(me.options.time.round);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tscaleLabelMoments.push(labelMoment);\n\t\t\t\t\t}\n\t\t\t\t}, me);\n\n\t\t\t\tme.firstTick = moment.min.call(me, scaleLabelMoments);\n\t\t\t\tme.lastTick = moment.max.call(me, scaleLabelMoments);\n\t\t\t} else {\n\t\t\t\tme.firstTick = null;\n\t\t\t\tme.lastTick = null;\n\t\t\t}\n\n\t\t\thelpers.each(me.chart.data.datasets, function(dataset, datasetIndex) {\n\t\t\t\tvar momentsForDataset = [];\n\t\t\t\tvar datasetVisible = me.chart.isDatasetVisible(datasetIndex);\n\n\t\t\t\tif (typeof dataset.data[0] === 'object' && dataset.data[0] !== null) {\n\t\t\t\t\thelpers.each(dataset.data, function(value) {\n\t\t\t\t\t\tvar labelMoment = me.parseTime(me.getRightValue(value));\n\n\t\t\t\t\t\tif (labelMoment.isValid()) {\n\t\t\t\t\t\t\tif (me.options.time.round) {\n\t\t\t\t\t\t\t\tlabelMoment.startOf(me.options.time.round);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tmomentsForDataset.push(labelMoment);\n\n\t\t\t\t\t\t\tif (datasetVisible) {\n\t\t\t\t\t\t\t\t// May have gone outside the scale ranges, make sure we keep the first and last ticks updated\n\t\t\t\t\t\t\t\tme.firstTick = me.firstTick !== null ? moment.min(me.firstTick, labelMoment) : labelMoment;\n\t\t\t\t\t\t\t\tme.lastTick = me.lastTick !== null ? moment.max(me.lastTick, labelMoment) : labelMoment;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}, me);\n\t\t\t\t} else {\n\t\t\t\t\t// We have no labels. Use the ones from the scale\n\t\t\t\t\tmomentsForDataset = scaleLabelMoments;\n\t\t\t\t}\n\n\t\t\t\tme.labelMoments.push(momentsForDataset);\n\t\t\t}, me);\n\n\t\t\t// Set these after we've done all the data\n\t\t\tif (me.options.time.min) {\n\t\t\t\tme.firstTick = me.parseTime(me.options.time.min);\n\t\t\t}\n\n\t\t\tif (me.options.time.max) {\n\t\t\t\tme.lastTick = me.parseTime(me.options.time.max);\n\t\t\t}\n\n\t\t\t// We will modify these, so clone for later\n\t\t\tme.firstTick = (me.firstTick || moment()).clone();\n\t\t\tme.lastTick = (me.lastTick || moment()).clone();\n\t\t},\n\t\tbuildLabelDiffs: function() {\n\t\t\tvar me = this;\n\t\t\tme.labelDiffs = [];\n\t\t\tvar scaleLabelDiffs = [];\n\t\t\t// Parse common labels once\n\t\t\tif (me.chart.data.labels && me.chart.data.labels.length > 0) {\n\t\t\t\thelpers.each(me.chart.data.labels, function(label) {\n\t\t\t\t\tvar labelMoment = me.parseTime(label);\n\n\t\t\t\t\tif (labelMoment.isValid()) {\n\t\t\t\t\t\tif (me.options.time.round) {\n\t\t\t\t\t\t\tlabelMoment.startOf(me.options.time.round);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tscaleLabelDiffs.push(labelMoment.diff(me.firstTick, me.tickUnit, true));\n\t\t\t\t\t}\n\t\t\t\t}, me);\n\t\t\t}\n\n\t\t\thelpers.each(me.chart.data.datasets, function(dataset) {\n\t\t\t\tvar diffsForDataset = [];\n\n\t\t\t\tif (typeof dataset.data[0] === 'object' && dataset.data[0] !== null) {\n\t\t\t\t\thelpers.each(dataset.data, function(value) {\n\t\t\t\t\t\tvar labelMoment = me.parseTime(me.getRightValue(value));\n\n\t\t\t\t\t\tif (labelMoment.isValid()) {\n\t\t\t\t\t\t\tif (me.options.time.round) {\n\t\t\t\t\t\t\t\tlabelMoment.startOf(me.options.time.round);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdiffsForDataset.push(labelMoment.diff(me.firstTick, me.tickUnit, true));\n\t\t\t\t\t\t}\n\t\t\t\t\t}, me);\n\t\t\t\t} else {\n\t\t\t\t\t// We have no labels. Use common ones\n\t\t\t\t\tdiffsForDataset = scaleLabelDiffs;\n\t\t\t\t}\n\n\t\t\t\tme.labelDiffs.push(diffsForDataset);\n\t\t\t}, me);\n\t\t},\n\t\tbuildTicks: function() {\n\t\t\tvar me = this;\n\n\t\t\tme.ctx.save();\n\t\t\tvar tickFontSize = helpers.getValueOrDefault(me.options.ticks.fontSize, Chart.defaults.global.defaultFontSize);\n\t\t\tvar tickFontStyle = helpers.getValueOrDefault(me.options.ticks.fontStyle, Chart.defaults.global.defaultFontStyle);\n\t\t\tvar tickFontFamily = helpers.getValueOrDefault(me.options.ticks.fontFamily, Chart.defaults.global.defaultFontFamily);\n\t\t\tvar tickLabelFont = helpers.fontString(tickFontSize, tickFontStyle, tickFontFamily);\n\t\t\tme.ctx.font = tickLabelFont;\n\n\t\t\tme.ticks = [];\n\t\t\tme.unitScale = 1; // How much we scale the unit by, ie 2 means 2x unit per step\n\t\t\tme.scaleSizeInUnits = 0; // How large the scale is in the base unit (seconds, minutes, etc)\n\n\t\t\t// Set unit override if applicable\n\t\t\tif (me.options.time.unit) {\n\t\t\t\tme.tickUnit = me.options.time.unit || 'day';\n\t\t\t\tme.displayFormat = me.options.time.displayFormats[me.tickUnit];\n\t\t\t\tme.scaleSizeInUnits = me.lastTick.diff(me.firstTick, me.tickUnit, true);\n\t\t\t\tme.unitScale = helpers.getValueOrDefault(me.options.time.unitStepSize, 1);\n\t\t\t} else {\n\t\t\t\t// Determine the smallest needed unit of the time\n\t\t\t\tvar innerWidth = me.isHorizontal() ? me.width - (me.paddingLeft + me.paddingRight) : me.height - (me.paddingTop + me.paddingBottom);\n\n\t\t\t\t// Crude approximation of what the label length might be\n\t\t\t\tvar tempFirstLabel = me.tickFormatFunction(me.firstTick, 0, []);\n\t\t\t\tvar tickLabelWidth = me.ctx.measureText(tempFirstLabel).width;\n\t\t\t\tvar cosRotation = Math.cos(helpers.toRadians(me.options.ticks.maxRotation));\n\t\t\t\tvar sinRotation = Math.sin(helpers.toRadians(me.options.ticks.maxRotation));\n\t\t\t\ttickLabelWidth = (tickLabelWidth * cosRotation) + (tickFontSize * sinRotation);\n\t\t\t\tvar labelCapacity = innerWidth / (tickLabelWidth);\n\n\t\t\t\t// Start as small as possible\n\t\t\t\tme.tickUnit = me.options.time.minUnit;\n\t\t\t\tme.scaleSizeInUnits = me.lastTick.diff(me.firstTick, me.tickUnit, true);\n\t\t\t\tme.displayFormat = me.options.time.displayFormats[me.tickUnit];\n\n\t\t\t\tvar unitDefinitionIndex = 0;\n\t\t\t\tvar unitDefinition = time.units[unitDefinitionIndex];\n\n\t\t\t\t// While we aren't ideal and we don't have units left\n\t\t\t\twhile (unitDefinitionIndex < time.units.length) {\n\t\t\t\t\t// Can we scale this unit. If `false` we can scale infinitely\n\t\t\t\t\tme.unitScale = 1;\n\n\t\t\t\t\tif (helpers.isArray(unitDefinition.steps) && Math.ceil(me.scaleSizeInUnits / labelCapacity) < helpers.max(unitDefinition.steps)) {\n\t\t\t\t\t\t// Use one of the prefedined steps\n\t\t\t\t\t\tfor (var idx = 0; idx < unitDefinition.steps.length; ++idx) {\n\t\t\t\t\t\t\tif (unitDefinition.steps[idx] >= Math.ceil(me.scaleSizeInUnits / labelCapacity)) {\n\t\t\t\t\t\t\t\tme.unitScale = helpers.getValueOrDefault(me.options.time.unitStepSize, unitDefinition.steps[idx]);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t} else if ((unitDefinition.maxStep === false) || (Math.ceil(me.scaleSizeInUnits / labelCapacity) < unitDefinition.maxStep)) {\n\t\t\t\t\t\t// We have a max step. Scale this unit\n\t\t\t\t\t\tme.unitScale = helpers.getValueOrDefault(me.options.time.unitStepSize, Math.ceil(me.scaleSizeInUnits / labelCapacity));\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Move to the next unit up\n\t\t\t\t\t\t++unitDefinitionIndex;\n\t\t\t\t\t\tunitDefinition = time.units[unitDefinitionIndex];\n\n\t\t\t\t\t\tme.tickUnit = unitDefinition.name;\n\t\t\t\t\t\tvar leadingUnitBuffer = me.firstTick.diff(me.getMomentStartOf(me.firstTick), me.tickUnit, true);\n\t\t\t\t\t\tvar trailingUnitBuffer = me.getMomentStartOf(me.lastTick.clone().add(1, me.tickUnit)).diff(me.lastTick, me.tickUnit, true);\n\t\t\t\t\t\tme.scaleSizeInUnits = me.lastTick.diff(me.firstTick, me.tickUnit, true) + leadingUnitBuffer + trailingUnitBuffer;\n\t\t\t\t\t\tme.displayFormat = me.options.time.displayFormats[unitDefinition.name];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvar roundedStart;\n\n\t\t\t// Only round the first tick if we have no hard minimum\n\t\t\tif (!me.options.time.min) {\n\t\t\t\tme.firstTick = me.getMomentStartOf(me.firstTick);\n\t\t\t\troundedStart = me.firstTick;\n\t\t\t} else {\n\t\t\t\troundedStart = me.getMomentStartOf(me.firstTick);\n\t\t\t}\n\n\t\t\t// Only round the last tick if we have no hard maximum\n\t\t\tif (!me.options.time.max) {\n\t\t\t\tvar roundedEnd = me.getMomentStartOf(me.lastTick);\n\t\t\t\tvar delta = roundedEnd.diff(me.lastTick, me.tickUnit, true);\n\t\t\t\tif (delta < 0) {\n\t\t\t\t\t// Do not use end of because we need me to be in the next time unit\n\t\t\t\t\tme.lastTick = me.getMomentStartOf(me.lastTick.add(1, me.tickUnit));\n\t\t\t\t} else if (delta >= 0) {\n\t\t\t\t\tme.lastTick = roundedEnd;\n\t\t\t\t}\n\n\t\t\t\tme.scaleSizeInUnits = me.lastTick.diff(me.firstTick, me.tickUnit, true);\n\t\t\t}\n\n\t\t\t// Tick displayFormat override\n\t\t\tif (me.options.time.displayFormat) {\n\t\t\t\tme.displayFormat = me.options.time.displayFormat;\n\t\t\t}\n\n\t\t\t// first tick. will have been rounded correctly if options.time.min is not specified\n\t\t\tme.ticks.push(me.firstTick.clone());\n\n\t\t\t// For every unit in between the first and last moment, create a moment and add it to the ticks tick\n\t\t\tfor (var i = 1; i <= me.scaleSizeInUnits; ++i) {\n\t\t\t\tvar newTick = roundedStart.clone().add(i, me.tickUnit);\n\n\t\t\t\t// Are we greater than the max time\n\t\t\t\tif (me.options.time.max && newTick.diff(me.lastTick, me.tickUnit, true) >= 0) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tif (i % me.unitScale === 0) {\n\t\t\t\t\tme.ticks.push(newTick);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Always show the right tick\n\t\t\tvar diff = me.ticks[me.ticks.length - 1].diff(me.lastTick, me.tickUnit);\n\t\t\tif (diff !== 0 || me.scaleSizeInUnits === 0) {\n\t\t\t\t// this is a weird case. If the <max> option is the same as the end option, we can't just diff the times because the tick was created from the roundedStart\n\t\t\t\t// but the last tick was not rounded.\n\t\t\t\tif (me.options.time.max) {\n\t\t\t\t\tme.ticks.push(me.lastTick.clone());\n\t\t\t\t\tme.scaleSizeInUnits = me.lastTick.diff(me.ticks[0], me.tickUnit, true);\n\t\t\t\t} else {\n\t\t\t\t\tme.ticks.push(me.lastTick.clone());\n\t\t\t\t\tme.scaleSizeInUnits = me.lastTick.diff(me.firstTick, me.tickUnit, true);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tme.ctx.restore();\n\n\t\t\t// Invalidate label diffs cache\n\t\t\tme.labelDiffs = undefined;\n\t\t},\n\t\t// Get tooltip label\n\t\tgetLabelForIndex: function(index, datasetIndex) {\n\t\t\tvar me = this;\n\t\t\tvar label = me.chart.data.labels && index < me.chart.data.labels.length ? me.chart.data.labels[index] : '';\n\n\t\t\tif (typeof me.chart.data.datasets[datasetIndex].data[0] === 'object') {\n\t\t\t\tlabel = me.getRightValue(me.chart.data.datasets[datasetIndex].data[index]);\n\t\t\t}\n\n\t\t\t// Format nicely\n\t\t\tif (me.options.time.tooltipFormat) {\n\t\t\t\tlabel = me.parseTime(label).format(me.options.time.tooltipFormat);\n\t\t\t}\n\n\t\t\treturn label;\n\t\t},\n\t\t// Function to format an individual tick mark\n\t\ttickFormatFunction: function(tick, index, ticks) {\n\t\t\tvar formattedTick = tick.format(this.displayFormat);\n\t\t\tvar tickOpts = this.options.ticks;\n\t\t\tvar callback = helpers.getValueOrDefault(tickOpts.callback, tickOpts.userCallback);\n\n\t\t\tif (callback) {\n\t\t\t\treturn callback(formattedTick, index, ticks);\n\t\t\t}\n\t\t\treturn formattedTick;\n\t\t},\n\t\tconvertTicksToLabels: function() {\n\t\t\tvar me = this;\n\t\t\tme.tickMoments = me.ticks;\n\t\t\tme.ticks = me.ticks.map(me.tickFormatFunction, me);\n\t\t},\n\t\tgetPixelForValue: function(value, index, datasetIndex) {\n\t\t\tvar me = this;\n\t\t\tvar offset = null;\n\t\t\tif (index !== undefined && datasetIndex !== undefined) {\n\t\t\t\toffset = me.getLabelDiff(datasetIndex, index);\n\t\t\t}\n\n\t\t\tif (offset === null) {\n\t\t\t\tif (!value || !value.isValid) {\n\t\t\t\t\t// not already a moment object\n\t\t\t\t\tvalue = me.parseTime(me.getRightValue(value));\n\t\t\t\t}\n\t\t\t\tif (value && value.isValid && value.isValid()) {\n\t\t\t\t\toffset = value.diff(me.firstTick, me.tickUnit, true);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (offset !== null) {\n\t\t\t\tvar decimal = offset !== 0 ? offset / me.scaleSizeInUnits : offset;\n\n\t\t\t\tif (me.isHorizontal()) {\n\t\t\t\t\tvar innerWidth = me.width - (me.paddingLeft + me.paddingRight);\n\t\t\t\t\tvar valueOffset = (innerWidth * decimal) + me.paddingLeft;\n\n\t\t\t\t\treturn me.left + Math.round(valueOffset);\n\t\t\t\t}\n\t\t\t\tvar innerHeight = me.height - (me.paddingTop + me.paddingBottom);\n\t\t\t\tvar heightOffset = (innerHeight * decimal) + me.paddingTop;\n\n\t\t\t\treturn me.top + Math.round(heightOffset);\n\t\t\t}\n\t\t},\n\t\tgetPixelForTick: function(index) {\n\t\t\treturn this.getPixelForValue(this.tickMoments[index], null, null);\n\t\t},\n\t\tgetValueForPixel: function(pixel) {\n\t\t\tvar me = this;\n\t\t\tvar innerDimension = me.isHorizontal() ? me.width - (me.paddingLeft + me.paddingRight) : me.height - (me.paddingTop + me.paddingBottom);\n\t\t\tvar offset = (pixel - (me.isHorizontal() ? me.left + me.paddingLeft : me.top + me.paddingTop)) / innerDimension;\n\t\t\toffset *= me.scaleSizeInUnits;\n\t\t\treturn me.firstTick.clone().add(moment.duration(offset, me.tickUnit).asSeconds(), 'seconds');\n\t\t},\n\t\tparseTime: function(label) {\n\t\t\tvar me = this;\n\t\t\tif (typeof me.options.time.parser === 'string') {\n\t\t\t\treturn moment(label, me.options.time.parser);\n\t\t\t}\n\t\t\tif (typeof me.options.time.parser === 'function') {\n\t\t\t\treturn me.options.time.parser(label);\n\t\t\t}\n\t\t\t// Date objects\n\t\t\tif (typeof label.getMonth === 'function' || typeof label === 'number') {\n\t\t\t\treturn moment(label);\n\t\t\t}\n\t\t\t// Moment support\n\t\t\tif (label.isValid && label.isValid()) {\n\t\t\t\treturn label;\n\t\t\t}\n\t\t\t// Custom parsing (return an instance of moment)\n\t\t\tif (typeof me.options.time.format !== 'string' && me.options.time.format.call) {\n\t\t\t\tconsole.warn('options.time.format is deprecated and replaced by options.time.parser. See http://nnnick.github.io/Chart.js/docs-v2/#scales-time-scale');\n\t\t\t\treturn me.options.time.format(label);\n\t\t\t}\n\t\t\t// Moment format parsing\n\t\t\treturn moment(label, me.options.time.format);\n\t\t}\n\t});\n\tChart.scaleService.registerScaleType('time', TimeScale, defaultConfig);\n\n};\n","/**\n * @license AngularJS v1.5.8\n * (c) 2010-2016 Google, Inc. http://angularjs.org\n * License: MIT\n */\n(function(window, angular) {'use strict';\n\n/**\n * @ngdoc module\n * @name ngCookies\n * @description\n *\n * # ngCookies\n *\n * The `ngCookies` module provides a convenient wrapper for reading and writing browser cookies.\n *\n *\n * <div doc-module-components=\"ngCookies\"></div>\n *\n * See {@link ngCookies.$cookies `$cookies`} for usage.\n */\n\n\nangular.module('ngCookies', ['ng']).\n  /**\n   * @ngdoc provider\n   * @name $cookiesProvider\n   * @description\n   * Use `$cookiesProvider` to change the default behavior of the {@link ngCookies.$cookies $cookies} service.\n   * */\n   provider('$cookies', [function $CookiesProvider() {\n    /**\n     * @ngdoc property\n     * @name $cookiesProvider#defaults\n     * @description\n     *\n     * Object containing default options to pass when setting cookies.\n     *\n     * The object may have following properties:\n     *\n     * - **path** - `{string}` - The cookie will be available only for this path and its\n     *   sub-paths. By default, this is the URL that appears in your `<base>` tag.\n     * - **domain** - `{string}` - The cookie will be available only for this domain and\n     *   its sub-domains. For security reasons the user agent will not accept the cookie\n     *   if the current domain is not a sub-domain of this domain or equal to it.\n     * - **expires** - `{string|Date}` - String of the form \"Wdy, DD Mon YYYY HH:MM:SS GMT\"\n     *   or a Date object indicating the exact date/time this cookie will expire.\n     * - **secure** - `{boolean}` - If `true`, then the cookie will only be available through a\n     *   secured connection.\n     *\n     * Note: By default, the address that appears in your `<base>` tag will be used as the path.\n     * This is important so that cookies will be visible for all routes when html5mode is enabled.\n     *\n     **/\n    var defaults = this.defaults = {};\n\n    function calcOptions(options) {\n      return options ? angular.extend({}, defaults, options) : defaults;\n    }\n\n    /**\n     * @ngdoc service\n     * @name $cookies\n     *\n     * @description\n     * Provides read/write access to browser's cookies.\n     *\n     * <div class=\"alert alert-info\">\n     * Up until Angular 1.3, `$cookies` exposed properties that represented the\n     * current browser cookie values. In version 1.4, this behavior has changed, and\n     * `$cookies` now provides a standard api of getters, setters etc.\n     * </div>\n     *\n     * Requires the {@link ngCookies `ngCookies`} module to be installed.\n     *\n     * @example\n     *\n     * ```js\n     * angular.module('cookiesExample', ['ngCookies'])\n     *   .controller('ExampleController', ['$cookies', function($cookies) {\n     *     // Retrieving a cookie\n     *     var favoriteCookie = $cookies.get('myFavorite');\n     *     // Setting a cookie\n     *     $cookies.put('myFavorite', 'oatmeal');\n     *   }]);\n     * ```\n     */\n    this.$get = ['$$cookieReader', '$$cookieWriter', function($$cookieReader, $$cookieWriter) {\n      return {\n        /**\n         * @ngdoc method\n         * @name $cookies#get\n         *\n         * @description\n         * Returns the value of given cookie key\n         *\n         * @param {string} key Id to use for lookup.\n         * @returns {string} Raw cookie value.\n         */\n        get: function(key) {\n          return $$cookieReader()[key];\n        },\n\n        /**\n         * @ngdoc method\n         * @name $cookies#getObject\n         *\n         * @description\n         * Returns the deserialized value of given cookie key\n         *\n         * @param {string} key Id to use for lookup.\n         * @returns {Object} Deserialized cookie value.\n         */\n        getObject: function(key) {\n          var value = this.get(key);\n          return value ? angular.fromJson(value) : value;\n        },\n\n        /**\n         * @ngdoc method\n         * @name $cookies#getAll\n         *\n         * @description\n         * Returns a key value object with all the cookies\n         *\n         * @returns {Object} All cookies\n         */\n        getAll: function() {\n          return $$cookieReader();\n        },\n\n        /**\n         * @ngdoc method\n         * @name $cookies#put\n         *\n         * @description\n         * Sets a value for given cookie key\n         *\n         * @param {string} key Id for the `value`.\n         * @param {string} value Raw value to be stored.\n         * @param {Object=} options Options object.\n         *    See {@link ngCookies.$cookiesProvider#defaults $cookiesProvider.defaults}\n         */\n        put: function(key, value, options) {\n          $$cookieWriter(key, value, calcOptions(options));\n        },\n\n        /**\n         * @ngdoc method\n         * @name $cookies#putObject\n         *\n         * @description\n         * Serializes and sets a value for given cookie key\n         *\n         * @param {string} key Id for the `value`.\n         * @param {Object} value Value to be stored.\n         * @param {Object=} options Options object.\n         *    See {@link ngCookies.$cookiesProvider#defaults $cookiesProvider.defaults}\n         */\n        putObject: function(key, value, options) {\n          this.put(key, angular.toJson(value), options);\n        },\n\n        /**\n         * @ngdoc method\n         * @name $cookies#remove\n         *\n         * @description\n         * Remove given cookie\n         *\n         * @param {string} key Id of the key-value pair to delete.\n         * @param {Object=} options Options object.\n         *    See {@link ngCookies.$cookiesProvider#defaults $cookiesProvider.defaults}\n         */\n        remove: function(key, options) {\n          $$cookieWriter(key, undefined, calcOptions(options));\n        }\n      };\n    }];\n  }]);\n\nangular.module('ngCookies').\n/**\n * @ngdoc service\n * @name $cookieStore\n * @deprecated\n * @requires $cookies\n *\n * @description\n * Provides a key-value (string-object) storage, that is backed by session cookies.\n * Objects put or retrieved from this storage are automatically serialized or\n * deserialized by angular's toJson/fromJson.\n *\n * Requires the {@link ngCookies `ngCookies`} module to be installed.\n *\n * <div class=\"alert alert-danger\">\n * **Note:** The $cookieStore service is **deprecated**.\n * Please use the {@link ngCookies.$cookies `$cookies`} service instead.\n * </div>\n *\n * @example\n *\n * ```js\n * angular.module('cookieStoreExample', ['ngCookies'])\n *   .controller('ExampleController', ['$cookieStore', function($cookieStore) {\n *     // Put cookie\n *     $cookieStore.put('myFavorite','oatmeal');\n *     // Get cookie\n *     var favoriteCookie = $cookieStore.get('myFavorite');\n *     // Removing a cookie\n *     $cookieStore.remove('myFavorite');\n *   }]);\n * ```\n */\n factory('$cookieStore', ['$cookies', function($cookies) {\n\n    return {\n      /**\n       * @ngdoc method\n       * @name $cookieStore#get\n       *\n       * @description\n       * Returns the value of given cookie key\n       *\n       * @param {string} key Id to use for lookup.\n       * @returns {Object} Deserialized cookie value, undefined if the cookie does not exist.\n       */\n      get: function(key) {\n        return $cookies.getObject(key);\n      },\n\n      /**\n       * @ngdoc method\n       * @name $cookieStore#put\n       *\n       * @description\n       * Sets a value for given cookie key\n       *\n       * @param {string} key Id for the `value`.\n       * @param {Object} value Value to be stored.\n       */\n      put: function(key, value) {\n        $cookies.putObject(key, value);\n      },\n\n      /**\n       * @ngdoc method\n       * @name $cookieStore#remove\n       *\n       * @description\n       * Remove given cookie\n       *\n       * @param {string} key Id of the key-value pair to delete.\n       */\n      remove: function(key) {\n        $cookies.remove(key);\n      }\n    };\n\n  }]);\n\n/**\n * @name $$cookieWriter\n * @requires $document\n *\n * @description\n * This is a private service for writing cookies\n *\n * @param {string} name Cookie name\n * @param {string=} value Cookie value (if undefined, cookie will be deleted)\n * @param {Object=} options Object with options that need to be stored for the cookie.\n */\nfunction $$CookieWriter($document, $log, $browser) {\n  var cookiePath = $browser.baseHref();\n  var rawDocument = $document[0];\n\n  function buildCookieString(name, value, options) {\n    var path, expires;\n    options = options || {};\n    expires = options.expires;\n    path = angular.isDefined(options.path) ? options.path : cookiePath;\n    if (angular.isUndefined(value)) {\n      expires = 'Thu, 01 Jan 1970 00:00:00 GMT';\n      value = '';\n    }\n    if (angular.isString(expires)) {\n      expires = new Date(expires);\n    }\n\n    var str = encodeURIComponent(name) + '=' + encodeURIComponent(value);\n    str += path ? ';path=' + path : '';\n    str += options.domain ? ';domain=' + options.domain : '';\n    str += expires ? ';expires=' + expires.toUTCString() : '';\n    str += options.secure ? ';secure' : '';\n\n    // per http://www.ietf.org/rfc/rfc2109.txt browser must allow at minimum:\n    // - 300 cookies\n    // - 20 cookies per unique domain\n    // - 4096 bytes per cookie\n    var cookieLength = str.length + 1;\n    if (cookieLength > 4096) {\n      $log.warn(\"Cookie '\" + name +\n        \"' possibly not set or overflowed because it was too large (\" +\n        cookieLength + \" > 4096 bytes)!\");\n    }\n\n    return str;\n  }\n\n  return function(name, value, options) {\n    rawDocument.cookie = buildCookieString(name, value, options);\n  };\n}\n\n$$CookieWriter.$inject = ['$document', '$log', '$browser'];\n\nangular.module('ngCookies').provider('$$cookieWriter', function $$CookieWriterProvider() {\n  this.$get = $$CookieWriter;\n});\n\n\n})(window, window.angular);\n","require('./angular-cookies');\nmodule.exports = 'ngCookies';\n","(function (root, factory) {\n  if (typeof define === 'function' && define.amd) {\n    // AMD. Register as an anonymous module unless amdModuleId is set\n    define([], function () {\n      return (factory());\n    });\n  } else if (typeof exports === 'object') {\n    // Node. Does not work with strict CommonJS, but\n    // only CommonJS-like environments that support module.exports,\n    // like Node.\n    module.exports = factory();\n  } else {\n    factory();\n  }\n}(this, function () {\n  'use strict';\n  angular.module('tmh.dynamicLocale', []).config(['$provide', function($provide) {\n    function makeStateful($delegate) {\n      $delegate.$stateful = true;\n      return $delegate;\n    }\n\n    $provide.decorator('dateFilter', ['$delegate', makeStateful]);\n    $provide.decorator('numberFilter', ['$delegate', makeStateful]);\n    $provide.decorator('currencyFilter', ['$delegate', makeStateful]);\n\n  }])\n    .constant('tmhDynamicLocale.STORAGE_KEY', 'tmhDynamicLocale.locale')\n    .provider('tmhDynamicLocale', ['tmhDynamicLocale.STORAGE_KEY', function(STORAGE_KEY) {\n\n      var defaultLocale,\n        localeLocationPattern = 'angular/i18n/angular-locale_{{locale}}.js',\n        nodeToAppend,\n        storageFactory = 'tmhDynamicLocaleStorageCache',\n        storage,\n        storageKey = STORAGE_KEY,\n        storageGet = 'get',\n        storagePut = 'put',\n        promiseCache = {},\n        activeLocale,\n        extraProperties = {};\n\n      /**\n   * Loads a script asynchronously\n   *\n   * @param {string} url The url for the script\n   @ @param {function} callback A function to be called once the script is loaded\n   */\n      function loadScript(url, callback, errorCallback, $timeout) {\n        var script = document.createElement('script'),\n          element = nodeToAppend ? nodeToAppend : document.getElementsByTagName('body')[0],\n          removed = false;\n\n        script.type = 'text/javascript';\n        if (script.readyState) { // IE\n          script.onreadystatechange = function () {\n            if (script.readyState === 'complete' ||\n            script.readyState === 'loaded') {\n              script.onreadystatechange = null;\n              $timeout(\n                function () {\n                  if (removed) return;\n                  removed = true;\n                  if (script.parentNode === element) {\n                    element.removeChild(script);\n                  }\n                  callback();\n                }, 30, false);\n            }\n          };\n        } else { // Others\n          script.onload = function () {\n            if (removed) return;\n            removed = true;\n            if (script.parentNode === element) {\n              element.removeChild(script);\n            }\n            callback();\n          };\n          script.onerror = function () {\n            if (removed) return;\n            removed = true;\n            if (script.parentNode === element) {\n              element.removeChild(script);\n            }\n            errorCallback();\n          };\n        }\n        script.src = url;\n        script.async = true;\n        element.appendChild(script);\n      }\n\n      /**\n   * Loads a locale and replaces the properties from the current locale with the new locale information\n   *\n   * @param {string} localeUrl The path to the new locale\n   * @param {Object} $locale The locale at the curent scope\n   * @param {string} localeId The locale id to load\n   * @param {Object} $rootScope The application $rootScope\n   * @param {Object} $q The application $q\n   * @param {Object} localeCache The current locale cache\n   * @param {Object} $timeout The application $timeout\n   */\n      function loadLocale(localeUrl, $locale, localeId, $rootScope, $q, localeCache, $timeout) {\n\n        function overrideValues(oldObject, newObject) {\n          if (activeLocale !== localeId) {\n            return;\n          }\n          angular.forEach(oldObject, function(value, key) {\n            if (!newObject[key]) {\n              delete oldObject[key];\n            } else if (angular.isArray(newObject[key])) {\n              oldObject[key].length = newObject[key].length;\n            }\n          });\n          angular.forEach(newObject, function(value, key) {\n            if (angular.isArray(newObject[key]) || angular.isObject(newObject[key])) {\n              if (!oldObject[key]) {\n                oldObject[key] = angular.isArray(newObject[key]) ? [] : {};\n              }\n              overrideValues(oldObject[key], newObject[key]);\n            } else {\n              oldObject[key] = newObject[key];\n            }\n          });\n        }\n\n\n        if (promiseCache[localeId]) {\n          activeLocale = localeId;\n          return promiseCache[localeId];\n        }\n\n        var cachedLocale,\n          deferred = $q.defer();\n        if (localeId === activeLocale) {\n          deferred.resolve($locale);\n        } else if ((cachedLocale = localeCache.get(localeId))) {\n          activeLocale = localeId;\n          $rootScope.$evalAsync(function() {\n            overrideValues($locale, cachedLocale);\n            storage[storagePut](storageKey, localeId);\n            $rootScope.$broadcast('$localeChangeSuccess', localeId, $locale);\n            deferred.resolve($locale);\n          });\n        } else {\n          activeLocale = localeId;\n          promiseCache[localeId] = deferred.promise;\n          loadScript(localeUrl, function() {\n            // Create a new injector with the new locale\n            var localInjector = angular.injector(['ngLocale']),\n              externalLocale = localInjector.get('$locale');\n\n            overrideValues($locale, externalLocale);\n            localeCache.put(localeId, externalLocale);\n            delete promiseCache[localeId];\n\n            $rootScope.$applyAsync(function() {\n              storage[storagePut](storageKey, localeId);\n              $rootScope.$broadcast('$localeChangeSuccess', localeId, $locale);\n              deferred.resolve($locale);\n            });\n          }, function() {\n            delete promiseCache[localeId];\n\n            $rootScope.$applyAsync(function() {\n              if (activeLocale === localeId) {\n                activeLocale = $locale.id;\n              }\n              $rootScope.$broadcast('$localeChangeError', localeId);\n              deferred.reject(localeId);\n            });\n          }, $timeout);\n        }\n        return deferred.promise;\n      }\n\n      this.localeLocationPattern = function(value) {\n        if (value) {\n          localeLocationPattern = value;\n          return this;\n        } else {\n          return localeLocationPattern;\n        }\n      };\n\n      this.appendScriptTo = function(nodeElement) {\n        nodeToAppend = nodeElement;\n      };\n\n      this.useStorage = function(storageName) {\n        storageFactory = storageName;\n        storageGet = 'get';\n        storagePut = 'put';\n      };\n\n      this.useCookieStorage = function() {\n        if (angular.version.minor < 7) {\n          this.useStorage('$cookieStore');\n        } else {\n          this.useStorage('$cookies');\n          storageGet = 'getObject';\n          storagePut = 'putObject';\n        }\n      };\n\n      this.defaultLocale = function(value) {\n        defaultLocale = value;\n      };\n\n      this.storageKey = function(value) {\n        if (value) {\n          storageKey = value;\n          return this;\n        } else {\n          return storageKey;\n        }\n      };\n\n      this.addLocalePatternValue = function(key, value) {\n        extraProperties[key] = value;\n      };\n\n      this.$get = ['$rootScope', '$injector', '$interpolate', '$locale', '$q', 'tmhDynamicLocaleCache', '$timeout', function($rootScope, $injector, interpolate, locale, $q, tmhDynamicLocaleCache, $timeout) {\n        var localeLocation = interpolate(localeLocationPattern);\n\n        storage = $injector.get(storageFactory);\n        $rootScope.$evalAsync(function() {\n          var initialLocale;\n          if ((initialLocale = (storage[storageGet](storageKey) || defaultLocale))) {\n            loadLocaleFn(initialLocale);\n          }\n        });\n        return {\n          /**\n       * @ngdoc method\n       * @description\n       * @param {string} value Sets the locale to the new locale. Changing the locale will trigger\n       *    a background task that will retrieve the new locale and configure the current $locale\n       *    instance with the information from the new locale\n       */\n          set: loadLocaleFn,\n          /**\n       * @ngdoc method\n       * @description Returns the configured locale\n       */\n          get: function() {\n            return activeLocale;\n          }\n        };\n\n        function loadLocaleFn(localeId) {\n          var baseProperties = {locale: localeId, angularVersion: angular.version.full};\n          return loadLocale(localeLocation(angular.extend({}, extraProperties, baseProperties)), locale, localeId, $rootScope, $q, tmhDynamicLocaleCache, $timeout);\n        }\n      }];\n    }]).provider('tmhDynamicLocaleCache', function() {\n      this.$get = ['$cacheFactory', function($cacheFactory) {\n        return $cacheFactory('tmh.dynamicLocales');\n      }];\n    }).provider('tmhDynamicLocaleStorageCache', function() {\n      this.$get = ['$cacheFactory', function($cacheFactory) {\n        return $cacheFactory('tmh.dynamicLocales.store');\n      }];\n    }).run(['tmhDynamicLocale', angular.noop]);\n\n  return 'tmh.dynamicLocale';\n\n}));\n","/**\n * @license angular-iscroll v1.3.3, 2015-06-07T14:28:20+0200\n * (c) 2015 Martin Thorsen Ranang <mtr@ranang.org>\n * License: MIT\n */\n(function (root, factory) {\n    // Using the Universal Module Definition pattern from\n    // https://github.com/umdjs/umd/blob/master/returnExports.js\n    if (typeof define === 'function' && define.amd) {\n        define(['iscroll'], factory);\n    } else if (typeof exports === 'object') {\n        module.exports = factory(require('iscroll'));\n    } else {\n        // Browser globals (root is window)\n        root.angularIscroll = factory(root.IScroll);\n    }\n}(this, function (IScroll) {\n    'use strict';\n\n    var signals = {\n            disabled: 'iscroll:disabled',\n            enabled: 'iscroll:enabled',\n            refresh: 'iscroll:refresh'\n        },\n        classes = {\n            on: 'iscroll-on',\n            off: 'iscroll-off'\n        },\n        iScrollEvents = [\n            'beforeScrollStart',\n            'scrollCancel',\n            'scrollStart',\n            'scroll',\n            'scrollEnd',\n            'flick',\n            'zoomStart',\n            'zoomEnd'\n        ],\n        iScrollEventHandlerMap = {};\n\n    /**\n     * Add handler name to event name mapping.\n     *\n     * Please note that the 'scroll' event is only available when using\n     * iscroll-probe.js (for example, through angular-iscroll-probe).\n     *\n     * For example, the handler for the 'scrollEnd' event can be configured\n     * by supplying the onScrollEnd option.\n     **/\n    angular.forEach(iScrollEvents, function _addPair(event) {\n        this['on' + _capitalizeFirst(event)] = event;\n    }, iScrollEventHandlerMap);\n\n    function _capitalizeFirst(str) {\n        return str.substring(0,1).toLocaleUpperCase() + str.substring(1);\n    }\n\n    function iScrollServiceProvider() {\n        var defaultOptions = {\n                iScroll: {\n                    /**\n                     * The different options for iScroll are explained in\n                     * detail at http://iscrolljs.com/#configuring\n                     **/\n                    momentum: true,\n                    mouseWheel: true\n                },\n                directive: {\n                    /**\n                     * Delay, in ms, before we asynchronously perform an\n                     * iScroll.refresh().  If false, then no async refresh is\n                     * performed.\n                     **/\n                    asyncRefreshDelay: 0,\n                    /**\n                     * Delay, in ms, between each iScroll.refresh().  If false,\n                     * then no periodic refresh is performed.\n                     **/\n                    refreshInterval: false\n                    /**\n                     * Event handler options are added below.\n                     **/\n                }\n            };\n\n        angular.forEach(iScrollEventHandlerMap, function _default(event, handler) {\n            this[handler] = undefined;\n        }, defaultOptions.directive);\n\n        function _configureDefaults(options) {\n            angular.extend(defaultOptions, options);\n        }\n\n        this.configureDefaults = _configureDefaults;\n        function _getDefaults() {\n            return defaultOptions;\n        }\n\n        this.getDefaults = _getDefaults;\n\n        /* @ngInject */\n        function iScrollService($rootScope, $log, iScrollSignals) {\n            var _state = {\n                useIScroll: true\n            };\n\n            function _disable(signalOnly) {\n                if (!signalOnly) {\n                    _state.useIScroll = false;\n                }\n                //$log.debug('emit(iScrollSignals.disabled)',\n                //    iScrollSignals.disabled);\n                $rootScope.$emit(iScrollSignals.disabled);\n            }\n\n            function _enable(signalOnly) {\n                if (!signalOnly) {\n                    _state.useIScroll = true;\n                }\n                //$log.debug('emit(iScrollSignals.enabled)',\n                //    iScrollSignals.enabled);\n                $rootScope.$emit(iScrollSignals.enabled);\n            }\n\n            function _toggle(signalOnly) {\n                (_state.useIScroll ^ signalOnly) ?  // XOR\n                    _disable(signalOnly) : _enable(signalOnly);\n            }\n\n            function _refresh(name) {\n                // The name parameter is not really used for now.\n                $rootScope.$emit(iScrollSignals.refresh, name);\n            }\n\n            return {\n                defaults: defaultOptions,\n                state: _state,\n                enable: _enable,\n                disable: _disable,\n                toggle: _toggle,\n                refresh: _refresh\n            };\n        }\n        iScrollService.$inject = [\"$rootScope\", \"$log\", \"iScrollSignals\"];\n\n        this.$get = iScrollService;\n    }\n\n    function _call(functor) {\n        functor();\n    }\n\n    /* @ngInject */\n    function iscroll($rootScope, $timeout, $interval, $log, iScrollSignals,\n                     iScrollService) {\n        function asyncRefresh(instance, options) {\n            $timeout(function _refreshAfterInitialRender() {\n                instance.refresh();\n            }, options.directive.asyncRefreshDelay);\n        }\n\n        function _createInstance(scope, element, attrs, options) {\n            var instance = new IScroll(element[0], options.iScroll),\n                refreshEnabled = true,\n                refreshInterval = null;\n\n            angular.forEach(iScrollEventHandlerMap,\n                function _addHandler(event, option) {\n                    if (angular.isDefined(options.directive[option])) {\n                        instance.on(event, options.directive[option]);\n                    }\n                });\n\n            element.removeClass(classes.off).addClass(classes.on);\n\n            if (angular.isDefined(attrs.iscrollInstance)) {\n                scope.iscrollInstance = instance;\n            }\n\n            if (options.directive.asyncRefreshDelay !== false) {\n                asyncRefresh(instance, options);\n            }\n\n            function _destroyInstance() {\n                if (refreshInterval !== null) {\n                    $interval.cancel(refreshInterval);\n                }\n\n                if (angular.isDefined(scope.iscrollInstance)) {\n                    delete scope.iscrollInstance;\n                }\n                instance.destroy();\n\n                element.removeClass(classes.on).addClass(classes.off);\n                // Remove element's CSS transition values:\n                element.children('.iscroll-scroller').attr('style', null);\n\n                angular.forEach(deregistrators, _call);\n                //$log.debug('angular-iscroll: destroyInstance');\n            }\n\n            function _refreshInstance() {\n                if (refreshEnabled) {\n                    refreshEnabled = false;\n                    asyncRefresh(instance, options);\n                    refreshEnabled = true;\n                }\n            }\n\n            function _disableRefresh() {\n                refreshEnabled = false;\n            }\n\n            function _enableRefresh() {\n                refreshEnabled = true;\n            }\n\n            instance.on('scrollStart', _disableRefresh);\n            instance.on('scrollEnd', _enableRefresh);\n\n            if (options.directive.refreshInterval !== false) {\n                refreshInterval = $interval(_refreshInstance,\n                    options.directive.refreshInterval);\n            }\n\n            var deregistrators = [\n                $rootScope.$on(iScrollSignals.disabled, _destroyInstance),\n                $rootScope.$on(iScrollSignals.refresh, _refreshInstance),\n                scope.$on('$destroy', _destroyInstance)\n            ];\n\n            return instance;\n        }\n\n        function _link(scope, element, attrs) {\n            var options = {\n                iScroll: angular.extend({}, scope.iscroll || {},\n                    iScrollService.defaults.iScroll),\n                directive: angular.extend({}, iScrollService.defaults.directive)\n            };\n\n            angular.forEach(options.iScroll,\n                function _extractOptions(value, key) {\n                    if (iScrollService.defaults.directive.hasOwnProperty(key) ||\n                        iScrollEventHandlerMap.hasOwnProperty(key)) {\n                        options.directive[key] = value;\n                        delete options.iScroll[key];\n                    }\n                }\n            );\n\n            function _init() {\n                if (!element.hasClass(classes.on)) {\n                    _createInstance(scope, element, attrs, options);\n                }\n            }\n\n            var enableHandlers = [$rootScope.$on(iScrollSignals.enabled, _init)];\n\n            function _removeEnableHandlers() {\n                angular.forEach(enableHandlers, _call);\n            }\n\n            if (iScrollService.state.useIScroll) {\n                _init();\n            } else {\n                element.removeClass(classes.on).addClass(classes.off);\n            }\n\n            scope.$on('$destroy', _removeEnableHandlers);\n        }\n\n        return {\n            restrict: 'A',\n            link: _link,\n            scope: {\n                iscroll: '=',\n                iscrollInstance: '='\n            }\n        };\n    }\n    iscroll.$inject = [\"$rootScope\", \"$timeout\", \"$interval\", \"$log\", \"iScrollSignals\", \"iScrollService\"];\n\n    return angular.module('angular-iscroll', [])\n        .directive('iscroll', iscroll)\n        .provider('iScrollService', iScrollServiceProvider)\n        .constant('iScrollSignals', signals);\n}));\n\n\n","/*! \n * angular-loading-bar v0.9.0\n * https://chieffancypants.github.io/angular-loading-bar\n * Copyright (c) 2016 Wes Cruver\n * License: MIT\n */\n/*\n * angular-loading-bar\n *\n * intercepts XHR requests and creates a loading bar.\n * Based on the excellent nprogress work by rstacruz (more info in readme)\n *\n * (c) 2013 Wes Cruver\n * License: MIT\n */\n\n\n(function() {\n\n'use strict';\n\n// Alias the loading bar for various backwards compatibilities since the project has matured:\nangular.module('angular-loading-bar', ['cfp.loadingBarInterceptor']);\nangular.module('chieffancypants.loadingBar', ['cfp.loadingBarInterceptor']);\n\n\n/**\n * loadingBarInterceptor service\n *\n * Registers itself as an Angular interceptor and listens for XHR requests.\n */\nangular.module('cfp.loadingBarInterceptor', ['cfp.loadingBar'])\n  .config(['$httpProvider', function ($httpProvider) {\n\n    var interceptor = ['$q', '$cacheFactory', '$timeout', '$rootScope', '$log', 'cfpLoadingBar', function ($q, $cacheFactory, $timeout, $rootScope, $log, cfpLoadingBar) {\n\n      /**\n       * The total number of requests made\n       */\n      var reqsTotal = 0;\n\n      /**\n       * The number of requests completed (either successfully or not)\n       */\n      var reqsCompleted = 0;\n\n      /**\n       * The amount of time spent fetching before showing the loading bar\n       */\n      var latencyThreshold = cfpLoadingBar.latencyThreshold;\n\n      /**\n       * $timeout handle for latencyThreshold\n       */\n      var startTimeout;\n\n\n      /**\n       * calls cfpLoadingBar.complete() which removes the\n       * loading bar from the DOM.\n       */\n      function setComplete() {\n        $timeout.cancel(startTimeout);\n        cfpLoadingBar.complete();\n        reqsCompleted = 0;\n        reqsTotal = 0;\n      }\n\n      /**\n       * Determine if the response has already been cached\n       * @param  {Object}  config the config option from the request\n       * @return {Boolean} retrns true if cached, otherwise false\n       */\n      function isCached(config) {\n        var cache;\n        var defaultCache = $cacheFactory.get('$http');\n        var defaults = $httpProvider.defaults;\n\n        // Choose the proper cache source. Borrowed from angular: $http service\n        if ((config.cache || defaults.cache) && config.cache !== false &&\n          (config.method === 'GET' || config.method === 'JSONP')) {\n            cache = angular.isObject(config.cache) ? config.cache\n              : angular.isObject(defaults.cache) ? defaults.cache\n              : defaultCache;\n        }\n\n        var cached = cache !== undefined ?\n          cache.get(config.url) !== undefined : false;\n\n        if (config.cached !== undefined && cached !== config.cached) {\n          return config.cached;\n        }\n        config.cached = cached;\n        return cached;\n      }\n\n\n      return {\n        'request': function(config) {\n          // Check to make sure this request hasn't already been cached and that\n          // the requester didn't explicitly ask us to ignore this request:\n          if (!config.ignoreLoadingBar && !isCached(config)) {\n            $rootScope.$broadcast('cfpLoadingBar:loading', {url: config.url});\n            if (reqsTotal === 0) {\n              startTimeout = $timeout(function() {\n                cfpLoadingBar.start();\n              }, latencyThreshold);\n            }\n            reqsTotal++;\n            cfpLoadingBar.set(reqsCompleted / reqsTotal);\n          }\n          return config;\n        },\n\n        'response': function(response) {\n          if (!response || !response.config) {\n            $log.error('Broken interceptor detected: Config object not supplied in response:\\n https://github.com/chieffancypants/angular-loading-bar/pull/50');\n            return response;\n          }\n\n          if (!response.config.ignoreLoadingBar && !isCached(response.config)) {\n            reqsCompleted++;\n            $rootScope.$broadcast('cfpLoadingBar:loaded', {url: response.config.url, result: response});\n            if (reqsCompleted >= reqsTotal) {\n              setComplete();\n            } else {\n              cfpLoadingBar.set(reqsCompleted / reqsTotal);\n            }\n          }\n          return response;\n        },\n\n        'responseError': function(rejection) {\n          if (!rejection || !rejection.config) {\n            $log.error('Broken interceptor detected: Config object not supplied in rejection:\\n https://github.com/chieffancypants/angular-loading-bar/pull/50');\n            return $q.reject(rejection);\n          }\n\n          if (!rejection.config.ignoreLoadingBar && !isCached(rejection.config)) {\n            reqsCompleted++;\n            $rootScope.$broadcast('cfpLoadingBar:loaded', {url: rejection.config.url, result: rejection});\n            if (reqsCompleted >= reqsTotal) {\n              setComplete();\n            } else {\n              cfpLoadingBar.set(reqsCompleted / reqsTotal);\n            }\n          }\n          return $q.reject(rejection);\n        }\n      };\n    }];\n\n    $httpProvider.interceptors.push(interceptor);\n  }]);\n\n\n/**\n * Loading Bar\n *\n * This service handles adding and removing the actual element in the DOM.\n * Generally, best practices for DOM manipulation is to take place in a\n * directive, but because the element itself is injected in the DOM only upon\n * XHR requests, and it's likely needed on every view, the best option is to\n * use a service.\n */\nangular.module('cfp.loadingBar', [])\n  .provider('cfpLoadingBar', function() {\n\n    this.autoIncrement = true;\n    this.includeSpinner = true;\n    this.includeBar = true;\n    this.latencyThreshold = 100;\n    this.startSize = 0.02;\n    this.parentSelector = 'body';\n    this.spinnerTemplate = '<div id=\"loading-bar-spinner\"><div class=\"spinner-icon\"></div></div>';\n    this.loadingBarTemplate = '<div id=\"loading-bar\"><div class=\"bar\"><div class=\"peg\"></div></div></div>';\n\n    this.$get = ['$injector', '$document', '$timeout', '$rootScope', function ($injector, $document, $timeout, $rootScope) {\n      var $animate;\n      var $parentSelector = this.parentSelector,\n        loadingBarContainer = angular.element(this.loadingBarTemplate),\n        loadingBar = loadingBarContainer.find('div').eq(0),\n        spinner = angular.element(this.spinnerTemplate);\n\n      var incTimeout,\n        completeTimeout,\n        started = false,\n        status = 0;\n\n      var autoIncrement = this.autoIncrement;\n      var includeSpinner = this.includeSpinner;\n      var includeBar = this.includeBar;\n      var startSize = this.startSize;\n\n      /**\n       * Inserts the loading bar element into the dom, and sets it to 2%\n       */\n      function _start() {\n        if (!$animate) {\n          $animate = $injector.get('$animate');\n        }\n\n        $timeout.cancel(completeTimeout);\n\n        // do not continually broadcast the started event:\n        if (started) {\n          return;\n        }\n\n        var document = $document[0];\n        var parent = document.querySelector ?\n          document.querySelector($parentSelector)\n          : $document.find($parentSelector)[0]\n        ;\n\n        if (! parent) {\n          parent = document.getElementsByTagName('body')[0];\n        }\n\n        var $parent = angular.element(parent);\n        var $after = parent.lastChild && angular.element(parent.lastChild);\n\n        $rootScope.$broadcast('cfpLoadingBar:started');\n        started = true;\n\n        if (includeBar) {\n          $animate.enter(loadingBarContainer, $parent, $after);\n        }\n\n        if (includeSpinner) {\n          $animate.enter(spinner, $parent, loadingBarContainer);\n        }\n\n        _set(startSize);\n      }\n\n      /**\n       * Set the loading bar's width to a certain percent.\n       *\n       * @param n any value between 0 and 1\n       */\n      function _set(n) {\n        if (!started) {\n          return;\n        }\n        var pct = (n * 100) + '%';\n        loadingBar.css('width', pct);\n        status = n;\n\n        // increment loadingbar to give the illusion that there is always\n        // progress but make sure to cancel the previous timeouts so we don't\n        // have multiple incs running at the same time.\n        if (autoIncrement) {\n          $timeout.cancel(incTimeout);\n          incTimeout = $timeout(function() {\n            _inc();\n          }, 250);\n        }\n      }\n\n      /**\n       * Increments the loading bar by a random amount\n       * but slows down as it progresses\n       */\n      function _inc() {\n        if (_status() >= 1) {\n          return;\n        }\n\n        var rnd = 0;\n\n        // TODO: do this mathmatically instead of through conditions\n\n        var stat = _status();\n        if (stat >= 0 && stat < 0.25) {\n          // Start out between 3 - 6% increments\n          rnd = (Math.random() * (5 - 3 + 1) + 3) / 100;\n        } else if (stat >= 0.25 && stat < 0.65) {\n          // increment between 0 - 3%\n          rnd = (Math.random() * 3) / 100;\n        } else if (stat >= 0.65 && stat < 0.9) {\n          // increment between 0 - 2%\n          rnd = (Math.random() * 2) / 100;\n        } else if (stat >= 0.9 && stat < 0.99) {\n          // finally, increment it .5 %\n          rnd = 0.005;\n        } else {\n          // after 99%, don't increment:\n          rnd = 0;\n        }\n\n        var pct = _status() + rnd;\n        _set(pct);\n      }\n\n      function _status() {\n        return status;\n      }\n\n      function _completeAnimation() {\n        status = 0;\n        started = false;\n      }\n\n      function _complete() {\n        if (!$animate) {\n          $animate = $injector.get('$animate');\n        }\n\n        $rootScope.$broadcast('cfpLoadingBar:completed');\n        _set(1);\n\n        $timeout.cancel(completeTimeout);\n\n        // Attempt to aggregate any start/complete calls within 500ms:\n        completeTimeout = $timeout(function() {\n          var promise = $animate.leave(loadingBarContainer, _completeAnimation);\n          if (promise && promise.then) {\n            promise.then(_completeAnimation);\n          }\n          $animate.leave(spinner);\n        }, 500);\n      }\n\n      return {\n        start            : _start,\n        set              : _set,\n        status           : _status,\n        inc              : _inc,\n        complete         : _complete,\n        autoIncrement    : this.autoIncrement,\n        includeSpinner   : this.includeSpinner,\n        latencyThreshold : this.latencyThreshold,\n        parentSelector   : this.parentSelector,\n        startSize        : this.startSize\n      };\n\n\n    }];     //\n  });       // wtf javascript. srsly\n})();       //\n","require('./build/loading-bar');\nmodule.exports = 'angular-loading-bar';\n","/**\n * @license AngularJS v1.5.8\n * (c) 2010-2016 Google, Inc. http://angularjs.org\n * License: MIT\n */\n(function(window, angular) {'use strict';\n\n/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n *     Any commits to this file should be reviewed with security in mind.  *\n *   Changes to this file can potentially create security vulnerabilities. *\n *          An approval from 2 Core members with history of modifying      *\n *                         this file is required.                          *\n *                                                                         *\n *  Does the change somehow allow for arbitrary javascript to be executed? *\n *    Or allows for someone to change the prototype of built-in objects?   *\n *     Or gives undesired access to variables likes document or window?    *\n * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */\n\nvar $sanitizeMinErr = angular.$$minErr('$sanitize');\nvar bind;\nvar extend;\nvar forEach;\nvar isDefined;\nvar lowercase;\nvar noop;\nvar htmlParser;\nvar htmlSanitizeWriter;\n\n/**\n * @ngdoc module\n * @name ngSanitize\n * @description\n *\n * # ngSanitize\n *\n * The `ngSanitize` module provides functionality to sanitize HTML.\n *\n *\n * <div doc-module-components=\"ngSanitize\"></div>\n *\n * See {@link ngSanitize.$sanitize `$sanitize`} for usage.\n */\n\n/**\n * @ngdoc service\n * @name $sanitize\n * @kind function\n *\n * @description\n *   Sanitizes an html string by stripping all potentially dangerous tokens.\n *\n *   The input is sanitized by parsing the HTML into tokens. All safe tokens (from a whitelist) are\n *   then serialized back to properly escaped html string. This means that no unsafe input can make\n *   it into the returned string.\n *\n *   The whitelist for URL sanitization of attribute values is configured using the functions\n *   `aHrefSanitizationWhitelist` and `imgSrcSanitizationWhitelist` of {@link ng.$compileProvider\n *   `$compileProvider`}.\n *\n *   The input may also contain SVG markup if this is enabled via {@link $sanitizeProvider}.\n *\n * @param {string} html HTML input.\n * @returns {string} Sanitized HTML.\n *\n * @example\n   <example module=\"sanitizeExample\" deps=\"angular-sanitize.js\">\n   <file name=\"index.html\">\n     <script>\n         angular.module('sanitizeExample', ['ngSanitize'])\n           .controller('ExampleController', ['$scope', '$sce', function($scope, $sce) {\n             $scope.snippet =\n               '<p style=\"color:blue\">an html\\n' +\n               '<em onmouseover=\"this.textContent=\\'PWN3D!\\'\">click here</em>\\n' +\n               'snippet</p>';\n             $scope.deliberatelyTrustDangerousSnippet = function() {\n               return $sce.trustAsHtml($scope.snippet);\n             };\n           }]);\n     </script>\n     <div ng-controller=\"ExampleController\">\n        Snippet: <textarea ng-model=\"snippet\" cols=\"60\" rows=\"3\"></textarea>\n       <table>\n         <tr>\n           <td>Directive</td>\n           <td>How</td>\n           <td>Source</td>\n           <td>Rendered</td>\n         </tr>\n         <tr id=\"bind-html-with-sanitize\">\n           <td>ng-bind-html</td>\n           <td>Automatically uses $sanitize</td>\n           <td><pre>&lt;div ng-bind-html=\"snippet\"&gt;<br/>&lt;/div&gt;</pre></td>\n           <td><div ng-bind-html=\"snippet\"></div></td>\n         </tr>\n         <tr id=\"bind-html-with-trust\">\n           <td>ng-bind-html</td>\n           <td>Bypass $sanitize by explicitly trusting the dangerous value</td>\n           <td>\n           <pre>&lt;div ng-bind-html=\"deliberatelyTrustDangerousSnippet()\"&gt;\n&lt;/div&gt;</pre>\n           </td>\n           <td><div ng-bind-html=\"deliberatelyTrustDangerousSnippet()\"></div></td>\n         </tr>\n         <tr id=\"bind-default\">\n           <td>ng-bind</td>\n           <td>Automatically escapes</td>\n           <td><pre>&lt;div ng-bind=\"snippet\"&gt;<br/>&lt;/div&gt;</pre></td>\n           <td><div ng-bind=\"snippet\"></div></td>\n         </tr>\n       </table>\n       </div>\n   </file>\n   <file name=\"protractor.js\" type=\"protractor\">\n     it('should sanitize the html snippet by default', function() {\n       expect(element(by.css('#bind-html-with-sanitize div')).getInnerHtml()).\n         toBe('<p>an html\\n<em>click here</em>\\nsnippet</p>');\n     });\n\n     it('should inline raw snippet if bound to a trusted value', function() {\n       expect(element(by.css('#bind-html-with-trust div')).getInnerHtml()).\n         toBe(\"<p style=\\\"color:blue\\\">an html\\n\" +\n              \"<em onmouseover=\\\"this.textContent='PWN3D!'\\\">click here</em>\\n\" +\n              \"snippet</p>\");\n     });\n\n     it('should escape snippet without any filter', function() {\n       expect(element(by.css('#bind-default div')).getInnerHtml()).\n         toBe(\"&lt;p style=\\\"color:blue\\\"&gt;an html\\n\" +\n              \"&lt;em onmouseover=\\\"this.textContent='PWN3D!'\\\"&gt;click here&lt;/em&gt;\\n\" +\n              \"snippet&lt;/p&gt;\");\n     });\n\n     it('should update', function() {\n       element(by.model('snippet')).clear();\n       element(by.model('snippet')).sendKeys('new <b onclick=\"alert(1)\">text</b>');\n       expect(element(by.css('#bind-html-with-sanitize div')).getInnerHtml()).\n         toBe('new <b>text</b>');\n       expect(element(by.css('#bind-html-with-trust div')).getInnerHtml()).toBe(\n         'new <b onclick=\"alert(1)\">text</b>');\n       expect(element(by.css('#bind-default div')).getInnerHtml()).toBe(\n         \"new &lt;b onclick=\\\"alert(1)\\\"&gt;text&lt;/b&gt;\");\n     });\n   </file>\n   </example>\n */\n\n\n/**\n * @ngdoc provider\n * @name $sanitizeProvider\n *\n * @description\n * Creates and configures {@link $sanitize} instance.\n */\nfunction $SanitizeProvider() {\n  var svgEnabled = false;\n\n  this.$get = ['$$sanitizeUri', function($$sanitizeUri) {\n    if (svgEnabled) {\n      extend(validElements, svgElements);\n    }\n    return function(html) {\n      var buf = [];\n      htmlParser(html, htmlSanitizeWriter(buf, function(uri, isImage) {\n        return !/^unsafe:/.test($$sanitizeUri(uri, isImage));\n      }));\n      return buf.join('');\n    };\n  }];\n\n\n  /**\n   * @ngdoc method\n   * @name $sanitizeProvider#enableSvg\n   * @kind function\n   *\n   * @description\n   * Enables a subset of svg to be supported by the sanitizer.\n   *\n   * <div class=\"alert alert-warning\">\n   *   <p>By enabling this setting without taking other precautions, you might expose your\n   *   application to click-hijacking attacks. In these attacks, sanitized svg elements could be positioned\n   *   outside of the containing element and be rendered over other elements on the page (e.g. a login\n   *   link). Such behavior can then result in phishing incidents.</p>\n   *\n   *   <p>To protect against these, explicitly setup `overflow: hidden` css rule for all potential svg\n   *   tags within the sanitized content:</p>\n   *\n   *   <br>\n   *\n   *   <pre><code>\n   *   .rootOfTheIncludedContent svg {\n   *     overflow: hidden !important;\n   *   }\n   *   </code></pre>\n   * </div>\n   *\n   * @param {boolean=} flag Enable or disable SVG support in the sanitizer.\n   * @returns {boolean|ng.$sanitizeProvider} Returns the currently configured value if called\n   *    without an argument or self for chaining otherwise.\n   */\n  this.enableSvg = function(enableSvg) {\n    if (isDefined(enableSvg)) {\n      svgEnabled = enableSvg;\n      return this;\n    } else {\n      return svgEnabled;\n    }\n  };\n\n  //////////////////////////////////////////////////////////////////////////////////////////////////\n  // Private stuff\n  //////////////////////////////////////////////////////////////////////////////////////////////////\n\n  bind = angular.bind;\n  extend = angular.extend;\n  forEach = angular.forEach;\n  isDefined = angular.isDefined;\n  lowercase = angular.lowercase;\n  noop = angular.noop;\n\n  htmlParser = htmlParserImpl;\n  htmlSanitizeWriter = htmlSanitizeWriterImpl;\n\n  // Regular Expressions for parsing tags and attributes\n  var SURROGATE_PAIR_REGEXP = /[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g,\n    // Match everything outside of normal chars and \" (quote character)\n    NON_ALPHANUMERIC_REGEXP = /([^\\#-~ |!])/g;\n\n\n  // Good source of info about elements and attributes\n  // http://dev.w3.org/html5/spec/Overview.html#semantics\n  // http://simon.html5.org/html-elements\n\n  // Safe Void Elements - HTML5\n  // http://dev.w3.org/html5/spec/Overview.html#void-elements\n  var voidElements = toMap(\"area,br,col,hr,img,wbr\");\n\n  // Elements that you can, intentionally, leave open (and which close themselves)\n  // http://dev.w3.org/html5/spec/Overview.html#optional-tags\n  var optionalEndTagBlockElements = toMap(\"colgroup,dd,dt,li,p,tbody,td,tfoot,th,thead,tr\"),\n      optionalEndTagInlineElements = toMap(\"rp,rt\"),\n      optionalEndTagElements = extend({},\n                                              optionalEndTagInlineElements,\n                                              optionalEndTagBlockElements);\n\n  // Safe Block Elements - HTML5\n  var blockElements = extend({}, optionalEndTagBlockElements, toMap(\"address,article,\" +\n          \"aside,blockquote,caption,center,del,dir,div,dl,figure,figcaption,footer,h1,h2,h3,h4,h5,\" +\n          \"h6,header,hgroup,hr,ins,map,menu,nav,ol,pre,section,table,ul\"));\n\n  // Inline Elements - HTML5\n  var inlineElements = extend({}, optionalEndTagInlineElements, toMap(\"a,abbr,acronym,b,\" +\n          \"bdi,bdo,big,br,cite,code,del,dfn,em,font,i,img,ins,kbd,label,map,mark,q,ruby,rp,rt,s,\" +\n          \"samp,small,span,strike,strong,sub,sup,time,tt,u,var\"));\n\n  // SVG Elements\n  // https://wiki.whatwg.org/wiki/Sanitization_rules#svg_Elements\n  // Note: the elements animate,animateColor,animateMotion,animateTransform,set are intentionally omitted.\n  // They can potentially allow for arbitrary javascript to be executed. See #11290\n  var svgElements = toMap(\"circle,defs,desc,ellipse,font-face,font-face-name,font-face-src,g,glyph,\" +\n          \"hkern,image,linearGradient,line,marker,metadata,missing-glyph,mpath,path,polygon,polyline,\" +\n          \"radialGradient,rect,stop,svg,switch,text,title,tspan\");\n\n  // Blocked Elements (will be stripped)\n  var blockedElements = toMap(\"script,style\");\n\n  var validElements = extend({},\n                                     voidElements,\n                                     blockElements,\n                                     inlineElements,\n                                     optionalEndTagElements);\n\n  //Attributes that have href and hence need to be sanitized\n  var uriAttrs = toMap(\"background,cite,href,longdesc,src,xlink:href\");\n\n  var htmlAttrs = toMap('abbr,align,alt,axis,bgcolor,border,cellpadding,cellspacing,class,clear,' +\n      'color,cols,colspan,compact,coords,dir,face,headers,height,hreflang,hspace,' +\n      'ismap,lang,language,nohref,nowrap,rel,rev,rows,rowspan,rules,' +\n      'scope,scrolling,shape,size,span,start,summary,tabindex,target,title,type,' +\n      'valign,value,vspace,width');\n\n  // SVG attributes (without \"id\" and \"name\" attributes)\n  // https://wiki.whatwg.org/wiki/Sanitization_rules#svg_Attributes\n  var svgAttrs = toMap('accent-height,accumulate,additive,alphabetic,arabic-form,ascent,' +\n      'baseProfile,bbox,begin,by,calcMode,cap-height,class,color,color-rendering,content,' +\n      'cx,cy,d,dx,dy,descent,display,dur,end,fill,fill-rule,font-family,font-size,font-stretch,' +\n      'font-style,font-variant,font-weight,from,fx,fy,g1,g2,glyph-name,gradientUnits,hanging,' +\n      'height,horiz-adv-x,horiz-origin-x,ideographic,k,keyPoints,keySplines,keyTimes,lang,' +\n      'marker-end,marker-mid,marker-start,markerHeight,markerUnits,markerWidth,mathematical,' +\n      'max,min,offset,opacity,orient,origin,overline-position,overline-thickness,panose-1,' +\n      'path,pathLength,points,preserveAspectRatio,r,refX,refY,repeatCount,repeatDur,' +\n      'requiredExtensions,requiredFeatures,restart,rotate,rx,ry,slope,stemh,stemv,stop-color,' +\n      'stop-opacity,strikethrough-position,strikethrough-thickness,stroke,stroke-dasharray,' +\n      'stroke-dashoffset,stroke-linecap,stroke-linejoin,stroke-miterlimit,stroke-opacity,' +\n      'stroke-width,systemLanguage,target,text-anchor,to,transform,type,u1,u2,underline-position,' +\n      'underline-thickness,unicode,unicode-range,units-per-em,values,version,viewBox,visibility,' +\n      'width,widths,x,x-height,x1,x2,xlink:actuate,xlink:arcrole,xlink:role,xlink:show,xlink:title,' +\n      'xlink:type,xml:base,xml:lang,xml:space,xmlns,xmlns:xlink,y,y1,y2,zoomAndPan', true);\n\n  var validAttrs = extend({},\n                                  uriAttrs,\n                                  svgAttrs,\n                                  htmlAttrs);\n\n  function toMap(str, lowercaseKeys) {\n    var obj = {}, items = str.split(','), i;\n    for (i = 0; i < items.length; i++) {\n      obj[lowercaseKeys ? lowercase(items[i]) : items[i]] = true;\n    }\n    return obj;\n  }\n\n  var inertBodyElement;\n  (function(window) {\n    var doc;\n    if (window.document && window.document.implementation) {\n      doc = window.document.implementation.createHTMLDocument(\"inert\");\n    } else {\n      throw $sanitizeMinErr('noinert', \"Can't create an inert html document\");\n    }\n    var docElement = doc.documentElement || doc.getDocumentElement();\n    var bodyElements = docElement.getElementsByTagName('body');\n\n    // usually there should be only one body element in the document, but IE doesn't have any, so we need to create one\n    if (bodyElements.length === 1) {\n      inertBodyElement = bodyElements[0];\n    } else {\n      var html = doc.createElement('html');\n      inertBodyElement = doc.createElement('body');\n      html.appendChild(inertBodyElement);\n      doc.appendChild(html);\n    }\n  })(window);\n\n  /**\n   * @example\n   * htmlParser(htmlString, {\n   *     start: function(tag, attrs) {},\n   *     end: function(tag) {},\n   *     chars: function(text) {},\n   *     comment: function(text) {}\n   * });\n   *\n   * @param {string} html string\n   * @param {object} handler\n   */\n  function htmlParserImpl(html, handler) {\n    if (html === null || html === undefined) {\n      html = '';\n    } else if (typeof html !== 'string') {\n      html = '' + html;\n    }\n    inertBodyElement.innerHTML = html;\n\n    //mXSS protection\n    var mXSSAttempts = 5;\n    do {\n      if (mXSSAttempts === 0) {\n        throw $sanitizeMinErr('uinput', \"Failed to sanitize html because the input is unstable\");\n      }\n      mXSSAttempts--;\n\n      // strip custom-namespaced attributes on IE<=11\n      if (window.document.documentMode) {\n        stripCustomNsAttrs(inertBodyElement);\n      }\n      html = inertBodyElement.innerHTML; //trigger mXSS\n      inertBodyElement.innerHTML = html;\n    } while (html !== inertBodyElement.innerHTML);\n\n    var node = inertBodyElement.firstChild;\n    while (node) {\n      switch (node.nodeType) {\n        case 1: // ELEMENT_NODE\n          handler.start(node.nodeName.toLowerCase(), attrToMap(node.attributes));\n          break;\n        case 3: // TEXT NODE\n          handler.chars(node.textContent);\n          break;\n      }\n\n      var nextNode;\n      if (!(nextNode = node.firstChild)) {\n      if (node.nodeType == 1) {\n          handler.end(node.nodeName.toLowerCase());\n        }\n        nextNode = node.nextSibling;\n        if (!nextNode) {\n          while (nextNode == null) {\n            node = node.parentNode;\n            if (node === inertBodyElement) break;\n            nextNode = node.nextSibling;\n          if (node.nodeType == 1) {\n              handler.end(node.nodeName.toLowerCase());\n            }\n          }\n        }\n      }\n      node = nextNode;\n    }\n\n    while (node = inertBodyElement.firstChild) {\n      inertBodyElement.removeChild(node);\n    }\n  }\n\n  function attrToMap(attrs) {\n    var map = {};\n    for (var i = 0, ii = attrs.length; i < ii; i++) {\n      var attr = attrs[i];\n      map[attr.name] = attr.value;\n    }\n    return map;\n  }\n\n\n  /**\n   * Escapes all potentially dangerous characters, so that the\n   * resulting string can be safely inserted into attribute or\n   * element text.\n   * @param value\n   * @returns {string} escaped text\n   */\n  function encodeEntities(value) {\n    return value.\n      replace(/&/g, '&amp;').\n      replace(SURROGATE_PAIR_REGEXP, function(value) {\n        var hi = value.charCodeAt(0);\n        var low = value.charCodeAt(1);\n        return '&#' + (((hi - 0xD800) * 0x400) + (low - 0xDC00) + 0x10000) + ';';\n      }).\n      replace(NON_ALPHANUMERIC_REGEXP, function(value) {\n        return '&#' + value.charCodeAt(0) + ';';\n      }).\n      replace(/</g, '&lt;').\n      replace(/>/g, '&gt;');\n  }\n\n  /**\n   * create an HTML/XML writer which writes to buffer\n   * @param {Array} buf use buf.join('') to get out sanitized html string\n   * @returns {object} in the form of {\n   *     start: function(tag, attrs) {},\n   *     end: function(tag) {},\n   *     chars: function(text) {},\n   *     comment: function(text) {}\n   * }\n   */\n  function htmlSanitizeWriterImpl(buf, uriValidator) {\n    var ignoreCurrentElement = false;\n    var out = bind(buf, buf.push);\n    return {\n      start: function(tag, attrs) {\n        tag = lowercase(tag);\n        if (!ignoreCurrentElement && blockedElements[tag]) {\n          ignoreCurrentElement = tag;\n        }\n        if (!ignoreCurrentElement && validElements[tag] === true) {\n          out('<');\n          out(tag);\n          forEach(attrs, function(value, key) {\n            var lkey = lowercase(key);\n            var isImage = (tag === 'img' && lkey === 'src') || (lkey === 'background');\n            if (validAttrs[lkey] === true &&\n              (uriAttrs[lkey] !== true || uriValidator(value, isImage))) {\n              out(' ');\n              out(key);\n              out('=\"');\n              out(encodeEntities(value));\n              out('\"');\n            }\n          });\n          out('>');\n        }\n      },\n      end: function(tag) {\n        tag = lowercase(tag);\n        if (!ignoreCurrentElement && validElements[tag] === true && voidElements[tag] !== true) {\n          out('</');\n          out(tag);\n          out('>');\n        }\n        if (tag == ignoreCurrentElement) {\n          ignoreCurrentElement = false;\n        }\n      },\n      chars: function(chars) {\n        if (!ignoreCurrentElement) {\n          out(encodeEntities(chars));\n        }\n      }\n    };\n  }\n\n\n  /**\n   * When IE9-11 comes across an unknown namespaced attribute e.g. 'xlink:foo' it adds 'xmlns:ns1' attribute to declare\n   * ns1 namespace and prefixes the attribute with 'ns1' (e.g. 'ns1:xlink:foo'). This is undesirable since we don't want\n   * to allow any of these custom attributes. This method strips them all.\n   *\n   * @param node Root element to process\n   */\n  function stripCustomNsAttrs(node) {\n    if (node.nodeType === window.Node.ELEMENT_NODE) {\n      var attrs = node.attributes;\n      for (var i = 0, l = attrs.length; i < l; i++) {\n        var attrNode = attrs[i];\n        var attrName = attrNode.name.toLowerCase();\n        if (attrName === 'xmlns:ns1' || attrName.lastIndexOf('ns1:', 0) === 0) {\n          node.removeAttributeNode(attrNode);\n          i--;\n          l--;\n        }\n      }\n    }\n\n    var nextNode = node.firstChild;\n    if (nextNode) {\n      stripCustomNsAttrs(nextNode);\n    }\n\n    nextNode = node.nextSibling;\n    if (nextNode) {\n      stripCustomNsAttrs(nextNode);\n    }\n  }\n}\n\nfunction sanitizeText(chars) {\n  var buf = [];\n  var writer = htmlSanitizeWriter(buf, noop);\n  writer.chars(chars);\n  return buf.join('');\n}\n\n\n// define ngSanitize module and register $sanitize service\nangular.module('ngSanitize', []).provider('$sanitize', $SanitizeProvider);\n\n/**\n * @ngdoc filter\n * @name linky\n * @kind function\n *\n * @description\n * Finds links in text input and turns them into html links. Supports `http/https/ftp/mailto` and\n * plain email address links.\n *\n * Requires the {@link ngSanitize `ngSanitize`} module to be installed.\n *\n * @param {string} text Input text.\n * @param {string} target Window (`_blank|_self|_parent|_top`) or named frame to open links in.\n * @param {object|function(url)} [attributes] Add custom attributes to the link element.\n *\n *    Can be one of:\n *\n *    - `object`: A map of attributes\n *    - `function`: Takes the url as a parameter and returns a map of attributes\n *\n *    If the map of attributes contains a value for `target`, it overrides the value of\n *    the target parameter.\n *\n *\n * @returns {string} Html-linkified and {@link $sanitize sanitized} text.\n *\n * @usage\n   <span ng-bind-html=\"linky_expression | linky\"></span>\n *\n * @example\n   <example module=\"linkyExample\" deps=\"angular-sanitize.js\">\n     <file name=\"index.html\">\n       <div ng-controller=\"ExampleController\">\n       Snippet: <textarea ng-model=\"snippet\" cols=\"60\" rows=\"3\"></textarea>\n       <table>\n         <tr>\n           <th>Filter</th>\n           <th>Source</th>\n           <th>Rendered</th>\n         </tr>\n         <tr id=\"linky-filter\">\n           <td>linky filter</td>\n           <td>\n             <pre>&lt;div ng-bind-html=\"snippet | linky\"&gt;<br>&lt;/div&gt;</pre>\n           </td>\n           <td>\n             <div ng-bind-html=\"snippet | linky\"></div>\n           </td>\n         </tr>\n         <tr id=\"linky-target\">\n          <td>linky target</td>\n          <td>\n            <pre>&lt;div ng-bind-html=\"snippetWithSingleURL | linky:'_blank'\"&gt;<br>&lt;/div&gt;</pre>\n          </td>\n          <td>\n            <div ng-bind-html=\"snippetWithSingleURL | linky:'_blank'\"></div>\n          </td>\n         </tr>\n         <tr id=\"linky-custom-attributes\">\n          <td>linky custom attributes</td>\n          <td>\n            <pre>&lt;div ng-bind-html=\"snippetWithSingleURL | linky:'_self':{rel: 'nofollow'}\"&gt;<br>&lt;/div&gt;</pre>\n          </td>\n          <td>\n            <div ng-bind-html=\"snippetWithSingleURL | linky:'_self':{rel: 'nofollow'}\"></div>\n          </td>\n         </tr>\n         <tr id=\"escaped-html\">\n           <td>no filter</td>\n           <td><pre>&lt;div ng-bind=\"snippet\"&gt;<br>&lt;/div&gt;</pre></td>\n           <td><div ng-bind=\"snippet\"></div></td>\n         </tr>\n       </table>\n     </file>\n     <file name=\"script.js\">\n       angular.module('linkyExample', ['ngSanitize'])\n         .controller('ExampleController', ['$scope', function($scope) {\n           $scope.snippet =\n             'Pretty text with some links:\\n'+\n             'http://angularjs.org/,\\n'+\n             'mailto:us@somewhere.org,\\n'+\n             'another@somewhere.org,\\n'+\n             'and one more: ftp://127.0.0.1/.';\n           $scope.snippetWithSingleURL = 'http://angularjs.org/';\n         }]);\n     </file>\n     <file name=\"protractor.js\" type=\"protractor\">\n       it('should linkify the snippet with urls', function() {\n         expect(element(by.id('linky-filter')).element(by.binding('snippet | linky')).getText()).\n             toBe('Pretty text with some links: http://angularjs.org/, us@somewhere.org, ' +\n                  'another@somewhere.org, and one more: ftp://127.0.0.1/.');\n         expect(element.all(by.css('#linky-filter a')).count()).toEqual(4);\n       });\n\n       it('should not linkify snippet without the linky filter', function() {\n         expect(element(by.id('escaped-html')).element(by.binding('snippet')).getText()).\n             toBe('Pretty text with some links: http://angularjs.org/, mailto:us@somewhere.org, ' +\n                  'another@somewhere.org, and one more: ftp://127.0.0.1/.');\n         expect(element.all(by.css('#escaped-html a')).count()).toEqual(0);\n       });\n\n       it('should update', function() {\n         element(by.model('snippet')).clear();\n         element(by.model('snippet')).sendKeys('new http://link.');\n         expect(element(by.id('linky-filter')).element(by.binding('snippet | linky')).getText()).\n             toBe('new http://link.');\n         expect(element.all(by.css('#linky-filter a')).count()).toEqual(1);\n         expect(element(by.id('escaped-html')).element(by.binding('snippet')).getText())\n             .toBe('new http://link.');\n       });\n\n       it('should work with the target property', function() {\n        expect(element(by.id('linky-target')).\n            element(by.binding(\"snippetWithSingleURL | linky:'_blank'\")).getText()).\n            toBe('http://angularjs.org/');\n        expect(element(by.css('#linky-target a')).getAttribute('target')).toEqual('_blank');\n       });\n\n       it('should optionally add custom attributes', function() {\n        expect(element(by.id('linky-custom-attributes')).\n            element(by.binding(\"snippetWithSingleURL | linky:'_self':{rel: 'nofollow'}\")).getText()).\n            toBe('http://angularjs.org/');\n        expect(element(by.css('#linky-custom-attributes a')).getAttribute('rel')).toEqual('nofollow');\n       });\n     </file>\n   </example>\n */\nangular.module('ngSanitize').filter('linky', ['$sanitize', function($sanitize) {\n  var LINKY_URL_REGEXP =\n        /((ftp|https?):\\/\\/|(www\\.)|(mailto:)?[A-Za-z0-9._%+-]+@)\\S*[^\\s.;,(){}<>\"\\u201d\\u2019]/i,\n      MAILTO_REGEXP = /^mailto:/i;\n\n  var linkyMinErr = angular.$$minErr('linky');\n  var isDefined = angular.isDefined;\n  var isFunction = angular.isFunction;\n  var isObject = angular.isObject;\n  var isString = angular.isString;\n\n  return function(text, target, attributes) {\n    if (text == null || text === '') return text;\n    if (!isString(text)) throw linkyMinErr('notstring', 'Expected string but received: {0}', text);\n\n    var attributesFn =\n      isFunction(attributes) ? attributes :\n      isObject(attributes) ? function getAttributesObject() {return attributes;} :\n      function getEmptyAttributesObject() {return {};};\n\n    var match;\n    var raw = text;\n    var html = [];\n    var url;\n    var i;\n    while ((match = raw.match(LINKY_URL_REGEXP))) {\n      // We can not end in these as they are sometimes found at the end of the sentence\n      url = match[0];\n      // if we did not match ftp/http/www/mailto then assume mailto\n      if (!match[2] && !match[4]) {\n        url = (match[3] ? 'http://' : 'mailto:') + url;\n      }\n      i = match.index;\n      addText(raw.substr(0, i));\n      addLink(url, match[0].replace(MAILTO_REGEXP, ''));\n      raw = raw.substring(i + match[0].length);\n    }\n    addText(raw);\n    return $sanitize(html.join(''));\n\n    function addText(text) {\n      if (!text) {\n        return;\n      }\n      html.push(sanitizeText(text));\n    }\n\n    function addLink(url, text) {\n      var key, linkAttributes = attributesFn(url);\n      html.push('<a ');\n\n      for (key in linkAttributes) {\n        html.push(key + '=\"' + linkAttributes[key] + '\" ');\n      }\n\n      if (isDefined(target) && !('target' in linkAttributes)) {\n        html.push('target=\"',\n                  target,\n                  '\" ');\n      }\n      html.push('href=\"',\n                url.replace(/\"/g, '&quot;'),\n                '\">');\n      addText(text);\n      html.push('</a>');\n    }\n  };\n}]);\n\n\n})(window, window.angular);\n","require('./angular-sanitize');\nmodule.exports = 'ngSanitize';\n","(function() {\n\n\n// Create all modules and define dependencies to make sure they exist\n// and are loaded in the correct order to satisfy dependency injection\n// before all nested files are concatenated by Grunt\n\nangular.module('angular-storage',\n    [\n      'angular-storage.store'\n    ]);\n\nangular.module('angular-storage.cookieStorage', [])\n  .service('cookieStorage', [\"$cookies\", function ($cookies) {\n\n    this.set = function (what, value) {\n      return $cookies.put(what, value);\n    };\n\n    this.get = function (what) {\n      return $cookies.get(what);\n    };\n\n    this.remove = function (what) {\n      return $cookies.remove(what);\n    };\n  }]);\n\nangular.module('angular-storage.internalStore', ['angular-storage.localStorage', 'angular-storage.sessionStorage'])\n  .factory('InternalStore', [\"$log\", \"$injector\", function($log, $injector) {\n\n    function InternalStore(namespace, storage, delimiter, useCache) {\n      this.namespace = namespace || null;\n      if (angular.isUndefined(useCache) || useCache == null) {\n        useCache = true;\n      }\n      this.useCache = useCache;\n      this.delimiter = delimiter || '.';\n      this.inMemoryCache = {};\n      this.storage = $injector.get(storage || 'localStorage');\n    }\n\n    InternalStore.prototype.getNamespacedKey = function(key) {\n      if (!this.namespace) {\n        return key;\n      } else {\n        return [this.namespace, key].join(this.delimiter);\n      }\n    };\n\n    InternalStore.prototype.set = function(name, elem) {\n      if (this.useCache) {\n        this.inMemoryCache[name] = elem;\n      }\n      this.storage.set(this.getNamespacedKey(name), JSON.stringify(elem));\n    };\n\n    InternalStore.prototype.get = function(name) {\n      var obj = null;\n      if (this.useCache && name in this.inMemoryCache) {\n        return this.inMemoryCache[name];\n      }\n      var saved = this.storage.get(this.getNamespacedKey(name));\n      try {\n\n        if (typeof saved === 'undefined' || saved === 'undefined') {\n          obj = undefined;\n        } else {\n          obj = JSON.parse(saved);\n        }\n\n        if (this.useCache) {\n          this.inMemoryCache[name] = obj;\n        }\n      } catch(e) {\n        $log.error('Error parsing saved value', e);\n        this.remove(name);\n      }\n      return obj;\n    };\n\n    InternalStore.prototype.remove = function(name) {\n      if (this.useCache) {\n        this.inMemoryCache[name] = null;\n      }\n      this.storage.remove(this.getNamespacedKey(name));\n    };\n\n    return InternalStore;\n  }]);\n\n\nangular.module('angular-storage.localStorage', ['angular-storage.cookieStorage'])\n  .service('localStorage', [\"$window\", \"$injector\", function ($window, $injector) {\n    var localStorageAvailable;\n\n    try {\n      $window.localStorage.setItem('testKey', 'test');\n      $window.localStorage.removeItem('testKey');\n      localStorageAvailable = true;\n    } catch(e) {\n      localStorageAvailable = false;\n    }\n\n    if (localStorageAvailable) {\n      this.set = function (what, value) {\n        return $window.localStorage.setItem(what, value);\n      };\n\n      this.get = function (what) {\n        return $window.localStorage.getItem(what);\n      };\n\n      this.remove = function (what) {\n        return $window.localStorage.removeItem(what);\n      };\n      \n      this.clear = function () {\n        $window.localStorage.clear();\n      };\n    } else {\n      var cookieStorage = $injector.get('cookieStorage');\n\n      this.set = cookieStorage.set;\n      this.get = cookieStorage.get;\n      this.remove = cookieStorage.remove;\n    }\n  }]);\n\nangular.module('angular-storage.sessionStorage', ['angular-storage.cookieStorage'])\n  .service('sessionStorage', [\"$window\", \"$injector\", function ($window, $injector) {\n    var sessionStorageAvailable;\n\n    try {\n      $window.sessionStorage.setItem('testKey', 'test');\n      $window.sessionStorage.removeItem('testKey');\n      sessionStorageAvailable = true;\n    } catch(e) {\n      sessionStorageAvailable = false;\n    }\n\n    if (sessionStorageAvailable) {\n      this.set = function (what, value) {\n        return $window.sessionStorage.setItem(what, value);\n      };\n\n      this.get = function (what) {\n        return $window.sessionStorage.getItem(what);\n      };\n\n      this.remove = function (what) {\n        return $window.sessionStorage.removeItem(what);\n      };\n    } else {\n      var cookieStorage = $injector.get('cookieStorage');\n\n      this.set = cookieStorage.set;\n      this.get = cookieStorage.get;\n      this.remove = cookieStorage.remove;\n    }\n  }]);\n\nangular.module('angular-storage.store', ['angular-storage.internalStore'])\n  .provider('store', function() {\n\n    // the default storage\n    var _storage = 'localStorage';\n\n    //caching is on by default\n    var _caching = true;\n\n    /**\n     * Sets the storage.\n     *\n     * @param {String} storage The storage name\n     */\n    this.setStore = function(storage) {\n      if (storage && angular.isString(storage)) {\n        _storage = storage;\n      }\n    };\n\n    /**\n     * Sets the internal cache usage\n     *\n     * @param {boolean} useCache Whether to use internal cache\n     */\n    this.setCaching = function(useCache) {\n      _caching = !!useCache;\n    };\n\n    this.$get = [\"InternalStore\", function(InternalStore) {\n      var store = new InternalStore(null, _storage, null, _caching);\n\n      /**\n       * Returns a namespaced store\n       *\n       * @param {String} namespace The namespace\n       * @param {String} storage The name of the storage service\n       * @param {String} delimiter The key delimiter\n       * @param {boolean} useCache whether to use the internal caching\n       * @returns {InternalStore}\n       */\n      store.getNamespacedStore = function(namespace, storage, delimiter, useCache) {\n        return new InternalStore(namespace, storage, delimiter, useCache);\n      };\n\n      return store;\n    }];\n  });\n\n\n}());","require('./dist/angular-storage.js');\nmodule.exports = 'angular-storage';\n\n","/**\n * angular-strap\n * @version v2.3.12 - 2017-01-26\n * @link http://mgcrea.github.io/angular-strap\n * @author Olivier Louvignes <olivier@mg-crea.com> (https://github.com/mgcrea)\n * @license MIT License, http://www.opensource.org/licenses/MIT\n */\n(function(window, document, undefined) {\n  'use strict';\n  bsCompilerService.$inject = [ '$q', '$http', '$injector', '$compile', '$controller', '$templateCache' ];\n  angular.module('mgcrea.ngStrap.typeahead', [ 'mgcrea.ngStrap.tooltip', 'mgcrea.ngStrap.helpers.parseOptions' ]).provider('$typeahead', function() {\n    var defaults = this.defaults = {\n      animation: 'am-fade',\n      prefixClass: 'typeahead',\n      prefixEvent: '$typeahead',\n      placement: 'bottom-left',\n      templateUrl: 'typeahead/typeahead.tpl.html',\n      trigger: 'focus',\n      container: false,\n      keyboard: true,\n      html: false,\n      delay: 0,\n      minLength: 1,\n      filter: 'bsAsyncFilter',\n      limit: 6,\n      autoSelect: false,\n      comparator: '',\n      trimValue: true\n    };\n    this.$get = [ '$window', '$rootScope', '$tooltip', '$$rAF', '$timeout', function($window, $rootScope, $tooltip, $$rAF, $timeout) {\n      function TypeaheadFactory(element, controller, config) {\n        var $typeahead = {};\n        var options = angular.extend({}, defaults, config);\n        $typeahead = $tooltip(element, options);\n        var parentScope = config.scope;\n        var scope = $typeahead.$scope;\n        scope.$resetMatches = function() {\n          scope.$matches = [];\n          scope.$activeIndex = options.autoSelect ? 0 : -1;\n        };\n        scope.$resetMatches();\n        scope.$activate = function(index) {\n          scope.$$postDigest(function() {\n            $typeahead.activate(index);\n          });\n        };\n        scope.$select = function(index, evt) {\n          scope.$$postDigest(function() {\n            $typeahead.select(index);\n          });\n        };\n        scope.$isVisible = function() {\n          return $typeahead.$isVisible();\n        };\n        $typeahead.update = function(matches) {\n          scope.$matches = matches;\n          if (scope.$activeIndex >= matches.length) {\n            scope.$activeIndex = options.autoSelect ? 0 : -1;\n          }\n          safeDigest(scope);\n          $$rAF($typeahead.$applyPlacement);\n        };\n        $typeahead.activate = function(index) {\n          scope.$activeIndex = index;\n        };\n        $typeahead.select = function(index) {\n          if (index === -1) return;\n          var value = scope.$matches[index].value;\n          controller.$setViewValue(value);\n          controller.$render();\n          scope.$resetMatches();\n          if (parentScope) parentScope.$digest();\n          scope.$emit(options.prefixEvent + '.select', value, index, $typeahead);\n          if (angular.isDefined(options.onSelect) && angular.isFunction(options.onSelect)) {\n            options.onSelect(value, index, $typeahead);\n          }\n        };\n        $typeahead.$isVisible = function() {\n          if (!options.minLength || !controller) {\n            return !!scope.$matches.length;\n          }\n          return scope.$matches.length && angular.isString(controller.$viewValue) && controller.$viewValue.length >= options.minLength;\n        };\n        $typeahead.$getIndex = function(value) {\n          var index;\n          for (index = scope.$matches.length; index--; ) {\n            if (angular.equals(scope.$matches[index].value, value)) break;\n          }\n          return index;\n        };\n        $typeahead.$onMouseDown = function(evt) {\n          evt.preventDefault();\n          evt.stopPropagation();\n        };\n        $typeahead.$$updateScrollTop = function(container, index) {\n          if (index > -1 && index < container.children.length) {\n            var active = container.children[index];\n            var clientTop = active.offsetTop;\n            var clientBottom = active.offsetTop + active.clientHeight;\n            var highWatermark = container.scrollTop;\n            var lowWatermark = container.scrollTop + container.clientHeight;\n            if (clientBottom >= highWatermark && clientTop < highWatermark) {\n              container.scrollTop = Math.max(0, container.scrollTop - container.clientHeight);\n            } else if (clientBottom > lowWatermark) {\n              container.scrollTop = clientTop;\n            }\n          }\n        };\n        $typeahead.$onKeyDown = function(evt) {\n          if (!/(38|40|13)/.test(evt.keyCode)) return;\n          if ($typeahead.$isVisible() && !(evt.keyCode === 13 && scope.$activeIndex === -1)) {\n            evt.preventDefault();\n            evt.stopPropagation();\n          }\n          if (evt.keyCode === 13 && scope.$matches.length) {\n            $typeahead.select(scope.$activeIndex);\n          } else if (evt.keyCode === 38 && scope.$activeIndex > 0) {\n            scope.$activeIndex--;\n          } else if (evt.keyCode === 40 && scope.$activeIndex < scope.$matches.length - 1) {\n            scope.$activeIndex++;\n          } else if (angular.isUndefined(scope.$activeIndex)) {\n            scope.$activeIndex = 0;\n          }\n          $typeahead.$$updateScrollTop($typeahead.$element[0], scope.$activeIndex);\n          scope.$digest();\n        };\n        var show = $typeahead.show;\n        $typeahead.show = function() {\n          show();\n          $timeout(function() {\n            if ($typeahead.$element) {\n              $typeahead.$element.on('mousedown', $typeahead.$onMouseDown);\n              if (options.keyboard) {\n                if (element) element.on('keydown', $typeahead.$onKeyDown);\n              }\n            }\n          }, 0, false);\n        };\n        var hide = $typeahead.hide;\n        $typeahead.hide = function() {\n          if ($typeahead.$element) $typeahead.$element.off('mousedown', $typeahead.$onMouseDown);\n          if (options.keyboard) {\n            if (element) element.off('keydown', $typeahead.$onKeyDown);\n          }\n          if (!options.autoSelect) {\n            $typeahead.activate(-1);\n          }\n          hide();\n        };\n        return $typeahead;\n      }\n      function safeDigest(scope) {\n        scope.$$phase || scope.$root && scope.$root.$$phase || scope.$digest();\n      }\n      TypeaheadFactory.defaults = defaults;\n      return TypeaheadFactory;\n    } ];\n  }).filter('bsAsyncFilter', [ '$filter', function($filter) {\n    return function(array, expression, comparator) {\n      if (array && angular.isFunction(array.then)) {\n        return array.then(function(results) {\n          return $filter('filter')(results, expression, comparator);\n        });\n      }\n      return $filter('filter')(array, expression, comparator);\n    };\n  } ]).directive('bsTypeahead', [ '$window', '$parse', '$q', '$typeahead', '$parseOptions', function($window, $parse, $q, $typeahead, $parseOptions) {\n    var defaults = $typeahead.defaults;\n    return {\n      restrict: 'EAC',\n      require: 'ngModel',\n      link: function postLink(scope, element, attr, controller) {\n        element.off('change');\n        var options = {\n          scope: scope\n        };\n        angular.forEach([ 'template', 'templateUrl', 'controller', 'controllerAs', 'placement', 'container', 'delay', 'trigger', 'keyboard', 'html', 'animation', 'filter', 'limit', 'minLength', 'watchOptions', 'selectMode', 'autoSelect', 'comparator', 'id', 'prefixEvent', 'prefixClass' ], function(key) {\n          if (angular.isDefined(attr[key])) options[key] = attr[key];\n        });\n        var falseValueRegExp = /^(false|0|)$/i;\n        angular.forEach([ 'html', 'container', 'trimValue', 'filter' ], function(key) {\n          if (angular.isDefined(attr[key]) && falseValueRegExp.test(attr[key])) options[key] = false;\n        });\n        angular.forEach([ 'onBeforeShow', 'onShow', 'onBeforeHide', 'onHide', 'onSelect' ], function(key) {\n          var bsKey = 'bs' + key.charAt(0).toUpperCase() + key.slice(1);\n          if (angular.isDefined(attr[bsKey])) {\n            options[key] = scope.$eval(attr[bsKey]);\n          }\n        });\n        if (!element.attr('autocomplete')) element.attr('autocomplete', 'off');\n        var filter = angular.isDefined(options.filter) ? options.filter : defaults.filter;\n        var limit = options.limit || defaults.limit;\n        var comparator = options.comparator || defaults.comparator;\n        var bsOptions = attr.bsOptions;\n        if (filter) {\n          bsOptions += ' | ' + filter + ':$viewValue';\n          if (comparator) bsOptions += ':' + comparator;\n        }\n        if (limit) bsOptions += ' | limitTo:' + limit;\n        var parsedOptions = $parseOptions(bsOptions);\n        var typeahead = $typeahead(element, controller, options);\n        if (options.watchOptions) {\n          var watchedOptions = parsedOptions.$match[7].replace(/\\|.+/, '').replace(/\\(.*\\)/g, '').trim();\n          scope.$watchCollection(watchedOptions, function(newValue, oldValue) {\n            parsedOptions.valuesFn(scope, controller).then(function(values) {\n              typeahead.update(values);\n              controller.$render();\n            });\n          });\n        }\n        scope.$watch(attr.ngModel, function(newValue, oldValue) {\n          scope.$modelValue = newValue;\n          parsedOptions.valuesFn(scope, controller).then(function(values) {\n            if (options.selectMode && !values.length && newValue.length > 0) {\n              controller.$setViewValue(controller.$viewValue.substring(0, controller.$viewValue.length - 1));\n              return;\n            }\n            if (values.length > limit) values = values.slice(0, limit);\n            typeahead.update(values);\n            controller.$render();\n          });\n        });\n        controller.$formatters.push(function(modelValue) {\n          var displayValue = parsedOptions.displayValue(modelValue);\n          if (displayValue) {\n            return displayValue;\n          }\n          if (angular.isDefined(modelValue) && typeof modelValue !== 'object') {\n            return modelValue;\n          }\n          return '';\n        });\n        controller.$render = function() {\n          if (controller.$isEmpty(controller.$viewValue)) {\n            return element.val('');\n          }\n          var index = typeahead.$getIndex(controller.$modelValue);\n          var selected = index !== -1 ? typeahead.$scope.$matches[index].label : controller.$viewValue;\n          selected = angular.isObject(selected) ? parsedOptions.displayValue(selected) : selected;\n          var value = selected ? selected.toString().replace(/<(?:.|\\n)*?>/gm, '') : '';\n          var ss = element[0].selectionStart;\n          var sd = element[0].selectionEnd;\n          element.val(options.trimValue === false ? value : value.trim());\n          element[0].setSelectionRange(ss, sd);\n        };\n        scope.$on('$destroy', function() {\n          if (typeahead) typeahead.destroy();\n          options = null;\n          typeahead = null;\n        });\n      }\n    };\n  } ]);\n  angular.module('mgcrea.ngStrap.tooltip', [ 'mgcrea.ngStrap.core', 'mgcrea.ngStrap.helpers.dimensions' ]).provider('$tooltip', function() {\n    var defaults = this.defaults = {\n      animation: 'am-fade',\n      customClass: '',\n      prefixClass: 'tooltip',\n      prefixEvent: 'tooltip',\n      container: false,\n      target: false,\n      placement: 'top',\n      templateUrl: 'tooltip/tooltip.tpl.html',\n      template: '',\n      titleTemplate: false,\n      trigger: 'hover focus',\n      keyboard: false,\n      html: false,\n      show: false,\n      title: '',\n      type: '',\n      delay: 0,\n      autoClose: false,\n      bsEnabled: true,\n      mouseDownPreventDefault: true,\n      mouseDownStopPropagation: true,\n      viewport: {\n        selector: 'body',\n        padding: 0\n      }\n    };\n    this.$get = [ '$window', '$rootScope', '$bsCompiler', '$q', '$templateCache', '$http', '$animate', '$sce', 'dimensions', '$$rAF', '$timeout', function($window, $rootScope, $bsCompiler, $q, $templateCache, $http, $animate, $sce, dimensions, $$rAF, $timeout) {\n      var isNative = /(ip[ao]d|iphone|android)/gi.test($window.navigator.userAgent);\n      var isTouch = 'createTouch' in $window.document && isNative;\n      var $body = angular.element($window.document);\n      function TooltipFactory(element, config) {\n        var $tooltip = {};\n        var options = $tooltip.$options = angular.extend({}, defaults, config);\n        var promise = $tooltip.$promise = $bsCompiler.compile(options);\n        var scope = $tooltip.$scope = options.scope && options.scope.$new() || $rootScope.$new();\n        var nodeName = element[0].nodeName.toLowerCase();\n        if (options.delay && angular.isString(options.delay)) {\n          var split = options.delay.split(',').map(parseFloat);\n          options.delay = split.length > 1 ? {\n            show: split[0],\n            hide: split[1]\n          } : split[0];\n        }\n        $tooltip.$id = options.id || element.attr('id') || '';\n        if (options.title) {\n          scope.title = $sce.trustAsHtml(options.title);\n        }\n        scope.$setEnabled = function(isEnabled) {\n          scope.$$postDigest(function() {\n            $tooltip.setEnabled(isEnabled);\n          });\n        };\n        scope.$hide = function() {\n          scope.$$postDigest(function() {\n            $tooltip.hide();\n          });\n        };\n        scope.$show = function() {\n          scope.$$postDigest(function() {\n            $tooltip.show();\n          });\n        };\n        scope.$toggle = function() {\n          scope.$$postDigest(function() {\n            $tooltip.toggle();\n          });\n        };\n        $tooltip.$isShown = scope.$isShown = false;\n        var timeout;\n        var hoverState;\n        var compileData;\n        var tipElement;\n        var tipContainer;\n        var tipScope;\n        promise.then(function(data) {\n          compileData = data;\n          $tooltip.init();\n        });\n        $tooltip.init = function() {\n          if (options.delay && angular.isNumber(options.delay)) {\n            options.delay = {\n              show: options.delay,\n              hide: options.delay\n            };\n          }\n          if (options.container === 'self') {\n            tipContainer = element;\n          } else if (angular.isElement(options.container)) {\n            tipContainer = options.container;\n          } else if (options.container) {\n            tipContainer = findElement(options.container);\n          }\n          bindTriggerEvents();\n          if (options.target) {\n            options.target = angular.isElement(options.target) ? options.target : findElement(options.target);\n          }\n          if (options.show) {\n            scope.$$postDigest(function() {\n              if (options.trigger === 'focus') {\n                element[0].focus();\n              } else {\n                $tooltip.show();\n              }\n            });\n          }\n        };\n        $tooltip.destroy = function() {\n          unbindTriggerEvents();\n          destroyTipElement();\n          scope.$destroy();\n        };\n        $tooltip.enter = function() {\n          clearTimeout(timeout);\n          hoverState = 'in';\n          if (!options.delay || !options.delay.show) {\n            return $tooltip.show();\n          }\n          timeout = setTimeout(function() {\n            if (hoverState === 'in') $tooltip.show();\n          }, options.delay.show);\n        };\n        $tooltip.show = function() {\n          if (!options.bsEnabled || $tooltip.$isShown) return;\n          scope.$emit(options.prefixEvent + '.show.before', $tooltip);\n          if (angular.isDefined(options.onBeforeShow) && angular.isFunction(options.onBeforeShow)) {\n            options.onBeforeShow($tooltip);\n          }\n          var parent;\n          var after;\n          if (options.container) {\n            parent = tipContainer;\n            if (tipContainer[0].lastChild) {\n              after = angular.element(tipContainer[0].lastChild);\n            } else {\n              after = null;\n            }\n          } else {\n            parent = null;\n            after = element;\n          }\n          if (tipElement) destroyTipElement();\n          tipScope = $tooltip.$scope.$new();\n          tipElement = $tooltip.$element = compileData.link(tipScope, function(clonedElement, scope) {});\n          tipElement.css({\n            top: '-9999px',\n            left: '-9999px',\n            right: 'auto',\n            display: 'block',\n            visibility: 'hidden'\n          });\n          if (options.animation) tipElement.addClass(options.animation);\n          if (options.type) tipElement.addClass(options.prefixClass + '-' + options.type);\n          if (options.customClass) tipElement.addClass(options.customClass);\n          if (after) {\n            after.after(tipElement);\n          } else {\n            parent.prepend(tipElement);\n          }\n          $tooltip.$isShown = scope.$isShown = true;\n          safeDigest(scope);\n          $tooltip.$applyPlacement();\n          if (angular.version.minor <= 2) {\n            $animate.enter(tipElement, parent, after, enterAnimateCallback);\n          } else {\n            $animate.enter(tipElement, parent, after).then(enterAnimateCallback);\n          }\n          safeDigest(scope);\n          $$rAF(function() {\n            if (tipElement) tipElement.css({\n              visibility: 'visible'\n            });\n            if (options.keyboard) {\n              if (options.trigger !== 'focus') {\n                $tooltip.focus();\n              }\n              bindKeyboardEvents();\n            }\n          });\n          if (options.autoClose) {\n            bindAutoCloseEvents();\n          }\n        };\n        function enterAnimateCallback() {\n          scope.$emit(options.prefixEvent + '.show', $tooltip);\n          if (angular.isDefined(options.onShow) && angular.isFunction(options.onShow)) {\n            options.onShow($tooltip);\n          }\n        }\n        $tooltip.leave = function() {\n          clearTimeout(timeout);\n          hoverState = 'out';\n          if (!options.delay || !options.delay.hide) {\n            return $tooltip.hide();\n          }\n          timeout = setTimeout(function() {\n            if (hoverState === 'out') {\n              $tooltip.hide();\n            }\n          }, options.delay.hide);\n        };\n        var _blur;\n        var _tipToHide;\n        $tooltip.hide = function(blur) {\n          if (!$tooltip.$isShown) return;\n          scope.$emit(options.prefixEvent + '.hide.before', $tooltip);\n          if (angular.isDefined(options.onBeforeHide) && angular.isFunction(options.onBeforeHide)) {\n            options.onBeforeHide($tooltip);\n          }\n          _blur = blur;\n          _tipToHide = tipElement;\n          if (tipElement !== null) {\n            if (angular.version.minor <= 2) {\n              $animate.leave(tipElement, leaveAnimateCallback);\n            } else {\n              $animate.leave(tipElement).then(leaveAnimateCallback);\n            }\n          }\n          $tooltip.$isShown = scope.$isShown = false;\n          safeDigest(scope);\n          if (options.keyboard && tipElement !== null) {\n            unbindKeyboardEvents();\n          }\n          if (options.autoClose && tipElement !== null) {\n            unbindAutoCloseEvents();\n          }\n        };\n        function leaveAnimateCallback() {\n          scope.$emit(options.prefixEvent + '.hide', $tooltip);\n          if (angular.isDefined(options.onHide) && angular.isFunction(options.onHide)) {\n            options.onHide($tooltip);\n          }\n          if (tipElement === _tipToHide) {\n            if (_blur && options.trigger === 'focus') {\n              return element[0].blur();\n            }\n            destroyTipElement();\n          }\n        }\n        $tooltip.toggle = function(evt) {\n          if (evt) {\n            evt.preventDefault();\n          }\n          if ($tooltip.$isShown) {\n            $tooltip.leave();\n          } else {\n            $tooltip.enter();\n          }\n        };\n        $tooltip.focus = function() {\n          tipElement[0].focus();\n        };\n        $tooltip.setEnabled = function(isEnabled) {\n          options.bsEnabled = isEnabled;\n        };\n        $tooltip.setViewport = function(viewport) {\n          options.viewport = viewport;\n        };\n        $tooltip.$applyPlacement = function() {\n          if (!tipElement) return;\n          var placement = options.placement;\n          var autoToken = /\\s?auto?\\s?/i;\n          var autoPlace = autoToken.test(placement);\n          if (autoPlace) {\n            placement = placement.replace(autoToken, '') || defaults.placement;\n          }\n          tipElement.addClass(options.placement);\n          var elementPosition = getPosition();\n          var tipWidth = tipElement.prop('offsetWidth');\n          var tipHeight = tipElement.prop('offsetHeight');\n          $tooltip.$viewport = options.viewport && findElement(options.viewport.selector || options.viewport);\n          if (autoPlace) {\n            var originalPlacement = placement;\n            var viewportPosition = getPosition($tooltip.$viewport);\n            if (/bottom/.test(originalPlacement) && elementPosition.bottom + tipHeight > viewportPosition.bottom) {\n              placement = originalPlacement.replace('bottom', 'top');\n            } else if (/top/.test(originalPlacement) && elementPosition.top - tipHeight < viewportPosition.top) {\n              placement = originalPlacement.replace('top', 'bottom');\n            }\n            if (/left/.test(originalPlacement) && elementPosition.left - tipWidth < viewportPosition.left) {\n              placement = placement.replace('left', 'right');\n            } else if (/right/.test(originalPlacement) && elementPosition.right + tipWidth > viewportPosition.width) {\n              placement = placement.replace('right', 'left');\n            }\n            tipElement.removeClass(originalPlacement).addClass(placement);\n          }\n          var tipPosition = getCalculatedOffset(placement, elementPosition, tipWidth, tipHeight);\n          applyPlacement(tipPosition, placement);\n        };\n        $tooltip.$onKeyUp = function(evt) {\n          if (evt.which === 27 && $tooltip.$isShown) {\n            $tooltip.hide();\n            evt.stopPropagation();\n          }\n        };\n        $tooltip.$onFocusKeyUp = function(evt) {\n          if (evt.which === 27) {\n            element[0].blur();\n            evt.stopPropagation();\n          }\n        };\n        $tooltip.$onFocusElementMouseDown = function(evt) {\n          if (options.mouseDownPreventDefault) {\n            evt.preventDefault();\n          }\n          if (options.mouseDownStopPropagation) {\n            evt.stopPropagation();\n          }\n          if ($tooltip.$isShown) {\n            element[0].blur();\n          } else {\n            element[0].focus();\n          }\n        };\n        function bindTriggerEvents() {\n          var triggers = options.trigger.split(' ');\n          angular.forEach(triggers, function(trigger) {\n            if (trigger === 'click' || trigger === 'contextmenu') {\n              element.on(trigger, $tooltip.toggle);\n            } else if (trigger !== 'manual') {\n              element.on(trigger === 'hover' ? 'mouseenter' : 'focus', $tooltip.enter);\n              element.on(trigger === 'hover' ? 'mouseleave' : 'blur', $tooltip.leave);\n              if (nodeName === 'button' && trigger !== 'hover') {\n                element.on(isTouch ? 'touchstart' : 'mousedown', $tooltip.$onFocusElementMouseDown);\n              }\n            }\n          });\n        }\n        function unbindTriggerEvents() {\n          var triggers = options.trigger.split(' ');\n          for (var i = triggers.length; i--; ) {\n            var trigger = triggers[i];\n            if (trigger === 'click' || trigger === 'contextmenu') {\n              element.off(trigger, $tooltip.toggle);\n            } else if (trigger !== 'manual') {\n              element.off(trigger === 'hover' ? 'mouseenter' : 'focus', $tooltip.enter);\n              element.off(trigger === 'hover' ? 'mouseleave' : 'blur', $tooltip.leave);\n              if (nodeName === 'button' && trigger !== 'hover') {\n                element.off(isTouch ? 'touchstart' : 'mousedown', $tooltip.$onFocusElementMouseDown);\n              }\n            }\n          }\n        }\n        function bindKeyboardEvents() {\n          if (options.trigger !== 'focus') {\n            tipElement.on('keyup', $tooltip.$onKeyUp);\n          } else {\n            element.on('keyup', $tooltip.$onFocusKeyUp);\n          }\n        }\n        function unbindKeyboardEvents() {\n          if (options.trigger !== 'focus') {\n            tipElement.off('keyup', $tooltip.$onKeyUp);\n          } else {\n            element.off('keyup', $tooltip.$onFocusKeyUp);\n          }\n        }\n        var _autoCloseEventsBinded = false;\n        function bindAutoCloseEvents() {\n          $timeout(function() {\n            tipElement.on('click', stopEventPropagation);\n            $body.on('click', $tooltip.hide);\n            _autoCloseEventsBinded = true;\n          }, 0, false);\n        }\n        function unbindAutoCloseEvents() {\n          if (_autoCloseEventsBinded) {\n            tipElement.off('click', stopEventPropagation);\n            $body.off('click', $tooltip.hide);\n            _autoCloseEventsBinded = false;\n          }\n        }\n        function stopEventPropagation(event) {\n          event.stopPropagation();\n        }\n        function getPosition($element) {\n          $element = $element || (options.target || element);\n          var el = $element[0];\n          var isBody = el.tagName === 'BODY';\n          var elRect = el.getBoundingClientRect();\n          var rect = {};\n          for (var p in elRect) {\n            rect[p] = elRect[p];\n          }\n          if (rect.width === null) {\n            rect = angular.extend({}, rect, {\n              width: elRect.right - elRect.left,\n              height: elRect.bottom - elRect.top\n            });\n          }\n          var elOffset = isBody ? {\n            top: 0,\n            left: 0\n          } : dimensions.offset(el);\n          var scroll = {\n            scroll: isBody ? document.documentElement.scrollTop || document.body.scrollTop : $element.prop('scrollTop') || 0\n          };\n          var outerDims = isBody ? {\n            width: document.documentElement.clientWidth,\n            height: $window.innerHeight\n          } : null;\n          return angular.extend({}, rect, scroll, outerDims, elOffset);\n        }\n        function getCalculatedOffset(placement, position, actualWidth, actualHeight) {\n          var offset;\n          var split = placement.split('-');\n          switch (split[0]) {\n           case 'right':\n            offset = {\n              top: position.top + position.height / 2 - actualHeight / 2,\n              left: position.left + position.width\n            };\n            break;\n\n           case 'bottom':\n            offset = {\n              top: position.top + position.height,\n              left: position.left + position.width / 2 - actualWidth / 2\n            };\n            break;\n\n           case 'left':\n            offset = {\n              top: position.top + position.height / 2 - actualHeight / 2,\n              left: position.left - actualWidth\n            };\n            break;\n\n           default:\n            offset = {\n              top: position.top - actualHeight,\n              left: position.left + position.width / 2 - actualWidth / 2\n            };\n            break;\n          }\n          if (!split[1]) {\n            return offset;\n          }\n          if (split[0] === 'top' || split[0] === 'bottom') {\n            switch (split[1]) {\n             case 'left':\n              offset.left = position.left;\n              break;\n\n             case 'right':\n              offset.left = position.left + position.width - actualWidth;\n              break;\n\n             default:\n              break;\n            }\n          } else if (split[0] === 'left' || split[0] === 'right') {\n            switch (split[1]) {\n             case 'top':\n              offset.top = position.top - actualHeight + position.height;\n              break;\n\n             case 'bottom':\n              offset.top = position.top;\n              break;\n\n             default:\n              break;\n            }\n          }\n          return offset;\n        }\n        function applyPlacement(offset, placement) {\n          var tip = tipElement[0];\n          var width = tip.offsetWidth;\n          var height = tip.offsetHeight;\n          var marginTop = parseInt(dimensions.css(tip, 'margin-top'), 10);\n          var marginLeft = parseInt(dimensions.css(tip, 'margin-left'), 10);\n          if (isNaN(marginTop)) marginTop = 0;\n          if (isNaN(marginLeft)) marginLeft = 0;\n          offset.top = offset.top + marginTop;\n          offset.left = offset.left + marginLeft;\n          dimensions.setOffset(tip, angular.extend({\n            using: function(props) {\n              tipElement.css({\n                top: Math.round(props.top) + 'px',\n                left: Math.round(props.left) + 'px',\n                right: ''\n              });\n            }\n          }, offset), 0);\n          var actualWidth = tip.offsetWidth;\n          var actualHeight = tip.offsetHeight;\n          if (placement === 'top' && actualHeight !== height) {\n            offset.top = offset.top + height - actualHeight;\n          }\n          if (/top-left|top-right|bottom-left|bottom-right/.test(placement)) return;\n          var delta = getViewportAdjustedDelta(placement, offset, actualWidth, actualHeight);\n          if (delta.left) {\n            offset.left += delta.left;\n          } else {\n            offset.top += delta.top;\n          }\n          dimensions.setOffset(tip, offset);\n          if (/top|right|bottom|left/.test(placement)) {\n            var isVertical = /top|bottom/.test(placement);\n            var arrowDelta = isVertical ? delta.left * 2 - width + actualWidth : delta.top * 2 - height + actualHeight;\n            var arrowOffsetPosition = isVertical ? 'offsetWidth' : 'offsetHeight';\n            replaceArrow(arrowDelta, tip[arrowOffsetPosition], isVertical);\n          }\n        }\n        function getViewportAdjustedDelta(placement, position, actualWidth, actualHeight) {\n          var delta = {\n            top: 0,\n            left: 0\n          };\n          if (!$tooltip.$viewport) return delta;\n          var viewportPadding = options.viewport && options.viewport.padding || 0;\n          var viewportDimensions = getPosition($tooltip.$viewport);\n          if (/right|left/.test(placement)) {\n            var topEdgeOffset = position.top - viewportPadding - viewportDimensions.scroll;\n            var bottomEdgeOffset = position.top + viewportPadding - viewportDimensions.scroll + actualHeight;\n            if (topEdgeOffset < viewportDimensions.top) {\n              delta.top = viewportDimensions.top - topEdgeOffset;\n            } else if (bottomEdgeOffset > viewportDimensions.top + viewportDimensions.height) {\n              delta.top = viewportDimensions.top + viewportDimensions.height - bottomEdgeOffset;\n            }\n          } else {\n            var leftEdgeOffset = position.left - viewportPadding;\n            var rightEdgeOffset = position.left + viewportPadding + actualWidth;\n            if (leftEdgeOffset < viewportDimensions.left) {\n              delta.left = viewportDimensions.left - leftEdgeOffset;\n            } else if (rightEdgeOffset > viewportDimensions.right) {\n              delta.left = viewportDimensions.left + viewportDimensions.width - rightEdgeOffset;\n            }\n          }\n          return delta;\n        }\n        function replaceArrow(delta, dimension, isHorizontal) {\n          var $arrow = findElement('.tooltip-arrow, .arrow', tipElement[0]);\n          $arrow.css(isHorizontal ? 'left' : 'top', 50 * (1 - delta / dimension) + '%').css(isHorizontal ? 'top' : 'left', '');\n        }\n        function destroyTipElement() {\n          clearTimeout(timeout);\n          if ($tooltip.$isShown && tipElement !== null) {\n            if (options.autoClose) {\n              unbindAutoCloseEvents();\n            }\n            if (options.keyboard) {\n              unbindKeyboardEvents();\n            }\n          }\n          if (tipScope) {\n            tipScope.$destroy();\n            tipScope = null;\n          }\n          if (tipElement) {\n            tipElement.remove();\n            tipElement = $tooltip.$element = null;\n          }\n        }\n        return $tooltip;\n      }\n      function safeDigest(scope) {\n        scope.$$phase || scope.$root && scope.$root.$$phase || scope.$digest();\n      }\n      function findElement(query, element) {\n        return angular.element((element || document).querySelectorAll(query));\n      }\n      return TooltipFactory;\n    } ];\n  }).directive('bsTooltip', [ '$window', '$location', '$sce', '$parse', '$tooltip', '$$rAF', function($window, $location, $sce, $parse, $tooltip, $$rAF) {\n    return {\n      restrict: 'EAC',\n      scope: true,\n      link: function postLink(scope, element, attr, transclusion) {\n        var tooltip;\n        var options = {\n          scope: scope\n        };\n        angular.forEach([ 'template', 'templateUrl', 'controller', 'controllerAs', 'titleTemplate', 'placement', 'container', 'delay', 'trigger', 'html', 'animation', 'backdropAnimation', 'type', 'customClass', 'id' ], function(key) {\n          if (angular.isDefined(attr[key])) options[key] = attr[key];\n        });\n        var falseValueRegExp = /^(false|0|)$/i;\n        angular.forEach([ 'html', 'container' ], function(key) {\n          if (angular.isDefined(attr[key]) && falseValueRegExp.test(attr[key])) {\n            options[key] = false;\n          }\n        });\n        angular.forEach([ 'onBeforeShow', 'onShow', 'onBeforeHide', 'onHide' ], function(key) {\n          var bsKey = 'bs' + key.charAt(0).toUpperCase() + key.slice(1);\n          if (angular.isDefined(attr[bsKey])) {\n            options[key] = scope.$eval(attr[bsKey]);\n          }\n        });\n        var dataTarget = element.attr('data-target');\n        if (angular.isDefined(dataTarget)) {\n          if (falseValueRegExp.test(dataTarget)) {\n            options.target = false;\n          } else {\n            options.target = dataTarget;\n          }\n        }\n        if (!scope.hasOwnProperty('title')) {\n          scope.title = '';\n        }\n        attr.$observe('title', function(newValue) {\n          if (angular.isDefined(newValue) || !scope.hasOwnProperty('title')) {\n            var oldValue = scope.title;\n            scope.title = $sce.trustAsHtml(newValue);\n            if (angular.isDefined(oldValue)) {\n              $$rAF(function() {\n                if (tooltip) tooltip.$applyPlacement();\n              });\n            }\n          }\n        });\n        attr.$observe('disabled', function(newValue) {\n          if (newValue && tooltip.$isShown) {\n            tooltip.hide();\n          }\n        });\n        if (attr.bsTooltip) {\n          scope.$watch(attr.bsTooltip, function(newValue, oldValue) {\n            if (angular.isObject(newValue)) {\n              angular.extend(scope, newValue);\n            } else {\n              scope.title = newValue;\n            }\n            if (angular.isDefined(oldValue)) {\n              $$rAF(function() {\n                if (tooltip) tooltip.$applyPlacement();\n              });\n            }\n          }, true);\n        }\n        if (attr.bsShow) {\n          scope.$watch(attr.bsShow, function(newValue, oldValue) {\n            if (!tooltip || !angular.isDefined(newValue)) return;\n            if (angular.isString(newValue)) newValue = !!newValue.match(/true|,?(tooltip),?/i);\n            if (newValue === true) {\n              tooltip.show();\n            } else {\n              tooltip.hide();\n            }\n          });\n        }\n        if (attr.bsEnabled) {\n          scope.$watch(attr.bsEnabled, function(newValue, oldValue) {\n            if (!tooltip || !angular.isDefined(newValue)) return;\n            if (angular.isString(newValue)) newValue = !!newValue.match(/true|1|,?(tooltip),?/i);\n            if (newValue === false) {\n              tooltip.setEnabled(false);\n            } else {\n              tooltip.setEnabled(true);\n            }\n          });\n        }\n        if (attr.viewport) {\n          scope.$watch(attr.viewport, function(newValue) {\n            if (!tooltip || !angular.isDefined(newValue)) return;\n            tooltip.setViewport(newValue);\n          });\n        }\n        tooltip = $tooltip(element, options);\n        scope.$on('$destroy', function() {\n          if (tooltip) tooltip.destroy();\n          options = null;\n          tooltip = null;\n        });\n      }\n    };\n  } ]);\n  angular.module('mgcrea.ngStrap.timepicker', [ 'mgcrea.ngStrap.helpers.dateParser', 'mgcrea.ngStrap.helpers.dateFormatter', 'mgcrea.ngStrap.tooltip' ]).provider('$timepicker', function() {\n    var defaults = this.defaults = {\n      animation: 'am-fade',\n      defaultDate: 'auto',\n      prefixClass: 'timepicker',\n      placement: 'bottom-left',\n      templateUrl: 'timepicker/timepicker.tpl.html',\n      trigger: 'focus',\n      container: false,\n      keyboard: true,\n      html: false,\n      delay: 0,\n      useNative: true,\n      timeType: 'date',\n      timeFormat: 'shortTime',\n      timezone: null,\n      modelTimeFormat: null,\n      autoclose: false,\n      minTime: -Infinity,\n      maxTime: +Infinity,\n      length: 5,\n      hourStep: 1,\n      minuteStep: 5,\n      secondStep: 5,\n      roundDisplay: false,\n      iconUp: 'glyphicon glyphicon-chevron-up',\n      iconDown: 'glyphicon glyphicon-chevron-down',\n      arrowBehavior: 'pager'\n    };\n    this.$get = [ '$window', '$document', '$rootScope', '$sce', '$dateFormatter', '$tooltip', '$timeout', function($window, $document, $rootScope, $sce, $dateFormatter, $tooltip, $timeout) {\n      var isNative = /(ip[ao]d|iphone|android)/gi.test($window.navigator.userAgent);\n      var isTouch = 'createTouch' in $window.document && isNative;\n      if (!defaults.lang) {\n        defaults.lang = $dateFormatter.getDefaultLocale();\n      }\n      function timepickerFactory(element, controller, config) {\n        var $timepicker = $tooltip(element, angular.extend({}, defaults, config));\n        var parentScope = config.scope;\n        var options = $timepicker.$options;\n        var scope = $timepicker.$scope;\n        var lang = options.lang;\n        var formatDate = function(date, format, timezone) {\n          return $dateFormatter.formatDate(date, format, lang, timezone);\n        };\n        function floorMinutes(time) {\n          var coeff = 1e3 * 60 * options.minuteStep;\n          return new Date(Math.floor(time.getTime() / coeff) * coeff);\n        }\n        var selectedIndex = 0;\n        var defaultDate = options.roundDisplay ? floorMinutes(new Date()) : new Date();\n        var startDate = controller.$dateValue || defaultDate;\n        var viewDate = {\n          hour: startDate.getHours(),\n          meridian: startDate.getHours() < 12,\n          minute: startDate.getMinutes(),\n          second: startDate.getSeconds(),\n          millisecond: startDate.getMilliseconds()\n        };\n        var format = $dateFormatter.getDatetimeFormat(options.timeFormat, lang);\n        var hoursFormat = $dateFormatter.hoursFormat(format);\n        var timeSeparator = $dateFormatter.timeSeparator(format);\n        var minutesFormat = $dateFormatter.minutesFormat(format);\n        var secondsFormat = $dateFormatter.secondsFormat(format);\n        var showSeconds = $dateFormatter.showSeconds(format);\n        var showAM = $dateFormatter.showAM(format);\n        scope.$iconUp = options.iconUp;\n        scope.$iconDown = options.iconDown;\n        scope.$select = function(date, index) {\n          $timepicker.select(date, index);\n        };\n        scope.$moveIndex = function(value, index) {\n          $timepicker.$moveIndex(value, index);\n        };\n        scope.$switchMeridian = function(date) {\n          $timepicker.switchMeridian(date);\n        };\n        $timepicker.update = function(date) {\n          if (angular.isDate(date) && !isNaN(date.getTime())) {\n            $timepicker.$date = date;\n            angular.extend(viewDate, {\n              hour: date.getHours(),\n              minute: date.getMinutes(),\n              second: date.getSeconds(),\n              millisecond: date.getMilliseconds()\n            });\n            $timepicker.$build();\n          } else if (!$timepicker.$isBuilt) {\n            $timepicker.$build();\n          }\n        };\n        $timepicker.select = function(date, index, keep) {\n          if (!controller.$dateValue || isNaN(controller.$dateValue.getTime())) {\n            controller.$dateValue = options.defaultDate === 'today' ? new Date() : new Date(1970, 0, 1);\n          }\n          if (!angular.isDate(date)) date = new Date(date);\n          if (index === 0) controller.$dateValue.setHours(date.getHours()); else if (index === 1) controller.$dateValue.setMinutes(date.getMinutes()); else if (index === 2) controller.$dateValue.setSeconds(date.getSeconds());\n          controller.$setViewValue(angular.copy(controller.$dateValue));\n          controller.$render();\n          if (options.autoclose && !keep) {\n            $timeout(function() {\n              $timepicker.hide(true);\n            });\n          }\n        };\n        $timepicker.switchMeridian = function(date) {\n          if (!controller.$dateValue || isNaN(controller.$dateValue.getTime())) {\n            return;\n          }\n          var hours = (date || controller.$dateValue).getHours();\n          controller.$dateValue.setHours(hours < 12 ? hours + 12 : hours - 12);\n          controller.$setViewValue(angular.copy(controller.$dateValue));\n          controller.$render();\n        };\n        $timepicker.$build = function() {\n          var i;\n          var midIndex = scope.midIndex = parseInt(options.length / 2, 10);\n          var hours = [];\n          var hour;\n          for (i = 0; i < options.length; i++) {\n            hour = new Date(1970, 0, 1, viewDate.hour - (midIndex - i) * options.hourStep);\n            hours.push({\n              date: hour,\n              label: formatDate(hour, hoursFormat),\n              selected: $timepicker.$date && $timepicker.$isSelected(hour, 0),\n              disabled: $timepicker.$isDisabled(hour, 0)\n            });\n          }\n          var minutes = [];\n          var minute;\n          for (i = 0; i < options.length; i++) {\n            minute = new Date(1970, 0, 1, 0, viewDate.minute - (midIndex - i) * options.minuteStep);\n            minutes.push({\n              date: minute,\n              label: formatDate(minute, minutesFormat),\n              selected: $timepicker.$date && $timepicker.$isSelected(minute, 1),\n              disabled: $timepicker.$isDisabled(minute, 1)\n            });\n          }\n          var seconds = [];\n          var second;\n          for (i = 0; i < options.length; i++) {\n            second = new Date(1970, 0, 1, 0, 0, viewDate.second - (midIndex - i) * options.secondStep);\n            seconds.push({\n              date: second,\n              label: formatDate(second, secondsFormat),\n              selected: $timepicker.$date && $timepicker.$isSelected(second, 2),\n              disabled: $timepicker.$isDisabled(second, 2)\n            });\n          }\n          var rows = [];\n          for (i = 0; i < options.length; i++) {\n            if (showSeconds) {\n              rows.push([ hours[i], minutes[i], seconds[i] ]);\n            } else {\n              rows.push([ hours[i], minutes[i] ]);\n            }\n          }\n          scope.rows = rows;\n          scope.showSeconds = showSeconds;\n          scope.showAM = showAM;\n          scope.isAM = ($timepicker.$date || hours[midIndex].date).getHours() < 12;\n          scope.timeSeparator = timeSeparator;\n          $timepicker.$isBuilt = true;\n        };\n        $timepicker.$isSelected = function(date, index) {\n          if (!$timepicker.$date) return false; else if (index === 0) {\n            return date.getHours() === $timepicker.$date.getHours();\n          } else if (index === 1) {\n            return date.getMinutes() === $timepicker.$date.getMinutes();\n          } else if (index === 2) {\n            return date.getSeconds() === $timepicker.$date.getSeconds();\n          }\n        };\n        $timepicker.$isDisabled = function(date, index) {\n          var selectedTime;\n          if (index === 0) {\n            selectedTime = date.getTime() + viewDate.minute * 6e4 + viewDate.second * 1e3;\n          } else if (index === 1) {\n            selectedTime = date.getTime() + viewDate.hour * 36e5 + viewDate.second * 1e3;\n          } else if (index === 2) {\n            selectedTime = date.getTime() + viewDate.hour * 36e5 + viewDate.minute * 6e4;\n          }\n          return selectedTime < options.minTime * 1 || selectedTime > options.maxTime * 1;\n        };\n        scope.$arrowAction = function(value, index) {\n          if (options.arrowBehavior === 'picker') {\n            $timepicker.$setTimeByStep(value, index);\n          } else {\n            $timepicker.$moveIndex(value, index);\n          }\n        };\n        $timepicker.$setTimeByStep = function(value, index) {\n          var newDate = new Date($timepicker.$date || startDate);\n          var hours = newDate.getHours();\n          var minutes = newDate.getMinutes();\n          var seconds = newDate.getSeconds();\n          if (index === 0) {\n            newDate.setHours(hours - parseInt(options.hourStep, 10) * value);\n          } else if (index === 1) {\n            newDate.setMinutes(minutes - parseInt(options.minuteStep, 10) * value);\n          } else if (index === 2) {\n            newDate.setSeconds(seconds - parseInt(options.secondStep, 10) * value);\n          }\n          $timepicker.select(newDate, index, true);\n        };\n        $timepicker.$moveIndex = function(value, index) {\n          var targetDate;\n          if (index === 0) {\n            targetDate = new Date(1970, 0, 1, viewDate.hour + value * options.length, viewDate.minute, viewDate.second);\n            angular.extend(viewDate, {\n              hour: targetDate.getHours()\n            });\n          } else if (index === 1) {\n            targetDate = new Date(1970, 0, 1, viewDate.hour, viewDate.minute + value * options.length * options.minuteStep, viewDate.second);\n            angular.extend(viewDate, {\n              minute: targetDate.getMinutes()\n            });\n          } else if (index === 2) {\n            targetDate = new Date(1970, 0, 1, viewDate.hour, viewDate.minute, viewDate.second + value * options.length * options.secondStep);\n            angular.extend(viewDate, {\n              second: targetDate.getSeconds()\n            });\n          }\n          $timepicker.$build();\n        };\n        $timepicker.$onMouseDown = function(evt) {\n          if (evt.target.nodeName.toLowerCase() !== 'input') evt.preventDefault();\n          evt.stopPropagation();\n          if (isTouch) {\n            var targetEl = angular.element(evt.target);\n            if (targetEl[0].nodeName.toLowerCase() !== 'button') {\n              targetEl = targetEl.parent();\n            }\n            targetEl.triggerHandler('click');\n          }\n        };\n        $timepicker.$onKeyDown = function(evt) {\n          if (!/(38|37|39|40|13)/.test(evt.keyCode) || evt.shiftKey || evt.altKey) return;\n          evt.preventDefault();\n          evt.stopPropagation();\n          if (evt.keyCode === 13) {\n            $timepicker.hide(true);\n            return;\n          }\n          var newDate = new Date($timepicker.$date);\n          var hours = newDate.getHours();\n          var hoursLength = formatDate(newDate, hoursFormat).length;\n          var minutes = newDate.getMinutes();\n          var minutesLength = formatDate(newDate, minutesFormat).length;\n          var seconds = newDate.getSeconds();\n          var secondsLength = formatDate(newDate, secondsFormat).length;\n          var sepLength = 1;\n          var lateralMove = /(37|39)/.test(evt.keyCode);\n          var count = 2 + showSeconds * 1 + showAM * 1;\n          if (lateralMove) {\n            if (evt.keyCode === 37) selectedIndex = selectedIndex < 1 ? count - 1 : selectedIndex - 1; else if (evt.keyCode === 39) selectedIndex = selectedIndex < count - 1 ? selectedIndex + 1 : 0;\n          }\n          var selectRange = [ 0, hoursLength ];\n          var incr = 0;\n          if (evt.keyCode === 38) incr = -1;\n          if (evt.keyCode === 40) incr = +1;\n          var isSeconds = selectedIndex === 2 && showSeconds;\n          var isMeridian = selectedIndex === 2 && !showSeconds || selectedIndex === 3 && showSeconds;\n          if (selectedIndex === 0) {\n            newDate.setHours(hours + incr * parseInt(options.hourStep, 10));\n            hoursLength = formatDate(newDate, hoursFormat).length;\n            selectRange = [ 0, hoursLength ];\n          } else if (selectedIndex === 1) {\n            newDate.setMinutes(minutes + incr * parseInt(options.minuteStep, 10));\n            minutesLength = formatDate(newDate, minutesFormat).length;\n            selectRange = [ hoursLength + sepLength, minutesLength ];\n          } else if (isSeconds) {\n            newDate.setSeconds(seconds + incr * parseInt(options.secondStep, 10));\n            secondsLength = formatDate(newDate, secondsFormat).length;\n            selectRange = [ hoursLength + sepLength + minutesLength + sepLength, secondsLength ];\n          } else if (isMeridian) {\n            if (!lateralMove) $timepicker.switchMeridian();\n            selectRange = [ hoursLength + sepLength + minutesLength + sepLength + (secondsLength + sepLength) * showSeconds, 2 ];\n          }\n          $timepicker.select(newDate, selectedIndex, true);\n          createSelection(selectRange[0], selectRange[1]);\n          parentScope.$digest();\n        };\n        function createSelection(start, length) {\n          var end = start + length;\n          if (element[0].createTextRange) {\n            var selRange = element[0].createTextRange();\n            selRange.collapse(true);\n            selRange.moveStart('character', start);\n            selRange.moveEnd('character', end);\n            selRange.select();\n          } else if (element[0].setSelectionRange) {\n            element[0].setSelectionRange(start, end);\n          } else if (angular.isUndefined(element[0].selectionStart)) {\n            element[0].selectionStart = start;\n            element[0].selectionEnd = end;\n          }\n        }\n        function focusElement() {\n          element[0].focus();\n        }\n        var _init = $timepicker.init;\n        $timepicker.init = function() {\n          if (isNative && options.useNative) {\n            element.prop('type', 'time');\n            element.css('-webkit-appearance', 'textfield');\n            return;\n          } else if (isTouch) {\n            element.prop('type', 'text');\n            element.attr('readonly', 'true');\n            element.on('click', focusElement);\n          }\n          _init();\n        };\n        var _destroy = $timepicker.destroy;\n        $timepicker.destroy = function() {\n          if (isNative && options.useNative) {\n            element.off('click', focusElement);\n          }\n          _destroy();\n        };\n        var _show = $timepicker.show;\n        $timepicker.show = function() {\n          if (!isTouch && element.attr('readonly') || element.attr('disabled')) return;\n          _show();\n          $timeout(function() {\n            if ($timepicker.$element) $timepicker.$element.on(isTouch ? 'touchstart' : 'mousedown', $timepicker.$onMouseDown);\n            if (options.keyboard) {\n              if (element) element.on('keydown', $timepicker.$onKeyDown);\n            }\n          }, 0, false);\n        };\n        var _hide = $timepicker.hide;\n        $timepicker.hide = function(blur) {\n          if (!$timepicker.$isShown) return;\n          if ($timepicker.$element) $timepicker.$element.off(isTouch ? 'touchstart' : 'mousedown', $timepicker.$onMouseDown);\n          if (options.keyboard) {\n            if (element) element.off('keydown', $timepicker.$onKeyDown);\n          }\n          _hide(blur);\n        };\n        return $timepicker;\n      }\n      timepickerFactory.defaults = defaults;\n      return timepickerFactory;\n    } ];\n  }).directive('bsTimepicker', [ '$window', '$parse', '$q', '$dateFormatter', '$dateParser', '$timepicker', function($window, $parse, $q, $dateFormatter, $dateParser, $timepicker) {\n    var defaults = $timepicker.defaults;\n    var isNative = /(ip[ao]d|iphone|android)/gi.test($window.navigator.userAgent);\n    return {\n      restrict: 'EAC',\n      require: 'ngModel',\n      link: function postLink(scope, element, attr, controller) {\n        var options = {\n          scope: scope\n        };\n        angular.forEach([ 'template', 'templateUrl', 'controller', 'controllerAs', 'placement', 'container', 'delay', 'trigger', 'keyboard', 'html', 'animation', 'autoclose', 'timeType', 'timeFormat', 'timezone', 'modelTimeFormat', 'useNative', 'hourStep', 'minuteStep', 'secondStep', 'length', 'arrowBehavior', 'iconUp', 'iconDown', 'roundDisplay', 'id', 'prefixClass', 'prefixEvent', 'defaultDate' ], function(key) {\n          if (angular.isDefined(attr[key])) options[key] = attr[key];\n        });\n        var falseValueRegExp = /^(false|0|)$/i;\n        angular.forEach([ 'html', 'container', 'autoclose', 'useNative', 'roundDisplay' ], function(key) {\n          if (angular.isDefined(attr[key]) && falseValueRegExp.test(attr[key])) {\n            options[key] = false;\n          }\n        });\n        angular.forEach([ 'onBeforeShow', 'onShow', 'onBeforeHide', 'onHide' ], function(key) {\n          var bsKey = 'bs' + key.charAt(0).toUpperCase() + key.slice(1);\n          if (angular.isDefined(attr[bsKey])) {\n            options[key] = scope.$eval(attr[bsKey]);\n          }\n        });\n        if (isNative && (options.useNative || defaults.useNative)) options.timeFormat = 'HH:mm';\n        var timepicker = $timepicker(element, controller, options);\n        options = timepicker.$options;\n        var lang = options.lang;\n        var formatDate = function(date, format, timezone) {\n          return $dateFormatter.formatDate(date, format, lang, timezone);\n        };\n        if (attr.bsShow) {\n          scope.$watch(attr.bsShow, function(newValue, oldValue) {\n            if (!timepicker || !angular.isDefined(newValue)) return;\n            if (angular.isString(newValue)) newValue = !!newValue.match(/true|,?(timepicker),?/i);\n            if (newValue === true) {\n              timepicker.show();\n            } else {\n              timepicker.hide();\n            }\n          });\n        }\n        var dateParser = $dateParser({\n          format: options.timeFormat,\n          lang: lang\n        });\n        angular.forEach([ 'minTime', 'maxTime' ], function(key) {\n          if (angular.isDefined(attr[key])) {\n            attr.$observe(key, function(newValue) {\n              timepicker.$options[key] = dateParser.getTimeForAttribute(key, newValue);\n              if (!isNaN(timepicker.$options[key])) timepicker.$build();\n              validateAgainstMinMaxTime(controller.$dateValue);\n            });\n          }\n        });\n        scope.$watch(attr.ngModel, function(newValue, oldValue) {\n          timepicker.update(controller.$dateValue);\n        }, true);\n        function validateAgainstMinMaxTime(parsedTime) {\n          if (!angular.isDate(parsedTime)) return;\n          var isMinValid = isNaN(options.minTime) || new Date(parsedTime.getTime()).setFullYear(1970, 0, 1) >= options.minTime;\n          var isMaxValid = isNaN(options.maxTime) || new Date(parsedTime.getTime()).setFullYear(1970, 0, 1) <= options.maxTime;\n          var isValid = isMinValid && isMaxValid;\n          controller.$setValidity('date', isValid);\n          controller.$setValidity('min', isMinValid);\n          controller.$setValidity('max', isMaxValid);\n          if (!isValid) {\n            return;\n          }\n          controller.$dateValue = parsedTime;\n        }\n        controller.$parsers.unshift(function(viewValue) {\n          var date;\n          if (!viewValue) {\n            controller.$setValidity('date', true);\n            return null;\n          }\n          var parsedTime = angular.isDate(viewValue) ? viewValue : dateParser.parse(viewValue, controller.$dateValue);\n          if (!parsedTime || isNaN(parsedTime.getTime())) {\n            controller.$setValidity('date', false);\n            return undefined;\n          }\n          validateAgainstMinMaxTime(parsedTime);\n          if (options.timeType === 'string') {\n            date = dateParser.timezoneOffsetAdjust(parsedTime, options.timezone, true);\n            return formatDate(date, options.modelTimeFormat || options.timeFormat);\n          }\n          date = dateParser.timezoneOffsetAdjust(controller.$dateValue, options.timezone, true);\n          if (options.timeType === 'number') {\n            return date.getTime();\n          } else if (options.timeType === 'unix') {\n            return date.getTime() / 1e3;\n          } else if (options.timeType === 'iso') {\n            return date.toISOString();\n          }\n          return new Date(date);\n        });\n        controller.$formatters.push(function(modelValue) {\n          var date;\n          if (angular.isUndefined(modelValue) || modelValue === null) {\n            date = NaN;\n          } else if (angular.isDate(modelValue)) {\n            date = modelValue;\n          } else if (options.timeType === 'string') {\n            date = dateParser.parse(modelValue, null, options.modelTimeFormat);\n          } else if (options.timeType === 'unix') {\n            date = new Date(modelValue * 1e3);\n          } else {\n            date = new Date(modelValue);\n          }\n          controller.$dateValue = dateParser.timezoneOffsetAdjust(date, options.timezone);\n          return getTimeFormattedString();\n        });\n        controller.$render = function() {\n          element.val(getTimeFormattedString());\n        };\n        function getTimeFormattedString() {\n          return !controller.$dateValue || isNaN(controller.$dateValue.getTime()) ? '' : formatDate(controller.$dateValue, options.timeFormat);\n        }\n        scope.$on('$destroy', function() {\n          if (timepicker) timepicker.destroy();\n          options = null;\n          timepicker = null;\n        });\n      }\n    };\n  } ]);\n  angular.module('mgcrea.ngStrap.tab', []).provider('$tab', function() {\n    var defaults = this.defaults = {\n      animation: 'am-fade',\n      template: 'tab/tab.tpl.html',\n      navClass: 'nav-tabs',\n      activeClass: 'active'\n    };\n    var controller = this.controller = function($scope, $element, $attrs) {\n      var self = this;\n      self.$options = angular.copy(defaults);\n      angular.forEach([ 'animation', 'navClass', 'activeClass' ], function(key) {\n        if (angular.isDefined($attrs[key])) self.$options[key] = $attrs[key];\n      });\n      $scope.$navClass = self.$options.navClass;\n      $scope.$activeClass = self.$options.activeClass;\n      self.$panes = $scope.$panes = [];\n      self.$activePaneChangeListeners = self.$viewChangeListeners = [];\n      self.$push = function(pane) {\n        if (angular.isUndefined(self.$panes.$active)) {\n          $scope.$setActive(pane.name || 0);\n        }\n        self.$panes.push(pane);\n      };\n      self.$remove = function(pane) {\n        var index = self.$panes.indexOf(pane);\n        var active = self.$panes.$active;\n        var activeIndex;\n        if (angular.isString(active)) {\n          activeIndex = self.$panes.map(function(pane) {\n            return pane.name;\n          }).indexOf(active);\n        } else {\n          activeIndex = self.$panes.$active;\n        }\n        self.$panes.splice(index, 1);\n        if (index < activeIndex) {\n          activeIndex--;\n        } else if (index === activeIndex && activeIndex === self.$panes.length) {\n          activeIndex--;\n        }\n        if (activeIndex >= 0 && activeIndex < self.$panes.length) {\n          self.$setActive(self.$panes[activeIndex].name || activeIndex);\n        } else {\n          self.$setActive();\n        }\n      };\n      self.$setActive = $scope.$setActive = function(value) {\n        self.$panes.$active = value;\n        self.$activePaneChangeListeners.forEach(function(fn) {\n          fn();\n        });\n      };\n      self.$isActive = $scope.$isActive = function($pane, $index) {\n        return self.$panes.$active === $pane.name || self.$panes.$active === $index;\n      };\n    };\n    this.$get = function() {\n      var $tab = {};\n      $tab.defaults = defaults;\n      $tab.controller = controller;\n      return $tab;\n    };\n  }).directive('bsTabs', [ '$window', '$animate', '$tab', '$parse', function($window, $animate, $tab, $parse) {\n    var defaults = $tab.defaults;\n    return {\n      require: [ '?ngModel', 'bsTabs' ],\n      transclude: true,\n      scope: true,\n      controller: [ '$scope', '$element', '$attrs', $tab.controller ],\n      templateUrl: function(element, attr) {\n        return attr.template || defaults.template;\n      },\n      link: function postLink(scope, element, attrs, controllers) {\n        var ngModelCtrl = controllers[0];\n        var bsTabsCtrl = controllers[1];\n        if (ngModelCtrl) {\n          bsTabsCtrl.$activePaneChangeListeners.push(function() {\n            ngModelCtrl.$setViewValue(bsTabsCtrl.$panes.$active);\n          });\n          ngModelCtrl.$formatters.push(function(modelValue) {\n            bsTabsCtrl.$setActive(modelValue);\n            return modelValue;\n          });\n        }\n        if (attrs.bsActivePane) {\n          var parsedBsActivePane = $parse(attrs.bsActivePane);\n          bsTabsCtrl.$activePaneChangeListeners.push(function() {\n            parsedBsActivePane.assign(scope, bsTabsCtrl.$panes.$active);\n          });\n          scope.$watch(attrs.bsActivePane, function(newValue, oldValue) {\n            bsTabsCtrl.$setActive(newValue);\n          }, true);\n        }\n      }\n    };\n  } ]).directive('bsPane', [ '$window', '$animate', '$sce', function($window, $animate, $sce) {\n    return {\n      require: [ '^?ngModel', '^bsTabs' ],\n      scope: true,\n      link: function postLink(scope, element, attrs, controllers) {\n        var bsTabsCtrl = controllers[1];\n        element.addClass('tab-pane');\n        attrs.$observe('title', function(newValue, oldValue) {\n          scope.title = $sce.trustAsHtml(newValue);\n        });\n        scope.name = attrs.name;\n        if (bsTabsCtrl.$options.animation) {\n          element.addClass(bsTabsCtrl.$options.animation);\n        }\n        attrs.$observe('disabled', function(newValue, oldValue) {\n          scope.disabled = scope.$eval(newValue);\n        });\n        bsTabsCtrl.$push(scope);\n        scope.$on('$destroy', function() {\n          bsTabsCtrl.$remove(scope);\n        });\n        function render() {\n          var index = bsTabsCtrl.$panes.indexOf(scope);\n          $animate[bsTabsCtrl.$isActive(scope, index) ? 'addClass' : 'removeClass'](element, bsTabsCtrl.$options.activeClass);\n        }\n        bsTabsCtrl.$activePaneChangeListeners.push(function() {\n          render();\n        });\n        render();\n      }\n    };\n  } ]);\n  angular.module('mgcrea.ngStrap.select', [ 'mgcrea.ngStrap.tooltip', 'mgcrea.ngStrap.helpers.parseOptions' ]).provider('$select', function() {\n    var defaults = this.defaults = {\n      animation: 'am-fade',\n      prefixClass: 'select',\n      prefixEvent: '$select',\n      placement: 'bottom-left',\n      templateUrl: 'select/select.tpl.html',\n      trigger: 'focus',\n      container: false,\n      keyboard: true,\n      html: false,\n      delay: 0,\n      multiple: false,\n      allNoneButtons: false,\n      sort: true,\n      caretHtml: '&nbsp;<span class=\"caret\"></span>',\n      placeholder: 'Choose among the following...',\n      allText: 'All',\n      noneText: 'None',\n      maxLength: 3,\n      maxLengthHtml: 'selected',\n      iconCheckmark: 'glyphicon glyphicon-ok',\n      toggle: false\n    };\n    this.$get = [ '$window', '$document', '$rootScope', '$tooltip', '$timeout', function($window, $document, $rootScope, $tooltip, $timeout) {\n      var isNative = /(ip[ao]d|iphone|android)/gi.test($window.navigator.userAgent);\n      var isTouch = 'createTouch' in $window.document && isNative;\n      function SelectFactory(element, controller, config) {\n        var $select = {};\n        var options = angular.extend({}, defaults, config);\n        $select = $tooltip(element, options);\n        var scope = $select.$scope;\n        scope.$matches = [];\n        if (options.multiple) {\n          scope.$activeIndex = [];\n        } else {\n          scope.$activeIndex = -1;\n        }\n        scope.$isMultiple = options.multiple;\n        scope.$showAllNoneButtons = options.allNoneButtons && options.multiple;\n        scope.$iconCheckmark = options.iconCheckmark;\n        scope.$allText = options.allText;\n        scope.$noneText = options.noneText;\n        scope.$activate = function(index) {\n          scope.$$postDigest(function() {\n            $select.activate(index);\n          });\n        };\n        scope.$select = function(index, evt) {\n          scope.$$postDigest(function() {\n            $select.select(index);\n          });\n        };\n        scope.$isVisible = function() {\n          return $select.$isVisible();\n        };\n        scope.$isActive = function(index) {\n          return $select.$isActive(index);\n        };\n        scope.$selectAll = function() {\n          for (var i = 0; i < scope.$matches.length; i++) {\n            if (!scope.$isActive(i)) {\n              scope.$select(i);\n            }\n          }\n        };\n        scope.$selectNone = function() {\n          for (var i = 0; i < scope.$matches.length; i++) {\n            if (scope.$isActive(i)) {\n              scope.$select(i);\n            }\n          }\n        };\n        $select.update = function(matches) {\n          scope.$matches = matches;\n          $select.$updateActiveIndex();\n        };\n        $select.activate = function(index) {\n          if (options.multiple) {\n            if ($select.$isActive(index)) {\n              scope.$activeIndex.splice(scope.$activeIndex.indexOf(index), 1);\n            } else {\n              scope.$activeIndex.push(index);\n            }\n            if (options.sort) scope.$activeIndex.sort(function(a, b) {\n              return a - b;\n            });\n          } else {\n            scope.$activeIndex = index;\n          }\n          return scope.$activeIndex;\n        };\n        $select.select = function(index) {\n          if (angular.isUndefined(index) || index < 0 || index >= scope.$matches.length) {\n            return;\n          }\n          var value = scope.$matches[index].value;\n          scope.$apply(function() {\n            $select.activate(index);\n            if (options.multiple) {\n              controller.$setViewValue(scope.$activeIndex.map(function(index) {\n                if (angular.isUndefined(scope.$matches[index])) {\n                  return null;\n                }\n                return scope.$matches[index].value;\n              }));\n            } else {\n              if (options.toggle) {\n                controller.$setViewValue(value === controller.$modelValue ? undefined : value);\n              } else {\n                controller.$setViewValue(value);\n              }\n              $select.hide();\n            }\n          });\n          scope.$emit(options.prefixEvent + '.select', value, index, $select);\n          if (angular.isDefined(options.onSelect) && angular.isFunction(options.onSelect)) {\n            options.onSelect(value, index, $select);\n          }\n        };\n        $select.$updateActiveIndex = function() {\n          if (options.multiple) {\n            if (angular.isArray(controller.$modelValue)) {\n              scope.$activeIndex = controller.$modelValue.map(function(value) {\n                return $select.$getIndex(value);\n              });\n            } else {\n              scope.$activeIndex = [];\n            }\n          } else {\n            if (angular.isDefined(controller.$modelValue) && scope.$matches.length) {\n              scope.$activeIndex = $select.$getIndex(controller.$modelValue);\n            } else {\n              scope.$activeIndex = -1;\n            }\n          }\n        };\n        $select.$isVisible = function() {\n          if (!options.minLength || !controller) {\n            return scope.$matches.length;\n          }\n          return scope.$matches.length && controller.$viewValue.length >= options.minLength;\n        };\n        $select.$isActive = function(index) {\n          if (options.multiple) {\n            return scope.$activeIndex.indexOf(index) !== -1;\n          }\n          return scope.$activeIndex === index;\n        };\n        $select.$getIndex = function(value) {\n          var index;\n          for (index = scope.$matches.length; index--; ) {\n            if (angular.equals(scope.$matches[index].value, value)) break;\n          }\n          return index;\n        };\n        $select.$onMouseDown = function(evt) {\n          evt.preventDefault();\n          evt.stopPropagation();\n          if (isTouch) {\n            var targetEl = angular.element(evt.target);\n            var anchor;\n            if (evt.target.nodeName !== 'A') {\n              var anchorCandidate = targetEl.parent();\n              while (!anchor && anchorCandidate.length > 0) {\n                if (anchorCandidate[0].nodeName === 'A') {\n                  anchor = anchorCandidate;\n                }\n                anchorCandidate = anchorCandidate.parent();\n              }\n            }\n            if (anchor) {\n              angular.element(anchor).triggerHandler('click');\n            } else {\n              targetEl.triggerHandler('click');\n            }\n          }\n        };\n        $select.$onKeyDown = function(evt) {\n          if (!/(9|13|38|40)/.test(evt.keyCode)) return;\n          if (evt.keyCode !== 9) {\n            evt.preventDefault();\n            evt.stopPropagation();\n          }\n          if (options.multiple && evt.keyCode === 9) {\n            return $select.hide();\n          }\n          if (!options.multiple && (evt.keyCode === 13 || evt.keyCode === 9)) {\n            return $select.select(scope.$activeIndex);\n          }\n          if (!options.multiple) {\n            if (evt.keyCode === 38 && scope.$activeIndex > 0) scope.$activeIndex--; else if (evt.keyCode === 38 && scope.$activeIndex < 0) scope.$activeIndex = scope.$matches.length - 1; else if (evt.keyCode === 40 && scope.$activeIndex < scope.$matches.length - 1) scope.$activeIndex++; else if (angular.isUndefined(scope.$activeIndex)) scope.$activeIndex = 0;\n            scope.$digest();\n          }\n        };\n        $select.$isIE = function() {\n          var ua = $window.navigator.userAgent;\n          return ua.indexOf('MSIE ') > 0 || ua.indexOf('Trident/') > 0 || ua.indexOf('Edge/') > 0;\n        };\n        $select.$selectScrollFix = function(e) {\n          if ($document[0].activeElement.tagName === 'UL') {\n            e.preventDefault();\n            e.stopImmediatePropagation();\n            e.target.focus();\n          }\n        };\n        var _show = $select.show;\n        $select.show = function() {\n          _show();\n          if (options.multiple) {\n            $select.$element.addClass('select-multiple');\n          }\n          $timeout(function() {\n            $select.$element.on(isTouch ? 'touchstart' : 'mousedown', $select.$onMouseDown);\n            if (options.keyboard) {\n              element.on('keydown', $select.$onKeyDown);\n            }\n          }, 0, false);\n        };\n        var _hide = $select.hide;\n        $select.hide = function() {\n          if (!options.multiple && angular.isUndefined(controller.$modelValue)) {\n            scope.$activeIndex = -1;\n          }\n          $select.$element.off(isTouch ? 'touchstart' : 'mousedown', $select.$onMouseDown);\n          if (options.keyboard) {\n            element.off('keydown', $select.$onKeyDown);\n          }\n          _hide(true);\n        };\n        return $select;\n      }\n      SelectFactory.defaults = defaults;\n      return SelectFactory;\n    } ];\n  }).directive('bsSelect', [ '$window', '$parse', '$q', '$select', '$parseOptions', function($window, $parse, $q, $select, $parseOptions) {\n    var defaults = $select.defaults;\n    return {\n      restrict: 'EAC',\n      require: 'ngModel',\n      link: function postLink(scope, element, attr, controller) {\n        var options = {\n          scope: scope,\n          placeholder: defaults.placeholder\n        };\n        angular.forEach([ 'template', 'templateUrl', 'controller', 'controllerAs', 'placement', 'container', 'delay', 'trigger', 'keyboard', 'html', 'animation', 'placeholder', 'allNoneButtons', 'maxLength', 'maxLengthHtml', 'allText', 'noneText', 'iconCheckmark', 'autoClose', 'id', 'sort', 'caretHtml', 'prefixClass', 'prefixEvent', 'toggle' ], function(key) {\n          if (angular.isDefined(attr[key])) options[key] = attr[key];\n        });\n        var falseValueRegExp = /^(false|0|)$/i;\n        angular.forEach([ 'html', 'container', 'allNoneButtons', 'sort' ], function(key) {\n          if (angular.isDefined(attr[key]) && falseValueRegExp.test(attr[key])) {\n            options[key] = false;\n          }\n        });\n        angular.forEach([ 'onBeforeShow', 'onShow', 'onBeforeHide', 'onHide', 'onSelect' ], function(key) {\n          var bsKey = 'bs' + key.charAt(0).toUpperCase() + key.slice(1);\n          if (angular.isDefined(attr[bsKey])) {\n            options[key] = scope.$eval(attr[bsKey]);\n          }\n        });\n        var dataMultiple = element.attr('data-multiple');\n        if (angular.isDefined(dataMultiple)) {\n          if (falseValueRegExp.test(dataMultiple)) {\n            options.multiple = false;\n          } else {\n            options.multiple = dataMultiple;\n          }\n        }\n        if (element[0].nodeName.toLowerCase() === 'select') {\n          var inputEl = element;\n          inputEl.css('display', 'none');\n          element = angular.element('<button type=\"button\" class=\"btn btn-default\"></button>');\n          inputEl.after(element);\n        }\n        var parsedOptions = $parseOptions(attr.bsOptions);\n        var select = $select(element, controller, options);\n        if (select.$isIE()) {\n          element[0].addEventListener('blur', select.$selectScrollFix);\n        }\n        var watchedOptions = parsedOptions.$match[7].replace(/\\|.+/, '').trim();\n        scope.$watch(watchedOptions, function(newValue, oldValue) {\n          parsedOptions.valuesFn(scope, controller).then(function(values) {\n            select.update(values);\n            controller.$render();\n          });\n        }, true);\n        scope.$watch(attr.ngModel, function(newValue, oldValue) {\n          select.$updateActiveIndex();\n          controller.$render();\n        }, true);\n        controller.$render = function() {\n          var selected;\n          var index;\n          if (options.multiple && angular.isArray(controller.$modelValue)) {\n            selected = controller.$modelValue.map(function(value) {\n              index = select.$getIndex(value);\n              return index !== -1 ? select.$scope.$matches[index].label : false;\n            }).filter(angular.isDefined);\n            if (selected.length > (options.maxLength || defaults.maxLength)) {\n              selected = selected.length + ' ' + (options.maxLengthHtml || defaults.maxLengthHtml);\n            } else {\n              selected = selected.join(', ');\n            }\n          } else {\n            index = select.$getIndex(controller.$modelValue);\n            selected = index !== -1 ? select.$scope.$matches[index].label : false;\n          }\n          element.html((selected || options.placeholder) + (options.caretHtml || defaults.caretHtml));\n        };\n        if (options.multiple) {\n          controller.$isEmpty = function(value) {\n            return !value || value.length === 0;\n          };\n        }\n        scope.$on('$destroy', function() {\n          if (select) select.destroy();\n          options = null;\n          select = null;\n        });\n      }\n    };\n  } ]);\n  angular.module('mgcrea.ngStrap.scrollspy', [ 'mgcrea.ngStrap.helpers.debounce', 'mgcrea.ngStrap.helpers.dimensions' ]).provider('$scrollspy', function() {\n    var spies = this.$$spies = {};\n    var defaults = this.defaults = {\n      debounce: 150,\n      throttle: 100,\n      offset: 100\n    };\n    this.$get = [ '$window', '$document', '$rootScope', 'dimensions', 'debounce', 'throttle', function($window, $document, $rootScope, dimensions, debounce, throttle) {\n      var windowEl = angular.element($window);\n      var docEl = angular.element($document.prop('documentElement'));\n      var bodyEl = angular.element($window.document.body);\n      function nodeName(element, name) {\n        return element[0].nodeName && element[0].nodeName.toLowerCase() === name.toLowerCase();\n      }\n      function ScrollSpyFactory(config) {\n        var options = angular.extend({}, defaults, config);\n        if (!options.element) options.element = bodyEl;\n        var isWindowSpy = nodeName(options.element, 'body');\n        var scrollEl = isWindowSpy ? windowEl : options.element;\n        var scrollId = isWindowSpy ? 'window' : options.id;\n        if (spies[scrollId]) {\n          spies[scrollId].$$count++;\n          return spies[scrollId];\n        }\n        var $scrollspy = {};\n        var unbindViewContentLoaded;\n        var unbindIncludeContentLoaded;\n        var trackedElements = $scrollspy.$trackedElements = [];\n        var sortedElements = [];\n        var activeTarget;\n        var debouncedCheckPosition;\n        var throttledCheckPosition;\n        var debouncedCheckOffsets;\n        var viewportHeight;\n        var scrollTop;\n        $scrollspy.init = function() {\n          this.$$count = 1;\n          debouncedCheckPosition = debounce(this.checkPosition, options.debounce);\n          throttledCheckPosition = throttle(this.checkPosition, options.throttle);\n          scrollEl.on('click', this.checkPositionWithEventLoop);\n          windowEl.on('resize', debouncedCheckPosition);\n          scrollEl.on('scroll', throttledCheckPosition);\n          debouncedCheckOffsets = debounce(this.checkOffsets, options.debounce);\n          unbindViewContentLoaded = $rootScope.$on('$viewContentLoaded', debouncedCheckOffsets);\n          unbindIncludeContentLoaded = $rootScope.$on('$includeContentLoaded', debouncedCheckOffsets);\n          debouncedCheckOffsets();\n          if (scrollId) {\n            spies[scrollId] = $scrollspy;\n          }\n        };\n        $scrollspy.destroy = function() {\n          this.$$count--;\n          if (this.$$count > 0) {\n            return;\n          }\n          scrollEl.off('click', this.checkPositionWithEventLoop);\n          windowEl.off('resize', debouncedCheckPosition);\n          scrollEl.off('scroll', throttledCheckPosition);\n          unbindViewContentLoaded();\n          unbindIncludeContentLoaded();\n          if (scrollId) {\n            delete spies[scrollId];\n          }\n        };\n        $scrollspy.checkPosition = function() {\n          if (!sortedElements.length) return;\n          scrollTop = (isWindowSpy ? $window.pageYOffset : scrollEl.prop('scrollTop')) || 0;\n          viewportHeight = Math.max($window.innerHeight, docEl.prop('clientHeight'));\n          if (scrollTop < sortedElements[0].offsetTop && activeTarget !== sortedElements[0].target) {\n            return $scrollspy.$activateElement(sortedElements[0]);\n          }\n          for (var i = sortedElements.length; i--; ) {\n            if (angular.isUndefined(sortedElements[i].offsetTop) || sortedElements[i].offsetTop === null) continue;\n            if (activeTarget === sortedElements[i].target) continue;\n            if (scrollTop < sortedElements[i].offsetTop) continue;\n            if (sortedElements[i + 1] && scrollTop > sortedElements[i + 1].offsetTop) continue;\n            return $scrollspy.$activateElement(sortedElements[i]);\n          }\n        };\n        $scrollspy.checkPositionWithEventLoop = function() {\n          setTimeout($scrollspy.checkPosition, 1);\n        };\n        $scrollspy.$activateElement = function(element) {\n          if (activeTarget) {\n            var activeElement = $scrollspy.$getTrackedElement(activeTarget);\n            if (activeElement) {\n              activeElement.source.removeClass('active');\n              if (nodeName(activeElement.source, 'li') && nodeName(activeElement.source.parent().parent(), 'li')) {\n                activeElement.source.parent().parent().removeClass('active');\n              }\n            }\n          }\n          activeTarget = element.target;\n          element.source.addClass('active');\n          if (nodeName(element.source, 'li') && nodeName(element.source.parent().parent(), 'li')) {\n            element.source.parent().parent().addClass('active');\n          }\n        };\n        $scrollspy.$getTrackedElement = function(target) {\n          return trackedElements.filter(function(obj) {\n            return obj.target === target;\n          })[0];\n        };\n        $scrollspy.checkOffsets = function() {\n          angular.forEach(trackedElements, function(trackedElement) {\n            var targetElement = document.querySelector(trackedElement.target);\n            trackedElement.offsetTop = targetElement ? dimensions.offset(targetElement).top : null;\n            if (options.offset && trackedElement.offsetTop !== null) trackedElement.offsetTop -= options.offset * 1;\n          });\n          sortedElements = trackedElements.filter(function(el) {\n            return el.offsetTop !== null;\n          }).sort(function(a, b) {\n            return a.offsetTop - b.offsetTop;\n          });\n          debouncedCheckPosition();\n        };\n        $scrollspy.trackElement = function(target, source) {\n          trackedElements.push({\n            target: target,\n            source: source\n          });\n        };\n        $scrollspy.untrackElement = function(target, source) {\n          var toDelete;\n          for (var i = trackedElements.length; i--; ) {\n            if (trackedElements[i].target === target && trackedElements[i].source === source) {\n              toDelete = i;\n              break;\n            }\n          }\n          trackedElements.splice(toDelete, 1);\n        };\n        $scrollspy.activate = function(i) {\n          trackedElements[i].addClass('active');\n        };\n        $scrollspy.init();\n        return $scrollspy;\n      }\n      return ScrollSpyFactory;\n    } ];\n  }).directive('bsScrollspy', [ '$rootScope', 'debounce', 'dimensions', '$scrollspy', function($rootScope, debounce, dimensions, $scrollspy) {\n    return {\n      restrict: 'EAC',\n      link: function postLink(scope, element, attr) {\n        var options = {\n          scope: scope\n        };\n        angular.forEach([ 'offset', 'target' ], function(key) {\n          if (angular.isDefined(attr[key])) options[key] = attr[key];\n        });\n        var scrollspy = $scrollspy(options);\n        scrollspy.trackElement(options.target, element);\n        scope.$on('$destroy', function() {\n          if (scrollspy) {\n            scrollspy.untrackElement(options.target, element);\n            scrollspy.destroy();\n          }\n          options = null;\n          scrollspy = null;\n        });\n      }\n    };\n  } ]).directive('bsScrollspyList', [ '$rootScope', 'debounce', 'dimensions', '$scrollspy', function($rootScope, debounce, dimensions, $scrollspy) {\n    return {\n      restrict: 'A',\n      compile: function postLink(element, attr) {\n        var children = element[0].querySelectorAll('li > a[href]');\n        angular.forEach(children, function(child) {\n          var childEl = angular.element(child);\n          childEl.parent().attr('bs-scrollspy', '').attr('data-target', childEl.attr('href'));\n        });\n      }\n    };\n  } ]);\n  angular.module('mgcrea.ngStrap.popover', [ 'mgcrea.ngStrap.tooltip' ]).provider('$popover', function() {\n    var defaults = this.defaults = {\n      animation: 'am-fade',\n      customClass: '',\n      container: false,\n      target: false,\n      placement: 'right',\n      templateUrl: 'popover/popover.tpl.html',\n      contentTemplate: false,\n      trigger: 'click',\n      keyboard: true,\n      html: false,\n      title: '',\n      content: '',\n      delay: 0,\n      autoClose: false\n    };\n    this.$get = [ '$tooltip', function($tooltip) {\n      function PopoverFactory(element, config) {\n        var options = angular.extend({}, defaults, config);\n        var $popover = $tooltip(element, options);\n        if (options.content) {\n          $popover.$scope.content = options.content;\n        }\n        return $popover;\n      }\n      return PopoverFactory;\n    } ];\n  }).directive('bsPopover', [ '$window', '$sce', '$popover', function($window, $sce, $popover) {\n    var requestAnimationFrame = $window.requestAnimationFrame || $window.setTimeout;\n    return {\n      restrict: 'EAC',\n      scope: true,\n      link: function postLink(scope, element, attr) {\n        var popover;\n        var options = {\n          scope: scope\n        };\n        angular.forEach([ 'template', 'templateUrl', 'controller', 'controllerAs', 'contentTemplate', 'placement', 'container', 'delay', 'trigger', 'html', 'animation', 'customClass', 'autoClose', 'id', 'prefixClass', 'prefixEvent', 'bsEnabled' ], function(key) {\n          if (angular.isDefined(attr[key])) options[key] = attr[key];\n        });\n        var falseValueRegExp = /^(false|0|)$/i;\n        angular.forEach([ 'html', 'container', 'autoClose' ], function(key) {\n          if (angular.isDefined(attr[key]) && falseValueRegExp.test(attr[key])) options[key] = false;\n        });\n        angular.forEach([ 'onBeforeShow', 'onShow', 'onBeforeHide', 'onHide' ], function(key) {\n          var bsKey = 'bs' + key.charAt(0).toUpperCase() + key.slice(1);\n          if (angular.isDefined(attr[bsKey])) {\n            options[key] = scope.$eval(attr[bsKey]);\n          }\n        });\n        var dataTarget = element.attr('data-target');\n        if (angular.isDefined(dataTarget)) {\n          if (falseValueRegExp.test(dataTarget)) {\n            options.target = false;\n          } else {\n            options.target = dataTarget;\n          }\n        }\n        angular.forEach([ 'title', 'content' ], function(key) {\n          if (attr[key]) {\n            attr.$observe(key, function(newValue, oldValue) {\n              scope[key] = $sce.trustAsHtml(newValue);\n              if (angular.isDefined(oldValue)) {\n                requestAnimationFrame(function() {\n                  if (popover) popover.$applyPlacement();\n                });\n              }\n            });\n          }\n        });\n        if (attr.bsPopover) {\n          scope.$watch(attr.bsPopover, function(newValue, oldValue) {\n            if (angular.isObject(newValue)) {\n              angular.extend(scope, newValue);\n            } else {\n              scope.content = newValue;\n            }\n            if (angular.isDefined(oldValue)) {\n              requestAnimationFrame(function() {\n                if (popover) popover.$applyPlacement();\n              });\n            }\n          }, true);\n        }\n        if (attr.bsShow) {\n          scope.$watch(attr.bsShow, function(newValue, oldValue) {\n            if (!popover || !angular.isDefined(newValue)) return;\n            if (angular.isString(newValue)) newValue = !!newValue.match(/true|,?(popover),?/i);\n            if (newValue === true) {\n              popover.show();\n            } else {\n              popover.hide();\n            }\n          });\n        }\n        if (attr.bsEnabled) {\n          scope.$watch(attr.bsEnabled, function(newValue) {\n            if (!popover || !angular.isDefined(newValue)) return;\n            if (angular.isString(newValue)) newValue = !!newValue.match(/true|1|,?(popover),?/i);\n            if (newValue === false) {\n              popover.setEnabled(false);\n            } else {\n              popover.setEnabled(true);\n            }\n          });\n        }\n        if (attr.viewport) {\n          scope.$watch(attr.viewport, function(newValue) {\n            if (!popover || !angular.isDefined(newValue)) return;\n            popover.setViewport(newValue);\n          });\n        }\n        popover = $popover(element, options);\n        scope.$on('$destroy', function() {\n          if (popover) popover.destroy();\n          options = null;\n          popover = null;\n        });\n      }\n    };\n  } ]);\n  angular.module('mgcrea.ngStrap.navbar', []).provider('$navbar', function() {\n    var defaults = this.defaults = {\n      activeClass: 'active',\n      routeAttr: 'data-match-route',\n      strict: false\n    };\n    this.$get = function() {\n      return {\n        defaults: defaults\n      };\n    };\n  }).directive('bsNavbar', [ '$window', '$location', '$navbar', function($window, $location, $navbar) {\n    var defaults = $navbar.defaults;\n    return {\n      restrict: 'A',\n      link: function postLink(scope, element, attr, controller) {\n        var options = angular.copy(defaults);\n        angular.forEach(Object.keys(defaults), function(key) {\n          if (angular.isDefined(attr[key])) options[key] = attr[key];\n        });\n        scope.$watch(function() {\n          return $location.path();\n        }, function(newValue, oldValue) {\n          var liElements = element[0].querySelectorAll('li[' + options.routeAttr + ']');\n          angular.forEach(liElements, function(li) {\n            var liElement = angular.element(li);\n            var pattern = liElement.attr(options.routeAttr).replace('/', '\\\\/');\n            if (options.strict) {\n              pattern = '^' + pattern + '$';\n            }\n            var regexp = new RegExp(pattern, 'i');\n            if (regexp.test(newValue)) {\n              liElement.addClass(options.activeClass);\n            } else {\n              liElement.removeClass(options.activeClass);\n            }\n          });\n        });\n      }\n    };\n  } ]);\n  angular.module('mgcrea.ngStrap.modal', [ 'mgcrea.ngStrap.core', 'mgcrea.ngStrap.helpers.dimensions' ]).provider('$modal', function() {\n    var defaults = this.defaults = {\n      animation: 'am-fade',\n      backdropAnimation: 'am-fade',\n      customClass: '',\n      prefixClass: 'modal',\n      prefixEvent: 'modal',\n      placement: 'top',\n      templateUrl: 'modal/modal.tpl.html',\n      template: '',\n      contentTemplate: false,\n      container: false,\n      element: null,\n      backdrop: true,\n      keyboard: true,\n      html: false,\n      show: true,\n      size: null,\n      zIndex: null\n    };\n    this.$get = [ '$window', '$rootScope', '$bsCompiler', '$animate', '$timeout', '$sce', 'dimensions', function($window, $rootScope, $bsCompiler, $animate, $timeout, $sce, dimensions) {\n      var forEach = angular.forEach;\n      var requestAnimationFrame = $window.requestAnimationFrame || $window.setTimeout;\n      var bodyElement = angular.element($window.document.body);\n      var backdropCount = 0;\n      var dialogBaseZindex = 1050;\n      var backdropBaseZindex = 1040;\n      var validSizes = {\n        lg: 'modal-lg',\n        sm: 'modal-sm'\n      };\n      function ModalFactory(config) {\n        var $modal = {};\n        var options = $modal.$options = angular.extend({}, defaults, config);\n        var promise = $modal.$promise = $bsCompiler.compile(options);\n        var scope = $modal.$scope = options.scope && options.scope.$new() || $rootScope.$new();\n        if (!options.element && !options.container) {\n          options.container = 'body';\n        }\n        if (options.zIndex) {\n          dialogBaseZindex = parseInt(options.zIndex, 10);\n          backdropBaseZindex = dialogBaseZindex - 10;\n        }\n        $modal.$id = options.id || options.element && options.element.attr('id') || '';\n        forEach([ 'title', 'content' ], function(key) {\n          if (options[key]) scope[key] = $sce.trustAsHtml(options[key]);\n        });\n        scope.$hide = function() {\n          scope.$$postDigest(function() {\n            $modal.hide();\n          });\n        };\n        scope.$show = function() {\n          scope.$$postDigest(function() {\n            $modal.show();\n          });\n        };\n        scope.$toggle = function() {\n          scope.$$postDigest(function() {\n            $modal.toggle();\n          });\n        };\n        $modal.$isShown = scope.$isShown = false;\n        var compileData;\n        var modalElement;\n        var modalScope;\n        var backdropElement = angular.element('<div class=\"' + options.prefixClass + '-backdrop\"/>');\n        backdropElement.css({\n          position: 'fixed',\n          top: '0px',\n          left: '0px',\n          bottom: '0px',\n          right: '0px'\n        });\n        promise.then(function(data) {\n          compileData = data;\n          $modal.init();\n        });\n        $modal.init = function() {\n          if (options.show) {\n            scope.$$postDigest(function() {\n              $modal.show();\n            });\n          }\n        };\n        $modal.destroy = function() {\n          destroyModalElement();\n          if (backdropElement) {\n            backdropElement.remove();\n            backdropElement = null;\n          }\n          scope.$destroy();\n        };\n        $modal.show = function() {\n          if ($modal.$isShown) return;\n          var parent;\n          var after;\n          if (angular.isElement(options.container)) {\n            parent = options.container;\n            after = options.container[0].lastChild ? angular.element(options.container[0].lastChild) : null;\n          } else {\n            if (options.container) {\n              parent = findElement(options.container);\n              after = parent[0] && parent[0].lastChild ? angular.element(parent[0].lastChild) : null;\n            } else {\n              parent = null;\n              after = options.element;\n            }\n          }\n          if (modalElement) destroyModalElement();\n          modalScope = $modal.$scope.$new();\n          modalElement = $modal.$element = compileData.link(modalScope, function(clonedElement, scope) {});\n          if (options.backdrop) {\n            modalElement.css({\n              'z-index': dialogBaseZindex + backdropCount * 20\n            });\n            backdropElement.css({\n              'z-index': backdropBaseZindex + backdropCount * 20\n            });\n            backdropCount++;\n          }\n          if (scope.$emit(options.prefixEvent + '.show.before', $modal).defaultPrevented) {\n            return;\n          }\n          if (angular.isDefined(options.onBeforeShow) && angular.isFunction(options.onBeforeShow)) {\n            options.onBeforeShow($modal);\n          }\n          modalElement.css({\n            display: 'block'\n          }).addClass(options.placement);\n          if (options.customClass) {\n            modalElement.addClass(options.customClass);\n          }\n          if (options.size && validSizes[options.size]) {\n            angular.element(findElement('.modal-dialog', modalElement[0])).addClass(validSizes[options.size]);\n          }\n          if (options.animation) {\n            if (options.backdrop) {\n              backdropElement.addClass(options.backdropAnimation);\n            }\n            modalElement.addClass(options.animation);\n          }\n          if (options.backdrop) {\n            $animate.enter(backdropElement, bodyElement, null);\n          }\n          if (angular.version.minor <= 2) {\n            $animate.enter(modalElement, parent, after, enterAnimateCallback);\n          } else {\n            $animate.enter(modalElement, parent, after).then(enterAnimateCallback);\n          }\n          $modal.$isShown = scope.$isShown = true;\n          safeDigest(scope);\n          var el = modalElement[0];\n          requestAnimationFrame(function() {\n            el.focus();\n          });\n          bodyElement.addClass(options.prefixClass + '-open');\n          if (options.animation) {\n            bodyElement.addClass(options.prefixClass + '-with-' + options.animation);\n          }\n          bindBackdropEvents();\n          bindKeyboardEvents();\n        };\n        function enterAnimateCallback() {\n          scope.$emit(options.prefixEvent + '.show', $modal);\n          if (angular.isDefined(options.onShow) && angular.isFunction(options.onShow)) {\n            options.onShow($modal);\n          }\n        }\n        $modal.hide = function() {\n          if (!$modal.$isShown) return;\n          if (scope.$emit(options.prefixEvent + '.hide.before', $modal).defaultPrevented) {\n            return;\n          }\n          if (angular.isDefined(options.onBeforeHide) && angular.isFunction(options.onBeforeHide)) {\n            options.onBeforeHide($modal);\n          }\n          if (angular.version.minor <= 2) {\n            $animate.leave(modalElement, leaveAnimateCallback);\n          } else {\n            $animate.leave(modalElement).then(leaveAnimateCallback);\n          }\n          if (options.backdrop) {\n            backdropCount--;\n            $animate.leave(backdropElement);\n          }\n          $modal.$isShown = scope.$isShown = false;\n          safeDigest(scope);\n          unbindBackdropEvents();\n          unbindKeyboardEvents();\n        };\n        function leaveAnimateCallback() {\n          scope.$emit(options.prefixEvent + '.hide', $modal);\n          if (angular.isDefined(options.onHide) && angular.isFunction(options.onHide)) {\n            options.onHide($modal);\n          }\n          if (findElement('.modal').length <= 0) {\n            bodyElement.removeClass(options.prefixClass + '-open');\n          }\n          if (options.animation) {\n            bodyElement.removeClass(options.prefixClass + '-with-' + options.animation);\n          }\n        }\n        $modal.toggle = function() {\n          if ($modal.$isShown) {\n            $modal.hide();\n          } else {\n            $modal.show();\n          }\n        };\n        $modal.focus = function() {\n          modalElement[0].focus();\n        };\n        $modal.$onKeyUp = function(evt) {\n          if (evt.which === 27 && $modal.$isShown) {\n            $modal.hide();\n            evt.stopPropagation();\n          }\n        };\n        function bindBackdropEvents() {\n          if (options.backdrop) {\n            modalElement.on('click', hideOnBackdropClick);\n            backdropElement.on('click', hideOnBackdropClick);\n            backdropElement.on('wheel', preventEventDefault);\n          }\n        }\n        function unbindBackdropEvents() {\n          if (options.backdrop) {\n            modalElement.off('click', hideOnBackdropClick);\n            backdropElement.off('click', hideOnBackdropClick);\n            backdropElement.off('wheel', preventEventDefault);\n          }\n        }\n        function bindKeyboardEvents() {\n          if (options.keyboard) {\n            modalElement.on('keyup', $modal.$onKeyUp);\n          }\n        }\n        function unbindKeyboardEvents() {\n          if (options.keyboard) {\n            modalElement.off('keyup', $modal.$onKeyUp);\n          }\n        }\n        function hideOnBackdropClick(evt) {\n          if (evt.target !== evt.currentTarget) return;\n          if (options.backdrop === 'static') {\n            $modal.focus();\n          } else {\n            $modal.hide();\n          }\n        }\n        function preventEventDefault(evt) {\n          evt.preventDefault();\n        }\n        function destroyModalElement() {\n          if ($modal.$isShown && modalElement !== null) {\n            unbindBackdropEvents();\n            unbindKeyboardEvents();\n          }\n          if (modalScope) {\n            modalScope.$destroy();\n            modalScope = null;\n          }\n          if (modalElement) {\n            modalElement.remove();\n            modalElement = $modal.$element = null;\n          }\n        }\n        return $modal;\n      }\n      function safeDigest(scope) {\n        scope.$$phase || scope.$root && scope.$root.$$phase || scope.$digest();\n      }\n      function findElement(query, element) {\n        return angular.element((element || document).querySelectorAll(query));\n      }\n      return ModalFactory;\n    } ];\n  }).directive('bsModal', [ '$window', '$sce', '$parse', '$modal', function($window, $sce, $parse, $modal) {\n    return {\n      restrict: 'EAC',\n      scope: true,\n      link: function postLink(scope, element, attr, transclusion) {\n        var options = {\n          scope: scope,\n          element: element,\n          show: false\n        };\n        angular.forEach([ 'template', 'templateUrl', 'controller', 'controllerAs', 'contentTemplate', 'placement', 'backdrop', 'keyboard', 'html', 'container', 'animation', 'backdropAnimation', 'id', 'prefixEvent', 'prefixClass', 'customClass', 'modalClass', 'size', 'zIndex' ], function(key) {\n          if (angular.isDefined(attr[key])) options[key] = attr[key];\n        });\n        if (options.modalClass) {\n          options.customClass = options.modalClass;\n        }\n        var falseValueRegExp = /^(false|0|)$/i;\n        angular.forEach([ 'backdrop', 'keyboard', 'html', 'container' ], function(key) {\n          if (angular.isDefined(attr[key]) && falseValueRegExp.test(attr[key])) options[key] = false;\n        });\n        angular.forEach([ 'onBeforeShow', 'onShow', 'onBeforeHide', 'onHide' ], function(key) {\n          var bsKey = 'bs' + key.charAt(0).toUpperCase() + key.slice(1);\n          if (angular.isDefined(attr[bsKey])) {\n            options[key] = scope.$eval(attr[bsKey]);\n          }\n        });\n        angular.forEach([ 'title', 'content' ], function(key) {\n          if (attr[key]) {\n            attr.$observe(key, function(newValue, oldValue) {\n              scope[key] = $sce.trustAsHtml(newValue);\n            });\n          }\n        });\n        if (attr.bsModal) {\n          scope.$watch(attr.bsModal, function(newValue, oldValue) {\n            if (angular.isObject(newValue)) {\n              angular.extend(scope, newValue);\n            } else {\n              scope.content = newValue;\n            }\n          }, true);\n        }\n        var modal = $modal(options);\n        element.on(attr.trigger || 'click', modal.toggle);\n        scope.$on('$destroy', function() {\n          if (modal) modal.destroy();\n          options = null;\n          modal = null;\n        });\n      }\n    };\n  } ]);\n  if (angular.version.minor < 3 && angular.version.dot < 14) {\n    angular.module('ng').factory('$$rAF', [ '$window', '$timeout', function($window, $timeout) {\n      var requestAnimationFrame = $window.requestAnimationFrame || $window.webkitRequestAnimationFrame || $window.mozRequestAnimationFrame;\n      var cancelAnimationFrame = $window.cancelAnimationFrame || $window.webkitCancelAnimationFrame || $window.mozCancelAnimationFrame || $window.webkitCancelRequestAnimationFrame;\n      var rafSupported = !!requestAnimationFrame;\n      var raf = rafSupported ? function(fn) {\n        var id = requestAnimationFrame(fn);\n        return function() {\n          cancelAnimationFrame(id);\n        };\n      } : function(fn) {\n        var timer = $timeout(fn, 16.66, false);\n        return function() {\n          $timeout.cancel(timer);\n        };\n      };\n      raf.supported = rafSupported;\n      return raf;\n    } ]);\n  }\n  angular.module('mgcrea.ngStrap.helpers.parseOptions', []).provider('$parseOptions', function() {\n    var defaults = this.defaults = {\n      regexp: /^\\s*(.*?)(?:\\s+as\\s+(.*?))?(?:\\s+group\\s+by\\s+(.*))?\\s+for\\s+(?:([\\$\\w][\\$\\w]*)|(?:\\(\\s*([\\$\\w][\\$\\w]*)\\s*,\\s*([\\$\\w][\\$\\w]*)\\s*\\)))\\s+in\\s+(.*?)(?:\\s+track\\s+by\\s+(.*?))?$/\n    };\n    this.$get = [ '$parse', '$q', function($parse, $q) {\n      function ParseOptionsFactory(attr, config) {\n        var $parseOptions = {};\n        var options = angular.extend({}, defaults, config);\n        $parseOptions.$values = [];\n        var match;\n        var displayFn;\n        var valueName;\n        var keyName;\n        var groupByFn;\n        var valueFn;\n        var valuesFn;\n        $parseOptions.init = function() {\n          $parseOptions.$match = match = attr.match(options.regexp);\n          displayFn = $parse(match[2] || match[1]);\n          valueName = match[4] || match[6];\n          keyName = match[5];\n          groupByFn = $parse(match[3] || '');\n          valueFn = $parse(match[2] ? match[1] : valueName);\n          valuesFn = $parse(match[7]);\n        };\n        $parseOptions.valuesFn = function(scope, controller) {\n          return $q.when(valuesFn(scope, controller)).then(function(values) {\n            if (!angular.isArray(values)) {\n              values = [];\n            }\n            $parseOptions.$values = values.length ? parseValues(values, scope) : [];\n            return $parseOptions.$values;\n          });\n        };\n        $parseOptions.displayValue = function(modelValue) {\n          var scope = {};\n          scope[valueName] = modelValue;\n          return displayFn(scope);\n        };\n        function parseValues(values, scope) {\n          return values.map(function(match, index) {\n            var locals = {};\n            var label;\n            var value;\n            locals[valueName] = match;\n            label = displayFn(scope, locals);\n            value = valueFn(scope, locals);\n            return {\n              label: label,\n              value: value,\n              index: index\n            };\n          });\n        }\n        $parseOptions.init();\n        return $parseOptions;\n      }\n      return ParseOptionsFactory;\n    } ];\n  });\n  angular.module('mgcrea.ngStrap.helpers.dimensions', []).factory('dimensions', function() {\n    var fn = {};\n    var nodeName = fn.nodeName = function(element, name) {\n      return element.nodeName && element.nodeName.toLowerCase() === name.toLowerCase();\n    };\n    fn.css = function(element, prop, extra) {\n      var value;\n      if (element.currentStyle) {\n        value = element.currentStyle[prop];\n      } else if (window.getComputedStyle) {\n        value = window.getComputedStyle(element)[prop];\n      } else {\n        value = element.style[prop];\n      }\n      return extra === true ? parseFloat(value) || 0 : value;\n    };\n    fn.offset = function(element) {\n      var boxRect = element.getBoundingClientRect();\n      var docElement = element.ownerDocument;\n      return {\n        width: boxRect.width || element.offsetWidth,\n        height: boxRect.height || element.offsetHeight,\n        top: boxRect.top + (window.pageYOffset || docElement.documentElement.scrollTop) - (docElement.documentElement.clientTop || 0),\n        left: boxRect.left + (window.pageXOffset || docElement.documentElement.scrollLeft) - (docElement.documentElement.clientLeft || 0)\n      };\n    };\n    fn.setOffset = function(element, options, i) {\n      var curPosition;\n      var curLeft;\n      var curCSSTop;\n      var curTop;\n      var curOffset;\n      var curCSSLeft;\n      var calculatePosition;\n      var position = fn.css(element, 'position');\n      var curElem = angular.element(element);\n      var props = {};\n      if (position === 'static') {\n        element.style.position = 'relative';\n      }\n      curOffset = fn.offset(element);\n      curCSSTop = fn.css(element, 'top');\n      curCSSLeft = fn.css(element, 'left');\n      calculatePosition = (position === 'absolute' || position === 'fixed') && (curCSSTop + curCSSLeft).indexOf('auto') > -1;\n      if (calculatePosition) {\n        curPosition = fn.position(element);\n        curTop = curPosition.top;\n        curLeft = curPosition.left;\n      } else {\n        curTop = parseFloat(curCSSTop) || 0;\n        curLeft = parseFloat(curCSSLeft) || 0;\n      }\n      if (angular.isFunction(options)) {\n        options = options.call(element, i, curOffset);\n      }\n      if (options.top !== null) {\n        props.top = options.top - curOffset.top + curTop;\n      }\n      if (options.left !== null) {\n        props.left = options.left - curOffset.left + curLeft;\n      }\n      if ('using' in options) {\n        options.using.call(curElem, props);\n      } else {\n        curElem.css({\n          top: props.top + 'px',\n          left: props.left + 'px'\n        });\n      }\n    };\n    fn.position = function(element) {\n      var offsetParentRect = {\n        top: 0,\n        left: 0\n      };\n      var offsetParentEl;\n      var offset;\n      if (fn.css(element, 'position') === 'fixed') {\n        offset = element.getBoundingClientRect();\n      } else {\n        offsetParentEl = offsetParentElement(element);\n        offset = fn.offset(element);\n        if (!nodeName(offsetParentEl, 'html')) {\n          offsetParentRect = fn.offset(offsetParentEl);\n        }\n        offsetParentRect.top += fn.css(offsetParentEl, 'borderTopWidth', true);\n        offsetParentRect.left += fn.css(offsetParentEl, 'borderLeftWidth', true);\n      }\n      return {\n        width: element.offsetWidth,\n        height: element.offsetHeight,\n        top: offset.top - offsetParentRect.top - fn.css(element, 'marginTop', true),\n        left: offset.left - offsetParentRect.left - fn.css(element, 'marginLeft', true)\n      };\n    };\n    function offsetParentElement(element) {\n      var docElement = element.ownerDocument;\n      var offsetParent = element.offsetParent || docElement;\n      if (nodeName(offsetParent, '#document')) return docElement.documentElement;\n      while (offsetParent && !nodeName(offsetParent, 'html') && fn.css(offsetParent, 'position') === 'static') {\n        offsetParent = offsetParent.offsetParent;\n      }\n      return offsetParent || docElement.documentElement;\n    }\n    fn.height = function(element, outer) {\n      var value = element.offsetHeight;\n      if (outer) {\n        value += fn.css(element, 'marginTop', true) + fn.css(element, 'marginBottom', true);\n      } else {\n        value -= fn.css(element, 'paddingTop', true) + fn.css(element, 'paddingBottom', true) + fn.css(element, 'borderTopWidth', true) + fn.css(element, 'borderBottomWidth', true);\n      }\n      return value;\n    };\n    fn.width = function(element, outer) {\n      var value = element.offsetWidth;\n      if (outer) {\n        value += fn.css(element, 'marginLeft', true) + fn.css(element, 'marginRight', true);\n      } else {\n        value -= fn.css(element, 'paddingLeft', true) + fn.css(element, 'paddingRight', true) + fn.css(element, 'borderLeftWidth', true) + fn.css(element, 'borderRightWidth', true);\n      }\n      return value;\n    };\n    return fn;\n  });\n  angular.module('mgcrea.ngStrap.helpers.debounce', []).factory('debounce', [ '$timeout', function($timeout) {\n    return function(func, wait, immediate) {\n      var timeout = null;\n      return function() {\n        var context = this;\n        var args = arguments;\n        var callNow = immediate && !timeout;\n        if (timeout) {\n          $timeout.cancel(timeout);\n        }\n        timeout = $timeout(function later() {\n          timeout = null;\n          if (!immediate) {\n            func.apply(context, args);\n          }\n        }, wait, false);\n        if (callNow) {\n          func.apply(context, args);\n        }\n        return timeout;\n      };\n    };\n  } ]).factory('throttle', [ '$timeout', function($timeout) {\n    return function(func, wait, options) {\n      var timeout = null;\n      if (!options) options = {};\n      return function() {\n        var context = this;\n        var args = arguments;\n        if (!timeout) {\n          if (options.leading !== false) {\n            func.apply(context, args);\n          }\n          timeout = $timeout(function later() {\n            timeout = null;\n            if (options.trailing !== false) {\n              func.apply(context, args);\n            }\n          }, wait, false);\n        }\n      };\n    };\n  } ]);\n  angular.module('mgcrea.ngStrap.helpers.dateParser', []).provider('$dateParser', [ '$localeProvider', function($localeProvider) {\n    function ParseDate() {\n      this.year = 1970;\n      this.month = 0;\n      this.day = 1;\n      this.hours = 0;\n      this.minutes = 0;\n      this.seconds = 0;\n      this.milliseconds = 0;\n    }\n    ParseDate.prototype.setMilliseconds = function(value) {\n      this.milliseconds = value;\n    };\n    ParseDate.prototype.setSeconds = function(value) {\n      this.seconds = value;\n    };\n    ParseDate.prototype.setMinutes = function(value) {\n      this.minutes = value;\n    };\n    ParseDate.prototype.setHours = function(value) {\n      this.hours = value;\n    };\n    ParseDate.prototype.getHours = function() {\n      return this.hours;\n    };\n    ParseDate.prototype.setDate = function(value) {\n      this.day = value;\n    };\n    ParseDate.prototype.setMonth = function(value) {\n      this.month = value;\n    };\n    ParseDate.prototype.setFullYear = function(value) {\n      this.year = value;\n    };\n    ParseDate.prototype.fromDate = function(value) {\n      this.year = value.getFullYear();\n      this.month = value.getMonth();\n      this.day = value.getDate();\n      this.hours = value.getHours();\n      this.minutes = value.getMinutes();\n      this.seconds = value.getSeconds();\n      this.milliseconds = value.getMilliseconds();\n      return this;\n    };\n    ParseDate.prototype.toDate = function() {\n      return new Date(this.year, this.month, this.day, this.hours, this.minutes, this.seconds, this.milliseconds);\n    };\n    var proto = ParseDate.prototype;\n    function noop() {}\n    function isNumeric(n) {\n      return !isNaN(parseFloat(n)) && isFinite(n);\n    }\n    function indexOfCaseInsensitive(array, value) {\n      var len = array.length;\n      var str = value.toString().toLowerCase();\n      for (var i = 0; i < len; i++) {\n        if (array[i].toLowerCase() === str) {\n          return i;\n        }\n      }\n      return -1;\n    }\n    var defaults = this.defaults = {\n      format: 'shortDate',\n      strict: false\n    };\n    this.$get = [ '$locale', 'dateFilter', function($locale, dateFilter) {\n      var DateParserFactory = function(config) {\n        var options = angular.extend({}, defaults, config);\n        var $dateParser = {};\n        var regExpMap = {\n          sss: '[0-9]{3}',\n          ss: '[0-5][0-9]',\n          s: options.strict ? '[1-5]?[0-9]' : '[0-9]|[0-5][0-9]',\n          mm: '[0-5][0-9]',\n          m: options.strict ? '[1-5]?[0-9]' : '[0-9]|[0-5][0-9]',\n          HH: '[01][0-9]|2[0-3]',\n          H: options.strict ? '1?[0-9]|2[0-3]' : '[01]?[0-9]|2[0-3]',\n          hh: '[0][1-9]|[1][012]',\n          h: options.strict ? '[1-9]|1[012]' : '0?[1-9]|1[012]',\n          a: 'AM|PM',\n          EEEE: $locale.DATETIME_FORMATS.DAY.join('|'),\n          EEE: $locale.DATETIME_FORMATS.SHORTDAY.join('|'),\n          dd: '0[1-9]|[12][0-9]|3[01]',\n          d: options.strict ? '[1-9]|[1-2][0-9]|3[01]' : '0?[1-9]|[1-2][0-9]|3[01]',\n          MMMM: $locale.DATETIME_FORMATS.MONTH.join('|'),\n          MMM: $locale.DATETIME_FORMATS.SHORTMONTH.join('|'),\n          MM: '0[1-9]|1[012]',\n          M: options.strict ? '[1-9]|1[012]' : '0?[1-9]|1[012]',\n          yyyy: '[1]{1}[0-9]{3}|[2]{1}[0-9]{3}',\n          yy: '[0-9]{2}',\n          y: options.strict ? '-?(0|[1-9][0-9]{0,3})' : '-?0*[0-9]{1,4}'\n        };\n        var setFnMap = {\n          sss: proto.setMilliseconds,\n          ss: proto.setSeconds,\n          s: proto.setSeconds,\n          mm: proto.setMinutes,\n          m: proto.setMinutes,\n          HH: proto.setHours,\n          H: proto.setHours,\n          hh: proto.setHours,\n          h: proto.setHours,\n          EEEE: noop,\n          EEE: noop,\n          dd: proto.setDate,\n          d: proto.setDate,\n          a: function(value) {\n            var hours = this.getHours() % 12;\n            return this.setHours(value.match(/pm/i) ? hours + 12 : hours);\n          },\n          MMMM: function(value) {\n            return this.setMonth(indexOfCaseInsensitive($locale.DATETIME_FORMATS.MONTH, value));\n          },\n          MMM: function(value) {\n            return this.setMonth(indexOfCaseInsensitive($locale.DATETIME_FORMATS.SHORTMONTH, value));\n          },\n          MM: function(value) {\n            return this.setMonth(1 * value - 1);\n          },\n          M: function(value) {\n            return this.setMonth(1 * value - 1);\n          },\n          yyyy: proto.setFullYear,\n          yy: function(value) {\n            return this.setFullYear(2e3 + 1 * value);\n          },\n          y: function(value) {\n            return 1 * value <= 50 && value.length === 2 ? this.setFullYear(2e3 + 1 * value) : this.setFullYear(1 * value);\n          }\n        };\n        var regex;\n        var setMap;\n        $dateParser.init = function() {\n          $dateParser.$format = $locale.DATETIME_FORMATS[options.format] || options.format;\n          regex = regExpForFormat($dateParser.$format);\n          setMap = setMapForFormat($dateParser.$format);\n        };\n        $dateParser.isValid = function(date) {\n          if (angular.isDate(date)) return !isNaN(date.getTime());\n          return regex.test(date);\n        };\n        $dateParser.parse = function(value, baseDate, format, timezone) {\n          if (format) format = $locale.DATETIME_FORMATS[format] || format;\n          if (angular.isDate(value)) value = dateFilter(value, format || $dateParser.$format, timezone);\n          var formatRegex = format ? regExpForFormat(format) : regex;\n          var formatSetMap = format ? setMapForFormat(format) : setMap;\n          var matches = formatRegex.exec(value);\n          if (!matches) return false;\n          var date = baseDate && !isNaN(baseDate.getTime()) ? new ParseDate().fromDate(baseDate) : new ParseDate().fromDate(new Date(1970, 0, 1, 0));\n          for (var i = 0; i < matches.length - 1; i++) {\n            if (formatSetMap[i]) formatSetMap[i].call(date, matches[i + 1]);\n          }\n          var newDate = date.toDate();\n          if (parseInt(date.day, 10) !== newDate.getDate()) {\n            return false;\n          }\n          return newDate;\n        };\n        $dateParser.getDateForAttribute = function(key, value) {\n          var date;\n          if (value === 'today') {\n            var today = new Date();\n            date = new Date(today.getFullYear(), today.getMonth(), today.getDate() + (key === 'maxDate' ? 1 : 0), 0, 0, 0, key === 'minDate' ? 0 : -1);\n          } else if (angular.isString(value) && value.match(/^\".+\"$/)) {\n            date = new Date(value.substr(1, value.length - 2));\n          } else if (isNumeric(value)) {\n            date = new Date(parseInt(value, 10));\n          } else if (angular.isString(value) && value.length === 0) {\n            date = key === 'minDate' ? -Infinity : +Infinity;\n          } else {\n            date = new Date(value);\n          }\n          return date;\n        };\n        $dateParser.getTimeForAttribute = function(key, value) {\n          var time;\n          if (value === 'now') {\n            time = new Date().setFullYear(1970, 0, 1);\n          } else if (angular.isString(value) && value.match(/^\".+\"$/)) {\n            time = new Date(value.substr(1, value.length - 2)).setFullYear(1970, 0, 1);\n          } else if (isNumeric(value)) {\n            time = new Date(parseInt(value, 10)).setFullYear(1970, 0, 1);\n          } else if (angular.isString(value) && value.length === 0) {\n            time = key === 'minTime' ? -Infinity : +Infinity;\n          } else {\n            time = $dateParser.parse(value, new Date(1970, 0, 1, 0));\n          }\n          return time;\n        };\n        $dateParser.daylightSavingAdjust = function(date) {\n          if (!date) {\n            return null;\n          }\n          date.setHours(date.getHours() > 12 ? date.getHours() + 2 : 0);\n          return date;\n        };\n        $dateParser.timezoneOffsetAdjust = function(date, timezone, undo) {\n          if (!date) {\n            return null;\n          }\n          if (timezone && timezone === 'UTC') {\n            date = new Date(date.getTime());\n            date.setMinutes(date.getMinutes() + (undo ? -1 : 1) * date.getTimezoneOffset());\n          }\n          return date;\n        };\n        function regExpForFormat(format) {\n          var re = buildDateAbstractRegex(format);\n          return buildDateParseRegex(re);\n        }\n        function buildDateAbstractRegex(format) {\n          var escapedFormat = escapeReservedSymbols(format);\n          var escapedLiteralFormat = escapedFormat.replace(/''/g, '\\\\\\'');\n          var literalRegex = /('(?:\\\\'|.)*?')/;\n          var formatParts = escapedLiteralFormat.split(literalRegex);\n          var dateElements = Object.keys(regExpMap);\n          var dateRegexParts = [];\n          angular.forEach(formatParts, function(part) {\n            if (isFormatStringLiteral(part)) {\n              part = trimLiteralEscapeChars(part);\n            } else {\n              for (var i = 0; i < dateElements.length; i++) {\n                part = part.split(dateElements[i]).join('${' + i + '}');\n              }\n            }\n            dateRegexParts.push(part);\n          });\n          return dateRegexParts.join('');\n        }\n        function escapeReservedSymbols(text) {\n          return text.replace(/\\\\/g, '[\\\\\\\\]').replace(/-/g, '[-]').replace(/\\./g, '[.]').replace(/\\*/g, '[*]').replace(/\\+/g, '[+]').replace(/\\?/g, '[?]').replace(/\\$/g, '[$]').replace(/\\^/g, '[^]').replace(/\\//g, '[/]').replace(/\\\\s/g, '[\\\\s]');\n        }\n        function isFormatStringLiteral(text) {\n          return /^'.*'$/.test(text);\n        }\n        function trimLiteralEscapeChars(text) {\n          return text.replace(/^'(.*)'$/, '$1');\n        }\n        function buildDateParseRegex(abstractRegex) {\n          var dateElements = Object.keys(regExpMap);\n          var re = abstractRegex;\n          for (var i = 0; i < dateElements.length; i++) {\n            re = re.split('${' + i + '}').join('(' + regExpMap[dateElements[i]] + ')');\n          }\n          return new RegExp('^' + re + '$', [ 'i' ]);\n        }\n        function setMapForFormat(format) {\n          var re = buildDateAbstractRegex(format);\n          return buildDateParseValuesMap(re);\n        }\n        function buildDateParseValuesMap(abstractRegex) {\n          var dateElements = Object.keys(regExpMap);\n          var valuesRegex = new RegExp('\\\\${(\\\\d+)}', 'g');\n          var valuesMatch;\n          var keyIndex;\n          var valueKey;\n          var valueFunction;\n          var valuesFunctionMap = [];\n          while ((valuesMatch = valuesRegex.exec(abstractRegex)) !== null) {\n            keyIndex = valuesMatch[1];\n            valueKey = dateElements[keyIndex];\n            valueFunction = setFnMap[valueKey];\n            valuesFunctionMap.push(valueFunction);\n          }\n          return valuesFunctionMap;\n        }\n        $dateParser.init();\n        return $dateParser;\n      };\n      return DateParserFactory;\n    } ];\n  } ]);\n  angular.module('mgcrea.ngStrap.helpers.dateFormatter', []).service('$dateFormatter', [ '$locale', 'dateFilter', function($locale, dateFilter) {\n    this.getDefaultLocale = function() {\n      return $locale.id;\n    };\n    this.getDatetimeFormat = function(format, lang) {\n      return $locale.DATETIME_FORMATS[format] || format;\n    };\n    this.weekdaysShort = function(lang) {\n      return $locale.DATETIME_FORMATS.SHORTDAY;\n    };\n    function splitTimeFormat(format) {\n      return /(h+)([:\\.])?(m+)([:\\.])?(s*)[ ]?(a?)/i.exec(format).slice(1);\n    }\n    this.hoursFormat = function(timeFormat) {\n      return splitTimeFormat(timeFormat)[0];\n    };\n    this.minutesFormat = function(timeFormat) {\n      return splitTimeFormat(timeFormat)[2];\n    };\n    this.secondsFormat = function(timeFormat) {\n      return splitTimeFormat(timeFormat)[4];\n    };\n    this.timeSeparator = function(timeFormat) {\n      return splitTimeFormat(timeFormat)[1];\n    };\n    this.showSeconds = function(timeFormat) {\n      return !!splitTimeFormat(timeFormat)[4];\n    };\n    this.showAM = function(timeFormat) {\n      return !!splitTimeFormat(timeFormat)[5];\n    };\n    this.formatDate = function(date, format, lang, timezone) {\n      return dateFilter(date, format, timezone);\n    };\n  } ]);\n  angular.module('mgcrea.ngStrap.core', []).service('$bsCompiler', bsCompilerService);\n  function bsCompilerService($q, $http, $injector, $compile, $controller, $templateCache) {\n    this.compile = function(options) {\n      if (options.template && /\\.html$/.test(options.template)) {\n        console.warn('Deprecated use of `template` option to pass a file. Please use the `templateUrl` option instead.');\n        options.templateUrl = options.template;\n        options.template = '';\n      }\n      var templateUrl = options.templateUrl;\n      var template = options.template || '';\n      var controller = options.controller;\n      var controllerAs = options.controllerAs;\n      var resolve = options.resolve || {};\n      var locals = options.locals || {};\n      var transformTemplate = options.transformTemplate || angular.identity;\n      var bindToController = options.bindToController;\n      angular.forEach(resolve, function(value, key) {\n        if (angular.isString(value)) {\n          resolve[key] = $injector.get(value);\n        } else {\n          resolve[key] = $injector.invoke(value);\n        }\n      });\n      angular.extend(resolve, locals);\n      if (template) {\n        resolve.$template = $q.when(template);\n      } else if (templateUrl) {\n        resolve.$template = fetchTemplate(templateUrl);\n      } else {\n        throw new Error('Missing `template` / `templateUrl` option.');\n      }\n      if (options.titleTemplate) {\n        resolve.$template = $q.all([ resolve.$template, fetchTemplate(options.titleTemplate) ]).then(function(templates) {\n          var templateEl = angular.element(templates[0]);\n          findElement('[ng-bind=\"title\"]', templateEl[0]).removeAttr('ng-bind').html(templates[1]);\n          return templateEl[0].outerHTML;\n        });\n      }\n      if (options.contentTemplate) {\n        resolve.$template = $q.all([ resolve.$template, fetchTemplate(options.contentTemplate) ]).then(function(templates) {\n          var templateEl = angular.element(templates[0]);\n          var contentEl = findElement('[ng-bind=\"content\"]', templateEl[0]).removeAttr('ng-bind').html(templates[1]);\n          if (!options.templateUrl) contentEl.next().remove();\n          return templateEl[0].outerHTML;\n        });\n      }\n      return $q.all(resolve).then(function(locals) {\n        var template = transformTemplate(locals.$template);\n        if (options.html) {\n          template = template.replace(/ng-bind=\"/gi, 'ng-bind-html=\"');\n        }\n        var element = angular.element('<div>').html(template.trim()).contents();\n        var linkFn = $compile(element);\n        return {\n          locals: locals,\n          element: element,\n          link: function link(scope) {\n            locals.$scope = scope;\n            if (controller) {\n              var invokeCtrl = $controller(controller, locals, true);\n              if (bindToController) {\n                angular.extend(invokeCtrl.instance, locals);\n              }\n              var ctrl = angular.isObject(invokeCtrl) ? invokeCtrl : invokeCtrl();\n              element.data('$ngControllerController', ctrl);\n              element.children().data('$ngControllerController', ctrl);\n              if (controllerAs) {\n                scope[controllerAs] = ctrl;\n              }\n            }\n            return linkFn.apply(null, arguments);\n          }\n        };\n      });\n    };\n    function findElement(query, element) {\n      return angular.element((element || document).querySelectorAll(query));\n    }\n    var fetchPromises = {};\n    function fetchTemplate(template) {\n      if (fetchPromises[template]) return fetchPromises[template];\n      return fetchPromises[template] = $http.get(template, {\n        cache: $templateCache\n      }).then(function(res) {\n        return res.data;\n      });\n    }\n  }\n  angular.module('mgcrea.ngStrap.dropdown', [ 'mgcrea.ngStrap.tooltip' ]).provider('$dropdown', function() {\n    var defaults = this.defaults = {\n      animation: 'am-fade',\n      prefixClass: 'dropdown',\n      prefixEvent: 'dropdown',\n      placement: 'bottom-left',\n      templateUrl: 'dropdown/dropdown.tpl.html',\n      trigger: 'click',\n      container: false,\n      keyboard: true,\n      html: false,\n      delay: 0\n    };\n    this.$get = [ '$window', '$rootScope', '$tooltip', '$timeout', function($window, $rootScope, $tooltip, $timeout) {\n      var bodyEl = angular.element($window.document.body);\n      var matchesSelector = Element.prototype.matchesSelector || Element.prototype.webkitMatchesSelector || Element.prototype.mozMatchesSelector || Element.prototype.msMatchesSelector || Element.prototype.oMatchesSelector;\n      function DropdownFactory(element, config) {\n        var $dropdown = {};\n        var options = angular.extend({}, defaults, config);\n        $dropdown.$scope = options.scope && options.scope.$new() || $rootScope.$new();\n        $dropdown = $tooltip(element, options);\n        var parentEl = element.parent();\n        $dropdown.$onKeyDown = function(evt) {\n          if (!/(38|40)/.test(evt.keyCode)) return;\n          evt.preventDefault();\n          evt.stopPropagation();\n          var items = angular.element($dropdown.$element[0].querySelectorAll('li:not(.divider) a'));\n          if (!items.length) return;\n          var index;\n          angular.forEach(items, function(el, i) {\n            if (matchesSelector && matchesSelector.call(el, ':focus')) index = i;\n          });\n          if (evt.keyCode === 38 && index > 0) index--; else if (evt.keyCode === 40 && index < items.length - 1) index++; else if (angular.isUndefined(index)) index = 0;\n          items.eq(index)[0].focus();\n        };\n        var show = $dropdown.show;\n        $dropdown.show = function() {\n          show();\n          $timeout(function() {\n            if (options.keyboard && $dropdown.$element) $dropdown.$element.on('keydown', $dropdown.$onKeyDown);\n            bodyEl.on('click', onBodyClick);\n          }, 0, false);\n          if (parentEl.hasClass('dropdown')) parentEl.addClass('open');\n        };\n        var hide = $dropdown.hide;\n        $dropdown.hide = function() {\n          if (!$dropdown.$isShown) return;\n          if (options.keyboard && $dropdown.$element) $dropdown.$element.off('keydown', $dropdown.$onKeyDown);\n          bodyEl.off('click', onBodyClick);\n          if (parentEl.hasClass('dropdown')) parentEl.removeClass('open');\n          hide();\n        };\n        var destroy = $dropdown.destroy;\n        $dropdown.destroy = function() {\n          bodyEl.off('click', onBodyClick);\n          destroy();\n        };\n        function onBodyClick(evt) {\n          if (evt.target === element[0]) return;\n          return evt.target !== element[0] && $dropdown.hide();\n        }\n        return $dropdown;\n      }\n      return DropdownFactory;\n    } ];\n  }).directive('bsDropdown', [ '$window', '$sce', '$dropdown', function($window, $sce, $dropdown) {\n    return {\n      restrict: 'EAC',\n      scope: true,\n      compile: function(tElement, tAttrs) {\n        if (!tAttrs.bsDropdown) {\n          var nextSibling = tElement[0].nextSibling;\n          while (nextSibling && nextSibling.nodeType !== 1) {\n            nextSibling = nextSibling.nextSibling;\n          }\n          if (nextSibling && nextSibling.className.split(' ').indexOf('dropdown-menu') >= 0) {\n            tAttrs.template = nextSibling.outerHTML;\n            tAttrs.templateUrl = undefined;\n            nextSibling.parentNode.removeChild(nextSibling);\n          }\n        }\n        return function postLink(scope, element, attr) {\n          var options = {\n            scope: scope\n          };\n          angular.forEach([ 'template', 'templateUrl', 'controller', 'controllerAs', 'placement', 'container', 'delay', 'trigger', 'keyboard', 'html', 'animation', 'id', 'autoClose' ], function(key) {\n            if (angular.isDefined(tAttrs[key])) options[key] = tAttrs[key];\n          });\n          var falseValueRegExp = /^(false|0|)$/i;\n          angular.forEach([ 'html', 'container' ], function(key) {\n            if (angular.isDefined(attr[key]) && falseValueRegExp.test(attr[key])) options[key] = false;\n          });\n          angular.forEach([ 'onBeforeShow', 'onShow', 'onBeforeHide', 'onHide' ], function(key) {\n            var bsKey = 'bs' + key.charAt(0).toUpperCase() + key.slice(1);\n            if (angular.isDefined(attr[bsKey])) {\n              options[key] = scope.$eval(attr[bsKey]);\n            }\n          });\n          if (attr.bsDropdown) {\n            scope.$watch(attr.bsDropdown, function(newValue, oldValue) {\n              scope.content = newValue;\n            }, true);\n          }\n          var dropdown = $dropdown(element, options);\n          if (attr.bsShow) {\n            scope.$watch(attr.bsShow, function(newValue, oldValue) {\n              if (!dropdown || !angular.isDefined(newValue)) return;\n              if (angular.isString(newValue)) newValue = !!newValue.match(/true|,?(dropdown),?/i);\n              if (newValue === true) {\n                dropdown.show();\n              } else {\n                dropdown.hide();\n              }\n            });\n          }\n          scope.$on('$destroy', function() {\n            if (dropdown) dropdown.destroy();\n            options = null;\n            dropdown = null;\n          });\n        };\n      }\n    };\n  } ]);\n  angular.module('mgcrea.ngStrap.button', []).provider('$button', function() {\n    var defaults = this.defaults = {\n      activeClass: 'active',\n      toggleEvent: 'click'\n    };\n    this.$get = function() {\n      return {\n        defaults: defaults\n      };\n    };\n  }).directive('bsCheckboxGroup', function() {\n    return {\n      restrict: 'A',\n      require: 'ngModel',\n      compile: function postLink(element, attr) {\n        element.attr('data-toggle', 'buttons');\n        element.removeAttr('ng-model');\n        var children = element[0].querySelectorAll('input[type=\"checkbox\"]');\n        angular.forEach(children, function(child) {\n          var childEl = angular.element(child);\n          childEl.attr('bs-checkbox', '');\n          childEl.attr('ng-model', attr.ngModel + '.' + childEl.attr('value'));\n        });\n      }\n    };\n  }).directive('bsCheckbox', [ '$button', '$$rAF', function($button, $$rAF) {\n    var defaults = $button.defaults;\n    var constantValueRegExp = /^(true|false|\\d+)$/;\n    return {\n      restrict: 'A',\n      require: 'ngModel',\n      link: function postLink(scope, element, attr, controller) {\n        var options = defaults;\n        var isInput = element[0].nodeName === 'INPUT';\n        var activeElement = isInput ? element.parent() : element;\n        var trueValue = angular.isDefined(attr.trueValue) ? attr.trueValue : true;\n        if (constantValueRegExp.test(attr.trueValue)) {\n          trueValue = scope.$eval(attr.trueValue);\n        }\n        var falseValue = angular.isDefined(attr.falseValue) ? attr.falseValue : false;\n        if (constantValueRegExp.test(attr.falseValue)) {\n          falseValue = scope.$eval(attr.falseValue);\n        }\n        var hasExoticValues = typeof trueValue !== 'boolean' || typeof falseValue !== 'boolean';\n        if (hasExoticValues) {\n          controller.$parsers.push(function(viewValue) {\n            return viewValue ? trueValue : falseValue;\n          });\n          controller.$formatters.push(function(modelValue) {\n            return angular.equals(modelValue, trueValue);\n          });\n        }\n        controller.$render = function() {\n          var isActive = !!controller.$viewValue;\n          $$rAF(function() {\n            if (isInput) element[0].checked = isActive;\n            activeElement.toggleClass(options.activeClass, isActive);\n          });\n        };\n        element.bind(options.toggleEvent, function() {\n          scope.$apply(function() {\n            if (!isInput) {\n              controller.$setViewValue(!activeElement.hasClass('active'));\n            }\n            controller.$render();\n          });\n        });\n      }\n    };\n  } ]).directive('bsRadioGroup', function() {\n    return {\n      restrict: 'A',\n      require: 'ngModel',\n      compile: function postLink(element, attr) {\n        element.attr('data-toggle', 'buttons');\n        element.removeAttr('ng-model');\n        var children = element[0].querySelectorAll('input[type=\"radio\"]');\n        angular.forEach(children, function(child) {\n          angular.element(child).attr('bs-radio', '');\n          angular.element(child).attr('ng-model', attr.ngModel);\n        });\n      }\n    };\n  }).directive('bsRadio', [ '$button', '$$rAF', function($button, $$rAF) {\n    var defaults = $button.defaults;\n    var constantValueRegExp = /^(true|false|\\d+)$/;\n    return {\n      restrict: 'A',\n      require: 'ngModel',\n      link: function postLink(scope, element, attr, controller) {\n        var options = defaults;\n        var isInput = element[0].nodeName === 'INPUT';\n        var activeElement = isInput ? element.parent() : element;\n        var value;\n        attr.$observe('value', function(v) {\n          if (typeof v !== 'boolean' && constantValueRegExp.test(v)) {\n            value = scope.$eval(v);\n          } else {\n            value = v;\n          }\n          controller.$render();\n        });\n        controller.$render = function() {\n          var isActive = angular.equals(controller.$viewValue, value);\n          $$rAF(function() {\n            if (isInput) element[0].checked = isActive;\n            activeElement.toggleClass(options.activeClass, isActive);\n          });\n        };\n        element.bind(options.toggleEvent, function() {\n          scope.$apply(function() {\n            controller.$setViewValue(value);\n            controller.$render();\n          });\n        });\n      }\n    };\n  } ]);\n  angular.module('mgcrea.ngStrap.datepicker', [ 'mgcrea.ngStrap.helpers.dateParser', 'mgcrea.ngStrap.helpers.dateFormatter', 'mgcrea.ngStrap.tooltip' ]).provider('$datepicker', function() {\n    var defaults = this.defaults = {\n      animation: 'am-fade',\n      prefixClass: 'datepicker',\n      placement: 'bottom-left',\n      templateUrl: 'datepicker/datepicker.tpl.html',\n      trigger: 'focus',\n      container: false,\n      keyboard: true,\n      html: false,\n      delay: 0,\n      useNative: false,\n      dateType: 'date',\n      dateFormat: 'shortDate',\n      timezone: null,\n      modelDateFormat: null,\n      dayFormat: 'dd',\n      monthFormat: 'MMM',\n      yearFormat: 'yyyy',\n      monthTitleFormat: 'MMMM yyyy',\n      yearTitleFormat: 'yyyy',\n      strictFormat: false,\n      autoclose: false,\n      minDate: -Infinity,\n      maxDate: +Infinity,\n      startView: 0,\n      minView: 0,\n      startWeek: 0,\n      daysOfWeekDisabled: '',\n      hasToday: false,\n      hasClear: false,\n      iconLeft: 'glyphicon glyphicon-chevron-left',\n      iconRight: 'glyphicon glyphicon-chevron-right'\n    };\n    this.$get = [ '$window', '$document', '$rootScope', '$sce', '$dateFormatter', 'datepickerViews', '$tooltip', '$timeout', function($window, $document, $rootScope, $sce, $dateFormatter, datepickerViews, $tooltip, $timeout) {\n      var isNative = /(ip[ao]d|iphone|android)/gi.test($window.navigator.userAgent);\n      var isTouch = 'createTouch' in $window.document && isNative;\n      if (!defaults.lang) defaults.lang = $dateFormatter.getDefaultLocale();\n      function DatepickerFactory(element, controller, config) {\n        var $datepicker = $tooltip(element, angular.extend({}, defaults, config));\n        var parentScope = config.scope;\n        var options = $datepicker.$options;\n        var scope = $datepicker.$scope;\n        if (options.startView) options.startView -= options.minView;\n        var pickerViews = datepickerViews($datepicker);\n        $datepicker.$views = pickerViews.views;\n        var viewDate = pickerViews.viewDate;\n        scope.$mode = options.startView;\n        scope.$iconLeft = options.iconLeft;\n        scope.$iconRight = options.iconRight;\n        scope.$hasToday = options.hasToday;\n        scope.$hasClear = options.hasClear;\n        var $picker = $datepicker.$views[scope.$mode];\n        scope.$select = function(date, disabled) {\n          if (disabled) return;\n          $datepicker.select(date);\n        };\n        scope.$selectPane = function(value) {\n          $datepicker.$selectPane(value);\n        };\n        scope.$toggleMode = function() {\n          $datepicker.setMode((scope.$mode + 1) % $datepicker.$views.length);\n        };\n        scope.$setToday = function() {\n          if (options.autoclose) {\n            $datepicker.setMode(0);\n            $datepicker.select(new Date());\n          } else {\n            $datepicker.select(new Date(), true);\n          }\n        };\n        scope.$clear = function() {\n          if (options.autoclose) {\n            $datepicker.setMode(0);\n            $datepicker.select(null);\n          } else {\n            $datepicker.select(null, true);\n          }\n        };\n        $datepicker.update = function(date) {\n          if (angular.isDate(date) && !isNaN(date.getTime())) {\n            $datepicker.$date = date;\n            $picker.update.call($picker, date);\n          }\n          $datepicker.$build(true);\n        };\n        $datepicker.updateDisabledDates = function(dateRanges) {\n          options.disabledDateRanges = dateRanges;\n          for (var i = 0, l = scope.rows.length; i < l; i++) {\n            angular.forEach(scope.rows[i], $datepicker.$setDisabledEl);\n          }\n        };\n        $datepicker.select = function(date, keep) {\n          if (angular.isDate(date)) {\n            if (!angular.isDate(controller.$dateValue) || isNaN(controller.$dateValue.getTime())) {\n              controller.$dateValue = new Date(date);\n            }\n          } else {\n            controller.$dateValue = null;\n          }\n          if (!scope.$mode || keep) {\n            controller.$setViewValue(angular.copy(date));\n            controller.$render();\n            if (options.autoclose && !keep) {\n              $timeout(function() {\n                $datepicker.hide(true);\n              });\n            }\n          } else {\n            angular.extend(viewDate, {\n              year: date.getFullYear(),\n              month: date.getMonth(),\n              date: date.getDate()\n            });\n            $datepicker.setMode(scope.$mode - 1);\n            $datepicker.$build();\n          }\n        };\n        $datepicker.setMode = function(mode) {\n          scope.$mode = mode;\n          $picker = $datepicker.$views[scope.$mode];\n          $datepicker.$build();\n        };\n        $datepicker.$build = function(pristine) {\n          if (pristine === true && $picker.built) return;\n          if (pristine === false && !$picker.built) return;\n          $picker.build.call($picker);\n        };\n        $datepicker.$updateSelected = function() {\n          for (var i = 0, l = scope.rows.length; i < l; i++) {\n            angular.forEach(scope.rows[i], updateSelected);\n          }\n        };\n        $datepicker.$isSelected = function(date) {\n          return $picker.isSelected(date);\n        };\n        $datepicker.$setDisabledEl = function(el) {\n          el.disabled = $picker.isDisabled(el.date);\n        };\n        $datepicker.$selectPane = function(value) {\n          var steps = $picker.steps;\n          var targetDate = new Date(Date.UTC(viewDate.year + (steps.year || 0) * value, viewDate.month + (steps.month || 0) * value, 1));\n          angular.extend(viewDate, {\n            year: targetDate.getUTCFullYear(),\n            month: targetDate.getUTCMonth(),\n            date: targetDate.getUTCDate()\n          });\n          $datepicker.$build();\n        };\n        $datepicker.$onMouseDown = function(evt) {\n          evt.preventDefault();\n          evt.stopPropagation();\n          if (isTouch) {\n            var targetEl = angular.element(evt.target);\n            if (targetEl[0].nodeName.toLowerCase() !== 'button') {\n              targetEl = targetEl.parent();\n            }\n            targetEl.triggerHandler('click');\n          }\n        };\n        $datepicker.$onKeyDown = function(evt) {\n          if (!/(38|37|39|40|13)/.test(evt.keyCode) || evt.shiftKey || evt.altKey) return;\n          evt.preventDefault();\n          evt.stopPropagation();\n          if (evt.keyCode === 13) {\n            if (!scope.$mode) {\n              $datepicker.hide(true);\n            } else {\n              scope.$apply(function() {\n                $datepicker.setMode(scope.$mode - 1);\n              });\n            }\n            return;\n          }\n          $picker.onKeyDown(evt);\n          parentScope.$digest();\n        };\n        function updateSelected(el) {\n          el.selected = $datepicker.$isSelected(el.date);\n        }\n        function focusElement() {\n          element[0].focus();\n        }\n        var _init = $datepicker.init;\n        $datepicker.init = function() {\n          if (isNative && options.useNative) {\n            element.prop('type', 'date');\n            element.css('-webkit-appearance', 'textfield');\n            return;\n          } else if (isTouch) {\n            element.prop('type', 'text');\n            element.attr('readonly', 'true');\n            element.on('click', focusElement);\n          }\n          _init();\n        };\n        var _destroy = $datepicker.destroy;\n        $datepicker.destroy = function() {\n          if (isNative && options.useNative) {\n            element.off('click', focusElement);\n          }\n          _destroy();\n        };\n        var _show = $datepicker.show;\n        $datepicker.show = function() {\n          if (!isTouch && element.attr('readonly') || element.attr('disabled')) return;\n          _show();\n          $timeout(function() {\n            if (!$datepicker.$isShown) return;\n            $datepicker.$element.on(isTouch ? 'touchstart' : 'mousedown', $datepicker.$onMouseDown);\n            if (options.keyboard) {\n              element.on('keydown', $datepicker.$onKeyDown);\n            }\n          }, 0, false);\n        };\n        var _hide = $datepicker.hide;\n        $datepicker.hide = function(blur) {\n          if (!$datepicker.$isShown) return;\n          $datepicker.$element.off(isTouch ? 'touchstart' : 'mousedown', $datepicker.$onMouseDown);\n          if (options.keyboard) {\n            element.off('keydown', $datepicker.$onKeyDown);\n          }\n          _hide(blur);\n        };\n        return $datepicker;\n      }\n      DatepickerFactory.defaults = defaults;\n      return DatepickerFactory;\n    } ];\n  }).directive('bsDatepicker', [ '$window', '$parse', '$q', '$dateFormatter', '$dateParser', '$datepicker', function($window, $parse, $q, $dateFormatter, $dateParser, $datepicker) {\n    var isNative = /(ip[ao]d|iphone|android)/gi.test($window.navigator.userAgent);\n    return {\n      restrict: 'EAC',\n      require: 'ngModel',\n      link: function postLink(scope, element, attr, controller) {\n        var options = {\n          scope: scope\n        };\n        angular.forEach([ 'template', 'templateUrl', 'controller', 'controllerAs', 'placement', 'container', 'delay', 'trigger', 'html', 'animation', 'autoclose', 'dateType', 'dateFormat', 'timezone', 'modelDateFormat', 'dayFormat', 'strictFormat', 'startWeek', 'startDate', 'useNative', 'lang', 'startView', 'minView', 'iconLeft', 'iconRight', 'daysOfWeekDisabled', 'id', 'prefixClass', 'prefixEvent', 'hasToday', 'hasClear' ], function(key) {\n          if (angular.isDefined(attr[key])) options[key] = attr[key];\n        });\n        var falseValueRegExp = /^(false|0|)$/i;\n        angular.forEach([ 'html', 'container', 'autoclose', 'useNative', 'hasToday', 'hasClear' ], function(key) {\n          if (angular.isDefined(attr[key]) && falseValueRegExp.test(attr[key])) {\n            options[key] = false;\n          }\n        });\n        angular.forEach([ 'onBeforeShow', 'onShow', 'onBeforeHide', 'onHide' ], function(key) {\n          var bsKey = 'bs' + key.charAt(0).toUpperCase() + key.slice(1);\n          if (angular.isDefined(attr[bsKey])) {\n            options[key] = scope.$eval(attr[bsKey]);\n          }\n        });\n        var datepicker = $datepicker(element, controller, options);\n        options = datepicker.$options;\n        if (isNative && options.useNative) options.dateFormat = 'yyyy-MM-dd';\n        var lang = options.lang;\n        var formatDate = function(date, format) {\n          return $dateFormatter.formatDate(date, format, lang);\n        };\n        var dateParser = $dateParser({\n          format: options.dateFormat,\n          lang: lang,\n          strict: options.strictFormat\n        });\n        if (attr.bsShow) {\n          scope.$watch(attr.bsShow, function(newValue, oldValue) {\n            if (!datepicker || !angular.isDefined(newValue)) return;\n            if (angular.isString(newValue)) newValue = !!newValue.match(/true|,?(datepicker),?/i);\n            if (newValue === true) {\n              datepicker.show();\n            } else {\n              datepicker.hide();\n            }\n          });\n        }\n        angular.forEach([ 'minDate', 'maxDate' ], function(key) {\n          if (angular.isDefined(attr[key])) {\n            attr.$observe(key, function(newValue) {\n              datepicker.$options[key] = dateParser.getDateForAttribute(key, newValue);\n              if (!isNaN(datepicker.$options[key])) datepicker.$build(false);\n              validateAgainstMinMaxDate(controller.$dateValue);\n            });\n          }\n        });\n        if (angular.isDefined(attr.dateFormat)) {\n          attr.$observe('dateFormat', function(newValue) {\n            datepicker.$options.dateFormat = newValue;\n          });\n        }\n        scope.$watch(attr.ngModel, function(newValue, oldValue) {\n          datepicker.update(controller.$dateValue);\n        }, true);\n        function normalizeDateRanges(ranges) {\n          if (!ranges || !ranges.length) return null;\n          return ranges;\n        }\n        if (angular.isDefined(attr.disabledDates)) {\n          scope.$watch(attr.disabledDates, function(disabledRanges, previousValue) {\n            disabledRanges = normalizeDateRanges(disabledRanges);\n            previousValue = normalizeDateRanges(previousValue);\n            if (disabledRanges) {\n              datepicker.updateDisabledDates(disabledRanges);\n            }\n          });\n        }\n        function validateAgainstMinMaxDate(parsedDate) {\n          if (!angular.isDate(parsedDate)) return;\n          var isMinValid = isNaN(datepicker.$options.minDate) || parsedDate.getTime() >= datepicker.$options.minDate;\n          var isMaxValid = isNaN(datepicker.$options.maxDate) || parsedDate.getTime() <= datepicker.$options.maxDate;\n          var isValid = isMinValid && isMaxValid;\n          controller.$setValidity('date', isValid);\n          controller.$setValidity('min', isMinValid);\n          controller.$setValidity('max', isMaxValid);\n          if (isValid) controller.$dateValue = parsedDate;\n        }\n        controller.$parsers.unshift(function(viewValue) {\n          var date;\n          if (!viewValue) {\n            controller.$setValidity('date', true);\n            return null;\n          }\n          var parsedDate = dateParser.parse(viewValue, controller.$dateValue);\n          if (!parsedDate || isNaN(parsedDate.getTime())) {\n            controller.$setValidity('date', false);\n            return;\n          }\n          validateAgainstMinMaxDate(parsedDate);\n          if (options.dateType === 'string') {\n            date = dateParser.timezoneOffsetAdjust(parsedDate, options.timezone, true);\n            return formatDate(date, options.modelDateFormat || options.dateFormat);\n          }\n          date = dateParser.timezoneOffsetAdjust(controller.$dateValue, options.timezone, true);\n          if (options.dateType === 'number') {\n            return date.getTime();\n          } else if (options.dateType === 'unix') {\n            return date.getTime() / 1e3;\n          } else if (options.dateType === 'iso') {\n            return date.toISOString();\n          }\n          return new Date(date);\n        });\n        controller.$formatters.push(function(modelValue) {\n          var date;\n          if (angular.isUndefined(modelValue) || modelValue === null) {\n            date = NaN;\n          } else if (angular.isDate(modelValue)) {\n            date = modelValue;\n          } else if (options.dateType === 'string') {\n            date = dateParser.parse(modelValue, null, options.modelDateFormat);\n          } else if (options.dateType === 'unix') {\n            date = new Date(modelValue * 1e3);\n          } else {\n            date = new Date(modelValue);\n          }\n          controller.$dateValue = dateParser.timezoneOffsetAdjust(date, options.timezone);\n          return getDateFormattedString();\n        });\n        controller.$render = function() {\n          element.val(getDateFormattedString());\n        };\n        function getDateFormattedString() {\n          return !controller.$dateValue || isNaN(controller.$dateValue.getTime()) ? '' : formatDate(controller.$dateValue, options.dateFormat);\n        }\n        scope.$on('$destroy', function() {\n          if (datepicker) datepicker.destroy();\n          options = null;\n          datepicker = null;\n        });\n      }\n    };\n  } ]).provider('datepickerViews', function() {\n    function split(arr, size) {\n      var arrays = [];\n      while (arr.length > 0) {\n        arrays.push(arr.splice(0, size));\n      }\n      return arrays;\n    }\n    function mod(n, m) {\n      return (n % m + m) % m;\n    }\n    this.$get = [ '$dateFormatter', '$dateParser', '$sce', function($dateFormatter, $dateParser, $sce) {\n      return function(picker) {\n        var scope = picker.$scope;\n        var options = picker.$options;\n        var lang = options.lang;\n        var formatDate = function(date, format) {\n          return $dateFormatter.formatDate(date, format, lang);\n        };\n        var dateParser = $dateParser({\n          format: options.dateFormat,\n          lang: lang,\n          strict: options.strictFormat\n        });\n        var weekDaysMin = $dateFormatter.weekdaysShort(lang);\n        var weekDaysLabels = weekDaysMin.slice(options.startWeek).concat(weekDaysMin.slice(0, options.startWeek));\n        var weekDaysLabelsHtml = $sce.trustAsHtml('<th class=\"dow text-center\">' + weekDaysLabels.join('</th><th class=\"dow text-center\">') + '</th>');\n        var startDate = picker.$date || (options.startDate ? dateParser.getDateForAttribute('startDate', options.startDate) : new Date());\n        var viewDate = {\n          year: startDate.getFullYear(),\n          month: startDate.getMonth(),\n          date: startDate.getDate()\n        };\n        var views = [ {\n          format: options.dayFormat,\n          split: 7,\n          steps: {\n            month: 1\n          },\n          update: function(date, force) {\n            if (!this.built || force || date.getFullYear() !== viewDate.year || date.getMonth() !== viewDate.month) {\n              angular.extend(viewDate, {\n                year: picker.$date.getFullYear(),\n                month: picker.$date.getMonth(),\n                date: picker.$date.getDate()\n              });\n              picker.$build();\n            } else if (date.getDate() !== viewDate.date || date.getDate() === 1) {\n              viewDate.date = picker.$date.getDate();\n              picker.$updateSelected();\n            }\n          },\n          build: function() {\n            var firstDayOfMonth = new Date(viewDate.year, viewDate.month, 1);\n            var firstDayOfMonthOffset = firstDayOfMonth.getTimezoneOffset();\n            var firstDate = new Date(+firstDayOfMonth - mod(firstDayOfMonth.getDay() - options.startWeek, 7) * 864e5);\n            var firstDateOffset = firstDate.getTimezoneOffset();\n            var today = dateParser.timezoneOffsetAdjust(new Date(), options.timezone).toDateString();\n            if (firstDateOffset !== firstDayOfMonthOffset) firstDate = new Date(+firstDate + (firstDateOffset - firstDayOfMonthOffset) * 6e4);\n            var days = [];\n            var day;\n            for (var i = 0; i < 42; i++) {\n              day = dateParser.daylightSavingAdjust(new Date(firstDate.getFullYear(), firstDate.getMonth(), firstDate.getDate() + i));\n              days.push({\n                date: day,\n                isToday: day.toDateString() === today,\n                label: formatDate(day, this.format),\n                selected: picker.$date && this.isSelected(day),\n                muted: day.getMonth() !== viewDate.month,\n                disabled: this.isDisabled(day)\n              });\n            }\n            scope.title = formatDate(firstDayOfMonth, options.monthTitleFormat);\n            scope.showLabels = true;\n            scope.labels = weekDaysLabelsHtml;\n            scope.rows = split(days, this.split);\n            scope.isTodayDisabled = this.isDisabled(new Date());\n            this.built = true;\n          },\n          isSelected: function(date) {\n            return picker.$date && date.getFullYear() === picker.$date.getFullYear() && date.getMonth() === picker.$date.getMonth() && date.getDate() === picker.$date.getDate();\n          },\n          isDisabled: function(date) {\n            var time = date.getTime();\n            if (time < options.minDate || time > options.maxDate) return true;\n            if (options.daysOfWeekDisabled.indexOf(date.getDay()) !== -1) return true;\n            if (options.disabledDateRanges) {\n              for (var i = 0; i < options.disabledDateRanges.length; i++) {\n                if (time >= options.disabledDateRanges[i].start && time <= options.disabledDateRanges[i].end) {\n                  return true;\n                }\n              }\n            }\n            return false;\n          },\n          onKeyDown: function(evt) {\n            if (!picker.$date) {\n              return;\n            }\n            var actualTime = picker.$date.getTime();\n            var newDate;\n            if (evt.keyCode === 37) newDate = new Date(actualTime - 1 * 864e5); else if (evt.keyCode === 38) newDate = new Date(actualTime - 7 * 864e5); else if (evt.keyCode === 39) newDate = new Date(actualTime + 1 * 864e5); else if (evt.keyCode === 40) newDate = new Date(actualTime + 7 * 864e5);\n            if (!this.isDisabled(newDate)) picker.select(newDate, true);\n          }\n        }, {\n          name: 'month',\n          format: options.monthFormat,\n          split: 4,\n          steps: {\n            year: 1\n          },\n          update: function(date, force) {\n            if (!this.built || date.getFullYear() !== viewDate.year) {\n              angular.extend(viewDate, {\n                year: picker.$date.getFullYear(),\n                month: picker.$date.getMonth(),\n                date: picker.$date.getDate()\n              });\n              picker.$build();\n            } else if (date.getMonth() !== viewDate.month) {\n              angular.extend(viewDate, {\n                month: picker.$date.getMonth(),\n                date: picker.$date.getDate()\n              });\n              picker.$updateSelected();\n            }\n          },\n          build: function() {\n            var months = [];\n            var month;\n            for (var i = 0; i < 12; i++) {\n              month = new Date(viewDate.year, i, 1);\n              months.push({\n                date: month,\n                label: formatDate(month, this.format),\n                selected: picker.$isSelected(month),\n                disabled: this.isDisabled(month)\n              });\n            }\n            scope.title = formatDate(month, options.yearTitleFormat);\n            scope.showLabels = false;\n            scope.rows = split(months, this.split);\n            this.built = true;\n          },\n          isSelected: function(date) {\n            return picker.$date && date.getFullYear() === picker.$date.getFullYear() && date.getMonth() === picker.$date.getMonth();\n          },\n          isDisabled: function(date) {\n            var lastDate = +new Date(date.getFullYear(), date.getMonth() + 1, 0);\n            return lastDate < options.minDate || date.getTime() > options.maxDate;\n          },\n          onKeyDown: function(evt) {\n            if (!picker.$date) {\n              return;\n            }\n            var actualMonth = picker.$date.getMonth();\n            var newDate = new Date(picker.$date);\n            if (evt.keyCode === 37) newDate.setMonth(actualMonth - 1); else if (evt.keyCode === 38) newDate.setMonth(actualMonth - 4); else if (evt.keyCode === 39) newDate.setMonth(actualMonth + 1); else if (evt.keyCode === 40) newDate.setMonth(actualMonth + 4);\n            if (!this.isDisabled(newDate)) picker.select(newDate, true);\n          }\n        }, {\n          name: 'year',\n          format: options.yearFormat,\n          split: 4,\n          steps: {\n            year: 12\n          },\n          update: function(date, force) {\n            if (!this.built || force || parseInt(date.getFullYear() / 20, 10) !== parseInt(viewDate.year / 20, 10)) {\n              angular.extend(viewDate, {\n                year: picker.$date.getFullYear(),\n                month: picker.$date.getMonth(),\n                date: picker.$date.getDate()\n              });\n              picker.$build();\n            } else if (date.getFullYear() !== viewDate.year) {\n              angular.extend(viewDate, {\n                year: picker.$date.getFullYear(),\n                month: picker.$date.getMonth(),\n                date: picker.$date.getDate()\n              });\n              picker.$updateSelected();\n            }\n          },\n          build: function() {\n            var firstYear = viewDate.year - viewDate.year % (this.split * 3);\n            var years = [];\n            var year;\n            for (var i = 0; i < 12; i++) {\n              year = new Date(firstYear + i, 0, 1);\n              years.push({\n                date: year,\n                label: formatDate(year, this.format),\n                selected: picker.$isSelected(year),\n                disabled: this.isDisabled(year)\n              });\n            }\n            scope.title = years[0].label + '-' + years[years.length - 1].label;\n            scope.showLabels = false;\n            scope.rows = split(years, this.split);\n            this.built = true;\n          },\n          isSelected: function(date) {\n            return picker.$date && date.getFullYear() === picker.$date.getFullYear();\n          },\n          isDisabled: function(date) {\n            var lastDate = +new Date(date.getFullYear() + 1, 0, 0);\n            return lastDate < options.minDate || date.getTime() > options.maxDate;\n          },\n          onKeyDown: function(evt) {\n            if (!picker.$date) {\n              return;\n            }\n            var actualYear = picker.$date.getFullYear();\n            var newDate = new Date(picker.$date);\n            if (evt.keyCode === 37) newDate.setYear(actualYear - 1); else if (evt.keyCode === 38) newDate.setYear(actualYear - 4); else if (evt.keyCode === 39) newDate.setYear(actualYear + 1); else if (evt.keyCode === 40) newDate.setYear(actualYear + 4);\n            if (!this.isDisabled(newDate)) picker.select(newDate, true);\n          }\n        } ];\n        return {\n          views: options.minView ? Array.prototype.slice.call(views, options.minView) : views,\n          viewDate: viewDate\n        };\n      };\n    } ];\n  });\n  angular.module('mgcrea.ngStrap.collapse', []).provider('$collapse', function() {\n    var defaults = this.defaults = {\n      animation: 'am-collapse',\n      disallowToggle: false,\n      activeClass: 'in',\n      startCollapsed: false,\n      allowMultiple: false\n    };\n    var controller = this.controller = function($scope, $element, $attrs) {\n      var self = this;\n      self.$options = angular.copy(defaults);\n      angular.forEach([ 'animation', 'disallowToggle', 'activeClass', 'startCollapsed', 'allowMultiple' ], function(key) {\n        if (angular.isDefined($attrs[key])) self.$options[key] = $attrs[key];\n      });\n      var falseValueRegExp = /^(false|0|)$/i;\n      angular.forEach([ 'disallowToggle', 'startCollapsed', 'allowMultiple' ], function(key) {\n        if (angular.isDefined($attrs[key]) && falseValueRegExp.test($attrs[key])) {\n          self.$options[key] = false;\n        }\n      });\n      self.$toggles = [];\n      self.$targets = [];\n      self.$viewChangeListeners = [];\n      self.$registerToggle = function(element) {\n        self.$toggles.push(element);\n      };\n      self.$registerTarget = function(element) {\n        self.$targets.push(element);\n      };\n      self.$unregisterToggle = function(element) {\n        var index = self.$toggles.indexOf(element);\n        self.$toggles.splice(index, 1);\n      };\n      self.$unregisterTarget = function(element) {\n        var index = self.$targets.indexOf(element);\n        self.$targets.splice(index, 1);\n        if (self.$options.allowMultiple) {\n          deactivateItem(element);\n        }\n        fixActiveItemIndexes(index);\n        self.$viewChangeListeners.forEach(function(fn) {\n          fn();\n        });\n      };\n      self.$targets.$active = !self.$options.startCollapsed ? [ 0 ] : [];\n      self.$setActive = $scope.$setActive = function(value) {\n        if (angular.isArray(value)) {\n          self.$targets.$active = value;\n        } else if (!self.$options.disallowToggle && isActive(value)) {\n          deactivateItem(value);\n        } else {\n          activateItem(value);\n        }\n        self.$viewChangeListeners.forEach(function(fn) {\n          fn();\n        });\n      };\n      self.$activeIndexes = function() {\n        if (self.$options.allowMultiple) {\n          return self.$targets.$active;\n        }\n        return self.$targets.$active.length === 1 ? self.$targets.$active[0] : -1;\n      };\n      function fixActiveItemIndexes(index) {\n        var activeIndexes = self.$targets.$active;\n        for (var i = 0; i < activeIndexes.length; i++) {\n          if (index < activeIndexes[i]) {\n            activeIndexes[i] = activeIndexes[i] - 1;\n          }\n          if (activeIndexes[i] === self.$targets.length) {\n            activeIndexes[i] = self.$targets.length - 1;\n          }\n        }\n      }\n      function isActive(value) {\n        var activeItems = self.$targets.$active;\n        return activeItems.indexOf(value) !== -1;\n      }\n      function deactivateItem(value) {\n        var index = self.$targets.$active.indexOf(value);\n        if (index !== -1) {\n          self.$targets.$active.splice(index, 1);\n        }\n      }\n      function activateItem(value) {\n        if (!self.$options.allowMultiple) {\n          self.$targets.$active.splice(0, 1);\n        }\n        if (self.$targets.$active.indexOf(value) === -1) {\n          self.$targets.$active.push(value);\n        }\n      }\n    };\n    this.$get = function() {\n      var $collapse = {};\n      $collapse.defaults = defaults;\n      $collapse.controller = controller;\n      return $collapse;\n    };\n  }).directive('bsCollapse', [ '$window', '$animate', '$collapse', function($window, $animate, $collapse) {\n    return {\n      require: [ '?ngModel', 'bsCollapse' ],\n      controller: [ '$scope', '$element', '$attrs', $collapse.controller ],\n      link: function postLink(scope, element, attrs, controllers) {\n        var ngModelCtrl = controllers[0];\n        var bsCollapseCtrl = controllers[1];\n        if (ngModelCtrl) {\n          bsCollapseCtrl.$viewChangeListeners.push(function() {\n            ngModelCtrl.$setViewValue(bsCollapseCtrl.$activeIndexes());\n          });\n          ngModelCtrl.$formatters.push(function(modelValue) {\n            if (angular.isArray(modelValue)) {\n              bsCollapseCtrl.$setActive(modelValue);\n            } else {\n              var activeIndexes = bsCollapseCtrl.$activeIndexes();\n              if (angular.isArray(activeIndexes)) {\n                if (activeIndexes.indexOf(modelValue * 1) === -1) {\n                  bsCollapseCtrl.$setActive(modelValue * 1);\n                }\n              } else if (activeIndexes !== modelValue * 1) {\n                bsCollapseCtrl.$setActive(modelValue * 1);\n              }\n            }\n            return modelValue;\n          });\n        }\n      }\n    };\n  } ]).directive('bsCollapseToggle', function() {\n    return {\n      require: [ '^?ngModel', '^bsCollapse' ],\n      link: function postLink(scope, element, attrs, controllers) {\n        var bsCollapseCtrl = controllers[1];\n        element.attr('data-toggle', 'collapse');\n        bsCollapseCtrl.$registerToggle(element);\n        scope.$on('$destroy', function() {\n          bsCollapseCtrl.$unregisterToggle(element);\n        });\n        element.on('click', function() {\n          if (!attrs.disabled) {\n            var index = attrs.bsCollapseToggle && attrs.bsCollapseToggle !== 'bs-collapse-toggle' ? attrs.bsCollapseToggle : bsCollapseCtrl.$toggles.indexOf(element);\n            bsCollapseCtrl.$setActive(index * 1);\n            scope.$apply();\n          }\n        });\n      }\n    };\n  }).directive('bsCollapseTarget', [ '$animate', function($animate) {\n    return {\n      require: [ '^?ngModel', '^bsCollapse' ],\n      link: function postLink(scope, element, attrs, controllers) {\n        var bsCollapseCtrl = controllers[1];\n        element.addClass('collapse');\n        if (bsCollapseCtrl.$options.animation) {\n          element.addClass(bsCollapseCtrl.$options.animation);\n        }\n        bsCollapseCtrl.$registerTarget(element);\n        scope.$on('$destroy', function() {\n          bsCollapseCtrl.$unregisterTarget(element);\n        });\n        function render() {\n          var index = bsCollapseCtrl.$targets.indexOf(element);\n          var active = bsCollapseCtrl.$activeIndexes();\n          var action = 'removeClass';\n          if (angular.isArray(active)) {\n            if (active.indexOf(index) !== -1) {\n              action = 'addClass';\n            }\n          } else if (index === active) {\n            action = 'addClass';\n          }\n          $animate[action](element, bsCollapseCtrl.$options.activeClass);\n        }\n        bsCollapseCtrl.$viewChangeListeners.push(function() {\n          render();\n        });\n        render();\n      }\n    };\n  } ]);\n  angular.module('mgcrea.ngStrap.aside', [ 'mgcrea.ngStrap.modal' ]).provider('$aside', function() {\n    var defaults = this.defaults = {\n      animation: 'am-fade-and-slide-right',\n      prefixClass: 'aside',\n      prefixEvent: 'aside',\n      placement: 'right',\n      templateUrl: 'aside/aside.tpl.html',\n      contentTemplate: false,\n      container: false,\n      element: null,\n      backdrop: true,\n      keyboard: true,\n      html: false,\n      show: true\n    };\n    this.$get = [ '$modal', function($modal) {\n      function AsideFactory(config) {\n        var $aside = {};\n        var options = angular.extend({}, defaults, config);\n        $aside = $modal(options);\n        return $aside;\n      }\n      return AsideFactory;\n    } ];\n  }).directive('bsAside', [ '$window', '$sce', '$aside', function($window, $sce, $aside) {\n    return {\n      restrict: 'EAC',\n      scope: true,\n      link: function postLink(scope, element, attr, transclusion) {\n        var options = {\n          scope: scope,\n          element: element,\n          show: false\n        };\n        angular.forEach([ 'template', 'templateUrl', 'controller', 'controllerAs', 'contentTemplate', 'placement', 'backdrop', 'keyboard', 'html', 'container', 'animation' ], function(key) {\n          if (angular.isDefined(attr[key])) options[key] = attr[key];\n        });\n        var falseValueRegExp = /^(false|0|)$/i;\n        angular.forEach([ 'backdrop', 'keyboard', 'html', 'container' ], function(key) {\n          if (angular.isDefined(attr[key]) && falseValueRegExp.test(attr[key])) options[key] = false;\n        });\n        angular.forEach([ 'onBeforeShow', 'onShow', 'onBeforeHide', 'onHide' ], function(key) {\n          var bsKey = 'bs' + key.charAt(0).toUpperCase() + key.slice(1);\n          if (angular.isDefined(attr[bsKey])) {\n            options[key] = scope.$eval(attr[bsKey]);\n          }\n        });\n        angular.forEach([ 'title', 'content' ], function(key) {\n          if (attr[key]) {\n            attr.$observe(key, function(newValue, oldValue) {\n              scope[key] = $sce.trustAsHtml(newValue);\n            });\n          }\n        });\n        if (attr.bsAside) {\n          scope.$watch(attr.bsAside, function(newValue, oldValue) {\n            if (angular.isObject(newValue)) {\n              angular.extend(scope, newValue);\n            } else {\n              scope.content = newValue;\n            }\n          }, true);\n        }\n        var aside = $aside(options);\n        element.on(attr.trigger || 'click', aside.toggle);\n        scope.$on('$destroy', function() {\n          if (aside) aside.destroy();\n          options = null;\n          aside = null;\n        });\n      }\n    };\n  } ]);\n  angular.module('mgcrea.ngStrap.alert', [ 'mgcrea.ngStrap.modal' ]).provider('$alert', function() {\n    var defaults = this.defaults = {\n      animation: 'am-fade',\n      prefixClass: 'alert',\n      prefixEvent: 'alert',\n      placement: null,\n      templateUrl: 'alert/alert.tpl.html',\n      container: false,\n      element: null,\n      backdrop: false,\n      keyboard: true,\n      show: true,\n      duration: false,\n      type: false,\n      dismissable: true\n    };\n    this.$get = [ '$modal', '$timeout', function($modal, $timeout) {\n      function AlertFactory(config) {\n        var $alert = {};\n        var options = angular.extend({}, defaults, config);\n        $alert = $modal(options);\n        $alert.$scope.dismissable = !!options.dismissable;\n        if (options.type) {\n          $alert.$scope.type = options.type;\n        }\n        var show = $alert.show;\n        if (options.duration) {\n          $alert.show = function() {\n            show();\n            $timeout(function() {\n              $alert.hide();\n            }, options.duration * 1e3);\n          };\n        }\n        return $alert;\n      }\n      return AlertFactory;\n    } ];\n  }).directive('bsAlert', [ '$window', '$sce', '$alert', function($window, $sce, $alert) {\n    return {\n      restrict: 'EAC',\n      scope: true,\n      link: function postLink(scope, element, attr, transclusion) {\n        var options = {\n          scope: scope,\n          element: element,\n          show: false\n        };\n        angular.forEach([ 'template', 'templateUrl', 'controller', 'controllerAs', 'placement', 'keyboard', 'html', 'container', 'animation', 'duration', 'dismissable' ], function(key) {\n          if (angular.isDefined(attr[key])) options[key] = attr[key];\n        });\n        var falseValueRegExp = /^(false|0|)$/i;\n        angular.forEach([ 'keyboard', 'html', 'container', 'dismissable' ], function(key) {\n          if (angular.isDefined(attr[key]) && falseValueRegExp.test(attr[key])) options[key] = false;\n        });\n        angular.forEach([ 'onBeforeShow', 'onShow', 'onBeforeHide', 'onHide' ], function(key) {\n          var bsKey = 'bs' + key.charAt(0).toUpperCase() + key.slice(1);\n          if (angular.isDefined(attr[bsKey])) {\n            options[key] = scope.$eval(attr[bsKey]);\n          }\n        });\n        if (!scope.hasOwnProperty('title')) {\n          scope.title = '';\n        }\n        angular.forEach([ 'title', 'content', 'type' ], function(key) {\n          if (attr[key]) {\n            attr.$observe(key, function(newValue, oldValue) {\n              scope[key] = $sce.trustAsHtml(newValue);\n            });\n          }\n        });\n        if (attr.bsAlert) {\n          scope.$watch(attr.bsAlert, function(newValue, oldValue) {\n            if (angular.isObject(newValue)) {\n              angular.extend(scope, newValue);\n            } else {\n              scope.content = newValue;\n            }\n          }, true);\n        }\n        var alert = $alert(options);\n        element.on(attr.trigger || 'click', alert.toggle);\n        scope.$on('$destroy', function() {\n          if (alert) alert.destroy();\n          options = null;\n          alert = null;\n        });\n      }\n    };\n  } ]);\n  angular.module('mgcrea.ngStrap.affix', [ 'mgcrea.ngStrap.helpers.dimensions', 'mgcrea.ngStrap.helpers.debounce' ]).provider('$affix', function() {\n    var defaults = this.defaults = {\n      offsetTop: 'auto',\n      inlineStyles: true,\n      setWidth: true\n    };\n    this.$get = [ '$window', 'debounce', 'dimensions', function($window, debounce, dimensions) {\n      var bodyEl = angular.element($window.document.body);\n      var windowEl = angular.element($window);\n      function AffixFactory(element, config) {\n        var $affix = {};\n        var options = angular.extend({}, defaults, config);\n        var targetEl = options.target;\n        var reset = 'affix affix-top affix-bottom';\n        var setWidth = false;\n        var initialAffixTop = 0;\n        var initialOffsetTop = 0;\n        var offsetTop = 0;\n        var offsetBottom = 0;\n        var affixed = null;\n        var unpin = null;\n        var parent = element.parent();\n        if (options.offsetParent) {\n          if (options.offsetParent.match(/^\\d+$/)) {\n            for (var i = 0; i < options.offsetParent * 1 - 1; i++) {\n              parent = parent.parent();\n            }\n          } else {\n            parent = angular.element(options.offsetParent);\n          }\n        }\n        $affix.init = function() {\n          this.$parseOffsets();\n          initialOffsetTop = dimensions.offset(element[0]).top + initialAffixTop;\n          setWidth = options.setWidth && !element[0].style.width;\n          targetEl.on('scroll', this.checkPosition);\n          targetEl.on('click', this.checkPositionWithEventLoop);\n          windowEl.on('resize', this.$debouncedOnResize);\n          this.checkPosition();\n          this.checkPositionWithEventLoop();\n        };\n        $affix.destroy = function() {\n          targetEl.off('scroll', this.checkPosition);\n          targetEl.off('click', this.checkPositionWithEventLoop);\n          windowEl.off('resize', this.$debouncedOnResize);\n        };\n        $affix.checkPositionWithEventLoop = function() {\n          setTimeout($affix.checkPosition, 1);\n        };\n        $affix.checkPosition = function() {\n          var scrollTop = getScrollTop();\n          var position = dimensions.offset(element[0]);\n          var elementHeight = dimensions.height(element[0]);\n          var affix = getRequiredAffixClass(unpin, position, elementHeight);\n          if (affixed === affix) return;\n          affixed = affix;\n          if (affix === 'top') {\n            unpin = null;\n            if (setWidth) {\n              element.css('width', '');\n            }\n            if (options.inlineStyles) {\n              element.css('position', options.offsetParent ? '' : 'relative');\n              element.css('top', '');\n            }\n          } else if (affix === 'bottom') {\n            if (options.offsetUnpin) {\n              unpin = -(options.offsetUnpin * 1);\n            } else {\n              unpin = position.top - scrollTop;\n            }\n            if (setWidth) {\n              element.css('width', '');\n            }\n            if (options.inlineStyles) {\n              element.css('position', options.offsetParent ? '' : 'relative');\n              element.css('top', options.offsetParent ? '' : bodyEl[0].offsetHeight - offsetBottom - elementHeight - initialOffsetTop + 'px');\n            }\n          } else {\n            unpin = null;\n            if (setWidth) {\n              element.css('width', element[0].offsetWidth + 'px');\n            }\n            if (options.inlineStyles) {\n              element.css('position', 'fixed');\n              element.css('top', initialAffixTop + 'px');\n            }\n          }\n          element.removeClass(reset).addClass('affix' + (affix !== 'middle' ? '-' + affix : ''));\n        };\n        $affix.$onResize = function() {\n          $affix.$parseOffsets();\n          $affix.checkPosition();\n        };\n        $affix.$debouncedOnResize = debounce($affix.$onResize, 50);\n        $affix.$parseOffsets = function() {\n          var initialPosition = element[0].style.position;\n          var initialTop = element[0].style.top;\n          if (options.inlineStyles) {\n            element.css('position', options.offsetParent ? '' : 'relative');\n            element.css('top', '');\n          }\n          if (options.offsetTop) {\n            if (options.offsetTop === 'auto') {\n              options.offsetTop = '+0';\n            }\n            if (options.offsetTop.match(/^[-+]\\d+$/)) {\n              initialAffixTop = -options.offsetTop * 1;\n              if (options.offsetParent) {\n                offsetTop = dimensions.offset(parent[0]).top + options.offsetTop * 1;\n              } else {\n                offsetTop = dimensions.offset(element[0]).top - dimensions.css(element[0], 'marginTop', true) + options.offsetTop * 1;\n              }\n            } else {\n              offsetTop = options.offsetTop * 1;\n            }\n          }\n          if (options.offsetBottom) {\n            if (options.offsetParent && options.offsetBottom.match(/^[-+]\\d+$/)) {\n              offsetBottom = getScrollHeight() - (dimensions.offset(parent[0]).top + dimensions.height(parent[0])) + options.offsetBottom * 1 + 1;\n            } else {\n              offsetBottom = options.offsetBottom * 1;\n            }\n          }\n          if (options.inlineStyles) {\n            element.css('position', initialPosition);\n            element.css('top', initialTop);\n          }\n        };\n        function getRequiredAffixClass(_unpin, position, elementHeight) {\n          var scrollTop = getScrollTop();\n          var scrollHeight = getScrollHeight();\n          if (scrollTop <= offsetTop) {\n            return 'top';\n          } else if (_unpin !== null) {\n            return scrollTop + _unpin <= position.top ? 'middle' : 'bottom';\n          } else if (offsetBottom !== null && position.top + elementHeight + initialAffixTop >= scrollHeight - offsetBottom) {\n            return 'bottom';\n          }\n          return 'middle';\n        }\n        function getScrollTop() {\n          return targetEl[0] === $window ? $window.pageYOffset : targetEl[0].scrollTop;\n        }\n        function getScrollHeight() {\n          return targetEl[0] === $window ? $window.document.body.scrollHeight : targetEl[0].scrollHeight;\n        }\n        $affix.init();\n        return $affix;\n      }\n      return AffixFactory;\n    } ];\n  }).directive('bsAffix', [ '$affix', '$window', '$timeout', function($affix, $window, $timeout) {\n    return {\n      restrict: 'EAC',\n      require: '^?bsAffixTarget',\n      link: function postLink(scope, element, attr, affixTarget) {\n        var options = {\n          scope: scope,\n          target: affixTarget ? affixTarget.$element : angular.element($window)\n        };\n        angular.forEach([ 'offsetTop', 'offsetBottom', 'offsetParent', 'offsetUnpin', 'inlineStyles', 'setWidth' ], function(key) {\n          if (angular.isDefined(attr[key])) {\n            var option = attr[key];\n            if (/true/i.test(option)) option = true;\n            if (/false/i.test(option)) option = false;\n            options[key] = option;\n          }\n        });\n        var affix;\n        $timeout(function() {\n          affix = $affix(element, options);\n        });\n        scope.$on('$destroy', function() {\n          if (affix) affix.destroy();\n          options = null;\n          affix = null;\n        });\n      }\n    };\n  } ]).directive('bsAffixTarget', function() {\n    return {\n      controller: [ '$element', function($element) {\n        this.$element = $element;\n      } ]\n    };\n  });\n  angular.module('mgcrea.ngStrap', [ 'mgcrea.ngStrap.modal', 'mgcrea.ngStrap.aside', 'mgcrea.ngStrap.alert', 'mgcrea.ngStrap.button', 'mgcrea.ngStrap.select', 'mgcrea.ngStrap.datepicker', 'mgcrea.ngStrap.timepicker', 'mgcrea.ngStrap.navbar', 'mgcrea.ngStrap.tooltip', 'mgcrea.ngStrap.popover', 'mgcrea.ngStrap.dropdown', 'mgcrea.ngStrap.typeahead', 'mgcrea.ngStrap.scrollspy', 'mgcrea.ngStrap.affix', 'mgcrea.ngStrap.tab', 'mgcrea.ngStrap.collapse' ]);\n})(window, document);","/**\n * angular-strap\n * @version v2.3.12 - 2017-01-26\n * @link http://mgcrea.github.io/angular-strap\n * @author Olivier Louvignes <olivier@mg-crea.com> (https://github.com/mgcrea)\n * @license MIT License, http://www.opensource.org/licenses/MIT\n */\n!function(t,e,n){'use strict';angular.module('mgcrea.ngStrap.alert').run(['$templateCache',function(t){t.put('alert/alert.tpl.html','<div class=\"alert\" ng-class=\"[type ? \\'alert-\\' + type : null]\"><button type=\"button\" class=\"close\" ng-if=\"dismissable\" ng-click=\"$hide()\">&times;</button> <span ng-if=\"title\"><strong ng-bind=\"title\"></strong>&nbsp;<span ng-bind-html=\"content\"></span> </span><span ng-if=\"!title\" ng-bind-html=\"content\"></span></div>')}]),angular.module('mgcrea.ngStrap.aside').run(['$templateCache',function(t){t.put('aside/aside.tpl.html','<div class=\"aside\" tabindex=\"-1\" role=\"dialog\"><div class=\"aside-dialog\"><div class=\"aside-content\"><div class=\"aside-header\" ng-show=\"title\"><button type=\"button\" class=\"close\" ng-click=\"$hide()\">&times;</button><h4 class=\"aside-title\" ng-bind=\"title\"></h4></div><div class=\"aside-body\" ng-bind=\"content\"></div><div class=\"aside-footer\"><button type=\"button\" class=\"btn btn-default\" ng-click=\"$hide()\">Close</button></div></div></div></div>')}]),angular.module('mgcrea.ngStrap.datepicker').run(['$templateCache',function(t){t.put('datepicker/datepicker.tpl.html','<div class=\"dropdown-menu datepicker\" ng-class=\"\\'datepicker-mode-\\' + $mode\" style=\"max-width: 320px\"><table style=\"table-layout: fixed; height: 100%; width: 100%\"><thead><tr class=\"text-center\"><th><button tabindex=\"-1\" type=\"button\" class=\"btn btn-default pull-left\" ng-click=\"$selectPane(-1)\"><i class=\"{{$iconLeft}}\"></i></button></th><th colspan=\"{{ rows[0].length - 2 }}\"><button tabindex=\"-1\" type=\"button\" class=\"btn btn-default btn-block text-strong\" ng-click=\"$toggleMode()\"><strong style=\"text-transform: capitalize\" ng-bind=\"title\"></strong></button></th><th><button tabindex=\"-1\" type=\"button\" class=\"btn btn-default pull-right\" ng-click=\"$selectPane(+1)\"><i class=\"{{$iconRight}}\"></i></button></th></tr><tr ng-if=\"showLabels\" ng-bind-html=\"labels\"></tr></thead><tbody><tr ng-repeat=\"(i, row) in rows\" height=\"{{ 100 / rows.length }}%\"><td class=\"text-center\" ng-repeat=\"(j, el) in row\"><button tabindex=\"-1\" type=\"button\" class=\"btn btn-default\" style=\"width: 100%\" ng-class=\"{\\'btn-primary\\': el.selected, \\'btn-info btn-today\\': el.isToday && !el.selected}\" ng-click=\"$select(el.date, el.disabled)\" ng-disabled=\"el.disabled\"><span ng-class=\"{\\'text-muted\\': el.muted}\" ng-bind=\"el.label\"></span></button></td></tr></tbody><tfoot><tr><td colspan=\"{{ rows[0].length }}\"><div class=\"btn-group btn-group-justified\" role=\"group\"><div class=\"btn-group\" role=\"group\" ng-if=\"$hasToday\"><button type=\"button\" class=\"btn btn-default today\" ng-click=\"$setToday()\" ng-disabled=\"isTodayDisabled\"><strong style=\"text-transform: capitalize\">Today</strong></button></div><div class=\"btn-group\" role=\"group\" ng-if=\"$hasClear\"><button type=\"button\" class=\"btn btn-default clear\" ng-click=\"$clear()\"><strong style=\"text-transform: capitalize\">Clear</strong></button></div></div></td></tr></tfoot></table></div>')}]),angular.module('mgcrea.ngStrap.dropdown').run(['$templateCache',function(t){t.put('dropdown/dropdown.tpl.html','<ul tabindex=\"-1\" class=\"dropdown-menu\" role=\"menu\" ng-show=\"content && content.length\"><li role=\"presentation\" ng-class=\"{divider: item.divider, active: item.active}\" ng-repeat=\"item in content\"><a role=\"menuitem\" tabindex=\"-1\" ng-href=\"{{item.href}}\" ng-if=\"!item.divider && item.href\" target=\"{{item.target || \\'\\'}}\" ng-bind=\"item.text\"></a> <a role=\"menuitem\" tabindex=\"-1\" href=\"javascript:void(0)\" ng-if=\"!item.divider && item.click\" ng-click=\"$eval(item.click);$hide()\" ng-bind=\"item.text\"></a></li></ul>')}]),angular.module('mgcrea.ngStrap.modal').run(['$templateCache',function(t){t.put('modal/modal.tpl.html','<div class=\"modal\" tabindex=\"-1\" role=\"dialog\" aria-hidden=\"true\"><div class=\"modal-dialog\"><div class=\"modal-content\"><div class=\"modal-header\" ng-show=\"title\"><button type=\"button\" class=\"close\" aria-label=\"Close\" ng-click=\"$hide()\"><span aria-hidden=\"true\">&times;</span></button><h4 class=\"modal-title\" ng-bind=\"title\"></h4></div><div class=\"modal-body\" ng-bind=\"content\"></div><div class=\"modal-footer\"><button type=\"button\" class=\"btn btn-default\" ng-click=\"$hide()\">Close</button></div></div></div></div>')}]),angular.module('mgcrea.ngStrap.popover').run(['$templateCache',function(t){t.put('popover/popover.tpl.html','<div class=\"popover\" tabindex=\"-1\"><div class=\"arrow\"></div><h3 class=\"popover-title\" ng-bind=\"title\" ng-show=\"title\"></h3><div class=\"popover-content\" ng-bind=\"content\"></div></div>')}]),angular.module('mgcrea.ngStrap.select').run(['$templateCache',function(t){t.put('select/select.tpl.html','<ul tabindex=\"-1\" class=\"select dropdown-menu\" ng-show=\"$isVisible()\" role=\"select\"><li ng-if=\"$showAllNoneButtons\"><div class=\"btn-group\" style=\"margin-bottom: 5px; margin-left: 5px\"><button type=\"button\" class=\"btn btn-default btn-xs\" ng-click=\"$selectAll()\">{{$allText}}</button> <button type=\"button\" class=\"btn btn-default btn-xs\" ng-click=\"$selectNone()\">{{$noneText}}</button></div></li><li role=\"presentation\" ng-repeat=\"match in $matches\" ng-class=\"{active: $isActive($index)}\"><a style=\"cursor: default\" role=\"menuitem\" tabindex=\"-1\" ng-click=\"$select($index, $event)\"><i class=\"{{$iconCheckmark}} pull-right\" ng-if=\"$isMultiple && $isActive($index)\"></i> <span ng-bind=\"match.label\"></span></a></li></ul>')}]),angular.module('mgcrea.ngStrap.tab').run(['$templateCache',function(t){t.put('tab/tab.tpl.html','<ul class=\"nav\" ng-class=\"$navClass\" role=\"tablist\"><li role=\"presentation\" ng-repeat=\"$pane in $panes track by $index\" ng-class=\"[ $isActive($pane, $index) ? $activeClass : \\'\\', $pane.disabled ? \\'disabled\\' : \\'\\' ]\"><a role=\"tab\" data-toggle=\"tab\" ng-click=\"!$pane.disabled && $setActive($pane.name || $index)\" data-index=\"{{ $index }}\" ng-bind-html=\"$pane.title\" aria-controls=\"$pane.title\" href=\"\"></a></li></ul><div ng-transclude class=\"tab-content\"></div>')}]),angular.module('mgcrea.ngStrap.timepicker').run(['$templateCache',function(t){t.put('timepicker/timepicker.tpl.html','<div class=\"dropdown-menu timepicker\" style=\"min-width: 0px;width: auto\"><table height=\"100%\"><thead><tr class=\"text-center\"><th><button tabindex=\"-1\" type=\"button\" class=\"btn btn-default pull-left\" ng-click=\"$arrowAction(-1, 0)\"><i class=\"{{ $iconUp }}\"></i></button></th><th>&nbsp;</th><th><button tabindex=\"-1\" type=\"button\" class=\"btn btn-default pull-left\" ng-click=\"$arrowAction(-1, 1)\"><i class=\"{{ $iconUp }}\"></i></button></th><th ng-if=\"showSeconds\">&nbsp;</th><th ng-if=\"showSeconds\"><button tabindex=\"-1\" type=\"button\" class=\"btn btn-default pull-left\" ng-click=\"$arrowAction(-1, 2)\"><i class=\"{{ $iconUp }}\"></i></button></th></tr></thead><tbody><tr ng-repeat=\"(i, row) in rows\"><td class=\"text-center\"><button tabindex=\"-1\" style=\"width: 100%\" type=\"button\" class=\"btn btn-default\" ng-class=\"{\\'btn-primary\\': row[0].selected}\" ng-click=\"$select(row[0].date, 0)\" ng-disabled=\"row[0].disabled\"><span ng-class=\"{\\'text-muted\\': row[0].muted}\" ng-bind=\"row[0].label\"></span></button></td><td><span ng-bind=\"i == midIndex ? timeSeparator : \\' \\'\"></span></td><td class=\"text-center\"><button tabindex=\"-1\" ng-if=\"row[1].date\" style=\"width: 100%\" type=\"button\" class=\"btn btn-default\" ng-class=\"{\\'btn-primary\\': row[1].selected}\" ng-click=\"$select(row[1].date, 1)\" ng-disabled=\"row[1].disabled\"><span ng-class=\"{\\'text-muted\\': row[1].muted}\" ng-bind=\"row[1].label\"></span></button></td><td ng-if=\"showSeconds\"><span ng-bind=\"i == midIndex ? timeSeparator : \\' \\'\"></span></td><td ng-if=\"showSeconds\" class=\"text-center\"><button tabindex=\"-1\" ng-if=\"row[2].date\" style=\"width: 100%\" type=\"button\" class=\"btn btn-default\" ng-class=\"{\\'btn-primary\\': row[2].selected}\" ng-click=\"$select(row[2].date, 2)\" ng-disabled=\"row[2].disabled\"><span ng-class=\"{\\'text-muted\\': row[2].muted}\" ng-bind=\"row[2].label\"></span></button></td><td ng-if=\"showAM\">&nbsp;</td><td ng-if=\"showAM\"><button tabindex=\"-1\" ng-show=\"i == midIndex - !isAM * 1\" style=\"width: 100%\" type=\"button\" ng-class=\"{\\'btn-primary\\': !!isAM}\" class=\"btn btn-default\" ng-click=\"$switchMeridian()\" ng-disabled=\"el.disabled\">AM</button> <button tabindex=\"-1\" ng-show=\"i == midIndex + 1 - !isAM * 1\" style=\"width: 100%\" type=\"button\" ng-class=\"{\\'btn-primary\\': !isAM}\" class=\"btn btn-default\" ng-click=\"$switchMeridian()\" ng-disabled=\"el.disabled\">PM</button></td></tr></tbody><tfoot><tr class=\"text-center\"><th><button tabindex=\"-1\" type=\"button\" class=\"btn btn-default pull-left\" ng-click=\"$arrowAction(1, 0)\"><i class=\"{{ $iconDown }}\"></i></button></th><th>&nbsp;</th><th><button tabindex=\"-1\" type=\"button\" class=\"btn btn-default pull-left\" ng-click=\"$arrowAction(1, 1)\"><i class=\"{{ $iconDown }}\"></i></button></th><th ng-if=\"showSeconds\">&nbsp;</th><th ng-if=\"showSeconds\"><button ng-if=\"showSeconds\" tabindex=\"-1\" type=\"button\" class=\"btn btn-default pull-left\" ng-click=\"$arrowAction(1, 2)\"><i class=\"{{ $iconDown }}\"></i></button></th></tr></tfoot></table></div>')}]),angular.module('mgcrea.ngStrap.tooltip').run(['$templateCache',function(t){t.put('tooltip/tooltip.tpl.html','<div class=\"tooltip in\" ng-show=\"title\"><div class=\"tooltip-arrow\"></div><div class=\"tooltip-inner\" ng-bind=\"title\"></div></div>')}]),angular.module('mgcrea.ngStrap.typeahead').run(['$templateCache',function(t){t.put('typeahead/typeahead.tpl.html','<ul tabindex=\"-1\" class=\"typeahead dropdown-menu\" ng-show=\"$isVisible()\" role=\"select\"><li role=\"presentation\" ng-repeat=\"match in $matches\" ng-class=\"{active: $index == $activeIndex}\"><a role=\"menuitem\" tabindex=\"-1\" ng-click=\"$select($index, $event)\" ng-bind=\"match.label\"></a></li></ul>')}])}(window,document);","require('./dist/angular-strap.js');\nrequire('./dist/angular-strap.tpl.min.js');\nmodule.exports = 'mgcrea.ngStrap';\n","/**\n * @license AngularJS v1.5.8\n * (c) 2010-2016 Google, Inc. http://angularjs.org\n * License: MIT\n */\n(function(window, angular) {'use strict';\n\n/* global ngTouchClickDirectiveFactory: false,\n */\n\n/**\n * @ngdoc module\n * @name ngTouch\n * @description\n *\n * # ngTouch\n *\n * The `ngTouch` module provides touch events and other helpers for touch-enabled devices.\n * The implementation is based on jQuery Mobile touch event handling\n * ([jquerymobile.com](http://jquerymobile.com/)).\n *\n *\n * See {@link ngTouch.$swipe `$swipe`} for usage.\n *\n * <div doc-module-components=\"ngTouch\"></div>\n *\n */\n\n// define ngTouch module\n/* global -ngTouch */\nvar ngTouch = angular.module('ngTouch', []);\n\nngTouch.provider('$touch', $TouchProvider);\n\nfunction nodeName_(element) {\n  return angular.lowercase(element.nodeName || (element[0] && element[0].nodeName));\n}\n\n/**\n * @ngdoc provider\n * @name $touchProvider\n *\n * @description\n * The `$touchProvider` allows enabling / disabling {@link ngTouch.ngClick ngTouch's ngClick directive}.\n */\n$TouchProvider.$inject = ['$provide', '$compileProvider'];\nfunction $TouchProvider($provide, $compileProvider) {\n\n  /**\n   * @ngdoc method\n   * @name  $touchProvider#ngClickOverrideEnabled\n   *\n   * @param {boolean=} enabled update the ngClickOverrideEnabled state if provided, otherwise just return the\n   * current ngClickOverrideEnabled state\n   * @returns {*} current value if used as getter or itself (chaining) if used as setter\n   *\n   * @kind function\n   *\n   * @description\n   * Call this method to enable/disable {@link ngTouch.ngClick ngTouch's ngClick directive}. If enabled,\n   * the default ngClick directive will be replaced by a version that eliminates the 300ms delay for\n   * click events on browser for touch-devices.\n   *\n   * The default is `false`.\n   *\n   */\n  var ngClickOverrideEnabled = false;\n  var ngClickDirectiveAdded = false;\n  this.ngClickOverrideEnabled = function(enabled) {\n    if (angular.isDefined(enabled)) {\n\n      if (enabled && !ngClickDirectiveAdded) {\n        ngClickDirectiveAdded = true;\n\n        // Use this to identify the correct directive in the delegate\n        ngTouchClickDirectiveFactory.$$moduleName = 'ngTouch';\n        $compileProvider.directive('ngClick', ngTouchClickDirectiveFactory);\n\n        $provide.decorator('ngClickDirective', ['$delegate', function($delegate) {\n          if (ngClickOverrideEnabled) {\n            // drop the default ngClick directive\n            $delegate.shift();\n          } else {\n            // drop the ngTouch ngClick directive if the override has been re-disabled (because\n            // we cannot de-register added directives)\n            var i = $delegate.length - 1;\n            while (i >= 0) {\n              if ($delegate[i].$$moduleName === 'ngTouch') {\n                $delegate.splice(i, 1);\n                break;\n              }\n              i--;\n            }\n          }\n\n          return $delegate;\n        }]);\n      }\n\n      ngClickOverrideEnabled = enabled;\n      return this;\n    }\n\n    return ngClickOverrideEnabled;\n  };\n\n  /**\n  * @ngdoc service\n  * @name $touch\n  * @kind object\n  *\n  * @description\n  * Provides the {@link ngTouch.$touch#ngClickOverrideEnabled `ngClickOverrideEnabled`} method.\n  *\n  */\n  this.$get = function() {\n    return {\n      /**\n       * @ngdoc method\n       * @name  $touch#ngClickOverrideEnabled\n       *\n       * @returns {*} current value of `ngClickOverrideEnabled` set in the {@link ngTouch.$touchProvider $touchProvider},\n       * i.e. if {@link ngTouch.ngClick ngTouch's ngClick} directive is enabled.\n       *\n       * @kind function\n       */\n      ngClickOverrideEnabled: function() {\n        return ngClickOverrideEnabled;\n      }\n    };\n  };\n\n}\n\n/* global ngTouch: false */\n\n    /**\n     * @ngdoc service\n     * @name $swipe\n     *\n     * @description\n     * The `$swipe` service is a service that abstracts the messier details of hold-and-drag swipe\n     * behavior, to make implementing swipe-related directives more convenient.\n     *\n     * Requires the {@link ngTouch `ngTouch`} module to be installed.\n     *\n     * `$swipe` is used by the `ngSwipeLeft` and `ngSwipeRight` directives in `ngTouch`.\n     *\n     * # Usage\n     * The `$swipe` service is an object with a single method: `bind`. `bind` takes an element\n     * which is to be watched for swipes, and an object with four handler functions. See the\n     * documentation for `bind` below.\n     */\n\nngTouch.factory('$swipe', [function() {\n  // The total distance in any direction before we make the call on swipe vs. scroll.\n  var MOVE_BUFFER_RADIUS = 10;\n\n  var POINTER_EVENTS = {\n    'mouse': {\n      start: 'mousedown',\n      move: 'mousemove',\n      end: 'mouseup'\n    },\n    'touch': {\n      start: 'touchstart',\n      move: 'touchmove',\n      end: 'touchend',\n      cancel: 'touchcancel'\n    },\n    'pointer': {\n      start: 'pointerdown',\n      move: 'pointermove',\n      end: 'pointerup',\n      cancel: 'pointercancel'\n    }\n  };\n\n  function getCoordinates(event) {\n    var originalEvent = event.originalEvent || event;\n    var touches = originalEvent.touches && originalEvent.touches.length ? originalEvent.touches : [originalEvent];\n    var e = (originalEvent.changedTouches && originalEvent.changedTouches[0]) || touches[0];\n\n    return {\n      x: e.clientX,\n      y: e.clientY\n    };\n  }\n\n  function getEvents(pointerTypes, eventType) {\n    var res = [];\n    angular.forEach(pointerTypes, function(pointerType) {\n      var eventName = POINTER_EVENTS[pointerType][eventType];\n      if (eventName) {\n        res.push(eventName);\n      }\n    });\n    return res.join(' ');\n  }\n\n  return {\n    /**\n     * @ngdoc method\n     * @name $swipe#bind\n     *\n     * @description\n     * The main method of `$swipe`. It takes an element to be watched for swipe motions, and an\n     * object containing event handlers.\n     * The pointer types that should be used can be specified via the optional\n     * third argument, which is an array of strings `'mouse'`, `'touch'` and `'pointer'`. By default,\n     * `$swipe` will listen for `mouse`, `touch` and `pointer` events.\n     *\n     * The four events are `start`, `move`, `end`, and `cancel`. `start`, `move`, and `end`\n     * receive as a parameter a coordinates object of the form `{ x: 150, y: 310 }` and the raw\n     * `event`. `cancel` receives the raw `event` as its single parameter.\n     *\n     * `start` is called on either `mousedown`, `touchstart` or `pointerdown`. After this event, `$swipe` is\n     * watching for `touchmove`, `mousemove` or `pointermove` events. These events are ignored until the total\n     * distance moved in either dimension exceeds a small threshold.\n     *\n     * Once this threshold is exceeded, either the horizontal or vertical delta is greater.\n     * - If the horizontal distance is greater, this is a swipe and `move` and `end` events follow.\n     * - If the vertical distance is greater, this is a scroll, and we let the browser take over.\n     *   A `cancel` event is sent.\n     *\n     * `move` is called on `mousemove`, `touchmove` and `pointermove` after the above logic has determined that\n     * a swipe is in progress.\n     *\n     * `end` is called when a swipe is successfully completed with a `touchend`, `mouseup` or `pointerup`.\n     *\n     * `cancel` is called either on a `touchcancel` or `pointercancel`  from the browser, or when we begin scrolling\n     * as described above.\n     *\n     */\n    bind: function(element, eventHandlers, pointerTypes) {\n      // Absolute total movement, used to control swipe vs. scroll.\n      var totalX, totalY;\n      // Coordinates of the start position.\n      var startCoords;\n      // Last event's position.\n      var lastPos;\n      // Whether a swipe is active.\n      var active = false;\n\n      pointerTypes = pointerTypes || ['mouse', 'touch', 'pointer'];\n      element.on(getEvents(pointerTypes, 'start'), function(event) {\n        startCoords = getCoordinates(event);\n        active = true;\n        totalX = 0;\n        totalY = 0;\n        lastPos = startCoords;\n        eventHandlers['start'] && eventHandlers['start'](startCoords, event);\n      });\n      var events = getEvents(pointerTypes, 'cancel');\n      if (events) {\n        element.on(events, function(event) {\n          active = false;\n          eventHandlers['cancel'] && eventHandlers['cancel'](event);\n        });\n      }\n\n      element.on(getEvents(pointerTypes, 'move'), function(event) {\n        if (!active) return;\n\n        // Android will send a touchcancel if it thinks we're starting to scroll.\n        // So when the total distance (+ or - or both) exceeds 10px in either direction,\n        // we either:\n        // - On totalX > totalY, we send preventDefault() and treat this as a swipe.\n        // - On totalY > totalX, we let the browser handle it as a scroll.\n\n        if (!startCoords) return;\n        var coords = getCoordinates(event);\n\n        totalX += Math.abs(coords.x - lastPos.x);\n        totalY += Math.abs(coords.y - lastPos.y);\n\n        lastPos = coords;\n\n        if (totalX < MOVE_BUFFER_RADIUS && totalY < MOVE_BUFFER_RADIUS) {\n          return;\n        }\n\n        // One of totalX or totalY has exceeded the buffer, so decide on swipe vs. scroll.\n        if (totalY > totalX) {\n          // Allow native scrolling to take over.\n          active = false;\n          eventHandlers['cancel'] && eventHandlers['cancel'](event);\n          return;\n        } else {\n          // Prevent the browser from scrolling.\n          event.preventDefault();\n          eventHandlers['move'] && eventHandlers['move'](coords, event);\n        }\n      });\n\n      element.on(getEvents(pointerTypes, 'end'), function(event) {\n        if (!active) return;\n        active = false;\n        eventHandlers['end'] && eventHandlers['end'](getCoordinates(event), event);\n      });\n    }\n  };\n}]);\n\n/* global ngTouch: false,\n  nodeName_: false\n*/\n\n/**\n * @ngdoc directive\n * @name ngClick\n * @deprecated\n *\n * @description\n * <div class=\"alert alert-danger\">\n * **DEPRECATION NOTICE**: Beginning with Angular 1.5, this directive is deprecated and by default **disabled**.\n * The directive will receive no further support and might be removed from future releases.\n * If you need the directive, you can enable it with the {@link ngTouch.$touchProvider $touchProvider#ngClickOverrideEnabled}\n * function. We also recommend that you migrate to [FastClick](https://github.com/ftlabs/fastclick).\n * To learn more about the 300ms delay, this [Telerik article](http://developer.telerik.com/featured/300-ms-click-delay-ios-8/)\n * gives a good overview.\n * </div>\n * A more powerful replacement for the default ngClick designed to be used on touchscreen\n * devices. Most mobile browsers wait about 300ms after a tap-and-release before sending\n * the click event. This version handles them immediately, and then prevents the\n * following click event from propagating.\n *\n * Requires the {@link ngTouch `ngTouch`} module to be installed.\n *\n * This directive can fall back to using an ordinary click event, and so works on desktop\n * browsers as well as mobile.\n *\n * This directive also sets the CSS class `ng-click-active` while the element is being held\n * down (by a mouse click or touch) so you can restyle the depressed element if you wish.\n *\n * @element ANY\n * @param {expression} ngClick {@link guide/expression Expression} to evaluate\n * upon tap. (Event object is available as `$event`)\n *\n * @example\n    <example module=\"ngClickExample\" deps=\"angular-touch.js\">\n      <file name=\"index.html\">\n        <button ng-click=\"count = count + 1\" ng-init=\"count=0\">\n          Increment\n        </button>\n        count: {{ count }}\n      </file>\n      <file name=\"script.js\">\n        angular.module('ngClickExample', ['ngTouch']);\n      </file>\n    </example>\n */\n\nvar ngTouchClickDirectiveFactory = ['$parse', '$timeout', '$rootElement',\n    function($parse, $timeout, $rootElement) {\n  var TAP_DURATION = 750; // Shorter than 750ms is a tap, longer is a taphold or drag.\n  var MOVE_TOLERANCE = 12; // 12px seems to work in most mobile browsers.\n  var PREVENT_DURATION = 2500; // 2.5 seconds maximum from preventGhostClick call to click\n  var CLICKBUSTER_THRESHOLD = 25; // 25 pixels in any dimension is the limit for busting clicks.\n\n  var ACTIVE_CLASS_NAME = 'ng-click-active';\n  var lastPreventedTime;\n  var touchCoordinates;\n  var lastLabelClickCoordinates;\n\n\n  // TAP EVENTS AND GHOST CLICKS\n  //\n  // Why tap events?\n  // Mobile browsers detect a tap, then wait a moment (usually ~300ms) to see if you're\n  // double-tapping, and then fire a click event.\n  //\n  // This delay sucks and makes mobile apps feel unresponsive.\n  // So we detect touchstart, touchcancel and touchend ourselves and determine when\n  // the user has tapped on something.\n  //\n  // What happens when the browser then generates a click event?\n  // The browser, of course, also detects the tap and fires a click after a delay. This results in\n  // tapping/clicking twice. We do \"clickbusting\" to prevent it.\n  //\n  // How does it work?\n  // We attach global touchstart and click handlers, that run during the capture (early) phase.\n  // So the sequence for a tap is:\n  // - global touchstart: Sets an \"allowable region\" at the point touched.\n  // - element's touchstart: Starts a touch\n  // (- touchcancel ends the touch, no click follows)\n  // - element's touchend: Determines if the tap is valid (didn't move too far away, didn't hold\n  //   too long) and fires the user's tap handler. The touchend also calls preventGhostClick().\n  // - preventGhostClick() removes the allowable region the global touchstart created.\n  // - The browser generates a click event.\n  // - The global click handler catches the click, and checks whether it was in an allowable region.\n  //     - If preventGhostClick was called, the region will have been removed, the click is busted.\n  //     - If the region is still there, the click proceeds normally. Therefore clicks on links and\n  //       other elements without ngTap on them work normally.\n  //\n  // This is an ugly, terrible hack!\n  // Yeah, tell me about it. The alternatives are using the slow click events, or making our users\n  // deal with the ghost clicks, so I consider this the least of evils. Fortunately Angular\n  // encapsulates this ugly logic away from the user.\n  //\n  // Why not just put click handlers on the element?\n  // We do that too, just to be sure. If the tap event caused the DOM to change,\n  // it is possible another element is now in that position. To take account for these possibly\n  // distinct elements, the handlers are global and care only about coordinates.\n\n  // Checks if the coordinates are close enough to be within the region.\n  function hit(x1, y1, x2, y2) {\n    return Math.abs(x1 - x2) < CLICKBUSTER_THRESHOLD && Math.abs(y1 - y2) < CLICKBUSTER_THRESHOLD;\n  }\n\n  // Checks a list of allowable regions against a click location.\n  // Returns true if the click should be allowed.\n  // Splices out the allowable region from the list after it has been used.\n  function checkAllowableRegions(touchCoordinates, x, y) {\n    for (var i = 0; i < touchCoordinates.length; i += 2) {\n      if (hit(touchCoordinates[i], touchCoordinates[i + 1], x, y)) {\n        touchCoordinates.splice(i, i + 2);\n        return true; // allowable region\n      }\n    }\n    return false; // No allowable region; bust it.\n  }\n\n  // Global click handler that prevents the click if it's in a bustable zone and preventGhostClick\n  // was called recently.\n  function onClick(event) {\n    if (Date.now() - lastPreventedTime > PREVENT_DURATION) {\n      return; // Too old.\n    }\n\n    var touches = event.touches && event.touches.length ? event.touches : [event];\n    var x = touches[0].clientX;\n    var y = touches[0].clientY;\n    // Work around desktop Webkit quirk where clicking a label will fire two clicks (on the label\n    // and on the input element). Depending on the exact browser, this second click we don't want\n    // to bust has either (0,0), negative coordinates, or coordinates equal to triggering label\n    // click event\n    if (x < 1 && y < 1) {\n      return; // offscreen\n    }\n    if (lastLabelClickCoordinates &&\n        lastLabelClickCoordinates[0] === x && lastLabelClickCoordinates[1] === y) {\n      return; // input click triggered by label click\n    }\n    // reset label click coordinates on first subsequent click\n    if (lastLabelClickCoordinates) {\n      lastLabelClickCoordinates = null;\n    }\n    // remember label click coordinates to prevent click busting of trigger click event on input\n    if (nodeName_(event.target) === 'label') {\n      lastLabelClickCoordinates = [x, y];\n    }\n\n    // Look for an allowable region containing this click.\n    // If we find one, that means it was created by touchstart and not removed by\n    // preventGhostClick, so we don't bust it.\n    if (checkAllowableRegions(touchCoordinates, x, y)) {\n      return;\n    }\n\n    // If we didn't find an allowable region, bust the click.\n    event.stopPropagation();\n    event.preventDefault();\n\n    // Blur focused form elements\n    event.target && event.target.blur && event.target.blur();\n  }\n\n\n  // Global touchstart handler that creates an allowable region for a click event.\n  // This allowable region can be removed by preventGhostClick if we want to bust it.\n  function onTouchStart(event) {\n    var touches = event.touches && event.touches.length ? event.touches : [event];\n    var x = touches[0].clientX;\n    var y = touches[0].clientY;\n    touchCoordinates.push(x, y);\n\n    $timeout(function() {\n      // Remove the allowable region.\n      for (var i = 0; i < touchCoordinates.length; i += 2) {\n        if (touchCoordinates[i] == x && touchCoordinates[i + 1] == y) {\n          touchCoordinates.splice(i, i + 2);\n          return;\n        }\n      }\n    }, PREVENT_DURATION, false);\n  }\n\n  // On the first call, attaches some event handlers. Then whenever it gets called, it creates a\n  // zone around the touchstart where clicks will get busted.\n  function preventGhostClick(x, y) {\n    if (!touchCoordinates) {\n      $rootElement[0].addEventListener('click', onClick, true);\n      $rootElement[0].addEventListener('touchstart', onTouchStart, true);\n      touchCoordinates = [];\n    }\n\n    lastPreventedTime = Date.now();\n\n    checkAllowableRegions(touchCoordinates, x, y);\n  }\n\n  // Actual linking function.\n  return function(scope, element, attr) {\n    var clickHandler = $parse(attr.ngClick),\n        tapping = false,\n        tapElement,  // Used to blur the element after a tap.\n        startTime,   // Used to check if the tap was held too long.\n        touchStartX,\n        touchStartY;\n\n    function resetState() {\n      tapping = false;\n      element.removeClass(ACTIVE_CLASS_NAME);\n    }\n\n    element.on('touchstart', function(event) {\n      tapping = true;\n      tapElement = event.target ? event.target : event.srcElement; // IE uses srcElement.\n      // Hack for Safari, which can target text nodes instead of containers.\n      if (tapElement.nodeType == 3) {\n        tapElement = tapElement.parentNode;\n      }\n\n      element.addClass(ACTIVE_CLASS_NAME);\n\n      startTime = Date.now();\n\n      // Use jQuery originalEvent\n      var originalEvent = event.originalEvent || event;\n      var touches = originalEvent.touches && originalEvent.touches.length ? originalEvent.touches : [originalEvent];\n      var e = touches[0];\n      touchStartX = e.clientX;\n      touchStartY = e.clientY;\n    });\n\n    element.on('touchcancel', function(event) {\n      resetState();\n    });\n\n    element.on('touchend', function(event) {\n      var diff = Date.now() - startTime;\n\n      // Use jQuery originalEvent\n      var originalEvent = event.originalEvent || event;\n      var touches = (originalEvent.changedTouches && originalEvent.changedTouches.length) ?\n          originalEvent.changedTouches :\n          ((originalEvent.touches && originalEvent.touches.length) ? originalEvent.touches : [originalEvent]);\n      var e = touches[0];\n      var x = e.clientX;\n      var y = e.clientY;\n      var dist = Math.sqrt(Math.pow(x - touchStartX, 2) + Math.pow(y - touchStartY, 2));\n\n      if (tapping && diff < TAP_DURATION && dist < MOVE_TOLERANCE) {\n        // Call preventGhostClick so the clickbuster will catch the corresponding click.\n        preventGhostClick(x, y);\n\n        // Blur the focused element (the button, probably) before firing the callback.\n        // This doesn't work perfectly on Android Chrome, but seems to work elsewhere.\n        // I couldn't get anything to work reliably on Android Chrome.\n        if (tapElement) {\n          tapElement.blur();\n        }\n\n        if (!angular.isDefined(attr.disabled) || attr.disabled === false) {\n          element.triggerHandler('click', [event]);\n        }\n      }\n\n      resetState();\n    });\n\n    // Hack for iOS Safari's benefit. It goes searching for onclick handlers and is liable to click\n    // something else nearby.\n    element.onclick = function(event) { };\n\n    // Actual click handler.\n    // There are three different kinds of clicks, only two of which reach this point.\n    // - On desktop browsers without touch events, their clicks will always come here.\n    // - On mobile browsers, the simulated \"fast\" click will call this.\n    // - But the browser's follow-up slow click will be \"busted\" before it reaches this handler.\n    // Therefore it's safe to use this directive on both mobile and desktop.\n    element.on('click', function(event, touchend) {\n      scope.$apply(function() {\n        clickHandler(scope, {$event: (touchend || event)});\n      });\n    });\n\n    element.on('mousedown', function(event) {\n      element.addClass(ACTIVE_CLASS_NAME);\n    });\n\n    element.on('mousemove mouseup', function(event) {\n      element.removeClass(ACTIVE_CLASS_NAME);\n    });\n\n  };\n}];\n\n/* global ngTouch: false */\n\n/**\n * @ngdoc directive\n * @name ngSwipeLeft\n *\n * @description\n * Specify custom behavior when an element is swiped to the left on a touchscreen device.\n * A leftward swipe is a quick, right-to-left slide of the finger.\n * Though ngSwipeLeft is designed for touch-based devices, it will work with a mouse click and drag\n * too.\n *\n * To disable the mouse click and drag functionality, add `ng-swipe-disable-mouse` to\n * the `ng-swipe-left` or `ng-swipe-right` DOM Element.\n *\n * Requires the {@link ngTouch `ngTouch`} module to be installed.\n *\n * @element ANY\n * @param {expression} ngSwipeLeft {@link guide/expression Expression} to evaluate\n * upon left swipe. (Event object is available as `$event`)\n *\n * @example\n    <example module=\"ngSwipeLeftExample\" deps=\"angular-touch.js\">\n      <file name=\"index.html\">\n        <div ng-show=\"!showActions\" ng-swipe-left=\"showActions = true\">\n          Some list content, like an email in the inbox\n        </div>\n        <div ng-show=\"showActions\" ng-swipe-right=\"showActions = false\">\n          <button ng-click=\"reply()\">Reply</button>\n          <button ng-click=\"delete()\">Delete</button>\n        </div>\n      </file>\n      <file name=\"script.js\">\n        angular.module('ngSwipeLeftExample', ['ngTouch']);\n      </file>\n    </example>\n */\n\n/**\n * @ngdoc directive\n * @name ngSwipeRight\n *\n * @description\n * Specify custom behavior when an element is swiped to the right on a touchscreen device.\n * A rightward swipe is a quick, left-to-right slide of the finger.\n * Though ngSwipeRight is designed for touch-based devices, it will work with a mouse click and drag\n * too.\n *\n * Requires the {@link ngTouch `ngTouch`} module to be installed.\n *\n * @element ANY\n * @param {expression} ngSwipeRight {@link guide/expression Expression} to evaluate\n * upon right swipe. (Event object is available as `$event`)\n *\n * @example\n    <example module=\"ngSwipeRightExample\" deps=\"angular-touch.js\">\n      <file name=\"index.html\">\n        <div ng-show=\"!showActions\" ng-swipe-left=\"showActions = true\">\n          Some list content, like an email in the inbox\n        </div>\n        <div ng-show=\"showActions\" ng-swipe-right=\"showActions = false\">\n          <button ng-click=\"reply()\">Reply</button>\n          <button ng-click=\"delete()\">Delete</button>\n        </div>\n      </file>\n      <file name=\"script.js\">\n        angular.module('ngSwipeRightExample', ['ngTouch']);\n      </file>\n    </example>\n */\n\nfunction makeSwipeDirective(directiveName, direction, eventName) {\n  ngTouch.directive(directiveName, ['$parse', '$swipe', function($parse, $swipe) {\n    // The maximum vertical delta for a swipe should be less than 75px.\n    var MAX_VERTICAL_DISTANCE = 75;\n    // Vertical distance should not be more than a fraction of the horizontal distance.\n    var MAX_VERTICAL_RATIO = 0.3;\n    // At least a 30px lateral motion is necessary for a swipe.\n    var MIN_HORIZONTAL_DISTANCE = 30;\n\n    return function(scope, element, attr) {\n      var swipeHandler = $parse(attr[directiveName]);\n\n      var startCoords, valid;\n\n      function validSwipe(coords) {\n        // Check that it's within the coordinates.\n        // Absolute vertical distance must be within tolerances.\n        // Horizontal distance, we take the current X - the starting X.\n        // This is negative for leftward swipes and positive for rightward swipes.\n        // After multiplying by the direction (-1 for left, +1 for right), legal swipes\n        // (ie. same direction as the directive wants) will have a positive delta and\n        // illegal ones a negative delta.\n        // Therefore this delta must be positive, and larger than the minimum.\n        if (!startCoords) return false;\n        var deltaY = Math.abs(coords.y - startCoords.y);\n        var deltaX = (coords.x - startCoords.x) * direction;\n        return valid && // Short circuit for already-invalidated swipes.\n            deltaY < MAX_VERTICAL_DISTANCE &&\n            deltaX > 0 &&\n            deltaX > MIN_HORIZONTAL_DISTANCE &&\n            deltaY / deltaX < MAX_VERTICAL_RATIO;\n      }\n\n      var pointerTypes = ['touch'];\n      if (!angular.isDefined(attr['ngSwipeDisableMouse'])) {\n        pointerTypes.push('mouse');\n      }\n      $swipe.bind(element, {\n        'start': function(coords, event) {\n          startCoords = coords;\n          valid = true;\n        },\n        'cancel': function(event) {\n          valid = false;\n        },\n        'end': function(coords, event) {\n          if (validSwipe(coords)) {\n            scope.$apply(function() {\n              element.triggerHandler(eventName);\n              swipeHandler(scope, {$event: event});\n            });\n          }\n        }\n      }, pointerTypes);\n    };\n  }]);\n}\n\n// Left is negative X-coordinate, right is positive.\nmakeSwipeDirective('ngSwipeLeft', -1, 'swipeleft');\nmakeSwipeDirective('ngSwipeRight', 1, 'swiperight');\n\n\n\n})(window, window.angular);\n","require('./angular-touch');\nmodule.exports = 'ngTouch';\n","/*!\n * angular-translate - v2.19.1 - 2024-01-21\n * \n * Copyright (c) 2024 The angular-translate team, Pascal Precht; Licensed MIT\n */\n(function (root, factory) {\n  if (typeof define === 'function' && define.amd) {\n    // AMD. Register as an anonymous module unless amdModuleId is set\n    define([], function () {\n      return (factory());\n    });\n  } else if (typeof module === 'object' && module.exports) {\n    // Node. Does not work with strict CommonJS, but\n    // only CommonJS-like environments that support module.exports,\n    // like Node.\n    module.exports = factory();\n  } else {\n    factory();\n  }\n}(this, function () {\n\n$translateStaticFilesLoader.$inject = ['$q', '$http'];\nangular.module('pascalprecht.translate')\n/**\n * @ngdoc object\n * @name pascalprecht.translate.$translateStaticFilesLoader\n * @requires $q\n * @requires $http\n *\n * @description\n * Creates a loading function for a typical static file url pattern:\n * \"lang-en_US.json\", \"lang-de_DE.json\", etc. Using this builder,\n * the response of these urls must be an object of key-value pairs.\n *\n * @param {object} options Options object, which gets prefix, suffix, key, and fileMap\n */\n.factory('$translateStaticFilesLoader', $translateStaticFilesLoader);\n\nfunction $translateStaticFilesLoader($q, $http) {\n\n  'use strict';\n\n  return function (options) {\n\n    if (!options || (!angular.isArray(options.files) && (!angular.isString(options.prefix) || !angular.isString(options.suffix)))) {\n      throw new Error('Couldn\\'t load static files, no files and prefix or suffix specified!');\n    }\n\n    if (!options.files) {\n      options.files = [{\n        prefix: options.prefix,\n        suffix: options.suffix\n      }];\n    }\n\n    var load = function (file) {\n      if (!file || (!angular.isString(file.prefix) || !angular.isString(file.suffix))) {\n        throw new Error('Couldn\\'t load static file, no prefix or suffix specified!');\n      }\n\n      var fileUrl = [\n        file.prefix,\n        options.key,\n        file.suffix\n      ].join('');\n\n      if (angular.isObject(options.fileMap) && options.fileMap[fileUrl]) {\n        fileUrl = options.fileMap[fileUrl];\n      }\n\n      return $http(angular.extend({\n        url: fileUrl,\n        method: 'GET'\n      }, options.$http))\n        .then(function(result) {\n          return result.data;\n        }, function () {\n          return $q.reject(options.key);\n        });\n    };\n\n    var promises = [],\n        length = options.files.length;\n\n    for (var i = 0; i < length; i++) {\n      promises.push(load({\n        prefix: options.files[i].prefix,\n        key: options.key,\n        suffix: options.files[i].suffix\n      }));\n    }\n\n    return $q.all(promises)\n      .then(function (data) {\n        var length = data.length,\n            mergedData = {};\n\n        for (var i = 0; i < length; i++) {\n          for (var key in data[i]) {\n            mergedData[key] = data[i][key];\n          }\n        }\n\n        return mergedData;\n      });\n  };\n}\n\n$translateStaticFilesLoader.displayName = '$translateStaticFilesLoader';\nreturn 'pascalprecht.translate';\n\n}));\n","/*!\n * angular-translate - v2.19.1 - 2024-01-21\n * \n * Copyright (c) 2024 The angular-translate team, Pascal Precht; Licensed MIT\n */\n(function (root, factory) {\n  if (typeof define === 'function' && define.amd) {\n    // AMD. Register as an anonymous module unless amdModuleId is set\n    define([], function () {\n      return (factory());\n    });\n  } else if (typeof module === 'object' && module.exports) {\n    // Node. Does not work with strict CommonJS, but\n    // only CommonJS-like environments that support module.exports,\n    // like Node.\n    module.exports = factory();\n  } else {\n    factory();\n  }\n}(this, function () {\n\n/**\n * @ngdoc overview\n * @name pascalprecht.translate\n *\n * @description\n * The main module which holds everything together.\n */\nrunTranslate.$inject = ['$translate'];\n$translate.$inject = ['$STORAGE_KEY', '$windowProvider', '$translateSanitizationProvider', 'pascalprechtTranslateOverrider'];\n$translateDefaultInterpolation.$inject = ['$interpolate', '$translateSanitization'];\ntranslateDirective.$inject = ['$translate', '$interpolate', '$compile', '$parse', '$rootScope'];\ntranslateAttrDirective.$inject = ['$translate', '$rootScope'];\ntranslateCloakDirective.$inject = ['$translate', '$rootScope'];\ntranslateFilterFactory.$inject = ['$parse', '$translate'];\n$translationCache.$inject = ['$cacheFactory'];\nangular.module('pascalprecht.translate', ['ng'])\n  .run(runTranslate);\n\nfunction runTranslate($translate) {\n\n  'use strict';\n\n  var key = $translate.storageKey(),\n    storage = $translate.storage();\n\n  var fallbackFromIncorrectStorageValue = function () {\n    var preferred = $translate.preferredLanguage();\n    if (angular.isString(preferred)) {\n      $translate.use(preferred);\n      // $translate.use() will also remember the language.\n      // So, we don't need to call storage.put() here.\n    } else {\n      storage.put(key, $translate.use());\n    }\n  };\n\n  fallbackFromIncorrectStorageValue.displayName = 'fallbackFromIncorrectStorageValue';\n\n  if (storage) {\n    if (!storage.get(key)) {\n      fallbackFromIncorrectStorageValue();\n    } else {\n      $translate.use(storage.get(key))['catch'](fallbackFromIncorrectStorageValue);\n    }\n  } else if (angular.isString($translate.preferredLanguage())) {\n    $translate.use($translate.preferredLanguage());\n  }\n}\n\nrunTranslate.displayName = 'runTranslate';\n\n/**\n * @ngdoc object\n * @name pascalprecht.translate.$translateSanitizationProvider\n *\n * @description\n *\n * Configurations for $translateSanitization\n */\nangular.module('pascalprecht.translate').provider('$translateSanitization', $translateSanitizationProvider);\n\nfunction $translateSanitizationProvider () {\n\n  'use strict';\n\n  var $sanitize,\n      $sce,\n      currentStrategy = null, // TODO change to either 'sanitize', 'escape' or ['sanitize', 'escapeParameters'] in 3.0.\n      hasConfiguredStrategy = false,\n      hasShownNoStrategyConfiguredWarning = false,\n      strategies;\n\n  /**\n   * Definition of a sanitization strategy function\n   * @callback StrategyFunction\n   * @param {string|object} value - value to be sanitized (either a string or an interpolated value map)\n   * @param {string} mode - either 'text' for a string (translation) or 'params' for the interpolated params\n   * @return {string|object}\n   */\n\n  /**\n   * @ngdoc property\n   * @name strategies\n   * @propertyOf pascalprecht.translate.$translateSanitizationProvider\n   *\n   * @description\n   * Following strategies are built-in:\n   * <dl>\n   *   <dt>sanitize</dt>\n   *   <dd>Sanitizes HTML in the translation text using $sanitize</dd>\n   *   <dt>escape</dt>\n   *   <dd>Escapes HTML in the translation</dd>\n   *   <dt>sanitizeParameters</dt>\n   *   <dd>Sanitizes HTML in the values of the interpolation parameters using $sanitize</dd>\n   *   <dt>escapeParameters</dt>\n   *   <dd>Escapes HTML in the values of the interpolation parameters</dd>\n   *   <dt>escaped</dt>\n   *   <dd>Support legacy strategy name 'escaped' for backwards compatibility (will be removed in 3.0)</dd>\n   * </dl>\n   *\n   */\n\n  strategies = {\n    sanitize: function (value, mode/*, context*/) {\n      if (mode === 'text') {\n        value = htmlSanitizeValue(value);\n      }\n      return value;\n    },\n    escape: function (value, mode/*, context*/) {\n      if (mode === 'text') {\n        value = htmlEscapeValue(value);\n      }\n      return value;\n    },\n    sanitizeParameters: function (value, mode/*, context*/) {\n      if (mode === 'params') {\n        value = mapInterpolationParameters(value, htmlSanitizeValue);\n      }\n      return value;\n    },\n    escapeParameters: function (value, mode/*, context*/) {\n      if (mode === 'params') {\n        value = mapInterpolationParameters(value, htmlEscapeValue);\n      }\n      return value;\n    },\n    sce: function (value, mode, context) {\n      if (mode === 'text') {\n        value = htmlTrustValue(value);\n      } else if (mode === 'params') {\n        if (context !== 'filter') {\n          // do html escape in filter context #1101\n          value = mapInterpolationParameters(value, htmlEscapeValue);\n        }\n      }\n      return value;\n    },\n    sceParameters: function (value, mode/*, context*/) {\n      if (mode === 'params') {\n        value = mapInterpolationParameters(value, htmlTrustValue);\n      }\n      return value;\n    }\n  };\n  // Support legacy strategy name 'escaped' for backwards compatibility.\n  // TODO should be removed in 3.0\n  strategies.escaped = strategies.escapeParameters;\n\n  /**\n   * @ngdoc function\n   * @name pascalprecht.translate.$translateSanitizationProvider#addStrategy\n   * @methodOf pascalprecht.translate.$translateSanitizationProvider\n   *\n   * @description\n   * Adds a sanitization strategy to the list of known strategies.\n   *\n   * @param {string} strategyName - unique key for a strategy\n   * @param {StrategyFunction} strategyFunction - strategy function\n   * @returns {object} this\n   */\n  this.addStrategy = function (strategyName, strategyFunction) {\n    strategies[strategyName] = strategyFunction;\n    return this;\n  };\n\n  /**\n   * @ngdoc function\n   * @name pascalprecht.translate.$translateSanitizationProvider#removeStrategy\n   * @methodOf pascalprecht.translate.$translateSanitizationProvider\n   *\n   * @description\n   * Removes a sanitization strategy from the list of known strategies.\n   *\n   * @param {string} strategyName - unique key for a strategy\n   * @returns {object} this\n   */\n  this.removeStrategy = function (strategyName) {\n    delete strategies[strategyName];\n    return this;\n  };\n\n  /**\n   * @ngdoc function\n   * @name pascalprecht.translate.$translateSanitizationProvider#useStrategy\n   * @methodOf pascalprecht.translate.$translateSanitizationProvider\n   *\n   * @description\n   * Selects a sanitization strategy. When an array is provided the strategies will be executed in order.\n   *\n   * @param {string|StrategyFunction|array} strategy The sanitization strategy / strategies which should be used. Either a name of an existing strategy, a custom strategy function, or an array consisting of multiple names and / or custom functions.\n   * @returns {object} this\n   */\n  this.useStrategy = function (strategy) {\n    hasConfiguredStrategy = true;\n    currentStrategy = strategy;\n    return this;\n  };\n\n  /**\n   * @ngdoc object\n   * @name pascalprecht.translate.$translateSanitization\n   * @requires $injector\n   * @requires $log\n   *\n   * @description\n   * Sanitizes interpolation parameters and translated texts.\n   *\n   */\n  this.$get = ['$injector', '$log', function ($injector, $log) {\n\n    var cachedStrategyMap = {};\n\n    var applyStrategies = function (value, mode, context, selectedStrategies) {\n      angular.forEach(selectedStrategies, function (selectedStrategy) {\n        if (angular.isFunction(selectedStrategy)) {\n          value = selectedStrategy(value, mode, context);\n        } else if (angular.isFunction(strategies[selectedStrategy])) {\n          value = strategies[selectedStrategy](value, mode, context);\n        } else if (angular.isString(strategies[selectedStrategy])) {\n          if (!cachedStrategyMap[strategies[selectedStrategy]]) {\n            try {\n              cachedStrategyMap[strategies[selectedStrategy]] = $injector.get(strategies[selectedStrategy]);\n            } catch (e) {\n              cachedStrategyMap[strategies[selectedStrategy]] = function() {};\n              throw new Error('pascalprecht.translate.$translateSanitization: Unknown sanitization strategy: \\'' + selectedStrategy + '\\'');\n            }\n          }\n          value = cachedStrategyMap[strategies[selectedStrategy]](value, mode, context);\n        } else {\n          throw new Error('pascalprecht.translate.$translateSanitization: Unknown sanitization strategy: \\'' + selectedStrategy + '\\'');\n        }\n      });\n      return value;\n    };\n\n    // TODO: should be removed in 3.0\n    var showNoStrategyConfiguredWarning = function () {\n      if (!hasConfiguredStrategy && !hasShownNoStrategyConfiguredWarning) {\n        $log.warn('pascalprecht.translate.$translateSanitization: No sanitization strategy has been configured. This can have serious security implications. See http://angular-translate.github.io/docs/#/guide/19_security for details.');\n        hasShownNoStrategyConfiguredWarning = true;\n      }\n    };\n\n    if ($injector.has('$sanitize')) {\n      $sanitize = $injector.get('$sanitize');\n    }\n    if ($injector.has('$sce')) {\n      $sce = $injector.get('$sce');\n    }\n\n    return {\n      /**\n       * @ngdoc function\n       * @name pascalprecht.translate.$translateSanitization#useStrategy\n       * @methodOf pascalprecht.translate.$translateSanitization\n       *\n       * @description\n       * Selects a sanitization strategy. When an array is provided the strategies will be executed in order.\n       *\n       * @param {string|StrategyFunction|array} strategy The sanitization strategy / strategies which should be used. Either a name of an existing strategy, a custom strategy function, or an array consisting of multiple names and / or custom functions.\n       */\n      useStrategy: (function (self) {\n        return function (strategy) {\n          self.useStrategy(strategy);\n        };\n      })(this),\n\n      /**\n       * @ngdoc function\n       * @name pascalprecht.translate.$translateSanitization#sanitize\n       * @methodOf pascalprecht.translate.$translateSanitization\n       *\n       * @description\n       * Sanitizes a value.\n       *\n       * @param {string|object} value The value which should be sanitized.\n       * @param {string} mode The current sanitization mode, either 'params' or 'text'.\n       * @param {string|StrategyFunction|array} [strategy] Optional custom strategy which should be used instead of the currently selected strategy.\n       * @param {string} [context] The context of this call: filter, service. Default is service\n       * @returns {string|object} sanitized value\n       */\n      sanitize: function (value, mode, strategy, context) {\n        if (!currentStrategy) {\n          showNoStrategyConfiguredWarning();\n        }\n\n        if (!strategy && strategy !== null) {\n          strategy = currentStrategy;\n        }\n\n        if (!strategy) {\n          return value;\n        }\n\n        if (!context) {\n          context = 'service';\n        }\n\n        var selectedStrategies = angular.isArray(strategy) ? strategy : [strategy];\n        return applyStrategies(value, mode, context, selectedStrategies);\n      }\n    };\n  }];\n\n  var htmlEscapeValue = function (value) {\n    var element = angular.element('<div></div>');\n    element.text(value); // not chainable, see #1044\n    return element.html();\n  };\n\n  var htmlSanitizeValue = function (value) {\n    if (!$sanitize) {\n      throw new Error('pascalprecht.translate.$translateSanitization: Error cannot find $sanitize service. Either include the ngSanitize module (https://docs.angularjs.org/api/ngSanitize) or use a sanitization strategy which does not depend on $sanitize, such as \\'escape\\'.');\n    }\n    return $sanitize(value);\n  };\n\n  var htmlTrustValue = function (value) {\n    if (!$sce) {\n      throw new Error('pascalprecht.translate.$translateSanitization: Error cannot find $sce service.');\n    }\n    return $sce.trustAsHtml(value);\n  };\n\n  var mapInterpolationParameters = function (value, iteratee, stack) {\n    if (angular.isDate(value)) {\n      return value;\n    } else if (angular.isObject(value)) {\n      var result = angular.isArray(value) ? [] : {};\n\n      if (!stack) {\n        stack = [];\n      } else {\n        if (stack.indexOf(value) > -1) {\n          throw new Error('pascalprecht.translate.$translateSanitization: Error cannot interpolate parameter due recursive object');\n        }\n      }\n\n      stack.push(value);\n      angular.forEach(value, function (propertyValue, propertyKey) {\n\n        /* Skipping function properties. */\n        if (angular.isFunction(propertyValue)) {\n          return;\n        }\n\n        result[propertyKey] = mapInterpolationParameters(propertyValue, iteratee, stack);\n      });\n      stack.splice(-1, 1); // remove last\n\n      return result;\n    } else if (angular.isNumber(value)) {\n      return value;\n    } else if (value === true || value === false) {\n      return value;\n    } else if (!angular.isUndefined(value) && value !== null) {\n      return iteratee(value);\n    } else {\n      return value;\n    }\n  };\n}\n\n/**\n * @ngdoc object\n * @name pascalprecht.translate.$translateProvider\n * @description\n *\n * $translateProvider allows developers to register translation-tables, asynchronous loaders\n * and similar to configure translation behavior directly inside of a module.\n *\n */\nangular.module('pascalprecht.translate')\n  .constant('pascalprechtTranslateOverrider', {})\n  .provider('$translate', $translate);\n\nfunction $translate($STORAGE_KEY, $windowProvider, $translateSanitizationProvider, pascalprechtTranslateOverrider) {\n\n  'use strict';\n\n  var $translationTable = {},\n    $preferredLanguage,\n    $availableLanguageKeys = [],\n    $languageKeyAliases,\n    $fallbackLanguage,\n    $fallbackWasString,\n    $uses,\n    $nextLang,\n    $storageFactory,\n    $storageKey = $STORAGE_KEY,\n    $storagePrefix,\n    $missingTranslationHandlerFactory,\n    $interpolationFactory,\n    $interpolatorFactories = [],\n    $loaderFactory,\n    $cloakClassName = 'translate-cloak',\n    $loaderOptions,\n    $notFoundIndicatorLeft,\n    $notFoundIndicatorRight,\n    $postCompilingEnabled = false,\n    $forceAsyncReloadEnabled = false,\n    $allowNamespaces = true,\n    $nestedObjectDelimeter = '.',\n    $isReady = false,\n    $keepContent = false,\n    loaderCache,\n    directivePriority = 0,\n    statefulFilter = true,\n    postProcessFn,\n    uniformLanguageTagResolver = 'default',\n    languageTagResolver = {\n      'default' : function (tag) {\n        return (tag || '').split('-').join('_');\n      },\n      java : function (tag) {\n        var temp = (tag || '').split('-').join('_');\n        var parts = temp.split('_');\n        return parts.length > 1 ? (parts[0].toLowerCase() + '_' + parts[1].toUpperCase()) : temp;\n      },\n      bcp47 : function (tag) {\n        var temp = (tag || '').split('_').join('-');\n        var parts = temp.split('-');\n\n        switch (parts.length) {\n          case 1: // language only\n            parts[0] = parts[0].toLowerCase();\n            break;\n          case 2: // language-script or language-region\n            parts[0] = parts[0].toLowerCase();\n            if (parts[1].length === 4) { // parts[1] is script\n              parts[1] = parts[1].charAt(0).toUpperCase() + parts[1].slice(1).toLowerCase();\n            } else { // parts[1] is region\n              parts[1] = parts[1].toUpperCase();\n            }\n            break;\n          case 3: // language-script-region\n            parts[0] = parts[0].toLowerCase();\n            parts[1] = parts[1].charAt(0).toUpperCase() + parts[1].slice(1).toLowerCase();\n            parts[2] = parts[2].toUpperCase();\n            break;\n          default:\n            return temp;\n        }\n\n        return parts.join('-');\n      },\n      'iso639-1' : function (tag) {\n        var temp = (tag || '').split('_').join('-');\n        var parts = temp.split('-');\n        return parts[0].toLowerCase();\n      }\n    };\n\n  var version = '2.19.1';\n\n  // tries to determine the browsers language\n  var getFirstBrowserLanguage = function () {\n\n    // internal purpose only\n    if (angular.isFunction(pascalprechtTranslateOverrider.getLocale)) {\n      return pascalprechtTranslateOverrider.getLocale();\n    }\n\n    var nav = $windowProvider.$get().navigator,\n      browserLanguagePropertyKeys = ['language', 'browserLanguage', 'systemLanguage', 'userLanguage'],\n      i,\n      language;\n\n    // support for HTML 5.1 \"navigator.languages\"\n    if (angular.isArray(nav.languages)) {\n      for (i = 0; i < nav.languages.length; i++) {\n        language = nav.languages[i];\n        if (language && language.length) {\n          return language;\n        }\n      }\n    }\n\n    // support for other well known properties in browsers\n    for (i = 0; i < browserLanguagePropertyKeys.length; i++) {\n      language = nav[browserLanguagePropertyKeys[i]];\n      if (language && language.length) {\n        return language;\n      }\n    }\n\n    return null;\n  };\n  getFirstBrowserLanguage.displayName = 'angular-translate/service: getFirstBrowserLanguage';\n\n  // tries to determine the browsers locale\n  var getLocale = function () {\n    var locale = getFirstBrowserLanguage() || '';\n    if (languageTagResolver[uniformLanguageTagResolver]) {\n      locale = languageTagResolver[uniformLanguageTagResolver](locale);\n    }\n    return locale;\n  };\n  getLocale.displayName = 'angular-translate/service: getLocale';\n\n  /**\n   * @name indexOf\n   * @private\n   *\n   * @description\n   * indexOf polyfill. Kinda sorta.\n   *\n   * @param {array} array Array to search in.\n   * @param {string} searchElement Element to search for.\n   *\n   * @returns {int} Index of search element.\n   */\n  var indexOf = function (array, searchElement) {\n    for (var i = 0, len = array.length; i < len; i++) {\n      if (array[i] === searchElement) {\n        return i;\n      }\n    }\n    return -1;\n  };\n\n  /**\n   * @name trim\n   * @private\n   *\n   * @description\n   * trim polyfill\n   *\n   * @returns {string} The string stripped of whitespace from both ends\n   */\n  var trim = function () {\n    return this.toString().replace(/^\\s+|\\s+$/g, '');\n  };\n\n  /**\n   * @name lowercase\n   * @private\n   *\n   * @description\n   * Return the lowercase string only if the type is string\n   *\n   * @returns {string} The string all in lowercase\n   */\n  var lowercase = function (string) {\n    return angular.isString(string) ? string.toLowerCase() : string;\n  };\n\n  var negotiateLocale = function (preferred) {\n    if (!preferred) {\n      return;\n    }\n\n    var avail = [],\n      locale = lowercase(preferred),\n      i = 0,\n      n = $availableLanguageKeys.length;\n\n    for (; i < n; i++) {\n      avail.push(lowercase($availableLanguageKeys[i]));\n    }\n\n    // Check for an exact match in our list of available keys\n    i = indexOf(avail, locale);\n    if (i > -1) {\n      return $availableLanguageKeys[i];\n    }\n\n    if ($languageKeyAliases) {\n      var alias;\n      for (var langKeyAlias in $languageKeyAliases) {\n        if ($languageKeyAliases.hasOwnProperty(langKeyAlias)) {\n          var hasWildcardKey = false;\n          var hasExactKey = Object.prototype.hasOwnProperty.call($languageKeyAliases, langKeyAlias) &&\n            lowercase(langKeyAlias) === lowercase(preferred);\n\n          if (langKeyAlias.slice(-1) === '*') {\n            hasWildcardKey = lowercase(langKeyAlias.slice(0, -1)) === lowercase(preferred.slice(0, langKeyAlias.length - 1));\n          }\n          if (hasExactKey || hasWildcardKey) {\n            alias = $languageKeyAliases[langKeyAlias];\n            if (indexOf(avail, lowercase(alias)) > -1) {\n              return alias;\n            }\n          }\n        }\n      }\n    }\n\n    // Check for a language code without region\n    var parts = preferred.split('_');\n\n    if (parts.length > 1 && indexOf(avail, lowercase(parts[0])) > -1) {\n      return parts[0];\n    }\n\n    // If everything fails, return undefined.\n    return;\n  };\n\n  /**\n   * @ngdoc function\n   * @name pascalprecht.translate.$translateProvider#translations\n   * @methodOf pascalprecht.translate.$translateProvider\n   *\n   * @description\n   * Registers a new translation table for specific language key.\n   *\n   * To register a translation table for specific language, pass a defined language\n   * key as first parameter.\n   *\n   * <pre>\n   *  // register translation table for language: 'de_DE'\n   *  $translateProvider.translations('de_DE', {\n   *    'GREETING': 'Hallo Welt!'\n   *  });\n   *\n   *  // register another one\n   *  $translateProvider.translations('en_US', {\n   *    'GREETING': 'Hello world!'\n   *  });\n   * </pre>\n   *\n   * When registering multiple translation tables for for the same language key,\n   * the actual translation table gets extended. This allows you to define module\n   * specific translation which only get added, once a specific module is loaded in\n   * your app.\n   *\n   * Invoking this method with no arguments returns the translation table which was\n   * registered with no language key. Invoking it with a language key returns the\n   * related translation table.\n   *\n   * @param {string} langKey A language key.\n   * @param {object} translationTable A plain old JavaScript object that represents a translation table.\n   *\n   */\n  var translations = function (langKey, translationTable) {\n\n    if (!langKey && !translationTable) {\n      return $translationTable;\n    }\n\n    if (langKey && !translationTable) {\n      if (angular.isString(langKey)) {\n        return $translationTable[langKey];\n      }\n    } else {\n      if (!angular.isObject($translationTable[langKey])) {\n        $translationTable[langKey] = {};\n      }\n      angular.extend($translationTable[langKey], flatObject(translationTable));\n    }\n    return this;\n  };\n\n  this.translations = translations;\n\n  /**\n   * @ngdoc function\n   * @name pascalprecht.translate.$translateProvider#cloakClassName\n   * @methodOf pascalprecht.translate.$translateProvider\n   *\n   * @description\n   *\n   * Let's you change the class name for `translate-cloak` directive.\n   * Default class name is `translate-cloak`.\n   *\n   * @param {string} name translate-cloak class name\n   */\n  this.cloakClassName = function (name) {\n    if (!name) {\n      return $cloakClassName;\n    }\n    $cloakClassName = name;\n    return this;\n  };\n\n  /**\n   * @ngdoc function\n   * @name pascalprecht.translate.$translateProvider#allowNamespaces\n   * @methodOf pascalprecht.translate.$translateProvider\n   *\n   * @description\n   * Let's you disable namespaces, if you don't need nested translation\n   * object files. Disabling namespaces can improve performance.\n   *\n   * Default value is `true`. Namespaces are enabled by default.\n   *\n   * @param {boolean} namespacesEnabled - namespaces are enabled or not\n   */\n  this.allowNamespaces = function (namespacesEnabled) {\n    if (namespacesEnabled === undefined) {\n      return $allowNamespaces;\n    }\n    $allowNamespaces = namespacesEnabled;\n    return this;\n  };\n\n  /**\n   * @ngdoc function\n   * @name pascalprecht.translate.$translateProvider#nestedObjectDelimeter\n   * @methodOf pascalprecht.translate.$translateProvider\n   *\n   * @description\n   *\n   * Let's you change the delimiter for namespaced translations.\n   * Default delimiter is `.`.\n   *\n   * @param {string} delimiter namespace separator\n   */\n  this.nestedObjectDelimeter = function (delimiter) {\n    if (!delimiter) {\n      return $nestedObjectDelimeter;\n    }\n    $nestedObjectDelimeter = delimiter;\n    return this;\n  };\n\n  /**\n   * @name flatObject\n   * @private\n   *\n   * @description\n   * Flats an object. This function is used to flatten given translation data with\n   * namespaces, so they are later accessible via dot notation.\n   */\n  var flatObject = function (data, path, result, prevKey) {\n    var key, keyWithPath, keyWithShortPath, val;\n\n    if (!path) {\n      path = [];\n    }\n    if (!result) {\n      result = {};\n    }\n    if (!$allowNamespaces) {\n      return data;\n    }\n    for (key in data) {\n      if (!Object.prototype.hasOwnProperty.call(data, key)) {\n        continue;\n      }\n      val = data[key];\n      if (angular.isObject(val)) {\n        flatObject(val, path.concat(key), result, key);\n      } else {\n        keyWithPath = path.length ? ('' + path.join($nestedObjectDelimeter) + $nestedObjectDelimeter + key) : key;\n        if (path.length && key === prevKey) {\n          // Create shortcut path (foo.bar == foo.bar.bar)\n          keyWithShortPath = '' + path.join($nestedObjectDelimeter);\n          // Link it to original path\n          result[keyWithShortPath] = '@:' + keyWithPath;\n        }\n        result[keyWithPath] = val;\n      }\n    }\n    return result;\n  };\n  flatObject.displayName = 'flatObject';\n\n  /**\n   * @ngdoc function\n   * @name pascalprecht.translate.$translateProvider#addInterpolation\n   * @methodOf pascalprecht.translate.$translateProvider\n   *\n   * @description\n   * Adds interpolation services to angular-translate, so it can manage them.\n   *\n   * @param {object} factory Interpolation service factory\n   */\n  this.addInterpolation = function (factory) {\n    $interpolatorFactories.push(factory);\n    return this;\n  };\n\n  /**\n   * @ngdoc function\n   * @name pascalprecht.translate.$translateProvider#useMessageFormatInterpolation\n   * @methodOf pascalprecht.translate.$translateProvider\n   *\n   * @description\n   * Tells angular-translate to use interpolation functionality of messageformat.js.\n   * This is useful when having high level pluralization and gender selection.\n   */\n  this.useMessageFormatInterpolation = function () {\n    return this.useInterpolation('$translateMessageFormatInterpolation');\n  };\n\n  /**\n   * @ngdoc function\n   * @name pascalprecht.translate.$translateProvider#useInterpolation\n   * @methodOf pascalprecht.translate.$translateProvider\n   *\n   * @description\n   * Tells angular-translate which interpolation style to use as default, application-wide.\n   * Simply pass a factory/service name. The interpolation service has to implement\n   * the correct interface.\n   *\n   * @param {string} factory Interpolation service name.\n   */\n  this.useInterpolation = function (factory) {\n    $interpolationFactory = factory;\n    return this;\n  };\n\n  /**\n   * @ngdoc function\n   * @name pascalprecht.translate.$translateProvider#useSanitizeStrategy\n   * @methodOf pascalprecht.translate.$translateProvider\n   *\n   * @description\n   * Simply sets a sanitation strategy type.\n   *\n   * @param {string} value Strategy type.\n   */\n  this.useSanitizeValueStrategy = function (value) {\n    $translateSanitizationProvider.useStrategy(value);\n    return this;\n  };\n\n  /**\n   * @ngdoc function\n   * @name pascalprecht.translate.$translateProvider#preferredLanguage\n   * @methodOf pascalprecht.translate.$translateProvider\n   *\n   * @description\n   * Tells the module which of the registered translation tables to use for translation\n   * at initial startup by passing a language key. Similar to `$translateProvider#use`\n   * only that it says which language to **prefer**.\n   * It is recommended to call this after {@link pascalprecht.translate.$translate#fallbackLanguage fallbackLanguage()}.\n   *\n   * @param {string} langKey A language key.\n   */\n  this.preferredLanguage = function (langKey) {\n    if (langKey) {\n      setupPreferredLanguage(langKey);\n      return this;\n    }\n    return $preferredLanguage;\n  };\n  var setupPreferredLanguage = function (langKey) {\n    if (langKey) {\n      $preferredLanguage = langKey;\n    }\n    return $preferredLanguage;\n  };\n  /**\n   * @ngdoc function\n   * @name pascalprecht.translate.$translateProvider#translationNotFoundIndicator\n   * @methodOf pascalprecht.translate.$translateProvider\n   *\n   * @description\n   * Sets an indicator which is used when a translation isn't found. E.g. when\n   * setting the indicator as 'X' and one tries to translate a translation id\n   * called `NOT_FOUND`, this will result in `X NOT_FOUND X`.\n   *\n   * Internally this methods sets a left indicator and a right indicator using\n   * `$translateProvider.translationNotFoundIndicatorLeft()` and\n   * `$translateProvider.translationNotFoundIndicatorRight()`.\n   *\n   * **Note**: These methods automatically add a whitespace between the indicators\n   * and the translation id.\n   *\n   * @param {string} indicator An indicator, could be any string.\n   */\n  this.translationNotFoundIndicator = function (indicator) {\n    this.translationNotFoundIndicatorLeft(indicator);\n    this.translationNotFoundIndicatorRight(indicator);\n    return this;\n  };\n\n  /**\n   * ngdoc function\n   * @name pascalprecht.translate.$translateProvider#translationNotFoundIndicatorLeft\n   * @methodOf pascalprecht.translate.$translateProvider\n   *\n   * @description\n   * Sets an indicator which is used when a translation isn't found left to the\n   * translation id.\n   *\n   * @param {string} indicator An indicator.\n   */\n  this.translationNotFoundIndicatorLeft = function (indicator) {\n    if (!indicator) {\n      return $notFoundIndicatorLeft;\n    }\n    $notFoundIndicatorLeft = indicator;\n    return this;\n  };\n\n  /**\n   * ngdoc function\n   * @name pascalprecht.translate.$translateProvider#translationNotFoundIndicatorLeft\n   * @methodOf pascalprecht.translate.$translateProvider\n   *\n   * @description\n   * Sets an indicator which is used when a translation isn't found right to the\n   * translation id.\n   *\n   * @param {string} indicator An indicator.\n   */\n  this.translationNotFoundIndicatorRight = function (indicator) {\n    if (!indicator) {\n      return $notFoundIndicatorRight;\n    }\n    $notFoundIndicatorRight = indicator;\n    return this;\n  };\n\n  /**\n   * @ngdoc function\n   * @name pascalprecht.translate.$translateProvider#fallbackLanguage\n   * @methodOf pascalprecht.translate.$translateProvider\n   *\n   * @description\n   * Tells the module which of the registered translation tables to use when missing translations\n   * at initial startup by passing a language key. Similar to `$translateProvider#use`\n   * only that it says which language to **fallback**.\n   *\n   * @param {string||array} langKey A language key.\n   *\n   */\n  this.fallbackLanguage = function (langKey) {\n    fallbackStack(langKey);\n    return this;\n  };\n\n  var fallbackStack = function (langKey) {\n    if (langKey) {\n      if (angular.isString(langKey)) {\n        $fallbackWasString = true;\n        $fallbackLanguage = [langKey];\n      } else if (angular.isArray(langKey)) {\n        $fallbackWasString = false;\n        $fallbackLanguage = langKey;\n      }\n      if (angular.isString($preferredLanguage) && indexOf($fallbackLanguage, $preferredLanguage) < 0) {\n        $fallbackLanguage.push($preferredLanguage);\n      }\n\n      return this;\n    } else {\n      if ($fallbackWasString) {\n        return $fallbackLanguage[0];\n      } else {\n        return $fallbackLanguage;\n      }\n    }\n  };\n\n  /**\n   * @ngdoc function\n   * @name pascalprecht.translate.$translateProvider#use\n   * @methodOf pascalprecht.translate.$translateProvider\n   *\n   * @description\n   * Set which translation table to use for translation by given language key. When\n   * trying to 'use' a language which isn't provided, it'll throw an error.\n   *\n   * You actually don't have to use this method since `$translateProvider#preferredLanguage`\n   * does the job too.\n   *\n   * @param {string} langKey A language key.\n   */\n  this.use = function (langKey) {\n    if (langKey) {\n      if (!$translationTable[langKey] && (!$loaderFactory)) {\n        // only throw an error, when not loading translation data asynchronously\n        throw new Error('$translateProvider couldn\\'t find translationTable for langKey: \\'' + langKey + '\\'');\n      }\n      $uses = langKey;\n      return this;\n    }\n    return $uses;\n  };\n\n  /**\n   * @ngdoc function\n   * @name pascalprecht.translate.$translateProvider#resolveClientLocale\n   * @methodOf pascalprecht.translate.$translateProvider\n   *\n   * @description\n   * This returns the current browser/client's language key. The result is processed with the configured uniform tag resolver.\n   *\n   * @returns {string} the current client/browser language key\n   */\n  this.resolveClientLocale = function () {\n    return getLocale();\n  };\n\n  /**\n   * @ngdoc function\n   * @name pascalprecht.translate.$translateProvider#storageKey\n   * @methodOf pascalprecht.translate.$translateProvider\n   *\n   * @description\n   * Tells the module which key must represent the choosed language by a user in the storage.\n   *\n   * @param {string} key A key for the storage.\n   */\n  var storageKey = function (key) {\n    if (!key) {\n      if ($storagePrefix) {\n        return $storagePrefix + $storageKey;\n      }\n      return $storageKey;\n    }\n    $storageKey = key;\n    return this;\n  };\n\n  this.storageKey = storageKey;\n\n  /**\n   * @ngdoc function\n   * @name pascalprecht.translate.$translateProvider#useUrlLoader\n   * @methodOf pascalprecht.translate.$translateProvider\n   *\n   * @description\n   * Tells angular-translate to use `$translateUrlLoader` extension service as loader.\n   *\n   * @param {string} url Url\n   * @param {Object=} options Optional configuration object\n   */\n  this.useUrlLoader = function (url, options) {\n    return this.useLoader('$translateUrlLoader', angular.extend({url : url}, options));\n  };\n\n  /**\n   * @ngdoc function\n   * @name pascalprecht.translate.$translateProvider#useStaticFilesLoader\n   * @methodOf pascalprecht.translate.$translateProvider\n   *\n   * @description\n   * Tells angular-translate to use `$translateStaticFilesLoader` extension service as loader.\n   *\n   * @param {Object=} options Optional configuration object\n   */\n  this.useStaticFilesLoader = function (options) {\n    return this.useLoader('$translateStaticFilesLoader', options);\n  };\n\n  /**\n   * @ngdoc function\n   * @name pascalprecht.translate.$translateProvider#useLoader\n   * @methodOf pascalprecht.translate.$translateProvider\n   *\n   * @description\n   * Tells angular-translate to use any other service as loader.\n   *\n   * @param {string} loaderFactory Factory name to use\n   * @param {Object=} options Optional configuration object\n   */\n  this.useLoader = function (loaderFactory, options) {\n    $loaderFactory = loaderFactory;\n    $loaderOptions = options || {};\n    return this;\n  };\n\n  /**\n   * @ngdoc function\n   * @name pascalprecht.translate.$translateProvider#useLocalStorage\n   * @methodOf pascalprecht.translate.$translateProvider\n   *\n   * @description\n   * Tells angular-translate to use `$translateLocalStorage` service as storage layer.\n   *\n   */\n  this.useLocalStorage = function () {\n    return this.useStorage('$translateLocalStorage');\n  };\n\n  /**\n   * @ngdoc function\n   * @name pascalprecht.translate.$translateProvider#useCookieStorage\n   * @methodOf pascalprecht.translate.$translateProvider\n   *\n   * @description\n   * Tells angular-translate to use `$translateCookieStorage` service as storage layer.\n   */\n  this.useCookieStorage = function () {\n    return this.useStorage('$translateCookieStorage');\n  };\n\n  /**\n   * @ngdoc function\n   * @name pascalprecht.translate.$translateProvider#useStorage\n   * @methodOf pascalprecht.translate.$translateProvider\n   *\n   * @description\n   * Tells angular-translate to use custom service as storage layer.\n   */\n  this.useStorage = function (storageFactory) {\n    $storageFactory = storageFactory;\n    return this;\n  };\n\n  /**\n   * @ngdoc function\n   * @name pascalprecht.translate.$translateProvider#storagePrefix\n   * @methodOf pascalprecht.translate.$translateProvider\n   *\n   * @description\n   * Sets prefix for storage key.\n   *\n   * @param {string} prefix Storage key prefix\n   */\n  this.storagePrefix = function (prefix) {\n    if (!prefix) {\n      return prefix;\n    }\n    $storagePrefix = prefix;\n    return this;\n  };\n\n  /**\n   * @ngdoc function\n   * @name pascalprecht.translate.$translateProvider#useMissingTranslationHandlerLog\n   * @methodOf pascalprecht.translate.$translateProvider\n   *\n   * @description\n   * Tells angular-translate to use built-in log handler when trying to translate\n   * a translation Id which doesn't exist.\n   *\n   * This is actually a shortcut method for `useMissingTranslationHandler()`.\n   *\n   */\n  this.useMissingTranslationHandlerLog = function () {\n    return this.useMissingTranslationHandler('$translateMissingTranslationHandlerLog');\n  };\n\n  /**\n   * @ngdoc function\n   * @name pascalprecht.translate.$translateProvider#useMissingTranslationHandler\n   * @methodOf pascalprecht.translate.$translateProvider\n   *\n   * @description\n   * Expects a factory name which later gets instantiated with `$injector`.\n   * This method can be used to tell angular-translate to use a custom\n   * missingTranslationHandler. Just build a factory which returns a function\n   * and expects a translation id as argument.\n   *\n   * Example:\n   * <pre>\n   *  app.config(function ($translateProvider) {\n   *    $translateProvider.useMissingTranslationHandler('customHandler');\n   *  });\n   *\n   *  app.factory('customHandler', function (dep1, dep2) {\n   *    return function (translationId) {\n   *      // something with translationId and dep1 and dep2\n   *    };\n   *  });\n   * </pre>\n   *\n   * @param {string} factory Factory name\n   */\n  this.useMissingTranslationHandler = function (factory) {\n    $missingTranslationHandlerFactory = factory;\n    return this;\n  };\n\n  /**\n   * @ngdoc function\n   * @name pascalprecht.translate.$translateProvider#usePostCompiling\n   * @methodOf pascalprecht.translate.$translateProvider\n   *\n   * @description\n   * If post compiling is enabled, all translated values will be processed\n   * again with AngularJS' $compile.\n   *\n   * Example:\n   * <pre>\n   *  app.config(function ($translateProvider) {\n   *    $translateProvider.usePostCompiling(true);\n   *  });\n   * </pre>\n   *\n   * @param {string} factory Factory name\n   */\n  this.usePostCompiling = function (value) {\n    $postCompilingEnabled = !(!value);\n    return this;\n  };\n\n  /**\n   * @ngdoc function\n   * @name pascalprecht.translate.$translateProvider#forceAsyncReload\n   * @methodOf pascalprecht.translate.$translateProvider\n   *\n   * @description\n   * If force async reload is enabled, async loader will always be called\n   * even if $translationTable already contains the language key, adding\n   * possible new entries to the $translationTable.\n   *\n   * Example:\n   * <pre>\n   *  app.config(function ($translateProvider) {\n   *    $translateProvider.forceAsyncReload(true);\n   *  });\n   * </pre>\n   *\n   * @param {boolean} value - valid values are true or false\n   */\n  this.forceAsyncReload = function (value) {\n    $forceAsyncReloadEnabled = !(!value);\n    return this;\n  };\n\n  /**\n   * @ngdoc function\n   * @name pascalprecht.translate.$translateProvider#uniformLanguageTag\n   * @methodOf pascalprecht.translate.$translateProvider\n   *\n   * @description\n   * Tells angular-translate which language tag should be used as a result when determining\n   * the current browser language.\n   *\n   * This setting must be set before invoking {@link pascalprecht.translate.$translateProvider#methods_determinePreferredLanguage determinePreferredLanguage()}.\n   *\n   * <pre>\n   * $translateProvider\n   *   .uniformLanguageTag('bcp47')\n   *   .determinePreferredLanguage()\n   * </pre>\n   *\n   * The resolver currently supports:\n   * * default\n   *     (traditionally: hyphens will be converted into underscores, i.e. en-US => en_US)\n   *     en-US => en_US\n   *     en_US => en_US\n   *     en-us => en_us\n   * * java\n   *     like default, but the second part will be always in uppercase\n   *     en-US => en_US\n   *     en_US => en_US\n   *     en-us => en_US\n   * * BCP 47 (RFC 4646 & 4647)\n   *     EN => en\n   *     en-US => en-US\n   *     en_US => en-US\n   *     en-us => en-US\n   *     sr-latn => sr-Latn\n   *     sr-latn-rs => sr-Latn-RS\n   *\n   * See also:\n   * * http://en.wikipedia.org/wiki/IETF_language_tag\n   * * http://www.w3.org/International/core/langtags/\n   * * http://tools.ietf.org/html/bcp47\n   *\n   * @param {string|object} options - options (or standard)\n   * @param {string} options.standard - valid values are 'default', 'bcp47', 'java'\n   */\n  this.uniformLanguageTag = function (options) {\n\n    if (!options) {\n      options = {};\n    } else if (angular.isString(options)) {\n      options = {\n        standard : options\n      };\n    }\n\n    uniformLanguageTagResolver = options.standard;\n\n    return this;\n  };\n\n  /**\n   * @ngdoc function\n   * @name pascalprecht.translate.$translateProvider#determinePreferredLanguage\n   * @methodOf pascalprecht.translate.$translateProvider\n   *\n   * @description\n   * Tells angular-translate to try to determine on its own which language key\n   * to set as preferred language. When `fn` is given, angular-translate uses it\n   * to determine a language key, otherwise it uses the built-in `getLocale()`\n   * method.\n   *\n   * The `getLocale()` returns a language key in the format `[lang]_[country]` or\n   * `[lang]` depending on what the browser provides.\n   *\n   * Use this method at your own risk, since not all browsers return a valid\n   * locale (see {@link pascalprecht.translate.$translateProvider#methods_uniformLanguageTag uniformLanguageTag()}).\n   *\n   * @param {Function=} fn Function to determine a browser's locale\n   */\n  this.determinePreferredLanguage = function (fn) {\n\n    var locale = (fn && angular.isFunction(fn)) ? fn() : getLocale();\n\n    if (!$availableLanguageKeys.length) {\n      $preferredLanguage = locale;\n    } else {\n      $preferredLanguage = negotiateLocale(locale) || locale;\n    }\n\n    return this;\n  };\n\n  /**\n   * @ngdoc function\n   * @name pascalprecht.translate.$translateProvider#registerAvailableLanguageKeys\n   * @methodOf pascalprecht.translate.$translateProvider\n   *\n   * @description\n   * Registers a set of language keys the app will work with. Use this method in\n   * combination with\n   * {@link pascalprecht.translate.$translateProvider#determinePreferredLanguage determinePreferredLanguage}.\n   * When available languages keys are registered, angular-translate\n   * tries to find the best fitting language key depending on the browsers locale,\n   * considering your language key convention.\n   *\n   * @param {object} languageKeys Array of language keys the your app will use\n   * @param {object=} aliases Alias map.\n   */\n  this.registerAvailableLanguageKeys = function (languageKeys, aliases) {\n    if (languageKeys) {\n      $availableLanguageKeys = languageKeys;\n      if (aliases) {\n        $languageKeyAliases = aliases;\n      }\n      return this;\n    }\n    return $availableLanguageKeys;\n  };\n\n  /**\n   * @ngdoc function\n   * @name pascalprecht.translate.$translateProvider#useLoaderCache\n   * @methodOf pascalprecht.translate.$translateProvider\n   *\n   * @description\n   * Registers a cache for internal $http based loaders.\n   * {@link pascalprecht.translate.$translationCache $translationCache}.\n   * When false the cache will be disabled (default). When true or undefined\n   * the cache will be a default (see $cacheFactory). When an object it will\n   * be treat as a cache object itself: the usage is $http({cache: cache})\n   *\n   * @param {object} cache boolean, string or cache-object\n   */\n  this.useLoaderCache = function (cache) {\n    if (cache === false) {\n      // disable cache\n      loaderCache = undefined;\n    } else if (cache === true) {\n      // enable cache using AJS defaults\n      loaderCache = true;\n    } else if (typeof(cache) === 'undefined') {\n      // enable cache using default\n      loaderCache = '$translationCache';\n    } else if (cache) {\n      // enable cache using given one (see $cacheFactory)\n      loaderCache = cache;\n    }\n    return this;\n  };\n\n  /**\n   * @ngdoc function\n   * @name pascalprecht.translate.$translateProvider#directivePriority\n   * @methodOf pascalprecht.translate.$translateProvider\n   *\n   * @description\n   * Sets the default priority of the translate directive. The standard value is `0`.\n   * Calling this function without an argument will return the current value.\n   *\n   * @param {number} priority for the translate-directive\n   */\n  this.directivePriority = function (priority) {\n    if (priority === undefined) {\n      // getter\n      return directivePriority;\n    } else {\n      // setter with chaining\n      directivePriority = priority;\n      return this;\n    }\n  };\n\n  /**\n   * @ngdoc function\n   * @name pascalprecht.translate.$translateProvider#statefulFilter\n   * @methodOf pascalprecht.translate.$translateProvider\n   *\n   * @description\n   * Since AngularJS 1.3, filters which are not stateless (depending at the scope)\n   * have to explicit define this behavior.\n   * Sets whether the translate filter should be stateful or stateless. The standard value is `true`\n   * meaning being stateful.\n   * Calling this function without an argument will return the current value.\n   *\n   * @param {boolean} state - defines the state of the filter\n   */\n  this.statefulFilter = function (state) {\n    if (state === undefined) {\n      // getter\n      return statefulFilter;\n    } else {\n      // setter with chaining\n      statefulFilter = state;\n      return this;\n    }\n  };\n\n  /**\n   * @ngdoc function\n   * @name pascalprecht.translate.$translateProvider#postProcess\n   * @methodOf pascalprecht.translate.$translateProvider\n   *\n   * @description\n   * The post processor will be intercept right after the translation result. It can modify the result.\n   *\n   * @param {object} fn Function or service name (string) to be called after the translation value has been set / resolved. The function itself will enrich every value being processed and then continue the normal resolver process\n   */\n  this.postProcess = function (fn) {\n    if (fn) {\n      postProcessFn = fn;\n    } else {\n      postProcessFn = undefined;\n    }\n    return this;\n  };\n\n  /**\n   * @ngdoc function\n   * @name pascalprecht.translate.$translateProvider#keepContent\n   * @methodOf pascalprecht.translate.$translateProvider\n   *\n   * @description\n   * If keepContent is set to true than translate directive will always use innerHTML\n   * as a default translation\n   *\n   * Example:\n   * <pre>\n   *  app.config(function ($translateProvider) {\n   *    $translateProvider.keepContent(true);\n   *  });\n   * </pre>\n   *\n   * @param {boolean} value - valid values are true or false\n   */\n  this.keepContent = function (value) {\n    $keepContent = !(!value);\n    return this;\n  };\n\n  /**\n   * @ngdoc object\n   * @name pascalprecht.translate.$translate\n   * @requires $interpolate\n   * @requires $log\n   * @requires $rootScope\n   * @requires $q\n   *\n   * @description\n   * The `$translate` service is the actual core of angular-translate. It expects a translation id\n   * and optional interpolate parameters to translate contents.\n   *\n   * <pre>\n   *  $translate('HEADLINE_TEXT').then(function (translation) {\n   *    $scope.translatedText = translation;\n   *  });\n   * </pre>\n   *\n   * @param {string|array} translationId A token which represents a translation id\n   *                                     This can be optionally an array of translation ids which\n   *                                     results that the function returns an object where each key\n   *                                     is the translation id and the value the translation.\n   * @param {object=} [interpolateParams={}] An object hash for dynamic values\n   * @param {string=} [interpolationId=undefined] The id of the interpolation to use (use default unless set via useInterpolation())\n   * @param {string=} [defaultTranslationText=undefined] the optional default translation text that is written as\n   *                                        as default text in case it is not found in any configured language\n   * @param {string=} [forceLanguage=false] A language to be used instead of the current language\n   * @param {string=} [sanitizeStrategy=undefined] force sanitize strategy for this call instead of using the configured one (use default unless set)\n   * @returns {object} promise\n   */\n  this.$get = ['$log', '$injector', '$rootScope', '$q', function ($log, $injector, $rootScope, $q) {\n\n    var Storage,\n      defaultInterpolator = $injector.get($interpolationFactory || '$translateDefaultInterpolation'),\n      pendingLoader = false,\n      interpolatorHashMap = {},\n      langPromises = {},\n      fallbackIndex,\n      startFallbackIteration;\n\n    var $translate = function (translationId, interpolateParams, interpolationId, defaultTranslationText, forceLanguage, sanitizeStrategy) {\n      if (!$uses && $preferredLanguage) {\n        $uses = $preferredLanguage;\n      }\n      var uses = (forceLanguage && forceLanguage !== $uses) ? // we don't want to re-negotiate $uses\n        (negotiateLocale(forceLanguage) || forceLanguage) : $uses;\n\n      // Check forceLanguage is present\n      if (forceLanguage) {\n        loadTranslationsIfMissing(forceLanguage);\n      }\n\n      // Duck detection: If the first argument is an array, a bunch of translations was requested.\n      // The result is an object.\n      if (angular.isArray(translationId)) {\n        // Inspired by Q.allSettled by Kris Kowal\n        // https://github.com/kriskowal/q/blob/b0fa72980717dc202ffc3cbf03b936e10ebbb9d7/q.js#L1553-1563\n        // This transforms all promises regardless resolved or rejected\n        var translateAll = function (translationIds) {\n          var results = {}; // storing the actual results\n          var promises = []; // promises to wait for\n          // Wraps the promise a) being always resolved and b) storing the link id->value\n          var translate = function (translationId) {\n            var deferred = $q.defer();\n            var regardless = function (value) {\n              results[translationId] = value;\n              deferred.resolve([translationId, value]);\n            };\n            // we don't care whether the promise was resolved or rejected; just store the values\n            $translate(translationId, interpolateParams, interpolationId, defaultTranslationText, forceLanguage, sanitizeStrategy).then(regardless, regardless);\n            return deferred.promise;\n          };\n          for (var i = 0, c = translationIds.length; i < c; i++) {\n            promises.push(translate(translationIds[i]));\n          }\n          // wait for all (including storing to results)\n          return $q.all(promises).then(function () {\n            // return the results\n            return results;\n          });\n        };\n        return translateAll(translationId);\n      }\n\n      var deferred = $q.defer();\n\n      // trim off any whitespace\n      if (translationId) {\n        translationId = trim.apply(translationId);\n      } else {\n        throw new TypeError('translationId must be a not empty string');\n      }\n\n      var promiseToWaitFor = (function () {\n        var promise = langPromises[uses] || langPromises[$preferredLanguage];\n\n        fallbackIndex = 0;\n\n        if ($storageFactory && !promise) {\n          // looks like there's no pending promise for $preferredLanguage or\n          // $uses. Maybe there's one pending for a language that comes from\n          // storage.\n          var langKey = Storage.get($storageKey);\n          promise = langPromises[langKey];\n\n          if ($fallbackLanguage && $fallbackLanguage.length) {\n            var index = indexOf($fallbackLanguage, langKey);\n            // maybe the language from storage is also defined as fallback language\n            // we increase the fallback language index to not search in that language\n            // as fallback, since it's probably the first used language\n            // in that case the index starts after the first element\n            fallbackIndex = (index === 0) ? 1 : 0;\n\n            // but we can make sure to ALWAYS fallback to preferred language at least\n            if (indexOf($fallbackLanguage, $preferredLanguage) < 0) {\n              $fallbackLanguage.push($preferredLanguage);\n            }\n          }\n        }\n        return promise;\n      }());\n\n      if (!promiseToWaitFor) {\n        // no promise to wait for? okay. Then there's no loader registered\n        // nor is a one pending for language that comes from storage.\n        // We can just translate.\n        determineTranslation(translationId, interpolateParams, interpolationId, defaultTranslationText, uses, sanitizeStrategy).then(deferred.resolve, deferred.reject);\n      } else {\n        var promiseResolved = function () {\n          // $uses may have changed while waiting\n          if (!forceLanguage) {\n            uses = $uses;\n          }\n          determineTranslation(translationId, interpolateParams, interpolationId, defaultTranslationText, uses, sanitizeStrategy).then(deferred.resolve, deferred.reject);\n        };\n        promiseResolved.displayName = 'promiseResolved';\n\n        promiseToWaitFor['finally'](promiseResolved)['catch'](angular.noop); // we don't care about errors here, already handled\n      }\n      return deferred.promise;\n    };\n\n    /**\n     * @name applyNotFoundIndicators\n     * @private\n     *\n     * @description\n     * Applies not fount indicators to given translation id, if needed.\n     * This function gets only executed, if a translation id doesn't exist,\n     * which is why a translation id is expected as argument.\n     *\n     * @param {string} translationId Translation id.\n     * @returns {string} Same as given translation id but applied with not found\n     * indicators.\n     */\n    var applyNotFoundIndicators = function (translationId) {\n      // applying notFoundIndicators\n      if ($notFoundIndicatorLeft) {\n        translationId = [$notFoundIndicatorLeft, translationId].join(' ');\n      }\n      if ($notFoundIndicatorRight) {\n        translationId = [translationId, $notFoundIndicatorRight].join(' ');\n      }\n      return translationId;\n    };\n\n    /**\n     * @name useLanguage\n     * @private\n     *\n     * @description\n     * Makes actual use of a language by setting a given language key as used\n     * language and informs registered interpolators to also use the given\n     * key as locale.\n     *\n     * @param {string} key Locale key.\n     */\n    var useLanguage = function (key) {\n      $uses = key;\n\n      // make sure to store new language key before triggering success event\n      if ($storageFactory) {\n        Storage.put($translate.storageKey(), $uses);\n      }\n\n      $rootScope.$emit('$translateChangeSuccess', {language : key});\n\n      // inform default interpolator\n      defaultInterpolator.setLocale($uses);\n\n      var eachInterpolator = function (interpolator, id) {\n        interpolatorHashMap[id].setLocale($uses);\n      };\n      eachInterpolator.displayName = 'eachInterpolatorLocaleSetter';\n\n      // inform all others too!\n      angular.forEach(interpolatorHashMap, eachInterpolator);\n      $rootScope.$emit('$translateChangeEnd', {language : key});\n    };\n\n    /**\n     * @name loadAsync\n     * @private\n     *\n     * @description\n     * Kicks off registered async loader using `$injector` and applies existing\n     * loader options. When resolved, it updates translation tables accordingly\n     * or rejects with given language key.\n     *\n     * @param {string} key Language key.\n     * @return {Promise} A promise.\n     */\n    var loadAsync = function (key) {\n      if (!key) {\n        throw 'No language key specified for loading.';\n      }\n\n      var deferred = $q.defer();\n\n      $rootScope.$emit('$translateLoadingStart', {language : key});\n      pendingLoader = true;\n\n      var cache = loaderCache;\n      if (typeof(cache) === 'string') {\n        // getting on-demand instance of loader\n        cache = $injector.get(cache);\n      }\n\n      var loaderOptions = angular.extend({}, $loaderOptions, {\n        key : key,\n        $http : angular.extend({}, {\n          cache : cache\n        }, $loaderOptions.$http)\n      });\n\n      var onLoaderSuccess = function (data) {\n        var translationTable = {};\n        $rootScope.$emit('$translateLoadingSuccess', {language : key});\n\n        if (angular.isArray(data)) {\n          angular.forEach(data, function (table) {\n            angular.extend(translationTable, flatObject(table));\n          });\n        } else {\n          angular.extend(translationTable, flatObject(data));\n        }\n        pendingLoader = false;\n        deferred.resolve({\n          key : key,\n          table : translationTable\n        });\n        $rootScope.$emit('$translateLoadingEnd', {language : key});\n      };\n      onLoaderSuccess.displayName = 'onLoaderSuccess';\n\n      var onLoaderError = function (key) {\n        $rootScope.$emit('$translateLoadingError', {language : key});\n        deferred.reject(key);\n        $rootScope.$emit('$translateLoadingEnd', {language : key});\n      };\n      onLoaderError.displayName = 'onLoaderError';\n\n      $injector.get($loaderFactory)(loaderOptions)\n        .then(onLoaderSuccess, onLoaderError);\n\n      return deferred.promise;\n    };\n\n    if ($storageFactory) {\n      Storage = $injector.get($storageFactory);\n\n      if (!Storage.get || !Storage.put) {\n        throw new Error('Couldn\\'t use storage \\'' + $storageFactory + '\\', missing get() or put() method!');\n      }\n    }\n\n    // if we have additional interpolations that were added via\n    // $translateProvider.addInterpolation(), we have to map'em\n    if ($interpolatorFactories.length) {\n      var eachInterpolationFactory = function (interpolatorFactory) {\n        var interpolator = $injector.get(interpolatorFactory);\n        // setting initial locale for each interpolation service\n        interpolator.setLocale($preferredLanguage || $uses);\n        // make'em recognizable through id\n        interpolatorHashMap[interpolator.getInterpolationIdentifier()] = interpolator;\n      };\n      eachInterpolationFactory.displayName = 'interpolationFactoryAdder';\n\n      angular.forEach($interpolatorFactories, eachInterpolationFactory);\n    }\n\n    /**\n     * @name getTranslationTable\n     * @private\n     *\n     * @description\n     * Returns a promise that resolves to the translation table\n     * or is rejected if an error occurred.\n     *\n     * @param langKey\n     * @returns {Q.promise}\n     */\n    var getTranslationTable = function (langKey) {\n      var deferred = $q.defer();\n      if (Object.prototype.hasOwnProperty.call($translationTable, langKey)) {\n        deferred.resolve($translationTable[langKey]);\n      } else if (langPromises[langKey]) {\n        var onResolve = function (data) {\n          translations(data.key, data.table);\n          deferred.resolve(data.table);\n        };\n        onResolve.displayName = 'translationTableResolver';\n        langPromises[langKey].then(onResolve, deferred.reject);\n      } else {\n        deferred.reject();\n      }\n      return deferred.promise;\n    };\n\n    /**\n     * @name getFallbackTranslation\n     * @private\n     *\n     * @description\n     * Returns a promise that will resolve to the translation\n     * or be rejected if no translation was found for the language.\n     * This function is currently only used for fallback language translation.\n     *\n     * @param langKey The language to translate to.\n     * @param translationId\n     * @param interpolateParams\n     * @param Interpolator\n     * @param sanitizeStrategy\n     * @returns {Q.promise}\n     */\n    var getFallbackTranslation = function (langKey, translationId, interpolateParams, Interpolator, sanitizeStrategy) {\n      var deferred = $q.defer();\n\n      var onResolve = function (translationTable) {\n        if (Object.prototype.hasOwnProperty.call(translationTable, translationId) && translationTable[translationId] !== null) {\n          Interpolator.setLocale(langKey);\n          var translation = translationTable[translationId];\n          if (translation.substr(0, 2) === '@:') {\n            getFallbackTranslation(langKey, translation.substr(2), interpolateParams, Interpolator, sanitizeStrategy)\n              .then(deferred.resolve, deferred.reject);\n          } else {\n            var interpolatedValue = Interpolator.interpolate(translationTable[translationId], interpolateParams, 'service', sanitizeStrategy, translationId);\n            interpolatedValue = applyPostProcessing(translationId, translationTable[translationId], interpolatedValue, interpolateParams, langKey);\n\n            deferred.resolve(interpolatedValue);\n\n          }\n          Interpolator.setLocale($uses);\n        } else {\n          deferred.reject();\n        }\n      };\n      onResolve.displayName = 'fallbackTranslationResolver';\n\n      getTranslationTable(langKey).then(onResolve, deferred.reject);\n\n      return deferred.promise;\n    };\n\n    /**\n     * @name getFallbackTranslationInstant\n     * @private\n     *\n     * @description\n     * Returns a translation\n     * This function is currently only used for fallback language translation.\n     *\n     * @param langKey The language to translate to.\n     * @param translationId\n     * @param interpolateParams\n     * @param Interpolator\n     * @param sanitizeStrategy sanitize strategy override\n     *\n     * @returns {string} translation\n     */\n    var getFallbackTranslationInstant = function (langKey, translationId, interpolateParams, Interpolator, sanitizeStrategy) {\n      var result, translationTable = $translationTable[langKey];\n\n      if (translationTable && Object.prototype.hasOwnProperty.call(translationTable, translationId) && translationTable[translationId] !== null) {\n        Interpolator.setLocale(langKey);\n        result = Interpolator.interpolate(translationTable[translationId], interpolateParams, 'filter', sanitizeStrategy, translationId);\n        result = applyPostProcessing(translationId, translationTable[translationId], result, interpolateParams, langKey, sanitizeStrategy);\n        // workaround for TrustedValueHolderType\n        if (!angular.isString(result) && angular.isFunction(result.$$unwrapTrustedValue)) {\n          var result2 = result.$$unwrapTrustedValue();\n          if (result2.substr(0, 2) === '@:') {\n            return getFallbackTranslationInstant(langKey, result2.substr(2), interpolateParams, Interpolator, sanitizeStrategy);\n          }\n        } else if (result.substr(0, 2) === '@:') {\n          return getFallbackTranslationInstant(langKey, result.substr(2), interpolateParams, Interpolator, sanitizeStrategy);\n        }\n        Interpolator.setLocale($uses);\n      }\n\n      return result;\n    };\n\n\n    /**\n     * @name translateByHandler\n     * @private\n     *\n     * Translate by missing translation handler.\n     *\n     * @param translationId\n     * @param interpolateParams\n     * @param defaultTranslationText\n     * @param sanitizeStrategy sanitize strategy override\n     *\n     * @returns translation created by $missingTranslationHandler or translationId is $missingTranslationHandler is\n     * absent\n     */\n    var translateByHandler = function (translationId, interpolateParams, defaultTranslationText, sanitizeStrategy) {\n      // If we have a handler factory - we might also call it here to determine if it provides\n      // a default text for a translationid that can't be found anywhere in our tables\n      if ($missingTranslationHandlerFactory) {\n        return $injector.get($missingTranslationHandlerFactory)(translationId, $uses, interpolateParams, defaultTranslationText, sanitizeStrategy);\n      } else {\n        return translationId;\n      }\n    };\n\n    /**\n     * @name resolveForFallbackLanguage\n     * @private\n     *\n     * Recursive helper function for fallbackTranslation that will sequentially look\n     * for a translation in the fallbackLanguages starting with fallbackLanguageIndex.\n     *\n     * @param fallbackLanguageIndex\n     * @param translationId\n     * @param interpolateParams\n     * @param Interpolator\n     * @param defaultTranslationText\n     * @param sanitizeStrategy\n     * @returns {Q.promise} Promise that will resolve to the translation.\n     */\n    var resolveForFallbackLanguage = function (fallbackLanguageIndex, translationId, interpolateParams, Interpolator, defaultTranslationText, sanitizeStrategy) {\n      var deferred = $q.defer();\n\n      if (fallbackLanguageIndex < $fallbackLanguage.length) {\n        var langKey = $fallbackLanguage[fallbackLanguageIndex];\n        getFallbackTranslation(langKey, translationId, interpolateParams, Interpolator, sanitizeStrategy).then(\n          function (data) {\n            deferred.resolve(data);\n          },\n          function () {\n            // Look in the next fallback language for a translation.\n            // It delays the resolving by passing another promise to resolve.\n            return resolveForFallbackLanguage(fallbackLanguageIndex + 1, translationId, interpolateParams, Interpolator, defaultTranslationText, sanitizeStrategy).then(deferred.resolve, deferred.reject);\n          }\n        );\n      } else {\n        // No translation found in any fallback language\n        // if a default translation text is set in the directive, then return this as a result\n        if (defaultTranslationText) {\n          deferred.resolve(defaultTranslationText);\n        } else {\n          var missingTranslationHandlerTranslation = translateByHandler(translationId, interpolateParams, defaultTranslationText);\n\n          // if no default translation is set and an error handler is defined, send it to the handler\n          // and then return the result if it isn't undefined\n          if ($missingTranslationHandlerFactory && missingTranslationHandlerTranslation) {\n            deferred.resolve(missingTranslationHandlerTranslation);\n          } else {\n            deferred.reject(applyNotFoundIndicators(translationId));\n          }\n        }\n      }\n      return deferred.promise;\n    };\n\n    /**\n     * @name resolveForFallbackLanguageInstant\n     * @private\n     *\n     * Recursive helper function for fallbackTranslation that will sequentially look\n     * for a translation in the fallbackLanguages starting with fallbackLanguageIndex.\n     *\n     * @param fallbackLanguageIndex\n     * @param translationId\n     * @param interpolateParams\n     * @param Interpolator\n     * @param sanitizeStrategy\n     * @returns {string} translation\n     */\n    var resolveForFallbackLanguageInstant = function (fallbackLanguageIndex, translationId, interpolateParams, Interpolator, sanitizeStrategy) {\n      var result;\n\n      if (fallbackLanguageIndex < $fallbackLanguage.length) {\n        var langKey = $fallbackLanguage[fallbackLanguageIndex];\n        result = getFallbackTranslationInstant(langKey, translationId, interpolateParams, Interpolator, sanitizeStrategy);\n        if (!result && result !== '') {\n          result = resolveForFallbackLanguageInstant(fallbackLanguageIndex + 1, translationId, interpolateParams, Interpolator);\n        }\n      }\n      return result;\n    };\n\n    /**\n     * Translates with the usage of the fallback languages.\n     *\n     * @param translationId\n     * @param interpolateParams\n     * @param Interpolator\n     * @param defaultTranslationText\n     * @param sanitizeStrategy\n     * @returns {Q.promise} Promise, that resolves to the translation.\n     */\n    var fallbackTranslation = function (translationId, interpolateParams, Interpolator, defaultTranslationText, sanitizeStrategy) {\n      // Start with the fallbackLanguage with index 0\n      return resolveForFallbackLanguage((startFallbackIteration > 0 ? startFallbackIteration : fallbackIndex), translationId, interpolateParams, Interpolator, defaultTranslationText, sanitizeStrategy);\n    };\n\n    /**\n     * Translates with the usage of the fallback languages.\n     *\n     * @param translationId\n     * @param interpolateParams\n     * @param Interpolator\n     * @param sanitizeStrategy\n     * @returns {String} translation\n     */\n    var fallbackTranslationInstant = function (translationId, interpolateParams, Interpolator, sanitizeStrategy) {\n      // Start with the fallbackLanguage with index 0\n      return resolveForFallbackLanguageInstant((startFallbackIteration > 0 ? startFallbackIteration : fallbackIndex), translationId, interpolateParams, Interpolator, sanitizeStrategy);\n    };\n\n    var determineTranslation = function (translationId, interpolateParams, interpolationId, defaultTranslationText, uses, sanitizeStrategy) {\n\n      var deferred = $q.defer();\n\n      var table = uses ? $translationTable[uses] : $translationTable,\n        Interpolator = (interpolationId) ? interpolatorHashMap[interpolationId] : defaultInterpolator;\n\n      // if the translation id exists, we can just interpolate it\n      if (table && Object.prototype.hasOwnProperty.call(table, translationId) && table[translationId] !== null) {\n        var translation = table[translationId];\n\n        // If using link, rerun $translate with linked translationId and return it\n        if (translation.substr(0, 2) === '@:') {\n\n          $translate(translation.substr(2), interpolateParams, interpolationId, defaultTranslationText, uses, sanitizeStrategy)\n            .then(deferred.resolve, deferred.reject);\n        } else {\n          //\n          var resolvedTranslation = Interpolator.interpolate(translation, interpolateParams, 'service', sanitizeStrategy, translationId);\n          resolvedTranslation = applyPostProcessing(translationId, translation, resolvedTranslation, interpolateParams, uses);\n          deferred.resolve(resolvedTranslation);\n        }\n      } else {\n        var missingTranslationHandlerTranslation;\n        // for logging purposes only (as in $translateMissingTranslationHandlerLog), value is not returned to promise\n        if ($missingTranslationHandlerFactory && !pendingLoader) {\n          missingTranslationHandlerTranslation = translateByHandler(translationId, interpolateParams, defaultTranslationText);\n        }\n\n        // since we couldn't translate the inital requested translation id,\n        // we try it now with one or more fallback languages, if fallback language(s) is\n        // configured.\n        if (uses && $fallbackLanguage && $fallbackLanguage.length) {\n          fallbackTranslation(translationId, interpolateParams, Interpolator, defaultTranslationText, sanitizeStrategy)\n            .then(function (translation) {\n              deferred.resolve(translation);\n            }, function (_translationId) {\n              deferred.reject(applyNotFoundIndicators(_translationId));\n            });\n        } else if ($missingTranslationHandlerFactory && !pendingLoader && missingTranslationHandlerTranslation) {\n          // looks like the requested translation id doesn't exists.\n          // Now, if there is a registered handler for missing translations and no\n          // asyncLoader is pending, we execute the handler\n          if (defaultTranslationText) {\n            deferred.resolve(defaultTranslationText);\n          } else {\n            deferred.resolve(missingTranslationHandlerTranslation);\n          }\n        } else {\n          if (defaultTranslationText) {\n            deferred.resolve(defaultTranslationText);\n          } else {\n            deferred.reject(applyNotFoundIndicators(translationId));\n          }\n        }\n      }\n      return deferred.promise;\n    };\n\n    var determineTranslationInstant = function (translationId, interpolateParams, interpolationId, uses, sanitizeStrategy) {\n\n      var result, table = uses ? $translationTable[uses] : $translationTable,\n        Interpolator = defaultInterpolator;\n\n      // if the interpolation id exists use custom interpolator\n      if (interpolatorHashMap && Object.prototype.hasOwnProperty.call(interpolatorHashMap, interpolationId)) {\n        Interpolator = interpolatorHashMap[interpolationId];\n      }\n\n      // if the translation id exists, we can just interpolate it\n      if (table && Object.prototype.hasOwnProperty.call(table, translationId) && table[translationId] !== null) {\n        var translation = table[translationId];\n\n        // If using link, rerun $translate with linked translationId and return it\n        if (translation.substr(0, 2) === '@:') {\n          result = determineTranslationInstant(translation.substr(2), interpolateParams, interpolationId, uses, sanitizeStrategy);\n        } else {\n          result = Interpolator.interpolate(translation, interpolateParams, 'filter', sanitizeStrategy, translationId);\n          result = applyPostProcessing(translationId, translation, result, interpolateParams, uses, sanitizeStrategy);\n        }\n      } else {\n        var missingTranslationHandlerTranslation;\n        // for logging purposes only (as in $translateMissingTranslationHandlerLog), value is not returned to promise\n        if ($missingTranslationHandlerFactory && !pendingLoader) {\n          missingTranslationHandlerTranslation = translateByHandler(translationId, interpolateParams, sanitizeStrategy);\n        }\n\n        // since we couldn't translate the inital requested translation id,\n        // we try it now with one or more fallback languages, if fallback language(s) is\n        // configured.\n        if (uses && $fallbackLanguage && $fallbackLanguage.length) {\n          fallbackIndex = 0;\n          result = fallbackTranslationInstant(translationId, interpolateParams, Interpolator, sanitizeStrategy);\n        } else if ($missingTranslationHandlerFactory && !pendingLoader && missingTranslationHandlerTranslation) {\n          // looks like the requested translation id doesn't exists.\n          // Now, if there is a registered handler for missing translations and no\n          // asyncLoader is pending, we execute the handler\n          result = missingTranslationHandlerTranslation;\n        } else {\n          result = applyNotFoundIndicators(translationId);\n        }\n      }\n\n      return result;\n    };\n\n    var clearNextLangAndPromise = function (key) {\n      if ($nextLang === key) {\n        $nextLang = undefined;\n      }\n      langPromises[key] = undefined;\n    };\n\n    var applyPostProcessing = function (translationId, translation, resolvedTranslation, interpolateParams, uses, sanitizeStrategy) {\n      var fn = postProcessFn;\n\n      if (fn) {\n\n        if (typeof(fn) === 'string') {\n          // getting on-demand instance\n          fn = $injector.get(fn);\n        }\n        if (fn) {\n          return fn(translationId, translation, resolvedTranslation, interpolateParams, uses, sanitizeStrategy);\n        }\n      }\n\n      return resolvedTranslation;\n    };\n\n    var loadTranslationsIfMissing = function (key) {\n      if (!$translationTable[key] && $loaderFactory && !langPromises[key]) {\n        langPromises[key] = loadAsync(key).then(function (translation) {\n          translations(translation.key, translation.table);\n          return translation;\n        });\n      }\n    };\n\n    /**\n     * @ngdoc function\n     * @name pascalprecht.translate.$translate#preferredLanguage\n     * @methodOf pascalprecht.translate.$translate\n     *\n     * @description\n     * Returns the language key for the preferred language.\n     *\n     * @param {string} langKey language String or Array to be used as preferredLanguage (changing at runtime)\n     *\n     * @return {string} preferred language key\n     */\n    $translate.preferredLanguage = function (langKey) {\n      if (langKey) {\n        setupPreferredLanguage(langKey);\n      }\n      return $preferredLanguage;\n    };\n\n    /**\n     * @ngdoc function\n     * @name pascalprecht.translate.$translate#cloakClassName\n     * @methodOf pascalprecht.translate.$translate\n     *\n     * @description\n     * Returns the configured class name for `translate-cloak` directive.\n     *\n     * @return {string} cloakClassName\n     */\n    $translate.cloakClassName = function () {\n      return $cloakClassName;\n    };\n\n    /**\n     * @ngdoc function\n     * @name pascalprecht.translate.$translate#allowNamespaces\n     * @methodOf pascalprecht.translate.$translate\n     *\n     * @description\n     * Returns if namespaces are enabled\n     *\n     * @return {boolean} allowNamespaces value\n     */\n    $translate.allowNamespaces = function () {\n      return $allowNamespaces;\n    };\n\n    /**\n     * @ngdoc function\n     * @name pascalprecht.translate.$translate#nestedObjectDelimeter\n     * @methodOf pascalprecht.translate.$translate\n     *\n     * @description\n     * Returns the configured delimiter for nested namespaces.\n     *\n     * @return {string} nestedObjectDelimeter\n     */\n    $translate.nestedObjectDelimeter = function () {\n      return $nestedObjectDelimeter;\n    };\n\n    /**\n     * @ngdoc function\n     * @name pascalprecht.translate.$translate#fallbackLanguage\n     * @methodOf pascalprecht.translate.$translate\n     *\n     * @description\n     * Returns the language key for the fallback languages or sets a new fallback stack.\n     * It is recommended to call this before {@link pascalprecht.translate.$translateProvider#preferredLanguage preferredLanguage()}.\n     *\n     * @param {string=} langKey language String or Array of fallback languages to be used (to change stack at runtime)\n     *\n     * @return {string||array} fallback language key\n     */\n    $translate.fallbackLanguage = function (langKey) {\n      if (langKey !== undefined && langKey !== null) {\n        fallbackStack(langKey);\n\n        // as we might have an async loader initiated and a new translation language might have been defined\n        // we need to add the promise to the stack also. So - iterate.\n        if ($loaderFactory) {\n          if ($fallbackLanguage && $fallbackLanguage.length) {\n            for (var i = 0, len = $fallbackLanguage.length; i < len; i++) {\n              if (!langPromises[$fallbackLanguage[i]]) {\n                langPromises[$fallbackLanguage[i]] = loadAsync($fallbackLanguage[i]);\n              }\n            }\n          }\n        }\n        $translate.use($translate.use());\n      }\n      if ($fallbackWasString) {\n        return $fallbackLanguage[0];\n      } else {\n        return $fallbackLanguage;\n      }\n\n    };\n\n    /**\n     * @ngdoc function\n     * @name pascalprecht.translate.$translate#useFallbackLanguage\n     * @methodOf pascalprecht.translate.$translate\n     *\n     * @description\n     * Sets the first key of the fallback language stack to be used for translation.\n     * Therefore all languages in the fallback array BEFORE this key will be skipped!\n     *\n     * @param {string=} langKey Contains the langKey the iteration shall start with. Set to false if you want to\n     * get back to the whole stack\n     */\n    $translate.useFallbackLanguage = function (langKey) {\n      if (langKey !== undefined && langKey !== null) {\n        if (!langKey) {\n          startFallbackIteration = 0;\n        } else {\n          var langKeyPosition = indexOf($fallbackLanguage, langKey);\n          if (langKeyPosition > -1) {\n            startFallbackIteration = langKeyPosition;\n          }\n        }\n\n      }\n\n    };\n\n    /**\n     * @ngdoc function\n     * @name pascalprecht.translate.$translate#proposedLanguage\n     * @methodOf pascalprecht.translate.$translate\n     *\n     * @description\n     * Returns the language key of language that is currently loaded asynchronously.\n     *\n     * @return {string} language key\n     */\n    $translate.proposedLanguage = function () {\n      return $nextLang;\n    };\n\n    /**\n     * @ngdoc function\n     * @name pascalprecht.translate.$translate#storage\n     * @methodOf pascalprecht.translate.$translate\n     *\n     * @description\n     * Returns registered storage.\n     *\n     * @return {object} Storage\n     */\n    $translate.storage = function () {\n      return Storage;\n    };\n\n    /**\n     * @ngdoc function\n     * @name pascalprecht.translate.$translate#negotiateLocale\n     * @methodOf pascalprecht.translate.$translate\n     *\n     * @description\n     * Returns a language key based on available languages and language aliases. If a\n     * language key cannot be resolved, returns undefined.\n     *\n     * If no or a falsy key is given, returns undefined.\n     *\n     * @param {string} [key] Language key\n     * @return {string|undefined} Language key or undefined if no language key is found.\n     */\n    $translate.negotiateLocale = negotiateLocale;\n\n    /**\n     * @ngdoc function\n     * @name pascalprecht.translate.$translate#use\n     * @methodOf pascalprecht.translate.$translate\n     *\n     * @description\n     * Tells angular-translate which language to use by given language key. This method is\n     * used to change language at runtime. It also takes care of storing the language\n     * key in a configured store to let your app remember the choosed language.\n     *\n     * When trying to 'use' a language which isn't available it tries to load it\n     * asynchronously with registered loaders.\n     *\n     * Returns promise object with loaded language file data or string of the currently used language.\n     *\n     * If no or a falsy key is given it returns the currently used language key.\n     * The returned string will be ```undefined``` if setting up $translate hasn't finished.\n     * @example\n     * $translate.use(\"en_US\").then(function(data){\n       *   $scope.text = $translate(\"HELLO\");\n       * });\n     *\n     * @param {string=} key Language key\n     * @return {object|string} Promise with loaded language data or the language key if a falsy param was given.\n     */\n    $translate.use = function (key) {\n      if (!key) {\n        return $uses;\n      }\n\n      var deferred = $q.defer();\n      deferred.promise.then(null, angular.noop); // AJS \"Possibly unhandled rejection\"\n\n      $rootScope.$emit('$translateChangeStart', {language : key});\n\n      // Try to get the aliased language key\n      var aliasedKey = negotiateLocale(key);\n      // Ensure only registered language keys will be loaded\n      if ($availableLanguageKeys.length > 0 && !aliasedKey) {\n        return $q.reject(key);\n      }\n\n      if (aliasedKey) {\n        key = aliasedKey;\n      }\n\n      // if there isn't a translation table for the language we've requested,\n      // we load it asynchronously\n      $nextLang = key;\n      if (($forceAsyncReloadEnabled || !$translationTable[key]) && $loaderFactory && !langPromises[key]) {\n        langPromises[key] = loadAsync(key).then(function (translation) {\n          translations(translation.key, translation.table);\n          deferred.resolve(translation.key);\n          if ($nextLang === key) {\n            useLanguage(translation.key);\n          }\n          return translation;\n        }, function (key) {\n          $rootScope.$emit('$translateChangeError', {language : key});\n          deferred.reject(key);\n          $rootScope.$emit('$translateChangeEnd', {language : key});\n          return $q.reject(key);\n        });\n        langPromises[key]['finally'](function () {\n          clearNextLangAndPromise(key);\n        })['catch'](angular.noop); // we don't care about errors (clearing)\n      } else if (langPromises[key]) {\n        // we are already loading this asynchronously\n        // resolve our new deferred when the old langPromise is resolved\n        langPromises[key].then(function (translation) {\n          if ($nextLang === translation.key) {\n            useLanguage(translation.key);\n          }\n          deferred.resolve(translation.key);\n          return translation;\n        }, function (key) {\n          // find first available fallback language if that request has failed\n          if (!$uses && $fallbackLanguage && $fallbackLanguage.length > 0 && $fallbackLanguage[0] !== key) {\n            return $translate.use($fallbackLanguage[0]).then(deferred.resolve, deferred.reject);\n          } else {\n            return deferred.reject(key);\n          }\n        });\n      } else {\n        deferred.resolve(key);\n        useLanguage(key);\n      }\n\n      return deferred.promise;\n    };\n\n    /**\n     * @ngdoc function\n     * @name pascalprecht.translate.$translate#resolveClientLocale\n     * @methodOf pascalprecht.translate.$translate\n     *\n     * @description\n     * This returns the current browser/client's language key. The result is processed with the configured uniform tag resolver.\n     *\n     * @returns {string} the current client/browser language key\n     */\n    $translate.resolveClientLocale = function () {\n      return getLocale();\n    };\n\n    /**\n     * @ngdoc function\n     * @name pascalprecht.translate.$translate#storageKey\n     * @methodOf pascalprecht.translate.$translate\n     *\n     * @description\n     * Returns the key for the storage.\n     *\n     * @return {string} storage key\n     */\n    $translate.storageKey = function () {\n      return storageKey();\n    };\n\n    /**\n     * @ngdoc function\n     * @name pascalprecht.translate.$translate#isPostCompilingEnabled\n     * @methodOf pascalprecht.translate.$translate\n     *\n     * @description\n     * Returns whether post compiling is enabled or not\n     *\n     * @return {bool} storage key\n     */\n    $translate.isPostCompilingEnabled = function () {\n      return $postCompilingEnabled;\n    };\n\n    /**\n     * @ngdoc function\n     * @name pascalprecht.translate.$translate#isForceAsyncReloadEnabled\n     * @methodOf pascalprecht.translate.$translate\n     *\n     * @description\n     * Returns whether force async reload is enabled or not\n     *\n     * @return {boolean} forceAsyncReload value\n     */\n    $translate.isForceAsyncReloadEnabled = function () {\n      return $forceAsyncReloadEnabled;\n    };\n\n    /**\n     * @ngdoc function\n     * @name pascalprecht.translate.$translate#isKeepContent\n     * @methodOf pascalprecht.translate.$translate\n     *\n     * @description\n     * Returns whether keepContent or not\n     *\n     * @return {boolean} keepContent value\n     */\n    $translate.isKeepContent = function () {\n      return $keepContent;\n    };\n\n    /**\n     * @ngdoc function\n     * @name pascalprecht.translate.$translate#refresh\n     * @methodOf pascalprecht.translate.$translate\n     *\n     * @description\n     * Refreshes a translation table pointed by the given langKey. If langKey is not specified,\n     * the module will drop all existent translation tables and load new version of those which\n     * are currently in use.\n     *\n     * Refresh means that the module will drop target translation table and try to load it again.\n     *\n     * In case there are no loaders registered the refresh() method will throw an Error.\n     *\n     * If the module is able to refresh translation tables refresh() method will broadcast\n     * $translateRefreshStart and $translateRefreshEnd events.\n     *\n     * @example\n     * // this will drop all currently existent translation tables and reload those which are\n     * // currently in use\n     * $translate.refresh();\n     * // this will refresh a translation table for the en_US language\n     * $translate.refresh('en_US');\n     *\n     * @param {string} langKey A language key of the table, which has to be refreshed\n     *\n     * @return {promise} Promise, which will be resolved in case a translation tables refreshing\n     * process is finished successfully, and reject if not.\n     */\n    $translate.refresh = function (langKey) {\n      if (!$loaderFactory) {\n        throw new Error('Couldn\\'t refresh translation table, no loader registered!');\n      }\n\n      $rootScope.$emit('$translateRefreshStart', {language : langKey});\n\n      var deferred = $q.defer(), updatedLanguages = {};\n\n      //private helper\n      function loadNewData(languageKey) {\n        var promise = loadAsync(languageKey);\n        //update the load promise cache for this language\n        langPromises[languageKey] = promise;\n        //register a data handler for the promise\n        promise.then(function (data) {\n            //clear the cache for this language\n            $translationTable[languageKey] = {};\n            //add the new data for this language\n            translations(languageKey, data.table);\n            //track that we updated this language\n            updatedLanguages[languageKey] = true;\n          },\n          //handle rejection to appease the $q validation\n          angular.noop);\n        return promise;\n      }\n\n      //set up post-processing\n      deferred.promise.then(\n        function () {\n          for (var key in $translationTable) {\n            if ($translationTable.hasOwnProperty(key)) {\n              //delete cache entries that were not updated\n              if (!(key in updatedLanguages)) {\n                delete $translationTable[key];\n              }\n            }\n          }\n          if ($uses) {\n            useLanguage($uses);\n          }\n        },\n        //handle rejection to appease the $q validation\n        angular.noop\n      )['finally'](\n        function () {\n          $rootScope.$emit('$translateRefreshEnd', {language : langKey});\n        }\n      );\n\n      if (!langKey) {\n        // if there's no language key specified we refresh ALL THE THINGS!\n        var languagesToReload = $fallbackLanguage && $fallbackLanguage.slice() || [];\n        if ($uses && languagesToReload.indexOf($uses) === -1) {\n          languagesToReload.push($uses);\n        }\n        $q.all(languagesToReload.map(loadNewData)).then(deferred.resolve, deferred.reject);\n\n      } else if ($translationTable[langKey]) {\n        //just refresh the specified language cache\n        loadNewData(langKey).then(deferred.resolve, deferred.reject);\n\n      } else {\n        deferred.reject();\n      }\n\n      return deferred.promise;\n    };\n\n    /**\n     * @ngdoc function\n     * @name pascalprecht.translate.$translate#instant\n     * @methodOf pascalprecht.translate.$translate\n     *\n     * @description\n     * Returns a translation instantly from the internal state of loaded translation. All rules\n     * regarding the current language, the preferred language of even fallback languages will be\n     * used except any promise handling. If a language was not found, an asynchronous loading\n     * will be invoked in the background.\n     *\n     * @param {string|array} translationId A token which represents a translation id\n     *                                     This can be optionally an array of translation ids which\n     *                                     results that the function's promise returns an object where\n     *                                     each key is the translation id and the value the translation.\n     * @param {object=} [interpolateParams={}] Params\n     * @param {string=} [interpolationId=undefined] The id of the interpolation to use (use default unless set via useInterpolation())\n     * @param {string=} [forceLanguage=false] A language to be used instead of the current language\n     * @param {string=} [sanitizeStrategy=undefined] force sanitize strategy for this call instead of using the configured one (use default unless set)\n     *\n     * @return {string|object} translation\n     */\n    $translate.instant = function (translationId, interpolateParams, interpolationId, forceLanguage, sanitizeStrategy) {\n\n      // we don't want to re-negotiate $uses\n      var uses = (forceLanguage && forceLanguage !== $uses) ? // we don't want to re-negotiate $uses\n        (negotiateLocale(forceLanguage) || forceLanguage) : $uses;\n\n      // Detect undefined and null values to shorten the execution and prevent exceptions\n      if (translationId === null || angular.isUndefined(translationId)) {\n        return translationId;\n      }\n\n      // Check forceLanguage is present\n      if (forceLanguage) {\n        loadTranslationsIfMissing(forceLanguage);\n      }\n\n      // Duck detection: If the first argument is an array, a bunch of translations was requested.\n      // The result is an object.\n      if (angular.isArray(translationId)) {\n        var results = {};\n        for (var i = 0, c = translationId.length; i < c; i++) {\n          results[translationId[i]] = $translate.instant(translationId[i], interpolateParams, interpolationId, forceLanguage, sanitizeStrategy);\n        }\n        return results;\n      }\n\n      // We discarded unacceptable values. So we just need to verify if translationId is empty String\n      if (angular.isString(translationId) && translationId.length < 1) {\n        return translationId;\n      }\n\n      // trim off any whitespace\n      if (translationId) {\n        translationId = trim.apply(translationId);\n      }\n\n      var result, possibleLangKeys = [];\n      if ($preferredLanguage) {\n        possibleLangKeys.push($preferredLanguage);\n      }\n      if (uses) {\n        possibleLangKeys.push(uses);\n      }\n      if ($fallbackLanguage && $fallbackLanguage.length) {\n        possibleLangKeys = possibleLangKeys.concat($fallbackLanguage);\n      }\n      for (var j = 0, d = possibleLangKeys.length; j < d; j++) {\n        var possibleLangKey = possibleLangKeys[j];\n        if ($translationTable[possibleLangKey]) {\n          if (typeof $translationTable[possibleLangKey][translationId] !== 'undefined') {\n            result = determineTranslationInstant(translationId, interpolateParams, interpolationId, uses, sanitizeStrategy);\n          }\n        }\n        if (typeof result !== 'undefined') {\n          break;\n        }\n      }\n\n      if (!result && result !== '') {\n        if ($notFoundIndicatorLeft || $notFoundIndicatorRight) {\n          result = applyNotFoundIndicators(translationId);\n        } else {\n          // Return translation of default interpolator if not found anything.\n          result = defaultInterpolator.interpolate(translationId, interpolateParams, 'filter', sanitizeStrategy);\n\n          // looks like the requested translation id doesn't exists.\n          // Now, if there is a registered handler for missing translations and no\n          // asyncLoader is pending, we execute the handler\n          var missingTranslationHandlerTranslation;\n          if ($missingTranslationHandlerFactory && !pendingLoader) {\n            missingTranslationHandlerTranslation = translateByHandler(translationId, interpolateParams, sanitizeStrategy);\n          }\n\n          if ($missingTranslationHandlerFactory && !pendingLoader && missingTranslationHandlerTranslation) {\n            result = missingTranslationHandlerTranslation;\n          }\n        }\n      }\n\n      return result;\n    };\n\n    /**\n     * @ngdoc function\n     * @name pascalprecht.translate.$translate#versionInfo\n     * @methodOf pascalprecht.translate.$translate\n     *\n     * @description\n     * Returns the current version information for the angular-translate library\n     *\n     * @return {string} angular-translate version\n     */\n    $translate.versionInfo = function () {\n      return version;\n    };\n\n    /**\n     * @ngdoc function\n     * @name pascalprecht.translate.$translate#loaderCache\n     * @methodOf pascalprecht.translate.$translate\n     *\n     * @description\n     * Returns the defined loaderCache.\n     *\n     * @return {boolean|string|object} current value of loaderCache\n     */\n    $translate.loaderCache = function () {\n      return loaderCache;\n    };\n\n    // internal purpose only\n    $translate.directivePriority = function () {\n      return directivePriority;\n    };\n\n    // internal purpose only\n    $translate.statefulFilter = function () {\n      return statefulFilter;\n    };\n\n    /**\n     * @ngdoc function\n     * @name pascalprecht.translate.$translate#isReady\n     * @methodOf pascalprecht.translate.$translate\n     *\n     * @description\n     * Returns whether the service is \"ready\" to translate (i.e. loading 1st language).\n     *\n     * See also {@link pascalprecht.translate.$translate#methods_onReady onReady()}.\n     *\n     * @return {boolean} current value of ready\n     */\n    $translate.isReady = function () {\n      return $isReady;\n    };\n\n    var $onReadyDeferred = $q.defer();\n    $onReadyDeferred.promise.then(function () {\n      $isReady = true;\n    });\n\n    /**\n     * @ngdoc function\n     * @name pascalprecht.translate.$translate#onReady\n     * @methodOf pascalprecht.translate.$translate\n     *\n     * @description\n     * Calls the function provided or resolved the returned promise after the service is \"ready\" to translate (i.e. loading 1st language).\n     *\n     * See also {@link pascalprecht.translate.$translate#methods_isReady isReady()}.\n     *\n     * @param {Function=} fn Function to invoke when service is ready\n     * @return {object} Promise resolved when service is ready\n     */\n    $translate.onReady = function (fn) {\n      var deferred = $q.defer();\n      if (angular.isFunction(fn)) {\n        deferred.promise.then(fn);\n      }\n      if ($isReady) {\n        deferred.resolve();\n      } else {\n        $onReadyDeferred.promise.then(deferred.resolve);\n      }\n      return deferred.promise;\n    };\n\n    /**\n     * @ngdoc function\n     * @name pascalprecht.translate.$translate#getAvailableLanguageKeys\n     * @methodOf pascalprecht.translate.$translate\n     *\n     * @description\n     * This function simply returns the registered language keys being defined before in the config phase\n     * With this, an application can use the array to provide a language selection dropdown or similar\n     * without any additional effort\n     *\n     * @returns {object} returns the list of possibly registered language keys and mapping or null if not defined\n     */\n    $translate.getAvailableLanguageKeys = function () {\n      if ($availableLanguageKeys.length > 0) {\n        return $availableLanguageKeys;\n      }\n      return null;\n    };\n\n    /**\n     * @ngdoc function\n     * @name pascalprecht.translate.$translate#getTranslationTable\n     * @methodOf pascalprecht.translate.$translate\n     *\n     * @description\n     * Returns translation table by the given language key.\n     *\n     * Unless a language is provided it returns a translation table of the current one.\n     * Note: If translation dictionary is currently downloading or in progress\n     * it will return null.\n     *\n     * @param {string} langKey A token which represents a translation id\n     *\n     * @return {object} a copy of angular-translate $translationTable\n     */\n    $translate.getTranslationTable = function (langKey) {\n      langKey = langKey || $translate.use();\n      if (langKey && $translationTable[langKey]) {\n        return angular.copy($translationTable[langKey]);\n      }\n      return null;\n    };\n\n    // Whenever $translateReady is being fired, this will ensure the state of $isReady\n    var globalOnReadyListener = $rootScope.$on('$translateReady', function () {\n      $onReadyDeferred.resolve();\n      globalOnReadyListener(); // one time only\n      globalOnReadyListener = null;\n    });\n    var globalOnChangeListener = $rootScope.$on('$translateChangeEnd', function () {\n      $onReadyDeferred.resolve();\n      globalOnChangeListener(); // one time only\n      globalOnChangeListener = null;\n    });\n\n    if ($loaderFactory) {\n\n      // If at least one async loader is defined and there are no\n      // (default) translations available we should try to load them.\n      if (angular.equals($translationTable, {})) {\n        if ($translate.use()) {\n          $translate.use($translate.use());\n        }\n      }\n\n      // Also, if there are any fallback language registered, we start\n      // loading them asynchronously as soon as we can.\n      if ($fallbackLanguage && $fallbackLanguage.length) {\n        var processAsyncResult = function (translation) {\n          translations(translation.key, translation.table);\n          $rootScope.$emit('$translateChangeEnd', {language : translation.key});\n          return translation;\n        };\n        for (var i = 0, len = $fallbackLanguage.length; i < len; i++) {\n          var fallbackLanguageId = $fallbackLanguage[i];\n          if ($forceAsyncReloadEnabled || !$translationTable[fallbackLanguageId]) {\n            langPromises[fallbackLanguageId] = loadAsync(fallbackLanguageId).then(processAsyncResult);\n          }\n        }\n      }\n    } else {\n      $rootScope.$emit('$translateReady', {language : $translate.use()});\n    }\n\n    return $translate;\n  }];\n}\n\n$translate.displayName = 'displayName';\n\n/**\n * @ngdoc object\n * @name pascalprecht.translate.$translateDefaultInterpolation\n * @requires $interpolate\n *\n * @description\n * Uses angular's `$interpolate` services to interpolate strings against some values.\n *\n * Be aware to configure a proper sanitization strategy.\n *\n * See also:\n * * {@link pascalprecht.translate.$translateSanitization}\n *\n * @return {object} $translateDefaultInterpolation Interpolator service\n */\nangular.module('pascalprecht.translate').factory('$translateDefaultInterpolation', $translateDefaultInterpolation);\n\nfunction $translateDefaultInterpolation ($interpolate, $translateSanitization) {\n\n  'use strict';\n\n  var $translateInterpolator = {},\n      $locale,\n      $identifier = 'default';\n\n  /**\n   * @ngdoc function\n   * @name pascalprecht.translate.$translateDefaultInterpolation#setLocale\n   * @methodOf pascalprecht.translate.$translateDefaultInterpolation\n   *\n   * @description\n   * Sets current locale (this is currently not use in this interpolation).\n   *\n   * @param {string} locale Language key or locale.\n   */\n  $translateInterpolator.setLocale = function (locale) {\n    $locale = locale;\n  };\n\n  /**\n   * @ngdoc function\n   * @name pascalprecht.translate.$translateDefaultInterpolation#getInterpolationIdentifier\n   * @methodOf pascalprecht.translate.$translateDefaultInterpolation\n   *\n   * @description\n   * Returns an identifier for this interpolation service.\n   *\n   * @returns {string} $identifier\n   */\n  $translateInterpolator.getInterpolationIdentifier = function () {\n    return $identifier;\n  };\n\n  /**\n   * @deprecated will be removed in 3.0\n   * @see {@link pascalprecht.translate.$translateSanitization}\n   */\n  $translateInterpolator.useSanitizeValueStrategy = function (value) {\n    $translateSanitization.useStrategy(value);\n    return this;\n  };\n\n  /**\n   * @ngdoc function\n   * @name pascalprecht.translate.$translateDefaultInterpolation#interpolate\n   * @methodOf pascalprecht.translate.$translateDefaultInterpolation\n   *\n   * @description\n   * Interpolates given value agains given interpolate params using angulars\n   * `$interpolate` service.\n   *\n   * Since AngularJS 1.5, `value` must not be a string but can be anything input.\n   *\n   * @param {string} value translation\n   * @param {object} [interpolationParams={}] interpolation params\n   * @param {string} [context=undefined] current context (filter, directive, service)\n   * @param {string} [sanitizeStrategy=undefined] sanitize strategy (use default unless set)\n   * @param {string} translationId current translationId\n   *\n   * @returns {string} interpolated string\n   */\n  $translateInterpolator.interpolate = function (value, interpolationParams, context, sanitizeStrategy, translationId) { // jshint ignore:line\n    interpolationParams = interpolationParams || {};\n    interpolationParams = $translateSanitization.sanitize(interpolationParams, 'params', sanitizeStrategy, context);\n\n    var interpolatedText;\n    if (angular.isNumber(value)) {\n      // numbers are safe\n      interpolatedText = '' + value;\n    } else if (angular.isString(value)) {\n      // strings must be interpolated (that's the job here)\n      interpolatedText = $interpolate(value)(interpolationParams);\n      interpolatedText = $translateSanitization.sanitize(interpolatedText, 'text', sanitizeStrategy, context);\n    } else {\n      // neither a number or a string, cant interpolate => empty string\n      interpolatedText = '';\n    }\n\n    return interpolatedText;\n  };\n\n  return $translateInterpolator;\n}\n\n$translateDefaultInterpolation.displayName = '$translateDefaultInterpolation';\n\nangular.module('pascalprecht.translate').constant('$STORAGE_KEY', 'NG_TRANSLATE_LANG_KEY');\n\nangular.module('pascalprecht.translate')\n/**\n * @ngdoc directive\n * @name pascalprecht.translate.directive:translate\n * @requires $interpolate,\n * @requires $compile,\n * @requires $parse,\n * @requires $rootScope\n * @restrict AE\n *\n * @description\n * Translates given translation id either through attribute or DOM content.\n * Internally it uses $translate service to translate the translation id. It possible to\n * pass an optional `translate-values` object literal as string into translation id.\n *\n * @param {string=} translate Translation id which could be either string or interpolated string.\n * @param {string=} translate-values Values to pass into translation id. Can be passed as object literal string or interpolated object.\n * @param {string=} translate-attr-ATTR translate Translation id and put it into ATTR attribute.\n * @param {string=} translate-default will be used unless translation was successful\n * @param {string=} translate-sanitize-strategy defines locally sanitize strategy\n * @param {boolean=} translate-compile (default true if present) defines locally activation of {@link pascalprecht.translate.$translateProvider#methods_usePostCompiling}\n * @param {boolean=} translate-keep-content (default true if present) defines that in case a KEY could not be translated, that the existing content is left in the innerHTML}\n *\n * @example\n   <example module=\"ngView\">\n    <file name=\"index.html\">\n      <div ng-controller=\"TranslateCtrl\">\n\n        <pre translate=\"TRANSLATION_ID\"></pre>\n        <pre translate>TRANSLATION_ID</pre>\n        <pre translate translate-attr-title=\"TRANSLATION_ID\"></pre>\n        <pre translate=\"{{translationId}}\"></pre>\n        <pre translate>{{translationId}}</pre>\n        <pre translate=\"WITH_VALUES\" translate-values=\"{value: 5}\"></pre>\n        <pre translate translate-values=\"{value: 5}\">WITH_VALUES</pre>\n        <pre translate=\"WITH_VALUES\" translate-values=\"{{values}}\"></pre>\n        <pre translate translate-values=\"{{values}}\">WITH_VALUES</pre>\n        <pre translate translate-attr-title=\"WITH_VALUES\" translate-values=\"{{values}}\"></pre>\n        <pre translate=\"WITH_CAMEL_CASE_KEY\" translate-value-camel-case-key=\"Hi\"></pre>\n\n      </div>\n    </file>\n    <file name=\"script.js\">\n      angular.module('ngView', ['pascalprecht.translate'])\n\n      .config(function ($translateProvider) {\n\n        $translateProvider.translations('en',{\n          'TRANSLATION_ID': 'Hello there!',\n          'WITH_VALUES': 'The following value is dynamic: {{value}}',\n          'WITH_CAMEL_CASE_KEY': 'The interpolation key is camel cased: {{camelCaseKey}}'\n        }).preferredLanguage('en');\n\n      });\n\n      angular.module('ngView').controller('TranslateCtrl', function ($scope) {\n        $scope.translationId = 'TRANSLATION_ID';\n\n        $scope.values = {\n          value: 78\n        };\n      });\n    </file>\n    <file name=\"scenario.js\">\n      it('should translate', function () {\n        inject(function ($rootScope, $compile) {\n          $rootScope.translationId = 'TRANSLATION_ID';\n\n          element = $compile('<p translate=\"TRANSLATION_ID\"></p>')($rootScope);\n          $rootScope.$digest();\n          expect(element.text()).toBe('Hello there!');\n\n          element = $compile('<p translate=\"{{translationId}}\"></p>')($rootScope);\n          $rootScope.$digest();\n          expect(element.text()).toBe('Hello there!');\n\n          element = $compile('<p translate>TRANSLATION_ID</p>')($rootScope);\n          $rootScope.$digest();\n          expect(element.text()).toBe('Hello there!');\n\n          element = $compile('<p translate>{{translationId}}</p>')($rootScope);\n          $rootScope.$digest();\n          expect(element.text()).toBe('Hello there!');\n\n          element = $compile('<p translate translate-attr-title=\"TRANSLATION_ID\"></p>')($rootScope);\n          $rootScope.$digest();\n          expect(element.attr('title')).toBe('Hello there!');\n\n          element = $compile('<p translate=\"WITH_CAMEL_CASE_KEY\" translate-value-camel-case-key=\"Hello\"></p>')($rootScope);\n          $rootScope.$digest();\n          expect(element.text()).toBe('The interpolation key is camel cased: Hello');\n        });\n      });\n    </file>\n   </example>\n */\n.directive('translate', translateDirective);\nfunction translateDirective($translate, $interpolate, $compile, $parse, $rootScope) {\n\n  'use strict';\n\n  /**\n   * @name trim\n   * @private\n   *\n   * @description\n   * trim polyfill\n   *\n   * @returns {string} The string stripped of whitespace from both ends\n   */\n  var trim = function() {\n    return this.toString().replace(/^\\s+|\\s+$/g, '');\n  };\n\n  /**\n   * @name lowercase\n   * @private\n   *\n   * @description\n   * Return the lowercase string only if the type is string\n   *\n   * @returns {string} The string all in lowercase\n   */\n  var lowercase = function (string) {\n    return angular.isString(string) ? string.toLowerCase() : string;\n  };\n\n  return {\n    restrict: 'AE',\n    scope: true,\n    priority: $translate.directivePriority(),\n    compile: function (tElement, tAttr) {\n\n      var translateValuesExist = (tAttr.translateValues) ?\n        tAttr.translateValues : undefined;\n\n      var translateInterpolation = (tAttr.translateInterpolation) ?\n        tAttr.translateInterpolation : undefined;\n\n      var translateSanitizeStrategyExist = (tAttr.translateSanitizeStrategy) ?\n        tAttr.translateSanitizeStrategy : undefined;\n\n      var translateValueExist = tElement[0].outerHTML.match(/translate-value-+/i);\n\n      var interpolateRegExp = '^(.*)(' + $interpolate.startSymbol() + '.*' + $interpolate.endSymbol() + ')(.*)',\n          watcherRegExp = '^(.*)' + $interpolate.startSymbol() + '(.*)' + $interpolate.endSymbol() + '(.*)';\n\n      return function linkFn(scope, iElement, iAttr) {\n\n        scope.interpolateParams = {};\n        scope.preText = '';\n        scope.postText = '';\n        scope.translateNamespace = getTranslateNamespace(scope);\n        var translationIds = {};\n\n        var initInterpolationParams = function (interpolateParams, iAttr, tAttr) {\n          // initial setup\n          if (iAttr.translateValues) {\n            angular.extend(interpolateParams, $parse(iAttr.translateValues)(scope.$parent));\n          }\n          // initially fetch all attributes if existing and fill the params\n          if (translateValueExist) {\n            for (var attr in tAttr) {\n              if (Object.prototype.hasOwnProperty.call(iAttr, attr) && attr.substr(0, 14) === 'translateValue' && attr !== 'translateValues') {\n                var attributeName = lowercase(attr.substr(14, 1)) + attr.substr(15);\n                interpolateParams[attributeName] = tAttr[attr];\n              }\n            }\n          }\n        };\n\n        // Ensures any change of the attribute \"translate\" containing the id will\n        // be re-stored to the scope's \"translationId\".\n        // If the attribute has no content, the element's text value (white spaces trimmed off) will be used.\n        var observeElementTranslation = function (translationId) {\n\n          // Remove any old watcher\n          if (angular.isFunction(observeElementTranslation._unwatchOld)) {\n            observeElementTranslation._unwatchOld();\n            observeElementTranslation._unwatchOld = undefined;\n          }\n\n          if (angular.equals(translationId , '') || !angular.isDefined(translationId)) {\n            var iElementText = trim.apply(iElement.text()).replace(/\\n/g, ' ');\n\n            // Resolve translation id by inner html if required\n            var interpolateMatches = iElementText.match(interpolateRegExp);\n            // Interpolate translation id if required\n            if (angular.isArray(interpolateMatches)) {\n              scope.preText = interpolateMatches[1];\n              scope.postText = interpolateMatches[3];\n              translationIds.translate = $interpolate(interpolateMatches[2])(scope.$parent);\n              var watcherMatches = iElementText.match(watcherRegExp);\n              if (angular.isArray(watcherMatches) && watcherMatches[2] && watcherMatches[2].length) {\n                observeElementTranslation._unwatchOld = scope.$watch(watcherMatches[2], function (newValue) {\n                  translationIds.translate = newValue;\n                  updateTranslations();\n                });\n              }\n            } else {\n              // do not assigne the translation id if it is empty.\n              translationIds.translate = !iElementText ? undefined : iElementText;\n            }\n          } else {\n            translationIds.translate = translationId;\n          }\n          updateTranslations();\n        };\n\n        var observeAttributeTranslation = function (translateAttr) {\n          iAttr.$observe(translateAttr, function (translationId) {\n            translationIds[translateAttr] = translationId;\n            updateTranslations();\n          });\n        };\n\n        // initial setup with values\n        initInterpolationParams(scope.interpolateParams, iAttr, tAttr);\n\n        var firstAttributeChangedEvent = true;\n        iAttr.$observe('translate', function (translationId) {\n          if (typeof translationId === 'undefined') {\n            // case of element \"<translate>xyz</translate>\"\n            observeElementTranslation('');\n          } else {\n            // case of regular attribute\n            if (translationId !== '' || !firstAttributeChangedEvent) {\n              translationIds.translate = translationId;\n              updateTranslations();\n            }\n          }\n          firstAttributeChangedEvent = false;\n        });\n\n        for (var translateAttr in iAttr) {\n          if (iAttr.hasOwnProperty(translateAttr) && translateAttr.substr(0, 13) === 'translateAttr' && translateAttr.length > 13) {\n            observeAttributeTranslation(translateAttr);\n          }\n        }\n\n        iAttr.$observe('translateDefault', function (value) {\n          scope.defaultText = value;\n          updateTranslations();\n        });\n\n        if (translateSanitizeStrategyExist) {\n          iAttr.$observe('translateSanitizeStrategy', function (value) {\n            scope.sanitizeStrategy = $parse(value)(scope.$parent);\n            updateTranslations();\n          });\n        }\n\n        if (translateValuesExist) {\n          iAttr.$observe('translateValues', function (interpolateParams) {\n            if (interpolateParams) {\n              scope.$parent.$watch(function () {\n                angular.extend(scope.interpolateParams, $parse(interpolateParams)(scope.$parent));\n              });\n            }\n          });\n        }\n\n        if (translateValueExist) {\n          var observeValueAttribute = function (attrName) {\n            iAttr.$observe(attrName, function (value) {\n              var attributeName = lowercase(attrName.substr(14, 1)) + attrName.substr(15);\n              scope.interpolateParams[attributeName] = value;\n            });\n          };\n          for (var attr in iAttr) {\n            if (Object.prototype.hasOwnProperty.call(iAttr, attr) && attr.substr(0, 14) === 'translateValue' && attr !== 'translateValues') {\n              observeValueAttribute(attr);\n            }\n          }\n        }\n\n        // Master update function\n        var updateTranslations = function () {\n          for (var key in translationIds) {\n            if (translationIds.hasOwnProperty(key) && translationIds[key] !== undefined) {\n              updateTranslation(key, translationIds[key], scope, scope.interpolateParams, scope.defaultText, scope.translateNamespace);\n            }\n          }\n        };\n\n        // Put translation processing function outside loop\n        var updateTranslation = function(translateAttr, translationId, scope, interpolateParams, defaultTranslationText, translateNamespace) {\n          if (translationId) {\n            // if translation id starts with '.' and translateNamespace given, prepend namespace\n            if (translateNamespace && translationId.charAt(0) === '.') {\n              translationId = translateNamespace + translationId;\n            }\n\n            $translate(translationId, interpolateParams, translateInterpolation, defaultTranslationText, scope.translateLanguage, scope.sanitizeStrategy)\n              .then(function (translation) {\n                applyTranslation(translation, scope, true, translateAttr);\n              }, function (translationId) {\n                applyTranslation(translationId, scope, false, translateAttr);\n              });\n          } else {\n            // as an empty string cannot be translated, we can solve this using successful=false\n            applyTranslation(translationId, scope, false, translateAttr);\n          }\n        };\n\n        var applyTranslation = function (value, scope, successful, translateAttr) {\n          if (!successful) {\n            if (typeof scope.defaultText !== 'undefined') {\n              value = scope.defaultText;\n            }\n          }\n          if (translateAttr === 'translate') {\n            // default translate into innerHTML\n            if (successful || (!successful && !$translate.isKeepContent() && typeof iAttr.translateKeepContent === 'undefined')) {\n              iElement.empty().append(scope.preText + value + scope.postText);\n            }\n            var globallyEnabled = $translate.isPostCompilingEnabled();\n            var locallyDefined = typeof tAttr.translateCompile !== 'undefined';\n            var locallyEnabled = locallyDefined && tAttr.translateCompile !== 'false';\n            if ((globallyEnabled && !locallyDefined) || locallyEnabled) {\n              $compile(iElement.contents())(scope);\n            }\n          } else {\n            // translate attribute\n            var attributeName = iAttr.$attr[translateAttr];\n            if (attributeName.substr(0, 5) === 'data-') {\n              // ensure html5 data prefix is stripped\n              attributeName = attributeName.substr(5);\n            }\n            attributeName = attributeName.substr(15);\n            iElement.attr(attributeName, value);\n          }\n        };\n\n        if (translateValuesExist || translateValueExist || iAttr.translateDefault) {\n          scope.$watch('interpolateParams', updateTranslations, true);\n        }\n\n        // Replaced watcher on translateLanguage with event listener\n        scope.$on('translateLanguageChanged', updateTranslations);\n\n        // Ensures the text will be refreshed after the current language was changed\n        // w/ $translate.use(...)\n        var unbind = $rootScope.$on('$translateChangeSuccess', updateTranslations);\n\n        // ensure translation will be looked up at least one\n        if (iElement.text().length) {\n          if (iAttr.translate) {\n            observeElementTranslation(iAttr.translate);\n          } else {\n            observeElementTranslation('');\n          }\n        } else if (iAttr.translate) {\n          // ensure attribute will be not skipped\n          observeElementTranslation(iAttr.translate);\n        }\n        updateTranslations();\n        scope.$on('$destroy', unbind);\n      };\n    }\n  };\n}\n\n/**\n * Returns the scope's namespace.\n * @private\n * @param scope\n * @returns {string}\n */\nfunction getTranslateNamespace(scope) {\n  'use strict';\n  if (scope.translateNamespace) {\n    return scope.translateNamespace;\n  }\n  if (scope.$parent) {\n    return getTranslateNamespace(scope.$parent);\n  }\n}\n\ntranslateDirective.displayName = 'translateDirective';\n\nangular.module('pascalprecht.translate')\n/**\n * @ngdoc directive\n * @name pascalprecht.translate.directive:translate-attr\n * @restrict A\n *\n * @description\n * Translates attributes like translate-attr-ATTR, but with an object like ng-class.\n * Internally it uses `translate` service to translate translation id. It possible to\n * pass an optional `translate-values` object literal as string into translation id.\n *\n * @param {string=} translate-attr Object literal mapping attributes to translation ids.\n * @param {string=} translate-values Values to pass into the translation ids. Can be passed as object literal string.\n * @param {string=} translate-sanitize-strategy defines locally sanitize strategy\n *\n * @example\n   <example module=\"ngView\">\n    <file name=\"index.html\">\n      <div ng-controller=\"TranslateCtrl\">\n\n        <input translate-attr=\"{ placeholder: translationId, title: 'WITH_VALUES' }\" translate-values=\"{value: 5}\" />\n\n      </div>\n    </file>\n    <file name=\"script.js\">\n      angular.module('ngView', ['pascalprecht.translate'])\n\n      .config(function ($translateProvider) {\n\n        $translateProvider.translations('en',{\n          'TRANSLATION_ID': 'Hello there!',\n          'WITH_VALUES': 'The following value is dynamic: {{value}}',\n        }).preferredLanguage('en');\n\n      });\n\n      angular.module('ngView').controller('TranslateCtrl', function ($scope) {\n        $scope.translationId = 'TRANSLATION_ID';\n\n        $scope.values = {\n          value: 78\n        };\n      });\n    </file>\n    <file name=\"scenario.js\">\n      it('should translate', function () {\n        inject(function ($rootScope, $compile) {\n          $rootScope.translationId = 'TRANSLATION_ID';\n\n          element = $compile('<input translate-attr=\"{ placeholder: translationId, title: 'WITH_VALUES' }\" translate-values=\"{ value: 5 }\" />')($rootScope);\n          $rootScope.$digest();\n          expect(element.attr('placeholder)).toBe('Hello there!');\n          expect(element.attr('title)).toBe('The following value is dynamic: 5');\n        });\n      });\n    </file>\n   </example>\n */\n.directive('translateAttr', translateAttrDirective);\nfunction translateAttrDirective($translate, $rootScope) {\n\n  'use strict';\n\n  return {\n    restrict: 'A',\n    priority: $translate.directivePriority(),\n    link: function linkFn(scope, element, attr) {\n\n      var translateAttr,\n          translateValues,\n          translateSanitizeStrategy,\n          previousAttributes = {};\n\n      // Main update translations function\n      var updateTranslations = function () {\n        angular.forEach(translateAttr, function (translationId, attributeName) {\n          if (!translationId) {\n            return;\n          }\n          previousAttributes[attributeName] = true;\n\n          // if translation id starts with '.' and translateNamespace given, prepend namespace\n          if (scope.translateNamespace && translationId.charAt(0) === '.') {\n            translationId = scope.translateNamespace + translationId;\n          }\n          $translate(translationId, translateValues, attr.translateInterpolation, undefined, scope.translateLanguage, translateSanitizeStrategy)\n            .then(function (translation) {\n              element.attr(attributeName, translation);\n            }, function (translationId) {\n              element.attr(attributeName, translationId);\n            });\n        });\n\n        // Removing unused attributes that were previously used\n        angular.forEach(previousAttributes, function (flag, attributeName) {\n          if (!translateAttr[attributeName]) {\n            element.removeAttr(attributeName);\n            delete previousAttributes[attributeName];\n          }\n        });\n      };\n\n      // Watch for attribute changes\n      watchAttribute(\n        scope,\n        attr.translateAttr,\n        function (newValue) { translateAttr = newValue; },\n        updateTranslations\n      );\n      // Watch for value changes\n      watchAttribute(\n        scope,\n        attr.translateValues,\n        function (newValue) { translateValues = newValue; },\n        updateTranslations\n      );\n      // Watch for sanitize strategy changes\n      watchAttribute(\n        scope,\n        attr.translateSanitizeStrategy,\n        function (newValue) { translateSanitizeStrategy = newValue; },\n        updateTranslations\n      );\n\n      if (attr.translateValues) {\n        scope.$watch(attr.translateValues, updateTranslations, true);\n      }\n\n      // Replaced watcher on translateLanguage with event listener\n      scope.$on('translateLanguageChanged', updateTranslations);\n\n      // Ensures the text will be refreshed after the current language was changed\n      // w/ $translate.use(...)\n      var unbind = $rootScope.$on('$translateChangeSuccess', updateTranslations);\n\n      updateTranslations();\n      scope.$on('$destroy', unbind);\n    }\n  };\n}\n\nfunction watchAttribute(scope, attribute, valueCallback, changeCallback) {\n  'use strict';\n  if (!attribute) {\n    return;\n  }\n  if (attribute.substr(0, 2) === '::') {\n    attribute = attribute.substr(2);\n  } else {\n    scope.$watch(attribute, function(newValue) {\n      valueCallback(newValue);\n      changeCallback();\n    }, true);\n  }\n  valueCallback(scope.$eval(attribute));\n}\n\ntranslateAttrDirective.displayName = 'translateAttrDirective';\n\nangular.module('pascalprecht.translate')\n/**\n * @ngdoc directive\n * @name pascalprecht.translate.directive:translateCloak\n * @requires $translate\n * @restrict A\n *\n * $description\n * Adds a `translate-cloak` class name to the given element where this directive\n * is applied initially and removes it, once a loader has finished loading.\n *\n * This directive can be used to prevent initial flickering when loading translation\n * data asynchronously.\n *\n * The class name is defined in\n * {@link pascalprecht.translate.$translateProvider#cloakClassName $translate.cloakClassName()}.\n *\n * @param {string=} translate-cloak If a translationId is provided, it will be used for showing\n *                                  or hiding the cloak. Basically it relies on the translation\n *                                  resolve.\n */\n.directive('translateCloak', translateCloakDirective);\n\nfunction translateCloakDirective($translate, $rootScope) {\n\n  'use strict';\n\n  return {\n    compile : function (tElement) {\n      var applyCloak = function (element) {\n          element.addClass($translate.cloakClassName());\n        },\n        removeCloak = function (element) {\n          element.removeClass($translate.cloakClassName());\n        };\n      applyCloak(tElement);\n\n      return function linkFn(scope, iElement, iAttr) {\n        //Create bound functions that incorporate the active DOM element.\n        var iRemoveCloak = removeCloak.bind(this, iElement), iApplyCloak = applyCloak.bind(this, iElement);\n        if (iAttr.translateCloak && iAttr.translateCloak.length) {\n          // Register a watcher for the defined translation allowing a fine tuned cloak\n          iAttr.$observe('translateCloak', function (translationId) {\n            $translate(translationId).then(iRemoveCloak, iApplyCloak);\n          });\n          $rootScope.$on('$translateChangeSuccess', function () {\n            $translate(iAttr.translateCloak).then(iRemoveCloak, iApplyCloak);\n          });\n        } else {\n          $translate.onReady(iRemoveCloak);\n        }\n      };\n    }\n  };\n}\n\ntranslateCloakDirective.displayName = 'translateCloakDirective';\n\nangular.module('pascalprecht.translate')\n/**\n * @ngdoc directive\n * @name pascalprecht.translate.directive:translateNamespace\n * @restrict A\n *\n * @description\n * Translates given translation id either through attribute or DOM content.\n * Internally it uses `translate` filter to translate translation id. It is possible to\n * pass an optional `translate-values` object literal as string into translation id.\n *\n * @param {string=} translate namespace name which could be either string or interpolated string.\n *\n * @example\n   <example module=\"ngView\">\n    <file name=\"index.html\">\n      <div translate-namespace=\"CONTENT\">\n\n        <div>\n            <h1 translate>.HEADERS.TITLE</h1>\n            <h1 translate>.HEADERS.WELCOME</h1>\n        </div>\n\n        <div translate-namespace=\".HEADERS\">\n            <h1 translate>.TITLE</h1>\n            <h1 translate>.WELCOME</h1>\n        </div>\n\n      </div>\n    </file>\n    <file name=\"script.js\">\n      angular.module('ngView', ['pascalprecht.translate'])\n\n      .config(function ($translateProvider) {\n\n        $translateProvider.translations('en',{\n          'TRANSLATION_ID': 'Hello there!',\n          'CONTENT': {\n            'HEADERS': {\n                TITLE: 'Title'\n            }\n          },\n          'CONTENT.HEADERS.WELCOME': 'Welcome'\n        }).preferredLanguage('en');\n\n      });\n\n    </file>\n   </example>\n */\n.directive('translateNamespace', translateNamespaceDirective);\n\nfunction translateNamespaceDirective() {\n\n  'use strict';\n\n  return {\n    restrict: 'A',\n    scope: true,\n    compile: function () {\n      return {\n        pre: function (scope, iElement, iAttrs) {\n          scope.translateNamespace = _getTranslateNamespace(scope);\n\n          if (scope.translateNamespace && iAttrs.translateNamespace.charAt(0) === '.') {\n            scope.translateNamespace += iAttrs.translateNamespace;\n          } else {\n            scope.translateNamespace = iAttrs.translateNamespace;\n          }\n        }\n      };\n    }\n  };\n}\n\n/**\n * Returns the scope's namespace.\n * @private\n * @param scope\n * @returns {string}\n */\nfunction _getTranslateNamespace(scope) {\n  'use strict';\n  if (scope.translateNamespace) {\n    return scope.translateNamespace;\n  }\n  if (scope.$parent) {\n    return _getTranslateNamespace(scope.$parent);\n  }\n}\n\ntranslateNamespaceDirective.displayName = 'translateNamespaceDirective';\n\nangular.module('pascalprecht.translate')\n/**\n * @ngdoc directive\n * @name pascalprecht.translate.directive:translateLanguage\n * @restrict A\n *\n * @description\n * Forces the language to the directives in the underlying scope.\n *\n * @param {string=} translate language that will be negotiated.\n *\n * @example\n   <example module=\"ngView\">\n    <file name=\"index.html\">\n      <div>\n\n        <div>\n            <h1 translate>HELLO</h1>\n        </div>\n\n        <div translate-language=\"de\">\n            <h1 translate>HELLO</h1>\n        </div>\n\n      </div>\n    </file>\n    <file name=\"script.js\">\n      angular.module('ngView', ['pascalprecht.translate'])\n\n      .config(function ($translateProvider) {\n\n        $translateProvider\n          .translations('en',{\n            'HELLO': 'Hello world!'\n          })\n          .translations('de',{\n            'HELLO': 'Hallo Welt!'\n          })\n          .preferredLanguage('en');\n\n      });\n\n    </file>\n   </example>\n */\n.directive('translateLanguage', translateLanguageDirective);\n\nfunction translateLanguageDirective() {\n\n  'use strict';\n\n  return {\n    restrict: 'A',\n    scope: true,\n    compile: function () {\n      return function linkFn(scope, iElement, iAttrs) {\n\n        iAttrs.$observe('translateLanguage', function (newTranslateLanguage) {\n          scope.translateLanguage = newTranslateLanguage;\n        });\n\n        scope.$watch('translateLanguage', function(){\n          scope.$broadcast('translateLanguageChanged');\n        });\n      };\n    }\n  };\n}\n\ntranslateLanguageDirective.displayName = 'translateLanguageDirective';\n\nangular.module('pascalprecht.translate')\n/**\n * @ngdoc filter\n * @name pascalprecht.translate.filter:translate\n * @requires $parse\n * @requires pascalprecht.translate.$translate\n * @function\n *\n * @description\n * Uses `$translate` service to translate contents. Accepts interpolate parameters\n * to pass dynamized values though translation.\n *\n * @param {string} translationId A translation id to be translated.\n * @param {*=} interpolateParams Optional object literal (as hash or string) to pass values into translation.\n *\n * @returns {string} Translated text.\n *\n * @example\n   <example module=\"ngView\">\n    <file name=\"index.html\">\n      <div ng-controller=\"TranslateCtrl\">\n\n        <pre>{{ 'TRANSLATION_ID' | translate }}</pre>\n        <pre>{{ translationId | translate }}</pre>\n        <pre>{{ 'WITH_VALUES' | translate:'{value: 5}' }}</pre>\n        <pre>{{ 'WITH_VALUES' | translate:values }}</pre>\n\n      </div>\n    </file>\n    <file name=\"script.js\">\n      angular.module('ngView', ['pascalprecht.translate'])\n\n      .config(function ($translateProvider) {\n\n        $translateProvider.translations('en', {\n          'TRANSLATION_ID': 'Hello there!',\n          'WITH_VALUES': 'The following value is dynamic: {{value}}'\n        });\n        $translateProvider.preferredLanguage('en');\n\n      });\n\n      angular.module('ngView').controller('TranslateCtrl', function ($scope) {\n        $scope.translationId = 'TRANSLATION_ID';\n\n        $scope.values = {\n          value: 78\n        };\n      });\n    </file>\n   </example>\n */\n.filter('translate', translateFilterFactory);\n\nfunction translateFilterFactory($parse, $translate) {\n\n  'use strict';\n\n  var translateFilter = function (translationId, interpolateParams, interpolation, forceLanguage) {\n    if (!angular.isObject(interpolateParams)) {\n      var ctx = this || {\n        '__SCOPE_IS_NOT_AVAILABLE': 'More info at https://github.com/angular/angular.js/commit/8863b9d04c722b278fa93c5d66ad1e578ad6eb1f'\n        };\n      interpolateParams = $parse(interpolateParams)(ctx);\n    }\n\n    return $translate.instant(translationId, interpolateParams, interpolation, forceLanguage);\n  };\n\n  if ($translate.statefulFilter()) {\n    translateFilter.$stateful = true;\n  }\n\n  return translateFilter;\n}\n\ntranslateFilterFactory.displayName = 'translateFilterFactory';\n\nangular.module('pascalprecht.translate')\n\n/**\n * @ngdoc object\n * @name pascalprecht.translate.$translationCache\n * @requires $cacheFactory\n *\n * @description\n * The first time a translation table is used, it is loaded in the translation cache for quick retrieval. You\n * can load translation tables directly into the cache by consuming the\n * `$translationCache` service directly.\n *\n * @return {object} $cacheFactory object.\n */\n  .factory('$translationCache', $translationCache);\n\nfunction $translationCache($cacheFactory) {\n\n  'use strict';\n\n  return $cacheFactory('translations');\n}\n\n$translationCache.displayName = '$translationCache';\nreturn 'pascalprecht.translate';\n\n}));\n","/**\n * State-based routing for AngularJS\n * @version v0.3.2\n * @link http://angular-ui.github.com/\n * @license MIT License, http://www.opensource.org/licenses/MIT\n */\n\n/* commonjs package manager support (eg componentjs) */\nif (typeof module !== \"undefined\" && typeof exports !== \"undefined\" && module.exports === exports){\n  module.exports = 'ui.router';\n}\n\n(function (window, angular, undefined) {\n/*jshint globalstrict:true*/\n/*global angular:false*/\n'use strict';\n\nvar isDefined = angular.isDefined,\n    isFunction = angular.isFunction,\n    isString = angular.isString,\n    isObject = angular.isObject,\n    isArray = angular.isArray,\n    forEach = angular.forEach,\n    extend = angular.extend,\n    copy = angular.copy,\n    toJson = angular.toJson;\n\nfunction inherit(parent, extra) {\n  return extend(new (extend(function() {}, { prototype: parent }))(), extra);\n}\n\nfunction merge(dst) {\n  forEach(arguments, function(obj) {\n    if (obj !== dst) {\n      forEach(obj, function(value, key) {\n        if (!dst.hasOwnProperty(key)) dst[key] = value;\n      });\n    }\n  });\n  return dst;\n}\n\n/**\n * Finds the common ancestor path between two states.\n *\n * @param {Object} first The first state.\n * @param {Object} second The second state.\n * @return {Array} Returns an array of state names in descending order, not including the root.\n */\nfunction ancestors(first, second) {\n  var path = [];\n\n  for (var n in first.path) {\n    if (first.path[n] !== second.path[n]) break;\n    path.push(first.path[n]);\n  }\n  return path;\n}\n\n/**\n * IE8-safe wrapper for `Object.keys()`.\n *\n * @param {Object} object A JavaScript object.\n * @return {Array} Returns the keys of the object as an array.\n */\nfunction objectKeys(object) {\n  if (Object.keys) {\n    return Object.keys(object);\n  }\n  var result = [];\n\n  forEach(object, function(val, key) {\n    result.push(key);\n  });\n  return result;\n}\n\n/**\n * IE8-safe wrapper for `Array.prototype.indexOf()`.\n *\n * @param {Array} array A JavaScript array.\n * @param {*} value A value to search the array for.\n * @return {Number} Returns the array index value of `value`, or `-1` if not present.\n */\nfunction indexOf(array, value) {\n  if (Array.prototype.indexOf) {\n    return array.indexOf(value, Number(arguments[2]) || 0);\n  }\n  var len = array.length >>> 0, from = Number(arguments[2]) || 0;\n  from = (from < 0) ? Math.ceil(from) : Math.floor(from);\n\n  if (from < 0) from += len;\n\n  for (; from < len; from++) {\n    if (from in array && array[from] === value) return from;\n  }\n  return -1;\n}\n\n/**\n * Merges a set of parameters with all parameters inherited between the common parents of the\n * current state and a given destination state.\n *\n * @param {Object} currentParams The value of the current state parameters ($stateParams).\n * @param {Object} newParams The set of parameters which will be composited with inherited params.\n * @param {Object} $current Internal definition of object representing the current state.\n * @param {Object} $to Internal definition of object representing state to transition to.\n */\nfunction inheritParams(currentParams, newParams, $current, $to) {\n  var parents = ancestors($current, $to), parentParams, inherited = {}, inheritList = [];\n\n  for (var i in parents) {\n    if (!parents[i] || !parents[i].params) continue;\n    parentParams = objectKeys(parents[i].params);\n    if (!parentParams.length) continue;\n\n    for (var j in parentParams) {\n      if (indexOf(inheritList, parentParams[j]) >= 0) continue;\n      inheritList.push(parentParams[j]);\n      inherited[parentParams[j]] = currentParams[parentParams[j]];\n    }\n  }\n  return extend({}, inherited, newParams);\n}\n\n/**\n * Performs a non-strict comparison of the subset of two objects, defined by a list of keys.\n *\n * @param {Object} a The first object.\n * @param {Object} b The second object.\n * @param {Array} keys The list of keys within each object to compare. If the list is empty or not specified,\n *                     it defaults to the list of keys in `a`.\n * @return {Boolean} Returns `true` if the keys match, otherwise `false`.\n */\nfunction equalForKeys(a, b, keys) {\n  if (!keys) {\n    keys = [];\n    for (var n in a) keys.push(n); // Used instead of Object.keys() for IE8 compatibility\n  }\n\n  for (var i=0; i<keys.length; i++) {\n    var k = keys[i];\n    if (a[k] != b[k]) return false; // Not '===', values aren't necessarily normalized\n  }\n  return true;\n}\n\n/**\n * Returns the subset of an object, based on a list of keys.\n *\n * @param {Array} keys\n * @param {Object} values\n * @return {Boolean} Returns a subset of `values`.\n */\nfunction filterByKeys(keys, values) {\n  var filtered = {};\n\n  forEach(keys, function (name) {\n    filtered[name] = values[name];\n  });\n  return filtered;\n}\n\n// like _.indexBy\n// when you know that your index values will be unique, or you want last-one-in to win\nfunction indexBy(array, propName) {\n  var result = {};\n  forEach(array, function(item) {\n    result[item[propName]] = item;\n  });\n  return result;\n}\n\n// extracted from underscore.js\n// Return a copy of the object only containing the whitelisted properties.\nfunction pick(obj) {\n  var copy = {};\n  var keys = Array.prototype.concat.apply(Array.prototype, Array.prototype.slice.call(arguments, 1));\n  forEach(keys, function(key) {\n    if (key in obj) copy[key] = obj[key];\n  });\n  return copy;\n}\n\n// extracted from underscore.js\n// Return a copy of the object omitting the blacklisted properties.\nfunction omit(obj) {\n  var copy = {};\n  var keys = Array.prototype.concat.apply(Array.prototype, Array.prototype.slice.call(arguments, 1));\n  for (var key in obj) {\n    if (indexOf(keys, key) == -1) copy[key] = obj[key];\n  }\n  return copy;\n}\n\nfunction pluck(collection, key) {\n  var result = isArray(collection) ? [] : {};\n\n  forEach(collection, function(val, i) {\n    result[i] = isFunction(key) ? key(val) : val[key];\n  });\n  return result;\n}\n\nfunction filter(collection, callback) {\n  var array = isArray(collection);\n  var result = array ? [] : {};\n  forEach(collection, function(val, i) {\n    if (callback(val, i)) {\n      result[array ? result.length : i] = val;\n    }\n  });\n  return result;\n}\n\nfunction map(collection, callback) {\n  var result = isArray(collection) ? [] : {};\n\n  forEach(collection, function(val, i) {\n    result[i] = callback(val, i);\n  });\n  return result;\n}\n\n// issue #2676 #2889\nfunction silenceUncaughtInPromise (promise) {\n  return promise.then(undefined, function() {}) && promise;\n}\n\n/**\n * @ngdoc overview\n * @name ui.router.util\n *\n * @description\n * # ui.router.util sub-module\n *\n * This module is a dependency of other sub-modules. Do not include this module as a dependency\n * in your angular app (use {@link ui.router} module instead).\n *\n */\nangular.module('ui.router.util', ['ng']);\n\n/**\n * @ngdoc overview\n * @name ui.router.router\n * \n * @requires ui.router.util\n *\n * @description\n * # ui.router.router sub-module\n *\n * This module is a dependency of other sub-modules. Do not include this module as a dependency\n * in your angular app (use {@link ui.router} module instead).\n */\nangular.module('ui.router.router', ['ui.router.util']);\n\n/**\n * @ngdoc overview\n * @name ui.router.state\n * \n * @requires ui.router.router\n * @requires ui.router.util\n *\n * @description\n * # ui.router.state sub-module\n *\n * This module is a dependency of the main ui.router module. Do not include this module as a dependency\n * in your angular app (use {@link ui.router} module instead).\n * \n */\nangular.module('ui.router.state', ['ui.router.router', 'ui.router.util']);\n\n/**\n * @ngdoc overview\n * @name ui.router\n *\n * @requires ui.router.state\n *\n * @description\n * # ui.router\n * \n * ## The main module for ui.router \n * There are several sub-modules included with the ui.router module, however only this module is needed\n * as a dependency within your angular app. The other modules are for organization purposes. \n *\n * The modules are:\n * * ui.router - the main \"umbrella\" module\n * * ui.router.router - \n * \n * *You'll need to include **only** this module as the dependency within your angular app.*\n * \n * <pre>\n * <!doctype html>\n * <html ng-app=\"myApp\">\n * <head>\n *   <script src=\"js/angular.js\"></script>\n *   <!-- Include the ui-router script -->\n *   <script src=\"js/angular-ui-router.min.js\"></script>\n *   <script>\n *     // ...and add 'ui.router' as a dependency\n *     var myApp = angular.module('myApp', ['ui.router']);\n *   </script>\n * </head>\n * <body>\n * </body>\n * </html>\n * </pre>\n */\nangular.module('ui.router', ['ui.router.state']);\n\nangular.module('ui.router.compat', ['ui.router']);\n\n/**\n * @ngdoc object\n * @name ui.router.util.$resolve\n *\n * @requires $q\n * @requires $injector\n *\n * @description\n * Manages resolution of (acyclic) graphs of promises.\n */\n$Resolve.$inject = ['$q', '$injector'];\nfunction $Resolve(  $q,    $injector) {\n  \n  var VISIT_IN_PROGRESS = 1,\n      VISIT_DONE = 2,\n      NOTHING = {},\n      NO_DEPENDENCIES = [],\n      NO_LOCALS = NOTHING,\n      NO_PARENT = extend($q.when(NOTHING), { $$promises: NOTHING, $$values: NOTHING });\n  \n\n  /**\n   * @ngdoc function\n   * @name ui.router.util.$resolve#study\n   * @methodOf ui.router.util.$resolve\n   *\n   * @description\n   * Studies a set of invocables that are likely to be used multiple times.\n   * <pre>\n   * $resolve.study(invocables)(locals, parent, self)\n   * </pre>\n   * is equivalent to\n   * <pre>\n   * $resolve.resolve(invocables, locals, parent, self)\n   * </pre>\n   * but the former is more efficient (in fact `resolve` just calls `study` \n   * internally).\n   *\n   * @param {object} invocables Invocable objects\n   * @return {function} a function to pass in locals, parent and self\n   */\n  this.study = function (invocables) {\n    if (!isObject(invocables)) throw new Error(\"'invocables' must be an object\");\n    var invocableKeys = objectKeys(invocables || {});\n    \n    // Perform a topological sort of invocables to build an ordered plan\n    var plan = [], cycle = [], visited = {};\n    function visit(value, key) {\n      if (visited[key] === VISIT_DONE) return;\n      \n      cycle.push(key);\n      if (visited[key] === VISIT_IN_PROGRESS) {\n        cycle.splice(0, indexOf(cycle, key));\n        throw new Error(\"Cyclic dependency: \" + cycle.join(\" -> \"));\n      }\n      visited[key] = VISIT_IN_PROGRESS;\n      \n      if (isString(value)) {\n        plan.push(key, [ function() { return $injector.get(value); }], NO_DEPENDENCIES);\n      } else {\n        var params = $injector.annotate(value);\n        forEach(params, function (param) {\n          if (param !== key && invocables.hasOwnProperty(param)) visit(invocables[param], param);\n        });\n        plan.push(key, value, params);\n      }\n      \n      cycle.pop();\n      visited[key] = VISIT_DONE;\n    }\n    forEach(invocables, visit);\n    invocables = cycle = visited = null; // plan is all that's required\n    \n    function isResolve(value) {\n      return isObject(value) && value.then && value.$$promises;\n    }\n    \n    return function (locals, parent, self) {\n      if (isResolve(locals) && self === undefined) {\n        self = parent; parent = locals; locals = null;\n      }\n      if (!locals) locals = NO_LOCALS;\n      else if (!isObject(locals)) {\n        throw new Error(\"'locals' must be an object\");\n      }       \n      if (!parent) parent = NO_PARENT;\n      else if (!isResolve(parent)) {\n        throw new Error(\"'parent' must be a promise returned by $resolve.resolve()\");\n      }\n      \n      // To complete the overall resolution, we have to wait for the parent\n      // promise and for the promise for each invokable in our plan.\n      var resolution = $q.defer(),\n          result = resolution.promise,\n          promises = result.$$promises = {},\n          values = extend({}, locals),\n          wait = 1 + plan.length/3,\n          merged = false;\n          \n      function done() {\n        // Merge parent values we haven't got yet and publish our own $$values\n        if (!--wait) {\n          if (!merged) merge(values, parent.$$values); \n          result.$$values = values;\n          result.$$promises = result.$$promises || true; // keep for isResolve()\n          delete result.$$inheritedValues;\n          resolution.resolve(values);\n        }\n      }\n      \n      function fail(reason) {\n        result.$$failure = reason;\n        resolution.reject(reason);\n      }\n\n      // Short-circuit if parent has already failed\n      if (isDefined(parent.$$failure)) {\n        fail(parent.$$failure);\n        return result;\n      }\n      \n      if (parent.$$inheritedValues) {\n        merge(values, omit(parent.$$inheritedValues, invocableKeys));\n      }\n\n      // Merge parent values if the parent has already resolved, or merge\n      // parent promises and wait if the parent resolve is still in progress.\n      extend(promises, parent.$$promises);\n      if (parent.$$values) {\n        merged = merge(values, omit(parent.$$values, invocableKeys));\n        result.$$inheritedValues = omit(parent.$$values, invocableKeys);\n        done();\n      } else {\n        if (parent.$$inheritedValues) {\n          result.$$inheritedValues = omit(parent.$$inheritedValues, invocableKeys);\n        }        \n        parent.then(done, fail);\n      }\n      \n      // Process each invocable in the plan, but ignore any where a local of the same name exists.\n      for (var i=0, ii=plan.length; i<ii; i+=3) {\n        if (locals.hasOwnProperty(plan[i])) done();\n        else invoke(plan[i], plan[i+1], plan[i+2]);\n      }\n      \n      function invoke(key, invocable, params) {\n        // Create a deferred for this invocation. Failures will propagate to the resolution as well.\n        var invocation = $q.defer(), waitParams = 0;\n        function onfailure(reason) {\n          invocation.reject(reason);\n          fail(reason);\n        }\n        // Wait for any parameter that we have a promise for (either from parent or from this\n        // resolve; in that case study() will have made sure it's ordered before us in the plan).\n        forEach(params, function (dep) {\n          if (promises.hasOwnProperty(dep) && !locals.hasOwnProperty(dep)) {\n            waitParams++;\n            promises[dep].then(function (result) {\n              values[dep] = result;\n              if (!(--waitParams)) proceed();\n            }, onfailure);\n          }\n        });\n        if (!waitParams) proceed();\n        function proceed() {\n          if (isDefined(result.$$failure)) return;\n          try {\n            invocation.resolve($injector.invoke(invocable, self, values));\n            invocation.promise.then(function (result) {\n              values[key] = result;\n              done();\n            }, onfailure);\n          } catch (e) {\n            onfailure(e);\n          }\n        }\n        // Publish promise synchronously; invocations further down in the plan may depend on it.\n        promises[key] = invocation.promise;\n      }\n      \n      return result;\n    };\n  };\n  \n  /**\n   * @ngdoc function\n   * @name ui.router.util.$resolve#resolve\n   * @methodOf ui.router.util.$resolve\n   *\n   * @description\n   * Resolves a set of invocables. An invocable is a function to be invoked via \n   * `$injector.invoke()`, and can have an arbitrary number of dependencies. \n   * An invocable can either return a value directly,\n   * or a `$q` promise. If a promise is returned it will be resolved and the \n   * resulting value will be used instead. Dependencies of invocables are resolved \n   * (in this order of precedence)\n   *\n   * - from the specified `locals`\n   * - from another invocable that is part of this `$resolve` call\n   * - from an invocable that is inherited from a `parent` call to `$resolve` \n   *   (or recursively\n   * - from any ancestor `$resolve` of that parent).\n   *\n   * The return value of `$resolve` is a promise for an object that contains \n   * (in this order of precedence)\n   *\n   * - any `locals` (if specified)\n   * - the resolved return values of all injectables\n   * - any values inherited from a `parent` call to `$resolve` (if specified)\n   *\n   * The promise will resolve after the `parent` promise (if any) and all promises \n   * returned by injectables have been resolved. If any invocable \n   * (or `$injector.invoke`) throws an exception, or if a promise returned by an \n   * invocable is rejected, the `$resolve` promise is immediately rejected with the \n   * same error. A rejection of a `parent` promise (if specified) will likewise be \n   * propagated immediately. Once the `$resolve` promise has been rejected, no \n   * further invocables will be called.\n   * \n   * Cyclic dependencies between invocables are not permitted and will cause `$resolve`\n   * to throw an error. As a special case, an injectable can depend on a parameter \n   * with the same name as the injectable, which will be fulfilled from the `parent` \n   * injectable of the same name. This allows inherited values to be decorated. \n   * Note that in this case any other injectable in the same `$resolve` with the same\n   * dependency would see the decorated value, not the inherited value.\n   *\n   * Note that missing dependencies -- unlike cyclic dependencies -- will cause an \n   * (asynchronous) rejection of the `$resolve` promise rather than a (synchronous) \n   * exception.\n   *\n   * Invocables are invoked eagerly as soon as all dependencies are available. \n   * This is true even for dependencies inherited from a `parent` call to `$resolve`.\n   *\n   * As a special case, an invocable can be a string, in which case it is taken to \n   * be a service name to be passed to `$injector.get()`. This is supported primarily \n   * for backwards-compatibility with the `resolve` property of `$routeProvider` \n   * routes.\n   *\n   * @param {object} invocables functions to invoke or \n   * `$injector` services to fetch.\n   * @param {object} locals  values to make available to the injectables\n   * @param {object} parent  a promise returned by another call to `$resolve`.\n   * @param {object} self  the `this` for the invoked methods\n   * @return {object} Promise for an object that contains the resolved return value\n   * of all invocables, as well as any inherited and local values.\n   */\n  this.resolve = function (invocables, locals, parent, self) {\n    return this.study(invocables)(locals, parent, self);\n  };\n}\n\nangular.module('ui.router.util').service('$resolve', $Resolve);\n\n\n/**\n * @ngdoc object\n * @name ui.router.util.$templateFactory\n *\n * @requires $http\n * @requires $templateCache\n * @requires $injector\n *\n * @description\n * Service. Manages loading of templates.\n */\n$TemplateFactory.$inject = ['$http', '$templateCache', '$injector'];\nfunction $TemplateFactory(  $http,   $templateCache,   $injector) {\n\n  /**\n   * @ngdoc function\n   * @name ui.router.util.$templateFactory#fromConfig\n   * @methodOf ui.router.util.$templateFactory\n   *\n   * @description\n   * Creates a template from a configuration object. \n   *\n   * @param {object} config Configuration object for which to load a template. \n   * The following properties are search in the specified order, and the first one \n   * that is defined is used to create the template:\n   *\n   * @param {string|object} config.template html string template or function to \n   * load via {@link ui.router.util.$templateFactory#fromString fromString}.\n   * @param {string|object} config.templateUrl url to load or a function returning \n   * the url to load via {@link ui.router.util.$templateFactory#fromUrl fromUrl}.\n   * @param {Function} config.templateProvider function to invoke via \n   * {@link ui.router.util.$templateFactory#fromProvider fromProvider}.\n   * @param {object} params  Parameters to pass to the template function.\n   * @param {object} locals Locals to pass to `invoke` if the template is loaded \n   * via a `templateProvider`. Defaults to `{ params: params }`.\n   *\n   * @return {string|object}  The template html as a string, or a promise for \n   * that string,or `null` if no template is configured.\n   */\n  this.fromConfig = function (config, params, locals) {\n    return (\n      isDefined(config.template) ? this.fromString(config.template, params) :\n      isDefined(config.templateUrl) ? this.fromUrl(config.templateUrl, params) :\n      isDefined(config.templateProvider) ? this.fromProvider(config.templateProvider, params, locals) :\n      null\n    );\n  };\n\n  /**\n   * @ngdoc function\n   * @name ui.router.util.$templateFactory#fromString\n   * @methodOf ui.router.util.$templateFactory\n   *\n   * @description\n   * Creates a template from a string or a function returning a string.\n   *\n   * @param {string|object} template html template as a string or function that \n   * returns an html template as a string.\n   * @param {object} params Parameters to pass to the template function.\n   *\n   * @return {string|object} The template html as a string, or a promise for that \n   * string.\n   */\n  this.fromString = function (template, params) {\n    return isFunction(template) ? template(params) : template;\n  };\n\n  /**\n   * @ngdoc function\n   * @name ui.router.util.$templateFactory#fromUrl\n   * @methodOf ui.router.util.$templateFactory\n   * \n   * @description\n   * Loads a template from the a URL via `$http` and `$templateCache`.\n   *\n   * @param {string|Function} url url of the template to load, or a function \n   * that returns a url.\n   * @param {Object} params Parameters to pass to the url function.\n   * @return {string|Promise.<string>} The template html as a string, or a promise \n   * for that string.\n   */\n  this.fromUrl = function (url, params) {\n    if (isFunction(url)) url = url(params);\n    if (url == null) return null;\n    else return $http\n        .get(url, { cache: $templateCache, headers: { Accept: 'text/html' }})\n        .then(function(response) { return response.data; });\n  };\n\n  /**\n   * @ngdoc function\n   * @name ui.router.util.$templateFactory#fromProvider\n   * @methodOf ui.router.util.$templateFactory\n   *\n   * @description\n   * Creates a template by invoking an injectable provider function.\n   *\n   * @param {Function} provider Function to invoke via `$injector.invoke`\n   * @param {Object} params Parameters for the template.\n   * @param {Object} locals Locals to pass to `invoke`. Defaults to \n   * `{ params: params }`.\n   * @return {string|Promise.<string>} The template html as a string, or a promise \n   * for that string.\n   */\n  this.fromProvider = function (provider, params, locals) {\n    return $injector.invoke(provider, null, locals || { params: params });\n  };\n}\n\nangular.module('ui.router.util').service('$templateFactory', $TemplateFactory);\n\nvar $$UMFP; // reference to $UrlMatcherFactoryProvider\n\n/**\n * @ngdoc object\n * @name ui.router.util.type:UrlMatcher\n *\n * @description\n * Matches URLs against patterns and extracts named parameters from the path or the search\n * part of the URL. A URL pattern consists of a path pattern, optionally followed by '?' and a list\n * of search parameters. Multiple search parameter names are separated by '&'. Search parameters\n * do not influence whether or not a URL is matched, but their values are passed through into\n * the matched parameters returned by {@link ui.router.util.type:UrlMatcher#methods_exec exec}.\n *\n * Path parameter placeholders can be specified using simple colon/catch-all syntax or curly brace\n * syntax, which optionally allows a regular expression for the parameter to be specified:\n *\n * * `':'` name - colon placeholder\n * * `'*'` name - catch-all placeholder\n * * `'{' name '}'` - curly placeholder\n * * `'{' name ':' regexp|type '}'` - curly placeholder with regexp or type name. Should the\n *   regexp itself contain curly braces, they must be in matched pairs or escaped with a backslash.\n *\n * Parameter names may contain only word characters (latin letters, digits, and underscore) and\n * must be unique within the pattern (across both path and search parameters). For colon\n * placeholders or curly placeholders without an explicit regexp, a path parameter matches any\n * number of characters other than '/'. For catch-all placeholders the path parameter matches\n * any number of characters.\n *\n * Examples:\n *\n * * `'/hello/'` - Matches only if the path is exactly '/hello/'. There is no special treatment for\n *   trailing slashes, and patterns have to match the entire path, not just a prefix.\n * * `'/user/:id'` - Matches '/user/bob' or '/user/1234!!!' or even '/user/' but not '/user' or\n *   '/user/bob/details'. The second path segment will be captured as the parameter 'id'.\n * * `'/user/{id}'` - Same as the previous example, but using curly brace syntax.\n * * `'/user/{id:[^/]*}'` - Same as the previous example.\n * * `'/user/{id:[0-9a-fA-F]{1,8}}'` - Similar to the previous example, but only matches if the id\n *   parameter consists of 1 to 8 hex digits.\n * * `'/files/{path:.*}'` - Matches any URL starting with '/files/' and captures the rest of the\n *   path into the parameter 'path'.\n * * `'/files/*path'` - ditto.\n * * `'/calendar/{start:date}'` - Matches \"/calendar/2014-11-12\" (because the pattern defined\n *   in the built-in  `date` Type matches `2014-11-12`) and provides a Date object in $stateParams.start\n *\n * @param {string} pattern  The pattern to compile into a matcher.\n * @param {Object} config  A configuration object hash:\n * @param {Object=} parentMatcher Used to concatenate the pattern/config onto\n *   an existing UrlMatcher\n *\n * * `caseInsensitive` - `true` if URL matching should be case insensitive, otherwise `false`, the default value (for backward compatibility) is `false`.\n * * `strict` - `false` if matching against a URL with a trailing slash should be treated as equivalent to a URL without a trailing slash, the default value is `true`.\n *\n * @property {string} prefix  A static prefix of this pattern. The matcher guarantees that any\n *   URL matching this matcher (i.e. any string for which {@link ui.router.util.type:UrlMatcher#methods_exec exec()} returns\n *   non-null) will start with this prefix.\n *\n * @property {string} source  The pattern that was passed into the constructor\n *\n * @property {string} sourcePath  The path portion of the source property\n *\n * @property {string} sourceSearch  The search portion of the source property\n *\n * @property {string} regex  The constructed regex that will be used to match against the url when\n *   it is time to determine which url will match.\n *\n * @returns {Object}  New `UrlMatcher` object\n */\nfunction UrlMatcher(pattern, config, parentMatcher) {\n  config = extend({ params: {} }, isObject(config) ? config : {});\n\n  // Find all placeholders and create a compiled pattern, using either classic or curly syntax:\n  //   '*' name\n  //   ':' name\n  //   '{' name '}'\n  //   '{' name ':' regexp '}'\n  // The regular expression is somewhat complicated due to the need to allow curly braces\n  // inside the regular expression. The placeholder regexp breaks down as follows:\n  //    ([:*])([\\w\\[\\]]+)              - classic placeholder ($1 / $2) (search version has - for snake-case)\n  //    \\{([\\w\\[\\]]+)(?:\\:\\s*( ... ))?\\}  - curly brace placeholder ($3) with optional regexp/type ... ($4) (search version has - for snake-case\n  //    (?: ... | ... | ... )+         - the regexp consists of any number of atoms, an atom being either\n  //    [^{}\\\\]+                       - anything other than curly braces or backslash\n  //    \\\\.                            - a backslash escape\n  //    \\{(?:[^{}\\\\]+|\\\\.)*\\}          - a matched set of curly braces containing other atoms\n  var placeholder       = /([:*])([\\w\\[\\]]+)|\\{([\\w\\[\\]]+)(?:\\:\\s*((?:[^{}\\\\]+|\\\\.|\\{(?:[^{}\\\\]+|\\\\.)*\\})+))?\\}/g,\n      searchPlaceholder = /([:]?)([\\w\\[\\].-]+)|\\{([\\w\\[\\].-]+)(?:\\:\\s*((?:[^{}\\\\]+|\\\\.|\\{(?:[^{}\\\\]+|\\\\.)*\\})+))?\\}/g,\n      compiled = '^', last = 0, m,\n      segments = this.segments = [],\n      parentParams = parentMatcher ? parentMatcher.params : {},\n      params = this.params = parentMatcher ? parentMatcher.params.$$new() : new $$UMFP.ParamSet(),\n      paramNames = [];\n\n  function addParameter(id, type, config, location) {\n    paramNames.push(id);\n    if (parentParams[id]) return parentParams[id];\n    if (!/^\\w+([-.]+\\w+)*(?:\\[\\])?$/.test(id)) throw new Error(\"Invalid parameter name '\" + id + \"' in pattern '\" + pattern + \"'\");\n    if (params[id]) throw new Error(\"Duplicate parameter name '\" + id + \"' in pattern '\" + pattern + \"'\");\n    params[id] = new $$UMFP.Param(id, type, config, location);\n    return params[id];\n  }\n\n  function quoteRegExp(string, pattern, squash, optional) {\n    var surroundPattern = ['',''], result = string.replace(/[\\\\\\[\\]\\^$*+?.()|{}]/g, \"\\\\$&\");\n    if (!pattern) return result;\n    switch(squash) {\n      case false: surroundPattern = ['(', ')' + (optional ? \"?\" : \"\")]; break;\n      case true:\n        result = result.replace(/\\/$/, '');\n        surroundPattern = ['(?:\\/(', ')|\\/)?'];\n      break;\n      default:    surroundPattern = ['(' + squash + \"|\", ')?']; break;\n    }\n    return result + surroundPattern[0] + pattern + surroundPattern[1];\n  }\n\n  this.source = pattern;\n\n  // Split into static segments separated by path parameter placeholders.\n  // The number of segments is always 1 more than the number of parameters.\n  function matchDetails(m, isSearch) {\n    var id, regexp, segment, type, cfg, arrayMode;\n    id          = m[2] || m[3]; // IE[78] returns '' for unmatched groups instead of null\n    cfg         = config.params[id];\n    segment     = pattern.substring(last, m.index);\n    regexp      = isSearch ? m[4] : m[4] || (m[1] == '*' ? '.*' : null);\n\n    if (regexp) {\n      type      = $$UMFP.type(regexp) || inherit($$UMFP.type(\"string\"), { pattern: new RegExp(regexp, config.caseInsensitive ? 'i' : undefined) });\n    }\n\n    return {\n      id: id, regexp: regexp, segment: segment, type: type, cfg: cfg\n    };\n  }\n\n  var p, param, segment;\n  while ((m = placeholder.exec(pattern))) {\n    p = matchDetails(m, false);\n    if (p.segment.indexOf('?') >= 0) break; // we're into the search part\n\n    param = addParameter(p.id, p.type, p.cfg, \"path\");\n    compiled += quoteRegExp(p.segment, param.type.pattern.source, param.squash, param.isOptional);\n    segments.push(p.segment);\n    last = placeholder.lastIndex;\n  }\n  segment = pattern.substring(last);\n\n  // Find any search parameter names and remove them from the last segment\n  var i = segment.indexOf('?');\n\n  if (i >= 0) {\n    var search = this.sourceSearch = segment.substring(i);\n    segment = segment.substring(0, i);\n    this.sourcePath = pattern.substring(0, last + i);\n\n    if (search.length > 0) {\n      last = 0;\n      while ((m = searchPlaceholder.exec(search))) {\n        p = matchDetails(m, true);\n        param = addParameter(p.id, p.type, p.cfg, \"search\");\n        last = placeholder.lastIndex;\n        // check if ?&\n      }\n    }\n  } else {\n    this.sourcePath = pattern;\n    this.sourceSearch = '';\n  }\n\n  compiled += quoteRegExp(segment) + (config.strict === false ? '\\/?' : '') + '$';\n  segments.push(segment);\n\n  this.regexp = new RegExp(compiled, config.caseInsensitive ? 'i' : undefined);\n  this.prefix = segments[0];\n  this.$$paramNames = paramNames;\n}\n\n/**\n * @ngdoc function\n * @name ui.router.util.type:UrlMatcher#concat\n * @methodOf ui.router.util.type:UrlMatcher\n *\n * @description\n * Returns a new matcher for a pattern constructed by appending the path part and adding the\n * search parameters of the specified pattern to this pattern. The current pattern is not\n * modified. This can be understood as creating a pattern for URLs that are relative to (or\n * suffixes of) the current pattern.\n *\n * @example\n * The following two matchers are equivalent:\n * <pre>\n * new UrlMatcher('/user/{id}?q').concat('/details?date');\n * new UrlMatcher('/user/{id}/details?q&date');\n * </pre>\n *\n * @param {string} pattern  The pattern to append.\n * @param {Object} config  An object hash of the configuration for the matcher.\n * @returns {UrlMatcher}  A matcher for the concatenated pattern.\n */\nUrlMatcher.prototype.concat = function (pattern, config) {\n  // Because order of search parameters is irrelevant, we can add our own search\n  // parameters to the end of the new pattern. Parse the new pattern by itself\n  // and then join the bits together, but it's much easier to do this on a string level.\n  var defaultConfig = {\n    caseInsensitive: $$UMFP.caseInsensitive(),\n    strict: $$UMFP.strictMode(),\n    squash: $$UMFP.defaultSquashPolicy()\n  };\n  return new UrlMatcher(this.sourcePath + pattern + this.sourceSearch, extend(defaultConfig, config), this);\n};\n\nUrlMatcher.prototype.toString = function () {\n  return this.source;\n};\n\n/**\n * @ngdoc function\n * @name ui.router.util.type:UrlMatcher#exec\n * @methodOf ui.router.util.type:UrlMatcher\n *\n * @description\n * Tests the specified path against this matcher, and returns an object containing the captured\n * parameter values, or null if the path does not match. The returned object contains the values\n * of any search parameters that are mentioned in the pattern, but their value may be null if\n * they are not present in `searchParams`. This means that search parameters are always treated\n * as optional.\n *\n * @example\n * <pre>\n * new UrlMatcher('/user/{id}?q&r').exec('/user/bob', {\n *   x: '1', q: 'hello'\n * });\n * // returns { id: 'bob', q: 'hello', r: null }\n * </pre>\n *\n * @param {string} path  The URL path to match, e.g. `$location.path()`.\n * @param {Object} searchParams  URL search parameters, e.g. `$location.search()`.\n * @returns {Object}  The captured parameter values.\n */\nUrlMatcher.prototype.exec = function (path, searchParams) {\n  var m = this.regexp.exec(path);\n  if (!m) return null;\n  searchParams = searchParams || {};\n\n  var paramNames = this.parameters(), nTotal = paramNames.length,\n    nPath = this.segments.length - 1,\n    values = {}, i, j, cfg, paramName;\n\n  if (nPath !== m.length - 1) throw new Error(\"Unbalanced capture group in route '\" + this.source + \"'\");\n\n  function decodePathArray(string) {\n    function reverseString(str) { return str.split(\"\").reverse().join(\"\"); }\n    function unquoteDashes(str) { return str.replace(/\\\\-/g, \"-\"); }\n\n    var split = reverseString(string).split(/-(?!\\\\)/);\n    var allReversed = map(split, reverseString);\n    return map(allReversed, unquoteDashes).reverse();\n  }\n\n  var param, paramVal;\n  for (i = 0; i < nPath; i++) {\n    paramName = paramNames[i];\n    param = this.params[paramName];\n    paramVal = m[i+1];\n    // if the param value matches a pre-replace pair, replace the value before decoding.\n    for (j = 0; j < param.replace.length; j++) {\n      if (param.replace[j].from === paramVal) paramVal = param.replace[j].to;\n    }\n    if (paramVal && param.array === true) paramVal = decodePathArray(paramVal);\n    if (isDefined(paramVal)) paramVal = param.type.decode(paramVal);\n    values[paramName] = param.value(paramVal);\n  }\n  for (/**/; i < nTotal; i++) {\n    paramName = paramNames[i];\n    values[paramName] = this.params[paramName].value(searchParams[paramName]);\n    param = this.params[paramName];\n    paramVal = searchParams[paramName];\n    for (j = 0; j < param.replace.length; j++) {\n      if (param.replace[j].from === paramVal) paramVal = param.replace[j].to;\n    }\n    if (isDefined(paramVal)) paramVal = param.type.decode(paramVal);\n    values[paramName] = param.value(paramVal);\n  }\n\n  return values;\n};\n\n/**\n * @ngdoc function\n * @name ui.router.util.type:UrlMatcher#parameters\n * @methodOf ui.router.util.type:UrlMatcher\n *\n * @description\n * Returns the names of all path and search parameters of this pattern in an unspecified order.\n *\n * @returns {Array.<string>}  An array of parameter names. Must be treated as read-only. If the\n *    pattern has no parameters, an empty array is returned.\n */\nUrlMatcher.prototype.parameters = function (param) {\n  if (!isDefined(param)) return this.$$paramNames;\n  return this.params[param] || null;\n};\n\n/**\n * @ngdoc function\n * @name ui.router.util.type:UrlMatcher#validates\n * @methodOf ui.router.util.type:UrlMatcher\n *\n * @description\n * Checks an object hash of parameters to validate their correctness according to the parameter\n * types of this `UrlMatcher`.\n *\n * @param {Object} params The object hash of parameters to validate.\n * @returns {boolean} Returns `true` if `params` validates, otherwise `false`.\n */\nUrlMatcher.prototype.validates = function (params) {\n  return this.params.$$validates(params);\n};\n\n/**\n * @ngdoc function\n * @name ui.router.util.type:UrlMatcher#format\n * @methodOf ui.router.util.type:UrlMatcher\n *\n * @description\n * Creates a URL that matches this pattern by substituting the specified values\n * for the path and search parameters. Null values for path parameters are\n * treated as empty strings.\n *\n * @example\n * <pre>\n * new UrlMatcher('/user/{id}?q').format({ id:'bob', q:'yes' });\n * // returns '/user/bob?q=yes'\n * </pre>\n *\n * @param {Object} values  the values to substitute for the parameters in this pattern.\n * @returns {string}  the formatted URL (path and optionally search part).\n */\nUrlMatcher.prototype.format = function (values) {\n  values = values || {};\n  var segments = this.segments, params = this.parameters(), paramset = this.params;\n  if (!this.validates(values)) return null;\n\n  var i, search = false, nPath = segments.length - 1, nTotal = params.length, result = segments[0];\n\n  function encodeDashes(str) { // Replace dashes with encoded \"\\-\"\n    return encodeURIComponent(str).replace(/-/g, function(c) { return '%5C%' + c.charCodeAt(0).toString(16).toUpperCase(); });\n  }\n\n  for (i = 0; i < nTotal; i++) {\n    var isPathParam = i < nPath;\n    var name = params[i], param = paramset[name], value = param.value(values[name]);\n    var isDefaultValue = param.isOptional && param.type.equals(param.value(), value);\n    var squash = isDefaultValue ? param.squash : false;\n    var encoded = param.type.encode(value);\n\n    if (isPathParam) {\n      var nextSegment = segments[i + 1];\n      var isFinalPathParam = i + 1 === nPath;\n\n      if (squash === false) {\n        if (encoded != null) {\n          if (isArray(encoded)) {\n            result += map(encoded, encodeDashes).join(\"-\");\n          } else {\n            result += encodeURIComponent(encoded);\n          }\n        }\n        result += nextSegment;\n      } else if (squash === true) {\n        var capture = result.match(/\\/$/) ? /\\/?(.*)/ : /(.*)/;\n        result += nextSegment.match(capture)[1];\n      } else if (isString(squash)) {\n        result += squash + nextSegment;\n      }\n\n      if (isFinalPathParam && param.squash === true && result.slice(-1) === '/') result = result.slice(0, -1);\n    } else {\n      if (encoded == null || (isDefaultValue && squash !== false)) continue;\n      if (!isArray(encoded)) encoded = [ encoded ];\n      if (encoded.length === 0) continue;\n      encoded = map(encoded, encodeURIComponent).join('&' + name + '=');\n      result += (search ? '&' : '?') + (name + '=' + encoded);\n      search = true;\n    }\n  }\n\n  return result;\n};\n\n/**\n * @ngdoc object\n * @name ui.router.util.type:Type\n *\n * @description\n * Implements an interface to define custom parameter types that can be decoded from and encoded to\n * string parameters matched in a URL. Used by {@link ui.router.util.type:UrlMatcher `UrlMatcher`}\n * objects when matching or formatting URLs, or comparing or validating parameter values.\n *\n * See {@link ui.router.util.$urlMatcherFactory#methods_type `$urlMatcherFactory#type()`} for more\n * information on registering custom types.\n *\n * @param {Object} config  A configuration object which contains the custom type definition.  The object's\n *        properties will override the default methods and/or pattern in `Type`'s public interface.\n * @example\n * <pre>\n * {\n *   decode: function(val) { return parseInt(val, 10); },\n *   encode: function(val) { return val && val.toString(); },\n *   equals: function(a, b) { return this.is(a) && a === b; },\n *   is: function(val) { return angular.isNumber(val) isFinite(val) && val % 1 === 0; },\n *   pattern: /\\d+/\n * }\n * </pre>\n *\n * @property {RegExp} pattern The regular expression pattern used to match values of this type when\n *           coming from a substring of a URL.\n *\n * @returns {Object}  Returns a new `Type` object.\n */\nfunction Type(config) {\n  extend(this, config);\n}\n\n/**\n * @ngdoc function\n * @name ui.router.util.type:Type#is\n * @methodOf ui.router.util.type:Type\n *\n * @description\n * Detects whether a value is of a particular type. Accepts a native (decoded) value\n * and determines whether it matches the current `Type` object.\n *\n * @param {*} val  The value to check.\n * @param {string} key  Optional. If the type check is happening in the context of a specific\n *        {@link ui.router.util.type:UrlMatcher `UrlMatcher`} object, this is the name of the\n *        parameter in which `val` is stored. Can be used for meta-programming of `Type` objects.\n * @returns {Boolean}  Returns `true` if the value matches the type, otherwise `false`.\n */\nType.prototype.is = function(val, key) {\n  return true;\n};\n\n/**\n * @ngdoc function\n * @name ui.router.util.type:Type#encode\n * @methodOf ui.router.util.type:Type\n *\n * @description\n * Encodes a custom/native type value to a string that can be embedded in a URL. Note that the\n * return value does *not* need to be URL-safe (i.e. passed through `encodeURIComponent()`), it\n * only needs to be a representation of `val` that has been coerced to a string.\n *\n * @param {*} val  The value to encode.\n * @param {string} key  The name of the parameter in which `val` is stored. Can be used for\n *        meta-programming of `Type` objects.\n * @returns {string}  Returns a string representation of `val` that can be encoded in a URL.\n */\nType.prototype.encode = function(val, key) {\n  return val;\n};\n\n/**\n * @ngdoc function\n * @name ui.router.util.type:Type#decode\n * @methodOf ui.router.util.type:Type\n *\n * @description\n * Converts a parameter value (from URL string or transition param) to a custom/native value.\n *\n * @param {string} val  The URL parameter value to decode.\n * @param {string} key  The name of the parameter in which `val` is stored. Can be used for\n *        meta-programming of `Type` objects.\n * @returns {*}  Returns a custom representation of the URL parameter value.\n */\nType.prototype.decode = function(val, key) {\n  return val;\n};\n\n/**\n * @ngdoc function\n * @name ui.router.util.type:Type#equals\n * @methodOf ui.router.util.type:Type\n *\n * @description\n * Determines whether two decoded values are equivalent.\n *\n * @param {*} a  A value to compare against.\n * @param {*} b  A value to compare against.\n * @returns {Boolean}  Returns `true` if the values are equivalent/equal, otherwise `false`.\n */\nType.prototype.equals = function(a, b) {\n  return a == b;\n};\n\nType.prototype.$subPattern = function() {\n  var sub = this.pattern.toString();\n  return sub.substr(1, sub.length - 2);\n};\n\nType.prototype.pattern = /.*/;\n\nType.prototype.toString = function() { return \"{Type:\" + this.name + \"}\"; };\n\n/** Given an encoded string, or a decoded object, returns a decoded object */\nType.prototype.$normalize = function(val) {\n  return this.is(val) ? val : this.decode(val);\n};\n\n/*\n * Wraps an existing custom Type as an array of Type, depending on 'mode'.\n * e.g.:\n * - urlmatcher pattern \"/path?{queryParam[]:int}\"\n * - url: \"/path?queryParam=1&queryParam=2\n * - $stateParams.queryParam will be [1, 2]\n * if `mode` is \"auto\", then\n * - url: \"/path?queryParam=1 will create $stateParams.queryParam: 1\n * - url: \"/path?queryParam=1&queryParam=2 will create $stateParams.queryParam: [1, 2]\n */\nType.prototype.$asArray = function(mode, isSearch) {\n  if (!mode) return this;\n  if (mode === \"auto\" && !isSearch) throw new Error(\"'auto' array mode is for query parameters only\");\n\n  function ArrayType(type, mode) {\n    function bindTo(type, callbackName) {\n      return function() {\n        return type[callbackName].apply(type, arguments);\n      };\n    }\n\n    // Wrap non-array value as array\n    function arrayWrap(val) { return isArray(val) ? val : (isDefined(val) ? [ val ] : []); }\n    // Unwrap array value for \"auto\" mode. Return undefined for empty array.\n    function arrayUnwrap(val) {\n      switch(val.length) {\n        case 0: return undefined;\n        case 1: return mode === \"auto\" ? val[0] : val;\n        default: return val;\n      }\n    }\n    function falsey(val) { return !val; }\n\n    // Wraps type (.is/.encode/.decode) functions to operate on each value of an array\n    function arrayHandler(callback, allTruthyMode) {\n      return function handleArray(val) {\n        if (isArray(val) && val.length === 0) return val;\n        val = arrayWrap(val);\n        var result = map(val, callback);\n        if (allTruthyMode === true)\n          return filter(result, falsey).length === 0;\n        return arrayUnwrap(result);\n      };\n    }\n\n    // Wraps type (.equals) functions to operate on each value of an array\n    function arrayEqualsHandler(callback) {\n      return function handleArray(val1, val2) {\n        var left = arrayWrap(val1), right = arrayWrap(val2);\n        if (left.length !== right.length) return false;\n        for (var i = 0; i < left.length; i++) {\n          if (!callback(left[i], right[i])) return false;\n        }\n        return true;\n      };\n    }\n\n    this.encode = arrayHandler(bindTo(type, 'encode'));\n    this.decode = arrayHandler(bindTo(type, 'decode'));\n    this.is     = arrayHandler(bindTo(type, 'is'), true);\n    this.equals = arrayEqualsHandler(bindTo(type, 'equals'));\n    this.pattern = type.pattern;\n    this.$normalize = arrayHandler(bindTo(type, '$normalize'));\n    this.name = type.name;\n    this.$arrayMode = mode;\n  }\n\n  return new ArrayType(this, mode);\n};\n\n\n\n/**\n * @ngdoc object\n * @name ui.router.util.$urlMatcherFactory\n *\n * @description\n * Factory for {@link ui.router.util.type:UrlMatcher `UrlMatcher`} instances. The factory\n * is also available to providers under the name `$urlMatcherFactoryProvider`.\n */\nfunction $UrlMatcherFactory() {\n  $$UMFP = this;\n\n  var isCaseInsensitive = false, isStrictMode = true, defaultSquashPolicy = false;\n\n  // Use tildes to pre-encode slashes.\n  // If the slashes are simply URLEncoded, the browser can choose to pre-decode them,\n  // and bidirectional encoding/decoding fails.\n  // Tilde was chosen because it's not a RFC 3986 section 2.2 Reserved Character\n  function valToString(val) { return val != null ? val.toString().replace(/(~|\\/)/g, function (m) { return {'~':'~~', '/':'~2F'}[m]; }) : val; }\n  function valFromString(val) { return val != null ? val.toString().replace(/(~~|~2F)/g, function (m) { return {'~~':'~', '~2F':'/'}[m]; }) : val; }\n\n  var $types = {}, enqueue = true, typeQueue = [], injector, defaultTypes = {\n    \"string\": {\n      encode: valToString,\n      decode: valFromString,\n      // TODO: in 1.0, make string .is() return false if value is undefined/null by default.\n      // In 0.2.x, string params are optional by default for backwards compat\n      is: function(val) { return val == null || !isDefined(val) || typeof val === \"string\"; },\n      pattern: /[^/]*/\n    },\n    \"int\": {\n      encode: valToString,\n      decode: function(val) { return parseInt(val, 10); },\n      is: function(val) { return isDefined(val) && this.decode(val.toString()) === val; },\n      pattern: /\\d+/\n    },\n    \"bool\": {\n      encode: function(val) { return val ? 1 : 0; },\n      decode: function(val) { return parseInt(val, 10) !== 0; },\n      is: function(val) { return val === true || val === false; },\n      pattern: /0|1/\n    },\n    \"date\": {\n      encode: function (val) {\n        if (!this.is(val))\n          return undefined;\n        return [ val.getFullYear(),\n          ('0' + (val.getMonth() + 1)).slice(-2),\n          ('0' + val.getDate()).slice(-2)\n        ].join(\"-\");\n      },\n      decode: function (val) {\n        if (this.is(val)) return val;\n        var match = this.capture.exec(val);\n        return match ? new Date(match[1], match[2] - 1, match[3]) : undefined;\n      },\n      is: function(val) { return val instanceof Date && !isNaN(val.valueOf()); },\n      equals: function (a, b) { return this.is(a) && this.is(b) && a.toISOString() === b.toISOString(); },\n      pattern: /[0-9]{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[1-2][0-9]|3[0-1])/,\n      capture: /([0-9]{4})-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])/\n    },\n    \"json\": {\n      encode: angular.toJson,\n      decode: angular.fromJson,\n      is: angular.isObject,\n      equals: angular.equals,\n      pattern: /[^/]*/\n    },\n    \"any\": { // does not encode/decode\n      encode: angular.identity,\n      decode: angular.identity,\n      equals: angular.equals,\n      pattern: /.*/\n    }\n  };\n\n  function getDefaultConfig() {\n    return {\n      strict: isStrictMode,\n      caseInsensitive: isCaseInsensitive\n    };\n  }\n\n  function isInjectable(value) {\n    return (isFunction(value) || (isArray(value) && isFunction(value[value.length - 1])));\n  }\n\n  /**\n   * [Internal] Get the default value of a parameter, which may be an injectable function.\n   */\n  $UrlMatcherFactory.$$getDefaultValue = function(config) {\n    if (!isInjectable(config.value)) return config.value;\n    if (!injector) throw new Error(\"Injectable functions cannot be called at configuration time\");\n    return injector.invoke(config.value);\n  };\n\n  /**\n   * @ngdoc function\n   * @name ui.router.util.$urlMatcherFactory#caseInsensitive\n   * @methodOf ui.router.util.$urlMatcherFactory\n   *\n   * @description\n   * Defines whether URL matching should be case sensitive (the default behavior), or not.\n   *\n   * @param {boolean} value `false` to match URL in a case sensitive manner; otherwise `true`;\n   * @returns {boolean} the current value of caseInsensitive\n   */\n  this.caseInsensitive = function(value) {\n    if (isDefined(value))\n      isCaseInsensitive = value;\n    return isCaseInsensitive;\n  };\n\n  /**\n   * @ngdoc function\n   * @name ui.router.util.$urlMatcherFactory#strictMode\n   * @methodOf ui.router.util.$urlMatcherFactory\n   *\n   * @description\n   * Defines whether URLs should match trailing slashes, or not (the default behavior).\n   *\n   * @param {boolean=} value `false` to match trailing slashes in URLs, otherwise `true`.\n   * @returns {boolean} the current value of strictMode\n   */\n  this.strictMode = function(value) {\n    if (isDefined(value))\n      isStrictMode = value;\n    return isStrictMode;\n  };\n\n  /**\n   * @ngdoc function\n   * @name ui.router.util.$urlMatcherFactory#defaultSquashPolicy\n   * @methodOf ui.router.util.$urlMatcherFactory\n   *\n   * @description\n   * Sets the default behavior when generating or matching URLs with default parameter values.\n   *\n   * @param {string} value A string that defines the default parameter URL squashing behavior.\n   *    `nosquash`: When generating an href with a default parameter value, do not squash the parameter value from the URL\n   *    `slash`: When generating an href with a default parameter value, squash (remove) the parameter value, and, if the\n   *             parameter is surrounded by slashes, squash (remove) one slash from the URL\n   *    any other string, e.g. \"~\": When generating an href with a default parameter value, squash (remove)\n   *             the parameter value from the URL and replace it with this string.\n   */\n  this.defaultSquashPolicy = function(value) {\n    if (!isDefined(value)) return defaultSquashPolicy;\n    if (value !== true && value !== false && !isString(value))\n      throw new Error(\"Invalid squash policy: \" + value + \". Valid policies: false, true, arbitrary-string\");\n    defaultSquashPolicy = value;\n    return value;\n  };\n\n  /**\n   * @ngdoc function\n   * @name ui.router.util.$urlMatcherFactory#compile\n   * @methodOf ui.router.util.$urlMatcherFactory\n   *\n   * @description\n   * Creates a {@link ui.router.util.type:UrlMatcher `UrlMatcher`} for the specified pattern.\n   *\n   * @param {string} pattern  The URL pattern.\n   * @param {Object} config  The config object hash.\n   * @returns {UrlMatcher}  The UrlMatcher.\n   */\n  this.compile = function (pattern, config) {\n    return new UrlMatcher(pattern, extend(getDefaultConfig(), config));\n  };\n\n  /**\n   * @ngdoc function\n   * @name ui.router.util.$urlMatcherFactory#isMatcher\n   * @methodOf ui.router.util.$urlMatcherFactory\n   *\n   * @description\n   * Returns true if the specified object is a `UrlMatcher`, or false otherwise.\n   *\n   * @param {Object} object  The object to perform the type check against.\n   * @returns {Boolean}  Returns `true` if the object matches the `UrlMatcher` interface, by\n   *          implementing all the same methods.\n   */\n  this.isMatcher = function (o) {\n    if (!isObject(o)) return false;\n    var result = true;\n\n    forEach(UrlMatcher.prototype, function(val, name) {\n      if (isFunction(val)) {\n        result = result && (isDefined(o[name]) && isFunction(o[name]));\n      }\n    });\n    return result;\n  };\n\n  /**\n   * @ngdoc function\n   * @name ui.router.util.$urlMatcherFactory#type\n   * @methodOf ui.router.util.$urlMatcherFactory\n   *\n   * @description\n   * Registers a custom {@link ui.router.util.type:Type `Type`} object that can be used to\n   * generate URLs with typed parameters.\n   *\n   * @param {string} name  The type name.\n   * @param {Object|Function} definition   The type definition. See\n   *        {@link ui.router.util.type:Type `Type`} for information on the values accepted.\n   * @param {Object|Function} definitionFn (optional) A function that is injected before the app\n   *        runtime starts.  The result of this function is merged into the existing `definition`.\n   *        See {@link ui.router.util.type:Type `Type`} for information on the values accepted.\n   *\n   * @returns {Object}  Returns `$urlMatcherFactoryProvider`.\n   *\n   * @example\n   * This is a simple example of a custom type that encodes and decodes items from an\n   * array, using the array index as the URL-encoded value:\n   *\n   * <pre>\n   * var list = ['John', 'Paul', 'George', 'Ringo'];\n   *\n   * $urlMatcherFactoryProvider.type('listItem', {\n   *   encode: function(item) {\n   *     // Represent the list item in the URL using its corresponding index\n   *     return list.indexOf(item);\n   *   },\n   *   decode: function(item) {\n   *     // Look up the list item by index\n   *     return list[parseInt(item, 10)];\n   *   },\n   *   is: function(item) {\n   *     // Ensure the item is valid by checking to see that it appears\n   *     // in the list\n   *     return list.indexOf(item) > -1;\n   *   }\n   * });\n   *\n   * $stateProvider.state('list', {\n   *   url: \"/list/{item:listItem}\",\n   *   controller: function($scope, $stateParams) {\n   *     console.log($stateParams.item);\n   *   }\n   * });\n   *\n   * // ...\n   *\n   * // Changes URL to '/list/3', logs \"Ringo\" to the console\n   * $state.go('list', { item: \"Ringo\" });\n   * </pre>\n   *\n   * This is a more complex example of a type that relies on dependency injection to\n   * interact with services, and uses the parameter name from the URL to infer how to\n   * handle encoding and decoding parameter values:\n   *\n   * <pre>\n   * // Defines a custom type that gets a value from a service,\n   * // where each service gets different types of values from\n   * // a backend API:\n   * $urlMatcherFactoryProvider.type('dbObject', {}, function(Users, Posts) {\n   *\n   *   // Matches up services to URL parameter names\n   *   var services = {\n   *     user: Users,\n   *     post: Posts\n   *   };\n   *\n   *   return {\n   *     encode: function(object) {\n   *       // Represent the object in the URL using its unique ID\n   *       return object.id;\n   *     },\n   *     decode: function(value, key) {\n   *       // Look up the object by ID, using the parameter\n   *       // name (key) to call the correct service\n   *       return services[key].findById(value);\n   *     },\n   *     is: function(object, key) {\n   *       // Check that object is a valid dbObject\n   *       return angular.isObject(object) && object.id && services[key];\n   *     }\n   *     equals: function(a, b) {\n   *       // Check the equality of decoded objects by comparing\n   *       // their unique IDs\n   *       return a.id === b.id;\n   *     }\n   *   };\n   * });\n   *\n   * // In a config() block, you can then attach URLs with\n   * // type-annotated parameters:\n   * $stateProvider.state('users', {\n   *   url: \"/users\",\n   *   // ...\n   * }).state('users.item', {\n   *   url: \"/{user:dbObject}\",\n   *   controller: function($scope, $stateParams) {\n   *     // $stateParams.user will now be an object returned from\n   *     // the Users service\n   *   },\n   *   // ...\n   * });\n   * </pre>\n   */\n  this.type = function (name, definition, definitionFn) {\n    if (!isDefined(definition)) return $types[name];\n    if ($types.hasOwnProperty(name)) throw new Error(\"A type named '\" + name + \"' has already been defined.\");\n\n    $types[name] = new Type(extend({ name: name }, definition));\n    if (definitionFn) {\n      typeQueue.push({ name: name, def: definitionFn });\n      if (!enqueue) flushTypeQueue();\n    }\n    return this;\n  };\n\n  // `flushTypeQueue()` waits until `$urlMatcherFactory` is injected before invoking the queued `definitionFn`s\n  function flushTypeQueue() {\n    while(typeQueue.length) {\n      var type = typeQueue.shift();\n      if (type.pattern) throw new Error(\"You cannot override a type's .pattern at runtime.\");\n      angular.extend($types[type.name], injector.invoke(type.def));\n    }\n  }\n\n  // Register default types. Store them in the prototype of $types.\n  forEach(defaultTypes, function(type, name) { $types[name] = new Type(extend({name: name}, type)); });\n  $types = inherit($types, {});\n\n  /* No need to document $get, since it returns this */\n  this.$get = ['$injector', function ($injector) {\n    injector = $injector;\n    enqueue = false;\n    flushTypeQueue();\n\n    forEach(defaultTypes, function(type, name) {\n      if (!$types[name]) $types[name] = new Type(type);\n    });\n    return this;\n  }];\n\n  this.Param = function Param(id, type, config, location) {\n    var self = this;\n    config = unwrapShorthand(config);\n    type = getType(config, type, location);\n    var arrayMode = getArrayMode();\n    type = arrayMode ? type.$asArray(arrayMode, location === \"search\") : type;\n    if (type.name === \"string\" && !arrayMode && location === \"path\" && config.value === undefined)\n      config.value = \"\"; // for 0.2.x; in 0.3.0+ do not automatically default to \"\"\n    var isOptional = config.value !== undefined;\n    var squash = getSquashPolicy(config, isOptional);\n    var replace = getReplace(config, arrayMode, isOptional, squash);\n\n    function unwrapShorthand(config) {\n      var keys = isObject(config) ? objectKeys(config) : [];\n      var isShorthand = indexOf(keys, \"value\") === -1 && indexOf(keys, \"type\") === -1 &&\n                        indexOf(keys, \"squash\") === -1 && indexOf(keys, \"array\") === -1;\n      if (isShorthand) config = { value: config };\n      config.$$fn = isInjectable(config.value) ? config.value : function () { return config.value; };\n      return config;\n    }\n\n    function getType(config, urlType, location) {\n      if (config.type && urlType) throw new Error(\"Param '\"+id+\"' has two type configurations.\");\n      if (urlType) return urlType;\n      if (!config.type) return (location === \"config\" ? $types.any : $types.string);\n\n      if (angular.isString(config.type))\n        return $types[config.type];\n      if (config.type instanceof Type)\n        return config.type;\n      return new Type(config.type);\n    }\n\n    // array config: param name (param[]) overrides default settings.  explicit config overrides param name.\n    function getArrayMode() {\n      var arrayDefaults = { array: (location === \"search\" ? \"auto\" : false) };\n      var arrayParamNomenclature = id.match(/\\[\\]$/) ? { array: true } : {};\n      return extend(arrayDefaults, arrayParamNomenclature, config).array;\n    }\n\n    /**\n     * returns false, true, or the squash value to indicate the \"default parameter url squash policy\".\n     */\n    function getSquashPolicy(config, isOptional) {\n      var squash = config.squash;\n      if (!isOptional || squash === false) return false;\n      if (!isDefined(squash) || squash == null) return defaultSquashPolicy;\n      if (squash === true || isString(squash)) return squash;\n      throw new Error(\"Invalid squash policy: '\" + squash + \"'. Valid policies: false, true, or arbitrary string\");\n    }\n\n    function getReplace(config, arrayMode, isOptional, squash) {\n      var replace, configuredKeys, defaultPolicy = [\n        { from: \"\",   to: (isOptional || arrayMode ? undefined : \"\") },\n        { from: null, to: (isOptional || arrayMode ? undefined : \"\") }\n      ];\n      replace = isArray(config.replace) ? config.replace : [];\n      if (isString(squash))\n        replace.push({ from: squash, to: undefined });\n      configuredKeys = map(replace, function(item) { return item.from; } );\n      return filter(defaultPolicy, function(item) { return indexOf(configuredKeys, item.from) === -1; }).concat(replace);\n    }\n\n    /**\n     * [Internal] Get the default value of a parameter, which may be an injectable function.\n     */\n    function $$getDefaultValue() {\n      if (!injector) throw new Error(\"Injectable functions cannot be called at configuration time\");\n      var defaultValue = injector.invoke(config.$$fn);\n      if (defaultValue !== null && defaultValue !== undefined && !self.type.is(defaultValue))\n        throw new Error(\"Default value (\" + defaultValue + \") for parameter '\" + self.id + \"' is not an instance of Type (\" + self.type.name + \")\");\n      return defaultValue;\n    }\n\n    /**\n     * [Internal] Gets the decoded representation of a value if the value is defined, otherwise, returns the\n     * default value, which may be the result of an injectable function.\n     */\n    function $value(value) {\n      function hasReplaceVal(val) { return function(obj) { return obj.from === val; }; }\n      function $replace(value) {\n        var replacement = map(filter(self.replace, hasReplaceVal(value)), function(obj) { return obj.to; });\n        return replacement.length ? replacement[0] : value;\n      }\n      value = $replace(value);\n      return !isDefined(value) ? $$getDefaultValue() : self.type.$normalize(value);\n    }\n\n    function toString() { return \"{Param:\" + id + \" \" + type + \" squash: '\" + squash + \"' optional: \" + isOptional + \"}\"; }\n\n    extend(this, {\n      id: id,\n      type: type,\n      location: location,\n      array: arrayMode,\n      squash: squash,\n      replace: replace,\n      isOptional: isOptional,\n      value: $value,\n      dynamic: undefined,\n      config: config,\n      toString: toString\n    });\n  };\n\n  function ParamSet(params) {\n    extend(this, params || {});\n  }\n\n  ParamSet.prototype = {\n    $$new: function() {\n      return inherit(this, extend(new ParamSet(), { $$parent: this}));\n    },\n    $$keys: function () {\n      var keys = [], chain = [], parent = this,\n        ignore = objectKeys(ParamSet.prototype);\n      while (parent) { chain.push(parent); parent = parent.$$parent; }\n      chain.reverse();\n      forEach(chain, function(paramset) {\n        forEach(objectKeys(paramset), function(key) {\n            if (indexOf(keys, key) === -1 && indexOf(ignore, key) === -1) keys.push(key);\n        });\n      });\n      return keys;\n    },\n    $$values: function(paramValues) {\n      var values = {}, self = this;\n      forEach(self.$$keys(), function(key) {\n        values[key] = self[key].value(paramValues && paramValues[key]);\n      });\n      return values;\n    },\n    $$equals: function(paramValues1, paramValues2) {\n      var equal = true, self = this;\n      forEach(self.$$keys(), function(key) {\n        var left = paramValues1 && paramValues1[key], right = paramValues2 && paramValues2[key];\n        if (!self[key].type.equals(left, right)) equal = false;\n      });\n      return equal;\n    },\n    $$validates: function $$validate(paramValues) {\n      var keys = this.$$keys(), i, param, rawVal, normalized, encoded;\n      for (i = 0; i < keys.length; i++) {\n        param = this[keys[i]];\n        rawVal = paramValues[keys[i]];\n        if ((rawVal === undefined || rawVal === null) && param.isOptional)\n          break; // There was no parameter value, but the param is optional\n        normalized = param.type.$normalize(rawVal);\n        if (!param.type.is(normalized))\n          return false; // The value was not of the correct Type, and could not be decoded to the correct Type\n        encoded = param.type.encode(normalized);\n        if (angular.isString(encoded) && !param.type.pattern.exec(encoded))\n          return false; // The value was of the correct type, but when encoded, did not match the Type's regexp\n      }\n      return true;\n    },\n    $$parent: undefined\n  };\n\n  this.ParamSet = ParamSet;\n}\n\n// Register as a provider so it's available to other providers\nangular.module('ui.router.util').provider('$urlMatcherFactory', $UrlMatcherFactory);\nangular.module('ui.router.util').run(['$urlMatcherFactory', function($urlMatcherFactory) { }]);\n\n/**\n * @ngdoc object\n * @name ui.router.router.$urlRouterProvider\n *\n * @requires ui.router.util.$urlMatcherFactoryProvider\n * @requires $locationProvider\n *\n * @description\n * `$urlRouterProvider` has the responsibility of watching `$location`. \n * When `$location` changes it runs through a list of rules one by one until a \n * match is found. `$urlRouterProvider` is used behind the scenes anytime you specify \n * a url in a state configuration. All urls are compiled into a UrlMatcher object.\n *\n * There are several methods on `$urlRouterProvider` that make it useful to use directly\n * in your module config.\n */\n$UrlRouterProvider.$inject = ['$locationProvider', '$urlMatcherFactoryProvider'];\nfunction $UrlRouterProvider(   $locationProvider,   $urlMatcherFactory) {\n  var rules = [], otherwise = null, interceptDeferred = false, listener;\n\n  // Returns a string that is a prefix of all strings matching the RegExp\n  function regExpPrefix(re) {\n    var prefix = /^\\^((?:\\\\[^a-zA-Z0-9]|[^\\\\\\[\\]\\^$*+?.()|{}]+)*)/.exec(re.source);\n    return (prefix != null) ? prefix[1].replace(/\\\\(.)/g, \"$1\") : '';\n  }\n\n  // Interpolates matched values into a String.replace()-style pattern\n  function interpolate(pattern, match) {\n    return pattern.replace(/\\$(\\$|\\d{1,2})/, function (m, what) {\n      return match[what === '$' ? 0 : Number(what)];\n    });\n  }\n\n  /**\n   * @ngdoc function\n   * @name ui.router.router.$urlRouterProvider#rule\n   * @methodOf ui.router.router.$urlRouterProvider\n   *\n   * @description\n   * Defines rules that are used by `$urlRouterProvider` to find matches for\n   * specific URLs.\n   *\n   * @example\n   * <pre>\n   * var app = angular.module('app', ['ui.router.router']);\n   *\n   * app.config(function ($urlRouterProvider) {\n   *   // Here's an example of how you might allow case insensitive urls\n   *   $urlRouterProvider.rule(function ($injector, $location) {\n   *     var path = $location.path(),\n   *         normalized = path.toLowerCase();\n   *\n   *     if (path !== normalized) {\n   *       return normalized;\n   *     }\n   *   });\n   * });\n   * </pre>\n   *\n   * @param {function} rule Handler function that takes `$injector` and `$location`\n   * services as arguments. You can use them to return a valid path as a string.\n   *\n   * @return {object} `$urlRouterProvider` - `$urlRouterProvider` instance\n   */\n  this.rule = function (rule) {\n    if (!isFunction(rule)) throw new Error(\"'rule' must be a function\");\n    rules.push(rule);\n    return this;\n  };\n\n  /**\n   * @ngdoc object\n   * @name ui.router.router.$urlRouterProvider#otherwise\n   * @methodOf ui.router.router.$urlRouterProvider\n   *\n   * @description\n   * Defines a path that is used when an invalid route is requested.\n   *\n   * @example\n   * <pre>\n   * var app = angular.module('app', ['ui.router.router']);\n   *\n   * app.config(function ($urlRouterProvider) {\n   *   // if the path doesn't match any of the urls you configured\n   *   // otherwise will take care of routing the user to the\n   *   // specified url\n   *   $urlRouterProvider.otherwise('/index');\n   *\n   *   // Example of using function rule as param\n   *   $urlRouterProvider.otherwise(function ($injector, $location) {\n   *     return '/a/valid/url';\n   *   });\n   * });\n   * </pre>\n   *\n   * @param {string|function} rule The url path you want to redirect to or a function \n   * rule that returns the url path. The function version is passed two params: \n   * `$injector` and `$location` services, and must return a url string.\n   *\n   * @return {object} `$urlRouterProvider` - `$urlRouterProvider` instance\n   */\n  this.otherwise = function (rule) {\n    if (isString(rule)) {\n      var redirect = rule;\n      rule = function () { return redirect; };\n    }\n    else if (!isFunction(rule)) throw new Error(\"'rule' must be a function\");\n    otherwise = rule;\n    return this;\n  };\n\n\n  function handleIfMatch($injector, handler, match) {\n    if (!match) return false;\n    var result = $injector.invoke(handler, handler, { $match: match });\n    return isDefined(result) ? result : true;\n  }\n\n  /**\n   * @ngdoc function\n   * @name ui.router.router.$urlRouterProvider#when\n   * @methodOf ui.router.router.$urlRouterProvider\n   *\n   * @description\n   * Registers a handler for a given url matching. \n   * \n   * If the handler is a string, it is\n   * treated as a redirect, and is interpolated according to the syntax of match\n   * (i.e. like `String.replace()` for `RegExp`, or like a `UrlMatcher` pattern otherwise).\n   *\n   * If the handler is a function, it is injectable. It gets invoked if `$location`\n   * matches. You have the option of inject the match object as `$match`.\n   *\n   * The handler can return\n   *\n   * - **falsy** to indicate that the rule didn't match after all, then `$urlRouter`\n   *   will continue trying to find another one that matches.\n   * - **string** which is treated as a redirect and passed to `$location.url()`\n   * - **void** or any **truthy** value tells `$urlRouter` that the url was handled.\n   *\n   * @example\n   * <pre>\n   * var app = angular.module('app', ['ui.router.router']);\n   *\n   * app.config(function ($urlRouterProvider) {\n   *   $urlRouterProvider.when($state.url, function ($match, $stateParams) {\n   *     if ($state.$current.navigable !== state ||\n   *         !equalForKeys($match, $stateParams) {\n   *      $state.transitionTo(state, $match, false);\n   *     }\n   *   });\n   * });\n   * </pre>\n   *\n   * @param {string|object} what The incoming path that you want to redirect.\n   * @param {string|function} handler The path you want to redirect your user to.\n   */\n  this.when = function (what, handler) {\n    var redirect, handlerIsString = isString(handler);\n    if (isString(what)) what = $urlMatcherFactory.compile(what);\n\n    if (!handlerIsString && !isFunction(handler) && !isArray(handler))\n      throw new Error(\"invalid 'handler' in when()\");\n\n    var strategies = {\n      matcher: function (what, handler) {\n        if (handlerIsString) {\n          redirect = $urlMatcherFactory.compile(handler);\n          handler = ['$match', function ($match) { return redirect.format($match); }];\n        }\n        return extend(function ($injector, $location) {\n          return handleIfMatch($injector, handler, what.exec($location.path(), $location.search()));\n        }, {\n          prefix: isString(what.prefix) ? what.prefix : ''\n        });\n      },\n      regex: function (what, handler) {\n        if (what.global || what.sticky) throw new Error(\"when() RegExp must not be global or sticky\");\n\n        if (handlerIsString) {\n          redirect = handler;\n          handler = ['$match', function ($match) { return interpolate(redirect, $match); }];\n        }\n        return extend(function ($injector, $location) {\n          return handleIfMatch($injector, handler, what.exec($location.path()));\n        }, {\n          prefix: regExpPrefix(what)\n        });\n      }\n    };\n\n    var check = { matcher: $urlMatcherFactory.isMatcher(what), regex: what instanceof RegExp };\n\n    for (var n in check) {\n      if (check[n]) return this.rule(strategies[n](what, handler));\n    }\n\n    throw new Error(\"invalid 'what' in when()\");\n  };\n\n  /**\n   * @ngdoc function\n   * @name ui.router.router.$urlRouterProvider#deferIntercept\n   * @methodOf ui.router.router.$urlRouterProvider\n   *\n   * @description\n   * Disables (or enables) deferring location change interception.\n   *\n   * If you wish to customize the behavior of syncing the URL (for example, if you wish to\n   * defer a transition but maintain the current URL), call this method at configuration time.\n   * Then, at run time, call `$urlRouter.listen()` after you have configured your own\n   * `$locationChangeSuccess` event handler.\n   *\n   * @example\n   * <pre>\n   * var app = angular.module('app', ['ui.router.router']);\n   *\n   * app.config(function ($urlRouterProvider) {\n   *\n   *   // Prevent $urlRouter from automatically intercepting URL changes;\n   *   // this allows you to configure custom behavior in between\n   *   // location changes and route synchronization:\n   *   $urlRouterProvider.deferIntercept();\n   *\n   * }).run(function ($rootScope, $urlRouter, UserService) {\n   *\n   *   $rootScope.$on('$locationChangeSuccess', function(e) {\n   *     // UserService is an example service for managing user state\n   *     if (UserService.isLoggedIn()) return;\n   *\n   *     // Prevent $urlRouter's default handler from firing\n   *     e.preventDefault();\n   *\n   *     UserService.handleLogin().then(function() {\n   *       // Once the user has logged in, sync the current URL\n   *       // to the router:\n   *       $urlRouter.sync();\n   *     });\n   *   });\n   *\n   *   // Configures $urlRouter's listener *after* your custom listener\n   *   $urlRouter.listen();\n   * });\n   * </pre>\n   *\n   * @param {boolean} defer Indicates whether to defer location change interception. Passing\n            no parameter is equivalent to `true`.\n   */\n  this.deferIntercept = function (defer) {\n    if (defer === undefined) defer = true;\n    interceptDeferred = defer;\n  };\n\n  /**\n   * @ngdoc object\n   * @name ui.router.router.$urlRouter\n   *\n   * @requires $location\n   * @requires $rootScope\n   * @requires $injector\n   * @requires $browser\n   *\n   * @description\n   *\n   */\n  this.$get = $get;\n  $get.$inject = ['$location', '$rootScope', '$injector', '$browser', '$sniffer'];\n  function $get(   $location,   $rootScope,   $injector,   $browser,   $sniffer) {\n\n    var baseHref = $browser.baseHref(), location = $location.url(), lastPushedUrl;\n\n    function appendBasePath(url, isHtml5, absolute) {\n      if (baseHref === '/') return url;\n      if (isHtml5) return baseHref.slice(0, -1) + url;\n      if (absolute) return baseHref.slice(1) + url;\n      return url;\n    }\n\n    // TODO: Optimize groups of rules with non-empty prefix into some sort of decision tree\n    function update(evt) {\n      if (evt && evt.defaultPrevented) return;\n      var ignoreUpdate = lastPushedUrl && $location.url() === lastPushedUrl;\n      lastPushedUrl = undefined;\n      // TODO: Re-implement this in 1.0 for https://github.com/angular-ui/ui-router/issues/1573\n      //if (ignoreUpdate) return true;\n\n      function check(rule) {\n        var handled = rule($injector, $location);\n\n        if (!handled) return false;\n        if (isString(handled)) $location.replace().url(handled);\n        return true;\n      }\n      var n = rules.length, i;\n\n      for (i = 0; i < n; i++) {\n        if (check(rules[i])) return;\n      }\n      // always check otherwise last to allow dynamic updates to the set of rules\n      if (otherwise) check(otherwise);\n    }\n\n    function listen() {\n      listener = listener || $rootScope.$on('$locationChangeSuccess', update);\n      return listener;\n    }\n\n    if (!interceptDeferred) listen();\n\n    return {\n      /**\n       * @ngdoc function\n       * @name ui.router.router.$urlRouter#sync\n       * @methodOf ui.router.router.$urlRouter\n       *\n       * @description\n       * Triggers an update; the same update that happens when the address bar url changes, aka `$locationChangeSuccess`.\n       * This method is useful when you need to use `preventDefault()` on the `$locationChangeSuccess` event,\n       * perform some custom logic (route protection, auth, config, redirection, etc) and then finally proceed\n       * with the transition by calling `$urlRouter.sync()`.\n       *\n       * @example\n       * <pre>\n       * angular.module('app', ['ui.router'])\n       *   .run(function($rootScope, $urlRouter) {\n       *     $rootScope.$on('$locationChangeSuccess', function(evt) {\n       *       // Halt state change from even starting\n       *       evt.preventDefault();\n       *       // Perform custom logic\n       *       var meetsRequirement = ...\n       *       // Continue with the update and state transition if logic allows\n       *       if (meetsRequirement) $urlRouter.sync();\n       *     });\n       * });\n       * </pre>\n       */\n      sync: function() {\n        update();\n      },\n\n      listen: function() {\n        return listen();\n      },\n\n      update: function(read) {\n        if (read) {\n          location = $location.url();\n          return;\n        }\n        if ($location.url() === location) return;\n\n        $location.url(location);\n        $location.replace();\n      },\n\n      push: function(urlMatcher, params, options) {\n         var url = urlMatcher.format(params || {});\n\n        // Handle the special hash param, if needed\n        if (url !== null && params && params['#']) {\n            url += '#' + params['#'];\n        }\n\n        $location.url(url);\n        lastPushedUrl = options && options.$$avoidResync ? $location.url() : undefined;\n        if (options && options.replace) $location.replace();\n      },\n\n      /**\n       * @ngdoc function\n       * @name ui.router.router.$urlRouter#href\n       * @methodOf ui.router.router.$urlRouter\n       *\n       * @description\n       * A URL generation method that returns the compiled URL for a given\n       * {@link ui.router.util.type:UrlMatcher `UrlMatcher`}, populated with the provided parameters.\n       *\n       * @example\n       * <pre>\n       * $bob = $urlRouter.href(new UrlMatcher(\"/about/:person\"), {\n       *   person: \"bob\"\n       * });\n       * // $bob == \"/about/bob\";\n       * </pre>\n       *\n       * @param {UrlMatcher} urlMatcher The `UrlMatcher` object which is used as the template of the URL to generate.\n       * @param {object=} params An object of parameter values to fill the matcher's required parameters.\n       * @param {object=} options Options object. The options are:\n       *\n       * - **`absolute`** - {boolean=false},  If true will generate an absolute url, e.g. \"http://www.example.com/fullurl\".\n       *\n       * @returns {string} Returns the fully compiled URL, or `null` if `params` fail validation against `urlMatcher`\n       */\n      href: function(urlMatcher, params, options) {\n        if (!urlMatcher.validates(params)) return null;\n\n        var isHtml5 = $locationProvider.html5Mode();\n        if (angular.isObject(isHtml5)) {\n          isHtml5 = isHtml5.enabled;\n        }\n\n        isHtml5 = isHtml5 && $sniffer.history;\n        \n        var url = urlMatcher.format(params);\n        options = options || {};\n\n        if (!isHtml5 && url !== null) {\n          url = \"#\" + $locationProvider.hashPrefix() + url;\n        }\n\n        // Handle special hash param, if needed\n        if (url !== null && params && params['#']) {\n          url += '#' + params['#'];\n        }\n\n        url = appendBasePath(url, isHtml5, options.absolute);\n\n        if (!options.absolute || !url) {\n          return url;\n        }\n\n        var slash = (!isHtml5 && url ? '/' : ''), port = $location.port();\n        port = (port === 80 || port === 443 ? '' : ':' + port);\n\n        return [$location.protocol(), '://', $location.host(), port, slash, url].join('');\n      }\n    };\n  }\n}\n\nangular.module('ui.router.router').provider('$urlRouter', $UrlRouterProvider);\n\n/**\n * @ngdoc object\n * @name ui.router.state.$stateProvider\n *\n * @requires ui.router.router.$urlRouterProvider\n * @requires ui.router.util.$urlMatcherFactoryProvider\n *\n * @description\n * The new `$stateProvider` works similar to Angular's v1 router, but it focuses purely\n * on state.\n *\n * A state corresponds to a \"place\" in the application in terms of the overall UI and\n * navigation. A state describes (via the controller / template / view properties) what\n * the UI looks like and does at that place.\n *\n * States often have things in common, and the primary way of factoring out these\n * commonalities in this model is via the state hierarchy, i.e. parent/child states aka\n * nested states.\n *\n * The `$stateProvider` provides interfaces to declare these states for your app.\n */\n$StateProvider.$inject = ['$urlRouterProvider', '$urlMatcherFactoryProvider'];\nfunction $StateProvider(   $urlRouterProvider,   $urlMatcherFactory) {\n\n  var root, states = {}, $state, queue = {}, abstractKey = 'abstract';\n\n  // Builds state properties from definition passed to registerState()\n  var stateBuilder = {\n\n    // Derive parent state from a hierarchical name only if 'parent' is not explicitly defined.\n    // state.children = [];\n    // if (parent) parent.children.push(state);\n    parent: function(state) {\n      if (isDefined(state.parent) && state.parent) return findState(state.parent);\n      // regex matches any valid composite state name\n      // would match \"contact.list\" but not \"contacts\"\n      var compositeName = /^(.+)\\.[^.]+$/.exec(state.name);\n      return compositeName ? findState(compositeName[1]) : root;\n    },\n\n    // inherit 'data' from parent and override by own values (if any)\n    data: function(state) {\n      if (state.parent && state.parent.data) {\n        state.data = state.self.data = inherit(state.parent.data, state.data);\n      }\n      return state.data;\n    },\n\n    // Build a URLMatcher if necessary, either via a relative or absolute URL\n    url: function(state) {\n      var url = state.url, config = { params: state.params || {} };\n\n      if (isString(url)) {\n        if (url.charAt(0) == '^') return $urlMatcherFactory.compile(url.substring(1), config);\n        return (state.parent.navigable || root).url.concat(url, config);\n      }\n\n      if (!url || $urlMatcherFactory.isMatcher(url)) return url;\n      throw new Error(\"Invalid url '\" + url + \"' in state '\" + state + \"'\");\n    },\n\n    // Keep track of the closest ancestor state that has a URL (i.e. is navigable)\n    navigable: function(state) {\n      return state.url ? state : (state.parent ? state.parent.navigable : null);\n    },\n\n    // Own parameters for this state. state.url.params is already built at this point. Create and add non-url params\n    ownParams: function(state) {\n      var params = state.url && state.url.params || new $$UMFP.ParamSet();\n      forEach(state.params || {}, function(config, id) {\n        if (!params[id]) params[id] = new $$UMFP.Param(id, null, config, \"config\");\n      });\n      return params;\n    },\n\n    // Derive parameters for this state and ensure they're a super-set of parent's parameters\n    params: function(state) {\n      var ownParams = pick(state.ownParams, state.ownParams.$$keys());\n      return state.parent && state.parent.params ? extend(state.parent.params.$$new(), ownParams) : new $$UMFP.ParamSet();\n    },\n\n    // If there is no explicit multi-view configuration, make one up so we don't have\n    // to handle both cases in the view directive later. Note that having an explicit\n    // 'views' property will mean the default unnamed view properties are ignored. This\n    // is also a good time to resolve view names to absolute names, so everything is a\n    // straight lookup at link time.\n    views: function(state) {\n      var views = {};\n\n      forEach(isDefined(state.views) ? state.views : { '': state }, function (view, name) {\n        if (name.indexOf('@') < 0) name += '@' + state.parent.name;\n        view.resolveAs = view.resolveAs || state.resolveAs || '$resolve';\n        views[name] = view;\n      });\n      return views;\n    },\n\n    // Keep a full path from the root down to this state as this is needed for state activation.\n    path: function(state) {\n      return state.parent ? state.parent.path.concat(state) : []; // exclude root from path\n    },\n\n    // Speed up $state.contains() as it's used a lot\n    includes: function(state) {\n      var includes = state.parent ? extend({}, state.parent.includes) : {};\n      includes[state.name] = true;\n      return includes;\n    },\n\n    $delegates: {}\n  };\n\n  function isRelative(stateName) {\n    return stateName.indexOf(\".\") === 0 || stateName.indexOf(\"^\") === 0;\n  }\n\n  function findState(stateOrName, base) {\n    if (!stateOrName) return undefined;\n\n    var isStr = isString(stateOrName),\n        name  = isStr ? stateOrName : stateOrName.name,\n        path  = isRelative(name);\n\n    if (path) {\n      if (!base) throw new Error(\"No reference point given for path '\"  + name + \"'\");\n      base = findState(base);\n      \n      var rel = name.split(\".\"), i = 0, pathLength = rel.length, current = base;\n\n      for (; i < pathLength; i++) {\n        if (rel[i] === \"\" && i === 0) {\n          current = base;\n          continue;\n        }\n        if (rel[i] === \"^\") {\n          if (!current.parent) throw new Error(\"Path '\" + name + \"' not valid for state '\" + base.name + \"'\");\n          current = current.parent;\n          continue;\n        }\n        break;\n      }\n      rel = rel.slice(i).join(\".\");\n      name = current.name + (current.name && rel ? \".\" : \"\") + rel;\n    }\n    var state = states[name];\n\n    if (state && (isStr || (!isStr && (state === stateOrName || state.self === stateOrName)))) {\n      return state;\n    }\n    return undefined;\n  }\n\n  function queueState(parentName, state) {\n    if (!queue[parentName]) {\n      queue[parentName] = [];\n    }\n    queue[parentName].push(state);\n  }\n\n  function flushQueuedChildren(parentName) {\n    var queued = queue[parentName] || [];\n    while(queued.length) {\n      registerState(queued.shift());\n    }\n  }\n\n  function registerState(state) {\n    // Wrap a new object around the state so we can store our private details easily.\n    state = inherit(state, {\n      self: state,\n      resolve: state.resolve || {},\n      toString: function() { return this.name; }\n    });\n\n    var name = state.name;\n    if (!isString(name) || name.indexOf('@') >= 0) throw new Error(\"State must have a valid name\");\n    if (states.hasOwnProperty(name)) throw new Error(\"State '\" + name + \"' is already defined\");\n\n    // Get parent name\n    var parentName = (name.indexOf('.') !== -1) ? name.substring(0, name.lastIndexOf('.'))\n        : (isString(state.parent)) ? state.parent\n        : (isObject(state.parent) && isString(state.parent.name)) ? state.parent.name\n        : '';\n\n    // If parent is not registered yet, add state to queue and register later\n    if (parentName && !states[parentName]) {\n      return queueState(parentName, state.self);\n    }\n\n    for (var key in stateBuilder) {\n      if (isFunction(stateBuilder[key])) state[key] = stateBuilder[key](state, stateBuilder.$delegates[key]);\n    }\n    states[name] = state;\n\n    // Register the state in the global state list and with $urlRouter if necessary.\n    if (!state[abstractKey] && state.url) {\n      $urlRouterProvider.when(state.url, ['$match', '$stateParams', function ($match, $stateParams) {\n        if ($state.$current.navigable != state || !equalForKeys($match, $stateParams)) {\n          $state.transitionTo(state, $match, { inherit: true, location: false });\n        }\n      }]);\n    }\n\n    // Register any queued children\n    flushQueuedChildren(name);\n\n    return state;\n  }\n\n  // Checks text to see if it looks like a glob.\n  function isGlob (text) {\n    return text.indexOf('*') > -1;\n  }\n\n  // Returns true if glob matches current $state name.\n  function doesStateMatchGlob (glob) {\n    var globSegments = glob.split('.'),\n        segments = $state.$current.name.split('.');\n\n    //match single stars\n    for (var i = 0, l = globSegments.length; i < l; i++) {\n      if (globSegments[i] === '*') {\n        segments[i] = '*';\n      }\n    }\n\n    //match greedy starts\n    if (globSegments[0] === '**') {\n       segments = segments.slice(indexOf(segments, globSegments[1]));\n       segments.unshift('**');\n    }\n    //match greedy ends\n    if (globSegments[globSegments.length - 1] === '**') {\n       segments.splice(indexOf(segments, globSegments[globSegments.length - 2]) + 1, Number.MAX_VALUE);\n       segments.push('**');\n    }\n\n    if (globSegments.length != segments.length) {\n      return false;\n    }\n\n    return segments.join('') === globSegments.join('');\n  }\n\n\n  // Implicit root state that is always active\n  root = registerState({\n    name: '',\n    url: '^',\n    views: null,\n    'abstract': true\n  });\n  root.navigable = null;\n\n\n  /**\n   * @ngdoc function\n   * @name ui.router.state.$stateProvider#decorator\n   * @methodOf ui.router.state.$stateProvider\n   *\n   * @description\n   * Allows you to extend (carefully) or override (at your own peril) the \n   * `stateBuilder` object used internally by `$stateProvider`. This can be used \n   * to add custom functionality to ui-router, for example inferring templateUrl \n   * based on the state name.\n   *\n   * When passing only a name, it returns the current (original or decorated) builder\n   * function that matches `name`.\n   *\n   * The builder functions that can be decorated are listed below. Though not all\n   * necessarily have a good use case for decoration, that is up to you to decide.\n   *\n   * In addition, users can attach custom decorators, which will generate new \n   * properties within the state's internal definition. There is currently no clear \n   * use-case for this beyond accessing internal states (i.e. $state.$current), \n   * however, expect this to become increasingly relevant as we introduce additional \n   * meta-programming features.\n   *\n   * **Warning**: Decorators should not be interdependent because the order of \n   * execution of the builder functions in non-deterministic. Builder functions \n   * should only be dependent on the state definition object and super function.\n   *\n   *\n   * Existing builder functions and current return values:\n   *\n   * - **parent** `{object}` - returns the parent state object.\n   * - **data** `{object}` - returns state data, including any inherited data that is not\n   *   overridden by own values (if any).\n   * - **url** `{object}` - returns a {@link ui.router.util.type:UrlMatcher UrlMatcher}\n   *   or `null`.\n   * - **navigable** `{object}` - returns closest ancestor state that has a URL (aka is \n   *   navigable).\n   * - **params** `{object}` - returns an array of state params that are ensured to \n   *   be a super-set of parent's params.\n   * - **views** `{object}` - returns a views object where each key is an absolute view \n   *   name (i.e. \"viewName@stateName\") and each value is the config object \n   *   (template, controller) for the view. Even when you don't use the views object \n   *   explicitly on a state config, one is still created for you internally.\n   *   So by decorating this builder function you have access to decorating template \n   *   and controller properties.\n   * - **ownParams** `{object}` - returns an array of params that belong to the state, \n   *   not including any params defined by ancestor states.\n   * - **path** `{string}` - returns the full path from the root down to this state. \n   *   Needed for state activation.\n   * - **includes** `{object}` - returns an object that includes every state that \n   *   would pass a `$state.includes()` test.\n   *\n   * @example\n   * <pre>\n   * // Override the internal 'views' builder with a function that takes the state\n   * // definition, and a reference to the internal function being overridden:\n   * $stateProvider.decorator('views', function (state, parent) {\n   *   var result = {},\n   *       views = parent(state);\n   *\n   *   angular.forEach(views, function (config, name) {\n   *     var autoName = (state.name + '.' + name).replace('.', '/');\n   *     config.templateUrl = config.templateUrl || '/partials/' + autoName + '.html';\n   *     result[name] = config;\n   *   });\n   *   return result;\n   * });\n   *\n   * $stateProvider.state('home', {\n   *   views: {\n   *     'contact.list': { controller: 'ListController' },\n   *     'contact.item': { controller: 'ItemController' }\n   *   }\n   * });\n   *\n   * // ...\n   *\n   * $state.go('home');\n   * // Auto-populates list and item views with /partials/home/contact/list.html,\n   * // and /partials/home/contact/item.html, respectively.\n   * </pre>\n   *\n   * @param {string} name The name of the builder function to decorate. \n   * @param {object} func A function that is responsible for decorating the original \n   * builder function. The function receives two parameters:\n   *\n   *   - `{object}` - state - The state config object.\n   *   - `{object}` - super - The original builder function.\n   *\n   * @return {object} $stateProvider - $stateProvider instance\n   */\n  this.decorator = decorator;\n  function decorator(name, func) {\n    /*jshint validthis: true */\n    if (isString(name) && !isDefined(func)) {\n      return stateBuilder[name];\n    }\n    if (!isFunction(func) || !isString(name)) {\n      return this;\n    }\n    if (stateBuilder[name] && !stateBuilder.$delegates[name]) {\n      stateBuilder.$delegates[name] = stateBuilder[name];\n    }\n    stateBuilder[name] = func;\n    return this;\n  }\n\n  /**\n   * @ngdoc function\n   * @name ui.router.state.$stateProvider#state\n   * @methodOf ui.router.state.$stateProvider\n   *\n   * @description\n   * Registers a state configuration under a given state name. The stateConfig object\n   * has the following acceptable properties.\n   *\n   * @param {string} name A unique state name, e.g. \"home\", \"about\", \"contacts\".\n   * To create a parent/child state use a dot, e.g. \"about.sales\", \"home.newest\".\n   * @param {object} stateConfig State configuration object.\n   * @param {string|function=} stateConfig.template\n   * <a id='template'></a>\n   *   html template as a string or a function that returns\n   *   an html template as a string which should be used by the uiView directives. This property \n   *   takes precedence over templateUrl.\n   *   \n   *   If `template` is a function, it will be called with the following parameters:\n   *\n   *   - {array.&lt;object&gt;} - state parameters extracted from the current $location.path() by\n   *     applying the current state\n   *\n   * <pre>template:\n   *   \"<h1>inline template definition</h1>\" +\n   *   \"<div ui-view></div>\"</pre>\n   * <pre>template: function(params) {\n   *       return \"<h1>generated template</h1>\"; }</pre>\n   * </div>\n   *\n   * @param {string|function=} stateConfig.templateUrl\n   * <a id='templateUrl'></a>\n   *\n   *   path or function that returns a path to an html\n   *   template that should be used by uiView.\n   *   \n   *   If `templateUrl` is a function, it will be called with the following parameters:\n   *\n   *   - {array.&lt;object&gt;} - state parameters extracted from the current $location.path() by \n   *     applying the current state\n   *\n   * <pre>templateUrl: \"home.html\"</pre>\n   * <pre>templateUrl: function(params) {\n   *     return myTemplates[params.pageId]; }</pre>\n   *\n   * @param {function=} stateConfig.templateProvider\n   * <a id='templateProvider'></a>\n   *    Provider function that returns HTML content string.\n   * <pre> templateProvider:\n   *       function(MyTemplateService, params) {\n   *         return MyTemplateService.getTemplate(params.pageId);\n   *       }</pre>\n   *\n   * @param {string|function=} stateConfig.controller\n   * <a id='controller'></a>\n   *\n   *  Controller fn that should be associated with newly\n   *   related scope or the name of a registered controller if passed as a string.\n   *   Optionally, the ControllerAs may be declared here.\n   * <pre>controller: \"MyRegisteredController\"</pre>\n   * <pre>controller:\n   *     \"MyRegisteredController as fooCtrl\"}</pre>\n   * <pre>controller: function($scope, MyService) {\n   *     $scope.data = MyService.getData(); }</pre>\n   *\n   * @param {function=} stateConfig.controllerProvider\n   * <a id='controllerProvider'></a>\n   *\n   * Injectable provider function that returns the actual controller or string.\n   * <pre>controllerProvider:\n   *   function(MyResolveData) {\n   *     if (MyResolveData.foo)\n   *       return \"FooCtrl\"\n   *     else if (MyResolveData.bar)\n   *       return \"BarCtrl\";\n   *     else return function($scope) {\n   *       $scope.baz = \"Qux\";\n   *     }\n   *   }</pre>\n   *\n   * @param {string=} stateConfig.controllerAs\n   * <a id='controllerAs'></a>\n   * \n   * A controller alias name. If present the controller will be\n   *   published to scope under the controllerAs name.\n   * <pre>controllerAs: \"myCtrl\"</pre>\n   *\n   * @param {string|object=} stateConfig.parent\n   * <a id='parent'></a>\n   * Optionally specifies the parent state of this state.\n   *\n   * <pre>parent: 'parentState'</pre>\n   * <pre>parent: parentState // JS variable</pre>\n   *\n   * @param {object=} stateConfig.resolve\n   * <a id='resolve'></a>\n   *\n   * An optional map&lt;string, function&gt; of dependencies which\n   *   should be injected into the controller. If any of these dependencies are promises, \n   *   the router will wait for them all to be resolved before the controller is instantiated.\n   *   If all the promises are resolved successfully, the $stateChangeSuccess event is fired\n   *   and the values of the resolved promises are injected into any controllers that reference them.\n   *   If any  of the promises are rejected the $stateChangeError event is fired.\n   *\n   *   The map object is:\n   *   \n   *   - key - {string}: name of dependency to be injected into controller\n   *   - factory - {string|function}: If string then it is alias for service. Otherwise if function, \n   *     it is injected and return value it treated as dependency. If result is a promise, it is \n   *     resolved before its value is injected into controller.\n   *\n   * <pre>resolve: {\n   *     myResolve1:\n   *       function($http, $stateParams) {\n   *         return $http.get(\"/api/foos/\"+stateParams.fooID);\n   *       }\n   *     }</pre>\n   *\n   * @param {string=} stateConfig.url\n   * <a id='url'></a>\n   *\n   *   A url fragment with optional parameters. When a state is navigated or\n   *   transitioned to, the `$stateParams` service will be populated with any \n   *   parameters that were passed.\n   *\n   *   (See {@link ui.router.util.type:UrlMatcher UrlMatcher} `UrlMatcher`} for\n   *   more details on acceptable patterns )\n   *\n   * examples:\n   * <pre>url: \"/home\"\n   * url: \"/users/:userid\"\n   * url: \"/books/{bookid:[a-zA-Z_-]}\"\n   * url: \"/books/{categoryid:int}\"\n   * url: \"/books/{publishername:string}/{categoryid:int}\"\n   * url: \"/messages?before&after\"\n   * url: \"/messages?{before:date}&{after:date}\"\n   * url: \"/messages/:mailboxid?{before:date}&{after:date}\"\n   * </pre>\n   *\n   * @param {object=} stateConfig.views\n   * <a id='views'></a>\n   * an optional map&lt;string, object&gt; which defined multiple views, or targets views\n   * manually/explicitly.\n   *\n   * Examples:\n   *\n   * Targets three named `ui-view`s in the parent state's template\n   * <pre>views: {\n   *     header: {\n   *       controller: \"headerCtrl\",\n   *       templateUrl: \"header.html\"\n   *     }, body: {\n   *       controller: \"bodyCtrl\",\n   *       templateUrl: \"body.html\"\n   *     }, footer: {\n   *       controller: \"footCtrl\",\n   *       templateUrl: \"footer.html\"\n   *     }\n   *   }</pre>\n   *\n   * Targets named `ui-view=\"header\"` from grandparent state 'top''s template, and named `ui-view=\"body\" from parent state's template.\n   * <pre>views: {\n   *     'header@top': {\n   *       controller: \"msgHeaderCtrl\",\n   *       templateUrl: \"msgHeader.html\"\n   *     }, 'body': {\n   *       controller: \"messagesCtrl\",\n   *       templateUrl: \"messages.html\"\n   *     }\n   *   }</pre>\n   *\n   * @param {boolean=} [stateConfig.abstract=false]\n   * <a id='abstract'></a>\n   * An abstract state will never be directly activated,\n   *   but can provide inherited properties to its common children states.\n   * <pre>abstract: true</pre>\n   *\n   * @param {function=} stateConfig.onEnter\n   * <a id='onEnter'></a>\n   *\n   * Callback function for when a state is entered. Good way\n   *   to trigger an action or dispatch an event, such as opening a dialog.\n   * If minifying your scripts, make sure to explicitly annotate this function,\n   * because it won't be automatically annotated by your build tools.\n   *\n   * <pre>onEnter: function(MyService, $stateParams) {\n   *     MyService.foo($stateParams.myParam);\n   * }</pre>\n   *\n   * @param {function=} stateConfig.onExit\n   * <a id='onExit'></a>\n   *\n   * Callback function for when a state is exited. Good way to\n   *   trigger an action or dispatch an event, such as opening a dialog.\n   * If minifying your scripts, make sure to explicitly annotate this function,\n   * because it won't be automatically annotated by your build tools.\n   *\n   * <pre>onExit: function(MyService, $stateParams) {\n   *     MyService.cleanup($stateParams.myParam);\n   * }</pre>\n   *\n   * @param {boolean=} [stateConfig.reloadOnSearch=true]\n   * <a id='reloadOnSearch'></a>\n   *\n   * If `false`, will not retrigger the same state\n   *   just because a search/query parameter has changed (via $location.search() or $location.hash()). \n   *   Useful for when you'd like to modify $location.search() without triggering a reload.\n   * <pre>reloadOnSearch: false</pre>\n   *\n   * @param {object=} stateConfig.data\n   * <a id='data'></a>\n   *\n   * Arbitrary data object, useful for custom configuration.  The parent state's `data` is\n   *   prototypally inherited.  In other words, adding a data property to a state adds it to\n   *   the entire subtree via prototypal inheritance.\n   *\n   * <pre>data: {\n   *     requiredRole: 'foo'\n   * } </pre>\n   *\n   * @param {object=} stateConfig.params\n   * <a id='params'></a>\n   *\n   * A map which optionally configures parameters declared in the `url`, or\n   *   defines additional non-url parameters.  For each parameter being\n   *   configured, add a configuration object keyed to the name of the parameter.\n   *\n   *   Each parameter configuration object may contain the following properties:\n   *\n   *   - ** value ** - {object|function=}: specifies the default value for this\n   *     parameter.  This implicitly sets this parameter as optional.\n   *\n   *     When UI-Router routes to a state and no value is\n   *     specified for this parameter in the URL or transition, the\n   *     default value will be used instead.  If `value` is a function,\n   *     it will be injected and invoked, and the return value used.\n   *\n   *     *Note*: `undefined` is treated as \"no default value\" while `null`\n   *     is treated as \"the default value is `null`\".\n   *\n   *     *Shorthand*: If you only need to configure the default value of the\n   *     parameter, you may use a shorthand syntax.   In the **`params`**\n   *     map, instead mapping the param name to a full parameter configuration\n   *     object, simply set map it to the default parameter value, e.g.:\n   *\n   * <pre>// define a parameter's default value\n   * params: {\n   *     param1: { value: \"defaultValue\" }\n   * }\n   * // shorthand default values\n   * params: {\n   *     param1: \"defaultValue\",\n   *     param2: \"param2Default\"\n   * }</pre>\n   *\n   *   - ** array ** - {boolean=}: *(default: false)* If true, the param value will be\n   *     treated as an array of values.  If you specified a Type, the value will be\n   *     treated as an array of the specified Type.  Note: query parameter values\n   *     default to a special `\"auto\"` mode.\n   *\n   *     For query parameters in `\"auto\"` mode, if multiple  values for a single parameter\n   *     are present in the URL (e.g.: `/foo?bar=1&bar=2&bar=3`) then the values\n   *     are mapped to an array (e.g.: `{ foo: [ '1', '2', '3' ] }`).  However, if\n   *     only one value is present (e.g.: `/foo?bar=1`) then the value is treated as single\n   *     value (e.g.: `{ foo: '1' }`).\n   *\n   * <pre>params: {\n   *     param1: { array: true }\n   * }</pre>\n   *\n   *   - ** squash ** - {bool|string=}: `squash` configures how a default parameter value is represented in the URL when\n   *     the current parameter value is the same as the default value. If `squash` is not set, it uses the\n   *     configured default squash policy.\n   *     (See {@link ui.router.util.$urlMatcherFactory#methods_defaultSquashPolicy `defaultSquashPolicy()`})\n   *\n   *   There are three squash settings:\n   *\n   *     - false: The parameter's default value is not squashed.  It is encoded and included in the URL\n   *     - true: The parameter's default value is omitted from the URL.  If the parameter is preceeded and followed\n   *       by slashes in the state's `url` declaration, then one of those slashes are omitted.\n   *       This can allow for cleaner looking URLs.\n   *     - `\"<arbitrary string>\"`: The parameter's default value is replaced with an arbitrary placeholder of  your choice.\n   *\n   * <pre>params: {\n   *     param1: {\n   *       value: \"defaultId\",\n   *       squash: true\n   * } }\n   * // squash \"defaultValue\" to \"~\"\n   * params: {\n   *     param1: {\n   *       value: \"defaultValue\",\n   *       squash: \"~\"\n   * } }\n   * </pre>\n   *\n   *\n   * @example\n   * <pre>\n   * // Some state name examples\n   *\n   * // stateName can be a single top-level name (must be unique).\n   * $stateProvider.state(\"home\", {});\n   *\n   * // Or it can be a nested state name. This state is a child of the\n   * // above \"home\" state.\n   * $stateProvider.state(\"home.newest\", {});\n   *\n   * // Nest states as deeply as needed.\n   * $stateProvider.state(\"home.newest.abc.xyz.inception\", {});\n   *\n   * // state() returns $stateProvider, so you can chain state declarations.\n   * $stateProvider\n   *   .state(\"home\", {})\n   *   .state(\"about\", {})\n   *   .state(\"contacts\", {});\n   * </pre>\n   *\n   */\n  this.state = state;\n  function state(name, definition) {\n    /*jshint validthis: true */\n    if (isObject(name)) definition = name;\n    else definition.name = name;\n    registerState(definition);\n    return this;\n  }\n\n  /**\n   * @ngdoc object\n   * @name ui.router.state.$state\n   *\n   * @requires $rootScope\n   * @requires $q\n   * @requires ui.router.state.$view\n   * @requires $injector\n   * @requires ui.router.util.$resolve\n   * @requires ui.router.state.$stateParams\n   * @requires ui.router.router.$urlRouter\n   *\n   * @property {object} params A param object, e.g. {sectionId: section.id)}, that \n   * you'd like to test against the current active state.\n   * @property {object} current A reference to the state's config object. However \n   * you passed it in. Useful for accessing custom data.\n   * @property {object} transition Currently pending transition. A promise that'll \n   * resolve or reject.\n   *\n   * @description\n   * `$state` service is responsible for representing states as well as transitioning\n   * between them. It also provides interfaces to ask for current state or even states\n   * you're coming from.\n   */\n  this.$get = $get;\n  $get.$inject = ['$rootScope', '$q', '$view', '$injector', '$resolve', '$stateParams', '$urlRouter', '$location', '$urlMatcherFactory'];\n  function $get(   $rootScope,   $q,   $view,   $injector,   $resolve,   $stateParams,   $urlRouter,   $location,   $urlMatcherFactory) {\n\n    var TransitionSupersededError = new Error('transition superseded');\n\n    var TransitionSuperseded = silenceUncaughtInPromise($q.reject(TransitionSupersededError));\n    var TransitionPrevented = silenceUncaughtInPromise($q.reject(new Error('transition prevented')));\n    var TransitionAborted = silenceUncaughtInPromise($q.reject(new Error('transition aborted')));\n    var TransitionFailed = silenceUncaughtInPromise($q.reject(new Error('transition failed')));\n\n    // Handles the case where a state which is the target of a transition is not found, and the user\n    // can optionally retry or defer the transition\n    function handleRedirect(redirect, state, params, options) {\n      /**\n       * @ngdoc event\n       * @name ui.router.state.$state#$stateNotFound\n       * @eventOf ui.router.state.$state\n       * @eventType broadcast on root scope\n       * @description\n       * Fired when a requested state **cannot be found** using the provided state name during transition.\n       * The event is broadcast allowing any handlers a single chance to deal with the error (usually by\n       * lazy-loading the unfound state). A special `unfoundState` object is passed to the listener handler,\n       * you can see its three properties in the example. You can use `event.preventDefault()` to abort the\n       * transition and the promise returned from `go` will be rejected with a `'transition aborted'` value.\n       *\n       * @param {Object} event Event object.\n       * @param {Object} unfoundState Unfound State information. Contains: `to, toParams, options` properties.\n       * @param {State} fromState Current state object.\n       * @param {Object} fromParams Current state params.\n       *\n       * @example\n       *\n       * <pre>\n       * // somewhere, assume lazy.state has not been defined\n       * $state.go(\"lazy.state\", {a:1, b:2}, {inherit:false});\n       *\n       * // somewhere else\n       * $scope.$on('$stateNotFound',\n       * function(event, unfoundState, fromState, fromParams){\n       *     console.log(unfoundState.to); // \"lazy.state\"\n       *     console.log(unfoundState.toParams); // {a:1, b:2}\n       *     console.log(unfoundState.options); // {inherit:false} + default options\n       * })\n       * </pre>\n       */\n      var evt = $rootScope.$broadcast('$stateNotFound', redirect, state, params);\n\n      if (evt.defaultPrevented) {\n        $urlRouter.update();\n        return TransitionAborted;\n      }\n\n      if (!evt.retry) {\n        return null;\n      }\n\n      // Allow the handler to return a promise to defer state lookup retry\n      if (options.$retry) {\n        $urlRouter.update();\n        return TransitionFailed;\n      }\n      var retryTransition = $state.transition = $q.when(evt.retry);\n\n      retryTransition.then(function() {\n        if (retryTransition !== $state.transition) {\n          $rootScope.$broadcast('$stateChangeCancel', redirect.to, redirect.toParams, state, params);\n          return TransitionSuperseded;\n        }\n        redirect.options.$retry = true;\n        return $state.transitionTo(redirect.to, redirect.toParams, redirect.options);\n      }, function() {\n        return TransitionAborted;\n      });\n      $urlRouter.update();\n\n      return retryTransition;\n    }\n\n    root.locals = { resolve: null, globals: { $stateParams: {} } };\n\n    $state = {\n      params: {},\n      current: root.self,\n      $current: root,\n      transition: null\n    };\n\n    /**\n     * @ngdoc function\n     * @name ui.router.state.$state#reload\n     * @methodOf ui.router.state.$state\n     *\n     * @description\n     * A method that force reloads the current state. All resolves are re-resolved,\n     * controllers reinstantiated, and events re-fired.\n     *\n     * @example\n     * <pre>\n     * var app angular.module('app', ['ui.router']);\n     *\n     * app.controller('ctrl', function ($scope, $state) {\n     *   $scope.reload = function(){\n     *     $state.reload();\n     *   }\n     * });\n     * </pre>\n     *\n     * `reload()` is just an alias for:\n     * <pre>\n     * $state.transitionTo($state.current, $stateParams, { \n     *   reload: true, inherit: false, notify: true\n     * });\n     * </pre>\n     *\n     * @param {string=|object=} state - A state name or a state object, which is the root of the resolves to be re-resolved.\n     * @example\n     * <pre>\n     * //assuming app application consists of 3 states: 'contacts', 'contacts.detail', 'contacts.detail.item' \n     * //and current state is 'contacts.detail.item'\n     * var app angular.module('app', ['ui.router']);\n     *\n     * app.controller('ctrl', function ($scope, $state) {\n     *   $scope.reload = function(){\n     *     //will reload 'contact.detail' and 'contact.detail.item' states\n     *     $state.reload('contact.detail');\n     *   }\n     * });\n     * </pre>\n     *\n     * `reload()` is just an alias for:\n     * <pre>\n     * $state.transitionTo($state.current, $stateParams, { \n     *   reload: true, inherit: false, notify: true\n     * });\n     * </pre>\n\n     * @returns {promise} A promise representing the state of the new transition. See\n     * {@link ui.router.state.$state#methods_go $state.go}.\n     */\n    $state.reload = function reload(state) {\n      return $state.transitionTo($state.current, $stateParams, { reload: state || true, inherit: false, notify: true});\n    };\n\n    /**\n     * @ngdoc function\n     * @name ui.router.state.$state#go\n     * @methodOf ui.router.state.$state\n     *\n     * @description\n     * Convenience method for transitioning to a new state. `$state.go` calls \n     * `$state.transitionTo` internally but automatically sets options to \n     * `{ location: true, inherit: true, relative: $state.$current, notify: true }`. \n     * This allows you to easily use an absolute or relative to path and specify \n     * only the parameters you'd like to update (while letting unspecified parameters \n     * inherit from the currently active ancestor states).\n     *\n     * @example\n     * <pre>\n     * var app = angular.module('app', ['ui.router']);\n     *\n     * app.controller('ctrl', function ($scope, $state) {\n     *   $scope.changeState = function () {\n     *     $state.go('contact.detail');\n     *   };\n     * });\n     * </pre>\n     * <img src='../ngdoc_assets/StateGoExamples.png'/>\n     *\n     * @param {string} to Absolute state name or relative state path. Some examples:\n     *\n     * - `$state.go('contact.detail')` - will go to the `contact.detail` state\n     * - `$state.go('^')` - will go to a parent state\n     * - `$state.go('^.sibling')` - will go to a sibling state\n     * - `$state.go('.child.grandchild')` - will go to grandchild state\n     *\n     * @param {object=} params A map of the parameters that will be sent to the state, \n     * will populate $stateParams. Any parameters that are not specified will be inherited from currently \n     * defined parameters. Only parameters specified in the state definition can be overridden, new \n     * parameters will be ignored. This allows, for example, going to a sibling state that shares parameters\n     * specified in a parent state. Parameter inheritance only works between common ancestor states, I.e.\n     * transitioning to a sibling will get you the parameters for all parents, transitioning to a child\n     * will get you all current parameters, etc.\n     * @param {object=} options Options object. The options are:\n     *\n     * - **`location`** - {boolean=true|string=} - If `true` will update the url in the location bar, if `false`\n     *    will not. If string, must be `\"replace\"`, which will update url and also replace last history record.\n     * - **`inherit`** - {boolean=true}, If `true` will inherit url parameters from current url.\n     * - **`relative`** - {object=$state.$current}, When transitioning with relative path (e.g '^'), \n     *    defines which state to be relative from.\n     * - **`notify`** - {boolean=true}, If `true` will broadcast $stateChangeStart and $stateChangeSuccess events.\n     * - **`reload`** (v0.2.5) - {boolean=false|string|object}, If `true` will force transition even if no state or params\n     *    have changed.  It will reload the resolves and views of the current state and parent states.\n     *    If `reload` is a string (or state object), the state object is fetched (by name, or object reference); and \\\n     *    the transition reloads the resolves and views for that matched state, and all its children states.\n     *\n     * @returns {promise} A promise representing the state of the new transition.\n     *\n     * Possible success values:\n     *\n     * - $state.current\n     *\n     * <br/>Possible rejection values:\n     *\n     * - 'transition superseded' - when a newer transition has been started after this one\n     * - 'transition prevented' - when `event.preventDefault()` has been called in a `$stateChangeStart` listener\n     * - 'transition aborted' - when `event.preventDefault()` has been called in a `$stateNotFound` listener or\n     *   when a `$stateNotFound` `event.retry` promise errors.\n     * - 'transition failed' - when a state has been unsuccessfully found after 2 tries.\n     * - *resolve error* - when an error has occurred with a `resolve`\n     *\n     */\n    $state.go = function go(to, params, options) {\n      return $state.transitionTo(to, params, extend({ inherit: true, relative: $state.$current }, options));\n    };\n\n    /**\n     * @ngdoc function\n     * @name ui.router.state.$state#transitionTo\n     * @methodOf ui.router.state.$state\n     *\n     * @description\n     * Low-level method for transitioning to a new state. {@link ui.router.state.$state#methods_go $state.go}\n     * uses `transitionTo` internally. `$state.go` is recommended in most situations.\n     *\n     * @example\n     * <pre>\n     * var app = angular.module('app', ['ui.router']);\n     *\n     * app.controller('ctrl', function ($scope, $state) {\n     *   $scope.changeState = function () {\n     *     $state.transitionTo('contact.detail');\n     *   };\n     * });\n     * </pre>\n     *\n     * @param {string} to State name.\n     * @param {object=} toParams A map of the parameters that will be sent to the state,\n     * will populate $stateParams.\n     * @param {object=} options Options object. The options are:\n     *\n     * - **`location`** - {boolean=true|string=} - If `true` will update the url in the location bar, if `false`\n     *    will not. If string, must be `\"replace\"`, which will update url and also replace last history record.\n     * - **`inherit`** - {boolean=false}, If `true` will inherit url parameters from current url.\n     * - **`relative`** - {object=}, When transitioning with relative path (e.g '^'), \n     *    defines which state to be relative from.\n     * - **`notify`** - {boolean=true}, If `true` will broadcast $stateChangeStart and $stateChangeSuccess events.\n     * - **`reload`** (v0.2.5) - {boolean=false|string=|object=}, If `true` will force transition even if the state or params \n     *    have not changed, aka a reload of the same state. It differs from reloadOnSearch because you'd\n     *    use this when you want to force a reload when *everything* is the same, including search params.\n     *    if String, then will reload the state with the name given in reload, and any children.\n     *    if Object, then a stateObj is expected, will reload the state found in stateObj, and any children.\n     *\n     * @returns {promise} A promise representing the state of the new transition. See\n     * {@link ui.router.state.$state#methods_go $state.go}.\n     */\n    $state.transitionTo = function transitionTo(to, toParams, options) {\n      toParams = toParams || {};\n      options = extend({\n        location: true, inherit: false, relative: null, notify: true, reload: false, $retry: false\n      }, options || {});\n\n      var from = $state.$current, fromParams = $state.params, fromPath = from.path;\n      var evt, toState = findState(to, options.relative);\n\n      // Store the hash param for later (since it will be stripped out by various methods)\n      var hash = toParams['#'];\n\n      if (!isDefined(toState)) {\n        var redirect = { to: to, toParams: toParams, options: options };\n        var redirectResult = handleRedirect(redirect, from.self, fromParams, options);\n\n        if (redirectResult) {\n          return redirectResult;\n        }\n\n        // Always retry once if the $stateNotFound was not prevented\n        // (handles either redirect changed or state lazy-definition)\n        to = redirect.to;\n        toParams = redirect.toParams;\n        options = redirect.options;\n        toState = findState(to, options.relative);\n\n        if (!isDefined(toState)) {\n          if (!options.relative) throw new Error(\"No such state '\" + to + \"'\");\n          throw new Error(\"Could not resolve '\" + to + \"' from state '\" + options.relative + \"'\");\n        }\n      }\n      if (toState[abstractKey]) throw new Error(\"Cannot transition to abstract state '\" + to + \"'\");\n      if (options.inherit) toParams = inheritParams($stateParams, toParams || {}, $state.$current, toState);\n      if (!toState.params.$$validates(toParams)) return TransitionFailed;\n\n      toParams = toState.params.$$values(toParams);\n      to = toState;\n\n      var toPath = to.path;\n\n      // Starting from the root of the path, keep all levels that haven't changed\n      var keep = 0, state = toPath[keep], locals = root.locals, toLocals = [];\n\n      if (!options.reload) {\n        while (state && state === fromPath[keep] && state.ownParams.$$equals(toParams, fromParams)) {\n          locals = toLocals[keep] = state.locals;\n          keep++;\n          state = toPath[keep];\n        }\n      } else if (isString(options.reload) || isObject(options.reload)) {\n        if (isObject(options.reload) && !options.reload.name) {\n          throw new Error('Invalid reload state object');\n        }\n        \n        var reloadState = options.reload === true ? fromPath[0] : findState(options.reload);\n        if (options.reload && !reloadState) {\n          throw new Error(\"No such reload state '\" + (isString(options.reload) ? options.reload : options.reload.name) + \"'\");\n        }\n\n        while (state && state === fromPath[keep] && state !== reloadState) {\n          locals = toLocals[keep] = state.locals;\n          keep++;\n          state = toPath[keep];\n        }\n      }\n\n      // If we're going to the same state and all locals are kept, we've got nothing to do.\n      // But clear 'transition', as we still want to cancel any other pending transitions.\n      // TODO: We may not want to bump 'transition' if we're called from a location change\n      // that we've initiated ourselves, because we might accidentally abort a legitimate\n      // transition initiated from code?\n      if (shouldSkipReload(to, toParams, from, fromParams, locals, options)) {\n        if (hash) toParams['#'] = hash;\n        $state.params = toParams;\n        copy($state.params, $stateParams);\n        copy(filterByKeys(to.params.$$keys(), $stateParams), to.locals.globals.$stateParams);\n        if (options.location && to.navigable && to.navigable.url) {\n          $urlRouter.push(to.navigable.url, toParams, {\n            $$avoidResync: true, replace: options.location === 'replace'\n          });\n          $urlRouter.update(true);\n        }\n        $state.transition = null;\n        return $q.when($state.current);\n      }\n\n      // Filter parameters before we pass them to event handlers etc.\n      toParams = filterByKeys(to.params.$$keys(), toParams || {});\n      \n      // Re-add the saved hash before we start returning things or broadcasting $stateChangeStart\n      if (hash) toParams['#'] = hash;\n      \n      // Broadcast start event and cancel the transition if requested\n      if (options.notify) {\n        /**\n         * @ngdoc event\n         * @name ui.router.state.$state#$stateChangeStart\n         * @eventOf ui.router.state.$state\n         * @eventType broadcast on root scope\n         * @description\n         * Fired when the state transition **begins**. You can use `event.preventDefault()`\n         * to prevent the transition from happening and then the transition promise will be\n         * rejected with a `'transition prevented'` value.\n         *\n         * @param {Object} event Event object.\n         * @param {State} toState The state being transitioned to.\n         * @param {Object} toParams The params supplied to the `toState`.\n         * @param {State} fromState The current state, pre-transition.\n         * @param {Object} fromParams The params supplied to the `fromState`.\n         *\n         * @example\n         *\n         * <pre>\n         * $rootScope.$on('$stateChangeStart',\n         * function(event, toState, toParams, fromState, fromParams){\n         *     event.preventDefault();\n         *     // transitionTo() promise will be rejected with\n         *     // a 'transition prevented' error\n         * })\n         * </pre>\n         */\n        if ($rootScope.$broadcast('$stateChangeStart', to.self, toParams, from.self, fromParams, options).defaultPrevented) {\n          $rootScope.$broadcast('$stateChangeCancel', to.self, toParams, from.self, fromParams);\n          //Don't update and resync url if there's been a new transition started. see issue #2238, #600\n          if ($state.transition == null) $urlRouter.update();\n          return TransitionPrevented;\n        }\n      }\n\n      // Resolve locals for the remaining states, but don't update any global state just\n      // yet -- if anything fails to resolve the current state needs to remain untouched.\n      // We also set up an inheritance chain for the locals here. This allows the view directive\n      // to quickly look up the correct definition for each view in the current state. Even\n      // though we create the locals object itself outside resolveState(), it is initially\n      // empty and gets filled asynchronously. We need to keep track of the promise for the\n      // (fully resolved) current locals, and pass this down the chain.\n      var resolved = $q.when(locals);\n\n      for (var l = keep; l < toPath.length; l++, state = toPath[l]) {\n        locals = toLocals[l] = inherit(locals);\n        resolved = resolveState(state, toParams, state === to, resolved, locals, options);\n      }\n\n      // Once everything is resolved, we are ready to perform the actual transition\n      // and return a promise for the new state. We also keep track of what the\n      // current promise is, so that we can detect overlapping transitions and\n      // keep only the outcome of the last transition.\n      var transition = $state.transition = resolved.then(function () {\n        var l, entering, exiting;\n\n        if ($state.transition !== transition) {\n          $rootScope.$broadcast('$stateChangeCancel', to.self, toParams, from.self, fromParams);\n          return TransitionSuperseded;\n        }\n\n        // Exit 'from' states not kept\n        for (l = fromPath.length - 1; l >= keep; l--) {\n          exiting = fromPath[l];\n          if (exiting.self.onExit) {\n            $injector.invoke(exiting.self.onExit, exiting.self, exiting.locals.globals);\n          }\n          exiting.locals = null;\n        }\n\n        // Enter 'to' states not kept\n        for (l = keep; l < toPath.length; l++) {\n          entering = toPath[l];\n          entering.locals = toLocals[l];\n          if (entering.self.onEnter) {\n            $injector.invoke(entering.self.onEnter, entering.self, entering.locals.globals);\n          }\n        }\n\n        // Run it again, to catch any transitions in callbacks\n        if ($state.transition !== transition) {\n          $rootScope.$broadcast('$stateChangeCancel', to.self, toParams, from.self, fromParams);\n          return TransitionSuperseded;\n        }\n\n        // Update globals in $state\n        $state.$current = to;\n        $state.current = to.self;\n        $state.params = toParams;\n        copy($state.params, $stateParams);\n        $state.transition = null;\n\n        if (options.location && to.navigable) {\n          $urlRouter.push(to.navigable.url, to.navigable.locals.globals.$stateParams, {\n            $$avoidResync: true, replace: options.location === 'replace'\n          });\n        }\n\n        if (options.notify) {\n        /**\n         * @ngdoc event\n         * @name ui.router.state.$state#$stateChangeSuccess\n         * @eventOf ui.router.state.$state\n         * @eventType broadcast on root scope\n         * @description\n         * Fired once the state transition is **complete**.\n         *\n         * @param {Object} event Event object.\n         * @param {State} toState The state being transitioned to.\n         * @param {Object} toParams The params supplied to the `toState`.\n         * @param {State} fromState The current state, pre-transition.\n         * @param {Object} fromParams The params supplied to the `fromState`.\n         */\n          $rootScope.$broadcast('$stateChangeSuccess', to.self, toParams, from.self, fromParams);\n        }\n        $urlRouter.update(true);\n\n        return $state.current;\n      }).then(null, function (error) {\n        // propagate TransitionSuperseded error without emitting $stateChangeCancel\n        // as it was already emitted in the success handler above\n        if (error === TransitionSupersededError) return TransitionSuperseded;\n\n        if ($state.transition !== transition) {\n          $rootScope.$broadcast('$stateChangeCancel', to.self, toParams, from.self, fromParams);\n          return TransitionSuperseded;\n        }\n\n        $state.transition = null;\n        /**\n         * @ngdoc event\n         * @name ui.router.state.$state#$stateChangeError\n         * @eventOf ui.router.state.$state\n         * @eventType broadcast on root scope\n         * @description\n         * Fired when an **error occurs** during transition. It's important to note that if you\n         * have any errors in your resolve functions (javascript errors, non-existent services, etc)\n         * they will not throw traditionally. You must listen for this $stateChangeError event to\n         * catch **ALL** errors.\n         *\n         * @param {Object} event Event object.\n         * @param {State} toState The state being transitioned to.\n         * @param {Object} toParams The params supplied to the `toState`.\n         * @param {State} fromState The current state, pre-transition.\n         * @param {Object} fromParams The params supplied to the `fromState`.\n         * @param {Error} error The resolve error object.\n         */\n        evt = $rootScope.$broadcast('$stateChangeError', to.self, toParams, from.self, fromParams, error);\n\n        if (!evt.defaultPrevented) {\n          $urlRouter.update();\n        }\n\n        return $q.reject(error);\n      });\n\n      return transition;\n    };\n\n    /**\n     * @ngdoc function\n     * @name ui.router.state.$state#is\n     * @methodOf ui.router.state.$state\n     *\n     * @description\n     * Similar to {@link ui.router.state.$state#methods_includes $state.includes},\n     * but only checks for the full state name. If params is supplied then it will be\n     * tested for strict equality against the current active params object, so all params\n     * must match with none missing and no extras.\n     *\n     * @example\n     * <pre>\n     * $state.$current.name = 'contacts.details.item';\n     *\n     * // absolute name\n     * $state.is('contact.details.item'); // returns true\n     * $state.is(contactDetailItemStateObject); // returns true\n     *\n     * // relative name (. and ^), typically from a template\n     * // E.g. from the 'contacts.details' template\n     * <div ng-class=\"{highlighted: $state.is('.item')}\">Item</div>\n     * </pre>\n     *\n     * @param {string|object} stateOrName The state name (absolute or relative) or state object you'd like to check.\n     * @param {object=} params A param object, e.g. `{sectionId: section.id}`, that you'd like\n     * to test against the current active state.\n     * @param {object=} options An options object.  The options are:\n     *\n     * - **`relative`** - {string|object} -  If `stateOrName` is a relative state name and `options.relative` is set, .is will\n     * test relative to `options.relative` state (or name).\n     *\n     * @returns {boolean} Returns true if it is the state.\n     */\n    $state.is = function is(stateOrName, params, options) {\n      options = extend({ relative: $state.$current }, options || {});\n      var state = findState(stateOrName, options.relative);\n\n      if (!isDefined(state)) { return undefined; }\n      if ($state.$current !== state) { return false; }\n      return params ? equalForKeys(state.params.$$values(params), $stateParams) : true;\n    };\n\n    /**\n     * @ngdoc function\n     * @name ui.router.state.$state#includes\n     * @methodOf ui.router.state.$state\n     *\n     * @description\n     * A method to determine if the current active state is equal to or is the child of the\n     * state stateName. If any params are passed then they will be tested for a match as well.\n     * Not all the parameters need to be passed, just the ones you'd like to test for equality.\n     *\n     * @example\n     * Partial and relative names\n     * <pre>\n     * $state.$current.name = 'contacts.details.item';\n     *\n     * // Using partial names\n     * $state.includes(\"contacts\"); // returns true\n     * $state.includes(\"contacts.details\"); // returns true\n     * $state.includes(\"contacts.details.item\"); // returns true\n     * $state.includes(\"contacts.list\"); // returns false\n     * $state.includes(\"about\"); // returns false\n     *\n     * // Using relative names (. and ^), typically from a template\n     * // E.g. from the 'contacts.details' template\n     * <div ng-class=\"{highlighted: $state.includes('.item')}\">Item</div>\n     * </pre>\n     *\n     * Basic globbing patterns\n     * <pre>\n     * $state.$current.name = 'contacts.details.item.url';\n     *\n     * $state.includes(\"*.details.*.*\"); // returns true\n     * $state.includes(\"*.details.**\"); // returns true\n     * $state.includes(\"**.item.**\"); // returns true\n     * $state.includes(\"*.details.item.url\"); // returns true\n     * $state.includes(\"*.details.*.url\"); // returns true\n     * $state.includes(\"*.details.*\"); // returns false\n     * $state.includes(\"item.**\"); // returns false\n     * </pre>\n     *\n     * @param {string} stateOrName A partial name, relative name, or glob pattern\n     * to be searched for within the current state name.\n     * @param {object=} params A param object, e.g. `{sectionId: section.id}`,\n     * that you'd like to test against the current active state.\n     * @param {object=} options An options object.  The options are:\n     *\n     * - **`relative`** - {string|object=} -  If `stateOrName` is a relative state reference and `options.relative` is set,\n     * .includes will test relative to `options.relative` state (or name).\n     *\n     * @returns {boolean} Returns true if it does include the state\n     */\n    $state.includes = function includes(stateOrName, params, options) {\n      options = extend({ relative: $state.$current }, options || {});\n      if (isString(stateOrName) && isGlob(stateOrName)) {\n        if (!doesStateMatchGlob(stateOrName)) {\n          return false;\n        }\n        stateOrName = $state.$current.name;\n      }\n\n      var state = findState(stateOrName, options.relative);\n      if (!isDefined(state)) { return undefined; }\n      if (!isDefined($state.$current.includes[state.name])) { return false; }\n      if (!params) { return true; }\n\n      var keys = objectKeys(params);\n      for (var i = 0; i < keys.length; i++) {\n        var key = keys[i], paramDef = state.params[key];\n        if (paramDef && !paramDef.type.equals($stateParams[key], params[key])) {\n          return false;\n        }\n      }\n\n      return true;\n    };\n\n\n    /**\n     * @ngdoc function\n     * @name ui.router.state.$state#href\n     * @methodOf ui.router.state.$state\n     *\n     * @description\n     * A url generation method that returns the compiled url for the given state populated with the given params.\n     *\n     * @example\n     * <pre>\n     * expect($state.href(\"about.person\", { person: \"bob\" })).toEqual(\"/about/bob\");\n     * </pre>\n     *\n     * @param {string|object} stateOrName The state name or state object you'd like to generate a url from.\n     * @param {object=} params An object of parameter values to fill the state's required parameters.\n     * @param {object=} options Options object. The options are:\n     *\n     * - **`lossy`** - {boolean=true} -  If true, and if there is no url associated with the state provided in the\n     *    first parameter, then the constructed href url will be built from the first navigable ancestor (aka\n     *    ancestor with a valid url).\n     * - **`inherit`** - {boolean=true}, If `true` will inherit url parameters from current url.\n     * - **`relative`** - {object=$state.$current}, When transitioning with relative path (e.g '^'), \n     *    defines which state to be relative from.\n     * - **`absolute`** - {boolean=false},  If true will generate an absolute url, e.g. \"http://www.example.com/fullurl\".\n     * \n     * @returns {string} compiled state url\n     */\n    $state.href = function href(stateOrName, params, options) {\n      options = extend({\n        lossy:    true,\n        inherit:  true,\n        absolute: false,\n        relative: $state.$current\n      }, options || {});\n\n      var state = findState(stateOrName, options.relative);\n\n      if (!isDefined(state)) return null;\n      if (options.inherit) params = inheritParams($stateParams, params || {}, $state.$current, state);\n      \n      var nav = (state && options.lossy) ? state.navigable : state;\n\n      if (!nav || nav.url === undefined || nav.url === null) {\n        return null;\n      }\n      return $urlRouter.href(nav.url, filterByKeys(state.params.$$keys().concat('#'), params || {}), {\n        absolute: options.absolute\n      });\n    };\n\n    /**\n     * @ngdoc function\n     * @name ui.router.state.$state#get\n     * @methodOf ui.router.state.$state\n     *\n     * @description\n     * Returns the state configuration object for any specific state or all states.\n     *\n     * @param {string|object=} stateOrName (absolute or relative) If provided, will only get the config for\n     * the requested state. If not provided, returns an array of ALL state configs.\n     * @param {string|object=} context When stateOrName is a relative state reference, the state will be retrieved relative to context.\n     * @returns {Object|Array} State configuration object or array of all objects.\n     */\n    $state.get = function (stateOrName, context) {\n      if (arguments.length === 0) return map(objectKeys(states), function(name) { return states[name].self; });\n      var state = findState(stateOrName, context || $state.$current);\n      return (state && state.self) ? state.self : null;\n    };\n\n    function resolveState(state, params, paramsAreFiltered, inherited, dst, options) {\n      // Make a restricted $stateParams with only the parameters that apply to this state if\n      // necessary. In addition to being available to the controller and onEnter/onExit callbacks,\n      // we also need $stateParams to be available for any $injector calls we make during the\n      // dependency resolution process.\n      var $stateParams = (paramsAreFiltered) ? params : filterByKeys(state.params.$$keys(), params);\n      var locals = { $stateParams: $stateParams };\n\n      // Resolve 'global' dependencies for the state, i.e. those not specific to a view.\n      // We're also including $stateParams in this; that way the parameters are restricted\n      // to the set that should be visible to the state, and are independent of when we update\n      // the global $state and $stateParams values.\n      dst.resolve = $resolve.resolve(state.resolve, locals, dst.resolve, state);\n      var promises = [dst.resolve.then(function (globals) {\n        dst.globals = globals;\n      })];\n      if (inherited) promises.push(inherited);\n\n      function resolveViews() {\n        var viewsPromises = [];\n\n        // Resolve template and dependencies for all views.\n        forEach(state.views, function (view, name) {\n          var injectables = (view.resolve && view.resolve !== state.resolve ? view.resolve : {});\n          injectables.$template = [ function () {\n            return $view.load(name, { view: view, locals: dst.globals, params: $stateParams, notify: options.notify }) || '';\n          }];\n\n          viewsPromises.push($resolve.resolve(injectables, dst.globals, dst.resolve, state).then(function (result) {\n            // References to the controller (only instantiated at link time)\n            if (isFunction(view.controllerProvider) || isArray(view.controllerProvider)) {\n              var injectLocals = angular.extend({}, injectables, dst.globals);\n              result.$$controller = $injector.invoke(view.controllerProvider, null, injectLocals);\n            } else {\n              result.$$controller = view.controller;\n            }\n            // Provide access to the state itself for internal use\n            result.$$state = state;\n            result.$$controllerAs = view.controllerAs;\n            result.$$resolveAs = view.resolveAs;\n            dst[name] = result;\n          }));\n        });\n\n        return $q.all(viewsPromises).then(function(){\n          return dst.globals;\n        });\n      }\n\n      // Wait for all the promises and then return the activation object\n      return $q.all(promises).then(resolveViews).then(function (values) {\n        return dst;\n      });\n    }\n\n    return $state;\n  }\n\n  function shouldSkipReload(to, toParams, from, fromParams, locals, options) {\n    // Return true if there are no differences in non-search (path/object) params, false if there are differences\n    function nonSearchParamsEqual(fromAndToState, fromParams, toParams) {\n      // Identify whether all the parameters that differ between `fromParams` and `toParams` were search params.\n      function notSearchParam(key) {\n        return fromAndToState.params[key].location != \"search\";\n      }\n      var nonQueryParamKeys = fromAndToState.params.$$keys().filter(notSearchParam);\n      var nonQueryParams = pick.apply({}, [fromAndToState.params].concat(nonQueryParamKeys));\n      var nonQueryParamSet = new $$UMFP.ParamSet(nonQueryParams);\n      return nonQueryParamSet.$$equals(fromParams, toParams);\n    }\n\n    // If reload was not explicitly requested\n    // and we're transitioning to the same state we're already in\n    // and    the locals didn't change\n    //     or they changed in a way that doesn't merit reloading\n    //        (reloadOnParams:false, or reloadOnSearch.false and only search params changed)\n    // Then return true.\n    if (!options.reload && to === from &&\n      (locals === from.locals || (to.self.reloadOnSearch === false && nonSearchParamsEqual(from, fromParams, toParams)))) {\n      return true;\n    }\n  }\n}\n\nangular.module('ui.router.state')\n  .factory('$stateParams', function () { return {}; })\n  .constant(\"$state.runtime\", { autoinject: true })\n  .provider('$state', $StateProvider)\n  // Inject $state to initialize when entering runtime. #2574\n  .run(['$injector', function ($injector) {\n    // Allow tests (stateSpec.js) to turn this off by defining this constant\n    if ($injector.get(\"$state.runtime\").autoinject) {\n      $injector.get('$state');\n    }\n  }]);\n\n\n$ViewProvider.$inject = [];\nfunction $ViewProvider() {\n\n  this.$get = $get;\n  /**\n   * @ngdoc object\n   * @name ui.router.state.$view\n   *\n   * @requires ui.router.util.$templateFactory\n   * @requires $rootScope\n   *\n   * @description\n   *\n   */\n  $get.$inject = ['$rootScope', '$templateFactory'];\n  function $get(   $rootScope,   $templateFactory) {\n    return {\n      // $view.load('full.viewName', { template: ..., controller: ..., resolve: ..., async: false, params: ... })\n      /**\n       * @ngdoc function\n       * @name ui.router.state.$view#load\n       * @methodOf ui.router.state.$view\n       *\n       * @description\n       *\n       * @param {string} name name\n       * @param {object} options option object.\n       */\n      load: function load(name, options) {\n        var result, defaults = {\n          template: null, controller: null, view: null, locals: null, notify: true, async: true, params: {}\n        };\n        options = extend(defaults, options);\n\n        if (options.view) {\n          result = $templateFactory.fromConfig(options.view, options.params, options.locals);\n        }\n        return result;\n      }\n    };\n  }\n}\n\nangular.module('ui.router.state').provider('$view', $ViewProvider);\n\n/**\n * @ngdoc object\n * @name ui.router.state.$uiViewScrollProvider\n *\n * @description\n * Provider that returns the {@link ui.router.state.$uiViewScroll} service function.\n */\nfunction $ViewScrollProvider() {\n\n  var useAnchorScroll = false;\n\n  /**\n   * @ngdoc function\n   * @name ui.router.state.$uiViewScrollProvider#useAnchorScroll\n   * @methodOf ui.router.state.$uiViewScrollProvider\n   *\n   * @description\n   * Reverts back to using the core [`$anchorScroll`](http://docs.angularjs.org/api/ng.$anchorScroll) service for\n   * scrolling based on the url anchor.\n   */\n  this.useAnchorScroll = function () {\n    useAnchorScroll = true;\n  };\n\n  /**\n   * @ngdoc object\n   * @name ui.router.state.$uiViewScroll\n   *\n   * @requires $anchorScroll\n   * @requires $timeout\n   *\n   * @description\n   * When called with a jqLite element, it scrolls the element into view (after a\n   * `$timeout` so the DOM has time to refresh).\n   *\n   * If you prefer to rely on `$anchorScroll` to scroll the view to the anchor,\n   * this can be enabled by calling {@link ui.router.state.$uiViewScrollProvider#methods_useAnchorScroll `$uiViewScrollProvider.useAnchorScroll()`}.\n   */\n  this.$get = ['$anchorScroll', '$timeout', function ($anchorScroll, $timeout) {\n    if (useAnchorScroll) {\n      return $anchorScroll;\n    }\n\n    return function ($element) {\n      return $timeout(function () {\n        $element[0].scrollIntoView();\n      }, 0, false);\n    };\n  }];\n}\n\nangular.module('ui.router.state').provider('$uiViewScroll', $ViewScrollProvider);\n\n/**\n * @ngdoc directive\n * @name ui.router.state.directive:ui-view\n *\n * @requires ui.router.state.$state\n * @requires $compile\n * @requires $controller\n * @requires $injector\n * @requires ui.router.state.$uiViewScroll\n * @requires $document\n *\n * @restrict ECA\n *\n * @description\n * The ui-view directive tells $state where to place your templates.\n *\n * @param {string=} name A view name. The name should be unique amongst the other views in the\n * same state. You can have views of the same name that live in different states.\n *\n * @param {string=} autoscroll It allows you to set the scroll behavior of the browser window\n * when a view is populated. By default, $anchorScroll is overridden by ui-router's custom scroll\n * service, {@link ui.router.state.$uiViewScroll}. This custom service let's you\n * scroll ui-view elements into view when they are populated during a state activation.\n *\n * *Note: To revert back to old [`$anchorScroll`](http://docs.angularjs.org/api/ng.$anchorScroll)\n * functionality, call `$uiViewScrollProvider.useAnchorScroll()`.*\n *\n * @param {string=} onload Expression to evaluate whenever the view updates.\n *\n * @example\n * A view can be unnamed or named.\n * <pre>\n * <!-- Unnamed -->\n * <div ui-view></div>\n *\n * <!-- Named -->\n * <div ui-view=\"viewName\"></div>\n * </pre>\n *\n * You can only have one unnamed view within any template (or root html). If you are only using a\n * single view and it is unnamed then you can populate it like so:\n * <pre>\n * <div ui-view></div>\n * $stateProvider.state(\"home\", {\n *   template: \"<h1>HELLO!</h1>\"\n * })\n * </pre>\n *\n * The above is a convenient shortcut equivalent to specifying your view explicitly with the {@link ui.router.state.$stateProvider#methods_state `views`}\n * config property, by name, in this case an empty name:\n * <pre>\n * $stateProvider.state(\"home\", {\n *   views: {\n *     \"\": {\n *       template: \"<h1>HELLO!</h1>\"\n *     }\n *   }    \n * })\n * </pre>\n *\n * But typically you'll only use the views property if you name your view or have more than one view\n * in the same template. There's not really a compelling reason to name a view if its the only one,\n * but you could if you wanted, like so:\n * <pre>\n * <div ui-view=\"main\"></div>\n * </pre>\n * <pre>\n * $stateProvider.state(\"home\", {\n *   views: {\n *     \"main\": {\n *       template: \"<h1>HELLO!</h1>\"\n *     }\n *   }    \n * })\n * </pre>\n *\n * Really though, you'll use views to set up multiple views:\n * <pre>\n * <div ui-view></div>\n * <div ui-view=\"chart\"></div>\n * <div ui-view=\"data\"></div>\n * </pre>\n *\n * <pre>\n * $stateProvider.state(\"home\", {\n *   views: {\n *     \"\": {\n *       template: \"<h1>HELLO!</h1>\"\n *     },\n *     \"chart\": {\n *       template: \"<chart_thing/>\"\n *     },\n *     \"data\": {\n *       template: \"<data_thing/>\"\n *     }\n *   }    \n * })\n * </pre>\n *\n * Examples for `autoscroll`:\n *\n * <pre>\n * <!-- If autoscroll present with no expression,\n *      then scroll ui-view into view -->\n * <ui-view autoscroll/>\n *\n * <!-- If autoscroll present with valid expression,\n *      then scroll ui-view into view if expression evaluates to true -->\n * <ui-view autoscroll='true'/>\n * <ui-view autoscroll='false'/>\n * <ui-view autoscroll='scopeVariable'/>\n * </pre>\n *\n * Resolve data:\n *\n * The resolved data from the state's `resolve` block is placed on the scope as `$resolve` (this\n * can be customized using [[ViewDeclaration.resolveAs]]).  This can be then accessed from the template.\n *\n * Note that when `controllerAs` is being used, `$resolve` is set on the controller instance *after* the\n * controller is instantiated.  The `$onInit()` hook can be used to perform initialization code which\n * depends on `$resolve` data.\n *\n * Example usage of $resolve in a view template\n * <pre>\n * $stateProvider.state('home', {\n *   template: '<my-component user=\"$resolve.user\"></my-component>',\n *   resolve: {\n *     user: function(UserService) { return UserService.fetchUser(); }\n *   }\n * });\n * </pre>\n */\n$ViewDirective.$inject = ['$state', '$injector', '$uiViewScroll', '$interpolate', '$q'];\nfunction $ViewDirective(   $state,   $injector,   $uiViewScroll,   $interpolate,   $q) {\n\n  function getService() {\n    return ($injector.has) ? function(service) {\n      return $injector.has(service) ? $injector.get(service) : null;\n    } : function(service) {\n      try {\n        return $injector.get(service);\n      } catch (e) {\n        return null;\n      }\n    };\n  }\n\n  var service = getService(),\n      $animator = service('$animator'),\n      $animate = service('$animate');\n\n  // Returns a set of DOM manipulation functions based on which Angular version\n  // it should use\n  function getRenderer(attrs, scope) {\n    var statics = function() {\n      return {\n        enter: function (element, target, cb) { target.after(element); cb(); },\n        leave: function (element, cb) { element.remove(); cb(); }\n      };\n    };\n\n    if ($animate) {\n      return {\n        enter: function(element, target, cb) {\n          if (angular.version.minor > 2) {\n            $animate.enter(element, null, target).then(cb);\n          } else {\n            $animate.enter(element, null, target, cb);\n          }\n        },\n        leave: function(element, cb) {\n          if (angular.version.minor > 2) {\n            $animate.leave(element).then(cb);\n          } else {\n            $animate.leave(element, cb);\n          }\n        }\n      };\n    }\n\n    if ($animator) {\n      var animate = $animator && $animator(scope, attrs);\n\n      return {\n        enter: function(element, target, cb) {animate.enter(element, null, target); cb(); },\n        leave: function(element, cb) { animate.leave(element); cb(); }\n      };\n    }\n\n    return statics();\n  }\n\n  var directive = {\n    restrict: 'ECA',\n    terminal: true,\n    priority: 400,\n    transclude: 'element',\n    compile: function (tElement, tAttrs, $transclude) {\n      return function (scope, $element, attrs) {\n        var previousEl, currentEl, currentScope, latestLocals,\n            onloadExp     = attrs.onload || '',\n            autoScrollExp = attrs.autoscroll,\n            renderer      = getRenderer(attrs, scope),\n            inherited     = $element.inheritedData('$uiView');\n\n        scope.$on('$stateChangeSuccess', function() {\n          updateView(false);\n        });\n\n        updateView(true);\n\n        function cleanupLastView() {\n          if (previousEl) {\n            previousEl.remove();\n            previousEl = null;\n          }\n\n          if (currentScope) {\n            currentScope.$destroy();\n            currentScope = null;\n          }\n\n          if (currentEl) {\n            var $uiViewData = currentEl.data('$uiViewAnim');\n            renderer.leave(currentEl, function() {\n              $uiViewData.$$animLeave.resolve();\n              previousEl = null;\n            });\n\n            previousEl = currentEl;\n            currentEl = null;\n          }\n        }\n\n        function updateView(firstTime) {\n          var newScope,\n              name            = getUiViewName(scope, attrs, $element, $interpolate),\n              previousLocals  = name && $state.$current && $state.$current.locals[name];\n\n          if (!firstTime && previousLocals === latestLocals) return; // nothing to do\n          newScope = scope.$new();\n          latestLocals = $state.$current.locals[name];\n\n          /**\n           * @ngdoc event\n           * @name ui.router.state.directive:ui-view#$viewContentLoading\n           * @eventOf ui.router.state.directive:ui-view\n           * @eventType emits on ui-view directive scope\n           * @description\n           *\n           * Fired once the view **begins loading**, *before* the DOM is rendered.\n           *\n           * @param {Object} event Event object.\n           * @param {string} viewName Name of the view.\n           */\n          newScope.$emit('$viewContentLoading', name);\n\n          var clone = $transclude(newScope, function(clone) {\n            var animEnter = $q.defer(), animLeave = $q.defer();\n            var viewAnimData = {\n              $animEnter: animEnter.promise,\n              $animLeave: animLeave.promise,\n              $$animLeave: animLeave\n            };\n\n            clone.data('$uiViewAnim', viewAnimData);\n            renderer.enter(clone, $element, function onUiViewEnter() {\n              animEnter.resolve();\n              if(currentScope) {\n                currentScope.$emit('$viewContentAnimationEnded');\n              }\n\n              if (angular.isDefined(autoScrollExp) && !autoScrollExp || scope.$eval(autoScrollExp)) {\n                $uiViewScroll(clone);\n              }\n            });\n            cleanupLastView();\n          });\n\n          currentEl = clone;\n          currentScope = newScope;\n          /**\n           * @ngdoc event\n           * @name ui.router.state.directive:ui-view#$viewContentLoaded\n           * @eventOf ui.router.state.directive:ui-view\n           * @eventType emits on ui-view directive scope\n           * @description\n           * Fired once the view is **loaded**, *after* the DOM is rendered.\n           *\n           * @param {Object} event Event object.\n           * @param {string} viewName Name of the view.\n           */\n          currentScope.$emit('$viewContentLoaded', name);\n          currentScope.$eval(onloadExp);\n        }\n      };\n    }\n  };\n\n  return directive;\n}\n\n$ViewDirectiveFill.$inject = ['$compile', '$controller', '$state', '$interpolate'];\nfunction $ViewDirectiveFill (  $compile,   $controller,   $state,   $interpolate) {\n  return {\n    restrict: 'ECA',\n    priority: -400,\n    compile: function (tElement) {\n      var initial = tElement.html();\n      return function (scope, $element, attrs) {\n        var current = $state.$current,\n            name = getUiViewName(scope, attrs, $element, $interpolate),\n            locals  = current && current.locals[name];\n\n        if (! locals) {\n          return;\n        }\n\n        $element.data('$uiView', { name: name, state: locals.$$state });\n        $element.html(locals.$template ? locals.$template : initial);\n\n        var resolveData = angular.extend({}, locals);\n        scope[locals.$$resolveAs] = resolveData;\n\n        var link = $compile($element.contents());\n\n        if (locals.$$controller) {\n          locals.$scope = scope;\n          locals.$element = $element;\n          var controller = $controller(locals.$$controller, locals);\n          if (locals.$$controllerAs) {\n            scope[locals.$$controllerAs] = controller;\n            scope[locals.$$controllerAs][locals.$$resolveAs] = resolveData;\n          }\n          if (isFunction(controller.$onInit)) controller.$onInit();\n          $element.data('$ngControllerController', controller);\n          $element.children().data('$ngControllerController', controller);\n        }\n\n        link(scope);\n      };\n    }\n  };\n}\n\n/**\n * Shared ui-view code for both directives:\n * Given scope, element, and its attributes, return the view's name\n */\nfunction getUiViewName(scope, attrs, element, $interpolate) {\n  var name = $interpolate(attrs.uiView || attrs.name || '')(scope);\n  var uiViewCreatedBy = element.inheritedData('$uiView');\n  return name.indexOf('@') >= 0 ?  name :  (name + '@' + (uiViewCreatedBy ? uiViewCreatedBy.state.name : ''));\n}\n\nangular.module('ui.router.state').directive('uiView', $ViewDirective);\nangular.module('ui.router.state').directive('uiView', $ViewDirectiveFill);\n\nfunction parseStateRef(ref, current) {\n  var preparsed = ref.match(/^\\s*({[^}]*})\\s*$/), parsed;\n  if (preparsed) ref = current + '(' + preparsed[1] + ')';\n  parsed = ref.replace(/\\n/g, \" \").match(/^([^(]+?)\\s*(\\((.*)\\))?$/);\n  if (!parsed || parsed.length !== 4) throw new Error(\"Invalid state ref '\" + ref + \"'\");\n  return { state: parsed[1], paramExpr: parsed[3] || null };\n}\n\nfunction stateContext(el) {\n  var stateData = el.parent().inheritedData('$uiView');\n\n  if (stateData && stateData.state && stateData.state.name) {\n    return stateData.state;\n  }\n}\n\nfunction getTypeInfo(el) {\n  // SVGAElement does not use the href attribute, but rather the 'xlinkHref' attribute.\n  var isSvg = Object.prototype.toString.call(el.prop('href')) === '[object SVGAnimatedString]';\n  var isForm = el[0].nodeName === \"FORM\";\n\n  return {\n    attr: isForm ? \"action\" : (isSvg ? 'xlink:href' : 'href'),\n    isAnchor: el.prop(\"tagName\").toUpperCase() === \"A\",\n    clickable: !isForm\n  };\n}\n\nfunction clickHook(el, $state, $timeout, type, current) {\n  return function(e) {\n    var button = e.which || e.button, target = current();\n\n    if (!(button > 1 || e.ctrlKey || e.metaKey || e.shiftKey || el.attr('target'))) {\n      // HACK: This is to allow ng-clicks to be processed before the transition is initiated:\n      var transition = $timeout(function() {\n        $state.go(target.state, target.params, target.options);\n      });\n      e.preventDefault();\n\n      // if the state has no URL, ignore one preventDefault from the <a> directive.\n      var ignorePreventDefaultCount = type.isAnchor && !target.href ? 1: 0;\n\n      e.preventDefault = function() {\n        if (ignorePreventDefaultCount-- <= 0) $timeout.cancel(transition);\n      };\n    }\n  };\n}\n\nfunction defaultOpts(el, $state) {\n  return { relative: stateContext(el) || $state.$current, inherit: true };\n}\n\n/**\n * @ngdoc directive\n * @name ui.router.state.directive:ui-sref\n *\n * @requires ui.router.state.$state\n * @requires $timeout\n *\n * @restrict A\n *\n * @description\n * A directive that binds a link (`<a>` tag) to a state. If the state has an associated\n * URL, the directive will automatically generate & update the `href` attribute via\n * the {@link ui.router.state.$state#methods_href $state.href()} method. Clicking\n * the link will trigger a state transition with optional parameters.\n *\n * Also middle-clicking, right-clicking, and ctrl-clicking on the link will be\n * handled natively by the browser.\n *\n * You can also use relative state paths within ui-sref, just like the relative\n * paths passed to `$state.go()`. You just need to be aware that the path is relative\n * to the state that the link lives in, in other words the state that loaded the\n * template containing the link.\n *\n * You can specify options to pass to {@link ui.router.state.$state#methods_go $state.go()}\n * using the `ui-sref-opts` attribute. Options are restricted to `location`, `inherit`,\n * and `reload`.\n *\n * @example\n * Here's an example of how you'd use ui-sref and how it would compile. If you have the\n * following template:\n * <pre>\n * <a ui-sref=\"home\">Home</a> | <a ui-sref=\"about\">About</a> | <a ui-sref=\"{page: 2}\">Next page</a>\n *\n * <ul>\n *     <li ng-repeat=\"contact in contacts\">\n *         <a ui-sref=\"contacts.detail({ id: contact.id })\">{{ contact.name }}</a>\n *     </li>\n * </ul>\n * </pre>\n *\n * Then the compiled html would be (assuming Html5Mode is off and current state is contacts):\n * <pre>\n * <a href=\"#/home\" ui-sref=\"home\">Home</a> | <a href=\"#/about\" ui-sref=\"about\">About</a> | <a href=\"#/contacts?page=2\" ui-sref=\"{page: 2}\">Next page</a>\n *\n * <ul>\n *     <li ng-repeat=\"contact in contacts\">\n *         <a href=\"#/contacts/1\" ui-sref=\"contacts.detail({ id: contact.id })\">Joe</a>\n *     </li>\n *     <li ng-repeat=\"contact in contacts\">\n *         <a href=\"#/contacts/2\" ui-sref=\"contacts.detail({ id: contact.id })\">Alice</a>\n *     </li>\n *     <li ng-repeat=\"contact in contacts\">\n *         <a href=\"#/contacts/3\" ui-sref=\"contacts.detail({ id: contact.id })\">Bob</a>\n *     </li>\n * </ul>\n *\n * <a ui-sref=\"home\" ui-sref-opts=\"{reload: true}\">Home</a>\n * </pre>\n *\n * @param {string} ui-sref 'stateName' can be any valid absolute or relative state\n * @param {Object} ui-sref-opts options to pass to {@link ui.router.state.$state#methods_go $state.go()}\n */\n$StateRefDirective.$inject = ['$state', '$timeout'];\nfunction $StateRefDirective($state, $timeout) {\n  return {\n    restrict: 'A',\n    require: ['?^uiSrefActive', '?^uiSrefActiveEq'],\n    link: function(scope, element, attrs, uiSrefActive) {\n      var ref    = parseStateRef(attrs.uiSref, $state.current.name);\n      var def    = { state: ref.state, href: null, params: null };\n      var type   = getTypeInfo(element);\n      var active = uiSrefActive[1] || uiSrefActive[0];\n      var unlinkInfoFn = null;\n      var hookFn;\n\n      def.options = extend(defaultOpts(element, $state), attrs.uiSrefOpts ? scope.$eval(attrs.uiSrefOpts) : {});\n\n      var update = function(val) {\n        if (val) def.params = angular.copy(val);\n        def.href = $state.href(ref.state, def.params, def.options);\n\n        if (unlinkInfoFn) unlinkInfoFn();\n        if (active) unlinkInfoFn = active.$$addStateInfo(ref.state, def.params);\n        if (def.href !== null) attrs.$set(type.attr, def.href);\n      };\n\n      if (ref.paramExpr) {\n        scope.$watch(ref.paramExpr, function(val) { if (val !== def.params) update(val); }, true);\n        def.params = angular.copy(scope.$eval(ref.paramExpr));\n      }\n      update();\n\n      if (!type.clickable) return;\n      hookFn = clickHook(element, $state, $timeout, type, function() { return def; });\n      element[element.on ? 'on' : 'bind'](\"click\", hookFn);\n      scope.$on('$destroy', function() {\n        element[element.off ? 'off' : 'unbind'](\"click\", hookFn);\n      });\n    }\n  };\n}\n\n/**\n * @ngdoc directive\n * @name ui.router.state.directive:ui-state\n *\n * @requires ui.router.state.uiSref\n *\n * @restrict A\n *\n * @description\n * Much like ui-sref, but will accept named $scope properties to evaluate for a state definition,\n * params and override options.\n *\n * @param {string} ui-state 'stateName' can be any valid absolute or relative state\n * @param {Object} ui-state-params params to pass to {@link ui.router.state.$state#methods_href $state.href()}\n * @param {Object} ui-state-opts options to pass to {@link ui.router.state.$state#methods_go $state.go()}\n */\n$StateRefDynamicDirective.$inject = ['$state', '$timeout'];\nfunction $StateRefDynamicDirective($state, $timeout) {\n  return {\n    restrict: 'A',\n    require: ['?^uiSrefActive', '?^uiSrefActiveEq'],\n    link: function(scope, element, attrs, uiSrefActive) {\n      var type   = getTypeInfo(element);\n      var active = uiSrefActive[1] || uiSrefActive[0];\n      var group  = [attrs.uiState, attrs.uiStateParams || null, attrs.uiStateOpts || null];\n      var watch  = '[' + group.map(function(val) { return val || 'null'; }).join(', ') + ']';\n      var def    = { state: null, params: null, options: null, href: null };\n      var unlinkInfoFn = null;\n      var hookFn;\n\n      function runStateRefLink (group) {\n        def.state = group[0]; def.params = group[1]; def.options = group[2];\n        def.href = $state.href(def.state, def.params, def.options);\n\n        if (unlinkInfoFn) unlinkInfoFn();\n        if (active) unlinkInfoFn = active.$$addStateInfo(def.state, def.params);\n        if (def.href) attrs.$set(type.attr, def.href);\n      }\n\n      scope.$watch(watch, runStateRefLink, true);\n      runStateRefLink(scope.$eval(watch));\n\n      if (!type.clickable) return;\n      hookFn = clickHook(element, $state, $timeout, type, function() { return def; });\n      element[element.on ? 'on' : 'bind'](\"click\", hookFn);\n      scope.$on('$destroy', function() {\n        element[element.off ? 'off' : 'unbind'](\"click\", hookFn);\n      });\n    }\n  };\n}\n\n\n/**\n * @ngdoc directive\n * @name ui.router.state.directive:ui-sref-active\n *\n * @requires ui.router.state.$state\n * @requires ui.router.state.$stateParams\n * @requires $interpolate\n *\n * @restrict A\n *\n * @description\n * A directive working alongside ui-sref to add classes to an element when the\n * related ui-sref directive's state is active, and removing them when it is inactive.\n * The primary use-case is to simplify the special appearance of navigation menus\n * relying on `ui-sref`, by having the \"active\" state's menu button appear different,\n * distinguishing it from the inactive menu items.\n *\n * ui-sref-active can live on the same element as ui-sref or on a parent element. The first\n * ui-sref-active found at the same level or above the ui-sref will be used.\n *\n * Will activate when the ui-sref's target state or any child state is active. If you\n * need to activate only when the ui-sref target state is active and *not* any of\n * it's children, then you will use\n * {@link ui.router.state.directive:ui-sref-active-eq ui-sref-active-eq}\n *\n * @example\n * Given the following template:\n * <pre>\n * <ul>\n *   <li ui-sref-active=\"active\" class=\"item\">\n *     <a href ui-sref=\"app.user({user: 'bilbobaggins'})\">@bilbobaggins</a>\n *   </li>\n * </ul>\n * </pre>\n *\n *\n * When the app state is \"app.user\" (or any children states), and contains the state parameter \"user\" with value \"bilbobaggins\",\n * the resulting HTML will appear as (note the 'active' class):\n * <pre>\n * <ul>\n *   <li ui-sref-active=\"active\" class=\"item active\">\n *     <a ui-sref=\"app.user({user: 'bilbobaggins'})\" href=\"/users/bilbobaggins\">@bilbobaggins</a>\n *   </li>\n * </ul>\n * </pre>\n *\n * The class name is interpolated **once** during the directives link time (any further changes to the\n * interpolated value are ignored).\n *\n * Multiple classes may be specified in a space-separated format:\n * <pre>\n * <ul>\n *   <li ui-sref-active='class1 class2 class3'>\n *     <a ui-sref=\"app.user\">link</a>\n *   </li>\n * </ul>\n * </pre>\n *\n * It is also possible to pass ui-sref-active an expression that evaluates\n * to an object hash, whose keys represent active class names and whose\n * values represent the respective state names/globs.\n * ui-sref-active will match if the current active state **includes** any of\n * the specified state names/globs, even the abstract ones.\n *\n * @Example\n * Given the following template, with \"admin\" being an abstract state:\n * <pre>\n * <div ui-sref-active=\"{'active': 'admin.*'}\">\n *   <a ui-sref-active=\"active\" ui-sref=\"admin.roles\">Roles</a>\n * </div>\n * </pre>\n *\n * When the current state is \"admin.roles\" the \"active\" class will be applied\n * to both the <div> and <a> elements. It is important to note that the state\n * names/globs passed to ui-sref-active shadow the state provided by ui-sref.\n */\n\n/**\n * @ngdoc directive\n * @name ui.router.state.directive:ui-sref-active-eq\n *\n * @requires ui.router.state.$state\n * @requires ui.router.state.$stateParams\n * @requires $interpolate\n *\n * @restrict A\n *\n * @description\n * The same as {@link ui.router.state.directive:ui-sref-active ui-sref-active} but will only activate\n * when the exact target state used in the `ui-sref` is active; no child states.\n *\n */\n$StateRefActiveDirective.$inject = ['$state', '$stateParams', '$interpolate'];\nfunction $StateRefActiveDirective($state, $stateParams, $interpolate) {\n  return  {\n    restrict: \"A\",\n    controller: ['$scope', '$element', '$attrs', '$timeout', function ($scope, $element, $attrs, $timeout) {\n      var states = [], activeClasses = {}, activeEqClass, uiSrefActive;\n\n      // There probably isn't much point in $observing this\n      // uiSrefActive and uiSrefActiveEq share the same directive object with some\n      // slight difference in logic routing\n      activeEqClass = $interpolate($attrs.uiSrefActiveEq || '', false)($scope);\n\n      try {\n        uiSrefActive = $scope.$eval($attrs.uiSrefActive);\n      } catch (e) {\n        // Do nothing. uiSrefActive is not a valid expression.\n        // Fall back to using $interpolate below\n      }\n      uiSrefActive = uiSrefActive || $interpolate($attrs.uiSrefActive || '', false)($scope);\n      if (isObject(uiSrefActive)) {\n        forEach(uiSrefActive, function(stateOrName, activeClass) {\n          if (isString(stateOrName)) {\n            var ref = parseStateRef(stateOrName, $state.current.name);\n            addState(ref.state, $scope.$eval(ref.paramExpr), activeClass);\n          }\n        });\n      }\n\n      // Allow uiSref to communicate with uiSrefActive[Equals]\n      this.$$addStateInfo = function (newState, newParams) {\n        // we already got an explicit state provided by ui-sref-active, so we\n        // shadow the one that comes from ui-sref\n        if (isObject(uiSrefActive) && states.length > 0) {\n          return;\n        }\n        var deregister = addState(newState, newParams, uiSrefActive);\n        update();\n        return deregister;\n      };\n\n      $scope.$on('$stateChangeSuccess', update);\n\n      function addState(stateName, stateParams, activeClass) {\n        var state = $state.get(stateName, stateContext($element));\n        var stateHash = createStateHash(stateName, stateParams);\n\n        var stateInfo = {\n          state: state || { name: stateName },\n          params: stateParams,\n          hash: stateHash\n        };\n\n        states.push(stateInfo);\n        activeClasses[stateHash] = activeClass;\n\n        return function removeState() {\n          var idx = states.indexOf(stateInfo);\n          if (idx !== -1) states.splice(idx, 1);\n        };\n      }\n\n      /**\n       * @param {string} state\n       * @param {Object|string} [params]\n       * @return {string}\n       */\n      function createStateHash(state, params) {\n        if (!isString(state)) {\n          throw new Error('state should be a string');\n        }\n        if (isObject(params)) {\n          return state + toJson(params);\n        }\n        params = $scope.$eval(params);\n        if (isObject(params)) {\n          return state + toJson(params);\n        }\n        return state;\n      }\n\n      // Update route state\n      function update() {\n        for (var i = 0; i < states.length; i++) {\n          if (anyMatch(states[i].state, states[i].params)) {\n            addClass($element, activeClasses[states[i].hash]);\n          } else {\n            removeClass($element, activeClasses[states[i].hash]);\n          }\n\n          if (exactMatch(states[i].state, states[i].params)) {\n            addClass($element, activeEqClass);\n          } else {\n            removeClass($element, activeEqClass);\n          }\n        }\n      }\n\n      function addClass(el, className) { $timeout(function () { el.addClass(className); }); }\n      function removeClass(el, className) { el.removeClass(className); }\n      function anyMatch(state, params) { return $state.includes(state.name, params); }\n      function exactMatch(state, params) { return $state.is(state.name, params); }\n\n      update();\n    }]\n  };\n}\n\nangular.module('ui.router.state')\n  .directive('uiSref', $StateRefDirective)\n  .directive('uiSrefActive', $StateRefActiveDirective)\n  .directive('uiSrefActiveEq', $StateRefActiveDirective)\n  .directive('uiState', $StateRefDynamicDirective);\n\n/**\n * @ngdoc filter\n * @name ui.router.state.filter:isState\n *\n * @requires ui.router.state.$state\n *\n * @description\n * Translates to {@link ui.router.state.$state#methods_is $state.is(\"stateName\")}.\n */\n$IsStateFilter.$inject = ['$state'];\nfunction $IsStateFilter($state) {\n  var isFilter = function (state, params) {\n    return $state.is(state, params);\n  };\n  isFilter.$stateful = true;\n  return isFilter;\n}\n\n/**\n * @ngdoc filter\n * @name ui.router.state.filter:includedByState\n *\n * @requires ui.router.state.$state\n *\n * @description\n * Translates to {@link ui.router.state.$state#methods_includes $state.includes('fullOrPartialStateName')}.\n */\n$IncludedByStateFilter.$inject = ['$state'];\nfunction $IncludedByStateFilter($state) {\n  var includesFilter = function (state, params, options) {\n    return $state.includes(state, params, options);\n  };\n  includesFilter.$stateful = true;\n  return  includesFilter;\n}\n\nangular.module('ui.router.state')\n  .filter('isState', $IsStateFilter)\n  .filter('includedByState', $IncludedByStateFilter);\n})(window, window.angular);","/**\n * @license AngularJS v1.5.8\n * (c) 2010-2016 Google, Inc. http://angularjs.org\n * License: MIT\n */\n(function(window) {'use strict';\n\n/**\n * @description\n *\n * This object provides a utility for producing rich Error messages within\n * Angular. It can be called as follows:\n *\n * var exampleMinErr = minErr('example');\n * throw exampleMinErr('one', 'This {0} is {1}', foo, bar);\n *\n * The above creates an instance of minErr in the example namespace. The\n * resulting error will have a namespaced error code of example.one.  The\n * resulting error will replace {0} with the value of foo, and {1} with the\n * value of bar. The object is not restricted in the number of arguments it can\n * take.\n *\n * If fewer arguments are specified than necessary for interpolation, the extra\n * interpolation markers will be preserved in the final string.\n *\n * Since data will be parsed statically during a build step, some restrictions\n * are applied with respect to how minErr instances are created and called.\n * Instances should have names of the form namespaceMinErr for a minErr created\n * using minErr('namespace') . Error codes, namespaces and template strings\n * should all be static strings, not variables or general expressions.\n *\n * @param {string} module The namespace to use for the new minErr instance.\n * @param {function} ErrorConstructor Custom error constructor to be instantiated when returning\n *   error from returned function, for cases when a particular type of error is useful.\n * @returns {function(code:string, template:string, ...templateArgs): Error} minErr instance\n */\n\nfunction minErr(module, ErrorConstructor) {\n  ErrorConstructor = ErrorConstructor || Error;\n  return function() {\n    var SKIP_INDEXES = 2;\n\n    var templateArgs = arguments,\n      code = templateArgs[0],\n      message = '[' + (module ? module + ':' : '') + code + '] ',\n      template = templateArgs[1],\n      paramPrefix, i;\n\n    message += template.replace(/\\{\\d+\\}/g, function(match) {\n      var index = +match.slice(1, -1),\n        shiftedIndex = index + SKIP_INDEXES;\n\n      if (shiftedIndex < templateArgs.length) {\n        return toDebugString(templateArgs[shiftedIndex]);\n      }\n\n      return match;\n    });\n\n    message += '\\nhttp://errors.angularjs.org/1.5.8/' +\n      (module ? module + '/' : '') + code;\n\n    for (i = SKIP_INDEXES, paramPrefix = '?'; i < templateArgs.length; i++, paramPrefix = '&') {\n      message += paramPrefix + 'p' + (i - SKIP_INDEXES) + '=' +\n        encodeURIComponent(toDebugString(templateArgs[i]));\n    }\n\n    return new ErrorConstructor(message);\n  };\n}\n\n/* We need to tell jshint what variables are being exported */\n/* global angular: true,\n  msie: true,\n  jqLite: true,\n  jQuery: true,\n  slice: true,\n  splice: true,\n  push: true,\n  toString: true,\n  ngMinErr: true,\n  angularModule: true,\n  uid: true,\n  REGEX_STRING_REGEXP: true,\n  VALIDITY_STATE_PROPERTY: true,\n\n  lowercase: true,\n  uppercase: true,\n  manualLowercase: true,\n  manualUppercase: true,\n  nodeName_: true,\n  isArrayLike: true,\n  forEach: true,\n  forEachSorted: true,\n  reverseParams: true,\n  nextUid: true,\n  setHashKey: true,\n  extend: true,\n  toInt: true,\n  inherit: true,\n  merge: true,\n  noop: true,\n  identity: true,\n  valueFn: true,\n  isUndefined: true,\n  isDefined: true,\n  isObject: true,\n  isBlankObject: true,\n  isString: true,\n  isNumber: true,\n  isDate: true,\n  isArray: true,\n  isFunction: true,\n  isRegExp: true,\n  isWindow: true,\n  isScope: true,\n  isFile: true,\n  isFormData: true,\n  isBlob: true,\n  isBoolean: true,\n  isPromiseLike: true,\n  trim: true,\n  escapeForRegexp: true,\n  isElement: true,\n  makeMap: true,\n  includes: true,\n  arrayRemove: true,\n  copy: true,\n  equals: true,\n  csp: true,\n  jq: true,\n  concat: true,\n  sliceArgs: true,\n  bind: true,\n  toJsonReplacer: true,\n  toJson: true,\n  fromJson: true,\n  convertTimezoneToLocal: true,\n  timezoneToOffset: true,\n  startingTag: true,\n  tryDecodeURIComponent: true,\n  parseKeyValue: true,\n  toKeyValue: true,\n  encodeUriSegment: true,\n  encodeUriQuery: true,\n  angularInit: true,\n  bootstrap: true,\n  getTestability: true,\n  snake_case: true,\n  bindJQuery: true,\n  assertArg: true,\n  assertArgFn: true,\n  assertNotHasOwnProperty: true,\n  getter: true,\n  getBlockNodes: true,\n  hasOwnProperty: true,\n  createMap: true,\n\n  NODE_TYPE_ELEMENT: true,\n  NODE_TYPE_ATTRIBUTE: true,\n  NODE_TYPE_TEXT: true,\n  NODE_TYPE_COMMENT: true,\n  NODE_TYPE_DOCUMENT: true,\n  NODE_TYPE_DOCUMENT_FRAGMENT: true,\n*/\n\n////////////////////////////////////\n\n/**\n * @ngdoc module\n * @name ng\n * @module ng\n * @installation\n * @description\n *\n * # ng (core module)\n * The ng module is loaded by default when an AngularJS application is started. The module itself\n * contains the essential components for an AngularJS application to function. The table below\n * lists a high level breakdown of each of the services/factories, filters, directives and testing\n * components available within this core module.\n *\n * <div doc-module-components=\"ng\"></div>\n */\n\nvar REGEX_STRING_REGEXP = /^\\/(.+)\\/([a-z]*)$/;\n\n// The name of a form control's ValidityState property.\n// This is used so that it's possible for internal tests to create mock ValidityStates.\nvar VALIDITY_STATE_PROPERTY = 'validity';\n\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\nvar lowercase = function(string) {return isString(string) ? string.toLowerCase() : string;};\nvar uppercase = function(string) {return isString(string) ? string.toUpperCase() : string;};\n\n\nvar manualLowercase = function(s) {\n  /* jshint bitwise: false */\n  return isString(s)\n      ? s.replace(/[A-Z]/g, function(ch) {return String.fromCharCode(ch.charCodeAt(0) | 32);})\n      : s;\n};\nvar manualUppercase = function(s) {\n  /* jshint bitwise: false */\n  return isString(s)\n      ? s.replace(/[a-z]/g, function(ch) {return String.fromCharCode(ch.charCodeAt(0) & ~32);})\n      : s;\n};\n\n\n// String#toLowerCase and String#toUpperCase don't produce correct results in browsers with Turkish\n// locale, for this reason we need to detect this case and redefine lowercase/uppercase methods\n// with correct but slower alternatives. See https://github.com/angular/angular.js/issues/11387\nif ('i' !== 'I'.toLowerCase()) {\n  lowercase = manualLowercase;\n  uppercase = manualUppercase;\n}\n\n\nvar\n    msie,             // holds major version number for IE, or NaN if UA is not IE.\n    jqLite,           // delay binding since jQuery could be loaded after us.\n    jQuery,           // delay binding\n    slice             = [].slice,\n    splice            = [].splice,\n    push              = [].push,\n    toString          = Object.prototype.toString,\n    getPrototypeOf    = Object.getPrototypeOf,\n    ngMinErr          = minErr('ng'),\n\n    /** @name angular */\n    angular           = window.angular || (window.angular = {}),\n    angularModule,\n    uid               = 0;\n\n/**\n * documentMode is an IE-only property\n * http://msdn.microsoft.com/en-us/library/ie/cc196988(v=vs.85).aspx\n */\nmsie = window.document.documentMode;\n\n\n/**\n * @private\n * @param {*} obj\n * @return {boolean} Returns true if `obj` is an array or array-like object (NodeList, Arguments,\n *                   String ...)\n */\nfunction isArrayLike(obj) {\n\n  // `null`, `undefined` and `window` are not array-like\n  if (obj == null || isWindow(obj)) return false;\n\n  // arrays, strings and jQuery/jqLite objects are array like\n  // * jqLite is either the jQuery or jqLite constructor function\n  // * we have to check the existence of jqLite first as this method is called\n  //   via the forEach method when constructing the jqLite object in the first place\n  if (isArray(obj) || isString(obj) || (jqLite && obj instanceof jqLite)) return true;\n\n  // Support: iOS 8.2 (not reproducible in simulator)\n  // \"length\" in obj used to prevent JIT error (gh-11508)\n  var length = \"length\" in Object(obj) && obj.length;\n\n  // NodeList objects (with `item` method) and\n  // other objects with suitable length characteristics are array-like\n  return isNumber(length) &&\n    (length >= 0 && ((length - 1) in obj || obj instanceof Array) || typeof obj.item == 'function');\n\n}\n\n/**\n * @ngdoc function\n * @name angular.forEach\n * @module ng\n * @kind function\n *\n * @description\n * Invokes the `iterator` function once for each item in `obj` collection, which can be either an\n * object or an array. The `iterator` function is invoked with `iterator(value, key, obj)`, where `value`\n * is the value of an object property or an array element, `key` is the object property key or\n * array element index and obj is the `obj` itself. Specifying a `context` for the function is optional.\n *\n * It is worth noting that `.forEach` does not iterate over inherited properties because it filters\n * using the `hasOwnProperty` method.\n *\n * Unlike ES262's\n * [Array.prototype.forEach](http://www.ecma-international.org/ecma-262/5.1/#sec-15.4.4.18),\n * providing 'undefined' or 'null' values for `obj` will not throw a TypeError, but rather just\n * return the value provided.\n *\n   ```js\n     var values = {name: 'misko', gender: 'male'};\n     var log = [];\n     angular.forEach(values, function(value, key) {\n       this.push(key + ': ' + value);\n     }, log);\n     expect(log).toEqual(['name: misko', 'gender: male']);\n   ```\n *\n * @param {Object|Array} obj Object to iterate over.\n * @param {Function} iterator Iterator function.\n * @param {Object=} context Object to become context (`this`) for the iterator function.\n * @returns {Object|Array} Reference to `obj`.\n */\n\nfunction forEach(obj, iterator, context) {\n  var key, length;\n  if (obj) {\n    if (isFunction(obj)) {\n      for (key in obj) {\n        // Need to check if hasOwnProperty exists,\n        // as on IE8 the result of querySelectorAll is an object without a hasOwnProperty function\n        if (key != 'prototype' && key != 'length' && key != 'name' && (!obj.hasOwnProperty || obj.hasOwnProperty(key))) {\n          iterator.call(context, obj[key], key, obj);\n        }\n      }\n    } else if (isArray(obj) || isArrayLike(obj)) {\n      var isPrimitive = typeof obj !== 'object';\n      for (key = 0, length = obj.length; key < length; key++) {\n        if (isPrimitive || key in obj) {\n          iterator.call(context, obj[key], key, obj);\n        }\n      }\n    } else if (obj.forEach && obj.forEach !== forEach) {\n        obj.forEach(iterator, context, obj);\n    } else if (isBlankObject(obj)) {\n      // createMap() fast path --- Safe to avoid hasOwnProperty check because prototype chain is empty\n      for (key in obj) {\n        iterator.call(context, obj[key], key, obj);\n      }\n    } else if (typeof obj.hasOwnProperty === 'function') {\n      // Slow path for objects inheriting Object.prototype, hasOwnProperty check needed\n      for (key in obj) {\n        if (obj.hasOwnProperty(key)) {\n          iterator.call(context, obj[key], key, obj);\n        }\n      }\n    } else {\n      // Slow path for objects which do not have a method `hasOwnProperty`\n      for (key in obj) {\n        if (hasOwnProperty.call(obj, key)) {\n          iterator.call(context, obj[key], key, obj);\n        }\n      }\n    }\n  }\n  return obj;\n}\n\nfunction forEachSorted(obj, iterator, context) {\n  var keys = Object.keys(obj).sort();\n  for (var i = 0; i < keys.length; i++) {\n    iterator.call(context, obj[keys[i]], keys[i]);\n  }\n  return keys;\n}\n\n\n/**\n * when using forEach the params are value, key, but it is often useful to have key, value.\n * @param {function(string, *)} iteratorFn\n * @returns {function(*, string)}\n */\nfunction reverseParams(iteratorFn) {\n  return function(value, key) {iteratorFn(key, value);};\n}\n\n/**\n * A consistent way of creating unique IDs in angular.\n *\n * Using simple numbers allows us to generate 28.6 million unique ids per second for 10 years before\n * we hit number precision issues in JavaScript.\n *\n * Math.pow(2,53) / 60 / 60 / 24 / 365 / 10 = 28.6M\n *\n * @returns {number} an unique alpha-numeric string\n */\nfunction nextUid() {\n  return ++uid;\n}\n\n\n/**\n * Set or clear the hashkey for an object.\n * @param obj object\n * @param h the hashkey (!truthy to delete the hashkey)\n */\nfunction setHashKey(obj, h) {\n  if (h) {\n    obj.$$hashKey = h;\n  } else {\n    delete obj.$$hashKey;\n  }\n}\n\n\nfunction baseExtend(dst, objs, deep) {\n  var h = dst.$$hashKey;\n\n  for (var i = 0, ii = objs.length; i < ii; ++i) {\n    var obj = objs[i];\n    if (!isObject(obj) && !isFunction(obj)) continue;\n    var keys = Object.keys(obj);\n    for (var j = 0, jj = keys.length; j < jj; j++) {\n      var key = keys[j];\n      var src = obj[key];\n\n      if (deep && isObject(src)) {\n        if (isDate(src)) {\n          dst[key] = new Date(src.valueOf());\n        } else if (isRegExp(src)) {\n          dst[key] = new RegExp(src);\n        } else if (src.nodeName) {\n          dst[key] = src.cloneNode(true);\n        } else if (isElement(src)) {\n          dst[key] = src.clone();\n        } else {\n          if (!isObject(dst[key])) dst[key] = isArray(src) ? [] : {};\n          baseExtend(dst[key], [src], true);\n        }\n      } else {\n        dst[key] = src;\n      }\n    }\n  }\n\n  setHashKey(dst, h);\n  return dst;\n}\n\n/**\n * @ngdoc function\n * @name angular.extend\n * @module ng\n * @kind function\n *\n * @description\n * Extends the destination object `dst` by copying own enumerable properties from the `src` object(s)\n * to `dst`. You can specify multiple `src` objects. If you want to preserve original objects, you can do so\n * by passing an empty object as the target: `var object = angular.extend({}, object1, object2)`.\n *\n * **Note:** Keep in mind that `angular.extend` does not support recursive merge (deep copy). Use\n * {@link angular.merge} for this.\n *\n * @param {Object} dst Destination object.\n * @param {...Object} src Source object(s).\n * @returns {Object} Reference to `dst`.\n */\nfunction extend(dst) {\n  return baseExtend(dst, slice.call(arguments, 1), false);\n}\n\n\n/**\n* @ngdoc function\n* @name angular.merge\n* @module ng\n* @kind function\n*\n* @description\n* Deeply extends the destination object `dst` by copying own enumerable properties from the `src` object(s)\n* to `dst`. You can specify multiple `src` objects. If you want to preserve original objects, you can do so\n* by passing an empty object as the target: `var object = angular.merge({}, object1, object2)`.\n*\n* Unlike {@link angular.extend extend()}, `merge()` recursively descends into object properties of source\n* objects, performing a deep copy.\n*\n* @param {Object} dst Destination object.\n* @param {...Object} src Source object(s).\n* @returns {Object} Reference to `dst`.\n*/\nfunction merge(dst) {\n  return baseExtend(dst, slice.call(arguments, 1), true);\n}\n\n\n\nfunction toInt(str) {\n  return parseInt(str, 10);\n}\n\n\nfunction inherit(parent, extra) {\n  return extend(Object.create(parent), extra);\n}\n\n/**\n * @ngdoc function\n * @name angular.noop\n * @module ng\n * @kind function\n *\n * @description\n * A function that performs no operations. This function can be useful when writing code in the\n * functional style.\n   ```js\n     function foo(callback) {\n       var result = calculateResult();\n       (callback || angular.noop)(result);\n     }\n   ```\n */\nfunction noop() {}\nnoop.$inject = [];\n\n\n/**\n * @ngdoc function\n * @name angular.identity\n * @module ng\n * @kind function\n *\n * @description\n * A function that returns its first argument. This function is useful when writing code in the\n * functional style.\n *\n   ```js\n   function transformer(transformationFn, value) {\n     return (transformationFn || angular.identity)(value);\n   };\n\n   // E.g.\n   function getResult(fn, input) {\n     return (fn || angular.identity)(input);\n   };\n\n   getResult(function(n) { return n * 2; }, 21);   // returns 42\n   getResult(null, 21);                            // returns 21\n   getResult(undefined, 21);                       // returns 21\n   ```\n *\n * @param {*} value to be returned.\n * @returns {*} the value passed in.\n */\nfunction identity($) {return $;}\nidentity.$inject = [];\n\n\nfunction valueFn(value) {return function valueRef() {return value;};}\n\nfunction hasCustomToString(obj) {\n  return isFunction(obj.toString) && obj.toString !== toString;\n}\n\n\n/**\n * @ngdoc function\n * @name angular.isUndefined\n * @module ng\n * @kind function\n *\n * @description\n * Determines if a reference is undefined.\n *\n * @param {*} value Reference to check.\n * @returns {boolean} True if `value` is undefined.\n */\nfunction isUndefined(value) {return typeof value === 'undefined';}\n\n\n/**\n * @ngdoc function\n * @name angular.isDefined\n * @module ng\n * @kind function\n *\n * @description\n * Determines if a reference is defined.\n *\n * @param {*} value Reference to check.\n * @returns {boolean} True if `value` is defined.\n */\nfunction isDefined(value) {return typeof value !== 'undefined';}\n\n\n/**\n * @ngdoc function\n * @name angular.isObject\n * @module ng\n * @kind function\n *\n * @description\n * Determines if a reference is an `Object`. Unlike `typeof` in JavaScript, `null`s are not\n * considered to be objects. Note that JavaScript arrays are objects.\n *\n * @param {*} value Reference to check.\n * @returns {boolean} True if `value` is an `Object` but not `null`.\n */\nfunction isObject(value) {\n  // http://jsperf.com/isobject4\n  return value !== null && typeof value === 'object';\n}\n\n\n/**\n * Determine if a value is an object with a null prototype\n *\n * @returns {boolean} True if `value` is an `Object` with a null prototype\n */\nfunction isBlankObject(value) {\n  return value !== null && typeof value === 'object' && !getPrototypeOf(value);\n}\n\n\n/**\n * @ngdoc function\n * @name angular.isString\n * @module ng\n * @kind function\n *\n * @description\n * Determines if a reference is a `String`.\n *\n * @param {*} value Reference to check.\n * @returns {boolean} True if `value` is a `String`.\n */\nfunction isString(value) {return typeof value === 'string';}\n\n\n/**\n * @ngdoc function\n * @name angular.isNumber\n * @module ng\n * @kind function\n *\n * @description\n * Determines if a reference is a `Number`.\n *\n * This includes the \"special\" numbers `NaN`, `+Infinity` and `-Infinity`.\n *\n * If you wish to exclude these then you can use the native\n * [`isFinite'](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/isFinite)\n * method.\n *\n * @param {*} value Reference to check.\n * @returns {boolean} True if `value` is a `Number`.\n */\nfunction isNumber(value) {return typeof value === 'number';}\n\n\n/**\n * @ngdoc function\n * @name angular.isDate\n * @module ng\n * @kind function\n *\n * @description\n * Determines if a value is a date.\n *\n * @param {*} value Reference to check.\n * @returns {boolean} True if `value` is a `Date`.\n */\nfunction isDate(value) {\n  return toString.call(value) === '[object Date]';\n}\n\n\n/**\n * @ngdoc function\n * @name angular.isArray\n * @module ng\n * @kind function\n *\n * @description\n * Determines if a reference is an `Array`.\n *\n * @param {*} value Reference to check.\n * @returns {boolean} True if `value` is an `Array`.\n */\nvar isArray = Array.isArray;\n\n/**\n * @ngdoc function\n * @name angular.isFunction\n * @module ng\n * @kind function\n *\n * @description\n * Determines if a reference is a `Function`.\n *\n * @param {*} value Reference to check.\n * @returns {boolean} True if `value` is a `Function`.\n */\nfunction isFunction(value) {return typeof value === 'function';}\n\n\n/**\n * Determines if a value is a regular expression object.\n *\n * @private\n * @param {*} value Reference to check.\n * @returns {boolean} True if `value` is a `RegExp`.\n */\nfunction isRegExp(value) {\n  return toString.call(value) === '[object RegExp]';\n}\n\n\n/**\n * Checks if `obj` is a window object.\n *\n * @private\n * @param {*} obj Object to check\n * @returns {boolean} True if `obj` is a window obj.\n */\nfunction isWindow(obj) {\n  return obj && obj.window === obj;\n}\n\n\nfunction isScope(obj) {\n  return obj && obj.$evalAsync && obj.$watch;\n}\n\n\nfunction isFile(obj) {\n  return toString.call(obj) === '[object File]';\n}\n\n\nfunction isFormData(obj) {\n  return toString.call(obj) === '[object FormData]';\n}\n\n\nfunction isBlob(obj) {\n  return toString.call(obj) === '[object Blob]';\n}\n\n\nfunction isBoolean(value) {\n  return typeof value === 'boolean';\n}\n\n\nfunction isPromiseLike(obj) {\n  return obj && isFunction(obj.then);\n}\n\n\nvar TYPED_ARRAY_REGEXP = /^\\[object (?:Uint8|Uint8Clamped|Uint16|Uint32|Int8|Int16|Int32|Float32|Float64)Array\\]$/;\nfunction isTypedArray(value) {\n  return value && isNumber(value.length) && TYPED_ARRAY_REGEXP.test(toString.call(value));\n}\n\nfunction isArrayBuffer(obj) {\n  return toString.call(obj) === '[object ArrayBuffer]';\n}\n\n\nvar trim = function(value) {\n  return isString(value) ? value.trim() : value;\n};\n\n// Copied from:\n// http://docs.closure-library.googlecode.com/git/local_closure_goog_string_string.js.source.html#line1021\n// Prereq: s is a string.\nvar escapeForRegexp = function(s) {\n  return s.replace(/([-()\\[\\]{}+?*.$\\^|,:#<!\\\\])/g, '\\\\$1').\n           replace(/\\x08/g, '\\\\x08');\n};\n\n\n/**\n * @ngdoc function\n * @name angular.isElement\n * @module ng\n * @kind function\n *\n * @description\n * Determines if a reference is a DOM element (or wrapped jQuery element).\n *\n * @param {*} value Reference to check.\n * @returns {boolean} True if `value` is a DOM element (or wrapped jQuery element).\n */\nfunction isElement(node) {\n  return !!(node &&\n    (node.nodeName  // We are a direct element.\n    || (node.prop && node.attr && node.find)));  // We have an on and find method part of jQuery API.\n}\n\n/**\n * @param str 'key1,key2,...'\n * @returns {object} in the form of {key1:true, key2:true, ...}\n */\nfunction makeMap(str) {\n  var obj = {}, items = str.split(','), i;\n  for (i = 0; i < items.length; i++) {\n    obj[items[i]] = true;\n  }\n  return obj;\n}\n\n\nfunction nodeName_(element) {\n  return lowercase(element.nodeName || (element[0] && element[0].nodeName));\n}\n\nfunction includes(array, obj) {\n  return Array.prototype.indexOf.call(array, obj) != -1;\n}\n\nfunction arrayRemove(array, value) {\n  var index = array.indexOf(value);\n  if (index >= 0) {\n    array.splice(index, 1);\n  }\n  return index;\n}\n\n/**\n * @ngdoc function\n * @name angular.copy\n * @module ng\n * @kind function\n *\n * @description\n * Creates a deep copy of `source`, which should be an object or an array.\n *\n * * If no destination is supplied, a copy of the object or array is created.\n * * If a destination is provided, all of its elements (for arrays) or properties (for objects)\n *   are deleted and then all elements/properties from the source are copied to it.\n * * If `source` is not an object or array (inc. `null` and `undefined`), `source` is returned.\n * * If `source` is identical to `destination` an exception will be thrown.\n *\n * <br />\n * <div class=\"alert alert-warning\">\n *   Only enumerable properties are taken into account. Non-enumerable properties (both on `source`\n *   and on `destination`) will be ignored.\n * </div>\n *\n * @param {*} source The source that will be used to make a copy.\n *                   Can be any type, including primitives, `null`, and `undefined`.\n * @param {(Object|Array)=} destination Destination into which the source is copied. If\n *     provided, must be of the same type as `source`.\n * @returns {*} The copy or updated `destination`, if `destination` was specified.\n *\n * @example\n  <example module=\"copyExample\">\n    <file name=\"index.html\">\n      <div ng-controller=\"ExampleController\">\n        <form novalidate class=\"simple-form\">\n          <label>Name: <input type=\"text\" ng-model=\"user.name\" /></label><br />\n          <label>Age:  <input type=\"number\" ng-model=\"user.age\" /></label><br />\n          Gender: <label><input type=\"radio\" ng-model=\"user.gender\" value=\"male\" />male</label>\n                  <label><input type=\"radio\" ng-model=\"user.gender\" value=\"female\" />female</label><br />\n          <button ng-click=\"reset()\">RESET</button>\n          <button ng-click=\"update(user)\">SAVE</button>\n        </form>\n        <pre>form = {{user | json}}</pre>\n        <pre>master = {{master | json}}</pre>\n      </div>\n    </file>\n    <file name=\"script.js\">\n      // Module: copyExample\n      angular.\n        module('copyExample', []).\n        controller('ExampleController', ['$scope', function($scope) {\n          $scope.master = {};\n\n          $scope.reset = function() {\n            // Example with 1 argument\n            $scope.user = angular.copy($scope.master);\n          };\n\n          $scope.update = function(user) {\n            // Example with 2 arguments\n            angular.copy(user, $scope.master);\n          };\n\n          $scope.reset();\n        }]);\n    </file>\n  </example>\n */\nfunction copy(source, destination) {\n  var stackSource = [];\n  var stackDest = [];\n\n  if (destination) {\n    if (isTypedArray(destination) || isArrayBuffer(destination)) {\n      throw ngMinErr('cpta', \"Can't copy! TypedArray destination cannot be mutated.\");\n    }\n    if (source === destination) {\n      throw ngMinErr('cpi', \"Can't copy! Source and destination are identical.\");\n    }\n\n    // Empty the destination object\n    if (isArray(destination)) {\n      destination.length = 0;\n    } else {\n      forEach(destination, function(value, key) {\n        if (key !== '$$hashKey') {\n          delete destination[key];\n        }\n      });\n    }\n\n    stackSource.push(source);\n    stackDest.push(destination);\n    return copyRecurse(source, destination);\n  }\n\n  return copyElement(source);\n\n  function copyRecurse(source, destination) {\n    var h = destination.$$hashKey;\n    var key;\n    if (isArray(source)) {\n      for (var i = 0, ii = source.length; i < ii; i++) {\n        destination.push(copyElement(source[i]));\n      }\n    } else if (isBlankObject(source)) {\n      // createMap() fast path --- Safe to avoid hasOwnProperty check because prototype chain is empty\n      for (key in source) {\n        destination[key] = copyElement(source[key]);\n      }\n    } else if (source && typeof source.hasOwnProperty === 'function') {\n      // Slow path, which must rely on hasOwnProperty\n      for (key in source) {\n        if (source.hasOwnProperty(key)) {\n          destination[key] = copyElement(source[key]);\n        }\n      }\n    } else {\n      // Slowest path --- hasOwnProperty can't be called as a method\n      for (key in source) {\n        if (hasOwnProperty.call(source, key)) {\n          destination[key] = copyElement(source[key]);\n        }\n      }\n    }\n    setHashKey(destination, h);\n    return destination;\n  }\n\n  function copyElement(source) {\n    // Simple values\n    if (!isObject(source)) {\n      return source;\n    }\n\n    // Already copied values\n    var index = stackSource.indexOf(source);\n    if (index !== -1) {\n      return stackDest[index];\n    }\n\n    if (isWindow(source) || isScope(source)) {\n      throw ngMinErr('cpws',\n        \"Can't copy! Making copies of Window or Scope instances is not supported.\");\n    }\n\n    var needsRecurse = false;\n    var destination = copyType(source);\n\n    if (destination === undefined) {\n      destination = isArray(source) ? [] : Object.create(getPrototypeOf(source));\n      needsRecurse = true;\n    }\n\n    stackSource.push(source);\n    stackDest.push(destination);\n\n    return needsRecurse\n      ? copyRecurse(source, destination)\n      : destination;\n  }\n\n  function copyType(source) {\n    switch (toString.call(source)) {\n      case '[object Int8Array]':\n      case '[object Int16Array]':\n      case '[object Int32Array]':\n      case '[object Float32Array]':\n      case '[object Float64Array]':\n      case '[object Uint8Array]':\n      case '[object Uint8ClampedArray]':\n      case '[object Uint16Array]':\n      case '[object Uint32Array]':\n        return new source.constructor(copyElement(source.buffer), source.byteOffset, source.length);\n\n      case '[object ArrayBuffer]':\n        //Support: IE10\n        if (!source.slice) {\n          var copied = new ArrayBuffer(source.byteLength);\n          new Uint8Array(copied).set(new Uint8Array(source));\n          return copied;\n        }\n        return source.slice(0);\n\n      case '[object Boolean]':\n      case '[object Number]':\n      case '[object String]':\n      case '[object Date]':\n        return new source.constructor(source.valueOf());\n\n      case '[object RegExp]':\n        var re = new RegExp(source.source, source.toString().match(/[^\\/]*$/)[0]);\n        re.lastIndex = source.lastIndex;\n        return re;\n\n      case '[object Blob]':\n        return new source.constructor([source], {type: source.type});\n    }\n\n    if (isFunction(source.cloneNode)) {\n      return source.cloneNode(true);\n    }\n  }\n}\n\n\n/**\n * @ngdoc function\n * @name angular.equals\n * @module ng\n * @kind function\n *\n * @description\n * Determines if two objects or two values are equivalent. Supports value types, regular\n * expressions, arrays and objects.\n *\n * Two objects or values are considered equivalent if at least one of the following is true:\n *\n * * Both objects or values pass `===` comparison.\n * * Both objects or values are of the same type and all of their properties are equal by\n *   comparing them with `angular.equals`.\n * * Both values are NaN. (In JavaScript, NaN == NaN => false. But we consider two NaN as equal)\n * * Both values represent the same regular expression (In JavaScript,\n *   /abc/ == /abc/ => false. But we consider two regular expressions as equal when their textual\n *   representation matches).\n *\n * During a property comparison, properties of `function` type and properties with names\n * that begin with `$` are ignored.\n *\n * Scope and DOMWindow objects are being compared only by identify (`===`).\n *\n * @param {*} o1 Object or value to compare.\n * @param {*} o2 Object or value to compare.\n * @returns {boolean} True if arguments are equal.\n *\n * @example\n   <example module=\"equalsExample\" name=\"equalsExample\">\n     <file name=\"index.html\">\n      <div ng-controller=\"ExampleController\">\n        <form novalidate>\n          <h3>User 1</h3>\n          Name: <input type=\"text\" ng-model=\"user1.name\">\n          Age: <input type=\"number\" ng-model=\"user1.age\">\n\n          <h3>User 2</h3>\n          Name: <input type=\"text\" ng-model=\"user2.name\">\n          Age: <input type=\"number\" ng-model=\"user2.age\">\n\n          <div>\n            <br/>\n            <input type=\"button\" value=\"Compare\" ng-click=\"compare()\">\n          </div>\n          User 1: <pre>{{user1 | json}}</pre>\n          User 2: <pre>{{user2 | json}}</pre>\n          Equal: <pre>{{result}}</pre>\n        </form>\n      </div>\n    </file>\n    <file name=\"script.js\">\n        angular.module('equalsExample', []).controller('ExampleController', ['$scope', function($scope) {\n          $scope.user1 = {};\n          $scope.user2 = {};\n          $scope.result;\n          $scope.compare = function() {\n            $scope.result = angular.equals($scope.user1, $scope.user2);\n          };\n        }]);\n    </file>\n  </example>\n */\nfunction equals(o1, o2) {\n  if (o1 === o2) return true;\n  if (o1 === null || o2 === null) return false;\n  if (o1 !== o1 && o2 !== o2) return true; // NaN === NaN\n  var t1 = typeof o1, t2 = typeof o2, length, key, keySet;\n  if (t1 == t2 && t1 == 'object') {\n    if (isArray(o1)) {\n      if (!isArray(o2)) return false;\n      if ((length = o1.length) == o2.length) {\n        for (key = 0; key < length; key++) {\n          if (!equals(o1[key], o2[key])) return false;\n        }\n        return true;\n      }\n    } else if (isDate(o1)) {\n      if (!isDate(o2)) return false;\n      return equals(o1.getTime(), o2.getTime());\n    } else if (isRegExp(o1)) {\n      if (!isRegExp(o2)) return false;\n      return o1.toString() == o2.toString();\n    } else {\n      if (isScope(o1) || isScope(o2) || isWindow(o1) || isWindow(o2) ||\n        isArray(o2) || isDate(o2) || isRegExp(o2)) return false;\n      keySet = createMap();\n      for (key in o1) {\n        if (key.charAt(0) === '$' || isFunction(o1[key])) continue;\n        if (!equals(o1[key], o2[key])) return false;\n        keySet[key] = true;\n      }\n      for (key in o2) {\n        if (!(key in keySet) &&\n            key.charAt(0) !== '$' &&\n            isDefined(o2[key]) &&\n            !isFunction(o2[key])) return false;\n      }\n      return true;\n    }\n  }\n  return false;\n}\n\nvar csp = function() {\n  if (!isDefined(csp.rules)) {\n\n\n    var ngCspElement = (window.document.querySelector('[ng-csp]') ||\n                    window.document.querySelector('[data-ng-csp]'));\n\n    if (ngCspElement) {\n      var ngCspAttribute = ngCspElement.getAttribute('ng-csp') ||\n                    ngCspElement.getAttribute('data-ng-csp');\n      csp.rules = {\n        noUnsafeEval: !ngCspAttribute || (ngCspAttribute.indexOf('no-unsafe-eval') !== -1),\n        noInlineStyle: !ngCspAttribute || (ngCspAttribute.indexOf('no-inline-style') !== -1)\n      };\n    } else {\n      csp.rules = {\n        noUnsafeEval: noUnsafeEval(),\n        noInlineStyle: false\n      };\n    }\n  }\n\n  return csp.rules;\n\n  function noUnsafeEval() {\n    try {\n      /* jshint -W031, -W054 */\n      new Function('');\n      /* jshint +W031, +W054 */\n      return false;\n    } catch (e) {\n      return true;\n    }\n  }\n};\n\n/**\n * @ngdoc directive\n * @module ng\n * @name ngJq\n *\n * @element ANY\n * @param {string=} ngJq the name of the library available under `window`\n * to be used for angular.element\n * @description\n * Use this directive to force the angular.element library.  This should be\n * used to force either jqLite by leaving ng-jq blank or setting the name of\n * the jquery variable under window (eg. jQuery).\n *\n * Since angular looks for this directive when it is loaded (doesn't wait for the\n * DOMContentLoaded event), it must be placed on an element that comes before the script\n * which loads angular. Also, only the first instance of `ng-jq` will be used and all\n * others ignored.\n *\n * @example\n * This example shows how to force jqLite using the `ngJq` directive to the `html` tag.\n ```html\n <!doctype html>\n <html ng-app ng-jq>\n ...\n ...\n </html>\n ```\n * @example\n * This example shows how to use a jQuery based library of a different name.\n * The library name must be available at the top most 'window'.\n ```html\n <!doctype html>\n <html ng-app ng-jq=\"jQueryLib\">\n ...\n ...\n </html>\n ```\n */\nvar jq = function() {\n  if (isDefined(jq.name_)) return jq.name_;\n  var el;\n  var i, ii = ngAttrPrefixes.length, prefix, name;\n  for (i = 0; i < ii; ++i) {\n    prefix = ngAttrPrefixes[i];\n    if (el = window.document.querySelector('[' + prefix.replace(':', '\\\\:') + 'jq]')) {\n      name = el.getAttribute(prefix + 'jq');\n      break;\n    }\n  }\n\n  return (jq.name_ = name);\n};\n\nfunction concat(array1, array2, index) {\n  return array1.concat(slice.call(array2, index));\n}\n\nfunction sliceArgs(args, startIndex) {\n  return slice.call(args, startIndex || 0);\n}\n\n\n/* jshint -W101 */\n/**\n * @ngdoc function\n * @name angular.bind\n * @module ng\n * @kind function\n *\n * @description\n * Returns a function which calls function `fn` bound to `self` (`self` becomes the `this` for\n * `fn`). You can supply optional `args` that are prebound to the function. This feature is also\n * known as [partial application](http://en.wikipedia.org/wiki/Partial_application), as\n * distinguished from [function currying](http://en.wikipedia.org/wiki/Currying#Contrast_with_partial_function_application).\n *\n * @param {Object} self Context which `fn` should be evaluated in.\n * @param {function()} fn Function to be bound.\n * @param {...*} args Optional arguments to be prebound to the `fn` function call.\n * @returns {function()} Function that wraps the `fn` with all the specified bindings.\n */\n/* jshint +W101 */\nfunction bind(self, fn) {\n  var curryArgs = arguments.length > 2 ? sliceArgs(arguments, 2) : [];\n  if (isFunction(fn) && !(fn instanceof RegExp)) {\n    return curryArgs.length\n      ? function() {\n          return arguments.length\n            ? fn.apply(self, concat(curryArgs, arguments, 0))\n            : fn.apply(self, curryArgs);\n        }\n      : function() {\n          return arguments.length\n            ? fn.apply(self, arguments)\n            : fn.call(self);\n        };\n  } else {\n    // In IE, native methods are not functions so they cannot be bound (note: they don't need to be).\n    return fn;\n  }\n}\n\n\nfunction toJsonReplacer(key, value) {\n  var val = value;\n\n  if (typeof key === 'string' && key.charAt(0) === '$' && key.charAt(1) === '$') {\n    val = undefined;\n  } else if (isWindow(value)) {\n    val = '$WINDOW';\n  } else if (value &&  window.document === value) {\n    val = '$DOCUMENT';\n  } else if (isScope(value)) {\n    val = '$SCOPE';\n  }\n\n  return val;\n}\n\n\n/**\n * @ngdoc function\n * @name angular.toJson\n * @module ng\n * @kind function\n *\n * @description\n * Serializes input into a JSON-formatted string. Properties with leading $$ characters will be\n * stripped since angular uses this notation internally.\n *\n * @param {Object|Array|Date|string|number} obj Input to be serialized into JSON.\n * @param {boolean|number} [pretty=2] If set to true, the JSON output will contain newlines and whitespace.\n *    If set to an integer, the JSON output will contain that many spaces per indentation.\n * @returns {string|undefined} JSON-ified string representing `obj`.\n * @knownIssue\n *\n * The Safari browser throws a `RangeError` instead of returning `null` when it tries to stringify a `Date`\n * object with an invalid date value. The only reliable way to prevent this is to monkeypatch the\n * `Date.prototype.toJSON` method as follows:\n *\n * ```\n * var _DatetoJSON = Date.prototype.toJSON;\n * Date.prototype.toJSON = function() {\n *   try {\n *     return _DatetoJSON.call(this);\n *   } catch(e) {\n *     if (e instanceof RangeError) {\n *       return null;\n *     }\n *     throw e;\n *   }\n * };\n * ```\n *\n * See https://github.com/angular/angular.js/pull/14221 for more information.\n */\nfunction toJson(obj, pretty) {\n  if (isUndefined(obj)) return undefined;\n  if (!isNumber(pretty)) {\n    pretty = pretty ? 2 : null;\n  }\n  return JSON.stringify(obj, toJsonReplacer, pretty);\n}\n\n\n/**\n * @ngdoc function\n * @name angular.fromJson\n * @module ng\n * @kind function\n *\n * @description\n * Deserializes a JSON string.\n *\n * @param {string} json JSON string to deserialize.\n * @returns {Object|Array|string|number} Deserialized JSON string.\n */\nfunction fromJson(json) {\n  return isString(json)\n      ? JSON.parse(json)\n      : json;\n}\n\n\nvar ALL_COLONS = /:/g;\nfunction timezoneToOffset(timezone, fallback) {\n  // IE/Edge do not \"understand\" colon (`:`) in timezone\n  timezone = timezone.replace(ALL_COLONS, '');\n  var requestedTimezoneOffset = Date.parse('Jan 01, 1970 00:00:00 ' + timezone) / 60000;\n  return isNaN(requestedTimezoneOffset) ? fallback : requestedTimezoneOffset;\n}\n\n\nfunction addDateMinutes(date, minutes) {\n  date = new Date(date.getTime());\n  date.setMinutes(date.getMinutes() + minutes);\n  return date;\n}\n\n\nfunction convertTimezoneToLocal(date, timezone, reverse) {\n  reverse = reverse ? -1 : 1;\n  var dateTimezoneOffset = date.getTimezoneOffset();\n  var timezoneOffset = timezoneToOffset(timezone, dateTimezoneOffset);\n  return addDateMinutes(date, reverse * (timezoneOffset - dateTimezoneOffset));\n}\n\n\n/**\n * @returns {string} Returns the string representation of the element.\n */\nfunction startingTag(element) {\n  element = jqLite(element).clone();\n  try {\n    // turns out IE does not let you set .html() on elements which\n    // are not allowed to have children. So we just ignore it.\n    element.empty();\n  } catch (e) {}\n  var elemHtml = jqLite('<div>').append(element).html();\n  try {\n    return element[0].nodeType === NODE_TYPE_TEXT ? lowercase(elemHtml) :\n        elemHtml.\n          match(/^(<[^>]+>)/)[1].\n          replace(/^<([\\w\\-]+)/, function(match, nodeName) {return '<' + lowercase(nodeName);});\n  } catch (e) {\n    return lowercase(elemHtml);\n  }\n\n}\n\n\n/////////////////////////////////////////////////\n\n/**\n * Tries to decode the URI component without throwing an exception.\n *\n * @private\n * @param str value potential URI component to check.\n * @returns {boolean} True if `value` can be decoded\n * with the decodeURIComponent function.\n */\nfunction tryDecodeURIComponent(value) {\n  try {\n    return decodeURIComponent(value);\n  } catch (e) {\n    // Ignore any invalid uri component.\n  }\n}\n\n\n/**\n * Parses an escaped url query string into key-value pairs.\n * @returns {Object.<string,boolean|Array>}\n */\nfunction parseKeyValue(/**string*/keyValue) {\n  var obj = {};\n  forEach((keyValue || \"\").split('&'), function(keyValue) {\n    var splitPoint, key, val;\n    if (keyValue) {\n      key = keyValue = keyValue.replace(/\\+/g,'%20');\n      splitPoint = keyValue.indexOf('=');\n      if (splitPoint !== -1) {\n        key = keyValue.substring(0, splitPoint);\n        val = keyValue.substring(splitPoint + 1);\n      }\n      key = tryDecodeURIComponent(key);\n      if (isDefined(key)) {\n        val = isDefined(val) ? tryDecodeURIComponent(val) : true;\n        if (!hasOwnProperty.call(obj, key)) {\n          obj[key] = val;\n        } else if (isArray(obj[key])) {\n          obj[key].push(val);\n        } else {\n          obj[key] = [obj[key],val];\n        }\n      }\n    }\n  });\n  return obj;\n}\n\nfunction toKeyValue(obj) {\n  var parts = [];\n  forEach(obj, function(value, key) {\n    if (isArray(value)) {\n      forEach(value, function(arrayValue) {\n        parts.push(encodeUriQuery(key, true) +\n                   (arrayValue === true ? '' : '=' + encodeUriQuery(arrayValue, true)));\n      });\n    } else {\n    parts.push(encodeUriQuery(key, true) +\n               (value === true ? '' : '=' + encodeUriQuery(value, true)));\n    }\n  });\n  return parts.length ? parts.join('&') : '';\n}\n\n\n/**\n * We need our custom method because encodeURIComponent is too aggressive and doesn't follow\n * http://www.ietf.org/rfc/rfc3986.txt with regards to the character set (pchar) allowed in path\n * segments:\n *    segment       = *pchar\n *    pchar         = unreserved / pct-encoded / sub-delims / \":\" / \"@\"\n *    pct-encoded   = \"%\" HEXDIG HEXDIG\n *    unreserved    = ALPHA / DIGIT / \"-\" / \".\" / \"_\" / \"~\"\n *    sub-delims    = \"!\" / \"$\" / \"&\" / \"'\" / \"(\" / \")\"\n *                     / \"*\" / \"+\" / \",\" / \";\" / \"=\"\n */\nfunction encodeUriSegment(val) {\n  return encodeUriQuery(val, true).\n             replace(/%26/gi, '&').\n             replace(/%3D/gi, '=').\n             replace(/%2B/gi, '+');\n}\n\n\n/**\n * This method is intended for encoding *key* or *value* parts of query component. We need a custom\n * method because encodeURIComponent is too aggressive and encodes stuff that doesn't have to be\n * encoded per http://tools.ietf.org/html/rfc3986:\n *    query       = *( pchar / \"/\" / \"?\" )\n *    pchar         = unreserved / pct-encoded / sub-delims / \":\" / \"@\"\n *    unreserved    = ALPHA / DIGIT / \"-\" / \".\" / \"_\" / \"~\"\n *    pct-encoded   = \"%\" HEXDIG HEXDIG\n *    sub-delims    = \"!\" / \"$\" / \"&\" / \"'\" / \"(\" / \")\"\n *                     / \"*\" / \"+\" / \",\" / \";\" / \"=\"\n */\nfunction encodeUriQuery(val, pctEncodeSpaces) {\n  return encodeURIComponent(val).\n             replace(/%40/gi, '@').\n             replace(/%3A/gi, ':').\n             replace(/%24/g, '$').\n             replace(/%2C/gi, ',').\n             replace(/%3B/gi, ';').\n             replace(/%20/g, (pctEncodeSpaces ? '%20' : '+'));\n}\n\nvar ngAttrPrefixes = ['ng-', 'data-ng-', 'ng:', 'x-ng-'];\n\nfunction getNgAttribute(element, ngAttr) {\n  var attr, i, ii = ngAttrPrefixes.length;\n  for (i = 0; i < ii; ++i) {\n    attr = ngAttrPrefixes[i] + ngAttr;\n    if (isString(attr = element.getAttribute(attr))) {\n      return attr;\n    }\n  }\n  return null;\n}\n\n/**\n * @ngdoc directive\n * @name ngApp\n * @module ng\n *\n * @element ANY\n * @param {angular.Module} ngApp an optional application\n *   {@link angular.module module} name to load.\n * @param {boolean=} ngStrictDi if this attribute is present on the app element, the injector will be\n *   created in \"strict-di\" mode. This means that the application will fail to invoke functions which\n *   do not use explicit function annotation (and are thus unsuitable for minification), as described\n *   in {@link guide/di the Dependency Injection guide}, and useful debugging info will assist in\n *   tracking down the root of these bugs.\n *\n * @description\n *\n * Use this directive to **auto-bootstrap** an AngularJS application. The `ngApp` directive\n * designates the **root element** of the application and is typically placed near the root element\n * of the page - e.g. on the `<body>` or `<html>` tags.\n *\n * There are a few things to keep in mind when using `ngApp`:\n * - only one AngularJS application can be auto-bootstrapped per HTML document. The first `ngApp`\n *   found in the document will be used to define the root element to auto-bootstrap as an\n *   application. To run multiple applications in an HTML document you must manually bootstrap them using\n *   {@link angular.bootstrap} instead.\n * - AngularJS applications cannot be nested within each other.\n * - Do not use a directive that uses {@link ng.$compile#transclusion transclusion} on the same element as `ngApp`.\n *   This includes directives such as {@link ng.ngIf `ngIf`}, {@link ng.ngInclude `ngInclude`} and\n *   {@link ngRoute.ngView `ngView`}.\n *   Doing this misplaces the app {@link ng.$rootElement `$rootElement`} and the app's {@link auto.$injector injector},\n *   causing animations to stop working and making the injector inaccessible from outside the app.\n *\n * You can specify an **AngularJS module** to be used as the root module for the application.  This\n * module will be loaded into the {@link auto.$injector} when the application is bootstrapped. It\n * should contain the application code needed or have dependencies on other modules that will\n * contain the code. See {@link angular.module} for more information.\n *\n * In the example below if the `ngApp` directive were not placed on the `html` element then the\n * document would not be compiled, the `AppController` would not be instantiated and the `{{ a+b }}`\n * would not be resolved to `3`.\n *\n * `ngApp` is the easiest, and most common way to bootstrap an application.\n *\n <example module=\"ngAppDemo\">\n   <file name=\"index.html\">\n   <div ng-controller=\"ngAppDemoController\">\n     I can add: {{a}} + {{b}} =  {{ a+b }}\n   </div>\n   </file>\n   <file name=\"script.js\">\n   angular.module('ngAppDemo', []).controller('ngAppDemoController', function($scope) {\n     $scope.a = 1;\n     $scope.b = 2;\n   });\n   </file>\n </example>\n *\n * Using `ngStrictDi`, you would see something like this:\n *\n <example ng-app-included=\"true\">\n   <file name=\"index.html\">\n   <div ng-app=\"ngAppStrictDemo\" ng-strict-di>\n       <div ng-controller=\"GoodController1\">\n           I can add: {{a}} + {{b}} =  {{ a+b }}\n\n           <p>This renders because the controller does not fail to\n              instantiate, by using explicit annotation style (see\n              script.js for details)\n           </p>\n       </div>\n\n       <div ng-controller=\"GoodController2\">\n           Name: <input ng-model=\"name\"><br />\n           Hello, {{name}}!\n\n           <p>This renders because the controller does not fail to\n              instantiate, by using explicit annotation style\n              (see script.js for details)\n           </p>\n       </div>\n\n       <div ng-controller=\"BadController\">\n           I can add: {{a}} + {{b}} =  {{ a+b }}\n\n           <p>The controller could not be instantiated, due to relying\n              on automatic function annotations (which are disabled in\n              strict mode). As such, the content of this section is not\n              interpolated, and there should be an error in your web console.\n           </p>\n       </div>\n   </div>\n   </file>\n   <file name=\"script.js\">\n   angular.module('ngAppStrictDemo', [])\n     // BadController will fail to instantiate, due to relying on automatic function annotation,\n     // rather than an explicit annotation\n     .controller('BadController', function($scope) {\n       $scope.a = 1;\n       $scope.b = 2;\n     })\n     // Unlike BadController, GoodController1 and GoodController2 will not fail to be instantiated,\n     // due to using explicit annotations using the array style and $inject property, respectively.\n     .controller('GoodController1', ['$scope', function($scope) {\n       $scope.a = 1;\n       $scope.b = 2;\n     }])\n     .controller('GoodController2', GoodController2);\n     function GoodController2($scope) {\n       $scope.name = \"World\";\n     }\n     GoodController2.$inject = ['$scope'];\n   </file>\n   <file name=\"style.css\">\n   div[ng-controller] {\n       margin-bottom: 1em;\n       -webkit-border-radius: 4px;\n       border-radius: 4px;\n       border: 1px solid;\n       padding: .5em;\n   }\n   div[ng-controller^=Good] {\n       border-color: #d6e9c6;\n       background-color: #dff0d8;\n       color: #3c763d;\n   }\n   div[ng-controller^=Bad] {\n       border-color: #ebccd1;\n       background-color: #f2dede;\n       color: #a94442;\n       margin-bottom: 0;\n   }\n   </file>\n </example>\n */\nfunction angularInit(element, bootstrap) {\n  var appElement,\n      module,\n      config = {};\n\n  // The element `element` has priority over any other element.\n  forEach(ngAttrPrefixes, function(prefix) {\n    var name = prefix + 'app';\n\n    if (!appElement && element.hasAttribute && element.hasAttribute(name)) {\n      appElement = element;\n      module = element.getAttribute(name);\n    }\n  });\n  forEach(ngAttrPrefixes, function(prefix) {\n    var name = prefix + 'app';\n    var candidate;\n\n    if (!appElement && (candidate = element.querySelector('[' + name.replace(':', '\\\\:') + ']'))) {\n      appElement = candidate;\n      module = candidate.getAttribute(name);\n    }\n  });\n  if (appElement) {\n    config.strictDi = getNgAttribute(appElement, \"strict-di\") !== null;\n    bootstrap(appElement, module ? [module] : [], config);\n  }\n}\n\n/**\n * @ngdoc function\n * @name angular.bootstrap\n * @module ng\n * @description\n * Use this function to manually start up angular application.\n *\n * For more information, see the {@link guide/bootstrap Bootstrap guide}.\n *\n * Angular will detect if it has been loaded into the browser more than once and only allow the\n * first loaded script to be bootstrapped and will report a warning to the browser console for\n * each of the subsequent scripts. This prevents strange results in applications, where otherwise\n * multiple instances of Angular try to work on the DOM.\n *\n * <div class=\"alert alert-warning\">\n * **Note:** Protractor based end-to-end tests cannot use this function to bootstrap manually.\n * They must use {@link ng.directive:ngApp ngApp}.\n * </div>\n *\n * <div class=\"alert alert-warning\">\n * **Note:** Do not bootstrap the app on an element with a directive that uses {@link ng.$compile#transclusion transclusion},\n * such as {@link ng.ngIf `ngIf`}, {@link ng.ngInclude `ngInclude`} and {@link ngRoute.ngView `ngView`}.\n * Doing this misplaces the app {@link ng.$rootElement `$rootElement`} and the app's {@link auto.$injector injector},\n * causing animations to stop working and making the injector inaccessible from outside the app.\n * </div>\n *\n * ```html\n * <!doctype html>\n * <html>\n * <body>\n * <div ng-controller=\"WelcomeController\">\n *   {{greeting}}\n * </div>\n *\n * <script src=\"angular.js\"></script>\n * <script>\n *   var app = angular.module('demo', [])\n *   .controller('WelcomeController', function($scope) {\n *       $scope.greeting = 'Welcome!';\n *   });\n *   angular.bootstrap(document, ['demo']);\n * </script>\n * </body>\n * </html>\n * ```\n *\n * @param {DOMElement} element DOM element which is the root of angular application.\n * @param {Array<String|Function|Array>=} modules an array of modules to load into the application.\n *     Each item in the array should be the name of a predefined module or a (DI annotated)\n *     function that will be invoked by the injector as a `config` block.\n *     See: {@link angular.module modules}\n * @param {Object=} config an object for defining configuration options for the application. The\n *     following keys are supported:\n *\n * * `strictDi` - disable automatic function annotation for the application. This is meant to\n *   assist in finding bugs which break minified code. Defaults to `false`.\n *\n * @returns {auto.$injector} Returns the newly created injector for this app.\n */\nfunction bootstrap(element, modules, config) {\n  if (!isObject(config)) config = {};\n  var defaultConfig = {\n    strictDi: false\n  };\n  config = extend(defaultConfig, config);\n  var doBootstrap = function() {\n    element = jqLite(element);\n\n    if (element.injector()) {\n      var tag = (element[0] === window.document) ? 'document' : startingTag(element);\n      // Encode angle brackets to prevent input from being sanitized to empty string #8683.\n      throw ngMinErr(\n          'btstrpd',\n          \"App already bootstrapped with this element '{0}'\",\n          tag.replace(/</,'&lt;').replace(/>/,'&gt;'));\n    }\n\n    modules = modules || [];\n    modules.unshift(['$provide', function($provide) {\n      $provide.value('$rootElement', element);\n    }]);\n\n    if (config.debugInfoEnabled) {\n      // Pushing so that this overrides `debugInfoEnabled` setting defined in user's `modules`.\n      modules.push(['$compileProvider', function($compileProvider) {\n        $compileProvider.debugInfoEnabled(true);\n      }]);\n    }\n\n    modules.unshift('ng');\n    var injector = createInjector(modules, config.strictDi);\n    injector.invoke(['$rootScope', '$rootElement', '$compile', '$injector',\n       function bootstrapApply(scope, element, compile, injector) {\n        scope.$apply(function() {\n          element.data('$injector', injector);\n          compile(element)(scope);\n        });\n      }]\n    );\n    return injector;\n  };\n\n  var NG_ENABLE_DEBUG_INFO = /^NG_ENABLE_DEBUG_INFO!/;\n  var NG_DEFER_BOOTSTRAP = /^NG_DEFER_BOOTSTRAP!/;\n\n  if (window && NG_ENABLE_DEBUG_INFO.test(window.name)) {\n    config.debugInfoEnabled = true;\n    window.name = window.name.replace(NG_ENABLE_DEBUG_INFO, '');\n  }\n\n  if (window && !NG_DEFER_BOOTSTRAP.test(window.name)) {\n    return doBootstrap();\n  }\n\n  window.name = window.name.replace(NG_DEFER_BOOTSTRAP, '');\n  angular.resumeBootstrap = function(extraModules) {\n    forEach(extraModules, function(module) {\n      modules.push(module);\n    });\n    return doBootstrap();\n  };\n\n  if (isFunction(angular.resumeDeferredBootstrap)) {\n    angular.resumeDeferredBootstrap();\n  }\n}\n\n/**\n * @ngdoc function\n * @name angular.reloadWithDebugInfo\n * @module ng\n * @description\n * Use this function to reload the current application with debug information turned on.\n * This takes precedence over a call to `$compileProvider.debugInfoEnabled(false)`.\n *\n * See {@link ng.$compileProvider#debugInfoEnabled} for more.\n */\nfunction reloadWithDebugInfo() {\n  window.name = 'NG_ENABLE_DEBUG_INFO!' + window.name;\n  window.location.reload();\n}\n\n/**\n * @name angular.getTestability\n * @module ng\n * @description\n * Get the testability service for the instance of Angular on the given\n * element.\n * @param {DOMElement} element DOM element which is the root of angular application.\n */\nfunction getTestability(rootElement) {\n  var injector = angular.element(rootElement).injector();\n  if (!injector) {\n    throw ngMinErr('test',\n      'no injector found for element argument to getTestability');\n  }\n  return injector.get('$$testability');\n}\n\nvar SNAKE_CASE_REGEXP = /[A-Z]/g;\nfunction snake_case(name, separator) {\n  separator = separator || '_';\n  return name.replace(SNAKE_CASE_REGEXP, function(letter, pos) {\n    return (pos ? separator : '') + letter.toLowerCase();\n  });\n}\n\nvar bindJQueryFired = false;\nfunction bindJQuery() {\n  var originalCleanData;\n\n  if (bindJQueryFired) {\n    return;\n  }\n\n  // bind to jQuery if present;\n  var jqName = jq();\n  jQuery = isUndefined(jqName) ? window.jQuery :   // use jQuery (if present)\n           !jqName             ? undefined     :   // use jqLite\n                                 window[jqName];   // use jQuery specified by `ngJq`\n\n  // Use jQuery if it exists with proper functionality, otherwise default to us.\n  // Angular 1.2+ requires jQuery 1.7+ for on()/off() support.\n  // Angular 1.3+ technically requires at least jQuery 2.1+ but it may work with older\n  // versions. It will not work for sure with jQuery <1.7, though.\n  if (jQuery && jQuery.fn.on) {\n    jqLite = jQuery;\n    extend(jQuery.fn, {\n      scope: JQLitePrototype.scope,\n      isolateScope: JQLitePrototype.isolateScope,\n      controller: JQLitePrototype.controller,\n      injector: JQLitePrototype.injector,\n      inheritedData: JQLitePrototype.inheritedData\n    });\n\n    // All nodes removed from the DOM via various jQuery APIs like .remove()\n    // are passed through jQuery.cleanData. Monkey-patch this method to fire\n    // the $destroy event on all removed nodes.\n    originalCleanData = jQuery.cleanData;\n    jQuery.cleanData = function(elems) {\n      var events;\n      for (var i = 0, elem; (elem = elems[i]) != null; i++) {\n        events = jQuery._data(elem, \"events\");\n        if (events && events.$destroy) {\n          jQuery(elem).triggerHandler('$destroy');\n        }\n      }\n      originalCleanData(elems);\n    };\n  } else {\n    jqLite = JQLite;\n  }\n\n  angular.element = jqLite;\n\n  // Prevent double-proxying.\n  bindJQueryFired = true;\n}\n\n/**\n * throw error if the argument is falsy.\n */\nfunction assertArg(arg, name, reason) {\n  if (!arg) {\n    throw ngMinErr('areq', \"Argument '{0}' is {1}\", (name || '?'), (reason || \"required\"));\n  }\n  return arg;\n}\n\nfunction assertArgFn(arg, name, acceptArrayAnnotation) {\n  if (acceptArrayAnnotation && isArray(arg)) {\n      arg = arg[arg.length - 1];\n  }\n\n  assertArg(isFunction(arg), name, 'not a function, got ' +\n      (arg && typeof arg === 'object' ? arg.constructor.name || 'Object' : typeof arg));\n  return arg;\n}\n\n/**\n * throw error if the name given is hasOwnProperty\n * @param  {String} name    the name to test\n * @param  {String} context the context in which the name is used, such as module or directive\n */\nfunction assertNotHasOwnProperty(name, context) {\n  if (name === 'hasOwnProperty') {\n    throw ngMinErr('badname', \"hasOwnProperty is not a valid {0} name\", context);\n  }\n}\n\n/**\n * Return the value accessible from the object by path. Any undefined traversals are ignored\n * @param {Object} obj starting object\n * @param {String} path path to traverse\n * @param {boolean} [bindFnToScope=true]\n * @returns {Object} value as accessible by path\n */\n//TODO(misko): this function needs to be removed\nfunction getter(obj, path, bindFnToScope) {\n  if (!path) return obj;\n  var keys = path.split('.');\n  var key;\n  var lastInstance = obj;\n  var len = keys.length;\n\n  for (var i = 0; i < len; i++) {\n    key = keys[i];\n    if (obj) {\n      obj = (lastInstance = obj)[key];\n    }\n  }\n  if (!bindFnToScope && isFunction(obj)) {\n    return bind(lastInstance, obj);\n  }\n  return obj;\n}\n\n/**\n * Return the DOM siblings between the first and last node in the given array.\n * @param {Array} array like object\n * @returns {Array} the inputted object or a jqLite collection containing the nodes\n */\nfunction getBlockNodes(nodes) {\n  // TODO(perf): update `nodes` instead of creating a new object?\n  var node = nodes[0];\n  var endNode = nodes[nodes.length - 1];\n  var blockNodes;\n\n  for (var i = 1; node !== endNode && (node = node.nextSibling); i++) {\n    if (blockNodes || nodes[i] !== node) {\n      if (!blockNodes) {\n        blockNodes = jqLite(slice.call(nodes, 0, i));\n      }\n      blockNodes.push(node);\n    }\n  }\n\n  return blockNodes || nodes;\n}\n\n\n/**\n * Creates a new object without a prototype. This object is useful for lookup without having to\n * guard against prototypically inherited properties via hasOwnProperty.\n *\n * Related micro-benchmarks:\n * - http://jsperf.com/object-create2\n * - http://jsperf.com/proto-map-lookup/2\n * - http://jsperf.com/for-in-vs-object-keys2\n *\n * @returns {Object}\n */\nfunction createMap() {\n  return Object.create(null);\n}\n\nvar NODE_TYPE_ELEMENT = 1;\nvar NODE_TYPE_ATTRIBUTE = 2;\nvar NODE_TYPE_TEXT = 3;\nvar NODE_TYPE_COMMENT = 8;\nvar NODE_TYPE_DOCUMENT = 9;\nvar NODE_TYPE_DOCUMENT_FRAGMENT = 11;\n\n/**\n * @ngdoc type\n * @name angular.Module\n * @module ng\n * @description\n *\n * Interface for configuring angular {@link angular.module modules}.\n */\n\nfunction setupModuleLoader(window) {\n\n  var $injectorMinErr = minErr('$injector');\n  var ngMinErr = minErr('ng');\n\n  function ensure(obj, name, factory) {\n    return obj[name] || (obj[name] = factory());\n  }\n\n  var angular = ensure(window, 'angular', Object);\n\n  // We need to expose `angular.$$minErr` to modules such as `ngResource` that reference it during bootstrap\n  angular.$$minErr = angular.$$minErr || minErr;\n\n  return ensure(angular, 'module', function() {\n    /** @type {Object.<string, angular.Module>} */\n    var modules = {};\n\n    /**\n     * @ngdoc function\n     * @name angular.module\n     * @module ng\n     * @description\n     *\n     * The `angular.module` is a global place for creating, registering and retrieving Angular\n     * modules.\n     * All modules (angular core or 3rd party) that should be available to an application must be\n     * registered using this mechanism.\n     *\n     * Passing one argument retrieves an existing {@link angular.Module},\n     * whereas passing more than one argument creates a new {@link angular.Module}\n     *\n     *\n     * # Module\n     *\n     * A module is a collection of services, directives, controllers, filters, and configuration information.\n     * `angular.module` is used to configure the {@link auto.$injector $injector}.\n     *\n     * ```js\n     * // Create a new module\n     * var myModule = angular.module('myModule', []);\n     *\n     * // register a new service\n     * myModule.value('appName', 'MyCoolApp');\n     *\n     * // configure existing services inside initialization blocks.\n     * myModule.config(['$locationProvider', function($locationProvider) {\n     *   // Configure existing providers\n     *   $locationProvider.hashPrefix('!');\n     * }]);\n     * ```\n     *\n     * Then you can create an injector and load your modules like this:\n     *\n     * ```js\n     * var injector = angular.injector(['ng', 'myModule'])\n     * ```\n     *\n     * However it's more likely that you'll just use\n     * {@link ng.directive:ngApp ngApp} or\n     * {@link angular.bootstrap} to simplify this process for you.\n     *\n     * @param {!string} name The name of the module to create or retrieve.\n     * @param {!Array.<string>=} requires If specified then new module is being created. If\n     *        unspecified then the module is being retrieved for further configuration.\n     * @param {Function=} configFn Optional configuration function for the module. Same as\n     *        {@link angular.Module#config Module#config()}.\n     * @returns {angular.Module} new module with the {@link angular.Module} api.\n     */\n    return function module(name, requires, configFn) {\n      var assertNotHasOwnProperty = function(name, context) {\n        if (name === 'hasOwnProperty') {\n          throw ngMinErr('badname', 'hasOwnProperty is not a valid {0} name', context);\n        }\n      };\n\n      assertNotHasOwnProperty(name, 'module');\n      if (requires && modules.hasOwnProperty(name)) {\n        modules[name] = null;\n      }\n      return ensure(modules, name, function() {\n        if (!requires) {\n          throw $injectorMinErr('nomod', \"Module '{0}' is not available! You either misspelled \" +\n             \"the module name or forgot to load it. If registering a module ensure that you \" +\n             \"specify the dependencies as the second argument.\", name);\n        }\n\n        /** @type {!Array.<Array.<*>>} */\n        var invokeQueue = [];\n\n        /** @type {!Array.<Function>} */\n        var configBlocks = [];\n\n        /** @type {!Array.<Function>} */\n        var runBlocks = [];\n\n        var config = invokeLater('$injector', 'invoke', 'push', configBlocks);\n\n        /** @type {angular.Module} */\n        var moduleInstance = {\n          // Private state\n          _invokeQueue: invokeQueue,\n          _configBlocks: configBlocks,\n          _runBlocks: runBlocks,\n\n          /**\n           * @ngdoc property\n           * @name angular.Module#requires\n           * @module ng\n           *\n           * @description\n           * Holds the list of modules which the injector will load before the current module is\n           * loaded.\n           */\n          requires: requires,\n\n          /**\n           * @ngdoc property\n           * @name angular.Module#name\n           * @module ng\n           *\n           * @description\n           * Name of the module.\n           */\n          name: name,\n\n\n          /**\n           * @ngdoc method\n           * @name angular.Module#provider\n           * @module ng\n           * @param {string} name service name\n           * @param {Function} providerType Construction function for creating new instance of the\n           *                                service.\n           * @description\n           * See {@link auto.$provide#provider $provide.provider()}.\n           */\n          provider: invokeLaterAndSetModuleName('$provide', 'provider'),\n\n          /**\n           * @ngdoc method\n           * @name angular.Module#factory\n           * @module ng\n           * @param {string} name service name\n           * @param {Function} providerFunction Function for creating new instance of the service.\n           * @description\n           * See {@link auto.$provide#factory $provide.factory()}.\n           */\n          factory: invokeLaterAndSetModuleName('$provide', 'factory'),\n\n          /**\n           * @ngdoc method\n           * @name angular.Module#service\n           * @module ng\n           * @param {string} name service name\n           * @param {Function} constructor A constructor function that will be instantiated.\n           * @description\n           * See {@link auto.$provide#service $provide.service()}.\n           */\n          service: invokeLaterAndSetModuleName('$provide', 'service'),\n\n          /**\n           * @ngdoc method\n           * @name angular.Module#value\n           * @module ng\n           * @param {string} name service name\n           * @param {*} object Service instance object.\n           * @description\n           * See {@link auto.$provide#value $provide.value()}.\n           */\n          value: invokeLater('$provide', 'value'),\n\n          /**\n           * @ngdoc method\n           * @name angular.Module#constant\n           * @module ng\n           * @param {string} name constant name\n           * @param {*} object Constant value.\n           * @description\n           * Because the constants are fixed, they get applied before other provide methods.\n           * See {@link auto.$provide#constant $provide.constant()}.\n           */\n          constant: invokeLater('$provide', 'constant', 'unshift'),\n\n           /**\n           * @ngdoc method\n           * @name angular.Module#decorator\n           * @module ng\n           * @param {string} name The name of the service to decorate.\n           * @param {Function} decorFn This function will be invoked when the service needs to be\n           *                           instantiated and should return the decorated service instance.\n           * @description\n           * See {@link auto.$provide#decorator $provide.decorator()}.\n           */\n          decorator: invokeLaterAndSetModuleName('$provide', 'decorator'),\n\n          /**\n           * @ngdoc method\n           * @name angular.Module#animation\n           * @module ng\n           * @param {string} name animation name\n           * @param {Function} animationFactory Factory function for creating new instance of an\n           *                                    animation.\n           * @description\n           *\n           * **NOTE**: animations take effect only if the **ngAnimate** module is loaded.\n           *\n           *\n           * Defines an animation hook that can be later used with\n           * {@link $animate $animate} service and directives that use this service.\n           *\n           * ```js\n           * module.animation('.animation-name', function($inject1, $inject2) {\n           *   return {\n           *     eventName : function(element, done) {\n           *       //code to run the animation\n           *       //once complete, then run done()\n           *       return function cancellationFunction(element) {\n           *         //code to cancel the animation\n           *       }\n           *     }\n           *   }\n           * })\n           * ```\n           *\n           * See {@link ng.$animateProvider#register $animateProvider.register()} and\n           * {@link ngAnimate ngAnimate module} for more information.\n           */\n          animation: invokeLaterAndSetModuleName('$animateProvider', 'register'),\n\n          /**\n           * @ngdoc method\n           * @name angular.Module#filter\n           * @module ng\n           * @param {string} name Filter name - this must be a valid angular expression identifier\n           * @param {Function} filterFactory Factory function for creating new instance of filter.\n           * @description\n           * See {@link ng.$filterProvider#register $filterProvider.register()}.\n           *\n           * <div class=\"alert alert-warning\">\n           * **Note:** Filter names must be valid angular {@link expression} identifiers, such as `uppercase` or `orderBy`.\n           * Names with special characters, such as hyphens and dots, are not allowed. If you wish to namespace\n           * your filters, then you can use capitalization (`myappSubsectionFilterx`) or underscores\n           * (`myapp_subsection_filterx`).\n           * </div>\n           */\n          filter: invokeLaterAndSetModuleName('$filterProvider', 'register'),\n\n          /**\n           * @ngdoc method\n           * @name angular.Module#controller\n           * @module ng\n           * @param {string|Object} name Controller name, or an object map of controllers where the\n           *    keys are the names and the values are the constructors.\n           * @param {Function} constructor Controller constructor function.\n           * @description\n           * See {@link ng.$controllerProvider#register $controllerProvider.register()}.\n           */\n          controller: invokeLaterAndSetModuleName('$controllerProvider', 'register'),\n\n          /**\n           * @ngdoc method\n           * @name angular.Module#directive\n           * @module ng\n           * @param {string|Object} name Directive name, or an object map of directives where the\n           *    keys are the names and the values are the factories.\n           * @param {Function} directiveFactory Factory function for creating new instance of\n           * directives.\n           * @description\n           * See {@link ng.$compileProvider#directive $compileProvider.directive()}.\n           */\n          directive: invokeLaterAndSetModuleName('$compileProvider', 'directive'),\n\n          /**\n           * @ngdoc method\n           * @name angular.Module#component\n           * @module ng\n           * @param {string} name Name of the component in camel-case (i.e. myComp which will match as my-comp)\n           * @param {Object} options Component definition object (a simplified\n           *    {@link ng.$compile#directive-definition-object directive definition object})\n           *\n           * @description\n           * See {@link ng.$compileProvider#component $compileProvider.component()}.\n           */\n          component: invokeLaterAndSetModuleName('$compileProvider', 'component'),\n\n          /**\n           * @ngdoc method\n           * @name angular.Module#config\n           * @module ng\n           * @param {Function} configFn Execute this function on module load. Useful for service\n           *    configuration.\n           * @description\n           * Use this method to register work which needs to be performed on module loading.\n           * For more about how to configure services, see\n           * {@link providers#provider-recipe Provider Recipe}.\n           */\n          config: config,\n\n          /**\n           * @ngdoc method\n           * @name angular.Module#run\n           * @module ng\n           * @param {Function} initializationFn Execute this function after injector creation.\n           *    Useful for application initialization.\n           * @description\n           * Use this method to register work which should be performed when the injector is done\n           * loading all modules.\n           */\n          run: function(block) {\n            runBlocks.push(block);\n            return this;\n          }\n        };\n\n        if (configFn) {\n          config(configFn);\n        }\n\n        return moduleInstance;\n\n        /**\n         * @param {string} provider\n         * @param {string} method\n         * @param {String=} insertMethod\n         * @returns {angular.Module}\n         */\n        function invokeLater(provider, method, insertMethod, queue) {\n          if (!queue) queue = invokeQueue;\n          return function() {\n            queue[insertMethod || 'push']([provider, method, arguments]);\n            return moduleInstance;\n          };\n        }\n\n        /**\n         * @param {string} provider\n         * @param {string} method\n         * @returns {angular.Module}\n         */\n        function invokeLaterAndSetModuleName(provider, method) {\n          return function(recipeName, factoryFunction) {\n            if (factoryFunction && isFunction(factoryFunction)) factoryFunction.$$moduleName = name;\n            invokeQueue.push([provider, method, arguments]);\n            return moduleInstance;\n          };\n        }\n      });\n    };\n  });\n\n}\n\n/* global shallowCopy: true */\n\n/**\n * Creates a shallow copy of an object, an array or a primitive.\n *\n * Assumes that there are no proto properties for objects.\n */\nfunction shallowCopy(src, dst) {\n  if (isArray(src)) {\n    dst = dst || [];\n\n    for (var i = 0, ii = src.length; i < ii; i++) {\n      dst[i] = src[i];\n    }\n  } else if (isObject(src)) {\n    dst = dst || {};\n\n    for (var key in src) {\n      if (!(key.charAt(0) === '$' && key.charAt(1) === '$')) {\n        dst[key] = src[key];\n      }\n    }\n  }\n\n  return dst || src;\n}\n\n/* global toDebugString: true */\n\nfunction serializeObject(obj) {\n  var seen = [];\n\n  return JSON.stringify(obj, function(key, val) {\n    val = toJsonReplacer(key, val);\n    if (isObject(val)) {\n\n      if (seen.indexOf(val) >= 0) return '...';\n\n      seen.push(val);\n    }\n    return val;\n  });\n}\n\nfunction toDebugString(obj) {\n  if (typeof obj === 'function') {\n    return obj.toString().replace(/ \\{[\\s\\S]*$/, '');\n  } else if (isUndefined(obj)) {\n    return 'undefined';\n  } else if (typeof obj !== 'string') {\n    return serializeObject(obj);\n  }\n  return obj;\n}\n\n/* global angularModule: true,\n  version: true,\n\n  $CompileProvider,\n\n  htmlAnchorDirective,\n  inputDirective,\n  inputDirective,\n  formDirective,\n  scriptDirective,\n  selectDirective,\n  styleDirective,\n  optionDirective,\n  ngBindDirective,\n  ngBindHtmlDirective,\n  ngBindTemplateDirective,\n  ngClassDirective,\n  ngClassEvenDirective,\n  ngClassOddDirective,\n  ngCloakDirective,\n  ngControllerDirective,\n  ngFormDirective,\n  ngHideDirective,\n  ngIfDirective,\n  ngIncludeDirective,\n  ngIncludeFillContentDirective,\n  ngInitDirective,\n  ngNonBindableDirective,\n  ngPluralizeDirective,\n  ngRepeatDirective,\n  ngShowDirective,\n  ngStyleDirective,\n  ngSwitchDirective,\n  ngSwitchWhenDirective,\n  ngSwitchDefaultDirective,\n  ngOptionsDirective,\n  ngTranscludeDirective,\n  ngModelDirective,\n  ngListDirective,\n  ngChangeDirective,\n  patternDirective,\n  patternDirective,\n  requiredDirective,\n  requiredDirective,\n  minlengthDirective,\n  minlengthDirective,\n  maxlengthDirective,\n  maxlengthDirective,\n  ngValueDirective,\n  ngModelOptionsDirective,\n  ngAttributeAliasDirectives,\n  ngEventDirectives,\n\n  $AnchorScrollProvider,\n  $AnimateProvider,\n  $CoreAnimateCssProvider,\n  $$CoreAnimateJsProvider,\n  $$CoreAnimateQueueProvider,\n  $$AnimateRunnerFactoryProvider,\n  $$AnimateAsyncRunFactoryProvider,\n  $BrowserProvider,\n  $CacheFactoryProvider,\n  $ControllerProvider,\n  $DateProvider,\n  $DocumentProvider,\n  $ExceptionHandlerProvider,\n  $FilterProvider,\n  $$ForceReflowProvider,\n  $InterpolateProvider,\n  $IntervalProvider,\n  $$HashMapProvider,\n  $HttpProvider,\n  $HttpParamSerializerProvider,\n  $HttpParamSerializerJQLikeProvider,\n  $HttpBackendProvider,\n  $xhrFactoryProvider,\n  $jsonpCallbacksProvider,\n  $LocationProvider,\n  $LogProvider,\n  $ParseProvider,\n  $RootScopeProvider,\n  $QProvider,\n  $$QProvider,\n  $$SanitizeUriProvider,\n  $SceProvider,\n  $SceDelegateProvider,\n  $SnifferProvider,\n  $TemplateCacheProvider,\n  $TemplateRequestProvider,\n  $$TestabilityProvider,\n  $TimeoutProvider,\n  $$RAFProvider,\n  $WindowProvider,\n  $$jqLiteProvider,\n  $$CookieReaderProvider\n*/\n\n\n/**\n * @ngdoc object\n * @name angular.version\n * @module ng\n * @description\n * An object that contains information about the current AngularJS version.\n *\n * This object has the following properties:\n *\n * - `full` – `{string}` – Full version string, such as \"0.9.18\".\n * - `major` – `{number}` – Major version number, such as \"0\".\n * - `minor` – `{number}` – Minor version number, such as \"9\".\n * - `dot` – `{number}` – Dot version number, such as \"18\".\n * - `codeName` – `{string}` – Code name of the release, such as \"jiggling-armfat\".\n */\nvar version = {\n  full: '1.5.8',    // all of these placeholder strings will be replaced by grunt's\n  major: 1,    // package task\n  minor: 5,\n  dot: 8,\n  codeName: 'arbitrary-fallbacks'\n};\n\n\nfunction publishExternalAPI(angular) {\n  extend(angular, {\n    'bootstrap': bootstrap,\n    'copy': copy,\n    'extend': extend,\n    'merge': merge,\n    'equals': equals,\n    'element': jqLite,\n    'forEach': forEach,\n    'injector': createInjector,\n    'noop': noop,\n    'bind': bind,\n    'toJson': toJson,\n    'fromJson': fromJson,\n    'identity': identity,\n    'isUndefined': isUndefined,\n    'isDefined': isDefined,\n    'isString': isString,\n    'isFunction': isFunction,\n    'isObject': isObject,\n    'isNumber': isNumber,\n    'isElement': isElement,\n    'isArray': isArray,\n    'version': version,\n    'isDate': isDate,\n    'lowercase': lowercase,\n    'uppercase': uppercase,\n    'callbacks': {$$counter: 0},\n    'getTestability': getTestability,\n    '$$minErr': minErr,\n    '$$csp': csp,\n    'reloadWithDebugInfo': reloadWithDebugInfo\n  });\n\n  angularModule = setupModuleLoader(window);\n\n  angularModule('ng', ['ngLocale'], ['$provide',\n    function ngModule($provide) {\n      // $$sanitizeUriProvider needs to be before $compileProvider as it is used by it.\n      $provide.provider({\n        $$sanitizeUri: $$SanitizeUriProvider\n      });\n      $provide.provider('$compile', $CompileProvider).\n        directive({\n            a: htmlAnchorDirective,\n            input: inputDirective,\n            textarea: inputDirective,\n            form: formDirective,\n            script: scriptDirective,\n            select: selectDirective,\n            style: styleDirective,\n            option: optionDirective,\n            ngBind: ngBindDirective,\n            ngBindHtml: ngBindHtmlDirective,\n            ngBindTemplate: ngBindTemplateDirective,\n            ngClass: ngClassDirective,\n            ngClassEven: ngClassEvenDirective,\n            ngClassOdd: ngClassOddDirective,\n            ngCloak: ngCloakDirective,\n            ngController: ngControllerDirective,\n            ngForm: ngFormDirective,\n            ngHide: ngHideDirective,\n            ngIf: ngIfDirective,\n            ngInclude: ngIncludeDirective,\n            ngInit: ngInitDirective,\n            ngNonBindable: ngNonBindableDirective,\n            ngPluralize: ngPluralizeDirective,\n            ngRepeat: ngRepeatDirective,\n            ngShow: ngShowDirective,\n            ngStyle: ngStyleDirective,\n            ngSwitch: ngSwitchDirective,\n            ngSwitchWhen: ngSwitchWhenDirective,\n            ngSwitchDefault: ngSwitchDefaultDirective,\n            ngOptions: ngOptionsDirective,\n            ngTransclude: ngTranscludeDirective,\n            ngModel: ngModelDirective,\n            ngList: ngListDirective,\n            ngChange: ngChangeDirective,\n            pattern: patternDirective,\n            ngPattern: patternDirective,\n            required: requiredDirective,\n            ngRequired: requiredDirective,\n            minlength: minlengthDirective,\n            ngMinlength: minlengthDirective,\n            maxlength: maxlengthDirective,\n            ngMaxlength: maxlengthDirective,\n            ngValue: ngValueDirective,\n            ngModelOptions: ngModelOptionsDirective\n        }).\n        directive({\n          ngInclude: ngIncludeFillContentDirective\n        }).\n        directive(ngAttributeAliasDirectives).\n        directive(ngEventDirectives);\n      $provide.provider({\n        $anchorScroll: $AnchorScrollProvider,\n        $animate: $AnimateProvider,\n        $animateCss: $CoreAnimateCssProvider,\n        $$animateJs: $$CoreAnimateJsProvider,\n        $$animateQueue: $$CoreAnimateQueueProvider,\n        $$AnimateRunner: $$AnimateRunnerFactoryProvider,\n        $$animateAsyncRun: $$AnimateAsyncRunFactoryProvider,\n        $browser: $BrowserProvider,\n        $cacheFactory: $CacheFactoryProvider,\n        $controller: $ControllerProvider,\n        $document: $DocumentProvider,\n        $exceptionHandler: $ExceptionHandlerProvider,\n        $filter: $FilterProvider,\n        $$forceReflow: $$ForceReflowProvider,\n        $interpolate: $InterpolateProvider,\n        $interval: $IntervalProvider,\n        $http: $HttpProvider,\n        $httpParamSerializer: $HttpParamSerializerProvider,\n        $httpParamSerializerJQLike: $HttpParamSerializerJQLikeProvider,\n        $httpBackend: $HttpBackendProvider,\n        $xhrFactory: $xhrFactoryProvider,\n        $jsonpCallbacks: $jsonpCallbacksProvider,\n        $location: $LocationProvider,\n        $log: $LogProvider,\n        $parse: $ParseProvider,\n        $rootScope: $RootScopeProvider,\n        $q: $QProvider,\n        $$q: $$QProvider,\n        $sce: $SceProvider,\n        $sceDelegate: $SceDelegateProvider,\n        $sniffer: $SnifferProvider,\n        $templateCache: $TemplateCacheProvider,\n        $templateRequest: $TemplateRequestProvider,\n        $$testability: $$TestabilityProvider,\n        $timeout: $TimeoutProvider,\n        $window: $WindowProvider,\n        $$rAF: $$RAFProvider,\n        $$jqLite: $$jqLiteProvider,\n        $$HashMap: $$HashMapProvider,\n        $$cookieReader: $$CookieReaderProvider\n      });\n    }\n  ]);\n}\n\n/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n *     Any commits to this file should be reviewed with security in mind.  *\n *   Changes to this file can potentially create security vulnerabilities. *\n *          An approval from 2 Core members with history of modifying      *\n *                         this file is required.                          *\n *                                                                         *\n *  Does the change somehow allow for arbitrary javascript to be executed? *\n *    Or allows for someone to change the prototype of built-in objects?   *\n *     Or gives undesired access to variables likes document or window?    *\n * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */\n\n/* global JQLitePrototype: true,\n  addEventListenerFn: true,\n  removeEventListenerFn: true,\n  BOOLEAN_ATTR: true,\n  ALIASED_ATTR: true,\n*/\n\n//////////////////////////////////\n//JQLite\n//////////////////////////////////\n\n/**\n * @ngdoc function\n * @name angular.element\n * @module ng\n * @kind function\n *\n * @description\n * Wraps a raw DOM element or HTML string as a [jQuery](http://jquery.com) element.\n *\n * If jQuery is available, `angular.element` is an alias for the\n * [jQuery](http://api.jquery.com/jQuery/) function. If jQuery is not available, `angular.element`\n * delegates to Angular's built-in subset of jQuery, called \"jQuery lite\" or **jqLite**.\n *\n * jqLite is a tiny, API-compatible subset of jQuery that allows\n * Angular to manipulate the DOM in a cross-browser compatible way. jqLite implements only the most\n * commonly needed functionality with the goal of having a very small footprint.\n *\n * To use `jQuery`, simply ensure it is loaded before the `angular.js` file. You can also use the\n * {@link ngJq `ngJq`} directive to specify that jqlite should be used over jQuery, or to use a\n * specific version of jQuery if multiple versions exist on the page.\n *\n * <div class=\"alert alert-info\">**Note:** All element references in Angular are always wrapped with jQuery or\n * jqLite (such as the element argument in a directive's compile / link function). They are never raw DOM references.</div>\n *\n * <div class=\"alert alert-warning\">**Note:** Keep in mind that this function will not find elements\n * by tag name / CSS selector. For lookups by tag name, try instead `angular.element(document).find(...)`\n * or `$document.find()`, or use the standard DOM APIs, e.g. `document.querySelectorAll()`.</div>\n *\n * ## Angular's jqLite\n * jqLite provides only the following jQuery methods:\n *\n * - [`addClass()`](http://api.jquery.com/addClass/) - Does not support a function as first argument\n * - [`after()`](http://api.jquery.com/after/)\n * - [`append()`](http://api.jquery.com/append/)\n * - [`attr()`](http://api.jquery.com/attr/) - Does not support functions as parameters\n * - [`bind()`](http://api.jquery.com/bind/) - Does not support namespaces, selectors or eventData\n * - [`children()`](http://api.jquery.com/children/) - Does not support selectors\n * - [`clone()`](http://api.jquery.com/clone/)\n * - [`contents()`](http://api.jquery.com/contents/)\n * - [`css()`](http://api.jquery.com/css/) - Only retrieves inline-styles, does not call `getComputedStyle()`.\n *   As a setter, does not convert numbers to strings or append 'px', and also does not have automatic property prefixing.\n * - [`data()`](http://api.jquery.com/data/)\n * - [`detach()`](http://api.jquery.com/detach/)\n * - [`empty()`](http://api.jquery.com/empty/)\n * - [`eq()`](http://api.jquery.com/eq/)\n * - [`find()`](http://api.jquery.com/find/) - Limited to lookups by tag name\n * - [`hasClass()`](http://api.jquery.com/hasClass/)\n * - [`html()`](http://api.jquery.com/html/)\n * - [`next()`](http://api.jquery.com/next/) - Does not support selectors\n * - [`on()`](http://api.jquery.com/on/) - Does not support namespaces, selectors or eventData\n * - [`off()`](http://api.jquery.com/off/) - Does not support namespaces, selectors or event object as parameter\n * - [`one()`](http://api.jquery.com/one/) - Does not support namespaces or selectors\n * - [`parent()`](http://api.jquery.com/parent/) - Does not support selectors\n * - [`prepend()`](http://api.jquery.com/prepend/)\n * - [`prop()`](http://api.jquery.com/prop/)\n * - [`ready()`](http://api.jquery.com/ready/)\n * - [`remove()`](http://api.jquery.com/remove/)\n * - [`removeAttr()`](http://api.jquery.com/removeAttr/)\n * - [`removeClass()`](http://api.jquery.com/removeClass/) - Does not support a function as first argument\n * - [`removeData()`](http://api.jquery.com/removeData/)\n * - [`replaceWith()`](http://api.jquery.com/replaceWith/)\n * - [`text()`](http://api.jquery.com/text/)\n * - [`toggleClass()`](http://api.jquery.com/toggleClass/) - Does not support a function as first argument\n * - [`triggerHandler()`](http://api.jquery.com/triggerHandler/) - Passes a dummy event object to handlers\n * - [`unbind()`](http://api.jquery.com/unbind/) - Does not support namespaces or event object as parameter\n * - [`val()`](http://api.jquery.com/val/)\n * - [`wrap()`](http://api.jquery.com/wrap/)\n *\n * ## jQuery/jqLite Extras\n * Angular also provides the following additional methods and events to both jQuery and jqLite:\n *\n * ### Events\n * - `$destroy` - AngularJS intercepts all jqLite/jQuery's DOM destruction apis and fires this event\n *    on all DOM nodes being removed.  This can be used to clean up any 3rd party bindings to the DOM\n *    element before it is removed.\n *\n * ### Methods\n * - `controller(name)` - retrieves the controller of the current element or its parent. By default\n *   retrieves controller associated with the `ngController` directive. If `name` is provided as\n *   camelCase directive name, then the controller for this directive will be retrieved (e.g.\n *   `'ngModel'`).\n * - `injector()` - retrieves the injector of the current element or its parent.\n * - `scope()` - retrieves the {@link ng.$rootScope.Scope scope} of the current\n *   element or its parent. Requires {@link guide/production#disabling-debug-data Debug Data} to\n *   be enabled.\n * - `isolateScope()` - retrieves an isolate {@link ng.$rootScope.Scope scope} if one is attached directly to the\n *   current element. This getter should be used only on elements that contain a directive which starts a new isolate\n *   scope. Calling `scope()` on this element always returns the original non-isolate scope.\n *   Requires {@link guide/production#disabling-debug-data Debug Data} to be enabled.\n * - `inheritedData()` - same as `data()`, but walks up the DOM until a value is found or the top\n *   parent element is reached.\n *\n * @knownIssue You cannot spy on `angular.element` if you are using Jasmine version 1.x. See\n * https://github.com/angular/angular.js/issues/14251 for more information.\n *\n * @param {string|DOMElement} element HTML string or DOMElement to be wrapped into jQuery.\n * @returns {Object} jQuery object.\n */\n\nJQLite.expando = 'ng339';\n\nvar jqCache = JQLite.cache = {},\n    jqId = 1,\n    addEventListenerFn = function(element, type, fn) {\n      element.addEventListener(type, fn, false);\n    },\n    removeEventListenerFn = function(element, type, fn) {\n      element.removeEventListener(type, fn, false);\n    };\n\n/*\n * !!! This is an undocumented \"private\" function !!!\n */\nJQLite._data = function(node) {\n  //jQuery always returns an object on cache miss\n  return this.cache[node[this.expando]] || {};\n};\n\nfunction jqNextId() { return ++jqId; }\n\n\nvar SPECIAL_CHARS_REGEXP = /([\\:\\-\\_]+(.))/g;\nvar MOZ_HACK_REGEXP = /^moz([A-Z])/;\nvar MOUSE_EVENT_MAP= { mouseleave: \"mouseout\", mouseenter: \"mouseover\"};\nvar jqLiteMinErr = minErr('jqLite');\n\n/**\n * Converts snake_case to camelCase.\n * Also there is special case for Moz prefix starting with upper case letter.\n * @param name Name to normalize\n */\nfunction camelCase(name) {\n  return name.\n    replace(SPECIAL_CHARS_REGEXP, function(_, separator, letter, offset) {\n      return offset ? letter.toUpperCase() : letter;\n    }).\n    replace(MOZ_HACK_REGEXP, 'Moz$1');\n}\n\nvar SINGLE_TAG_REGEXP = /^<([\\w-]+)\\s*\\/?>(?:<\\/\\1>|)$/;\nvar HTML_REGEXP = /<|&#?\\w+;/;\nvar TAG_NAME_REGEXP = /<([\\w:-]+)/;\nvar XHTML_TAG_REGEXP = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\\w:-]+)[^>]*)\\/>/gi;\n\nvar wrapMap = {\n  'option': [1, '<select multiple=\"multiple\">', '</select>'],\n\n  'thead': [1, '<table>', '</table>'],\n  'col': [2, '<table><colgroup>', '</colgroup></table>'],\n  'tr': [2, '<table><tbody>', '</tbody></table>'],\n  'td': [3, '<table><tbody><tr>', '</tr></tbody></table>'],\n  '_default': [0, \"\", \"\"]\n};\n\nwrapMap.optgroup = wrapMap.option;\nwrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\nwrapMap.th = wrapMap.td;\n\n\nfunction jqLiteIsTextNode(html) {\n  return !HTML_REGEXP.test(html);\n}\n\nfunction jqLiteAcceptsData(node) {\n  // The window object can accept data but has no nodeType\n  // Otherwise we are only interested in elements (1) and documents (9)\n  var nodeType = node.nodeType;\n  return nodeType === NODE_TYPE_ELEMENT || !nodeType || nodeType === NODE_TYPE_DOCUMENT;\n}\n\nfunction jqLiteHasData(node) {\n  for (var key in jqCache[node.ng339]) {\n    return true;\n  }\n  return false;\n}\n\nfunction jqLiteCleanData(nodes) {\n  for (var i = 0, ii = nodes.length; i < ii; i++) {\n    jqLiteRemoveData(nodes[i]);\n  }\n}\n\nfunction jqLiteBuildFragment(html, context) {\n  var tmp, tag, wrap,\n      fragment = context.createDocumentFragment(),\n      nodes = [], i;\n\n  if (jqLiteIsTextNode(html)) {\n    // Convert non-html into a text node\n    nodes.push(context.createTextNode(html));\n  } else {\n    // Convert html into DOM nodes\n    tmp = fragment.appendChild(context.createElement(\"div\"));\n    tag = (TAG_NAME_REGEXP.exec(html) || [\"\", \"\"])[1].toLowerCase();\n    wrap = wrapMap[tag] || wrapMap._default;\n    tmp.innerHTML = wrap[1] + html.replace(XHTML_TAG_REGEXP, \"<$1></$2>\") + wrap[2];\n\n    // Descend through wrappers to the right content\n    i = wrap[0];\n    while (i--) {\n      tmp = tmp.lastChild;\n    }\n\n    nodes = concat(nodes, tmp.childNodes);\n\n    tmp = fragment.firstChild;\n    tmp.textContent = \"\";\n  }\n\n  // Remove wrapper from fragment\n  fragment.textContent = \"\";\n  fragment.innerHTML = \"\"; // Clear inner HTML\n  forEach(nodes, function(node) {\n    fragment.appendChild(node);\n  });\n\n  return fragment;\n}\n\nfunction jqLiteParseHTML(html, context) {\n  context = context || window.document;\n  var parsed;\n\n  if ((parsed = SINGLE_TAG_REGEXP.exec(html))) {\n    return [context.createElement(parsed[1])];\n  }\n\n  if ((parsed = jqLiteBuildFragment(html, context))) {\n    return parsed.childNodes;\n  }\n\n  return [];\n}\n\nfunction jqLiteWrapNode(node, wrapper) {\n  var parent = node.parentNode;\n\n  if (parent) {\n    parent.replaceChild(wrapper, node);\n  }\n\n  wrapper.appendChild(node);\n}\n\n\n// IE9-11 has no method \"contains\" in SVG element and in Node.prototype. Bug #10259.\nvar jqLiteContains = window.Node.prototype.contains || function(arg) {\n  // jshint bitwise: false\n  return !!(this.compareDocumentPosition(arg) & 16);\n  // jshint bitwise: true\n};\n\n/////////////////////////////////////////////\nfunction JQLite(element) {\n  if (element instanceof JQLite) {\n    return element;\n  }\n\n  var argIsString;\n\n  if (isString(element)) {\n    element = trim(element);\n    argIsString = true;\n  }\n  if (!(this instanceof JQLite)) {\n    if (argIsString && element.charAt(0) != '<') {\n      throw jqLiteMinErr('nosel', 'Looking up elements via selectors is not supported by jqLite! See: http://docs.angularjs.org/api/angular.element');\n    }\n    return new JQLite(element);\n  }\n\n  if (argIsString) {\n    jqLiteAddNodes(this, jqLiteParseHTML(element));\n  } else {\n    jqLiteAddNodes(this, element);\n  }\n}\n\nfunction jqLiteClone(element) {\n  return element.cloneNode(true);\n}\n\nfunction jqLiteDealoc(element, onlyDescendants) {\n  if (!onlyDescendants) jqLiteRemoveData(element);\n\n  if (element.querySelectorAll) {\n    var descendants = element.querySelectorAll('*');\n    for (var i = 0, l = descendants.length; i < l; i++) {\n      jqLiteRemoveData(descendants[i]);\n    }\n  }\n}\n\nfunction jqLiteOff(element, type, fn, unsupported) {\n  if (isDefined(unsupported)) throw jqLiteMinErr('offargs', 'jqLite#off() does not support the `selector` argument');\n\n  var expandoStore = jqLiteExpandoStore(element);\n  var events = expandoStore && expandoStore.events;\n  var handle = expandoStore && expandoStore.handle;\n\n  if (!handle) return; //no listeners registered\n\n  if (!type) {\n    for (type in events) {\n      if (type !== '$destroy') {\n        removeEventListenerFn(element, type, handle);\n      }\n      delete events[type];\n    }\n  } else {\n\n    var removeHandler = function(type) {\n      var listenerFns = events[type];\n      if (isDefined(fn)) {\n        arrayRemove(listenerFns || [], fn);\n      }\n      if (!(isDefined(fn) && listenerFns && listenerFns.length > 0)) {\n        removeEventListenerFn(element, type, handle);\n        delete events[type];\n      }\n    };\n\n    forEach(type.split(' '), function(type) {\n      removeHandler(type);\n      if (MOUSE_EVENT_MAP[type]) {\n        removeHandler(MOUSE_EVENT_MAP[type]);\n      }\n    });\n  }\n}\n\nfunction jqLiteRemoveData(element, name) {\n  var expandoId = element.ng339;\n  var expandoStore = expandoId && jqCache[expandoId];\n\n  if (expandoStore) {\n    if (name) {\n      delete expandoStore.data[name];\n      return;\n    }\n\n    if (expandoStore.handle) {\n      if (expandoStore.events.$destroy) {\n        expandoStore.handle({}, '$destroy');\n      }\n      jqLiteOff(element);\n    }\n    delete jqCache[expandoId];\n    element.ng339 = undefined; // don't delete DOM expandos. IE and Chrome don't like it\n  }\n}\n\n\nfunction jqLiteExpandoStore(element, createIfNecessary) {\n  var expandoId = element.ng339,\n      expandoStore = expandoId && jqCache[expandoId];\n\n  if (createIfNecessary && !expandoStore) {\n    element.ng339 = expandoId = jqNextId();\n    expandoStore = jqCache[expandoId] = {events: {}, data: {}, handle: undefined};\n  }\n\n  return expandoStore;\n}\n\n\nfunction jqLiteData(element, key, value) {\n  if (jqLiteAcceptsData(element)) {\n\n    var isSimpleSetter = isDefined(value);\n    var isSimpleGetter = !isSimpleSetter && key && !isObject(key);\n    var massGetter = !key;\n    var expandoStore = jqLiteExpandoStore(element, !isSimpleGetter);\n    var data = expandoStore && expandoStore.data;\n\n    if (isSimpleSetter) { // data('key', value)\n      data[key] = value;\n    } else {\n      if (massGetter) {  // data()\n        return data;\n      } else {\n        if (isSimpleGetter) { // data('key')\n          // don't force creation of expandoStore if it doesn't exist yet\n          return data && data[key];\n        } else { // mass-setter: data({key1: val1, key2: val2})\n          extend(data, key);\n        }\n      }\n    }\n  }\n}\n\nfunction jqLiteHasClass(element, selector) {\n  if (!element.getAttribute) return false;\n  return ((\" \" + (element.getAttribute('class') || '') + \" \").replace(/[\\n\\t]/g, \" \").\n      indexOf(\" \" + selector + \" \") > -1);\n}\n\nfunction jqLiteRemoveClass(element, cssClasses) {\n  if (cssClasses && element.setAttribute) {\n    forEach(cssClasses.split(' '), function(cssClass) {\n      element.setAttribute('class', trim(\n          (\" \" + (element.getAttribute('class') || '') + \" \")\n          .replace(/[\\n\\t]/g, \" \")\n          .replace(\" \" + trim(cssClass) + \" \", \" \"))\n      );\n    });\n  }\n}\n\nfunction jqLiteAddClass(element, cssClasses) {\n  if (cssClasses && element.setAttribute) {\n    var existingClasses = (' ' + (element.getAttribute('class') || '') + ' ')\n                            .replace(/[\\n\\t]/g, \" \");\n\n    forEach(cssClasses.split(' '), function(cssClass) {\n      cssClass = trim(cssClass);\n      if (existingClasses.indexOf(' ' + cssClass + ' ') === -1) {\n        existingClasses += cssClass + ' ';\n      }\n    });\n\n    element.setAttribute('class', trim(existingClasses));\n  }\n}\n\n\nfunction jqLiteAddNodes(root, elements) {\n  // THIS CODE IS VERY HOT. Don't make changes without benchmarking.\n\n  if (elements) {\n\n    // if a Node (the most common case)\n    if (elements.nodeType) {\n      root[root.length++] = elements;\n    } else {\n      var length = elements.length;\n\n      // if an Array or NodeList and not a Window\n      if (typeof length === 'number' && elements.window !== elements) {\n        if (length) {\n          for (var i = 0; i < length; i++) {\n            root[root.length++] = elements[i];\n          }\n        }\n      } else {\n        root[root.length++] = elements;\n      }\n    }\n  }\n}\n\n\nfunction jqLiteController(element, name) {\n  return jqLiteInheritedData(element, '$' + (name || 'ngController') + 'Controller');\n}\n\nfunction jqLiteInheritedData(element, name, value) {\n  // if element is the document object work with the html element instead\n  // this makes $(document).scope() possible\n  if (element.nodeType == NODE_TYPE_DOCUMENT) {\n    element = element.documentElement;\n  }\n  var names = isArray(name) ? name : [name];\n\n  while (element) {\n    for (var i = 0, ii = names.length; i < ii; i++) {\n      if (isDefined(value = jqLite.data(element, names[i]))) return value;\n    }\n\n    // If dealing with a document fragment node with a host element, and no parent, use the host\n    // element as the parent. This enables directives within a Shadow DOM or polyfilled Shadow DOM\n    // to lookup parent controllers.\n    element = element.parentNode || (element.nodeType === NODE_TYPE_DOCUMENT_FRAGMENT && element.host);\n  }\n}\n\nfunction jqLiteEmpty(element) {\n  jqLiteDealoc(element, true);\n  while (element.firstChild) {\n    element.removeChild(element.firstChild);\n  }\n}\n\nfunction jqLiteRemove(element, keepData) {\n  if (!keepData) jqLiteDealoc(element);\n  var parent = element.parentNode;\n  if (parent) parent.removeChild(element);\n}\n\n\nfunction jqLiteDocumentLoaded(action, win) {\n  win = win || window;\n  if (win.document.readyState === 'complete') {\n    // Force the action to be run async for consistent behavior\n    // from the action's point of view\n    // i.e. it will definitely not be in a $apply\n    win.setTimeout(action);\n  } else {\n    // No need to unbind this handler as load is only ever called once\n    jqLite(win).on('load', action);\n  }\n}\n\n//////////////////////////////////////////\n// Functions which are declared directly.\n//////////////////////////////////////////\nvar JQLitePrototype = JQLite.prototype = {\n  ready: function(fn) {\n    var fired = false;\n\n    function trigger() {\n      if (fired) return;\n      fired = true;\n      fn();\n    }\n\n    // check if document is already loaded\n    if (window.document.readyState === 'complete') {\n      window.setTimeout(trigger);\n    } else {\n      this.on('DOMContentLoaded', trigger); // works for modern browsers and IE9\n      // we can not use jqLite since we are not done loading and jQuery could be loaded later.\n      // jshint -W064\n      JQLite(window).on('load', trigger); // fallback to window.onload for others\n      // jshint +W064\n    }\n  },\n  toString: function() {\n    var value = [];\n    forEach(this, function(e) { value.push('' + e);});\n    return '[' + value.join(', ') + ']';\n  },\n\n  eq: function(index) {\n      return (index >= 0) ? jqLite(this[index]) : jqLite(this[this.length + index]);\n  },\n\n  length: 0,\n  push: push,\n  sort: [].sort,\n  splice: [].splice\n};\n\n//////////////////////////////////////////\n// Functions iterating getter/setters.\n// these functions return self on setter and\n// value on get.\n//////////////////////////////////////////\nvar BOOLEAN_ATTR = {};\nforEach('multiple,selected,checked,disabled,readOnly,required,open'.split(','), function(value) {\n  BOOLEAN_ATTR[lowercase(value)] = value;\n});\nvar BOOLEAN_ELEMENTS = {};\nforEach('input,select,option,textarea,button,form,details'.split(','), function(value) {\n  BOOLEAN_ELEMENTS[value] = true;\n});\nvar ALIASED_ATTR = {\n  'ngMinlength': 'minlength',\n  'ngMaxlength': 'maxlength',\n  'ngMin': 'min',\n  'ngMax': 'max',\n  'ngPattern': 'pattern'\n};\n\nfunction getBooleanAttrName(element, name) {\n  // check dom last since we will most likely fail on name\n  var booleanAttr = BOOLEAN_ATTR[name.toLowerCase()];\n\n  // booleanAttr is here twice to minimize DOM access\n  return booleanAttr && BOOLEAN_ELEMENTS[nodeName_(element)] && booleanAttr;\n}\n\nfunction getAliasedAttrName(name) {\n  return ALIASED_ATTR[name];\n}\n\nforEach({\n  data: jqLiteData,\n  removeData: jqLiteRemoveData,\n  hasData: jqLiteHasData,\n  cleanData: jqLiteCleanData\n}, function(fn, name) {\n  JQLite[name] = fn;\n});\n\nforEach({\n  data: jqLiteData,\n  inheritedData: jqLiteInheritedData,\n\n  scope: function(element) {\n    // Can't use jqLiteData here directly so we stay compatible with jQuery!\n    return jqLite.data(element, '$scope') || jqLiteInheritedData(element.parentNode || element, ['$isolateScope', '$scope']);\n  },\n\n  isolateScope: function(element) {\n    // Can't use jqLiteData here directly so we stay compatible with jQuery!\n    return jqLite.data(element, '$isolateScope') || jqLite.data(element, '$isolateScopeNoTemplate');\n  },\n\n  controller: jqLiteController,\n\n  injector: function(element) {\n    return jqLiteInheritedData(element, '$injector');\n  },\n\n  removeAttr: function(element, name) {\n    element.removeAttribute(name);\n  },\n\n  hasClass: jqLiteHasClass,\n\n  css: function(element, name, value) {\n    name = camelCase(name);\n\n    if (isDefined(value)) {\n      element.style[name] = value;\n    } else {\n      return element.style[name];\n    }\n  },\n\n  attr: function(element, name, value) {\n    var nodeType = element.nodeType;\n    if (nodeType === NODE_TYPE_TEXT || nodeType === NODE_TYPE_ATTRIBUTE || nodeType === NODE_TYPE_COMMENT) {\n      return;\n    }\n    var lowercasedName = lowercase(name);\n    if (BOOLEAN_ATTR[lowercasedName]) {\n      if (isDefined(value)) {\n        if (!!value) {\n          element[name] = true;\n          element.setAttribute(name, lowercasedName);\n        } else {\n          element[name] = false;\n          element.removeAttribute(lowercasedName);\n        }\n      } else {\n        return (element[name] ||\n                 (element.attributes.getNamedItem(name) || noop).specified)\n               ? lowercasedName\n               : undefined;\n      }\n    } else if (isDefined(value)) {\n      element.setAttribute(name, value);\n    } else if (element.getAttribute) {\n      // the extra argument \"2\" is to get the right thing for a.href in IE, see jQuery code\n      // some elements (e.g. Document) don't have get attribute, so return undefined\n      var ret = element.getAttribute(name, 2);\n      // normalize non-existing attributes to undefined (as jQuery)\n      return ret === null ? undefined : ret;\n    }\n  },\n\n  prop: function(element, name, value) {\n    if (isDefined(value)) {\n      element[name] = value;\n    } else {\n      return element[name];\n    }\n  },\n\n  text: (function() {\n    getText.$dv = '';\n    return getText;\n\n    function getText(element, value) {\n      if (isUndefined(value)) {\n        var nodeType = element.nodeType;\n        return (nodeType === NODE_TYPE_ELEMENT || nodeType === NODE_TYPE_TEXT) ? element.textContent : '';\n      }\n      element.textContent = value;\n    }\n  })(),\n\n  val: function(element, value) {\n    if (isUndefined(value)) {\n      if (element.multiple && nodeName_(element) === 'select') {\n        var result = [];\n        forEach(element.options, function(option) {\n          if (option.selected) {\n            result.push(option.value || option.text);\n          }\n        });\n        return result.length === 0 ? null : result;\n      }\n      return element.value;\n    }\n    element.value = value;\n  },\n\n  html: function(element, value) {\n    if (isUndefined(value)) {\n      return element.innerHTML;\n    }\n    jqLiteDealoc(element, true);\n    element.innerHTML = value;\n  },\n\n  empty: jqLiteEmpty\n}, function(fn, name) {\n  /**\n   * Properties: writes return selection, reads return first value\n   */\n  JQLite.prototype[name] = function(arg1, arg2) {\n    var i, key;\n    var nodeCount = this.length;\n\n    // jqLiteHasClass has only two arguments, but is a getter-only fn, so we need to special-case it\n    // in a way that survives minification.\n    // jqLiteEmpty takes no arguments but is a setter.\n    if (fn !== jqLiteEmpty &&\n        (isUndefined((fn.length == 2 && (fn !== jqLiteHasClass && fn !== jqLiteController)) ? arg1 : arg2))) {\n      if (isObject(arg1)) {\n\n        // we are a write, but the object properties are the key/values\n        for (i = 0; i < nodeCount; i++) {\n          if (fn === jqLiteData) {\n            // data() takes the whole object in jQuery\n            fn(this[i], arg1);\n          } else {\n            for (key in arg1) {\n              fn(this[i], key, arg1[key]);\n            }\n          }\n        }\n        // return self for chaining\n        return this;\n      } else {\n        // we are a read, so read the first child.\n        // TODO: do we still need this?\n        var value = fn.$dv;\n        // Only if we have $dv do we iterate over all, otherwise it is just the first element.\n        var jj = (isUndefined(value)) ? Math.min(nodeCount, 1) : nodeCount;\n        for (var j = 0; j < jj; j++) {\n          var nodeValue = fn(this[j], arg1, arg2);\n          value = value ? value + nodeValue : nodeValue;\n        }\n        return value;\n      }\n    } else {\n      // we are a write, so apply to all children\n      for (i = 0; i < nodeCount; i++) {\n        fn(this[i], arg1, arg2);\n      }\n      // return self for chaining\n      return this;\n    }\n  };\n});\n\nfunction createEventHandler(element, events) {\n  var eventHandler = function(event, type) {\n    // jQuery specific api\n    event.isDefaultPrevented = function() {\n      return event.defaultPrevented;\n    };\n\n    var eventFns = events[type || event.type];\n    var eventFnsLength = eventFns ? eventFns.length : 0;\n\n    if (!eventFnsLength) return;\n\n    if (isUndefined(event.immediatePropagationStopped)) {\n      var originalStopImmediatePropagation = event.stopImmediatePropagation;\n      event.stopImmediatePropagation = function() {\n        event.immediatePropagationStopped = true;\n\n        if (event.stopPropagation) {\n          event.stopPropagation();\n        }\n\n        if (originalStopImmediatePropagation) {\n          originalStopImmediatePropagation.call(event);\n        }\n      };\n    }\n\n    event.isImmediatePropagationStopped = function() {\n      return event.immediatePropagationStopped === true;\n    };\n\n    // Some events have special handlers that wrap the real handler\n    var handlerWrapper = eventFns.specialHandlerWrapper || defaultHandlerWrapper;\n\n    // Copy event handlers in case event handlers array is modified during execution.\n    if ((eventFnsLength > 1)) {\n      eventFns = shallowCopy(eventFns);\n    }\n\n    for (var i = 0; i < eventFnsLength; i++) {\n      if (!event.isImmediatePropagationStopped()) {\n        handlerWrapper(element, event, eventFns[i]);\n      }\n    }\n  };\n\n  // TODO: this is a hack for angularMocks/clearDataCache that makes it possible to deregister all\n  //       events on `element`\n  eventHandler.elem = element;\n  return eventHandler;\n}\n\nfunction defaultHandlerWrapper(element, event, handler) {\n  handler.call(element, event);\n}\n\nfunction specialMouseHandlerWrapper(target, event, handler) {\n  // Refer to jQuery's implementation of mouseenter & mouseleave\n  // Read about mouseenter and mouseleave:\n  // http://www.quirksmode.org/js/events_mouse.html#link8\n  var related = event.relatedTarget;\n  // For mousenter/leave call the handler if related is outside the target.\n  // NB: No relatedTarget if the mouse left/entered the browser window\n  if (!related || (related !== target && !jqLiteContains.call(target, related))) {\n    handler.call(target, event);\n  }\n}\n\n//////////////////////////////////////////\n// Functions iterating traversal.\n// These functions chain results into a single\n// selector.\n//////////////////////////////////////////\nforEach({\n  removeData: jqLiteRemoveData,\n\n  on: function jqLiteOn(element, type, fn, unsupported) {\n    if (isDefined(unsupported)) throw jqLiteMinErr('onargs', 'jqLite#on() does not support the `selector` or `eventData` parameters');\n\n    // Do not add event handlers to non-elements because they will not be cleaned up.\n    if (!jqLiteAcceptsData(element)) {\n      return;\n    }\n\n    var expandoStore = jqLiteExpandoStore(element, true);\n    var events = expandoStore.events;\n    var handle = expandoStore.handle;\n\n    if (!handle) {\n      handle = expandoStore.handle = createEventHandler(element, events);\n    }\n\n    // http://jsperf.com/string-indexof-vs-split\n    var types = type.indexOf(' ') >= 0 ? type.split(' ') : [type];\n    var i = types.length;\n\n    var addHandler = function(type, specialHandlerWrapper, noEventListener) {\n      var eventFns = events[type];\n\n      if (!eventFns) {\n        eventFns = events[type] = [];\n        eventFns.specialHandlerWrapper = specialHandlerWrapper;\n        if (type !== '$destroy' && !noEventListener) {\n          addEventListenerFn(element, type, handle);\n        }\n      }\n\n      eventFns.push(fn);\n    };\n\n    while (i--) {\n      type = types[i];\n      if (MOUSE_EVENT_MAP[type]) {\n        addHandler(MOUSE_EVENT_MAP[type], specialMouseHandlerWrapper);\n        addHandler(type, undefined, true);\n      } else {\n        addHandler(type);\n      }\n    }\n  },\n\n  off: jqLiteOff,\n\n  one: function(element, type, fn) {\n    element = jqLite(element);\n\n    //add the listener twice so that when it is called\n    //you can remove the original function and still be\n    //able to call element.off(ev, fn) normally\n    element.on(type, function onFn() {\n      element.off(type, fn);\n      element.off(type, onFn);\n    });\n    element.on(type, fn);\n  },\n\n  replaceWith: function(element, replaceNode) {\n    var index, parent = element.parentNode;\n    jqLiteDealoc(element);\n    forEach(new JQLite(replaceNode), function(node) {\n      if (index) {\n        parent.insertBefore(node, index.nextSibling);\n      } else {\n        parent.replaceChild(node, element);\n      }\n      index = node;\n    });\n  },\n\n  children: function(element) {\n    var children = [];\n    forEach(element.childNodes, function(element) {\n      if (element.nodeType === NODE_TYPE_ELEMENT) {\n        children.push(element);\n      }\n    });\n    return children;\n  },\n\n  contents: function(element) {\n    return element.contentDocument || element.childNodes || [];\n  },\n\n  append: function(element, node) {\n    var nodeType = element.nodeType;\n    if (nodeType !== NODE_TYPE_ELEMENT && nodeType !== NODE_TYPE_DOCUMENT_FRAGMENT) return;\n\n    node = new JQLite(node);\n\n    for (var i = 0, ii = node.length; i < ii; i++) {\n      var child = node[i];\n      element.appendChild(child);\n    }\n  },\n\n  prepend: function(element, node) {\n    if (element.nodeType === NODE_TYPE_ELEMENT) {\n      var index = element.firstChild;\n      forEach(new JQLite(node), function(child) {\n        element.insertBefore(child, index);\n      });\n    }\n  },\n\n  wrap: function(element, wrapNode) {\n    jqLiteWrapNode(element, jqLite(wrapNode).eq(0).clone()[0]);\n  },\n\n  remove: jqLiteRemove,\n\n  detach: function(element) {\n    jqLiteRemove(element, true);\n  },\n\n  after: function(element, newElement) {\n    var index = element, parent = element.parentNode;\n    newElement = new JQLite(newElement);\n\n    for (var i = 0, ii = newElement.length; i < ii; i++) {\n      var node = newElement[i];\n      parent.insertBefore(node, index.nextSibling);\n      index = node;\n    }\n  },\n\n  addClass: jqLiteAddClass,\n  removeClass: jqLiteRemoveClass,\n\n  toggleClass: function(element, selector, condition) {\n    if (selector) {\n      forEach(selector.split(' '), function(className) {\n        var classCondition = condition;\n        if (isUndefined(classCondition)) {\n          classCondition = !jqLiteHasClass(element, className);\n        }\n        (classCondition ? jqLiteAddClass : jqLiteRemoveClass)(element, className);\n      });\n    }\n  },\n\n  parent: function(element) {\n    var parent = element.parentNode;\n    return parent && parent.nodeType !== NODE_TYPE_DOCUMENT_FRAGMENT ? parent : null;\n  },\n\n  next: function(element) {\n    return element.nextElementSibling;\n  },\n\n  find: function(element, selector) {\n    if (element.getElementsByTagName) {\n      return element.getElementsByTagName(selector);\n    } else {\n      return [];\n    }\n  },\n\n  clone: jqLiteClone,\n\n  triggerHandler: function(element, event, extraParameters) {\n\n    var dummyEvent, eventFnsCopy, handlerArgs;\n    var eventName = event.type || event;\n    var expandoStore = jqLiteExpandoStore(element);\n    var events = expandoStore && expandoStore.events;\n    var eventFns = events && events[eventName];\n\n    if (eventFns) {\n      // Create a dummy event to pass to the handlers\n      dummyEvent = {\n        preventDefault: function() { this.defaultPrevented = true; },\n        isDefaultPrevented: function() { return this.defaultPrevented === true; },\n        stopImmediatePropagation: function() { this.immediatePropagationStopped = true; },\n        isImmediatePropagationStopped: function() { return this.immediatePropagationStopped === true; },\n        stopPropagation: noop,\n        type: eventName,\n        target: element\n      };\n\n      // If a custom event was provided then extend our dummy event with it\n      if (event.type) {\n        dummyEvent = extend(dummyEvent, event);\n      }\n\n      // Copy event handlers in case event handlers array is modified during execution.\n      eventFnsCopy = shallowCopy(eventFns);\n      handlerArgs = extraParameters ? [dummyEvent].concat(extraParameters) : [dummyEvent];\n\n      forEach(eventFnsCopy, function(fn) {\n        if (!dummyEvent.isImmediatePropagationStopped()) {\n          fn.apply(element, handlerArgs);\n        }\n      });\n    }\n  }\n}, function(fn, name) {\n  /**\n   * chaining functions\n   */\n  JQLite.prototype[name] = function(arg1, arg2, arg3) {\n    var value;\n\n    for (var i = 0, ii = this.length; i < ii; i++) {\n      if (isUndefined(value)) {\n        value = fn(this[i], arg1, arg2, arg3);\n        if (isDefined(value)) {\n          // any function which returns a value needs to be wrapped\n          value = jqLite(value);\n        }\n      } else {\n        jqLiteAddNodes(value, fn(this[i], arg1, arg2, arg3));\n      }\n    }\n    return isDefined(value) ? value : this;\n  };\n\n  // bind legacy bind/unbind to on/off\n  JQLite.prototype.bind = JQLite.prototype.on;\n  JQLite.prototype.unbind = JQLite.prototype.off;\n});\n\n\n// Provider for private $$jqLite service\nfunction $$jqLiteProvider() {\n  this.$get = function $$jqLite() {\n    return extend(JQLite, {\n      hasClass: function(node, classes) {\n        if (node.attr) node = node[0];\n        return jqLiteHasClass(node, classes);\n      },\n      addClass: function(node, classes) {\n        if (node.attr) node = node[0];\n        return jqLiteAddClass(node, classes);\n      },\n      removeClass: function(node, classes) {\n        if (node.attr) node = node[0];\n        return jqLiteRemoveClass(node, classes);\n      }\n    });\n  };\n}\n\n/**\n * Computes a hash of an 'obj'.\n * Hash of a:\n *  string is string\n *  number is number as string\n *  object is either result of calling $$hashKey function on the object or uniquely generated id,\n *         that is also assigned to the $$hashKey property of the object.\n *\n * @param obj\n * @returns {string} hash string such that the same input will have the same hash string.\n *         The resulting string key is in 'type:hashKey' format.\n */\nfunction hashKey(obj, nextUidFn) {\n  var key = obj && obj.$$hashKey;\n\n  if (key) {\n    if (typeof key === 'function') {\n      key = obj.$$hashKey();\n    }\n    return key;\n  }\n\n  var objType = typeof obj;\n  if (objType == 'function' || (objType == 'object' && obj !== null)) {\n    key = obj.$$hashKey = objType + ':' + (nextUidFn || nextUid)();\n  } else {\n    key = objType + ':' + obj;\n  }\n\n  return key;\n}\n\n/**\n * HashMap which can use objects as keys\n */\nfunction HashMap(array, isolatedUid) {\n  if (isolatedUid) {\n    var uid = 0;\n    this.nextUid = function() {\n      return ++uid;\n    };\n  }\n  forEach(array, this.put, this);\n}\nHashMap.prototype = {\n  /**\n   * Store key value pair\n   * @param key key to store can be any type\n   * @param value value to store can be any type\n   */\n  put: function(key, value) {\n    this[hashKey(key, this.nextUid)] = value;\n  },\n\n  /**\n   * @param key\n   * @returns {Object} the value for the key\n   */\n  get: function(key) {\n    return this[hashKey(key, this.nextUid)];\n  },\n\n  /**\n   * Remove the key/value pair\n   * @param key\n   */\n  remove: function(key) {\n    var value = this[key = hashKey(key, this.nextUid)];\n    delete this[key];\n    return value;\n  }\n};\n\nvar $$HashMapProvider = [function() {\n  this.$get = [function() {\n    return HashMap;\n  }];\n}];\n\n/**\n * @ngdoc function\n * @module ng\n * @name angular.injector\n * @kind function\n *\n * @description\n * Creates an injector object that can be used for retrieving services as well as for\n * dependency injection (see {@link guide/di dependency injection}).\n *\n * @param {Array.<string|Function>} modules A list of module functions or their aliases. See\n *     {@link angular.module}. The `ng` module must be explicitly added.\n * @param {boolean=} [strictDi=false] Whether the injector should be in strict mode, which\n *     disallows argument name annotation inference.\n * @returns {injector} Injector object. See {@link auto.$injector $injector}.\n *\n * @example\n * Typical usage\n * ```js\n *   // create an injector\n *   var $injector = angular.injector(['ng']);\n *\n *   // use the injector to kick off your application\n *   // use the type inference to auto inject arguments, or use implicit injection\n *   $injector.invoke(function($rootScope, $compile, $document) {\n *     $compile($document)($rootScope);\n *     $rootScope.$digest();\n *   });\n * ```\n *\n * Sometimes you want to get access to the injector of a currently running Angular app\n * from outside Angular. Perhaps, you want to inject and compile some markup after the\n * application has been bootstrapped. You can do this using the extra `injector()` added\n * to JQuery/jqLite elements. See {@link angular.element}.\n *\n * *This is fairly rare but could be the case if a third party library is injecting the\n * markup.*\n *\n * In the following example a new block of HTML containing a `ng-controller`\n * directive is added to the end of the document body by JQuery. We then compile and link\n * it into the current AngularJS scope.\n *\n * ```js\n * var $div = $('<div ng-controller=\"MyCtrl\">{{content.label}}</div>');\n * $(document.body).append($div);\n *\n * angular.element(document).injector().invoke(function($compile) {\n *   var scope = angular.element($div).scope();\n *   $compile($div)(scope);\n * });\n * ```\n */\n\n\n/**\n * @ngdoc module\n * @name auto\n * @installation\n * @description\n *\n * Implicit module which gets automatically added to each {@link auto.$injector $injector}.\n */\n\nvar ARROW_ARG = /^([^\\(]+?)=>/;\nvar FN_ARGS = /^[^\\(]*\\(\\s*([^\\)]*)\\)/m;\nvar FN_ARG_SPLIT = /,/;\nvar FN_ARG = /^\\s*(_?)(\\S+?)\\1\\s*$/;\nvar STRIP_COMMENTS = /((\\/\\/.*$)|(\\/\\*[\\s\\S]*?\\*\\/))/mg;\nvar $injectorMinErr = minErr('$injector');\n\nfunction stringifyFn(fn) {\n  // Support: Chrome 50-51 only\n  // Creating a new string by adding `' '` at the end, to hack around some bug in Chrome v50/51\n  // (See https://github.com/angular/angular.js/issues/14487.)\n  // TODO (gkalpak): Remove workaround when Chrome v52 is released\n  return Function.prototype.toString.call(fn) + ' ';\n}\n\nfunction extractArgs(fn) {\n  var fnText = stringifyFn(fn).replace(STRIP_COMMENTS, ''),\n      args = fnText.match(ARROW_ARG) || fnText.match(FN_ARGS);\n  return args;\n}\n\nfunction anonFn(fn) {\n  // For anonymous functions, showing at the very least the function signature can help in\n  // debugging.\n  var args = extractArgs(fn);\n  if (args) {\n    return 'function(' + (args[1] || '').replace(/[\\s\\r\\n]+/, ' ') + ')';\n  }\n  return 'fn';\n}\n\nfunction annotate(fn, strictDi, name) {\n  var $inject,\n      argDecl,\n      last;\n\n  if (typeof fn === 'function') {\n    if (!($inject = fn.$inject)) {\n      $inject = [];\n      if (fn.length) {\n        if (strictDi) {\n          if (!isString(name) || !name) {\n            name = fn.name || anonFn(fn);\n          }\n          throw $injectorMinErr('strictdi',\n            '{0} is not using explicit annotation and cannot be invoked in strict mode', name);\n        }\n        argDecl = extractArgs(fn);\n        forEach(argDecl[1].split(FN_ARG_SPLIT), function(arg) {\n          arg.replace(FN_ARG, function(all, underscore, name) {\n            $inject.push(name);\n          });\n        });\n      }\n      fn.$inject = $inject;\n    }\n  } else if (isArray(fn)) {\n    last = fn.length - 1;\n    assertArgFn(fn[last], 'fn');\n    $inject = fn.slice(0, last);\n  } else {\n    assertArgFn(fn, 'fn', true);\n  }\n  return $inject;\n}\n\n///////////////////////////////////////\n\n/**\n * @ngdoc service\n * @name $injector\n *\n * @description\n *\n * `$injector` is used to retrieve object instances as defined by\n * {@link auto.$provide provider}, instantiate types, invoke methods,\n * and load modules.\n *\n * The following always holds true:\n *\n * ```js\n *   var $injector = angular.injector();\n *   expect($injector.get('$injector')).toBe($injector);\n *   expect($injector.invoke(function($injector) {\n *     return $injector;\n *   })).toBe($injector);\n * ```\n *\n * # Injection Function Annotation\n *\n * JavaScript does not have annotations, and annotations are needed for dependency injection. The\n * following are all valid ways of annotating function with injection arguments and are equivalent.\n *\n * ```js\n *   // inferred (only works if code not minified/obfuscated)\n *   $injector.invoke(function(serviceA){});\n *\n *   // annotated\n *   function explicit(serviceA) {};\n *   explicit.$inject = ['serviceA'];\n *   $injector.invoke(explicit);\n *\n *   // inline\n *   $injector.invoke(['serviceA', function(serviceA){}]);\n * ```\n *\n * ## Inference\n *\n * In JavaScript calling `toString()` on a function returns the function definition. The definition\n * can then be parsed and the function arguments can be extracted. This method of discovering\n * annotations is disallowed when the injector is in strict mode.\n * *NOTE:* This does not work with minification, and obfuscation tools since these tools change the\n * argument names.\n *\n * ## `$inject` Annotation\n * By adding an `$inject` property onto a function the injection parameters can be specified.\n *\n * ## Inline\n * As an array of injection names, where the last item in the array is the function to call.\n */\n\n/**\n * @ngdoc method\n * @name $injector#get\n *\n * @description\n * Return an instance of the service.\n *\n * @param {string} name The name of the instance to retrieve.\n * @param {string=} caller An optional string to provide the origin of the function call for error messages.\n * @return {*} The instance.\n */\n\n/**\n * @ngdoc method\n * @name $injector#invoke\n *\n * @description\n * Invoke the method and supply the method arguments from the `$injector`.\n *\n * @param {Function|Array.<string|Function>} fn The injectable function to invoke. Function parameters are\n *   injected according to the {@link guide/di $inject Annotation} rules.\n * @param {Object=} self The `this` for the invoked method.\n * @param {Object=} locals Optional object. If preset then any argument names are read from this\n *                         object first, before the `$injector` is consulted.\n * @returns {*} the value returned by the invoked `fn` function.\n */\n\n/**\n * @ngdoc method\n * @name $injector#has\n *\n * @description\n * Allows the user to query if the particular service exists.\n *\n * @param {string} name Name of the service to query.\n * @returns {boolean} `true` if injector has given service.\n */\n\n/**\n * @ngdoc method\n * @name $injector#instantiate\n * @description\n * Create a new instance of JS type. The method takes a constructor function, invokes the new\n * operator, and supplies all of the arguments to the constructor function as specified by the\n * constructor annotation.\n *\n * @param {Function} Type Annotated constructor function.\n * @param {Object=} locals Optional object. If preset then any argument names are read from this\n * object first, before the `$injector` is consulted.\n * @returns {Object} new instance of `Type`.\n */\n\n/**\n * @ngdoc method\n * @name $injector#annotate\n *\n * @description\n * Returns an array of service names which the function is requesting for injection. This API is\n * used by the injector to determine which services need to be injected into the function when the\n * function is invoked. There are three ways in which the function can be annotated with the needed\n * dependencies.\n *\n * # Argument names\n *\n * The simplest form is to extract the dependencies from the arguments of the function. This is done\n * by converting the function into a string using `toString()` method and extracting the argument\n * names.\n * ```js\n *   // Given\n *   function MyController($scope, $route) {\n *     // ...\n *   }\n *\n *   // Then\n *   expect(injector.annotate(MyController)).toEqual(['$scope', '$route']);\n * ```\n *\n * You can disallow this method by using strict injection mode.\n *\n * This method does not work with code minification / obfuscation. For this reason the following\n * annotation strategies are supported.\n *\n * # The `$inject` property\n *\n * If a function has an `$inject` property and its value is an array of strings, then the strings\n * represent names of services to be injected into the function.\n * ```js\n *   // Given\n *   var MyController = function(obfuscatedScope, obfuscatedRoute) {\n *     // ...\n *   }\n *   // Define function dependencies\n *   MyController['$inject'] = ['$scope', '$route'];\n *\n *   // Then\n *   expect(injector.annotate(MyController)).toEqual(['$scope', '$route']);\n * ```\n *\n * # The array notation\n *\n * It is often desirable to inline Injected functions and that's when setting the `$inject` property\n * is very inconvenient. In these situations using the array notation to specify the dependencies in\n * a way that survives minification is a better choice:\n *\n * ```js\n *   // We wish to write this (not minification / obfuscation safe)\n *   injector.invoke(function($compile, $rootScope) {\n *     // ...\n *   });\n *\n *   // We are forced to write break inlining\n *   var tmpFn = function(obfuscatedCompile, obfuscatedRootScope) {\n *     // ...\n *   };\n *   tmpFn.$inject = ['$compile', '$rootScope'];\n *   injector.invoke(tmpFn);\n *\n *   // To better support inline function the inline annotation is supported\n *   injector.invoke(['$compile', '$rootScope', function(obfCompile, obfRootScope) {\n *     // ...\n *   }]);\n *\n *   // Therefore\n *   expect(injector.annotate(\n *      ['$compile', '$rootScope', function(obfus_$compile, obfus_$rootScope) {}])\n *    ).toEqual(['$compile', '$rootScope']);\n * ```\n *\n * @param {Function|Array.<string|Function>} fn Function for which dependent service names need to\n * be retrieved as described above.\n *\n * @param {boolean=} [strictDi=false] Disallow argument name annotation inference.\n *\n * @returns {Array.<string>} The names of the services which the function requires.\n */\n\n\n\n\n/**\n * @ngdoc service\n * @name $provide\n *\n * @description\n *\n * The {@link auto.$provide $provide} service has a number of methods for registering components\n * with the {@link auto.$injector $injector}. Many of these functions are also exposed on\n * {@link angular.Module}.\n *\n * An Angular **service** is a singleton object created by a **service factory**.  These **service\n * factories** are functions which, in turn, are created by a **service provider**.\n * The **service providers** are constructor functions. When instantiated they must contain a\n * property called `$get`, which holds the **service factory** function.\n *\n * When you request a service, the {@link auto.$injector $injector} is responsible for finding the\n * correct **service provider**, instantiating it and then calling its `$get` **service factory**\n * function to get the instance of the **service**.\n *\n * Often services have no configuration options and there is no need to add methods to the service\n * provider.  The provider will be no more than a constructor function with a `$get` property. For\n * these cases the {@link auto.$provide $provide} service has additional helper methods to register\n * services without specifying a provider.\n *\n * * {@link auto.$provide#provider provider(name, provider)} - registers a **service provider** with the\n *     {@link auto.$injector $injector}\n * * {@link auto.$provide#constant constant(name, obj)} - registers a value/object that can be accessed by\n *     providers and services.\n * * {@link auto.$provide#value value(name, obj)} - registers a value/object that can only be accessed by\n *     services, not providers.\n * * {@link auto.$provide#factory factory(name, fn)} - registers a service **factory function**\n *     that will be wrapped in a **service provider** object, whose `$get` property will contain the\n *     given factory function.\n * * {@link auto.$provide#service service(name, Fn)} - registers a **constructor function**\n *     that will be wrapped in a **service provider** object, whose `$get` property will instantiate\n *      a new object using the given constructor function.\n * * {@link auto.$provide#decorator decorator(name, decorFn)} - registers a **decorator function** that\n *      will be able to modify or replace the implementation of another service.\n *\n * See the individual methods for more information and examples.\n */\n\n/**\n * @ngdoc method\n * @name $provide#provider\n * @description\n *\n * Register a **provider function** with the {@link auto.$injector $injector}. Provider functions\n * are constructor functions, whose instances are responsible for \"providing\" a factory for a\n * service.\n *\n * Service provider names start with the name of the service they provide followed by `Provider`.\n * For example, the {@link ng.$log $log} service has a provider called\n * {@link ng.$logProvider $logProvider}.\n *\n * Service provider objects can have additional methods which allow configuration of the provider\n * and its service. Importantly, you can configure what kind of service is created by the `$get`\n * method, or how that service will act. For example, the {@link ng.$logProvider $logProvider} has a\n * method {@link ng.$logProvider#debugEnabled debugEnabled}\n * which lets you specify whether the {@link ng.$log $log} service will log debug messages to the\n * console or not.\n *\n * @param {string} name The name of the instance. NOTE: the provider will be available under `name +\n                        'Provider'` key.\n * @param {(Object|function())} provider If the provider is:\n *\n *   - `Object`: then it should have a `$get` method. The `$get` method will be invoked using\n *     {@link auto.$injector#invoke $injector.invoke()} when an instance needs to be created.\n *   - `Constructor`: a new instance of the provider will be created using\n *     {@link auto.$injector#instantiate $injector.instantiate()}, then treated as `object`.\n *\n * @returns {Object} registered provider instance\n\n * @example\n *\n * The following example shows how to create a simple event tracking service and register it using\n * {@link auto.$provide#provider $provide.provider()}.\n *\n * ```js\n *  // Define the eventTracker provider\n *  function EventTrackerProvider() {\n *    var trackingUrl = '/track';\n *\n *    // A provider method for configuring where the tracked events should been saved\n *    this.setTrackingUrl = function(url) {\n *      trackingUrl = url;\n *    };\n *\n *    // The service factory function\n *    this.$get = ['$http', function($http) {\n *      var trackedEvents = {};\n *      return {\n *        // Call this to track an event\n *        event: function(event) {\n *          var count = trackedEvents[event] || 0;\n *          count += 1;\n *          trackedEvents[event] = count;\n *          return count;\n *        },\n *        // Call this to save the tracked events to the trackingUrl\n *        save: function() {\n *          $http.post(trackingUrl, trackedEvents);\n *        }\n *      };\n *    }];\n *  }\n *\n *  describe('eventTracker', function() {\n *    var postSpy;\n *\n *    beforeEach(module(function($provide) {\n *      // Register the eventTracker provider\n *      $provide.provider('eventTracker', EventTrackerProvider);\n *    }));\n *\n *    beforeEach(module(function(eventTrackerProvider) {\n *      // Configure eventTracker provider\n *      eventTrackerProvider.setTrackingUrl('/custom-track');\n *    }));\n *\n *    it('tracks events', inject(function(eventTracker) {\n *      expect(eventTracker.event('login')).toEqual(1);\n *      expect(eventTracker.event('login')).toEqual(2);\n *    }));\n *\n *    it('saves to the tracking url', inject(function(eventTracker, $http) {\n *      postSpy = spyOn($http, 'post');\n *      eventTracker.event('login');\n *      eventTracker.save();\n *      expect(postSpy).toHaveBeenCalled();\n *      expect(postSpy.mostRecentCall.args[0]).not.toEqual('/track');\n *      expect(postSpy.mostRecentCall.args[0]).toEqual('/custom-track');\n *      expect(postSpy.mostRecentCall.args[1]).toEqual({ 'login': 1 });\n *    }));\n *  });\n * ```\n */\n\n/**\n * @ngdoc method\n * @name $provide#factory\n * @description\n *\n * Register a **service factory**, which will be called to return the service instance.\n * This is short for registering a service where its provider consists of only a `$get` property,\n * which is the given service factory function.\n * You should use {@link auto.$provide#factory $provide.factory(getFn)} if you do not need to\n * configure your service in a provider.\n *\n * @param {string} name The name of the instance.\n * @param {Function|Array.<string|Function>} $getFn The injectable $getFn for the instance creation.\n *                      Internally this is a short hand for `$provide.provider(name, {$get: $getFn})`.\n * @returns {Object} registered provider instance\n *\n * @example\n * Here is an example of registering a service\n * ```js\n *   $provide.factory('ping', ['$http', function($http) {\n *     return function ping() {\n *       return $http.send('/ping');\n *     };\n *   }]);\n * ```\n * You would then inject and use this service like this:\n * ```js\n *   someModule.controller('Ctrl', ['ping', function(ping) {\n *     ping();\n *   }]);\n * ```\n */\n\n\n/**\n * @ngdoc method\n * @name $provide#service\n * @description\n *\n * Register a **service constructor**, which will be invoked with `new` to create the service\n * instance.\n * This is short for registering a service where its provider's `$get` property is a factory\n * function that returns an instance instantiated by the injector from the service constructor\n * function.\n *\n * Internally it looks a bit like this:\n *\n * ```\n * {\n *   $get: function() {\n *     return $injector.instantiate(constructor);\n *   }\n * }\n * ```\n *\n *\n * You should use {@link auto.$provide#service $provide.service(class)} if you define your service\n * as a type/class.\n *\n * @param {string} name The name of the instance.\n * @param {Function|Array.<string|Function>} constructor An injectable class (constructor function)\n *     that will be instantiated.\n * @returns {Object} registered provider instance\n *\n * @example\n * Here is an example of registering a service using\n * {@link auto.$provide#service $provide.service(class)}.\n * ```js\n *   var Ping = function($http) {\n *     this.$http = $http;\n *   };\n *\n *   Ping.$inject = ['$http'];\n *\n *   Ping.prototype.send = function() {\n *     return this.$http.get('/ping');\n *   };\n *   $provide.service('ping', Ping);\n * ```\n * You would then inject and use this service like this:\n * ```js\n *   someModule.controller('Ctrl', ['ping', function(ping) {\n *     ping.send();\n *   }]);\n * ```\n */\n\n\n/**\n * @ngdoc method\n * @name $provide#value\n * @description\n *\n * Register a **value service** with the {@link auto.$injector $injector}, such as a string, a\n * number, an array, an object or a function. This is short for registering a service where its\n * provider's `$get` property is a factory function that takes no arguments and returns the **value\n * service**. That also means it is not possible to inject other services into a value service.\n *\n * Value services are similar to constant services, except that they cannot be injected into a\n * module configuration function (see {@link angular.Module#config}) but they can be overridden by\n * an Angular {@link auto.$provide#decorator decorator}.\n *\n * @param {string} name The name of the instance.\n * @param {*} value The value.\n * @returns {Object} registered provider instance\n *\n * @example\n * Here are some examples of creating value services.\n * ```js\n *   $provide.value('ADMIN_USER', 'admin');\n *\n *   $provide.value('RoleLookup', { admin: 0, writer: 1, reader: 2 });\n *\n *   $provide.value('halfOf', function(value) {\n *     return value / 2;\n *   });\n * ```\n */\n\n\n/**\n * @ngdoc method\n * @name $provide#constant\n * @description\n *\n * Register a **constant service** with the {@link auto.$injector $injector}, such as a string,\n * a number, an array, an object or a function. Like the {@link auto.$provide#value value}, it is not\n * possible to inject other services into a constant.\n *\n * But unlike {@link auto.$provide#value value}, a constant can be\n * injected into a module configuration function (see {@link angular.Module#config}) and it cannot\n * be overridden by an Angular {@link auto.$provide#decorator decorator}.\n *\n * @param {string} name The name of the constant.\n * @param {*} value The constant value.\n * @returns {Object} registered instance\n *\n * @example\n * Here a some examples of creating constants:\n * ```js\n *   $provide.constant('SHARD_HEIGHT', 306);\n *\n *   $provide.constant('MY_COLOURS', ['red', 'blue', 'grey']);\n *\n *   $provide.constant('double', function(value) {\n *     return value * 2;\n *   });\n * ```\n */\n\n\n/**\n * @ngdoc method\n * @name $provide#decorator\n * @description\n *\n * Register a **decorator function** with the {@link auto.$injector $injector}. A decorator function\n * intercepts the creation of a service, allowing it to override or modify the behavior of the\n * service. The return value of the decorator function may be the original service, or a new service\n * that replaces (or wraps and delegates to) the original service.\n *\n * You can find out more about using decorators in the {@link guide/decorators} guide.\n *\n * @param {string} name The name of the service to decorate.\n * @param {Function|Array.<string|Function>} decorator This function will be invoked when the service needs to be\n *    provided and should return the decorated service instance. The function is called using\n *    the {@link auto.$injector#invoke injector.invoke} method and is therefore fully injectable.\n *    Local injection arguments:\n *\n *    * `$delegate` - The original service instance, which can be replaced, monkey patched, configured,\n *      decorated or delegated to.\n *\n * @example\n * Here we decorate the {@link ng.$log $log} service to convert warnings to errors by intercepting\n * calls to {@link ng.$log#error $log.warn()}.\n * ```js\n *   $provide.decorator('$log', ['$delegate', function($delegate) {\n *     $delegate.warn = $delegate.error;\n *     return $delegate;\n *   }]);\n * ```\n */\n\n\nfunction createInjector(modulesToLoad, strictDi) {\n  strictDi = (strictDi === true);\n  var INSTANTIATING = {},\n      providerSuffix = 'Provider',\n      path = [],\n      loadedModules = new HashMap([], true),\n      providerCache = {\n        $provide: {\n            provider: supportObject(provider),\n            factory: supportObject(factory),\n            service: supportObject(service),\n            value: supportObject(value),\n            constant: supportObject(constant),\n            decorator: decorator\n          }\n      },\n      providerInjector = (providerCache.$injector =\n          createInternalInjector(providerCache, function(serviceName, caller) {\n            if (angular.isString(caller)) {\n              path.push(caller);\n            }\n            throw $injectorMinErr('unpr', \"Unknown provider: {0}\", path.join(' <- '));\n          })),\n      instanceCache = {},\n      protoInstanceInjector =\n          createInternalInjector(instanceCache, function(serviceName, caller) {\n            var provider = providerInjector.get(serviceName + providerSuffix, caller);\n            return instanceInjector.invoke(\n                provider.$get, provider, undefined, serviceName);\n          }),\n      instanceInjector = protoInstanceInjector;\n\n  providerCache['$injector' + providerSuffix] = { $get: valueFn(protoInstanceInjector) };\n  var runBlocks = loadModules(modulesToLoad);\n  instanceInjector = protoInstanceInjector.get('$injector');\n  instanceInjector.strictDi = strictDi;\n  forEach(runBlocks, function(fn) { if (fn) instanceInjector.invoke(fn); });\n\n  return instanceInjector;\n\n  ////////////////////////////////////\n  // $provider\n  ////////////////////////////////////\n\n  function supportObject(delegate) {\n    return function(key, value) {\n      if (isObject(key)) {\n        forEach(key, reverseParams(delegate));\n      } else {\n        return delegate(key, value);\n      }\n    };\n  }\n\n  function provider(name, provider_) {\n    assertNotHasOwnProperty(name, 'service');\n    if (isFunction(provider_) || isArray(provider_)) {\n      provider_ = providerInjector.instantiate(provider_);\n    }\n    if (!provider_.$get) {\n      throw $injectorMinErr('pget', \"Provider '{0}' must define $get factory method.\", name);\n    }\n    return providerCache[name + providerSuffix] = provider_;\n  }\n\n  function enforceReturnValue(name, factory) {\n    return function enforcedReturnValue() {\n      var result = instanceInjector.invoke(factory, this);\n      if (isUndefined(result)) {\n        throw $injectorMinErr('undef', \"Provider '{0}' must return a value from $get factory method.\", name);\n      }\n      return result;\n    };\n  }\n\n  function factory(name, factoryFn, enforce) {\n    return provider(name, {\n      $get: enforce !== false ? enforceReturnValue(name, factoryFn) : factoryFn\n    });\n  }\n\n  function service(name, constructor) {\n    return factory(name, ['$injector', function($injector) {\n      return $injector.instantiate(constructor);\n    }]);\n  }\n\n  function value(name, val) { return factory(name, valueFn(val), false); }\n\n  function constant(name, value) {\n    assertNotHasOwnProperty(name, 'constant');\n    providerCache[name] = value;\n    instanceCache[name] = value;\n  }\n\n  function decorator(serviceName, decorFn) {\n    var origProvider = providerInjector.get(serviceName + providerSuffix),\n        orig$get = origProvider.$get;\n\n    origProvider.$get = function() {\n      var origInstance = instanceInjector.invoke(orig$get, origProvider);\n      return instanceInjector.invoke(decorFn, null, {$delegate: origInstance});\n    };\n  }\n\n  ////////////////////////////////////\n  // Module Loading\n  ////////////////////////////////////\n  function loadModules(modulesToLoad) {\n    assertArg(isUndefined(modulesToLoad) || isArray(modulesToLoad), 'modulesToLoad', 'not an array');\n    var runBlocks = [], moduleFn;\n    forEach(modulesToLoad, function(module) {\n      if (loadedModules.get(module)) return;\n      loadedModules.put(module, true);\n\n      function runInvokeQueue(queue) {\n        var i, ii;\n        for (i = 0, ii = queue.length; i < ii; i++) {\n          var invokeArgs = queue[i],\n              provider = providerInjector.get(invokeArgs[0]);\n\n          provider[invokeArgs[1]].apply(provider, invokeArgs[2]);\n        }\n      }\n\n      try {\n        if (isString(module)) {\n          moduleFn = angularModule(module);\n          runBlocks = runBlocks.concat(loadModules(moduleFn.requires)).concat(moduleFn._runBlocks);\n          runInvokeQueue(moduleFn._invokeQueue);\n          runInvokeQueue(moduleFn._configBlocks);\n        } else if (isFunction(module)) {\n            runBlocks.push(providerInjector.invoke(module));\n        } else if (isArray(module)) {\n            runBlocks.push(providerInjector.invoke(module));\n        } else {\n          assertArgFn(module, 'module');\n        }\n      } catch (e) {\n        if (isArray(module)) {\n          module = module[module.length - 1];\n        }\n        if (e.message && e.stack && e.stack.indexOf(e.message) == -1) {\n          // Safari & FF's stack traces don't contain error.message content\n          // unlike those of Chrome and IE\n          // So if stack doesn't contain message, we create a new string that contains both.\n          // Since error.stack is read-only in Safari, I'm overriding e and not e.stack here.\n          /* jshint -W022 */\n          e = e.message + '\\n' + e.stack;\n        }\n        throw $injectorMinErr('modulerr', \"Failed to instantiate module {0} due to:\\n{1}\",\n                  module, e.stack || e.message || e);\n      }\n    });\n    return runBlocks;\n  }\n\n  ////////////////////////////////////\n  // internal Injector\n  ////////////////////////////////////\n\n  function createInternalInjector(cache, factory) {\n\n    function getService(serviceName, caller) {\n      if (cache.hasOwnProperty(serviceName)) {\n        if (cache[serviceName] === INSTANTIATING) {\n          throw $injectorMinErr('cdep', 'Circular dependency found: {0}',\n                    serviceName + ' <- ' + path.join(' <- '));\n        }\n        return cache[serviceName];\n      } else {\n        try {\n          path.unshift(serviceName);\n          cache[serviceName] = INSTANTIATING;\n          return cache[serviceName] = factory(serviceName, caller);\n        } catch (err) {\n          if (cache[serviceName] === INSTANTIATING) {\n            delete cache[serviceName];\n          }\n          throw err;\n        } finally {\n          path.shift();\n        }\n      }\n    }\n\n\n    function injectionArgs(fn, locals, serviceName) {\n      var args = [],\n          $inject = createInjector.$$annotate(fn, strictDi, serviceName);\n\n      for (var i = 0, length = $inject.length; i < length; i++) {\n        var key = $inject[i];\n        if (typeof key !== 'string') {\n          throw $injectorMinErr('itkn',\n                  'Incorrect injection token! Expected service name as string, got {0}', key);\n        }\n        args.push(locals && locals.hasOwnProperty(key) ? locals[key] :\n                                                         getService(key, serviceName));\n      }\n      return args;\n    }\n\n    function isClass(func) {\n      // IE 9-11 do not support classes and IE9 leaks with the code below.\n      if (msie <= 11) {\n        return false;\n      }\n      // Support: Edge 12-13 only\n      // See: https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/6156135/\n      return typeof func === 'function'\n        && /^(?:class\\b|constructor\\()/.test(stringifyFn(func));\n    }\n\n    function invoke(fn, self, locals, serviceName) {\n      if (typeof locals === 'string') {\n        serviceName = locals;\n        locals = null;\n      }\n\n      var args = injectionArgs(fn, locals, serviceName);\n      if (isArray(fn)) {\n        fn = fn[fn.length - 1];\n      }\n\n      if (!isClass(fn)) {\n        // http://jsperf.com/angularjs-invoke-apply-vs-switch\n        // #5388\n        return fn.apply(self, args);\n      } else {\n        args.unshift(null);\n        return new (Function.prototype.bind.apply(fn, args))();\n      }\n    }\n\n\n    function instantiate(Type, locals, serviceName) {\n      // Check if Type is annotated and use just the given function at n-1 as parameter\n      // e.g. someModule.factory('greeter', ['$window', function(renamed$window) {}]);\n      var ctor = (isArray(Type) ? Type[Type.length - 1] : Type);\n      var args = injectionArgs(Type, locals, serviceName);\n      // Empty object at position 0 is ignored for invocation with `new`, but required.\n      args.unshift(null);\n      return new (Function.prototype.bind.apply(ctor, args))();\n    }\n\n\n    return {\n      invoke: invoke,\n      instantiate: instantiate,\n      get: getService,\n      annotate: createInjector.$$annotate,\n      has: function(name) {\n        return providerCache.hasOwnProperty(name + providerSuffix) || cache.hasOwnProperty(name);\n      }\n    };\n  }\n}\n\ncreateInjector.$$annotate = annotate;\n\n/**\n * @ngdoc provider\n * @name $anchorScrollProvider\n *\n * @description\n * Use `$anchorScrollProvider` to disable automatic scrolling whenever\n * {@link ng.$location#hash $location.hash()} changes.\n */\nfunction $AnchorScrollProvider() {\n\n  var autoScrollingEnabled = true;\n\n  /**\n   * @ngdoc method\n   * @name $anchorScrollProvider#disableAutoScrolling\n   *\n   * @description\n   * By default, {@link ng.$anchorScroll $anchorScroll()} will automatically detect changes to\n   * {@link ng.$location#hash $location.hash()} and scroll to the element matching the new hash.<br />\n   * Use this method to disable automatic scrolling.\n   *\n   * If automatic scrolling is disabled, one must explicitly call\n   * {@link ng.$anchorScroll $anchorScroll()} in order to scroll to the element related to the\n   * current hash.\n   */\n  this.disableAutoScrolling = function() {\n    autoScrollingEnabled = false;\n  };\n\n  /**\n   * @ngdoc service\n   * @name $anchorScroll\n   * @kind function\n   * @requires $window\n   * @requires $location\n   * @requires $rootScope\n   *\n   * @description\n   * When called, it scrolls to the element related to the specified `hash` or (if omitted) to the\n   * current value of {@link ng.$location#hash $location.hash()}, according to the rules specified\n   * in the\n   * [HTML5 spec](http://www.w3.org/html/wg/drafts/html/master/browsers.html#an-indicated-part-of-the-document).\n   *\n   * It also watches the {@link ng.$location#hash $location.hash()} and automatically scrolls to\n   * match any anchor whenever it changes. This can be disabled by calling\n   * {@link ng.$anchorScrollProvider#disableAutoScrolling $anchorScrollProvider.disableAutoScrolling()}.\n   *\n   * Additionally, you can use its {@link ng.$anchorScroll#yOffset yOffset} property to specify a\n   * vertical scroll-offset (either fixed or dynamic).\n   *\n   * @param {string=} hash The hash specifying the element to scroll to. If omitted, the value of\n   *                       {@link ng.$location#hash $location.hash()} will be used.\n   *\n   * @property {(number|function|jqLite)} yOffset\n   * If set, specifies a vertical scroll-offset. This is often useful when there are fixed\n   * positioned elements at the top of the page, such as navbars, headers etc.\n   *\n   * `yOffset` can be specified in various ways:\n   * - **number**: A fixed number of pixels to be used as offset.<br /><br />\n   * - **function**: A getter function called everytime `$anchorScroll()` is executed. Must return\n   *   a number representing the offset (in pixels).<br /><br />\n   * - **jqLite**: A jqLite/jQuery element to be used for specifying the offset. The distance from\n   *   the top of the page to the element's bottom will be used as offset.<br />\n   *   **Note**: The element will be taken into account only as long as its `position` is set to\n   *   `fixed`. This option is useful, when dealing with responsive navbars/headers that adjust\n   *   their height and/or positioning according to the viewport's size.\n   *\n   * <br />\n   * <div class=\"alert alert-warning\">\n   * In order for `yOffset` to work properly, scrolling should take place on the document's root and\n   * not some child element.\n   * </div>\n   *\n   * @example\n     <example module=\"anchorScrollExample\">\n       <file name=\"index.html\">\n         <div id=\"scrollArea\" ng-controller=\"ScrollController\">\n           <a ng-click=\"gotoBottom()\">Go to bottom</a>\n           <a id=\"bottom\"></a> You're at the bottom!\n         </div>\n       </file>\n       <file name=\"script.js\">\n         angular.module('anchorScrollExample', [])\n           .controller('ScrollController', ['$scope', '$location', '$anchorScroll',\n             function ($scope, $location, $anchorScroll) {\n               $scope.gotoBottom = function() {\n                 // set the location.hash to the id of\n                 // the element you wish to scroll to.\n                 $location.hash('bottom');\n\n                 // call $anchorScroll()\n                 $anchorScroll();\n               };\n             }]);\n       </file>\n       <file name=\"style.css\">\n         #scrollArea {\n           height: 280px;\n           overflow: auto;\n         }\n\n         #bottom {\n           display: block;\n           margin-top: 2000px;\n         }\n       </file>\n     </example>\n   *\n   * <hr />\n   * The example below illustrates the use of a vertical scroll-offset (specified as a fixed value).\n   * See {@link ng.$anchorScroll#yOffset $anchorScroll.yOffset} for more details.\n   *\n   * @example\n     <example module=\"anchorScrollOffsetExample\">\n       <file name=\"index.html\">\n         <div class=\"fixed-header\" ng-controller=\"headerCtrl\">\n           <a href=\"\" ng-click=\"gotoAnchor(x)\" ng-repeat=\"x in [1,2,3,4,5]\">\n             Go to anchor {{x}}\n           </a>\n         </div>\n         <div id=\"anchor{{x}}\" class=\"anchor\" ng-repeat=\"x in [1,2,3,4,5]\">\n           Anchor {{x}} of 5\n         </div>\n       </file>\n       <file name=\"script.js\">\n         angular.module('anchorScrollOffsetExample', [])\n           .run(['$anchorScroll', function($anchorScroll) {\n             $anchorScroll.yOffset = 50;   // always scroll by 50 extra pixels\n           }])\n           .controller('headerCtrl', ['$anchorScroll', '$location', '$scope',\n             function ($anchorScroll, $location, $scope) {\n               $scope.gotoAnchor = function(x) {\n                 var newHash = 'anchor' + x;\n                 if ($location.hash() !== newHash) {\n                   // set the $location.hash to `newHash` and\n                   // $anchorScroll will automatically scroll to it\n                   $location.hash('anchor' + x);\n                 } else {\n                   // call $anchorScroll() explicitly,\n                   // since $location.hash hasn't changed\n                   $anchorScroll();\n                 }\n               };\n             }\n           ]);\n       </file>\n       <file name=\"style.css\">\n         body {\n           padding-top: 50px;\n         }\n\n         .anchor {\n           border: 2px dashed DarkOrchid;\n           padding: 10px 10px 200px 10px;\n         }\n\n         .fixed-header {\n           background-color: rgba(0, 0, 0, 0.2);\n           height: 50px;\n           position: fixed;\n           top: 0; left: 0; right: 0;\n         }\n\n         .fixed-header > a {\n           display: inline-block;\n           margin: 5px 15px;\n         }\n       </file>\n     </example>\n   */\n  this.$get = ['$window', '$location', '$rootScope', function($window, $location, $rootScope) {\n    var document = $window.document;\n\n    // Helper function to get first anchor from a NodeList\n    // (using `Array#some()` instead of `angular#forEach()` since it's more performant\n    //  and working in all supported browsers.)\n    function getFirstAnchor(list) {\n      var result = null;\n      Array.prototype.some.call(list, function(element) {\n        if (nodeName_(element) === 'a') {\n          result = element;\n          return true;\n        }\n      });\n      return result;\n    }\n\n    function getYOffset() {\n\n      var offset = scroll.yOffset;\n\n      if (isFunction(offset)) {\n        offset = offset();\n      } else if (isElement(offset)) {\n        var elem = offset[0];\n        var style = $window.getComputedStyle(elem);\n        if (style.position !== 'fixed') {\n          offset = 0;\n        } else {\n          offset = elem.getBoundingClientRect().bottom;\n        }\n      } else if (!isNumber(offset)) {\n        offset = 0;\n      }\n\n      return offset;\n    }\n\n    function scrollTo(elem) {\n      if (elem) {\n        elem.scrollIntoView();\n\n        var offset = getYOffset();\n\n        if (offset) {\n          // `offset` is the number of pixels we should scroll UP in order to align `elem` properly.\n          // This is true ONLY if the call to `elem.scrollIntoView()` initially aligns `elem` at the\n          // top of the viewport.\n          //\n          // IF the number of pixels from the top of `elem` to the end of the page's content is less\n          // than the height of the viewport, then `elem.scrollIntoView()` will align the `elem` some\n          // way down the page.\n          //\n          // This is often the case for elements near the bottom of the page.\n          //\n          // In such cases we do not need to scroll the whole `offset` up, just the difference between\n          // the top of the element and the offset, which is enough to align the top of `elem` at the\n          // desired position.\n          var elemTop = elem.getBoundingClientRect().top;\n          $window.scrollBy(0, elemTop - offset);\n        }\n      } else {\n        $window.scrollTo(0, 0);\n      }\n    }\n\n    function scroll(hash) {\n      hash = isString(hash) ? hash : $location.hash();\n      var elm;\n\n      // empty hash, scroll to the top of the page\n      if (!hash) scrollTo(null);\n\n      // element with given id\n      else if ((elm = document.getElementById(hash))) scrollTo(elm);\n\n      // first anchor with given name :-D\n      else if ((elm = getFirstAnchor(document.getElementsByName(hash)))) scrollTo(elm);\n\n      // no element and hash == 'top', scroll to the top of the page\n      else if (hash === 'top') scrollTo(null);\n    }\n\n    // does not scroll when user clicks on anchor link that is currently on\n    // (no url change, no $location.hash() change), browser native does scroll\n    if (autoScrollingEnabled) {\n      $rootScope.$watch(function autoScrollWatch() {return $location.hash();},\n        function autoScrollWatchAction(newVal, oldVal) {\n          // skip the initial scroll if $location.hash is empty\n          if (newVal === oldVal && newVal === '') return;\n\n          jqLiteDocumentLoaded(function() {\n            $rootScope.$evalAsync(scroll);\n          });\n        });\n    }\n\n    return scroll;\n  }];\n}\n\nvar $animateMinErr = minErr('$animate');\nvar ELEMENT_NODE = 1;\nvar NG_ANIMATE_CLASSNAME = 'ng-animate';\n\nfunction mergeClasses(a,b) {\n  if (!a && !b) return '';\n  if (!a) return b;\n  if (!b) return a;\n  if (isArray(a)) a = a.join(' ');\n  if (isArray(b)) b = b.join(' ');\n  return a + ' ' + b;\n}\n\nfunction extractElementNode(element) {\n  for (var i = 0; i < element.length; i++) {\n    var elm = element[i];\n    if (elm.nodeType === ELEMENT_NODE) {\n      return elm;\n    }\n  }\n}\n\nfunction splitClasses(classes) {\n  if (isString(classes)) {\n    classes = classes.split(' ');\n  }\n\n  // Use createMap() to prevent class assumptions involving property names in\n  // Object.prototype\n  var obj = createMap();\n  forEach(classes, function(klass) {\n    // sometimes the split leaves empty string values\n    // incase extra spaces were applied to the options\n    if (klass.length) {\n      obj[klass] = true;\n    }\n  });\n  return obj;\n}\n\n// if any other type of options value besides an Object value is\n// passed into the $animate.method() animation then this helper code\n// will be run which will ignore it. While this patch is not the\n// greatest solution to this, a lot of existing plugins depend on\n// $animate to either call the callback (< 1.2) or return a promise\n// that can be changed. This helper function ensures that the options\n// are wiped clean incase a callback function is provided.\nfunction prepareAnimateOptions(options) {\n  return isObject(options)\n      ? options\n      : {};\n}\n\nvar $$CoreAnimateJsProvider = function() {\n  this.$get = noop;\n};\n\n// this is prefixed with Core since it conflicts with\n// the animateQueueProvider defined in ngAnimate/animateQueue.js\nvar $$CoreAnimateQueueProvider = function() {\n  var postDigestQueue = new HashMap();\n  var postDigestElements = [];\n\n  this.$get = ['$$AnimateRunner', '$rootScope',\n       function($$AnimateRunner,   $rootScope) {\n    return {\n      enabled: noop,\n      on: noop,\n      off: noop,\n      pin: noop,\n\n      push: function(element, event, options, domOperation) {\n        domOperation        && domOperation();\n\n        options = options || {};\n        options.from        && element.css(options.from);\n        options.to          && element.css(options.to);\n\n        if (options.addClass || options.removeClass) {\n          addRemoveClassesPostDigest(element, options.addClass, options.removeClass);\n        }\n\n        var runner = new $$AnimateRunner(); // jshint ignore:line\n\n        // since there are no animations to run the runner needs to be\n        // notified that the animation call is complete.\n        runner.complete();\n        return runner;\n      }\n    };\n\n\n    function updateData(data, classes, value) {\n      var changed = false;\n      if (classes) {\n        classes = isString(classes) ? classes.split(' ') :\n                  isArray(classes) ? classes : [];\n        forEach(classes, function(className) {\n          if (className) {\n            changed = true;\n            data[className] = value;\n          }\n        });\n      }\n      return changed;\n    }\n\n    function handleCSSClassChanges() {\n      forEach(postDigestElements, function(element) {\n        var data = postDigestQueue.get(element);\n        if (data) {\n          var existing = splitClasses(element.attr('class'));\n          var toAdd = '';\n          var toRemove = '';\n          forEach(data, function(status, className) {\n            var hasClass = !!existing[className];\n            if (status !== hasClass) {\n              if (status) {\n                toAdd += (toAdd.length ? ' ' : '') + className;\n              } else {\n                toRemove += (toRemove.length ? ' ' : '') + className;\n              }\n            }\n          });\n\n          forEach(element, function(elm) {\n            toAdd    && jqLiteAddClass(elm, toAdd);\n            toRemove && jqLiteRemoveClass(elm, toRemove);\n          });\n          postDigestQueue.remove(element);\n        }\n      });\n      postDigestElements.length = 0;\n    }\n\n\n    function addRemoveClassesPostDigest(element, add, remove) {\n      var data = postDigestQueue.get(element) || {};\n\n      var classesAdded = updateData(data, add, true);\n      var classesRemoved = updateData(data, remove, false);\n\n      if (classesAdded || classesRemoved) {\n\n        postDigestQueue.put(element, data);\n        postDigestElements.push(element);\n\n        if (postDigestElements.length === 1) {\n          $rootScope.$$postDigest(handleCSSClassChanges);\n        }\n      }\n    }\n  }];\n};\n\n/**\n * @ngdoc provider\n * @name $animateProvider\n *\n * @description\n * Default implementation of $animate that doesn't perform any animations, instead just\n * synchronously performs DOM updates and resolves the returned runner promise.\n *\n * In order to enable animations the `ngAnimate` module has to be loaded.\n *\n * To see the functional implementation check out `src/ngAnimate/animate.js`.\n */\nvar $AnimateProvider = ['$provide', function($provide) {\n  var provider = this;\n\n  this.$$registeredAnimations = Object.create(null);\n\n   /**\n   * @ngdoc method\n   * @name $animateProvider#register\n   *\n   * @description\n   * Registers a new injectable animation factory function. The factory function produces the\n   * animation object which contains callback functions for each event that is expected to be\n   * animated.\n   *\n   *   * `eventFn`: `function(element, ... , doneFunction, options)`\n   *   The element to animate, the `doneFunction` and the options fed into the animation. Depending\n   *   on the type of animation additional arguments will be injected into the animation function. The\n   *   list below explains the function signatures for the different animation methods:\n   *\n   *   - setClass: function(element, addedClasses, removedClasses, doneFunction, options)\n   *   - addClass: function(element, addedClasses, doneFunction, options)\n   *   - removeClass: function(element, removedClasses, doneFunction, options)\n   *   - enter, leave, move: function(element, doneFunction, options)\n   *   - animate: function(element, fromStyles, toStyles, doneFunction, options)\n   *\n   *   Make sure to trigger the `doneFunction` once the animation is fully complete.\n   *\n   * ```js\n   *   return {\n   *     //enter, leave, move signature\n   *     eventFn : function(element, done, options) {\n   *       //code to run the animation\n   *       //once complete, then run done()\n   *       return function endFunction(wasCancelled) {\n   *         //code to cancel the animation\n   *       }\n   *     }\n   *   }\n   * ```\n   *\n   * @param {string} name The name of the animation (this is what the class-based CSS value will be compared to).\n   * @param {Function} factory The factory function that will be executed to return the animation\n   *                           object.\n   */\n  this.register = function(name, factory) {\n    if (name && name.charAt(0) !== '.') {\n      throw $animateMinErr('notcsel', \"Expecting class selector starting with '.' got '{0}'.\", name);\n    }\n\n    var key = name + '-animation';\n    provider.$$registeredAnimations[name.substr(1)] = key;\n    $provide.factory(key, factory);\n  };\n\n  /**\n   * @ngdoc method\n   * @name $animateProvider#classNameFilter\n   *\n   * @description\n   * Sets and/or returns the CSS class regular expression that is checked when performing\n   * an animation. Upon bootstrap the classNameFilter value is not set at all and will\n   * therefore enable $animate to attempt to perform an animation on any element that is triggered.\n   * When setting the `classNameFilter` value, animations will only be performed on elements\n   * that successfully match the filter expression. This in turn can boost performance\n   * for low-powered devices as well as applications containing a lot of structural operations.\n   * @param {RegExp=} expression The className expression which will be checked against all animations\n   * @return {RegExp} The current CSS className expression value. If null then there is no expression value\n   */\n  this.classNameFilter = function(expression) {\n    if (arguments.length === 1) {\n      this.$$classNameFilter = (expression instanceof RegExp) ? expression : null;\n      if (this.$$classNameFilter) {\n        var reservedRegex = new RegExp(\"(\\\\s+|\\\\/)\" + NG_ANIMATE_CLASSNAME + \"(\\\\s+|\\\\/)\");\n        if (reservedRegex.test(this.$$classNameFilter.toString())) {\n          throw $animateMinErr('nongcls','$animateProvider.classNameFilter(regex) prohibits accepting a regex value which matches/contains the \"{0}\" CSS class.', NG_ANIMATE_CLASSNAME);\n\n        }\n      }\n    }\n    return this.$$classNameFilter;\n  };\n\n  this.$get = ['$$animateQueue', function($$animateQueue) {\n    function domInsert(element, parentElement, afterElement) {\n      // if for some reason the previous element was removed\n      // from the dom sometime before this code runs then let's\n      // just stick to using the parent element as the anchor\n      if (afterElement) {\n        var afterNode = extractElementNode(afterElement);\n        if (afterNode && !afterNode.parentNode && !afterNode.previousElementSibling) {\n          afterElement = null;\n        }\n      }\n      afterElement ? afterElement.after(element) : parentElement.prepend(element);\n    }\n\n    /**\n     * @ngdoc service\n     * @name $animate\n     * @description The $animate service exposes a series of DOM utility methods that provide support\n     * for animation hooks. The default behavior is the application of DOM operations, however,\n     * when an animation is detected (and animations are enabled), $animate will do the heavy lifting\n     * to ensure that animation runs with the triggered DOM operation.\n     *\n     * By default $animate doesn't trigger any animations. This is because the `ngAnimate` module isn't\n     * included and only when it is active then the animation hooks that `$animate` triggers will be\n     * functional. Once active then all structural `ng-` directives will trigger animations as they perform\n     * their DOM-related operations (enter, leave and move). Other directives such as `ngClass`,\n     * `ngShow`, `ngHide` and `ngMessages` also provide support for animations.\n     *\n     * It is recommended that the`$animate` service is always used when executing DOM-related procedures within directives.\n     *\n     * To learn more about enabling animation support, click here to visit the\n     * {@link ngAnimate ngAnimate module page}.\n     */\n    return {\n      // we don't call it directly since non-existant arguments may\n      // be interpreted as null within the sub enabled function\n\n      /**\n       *\n       * @ngdoc method\n       * @name $animate#on\n       * @kind function\n       * @description Sets up an event listener to fire whenever the animation event (enter, leave, move, etc...)\n       *    has fired on the given element or among any of its children. Once the listener is fired, the provided callback\n       *    is fired with the following params:\n       *\n       * ```js\n       * $animate.on('enter', container,\n       *    function callback(element, phase) {\n       *      // cool we detected an enter animation within the container\n       *    }\n       * );\n       * ```\n       *\n       * @param {string} event the animation event that will be captured (e.g. enter, leave, move, addClass, removeClass, etc...)\n       * @param {DOMElement} container the container element that will capture each of the animation events that are fired on itself\n       *     as well as among its children\n       * @param {Function} callback the callback function that will be fired when the listener is triggered\n       *\n       * The arguments present in the callback function are:\n       * * `element` - The captured DOM element that the animation was fired on.\n       * * `phase` - The phase of the animation. The two possible phases are **start** (when the animation starts) and **close** (when it ends).\n       */\n      on: $$animateQueue.on,\n\n      /**\n       *\n       * @ngdoc method\n       * @name $animate#off\n       * @kind function\n       * @description Deregisters an event listener based on the event which has been associated with the provided element. This method\n       * can be used in three different ways depending on the arguments:\n       *\n       * ```js\n       * // remove all the animation event listeners listening for `enter`\n       * $animate.off('enter');\n       *\n       * // remove listeners for all animation events from the container element\n       * $animate.off(container);\n       *\n       * // remove all the animation event listeners listening for `enter` on the given element and its children\n       * $animate.off('enter', container);\n       *\n       * // remove the event listener function provided by `callback` that is set\n       * // to listen for `enter` on the given `container` as well as its children\n       * $animate.off('enter', container, callback);\n       * ```\n       *\n       * @param {string|DOMElement} event|container the animation event (e.g. enter, leave, move,\n       * addClass, removeClass, etc...), or the container element. If it is the element, all other\n       * arguments are ignored.\n       * @param {DOMElement=} container the container element the event listener was placed on\n       * @param {Function=} callback the callback function that was registered as the listener\n       */\n      off: $$animateQueue.off,\n\n      /**\n       * @ngdoc method\n       * @name $animate#pin\n       * @kind function\n       * @description Associates the provided element with a host parent element to allow the element to be animated even if it exists\n       *    outside of the DOM structure of the Angular application. By doing so, any animation triggered via `$animate` can be issued on the\n       *    element despite being outside the realm of the application or within another application. Say for example if the application\n       *    was bootstrapped on an element that is somewhere inside of the `<body>` tag, but we wanted to allow for an element to be situated\n       *    as a direct child of `document.body`, then this can be achieved by pinning the element via `$animate.pin(element)`. Keep in mind\n       *    that calling `$animate.pin(element, parentElement)` will not actually insert into the DOM anywhere; it will just create the association.\n       *\n       *    Note that this feature is only active when the `ngAnimate` module is used.\n       *\n       * @param {DOMElement} element the external element that will be pinned\n       * @param {DOMElement} parentElement the host parent element that will be associated with the external element\n       */\n      pin: $$animateQueue.pin,\n\n      /**\n       *\n       * @ngdoc method\n       * @name $animate#enabled\n       * @kind function\n       * @description Used to get and set whether animations are enabled or not on the entire application or on an element and its children. This\n       * function can be called in four ways:\n       *\n       * ```js\n       * // returns true or false\n       * $animate.enabled();\n       *\n       * // changes the enabled state for all animations\n       * $animate.enabled(false);\n       * $animate.enabled(true);\n       *\n       * // returns true or false if animations are enabled for an element\n       * $animate.enabled(element);\n       *\n       * // changes the enabled state for an element and its children\n       * $animate.enabled(element, true);\n       * $animate.enabled(element, false);\n       * ```\n       *\n       * @param {DOMElement=} element the element that will be considered for checking/setting the enabled state\n       * @param {boolean=} enabled whether or not the animations will be enabled for the element\n       *\n       * @return {boolean} whether or not animations are enabled\n       */\n      enabled: $$animateQueue.enabled,\n\n      /**\n       * @ngdoc method\n       * @name $animate#cancel\n       * @kind function\n       * @description Cancels the provided animation.\n       *\n       * @param {Promise} animationPromise The animation promise that is returned when an animation is started.\n       */\n      cancel: function(runner) {\n        runner.end && runner.end();\n      },\n\n      /**\n       *\n       * @ngdoc method\n       * @name $animate#enter\n       * @kind function\n       * @description Inserts the element into the DOM either after the `after` element (if provided) or\n       *   as the first child within the `parent` element and then triggers an animation.\n       *   A promise is returned that will be resolved during the next digest once the animation\n       *   has completed.\n       *\n       * @param {DOMElement} element the element which will be inserted into the DOM\n       * @param {DOMElement} parent the parent element which will append the element as\n       *   a child (so long as the after element is not present)\n       * @param {DOMElement=} after the sibling element after which the element will be appended\n       * @param {object=} options an optional collection of options/styles that will be applied to the element.\n       *   The object can have the following properties:\n       *\n       *   - **addClass** - `{string}` - space-separated CSS classes to add to element\n       *   - **from** - `{Object}` - CSS properties & values at the beginning of animation. Must have matching `to`\n       *   - **removeClass** - `{string}` - space-separated CSS classes to remove from element\n       *   - **to** - `{Object}` - CSS properties & values at end of animation. Must have matching `from`\n       *\n       * @return {Promise} the animation callback promise\n       */\n      enter: function(element, parent, after, options) {\n        parent = parent && jqLite(parent);\n        after = after && jqLite(after);\n        parent = parent || after.parent();\n        domInsert(element, parent, after);\n        return $$animateQueue.push(element, 'enter', prepareAnimateOptions(options));\n      },\n\n      /**\n       *\n       * @ngdoc method\n       * @name $animate#move\n       * @kind function\n       * @description Inserts (moves) the element into its new position in the DOM either after\n       *   the `after` element (if provided) or as the first child within the `parent` element\n       *   and then triggers an animation. A promise is returned that will be resolved\n       *   during the next digest once the animation has completed.\n       *\n       * @param {DOMElement} element the element which will be moved into the new DOM position\n       * @param {DOMElement} parent the parent element which will append the element as\n       *   a child (so long as the after element is not present)\n       * @param {DOMElement=} after the sibling element after which the element will be appended\n       * @param {object=} options an optional collection of options/styles that will be applied to the element.\n       *   The object can have the following properties:\n       *\n       *   - **addClass** - `{string}` - space-separated CSS classes to add to element\n       *   - **from** - `{Object}` - CSS properties & values at the beginning of animation. Must have matching `to`\n       *   - **removeClass** - `{string}` - space-separated CSS classes to remove from element\n       *   - **to** - `{Object}` - CSS properties & values at end of animation. Must have matching `from`\n       *\n       * @return {Promise} the animation callback promise\n       */\n      move: function(element, parent, after, options) {\n        parent = parent && jqLite(parent);\n        after = after && jqLite(after);\n        parent = parent || after.parent();\n        domInsert(element, parent, after);\n        return $$animateQueue.push(element, 'move', prepareAnimateOptions(options));\n      },\n\n      /**\n       * @ngdoc method\n       * @name $animate#leave\n       * @kind function\n       * @description Triggers an animation and then removes the element from the DOM.\n       * When the function is called a promise is returned that will be resolved during the next\n       * digest once the animation has completed.\n       *\n       * @param {DOMElement} element the element which will be removed from the DOM\n       * @param {object=} options an optional collection of options/styles that will be applied to the element.\n       *   The object can have the following properties:\n       *\n       *   - **addClass** - `{string}` - space-separated CSS classes to add to element\n       *   - **from** - `{Object}` - CSS properties & values at the beginning of animation. Must have matching `to`\n       *   - **removeClass** - `{string}` - space-separated CSS classes to remove from element\n       *   - **to** - `{Object}` - CSS properties & values at end of animation. Must have matching `from`\n       *\n       * @return {Promise} the animation callback promise\n       */\n      leave: function(element, options) {\n        return $$animateQueue.push(element, 'leave', prepareAnimateOptions(options), function() {\n          element.remove();\n        });\n      },\n\n      /**\n       * @ngdoc method\n       * @name $animate#addClass\n       * @kind function\n       *\n       * @description Triggers an addClass animation surrounding the addition of the provided CSS class(es). Upon\n       *   execution, the addClass operation will only be handled after the next digest and it will not trigger an\n       *   animation if element already contains the CSS class or if the class is removed at a later step.\n       *   Note that class-based animations are treated differently compared to structural animations\n       *   (like enter, move and leave) since the CSS classes may be added/removed at different points\n       *   depending if CSS or JavaScript animations are used.\n       *\n       * @param {DOMElement} element the element which the CSS classes will be applied to\n       * @param {string} className the CSS class(es) that will be added (multiple classes are separated via spaces)\n       * @param {object=} options an optional collection of options/styles that will be applied to the element.\n       *   The object can have the following properties:\n       *\n       *   - **addClass** - `{string}` - space-separated CSS classes to add to element\n       *   - **from** - `{Object}` - CSS properties & values at the beginning of animation. Must have matching `to`\n       *   - **removeClass** - `{string}` - space-separated CSS classes to remove from element\n       *   - **to** - `{Object}` - CSS properties & values at end of animation. Must have matching `from`\n       *\n       * @return {Promise} the animation callback promise\n       */\n      addClass: function(element, className, options) {\n        options = prepareAnimateOptions(options);\n        options.addClass = mergeClasses(options.addclass, className);\n        return $$animateQueue.push(element, 'addClass', options);\n      },\n\n      /**\n       * @ngdoc method\n       * @name $animate#removeClass\n       * @kind function\n       *\n       * @description Triggers a removeClass animation surrounding the removal of the provided CSS class(es). Upon\n       *   execution, the removeClass operation will only be handled after the next digest and it will not trigger an\n       *   animation if element does not contain the CSS class or if the class is added at a later step.\n       *   Note that class-based animations are treated differently compared to structural animations\n       *   (like enter, move and leave) since the CSS classes may be added/removed at different points\n       *   depending if CSS or JavaScript animations are used.\n       *\n       * @param {DOMElement} element the element which the CSS classes will be applied to\n       * @param {string} className the CSS class(es) that will be removed (multiple classes are separated via spaces)\n       * @param {object=} options an optional collection of options/styles that will be applied to the element.\n       *   The object can have the following properties:\n       *\n       *   - **addClass** - `{string}` - space-separated CSS classes to add to element\n       *   - **from** - `{Object}` - CSS properties & values at the beginning of animation. Must have matching `to`\n       *   - **removeClass** - `{string}` - space-separated CSS classes to remove from element\n       *   - **to** - `{Object}` - CSS properties & values at end of animation. Must have matching `from`\n       *\n       * @return {Promise} the animation callback promise\n       */\n      removeClass: function(element, className, options) {\n        options = prepareAnimateOptions(options);\n        options.removeClass = mergeClasses(options.removeClass, className);\n        return $$animateQueue.push(element, 'removeClass', options);\n      },\n\n      /**\n       * @ngdoc method\n       * @name $animate#setClass\n       * @kind function\n       *\n       * @description Performs both the addition and removal of a CSS classes on an element and (during the process)\n       *    triggers an animation surrounding the class addition/removal. Much like `$animate.addClass` and\n       *    `$animate.removeClass`, `setClass` will only evaluate the classes being added/removed once a digest has\n       *    passed. Note that class-based animations are treated differently compared to structural animations\n       *    (like enter, move and leave) since the CSS classes may be added/removed at different points\n       *    depending if CSS or JavaScript animations are used.\n       *\n       * @param {DOMElement} element the element which the CSS classes will be applied to\n       * @param {string} add the CSS class(es) that will be added (multiple classes are separated via spaces)\n       * @param {string} remove the CSS class(es) that will be removed (multiple classes are separated via spaces)\n       * @param {object=} options an optional collection of options/styles that will be applied to the element.\n       *   The object can have the following properties:\n       *\n       *   - **addClass** - `{string}` - space-separated CSS classes to add to element\n       *   - **from** - `{Object}` - CSS properties & values at the beginning of animation. Must have matching `to`\n       *   - **removeClass** - `{string}` - space-separated CSS classes to remove from element\n       *   - **to** - `{Object}` - CSS properties & values at end of animation. Must have matching `from`\n       *\n       * @return {Promise} the animation callback promise\n       */\n      setClass: function(element, add, remove, options) {\n        options = prepareAnimateOptions(options);\n        options.addClass = mergeClasses(options.addClass, add);\n        options.removeClass = mergeClasses(options.removeClass, remove);\n        return $$animateQueue.push(element, 'setClass', options);\n      },\n\n      /**\n       * @ngdoc method\n       * @name $animate#animate\n       * @kind function\n       *\n       * @description Performs an inline animation on the element which applies the provided to and from CSS styles to the element.\n       * If any detected CSS transition, keyframe or JavaScript matches the provided className value, then the animation will take\n       * on the provided styles. For example, if a transition animation is set for the given classNamem, then the provided `from` and\n       * `to` styles will be applied alongside the given transition. If the CSS style provided in `from` does not have a corresponding\n       * style in `to`, the style in `from` is applied immediately, and no animation is run.\n       * If a JavaScript animation is detected then the provided styles will be given in as function parameters into the `animate`\n       * method (or as part of the `options` parameter):\n       *\n       * ```js\n       * ngModule.animation('.my-inline-animation', function() {\n       *   return {\n       *     animate : function(element, from, to, done, options) {\n       *       //animation\n       *       done();\n       *     }\n       *   }\n       * });\n       * ```\n       *\n       * @param {DOMElement} element the element which the CSS styles will be applied to\n       * @param {object} from the from (starting) CSS styles that will be applied to the element and across the animation.\n       * @param {object} to the to (destination) CSS styles that will be applied to the element and across the animation.\n       * @param {string=} className an optional CSS class that will be applied to the element for the duration of the animation. If\n       *    this value is left as empty then a CSS class of `ng-inline-animate` will be applied to the element.\n       *    (Note that if no animation is detected then this value will not be applied to the element.)\n       * @param {object=} options an optional collection of options/styles that will be applied to the element.\n       *   The object can have the following properties:\n       *\n       *   - **addClass** - `{string}` - space-separated CSS classes to add to element\n       *   - **from** - `{Object}` - CSS properties & values at the beginning of animation. Must have matching `to`\n       *   - **removeClass** - `{string}` - space-separated CSS classes to remove from element\n       *   - **to** - `{Object}` - CSS properties & values at end of animation. Must have matching `from`\n       *\n       * @return {Promise} the animation callback promise\n       */\n      animate: function(element, from, to, className, options) {\n        options = prepareAnimateOptions(options);\n        options.from = options.from ? extend(options.from, from) : from;\n        options.to   = options.to   ? extend(options.to, to)     : to;\n\n        className = className || 'ng-inline-animate';\n        options.tempClasses = mergeClasses(options.tempClasses, className);\n        return $$animateQueue.push(element, 'animate', options);\n      }\n    };\n  }];\n}];\n\nvar $$AnimateAsyncRunFactoryProvider = function() {\n  this.$get = ['$$rAF', function($$rAF) {\n    var waitQueue = [];\n\n    function waitForTick(fn) {\n      waitQueue.push(fn);\n      if (waitQueue.length > 1) return;\n      $$rAF(function() {\n        for (var i = 0; i < waitQueue.length; i++) {\n          waitQueue[i]();\n        }\n        waitQueue = [];\n      });\n    }\n\n    return function() {\n      var passed = false;\n      waitForTick(function() {\n        passed = true;\n      });\n      return function(callback) {\n        passed ? callback() : waitForTick(callback);\n      };\n    };\n  }];\n};\n\nvar $$AnimateRunnerFactoryProvider = function() {\n  this.$get = ['$q', '$sniffer', '$$animateAsyncRun', '$document', '$timeout',\n       function($q,   $sniffer,   $$animateAsyncRun,   $document,   $timeout) {\n\n    var INITIAL_STATE = 0;\n    var DONE_PENDING_STATE = 1;\n    var DONE_COMPLETE_STATE = 2;\n\n    AnimateRunner.chain = function(chain, callback) {\n      var index = 0;\n\n      next();\n      function next() {\n        if (index === chain.length) {\n          callback(true);\n          return;\n        }\n\n        chain[index](function(response) {\n          if (response === false) {\n            callback(false);\n            return;\n          }\n          index++;\n          next();\n        });\n      }\n    };\n\n    AnimateRunner.all = function(runners, callback) {\n      var count = 0;\n      var status = true;\n      forEach(runners, function(runner) {\n        runner.done(onProgress);\n      });\n\n      function onProgress(response) {\n        status = status && response;\n        if (++count === runners.length) {\n          callback(status);\n        }\n      }\n    };\n\n    function AnimateRunner(host) {\n      this.setHost(host);\n\n      var rafTick = $$animateAsyncRun();\n      var timeoutTick = function(fn) {\n        $timeout(fn, 0, false);\n      };\n\n      this._doneCallbacks = [];\n      this._tick = function(fn) {\n        var doc = $document[0];\n\n        // the document may not be ready or attached\n        // to the module for some internal tests\n        if (doc && doc.hidden) {\n          timeoutTick(fn);\n        } else {\n          rafTick(fn);\n        }\n      };\n      this._state = 0;\n    }\n\n    AnimateRunner.prototype = {\n      setHost: function(host) {\n        this.host = host || {};\n      },\n\n      done: function(fn) {\n        if (this._state === DONE_COMPLETE_STATE) {\n          fn();\n        } else {\n          this._doneCallbacks.push(fn);\n        }\n      },\n\n      progress: noop,\n\n      getPromise: function() {\n        if (!this.promise) {\n          var self = this;\n          this.promise = $q(function(resolve, reject) {\n            self.done(function(status) {\n              status === false ? reject() : resolve();\n            });\n          });\n        }\n        return this.promise;\n      },\n\n      then: function(resolveHandler, rejectHandler) {\n        return this.getPromise().then(resolveHandler, rejectHandler);\n      },\n\n      'catch': function(handler) {\n        return this.getPromise()['catch'](handler);\n      },\n\n      'finally': function(handler) {\n        return this.getPromise()['finally'](handler);\n      },\n\n      pause: function() {\n        if (this.host.pause) {\n          this.host.pause();\n        }\n      },\n\n      resume: function() {\n        if (this.host.resume) {\n          this.host.resume();\n        }\n      },\n\n      end: function() {\n        if (this.host.end) {\n          this.host.end();\n        }\n        this._resolve(true);\n      },\n\n      cancel: function() {\n        if (this.host.cancel) {\n          this.host.cancel();\n        }\n        this._resolve(false);\n      },\n\n      complete: function(response) {\n        var self = this;\n        if (self._state === INITIAL_STATE) {\n          self._state = DONE_PENDING_STATE;\n          self._tick(function() {\n            self._resolve(response);\n          });\n        }\n      },\n\n      _resolve: function(response) {\n        if (this._state !== DONE_COMPLETE_STATE) {\n          forEach(this._doneCallbacks, function(fn) {\n            fn(response);\n          });\n          this._doneCallbacks.length = 0;\n          this._state = DONE_COMPLETE_STATE;\n        }\n      }\n    };\n\n    return AnimateRunner;\n  }];\n};\n\n/**\n * @ngdoc service\n * @name $animateCss\n * @kind object\n *\n * @description\n * This is the core version of `$animateCss`. By default, only when the `ngAnimate` is included,\n * then the `$animateCss` service will actually perform animations.\n *\n * Click here {@link ngAnimate.$animateCss to read the documentation for $animateCss}.\n */\nvar $CoreAnimateCssProvider = function() {\n  this.$get = ['$$rAF', '$q', '$$AnimateRunner', function($$rAF, $q, $$AnimateRunner) {\n\n    return function(element, initialOptions) {\n      // all of the animation functions should create\n      // a copy of the options data, however, if a\n      // parent service has already created a copy then\n      // we should stick to using that\n      var options = initialOptions || {};\n      if (!options.$$prepared) {\n        options = copy(options);\n      }\n\n      // there is no point in applying the styles since\n      // there is no animation that goes on at all in\n      // this version of $animateCss.\n      if (options.cleanupStyles) {\n        options.from = options.to = null;\n      }\n\n      if (options.from) {\n        element.css(options.from);\n        options.from = null;\n      }\n\n      /* jshint newcap: false */\n      var closed, runner = new $$AnimateRunner();\n      return {\n        start: run,\n        end: run\n      };\n\n      function run() {\n        $$rAF(function() {\n          applyAnimationContents();\n          if (!closed) {\n            runner.complete();\n          }\n          closed = true;\n        });\n        return runner;\n      }\n\n      function applyAnimationContents() {\n        if (options.addClass) {\n          element.addClass(options.addClass);\n          options.addClass = null;\n        }\n        if (options.removeClass) {\n          element.removeClass(options.removeClass);\n          options.removeClass = null;\n        }\n        if (options.to) {\n          element.css(options.to);\n          options.to = null;\n        }\n      }\n    };\n  }];\n};\n\n/* global stripHash: true */\n\n/**\n * ! This is a private undocumented service !\n *\n * @name $browser\n * @requires $log\n * @description\n * This object has two goals:\n *\n * - hide all the global state in the browser caused by the window object\n * - abstract away all the browser specific features and inconsistencies\n *\n * For tests we provide {@link ngMock.$browser mock implementation} of the `$browser`\n * service, which can be used for convenient testing of the application without the interaction with\n * the real browser apis.\n */\n/**\n * @param {object} window The global window object.\n * @param {object} document jQuery wrapped document.\n * @param {object} $log window.console or an object with the same interface.\n * @param {object} $sniffer $sniffer service\n */\nfunction Browser(window, document, $log, $sniffer) {\n  var self = this,\n      location = window.location,\n      history = window.history,\n      setTimeout = window.setTimeout,\n      clearTimeout = window.clearTimeout,\n      pendingDeferIds = {};\n\n  self.isMock = false;\n\n  var outstandingRequestCount = 0;\n  var outstandingRequestCallbacks = [];\n\n  // TODO(vojta): remove this temporary api\n  self.$$completeOutstandingRequest = completeOutstandingRequest;\n  self.$$incOutstandingRequestCount = function() { outstandingRequestCount++; };\n\n  /**\n   * Executes the `fn` function(supports currying) and decrements the `outstandingRequestCallbacks`\n   * counter. If the counter reaches 0, all the `outstandingRequestCallbacks` are executed.\n   */\n  function completeOutstandingRequest(fn) {\n    try {\n      fn.apply(null, sliceArgs(arguments, 1));\n    } finally {\n      outstandingRequestCount--;\n      if (outstandingRequestCount === 0) {\n        while (outstandingRequestCallbacks.length) {\n          try {\n            outstandingRequestCallbacks.pop()();\n          } catch (e) {\n            $log.error(e);\n          }\n        }\n      }\n    }\n  }\n\n  function getHash(url) {\n    var index = url.indexOf('#');\n    return index === -1 ? '' : url.substr(index);\n  }\n\n  /**\n   * @private\n   * Note: this method is used only by scenario runner\n   * TODO(vojta): prefix this method with $$ ?\n   * @param {function()} callback Function that will be called when no outstanding request\n   */\n  self.notifyWhenNoOutstandingRequests = function(callback) {\n    if (outstandingRequestCount === 0) {\n      callback();\n    } else {\n      outstandingRequestCallbacks.push(callback);\n    }\n  };\n\n  //////////////////////////////////////////////////////////////\n  // URL API\n  //////////////////////////////////////////////////////////////\n\n  var cachedState, lastHistoryState,\n      lastBrowserUrl = location.href,\n      baseElement = document.find('base'),\n      pendingLocation = null,\n      getCurrentState = !$sniffer.history ? noop : function getCurrentState() {\n        try {\n          return history.state;\n        } catch (e) {\n          // MSIE can reportedly throw when there is no state (UNCONFIRMED).\n        }\n      };\n\n  cacheState();\n  lastHistoryState = cachedState;\n\n  /**\n   * @name $browser#url\n   *\n   * @description\n   * GETTER:\n   * Without any argument, this method just returns current value of location.href.\n   *\n   * SETTER:\n   * With at least one argument, this method sets url to new value.\n   * If html5 history api supported, pushState/replaceState is used, otherwise\n   * location.href/location.replace is used.\n   * Returns its own instance to allow chaining\n   *\n   * NOTE: this api is intended for use only by the $location service. Please use the\n   * {@link ng.$location $location service} to change url.\n   *\n   * @param {string} url New url (when used as setter)\n   * @param {boolean=} replace Should new url replace current history record?\n   * @param {object=} state object to use with pushState/replaceState\n   */\n  self.url = function(url, replace, state) {\n    // In modern browsers `history.state` is `null` by default; treating it separately\n    // from `undefined` would cause `$browser.url('/foo')` to change `history.state`\n    // to undefined via `pushState`. Instead, let's change `undefined` to `null` here.\n    if (isUndefined(state)) {\n      state = null;\n    }\n\n    // Android Browser BFCache causes location, history reference to become stale.\n    if (location !== window.location) location = window.location;\n    if (history !== window.history) history = window.history;\n\n    // setter\n    if (url) {\n      var sameState = lastHistoryState === state;\n\n      // Don't change anything if previous and current URLs and states match. This also prevents\n      // IE<10 from getting into redirect loop when in LocationHashbangInHtml5Url mode.\n      // See https://github.com/angular/angular.js/commit/ffb2701\n      if (lastBrowserUrl === url && (!$sniffer.history || sameState)) {\n        return self;\n      }\n      var sameBase = lastBrowserUrl && stripHash(lastBrowserUrl) === stripHash(url);\n      lastBrowserUrl = url;\n      lastHistoryState = state;\n      // Don't use history API if only the hash changed\n      // due to a bug in IE10/IE11 which leads\n      // to not firing a `hashchange` nor `popstate` event\n      // in some cases (see #9143).\n      if ($sniffer.history && (!sameBase || !sameState)) {\n        history[replace ? 'replaceState' : 'pushState'](state, '', url);\n        cacheState();\n        // Do the assignment again so that those two variables are referentially identical.\n        lastHistoryState = cachedState;\n      } else {\n        if (!sameBase) {\n          pendingLocation = url;\n        }\n        if (replace) {\n          location.replace(url);\n        } else if (!sameBase) {\n          location.href = url;\n        } else {\n          location.hash = getHash(url);\n        }\n        if (location.href !== url) {\n          pendingLocation = url;\n        }\n      }\n      if (pendingLocation) {\n        pendingLocation = url;\n      }\n      return self;\n    // getter\n    } else {\n      // - pendingLocation is needed as browsers don't allow to read out\n      //   the new location.href if a reload happened or if there is a bug like in iOS 9 (see\n      //   https://openradar.appspot.com/22186109).\n      // - the replacement is a workaround for https://bugzilla.mozilla.org/show_bug.cgi?id=407172\n      return pendingLocation || location.href.replace(/%27/g,\"'\");\n    }\n  };\n\n  /**\n   * @name $browser#state\n   *\n   * @description\n   * This method is a getter.\n   *\n   * Return history.state or null if history.state is undefined.\n   *\n   * @returns {object} state\n   */\n  self.state = function() {\n    return cachedState;\n  };\n\n  var urlChangeListeners = [],\n      urlChangeInit = false;\n\n  function cacheStateAndFireUrlChange() {\n    pendingLocation = null;\n    cacheState();\n    fireUrlChange();\n  }\n\n  // This variable should be used *only* inside the cacheState function.\n  var lastCachedState = null;\n  function cacheState() {\n    // This should be the only place in $browser where `history.state` is read.\n    cachedState = getCurrentState();\n    cachedState = isUndefined(cachedState) ? null : cachedState;\n\n    // Prevent callbacks fo fire twice if both hashchange & popstate were fired.\n    if (equals(cachedState, lastCachedState)) {\n      cachedState = lastCachedState;\n    }\n    lastCachedState = cachedState;\n  }\n\n  function fireUrlChange() {\n    if (lastBrowserUrl === self.url() && lastHistoryState === cachedState) {\n      return;\n    }\n\n    lastBrowserUrl = self.url();\n    lastHistoryState = cachedState;\n    forEach(urlChangeListeners, function(listener) {\n      listener(self.url(), cachedState);\n    });\n  }\n\n  /**\n   * @name $browser#onUrlChange\n   *\n   * @description\n   * Register callback function that will be called, when url changes.\n   *\n   * It's only called when the url is changed from outside of angular:\n   * - user types different url into address bar\n   * - user clicks on history (forward/back) button\n   * - user clicks on a link\n   *\n   * It's not called when url is changed by $browser.url() method\n   *\n   * The listener gets called with new url as parameter.\n   *\n   * NOTE: this api is intended for use only by the $location service. Please use the\n   * {@link ng.$location $location service} to monitor url changes in angular apps.\n   *\n   * @param {function(string)} listener Listener function to be called when url changes.\n   * @return {function(string)} Returns the registered listener fn - handy if the fn is anonymous.\n   */\n  self.onUrlChange = function(callback) {\n    // TODO(vojta): refactor to use node's syntax for events\n    if (!urlChangeInit) {\n      // We listen on both (hashchange/popstate) when available, as some browsers (e.g. Opera)\n      // don't fire popstate when user change the address bar and don't fire hashchange when url\n      // changed by push/replaceState\n\n      // html5 history api - popstate event\n      if ($sniffer.history) jqLite(window).on('popstate', cacheStateAndFireUrlChange);\n      // hashchange event\n      jqLite(window).on('hashchange', cacheStateAndFireUrlChange);\n\n      urlChangeInit = true;\n    }\n\n    urlChangeListeners.push(callback);\n    return callback;\n  };\n\n  /**\n   * @private\n   * Remove popstate and hashchange handler from window.\n   *\n   * NOTE: this api is intended for use only by $rootScope.\n   */\n  self.$$applicationDestroyed = function() {\n    jqLite(window).off('hashchange popstate', cacheStateAndFireUrlChange);\n  };\n\n  /**\n   * Checks whether the url has changed outside of Angular.\n   * Needs to be exported to be able to check for changes that have been done in sync,\n   * as hashchange/popstate events fire in async.\n   */\n  self.$$checkUrlChange = fireUrlChange;\n\n  //////////////////////////////////////////////////////////////\n  // Misc API\n  //////////////////////////////////////////////////////////////\n\n  /**\n   * @name $browser#baseHref\n   *\n   * @description\n   * Returns current <base href>\n   * (always relative - without domain)\n   *\n   * @returns {string} The current base href\n   */\n  self.baseHref = function() {\n    var href = baseElement.attr('href');\n    return href ? href.replace(/^(https?\\:)?\\/\\/[^\\/]*/, '') : '';\n  };\n\n  /**\n   * @name $browser#defer\n   * @param {function()} fn A function, who's execution should be deferred.\n   * @param {number=} [delay=0] of milliseconds to defer the function execution.\n   * @returns {*} DeferId that can be used to cancel the task via `$browser.defer.cancel()`.\n   *\n   * @description\n   * Executes a fn asynchronously via `setTimeout(fn, delay)`.\n   *\n   * Unlike when calling `setTimeout` directly, in test this function is mocked and instead of using\n   * `setTimeout` in tests, the fns are queued in an array, which can be programmatically flushed\n   * via `$browser.defer.flush()`.\n   *\n   */\n  self.defer = function(fn, delay) {\n    var timeoutId;\n    outstandingRequestCount++;\n    timeoutId = setTimeout(function() {\n      delete pendingDeferIds[timeoutId];\n      completeOutstandingRequest(fn);\n    }, delay || 0);\n    pendingDeferIds[timeoutId] = true;\n    return timeoutId;\n  };\n\n\n  /**\n   * @name $browser#defer.cancel\n   *\n   * @description\n   * Cancels a deferred task identified with `deferId`.\n   *\n   * @param {*} deferId Token returned by the `$browser.defer` function.\n   * @returns {boolean} Returns `true` if the task hasn't executed yet and was successfully\n   *                    canceled.\n   */\n  self.defer.cancel = function(deferId) {\n    if (pendingDeferIds[deferId]) {\n      delete pendingDeferIds[deferId];\n      clearTimeout(deferId);\n      completeOutstandingRequest(noop);\n      return true;\n    }\n    return false;\n  };\n\n}\n\nfunction $BrowserProvider() {\n  this.$get = ['$window', '$log', '$sniffer', '$document',\n      function($window, $log, $sniffer, $document) {\n        return new Browser($window, $document, $log, $sniffer);\n      }];\n}\n\n/**\n * @ngdoc service\n * @name $cacheFactory\n *\n * @description\n * Factory that constructs {@link $cacheFactory.Cache Cache} objects and gives access to\n * them.\n *\n * ```js\n *\n *  var cache = $cacheFactory('cacheId');\n *  expect($cacheFactory.get('cacheId')).toBe(cache);\n *  expect($cacheFactory.get('noSuchCacheId')).not.toBeDefined();\n *\n *  cache.put(\"key\", \"value\");\n *  cache.put(\"another key\", \"another value\");\n *\n *  // We've specified no options on creation\n *  expect(cache.info()).toEqual({id: 'cacheId', size: 2});\n *\n * ```\n *\n *\n * @param {string} cacheId Name or id of the newly created cache.\n * @param {object=} options Options object that specifies the cache behavior. Properties:\n *\n *   - `{number=}` `capacity` — turns the cache into LRU cache.\n *\n * @returns {object} Newly created cache object with the following set of methods:\n *\n * - `{object}` `info()` — Returns id, size, and options of cache.\n * - `{{*}}` `put({string} key, {*} value)` — Puts a new key-value pair into the cache and returns\n *   it.\n * - `{{*}}` `get({string} key)` — Returns cached value for `key` or undefined for cache miss.\n * - `{void}` `remove({string} key)` — Removes a key-value pair from the cache.\n * - `{void}` `removeAll()` — Removes all cached values.\n * - `{void}` `destroy()` — Removes references to this cache from $cacheFactory.\n *\n * @example\n   <example module=\"cacheExampleApp\">\n     <file name=\"index.html\">\n       <div ng-controller=\"CacheController\">\n         <input ng-model=\"newCacheKey\" placeholder=\"Key\">\n         <input ng-model=\"newCacheValue\" placeholder=\"Value\">\n         <button ng-click=\"put(newCacheKey, newCacheValue)\">Cache</button>\n\n         <p ng-if=\"keys.length\">Cached Values</p>\n         <div ng-repeat=\"key in keys\">\n           <span ng-bind=\"key\"></span>\n           <span>: </span>\n           <b ng-bind=\"cache.get(key)\"></b>\n         </div>\n\n         <p>Cache Info</p>\n         <div ng-repeat=\"(key, value) in cache.info()\">\n           <span ng-bind=\"key\"></span>\n           <span>: </span>\n           <b ng-bind=\"value\"></b>\n         </div>\n       </div>\n     </file>\n     <file name=\"script.js\">\n       angular.module('cacheExampleApp', []).\n         controller('CacheController', ['$scope', '$cacheFactory', function($scope, $cacheFactory) {\n           $scope.keys = [];\n           $scope.cache = $cacheFactory('cacheId');\n           $scope.put = function(key, value) {\n             if (angular.isUndefined($scope.cache.get(key))) {\n               $scope.keys.push(key);\n             }\n             $scope.cache.put(key, angular.isUndefined(value) ? null : value);\n           };\n         }]);\n     </file>\n     <file name=\"style.css\">\n       p {\n         margin: 10px 0 3px;\n       }\n     </file>\n   </example>\n */\nfunction $CacheFactoryProvider() {\n\n  this.$get = function() {\n    var caches = {};\n\n    function cacheFactory(cacheId, options) {\n      if (cacheId in caches) {\n        throw minErr('$cacheFactory')('iid', \"CacheId '{0}' is already taken!\", cacheId);\n      }\n\n      var size = 0,\n          stats = extend({}, options, {id: cacheId}),\n          data = createMap(),\n          capacity = (options && options.capacity) || Number.MAX_VALUE,\n          lruHash = createMap(),\n          freshEnd = null,\n          staleEnd = null;\n\n      /**\n       * @ngdoc type\n       * @name $cacheFactory.Cache\n       *\n       * @description\n       * A cache object used to store and retrieve data, primarily used by\n       * {@link $http $http} and the {@link ng.directive:script script} directive to cache\n       * templates and other data.\n       *\n       * ```js\n       *  angular.module('superCache')\n       *    .factory('superCache', ['$cacheFactory', function($cacheFactory) {\n       *      return $cacheFactory('super-cache');\n       *    }]);\n       * ```\n       *\n       * Example test:\n       *\n       * ```js\n       *  it('should behave like a cache', inject(function(superCache) {\n       *    superCache.put('key', 'value');\n       *    superCache.put('another key', 'another value');\n       *\n       *    expect(superCache.info()).toEqual({\n       *      id: 'super-cache',\n       *      size: 2\n       *    });\n       *\n       *    superCache.remove('another key');\n       *    expect(superCache.get('another key')).toBeUndefined();\n       *\n       *    superCache.removeAll();\n       *    expect(superCache.info()).toEqual({\n       *      id: 'super-cache',\n       *      size: 0\n       *    });\n       *  }));\n       * ```\n       */\n      return caches[cacheId] = {\n\n        /**\n         * @ngdoc method\n         * @name $cacheFactory.Cache#put\n         * @kind function\n         *\n         * @description\n         * Inserts a named entry into the {@link $cacheFactory.Cache Cache} object to be\n         * retrieved later, and incrementing the size of the cache if the key was not already\n         * present in the cache. If behaving like an LRU cache, it will also remove stale\n         * entries from the set.\n         *\n         * It will not insert undefined values into the cache.\n         *\n         * @param {string} key the key under which the cached data is stored.\n         * @param {*} value the value to store alongside the key. If it is undefined, the key\n         *    will not be stored.\n         * @returns {*} the value stored.\n         */\n        put: function(key, value) {\n          if (isUndefined(value)) return;\n          if (capacity < Number.MAX_VALUE) {\n            var lruEntry = lruHash[key] || (lruHash[key] = {key: key});\n\n            refresh(lruEntry);\n          }\n\n          if (!(key in data)) size++;\n          data[key] = value;\n\n          if (size > capacity) {\n            this.remove(staleEnd.key);\n          }\n\n          return value;\n        },\n\n        /**\n         * @ngdoc method\n         * @name $cacheFactory.Cache#get\n         * @kind function\n         *\n         * @description\n         * Retrieves named data stored in the {@link $cacheFactory.Cache Cache} object.\n         *\n         * @param {string} key the key of the data to be retrieved\n         * @returns {*} the value stored.\n         */\n        get: function(key) {\n          if (capacity < Number.MAX_VALUE) {\n            var lruEntry = lruHash[key];\n\n            if (!lruEntry) return;\n\n            refresh(lruEntry);\n          }\n\n          return data[key];\n        },\n\n\n        /**\n         * @ngdoc method\n         * @name $cacheFactory.Cache#remove\n         * @kind function\n         *\n         * @description\n         * Removes an entry from the {@link $cacheFactory.Cache Cache} object.\n         *\n         * @param {string} key the key of the entry to be removed\n         */\n        remove: function(key) {\n          if (capacity < Number.MAX_VALUE) {\n            var lruEntry = lruHash[key];\n\n            if (!lruEntry) return;\n\n            if (lruEntry == freshEnd) freshEnd = lruEntry.p;\n            if (lruEntry == staleEnd) staleEnd = lruEntry.n;\n            link(lruEntry.n,lruEntry.p);\n\n            delete lruHash[key];\n          }\n\n          if (!(key in data)) return;\n\n          delete data[key];\n          size--;\n        },\n\n\n        /**\n         * @ngdoc method\n         * @name $cacheFactory.Cache#removeAll\n         * @kind function\n         *\n         * @description\n         * Clears the cache object of any entries.\n         */\n        removeAll: function() {\n          data = createMap();\n          size = 0;\n          lruHash = createMap();\n          freshEnd = staleEnd = null;\n        },\n\n\n        /**\n         * @ngdoc method\n         * @name $cacheFactory.Cache#destroy\n         * @kind function\n         *\n         * @description\n         * Destroys the {@link $cacheFactory.Cache Cache} object entirely,\n         * removing it from the {@link $cacheFactory $cacheFactory} set.\n         */\n        destroy: function() {\n          data = null;\n          stats = null;\n          lruHash = null;\n          delete caches[cacheId];\n        },\n\n\n        /**\n         * @ngdoc method\n         * @name $cacheFactory.Cache#info\n         * @kind function\n         *\n         * @description\n         * Retrieve information regarding a particular {@link $cacheFactory.Cache Cache}.\n         *\n         * @returns {object} an object with the following properties:\n         *   <ul>\n         *     <li>**id**: the id of the cache instance</li>\n         *     <li>**size**: the number of entries kept in the cache instance</li>\n         *     <li>**...**: any additional properties from the options object when creating the\n         *       cache.</li>\n         *   </ul>\n         */\n        info: function() {\n          return extend({}, stats, {size: size});\n        }\n      };\n\n\n      /**\n       * makes the `entry` the freshEnd of the LRU linked list\n       */\n      function refresh(entry) {\n        if (entry != freshEnd) {\n          if (!staleEnd) {\n            staleEnd = entry;\n          } else if (staleEnd == entry) {\n            staleEnd = entry.n;\n          }\n\n          link(entry.n, entry.p);\n          link(entry, freshEnd);\n          freshEnd = entry;\n          freshEnd.n = null;\n        }\n      }\n\n\n      /**\n       * bidirectionally links two entries of the LRU linked list\n       */\n      function link(nextEntry, prevEntry) {\n        if (nextEntry != prevEntry) {\n          if (nextEntry) nextEntry.p = prevEntry; //p stands for previous, 'prev' didn't minify\n          if (prevEntry) prevEntry.n = nextEntry; //n stands for next, 'next' didn't minify\n        }\n      }\n    }\n\n\n  /**\n   * @ngdoc method\n   * @name $cacheFactory#info\n   *\n   * @description\n   * Get information about all the caches that have been created\n   *\n   * @returns {Object} - key-value map of `cacheId` to the result of calling `cache#info`\n   */\n    cacheFactory.info = function() {\n      var info = {};\n      forEach(caches, function(cache, cacheId) {\n        info[cacheId] = cache.info();\n      });\n      return info;\n    };\n\n\n  /**\n   * @ngdoc method\n   * @name $cacheFactory#get\n   *\n   * @description\n   * Get access to a cache object by the `cacheId` used when it was created.\n   *\n   * @param {string} cacheId Name or id of a cache to access.\n   * @returns {object} Cache object identified by the cacheId or undefined if no such cache.\n   */\n    cacheFactory.get = function(cacheId) {\n      return caches[cacheId];\n    };\n\n\n    return cacheFactory;\n  };\n}\n\n/**\n * @ngdoc service\n * @name $templateCache\n *\n * @description\n * The first time a template is used, it is loaded in the template cache for quick retrieval. You\n * can load templates directly into the cache in a `script` tag, or by consuming the\n * `$templateCache` service directly.\n *\n * Adding via the `script` tag:\n *\n * ```html\n *   <script type=\"text/ng-template\" id=\"templateId.html\">\n *     <p>This is the content of the template</p>\n *   </script>\n * ```\n *\n * **Note:** the `script` tag containing the template does not need to be included in the `head` of\n * the document, but it must be a descendent of the {@link ng.$rootElement $rootElement} (IE,\n * element with ng-app attribute), otherwise the template will be ignored.\n *\n * Adding via the `$templateCache` service:\n *\n * ```js\n * var myApp = angular.module('myApp', []);\n * myApp.run(function($templateCache) {\n *   $templateCache.put('templateId.html', 'This is the content of the template');\n * });\n * ```\n *\n * To retrieve the template later, simply use it in your HTML:\n * ```html\n * <div ng-include=\" 'templateId.html' \"></div>\n * ```\n *\n * or get it via Javascript:\n * ```js\n * $templateCache.get('templateId.html')\n * ```\n *\n * See {@link ng.$cacheFactory $cacheFactory}.\n *\n */\nfunction $TemplateCacheProvider() {\n  this.$get = ['$cacheFactory', function($cacheFactory) {\n    return $cacheFactory('templates');\n  }];\n}\n\n/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n *     Any commits to this file should be reviewed with security in mind.  *\n *   Changes to this file can potentially create security vulnerabilities. *\n *          An approval from 2 Core members with history of modifying      *\n *                         this file is required.                          *\n *                                                                         *\n *  Does the change somehow allow for arbitrary javascript to be executed? *\n *    Or allows for someone to change the prototype of built-in objects?   *\n *     Or gives undesired access to variables likes document or window?    *\n * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */\n\n/* ! VARIABLE/FUNCTION NAMING CONVENTIONS THAT APPLY TO THIS FILE!\n *\n * DOM-related variables:\n *\n * - \"node\" - DOM Node\n * - \"element\" - DOM Element or Node\n * - \"$node\" or \"$element\" - jqLite-wrapped node or element\n *\n *\n * Compiler related stuff:\n *\n * - \"linkFn\" - linking fn of a single directive\n * - \"nodeLinkFn\" - function that aggregates all linking fns for a particular node\n * - \"childLinkFn\" -  function that aggregates all linking fns for child nodes of a particular node\n * - \"compositeLinkFn\" - function that aggregates all linking fns for a compilation root (nodeList)\n */\n\n\n/**\n * @ngdoc service\n * @name $compile\n * @kind function\n *\n * @description\n * Compiles an HTML string or DOM into a template and produces a template function, which\n * can then be used to link {@link ng.$rootScope.Scope `scope`} and the template together.\n *\n * The compilation is a process of walking the DOM tree and matching DOM elements to\n * {@link ng.$compileProvider#directive directives}.\n *\n * <div class=\"alert alert-warning\">\n * **Note:** This document is an in-depth reference of all directive options.\n * For a gentle introduction to directives with examples of common use cases,\n * see the {@link guide/directive directive guide}.\n * </div>\n *\n * ## Comprehensive Directive API\n *\n * There are many different options for a directive.\n *\n * The difference resides in the return value of the factory function.\n * You can either return a {@link $compile#directive-definition-object Directive Definition Object (see below)}\n * that defines the directive properties, or just the `postLink` function (all other properties will have\n * the default values).\n *\n * <div class=\"alert alert-success\">\n * **Best Practice:** It's recommended to use the \"directive definition object\" form.\n * </div>\n *\n * Here's an example directive declared with a Directive Definition Object:\n *\n * ```js\n *   var myModule = angular.module(...);\n *\n *   myModule.directive('directiveName', function factory(injectables) {\n *     var directiveDefinitionObject = {\n *       priority: 0,\n *       template: '<div></div>', // or // function(tElement, tAttrs) { ... },\n *       // or\n *       // templateUrl: 'directive.html', // or // function(tElement, tAttrs) { ... },\n *       transclude: false,\n *       restrict: 'A',\n *       templateNamespace: 'html',\n *       scope: false,\n *       controller: function($scope, $element, $attrs, $transclude, otherInjectables) { ... },\n *       controllerAs: 'stringIdentifier',\n *       bindToController: false,\n *       require: 'siblingDirectiveName', // or // ['^parentDirectiveName', '?optionalDirectiveName', '?^optionalParent'],\n *       compile: function compile(tElement, tAttrs, transclude) {\n *         return {\n *           pre: function preLink(scope, iElement, iAttrs, controller) { ... },\n *           post: function postLink(scope, iElement, iAttrs, controller) { ... }\n *         }\n *         // or\n *         // return function postLink( ... ) { ... }\n *       },\n *       // or\n *       // link: {\n *       //  pre: function preLink(scope, iElement, iAttrs, controller) { ... },\n *       //  post: function postLink(scope, iElement, iAttrs, controller) { ... }\n *       // }\n *       // or\n *       // link: function postLink( ... ) { ... }\n *     };\n *     return directiveDefinitionObject;\n *   });\n * ```\n *\n * <div class=\"alert alert-warning\">\n * **Note:** Any unspecified options will use the default value. You can see the default values below.\n * </div>\n *\n * Therefore the above can be simplified as:\n *\n * ```js\n *   var myModule = angular.module(...);\n *\n *   myModule.directive('directiveName', function factory(injectables) {\n *     var directiveDefinitionObject = {\n *       link: function postLink(scope, iElement, iAttrs) { ... }\n *     };\n *     return directiveDefinitionObject;\n *     // or\n *     // return function postLink(scope, iElement, iAttrs) { ... }\n *   });\n * ```\n *\n * ### Life-cycle hooks\n * Directive controllers can provide the following methods that are called by Angular at points in the life-cycle of the\n * directive:\n * * `$onInit()` - Called on each controller after all the controllers on an element have been constructed and\n *   had their bindings initialized (and before the pre &amp; post linking functions for the directives on\n *   this element). This is a good place to put initialization code for your controller.\n * * `$onChanges(changesObj)` - Called whenever one-way (`<`) or interpolation (`@`) bindings are updated. The\n *   `changesObj` is a hash whose keys are the names of the bound properties that have changed, and the values are an\n *   object of the form `{ currentValue, previousValue, isFirstChange() }`. Use this hook to trigger updates within a\n *   component such as cloning the bound value to prevent accidental mutation of the outer value.\n * * `$doCheck()` - Called on each turn of the digest cycle. Provides an opportunity to detect and act on\n *   changes. Any actions that you wish to take in response to the changes that you detect must be\n *   invoked from this hook; implementing this has no effect on when `$onChanges` is called. For example, this hook\n *   could be useful if you wish to perform a deep equality check, or to check a Date object, changes to which would not\n *   be detected by Angular's change detector and thus not trigger `$onChanges`. This hook is invoked with no arguments;\n *   if detecting changes, you must store the previous value(s) for comparison to the current values.\n * * `$onDestroy()` - Called on a controller when its containing scope is destroyed. Use this hook for releasing\n *   external resources, watches and event handlers. Note that components have their `$onDestroy()` hooks called in\n *   the same order as the `$scope.$broadcast` events are triggered, which is top down. This means that parent\n *   components will have their `$onDestroy()` hook called before child components.\n * * `$postLink()` - Called after this controller's element and its children have been linked. Similar to the post-link\n *   function this hook can be used to set up DOM event handlers and do direct DOM manipulation.\n *   Note that child elements that contain `templateUrl` directives will not have been compiled and linked since\n *   they are waiting for their template to load asynchronously and their own compilation and linking has been\n *   suspended until that occurs.\n *\n * #### Comparison with Angular 2 life-cycle hooks\n * Angular 2 also uses life-cycle hooks for its components. While the Angular 1 life-cycle hooks are similar there are\n * some differences that you should be aware of, especially when it comes to moving your code from Angular 1 to Angular 2:\n *\n * * Angular 1 hooks are prefixed with `$`, such as `$onInit`. Angular 2 hooks are prefixed with `ng`, such as `ngOnInit`.\n * * Angular 1 hooks can be defined on the controller prototype or added to the controller inside its constructor.\n *   In Angular 2 you can only define hooks on the prototype of the Component class.\n * * Due to the differences in change-detection, you may get many more calls to `$doCheck` in Angular 1 than you would to\n *   `ngDoCheck` in Angular 2\n * * Changes to the model inside `$doCheck` will trigger new turns of the digest loop, which will cause the changes to be\n *   propagated throughout the application.\n *   Angular 2 does not allow the `ngDoCheck` hook to trigger a change outside of the component. It will either throw an\n *   error or do nothing depending upon the state of `enableProdMode()`.\n *\n * #### Life-cycle hook examples\n *\n * This example shows how you can check for mutations to a Date object even though the identity of the object\n * has not changed.\n *\n * <example name=\"doCheckDateExample\" module=\"do-check-module\">\n *   <file name=\"app.js\">\n *     angular.module('do-check-module', [])\n *       .component('app', {\n *         template:\n *           'Month: <input ng-model=\"$ctrl.month\" ng-change=\"$ctrl.updateDate()\">' +\n *           'Date: {{ $ctrl.date }}' +\n *           '<test date=\"$ctrl.date\"></test>',\n *         controller: function() {\n *           this.date = new Date();\n *           this.month = this.date.getMonth();\n *           this.updateDate = function() {\n *             this.date.setMonth(this.month);\n *           };\n *         }\n *       })\n *       .component('test', {\n *         bindings: { date: '<' },\n *         template:\n *           '<pre>{{ $ctrl.log | json }}</pre>',\n *         controller: function() {\n *           var previousValue;\n *           this.log = [];\n *           this.$doCheck = function() {\n *             var currentValue = this.date && this.date.valueOf();\n *             if (previousValue !== currentValue) {\n *               this.log.push('doCheck: date mutated: ' + this.date);\n *               previousValue = currentValue;\n *             }\n *           };\n *         }\n *       });\n *   </file>\n *   <file name=\"index.html\">\n *     <app></app>\n *   </file>\n * </example>\n *\n * This example show how you might use `$doCheck` to trigger changes in your component's inputs even if the\n * actual identity of the component doesn't change. (Be aware that cloning and deep equality checks on large\n * arrays or objects can have a negative impact on your application performance)\n *\n * <example name=\"doCheckArrayExample\" module=\"do-check-module\">\n *   <file name=\"index.html\">\n *     <div ng-init=\"items = []\">\n *       <button ng-click=\"items.push(items.length)\">Add Item</button>\n *       <button ng-click=\"items = []\">Reset Items</button>\n *       <pre>{{ items }}</pre>\n *       <test items=\"items\"></test>\n *     </div>\n *   </file>\n *   <file name=\"app.js\">\n *      angular.module('do-check-module', [])\n *        .component('test', {\n *          bindings: { items: '<' },\n *          template:\n *            '<pre>{{ $ctrl.log | json }}</pre>',\n *          controller: function() {\n *            this.log = [];\n *\n *            this.$doCheck = function() {\n *              if (this.items_ref !== this.items) {\n *                this.log.push('doCheck: items changed');\n *                this.items_ref = this.items;\n *              }\n *              if (!angular.equals(this.items_clone, this.items)) {\n *                this.log.push('doCheck: items mutated');\n *                this.items_clone = angular.copy(this.items);\n *              }\n *            };\n *          }\n *        });\n *   </file>\n * </example>\n *\n *\n * ### Directive Definition Object\n *\n * The directive definition object provides instructions to the {@link ng.$compile\n * compiler}. The attributes are:\n *\n * #### `multiElement`\n * When this property is set to true, the HTML compiler will collect DOM nodes between\n * nodes with the attributes `directive-name-start` and `directive-name-end`, and group them\n * together as the directive elements. It is recommended that this feature be used on directives\n * which are not strictly behavioral (such as {@link ngClick}), and which\n * do not manipulate or replace child nodes (such as {@link ngInclude}).\n *\n * #### `priority`\n * When there are multiple directives defined on a single DOM element, sometimes it\n * is necessary to specify the order in which the directives are applied. The `priority` is used\n * to sort the directives before their `compile` functions get called. Priority is defined as a\n * number. Directives with greater numerical `priority` are compiled first. Pre-link functions\n * are also run in priority order, but post-link functions are run in reverse order. The order\n * of directives with the same priority is undefined. The default priority is `0`.\n *\n * #### `terminal`\n * If set to true then the current `priority` will be the last set of directives\n * which will execute (any directives at the current priority will still execute\n * as the order of execution on same `priority` is undefined). Note that expressions\n * and other directives used in the directive's template will also be excluded from execution.\n *\n * #### `scope`\n * The scope property can be `true`, an object or a falsy value:\n *\n * * **falsy:** No scope will be created for the directive. The directive will use its parent's scope.\n *\n * * **`true`:** A new child scope that prototypically inherits from its parent will be created for\n * the directive's element. If multiple directives on the same element request a new scope,\n * only one new scope is created. The new scope rule does not apply for the root of the template\n * since the root of the template always gets a new scope.\n *\n * * **`{...}` (an object hash):** A new \"isolate\" scope is created for the directive's element. The\n * 'isolate' scope differs from normal scope in that it does not prototypically inherit from its parent\n * scope. This is useful when creating reusable components, which should not accidentally read or modify\n * data in the parent scope.\n *\n * The 'isolate' scope object hash defines a set of local scope properties derived from attributes on the\n * directive's element. These local properties are useful for aliasing values for templates. The keys in\n * the object hash map to the name of the property on the isolate scope; the values define how the property\n * is bound to the parent scope, via matching attributes on the directive's element:\n *\n * * `@` or `@attr` - bind a local scope property to the value of DOM attribute. The result is\n *   always a string since DOM attributes are strings. If no `attr` name is specified then the\n *   attribute name is assumed to be the same as the local name. Given `<my-component\n *   my-attr=\"hello {{name}}\">` and the isolate scope definition `scope: { localName:'@myAttr' }`,\n *   the directive's scope property `localName` will reflect the interpolated value of `hello\n *   {{name}}`. As the `name` attribute changes so will the `localName` property on the directive's\n *   scope. The `name` is read from the parent scope (not the directive's scope).\n *\n * * `=` or `=attr` - set up a bidirectional binding between a local scope property and an expression\n *   passed via the attribute `attr`. The expression is evaluated in the context of the parent scope.\n *   If no `attr` name is specified then the attribute name is assumed to be the same as the local\n *   name. Given `<my-component my-attr=\"parentModel\">` and the isolate scope definition `scope: {\n *   localModel: '=myAttr' }`, the property `localModel` on the directive's scope will reflect the\n *   value of `parentModel` on the parent scope. Changes to `parentModel` will be reflected in\n *   `localModel` and vice versa. Optional attributes should be marked as such with a question mark:\n *   `=?` or `=?attr`. If the binding expression is non-assignable, or if the attribute isn't\n *   optional and doesn't exist, an exception ({@link error/$compile/nonassign `$compile:nonassign`})\n *   will be thrown upon discovering changes to the local value, since it will be impossible to sync\n *   them back to the parent scope. By default, the {@link ng.$rootScope.Scope#$watch `$watch`}\n *   method is used for tracking changes, and the equality check is based on object identity.\n *   However, if an object literal or an array literal is passed as the binding expression, the\n *   equality check is done by value (using the {@link angular.equals} function). It's also possible\n *   to watch the evaluated value shallowly with {@link ng.$rootScope.Scope#$watchCollection\n *   `$watchCollection`}: use `=*` or `=*attr` (`=*?` or `=*?attr` if the attribute is optional).\n *\n  * * `<` or `<attr` - set up a one-way (one-directional) binding between a local scope property and an\n *   expression passed via the attribute `attr`. The expression is evaluated in the context of the\n *   parent scope. If no `attr` name is specified then the attribute name is assumed to be the same as the\n *   local name. You can also make the binding optional by adding `?`: `<?` or `<?attr`.\n *\n *   For example, given `<my-component my-attr=\"parentModel\">` and directive definition of\n *   `scope: { localModel:'<myAttr' }`, then the isolated scope property `localModel` will reflect the\n *   value of `parentModel` on the parent scope. Any changes to `parentModel` will be reflected\n *   in `localModel`, but changes in `localModel` will not reflect in `parentModel`. There are however\n *   two caveats:\n *     1. one-way binding does not copy the value from the parent to the isolate scope, it simply\n *     sets the same value. That means if your bound value is an object, changes to its properties\n *     in the isolated scope will be reflected in the parent scope (because both reference the same object).\n *     2. one-way binding watches changes to the **identity** of the parent value. That means the\n *     {@link ng.$rootScope.Scope#$watch `$watch`} on the parent value only fires if the reference\n *     to the value has changed. In most cases, this should not be of concern, but can be important\n *     to know if you one-way bind to an object, and then replace that object in the isolated scope.\n *     If you now change a property of the object in your parent scope, the change will not be\n *     propagated to the isolated scope, because the identity of the object on the parent scope\n *     has not changed. Instead you must assign a new object.\n *\n *   One-way binding is useful if you do not plan to propagate changes to your isolated scope bindings\n *   back to the parent. However, it does not make this completely impossible.\n *\n * * `&` or `&attr` - provides a way to execute an expression in the context of the parent scope. If\n *   no `attr` name is specified then the attribute name is assumed to be the same as the local name.\n *   Given `<my-component my-attr=\"count = count + value\">` and the isolate scope definition `scope: {\n *   localFn:'&myAttr' }`, the isolate scope property `localFn` will point to a function wrapper for\n *   the `count = count + value` expression. Often it's desirable to pass data from the isolated scope\n *   via an expression to the parent scope. This can be done by passing a map of local variable names\n *   and values into the expression wrapper fn. For example, if the expression is `increment(amount)`\n *   then we can specify the amount value by calling the `localFn` as `localFn({amount: 22})`.\n *\n * In general it's possible to apply more than one directive to one element, but there might be limitations\n * depending on the type of scope required by the directives. The following points will help explain these limitations.\n * For simplicity only two directives are taken into account, but it is also applicable for several directives:\n *\n * * **no scope** + **no scope** => Two directives which don't require their own scope will use their parent's scope\n * * **child scope** + **no scope** =>  Both directives will share one single child scope\n * * **child scope** + **child scope** =>  Both directives will share one single child scope\n * * **isolated scope** + **no scope** =>  The isolated directive will use it's own created isolated scope. The other directive will use\n * its parent's scope\n * * **isolated scope** + **child scope** =>  **Won't work!** Only one scope can be related to one element. Therefore these directives cannot\n * be applied to the same element.\n * * **isolated scope** + **isolated scope**  =>  **Won't work!** Only one scope can be related to one element. Therefore these directives\n * cannot be applied to the same element.\n *\n *\n * #### `bindToController`\n * This property is used to bind scope properties directly to the controller. It can be either\n * `true` or an object hash with the same format as the `scope` property. Additionally, a controller\n * alias must be set, either by using `controllerAs: 'myAlias'` or by specifying the alias in the controller\n * definition: `controller: 'myCtrl as myAlias'`.\n *\n * When an isolate scope is used for a directive (see above), `bindToController: true` will\n * allow a component to have its properties bound to the controller, rather than to scope.\n *\n * After the controller is instantiated, the initial values of the isolate scope bindings will be bound to the controller\n * properties. You can access these bindings once they have been initialized by providing a controller method called\n * `$onInit`, which is called after all the controllers on an element have been constructed and had their bindings\n * initialized.\n *\n * <div class=\"alert alert-warning\">\n * **Deprecation warning:** although bindings for non-ES6 class controllers are currently\n * bound to `this` before the controller constructor is called, this use is now deprecated. Please place initialization\n * code that relies upon bindings inside a `$onInit` method on the controller, instead.\n * </div>\n *\n * It is also possible to set `bindToController` to an object hash with the same format as the `scope` property.\n * This will set up the scope bindings to the controller directly. Note that `scope` can still be used\n * to define which kind of scope is created. By default, no scope is created. Use `scope: {}` to create an isolate\n * scope (useful for component directives).\n *\n * If both `bindToController` and `scope` are defined and have object hashes, `bindToController` overrides `scope`.\n *\n *\n * #### `controller`\n * Controller constructor function. The controller is instantiated before the\n * pre-linking phase and can be accessed by other directives (see\n * `require` attribute). This allows the directives to communicate with each other and augment\n * each other's behavior. The controller is injectable (and supports bracket notation) with the following locals:\n *\n * * `$scope` - Current scope associated with the element\n * * `$element` - Current element\n * * `$attrs` - Current attributes object for the element\n * * `$transclude` - A transclude linking function pre-bound to the correct transclusion scope:\n *   `function([scope], cloneLinkingFn, futureParentElement, slotName)`:\n *    * `scope`: (optional) override the scope.\n *    * `cloneLinkingFn`: (optional) argument to create clones of the original transcluded content.\n *    * `futureParentElement` (optional):\n *        * defines the parent to which the `cloneLinkingFn` will add the cloned elements.\n *        * default: `$element.parent()` resp. `$element` for `transclude:'element'` resp. `transclude:true`.\n *        * only needed for transcludes that are allowed to contain non html elements (e.g. SVG elements)\n *          and when the `cloneLinkinFn` is passed,\n *          as those elements need to created and cloned in a special way when they are defined outside their\n *          usual containers (e.g. like `<svg>`).\n *        * See also the `directive.templateNamespace` property.\n *    * `slotName`: (optional) the name of the slot to transclude. If falsy (e.g. `null`, `undefined` or `''`)\n *      then the default translusion is provided.\n *    The `$transclude` function also has a method on it, `$transclude.isSlotFilled(slotName)`, which returns\n *    `true` if the specified slot contains content (i.e. one or more DOM nodes).\n *\n * #### `require`\n * Require another directive and inject its controller as the fourth argument to the linking function. The\n * `require` property can be a string, an array or an object:\n * * a **string** containing the name of the directive to pass to the linking function\n * * an **array** containing the names of directives to pass to the linking function. The argument passed to the\n * linking function will be an array of controllers in the same order as the names in the `require` property\n * * an **object** whose property values are the names of the directives to pass to the linking function. The argument\n * passed to the linking function will also be an object with matching keys, whose values will hold the corresponding\n * controllers.\n *\n * If the `require` property is an object and `bindToController` is truthy, then the required controllers are\n * bound to the controller using the keys of the `require` property. This binding occurs after all the controllers\n * have been constructed but before `$onInit` is called.\n * If the name of the required controller is the same as the local name (the key), the name can be\n * omitted. For example, `{parentDir: '^^'}` is equivalent to `{parentDir: '^^parentDir'}`.\n * See the {@link $compileProvider#component} helper for an example of how this can be used.\n * If no such required directive(s) can be found, or if the directive does not have a controller, then an error is\n * raised (unless no link function is specified and the required controllers are not being bound to the directive\n * controller, in which case error checking is skipped). The name can be prefixed with:\n *\n * * (no prefix) - Locate the required controller on the current element. Throw an error if not found.\n * * `?` - Attempt to locate the required controller or pass `null` to the `link` fn if not found.\n * * `^` - Locate the required controller by searching the element and its parents. Throw an error if not found.\n * * `^^` - Locate the required controller by searching the element's parents. Throw an error if not found.\n * * `?^` - Attempt to locate the required controller by searching the element and its parents or pass\n *   `null` to the `link` fn if not found.\n * * `?^^` - Attempt to locate the required controller by searching the element's parents, or pass\n *   `null` to the `link` fn if not found.\n *\n *\n * #### `controllerAs`\n * Identifier name for a reference to the controller in the directive's scope.\n * This allows the controller to be referenced from the directive template. This is especially\n * useful when a directive is used as component, i.e. with an `isolate` scope. It's also possible\n * to use it in a directive without an `isolate` / `new` scope, but you need to be aware that the\n * `controllerAs` reference might overwrite a property that already exists on the parent scope.\n *\n *\n * #### `restrict`\n * String of subset of `EACM` which restricts the directive to a specific directive\n * declaration style. If omitted, the defaults (elements and attributes) are used.\n *\n * * `E` - Element name (default): `<my-directive></my-directive>`\n * * `A` - Attribute (default): `<div my-directive=\"exp\"></div>`\n * * `C` - Class: `<div class=\"my-directive: exp;\"></div>`\n * * `M` - Comment: `<!-- directive: my-directive exp -->`\n *\n *\n * #### `templateNamespace`\n * String representing the document type used by the markup in the template.\n * AngularJS needs this information as those elements need to be created and cloned\n * in a special way when they are defined outside their usual containers like `<svg>` and `<math>`.\n *\n * * `html` - All root nodes in the template are HTML. Root nodes may also be\n *   top-level elements such as `<svg>` or `<math>`.\n * * `svg` - The root nodes in the template are SVG elements (excluding `<math>`).\n * * `math` - The root nodes in the template are MathML elements (excluding `<svg>`).\n *\n * If no `templateNamespace` is specified, then the namespace is considered to be `html`.\n *\n * #### `template`\n * HTML markup that may:\n * * Replace the contents of the directive's element (default).\n * * Replace the directive's element itself (if `replace` is true - DEPRECATED).\n * * Wrap the contents of the directive's element (if `transclude` is true).\n *\n * Value may be:\n *\n * * A string. For example `<div red-on-hover>{{delete_str}}</div>`.\n * * A function which takes two arguments `tElement` and `tAttrs` (described in the `compile`\n *   function api below) and returns a string value.\n *\n *\n * #### `templateUrl`\n * This is similar to `template` but the template is loaded from the specified URL, asynchronously.\n *\n * Because template loading is asynchronous the compiler will suspend compilation of directives on that element\n * for later when the template has been resolved.  In the meantime it will continue to compile and link\n * sibling and parent elements as though this element had not contained any directives.\n *\n * The compiler does not suspend the entire compilation to wait for templates to be loaded because this\n * would result in the whole app \"stalling\" until all templates are loaded asynchronously - even in the\n * case when only one deeply nested directive has `templateUrl`.\n *\n * Template loading is asynchronous even if the template has been preloaded into the {@link $templateCache}\n *\n * You can specify `templateUrl` as a string representing the URL or as a function which takes two\n * arguments `tElement` and `tAttrs` (described in the `compile` function api below) and returns\n * a string value representing the url.  In either case, the template URL is passed through {@link\n * $sce#getTrustedResourceUrl $sce.getTrustedResourceUrl}.\n *\n *\n * #### `replace` ([*DEPRECATED*!], will be removed in next major release - i.e. v2.0)\n * specify what the template should replace. Defaults to `false`.\n *\n * * `true` - the template will replace the directive's element.\n * * `false` - the template will replace the contents of the directive's element.\n *\n * The replacement process migrates all of the attributes / classes from the old element to the new\n * one. See the {@link guide/directive#template-expanding-directive\n * Directives Guide} for an example.\n *\n * There are very few scenarios where element replacement is required for the application function,\n * the main one being reusable custom components that are used within SVG contexts\n * (because SVG doesn't work with custom elements in the DOM tree).\n *\n * #### `transclude`\n * Extract the contents of the element where the directive appears and make it available to the directive.\n * The contents are compiled and provided to the directive as a **transclusion function**. See the\n * {@link $compile#transclusion Transclusion} section below.\n *\n *\n * #### `compile`\n *\n * ```js\n *   function compile(tElement, tAttrs, transclude) { ... }\n * ```\n *\n * The compile function deals with transforming the template DOM. Since most directives do not do\n * template transformation, it is not used often. The compile function takes the following arguments:\n *\n *   * `tElement` - template element - The element where the directive has been declared. It is\n *     safe to do template transformation on the element and child elements only.\n *\n *   * `tAttrs` - template attributes - Normalized list of attributes declared on this element shared\n *     between all directive compile functions.\n *\n *   * `transclude` -  [*DEPRECATED*!] A transclude linking function: `function(scope, cloneLinkingFn)`\n *\n * <div class=\"alert alert-warning\">\n * **Note:** The template instance and the link instance may be different objects if the template has\n * been cloned. For this reason it is **not** safe to do anything other than DOM transformations that\n * apply to all cloned DOM nodes within the compile function. Specifically, DOM listener registration\n * should be done in a linking function rather than in a compile function.\n * </div>\n\n * <div class=\"alert alert-warning\">\n * **Note:** The compile function cannot handle directives that recursively use themselves in their\n * own templates or compile functions. Compiling these directives results in an infinite loop and\n * stack overflow errors.\n *\n * This can be avoided by manually using $compile in the postLink function to imperatively compile\n * a directive's template instead of relying on automatic template compilation via `template` or\n * `templateUrl` declaration or manual compilation inside the compile function.\n * </div>\n *\n * <div class=\"alert alert-danger\">\n * **Note:** The `transclude` function that is passed to the compile function is deprecated, as it\n *   e.g. does not know about the right outer scope. Please use the transclude function that is passed\n *   to the link function instead.\n * </div>\n\n * A compile function can have a return value which can be either a function or an object.\n *\n * * returning a (post-link) function - is equivalent to registering the linking function via the\n *   `link` property of the config object when the compile function is empty.\n *\n * * returning an object with function(s) registered via `pre` and `post` properties - allows you to\n *   control when a linking function should be called during the linking phase. See info about\n *   pre-linking and post-linking functions below.\n *\n *\n * #### `link`\n * This property is used only if the `compile` property is not defined.\n *\n * ```js\n *   function link(scope, iElement, iAttrs, controller, transcludeFn) { ... }\n * ```\n *\n * The link function is responsible for registering DOM listeners as well as updating the DOM. It is\n * executed after the template has been cloned. This is where most of the directive logic will be\n * put.\n *\n *   * `scope` - {@link ng.$rootScope.Scope Scope} - The scope to be used by the\n *     directive for registering {@link ng.$rootScope.Scope#$watch watches}.\n *\n *   * `iElement` - instance element - The element where the directive is to be used. It is safe to\n *     manipulate the children of the element only in `postLink` function since the children have\n *     already been linked.\n *\n *   * `iAttrs` - instance attributes - Normalized list of attributes declared on this element shared\n *     between all directive linking functions.\n *\n *   * `controller` - the directive's required controller instance(s) - Instances are shared\n *     among all directives, which allows the directives to use the controllers as a communication\n *     channel. The exact value depends on the directive's `require` property:\n *       * no controller(s) required: the directive's own controller, or `undefined` if it doesn't have one\n *       * `string`: the controller instance\n *       * `array`: array of controller instances\n *\n *     If a required controller cannot be found, and it is optional, the instance is `null`,\n *     otherwise the {@link error:$compile:ctreq Missing Required Controller} error is thrown.\n *\n *     Note that you can also require the directive's own controller - it will be made available like\n *     any other controller.\n *\n *   * `transcludeFn` - A transclude linking function pre-bound to the correct transclusion scope.\n *     This is the same as the `$transclude` parameter of directive controllers,\n *     see {@link ng.$compile#-controller- the controller section for details}.\n *     `function([scope], cloneLinkingFn, futureParentElement)`.\n *\n * #### Pre-linking function\n *\n * Executed before the child elements are linked. Not safe to do DOM transformation since the\n * compiler linking function will fail to locate the correct elements for linking.\n *\n * #### Post-linking function\n *\n * Executed after the child elements are linked.\n *\n * Note that child elements that contain `templateUrl` directives will not have been compiled\n * and linked since they are waiting for their template to load asynchronously and their own\n * compilation and linking has been suspended until that occurs.\n *\n * It is safe to do DOM transformation in the post-linking function on elements that are not waiting\n * for their async templates to be resolved.\n *\n *\n * ### Transclusion\n *\n * Transclusion is the process of extracting a collection of DOM elements from one part of the DOM and\n * copying them to another part of the DOM, while maintaining their connection to the original AngularJS\n * scope from where they were taken.\n *\n * Transclusion is used (often with {@link ngTransclude}) to insert the\n * original contents of a directive's element into a specified place in the template of the directive.\n * The benefit of transclusion, over simply moving the DOM elements manually, is that the transcluded\n * content has access to the properties on the scope from which it was taken, even if the directive\n * has isolated scope.\n * See the {@link guide/directive#creating-a-directive-that-wraps-other-elements Directives Guide}.\n *\n * This makes it possible for the widget to have private state for its template, while the transcluded\n * content has access to its originating scope.\n *\n * <div class=\"alert alert-warning\">\n * **Note:** When testing an element transclude directive you must not place the directive at the root of the\n * DOM fragment that is being compiled. See {@link guide/unit-testing#testing-transclusion-directives\n * Testing Transclusion Directives}.\n * </div>\n *\n * There are three kinds of transclusion depending upon whether you want to transclude just the contents of the\n * directive's element, the entire element or multiple parts of the element contents:\n *\n * * `true` - transclude the content (i.e. the child nodes) of the directive's element.\n * * `'element'` - transclude the whole of the directive's element including any directives on this\n *   element that defined at a lower priority than this directive. When used, the `template`\n *   property is ignored.\n * * **`{...}` (an object hash):** - map elements of the content onto transclusion \"slots\" in the template.\n *\n * **Mult-slot transclusion** is declared by providing an object for the `transclude` property.\n *\n * This object is a map where the keys are the name of the slot to fill and the value is an element selector\n * used to match the HTML to the slot. The element selector should be in normalized form (e.g. `myElement`)\n * and will match the standard element variants (e.g. `my-element`, `my:element`, `data-my-element`, etc).\n *\n * For further information check out the guide on {@link guide/directive#matching-directives Matching Directives}\n *\n * If the element selector is prefixed with a `?` then that slot is optional.\n *\n * For example, the transclude object `{ slotA: '?myCustomElement' }` maps `<my-custom-element>` elements to\n * the `slotA` slot, which can be accessed via the `$transclude` function or via the {@link ngTransclude} directive.\n *\n * Slots that are not marked as optional (`?`) will trigger a compile time error if there are no matching elements\n * in the transclude content. If you wish to know if an optional slot was filled with content, then you can call\n * `$transclude.isSlotFilled(slotName)` on the transclude function passed to the directive's link function and\n * injectable into the directive's controller.\n *\n *\n * #### Transclusion Functions\n *\n * When a directive requests transclusion, the compiler extracts its contents and provides a **transclusion\n * function** to the directive's `link` function and `controller`. This transclusion function is a special\n * **linking function** that will return the compiled contents linked to a new transclusion scope.\n *\n * <div class=\"alert alert-info\">\n * If you are just using {@link ngTransclude} then you don't need to worry about this function, since\n * ngTransclude will deal with it for us.\n * </div>\n *\n * If you want to manually control the insertion and removal of the transcluded content in your directive\n * then you must use this transclude function. When you call a transclude function it returns a a jqLite/JQuery\n * object that contains the compiled DOM, which is linked to the correct transclusion scope.\n *\n * When you call a transclusion function you can pass in a **clone attach function**. This function accepts\n * two parameters, `function(clone, scope) { ... }`, where the `clone` is a fresh compiled copy of your transcluded\n * content and the `scope` is the newly created transclusion scope, to which the clone is bound.\n *\n * <div class=\"alert alert-info\">\n * **Best Practice**: Always provide a `cloneFn` (clone attach function) when you call a transclude function\n * since you then get a fresh clone of the original DOM and also have access to the new transclusion scope.\n * </div>\n *\n * It is normal practice to attach your transcluded content (`clone`) to the DOM inside your **clone\n * attach function**:\n *\n * ```js\n * var transcludedContent, transclusionScope;\n *\n * $transclude(function(clone, scope) {\n *   element.append(clone);\n *   transcludedContent = clone;\n *   transclusionScope = scope;\n * });\n * ```\n *\n * Later, if you want to remove the transcluded content from your DOM then you should also destroy the\n * associated transclusion scope:\n *\n * ```js\n * transcludedContent.remove();\n * transclusionScope.$destroy();\n * ```\n *\n * <div class=\"alert alert-info\">\n * **Best Practice**: if you intend to add and remove transcluded content manually in your directive\n * (by calling the transclude function to get the DOM and calling `element.remove()` to remove it),\n * then you are also responsible for calling `$destroy` on the transclusion scope.\n * </div>\n *\n * The built-in DOM manipulation directives, such as {@link ngIf}, {@link ngSwitch} and {@link ngRepeat}\n * automatically destroy their transcluded clones as necessary so you do not need to worry about this if\n * you are simply using {@link ngTransclude} to inject the transclusion into your directive.\n *\n *\n * #### Transclusion Scopes\n *\n * When you call a transclude function it returns a DOM fragment that is pre-bound to a **transclusion\n * scope**. This scope is special, in that it is a child of the directive's scope (and so gets destroyed\n * when the directive's scope gets destroyed) but it inherits the properties of the scope from which it\n * was taken.\n *\n * For example consider a directive that uses transclusion and isolated scope. The DOM hierarchy might look\n * like this:\n *\n * ```html\n * <div ng-app>\n *   <div isolate>\n *     <div transclusion>\n *     </div>\n *   </div>\n * </div>\n * ```\n *\n * The `$parent` scope hierarchy will look like this:\n *\n   ```\n   - $rootScope\n     - isolate\n       - transclusion\n   ```\n *\n * but the scopes will inherit prototypically from different scopes to their `$parent`.\n *\n   ```\n   - $rootScope\n     - transclusion\n   - isolate\n   ```\n *\n *\n * ### Attributes\n *\n * The {@link ng.$compile.directive.Attributes Attributes} object - passed as a parameter in the\n * `link()` or `compile()` functions. It has a variety of uses.\n *\n * * *Accessing normalized attribute names:* Directives like 'ngBind' can be expressed in many ways:\n *   'ng:bind', `data-ng-bind`, or 'x-ng-bind'. The attributes object allows for normalized access\n *   to the attributes.\n *\n * * *Directive inter-communication:* All directives share the same instance of the attributes\n *   object which allows the directives to use the attributes object as inter directive\n *   communication.\n *\n * * *Supports interpolation:* Interpolation attributes are assigned to the attribute object\n *   allowing other directives to read the interpolated value.\n *\n * * *Observing interpolated attributes:* Use `$observe` to observe the value changes of attributes\n *   that contain interpolation (e.g. `src=\"{{bar}}\"`). Not only is this very efficient but it's also\n *   the only way to easily get the actual value because during the linking phase the interpolation\n *   hasn't been evaluated yet and so the value is at this time set to `undefined`.\n *\n * ```js\n * function linkingFn(scope, elm, attrs, ctrl) {\n *   // get the attribute value\n *   console.log(attrs.ngModel);\n *\n *   // change the attribute\n *   attrs.$set('ngModel', 'new value');\n *\n *   // observe changes to interpolated attribute\n *   attrs.$observe('ngModel', function(value) {\n *     console.log('ngModel has changed value to ' + value);\n *   });\n * }\n * ```\n *\n * ## Example\n *\n * <div class=\"alert alert-warning\">\n * **Note**: Typically directives are registered with `module.directive`. The example below is\n * to illustrate how `$compile` works.\n * </div>\n *\n <example module=\"compileExample\">\n   <file name=\"index.html\">\n    <script>\n      angular.module('compileExample', [], function($compileProvider) {\n        // configure new 'compile' directive by passing a directive\n        // factory function. The factory function injects the '$compile'\n        $compileProvider.directive('compile', function($compile) {\n          // directive factory creates a link function\n          return function(scope, element, attrs) {\n            scope.$watch(\n              function(scope) {\n                 // watch the 'compile' expression for changes\n                return scope.$eval(attrs.compile);\n              },\n              function(value) {\n                // when the 'compile' expression changes\n                // assign it into the current DOM\n                element.html(value);\n\n                // compile the new DOM and link it to the current\n                // scope.\n                // NOTE: we only compile .childNodes so that\n                // we don't get into infinite loop compiling ourselves\n                $compile(element.contents())(scope);\n              }\n            );\n          };\n        });\n      })\n      .controller('GreeterController', ['$scope', function($scope) {\n        $scope.name = 'Angular';\n        $scope.html = 'Hello {{name}}';\n      }]);\n    </script>\n    <div ng-controller=\"GreeterController\">\n      <input ng-model=\"name\"> <br/>\n      <textarea ng-model=\"html\"></textarea> <br/>\n      <div compile=\"html\"></div>\n    </div>\n   </file>\n   <file name=\"protractor.js\" type=\"protractor\">\n     it('should auto compile', function() {\n       var textarea = $('textarea');\n       var output = $('div[compile]');\n       // The initial state reads 'Hello Angular'.\n       expect(output.getText()).toBe('Hello Angular');\n       textarea.clear();\n       textarea.sendKeys('{{name}}!');\n       expect(output.getText()).toBe('Angular!');\n     });\n   </file>\n </example>\n\n *\n *\n * @param {string|DOMElement} element Element or HTML string to compile into a template function.\n * @param {function(angular.Scope, cloneAttachFn=)} transclude function available to directives - DEPRECATED.\n *\n * <div class=\"alert alert-danger\">\n * **Note:** Passing a `transclude` function to the $compile function is deprecated, as it\n *   e.g. will not use the right outer scope. Please pass the transclude function as a\n *   `parentBoundTranscludeFn` to the link function instead.\n * </div>\n *\n * @param {number} maxPriority only apply directives lower than given priority (Only effects the\n *                 root element(s), not their children)\n * @returns {function(scope, cloneAttachFn=, options=)} a link function which is used to bind template\n * (a DOM element/tree) to a scope. Where:\n *\n *  * `scope` - A {@link ng.$rootScope.Scope Scope} to bind to.\n *  * `cloneAttachFn` - If `cloneAttachFn` is provided, then the link function will clone the\n *  `template` and call the `cloneAttachFn` function allowing the caller to attach the\n *  cloned elements to the DOM document at the appropriate place. The `cloneAttachFn` is\n *  called as: <br/> `cloneAttachFn(clonedElement, scope)` where:\n *\n *      * `clonedElement` - is a clone of the original `element` passed into the compiler.\n *      * `scope` - is the current scope with which the linking function is working with.\n *\n *  * `options` - An optional object hash with linking options. If `options` is provided, then the following\n *  keys may be used to control linking behavior:\n *\n *      * `parentBoundTranscludeFn` - the transclude function made available to\n *        directives; if given, it will be passed through to the link functions of\n *        directives found in `element` during compilation.\n *      * `transcludeControllers` - an object hash with keys that map controller names\n *        to a hash with the key `instance`, which maps to the controller instance;\n *        if given, it will make the controllers available to directives on the compileNode:\n *        ```\n *        {\n *          parent: {\n *            instance: parentControllerInstance\n *          }\n *        }\n *        ```\n *      * `futureParentElement` - defines the parent to which the `cloneAttachFn` will add\n *        the cloned elements; only needed for transcludes that are allowed to contain non html\n *        elements (e.g. SVG elements). See also the directive.controller property.\n *\n * Calling the linking function returns the element of the template. It is either the original\n * element passed in, or the clone of the element if the `cloneAttachFn` is provided.\n *\n * After linking the view is not updated until after a call to $digest which typically is done by\n * Angular automatically.\n *\n * If you need access to the bound view, there are two ways to do it:\n *\n * - If you are not asking the linking function to clone the template, create the DOM element(s)\n *   before you send them to the compiler and keep this reference around.\n *   ```js\n *     var element = $compile('<p>{{total}}</p>')(scope);\n *   ```\n *\n * - if on the other hand, you need the element to be cloned, the view reference from the original\n *   example would not point to the clone, but rather to the original template that was cloned. In\n *   this case, you can access the clone via the cloneAttachFn:\n *   ```js\n *     var templateElement = angular.element('<p>{{total}}</p>'),\n *         scope = ....;\n *\n *     var clonedElement = $compile(templateElement)(scope, function(clonedElement, scope) {\n *       //attach the clone to DOM document at the right place\n *     });\n *\n *     //now we have reference to the cloned DOM via `clonedElement`\n *   ```\n *\n *\n * For information on how the compiler works, see the\n * {@link guide/compiler Angular HTML Compiler} section of the Developer Guide.\n */\n\nvar $compileMinErr = minErr('$compile');\n\nfunction UNINITIALIZED_VALUE() {}\nvar _UNINITIALIZED_VALUE = new UNINITIALIZED_VALUE();\n\n/**\n * @ngdoc provider\n * @name $compileProvider\n *\n * @description\n */\n$CompileProvider.$inject = ['$provide', '$$sanitizeUriProvider'];\nfunction $CompileProvider($provide, $$sanitizeUriProvider) {\n  var hasDirectives = {},\n      Suffix = 'Directive',\n      COMMENT_DIRECTIVE_REGEXP = /^\\s*directive\\:\\s*([\\w\\-]+)\\s+(.*)$/,\n      CLASS_DIRECTIVE_REGEXP = /(([\\w\\-]+)(?:\\:([^;]+))?;?)/,\n      ALL_OR_NOTHING_ATTRS = makeMap('ngSrc,ngSrcset,src,srcset'),\n      REQUIRE_PREFIX_REGEXP = /^(?:(\\^\\^?)?(\\?)?(\\^\\^?)?)?/;\n\n  // Ref: http://developers.whatwg.org/webappapis.html#event-handler-idl-attributes\n  // The assumption is that future DOM event attribute names will begin with\n  // 'on' and be composed of only English letters.\n  var EVENT_HANDLER_ATTR_REGEXP = /^(on[a-z]+|formaction)$/;\n  var bindingCache = createMap();\n\n  function parseIsolateBindings(scope, directiveName, isController) {\n    var LOCAL_REGEXP = /^\\s*([@&<]|=(\\*?))(\\??)\\s*(\\w*)\\s*$/;\n\n    var bindings = createMap();\n\n    forEach(scope, function(definition, scopeName) {\n      if (definition in bindingCache) {\n        bindings[scopeName] = bindingCache[definition];\n        return;\n      }\n      var match = definition.match(LOCAL_REGEXP);\n\n      if (!match) {\n        throw $compileMinErr('iscp',\n            \"Invalid {3} for directive '{0}'.\" +\n            \" Definition: {... {1}: '{2}' ...}\",\n            directiveName, scopeName, definition,\n            (isController ? \"controller bindings definition\" :\n            \"isolate scope definition\"));\n      }\n\n      bindings[scopeName] = {\n        mode: match[1][0],\n        collection: match[2] === '*',\n        optional: match[3] === '?',\n        attrName: match[4] || scopeName\n      };\n      if (match[4]) {\n        bindingCache[definition] = bindings[scopeName];\n      }\n    });\n\n    return bindings;\n  }\n\n  function parseDirectiveBindings(directive, directiveName) {\n    var bindings = {\n      isolateScope: null,\n      bindToController: null\n    };\n    if (isObject(directive.scope)) {\n      if (directive.bindToController === true) {\n        bindings.bindToController = parseIsolateBindings(directive.scope,\n                                                         directiveName, true);\n        bindings.isolateScope = {};\n      } else {\n        bindings.isolateScope = parseIsolateBindings(directive.scope,\n                                                     directiveName, false);\n      }\n    }\n    if (isObject(directive.bindToController)) {\n      bindings.bindToController =\n          parseIsolateBindings(directive.bindToController, directiveName, true);\n    }\n    if (isObject(bindings.bindToController)) {\n      var controller = directive.controller;\n      var controllerAs = directive.controllerAs;\n      if (!controller) {\n        // There is no controller, there may or may not be a controllerAs property\n        throw $compileMinErr('noctrl',\n              \"Cannot bind to controller without directive '{0}'s controller.\",\n              directiveName);\n      } else if (!identifierForController(controller, controllerAs)) {\n        // There is a controller, but no identifier or controllerAs property\n        throw $compileMinErr('noident',\n              \"Cannot bind to controller without identifier for directive '{0}'.\",\n              directiveName);\n      }\n    }\n    return bindings;\n  }\n\n  function assertValidDirectiveName(name) {\n    var letter = name.charAt(0);\n    if (!letter || letter !== lowercase(letter)) {\n      throw $compileMinErr('baddir', \"Directive/Component name '{0}' is invalid. The first character must be a lowercase letter\", name);\n    }\n    if (name !== name.trim()) {\n      throw $compileMinErr('baddir',\n            \"Directive/Component name '{0}' is invalid. The name should not contain leading or trailing whitespaces\",\n            name);\n    }\n  }\n\n  function getDirectiveRequire(directive) {\n    var require = directive.require || (directive.controller && directive.name);\n\n    if (!isArray(require) && isObject(require)) {\n      forEach(require, function(value, key) {\n        var match = value.match(REQUIRE_PREFIX_REGEXP);\n        var name = value.substring(match[0].length);\n        if (!name) require[key] = match[0] + key;\n      });\n    }\n\n    return require;\n  }\n\n  /**\n   * @ngdoc method\n   * @name $compileProvider#directive\n   * @kind function\n   *\n   * @description\n   * Register a new directive with the compiler.\n   *\n   * @param {string|Object} name Name of the directive in camel-case (i.e. <code>ngBind</code> which\n   *    will match as <code>ng-bind</code>), or an object map of directives where the keys are the\n   *    names and the values are the factories.\n   * @param {Function|Array} directiveFactory An injectable directive factory function. See the\n   *    {@link guide/directive directive guide} and the {@link $compile compile API} for more info.\n   * @returns {ng.$compileProvider} Self for chaining.\n   */\n  this.directive = function registerDirective(name, directiveFactory) {\n    assertNotHasOwnProperty(name, 'directive');\n    if (isString(name)) {\n      assertValidDirectiveName(name);\n      assertArg(directiveFactory, 'directiveFactory');\n      if (!hasDirectives.hasOwnProperty(name)) {\n        hasDirectives[name] = [];\n        $provide.factory(name + Suffix, ['$injector', '$exceptionHandler',\n          function($injector, $exceptionHandler) {\n            var directives = [];\n            forEach(hasDirectives[name], function(directiveFactory, index) {\n              try {\n                var directive = $injector.invoke(directiveFactory);\n                if (isFunction(directive)) {\n                  directive = { compile: valueFn(directive) };\n                } else if (!directive.compile && directive.link) {\n                  directive.compile = valueFn(directive.link);\n                }\n                directive.priority = directive.priority || 0;\n                directive.index = index;\n                directive.name = directive.name || name;\n                directive.require = getDirectiveRequire(directive);\n                directive.restrict = directive.restrict || 'EA';\n                directive.$$moduleName = directiveFactory.$$moduleName;\n                directives.push(directive);\n              } catch (e) {\n                $exceptionHandler(e);\n              }\n            });\n            return directives;\n          }]);\n      }\n      hasDirectives[name].push(directiveFactory);\n    } else {\n      forEach(name, reverseParams(registerDirective));\n    }\n    return this;\n  };\n\n  /**\n   * @ngdoc method\n   * @name $compileProvider#component\n   * @module ng\n   * @param {string} name Name of the component in camelCase (i.e. `myComp` which will match `<my-comp>`)\n   * @param {Object} options Component definition object (a simplified\n   *    {@link ng.$compile#directive-definition-object directive definition object}),\n   *    with the following properties (all optional):\n   *\n   *    - `controller` – `{(string|function()=}` – controller constructor function that should be\n   *      associated with newly created scope or the name of a {@link ng.$compile#-controller-\n   *      registered controller} if passed as a string. An empty `noop` function by default.\n   *    - `controllerAs` – `{string=}` – identifier name for to reference the controller in the component's scope.\n   *      If present, the controller will be published to scope under the `controllerAs` name.\n   *      If not present, this will default to be `$ctrl`.\n   *    - `template` – `{string=|function()=}` – html template as a string or a function that\n   *      returns an html template as a string which should be used as the contents of this component.\n   *      Empty string by default.\n   *\n   *      If `template` is a function, then it is {@link auto.$injector#invoke injected} with\n   *      the following locals:\n   *\n   *      - `$element` - Current element\n   *      - `$attrs` - Current attributes object for the element\n   *\n   *    - `templateUrl` – `{string=|function()=}` – path or function that returns a path to an html\n   *      template that should be used  as the contents of this component.\n   *\n   *      If `templateUrl` is a function, then it is {@link auto.$injector#invoke injected} with\n   *      the following locals:\n   *\n   *      - `$element` - Current element\n   *      - `$attrs` - Current attributes object for the element\n   *\n   *    - `bindings` – `{object=}` – defines bindings between DOM attributes and component properties.\n   *      Component properties are always bound to the component controller and not to the scope.\n   *      See {@link ng.$compile#-bindtocontroller- `bindToController`}.\n   *    - `transclude` – `{boolean=}` – whether {@link $compile#transclusion content transclusion} is enabled.\n   *      Disabled by default.\n   *    - `require` - `{Object<string, string>=}` - requires the controllers of other directives and binds them to\n   *      this component's controller. The object keys specify the property names under which the required\n   *      controllers (object values) will be bound. See {@link ng.$compile#-require- `require`}.\n   *    - `$...` – additional properties to attach to the directive factory function and the controller\n   *      constructor function. (This is used by the component router to annotate)\n   *\n   * @returns {ng.$compileProvider} the compile provider itself, for chaining of function calls.\n   * @description\n   * Register a **component definition** with the compiler. This is a shorthand for registering a special\n   * type of directive, which represents a self-contained UI component in your application. Such components\n   * are always isolated (i.e. `scope: {}`) and are always restricted to elements (i.e. `restrict: 'E'`).\n   *\n   * Component definitions are very simple and do not require as much configuration as defining general\n   * directives. Component definitions usually consist only of a template and a controller backing it.\n   *\n   * In order to make the definition easier, components enforce best practices like use of `controllerAs`,\n   * `bindToController`. They always have **isolate scope** and are restricted to elements.\n   *\n   * Here are a few examples of how you would usually define components:\n   *\n   * ```js\n   *   var myMod = angular.module(...);\n   *   myMod.component('myComp', {\n   *     template: '<div>My name is {{$ctrl.name}}</div>',\n   *     controller: function() {\n   *       this.name = 'shahar';\n   *     }\n   *   });\n   *\n   *   myMod.component('myComp', {\n   *     template: '<div>My name is {{$ctrl.name}}</div>',\n   *     bindings: {name: '@'}\n   *   });\n   *\n   *   myMod.component('myComp', {\n   *     templateUrl: 'views/my-comp.html',\n   *     controller: 'MyCtrl',\n   *     controllerAs: 'ctrl',\n   *     bindings: {name: '@'}\n   *   });\n   *\n   * ```\n   * For more examples, and an in-depth guide, see the {@link guide/component component guide}.\n   *\n   * <br />\n   * See also {@link ng.$compileProvider#directive $compileProvider.directive()}.\n   */\n  this.component = function registerComponent(name, options) {\n    var controller = options.controller || function() {};\n\n    function factory($injector) {\n      function makeInjectable(fn) {\n        if (isFunction(fn) || isArray(fn)) {\n          return function(tElement, tAttrs) {\n            return $injector.invoke(fn, this, {$element: tElement, $attrs: tAttrs});\n          };\n        } else {\n          return fn;\n        }\n      }\n\n      var template = (!options.template && !options.templateUrl ? '' : options.template);\n      var ddo = {\n        controller: controller,\n        controllerAs: identifierForController(options.controller) || options.controllerAs || '$ctrl',\n        template: makeInjectable(template),\n        templateUrl: makeInjectable(options.templateUrl),\n        transclude: options.transclude,\n        scope: {},\n        bindToController: options.bindings || {},\n        restrict: 'E',\n        require: options.require\n      };\n\n      // Copy annotations (starting with $) over to the DDO\n      forEach(options, function(val, key) {\n        if (key.charAt(0) === '$') ddo[key] = val;\n      });\n\n      return ddo;\n    }\n\n    // TODO(pete) remove the following `forEach` before we release 1.6.0\n    // The component-router@0.2.0 looks for the annotations on the controller constructor\n    // Nothing in Angular looks for annotations on the factory function but we can't remove\n    // it from 1.5.x yet.\n\n    // Copy any annotation properties (starting with $) over to the factory and controller constructor functions\n    // These could be used by libraries such as the new component router\n    forEach(options, function(val, key) {\n      if (key.charAt(0) === '$') {\n        factory[key] = val;\n        // Don't try to copy over annotations to named controller\n        if (isFunction(controller)) controller[key] = val;\n      }\n    });\n\n    factory.$inject = ['$injector'];\n\n    return this.directive(name, factory);\n  };\n\n\n  /**\n   * @ngdoc method\n   * @name $compileProvider#aHrefSanitizationWhitelist\n   * @kind function\n   *\n   * @description\n   * Retrieves or overrides the default regular expression that is used for whitelisting of safe\n   * urls during a[href] sanitization.\n   *\n   * The sanitization is a security measure aimed at preventing XSS attacks via html links.\n   *\n   * Any url about to be assigned to a[href] via data-binding is first normalized and turned into\n   * an absolute url. Afterwards, the url is matched against the `aHrefSanitizationWhitelist`\n   * regular expression. If a match is found, the original url is written into the dom. Otherwise,\n   * the absolute url is prefixed with `'unsafe:'` string and only then is it written into the DOM.\n   *\n   * @param {RegExp=} regexp New regexp to whitelist urls with.\n   * @returns {RegExp|ng.$compileProvider} Current RegExp if called without value or self for\n   *    chaining otherwise.\n   */\n  this.aHrefSanitizationWhitelist = function(regexp) {\n    if (isDefined(regexp)) {\n      $$sanitizeUriProvider.aHrefSanitizationWhitelist(regexp);\n      return this;\n    } else {\n      return $$sanitizeUriProvider.aHrefSanitizationWhitelist();\n    }\n  };\n\n\n  /**\n   * @ngdoc method\n   * @name $compileProvider#imgSrcSanitizationWhitelist\n   * @kind function\n   *\n   * @description\n   * Retrieves or overrides the default regular expression that is used for whitelisting of safe\n   * urls during img[src] sanitization.\n   *\n   * The sanitization is a security measure aimed at prevent XSS attacks via html links.\n   *\n   * Any url about to be assigned to img[src] via data-binding is first normalized and turned into\n   * an absolute url. Afterwards, the url is matched against the `imgSrcSanitizationWhitelist`\n   * regular expression. If a match is found, the original url is written into the dom. Otherwise,\n   * the absolute url is prefixed with `'unsafe:'` string and only then is it written into the DOM.\n   *\n   * @param {RegExp=} regexp New regexp to whitelist urls with.\n   * @returns {RegExp|ng.$compileProvider} Current RegExp if called without value or self for\n   *    chaining otherwise.\n   */\n  this.imgSrcSanitizationWhitelist = function(regexp) {\n    if (isDefined(regexp)) {\n      $$sanitizeUriProvider.imgSrcSanitizationWhitelist(regexp);\n      return this;\n    } else {\n      return $$sanitizeUriProvider.imgSrcSanitizationWhitelist();\n    }\n  };\n\n  /**\n   * @ngdoc method\n   * @name  $compileProvider#debugInfoEnabled\n   *\n   * @param {boolean=} enabled update the debugInfoEnabled state if provided, otherwise just return the\n   * current debugInfoEnabled state\n   * @returns {*} current value if used as getter or itself (chaining) if used as setter\n   *\n   * @kind function\n   *\n   * @description\n   * Call this method to enable/disable various debug runtime information in the compiler such as adding\n   * binding information and a reference to the current scope on to DOM elements.\n   * If enabled, the compiler will add the following to DOM elements that have been bound to the scope\n   * * `ng-binding` CSS class\n   * * `$binding` data property containing an array of the binding expressions\n   *\n   * You may want to disable this in production for a significant performance boost. See\n   * {@link guide/production#disabling-debug-data Disabling Debug Data} for more.\n   *\n   * The default value is true.\n   */\n  var debugInfoEnabled = true;\n  this.debugInfoEnabled = function(enabled) {\n    if (isDefined(enabled)) {\n      debugInfoEnabled = enabled;\n      return this;\n    }\n    return debugInfoEnabled;\n  };\n\n\n  var TTL = 10;\n  /**\n   * @ngdoc method\n   * @name $compileProvider#onChangesTtl\n   * @description\n   *\n   * Sets the number of times `$onChanges` hooks can trigger new changes before giving up and\n   * assuming that the model is unstable.\n   *\n   * The current default is 10 iterations.\n   *\n   * In complex applications it's possible that dependencies between `$onChanges` hooks and bindings will result\n   * in several iterations of calls to these hooks. However if an application needs more than the default 10\n   * iterations to stabilize then you should investigate what is causing the model to continuously change during\n   * the `$onChanges` hook execution.\n   *\n   * Increasing the TTL could have performance implications, so you should not change it without proper justification.\n   *\n   * @param {number} limit The number of `$onChanges` hook iterations.\n   * @returns {number|object} the current limit (or `this` if called as a setter for chaining)\n   */\n  this.onChangesTtl = function(value) {\n    if (arguments.length) {\n      TTL = value;\n      return this;\n    }\n    return TTL;\n  };\n\n  this.$get = [\n            '$injector', '$interpolate', '$exceptionHandler', '$templateRequest', '$parse',\n            '$controller', '$rootScope', '$sce', '$animate', '$$sanitizeUri',\n    function($injector,   $interpolate,   $exceptionHandler,   $templateRequest,   $parse,\n             $controller,   $rootScope,   $sce,   $animate,   $$sanitizeUri) {\n\n    var SIMPLE_ATTR_NAME = /^\\w/;\n    var specialAttrHolder = window.document.createElement('div');\n\n\n\n    var onChangesTtl = TTL;\n    // The onChanges hooks should all be run together in a single digest\n    // When changes occur, the call to trigger their hooks will be added to this queue\n    var onChangesQueue;\n\n    // This function is called in a $$postDigest to trigger all the onChanges hooks in a single digest\n    function flushOnChangesQueue() {\n      try {\n        if (!(--onChangesTtl)) {\n          // We have hit the TTL limit so reset everything\n          onChangesQueue = undefined;\n          throw $compileMinErr('infchng', '{0} $onChanges() iterations reached. Aborting!\\n', TTL);\n        }\n        // We must run this hook in an apply since the $$postDigest runs outside apply\n        $rootScope.$apply(function() {\n          var errors = [];\n          for (var i = 0, ii = onChangesQueue.length; i < ii; ++i) {\n            try {\n              onChangesQueue[i]();\n            } catch (e) {\n              errors.push(e);\n            }\n          }\n          // Reset the queue to trigger a new schedule next time there is a change\n          onChangesQueue = undefined;\n          if (errors.length) {\n            throw errors;\n          }\n        });\n      } finally {\n        onChangesTtl++;\n      }\n    }\n\n\n    function Attributes(element, attributesToCopy) {\n      if (attributesToCopy) {\n        var keys = Object.keys(attributesToCopy);\n        var i, l, key;\n\n        for (i = 0, l = keys.length; i < l; i++) {\n          key = keys[i];\n          this[key] = attributesToCopy[key];\n        }\n      } else {\n        this.$attr = {};\n      }\n\n      this.$$element = element;\n    }\n\n    Attributes.prototype = {\n      /**\n       * @ngdoc method\n       * @name $compile.directive.Attributes#$normalize\n       * @kind function\n       *\n       * @description\n       * Converts an attribute name (e.g. dash/colon/underscore-delimited string, optionally prefixed with `x-` or\n       * `data-`) to its normalized, camelCase form.\n       *\n       * Also there is special case for Moz prefix starting with upper case letter.\n       *\n       * For further information check out the guide on {@link guide/directive#matching-directives Matching Directives}\n       *\n       * @param {string} name Name to normalize\n       */\n      $normalize: directiveNormalize,\n\n\n      /**\n       * @ngdoc method\n       * @name $compile.directive.Attributes#$addClass\n       * @kind function\n       *\n       * @description\n       * Adds the CSS class value specified by the classVal parameter to the element. If animations\n       * are enabled then an animation will be triggered for the class addition.\n       *\n       * @param {string} classVal The className value that will be added to the element\n       */\n      $addClass: function(classVal) {\n        if (classVal && classVal.length > 0) {\n          $animate.addClass(this.$$element, classVal);\n        }\n      },\n\n      /**\n       * @ngdoc method\n       * @name $compile.directive.Attributes#$removeClass\n       * @kind function\n       *\n       * @description\n       * Removes the CSS class value specified by the classVal parameter from the element. If\n       * animations are enabled then an animation will be triggered for the class removal.\n       *\n       * @param {string} classVal The className value that will be removed from the element\n       */\n      $removeClass: function(classVal) {\n        if (classVal && classVal.length > 0) {\n          $animate.removeClass(this.$$element, classVal);\n        }\n      },\n\n      /**\n       * @ngdoc method\n       * @name $compile.directive.Attributes#$updateClass\n       * @kind function\n       *\n       * @description\n       * Adds and removes the appropriate CSS class values to the element based on the difference\n       * between the new and old CSS class values (specified as newClasses and oldClasses).\n       *\n       * @param {string} newClasses The current CSS className value\n       * @param {string} oldClasses The former CSS className value\n       */\n      $updateClass: function(newClasses, oldClasses) {\n        var toAdd = tokenDifference(newClasses, oldClasses);\n        if (toAdd && toAdd.length) {\n          $animate.addClass(this.$$element, toAdd);\n        }\n\n        var toRemove = tokenDifference(oldClasses, newClasses);\n        if (toRemove && toRemove.length) {\n          $animate.removeClass(this.$$element, toRemove);\n        }\n      },\n\n      /**\n       * Set a normalized attribute on the element in a way such that all directives\n       * can share the attribute. This function properly handles boolean attributes.\n       * @param {string} key Normalized key. (ie ngAttribute)\n       * @param {string|boolean} value The value to set. If `null` attribute will be deleted.\n       * @param {boolean=} writeAttr If false, does not write the value to DOM element attribute.\n       *     Defaults to true.\n       * @param {string=} attrName Optional none normalized name. Defaults to key.\n       */\n      $set: function(key, value, writeAttr, attrName) {\n        // TODO: decide whether or not to throw an error if \"class\"\n        //is set through this function since it may cause $updateClass to\n        //become unstable.\n\n        var node = this.$$element[0],\n            booleanKey = getBooleanAttrName(node, key),\n            aliasedKey = getAliasedAttrName(key),\n            observer = key,\n            nodeName;\n\n        if (booleanKey) {\n          this.$$element.prop(key, value);\n          attrName = booleanKey;\n        } else if (aliasedKey) {\n          this[aliasedKey] = value;\n          observer = aliasedKey;\n        }\n\n        this[key] = value;\n\n        // translate normalized key to actual key\n        if (attrName) {\n          this.$attr[key] = attrName;\n        } else {\n          attrName = this.$attr[key];\n          if (!attrName) {\n            this.$attr[key] = attrName = snake_case(key, '-');\n          }\n        }\n\n        nodeName = nodeName_(this.$$element);\n\n        if ((nodeName === 'a' && (key === 'href' || key === 'xlinkHref')) ||\n            (nodeName === 'img' && key === 'src')) {\n          // sanitize a[href] and img[src] values\n          this[key] = value = $$sanitizeUri(value, key === 'src');\n        } else if (nodeName === 'img' && key === 'srcset' && isDefined(value)) {\n          // sanitize img[srcset] values\n          var result = \"\";\n\n          // first check if there are spaces because it's not the same pattern\n          var trimmedSrcset = trim(value);\n          //                (   999x   ,|   999w   ,|   ,|,   )\n          var srcPattern = /(\\s+\\d+x\\s*,|\\s+\\d+w\\s*,|\\s+,|,\\s+)/;\n          var pattern = /\\s/.test(trimmedSrcset) ? srcPattern : /(,)/;\n\n          // split srcset into tuple of uri and descriptor except for the last item\n          var rawUris = trimmedSrcset.split(pattern);\n\n          // for each tuples\n          var nbrUrisWith2parts = Math.floor(rawUris.length / 2);\n          for (var i = 0; i < nbrUrisWith2parts; i++) {\n            var innerIdx = i * 2;\n            // sanitize the uri\n            result += $$sanitizeUri(trim(rawUris[innerIdx]), true);\n            // add the descriptor\n            result += (\" \" + trim(rawUris[innerIdx + 1]));\n          }\n\n          // split the last item into uri and descriptor\n          var lastTuple = trim(rawUris[i * 2]).split(/\\s/);\n\n          // sanitize the last uri\n          result += $$sanitizeUri(trim(lastTuple[0]), true);\n\n          // and add the last descriptor if any\n          if (lastTuple.length === 2) {\n            result += (\" \" + trim(lastTuple[1]));\n          }\n          this[key] = value = result;\n        }\n\n        if (writeAttr !== false) {\n          if (value === null || isUndefined(value)) {\n            this.$$element.removeAttr(attrName);\n          } else {\n            if (SIMPLE_ATTR_NAME.test(attrName)) {\n              this.$$element.attr(attrName, value);\n            } else {\n              setSpecialAttr(this.$$element[0], attrName, value);\n            }\n          }\n        }\n\n        // fire observers\n        var $$observers = this.$$observers;\n        $$observers && forEach($$observers[observer], function(fn) {\n          try {\n            fn(value);\n          } catch (e) {\n            $exceptionHandler(e);\n          }\n        });\n      },\n\n\n      /**\n       * @ngdoc method\n       * @name $compile.directive.Attributes#$observe\n       * @kind function\n       *\n       * @description\n       * Observes an interpolated attribute.\n       *\n       * The observer function will be invoked once during the next `$digest` following\n       * compilation. The observer is then invoked whenever the interpolated value\n       * changes.\n       *\n       * @param {string} key Normalized key. (ie ngAttribute) .\n       * @param {function(interpolatedValue)} fn Function that will be called whenever\n                the interpolated value of the attribute changes.\n       *        See the {@link guide/interpolation#how-text-and-attribute-bindings-work Interpolation\n       *        guide} for more info.\n       * @returns {function()} Returns a deregistration function for this observer.\n       */\n      $observe: function(key, fn) {\n        var attrs = this,\n            $$observers = (attrs.$$observers || (attrs.$$observers = createMap())),\n            listeners = ($$observers[key] || ($$observers[key] = []));\n\n        listeners.push(fn);\n        $rootScope.$evalAsync(function() {\n          if (!listeners.$$inter && attrs.hasOwnProperty(key) && !isUndefined(attrs[key])) {\n            // no one registered attribute interpolation function, so lets call it manually\n            fn(attrs[key]);\n          }\n        });\n\n        return function() {\n          arrayRemove(listeners, fn);\n        };\n      }\n    };\n\n    function setSpecialAttr(element, attrName, value) {\n      // Attributes names that do not start with letters (such as `(click)`) cannot be set using `setAttribute`\n      // so we have to jump through some hoops to get such an attribute\n      // https://github.com/angular/angular.js/pull/13318\n      specialAttrHolder.innerHTML = \"<span \" + attrName + \">\";\n      var attributes = specialAttrHolder.firstChild.attributes;\n      var attribute = attributes[0];\n      // We have to remove the attribute from its container element before we can add it to the destination element\n      attributes.removeNamedItem(attribute.name);\n      attribute.value = value;\n      element.attributes.setNamedItem(attribute);\n    }\n\n    function safeAddClass($element, className) {\n      try {\n        $element.addClass(className);\n      } catch (e) {\n        // ignore, since it means that we are trying to set class on\n        // SVG element, where class name is read-only.\n      }\n    }\n\n\n    var startSymbol = $interpolate.startSymbol(),\n        endSymbol = $interpolate.endSymbol(),\n        denormalizeTemplate = (startSymbol == '{{' && endSymbol  == '}}')\n            ? identity\n            : function denormalizeTemplate(template) {\n              return template.replace(/\\{\\{/g, startSymbol).replace(/}}/g, endSymbol);\n        },\n        NG_ATTR_BINDING = /^ngAttr[A-Z]/;\n    var MULTI_ELEMENT_DIR_RE = /^(.+)Start$/;\n\n    compile.$$addBindingInfo = debugInfoEnabled ? function $$addBindingInfo($element, binding) {\n      var bindings = $element.data('$binding') || [];\n\n      if (isArray(binding)) {\n        bindings = bindings.concat(binding);\n      } else {\n        bindings.push(binding);\n      }\n\n      $element.data('$binding', bindings);\n    } : noop;\n\n    compile.$$addBindingClass = debugInfoEnabled ? function $$addBindingClass($element) {\n      safeAddClass($element, 'ng-binding');\n    } : noop;\n\n    compile.$$addScopeInfo = debugInfoEnabled ? function $$addScopeInfo($element, scope, isolated, noTemplate) {\n      var dataName = isolated ? (noTemplate ? '$isolateScopeNoTemplate' : '$isolateScope') : '$scope';\n      $element.data(dataName, scope);\n    } : noop;\n\n    compile.$$addScopeClass = debugInfoEnabled ? function $$addScopeClass($element, isolated) {\n      safeAddClass($element, isolated ? 'ng-isolate-scope' : 'ng-scope');\n    } : noop;\n\n    compile.$$createComment = function(directiveName, comment) {\n      var content = '';\n      if (debugInfoEnabled) {\n        content = ' ' + (directiveName || '') + ': ';\n        if (comment) content += comment + ' ';\n      }\n      return window.document.createComment(content);\n    };\n\n    return compile;\n\n    //================================\n\n    function compile($compileNodes, transcludeFn, maxPriority, ignoreDirective,\n                        previousCompileContext) {\n      if (!($compileNodes instanceof jqLite)) {\n        // jquery always rewraps, whereas we need to preserve the original selector so that we can\n        // modify it.\n        $compileNodes = jqLite($compileNodes);\n      }\n\n      var NOT_EMPTY = /\\S+/;\n\n      // We can not compile top level text elements since text nodes can be merged and we will\n      // not be able to attach scope data to them, so we will wrap them in <span>\n      for (var i = 0, len = $compileNodes.length; i < len; i++) {\n        var domNode = $compileNodes[i];\n\n        if (domNode.nodeType === NODE_TYPE_TEXT && domNode.nodeValue.match(NOT_EMPTY) /* non-empty */) {\n          jqLiteWrapNode(domNode, $compileNodes[i] = window.document.createElement('span'));\n        }\n      }\n\n      var compositeLinkFn =\n              compileNodes($compileNodes, transcludeFn, $compileNodes,\n                           maxPriority, ignoreDirective, previousCompileContext);\n      compile.$$addScopeClass($compileNodes);\n      var namespace = null;\n      return function publicLinkFn(scope, cloneConnectFn, options) {\n        assertArg(scope, 'scope');\n\n        if (previousCompileContext && previousCompileContext.needsNewScope) {\n          // A parent directive did a replace and a directive on this element asked\n          // for transclusion, which caused us to lose a layer of element on which\n          // we could hold the new transclusion scope, so we will create it manually\n          // here.\n          scope = scope.$parent.$new();\n        }\n\n        options = options || {};\n        var parentBoundTranscludeFn = options.parentBoundTranscludeFn,\n          transcludeControllers = options.transcludeControllers,\n          futureParentElement = options.futureParentElement;\n\n        // When `parentBoundTranscludeFn` is passed, it is a\n        // `controllersBoundTransclude` function (it was previously passed\n        // as `transclude` to directive.link) so we must unwrap it to get\n        // its `boundTranscludeFn`\n        if (parentBoundTranscludeFn && parentBoundTranscludeFn.$$boundTransclude) {\n          parentBoundTranscludeFn = parentBoundTranscludeFn.$$boundTransclude;\n        }\n\n        if (!namespace) {\n          namespace = detectNamespaceForChildElements(futureParentElement);\n        }\n        var $linkNode;\n        if (namespace !== 'html') {\n          // When using a directive with replace:true and templateUrl the $compileNodes\n          // (or a child element inside of them)\n          // might change, so we need to recreate the namespace adapted compileNodes\n          // for call to the link function.\n          // Note: This will already clone the nodes...\n          $linkNode = jqLite(\n            wrapTemplate(namespace, jqLite('<div>').append($compileNodes).html())\n          );\n        } else if (cloneConnectFn) {\n          // important!!: we must call our jqLite.clone() since the jQuery one is trying to be smart\n          // and sometimes changes the structure of the DOM.\n          $linkNode = JQLitePrototype.clone.call($compileNodes);\n        } else {\n          $linkNode = $compileNodes;\n        }\n\n        if (transcludeControllers) {\n          for (var controllerName in transcludeControllers) {\n            $linkNode.data('$' + controllerName + 'Controller', transcludeControllers[controllerName].instance);\n          }\n        }\n\n        compile.$$addScopeInfo($linkNode, scope);\n\n        if (cloneConnectFn) cloneConnectFn($linkNode, scope);\n        if (compositeLinkFn) compositeLinkFn(scope, $linkNode, $linkNode, parentBoundTranscludeFn);\n        return $linkNode;\n      };\n    }\n\n    function detectNamespaceForChildElements(parentElement) {\n      // TODO: Make this detect MathML as well...\n      var node = parentElement && parentElement[0];\n      if (!node) {\n        return 'html';\n      } else {\n        return nodeName_(node) !== 'foreignobject' && toString.call(node).match(/SVG/) ? 'svg' : 'html';\n      }\n    }\n\n    /**\n     * Compile function matches each node in nodeList against the directives. Once all directives\n     * for a particular node are collected their compile functions are executed. The compile\n     * functions return values - the linking functions - are combined into a composite linking\n     * function, which is the a linking function for the node.\n     *\n     * @param {NodeList} nodeList an array of nodes or NodeList to compile\n     * @param {function(angular.Scope, cloneAttachFn=)} transcludeFn A linking function, where the\n     *        scope argument is auto-generated to the new child of the transcluded parent scope.\n     * @param {DOMElement=} $rootElement If the nodeList is the root of the compilation tree then\n     *        the rootElement must be set the jqLite collection of the compile root. This is\n     *        needed so that the jqLite collection items can be replaced with widgets.\n     * @param {number=} maxPriority Max directive priority.\n     * @returns {Function} A composite linking function of all of the matched directives or null.\n     */\n    function compileNodes(nodeList, transcludeFn, $rootElement, maxPriority, ignoreDirective,\n                            previousCompileContext) {\n      var linkFns = [],\n          attrs, directives, nodeLinkFn, childNodes, childLinkFn, linkFnFound, nodeLinkFnFound;\n\n      for (var i = 0; i < nodeList.length; i++) {\n        attrs = new Attributes();\n\n        // we must always refer to nodeList[i] since the nodes can be replaced underneath us.\n        directives = collectDirectives(nodeList[i], [], attrs, i === 0 ? maxPriority : undefined,\n                                        ignoreDirective);\n\n        nodeLinkFn = (directives.length)\n            ? applyDirectivesToNode(directives, nodeList[i], attrs, transcludeFn, $rootElement,\n                                      null, [], [], previousCompileContext)\n            : null;\n\n        if (nodeLinkFn && nodeLinkFn.scope) {\n          compile.$$addScopeClass(attrs.$$element);\n        }\n\n        childLinkFn = (nodeLinkFn && nodeLinkFn.terminal ||\n                      !(childNodes = nodeList[i].childNodes) ||\n                      !childNodes.length)\n            ? null\n            : compileNodes(childNodes,\n                 nodeLinkFn ? (\n                  (nodeLinkFn.transcludeOnThisElement || !nodeLinkFn.templateOnThisElement)\n                     && nodeLinkFn.transclude) : transcludeFn);\n\n        if (nodeLinkFn || childLinkFn) {\n          linkFns.push(i, nodeLinkFn, childLinkFn);\n          linkFnFound = true;\n          nodeLinkFnFound = nodeLinkFnFound || nodeLinkFn;\n        }\n\n        //use the previous context only for the first element in the virtual group\n        previousCompileContext = null;\n      }\n\n      // return a linking function if we have found anything, null otherwise\n      return linkFnFound ? compositeLinkFn : null;\n\n      function compositeLinkFn(scope, nodeList, $rootElement, parentBoundTranscludeFn) {\n        var nodeLinkFn, childLinkFn, node, childScope, i, ii, idx, childBoundTranscludeFn;\n        var stableNodeList;\n\n\n        if (nodeLinkFnFound) {\n          // copy nodeList so that if a nodeLinkFn removes or adds an element at this DOM level our\n          // offsets don't get screwed up\n          var nodeListLength = nodeList.length;\n          stableNodeList = new Array(nodeListLength);\n\n          // create a sparse array by only copying the elements which have a linkFn\n          for (i = 0; i < linkFns.length; i+=3) {\n            idx = linkFns[i];\n            stableNodeList[idx] = nodeList[idx];\n          }\n        } else {\n          stableNodeList = nodeList;\n        }\n\n        for (i = 0, ii = linkFns.length; i < ii;) {\n          node = stableNodeList[linkFns[i++]];\n          nodeLinkFn = linkFns[i++];\n          childLinkFn = linkFns[i++];\n\n          if (nodeLinkFn) {\n            if (nodeLinkFn.scope) {\n              childScope = scope.$new();\n              compile.$$addScopeInfo(jqLite(node), childScope);\n            } else {\n              childScope = scope;\n            }\n\n            if (nodeLinkFn.transcludeOnThisElement) {\n              childBoundTranscludeFn = createBoundTranscludeFn(\n                  scope, nodeLinkFn.transclude, parentBoundTranscludeFn);\n\n            } else if (!nodeLinkFn.templateOnThisElement && parentBoundTranscludeFn) {\n              childBoundTranscludeFn = parentBoundTranscludeFn;\n\n            } else if (!parentBoundTranscludeFn && transcludeFn) {\n              childBoundTranscludeFn = createBoundTranscludeFn(scope, transcludeFn);\n\n            } else {\n              childBoundTranscludeFn = null;\n            }\n\n            nodeLinkFn(childLinkFn, childScope, node, $rootElement, childBoundTranscludeFn);\n\n          } else if (childLinkFn) {\n            childLinkFn(scope, node.childNodes, undefined, parentBoundTranscludeFn);\n          }\n        }\n      }\n    }\n\n    function createBoundTranscludeFn(scope, transcludeFn, previousBoundTranscludeFn) {\n      function boundTranscludeFn(transcludedScope, cloneFn, controllers, futureParentElement, containingScope) {\n\n        if (!transcludedScope) {\n          transcludedScope = scope.$new(false, containingScope);\n          transcludedScope.$$transcluded = true;\n        }\n\n        return transcludeFn(transcludedScope, cloneFn, {\n          parentBoundTranscludeFn: previousBoundTranscludeFn,\n          transcludeControllers: controllers,\n          futureParentElement: futureParentElement\n        });\n      }\n\n      // We need  to attach the transclusion slots onto the `boundTranscludeFn`\n      // so that they are available inside the `controllersBoundTransclude` function\n      var boundSlots = boundTranscludeFn.$$slots = createMap();\n      for (var slotName in transcludeFn.$$slots) {\n        if (transcludeFn.$$slots[slotName]) {\n          boundSlots[slotName] = createBoundTranscludeFn(scope, transcludeFn.$$slots[slotName], previousBoundTranscludeFn);\n        } else {\n          boundSlots[slotName] = null;\n        }\n      }\n\n      return boundTranscludeFn;\n    }\n\n    /**\n     * Looks for directives on the given node and adds them to the directive collection which is\n     * sorted.\n     *\n     * @param node Node to search.\n     * @param directives An array to which the directives are added to. This array is sorted before\n     *        the function returns.\n     * @param attrs The shared attrs object which is used to populate the normalized attributes.\n     * @param {number=} maxPriority Max directive priority.\n     */\n    function collectDirectives(node, directives, attrs, maxPriority, ignoreDirective) {\n      var nodeType = node.nodeType,\n          attrsMap = attrs.$attr,\n          match,\n          className;\n\n      switch (nodeType) {\n        case NODE_TYPE_ELEMENT: /* Element */\n          // use the node name: <directive>\n          addDirective(directives,\n              directiveNormalize(nodeName_(node)), 'E', maxPriority, ignoreDirective);\n\n          // iterate over the attributes\n          for (var attr, name, nName, ngAttrName, value, isNgAttr, nAttrs = node.attributes,\n                   j = 0, jj = nAttrs && nAttrs.length; j < jj; j++) {\n            var attrStartName = false;\n            var attrEndName = false;\n\n            attr = nAttrs[j];\n            name = attr.name;\n            value = trim(attr.value);\n\n            // support ngAttr attribute binding\n            ngAttrName = directiveNormalize(name);\n            if (isNgAttr = NG_ATTR_BINDING.test(ngAttrName)) {\n              name = name.replace(PREFIX_REGEXP, '')\n                .substr(8).replace(/_(.)/g, function(match, letter) {\n                  return letter.toUpperCase();\n                });\n            }\n\n            var multiElementMatch = ngAttrName.match(MULTI_ELEMENT_DIR_RE);\n            if (multiElementMatch && directiveIsMultiElement(multiElementMatch[1])) {\n              attrStartName = name;\n              attrEndName = name.substr(0, name.length - 5) + 'end';\n              name = name.substr(0, name.length - 6);\n            }\n\n            nName = directiveNormalize(name.toLowerCase());\n            attrsMap[nName] = name;\n            if (isNgAttr || !attrs.hasOwnProperty(nName)) {\n                attrs[nName] = value;\n                if (getBooleanAttrName(node, nName)) {\n                  attrs[nName] = true; // presence means true\n                }\n            }\n            addAttrInterpolateDirective(node, directives, value, nName, isNgAttr);\n            addDirective(directives, nName, 'A', maxPriority, ignoreDirective, attrStartName,\n                          attrEndName);\n          }\n\n          // use class as directive\n          className = node.className;\n          if (isObject(className)) {\n              // Maybe SVGAnimatedString\n              className = className.animVal;\n          }\n          if (isString(className) && className !== '') {\n            while (match = CLASS_DIRECTIVE_REGEXP.exec(className)) {\n              nName = directiveNormalize(match[2]);\n              if (addDirective(directives, nName, 'C', maxPriority, ignoreDirective)) {\n                attrs[nName] = trim(match[3]);\n              }\n              className = className.substr(match.index + match[0].length);\n            }\n          }\n          break;\n        case NODE_TYPE_TEXT: /* Text Node */\n          if (msie === 11) {\n            // Workaround for #11781\n            while (node.parentNode && node.nextSibling && node.nextSibling.nodeType === NODE_TYPE_TEXT) {\n              node.nodeValue = node.nodeValue + node.nextSibling.nodeValue;\n              node.parentNode.removeChild(node.nextSibling);\n            }\n          }\n          addTextInterpolateDirective(directives, node.nodeValue);\n          break;\n        case NODE_TYPE_COMMENT: /* Comment */\n          collectCommentDirectives(node, directives, attrs, maxPriority, ignoreDirective);\n          break;\n      }\n\n      directives.sort(byPriority);\n      return directives;\n    }\n\n    function collectCommentDirectives(node, directives, attrs, maxPriority, ignoreDirective) {\n      // function created because of performance, try/catch disables\n      // the optimization of the whole function #14848\n      try {\n        var match = COMMENT_DIRECTIVE_REGEXP.exec(node.nodeValue);\n        if (match) {\n          var nName = directiveNormalize(match[1]);\n          if (addDirective(directives, nName, 'M', maxPriority, ignoreDirective)) {\n            attrs[nName] = trim(match[2]);\n          }\n        }\n      } catch (e) {\n        // turns out that under some circumstances IE9 throws errors when one attempts to read\n        // comment's node value.\n        // Just ignore it and continue. (Can't seem to reproduce in test case.)\n      }\n    }\n\n    /**\n     * Given a node with an directive-start it collects all of the siblings until it finds\n     * directive-end.\n     * @param node\n     * @param attrStart\n     * @param attrEnd\n     * @returns {*}\n     */\n    function groupScan(node, attrStart, attrEnd) {\n      var nodes = [];\n      var depth = 0;\n      if (attrStart && node.hasAttribute && node.hasAttribute(attrStart)) {\n        do {\n          if (!node) {\n            throw $compileMinErr('uterdir',\n                      \"Unterminated attribute, found '{0}' but no matching '{1}' found.\",\n                      attrStart, attrEnd);\n          }\n          if (node.nodeType == NODE_TYPE_ELEMENT) {\n            if (node.hasAttribute(attrStart)) depth++;\n            if (node.hasAttribute(attrEnd)) depth--;\n          }\n          nodes.push(node);\n          node = node.nextSibling;\n        } while (depth > 0);\n      } else {\n        nodes.push(node);\n      }\n\n      return jqLite(nodes);\n    }\n\n    /**\n     * Wrapper for linking function which converts normal linking function into a grouped\n     * linking function.\n     * @param linkFn\n     * @param attrStart\n     * @param attrEnd\n     * @returns {Function}\n     */\n    function groupElementsLinkFnWrapper(linkFn, attrStart, attrEnd) {\n      return function groupedElementsLink(scope, element, attrs, controllers, transcludeFn) {\n        element = groupScan(element[0], attrStart, attrEnd);\n        return linkFn(scope, element, attrs, controllers, transcludeFn);\n      };\n    }\n\n    /**\n     * A function generator that is used to support both eager and lazy compilation\n     * linking function.\n     * @param eager\n     * @param $compileNodes\n     * @param transcludeFn\n     * @param maxPriority\n     * @param ignoreDirective\n     * @param previousCompileContext\n     * @returns {Function}\n     */\n    function compilationGenerator(eager, $compileNodes, transcludeFn, maxPriority, ignoreDirective, previousCompileContext) {\n      var compiled;\n\n      if (eager) {\n        return compile($compileNodes, transcludeFn, maxPriority, ignoreDirective, previousCompileContext);\n      }\n      return function lazyCompilation() {\n        if (!compiled) {\n          compiled = compile($compileNodes, transcludeFn, maxPriority, ignoreDirective, previousCompileContext);\n\n          // Null out all of these references in order to make them eligible for garbage collection\n          // since this is a potentially long lived closure\n          $compileNodes = transcludeFn = previousCompileContext = null;\n        }\n        return compiled.apply(this, arguments);\n      };\n    }\n\n    /**\n     * Once the directives have been collected, their compile functions are executed. This method\n     * is responsible for inlining directive templates as well as terminating the application\n     * of the directives if the terminal directive has been reached.\n     *\n     * @param {Array} directives Array of collected directives to execute their compile function.\n     *        this needs to be pre-sorted by priority order.\n     * @param {Node} compileNode The raw DOM node to apply the compile functions to\n     * @param {Object} templateAttrs The shared attribute function\n     * @param {function(angular.Scope, cloneAttachFn=)} transcludeFn A linking function, where the\n     *                                                  scope argument is auto-generated to the new\n     *                                                  child of the transcluded parent scope.\n     * @param {JQLite} jqCollection If we are working on the root of the compile tree then this\n     *                              argument has the root jqLite array so that we can replace nodes\n     *                              on it.\n     * @param {Object=} originalReplaceDirective An optional directive that will be ignored when\n     *                                           compiling the transclusion.\n     * @param {Array.<Function>} preLinkFns\n     * @param {Array.<Function>} postLinkFns\n     * @param {Object} previousCompileContext Context used for previous compilation of the current\n     *                                        node\n     * @returns {Function} linkFn\n     */\n    function applyDirectivesToNode(directives, compileNode, templateAttrs, transcludeFn,\n                                   jqCollection, originalReplaceDirective, preLinkFns, postLinkFns,\n                                   previousCompileContext) {\n      previousCompileContext = previousCompileContext || {};\n\n      var terminalPriority = -Number.MAX_VALUE,\n          newScopeDirective = previousCompileContext.newScopeDirective,\n          controllerDirectives = previousCompileContext.controllerDirectives,\n          newIsolateScopeDirective = previousCompileContext.newIsolateScopeDirective,\n          templateDirective = previousCompileContext.templateDirective,\n          nonTlbTranscludeDirective = previousCompileContext.nonTlbTranscludeDirective,\n          hasTranscludeDirective = false,\n          hasTemplate = false,\n          hasElementTranscludeDirective = previousCompileContext.hasElementTranscludeDirective,\n          $compileNode = templateAttrs.$$element = jqLite(compileNode),\n          directive,\n          directiveName,\n          $template,\n          replaceDirective = originalReplaceDirective,\n          childTranscludeFn = transcludeFn,\n          linkFn,\n          didScanForMultipleTransclusion = false,\n          mightHaveMultipleTransclusionError = false,\n          directiveValue;\n\n      // executes all directives on the current element\n      for (var i = 0, ii = directives.length; i < ii; i++) {\n        directive = directives[i];\n        var attrStart = directive.$$start;\n        var attrEnd = directive.$$end;\n\n        // collect multiblock sections\n        if (attrStart) {\n          $compileNode = groupScan(compileNode, attrStart, attrEnd);\n        }\n        $template = undefined;\n\n        if (terminalPriority > directive.priority) {\n          break; // prevent further processing of directives\n        }\n\n        if (directiveValue = directive.scope) {\n\n          // skip the check for directives with async templates, we'll check the derived sync\n          // directive when the template arrives\n          if (!directive.templateUrl) {\n            if (isObject(directiveValue)) {\n              // This directive is trying to add an isolated scope.\n              // Check that there is no scope of any kind already\n              assertNoDuplicate('new/isolated scope', newIsolateScopeDirective || newScopeDirective,\n                                directive, $compileNode);\n              newIsolateScopeDirective = directive;\n            } else {\n              // This directive is trying to add a child scope.\n              // Check that there is no isolated scope already\n              assertNoDuplicate('new/isolated scope', newIsolateScopeDirective, directive,\n                                $compileNode);\n            }\n          }\n\n          newScopeDirective = newScopeDirective || directive;\n        }\n\n        directiveName = directive.name;\n\n        // If we encounter a condition that can result in transclusion on the directive,\n        // then scan ahead in the remaining directives for others that may cause a multiple\n        // transclusion error to be thrown during the compilation process.  If a matching directive\n        // is found, then we know that when we encounter a transcluded directive, we need to eagerly\n        // compile the `transclude` function rather than doing it lazily in order to throw\n        // exceptions at the correct time\n        if (!didScanForMultipleTransclusion && ((directive.replace && (directive.templateUrl || directive.template))\n            || (directive.transclude && !directive.$$tlb))) {\n                var candidateDirective;\n\n                for (var scanningIndex = i + 1; candidateDirective = directives[scanningIndex++];) {\n                    if ((candidateDirective.transclude && !candidateDirective.$$tlb)\n                        || (candidateDirective.replace && (candidateDirective.templateUrl || candidateDirective.template))) {\n                        mightHaveMultipleTransclusionError = true;\n                        break;\n                    }\n                }\n\n                didScanForMultipleTransclusion = true;\n        }\n\n        if (!directive.templateUrl && directive.controller) {\n          directiveValue = directive.controller;\n          controllerDirectives = controllerDirectives || createMap();\n          assertNoDuplicate(\"'\" + directiveName + \"' controller\",\n              controllerDirectives[directiveName], directive, $compileNode);\n          controllerDirectives[directiveName] = directive;\n        }\n\n        if (directiveValue = directive.transclude) {\n          hasTranscludeDirective = true;\n\n          // Special case ngIf and ngRepeat so that we don't complain about duplicate transclusion.\n          // This option should only be used by directives that know how to safely handle element transclusion,\n          // where the transcluded nodes are added or replaced after linking.\n          if (!directive.$$tlb) {\n            assertNoDuplicate('transclusion', nonTlbTranscludeDirective, directive, $compileNode);\n            nonTlbTranscludeDirective = directive;\n          }\n\n          if (directiveValue == 'element') {\n            hasElementTranscludeDirective = true;\n            terminalPriority = directive.priority;\n            $template = $compileNode;\n            $compileNode = templateAttrs.$$element =\n                jqLite(compile.$$createComment(directiveName, templateAttrs[directiveName]));\n            compileNode = $compileNode[0];\n            replaceWith(jqCollection, sliceArgs($template), compileNode);\n\n            // Support: Chrome < 50\n            // https://github.com/angular/angular.js/issues/14041\n\n            // In the versions of V8 prior to Chrome 50, the document fragment that is created\n            // in the `replaceWith` function is improperly garbage collected despite still\n            // being referenced by the `parentNode` property of all of the child nodes.  By adding\n            // a reference to the fragment via a different property, we can avoid that incorrect\n            // behavior.\n            // TODO: remove this line after Chrome 50 has been released\n            $template[0].$$parentNode = $template[0].parentNode;\n\n            childTranscludeFn = compilationGenerator(mightHaveMultipleTransclusionError, $template, transcludeFn, terminalPriority,\n                                        replaceDirective && replaceDirective.name, {\n                                          // Don't pass in:\n                                          // - controllerDirectives - otherwise we'll create duplicates controllers\n                                          // - newIsolateScopeDirective or templateDirective - combining templates with\n                                          //   element transclusion doesn't make sense.\n                                          //\n                                          // We need only nonTlbTranscludeDirective so that we prevent putting transclusion\n                                          // on the same element more than once.\n                                          nonTlbTranscludeDirective: nonTlbTranscludeDirective\n                                        });\n          } else {\n\n            var slots = createMap();\n\n            $template = jqLite(jqLiteClone(compileNode)).contents();\n\n            if (isObject(directiveValue)) {\n\n              // We have transclusion slots,\n              // collect them up, compile them and store their transclusion functions\n              $template = [];\n\n              var slotMap = createMap();\n              var filledSlots = createMap();\n\n              // Parse the element selectors\n              forEach(directiveValue, function(elementSelector, slotName) {\n                // If an element selector starts with a ? then it is optional\n                var optional = (elementSelector.charAt(0) === '?');\n                elementSelector = optional ? elementSelector.substring(1) : elementSelector;\n\n                slotMap[elementSelector] = slotName;\n\n                // We explicitly assign `null` since this implies that a slot was defined but not filled.\n                // Later when calling boundTransclusion functions with a slot name we only error if the\n                // slot is `undefined`\n                slots[slotName] = null;\n\n                // filledSlots contains `true` for all slots that are either optional or have been\n                // filled. This is used to check that we have not missed any required slots\n                filledSlots[slotName] = optional;\n              });\n\n              // Add the matching elements into their slot\n              forEach($compileNode.contents(), function(node) {\n                var slotName = slotMap[directiveNormalize(nodeName_(node))];\n                if (slotName) {\n                  filledSlots[slotName] = true;\n                  slots[slotName] = slots[slotName] || [];\n                  slots[slotName].push(node);\n                } else {\n                  $template.push(node);\n                }\n              });\n\n              // Check for required slots that were not filled\n              forEach(filledSlots, function(filled, slotName) {\n                if (!filled) {\n                  throw $compileMinErr('reqslot', 'Required transclusion slot `{0}` was not filled.', slotName);\n                }\n              });\n\n              for (var slotName in slots) {\n                if (slots[slotName]) {\n                  // Only define a transclusion function if the slot was filled\n                  slots[slotName] = compilationGenerator(mightHaveMultipleTransclusionError, slots[slotName], transcludeFn);\n                }\n              }\n            }\n\n            $compileNode.empty(); // clear contents\n            childTranscludeFn = compilationGenerator(mightHaveMultipleTransclusionError, $template, transcludeFn, undefined,\n                undefined, { needsNewScope: directive.$$isolateScope || directive.$$newScope});\n            childTranscludeFn.$$slots = slots;\n          }\n        }\n\n        if (directive.template) {\n          hasTemplate = true;\n          assertNoDuplicate('template', templateDirective, directive, $compileNode);\n          templateDirective = directive;\n\n          directiveValue = (isFunction(directive.template))\n              ? directive.template($compileNode, templateAttrs)\n              : directive.template;\n\n          directiveValue = denormalizeTemplate(directiveValue);\n\n          if (directive.replace) {\n            replaceDirective = directive;\n            if (jqLiteIsTextNode(directiveValue)) {\n              $template = [];\n            } else {\n              $template = removeComments(wrapTemplate(directive.templateNamespace, trim(directiveValue)));\n            }\n            compileNode = $template[0];\n\n            if ($template.length != 1 || compileNode.nodeType !== NODE_TYPE_ELEMENT) {\n              throw $compileMinErr('tplrt',\n                  \"Template for directive '{0}' must have exactly one root element. {1}\",\n                  directiveName, '');\n            }\n\n            replaceWith(jqCollection, $compileNode, compileNode);\n\n            var newTemplateAttrs = {$attr: {}};\n\n            // combine directives from the original node and from the template:\n            // - take the array of directives for this element\n            // - split it into two parts, those that already applied (processed) and those that weren't (unprocessed)\n            // - collect directives from the template and sort them by priority\n            // - combine directives as: processed + template + unprocessed\n            var templateDirectives = collectDirectives(compileNode, [], newTemplateAttrs);\n            var unprocessedDirectives = directives.splice(i + 1, directives.length - (i + 1));\n\n            if (newIsolateScopeDirective || newScopeDirective) {\n              // The original directive caused the current element to be replaced but this element\n              // also needs to have a new scope, so we need to tell the template directives\n              // that they would need to get their scope from further up, if they require transclusion\n              markDirectiveScope(templateDirectives, newIsolateScopeDirective, newScopeDirective);\n            }\n            directives = directives.concat(templateDirectives).concat(unprocessedDirectives);\n            mergeTemplateAttributes(templateAttrs, newTemplateAttrs);\n\n            ii = directives.length;\n          } else {\n            $compileNode.html(directiveValue);\n          }\n        }\n\n        if (directive.templateUrl) {\n          hasTemplate = true;\n          assertNoDuplicate('template', templateDirective, directive, $compileNode);\n          templateDirective = directive;\n\n          if (directive.replace) {\n            replaceDirective = directive;\n          }\n\n          /* jshint -W021 */\n          nodeLinkFn = compileTemplateUrl(directives.splice(i, directives.length - i), $compileNode,\n          /* jshint +W021 */\n              templateAttrs, jqCollection, hasTranscludeDirective && childTranscludeFn, preLinkFns, postLinkFns, {\n                controllerDirectives: controllerDirectives,\n                newScopeDirective: (newScopeDirective !== directive) && newScopeDirective,\n                newIsolateScopeDirective: newIsolateScopeDirective,\n                templateDirective: templateDirective,\n                nonTlbTranscludeDirective: nonTlbTranscludeDirective\n              });\n          ii = directives.length;\n        } else if (directive.compile) {\n          try {\n            linkFn = directive.compile($compileNode, templateAttrs, childTranscludeFn);\n            var context = directive.$$originalDirective || directive;\n            if (isFunction(linkFn)) {\n              addLinkFns(null, bind(context, linkFn), attrStart, attrEnd);\n            } else if (linkFn) {\n              addLinkFns(bind(context, linkFn.pre), bind(context, linkFn.post), attrStart, attrEnd);\n            }\n          } catch (e) {\n            $exceptionHandler(e, startingTag($compileNode));\n          }\n        }\n\n        if (directive.terminal) {\n          nodeLinkFn.terminal = true;\n          terminalPriority = Math.max(terminalPriority, directive.priority);\n        }\n\n      }\n\n      nodeLinkFn.scope = newScopeDirective && newScopeDirective.scope === true;\n      nodeLinkFn.transcludeOnThisElement = hasTranscludeDirective;\n      nodeLinkFn.templateOnThisElement = hasTemplate;\n      nodeLinkFn.transclude = childTranscludeFn;\n\n      previousCompileContext.hasElementTranscludeDirective = hasElementTranscludeDirective;\n\n      // might be normal or delayed nodeLinkFn depending on if templateUrl is present\n      return nodeLinkFn;\n\n      ////////////////////\n\n      function addLinkFns(pre, post, attrStart, attrEnd) {\n        if (pre) {\n          if (attrStart) pre = groupElementsLinkFnWrapper(pre, attrStart, attrEnd);\n          pre.require = directive.require;\n          pre.directiveName = directiveName;\n          if (newIsolateScopeDirective === directive || directive.$$isolateScope) {\n            pre = cloneAndAnnotateFn(pre, {isolateScope: true});\n          }\n          preLinkFns.push(pre);\n        }\n        if (post) {\n          if (attrStart) post = groupElementsLinkFnWrapper(post, attrStart, attrEnd);\n          post.require = directive.require;\n          post.directiveName = directiveName;\n          if (newIsolateScopeDirective === directive || directive.$$isolateScope) {\n            post = cloneAndAnnotateFn(post, {isolateScope: true});\n          }\n          postLinkFns.push(post);\n        }\n      }\n\n      function nodeLinkFn(childLinkFn, scope, linkNode, $rootElement, boundTranscludeFn) {\n        var i, ii, linkFn, isolateScope, controllerScope, elementControllers, transcludeFn, $element,\n            attrs, scopeBindingInfo;\n\n        if (compileNode === linkNode) {\n          attrs = templateAttrs;\n          $element = templateAttrs.$$element;\n        } else {\n          $element = jqLite(linkNode);\n          attrs = new Attributes($element, templateAttrs);\n        }\n\n        controllerScope = scope;\n        if (newIsolateScopeDirective) {\n          isolateScope = scope.$new(true);\n        } else if (newScopeDirective) {\n          controllerScope = scope.$parent;\n        }\n\n        if (boundTranscludeFn) {\n          // track `boundTranscludeFn` so it can be unwrapped if `transcludeFn`\n          // is later passed as `parentBoundTranscludeFn` to `publicLinkFn`\n          transcludeFn = controllersBoundTransclude;\n          transcludeFn.$$boundTransclude = boundTranscludeFn;\n          // expose the slots on the `$transclude` function\n          transcludeFn.isSlotFilled = function(slotName) {\n            return !!boundTranscludeFn.$$slots[slotName];\n          };\n        }\n\n        if (controllerDirectives) {\n          elementControllers = setupControllers($element, attrs, transcludeFn, controllerDirectives, isolateScope, scope, newIsolateScopeDirective);\n        }\n\n        if (newIsolateScopeDirective) {\n          // Initialize isolate scope bindings for new isolate scope directive.\n          compile.$$addScopeInfo($element, isolateScope, true, !(templateDirective && (templateDirective === newIsolateScopeDirective ||\n              templateDirective === newIsolateScopeDirective.$$originalDirective)));\n          compile.$$addScopeClass($element, true);\n          isolateScope.$$isolateBindings =\n              newIsolateScopeDirective.$$isolateBindings;\n          scopeBindingInfo = initializeDirectiveBindings(scope, attrs, isolateScope,\n                                        isolateScope.$$isolateBindings,\n                                        newIsolateScopeDirective);\n          if (scopeBindingInfo.removeWatches) {\n            isolateScope.$on('$destroy', scopeBindingInfo.removeWatches);\n          }\n        }\n\n        // Initialize bindToController bindings\n        for (var name in elementControllers) {\n          var controllerDirective = controllerDirectives[name];\n          var controller = elementControllers[name];\n          var bindings = controllerDirective.$$bindings.bindToController;\n\n          if (controller.identifier && bindings) {\n            controller.bindingInfo =\n              initializeDirectiveBindings(controllerScope, attrs, controller.instance, bindings, controllerDirective);\n          } else {\n            controller.bindingInfo = {};\n          }\n\n          var controllerResult = controller();\n          if (controllerResult !== controller.instance) {\n            // If the controller constructor has a return value, overwrite the instance\n            // from setupControllers\n            controller.instance = controllerResult;\n            $element.data('$' + controllerDirective.name + 'Controller', controllerResult);\n            controller.bindingInfo.removeWatches && controller.bindingInfo.removeWatches();\n            controller.bindingInfo =\n              initializeDirectiveBindings(controllerScope, attrs, controller.instance, bindings, controllerDirective);\n          }\n        }\n\n        // Bind the required controllers to the controller, if `require` is an object and `bindToController` is truthy\n        forEach(controllerDirectives, function(controllerDirective, name) {\n          var require = controllerDirective.require;\n          if (controllerDirective.bindToController && !isArray(require) && isObject(require)) {\n            extend(elementControllers[name].instance, getControllers(name, require, $element, elementControllers));\n          }\n        });\n\n        // Handle the init and destroy lifecycle hooks on all controllers that have them\n        forEach(elementControllers, function(controller) {\n          var controllerInstance = controller.instance;\n          if (isFunction(controllerInstance.$onChanges)) {\n            try {\n              controllerInstance.$onChanges(controller.bindingInfo.initialChanges);\n            } catch (e) {\n              $exceptionHandler(e);\n            }\n          }\n          if (isFunction(controllerInstance.$onInit)) {\n            try {\n              controllerInstance.$onInit();\n            } catch (e) {\n              $exceptionHandler(e);\n            }\n          }\n          if (isFunction(controllerInstance.$doCheck)) {\n            controllerScope.$watch(function() { controllerInstance.$doCheck(); });\n            controllerInstance.$doCheck();\n          }\n          if (isFunction(controllerInstance.$onDestroy)) {\n            controllerScope.$on('$destroy', function callOnDestroyHook() {\n              controllerInstance.$onDestroy();\n            });\n          }\n        });\n\n        // PRELINKING\n        for (i = 0, ii = preLinkFns.length; i < ii; i++) {\n          linkFn = preLinkFns[i];\n          invokeLinkFn(linkFn,\n              linkFn.isolateScope ? isolateScope : scope,\n              $element,\n              attrs,\n              linkFn.require && getControllers(linkFn.directiveName, linkFn.require, $element, elementControllers),\n              transcludeFn\n          );\n        }\n\n        // RECURSION\n        // We only pass the isolate scope, if the isolate directive has a template,\n        // otherwise the child elements do not belong to the isolate directive.\n        var scopeToChild = scope;\n        if (newIsolateScopeDirective && (newIsolateScopeDirective.template || newIsolateScopeDirective.templateUrl === null)) {\n          scopeToChild = isolateScope;\n        }\n        childLinkFn && childLinkFn(scopeToChild, linkNode.childNodes, undefined, boundTranscludeFn);\n\n        // POSTLINKING\n        for (i = postLinkFns.length - 1; i >= 0; i--) {\n          linkFn = postLinkFns[i];\n          invokeLinkFn(linkFn,\n              linkFn.isolateScope ? isolateScope : scope,\n              $element,\n              attrs,\n              linkFn.require && getControllers(linkFn.directiveName, linkFn.require, $element, elementControllers),\n              transcludeFn\n          );\n        }\n\n        // Trigger $postLink lifecycle hooks\n        forEach(elementControllers, function(controller) {\n          var controllerInstance = controller.instance;\n          if (isFunction(controllerInstance.$postLink)) {\n            controllerInstance.$postLink();\n          }\n        });\n\n        // This is the function that is injected as `$transclude`.\n        // Note: all arguments are optional!\n        function controllersBoundTransclude(scope, cloneAttachFn, futureParentElement, slotName) {\n          var transcludeControllers;\n          // No scope passed in:\n          if (!isScope(scope)) {\n            slotName = futureParentElement;\n            futureParentElement = cloneAttachFn;\n            cloneAttachFn = scope;\n            scope = undefined;\n          }\n\n          if (hasElementTranscludeDirective) {\n            transcludeControllers = elementControllers;\n          }\n          if (!futureParentElement) {\n            futureParentElement = hasElementTranscludeDirective ? $element.parent() : $element;\n          }\n          if (slotName) {\n            // slotTranscludeFn can be one of three things:\n            //  * a transclude function - a filled slot\n            //  * `null` - an optional slot that was not filled\n            //  * `undefined` - a slot that was not declared (i.e. invalid)\n            var slotTranscludeFn = boundTranscludeFn.$$slots[slotName];\n            if (slotTranscludeFn) {\n              return slotTranscludeFn(scope, cloneAttachFn, transcludeControllers, futureParentElement, scopeToChild);\n            } else if (isUndefined(slotTranscludeFn)) {\n              throw $compileMinErr('noslot',\n               'No parent directive that requires a transclusion with slot name \"{0}\". ' +\n               'Element: {1}',\n               slotName, startingTag($element));\n            }\n          } else {\n            return boundTranscludeFn(scope, cloneAttachFn, transcludeControllers, futureParentElement, scopeToChild);\n          }\n        }\n      }\n    }\n\n    function getControllers(directiveName, require, $element, elementControllers) {\n      var value;\n\n      if (isString(require)) {\n        var match = require.match(REQUIRE_PREFIX_REGEXP);\n        var name = require.substring(match[0].length);\n        var inheritType = match[1] || match[3];\n        var optional = match[2] === '?';\n\n        //If only parents then start at the parent element\n        if (inheritType === '^^') {\n          $element = $element.parent();\n        //Otherwise attempt getting the controller from elementControllers in case\n        //the element is transcluded (and has no data) and to avoid .data if possible\n        } else {\n          value = elementControllers && elementControllers[name];\n          value = value && value.instance;\n        }\n\n        if (!value) {\n          var dataName = '$' + name + 'Controller';\n          value = inheritType ? $element.inheritedData(dataName) : $element.data(dataName);\n        }\n\n        if (!value && !optional) {\n          throw $compileMinErr('ctreq',\n              \"Controller '{0}', required by directive '{1}', can't be found!\",\n              name, directiveName);\n        }\n      } else if (isArray(require)) {\n        value = [];\n        for (var i = 0, ii = require.length; i < ii; i++) {\n          value[i] = getControllers(directiveName, require[i], $element, elementControllers);\n        }\n      } else if (isObject(require)) {\n        value = {};\n        forEach(require, function(controller, property) {\n          value[property] = getControllers(directiveName, controller, $element, elementControllers);\n        });\n      }\n\n      return value || null;\n    }\n\n    function setupControllers($element, attrs, transcludeFn, controllerDirectives, isolateScope, scope, newIsolateScopeDirective) {\n      var elementControllers = createMap();\n      for (var controllerKey in controllerDirectives) {\n        var directive = controllerDirectives[controllerKey];\n        var locals = {\n          $scope: directive === newIsolateScopeDirective || directive.$$isolateScope ? isolateScope : scope,\n          $element: $element,\n          $attrs: attrs,\n          $transclude: transcludeFn\n        };\n\n        var controller = directive.controller;\n        if (controller == '@') {\n          controller = attrs[directive.name];\n        }\n\n        var controllerInstance = $controller(controller, locals, true, directive.controllerAs);\n\n        // For directives with element transclusion the element is a comment.\n        // In this case .data will not attach any data.\n        // Instead, we save the controllers for the element in a local hash and attach to .data\n        // later, once we have the actual element.\n        elementControllers[directive.name] = controllerInstance;\n        $element.data('$' + directive.name + 'Controller', controllerInstance.instance);\n      }\n      return elementControllers;\n    }\n\n    // Depending upon the context in which a directive finds itself it might need to have a new isolated\n    // or child scope created. For instance:\n    // * if the directive has been pulled into a template because another directive with a higher priority\n    // asked for element transclusion\n    // * if the directive itself asks for transclusion but it is at the root of a template and the original\n    // element was replaced. See https://github.com/angular/angular.js/issues/12936\n    function markDirectiveScope(directives, isolateScope, newScope) {\n      for (var j = 0, jj = directives.length; j < jj; j++) {\n        directives[j] = inherit(directives[j], {$$isolateScope: isolateScope, $$newScope: newScope});\n      }\n    }\n\n    /**\n     * looks up the directive and decorates it with exception handling and proper parameters. We\n     * call this the boundDirective.\n     *\n     * @param {string} name name of the directive to look up.\n     * @param {string} location The directive must be found in specific format.\n     *   String containing any of theses characters:\n     *\n     *   * `E`: element name\n     *   * `A': attribute\n     *   * `C`: class\n     *   * `M`: comment\n     * @returns {boolean} true if directive was added.\n     */\n    function addDirective(tDirectives, name, location, maxPriority, ignoreDirective, startAttrName,\n                          endAttrName) {\n      if (name === ignoreDirective) return null;\n      var match = null;\n      if (hasDirectives.hasOwnProperty(name)) {\n        for (var directive, directives = $injector.get(name + Suffix),\n            i = 0, ii = directives.length; i < ii; i++) {\n          try {\n            directive = directives[i];\n            if ((isUndefined(maxPriority) || maxPriority > directive.priority) &&\n                 directive.restrict.indexOf(location) != -1) {\n              if (startAttrName) {\n                directive = inherit(directive, {$$start: startAttrName, $$end: endAttrName});\n              }\n              if (!directive.$$bindings) {\n                var bindings = directive.$$bindings =\n                    parseDirectiveBindings(directive, directive.name);\n                if (isObject(bindings.isolateScope)) {\n                  directive.$$isolateBindings = bindings.isolateScope;\n                }\n              }\n              tDirectives.push(directive);\n              match = directive;\n            }\n          } catch (e) { $exceptionHandler(e); }\n        }\n      }\n      return match;\n    }\n\n\n    /**\n     * looks up the directive and returns true if it is a multi-element directive,\n     * and therefore requires DOM nodes between -start and -end markers to be grouped\n     * together.\n     *\n     * @param {string} name name of the directive to look up.\n     * @returns true if directive was registered as multi-element.\n     */\n    function directiveIsMultiElement(name) {\n      if (hasDirectives.hasOwnProperty(name)) {\n        for (var directive, directives = $injector.get(name + Suffix),\n            i = 0, ii = directives.length; i < ii; i++) {\n          directive = directives[i];\n          if (directive.multiElement) {\n            return true;\n          }\n        }\n      }\n      return false;\n    }\n\n    /**\n     * When the element is replaced with HTML template then the new attributes\n     * on the template need to be merged with the existing attributes in the DOM.\n     * The desired effect is to have both of the attributes present.\n     *\n     * @param {object} dst destination attributes (original DOM)\n     * @param {object} src source attributes (from the directive template)\n     */\n    function mergeTemplateAttributes(dst, src) {\n      var srcAttr = src.$attr,\n          dstAttr = dst.$attr,\n          $element = dst.$$element;\n\n      // reapply the old attributes to the new element\n      forEach(dst, function(value, key) {\n        if (key.charAt(0) != '$') {\n          if (src[key] && src[key] !== value) {\n            value += (key === 'style' ? ';' : ' ') + src[key];\n          }\n          dst.$set(key, value, true, srcAttr[key]);\n        }\n      });\n\n      // copy the new attributes on the old attrs object\n      forEach(src, function(value, key) {\n        // Check if we already set this attribute in the loop above.\n        // `dst` will never contain hasOwnProperty as DOM parser won't let it.\n        // You will get an \"InvalidCharacterError: DOM Exception 5\" error if you\n        // have an attribute like \"has-own-property\" or \"data-has-own-property\", etc.\n        if (!dst.hasOwnProperty(key) && key.charAt(0) !== '$') {\n          dst[key] = value;\n\n          if (key !== 'class' && key !== 'style') {\n            dstAttr[key] = srcAttr[key];\n          }\n        }\n      });\n    }\n\n\n    function compileTemplateUrl(directives, $compileNode, tAttrs,\n        $rootElement, childTranscludeFn, preLinkFns, postLinkFns, previousCompileContext) {\n      var linkQueue = [],\n          afterTemplateNodeLinkFn,\n          afterTemplateChildLinkFn,\n          beforeTemplateCompileNode = $compileNode[0],\n          origAsyncDirective = directives.shift(),\n          derivedSyncDirective = inherit(origAsyncDirective, {\n            templateUrl: null, transclude: null, replace: null, $$originalDirective: origAsyncDirective\n          }),\n          templateUrl = (isFunction(origAsyncDirective.templateUrl))\n              ? origAsyncDirective.templateUrl($compileNode, tAttrs)\n              : origAsyncDirective.templateUrl,\n          templateNamespace = origAsyncDirective.templateNamespace;\n\n      $compileNode.empty();\n\n      $templateRequest(templateUrl)\n        .then(function(content) {\n          var compileNode, tempTemplateAttrs, $template, childBoundTranscludeFn;\n\n          content = denormalizeTemplate(content);\n\n          if (origAsyncDirective.replace) {\n            if (jqLiteIsTextNode(content)) {\n              $template = [];\n            } else {\n              $template = removeComments(wrapTemplate(templateNamespace, trim(content)));\n            }\n            compileNode = $template[0];\n\n            if ($template.length != 1 || compileNode.nodeType !== NODE_TYPE_ELEMENT) {\n              throw $compileMinErr('tplrt',\n                  \"Template for directive '{0}' must have exactly one root element. {1}\",\n                  origAsyncDirective.name, templateUrl);\n            }\n\n            tempTemplateAttrs = {$attr: {}};\n            replaceWith($rootElement, $compileNode, compileNode);\n            var templateDirectives = collectDirectives(compileNode, [], tempTemplateAttrs);\n\n            if (isObject(origAsyncDirective.scope)) {\n              // the original directive that caused the template to be loaded async required\n              // an isolate scope\n              markDirectiveScope(templateDirectives, true);\n            }\n            directives = templateDirectives.concat(directives);\n            mergeTemplateAttributes(tAttrs, tempTemplateAttrs);\n          } else {\n            compileNode = beforeTemplateCompileNode;\n            $compileNode.html(content);\n          }\n\n          directives.unshift(derivedSyncDirective);\n\n          afterTemplateNodeLinkFn = applyDirectivesToNode(directives, compileNode, tAttrs,\n              childTranscludeFn, $compileNode, origAsyncDirective, preLinkFns, postLinkFns,\n              previousCompileContext);\n          forEach($rootElement, function(node, i) {\n            if (node == compileNode) {\n              $rootElement[i] = $compileNode[0];\n            }\n          });\n          afterTemplateChildLinkFn = compileNodes($compileNode[0].childNodes, childTranscludeFn);\n\n          while (linkQueue.length) {\n            var scope = linkQueue.shift(),\n                beforeTemplateLinkNode = linkQueue.shift(),\n                linkRootElement = linkQueue.shift(),\n                boundTranscludeFn = linkQueue.shift(),\n                linkNode = $compileNode[0];\n\n            if (scope.$$destroyed) continue;\n\n            if (beforeTemplateLinkNode !== beforeTemplateCompileNode) {\n              var oldClasses = beforeTemplateLinkNode.className;\n\n              if (!(previousCompileContext.hasElementTranscludeDirective &&\n                  origAsyncDirective.replace)) {\n                // it was cloned therefore we have to clone as well.\n                linkNode = jqLiteClone(compileNode);\n              }\n              replaceWith(linkRootElement, jqLite(beforeTemplateLinkNode), linkNode);\n\n              // Copy in CSS classes from original node\n              safeAddClass(jqLite(linkNode), oldClasses);\n            }\n            if (afterTemplateNodeLinkFn.transcludeOnThisElement) {\n              childBoundTranscludeFn = createBoundTranscludeFn(scope, afterTemplateNodeLinkFn.transclude, boundTranscludeFn);\n            } else {\n              childBoundTranscludeFn = boundTranscludeFn;\n            }\n            afterTemplateNodeLinkFn(afterTemplateChildLinkFn, scope, linkNode, $rootElement,\n              childBoundTranscludeFn);\n          }\n          linkQueue = null;\n        });\n\n      return function delayedNodeLinkFn(ignoreChildLinkFn, scope, node, rootElement, boundTranscludeFn) {\n        var childBoundTranscludeFn = boundTranscludeFn;\n        if (scope.$$destroyed) return;\n        if (linkQueue) {\n          linkQueue.push(scope,\n                         node,\n                         rootElement,\n                         childBoundTranscludeFn);\n        } else {\n          if (afterTemplateNodeLinkFn.transcludeOnThisElement) {\n            childBoundTranscludeFn = createBoundTranscludeFn(scope, afterTemplateNodeLinkFn.transclude, boundTranscludeFn);\n          }\n          afterTemplateNodeLinkFn(afterTemplateChildLinkFn, scope, node, rootElement, childBoundTranscludeFn);\n        }\n      };\n    }\n\n\n    /**\n     * Sorting function for bound directives.\n     */\n    function byPriority(a, b) {\n      var diff = b.priority - a.priority;\n      if (diff !== 0) return diff;\n      if (a.name !== b.name) return (a.name < b.name) ? -1 : 1;\n      return a.index - b.index;\n    }\n\n    function assertNoDuplicate(what, previousDirective, directive, element) {\n\n      function wrapModuleNameIfDefined(moduleName) {\n        return moduleName ?\n          (' (module: ' + moduleName + ')') :\n          '';\n      }\n\n      if (previousDirective) {\n        throw $compileMinErr('multidir', 'Multiple directives [{0}{1}, {2}{3}] asking for {4} on: {5}',\n            previousDirective.name, wrapModuleNameIfDefined(previousDirective.$$moduleName),\n            directive.name, wrapModuleNameIfDefined(directive.$$moduleName), what, startingTag(element));\n      }\n    }\n\n\n    function addTextInterpolateDirective(directives, text) {\n      var interpolateFn = $interpolate(text, true);\n      if (interpolateFn) {\n        directives.push({\n          priority: 0,\n          compile: function textInterpolateCompileFn(templateNode) {\n            var templateNodeParent = templateNode.parent(),\n                hasCompileParent = !!templateNodeParent.length;\n\n            // When transcluding a template that has bindings in the root\n            // we don't have a parent and thus need to add the class during linking fn.\n            if (hasCompileParent) compile.$$addBindingClass(templateNodeParent);\n\n            return function textInterpolateLinkFn(scope, node) {\n              var parent = node.parent();\n              if (!hasCompileParent) compile.$$addBindingClass(parent);\n              compile.$$addBindingInfo(parent, interpolateFn.expressions);\n              scope.$watch(interpolateFn, function interpolateFnWatchAction(value) {\n                node[0].nodeValue = value;\n              });\n            };\n          }\n        });\n      }\n    }\n\n\n    function wrapTemplate(type, template) {\n      type = lowercase(type || 'html');\n      switch (type) {\n      case 'svg':\n      case 'math':\n        var wrapper = window.document.createElement('div');\n        wrapper.innerHTML = '<' + type + '>' + template + '</' + type + '>';\n        return wrapper.childNodes[0].childNodes;\n      default:\n        return template;\n      }\n    }\n\n\n    function getTrustedContext(node, attrNormalizedName) {\n      if (attrNormalizedName == \"srcdoc\") {\n        return $sce.HTML;\n      }\n      var tag = nodeName_(node);\n      // maction[xlink:href] can source SVG.  It's not limited to <maction>.\n      if (attrNormalizedName == \"xlinkHref\" ||\n          (tag == \"form\" && attrNormalizedName == \"action\") ||\n          (tag != \"img\" && (attrNormalizedName == \"src\" ||\n                            attrNormalizedName == \"ngSrc\"))) {\n        return $sce.RESOURCE_URL;\n      }\n    }\n\n\n    function addAttrInterpolateDirective(node, directives, value, name, allOrNothing) {\n      var trustedContext = getTrustedContext(node, name);\n      allOrNothing = ALL_OR_NOTHING_ATTRS[name] || allOrNothing;\n\n      var interpolateFn = $interpolate(value, true, trustedContext, allOrNothing);\n\n      // no interpolation found -> ignore\n      if (!interpolateFn) return;\n\n\n      if (name === \"multiple\" && nodeName_(node) === \"select\") {\n        throw $compileMinErr(\"selmulti\",\n            \"Binding to the 'multiple' attribute is not supported. Element: {0}\",\n            startingTag(node));\n      }\n\n      directives.push({\n        priority: 100,\n        compile: function() {\n            return {\n              pre: function attrInterpolatePreLinkFn(scope, element, attr) {\n                var $$observers = (attr.$$observers || (attr.$$observers = createMap()));\n\n                if (EVENT_HANDLER_ATTR_REGEXP.test(name)) {\n                  throw $compileMinErr('nodomevents',\n                      \"Interpolations for HTML DOM event attributes are disallowed.  Please use the \" +\n                          \"ng- versions (such as ng-click instead of onclick) instead.\");\n                }\n\n                // If the attribute has changed since last $interpolate()ed\n                var newValue = attr[name];\n                if (newValue !== value) {\n                  // we need to interpolate again since the attribute value has been updated\n                  // (e.g. by another directive's compile function)\n                  // ensure unset/empty values make interpolateFn falsy\n                  interpolateFn = newValue && $interpolate(newValue, true, trustedContext, allOrNothing);\n                  value = newValue;\n                }\n\n                // if attribute was updated so that there is no interpolation going on we don't want to\n                // register any observers\n                if (!interpolateFn) return;\n\n                // initialize attr object so that it's ready in case we need the value for isolate\n                // scope initialization, otherwise the value would not be available from isolate\n                // directive's linking fn during linking phase\n                attr[name] = interpolateFn(scope);\n\n                ($$observers[name] || ($$observers[name] = [])).$$inter = true;\n                (attr.$$observers && attr.$$observers[name].$$scope || scope).\n                  $watch(interpolateFn, function interpolateFnWatchAction(newValue, oldValue) {\n                    //special case for class attribute addition + removal\n                    //so that class changes can tap into the animation\n                    //hooks provided by the $animate service. Be sure to\n                    //skip animations when the first digest occurs (when\n                    //both the new and the old values are the same) since\n                    //the CSS classes are the non-interpolated values\n                    if (name === 'class' && newValue != oldValue) {\n                      attr.$updateClass(newValue, oldValue);\n                    } else {\n                      attr.$set(name, newValue);\n                    }\n                  });\n              }\n            };\n          }\n      });\n    }\n\n\n    /**\n     * This is a special jqLite.replaceWith, which can replace items which\n     * have no parents, provided that the containing jqLite collection is provided.\n     *\n     * @param {JqLite=} $rootElement The root of the compile tree. Used so that we can replace nodes\n     *                               in the root of the tree.\n     * @param {JqLite} elementsToRemove The jqLite element which we are going to replace. We keep\n     *                                  the shell, but replace its DOM node reference.\n     * @param {Node} newNode The new DOM node.\n     */\n    function replaceWith($rootElement, elementsToRemove, newNode) {\n      var firstElementToRemove = elementsToRemove[0],\n          removeCount = elementsToRemove.length,\n          parent = firstElementToRemove.parentNode,\n          i, ii;\n\n      if ($rootElement) {\n        for (i = 0, ii = $rootElement.length; i < ii; i++) {\n          if ($rootElement[i] == firstElementToRemove) {\n            $rootElement[i++] = newNode;\n            for (var j = i, j2 = j + removeCount - 1,\n                     jj = $rootElement.length;\n                 j < jj; j++, j2++) {\n              if (j2 < jj) {\n                $rootElement[j] = $rootElement[j2];\n              } else {\n                delete $rootElement[j];\n              }\n            }\n            $rootElement.length -= removeCount - 1;\n\n            // If the replaced element is also the jQuery .context then replace it\n            // .context is a deprecated jQuery api, so we should set it only when jQuery set it\n            // http://api.jquery.com/context/\n            if ($rootElement.context === firstElementToRemove) {\n              $rootElement.context = newNode;\n            }\n            break;\n          }\n        }\n      }\n\n      if (parent) {\n        parent.replaceChild(newNode, firstElementToRemove);\n      }\n\n      // Append all the `elementsToRemove` to a fragment. This will...\n      // - remove them from the DOM\n      // - allow them to still be traversed with .nextSibling\n      // - allow a single fragment.qSA to fetch all elements being removed\n      var fragment = window.document.createDocumentFragment();\n      for (i = 0; i < removeCount; i++) {\n        fragment.appendChild(elementsToRemove[i]);\n      }\n\n      if (jqLite.hasData(firstElementToRemove)) {\n        // Copy over user data (that includes Angular's $scope etc.). Don't copy private\n        // data here because there's no public interface in jQuery to do that and copying over\n        // event listeners (which is the main use of private data) wouldn't work anyway.\n        jqLite.data(newNode, jqLite.data(firstElementToRemove));\n\n        // Remove $destroy event listeners from `firstElementToRemove`\n        jqLite(firstElementToRemove).off('$destroy');\n      }\n\n      // Cleanup any data/listeners on the elements and children.\n      // This includes invoking the $destroy event on any elements with listeners.\n      jqLite.cleanData(fragment.querySelectorAll('*'));\n\n      // Update the jqLite collection to only contain the `newNode`\n      for (i = 1; i < removeCount; i++) {\n        delete elementsToRemove[i];\n      }\n      elementsToRemove[0] = newNode;\n      elementsToRemove.length = 1;\n    }\n\n\n    function cloneAndAnnotateFn(fn, annotation) {\n      return extend(function() { return fn.apply(null, arguments); }, fn, annotation);\n    }\n\n\n    function invokeLinkFn(linkFn, scope, $element, attrs, controllers, transcludeFn) {\n      try {\n        linkFn(scope, $element, attrs, controllers, transcludeFn);\n      } catch (e) {\n        $exceptionHandler(e, startingTag($element));\n      }\n    }\n\n\n    // Set up $watches for isolate scope and controller bindings. This process\n    // only occurs for isolate scopes and new scopes with controllerAs.\n    function initializeDirectiveBindings(scope, attrs, destination, bindings, directive) {\n      var removeWatchCollection = [];\n      var initialChanges = {};\n      var changes;\n      forEach(bindings, function initializeBinding(definition, scopeName) {\n        var attrName = definition.attrName,\n        optional = definition.optional,\n        mode = definition.mode, // @, =, <, or &\n        lastValue,\n        parentGet, parentSet, compare, removeWatch;\n\n        switch (mode) {\n\n          case '@':\n            if (!optional && !hasOwnProperty.call(attrs, attrName)) {\n              destination[scopeName] = attrs[attrName] = void 0;\n            }\n            attrs.$observe(attrName, function(value) {\n              if (isString(value) || isBoolean(value)) {\n                var oldValue = destination[scopeName];\n                recordChanges(scopeName, value, oldValue);\n                destination[scopeName] = value;\n              }\n            });\n            attrs.$$observers[attrName].$$scope = scope;\n            lastValue = attrs[attrName];\n            if (isString(lastValue)) {\n              // If the attribute has been provided then we trigger an interpolation to ensure\n              // the value is there for use in the link fn\n              destination[scopeName] = $interpolate(lastValue)(scope);\n            } else if (isBoolean(lastValue)) {\n              // If the attributes is one of the BOOLEAN_ATTR then Angular will have converted\n              // the value to boolean rather than a string, so we special case this situation\n              destination[scopeName] = lastValue;\n            }\n            initialChanges[scopeName] = new SimpleChange(_UNINITIALIZED_VALUE, destination[scopeName]);\n            break;\n\n          case '=':\n            if (!hasOwnProperty.call(attrs, attrName)) {\n              if (optional) break;\n              attrs[attrName] = void 0;\n            }\n            if (optional && !attrs[attrName]) break;\n\n            parentGet = $parse(attrs[attrName]);\n            if (parentGet.literal) {\n              compare = equals;\n            } else {\n              compare = function simpleCompare(a, b) { return a === b || (a !== a && b !== b); };\n            }\n            parentSet = parentGet.assign || function() {\n              // reset the change, or we will throw this exception on every $digest\n              lastValue = destination[scopeName] = parentGet(scope);\n              throw $compileMinErr('nonassign',\n                  \"Expression '{0}' in attribute '{1}' used with directive '{2}' is non-assignable!\",\n                  attrs[attrName], attrName, directive.name);\n            };\n            lastValue = destination[scopeName] = parentGet(scope);\n            var parentValueWatch = function parentValueWatch(parentValue) {\n              if (!compare(parentValue, destination[scopeName])) {\n                // we are out of sync and need to copy\n                if (!compare(parentValue, lastValue)) {\n                  // parent changed and it has precedence\n                  destination[scopeName] = parentValue;\n                } else {\n                  // if the parent can be assigned then do so\n                  parentSet(scope, parentValue = destination[scopeName]);\n                }\n              }\n              return lastValue = parentValue;\n            };\n            parentValueWatch.$stateful = true;\n            if (definition.collection) {\n              removeWatch = scope.$watchCollection(attrs[attrName], parentValueWatch);\n            } else {\n              removeWatch = scope.$watch($parse(attrs[attrName], parentValueWatch), null, parentGet.literal);\n            }\n            removeWatchCollection.push(removeWatch);\n            break;\n\n          case '<':\n            if (!hasOwnProperty.call(attrs, attrName)) {\n              if (optional) break;\n              attrs[attrName] = void 0;\n            }\n            if (optional && !attrs[attrName]) break;\n\n            parentGet = $parse(attrs[attrName]);\n\n            var initialValue = destination[scopeName] = parentGet(scope);\n            initialChanges[scopeName] = new SimpleChange(_UNINITIALIZED_VALUE, destination[scopeName]);\n\n            removeWatch = scope.$watch(parentGet, function parentValueWatchAction(newValue, oldValue) {\n              if (oldValue === newValue) {\n                if (oldValue === initialValue) return;\n                oldValue = initialValue;\n              }\n              recordChanges(scopeName, newValue, oldValue);\n              destination[scopeName] = newValue;\n            }, parentGet.literal);\n\n            removeWatchCollection.push(removeWatch);\n            break;\n\n          case '&':\n            // Don't assign Object.prototype method to scope\n            parentGet = attrs.hasOwnProperty(attrName) ? $parse(attrs[attrName]) : noop;\n\n            // Don't assign noop to destination if expression is not valid\n            if (parentGet === noop && optional) break;\n\n            destination[scopeName] = function(locals) {\n              return parentGet(scope, locals);\n            };\n            break;\n        }\n      });\n\n      function recordChanges(key, currentValue, previousValue) {\n        if (isFunction(destination.$onChanges) && currentValue !== previousValue) {\n          // If we have not already scheduled the top level onChangesQueue handler then do so now\n          if (!onChangesQueue) {\n            scope.$$postDigest(flushOnChangesQueue);\n            onChangesQueue = [];\n          }\n          // If we have not already queued a trigger of onChanges for this controller then do so now\n          if (!changes) {\n            changes = {};\n            onChangesQueue.push(triggerOnChangesHook);\n          }\n          // If the has been a change on this property already then we need to reuse the previous value\n          if (changes[key]) {\n            previousValue = changes[key].previousValue;\n          }\n          // Store this change\n          changes[key] = new SimpleChange(previousValue, currentValue);\n        }\n      }\n\n      function triggerOnChangesHook() {\n        destination.$onChanges(changes);\n        // Now clear the changes so that we schedule onChanges when more changes arrive\n        changes = undefined;\n      }\n\n      return {\n        initialChanges: initialChanges,\n        removeWatches: removeWatchCollection.length && function removeWatches() {\n          for (var i = 0, ii = removeWatchCollection.length; i < ii; ++i) {\n            removeWatchCollection[i]();\n          }\n        }\n      };\n    }\n  }];\n}\n\nfunction SimpleChange(previous, current) {\n  this.previousValue = previous;\n  this.currentValue = current;\n}\nSimpleChange.prototype.isFirstChange = function() { return this.previousValue === _UNINITIALIZED_VALUE; };\n\n\nvar PREFIX_REGEXP = /^((?:x|data)[\\:\\-_])/i;\n/**\n * Converts all accepted directives format into proper directive name.\n * @param name Name to normalize\n */\nfunction directiveNormalize(name) {\n  return camelCase(name.replace(PREFIX_REGEXP, ''));\n}\n\n/**\n * @ngdoc type\n * @name $compile.directive.Attributes\n *\n * @description\n * A shared object between directive compile / linking functions which contains normalized DOM\n * element attributes. The values reflect current binding state `{{ }}`. The normalization is\n * needed since all of these are treated as equivalent in Angular:\n *\n * ```\n *    <span ng:bind=\"a\" ng-bind=\"a\" data-ng-bind=\"a\" x-ng-bind=\"a\">\n * ```\n */\n\n/**\n * @ngdoc property\n * @name $compile.directive.Attributes#$attr\n *\n * @description\n * A map of DOM element attribute names to the normalized name. This is\n * needed to do reverse lookup from normalized name back to actual name.\n */\n\n\n/**\n * @ngdoc method\n * @name $compile.directive.Attributes#$set\n * @kind function\n *\n * @description\n * Set DOM element attribute value.\n *\n *\n * @param {string} name Normalized element attribute name of the property to modify. The name is\n *          reverse-translated using the {@link ng.$compile.directive.Attributes#$attr $attr}\n *          property to the original name.\n * @param {string} value Value to set the attribute to. The value can be an interpolated string.\n */\n\n\n\n/**\n * Closure compiler type information\n */\n\nfunction nodesetLinkingFn(\n  /* angular.Scope */ scope,\n  /* NodeList */ nodeList,\n  /* Element */ rootElement,\n  /* function(Function) */ boundTranscludeFn\n) {}\n\nfunction directiveLinkingFn(\n  /* nodesetLinkingFn */ nodesetLinkingFn,\n  /* angular.Scope */ scope,\n  /* Node */ node,\n  /* Element */ rootElement,\n  /* function(Function) */ boundTranscludeFn\n) {}\n\nfunction tokenDifference(str1, str2) {\n  var values = '',\n      tokens1 = str1.split(/\\s+/),\n      tokens2 = str2.split(/\\s+/);\n\n  outer:\n  for (var i = 0; i < tokens1.length; i++) {\n    var token = tokens1[i];\n    for (var j = 0; j < tokens2.length; j++) {\n      if (token == tokens2[j]) continue outer;\n    }\n    values += (values.length > 0 ? ' ' : '') + token;\n  }\n  return values;\n}\n\nfunction removeComments(jqNodes) {\n  jqNodes = jqLite(jqNodes);\n  var i = jqNodes.length;\n\n  if (i <= 1) {\n    return jqNodes;\n  }\n\n  while (i--) {\n    var node = jqNodes[i];\n    if (node.nodeType === NODE_TYPE_COMMENT) {\n      splice.call(jqNodes, i, 1);\n    }\n  }\n  return jqNodes;\n}\n\nvar $controllerMinErr = minErr('$controller');\n\n\nvar CNTRL_REG = /^(\\S+)(\\s+as\\s+([\\w$]+))?$/;\nfunction identifierForController(controller, ident) {\n  if (ident && isString(ident)) return ident;\n  if (isString(controller)) {\n    var match = CNTRL_REG.exec(controller);\n    if (match) return match[3];\n  }\n}\n\n\n/**\n * @ngdoc provider\n * @name $controllerProvider\n * @description\n * The {@link ng.$controller $controller service} is used by Angular to create new\n * controllers.\n *\n * This provider allows controller registration via the\n * {@link ng.$controllerProvider#register register} method.\n */\nfunction $ControllerProvider() {\n  var controllers = {},\n      globals = false;\n\n  /**\n   * @ngdoc method\n   * @name $controllerProvider#has\n   * @param {string} name Controller name to check.\n   */\n  this.has = function(name) {\n    return controllers.hasOwnProperty(name);\n  };\n\n  /**\n   * @ngdoc method\n   * @name $controllerProvider#register\n   * @param {string|Object} name Controller name, or an object map of controllers where the keys are\n   *    the names and the values are the constructors.\n   * @param {Function|Array} constructor Controller constructor fn (optionally decorated with DI\n   *    annotations in the array notation).\n   */\n  this.register = function(name, constructor) {\n    assertNotHasOwnProperty(name, 'controller');\n    if (isObject(name)) {\n      extend(controllers, name);\n    } else {\n      controllers[name] = constructor;\n    }\n  };\n\n  /**\n   * @ngdoc method\n   * @name $controllerProvider#allowGlobals\n   * @description If called, allows `$controller` to find controller constructors on `window`\n   */\n  this.allowGlobals = function() {\n    globals = true;\n  };\n\n\n  this.$get = ['$injector', '$window', function($injector, $window) {\n\n    /**\n     * @ngdoc service\n     * @name $controller\n     * @requires $injector\n     *\n     * @param {Function|string} constructor If called with a function then it's considered to be the\n     *    controller constructor function. Otherwise it's considered to be a string which is used\n     *    to retrieve the controller constructor using the following steps:\n     *\n     *    * check if a controller with given name is registered via `$controllerProvider`\n     *    * check if evaluating the string on the current scope returns a constructor\n     *    * if $controllerProvider#allowGlobals, check `window[constructor]` on the global\n     *      `window` object (not recommended)\n     *\n     *    The string can use the `controller as property` syntax, where the controller instance is published\n     *    as the specified property on the `scope`; the `scope` must be injected into `locals` param for this\n     *    to work correctly.\n     *\n     * @param {Object} locals Injection locals for Controller.\n     * @return {Object} Instance of given controller.\n     *\n     * @description\n     * `$controller` service is responsible for instantiating controllers.\n     *\n     * It's just a simple call to {@link auto.$injector $injector}, but extracted into\n     * a service, so that one can override this service with [BC version](https://gist.github.com/1649788).\n     */\n    return function $controller(expression, locals, later, ident) {\n      // PRIVATE API:\n      //   param `later` --- indicates that the controller's constructor is invoked at a later time.\n      //                     If true, $controller will allocate the object with the correct\n      //                     prototype chain, but will not invoke the controller until a returned\n      //                     callback is invoked.\n      //   param `ident` --- An optional label which overrides the label parsed from the controller\n      //                     expression, if any.\n      var instance, match, constructor, identifier;\n      later = later === true;\n      if (ident && isString(ident)) {\n        identifier = ident;\n      }\n\n      if (isString(expression)) {\n        match = expression.match(CNTRL_REG);\n        if (!match) {\n          throw $controllerMinErr('ctrlfmt',\n            \"Badly formed controller string '{0}'. \" +\n            \"Must match `__name__ as __id__` or `__name__`.\", expression);\n        }\n        constructor = match[1],\n        identifier = identifier || match[3];\n        expression = controllers.hasOwnProperty(constructor)\n            ? controllers[constructor]\n            : getter(locals.$scope, constructor, true) ||\n                (globals ? getter($window, constructor, true) : undefined);\n\n        assertArgFn(expression, constructor, true);\n      }\n\n      if (later) {\n        // Instantiate controller later:\n        // This machinery is used to create an instance of the object before calling the\n        // controller's constructor itself.\n        //\n        // This allows properties to be added to the controller before the constructor is\n        // invoked. Primarily, this is used for isolate scope bindings in $compile.\n        //\n        // This feature is not intended for use by applications, and is thus not documented\n        // publicly.\n        // Object creation: http://jsperf.com/create-constructor/2\n        var controllerPrototype = (isArray(expression) ?\n          expression[expression.length - 1] : expression).prototype;\n        instance = Object.create(controllerPrototype || null);\n\n        if (identifier) {\n          addIdentifier(locals, identifier, instance, constructor || expression.name);\n        }\n\n        var instantiate;\n        return instantiate = extend(function $controllerInit() {\n          var result = $injector.invoke(expression, instance, locals, constructor);\n          if (result !== instance && (isObject(result) || isFunction(result))) {\n            instance = result;\n            if (identifier) {\n              // If result changed, re-assign controllerAs value to scope.\n              addIdentifier(locals, identifier, instance, constructor || expression.name);\n            }\n          }\n          return instance;\n        }, {\n          instance: instance,\n          identifier: identifier\n        });\n      }\n\n      instance = $injector.instantiate(expression, locals, constructor);\n\n      if (identifier) {\n        addIdentifier(locals, identifier, instance, constructor || expression.name);\n      }\n\n      return instance;\n    };\n\n    function addIdentifier(locals, identifier, instance, name) {\n      if (!(locals && isObject(locals.$scope))) {\n        throw minErr('$controller')('noscp',\n          \"Cannot export controller '{0}' as '{1}'! No $scope object provided via `locals`.\",\n          name, identifier);\n      }\n\n      locals.$scope[identifier] = instance;\n    }\n  }];\n}\n\n/**\n * @ngdoc service\n * @name $document\n * @requires $window\n *\n * @description\n * A {@link angular.element jQuery or jqLite} wrapper for the browser's `window.document` object.\n *\n * @example\n   <example module=\"documentExample\">\n     <file name=\"index.html\">\n       <div ng-controller=\"ExampleController\">\n         <p>$document title: <b ng-bind=\"title\"></b></p>\n         <p>window.document title: <b ng-bind=\"windowTitle\"></b></p>\n       </div>\n     </file>\n     <file name=\"script.js\">\n       angular.module('documentExample', [])\n         .controller('ExampleController', ['$scope', '$document', function($scope, $document) {\n           $scope.title = $document[0].title;\n           $scope.windowTitle = angular.element(window.document)[0].title;\n         }]);\n     </file>\n   </example>\n */\nfunction $DocumentProvider() {\n  this.$get = ['$window', function(window) {\n    return jqLite(window.document);\n  }];\n}\n\n/**\n * @ngdoc service\n * @name $exceptionHandler\n * @requires ng.$log\n *\n * @description\n * Any uncaught exception in angular expressions is delegated to this service.\n * The default implementation simply delegates to `$log.error` which logs it into\n * the browser console.\n *\n * In unit tests, if `angular-mocks.js` is loaded, this service is overridden by\n * {@link ngMock.$exceptionHandler mock $exceptionHandler} which aids in testing.\n *\n * ## Example:\n *\n * The example below will overwrite the default `$exceptionHandler` in order to (a) log uncaught\n * errors to the backend for later inspection by the developers and (b) to use `$log.warn()` instead\n * of `$log.error()`.\n *\n * ```js\n *   angular.\n *     module('exceptionOverwrite', []).\n *     factory('$exceptionHandler', ['$log', 'logErrorsToBackend', function($log, logErrorsToBackend) {\n *       return function myExceptionHandler(exception, cause) {\n *         logErrorsToBackend(exception, cause);\n *         $log.warn(exception, cause);\n *       };\n *     }]);\n * ```\n *\n * <hr />\n * Note, that code executed in event-listeners (even those registered using jqLite's `on`/`bind`\n * methods) does not delegate exceptions to the {@link ng.$exceptionHandler $exceptionHandler}\n * (unless executed during a digest).\n *\n * If you wish, you can manually delegate exceptions, e.g.\n * `try { ... } catch(e) { $exceptionHandler(e); }`\n *\n * @param {Error} exception Exception associated with the error.\n * @param {string=} cause Optional information about the context in which\n *       the error was thrown.\n *\n */\nfunction $ExceptionHandlerProvider() {\n  this.$get = ['$log', function($log) {\n    return function(exception, cause) {\n      $log.error.apply($log, arguments);\n    };\n  }];\n}\n\nvar $$ForceReflowProvider = function() {\n  this.$get = ['$document', function($document) {\n    return function(domNode) {\n      //the line below will force the browser to perform a repaint so\n      //that all the animated elements within the animation frame will\n      //be properly updated and drawn on screen. This is required to\n      //ensure that the preparation animation is properly flushed so that\n      //the active state picks up from there. DO NOT REMOVE THIS LINE.\n      //DO NOT OPTIMIZE THIS LINE. THE MINIFIER WILL REMOVE IT OTHERWISE WHICH\n      //WILL RESULT IN AN UNPREDICTABLE BUG THAT IS VERY HARD TO TRACK DOWN AND\n      //WILL TAKE YEARS AWAY FROM YOUR LIFE.\n      if (domNode) {\n        if (!domNode.nodeType && domNode instanceof jqLite) {\n          domNode = domNode[0];\n        }\n      } else {\n        domNode = $document[0].body;\n      }\n      return domNode.offsetWidth + 1;\n    };\n  }];\n};\n\nvar APPLICATION_JSON = 'application/json';\nvar CONTENT_TYPE_APPLICATION_JSON = {'Content-Type': APPLICATION_JSON + ';charset=utf-8'};\nvar JSON_START = /^\\[|^\\{(?!\\{)/;\nvar JSON_ENDS = {\n  '[': /]$/,\n  '{': /}$/\n};\nvar JSON_PROTECTION_PREFIX = /^\\)\\]\\}',?\\n/;\nvar $httpMinErr = minErr('$http');\nvar $httpMinErrLegacyFn = function(method) {\n  return function() {\n    throw $httpMinErr('legacy', 'The method `{0}` on the promise returned from `$http` has been disabled.', method);\n  };\n};\n\nfunction serializeValue(v) {\n  if (isObject(v)) {\n    return isDate(v) ? v.toISOString() : toJson(v);\n  }\n  return v;\n}\n\n\nfunction $HttpParamSerializerProvider() {\n  /**\n   * @ngdoc service\n   * @name $httpParamSerializer\n   * @description\n   *\n   * Default {@link $http `$http`} params serializer that converts objects to strings\n   * according to the following rules:\n   *\n   * * `{'foo': 'bar'}` results in `foo=bar`\n   * * `{'foo': Date.now()}` results in `foo=2015-04-01T09%3A50%3A49.262Z` (`toISOString()` and encoded representation of a Date object)\n   * * `{'foo': ['bar', 'baz']}` results in `foo=bar&foo=baz` (repeated key for each array element)\n   * * `{'foo': {'bar':'baz'}}` results in `foo=%7B%22bar%22%3A%22baz%22%7D` (stringified and encoded representation of an object)\n   *\n   * Note that serializer will sort the request parameters alphabetically.\n   * */\n\n  this.$get = function() {\n    return function ngParamSerializer(params) {\n      if (!params) return '';\n      var parts = [];\n      forEachSorted(params, function(value, key) {\n        if (value === null || isUndefined(value)) return;\n        if (isArray(value)) {\n          forEach(value, function(v) {\n            parts.push(encodeUriQuery(key)  + '=' + encodeUriQuery(serializeValue(v)));\n          });\n        } else {\n          parts.push(encodeUriQuery(key) + '=' + encodeUriQuery(serializeValue(value)));\n        }\n      });\n\n      return parts.join('&');\n    };\n  };\n}\n\nfunction $HttpParamSerializerJQLikeProvider() {\n  /**\n   * @ngdoc service\n   * @name $httpParamSerializerJQLike\n   * @description\n   *\n   * Alternative {@link $http `$http`} params serializer that follows\n   * jQuery's [`param()`](http://api.jquery.com/jquery.param/) method logic.\n   * The serializer will also sort the params alphabetically.\n   *\n   * To use it for serializing `$http` request parameters, set it as the `paramSerializer` property:\n   *\n   * ```js\n   * $http({\n   *   url: myUrl,\n   *   method: 'GET',\n   *   params: myParams,\n   *   paramSerializer: '$httpParamSerializerJQLike'\n   * });\n   * ```\n   *\n   * It is also possible to set it as the default `paramSerializer` in the\n   * {@link $httpProvider#defaults `$httpProvider`}.\n   *\n   * Additionally, you can inject the serializer and use it explicitly, for example to serialize\n   * form data for submission:\n   *\n   * ```js\n   * .controller(function($http, $httpParamSerializerJQLike) {\n   *   //...\n   *\n   *   $http({\n   *     url: myUrl,\n   *     method: 'POST',\n   *     data: $httpParamSerializerJQLike(myData),\n   *     headers: {\n   *       'Content-Type': 'application/x-www-form-urlencoded'\n   *     }\n   *   });\n   *\n   * });\n   * ```\n   *\n   * */\n  this.$get = function() {\n    return function jQueryLikeParamSerializer(params) {\n      if (!params) return '';\n      var parts = [];\n      serialize(params, '', true);\n      return parts.join('&');\n\n      function serialize(toSerialize, prefix, topLevel) {\n        if (toSerialize === null || isUndefined(toSerialize)) return;\n        if (isArray(toSerialize)) {\n          forEach(toSerialize, function(value, index) {\n            serialize(value, prefix + '[' + (isObject(value) ? index : '') + ']');\n          });\n        } else if (isObject(toSerialize) && !isDate(toSerialize)) {\n          forEachSorted(toSerialize, function(value, key) {\n            serialize(value, prefix +\n                (topLevel ? '' : '[') +\n                key +\n                (topLevel ? '' : ']'));\n          });\n        } else {\n          parts.push(encodeUriQuery(prefix) + '=' + encodeUriQuery(serializeValue(toSerialize)));\n        }\n      }\n    };\n  };\n}\n\nfunction defaultHttpResponseTransform(data, headers) {\n  if (isString(data)) {\n    // Strip json vulnerability protection prefix and trim whitespace\n    var tempData = data.replace(JSON_PROTECTION_PREFIX, '').trim();\n\n    if (tempData) {\n      var contentType = headers('Content-Type');\n      if ((contentType && (contentType.indexOf(APPLICATION_JSON) === 0)) || isJsonLike(tempData)) {\n        data = fromJson(tempData);\n      }\n    }\n  }\n\n  return data;\n}\n\nfunction isJsonLike(str) {\n    var jsonStart = str.match(JSON_START);\n    return jsonStart && JSON_ENDS[jsonStart[0]].test(str);\n}\n\n/**\n * Parse headers into key value object\n *\n * @param {string} headers Raw headers as a string\n * @returns {Object} Parsed headers as key value object\n */\nfunction parseHeaders(headers) {\n  var parsed = createMap(), i;\n\n  function fillInParsed(key, val) {\n    if (key) {\n      parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n    }\n  }\n\n  if (isString(headers)) {\n    forEach(headers.split('\\n'), function(line) {\n      i = line.indexOf(':');\n      fillInParsed(lowercase(trim(line.substr(0, i))), trim(line.substr(i + 1)));\n    });\n  } else if (isObject(headers)) {\n    forEach(headers, function(headerVal, headerKey) {\n      fillInParsed(lowercase(headerKey), trim(headerVal));\n    });\n  }\n\n  return parsed;\n}\n\n\n/**\n * Returns a function that provides access to parsed headers.\n *\n * Headers are lazy parsed when first requested.\n * @see parseHeaders\n *\n * @param {(string|Object)} headers Headers to provide access to.\n * @returns {function(string=)} Returns a getter function which if called with:\n *\n *   - if called with single an argument returns a single header value or null\n *   - if called with no arguments returns an object containing all headers.\n */\nfunction headersGetter(headers) {\n  var headersObj;\n\n  return function(name) {\n    if (!headersObj) headersObj =  parseHeaders(headers);\n\n    if (name) {\n      var value = headersObj[lowercase(name)];\n      if (value === void 0) {\n        value = null;\n      }\n      return value;\n    }\n\n    return headersObj;\n  };\n}\n\n\n/**\n * Chain all given functions\n *\n * This function is used for both request and response transforming\n *\n * @param {*} data Data to transform.\n * @param {function(string=)} headers HTTP headers getter fn.\n * @param {number} status HTTP status code of the response.\n * @param {(Function|Array.<Function>)} fns Function or an array of functions.\n * @returns {*} Transformed data.\n */\nfunction transformData(data, headers, status, fns) {\n  if (isFunction(fns)) {\n    return fns(data, headers, status);\n  }\n\n  forEach(fns, function(fn) {\n    data = fn(data, headers, status);\n  });\n\n  return data;\n}\n\n\nfunction isSuccess(status) {\n  return 200 <= status && status < 300;\n}\n\n\n/**\n * @ngdoc provider\n * @name $httpProvider\n * @description\n * Use `$httpProvider` to change the default behavior of the {@link ng.$http $http} service.\n * */\nfunction $HttpProvider() {\n  /**\n   * @ngdoc property\n   * @name $httpProvider#defaults\n   * @description\n   *\n   * Object containing default values for all {@link ng.$http $http} requests.\n   *\n   * - **`defaults.cache`** - {boolean|Object} - A boolean value or object created with\n   * {@link ng.$cacheFactory `$cacheFactory`} to enable or disable caching of HTTP responses\n   * by default. See {@link $http#caching $http Caching} for more information.\n   *\n   * - **`defaults.xsrfCookieName`** - {string} - Name of cookie containing the XSRF token.\n   * Defaults value is `'XSRF-TOKEN'`.\n   *\n   * - **`defaults.xsrfHeaderName`** - {string} - Name of HTTP header to populate with the\n   * XSRF token. Defaults value is `'X-XSRF-TOKEN'`.\n   *\n   * - **`defaults.headers`** - {Object} - Default headers for all $http requests.\n   * Refer to {@link ng.$http#setting-http-headers $http} for documentation on\n   * setting default headers.\n   *     - **`defaults.headers.common`**\n   *     - **`defaults.headers.post`**\n   *     - **`defaults.headers.put`**\n   *     - **`defaults.headers.patch`**\n   *\n   *\n   * - **`defaults.paramSerializer`** - `{string|function(Object<string,string>):string}` - A function\n   *  used to the prepare string representation of request parameters (specified as an object).\n   *  If specified as string, it is interpreted as a function registered with the {@link auto.$injector $injector}.\n   *  Defaults to {@link ng.$httpParamSerializer $httpParamSerializer}.\n   *\n   **/\n  var defaults = this.defaults = {\n    // transform incoming response data\n    transformResponse: [defaultHttpResponseTransform],\n\n    // transform outgoing request data\n    transformRequest: [function(d) {\n      return isObject(d) && !isFile(d) && !isBlob(d) && !isFormData(d) ? toJson(d) : d;\n    }],\n\n    // default headers\n    headers: {\n      common: {\n        'Accept': 'application/json, text/plain, */*'\n      },\n      post:   shallowCopy(CONTENT_TYPE_APPLICATION_JSON),\n      put:    shallowCopy(CONTENT_TYPE_APPLICATION_JSON),\n      patch:  shallowCopy(CONTENT_TYPE_APPLICATION_JSON)\n    },\n\n    xsrfCookieName: 'XSRF-TOKEN',\n    xsrfHeaderName: 'X-XSRF-TOKEN',\n\n    paramSerializer: '$httpParamSerializer'\n  };\n\n  var useApplyAsync = false;\n  /**\n   * @ngdoc method\n   * @name $httpProvider#useApplyAsync\n   * @description\n   *\n   * Configure $http service to combine processing of multiple http responses received at around\n   * the same time via {@link ng.$rootScope.Scope#$applyAsync $rootScope.$applyAsync}. This can result in\n   * significant performance improvement for bigger applications that make many HTTP requests\n   * concurrently (common during application bootstrap).\n   *\n   * Defaults to false. If no value is specified, returns the current configured value.\n   *\n   * @param {boolean=} value If true, when requests are loaded, they will schedule a deferred\n   *    \"apply\" on the next tick, giving time for subsequent requests in a roughly ~10ms window\n   *    to load and share the same digest cycle.\n   *\n   * @returns {boolean|Object} If a value is specified, returns the $httpProvider for chaining.\n   *    otherwise, returns the current configured value.\n   **/\n  this.useApplyAsync = function(value) {\n    if (isDefined(value)) {\n      useApplyAsync = !!value;\n      return this;\n    }\n    return useApplyAsync;\n  };\n\n  var useLegacyPromise = true;\n  /**\n   * @ngdoc method\n   * @name $httpProvider#useLegacyPromiseExtensions\n   * @description\n   *\n   * Configure `$http` service to return promises without the shorthand methods `success` and `error`.\n   * This should be used to make sure that applications work without these methods.\n   *\n   * Defaults to true. If no value is specified, returns the current configured value.\n   *\n   * @param {boolean=} value If true, `$http` will return a promise with the deprecated legacy `success` and `error` methods.\n   *\n   * @returns {boolean|Object} If a value is specified, returns the $httpProvider for chaining.\n   *    otherwise, returns the current configured value.\n   **/\n  this.useLegacyPromiseExtensions = function(value) {\n    if (isDefined(value)) {\n      useLegacyPromise = !!value;\n      return this;\n    }\n    return useLegacyPromise;\n  };\n\n  /**\n   * @ngdoc property\n   * @name $httpProvider#interceptors\n   * @description\n   *\n   * Array containing service factories for all synchronous or asynchronous {@link ng.$http $http}\n   * pre-processing of request or postprocessing of responses.\n   *\n   * These service factories are ordered by request, i.e. they are applied in the same order as the\n   * array, on request, but reverse order, on response.\n   *\n   * {@link ng.$http#interceptors Interceptors detailed info}\n   **/\n  var interceptorFactories = this.interceptors = [];\n\n  this.$get = ['$httpBackend', '$$cookieReader', '$cacheFactory', '$rootScope', '$q', '$injector',\n      function($httpBackend, $$cookieReader, $cacheFactory, $rootScope, $q, $injector) {\n\n    var defaultCache = $cacheFactory('$http');\n\n    /**\n     * Make sure that default param serializer is exposed as a function\n     */\n    defaults.paramSerializer = isString(defaults.paramSerializer) ?\n      $injector.get(defaults.paramSerializer) : defaults.paramSerializer;\n\n    /**\n     * Interceptors stored in reverse order. Inner interceptors before outer interceptors.\n     * The reversal is needed so that we can build up the interception chain around the\n     * server request.\n     */\n    var reversedInterceptors = [];\n\n    forEach(interceptorFactories, function(interceptorFactory) {\n      reversedInterceptors.unshift(isString(interceptorFactory)\n          ? $injector.get(interceptorFactory) : $injector.invoke(interceptorFactory));\n    });\n\n    /**\n     * @ngdoc service\n     * @kind function\n     * @name $http\n     * @requires ng.$httpBackend\n     * @requires $cacheFactory\n     * @requires $rootScope\n     * @requires $q\n     * @requires $injector\n     *\n     * @description\n     * The `$http` service is a core Angular service that facilitates communication with the remote\n     * HTTP servers via the browser's [XMLHttpRequest](https://developer.mozilla.org/en/xmlhttprequest)\n     * object or via [JSONP](http://en.wikipedia.org/wiki/JSONP).\n     *\n     * For unit testing applications that use `$http` service, see\n     * {@link ngMock.$httpBackend $httpBackend mock}.\n     *\n     * For a higher level of abstraction, please check out the {@link ngResource.$resource\n     * $resource} service.\n     *\n     * The $http API is based on the {@link ng.$q deferred/promise APIs} exposed by\n     * the $q service. While for simple usage patterns this doesn't matter much, for advanced usage\n     * it is important to familiarize yourself with these APIs and the guarantees they provide.\n     *\n     *\n     * ## General usage\n     * The `$http` service is a function which takes a single argument — a {@link $http#usage configuration object} —\n     * that is used to generate an HTTP request and returns  a {@link ng.$q promise}.\n     *\n     * ```js\n     *   // Simple GET request example:\n     *   $http({\n     *     method: 'GET',\n     *     url: '/someUrl'\n     *   }).then(function successCallback(response) {\n     *       // this callback will be called asynchronously\n     *       // when the response is available\n     *     }, function errorCallback(response) {\n     *       // called asynchronously if an error occurs\n     *       // or server returns response with an error status.\n     *     });\n     * ```\n     *\n     * The response object has these properties:\n     *\n     *   - **data** – `{string|Object}` – The response body transformed with the transform\n     *     functions.\n     *   - **status** – `{number}` – HTTP status code of the response.\n     *   - **headers** – `{function([headerName])}` – Header getter function.\n     *   - **config** – `{Object}` – The configuration object that was used to generate the request.\n     *   - **statusText** – `{string}` – HTTP status text of the response.\n     *\n     * A response status code between 200 and 299 is considered a success status and will result in\n     * the success callback being called. Any response status code outside of that range is\n     * considered an error status and will result in the error callback being called.\n     * Also, status codes less than -1 are normalized to zero. -1 usually means the request was\n     * aborted, e.g. using a `config.timeout`.\n     * Note that if the response is a redirect, XMLHttpRequest will transparently follow it, meaning\n     * that the outcome (success or error) will be determined by the final response status code.\n     *\n     *\n     * ## Shortcut methods\n     *\n     * Shortcut methods are also available. All shortcut methods require passing in the URL, and\n     * request data must be passed in for POST/PUT requests. An optional config can be passed as the\n     * last argument.\n     *\n     * ```js\n     *   $http.get('/someUrl', config).then(successCallback, errorCallback);\n     *   $http.post('/someUrl', data, config).then(successCallback, errorCallback);\n     * ```\n     *\n     * Complete list of shortcut methods:\n     *\n     * - {@link ng.$http#get $http.get}\n     * - {@link ng.$http#head $http.head}\n     * - {@link ng.$http#post $http.post}\n     * - {@link ng.$http#put $http.put}\n     * - {@link ng.$http#delete $http.delete}\n     * - {@link ng.$http#jsonp $http.jsonp}\n     * - {@link ng.$http#patch $http.patch}\n     *\n     *\n     * ## Writing Unit Tests that use $http\n     * When unit testing (using {@link ngMock ngMock}), it is necessary to call\n     * {@link ngMock.$httpBackend#flush $httpBackend.flush()} to flush each pending\n     * request using trained responses.\n     *\n     * ```\n     * $httpBackend.expectGET(...);\n     * $http.get(...);\n     * $httpBackend.flush();\n     * ```\n     *\n     * ## Deprecation Notice\n     * <div class=\"alert alert-danger\">\n     *   The `$http` legacy promise methods `success` and `error` have been deprecated.\n     *   Use the standard `then` method instead.\n     *   If {@link $httpProvider#useLegacyPromiseExtensions `$httpProvider.useLegacyPromiseExtensions`} is set to\n     *   `false` then these methods will throw {@link $http:legacy `$http/legacy`} error.\n     * </div>\n     *\n     * ## Setting HTTP Headers\n     *\n     * The $http service will automatically add certain HTTP headers to all requests. These defaults\n     * can be fully configured by accessing the `$httpProvider.defaults.headers` configuration\n     * object, which currently contains this default configuration:\n     *\n     * - `$httpProvider.defaults.headers.common` (headers that are common for all requests):\n     *   - `Accept: application/json, text/plain, * / *`\n     * - `$httpProvider.defaults.headers.post`: (header defaults for POST requests)\n     *   - `Content-Type: application/json`\n     * - `$httpProvider.defaults.headers.put` (header defaults for PUT requests)\n     *   - `Content-Type: application/json`\n     *\n     * To add or overwrite these defaults, simply add or remove a property from these configuration\n     * objects. To add headers for an HTTP method other than POST or PUT, simply add a new object\n     * with the lowercased HTTP method name as the key, e.g.\n     * `$httpProvider.defaults.headers.get = { 'My-Header' : 'value' }`.\n     *\n     * The defaults can also be set at runtime via the `$http.defaults` object in the same\n     * fashion. For example:\n     *\n     * ```\n     * module.run(function($http) {\n     *   $http.defaults.headers.common.Authorization = 'Basic YmVlcDpib29w';\n     * });\n     * ```\n     *\n     * In addition, you can supply a `headers` property in the config object passed when\n     * calling `$http(config)`, which overrides the defaults without changing them globally.\n     *\n     * To explicitly remove a header automatically added via $httpProvider.defaults.headers on a per request basis,\n     * Use the `headers` property, setting the desired header to `undefined`. For example:\n     *\n     * ```js\n     * var req = {\n     *  method: 'POST',\n     *  url: 'http://example.com',\n     *  headers: {\n     *    'Content-Type': undefined\n     *  },\n     *  data: { test: 'test' }\n     * }\n     *\n     * $http(req).then(function(){...}, function(){...});\n     * ```\n     *\n     * ## Transforming Requests and Responses\n     *\n     * Both requests and responses can be transformed using transformation functions: `transformRequest`\n     * and `transformResponse`. These properties can be a single function that returns\n     * the transformed value (`function(data, headersGetter, status)`) or an array of such transformation functions,\n     * which allows you to `push` or `unshift` a new transformation function into the transformation chain.\n     *\n     * <div class=\"alert alert-warning\">\n     * **Note:** Angular does not make a copy of the `data` parameter before it is passed into the `transformRequest` pipeline.\n     * That means changes to the properties of `data` are not local to the transform function (since Javascript passes objects by reference).\n     * For example, when calling `$http.get(url, $scope.myObject)`, modifications to the object's properties in a transformRequest\n     * function will be reflected on the scope and in any templates where the object is data-bound.\n     * To prevent this, transform functions should have no side-effects.\n     * If you need to modify properties, it is recommended to make a copy of the data, or create new object to return.\n     * </div>\n     *\n     * ### Default Transformations\n     *\n     * The `$httpProvider` provider and `$http` service expose `defaults.transformRequest` and\n     * `defaults.transformResponse` properties. If a request does not provide its own transformations\n     * then these will be applied.\n     *\n     * You can augment or replace the default transformations by modifying these properties by adding to or\n     * replacing the array.\n     *\n     * Angular provides the following default transformations:\n     *\n     * Request transformations (`$httpProvider.defaults.transformRequest` and `$http.defaults.transformRequest`):\n     *\n     * - If the `data` property of the request configuration object contains an object, serialize it\n     *   into JSON format.\n     *\n     * Response transformations (`$httpProvider.defaults.transformResponse` and `$http.defaults.transformResponse`):\n     *\n     *  - If XSRF prefix is detected, strip it (see Security Considerations section below).\n     *  - If JSON response is detected, deserialize it using a JSON parser.\n     *\n     *\n     * ### Overriding the Default Transformations Per Request\n     *\n     * If you wish to override the request/response transformations only for a single request then provide\n     * `transformRequest` and/or `transformResponse` properties on the configuration object passed\n     * into `$http`.\n     *\n     * Note that if you provide these properties on the config object the default transformations will be\n     * overwritten. If you wish to augment the default transformations then you must include them in your\n     * local transformation array.\n     *\n     * The following code demonstrates adding a new response transformation to be run after the default response\n     * transformations have been run.\n     *\n     * ```js\n     * function appendTransform(defaults, transform) {\n     *\n     *   // We can't guarantee that the default transformation is an array\n     *   defaults = angular.isArray(defaults) ? defaults : [defaults];\n     *\n     *   // Append the new transformation to the defaults\n     *   return defaults.concat(transform);\n     * }\n     *\n     * $http({\n     *   url: '...',\n     *   method: 'GET',\n     *   transformResponse: appendTransform($http.defaults.transformResponse, function(value) {\n     *     return doTransform(value);\n     *   })\n     * });\n     * ```\n     *\n     *\n     * ## Caching\n     *\n     * {@link ng.$http `$http`} responses are not cached by default. To enable caching, you must\n     * set the config.cache value or the default cache value to TRUE or to a cache object (created\n     * with {@link ng.$cacheFactory `$cacheFactory`}). If defined, the value of config.cache takes\n     * precedence over the default cache value.\n     *\n     * In order to:\n     *   * cache all responses - set the default cache value to TRUE or to a cache object\n     *   * cache a specific response - set config.cache value to TRUE or to a cache object\n     *\n     * If caching is enabled, but neither the default cache nor config.cache are set to a cache object,\n     * then the default `$cacheFactory(\"$http\")` object is used.\n     *\n     * The default cache value can be set by updating the\n     * {@link ng.$http#defaults `$http.defaults.cache`} property or the\n     * {@link $httpProvider#defaults `$httpProvider.defaults.cache`} property.\n     *\n     * When caching is enabled, {@link ng.$http `$http`} stores the response from the server using\n     * the relevant cache object. The next time the same request is made, the response is returned\n     * from the cache without sending a request to the server.\n     *\n     * Take note that:\n     *\n     *   * Only GET and JSONP requests are cached.\n     *   * The cache key is the request URL including search parameters; headers are not considered.\n     *   * Cached responses are returned asynchronously, in the same way as responses from the server.\n     *   * If multiple identical requests are made using the same cache, which is not yet populated,\n     *     one request will be made to the server and remaining requests will return the same response.\n     *   * A cache-control header on the response does not affect if or how responses are cached.\n     *\n     *\n     * ## Interceptors\n     *\n     * Before you start creating interceptors, be sure to understand the\n     * {@link ng.$q $q and deferred/promise APIs}.\n     *\n     * For purposes of global error handling, authentication, or any kind of synchronous or\n     * asynchronous pre-processing of request or postprocessing of responses, it is desirable to be\n     * able to intercept requests before they are handed to the server and\n     * responses before they are handed over to the application code that\n     * initiated these requests. The interceptors leverage the {@link ng.$q\n     * promise APIs} to fulfill this need for both synchronous and asynchronous pre-processing.\n     *\n     * The interceptors are service factories that are registered with the `$httpProvider` by\n     * adding them to the `$httpProvider.interceptors` array. The factory is called and\n     * injected with dependencies (if specified) and returns the interceptor.\n     *\n     * There are two kinds of interceptors (and two kinds of rejection interceptors):\n     *\n     *   * `request`: interceptors get called with a http {@link $http#usage config} object. The function is free to\n     *     modify the `config` object or create a new one. The function needs to return the `config`\n     *     object directly, or a promise containing the `config` or a new `config` object.\n     *   * `requestError`: interceptor gets called when a previous interceptor threw an error or\n     *     resolved with a rejection.\n     *   * `response`: interceptors get called with http `response` object. The function is free to\n     *     modify the `response` object or create a new one. The function needs to return the `response`\n     *     object directly, or as a promise containing the `response` or a new `response` object.\n     *   * `responseError`: interceptor gets called when a previous interceptor threw an error or\n     *     resolved with a rejection.\n     *\n     *\n     * ```js\n     *   // register the interceptor as a service\n     *   $provide.factory('myHttpInterceptor', function($q, dependency1, dependency2) {\n     *     return {\n     *       // optional method\n     *       'request': function(config) {\n     *         // do something on success\n     *         return config;\n     *       },\n     *\n     *       // optional method\n     *      'requestError': function(rejection) {\n     *         // do something on error\n     *         if (canRecover(rejection)) {\n     *           return responseOrNewPromise\n     *         }\n     *         return $q.reject(rejection);\n     *       },\n     *\n     *\n     *\n     *       // optional method\n     *       'response': function(response) {\n     *         // do something on success\n     *         return response;\n     *       },\n     *\n     *       // optional method\n     *      'responseError': function(rejection) {\n     *         // do something on error\n     *         if (canRecover(rejection)) {\n     *           return responseOrNewPromise\n     *         }\n     *         return $q.reject(rejection);\n     *       }\n     *     };\n     *   });\n     *\n     *   $httpProvider.interceptors.push('myHttpInterceptor');\n     *\n     *\n     *   // alternatively, register the interceptor via an anonymous factory\n     *   $httpProvider.interceptors.push(function($q, dependency1, dependency2) {\n     *     return {\n     *      'request': function(config) {\n     *          // same as above\n     *       },\n     *\n     *       'response': function(response) {\n     *          // same as above\n     *       }\n     *     };\n     *   });\n     * ```\n     *\n     * ## Security Considerations\n     *\n     * When designing web applications, consider security threats from:\n     *\n     * - [JSON vulnerability](http://haacked.com/archive/2008/11/20/anatomy-of-a-subtle-json-vulnerability.aspx)\n     * - [XSRF](http://en.wikipedia.org/wiki/Cross-site_request_forgery)\n     *\n     * Both server and the client must cooperate in order to eliminate these threats. Angular comes\n     * pre-configured with strategies that address these issues, but for this to work backend server\n     * cooperation is required.\n     *\n     * ### JSON Vulnerability Protection\n     *\n     * A [JSON vulnerability](http://haacked.com/archive/2008/11/20/anatomy-of-a-subtle-json-vulnerability.aspx)\n     * allows third party website to turn your JSON resource URL into\n     * [JSONP](http://en.wikipedia.org/wiki/JSONP) request under some conditions. To\n     * counter this your server can prefix all JSON requests with following string `\")]}',\\n\"`.\n     * Angular will automatically strip the prefix before processing it as JSON.\n     *\n     * For example if your server needs to return:\n     * ```js\n     * ['one','two']\n     * ```\n     *\n     * which is vulnerable to attack, your server can return:\n     * ```js\n     * )]}',\n     * ['one','two']\n     * ```\n     *\n     * Angular will strip the prefix, before processing the JSON.\n     *\n     *\n     * ### Cross Site Request Forgery (XSRF) Protection\n     *\n     * [XSRF](http://en.wikipedia.org/wiki/Cross-site_request_forgery) is an attack technique by\n     * which the attacker can trick an authenticated user into unknowingly executing actions on your\n     * website. Angular provides a mechanism to counter XSRF. When performing XHR requests, the\n     * $http service reads a token from a cookie (by default, `XSRF-TOKEN`) and sets it as an HTTP\n     * header (`X-XSRF-TOKEN`). Since only JavaScript that runs on your domain could read the\n     * cookie, your server can be assured that the XHR came from JavaScript running on your domain.\n     * The header will not be set for cross-domain requests.\n     *\n     * To take advantage of this, your server needs to set a token in a JavaScript readable session\n     * cookie called `XSRF-TOKEN` on the first HTTP GET request. On subsequent XHR requests the\n     * server can verify that the cookie matches `X-XSRF-TOKEN` HTTP header, and therefore be sure\n     * that only JavaScript running on your domain could have sent the request. The token must be\n     * unique for each user and must be verifiable by the server (to prevent the JavaScript from\n     * making up its own tokens). We recommend that the token is a digest of your site's\n     * authentication cookie with a [salt](https://en.wikipedia.org/wiki/Salt_(cryptography&#41;)\n     * for added security.\n     *\n     * The name of the headers can be specified using the xsrfHeaderName and xsrfCookieName\n     * properties of either $httpProvider.defaults at config-time, $http.defaults at run-time,\n     * or the per-request config object.\n     *\n     * In order to prevent collisions in environments where multiple Angular apps share the\n     * same domain or subdomain, we recommend that each application uses unique cookie name.\n     *\n     * @param {object} config Object describing the request to be made and how it should be\n     *    processed. The object has following properties:\n     *\n     *    - **method** – `{string}` – HTTP method (e.g. 'GET', 'POST', etc)\n     *    - **url** – `{string}` – Absolute or relative URL of the resource that is being requested.\n     *    - **params** – `{Object.<string|Object>}` – Map of strings or objects which will be serialized\n     *      with the `paramSerializer` and appended as GET parameters.\n     *    - **data** – `{string|Object}` – Data to be sent as the request message data.\n     *    - **headers** – `{Object}` – Map of strings or functions which return strings representing\n     *      HTTP headers to send to the server. If the return value of a function is null, the\n     *      header will not be sent. Functions accept a config object as an argument.\n     *    - **eventHandlers** - `{Object}` - Event listeners to be bound to the XMLHttpRequest object.\n     *      To bind events to the XMLHttpRequest upload object, use `uploadEventHandlers`.\n     *      The handler will be called in the context of a `$apply` block.\n     *    - **uploadEventHandlers** - `{Object}` - Event listeners to be bound to the XMLHttpRequest upload\n     *      object. To bind events to the XMLHttpRequest object, use `eventHandlers`.\n     *      The handler will be called in the context of a `$apply` block.\n     *    - **xsrfHeaderName** – `{string}` – Name of HTTP header to populate with the XSRF token.\n     *    - **xsrfCookieName** – `{string}` – Name of cookie containing the XSRF token.\n     *    - **transformRequest** –\n     *      `{function(data, headersGetter)|Array.<function(data, headersGetter)>}` –\n     *      transform function or an array of such functions. The transform function takes the http\n     *      request body and headers and returns its transformed (typically serialized) version.\n     *      See {@link ng.$http#overriding-the-default-transformations-per-request\n     *      Overriding the Default Transformations}\n     *    - **transformResponse** –\n     *      `{function(data, headersGetter, status)|Array.<function(data, headersGetter, status)>}` –\n     *      transform function or an array of such functions. The transform function takes the http\n     *      response body, headers and status and returns its transformed (typically deserialized) version.\n     *      See {@link ng.$http#overriding-the-default-transformations-per-request\n     *      Overriding the Default Transformations}\n     *    - **paramSerializer** - `{string|function(Object<string,string>):string}` - A function used to\n     *      prepare the string representation of request parameters (specified as an object).\n     *      If specified as string, it is interpreted as function registered with the\n     *      {@link $injector $injector}, which means you can create your own serializer\n     *      by registering it as a {@link auto.$provide#service service}.\n     *      The default serializer is the {@link $httpParamSerializer $httpParamSerializer};\n     *      alternatively, you can use the {@link $httpParamSerializerJQLike $httpParamSerializerJQLike}\n     *    - **cache** – `{boolean|Object}` – A boolean value or object created with\n     *      {@link ng.$cacheFactory `$cacheFactory`} to enable or disable caching of the HTTP response.\n     *      See {@link $http#caching $http Caching} for more information.\n     *    - **timeout** – `{number|Promise}` – timeout in milliseconds, or {@link ng.$q promise}\n     *      that should abort the request when resolved.\n     *    - **withCredentials** - `{boolean}` - whether to set the `withCredentials` flag on the\n     *      XHR object. See [requests with credentials](https://developer.mozilla.org/docs/Web/HTTP/Access_control_CORS#Requests_with_credentials)\n     *      for more information.\n     *    - **responseType** - `{string}` - see\n     *      [XMLHttpRequest.responseType](https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest#xmlhttprequest-responsetype).\n     *\n     * @returns {HttpPromise} Returns a {@link ng.$q `Promise}` that will be resolved to a response object\n     *                        when the request succeeds or fails.\n     *\n     *\n     * @property {Array.<Object>} pendingRequests Array of config objects for currently pending\n     *   requests. This is primarily meant to be used for debugging purposes.\n     *\n     *\n     * @example\n<example module=\"httpExample\">\n<file name=\"index.html\">\n  <div ng-controller=\"FetchController\">\n    <select ng-model=\"method\" aria-label=\"Request method\">\n      <option>GET</option>\n      <option>JSONP</option>\n    </select>\n    <input type=\"text\" ng-model=\"url\" size=\"80\" aria-label=\"URL\" />\n    <button id=\"fetchbtn\" ng-click=\"fetch()\">fetch</button><br>\n    <button id=\"samplegetbtn\" ng-click=\"updateModel('GET', 'http-hello.html')\">Sample GET</button>\n    <button id=\"samplejsonpbtn\"\n      ng-click=\"updateModel('JSONP',\n                    'https://angularjs.org/greet.php?callback=JSON_CALLBACK&name=Super%20Hero')\">\n      Sample JSONP\n    </button>\n    <button id=\"invalidjsonpbtn\"\n      ng-click=\"updateModel('JSONP', 'https://angularjs.org/doesntexist&callback=JSON_CALLBACK')\">\n        Invalid JSONP\n      </button>\n    <pre>http status code: {{status}}</pre>\n    <pre>http response data: {{data}}</pre>\n  </div>\n</file>\n<file name=\"script.js\">\n  angular.module('httpExample', [])\n    .controller('FetchController', ['$scope', '$http', '$templateCache',\n      function($scope, $http, $templateCache) {\n        $scope.method = 'GET';\n        $scope.url = 'http-hello.html';\n\n        $scope.fetch = function() {\n          $scope.code = null;\n          $scope.response = null;\n\n          $http({method: $scope.method, url: $scope.url, cache: $templateCache}).\n            then(function(response) {\n              $scope.status = response.status;\n              $scope.data = response.data;\n            }, function(response) {\n              $scope.data = response.data || \"Request failed\";\n              $scope.status = response.status;\n          });\n        };\n\n        $scope.updateModel = function(method, url) {\n          $scope.method = method;\n          $scope.url = url;\n        };\n      }]);\n</file>\n<file name=\"http-hello.html\">\n  Hello, $http!\n</file>\n<file name=\"protractor.js\" type=\"protractor\">\n  var status = element(by.binding('status'));\n  var data = element(by.binding('data'));\n  var fetchBtn = element(by.id('fetchbtn'));\n  var sampleGetBtn = element(by.id('samplegetbtn'));\n  var sampleJsonpBtn = element(by.id('samplejsonpbtn'));\n  var invalidJsonpBtn = element(by.id('invalidjsonpbtn'));\n\n  it('should make an xhr GET request', function() {\n    sampleGetBtn.click();\n    fetchBtn.click();\n    expect(status.getText()).toMatch('200');\n    expect(data.getText()).toMatch(/Hello, \\$http!/);\n  });\n\n// Commented out due to flakes. See https://github.com/angular/angular.js/issues/9185\n// it('should make a JSONP request to angularjs.org', function() {\n//   sampleJsonpBtn.click();\n//   fetchBtn.click();\n//   expect(status.getText()).toMatch('200');\n//   expect(data.getText()).toMatch(/Super Hero!/);\n// });\n\n  it('should make JSONP request to invalid URL and invoke the error handler',\n      function() {\n    invalidJsonpBtn.click();\n    fetchBtn.click();\n    expect(status.getText()).toMatch('0');\n    expect(data.getText()).toMatch('Request failed');\n  });\n</file>\n</example>\n     */\n    function $http(requestConfig) {\n\n      if (!isObject(requestConfig)) {\n        throw minErr('$http')('badreq', 'Http request configuration must be an object.  Received: {0}', requestConfig);\n      }\n\n      if (!isString(requestConfig.url)) {\n        throw minErr('$http')('badreq', 'Http request configuration url must be a string.  Received: {0}', requestConfig.url);\n      }\n\n      var config = extend({\n        method: 'get',\n        transformRequest: defaults.transformRequest,\n        transformResponse: defaults.transformResponse,\n        paramSerializer: defaults.paramSerializer\n      }, requestConfig);\n\n      config.headers = mergeHeaders(requestConfig);\n      config.method = uppercase(config.method);\n      config.paramSerializer = isString(config.paramSerializer) ?\n          $injector.get(config.paramSerializer) : config.paramSerializer;\n\n      var requestInterceptors = [];\n      var responseInterceptors = [];\n      var promise = $q.when(config);\n\n      // apply interceptors\n      forEach(reversedInterceptors, function(interceptor) {\n        if (interceptor.request || interceptor.requestError) {\n          requestInterceptors.unshift(interceptor.request, interceptor.requestError);\n        }\n        if (interceptor.response || interceptor.responseError) {\n          responseInterceptors.push(interceptor.response, interceptor.responseError);\n        }\n      });\n\n      promise = chainInterceptors(promise, requestInterceptors);\n      promise = promise.then(serverRequest);\n      promise = chainInterceptors(promise, responseInterceptors);\n\n      if (useLegacyPromise) {\n        promise.success = function(fn) {\n          assertArgFn(fn, 'fn');\n\n          promise.then(function(response) {\n            fn(response.data, response.status, response.headers, config);\n          });\n          return promise;\n        };\n\n        promise.error = function(fn) {\n          assertArgFn(fn, 'fn');\n\n          promise.then(null, function(response) {\n            fn(response.data, response.status, response.headers, config);\n          });\n          return promise;\n        };\n      } else {\n        promise.success = $httpMinErrLegacyFn('success');\n        promise.error = $httpMinErrLegacyFn('error');\n      }\n\n      return promise;\n\n\n      function chainInterceptors(promise, interceptors) {\n        for (var i = 0, ii = interceptors.length; i < ii;) {\n          var thenFn = interceptors[i++];\n          var rejectFn = interceptors[i++];\n\n          promise = promise.then(thenFn, rejectFn);\n        }\n\n        interceptors.length = 0;\n\n        return promise;\n      }\n\n      function executeHeaderFns(headers, config) {\n        var headerContent, processedHeaders = {};\n\n        forEach(headers, function(headerFn, header) {\n          if (isFunction(headerFn)) {\n            headerContent = headerFn(config);\n            if (headerContent != null) {\n              processedHeaders[header] = headerContent;\n            }\n          } else {\n            processedHeaders[header] = headerFn;\n          }\n        });\n\n        return processedHeaders;\n      }\n\n      function mergeHeaders(config) {\n        var defHeaders = defaults.headers,\n            reqHeaders = extend({}, config.headers),\n            defHeaderName, lowercaseDefHeaderName, reqHeaderName;\n\n        defHeaders = extend({}, defHeaders.common, defHeaders[lowercase(config.method)]);\n\n        // using for-in instead of forEach to avoid unnecessary iteration after header has been found\n        defaultHeadersIteration:\n        for (defHeaderName in defHeaders) {\n          lowercaseDefHeaderName = lowercase(defHeaderName);\n\n          for (reqHeaderName in reqHeaders) {\n            if (lowercase(reqHeaderName) === lowercaseDefHeaderName) {\n              continue defaultHeadersIteration;\n            }\n          }\n\n          reqHeaders[defHeaderName] = defHeaders[defHeaderName];\n        }\n\n        // execute if header value is a function for merged headers\n        return executeHeaderFns(reqHeaders, shallowCopy(config));\n      }\n\n      function serverRequest(config) {\n        var headers = config.headers;\n        var reqData = transformData(config.data, headersGetter(headers), undefined, config.transformRequest);\n\n        // strip content-type if data is undefined\n        if (isUndefined(reqData)) {\n          forEach(headers, function(value, header) {\n            if (lowercase(header) === 'content-type') {\n              delete headers[header];\n            }\n          });\n        }\n\n        if (isUndefined(config.withCredentials) && !isUndefined(defaults.withCredentials)) {\n          config.withCredentials = defaults.withCredentials;\n        }\n\n        // send request\n        return sendReq(config, reqData).then(transformResponse, transformResponse);\n      }\n\n      function transformResponse(response) {\n        // make a copy since the response must be cacheable\n        var resp = extend({}, response);\n        resp.data = transformData(response.data, response.headers, response.status,\n                                  config.transformResponse);\n        return (isSuccess(response.status))\n          ? resp\n          : $q.reject(resp);\n      }\n    }\n\n    $http.pendingRequests = [];\n\n    /**\n     * @ngdoc method\n     * @name $http#get\n     *\n     * @description\n     * Shortcut method to perform `GET` request.\n     *\n     * @param {string} url Relative or absolute URL specifying the destination of the request\n     * @param {Object=} config Optional configuration object\n     * @returns {HttpPromise} Future object\n     */\n\n    /**\n     * @ngdoc method\n     * @name $http#delete\n     *\n     * @description\n     * Shortcut method to perform `DELETE` request.\n     *\n     * @param {string} url Relative or absolute URL specifying the destination of the request\n     * @param {Object=} config Optional configuration object\n     * @returns {HttpPromise} Future object\n     */\n\n    /**\n     * @ngdoc method\n     * @name $http#head\n     *\n     * @description\n     * Shortcut method to perform `HEAD` request.\n     *\n     * @param {string} url Relative or absolute URL specifying the destination of the request\n     * @param {Object=} config Optional configuration object\n     * @returns {HttpPromise} Future object\n     */\n\n    /**\n     * @ngdoc method\n     * @name $http#jsonp\n     *\n     * @description\n     * Shortcut method to perform `JSONP` request.\n     * If you would like to customise where and how the callbacks are stored then try overriding\n     * or decorating the {@link $jsonpCallbacks} service.\n     *\n     * @param {string} url Relative or absolute URL specifying the destination of the request.\n     *                     The name of the callback should be the string `JSON_CALLBACK`.\n     * @param {Object=} config Optional configuration object\n     * @returns {HttpPromise} Future object\n     */\n    createShortMethods('get', 'delete', 'head', 'jsonp');\n\n    /**\n     * @ngdoc method\n     * @name $http#post\n     *\n     * @description\n     * Shortcut method to perform `POST` request.\n     *\n     * @param {string} url Relative or absolute URL specifying the destination of the request\n     * @param {*} data Request content\n     * @param {Object=} config Optional configuration object\n     * @returns {HttpPromise} Future object\n     */\n\n    /**\n     * @ngdoc method\n     * @name $http#put\n     *\n     * @description\n     * Shortcut method to perform `PUT` request.\n     *\n     * @param {string} url Relative or absolute URL specifying the destination of the request\n     * @param {*} data Request content\n     * @param {Object=} config Optional configuration object\n     * @returns {HttpPromise} Future object\n     */\n\n     /**\n      * @ngdoc method\n      * @name $http#patch\n      *\n      * @description\n      * Shortcut method to perform `PATCH` request.\n      *\n      * @param {string} url Relative or absolute URL specifying the destination of the request\n      * @param {*} data Request content\n      * @param {Object=} config Optional configuration object\n      * @returns {HttpPromise} Future object\n      */\n    createShortMethodsWithData('post', 'put', 'patch');\n\n        /**\n         * @ngdoc property\n         * @name $http#defaults\n         *\n         * @description\n         * Runtime equivalent of the `$httpProvider.defaults` property. Allows configuration of\n         * default headers, withCredentials as well as request and response transformations.\n         *\n         * See \"Setting HTTP Headers\" and \"Transforming Requests and Responses\" sections above.\n         */\n    $http.defaults = defaults;\n\n\n    return $http;\n\n\n    function createShortMethods(names) {\n      forEach(arguments, function(name) {\n        $http[name] = function(url, config) {\n          return $http(extend({}, config || {}, {\n            method: name,\n            url: url\n          }));\n        };\n      });\n    }\n\n\n    function createShortMethodsWithData(name) {\n      forEach(arguments, function(name) {\n        $http[name] = function(url, data, config) {\n          return $http(extend({}, config || {}, {\n            method: name,\n            url: url,\n            data: data\n          }));\n        };\n      });\n    }\n\n\n    /**\n     * Makes the request.\n     *\n     * !!! ACCESSES CLOSURE VARS:\n     * $httpBackend, defaults, $log, $rootScope, defaultCache, $http.pendingRequests\n     */\n    function sendReq(config, reqData) {\n      var deferred = $q.defer(),\n          promise = deferred.promise,\n          cache,\n          cachedResp,\n          reqHeaders = config.headers,\n          url = buildUrl(config.url, config.paramSerializer(config.params));\n\n      $http.pendingRequests.push(config);\n      promise.then(removePendingReq, removePendingReq);\n\n\n      if ((config.cache || defaults.cache) && config.cache !== false &&\n          (config.method === 'GET' || config.method === 'JSONP')) {\n        cache = isObject(config.cache) ? config.cache\n              : isObject(defaults.cache) ? defaults.cache\n              : defaultCache;\n      }\n\n      if (cache) {\n        cachedResp = cache.get(url);\n        if (isDefined(cachedResp)) {\n          if (isPromiseLike(cachedResp)) {\n            // cached request has already been sent, but there is no response yet\n            cachedResp.then(resolvePromiseWithResult, resolvePromiseWithResult);\n          } else {\n            // serving from cache\n            if (isArray(cachedResp)) {\n              resolvePromise(cachedResp[1], cachedResp[0], shallowCopy(cachedResp[2]), cachedResp[3]);\n            } else {\n              resolvePromise(cachedResp, 200, {}, 'OK');\n            }\n          }\n        } else {\n          // put the promise for the non-transformed response into cache as a placeholder\n          cache.put(url, promise);\n        }\n      }\n\n\n      // if we won't have the response in cache, set the xsrf headers and\n      // send the request to the backend\n      if (isUndefined(cachedResp)) {\n        var xsrfValue = urlIsSameOrigin(config.url)\n            ? $$cookieReader()[config.xsrfCookieName || defaults.xsrfCookieName]\n            : undefined;\n        if (xsrfValue) {\n          reqHeaders[(config.xsrfHeaderName || defaults.xsrfHeaderName)] = xsrfValue;\n        }\n\n        $httpBackend(config.method, url, reqData, done, reqHeaders, config.timeout,\n            config.withCredentials, config.responseType,\n            createApplyHandlers(config.eventHandlers),\n            createApplyHandlers(config.uploadEventHandlers));\n      }\n\n      return promise;\n\n      function createApplyHandlers(eventHandlers) {\n        if (eventHandlers) {\n          var applyHandlers = {};\n          forEach(eventHandlers, function(eventHandler, key) {\n            applyHandlers[key] = function(event) {\n              if (useApplyAsync) {\n                $rootScope.$applyAsync(callEventHandler);\n              } else if ($rootScope.$$phase) {\n                callEventHandler();\n              } else {\n                $rootScope.$apply(callEventHandler);\n              }\n\n              function callEventHandler() {\n                eventHandler(event);\n              }\n            };\n          });\n          return applyHandlers;\n        }\n      }\n\n\n      /**\n       * Callback registered to $httpBackend():\n       *  - caches the response if desired\n       *  - resolves the raw $http promise\n       *  - calls $apply\n       */\n      function done(status, response, headersString, statusText) {\n        if (cache) {\n          if (isSuccess(status)) {\n            cache.put(url, [status, response, parseHeaders(headersString), statusText]);\n          } else {\n            // remove promise from the cache\n            cache.remove(url);\n          }\n        }\n\n        function resolveHttpPromise() {\n          resolvePromise(response, status, headersString, statusText);\n        }\n\n        if (useApplyAsync) {\n          $rootScope.$applyAsync(resolveHttpPromise);\n        } else {\n          resolveHttpPromise();\n          if (!$rootScope.$$phase) $rootScope.$apply();\n        }\n      }\n\n\n      /**\n       * Resolves the raw $http promise.\n       */\n      function resolvePromise(response, status, headers, statusText) {\n        //status: HTTP response status code, 0, -1 (aborted by timeout / promise)\n        status = status >= -1 ? status : 0;\n\n        (isSuccess(status) ? deferred.resolve : deferred.reject)({\n          data: response,\n          status: status,\n          headers: headersGetter(headers),\n          config: config,\n          statusText: statusText\n        });\n      }\n\n      function resolvePromiseWithResult(result) {\n        resolvePromise(result.data, result.status, shallowCopy(result.headers()), result.statusText);\n      }\n\n      function removePendingReq() {\n        var idx = $http.pendingRequests.indexOf(config);\n        if (idx !== -1) $http.pendingRequests.splice(idx, 1);\n      }\n    }\n\n\n    function buildUrl(url, serializedParams) {\n      if (serializedParams.length > 0) {\n        url += ((url.indexOf('?') == -1) ? '?' : '&') + serializedParams;\n      }\n      return url;\n    }\n  }];\n}\n\n/**\n * @ngdoc service\n * @name $xhrFactory\n *\n * @description\n * Factory function used to create XMLHttpRequest objects.\n *\n * Replace or decorate this service to create your own custom XMLHttpRequest objects.\n *\n * ```\n * angular.module('myApp', [])\n * .factory('$xhrFactory', function() {\n *   return function createXhr(method, url) {\n *     return new window.XMLHttpRequest({mozSystem: true});\n *   };\n * });\n * ```\n *\n * @param {string} method HTTP method of the request (GET, POST, PUT, ..)\n * @param {string} url URL of the request.\n */\nfunction $xhrFactoryProvider() {\n  this.$get = function() {\n    return function createXhr() {\n      return new window.XMLHttpRequest();\n    };\n  };\n}\n\n/**\n * @ngdoc service\n * @name $httpBackend\n * @requires $jsonpCallbacks\n * @requires $document\n * @requires $xhrFactory\n *\n * @description\n * HTTP backend used by the {@link ng.$http service} that delegates to\n * XMLHttpRequest object or JSONP and deals with browser incompatibilities.\n *\n * You should never need to use this service directly, instead use the higher-level abstractions:\n * {@link ng.$http $http} or {@link ngResource.$resource $resource}.\n *\n * During testing this implementation is swapped with {@link ngMock.$httpBackend mock\n * $httpBackend} which can be trained with responses.\n */\nfunction $HttpBackendProvider() {\n  this.$get = ['$browser', '$jsonpCallbacks', '$document', '$xhrFactory', function($browser, $jsonpCallbacks, $document, $xhrFactory) {\n    return createHttpBackend($browser, $xhrFactory, $browser.defer, $jsonpCallbacks, $document[0]);\n  }];\n}\n\nfunction createHttpBackend($browser, createXhr, $browserDefer, callbacks, rawDocument) {\n  // TODO(vojta): fix the signature\n  return function(method, url, post, callback, headers, timeout, withCredentials, responseType, eventHandlers, uploadEventHandlers) {\n    $browser.$$incOutstandingRequestCount();\n    url = url || $browser.url();\n\n    if (lowercase(method) === 'jsonp') {\n      var callbackPath = callbacks.createCallback(url);\n      var jsonpDone = jsonpReq(url, callbackPath, function(status, text) {\n        // jsonpReq only ever sets status to 200 (OK), 404 (ERROR) or -1 (WAITING)\n        var response = (status === 200) && callbacks.getResponse(callbackPath);\n        completeRequest(callback, status, response, \"\", text);\n        callbacks.removeCallback(callbackPath);\n      });\n    } else {\n\n      var xhr = createXhr(method, url);\n\n      xhr.open(method, url, true);\n      forEach(headers, function(value, key) {\n        if (isDefined(value)) {\n            xhr.setRequestHeader(key, value);\n        }\n      });\n\n      xhr.onload = function requestLoaded() {\n        var statusText = xhr.statusText || '';\n\n        // responseText is the old-school way of retrieving response (supported by IE9)\n        // response/responseType properties were introduced in XHR Level2 spec (supported by IE10)\n        var response = ('response' in xhr) ? xhr.response : xhr.responseText;\n\n        // normalize IE9 bug (http://bugs.jquery.com/ticket/1450)\n        var status = xhr.status === 1223 ? 204 : xhr.status;\n\n        // fix status code when it is 0 (0 status is undocumented).\n        // Occurs when accessing file resources or on Android 4.1 stock browser\n        // while retrieving files from application cache.\n        if (status === 0) {\n          status = response ? 200 : urlResolve(url).protocol == 'file' ? 404 : 0;\n        }\n\n        completeRequest(callback,\n            status,\n            response,\n            xhr.getAllResponseHeaders(),\n            statusText);\n      };\n\n      var requestError = function() {\n        // The response is always empty\n        // See https://xhr.spec.whatwg.org/#request-error-steps and https://fetch.spec.whatwg.org/#concept-network-error\n        completeRequest(callback, -1, null, null, '');\n      };\n\n      xhr.onerror = requestError;\n      xhr.onabort = requestError;\n\n      forEach(eventHandlers, function(value, key) {\n          xhr.addEventListener(key, value);\n      });\n\n      forEach(uploadEventHandlers, function(value, key) {\n        xhr.upload.addEventListener(key, value);\n      });\n\n      if (withCredentials) {\n        xhr.withCredentials = true;\n      }\n\n      if (responseType) {\n        try {\n          xhr.responseType = responseType;\n        } catch (e) {\n          // WebKit added support for the json responseType value on 09/03/2013\n          // https://bugs.webkit.org/show_bug.cgi?id=73648. Versions of Safari prior to 7 are\n          // known to throw when setting the value \"json\" as the response type. Other older\n          // browsers implementing the responseType\n          //\n          // The json response type can be ignored if not supported, because JSON payloads are\n          // parsed on the client-side regardless.\n          if (responseType !== 'json') {\n            throw e;\n          }\n        }\n      }\n\n      xhr.send(isUndefined(post) ? null : post);\n    }\n\n    if (timeout > 0) {\n      var timeoutId = $browserDefer(timeoutRequest, timeout);\n    } else if (isPromiseLike(timeout)) {\n      timeout.then(timeoutRequest);\n    }\n\n\n    function timeoutRequest() {\n      jsonpDone && jsonpDone();\n      xhr && xhr.abort();\n    }\n\n    function completeRequest(callback, status, response, headersString, statusText) {\n      // cancel timeout and subsequent timeout promise resolution\n      if (isDefined(timeoutId)) {\n        $browserDefer.cancel(timeoutId);\n      }\n      jsonpDone = xhr = null;\n\n      callback(status, response, headersString, statusText);\n      $browser.$$completeOutstandingRequest(noop);\n    }\n  };\n\n  function jsonpReq(url, callbackPath, done) {\n    url = url.replace('JSON_CALLBACK', callbackPath);\n    // we can't use jQuery/jqLite here because jQuery does crazy stuff with script elements, e.g.:\n    // - fetches local scripts via XHR and evals them\n    // - adds and immediately removes script elements from the document\n    var script = rawDocument.createElement('script'), callback = null;\n    script.type = \"text/javascript\";\n    script.src = url;\n    script.async = true;\n\n    callback = function(event) {\n      removeEventListenerFn(script, \"load\", callback);\n      removeEventListenerFn(script, \"error\", callback);\n      rawDocument.body.removeChild(script);\n      script = null;\n      var status = -1;\n      var text = \"unknown\";\n\n      if (event) {\n        if (event.type === \"load\" && !callbacks.wasCalled(callbackPath)) {\n          event = { type: \"error\" };\n        }\n        text = event.type;\n        status = event.type === \"error\" ? 404 : 200;\n      }\n\n      if (done) {\n        done(status, text);\n      }\n    };\n\n    addEventListenerFn(script, \"load\", callback);\n    addEventListenerFn(script, \"error\", callback);\n    rawDocument.body.appendChild(script);\n    return callback;\n  }\n}\n\nvar $interpolateMinErr = angular.$interpolateMinErr = minErr('$interpolate');\n$interpolateMinErr.throwNoconcat = function(text) {\n  throw $interpolateMinErr('noconcat',\n      \"Error while interpolating: {0}\\nStrict Contextual Escaping disallows \" +\n      \"interpolations that concatenate multiple expressions when a trusted value is \" +\n      \"required.  See http://docs.angularjs.org/api/ng.$sce\", text);\n};\n\n$interpolateMinErr.interr = function(text, err) {\n  return $interpolateMinErr('interr', \"Can't interpolate: {0}\\n{1}\", text, err.toString());\n};\n\n/**\n * @ngdoc provider\n * @name $interpolateProvider\n *\n * @description\n *\n * Used for configuring the interpolation markup. Defaults to `{{` and `}}`.\n *\n * <div class=\"alert alert-danger\">\n * This feature is sometimes used to mix different markup languages, e.g. to wrap an Angular\n * template within a Python Jinja template (or any other template language). Mixing templating\n * languages is **very dangerous**. The embedding template language will not safely escape Angular\n * expressions, so any user-controlled values in the template will cause Cross Site Scripting (XSS)\n * security bugs!\n * </div>\n *\n * @example\n<example name=\"custom-interpolation-markup\" module=\"customInterpolationApp\">\n<file name=\"index.html\">\n<script>\n  var customInterpolationApp = angular.module('customInterpolationApp', []);\n\n  customInterpolationApp.config(function($interpolateProvider) {\n    $interpolateProvider.startSymbol('//');\n    $interpolateProvider.endSymbol('//');\n  });\n\n\n  customInterpolationApp.controller('DemoController', function() {\n      this.label = \"This binding is brought you by // interpolation symbols.\";\n  });\n</script>\n<div ng-controller=\"DemoController as demo\">\n    //demo.label//\n</div>\n</file>\n<file name=\"protractor.js\" type=\"protractor\">\n  it('should interpolate binding with custom symbols', function() {\n    expect(element(by.binding('demo.label')).getText()).toBe('This binding is brought you by // interpolation symbols.');\n  });\n</file>\n</example>\n */\nfunction $InterpolateProvider() {\n  var startSymbol = '{{';\n  var endSymbol = '}}';\n\n  /**\n   * @ngdoc method\n   * @name $interpolateProvider#startSymbol\n   * @description\n   * Symbol to denote start of expression in the interpolated string. Defaults to `{{`.\n   *\n   * @param {string=} value new value to set the starting symbol to.\n   * @returns {string|self} Returns the symbol when used as getter and self if used as setter.\n   */\n  this.startSymbol = function(value) {\n    if (value) {\n      startSymbol = value;\n      return this;\n    } else {\n      return startSymbol;\n    }\n  };\n\n  /**\n   * @ngdoc method\n   * @name $interpolateProvider#endSymbol\n   * @description\n   * Symbol to denote the end of expression in the interpolated string. Defaults to `}}`.\n   *\n   * @param {string=} value new value to set the ending symbol to.\n   * @returns {string|self} Returns the symbol when used as getter and self if used as setter.\n   */\n  this.endSymbol = function(value) {\n    if (value) {\n      endSymbol = value;\n      return this;\n    } else {\n      return endSymbol;\n    }\n  };\n\n\n  this.$get = ['$parse', '$exceptionHandler', '$sce', function($parse, $exceptionHandler, $sce) {\n    var startSymbolLength = startSymbol.length,\n        endSymbolLength = endSymbol.length,\n        escapedStartRegexp = new RegExp(startSymbol.replace(/./g, escape), 'g'),\n        escapedEndRegexp = new RegExp(endSymbol.replace(/./g, escape), 'g');\n\n    function escape(ch) {\n      return '\\\\\\\\\\\\' + ch;\n    }\n\n    function unescapeText(text) {\n      return text.replace(escapedStartRegexp, startSymbol).\n        replace(escapedEndRegexp, endSymbol);\n    }\n\n    function stringify(value) {\n      if (value == null) { // null || undefined\n        return '';\n      }\n      switch (typeof value) {\n        case 'string':\n          break;\n        case 'number':\n          value = '' + value;\n          break;\n        default:\n          value = toJson(value);\n      }\n\n      return value;\n    }\n\n    //TODO: this is the same as the constantWatchDelegate in parse.js\n    function constantWatchDelegate(scope, listener, objectEquality, constantInterp) {\n      var unwatch;\n      return unwatch = scope.$watch(function constantInterpolateWatch(scope) {\n        unwatch();\n        return constantInterp(scope);\n      }, listener, objectEquality);\n    }\n\n    /**\n     * @ngdoc service\n     * @name $interpolate\n     * @kind function\n     *\n     * @requires $parse\n     * @requires $sce\n     *\n     * @description\n     *\n     * Compiles a string with markup into an interpolation function. This service is used by the\n     * HTML {@link ng.$compile $compile} service for data binding. See\n     * {@link ng.$interpolateProvider $interpolateProvider} for configuring the\n     * interpolation markup.\n     *\n     *\n     * ```js\n     *   var $interpolate = ...; // injected\n     *   var exp = $interpolate('Hello {{name | uppercase}}!');\n     *   expect(exp({name:'Angular'})).toEqual('Hello ANGULAR!');\n     * ```\n     *\n     * `$interpolate` takes an optional fourth argument, `allOrNothing`. If `allOrNothing` is\n     * `true`, the interpolation function will return `undefined` unless all embedded expressions\n     * evaluate to a value other than `undefined`.\n     *\n     * ```js\n     *   var $interpolate = ...; // injected\n     *   var context = {greeting: 'Hello', name: undefined };\n     *\n     *   // default \"forgiving\" mode\n     *   var exp = $interpolate('{{greeting}} {{name}}!');\n     *   expect(exp(context)).toEqual('Hello !');\n     *\n     *   // \"allOrNothing\" mode\n     *   exp = $interpolate('{{greeting}} {{name}}!', false, null, true);\n     *   expect(exp(context)).toBeUndefined();\n     *   context.name = 'Angular';\n     *   expect(exp(context)).toEqual('Hello Angular!');\n     * ```\n     *\n     * `allOrNothing` is useful for interpolating URLs. `ngSrc` and `ngSrcset` use this behavior.\n     *\n     * #### Escaped Interpolation\n     * $interpolate provides a mechanism for escaping interpolation markers. Start and end markers\n     * can be escaped by preceding each of their characters with a REVERSE SOLIDUS U+005C (backslash).\n     * It will be rendered as a regular start/end marker, and will not be interpreted as an expression\n     * or binding.\n     *\n     * This enables web-servers to prevent script injection attacks and defacing attacks, to some\n     * degree, while also enabling code examples to work without relying on the\n     * {@link ng.directive:ngNonBindable ngNonBindable} directive.\n     *\n     * **For security purposes, it is strongly encouraged that web servers escape user-supplied data,\n     * replacing angle brackets (&lt;, &gt;) with &amp;lt; and &amp;gt; respectively, and replacing all\n     * interpolation start/end markers with their escaped counterparts.**\n     *\n     * Escaped interpolation markers are only replaced with the actual interpolation markers in rendered\n     * output when the $interpolate service processes the text. So, for HTML elements interpolated\n     * by {@link ng.$compile $compile}, or otherwise interpolated with the `mustHaveExpression` parameter\n     * set to `true`, the interpolated text must contain an unescaped interpolation expression. As such,\n     * this is typically useful only when user-data is used in rendering a template from the server, or\n     * when otherwise untrusted data is used by a directive.\n     *\n     * <example>\n     *  <file name=\"index.html\">\n     *    <div ng-init=\"username='A user'\">\n     *      <p ng-init=\"apptitle='Escaping demo'\">{{apptitle}}: \\{\\{ username = \"defaced value\"; \\}\\}\n     *        </p>\n     *      <p><strong>{{username}}</strong> attempts to inject code which will deface the\n     *        application, but fails to accomplish their task, because the server has correctly\n     *        escaped the interpolation start/end markers with REVERSE SOLIDUS U+005C (backslash)\n     *        characters.</p>\n     *      <p>Instead, the result of the attempted script injection is visible, and can be removed\n     *        from the database by an administrator.</p>\n     *    </div>\n     *  </file>\n     * </example>\n     *\n     * @knownIssue\n     * It is currently not possible for an interpolated expression to contain the interpolation end\n     * symbol. For example, `{{ '}}' }}` will be incorrectly interpreted as `{{ ' }}` + `' }}`, i.e.\n     * an interpolated expression consisting of a single-quote (`'`) and the `' }}` string.\n     *\n     * @knownIssue\n     * All directives and components must use the standard `{{` `}}` interpolation symbols\n     * in their templates. If you change the application interpolation symbols the {@link $compile}\n     * service will attempt to denormalize the standard symbols to the custom symbols.\n     * The denormalization process is not clever enough to know not to replace instances of the standard\n     * symbols where they would not normally be treated as interpolation symbols. For example in the following\n     * code snippet the closing braces of the literal object will get incorrectly denormalized:\n     *\n     * ```\n     * <div data-context='{\"context\":{\"id\":3,\"type\":\"page\"}}\">\n     * ```\n     *\n     * The workaround is to ensure that such instances are separated by whitespace:\n     * ```\n     * <div data-context='{\"context\":{\"id\":3,\"type\":\"page\"} }\">\n     * ```\n     *\n     * See https://github.com/angular/angular.js/pull/14610#issuecomment-219401099 for more information.\n     *\n     * @param {string} text The text with markup to interpolate.\n     * @param {boolean=} mustHaveExpression if set to true then the interpolation string must have\n     *    embedded expression in order to return an interpolation function. Strings with no\n     *    embedded expression will return null for the interpolation function.\n     * @param {string=} trustedContext when provided, the returned function passes the interpolated\n     *    result through {@link ng.$sce#getTrusted $sce.getTrusted(interpolatedResult,\n     *    trustedContext)} before returning it.  Refer to the {@link ng.$sce $sce} service that\n     *    provides Strict Contextual Escaping for details.\n     * @param {boolean=} allOrNothing if `true`, then the returned function returns undefined\n     *    unless all embedded expressions evaluate to a value other than `undefined`.\n     * @returns {function(context)} an interpolation function which is used to compute the\n     *    interpolated string. The function has these parameters:\n     *\n     * - `context`: evaluation context for all expressions embedded in the interpolated text\n     */\n    function $interpolate(text, mustHaveExpression, trustedContext, allOrNothing) {\n      // Provide a quick exit and simplified result function for text with no interpolation\n      if (!text.length || text.indexOf(startSymbol) === -1) {\n        var constantInterp;\n        if (!mustHaveExpression) {\n          var unescapedText = unescapeText(text);\n          constantInterp = valueFn(unescapedText);\n          constantInterp.exp = text;\n          constantInterp.expressions = [];\n          constantInterp.$$watchDelegate = constantWatchDelegate;\n        }\n        return constantInterp;\n      }\n\n      allOrNothing = !!allOrNothing;\n      var startIndex,\n          endIndex,\n          index = 0,\n          expressions = [],\n          parseFns = [],\n          textLength = text.length,\n          exp,\n          concat = [],\n          expressionPositions = [];\n\n      while (index < textLength) {\n        if (((startIndex = text.indexOf(startSymbol, index)) != -1) &&\n             ((endIndex = text.indexOf(endSymbol, startIndex + startSymbolLength)) != -1)) {\n          if (index !== startIndex) {\n            concat.push(unescapeText(text.substring(index, startIndex)));\n          }\n          exp = text.substring(startIndex + startSymbolLength, endIndex);\n          expressions.push(exp);\n          parseFns.push($parse(exp, parseStringifyInterceptor));\n          index = endIndex + endSymbolLength;\n          expressionPositions.push(concat.length);\n          concat.push('');\n        } else {\n          // we did not find an interpolation, so we have to add the remainder to the separators array\n          if (index !== textLength) {\n            concat.push(unescapeText(text.substring(index)));\n          }\n          break;\n        }\n      }\n\n      // Concatenating expressions makes it hard to reason about whether some combination of\n      // concatenated values are unsafe to use and could easily lead to XSS.  By requiring that a\n      // single expression be used for iframe[src], object[src], etc., we ensure that the value\n      // that's used is assigned or constructed by some JS code somewhere that is more testable or\n      // make it obvious that you bound the value to some user controlled value.  This helps reduce\n      // the load when auditing for XSS issues.\n      if (trustedContext && concat.length > 1) {\n          $interpolateMinErr.throwNoconcat(text);\n      }\n\n      if (!mustHaveExpression || expressions.length) {\n        var compute = function(values) {\n          for (var i = 0, ii = expressions.length; i < ii; i++) {\n            if (allOrNothing && isUndefined(values[i])) return;\n            concat[expressionPositions[i]] = values[i];\n          }\n          return concat.join('');\n        };\n\n        var getValue = function(value) {\n          return trustedContext ?\n            $sce.getTrusted(trustedContext, value) :\n            $sce.valueOf(value);\n        };\n\n        return extend(function interpolationFn(context) {\n            var i = 0;\n            var ii = expressions.length;\n            var values = new Array(ii);\n\n            try {\n              for (; i < ii; i++) {\n                values[i] = parseFns[i](context);\n              }\n\n              return compute(values);\n            } catch (err) {\n              $exceptionHandler($interpolateMinErr.interr(text, err));\n            }\n\n          }, {\n          // all of these properties are undocumented for now\n          exp: text, //just for compatibility with regular watchers created via $watch\n          expressions: expressions,\n          $$watchDelegate: function(scope, listener) {\n            var lastValue;\n            return scope.$watchGroup(parseFns, function interpolateFnWatcher(values, oldValues) {\n              var currValue = compute(values);\n              if (isFunction(listener)) {\n                listener.call(this, currValue, values !== oldValues ? lastValue : currValue, scope);\n              }\n              lastValue = currValue;\n            });\n          }\n        });\n      }\n\n      function parseStringifyInterceptor(value) {\n        try {\n          value = getValue(value);\n          return allOrNothing && !isDefined(value) ? value : stringify(value);\n        } catch (err) {\n          $exceptionHandler($interpolateMinErr.interr(text, err));\n        }\n      }\n    }\n\n\n    /**\n     * @ngdoc method\n     * @name $interpolate#startSymbol\n     * @description\n     * Symbol to denote the start of expression in the interpolated string. Defaults to `{{`.\n     *\n     * Use {@link ng.$interpolateProvider#startSymbol `$interpolateProvider.startSymbol`} to change\n     * the symbol.\n     *\n     * @returns {string} start symbol.\n     */\n    $interpolate.startSymbol = function() {\n      return startSymbol;\n    };\n\n\n    /**\n     * @ngdoc method\n     * @name $interpolate#endSymbol\n     * @description\n     * Symbol to denote the end of expression in the interpolated string. Defaults to `}}`.\n     *\n     * Use {@link ng.$interpolateProvider#endSymbol `$interpolateProvider.endSymbol`} to change\n     * the symbol.\n     *\n     * @returns {string} end symbol.\n     */\n    $interpolate.endSymbol = function() {\n      return endSymbol;\n    };\n\n    return $interpolate;\n  }];\n}\n\nfunction $IntervalProvider() {\n  this.$get = ['$rootScope', '$window', '$q', '$$q', '$browser',\n       function($rootScope,   $window,   $q,   $$q,   $browser) {\n    var intervals = {};\n\n\n     /**\n      * @ngdoc service\n      * @name $interval\n      *\n      * @description\n      * Angular's wrapper for `window.setInterval`. The `fn` function is executed every `delay`\n      * milliseconds.\n      *\n      * The return value of registering an interval function is a promise. This promise will be\n      * notified upon each tick of the interval, and will be resolved after `count` iterations, or\n      * run indefinitely if `count` is not defined. The value of the notification will be the\n      * number of iterations that have run.\n      * To cancel an interval, call `$interval.cancel(promise)`.\n      *\n      * In tests you can use {@link ngMock.$interval#flush `$interval.flush(millis)`} to\n      * move forward by `millis` milliseconds and trigger any functions scheduled to run in that\n      * time.\n      *\n      * <div class=\"alert alert-warning\">\n      * **Note**: Intervals created by this service must be explicitly destroyed when you are finished\n      * with them.  In particular they are not automatically destroyed when a controller's scope or a\n      * directive's element are destroyed.\n      * You should take this into consideration and make sure to always cancel the interval at the\n      * appropriate moment.  See the example below for more details on how and when to do this.\n      * </div>\n      *\n      * @param {function()} fn A function that should be called repeatedly.\n      * @param {number} delay Number of milliseconds between each function call.\n      * @param {number=} [count=0] Number of times to repeat. If not set, or 0, will repeat\n      *   indefinitely.\n      * @param {boolean=} [invokeApply=true] If set to `false` skips model dirty checking, otherwise\n      *   will invoke `fn` within the {@link ng.$rootScope.Scope#$apply $apply} block.\n      * @param {...*=} Pass additional parameters to the executed function.\n      * @returns {promise} A promise which will be notified on each iteration.\n      *\n      * @example\n      * <example module=\"intervalExample\">\n      * <file name=\"index.html\">\n      *   <script>\n      *     angular.module('intervalExample', [])\n      *       .controller('ExampleController', ['$scope', '$interval',\n      *         function($scope, $interval) {\n      *           $scope.format = 'M/d/yy h:mm:ss a';\n      *           $scope.blood_1 = 100;\n      *           $scope.blood_2 = 120;\n      *\n      *           var stop;\n      *           $scope.fight = function() {\n      *             // Don't start a new fight if we are already fighting\n      *             if ( angular.isDefined(stop) ) return;\n      *\n      *             stop = $interval(function() {\n      *               if ($scope.blood_1 > 0 && $scope.blood_2 > 0) {\n      *                 $scope.blood_1 = $scope.blood_1 - 3;\n      *                 $scope.blood_2 = $scope.blood_2 - 4;\n      *               } else {\n      *                 $scope.stopFight();\n      *               }\n      *             }, 100);\n      *           };\n      *\n      *           $scope.stopFight = function() {\n      *             if (angular.isDefined(stop)) {\n      *               $interval.cancel(stop);\n      *               stop = undefined;\n      *             }\n      *           };\n      *\n      *           $scope.resetFight = function() {\n      *             $scope.blood_1 = 100;\n      *             $scope.blood_2 = 120;\n      *           };\n      *\n      *           $scope.$on('$destroy', function() {\n      *             // Make sure that the interval is destroyed too\n      *             $scope.stopFight();\n      *           });\n      *         }])\n      *       // Register the 'myCurrentTime' directive factory method.\n      *       // We inject $interval and dateFilter service since the factory method is DI.\n      *       .directive('myCurrentTime', ['$interval', 'dateFilter',\n      *         function($interval, dateFilter) {\n      *           // return the directive link function. (compile function not needed)\n      *           return function(scope, element, attrs) {\n      *             var format,  // date format\n      *                 stopTime; // so that we can cancel the time updates\n      *\n      *             // used to update the UI\n      *             function updateTime() {\n      *               element.text(dateFilter(new Date(), format));\n      *             }\n      *\n      *             // watch the expression, and update the UI on change.\n      *             scope.$watch(attrs.myCurrentTime, function(value) {\n      *               format = value;\n      *               updateTime();\n      *             });\n      *\n      *             stopTime = $interval(updateTime, 1000);\n      *\n      *             // listen on DOM destroy (removal) event, and cancel the next UI update\n      *             // to prevent updating time after the DOM element was removed.\n      *             element.on('$destroy', function() {\n      *               $interval.cancel(stopTime);\n      *             });\n      *           }\n      *         }]);\n      *   </script>\n      *\n      *   <div>\n      *     <div ng-controller=\"ExampleController\">\n      *       <label>Date format: <input ng-model=\"format\"></label> <hr/>\n      *       Current time is: <span my-current-time=\"format\"></span>\n      *       <hr/>\n      *       Blood 1 : <font color='red'>{{blood_1}}</font>\n      *       Blood 2 : <font color='red'>{{blood_2}}</font>\n      *       <button type=\"button\" data-ng-click=\"fight()\">Fight</button>\n      *       <button type=\"button\" data-ng-click=\"stopFight()\">StopFight</button>\n      *       <button type=\"button\" data-ng-click=\"resetFight()\">resetFight</button>\n      *     </div>\n      *   </div>\n      *\n      * </file>\n      * </example>\n      */\n    function interval(fn, delay, count, invokeApply) {\n      var hasParams = arguments.length > 4,\n          args = hasParams ? sliceArgs(arguments, 4) : [],\n          setInterval = $window.setInterval,\n          clearInterval = $window.clearInterval,\n          iteration = 0,\n          skipApply = (isDefined(invokeApply) && !invokeApply),\n          deferred = (skipApply ? $$q : $q).defer(),\n          promise = deferred.promise;\n\n      count = isDefined(count) ? count : 0;\n\n      promise.$$intervalId = setInterval(function tick() {\n        if (skipApply) {\n          $browser.defer(callback);\n        } else {\n          $rootScope.$evalAsync(callback);\n        }\n        deferred.notify(iteration++);\n\n        if (count > 0 && iteration >= count) {\n          deferred.resolve(iteration);\n          clearInterval(promise.$$intervalId);\n          delete intervals[promise.$$intervalId];\n        }\n\n        if (!skipApply) $rootScope.$apply();\n\n      }, delay);\n\n      intervals[promise.$$intervalId] = deferred;\n\n      return promise;\n\n      function callback() {\n        if (!hasParams) {\n          fn(iteration);\n        } else {\n          fn.apply(null, args);\n        }\n      }\n    }\n\n\n     /**\n      * @ngdoc method\n      * @name $interval#cancel\n      *\n      * @description\n      * Cancels a task associated with the `promise`.\n      *\n      * @param {Promise=} promise returned by the `$interval` function.\n      * @returns {boolean} Returns `true` if the task was successfully canceled.\n      */\n    interval.cancel = function(promise) {\n      if (promise && promise.$$intervalId in intervals) {\n        intervals[promise.$$intervalId].reject('canceled');\n        $window.clearInterval(promise.$$intervalId);\n        delete intervals[promise.$$intervalId];\n        return true;\n      }\n      return false;\n    };\n\n    return interval;\n  }];\n}\n\n/**\n * @ngdoc service\n * @name $jsonpCallbacks\n * @requires $window\n * @description\n * This service handles the lifecycle of callbacks to handle JSONP requests.\n * Override this service if you wish to customise where the callbacks are stored and\n * how they vary compared to the requested url.\n */\nvar $jsonpCallbacksProvider = function() {\n  this.$get = ['$window', function($window) {\n    var callbacks = $window.angular.callbacks;\n    var callbackMap = {};\n\n    function createCallback(callbackId) {\n      var callback = function(data) {\n        callback.data = data;\n        callback.called = true;\n      };\n      callback.id = callbackId;\n      return callback;\n    }\n\n    return {\n      /**\n       * @ngdoc method\n       * @name $jsonpCallbacks#createCallback\n       * @param {string} url the url of the JSONP request\n       * @returns {string} the callback path to send to the server as part of the JSONP request\n       * @description\n       * {@link $httpBackend} calls this method to create a callback and get hold of the path to the callback\n       * to pass to the server, which will be used to call the callback with its payload in the JSONP response.\n       */\n      createCallback: function(url) {\n        var callbackId = '_' + (callbacks.$$counter++).toString(36);\n        var callbackPath = 'angular.callbacks.' + callbackId;\n        var callback = createCallback(callbackId);\n        callbackMap[callbackPath] = callbacks[callbackId] = callback;\n        return callbackPath;\n      },\n      /**\n       * @ngdoc method\n       * @name $jsonpCallbacks#wasCalled\n       * @param {string} callbackPath the path to the callback that was sent in the JSONP request\n       * @returns {boolean} whether the callback has been called, as a result of the JSONP response\n       * @description\n       * {@link $httpBackend} calls this method to find out whether the JSONP response actually called the\n       * callback that was passed in the request.\n       */\n      wasCalled: function(callbackPath) {\n        return callbackMap[callbackPath].called;\n      },\n      /**\n       * @ngdoc method\n       * @name $jsonpCallbacks#getResponse\n       * @param {string} callbackPath the path to the callback that was sent in the JSONP request\n       * @returns {*} the data received from the response via the registered callback\n       * @description\n       * {@link $httpBackend} calls this method to get hold of the data that was provided to the callback\n       * in the JSONP response.\n       */\n      getResponse: function(callbackPath) {\n        return callbackMap[callbackPath].data;\n      },\n      /**\n       * @ngdoc method\n       * @name $jsonpCallbacks#removeCallback\n       * @param {string} callbackPath the path to the callback that was sent in the JSONP request\n       * @description\n       * {@link $httpBackend} calls this method to remove the callback after the JSONP request has\n       * completed or timed-out.\n       */\n      removeCallback: function(callbackPath) {\n        var callback = callbackMap[callbackPath];\n        delete callbacks[callback.id];\n        delete callbackMap[callbackPath];\n      }\n    };\n  }];\n};\n\n/**\n * @ngdoc service\n * @name $locale\n *\n * @description\n * $locale service provides localization rules for various Angular components. As of right now the\n * only public api is:\n *\n * * `id` – `{string}` – locale id formatted as `languageId-countryId` (e.g. `en-us`)\n */\n\nvar PATH_MATCH = /^([^\\?#]*)(\\?([^#]*))?(#(.*))?$/,\n    DEFAULT_PORTS = {'http': 80, 'https': 443, 'ftp': 21};\nvar $locationMinErr = minErr('$location');\n\n\n/**\n * Encode path using encodeUriSegment, ignoring forward slashes\n *\n * @param {string} path Path to encode\n * @returns {string}\n */\nfunction encodePath(path) {\n  var segments = path.split('/'),\n      i = segments.length;\n\n  while (i--) {\n    segments[i] = encodeUriSegment(segments[i]);\n  }\n\n  return segments.join('/');\n}\n\nfunction parseAbsoluteUrl(absoluteUrl, locationObj) {\n  var parsedUrl = urlResolve(absoluteUrl);\n\n  locationObj.$$protocol = parsedUrl.protocol;\n  locationObj.$$host = parsedUrl.hostname;\n  locationObj.$$port = toInt(parsedUrl.port) || DEFAULT_PORTS[parsedUrl.protocol] || null;\n}\n\n\nfunction parseAppUrl(relativeUrl, locationObj) {\n  var prefixed = (relativeUrl.charAt(0) !== '/');\n  if (prefixed) {\n    relativeUrl = '/' + relativeUrl;\n  }\n  var match = urlResolve(relativeUrl);\n  locationObj.$$path = decodeURIComponent(prefixed && match.pathname.charAt(0) === '/' ?\n      match.pathname.substring(1) : match.pathname);\n  locationObj.$$search = parseKeyValue(match.search);\n  locationObj.$$hash = decodeURIComponent(match.hash);\n\n  // make sure path starts with '/';\n  if (locationObj.$$path && locationObj.$$path.charAt(0) != '/') {\n    locationObj.$$path = '/' + locationObj.$$path;\n  }\n}\n\nfunction startsWith(haystack, needle) {\n  return haystack.lastIndexOf(needle, 0) === 0;\n}\n\n/**\n *\n * @param {string} base\n * @param {string} url\n * @returns {string} returns text from `url` after `base` or `undefined` if it does not begin with\n *                   the expected string.\n */\nfunction stripBaseUrl(base, url) {\n  if (startsWith(url, base)) {\n    return url.substr(base.length);\n  }\n}\n\n\nfunction stripHash(url) {\n  var index = url.indexOf('#');\n  return index == -1 ? url : url.substr(0, index);\n}\n\nfunction trimEmptyHash(url) {\n  return url.replace(/(#.+)|#$/, '$1');\n}\n\n\nfunction stripFile(url) {\n  return url.substr(0, stripHash(url).lastIndexOf('/') + 1);\n}\n\n/* return the server only (scheme://host:port) */\nfunction serverBase(url) {\n  return url.substring(0, url.indexOf('/', url.indexOf('//') + 2));\n}\n\n\n/**\n * LocationHtml5Url represents an url\n * This object is exposed as $location service when HTML5 mode is enabled and supported\n *\n * @constructor\n * @param {string} appBase application base URL\n * @param {string} appBaseNoFile application base URL stripped of any filename\n * @param {string} basePrefix url path prefix\n */\nfunction LocationHtml5Url(appBase, appBaseNoFile, basePrefix) {\n  this.$$html5 = true;\n  basePrefix = basePrefix || '';\n  parseAbsoluteUrl(appBase, this);\n\n\n  /**\n   * Parse given html5 (regular) url string into properties\n   * @param {string} url HTML5 url\n   * @private\n   */\n  this.$$parse = function(url) {\n    var pathUrl = stripBaseUrl(appBaseNoFile, url);\n    if (!isString(pathUrl)) {\n      throw $locationMinErr('ipthprfx', 'Invalid url \"{0}\", missing path prefix \"{1}\".', url,\n          appBaseNoFile);\n    }\n\n    parseAppUrl(pathUrl, this);\n\n    if (!this.$$path) {\n      this.$$path = '/';\n    }\n\n    this.$$compose();\n  };\n\n  /**\n   * Compose url and update `absUrl` property\n   * @private\n   */\n  this.$$compose = function() {\n    var search = toKeyValue(this.$$search),\n        hash = this.$$hash ? '#' + encodeUriSegment(this.$$hash) : '';\n\n    this.$$url = encodePath(this.$$path) + (search ? '?' + search : '') + hash;\n    this.$$absUrl = appBaseNoFile + this.$$url.substr(1); // first char is always '/'\n  };\n\n  this.$$parseLinkUrl = function(url, relHref) {\n    if (relHref && relHref[0] === '#') {\n      // special case for links to hash fragments:\n      // keep the old url and only replace the hash fragment\n      this.hash(relHref.slice(1));\n      return true;\n    }\n    var appUrl, prevAppUrl;\n    var rewrittenUrl;\n\n    if (isDefined(appUrl = stripBaseUrl(appBase, url))) {\n      prevAppUrl = appUrl;\n      if (isDefined(appUrl = stripBaseUrl(basePrefix, appUrl))) {\n        rewrittenUrl = appBaseNoFile + (stripBaseUrl('/', appUrl) || appUrl);\n      } else {\n        rewrittenUrl = appBase + prevAppUrl;\n      }\n    } else if (isDefined(appUrl = stripBaseUrl(appBaseNoFile, url))) {\n      rewrittenUrl = appBaseNoFile + appUrl;\n    } else if (appBaseNoFile == url + '/') {\n      rewrittenUrl = appBaseNoFile;\n    }\n    if (rewrittenUrl) {\n      this.$$parse(rewrittenUrl);\n    }\n    return !!rewrittenUrl;\n  };\n}\n\n\n/**\n * LocationHashbangUrl represents url\n * This object is exposed as $location service when developer doesn't opt into html5 mode.\n * It also serves as the base class for html5 mode fallback on legacy browsers.\n *\n * @constructor\n * @param {string} appBase application base URL\n * @param {string} appBaseNoFile application base URL stripped of any filename\n * @param {string} hashPrefix hashbang prefix\n */\nfunction LocationHashbangUrl(appBase, appBaseNoFile, hashPrefix) {\n\n  parseAbsoluteUrl(appBase, this);\n\n\n  /**\n   * Parse given hashbang url into properties\n   * @param {string} url Hashbang url\n   * @private\n   */\n  this.$$parse = function(url) {\n    var withoutBaseUrl = stripBaseUrl(appBase, url) || stripBaseUrl(appBaseNoFile, url);\n    var withoutHashUrl;\n\n    if (!isUndefined(withoutBaseUrl) && withoutBaseUrl.charAt(0) === '#') {\n\n      // The rest of the url starts with a hash so we have\n      // got either a hashbang path or a plain hash fragment\n      withoutHashUrl = stripBaseUrl(hashPrefix, withoutBaseUrl);\n      if (isUndefined(withoutHashUrl)) {\n        // There was no hashbang prefix so we just have a hash fragment\n        withoutHashUrl = withoutBaseUrl;\n      }\n\n    } else {\n      // There was no hashbang path nor hash fragment:\n      // If we are in HTML5 mode we use what is left as the path;\n      // Otherwise we ignore what is left\n      if (this.$$html5) {\n        withoutHashUrl = withoutBaseUrl;\n      } else {\n        withoutHashUrl = '';\n        if (isUndefined(withoutBaseUrl)) {\n          appBase = url;\n          this.replace();\n        }\n      }\n    }\n\n    parseAppUrl(withoutHashUrl, this);\n\n    this.$$path = removeWindowsDriveName(this.$$path, withoutHashUrl, appBase);\n\n    this.$$compose();\n\n    /*\n     * In Windows, on an anchor node on documents loaded from\n     * the filesystem, the browser will return a pathname\n     * prefixed with the drive name ('/C:/path') when a\n     * pathname without a drive is set:\n     *  * a.setAttribute('href', '/foo')\n     *   * a.pathname === '/C:/foo' //true\n     *\n     * Inside of Angular, we're always using pathnames that\n     * do not include drive names for routing.\n     */\n    function removeWindowsDriveName(path, url, base) {\n      /*\n      Matches paths for file protocol on windows,\n      such as /C:/foo/bar, and captures only /foo/bar.\n      */\n      var windowsFilePathExp = /^\\/[A-Z]:(\\/.*)/;\n\n      var firstPathSegmentMatch;\n\n      //Get the relative path from the input URL.\n      if (startsWith(url, base)) {\n        url = url.replace(base, '');\n      }\n\n      // The input URL intentionally contains a first path segment that ends with a colon.\n      if (windowsFilePathExp.exec(url)) {\n        return path;\n      }\n\n      firstPathSegmentMatch = windowsFilePathExp.exec(path);\n      return firstPathSegmentMatch ? firstPathSegmentMatch[1] : path;\n    }\n  };\n\n  /**\n   * Compose hashbang url and update `absUrl` property\n   * @private\n   */\n  this.$$compose = function() {\n    var search = toKeyValue(this.$$search),\n        hash = this.$$hash ? '#' + encodeUriSegment(this.$$hash) : '';\n\n    this.$$url = encodePath(this.$$path) + (search ? '?' + search : '') + hash;\n    this.$$absUrl = appBase + (this.$$url ? hashPrefix + this.$$url : '');\n  };\n\n  this.$$parseLinkUrl = function(url, relHref) {\n    if (stripHash(appBase) == stripHash(url)) {\n      this.$$parse(url);\n      return true;\n    }\n    return false;\n  };\n}\n\n\n/**\n * LocationHashbangUrl represents url\n * This object is exposed as $location service when html5 history api is enabled but the browser\n * does not support it.\n *\n * @constructor\n * @param {string} appBase application base URL\n * @param {string} appBaseNoFile application base URL stripped of any filename\n * @param {string} hashPrefix hashbang prefix\n */\nfunction LocationHashbangInHtml5Url(appBase, appBaseNoFile, hashPrefix) {\n  this.$$html5 = true;\n  LocationHashbangUrl.apply(this, arguments);\n\n  this.$$parseLinkUrl = function(url, relHref) {\n    if (relHref && relHref[0] === '#') {\n      // special case for links to hash fragments:\n      // keep the old url and only replace the hash fragment\n      this.hash(relHref.slice(1));\n      return true;\n    }\n\n    var rewrittenUrl;\n    var appUrl;\n\n    if (appBase == stripHash(url)) {\n      rewrittenUrl = url;\n    } else if ((appUrl = stripBaseUrl(appBaseNoFile, url))) {\n      rewrittenUrl = appBase + hashPrefix + appUrl;\n    } else if (appBaseNoFile === url + '/') {\n      rewrittenUrl = appBaseNoFile;\n    }\n    if (rewrittenUrl) {\n      this.$$parse(rewrittenUrl);\n    }\n    return !!rewrittenUrl;\n  };\n\n  this.$$compose = function() {\n    var search = toKeyValue(this.$$search),\n        hash = this.$$hash ? '#' + encodeUriSegment(this.$$hash) : '';\n\n    this.$$url = encodePath(this.$$path) + (search ? '?' + search : '') + hash;\n    // include hashPrefix in $$absUrl when $$url is empty so IE9 does not reload page because of removal of '#'\n    this.$$absUrl = appBase + hashPrefix + this.$$url;\n  };\n\n}\n\n\nvar locationPrototype = {\n\n  /**\n   * Ensure absolute url is initialized.\n   * @private\n   */\n  $$absUrl:'',\n\n  /**\n   * Are we in html5 mode?\n   * @private\n   */\n  $$html5: false,\n\n  /**\n   * Has any change been replacing?\n   * @private\n   */\n  $$replace: false,\n\n  /**\n   * @ngdoc method\n   * @name $location#absUrl\n   *\n   * @description\n   * This method is getter only.\n   *\n   * Return full url representation with all segments encoded according to rules specified in\n   * [RFC 3986](http://www.ietf.org/rfc/rfc3986.txt).\n   *\n   *\n   * ```js\n   * // given url http://example.com/#/some/path?foo=bar&baz=xoxo\n   * var absUrl = $location.absUrl();\n   * // => \"http://example.com/#/some/path?foo=bar&baz=xoxo\"\n   * ```\n   *\n   * @return {string} full url\n   */\n  absUrl: locationGetter('$$absUrl'),\n\n  /**\n   * @ngdoc method\n   * @name $location#url\n   *\n   * @description\n   * This method is getter / setter.\n   *\n   * Return url (e.g. `/path?a=b#hash`) when called without any parameter.\n   *\n   * Change path, search and hash, when called with parameter and return `$location`.\n   *\n   *\n   * ```js\n   * // given url http://example.com/#/some/path?foo=bar&baz=xoxo\n   * var url = $location.url();\n   * // => \"/some/path?foo=bar&baz=xoxo\"\n   * ```\n   *\n   * @param {string=} url New url without base prefix (e.g. `/path?a=b#hash`)\n   * @return {string} url\n   */\n  url: function(url) {\n    if (isUndefined(url)) {\n      return this.$$url;\n    }\n\n    var match = PATH_MATCH.exec(url);\n    if (match[1] || url === '') this.path(decodeURIComponent(match[1]));\n    if (match[2] || match[1] || url === '') this.search(match[3] || '');\n    this.hash(match[5] || '');\n\n    return this;\n  },\n\n  /**\n   * @ngdoc method\n   * @name $location#protocol\n   *\n   * @description\n   * This method is getter only.\n   *\n   * Return protocol of current url.\n   *\n   *\n   * ```js\n   * // given url http://example.com/#/some/path?foo=bar&baz=xoxo\n   * var protocol = $location.protocol();\n   * // => \"http\"\n   * ```\n   *\n   * @return {string} protocol of current url\n   */\n  protocol: locationGetter('$$protocol'),\n\n  /**\n   * @ngdoc method\n   * @name $location#host\n   *\n   * @description\n   * This method is getter only.\n   *\n   * Return host of current url.\n   *\n   * Note: compared to the non-angular version `location.host` which returns `hostname:port`, this returns the `hostname` portion only.\n   *\n   *\n   * ```js\n   * // given url http://example.com/#/some/path?foo=bar&baz=xoxo\n   * var host = $location.host();\n   * // => \"example.com\"\n   *\n   * // given url http://user:password@example.com:8080/#/some/path?foo=bar&baz=xoxo\n   * host = $location.host();\n   * // => \"example.com\"\n   * host = location.host;\n   * // => \"example.com:8080\"\n   * ```\n   *\n   * @return {string} host of current url.\n   */\n  host: locationGetter('$$host'),\n\n  /**\n   * @ngdoc method\n   * @name $location#port\n   *\n   * @description\n   * This method is getter only.\n   *\n   * Return port of current url.\n   *\n   *\n   * ```js\n   * // given url http://example.com/#/some/path?foo=bar&baz=xoxo\n   * var port = $location.port();\n   * // => 80\n   * ```\n   *\n   * @return {Number} port\n   */\n  port: locationGetter('$$port'),\n\n  /**\n   * @ngdoc method\n   * @name $location#path\n   *\n   * @description\n   * This method is getter / setter.\n   *\n   * Return path of current url when called without any parameter.\n   *\n   * Change path when called with parameter and return `$location`.\n   *\n   * Note: Path should always begin with forward slash (/), this method will add the forward slash\n   * if it is missing.\n   *\n   *\n   * ```js\n   * // given url http://example.com/#/some/path?foo=bar&baz=xoxo\n   * var path = $location.path();\n   * // => \"/some/path\"\n   * ```\n   *\n   * @param {(string|number)=} path New path\n   * @return {(string|object)} path if called with no parameters, or `$location` if called with a parameter\n   */\n  path: locationGetterSetter('$$path', function(path) {\n    path = path !== null ? path.toString() : '';\n    return path.charAt(0) == '/' ? path : '/' + path;\n  }),\n\n  /**\n   * @ngdoc method\n   * @name $location#search\n   *\n   * @description\n   * This method is getter / setter.\n   *\n   * Return search part (as object) of current url when called without any parameter.\n   *\n   * Change search part when called with parameter and return `$location`.\n   *\n   *\n   * ```js\n   * // given url http://example.com/#/some/path?foo=bar&baz=xoxo\n   * var searchObject = $location.search();\n   * // => {foo: 'bar', baz: 'xoxo'}\n   *\n   * // set foo to 'yipee'\n   * $location.search('foo', 'yipee');\n   * // $location.search() => {foo: 'yipee', baz: 'xoxo'}\n   * ```\n   *\n   * @param {string|Object.<string>|Object.<Array.<string>>} search New search params - string or\n   * hash object.\n   *\n   * When called with a single argument the method acts as a setter, setting the `search` component\n   * of `$location` to the specified value.\n   *\n   * If the argument is a hash object containing an array of values, these values will be encoded\n   * as duplicate search parameters in the url.\n   *\n   * @param {(string|Number|Array<string>|boolean)=} paramValue If `search` is a string or number, then `paramValue`\n   * will override only a single search property.\n   *\n   * If `paramValue` is an array, it will override the property of the `search` component of\n   * `$location` specified via the first argument.\n   *\n   * If `paramValue` is `null`, the property specified via the first argument will be deleted.\n   *\n   * If `paramValue` is `true`, the property specified via the first argument will be added with no\n   * value nor trailing equal sign.\n   *\n   * @return {Object} If called with no arguments returns the parsed `search` object. If called with\n   * one or more arguments returns `$location` object itself.\n   */\n  search: function(search, paramValue) {\n    switch (arguments.length) {\n      case 0:\n        return this.$$search;\n      case 1:\n        if (isString(search) || isNumber(search)) {\n          search = search.toString();\n          this.$$search = parseKeyValue(search);\n        } else if (isObject(search)) {\n          search = copy(search, {});\n          // remove object undefined or null properties\n          forEach(search, function(value, key) {\n            if (value == null) delete search[key];\n          });\n\n          this.$$search = search;\n        } else {\n          throw $locationMinErr('isrcharg',\n              'The first argument of the `$location#search()` call must be a string or an object.');\n        }\n        break;\n      default:\n        if (isUndefined(paramValue) || paramValue === null) {\n          delete this.$$search[search];\n        } else {\n          this.$$search[search] = paramValue;\n        }\n    }\n\n    this.$$compose();\n    return this;\n  },\n\n  /**\n   * @ngdoc method\n   * @name $location#hash\n   *\n   * @description\n   * This method is getter / setter.\n   *\n   * Returns the hash fragment when called without any parameters.\n   *\n   * Changes the hash fragment when called with a parameter and returns `$location`.\n   *\n   *\n   * ```js\n   * // given url http://example.com/#/some/path?foo=bar&baz=xoxo#hashValue\n   * var hash = $location.hash();\n   * // => \"hashValue\"\n   * ```\n   *\n   * @param {(string|number)=} hash New hash fragment\n   * @return {string} hash\n   */\n  hash: locationGetterSetter('$$hash', function(hash) {\n    return hash !== null ? hash.toString() : '';\n  }),\n\n  /**\n   * @ngdoc method\n   * @name $location#replace\n   *\n   * @description\n   * If called, all changes to $location during the current `$digest` will replace the current history\n   * record, instead of adding a new one.\n   */\n  replace: function() {\n    this.$$replace = true;\n    return this;\n  }\n};\n\nforEach([LocationHashbangInHtml5Url, LocationHashbangUrl, LocationHtml5Url], function(Location) {\n  Location.prototype = Object.create(locationPrototype);\n\n  /**\n   * @ngdoc method\n   * @name $location#state\n   *\n   * @description\n   * This method is getter / setter.\n   *\n   * Return the history state object when called without any parameter.\n   *\n   * Change the history state object when called with one parameter and return `$location`.\n   * The state object is later passed to `pushState` or `replaceState`.\n   *\n   * NOTE: This method is supported only in HTML5 mode and only in browsers supporting\n   * the HTML5 History API (i.e. methods `pushState` and `replaceState`). If you need to support\n   * older browsers (like IE9 or Android < 4.0), don't use this method.\n   *\n   * @param {object=} state State object for pushState or replaceState\n   * @return {object} state\n   */\n  Location.prototype.state = function(state) {\n    if (!arguments.length) {\n      return this.$$state;\n    }\n\n    if (Location !== LocationHtml5Url || !this.$$html5) {\n      throw $locationMinErr('nostate', 'History API state support is available only ' +\n        'in HTML5 mode and only in browsers supporting HTML5 History API');\n    }\n    // The user might modify `stateObject` after invoking `$location.state(stateObject)`\n    // but we're changing the $$state reference to $browser.state() during the $digest\n    // so the modification window is narrow.\n    this.$$state = isUndefined(state) ? null : state;\n\n    return this;\n  };\n});\n\n\nfunction locationGetter(property) {\n  return function() {\n    return this[property];\n  };\n}\n\n\nfunction locationGetterSetter(property, preprocess) {\n  return function(value) {\n    if (isUndefined(value)) {\n      return this[property];\n    }\n\n    this[property] = preprocess(value);\n    this.$$compose();\n\n    return this;\n  };\n}\n\n\n/**\n * @ngdoc service\n * @name $location\n *\n * @requires $rootElement\n *\n * @description\n * The $location service parses the URL in the browser address bar (based on the\n * [window.location](https://developer.mozilla.org/en/window.location)) and makes the URL\n * available to your application. Changes to the URL in the address bar are reflected into\n * $location service and changes to $location are reflected into the browser address bar.\n *\n * **The $location service:**\n *\n * - Exposes the current URL in the browser address bar, so you can\n *   - Watch and observe the URL.\n *   - Change the URL.\n * - Synchronizes the URL with the browser when the user\n *   - Changes the address bar.\n *   - Clicks the back or forward button (or clicks a History link).\n *   - Clicks on a link.\n * - Represents the URL object as a set of methods (protocol, host, port, path, search, hash).\n *\n * For more information see {@link guide/$location Developer Guide: Using $location}\n */\n\n/**\n * @ngdoc provider\n * @name $locationProvider\n * @description\n * Use the `$locationProvider` to configure how the application deep linking paths are stored.\n */\nfunction $LocationProvider() {\n  var hashPrefix = '',\n      html5Mode = {\n        enabled: false,\n        requireBase: true,\n        rewriteLinks: true\n      };\n\n  /**\n   * @ngdoc method\n   * @name $locationProvider#hashPrefix\n   * @description\n   * @param {string=} prefix Prefix for hash part (containing path and search)\n   * @returns {*} current value if used as getter or itself (chaining) if used as setter\n   */\n  this.hashPrefix = function(prefix) {\n    if (isDefined(prefix)) {\n      hashPrefix = prefix;\n      return this;\n    } else {\n      return hashPrefix;\n    }\n  };\n\n  /**\n   * @ngdoc method\n   * @name $locationProvider#html5Mode\n   * @description\n   * @param {(boolean|Object)=} mode If boolean, sets `html5Mode.enabled` to value.\n   *   If object, sets `enabled`, `requireBase` and `rewriteLinks` to respective values. Supported\n   *   properties:\n   *   - **enabled** – `{boolean}` – (default: false) If true, will rely on `history.pushState` to\n   *     change urls where supported. Will fall back to hash-prefixed paths in browsers that do not\n   *     support `pushState`.\n   *   - **requireBase** - `{boolean}` - (default: `true`) When html5Mode is enabled, specifies\n   *     whether or not a <base> tag is required to be present. If `enabled` and `requireBase` are\n   *     true, and a base tag is not present, an error will be thrown when `$location` is injected.\n   *     See the {@link guide/$location $location guide for more information}\n   *   - **rewriteLinks** - `{boolean}` - (default: `true`) When html5Mode is enabled,\n   *     enables/disables url rewriting for relative links.\n   *\n   * @returns {Object} html5Mode object if used as getter or itself (chaining) if used as setter\n   */\n  this.html5Mode = function(mode) {\n    if (isBoolean(mode)) {\n      html5Mode.enabled = mode;\n      return this;\n    } else if (isObject(mode)) {\n\n      if (isBoolean(mode.enabled)) {\n        html5Mode.enabled = mode.enabled;\n      }\n\n      if (isBoolean(mode.requireBase)) {\n        html5Mode.requireBase = mode.requireBase;\n      }\n\n      if (isBoolean(mode.rewriteLinks)) {\n        html5Mode.rewriteLinks = mode.rewriteLinks;\n      }\n\n      return this;\n    } else {\n      return html5Mode;\n    }\n  };\n\n  /**\n   * @ngdoc event\n   * @name $location#$locationChangeStart\n   * @eventType broadcast on root scope\n   * @description\n   * Broadcasted before a URL will change.\n   *\n   * This change can be prevented by calling\n   * `preventDefault` method of the event. See {@link ng.$rootScope.Scope#$on} for more\n   * details about event object. Upon successful change\n   * {@link ng.$location#$locationChangeSuccess $locationChangeSuccess} is fired.\n   *\n   * The `newState` and `oldState` parameters may be defined only in HTML5 mode and when\n   * the browser supports the HTML5 History API.\n   *\n   * @param {Object} angularEvent Synthetic event object.\n   * @param {string} newUrl New URL\n   * @param {string=} oldUrl URL that was before it was changed.\n   * @param {string=} newState New history state object\n   * @param {string=} oldState History state object that was before it was changed.\n   */\n\n  /**\n   * @ngdoc event\n   * @name $location#$locationChangeSuccess\n   * @eventType broadcast on root scope\n   * @description\n   * Broadcasted after a URL was changed.\n   *\n   * The `newState` and `oldState` parameters may be defined only in HTML5 mode and when\n   * the browser supports the HTML5 History API.\n   *\n   * @param {Object} angularEvent Synthetic event object.\n   * @param {string} newUrl New URL\n   * @param {string=} oldUrl URL that was before it was changed.\n   * @param {string=} newState New history state object\n   * @param {string=} oldState History state object that was before it was changed.\n   */\n\n  this.$get = ['$rootScope', '$browser', '$sniffer', '$rootElement', '$window',\n      function($rootScope, $browser, $sniffer, $rootElement, $window) {\n    var $location,\n        LocationMode,\n        baseHref = $browser.baseHref(), // if base[href] is undefined, it defaults to ''\n        initialUrl = $browser.url(),\n        appBase;\n\n    if (html5Mode.enabled) {\n      if (!baseHref && html5Mode.requireBase) {\n        throw $locationMinErr('nobase',\n          \"$location in HTML5 mode requires a <base> tag to be present!\");\n      }\n      appBase = serverBase(initialUrl) + (baseHref || '/');\n      LocationMode = $sniffer.history ? LocationHtml5Url : LocationHashbangInHtml5Url;\n    } else {\n      appBase = stripHash(initialUrl);\n      LocationMode = LocationHashbangUrl;\n    }\n    var appBaseNoFile = stripFile(appBase);\n\n    $location = new LocationMode(appBase, appBaseNoFile, '#' + hashPrefix);\n    $location.$$parseLinkUrl(initialUrl, initialUrl);\n\n    $location.$$state = $browser.state();\n\n    var IGNORE_URI_REGEXP = /^\\s*(javascript|mailto):/i;\n\n    function setBrowserUrlWithFallback(url, replace, state) {\n      var oldUrl = $location.url();\n      var oldState = $location.$$state;\n      try {\n        $browser.url(url, replace, state);\n\n        // Make sure $location.state() returns referentially identical (not just deeply equal)\n        // state object; this makes possible quick checking if the state changed in the digest\n        // loop. Checking deep equality would be too expensive.\n        $location.$$state = $browser.state();\n      } catch (e) {\n        // Restore old values if pushState fails\n        $location.url(oldUrl);\n        $location.$$state = oldState;\n\n        throw e;\n      }\n    }\n\n    $rootElement.on('click', function(event) {\n      // TODO(vojta): rewrite link when opening in new tab/window (in legacy browser)\n      // currently we open nice url link and redirect then\n\n      if (!html5Mode.rewriteLinks || event.ctrlKey || event.metaKey || event.shiftKey || event.which == 2 || event.button == 2) return;\n\n      var elm = jqLite(event.target);\n\n      // traverse the DOM up to find first A tag\n      while (nodeName_(elm[0]) !== 'a') {\n        // ignore rewriting if no A tag (reached root element, or no parent - removed from document)\n        if (elm[0] === $rootElement[0] || !(elm = elm.parent())[0]) return;\n      }\n\n      var absHref = elm.prop('href');\n      // get the actual href attribute - see\n      // http://msdn.microsoft.com/en-us/library/ie/dd347148(v=vs.85).aspx\n      var relHref = elm.attr('href') || elm.attr('xlink:href');\n\n      if (isObject(absHref) && absHref.toString() === '[object SVGAnimatedString]') {\n        // SVGAnimatedString.animVal should be identical to SVGAnimatedString.baseVal, unless during\n        // an animation.\n        absHref = urlResolve(absHref.animVal).href;\n      }\n\n      // Ignore when url is started with javascript: or mailto:\n      if (IGNORE_URI_REGEXP.test(absHref)) return;\n\n      if (absHref && !elm.attr('target') && !event.isDefaultPrevented()) {\n        if ($location.$$parseLinkUrl(absHref, relHref)) {\n          // We do a preventDefault for all urls that are part of the angular application,\n          // in html5mode and also without, so that we are able to abort navigation without\n          // getting double entries in the location history.\n          event.preventDefault();\n          // update location manually\n          if ($location.absUrl() != $browser.url()) {\n            $rootScope.$apply();\n            // hack to work around FF6 bug 684208 when scenario runner clicks on links\n            $window.angular['ff-684208-preventDefault'] = true;\n          }\n        }\n      }\n    });\n\n\n    // rewrite hashbang url <> html5 url\n    if (trimEmptyHash($location.absUrl()) != trimEmptyHash(initialUrl)) {\n      $browser.url($location.absUrl(), true);\n    }\n\n    var initializing = true;\n\n    // update $location when $browser url changes\n    $browser.onUrlChange(function(newUrl, newState) {\n\n      if (isUndefined(stripBaseUrl(appBaseNoFile, newUrl))) {\n        // If we are navigating outside of the app then force a reload\n        $window.location.href = newUrl;\n        return;\n      }\n\n      $rootScope.$evalAsync(function() {\n        var oldUrl = $location.absUrl();\n        var oldState = $location.$$state;\n        var defaultPrevented;\n        newUrl = trimEmptyHash(newUrl);\n        $location.$$parse(newUrl);\n        $location.$$state = newState;\n\n        defaultPrevented = $rootScope.$broadcast('$locationChangeStart', newUrl, oldUrl,\n            newState, oldState).defaultPrevented;\n\n        // if the location was changed by a `$locationChangeStart` handler then stop\n        // processing this location change\n        if ($location.absUrl() !== newUrl) return;\n\n        if (defaultPrevented) {\n          $location.$$parse(oldUrl);\n          $location.$$state = oldState;\n          setBrowserUrlWithFallback(oldUrl, false, oldState);\n        } else {\n          initializing = false;\n          afterLocationChange(oldUrl, oldState);\n        }\n      });\n      if (!$rootScope.$$phase) $rootScope.$digest();\n    });\n\n    // update browser\n    $rootScope.$watch(function $locationWatch() {\n      var oldUrl = trimEmptyHash($browser.url());\n      var newUrl = trimEmptyHash($location.absUrl());\n      var oldState = $browser.state();\n      var currentReplace = $location.$$replace;\n      var urlOrStateChanged = oldUrl !== newUrl ||\n        ($location.$$html5 && $sniffer.history && oldState !== $location.$$state);\n\n      if (initializing || urlOrStateChanged) {\n        initializing = false;\n\n        $rootScope.$evalAsync(function() {\n          var newUrl = $location.absUrl();\n          var defaultPrevented = $rootScope.$broadcast('$locationChangeStart', newUrl, oldUrl,\n              $location.$$state, oldState).defaultPrevented;\n\n          // if the location was changed by a `$locationChangeStart` handler then stop\n          // processing this location change\n          if ($location.absUrl() !== newUrl) return;\n\n          if (defaultPrevented) {\n            $location.$$parse(oldUrl);\n            $location.$$state = oldState;\n          } else {\n            if (urlOrStateChanged) {\n              setBrowserUrlWithFallback(newUrl, currentReplace,\n                                        oldState === $location.$$state ? null : $location.$$state);\n            }\n            afterLocationChange(oldUrl, oldState);\n          }\n        });\n      }\n\n      $location.$$replace = false;\n\n      // we don't need to return anything because $evalAsync will make the digest loop dirty when\n      // there is a change\n    });\n\n    return $location;\n\n    function afterLocationChange(oldUrl, oldState) {\n      $rootScope.$broadcast('$locationChangeSuccess', $location.absUrl(), oldUrl,\n        $location.$$state, oldState);\n    }\n}];\n}\n\n/**\n * @ngdoc service\n * @name $log\n * @requires $window\n *\n * @description\n * Simple service for logging. Default implementation safely writes the message\n * into the browser's console (if present).\n *\n * The main purpose of this service is to simplify debugging and troubleshooting.\n *\n * The default is to log `debug` messages. You can use\n * {@link ng.$logProvider ng.$logProvider#debugEnabled} to change this.\n *\n * @example\n   <example module=\"logExample\">\n     <file name=\"script.js\">\n       angular.module('logExample', [])\n         .controller('LogController', ['$scope', '$log', function($scope, $log) {\n           $scope.$log = $log;\n           $scope.message = 'Hello World!';\n         }]);\n     </file>\n     <file name=\"index.html\">\n       <div ng-controller=\"LogController\">\n         <p>Reload this page with open console, enter text and hit the log button...</p>\n         <label>Message:\n         <input type=\"text\" ng-model=\"message\" /></label>\n         <button ng-click=\"$log.log(message)\">log</button>\n         <button ng-click=\"$log.warn(message)\">warn</button>\n         <button ng-click=\"$log.info(message)\">info</button>\n         <button ng-click=\"$log.error(message)\">error</button>\n         <button ng-click=\"$log.debug(message)\">debug</button>\n       </div>\n     </file>\n   </example>\n */\n\n/**\n * @ngdoc provider\n * @name $logProvider\n * @description\n * Use the `$logProvider` to configure how the application logs messages\n */\nfunction $LogProvider() {\n  var debug = true,\n      self = this;\n\n  /**\n   * @ngdoc method\n   * @name $logProvider#debugEnabled\n   * @description\n   * @param {boolean=} flag enable or disable debug level messages\n   * @returns {*} current value if used as getter or itself (chaining) if used as setter\n   */\n  this.debugEnabled = function(flag) {\n    if (isDefined(flag)) {\n      debug = flag;\n    return this;\n    } else {\n      return debug;\n    }\n  };\n\n  this.$get = ['$window', function($window) {\n    return {\n      /**\n       * @ngdoc method\n       * @name $log#log\n       *\n       * @description\n       * Write a log message\n       */\n      log: consoleLog('log'),\n\n      /**\n       * @ngdoc method\n       * @name $log#info\n       *\n       * @description\n       * Write an information message\n       */\n      info: consoleLog('info'),\n\n      /**\n       * @ngdoc method\n       * @name $log#warn\n       *\n       * @description\n       * Write a warning message\n       */\n      warn: consoleLog('warn'),\n\n      /**\n       * @ngdoc method\n       * @name $log#error\n       *\n       * @description\n       * Write an error message\n       */\n      error: consoleLog('error'),\n\n      /**\n       * @ngdoc method\n       * @name $log#debug\n       *\n       * @description\n       * Write a debug message\n       */\n      debug: (function() {\n        var fn = consoleLog('debug');\n\n        return function() {\n          if (debug) {\n            fn.apply(self, arguments);\n          }\n        };\n      }())\n    };\n\n    function formatError(arg) {\n      if (arg instanceof Error) {\n        if (arg.stack) {\n          arg = (arg.message && arg.stack.indexOf(arg.message) === -1)\n              ? 'Error: ' + arg.message + '\\n' + arg.stack\n              : arg.stack;\n        } else if (arg.sourceURL) {\n          arg = arg.message + '\\n' + arg.sourceURL + ':' + arg.line;\n        }\n      }\n      return arg;\n    }\n\n    function consoleLog(type) {\n      var console = $window.console || {},\n          logFn = console[type] || console.log || noop,\n          hasApply = false;\n\n      // Note: reading logFn.apply throws an error in IE11 in IE8 document mode.\n      // The reason behind this is that console.log has type \"object\" in IE8...\n      try {\n        hasApply = !!logFn.apply;\n      } catch (e) {}\n\n      if (hasApply) {\n        return function() {\n          var args = [];\n          forEach(arguments, function(arg) {\n            args.push(formatError(arg));\n          });\n          return logFn.apply(console, args);\n        };\n      }\n\n      // we are IE which either doesn't have window.console => this is noop and we do nothing,\n      // or we are IE where console.log doesn't have apply so we log at least first 2 args\n      return function(arg1, arg2) {\n        logFn(arg1, arg2 == null ? '' : arg2);\n      };\n    }\n  }];\n}\n\n/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n *     Any commits to this file should be reviewed with security in mind.  *\n *   Changes to this file can potentially create security vulnerabilities. *\n *          An approval from 2 Core members with history of modifying      *\n *                         this file is required.                          *\n *                                                                         *\n *  Does the change somehow allow for arbitrary javascript to be executed? *\n *    Or allows for someone to change the prototype of built-in objects?   *\n *     Or gives undesired access to variables likes document or window?    *\n * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */\n\nvar $parseMinErr = minErr('$parse');\n\n// Sandboxing Angular Expressions\n// ------------------------------\n// Angular expressions are generally considered safe because these expressions only have direct\n// access to `$scope` and locals. However, one can obtain the ability to execute arbitrary JS code by\n// obtaining a reference to native JS functions such as the Function constructor.\n//\n// As an example, consider the following Angular expression:\n//\n//   {}.toString.constructor('alert(\"evil JS code\")')\n//\n// This sandboxing technique is not perfect and doesn't aim to be. The goal is to prevent exploits\n// against the expression language, but not to prevent exploits that were enabled by exposing\n// sensitive JavaScript or browser APIs on Scope. Exposing such objects on a Scope is never a good\n// practice and therefore we are not even trying to protect against interaction with an object\n// explicitly exposed in this way.\n//\n// In general, it is not possible to access a Window object from an angular expression unless a\n// window or some DOM object that has a reference to window is published onto a Scope.\n// Similarly we prevent invocations of function known to be dangerous, as well as assignments to\n// native objects.\n//\n// See https://docs.angularjs.org/guide/security\n\n\nfunction ensureSafeMemberName(name, fullExpression) {\n  if (name === \"__defineGetter__\" || name === \"__defineSetter__\"\n      || name === \"__lookupGetter__\" || name === \"__lookupSetter__\"\n      || name === \"__proto__\") {\n    throw $parseMinErr('isecfld',\n        'Attempting to access a disallowed field in Angular expressions! '\n        + 'Expression: {0}', fullExpression);\n  }\n  return name;\n}\n\nfunction getStringValue(name) {\n  // Property names must be strings. This means that non-string objects cannot be used\n  // as keys in an object. Any non-string object, including a number, is typecasted\n  // into a string via the toString method.\n  // -- MDN, https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Operators/Property_accessors#Property_names\n  //\n  // So, to ensure that we are checking the same `name` that JavaScript would use, we cast it\n  // to a string. It's not always possible. If `name` is an object and its `toString` method is\n  // 'broken' (doesn't return a string, isn't a function, etc.), an error will be thrown:\n  //\n  // TypeError: Cannot convert object to primitive value\n  //\n  // For performance reasons, we don't catch this error here and allow it to propagate up the call\n  // stack. Note that you'll get the same error in JavaScript if you try to access a property using\n  // such a 'broken' object as a key.\n  return name + '';\n}\n\nfunction ensureSafeObject(obj, fullExpression) {\n  // nifty check if obj is Function that is fast and works across iframes and other contexts\n  if (obj) {\n    if (obj.constructor === obj) {\n      throw $parseMinErr('isecfn',\n          'Referencing Function in Angular expressions is disallowed! Expression: {0}',\n          fullExpression);\n    } else if (// isWindow(obj)\n        obj.window === obj) {\n      throw $parseMinErr('isecwindow',\n          'Referencing the Window in Angular expressions is disallowed! Expression: {0}',\n          fullExpression);\n    } else if (// isElement(obj)\n        obj.children && (obj.nodeName || (obj.prop && obj.attr && obj.find))) {\n      throw $parseMinErr('isecdom',\n          'Referencing DOM nodes in Angular expressions is disallowed! Expression: {0}',\n          fullExpression);\n    } else if (// block Object so that we can't get hold of dangerous Object.* methods\n        obj === Object) {\n      throw $parseMinErr('isecobj',\n          'Referencing Object in Angular expressions is disallowed! Expression: {0}',\n          fullExpression);\n    }\n  }\n  return obj;\n}\n\nvar CALL = Function.prototype.call;\nvar APPLY = Function.prototype.apply;\nvar BIND = Function.prototype.bind;\n\nfunction ensureSafeFunction(obj, fullExpression) {\n  if (obj) {\n    if (obj.constructor === obj) {\n      throw $parseMinErr('isecfn',\n        'Referencing Function in Angular expressions is disallowed! Expression: {0}',\n        fullExpression);\n    } else if (obj === CALL || obj === APPLY || obj === BIND) {\n      throw $parseMinErr('isecff',\n        'Referencing call, apply or bind in Angular expressions is disallowed! Expression: {0}',\n        fullExpression);\n    }\n  }\n}\n\nfunction ensureSafeAssignContext(obj, fullExpression) {\n  if (obj) {\n    if (obj === (0).constructor || obj === (false).constructor || obj === ''.constructor ||\n        obj === {}.constructor || obj === [].constructor || obj === Function.constructor) {\n      throw $parseMinErr('isecaf',\n        'Assigning to a constructor is disallowed! Expression: {0}', fullExpression);\n    }\n  }\n}\n\nvar OPERATORS = createMap();\nforEach('+ - * / % === !== == != < > <= >= && || ! = |'.split(' '), function(operator) { OPERATORS[operator] = true; });\nvar ESCAPE = {\"n\":\"\\n\", \"f\":\"\\f\", \"r\":\"\\r\", \"t\":\"\\t\", \"v\":\"\\v\", \"'\":\"'\", '\"':'\"'};\n\n\n/////////////////////////////////////////\n\n\n/**\n * @constructor\n */\nvar Lexer = function(options) {\n  this.options = options;\n};\n\nLexer.prototype = {\n  constructor: Lexer,\n\n  lex: function(text) {\n    this.text = text;\n    this.index = 0;\n    this.tokens = [];\n\n    while (this.index < this.text.length) {\n      var ch = this.text.charAt(this.index);\n      if (ch === '\"' || ch === \"'\") {\n        this.readString(ch);\n      } else if (this.isNumber(ch) || ch === '.' && this.isNumber(this.peek())) {\n        this.readNumber();\n      } else if (this.isIdentifierStart(this.peekMultichar())) {\n        this.readIdent();\n      } else if (this.is(ch, '(){}[].,;:?')) {\n        this.tokens.push({index: this.index, text: ch});\n        this.index++;\n      } else if (this.isWhitespace(ch)) {\n        this.index++;\n      } else {\n        var ch2 = ch + this.peek();\n        var ch3 = ch2 + this.peek(2);\n        var op1 = OPERATORS[ch];\n        var op2 = OPERATORS[ch2];\n        var op3 = OPERATORS[ch3];\n        if (op1 || op2 || op3) {\n          var token = op3 ? ch3 : (op2 ? ch2 : ch);\n          this.tokens.push({index: this.index, text: token, operator: true});\n          this.index += token.length;\n        } else {\n          this.throwError('Unexpected next character ', this.index, this.index + 1);\n        }\n      }\n    }\n    return this.tokens;\n  },\n\n  is: function(ch, chars) {\n    return chars.indexOf(ch) !== -1;\n  },\n\n  peek: function(i) {\n    var num = i || 1;\n    return (this.index + num < this.text.length) ? this.text.charAt(this.index + num) : false;\n  },\n\n  isNumber: function(ch) {\n    return ('0' <= ch && ch <= '9') && typeof ch === \"string\";\n  },\n\n  isWhitespace: function(ch) {\n    // IE treats non-breaking space as \\u00A0\n    return (ch === ' ' || ch === '\\r' || ch === '\\t' ||\n            ch === '\\n' || ch === '\\v' || ch === '\\u00A0');\n  },\n\n  isIdentifierStart: function(ch) {\n    return this.options.isIdentifierStart ?\n        this.options.isIdentifierStart(ch, this.codePointAt(ch)) :\n        this.isValidIdentifierStart(ch);\n  },\n\n  isValidIdentifierStart: function(ch) {\n    return ('a' <= ch && ch <= 'z' ||\n            'A' <= ch && ch <= 'Z' ||\n            '_' === ch || ch === '$');\n  },\n\n  isIdentifierContinue: function(ch) {\n    return this.options.isIdentifierContinue ?\n        this.options.isIdentifierContinue(ch, this.codePointAt(ch)) :\n        this.isValidIdentifierContinue(ch);\n  },\n\n  isValidIdentifierContinue: function(ch, cp) {\n    return this.isValidIdentifierStart(ch, cp) || this.isNumber(ch);\n  },\n\n  codePointAt: function(ch) {\n    if (ch.length === 1) return ch.charCodeAt(0);\n    /*jshint bitwise: false*/\n    return (ch.charCodeAt(0) << 10) + ch.charCodeAt(1) - 0x35FDC00;\n    /*jshint bitwise: true*/\n  },\n\n  peekMultichar: function() {\n    var ch = this.text.charAt(this.index);\n    var peek = this.peek();\n    if (!peek) {\n      return ch;\n    }\n    var cp1 = ch.charCodeAt(0);\n    var cp2 = peek.charCodeAt(0);\n    if (cp1 >= 0xD800 && cp1 <= 0xDBFF && cp2 >= 0xDC00 && cp2 <= 0xDFFF) {\n      return ch + peek;\n    }\n    return ch;\n  },\n\n  isExpOperator: function(ch) {\n    return (ch === '-' || ch === '+' || this.isNumber(ch));\n  },\n\n  throwError: function(error, start, end) {\n    end = end || this.index;\n    var colStr = (isDefined(start)\n            ? 's ' + start +  '-' + this.index + ' [' + this.text.substring(start, end) + ']'\n            : ' ' + end);\n    throw $parseMinErr('lexerr', 'Lexer Error: {0} at column{1} in expression [{2}].',\n        error, colStr, this.text);\n  },\n\n  readNumber: function() {\n    var number = '';\n    var start = this.index;\n    while (this.index < this.text.length) {\n      var ch = lowercase(this.text.charAt(this.index));\n      if (ch == '.' || this.isNumber(ch)) {\n        number += ch;\n      } else {\n        var peekCh = this.peek();\n        if (ch == 'e' && this.isExpOperator(peekCh)) {\n          number += ch;\n        } else if (this.isExpOperator(ch) &&\n            peekCh && this.isNumber(peekCh) &&\n            number.charAt(number.length - 1) == 'e') {\n          number += ch;\n        } else if (this.isExpOperator(ch) &&\n            (!peekCh || !this.isNumber(peekCh)) &&\n            number.charAt(number.length - 1) == 'e') {\n          this.throwError('Invalid exponent');\n        } else {\n          break;\n        }\n      }\n      this.index++;\n    }\n    this.tokens.push({\n      index: start,\n      text: number,\n      constant: true,\n      value: Number(number)\n    });\n  },\n\n  readIdent: function() {\n    var start = this.index;\n    this.index += this.peekMultichar().length;\n    while (this.index < this.text.length) {\n      var ch = this.peekMultichar();\n      if (!this.isIdentifierContinue(ch)) {\n        break;\n      }\n      this.index += ch.length;\n    }\n    this.tokens.push({\n      index: start,\n      text: this.text.slice(start, this.index),\n      identifier: true\n    });\n  },\n\n  readString: function(quote) {\n    var start = this.index;\n    this.index++;\n    var string = '';\n    var rawString = quote;\n    var escape = false;\n    while (this.index < this.text.length) {\n      var ch = this.text.charAt(this.index);\n      rawString += ch;\n      if (escape) {\n        if (ch === 'u') {\n          var hex = this.text.substring(this.index + 1, this.index + 5);\n          if (!hex.match(/[\\da-f]{4}/i)) {\n            this.throwError('Invalid unicode escape [\\\\u' + hex + ']');\n          }\n          this.index += 4;\n          string += String.fromCharCode(parseInt(hex, 16));\n        } else {\n          var rep = ESCAPE[ch];\n          string = string + (rep || ch);\n        }\n        escape = false;\n      } else if (ch === '\\\\') {\n        escape = true;\n      } else if (ch === quote) {\n        this.index++;\n        this.tokens.push({\n          index: start,\n          text: rawString,\n          constant: true,\n          value: string\n        });\n        return;\n      } else {\n        string += ch;\n      }\n      this.index++;\n    }\n    this.throwError('Unterminated quote', start);\n  }\n};\n\nvar AST = function(lexer, options) {\n  this.lexer = lexer;\n  this.options = options;\n};\n\nAST.Program = 'Program';\nAST.ExpressionStatement = 'ExpressionStatement';\nAST.AssignmentExpression = 'AssignmentExpression';\nAST.ConditionalExpression = 'ConditionalExpression';\nAST.LogicalExpression = 'LogicalExpression';\nAST.BinaryExpression = 'BinaryExpression';\nAST.UnaryExpression = 'UnaryExpression';\nAST.CallExpression = 'CallExpression';\nAST.MemberExpression = 'MemberExpression';\nAST.Identifier = 'Identifier';\nAST.Literal = 'Literal';\nAST.ArrayExpression = 'ArrayExpression';\nAST.Property = 'Property';\nAST.ObjectExpression = 'ObjectExpression';\nAST.ThisExpression = 'ThisExpression';\nAST.LocalsExpression = 'LocalsExpression';\n\n// Internal use only\nAST.NGValueParameter = 'NGValueParameter';\n\nAST.prototype = {\n  ast: function(text) {\n    this.text = text;\n    this.tokens = this.lexer.lex(text);\n\n    var value = this.program();\n\n    if (this.tokens.length !== 0) {\n      this.throwError('is an unexpected token', this.tokens[0]);\n    }\n\n    return value;\n  },\n\n  program: function() {\n    var body = [];\n    while (true) {\n      if (this.tokens.length > 0 && !this.peek('}', ')', ';', ']'))\n        body.push(this.expressionStatement());\n      if (!this.expect(';')) {\n        return { type: AST.Program, body: body};\n      }\n    }\n  },\n\n  expressionStatement: function() {\n    return { type: AST.ExpressionStatement, expression: this.filterChain() };\n  },\n\n  filterChain: function() {\n    var left = this.expression();\n    var token;\n    while ((token = this.expect('|'))) {\n      left = this.filter(left);\n    }\n    return left;\n  },\n\n  expression: function() {\n    return this.assignment();\n  },\n\n  assignment: function() {\n    var result = this.ternary();\n    if (this.expect('=')) {\n      result = { type: AST.AssignmentExpression, left: result, right: this.assignment(), operator: '='};\n    }\n    return result;\n  },\n\n  ternary: function() {\n    var test = this.logicalOR();\n    var alternate;\n    var consequent;\n    if (this.expect('?')) {\n      alternate = this.expression();\n      if (this.consume(':')) {\n        consequent = this.expression();\n        return { type: AST.ConditionalExpression, test: test, alternate: alternate, consequent: consequent};\n      }\n    }\n    return test;\n  },\n\n  logicalOR: function() {\n    var left = this.logicalAND();\n    while (this.expect('||')) {\n      left = { type: AST.LogicalExpression, operator: '||', left: left, right: this.logicalAND() };\n    }\n    return left;\n  },\n\n  logicalAND: function() {\n    var left = this.equality();\n    while (this.expect('&&')) {\n      left = { type: AST.LogicalExpression, operator: '&&', left: left, right: this.equality()};\n    }\n    return left;\n  },\n\n  equality: function() {\n    var left = this.relational();\n    var token;\n    while ((token = this.expect('==','!=','===','!=='))) {\n      left = { type: AST.BinaryExpression, operator: token.text, left: left, right: this.relational() };\n    }\n    return left;\n  },\n\n  relational: function() {\n    var left = this.additive();\n    var token;\n    while ((token = this.expect('<', '>', '<=', '>='))) {\n      left = { type: AST.BinaryExpression, operator: token.text, left: left, right: this.additive() };\n    }\n    return left;\n  },\n\n  additive: function() {\n    var left = this.multiplicative();\n    var token;\n    while ((token = this.expect('+','-'))) {\n      left = { type: AST.BinaryExpression, operator: token.text, left: left, right: this.multiplicative() };\n    }\n    return left;\n  },\n\n  multiplicative: function() {\n    var left = this.unary();\n    var token;\n    while ((token = this.expect('*','/','%'))) {\n      left = { type: AST.BinaryExpression, operator: token.text, left: left, right: this.unary() };\n    }\n    return left;\n  },\n\n  unary: function() {\n    var token;\n    if ((token = this.expect('+', '-', '!'))) {\n      return { type: AST.UnaryExpression, operator: token.text, prefix: true, argument: this.unary() };\n    } else {\n      return this.primary();\n    }\n  },\n\n  primary: function() {\n    var primary;\n    if (this.expect('(')) {\n      primary = this.filterChain();\n      this.consume(')');\n    } else if (this.expect('[')) {\n      primary = this.arrayDeclaration();\n    } else if (this.expect('{')) {\n      primary = this.object();\n    } else if (this.selfReferential.hasOwnProperty(this.peek().text)) {\n      primary = copy(this.selfReferential[this.consume().text]);\n    } else if (this.options.literals.hasOwnProperty(this.peek().text)) {\n      primary = { type: AST.Literal, value: this.options.literals[this.consume().text]};\n    } else if (this.peek().identifier) {\n      primary = this.identifier();\n    } else if (this.peek().constant) {\n      primary = this.constant();\n    } else {\n      this.throwError('not a primary expression', this.peek());\n    }\n\n    var next;\n    while ((next = this.expect('(', '[', '.'))) {\n      if (next.text === '(') {\n        primary = {type: AST.CallExpression, callee: primary, arguments: this.parseArguments() };\n        this.consume(')');\n      } else if (next.text === '[') {\n        primary = { type: AST.MemberExpression, object: primary, property: this.expression(), computed: true };\n        this.consume(']');\n      } else if (next.text === '.') {\n        primary = { type: AST.MemberExpression, object: primary, property: this.identifier(), computed: false };\n      } else {\n        this.throwError('IMPOSSIBLE');\n      }\n    }\n    return primary;\n  },\n\n  filter: function(baseExpression) {\n    var args = [baseExpression];\n    var result = {type: AST.CallExpression, callee: this.identifier(), arguments: args, filter: true};\n\n    while (this.expect(':')) {\n      args.push(this.expression());\n    }\n\n    return result;\n  },\n\n  parseArguments: function() {\n    var args = [];\n    if (this.peekToken().text !== ')') {\n      do {\n        args.push(this.filterChain());\n      } while (this.expect(','));\n    }\n    return args;\n  },\n\n  identifier: function() {\n    var token = this.consume();\n    if (!token.identifier) {\n      this.throwError('is not a valid identifier', token);\n    }\n    return { type: AST.Identifier, name: token.text };\n  },\n\n  constant: function() {\n    // TODO check that it is a constant\n    return { type: AST.Literal, value: this.consume().value };\n  },\n\n  arrayDeclaration: function() {\n    var elements = [];\n    if (this.peekToken().text !== ']') {\n      do {\n        if (this.peek(']')) {\n          // Support trailing commas per ES5.1.\n          break;\n        }\n        elements.push(this.expression());\n      } while (this.expect(','));\n    }\n    this.consume(']');\n\n    return { type: AST.ArrayExpression, elements: elements };\n  },\n\n  object: function() {\n    var properties = [], property;\n    if (this.peekToken().text !== '}') {\n      do {\n        if (this.peek('}')) {\n          // Support trailing commas per ES5.1.\n          break;\n        }\n        property = {type: AST.Property, kind: 'init'};\n        if (this.peek().constant) {\n          property.key = this.constant();\n          property.computed = false;\n          this.consume(':');\n          property.value = this.expression();\n        } else if (this.peek().identifier) {\n          property.key = this.identifier();\n          property.computed = false;\n          if (this.peek(':')) {\n            this.consume(':');\n            property.value = this.expression();\n          } else {\n            property.value = property.key;\n          }\n        } else if (this.peek('[')) {\n          this.consume('[');\n          property.key = this.expression();\n          this.consume(']');\n          property.computed = true;\n          this.consume(':');\n          property.value = this.expression();\n        } else {\n          this.throwError(\"invalid key\", this.peek());\n        }\n        properties.push(property);\n      } while (this.expect(','));\n    }\n    this.consume('}');\n\n    return {type: AST.ObjectExpression, properties: properties };\n  },\n\n  throwError: function(msg, token) {\n    throw $parseMinErr('syntax',\n        'Syntax Error: Token \\'{0}\\' {1} at column {2} of the expression [{3}] starting at [{4}].',\n          token.text, msg, (token.index + 1), this.text, this.text.substring(token.index));\n  },\n\n  consume: function(e1) {\n    if (this.tokens.length === 0) {\n      throw $parseMinErr('ueoe', 'Unexpected end of expression: {0}', this.text);\n    }\n\n    var token = this.expect(e1);\n    if (!token) {\n      this.throwError('is unexpected, expecting [' + e1 + ']', this.peek());\n    }\n    return token;\n  },\n\n  peekToken: function() {\n    if (this.tokens.length === 0) {\n      throw $parseMinErr('ueoe', 'Unexpected end of expression: {0}', this.text);\n    }\n    return this.tokens[0];\n  },\n\n  peek: function(e1, e2, e3, e4) {\n    return this.peekAhead(0, e1, e2, e3, e4);\n  },\n\n  peekAhead: function(i, e1, e2, e3, e4) {\n    if (this.tokens.length > i) {\n      var token = this.tokens[i];\n      var t = token.text;\n      if (t === e1 || t === e2 || t === e3 || t === e4 ||\n          (!e1 && !e2 && !e3 && !e4)) {\n        return token;\n      }\n    }\n    return false;\n  },\n\n  expect: function(e1, e2, e3, e4) {\n    var token = this.peek(e1, e2, e3, e4);\n    if (token) {\n      this.tokens.shift();\n      return token;\n    }\n    return false;\n  },\n\n  selfReferential: {\n    'this': {type: AST.ThisExpression },\n    '$locals': {type: AST.LocalsExpression }\n  }\n};\n\nfunction ifDefined(v, d) {\n  return typeof v !== 'undefined' ? v : d;\n}\n\nfunction plusFn(l, r) {\n  if (typeof l === 'undefined') return r;\n  if (typeof r === 'undefined') return l;\n  return l + r;\n}\n\nfunction isStateless($filter, filterName) {\n  var fn = $filter(filterName);\n  return !fn.$stateful;\n}\n\nfunction findConstantAndWatchExpressions(ast, $filter) {\n  var allConstants;\n  var argsToWatch;\n  switch (ast.type) {\n  case AST.Program:\n    allConstants = true;\n    forEach(ast.body, function(expr) {\n      findConstantAndWatchExpressions(expr.expression, $filter);\n      allConstants = allConstants && expr.expression.constant;\n    });\n    ast.constant = allConstants;\n    break;\n  case AST.Literal:\n    ast.constant = true;\n    ast.toWatch = [];\n    break;\n  case AST.UnaryExpression:\n    findConstantAndWatchExpressions(ast.argument, $filter);\n    ast.constant = ast.argument.constant;\n    ast.toWatch = ast.argument.toWatch;\n    break;\n  case AST.BinaryExpression:\n    findConstantAndWatchExpressions(ast.left, $filter);\n    findConstantAndWatchExpressions(ast.right, $filter);\n    ast.constant = ast.left.constant && ast.right.constant;\n    ast.toWatch = ast.left.toWatch.concat(ast.right.toWatch);\n    break;\n  case AST.LogicalExpression:\n    findConstantAndWatchExpressions(ast.left, $filter);\n    findConstantAndWatchExpressions(ast.right, $filter);\n    ast.constant = ast.left.constant && ast.right.constant;\n    ast.toWatch = ast.constant ? [] : [ast];\n    break;\n  case AST.ConditionalExpression:\n    findConstantAndWatchExpressions(ast.test, $filter);\n    findConstantAndWatchExpressions(ast.alternate, $filter);\n    findConstantAndWatchExpressions(ast.consequent, $filter);\n    ast.constant = ast.test.constant && ast.alternate.constant && ast.consequent.constant;\n    ast.toWatch = ast.constant ? [] : [ast];\n    break;\n  case AST.Identifier:\n    ast.constant = false;\n    ast.toWatch = [ast];\n    break;\n  case AST.MemberExpression:\n    findConstantAndWatchExpressions(ast.object, $filter);\n    if (ast.computed) {\n      findConstantAndWatchExpressions(ast.property, $filter);\n    }\n    ast.constant = ast.object.constant && (!ast.computed || ast.property.constant);\n    ast.toWatch = [ast];\n    break;\n  case AST.CallExpression:\n    allConstants = ast.filter ? isStateless($filter, ast.callee.name) : false;\n    argsToWatch = [];\n    forEach(ast.arguments, function(expr) {\n      findConstantAndWatchExpressions(expr, $filter);\n      allConstants = allConstants && expr.constant;\n      if (!expr.constant) {\n        argsToWatch.push.apply(argsToWatch, expr.toWatch);\n      }\n    });\n    ast.constant = allConstants;\n    ast.toWatch = ast.filter && isStateless($filter, ast.callee.name) ? argsToWatch : [ast];\n    break;\n  case AST.AssignmentExpression:\n    findConstantAndWatchExpressions(ast.left, $filter);\n    findConstantAndWatchExpressions(ast.right, $filter);\n    ast.constant = ast.left.constant && ast.right.constant;\n    ast.toWatch = [ast];\n    break;\n  case AST.ArrayExpression:\n    allConstants = true;\n    argsToWatch = [];\n    forEach(ast.elements, function(expr) {\n      findConstantAndWatchExpressions(expr, $filter);\n      allConstants = allConstants && expr.constant;\n      if (!expr.constant) {\n        argsToWatch.push.apply(argsToWatch, expr.toWatch);\n      }\n    });\n    ast.constant = allConstants;\n    ast.toWatch = argsToWatch;\n    break;\n  case AST.ObjectExpression:\n    allConstants = true;\n    argsToWatch = [];\n    forEach(ast.properties, function(property) {\n      findConstantAndWatchExpressions(property.value, $filter);\n      allConstants = allConstants && property.value.constant && !property.computed;\n      if (!property.value.constant) {\n        argsToWatch.push.apply(argsToWatch, property.value.toWatch);\n      }\n    });\n    ast.constant = allConstants;\n    ast.toWatch = argsToWatch;\n    break;\n  case AST.ThisExpression:\n    ast.constant = false;\n    ast.toWatch = [];\n    break;\n  case AST.LocalsExpression:\n    ast.constant = false;\n    ast.toWatch = [];\n    break;\n  }\n}\n\nfunction getInputs(body) {\n  if (body.length != 1) return;\n  var lastExpression = body[0].expression;\n  var candidate = lastExpression.toWatch;\n  if (candidate.length !== 1) return candidate;\n  return candidate[0] !== lastExpression ? candidate : undefined;\n}\n\nfunction isAssignable(ast) {\n  return ast.type === AST.Identifier || ast.type === AST.MemberExpression;\n}\n\nfunction assignableAST(ast) {\n  if (ast.body.length === 1 && isAssignable(ast.body[0].expression)) {\n    return {type: AST.AssignmentExpression, left: ast.body[0].expression, right: {type: AST.NGValueParameter}, operator: '='};\n  }\n}\n\nfunction isLiteral(ast) {\n  return ast.body.length === 0 ||\n      ast.body.length === 1 && (\n      ast.body[0].expression.type === AST.Literal ||\n      ast.body[0].expression.type === AST.ArrayExpression ||\n      ast.body[0].expression.type === AST.ObjectExpression);\n}\n\nfunction isConstant(ast) {\n  return ast.constant;\n}\n\nfunction ASTCompiler(astBuilder, $filter) {\n  this.astBuilder = astBuilder;\n  this.$filter = $filter;\n}\n\nASTCompiler.prototype = {\n  compile: function(expression, expensiveChecks) {\n    var self = this;\n    var ast = this.astBuilder.ast(expression);\n    this.state = {\n      nextId: 0,\n      filters: {},\n      expensiveChecks: expensiveChecks,\n      fn: {vars: [], body: [], own: {}},\n      assign: {vars: [], body: [], own: {}},\n      inputs: []\n    };\n    findConstantAndWatchExpressions(ast, self.$filter);\n    var extra = '';\n    var assignable;\n    this.stage = 'assign';\n    if ((assignable = assignableAST(ast))) {\n      this.state.computing = 'assign';\n      var result = this.nextId();\n      this.recurse(assignable, result);\n      this.return_(result);\n      extra = 'fn.assign=' + this.generateFunction('assign', 's,v,l');\n    }\n    var toWatch = getInputs(ast.body);\n    self.stage = 'inputs';\n    forEach(toWatch, function(watch, key) {\n      var fnKey = 'fn' + key;\n      self.state[fnKey] = {vars: [], body: [], own: {}};\n      self.state.computing = fnKey;\n      var intoId = self.nextId();\n      self.recurse(watch, intoId);\n      self.return_(intoId);\n      self.state.inputs.push(fnKey);\n      watch.watchId = key;\n    });\n    this.state.computing = 'fn';\n    this.stage = 'main';\n    this.recurse(ast);\n    var fnString =\n      // The build and minification steps remove the string \"use strict\" from the code, but this is done using a regex.\n      // This is a workaround for this until we do a better job at only removing the prefix only when we should.\n      '\"' + this.USE + ' ' + this.STRICT + '\";\\n' +\n      this.filterPrefix() +\n      'var fn=' + this.generateFunction('fn', 's,l,a,i') +\n      extra +\n      this.watchFns() +\n      'return fn;';\n\n    /* jshint -W054 */\n    var fn = (new Function('$filter',\n        'ensureSafeMemberName',\n        'ensureSafeObject',\n        'ensureSafeFunction',\n        'getStringValue',\n        'ensureSafeAssignContext',\n        'ifDefined',\n        'plus',\n        'text',\n        fnString))(\n          this.$filter,\n          ensureSafeMemberName,\n          ensureSafeObject,\n          ensureSafeFunction,\n          getStringValue,\n          ensureSafeAssignContext,\n          ifDefined,\n          plusFn,\n          expression);\n    /* jshint +W054 */\n    this.state = this.stage = undefined;\n    fn.literal = isLiteral(ast);\n    fn.constant = isConstant(ast);\n    return fn;\n  },\n\n  USE: 'use',\n\n  STRICT: 'strict',\n\n  watchFns: function() {\n    var result = [];\n    var fns = this.state.inputs;\n    var self = this;\n    forEach(fns, function(name) {\n      result.push('var ' + name + '=' + self.generateFunction(name, 's'));\n    });\n    if (fns.length) {\n      result.push('fn.inputs=[' + fns.join(',') + '];');\n    }\n    return result.join('');\n  },\n\n  generateFunction: function(name, params) {\n    return 'function(' + params + '){' +\n        this.varsPrefix(name) +\n        this.body(name) +\n        '};';\n  },\n\n  filterPrefix: function() {\n    var parts = [];\n    var self = this;\n    forEach(this.state.filters, function(id, filter) {\n      parts.push(id + '=$filter(' + self.escape(filter) + ')');\n    });\n    if (parts.length) return 'var ' + parts.join(',') + ';';\n    return '';\n  },\n\n  varsPrefix: function(section) {\n    return this.state[section].vars.length ? 'var ' + this.state[section].vars.join(',') + ';' : '';\n  },\n\n  body: function(section) {\n    return this.state[section].body.join('');\n  },\n\n  recurse: function(ast, intoId, nameId, recursionFn, create, skipWatchIdCheck) {\n    var left, right, self = this, args, expression, computed;\n    recursionFn = recursionFn || noop;\n    if (!skipWatchIdCheck && isDefined(ast.watchId)) {\n      intoId = intoId || this.nextId();\n      this.if_('i',\n        this.lazyAssign(intoId, this.computedMember('i', ast.watchId)),\n        this.lazyRecurse(ast, intoId, nameId, recursionFn, create, true)\n      );\n      return;\n    }\n    switch (ast.type) {\n    case AST.Program:\n      forEach(ast.body, function(expression, pos) {\n        self.recurse(expression.expression, undefined, undefined, function(expr) { right = expr; });\n        if (pos !== ast.body.length - 1) {\n          self.current().body.push(right, ';');\n        } else {\n          self.return_(right);\n        }\n      });\n      break;\n    case AST.Literal:\n      expression = this.escape(ast.value);\n      this.assign(intoId, expression);\n      recursionFn(expression);\n      break;\n    case AST.UnaryExpression:\n      this.recurse(ast.argument, undefined, undefined, function(expr) { right = expr; });\n      expression = ast.operator + '(' + this.ifDefined(right, 0) + ')';\n      this.assign(intoId, expression);\n      recursionFn(expression);\n      break;\n    case AST.BinaryExpression:\n      this.recurse(ast.left, undefined, undefined, function(expr) { left = expr; });\n      this.recurse(ast.right, undefined, undefined, function(expr) { right = expr; });\n      if (ast.operator === '+') {\n        expression = this.plus(left, right);\n      } else if (ast.operator === '-') {\n        expression = this.ifDefined(left, 0) + ast.operator + this.ifDefined(right, 0);\n      } else {\n        expression = '(' + left + ')' + ast.operator + '(' + right + ')';\n      }\n      this.assign(intoId, expression);\n      recursionFn(expression);\n      break;\n    case AST.LogicalExpression:\n      intoId = intoId || this.nextId();\n      self.recurse(ast.left, intoId);\n      self.if_(ast.operator === '&&' ? intoId : self.not(intoId), self.lazyRecurse(ast.right, intoId));\n      recursionFn(intoId);\n      break;\n    case AST.ConditionalExpression:\n      intoId = intoId || this.nextId();\n      self.recurse(ast.test, intoId);\n      self.if_(intoId, self.lazyRecurse(ast.alternate, intoId), self.lazyRecurse(ast.consequent, intoId));\n      recursionFn(intoId);\n      break;\n    case AST.Identifier:\n      intoId = intoId || this.nextId();\n      if (nameId) {\n        nameId.context = self.stage === 'inputs' ? 's' : this.assign(this.nextId(), this.getHasOwnProperty('l', ast.name) + '?l:s');\n        nameId.computed = false;\n        nameId.name = ast.name;\n      }\n      ensureSafeMemberName(ast.name);\n      self.if_(self.stage === 'inputs' || self.not(self.getHasOwnProperty('l', ast.name)),\n        function() {\n          self.if_(self.stage === 'inputs' || 's', function() {\n            if (create && create !== 1) {\n              self.if_(\n                self.not(self.nonComputedMember('s', ast.name)),\n                self.lazyAssign(self.nonComputedMember('s', ast.name), '{}'));\n            }\n            self.assign(intoId, self.nonComputedMember('s', ast.name));\n          });\n        }, intoId && self.lazyAssign(intoId, self.nonComputedMember('l', ast.name))\n        );\n      if (self.state.expensiveChecks || isPossiblyDangerousMemberName(ast.name)) {\n        self.addEnsureSafeObject(intoId);\n      }\n      recursionFn(intoId);\n      break;\n    case AST.MemberExpression:\n      left = nameId && (nameId.context = this.nextId()) || this.nextId();\n      intoId = intoId || this.nextId();\n      self.recurse(ast.object, left, undefined, function() {\n        self.if_(self.notNull(left), function() {\n          if (create && create !== 1) {\n            self.addEnsureSafeAssignContext(left);\n          }\n          if (ast.computed) {\n            right = self.nextId();\n            self.recurse(ast.property, right);\n            self.getStringValue(right);\n            self.addEnsureSafeMemberName(right);\n            if (create && create !== 1) {\n              self.if_(self.not(self.computedMember(left, right)), self.lazyAssign(self.computedMember(left, right), '{}'));\n            }\n            expression = self.ensureSafeObject(self.computedMember(left, right));\n            self.assign(intoId, expression);\n            if (nameId) {\n              nameId.computed = true;\n              nameId.name = right;\n            }\n          } else {\n            ensureSafeMemberName(ast.property.name);\n            if (create && create !== 1) {\n              self.if_(self.not(self.nonComputedMember(left, ast.property.name)), self.lazyAssign(self.nonComputedMember(left, ast.property.name), '{}'));\n            }\n            expression = self.nonComputedMember(left, ast.property.name);\n            if (self.state.expensiveChecks || isPossiblyDangerousMemberName(ast.property.name)) {\n              expression = self.ensureSafeObject(expression);\n            }\n            self.assign(intoId, expression);\n            if (nameId) {\n              nameId.computed = false;\n              nameId.name = ast.property.name;\n            }\n          }\n        }, function() {\n          self.assign(intoId, 'undefined');\n        });\n        recursionFn(intoId);\n      }, !!create);\n      break;\n    case AST.CallExpression:\n      intoId = intoId || this.nextId();\n      if (ast.filter) {\n        right = self.filter(ast.callee.name);\n        args = [];\n        forEach(ast.arguments, function(expr) {\n          var argument = self.nextId();\n          self.recurse(expr, argument);\n          args.push(argument);\n        });\n        expression = right + '(' + args.join(',') + ')';\n        self.assign(intoId, expression);\n        recursionFn(intoId);\n      } else {\n        right = self.nextId();\n        left = {};\n        args = [];\n        self.recurse(ast.callee, right, left, function() {\n          self.if_(self.notNull(right), function() {\n            self.addEnsureSafeFunction(right);\n            forEach(ast.arguments, function(expr) {\n              self.recurse(expr, self.nextId(), undefined, function(argument) {\n                args.push(self.ensureSafeObject(argument));\n              });\n            });\n            if (left.name) {\n              if (!self.state.expensiveChecks) {\n                self.addEnsureSafeObject(left.context);\n              }\n              expression = self.member(left.context, left.name, left.computed) + '(' + args.join(',') + ')';\n            } else {\n              expression = right + '(' + args.join(',') + ')';\n            }\n            expression = self.ensureSafeObject(expression);\n            self.assign(intoId, expression);\n          }, function() {\n            self.assign(intoId, 'undefined');\n          });\n          recursionFn(intoId);\n        });\n      }\n      break;\n    case AST.AssignmentExpression:\n      right = this.nextId();\n      left = {};\n      if (!isAssignable(ast.left)) {\n        throw $parseMinErr('lval', 'Trying to assign a value to a non l-value');\n      }\n      this.recurse(ast.left, undefined, left, function() {\n        self.if_(self.notNull(left.context), function() {\n          self.recurse(ast.right, right);\n          self.addEnsureSafeObject(self.member(left.context, left.name, left.computed));\n          self.addEnsureSafeAssignContext(left.context);\n          expression = self.member(left.context, left.name, left.computed) + ast.operator + right;\n          self.assign(intoId, expression);\n          recursionFn(intoId || expression);\n        });\n      }, 1);\n      break;\n    case AST.ArrayExpression:\n      args = [];\n      forEach(ast.elements, function(expr) {\n        self.recurse(expr, self.nextId(), undefined, function(argument) {\n          args.push(argument);\n        });\n      });\n      expression = '[' + args.join(',') + ']';\n      this.assign(intoId, expression);\n      recursionFn(expression);\n      break;\n    case AST.ObjectExpression:\n      args = [];\n      computed = false;\n      forEach(ast.properties, function(property) {\n        if (property.computed) {\n          computed = true;\n        }\n      });\n      if (computed) {\n        intoId = intoId || this.nextId();\n        this.assign(intoId, '{}');\n        forEach(ast.properties, function(property) {\n          if (property.computed) {\n            left = self.nextId();\n            self.recurse(property.key, left);\n          } else {\n            left = property.key.type === AST.Identifier ?\n                       property.key.name :\n                       ('' + property.key.value);\n          }\n          right = self.nextId();\n          self.recurse(property.value, right);\n          self.assign(self.member(intoId, left, property.computed), right);\n        });\n      } else {\n        forEach(ast.properties, function(property) {\n          self.recurse(property.value, ast.constant ? undefined : self.nextId(), undefined, function(expr) {\n            args.push(self.escape(\n                property.key.type === AST.Identifier ? property.key.name :\n                  ('' + property.key.value)) +\n                ':' + expr);\n          });\n        });\n        expression = '{' + args.join(',') + '}';\n        this.assign(intoId, expression);\n      }\n      recursionFn(intoId || expression);\n      break;\n    case AST.ThisExpression:\n      this.assign(intoId, 's');\n      recursionFn('s');\n      break;\n    case AST.LocalsExpression:\n      this.assign(intoId, 'l');\n      recursionFn('l');\n      break;\n    case AST.NGValueParameter:\n      this.assign(intoId, 'v');\n      recursionFn('v');\n      break;\n    }\n  },\n\n  getHasOwnProperty: function(element, property) {\n    var key = element + '.' + property;\n    var own = this.current().own;\n    if (!own.hasOwnProperty(key)) {\n      own[key] = this.nextId(false, element + '&&(' + this.escape(property) + ' in ' + element + ')');\n    }\n    return own[key];\n  },\n\n  assign: function(id, value) {\n    if (!id) return;\n    this.current().body.push(id, '=', value, ';');\n    return id;\n  },\n\n  filter: function(filterName) {\n    if (!this.state.filters.hasOwnProperty(filterName)) {\n      this.state.filters[filterName] = this.nextId(true);\n    }\n    return this.state.filters[filterName];\n  },\n\n  ifDefined: function(id, defaultValue) {\n    return 'ifDefined(' + id + ',' + this.escape(defaultValue) + ')';\n  },\n\n  plus: function(left, right) {\n    return 'plus(' + left + ',' + right + ')';\n  },\n\n  return_: function(id) {\n    this.current().body.push('return ', id, ';');\n  },\n\n  if_: function(test, alternate, consequent) {\n    if (test === true) {\n      alternate();\n    } else {\n      var body = this.current().body;\n      body.push('if(', test, '){');\n      alternate();\n      body.push('}');\n      if (consequent) {\n        body.push('else{');\n        consequent();\n        body.push('}');\n      }\n    }\n  },\n\n  not: function(expression) {\n    return '!(' + expression + ')';\n  },\n\n  notNull: function(expression) {\n    return expression + '!=null';\n  },\n\n  nonComputedMember: function(left, right) {\n    var SAFE_IDENTIFIER = /[$_a-zA-Z][$_a-zA-Z0-9]*/;\n    var UNSAFE_CHARACTERS = /[^$_a-zA-Z0-9]/g;\n    if (SAFE_IDENTIFIER.test(right)) {\n      return left + '.' + right;\n    } else {\n      return left  + '[\"' + right.replace(UNSAFE_CHARACTERS, this.stringEscapeFn) + '\"]';\n    }\n  },\n\n  computedMember: function(left, right) {\n    return left + '[' + right + ']';\n  },\n\n  member: function(left, right, computed) {\n    if (computed) return this.computedMember(left, right);\n    return this.nonComputedMember(left, right);\n  },\n\n  addEnsureSafeObject: function(item) {\n    this.current().body.push(this.ensureSafeObject(item), ';');\n  },\n\n  addEnsureSafeMemberName: function(item) {\n    this.current().body.push(this.ensureSafeMemberName(item), ';');\n  },\n\n  addEnsureSafeFunction: function(item) {\n    this.current().body.push(this.ensureSafeFunction(item), ';');\n  },\n\n  addEnsureSafeAssignContext: function(item) {\n    this.current().body.push(this.ensureSafeAssignContext(item), ';');\n  },\n\n  ensureSafeObject: function(item) {\n    return 'ensureSafeObject(' + item + ',text)';\n  },\n\n  ensureSafeMemberName: function(item) {\n    return 'ensureSafeMemberName(' + item + ',text)';\n  },\n\n  ensureSafeFunction: function(item) {\n    return 'ensureSafeFunction(' + item + ',text)';\n  },\n\n  getStringValue: function(item) {\n    this.assign(item, 'getStringValue(' + item + ')');\n  },\n\n  ensureSafeAssignContext: function(item) {\n    return 'ensureSafeAssignContext(' + item + ',text)';\n  },\n\n  lazyRecurse: function(ast, intoId, nameId, recursionFn, create, skipWatchIdCheck) {\n    var self = this;\n    return function() {\n      self.recurse(ast, intoId, nameId, recursionFn, create, skipWatchIdCheck);\n    };\n  },\n\n  lazyAssign: function(id, value) {\n    var self = this;\n    return function() {\n      self.assign(id, value);\n    };\n  },\n\n  stringEscapeRegex: /[^ a-zA-Z0-9]/g,\n\n  stringEscapeFn: function(c) {\n    return '\\\\u' + ('0000' + c.charCodeAt(0).toString(16)).slice(-4);\n  },\n\n  escape: function(value) {\n    if (isString(value)) return \"'\" + value.replace(this.stringEscapeRegex, this.stringEscapeFn) + \"'\";\n    if (isNumber(value)) return value.toString();\n    if (value === true) return 'true';\n    if (value === false) return 'false';\n    if (value === null) return 'null';\n    if (typeof value === 'undefined') return 'undefined';\n\n    throw $parseMinErr('esc', 'IMPOSSIBLE');\n  },\n\n  nextId: function(skip, init) {\n    var id = 'v' + (this.state.nextId++);\n    if (!skip) {\n      this.current().vars.push(id + (init ? '=' + init : ''));\n    }\n    return id;\n  },\n\n  current: function() {\n    return this.state[this.state.computing];\n  }\n};\n\n\nfunction ASTInterpreter(astBuilder, $filter) {\n  this.astBuilder = astBuilder;\n  this.$filter = $filter;\n}\n\nASTInterpreter.prototype = {\n  compile: function(expression, expensiveChecks) {\n    var self = this;\n    var ast = this.astBuilder.ast(expression);\n    this.expression = expression;\n    this.expensiveChecks = expensiveChecks;\n    findConstantAndWatchExpressions(ast, self.$filter);\n    var assignable;\n    var assign;\n    if ((assignable = assignableAST(ast))) {\n      assign = this.recurse(assignable);\n    }\n    var toWatch = getInputs(ast.body);\n    var inputs;\n    if (toWatch) {\n      inputs = [];\n      forEach(toWatch, function(watch, key) {\n        var input = self.recurse(watch);\n        watch.input = input;\n        inputs.push(input);\n        watch.watchId = key;\n      });\n    }\n    var expressions = [];\n    forEach(ast.body, function(expression) {\n      expressions.push(self.recurse(expression.expression));\n    });\n    var fn = ast.body.length === 0 ? noop :\n             ast.body.length === 1 ? expressions[0] :\n             function(scope, locals) {\n               var lastValue;\n               forEach(expressions, function(exp) {\n                 lastValue = exp(scope, locals);\n               });\n               return lastValue;\n             };\n    if (assign) {\n      fn.assign = function(scope, value, locals) {\n        return assign(scope, locals, value);\n      };\n    }\n    if (inputs) {\n      fn.inputs = inputs;\n    }\n    fn.literal = isLiteral(ast);\n    fn.constant = isConstant(ast);\n    return fn;\n  },\n\n  recurse: function(ast, context, create) {\n    var left, right, self = this, args, expression;\n    if (ast.input) {\n      return this.inputs(ast.input, ast.watchId);\n    }\n    switch (ast.type) {\n    case AST.Literal:\n      return this.value(ast.value, context);\n    case AST.UnaryExpression:\n      right = this.recurse(ast.argument);\n      return this['unary' + ast.operator](right, context);\n    case AST.BinaryExpression:\n      left = this.recurse(ast.left);\n      right = this.recurse(ast.right);\n      return this['binary' + ast.operator](left, right, context);\n    case AST.LogicalExpression:\n      left = this.recurse(ast.left);\n      right = this.recurse(ast.right);\n      return this['binary' + ast.operator](left, right, context);\n    case AST.ConditionalExpression:\n      return this['ternary?:'](\n        this.recurse(ast.test),\n        this.recurse(ast.alternate),\n        this.recurse(ast.consequent),\n        context\n      );\n    case AST.Identifier:\n      ensureSafeMemberName(ast.name, self.expression);\n      return self.identifier(ast.name,\n                             self.expensiveChecks || isPossiblyDangerousMemberName(ast.name),\n                             context, create, self.expression);\n    case AST.MemberExpression:\n      left = this.recurse(ast.object, false, !!create);\n      if (!ast.computed) {\n        ensureSafeMemberName(ast.property.name, self.expression);\n        right = ast.property.name;\n      }\n      if (ast.computed) right = this.recurse(ast.property);\n      return ast.computed ?\n        this.computedMember(left, right, context, create, self.expression) :\n        this.nonComputedMember(left, right, self.expensiveChecks, context, create, self.expression);\n    case AST.CallExpression:\n      args = [];\n      forEach(ast.arguments, function(expr) {\n        args.push(self.recurse(expr));\n      });\n      if (ast.filter) right = this.$filter(ast.callee.name);\n      if (!ast.filter) right = this.recurse(ast.callee, true);\n      return ast.filter ?\n        function(scope, locals, assign, inputs) {\n          var values = [];\n          for (var i = 0; i < args.length; ++i) {\n            values.push(args[i](scope, locals, assign, inputs));\n          }\n          var value = right.apply(undefined, values, inputs);\n          return context ? {context: undefined, name: undefined, value: value} : value;\n        } :\n        function(scope, locals, assign, inputs) {\n          var rhs = right(scope, locals, assign, inputs);\n          var value;\n          if (rhs.value != null) {\n            ensureSafeObject(rhs.context, self.expression);\n            ensureSafeFunction(rhs.value, self.expression);\n            var values = [];\n            for (var i = 0; i < args.length; ++i) {\n              values.push(ensureSafeObject(args[i](scope, locals, assign, inputs), self.expression));\n            }\n            value = ensureSafeObject(rhs.value.apply(rhs.context, values), self.expression);\n          }\n          return context ? {value: value} : value;\n        };\n    case AST.AssignmentExpression:\n      left = this.recurse(ast.left, true, 1);\n      right = this.recurse(ast.right);\n      return function(scope, locals, assign, inputs) {\n        var lhs = left(scope, locals, assign, inputs);\n        var rhs = right(scope, locals, assign, inputs);\n        ensureSafeObject(lhs.value, self.expression);\n        ensureSafeAssignContext(lhs.context);\n        lhs.context[lhs.name] = rhs;\n        return context ? {value: rhs} : rhs;\n      };\n    case AST.ArrayExpression:\n      args = [];\n      forEach(ast.elements, function(expr) {\n        args.push(self.recurse(expr));\n      });\n      return function(scope, locals, assign, inputs) {\n        var value = [];\n        for (var i = 0; i < args.length; ++i) {\n          value.push(args[i](scope, locals, assign, inputs));\n        }\n        return context ? {value: value} : value;\n      };\n    case AST.ObjectExpression:\n      args = [];\n      forEach(ast.properties, function(property) {\n        if (property.computed) {\n          args.push({key: self.recurse(property.key),\n                     computed: true,\n                     value: self.recurse(property.value)\n          });\n        } else {\n          args.push({key: property.key.type === AST.Identifier ?\n                          property.key.name :\n                          ('' + property.key.value),\n                     computed: false,\n                     value: self.recurse(property.value)\n          });\n        }\n      });\n      return function(scope, locals, assign, inputs) {\n        var value = {};\n        for (var i = 0; i < args.length; ++i) {\n          if (args[i].computed) {\n            value[args[i].key(scope, locals, assign, inputs)] = args[i].value(scope, locals, assign, inputs);\n          } else {\n            value[args[i].key] = args[i].value(scope, locals, assign, inputs);\n          }\n        }\n        return context ? {value: value} : value;\n      };\n    case AST.ThisExpression:\n      return function(scope) {\n        return context ? {value: scope} : scope;\n      };\n    case AST.LocalsExpression:\n      return function(scope, locals) {\n        return context ? {value: locals} : locals;\n      };\n    case AST.NGValueParameter:\n      return function(scope, locals, assign) {\n        return context ? {value: assign} : assign;\n      };\n    }\n  },\n\n  'unary+': function(argument, context) {\n    return function(scope, locals, assign, inputs) {\n      var arg = argument(scope, locals, assign, inputs);\n      if (isDefined(arg)) {\n        arg = +arg;\n      } else {\n        arg = 0;\n      }\n      return context ? {value: arg} : arg;\n    };\n  },\n  'unary-': function(argument, context) {\n    return function(scope, locals, assign, inputs) {\n      var arg = argument(scope, locals, assign, inputs);\n      if (isDefined(arg)) {\n        arg = -arg;\n      } else {\n        arg = 0;\n      }\n      return context ? {value: arg} : arg;\n    };\n  },\n  'unary!': function(argument, context) {\n    return function(scope, locals, assign, inputs) {\n      var arg = !argument(scope, locals, assign, inputs);\n      return context ? {value: arg} : arg;\n    };\n  },\n  'binary+': function(left, right, context) {\n    return function(scope, locals, assign, inputs) {\n      var lhs = left(scope, locals, assign, inputs);\n      var rhs = right(scope, locals, assign, inputs);\n      var arg = plusFn(lhs, rhs);\n      return context ? {value: arg} : arg;\n    };\n  },\n  'binary-': function(left, right, context) {\n    return function(scope, locals, assign, inputs) {\n      var lhs = left(scope, locals, assign, inputs);\n      var rhs = right(scope, locals, assign, inputs);\n      var arg = (isDefined(lhs) ? lhs : 0) - (isDefined(rhs) ? rhs : 0);\n      return context ? {value: arg} : arg;\n    };\n  },\n  'binary*': function(left, right, context) {\n    return function(scope, locals, assign, inputs) {\n      var arg = left(scope, locals, assign, inputs) * right(scope, locals, assign, inputs);\n      return context ? {value: arg} : arg;\n    };\n  },\n  'binary/': function(left, right, context) {\n    return function(scope, locals, assign, inputs) {\n      var arg = left(scope, locals, assign, inputs) / right(scope, locals, assign, inputs);\n      return context ? {value: arg} : arg;\n    };\n  },\n  'binary%': function(left, right, context) {\n    return function(scope, locals, assign, inputs) {\n      var arg = left(scope, locals, assign, inputs) % right(scope, locals, assign, inputs);\n      return context ? {value: arg} : arg;\n    };\n  },\n  'binary===': function(left, right, context) {\n    return function(scope, locals, assign, inputs) {\n      var arg = left(scope, locals, assign, inputs) === right(scope, locals, assign, inputs);\n      return context ? {value: arg} : arg;\n    };\n  },\n  'binary!==': function(left, right, context) {\n    return function(scope, locals, assign, inputs) {\n      var arg = left(scope, locals, assign, inputs) !== right(scope, locals, assign, inputs);\n      return context ? {value: arg} : arg;\n    };\n  },\n  'binary==': function(left, right, context) {\n    return function(scope, locals, assign, inputs) {\n      var arg = left(scope, locals, assign, inputs) == right(scope, locals, assign, inputs);\n      return context ? {value: arg} : arg;\n    };\n  },\n  'binary!=': function(left, right, context) {\n    return function(scope, locals, assign, inputs) {\n      var arg = left(scope, locals, assign, inputs) != right(scope, locals, assign, inputs);\n      return context ? {value: arg} : arg;\n    };\n  },\n  'binary<': function(left, right, context) {\n    return function(scope, locals, assign, inputs) {\n      var arg = left(scope, locals, assign, inputs) < right(scope, locals, assign, inputs);\n      return context ? {value: arg} : arg;\n    };\n  },\n  'binary>': function(left, right, context) {\n    return function(scope, locals, assign, inputs) {\n      var arg = left(scope, locals, assign, inputs) > right(scope, locals, assign, inputs);\n      return context ? {value: arg} : arg;\n    };\n  },\n  'binary<=': function(left, right, context) {\n    return function(scope, locals, assign, inputs) {\n      var arg = left(scope, locals, assign, inputs) <= right(scope, locals, assign, inputs);\n      return context ? {value: arg} : arg;\n    };\n  },\n  'binary>=': function(left, right, context) {\n    return function(scope, locals, assign, inputs) {\n      var arg = left(scope, locals, assign, inputs) >= right(scope, locals, assign, inputs);\n      return context ? {value: arg} : arg;\n    };\n  },\n  'binary&&': function(left, right, context) {\n    return function(scope, locals, assign, inputs) {\n      var arg = left(scope, locals, assign, inputs) && right(scope, locals, assign, inputs);\n      return context ? {value: arg} : arg;\n    };\n  },\n  'binary||': function(left, right, context) {\n    return function(scope, locals, assign, inputs) {\n      var arg = left(scope, locals, assign, inputs) || right(scope, locals, assign, inputs);\n      return context ? {value: arg} : arg;\n    };\n  },\n  'ternary?:': function(test, alternate, consequent, context) {\n    return function(scope, locals, assign, inputs) {\n      var arg = test(scope, locals, assign, inputs) ? alternate(scope, locals, assign, inputs) : consequent(scope, locals, assign, inputs);\n      return context ? {value: arg} : arg;\n    };\n  },\n  value: function(value, context) {\n    return function() { return context ? {context: undefined, name: undefined, value: value} : value; };\n  },\n  identifier: function(name, expensiveChecks, context, create, expression) {\n    return function(scope, locals, assign, inputs) {\n      var base = locals && (name in locals) ? locals : scope;\n      if (create && create !== 1 && base && !(base[name])) {\n        base[name] = {};\n      }\n      var value = base ? base[name] : undefined;\n      if (expensiveChecks) {\n        ensureSafeObject(value, expression);\n      }\n      if (context) {\n        return {context: base, name: name, value: value};\n      } else {\n        return value;\n      }\n    };\n  },\n  computedMember: function(left, right, context, create, expression) {\n    return function(scope, locals, assign, inputs) {\n      var lhs = left(scope, locals, assign, inputs);\n      var rhs;\n      var value;\n      if (lhs != null) {\n        rhs = right(scope, locals, assign, inputs);\n        rhs = getStringValue(rhs);\n        ensureSafeMemberName(rhs, expression);\n        if (create && create !== 1) {\n          ensureSafeAssignContext(lhs);\n          if (lhs && !(lhs[rhs])) {\n            lhs[rhs] = {};\n          }\n        }\n        value = lhs[rhs];\n        ensureSafeObject(value, expression);\n      }\n      if (context) {\n        return {context: lhs, name: rhs, value: value};\n      } else {\n        return value;\n      }\n    };\n  },\n  nonComputedMember: function(left, right, expensiveChecks, context, create, expression) {\n    return function(scope, locals, assign, inputs) {\n      var lhs = left(scope, locals, assign, inputs);\n      if (create && create !== 1) {\n        ensureSafeAssignContext(lhs);\n        if (lhs && !(lhs[right])) {\n          lhs[right] = {};\n        }\n      }\n      var value = lhs != null ? lhs[right] : undefined;\n      if (expensiveChecks || isPossiblyDangerousMemberName(right)) {\n        ensureSafeObject(value, expression);\n      }\n      if (context) {\n        return {context: lhs, name: right, value: value};\n      } else {\n        return value;\n      }\n    };\n  },\n  inputs: function(input, watchId) {\n    return function(scope, value, locals, inputs) {\n      if (inputs) return inputs[watchId];\n      return input(scope, value, locals);\n    };\n  }\n};\n\n/**\n * @constructor\n */\nvar Parser = function(lexer, $filter, options) {\n  this.lexer = lexer;\n  this.$filter = $filter;\n  this.options = options;\n  this.ast = new AST(lexer, options);\n  this.astCompiler = options.csp ? new ASTInterpreter(this.ast, $filter) :\n                                   new ASTCompiler(this.ast, $filter);\n};\n\nParser.prototype = {\n  constructor: Parser,\n\n  parse: function(text) {\n    return this.astCompiler.compile(text, this.options.expensiveChecks);\n  }\n};\n\nfunction isPossiblyDangerousMemberName(name) {\n  return name == 'constructor';\n}\n\nvar objectValueOf = Object.prototype.valueOf;\n\nfunction getValueOf(value) {\n  return isFunction(value.valueOf) ? value.valueOf() : objectValueOf.call(value);\n}\n\n///////////////////////////////////\n\n/**\n * @ngdoc service\n * @name $parse\n * @kind function\n *\n * @description\n *\n * Converts Angular {@link guide/expression expression} into a function.\n *\n * ```js\n *   var getter = $parse('user.name');\n *   var setter = getter.assign;\n *   var context = {user:{name:'angular'}};\n *   var locals = {user:{name:'local'}};\n *\n *   expect(getter(context)).toEqual('angular');\n *   setter(context, 'newValue');\n *   expect(context.user.name).toEqual('newValue');\n *   expect(getter(context, locals)).toEqual('local');\n * ```\n *\n *\n * @param {string} expression String expression to compile.\n * @returns {function(context, locals)} a function which represents the compiled expression:\n *\n *    * `context` – `{object}` – an object against which any expressions embedded in the strings\n *      are evaluated against (typically a scope object).\n *    * `locals` – `{object=}` – local variables context object, useful for overriding values in\n *      `context`.\n *\n *    The returned function also has the following properties:\n *      * `literal` – `{boolean}` – whether the expression's top-level node is a JavaScript\n *        literal.\n *      * `constant` – `{boolean}` – whether the expression is made entirely of JavaScript\n *        constant literals.\n *      * `assign` – `{?function(context, value)}` – if the expression is assignable, this will be\n *        set to a function to change its value on the given context.\n *\n */\n\n\n/**\n * @ngdoc provider\n * @name $parseProvider\n *\n * @description\n * `$parseProvider` can be used for configuring the default behavior of the {@link ng.$parse $parse}\n *  service.\n */\nfunction $ParseProvider() {\n  var cacheDefault = createMap();\n  var cacheExpensive = createMap();\n  var literals = {\n    'true': true,\n    'false': false,\n    'null': null,\n    'undefined': undefined\n  };\n  var identStart, identContinue;\n\n  /**\n   * @ngdoc method\n   * @name $parseProvider#addLiteral\n   * @description\n   *\n   * Configure $parse service to add literal values that will be present as literal at expressions.\n   *\n   * @param {string} literalName Token for the literal value. The literal name value must be a valid literal name.\n   * @param {*} literalValue Value for this literal. All literal values must be primitives or `undefined`.\n   *\n   **/\n  this.addLiteral = function(literalName, literalValue) {\n    literals[literalName] = literalValue;\n  };\n\n /**\n  * @ngdoc method\n  * @name $parseProvider#setIdentifierFns\n  * @description\n  *\n  * Allows defining the set of characters that are allowed in Angular expressions. The function\n  * `identifierStart` will get called to know if a given character is a valid character to be the\n  * first character for an identifier. The function `identifierContinue` will get called to know if\n  * a given character is a valid character to be a follow-up identifier character. The functions\n  * `identifierStart` and `identifierContinue` will receive as arguments the single character to be\n  * identifier and the character code point. These arguments will be `string` and `numeric`. Keep in\n  * mind that the `string` parameter can be two characters long depending on the character\n  * representation. It is expected for the function to return `true` or `false`, whether that\n  * character is allowed or not.\n  *\n  * Since this function will be called extensivelly, keep the implementation of these functions fast,\n  * as the performance of these functions have a direct impact on the expressions parsing speed.\n  *\n  * @param {function=} identifierStart The function that will decide whether the given character is\n  *   a valid identifier start character.\n  * @param {function=} identifierContinue The function that will decide whether the given character is\n  *   a valid identifier continue character.\n  */\n  this.setIdentifierFns = function(identifierStart, identifierContinue) {\n    identStart = identifierStart;\n    identContinue = identifierContinue;\n    return this;\n  };\n\n  this.$get = ['$filter', function($filter) {\n    var noUnsafeEval = csp().noUnsafeEval;\n    var $parseOptions = {\n          csp: noUnsafeEval,\n          expensiveChecks: false,\n          literals: copy(literals),\n          isIdentifierStart: isFunction(identStart) && identStart,\n          isIdentifierContinue: isFunction(identContinue) && identContinue\n        },\n        $parseOptionsExpensive = {\n          csp: noUnsafeEval,\n          expensiveChecks: true,\n          literals: copy(literals),\n          isIdentifierStart: isFunction(identStart) && identStart,\n          isIdentifierContinue: isFunction(identContinue) && identContinue\n        };\n    var runningChecksEnabled = false;\n\n    $parse.$$runningExpensiveChecks = function() {\n      return runningChecksEnabled;\n    };\n\n    return $parse;\n\n    function $parse(exp, interceptorFn, expensiveChecks) {\n      var parsedExpression, oneTime, cacheKey;\n\n      expensiveChecks = expensiveChecks || runningChecksEnabled;\n\n      switch (typeof exp) {\n        case 'string':\n          exp = exp.trim();\n          cacheKey = exp;\n\n          var cache = (expensiveChecks ? cacheExpensive : cacheDefault);\n          parsedExpression = cache[cacheKey];\n\n          if (!parsedExpression) {\n            if (exp.charAt(0) === ':' && exp.charAt(1) === ':') {\n              oneTime = true;\n              exp = exp.substring(2);\n            }\n            var parseOptions = expensiveChecks ? $parseOptionsExpensive : $parseOptions;\n            var lexer = new Lexer(parseOptions);\n            var parser = new Parser(lexer, $filter, parseOptions);\n            parsedExpression = parser.parse(exp);\n            if (parsedExpression.constant) {\n              parsedExpression.$$watchDelegate = constantWatchDelegate;\n            } else if (oneTime) {\n              parsedExpression.$$watchDelegate = parsedExpression.literal ?\n                  oneTimeLiteralWatchDelegate : oneTimeWatchDelegate;\n            } else if (parsedExpression.inputs) {\n              parsedExpression.$$watchDelegate = inputsWatchDelegate;\n            }\n            if (expensiveChecks) {\n              parsedExpression = expensiveChecksInterceptor(parsedExpression);\n            }\n            cache[cacheKey] = parsedExpression;\n          }\n          return addInterceptor(parsedExpression, interceptorFn);\n\n        case 'function':\n          return addInterceptor(exp, interceptorFn);\n\n        default:\n          return addInterceptor(noop, interceptorFn);\n      }\n    }\n\n    function expensiveChecksInterceptor(fn) {\n      if (!fn) return fn;\n      expensiveCheckFn.$$watchDelegate = fn.$$watchDelegate;\n      expensiveCheckFn.assign = expensiveChecksInterceptor(fn.assign);\n      expensiveCheckFn.constant = fn.constant;\n      expensiveCheckFn.literal = fn.literal;\n      for (var i = 0; fn.inputs && i < fn.inputs.length; ++i) {\n        fn.inputs[i] = expensiveChecksInterceptor(fn.inputs[i]);\n      }\n      expensiveCheckFn.inputs = fn.inputs;\n\n      return expensiveCheckFn;\n\n      function expensiveCheckFn(scope, locals, assign, inputs) {\n        var expensiveCheckOldValue = runningChecksEnabled;\n        runningChecksEnabled = true;\n        try {\n          return fn(scope, locals, assign, inputs);\n        } finally {\n          runningChecksEnabled = expensiveCheckOldValue;\n        }\n      }\n    }\n\n    function expressionInputDirtyCheck(newValue, oldValueOfValue) {\n\n      if (newValue == null || oldValueOfValue == null) { // null/undefined\n        return newValue === oldValueOfValue;\n      }\n\n      if (typeof newValue === 'object') {\n\n        // attempt to convert the value to a primitive type\n        // TODO(docs): add a note to docs that by implementing valueOf even objects and arrays can\n        //             be cheaply dirty-checked\n        newValue = getValueOf(newValue);\n\n        if (typeof newValue === 'object') {\n          // objects/arrays are not supported - deep-watching them would be too expensive\n          return false;\n        }\n\n        // fall-through to the primitive equality check\n      }\n\n      //Primitive or NaN\n      return newValue === oldValueOfValue || (newValue !== newValue && oldValueOfValue !== oldValueOfValue);\n    }\n\n    function inputsWatchDelegate(scope, listener, objectEquality, parsedExpression, prettyPrintExpression) {\n      var inputExpressions = parsedExpression.inputs;\n      var lastResult;\n\n      if (inputExpressions.length === 1) {\n        var oldInputValueOf = expressionInputDirtyCheck; // init to something unique so that equals check fails\n        inputExpressions = inputExpressions[0];\n        return scope.$watch(function expressionInputWatch(scope) {\n          var newInputValue = inputExpressions(scope);\n          if (!expressionInputDirtyCheck(newInputValue, oldInputValueOf)) {\n            lastResult = parsedExpression(scope, undefined, undefined, [newInputValue]);\n            oldInputValueOf = newInputValue && getValueOf(newInputValue);\n          }\n          return lastResult;\n        }, listener, objectEquality, prettyPrintExpression);\n      }\n\n      var oldInputValueOfValues = [];\n      var oldInputValues = [];\n      for (var i = 0, ii = inputExpressions.length; i < ii; i++) {\n        oldInputValueOfValues[i] = expressionInputDirtyCheck; // init to something unique so that equals check fails\n        oldInputValues[i] = null;\n      }\n\n      return scope.$watch(function expressionInputsWatch(scope) {\n        var changed = false;\n\n        for (var i = 0, ii = inputExpressions.length; i < ii; i++) {\n          var newInputValue = inputExpressions[i](scope);\n          if (changed || (changed = !expressionInputDirtyCheck(newInputValue, oldInputValueOfValues[i]))) {\n            oldInputValues[i] = newInputValue;\n            oldInputValueOfValues[i] = newInputValue && getValueOf(newInputValue);\n          }\n        }\n\n        if (changed) {\n          lastResult = parsedExpression(scope, undefined, undefined, oldInputValues);\n        }\n\n        return lastResult;\n      }, listener, objectEquality, prettyPrintExpression);\n    }\n\n    function oneTimeWatchDelegate(scope, listener, objectEquality, parsedExpression) {\n      var unwatch, lastValue;\n      return unwatch = scope.$watch(function oneTimeWatch(scope) {\n        return parsedExpression(scope);\n      }, function oneTimeListener(value, old, scope) {\n        lastValue = value;\n        if (isFunction(listener)) {\n          listener.apply(this, arguments);\n        }\n        if (isDefined(value)) {\n          scope.$$postDigest(function() {\n            if (isDefined(lastValue)) {\n              unwatch();\n            }\n          });\n        }\n      }, objectEquality);\n    }\n\n    function oneTimeLiteralWatchDelegate(scope, listener, objectEquality, parsedExpression) {\n      var unwatch, lastValue;\n      return unwatch = scope.$watch(function oneTimeWatch(scope) {\n        return parsedExpression(scope);\n      }, function oneTimeListener(value, old, scope) {\n        lastValue = value;\n        if (isFunction(listener)) {\n          listener.call(this, value, old, scope);\n        }\n        if (isAllDefined(value)) {\n          scope.$$postDigest(function() {\n            if (isAllDefined(lastValue)) unwatch();\n          });\n        }\n      }, objectEquality);\n\n      function isAllDefined(value) {\n        var allDefined = true;\n        forEach(value, function(val) {\n          if (!isDefined(val)) allDefined = false;\n        });\n        return allDefined;\n      }\n    }\n\n    function constantWatchDelegate(scope, listener, objectEquality, parsedExpression) {\n      var unwatch;\n      return unwatch = scope.$watch(function constantWatch(scope) {\n        unwatch();\n        return parsedExpression(scope);\n      }, listener, objectEquality);\n    }\n\n    function addInterceptor(parsedExpression, interceptorFn) {\n      if (!interceptorFn) return parsedExpression;\n      var watchDelegate = parsedExpression.$$watchDelegate;\n      var useInputs = false;\n\n      var regularWatch =\n          watchDelegate !== oneTimeLiteralWatchDelegate &&\n          watchDelegate !== oneTimeWatchDelegate;\n\n      var fn = regularWatch ? function regularInterceptedExpression(scope, locals, assign, inputs) {\n        var value = useInputs && inputs ? inputs[0] : parsedExpression(scope, locals, assign, inputs);\n        return interceptorFn(value, scope, locals);\n      } : function oneTimeInterceptedExpression(scope, locals, assign, inputs) {\n        var value = parsedExpression(scope, locals, assign, inputs);\n        var result = interceptorFn(value, scope, locals);\n        // we only return the interceptor's result if the\n        // initial value is defined (for bind-once)\n        return isDefined(value) ? result : value;\n      };\n\n      // Propagate $$watchDelegates other then inputsWatchDelegate\n      if (parsedExpression.$$watchDelegate &&\n          parsedExpression.$$watchDelegate !== inputsWatchDelegate) {\n        fn.$$watchDelegate = parsedExpression.$$watchDelegate;\n      } else if (!interceptorFn.$stateful) {\n        // If there is an interceptor, but no watchDelegate then treat the interceptor like\n        // we treat filters - it is assumed to be a pure function unless flagged with $stateful\n        fn.$$watchDelegate = inputsWatchDelegate;\n        useInputs = !parsedExpression.inputs;\n        fn.inputs = parsedExpression.inputs ? parsedExpression.inputs : [parsedExpression];\n      }\n\n      return fn;\n    }\n  }];\n}\n\n/**\n * @ngdoc service\n * @name $q\n * @requires $rootScope\n *\n * @description\n * A service that helps you run functions asynchronously, and use their return values (or exceptions)\n * when they are done processing.\n *\n * This is an implementation of promises/deferred objects inspired by\n * [Kris Kowal's Q](https://github.com/kriskowal/q).\n *\n * $q can be used in two fashions --- one which is more similar to Kris Kowal's Q or jQuery's Deferred\n * implementations, and the other which resembles ES6 (ES2015) promises to some degree.\n *\n * # $q constructor\n *\n * The streamlined ES6 style promise is essentially just using $q as a constructor which takes a `resolver`\n * function as the first argument. This is similar to the native Promise implementation from ES6,\n * see [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise).\n *\n * While the constructor-style use is supported, not all of the supporting methods from ES6 promises are\n * available yet.\n *\n * It can be used like so:\n *\n * ```js\n *   // for the purpose of this example let's assume that variables `$q` and `okToGreet`\n *   // are available in the current lexical scope (they could have been injected or passed in).\n *\n *   function asyncGreet(name) {\n *     // perform some asynchronous operation, resolve or reject the promise when appropriate.\n *     return $q(function(resolve, reject) {\n *       setTimeout(function() {\n *         if (okToGreet(name)) {\n *           resolve('Hello, ' + name + '!');\n *         } else {\n *           reject('Greeting ' + name + ' is not allowed.');\n *         }\n *       }, 1000);\n *     });\n *   }\n *\n *   var promise = asyncGreet('Robin Hood');\n *   promise.then(function(greeting) {\n *     alert('Success: ' + greeting);\n *   }, function(reason) {\n *     alert('Failed: ' + reason);\n *   });\n * ```\n *\n * Note: progress/notify callbacks are not currently supported via the ES6-style interface.\n *\n * Note: unlike ES6 behavior, an exception thrown in the constructor function will NOT implicitly reject the promise.\n *\n * However, the more traditional CommonJS-style usage is still available, and documented below.\n *\n * [The CommonJS Promise proposal](http://wiki.commonjs.org/wiki/Promises) describes a promise as an\n * interface for interacting with an object that represents the result of an action that is\n * performed asynchronously, and may or may not be finished at any given point in time.\n *\n * From the perspective of dealing with error handling, deferred and promise APIs are to\n * asynchronous programming what `try`, `catch` and `throw` keywords are to synchronous programming.\n *\n * ```js\n *   // for the purpose of this example let's assume that variables `$q` and `okToGreet`\n *   // are available in the current lexical scope (they could have been injected or passed in).\n *\n *   function asyncGreet(name) {\n *     var deferred = $q.defer();\n *\n *     setTimeout(function() {\n *       deferred.notify('About to greet ' + name + '.');\n *\n *       if (okToGreet(name)) {\n *         deferred.resolve('Hello, ' + name + '!');\n *       } else {\n *         deferred.reject('Greeting ' + name + ' is not allowed.');\n *       }\n *     }, 1000);\n *\n *     return deferred.promise;\n *   }\n *\n *   var promise = asyncGreet('Robin Hood');\n *   promise.then(function(greeting) {\n *     alert('Success: ' + greeting);\n *   }, function(reason) {\n *     alert('Failed: ' + reason);\n *   }, function(update) {\n *     alert('Got notification: ' + update);\n *   });\n * ```\n *\n * At first it might not be obvious why this extra complexity is worth the trouble. The payoff\n * comes in the way of guarantees that promise and deferred APIs make, see\n * https://github.com/kriskowal/uncommonjs/blob/master/promises/specification.md.\n *\n * Additionally the promise api allows for composition that is very hard to do with the\n * traditional callback ([CPS](http://en.wikipedia.org/wiki/Continuation-passing_style)) approach.\n * For more on this please see the [Q documentation](https://github.com/kriskowal/q) especially the\n * section on serial or parallel joining of promises.\n *\n * # The Deferred API\n *\n * A new instance of deferred is constructed by calling `$q.defer()`.\n *\n * The purpose of the deferred object is to expose the associated Promise instance as well as APIs\n * that can be used for signaling the successful or unsuccessful completion, as well as the status\n * of the task.\n *\n * **Methods**\n *\n * - `resolve(value)` – resolves the derived promise with the `value`. If the value is a rejection\n *   constructed via `$q.reject`, the promise will be rejected instead.\n * - `reject(reason)` – rejects the derived promise with the `reason`. This is equivalent to\n *   resolving it with a rejection constructed via `$q.reject`.\n * - `notify(value)` - provides updates on the status of the promise's execution. This may be called\n *   multiple times before the promise is either resolved or rejected.\n *\n * **Properties**\n *\n * - promise – `{Promise}` – promise object associated with this deferred.\n *\n *\n * # The Promise API\n *\n * A new promise instance is created when a deferred instance is created and can be retrieved by\n * calling `deferred.promise`.\n *\n * The purpose of the promise object is to allow for interested parties to get access to the result\n * of the deferred task when it completes.\n *\n * **Methods**\n *\n * - `then(successCallback, [errorCallback], [notifyCallback])` – regardless of when the promise was or\n *   will be resolved or rejected, `then` calls one of the success or error callbacks asynchronously\n *   as soon as the result is available. The callbacks are called with a single argument: the result\n *   or rejection reason. Additionally, the notify callback may be called zero or more times to\n *   provide a progress indication, before the promise is resolved or rejected.\n *\n *   This method *returns a new promise* which is resolved or rejected via the return value of the\n *   `successCallback`, `errorCallback` (unless that value is a promise, in which case it is resolved\n *   with the value which is resolved in that promise using\n *   [promise chaining](http://www.html5rocks.com/en/tutorials/es6/promises/#toc-promises-queues)).\n *   It also notifies via the return value of the `notifyCallback` method. The promise cannot be\n *   resolved or rejected from the notifyCallback method. The errorCallback and notifyCallback\n *   arguments are optional.\n *\n * - `catch(errorCallback)` – shorthand for `promise.then(null, errorCallback)`\n *\n * - `finally(callback, notifyCallback)` – allows you to observe either the fulfillment or rejection of a promise,\n *   but to do so without modifying the final value. This is useful to release resources or do some\n *   clean-up that needs to be done whether the promise was rejected or resolved. See the [full\n *   specification](https://github.com/kriskowal/q/wiki/API-Reference#promisefinallycallback) for\n *   more information.\n *\n * # Chaining promises\n *\n * Because calling the `then` method of a promise returns a new derived promise, it is easily\n * possible to create a chain of promises:\n *\n * ```js\n *   promiseB = promiseA.then(function(result) {\n *     return result + 1;\n *   });\n *\n *   // promiseB will be resolved immediately after promiseA is resolved and its value\n *   // will be the result of promiseA incremented by 1\n * ```\n *\n * It is possible to create chains of any length and since a promise can be resolved with another\n * promise (which will defer its resolution further), it is possible to pause/defer resolution of\n * the promises at any point in the chain. This makes it possible to implement powerful APIs like\n * $http's response interceptors.\n *\n *\n * # Differences between Kris Kowal's Q and $q\n *\n *  There are two main differences:\n *\n * - $q is integrated with the {@link ng.$rootScope.Scope} Scope model observation\n *   mechanism in angular, which means faster propagation of resolution or rejection into your\n *   models and avoiding unnecessary browser repaints, which would result in flickering UI.\n * - Q has many more features than $q, but that comes at a cost of bytes. $q is tiny, but contains\n *   all the important functionality needed for common async tasks.\n *\n * # Testing\n *\n *  ```js\n *    it('should simulate promise', inject(function($q, $rootScope) {\n *      var deferred = $q.defer();\n *      var promise = deferred.promise;\n *      var resolvedValue;\n *\n *      promise.then(function(value) { resolvedValue = value; });\n *      expect(resolvedValue).toBeUndefined();\n *\n *      // Simulate resolving of promise\n *      deferred.resolve(123);\n *      // Note that the 'then' function does not get called synchronously.\n *      // This is because we want the promise API to always be async, whether or not\n *      // it got called synchronously or asynchronously.\n *      expect(resolvedValue).toBeUndefined();\n *\n *      // Propagate promise resolution to 'then' functions using $apply().\n *      $rootScope.$apply();\n *      expect(resolvedValue).toEqual(123);\n *    }));\n *  ```\n *\n * @param {function(function, function)} resolver Function which is responsible for resolving or\n *   rejecting the newly created promise. The first parameter is a function which resolves the\n *   promise, the second parameter is a function which rejects the promise.\n *\n * @returns {Promise} The newly created promise.\n */\nfunction $QProvider() {\n\n  this.$get = ['$rootScope', '$exceptionHandler', function($rootScope, $exceptionHandler) {\n    return qFactory(function(callback) {\n      $rootScope.$evalAsync(callback);\n    }, $exceptionHandler);\n  }];\n}\n\nfunction $$QProvider() {\n  this.$get = ['$browser', '$exceptionHandler', function($browser, $exceptionHandler) {\n    return qFactory(function(callback) {\n      $browser.defer(callback);\n    }, $exceptionHandler);\n  }];\n}\n\n/**\n * Constructs a promise manager.\n *\n * @param {function(function)} nextTick Function for executing functions in the next turn.\n * @param {function(...*)} exceptionHandler Function into which unexpected exceptions are passed for\n *     debugging purposes.\n * @returns {object} Promise manager.\n */\nfunction qFactory(nextTick, exceptionHandler) {\n  var $qMinErr = minErr('$q', TypeError);\n\n  /**\n   * @ngdoc method\n   * @name ng.$q#defer\n   * @kind function\n   *\n   * @description\n   * Creates a `Deferred` object which represents a task which will finish in the future.\n   *\n   * @returns {Deferred} Returns a new instance of deferred.\n   */\n  var defer = function() {\n    var d = new Deferred();\n    //Necessary to support unbound execution :/\n    d.resolve = simpleBind(d, d.resolve);\n    d.reject = simpleBind(d, d.reject);\n    d.notify = simpleBind(d, d.notify);\n    return d;\n  };\n\n  function Promise() {\n    this.$$state = { status: 0 };\n  }\n\n  extend(Promise.prototype, {\n    then: function(onFulfilled, onRejected, progressBack) {\n      if (isUndefined(onFulfilled) && isUndefined(onRejected) && isUndefined(progressBack)) {\n        return this;\n      }\n      var result = new Deferred();\n\n      this.$$state.pending = this.$$state.pending || [];\n      this.$$state.pending.push([result, onFulfilled, onRejected, progressBack]);\n      if (this.$$state.status > 0) scheduleProcessQueue(this.$$state);\n\n      return result.promise;\n    },\n\n    \"catch\": function(callback) {\n      return this.then(null, callback);\n    },\n\n    \"finally\": function(callback, progressBack) {\n      return this.then(function(value) {\n        return handleCallback(value, true, callback);\n      }, function(error) {\n        return handleCallback(error, false, callback);\n      }, progressBack);\n    }\n  });\n\n  //Faster, more basic than angular.bind http://jsperf.com/angular-bind-vs-custom-vs-native\n  function simpleBind(context, fn) {\n    return function(value) {\n      fn.call(context, value);\n    };\n  }\n\n  function processQueue(state) {\n    var fn, deferred, pending;\n\n    pending = state.pending;\n    state.processScheduled = false;\n    state.pending = undefined;\n    for (var i = 0, ii = pending.length; i < ii; ++i) {\n      deferred = pending[i][0];\n      fn = pending[i][state.status];\n      try {\n        if (isFunction(fn)) {\n          deferred.resolve(fn(state.value));\n        } else if (state.status === 1) {\n          deferred.resolve(state.value);\n        } else {\n          deferred.reject(state.value);\n        }\n      } catch (e) {\n        deferred.reject(e);\n        exceptionHandler(e);\n      }\n    }\n  }\n\n  function scheduleProcessQueue(state) {\n    if (state.processScheduled || !state.pending) return;\n    state.processScheduled = true;\n    nextTick(function() { processQueue(state); });\n  }\n\n  function Deferred() {\n    this.promise = new Promise();\n  }\n\n  extend(Deferred.prototype, {\n    resolve: function(val) {\n      if (this.promise.$$state.status) return;\n      if (val === this.promise) {\n        this.$$reject($qMinErr(\n          'qcycle',\n          \"Expected promise to be resolved with value other than itself '{0}'\",\n          val));\n      } else {\n        this.$$resolve(val);\n      }\n\n    },\n\n    $$resolve: function(val) {\n      var then;\n      var that = this;\n      var done = false;\n      try {\n        if ((isObject(val) || isFunction(val))) then = val && val.then;\n        if (isFunction(then)) {\n          this.promise.$$state.status = -1;\n          then.call(val, resolvePromise, rejectPromise, simpleBind(this, this.notify));\n        } else {\n          this.promise.$$state.value = val;\n          this.promise.$$state.status = 1;\n          scheduleProcessQueue(this.promise.$$state);\n        }\n      } catch (e) {\n        rejectPromise(e);\n        exceptionHandler(e);\n      }\n\n      function resolvePromise(val) {\n        if (done) return;\n        done = true;\n        that.$$resolve(val);\n      }\n      function rejectPromise(val) {\n        if (done) return;\n        done = true;\n        that.$$reject(val);\n      }\n    },\n\n    reject: function(reason) {\n      if (this.promise.$$state.status) return;\n      this.$$reject(reason);\n    },\n\n    $$reject: function(reason) {\n      this.promise.$$state.value = reason;\n      this.promise.$$state.status = 2;\n      scheduleProcessQueue(this.promise.$$state);\n    },\n\n    notify: function(progress) {\n      var callbacks = this.promise.$$state.pending;\n\n      if ((this.promise.$$state.status <= 0) && callbacks && callbacks.length) {\n        nextTick(function() {\n          var callback, result;\n          for (var i = 0, ii = callbacks.length; i < ii; i++) {\n            result = callbacks[i][0];\n            callback = callbacks[i][3];\n            try {\n              result.notify(isFunction(callback) ? callback(progress) : progress);\n            } catch (e) {\n              exceptionHandler(e);\n            }\n          }\n        });\n      }\n    }\n  });\n\n  /**\n   * @ngdoc method\n   * @name $q#reject\n   * @kind function\n   *\n   * @description\n   * Creates a promise that is resolved as rejected with the specified `reason`. This api should be\n   * used to forward rejection in a chain of promises. If you are dealing with the last promise in\n   * a promise chain, you don't need to worry about it.\n   *\n   * When comparing deferreds/promises to the familiar behavior of try/catch/throw, think of\n   * `reject` as the `throw` keyword in JavaScript. This also means that if you \"catch\" an error via\n   * a promise error callback and you want to forward the error to the promise derived from the\n   * current promise, you have to \"rethrow\" the error by returning a rejection constructed via\n   * `reject`.\n   *\n   * ```js\n   *   promiseB = promiseA.then(function(result) {\n   *     // success: do something and resolve promiseB\n   *     //          with the old or a new result\n   *     return result;\n   *   }, function(reason) {\n   *     // error: handle the error if possible and\n   *     //        resolve promiseB with newPromiseOrValue,\n   *     //        otherwise forward the rejection to promiseB\n   *     if (canHandle(reason)) {\n   *      // handle the error and recover\n   *      return newPromiseOrValue;\n   *     }\n   *     return $q.reject(reason);\n   *   });\n   * ```\n   *\n   * @param {*} reason Constant, message, exception or an object representing the rejection reason.\n   * @returns {Promise} Returns a promise that was already resolved as rejected with the `reason`.\n   */\n  var reject = function(reason) {\n    var result = new Deferred();\n    result.reject(reason);\n    return result.promise;\n  };\n\n  var makePromise = function makePromise(value, resolved) {\n    var result = new Deferred();\n    if (resolved) {\n      result.resolve(value);\n    } else {\n      result.reject(value);\n    }\n    return result.promise;\n  };\n\n  var handleCallback = function handleCallback(value, isResolved, callback) {\n    var callbackOutput = null;\n    try {\n      if (isFunction(callback)) callbackOutput = callback();\n    } catch (e) {\n      return makePromise(e, false);\n    }\n    if (isPromiseLike(callbackOutput)) {\n      return callbackOutput.then(function() {\n        return makePromise(value, isResolved);\n      }, function(error) {\n        return makePromise(error, false);\n      });\n    } else {\n      return makePromise(value, isResolved);\n    }\n  };\n\n  /**\n   * @ngdoc method\n   * @name $q#when\n   * @kind function\n   *\n   * @description\n   * Wraps an object that might be a value or a (3rd party) then-able promise into a $q promise.\n   * This is useful when you are dealing with an object that might or might not be a promise, or if\n   * the promise comes from a source that can't be trusted.\n   *\n   * @param {*} value Value or a promise\n   * @param {Function=} successCallback\n   * @param {Function=} errorCallback\n   * @param {Function=} progressCallback\n   * @returns {Promise} Returns a promise of the passed value or promise\n   */\n\n\n  var when = function(value, callback, errback, progressBack) {\n    var result = new Deferred();\n    result.resolve(value);\n    return result.promise.then(callback, errback, progressBack);\n  };\n\n  /**\n   * @ngdoc method\n   * @name $q#resolve\n   * @kind function\n   *\n   * @description\n   * Alias of {@link ng.$q#when when} to maintain naming consistency with ES6.\n   *\n   * @param {*} value Value or a promise\n   * @param {Function=} successCallback\n   * @param {Function=} errorCallback\n   * @param {Function=} progressCallback\n   * @returns {Promise} Returns a promise of the passed value or promise\n   */\n  var resolve = when;\n\n  /**\n   * @ngdoc method\n   * @name $q#all\n   * @kind function\n   *\n   * @description\n   * Combines multiple promises into a single promise that is resolved when all of the input\n   * promises are resolved.\n   *\n   * @param {Array.<Promise>|Object.<Promise>} promises An array or hash of promises.\n   * @returns {Promise} Returns a single promise that will be resolved with an array/hash of values,\n   *   each value corresponding to the promise at the same index/key in the `promises` array/hash.\n   *   If any of the promises is resolved with a rejection, this resulting promise will be rejected\n   *   with the same rejection value.\n   */\n\n  function all(promises) {\n    var deferred = new Deferred(),\n        counter = 0,\n        results = isArray(promises) ? [] : {};\n\n    forEach(promises, function(promise, key) {\n      counter++;\n      when(promise).then(function(value) {\n        if (results.hasOwnProperty(key)) return;\n        results[key] = value;\n        if (!(--counter)) deferred.resolve(results);\n      }, function(reason) {\n        if (results.hasOwnProperty(key)) return;\n        deferred.reject(reason);\n      });\n    });\n\n    if (counter === 0) {\n      deferred.resolve(results);\n    }\n\n    return deferred.promise;\n  }\n\n  /**\n   * @ngdoc method\n   * @name $q#race\n   * @kind function\n   *\n   * @description\n   * Returns a promise that resolves or rejects as soon as one of those promises\n   * resolves or rejects, with the value or reason from that promise.\n   *\n   * @param {Array.<Promise>|Object.<Promise>} promises An array or hash of promises.\n   * @returns {Promise} a promise that resolves or rejects as soon as one of the `promises`\n   * resolves or rejects, with the value or reason from that promise.\n   */\n\n  function race(promises) {\n    var deferred = defer();\n\n    forEach(promises, function(promise) {\n      when(promise).then(deferred.resolve, deferred.reject);\n    });\n\n    return deferred.promise;\n  }\n\n  var $Q = function Q(resolver) {\n    if (!isFunction(resolver)) {\n      throw $qMinErr('norslvr', \"Expected resolverFn, got '{0}'\", resolver);\n    }\n\n    var deferred = new Deferred();\n\n    function resolveFn(value) {\n      deferred.resolve(value);\n    }\n\n    function rejectFn(reason) {\n      deferred.reject(reason);\n    }\n\n    resolver(resolveFn, rejectFn);\n\n    return deferred.promise;\n  };\n\n  // Let's make the instanceof operator work for promises, so that\n  // `new $q(fn) instanceof $q` would evaluate to true.\n  $Q.prototype = Promise.prototype;\n\n  $Q.defer = defer;\n  $Q.reject = reject;\n  $Q.when = when;\n  $Q.resolve = resolve;\n  $Q.all = all;\n  $Q.race = race;\n\n  return $Q;\n}\n\nfunction $$RAFProvider() { //rAF\n  this.$get = ['$window', '$timeout', function($window, $timeout) {\n    var requestAnimationFrame = $window.requestAnimationFrame ||\n                                $window.webkitRequestAnimationFrame;\n\n    var cancelAnimationFrame = $window.cancelAnimationFrame ||\n                               $window.webkitCancelAnimationFrame ||\n                               $window.webkitCancelRequestAnimationFrame;\n\n    var rafSupported = !!requestAnimationFrame;\n    var raf = rafSupported\n      ? function(fn) {\n          var id = requestAnimationFrame(fn);\n          return function() {\n            cancelAnimationFrame(id);\n          };\n        }\n      : function(fn) {\n          var timer = $timeout(fn, 16.66, false); // 1000 / 60 = 16.666\n          return function() {\n            $timeout.cancel(timer);\n          };\n        };\n\n    raf.supported = rafSupported;\n\n    return raf;\n  }];\n}\n\n/**\n * DESIGN NOTES\n *\n * The design decisions behind the scope are heavily favored for speed and memory consumption.\n *\n * The typical use of scope is to watch the expressions, which most of the time return the same\n * value as last time so we optimize the operation.\n *\n * Closures construction is expensive in terms of speed as well as memory:\n *   - No closures, instead use prototypical inheritance for API\n *   - Internal state needs to be stored on scope directly, which means that private state is\n *     exposed as $$____ properties\n *\n * Loop operations are optimized by using while(count--) { ... }\n *   - This means that in order to keep the same order of execution as addition we have to add\n *     items to the array at the beginning (unshift) instead of at the end (push)\n *\n * Child scopes are created and removed often\n *   - Using an array would be slow since inserts in the middle are expensive; so we use linked lists\n *\n * There are fewer watches than observers. This is why you don't want the observer to be implemented\n * in the same way as watch. Watch requires return of the initialization function which is expensive\n * to construct.\n */\n\n\n/**\n * @ngdoc provider\n * @name $rootScopeProvider\n * @description\n *\n * Provider for the $rootScope service.\n */\n\n/**\n * @ngdoc method\n * @name $rootScopeProvider#digestTtl\n * @description\n *\n * Sets the number of `$digest` iterations the scope should attempt to execute before giving up and\n * assuming that the model is unstable.\n *\n * The current default is 10 iterations.\n *\n * In complex applications it's possible that the dependencies between `$watch`s will result in\n * several digest iterations. However if an application needs more than the default 10 digest\n * iterations for its model to stabilize then you should investigate what is causing the model to\n * continuously change during the digest.\n *\n * Increasing the TTL could have performance implications, so you should not change it without\n * proper justification.\n *\n * @param {number} limit The number of digest iterations.\n */\n\n\n/**\n * @ngdoc service\n * @name $rootScope\n * @description\n *\n * Every application has a single root {@link ng.$rootScope.Scope scope}.\n * All other scopes are descendant scopes of the root scope. Scopes provide separation\n * between the model and the view, via a mechanism for watching the model for changes.\n * They also provide event emission/broadcast and subscription facility. See the\n * {@link guide/scope developer guide on scopes}.\n */\nfunction $RootScopeProvider() {\n  var TTL = 10;\n  var $rootScopeMinErr = minErr('$rootScope');\n  var lastDirtyWatch = null;\n  var applyAsyncId = null;\n\n  this.digestTtl = function(value) {\n    if (arguments.length) {\n      TTL = value;\n    }\n    return TTL;\n  };\n\n  function createChildScopeClass(parent) {\n    function ChildScope() {\n      this.$$watchers = this.$$nextSibling =\n          this.$$childHead = this.$$childTail = null;\n      this.$$listeners = {};\n      this.$$listenerCount = {};\n      this.$$watchersCount = 0;\n      this.$id = nextUid();\n      this.$$ChildScope = null;\n    }\n    ChildScope.prototype = parent;\n    return ChildScope;\n  }\n\n  this.$get = ['$exceptionHandler', '$parse', '$browser',\n      function($exceptionHandler, $parse, $browser) {\n\n    function destroyChildScope($event) {\n        $event.currentScope.$$destroyed = true;\n    }\n\n    function cleanUpScope($scope) {\n\n      if (msie === 9) {\n        // There is a memory leak in IE9 if all child scopes are not disconnected\n        // completely when a scope is destroyed. So this code will recurse up through\n        // all this scopes children\n        //\n        // See issue https://github.com/angular/angular.js/issues/10706\n        $scope.$$childHead && cleanUpScope($scope.$$childHead);\n        $scope.$$nextSibling && cleanUpScope($scope.$$nextSibling);\n      }\n\n      // The code below works around IE9 and V8's memory leaks\n      //\n      // See:\n      // - https://code.google.com/p/v8/issues/detail?id=2073#c26\n      // - https://github.com/angular/angular.js/issues/6794#issuecomment-38648909\n      // - https://github.com/angular/angular.js/issues/1313#issuecomment-10378451\n\n      $scope.$parent = $scope.$$nextSibling = $scope.$$prevSibling = $scope.$$childHead =\n          $scope.$$childTail = $scope.$root = $scope.$$watchers = null;\n    }\n\n    /**\n     * @ngdoc type\n     * @name $rootScope.Scope\n     *\n     * @description\n     * A root scope can be retrieved using the {@link ng.$rootScope $rootScope} key from the\n     * {@link auto.$injector $injector}. Child scopes are created using the\n     * {@link ng.$rootScope.Scope#$new $new()} method. (Most scopes are created automatically when\n     * compiled HTML template is executed.) See also the {@link guide/scope Scopes guide} for\n     * an in-depth introduction and usage examples.\n     *\n     *\n     * # Inheritance\n     * A scope can inherit from a parent scope, as in this example:\n     * ```js\n         var parent = $rootScope;\n         var child = parent.$new();\n\n         parent.salutation = \"Hello\";\n         expect(child.salutation).toEqual('Hello');\n\n         child.salutation = \"Welcome\";\n         expect(child.salutation).toEqual('Welcome');\n         expect(parent.salutation).toEqual('Hello');\n     * ```\n     *\n     * When interacting with `Scope` in tests, additional helper methods are available on the\n     * instances of `Scope` type. See {@link ngMock.$rootScope.Scope ngMock Scope} for additional\n     * details.\n     *\n     *\n     * @param {Object.<string, function()>=} providers Map of service factory which need to be\n     *                                       provided for the current scope. Defaults to {@link ng}.\n     * @param {Object.<string, *>=} instanceCache Provides pre-instantiated services which should\n     *                              append/override services provided by `providers`. This is handy\n     *                              when unit-testing and having the need to override a default\n     *                              service.\n     * @returns {Object} Newly created scope.\n     *\n     */\n    function Scope() {\n      this.$id = nextUid();\n      this.$$phase = this.$parent = this.$$watchers =\n                     this.$$nextSibling = this.$$prevSibling =\n                     this.$$childHead = this.$$childTail = null;\n      this.$root = this;\n      this.$$destroyed = false;\n      this.$$listeners = {};\n      this.$$listenerCount = {};\n      this.$$watchersCount = 0;\n      this.$$isolateBindings = null;\n    }\n\n    /**\n     * @ngdoc property\n     * @name $rootScope.Scope#$id\n     *\n     * @description\n     * Unique scope ID (monotonically increasing) useful for debugging.\n     */\n\n     /**\n      * @ngdoc property\n      * @name $rootScope.Scope#$parent\n      *\n      * @description\n      * Reference to the parent scope.\n      */\n\n      /**\n       * @ngdoc property\n       * @name $rootScope.Scope#$root\n       *\n       * @description\n       * Reference to the root scope.\n       */\n\n    Scope.prototype = {\n      constructor: Scope,\n      /**\n       * @ngdoc method\n       * @name $rootScope.Scope#$new\n       * @kind function\n       *\n       * @description\n       * Creates a new child {@link ng.$rootScope.Scope scope}.\n       *\n       * The parent scope will propagate the {@link ng.$rootScope.Scope#$digest $digest()} event.\n       * The scope can be removed from the scope hierarchy using {@link ng.$rootScope.Scope#$destroy $destroy()}.\n       *\n       * {@link ng.$rootScope.Scope#$destroy $destroy()} must be called on a scope when it is\n       * desired for the scope and its child scopes to be permanently detached from the parent and\n       * thus stop participating in model change detection and listener notification by invoking.\n       *\n       * @param {boolean} isolate If true, then the scope does not prototypically inherit from the\n       *         parent scope. The scope is isolated, as it can not see parent scope properties.\n       *         When creating widgets, it is useful for the widget to not accidentally read parent\n       *         state.\n       *\n       * @param {Scope} [parent=this] The {@link ng.$rootScope.Scope `Scope`} that will be the `$parent`\n       *                              of the newly created scope. Defaults to `this` scope if not provided.\n       *                              This is used when creating a transclude scope to correctly place it\n       *                              in the scope hierarchy while maintaining the correct prototypical\n       *                              inheritance.\n       *\n       * @returns {Object} The newly created child scope.\n       *\n       */\n      $new: function(isolate, parent) {\n        var child;\n\n        parent = parent || this;\n\n        if (isolate) {\n          child = new Scope();\n          child.$root = this.$root;\n        } else {\n          // Only create a child scope class if somebody asks for one,\n          // but cache it to allow the VM to optimize lookups.\n          if (!this.$$ChildScope) {\n            this.$$ChildScope = createChildScopeClass(this);\n          }\n          child = new this.$$ChildScope();\n        }\n        child.$parent = parent;\n        child.$$prevSibling = parent.$$childTail;\n        if (parent.$$childHead) {\n          parent.$$childTail.$$nextSibling = child;\n          parent.$$childTail = child;\n        } else {\n          parent.$$childHead = parent.$$childTail = child;\n        }\n\n        // When the new scope is not isolated or we inherit from `this`, and\n        // the parent scope is destroyed, the property `$$destroyed` is inherited\n        // prototypically. In all other cases, this property needs to be set\n        // when the parent scope is destroyed.\n        // The listener needs to be added after the parent is set\n        if (isolate || parent != this) child.$on('$destroy', destroyChildScope);\n\n        return child;\n      },\n\n      /**\n       * @ngdoc method\n       * @name $rootScope.Scope#$watch\n       * @kind function\n       *\n       * @description\n       * Registers a `listener` callback to be executed whenever the `watchExpression` changes.\n       *\n       * - The `watchExpression` is called on every call to {@link ng.$rootScope.Scope#$digest\n       *   $digest()} and should return the value that will be watched. (`watchExpression` should not change\n       *   its value when executed multiple times with the same input because it may be executed multiple\n       *   times by {@link ng.$rootScope.Scope#$digest $digest()}. That is, `watchExpression` should be\n       *   [idempotent](http://en.wikipedia.org/wiki/Idempotence).\n       * - The `listener` is called only when the value from the current `watchExpression` and the\n       *   previous call to `watchExpression` are not equal (with the exception of the initial run,\n       *   see below). Inequality is determined according to reference inequality,\n       *   [strict comparison](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Comparison_Operators)\n       *    via the `!==` Javascript operator, unless `objectEquality == true`\n       *   (see next point)\n       * - When `objectEquality == true`, inequality of the `watchExpression` is determined\n       *   according to the {@link angular.equals} function. To save the value of the object for\n       *   later comparison, the {@link angular.copy} function is used. This therefore means that\n       *   watching complex objects will have adverse memory and performance implications.\n       * - The watch `listener` may change the model, which may trigger other `listener`s to fire.\n       *   This is achieved by rerunning the watchers until no changes are detected. The rerun\n       *   iteration limit is 10 to prevent an infinite loop deadlock.\n       *\n       *\n       * If you want to be notified whenever {@link ng.$rootScope.Scope#$digest $digest} is called,\n       * you can register a `watchExpression` function with no `listener`. (Be prepared for\n       * multiple calls to your `watchExpression` because it will execute multiple times in a\n       * single {@link ng.$rootScope.Scope#$digest $digest} cycle if a change is detected.)\n       *\n       * After a watcher is registered with the scope, the `listener` fn is called asynchronously\n       * (via {@link ng.$rootScope.Scope#$evalAsync $evalAsync}) to initialize the\n       * watcher. In rare cases, this is undesirable because the listener is called when the result\n       * of `watchExpression` didn't change. To detect this scenario within the `listener` fn, you\n       * can compare the `newVal` and `oldVal`. If these two values are identical (`===`) then the\n       * listener was called due to initialization.\n       *\n       *\n       *\n       * # Example\n       * ```js\n           // let's assume that scope was dependency injected as the $rootScope\n           var scope = $rootScope;\n           scope.name = 'misko';\n           scope.counter = 0;\n\n           expect(scope.counter).toEqual(0);\n           scope.$watch('name', function(newValue, oldValue) {\n             scope.counter = scope.counter + 1;\n           });\n           expect(scope.counter).toEqual(0);\n\n           scope.$digest();\n           // the listener is always called during the first $digest loop after it was registered\n           expect(scope.counter).toEqual(1);\n\n           scope.$digest();\n           // but now it will not be called unless the value changes\n           expect(scope.counter).toEqual(1);\n\n           scope.name = 'adam';\n           scope.$digest();\n           expect(scope.counter).toEqual(2);\n\n\n\n           // Using a function as a watchExpression\n           var food;\n           scope.foodCounter = 0;\n           expect(scope.foodCounter).toEqual(0);\n           scope.$watch(\n             // This function returns the value being watched. It is called for each turn of the $digest loop\n             function() { return food; },\n             // This is the change listener, called when the value returned from the above function changes\n             function(newValue, oldValue) {\n               if ( newValue !== oldValue ) {\n                 // Only increment the counter if the value changed\n                 scope.foodCounter = scope.foodCounter + 1;\n               }\n             }\n           );\n           // No digest has been run so the counter will be zero\n           expect(scope.foodCounter).toEqual(0);\n\n           // Run the digest but since food has not changed count will still be zero\n           scope.$digest();\n           expect(scope.foodCounter).toEqual(0);\n\n           // Update food and run digest.  Now the counter will increment\n           food = 'cheeseburger';\n           scope.$digest();\n           expect(scope.foodCounter).toEqual(1);\n\n       * ```\n       *\n       *\n       *\n       * @param {(function()|string)} watchExpression Expression that is evaluated on each\n       *    {@link ng.$rootScope.Scope#$digest $digest} cycle. A change in the return value triggers\n       *    a call to the `listener`.\n       *\n       *    - `string`: Evaluated as {@link guide/expression expression}\n       *    - `function(scope)`: called with current `scope` as a parameter.\n       * @param {function(newVal, oldVal, scope)} listener Callback called whenever the value\n       *    of `watchExpression` changes.\n       *\n       *    - `newVal` contains the current value of the `watchExpression`\n       *    - `oldVal` contains the previous value of the `watchExpression`\n       *    - `scope` refers to the current scope\n       * @param {boolean=} [objectEquality=false] Compare for object equality using {@link angular.equals} instead of\n       *     comparing for reference equality.\n       * @returns {function()} Returns a deregistration function for this listener.\n       */\n      $watch: function(watchExp, listener, objectEquality, prettyPrintExpression) {\n        var get = $parse(watchExp);\n\n        if (get.$$watchDelegate) {\n          return get.$$watchDelegate(this, listener, objectEquality, get, watchExp);\n        }\n        var scope = this,\n            array = scope.$$watchers,\n            watcher = {\n              fn: listener,\n              last: initWatchVal,\n              get: get,\n              exp: prettyPrintExpression || watchExp,\n              eq: !!objectEquality\n            };\n\n        lastDirtyWatch = null;\n\n        if (!isFunction(listener)) {\n          watcher.fn = noop;\n        }\n\n        if (!array) {\n          array = scope.$$watchers = [];\n        }\n        // we use unshift since we use a while loop in $digest for speed.\n        // the while loop reads in reverse order.\n        array.unshift(watcher);\n        incrementWatchersCount(this, 1);\n\n        return function deregisterWatch() {\n          if (arrayRemove(array, watcher) >= 0) {\n            incrementWatchersCount(scope, -1);\n          }\n          lastDirtyWatch = null;\n        };\n      },\n\n      /**\n       * @ngdoc method\n       * @name $rootScope.Scope#$watchGroup\n       * @kind function\n       *\n       * @description\n       * A variant of {@link ng.$rootScope.Scope#$watch $watch()} where it watches an array of `watchExpressions`.\n       * If any one expression in the collection changes the `listener` is executed.\n       *\n       * - The items in the `watchExpressions` array are observed via standard $watch operation and are examined on every\n       *   call to $digest() to see if any items changes.\n       * - The `listener` is called whenever any expression in the `watchExpressions` array changes.\n       *\n       * @param {Array.<string|Function(scope)>} watchExpressions Array of expressions that will be individually\n       * watched using {@link ng.$rootScope.Scope#$watch $watch()}\n       *\n       * @param {function(newValues, oldValues, scope)} listener Callback called whenever the return value of any\n       *    expression in `watchExpressions` changes\n       *    The `newValues` array contains the current values of the `watchExpressions`, with the indexes matching\n       *    those of `watchExpression`\n       *    and the `oldValues` array contains the previous values of the `watchExpressions`, with the indexes matching\n       *    those of `watchExpression`\n       *    The `scope` refers to the current scope.\n       * @returns {function()} Returns a de-registration function for all listeners.\n       */\n      $watchGroup: function(watchExpressions, listener) {\n        var oldValues = new Array(watchExpressions.length);\n        var newValues = new Array(watchExpressions.length);\n        var deregisterFns = [];\n        var self = this;\n        var changeReactionScheduled = false;\n        var firstRun = true;\n\n        if (!watchExpressions.length) {\n          // No expressions means we call the listener ASAP\n          var shouldCall = true;\n          self.$evalAsync(function() {\n            if (shouldCall) listener(newValues, newValues, self);\n          });\n          return function deregisterWatchGroup() {\n            shouldCall = false;\n          };\n        }\n\n        if (watchExpressions.length === 1) {\n          // Special case size of one\n          return this.$watch(watchExpressions[0], function watchGroupAction(value, oldValue, scope) {\n            newValues[0] = value;\n            oldValues[0] = oldValue;\n            listener(newValues, (value === oldValue) ? newValues : oldValues, scope);\n          });\n        }\n\n        forEach(watchExpressions, function(expr, i) {\n          var unwatchFn = self.$watch(expr, function watchGroupSubAction(value, oldValue) {\n            newValues[i] = value;\n            oldValues[i] = oldValue;\n            if (!changeReactionScheduled) {\n              changeReactionScheduled = true;\n              self.$evalAsync(watchGroupAction);\n            }\n          });\n          deregisterFns.push(unwatchFn);\n        });\n\n        function watchGroupAction() {\n          changeReactionScheduled = false;\n\n          if (firstRun) {\n            firstRun = false;\n            listener(newValues, newValues, self);\n          } else {\n            listener(newValues, oldValues, self);\n          }\n        }\n\n        return function deregisterWatchGroup() {\n          while (deregisterFns.length) {\n            deregisterFns.shift()();\n          }\n        };\n      },\n\n\n      /**\n       * @ngdoc method\n       * @name $rootScope.Scope#$watchCollection\n       * @kind function\n       *\n       * @description\n       * Shallow watches the properties of an object and fires whenever any of the properties change\n       * (for arrays, this implies watching the array items; for object maps, this implies watching\n       * the properties). If a change is detected, the `listener` callback is fired.\n       *\n       * - The `obj` collection is observed via standard $watch operation and is examined on every\n       *   call to $digest() to see if any items have been added, removed, or moved.\n       * - The `listener` is called whenever anything within the `obj` has changed. Examples include\n       *   adding, removing, and moving items belonging to an object or array.\n       *\n       *\n       * # Example\n       * ```js\n          $scope.names = ['igor', 'matias', 'misko', 'james'];\n          $scope.dataCount = 4;\n\n          $scope.$watchCollection('names', function(newNames, oldNames) {\n            $scope.dataCount = newNames.length;\n          });\n\n          expect($scope.dataCount).toEqual(4);\n          $scope.$digest();\n\n          //still at 4 ... no changes\n          expect($scope.dataCount).toEqual(4);\n\n          $scope.names.pop();\n          $scope.$digest();\n\n          //now there's been a change\n          expect($scope.dataCount).toEqual(3);\n       * ```\n       *\n       *\n       * @param {string|function(scope)} obj Evaluated as {@link guide/expression expression}. The\n       *    expression value should evaluate to an object or an array which is observed on each\n       *    {@link ng.$rootScope.Scope#$digest $digest} cycle. Any shallow change within the\n       *    collection will trigger a call to the `listener`.\n       *\n       * @param {function(newCollection, oldCollection, scope)} listener a callback function called\n       *    when a change is detected.\n       *    - The `newCollection` object is the newly modified data obtained from the `obj` expression\n       *    - The `oldCollection` object is a copy of the former collection data.\n       *      Due to performance considerations, the`oldCollection` value is computed only if the\n       *      `listener` function declares two or more arguments.\n       *    - The `scope` argument refers to the current scope.\n       *\n       * @returns {function()} Returns a de-registration function for this listener. When the\n       *    de-registration function is executed, the internal watch operation is terminated.\n       */\n      $watchCollection: function(obj, listener) {\n        $watchCollectionInterceptor.$stateful = true;\n\n        var self = this;\n        // the current value, updated on each dirty-check run\n        var newValue;\n        // a shallow copy of the newValue from the last dirty-check run,\n        // updated to match newValue during dirty-check run\n        var oldValue;\n        // a shallow copy of the newValue from when the last change happened\n        var veryOldValue;\n        // only track veryOldValue if the listener is asking for it\n        var trackVeryOldValue = (listener.length > 1);\n        var changeDetected = 0;\n        var changeDetector = $parse(obj, $watchCollectionInterceptor);\n        var internalArray = [];\n        var internalObject = {};\n        var initRun = true;\n        var oldLength = 0;\n\n        function $watchCollectionInterceptor(_value) {\n          newValue = _value;\n          var newLength, key, bothNaN, newItem, oldItem;\n\n          // If the new value is undefined, then return undefined as the watch may be a one-time watch\n          if (isUndefined(newValue)) return;\n\n          if (!isObject(newValue)) { // if primitive\n            if (oldValue !== newValue) {\n              oldValue = newValue;\n              changeDetected++;\n            }\n          } else if (isArrayLike(newValue)) {\n            if (oldValue !== internalArray) {\n              // we are transitioning from something which was not an array into array.\n              oldValue = internalArray;\n              oldLength = oldValue.length = 0;\n              changeDetected++;\n            }\n\n            newLength = newValue.length;\n\n            if (oldLength !== newLength) {\n              // if lengths do not match we need to trigger change notification\n              changeDetected++;\n              oldValue.length = oldLength = newLength;\n            }\n            // copy the items to oldValue and look for changes.\n            for (var i = 0; i < newLength; i++) {\n              oldItem = oldValue[i];\n              newItem = newValue[i];\n\n              bothNaN = (oldItem !== oldItem) && (newItem !== newItem);\n              if (!bothNaN && (oldItem !== newItem)) {\n                changeDetected++;\n                oldValue[i] = newItem;\n              }\n            }\n          } else {\n            if (oldValue !== internalObject) {\n              // we are transitioning from something which was not an object into object.\n              oldValue = internalObject = {};\n              oldLength = 0;\n              changeDetected++;\n            }\n            // copy the items to oldValue and look for changes.\n            newLength = 0;\n            for (key in newValue) {\n              if (hasOwnProperty.call(newValue, key)) {\n                newLength++;\n                newItem = newValue[key];\n                oldItem = oldValue[key];\n\n                if (key in oldValue) {\n                  bothNaN = (oldItem !== oldItem) && (newItem !== newItem);\n                  if (!bothNaN && (oldItem !== newItem)) {\n                    changeDetected++;\n                    oldValue[key] = newItem;\n                  }\n                } else {\n                  oldLength++;\n                  oldValue[key] = newItem;\n                  changeDetected++;\n                }\n              }\n            }\n            if (oldLength > newLength) {\n              // we used to have more keys, need to find them and destroy them.\n              changeDetected++;\n              for (key in oldValue) {\n                if (!hasOwnProperty.call(newValue, key)) {\n                  oldLength--;\n                  delete oldValue[key];\n                }\n              }\n            }\n          }\n          return changeDetected;\n        }\n\n        function $watchCollectionAction() {\n          if (initRun) {\n            initRun = false;\n            listener(newValue, newValue, self);\n          } else {\n            listener(newValue, veryOldValue, self);\n          }\n\n          // make a copy for the next time a collection is changed\n          if (trackVeryOldValue) {\n            if (!isObject(newValue)) {\n              //primitive\n              veryOldValue = newValue;\n            } else if (isArrayLike(newValue)) {\n              veryOldValue = new Array(newValue.length);\n              for (var i = 0; i < newValue.length; i++) {\n                veryOldValue[i] = newValue[i];\n              }\n            } else { // if object\n              veryOldValue = {};\n              for (var key in newValue) {\n                if (hasOwnProperty.call(newValue, key)) {\n                  veryOldValue[key] = newValue[key];\n                }\n              }\n            }\n          }\n        }\n\n        return this.$watch(changeDetector, $watchCollectionAction);\n      },\n\n      /**\n       * @ngdoc method\n       * @name $rootScope.Scope#$digest\n       * @kind function\n       *\n       * @description\n       * Processes all of the {@link ng.$rootScope.Scope#$watch watchers} of the current scope and\n       * its children. Because a {@link ng.$rootScope.Scope#$watch watcher}'s listener can change\n       * the model, the `$digest()` keeps calling the {@link ng.$rootScope.Scope#$watch watchers}\n       * until no more listeners are firing. This means that it is possible to get into an infinite\n       * loop. This function will throw `'Maximum iteration limit exceeded.'` if the number of\n       * iterations exceeds 10.\n       *\n       * Usually, you don't call `$digest()` directly in\n       * {@link ng.directive:ngController controllers} or in\n       * {@link ng.$compileProvider#directive directives}.\n       * Instead, you should call {@link ng.$rootScope.Scope#$apply $apply()} (typically from within\n       * a {@link ng.$compileProvider#directive directive}), which will force a `$digest()`.\n       *\n       * If you want to be notified whenever `$digest()` is called,\n       * you can register a `watchExpression` function with\n       * {@link ng.$rootScope.Scope#$watch $watch()} with no `listener`.\n       *\n       * In unit tests, you may need to call `$digest()` to simulate the scope life cycle.\n       *\n       * # Example\n       * ```js\n           var scope = ...;\n           scope.name = 'misko';\n           scope.counter = 0;\n\n           expect(scope.counter).toEqual(0);\n           scope.$watch('name', function(newValue, oldValue) {\n             scope.counter = scope.counter + 1;\n           });\n           expect(scope.counter).toEqual(0);\n\n           scope.$digest();\n           // the listener is always called during the first $digest loop after it was registered\n           expect(scope.counter).toEqual(1);\n\n           scope.$digest();\n           // but now it will not be called unless the value changes\n           expect(scope.counter).toEqual(1);\n\n           scope.name = 'adam';\n           scope.$digest();\n           expect(scope.counter).toEqual(2);\n       * ```\n       *\n       */\n      $digest: function() {\n        var watch, value, last, fn, get,\n            watchers,\n            length,\n            dirty, ttl = TTL,\n            next, current, target = this,\n            watchLog = [],\n            logIdx, asyncTask;\n\n        beginPhase('$digest');\n        // Check for changes to browser url that happened in sync before the call to $digest\n        $browser.$$checkUrlChange();\n\n        if (this === $rootScope && applyAsyncId !== null) {\n          // If this is the root scope, and $applyAsync has scheduled a deferred $apply(), then\n          // cancel the scheduled $apply and flush the queue of expressions to be evaluated.\n          $browser.defer.cancel(applyAsyncId);\n          flushApplyAsync();\n        }\n\n        lastDirtyWatch = null;\n\n        do { // \"while dirty\" loop\n          dirty = false;\n          current = target;\n\n          // It's safe for asyncQueuePosition to be a local variable here because this loop can't\n          // be reentered recursively. Calling $digest from a function passed to $applyAsync would\n          // lead to a '$digest already in progress' error.\n          for (var asyncQueuePosition = 0; asyncQueuePosition < asyncQueue.length; asyncQueuePosition++) {\n            try {\n              asyncTask = asyncQueue[asyncQueuePosition];\n              asyncTask.scope.$eval(asyncTask.expression, asyncTask.locals);\n            } catch (e) {\n              $exceptionHandler(e);\n            }\n            lastDirtyWatch = null;\n          }\n          asyncQueue.length = 0;\n\n          traverseScopesLoop:\n          do { // \"traverse the scopes\" loop\n            if ((watchers = current.$$watchers)) {\n              // process our watches\n              length = watchers.length;\n              while (length--) {\n                try {\n                  watch = watchers[length];\n                  // Most common watches are on primitives, in which case we can short\n                  // circuit it with === operator, only when === fails do we use .equals\n                  if (watch) {\n                    get = watch.get;\n                    if ((value = get(current)) !== (last = watch.last) &&\n                        !(watch.eq\n                            ? equals(value, last)\n                            : (typeof value === 'number' && typeof last === 'number'\n                               && isNaN(value) && isNaN(last)))) {\n                      dirty = true;\n                      lastDirtyWatch = watch;\n                      watch.last = watch.eq ? copy(value, null) : value;\n                      fn = watch.fn;\n                      fn(value, ((last === initWatchVal) ? value : last), current);\n                      if (ttl < 5) {\n                        logIdx = 4 - ttl;\n                        if (!watchLog[logIdx]) watchLog[logIdx] = [];\n                        watchLog[logIdx].push({\n                          msg: isFunction(watch.exp) ? 'fn: ' + (watch.exp.name || watch.exp.toString()) : watch.exp,\n                          newVal: value,\n                          oldVal: last\n                        });\n                      }\n                    } else if (watch === lastDirtyWatch) {\n                      // If the most recently dirty watcher is now clean, short circuit since the remaining watchers\n                      // have already been tested.\n                      dirty = false;\n                      break traverseScopesLoop;\n                    }\n                  }\n                } catch (e) {\n                  $exceptionHandler(e);\n                }\n              }\n            }\n\n            // Insanity Warning: scope depth-first traversal\n            // yes, this code is a bit crazy, but it works and we have tests to prove it!\n            // this piece should be kept in sync with the traversal in $broadcast\n            if (!(next = ((current.$$watchersCount && current.$$childHead) ||\n                (current !== target && current.$$nextSibling)))) {\n              while (current !== target && !(next = current.$$nextSibling)) {\n                current = current.$parent;\n              }\n            }\n          } while ((current = next));\n\n          // `break traverseScopesLoop;` takes us to here\n\n          if ((dirty || asyncQueue.length) && !(ttl--)) {\n            clearPhase();\n            throw $rootScopeMinErr('infdig',\n                '{0} $digest() iterations reached. Aborting!\\n' +\n                'Watchers fired in the last 5 iterations: {1}',\n                TTL, watchLog);\n          }\n\n        } while (dirty || asyncQueue.length);\n\n        clearPhase();\n\n        // postDigestQueuePosition isn't local here because this loop can be reentered recursively.\n        while (postDigestQueuePosition < postDigestQueue.length) {\n          try {\n            postDigestQueue[postDigestQueuePosition++]();\n          } catch (e) {\n            $exceptionHandler(e);\n          }\n        }\n        postDigestQueue.length = postDigestQueuePosition = 0;\n      },\n\n\n      /**\n       * @ngdoc event\n       * @name $rootScope.Scope#$destroy\n       * @eventType broadcast on scope being destroyed\n       *\n       * @description\n       * Broadcasted when a scope and its children are being destroyed.\n       *\n       * Note that, in AngularJS, there is also a `$destroy` jQuery event, which can be used to\n       * clean up DOM bindings before an element is removed from the DOM.\n       */\n\n      /**\n       * @ngdoc method\n       * @name $rootScope.Scope#$destroy\n       * @kind function\n       *\n       * @description\n       * Removes the current scope (and all of its children) from the parent scope. Removal implies\n       * that calls to {@link ng.$rootScope.Scope#$digest $digest()} will no longer\n       * propagate to the current scope and its children. Removal also implies that the current\n       * scope is eligible for garbage collection.\n       *\n       * The `$destroy()` is usually used by directives such as\n       * {@link ng.directive:ngRepeat ngRepeat} for managing the\n       * unrolling of the loop.\n       *\n       * Just before a scope is destroyed, a `$destroy` event is broadcasted on this scope.\n       * Application code can register a `$destroy` event handler that will give it a chance to\n       * perform any necessary cleanup.\n       *\n       * Note that, in AngularJS, there is also a `$destroy` jQuery event, which can be used to\n       * clean up DOM bindings before an element is removed from the DOM.\n       */\n      $destroy: function() {\n        // We can't destroy a scope that has been already destroyed.\n        if (this.$$destroyed) return;\n        var parent = this.$parent;\n\n        this.$broadcast('$destroy');\n        this.$$destroyed = true;\n\n        if (this === $rootScope) {\n          //Remove handlers attached to window when $rootScope is removed\n          $browser.$$applicationDestroyed();\n        }\n\n        incrementWatchersCount(this, -this.$$watchersCount);\n        for (var eventName in this.$$listenerCount) {\n          decrementListenerCount(this, this.$$listenerCount[eventName], eventName);\n        }\n\n        // sever all the references to parent scopes (after this cleanup, the current scope should\n        // not be retained by any of our references and should be eligible for garbage collection)\n        if (parent && parent.$$childHead == this) parent.$$childHead = this.$$nextSibling;\n        if (parent && parent.$$childTail == this) parent.$$childTail = this.$$prevSibling;\n        if (this.$$prevSibling) this.$$prevSibling.$$nextSibling = this.$$nextSibling;\n        if (this.$$nextSibling) this.$$nextSibling.$$prevSibling = this.$$prevSibling;\n\n        // Disable listeners, watchers and apply/digest methods\n        this.$destroy = this.$digest = this.$apply = this.$evalAsync = this.$applyAsync = noop;\n        this.$on = this.$watch = this.$watchGroup = function() { return noop; };\n        this.$$listeners = {};\n\n        // Disconnect the next sibling to prevent `cleanUpScope` destroying those too\n        this.$$nextSibling = null;\n        cleanUpScope(this);\n      },\n\n      /**\n       * @ngdoc method\n       * @name $rootScope.Scope#$eval\n       * @kind function\n       *\n       * @description\n       * Executes the `expression` on the current scope and returns the result. Any exceptions in\n       * the expression are propagated (uncaught). This is useful when evaluating Angular\n       * expressions.\n       *\n       * # Example\n       * ```js\n           var scope = ng.$rootScope.Scope();\n           scope.a = 1;\n           scope.b = 2;\n\n           expect(scope.$eval('a+b')).toEqual(3);\n           expect(scope.$eval(function(scope){ return scope.a + scope.b; })).toEqual(3);\n       * ```\n       *\n       * @param {(string|function())=} expression An angular expression to be executed.\n       *\n       *    - `string`: execute using the rules as defined in  {@link guide/expression expression}.\n       *    - `function(scope)`: execute the function with the current `scope` parameter.\n       *\n       * @param {(object)=} locals Local variables object, useful for overriding values in scope.\n       * @returns {*} The result of evaluating the expression.\n       */\n      $eval: function(expr, locals) {\n        return $parse(expr)(this, locals);\n      },\n\n      /**\n       * @ngdoc method\n       * @name $rootScope.Scope#$evalAsync\n       * @kind function\n       *\n       * @description\n       * Executes the expression on the current scope at a later point in time.\n       *\n       * The `$evalAsync` makes no guarantees as to when the `expression` will be executed, only\n       * that:\n       *\n       *   - it will execute after the function that scheduled the evaluation (preferably before DOM\n       *     rendering).\n       *   - at least one {@link ng.$rootScope.Scope#$digest $digest cycle} will be performed after\n       *     `expression` execution.\n       *\n       * Any exceptions from the execution of the expression are forwarded to the\n       * {@link ng.$exceptionHandler $exceptionHandler} service.\n       *\n       * __Note:__ if this function is called outside of a `$digest` cycle, a new `$digest` cycle\n       * will be scheduled. However, it is encouraged to always call code that changes the model\n       * from within an `$apply` call. That includes code evaluated via `$evalAsync`.\n       *\n       * @param {(string|function())=} expression An angular expression to be executed.\n       *\n       *    - `string`: execute using the rules as defined in {@link guide/expression expression}.\n       *    - `function(scope)`: execute the function with the current `scope` parameter.\n       *\n       * @param {(object)=} locals Local variables object, useful for overriding values in scope.\n       */\n      $evalAsync: function(expr, locals) {\n        // if we are outside of an $digest loop and this is the first time we are scheduling async\n        // task also schedule async auto-flush\n        if (!$rootScope.$$phase && !asyncQueue.length) {\n          $browser.defer(function() {\n            if (asyncQueue.length) {\n              $rootScope.$digest();\n            }\n          });\n        }\n\n        asyncQueue.push({scope: this, expression: $parse(expr), locals: locals});\n      },\n\n      $$postDigest: function(fn) {\n        postDigestQueue.push(fn);\n      },\n\n      /**\n       * @ngdoc method\n       * @name $rootScope.Scope#$apply\n       * @kind function\n       *\n       * @description\n       * `$apply()` is used to execute an expression in angular from outside of the angular\n       * framework. (For example from browser DOM events, setTimeout, XHR or third party libraries).\n       * Because we are calling into the angular framework we need to perform proper scope life\n       * cycle of {@link ng.$exceptionHandler exception handling},\n       * {@link ng.$rootScope.Scope#$digest executing watches}.\n       *\n       * ## Life cycle\n       *\n       * # Pseudo-Code of `$apply()`\n       * ```js\n           function $apply(expr) {\n             try {\n               return $eval(expr);\n             } catch (e) {\n               $exceptionHandler(e);\n             } finally {\n               $root.$digest();\n             }\n           }\n       * ```\n       *\n       *\n       * Scope's `$apply()` method transitions through the following stages:\n       *\n       * 1. The {@link guide/expression expression} is executed using the\n       *    {@link ng.$rootScope.Scope#$eval $eval()} method.\n       * 2. Any exceptions from the execution of the expression are forwarded to the\n       *    {@link ng.$exceptionHandler $exceptionHandler} service.\n       * 3. The {@link ng.$rootScope.Scope#$watch watch} listeners are fired immediately after the\n       *    expression was executed using the {@link ng.$rootScope.Scope#$digest $digest()} method.\n       *\n       *\n       * @param {(string|function())=} exp An angular expression to be executed.\n       *\n       *    - `string`: execute using the rules as defined in {@link guide/expression expression}.\n       *    - `function(scope)`: execute the function with current `scope` parameter.\n       *\n       * @returns {*} The result of evaluating the expression.\n       */\n      $apply: function(expr) {\n        try {\n          beginPhase('$apply');\n          try {\n            return this.$eval(expr);\n          } finally {\n            clearPhase();\n          }\n        } catch (e) {\n          $exceptionHandler(e);\n        } finally {\n          try {\n            $rootScope.$digest();\n          } catch (e) {\n            $exceptionHandler(e);\n            throw e;\n          }\n        }\n      },\n\n      /**\n       * @ngdoc method\n       * @name $rootScope.Scope#$applyAsync\n       * @kind function\n       *\n       * @description\n       * Schedule the invocation of $apply to occur at a later time. The actual time difference\n       * varies across browsers, but is typically around ~10 milliseconds.\n       *\n       * This can be used to queue up multiple expressions which need to be evaluated in the same\n       * digest.\n       *\n       * @param {(string|function())=} exp An angular expression to be executed.\n       *\n       *    - `string`: execute using the rules as defined in {@link guide/expression expression}.\n       *    - `function(scope)`: execute the function with current `scope` parameter.\n       */\n      $applyAsync: function(expr) {\n        var scope = this;\n        expr && applyAsyncQueue.push($applyAsyncExpression);\n        expr = $parse(expr);\n        scheduleApplyAsync();\n\n        function $applyAsyncExpression() {\n          scope.$eval(expr);\n        }\n      },\n\n      /**\n       * @ngdoc method\n       * @name $rootScope.Scope#$on\n       * @kind function\n       *\n       * @description\n       * Listens on events of a given type. See {@link ng.$rootScope.Scope#$emit $emit} for\n       * discussion of event life cycle.\n       *\n       * The event listener function format is: `function(event, args...)`. The `event` object\n       * passed into the listener has the following attributes:\n       *\n       *   - `targetScope` - `{Scope}`: the scope on which the event was `$emit`-ed or\n       *     `$broadcast`-ed.\n       *   - `currentScope` - `{Scope}`: the scope that is currently handling the event. Once the\n       *     event propagates through the scope hierarchy, this property is set to null.\n       *   - `name` - `{string}`: name of the event.\n       *   - `stopPropagation` - `{function=}`: calling `stopPropagation` function will cancel\n       *     further event propagation (available only for events that were `$emit`-ed).\n       *   - `preventDefault` - `{function}`: calling `preventDefault` sets `defaultPrevented` flag\n       *     to true.\n       *   - `defaultPrevented` - `{boolean}`: true if `preventDefault` was called.\n       *\n       * @param {string} name Event name to listen on.\n       * @param {function(event, ...args)} listener Function to call when the event is emitted.\n       * @returns {function()} Returns a deregistration function for this listener.\n       */\n      $on: function(name, listener) {\n        var namedListeners = this.$$listeners[name];\n        if (!namedListeners) {\n          this.$$listeners[name] = namedListeners = [];\n        }\n        namedListeners.push(listener);\n\n        var current = this;\n        do {\n          if (!current.$$listenerCount[name]) {\n            current.$$listenerCount[name] = 0;\n          }\n          current.$$listenerCount[name]++;\n        } while ((current = current.$parent));\n\n        var self = this;\n        return function() {\n          var indexOfListener = namedListeners.indexOf(listener);\n          if (indexOfListener !== -1) {\n            namedListeners[indexOfListener] = null;\n            decrementListenerCount(self, 1, name);\n          }\n        };\n      },\n\n\n      /**\n       * @ngdoc method\n       * @name $rootScope.Scope#$emit\n       * @kind function\n       *\n       * @description\n       * Dispatches an event `name` upwards through the scope hierarchy notifying the\n       * registered {@link ng.$rootScope.Scope#$on} listeners.\n       *\n       * The event life cycle starts at the scope on which `$emit` was called. All\n       * {@link ng.$rootScope.Scope#$on listeners} listening for `name` event on this scope get\n       * notified. Afterwards, the event traverses upwards toward the root scope and calls all\n       * registered listeners along the way. The event will stop propagating if one of the listeners\n       * cancels it.\n       *\n       * Any exception emitted from the {@link ng.$rootScope.Scope#$on listeners} will be passed\n       * onto the {@link ng.$exceptionHandler $exceptionHandler} service.\n       *\n       * @param {string} name Event name to emit.\n       * @param {...*} args Optional one or more arguments which will be passed onto the event listeners.\n       * @return {Object} Event object (see {@link ng.$rootScope.Scope#$on}).\n       */\n      $emit: function(name, args) {\n        var empty = [],\n            namedListeners,\n            scope = this,\n            stopPropagation = false,\n            event = {\n              name: name,\n              targetScope: scope,\n              stopPropagation: function() {stopPropagation = true;},\n              preventDefault: function() {\n                event.defaultPrevented = true;\n              },\n              defaultPrevented: false\n            },\n            listenerArgs = concat([event], arguments, 1),\n            i, length;\n\n        do {\n          namedListeners = scope.$$listeners[name] || empty;\n          event.currentScope = scope;\n          for (i = 0, length = namedListeners.length; i < length; i++) {\n\n            // if listeners were deregistered, defragment the array\n            if (!namedListeners[i]) {\n              namedListeners.splice(i, 1);\n              i--;\n              length--;\n              continue;\n            }\n            try {\n              //allow all listeners attached to the current scope to run\n              namedListeners[i].apply(null, listenerArgs);\n            } catch (e) {\n              $exceptionHandler(e);\n            }\n          }\n          //if any listener on the current scope stops propagation, prevent bubbling\n          if (stopPropagation) {\n            event.currentScope = null;\n            return event;\n          }\n          //traverse upwards\n          scope = scope.$parent;\n        } while (scope);\n\n        event.currentScope = null;\n\n        return event;\n      },\n\n\n      /**\n       * @ngdoc method\n       * @name $rootScope.Scope#$broadcast\n       * @kind function\n       *\n       * @description\n       * Dispatches an event `name` downwards to all child scopes (and their children) notifying the\n       * registered {@link ng.$rootScope.Scope#$on} listeners.\n       *\n       * The event life cycle starts at the scope on which `$broadcast` was called. All\n       * {@link ng.$rootScope.Scope#$on listeners} listening for `name` event on this scope get\n       * notified. Afterwards, the event propagates to all direct and indirect scopes of the current\n       * scope and calls all registered listeners along the way. The event cannot be canceled.\n       *\n       * Any exception emitted from the {@link ng.$rootScope.Scope#$on listeners} will be passed\n       * onto the {@link ng.$exceptionHandler $exceptionHandler} service.\n       *\n       * @param {string} name Event name to broadcast.\n       * @param {...*} args Optional one or more arguments which will be passed onto the event listeners.\n       * @return {Object} Event object, see {@link ng.$rootScope.Scope#$on}\n       */\n      $broadcast: function(name, args) {\n        var target = this,\n            current = target,\n            next = target,\n            event = {\n              name: name,\n              targetScope: target,\n              preventDefault: function() {\n                event.defaultPrevented = true;\n              },\n              defaultPrevented: false\n            };\n\n        if (!target.$$listenerCount[name]) return event;\n\n        var listenerArgs = concat([event], arguments, 1),\n            listeners, i, length;\n\n        //down while you can, then up and next sibling or up and next sibling until back at root\n        while ((current = next)) {\n          event.currentScope = current;\n          listeners = current.$$listeners[name] || [];\n          for (i = 0, length = listeners.length; i < length; i++) {\n            // if listeners were deregistered, defragment the array\n            if (!listeners[i]) {\n              listeners.splice(i, 1);\n              i--;\n              length--;\n              continue;\n            }\n\n            try {\n              listeners[i].apply(null, listenerArgs);\n            } catch (e) {\n              $exceptionHandler(e);\n            }\n          }\n\n          // Insanity Warning: scope depth-first traversal\n          // yes, this code is a bit crazy, but it works and we have tests to prove it!\n          // this piece should be kept in sync with the traversal in $digest\n          // (though it differs due to having the extra check for $$listenerCount)\n          if (!(next = ((current.$$listenerCount[name] && current.$$childHead) ||\n              (current !== target && current.$$nextSibling)))) {\n            while (current !== target && !(next = current.$$nextSibling)) {\n              current = current.$parent;\n            }\n          }\n        }\n\n        event.currentScope = null;\n        return event;\n      }\n    };\n\n    var $rootScope = new Scope();\n\n    //The internal queues. Expose them on the $rootScope for debugging/testing purposes.\n    var asyncQueue = $rootScope.$$asyncQueue = [];\n    var postDigestQueue = $rootScope.$$postDigestQueue = [];\n    var applyAsyncQueue = $rootScope.$$applyAsyncQueue = [];\n\n    var postDigestQueuePosition = 0;\n\n    return $rootScope;\n\n\n    function beginPhase(phase) {\n      if ($rootScope.$$phase) {\n        throw $rootScopeMinErr('inprog', '{0} already in progress', $rootScope.$$phase);\n      }\n\n      $rootScope.$$phase = phase;\n    }\n\n    function clearPhase() {\n      $rootScope.$$phase = null;\n    }\n\n    function incrementWatchersCount(current, count) {\n      do {\n        current.$$watchersCount += count;\n      } while ((current = current.$parent));\n    }\n\n    function decrementListenerCount(current, count, name) {\n      do {\n        current.$$listenerCount[name] -= count;\n\n        if (current.$$listenerCount[name] === 0) {\n          delete current.$$listenerCount[name];\n        }\n      } while ((current = current.$parent));\n    }\n\n    /**\n     * function used as an initial value for watchers.\n     * because it's unique we can easily tell it apart from other values\n     */\n    function initWatchVal() {}\n\n    function flushApplyAsync() {\n      while (applyAsyncQueue.length) {\n        try {\n          applyAsyncQueue.shift()();\n        } catch (e) {\n          $exceptionHandler(e);\n        }\n      }\n      applyAsyncId = null;\n    }\n\n    function scheduleApplyAsync() {\n      if (applyAsyncId === null) {\n        applyAsyncId = $browser.defer(function() {\n          $rootScope.$apply(flushApplyAsync);\n        });\n      }\n    }\n  }];\n}\n\n/**\n * @ngdoc service\n * @name $rootElement\n *\n * @description\n * The root element of Angular application. This is either the element where {@link\n * ng.directive:ngApp ngApp} was declared or the element passed into\n * {@link angular.bootstrap}. The element represents the root element of application. It is also the\n * location where the application's {@link auto.$injector $injector} service gets\n * published, and can be retrieved using `$rootElement.injector()`.\n */\n\n\n// the implementation is in angular.bootstrap\n\n/**\n * @description\n * Private service to sanitize uris for links and images. Used by $compile and $sanitize.\n */\nfunction $$SanitizeUriProvider() {\n  var aHrefSanitizationWhitelist = /^\\s*(https?|ftp|mailto|tel|file):/,\n    imgSrcSanitizationWhitelist = /^\\s*((https?|ftp|file|blob):|data:image\\/)/;\n\n  /**\n   * @description\n   * Retrieves or overrides the default regular expression that is used for whitelisting of safe\n   * urls during a[href] sanitization.\n   *\n   * The sanitization is a security measure aimed at prevent XSS attacks via html links.\n   *\n   * Any url about to be assigned to a[href] via data-binding is first normalized and turned into\n   * an absolute url. Afterwards, the url is matched against the `aHrefSanitizationWhitelist`\n   * regular expression. If a match is found, the original url is written into the dom. Otherwise,\n   * the absolute url is prefixed with `'unsafe:'` string and only then is it written into the DOM.\n   *\n   * @param {RegExp=} regexp New regexp to whitelist urls with.\n   * @returns {RegExp|ng.$compileProvider} Current RegExp if called without value or self for\n   *    chaining otherwise.\n   */\n  this.aHrefSanitizationWhitelist = function(regexp) {\n    if (isDefined(regexp)) {\n      aHrefSanitizationWhitelist = regexp;\n      return this;\n    }\n    return aHrefSanitizationWhitelist;\n  };\n\n\n  /**\n   * @description\n   * Retrieves or overrides the default regular expression that is used for whitelisting of safe\n   * urls during img[src] sanitization.\n   *\n   * The sanitization is a security measure aimed at prevent XSS attacks via html links.\n   *\n   * Any url about to be assigned to img[src] via data-binding is first normalized and turned into\n   * an absolute url. Afterwards, the url is matched against the `imgSrcSanitizationWhitelist`\n   * regular expression. If a match is found, the original url is written into the dom. Otherwise,\n   * the absolute url is prefixed with `'unsafe:'` string and only then is it written into the DOM.\n   *\n   * @param {RegExp=} regexp New regexp to whitelist urls with.\n   * @returns {RegExp|ng.$compileProvider} Current RegExp if called without value or self for\n   *    chaining otherwise.\n   */\n  this.imgSrcSanitizationWhitelist = function(regexp) {\n    if (isDefined(regexp)) {\n      imgSrcSanitizationWhitelist = regexp;\n      return this;\n    }\n    return imgSrcSanitizationWhitelist;\n  };\n\n  this.$get = function() {\n    return function sanitizeUri(uri, isImage) {\n      var regex = isImage ? imgSrcSanitizationWhitelist : aHrefSanitizationWhitelist;\n      var normalizedVal;\n      normalizedVal = urlResolve(uri).href;\n      if (normalizedVal !== '' && !normalizedVal.match(regex)) {\n        return 'unsafe:' + normalizedVal;\n      }\n      return uri;\n    };\n  };\n}\n\n/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n *     Any commits to this file should be reviewed with security in mind.  *\n *   Changes to this file can potentially create security vulnerabilities. *\n *          An approval from 2 Core members with history of modifying      *\n *                         this file is required.                          *\n *                                                                         *\n *  Does the change somehow allow for arbitrary javascript to be executed? *\n *    Or allows for someone to change the prototype of built-in objects?   *\n *     Or gives undesired access to variables likes document or window?    *\n * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */\n\nvar $sceMinErr = minErr('$sce');\n\nvar SCE_CONTEXTS = {\n  HTML: 'html',\n  CSS: 'css',\n  URL: 'url',\n  // RESOURCE_URL is a subtype of URL used in contexts where a privileged resource is sourced from a\n  // url.  (e.g. ng-include, script src, templateUrl)\n  RESOURCE_URL: 'resourceUrl',\n  JS: 'js'\n};\n\n// Helper functions follow.\n\nfunction adjustMatcher(matcher) {\n  if (matcher === 'self') {\n    return matcher;\n  } else if (isString(matcher)) {\n    // Strings match exactly except for 2 wildcards - '*' and '**'.\n    // '*' matches any character except those from the set ':/.?&'.\n    // '**' matches any character (like .* in a RegExp).\n    // More than 2 *'s raises an error as it's ill defined.\n    if (matcher.indexOf('***') > -1) {\n      throw $sceMinErr('iwcard',\n          'Illegal sequence *** in string matcher.  String: {0}', matcher);\n    }\n    matcher = escapeForRegexp(matcher).\n                  replace('\\\\*\\\\*', '.*').\n                  replace('\\\\*', '[^:/.?&;]*');\n    return new RegExp('^' + matcher + '$');\n  } else if (isRegExp(matcher)) {\n    // The only other type of matcher allowed is a Regexp.\n    // Match entire URL / disallow partial matches.\n    // Flags are reset (i.e. no global, ignoreCase or multiline)\n    return new RegExp('^' + matcher.source + '$');\n  } else {\n    throw $sceMinErr('imatcher',\n        'Matchers may only be \"self\", string patterns or RegExp objects');\n  }\n}\n\n\nfunction adjustMatchers(matchers) {\n  var adjustedMatchers = [];\n  if (isDefined(matchers)) {\n    forEach(matchers, function(matcher) {\n      adjustedMatchers.push(adjustMatcher(matcher));\n    });\n  }\n  return adjustedMatchers;\n}\n\n\n/**\n * @ngdoc service\n * @name $sceDelegate\n * @kind function\n *\n * @description\n *\n * `$sceDelegate` is a service that is used by the `$sce` service to provide {@link ng.$sce Strict\n * Contextual Escaping (SCE)} services to AngularJS.\n *\n * Typically, you would configure or override the {@link ng.$sceDelegate $sceDelegate} instead of\n * the `$sce` service to customize the way Strict Contextual Escaping works in AngularJS.  This is\n * because, while the `$sce` provides numerous shorthand methods, etc., you really only need to\n * override 3 core functions (`trustAs`, `getTrusted` and `valueOf`) to replace the way things\n * work because `$sce` delegates to `$sceDelegate` for these operations.\n *\n * Refer {@link ng.$sceDelegateProvider $sceDelegateProvider} to configure this service.\n *\n * The default instance of `$sceDelegate` should work out of the box with little pain.  While you\n * can override it completely to change the behavior of `$sce`, the common case would\n * involve configuring the {@link ng.$sceDelegateProvider $sceDelegateProvider} instead by setting\n * your own whitelists and blacklists for trusting URLs used for loading AngularJS resources such as\n * templates.  Refer {@link ng.$sceDelegateProvider#resourceUrlWhitelist\n * $sceDelegateProvider.resourceUrlWhitelist} and {@link\n * ng.$sceDelegateProvider#resourceUrlBlacklist $sceDelegateProvider.resourceUrlBlacklist}\n */\n\n/**\n * @ngdoc provider\n * @name $sceDelegateProvider\n * @description\n *\n * The `$sceDelegateProvider` provider allows developers to configure the {@link ng.$sceDelegate\n * $sceDelegate} service.  This allows one to get/set the whitelists and blacklists used to ensure\n * that the URLs used for sourcing Angular templates are safe.  Refer {@link\n * ng.$sceDelegateProvider#resourceUrlWhitelist $sceDelegateProvider.resourceUrlWhitelist} and\n * {@link ng.$sceDelegateProvider#resourceUrlBlacklist $sceDelegateProvider.resourceUrlBlacklist}\n *\n * For the general details about this service in Angular, read the main page for {@link ng.$sce\n * Strict Contextual Escaping (SCE)}.\n *\n * **Example**:  Consider the following case. <a name=\"example\"></a>\n *\n * - your app is hosted at url `http://myapp.example.com/`\n * - but some of your templates are hosted on other domains you control such as\n *   `http://srv01.assets.example.com/`,  `http://srv02.assets.example.com/`, etc.\n * - and you have an open redirect at `http://myapp.example.com/clickThru?...`.\n *\n * Here is what a secure configuration for this scenario might look like:\n *\n * ```\n *  angular.module('myApp', []).config(function($sceDelegateProvider) {\n *    $sceDelegateProvider.resourceUrlWhitelist([\n *      // Allow same origin resource loads.\n *      'self',\n *      // Allow loading from our assets domain.  Notice the difference between * and **.\n *      'http://srv*.assets.example.com/**'\n *    ]);\n *\n *    // The blacklist overrides the whitelist so the open redirect here is blocked.\n *    $sceDelegateProvider.resourceUrlBlacklist([\n *      'http://myapp.example.com/clickThru**'\n *    ]);\n *  });\n * ```\n */\n\nfunction $SceDelegateProvider() {\n  this.SCE_CONTEXTS = SCE_CONTEXTS;\n\n  // Resource URLs can also be trusted by policy.\n  var resourceUrlWhitelist = ['self'],\n      resourceUrlBlacklist = [];\n\n  /**\n   * @ngdoc method\n   * @name $sceDelegateProvider#resourceUrlWhitelist\n   * @kind function\n   *\n   * @param {Array=} whitelist When provided, replaces the resourceUrlWhitelist with the value\n   *    provided.  This must be an array or null.  A snapshot of this array is used so further\n   *    changes to the array are ignored.\n   *\n   *    Follow {@link ng.$sce#resourceUrlPatternItem this link} for a description of the items\n   *    allowed in this array.\n   *\n   *    <div class=\"alert alert-warning\">\n   *    **Note:** an empty whitelist array will block all URLs!\n   *    </div>\n   *\n   * @return {Array} the currently set whitelist array.\n   *\n   * The **default value** when no whitelist has been explicitly set is `['self']` allowing only\n   * same origin resource requests.\n   *\n   * @description\n   * Sets/Gets the whitelist of trusted resource URLs.\n   */\n  this.resourceUrlWhitelist = function(value) {\n    if (arguments.length) {\n      resourceUrlWhitelist = adjustMatchers(value);\n    }\n    return resourceUrlWhitelist;\n  };\n\n  /**\n   * @ngdoc method\n   * @name $sceDelegateProvider#resourceUrlBlacklist\n   * @kind function\n   *\n   * @param {Array=} blacklist When provided, replaces the resourceUrlBlacklist with the value\n   *    provided.  This must be an array or null.  A snapshot of this array is used so further\n   *    changes to the array are ignored.\n   *\n   *    Follow {@link ng.$sce#resourceUrlPatternItem this link} for a description of the items\n   *    allowed in this array.\n   *\n   *    The typical usage for the blacklist is to **block\n   *    [open redirects](http://cwe.mitre.org/data/definitions/601.html)** served by your domain as\n   *    these would otherwise be trusted but actually return content from the redirected domain.\n   *\n   *    Finally, **the blacklist overrides the whitelist** and has the final say.\n   *\n   * @return {Array} the currently set blacklist array.\n   *\n   * The **default value** when no whitelist has been explicitly set is the empty array (i.e. there\n   * is no blacklist.)\n   *\n   * @description\n   * Sets/Gets the blacklist of trusted resource URLs.\n   */\n\n  this.resourceUrlBlacklist = function(value) {\n    if (arguments.length) {\n      resourceUrlBlacklist = adjustMatchers(value);\n    }\n    return resourceUrlBlacklist;\n  };\n\n  this.$get = ['$injector', function($injector) {\n\n    var htmlSanitizer = function htmlSanitizer(html) {\n      throw $sceMinErr('unsafe', 'Attempting to use an unsafe value in a safe context.');\n    };\n\n    if ($injector.has('$sanitize')) {\n      htmlSanitizer = $injector.get('$sanitize');\n    }\n\n\n    function matchUrl(matcher, parsedUrl) {\n      if (matcher === 'self') {\n        return urlIsSameOrigin(parsedUrl);\n      } else {\n        // definitely a regex.  See adjustMatchers()\n        return !!matcher.exec(parsedUrl.href);\n      }\n    }\n\n    function isResourceUrlAllowedByPolicy(url) {\n      var parsedUrl = urlResolve(url.toString());\n      var i, n, allowed = false;\n      // Ensure that at least one item from the whitelist allows this url.\n      for (i = 0, n = resourceUrlWhitelist.length; i < n; i++) {\n        if (matchUrl(resourceUrlWhitelist[i], parsedUrl)) {\n          allowed = true;\n          break;\n        }\n      }\n      if (allowed) {\n        // Ensure that no item from the blacklist blocked this url.\n        for (i = 0, n = resourceUrlBlacklist.length; i < n; i++) {\n          if (matchUrl(resourceUrlBlacklist[i], parsedUrl)) {\n            allowed = false;\n            break;\n          }\n        }\n      }\n      return allowed;\n    }\n\n    function generateHolderType(Base) {\n      var holderType = function TrustedValueHolderType(trustedValue) {\n        this.$$unwrapTrustedValue = function() {\n          return trustedValue;\n        };\n      };\n      if (Base) {\n        holderType.prototype = new Base();\n      }\n      holderType.prototype.valueOf = function sceValueOf() {\n        return this.$$unwrapTrustedValue();\n      };\n      holderType.prototype.toString = function sceToString() {\n        return this.$$unwrapTrustedValue().toString();\n      };\n      return holderType;\n    }\n\n    var trustedValueHolderBase = generateHolderType(),\n        byType = {};\n\n    byType[SCE_CONTEXTS.HTML] = generateHolderType(trustedValueHolderBase);\n    byType[SCE_CONTEXTS.CSS] = generateHolderType(trustedValueHolderBase);\n    byType[SCE_CONTEXTS.URL] = generateHolderType(trustedValueHolderBase);\n    byType[SCE_CONTEXTS.JS] = generateHolderType(trustedValueHolderBase);\n    byType[SCE_CONTEXTS.RESOURCE_URL] = generateHolderType(byType[SCE_CONTEXTS.URL]);\n\n    /**\n     * @ngdoc method\n     * @name $sceDelegate#trustAs\n     *\n     * @description\n     * Returns an object that is trusted by angular for use in specified strict\n     * contextual escaping contexts (such as ng-bind-html, ng-include, any src\n     * attribute interpolation, any dom event binding attribute interpolation\n     * such as for onclick,  etc.) that uses the provided value.\n     * See {@link ng.$sce $sce} for enabling strict contextual escaping.\n     *\n     * @param {string} type The kind of context in which this value is safe for use.  e.g. url,\n     *   resourceUrl, html, js and css.\n     * @param {*} value The value that that should be considered trusted/safe.\n     * @returns {*} A value that can be used to stand in for the provided `value` in places\n     * where Angular expects a $sce.trustAs() return value.\n     */\n    function trustAs(type, trustedValue) {\n      var Constructor = (byType.hasOwnProperty(type) ? byType[type] : null);\n      if (!Constructor) {\n        throw $sceMinErr('icontext',\n            'Attempted to trust a value in invalid context. Context: {0}; Value: {1}',\n            type, trustedValue);\n      }\n      if (trustedValue === null || isUndefined(trustedValue) || trustedValue === '') {\n        return trustedValue;\n      }\n      // All the current contexts in SCE_CONTEXTS happen to be strings.  In order to avoid trusting\n      // mutable objects, we ensure here that the value passed in is actually a string.\n      if (typeof trustedValue !== 'string') {\n        throw $sceMinErr('itype',\n            'Attempted to trust a non-string value in a content requiring a string: Context: {0}',\n            type);\n      }\n      return new Constructor(trustedValue);\n    }\n\n    /**\n     * @ngdoc method\n     * @name $sceDelegate#valueOf\n     *\n     * @description\n     * If the passed parameter had been returned by a prior call to {@link ng.$sceDelegate#trustAs\n     * `$sceDelegate.trustAs`}, returns the value that had been passed to {@link\n     * ng.$sceDelegate#trustAs `$sceDelegate.trustAs`}.\n     *\n     * If the passed parameter is not a value that had been returned by {@link\n     * ng.$sceDelegate#trustAs `$sceDelegate.trustAs`}, returns it as-is.\n     *\n     * @param {*} value The result of a prior {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs`}\n     *      call or anything else.\n     * @returns {*} The `value` that was originally provided to {@link ng.$sceDelegate#trustAs\n     *     `$sceDelegate.trustAs`} if `value` is the result of such a call.  Otherwise, returns\n     *     `value` unchanged.\n     */\n    function valueOf(maybeTrusted) {\n      if (maybeTrusted instanceof trustedValueHolderBase) {\n        return maybeTrusted.$$unwrapTrustedValue();\n      } else {\n        return maybeTrusted;\n      }\n    }\n\n    /**\n     * @ngdoc method\n     * @name $sceDelegate#getTrusted\n     *\n     * @description\n     * Takes the result of a {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs`} call and\n     * returns the originally supplied value if the queried context type is a supertype of the\n     * created type.  If this condition isn't satisfied, throws an exception.\n     *\n     * <div class=\"alert alert-danger\">\n     * Disabling auto-escaping is extremely dangerous, it usually creates a Cross Site Scripting\n     * (XSS) vulnerability in your application.\n     * </div>\n     *\n     * @param {string} type The kind of context in which this value is to be used.\n     * @param {*} maybeTrusted The result of a prior {@link ng.$sceDelegate#trustAs\n     *     `$sceDelegate.trustAs`} call.\n     * @returns {*} The value the was originally provided to {@link ng.$sceDelegate#trustAs\n     *     `$sceDelegate.trustAs`} if valid in this context.  Otherwise, throws an exception.\n     */\n    function getTrusted(type, maybeTrusted) {\n      if (maybeTrusted === null || isUndefined(maybeTrusted) || maybeTrusted === '') {\n        return maybeTrusted;\n      }\n      var constructor = (byType.hasOwnProperty(type) ? byType[type] : null);\n      if (constructor && maybeTrusted instanceof constructor) {\n        return maybeTrusted.$$unwrapTrustedValue();\n      }\n      // If we get here, then we may only take one of two actions.\n      // 1. sanitize the value for the requested type, or\n      // 2. throw an exception.\n      if (type === SCE_CONTEXTS.RESOURCE_URL) {\n        if (isResourceUrlAllowedByPolicy(maybeTrusted)) {\n          return maybeTrusted;\n        } else {\n          throw $sceMinErr('insecurl',\n              'Blocked loading resource from url not allowed by $sceDelegate policy.  URL: {0}',\n              maybeTrusted.toString());\n        }\n      } else if (type === SCE_CONTEXTS.HTML) {\n        return htmlSanitizer(maybeTrusted);\n      }\n      throw $sceMinErr('unsafe', 'Attempting to use an unsafe value in a safe context.');\n    }\n\n    return { trustAs: trustAs,\n             getTrusted: getTrusted,\n             valueOf: valueOf };\n  }];\n}\n\n\n/**\n * @ngdoc provider\n * @name $sceProvider\n * @description\n *\n * The $sceProvider provider allows developers to configure the {@link ng.$sce $sce} service.\n * -   enable/disable Strict Contextual Escaping (SCE) in a module\n * -   override the default implementation with a custom delegate\n *\n * Read more about {@link ng.$sce Strict Contextual Escaping (SCE)}.\n */\n\n/* jshint maxlen: false*/\n\n/**\n * @ngdoc service\n * @name $sce\n * @kind function\n *\n * @description\n *\n * `$sce` is a service that provides Strict Contextual Escaping services to AngularJS.\n *\n * # Strict Contextual Escaping\n *\n * Strict Contextual Escaping (SCE) is a mode in which AngularJS requires bindings in certain\n * contexts to result in a value that is marked as safe to use for that context.  One example of\n * such a context is binding arbitrary html controlled by the user via `ng-bind-html`.  We refer\n * to these contexts as privileged or SCE contexts.\n *\n * As of version 1.2, Angular ships with SCE enabled by default.\n *\n * Note:  When enabled (the default), IE<11 in quirks mode is not supported.  In this mode, IE<11 allow\n * one to execute arbitrary javascript by the use of the expression() syntax.  Refer\n * <http://blogs.msdn.com/b/ie/archive/2008/10/16/ending-expressions.aspx> to learn more about them.\n * You can ensure your document is in standards mode and not quirks mode by adding `<!doctype html>`\n * to the top of your HTML document.\n *\n * SCE assists in writing code in a way that (a) is secure by default and (b) makes auditing for\n * security vulnerabilities such as XSS, clickjacking, etc. a lot easier.\n *\n * Here's an example of a binding in a privileged context:\n *\n * ```\n * <input ng-model=\"userHtml\" aria-label=\"User input\">\n * <div ng-bind-html=\"userHtml\"></div>\n * ```\n *\n * Notice that `ng-bind-html` is bound to `userHtml` controlled by the user.  With SCE\n * disabled, this application allows the user to render arbitrary HTML into the DIV.\n * In a more realistic example, one may be rendering user comments, blog articles, etc. via\n * bindings.  (HTML is just one example of a context where rendering user controlled input creates\n * security vulnerabilities.)\n *\n * For the case of HTML, you might use a library, either on the client side, or on the server side,\n * to sanitize unsafe HTML before binding to the value and rendering it in the document.\n *\n * How would you ensure that every place that used these types of bindings was bound to a value that\n * was sanitized by your library (or returned as safe for rendering by your server?)  How can you\n * ensure that you didn't accidentally delete the line that sanitized the value, or renamed some\n * properties/fields and forgot to update the binding to the sanitized value?\n *\n * To be secure by default, you want to ensure that any such bindings are disallowed unless you can\n * determine that something explicitly says it's safe to use a value for binding in that\n * context.  You can then audit your code (a simple grep would do) to ensure that this is only done\n * for those values that you can easily tell are safe - because they were received from your server,\n * sanitized by your library, etc.  You can organize your codebase to help with this - perhaps\n * allowing only the files in a specific directory to do this.  Ensuring that the internal API\n * exposed by that code doesn't markup arbitrary values as safe then becomes a more manageable task.\n *\n * In the case of AngularJS' SCE service, one uses {@link ng.$sce#trustAs $sce.trustAs}\n * (and shorthand methods such as {@link ng.$sce#trustAsHtml $sce.trustAsHtml}, etc.) to\n * obtain values that will be accepted by SCE / privileged contexts.\n *\n *\n * ## How does it work?\n *\n * In privileged contexts, directives and code will bind to the result of {@link ng.$sce#getTrusted\n * $sce.getTrusted(context, value)} rather than to the value directly.  Directives use {@link\n * ng.$sce#parseAs $sce.parseAs} rather than `$parse` to watch attribute bindings, which performs the\n * {@link ng.$sce#getTrusted $sce.getTrusted} behind the scenes on non-constant literals.\n *\n * As an example, {@link ng.directive:ngBindHtml ngBindHtml} uses {@link\n * ng.$sce#parseAsHtml $sce.parseAsHtml(binding expression)}.  Here's the actual code (slightly\n * simplified):\n *\n * ```\n * var ngBindHtmlDirective = ['$sce', function($sce) {\n *   return function(scope, element, attr) {\n *     scope.$watch($sce.parseAsHtml(attr.ngBindHtml), function(value) {\n *       element.html(value || '');\n *     });\n *   };\n * }];\n * ```\n *\n * ## Impact on loading templates\n *\n * This applies both to the {@link ng.directive:ngInclude `ng-include`} directive as well as\n * `templateUrl`'s specified by {@link guide/directive directives}.\n *\n * By default, Angular only loads templates from the same domain and protocol as the application\n * document.  This is done by calling {@link ng.$sce#getTrustedResourceUrl\n * $sce.getTrustedResourceUrl} on the template URL.  To load templates from other domains and/or\n * protocols, you may either {@link ng.$sceDelegateProvider#resourceUrlWhitelist whitelist\n * them} or {@link ng.$sce#trustAsResourceUrl wrap it} into a trusted value.\n *\n * *Please note*:\n * The browser's\n * [Same Origin Policy](https://code.google.com/p/browsersec/wiki/Part2#Same-origin_policy_for_XMLHttpRequest)\n * and [Cross-Origin Resource Sharing (CORS)](http://www.w3.org/TR/cors/)\n * policy apply in addition to this and may further restrict whether the template is successfully\n * loaded.  This means that without the right CORS policy, loading templates from a different domain\n * won't work on all browsers.  Also, loading templates from `file://` URL does not work on some\n * browsers.\n *\n * ## This feels like too much overhead\n *\n * It's important to remember that SCE only applies to interpolation expressions.\n *\n * If your expressions are constant literals, they're automatically trusted and you don't need to\n * call `$sce.trustAs` on them (remember to include the `ngSanitize` module) (e.g.\n * `<div ng-bind-html=\"'<b>implicitly trusted</b>'\"></div>`) just works.\n *\n * Additionally, `a[href]` and `img[src]` automatically sanitize their URLs and do not pass them\n * through {@link ng.$sce#getTrusted $sce.getTrusted}.  SCE doesn't play a role here.\n *\n * The included {@link ng.$sceDelegate $sceDelegate} comes with sane defaults to allow you to load\n * templates in `ng-include` from your application's domain without having to even know about SCE.\n * It blocks loading templates from other domains or loading templates over http from an https\n * served document.  You can change these by setting your own custom {@link\n * ng.$sceDelegateProvider#resourceUrlWhitelist whitelists} and {@link\n * ng.$sceDelegateProvider#resourceUrlBlacklist blacklists} for matching such URLs.\n *\n * This significantly reduces the overhead.  It is far easier to pay the small overhead and have an\n * application that's secure and can be audited to verify that with much more ease than bolting\n * security onto an application later.\n *\n * <a name=\"contexts\"></a>\n * ## What trusted context types are supported?\n *\n * | Context             | Notes          |\n * |---------------------|----------------|\n * | `$sce.HTML`         | For HTML that's safe to source into the application.  The {@link ng.directive:ngBindHtml ngBindHtml} directive uses this context for bindings. If an unsafe value is encountered and the {@link ngSanitize $sanitize} module is present this will sanitize the value instead of throwing an error. |\n * | `$sce.CSS`          | For CSS that's safe to source into the application.  Currently unused.  Feel free to use it in your own directives. |\n * | `$sce.URL`          | For URLs that are safe to follow as links.  Currently unused (`<a href=` and `<img src=` sanitize their urls and don't constitute an SCE context. |\n * | `$sce.RESOURCE_URL` | For URLs that are not only safe to follow as links, but whose contents are also safe to include in your application.  Examples include `ng-include`, `src` / `ngSrc` bindings for tags other than `IMG` (e.g. `IFRAME`, `OBJECT`, etc.)  <br><br>Note that `$sce.RESOURCE_URL` makes a stronger statement about the URL than `$sce.URL` does and therefore contexts requiring values trusted for `$sce.RESOURCE_URL` can be used anywhere that values trusted for `$sce.URL` are required. |\n * | `$sce.JS`           | For JavaScript that is safe to execute in your application's context.  Currently unused.  Feel free to use it in your own directives. |\n *\n * ## Format of items in {@link ng.$sceDelegateProvider#resourceUrlWhitelist resourceUrlWhitelist}/{@link ng.$sceDelegateProvider#resourceUrlBlacklist Blacklist} <a name=\"resourceUrlPatternItem\"></a>\n *\n *  Each element in these arrays must be one of the following:\n *\n *  - **'self'**\n *    - The special **string**, `'self'`, can be used to match against all URLs of the **same\n *      domain** as the application document using the **same protocol**.\n *  - **String** (except the special value `'self'`)\n *    - The string is matched against the full *normalized / absolute URL* of the resource\n *      being tested (substring matches are not good enough.)\n *    - There are exactly **two wildcard sequences** - `*` and `**`.  All other characters\n *      match themselves.\n *    - `*`: matches zero or more occurrences of any character other than one of the following 6\n *      characters: '`:`', '`/`', '`.`', '`?`', '`&`' and '`;`'.  It's a useful wildcard for use\n *      in a whitelist.\n *    - `**`: matches zero or more occurrences of *any* character.  As such, it's not\n *      appropriate for use in a scheme, domain, etc. as it would match too much.  (e.g.\n *      http://**.example.com/ would match http://evil.com/?ignore=.example.com/ and that might\n *      not have been the intention.)  Its usage at the very end of the path is ok.  (e.g.\n *      http://foo.example.com/templates/**).\n *  - **RegExp** (*see caveat below*)\n *    - *Caveat*:  While regular expressions are powerful and offer great flexibility,  their syntax\n *      (and all the inevitable escaping) makes them *harder to maintain*.  It's easy to\n *      accidentally introduce a bug when one updates a complex expression (imho, all regexes should\n *      have good test coverage).  For instance, the use of `.` in the regex is correct only in a\n *      small number of cases.  A `.` character in the regex used when matching the scheme or a\n *      subdomain could be matched against a `:` or literal `.` that was likely not intended.   It\n *      is highly recommended to use the string patterns and only fall back to regular expressions\n *      as a last resort.\n *    - The regular expression must be an instance of RegExp (i.e. not a string.)  It is\n *      matched against the **entire** *normalized / absolute URL* of the resource being tested\n *      (even when the RegExp did not have the `^` and `$` codes.)  In addition, any flags\n *      present on the RegExp (such as multiline, global, ignoreCase) are ignored.\n *    - If you are generating your JavaScript from some other templating engine (not\n *      recommended, e.g. in issue [#4006](https://github.com/angular/angular.js/issues/4006)),\n *      remember to escape your regular expression (and be aware that you might need more than\n *      one level of escaping depending on your templating engine and the way you interpolated\n *      the value.)  Do make use of your platform's escaping mechanism as it might be good\n *      enough before coding your own.  E.g. Ruby has\n *      [Regexp.escape(str)](http://www.ruby-doc.org/core-2.0.0/Regexp.html#method-c-escape)\n *      and Python has [re.escape](http://docs.python.org/library/re.html#re.escape).\n *      Javascript lacks a similar built in function for escaping.  Take a look at Google\n *      Closure library's [goog.string.regExpEscape(s)](\n *      http://docs.closure-library.googlecode.com/git/closure_goog_string_string.js.source.html#line962).\n *\n * Refer {@link ng.$sceDelegateProvider $sceDelegateProvider} for an example.\n *\n * ## Show me an example using SCE.\n *\n * <example module=\"mySceApp\" deps=\"angular-sanitize.js\">\n * <file name=\"index.html\">\n *   <div ng-controller=\"AppController as myCtrl\">\n *     <i ng-bind-html=\"myCtrl.explicitlyTrustedHtml\" id=\"explicitlyTrustedHtml\"></i><br><br>\n *     <b>User comments</b><br>\n *     By default, HTML that isn't explicitly trusted (e.g. Alice's comment) is sanitized when\n *     $sanitize is available.  If $sanitize isn't available, this results in an error instead of an\n *     exploit.\n *     <div class=\"well\">\n *       <div ng-repeat=\"userComment in myCtrl.userComments\">\n *         <b>{{userComment.name}}</b>:\n *         <span ng-bind-html=\"userComment.htmlComment\" class=\"htmlComment\"></span>\n *         <br>\n *       </div>\n *     </div>\n *   </div>\n * </file>\n *\n * <file name=\"script.js\">\n *   angular.module('mySceApp', ['ngSanitize'])\n *     .controller('AppController', ['$http', '$templateCache', '$sce',\n *       function($http, $templateCache, $sce) {\n *         var self = this;\n *         $http.get(\"test_data.json\", {cache: $templateCache}).success(function(userComments) {\n *           self.userComments = userComments;\n *         });\n *         self.explicitlyTrustedHtml = $sce.trustAsHtml(\n *             '<span onmouseover=\"this.textContent=&quot;Explicitly trusted HTML bypasses ' +\n *             'sanitization.&quot;\">Hover over this text.</span>');\n *       }]);\n * </file>\n *\n * <file name=\"test_data.json\">\n * [\n *   { \"name\": \"Alice\",\n *     \"htmlComment\":\n *         \"<span onmouseover='this.textContent=\\\"PWN3D!\\\"'>Is <i>anyone</i> reading this?</span>\"\n *   },\n *   { \"name\": \"Bob\",\n *     \"htmlComment\": \"<i>Yes!</i>  Am I the only other one?\"\n *   }\n * ]\n * </file>\n *\n * <file name=\"protractor.js\" type=\"protractor\">\n *   describe('SCE doc demo', function() {\n *     it('should sanitize untrusted values', function() {\n *       expect(element.all(by.css('.htmlComment')).first().getInnerHtml())\n *           .toBe('<span>Is <i>anyone</i> reading this?</span>');\n *     });\n *\n *     it('should NOT sanitize explicitly trusted values', function() {\n *       expect(element(by.id('explicitlyTrustedHtml')).getInnerHtml()).toBe(\n *           '<span onmouseover=\"this.textContent=&quot;Explicitly trusted HTML bypasses ' +\n *           'sanitization.&quot;\">Hover over this text.</span>');\n *     });\n *   });\n * </file>\n * </example>\n *\n *\n *\n * ## Can I disable SCE completely?\n *\n * Yes, you can.  However, this is strongly discouraged.  SCE gives you a lot of security benefits\n * for little coding overhead.  It will be much harder to take an SCE disabled application and\n * either secure it on your own or enable SCE at a later stage.  It might make sense to disable SCE\n * for cases where you have a lot of existing code that was written before SCE was introduced and\n * you're migrating them a module at a time.\n *\n * That said, here's how you can completely disable SCE:\n *\n * ```\n * angular.module('myAppWithSceDisabledmyApp', []).config(function($sceProvider) {\n *   // Completely disable SCE.  For demonstration purposes only!\n *   // Do not use in new projects.\n *   $sceProvider.enabled(false);\n * });\n * ```\n *\n */\n/* jshint maxlen: 100 */\n\nfunction $SceProvider() {\n  var enabled = true;\n\n  /**\n   * @ngdoc method\n   * @name $sceProvider#enabled\n   * @kind function\n   *\n   * @param {boolean=} value If provided, then enables/disables SCE.\n   * @return {boolean} true if SCE is enabled, false otherwise.\n   *\n   * @description\n   * Enables/disables SCE and returns the current value.\n   */\n  this.enabled = function(value) {\n    if (arguments.length) {\n      enabled = !!value;\n    }\n    return enabled;\n  };\n\n\n  /* Design notes on the default implementation for SCE.\n   *\n   * The API contract for the SCE delegate\n   * -------------------------------------\n   * The SCE delegate object must provide the following 3 methods:\n   *\n   * - trustAs(contextEnum, value)\n   *     This method is used to tell the SCE service that the provided value is OK to use in the\n   *     contexts specified by contextEnum.  It must return an object that will be accepted by\n   *     getTrusted() for a compatible contextEnum and return this value.\n   *\n   * - valueOf(value)\n   *     For values that were not produced by trustAs(), return them as is.  For values that were\n   *     produced by trustAs(), return the corresponding input value to trustAs.  Basically, if\n   *     trustAs is wrapping the given values into some type, this operation unwraps it when given\n   *     such a value.\n   *\n   * - getTrusted(contextEnum, value)\n   *     This function should return the a value that is safe to use in the context specified by\n   *     contextEnum or throw and exception otherwise.\n   *\n   * NOTE: This contract deliberately does NOT state that values returned by trustAs() must be\n   * opaque or wrapped in some holder object.  That happens to be an implementation detail.  For\n   * instance, an implementation could maintain a registry of all trusted objects by context.  In\n   * such a case, trustAs() would return the same object that was passed in.  getTrusted() would\n   * return the same object passed in if it was found in the registry under a compatible context or\n   * throw an exception otherwise.  An implementation might only wrap values some of the time based\n   * on some criteria.  getTrusted() might return a value and not throw an exception for special\n   * constants or objects even if not wrapped.  All such implementations fulfill this contract.\n   *\n   *\n   * A note on the inheritance model for SCE contexts\n   * ------------------------------------------------\n   * I've used inheritance and made RESOURCE_URL wrapped types a subtype of URL wrapped types.  This\n   * is purely an implementation details.\n   *\n   * The contract is simply this:\n   *\n   *     getTrusted($sce.RESOURCE_URL, value) succeeding implies that getTrusted($sce.URL, value)\n   *     will also succeed.\n   *\n   * Inheritance happens to capture this in a natural way.  In some future, we\n   * may not use inheritance anymore.  That is OK because no code outside of\n   * sce.js and sceSpecs.js would need to be aware of this detail.\n   */\n\n  this.$get = ['$parse', '$sceDelegate', function(\n                $parse,   $sceDelegate) {\n    // Prereq: Ensure that we're not running in IE<11 quirks mode.  In that mode, IE < 11 allow\n    // the \"expression(javascript expression)\" syntax which is insecure.\n    if (enabled && msie < 8) {\n      throw $sceMinErr('iequirks',\n        'Strict Contextual Escaping does not support Internet Explorer version < 11 in quirks ' +\n        'mode.  You can fix this by adding the text <!doctype html> to the top of your HTML ' +\n        'document.  See http://docs.angularjs.org/api/ng.$sce for more information.');\n    }\n\n    var sce = shallowCopy(SCE_CONTEXTS);\n\n    /**\n     * @ngdoc method\n     * @name $sce#isEnabled\n     * @kind function\n     *\n     * @return {Boolean} true if SCE is enabled, false otherwise.  If you want to set the value, you\n     * have to do it at module config time on {@link ng.$sceProvider $sceProvider}.\n     *\n     * @description\n     * Returns a boolean indicating if SCE is enabled.\n     */\n    sce.isEnabled = function() {\n      return enabled;\n    };\n    sce.trustAs = $sceDelegate.trustAs;\n    sce.getTrusted = $sceDelegate.getTrusted;\n    sce.valueOf = $sceDelegate.valueOf;\n\n    if (!enabled) {\n      sce.trustAs = sce.getTrusted = function(type, value) { return value; };\n      sce.valueOf = identity;\n    }\n\n    /**\n     * @ngdoc method\n     * @name $sce#parseAs\n     *\n     * @description\n     * Converts Angular {@link guide/expression expression} into a function.  This is like {@link\n     * ng.$parse $parse} and is identical when the expression is a literal constant.  Otherwise, it\n     * wraps the expression in a call to {@link ng.$sce#getTrusted $sce.getTrusted(*type*,\n     * *result*)}\n     *\n     * @param {string} type The kind of SCE context in which this result will be used.\n     * @param {string} expression String expression to compile.\n     * @returns {function(context, locals)} a function which represents the compiled expression:\n     *\n     *    * `context` – `{object}` – an object against which any expressions embedded in the strings\n     *      are evaluated against (typically a scope object).\n     *    * `locals` – `{object=}` – local variables context object, useful for overriding values in\n     *      `context`.\n     */\n    sce.parseAs = function sceParseAs(type, expr) {\n      var parsed = $parse(expr);\n      if (parsed.literal && parsed.constant) {\n        return parsed;\n      } else {\n        return $parse(expr, function(value) {\n          return sce.getTrusted(type, value);\n        });\n      }\n    };\n\n    /**\n     * @ngdoc method\n     * @name $sce#trustAs\n     *\n     * @description\n     * Delegates to {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs`}.  As such,\n     * returns an object that is trusted by angular for use in specified strict contextual\n     * escaping contexts (such as ng-bind-html, ng-include, any src attribute\n     * interpolation, any dom event binding attribute interpolation such as for onclick,  etc.)\n     * that uses the provided value.  See * {@link ng.$sce $sce} for enabling strict contextual\n     * escaping.\n     *\n     * @param {string} type The kind of context in which this value is safe for use.  e.g. url,\n     *   resourceUrl, html, js and css.\n     * @param {*} value The value that that should be considered trusted/safe.\n     * @returns {*} A value that can be used to stand in for the provided `value` in places\n     * where Angular expects a $sce.trustAs() return value.\n     */\n\n    /**\n     * @ngdoc method\n     * @name $sce#trustAsHtml\n     *\n     * @description\n     * Shorthand method.  `$sce.trustAsHtml(value)` →\n     *     {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs($sce.HTML, value)`}\n     *\n     * @param {*} value The value to trustAs.\n     * @returns {*} An object that can be passed to {@link ng.$sce#getTrustedHtml\n     *     $sce.getTrustedHtml(value)} to obtain the original value.  (privileged directives\n     *     only accept expressions that are either literal constants or are the\n     *     return value of {@link ng.$sce#trustAs $sce.trustAs}.)\n     */\n\n    /**\n     * @ngdoc method\n     * @name $sce#trustAsUrl\n     *\n     * @description\n     * Shorthand method.  `$sce.trustAsUrl(value)` →\n     *     {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs($sce.URL, value)`}\n     *\n     * @param {*} value The value to trustAs.\n     * @returns {*} An object that can be passed to {@link ng.$sce#getTrustedUrl\n     *     $sce.getTrustedUrl(value)} to obtain the original value.  (privileged directives\n     *     only accept expressions that are either literal constants or are the\n     *     return value of {@link ng.$sce#trustAs $sce.trustAs}.)\n     */\n\n    /**\n     * @ngdoc method\n     * @name $sce#trustAsResourceUrl\n     *\n     * @description\n     * Shorthand method.  `$sce.trustAsResourceUrl(value)` →\n     *     {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs($sce.RESOURCE_URL, value)`}\n     *\n     * @param {*} value The value to trustAs.\n     * @returns {*} An object that can be passed to {@link ng.$sce#getTrustedResourceUrl\n     *     $sce.getTrustedResourceUrl(value)} to obtain the original value.  (privileged directives\n     *     only accept expressions that are either literal constants or are the return\n     *     value of {@link ng.$sce#trustAs $sce.trustAs}.)\n     */\n\n    /**\n     * @ngdoc method\n     * @name $sce#trustAsJs\n     *\n     * @description\n     * Shorthand method.  `$sce.trustAsJs(value)` →\n     *     {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs($sce.JS, value)`}\n     *\n     * @param {*} value The value to trustAs.\n     * @returns {*} An object that can be passed to {@link ng.$sce#getTrustedJs\n     *     $sce.getTrustedJs(value)} to obtain the original value.  (privileged directives\n     *     only accept expressions that are either literal constants or are the\n     *     return value of {@link ng.$sce#trustAs $sce.trustAs}.)\n     */\n\n    /**\n     * @ngdoc method\n     * @name $sce#getTrusted\n     *\n     * @description\n     * Delegates to {@link ng.$sceDelegate#getTrusted `$sceDelegate.getTrusted`}.  As such,\n     * takes the result of a {@link ng.$sce#trustAs `$sce.trustAs`}() call and returns the\n     * originally supplied value if the queried context type is a supertype of the created type.\n     * If this condition isn't satisfied, throws an exception.\n     *\n     * @param {string} type The kind of context in which this value is to be used.\n     * @param {*} maybeTrusted The result of a prior {@link ng.$sce#trustAs `$sce.trustAs`}\n     *                         call.\n     * @returns {*} The value the was originally provided to\n     *              {@link ng.$sce#trustAs `$sce.trustAs`} if valid in this context.\n     *              Otherwise, throws an exception.\n     */\n\n    /**\n     * @ngdoc method\n     * @name $sce#getTrustedHtml\n     *\n     * @description\n     * Shorthand method.  `$sce.getTrustedHtml(value)` →\n     *     {@link ng.$sceDelegate#getTrusted `$sceDelegate.getTrusted($sce.HTML, value)`}\n     *\n     * @param {*} value The value to pass to `$sce.getTrusted`.\n     * @returns {*} The return value of `$sce.getTrusted($sce.HTML, value)`\n     */\n\n    /**\n     * @ngdoc method\n     * @name $sce#getTrustedCss\n     *\n     * @description\n     * Shorthand method.  `$sce.getTrustedCss(value)` →\n     *     {@link ng.$sceDelegate#getTrusted `$sceDelegate.getTrusted($sce.CSS, value)`}\n     *\n     * @param {*} value The value to pass to `$sce.getTrusted`.\n     * @returns {*} The return value of `$sce.getTrusted($sce.CSS, value)`\n     */\n\n    /**\n     * @ngdoc method\n     * @name $sce#getTrustedUrl\n     *\n     * @description\n     * Shorthand method.  `$sce.getTrustedUrl(value)` →\n     *     {@link ng.$sceDelegate#getTrusted `$sceDelegate.getTrusted($sce.URL, value)`}\n     *\n     * @param {*} value The value to pass to `$sce.getTrusted`.\n     * @returns {*} The return value of `$sce.getTrusted($sce.URL, value)`\n     */\n\n    /**\n     * @ngdoc method\n     * @name $sce#getTrustedResourceUrl\n     *\n     * @description\n     * Shorthand method.  `$sce.getTrustedResourceUrl(value)` →\n     *     {@link ng.$sceDelegate#getTrusted `$sceDelegate.getTrusted($sce.RESOURCE_URL, value)`}\n     *\n     * @param {*} value The value to pass to `$sceDelegate.getTrusted`.\n     * @returns {*} The return value of `$sce.getTrusted($sce.RESOURCE_URL, value)`\n     */\n\n    /**\n     * @ngdoc method\n     * @name $sce#getTrustedJs\n     *\n     * @description\n     * Shorthand method.  `$sce.getTrustedJs(value)` →\n     *     {@link ng.$sceDelegate#getTrusted `$sceDelegate.getTrusted($sce.JS, value)`}\n     *\n     * @param {*} value The value to pass to `$sce.getTrusted`.\n     * @returns {*} The return value of `$sce.getTrusted($sce.JS, value)`\n     */\n\n    /**\n     * @ngdoc method\n     * @name $sce#parseAsHtml\n     *\n     * @description\n     * Shorthand method.  `$sce.parseAsHtml(expression string)` →\n     *     {@link ng.$sce#parseAs `$sce.parseAs($sce.HTML, value)`}\n     *\n     * @param {string} expression String expression to compile.\n     * @returns {function(context, locals)} a function which represents the compiled expression:\n     *\n     *    * `context` – `{object}` – an object against which any expressions embedded in the strings\n     *      are evaluated against (typically a scope object).\n     *    * `locals` – `{object=}` – local variables context object, useful for overriding values in\n     *      `context`.\n     */\n\n    /**\n     * @ngdoc method\n     * @name $sce#parseAsCss\n     *\n     * @description\n     * Shorthand method.  `$sce.parseAsCss(value)` →\n     *     {@link ng.$sce#parseAs `$sce.parseAs($sce.CSS, value)`}\n     *\n     * @param {string} expression String expression to compile.\n     * @returns {function(context, locals)} a function which represents the compiled expression:\n     *\n     *    * `context` – `{object}` – an object against which any expressions embedded in the strings\n     *      are evaluated against (typically a scope object).\n     *    * `locals` – `{object=}` – local variables context object, useful for overriding values in\n     *      `context`.\n     */\n\n    /**\n     * @ngdoc method\n     * @name $sce#parseAsUrl\n     *\n     * @description\n     * Shorthand method.  `$sce.parseAsUrl(value)` →\n     *     {@link ng.$sce#parseAs `$sce.parseAs($sce.URL, value)`}\n     *\n     * @param {string} expression String expression to compile.\n     * @returns {function(context, locals)} a function which represents the compiled expression:\n     *\n     *    * `context` – `{object}` – an object against which any expressions embedded in the strings\n     *      are evaluated against (typically a scope object).\n     *    * `locals` – `{object=}` – local variables context object, useful for overriding values in\n     *      `context`.\n     */\n\n    /**\n     * @ngdoc method\n     * @name $sce#parseAsResourceUrl\n     *\n     * @description\n     * Shorthand method.  `$sce.parseAsResourceUrl(value)` →\n     *     {@link ng.$sce#parseAs `$sce.parseAs($sce.RESOURCE_URL, value)`}\n     *\n     * @param {string} expression String expression to compile.\n     * @returns {function(context, locals)} a function which represents the compiled expression:\n     *\n     *    * `context` – `{object}` – an object against which any expressions embedded in the strings\n     *      are evaluated against (typically a scope object).\n     *    * `locals` – `{object=}` – local variables context object, useful for overriding values in\n     *      `context`.\n     */\n\n    /**\n     * @ngdoc method\n     * @name $sce#parseAsJs\n     *\n     * @description\n     * Shorthand method.  `$sce.parseAsJs(value)` →\n     *     {@link ng.$sce#parseAs `$sce.parseAs($sce.JS, value)`}\n     *\n     * @param {string} expression String expression to compile.\n     * @returns {function(context, locals)} a function which represents the compiled expression:\n     *\n     *    * `context` – `{object}` – an object against which any expressions embedded in the strings\n     *      are evaluated against (typically a scope object).\n     *    * `locals` – `{object=}` – local variables context object, useful for overriding values in\n     *      `context`.\n     */\n\n    // Shorthand delegations.\n    var parse = sce.parseAs,\n        getTrusted = sce.getTrusted,\n        trustAs = sce.trustAs;\n\n    forEach(SCE_CONTEXTS, function(enumValue, name) {\n      var lName = lowercase(name);\n      sce[camelCase(\"parse_as_\" + lName)] = function(expr) {\n        return parse(enumValue, expr);\n      };\n      sce[camelCase(\"get_trusted_\" + lName)] = function(value) {\n        return getTrusted(enumValue, value);\n      };\n      sce[camelCase(\"trust_as_\" + lName)] = function(value) {\n        return trustAs(enumValue, value);\n      };\n    });\n\n    return sce;\n  }];\n}\n\n/**\n * !!! This is an undocumented \"private\" service !!!\n *\n * @name $sniffer\n * @requires $window\n * @requires $document\n *\n * @property {boolean} history Does the browser support html5 history api ?\n * @property {boolean} transitions Does the browser support CSS transition events ?\n * @property {boolean} animations Does the browser support CSS animation events ?\n *\n * @description\n * This is very simple implementation of testing browser's features.\n */\nfunction $SnifferProvider() {\n  this.$get = ['$window', '$document', function($window, $document) {\n    var eventSupport = {},\n        // Chrome Packaged Apps are not allowed to access `history.pushState`. They can be detected by\n        // the presence of `chrome.app.runtime` (see https://developer.chrome.com/apps/api_index)\n        isChromePackagedApp = $window.chrome && $window.chrome.app && $window.chrome.app.runtime,\n        hasHistoryPushState = !isChromePackagedApp && $window.history && $window.history.pushState,\n        android =\n          toInt((/android (\\d+)/.exec(lowercase(($window.navigator || {}).userAgent)) || [])[1]),\n        boxee = /Boxee/i.test(($window.navigator || {}).userAgent),\n        document = $document[0] || {},\n        vendorPrefix,\n        vendorRegex = /^(Moz|webkit|ms)(?=[A-Z])/,\n        bodyStyle = document.body && document.body.style,\n        transitions = false,\n        animations = false,\n        match;\n\n    if (bodyStyle) {\n      for (var prop in bodyStyle) {\n        if (match = vendorRegex.exec(prop)) {\n          vendorPrefix = match[0];\n          vendorPrefix = vendorPrefix[0].toUpperCase() + vendorPrefix.substr(1);\n          break;\n        }\n      }\n\n      if (!vendorPrefix) {\n        vendorPrefix = ('WebkitOpacity' in bodyStyle) && 'webkit';\n      }\n\n      transitions = !!(('transition' in bodyStyle) || (vendorPrefix + 'Transition' in bodyStyle));\n      animations  = !!(('animation' in bodyStyle) || (vendorPrefix + 'Animation' in bodyStyle));\n\n      if (android && (!transitions ||  !animations)) {\n        transitions = isString(bodyStyle.webkitTransition);\n        animations = isString(bodyStyle.webkitAnimation);\n      }\n    }\n\n\n    return {\n      // Android has history.pushState, but it does not update location correctly\n      // so let's not use the history API at all.\n      // http://code.google.com/p/android/issues/detail?id=17471\n      // https://github.com/angular/angular.js/issues/904\n\n      // older webkit browser (533.9) on Boxee box has exactly the same problem as Android has\n      // so let's not use the history API also\n      // We are purposefully using `!(android < 4)` to cover the case when `android` is undefined\n      // jshint -W018\n      history: !!(hasHistoryPushState && !(android < 4) && !boxee),\n      // jshint +W018\n      hasEvent: function(event) {\n        // IE9 implements 'input' event it's so fubared that we rather pretend that it doesn't have\n        // it. In particular the event is not fired when backspace or delete key are pressed or\n        // when cut operation is performed.\n        // IE10+ implements 'input' event but it erroneously fires under various situations,\n        // e.g. when placeholder changes, or a form is focused.\n        if (event === 'input' && msie <= 11) return false;\n\n        if (isUndefined(eventSupport[event])) {\n          var divElm = document.createElement('div');\n          eventSupport[event] = 'on' + event in divElm;\n        }\n\n        return eventSupport[event];\n      },\n      csp: csp(),\n      vendorPrefix: vendorPrefix,\n      transitions: transitions,\n      animations: animations,\n      android: android\n    };\n  }];\n}\n\nvar $templateRequestMinErr = minErr('$compile');\n\n/**\n * @ngdoc provider\n * @name $templateRequestProvider\n * @description\n * Used to configure the options passed to the {@link $http} service when making a template request.\n *\n * For example, it can be used for specifying the \"Accept\" header that is sent to the server, when\n * requesting a template.\n */\nfunction $TemplateRequestProvider() {\n\n  var httpOptions;\n\n  /**\n   * @ngdoc method\n   * @name $templateRequestProvider#httpOptions\n   * @description\n   * The options to be passed to the {@link $http} service when making the request.\n   * You can use this to override options such as the \"Accept\" header for template requests.\n   *\n   * The {@link $templateRequest} will set the `cache` and the `transformResponse` properties of the\n   * options if not overridden here.\n   *\n   * @param {string=} value new value for the {@link $http} options.\n   * @returns {string|self} Returns the {@link $http} options when used as getter and self if used as setter.\n   */\n  this.httpOptions = function(val) {\n    if (val) {\n      httpOptions = val;\n      return this;\n    }\n    return httpOptions;\n  };\n\n  /**\n   * @ngdoc service\n   * @name $templateRequest\n   *\n   * @description\n   * The `$templateRequest` service runs security checks then downloads the provided template using\n   * `$http` and, upon success, stores the contents inside of `$templateCache`. If the HTTP request\n   * fails or the response data of the HTTP request is empty, a `$compile` error will be thrown (the\n   * exception can be thwarted by setting the 2nd parameter of the function to true). Note that the\n   * contents of `$templateCache` are trusted, so the call to `$sce.getTrustedUrl(tpl)` is omitted\n   * when `tpl` is of type string and `$templateCache` has the matching entry.\n   *\n   * If you want to pass custom options to the `$http` service, such as setting the Accept header you\n   * can configure this via {@link $templateRequestProvider#httpOptions}.\n   *\n   * @param {string|TrustedResourceUrl} tpl The HTTP request template URL\n   * @param {boolean=} ignoreRequestError Whether or not to ignore the exception when the request fails or the template is empty\n   *\n   * @return {Promise} a promise for the HTTP response data of the given URL.\n   *\n   * @property {number} totalPendingRequests total amount of pending template requests being downloaded.\n   */\n  this.$get = ['$templateCache', '$http', '$q', '$sce', function($templateCache, $http, $q, $sce) {\n\n    function handleRequestFn(tpl, ignoreRequestError) {\n      handleRequestFn.totalPendingRequests++;\n\n      // We consider the template cache holds only trusted templates, so\n      // there's no need to go through whitelisting again for keys that already\n      // are included in there. This also makes Angular accept any script\n      // directive, no matter its name. However, we still need to unwrap trusted\n      // types.\n      if (!isString(tpl) || isUndefined($templateCache.get(tpl))) {\n        tpl = $sce.getTrustedResourceUrl(tpl);\n      }\n\n      var transformResponse = $http.defaults && $http.defaults.transformResponse;\n\n      if (isArray(transformResponse)) {\n        transformResponse = transformResponse.filter(function(transformer) {\n          return transformer !== defaultHttpResponseTransform;\n        });\n      } else if (transformResponse === defaultHttpResponseTransform) {\n        transformResponse = null;\n      }\n\n      return $http.get(tpl, extend({\n          cache: $templateCache,\n          transformResponse: transformResponse\n        }, httpOptions))\n        ['finally'](function() {\n          handleRequestFn.totalPendingRequests--;\n        })\n        .then(function(response) {\n          $templateCache.put(tpl, response.data);\n          return response.data;\n        }, handleError);\n\n      function handleError(resp) {\n        if (!ignoreRequestError) {\n          throw $templateRequestMinErr('tpload', 'Failed to load template: {0} (HTTP status: {1} {2})',\n            tpl, resp.status, resp.statusText);\n        }\n        return $q.reject(resp);\n      }\n    }\n\n    handleRequestFn.totalPendingRequests = 0;\n\n    return handleRequestFn;\n  }];\n}\n\nfunction $$TestabilityProvider() {\n  this.$get = ['$rootScope', '$browser', '$location',\n       function($rootScope,   $browser,   $location) {\n\n    /**\n     * @name $testability\n     *\n     * @description\n     * The private $$testability service provides a collection of methods for use when debugging\n     * or by automated test and debugging tools.\n     */\n    var testability = {};\n\n    /**\n     * @name $$testability#findBindings\n     *\n     * @description\n     * Returns an array of elements that are bound (via ng-bind or {{}})\n     * to expressions matching the input.\n     *\n     * @param {Element} element The element root to search from.\n     * @param {string} expression The binding expression to match.\n     * @param {boolean} opt_exactMatch If true, only returns exact matches\n     *     for the expression. Filters and whitespace are ignored.\n     */\n    testability.findBindings = function(element, expression, opt_exactMatch) {\n      var bindings = element.getElementsByClassName('ng-binding');\n      var matches = [];\n      forEach(bindings, function(binding) {\n        var dataBinding = angular.element(binding).data('$binding');\n        if (dataBinding) {\n          forEach(dataBinding, function(bindingName) {\n            if (opt_exactMatch) {\n              var matcher = new RegExp('(^|\\\\s)' + escapeForRegexp(expression) + '(\\\\s|\\\\||$)');\n              if (matcher.test(bindingName)) {\n                matches.push(binding);\n              }\n            } else {\n              if (bindingName.indexOf(expression) != -1) {\n                matches.push(binding);\n              }\n            }\n          });\n        }\n      });\n      return matches;\n    };\n\n    /**\n     * @name $$testability#findModels\n     *\n     * @description\n     * Returns an array of elements that are two-way found via ng-model to\n     * expressions matching the input.\n     *\n     * @param {Element} element The element root to search from.\n     * @param {string} expression The model expression to match.\n     * @param {boolean} opt_exactMatch If true, only returns exact matches\n     *     for the expression.\n     */\n    testability.findModels = function(element, expression, opt_exactMatch) {\n      var prefixes = ['ng-', 'data-ng-', 'ng\\\\:'];\n      for (var p = 0; p < prefixes.length; ++p) {\n        var attributeEquals = opt_exactMatch ? '=' : '*=';\n        var selector = '[' + prefixes[p] + 'model' + attributeEquals + '\"' + expression + '\"]';\n        var elements = element.querySelectorAll(selector);\n        if (elements.length) {\n          return elements;\n        }\n      }\n    };\n\n    /**\n     * @name $$testability#getLocation\n     *\n     * @description\n     * Shortcut for getting the location in a browser agnostic way. Returns\n     *     the path, search, and hash. (e.g. /path?a=b#hash)\n     */\n    testability.getLocation = function() {\n      return $location.url();\n    };\n\n    /**\n     * @name $$testability#setLocation\n     *\n     * @description\n     * Shortcut for navigating to a location without doing a full page reload.\n     *\n     * @param {string} url The location url (path, search and hash,\n     *     e.g. /path?a=b#hash) to go to.\n     */\n    testability.setLocation = function(url) {\n      if (url !== $location.url()) {\n        $location.url(url);\n        $rootScope.$digest();\n      }\n    };\n\n    /**\n     * @name $$testability#whenStable\n     *\n     * @description\n     * Calls the callback when $timeout and $http requests are completed.\n     *\n     * @param {function} callback\n     */\n    testability.whenStable = function(callback) {\n      $browser.notifyWhenNoOutstandingRequests(callback);\n    };\n\n    return testability;\n  }];\n}\n\nfunction $TimeoutProvider() {\n  this.$get = ['$rootScope', '$browser', '$q', '$$q', '$exceptionHandler',\n       function($rootScope,   $browser,   $q,   $$q,   $exceptionHandler) {\n\n    var deferreds = {};\n\n\n     /**\n      * @ngdoc service\n      * @name $timeout\n      *\n      * @description\n      * Angular's wrapper for `window.setTimeout`. The `fn` function is wrapped into a try/catch\n      * block and delegates any exceptions to\n      * {@link ng.$exceptionHandler $exceptionHandler} service.\n      *\n      * The return value of calling `$timeout` is a promise, which will be resolved when\n      * the delay has passed and the timeout function, if provided, is executed.\n      *\n      * To cancel a timeout request, call `$timeout.cancel(promise)`.\n      *\n      * In tests you can use {@link ngMock.$timeout `$timeout.flush()`} to\n      * synchronously flush the queue of deferred functions.\n      *\n      * If you only want a promise that will be resolved after some specified delay\n      * then you can call `$timeout` without the `fn` function.\n      *\n      * @param {function()=} fn A function, whose execution should be delayed.\n      * @param {number=} [delay=0] Delay in milliseconds.\n      * @param {boolean=} [invokeApply=true] If set to `false` skips model dirty checking, otherwise\n      *   will invoke `fn` within the {@link ng.$rootScope.Scope#$apply $apply} block.\n      * @param {...*=} Pass additional parameters to the executed function.\n      * @returns {Promise} Promise that will be resolved when the timeout is reached. The promise\n      *   will be resolved with the return value of the `fn` function.\n      *\n      */\n    function timeout(fn, delay, invokeApply) {\n      if (!isFunction(fn)) {\n        invokeApply = delay;\n        delay = fn;\n        fn = noop;\n      }\n\n      var args = sliceArgs(arguments, 3),\n          skipApply = (isDefined(invokeApply) && !invokeApply),\n          deferred = (skipApply ? $$q : $q).defer(),\n          promise = deferred.promise,\n          timeoutId;\n\n      timeoutId = $browser.defer(function() {\n        try {\n          deferred.resolve(fn.apply(null, args));\n        } catch (e) {\n          deferred.reject(e);\n          $exceptionHandler(e);\n        }\n        finally {\n          delete deferreds[promise.$$timeoutId];\n        }\n\n        if (!skipApply) $rootScope.$apply();\n      }, delay);\n\n      promise.$$timeoutId = timeoutId;\n      deferreds[timeoutId] = deferred;\n\n      return promise;\n    }\n\n\n     /**\n      * @ngdoc method\n      * @name $timeout#cancel\n      *\n      * @description\n      * Cancels a task associated with the `promise`. As a result of this, the promise will be\n      * resolved with a rejection.\n      *\n      * @param {Promise=} promise Promise returned by the `$timeout` function.\n      * @returns {boolean} Returns `true` if the task hasn't executed yet and was successfully\n      *   canceled.\n      */\n    timeout.cancel = function(promise) {\n      if (promise && promise.$$timeoutId in deferreds) {\n        deferreds[promise.$$timeoutId].reject('canceled');\n        delete deferreds[promise.$$timeoutId];\n        return $browser.defer.cancel(promise.$$timeoutId);\n      }\n      return false;\n    };\n\n    return timeout;\n  }];\n}\n\n// NOTE:  The usage of window and document instead of $window and $document here is\n// deliberate.  This service depends on the specific behavior of anchor nodes created by the\n// browser (resolving and parsing URLs) that is unlikely to be provided by mock objects and\n// cause us to break tests.  In addition, when the browser resolves a URL for XHR, it\n// doesn't know about mocked locations and resolves URLs to the real document - which is\n// exactly the behavior needed here.  There is little value is mocking these out for this\n// service.\nvar urlParsingNode = window.document.createElement(\"a\");\nvar originUrl = urlResolve(window.location.href);\n\n\n/**\n *\n * Implementation Notes for non-IE browsers\n * ----------------------------------------\n * Assigning a URL to the href property of an anchor DOM node, even one attached to the DOM,\n * results both in the normalizing and parsing of the URL.  Normalizing means that a relative\n * URL will be resolved into an absolute URL in the context of the application document.\n * Parsing means that the anchor node's host, hostname, protocol, port, pathname and related\n * properties are all populated to reflect the normalized URL.  This approach has wide\n * compatibility - Safari 1+, Mozilla 1+, Opera 7+,e etc.  See\n * http://www.aptana.com/reference/html/api/HTMLAnchorElement.html\n *\n * Implementation Notes for IE\n * ---------------------------\n * IE <= 10 normalizes the URL when assigned to the anchor node similar to the other\n * browsers.  However, the parsed components will not be set if the URL assigned did not specify\n * them.  (e.g. if you assign a.href = \"foo\", then a.protocol, a.host, etc. will be empty.)  We\n * work around that by performing the parsing in a 2nd step by taking a previously normalized\n * URL (e.g. by assigning to a.href) and assigning it a.href again.  This correctly populates the\n * properties such as protocol, hostname, port, etc.\n *\n * References:\n *   http://developer.mozilla.org/en-US/docs/Web/API/HTMLAnchorElement\n *   http://www.aptana.com/reference/html/api/HTMLAnchorElement.html\n *   http://url.spec.whatwg.org/#urlutils\n *   https://github.com/angular/angular.js/pull/2902\n *   http://james.padolsey.com/javascript/parsing-urls-with-the-dom/\n *\n * @kind function\n * @param {string} url The URL to be parsed.\n * @description Normalizes and parses a URL.\n * @returns {object} Returns the normalized URL as a dictionary.\n *\n *   | member name   | Description    |\n *   |---------------|----------------|\n *   | href          | A normalized version of the provided URL if it was not an absolute URL |\n *   | protocol      | The protocol including the trailing colon                              |\n *   | host          | The host and port (if the port is non-default) of the normalizedUrl    |\n *   | search        | The search params, minus the question mark                             |\n *   | hash          | The hash string, minus the hash symbol\n *   | hostname      | The hostname\n *   | port          | The port, without \":\"\n *   | pathname      | The pathname, beginning with \"/\"\n *\n */\nfunction urlResolve(url) {\n  var href = url;\n\n  if (msie) {\n    // Normalize before parse.  Refer Implementation Notes on why this is\n    // done in two steps on IE.\n    urlParsingNode.setAttribute(\"href\", href);\n    href = urlParsingNode.href;\n  }\n\n  urlParsingNode.setAttribute('href', href);\n\n  // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\n  return {\n    href: urlParsingNode.href,\n    protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\n    host: urlParsingNode.host,\n    search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\n    hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\n    hostname: urlParsingNode.hostname,\n    port: urlParsingNode.port,\n    pathname: (urlParsingNode.pathname.charAt(0) === '/')\n      ? urlParsingNode.pathname\n      : '/' + urlParsingNode.pathname\n  };\n}\n\n/**\n * Parse a request URL and determine whether this is a same-origin request as the application document.\n *\n * @param {string|object} requestUrl The url of the request as a string that will be resolved\n * or a parsed URL object.\n * @returns {boolean} Whether the request is for the same origin as the application document.\n */\nfunction urlIsSameOrigin(requestUrl) {\n  var parsed = (isString(requestUrl)) ? urlResolve(requestUrl) : requestUrl;\n  return (parsed.protocol === originUrl.protocol &&\n          parsed.host === originUrl.host);\n}\n\n/**\n * @ngdoc service\n * @name $window\n *\n * @description\n * A reference to the browser's `window` object. While `window`\n * is globally available in JavaScript, it causes testability problems, because\n * it is a global variable. In angular we always refer to it through the\n * `$window` service, so it may be overridden, removed or mocked for testing.\n *\n * Expressions, like the one defined for the `ngClick` directive in the example\n * below, are evaluated with respect to the current scope.  Therefore, there is\n * no risk of inadvertently coding in a dependency on a global value in such an\n * expression.\n *\n * @example\n   <example module=\"windowExample\">\n     <file name=\"index.html\">\n       <script>\n         angular.module('windowExample', [])\n           .controller('ExampleController', ['$scope', '$window', function($scope, $window) {\n             $scope.greeting = 'Hello, World!';\n             $scope.doGreeting = function(greeting) {\n               $window.alert(greeting);\n             };\n           }]);\n       </script>\n       <div ng-controller=\"ExampleController\">\n         <input type=\"text\" ng-model=\"greeting\" aria-label=\"greeting\" />\n         <button ng-click=\"doGreeting(greeting)\">ALERT</button>\n       </div>\n     </file>\n     <file name=\"protractor.js\" type=\"protractor\">\n      it('should display the greeting in the input box', function() {\n       element(by.model('greeting')).sendKeys('Hello, E2E Tests');\n       // If we click the button it will block the test runner\n       // element(':button').click();\n      });\n     </file>\n   </example>\n */\nfunction $WindowProvider() {\n  this.$get = valueFn(window);\n}\n\n/**\n * @name $$cookieReader\n * @requires $document\n *\n * @description\n * This is a private service for reading cookies used by $http and ngCookies\n *\n * @return {Object} a key/value map of the current cookies\n */\nfunction $$CookieReader($document) {\n  var rawDocument = $document[0] || {};\n  var lastCookies = {};\n  var lastCookieString = '';\n\n  function safeDecodeURIComponent(str) {\n    try {\n      return decodeURIComponent(str);\n    } catch (e) {\n      return str;\n    }\n  }\n\n  return function() {\n    var cookieArray, cookie, i, index, name;\n    var currentCookieString = rawDocument.cookie || '';\n\n    if (currentCookieString !== lastCookieString) {\n      lastCookieString = currentCookieString;\n      cookieArray = lastCookieString.split('; ');\n      lastCookies = {};\n\n      for (i = 0; i < cookieArray.length; i++) {\n        cookie = cookieArray[i];\n        index = cookie.indexOf('=');\n        if (index > 0) { //ignore nameless cookies\n          name = safeDecodeURIComponent(cookie.substring(0, index));\n          // the first value that is seen for a cookie is the most\n          // specific one.  values for the same cookie name that\n          // follow are for less specific paths.\n          if (isUndefined(lastCookies[name])) {\n            lastCookies[name] = safeDecodeURIComponent(cookie.substring(index + 1));\n          }\n        }\n      }\n    }\n    return lastCookies;\n  };\n}\n\n$$CookieReader.$inject = ['$document'];\n\nfunction $$CookieReaderProvider() {\n  this.$get = $$CookieReader;\n}\n\n/* global currencyFilter: true,\n dateFilter: true,\n filterFilter: true,\n jsonFilter: true,\n limitToFilter: true,\n lowercaseFilter: true,\n numberFilter: true,\n orderByFilter: true,\n uppercaseFilter: true,\n */\n\n/**\n * @ngdoc provider\n * @name $filterProvider\n * @description\n *\n * Filters are just functions which transform input to an output. However filters need to be\n * Dependency Injected. To achieve this a filter definition consists of a factory function which is\n * annotated with dependencies and is responsible for creating a filter function.\n *\n * <div class=\"alert alert-warning\">\n * **Note:** Filter names must be valid angular {@link expression} identifiers, such as `uppercase` or `orderBy`.\n * Names with special characters, such as hyphens and dots, are not allowed. If you wish to namespace\n * your filters, then you can use capitalization (`myappSubsectionFilterx`) or underscores\n * (`myapp_subsection_filterx`).\n * </div>\n *\n * ```js\n *   // Filter registration\n *   function MyModule($provide, $filterProvider) {\n *     // create a service to demonstrate injection (not always needed)\n *     $provide.value('greet', function(name){\n *       return 'Hello ' + name + '!';\n *     });\n *\n *     // register a filter factory which uses the\n *     // greet service to demonstrate DI.\n *     $filterProvider.register('greet', function(greet){\n *       // return the filter function which uses the greet service\n *       // to generate salutation\n *       return function(text) {\n *         // filters need to be forgiving so check input validity\n *         return text && greet(text) || text;\n *       };\n *     });\n *   }\n * ```\n *\n * The filter function is registered with the `$injector` under the filter name suffix with\n * `Filter`.\n *\n * ```js\n *   it('should be the same instance', inject(\n *     function($filterProvider) {\n *       $filterProvider.register('reverse', function(){\n *         return ...;\n *       });\n *     },\n *     function($filter, reverseFilter) {\n *       expect($filter('reverse')).toBe(reverseFilter);\n *     });\n * ```\n *\n *\n * For more information about how angular filters work, and how to create your own filters, see\n * {@link guide/filter Filters} in the Angular Developer Guide.\n */\n\n/**\n * @ngdoc service\n * @name $filter\n * @kind function\n * @description\n * Filters are used for formatting data displayed to the user.\n *\n * The general syntax in templates is as follows:\n *\n *         {{ expression [| filter_name[:parameter_value] ... ] }}\n *\n * @param {String} name Name of the filter function to retrieve\n * @return {Function} the filter function\n * @example\n   <example name=\"$filter\" module=\"filterExample\">\n     <file name=\"index.html\">\n       <div ng-controller=\"MainCtrl\">\n        <h3>{{ originalText }}</h3>\n        <h3>{{ filteredText }}</h3>\n       </div>\n     </file>\n\n     <file name=\"script.js\">\n      angular.module('filterExample', [])\n      .controller('MainCtrl', function($scope, $filter) {\n        $scope.originalText = 'hello';\n        $scope.filteredText = $filter('uppercase')($scope.originalText);\n      });\n     </file>\n   </example>\n  */\n$FilterProvider.$inject = ['$provide'];\nfunction $FilterProvider($provide) {\n  var suffix = 'Filter';\n\n  /**\n   * @ngdoc method\n   * @name $filterProvider#register\n   * @param {string|Object} name Name of the filter function, or an object map of filters where\n   *    the keys are the filter names and the values are the filter factories.\n   *\n   *    <div class=\"alert alert-warning\">\n   *    **Note:** Filter names must be valid angular {@link expression} identifiers, such as `uppercase` or `orderBy`.\n   *    Names with special characters, such as hyphens and dots, are not allowed. If you wish to namespace\n   *    your filters, then you can use capitalization (`myappSubsectionFilterx`) or underscores\n   *    (`myapp_subsection_filterx`).\n   *    </div>\n    * @param {Function} factory If the first argument was a string, a factory function for the filter to be registered.\n   * @returns {Object} Registered filter instance, or if a map of filters was provided then a map\n   *    of the registered filter instances.\n   */\n  function register(name, factory) {\n    if (isObject(name)) {\n      var filters = {};\n      forEach(name, function(filter, key) {\n        filters[key] = register(key, filter);\n      });\n      return filters;\n    } else {\n      return $provide.factory(name + suffix, factory);\n    }\n  }\n  this.register = register;\n\n  this.$get = ['$injector', function($injector) {\n    return function(name) {\n      return $injector.get(name + suffix);\n    };\n  }];\n\n  ////////////////////////////////////////\n\n  /* global\n    currencyFilter: false,\n    dateFilter: false,\n    filterFilter: false,\n    jsonFilter: false,\n    limitToFilter: false,\n    lowercaseFilter: false,\n    numberFilter: false,\n    orderByFilter: false,\n    uppercaseFilter: false,\n  */\n\n  register('currency', currencyFilter);\n  register('date', dateFilter);\n  register('filter', filterFilter);\n  register('json', jsonFilter);\n  register('limitTo', limitToFilter);\n  register('lowercase', lowercaseFilter);\n  register('number', numberFilter);\n  register('orderBy', orderByFilter);\n  register('uppercase', uppercaseFilter);\n}\n\n/**\n * @ngdoc filter\n * @name filter\n * @kind function\n *\n * @description\n * Selects a subset of items from `array` and returns it as a new array.\n *\n * @param {Array} array The source array.\n * @param {string|Object|function()} expression The predicate to be used for selecting items from\n *   `array`.\n *\n *   Can be one of:\n *\n *   - `string`: The string is used for matching against the contents of the `array`. All strings or\n *     objects with string properties in `array` that match this string will be returned. This also\n *     applies to nested object properties.\n *     The predicate can be negated by prefixing the string with `!`.\n *\n *   - `Object`: A pattern object can be used to filter specific properties on objects contained\n *     by `array`. For example `{name:\"M\", phone:\"1\"}` predicate will return an array of items\n *     which have property `name` containing \"M\" and property `phone` containing \"1\". A special\n *     property name (`$` by default) can be used (e.g. as in `{$: \"text\"}`) to accept a match\n *     against any property of the object or its nested object properties. That's equivalent to the\n *     simple substring match with a `string` as described above. The special property name can be\n *     overwritten, using the `anyPropertyKey` parameter.\n *     The predicate can be negated by prefixing the string with `!`.\n *     For example `{name: \"!M\"}` predicate will return an array of items which have property `name`\n *     not containing \"M\".\n *\n *     Note that a named property will match properties on the same level only, while the special\n *     `$` property will match properties on the same level or deeper. E.g. an array item like\n *     `{name: {first: 'John', last: 'Doe'}}` will **not** be matched by `{name: 'John'}`, but\n *     **will** be matched by `{$: 'John'}`.\n *\n *   - `function(value, index, array)`: A predicate function can be used to write arbitrary filters.\n *     The function is called for each element of the array, with the element, its index, and\n *     the entire array itself as arguments.\n *\n *     The final result is an array of those elements that the predicate returned true for.\n *\n * @param {function(actual, expected)|true|undefined} comparator Comparator which is used in\n *     determining if the expected value (from the filter expression) and actual value (from\n *     the object in the array) should be considered a match.\n *\n *   Can be one of:\n *\n *   - `function(actual, expected)`:\n *     The function will be given the object value and the predicate value to compare and\n *     should return true if both values should be considered equal.\n *\n *   - `true`: A shorthand for `function(actual, expected) { return angular.equals(actual, expected)}`.\n *     This is essentially strict comparison of expected and actual.\n *\n *   - `false|undefined`: A short hand for a function which will look for a substring match in case\n *     insensitive way.\n *\n *     Primitive values are converted to strings. Objects are not compared against primitives,\n *     unless they have a custom `toString` method (e.g. `Date` objects).\n *\n * @param {string=} anyPropertyKey The special property name that matches against any property.\n *     By default `$`.\n *\n * @example\n   <example>\n     <file name=\"index.html\">\n       <div ng-init=\"friends = [{name:'John', phone:'555-1276'},\n                                {name:'Mary', phone:'800-BIG-MARY'},\n                                {name:'Mike', phone:'555-4321'},\n                                {name:'Adam', phone:'555-5678'},\n                                {name:'Julie', phone:'555-8765'},\n                                {name:'Juliette', phone:'555-5678'}]\"></div>\n\n       <label>Search: <input ng-model=\"searchText\"></label>\n       <table id=\"searchTextResults\">\n         <tr><th>Name</th><th>Phone</th></tr>\n         <tr ng-repeat=\"friend in friends | filter:searchText\">\n           <td>{{friend.name}}</td>\n           <td>{{friend.phone}}</td>\n         </tr>\n       </table>\n       <hr>\n       <label>Any: <input ng-model=\"search.$\"></label> <br>\n       <label>Name only <input ng-model=\"search.name\"></label><br>\n       <label>Phone only <input ng-model=\"search.phone\"></label><br>\n       <label>Equality <input type=\"checkbox\" ng-model=\"strict\"></label><br>\n       <table id=\"searchObjResults\">\n         <tr><th>Name</th><th>Phone</th></tr>\n         <tr ng-repeat=\"friendObj in friends | filter:search:strict\">\n           <td>{{friendObj.name}}</td>\n           <td>{{friendObj.phone}}</td>\n         </tr>\n       </table>\n     </file>\n     <file name=\"protractor.js\" type=\"protractor\">\n       var expectFriendNames = function(expectedNames, key) {\n         element.all(by.repeater(key + ' in friends').column(key + '.name')).then(function(arr) {\n           arr.forEach(function(wd, i) {\n             expect(wd.getText()).toMatch(expectedNames[i]);\n           });\n         });\n       };\n\n       it('should search across all fields when filtering with a string', function() {\n         var searchText = element(by.model('searchText'));\n         searchText.clear();\n         searchText.sendKeys('m');\n         expectFriendNames(['Mary', 'Mike', 'Adam'], 'friend');\n\n         searchText.clear();\n         searchText.sendKeys('76');\n         expectFriendNames(['John', 'Julie'], 'friend');\n       });\n\n       it('should search in specific fields when filtering with a predicate object', function() {\n         var searchAny = element(by.model('search.$'));\n         searchAny.clear();\n         searchAny.sendKeys('i');\n         expectFriendNames(['Mary', 'Mike', 'Julie', 'Juliette'], 'friendObj');\n       });\n       it('should use a equal comparison when comparator is true', function() {\n         var searchName = element(by.model('search.name'));\n         var strict = element(by.model('strict'));\n         searchName.clear();\n         searchName.sendKeys('Julie');\n         strict.click();\n         expectFriendNames(['Julie'], 'friendObj');\n       });\n     </file>\n   </example>\n */\n\nfunction filterFilter() {\n  return function(array, expression, comparator, anyPropertyKey) {\n    if (!isArrayLike(array)) {\n      if (array == null) {\n        return array;\n      } else {\n        throw minErr('filter')('notarray', 'Expected array but received: {0}', array);\n      }\n    }\n\n    anyPropertyKey = anyPropertyKey || '$';\n    var expressionType = getTypeForFilter(expression);\n    var predicateFn;\n    var matchAgainstAnyProp;\n\n    switch (expressionType) {\n      case 'function':\n        predicateFn = expression;\n        break;\n      case 'boolean':\n      case 'null':\n      case 'number':\n      case 'string':\n        matchAgainstAnyProp = true;\n        //jshint -W086\n      case 'object':\n        //jshint +W086\n        predicateFn = createPredicateFn(expression, comparator, anyPropertyKey, matchAgainstAnyProp);\n        break;\n      default:\n        return array;\n    }\n\n    return Array.prototype.filter.call(array, predicateFn);\n  };\n}\n\n// Helper functions for `filterFilter`\nfunction createPredicateFn(expression, comparator, anyPropertyKey, matchAgainstAnyProp) {\n  var shouldMatchPrimitives = isObject(expression) && (anyPropertyKey in expression);\n  var predicateFn;\n\n  if (comparator === true) {\n    comparator = equals;\n  } else if (!isFunction(comparator)) {\n    comparator = function(actual, expected) {\n      if (isUndefined(actual)) {\n        // No substring matching against `undefined`\n        return false;\n      }\n      if ((actual === null) || (expected === null)) {\n        // No substring matching against `null`; only match against `null`\n        return actual === expected;\n      }\n      if (isObject(expected) || (isObject(actual) && !hasCustomToString(actual))) {\n        // Should not compare primitives against objects, unless they have custom `toString` method\n        return false;\n      }\n\n      actual = lowercase('' + actual);\n      expected = lowercase('' + expected);\n      return actual.indexOf(expected) !== -1;\n    };\n  }\n\n  predicateFn = function(item) {\n    if (shouldMatchPrimitives && !isObject(item)) {\n      return deepCompare(item, expression[anyPropertyKey], comparator, anyPropertyKey, false);\n    }\n    return deepCompare(item, expression, comparator, anyPropertyKey, matchAgainstAnyProp);\n  };\n\n  return predicateFn;\n}\n\nfunction deepCompare(actual, expected, comparator, anyPropertyKey, matchAgainstAnyProp, dontMatchWholeObject) {\n  var actualType = getTypeForFilter(actual);\n  var expectedType = getTypeForFilter(expected);\n\n  if ((expectedType === 'string') && (expected.charAt(0) === '!')) {\n    return !deepCompare(actual, expected.substring(1), comparator, anyPropertyKey, matchAgainstAnyProp);\n  } else if (isArray(actual)) {\n    // In case `actual` is an array, consider it a match\n    // if ANY of it's items matches `expected`\n    return actual.some(function(item) {\n      return deepCompare(item, expected, comparator, anyPropertyKey, matchAgainstAnyProp);\n    });\n  }\n\n  switch (actualType) {\n    case 'object':\n      var key;\n      if (matchAgainstAnyProp) {\n        for (key in actual) {\n          if ((key.charAt(0) !== '$') && deepCompare(actual[key], expected, comparator, anyPropertyKey, true)) {\n            return true;\n          }\n        }\n        return dontMatchWholeObject ? false : deepCompare(actual, expected, comparator, anyPropertyKey, false);\n      } else if (expectedType === 'object') {\n        for (key in expected) {\n          var expectedVal = expected[key];\n          if (isFunction(expectedVal) || isUndefined(expectedVal)) {\n            continue;\n          }\n\n          var matchAnyProperty = key === anyPropertyKey;\n          var actualVal = matchAnyProperty ? actual : actual[key];\n          if (!deepCompare(actualVal, expectedVal, comparator, anyPropertyKey, matchAnyProperty, matchAnyProperty)) {\n            return false;\n          }\n        }\n        return true;\n      } else {\n        return comparator(actual, expected);\n      }\n      break;\n    case 'function':\n      return false;\n    default:\n      return comparator(actual, expected);\n  }\n}\n\n// Used for easily differentiating between `null` and actual `object`\nfunction getTypeForFilter(val) {\n  return (val === null) ? 'null' : typeof val;\n}\n\nvar MAX_DIGITS = 22;\nvar DECIMAL_SEP = '.';\nvar ZERO_CHAR = '0';\n\n/**\n * @ngdoc filter\n * @name currency\n * @kind function\n *\n * @description\n * Formats a number as a currency (ie $1,234.56). When no currency symbol is provided, default\n * symbol for current locale is used.\n *\n * @param {number} amount Input to filter.\n * @param {string=} symbol Currency symbol or identifier to be displayed.\n * @param {number=} fractionSize Number of decimal places to round the amount to, defaults to default max fraction size for current locale\n * @returns {string} Formatted number.\n *\n *\n * @example\n   <example module=\"currencyExample\">\n     <file name=\"index.html\">\n       <script>\n         angular.module('currencyExample', [])\n           .controller('ExampleController', ['$scope', function($scope) {\n             $scope.amount = 1234.56;\n           }]);\n       </script>\n       <div ng-controller=\"ExampleController\">\n         <input type=\"number\" ng-model=\"amount\" aria-label=\"amount\"> <br>\n         default currency symbol ($): <span id=\"currency-default\">{{amount | currency}}</span><br>\n         custom currency identifier (USD$): <span id=\"currency-custom\">{{amount | currency:\"USD$\"}}</span>\n         no fractions (0): <span id=\"currency-no-fractions\">{{amount | currency:\"USD$\":0}}</span>\n       </div>\n     </file>\n     <file name=\"protractor.js\" type=\"protractor\">\n       it('should init with 1234.56', function() {\n         expect(element(by.id('currency-default')).getText()).toBe('$1,234.56');\n         expect(element(by.id('currency-custom')).getText()).toBe('USD$1,234.56');\n         expect(element(by.id('currency-no-fractions')).getText()).toBe('USD$1,235');\n       });\n       it('should update', function() {\n         if (browser.params.browser == 'safari') {\n           // Safari does not understand the minus key. See\n           // https://github.com/angular/protractor/issues/481\n           return;\n         }\n         element(by.model('amount')).clear();\n         element(by.model('amount')).sendKeys('-1234');\n         expect(element(by.id('currency-default')).getText()).toBe('-$1,234.00');\n         expect(element(by.id('currency-custom')).getText()).toBe('-USD$1,234.00');\n         expect(element(by.id('currency-no-fractions')).getText()).toBe('-USD$1,234');\n       });\n     </file>\n   </example>\n */\ncurrencyFilter.$inject = ['$locale'];\nfunction currencyFilter($locale) {\n  var formats = $locale.NUMBER_FORMATS;\n  return function(amount, currencySymbol, fractionSize) {\n    if (isUndefined(currencySymbol)) {\n      currencySymbol = formats.CURRENCY_SYM;\n    }\n\n    if (isUndefined(fractionSize)) {\n      fractionSize = formats.PATTERNS[1].maxFrac;\n    }\n\n    // if null or undefined pass it through\n    return (amount == null)\n        ? amount\n        : formatNumber(amount, formats.PATTERNS[1], formats.GROUP_SEP, formats.DECIMAL_SEP, fractionSize).\n            replace(/\\u00A4/g, currencySymbol);\n  };\n}\n\n/**\n * @ngdoc filter\n * @name number\n * @kind function\n *\n * @description\n * Formats a number as text.\n *\n * If the input is null or undefined, it will just be returned.\n * If the input is infinite (Infinity or -Infinity), the Infinity symbol '∞' or '-∞' is returned, respectively.\n * If the input is not a number an empty string is returned.\n *\n *\n * @param {number|string} number Number to format.\n * @param {(number|string)=} fractionSize Number of decimal places to round the number to.\n * If this is not provided then the fraction size is computed from the current locale's number\n * formatting pattern. In the case of the default locale, it will be 3.\n * @returns {string} Number rounded to `fractionSize` appropriately formatted based on the current\n *                   locale (e.g., in the en_US locale it will have \".\" as the decimal separator and\n *                   include \",\" group separators after each third digit).\n *\n * @example\n   <example module=\"numberFilterExample\">\n     <file name=\"index.html\">\n       <script>\n         angular.module('numberFilterExample', [])\n           .controller('ExampleController', ['$scope', function($scope) {\n             $scope.val = 1234.56789;\n           }]);\n       </script>\n       <div ng-controller=\"ExampleController\">\n         <label>Enter number: <input ng-model='val'></label><br>\n         Default formatting: <span id='number-default'>{{val | number}}</span><br>\n         No fractions: <span>{{val | number:0}}</span><br>\n         Negative number: <span>{{-val | number:4}}</span>\n       </div>\n     </file>\n     <file name=\"protractor.js\" type=\"protractor\">\n       it('should format numbers', function() {\n         expect(element(by.id('number-default')).getText()).toBe('1,234.568');\n         expect(element(by.binding('val | number:0')).getText()).toBe('1,235');\n         expect(element(by.binding('-val | number:4')).getText()).toBe('-1,234.5679');\n       });\n\n       it('should update', function() {\n         element(by.model('val')).clear();\n         element(by.model('val')).sendKeys('3374.333');\n         expect(element(by.id('number-default')).getText()).toBe('3,374.333');\n         expect(element(by.binding('val | number:0')).getText()).toBe('3,374');\n         expect(element(by.binding('-val | number:4')).getText()).toBe('-3,374.3330');\n      });\n     </file>\n   </example>\n */\nnumberFilter.$inject = ['$locale'];\nfunction numberFilter($locale) {\n  var formats = $locale.NUMBER_FORMATS;\n  return function(number, fractionSize) {\n\n    // if null or undefined pass it through\n    return (number == null)\n        ? number\n        : formatNumber(number, formats.PATTERNS[0], formats.GROUP_SEP, formats.DECIMAL_SEP,\n                       fractionSize);\n  };\n}\n\n/**\n * Parse a number (as a string) into three components that can be used\n * for formatting the number.\n *\n * (Significant bits of this parse algorithm came from https://github.com/MikeMcl/big.js/)\n *\n * @param  {string} numStr The number to parse\n * @return {object} An object describing this number, containing the following keys:\n *  - d : an array of digits containing leading zeros as necessary\n *  - i : the number of the digits in `d` that are to the left of the decimal point\n *  - e : the exponent for numbers that would need more than `MAX_DIGITS` digits in `d`\n *\n */\nfunction parse(numStr) {\n  var exponent = 0, digits, numberOfIntegerDigits;\n  var i, j, zeros;\n\n  // Decimal point?\n  if ((numberOfIntegerDigits = numStr.indexOf(DECIMAL_SEP)) > -1) {\n    numStr = numStr.replace(DECIMAL_SEP, '');\n  }\n\n  // Exponential form?\n  if ((i = numStr.search(/e/i)) > 0) {\n    // Work out the exponent.\n    if (numberOfIntegerDigits < 0) numberOfIntegerDigits = i;\n    numberOfIntegerDigits += +numStr.slice(i + 1);\n    numStr = numStr.substring(0, i);\n  } else if (numberOfIntegerDigits < 0) {\n    // There was no decimal point or exponent so it is an integer.\n    numberOfIntegerDigits = numStr.length;\n  }\n\n  // Count the number of leading zeros.\n  for (i = 0; numStr.charAt(i) == ZERO_CHAR; i++) {/* jshint noempty: false */}\n\n  if (i == (zeros = numStr.length)) {\n    // The digits are all zero.\n    digits = [0];\n    numberOfIntegerDigits = 1;\n  } else {\n    // Count the number of trailing zeros\n    zeros--;\n    while (numStr.charAt(zeros) == ZERO_CHAR) zeros--;\n\n    // Trailing zeros are insignificant so ignore them\n    numberOfIntegerDigits -= i;\n    digits = [];\n    // Convert string to array of digits without leading/trailing zeros.\n    for (j = 0; i <= zeros; i++, j++) {\n      digits[j] = +numStr.charAt(i);\n    }\n  }\n\n  // If the number overflows the maximum allowed digits then use an exponent.\n  if (numberOfIntegerDigits > MAX_DIGITS) {\n    digits = digits.splice(0, MAX_DIGITS - 1);\n    exponent = numberOfIntegerDigits - 1;\n    numberOfIntegerDigits = 1;\n  }\n\n  return { d: digits, e: exponent, i: numberOfIntegerDigits };\n}\n\n/**\n * Round the parsed number to the specified number of decimal places\n * This function changed the parsedNumber in-place\n */\nfunction roundNumber(parsedNumber, fractionSize, minFrac, maxFrac) {\n    var digits = parsedNumber.d;\n    var fractionLen = digits.length - parsedNumber.i;\n\n    // determine fractionSize if it is not specified; `+fractionSize` converts it to a number\n    fractionSize = (isUndefined(fractionSize)) ? Math.min(Math.max(minFrac, fractionLen), maxFrac) : +fractionSize;\n\n    // The index of the digit to where rounding is to occur\n    var roundAt = fractionSize + parsedNumber.i;\n    var digit = digits[roundAt];\n\n    if (roundAt > 0) {\n      // Drop fractional digits beyond `roundAt`\n      digits.splice(Math.max(parsedNumber.i, roundAt));\n\n      // Set non-fractional digits beyond `roundAt` to 0\n      for (var j = roundAt; j < digits.length; j++) {\n        digits[j] = 0;\n      }\n    } else {\n      // We rounded to zero so reset the parsedNumber\n      fractionLen = Math.max(0, fractionLen);\n      parsedNumber.i = 1;\n      digits.length = Math.max(1, roundAt = fractionSize + 1);\n      digits[0] = 0;\n      for (var i = 1; i < roundAt; i++) digits[i] = 0;\n    }\n\n    if (digit >= 5) {\n      if (roundAt - 1 < 0) {\n        for (var k = 0; k > roundAt; k--) {\n          digits.unshift(0);\n          parsedNumber.i++;\n        }\n        digits.unshift(1);\n        parsedNumber.i++;\n      } else {\n        digits[roundAt - 1]++;\n      }\n    }\n\n    // Pad out with zeros to get the required fraction length\n    for (; fractionLen < Math.max(0, fractionSize); fractionLen++) digits.push(0);\n\n\n    // Do any carrying, e.g. a digit was rounded up to 10\n    var carry = digits.reduceRight(function(carry, d, i, digits) {\n      d = d + carry;\n      digits[i] = d % 10;\n      return Math.floor(d / 10);\n    }, 0);\n    if (carry) {\n      digits.unshift(carry);\n      parsedNumber.i++;\n    }\n}\n\n/**\n * Format a number into a string\n * @param  {number} number       The number to format\n * @param  {{\n *           minFrac, // the minimum number of digits required in the fraction part of the number\n *           maxFrac, // the maximum number of digits required in the fraction part of the number\n *           gSize,   // number of digits in each group of separated digits\n *           lgSize,  // number of digits in the last group of digits before the decimal separator\n *           negPre,  // the string to go in front of a negative number (e.g. `-` or `(`))\n *           posPre,  // the string to go in front of a positive number\n *           negSuf,  // the string to go after a negative number (e.g. `)`)\n *           posSuf   // the string to go after a positive number\n *         }} pattern\n * @param  {string} groupSep     The string to separate groups of number (e.g. `,`)\n * @param  {string} decimalSep   The string to act as the decimal separator (e.g. `.`)\n * @param  {[type]} fractionSize The size of the fractional part of the number\n * @return {string}              The number formatted as a string\n */\nfunction formatNumber(number, pattern, groupSep, decimalSep, fractionSize) {\n\n  if (!(isString(number) || isNumber(number)) || isNaN(number)) return '';\n\n  var isInfinity = !isFinite(number);\n  var isZero = false;\n  var numStr = Math.abs(number) + '',\n      formattedText = '',\n      parsedNumber;\n\n  if (isInfinity) {\n    formattedText = '\\u221e';\n  } else {\n    parsedNumber = parse(numStr);\n\n    roundNumber(parsedNumber, fractionSize, pattern.minFrac, pattern.maxFrac);\n\n    var digits = parsedNumber.d;\n    var integerLen = parsedNumber.i;\n    var exponent = parsedNumber.e;\n    var decimals = [];\n    isZero = digits.reduce(function(isZero, d) { return isZero && !d; }, true);\n\n    // pad zeros for small numbers\n    while (integerLen < 0) {\n      digits.unshift(0);\n      integerLen++;\n    }\n\n    // extract decimals digits\n    if (integerLen > 0) {\n      decimals = digits.splice(integerLen, digits.length);\n    } else {\n      decimals = digits;\n      digits = [0];\n    }\n\n    // format the integer digits with grouping separators\n    var groups = [];\n    if (digits.length >= pattern.lgSize) {\n      groups.unshift(digits.splice(-pattern.lgSize, digits.length).join(''));\n    }\n    while (digits.length > pattern.gSize) {\n      groups.unshift(digits.splice(-pattern.gSize, digits.length).join(''));\n    }\n    if (digits.length) {\n      groups.unshift(digits.join(''));\n    }\n    formattedText = groups.join(groupSep);\n\n    // append the decimal digits\n    if (decimals.length) {\n      formattedText += decimalSep + decimals.join('');\n    }\n\n    if (exponent) {\n      formattedText += 'e+' + exponent;\n    }\n  }\n  if (number < 0 && !isZero) {\n    return pattern.negPre + formattedText + pattern.negSuf;\n  } else {\n    return pattern.posPre + formattedText + pattern.posSuf;\n  }\n}\n\nfunction padNumber(num, digits, trim, negWrap) {\n  var neg = '';\n  if (num < 0 || (negWrap && num <= 0)) {\n    if (negWrap) {\n      num = -num + 1;\n    } else {\n      num = -num;\n      neg = '-';\n    }\n  }\n  num = '' + num;\n  while (num.length < digits) num = ZERO_CHAR + num;\n  if (trim) {\n    num = num.substr(num.length - digits);\n  }\n  return neg + num;\n}\n\n\nfunction dateGetter(name, size, offset, trim, negWrap) {\n  offset = offset || 0;\n  return function(date) {\n    var value = date['get' + name]();\n    if (offset > 0 || value > -offset) {\n      value += offset;\n    }\n    if (value === 0 && offset == -12) value = 12;\n    return padNumber(value, size, trim, negWrap);\n  };\n}\n\nfunction dateStrGetter(name, shortForm, standAlone) {\n  return function(date, formats) {\n    var value = date['get' + name]();\n    var propPrefix = (standAlone ? 'STANDALONE' : '') + (shortForm ? 'SHORT' : '');\n    var get = uppercase(propPrefix + name);\n\n    return formats[get][value];\n  };\n}\n\nfunction timeZoneGetter(date, formats, offset) {\n  var zone = -1 * offset;\n  var paddedZone = (zone >= 0) ? \"+\" : \"\";\n\n  paddedZone += padNumber(Math[zone > 0 ? 'floor' : 'ceil'](zone / 60), 2) +\n                padNumber(Math.abs(zone % 60), 2);\n\n  return paddedZone;\n}\n\nfunction getFirstThursdayOfYear(year) {\n    // 0 = index of January\n    var dayOfWeekOnFirst = (new Date(year, 0, 1)).getDay();\n    // 4 = index of Thursday (+1 to account for 1st = 5)\n    // 11 = index of *next* Thursday (+1 account for 1st = 12)\n    return new Date(year, 0, ((dayOfWeekOnFirst <= 4) ? 5 : 12) - dayOfWeekOnFirst);\n}\n\nfunction getThursdayThisWeek(datetime) {\n    return new Date(datetime.getFullYear(), datetime.getMonth(),\n      // 4 = index of Thursday\n      datetime.getDate() + (4 - datetime.getDay()));\n}\n\nfunction weekGetter(size) {\n   return function(date) {\n      var firstThurs = getFirstThursdayOfYear(date.getFullYear()),\n         thisThurs = getThursdayThisWeek(date);\n\n      var diff = +thisThurs - +firstThurs,\n         result = 1 + Math.round(diff / 6.048e8); // 6.048e8 ms per week\n\n      return padNumber(result, size);\n   };\n}\n\nfunction ampmGetter(date, formats) {\n  return date.getHours() < 12 ? formats.AMPMS[0] : formats.AMPMS[1];\n}\n\nfunction eraGetter(date, formats) {\n  return date.getFullYear() <= 0 ? formats.ERAS[0] : formats.ERAS[1];\n}\n\nfunction longEraGetter(date, formats) {\n  return date.getFullYear() <= 0 ? formats.ERANAMES[0] : formats.ERANAMES[1];\n}\n\nvar DATE_FORMATS = {\n  yyyy: dateGetter('FullYear', 4, 0, false, true),\n    yy: dateGetter('FullYear', 2, 0, true, true),\n     y: dateGetter('FullYear', 1, 0, false, true),\n  MMMM: dateStrGetter('Month'),\n   MMM: dateStrGetter('Month', true),\n    MM: dateGetter('Month', 2, 1),\n     M: dateGetter('Month', 1, 1),\n  LLLL: dateStrGetter('Month', false, true),\n    dd: dateGetter('Date', 2),\n     d: dateGetter('Date', 1),\n    HH: dateGetter('Hours', 2),\n     H: dateGetter('Hours', 1),\n    hh: dateGetter('Hours', 2, -12),\n     h: dateGetter('Hours', 1, -12),\n    mm: dateGetter('Minutes', 2),\n     m: dateGetter('Minutes', 1),\n    ss: dateGetter('Seconds', 2),\n     s: dateGetter('Seconds', 1),\n     // while ISO 8601 requires fractions to be prefixed with `.` or `,`\n     // we can be just safely rely on using `sss` since we currently don't support single or two digit fractions\n   sss: dateGetter('Milliseconds', 3),\n  EEEE: dateStrGetter('Day'),\n   EEE: dateStrGetter('Day', true),\n     a: ampmGetter,\n     Z: timeZoneGetter,\n    ww: weekGetter(2),\n     w: weekGetter(1),\n     G: eraGetter,\n     GG: eraGetter,\n     GGG: eraGetter,\n     GGGG: longEraGetter\n};\n\nvar DATE_FORMATS_SPLIT = /((?:[^yMLdHhmsaZEwG']+)|(?:'(?:[^']|'')*')|(?:E+|y+|M+|L+|d+|H+|h+|m+|s+|a|Z|G+|w+))(.*)/,\n    NUMBER_STRING = /^\\-?\\d+$/;\n\n/**\n * @ngdoc filter\n * @name date\n * @kind function\n *\n * @description\n *   Formats `date` to a string based on the requested `format`.\n *\n *   `format` string can be composed of the following elements:\n *\n *   * `'yyyy'`: 4 digit representation of year (e.g. AD 1 => 0001, AD 2010 => 2010)\n *   * `'yy'`: 2 digit representation of year, padded (00-99). (e.g. AD 2001 => 01, AD 2010 => 10)\n *   * `'y'`: 1 digit representation of year, e.g. (AD 1 => 1, AD 199 => 199)\n *   * `'MMMM'`: Month in year (January-December)\n *   * `'MMM'`: Month in year (Jan-Dec)\n *   * `'MM'`: Month in year, padded (01-12)\n *   * `'M'`: Month in year (1-12)\n *   * `'LLLL'`: Stand-alone month in year (January-December)\n *   * `'dd'`: Day in month, padded (01-31)\n *   * `'d'`: Day in month (1-31)\n *   * `'EEEE'`: Day in Week,(Sunday-Saturday)\n *   * `'EEE'`: Day in Week, (Sun-Sat)\n *   * `'HH'`: Hour in day, padded (00-23)\n *   * `'H'`: Hour in day (0-23)\n *   * `'hh'`: Hour in AM/PM, padded (01-12)\n *   * `'h'`: Hour in AM/PM, (1-12)\n *   * `'mm'`: Minute in hour, padded (00-59)\n *   * `'m'`: Minute in hour (0-59)\n *   * `'ss'`: Second in minute, padded (00-59)\n *   * `'s'`: Second in minute (0-59)\n *   * `'sss'`: Millisecond in second, padded (000-999)\n *   * `'a'`: AM/PM marker\n *   * `'Z'`: 4 digit (+sign) representation of the timezone offset (-1200-+1200)\n *   * `'ww'`: Week of year, padded (00-53). Week 01 is the week with the first Thursday of the year\n *   * `'w'`: Week of year (0-53). Week 1 is the week with the first Thursday of the year\n *   * `'G'`, `'GG'`, `'GGG'`: The abbreviated form of the era string (e.g. 'AD')\n *   * `'GGGG'`: The long form of the era string (e.g. 'Anno Domini')\n *\n *   `format` string can also be one of the following predefined\n *   {@link guide/i18n localizable formats}:\n *\n *   * `'medium'`: equivalent to `'MMM d, y h:mm:ss a'` for en_US locale\n *     (e.g. Sep 3, 2010 12:05:08 PM)\n *   * `'short'`: equivalent to `'M/d/yy h:mm a'` for en_US  locale (e.g. 9/3/10 12:05 PM)\n *   * `'fullDate'`: equivalent to `'EEEE, MMMM d, y'` for en_US  locale\n *     (e.g. Friday, September 3, 2010)\n *   * `'longDate'`: equivalent to `'MMMM d, y'` for en_US  locale (e.g. September 3, 2010)\n *   * `'mediumDate'`: equivalent to `'MMM d, y'` for en_US  locale (e.g. Sep 3, 2010)\n *   * `'shortDate'`: equivalent to `'M/d/yy'` for en_US locale (e.g. 9/3/10)\n *   * `'mediumTime'`: equivalent to `'h:mm:ss a'` for en_US locale (e.g. 12:05:08 PM)\n *   * `'shortTime'`: equivalent to `'h:mm a'` for en_US locale (e.g. 12:05 PM)\n *\n *   `format` string can contain literal values. These need to be escaped by surrounding with single quotes (e.g.\n *   `\"h 'in the morning'\"`). In order to output a single quote, escape it - i.e., two single quotes in a sequence\n *   (e.g. `\"h 'o''clock'\"`).\n *\n * @param {(Date|number|string)} date Date to format either as Date object, milliseconds (string or\n *    number) or various ISO 8601 datetime string formats (e.g. yyyy-MM-ddTHH:mm:ss.sssZ and its\n *    shorter versions like yyyy-MM-ddTHH:mmZ, yyyy-MM-dd or yyyyMMddTHHmmssZ). If no timezone is\n *    specified in the string input, the time is considered to be in the local timezone.\n * @param {string=} format Formatting rules (see Description). If not specified,\n *    `mediumDate` is used.\n * @param {string=} timezone Timezone to be used for formatting. It understands UTC/GMT and the\n *    continental US time zone abbreviations, but for general use, use a time zone offset, for\n *    example, `'+0430'` (4 hours, 30 minutes east of the Greenwich meridian)\n *    If not specified, the timezone of the browser will be used.\n * @returns {string} Formatted string or the input if input is not recognized as date/millis.\n *\n * @example\n   <example>\n     <file name=\"index.html\">\n       <span ng-non-bindable>{{1288323623006 | date:'medium'}}</span>:\n           <span>{{1288323623006 | date:'medium'}}</span><br>\n       <span ng-non-bindable>{{1288323623006 | date:'yyyy-MM-dd HH:mm:ss Z'}}</span>:\n          <span>{{1288323623006 | date:'yyyy-MM-dd HH:mm:ss Z'}}</span><br>\n       <span ng-non-bindable>{{1288323623006 | date:'MM/dd/yyyy @ h:mma'}}</span>:\n          <span>{{'1288323623006' | date:'MM/dd/yyyy @ h:mma'}}</span><br>\n       <span ng-non-bindable>{{1288323623006 | date:\"MM/dd/yyyy 'at' h:mma\"}}</span>:\n          <span>{{'1288323623006' | date:\"MM/dd/yyyy 'at' h:mma\"}}</span><br>\n     </file>\n     <file name=\"protractor.js\" type=\"protractor\">\n       it('should format date', function() {\n         expect(element(by.binding(\"1288323623006 | date:'medium'\")).getText()).\n            toMatch(/Oct 2\\d, 2010 \\d{1,2}:\\d{2}:\\d{2} (AM|PM)/);\n         expect(element(by.binding(\"1288323623006 | date:'yyyy-MM-dd HH:mm:ss Z'\")).getText()).\n            toMatch(/2010\\-10\\-2\\d \\d{2}:\\d{2}:\\d{2} (\\-|\\+)?\\d{4}/);\n         expect(element(by.binding(\"'1288323623006' | date:'MM/dd/yyyy @ h:mma'\")).getText()).\n            toMatch(/10\\/2\\d\\/2010 @ \\d{1,2}:\\d{2}(AM|PM)/);\n         expect(element(by.binding(\"'1288323623006' | date:\\\"MM/dd/yyyy 'at' h:mma\\\"\")).getText()).\n            toMatch(/10\\/2\\d\\/2010 at \\d{1,2}:\\d{2}(AM|PM)/);\n       });\n     </file>\n   </example>\n */\ndateFilter.$inject = ['$locale'];\nfunction dateFilter($locale) {\n\n\n  var R_ISO8601_STR = /^(\\d{4})-?(\\d\\d)-?(\\d\\d)(?:T(\\d\\d)(?::?(\\d\\d)(?::?(\\d\\d)(?:\\.(\\d+))?)?)?(Z|([+-])(\\d\\d):?(\\d\\d))?)?$/;\n                     // 1        2       3         4          5          6          7          8  9     10      11\n  function jsonStringToDate(string) {\n    var match;\n    if (match = string.match(R_ISO8601_STR)) {\n      var date = new Date(0),\n          tzHour = 0,\n          tzMin  = 0,\n          dateSetter = match[8] ? date.setUTCFullYear : date.setFullYear,\n          timeSetter = match[8] ? date.setUTCHours : date.setHours;\n\n      if (match[9]) {\n        tzHour = toInt(match[9] + match[10]);\n        tzMin = toInt(match[9] + match[11]);\n      }\n      dateSetter.call(date, toInt(match[1]), toInt(match[2]) - 1, toInt(match[3]));\n      var h = toInt(match[4] || 0) - tzHour;\n      var m = toInt(match[5] || 0) - tzMin;\n      var s = toInt(match[6] || 0);\n      var ms = Math.round(parseFloat('0.' + (match[7] || 0)) * 1000);\n      timeSetter.call(date, h, m, s, ms);\n      return date;\n    }\n    return string;\n  }\n\n\n  return function(date, format, timezone) {\n    var text = '',\n        parts = [],\n        fn, match;\n\n    format = format || 'mediumDate';\n    format = $locale.DATETIME_FORMATS[format] || format;\n    if (isString(date)) {\n      date = NUMBER_STRING.test(date) ? toInt(date) : jsonStringToDate(date);\n    }\n\n    if (isNumber(date)) {\n      date = new Date(date);\n    }\n\n    if (!isDate(date) || !isFinite(date.getTime())) {\n      return date;\n    }\n\n    while (format) {\n      match = DATE_FORMATS_SPLIT.exec(format);\n      if (match) {\n        parts = concat(parts, match, 1);\n        format = parts.pop();\n      } else {\n        parts.push(format);\n        format = null;\n      }\n    }\n\n    var dateTimezoneOffset = date.getTimezoneOffset();\n    if (timezone) {\n      dateTimezoneOffset = timezoneToOffset(timezone, dateTimezoneOffset);\n      date = convertTimezoneToLocal(date, timezone, true);\n    }\n    forEach(parts, function(value) {\n      fn = DATE_FORMATS[value];\n      text += fn ? fn(date, $locale.DATETIME_FORMATS, dateTimezoneOffset)\n                 : value === \"''\" ? \"'\" : value.replace(/(^'|'$)/g, '').replace(/''/g, \"'\");\n    });\n\n    return text;\n  };\n}\n\n\n/**\n * @ngdoc filter\n * @name json\n * @kind function\n *\n * @description\n *   Allows you to convert a JavaScript object into JSON string.\n *\n *   This filter is mostly useful for debugging. When using the double curly {{value}} notation\n *   the binding is automatically converted to JSON.\n *\n * @param {*} object Any JavaScript object (including arrays and primitive types) to filter.\n * @param {number=} spacing The number of spaces to use per indentation, defaults to 2.\n * @returns {string} JSON string.\n *\n *\n * @example\n   <example>\n     <file name=\"index.html\">\n       <pre id=\"default-spacing\">{{ {'name':'value'} | json }}</pre>\n       <pre id=\"custom-spacing\">{{ {'name':'value'} | json:4 }}</pre>\n     </file>\n     <file name=\"protractor.js\" type=\"protractor\">\n       it('should jsonify filtered objects', function() {\n         expect(element(by.id('default-spacing')).getText()).toMatch(/\\{\\n  \"name\": ?\"value\"\\n}/);\n         expect(element(by.id('custom-spacing')).getText()).toMatch(/\\{\\n    \"name\": ?\"value\"\\n}/);\n       });\n     </file>\n   </example>\n *\n */\nfunction jsonFilter() {\n  return function(object, spacing) {\n    if (isUndefined(spacing)) {\n        spacing = 2;\n    }\n    return toJson(object, spacing);\n  };\n}\n\n\n/**\n * @ngdoc filter\n * @name lowercase\n * @kind function\n * @description\n * Converts string to lowercase.\n * @see angular.lowercase\n */\nvar lowercaseFilter = valueFn(lowercase);\n\n\n/**\n * @ngdoc filter\n * @name uppercase\n * @kind function\n * @description\n * Converts string to uppercase.\n * @see angular.uppercase\n */\nvar uppercaseFilter = valueFn(uppercase);\n\n/**\n * @ngdoc filter\n * @name limitTo\n * @kind function\n *\n * @description\n * Creates a new array or string containing only a specified number of elements. The elements are\n * taken from either the beginning or the end of the source array, string or number, as specified by\n * the value and sign (positive or negative) of `limit`. Other array-like objects are also supported\n * (e.g. array subclasses, NodeLists, jqLite/jQuery collections etc). If a number is used as input,\n * it is converted to a string.\n *\n * @param {Array|ArrayLike|string|number} input - Array/array-like, string or number to be limited.\n * @param {string|number} limit - The length of the returned array or string. If the `limit` number\n *     is positive, `limit` number of items from the beginning of the source array/string are copied.\n *     If the number is negative, `limit` number  of items from the end of the source array/string\n *     are copied. The `limit` will be trimmed if it exceeds `array.length`. If `limit` is undefined,\n *     the input will be returned unchanged.\n * @param {(string|number)=} begin - Index at which to begin limitation. As a negative index,\n *     `begin` indicates an offset from the end of `input`. Defaults to `0`.\n * @returns {Array|string} A new sub-array or substring of length `limit` or less if the input had\n *     less than `limit` elements.\n *\n * @example\n   <example module=\"limitToExample\">\n     <file name=\"index.html\">\n       <script>\n         angular.module('limitToExample', [])\n           .controller('ExampleController', ['$scope', function($scope) {\n             $scope.numbers = [1,2,3,4,5,6,7,8,9];\n             $scope.letters = \"abcdefghi\";\n             $scope.longNumber = 2345432342;\n             $scope.numLimit = 3;\n             $scope.letterLimit = 3;\n             $scope.longNumberLimit = 3;\n           }]);\n       </script>\n       <div ng-controller=\"ExampleController\">\n         <label>\n            Limit {{numbers}} to:\n            <input type=\"number\" step=\"1\" ng-model=\"numLimit\">\n         </label>\n         <p>Output numbers: {{ numbers | limitTo:numLimit }}</p>\n         <label>\n            Limit {{letters}} to:\n            <input type=\"number\" step=\"1\" ng-model=\"letterLimit\">\n         </label>\n         <p>Output letters: {{ letters | limitTo:letterLimit }}</p>\n         <label>\n            Limit {{longNumber}} to:\n            <input type=\"number\" step=\"1\" ng-model=\"longNumberLimit\">\n         </label>\n         <p>Output long number: {{ longNumber | limitTo:longNumberLimit }}</p>\n       </div>\n     </file>\n     <file name=\"protractor.js\" type=\"protractor\">\n       var numLimitInput = element(by.model('numLimit'));\n       var letterLimitInput = element(by.model('letterLimit'));\n       var longNumberLimitInput = element(by.model('longNumberLimit'));\n       var limitedNumbers = element(by.binding('numbers | limitTo:numLimit'));\n       var limitedLetters = element(by.binding('letters | limitTo:letterLimit'));\n       var limitedLongNumber = element(by.binding('longNumber | limitTo:longNumberLimit'));\n\n       it('should limit the number array to first three items', function() {\n         expect(numLimitInput.getAttribute('value')).toBe('3');\n         expect(letterLimitInput.getAttribute('value')).toBe('3');\n         expect(longNumberLimitInput.getAttribute('value')).toBe('3');\n         expect(limitedNumbers.getText()).toEqual('Output numbers: [1,2,3]');\n         expect(limitedLetters.getText()).toEqual('Output letters: abc');\n         expect(limitedLongNumber.getText()).toEqual('Output long number: 234');\n       });\n\n       // There is a bug in safari and protractor that doesn't like the minus key\n       // it('should update the output when -3 is entered', function() {\n       //   numLimitInput.clear();\n       //   numLimitInput.sendKeys('-3');\n       //   letterLimitInput.clear();\n       //   letterLimitInput.sendKeys('-3');\n       //   longNumberLimitInput.clear();\n       //   longNumberLimitInput.sendKeys('-3');\n       //   expect(limitedNumbers.getText()).toEqual('Output numbers: [7,8,9]');\n       //   expect(limitedLetters.getText()).toEqual('Output letters: ghi');\n       //   expect(limitedLongNumber.getText()).toEqual('Output long number: 342');\n       // });\n\n       it('should not exceed the maximum size of input array', function() {\n         numLimitInput.clear();\n         numLimitInput.sendKeys('100');\n         letterLimitInput.clear();\n         letterLimitInput.sendKeys('100');\n         longNumberLimitInput.clear();\n         longNumberLimitInput.sendKeys('100');\n         expect(limitedNumbers.getText()).toEqual('Output numbers: [1,2,3,4,5,6,7,8,9]');\n         expect(limitedLetters.getText()).toEqual('Output letters: abcdefghi');\n         expect(limitedLongNumber.getText()).toEqual('Output long number: 2345432342');\n       });\n     </file>\n   </example>\n*/\nfunction limitToFilter() {\n  return function(input, limit, begin) {\n    if (Math.abs(Number(limit)) === Infinity) {\n      limit = Number(limit);\n    } else {\n      limit = toInt(limit);\n    }\n    if (isNaN(limit)) return input;\n\n    if (isNumber(input)) input = input.toString();\n    if (!isArrayLike(input)) return input;\n\n    begin = (!begin || isNaN(begin)) ? 0 : toInt(begin);\n    begin = (begin < 0) ? Math.max(0, input.length + begin) : begin;\n\n    if (limit >= 0) {\n      return sliceFn(input, begin, begin + limit);\n    } else {\n      if (begin === 0) {\n        return sliceFn(input, limit, input.length);\n      } else {\n        return sliceFn(input, Math.max(0, begin + limit), begin);\n      }\n    }\n  };\n}\n\nfunction sliceFn(input, begin, end) {\n  if (isString(input)) return input.slice(begin, end);\n\n  return slice.call(input, begin, end);\n}\n\n/**\n * @ngdoc filter\n * @name orderBy\n * @kind function\n *\n * @description\n * Returns an array containing the items from the specified `collection`, ordered by a `comparator`\n * function based on the values computed using the `expression` predicate.\n *\n * For example, `[{id: 'foo'}, {id: 'bar'}] | orderBy:'id'` would result in\n * `[{id: 'bar'}, {id: 'foo'}]`.\n *\n * The `collection` can be an Array or array-like object (e.g. NodeList, jQuery object, TypedArray,\n * String, etc).\n *\n * The `expression` can be a single predicate, or a list of predicates each serving as a tie-breaker\n * for the preceeding one. The `expression` is evaluated against each item and the output is used\n * for comparing with other items.\n *\n * You can change the sorting order by setting `reverse` to `true`. By default, items are sorted in\n * ascending order.\n *\n * The comparison is done using the `comparator` function. If none is specified, a default, built-in\n * comparator is used (see below for details - in a nutshell, it compares numbers numerically and\n * strings alphabetically).\n *\n * ### Under the hood\n *\n * Ordering the specified `collection` happens in two phases:\n *\n * 1. All items are passed through the predicate (or predicates), and the returned values are saved\n *    along with their type (`string`, `number` etc). For example, an item `{label: 'foo'}`, passed\n *    through a predicate that extracts the value of the `label` property, would be transformed to:\n *    ```\n *    {\n *      value: 'foo',\n *      type: 'string',\n *      index: ...\n *    }\n *    ```\n * 2. The comparator function is used to sort the items, based on the derived values, types and\n *    indices.\n *\n * If you use a custom comparator, it will be called with pairs of objects of the form\n * `{value: ..., type: '...', index: ...}` and is expected to return `0` if the objects are equal\n * (as far as the comparator is concerned), `-1` if the 1st one should be ranked higher than the\n * second, or `1` otherwise.\n *\n * In order to ensure that the sorting will be deterministic across platforms, if none of the\n * specified predicates can distinguish between two items, `orderBy` will automatically introduce a\n * dummy predicate that returns the item's index as `value`.\n * (If you are using a custom comparator, make sure it can handle this predicate as well.)\n *\n * Finally, in an attempt to simplify things, if a predicate returns an object as the extracted\n * value for an item, `orderBy` will try to convert that object to a primitive value, before passing\n * it to the comparator. The following rules govern the conversion:\n *\n * 1. If the object has a `valueOf()` method that returns a primitive, its return value will be\n *    used instead.<br />\n *    (If the object has a `valueOf()` method that returns another object, then the returned object\n *    will be used in subsequent steps.)\n * 2. If the object has a custom `toString()` method (i.e. not the one inherited from `Object`) that\n *    returns a primitive, its return value will be used instead.<br />\n *    (If the object has a `toString()` method that returns another object, then the returned object\n *    will be used in subsequent steps.)\n * 3. No conversion; the object itself is used.\n *\n * ### The default comparator\n *\n * The default, built-in comparator should be sufficient for most usecases. In short, it compares\n * numbers numerically, strings alphabetically (and case-insensitively), for objects falls back to\n * using their index in the original collection, and sorts values of different types by type.\n *\n * More specifically, it follows these steps to determine the relative order of items:\n *\n * 1. If the compared values are of different types, compare the types themselves alphabetically.\n * 2. If both values are of type `string`, compare them alphabetically in a case- and\n *    locale-insensitive way.\n * 3. If both values are objects, compare their indices instead.\n * 4. Otherwise, return:\n *    -  `0`, if the values are equal (by strict equality comparison, i.e. using `===`).\n *    - `-1`, if the 1st value is \"less than\" the 2nd value (compared using the `<` operator).\n *    -  `1`, otherwise.\n *\n * **Note:** If you notice numbers not being sorted as expected, make sure they are actually being\n *           saved as numbers and not strings.\n *\n * @param {Array|ArrayLike} collection - The collection (array or array-like object) to sort.\n * @param {(Function|string|Array.<Function|string>)=} expression - A predicate (or list of\n *    predicates) to be used by the comparator to determine the order of elements.\n *\n *    Can be one of:\n *\n *    - `Function`: A getter function. This function will be called with each item as argument and\n *      the return value will be used for sorting.\n *    - `string`: An Angular expression. This expression will be evaluated against each item and the\n *      result will be used for sorting. For example, use `'label'` to sort by a property called\n *      `label` or `'label.substring(0, 3)'` to sort by the first 3 characters of the `label`\n *      property.<br />\n *      (The result of a constant expression is interpreted as a property name to be used for\n *      comparison. For example, use `'\"special name\"'` (note the extra pair of quotes) to sort by a\n *      property called `special name`.)<br />\n *      An expression can be optionally prefixed with `+` or `-` to control the sorting direction,\n *      ascending or descending. For example, `'+label'` or `'-label'`. If no property is provided,\n *      (e.g. `'+'` or `'-'`), the collection element itself is used in comparisons.\n *    - `Array`: An array of function and/or string predicates. If a predicate cannot determine the\n *      relative order of two items, the next predicate is used as a tie-breaker.\n *\n * **Note:** If the predicate is missing or empty then it defaults to `'+'`.\n *\n * @param {boolean=} reverse - If `true`, reverse the sorting order.\n * @param {(Function)=} comparator - The comparator function used to determine the relative order of\n *    value pairs. If omitted, the built-in comparator will be used.\n *\n * @returns {Array} - The sorted array.\n *\n *\n * @example\n * ### Ordering a table with `ngRepeat`\n *\n * The example below demonstrates a simple {@link ngRepeat ngRepeat}, where the data is sorted by\n * age in descending order (expression is set to `'-age'`). The `comparator` is not set, which means\n * it defaults to the built-in comparator.\n *\n   <example name=\"orderBy-static\" module=\"orderByExample1\">\n     <file name=\"index.html\">\n       <div ng-controller=\"ExampleController\">\n         <table class=\"friends\">\n           <tr>\n             <th>Name</th>\n             <th>Phone Number</th>\n             <th>Age</th>\n           </tr>\n           <tr ng-repeat=\"friend in friends | orderBy:'-age'\">\n             <td>{{friend.name}}</td>\n             <td>{{friend.phone}}</td>\n             <td>{{friend.age}}</td>\n           </tr>\n         </table>\n       </div>\n     </file>\n     <file name=\"script.js\">\n       angular.module('orderByExample1', [])\n         .controller('ExampleController', ['$scope', function($scope) {\n           $scope.friends = [\n             {name: 'John',   phone: '555-1212',  age: 10},\n             {name: 'Mary',   phone: '555-9876',  age: 19},\n             {name: 'Mike',   phone: '555-4321',  age: 21},\n             {name: 'Adam',   phone: '555-5678',  age: 35},\n             {name: 'Julie',  phone: '555-8765',  age: 29}\n           ];\n         }]);\n     </file>\n     <file name=\"style.css\">\n       .friends {\n         border-collapse: collapse;\n       }\n\n       .friends th {\n         border-bottom: 1px solid;\n       }\n       .friends td, .friends th {\n         border-left: 1px solid;\n         padding: 5px 10px;\n       }\n       .friends td:first-child, .friends th:first-child {\n         border-left: none;\n       }\n     </file>\n     <file name=\"protractor.js\" type=\"protractor\">\n       // Element locators\n       var names = element.all(by.repeater('friends').column('friend.name'));\n\n       it('should sort friends by age in reverse order', function() {\n         expect(names.get(0).getText()).toBe('Adam');\n         expect(names.get(1).getText()).toBe('Julie');\n         expect(names.get(2).getText()).toBe('Mike');\n         expect(names.get(3).getText()).toBe('Mary');\n         expect(names.get(4).getText()).toBe('John');\n       });\n     </file>\n   </example>\n * <hr />\n *\n * @example\n * ### Changing parameters dynamically\n *\n * All parameters can be changed dynamically. The next example shows how you can make the columns of\n * a table sortable, by binding the `expression` and `reverse` parameters to scope properties.\n *\n   <example name=\"orderBy-dynamic\" module=\"orderByExample2\">\n     <file name=\"index.html\">\n       <div ng-controller=\"ExampleController\">\n         <pre>Sort by = {{propertyName}}; reverse = {{reverse}}</pre>\n         <hr/>\n         <button ng-click=\"propertyName = null; reverse = false\">Set to unsorted</button>\n         <hr/>\n         <table class=\"friends\">\n           <tr>\n             <th>\n               <button ng-click=\"sortBy('name')\">Name</button>\n               <span class=\"sortorder\" ng-show=\"propertyName === 'name'\" ng-class=\"{reverse: reverse}\"></span>\n             </th>\n             <th>\n               <button ng-click=\"sortBy('phone')\">Phone Number</button>\n               <span class=\"sortorder\" ng-show=\"propertyName === 'phone'\" ng-class=\"{reverse: reverse}\"></span>\n             </th>\n             <th>\n               <button ng-click=\"sortBy('age')\">Age</button>\n               <span class=\"sortorder\" ng-show=\"propertyName === 'age'\" ng-class=\"{reverse: reverse}\"></span>\n             </th>\n           </tr>\n           <tr ng-repeat=\"friend in friends | orderBy:propertyName:reverse\">\n             <td>{{friend.name}}</td>\n             <td>{{friend.phone}}</td>\n             <td>{{friend.age}}</td>\n           </tr>\n         </table>\n       </div>\n     </file>\n     <file name=\"script.js\">\n       angular.module('orderByExample2', [])\n         .controller('ExampleController', ['$scope', function($scope) {\n           var friends = [\n             {name: 'John',   phone: '555-1212',  age: 10},\n             {name: 'Mary',   phone: '555-9876',  age: 19},\n             {name: 'Mike',   phone: '555-4321',  age: 21},\n             {name: 'Adam',   phone: '555-5678',  age: 35},\n             {name: 'Julie',  phone: '555-8765',  age: 29}\n           ];\n\n           $scope.propertyName = 'age';\n           $scope.reverse = true;\n           $scope.friends = friends;\n\n           $scope.sortBy = function(propertyName) {\n             $scope.reverse = ($scope.propertyName === propertyName) ? !$scope.reverse : false;\n             $scope.propertyName = propertyName;\n           };\n         }]);\n     </file>\n     <file name=\"style.css\">\n       .friends {\n         border-collapse: collapse;\n       }\n\n       .friends th {\n         border-bottom: 1px solid;\n       }\n       .friends td, .friends th {\n         border-left: 1px solid;\n         padding: 5px 10px;\n       }\n       .friends td:first-child, .friends th:first-child {\n         border-left: none;\n       }\n\n       .sortorder:after {\n         content: '\\25b2';   // BLACK UP-POINTING TRIANGLE\n       }\n       .sortorder.reverse:after {\n         content: '\\25bc';   // BLACK DOWN-POINTING TRIANGLE\n       }\n     </file>\n     <file name=\"protractor.js\" type=\"protractor\">\n       // Element locators\n       var unsortButton = element(by.partialButtonText('unsorted'));\n       var nameHeader = element(by.partialButtonText('Name'));\n       var phoneHeader = element(by.partialButtonText('Phone'));\n       var ageHeader = element(by.partialButtonText('Age'));\n       var firstName = element(by.repeater('friends').column('friend.name').row(0));\n       var lastName = element(by.repeater('friends').column('friend.name').row(4));\n\n       it('should sort friends by some property, when clicking on the column header', function() {\n         expect(firstName.getText()).toBe('Adam');\n         expect(lastName.getText()).toBe('John');\n\n         phoneHeader.click();\n         expect(firstName.getText()).toBe('John');\n         expect(lastName.getText()).toBe('Mary');\n\n         nameHeader.click();\n         expect(firstName.getText()).toBe('Adam');\n         expect(lastName.getText()).toBe('Mike');\n\n         ageHeader.click();\n         expect(firstName.getText()).toBe('John');\n         expect(lastName.getText()).toBe('Adam');\n       });\n\n       it('should sort friends in reverse order, when clicking on the same column', function() {\n         expect(firstName.getText()).toBe('Adam');\n         expect(lastName.getText()).toBe('John');\n\n         ageHeader.click();\n         expect(firstName.getText()).toBe('John');\n         expect(lastName.getText()).toBe('Adam');\n\n         ageHeader.click();\n         expect(firstName.getText()).toBe('Adam');\n         expect(lastName.getText()).toBe('John');\n       });\n\n       it('should restore the original order, when clicking \"Set to unsorted\"', function() {\n         expect(firstName.getText()).toBe('Adam');\n         expect(lastName.getText()).toBe('John');\n\n         unsortButton.click();\n         expect(firstName.getText()).toBe('John');\n         expect(lastName.getText()).toBe('Julie');\n       });\n     </file>\n   </example>\n * <hr />\n *\n * @example\n * ### Using `orderBy` inside a controller\n *\n * It is also possible to call the `orderBy` filter manually, by injecting `orderByFilter`, and\n * calling it with the desired parameters. (Alternatively, you could inject the `$filter` factory\n * and retrieve the `orderBy` filter with `$filter('orderBy')`.)\n *\n   <example name=\"orderBy-call-manually\" module=\"orderByExample3\">\n     <file name=\"index.html\">\n       <div ng-controller=\"ExampleController\">\n         <pre>Sort by = {{propertyName}}; reverse = {{reverse}}</pre>\n         <hr/>\n         <button ng-click=\"sortBy(null)\">Set to unsorted</button>\n         <hr/>\n         <table class=\"friends\">\n           <tr>\n             <th>\n               <button ng-click=\"sortBy('name')\">Name</button>\n               <span class=\"sortorder\" ng-show=\"propertyName === 'name'\" ng-class=\"{reverse: reverse}\"></span>\n             </th>\n             <th>\n               <button ng-click=\"sortBy('phone')\">Phone Number</button>\n               <span class=\"sortorder\" ng-show=\"propertyName === 'phone'\" ng-class=\"{reverse: reverse}\"></span>\n             </th>\n             <th>\n               <button ng-click=\"sortBy('age')\">Age</button>\n               <span class=\"sortorder\" ng-show=\"propertyName === 'age'\" ng-class=\"{reverse: reverse}\"></span>\n             </th>\n           </tr>\n           <tr ng-repeat=\"friend in friends\">\n             <td>{{friend.name}}</td>\n             <td>{{friend.phone}}</td>\n             <td>{{friend.age}}</td>\n           </tr>\n         </table>\n       </div>\n     </file>\n     <file name=\"script.js\">\n       angular.module('orderByExample3', [])\n         .controller('ExampleController', ['$scope', 'orderByFilter', function($scope, orderBy) {\n           var friends = [\n             {name: 'John',   phone: '555-1212',  age: 10},\n             {name: 'Mary',   phone: '555-9876',  age: 19},\n             {name: 'Mike',   phone: '555-4321',  age: 21},\n             {name: 'Adam',   phone: '555-5678',  age: 35},\n             {name: 'Julie',  phone: '555-8765',  age: 29}\n           ];\n\n           $scope.propertyName = 'age';\n           $scope.reverse = true;\n           $scope.friends = orderBy(friends, $scope.propertyName, $scope.reverse);\n\n           $scope.sortBy = function(propertyName) {\n             $scope.reverse = (propertyName !== null && $scope.propertyName === propertyName)\n                 ? !$scope.reverse : false;\n             $scope.propertyName = propertyName;\n             $scope.friends = orderBy(friends, $scope.propertyName, $scope.reverse);\n           };\n         }]);\n     </file>\n     <file name=\"style.css\">\n       .friends {\n         border-collapse: collapse;\n       }\n\n       .friends th {\n         border-bottom: 1px solid;\n       }\n       .friends td, .friends th {\n         border-left: 1px solid;\n         padding: 5px 10px;\n       }\n       .friends td:first-child, .friends th:first-child {\n         border-left: none;\n       }\n\n       .sortorder:after {\n         content: '\\25b2';   // BLACK UP-POINTING TRIANGLE\n       }\n       .sortorder.reverse:after {\n         content: '\\25bc';   // BLACK DOWN-POINTING TRIANGLE\n       }\n     </file>\n     <file name=\"protractor.js\" type=\"protractor\">\n       // Element locators\n       var unsortButton = element(by.partialButtonText('unsorted'));\n       var nameHeader = element(by.partialButtonText('Name'));\n       var phoneHeader = element(by.partialButtonText('Phone'));\n       var ageHeader = element(by.partialButtonText('Age'));\n       var firstName = element(by.repeater('friends').column('friend.name').row(0));\n       var lastName = element(by.repeater('friends').column('friend.name').row(4));\n\n       it('should sort friends by some property, when clicking on the column header', function() {\n         expect(firstName.getText()).toBe('Adam');\n         expect(lastName.getText()).toBe('John');\n\n         phoneHeader.click();\n         expect(firstName.getText()).toBe('John');\n         expect(lastName.getText()).toBe('Mary');\n\n         nameHeader.click();\n         expect(firstName.getText()).toBe('Adam');\n         expect(lastName.getText()).toBe('Mike');\n\n         ageHeader.click();\n         expect(firstName.getText()).toBe('John');\n         expect(lastName.getText()).toBe('Adam');\n       });\n\n       it('should sort friends in reverse order, when clicking on the same column', function() {\n         expect(firstName.getText()).toBe('Adam');\n         expect(lastName.getText()).toBe('John');\n\n         ageHeader.click();\n         expect(firstName.getText()).toBe('John');\n         expect(lastName.getText()).toBe('Adam');\n\n         ageHeader.click();\n         expect(firstName.getText()).toBe('Adam');\n         expect(lastName.getText()).toBe('John');\n       });\n\n       it('should restore the original order, when clicking \"Set to unsorted\"', function() {\n         expect(firstName.getText()).toBe('Adam');\n         expect(lastName.getText()).toBe('John');\n\n         unsortButton.click();\n         expect(firstName.getText()).toBe('John');\n         expect(lastName.getText()).toBe('Julie');\n       });\n     </file>\n   </example>\n * <hr />\n *\n * @example\n * ### Using a custom comparator\n *\n * If you have very specific requirements about the way items are sorted, you can pass your own\n * comparator function. For example, you might need to compare some strings in a locale-sensitive\n * way. (When specifying a custom comparator, you also need to pass a value for the `reverse`\n * argument - passing `false` retains the default sorting order, i.e. ascending.)\n *\n   <example name=\"orderBy-custom-comparator\" module=\"orderByExample4\">\n     <file name=\"index.html\">\n       <div ng-controller=\"ExampleController\">\n         <div class=\"friends-container custom-comparator\">\n           <h3>Locale-sensitive Comparator</h3>\n           <table class=\"friends\">\n             <tr>\n               <th>Name</th>\n               <th>Favorite Letter</th>\n             </tr>\n             <tr ng-repeat=\"friend in friends | orderBy:'favoriteLetter':false:localeSensitiveComparator\">\n               <td>{{friend.name}}</td>\n               <td>{{friend.favoriteLetter}}</td>\n             </tr>\n           </table>\n         </div>\n         <div class=\"friends-container default-comparator\">\n           <h3>Default Comparator</h3>\n           <table class=\"friends\">\n             <tr>\n               <th>Name</th>\n               <th>Favorite Letter</th>\n             </tr>\n             <tr ng-repeat=\"friend in friends | orderBy:'favoriteLetter'\">\n               <td>{{friend.name}}</td>\n               <td>{{friend.favoriteLetter}}</td>\n             </tr>\n           </table>\n         </div>\n       </div>\n     </file>\n     <file name=\"script.js\">\n       angular.module('orderByExample4', [])\n         .controller('ExampleController', ['$scope', function($scope) {\n           $scope.friends = [\n             {name: 'John',   favoriteLetter: 'Ä'},\n             {name: 'Mary',   favoriteLetter: 'Ü'},\n             {name: 'Mike',   favoriteLetter: 'Ö'},\n             {name: 'Adam',   favoriteLetter: 'H'},\n             {name: 'Julie',  favoriteLetter: 'Z'}\n           ];\n\n           $scope.localeSensitiveComparator = function(v1, v2) {\n             // If we don't get strings, just compare by index\n             if (v1.type !== 'string' || v2.type !== 'string') {\n               return (v1.index < v2.index) ? -1 : 1;\n             }\n\n             // Compare strings alphabetically, taking locale into account\n             return v1.value.localeCompare(v2.value);\n           };\n         }]);\n     </file>\n     <file name=\"style.css\">\n       .friends-container {\n         display: inline-block;\n         margin: 0 30px;\n       }\n\n       .friends {\n         border-collapse: collapse;\n       }\n\n       .friends th {\n         border-bottom: 1px solid;\n       }\n       .friends td, .friends th {\n         border-left: 1px solid;\n         padding: 5px 10px;\n       }\n       .friends td:first-child, .friends th:first-child {\n         border-left: none;\n       }\n     </file>\n     <file name=\"protractor.js\" type=\"protractor\">\n       // Element locators\n       var container = element(by.css('.custom-comparator'));\n       var names = container.all(by.repeater('friends').column('friend.name'));\n\n       it('should sort friends by favorite letter (in correct alphabetical order)', function() {\n         expect(names.get(0).getText()).toBe('John');\n         expect(names.get(1).getText()).toBe('Adam');\n         expect(names.get(2).getText()).toBe('Mike');\n         expect(names.get(3).getText()).toBe('Mary');\n         expect(names.get(4).getText()).toBe('Julie');\n       });\n     </file>\n   </example>\n *\n */\norderByFilter.$inject = ['$parse'];\nfunction orderByFilter($parse) {\n  return function(array, sortPredicate, reverseOrder, compareFn) {\n\n    if (array == null) return array;\n    if (!isArrayLike(array)) {\n      throw minErr('orderBy')('notarray', 'Expected array but received: {0}', array);\n    }\n\n    if (!isArray(sortPredicate)) { sortPredicate = [sortPredicate]; }\n    if (sortPredicate.length === 0) { sortPredicate = ['+']; }\n\n    var predicates = processPredicates(sortPredicate);\n\n    var descending = reverseOrder ? -1 : 1;\n\n    // Define the `compare()` function. Use a default comparator if none is specified.\n    var compare = isFunction(compareFn) ? compareFn : defaultCompare;\n\n    // The next three lines are a version of a Swartzian Transform idiom from Perl\n    // (sometimes called the Decorate-Sort-Undecorate idiom)\n    // See https://en.wikipedia.org/wiki/Schwartzian_transform\n    var compareValues = Array.prototype.map.call(array, getComparisonObject);\n    compareValues.sort(doComparison);\n    array = compareValues.map(function(item) { return item.value; });\n\n    return array;\n\n    function getComparisonObject(value, index) {\n      // NOTE: We are adding an extra `tieBreaker` value based on the element's index.\n      // This will be used to keep the sort stable when none of the input predicates can\n      // distinguish between two elements.\n      return {\n        value: value,\n        tieBreaker: {value: index, type: 'number', index: index},\n        predicateValues: predicates.map(function(predicate) {\n          return getPredicateValue(predicate.get(value), index);\n        })\n      };\n    }\n\n    function doComparison(v1, v2) {\n      for (var i = 0, ii = predicates.length; i < ii; i++) {\n        var result = compare(v1.predicateValues[i], v2.predicateValues[i]);\n        if (result) {\n          return result * predicates[i].descending * descending;\n        }\n      }\n\n      return compare(v1.tieBreaker, v2.tieBreaker) * descending;\n    }\n  };\n\n  function processPredicates(sortPredicates) {\n    return sortPredicates.map(function(predicate) {\n      var descending = 1, get = identity;\n\n      if (isFunction(predicate)) {\n        get = predicate;\n      } else if (isString(predicate)) {\n        if ((predicate.charAt(0) == '+' || predicate.charAt(0) == '-')) {\n          descending = predicate.charAt(0) == '-' ? -1 : 1;\n          predicate = predicate.substring(1);\n        }\n        if (predicate !== '') {\n          get = $parse(predicate);\n          if (get.constant) {\n            var key = get();\n            get = function(value) { return value[key]; };\n          }\n        }\n      }\n      return {get: get, descending: descending};\n    });\n  }\n\n  function isPrimitive(value) {\n    switch (typeof value) {\n      case 'number': /* falls through */\n      case 'boolean': /* falls through */\n      case 'string':\n        return true;\n      default:\n        return false;\n    }\n  }\n\n  function objectValue(value) {\n    // If `valueOf` is a valid function use that\n    if (isFunction(value.valueOf)) {\n      value = value.valueOf();\n      if (isPrimitive(value)) return value;\n    }\n    // If `toString` is a valid function and not the one from `Object.prototype` use that\n    if (hasCustomToString(value)) {\n      value = value.toString();\n      if (isPrimitive(value)) return value;\n    }\n\n    return value;\n  }\n\n  function getPredicateValue(value, index) {\n    var type = typeof value;\n    if (value === null) {\n      type = 'string';\n      value = 'null';\n    } else if (type === 'object') {\n      value = objectValue(value);\n    }\n    return {value: value, type: type, index: index};\n  }\n\n  function defaultCompare(v1, v2) {\n    var result = 0;\n    var type1 = v1.type;\n    var type2 = v2.type;\n\n    if (type1 === type2) {\n      var value1 = v1.value;\n      var value2 = v2.value;\n\n      if (type1 === 'string') {\n        // Compare strings case-insensitively\n        value1 = value1.toLowerCase();\n        value2 = value2.toLowerCase();\n      } else if (type1 === 'object') {\n        // For basic objects, use the position of the object\n        // in the collection instead of the value\n        if (isObject(value1)) value1 = v1.index;\n        if (isObject(value2)) value2 = v2.index;\n      }\n\n      if (value1 !== value2) {\n        result = value1 < value2 ? -1 : 1;\n      }\n    } else {\n      result = type1 < type2 ? -1 : 1;\n    }\n\n    return result;\n  }\n}\n\nfunction ngDirective(directive) {\n  if (isFunction(directive)) {\n    directive = {\n      link: directive\n    };\n  }\n  directive.restrict = directive.restrict || 'AC';\n  return valueFn(directive);\n}\n\n/**\n * @ngdoc directive\n * @name a\n * @restrict E\n *\n * @description\n * Modifies the default behavior of the html A tag so that the default action is prevented when\n * the href attribute is empty.\n *\n * This change permits the easy creation of action links with the `ngClick` directive\n * without changing the location or causing page reloads, e.g.:\n * `<a href=\"\" ng-click=\"list.addItem()\">Add Item</a>`\n */\nvar htmlAnchorDirective = valueFn({\n  restrict: 'E',\n  compile: function(element, attr) {\n    if (!attr.href && !attr.xlinkHref) {\n      return function(scope, element) {\n        // If the linked element is not an anchor tag anymore, do nothing\n        if (element[0].nodeName.toLowerCase() !== 'a') return;\n\n        // SVGAElement does not use the href attribute, but rather the 'xlinkHref' attribute.\n        var href = toString.call(element.prop('href')) === '[object SVGAnimatedString]' ?\n                   'xlink:href' : 'href';\n        element.on('click', function(event) {\n          // if we have no href url, then don't navigate anywhere.\n          if (!element.attr(href)) {\n            event.preventDefault();\n          }\n        });\n      };\n    }\n  }\n});\n\n/**\n * @ngdoc directive\n * @name ngHref\n * @restrict A\n * @priority 99\n *\n * @description\n * Using Angular markup like `{{hash}}` in an href attribute will\n * make the link go to the wrong URL if the user clicks it before\n * Angular has a chance to replace the `{{hash}}` markup with its\n * value. Until Angular replaces the markup the link will be broken\n * and will most likely return a 404 error. The `ngHref` directive\n * solves this problem.\n *\n * The wrong way to write it:\n * ```html\n * <a href=\"http://www.gravatar.com/avatar/{{hash}}\">link1</a>\n * ```\n *\n * The correct way to write it:\n * ```html\n * <a ng-href=\"http://www.gravatar.com/avatar/{{hash}}\">link1</a>\n * ```\n *\n * @element A\n * @param {template} ngHref any string which can contain `{{}}` markup.\n *\n * @example\n * This example shows various combinations of `href`, `ng-href` and `ng-click` attributes\n * in links and their different behaviors:\n    <example>\n      <file name=\"index.html\">\n        <input ng-model=\"value\" /><br />\n        <a id=\"link-1\" href ng-click=\"value = 1\">link 1</a> (link, don't reload)<br />\n        <a id=\"link-2\" href=\"\" ng-click=\"value = 2\">link 2</a> (link, don't reload)<br />\n        <a id=\"link-3\" ng-href=\"/{{'123'}}\">link 3</a> (link, reload!)<br />\n        <a id=\"link-4\" href=\"\" name=\"xx\" ng-click=\"value = 4\">anchor</a> (link, don't reload)<br />\n        <a id=\"link-5\" name=\"xxx\" ng-click=\"value = 5\">anchor</a> (no link)<br />\n        <a id=\"link-6\" ng-href=\"{{value}}\">link</a> (link, change location)\n      </file>\n      <file name=\"protractor.js\" type=\"protractor\">\n        it('should execute ng-click but not reload when href without value', function() {\n          element(by.id('link-1')).click();\n          expect(element(by.model('value')).getAttribute('value')).toEqual('1');\n          expect(element(by.id('link-1')).getAttribute('href')).toBe('');\n        });\n\n        it('should execute ng-click but not reload when href empty string', function() {\n          element(by.id('link-2')).click();\n          expect(element(by.model('value')).getAttribute('value')).toEqual('2');\n          expect(element(by.id('link-2')).getAttribute('href')).toBe('');\n        });\n\n        it('should execute ng-click and change url when ng-href specified', function() {\n          expect(element(by.id('link-3')).getAttribute('href')).toMatch(/\\/123$/);\n\n          element(by.id('link-3')).click();\n\n          // At this point, we navigate away from an Angular page, so we need\n          // to use browser.driver to get the base webdriver.\n\n          browser.wait(function() {\n            return browser.driver.getCurrentUrl().then(function(url) {\n              return url.match(/\\/123$/);\n            });\n          }, 5000, 'page should navigate to /123');\n        });\n\n        it('should execute ng-click but not reload when href empty string and name specified', function() {\n          element(by.id('link-4')).click();\n          expect(element(by.model('value')).getAttribute('value')).toEqual('4');\n          expect(element(by.id('link-4')).getAttribute('href')).toBe('');\n        });\n\n        it('should execute ng-click but not reload when no href but name specified', function() {\n          element(by.id('link-5')).click();\n          expect(element(by.model('value')).getAttribute('value')).toEqual('5');\n          expect(element(by.id('link-5')).getAttribute('href')).toBe(null);\n        });\n\n        it('should only change url when only ng-href', function() {\n          element(by.model('value')).clear();\n          element(by.model('value')).sendKeys('6');\n          expect(element(by.id('link-6')).getAttribute('href')).toMatch(/\\/6$/);\n\n          element(by.id('link-6')).click();\n\n          // At this point, we navigate away from an Angular page, so we need\n          // to use browser.driver to get the base webdriver.\n          browser.wait(function() {\n            return browser.driver.getCurrentUrl().then(function(url) {\n              return url.match(/\\/6$/);\n            });\n          }, 5000, 'page should navigate to /6');\n        });\n      </file>\n    </example>\n */\n\n/**\n * @ngdoc directive\n * @name ngSrc\n * @restrict A\n * @priority 99\n *\n * @description\n * Using Angular markup like `{{hash}}` in a `src` attribute doesn't\n * work right: The browser will fetch from the URL with the literal\n * text `{{hash}}` until Angular replaces the expression inside\n * `{{hash}}`. The `ngSrc` directive solves this problem.\n *\n * The buggy way to write it:\n * ```html\n * <img src=\"http://www.gravatar.com/avatar/{{hash}}\" alt=\"Description\"/>\n * ```\n *\n * The correct way to write it:\n * ```html\n * <img ng-src=\"http://www.gravatar.com/avatar/{{hash}}\" alt=\"Description\" />\n * ```\n *\n * @element IMG\n * @param {template} ngSrc any string which can contain `{{}}` markup.\n */\n\n/**\n * @ngdoc directive\n * @name ngSrcset\n * @restrict A\n * @priority 99\n *\n * @description\n * Using Angular markup like `{{hash}}` in a `srcset` attribute doesn't\n * work right: The browser will fetch from the URL with the literal\n * text `{{hash}}` until Angular replaces the expression inside\n * `{{hash}}`. The `ngSrcset` directive solves this problem.\n *\n * The buggy way to write it:\n * ```html\n * <img srcset=\"http://www.gravatar.com/avatar/{{hash}} 2x\" alt=\"Description\"/>\n * ```\n *\n * The correct way to write it:\n * ```html\n * <img ng-srcset=\"http://www.gravatar.com/avatar/{{hash}} 2x\" alt=\"Description\" />\n * ```\n *\n * @element IMG\n * @param {template} ngSrcset any string which can contain `{{}}` markup.\n */\n\n/**\n * @ngdoc directive\n * @name ngDisabled\n * @restrict A\n * @priority 100\n *\n * @description\n *\n * This directive sets the `disabled` attribute on the element if the\n * {@link guide/expression expression} inside `ngDisabled` evaluates to truthy.\n *\n * A special directive is necessary because we cannot use interpolation inside the `disabled`\n * attribute. See the {@link guide/interpolation interpolation guide} for more info.\n *\n * @example\n    <example>\n      <file name=\"index.html\">\n        <label>Click me to toggle: <input type=\"checkbox\" ng-model=\"checked\"></label><br/>\n        <button ng-model=\"button\" ng-disabled=\"checked\">Button</button>\n      </file>\n      <file name=\"protractor.js\" type=\"protractor\">\n        it('should toggle button', function() {\n          expect(element(by.css('button')).getAttribute('disabled')).toBeFalsy();\n          element(by.model('checked')).click();\n          expect(element(by.css('button')).getAttribute('disabled')).toBeTruthy();\n        });\n      </file>\n    </example>\n *\n * @element INPUT\n * @param {expression} ngDisabled If the {@link guide/expression expression} is truthy,\n *     then the `disabled` attribute will be set on the element\n */\n\n\n/**\n * @ngdoc directive\n * @name ngChecked\n * @restrict A\n * @priority 100\n *\n * @description\n * Sets the `checked` attribute on the element, if the expression inside `ngChecked` is truthy.\n *\n * Note that this directive should not be used together with {@link ngModel `ngModel`},\n * as this can lead to unexpected behavior.\n *\n * A special directive is necessary because we cannot use interpolation inside the `checked`\n * attribute. See the {@link guide/interpolation interpolation guide} for more info.\n *\n * @example\n    <example>\n      <file name=\"index.html\">\n        <label>Check me to check both: <input type=\"checkbox\" ng-model=\"master\"></label><br/>\n        <input id=\"checkSlave\" type=\"checkbox\" ng-checked=\"master\" aria-label=\"Slave input\">\n      </file>\n      <file name=\"protractor.js\" type=\"protractor\">\n        it('should check both checkBoxes', function() {\n          expect(element(by.id('checkSlave')).getAttribute('checked')).toBeFalsy();\n          element(by.model('master')).click();\n          expect(element(by.id('checkSlave')).getAttribute('checked')).toBeTruthy();\n        });\n      </file>\n    </example>\n *\n * @element INPUT\n * @param {expression} ngChecked If the {@link guide/expression expression} is truthy,\n *     then the `checked` attribute will be set on the element\n */\n\n\n/**\n * @ngdoc directive\n * @name ngReadonly\n * @restrict A\n * @priority 100\n *\n * @description\n *\n * Sets the `readonly` attribute on the element, if the expression inside `ngReadonly` is truthy.\n * Note that `readonly` applies only to `input` elements with specific types. [See the input docs on\n * MDN](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#attr-readonly) for more information.\n *\n * A special directive is necessary because we cannot use interpolation inside the `readonly`\n * attribute. See the {@link guide/interpolation interpolation guide} for more info.\n *\n * @example\n    <example>\n      <file name=\"index.html\">\n        <label>Check me to make text readonly: <input type=\"checkbox\" ng-model=\"checked\"></label><br/>\n        <input type=\"text\" ng-readonly=\"checked\" value=\"I'm Angular\" aria-label=\"Readonly field\" />\n      </file>\n      <file name=\"protractor.js\" type=\"protractor\">\n        it('should toggle readonly attr', function() {\n          expect(element(by.css('[type=\"text\"]')).getAttribute('readonly')).toBeFalsy();\n          element(by.model('checked')).click();\n          expect(element(by.css('[type=\"text\"]')).getAttribute('readonly')).toBeTruthy();\n        });\n      </file>\n    </example>\n *\n * @element INPUT\n * @param {expression} ngReadonly If the {@link guide/expression expression} is truthy,\n *     then special attribute \"readonly\" will be set on the element\n */\n\n\n/**\n * @ngdoc directive\n * @name ngSelected\n * @restrict A\n * @priority 100\n *\n * @description\n *\n * Sets the `selected` attribute on the element, if the expression inside `ngSelected` is truthy.\n *\n * A special directive is necessary because we cannot use interpolation inside the `selected`\n * attribute. See the {@link guide/interpolation interpolation guide} for more info.\n *\n * <div class=\"alert alert-warning\">\n *   **Note:** `ngSelected` does not interact with the `select` and `ngModel` directives, it only\n *   sets the `selected` attribute on the element. If you are using `ngModel` on the select, you\n *   should not use `ngSelected` on the options, as `ngModel` will set the select value and\n *   selected options.\n * </div>\n *\n * @example\n    <example>\n      <file name=\"index.html\">\n        <label>Check me to select: <input type=\"checkbox\" ng-model=\"selected\"></label><br/>\n        <select aria-label=\"ngSelected demo\">\n          <option>Hello!</option>\n          <option id=\"greet\" ng-selected=\"selected\">Greetings!</option>\n        </select>\n      </file>\n      <file name=\"protractor.js\" type=\"protractor\">\n        it('should select Greetings!', function() {\n          expect(element(by.id('greet')).getAttribute('selected')).toBeFalsy();\n          element(by.model('selected')).click();\n          expect(element(by.id('greet')).getAttribute('selected')).toBeTruthy();\n        });\n      </file>\n    </example>\n *\n * @element OPTION\n * @param {expression} ngSelected If the {@link guide/expression expression} is truthy,\n *     then special attribute \"selected\" will be set on the element\n */\n\n/**\n * @ngdoc directive\n * @name ngOpen\n * @restrict A\n * @priority 100\n *\n * @description\n *\n * Sets the `open` attribute on the element, if the expression inside `ngOpen` is truthy.\n *\n * A special directive is necessary because we cannot use interpolation inside the `open`\n * attribute. See the {@link guide/interpolation interpolation guide} for more info.\n *\n * ## A note about browser compatibility\n *\n * Edge, Firefox, and Internet Explorer do not support the `details` element, it is\n * recommended to use {@link ng.ngShow} and {@link ng.ngHide} instead.\n *\n * @example\n     <example>\n       <file name=\"index.html\">\n         <label>Check me check multiple: <input type=\"checkbox\" ng-model=\"open\"></label><br/>\n         <details id=\"details\" ng-open=\"open\">\n            <summary>Show/Hide me</summary>\n         </details>\n       </file>\n       <file name=\"protractor.js\" type=\"protractor\">\n         it('should toggle open', function() {\n           expect(element(by.id('details')).getAttribute('open')).toBeFalsy();\n           element(by.model('open')).click();\n           expect(element(by.id('details')).getAttribute('open')).toBeTruthy();\n         });\n       </file>\n     </example>\n *\n * @element DETAILS\n * @param {expression} ngOpen If the {@link guide/expression expression} is truthy,\n *     then special attribute \"open\" will be set on the element\n */\n\nvar ngAttributeAliasDirectives = {};\n\n// boolean attrs are evaluated\nforEach(BOOLEAN_ATTR, function(propName, attrName) {\n  // binding to multiple is not supported\n  if (propName == \"multiple\") return;\n\n  function defaultLinkFn(scope, element, attr) {\n    scope.$watch(attr[normalized], function ngBooleanAttrWatchAction(value) {\n      attr.$set(attrName, !!value);\n    });\n  }\n\n  var normalized = directiveNormalize('ng-' + attrName);\n  var linkFn = defaultLinkFn;\n\n  if (propName === 'checked') {\n    linkFn = function(scope, element, attr) {\n      // ensuring ngChecked doesn't interfere with ngModel when both are set on the same input\n      if (attr.ngModel !== attr[normalized]) {\n        defaultLinkFn(scope, element, attr);\n      }\n    };\n  }\n\n  ngAttributeAliasDirectives[normalized] = function() {\n    return {\n      restrict: 'A',\n      priority: 100,\n      link: linkFn\n    };\n  };\n});\n\n// aliased input attrs are evaluated\nforEach(ALIASED_ATTR, function(htmlAttr, ngAttr) {\n  ngAttributeAliasDirectives[ngAttr] = function() {\n    return {\n      priority: 100,\n      link: function(scope, element, attr) {\n        //special case ngPattern when a literal regular expression value\n        //is used as the expression (this way we don't have to watch anything).\n        if (ngAttr === \"ngPattern\" && attr.ngPattern.charAt(0) == \"/\") {\n          var match = attr.ngPattern.match(REGEX_STRING_REGEXP);\n          if (match) {\n            attr.$set(\"ngPattern\", new RegExp(match[1], match[2]));\n            return;\n          }\n        }\n\n        scope.$watch(attr[ngAttr], function ngAttrAliasWatchAction(value) {\n          attr.$set(ngAttr, value);\n        });\n      }\n    };\n  };\n});\n\n// ng-src, ng-srcset, ng-href are interpolated\nforEach(['src', 'srcset', 'href'], function(attrName) {\n  var normalized = directiveNormalize('ng-' + attrName);\n  ngAttributeAliasDirectives[normalized] = function() {\n    return {\n      priority: 99, // it needs to run after the attributes are interpolated\n      link: function(scope, element, attr) {\n        var propName = attrName,\n            name = attrName;\n\n        if (attrName === 'href' &&\n            toString.call(element.prop('href')) === '[object SVGAnimatedString]') {\n          name = 'xlinkHref';\n          attr.$attr[name] = 'xlink:href';\n          propName = null;\n        }\n\n        attr.$observe(normalized, function(value) {\n          if (!value) {\n            if (attrName === 'href') {\n              attr.$set(name, null);\n            }\n            return;\n          }\n\n          attr.$set(name, value);\n\n          // on IE, if \"ng:src\" directive declaration is used and \"src\" attribute doesn't exist\n          // then calling element.setAttribute('src', 'foo') doesn't do anything, so we need\n          // to set the property as well to achieve the desired effect.\n          // we use attr[attrName] value since $set can sanitize the url.\n          if (msie && propName) element.prop(propName, attr[name]);\n        });\n      }\n    };\n  };\n});\n\n/* global -nullFormCtrl, -SUBMITTED_CLASS, addSetValidityMethod: true\n */\nvar nullFormCtrl = {\n  $addControl: noop,\n  $$renameControl: nullFormRenameControl,\n  $removeControl: noop,\n  $setValidity: noop,\n  $setDirty: noop,\n  $setPristine: noop,\n  $setSubmitted: noop\n},\nSUBMITTED_CLASS = 'ng-submitted';\n\nfunction nullFormRenameControl(control, name) {\n  control.$name = name;\n}\n\n/**\n * @ngdoc type\n * @name form.FormController\n *\n * @property {boolean} $pristine True if user has not interacted with the form yet.\n * @property {boolean} $dirty True if user has already interacted with the form.\n * @property {boolean} $valid True if all of the containing forms and controls are valid.\n * @property {boolean} $invalid True if at least one containing control or form is invalid.\n * @property {boolean} $pending True if at least one containing control or form is pending.\n * @property {boolean} $submitted True if user has submitted the form even if its invalid.\n *\n * @property {Object} $error Is an object hash, containing references to controls or\n *  forms with failing validators, where:\n *\n *  - keys are validation tokens (error names),\n *  - values are arrays of controls or forms that have a failing validator for given error name.\n *\n *  Built-in validation tokens:\n *\n *  - `email`\n *  - `max`\n *  - `maxlength`\n *  - `min`\n *  - `minlength`\n *  - `number`\n *  - `pattern`\n *  - `required`\n *  - `url`\n *  - `date`\n *  - `datetimelocal`\n *  - `time`\n *  - `week`\n *  - `month`\n *\n * @description\n * `FormController` keeps track of all its controls and nested forms as well as the state of them,\n * such as being valid/invalid or dirty/pristine.\n *\n * Each {@link ng.directive:form form} directive creates an instance\n * of `FormController`.\n *\n */\n//asks for $scope to fool the BC controller module\nFormController.$inject = ['$element', '$attrs', '$scope', '$animate', '$interpolate'];\nfunction FormController(element, attrs, $scope, $animate, $interpolate) {\n  var form = this,\n      controls = [];\n\n  // init state\n  form.$error = {};\n  form.$$success = {};\n  form.$pending = undefined;\n  form.$name = $interpolate(attrs.name || attrs.ngForm || '')($scope);\n  form.$dirty = false;\n  form.$pristine = true;\n  form.$valid = true;\n  form.$invalid = false;\n  form.$submitted = false;\n  form.$$parentForm = nullFormCtrl;\n\n  /**\n   * @ngdoc method\n   * @name form.FormController#$rollbackViewValue\n   *\n   * @description\n   * Rollback all form controls pending updates to the `$modelValue`.\n   *\n   * Updates may be pending by a debounced event or because the input is waiting for a some future\n   * event defined in `ng-model-options`. This method is typically needed by the reset button of\n   * a form that uses `ng-model-options` to pend updates.\n   */\n  form.$rollbackViewValue = function() {\n    forEach(controls, function(control) {\n      control.$rollbackViewValue();\n    });\n  };\n\n  /**\n   * @ngdoc method\n   * @name form.FormController#$commitViewValue\n   *\n   * @description\n   * Commit all form controls pending updates to the `$modelValue`.\n   *\n   * Updates may be pending by a debounced event or because the input is waiting for a some future\n   * event defined in `ng-model-options`. This method is rarely needed as `NgModelController`\n   * usually handles calling this in response to input events.\n   */\n  form.$commitViewValue = function() {\n    forEach(controls, function(control) {\n      control.$commitViewValue();\n    });\n  };\n\n  /**\n   * @ngdoc method\n   * @name form.FormController#$addControl\n   * @param {object} control control object, either a {@link form.FormController} or an\n   * {@link ngModel.NgModelController}\n   *\n   * @description\n   * Register a control with the form. Input elements using ngModelController do this automatically\n   * when they are linked.\n   *\n   * Note that the current state of the control will not be reflected on the new parent form. This\n   * is not an issue with normal use, as freshly compiled and linked controls are in a `$pristine`\n   * state.\n   *\n   * However, if the method is used programmatically, for example by adding dynamically created controls,\n   * or controls that have been previously removed without destroying their corresponding DOM element,\n   * it's the developers responsibility to make sure the current state propagates to the parent form.\n   *\n   * For example, if an input control is added that is already `$dirty` and has `$error` properties,\n   * calling `$setDirty()` and `$validate()` afterwards will propagate the state to the parent form.\n   */\n  form.$addControl = function(control) {\n    // Breaking change - before, inputs whose name was \"hasOwnProperty\" were quietly ignored\n    // and not added to the scope.  Now we throw an error.\n    assertNotHasOwnProperty(control.$name, 'input');\n    controls.push(control);\n\n    if (control.$name) {\n      form[control.$name] = control;\n    }\n\n    control.$$parentForm = form;\n  };\n\n  // Private API: rename a form control\n  form.$$renameControl = function(control, newName) {\n    var oldName = control.$name;\n\n    if (form[oldName] === control) {\n      delete form[oldName];\n    }\n    form[newName] = control;\n    control.$name = newName;\n  };\n\n  /**\n   * @ngdoc method\n   * @name form.FormController#$removeControl\n   * @param {object} control control object, either a {@link form.FormController} or an\n   * {@link ngModel.NgModelController}\n   *\n   * @description\n   * Deregister a control from the form.\n   *\n   * Input elements using ngModelController do this automatically when they are destroyed.\n   *\n   * Note that only the removed control's validation state (`$errors`etc.) will be removed from the\n   * form. `$dirty`, `$submitted` states will not be changed, because the expected behavior can be\n   * different from case to case. For example, removing the only `$dirty` control from a form may or\n   * may not mean that the form is still `$dirty`.\n   */\n  form.$removeControl = function(control) {\n    if (control.$name && form[control.$name] === control) {\n      delete form[control.$name];\n    }\n    forEach(form.$pending, function(value, name) {\n      form.$setValidity(name, null, control);\n    });\n    forEach(form.$error, function(value, name) {\n      form.$setValidity(name, null, control);\n    });\n    forEach(form.$$success, function(value, name) {\n      form.$setValidity(name, null, control);\n    });\n\n    arrayRemove(controls, control);\n    control.$$parentForm = nullFormCtrl;\n  };\n\n\n  /**\n   * @ngdoc method\n   * @name form.FormController#$setValidity\n   *\n   * @description\n   * Sets the validity of a form control.\n   *\n   * This method will also propagate to parent forms.\n   */\n  addSetValidityMethod({\n    ctrl: this,\n    $element: element,\n    set: function(object, property, controller) {\n      var list = object[property];\n      if (!list) {\n        object[property] = [controller];\n      } else {\n        var index = list.indexOf(controller);\n        if (index === -1) {\n          list.push(controller);\n        }\n      }\n    },\n    unset: function(object, property, controller) {\n      var list = object[property];\n      if (!list) {\n        return;\n      }\n      arrayRemove(list, controller);\n      if (list.length === 0) {\n        delete object[property];\n      }\n    },\n    $animate: $animate\n  });\n\n  /**\n   * @ngdoc method\n   * @name form.FormController#$setDirty\n   *\n   * @description\n   * Sets the form to a dirty state.\n   *\n   * This method can be called to add the 'ng-dirty' class and set the form to a dirty\n   * state (ng-dirty class). This method will also propagate to parent forms.\n   */\n  form.$setDirty = function() {\n    $animate.removeClass(element, PRISTINE_CLASS);\n    $animate.addClass(element, DIRTY_CLASS);\n    form.$dirty = true;\n    form.$pristine = false;\n    form.$$parentForm.$setDirty();\n  };\n\n  /**\n   * @ngdoc method\n   * @name form.FormController#$setPristine\n   *\n   * @description\n   * Sets the form to its pristine state.\n   *\n   * This method can be called to remove the 'ng-dirty' class and set the form to its pristine\n   * state (ng-pristine class). This method will also propagate to all the controls contained\n   * in this form.\n   *\n   * Setting a form back to a pristine state is often useful when we want to 'reuse' a form after\n   * saving or resetting it.\n   */\n  form.$setPristine = function() {\n    $animate.setClass(element, PRISTINE_CLASS, DIRTY_CLASS + ' ' + SUBMITTED_CLASS);\n    form.$dirty = false;\n    form.$pristine = true;\n    form.$submitted = false;\n    forEach(controls, function(control) {\n      control.$setPristine();\n    });\n  };\n\n  /**\n   * @ngdoc method\n   * @name form.FormController#$setUntouched\n   *\n   * @description\n   * Sets the form to its untouched state.\n   *\n   * This method can be called to remove the 'ng-touched' class and set the form controls to their\n   * untouched state (ng-untouched class).\n   *\n   * Setting a form controls back to their untouched state is often useful when setting the form\n   * back to its pristine state.\n   */\n  form.$setUntouched = function() {\n    forEach(controls, function(control) {\n      control.$setUntouched();\n    });\n  };\n\n  /**\n   * @ngdoc method\n   * @name form.FormController#$setSubmitted\n   *\n   * @description\n   * Sets the form to its submitted state.\n   */\n  form.$setSubmitted = function() {\n    $animate.addClass(element, SUBMITTED_CLASS);\n    form.$submitted = true;\n    form.$$parentForm.$setSubmitted();\n  };\n}\n\n/**\n * @ngdoc directive\n * @name ngForm\n * @restrict EAC\n *\n * @description\n * Nestable alias of {@link ng.directive:form `form`} directive. HTML\n * does not allow nesting of form elements. It is useful to nest forms, for example if the validity of a\n * sub-group of controls needs to be determined.\n *\n * Note: the purpose of `ngForm` is to group controls,\n * but not to be a replacement for the `<form>` tag with all of its capabilities\n * (e.g. posting to the server, ...).\n *\n * @param {string=} ngForm|name Name of the form. If specified, the form controller will be published into\n *                       related scope, under this name.\n *\n */\n\n /**\n * @ngdoc directive\n * @name form\n * @restrict E\n *\n * @description\n * Directive that instantiates\n * {@link form.FormController FormController}.\n *\n * If the `name` attribute is specified, the form controller is published onto the current scope under\n * this name.\n *\n * # Alias: {@link ng.directive:ngForm `ngForm`}\n *\n * In Angular, forms can be nested. This means that the outer form is valid when all of the child\n * forms are valid as well. However, browsers do not allow nesting of `<form>` elements, so\n * Angular provides the {@link ng.directive:ngForm `ngForm`} directive, which behaves identically to\n * `form` but can be nested. Nested forms can be useful, for example, if the validity of a sub-group\n * of controls needs to be determined.\n *\n * # CSS classes\n *  - `ng-valid` is set if the form is valid.\n *  - `ng-invalid` is set if the form is invalid.\n *  - `ng-pending` is set if the form is pending.\n *  - `ng-pristine` is set if the form is pristine.\n *  - `ng-dirty` is set if the form is dirty.\n *  - `ng-submitted` is set if the form was submitted.\n *\n * Keep in mind that ngAnimate can detect each of these classes when added and removed.\n *\n *\n * # Submitting a form and preventing the default action\n *\n * Since the role of forms in client-side Angular applications is different than in classical\n * roundtrip apps, it is desirable for the browser not to translate the form submission into a full\n * page reload that sends the data to the server. Instead some javascript logic should be triggered\n * to handle the form submission in an application-specific way.\n *\n * For this reason, Angular prevents the default action (form submission to the server) unless the\n * `<form>` element has an `action` attribute specified.\n *\n * You can use one of the following two ways to specify what javascript method should be called when\n * a form is submitted:\n *\n * - {@link ng.directive:ngSubmit ngSubmit} directive on the form element\n * - {@link ng.directive:ngClick ngClick} directive on the first\n  *  button or input field of type submit (input[type=submit])\n *\n * To prevent double execution of the handler, use only one of the {@link ng.directive:ngSubmit ngSubmit}\n * or {@link ng.directive:ngClick ngClick} directives.\n * This is because of the following form submission rules in the HTML specification:\n *\n * - If a form has only one input field then hitting enter in this field triggers form submit\n * (`ngSubmit`)\n * - if a form has 2+ input fields and no buttons or input[type=submit] then hitting enter\n * doesn't trigger submit\n * - if a form has one or more input fields and one or more buttons or input[type=submit] then\n * hitting enter in any of the input fields will trigger the click handler on the *first* button or\n * input[type=submit] (`ngClick`) *and* a submit handler on the enclosing form (`ngSubmit`)\n *\n * Any pending `ngModelOptions` changes will take place immediately when an enclosing form is\n * submitted. Note that `ngClick` events will occur before the model is updated. Use `ngSubmit`\n * to have access to the updated model.\n *\n * ## Animation Hooks\n *\n * Animations in ngForm are triggered when any of the associated CSS classes are added and removed.\n * These classes are: `.ng-pristine`, `.ng-dirty`, `.ng-invalid` and `.ng-valid` as well as any\n * other validations that are performed within the form. Animations in ngForm are similar to how\n * they work in ngClass and animations can be hooked into using CSS transitions, keyframes as well\n * as JS animations.\n *\n * The following example shows a simple way to utilize CSS transitions to style a form element\n * that has been rendered as invalid after it has been validated:\n *\n * <pre>\n * //be sure to include ngAnimate as a module to hook into more\n * //advanced animations\n * .my-form {\n *   transition:0.5s linear all;\n *   background: white;\n * }\n * .my-form.ng-invalid {\n *   background: red;\n *   color:white;\n * }\n * </pre>\n *\n * @example\n    <example deps=\"angular-animate.js\" animations=\"true\" fixBase=\"true\" module=\"formExample\">\n      <file name=\"index.html\">\n       <script>\n         angular.module('formExample', [])\n           .controller('FormController', ['$scope', function($scope) {\n             $scope.userType = 'guest';\n           }]);\n       </script>\n       <style>\n        .my-form {\n          transition:all linear 0.5s;\n          background: transparent;\n        }\n        .my-form.ng-invalid {\n          background: red;\n        }\n       </style>\n       <form name=\"myForm\" ng-controller=\"FormController\" class=\"my-form\">\n         userType: <input name=\"input\" ng-model=\"userType\" required>\n         <span class=\"error\" ng-show=\"myForm.input.$error.required\">Required!</span><br>\n         <code>userType = {{userType}}</code><br>\n         <code>myForm.input.$valid = {{myForm.input.$valid}}</code><br>\n         <code>myForm.input.$error = {{myForm.input.$error}}</code><br>\n         <code>myForm.$valid = {{myForm.$valid}}</code><br>\n         <code>myForm.$error.required = {{!!myForm.$error.required}}</code><br>\n        </form>\n      </file>\n      <file name=\"protractor.js\" type=\"protractor\">\n        it('should initialize to model', function() {\n          var userType = element(by.binding('userType'));\n          var valid = element(by.binding('myForm.input.$valid'));\n\n          expect(userType.getText()).toContain('guest');\n          expect(valid.getText()).toContain('true');\n        });\n\n        it('should be invalid if empty', function() {\n          var userType = element(by.binding('userType'));\n          var valid = element(by.binding('myForm.input.$valid'));\n          var userInput = element(by.model('userType'));\n\n          userInput.clear();\n          userInput.sendKeys('');\n\n          expect(userType.getText()).toEqual('userType =');\n          expect(valid.getText()).toContain('false');\n        });\n      </file>\n    </example>\n *\n * @param {string=} name Name of the form. If specified, the form controller will be published into\n *                       related scope, under this name.\n */\nvar formDirectiveFactory = function(isNgForm) {\n  return ['$timeout', '$parse', function($timeout, $parse) {\n    var formDirective = {\n      name: 'form',\n      restrict: isNgForm ? 'EAC' : 'E',\n      require: ['form', '^^?form'], //first is the form's own ctrl, second is an optional parent form\n      controller: FormController,\n      compile: function ngFormCompile(formElement, attr) {\n        // Setup initial state of the control\n        formElement.addClass(PRISTINE_CLASS).addClass(VALID_CLASS);\n\n        var nameAttr = attr.name ? 'name' : (isNgForm && attr.ngForm ? 'ngForm' : false);\n\n        return {\n          pre: function ngFormPreLink(scope, formElement, attr, ctrls) {\n            var controller = ctrls[0];\n\n            // if `action` attr is not present on the form, prevent the default action (submission)\n            if (!('action' in attr)) {\n              // we can't use jq events because if a form is destroyed during submission the default\n              // action is not prevented. see #1238\n              //\n              // IE 9 is not affected because it doesn't fire a submit event and try to do a full\n              // page reload if the form was destroyed by submission of the form via a click handler\n              // on a button in the form. Looks like an IE9 specific bug.\n              var handleFormSubmission = function(event) {\n                scope.$apply(function() {\n                  controller.$commitViewValue();\n                  controller.$setSubmitted();\n                });\n\n                event.preventDefault();\n              };\n\n              addEventListenerFn(formElement[0], 'submit', handleFormSubmission);\n\n              // unregister the preventDefault listener so that we don't not leak memory but in a\n              // way that will achieve the prevention of the default action.\n              formElement.on('$destroy', function() {\n                $timeout(function() {\n                  removeEventListenerFn(formElement[0], 'submit', handleFormSubmission);\n                }, 0, false);\n              });\n            }\n\n            var parentFormCtrl = ctrls[1] || controller.$$parentForm;\n            parentFormCtrl.$addControl(controller);\n\n            var setter = nameAttr ? getSetter(controller.$name) : noop;\n\n            if (nameAttr) {\n              setter(scope, controller);\n              attr.$observe(nameAttr, function(newValue) {\n                if (controller.$name === newValue) return;\n                setter(scope, undefined);\n                controller.$$parentForm.$$renameControl(controller, newValue);\n                setter = getSetter(controller.$name);\n                setter(scope, controller);\n              });\n            }\n            formElement.on('$destroy', function() {\n              controller.$$parentForm.$removeControl(controller);\n              setter(scope, undefined);\n              extend(controller, nullFormCtrl); //stop propagating child destruction handlers upwards\n            });\n          }\n        };\n      }\n    };\n\n    return formDirective;\n\n    function getSetter(expression) {\n      if (expression === '') {\n        //create an assignable expression, so forms with an empty name can be renamed later\n        return $parse('this[\"\"]').assign;\n      }\n      return $parse(expression).assign || noop;\n    }\n  }];\n};\n\nvar formDirective = formDirectiveFactory();\nvar ngFormDirective = formDirectiveFactory(true);\n\n/* global VALID_CLASS: false,\n  INVALID_CLASS: false,\n  PRISTINE_CLASS: false,\n  DIRTY_CLASS: false,\n  UNTOUCHED_CLASS: false,\n  TOUCHED_CLASS: false,\n  ngModelMinErr: false,\n*/\n\n// Regex code was initially obtained from SO prior to modification: https://stackoverflow.com/questions/3143070/javascript-regex-iso-datetime#answer-3143231\nvar ISO_DATE_REGEXP = /^\\d{4,}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d:[0-5]\\d\\.\\d+(?:[+-][0-2]\\d:[0-5]\\d|Z)$/;\n// See valid URLs in RFC3987 (http://tools.ietf.org/html/rfc3987)\n// Note: We are being more lenient, because browsers are too.\n//   1. Scheme\n//   2. Slashes\n//   3. Username\n//   4. Password\n//   5. Hostname\n//   6. Port\n//   7. Path\n//   8. Query\n//   9. Fragment\n//                 1111111111111111 222   333333    44444        555555555555555555555555    666     77777777     8888888     999\nvar URL_REGEXP = /^[a-z][a-z\\d.+-]*:\\/*(?:[^:@]+(?::[^@]+)?@)?(?:[^\\s:/?#]+|\\[[a-f\\d:]+\\])(?::\\d+)?(?:\\/[^?#]*)?(?:\\?[^#]*)?(?:#.*)?$/i;\n/* jshint maxlen:220 */\nvar EMAIL_REGEXP = /^(?=.{1,254}$)(?=.{1,64}@)[-!#$%&'*+\\/0-9=?A-Z^_`a-z{|}~]+(\\.[-!#$%&'*+\\/0-9=?A-Z^_`a-z{|}~]+)*@[A-Za-z0-9]([A-Za-z0-9-]{0,61}[A-Za-z0-9])?(\\.[A-Za-z0-9]([A-Za-z0-9-]{0,61}[A-Za-z0-9])?)*$/;\n/* jshint maxlen:200 */\nvar NUMBER_REGEXP = /^\\s*(\\-|\\+)?(\\d+|(\\d*(\\.\\d*)))([eE][+-]?\\d+)?\\s*$/;\nvar DATE_REGEXP = /^(\\d{4,})-(\\d{2})-(\\d{2})$/;\nvar DATETIMELOCAL_REGEXP = /^(\\d{4,})-(\\d\\d)-(\\d\\d)T(\\d\\d):(\\d\\d)(?::(\\d\\d)(\\.\\d{1,3})?)?$/;\nvar WEEK_REGEXP = /^(\\d{4,})-W(\\d\\d)$/;\nvar MONTH_REGEXP = /^(\\d{4,})-(\\d\\d)$/;\nvar TIME_REGEXP = /^(\\d\\d):(\\d\\d)(?::(\\d\\d)(\\.\\d{1,3})?)?$/;\n\nvar PARTIAL_VALIDATION_EVENTS = 'keydown wheel mousedown';\nvar PARTIAL_VALIDATION_TYPES = createMap();\nforEach('date,datetime-local,month,time,week'.split(','), function(type) {\n  PARTIAL_VALIDATION_TYPES[type] = true;\n});\n\nvar inputType = {\n\n  /**\n   * @ngdoc input\n   * @name input[text]\n   *\n   * @description\n   * Standard HTML text input with angular data binding, inherited by most of the `input` elements.\n   *\n   *\n   * @param {string} ngModel Assignable angular expression to data-bind to.\n   * @param {string=} name Property name of the form under which the control is published.\n   * @param {string=} required Adds `required` validation error key if the value is not entered.\n   * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to\n   *    the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of\n   *    `required` when you want to data-bind to the `required` attribute.\n   * @param {number=} ngMinlength Sets `minlength` validation error key if the value is shorter than\n   *    minlength.\n   * @param {number=} ngMaxlength Sets `maxlength` validation error key if the value is longer than\n   *    maxlength. Setting the attribute to a negative or non-numeric value, allows view values of\n   *    any length.\n   * @param {string=} pattern Similar to `ngPattern` except that the attribute value is the actual string\n   *    that contains the regular expression body that will be converted to a regular expression\n   *    as in the ngPattern directive.\n   * @param {string=} ngPattern Sets `pattern` validation error key if the ngModel {@link ngModel.NgModelController#$viewValue $viewValue}\n   *    does not match a RegExp found by evaluating the Angular expression given in the attribute value.\n   *    If the expression evaluates to a RegExp object, then this is used directly.\n   *    If the expression evaluates to a string, then it will be converted to a RegExp\n   *    after wrapping it in `^` and `$` characters. For instance, `\"abc\"` will be converted to\n   *    `new RegExp('^abc$')`.<br />\n   *    **Note:** Avoid using the `g` flag on the RegExp, as it will cause each successive search to\n   *    start at the index of the last search's match, thus not taking the whole input value into\n   *    account.\n   * @param {string=} ngChange Angular expression to be executed when input changes due to user\n   *    interaction with the input element.\n   * @param {boolean=} [ngTrim=true] If set to false Angular will not automatically trim the input.\n   *    This parameter is ignored for input[type=password] controls, which will never trim the\n   *    input.\n   *\n   * @example\n      <example name=\"text-input-directive\" module=\"textInputExample\">\n        <file name=\"index.html\">\n         <script>\n           angular.module('textInputExample', [])\n             .controller('ExampleController', ['$scope', function($scope) {\n               $scope.example = {\n                 text: 'guest',\n                 word: /^\\s*\\w*\\s*$/\n               };\n             }]);\n         </script>\n         <form name=\"myForm\" ng-controller=\"ExampleController\">\n           <label>Single word:\n             <input type=\"text\" name=\"input\" ng-model=\"example.text\"\n                    ng-pattern=\"example.word\" required ng-trim=\"false\">\n           </label>\n           <div role=\"alert\">\n             <span class=\"error\" ng-show=\"myForm.input.$error.required\">\n               Required!</span>\n             <span class=\"error\" ng-show=\"myForm.input.$error.pattern\">\n               Single word only!</span>\n           </div>\n           <code>text = {{example.text}}</code><br/>\n           <code>myForm.input.$valid = {{myForm.input.$valid}}</code><br/>\n           <code>myForm.input.$error = {{myForm.input.$error}}</code><br/>\n           <code>myForm.$valid = {{myForm.$valid}}</code><br/>\n           <code>myForm.$error.required = {{!!myForm.$error.required}}</code><br/>\n          </form>\n        </file>\n        <file name=\"protractor.js\" type=\"protractor\">\n          var text = element(by.binding('example.text'));\n          var valid = element(by.binding('myForm.input.$valid'));\n          var input = element(by.model('example.text'));\n\n          it('should initialize to model', function() {\n            expect(text.getText()).toContain('guest');\n            expect(valid.getText()).toContain('true');\n          });\n\n          it('should be invalid if empty', function() {\n            input.clear();\n            input.sendKeys('');\n\n            expect(text.getText()).toEqual('text =');\n            expect(valid.getText()).toContain('false');\n          });\n\n          it('should be invalid if multi word', function() {\n            input.clear();\n            input.sendKeys('hello world');\n\n            expect(valid.getText()).toContain('false');\n          });\n        </file>\n      </example>\n   */\n  'text': textInputType,\n\n    /**\n     * @ngdoc input\n     * @name input[date]\n     *\n     * @description\n     * Input with date validation and transformation. In browsers that do not yet support\n     * the HTML5 date input, a text element will be used. In that case, text must be entered in a valid ISO-8601\n     * date format (yyyy-MM-dd), for example: `2009-01-06`. Since many\n     * modern browsers do not yet support this input type, it is important to provide cues to users on the\n     * expected input format via a placeholder or label.\n     *\n     * The model must always be a Date object, otherwise Angular will throw an error.\n     * Invalid `Date` objects (dates whose `getTime()` is `NaN`) will be rendered as an empty string.\n     *\n     * The timezone to be used to read/write the `Date` instance in the model can be defined using\n     * {@link ng.directive:ngModelOptions ngModelOptions}. By default, this is the timezone of the browser.\n     *\n     * @param {string} ngModel Assignable angular expression to data-bind to.\n     * @param {string=} name Property name of the form under which the control is published.\n     * @param {string=} min Sets the `min` validation error key if the value entered is less than `min`. This must be a\n     *   valid ISO date string (yyyy-MM-dd). You can also use interpolation inside this attribute\n     *   (e.g. `min=\"{{minDate | date:'yyyy-MM-dd'}}\"`). Note that `min` will also add native HTML5\n     *   constraint validation.\n     * @param {string=} max Sets the `max` validation error key if the value entered is greater than `max`. This must be\n     *   a valid ISO date string (yyyy-MM-dd). You can also use interpolation inside this attribute\n     *   (e.g. `max=\"{{maxDate | date:'yyyy-MM-dd'}}\"`). Note that `max` will also add native HTML5\n     *   constraint validation.\n     * @param {(date|string)=} ngMin Sets the `min` validation constraint to the Date / ISO date string\n     *   the `ngMin` expression evaluates to. Note that it does not set the `min` attribute.\n     * @param {(date|string)=} ngMax Sets the `max` validation constraint to the Date / ISO date string\n     *   the `ngMax` expression evaluates to. Note that it does not set the `max` attribute.\n     * @param {string=} required Sets `required` validation error key if the value is not entered.\n     * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to\n     *    the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of\n     *    `required` when you want to data-bind to the `required` attribute.\n     * @param {string=} ngChange Angular expression to be executed when input changes due to user\n     *    interaction with the input element.\n     *\n     * @example\n     <example name=\"date-input-directive\" module=\"dateInputExample\">\n     <file name=\"index.html\">\n       <script>\n          angular.module('dateInputExample', [])\n            .controller('DateController', ['$scope', function($scope) {\n              $scope.example = {\n                value: new Date(2013, 9, 22)\n              };\n            }]);\n       </script>\n       <form name=\"myForm\" ng-controller=\"DateController as dateCtrl\">\n          <label for=\"exampleInput\">Pick a date in 2013:</label>\n          <input type=\"date\" id=\"exampleInput\" name=\"input\" ng-model=\"example.value\"\n              placeholder=\"yyyy-MM-dd\" min=\"2013-01-01\" max=\"2013-12-31\" required />\n          <div role=\"alert\">\n            <span class=\"error\" ng-show=\"myForm.input.$error.required\">\n                Required!</span>\n            <span class=\"error\" ng-show=\"myForm.input.$error.date\">\n                Not a valid date!</span>\n           </div>\n           <tt>value = {{example.value | date: \"yyyy-MM-dd\"}}</tt><br/>\n           <tt>myForm.input.$valid = {{myForm.input.$valid}}</tt><br/>\n           <tt>myForm.input.$error = {{myForm.input.$error}}</tt><br/>\n           <tt>myForm.$valid = {{myForm.$valid}}</tt><br/>\n           <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br/>\n       </form>\n     </file>\n     <file name=\"protractor.js\" type=\"protractor\">\n        var value = element(by.binding('example.value | date: \"yyyy-MM-dd\"'));\n        var valid = element(by.binding('myForm.input.$valid'));\n        var input = element(by.model('example.value'));\n\n        // currently protractor/webdriver does not support\n        // sending keys to all known HTML5 input controls\n        // for various browsers (see https://github.com/angular/protractor/issues/562).\n        function setInput(val) {\n          // set the value of the element and force validation.\n          var scr = \"var ipt = document.getElementById('exampleInput'); \" +\n          \"ipt.value = '\" + val + \"';\" +\n          \"angular.element(ipt).scope().$apply(function(s) { s.myForm[ipt.name].$setViewValue('\" + val + \"'); });\";\n          browser.executeScript(scr);\n        }\n\n        it('should initialize to model', function() {\n          expect(value.getText()).toContain('2013-10-22');\n          expect(valid.getText()).toContain('myForm.input.$valid = true');\n        });\n\n        it('should be invalid if empty', function() {\n          setInput('');\n          expect(value.getText()).toEqual('value =');\n          expect(valid.getText()).toContain('myForm.input.$valid = false');\n        });\n\n        it('should be invalid if over max', function() {\n          setInput('2015-01-01');\n          expect(value.getText()).toContain('');\n          expect(valid.getText()).toContain('myForm.input.$valid = false');\n        });\n     </file>\n     </example>\n     */\n  'date': createDateInputType('date', DATE_REGEXP,\n         createDateParser(DATE_REGEXP, ['yyyy', 'MM', 'dd']),\n         'yyyy-MM-dd'),\n\n   /**\n    * @ngdoc input\n    * @name input[datetime-local]\n    *\n    * @description\n    * Input with datetime validation and transformation. In browsers that do not yet support\n    * the HTML5 date input, a text element will be used. In that case, the text must be entered in a valid ISO-8601\n    * local datetime format (yyyy-MM-ddTHH:mm:ss), for example: `2010-12-28T14:57:00`.\n    *\n    * The model must always be a Date object, otherwise Angular will throw an error.\n    * Invalid `Date` objects (dates whose `getTime()` is `NaN`) will be rendered as an empty string.\n    *\n    * The timezone to be used to read/write the `Date` instance in the model can be defined using\n    * {@link ng.directive:ngModelOptions ngModelOptions}. By default, this is the timezone of the browser.\n    *\n    * @param {string} ngModel Assignable angular expression to data-bind to.\n    * @param {string=} name Property name of the form under which the control is published.\n    * @param {string=} min Sets the `min` validation error key if the value entered is less than `min`.\n    *   This must be a valid ISO datetime format (yyyy-MM-ddTHH:mm:ss). You can also use interpolation\n    *   inside this attribute (e.g. `min=\"{{minDatetimeLocal | date:'yyyy-MM-ddTHH:mm:ss'}}\"`).\n    *   Note that `min` will also add native HTML5 constraint validation.\n    * @param {string=} max Sets the `max` validation error key if the value entered is greater than `max`.\n    *   This must be a valid ISO datetime format (yyyy-MM-ddTHH:mm:ss). You can also use interpolation\n    *   inside this attribute (e.g. `max=\"{{maxDatetimeLocal | date:'yyyy-MM-ddTHH:mm:ss'}}\"`).\n    *   Note that `max` will also add native HTML5 constraint validation.\n    * @param {(date|string)=} ngMin Sets the `min` validation error key to the Date / ISO datetime string\n    *   the `ngMin` expression evaluates to. Note that it does not set the `min` attribute.\n    * @param {(date|string)=} ngMax Sets the `max` validation error key to the Date / ISO datetime string\n    *   the `ngMax` expression evaluates to. Note that it does not set the `max` attribute.\n    * @param {string=} required Sets `required` validation error key if the value is not entered.\n    * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to\n    *    the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of\n    *    `required` when you want to data-bind to the `required` attribute.\n    * @param {string=} ngChange Angular expression to be executed when input changes due to user\n    *    interaction with the input element.\n    *\n    * @example\n    <example name=\"datetimelocal-input-directive\" module=\"dateExample\">\n    <file name=\"index.html\">\n      <script>\n        angular.module('dateExample', [])\n          .controller('DateController', ['$scope', function($scope) {\n            $scope.example = {\n              value: new Date(2010, 11, 28, 14, 57)\n            };\n          }]);\n      </script>\n      <form name=\"myForm\" ng-controller=\"DateController as dateCtrl\">\n        <label for=\"exampleInput\">Pick a date between in 2013:</label>\n        <input type=\"datetime-local\" id=\"exampleInput\" name=\"input\" ng-model=\"example.value\"\n            placeholder=\"yyyy-MM-ddTHH:mm:ss\" min=\"2001-01-01T00:00:00\" max=\"2013-12-31T00:00:00\" required />\n        <div role=\"alert\">\n          <span class=\"error\" ng-show=\"myForm.input.$error.required\">\n              Required!</span>\n          <span class=\"error\" ng-show=\"myForm.input.$error.datetimelocal\">\n              Not a valid date!</span>\n        </div>\n        <tt>value = {{example.value | date: \"yyyy-MM-ddTHH:mm:ss\"}}</tt><br/>\n        <tt>myForm.input.$valid = {{myForm.input.$valid}}</tt><br/>\n        <tt>myForm.input.$error = {{myForm.input.$error}}</tt><br/>\n        <tt>myForm.$valid = {{myForm.$valid}}</tt><br/>\n        <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br/>\n      </form>\n    </file>\n    <file name=\"protractor.js\" type=\"protractor\">\n      var value = element(by.binding('example.value | date: \"yyyy-MM-ddTHH:mm:ss\"'));\n      var valid = element(by.binding('myForm.input.$valid'));\n      var input = element(by.model('example.value'));\n\n      // currently protractor/webdriver does not support\n      // sending keys to all known HTML5 input controls\n      // for various browsers (https://github.com/angular/protractor/issues/562).\n      function setInput(val) {\n        // set the value of the element and force validation.\n        var scr = \"var ipt = document.getElementById('exampleInput'); \" +\n        \"ipt.value = '\" + val + \"';\" +\n        \"angular.element(ipt).scope().$apply(function(s) { s.myForm[ipt.name].$setViewValue('\" + val + \"'); });\";\n        browser.executeScript(scr);\n      }\n\n      it('should initialize to model', function() {\n        expect(value.getText()).toContain('2010-12-28T14:57:00');\n        expect(valid.getText()).toContain('myForm.input.$valid = true');\n      });\n\n      it('should be invalid if empty', function() {\n        setInput('');\n        expect(value.getText()).toEqual('value =');\n        expect(valid.getText()).toContain('myForm.input.$valid = false');\n      });\n\n      it('should be invalid if over max', function() {\n        setInput('2015-01-01T23:59:00');\n        expect(value.getText()).toContain('');\n        expect(valid.getText()).toContain('myForm.input.$valid = false');\n      });\n    </file>\n    </example>\n    */\n  'datetime-local': createDateInputType('datetimelocal', DATETIMELOCAL_REGEXP,\n      createDateParser(DATETIMELOCAL_REGEXP, ['yyyy', 'MM', 'dd', 'HH', 'mm', 'ss', 'sss']),\n      'yyyy-MM-ddTHH:mm:ss.sss'),\n\n  /**\n   * @ngdoc input\n   * @name input[time]\n   *\n   * @description\n   * Input with time validation and transformation. In browsers that do not yet support\n   * the HTML5 time input, a text element will be used. In that case, the text must be entered in a valid ISO-8601\n   * local time format (HH:mm:ss), for example: `14:57:00`. Model must be a Date object. This binding will always output a\n   * Date object to the model of January 1, 1970, or local date `new Date(1970, 0, 1, HH, mm, ss)`.\n   *\n   * The model must always be a Date object, otherwise Angular will throw an error.\n   * Invalid `Date` objects (dates whose `getTime()` is `NaN`) will be rendered as an empty string.\n   *\n   * The timezone to be used to read/write the `Date` instance in the model can be defined using\n   * {@link ng.directive:ngModelOptions ngModelOptions}. By default, this is the timezone of the browser.\n   *\n   * @param {string} ngModel Assignable angular expression to data-bind to.\n   * @param {string=} name Property name of the form under which the control is published.\n   * @param {string=} min Sets the `min` validation error key if the value entered is less than `min`.\n   *   This must be a valid ISO time format (HH:mm:ss). You can also use interpolation inside this\n   *   attribute (e.g. `min=\"{{minTime | date:'HH:mm:ss'}}\"`). Note that `min` will also add\n   *   native HTML5 constraint validation.\n   * @param {string=} max Sets the `max` validation error key if the value entered is greater than `max`.\n   *   This must be a valid ISO time format (HH:mm:ss). You can also use interpolation inside this\n   *   attribute (e.g. `max=\"{{maxTime | date:'HH:mm:ss'}}\"`). Note that `max` will also add\n   *   native HTML5 constraint validation.\n   * @param {(date|string)=} ngMin Sets the `min` validation constraint to the Date / ISO time string the\n   *   `ngMin` expression evaluates to. Note that it does not set the `min` attribute.\n   * @param {(date|string)=} ngMax Sets the `max` validation constraint to the Date / ISO time string the\n   *   `ngMax` expression evaluates to. Note that it does not set the `max` attribute.\n   * @param {string=} required Sets `required` validation error key if the value is not entered.\n   * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to\n   *    the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of\n   *    `required` when you want to data-bind to the `required` attribute.\n   * @param {string=} ngChange Angular expression to be executed when input changes due to user\n   *    interaction with the input element.\n   *\n   * @example\n   <example name=\"time-input-directive\" module=\"timeExample\">\n   <file name=\"index.html\">\n     <script>\n      angular.module('timeExample', [])\n        .controller('DateController', ['$scope', function($scope) {\n          $scope.example = {\n            value: new Date(1970, 0, 1, 14, 57, 0)\n          };\n        }]);\n     </script>\n     <form name=\"myForm\" ng-controller=\"DateController as dateCtrl\">\n        <label for=\"exampleInput\">Pick a time between 8am and 5pm:</label>\n        <input type=\"time\" id=\"exampleInput\" name=\"input\" ng-model=\"example.value\"\n            placeholder=\"HH:mm:ss\" min=\"08:00:00\" max=\"17:00:00\" required />\n        <div role=\"alert\">\n          <span class=\"error\" ng-show=\"myForm.input.$error.required\">\n              Required!</span>\n          <span class=\"error\" ng-show=\"myForm.input.$error.time\">\n              Not a valid date!</span>\n        </div>\n        <tt>value = {{example.value | date: \"HH:mm:ss\"}}</tt><br/>\n        <tt>myForm.input.$valid = {{myForm.input.$valid}}</tt><br/>\n        <tt>myForm.input.$error = {{myForm.input.$error}}</tt><br/>\n        <tt>myForm.$valid = {{myForm.$valid}}</tt><br/>\n        <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br/>\n     </form>\n   </file>\n   <file name=\"protractor.js\" type=\"protractor\">\n      var value = element(by.binding('example.value | date: \"HH:mm:ss\"'));\n      var valid = element(by.binding('myForm.input.$valid'));\n      var input = element(by.model('example.value'));\n\n      // currently protractor/webdriver does not support\n      // sending keys to all known HTML5 input controls\n      // for various browsers (https://github.com/angular/protractor/issues/562).\n      function setInput(val) {\n        // set the value of the element and force validation.\n        var scr = \"var ipt = document.getElementById('exampleInput'); \" +\n        \"ipt.value = '\" + val + \"';\" +\n        \"angular.element(ipt).scope().$apply(function(s) { s.myForm[ipt.name].$setViewValue('\" + val + \"'); });\";\n        browser.executeScript(scr);\n      }\n\n      it('should initialize to model', function() {\n        expect(value.getText()).toContain('14:57:00');\n        expect(valid.getText()).toContain('myForm.input.$valid = true');\n      });\n\n      it('should be invalid if empty', function() {\n        setInput('');\n        expect(value.getText()).toEqual('value =');\n        expect(valid.getText()).toContain('myForm.input.$valid = false');\n      });\n\n      it('should be invalid if over max', function() {\n        setInput('23:59:00');\n        expect(value.getText()).toContain('');\n        expect(valid.getText()).toContain('myForm.input.$valid = false');\n      });\n   </file>\n   </example>\n   */\n  'time': createDateInputType('time', TIME_REGEXP,\n      createDateParser(TIME_REGEXP, ['HH', 'mm', 'ss', 'sss']),\n     'HH:mm:ss.sss'),\n\n   /**\n    * @ngdoc input\n    * @name input[week]\n    *\n    * @description\n    * Input with week-of-the-year validation and transformation to Date. In browsers that do not yet support\n    * the HTML5 week input, a text element will be used. In that case, the text must be entered in a valid ISO-8601\n    * week format (yyyy-W##), for example: `2013-W02`.\n    *\n    * The model must always be a Date object, otherwise Angular will throw an error.\n    * Invalid `Date` objects (dates whose `getTime()` is `NaN`) will be rendered as an empty string.\n    *\n    * The timezone to be used to read/write the `Date` instance in the model can be defined using\n    * {@link ng.directive:ngModelOptions ngModelOptions}. By default, this is the timezone of the browser.\n    *\n    * @param {string} ngModel Assignable angular expression to data-bind to.\n    * @param {string=} name Property name of the form under which the control is published.\n    * @param {string=} min Sets the `min` validation error key if the value entered is less than `min`.\n    *   This must be a valid ISO week format (yyyy-W##). You can also use interpolation inside this\n    *   attribute (e.g. `min=\"{{minWeek | date:'yyyy-Www'}}\"`). Note that `min` will also add\n    *   native HTML5 constraint validation.\n    * @param {string=} max Sets the `max` validation error key if the value entered is greater than `max`.\n    *   This must be a valid ISO week format (yyyy-W##). You can also use interpolation inside this\n    *   attribute (e.g. `max=\"{{maxWeek | date:'yyyy-Www'}}\"`). Note that `max` will also add\n    *   native HTML5 constraint validation.\n    * @param {(date|string)=} ngMin Sets the `min` validation constraint to the Date / ISO week string\n    *   the `ngMin` expression evaluates to. Note that it does not set the `min` attribute.\n    * @param {(date|string)=} ngMax Sets the `max` validation constraint to the Date / ISO week string\n    *   the `ngMax` expression evaluates to. Note that it does not set the `max` attribute.\n    * @param {string=} required Sets `required` validation error key if the value is not entered.\n    * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to\n    *    the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of\n    *    `required` when you want to data-bind to the `required` attribute.\n    * @param {string=} ngChange Angular expression to be executed when input changes due to user\n    *    interaction with the input element.\n    *\n    * @example\n    <example name=\"week-input-directive\" module=\"weekExample\">\n    <file name=\"index.html\">\n      <script>\n      angular.module('weekExample', [])\n        .controller('DateController', ['$scope', function($scope) {\n          $scope.example = {\n            value: new Date(2013, 0, 3)\n          };\n        }]);\n      </script>\n      <form name=\"myForm\" ng-controller=\"DateController as dateCtrl\">\n        <label>Pick a date between in 2013:\n          <input id=\"exampleInput\" type=\"week\" name=\"input\" ng-model=\"example.value\"\n                 placeholder=\"YYYY-W##\" min=\"2012-W32\"\n                 max=\"2013-W52\" required />\n        </label>\n        <div role=\"alert\">\n          <span class=\"error\" ng-show=\"myForm.input.$error.required\">\n              Required!</span>\n          <span class=\"error\" ng-show=\"myForm.input.$error.week\">\n              Not a valid date!</span>\n        </div>\n        <tt>value = {{example.value | date: \"yyyy-Www\"}}</tt><br/>\n        <tt>myForm.input.$valid = {{myForm.input.$valid}}</tt><br/>\n        <tt>myForm.input.$error = {{myForm.input.$error}}</tt><br/>\n        <tt>myForm.$valid = {{myForm.$valid}}</tt><br/>\n        <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br/>\n      </form>\n    </file>\n    <file name=\"protractor.js\" type=\"protractor\">\n      var value = element(by.binding('example.value | date: \"yyyy-Www\"'));\n      var valid = element(by.binding('myForm.input.$valid'));\n      var input = element(by.model('example.value'));\n\n      // currently protractor/webdriver does not support\n      // sending keys to all known HTML5 input controls\n      // for various browsers (https://github.com/angular/protractor/issues/562).\n      function setInput(val) {\n        // set the value of the element and force validation.\n        var scr = \"var ipt = document.getElementById('exampleInput'); \" +\n        \"ipt.value = '\" + val + \"';\" +\n        \"angular.element(ipt).scope().$apply(function(s) { s.myForm[ipt.name].$setViewValue('\" + val + \"'); });\";\n        browser.executeScript(scr);\n      }\n\n      it('should initialize to model', function() {\n        expect(value.getText()).toContain('2013-W01');\n        expect(valid.getText()).toContain('myForm.input.$valid = true');\n      });\n\n      it('should be invalid if empty', function() {\n        setInput('');\n        expect(value.getText()).toEqual('value =');\n        expect(valid.getText()).toContain('myForm.input.$valid = false');\n      });\n\n      it('should be invalid if over max', function() {\n        setInput('2015-W01');\n        expect(value.getText()).toContain('');\n        expect(valid.getText()).toContain('myForm.input.$valid = false');\n      });\n    </file>\n    </example>\n    */\n  'week': createDateInputType('week', WEEK_REGEXP, weekParser, 'yyyy-Www'),\n\n  /**\n   * @ngdoc input\n   * @name input[month]\n   *\n   * @description\n   * Input with month validation and transformation. In browsers that do not yet support\n   * the HTML5 month input, a text element will be used. In that case, the text must be entered in a valid ISO-8601\n   * month format (yyyy-MM), for example: `2009-01`.\n   *\n   * The model must always be a Date object, otherwise Angular will throw an error.\n   * Invalid `Date` objects (dates whose `getTime()` is `NaN`) will be rendered as an empty string.\n   * If the model is not set to the first of the month, the next view to model update will set it\n   * to the first of the month.\n   *\n   * The timezone to be used to read/write the `Date` instance in the model can be defined using\n   * {@link ng.directive:ngModelOptions ngModelOptions}. By default, this is the timezone of the browser.\n   *\n   * @param {string} ngModel Assignable angular expression to data-bind to.\n   * @param {string=} name Property name of the form under which the control is published.\n   * @param {string=} min Sets the `min` validation error key if the value entered is less than `min`.\n   *   This must be a valid ISO month format (yyyy-MM). You can also use interpolation inside this\n   *   attribute (e.g. `min=\"{{minMonth | date:'yyyy-MM'}}\"`). Note that `min` will also add\n   *   native HTML5 constraint validation.\n   * @param {string=} max Sets the `max` validation error key if the value entered is greater than `max`.\n   *   This must be a valid ISO month format (yyyy-MM). You can also use interpolation inside this\n   *   attribute (e.g. `max=\"{{maxMonth | date:'yyyy-MM'}}\"`). Note that `max` will also add\n   *   native HTML5 constraint validation.\n   * @param {(date|string)=} ngMin Sets the `min` validation constraint to the Date / ISO week string\n   *   the `ngMin` expression evaluates to. Note that it does not set the `min` attribute.\n   * @param {(date|string)=} ngMax Sets the `max` validation constraint to the Date / ISO week string\n   *   the `ngMax` expression evaluates to. Note that it does not set the `max` attribute.\n\n   * @param {string=} required Sets `required` validation error key if the value is not entered.\n   * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to\n   *    the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of\n   *    `required` when you want to data-bind to the `required` attribute.\n   * @param {string=} ngChange Angular expression to be executed when input changes due to user\n   *    interaction with the input element.\n   *\n   * @example\n   <example name=\"month-input-directive\" module=\"monthExample\">\n   <file name=\"index.html\">\n     <script>\n      angular.module('monthExample', [])\n        .controller('DateController', ['$scope', function($scope) {\n          $scope.example = {\n            value: new Date(2013, 9, 1)\n          };\n        }]);\n     </script>\n     <form name=\"myForm\" ng-controller=\"DateController as dateCtrl\">\n       <label for=\"exampleInput\">Pick a month in 2013:</label>\n       <input id=\"exampleInput\" type=\"month\" name=\"input\" ng-model=\"example.value\"\n          placeholder=\"yyyy-MM\" min=\"2013-01\" max=\"2013-12\" required />\n       <div role=\"alert\">\n         <span class=\"error\" ng-show=\"myForm.input.$error.required\">\n            Required!</span>\n         <span class=\"error\" ng-show=\"myForm.input.$error.month\">\n            Not a valid month!</span>\n       </div>\n       <tt>value = {{example.value | date: \"yyyy-MM\"}}</tt><br/>\n       <tt>myForm.input.$valid = {{myForm.input.$valid}}</tt><br/>\n       <tt>myForm.input.$error = {{myForm.input.$error}}</tt><br/>\n       <tt>myForm.$valid = {{myForm.$valid}}</tt><br/>\n       <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br/>\n     </form>\n   </file>\n   <file name=\"protractor.js\" type=\"protractor\">\n      var value = element(by.binding('example.value | date: \"yyyy-MM\"'));\n      var valid = element(by.binding('myForm.input.$valid'));\n      var input = element(by.model('example.value'));\n\n      // currently protractor/webdriver does not support\n      // sending keys to all known HTML5 input controls\n      // for various browsers (https://github.com/angular/protractor/issues/562).\n      function setInput(val) {\n        // set the value of the element and force validation.\n        var scr = \"var ipt = document.getElementById('exampleInput'); \" +\n        \"ipt.value = '\" + val + \"';\" +\n        \"angular.element(ipt).scope().$apply(function(s) { s.myForm[ipt.name].$setViewValue('\" + val + \"'); });\";\n        browser.executeScript(scr);\n      }\n\n      it('should initialize to model', function() {\n        expect(value.getText()).toContain('2013-10');\n        expect(valid.getText()).toContain('myForm.input.$valid = true');\n      });\n\n      it('should be invalid if empty', function() {\n        setInput('');\n        expect(value.getText()).toEqual('value =');\n        expect(valid.getText()).toContain('myForm.input.$valid = false');\n      });\n\n      it('should be invalid if over max', function() {\n        setInput('2015-01');\n        expect(value.getText()).toContain('');\n        expect(valid.getText()).toContain('myForm.input.$valid = false');\n      });\n   </file>\n   </example>\n   */\n  'month': createDateInputType('month', MONTH_REGEXP,\n     createDateParser(MONTH_REGEXP, ['yyyy', 'MM']),\n     'yyyy-MM'),\n\n  /**\n   * @ngdoc input\n   * @name input[number]\n   *\n   * @description\n   * Text input with number validation and transformation. Sets the `number` validation\n   * error if not a valid number.\n   *\n   * <div class=\"alert alert-warning\">\n   * The model must always be of type `number` otherwise Angular will throw an error.\n   * Be aware that a string containing a number is not enough. See the {@link ngModel:numfmt}\n   * error docs for more information and an example of how to convert your model if necessary.\n   * </div>\n   *\n   * ## Issues with HTML5 constraint validation\n   *\n   * In browsers that follow the\n   * [HTML5 specification](https://html.spec.whatwg.org/multipage/forms.html#number-state-%28type=number%29),\n   * `input[number]` does not work as expected with {@link ngModelOptions `ngModelOptions.allowInvalid`}.\n   * If a non-number is entered in the input, the browser will report the value as an empty string,\n   * which means the view / model values in `ngModel` and subsequently the scope value\n   * will also be an empty string.\n   *\n   *\n   * @param {string} ngModel Assignable angular expression to data-bind to.\n   * @param {string=} name Property name of the form under which the control is published.\n   * @param {string=} min Sets the `min` validation error key if the value entered is less than `min`.\n   * @param {string=} max Sets the `max` validation error key if the value entered is greater than `max`.\n   * @param {string=} required Sets `required` validation error key if the value is not entered.\n   * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to\n   *    the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of\n   *    `required` when you want to data-bind to the `required` attribute.\n   * @param {number=} ngMinlength Sets `minlength` validation error key if the value is shorter than\n   *    minlength.\n   * @param {number=} ngMaxlength Sets `maxlength` validation error key if the value is longer than\n   *    maxlength. Setting the attribute to a negative or non-numeric value, allows view values of\n   *    any length.\n   * @param {string=} pattern Similar to `ngPattern` except that the attribute value is the actual string\n   *    that contains the regular expression body that will be converted to a regular expression\n   *    as in the ngPattern directive.\n   * @param {string=} ngPattern Sets `pattern` validation error key if the ngModel {@link ngModel.NgModelController#$viewValue $viewValue}\n   *    does not match a RegExp found by evaluating the Angular expression given in the attribute value.\n   *    If the expression evaluates to a RegExp object, then this is used directly.\n   *    If the expression evaluates to a string, then it will be converted to a RegExp\n   *    after wrapping it in `^` and `$` characters. For instance, `\"abc\"` will be converted to\n   *    `new RegExp('^abc$')`.<br />\n   *    **Note:** Avoid using the `g` flag on the RegExp, as it will cause each successive search to\n   *    start at the index of the last search's match, thus not taking the whole input value into\n   *    account.\n   * @param {string=} ngChange Angular expression to be executed when input changes due to user\n   *    interaction with the input element.\n   *\n   * @example\n      <example name=\"number-input-directive\" module=\"numberExample\">\n        <file name=\"index.html\">\n         <script>\n           angular.module('numberExample', [])\n             .controller('ExampleController', ['$scope', function($scope) {\n               $scope.example = {\n                 value: 12\n               };\n             }]);\n         </script>\n         <form name=\"myForm\" ng-controller=\"ExampleController\">\n           <label>Number:\n             <input type=\"number\" name=\"input\" ng-model=\"example.value\"\n                    min=\"0\" max=\"99\" required>\n          </label>\n           <div role=\"alert\">\n             <span class=\"error\" ng-show=\"myForm.input.$error.required\">\n               Required!</span>\n             <span class=\"error\" ng-show=\"myForm.input.$error.number\">\n               Not valid number!</span>\n           </div>\n           <tt>value = {{example.value}}</tt><br/>\n           <tt>myForm.input.$valid = {{myForm.input.$valid}}</tt><br/>\n           <tt>myForm.input.$error = {{myForm.input.$error}}</tt><br/>\n           <tt>myForm.$valid = {{myForm.$valid}}</tt><br/>\n           <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br/>\n          </form>\n        </file>\n        <file name=\"protractor.js\" type=\"protractor\">\n          var value = element(by.binding('example.value'));\n          var valid = element(by.binding('myForm.input.$valid'));\n          var input = element(by.model('example.value'));\n\n          it('should initialize to model', function() {\n            expect(value.getText()).toContain('12');\n            expect(valid.getText()).toContain('true');\n          });\n\n          it('should be invalid if empty', function() {\n            input.clear();\n            input.sendKeys('');\n            expect(value.getText()).toEqual('value =');\n            expect(valid.getText()).toContain('false');\n          });\n\n          it('should be invalid if over max', function() {\n            input.clear();\n            input.sendKeys('123');\n            expect(value.getText()).toEqual('value =');\n            expect(valid.getText()).toContain('false');\n          });\n        </file>\n      </example>\n   */\n  'number': numberInputType,\n\n\n  /**\n   * @ngdoc input\n   * @name input[url]\n   *\n   * @description\n   * Text input with URL validation. Sets the `url` validation error key if the content is not a\n   * valid URL.\n   *\n   * <div class=\"alert alert-warning\">\n   * **Note:** `input[url]` uses a regex to validate urls that is derived from the regex\n   * used in Chromium. If you need stricter validation, you can use `ng-pattern` or modify\n   * the built-in validators (see the {@link guide/forms Forms guide})\n   * </div>\n   *\n   * @param {string} ngModel Assignable angular expression to data-bind to.\n   * @param {string=} name Property name of the form under which the control is published.\n   * @param {string=} required Sets `required` validation error key if the value is not entered.\n   * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to\n   *    the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of\n   *    `required` when you want to data-bind to the `required` attribute.\n   * @param {number=} ngMinlength Sets `minlength` validation error key if the value is shorter than\n   *    minlength.\n   * @param {number=} ngMaxlength Sets `maxlength` validation error key if the value is longer than\n   *    maxlength. Setting the attribute to a negative or non-numeric value, allows view values of\n   *    any length.\n   * @param {string=} pattern Similar to `ngPattern` except that the attribute value is the actual string\n   *    that contains the regular expression body that will be converted to a regular expression\n   *    as in the ngPattern directive.\n   * @param {string=} ngPattern Sets `pattern` validation error key if the ngModel {@link ngModel.NgModelController#$viewValue $viewValue}\n   *    does not match a RegExp found by evaluating the Angular expression given in the attribute value.\n   *    If the expression evaluates to a RegExp object, then this is used directly.\n   *    If the expression evaluates to a string, then it will be converted to a RegExp\n   *    after wrapping it in `^` and `$` characters. For instance, `\"abc\"` will be converted to\n   *    `new RegExp('^abc$')`.<br />\n   *    **Note:** Avoid using the `g` flag on the RegExp, as it will cause each successive search to\n   *    start at the index of the last search's match, thus not taking the whole input value into\n   *    account.\n   * @param {string=} ngChange Angular expression to be executed when input changes due to user\n   *    interaction with the input element.\n   *\n   * @example\n      <example name=\"url-input-directive\" module=\"urlExample\">\n        <file name=\"index.html\">\n         <script>\n           angular.module('urlExample', [])\n             .controller('ExampleController', ['$scope', function($scope) {\n               $scope.url = {\n                 text: 'http://google.com'\n               };\n             }]);\n         </script>\n         <form name=\"myForm\" ng-controller=\"ExampleController\">\n           <label>URL:\n             <input type=\"url\" name=\"input\" ng-model=\"url.text\" required>\n           <label>\n           <div role=\"alert\">\n             <span class=\"error\" ng-show=\"myForm.input.$error.required\">\n               Required!</span>\n             <span class=\"error\" ng-show=\"myForm.input.$error.url\">\n               Not valid url!</span>\n           </div>\n           <tt>text = {{url.text}}</tt><br/>\n           <tt>myForm.input.$valid = {{myForm.input.$valid}}</tt><br/>\n           <tt>myForm.input.$error = {{myForm.input.$error}}</tt><br/>\n           <tt>myForm.$valid = {{myForm.$valid}}</tt><br/>\n           <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br/>\n           <tt>myForm.$error.url = {{!!myForm.$error.url}}</tt><br/>\n          </form>\n        </file>\n        <file name=\"protractor.js\" type=\"protractor\">\n          var text = element(by.binding('url.text'));\n          var valid = element(by.binding('myForm.input.$valid'));\n          var input = element(by.model('url.text'));\n\n          it('should initialize to model', function() {\n            expect(text.getText()).toContain('http://google.com');\n            expect(valid.getText()).toContain('true');\n          });\n\n          it('should be invalid if empty', function() {\n            input.clear();\n            input.sendKeys('');\n\n            expect(text.getText()).toEqual('text =');\n            expect(valid.getText()).toContain('false');\n          });\n\n          it('should be invalid if not url', function() {\n            input.clear();\n            input.sendKeys('box');\n\n            expect(valid.getText()).toContain('false');\n          });\n        </file>\n      </example>\n   */\n  'url': urlInputType,\n\n\n  /**\n   * @ngdoc input\n   * @name input[email]\n   *\n   * @description\n   * Text input with email validation. Sets the `email` validation error key if not a valid email\n   * address.\n   *\n   * <div class=\"alert alert-warning\">\n   * **Note:** `input[email]` uses a regex to validate email addresses that is derived from the regex\n   * used in Chromium. If you need stricter validation (e.g. requiring a top-level domain), you can\n   * use `ng-pattern` or modify the built-in validators (see the {@link guide/forms Forms guide})\n   * </div>\n   *\n   * @param {string} ngModel Assignable angular expression to data-bind to.\n   * @param {string=} name Property name of the form under which the control is published.\n   * @param {string=} required Sets `required` validation error key if the value is not entered.\n   * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to\n   *    the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of\n   *    `required` when you want to data-bind to the `required` attribute.\n   * @param {number=} ngMinlength Sets `minlength` validation error key if the value is shorter than\n   *    minlength.\n   * @param {number=} ngMaxlength Sets `maxlength` validation error key if the value is longer than\n   *    maxlength. Setting the attribute to a negative or non-numeric value, allows view values of\n   *    any length.\n   * @param {string=} pattern Similar to `ngPattern` except that the attribute value is the actual string\n   *    that contains the regular expression body that will be converted to a regular expression\n   *    as in the ngPattern directive.\n   * @param {string=} ngPattern Sets `pattern` validation error key if the ngModel {@link ngModel.NgModelController#$viewValue $viewValue}\n   *    does not match a RegExp found by evaluating the Angular expression given in the attribute value.\n   *    If the expression evaluates to a RegExp object, then this is used directly.\n   *    If the expression evaluates to a string, then it will be converted to a RegExp\n   *    after wrapping it in `^` and `$` characters. For instance, `\"abc\"` will be converted to\n   *    `new RegExp('^abc$')`.<br />\n   *    **Note:** Avoid using the `g` flag on the RegExp, as it will cause each successive search to\n   *    start at the index of the last search's match, thus not taking the whole input value into\n   *    account.\n   * @param {string=} ngChange Angular expression to be executed when input changes due to user\n   *    interaction with the input element.\n   *\n   * @example\n      <example name=\"email-input-directive\" module=\"emailExample\">\n        <file name=\"index.html\">\n         <script>\n           angular.module('emailExample', [])\n             .controller('ExampleController', ['$scope', function($scope) {\n               $scope.email = {\n                 text: 'me@example.com'\n               };\n             }]);\n         </script>\n           <form name=\"myForm\" ng-controller=\"ExampleController\">\n             <label>Email:\n               <input type=\"email\" name=\"input\" ng-model=\"email.text\" required>\n             </label>\n             <div role=\"alert\">\n               <span class=\"error\" ng-show=\"myForm.input.$error.required\">\n                 Required!</span>\n               <span class=\"error\" ng-show=\"myForm.input.$error.email\">\n                 Not valid email!</span>\n             </div>\n             <tt>text = {{email.text}}</tt><br/>\n             <tt>myForm.input.$valid = {{myForm.input.$valid}}</tt><br/>\n             <tt>myForm.input.$error = {{myForm.input.$error}}</tt><br/>\n             <tt>myForm.$valid = {{myForm.$valid}}</tt><br/>\n             <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br/>\n             <tt>myForm.$error.email = {{!!myForm.$error.email}}</tt><br/>\n           </form>\n         </file>\n        <file name=\"protractor.js\" type=\"protractor\">\n          var text = element(by.binding('email.text'));\n          var valid = element(by.binding('myForm.input.$valid'));\n          var input = element(by.model('email.text'));\n\n          it('should initialize to model', function() {\n            expect(text.getText()).toContain('me@example.com');\n            expect(valid.getText()).toContain('true');\n          });\n\n          it('should be invalid if empty', function() {\n            input.clear();\n            input.sendKeys('');\n            expect(text.getText()).toEqual('text =');\n            expect(valid.getText()).toContain('false');\n          });\n\n          it('should be invalid if not email', function() {\n            input.clear();\n            input.sendKeys('xxx');\n\n            expect(valid.getText()).toContain('false');\n          });\n        </file>\n      </example>\n   */\n  'email': emailInputType,\n\n\n  /**\n   * @ngdoc input\n   * @name input[radio]\n   *\n   * @description\n   * HTML radio button.\n   *\n   * @param {string} ngModel Assignable angular expression to data-bind to.\n   * @param {string} value The value to which the `ngModel` expression should be set when selected.\n   *    Note that `value` only supports `string` values, i.e. the scope model needs to be a string,\n   *    too. Use `ngValue` if you need complex models (`number`, `object`, ...).\n   * @param {string=} name Property name of the form under which the control is published.\n   * @param {string=} ngChange Angular expression to be executed when input changes due to user\n   *    interaction with the input element.\n   * @param {string} ngValue Angular expression to which `ngModel` will be be set when the radio\n   *    is selected. Should be used instead of the `value` attribute if you need\n   *    a non-string `ngModel` (`boolean`, `array`, ...).\n   *\n   * @example\n      <example name=\"radio-input-directive\" module=\"radioExample\">\n        <file name=\"index.html\">\n         <script>\n           angular.module('radioExample', [])\n             .controller('ExampleController', ['$scope', function($scope) {\n               $scope.color = {\n                 name: 'blue'\n               };\n               $scope.specialValue = {\n                 \"id\": \"12345\",\n                 \"value\": \"green\"\n               };\n             }]);\n         </script>\n         <form name=\"myForm\" ng-controller=\"ExampleController\">\n           <label>\n             <input type=\"radio\" ng-model=\"color.name\" value=\"red\">\n             Red\n           </label><br/>\n           <label>\n             <input type=\"radio\" ng-model=\"color.name\" ng-value=\"specialValue\">\n             Green\n           </label><br/>\n           <label>\n             <input type=\"radio\" ng-model=\"color.name\" value=\"blue\">\n             Blue\n           </label><br/>\n           <tt>color = {{color.name | json}}</tt><br/>\n          </form>\n          Note that `ng-value=\"specialValue\"` sets radio item's value to be the value of `$scope.specialValue`.\n        </file>\n        <file name=\"protractor.js\" type=\"protractor\">\n          it('should change state', function() {\n            var color = element(by.binding('color.name'));\n\n            expect(color.getText()).toContain('blue');\n\n            element.all(by.model('color.name')).get(0).click();\n\n            expect(color.getText()).toContain('red');\n          });\n        </file>\n      </example>\n   */\n  'radio': radioInputType,\n\n\n  /**\n   * @ngdoc input\n   * @name input[checkbox]\n   *\n   * @description\n   * HTML checkbox.\n   *\n   * @param {string} ngModel Assignable angular expression to data-bind to.\n   * @param {string=} name Property name of the form under which the control is published.\n   * @param {expression=} ngTrueValue The value to which the expression should be set when selected.\n   * @param {expression=} ngFalseValue The value to which the expression should be set when not selected.\n   * @param {string=} ngChange Angular expression to be executed when input changes due to user\n   *    interaction with the input element.\n   *\n   * @example\n      <example name=\"checkbox-input-directive\" module=\"checkboxExample\">\n        <file name=\"index.html\">\n         <script>\n           angular.module('checkboxExample', [])\n             .controller('ExampleController', ['$scope', function($scope) {\n               $scope.checkboxModel = {\n                value1 : true,\n                value2 : 'YES'\n              };\n             }]);\n         </script>\n         <form name=\"myForm\" ng-controller=\"ExampleController\">\n           <label>Value1:\n             <input type=\"checkbox\" ng-model=\"checkboxModel.value1\">\n           </label><br/>\n           <label>Value2:\n             <input type=\"checkbox\" ng-model=\"checkboxModel.value2\"\n                    ng-true-value=\"'YES'\" ng-false-value=\"'NO'\">\n            </label><br/>\n           <tt>value1 = {{checkboxModel.value1}}</tt><br/>\n           <tt>value2 = {{checkboxModel.value2}}</tt><br/>\n          </form>\n        </file>\n        <file name=\"protractor.js\" type=\"protractor\">\n          it('should change state', function() {\n            var value1 = element(by.binding('checkboxModel.value1'));\n            var value2 = element(by.binding('checkboxModel.value2'));\n\n            expect(value1.getText()).toContain('true');\n            expect(value2.getText()).toContain('YES');\n\n            element(by.model('checkboxModel.value1')).click();\n            element(by.model('checkboxModel.value2')).click();\n\n            expect(value1.getText()).toContain('false');\n            expect(value2.getText()).toContain('NO');\n          });\n        </file>\n      </example>\n   */\n  'checkbox': checkboxInputType,\n\n  'hidden': noop,\n  'button': noop,\n  'submit': noop,\n  'reset': noop,\n  'file': noop\n};\n\nfunction stringBasedInputType(ctrl) {\n  ctrl.$formatters.push(function(value) {\n    return ctrl.$isEmpty(value) ? value : value.toString();\n  });\n}\n\nfunction textInputType(scope, element, attr, ctrl, $sniffer, $browser) {\n  baseInputType(scope, element, attr, ctrl, $sniffer, $browser);\n  stringBasedInputType(ctrl);\n}\n\nfunction baseInputType(scope, element, attr, ctrl, $sniffer, $browser) {\n  var type = lowercase(element[0].type);\n\n  // In composition mode, users are still inputing intermediate text buffer,\n  // hold the listener until composition is done.\n  // More about composition events: https://developer.mozilla.org/en-US/docs/Web/API/CompositionEvent\n  if (!$sniffer.android) {\n    var composing = false;\n\n    element.on('compositionstart', function() {\n      composing = true;\n    });\n\n    element.on('compositionend', function() {\n      composing = false;\n      listener();\n    });\n  }\n\n  var timeout;\n\n  var listener = function(ev) {\n    if (timeout) {\n      $browser.defer.cancel(timeout);\n      timeout = null;\n    }\n    if (composing) return;\n    var value = element.val(),\n        event = ev && ev.type;\n\n    // By default we will trim the value\n    // If the attribute ng-trim exists we will avoid trimming\n    // If input type is 'password', the value is never trimmed\n    if (type !== 'password' && (!attr.ngTrim || attr.ngTrim !== 'false')) {\n      value = trim(value);\n    }\n\n    // If a control is suffering from bad input (due to native validators), browsers discard its\n    // value, so it may be necessary to revalidate (by calling $setViewValue again) even if the\n    // control's value is the same empty value twice in a row.\n    if (ctrl.$viewValue !== value || (value === '' && ctrl.$$hasNativeValidators)) {\n      ctrl.$setViewValue(value, event);\n    }\n  };\n\n  // if the browser does support \"input\" event, we are fine - except on IE9 which doesn't fire the\n  // input event on backspace, delete or cut\n  if ($sniffer.hasEvent('input')) {\n    element.on('input', listener);\n  } else {\n    var deferListener = function(ev, input, origValue) {\n      if (!timeout) {\n        timeout = $browser.defer(function() {\n          timeout = null;\n          if (!input || input.value !== origValue) {\n            listener(ev);\n          }\n        });\n      }\n    };\n\n    element.on('keydown', function(event) {\n      var key = event.keyCode;\n\n      // ignore\n      //    command            modifiers                   arrows\n      if (key === 91 || (15 < key && key < 19) || (37 <= key && key <= 40)) return;\n\n      deferListener(event, this, this.value);\n    });\n\n    // if user modifies input value using context menu in IE, we need \"paste\" and \"cut\" events to catch it\n    if ($sniffer.hasEvent('paste')) {\n      element.on('paste cut', deferListener);\n    }\n  }\n\n  // if user paste into input using mouse on older browser\n  // or form autocomplete on newer browser, we need \"change\" event to catch it\n  element.on('change', listener);\n\n  // Some native input types (date-family) have the ability to change validity without\n  // firing any input/change events.\n  // For these event types, when native validators are present and the browser supports the type,\n  // check for validity changes on various DOM events.\n  if (PARTIAL_VALIDATION_TYPES[type] && ctrl.$$hasNativeValidators && type === attr.type) {\n    element.on(PARTIAL_VALIDATION_EVENTS, function(ev) {\n      if (!timeout) {\n        var validity = this[VALIDITY_STATE_PROPERTY];\n        var origBadInput = validity.badInput;\n        var origTypeMismatch = validity.typeMismatch;\n        timeout = $browser.defer(function() {\n          timeout = null;\n          if (validity.badInput !== origBadInput || validity.typeMismatch !== origTypeMismatch) {\n            listener(ev);\n          }\n        });\n      }\n    });\n  }\n\n  ctrl.$render = function() {\n    // Workaround for Firefox validation #12102.\n    var value = ctrl.$isEmpty(ctrl.$viewValue) ? '' : ctrl.$viewValue;\n    if (element.val() !== value) {\n      element.val(value);\n    }\n  };\n}\n\nfunction weekParser(isoWeek, existingDate) {\n  if (isDate(isoWeek)) {\n    return isoWeek;\n  }\n\n  if (isString(isoWeek)) {\n    WEEK_REGEXP.lastIndex = 0;\n    var parts = WEEK_REGEXP.exec(isoWeek);\n    if (parts) {\n      var year = +parts[1],\n          week = +parts[2],\n          hours = 0,\n          minutes = 0,\n          seconds = 0,\n          milliseconds = 0,\n          firstThurs = getFirstThursdayOfYear(year),\n          addDays = (week - 1) * 7;\n\n      if (existingDate) {\n        hours = existingDate.getHours();\n        minutes = existingDate.getMinutes();\n        seconds = existingDate.getSeconds();\n        milliseconds = existingDate.getMilliseconds();\n      }\n\n      return new Date(year, 0, firstThurs.getDate() + addDays, hours, minutes, seconds, milliseconds);\n    }\n  }\n\n  return NaN;\n}\n\nfunction createDateParser(regexp, mapping) {\n  return function(iso, date) {\n    var parts, map;\n\n    if (isDate(iso)) {\n      return iso;\n    }\n\n    if (isString(iso)) {\n      // When a date is JSON'ified to wraps itself inside of an extra\n      // set of double quotes. This makes the date parsing code unable\n      // to match the date string and parse it as a date.\n      if (iso.charAt(0) == '\"' && iso.charAt(iso.length - 1) == '\"') {\n        iso = iso.substring(1, iso.length - 1);\n      }\n      if (ISO_DATE_REGEXP.test(iso)) {\n        return new Date(iso);\n      }\n      regexp.lastIndex = 0;\n      parts = regexp.exec(iso);\n\n      if (parts) {\n        parts.shift();\n        if (date) {\n          map = {\n            yyyy: date.getFullYear(),\n            MM: date.getMonth() + 1,\n            dd: date.getDate(),\n            HH: date.getHours(),\n            mm: date.getMinutes(),\n            ss: date.getSeconds(),\n            sss: date.getMilliseconds() / 1000\n          };\n        } else {\n          map = { yyyy: 1970, MM: 1, dd: 1, HH: 0, mm: 0, ss: 0, sss: 0 };\n        }\n\n        forEach(parts, function(part, index) {\n          if (index < mapping.length) {\n            map[mapping[index]] = +part;\n          }\n        });\n        return new Date(map.yyyy, map.MM - 1, map.dd, map.HH, map.mm, map.ss || 0, map.sss * 1000 || 0);\n      }\n    }\n\n    return NaN;\n  };\n}\n\nfunction createDateInputType(type, regexp, parseDate, format) {\n  return function dynamicDateInputType(scope, element, attr, ctrl, $sniffer, $browser, $filter) {\n    badInputChecker(scope, element, attr, ctrl);\n    baseInputType(scope, element, attr, ctrl, $sniffer, $browser);\n    var timezone = ctrl && ctrl.$options && ctrl.$options.timezone;\n    var previousDate;\n\n    ctrl.$$parserName = type;\n    ctrl.$parsers.push(function(value) {\n      if (ctrl.$isEmpty(value)) return null;\n      if (regexp.test(value)) {\n        // Note: We cannot read ctrl.$modelValue, as there might be a different\n        // parser/formatter in the processing chain so that the model\n        // contains some different data format!\n        var parsedDate = parseDate(value, previousDate);\n        if (timezone) {\n          parsedDate = convertTimezoneToLocal(parsedDate, timezone);\n        }\n        return parsedDate;\n      }\n      return undefined;\n    });\n\n    ctrl.$formatters.push(function(value) {\n      if (value && !isDate(value)) {\n        throw ngModelMinErr('datefmt', 'Expected `{0}` to be a date', value);\n      }\n      if (isValidDate(value)) {\n        previousDate = value;\n        if (previousDate && timezone) {\n          previousDate = convertTimezoneToLocal(previousDate, timezone, true);\n        }\n        return $filter('date')(value, format, timezone);\n      } else {\n        previousDate = null;\n        return '';\n      }\n    });\n\n    if (isDefined(attr.min) || attr.ngMin) {\n      var minVal;\n      ctrl.$validators.min = function(value) {\n        return !isValidDate(value) || isUndefined(minVal) || parseDate(value) >= minVal;\n      };\n      attr.$observe('min', function(val) {\n        minVal = parseObservedDateValue(val);\n        ctrl.$validate();\n      });\n    }\n\n    if (isDefined(attr.max) || attr.ngMax) {\n      var maxVal;\n      ctrl.$validators.max = function(value) {\n        return !isValidDate(value) || isUndefined(maxVal) || parseDate(value) <= maxVal;\n      };\n      attr.$observe('max', function(val) {\n        maxVal = parseObservedDateValue(val);\n        ctrl.$validate();\n      });\n    }\n\n    function isValidDate(value) {\n      // Invalid Date: getTime() returns NaN\n      return value && !(value.getTime && value.getTime() !== value.getTime());\n    }\n\n    function parseObservedDateValue(val) {\n      return isDefined(val) && !isDate(val) ? parseDate(val) || undefined : val;\n    }\n  };\n}\n\nfunction badInputChecker(scope, element, attr, ctrl) {\n  var node = element[0];\n  var nativeValidation = ctrl.$$hasNativeValidators = isObject(node.validity);\n  if (nativeValidation) {\n    ctrl.$parsers.push(function(value) {\n      var validity = element.prop(VALIDITY_STATE_PROPERTY) || {};\n      return validity.badInput || validity.typeMismatch ? undefined : value;\n    });\n  }\n}\n\nfunction numberInputType(scope, element, attr, ctrl, $sniffer, $browser) {\n  badInputChecker(scope, element, attr, ctrl);\n  baseInputType(scope, element, attr, ctrl, $sniffer, $browser);\n\n  ctrl.$$parserName = 'number';\n  ctrl.$parsers.push(function(value) {\n    if (ctrl.$isEmpty(value))      return null;\n    if (NUMBER_REGEXP.test(value)) return parseFloat(value);\n    return undefined;\n  });\n\n  ctrl.$formatters.push(function(value) {\n    if (!ctrl.$isEmpty(value)) {\n      if (!isNumber(value)) {\n        throw ngModelMinErr('numfmt', 'Expected `{0}` to be a number', value);\n      }\n      value = value.toString();\n    }\n    return value;\n  });\n\n  if (isDefined(attr.min) || attr.ngMin) {\n    var minVal;\n    ctrl.$validators.min = function(value) {\n      return ctrl.$isEmpty(value) || isUndefined(minVal) || value >= minVal;\n    };\n\n    attr.$observe('min', function(val) {\n      if (isDefined(val) && !isNumber(val)) {\n        val = parseFloat(val);\n      }\n      minVal = isNumber(val) && !isNaN(val) ? val : undefined;\n      // TODO(matsko): implement validateLater to reduce number of validations\n      ctrl.$validate();\n    });\n  }\n\n  if (isDefined(attr.max) || attr.ngMax) {\n    var maxVal;\n    ctrl.$validators.max = function(value) {\n      return ctrl.$isEmpty(value) || isUndefined(maxVal) || value <= maxVal;\n    };\n\n    attr.$observe('max', function(val) {\n      if (isDefined(val) && !isNumber(val)) {\n        val = parseFloat(val);\n      }\n      maxVal = isNumber(val) && !isNaN(val) ? val : undefined;\n      // TODO(matsko): implement validateLater to reduce number of validations\n      ctrl.$validate();\n    });\n  }\n}\n\nfunction urlInputType(scope, element, attr, ctrl, $sniffer, $browser) {\n  // Note: no badInputChecker here by purpose as `url` is only a validation\n  // in browsers, i.e. we can always read out input.value even if it is not valid!\n  baseInputType(scope, element, attr, ctrl, $sniffer, $browser);\n  stringBasedInputType(ctrl);\n\n  ctrl.$$parserName = 'url';\n  ctrl.$validators.url = function(modelValue, viewValue) {\n    var value = modelValue || viewValue;\n    return ctrl.$isEmpty(value) || URL_REGEXP.test(value);\n  };\n}\n\nfunction emailInputType(scope, element, attr, ctrl, $sniffer, $browser) {\n  // Note: no badInputChecker here by purpose as `url` is only a validation\n  // in browsers, i.e. we can always read out input.value even if it is not valid!\n  baseInputType(scope, element, attr, ctrl, $sniffer, $browser);\n  stringBasedInputType(ctrl);\n\n  ctrl.$$parserName = 'email';\n  ctrl.$validators.email = function(modelValue, viewValue) {\n    var value = modelValue || viewValue;\n    return ctrl.$isEmpty(value) || EMAIL_REGEXP.test(value);\n  };\n}\n\nfunction radioInputType(scope, element, attr, ctrl) {\n  // make the name unique, if not defined\n  if (isUndefined(attr.name)) {\n    element.attr('name', nextUid());\n  }\n\n  var listener = function(ev) {\n    if (element[0].checked) {\n      ctrl.$setViewValue(attr.value, ev && ev.type);\n    }\n  };\n\n  element.on('click', listener);\n\n  ctrl.$render = function() {\n    var value = attr.value;\n    element[0].checked = (value == ctrl.$viewValue);\n  };\n\n  attr.$observe('value', ctrl.$render);\n}\n\nfunction parseConstantExpr($parse, context, name, expression, fallback) {\n  var parseFn;\n  if (isDefined(expression)) {\n    parseFn = $parse(expression);\n    if (!parseFn.constant) {\n      throw ngModelMinErr('constexpr', 'Expected constant expression for `{0}`, but saw ' +\n                                   '`{1}`.', name, expression);\n    }\n    return parseFn(context);\n  }\n  return fallback;\n}\n\nfunction checkboxInputType(scope, element, attr, ctrl, $sniffer, $browser, $filter, $parse) {\n  var trueValue = parseConstantExpr($parse, scope, 'ngTrueValue', attr.ngTrueValue, true);\n  var falseValue = parseConstantExpr($parse, scope, 'ngFalseValue', attr.ngFalseValue, false);\n\n  var listener = function(ev) {\n    ctrl.$setViewValue(element[0].checked, ev && ev.type);\n  };\n\n  element.on('click', listener);\n\n  ctrl.$render = function() {\n    element[0].checked = ctrl.$viewValue;\n  };\n\n  // Override the standard `$isEmpty` because the $viewValue of an empty checkbox is always set to `false`\n  // This is because of the parser below, which compares the `$modelValue` with `trueValue` to convert\n  // it to a boolean.\n  ctrl.$isEmpty = function(value) {\n    return value === false;\n  };\n\n  ctrl.$formatters.push(function(value) {\n    return equals(value, trueValue);\n  });\n\n  ctrl.$parsers.push(function(value) {\n    return value ? trueValue : falseValue;\n  });\n}\n\n\n/**\n * @ngdoc directive\n * @name textarea\n * @restrict E\n *\n * @description\n * HTML textarea element control with angular data-binding. The data-binding and validation\n * properties of this element are exactly the same as those of the\n * {@link ng.directive:input input element}.\n *\n * @param {string} ngModel Assignable angular expression to data-bind to.\n * @param {string=} name Property name of the form under which the control is published.\n * @param {string=} required Sets `required` validation error key if the value is not entered.\n * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to\n *    the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of\n *    `required` when you want to data-bind to the `required` attribute.\n * @param {number=} ngMinlength Sets `minlength` validation error key if the value is shorter than\n *    minlength.\n * @param {number=} ngMaxlength Sets `maxlength` validation error key if the value is longer than\n *    maxlength. Setting the attribute to a negative or non-numeric value, allows view values of any\n *    length.\n * @param {string=} ngPattern Sets `pattern` validation error key if the ngModel {@link ngModel.NgModelController#$viewValue $viewValue}\n *    does not match a RegExp found by evaluating the Angular expression given in the attribute value.\n *    If the expression evaluates to a RegExp object, then this is used directly.\n *    If the expression evaluates to a string, then it will be converted to a RegExp\n *    after wrapping it in `^` and `$` characters. For instance, `\"abc\"` will be converted to\n *    `new RegExp('^abc$')`.<br />\n *    **Note:** Avoid using the `g` flag on the RegExp, as it will cause each successive search to\n *    start at the index of the last search's match, thus not taking the whole input value into\n *    account.\n * @param {string=} ngChange Angular expression to be executed when input changes due to user\n *    interaction with the input element.\n * @param {boolean=} [ngTrim=true] If set to false Angular will not automatically trim the input.\n */\n\n\n/**\n * @ngdoc directive\n * @name input\n * @restrict E\n *\n * @description\n * HTML input element control. When used together with {@link ngModel `ngModel`}, it provides data-binding,\n * input state control, and validation.\n * Input control follows HTML5 input types and polyfills the HTML5 validation behavior for older browsers.\n *\n * <div class=\"alert alert-warning\">\n * **Note:** Not every feature offered is available for all input types.\n * Specifically, data binding and event handling via `ng-model` is unsupported for `input[file]`.\n * </div>\n *\n * @param {string} ngModel Assignable angular expression to data-bind to.\n * @param {string=} name Property name of the form under which the control is published.\n * @param {string=} required Sets `required` validation error key if the value is not entered.\n * @param {boolean=} ngRequired Sets `required` attribute if set to true\n * @param {number=} ngMinlength Sets `minlength` validation error key if the value is shorter than\n *    minlength.\n * @param {number=} ngMaxlength Sets `maxlength` validation error key if the value is longer than\n *    maxlength. Setting the attribute to a negative or non-numeric value, allows view values of any\n *    length.\n * @param {string=} ngPattern Sets `pattern` validation error key if the ngModel {@link ngModel.NgModelController#$viewValue $viewValue}\n *    value does not match a RegExp found by evaluating the Angular expression given in the attribute value.\n *    If the expression evaluates to a RegExp object, then this is used directly.\n *    If the expression evaluates to a string, then it will be converted to a RegExp\n *    after wrapping it in `^` and `$` characters. For instance, `\"abc\"` will be converted to\n *    `new RegExp('^abc$')`.<br />\n *    **Note:** Avoid using the `g` flag on the RegExp, as it will cause each successive search to\n *    start at the index of the last search's match, thus not taking the whole input value into\n *    account.\n * @param {string=} ngChange Angular expression to be executed when input changes due to user\n *    interaction with the input element.\n * @param {boolean=} [ngTrim=true] If set to false Angular will not automatically trim the input.\n *    This parameter is ignored for input[type=password] controls, which will never trim the\n *    input.\n *\n * @example\n    <example name=\"input-directive\" module=\"inputExample\">\n      <file name=\"index.html\">\n       <script>\n          angular.module('inputExample', [])\n            .controller('ExampleController', ['$scope', function($scope) {\n              $scope.user = {name: 'guest', last: 'visitor'};\n            }]);\n       </script>\n       <div ng-controller=\"ExampleController\">\n         <form name=\"myForm\">\n           <label>\n              User name:\n              <input type=\"text\" name=\"userName\" ng-model=\"user.name\" required>\n           </label>\n           <div role=\"alert\">\n             <span class=\"error\" ng-show=\"myForm.userName.$error.required\">\n              Required!</span>\n           </div>\n           <label>\n              Last name:\n              <input type=\"text\" name=\"lastName\" ng-model=\"user.last\"\n              ng-minlength=\"3\" ng-maxlength=\"10\">\n           </label>\n           <div role=\"alert\">\n             <span class=\"error\" ng-show=\"myForm.lastName.$error.minlength\">\n               Too short!</span>\n             <span class=\"error\" ng-show=\"myForm.lastName.$error.maxlength\">\n               Too long!</span>\n           </div>\n         </form>\n         <hr>\n         <tt>user = {{user}}</tt><br/>\n         <tt>myForm.userName.$valid = {{myForm.userName.$valid}}</tt><br/>\n         <tt>myForm.userName.$error = {{myForm.userName.$error}}</tt><br/>\n         <tt>myForm.lastName.$valid = {{myForm.lastName.$valid}}</tt><br/>\n         <tt>myForm.lastName.$error = {{myForm.lastName.$error}}</tt><br/>\n         <tt>myForm.$valid = {{myForm.$valid}}</tt><br/>\n         <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br/>\n         <tt>myForm.$error.minlength = {{!!myForm.$error.minlength}}</tt><br/>\n         <tt>myForm.$error.maxlength = {{!!myForm.$error.maxlength}}</tt><br/>\n       </div>\n      </file>\n      <file name=\"protractor.js\" type=\"protractor\">\n        var user = element(by.exactBinding('user'));\n        var userNameValid = element(by.binding('myForm.userName.$valid'));\n        var lastNameValid = element(by.binding('myForm.lastName.$valid'));\n        var lastNameError = element(by.binding('myForm.lastName.$error'));\n        var formValid = element(by.binding('myForm.$valid'));\n        var userNameInput = element(by.model('user.name'));\n        var userLastInput = element(by.model('user.last'));\n\n        it('should initialize to model', function() {\n          expect(user.getText()).toContain('{\"name\":\"guest\",\"last\":\"visitor\"}');\n          expect(userNameValid.getText()).toContain('true');\n          expect(formValid.getText()).toContain('true');\n        });\n\n        it('should be invalid if empty when required', function() {\n          userNameInput.clear();\n          userNameInput.sendKeys('');\n\n          expect(user.getText()).toContain('{\"last\":\"visitor\"}');\n          expect(userNameValid.getText()).toContain('false');\n          expect(formValid.getText()).toContain('false');\n        });\n\n        it('should be valid if empty when min length is set', function() {\n          userLastInput.clear();\n          userLastInput.sendKeys('');\n\n          expect(user.getText()).toContain('{\"name\":\"guest\",\"last\":\"\"}');\n          expect(lastNameValid.getText()).toContain('true');\n          expect(formValid.getText()).toContain('true');\n        });\n\n        it('should be invalid if less than required min length', function() {\n          userLastInput.clear();\n          userLastInput.sendKeys('xx');\n\n          expect(user.getText()).toContain('{\"name\":\"guest\"}');\n          expect(lastNameValid.getText()).toContain('false');\n          expect(lastNameError.getText()).toContain('minlength');\n          expect(formValid.getText()).toContain('false');\n        });\n\n        it('should be invalid if longer than max length', function() {\n          userLastInput.clear();\n          userLastInput.sendKeys('some ridiculously long name');\n\n          expect(user.getText()).toContain('{\"name\":\"guest\"}');\n          expect(lastNameValid.getText()).toContain('false');\n          expect(lastNameError.getText()).toContain('maxlength');\n          expect(formValid.getText()).toContain('false');\n        });\n      </file>\n    </example>\n */\nvar inputDirective = ['$browser', '$sniffer', '$filter', '$parse',\n    function($browser, $sniffer, $filter, $parse) {\n  return {\n    restrict: 'E',\n    require: ['?ngModel'],\n    link: {\n      pre: function(scope, element, attr, ctrls) {\n        if (ctrls[0]) {\n          (inputType[lowercase(attr.type)] || inputType.text)(scope, element, attr, ctrls[0], $sniffer,\n                                                              $browser, $filter, $parse);\n        }\n      }\n    }\n  };\n}];\n\n\n\nvar CONSTANT_VALUE_REGEXP = /^(true|false|\\d+)$/;\n/**\n * @ngdoc directive\n * @name ngValue\n *\n * @description\n * Binds the given expression to the value of `<option>` or {@link input[radio] `input[radio]`},\n * so that when the element is selected, the {@link ngModel `ngModel`} of that element is set to\n * the bound value.\n *\n * `ngValue` is useful when dynamically generating lists of radio buttons using\n * {@link ngRepeat `ngRepeat`}, as shown below.\n *\n * Likewise, `ngValue` can be used to generate `<option>` elements for\n * the {@link select `select`} element. In that case however, only strings are supported\n * for the `value `attribute, so the resulting `ngModel` will always be a string.\n * Support for `select` models with non-string values is available via `ngOptions`.\n *\n * @element input\n * @param {string=} ngValue angular expression, whose value will be bound to the `value` attribute\n *   of the `input` element\n *\n * @example\n    <example name=\"ngValue-directive\" module=\"valueExample\">\n      <file name=\"index.html\">\n       <script>\n          angular.module('valueExample', [])\n            .controller('ExampleController', ['$scope', function($scope) {\n              $scope.names = ['pizza', 'unicorns', 'robots'];\n              $scope.my = { favorite: 'unicorns' };\n            }]);\n       </script>\n        <form ng-controller=\"ExampleController\">\n          <h2>Which is your favorite?</h2>\n            <label ng-repeat=\"name in names\" for=\"{{name}}\">\n              {{name}}\n              <input type=\"radio\"\n                     ng-model=\"my.favorite\"\n                     ng-value=\"name\"\n                     id=\"{{name}}\"\n                     name=\"favorite\">\n            </label>\n          <div>You chose {{my.favorite}}</div>\n        </form>\n      </file>\n      <file name=\"protractor.js\" type=\"protractor\">\n        var favorite = element(by.binding('my.favorite'));\n\n        it('should initialize to model', function() {\n          expect(favorite.getText()).toContain('unicorns');\n        });\n        it('should bind the values to the inputs', function() {\n          element.all(by.model('my.favorite')).get(0).click();\n          expect(favorite.getText()).toContain('pizza');\n        });\n      </file>\n    </example>\n */\nvar ngValueDirective = function() {\n  return {\n    restrict: 'A',\n    priority: 100,\n    compile: function(tpl, tplAttr) {\n      if (CONSTANT_VALUE_REGEXP.test(tplAttr.ngValue)) {\n        return function ngValueConstantLink(scope, elm, attr) {\n          attr.$set('value', scope.$eval(attr.ngValue));\n        };\n      } else {\n        return function ngValueLink(scope, elm, attr) {\n          scope.$watch(attr.ngValue, function valueWatchAction(value) {\n            attr.$set('value', value);\n          });\n        };\n      }\n    }\n  };\n};\n\n/**\n * @ngdoc directive\n * @name ngBind\n * @restrict AC\n *\n * @description\n * The `ngBind` attribute tells Angular to replace the text content of the specified HTML element\n * with the value of a given expression, and to update the text content when the value of that\n * expression changes.\n *\n * Typically, you don't use `ngBind` directly, but instead you use the double curly markup like\n * `{{ expression }}` which is similar but less verbose.\n *\n * It is preferable to use `ngBind` instead of `{{ expression }}` if a template is momentarily\n * displayed by the browser in its raw state before Angular compiles it. Since `ngBind` is an\n * element attribute, it makes the bindings invisible to the user while the page is loading.\n *\n * An alternative solution to this problem would be using the\n * {@link ng.directive:ngCloak ngCloak} directive.\n *\n *\n * @element ANY\n * @param {expression} ngBind {@link guide/expression Expression} to evaluate.\n *\n * @example\n * Enter a name in the Live Preview text box; the greeting below the text box changes instantly.\n   <example module=\"bindExample\">\n     <file name=\"index.html\">\n       <script>\n         angular.module('bindExample', [])\n           .controller('ExampleController', ['$scope', function($scope) {\n             $scope.name = 'Whirled';\n           }]);\n       </script>\n       <div ng-controller=\"ExampleController\">\n         <label>Enter name: <input type=\"text\" ng-model=\"name\"></label><br>\n         Hello <span ng-bind=\"name\"></span>!\n       </div>\n     </file>\n     <file name=\"protractor.js\" type=\"protractor\">\n       it('should check ng-bind', function() {\n         var nameInput = element(by.model('name'));\n\n         expect(element(by.binding('name')).getText()).toBe('Whirled');\n         nameInput.clear();\n         nameInput.sendKeys('world');\n         expect(element(by.binding('name')).getText()).toBe('world');\n       });\n     </file>\n   </example>\n */\nvar ngBindDirective = ['$compile', function($compile) {\n  return {\n    restrict: 'AC',\n    compile: function ngBindCompile(templateElement) {\n      $compile.$$addBindingClass(templateElement);\n      return function ngBindLink(scope, element, attr) {\n        $compile.$$addBindingInfo(element, attr.ngBind);\n        element = element[0];\n        scope.$watch(attr.ngBind, function ngBindWatchAction(value) {\n          element.textContent = isUndefined(value) ? '' : value;\n        });\n      };\n    }\n  };\n}];\n\n\n/**\n * @ngdoc directive\n * @name ngBindTemplate\n *\n * @description\n * The `ngBindTemplate` directive specifies that the element\n * text content should be replaced with the interpolation of the template\n * in the `ngBindTemplate` attribute.\n * Unlike `ngBind`, the `ngBindTemplate` can contain multiple `{{` `}}`\n * expressions. This directive is needed since some HTML elements\n * (such as TITLE and OPTION) cannot contain SPAN elements.\n *\n * @element ANY\n * @param {string} ngBindTemplate template of form\n *   <tt>{{</tt> <tt>expression</tt> <tt>}}</tt> to eval.\n *\n * @example\n * Try it here: enter text in text box and watch the greeting change.\n   <example module=\"bindExample\">\n     <file name=\"index.html\">\n       <script>\n         angular.module('bindExample', [])\n           .controller('ExampleController', ['$scope', function($scope) {\n             $scope.salutation = 'Hello';\n             $scope.name = 'World';\n           }]);\n       </script>\n       <div ng-controller=\"ExampleController\">\n        <label>Salutation: <input type=\"text\" ng-model=\"salutation\"></label><br>\n        <label>Name: <input type=\"text\" ng-model=\"name\"></label><br>\n        <pre ng-bind-template=\"{{salutation}} {{name}}!\"></pre>\n       </div>\n     </file>\n     <file name=\"protractor.js\" type=\"protractor\">\n       it('should check ng-bind', function() {\n         var salutationElem = element(by.binding('salutation'));\n         var salutationInput = element(by.model('salutation'));\n         var nameInput = element(by.model('name'));\n\n         expect(salutationElem.getText()).toBe('Hello World!');\n\n         salutationInput.clear();\n         salutationInput.sendKeys('Greetings');\n         nameInput.clear();\n         nameInput.sendKeys('user');\n\n         expect(salutationElem.getText()).toBe('Greetings user!');\n       });\n     </file>\n   </example>\n */\nvar ngBindTemplateDirective = ['$interpolate', '$compile', function($interpolate, $compile) {\n  return {\n    compile: function ngBindTemplateCompile(templateElement) {\n      $compile.$$addBindingClass(templateElement);\n      return function ngBindTemplateLink(scope, element, attr) {\n        var interpolateFn = $interpolate(element.attr(attr.$attr.ngBindTemplate));\n        $compile.$$addBindingInfo(element, interpolateFn.expressions);\n        element = element[0];\n        attr.$observe('ngBindTemplate', function(value) {\n          element.textContent = isUndefined(value) ? '' : value;\n        });\n      };\n    }\n  };\n}];\n\n\n/**\n * @ngdoc directive\n * @name ngBindHtml\n *\n * @description\n * Evaluates the expression and inserts the resulting HTML into the element in a secure way. By default,\n * the resulting HTML content will be sanitized using the {@link ngSanitize.$sanitize $sanitize} service.\n * To utilize this functionality, ensure that `$sanitize` is available, for example, by including {@link\n * ngSanitize} in your module's dependencies (not in core Angular). In order to use {@link ngSanitize}\n * in your module's dependencies, you need to include \"angular-sanitize.js\" in your application.\n *\n * You may also bypass sanitization for values you know are safe. To do so, bind to\n * an explicitly trusted value via {@link ng.$sce#trustAsHtml $sce.trustAsHtml}.  See the example\n * under {@link ng.$sce#show-me-an-example-using-sce- Strict Contextual Escaping (SCE)}.\n *\n * Note: If a `$sanitize` service is unavailable and the bound value isn't explicitly trusted, you\n * will have an exception (instead of an exploit.)\n *\n * @element ANY\n * @param {expression} ngBindHtml {@link guide/expression Expression} to evaluate.\n *\n * @example\n\n   <example module=\"bindHtmlExample\" deps=\"angular-sanitize.js\">\n     <file name=\"index.html\">\n       <div ng-controller=\"ExampleController\">\n        <p ng-bind-html=\"myHTML\"></p>\n       </div>\n     </file>\n\n     <file name=\"script.js\">\n       angular.module('bindHtmlExample', ['ngSanitize'])\n         .controller('ExampleController', ['$scope', function($scope) {\n           $scope.myHTML =\n              'I am an <code>HTML</code>string with ' +\n              '<a href=\"#\">links!</a> and other <em>stuff</em>';\n         }]);\n     </file>\n\n     <file name=\"protractor.js\" type=\"protractor\">\n       it('should check ng-bind-html', function() {\n         expect(element(by.binding('myHTML')).getText()).toBe(\n             'I am an HTMLstring with links! and other stuff');\n       });\n     </file>\n   </example>\n */\nvar ngBindHtmlDirective = ['$sce', '$parse', '$compile', function($sce, $parse, $compile) {\n  return {\n    restrict: 'A',\n    compile: function ngBindHtmlCompile(tElement, tAttrs) {\n      var ngBindHtmlGetter = $parse(tAttrs.ngBindHtml);\n      var ngBindHtmlWatch = $parse(tAttrs.ngBindHtml, function sceValueOf(val) {\n        // Unwrap the value to compare the actual inner safe value, not the wrapper object.\n        return $sce.valueOf(val);\n      });\n      $compile.$$addBindingClass(tElement);\n\n      return function ngBindHtmlLink(scope, element, attr) {\n        $compile.$$addBindingInfo(element, attr.ngBindHtml);\n\n        scope.$watch(ngBindHtmlWatch, function ngBindHtmlWatchAction() {\n          // The watched value is the unwrapped value. To avoid re-escaping, use the direct getter.\n          var value = ngBindHtmlGetter(scope);\n          element.html($sce.getTrustedHtml(value) || '');\n        });\n      };\n    }\n  };\n}];\n\n/**\n * @ngdoc directive\n * @name ngChange\n *\n * @description\n * Evaluate the given expression when the user changes the input.\n * The expression is evaluated immediately, unlike the JavaScript onchange event\n * which only triggers at the end of a change (usually, when the user leaves the\n * form element or presses the return key).\n *\n * The `ngChange` expression is only evaluated when a change in the input value causes\n * a new value to be committed to the model.\n *\n * It will not be evaluated:\n * * if the value returned from the `$parsers` transformation pipeline has not changed\n * * if the input has continued to be invalid since the model will stay `null`\n * * if the model is changed programmatically and not by a change to the input value\n *\n *\n * Note, this directive requires `ngModel` to be present.\n *\n * @element input\n * @param {expression} ngChange {@link guide/expression Expression} to evaluate upon change\n * in input value.\n *\n * @example\n * <example name=\"ngChange-directive\" module=\"changeExample\">\n *   <file name=\"index.html\">\n *     <script>\n *       angular.module('changeExample', [])\n *         .controller('ExampleController', ['$scope', function($scope) {\n *           $scope.counter = 0;\n *           $scope.change = function() {\n *             $scope.counter++;\n *           };\n *         }]);\n *     </script>\n *     <div ng-controller=\"ExampleController\">\n *       <input type=\"checkbox\" ng-model=\"confirmed\" ng-change=\"change()\" id=\"ng-change-example1\" />\n *       <input type=\"checkbox\" ng-model=\"confirmed\" id=\"ng-change-example2\" />\n *       <label for=\"ng-change-example2\">Confirmed</label><br />\n *       <tt>debug = {{confirmed}}</tt><br/>\n *       <tt>counter = {{counter}}</tt><br/>\n *     </div>\n *   </file>\n *   <file name=\"protractor.js\" type=\"protractor\">\n *     var counter = element(by.binding('counter'));\n *     var debug = element(by.binding('confirmed'));\n *\n *     it('should evaluate the expression if changing from view', function() {\n *       expect(counter.getText()).toContain('0');\n *\n *       element(by.id('ng-change-example1')).click();\n *\n *       expect(counter.getText()).toContain('1');\n *       expect(debug.getText()).toContain('true');\n *     });\n *\n *     it('should not evaluate the expression if changing from model', function() {\n *       element(by.id('ng-change-example2')).click();\n\n *       expect(counter.getText()).toContain('0');\n *       expect(debug.getText()).toContain('true');\n *     });\n *   </file>\n * </example>\n */\nvar ngChangeDirective = valueFn({\n  restrict: 'A',\n  require: 'ngModel',\n  link: function(scope, element, attr, ctrl) {\n    ctrl.$viewChangeListeners.push(function() {\n      scope.$eval(attr.ngChange);\n    });\n  }\n});\n\nfunction classDirective(name, selector) {\n  name = 'ngClass' + name;\n  return ['$animate', function($animate) {\n    return {\n      restrict: 'AC',\n      link: function(scope, element, attr) {\n        var oldVal;\n\n        scope.$watch(attr[name], ngClassWatchAction, true);\n\n        attr.$observe('class', function(value) {\n          ngClassWatchAction(scope.$eval(attr[name]));\n        });\n\n\n        if (name !== 'ngClass') {\n          scope.$watch('$index', function($index, old$index) {\n            // jshint bitwise: false\n            var mod = $index & 1;\n            if (mod !== (old$index & 1)) {\n              var classes = arrayClasses(scope.$eval(attr[name]));\n              mod === selector ?\n                addClasses(classes) :\n                removeClasses(classes);\n            }\n          });\n        }\n\n        function addClasses(classes) {\n          var newClasses = digestClassCounts(classes, 1);\n          attr.$addClass(newClasses);\n        }\n\n        function removeClasses(classes) {\n          var newClasses = digestClassCounts(classes, -1);\n          attr.$removeClass(newClasses);\n        }\n\n        function digestClassCounts(classes, count) {\n          // Use createMap() to prevent class assumptions involving property\n          // names in Object.prototype\n          var classCounts = element.data('$classCounts') || createMap();\n          var classesToUpdate = [];\n          forEach(classes, function(className) {\n            if (count > 0 || classCounts[className]) {\n              classCounts[className] = (classCounts[className] || 0) + count;\n              if (classCounts[className] === +(count > 0)) {\n                classesToUpdate.push(className);\n              }\n            }\n          });\n          element.data('$classCounts', classCounts);\n          return classesToUpdate.join(' ');\n        }\n\n        function updateClasses(oldClasses, newClasses) {\n          var toAdd = arrayDifference(newClasses, oldClasses);\n          var toRemove = arrayDifference(oldClasses, newClasses);\n          toAdd = digestClassCounts(toAdd, 1);\n          toRemove = digestClassCounts(toRemove, -1);\n          if (toAdd && toAdd.length) {\n            $animate.addClass(element, toAdd);\n          }\n          if (toRemove && toRemove.length) {\n            $animate.removeClass(element, toRemove);\n          }\n        }\n\n        function ngClassWatchAction(newVal) {\n          // jshint bitwise: false\n          if (selector === true || (scope.$index & 1) === selector) {\n          // jshint bitwise: true\n            var newClasses = arrayClasses(newVal || []);\n            if (!oldVal) {\n              addClasses(newClasses);\n            } else if (!equals(newVal,oldVal)) {\n              var oldClasses = arrayClasses(oldVal);\n              updateClasses(oldClasses, newClasses);\n            }\n          }\n          if (isArray(newVal)) {\n            oldVal = newVal.map(function(v) { return shallowCopy(v); });\n          } else {\n            oldVal = shallowCopy(newVal);\n          }\n        }\n      }\n    };\n\n    function arrayDifference(tokens1, tokens2) {\n      var values = [];\n\n      outer:\n      for (var i = 0; i < tokens1.length; i++) {\n        var token = tokens1[i];\n        for (var j = 0; j < tokens2.length; j++) {\n          if (token == tokens2[j]) continue outer;\n        }\n        values.push(token);\n      }\n      return values;\n    }\n\n    function arrayClasses(classVal) {\n      var classes = [];\n      if (isArray(classVal)) {\n        forEach(classVal, function(v) {\n          classes = classes.concat(arrayClasses(v));\n        });\n        return classes;\n      } else if (isString(classVal)) {\n        return classVal.split(' ');\n      } else if (isObject(classVal)) {\n        forEach(classVal, function(v, k) {\n          if (v) {\n            classes = classes.concat(k.split(' '));\n          }\n        });\n        return classes;\n      }\n      return classVal;\n    }\n  }];\n}\n\n/**\n * @ngdoc directive\n * @name ngClass\n * @restrict AC\n *\n * @description\n * The `ngClass` directive allows you to dynamically set CSS classes on an HTML element by databinding\n * an expression that represents all classes to be added.\n *\n * The directive operates in three different ways, depending on which of three types the expression\n * evaluates to:\n *\n * 1. If the expression evaluates to a string, the string should be one or more space-delimited class\n * names.\n *\n * 2. If the expression evaluates to an object, then for each key-value pair of the\n * object with a truthy value the corresponding key is used as a class name.\n *\n * 3. If the expression evaluates to an array, each element of the array should either be a string as in\n * type 1 or an object as in type 2. This means that you can mix strings and objects together in an array\n * to give you more control over what CSS classes appear. See the code below for an example of this.\n *\n *\n * The directive won't add duplicate classes if a particular class was already set.\n *\n * When the expression changes, the previously added classes are removed and only then are the\n * new classes added.\n *\n * @knownIssue\n * You should not use {@link guide/interpolation interpolation} in the value of the `class`\n * attribute, when using the `ngClass` directive on the same element.\n * See {@link guide/interpolation#known-issues here} for more info.\n *\n * @animations\n * | Animation                        | Occurs                              |\n * |----------------------------------|-------------------------------------|\n * | {@link ng.$animate#addClass addClass}       | just before the class is applied to the element   |\n * | {@link ng.$animate#removeClass removeClass} | just before the class is removed from the element |\n *\n * @element ANY\n * @param {expression} ngClass {@link guide/expression Expression} to eval. The result\n *   of the evaluation can be a string representing space delimited class\n *   names, an array, or a map of class names to boolean values. In the case of a map, the\n *   names of the properties whose values are truthy will be added as css classes to the\n *   element.\n *\n * @example Example that demonstrates basic bindings via ngClass directive.\n   <example>\n     <file name=\"index.html\">\n       <p ng-class=\"{strike: deleted, bold: important, 'has-error': error}\">Map Syntax Example</p>\n       <label>\n          <input type=\"checkbox\" ng-model=\"deleted\">\n          deleted (apply \"strike\" class)\n       </label><br>\n       <label>\n          <input type=\"checkbox\" ng-model=\"important\">\n          important (apply \"bold\" class)\n       </label><br>\n       <label>\n          <input type=\"checkbox\" ng-model=\"error\">\n          error (apply \"has-error\" class)\n       </label>\n       <hr>\n       <p ng-class=\"style\">Using String Syntax</p>\n       <input type=\"text\" ng-model=\"style\"\n              placeholder=\"Type: bold strike red\" aria-label=\"Type: bold strike red\">\n       <hr>\n       <p ng-class=\"[style1, style2, style3]\">Using Array Syntax</p>\n       <input ng-model=\"style1\"\n              placeholder=\"Type: bold, strike or red\" aria-label=\"Type: bold, strike or red\"><br>\n       <input ng-model=\"style2\"\n              placeholder=\"Type: bold, strike or red\" aria-label=\"Type: bold, strike or red 2\"><br>\n       <input ng-model=\"style3\"\n              placeholder=\"Type: bold, strike or red\" aria-label=\"Type: bold, strike or red 3\"><br>\n       <hr>\n       <p ng-class=\"[style4, {orange: warning}]\">Using Array and Map Syntax</p>\n       <input ng-model=\"style4\" placeholder=\"Type: bold, strike\" aria-label=\"Type: bold, strike\"><br>\n       <label><input type=\"checkbox\" ng-model=\"warning\"> warning (apply \"orange\" class)</label>\n     </file>\n     <file name=\"style.css\">\n       .strike {\n           text-decoration: line-through;\n       }\n       .bold {\n           font-weight: bold;\n       }\n       .red {\n           color: red;\n       }\n       .has-error {\n           color: red;\n           background-color: yellow;\n       }\n       .orange {\n           color: orange;\n       }\n     </file>\n     <file name=\"protractor.js\" type=\"protractor\">\n       var ps = element.all(by.css('p'));\n\n       it('should let you toggle the class', function() {\n\n         expect(ps.first().getAttribute('class')).not.toMatch(/bold/);\n         expect(ps.first().getAttribute('class')).not.toMatch(/has-error/);\n\n         element(by.model('important')).click();\n         expect(ps.first().getAttribute('class')).toMatch(/bold/);\n\n         element(by.model('error')).click();\n         expect(ps.first().getAttribute('class')).toMatch(/has-error/);\n       });\n\n       it('should let you toggle string example', function() {\n         expect(ps.get(1).getAttribute('class')).toBe('');\n         element(by.model('style')).clear();\n         element(by.model('style')).sendKeys('red');\n         expect(ps.get(1).getAttribute('class')).toBe('red');\n       });\n\n       it('array example should have 3 classes', function() {\n         expect(ps.get(2).getAttribute('class')).toBe('');\n         element(by.model('style1')).sendKeys('bold');\n         element(by.model('style2')).sendKeys('strike');\n         element(by.model('style3')).sendKeys('red');\n         expect(ps.get(2).getAttribute('class')).toBe('bold strike red');\n       });\n\n       it('array with map example should have 2 classes', function() {\n         expect(ps.last().getAttribute('class')).toBe('');\n         element(by.model('style4')).sendKeys('bold');\n         element(by.model('warning')).click();\n         expect(ps.last().getAttribute('class')).toBe('bold orange');\n       });\n     </file>\n   </example>\n\n   ## Animations\n\n   The example below demonstrates how to perform animations using ngClass.\n\n   <example module=\"ngAnimate\" deps=\"angular-animate.js\" animations=\"true\">\n     <file name=\"index.html\">\n      <input id=\"setbtn\" type=\"button\" value=\"set\" ng-click=\"myVar='my-class'\">\n      <input id=\"clearbtn\" type=\"button\" value=\"clear\" ng-click=\"myVar=''\">\n      <br>\n      <span class=\"base-class\" ng-class=\"myVar\">Sample Text</span>\n     </file>\n     <file name=\"style.css\">\n       .base-class {\n         transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s;\n       }\n\n       .base-class.my-class {\n         color: red;\n         font-size:3em;\n       }\n     </file>\n     <file name=\"protractor.js\" type=\"protractor\">\n       it('should check ng-class', function() {\n         expect(element(by.css('.base-class')).getAttribute('class')).not.\n           toMatch(/my-class/);\n\n         element(by.id('setbtn')).click();\n\n         expect(element(by.css('.base-class')).getAttribute('class')).\n           toMatch(/my-class/);\n\n         element(by.id('clearbtn')).click();\n\n         expect(element(by.css('.base-class')).getAttribute('class')).not.\n           toMatch(/my-class/);\n       });\n     </file>\n   </example>\n\n\n   ## ngClass and pre-existing CSS3 Transitions/Animations\n   The ngClass directive still supports CSS3 Transitions/Animations even if they do not follow the ngAnimate CSS naming structure.\n   Upon animation ngAnimate will apply supplementary CSS classes to track the start and end of an animation, but this will not hinder\n   any pre-existing CSS transitions already on the element. To get an idea of what happens during a class-based animation, be sure\n   to view the step by step details of {@link $animate#addClass $animate.addClass} and\n   {@link $animate#removeClass $animate.removeClass}.\n */\nvar ngClassDirective = classDirective('', true);\n\n/**\n * @ngdoc directive\n * @name ngClassOdd\n * @restrict AC\n *\n * @description\n * The `ngClassOdd` and `ngClassEven` directives work exactly as\n * {@link ng.directive:ngClass ngClass}, except they work in\n * conjunction with `ngRepeat` and take effect only on odd (even) rows.\n *\n * This directive can be applied only within the scope of an\n * {@link ng.directive:ngRepeat ngRepeat}.\n *\n * @element ANY\n * @param {expression} ngClassOdd {@link guide/expression Expression} to eval. The result\n *   of the evaluation can be a string representing space delimited class names or an array.\n *\n * @example\n   <example>\n     <file name=\"index.html\">\n        <ol ng-init=\"names=['John', 'Mary', 'Cate', 'Suz']\">\n          <li ng-repeat=\"name in names\">\n           <span ng-class-odd=\"'odd'\" ng-class-even=\"'even'\">\n             {{name}}\n           </span>\n          </li>\n        </ol>\n     </file>\n     <file name=\"style.css\">\n       .odd {\n         color: red;\n       }\n       .even {\n         color: blue;\n       }\n     </file>\n     <file name=\"protractor.js\" type=\"protractor\">\n       it('should check ng-class-odd and ng-class-even', function() {\n         expect(element(by.repeater('name in names').row(0).column('name')).getAttribute('class')).\n           toMatch(/odd/);\n         expect(element(by.repeater('name in names').row(1).column('name')).getAttribute('class')).\n           toMatch(/even/);\n       });\n     </file>\n   </example>\n */\nvar ngClassOddDirective = classDirective('Odd', 0);\n\n/**\n * @ngdoc directive\n * @name ngClassEven\n * @restrict AC\n *\n * @description\n * The `ngClassOdd` and `ngClassEven` directives work exactly as\n * {@link ng.directive:ngClass ngClass}, except they work in\n * conjunction with `ngRepeat` and take effect only on odd (even) rows.\n *\n * This directive can be applied only within the scope of an\n * {@link ng.directive:ngRepeat ngRepeat}.\n *\n * @element ANY\n * @param {expression} ngClassEven {@link guide/expression Expression} to eval. The\n *   result of the evaluation can be a string representing space delimited class names or an array.\n *\n * @example\n   <example>\n     <file name=\"index.html\">\n        <ol ng-init=\"names=['John', 'Mary', 'Cate', 'Suz']\">\n          <li ng-repeat=\"name in names\">\n           <span ng-class-odd=\"'odd'\" ng-class-even=\"'even'\">\n             {{name}} &nbsp; &nbsp; &nbsp;\n           </span>\n          </li>\n        </ol>\n     </file>\n     <file name=\"style.css\">\n       .odd {\n         color: red;\n       }\n       .even {\n         color: blue;\n       }\n     </file>\n     <file name=\"protractor.js\" type=\"protractor\">\n       it('should check ng-class-odd and ng-class-even', function() {\n         expect(element(by.repeater('name in names').row(0).column('name')).getAttribute('class')).\n           toMatch(/odd/);\n         expect(element(by.repeater('name in names').row(1).column('name')).getAttribute('class')).\n           toMatch(/even/);\n       });\n     </file>\n   </example>\n */\nvar ngClassEvenDirective = classDirective('Even', 1);\n\n/**\n * @ngdoc directive\n * @name ngCloak\n * @restrict AC\n *\n * @description\n * The `ngCloak` directive is used to prevent the Angular html template from being briefly\n * displayed by the browser in its raw (uncompiled) form while your application is loading. Use this\n * directive to avoid the undesirable flicker effect caused by the html template display.\n *\n * The directive can be applied to the `<body>` element, but the preferred usage is to apply\n * multiple `ngCloak` directives to small portions of the page to permit progressive rendering\n * of the browser view.\n *\n * `ngCloak` works in cooperation with the following css rule embedded within `angular.js` and\n * `angular.min.js`.\n * For CSP mode please add `angular-csp.css` to your html file (see {@link ng.directive:ngCsp ngCsp}).\n *\n * ```css\n * [ng\\:cloak], [ng-cloak], [data-ng-cloak], [x-ng-cloak], .ng-cloak, .x-ng-cloak {\n *   display: none !important;\n * }\n * ```\n *\n * When this css rule is loaded by the browser, all html elements (including their children) that\n * are tagged with the `ngCloak` directive are hidden. When Angular encounters this directive\n * during the compilation of the template it deletes the `ngCloak` element attribute, making\n * the compiled element visible.\n *\n * For the best result, the `angular.js` script must be loaded in the head section of the html\n * document; alternatively, the css rule above must be included in the external stylesheet of the\n * application.\n *\n * @element ANY\n *\n * @example\n   <example>\n     <file name=\"index.html\">\n        <div id=\"template1\" ng-cloak>{{ 'hello' }}</div>\n        <div id=\"template2\" class=\"ng-cloak\">{{ 'world' }}</div>\n     </file>\n     <file name=\"protractor.js\" type=\"protractor\">\n       it('should remove the template directive and css class', function() {\n         expect($('#template1').getAttribute('ng-cloak')).\n           toBeNull();\n         expect($('#template2').getAttribute('ng-cloak')).\n           toBeNull();\n       });\n     </file>\n   </example>\n *\n */\nvar ngCloakDirective = ngDirective({\n  compile: function(element, attr) {\n    attr.$set('ngCloak', undefined);\n    element.removeClass('ng-cloak');\n  }\n});\n\n/**\n * @ngdoc directive\n * @name ngController\n *\n * @description\n * The `ngController` directive attaches a controller class to the view. This is a key aspect of how angular\n * supports the principles behind the Model-View-Controller design pattern.\n *\n * MVC components in angular:\n *\n * * Model — Models are the properties of a scope; scopes are attached to the DOM where scope properties\n *   are accessed through bindings.\n * * View — The template (HTML with data bindings) that is rendered into the View.\n * * Controller — The `ngController` directive specifies a Controller class; the class contains business\n *   logic behind the application to decorate the scope with functions and values\n *\n * Note that you can also attach controllers to the DOM by declaring it in a route definition\n * via the {@link ngRoute.$route $route} service. A common mistake is to declare the controller\n * again using `ng-controller` in the template itself.  This will cause the controller to be attached\n * and executed twice.\n *\n * @element ANY\n * @scope\n * @priority 500\n * @param {expression} ngController Name of a constructor function registered with the current\n * {@link ng.$controllerProvider $controllerProvider} or an {@link guide/expression expression}\n * that on the current scope evaluates to a constructor function.\n *\n * The controller instance can be published into a scope property by specifying\n * `ng-controller=\"as propertyName\"`.\n *\n * If the current `$controllerProvider` is configured to use globals (via\n * {@link ng.$controllerProvider#allowGlobals `$controllerProvider.allowGlobals()` }), this may\n * also be the name of a globally accessible constructor function (not recommended).\n *\n * @example\n * Here is a simple form for editing user contact information. Adding, removing, clearing, and\n * greeting are methods declared on the controller (see source tab). These methods can\n * easily be called from the angular markup. Any changes to the data are automatically reflected\n * in the View without the need for a manual update.\n *\n * Two different declaration styles are included below:\n *\n * * one binds methods and properties directly onto the controller using `this`:\n * `ng-controller=\"SettingsController1 as settings\"`\n * * one injects `$scope` into the controller:\n * `ng-controller=\"SettingsController2\"`\n *\n * The second option is more common in the Angular community, and is generally used in boilerplates\n * and in this guide. However, there are advantages to binding properties directly to the controller\n * and avoiding scope.\n *\n * * Using `controller as` makes it obvious which controller you are accessing in the template when\n * multiple controllers apply to an element.\n * * If you are writing your controllers as classes you have easier access to the properties and\n * methods, which will appear on the scope, from inside the controller code.\n * * Since there is always a `.` in the bindings, you don't have to worry about prototypal\n * inheritance masking primitives.\n *\n * This example demonstrates the `controller as` syntax.\n *\n * <example name=\"ngControllerAs\" module=\"controllerAsExample\">\n *   <file name=\"index.html\">\n *    <div id=\"ctrl-as-exmpl\" ng-controller=\"SettingsController1 as settings\">\n *      <label>Name: <input type=\"text\" ng-model=\"settings.name\"/></label>\n *      <button ng-click=\"settings.greet()\">greet</button><br/>\n *      Contact:\n *      <ul>\n *        <li ng-repeat=\"contact in settings.contacts\">\n *          <select ng-model=\"contact.type\" aria-label=\"Contact method\" id=\"select_{{$index}}\">\n *             <option>phone</option>\n *             <option>email</option>\n *          </select>\n *          <input type=\"text\" ng-model=\"contact.value\" aria-labelledby=\"select_{{$index}}\" />\n *          <button ng-click=\"settings.clearContact(contact)\">clear</button>\n *          <button ng-click=\"settings.removeContact(contact)\" aria-label=\"Remove\">X</button>\n *        </li>\n *        <li><button ng-click=\"settings.addContact()\">add</button></li>\n *     </ul>\n *    </div>\n *   </file>\n *   <file name=\"app.js\">\n *    angular.module('controllerAsExample', [])\n *      .controller('SettingsController1', SettingsController1);\n *\n *    function SettingsController1() {\n *      this.name = \"John Smith\";\n *      this.contacts = [\n *        {type: 'phone', value: '408 555 1212'},\n *        {type: 'email', value: 'john.smith@example.org'} ];\n *    }\n *\n *    SettingsController1.prototype.greet = function() {\n *      alert(this.name);\n *    };\n *\n *    SettingsController1.prototype.addContact = function() {\n *      this.contacts.push({type: 'email', value: 'yourname@example.org'});\n *    };\n *\n *    SettingsController1.prototype.removeContact = function(contactToRemove) {\n *     var index = this.contacts.indexOf(contactToRemove);\n *      this.contacts.splice(index, 1);\n *    };\n *\n *    SettingsController1.prototype.clearContact = function(contact) {\n *      contact.type = 'phone';\n *      contact.value = '';\n *    };\n *   </file>\n *   <file name=\"protractor.js\" type=\"protractor\">\n *     it('should check controller as', function() {\n *       var container = element(by.id('ctrl-as-exmpl'));\n *         expect(container.element(by.model('settings.name'))\n *           .getAttribute('value')).toBe('John Smith');\n *\n *       var firstRepeat =\n *           container.element(by.repeater('contact in settings.contacts').row(0));\n *       var secondRepeat =\n *           container.element(by.repeater('contact in settings.contacts').row(1));\n *\n *       expect(firstRepeat.element(by.model('contact.value')).getAttribute('value'))\n *           .toBe('408 555 1212');\n *\n *       expect(secondRepeat.element(by.model('contact.value')).getAttribute('value'))\n *           .toBe('john.smith@example.org');\n *\n *       firstRepeat.element(by.buttonText('clear')).click();\n *\n *       expect(firstRepeat.element(by.model('contact.value')).getAttribute('value'))\n *           .toBe('');\n *\n *       container.element(by.buttonText('add')).click();\n *\n *       expect(container.element(by.repeater('contact in settings.contacts').row(2))\n *           .element(by.model('contact.value'))\n *           .getAttribute('value'))\n *           .toBe('yourname@example.org');\n *     });\n *   </file>\n * </example>\n *\n * This example demonstrates the \"attach to `$scope`\" style of controller.\n *\n * <example name=\"ngController\" module=\"controllerExample\">\n *  <file name=\"index.html\">\n *   <div id=\"ctrl-exmpl\" ng-controller=\"SettingsController2\">\n *     <label>Name: <input type=\"text\" ng-model=\"name\"/></label>\n *     <button ng-click=\"greet()\">greet</button><br/>\n *     Contact:\n *     <ul>\n *       <li ng-repeat=\"contact in contacts\">\n *         <select ng-model=\"contact.type\" id=\"select_{{$index}}\">\n *            <option>phone</option>\n *            <option>email</option>\n *         </select>\n *         <input type=\"text\" ng-model=\"contact.value\" aria-labelledby=\"select_{{$index}}\" />\n *         <button ng-click=\"clearContact(contact)\">clear</button>\n *         <button ng-click=\"removeContact(contact)\">X</button>\n *       </li>\n *       <li>[ <button ng-click=\"addContact()\">add</button> ]</li>\n *    </ul>\n *   </div>\n *  </file>\n *  <file name=\"app.js\">\n *   angular.module('controllerExample', [])\n *     .controller('SettingsController2', ['$scope', SettingsController2]);\n *\n *   function SettingsController2($scope) {\n *     $scope.name = \"John Smith\";\n *     $scope.contacts = [\n *       {type:'phone', value:'408 555 1212'},\n *       {type:'email', value:'john.smith@example.org'} ];\n *\n *     $scope.greet = function() {\n *       alert($scope.name);\n *     };\n *\n *     $scope.addContact = function() {\n *       $scope.contacts.push({type:'email', value:'yourname@example.org'});\n *     };\n *\n *     $scope.removeContact = function(contactToRemove) {\n *       var index = $scope.contacts.indexOf(contactToRemove);\n *       $scope.contacts.splice(index, 1);\n *     };\n *\n *     $scope.clearContact = function(contact) {\n *       contact.type = 'phone';\n *       contact.value = '';\n *     };\n *   }\n *  </file>\n *  <file name=\"protractor.js\" type=\"protractor\">\n *    it('should check controller', function() {\n *      var container = element(by.id('ctrl-exmpl'));\n *\n *      expect(container.element(by.model('name'))\n *          .getAttribute('value')).toBe('John Smith');\n *\n *      var firstRepeat =\n *          container.element(by.repeater('contact in contacts').row(0));\n *      var secondRepeat =\n *          container.element(by.repeater('contact in contacts').row(1));\n *\n *      expect(firstRepeat.element(by.model('contact.value')).getAttribute('value'))\n *          .toBe('408 555 1212');\n *      expect(secondRepeat.element(by.model('contact.value')).getAttribute('value'))\n *          .toBe('john.smith@example.org');\n *\n *      firstRepeat.element(by.buttonText('clear')).click();\n *\n *      expect(firstRepeat.element(by.model('contact.value')).getAttribute('value'))\n *          .toBe('');\n *\n *      container.element(by.buttonText('add')).click();\n *\n *      expect(container.element(by.repeater('contact in contacts').row(2))\n *          .element(by.model('contact.value'))\n *          .getAttribute('value'))\n *          .toBe('yourname@example.org');\n *    });\n *  </file>\n *</example>\n\n */\nvar ngControllerDirective = [function() {\n  return {\n    restrict: 'A',\n    scope: true,\n    controller: '@',\n    priority: 500\n  };\n}];\n\n/**\n * @ngdoc directive\n * @name ngCsp\n *\n * @element html\n * @description\n *\n * Angular has some features that can break certain\n * [CSP (Content Security Policy)](https://developer.mozilla.org/en/Security/CSP) rules.\n *\n * If you intend to implement these rules then you must tell Angular not to use these features.\n *\n * This is necessary when developing things like Google Chrome Extensions or Universal Windows Apps.\n *\n *\n * The following rules affect Angular:\n *\n * * `unsafe-eval`: this rule forbids apps to use `eval` or `Function(string)` generated functions\n * (among other things). Angular makes use of this in the {@link $parse} service to provide a 30%\n * increase in the speed of evaluating Angular expressions.\n *\n * * `unsafe-inline`: this rule forbids apps from inject custom styles into the document. Angular\n * makes use of this to include some CSS rules (e.g. {@link ngCloak} and {@link ngHide}).\n * To make these directives work when a CSP rule is blocking inline styles, you must link to the\n * `angular-csp.css` in your HTML manually.\n *\n * If you do not provide `ngCsp` then Angular tries to autodetect if CSP is blocking unsafe-eval\n * and automatically deactivates this feature in the {@link $parse} service. This autodetection,\n * however, triggers a CSP error to be logged in the console:\n *\n * ```\n * Refused to evaluate a string as JavaScript because 'unsafe-eval' is not an allowed source of\n * script in the following Content Security Policy directive: \"default-src 'self'\". Note that\n * 'script-src' was not explicitly set, so 'default-src' is used as a fallback.\n * ```\n *\n * This error is harmless but annoying. To prevent the error from showing up, put the `ngCsp`\n * directive on an element of the HTML document that appears before the `<script>` tag that loads\n * the `angular.js` file.\n *\n * *Note: This directive is only available in the `ng-csp` and `data-ng-csp` attribute form.*\n *\n * You can specify which of the CSP related Angular features should be deactivated by providing\n * a value for the `ng-csp` attribute. The options are as follows:\n *\n * * no-inline-style: this stops Angular from injecting CSS styles into the DOM\n *\n * * no-unsafe-eval: this stops Angular from optimizing $parse with unsafe eval of strings\n *\n * You can use these values in the following combinations:\n *\n *\n * * No declaration means that Angular will assume that you can do inline styles, but it will do\n * a runtime check for unsafe-eval. E.g. `<body>`. This is backwardly compatible with previous versions\n * of Angular.\n *\n * * A simple `ng-csp` (or `data-ng-csp`) attribute will tell Angular to deactivate both inline\n * styles and unsafe eval. E.g. `<body ng-csp>`. This is backwardly compatible with previous versions\n * of Angular.\n *\n * * Specifying only `no-unsafe-eval` tells Angular that we must not use eval, but that we can inject\n * inline styles. E.g. `<body ng-csp=\"no-unsafe-eval\">`.\n *\n * * Specifying only `no-inline-style` tells Angular that we must not inject styles, but that we can\n * run eval - no automatic check for unsafe eval will occur. E.g. `<body ng-csp=\"no-inline-style\">`\n *\n * * Specifying both `no-unsafe-eval` and `no-inline-style` tells Angular that we must not inject\n * styles nor use eval, which is the same as an empty: ng-csp.\n * E.g.`<body ng-csp=\"no-inline-style;no-unsafe-eval\">`\n *\n * @example\n * This example shows how to apply the `ngCsp` directive to the `html` tag.\n   ```html\n     <!doctype html>\n     <html ng-app ng-csp>\n     ...\n     ...\n     </html>\n   ```\n  * @example\n      // Note: the suffix `.csp` in the example name triggers\n      // csp mode in our http server!\n      <example name=\"example.csp\" module=\"cspExample\" ng-csp=\"true\">\n        <file name=\"index.html\">\n          <div ng-controller=\"MainController as ctrl\">\n            <div>\n              <button ng-click=\"ctrl.inc()\" id=\"inc\">Increment</button>\n              <span id=\"counter\">\n                {{ctrl.counter}}\n              </span>\n            </div>\n\n            <div>\n              <button ng-click=\"ctrl.evil()\" id=\"evil\">Evil</button>\n              <span id=\"evilError\">\n                {{ctrl.evilError}}\n              </span>\n            </div>\n          </div>\n        </file>\n        <file name=\"script.js\">\n           angular.module('cspExample', [])\n             .controller('MainController', function() {\n                this.counter = 0;\n                this.inc = function() {\n                  this.counter++;\n                };\n                this.evil = function() {\n                  // jshint evil:true\n                  try {\n                    eval('1+2');\n                  } catch (e) {\n                    this.evilError = e.message;\n                  }\n                };\n              });\n        </file>\n        <file name=\"protractor.js\" type=\"protractor\">\n          var util, webdriver;\n\n          var incBtn = element(by.id('inc'));\n          var counter = element(by.id('counter'));\n          var evilBtn = element(by.id('evil'));\n          var evilError = element(by.id('evilError'));\n\n          function getAndClearSevereErrors() {\n            return browser.manage().logs().get('browser').then(function(browserLog) {\n              return browserLog.filter(function(logEntry) {\n                return logEntry.level.value > webdriver.logging.Level.WARNING.value;\n              });\n            });\n          }\n\n          function clearErrors() {\n            getAndClearSevereErrors();\n          }\n\n          function expectNoErrors() {\n            getAndClearSevereErrors().then(function(filteredLog) {\n              expect(filteredLog.length).toEqual(0);\n              if (filteredLog.length) {\n                console.log('browser console errors: ' + util.inspect(filteredLog));\n              }\n            });\n          }\n\n          function expectError(regex) {\n            getAndClearSevereErrors().then(function(filteredLog) {\n              var found = false;\n              filteredLog.forEach(function(log) {\n                if (log.message.match(regex)) {\n                  found = true;\n                }\n              });\n              if (!found) {\n                throw new Error('expected an error that matches ' + regex);\n              }\n            });\n          }\n\n          beforeEach(function() {\n            util = require('util');\n            webdriver = require('protractor/node_modules/selenium-webdriver');\n          });\n\n          // For now, we only test on Chrome,\n          // as Safari does not load the page with Protractor's injected scripts,\n          // and Firefox webdriver always disables content security policy (#6358)\n          if (browser.params.browser !== 'chrome') {\n            return;\n          }\n\n          it('should not report errors when the page is loaded', function() {\n            // clear errors so we are not dependent on previous tests\n            clearErrors();\n            // Need to reload the page as the page is already loaded when\n            // we come here\n            browser.driver.getCurrentUrl().then(function(url) {\n              browser.get(url);\n            });\n            expectNoErrors();\n          });\n\n          it('should evaluate expressions', function() {\n            expect(counter.getText()).toEqual('0');\n            incBtn.click();\n            expect(counter.getText()).toEqual('1');\n            expectNoErrors();\n          });\n\n          it('should throw and report an error when using \"eval\"', function() {\n            evilBtn.click();\n            expect(evilError.getText()).toMatch(/Content Security Policy/);\n            expectError(/Content Security Policy/);\n          });\n        </file>\n      </example>\n  */\n\n// ngCsp is not implemented as a proper directive any more, because we need it be processed while we\n// bootstrap the system (before $parse is instantiated), for this reason we just have\n// the csp() fn that looks for the `ng-csp` attribute anywhere in the current doc\n\n/**\n * @ngdoc directive\n * @name ngClick\n *\n * @description\n * The ngClick directive allows you to specify custom behavior when\n * an element is clicked.\n *\n * @element ANY\n * @priority 0\n * @param {expression} ngClick {@link guide/expression Expression} to evaluate upon\n * click. ({@link guide/expression#-event- Event object is available as `$event`})\n *\n * @example\n   <example>\n     <file name=\"index.html\">\n      <button ng-click=\"count = count + 1\" ng-init=\"count=0\">\n        Increment\n      </button>\n      <span>\n        count: {{count}}\n      </span>\n     </file>\n     <file name=\"protractor.js\" type=\"protractor\">\n       it('should check ng-click', function() {\n         expect(element(by.binding('count')).getText()).toMatch('0');\n         element(by.css('button')).click();\n         expect(element(by.binding('count')).getText()).toMatch('1');\n       });\n     </file>\n   </example>\n */\n/*\n * A collection of directives that allows creation of custom event handlers that are defined as\n * angular expressions and are compiled and executed within the current scope.\n */\nvar ngEventDirectives = {};\n\n// For events that might fire synchronously during DOM manipulation\n// we need to execute their event handlers asynchronously using $evalAsync,\n// so that they are not executed in an inconsistent state.\nvar forceAsyncEvents = {\n  'blur': true,\n  'focus': true\n};\nforEach(\n  'click dblclick mousedown mouseup mouseover mouseout mousemove mouseenter mouseleave keydown keyup keypress submit focus blur copy cut paste'.split(' '),\n  function(eventName) {\n    var directiveName = directiveNormalize('ng-' + eventName);\n    ngEventDirectives[directiveName] = ['$parse', '$rootScope', function($parse, $rootScope) {\n      return {\n        restrict: 'A',\n        compile: function($element, attr) {\n          // We expose the powerful $event object on the scope that provides access to the Window,\n          // etc. that isn't protected by the fast paths in $parse.  We explicitly request better\n          // checks at the cost of speed since event handler expressions are not executed as\n          // frequently as regular change detection.\n          var fn = $parse(attr[directiveName], /* interceptorFn */ null, /* expensiveChecks */ true);\n          return function ngEventHandler(scope, element) {\n            element.on(eventName, function(event) {\n              var callback = function() {\n                fn(scope, {$event:event});\n              };\n              if (forceAsyncEvents[eventName] && $rootScope.$$phase) {\n                scope.$evalAsync(callback);\n              } else {\n                scope.$apply(callback);\n              }\n            });\n          };\n        }\n      };\n    }];\n  }\n);\n\n/**\n * @ngdoc directive\n * @name ngDblclick\n *\n * @description\n * The `ngDblclick` directive allows you to specify custom behavior on a dblclick event.\n *\n * @element ANY\n * @priority 0\n * @param {expression} ngDblclick {@link guide/expression Expression} to evaluate upon\n * a dblclick. (The Event object is available as `$event`)\n *\n * @example\n   <example>\n     <file name=\"index.html\">\n      <button ng-dblclick=\"count = count + 1\" ng-init=\"count=0\">\n        Increment (on double click)\n      </button>\n      count: {{count}}\n     </file>\n   </example>\n */\n\n\n/**\n * @ngdoc directive\n * @name ngMousedown\n *\n * @description\n * The ngMousedown directive allows you to specify custom behavior on mousedown event.\n *\n * @element ANY\n * @priority 0\n * @param {expression} ngMousedown {@link guide/expression Expression} to evaluate upon\n * mousedown. ({@link guide/expression#-event- Event object is available as `$event`})\n *\n * @example\n   <example>\n     <file name=\"index.html\">\n      <button ng-mousedown=\"count = count + 1\" ng-init=\"count=0\">\n        Increment (on mouse down)\n      </button>\n      count: {{count}}\n     </file>\n   </example>\n */\n\n\n/**\n * @ngdoc directive\n * @name ngMouseup\n *\n * @description\n * Specify custom behavior on mouseup event.\n *\n * @element ANY\n * @priority 0\n * @param {expression} ngMouseup {@link guide/expression Expression} to evaluate upon\n * mouseup. ({@link guide/expression#-event- Event object is available as `$event`})\n *\n * @example\n   <example>\n     <file name=\"index.html\">\n      <button ng-mouseup=\"count = count + 1\" ng-init=\"count=0\">\n        Increment (on mouse up)\n      </button>\n      count: {{count}}\n     </file>\n   </example>\n */\n\n/**\n * @ngdoc directive\n * @name ngMouseover\n *\n * @description\n * Specify custom behavior on mouseover event.\n *\n * @element ANY\n * @priority 0\n * @param {expression} ngMouseover {@link guide/expression Expression} to evaluate upon\n * mouseover. ({@link guide/expression#-event- Event object is available as `$event`})\n *\n * @example\n   <example>\n     <file name=\"index.html\">\n      <button ng-mouseover=\"count = count + 1\" ng-init=\"count=0\">\n        Increment (when mouse is over)\n      </button>\n      count: {{count}}\n     </file>\n   </example>\n */\n\n\n/**\n * @ngdoc directive\n * @name ngMouseenter\n *\n * @description\n * Specify custom behavior on mouseenter event.\n *\n * @element ANY\n * @priority 0\n * @param {expression} ngMouseenter {@link guide/expression Expression} to evaluate upon\n * mouseenter. ({@link guide/expression#-event- Event object is available as `$event`})\n *\n * @example\n   <example>\n     <file name=\"index.html\">\n      <button ng-mouseenter=\"count = count + 1\" ng-init=\"count=0\">\n        Increment (when mouse enters)\n      </button>\n      count: {{count}}\n     </file>\n   </example>\n */\n\n\n/**\n * @ngdoc directive\n * @name ngMouseleave\n *\n * @description\n * Specify custom behavior on mouseleave event.\n *\n * @element ANY\n * @priority 0\n * @param {expression} ngMouseleave {@link guide/expression Expression} to evaluate upon\n * mouseleave. ({@link guide/expression#-event- Event object is available as `$event`})\n *\n * @example\n   <example>\n     <file name=\"index.html\">\n      <button ng-mouseleave=\"count = count + 1\" ng-init=\"count=0\">\n        Increment (when mouse leaves)\n      </button>\n      count: {{count}}\n     </file>\n   </example>\n */\n\n\n/**\n * @ngdoc directive\n * @name ngMousemove\n *\n * @description\n * Specify custom behavior on mousemove event.\n *\n * @element ANY\n * @priority 0\n * @param {expression} ngMousemove {@link guide/expression Expression} to evaluate upon\n * mousemove. ({@link guide/expression#-event- Event object is available as `$event`})\n *\n * @example\n   <example>\n     <file name=\"index.html\">\n      <button ng-mousemove=\"count = count + 1\" ng-init=\"count=0\">\n        Increment (when mouse moves)\n      </button>\n      count: {{count}}\n     </file>\n   </example>\n */\n\n\n/**\n * @ngdoc directive\n * @name ngKeydown\n *\n * @description\n * Specify custom behavior on keydown event.\n *\n * @element ANY\n * @priority 0\n * @param {expression} ngKeydown {@link guide/expression Expression} to evaluate upon\n * keydown. (Event object is available as `$event` and can be interrogated for keyCode, altKey, etc.)\n *\n * @example\n   <example>\n     <file name=\"index.html\">\n      <input ng-keydown=\"count = count + 1\" ng-init=\"count=0\">\n      key down count: {{count}}\n     </file>\n   </example>\n */\n\n\n/**\n * @ngdoc directive\n * @name ngKeyup\n *\n * @description\n * Specify custom behavior on keyup event.\n *\n * @element ANY\n * @priority 0\n * @param {expression} ngKeyup {@link guide/expression Expression} to evaluate upon\n * keyup. (Event object is available as `$event` and can be interrogated for keyCode, altKey, etc.)\n *\n * @example\n   <example>\n     <file name=\"index.html\">\n       <p>Typing in the input box below updates the key count</p>\n       <input ng-keyup=\"count = count + 1\" ng-init=\"count=0\"> key up count: {{count}}\n\n       <p>Typing in the input box below updates the keycode</p>\n       <input ng-keyup=\"event=$event\">\n       <p>event keyCode: {{ event.keyCode }}</p>\n       <p>event altKey: {{ event.altKey }}</p>\n     </file>\n   </example>\n */\n\n\n/**\n * @ngdoc directive\n * @name ngKeypress\n *\n * @description\n * Specify custom behavior on keypress event.\n *\n * @element ANY\n * @param {expression} ngKeypress {@link guide/expression Expression} to evaluate upon\n * keypress. ({@link guide/expression#-event- Event object is available as `$event`}\n * and can be interrogated for keyCode, altKey, etc.)\n *\n * @example\n   <example>\n     <file name=\"index.html\">\n      <input ng-keypress=\"count = count + 1\" ng-init=\"count=0\">\n      key press count: {{count}}\n     </file>\n   </example>\n */\n\n\n/**\n * @ngdoc directive\n * @name ngSubmit\n *\n * @description\n * Enables binding angular expressions to onsubmit events.\n *\n * Additionally it prevents the default action (which for form means sending the request to the\n * server and reloading the current page), but only if the form does not contain `action`,\n * `data-action`, or `x-action` attributes.\n *\n * <div class=\"alert alert-warning\">\n * **Warning:** Be careful not to cause \"double-submission\" by using both the `ngClick` and\n * `ngSubmit` handlers together. See the\n * {@link form#submitting-a-form-and-preventing-the-default-action `form` directive documentation}\n * for a detailed discussion of when `ngSubmit` may be triggered.\n * </div>\n *\n * @element form\n * @priority 0\n * @param {expression} ngSubmit {@link guide/expression Expression} to eval.\n * ({@link guide/expression#-event- Event object is available as `$event`})\n *\n * @example\n   <example module=\"submitExample\">\n     <file name=\"index.html\">\n      <script>\n        angular.module('submitExample', [])\n          .controller('ExampleController', ['$scope', function($scope) {\n            $scope.list = [];\n            $scope.text = 'hello';\n            $scope.submit = function() {\n              if ($scope.text) {\n                $scope.list.push(this.text);\n                $scope.text = '';\n              }\n            };\n          }]);\n      </script>\n      <form ng-submit=\"submit()\" ng-controller=\"ExampleController\">\n        Enter text and hit enter:\n        <input type=\"text\" ng-model=\"text\" name=\"text\" />\n        <input type=\"submit\" id=\"submit\" value=\"Submit\" />\n        <pre>list={{list}}</pre>\n      </form>\n     </file>\n     <file name=\"protractor.js\" type=\"protractor\">\n       it('should check ng-submit', function() {\n         expect(element(by.binding('list')).getText()).toBe('list=[]');\n         element(by.css('#submit')).click();\n         expect(element(by.binding('list')).getText()).toContain('hello');\n         expect(element(by.model('text')).getAttribute('value')).toBe('');\n       });\n       it('should ignore empty strings', function() {\n         expect(element(by.binding('list')).getText()).toBe('list=[]');\n         element(by.css('#submit')).click();\n         element(by.css('#submit')).click();\n         expect(element(by.binding('list')).getText()).toContain('hello');\n        });\n     </file>\n   </example>\n */\n\n/**\n * @ngdoc directive\n * @name ngFocus\n *\n * @description\n * Specify custom behavior on focus event.\n *\n * Note: As the `focus` event is executed synchronously when calling `input.focus()`\n * AngularJS executes the expression using `scope.$evalAsync` if the event is fired\n * during an `$apply` to ensure a consistent state.\n *\n * @element window, input, select, textarea, a\n * @priority 0\n * @param {expression} ngFocus {@link guide/expression Expression} to evaluate upon\n * focus. ({@link guide/expression#-event- Event object is available as `$event`})\n *\n * @example\n * See {@link ng.directive:ngClick ngClick}\n */\n\n/**\n * @ngdoc directive\n * @name ngBlur\n *\n * @description\n * Specify custom behavior on blur event.\n *\n * A [blur event](https://developer.mozilla.org/en-US/docs/Web/Events/blur) fires when\n * an element has lost focus.\n *\n * Note: As the `blur` event is executed synchronously also during DOM manipulations\n * (e.g. removing a focussed input),\n * AngularJS executes the expression using `scope.$evalAsync` if the event is fired\n * during an `$apply` to ensure a consistent state.\n *\n * @element window, input, select, textarea, a\n * @priority 0\n * @param {expression} ngBlur {@link guide/expression Expression} to evaluate upon\n * blur. ({@link guide/expression#-event- Event object is available as `$event`})\n *\n * @example\n * See {@link ng.directive:ngClick ngClick}\n */\n\n/**\n * @ngdoc directive\n * @name ngCopy\n *\n * @description\n * Specify custom behavior on copy event.\n *\n * @element window, input, select, textarea, a\n * @priority 0\n * @param {expression} ngCopy {@link guide/expression Expression} to evaluate upon\n * copy. ({@link guide/expression#-event- Event object is available as `$event`})\n *\n * @example\n   <example>\n     <file name=\"index.html\">\n      <input ng-copy=\"copied=true\" ng-init=\"copied=false; value='copy me'\" ng-model=\"value\">\n      copied: {{copied}}\n     </file>\n   </example>\n */\n\n/**\n * @ngdoc directive\n * @name ngCut\n *\n * @description\n * Specify custom behavior on cut event.\n *\n * @element window, input, select, textarea, a\n * @priority 0\n * @param {expression} ngCut {@link guide/expression Expression} to evaluate upon\n * cut. ({@link guide/expression#-event- Event object is available as `$event`})\n *\n * @example\n   <example>\n     <file name=\"index.html\">\n      <input ng-cut=\"cut=true\" ng-init=\"cut=false; value='cut me'\" ng-model=\"value\">\n      cut: {{cut}}\n     </file>\n   </example>\n */\n\n/**\n * @ngdoc directive\n * @name ngPaste\n *\n * @description\n * Specify custom behavior on paste event.\n *\n * @element window, input, select, textarea, a\n * @priority 0\n * @param {expression} ngPaste {@link guide/expression Expression} to evaluate upon\n * paste. ({@link guide/expression#-event- Event object is available as `$event`})\n *\n * @example\n   <example>\n     <file name=\"index.html\">\n      <input ng-paste=\"paste=true\" ng-init=\"paste=false\" placeholder='paste here'>\n      pasted: {{paste}}\n     </file>\n   </example>\n */\n\n/**\n * @ngdoc directive\n * @name ngIf\n * @restrict A\n * @multiElement\n *\n * @description\n * The `ngIf` directive removes or recreates a portion of the DOM tree based on an\n * {expression}. If the expression assigned to `ngIf` evaluates to a false\n * value then the element is removed from the DOM, otherwise a clone of the\n * element is reinserted into the DOM.\n *\n * `ngIf` differs from `ngShow` and `ngHide` in that `ngIf` completely removes and recreates the\n * element in the DOM rather than changing its visibility via the `display` css property.  A common\n * case when this difference is significant is when using css selectors that rely on an element's\n * position within the DOM, such as the `:first-child` or `:last-child` pseudo-classes.\n *\n * Note that when an element is removed using `ngIf` its scope is destroyed and a new scope\n * is created when the element is restored.  The scope created within `ngIf` inherits from\n * its parent scope using\n * [prototypal inheritance](https://github.com/angular/angular.js/wiki/Understanding-Scopes#javascript-prototypal-inheritance).\n * An important implication of this is if `ngModel` is used within `ngIf` to bind to\n * a javascript primitive defined in the parent scope. In this case any modifications made to the\n * variable within the child scope will override (hide) the value in the parent scope.\n *\n * Also, `ngIf` recreates elements using their compiled state. An example of this behavior\n * is if an element's class attribute is directly modified after it's compiled, using something like\n * jQuery's `.addClass()` method, and the element is later removed. When `ngIf` recreates the element\n * the added class will be lost because the original compiled state is used to regenerate the element.\n *\n * Additionally, you can provide animations via the `ngAnimate` module to animate the `enter`\n * and `leave` effects.\n *\n * @animations\n * | Animation                        | Occurs                               |\n * |----------------------------------|-------------------------------------|\n * | {@link ng.$animate#enter enter}  | just after the `ngIf` contents change and a new DOM element is created and injected into the `ngIf` container |\n * | {@link ng.$animate#leave leave}  | just before the `ngIf` contents are removed from the DOM |\n *\n * @element ANY\n * @scope\n * @priority 600\n * @param {expression} ngIf If the {@link guide/expression expression} is falsy then\n *     the element is removed from the DOM tree. If it is truthy a copy of the compiled\n *     element is added to the DOM tree.\n *\n * @example\n  <example module=\"ngAnimate\" deps=\"angular-animate.js\" animations=\"true\">\n    <file name=\"index.html\">\n      <label>Click me: <input type=\"checkbox\" ng-model=\"checked\" ng-init=\"checked=true\" /></label><br/>\n      Show when checked:\n      <span ng-if=\"checked\" class=\"animate-if\">\n        This is removed when the checkbox is unchecked.\n      </span>\n    </file>\n    <file name=\"animations.css\">\n      .animate-if {\n        background:white;\n        border:1px solid black;\n        padding:10px;\n      }\n\n      .animate-if.ng-enter, .animate-if.ng-leave {\n        transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s;\n      }\n\n      .animate-if.ng-enter,\n      .animate-if.ng-leave.ng-leave-active {\n        opacity:0;\n      }\n\n      .animate-if.ng-leave,\n      .animate-if.ng-enter.ng-enter-active {\n        opacity:1;\n      }\n    </file>\n  </example>\n */\nvar ngIfDirective = ['$animate', '$compile', function($animate, $compile) {\n  return {\n    multiElement: true,\n    transclude: 'element',\n    priority: 600,\n    terminal: true,\n    restrict: 'A',\n    $$tlb: true,\n    link: function($scope, $element, $attr, ctrl, $transclude) {\n        var block, childScope, previousElements;\n        $scope.$watch($attr.ngIf, function ngIfWatchAction(value) {\n\n          if (value) {\n            if (!childScope) {\n              $transclude(function(clone, newScope) {\n                childScope = newScope;\n                clone[clone.length++] = $compile.$$createComment('end ngIf', $attr.ngIf);\n                // Note: We only need the first/last node of the cloned nodes.\n                // However, we need to keep the reference to the jqlite wrapper as it might be changed later\n                // by a directive with templateUrl when its template arrives.\n                block = {\n                  clone: clone\n                };\n                $animate.enter(clone, $element.parent(), $element);\n              });\n            }\n          } else {\n            if (previousElements) {\n              previousElements.remove();\n              previousElements = null;\n            }\n            if (childScope) {\n              childScope.$destroy();\n              childScope = null;\n            }\n            if (block) {\n              previousElements = getBlockNodes(block.clone);\n              $animate.leave(previousElements).then(function() {\n                previousElements = null;\n              });\n              block = null;\n            }\n          }\n        });\n    }\n  };\n}];\n\n/**\n * @ngdoc directive\n * @name ngInclude\n * @restrict ECA\n *\n * @description\n * Fetches, compiles and includes an external HTML fragment.\n *\n * By default, the template URL is restricted to the same domain and protocol as the\n * application document. This is done by calling {@link $sce#getTrustedResourceUrl\n * $sce.getTrustedResourceUrl} on it. To load templates from other domains or protocols\n * you may either {@link ng.$sceDelegateProvider#resourceUrlWhitelist whitelist them} or\n * {@link $sce#trustAsResourceUrl wrap them} as trusted values. Refer to Angular's {@link\n * ng.$sce Strict Contextual Escaping}.\n *\n * In addition, the browser's\n * [Same Origin Policy](https://code.google.com/p/browsersec/wiki/Part2#Same-origin_policy_for_XMLHttpRequest)\n * and [Cross-Origin Resource Sharing (CORS)](http://www.w3.org/TR/cors/)\n * policy may further restrict whether the template is successfully loaded.\n * For example, `ngInclude` won't work for cross-domain requests on all browsers and for `file://`\n * access on some browsers.\n *\n * @animations\n * | Animation                        | Occurs                              |\n * |----------------------------------|-------------------------------------|\n * | {@link ng.$animate#enter enter}  | when the expression changes, on the new include |\n * | {@link ng.$animate#leave leave}  | when the expression changes, on the old include |\n *\n * The enter and leave animation occur concurrently.\n *\n * @scope\n * @priority 400\n *\n * @param {string} ngInclude|src angular expression evaluating to URL. If the source is a string constant,\n *                 make sure you wrap it in **single** quotes, e.g. `src=\"'myPartialTemplate.html'\"`.\n * @param {string=} onload Expression to evaluate when a new partial is loaded.\n *                  <div class=\"alert alert-warning\">\n *                  **Note:** When using onload on SVG elements in IE11, the browser will try to call\n *                  a function with the name on the window element, which will usually throw a\n *                  \"function is undefined\" error. To fix this, you can instead use `data-onload` or a\n *                  different form that {@link guide/directive#normalization matches} `onload`.\n *                  </div>\n   *\n * @param {string=} autoscroll Whether `ngInclude` should call {@link ng.$anchorScroll\n *                  $anchorScroll} to scroll the viewport after the content is loaded.\n *\n *                  - If the attribute is not set, disable scrolling.\n *                  - If the attribute is set without value, enable scrolling.\n *                  - Otherwise enable scrolling only if the expression evaluates to truthy value.\n *\n * @example\n  <example module=\"includeExample\" deps=\"angular-animate.js\" animations=\"true\">\n    <file name=\"index.html\">\n     <div ng-controller=\"ExampleController\">\n       <select ng-model=\"template\" ng-options=\"t.name for t in templates\">\n        <option value=\"\">(blank)</option>\n       </select>\n       url of the template: <code>{{template.url}}</code>\n       <hr/>\n       <div class=\"slide-animate-container\">\n         <div class=\"slide-animate\" ng-include=\"template.url\"></div>\n       </div>\n     </div>\n    </file>\n    <file name=\"script.js\">\n      angular.module('includeExample', ['ngAnimate'])\n        .controller('ExampleController', ['$scope', function($scope) {\n          $scope.templates =\n            [ { name: 'template1.html', url: 'template1.html'},\n              { name: 'template2.html', url: 'template2.html'} ];\n          $scope.template = $scope.templates[0];\n        }]);\n     </file>\n    <file name=\"template1.html\">\n      Content of template1.html\n    </file>\n    <file name=\"template2.html\">\n      Content of template2.html\n    </file>\n    <file name=\"animations.css\">\n      .slide-animate-container {\n        position:relative;\n        background:white;\n        border:1px solid black;\n        height:40px;\n        overflow:hidden;\n      }\n\n      .slide-animate {\n        padding:10px;\n      }\n\n      .slide-animate.ng-enter, .slide-animate.ng-leave {\n        transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s;\n\n        position:absolute;\n        top:0;\n        left:0;\n        right:0;\n        bottom:0;\n        display:block;\n        padding:10px;\n      }\n\n      .slide-animate.ng-enter {\n        top:-50px;\n      }\n      .slide-animate.ng-enter.ng-enter-active {\n        top:0;\n      }\n\n      .slide-animate.ng-leave {\n        top:0;\n      }\n      .slide-animate.ng-leave.ng-leave-active {\n        top:50px;\n      }\n    </file>\n    <file name=\"protractor.js\" type=\"protractor\">\n      var templateSelect = element(by.model('template'));\n      var includeElem = element(by.css('[ng-include]'));\n\n      it('should load template1.html', function() {\n        expect(includeElem.getText()).toMatch(/Content of template1.html/);\n      });\n\n      it('should load template2.html', function() {\n        if (browser.params.browser == 'firefox') {\n          // Firefox can't handle using selects\n          // See https://github.com/angular/protractor/issues/480\n          return;\n        }\n        templateSelect.click();\n        templateSelect.all(by.css('option')).get(2).click();\n        expect(includeElem.getText()).toMatch(/Content of template2.html/);\n      });\n\n      it('should change to blank', function() {\n        if (browser.params.browser == 'firefox') {\n          // Firefox can't handle using selects\n          return;\n        }\n        templateSelect.click();\n        templateSelect.all(by.css('option')).get(0).click();\n        expect(includeElem.isPresent()).toBe(false);\n      });\n    </file>\n  </example>\n */\n\n\n/**\n * @ngdoc event\n * @name ngInclude#$includeContentRequested\n * @eventType emit on the scope ngInclude was declared in\n * @description\n * Emitted every time the ngInclude content is requested.\n *\n * @param {Object} angularEvent Synthetic event object.\n * @param {String} src URL of content to load.\n */\n\n\n/**\n * @ngdoc event\n * @name ngInclude#$includeContentLoaded\n * @eventType emit on the current ngInclude scope\n * @description\n * Emitted every time the ngInclude content is reloaded.\n *\n * @param {Object} angularEvent Synthetic event object.\n * @param {String} src URL of content to load.\n */\n\n\n/**\n * @ngdoc event\n * @name ngInclude#$includeContentError\n * @eventType emit on the scope ngInclude was declared in\n * @description\n * Emitted when a template HTTP request yields an erroneous response (status < 200 || status > 299)\n *\n * @param {Object} angularEvent Synthetic event object.\n * @param {String} src URL of content to load.\n */\nvar ngIncludeDirective = ['$templateRequest', '$anchorScroll', '$animate',\n                  function($templateRequest,   $anchorScroll,   $animate) {\n  return {\n    restrict: 'ECA',\n    priority: 400,\n    terminal: true,\n    transclude: 'element',\n    controller: angular.noop,\n    compile: function(element, attr) {\n      var srcExp = attr.ngInclude || attr.src,\n          onloadExp = attr.onload || '',\n          autoScrollExp = attr.autoscroll;\n\n      return function(scope, $element, $attr, ctrl, $transclude) {\n        var changeCounter = 0,\n            currentScope,\n            previousElement,\n            currentElement;\n\n        var cleanupLastIncludeContent = function() {\n          if (previousElement) {\n            previousElement.remove();\n            previousElement = null;\n          }\n          if (currentScope) {\n            currentScope.$destroy();\n            currentScope = null;\n          }\n          if (currentElement) {\n            $animate.leave(currentElement).then(function() {\n              previousElement = null;\n            });\n            previousElement = currentElement;\n            currentElement = null;\n          }\n        };\n\n        scope.$watch(srcExp, function ngIncludeWatchAction(src) {\n          var afterAnimation = function() {\n            if (isDefined(autoScrollExp) && (!autoScrollExp || scope.$eval(autoScrollExp))) {\n              $anchorScroll();\n            }\n          };\n          var thisChangeId = ++changeCounter;\n\n          if (src) {\n            //set the 2nd param to true to ignore the template request error so that the inner\n            //contents and scope can be cleaned up.\n            $templateRequest(src, true).then(function(response) {\n              if (scope.$$destroyed) return;\n\n              if (thisChangeId !== changeCounter) return;\n              var newScope = scope.$new();\n              ctrl.template = response;\n\n              // Note: This will also link all children of ng-include that were contained in the original\n              // html. If that content contains controllers, ... they could pollute/change the scope.\n              // However, using ng-include on an element with additional content does not make sense...\n              // Note: We can't remove them in the cloneAttchFn of $transclude as that\n              // function is called before linking the content, which would apply child\n              // directives to non existing elements.\n              var clone = $transclude(newScope, function(clone) {\n                cleanupLastIncludeContent();\n                $animate.enter(clone, null, $element).then(afterAnimation);\n              });\n\n              currentScope = newScope;\n              currentElement = clone;\n\n              currentScope.$emit('$includeContentLoaded', src);\n              scope.$eval(onloadExp);\n            }, function() {\n              if (scope.$$destroyed) return;\n\n              if (thisChangeId === changeCounter) {\n                cleanupLastIncludeContent();\n                scope.$emit('$includeContentError', src);\n              }\n            });\n            scope.$emit('$includeContentRequested', src);\n          } else {\n            cleanupLastIncludeContent();\n            ctrl.template = null;\n          }\n        });\n      };\n    }\n  };\n}];\n\n// This directive is called during the $transclude call of the first `ngInclude` directive.\n// It will replace and compile the content of the element with the loaded template.\n// We need this directive so that the element content is already filled when\n// the link function of another directive on the same element as ngInclude\n// is called.\nvar ngIncludeFillContentDirective = ['$compile',\n  function($compile) {\n    return {\n      restrict: 'ECA',\n      priority: -400,\n      require: 'ngInclude',\n      link: function(scope, $element, $attr, ctrl) {\n        if (toString.call($element[0]).match(/SVG/)) {\n          // WebKit: https://bugs.webkit.org/show_bug.cgi?id=135698 --- SVG elements do not\n          // support innerHTML, so detect this here and try to generate the contents\n          // specially.\n          $element.empty();\n          $compile(jqLiteBuildFragment(ctrl.template, window.document).childNodes)(scope,\n              function namespaceAdaptedClone(clone) {\n            $element.append(clone);\n          }, {futureParentElement: $element});\n          return;\n        }\n\n        $element.html(ctrl.template);\n        $compile($element.contents())(scope);\n      }\n    };\n  }];\n\n/**\n * @ngdoc directive\n * @name ngInit\n * @restrict AC\n *\n * @description\n * The `ngInit` directive allows you to evaluate an expression in the\n * current scope.\n *\n * <div class=\"alert alert-danger\">\n * This directive can be abused to add unnecessary amounts of logic into your templates.\n * There are only a few appropriate uses of `ngInit`, such as for aliasing special properties of\n * {@link ng.directive:ngRepeat `ngRepeat`}, as seen in the demo below; and for injecting data via\n * server side scripting. Besides these few cases, you should use {@link guide/controller controllers}\n * rather than `ngInit` to initialize values on a scope.\n * </div>\n *\n * <div class=\"alert alert-warning\">\n * **Note**: If you have assignment in `ngInit` along with a {@link ng.$filter `filter`}, make\n * sure you have parentheses to ensure correct operator precedence:\n * <pre class=\"prettyprint\">\n * `<div ng-init=\"test1 = ($index | toString)\"></div>`\n * </pre>\n * </div>\n *\n * @priority 450\n *\n * @element ANY\n * @param {expression} ngInit {@link guide/expression Expression} to eval.\n *\n * @example\n   <example module=\"initExample\">\n     <file name=\"index.html\">\n   <script>\n     angular.module('initExample', [])\n       .controller('ExampleController', ['$scope', function($scope) {\n         $scope.list = [['a', 'b'], ['c', 'd']];\n       }]);\n   </script>\n   <div ng-controller=\"ExampleController\">\n     <div ng-repeat=\"innerList in list\" ng-init=\"outerIndex = $index\">\n       <div ng-repeat=\"value in innerList\" ng-init=\"innerIndex = $index\">\n          <span class=\"example-init\">list[ {{outerIndex}} ][ {{innerIndex}} ] = {{value}};</span>\n       </div>\n     </div>\n   </div>\n     </file>\n     <file name=\"protractor.js\" type=\"protractor\">\n       it('should alias index positions', function() {\n         var elements = element.all(by.css('.example-init'));\n         expect(elements.get(0).getText()).toBe('list[ 0 ][ 0 ] = a;');\n         expect(elements.get(1).getText()).toBe('list[ 0 ][ 1 ] = b;');\n         expect(elements.get(2).getText()).toBe('list[ 1 ][ 0 ] = c;');\n         expect(elements.get(3).getText()).toBe('list[ 1 ][ 1 ] = d;');\n       });\n     </file>\n   </example>\n */\nvar ngInitDirective = ngDirective({\n  priority: 450,\n  compile: function() {\n    return {\n      pre: function(scope, element, attrs) {\n        scope.$eval(attrs.ngInit);\n      }\n    };\n  }\n});\n\n/**\n * @ngdoc directive\n * @name ngList\n *\n * @description\n * Text input that converts between a delimited string and an array of strings. The default\n * delimiter is a comma followed by a space - equivalent to `ng-list=\", \"`. You can specify a custom\n * delimiter as the value of the `ngList` attribute - for example, `ng-list=\" | \"`.\n *\n * The behaviour of the directive is affected by the use of the `ngTrim` attribute.\n * * If `ngTrim` is set to `\"false\"` then whitespace around both the separator and each\n *   list item is respected. This implies that the user of the directive is responsible for\n *   dealing with whitespace but also allows you to use whitespace as a delimiter, such as a\n *   tab or newline character.\n * * Otherwise whitespace around the delimiter is ignored when splitting (although it is respected\n *   when joining the list items back together) and whitespace around each list item is stripped\n *   before it is added to the model.\n *\n * ### Example with Validation\n *\n * <example name=\"ngList-directive\" module=\"listExample\">\n *   <file name=\"app.js\">\n *      angular.module('listExample', [])\n *        .controller('ExampleController', ['$scope', function($scope) {\n *          $scope.names = ['morpheus', 'neo', 'trinity'];\n *        }]);\n *   </file>\n *   <file name=\"index.html\">\n *    <form name=\"myForm\" ng-controller=\"ExampleController\">\n *      <label>List: <input name=\"namesInput\" ng-model=\"names\" ng-list required></label>\n *      <span role=\"alert\">\n *        <span class=\"error\" ng-show=\"myForm.namesInput.$error.required\">\n *        Required!</span>\n *      </span>\n *      <br>\n *      <tt>names = {{names}}</tt><br/>\n *      <tt>myForm.namesInput.$valid = {{myForm.namesInput.$valid}}</tt><br/>\n *      <tt>myForm.namesInput.$error = {{myForm.namesInput.$error}}</tt><br/>\n *      <tt>myForm.$valid = {{myForm.$valid}}</tt><br/>\n *      <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br/>\n *     </form>\n *   </file>\n *   <file name=\"protractor.js\" type=\"protractor\">\n *     var listInput = element(by.model('names'));\n *     var names = element(by.exactBinding('names'));\n *     var valid = element(by.binding('myForm.namesInput.$valid'));\n *     var error = element(by.css('span.error'));\n *\n *     it('should initialize to model', function() {\n *       expect(names.getText()).toContain('[\"morpheus\",\"neo\",\"trinity\"]');\n *       expect(valid.getText()).toContain('true');\n *       expect(error.getCssValue('display')).toBe('none');\n *     });\n *\n *     it('should be invalid if empty', function() {\n *       listInput.clear();\n *       listInput.sendKeys('');\n *\n *       expect(names.getText()).toContain('');\n *       expect(valid.getText()).toContain('false');\n *       expect(error.getCssValue('display')).not.toBe('none');\n *     });\n *   </file>\n * </example>\n *\n * ### Example - splitting on newline\n * <example name=\"ngList-directive-newlines\">\n *   <file name=\"index.html\">\n *    <textarea ng-model=\"list\" ng-list=\"&#10;\" ng-trim=\"false\"></textarea>\n *    <pre>{{ list | json }}</pre>\n *   </file>\n *   <file name=\"protractor.js\" type=\"protractor\">\n *     it(\"should split the text by newlines\", function() {\n *       var listInput = element(by.model('list'));\n *       var output = element(by.binding('list | json'));\n *       listInput.sendKeys('abc\\ndef\\nghi');\n *       expect(output.getText()).toContain('[\\n  \"abc\",\\n  \"def\",\\n  \"ghi\"\\n]');\n *     });\n *   </file>\n * </example>\n *\n * @element input\n * @param {string=} ngList optional delimiter that should be used to split the value.\n */\nvar ngListDirective = function() {\n  return {\n    restrict: 'A',\n    priority: 100,\n    require: 'ngModel',\n    link: function(scope, element, attr, ctrl) {\n      // We want to control whitespace trimming so we use this convoluted approach\n      // to access the ngList attribute, which doesn't pre-trim the attribute\n      var ngList = element.attr(attr.$attr.ngList) || ', ';\n      var trimValues = attr.ngTrim !== 'false';\n      var separator = trimValues ? trim(ngList) : ngList;\n\n      var parse = function(viewValue) {\n        // If the viewValue is invalid (say required but empty) it will be `undefined`\n        if (isUndefined(viewValue)) return;\n\n        var list = [];\n\n        if (viewValue) {\n          forEach(viewValue.split(separator), function(value) {\n            if (value) list.push(trimValues ? trim(value) : value);\n          });\n        }\n\n        return list;\n      };\n\n      ctrl.$parsers.push(parse);\n      ctrl.$formatters.push(function(value) {\n        if (isArray(value)) {\n          return value.join(ngList);\n        }\n\n        return undefined;\n      });\n\n      // Override the standard $isEmpty because an empty array means the input is empty.\n      ctrl.$isEmpty = function(value) {\n        return !value || !value.length;\n      };\n    }\n  };\n};\n\n/* global VALID_CLASS: true,\n  INVALID_CLASS: true,\n  PRISTINE_CLASS: true,\n  DIRTY_CLASS: true,\n  UNTOUCHED_CLASS: true,\n  TOUCHED_CLASS: true,\n*/\n\nvar VALID_CLASS = 'ng-valid',\n    INVALID_CLASS = 'ng-invalid',\n    PRISTINE_CLASS = 'ng-pristine',\n    DIRTY_CLASS = 'ng-dirty',\n    UNTOUCHED_CLASS = 'ng-untouched',\n    TOUCHED_CLASS = 'ng-touched',\n    PENDING_CLASS = 'ng-pending',\n    EMPTY_CLASS = 'ng-empty',\n    NOT_EMPTY_CLASS = 'ng-not-empty';\n\nvar ngModelMinErr = minErr('ngModel');\n\n/**\n * @ngdoc type\n * @name ngModel.NgModelController\n *\n * @property {*} $viewValue The actual value from the control's view. For `input` elements, this is a\n * String. See {@link ngModel.NgModelController#$setViewValue} for information about when the $viewValue\n * is set.\n * @property {*} $modelValue The value in the model that the control is bound to.\n * @property {Array.<Function>} $parsers Array of functions to execute, as a pipeline, whenever\n       the control reads value from the DOM. The functions are called in array order, each passing\n       its return value through to the next. The last return value is forwarded to the\n       {@link ngModel.NgModelController#$validators `$validators`} collection.\n\nParsers are used to sanitize / convert the {@link ngModel.NgModelController#$viewValue\n`$viewValue`}.\n\nReturning `undefined` from a parser means a parse error occurred. In that case,\nno {@link ngModel.NgModelController#$validators `$validators`} will run and the `ngModel`\nwill be set to `undefined` unless {@link ngModelOptions `ngModelOptions.allowInvalid`}\nis set to `true`. The parse error is stored in `ngModel.$error.parse`.\n\n *\n * @property {Array.<Function>} $formatters Array of functions to execute, as a pipeline, whenever\n       the model value changes. The functions are called in reverse array order, each passing the value through to the\n       next. The last return value is used as the actual DOM value.\n       Used to format / convert values for display in the control.\n * ```js\n * function formatter(value) {\n *   if (value) {\n *     return value.toUpperCase();\n *   }\n * }\n * ngModel.$formatters.push(formatter);\n * ```\n *\n * @property {Object.<string, function>} $validators A collection of validators that are applied\n *      whenever the model value changes. The key value within the object refers to the name of the\n *      validator while the function refers to the validation operation. The validation operation is\n *      provided with the model value as an argument and must return a true or false value depending\n *      on the response of that validation.\n *\n * ```js\n * ngModel.$validators.validCharacters = function(modelValue, viewValue) {\n *   var value = modelValue || viewValue;\n *   return /[0-9]+/.test(value) &&\n *          /[a-z]+/.test(value) &&\n *          /[A-Z]+/.test(value) &&\n *          /\\W+/.test(value);\n * };\n * ```\n *\n * @property {Object.<string, function>} $asyncValidators A collection of validations that are expected to\n *      perform an asynchronous validation (e.g. a HTTP request). The validation function that is provided\n *      is expected to return a promise when it is run during the model validation process. Once the promise\n *      is delivered then the validation status will be set to true when fulfilled and false when rejected.\n *      When the asynchronous validators are triggered, each of the validators will run in parallel and the model\n *      value will only be updated once all validators have been fulfilled. As long as an asynchronous validator\n *      is unfulfilled, its key will be added to the controllers `$pending` property. Also, all asynchronous validators\n *      will only run once all synchronous validators have passed.\n *\n * Please note that if $http is used then it is important that the server returns a success HTTP response code\n * in order to fulfill the validation and a status level of `4xx` in order to reject the validation.\n *\n * ```js\n * ngModel.$asyncValidators.uniqueUsername = function(modelValue, viewValue) {\n *   var value = modelValue || viewValue;\n *\n *   // Lookup user by username\n *   return $http.get('/api/users/' + value).\n *      then(function resolved() {\n *        //username exists, this means validation fails\n *        return $q.reject('exists');\n *      }, function rejected() {\n *        //username does not exist, therefore this validation passes\n *        return true;\n *      });\n * };\n * ```\n *\n * @property {Array.<Function>} $viewChangeListeners Array of functions to execute whenever the\n *     view value has changed. It is called with no arguments, and its return value is ignored.\n *     This can be used in place of additional $watches against the model value.\n *\n * @property {Object} $error An object hash with all failing validator ids as keys.\n * @property {Object} $pending An object hash with all pending validator ids as keys.\n *\n * @property {boolean} $untouched True if control has not lost focus yet.\n * @property {boolean} $touched True if control has lost focus.\n * @property {boolean} $pristine True if user has not interacted with the control yet.\n * @property {boolean} $dirty True if user has already interacted with the control.\n * @property {boolean} $valid True if there is no error.\n * @property {boolean} $invalid True if at least one error on the control.\n * @property {string} $name The name attribute of the control.\n *\n * @description\n *\n * `NgModelController` provides API for the {@link ngModel `ngModel`} directive.\n * The controller contains services for data-binding, validation, CSS updates, and value formatting\n * and parsing. It purposefully does not contain any logic which deals with DOM rendering or\n * listening to DOM events.\n * Such DOM related logic should be provided by other directives which make use of\n * `NgModelController` for data-binding to control elements.\n * Angular provides this DOM logic for most {@link input `input`} elements.\n * At the end of this page you can find a {@link ngModel.NgModelController#custom-control-example\n * custom control example} that uses `ngModelController` to bind to `contenteditable` elements.\n *\n * @example\n * ### Custom Control Example\n * This example shows how to use `NgModelController` with a custom control to achieve\n * data-binding. Notice how different directives (`contenteditable`, `ng-model`, and `required`)\n * collaborate together to achieve the desired result.\n *\n * `contenteditable` is an HTML5 attribute, which tells the browser to let the element\n * contents be edited in place by the user.\n *\n * We are using the {@link ng.service:$sce $sce} service here and include the {@link ngSanitize $sanitize}\n * module to automatically remove \"bad\" content like inline event listener (e.g. `<span onclick=\"...\">`).\n * However, as we are using `$sce` the model can still decide to provide unsafe content if it marks\n * that content using the `$sce` service.\n *\n * <example name=\"NgModelController\" module=\"customControl\" deps=\"angular-sanitize.js\">\n    <file name=\"style.css\">\n      [contenteditable] {\n        border: 1px solid black;\n        background-color: white;\n        min-height: 20px;\n      }\n\n      .ng-invalid {\n        border: 1px solid red;\n      }\n\n    </file>\n    <file name=\"script.js\">\n      angular.module('customControl', ['ngSanitize']).\n        directive('contenteditable', ['$sce', function($sce) {\n          return {\n            restrict: 'A', // only activate on element attribute\n            require: '?ngModel', // get a hold of NgModelController\n            link: function(scope, element, attrs, ngModel) {\n              if (!ngModel) return; // do nothing if no ng-model\n\n              // Specify how UI should be updated\n              ngModel.$render = function() {\n                element.html($sce.getTrustedHtml(ngModel.$viewValue || ''));\n              };\n\n              // Listen for change events to enable binding\n              element.on('blur keyup change', function() {\n                scope.$evalAsync(read);\n              });\n              read(); // initialize\n\n              // Write data to the model\n              function read() {\n                var html = element.html();\n                // When we clear the content editable the browser leaves a <br> behind\n                // If strip-br attribute is provided then we strip this out\n                if ( attrs.stripBr && html == '<br>' ) {\n                  html = '';\n                }\n                ngModel.$setViewValue(html);\n              }\n            }\n          };\n        }]);\n    </file>\n    <file name=\"index.html\">\n      <form name=\"myForm\">\n       <div contenteditable\n            name=\"myWidget\" ng-model=\"userContent\"\n            strip-br=\"true\"\n            required>Change me!</div>\n        <span ng-show=\"myForm.myWidget.$error.required\">Required!</span>\n       <hr>\n       <textarea ng-model=\"userContent\" aria-label=\"Dynamic textarea\"></textarea>\n      </form>\n    </file>\n    <file name=\"protractor.js\" type=\"protractor\">\n    it('should data-bind and become invalid', function() {\n      if (browser.params.browser == 'safari' || browser.params.browser == 'firefox') {\n        // SafariDriver can't handle contenteditable\n        // and Firefox driver can't clear contenteditables very well\n        return;\n      }\n      var contentEditable = element(by.css('[contenteditable]'));\n      var content = 'Change me!';\n\n      expect(contentEditable.getText()).toEqual(content);\n\n      contentEditable.clear();\n      contentEditable.sendKeys(protractor.Key.BACK_SPACE);\n      expect(contentEditable.getText()).toEqual('');\n      expect(contentEditable.getAttribute('class')).toMatch(/ng-invalid-required/);\n    });\n    </file>\n * </example>\n *\n *\n */\nvar NgModelController = ['$scope', '$exceptionHandler', '$attrs', '$element', '$parse', '$animate', '$timeout', '$rootScope', '$q', '$interpolate',\n    function($scope, $exceptionHandler, $attr, $element, $parse, $animate, $timeout, $rootScope, $q, $interpolate) {\n  this.$viewValue = Number.NaN;\n  this.$modelValue = Number.NaN;\n  this.$$rawModelValue = undefined; // stores the parsed modelValue / model set from scope regardless of validity.\n  this.$validators = {};\n  this.$asyncValidators = {};\n  this.$parsers = [];\n  this.$formatters = [];\n  this.$viewChangeListeners = [];\n  this.$untouched = true;\n  this.$touched = false;\n  this.$pristine = true;\n  this.$dirty = false;\n  this.$valid = true;\n  this.$invalid = false;\n  this.$error = {}; // keep invalid keys here\n  this.$$success = {}; // keep valid keys here\n  this.$pending = undefined; // keep pending keys here\n  this.$name = $interpolate($attr.name || '', false)($scope);\n  this.$$parentForm = nullFormCtrl;\n\n  var parsedNgModel = $parse($attr.ngModel),\n      parsedNgModelAssign = parsedNgModel.assign,\n      ngModelGet = parsedNgModel,\n      ngModelSet = parsedNgModelAssign,\n      pendingDebounce = null,\n      parserValid,\n      ctrl = this;\n\n  this.$$setOptions = function(options) {\n    ctrl.$options = options;\n    if (options && options.getterSetter) {\n      var invokeModelGetter = $parse($attr.ngModel + '()'),\n          invokeModelSetter = $parse($attr.ngModel + '($$$p)');\n\n      ngModelGet = function($scope) {\n        var modelValue = parsedNgModel($scope);\n        if (isFunction(modelValue)) {\n          modelValue = invokeModelGetter($scope);\n        }\n        return modelValue;\n      };\n      ngModelSet = function($scope, newValue) {\n        if (isFunction(parsedNgModel($scope))) {\n          invokeModelSetter($scope, {$$$p: newValue});\n        } else {\n          parsedNgModelAssign($scope, newValue);\n        }\n      };\n    } else if (!parsedNgModel.assign) {\n      throw ngModelMinErr('nonassign', \"Expression '{0}' is non-assignable. Element: {1}\",\n          $attr.ngModel, startingTag($element));\n    }\n  };\n\n  /**\n   * @ngdoc method\n   * @name ngModel.NgModelController#$render\n   *\n   * @description\n   * Called when the view needs to be updated. It is expected that the user of the ng-model\n   * directive will implement this method.\n   *\n   * The `$render()` method is invoked in the following situations:\n   *\n   * * `$rollbackViewValue()` is called.  If we are rolling back the view value to the last\n   *   committed value then `$render()` is called to update the input control.\n   * * The value referenced by `ng-model` is changed programmatically and both the `$modelValue` and\n   *   the `$viewValue` are different from last time.\n   *\n   * Since `ng-model` does not do a deep watch, `$render()` is only invoked if the values of\n   * `$modelValue` and `$viewValue` are actually different from their previous values. If `$modelValue`\n   * or `$viewValue` are objects (rather than a string or number) then `$render()` will not be\n   * invoked if you only change a property on the objects.\n   */\n  this.$render = noop;\n\n  /**\n   * @ngdoc method\n   * @name ngModel.NgModelController#$isEmpty\n   *\n   * @description\n   * This is called when we need to determine if the value of an input is empty.\n   *\n   * For instance, the required directive does this to work out if the input has data or not.\n   *\n   * The default `$isEmpty` function checks whether the value is `undefined`, `''`, `null` or `NaN`.\n   *\n   * You can override this for input directives whose concept of being empty is different from the\n   * default. The `checkboxInputType` directive does this because in its case a value of `false`\n   * implies empty.\n   *\n   * @param {*} value The value of the input to check for emptiness.\n   * @returns {boolean} True if `value` is \"empty\".\n   */\n  this.$isEmpty = function(value) {\n    return isUndefined(value) || value === '' || value === null || value !== value;\n  };\n\n  this.$$updateEmptyClasses = function(value) {\n    if (ctrl.$isEmpty(value)) {\n      $animate.removeClass($element, NOT_EMPTY_CLASS);\n      $animate.addClass($element, EMPTY_CLASS);\n    } else {\n      $animate.removeClass($element, EMPTY_CLASS);\n      $animate.addClass($element, NOT_EMPTY_CLASS);\n    }\n  };\n\n\n  var currentValidationRunId = 0;\n\n  /**\n   * @ngdoc method\n   * @name ngModel.NgModelController#$setValidity\n   *\n   * @description\n   * Change the validity state, and notify the form.\n   *\n   * This method can be called within $parsers/$formatters or a custom validation implementation.\n   * However, in most cases it should be sufficient to use the `ngModel.$validators` and\n   * `ngModel.$asyncValidators` collections which will call `$setValidity` automatically.\n   *\n   * @param {string} validationErrorKey Name of the validator. The `validationErrorKey` will be assigned\n   *        to either `$error[validationErrorKey]` or `$pending[validationErrorKey]`\n   *        (for unfulfilled `$asyncValidators`), so that it is available for data-binding.\n   *        The `validationErrorKey` should be in camelCase and will get converted into dash-case\n   *        for class name. Example: `myError` will result in `ng-valid-my-error` and `ng-invalid-my-error`\n   *        class and can be bound to as  `{{someForm.someControl.$error.myError}}` .\n   * @param {boolean} isValid Whether the current state is valid (true), invalid (false), pending (undefined),\n   *                          or skipped (null). Pending is used for unfulfilled `$asyncValidators`.\n   *                          Skipped is used by Angular when validators do not run because of parse errors and\n   *                          when `$asyncValidators` do not run because any of the `$validators` failed.\n   */\n  addSetValidityMethod({\n    ctrl: this,\n    $element: $element,\n    set: function(object, property) {\n      object[property] = true;\n    },\n    unset: function(object, property) {\n      delete object[property];\n    },\n    $animate: $animate\n  });\n\n  /**\n   * @ngdoc method\n   * @name ngModel.NgModelController#$setPristine\n   *\n   * @description\n   * Sets the control to its pristine state.\n   *\n   * This method can be called to remove the `ng-dirty` class and set the control to its pristine\n   * state (`ng-pristine` class). A model is considered to be pristine when the control\n   * has not been changed from when first compiled.\n   */\n  this.$setPristine = function() {\n    ctrl.$dirty = false;\n    ctrl.$pristine = true;\n    $animate.removeClass($element, DIRTY_CLASS);\n    $animate.addClass($element, PRISTINE_CLASS);\n  };\n\n  /**\n   * @ngdoc method\n   * @name ngModel.NgModelController#$setDirty\n   *\n   * @description\n   * Sets the control to its dirty state.\n   *\n   * This method can be called to remove the `ng-pristine` class and set the control to its dirty\n   * state (`ng-dirty` class). A model is considered to be dirty when the control has been changed\n   * from when first compiled.\n   */\n  this.$setDirty = function() {\n    ctrl.$dirty = true;\n    ctrl.$pristine = false;\n    $animate.removeClass($element, PRISTINE_CLASS);\n    $animate.addClass($element, DIRTY_CLASS);\n    ctrl.$$parentForm.$setDirty();\n  };\n\n  /**\n   * @ngdoc method\n   * @name ngModel.NgModelController#$setUntouched\n   *\n   * @description\n   * Sets the control to its untouched state.\n   *\n   * This method can be called to remove the `ng-touched` class and set the control to its\n   * untouched state (`ng-untouched` class). Upon compilation, a model is set as untouched\n   * by default, however this function can be used to restore that state if the model has\n   * already been touched by the user.\n   */\n  this.$setUntouched = function() {\n    ctrl.$touched = false;\n    ctrl.$untouched = true;\n    $animate.setClass($element, UNTOUCHED_CLASS, TOUCHED_CLASS);\n  };\n\n  /**\n   * @ngdoc method\n   * @name ngModel.NgModelController#$setTouched\n   *\n   * @description\n   * Sets the control to its touched state.\n   *\n   * This method can be called to remove the `ng-untouched` class and set the control to its\n   * touched state (`ng-touched` class). A model is considered to be touched when the user has\n   * first focused the control element and then shifted focus away from the control (blur event).\n   */\n  this.$setTouched = function() {\n    ctrl.$touched = true;\n    ctrl.$untouched = false;\n    $animate.setClass($element, TOUCHED_CLASS, UNTOUCHED_CLASS);\n  };\n\n  /**\n   * @ngdoc method\n   * @name ngModel.NgModelController#$rollbackViewValue\n   *\n   * @description\n   * Cancel an update and reset the input element's value to prevent an update to the `$modelValue`,\n   * which may be caused by a pending debounced event or because the input is waiting for a some\n   * future event.\n   *\n   * If you have an input that uses `ng-model-options` to set up debounced updates or updates that\n   * depend on special events such as blur, you can have a situation where there is a period when\n   * the `$viewValue` is out of sync with the ngModel's `$modelValue`.\n   *\n   * In this case, you can use `$rollbackViewValue()` to manually cancel the debounced / future update\n   * and reset the input to the last committed view value.\n   *\n   * It is also possible that you run into difficulties if you try to update the ngModel's `$modelValue`\n   * programmatically before these debounced/future events have resolved/occurred, because Angular's\n   * dirty checking mechanism is not able to tell whether the model has actually changed or not.\n   *\n   * The `$rollbackViewValue()` method should be called before programmatically changing the model of an\n   * input which may have such events pending. This is important in order to make sure that the\n   * input field will be updated with the new model value and any pending operations are cancelled.\n   *\n   * <example name=\"ng-model-cancel-update\" module=\"cancel-update-example\">\n   *   <file name=\"app.js\">\n   *     angular.module('cancel-update-example', [])\n   *\n   *     .controller('CancelUpdateController', ['$scope', function($scope) {\n   *       $scope.model = {};\n   *\n   *       $scope.setEmpty = function(e, value, rollback) {\n   *         if (e.keyCode == 27) {\n   *           e.preventDefault();\n   *           if (rollback) {\n   *             $scope.myForm[value].$rollbackViewValue();\n   *           }\n   *           $scope.model[value] = '';\n   *         }\n   *       };\n   *     }]);\n   *   </file>\n   *   <file name=\"index.html\">\n   *     <div ng-controller=\"CancelUpdateController\">\n   *        <p>Both of these inputs are only updated if they are blurred. Hitting escape should\n   *        empty them. Follow these steps and observe the difference:</p>\n   *       <ol>\n   *         <li>Type something in the input. You will see that the model is not yet updated</li>\n   *         <li>Press the Escape key.\n   *           <ol>\n   *             <li> In the first example, nothing happens, because the model is already '', and no\n   *             update is detected. If you blur the input, the model will be set to the current view.\n   *             </li>\n   *             <li> In the second example, the pending update is cancelled, and the input is set back\n   *             to the last committed view value (''). Blurring the input does nothing.\n   *             </li>\n   *           </ol>\n   *         </li>\n   *       </ol>\n   *\n   *       <form name=\"myForm\" ng-model-options=\"{ updateOn: 'blur' }\">\n   *         <div>\n   *        <p id=\"inputDescription1\">Without $rollbackViewValue():</p>\n   *         <input name=\"value1\" aria-describedby=\"inputDescription1\" ng-model=\"model.value1\"\n   *                ng-keydown=\"setEmpty($event, 'value1')\">\n   *         value1: \"{{ model.value1 }}\"\n   *         </div>\n   *\n   *         <div>\n   *        <p id=\"inputDescription2\">With $rollbackViewValue():</p>\n   *         <input name=\"value2\" aria-describedby=\"inputDescription2\" ng-model=\"model.value2\"\n   *                ng-keydown=\"setEmpty($event, 'value2', true)\">\n   *         value2: \"{{ model.value2 }}\"\n   *         </div>\n   *       </form>\n   *     </div>\n   *   </file>\n       <file name=\"style.css\">\n          div {\n            display: table-cell;\n          }\n          div:nth-child(1) {\n            padding-right: 30px;\n          }\n\n        </file>\n   * </example>\n   */\n  this.$rollbackViewValue = function() {\n    $timeout.cancel(pendingDebounce);\n    ctrl.$viewValue = ctrl.$$lastCommittedViewValue;\n    ctrl.$render();\n  };\n\n  /**\n   * @ngdoc method\n   * @name ngModel.NgModelController#$validate\n   *\n   * @description\n   * Runs each of the registered validators (first synchronous validators and then\n   * asynchronous validators).\n   * If the validity changes to invalid, the model will be set to `undefined`,\n   * unless {@link ngModelOptions `ngModelOptions.allowInvalid`} is `true`.\n   * If the validity changes to valid, it will set the model to the last available valid\n   * `$modelValue`, i.e. either the last parsed value or the last value set from the scope.\n   */\n  this.$validate = function() {\n    // ignore $validate before model is initialized\n    if (isNumber(ctrl.$modelValue) && isNaN(ctrl.$modelValue)) {\n      return;\n    }\n\n    var viewValue = ctrl.$$lastCommittedViewValue;\n    // Note: we use the $$rawModelValue as $modelValue might have been\n    // set to undefined during a view -> model update that found validation\n    // errors. We can't parse the view here, since that could change\n    // the model although neither viewValue nor the model on the scope changed\n    var modelValue = ctrl.$$rawModelValue;\n\n    var prevValid = ctrl.$valid;\n    var prevModelValue = ctrl.$modelValue;\n\n    var allowInvalid = ctrl.$options && ctrl.$options.allowInvalid;\n\n    ctrl.$$runValidators(modelValue, viewValue, function(allValid) {\n      // If there was no change in validity, don't update the model\n      // This prevents changing an invalid modelValue to undefined\n      if (!allowInvalid && prevValid !== allValid) {\n        // Note: Don't check ctrl.$valid here, as we could have\n        // external validators (e.g. calculated on the server),\n        // that just call $setValidity and need the model value\n        // to calculate their validity.\n        ctrl.$modelValue = allValid ? modelValue : undefined;\n\n        if (ctrl.$modelValue !== prevModelValue) {\n          ctrl.$$writeModelToScope();\n        }\n      }\n    });\n\n  };\n\n  this.$$runValidators = function(modelValue, viewValue, doneCallback) {\n    currentValidationRunId++;\n    var localValidationRunId = currentValidationRunId;\n\n    // check parser error\n    if (!processParseErrors()) {\n      validationDone(false);\n      return;\n    }\n    if (!processSyncValidators()) {\n      validationDone(false);\n      return;\n    }\n    processAsyncValidators();\n\n    function processParseErrors() {\n      var errorKey = ctrl.$$parserName || 'parse';\n      if (isUndefined(parserValid)) {\n        setValidity(errorKey, null);\n      } else {\n        if (!parserValid) {\n          forEach(ctrl.$validators, function(v, name) {\n            setValidity(name, null);\n          });\n          forEach(ctrl.$asyncValidators, function(v, name) {\n            setValidity(name, null);\n          });\n        }\n        // Set the parse error last, to prevent unsetting it, should a $validators key == parserName\n        setValidity(errorKey, parserValid);\n        return parserValid;\n      }\n      return true;\n    }\n\n    function processSyncValidators() {\n      var syncValidatorsValid = true;\n      forEach(ctrl.$validators, function(validator, name) {\n        var result = validator(modelValue, viewValue);\n        syncValidatorsValid = syncValidatorsValid && result;\n        setValidity(name, result);\n      });\n      if (!syncValidatorsValid) {\n        forEach(ctrl.$asyncValidators, function(v, name) {\n          setValidity(name, null);\n        });\n        return false;\n      }\n      return true;\n    }\n\n    function processAsyncValidators() {\n      var validatorPromises = [];\n      var allValid = true;\n      forEach(ctrl.$asyncValidators, function(validator, name) {\n        var promise = validator(modelValue, viewValue);\n        if (!isPromiseLike(promise)) {\n          throw ngModelMinErr('nopromise',\n            \"Expected asynchronous validator to return a promise but got '{0}' instead.\", promise);\n        }\n        setValidity(name, undefined);\n        validatorPromises.push(promise.then(function() {\n          setValidity(name, true);\n        }, function() {\n          allValid = false;\n          setValidity(name, false);\n        }));\n      });\n      if (!validatorPromises.length) {\n        validationDone(true);\n      } else {\n        $q.all(validatorPromises).then(function() {\n          validationDone(allValid);\n        }, noop);\n      }\n    }\n\n    function setValidity(name, isValid) {\n      if (localValidationRunId === currentValidationRunId) {\n        ctrl.$setValidity(name, isValid);\n      }\n    }\n\n    function validationDone(allValid) {\n      if (localValidationRunId === currentValidationRunId) {\n\n        doneCallback(allValid);\n      }\n    }\n  };\n\n  /**\n   * @ngdoc method\n   * @name ngModel.NgModelController#$commitViewValue\n   *\n   * @description\n   * Commit a pending update to the `$modelValue`.\n   *\n   * Updates may be pending by a debounced event or because the input is waiting for a some future\n   * event defined in `ng-model-options`. this method is rarely needed as `NgModelController`\n   * usually handles calling this in response to input events.\n   */\n  this.$commitViewValue = function() {\n    var viewValue = ctrl.$viewValue;\n\n    $timeout.cancel(pendingDebounce);\n\n    // If the view value has not changed then we should just exit, except in the case where there is\n    // a native validator on the element. In this case the validation state may have changed even though\n    // the viewValue has stayed empty.\n    if (ctrl.$$lastCommittedViewValue === viewValue && (viewValue !== '' || !ctrl.$$hasNativeValidators)) {\n      return;\n    }\n    ctrl.$$updateEmptyClasses(viewValue);\n    ctrl.$$lastCommittedViewValue = viewValue;\n\n    // change to dirty\n    if (ctrl.$pristine) {\n      this.$setDirty();\n    }\n    this.$$parseAndValidate();\n  };\n\n  this.$$parseAndValidate = function() {\n    var viewValue = ctrl.$$lastCommittedViewValue;\n    var modelValue = viewValue;\n    parserValid = isUndefined(modelValue) ? undefined : true;\n\n    if (parserValid) {\n      for (var i = 0; i < ctrl.$parsers.length; i++) {\n        modelValue = ctrl.$parsers[i](modelValue);\n        if (isUndefined(modelValue)) {\n          parserValid = false;\n          break;\n        }\n      }\n    }\n    if (isNumber(ctrl.$modelValue) && isNaN(ctrl.$modelValue)) {\n      // ctrl.$modelValue has not been touched yet...\n      ctrl.$modelValue = ngModelGet($scope);\n    }\n    var prevModelValue = ctrl.$modelValue;\n    var allowInvalid = ctrl.$options && ctrl.$options.allowInvalid;\n    ctrl.$$rawModelValue = modelValue;\n\n    if (allowInvalid) {\n      ctrl.$modelValue = modelValue;\n      writeToModelIfNeeded();\n    }\n\n    // Pass the $$lastCommittedViewValue here, because the cached viewValue might be out of date.\n    // This can happen if e.g. $setViewValue is called from inside a parser\n    ctrl.$$runValidators(modelValue, ctrl.$$lastCommittedViewValue, function(allValid) {\n      if (!allowInvalid) {\n        // Note: Don't check ctrl.$valid here, as we could have\n        // external validators (e.g. calculated on the server),\n        // that just call $setValidity and need the model value\n        // to calculate their validity.\n        ctrl.$modelValue = allValid ? modelValue : undefined;\n        writeToModelIfNeeded();\n      }\n    });\n\n    function writeToModelIfNeeded() {\n      if (ctrl.$modelValue !== prevModelValue) {\n        ctrl.$$writeModelToScope();\n      }\n    }\n  };\n\n  this.$$writeModelToScope = function() {\n    ngModelSet($scope, ctrl.$modelValue);\n    forEach(ctrl.$viewChangeListeners, function(listener) {\n      try {\n        listener();\n      } catch (e) {\n        $exceptionHandler(e);\n      }\n    });\n  };\n\n  /**\n   * @ngdoc method\n   * @name ngModel.NgModelController#$setViewValue\n   *\n   * @description\n   * Update the view value.\n   *\n   * This method should be called when a control wants to change the view value; typically,\n   * this is done from within a DOM event handler. For example, the {@link ng.directive:input input}\n   * directive calls it when the value of the input changes and {@link ng.directive:select select}\n   * calls it when an option is selected.\n   *\n   * When `$setViewValue` is called, the new `value` will be staged for committing through the `$parsers`\n   * and `$validators` pipelines. If there are no special {@link ngModelOptions} specified then the staged\n   * value sent directly for processing, finally to be applied to `$modelValue` and then the\n   * **expression** specified in the `ng-model` attribute. Lastly, all the registered change listeners,\n   * in the `$viewChangeListeners` list, are called.\n   *\n   * In case the {@link ng.directive:ngModelOptions ngModelOptions} directive is used with `updateOn`\n   * and the `default` trigger is not listed, all those actions will remain pending until one of the\n   * `updateOn` events is triggered on the DOM element.\n   * All these actions will be debounced if the {@link ng.directive:ngModelOptions ngModelOptions}\n   * directive is used with a custom debounce for this particular event.\n   * Note that a `$digest` is only triggered once the `updateOn` events are fired, or if `debounce`\n   * is specified, once the timer runs out.\n   *\n   * When used with standard inputs, the view value will always be a string (which is in some cases\n   * parsed into another type, such as a `Date` object for `input[date]`.)\n   * However, custom controls might also pass objects to this method. In this case, we should make\n   * a copy of the object before passing it to `$setViewValue`. This is because `ngModel` does not\n   * perform a deep watch of objects, it only looks for a change of identity. If you only change\n   * the property of the object then ngModel will not realize that the object has changed and\n   * will not invoke the `$parsers` and `$validators` pipelines. For this reason, you should\n   * not change properties of the copy once it has been passed to `$setViewValue`.\n   * Otherwise you may cause the model value on the scope to change incorrectly.\n   *\n   * <div class=\"alert alert-info\">\n   * In any case, the value passed to the method should always reflect the current value\n   * of the control. For example, if you are calling `$setViewValue` for an input element,\n   * you should pass the input DOM value. Otherwise, the control and the scope model become\n   * out of sync. It's also important to note that `$setViewValue` does not call `$render` or change\n   * the control's DOM value in any way. If we want to change the control's DOM value\n   * programmatically, we should update the `ngModel` scope expression. Its new value will be\n   * picked up by the model controller, which will run it through the `$formatters`, `$render` it\n   * to update the DOM, and finally call `$validate` on it.\n   * </div>\n   *\n   * @param {*} value value from the view.\n   * @param {string} trigger Event that triggered the update.\n   */\n  this.$setViewValue = function(value, trigger) {\n    ctrl.$viewValue = value;\n    if (!ctrl.$options || ctrl.$options.updateOnDefault) {\n      ctrl.$$debounceViewValueCommit(trigger);\n    }\n  };\n\n  this.$$debounceViewValueCommit = function(trigger) {\n    var debounceDelay = 0,\n        options = ctrl.$options,\n        debounce;\n\n    if (options && isDefined(options.debounce)) {\n      debounce = options.debounce;\n      if (isNumber(debounce)) {\n        debounceDelay = debounce;\n      } else if (isNumber(debounce[trigger])) {\n        debounceDelay = debounce[trigger];\n      } else if (isNumber(debounce['default'])) {\n        debounceDelay = debounce['default'];\n      }\n    }\n\n    $timeout.cancel(pendingDebounce);\n    if (debounceDelay) {\n      pendingDebounce = $timeout(function() {\n        ctrl.$commitViewValue();\n      }, debounceDelay);\n    } else if ($rootScope.$$phase) {\n      ctrl.$commitViewValue();\n    } else {\n      $scope.$apply(function() {\n        ctrl.$commitViewValue();\n      });\n    }\n  };\n\n  // model -> value\n  // Note: we cannot use a normal scope.$watch as we want to detect the following:\n  // 1. scope value is 'a'\n  // 2. user enters 'b'\n  // 3. ng-change kicks in and reverts scope value to 'a'\n  //    -> scope value did not change since the last digest as\n  //       ng-change executes in apply phase\n  // 4. view should be changed back to 'a'\n  $scope.$watch(function ngModelWatch() {\n    var modelValue = ngModelGet($scope);\n\n    // if scope model value and ngModel value are out of sync\n    // TODO(perf): why not move this to the action fn?\n    if (modelValue !== ctrl.$modelValue &&\n       // checks for NaN is needed to allow setting the model to NaN when there's an asyncValidator\n       (ctrl.$modelValue === ctrl.$modelValue || modelValue === modelValue)\n    ) {\n      ctrl.$modelValue = ctrl.$$rawModelValue = modelValue;\n      parserValid = undefined;\n\n      var formatters = ctrl.$formatters,\n          idx = formatters.length;\n\n      var viewValue = modelValue;\n      while (idx--) {\n        viewValue = formatters[idx](viewValue);\n      }\n      if (ctrl.$viewValue !== viewValue) {\n        ctrl.$$updateEmptyClasses(viewValue);\n        ctrl.$viewValue = ctrl.$$lastCommittedViewValue = viewValue;\n        ctrl.$render();\n\n        ctrl.$$runValidators(modelValue, viewValue, noop);\n      }\n    }\n\n    return modelValue;\n  });\n}];\n\n\n/**\n * @ngdoc directive\n * @name ngModel\n *\n * @element input\n * @priority 1\n *\n * @description\n * The `ngModel` directive binds an `input`,`select`, `textarea` (or custom form control) to a\n * property on the scope using {@link ngModel.NgModelController NgModelController},\n * which is created and exposed by this directive.\n *\n * `ngModel` is responsible for:\n *\n * - Binding the view into the model, which other directives such as `input`, `textarea` or `select`\n *   require.\n * - Providing validation behavior (i.e. required, number, email, url).\n * - Keeping the state of the control (valid/invalid, dirty/pristine, touched/untouched, validation errors).\n * - Setting related css classes on the element (`ng-valid`, `ng-invalid`, `ng-dirty`, `ng-pristine`, `ng-touched`,\n *   `ng-untouched`, `ng-empty`, `ng-not-empty`) including animations.\n * - Registering the control with its parent {@link ng.directive:form form}.\n *\n * Note: `ngModel` will try to bind to the property given by evaluating the expression on the\n * current scope. If the property doesn't already exist on this scope, it will be created\n * implicitly and added to the scope.\n *\n * For best practices on using `ngModel`, see:\n *\n *  - [Understanding Scopes](https://github.com/angular/angular.js/wiki/Understanding-Scopes)\n *\n * For basic examples, how to use `ngModel`, see:\n *\n *  - {@link ng.directive:input input}\n *    - {@link input[text] text}\n *    - {@link input[checkbox] checkbox}\n *    - {@link input[radio] radio}\n *    - {@link input[number] number}\n *    - {@link input[email] email}\n *    - {@link input[url] url}\n *    - {@link input[date] date}\n *    - {@link input[datetime-local] datetime-local}\n *    - {@link input[time] time}\n *    - {@link input[month] month}\n *    - {@link input[week] week}\n *  - {@link ng.directive:select select}\n *  - {@link ng.directive:textarea textarea}\n *\n * # Complex Models (objects or collections)\n *\n * By default, `ngModel` watches the model by reference, not value. This is important to know when\n * binding inputs to models that are objects (e.g. `Date`) or collections (e.g. arrays). If only properties of the\n * object or collection change, `ngModel` will not be notified and so the input will not be  re-rendered.\n *\n * The model must be assigned an entirely new object or collection before a re-rendering will occur.\n *\n * Some directives have options that will cause them to use a custom `$watchCollection` on the model expression\n * - for example, `ngOptions` will do so when a `track by` clause is included in the comprehension expression or\n * if the select is given the `multiple` attribute.\n *\n * The `$watchCollection()` method only does a shallow comparison, meaning that changing properties deeper than the\n * first level of the object (or only changing the properties of an item in the collection if it's an array) will still\n * not trigger a re-rendering of the model.\n *\n * # CSS classes\n * The following CSS classes are added and removed on the associated input/select/textarea element\n * depending on the validity of the model.\n *\n *  - `ng-valid`: the model is valid\n *  - `ng-invalid`: the model is invalid\n *  - `ng-valid-[key]`: for each valid key added by `$setValidity`\n *  - `ng-invalid-[key]`: for each invalid key added by `$setValidity`\n *  - `ng-pristine`: the control hasn't been interacted with yet\n *  - `ng-dirty`: the control has been interacted with\n *  - `ng-touched`: the control has been blurred\n *  - `ng-untouched`: the control hasn't been blurred\n *  - `ng-pending`: any `$asyncValidators` are unfulfilled\n *  - `ng-empty`: the view does not contain a value or the value is deemed \"empty\", as defined\n *     by the {@link ngModel.NgModelController#$isEmpty} method\n *  - `ng-not-empty`: the view contains a non-empty value\n *\n * Keep in mind that ngAnimate can detect each of these classes when added and removed.\n *\n * ## Animation Hooks\n *\n * Animations within models are triggered when any of the associated CSS classes are added and removed\n * on the input element which is attached to the model. These classes include: `.ng-pristine`, `.ng-dirty`,\n * `.ng-invalid` and `.ng-valid` as well as any other validations that are performed on the model itself.\n * The animations that are triggered within ngModel are similar to how they work in ngClass and\n * animations can be hooked into using CSS transitions, keyframes as well as JS animations.\n *\n * The following example shows a simple way to utilize CSS transitions to style an input element\n * that has been rendered as invalid after it has been validated:\n *\n * <pre>\n * //be sure to include ngAnimate as a module to hook into more\n * //advanced animations\n * .my-input {\n *   transition:0.5s linear all;\n *   background: white;\n * }\n * .my-input.ng-invalid {\n *   background: red;\n *   color:white;\n * }\n * </pre>\n *\n * @example\n * <example deps=\"angular-animate.js\" animations=\"true\" fixBase=\"true\" module=\"inputExample\">\n     <file name=\"index.html\">\n       <script>\n        angular.module('inputExample', [])\n          .controller('ExampleController', ['$scope', function($scope) {\n            $scope.val = '1';\n          }]);\n       </script>\n       <style>\n         .my-input {\n           transition:all linear 0.5s;\n           background: transparent;\n         }\n         .my-input.ng-invalid {\n           color:white;\n           background: red;\n         }\n       </style>\n       <p id=\"inputDescription\">\n        Update input to see transitions when valid/invalid.\n        Integer is a valid value.\n       </p>\n       <form name=\"testForm\" ng-controller=\"ExampleController\">\n         <input ng-model=\"val\" ng-pattern=\"/^\\d+$/\" name=\"anim\" class=\"my-input\"\n                aria-describedby=\"inputDescription\" />\n       </form>\n     </file>\n * </example>\n *\n * ## Binding to a getter/setter\n *\n * Sometimes it's helpful to bind `ngModel` to a getter/setter function.  A getter/setter is a\n * function that returns a representation of the model when called with zero arguments, and sets\n * the internal state of a model when called with an argument. It's sometimes useful to use this\n * for models that have an internal representation that's different from what the model exposes\n * to the view.\n *\n * <div class=\"alert alert-success\">\n * **Best Practice:** It's best to keep getters fast because Angular is likely to call them more\n * frequently than other parts of your code.\n * </div>\n *\n * You use this behavior by adding `ng-model-options=\"{ getterSetter: true }\"` to an element that\n * has `ng-model` attached to it. You can also add `ng-model-options=\"{ getterSetter: true }\"` to\n * a `<form>`, which will enable this behavior for all `<input>`s within it. See\n * {@link ng.directive:ngModelOptions `ngModelOptions`} for more.\n *\n * The following example shows how to use `ngModel` with a getter/setter:\n *\n * @example\n * <example name=\"ngModel-getter-setter\" module=\"getterSetterExample\">\n     <file name=\"index.html\">\n       <div ng-controller=\"ExampleController\">\n         <form name=\"userForm\">\n           <label>Name:\n             <input type=\"text\" name=\"userName\"\n                    ng-model=\"user.name\"\n                    ng-model-options=\"{ getterSetter: true }\" />\n           </label>\n         </form>\n         <pre>user.name = <span ng-bind=\"user.name()\"></span></pre>\n       </div>\n     </file>\n     <file name=\"app.js\">\n       angular.module('getterSetterExample', [])\n         .controller('ExampleController', ['$scope', function($scope) {\n           var _name = 'Brian';\n           $scope.user = {\n             name: function(newName) {\n              // Note that newName can be undefined for two reasons:\n              // 1. Because it is called as a getter and thus called with no arguments\n              // 2. Because the property should actually be set to undefined. This happens e.g. if the\n              //    input is invalid\n              return arguments.length ? (_name = newName) : _name;\n             }\n           };\n         }]);\n     </file>\n * </example>\n */\nvar ngModelDirective = ['$rootScope', function($rootScope) {\n  return {\n    restrict: 'A',\n    require: ['ngModel', '^?form', '^?ngModelOptions'],\n    controller: NgModelController,\n    // Prelink needs to run before any input directive\n    // so that we can set the NgModelOptions in NgModelController\n    // before anyone else uses it.\n    priority: 1,\n    compile: function ngModelCompile(element) {\n      // Setup initial state of the control\n      element.addClass(PRISTINE_CLASS).addClass(UNTOUCHED_CLASS).addClass(VALID_CLASS);\n\n      return {\n        pre: function ngModelPreLink(scope, element, attr, ctrls) {\n          var modelCtrl = ctrls[0],\n              formCtrl = ctrls[1] || modelCtrl.$$parentForm;\n\n          modelCtrl.$$setOptions(ctrls[2] && ctrls[2].$options);\n\n          // notify others, especially parent forms\n          formCtrl.$addControl(modelCtrl);\n\n          attr.$observe('name', function(newValue) {\n            if (modelCtrl.$name !== newValue) {\n              modelCtrl.$$parentForm.$$renameControl(modelCtrl, newValue);\n            }\n          });\n\n          scope.$on('$destroy', function() {\n            modelCtrl.$$parentForm.$removeControl(modelCtrl);\n          });\n        },\n        post: function ngModelPostLink(scope, element, attr, ctrls) {\n          var modelCtrl = ctrls[0];\n          if (modelCtrl.$options && modelCtrl.$options.updateOn) {\n            element.on(modelCtrl.$options.updateOn, function(ev) {\n              modelCtrl.$$debounceViewValueCommit(ev && ev.type);\n            });\n          }\n\n          element.on('blur', function() {\n            if (modelCtrl.$touched) return;\n\n            if ($rootScope.$$phase) {\n              scope.$evalAsync(modelCtrl.$setTouched);\n            } else {\n              scope.$apply(modelCtrl.$setTouched);\n            }\n          });\n        }\n      };\n    }\n  };\n}];\n\nvar DEFAULT_REGEXP = /(\\s+|^)default(\\s+|$)/;\n\n/**\n * @ngdoc directive\n * @name ngModelOptions\n *\n * @description\n * Allows tuning how model updates are done. Using `ngModelOptions` you can specify a custom list of\n * events that will trigger a model update and/or a debouncing delay so that the actual update only\n * takes place when a timer expires; this timer will be reset after another change takes place.\n *\n * Given the nature of `ngModelOptions`, the value displayed inside input fields in the view might\n * be different from the value in the actual model. This means that if you update the model you\n * should also invoke {@link ngModel.NgModelController `$rollbackViewValue`} on the relevant input field in\n * order to make sure it is synchronized with the model and that any debounced action is canceled.\n *\n * The easiest way to reference the control's {@link ngModel.NgModelController `$rollbackViewValue`}\n * method is by making sure the input is placed inside a form that has a `name` attribute. This is\n * important because `form` controllers are published to the related scope under the name in their\n * `name` attribute.\n *\n * Any pending changes will take place immediately when an enclosing form is submitted via the\n * `submit` event. Note that `ngClick` events will occur before the model is updated. Use `ngSubmit`\n * to have access to the updated model.\n *\n * `ngModelOptions` has an effect on the element it's declared on and its descendants.\n *\n * @param {Object} ngModelOptions options to apply to the current model. Valid keys are:\n *   - `updateOn`: string specifying which event should the input be bound to. You can set several\n *     events using an space delimited list. There is a special event called `default` that\n *     matches the default events belonging of the control.\n *   - `debounce`: integer value which contains the debounce model update value in milliseconds. A\n *     value of 0 triggers an immediate update. If an object is supplied instead, you can specify a\n *     custom value for each event. For example:\n *     `ng-model-options=\"{ updateOn: 'default blur', debounce: { 'default': 500, 'blur': 0 } }\"`\n *   - `allowInvalid`: boolean value which indicates that the model can be set with values that did\n *     not validate correctly instead of the default behavior of setting the model to undefined.\n *   - `getterSetter`: boolean value which determines whether or not to treat functions bound to\n       `ngModel` as getters/setters.\n *   - `timezone`: Defines the timezone to be used to read/write the `Date` instance in the model for\n *     `<input type=\"date\">`, `<input type=\"time\">`, ... . It understands UTC/GMT and the\n *     continental US time zone abbreviations, but for general use, use a time zone offset, for\n *     example, `'+0430'` (4 hours, 30 minutes east of the Greenwich meridian)\n *     If not specified, the timezone of the browser will be used.\n *\n * @example\n\n  The following example shows how to override immediate updates. Changes on the inputs within the\n  form will update the model only when the control loses focus (blur event). If `escape` key is\n  pressed while the input field is focused, the value is reset to the value in the current model.\n\n  <example name=\"ngModelOptions-directive-blur\" module=\"optionsExample\">\n    <file name=\"index.html\">\n      <div ng-controller=\"ExampleController\">\n        <form name=\"userForm\">\n          <label>Name:\n            <input type=\"text\" name=\"userName\"\n                   ng-model=\"user.name\"\n                   ng-model-options=\"{ updateOn: 'blur' }\"\n                   ng-keyup=\"cancel($event)\" />\n          </label><br />\n          <label>Other data:\n            <input type=\"text\" ng-model=\"user.data\" />\n          </label><br />\n        </form>\n        <pre>user.name = <span ng-bind=\"user.name\"></span></pre>\n        <pre>user.data = <span ng-bind=\"user.data\"></span></pre>\n      </div>\n    </file>\n    <file name=\"app.js\">\n      angular.module('optionsExample', [])\n        .controller('ExampleController', ['$scope', function($scope) {\n          $scope.user = { name: 'John', data: '' };\n\n          $scope.cancel = function(e) {\n            if (e.keyCode == 27) {\n              $scope.userForm.userName.$rollbackViewValue();\n            }\n          };\n        }]);\n    </file>\n    <file name=\"protractor.js\" type=\"protractor\">\n      var model = element(by.binding('user.name'));\n      var input = element(by.model('user.name'));\n      var other = element(by.model('user.data'));\n\n      it('should allow custom events', function() {\n        input.sendKeys(' Doe');\n        input.click();\n        expect(model.getText()).toEqual('John');\n        other.click();\n        expect(model.getText()).toEqual('John Doe');\n      });\n\n      it('should $rollbackViewValue when model changes', function() {\n        input.sendKeys(' Doe');\n        expect(input.getAttribute('value')).toEqual('John Doe');\n        input.sendKeys(protractor.Key.ESCAPE);\n        expect(input.getAttribute('value')).toEqual('John');\n        other.click();\n        expect(model.getText()).toEqual('John');\n      });\n    </file>\n  </example>\n\n  This one shows how to debounce model changes. Model will be updated only 1 sec after last change.\n  If the `Clear` button is pressed, any debounced action is canceled and the value becomes empty.\n\n  <example name=\"ngModelOptions-directive-debounce\" module=\"optionsExample\">\n    <file name=\"index.html\">\n      <div ng-controller=\"ExampleController\">\n        <form name=\"userForm\">\n          <label>Name:\n            <input type=\"text\" name=\"userName\"\n                   ng-model=\"user.name\"\n                   ng-model-options=\"{ debounce: 1000 }\" />\n          </label>\n          <button ng-click=\"userForm.userName.$rollbackViewValue(); user.name=''\">Clear</button>\n          <br />\n        </form>\n        <pre>user.name = <span ng-bind=\"user.name\"></span></pre>\n      </div>\n    </file>\n    <file name=\"app.js\">\n      angular.module('optionsExample', [])\n        .controller('ExampleController', ['$scope', function($scope) {\n          $scope.user = { name: 'Igor' };\n        }]);\n    </file>\n  </example>\n\n  This one shows how to bind to getter/setters:\n\n  <example name=\"ngModelOptions-directive-getter-setter\" module=\"getterSetterExample\">\n    <file name=\"index.html\">\n      <div ng-controller=\"ExampleController\">\n        <form name=\"userForm\">\n          <label>Name:\n            <input type=\"text\" name=\"userName\"\n                   ng-model=\"user.name\"\n                   ng-model-options=\"{ getterSetter: true }\" />\n          </label>\n        </form>\n        <pre>user.name = <span ng-bind=\"user.name()\"></span></pre>\n      </div>\n    </file>\n    <file name=\"app.js\">\n      angular.module('getterSetterExample', [])\n        .controller('ExampleController', ['$scope', function($scope) {\n          var _name = 'Brian';\n          $scope.user = {\n            name: function(newName) {\n              // Note that newName can be undefined for two reasons:\n              // 1. Because it is called as a getter and thus called with no arguments\n              // 2. Because the property should actually be set to undefined. This happens e.g. if the\n              //    input is invalid\n              return arguments.length ? (_name = newName) : _name;\n            }\n          };\n        }]);\n    </file>\n  </example>\n */\nvar ngModelOptionsDirective = function() {\n  return {\n    restrict: 'A',\n    controller: ['$scope', '$attrs', function($scope, $attrs) {\n      var that = this;\n      this.$options = copy($scope.$eval($attrs.ngModelOptions));\n      // Allow adding/overriding bound events\n      if (isDefined(this.$options.updateOn)) {\n        this.$options.updateOnDefault = false;\n        // extract \"default\" pseudo-event from list of events that can trigger a model update\n        this.$options.updateOn = trim(this.$options.updateOn.replace(DEFAULT_REGEXP, function() {\n          that.$options.updateOnDefault = true;\n          return ' ';\n        }));\n      } else {\n        this.$options.updateOnDefault = true;\n      }\n    }]\n  };\n};\n\n\n\n// helper methods\nfunction addSetValidityMethod(context) {\n  var ctrl = context.ctrl,\n      $element = context.$element,\n      classCache = {},\n      set = context.set,\n      unset = context.unset,\n      $animate = context.$animate;\n\n  classCache[INVALID_CLASS] = !(classCache[VALID_CLASS] = $element.hasClass(VALID_CLASS));\n\n  ctrl.$setValidity = setValidity;\n\n  function setValidity(validationErrorKey, state, controller) {\n    if (isUndefined(state)) {\n      createAndSet('$pending', validationErrorKey, controller);\n    } else {\n      unsetAndCleanup('$pending', validationErrorKey, controller);\n    }\n    if (!isBoolean(state)) {\n      unset(ctrl.$error, validationErrorKey, controller);\n      unset(ctrl.$$success, validationErrorKey, controller);\n    } else {\n      if (state) {\n        unset(ctrl.$error, validationErrorKey, controller);\n        set(ctrl.$$success, validationErrorKey, controller);\n      } else {\n        set(ctrl.$error, validationErrorKey, controller);\n        unset(ctrl.$$success, validationErrorKey, controller);\n      }\n    }\n    if (ctrl.$pending) {\n      cachedToggleClass(PENDING_CLASS, true);\n      ctrl.$valid = ctrl.$invalid = undefined;\n      toggleValidationCss('', null);\n    } else {\n      cachedToggleClass(PENDING_CLASS, false);\n      ctrl.$valid = isObjectEmpty(ctrl.$error);\n      ctrl.$invalid = !ctrl.$valid;\n      toggleValidationCss('', ctrl.$valid);\n    }\n\n    // re-read the state as the set/unset methods could have\n    // combined state in ctrl.$error[validationError] (used for forms),\n    // where setting/unsetting only increments/decrements the value,\n    // and does not replace it.\n    var combinedState;\n    if (ctrl.$pending && ctrl.$pending[validationErrorKey]) {\n      combinedState = undefined;\n    } else if (ctrl.$error[validationErrorKey]) {\n      combinedState = false;\n    } else if (ctrl.$$success[validationErrorKey]) {\n      combinedState = true;\n    } else {\n      combinedState = null;\n    }\n\n    toggleValidationCss(validationErrorKey, combinedState);\n    ctrl.$$parentForm.$setValidity(validationErrorKey, combinedState, ctrl);\n  }\n\n  function createAndSet(name, value, controller) {\n    if (!ctrl[name]) {\n      ctrl[name] = {};\n    }\n    set(ctrl[name], value, controller);\n  }\n\n  function unsetAndCleanup(name, value, controller) {\n    if (ctrl[name]) {\n      unset(ctrl[name], value, controller);\n    }\n    if (isObjectEmpty(ctrl[name])) {\n      ctrl[name] = undefined;\n    }\n  }\n\n  function cachedToggleClass(className, switchValue) {\n    if (switchValue && !classCache[className]) {\n      $animate.addClass($element, className);\n      classCache[className] = true;\n    } else if (!switchValue && classCache[className]) {\n      $animate.removeClass($element, className);\n      classCache[className] = false;\n    }\n  }\n\n  function toggleValidationCss(validationErrorKey, isValid) {\n    validationErrorKey = validationErrorKey ? '-' + snake_case(validationErrorKey, '-') : '';\n\n    cachedToggleClass(VALID_CLASS + validationErrorKey, isValid === true);\n    cachedToggleClass(INVALID_CLASS + validationErrorKey, isValid === false);\n  }\n}\n\nfunction isObjectEmpty(obj) {\n  if (obj) {\n    for (var prop in obj) {\n      if (obj.hasOwnProperty(prop)) {\n        return false;\n      }\n    }\n  }\n  return true;\n}\n\n/**\n * @ngdoc directive\n * @name ngNonBindable\n * @restrict AC\n * @priority 1000\n *\n * @description\n * The `ngNonBindable` directive tells Angular not to compile or bind the contents of the current\n * DOM element. This is useful if the element contains what appears to be Angular directives and\n * bindings but which should be ignored by Angular. This could be the case if you have a site that\n * displays snippets of code, for instance.\n *\n * @element ANY\n *\n * @example\n * In this example there are two locations where a simple interpolation binding (`{{}}`) is present,\n * but the one wrapped in `ngNonBindable` is left alone.\n *\n * @example\n    <example>\n      <file name=\"index.html\">\n        <div>Normal: {{1 + 2}}</div>\n        <div ng-non-bindable>Ignored: {{1 + 2}}</div>\n      </file>\n      <file name=\"protractor.js\" type=\"protractor\">\n       it('should check ng-non-bindable', function() {\n         expect(element(by.binding('1 + 2')).getText()).toContain('3');\n         expect(element.all(by.css('div')).last().getText()).toMatch(/1 \\+ 2/);\n       });\n      </file>\n    </example>\n */\nvar ngNonBindableDirective = ngDirective({ terminal: true, priority: 1000 });\n\n/* global jqLiteRemove */\n\nvar ngOptionsMinErr = minErr('ngOptions');\n\n/**\n * @ngdoc directive\n * @name ngOptions\n * @restrict A\n *\n * @description\n *\n * The `ngOptions` attribute can be used to dynamically generate a list of `<option>`\n * elements for the `<select>` element using the array or object obtained by evaluating the\n * `ngOptions` comprehension expression.\n *\n * In many cases, `ngRepeat` can be used on `<option>` elements instead of `ngOptions` to achieve a\n * similar result. However, `ngOptions` provides some benefits such as reducing memory and\n * increasing speed by not creating a new scope for each repeated instance, as well as providing\n * more flexibility in how the `<select>`'s model is assigned via the `select` **`as`** part of the\n * comprehension expression. `ngOptions` should be used when the `<select>` model needs to be bound\n *  to a non-string value. This is because an option element can only be bound to string values at\n * present.\n *\n * When an item in the `<select>` menu is selected, the array element or object property\n * represented by the selected option will be bound to the model identified by the `ngModel`\n * directive.\n *\n * Optionally, a single hard-coded `<option>` element, with the value set to an empty string, can\n * be nested into the `<select>` element. This element will then represent the `null` or \"not selected\"\n * option. See example below for demonstration.\n *\n * ## Complex Models (objects or collections)\n *\n * By default, `ngModel` watches the model by reference, not value. This is important to know when\n * binding the select to a model that is an object or a collection.\n *\n * One issue occurs if you want to preselect an option. For example, if you set\n * the model to an object that is equal to an object in your collection, `ngOptions` won't be able to set the selection,\n * because the objects are not identical. So by default, you should always reference the item in your collection\n * for preselections, e.g.: `$scope.selected = $scope.collection[3]`.\n *\n * Another solution is to use a `track by` clause, because then `ngOptions` will track the identity\n * of the item not by reference, but by the result of the `track by` expression. For example, if your\n * collection items have an id property, you would `track by item.id`.\n *\n * A different issue with objects or collections is that ngModel won't detect if an object property or\n * a collection item changes. For that reason, `ngOptions` additionally watches the model using\n * `$watchCollection`, when the expression contains a `track by` clause or the the select has the `multiple` attribute.\n * This allows ngOptions to trigger a re-rendering of the options even if the actual object/collection\n * has not changed identity, but only a property on the object or an item in the collection changes.\n *\n * Note that `$watchCollection` does a shallow comparison of the properties of the object (or the items in the collection\n * if the model is an array). This means that changing a property deeper than the first level inside the\n * object/collection will not trigger a re-rendering.\n *\n * ## `select` **`as`**\n *\n * Using `select` **`as`** will bind the result of the `select` expression to the model, but\n * the value of the `<select>` and `<option>` html elements will be either the index (for array data sources)\n * or property name (for object data sources) of the value within the collection. If a **`track by`** expression\n * is used, the result of that expression will be set as the value of the `option` and `select` elements.\n *\n *\n * ### `select` **`as`** and **`track by`**\n *\n * <div class=\"alert alert-warning\">\n * Be careful when using `select` **`as`** and **`track by`** in the same expression.\n * </div>\n *\n * Given this array of items on the $scope:\n *\n * ```js\n * $scope.items = [{\n *   id: 1,\n *   label: 'aLabel',\n *   subItem: { name: 'aSubItem' }\n * }, {\n *   id: 2,\n *   label: 'bLabel',\n *   subItem: { name: 'bSubItem' }\n * }];\n * ```\n *\n * This will work:\n *\n * ```html\n * <select ng-options=\"item as item.label for item in items track by item.id\" ng-model=\"selected\"></select>\n * ```\n * ```js\n * $scope.selected = $scope.items[0];\n * ```\n *\n * but this will not work:\n *\n * ```html\n * <select ng-options=\"item.subItem as item.label for item in items track by item.id\" ng-model=\"selected\"></select>\n * ```\n * ```js\n * $scope.selected = $scope.items[0].subItem;\n * ```\n *\n * In both examples, the **`track by`** expression is applied successfully to each `item` in the\n * `items` array. Because the selected option has been set programmatically in the controller, the\n * **`track by`** expression is also applied to the `ngModel` value. In the first example, the\n * `ngModel` value is `items[0]` and the **`track by`** expression evaluates to `items[0].id` with\n * no issue. In the second example, the `ngModel` value is `items[0].subItem` and the **`track by`**\n * expression evaluates to `items[0].subItem.id` (which is undefined). As a result, the model value\n * is not matched against any `<option>` and the `<select>` appears as having no selected value.\n *\n *\n * @param {string} ngModel Assignable angular expression to data-bind to.\n * @param {string=} name Property name of the form under which the control is published.\n * @param {string=} required The control is considered valid only if value is entered.\n * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to\n *    the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of\n *    `required` when you want to data-bind to the `required` attribute.\n * @param {comprehension_expression=} ngOptions in one of the following forms:\n *\n *   * for array data sources:\n *     * `label` **`for`** `value` **`in`** `array`\n *     * `select` **`as`** `label` **`for`** `value` **`in`** `array`\n *     * `label` **`group by`** `group` **`for`** `value` **`in`** `array`\n *     * `label` **`disable when`** `disable` **`for`** `value` **`in`** `array`\n *     * `label` **`group by`** `group` **`for`** `value` **`in`** `array` **`track by`** `trackexpr`\n *     * `label` **`disable when`** `disable` **`for`** `value` **`in`** `array` **`track by`** `trackexpr`\n *     * `label` **`for`** `value` **`in`** `array` | orderBy:`orderexpr` **`track by`** `trackexpr`\n *        (for including a filter with `track by`)\n *   * for object data sources:\n *     * `label` **`for (`**`key` **`,`** `value`**`) in`** `object`\n *     * `select` **`as`** `label` **`for (`**`key` **`,`** `value`**`) in`** `object`\n *     * `label` **`group by`** `group` **`for (`**`key`**`,`** `value`**`) in`** `object`\n *     * `label` **`disable when`** `disable` **`for (`**`key`**`,`** `value`**`) in`** `object`\n *     * `select` **`as`** `label` **`group by`** `group`\n *         **`for` `(`**`key`**`,`** `value`**`) in`** `object`\n *     * `select` **`as`** `label` **`disable when`** `disable`\n *         **`for` `(`**`key`**`,`** `value`**`) in`** `object`\n *\n * Where:\n *\n *   * `array` / `object`: an expression which evaluates to an array / object to iterate over.\n *   * `value`: local variable which will refer to each item in the `array` or each property value\n *      of `object` during iteration.\n *   * `key`: local variable which will refer to a property name in `object` during iteration.\n *   * `label`: The result of this expression will be the label for `<option>` element. The\n *     `expression` will most likely refer to the `value` variable (e.g. `value.propertyName`).\n *   * `select`: The result of this expression will be bound to the model of the parent `<select>`\n *      element. If not specified, `select` expression will default to `value`.\n *   * `group`: The result of this expression will be used to group options using the `<optgroup>`\n *      DOM element.\n *   * `disable`: The result of this expression will be used to disable the rendered `<option>`\n *      element. Return `true` to disable.\n *   * `trackexpr`: Used when working with an array of objects. The result of this expression will be\n *      used to identify the objects in the array. The `trackexpr` will most likely refer to the\n *     `value` variable (e.g. `value.propertyName`). With this the selection is preserved\n *      even when the options are recreated (e.g. reloaded from the server).\n *\n * @example\n    <example module=\"selectExample\">\n      <file name=\"index.html\">\n        <script>\n        angular.module('selectExample', [])\n          .controller('ExampleController', ['$scope', function($scope) {\n            $scope.colors = [\n              {name:'black', shade:'dark'},\n              {name:'white', shade:'light', notAnOption: true},\n              {name:'red', shade:'dark'},\n              {name:'blue', shade:'dark', notAnOption: true},\n              {name:'yellow', shade:'light', notAnOption: false}\n            ];\n            $scope.myColor = $scope.colors[2]; // red\n          }]);\n        </script>\n        <div ng-controller=\"ExampleController\">\n          <ul>\n            <li ng-repeat=\"color in colors\">\n              <label>Name: <input ng-model=\"color.name\"></label>\n              <label><input type=\"checkbox\" ng-model=\"color.notAnOption\"> Disabled?</label>\n              <button ng-click=\"colors.splice($index, 1)\" aria-label=\"Remove\">X</button>\n            </li>\n            <li>\n              <button ng-click=\"colors.push({})\">add</button>\n            </li>\n          </ul>\n          <hr/>\n          <label>Color (null not allowed):\n            <select ng-model=\"myColor\" ng-options=\"color.name for color in colors\"></select>\n          </label><br/>\n          <label>Color (null allowed):\n          <span  class=\"nullable\">\n            <select ng-model=\"myColor\" ng-options=\"color.name for color in colors\">\n              <option value=\"\">-- choose color --</option>\n            </select>\n          </span></label><br/>\n\n          <label>Color grouped by shade:\n            <select ng-model=\"myColor\" ng-options=\"color.name group by color.shade for color in colors\">\n            </select>\n          </label><br/>\n\n          <label>Color grouped by shade, with some disabled:\n            <select ng-model=\"myColor\"\n                  ng-options=\"color.name group by color.shade disable when color.notAnOption for color in colors\">\n            </select>\n          </label><br/>\n\n\n\n          Select <button ng-click=\"myColor = { name:'not in list', shade: 'other' }\">bogus</button>.\n          <br/>\n          <hr/>\n          Currently selected: {{ {selected_color:myColor} }}\n          <div style=\"border:solid 1px black; height:20px\"\n               ng-style=\"{'background-color':myColor.name}\">\n          </div>\n        </div>\n      </file>\n      <file name=\"protractor.js\" type=\"protractor\">\n         it('should check ng-options', function() {\n           expect(element(by.binding('{selected_color:myColor}')).getText()).toMatch('red');\n           element.all(by.model('myColor')).first().click();\n           element.all(by.css('select[ng-model=\"myColor\"] option')).first().click();\n           expect(element(by.binding('{selected_color:myColor}')).getText()).toMatch('black');\n           element(by.css('.nullable select[ng-model=\"myColor\"]')).click();\n           element.all(by.css('.nullable select[ng-model=\"myColor\"] option')).first().click();\n           expect(element(by.binding('{selected_color:myColor}')).getText()).toMatch('null');\n         });\n      </file>\n    </example>\n */\n\n// jshint maxlen: false\n//                     //00001111111111000000000002222222222000000000000000000000333333333300000000000000000000000004444444444400000000000005555555555555550000000006666666666666660000000777777777777777000000000000000888888888800000000000000000009999999999\nvar NG_OPTIONS_REGEXP = /^\\s*([\\s\\S]+?)(?:\\s+as\\s+([\\s\\S]+?))?(?:\\s+group\\s+by\\s+([\\s\\S]+?))?(?:\\s+disable\\s+when\\s+([\\s\\S]+?))?\\s+for\\s+(?:([\\$\\w][\\$\\w]*)|(?:\\(\\s*([\\$\\w][\\$\\w]*)\\s*,\\s*([\\$\\w][\\$\\w]*)\\s*\\)))\\s+in\\s+([\\s\\S]+?)(?:\\s+track\\s+by\\s+([\\s\\S]+?))?$/;\n                        // 1: value expression (valueFn)\n                        // 2: label expression (displayFn)\n                        // 3: group by expression (groupByFn)\n                        // 4: disable when expression (disableWhenFn)\n                        // 5: array item variable name\n                        // 6: object item key variable name\n                        // 7: object item value variable name\n                        // 8: collection expression\n                        // 9: track by expression\n// jshint maxlen: 100\n\n\nvar ngOptionsDirective = ['$compile', '$document', '$parse', function($compile, $document, $parse) {\n\n  function parseOptionsExpression(optionsExp, selectElement, scope) {\n\n    var match = optionsExp.match(NG_OPTIONS_REGEXP);\n    if (!(match)) {\n      throw ngOptionsMinErr('iexp',\n        \"Expected expression in form of \" +\n        \"'_select_ (as _label_)? for (_key_,)?_value_ in _collection_'\" +\n        \" but got '{0}'. Element: {1}\",\n        optionsExp, startingTag(selectElement));\n    }\n\n    // Extract the parts from the ngOptions expression\n\n    // The variable name for the value of the item in the collection\n    var valueName = match[5] || match[7];\n    // The variable name for the key of the item in the collection\n    var keyName = match[6];\n\n    // An expression that generates the viewValue for an option if there is a label expression\n    var selectAs = / as /.test(match[0]) && match[1];\n    // An expression that is used to track the id of each object in the options collection\n    var trackBy = match[9];\n    // An expression that generates the viewValue for an option if there is no label expression\n    var valueFn = $parse(match[2] ? match[1] : valueName);\n    var selectAsFn = selectAs && $parse(selectAs);\n    var viewValueFn = selectAsFn || valueFn;\n    var trackByFn = trackBy && $parse(trackBy);\n\n    // Get the value by which we are going to track the option\n    // if we have a trackFn then use that (passing scope and locals)\n    // otherwise just hash the given viewValue\n    var getTrackByValueFn = trackBy ?\n                              function(value, locals) { return trackByFn(scope, locals); } :\n                              function getHashOfValue(value) { return hashKey(value); };\n    var getTrackByValue = function(value, key) {\n      return getTrackByValueFn(value, getLocals(value, key));\n    };\n\n    var displayFn = $parse(match[2] || match[1]);\n    var groupByFn = $parse(match[3] || '');\n    var disableWhenFn = $parse(match[4] || '');\n    var valuesFn = $parse(match[8]);\n\n    var locals = {};\n    var getLocals = keyName ? function(value, key) {\n      locals[keyName] = key;\n      locals[valueName] = value;\n      return locals;\n    } : function(value) {\n      locals[valueName] = value;\n      return locals;\n    };\n\n\n    function Option(selectValue, viewValue, label, group, disabled) {\n      this.selectValue = selectValue;\n      this.viewValue = viewValue;\n      this.label = label;\n      this.group = group;\n      this.disabled = disabled;\n    }\n\n    function getOptionValuesKeys(optionValues) {\n      var optionValuesKeys;\n\n      if (!keyName && isArrayLike(optionValues)) {\n        optionValuesKeys = optionValues;\n      } else {\n        // if object, extract keys, in enumeration order, unsorted\n        optionValuesKeys = [];\n        for (var itemKey in optionValues) {\n          if (optionValues.hasOwnProperty(itemKey) && itemKey.charAt(0) !== '$') {\n            optionValuesKeys.push(itemKey);\n          }\n        }\n      }\n      return optionValuesKeys;\n    }\n\n    return {\n      trackBy: trackBy,\n      getTrackByValue: getTrackByValue,\n      getWatchables: $parse(valuesFn, function(optionValues) {\n        // Create a collection of things that we would like to watch (watchedArray)\n        // so that they can all be watched using a single $watchCollection\n        // that only runs the handler once if anything changes\n        var watchedArray = [];\n        optionValues = optionValues || [];\n\n        var optionValuesKeys = getOptionValuesKeys(optionValues);\n        var optionValuesLength = optionValuesKeys.length;\n        for (var index = 0; index < optionValuesLength; index++) {\n          var key = (optionValues === optionValuesKeys) ? index : optionValuesKeys[index];\n          var value = optionValues[key];\n\n          var locals = getLocals(value, key);\n          var selectValue = getTrackByValueFn(value, locals);\n          watchedArray.push(selectValue);\n\n          // Only need to watch the displayFn if there is a specific label expression\n          if (match[2] || match[1]) {\n            var label = displayFn(scope, locals);\n            watchedArray.push(label);\n          }\n\n          // Only need to watch the disableWhenFn if there is a specific disable expression\n          if (match[4]) {\n            var disableWhen = disableWhenFn(scope, locals);\n            watchedArray.push(disableWhen);\n          }\n        }\n        return watchedArray;\n      }),\n\n      getOptions: function() {\n\n        var optionItems = [];\n        var selectValueMap = {};\n\n        // The option values were already computed in the `getWatchables` fn,\n        // which must have been called to trigger `getOptions`\n        var optionValues = valuesFn(scope) || [];\n        var optionValuesKeys = getOptionValuesKeys(optionValues);\n        var optionValuesLength = optionValuesKeys.length;\n\n        for (var index = 0; index < optionValuesLength; index++) {\n          var key = (optionValues === optionValuesKeys) ? index : optionValuesKeys[index];\n          var value = optionValues[key];\n          var locals = getLocals(value, key);\n          var viewValue = viewValueFn(scope, locals);\n          var selectValue = getTrackByValueFn(viewValue, locals);\n          var label = displayFn(scope, locals);\n          var group = groupByFn(scope, locals);\n          var disabled = disableWhenFn(scope, locals);\n          var optionItem = new Option(selectValue, viewValue, label, group, disabled);\n\n          optionItems.push(optionItem);\n          selectValueMap[selectValue] = optionItem;\n        }\n\n        return {\n          items: optionItems,\n          selectValueMap: selectValueMap,\n          getOptionFromViewValue: function(value) {\n            return selectValueMap[getTrackByValue(value)];\n          },\n          getViewValueFromOption: function(option) {\n            // If the viewValue could be an object that may be mutated by the application,\n            // we need to make a copy and not return the reference to the value on the option.\n            return trackBy ? angular.copy(option.viewValue) : option.viewValue;\n          }\n        };\n      }\n    };\n  }\n\n\n  // we can't just jqLite('<option>') since jqLite is not smart enough\n  // to create it in <select> and IE barfs otherwise.\n  var optionTemplate = window.document.createElement('option'),\n      optGroupTemplate = window.document.createElement('optgroup');\n\n    function ngOptionsPostLink(scope, selectElement, attr, ctrls) {\n\n      var selectCtrl = ctrls[0];\n      var ngModelCtrl = ctrls[1];\n      var multiple = attr.multiple;\n\n      // The emptyOption allows the application developer to provide their own custom \"empty\"\n      // option when the viewValue does not match any of the option values.\n      var emptyOption;\n      for (var i = 0, children = selectElement.children(), ii = children.length; i < ii; i++) {\n        if (children[i].value === '') {\n          emptyOption = children.eq(i);\n          break;\n        }\n      }\n\n      var providedEmptyOption = !!emptyOption;\n\n      var unknownOption = jqLite(optionTemplate.cloneNode(false));\n      unknownOption.val('?');\n\n      var options;\n      var ngOptions = parseOptionsExpression(attr.ngOptions, selectElement, scope);\n      // This stores the newly created options before they are appended to the select.\n      // Since the contents are removed from the fragment when it is appended,\n      // we only need to create it once.\n      var listFragment = $document[0].createDocumentFragment();\n\n      var renderEmptyOption = function() {\n        if (!providedEmptyOption) {\n          selectElement.prepend(emptyOption);\n        }\n        selectElement.val('');\n        emptyOption.prop('selected', true); // needed for IE\n        emptyOption.attr('selected', true);\n      };\n\n      var removeEmptyOption = function() {\n        if (!providedEmptyOption) {\n          emptyOption.remove();\n        }\n      };\n\n\n      var renderUnknownOption = function() {\n        selectElement.prepend(unknownOption);\n        selectElement.val('?');\n        unknownOption.prop('selected', true); // needed for IE\n        unknownOption.attr('selected', true);\n      };\n\n      var removeUnknownOption = function() {\n        unknownOption.remove();\n      };\n\n      // Update the controller methods for multiple selectable options\n      if (!multiple) {\n\n        selectCtrl.writeValue = function writeNgOptionsValue(value) {\n          var option = options.getOptionFromViewValue(value);\n\n          if (option) {\n            // Don't update the option when it is already selected.\n            // For example, the browser will select the first option by default. In that case,\n            // most properties are set automatically - except the `selected` attribute, which we\n            // set always\n\n            if (selectElement[0].value !== option.selectValue) {\n              removeUnknownOption();\n              removeEmptyOption();\n\n              selectElement[0].value = option.selectValue;\n              option.element.selected = true;\n            }\n\n            option.element.setAttribute('selected', 'selected');\n          } else {\n            if (value === null || providedEmptyOption) {\n              removeUnknownOption();\n              renderEmptyOption();\n            } else {\n              removeEmptyOption();\n              renderUnknownOption();\n            }\n          }\n        };\n\n        selectCtrl.readValue = function readNgOptionsValue() {\n\n          var selectedOption = options.selectValueMap[selectElement.val()];\n\n          if (selectedOption && !selectedOption.disabled) {\n            removeEmptyOption();\n            removeUnknownOption();\n            return options.getViewValueFromOption(selectedOption);\n          }\n          return null;\n        };\n\n        // If we are using `track by` then we must watch the tracked value on the model\n        // since ngModel only watches for object identity change\n        if (ngOptions.trackBy) {\n          scope.$watch(\n            function() { return ngOptions.getTrackByValue(ngModelCtrl.$viewValue); },\n            function() { ngModelCtrl.$render(); }\n          );\n        }\n\n      } else {\n\n        ngModelCtrl.$isEmpty = function(value) {\n          return !value || value.length === 0;\n        };\n\n\n        selectCtrl.writeValue = function writeNgOptionsMultiple(value) {\n          options.items.forEach(function(option) {\n            option.element.selected = false;\n          });\n\n          if (value) {\n            value.forEach(function(item) {\n              var option = options.getOptionFromViewValue(item);\n              if (option) option.element.selected = true;\n            });\n          }\n        };\n\n\n        selectCtrl.readValue = function readNgOptionsMultiple() {\n          var selectedValues = selectElement.val() || [],\n              selections = [];\n\n          forEach(selectedValues, function(value) {\n            var option = options.selectValueMap[value];\n            if (option && !option.disabled) selections.push(options.getViewValueFromOption(option));\n          });\n\n          return selections;\n        };\n\n        // If we are using `track by` then we must watch these tracked values on the model\n        // since ngModel only watches for object identity change\n        if (ngOptions.trackBy) {\n\n          scope.$watchCollection(function() {\n            if (isArray(ngModelCtrl.$viewValue)) {\n              return ngModelCtrl.$viewValue.map(function(value) {\n                return ngOptions.getTrackByValue(value);\n              });\n            }\n          }, function() {\n            ngModelCtrl.$render();\n          });\n\n        }\n      }\n\n\n      if (providedEmptyOption) {\n\n        // we need to remove it before calling selectElement.empty() because otherwise IE will\n        // remove the label from the element. wtf?\n        emptyOption.remove();\n\n        // compile the element since there might be bindings in it\n        $compile(emptyOption)(scope);\n\n        // remove the class, which is added automatically because we recompile the element and it\n        // becomes the compilation root\n        emptyOption.removeClass('ng-scope');\n      } else {\n        emptyOption = jqLite(optionTemplate.cloneNode(false));\n      }\n\n      selectElement.empty();\n\n      // We need to do this here to ensure that the options object is defined\n      // when we first hit it in writeNgOptionsValue\n      updateOptions();\n\n      // We will re-render the option elements if the option values or labels change\n      scope.$watchCollection(ngOptions.getWatchables, updateOptions);\n\n      // ------------------------------------------------------------------ //\n\n      function addOptionElement(option, parent) {\n        var optionElement = optionTemplate.cloneNode(false);\n        parent.appendChild(optionElement);\n        updateOptionElement(option, optionElement);\n      }\n\n\n      function updateOptionElement(option, element) {\n        option.element = element;\n        element.disabled = option.disabled;\n        // NOTE: The label must be set before the value, otherwise IE10/11/EDGE create unresponsive\n        // selects in certain circumstances when multiple selects are next to each other and display\n        // the option list in listbox style, i.e. the select is [multiple], or specifies a [size].\n        // See https://github.com/angular/angular.js/issues/11314 for more info.\n        // This is unfortunately untestable with unit / e2e tests\n        if (option.label !== element.label) {\n          element.label = option.label;\n          element.textContent = option.label;\n        }\n        if (option.value !== element.value) element.value = option.selectValue;\n      }\n\n      function updateOptions() {\n        var previousValue = options && selectCtrl.readValue();\n\n        // We must remove all current options, but cannot simply set innerHTML = null\n        // since the providedEmptyOption might have an ngIf on it that inserts comments which we\n        // must preserve.\n        // Instead, iterate over the current option elements and remove them or their optgroup\n        // parents\n        if (options) {\n\n          for (var i = options.items.length - 1; i >= 0; i--) {\n            var option = options.items[i];\n            if (isDefined(option.group)) {\n              jqLiteRemove(option.element.parentNode);\n            } else {\n              jqLiteRemove(option.element);\n            }\n          }\n        }\n\n        options = ngOptions.getOptions();\n\n        var groupElementMap = {};\n\n        // Ensure that the empty option is always there if it was explicitly provided\n        if (providedEmptyOption) {\n          selectElement.prepend(emptyOption);\n        }\n\n        options.items.forEach(function addOption(option) {\n          var groupElement;\n\n          if (isDefined(option.group)) {\n\n            // This option is to live in a group\n            // See if we have already created this group\n            groupElement = groupElementMap[option.group];\n\n            if (!groupElement) {\n\n              groupElement = optGroupTemplate.cloneNode(false);\n              listFragment.appendChild(groupElement);\n\n              // Update the label on the group element\n              // \"null\" is special cased because of Safari\n              groupElement.label = option.group === null ? 'null' : option.group;\n\n              // Store it for use later\n              groupElementMap[option.group] = groupElement;\n            }\n\n            addOptionElement(option, groupElement);\n\n          } else {\n\n            // This option is not in a group\n            addOptionElement(option, listFragment);\n          }\n        });\n\n        selectElement[0].appendChild(listFragment);\n\n        ngModelCtrl.$render();\n\n        // Check to see if the value has changed due to the update to the options\n        if (!ngModelCtrl.$isEmpty(previousValue)) {\n          var nextValue = selectCtrl.readValue();\n          var isNotPrimitive = ngOptions.trackBy || multiple;\n          if (isNotPrimitive ? !equals(previousValue, nextValue) : previousValue !== nextValue) {\n            ngModelCtrl.$setViewValue(nextValue);\n            ngModelCtrl.$render();\n          }\n        }\n\n      }\n  }\n\n  return {\n    restrict: 'A',\n    terminal: true,\n    require: ['select', 'ngModel'],\n    link: {\n      pre: function ngOptionsPreLink(scope, selectElement, attr, ctrls) {\n        // Deactivate the SelectController.register method to prevent\n        // option directives from accidentally registering themselves\n        // (and unwanted $destroy handlers etc.)\n        ctrls[0].registerOption = noop;\n      },\n      post: ngOptionsPostLink\n    }\n  };\n}];\n\n/**\n * @ngdoc directive\n * @name ngPluralize\n * @restrict EA\n *\n * @description\n * `ngPluralize` is a directive that displays messages according to en-US localization rules.\n * These rules are bundled with angular.js, but can be overridden\n * (see {@link guide/i18n Angular i18n} dev guide). You configure ngPluralize directive\n * by specifying the mappings between\n * [plural categories](http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html)\n * and the strings to be displayed.\n *\n * # Plural categories and explicit number rules\n * There are two\n * [plural categories](http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html)\n * in Angular's default en-US locale: \"one\" and \"other\".\n *\n * While a plural category may match many numbers (for example, in en-US locale, \"other\" can match\n * any number that is not 1), an explicit number rule can only match one number. For example, the\n * explicit number rule for \"3\" matches the number 3. There are examples of plural categories\n * and explicit number rules throughout the rest of this documentation.\n *\n * # Configuring ngPluralize\n * You configure ngPluralize by providing 2 attributes: `count` and `when`.\n * You can also provide an optional attribute, `offset`.\n *\n * The value of the `count` attribute can be either a string or an {@link guide/expression\n * Angular expression}; these are evaluated on the current scope for its bound value.\n *\n * The `when` attribute specifies the mappings between plural categories and the actual\n * string to be displayed. The value of the attribute should be a JSON object.\n *\n * The following example shows how to configure ngPluralize:\n *\n * ```html\n * <ng-pluralize count=\"personCount\"\n                 when=\"{'0': 'Nobody is viewing.',\n *                      'one': '1 person is viewing.',\n *                      'other': '{} people are viewing.'}\">\n * </ng-pluralize>\n *```\n *\n * In the example, `\"0: Nobody is viewing.\"` is an explicit number rule. If you did not\n * specify this rule, 0 would be matched to the \"other\" category and \"0 people are viewing\"\n * would be shown instead of \"Nobody is viewing\". You can specify an explicit number rule for\n * other numbers, for example 12, so that instead of showing \"12 people are viewing\", you can\n * show \"a dozen people are viewing\".\n *\n * You can use a set of closed braces (`{}`) as a placeholder for the number that you want substituted\n * into pluralized strings. In the previous example, Angular will replace `{}` with\n * <span ng-non-bindable>`{{personCount}}`</span>. The closed braces `{}` is a placeholder\n * for <span ng-non-bindable>{{numberExpression}}</span>.\n *\n * If no rule is defined for a category, then an empty string is displayed and a warning is generated.\n * Note that some locales define more categories than `one` and `other`. For example, fr-fr defines `few` and `many`.\n *\n * # Configuring ngPluralize with offset\n * The `offset` attribute allows further customization of pluralized text, which can result in\n * a better user experience. For example, instead of the message \"4 people are viewing this document\",\n * you might display \"John, Kate and 2 others are viewing this document\".\n * The offset attribute allows you to offset a number by any desired value.\n * Let's take a look at an example:\n *\n * ```html\n * <ng-pluralize count=\"personCount\" offset=2\n *               when=\"{'0': 'Nobody is viewing.',\n *                      '1': '{{person1}} is viewing.',\n *                      '2': '{{person1}} and {{person2}} are viewing.',\n *                      'one': '{{person1}}, {{person2}} and one other person are viewing.',\n *                      'other': '{{person1}}, {{person2}} and {} other people are viewing.'}\">\n * </ng-pluralize>\n * ```\n *\n * Notice that we are still using two plural categories(one, other), but we added\n * three explicit number rules 0, 1 and 2.\n * When one person, perhaps John, views the document, \"John is viewing\" will be shown.\n * When three people view the document, no explicit number rule is found, so\n * an offset of 2 is taken off 3, and Angular uses 1 to decide the plural category.\n * In this case, plural category 'one' is matched and \"John, Mary and one other person are viewing\"\n * is shown.\n *\n * Note that when you specify offsets, you must provide explicit number rules for\n * numbers from 0 up to and including the offset. If you use an offset of 3, for example,\n * you must provide explicit number rules for 0, 1, 2 and 3. You must also provide plural strings for\n * plural categories \"one\" and \"other\".\n *\n * @param {string|expression} count The variable to be bound to.\n * @param {string} when The mapping between plural category to its corresponding strings.\n * @param {number=} offset Offset to deduct from the total number.\n *\n * @example\n    <example module=\"pluralizeExample\">\n      <file name=\"index.html\">\n        <script>\n          angular.module('pluralizeExample', [])\n            .controller('ExampleController', ['$scope', function($scope) {\n              $scope.person1 = 'Igor';\n              $scope.person2 = 'Misko';\n              $scope.personCount = 1;\n            }]);\n        </script>\n        <div ng-controller=\"ExampleController\">\n          <label>Person 1:<input type=\"text\" ng-model=\"person1\" value=\"Igor\" /></label><br/>\n          <label>Person 2:<input type=\"text\" ng-model=\"person2\" value=\"Misko\" /></label><br/>\n          <label>Number of People:<input type=\"text\" ng-model=\"personCount\" value=\"1\" /></label><br/>\n\n          <!--- Example with simple pluralization rules for en locale --->\n          Without Offset:\n          <ng-pluralize count=\"personCount\"\n                        when=\"{'0': 'Nobody is viewing.',\n                               'one': '1 person is viewing.',\n                               'other': '{} people are viewing.'}\">\n          </ng-pluralize><br>\n\n          <!--- Example with offset --->\n          With Offset(2):\n          <ng-pluralize count=\"personCount\" offset=2\n                        when=\"{'0': 'Nobody is viewing.',\n                               '1': '{{person1}} is viewing.',\n                               '2': '{{person1}} and {{person2}} are viewing.',\n                               'one': '{{person1}}, {{person2}} and one other person are viewing.',\n                               'other': '{{person1}}, {{person2}} and {} other people are viewing.'}\">\n          </ng-pluralize>\n        </div>\n      </file>\n      <file name=\"protractor.js\" type=\"protractor\">\n        it('should show correct pluralized string', function() {\n          var withoutOffset = element.all(by.css('ng-pluralize')).get(0);\n          var withOffset = element.all(by.css('ng-pluralize')).get(1);\n          var countInput = element(by.model('personCount'));\n\n          expect(withoutOffset.getText()).toEqual('1 person is viewing.');\n          expect(withOffset.getText()).toEqual('Igor is viewing.');\n\n          countInput.clear();\n          countInput.sendKeys('0');\n\n          expect(withoutOffset.getText()).toEqual('Nobody is viewing.');\n          expect(withOffset.getText()).toEqual('Nobody is viewing.');\n\n          countInput.clear();\n          countInput.sendKeys('2');\n\n          expect(withoutOffset.getText()).toEqual('2 people are viewing.');\n          expect(withOffset.getText()).toEqual('Igor and Misko are viewing.');\n\n          countInput.clear();\n          countInput.sendKeys('3');\n\n          expect(withoutOffset.getText()).toEqual('3 people are viewing.');\n          expect(withOffset.getText()).toEqual('Igor, Misko and one other person are viewing.');\n\n          countInput.clear();\n          countInput.sendKeys('4');\n\n          expect(withoutOffset.getText()).toEqual('4 people are viewing.');\n          expect(withOffset.getText()).toEqual('Igor, Misko and 2 other people are viewing.');\n        });\n        it('should show data-bound names', function() {\n          var withOffset = element.all(by.css('ng-pluralize')).get(1);\n          var personCount = element(by.model('personCount'));\n          var person1 = element(by.model('person1'));\n          var person2 = element(by.model('person2'));\n          personCount.clear();\n          personCount.sendKeys('4');\n          person1.clear();\n          person1.sendKeys('Di');\n          person2.clear();\n          person2.sendKeys('Vojta');\n          expect(withOffset.getText()).toEqual('Di, Vojta and 2 other people are viewing.');\n        });\n      </file>\n    </example>\n */\nvar ngPluralizeDirective = ['$locale', '$interpolate', '$log', function($locale, $interpolate, $log) {\n  var BRACE = /{}/g,\n      IS_WHEN = /^when(Minus)?(.+)$/;\n\n  return {\n    link: function(scope, element, attr) {\n      var numberExp = attr.count,\n          whenExp = attr.$attr.when && element.attr(attr.$attr.when), // we have {{}} in attrs\n          offset = attr.offset || 0,\n          whens = scope.$eval(whenExp) || {},\n          whensExpFns = {},\n          startSymbol = $interpolate.startSymbol(),\n          endSymbol = $interpolate.endSymbol(),\n          braceReplacement = startSymbol + numberExp + '-' + offset + endSymbol,\n          watchRemover = angular.noop,\n          lastCount;\n\n      forEach(attr, function(expression, attributeName) {\n        var tmpMatch = IS_WHEN.exec(attributeName);\n        if (tmpMatch) {\n          var whenKey = (tmpMatch[1] ? '-' : '') + lowercase(tmpMatch[2]);\n          whens[whenKey] = element.attr(attr.$attr[attributeName]);\n        }\n      });\n      forEach(whens, function(expression, key) {\n        whensExpFns[key] = $interpolate(expression.replace(BRACE, braceReplacement));\n\n      });\n\n      scope.$watch(numberExp, function ngPluralizeWatchAction(newVal) {\n        var count = parseFloat(newVal);\n        var countIsNaN = isNaN(count);\n\n        if (!countIsNaN && !(count in whens)) {\n          // If an explicit number rule such as 1, 2, 3... is defined, just use it.\n          // Otherwise, check it against pluralization rules in $locale service.\n          count = $locale.pluralCat(count - offset);\n        }\n\n        // If both `count` and `lastCount` are NaN, we don't need to re-register a watch.\n        // In JS `NaN !== NaN`, so we have to explicitly check.\n        if ((count !== lastCount) && !(countIsNaN && isNumber(lastCount) && isNaN(lastCount))) {\n          watchRemover();\n          var whenExpFn = whensExpFns[count];\n          if (isUndefined(whenExpFn)) {\n            if (newVal != null) {\n              $log.debug(\"ngPluralize: no rule defined for '\" + count + \"' in \" + whenExp);\n            }\n            watchRemover = noop;\n            updateElementText();\n          } else {\n            watchRemover = scope.$watch(whenExpFn, updateElementText);\n          }\n          lastCount = count;\n        }\n      });\n\n      function updateElementText(newText) {\n        element.text(newText || '');\n      }\n    }\n  };\n}];\n\n/**\n * @ngdoc directive\n * @name ngRepeat\n * @multiElement\n *\n * @description\n * The `ngRepeat` directive instantiates a template once per item from a collection. Each template\n * instance gets its own scope, where the given loop variable is set to the current collection item,\n * and `$index` is set to the item index or key.\n *\n * Special properties are exposed on the local scope of each template instance, including:\n *\n * | Variable  | Type            | Details                                                                     |\n * |-----------|-----------------|-----------------------------------------------------------------------------|\n * | `$index`  | {@type number}  | iterator offset of the repeated element (0..length-1)                       |\n * | `$first`  | {@type boolean} | true if the repeated element is first in the iterator.                      |\n * | `$middle` | {@type boolean} | true if the repeated element is between the first and last in the iterator. |\n * | `$last`   | {@type boolean} | true if the repeated element is last in the iterator.                       |\n * | `$even`   | {@type boolean} | true if the iterator position `$index` is even (otherwise false).           |\n * | `$odd`    | {@type boolean} | true if the iterator position `$index` is odd (otherwise false).            |\n *\n * <div class=\"alert alert-info\">\n *   Creating aliases for these properties is possible with {@link ng.directive:ngInit `ngInit`}.\n *   This may be useful when, for instance, nesting ngRepeats.\n * </div>\n *\n *\n * # Iterating over object properties\n *\n * It is possible to get `ngRepeat` to iterate over the properties of an object using the following\n * syntax:\n *\n * ```js\n * <div ng-repeat=\"(key, value) in myObj\"> ... </div>\n * ```\n *\n * However, there are a limitations compared to array iteration:\n *\n * - The JavaScript specification does not define the order of keys\n *   returned for an object, so Angular relies on the order returned by the browser\n *   when running `for key in myObj`. Browsers generally follow the strategy of providing\n *   keys in the order in which they were defined, although there are exceptions when keys are deleted\n *   and reinstated. See the\n *   [MDN page on `delete` for more info](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/delete#Cross-browser_notes).\n *\n * - `ngRepeat` will silently *ignore* object keys starting with `$`, because\n *   it's a prefix used by Angular for public (`$`) and private (`$$`) properties.\n *\n * - The built-in filters {@link ng.orderBy orderBy} and {@link ng.filter filter} do not work with\n *   objects, and will throw an error if used with one.\n *\n * If you are hitting any of these limitations, the recommended workaround is to convert your object into an array\n * that is sorted into the order that you prefer before providing it to `ngRepeat`. You could\n * do this with a filter such as [toArrayFilter](http://ngmodules.org/modules/angular-toArrayFilter)\n * or implement a `$watch` on the object yourself.\n *\n *\n * # Tracking and Duplicates\n *\n * `ngRepeat` uses {@link $rootScope.Scope#$watchCollection $watchCollection} to detect changes in\n * the collection. When a change happens, ngRepeat then makes the corresponding changes to the DOM:\n *\n * * When an item is added, a new instance of the template is added to the DOM.\n * * When an item is removed, its template instance is removed from the DOM.\n * * When items are reordered, their respective templates are reordered in the DOM.\n *\n * To minimize creation of DOM elements, `ngRepeat` uses a function\n * to \"keep track\" of all items in the collection and their corresponding DOM elements.\n * For example, if an item is added to the collection, ngRepeat will know that all other items\n * already have DOM elements, and will not re-render them.\n *\n * The default tracking function (which tracks items by their identity) does not allow\n * duplicate items in arrays. This is because when there are duplicates, it is not possible\n * to maintain a one-to-one mapping between collection items and DOM elements.\n *\n * If you do need to repeat duplicate items, you can substitute the default tracking behavior\n * with your own using the `track by` expression.\n *\n * For example, you may track items by the index of each item in the collection, using the\n * special scope property `$index`:\n * ```html\n *    <div ng-repeat=\"n in [42, 42, 43, 43] track by $index\">\n *      {{n}}\n *    </div>\n * ```\n *\n * You may also use arbitrary expressions in `track by`, including references to custom functions\n * on the scope:\n * ```html\n *    <div ng-repeat=\"n in [42, 42, 43, 43] track by myTrackingFunction(n)\">\n *      {{n}}\n *    </div>\n * ```\n *\n * <div class=\"alert alert-success\">\n * If you are working with objects that have an identifier property, you should track\n * by the identifier instead of the whole object. Should you reload your data later, `ngRepeat`\n * will not have to rebuild the DOM elements for items it has already rendered, even if the\n * JavaScript objects in the collection have been substituted for new ones. For large collections,\n * this significantly improves rendering performance. If you don't have a unique identifier,\n * `track by $index` can also provide a performance boost.\n * </div>\n * ```html\n *    <div ng-repeat=\"model in collection track by model.id\">\n *      {{model.name}}\n *    </div>\n * ```\n *\n * When no `track by` expression is provided, it is equivalent to tracking by the built-in\n * `$id` function, which tracks items by their identity:\n * ```html\n *    <div ng-repeat=\"obj in collection track by $id(obj)\">\n *      {{obj.prop}}\n *    </div>\n * ```\n *\n * <div class=\"alert alert-warning\">\n * **Note:** `track by` must always be the last expression:\n * </div>\n * ```\n * <div ng-repeat=\"model in collection | orderBy: 'id' as filtered_result track by model.id\">\n *     {{model.name}}\n * </div>\n * ```\n *\n * # Special repeat start and end points\n * To repeat a series of elements instead of just one parent element, ngRepeat (as well as other ng directives) supports extending\n * the range of the repeater by defining explicit start and end points by using **ng-repeat-start** and **ng-repeat-end** respectively.\n * The **ng-repeat-start** directive works the same as **ng-repeat**, but will repeat all the HTML code (including the tag it's defined on)\n * up to and including the ending HTML tag where **ng-repeat-end** is placed.\n *\n * The example below makes use of this feature:\n * ```html\n *   <header ng-repeat-start=\"item in items\">\n *     Header {{ item }}\n *   </header>\n *   <div class=\"body\">\n *     Body {{ item }}\n *   </div>\n *   <footer ng-repeat-end>\n *     Footer {{ item }}\n *   </footer>\n * ```\n *\n * And with an input of {@type ['A','B']} for the items variable in the example above, the output will evaluate to:\n * ```html\n *   <header>\n *     Header A\n *   </header>\n *   <div class=\"body\">\n *     Body A\n *   </div>\n *   <footer>\n *     Footer A\n *   </footer>\n *   <header>\n *     Header B\n *   </header>\n *   <div class=\"body\">\n *     Body B\n *   </div>\n *   <footer>\n *     Footer B\n *   </footer>\n * ```\n *\n * The custom start and end points for ngRepeat also support all other HTML directive syntax flavors provided in AngularJS (such\n * as **data-ng-repeat-start**, **x-ng-repeat-start** and **ng:repeat-start**).\n *\n * @animations\n * | Animation                        | Occurs                              |\n * |----------------------------------|-------------------------------------|\n * | {@link ng.$animate#enter enter} | when a new item is added to the list or when an item is revealed after a filter |\n * | {@link ng.$animate#leave leave} | when an item is removed from the list or when an item is filtered out |\n * | {@link ng.$animate#move move } | when an adjacent item is filtered out causing a reorder or when the item contents are reordered |\n *\n * See the example below for defining CSS animations with ngRepeat.\n *\n * @element ANY\n * @scope\n * @priority 1000\n * @param {repeat_expression} ngRepeat The expression indicating how to enumerate a collection. These\n *   formats are currently supported:\n *\n *   * `variable in expression` – where variable is the user defined loop variable and `expression`\n *     is a scope expression giving the collection to enumerate.\n *\n *     For example: `album in artist.albums`.\n *\n *   * `(key, value) in expression` – where `key` and `value` can be any user defined identifiers,\n *     and `expression` is the scope expression giving the collection to enumerate.\n *\n *     For example: `(name, age) in {'adam':10, 'amalie':12}`.\n *\n *   * `variable in expression track by tracking_expression` – You can also provide an optional tracking expression\n *     which can be used to associate the objects in the collection with the DOM elements. If no tracking expression\n *     is specified, ng-repeat associates elements by identity. It is an error to have\n *     more than one tracking expression value resolve to the same key. (This would mean that two distinct objects are\n *     mapped to the same DOM element, which is not possible.)\n *\n *     Note that the tracking expression must come last, after any filters, and the alias expression.\n *\n *     For example: `item in items` is equivalent to `item in items track by $id(item)`. This implies that the DOM elements\n *     will be associated by item identity in the array.\n *\n *     For example: `item in items track by $id(item)`. A built in `$id()` function can be used to assign a unique\n *     `$$hashKey` property to each item in the array. This property is then used as a key to associated DOM elements\n *     with the corresponding item in the array by identity. Moving the same object in array would move the DOM\n *     element in the same way in the DOM.\n *\n *     For example: `item in items track by item.id` is a typical pattern when the items come from the database. In this\n *     case the object identity does not matter. Two objects are considered equivalent as long as their `id`\n *     property is same.\n *\n *     For example: `item in items | filter:searchText track by item.id` is a pattern that might be used to apply a filter\n *     to items in conjunction with a tracking expression.\n *\n *   * `variable in expression as alias_expression` – You can also provide an optional alias expression which will then store the\n *     intermediate results of the repeater after the filters have been applied. Typically this is used to render a special message\n *     when a filter is active on the repeater, but the filtered result set is empty.\n *\n *     For example: `item in items | filter:x as results` will store the fragment of the repeated items as `results`, but only after\n *     the items have been processed through the filter.\n *\n *     Please note that `as [variable name] is not an operator but rather a part of ngRepeat micro-syntax so it can be used only at the end\n *     (and not as operator, inside an expression).\n *\n *     For example: `item in items | filter : x | orderBy : order | limitTo : limit as results` .\n *\n * @example\n * This example uses `ngRepeat` to display a list of people. A filter is used to restrict the displayed\n * results by name. New (entering) and removed (leaving) items are animated.\n  <example module=\"ngRepeat\" name=\"ngRepeat\" deps=\"angular-animate.js\" animations=\"true\">\n    <file name=\"index.html\">\n      <div ng-controller=\"repeatController\">\n        I have {{friends.length}} friends. They are:\n        <input type=\"search\" ng-model=\"q\" placeholder=\"filter friends...\" aria-label=\"filter friends\" />\n        <ul class=\"example-animate-container\">\n          <li class=\"animate-repeat\" ng-repeat=\"friend in friends | filter:q as results\">\n            [{{$index + 1}}] {{friend.name}} who is {{friend.age}} years old.\n          </li>\n          <li class=\"animate-repeat\" ng-if=\"results.length == 0\">\n            <strong>No results found...</strong>\n          </li>\n        </ul>\n      </div>\n    </file>\n    <file name=\"script.js\">\n      angular.module('ngRepeat', ['ngAnimate']).controller('repeatController', function($scope) {\n        $scope.friends = [\n          {name:'John', age:25, gender:'boy'},\n          {name:'Jessie', age:30, gender:'girl'},\n          {name:'Johanna', age:28, gender:'girl'},\n          {name:'Joy', age:15, gender:'girl'},\n          {name:'Mary', age:28, gender:'girl'},\n          {name:'Peter', age:95, gender:'boy'},\n          {name:'Sebastian', age:50, gender:'boy'},\n          {name:'Erika', age:27, gender:'girl'},\n          {name:'Patrick', age:40, gender:'boy'},\n          {name:'Samantha', age:60, gender:'girl'}\n        ];\n      });\n    </file>\n    <file name=\"animations.css\">\n      .example-animate-container {\n        background:white;\n        border:1px solid black;\n        list-style:none;\n        margin:0;\n        padding:0 10px;\n      }\n\n      .animate-repeat {\n        line-height:30px;\n        list-style:none;\n        box-sizing:border-box;\n      }\n\n      .animate-repeat.ng-move,\n      .animate-repeat.ng-enter,\n      .animate-repeat.ng-leave {\n        transition:all linear 0.5s;\n      }\n\n      .animate-repeat.ng-leave.ng-leave-active,\n      .animate-repeat.ng-move,\n      .animate-repeat.ng-enter {\n        opacity:0;\n        max-height:0;\n      }\n\n      .animate-repeat.ng-leave,\n      .animate-repeat.ng-move.ng-move-active,\n      .animate-repeat.ng-enter.ng-enter-active {\n        opacity:1;\n        max-height:30px;\n      }\n    </file>\n    <file name=\"protractor.js\" type=\"protractor\">\n      var friends = element.all(by.repeater('friend in friends'));\n\n      it('should render initial data set', function() {\n        expect(friends.count()).toBe(10);\n        expect(friends.get(0).getText()).toEqual('[1] John who is 25 years old.');\n        expect(friends.get(1).getText()).toEqual('[2] Jessie who is 30 years old.');\n        expect(friends.last().getText()).toEqual('[10] Samantha who is 60 years old.');\n        expect(element(by.binding('friends.length')).getText())\n            .toMatch(\"I have 10 friends. They are:\");\n      });\n\n       it('should update repeater when filter predicate changes', function() {\n         expect(friends.count()).toBe(10);\n\n         element(by.model('q')).sendKeys('ma');\n\n         expect(friends.count()).toBe(2);\n         expect(friends.get(0).getText()).toEqual('[1] Mary who is 28 years old.');\n         expect(friends.last().getText()).toEqual('[2] Samantha who is 60 years old.');\n       });\n      </file>\n    </example>\n */\nvar ngRepeatDirective = ['$parse', '$animate', '$compile', function($parse, $animate, $compile) {\n  var NG_REMOVED = '$$NG_REMOVED';\n  var ngRepeatMinErr = minErr('ngRepeat');\n\n  var updateScope = function(scope, index, valueIdentifier, value, keyIdentifier, key, arrayLength) {\n    // TODO(perf): generate setters to shave off ~40ms or 1-1.5%\n    scope[valueIdentifier] = value;\n    if (keyIdentifier) scope[keyIdentifier] = key;\n    scope.$index = index;\n    scope.$first = (index === 0);\n    scope.$last = (index === (arrayLength - 1));\n    scope.$middle = !(scope.$first || scope.$last);\n    // jshint bitwise: false\n    scope.$odd = !(scope.$even = (index&1) === 0);\n    // jshint bitwise: true\n  };\n\n  var getBlockStart = function(block) {\n    return block.clone[0];\n  };\n\n  var getBlockEnd = function(block) {\n    return block.clone[block.clone.length - 1];\n  };\n\n\n  return {\n    restrict: 'A',\n    multiElement: true,\n    transclude: 'element',\n    priority: 1000,\n    terminal: true,\n    $$tlb: true,\n    compile: function ngRepeatCompile($element, $attr) {\n      var expression = $attr.ngRepeat;\n      var ngRepeatEndComment = $compile.$$createComment('end ngRepeat', expression);\n\n      var match = expression.match(/^\\s*([\\s\\S]+?)\\s+in\\s+([\\s\\S]+?)(?:\\s+as\\s+([\\s\\S]+?))?(?:\\s+track\\s+by\\s+([\\s\\S]+?))?\\s*$/);\n\n      if (!match) {\n        throw ngRepeatMinErr('iexp', \"Expected expression in form of '_item_ in _collection_[ track by _id_]' but got '{0}'.\",\n            expression);\n      }\n\n      var lhs = match[1];\n      var rhs = match[2];\n      var aliasAs = match[3];\n      var trackByExp = match[4];\n\n      match = lhs.match(/^(?:(\\s*[\\$\\w]+)|\\(\\s*([\\$\\w]+)\\s*,\\s*([\\$\\w]+)\\s*\\))$/);\n\n      if (!match) {\n        throw ngRepeatMinErr('iidexp', \"'_item_' in '_item_ in _collection_' should be an identifier or '(_key_, _value_)' expression, but got '{0}'.\",\n            lhs);\n      }\n      var valueIdentifier = match[3] || match[1];\n      var keyIdentifier = match[2];\n\n      if (aliasAs && (!/^[$a-zA-Z_][$a-zA-Z0-9_]*$/.test(aliasAs) ||\n          /^(null|undefined|this|\\$index|\\$first|\\$middle|\\$last|\\$even|\\$odd|\\$parent|\\$root|\\$id)$/.test(aliasAs))) {\n        throw ngRepeatMinErr('badident', \"alias '{0}' is invalid --- must be a valid JS identifier which is not a reserved name.\",\n          aliasAs);\n      }\n\n      var trackByExpGetter, trackByIdExpFn, trackByIdArrayFn, trackByIdObjFn;\n      var hashFnLocals = {$id: hashKey};\n\n      if (trackByExp) {\n        trackByExpGetter = $parse(trackByExp);\n      } else {\n        trackByIdArrayFn = function(key, value) {\n          return hashKey(value);\n        };\n        trackByIdObjFn = function(key) {\n          return key;\n        };\n      }\n\n      return function ngRepeatLink($scope, $element, $attr, ctrl, $transclude) {\n\n        if (trackByExpGetter) {\n          trackByIdExpFn = function(key, value, index) {\n            // assign key, value, and $index to the locals so that they can be used in hash functions\n            if (keyIdentifier) hashFnLocals[keyIdentifier] = key;\n            hashFnLocals[valueIdentifier] = value;\n            hashFnLocals.$index = index;\n            return trackByExpGetter($scope, hashFnLocals);\n          };\n        }\n\n        // Store a list of elements from previous run. This is a hash where key is the item from the\n        // iterator, and the value is objects with following properties.\n        //   - scope: bound scope\n        //   - element: previous element.\n        //   - index: position\n        //\n        // We are using no-proto object so that we don't need to guard against inherited props via\n        // hasOwnProperty.\n        var lastBlockMap = createMap();\n\n        //watch props\n        $scope.$watchCollection(rhs, function ngRepeatAction(collection) {\n          var index, length,\n              previousNode = $element[0],     // node that cloned nodes should be inserted after\n                                              // initialized to the comment node anchor\n              nextNode,\n              // Same as lastBlockMap but it has the current state. It will become the\n              // lastBlockMap on the next iteration.\n              nextBlockMap = createMap(),\n              collectionLength,\n              key, value, // key/value of iteration\n              trackById,\n              trackByIdFn,\n              collectionKeys,\n              block,       // last object information {scope, element, id}\n              nextBlockOrder,\n              elementsToRemove;\n\n          if (aliasAs) {\n            $scope[aliasAs] = collection;\n          }\n\n          if (isArrayLike(collection)) {\n            collectionKeys = collection;\n            trackByIdFn = trackByIdExpFn || trackByIdArrayFn;\n          } else {\n            trackByIdFn = trackByIdExpFn || trackByIdObjFn;\n            // if object, extract keys, in enumeration order, unsorted\n            collectionKeys = [];\n            for (var itemKey in collection) {\n              if (hasOwnProperty.call(collection, itemKey) && itemKey.charAt(0) !== '$') {\n                collectionKeys.push(itemKey);\n              }\n            }\n          }\n\n          collectionLength = collectionKeys.length;\n          nextBlockOrder = new Array(collectionLength);\n\n          // locate existing items\n          for (index = 0; index < collectionLength; index++) {\n            key = (collection === collectionKeys) ? index : collectionKeys[index];\n            value = collection[key];\n            trackById = trackByIdFn(key, value, index);\n            if (lastBlockMap[trackById]) {\n              // found previously seen block\n              block = lastBlockMap[trackById];\n              delete lastBlockMap[trackById];\n              nextBlockMap[trackById] = block;\n              nextBlockOrder[index] = block;\n            } else if (nextBlockMap[trackById]) {\n              // if collision detected. restore lastBlockMap and throw an error\n              forEach(nextBlockOrder, function(block) {\n                if (block && block.scope) lastBlockMap[block.id] = block;\n              });\n              throw ngRepeatMinErr('dupes',\n                  \"Duplicates in a repeater are not allowed. Use 'track by' expression to specify unique keys. Repeater: {0}, Duplicate key: {1}, Duplicate value: {2}\",\n                  expression, trackById, value);\n            } else {\n              // new never before seen block\n              nextBlockOrder[index] = {id: trackById, scope: undefined, clone: undefined};\n              nextBlockMap[trackById] = true;\n            }\n          }\n\n          // remove leftover items\n          for (var blockKey in lastBlockMap) {\n            block = lastBlockMap[blockKey];\n            elementsToRemove = getBlockNodes(block.clone);\n            $animate.leave(elementsToRemove);\n            if (elementsToRemove[0].parentNode) {\n              // if the element was not removed yet because of pending animation, mark it as deleted\n              // so that we can ignore it later\n              for (index = 0, length = elementsToRemove.length; index < length; index++) {\n                elementsToRemove[index][NG_REMOVED] = true;\n              }\n            }\n            block.scope.$destroy();\n          }\n\n          // we are not using forEach for perf reasons (trying to avoid #call)\n          for (index = 0; index < collectionLength; index++) {\n            key = (collection === collectionKeys) ? index : collectionKeys[index];\n            value = collection[key];\n            block = nextBlockOrder[index];\n\n            if (block.scope) {\n              // if we have already seen this object, then we need to reuse the\n              // associated scope/element\n\n              nextNode = previousNode;\n\n              // skip nodes that are already pending removal via leave animation\n              do {\n                nextNode = nextNode.nextSibling;\n              } while (nextNode && nextNode[NG_REMOVED]);\n\n              if (getBlockStart(block) != nextNode) {\n                // existing item which got moved\n                $animate.move(getBlockNodes(block.clone), null, previousNode);\n              }\n              previousNode = getBlockEnd(block);\n              updateScope(block.scope, index, valueIdentifier, value, keyIdentifier, key, collectionLength);\n            } else {\n              // new item which we don't know about\n              $transclude(function ngRepeatTransclude(clone, scope) {\n                block.scope = scope;\n                // http://jsperf.com/clone-vs-createcomment\n                var endNode = ngRepeatEndComment.cloneNode(false);\n                clone[clone.length++] = endNode;\n\n                $animate.enter(clone, null, previousNode);\n                previousNode = endNode;\n                // Note: We only need the first/last node of the cloned nodes.\n                // However, we need to keep the reference to the jqlite wrapper as it might be changed later\n                // by a directive with templateUrl when its template arrives.\n                block.clone = clone;\n                nextBlockMap[block.id] = block;\n                updateScope(block.scope, index, valueIdentifier, value, keyIdentifier, key, collectionLength);\n              });\n            }\n          }\n          lastBlockMap = nextBlockMap;\n        });\n      };\n    }\n  };\n}];\n\nvar NG_HIDE_CLASS = 'ng-hide';\nvar NG_HIDE_IN_PROGRESS_CLASS = 'ng-hide-animate';\n/**\n * @ngdoc directive\n * @name ngShow\n * @multiElement\n *\n * @description\n * The `ngShow` directive shows or hides the given HTML element based on the expression\n * provided to the `ngShow` attribute. The element is shown or hidden by removing or adding\n * the `.ng-hide` CSS class onto the element. The `.ng-hide` CSS class is predefined\n * in AngularJS and sets the display style to none (using an !important flag).\n * For CSP mode please add `angular-csp.css` to your html file (see {@link ng.directive:ngCsp ngCsp}).\n *\n * ```html\n * <!-- when $scope.myValue is truthy (element is visible) -->\n * <div ng-show=\"myValue\"></div>\n *\n * <!-- when $scope.myValue is falsy (element is hidden) -->\n * <div ng-show=\"myValue\" class=\"ng-hide\"></div>\n * ```\n *\n * When the `ngShow` expression evaluates to a falsy value then the `.ng-hide` CSS class is added to the class\n * attribute on the element causing it to become hidden. When truthy, the `.ng-hide` CSS class is removed\n * from the element causing the element not to appear hidden.\n *\n * ## Why is !important used?\n *\n * You may be wondering why !important is used for the `.ng-hide` CSS class. This is because the `.ng-hide` selector\n * can be easily overridden by heavier selectors. For example, something as simple\n * as changing the display style on a HTML list item would make hidden elements appear visible.\n * This also becomes a bigger issue when dealing with CSS frameworks.\n *\n * By using !important, the show and hide behavior will work as expected despite any clash between CSS selector\n * specificity (when !important isn't used with any conflicting styles). If a developer chooses to override the\n * styling to change how to hide an element then it is just a matter of using !important in their own CSS code.\n *\n * ### Overriding `.ng-hide`\n *\n * By default, the `.ng-hide` class will style the element with `display: none!important`. If you wish to change\n * the hide behavior with ngShow/ngHide then this can be achieved by restating the styles for the `.ng-hide`\n * class CSS. Note that the selector that needs to be used is actually `.ng-hide:not(.ng-hide-animate)` to cope\n * with extra animation classes that can be added.\n *\n * ```css\n * .ng-hide:not(.ng-hide-animate) {\n *   /&#42; this is just another form of hiding an element &#42;/\n *   display: block!important;\n *   position: absolute;\n *   top: -9999px;\n *   left: -9999px;\n * }\n * ```\n *\n * By default you don't need to override in CSS anything and the animations will work around the display style.\n *\n * ## A note about animations with `ngShow`\n *\n * Animations in ngShow/ngHide work with the show and hide events that are triggered when the directive expression\n * is true and false. This system works like the animation system present with ngClass except that\n * you must also include the !important flag to override the display property\n * so that you can perform an animation when the element is hidden during the time of the animation.\n *\n * ```css\n * //\n * //a working example can be found at the bottom of this page\n * //\n * .my-element.ng-hide-add, .my-element.ng-hide-remove {\n *   /&#42; this is required as of 1.3x to properly\n *      apply all styling in a show/hide animation &#42;/\n *   transition: 0s linear all;\n * }\n *\n * .my-element.ng-hide-add-active,\n * .my-element.ng-hide-remove-active {\n *   /&#42; the transition is defined in the active class &#42;/\n *   transition: 1s linear all;\n * }\n *\n * .my-element.ng-hide-add { ... }\n * .my-element.ng-hide-add.ng-hide-add-active { ... }\n * .my-element.ng-hide-remove { ... }\n * .my-element.ng-hide-remove.ng-hide-remove-active { ... }\n * ```\n *\n * Keep in mind that, as of AngularJS version 1.3, there is no need to change the display\n * property to block during animation states--ngAnimate will handle the style toggling automatically for you.\n *\n * @animations\n * | Animation                        | Occurs                              |\n * |----------------------------------|-------------------------------------|\n * | {@link $animate#addClass addClass} `.ng-hide`  | after the `ngShow` expression evaluates to a non truthy value and just before the contents are set to hidden |\n * | {@link $animate#removeClass removeClass}  `.ng-hide`  | after the `ngShow` expression evaluates to a truthy value and just before contents are set to visible |\n *\n * @element ANY\n * @param {expression} ngShow If the {@link guide/expression expression} is truthy\n *     then the element is shown or hidden respectively.\n *\n * @example\n  <example module=\"ngAnimate\" deps=\"angular-animate.js\" animations=\"true\">\n    <file name=\"index.html\">\n      Click me: <input type=\"checkbox\" ng-model=\"checked\" aria-label=\"Toggle ngHide\"><br/>\n      <div>\n        Show:\n        <div class=\"check-element animate-show\" ng-show=\"checked\">\n          <span class=\"glyphicon glyphicon-thumbs-up\"></span> I show up when your checkbox is checked.\n        </div>\n      </div>\n      <div>\n        Hide:\n        <div class=\"check-element animate-show\" ng-hide=\"checked\">\n          <span class=\"glyphicon glyphicon-thumbs-down\"></span> I hide when your checkbox is checked.\n        </div>\n      </div>\n    </file>\n    <file name=\"glyphicons.css\">\n      @import url(../../components/bootstrap-3.1.1/css/bootstrap.css);\n    </file>\n    <file name=\"animations.css\">\n      .animate-show {\n        line-height: 20px;\n        opacity: 1;\n        padding: 10px;\n        border: 1px solid black;\n        background: white;\n      }\n\n      .animate-show.ng-hide-add, .animate-show.ng-hide-remove {\n        transition: all linear 0.5s;\n      }\n\n      .animate-show.ng-hide {\n        line-height: 0;\n        opacity: 0;\n        padding: 0 10px;\n      }\n\n      .check-element {\n        padding: 10px;\n        border: 1px solid black;\n        background: white;\n      }\n    </file>\n    <file name=\"protractor.js\" type=\"protractor\">\n      var thumbsUp = element(by.css('span.glyphicon-thumbs-up'));\n      var thumbsDown = element(by.css('span.glyphicon-thumbs-down'));\n\n      it('should check ng-show / ng-hide', function() {\n        expect(thumbsUp.isDisplayed()).toBeFalsy();\n        expect(thumbsDown.isDisplayed()).toBeTruthy();\n\n        element(by.model('checked')).click();\n\n        expect(thumbsUp.isDisplayed()).toBeTruthy();\n        expect(thumbsDown.isDisplayed()).toBeFalsy();\n      });\n    </file>\n  </example>\n */\nvar ngShowDirective = ['$animate', function($animate) {\n  return {\n    restrict: 'A',\n    multiElement: true,\n    link: function(scope, element, attr) {\n      scope.$watch(attr.ngShow, function ngShowWatchAction(value) {\n        // we're adding a temporary, animation-specific class for ng-hide since this way\n        // we can control when the element is actually displayed on screen without having\n        // to have a global/greedy CSS selector that breaks when other animations are run.\n        // Read: https://github.com/angular/angular.js/issues/9103#issuecomment-58335845\n        $animate[value ? 'removeClass' : 'addClass'](element, NG_HIDE_CLASS, {\n          tempClasses: NG_HIDE_IN_PROGRESS_CLASS\n        });\n      });\n    }\n  };\n}];\n\n\n/**\n * @ngdoc directive\n * @name ngHide\n * @multiElement\n *\n * @description\n * The `ngHide` directive shows or hides the given HTML element based on the expression\n * provided to the `ngHide` attribute. The element is shown or hidden by removing or adding\n * the `ng-hide` CSS class onto the element. The `.ng-hide` CSS class is predefined\n * in AngularJS and sets the display style to none (using an !important flag).\n * For CSP mode please add `angular-csp.css` to your html file (see {@link ng.directive:ngCsp ngCsp}).\n *\n * ```html\n * <!-- when $scope.myValue is truthy (element is hidden) -->\n * <div ng-hide=\"myValue\" class=\"ng-hide\"></div>\n *\n * <!-- when $scope.myValue is falsy (element is visible) -->\n * <div ng-hide=\"myValue\"></div>\n * ```\n *\n * When the `ngHide` expression evaluates to a truthy value then the `.ng-hide` CSS class is added to the class\n * attribute on the element causing it to become hidden. When falsy, the `.ng-hide` CSS class is removed\n * from the element causing the element not to appear hidden.\n *\n * ## Why is !important used?\n *\n * You may be wondering why !important is used for the `.ng-hide` CSS class. This is because the `.ng-hide` selector\n * can be easily overridden by heavier selectors. For example, something as simple\n * as changing the display style on a HTML list item would make hidden elements appear visible.\n * This also becomes a bigger issue when dealing with CSS frameworks.\n *\n * By using !important, the show and hide behavior will work as expected despite any clash between CSS selector\n * specificity (when !important isn't used with any conflicting styles). If a developer chooses to override the\n * styling to change how to hide an element then it is just a matter of using !important in their own CSS code.\n *\n * ### Overriding `.ng-hide`\n *\n * By default, the `.ng-hide` class will style the element with `display: none!important`. If you wish to change\n * the hide behavior with ngShow/ngHide then this can be achieved by restating the styles for the `.ng-hide`\n * class in CSS:\n *\n * ```css\n * .ng-hide {\n *   /&#42; this is just another form of hiding an element &#42;/\n *   display: block!important;\n *   position: absolute;\n *   top: -9999px;\n *   left: -9999px;\n * }\n * ```\n *\n * By default you don't need to override in CSS anything and the animations will work around the display style.\n *\n * ## A note about animations with `ngHide`\n *\n * Animations in ngShow/ngHide work with the show and hide events that are triggered when the directive expression\n * is true and false. This system works like the animation system present with ngClass, except that the `.ng-hide`\n * CSS class is added and removed for you instead of your own CSS class.\n *\n * ```css\n * //\n * //a working example can be found at the bottom of this page\n * //\n * .my-element.ng-hide-add, .my-element.ng-hide-remove {\n *   transition: 0.5s linear all;\n * }\n *\n * .my-element.ng-hide-add { ... }\n * .my-element.ng-hide-add.ng-hide-add-active { ... }\n * .my-element.ng-hide-remove { ... }\n * .my-element.ng-hide-remove.ng-hide-remove-active { ... }\n * ```\n *\n * Keep in mind that, as of AngularJS version 1.3, there is no need to change the display\n * property to block during animation states--ngAnimate will handle the style toggling automatically for you.\n *\n * @animations\n * | Animation                        | Occurs                              |\n * |----------------------------------|-------------------------------------|\n * | {@link $animate#addClass addClass} `.ng-hide`  | after the `ngHide` expression evaluates to a truthy value and just before the contents are set to hidden |\n * | {@link $animate#removeClass removeClass}  `.ng-hide`  | after the `ngHide` expression evaluates to a non truthy value and just before contents are set to visible |\n *\n *\n * @element ANY\n * @param {expression} ngHide If the {@link guide/expression expression} is truthy then\n *     the element is shown or hidden respectively.\n *\n * @example\n  <example module=\"ngAnimate\" deps=\"angular-animate.js\" animations=\"true\">\n    <file name=\"index.html\">\n      Click me: <input type=\"checkbox\" ng-model=\"checked\" aria-label=\"Toggle ngShow\"><br/>\n      <div>\n        Show:\n        <div class=\"check-element animate-hide\" ng-show=\"checked\">\n          <span class=\"glyphicon glyphicon-thumbs-up\"></span> I show up when your checkbox is checked.\n        </div>\n      </div>\n      <div>\n        Hide:\n        <div class=\"check-element animate-hide\" ng-hide=\"checked\">\n          <span class=\"glyphicon glyphicon-thumbs-down\"></span> I hide when your checkbox is checked.\n        </div>\n      </div>\n    </file>\n    <file name=\"glyphicons.css\">\n      @import url(../../components/bootstrap-3.1.1/css/bootstrap.css);\n    </file>\n    <file name=\"animations.css\">\n      .animate-hide {\n        transition: all linear 0.5s;\n        line-height: 20px;\n        opacity: 1;\n        padding: 10px;\n        border: 1px solid black;\n        background: white;\n      }\n\n      .animate-hide.ng-hide {\n        line-height: 0;\n        opacity: 0;\n        padding: 0 10px;\n      }\n\n      .check-element {\n        padding: 10px;\n        border: 1px solid black;\n        background: white;\n      }\n    </file>\n    <file name=\"protractor.js\" type=\"protractor\">\n      var thumbsUp = element(by.css('span.glyphicon-thumbs-up'));\n      var thumbsDown = element(by.css('span.glyphicon-thumbs-down'));\n\n      it('should check ng-show / ng-hide', function() {\n        expect(thumbsUp.isDisplayed()).toBeFalsy();\n        expect(thumbsDown.isDisplayed()).toBeTruthy();\n\n        element(by.model('checked')).click();\n\n        expect(thumbsUp.isDisplayed()).toBeTruthy();\n        expect(thumbsDown.isDisplayed()).toBeFalsy();\n      });\n    </file>\n  </example>\n */\nvar ngHideDirective = ['$animate', function($animate) {\n  return {\n    restrict: 'A',\n    multiElement: true,\n    link: function(scope, element, attr) {\n      scope.$watch(attr.ngHide, function ngHideWatchAction(value) {\n        // The comment inside of the ngShowDirective explains why we add and\n        // remove a temporary class for the show/hide animation\n        $animate[value ? 'addClass' : 'removeClass'](element,NG_HIDE_CLASS, {\n          tempClasses: NG_HIDE_IN_PROGRESS_CLASS\n        });\n      });\n    }\n  };\n}];\n\n/**\n * @ngdoc directive\n * @name ngStyle\n * @restrict AC\n *\n * @description\n * The `ngStyle` directive allows you to set CSS style on an HTML element conditionally.\n *\n * @knownIssue\n * You should not use {@link guide/interpolation interpolation} in the value of the `style`\n * attribute, when using the `ngStyle` directive on the same element.\n * See {@link guide/interpolation#known-issues here} for more info.\n *\n * @element ANY\n * @param {expression} ngStyle\n *\n * {@link guide/expression Expression} which evals to an\n * object whose keys are CSS style names and values are corresponding values for those CSS\n * keys.\n *\n * Since some CSS style names are not valid keys for an object, they must be quoted.\n * See the 'background-color' style in the example below.\n *\n * @example\n   <example>\n     <file name=\"index.html\">\n        <input type=\"button\" value=\"set color\" ng-click=\"myStyle={color:'red'}\">\n        <input type=\"button\" value=\"set background\" ng-click=\"myStyle={'background-color':'blue'}\">\n        <input type=\"button\" value=\"clear\" ng-click=\"myStyle={}\">\n        <br/>\n        <span ng-style=\"myStyle\">Sample Text</span>\n        <pre>myStyle={{myStyle}}</pre>\n     </file>\n     <file name=\"style.css\">\n       span {\n         color: black;\n       }\n     </file>\n     <file name=\"protractor.js\" type=\"protractor\">\n       var colorSpan = element(by.css('span'));\n\n       it('should check ng-style', function() {\n         expect(colorSpan.getCssValue('color')).toBe('rgba(0, 0, 0, 1)');\n         element(by.css('input[value=\\'set color\\']')).click();\n         expect(colorSpan.getCssValue('color')).toBe('rgba(255, 0, 0, 1)');\n         element(by.css('input[value=clear]')).click();\n         expect(colorSpan.getCssValue('color')).toBe('rgba(0, 0, 0, 1)');\n       });\n     </file>\n   </example>\n */\nvar ngStyleDirective = ngDirective(function(scope, element, attr) {\n  scope.$watch(attr.ngStyle, function ngStyleWatchAction(newStyles, oldStyles) {\n    if (oldStyles && (newStyles !== oldStyles)) {\n      forEach(oldStyles, function(val, style) { element.css(style, '');});\n    }\n    if (newStyles) element.css(newStyles);\n  }, true);\n});\n\n/**\n * @ngdoc directive\n * @name ngSwitch\n * @restrict EA\n *\n * @description\n * The `ngSwitch` directive is used to conditionally swap DOM structure on your template based on a scope expression.\n * Elements within `ngSwitch` but without `ngSwitchWhen` or `ngSwitchDefault` directives will be preserved at the location\n * as specified in the template.\n *\n * The directive itself works similar to ngInclude, however, instead of downloading template code (or loading it\n * from the template cache), `ngSwitch` simply chooses one of the nested elements and makes it visible based on which element\n * matches the value obtained from the evaluated expression. In other words, you define a container element\n * (where you place the directive), place an expression on the **`on=\"...\"` attribute**\n * (or the **`ng-switch=\"...\"` attribute**), define any inner elements inside of the directive and place\n * a when attribute per element. The when attribute is used to inform ngSwitch which element to display when the on\n * expression is evaluated. If a matching expression is not found via a when attribute then an element with the default\n * attribute is displayed.\n *\n * <div class=\"alert alert-info\">\n * Be aware that the attribute values to match against cannot be expressions. They are interpreted\n * as literal string values to match against.\n * For example, **`ng-switch-when=\"someVal\"`** will match against the string `\"someVal\"` not against the\n * value of the expression `$scope.someVal`.\n * </div>\n\n * @animations\n * | Animation                        | Occurs                              |\n * |----------------------------------|-------------------------------------|\n * | {@link ng.$animate#enter enter}  | after the ngSwitch contents change and the matched child element is placed inside the container |\n * | {@link ng.$animate#leave leave}  | after the ngSwitch contents change and just before the former contents are removed from the DOM |\n *\n * @usage\n *\n * ```\n * <ANY ng-switch=\"expression\">\n *   <ANY ng-switch-when=\"matchValue1\">...</ANY>\n *   <ANY ng-switch-when=\"matchValue2\">...</ANY>\n *   <ANY ng-switch-default>...</ANY>\n * </ANY>\n * ```\n *\n *\n * @scope\n * @priority 1200\n * @param {*} ngSwitch|on expression to match against <code>ng-switch-when</code>.\n * On child elements add:\n *\n * * `ngSwitchWhen`: the case statement to match against. If match then this\n *   case will be displayed. If the same match appears multiple times, all the\n *   elements will be displayed.\n * * `ngSwitchDefault`: the default case when no other case match. If there\n *   are multiple default cases, all of them will be displayed when no other\n *   case match.\n *\n *\n * @example\n  <example module=\"switchExample\" deps=\"angular-animate.js\" animations=\"true\">\n    <file name=\"index.html\">\n      <div ng-controller=\"ExampleController\">\n        <select ng-model=\"selection\" ng-options=\"item for item in items\">\n        </select>\n        <code>selection={{selection}}</code>\n        <hr/>\n        <div class=\"animate-switch-container\"\n          ng-switch on=\"selection\">\n            <div class=\"animate-switch\" ng-switch-when=\"settings\">Settings Div</div>\n            <div class=\"animate-switch\" ng-switch-when=\"home\">Home Span</div>\n            <div class=\"animate-switch\" ng-switch-default>default</div>\n        </div>\n      </div>\n    </file>\n    <file name=\"script.js\">\n      angular.module('switchExample', ['ngAnimate'])\n        .controller('ExampleController', ['$scope', function($scope) {\n          $scope.items = ['settings', 'home', 'other'];\n          $scope.selection = $scope.items[0];\n        }]);\n    </file>\n    <file name=\"animations.css\">\n      .animate-switch-container {\n        position:relative;\n        background:white;\n        border:1px solid black;\n        height:40px;\n        overflow:hidden;\n      }\n\n      .animate-switch {\n        padding:10px;\n      }\n\n      .animate-switch.ng-animate {\n        transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s;\n\n        position:absolute;\n        top:0;\n        left:0;\n        right:0;\n        bottom:0;\n      }\n\n      .animate-switch.ng-leave.ng-leave-active,\n      .animate-switch.ng-enter {\n        top:-50px;\n      }\n      .animate-switch.ng-leave,\n      .animate-switch.ng-enter.ng-enter-active {\n        top:0;\n      }\n    </file>\n    <file name=\"protractor.js\" type=\"protractor\">\n      var switchElem = element(by.css('[ng-switch]'));\n      var select = element(by.model('selection'));\n\n      it('should start in settings', function() {\n        expect(switchElem.getText()).toMatch(/Settings Div/);\n      });\n      it('should change to home', function() {\n        select.all(by.css('option')).get(1).click();\n        expect(switchElem.getText()).toMatch(/Home Span/);\n      });\n      it('should select default', function() {\n        select.all(by.css('option')).get(2).click();\n        expect(switchElem.getText()).toMatch(/default/);\n      });\n    </file>\n  </example>\n */\nvar ngSwitchDirective = ['$animate', '$compile', function($animate, $compile) {\n  return {\n    require: 'ngSwitch',\n\n    // asks for $scope to fool the BC controller module\n    controller: ['$scope', function ngSwitchController() {\n     this.cases = {};\n    }],\n    link: function(scope, element, attr, ngSwitchController) {\n      var watchExpr = attr.ngSwitch || attr.on,\n          selectedTranscludes = [],\n          selectedElements = [],\n          previousLeaveAnimations = [],\n          selectedScopes = [];\n\n      var spliceFactory = function(array, index) {\n          return function() { array.splice(index, 1); };\n      };\n\n      scope.$watch(watchExpr, function ngSwitchWatchAction(value) {\n        var i, ii;\n        for (i = 0, ii = previousLeaveAnimations.length; i < ii; ++i) {\n          $animate.cancel(previousLeaveAnimations[i]);\n        }\n        previousLeaveAnimations.length = 0;\n\n        for (i = 0, ii = selectedScopes.length; i < ii; ++i) {\n          var selected = getBlockNodes(selectedElements[i].clone);\n          selectedScopes[i].$destroy();\n          var promise = previousLeaveAnimations[i] = $animate.leave(selected);\n          promise.then(spliceFactory(previousLeaveAnimations, i));\n        }\n\n        selectedElements.length = 0;\n        selectedScopes.length = 0;\n\n        if ((selectedTranscludes = ngSwitchController.cases['!' + value] || ngSwitchController.cases['?'])) {\n          forEach(selectedTranscludes, function(selectedTransclude) {\n            selectedTransclude.transclude(function(caseElement, selectedScope) {\n              selectedScopes.push(selectedScope);\n              var anchor = selectedTransclude.element;\n              caseElement[caseElement.length++] = $compile.$$createComment('end ngSwitchWhen');\n              var block = { clone: caseElement };\n\n              selectedElements.push(block);\n              $animate.enter(caseElement, anchor.parent(), anchor);\n            });\n          });\n        }\n      });\n    }\n  };\n}];\n\nvar ngSwitchWhenDirective = ngDirective({\n  transclude: 'element',\n  priority: 1200,\n  require: '^ngSwitch',\n  multiElement: true,\n  link: function(scope, element, attrs, ctrl, $transclude) {\n    ctrl.cases['!' + attrs.ngSwitchWhen] = (ctrl.cases['!' + attrs.ngSwitchWhen] || []);\n    ctrl.cases['!' + attrs.ngSwitchWhen].push({ transclude: $transclude, element: element });\n  }\n});\n\nvar ngSwitchDefaultDirective = ngDirective({\n  transclude: 'element',\n  priority: 1200,\n  require: '^ngSwitch',\n  multiElement: true,\n  link: function(scope, element, attr, ctrl, $transclude) {\n    ctrl.cases['?'] = (ctrl.cases['?'] || []);\n    ctrl.cases['?'].push({ transclude: $transclude, element: element });\n   }\n});\n\n/**\n * @ngdoc directive\n * @name ngTransclude\n * @restrict EAC\n *\n * @description\n * Directive that marks the insertion point for the transcluded DOM of the nearest parent directive that uses transclusion.\n *\n * You can specify that you want to insert a named transclusion slot, instead of the default slot, by providing the slot name\n * as the value of the `ng-transclude` or `ng-transclude-slot` attribute.\n *\n * If the transcluded content is not empty (i.e. contains one or more DOM nodes, including whitespace text nodes), any existing\n * content of this element will be removed before the transcluded content is inserted.\n * If the transcluded content is empty, the existing content is left intact. This lets you provide fallback content in the case\n * that no transcluded content is provided.\n *\n * @element ANY\n *\n * @param {string} ngTransclude|ngTranscludeSlot the name of the slot to insert at this point. If this is not provided, is empty\n *                                               or its value is the same as the name of the attribute then the default slot is used.\n *\n * @example\n * ### Basic transclusion\n * This example demonstrates basic transclusion of content into a component directive.\n * <example name=\"simpleTranscludeExample\" module=\"transcludeExample\">\n *   <file name=\"index.html\">\n *     <script>\n *       angular.module('transcludeExample', [])\n *        .directive('pane', function(){\n *           return {\n *             restrict: 'E',\n *             transclude: true,\n *             scope: { title:'@' },\n *             template: '<div style=\"border: 1px solid black;\">' +\n *                         '<div style=\"background-color: gray\">{{title}}</div>' +\n *                         '<ng-transclude></ng-transclude>' +\n *                       '</div>'\n *           };\n *       })\n *       .controller('ExampleController', ['$scope', function($scope) {\n *         $scope.title = 'Lorem Ipsum';\n *         $scope.text = 'Neque porro quisquam est qui dolorem ipsum quia dolor...';\n *       }]);\n *     </script>\n *     <div ng-controller=\"ExampleController\">\n *       <input ng-model=\"title\" aria-label=\"title\"> <br/>\n *       <textarea ng-model=\"text\" aria-label=\"text\"></textarea> <br/>\n *       <pane title=\"{{title}}\">{{text}}</pane>\n *     </div>\n *   </file>\n *   <file name=\"protractor.js\" type=\"protractor\">\n *      it('should have transcluded', function() {\n *        var titleElement = element(by.model('title'));\n *        titleElement.clear();\n *        titleElement.sendKeys('TITLE');\n *        var textElement = element(by.model('text'));\n *        textElement.clear();\n *        textElement.sendKeys('TEXT');\n *        expect(element(by.binding('title')).getText()).toEqual('TITLE');\n *        expect(element(by.binding('text')).getText()).toEqual('TEXT');\n *      });\n *   </file>\n * </example>\n *\n * @example\n * ### Transclude fallback content\n * This example shows how to use `NgTransclude` with fallback content, that\n * is displayed if no transcluded content is provided.\n *\n * <example module=\"transcludeFallbackContentExample\">\n * <file name=\"index.html\">\n * <script>\n * angular.module('transcludeFallbackContentExample', [])\n * .directive('myButton', function(){\n *             return {\n *               restrict: 'E',\n *               transclude: true,\n *               scope: true,\n *               template: '<button style=\"cursor: pointer;\">' +\n *                           '<ng-transclude>' +\n *                             '<b style=\"color: red;\">Button1</b>' +\n *                           '</ng-transclude>' +\n *                         '</button>'\n *             };\n *         });\n * </script>\n * <!-- fallback button content -->\n * <my-button id=\"fallback\"></my-button>\n * <!-- modified button content -->\n * <my-button id=\"modified\">\n *   <i style=\"color: green;\">Button2</i>\n * </my-button>\n * </file>\n * <file name=\"protractor.js\" type=\"protractor\">\n * it('should have different transclude element content', function() {\n *          expect(element(by.id('fallback')).getText()).toBe('Button1');\n *          expect(element(by.id('modified')).getText()).toBe('Button2');\n *        });\n * </file>\n * </example>\n *\n * @example\n * ### Multi-slot transclusion\n * This example demonstrates using multi-slot transclusion in a component directive.\n * <example name=\"multiSlotTranscludeExample\" module=\"multiSlotTranscludeExample\">\n *   <file name=\"index.html\">\n *    <style>\n *      .title, .footer {\n *        background-color: gray\n *      }\n *    </style>\n *    <div ng-controller=\"ExampleController\">\n *      <input ng-model=\"title\" aria-label=\"title\"> <br/>\n *      <textarea ng-model=\"text\" aria-label=\"text\"></textarea> <br/>\n *      <pane>\n *        <pane-title><a ng-href=\"{{link}}\">{{title}}</a></pane-title>\n *        <pane-body><p>{{text}}</p></pane-body>\n *      </pane>\n *    </div>\n *   </file>\n *   <file name=\"app.js\">\n *    angular.module('multiSlotTranscludeExample', [])\n *     .directive('pane', function(){\n *        return {\n *          restrict: 'E',\n *          transclude: {\n *            'title': '?paneTitle',\n *            'body': 'paneBody',\n *            'footer': '?paneFooter'\n *          },\n *          template: '<div style=\"border: 1px solid black;\">' +\n *                      '<div class=\"title\" ng-transclude=\"title\">Fallback Title</div>' +\n *                      '<div ng-transclude=\"body\"></div>' +\n *                      '<div class=\"footer\" ng-transclude=\"footer\">Fallback Footer</div>' +\n *                    '</div>'\n *        };\n *    })\n *    .controller('ExampleController', ['$scope', function($scope) {\n *      $scope.title = 'Lorem Ipsum';\n *      $scope.link = \"https://google.com\";\n *      $scope.text = 'Neque porro quisquam est qui dolorem ipsum quia dolor...';\n *    }]);\n *   </file>\n *   <file name=\"protractor.js\" type=\"protractor\">\n *      it('should have transcluded the title and the body', function() {\n *        var titleElement = element(by.model('title'));\n *        titleElement.clear();\n *        titleElement.sendKeys('TITLE');\n *        var textElement = element(by.model('text'));\n *        textElement.clear();\n *        textElement.sendKeys('TEXT');\n *        expect(element(by.css('.title')).getText()).toEqual('TITLE');\n *        expect(element(by.binding('text')).getText()).toEqual('TEXT');\n *        expect(element(by.css('.footer')).getText()).toEqual('Fallback Footer');\n *      });\n *   </file>\n * </example>\n */\nvar ngTranscludeMinErr = minErr('ngTransclude');\nvar ngTranscludeDirective = ['$compile', function($compile) {\n  return {\n    restrict: 'EAC',\n    terminal: true,\n    compile: function ngTranscludeCompile(tElement) {\n\n      // Remove and cache any original content to act as a fallback\n      var fallbackLinkFn = $compile(tElement.contents());\n      tElement.empty();\n\n      return function ngTranscludePostLink($scope, $element, $attrs, controller, $transclude) {\n\n        if (!$transclude) {\n          throw ngTranscludeMinErr('orphan',\n          'Illegal use of ngTransclude directive in the template! ' +\n          'No parent directive that requires a transclusion found. ' +\n          'Element: {0}',\n          startingTag($element));\n        }\n\n\n        // If the attribute is of the form: `ng-transclude=\"ng-transclude\"` then treat it like the default\n        if ($attrs.ngTransclude === $attrs.$attr.ngTransclude) {\n          $attrs.ngTransclude = '';\n        }\n        var slotName = $attrs.ngTransclude || $attrs.ngTranscludeSlot;\n\n        // If the slot is required and no transclusion content is provided then this call will throw an error\n        $transclude(ngTranscludeCloneAttachFn, null, slotName);\n\n        // If the slot is optional and no transclusion content is provided then use the fallback content\n        if (slotName && !$transclude.isSlotFilled(slotName)) {\n          useFallbackContent();\n        }\n\n        function ngTranscludeCloneAttachFn(clone, transcludedScope) {\n          if (clone.length) {\n            $element.append(clone);\n          } else {\n            useFallbackContent();\n            // There is nothing linked against the transcluded scope since no content was available,\n            // so it should be safe to clean up the generated scope.\n            transcludedScope.$destroy();\n          }\n        }\n\n        function useFallbackContent() {\n          // Since this is the fallback content rather than the transcluded content,\n          // we link against the scope of this directive rather than the transcluded scope\n          fallbackLinkFn($scope, function(clone) {\n            $element.append(clone);\n          });\n        }\n      };\n    }\n  };\n}];\n\n/**\n * @ngdoc directive\n * @name script\n * @restrict E\n *\n * @description\n * Load the content of a `<script>` element into {@link ng.$templateCache `$templateCache`}, so that the\n * template can be used by {@link ng.directive:ngInclude `ngInclude`},\n * {@link ngRoute.directive:ngView `ngView`}, or {@link guide/directive directives}. The type of the\n * `<script>` element must be specified as `text/ng-template`, and a cache name for the template must be\n * assigned through the element's `id`, which can then be used as a directive's `templateUrl`.\n *\n * @param {string} type Must be set to `'text/ng-template'`.\n * @param {string} id Cache name of the template.\n *\n * @example\n  <example>\n    <file name=\"index.html\">\n      <script type=\"text/ng-template\" id=\"/tpl.html\">\n        Content of the template.\n      </script>\n\n      <a ng-click=\"currentTpl='/tpl.html'\" id=\"tpl-link\">Load inlined template</a>\n      <div id=\"tpl-content\" ng-include src=\"currentTpl\"></div>\n    </file>\n    <file name=\"protractor.js\" type=\"protractor\">\n      it('should load template defined inside script tag', function() {\n        element(by.css('#tpl-link')).click();\n        expect(element(by.css('#tpl-content')).getText()).toMatch(/Content of the template/);\n      });\n    </file>\n  </example>\n */\nvar scriptDirective = ['$templateCache', function($templateCache) {\n  return {\n    restrict: 'E',\n    terminal: true,\n    compile: function(element, attr) {\n      if (attr.type == 'text/ng-template') {\n        var templateUrl = attr.id,\n            text = element[0].text;\n\n        $templateCache.put(templateUrl, text);\n      }\n    }\n  };\n}];\n\nvar noopNgModelController = { $setViewValue: noop, $render: noop };\n\nfunction chromeHack(optionElement) {\n  // Workaround for https://code.google.com/p/chromium/issues/detail?id=381459\n  // Adding an <option selected=\"selected\"> element to a <select required=\"required\"> should\n  // automatically select the new element\n  if (optionElement[0].hasAttribute('selected')) {\n    optionElement[0].selected = true;\n  }\n}\n\n/**\n * @ngdoc type\n * @name  select.SelectController\n * @description\n * The controller for the `<select>` directive. This provides support for reading\n * and writing the selected value(s) of the control and also coordinates dynamically\n * added `<option>` elements, perhaps by an `ngRepeat` directive.\n */\nvar SelectController =\n        ['$element', '$scope', function($element, $scope) {\n\n  var self = this,\n      optionsMap = new HashMap();\n\n  // If the ngModel doesn't get provided then provide a dummy noop version to prevent errors\n  self.ngModelCtrl = noopNgModelController;\n\n  // The \"unknown\" option is one that is prepended to the list if the viewValue\n  // does not match any of the options. When it is rendered the value of the unknown\n  // option is '? XXX ?' where XXX is the hashKey of the value that is not known.\n  //\n  // We can't just jqLite('<option>') since jqLite is not smart enough\n  // to create it in <select> and IE barfs otherwise.\n  self.unknownOption = jqLite(window.document.createElement('option'));\n  self.renderUnknownOption = function(val) {\n    var unknownVal = '? ' + hashKey(val) + ' ?';\n    self.unknownOption.val(unknownVal);\n    $element.prepend(self.unknownOption);\n    $element.val(unknownVal);\n  };\n\n  $scope.$on('$destroy', function() {\n    // disable unknown option so that we don't do work when the whole select is being destroyed\n    self.renderUnknownOption = noop;\n  });\n\n  self.removeUnknownOption = function() {\n    if (self.unknownOption.parent()) self.unknownOption.remove();\n  };\n\n\n  // Read the value of the select control, the implementation of this changes depending\n  // upon whether the select can have multiple values and whether ngOptions is at work.\n  self.readValue = function readSingleValue() {\n    self.removeUnknownOption();\n    return $element.val();\n  };\n\n\n  // Write the value to the select control, the implementation of this changes depending\n  // upon whether the select can have multiple values and whether ngOptions is at work.\n  self.writeValue = function writeSingleValue(value) {\n    if (self.hasOption(value)) {\n      self.removeUnknownOption();\n      $element.val(value);\n      if (value === '') self.emptyOption.prop('selected', true); // to make IE9 happy\n    } else {\n      if (value == null && self.emptyOption) {\n        self.removeUnknownOption();\n        $element.val('');\n      } else {\n        self.renderUnknownOption(value);\n      }\n    }\n  };\n\n\n  // Tell the select control that an option, with the given value, has been added\n  self.addOption = function(value, element) {\n    // Skip comment nodes, as they only pollute the `optionsMap`\n    if (element[0].nodeType === NODE_TYPE_COMMENT) return;\n\n    assertNotHasOwnProperty(value, '\"option value\"');\n    if (value === '') {\n      self.emptyOption = element;\n    }\n    var count = optionsMap.get(value) || 0;\n    optionsMap.put(value, count + 1);\n    self.ngModelCtrl.$render();\n    chromeHack(element);\n  };\n\n  // Tell the select control that an option, with the given value, has been removed\n  self.removeOption = function(value) {\n    var count = optionsMap.get(value);\n    if (count) {\n      if (count === 1) {\n        optionsMap.remove(value);\n        if (value === '') {\n          self.emptyOption = undefined;\n        }\n      } else {\n        optionsMap.put(value, count - 1);\n      }\n    }\n  };\n\n  // Check whether the select control has an option matching the given value\n  self.hasOption = function(value) {\n    return !!optionsMap.get(value);\n  };\n\n\n  self.registerOption = function(optionScope, optionElement, optionAttrs, interpolateValueFn, interpolateTextFn) {\n\n    if (interpolateValueFn) {\n      // The value attribute is interpolated\n      var oldVal;\n      optionAttrs.$observe('value', function valueAttributeObserveAction(newVal) {\n        if (isDefined(oldVal)) {\n          self.removeOption(oldVal);\n        }\n        oldVal = newVal;\n        self.addOption(newVal, optionElement);\n      });\n    } else if (interpolateTextFn) {\n      // The text content is interpolated\n      optionScope.$watch(interpolateTextFn, function interpolateWatchAction(newVal, oldVal) {\n        optionAttrs.$set('value', newVal);\n        if (oldVal !== newVal) {\n          self.removeOption(oldVal);\n        }\n        self.addOption(newVal, optionElement);\n      });\n    } else {\n      // The value attribute is static\n      self.addOption(optionAttrs.value, optionElement);\n    }\n\n    optionElement.on('$destroy', function() {\n      self.removeOption(optionAttrs.value);\n      self.ngModelCtrl.$render();\n    });\n  };\n}];\n\n/**\n * @ngdoc directive\n * @name select\n * @restrict E\n *\n * @description\n * HTML `SELECT` element with angular data-binding.\n *\n * The `select` directive is used together with {@link ngModel `ngModel`} to provide data-binding\n * between the scope and the `<select>` control (including setting default values).\n * It also handles dynamic `<option>` elements, which can be added using the {@link ngRepeat `ngRepeat}` or\n * {@link ngOptions `ngOptions`} directives.\n *\n * When an item in the `<select>` menu is selected, the value of the selected option will be bound\n * to the model identified by the `ngModel` directive. With static or repeated options, this is\n * the content of the `value` attribute or the textContent of the `<option>`, if the value attribute is missing.\n * If you want dynamic value attributes, you can use interpolation inside the value attribute.\n *\n * <div class=\"alert alert-warning\">\n * Note that the value of a `select` directive used without `ngOptions` is always a string.\n * When the model needs to be bound to a non-string value, you must either explicitly convert it\n * using a directive (see example below) or use `ngOptions` to specify the set of options.\n * This is because an option element can only be bound to string values at present.\n * </div>\n *\n * If the viewValue of `ngModel` does not match any of the options, then the control\n * will automatically add an \"unknown\" option, which it then removes when the mismatch is resolved.\n *\n * Optionally, a single hard-coded `<option>` element, with the value set to an empty string, can\n * be nested into the `<select>` element. This element will then represent the `null` or \"not selected\"\n * option. See example below for demonstration.\n *\n * <div class=\"alert alert-info\">\n * In many cases, `ngRepeat` can be used on `<option>` elements instead of {@link ng.directive:ngOptions\n * ngOptions} to achieve a similar result. However, `ngOptions` provides some benefits, such as\n * more flexibility in how the `<select>`'s model is assigned via the `select` **`as`** part of the\n * comprehension expression, and additionally in reducing memory and increasing speed by not creating\n * a new scope for each repeated instance.\n * </div>\n *\n *\n * @param {string} ngModel Assignable angular expression to data-bind to.\n * @param {string=} name Property name of the form under which the control is published.\n * @param {string=} multiple Allows multiple options to be selected. The selected values will be\n *     bound to the model as an array.\n * @param {string=} required Sets `required` validation error key if the value is not entered.\n * @param {string=} ngRequired Adds required attribute and required validation constraint to\n * the element when the ngRequired expression evaluates to true. Use ngRequired instead of required\n * when you want to data-bind to the required attribute.\n * @param {string=} ngChange Angular expression to be executed when selected option(s) changes due to user\n *    interaction with the select element.\n * @param {string=} ngOptions sets the options that the select is populated with and defines what is\n * set on the model on selection. See {@link ngOptions `ngOptions`}.\n *\n * @example\n * ### Simple `select` elements with static options\n *\n * <example name=\"static-select\" module=\"staticSelect\">\n * <file name=\"index.html\">\n * <div ng-controller=\"ExampleController\">\n *   <form name=\"myForm\">\n *     <label for=\"singleSelect\"> Single select: </label><br>\n *     <select name=\"singleSelect\" ng-model=\"data.singleSelect\">\n *       <option value=\"option-1\">Option 1</option>\n *       <option value=\"option-2\">Option 2</option>\n *     </select><br>\n *\n *     <label for=\"singleSelect\"> Single select with \"not selected\" option and dynamic option values: </label><br>\n *     <select name=\"singleSelect\" id=\"singleSelect\" ng-model=\"data.singleSelect\">\n *       <option value=\"\">---Please select---</option> <!-- not selected / blank option -->\n *       <option value=\"{{data.option1}}\">Option 1</option> <!-- interpolation -->\n *       <option value=\"option-2\">Option 2</option>\n *     </select><br>\n *     <button ng-click=\"forceUnknownOption()\">Force unknown option</button><br>\n *     <tt>singleSelect = {{data.singleSelect}}</tt>\n *\n *     <hr>\n *     <label for=\"multipleSelect\"> Multiple select: </label><br>\n *     <select name=\"multipleSelect\" id=\"multipleSelect\" ng-model=\"data.multipleSelect\" multiple>\n *       <option value=\"option-1\">Option 1</option>\n *       <option value=\"option-2\">Option 2</option>\n *       <option value=\"option-3\">Option 3</option>\n *     </select><br>\n *     <tt>multipleSelect = {{data.multipleSelect}}</tt><br/>\n *   </form>\n * </div>\n * </file>\n * <file name=\"app.js\">\n *  angular.module('staticSelect', [])\n *    .controller('ExampleController', ['$scope', function($scope) {\n *      $scope.data = {\n *       singleSelect: null,\n *       multipleSelect: [],\n *       option1: 'option-1',\n *      };\n *\n *      $scope.forceUnknownOption = function() {\n *        $scope.data.singleSelect = 'nonsense';\n *      };\n *   }]);\n * </file>\n *</example>\n *\n * ### Using `ngRepeat` to generate `select` options\n * <example name=\"ngrepeat-select\" module=\"ngrepeatSelect\">\n * <file name=\"index.html\">\n * <div ng-controller=\"ExampleController\">\n *   <form name=\"myForm\">\n *     <label for=\"repeatSelect\"> Repeat select: </label>\n *     <select name=\"repeatSelect\" id=\"repeatSelect\" ng-model=\"data.repeatSelect\">\n *       <option ng-repeat=\"option in data.availableOptions\" value=\"{{option.id}}\">{{option.name}}</option>\n *     </select>\n *   </form>\n *   <hr>\n *   <tt>repeatSelect = {{data.repeatSelect}}</tt><br/>\n * </div>\n * </file>\n * <file name=\"app.js\">\n *  angular.module('ngrepeatSelect', [])\n *    .controller('ExampleController', ['$scope', function($scope) {\n *      $scope.data = {\n *       repeatSelect: null,\n *       availableOptions: [\n *         {id: '1', name: 'Option A'},\n *         {id: '2', name: 'Option B'},\n *         {id: '3', name: 'Option C'}\n *       ],\n *      };\n *   }]);\n * </file>\n *</example>\n *\n *\n * ### Using `select` with `ngOptions` and setting a default value\n * See the {@link ngOptions ngOptions documentation} for more `ngOptions` usage examples.\n *\n * <example name=\"select-with-default-values\" module=\"defaultValueSelect\">\n * <file name=\"index.html\">\n * <div ng-controller=\"ExampleController\">\n *   <form name=\"myForm\">\n *     <label for=\"mySelect\">Make a choice:</label>\n *     <select name=\"mySelect\" id=\"mySelect\"\n *       ng-options=\"option.name for option in data.availableOptions track by option.id\"\n *       ng-model=\"data.selectedOption\"></select>\n *   </form>\n *   <hr>\n *   <tt>option = {{data.selectedOption}}</tt><br/>\n * </div>\n * </file>\n * <file name=\"app.js\">\n *  angular.module('defaultValueSelect', [])\n *    .controller('ExampleController', ['$scope', function($scope) {\n *      $scope.data = {\n *       availableOptions: [\n *         {id: '1', name: 'Option A'},\n *         {id: '2', name: 'Option B'},\n *         {id: '3', name: 'Option C'}\n *       ],\n *       selectedOption: {id: '3', name: 'Option C'} //This sets the default value of the select in the ui\n *       };\n *   }]);\n * </file>\n *</example>\n *\n *\n * ### Binding `select` to a non-string value via `ngModel` parsing / formatting\n *\n * <example name=\"select-with-non-string-options\" module=\"nonStringSelect\">\n *   <file name=\"index.html\">\n *     <select ng-model=\"model.id\" convert-to-number>\n *       <option value=\"0\">Zero</option>\n *       <option value=\"1\">One</option>\n *       <option value=\"2\">Two</option>\n *     </select>\n *     {{ model }}\n *   </file>\n *   <file name=\"app.js\">\n *     angular.module('nonStringSelect', [])\n *       .run(function($rootScope) {\n *         $rootScope.model = { id: 2 };\n *       })\n *       .directive('convertToNumber', function() {\n *         return {\n *           require: 'ngModel',\n *           link: function(scope, element, attrs, ngModel) {\n *             ngModel.$parsers.push(function(val) {\n *               return parseInt(val, 10);\n *             });\n *             ngModel.$formatters.push(function(val) {\n *               return '' + val;\n *             });\n *           }\n *         };\n *       });\n *   </file>\n *   <file name=\"protractor.js\" type=\"protractor\">\n *     it('should initialize to model', function() {\n *       var select = element(by.css('select'));\n *       expect(element(by.model('model.id')).$('option:checked').getText()).toEqual('Two');\n *     });\n *   </file>\n * </example>\n *\n */\nvar selectDirective = function() {\n\n  return {\n    restrict: 'E',\n    require: ['select', '?ngModel'],\n    controller: SelectController,\n    priority: 1,\n    link: {\n      pre: selectPreLink,\n      post: selectPostLink\n    }\n  };\n\n  function selectPreLink(scope, element, attr, ctrls) {\n\n      // if ngModel is not defined, we don't need to do anything\n      var ngModelCtrl = ctrls[1];\n      if (!ngModelCtrl) return;\n\n      var selectCtrl = ctrls[0];\n\n      selectCtrl.ngModelCtrl = ngModelCtrl;\n\n      // When the selected item(s) changes we delegate getting the value of the select control\n      // to the `readValue` method, which can be changed if the select can have multiple\n      // selected values or if the options are being generated by `ngOptions`\n      element.on('change', function() {\n        scope.$apply(function() {\n          ngModelCtrl.$setViewValue(selectCtrl.readValue());\n        });\n      });\n\n      // If the select allows multiple values then we need to modify how we read and write\n      // values from and to the control; also what it means for the value to be empty and\n      // we have to add an extra watch since ngModel doesn't work well with arrays - it\n      // doesn't trigger rendering if only an item in the array changes.\n      if (attr.multiple) {\n\n        // Read value now needs to check each option to see if it is selected\n        selectCtrl.readValue = function readMultipleValue() {\n          var array = [];\n          forEach(element.find('option'), function(option) {\n            if (option.selected) {\n              array.push(option.value);\n            }\n          });\n          return array;\n        };\n\n        // Write value now needs to set the selected property of each matching option\n        selectCtrl.writeValue = function writeMultipleValue(value) {\n          var items = new HashMap(value);\n          forEach(element.find('option'), function(option) {\n            option.selected = isDefined(items.get(option.value));\n          });\n        };\n\n        // we have to do it on each watch since ngModel watches reference, but\n        // we need to work of an array, so we need to see if anything was inserted/removed\n        var lastView, lastViewRef = NaN;\n        scope.$watch(function selectMultipleWatch() {\n          if (lastViewRef === ngModelCtrl.$viewValue && !equals(lastView, ngModelCtrl.$viewValue)) {\n            lastView = shallowCopy(ngModelCtrl.$viewValue);\n            ngModelCtrl.$render();\n          }\n          lastViewRef = ngModelCtrl.$viewValue;\n        });\n\n        // If we are a multiple select then value is now a collection\n        // so the meaning of $isEmpty changes\n        ngModelCtrl.$isEmpty = function(value) {\n          return !value || value.length === 0;\n        };\n\n      }\n    }\n\n    function selectPostLink(scope, element, attrs, ctrls) {\n      // if ngModel is not defined, we don't need to do anything\n      var ngModelCtrl = ctrls[1];\n      if (!ngModelCtrl) return;\n\n      var selectCtrl = ctrls[0];\n\n      // We delegate rendering to the `writeValue` method, which can be changed\n      // if the select can have multiple selected values or if the options are being\n      // generated by `ngOptions`.\n      // This must be done in the postLink fn to prevent $render to be called before\n      // all nodes have been linked correctly.\n      ngModelCtrl.$render = function() {\n        selectCtrl.writeValue(ngModelCtrl.$viewValue);\n      };\n    }\n};\n\n\n// The option directive is purely designed to communicate the existence (or lack of)\n// of dynamically created (and destroyed) option elements to their containing select\n// directive via its controller.\nvar optionDirective = ['$interpolate', function($interpolate) {\n  return {\n    restrict: 'E',\n    priority: 100,\n    compile: function(element, attr) {\n      if (isDefined(attr.value)) {\n        // If the value attribute is defined, check if it contains an interpolation\n        var interpolateValueFn = $interpolate(attr.value, true);\n      } else {\n        // If the value attribute is not defined then we fall back to the\n        // text content of the option element, which may be interpolated\n        var interpolateTextFn = $interpolate(element.text(), true);\n        if (!interpolateTextFn) {\n          attr.$set('value', element.text());\n        }\n      }\n\n      return function(scope, element, attr) {\n        // This is an optimization over using ^^ since we don't want to have to search\n        // all the way to the root of the DOM for every single option element\n        var selectCtrlName = '$selectController',\n            parent = element.parent(),\n            selectCtrl = parent.data(selectCtrlName) ||\n              parent.parent().data(selectCtrlName); // in case we are in optgroup\n\n        if (selectCtrl) {\n          selectCtrl.registerOption(scope, element, attr, interpolateValueFn, interpolateTextFn);\n        }\n      };\n    }\n  };\n}];\n\nvar styleDirective = valueFn({\n  restrict: 'E',\n  terminal: false\n});\n\n/**\n * @ngdoc directive\n * @name ngRequired\n * @restrict A\n *\n * @description\n *\n * ngRequired adds the required {@link ngModel.NgModelController#$validators `validator`} to {@link ngModel `ngModel`}.\n * It is most often used for {@link input `input`} and {@link select `select`} controls, but can also be\n * applied to custom controls.\n *\n * The directive sets the `required` attribute on the element if the Angular expression inside\n * `ngRequired` evaluates to true. A special directive for setting `required` is necessary because we\n * cannot use interpolation inside `required`. See the {@link guide/interpolation interpolation guide}\n * for more info.\n *\n * The validator will set the `required` error key to true if the `required` attribute is set and\n * calling {@link ngModel.NgModelController#$isEmpty `NgModelController.$isEmpty`} with the\n * {@link ngModel.NgModelController#$viewValue `ngModel.$viewValue`} returns `true`. For example, the\n * `$isEmpty()` implementation for `input[text]` checks the length of the `$viewValue`. When developing\n * custom controls, `$isEmpty()` can be overwritten to account for a $viewValue that is not string-based.\n *\n * @example\n * <example name=\"ngRequiredDirective\" module=\"ngRequiredExample\">\n *   <file name=\"index.html\">\n *     <script>\n *       angular.module('ngRequiredExample', [])\n *         .controller('ExampleController', ['$scope', function($scope) {\n *           $scope.required = true;\n *         }]);\n *     </script>\n *     <div ng-controller=\"ExampleController\">\n *       <form name=\"form\">\n *         <label for=\"required\">Toggle required: </label>\n *         <input type=\"checkbox\" ng-model=\"required\" id=\"required\" />\n *         <br>\n *         <label for=\"input\">This input must be filled if `required` is true: </label>\n *         <input type=\"text\" ng-model=\"model\" id=\"input\" name=\"input\" ng-required=\"required\" /><br>\n *         <hr>\n *         required error set? = <code>{{form.input.$error.required}}</code><br>\n *         model = <code>{{model}}</code>\n *       </form>\n *     </div>\n *   </file>\n *   <file name=\"protractor.js\" type=\"protractor\">\n       var required = element(by.binding('form.input.$error.required'));\n       var model = element(by.binding('model'));\n       var input = element(by.id('input'));\n\n       it('should set the required error', function() {\n         expect(required.getText()).toContain('true');\n\n         input.sendKeys('123');\n         expect(required.getText()).not.toContain('true');\n         expect(model.getText()).toContain('123');\n       });\n *   </file>\n * </example>\n */\nvar requiredDirective = function() {\n  return {\n    restrict: 'A',\n    require: '?ngModel',\n    link: function(scope, elm, attr, ctrl) {\n      if (!ctrl) return;\n      attr.required = true; // force truthy in case we are on non input element\n\n      ctrl.$validators.required = function(modelValue, viewValue) {\n        return !attr.required || !ctrl.$isEmpty(viewValue);\n      };\n\n      attr.$observe('required', function() {\n        ctrl.$validate();\n      });\n    }\n  };\n};\n\n/**\n * @ngdoc directive\n * @name ngPattern\n *\n * @description\n *\n * ngPattern adds the pattern {@link ngModel.NgModelController#$validators `validator`} to {@link ngModel `ngModel`}.\n * It is most often used for text-based {@link input `input`} controls, but can also be applied to custom text-based controls.\n *\n * The validator sets the `pattern` error key if the {@link ngModel.NgModelController#$viewValue `ngModel.$viewValue`}\n * does not match a RegExp which is obtained by evaluating the Angular expression given in the\n * `ngPattern` attribute value:\n * * If the expression evaluates to a RegExp object, then this is used directly.\n * * If the expression evaluates to a string, then it will be converted to a RegExp after wrapping it\n * in `^` and `$` characters. For instance, `\"abc\"` will be converted to `new RegExp('^abc$')`.\n *\n * <div class=\"alert alert-info\">\n * **Note:** Avoid using the `g` flag on the RegExp, as it will cause each successive search to\n * start at the index of the last search's match, thus not taking the whole input value into\n * account.\n * </div>\n *\n * <div class=\"alert alert-info\">\n * **Note:** This directive is also added when the plain `pattern` attribute is used, with two\n * differences:\n * <ol>\n *   <li>\n *     `ngPattern` does not set the `pattern` attribute and therefore HTML5 constraint validation is\n *     not available.\n *   </li>\n *   <li>\n *     The `ngPattern` attribute must be an expression, while the `pattern` value must be\n *     interpolated.\n *   </li>\n * </ol>\n * </div>\n *\n * @example\n * <example name=\"ngPatternDirective\" module=\"ngPatternExample\">\n *   <file name=\"index.html\">\n *     <script>\n *       angular.module('ngPatternExample', [])\n *         .controller('ExampleController', ['$scope', function($scope) {\n *           $scope.regex = '\\\\d+';\n *         }]);\n *     </script>\n *     <div ng-controller=\"ExampleController\">\n *       <form name=\"form\">\n *         <label for=\"regex\">Set a pattern (regex string): </label>\n *         <input type=\"text\" ng-model=\"regex\" id=\"regex\" />\n *         <br>\n *         <label for=\"input\">This input is restricted by the current pattern: </label>\n *         <input type=\"text\" ng-model=\"model\" id=\"input\" name=\"input\" ng-pattern=\"regex\" /><br>\n *         <hr>\n *         input valid? = <code>{{form.input.$valid}}</code><br>\n *         model = <code>{{model}}</code>\n *       </form>\n *     </div>\n *   </file>\n *   <file name=\"protractor.js\" type=\"protractor\">\n       var model = element(by.binding('model'));\n       var input = element(by.id('input'));\n\n       it('should validate the input with the default pattern', function() {\n         input.sendKeys('aaa');\n         expect(model.getText()).not.toContain('aaa');\n\n         input.clear().then(function() {\n           input.sendKeys('123');\n           expect(model.getText()).toContain('123');\n         });\n       });\n *   </file>\n * </example>\n */\nvar patternDirective = function() {\n  return {\n    restrict: 'A',\n    require: '?ngModel',\n    link: function(scope, elm, attr, ctrl) {\n      if (!ctrl) return;\n\n      var regexp, patternExp = attr.ngPattern || attr.pattern;\n      attr.$observe('pattern', function(regex) {\n        if (isString(regex) && regex.length > 0) {\n          regex = new RegExp('^' + regex + '$');\n        }\n\n        if (regex && !regex.test) {\n          throw minErr('ngPattern')('noregexp',\n            'Expected {0} to be a RegExp but was {1}. Element: {2}', patternExp,\n            regex, startingTag(elm));\n        }\n\n        regexp = regex || undefined;\n        ctrl.$validate();\n      });\n\n      ctrl.$validators.pattern = function(modelValue, viewValue) {\n        // HTML5 pattern constraint validates the input value, so we validate the viewValue\n        return ctrl.$isEmpty(viewValue) || isUndefined(regexp) || regexp.test(viewValue);\n      };\n    }\n  };\n};\n\n/**\n * @ngdoc directive\n * @name ngMaxlength\n *\n * @description\n *\n * ngMaxlength adds the maxlength {@link ngModel.NgModelController#$validators `validator`} to {@link ngModel `ngModel`}.\n * It is most often used for text-based {@link input `input`} controls, but can also be applied to custom text-based controls.\n *\n * The validator sets the `maxlength` error key if the {@link ngModel.NgModelController#$viewValue `ngModel.$viewValue`}\n * is longer than the integer obtained by evaluating the Angular expression given in the\n * `ngMaxlength` attribute value.\n *\n * <div class=\"alert alert-info\">\n * **Note:** This directive is also added when the plain `maxlength` attribute is used, with two\n * differences:\n * <ol>\n *   <li>\n *     `ngMaxlength` does not set the `maxlength` attribute and therefore HTML5 constraint\n *     validation is not available.\n *   </li>\n *   <li>\n *     The `ngMaxlength` attribute must be an expression, while the `maxlength` value must be\n *     interpolated.\n *   </li>\n * </ol>\n * </div>\n *\n * @example\n * <example name=\"ngMaxlengthDirective\" module=\"ngMaxlengthExample\">\n *   <file name=\"index.html\">\n *     <script>\n *       angular.module('ngMaxlengthExample', [])\n *         .controller('ExampleController', ['$scope', function($scope) {\n *           $scope.maxlength = 5;\n *         }]);\n *     </script>\n *     <div ng-controller=\"ExampleController\">\n *       <form name=\"form\">\n *         <label for=\"maxlength\">Set a maxlength: </label>\n *         <input type=\"number\" ng-model=\"maxlength\" id=\"maxlength\" />\n *         <br>\n *         <label for=\"input\">This input is restricted by the current maxlength: </label>\n *         <input type=\"text\" ng-model=\"model\" id=\"input\" name=\"input\" ng-maxlength=\"maxlength\" /><br>\n *         <hr>\n *         input valid? = <code>{{form.input.$valid}}</code><br>\n *         model = <code>{{model}}</code>\n *       </form>\n *     </div>\n *   </file>\n *   <file name=\"protractor.js\" type=\"protractor\">\n       var model = element(by.binding('model'));\n       var input = element(by.id('input'));\n\n       it('should validate the input with the default maxlength', function() {\n         input.sendKeys('abcdef');\n         expect(model.getText()).not.toContain('abcdef');\n\n         input.clear().then(function() {\n           input.sendKeys('abcde');\n           expect(model.getText()).toContain('abcde');\n         });\n       });\n *   </file>\n * </example>\n */\nvar maxlengthDirective = function() {\n  return {\n    restrict: 'A',\n    require: '?ngModel',\n    link: function(scope, elm, attr, ctrl) {\n      if (!ctrl) return;\n\n      var maxlength = -1;\n      attr.$observe('maxlength', function(value) {\n        var intVal = toInt(value);\n        maxlength = isNaN(intVal) ? -1 : intVal;\n        ctrl.$validate();\n      });\n      ctrl.$validators.maxlength = function(modelValue, viewValue) {\n        return (maxlength < 0) || ctrl.$isEmpty(viewValue) || (viewValue.length <= maxlength);\n      };\n    }\n  };\n};\n\n/**\n * @ngdoc directive\n * @name ngMinlength\n *\n * @description\n *\n * ngMinlength adds the minlength {@link ngModel.NgModelController#$validators `validator`} to {@link ngModel `ngModel`}.\n * It is most often used for text-based {@link input `input`} controls, but can also be applied to custom text-based controls.\n *\n * The validator sets the `minlength` error key if the {@link ngModel.NgModelController#$viewValue `ngModel.$viewValue`}\n * is shorter than the integer obtained by evaluating the Angular expression given in the\n * `ngMinlength` attribute value.\n *\n * <div class=\"alert alert-info\">\n * **Note:** This directive is also added when the plain `minlength` attribute is used, with two\n * differences:\n * <ol>\n *   <li>\n *     `ngMinlength` does not set the `minlength` attribute and therefore HTML5 constraint\n *     validation is not available.\n *   </li>\n *   <li>\n *     The `ngMinlength` value must be an expression, while the `minlength` value must be\n *     interpolated.\n *   </li>\n * </ol>\n * </div>\n *\n * @example\n * <example name=\"ngMinlengthDirective\" module=\"ngMinlengthExample\">\n *   <file name=\"index.html\">\n *     <script>\n *       angular.module('ngMinlengthExample', [])\n *         .controller('ExampleController', ['$scope', function($scope) {\n *           $scope.minlength = 3;\n *         }]);\n *     </script>\n *     <div ng-controller=\"ExampleController\">\n *       <form name=\"form\">\n *         <label for=\"minlength\">Set a minlength: </label>\n *         <input type=\"number\" ng-model=\"minlength\" id=\"minlength\" />\n *         <br>\n *         <label for=\"input\">This input is restricted by the current minlength: </label>\n *         <input type=\"text\" ng-model=\"model\" id=\"input\" name=\"input\" ng-minlength=\"minlength\" /><br>\n *         <hr>\n *         input valid? = <code>{{form.input.$valid}}</code><br>\n *         model = <code>{{model}}</code>\n *       </form>\n *     </div>\n *   </file>\n *   <file name=\"protractor.js\" type=\"protractor\">\n       var model = element(by.binding('model'));\n       var input = element(by.id('input'));\n\n       it('should validate the input with the default minlength', function() {\n         input.sendKeys('ab');\n         expect(model.getText()).not.toContain('ab');\n\n         input.sendKeys('abc');\n         expect(model.getText()).toContain('abc');\n       });\n *   </file>\n * </example>\n */\nvar minlengthDirective = function() {\n  return {\n    restrict: 'A',\n    require: '?ngModel',\n    link: function(scope, elm, attr, ctrl) {\n      if (!ctrl) return;\n\n      var minlength = 0;\n      attr.$observe('minlength', function(value) {\n        minlength = toInt(value) || 0;\n        ctrl.$validate();\n      });\n      ctrl.$validators.minlength = function(modelValue, viewValue) {\n        return ctrl.$isEmpty(viewValue) || viewValue.length >= minlength;\n      };\n    }\n  };\n};\n\nif (window.angular.bootstrap) {\n  //AngularJS is already loaded, so we can return here...\n  if (window.console) {\n    console.log('WARNING: Tried to load angular more than once.');\n  }\n  return;\n}\n\n//try to bind to jquery now so that one can write jqLite(document).ready()\n//but we will rebind on bootstrap again.\nbindJQuery();\n\npublishExternalAPI(angular);\n\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n  n = n + '';\n  var i = n.indexOf('.');\n  return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n  var v = opt_precision;\n\n  if (undefined === v) {\n    v = Math.min(getDecimals(n), 3);\n  }\n\n  var base = Math.pow(10, v);\n  var f = ((n * base) | 0) % base;\n  return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n  \"DATETIME_FORMATS\": {\n    \"AMPMS\": [\n      \"AM\",\n      \"PM\"\n    ],\n    \"DAY\": [\n      \"Sunday\",\n      \"Monday\",\n      \"Tuesday\",\n      \"Wednesday\",\n      \"Thursday\",\n      \"Friday\",\n      \"Saturday\"\n    ],\n    \"ERANAMES\": [\n      \"Before Christ\",\n      \"Anno Domini\"\n    ],\n    \"ERAS\": [\n      \"BC\",\n      \"AD\"\n    ],\n    \"FIRSTDAYOFWEEK\": 6,\n    \"MONTH\": [\n      \"January\",\n      \"February\",\n      \"March\",\n      \"April\",\n      \"May\",\n      \"June\",\n      \"July\",\n      \"August\",\n      \"September\",\n      \"October\",\n      \"November\",\n      \"December\"\n    ],\n    \"SHORTDAY\": [\n      \"Sun\",\n      \"Mon\",\n      \"Tue\",\n      \"Wed\",\n      \"Thu\",\n      \"Fri\",\n      \"Sat\"\n    ],\n    \"SHORTMONTH\": [\n      \"Jan\",\n      \"Feb\",\n      \"Mar\",\n      \"Apr\",\n      \"May\",\n      \"Jun\",\n      \"Jul\",\n      \"Aug\",\n      \"Sep\",\n      \"Oct\",\n      \"Nov\",\n      \"Dec\"\n    ],\n    \"STANDALONEMONTH\": [\n      \"January\",\n      \"February\",\n      \"March\",\n      \"April\",\n      \"May\",\n      \"June\",\n      \"July\",\n      \"August\",\n      \"September\",\n      \"October\",\n      \"November\",\n      \"December\"\n    ],\n    \"WEEKENDRANGE\": [\n      5,\n      6\n    ],\n    \"fullDate\": \"EEEE, MMMM d, y\",\n    \"longDate\": \"MMMM d, y\",\n    \"medium\": \"MMM d, y h:mm:ss a\",\n    \"mediumDate\": \"MMM d, y\",\n    \"mediumTime\": \"h:mm:ss a\",\n    \"short\": \"M/d/yy h:mm a\",\n    \"shortDate\": \"M/d/yy\",\n    \"shortTime\": \"h:mm a\"\n  },\n  \"NUMBER_FORMATS\": {\n    \"CURRENCY_SYM\": \"$\",\n    \"DECIMAL_SEP\": \".\",\n    \"GROUP_SEP\": \",\",\n    \"PATTERNS\": [\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 3,\n        \"minFrac\": 0,\n        \"minInt\": 1,\n        \"negPre\": \"-\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\",\n        \"posSuf\": \"\"\n      },\n      {\n        \"gSize\": 3,\n        \"lgSize\": 3,\n        \"maxFrac\": 2,\n        \"minFrac\": 2,\n        \"minInt\": 1,\n        \"negPre\": \"-\\u00a4\",\n        \"negSuf\": \"\",\n        \"posPre\": \"\\u00a4\",\n        \"posSuf\": \"\"\n      }\n    ]\n  },\n  \"id\": \"en-us\",\n  \"localeID\": \"en_US\",\n  \"pluralCat\": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n\n  jqLite(window.document).ready(function() {\n    angularInit(window.document, bootstrap);\n  });\n\n})(window);\n\n!window.angular.$$csp().noInlineStyle && window.angular.element(document.head).prepend('<style type=\"text/css\">@charset \"UTF-8\";[ng\\\\:cloak],[ng-cloak],[data-ng-cloak],[x-ng-cloak],.ng-cloak,.x-ng-cloak,.ng-hide:not(.ng-hide-animate){display:none !important;}ng\\\\:form{display:block;}.ng-animate-shim{visibility:hidden;}.ng-anchor{position:absolute;}</style>');","require('./angular');\nmodule.exports = angular;\n","/*!\n * Angular Datepicker v2.1.23\n *\n * Released by 720kb.net under the MIT license\n * www.opensource.org/licenses/MIT\n *\n * 2017-06-28\n */\n\n\n!function(e,a){\"use strict\";var t=function(){if(a.userAgent&&(a.userAgent.match(/Android/i)||a.userAgent.match(/webOS/i)||a.userAgent.match(/iPhone/i)||a.userAgent.match(/iPad/i)||a.userAgent.match(/iPod/i)||a.userAgent.match(/BlackBerry/i)||a.userAgent.match(/Windows Phone/i)))return!0}(),n=function(e,a,n){return n&&(t=!1),t?['<div class=\"_720kb-datepicker-calendar-header\">','<div class=\"_720kb-datepicker-calendar-header-middle _720kb-datepicker-mobile-item _720kb-datepicker-calendar-month\">','<select ng-model=\"month\" title=\"{{ dateMonthTitle }}\" ng-change=\"selectedMonthHandle(month)\">','<option ng-repeat=\"item in months\" ng-selected=\"item === month\" ng-disabled=\\'!isSelectableMaxDate(item + \" \" + day + \", \" + year) || !isSelectableMinDate(item + \" \" + day + \", \" + year)\\' ng-value=\"$index + 1\" value=\"$index + 1\">',\"{{ item }}\",\"</option>\",\"</select>\",\"</div>\",\"</div>\",'<div class=\"_720kb-datepicker-calendar-header\">','<div class=\"_720kb-datepicker-calendar-header-middle _720kb-datepicker-mobile-item _720kb-datepicker-calendar-month\">','<select ng-model=\"mobileYear\" title=\"{{ dateYearTitle }}\" ng-change=\"setNewYear(mobileYear)\">','<option ng-repeat=\"item in paginationYears track by $index\" ng-selected=\"year === item\" ng-disabled=\"!isSelectableMinYear(item) || !isSelectableMaxYear(item)\" ng-value=\"item\" value=\"item\">',\"{{ item }}\",\"</option>\",\"</select>\",\"</div>\",\"</div>\"]:['<div class=\"_720kb-datepicker-calendar-header\">','<div class=\"_720kb-datepicker-calendar-header-left\">','<a class=\"_720kb-datepicker-calendar-month-button\" href=\"javascript:void(0)\" ng-class=\"{\\'_720kb-datepicker-item-hidden\\': !willPrevMonthBeSelectable()}\" ng-click=\"prevMonth()\" title=\"{{ buttonPrevTitle }}\">',e,\"</a>\",\"</div>\",'<div class=\"_720kb-datepicker-calendar-header-middle _720kb-datepicker-calendar-month\">',\"{{month}}&nbsp;\",'<a href=\"javascript:void(0)\" ng-click=\"paginateYears(year); showYearsPagination = !showYearsPagination;\">',\"<span>\",\"{{year}}\",\"<i ng-class=\\\"{'_720kb-datepicker-calendar-header-closed-pagination': !showYearsPagination, '_720kb-datepicker-calendar-header-opened-pagination': showYearsPagination}\\\"></i>\",\"</span>\",\"</a>\",\"</div>\",'<div class=\"_720kb-datepicker-calendar-header-right\">','<a class=\"_720kb-datepicker-calendar-month-button\" ng-class=\"{\\'_720kb-datepicker-item-hidden\\': !willNextMonthBeSelectable()}\" href=\"javascript:void(0)\" ng-click=\"nextMonth()\" title=\"{{ buttonNextTitle }}\">',a,\"</a>\",\"</div>\",\"</div>\"]},i=function(e,a){return['<div class=\"_720kb-datepicker-calendar-header\" ng-show=\"showYearsPagination\">','<div class=\"_720kb-datepicker-calendar-years-pagination\">','<a ng-class=\"{\\'_720kb-datepicker-active\\': y === year, \\'_720kb-datepicker-disabled\\': !isSelectableMaxYear(y) || !isSelectableMinYear(y)}\" href=\"javascript:void(0)\" ng-click=\"setNewYear(y)\" ng-repeat=\"y in paginationYears track by $index\">',\"{{y}}\",\"</a>\",\"</div>\",'<div class=\"_720kb-datepicker-calendar-years-pagination-pages\">','<a href=\"javascript:void(0)\" ng-click=\"paginateYears(paginationYears[0])\" ng-class=\"{\\'_720kb-datepicker-item-hidden\\': paginationYearsPrevDisabled}\">',e,\"</a>\",'<a href=\"javascript:void(0)\" ng-click=\"paginateYears(paginationYears[paginationYears.length -1 ])\" ng-class=\"{\\'_720kb-datepicker-item-hidden\\': paginationYearsNextDisabled}\">',a,\"</a>\",\"</div>\",\"</div>\"]},r=function(e,a,t){var r=['<div class=\"_720kb-datepicker-calendar {{datepickerClass}} {{datepickerID}}\" ng-class=\"{\\'_720kb-datepicker-forced-to-open\\': checkVisibility()}\" ng-blur=\"hideCalendar()\">',\"</div>\"],d=n(e,a,t),l=i(e,a),c=['<div class=\"_720kb-datepicker-calendar-days-header\">','<div ng-repeat=\"d in daysInString\">',\"{{d}}\",\"</div>\",\"</div>\"],o=['<div class=\"_720kb-datepicker-calendar-body\">','<a href=\"javascript:void(0)\" ng-repeat=\"px in prevMonthDays\" class=\"_720kb-datepicker-calendar-day _720kb-datepicker-disabled\">',\"{{px}}\",\"</a>\",\"<a href=\\\"javascript:void(0)\\\" ng-repeat=\\\"item in days\\\" ng-click=\\\"setDatepickerDay(item)\\\" ng-class=\\\"{'_720kb-datepicker-active': selectedDay === item && selectedMonth === monthNumber && selectedYear === year, '_720kb-datepicker-disabled': !isSelectableMinDate(year + '/' + monthNumber + '/' + item ) || !isSelectableMaxDate(year + '/' + monthNumber + '/' + item) || !isSelectableDate(monthNumber, year, item) || !isSelectableDay(monthNumber, year, item),'_720kb-datepicker-today': item === today.getDate() && monthNumber === (today.getMonth() + 1) && year === today.getFullYear() && !selectedDay}\\\" class=\\\"_720kb-datepicker-calendar-day\\\">\",\"{{item}}\",\"</a>\",'<a href=\"javascript:void(0)\" ng-repeat=\"nx in nextMonthDays\" class=\"_720kb-datepicker-calendar-day _720kb-datepicker-disabled\">',\"{{nx}}\",\"</a>\",\"</div>\"],s=function(e){r.splice(r.length-1,0,e)};return d.forEach(s),l.forEach(s),c.forEach(s),o.forEach(s),r.join(\"\")},d=function(a,n,i,d,l,c){return{restrict:\"AEC\",scope:{dateSet:\"@\",dateMinLimit:\"@\",dateMaxLimit:\"@\",dateMonthTitle:\"@\",dateYearTitle:\"@\",buttonNextTitle:\"@\",buttonPrevTitle:\"@\",dateDisabledDates:\"@\",dateEnabledDates:\"@\",dateDisabledWeekdays:\"@\",dateSetHidden:\"@\",dateTyper:\"@\",dateWeekStartDay:\"@\",datepickerAppendTo:\"@\",datepickerToggle:\"@\",datepickerClass:\"@\",datepickerShow:\"@\"},link:function(o,s,m){var u,b,h,y=m.selector,p=e.element(y?s[0].querySelector(\".\"+y):s[0].children[0]),g=m.buttonPrev||'<b class=\"_720kb-datepicker-default-button\">&lang;</b>',M=m.buttonNext||'<b class=\"_720kb-datepicker-default-button\">&rang;</b>',k=m.dateFormat,f=o.$eval(o.dateDisabledDates),D=o.$eval(o.dateEnabledDates),v=o.$eval(o.dateDisabledWeekdays),N=new Date,S=!1,w=!1,x=void 0!==m.datepickerMobile&&\"false\"!==m.datepickerMobile,Y=i.DATETIME_FORMATS,T=r(g,M,x),_=function(){S||w||!u||o.hideCalendar()},L=function(e,a){var t,n,i,r,d,l=new Date(a,e,0).getDate(),c=new Date(a+\"/\"+e+\"/1\").getDay(),s=new Date(a+\"/\"+e+\"/\"+l).getDay(),m=[],u=[];for(o.days=[],o.dateWeekStartDay=o.validateWeekDay(o.dateWeekStartDay),d=(o.dateWeekStartDay+6)%7,t=1;t<=l;t+=1)o.days.push(t);if(c===o.dateWeekStartDay)o.prevMonthDays=[];else{for(i=c-o.dateWeekStartDay,c<o.dateWeekStartDay&&(i+=7),r=1===Number(e)?12:e-1,t=1;t<=new Date(a,r,0).getDate();t+=1)m.push(t);o.prevMonthDays=m.slice(-i)}if(s===d)o.nextMonthDays=[];else{for(n=6-s+o.dateWeekStartDay,s<o.dateWeekStartDay&&(n-=7),t=1;t<=n;t+=1)u.push(t);o.nextMonthDays=u}},$=function(){o.month=d(\"date\")(new Date(o.dateMinLimit),\"MMMM\"),o.monthNumber=Number(d(\"date\")(new Date(o.dateMinLimit),\"MM\")),o.day=Number(d(\"date\")(new Date(o.dateMinLimit),\"dd\")),o.year=Number(d(\"date\")(new Date(o.dateMinLimit),\"yyyy\")),L(o.monthNumber,o.year)},A=function(){o.month=d(\"date\")(new Date(o.dateMaxLimit),\"MMMM\"),o.monthNumber=Number(d(\"date\")(new Date(o.dateMaxLimit),\"MM\")),o.day=Number(d(\"date\")(new Date(o.dateMaxLimit),\"dd\")),o.year=Number(d(\"date\")(new Date(o.dateMaxLimit),\"yyyy\")),L(o.monthNumber,o.year)},P=function(){o.year=Number(o.year)-1},W=function(){o.year=Number(o.year)+1},E=function(e,a){var t,n,i,r,d,l,c,o,s,m=/(\\[[^\\[]*\\])|(\\\\)?([Hh]mm(ss)?|MMMM|MMM|MM|M|dd?d?|yy?yy?y?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g;for(l=0;l<Y.MONTH.length;l+=1){if(o=Y.MONTH[l],s=Y.SHORTMONTH[l],-1!==e.indexOf(o)){e=e.replace(o,l+1);break}if(-1!==e.indexOf(s)){e=e.replace(s,l+1);break}}for(n=e.split(/\\D/).filter(function(e){return e.length>0}),t=a.match(m).filter(function(e){return null!==e.match(/^[a-zA-Z]+$/i)}),l=0;l<t.length;l+=1)switch(c=t[l],!0){case-1!==c.indexOf(\"d\"):r=n[l-(t.length-n.length)];break;case-1!==c.indexOf(\"M\"):i=n[l-(t.length-n.length)];break;case-1!==c.indexOf(\"y\"):d=n[l-(t.length-n.length)]}return new Date(d+\"/\"+i+\"/\"+r)},H=function(){if(!o.isSelectableMinDate(o.year+\"/\"+o.monthNumber+\"/\"+o.day)||!o.isSelectableMaxDate(o.year+\"/\"+o.monthNumber+\"/\"+o.day))return!1;var e=new Date(o.year+\"/\"+o.monthNumber+\"/\"+o.day);m.dateFormat?p.val(d(\"date\")(e,k)):p.val(e),p.triggerHandler(\"input\"),p.triggerHandler(\"change\")},O={add:function(e,a){var t;e.className.indexOf(a)>-1||((t=e.className.split(\" \")).push(a),e.className=t.join(\" \"))},remove:function(e,a){var t,n;if(-1!==e.className.indexOf(a)){for(n=e.className.split(\" \"),t=0;t<n.length;t+=1)if(n[t]===a){n=n.slice(0,t).concat(n.slice(t+1));break}e.className=n.join(\" \")}}},F=function(){b=a.document.getElementsByClassName(\"_720kb-datepicker-calendar\"),e.forEach(b,function(e,a){b[a].classList?b[a].classList.remove(\"_720kb-datepicker-open\"):O.remove(b[a],\"_720kb-datepicker-open\")}),u.classList?(u.classList.add(\"_720kb-datepicker-open\"),N=k?E(p[0].value.toString(),k):new Date(p[0].value.toString()),o.selectedMonth=Number(d(\"date\")(N,\"MM\")),o.selectedDay=Number(d(\"date\")(N,\"dd\")),o.selectedYear=Number(d(\"date\")(N,\"yyyy\"))):O.add(u,\"_720kb-datepicker-open\"),o.today=new Date,c(function(){o.selectedDay?(o.year=o.selectedYear,o.monthNumber=o.selectedMonth):(o.year=o.today.getFullYear(),o.monthNumber=o.today.getMonth()+1),o.month=d(\"date\")(new Date(o.year,o.monthNumber-1),\"MMMM\"),L(o.monthNumber,o.year)},0)},j=function(){return!!o.datepickerShow&&(N=k?E(p[0].value.toString(),k):new Date(p[0].value.toString()),o.selectedMonth=Number(d(\"date\")(N,\"MM\")),o.selectedDay=Number(d(\"date\")(N,\"dd\")),o.selectedYear=Number(d(\"date\")(N,\"yyyy\")),o.$eval(o.datepickerShow))},I=o.$watch(\"dateSet\",function(e){e&&!isNaN(Date.parse(e))&&(N=new Date(e),o.month=d(\"date\")(N,\"MMMM\"),o.monthNumber=Number(d(\"date\")(N,\"MM\")),o.day=Number(d(\"date\")(N,\"dd\")),o.year=Number(d(\"date\")(N,\"yyyy\")),L(o.monthNumber,o.year),\"true\"!==o.dateSetHidden&&H())}),C=o.$watch(\"dateMinLimit\",function(e){e&&$()}),B=o.$watch(\"dateMaxLimit\",function(e){e&&A()}),G=o.$watch(\"dateFormat\",function(e){e&&H()}),z=o.$watch(\"dateDisabledDates\",function(e){e&&(f=o.$eval(e),o.isSelectableDate(o.monthNumber,o.year,o.day)||(p.val(\"\"),p.triggerHandler(\"input\"),p.triggerHandler(\"change\")))}),R=o.$watch(\"dateEnabledDates\",function(e){e&&(D=o.$eval(e),o.isSelectableDate(o.monthNumber,o.year,o.day)||(p.val(\"\"),p.triggerHandler(\"input\"),p.triggerHandler(\"change\")))});for(o.nextMonth=function(){12===o.monthNumber?(o.monthNumber=1,W()):o.monthNumber+=1,o.dateMaxLimit&&(o.isSelectableMaxDate(o.year+\"/\"+o.monthNumber+\"/\"+o.days[0])||A()),o.month=d(\"date\")(new Date(o.year,o.monthNumber-1),\"MMMM\"),L(o.monthNumber,o.year),o.day=void 0},o.willPrevMonthBeSelectable=function(){var e=o.monthNumber,a=o.year,t=d(\"date\")(new Date(new Date(a+\"/\"+e+\"/01\").getTime()-864e5),\"dd\");return 1===e?(e=12,a-=1):e-=1,!(o.dateMinLimit&&!o.isSelectableMinDate(a+\"/\"+e+\"/\"+t))},o.willNextMonthBeSelectable=function(){var e=o.monthNumber,a=o.year;return 12===e?(e=1,a+=1):e+=1,!(o.dateMaxLimit&&!o.isSelectableMaxDate(a+\"/\"+e+\"/01\"))},o.prevMonth=function(){1===o.monthNumber?(o.monthNumber=12,P()):o.monthNumber-=1,o.dateMinLimit&&(o.isSelectableMinDate(o.year+\"/\"+o.monthNumber+\"/\"+o.days[o.days.length-1])||$()),o.month=d(\"date\")(new Date(o.year,o.monthNumber-1),\"MMMM\"),L(o.monthNumber,o.year),o.day=void 0},o.selectedMonthHandle=function(e){o.monthNumber=Number(d(\"date\")(new Date(e+\"/01/2000\"),\"MM\")),L(o.monthNumber,o.year),H()},o.setNewYear=function(e){if(t||(o.day=void 0),o.dateMaxLimit&&o.year<Number(e)){if(!o.isSelectableMaxYear(e))return}else if(o.dateMinLimit&&o.year>Number(e)&&!o.isSelectableMinYear(e))return;o.paginateYears(e),o.showYearsPagination=!1,c(function(){o.year=Number(e),L(o.monthNumber,o.year)},0)},o.hideCalendar=function(){u.classList?u.classList.remove(\"_720kb-datepicker-open\"):O.remove(u,\"_720kb-datepicker-open\")},o.setDatepickerDay=function(e){o.isSelectableDay(o.monthNumber,o.year,e)&&o.isSelectableDate(o.monthNumber,o.year,e)&&o.isSelectableMaxDate(o.year+\"/\"+o.monthNumber+\"/\"+e)&&o.isSelectableMinDate(o.year+\"/\"+o.monthNumber+\"/\"+e)&&(o.day=Number(e),o.selectedDay=o.day,o.selectedMonth=o.monthNumber,o.selectedYear=o.year,H(),m.hasOwnProperty(\"dateRefocus\")&&p[0].focus(),o.hideCalendar())},o.paginateYears=function(e){var a,n=[],i=10,r=10;for(o.paginationYears=[],t&&(i=50,r=50,o.dateMinLimit&&o.dateMaxLimit&&(i=(e=new Date(o.dateMaxLimit).getFullYear())-new Date(o.dateMinLimit).getFullYear(),r=1)),a=i;a>0;a-=1)n.push(Number(e)-a);for(a=0;a<r;a+=1)n.push(Number(e)+a);\"true\"===o.dateTyper&&p.on(\"keyup blur\",function(){if(p[0].value&&p[0].value.length&&p[0].value.length>0)try{(N=k?E(p[0].value.toString(),k):new Date(p[0].value.toString())).getFullYear()&&!isNaN(N.getDay())&&!isNaN(N.getMonth())&&o.isSelectableDay(N.getMonth(),N.getFullYear(),N.getDay())&&o.isSelectableDate(N.getMonth(),N.getFullYear(),N.getDay())&&o.isSelectableMaxDate(N)&&o.isSelectableMinDate(N)&&o.$apply(function(){o.month=d(\"date\")(N,\"MMMM\"),o.monthNumber=Number(d(\"date\")(N,\"MM\")),o.day=Number(d(\"date\")(N,\"dd\")),4===N.getFullYear().toString().length&&(o.year=Number(d(\"date\")(N,\"yyyy\"))),L(o.monthNumber,o.year)})}catch(e){return e}}),o.dateMaxLimit&&n&&n.length&&!o.isSelectableMaxYear(Number(n[n.length-1])+1)?o.paginationYearsNextDisabled=!0:o.paginationYearsNextDisabled=!1,o.dateMinLimit&&n&&n.length&&!o.isSelectableMinYear(Number(n[0])-1)?o.paginationYearsPrevDisabled=!0:o.paginationYearsPrevDisabled=!1,o.paginationYears=n},o.isSelectableDay=function(e,a,t){var n=0;if(v&&v.length>0)for(n;n<=v.length;n+=1)if(v[n]===new Date(e+\"/\"+t+\"/\"+a).getDay())return!1;return!0},o.isSelectableDate=function(e,a,t){var n=0;if(f&&f.length>0)for(n;n<=f.length;n+=1)if(new Date(f[n]).getTime()===new Date(e+\"/\"+t+\"/\"+a).getTime())return!1;if(D){for(n;n<=D.length;n+=1)if(new Date(D[n]).getTime()===new Date(e+\"/\"+t+\"/\"+a).getTime())return!0;return!1}return!0},o.isSelectableMinDate=function(e){return!(o.dateMinLimit&&new Date(o.dateMinLimit)&&new Date(e).getTime()<new Date(o.dateMinLimit).getTime())},o.isSelectableMaxDate=function(e){return!(o.dateMaxLimit&&new Date(o.dateMaxLimit)&&new Date(e).getTime()>new Date(o.dateMaxLimit).getTime())},o.isSelectableMaxYear=function(e){return!(o.dateMaxLimit&&e>new Date(o.dateMaxLimit).getFullYear())},o.isSelectableMinYear=function(e){return!(o.dateMinLimit&&e<new Date(o.dateMinLimit).getFullYear())},o.validateWeekDay=function(e){var a=Number(e,10);return(!a||a<0||a>6)&&(a=0),a},T=T.replace(/{{/g,l.startSymbol()).replace(/}}/g,l.endSymbol()),o.dateMonthTitle=o.dateMonthTitle||\"Select month\",o.dateYearTitle=o.dateYearTitle||\"Select year\",o.buttonNextTitle=o.buttonNextTitle||\"Next\",o.buttonPrevTitle=o.buttonPrevTitle||\"Prev\",o.month=d(\"date\")(N,\"MMMM\"),o.monthNumber=Number(d(\"date\")(N,\"MM\")),o.day=Number(d(\"date\")(N,\"dd\")),o.dateWeekStartDay=o.validateWeekDay(o.dateWeekStartDay),o.dateMaxLimit?o.year=Number(d(\"date\")(new Date(o.dateMaxLimit),\"yyyy\")):o.year=Number(d(\"date\")(N,\"yyyy\")),o.months=Y.MONTH,o.daysInString=[],h=o.dateWeekStartDay;h<=o.dateWeekStartDay+6;h+=1)o.daysInString.push(h%7);o.daysInString=o.daysInString.map(function(e){return d(\"date\")(new Date(new Date(\"06/08/2014\").valueOf()+864e5*e),\"EEE\")}),o.datepickerAppendTo&&-1!==o.datepickerAppendTo.indexOf(\".\")?(o.datepickerID=\"datepicker-id-\"+(new Date).getTime()+(Math.floor(6*Math.random())+8),e.element(document.getElementsByClassName(o.datepickerAppendTo.replace(\".\",\"\"))[0]).append(n(e.element(T))(o,function(a){u=e.element(a)[0]}))):o.datepickerAppendTo&&-1!==o.datepickerAppendTo.indexOf(\"#\")?(o.datepickerID=\"datepicker-id-\"+(new Date).getTime()+(Math.floor(6*Math.random())+8),e.element(document.getElementById(o.datepickerAppendTo.replace(\"#\",\"\"))).append(n(e.element(T))(o,function(a){u=e.element(a)[0]}))):o.datepickerAppendTo&&\"body\"===o.datepickerAppendTo?(o.datepickerID=\"datepicker-id-\"+((new Date).getTime()+(Math.floor(6*Math.random())+8)),e.element(document).find(\"body\").append(n(e.element(T))(o,function(a){u=e.element(a)[0]}))):(p.after(n(e.element(T))(o)),u=s[0].querySelector(\"._720kb-datepicker-calendar\")),function(){return!o.datepickerToggle||o.$eval(o.datepickerToggle)}()&&p.on(\"focus click focusin\",function(){w=!0,S||w||!u?F():o.hideCalendar()}),p.on(\"focusout blur\",function(){w=!1}),e.element(u).on(\"mouseenter\",function(){S=!0}),e.element(u).on(\"mouseleave\",function(){S=!1}),e.element(u).on(\"focusin\",function(){S=!0}),e.element(a).on(\"click focus focusin\",_),(o.dateMinLimit&&!o.isSelectableMinYear(o.year)||!o.isSelectableMinDate(o.year+\"/\"+o.monthNumber+\"/\"+o.day))&&$(),(o.dateMaxLimit&&!o.isSelectableMaxYear(o.year)||!o.isSelectableMaxDate(o.year+\"/\"+o.monthNumber+\"/\"+o.day))&&A(),o.paginateYears(o.year),L(o.monthNumber,o.year),o.checkVisibility=j,o.$on(\"$destroy\",function(){I(),C(),B(),G(),z(),R(),p.off(\"focus click focusout blur\"),e.element(u).off(\"mouseenter mouseleave focusin\"),e.element(a).off(\"click focus focusin\",_)})}}};e.module(\"720kb.datepicker\",[]).directive(\"datepicker\",[\"$window\",\"$compile\",\"$locale\",\"$filter\",\"$interpolate\",\"$timeout\",d])}(angular,navigator);\n//# sourceMappingURL=angular-datepicker.sourcemap.map","var asn1 = exports;\n\nasn1.bignum = require('bn.js');\n\nasn1.define = require('./asn1/api').define;\nasn1.base = require('./asn1/base');\nasn1.constants = require('./asn1/constants');\nasn1.decoders = require('./asn1/decoders');\nasn1.encoders = require('./asn1/encoders');\n","var asn1 = require('../asn1');\nvar inherits = require('inherits');\n\nvar api = exports;\n\napi.define = function define(name, body) {\n  return new Entity(name, body);\n};\n\nfunction Entity(name, body) {\n  this.name = name;\n  this.body = body;\n\n  this.decoders = {};\n  this.encoders = {};\n};\n\nEntity.prototype._createNamed = function createNamed(base) {\n  var named;\n  try {\n    named = require('vm').runInThisContext(\n      '(function ' + this.name + '(entity) {\\n' +\n      '  this._initNamed(entity);\\n' +\n      '})'\n    );\n  } catch (e) {\n    named = function (entity) {\n      this._initNamed(entity);\n    };\n  }\n  inherits(named, base);\n  named.prototype._initNamed = function initnamed(entity) {\n    base.call(this, entity);\n  };\n\n  return new named(this);\n};\n\nEntity.prototype._getDecoder = function _getDecoder(enc) {\n  enc = enc || 'der';\n  // Lazily create decoder\n  if (!this.decoders.hasOwnProperty(enc))\n    this.decoders[enc] = this._createNamed(asn1.decoders[enc]);\n  return this.decoders[enc];\n};\n\nEntity.prototype.decode = function decode(data, enc, options) {\n  return this._getDecoder(enc).decode(data, options);\n};\n\nEntity.prototype._getEncoder = function _getEncoder(enc) {\n  enc = enc || 'der';\n  // Lazily create encoder\n  if (!this.encoders.hasOwnProperty(enc))\n    this.encoders[enc] = this._createNamed(asn1.encoders[enc]);\n  return this.encoders[enc];\n};\n\nEntity.prototype.encode = function encode(data, enc, /* internal */ reporter) {\n  return this._getEncoder(enc).encode(data, reporter);\n};\n","var inherits = require('inherits');\nvar Reporter = require('../base').Reporter;\nvar Buffer = require('buffer').Buffer;\n\nfunction DecoderBuffer(base, options) {\n  Reporter.call(this, options);\n  if (!Buffer.isBuffer(base)) {\n    this.error('Input not Buffer');\n    return;\n  }\n\n  this.base = base;\n  this.offset = 0;\n  this.length = base.length;\n}\ninherits(DecoderBuffer, Reporter);\nexports.DecoderBuffer = DecoderBuffer;\n\nDecoderBuffer.prototype.save = function save() {\n  return { offset: this.offset, reporter: Reporter.prototype.save.call(this) };\n};\n\nDecoderBuffer.prototype.restore = function restore(save) {\n  // Return skipped data\n  var res = new DecoderBuffer(this.base);\n  res.offset = save.offset;\n  res.length = this.offset;\n\n  this.offset = save.offset;\n  Reporter.prototype.restore.call(this, save.reporter);\n\n  return res;\n};\n\nDecoderBuffer.prototype.isEmpty = function isEmpty() {\n  return this.offset === this.length;\n};\n\nDecoderBuffer.prototype.readUInt8 = function readUInt8(fail) {\n  if (this.offset + 1 <= this.length)\n    return this.base.readUInt8(this.offset++, true);\n  else\n    return this.error(fail || 'DecoderBuffer overrun');\n}\n\nDecoderBuffer.prototype.skip = function skip(bytes, fail) {\n  if (!(this.offset + bytes <= this.length))\n    return this.error(fail || 'DecoderBuffer overrun');\n\n  var res = new DecoderBuffer(this.base);\n\n  // Share reporter state\n  res._reporterState = this._reporterState;\n\n  res.offset = this.offset;\n  res.length = this.offset + bytes;\n  this.offset += bytes;\n  return res;\n}\n\nDecoderBuffer.prototype.raw = function raw(save) {\n  return this.base.slice(save ? save.offset : this.offset, this.length);\n}\n\nfunction EncoderBuffer(value, reporter) {\n  if (Array.isArray(value)) {\n    this.length = 0;\n    this.value = value.map(function(item) {\n      if (!(item instanceof EncoderBuffer))\n        item = new EncoderBuffer(item, reporter);\n      this.length += item.length;\n      return item;\n    }, this);\n  } else if (typeof value === 'number') {\n    if (!(0 <= value && value <= 0xff))\n      return reporter.error('non-byte EncoderBuffer value');\n    this.value = value;\n    this.length = 1;\n  } else if (typeof value === 'string') {\n    this.value = value;\n    this.length = Buffer.byteLength(value);\n  } else if (Buffer.isBuffer(value)) {\n    this.value = value;\n    this.length = value.length;\n  } else {\n    return reporter.error('Unsupported type: ' + typeof value);\n  }\n}\nexports.EncoderBuffer = EncoderBuffer;\n\nEncoderBuffer.prototype.join = function join(out, offset) {\n  if (!out)\n    out = new Buffer(this.length);\n  if (!offset)\n    offset = 0;\n\n  if (this.length === 0)\n    return out;\n\n  if (Array.isArray(this.value)) {\n    this.value.forEach(function(item) {\n      item.join(out, offset);\n      offset += item.length;\n    });\n  } else {\n    if (typeof this.value === 'number')\n      out[offset] = this.value;\n    else if (typeof this.value === 'string')\n      out.write(this.value, offset);\n    else if (Buffer.isBuffer(this.value))\n      this.value.copy(out, offset);\n    offset += this.length;\n  }\n\n  return out;\n};\n","var base = exports;\n\nbase.Reporter = require('./reporter').Reporter;\nbase.DecoderBuffer = require('./buffer').DecoderBuffer;\nbase.EncoderBuffer = require('./buffer').EncoderBuffer;\nbase.Node = require('./node');\n","var Reporter = require('../base').Reporter;\nvar EncoderBuffer = require('../base').EncoderBuffer;\nvar DecoderBuffer = require('../base').DecoderBuffer;\nvar assert = require('minimalistic-assert');\n\n// Supported tags\nvar tags = [\n  'seq', 'seqof', 'set', 'setof', 'objid', 'bool',\n  'gentime', 'utctime', 'null_', 'enum', 'int', 'objDesc',\n  'bitstr', 'bmpstr', 'charstr', 'genstr', 'graphstr', 'ia5str', 'iso646str',\n  'numstr', 'octstr', 'printstr', 't61str', 'unistr', 'utf8str', 'videostr'\n];\n\n// Public methods list\nvar methods = [\n  'key', 'obj', 'use', 'optional', 'explicit', 'implicit', 'def', 'choice',\n  'any', 'contains'\n].concat(tags);\n\n// Overrided methods list\nvar overrided = [\n  '_peekTag', '_decodeTag', '_use',\n  '_decodeStr', '_decodeObjid', '_decodeTime',\n  '_decodeNull', '_decodeInt', '_decodeBool', '_decodeList',\n\n  '_encodeComposite', '_encodeStr', '_encodeObjid', '_encodeTime',\n  '_encodeNull', '_encodeInt', '_encodeBool'\n];\n\nfunction Node(enc, parent) {\n  var state = {};\n  this._baseState = state;\n\n  state.enc = enc;\n\n  state.parent = parent || null;\n  state.children = null;\n\n  // State\n  state.tag = null;\n  state.args = null;\n  state.reverseArgs = null;\n  state.choice = null;\n  state.optional = false;\n  state.any = false;\n  state.obj = false;\n  state.use = null;\n  state.useDecoder = null;\n  state.key = null;\n  state['default'] = null;\n  state.explicit = null;\n  state.implicit = null;\n  state.contains = null;\n\n  // Should create new instance on each method\n  if (!state.parent) {\n    state.children = [];\n    this._wrap();\n  }\n}\nmodule.exports = Node;\n\nvar stateProps = [\n  'enc', 'parent', 'children', 'tag', 'args', 'reverseArgs', 'choice',\n  'optional', 'any', 'obj', 'use', 'alteredUse', 'key', 'default', 'explicit',\n  'implicit', 'contains'\n];\n\nNode.prototype.clone = function clone() {\n  var state = this._baseState;\n  var cstate = {};\n  stateProps.forEach(function(prop) {\n    cstate[prop] = state[prop];\n  });\n  var res = new this.constructor(cstate.parent);\n  res._baseState = cstate;\n  return res;\n};\n\nNode.prototype._wrap = function wrap() {\n  var state = this._baseState;\n  methods.forEach(function(method) {\n    this[method] = function _wrappedMethod() {\n      var clone = new this.constructor(this);\n      state.children.push(clone);\n      return clone[method].apply(clone, arguments);\n    };\n  }, this);\n};\n\nNode.prototype._init = function init(body) {\n  var state = this._baseState;\n\n  assert(state.parent === null);\n  body.call(this);\n\n  // Filter children\n  state.children = state.children.filter(function(child) {\n    return child._baseState.parent === this;\n  }, this);\n  assert.equal(state.children.length, 1, 'Root node can have only one child');\n};\n\nNode.prototype._useArgs = function useArgs(args) {\n  var state = this._baseState;\n\n  // Filter children and args\n  var children = args.filter(function(arg) {\n    return arg instanceof this.constructor;\n  }, this);\n  args = args.filter(function(arg) {\n    return !(arg instanceof this.constructor);\n  }, this);\n\n  if (children.length !== 0) {\n    assert(state.children === null);\n    state.children = children;\n\n    // Replace parent to maintain backward link\n    children.forEach(function(child) {\n      child._baseState.parent = this;\n    }, this);\n  }\n  if (args.length !== 0) {\n    assert(state.args === null);\n    state.args = args;\n    state.reverseArgs = args.map(function(arg) {\n      if (typeof arg !== 'object' || arg.constructor !== Object)\n        return arg;\n\n      var res = {};\n      Object.keys(arg).forEach(function(key) {\n        if (key == (key | 0))\n          key |= 0;\n        var value = arg[key];\n        res[value] = key;\n      });\n      return res;\n    });\n  }\n};\n\n//\n// Overrided methods\n//\n\noverrided.forEach(function(method) {\n  Node.prototype[method] = function _overrided() {\n    var state = this._baseState;\n    throw new Error(method + ' not implemented for encoding: ' + state.enc);\n  };\n});\n\n//\n// Public methods\n//\n\ntags.forEach(function(tag) {\n  Node.prototype[tag] = function _tagMethod() {\n    var state = this._baseState;\n    var args = Array.prototype.slice.call(arguments);\n\n    assert(state.tag === null);\n    state.tag = tag;\n\n    this._useArgs(args);\n\n    return this;\n  };\n});\n\nNode.prototype.use = function use(item) {\n  assert(item);\n  var state = this._baseState;\n\n  assert(state.use === null);\n  state.use = item;\n\n  return this;\n};\n\nNode.prototype.optional = function optional() {\n  var state = this._baseState;\n\n  state.optional = true;\n\n  return this;\n};\n\nNode.prototype.def = function def(val) {\n  var state = this._baseState;\n\n  assert(state['default'] === null);\n  state['default'] = val;\n  state.optional = true;\n\n  return this;\n};\n\nNode.prototype.explicit = function explicit(num) {\n  var state = this._baseState;\n\n  assert(state.explicit === null && state.implicit === null);\n  state.explicit = num;\n\n  return this;\n};\n\nNode.prototype.implicit = function implicit(num) {\n  var state = this._baseState;\n\n  assert(state.explicit === null && state.implicit === null);\n  state.implicit = num;\n\n  return this;\n};\n\nNode.prototype.obj = function obj() {\n  var state = this._baseState;\n  var args = Array.prototype.slice.call(arguments);\n\n  state.obj = true;\n\n  if (args.length !== 0)\n    this._useArgs(args);\n\n  return this;\n};\n\nNode.prototype.key = function key(newKey) {\n  var state = this._baseState;\n\n  assert(state.key === null);\n  state.key = newKey;\n\n  return this;\n};\n\nNode.prototype.any = function any() {\n  var state = this._baseState;\n\n  state.any = true;\n\n  return this;\n};\n\nNode.prototype.choice = function choice(obj) {\n  var state = this._baseState;\n\n  assert(state.choice === null);\n  state.choice = obj;\n  this._useArgs(Object.keys(obj).map(function(key) {\n    return obj[key];\n  }));\n\n  return this;\n};\n\nNode.prototype.contains = function contains(item) {\n  var state = this._baseState;\n\n  assert(state.use === null);\n  state.contains = item;\n\n  return this;\n};\n\n//\n// Decoding\n//\n\nNode.prototype._decode = function decode(input, options) {\n  var state = this._baseState;\n\n  // Decode root node\n  if (state.parent === null)\n    return input.wrapResult(state.children[0]._decode(input, options));\n\n  var result = state['default'];\n  var present = true;\n\n  var prevKey = null;\n  if (state.key !== null)\n    prevKey = input.enterKey(state.key);\n\n  // Check if tag is there\n  if (state.optional) {\n    var tag = null;\n    if (state.explicit !== null)\n      tag = state.explicit;\n    else if (state.implicit !== null)\n      tag = state.implicit;\n    else if (state.tag !== null)\n      tag = state.tag;\n\n    if (tag === null && !state.any) {\n      // Trial and Error\n      var save = input.save();\n      try {\n        if (state.choice === null)\n          this._decodeGeneric(state.tag, input, options);\n        else\n          this._decodeChoice(input, options);\n        present = true;\n      } catch (e) {\n        present = false;\n      }\n      input.restore(save);\n    } else {\n      present = this._peekTag(input, tag, state.any);\n\n      if (input.isError(present))\n        return present;\n    }\n  }\n\n  // Push object on stack\n  var prevObj;\n  if (state.obj && present)\n    prevObj = input.enterObject();\n\n  if (present) {\n    // Unwrap explicit values\n    if (state.explicit !== null) {\n      var explicit = this._decodeTag(input, state.explicit);\n      if (input.isError(explicit))\n        return explicit;\n      input = explicit;\n    }\n\n    var start = input.offset;\n\n    // Unwrap implicit and normal values\n    if (state.use === null && state.choice === null) {\n      if (state.any)\n        var save = input.save();\n      var body = this._decodeTag(\n        input,\n        state.implicit !== null ? state.implicit : state.tag,\n        state.any\n      );\n      if (input.isError(body))\n        return body;\n\n      if (state.any)\n        result = input.raw(save);\n      else\n        input = body;\n    }\n\n    if (options && options.track && state.tag !== null)\n      options.track(input.path(), start, input.length, 'tagged');\n\n    if (options && options.track && state.tag !== null)\n      options.track(input.path(), input.offset, input.length, 'content');\n\n    // Select proper method for tag\n    if (state.any)\n      result = result;\n    else if (state.choice === null)\n      result = this._decodeGeneric(state.tag, input, options);\n    else\n      result = this._decodeChoice(input, options);\n\n    if (input.isError(result))\n      return result;\n\n    // Decode children\n    if (!state.any && state.choice === null && state.children !== null) {\n      state.children.forEach(function decodeChildren(child) {\n        // NOTE: We are ignoring errors here, to let parser continue with other\n        // parts of encoded data\n        child._decode(input, options);\n      });\n    }\n\n    // Decode contained/encoded by schema, only in bit or octet strings\n    if (state.contains && (state.tag === 'octstr' || state.tag === 'bitstr')) {\n      var data = new DecoderBuffer(result);\n      result = this._getUse(state.contains, input._reporterState.obj)\n          ._decode(data, options);\n    }\n  }\n\n  // Pop object\n  if (state.obj && present)\n    result = input.leaveObject(prevObj);\n\n  // Set key\n  if (state.key !== null && (result !== null || present === true))\n    input.leaveKey(prevKey, state.key, result);\n  else if (prevKey !== null)\n    input.exitKey(prevKey);\n\n  return result;\n};\n\nNode.prototype._decodeGeneric = function decodeGeneric(tag, input, options) {\n  var state = this._baseState;\n\n  if (tag === 'seq' || tag === 'set')\n    return null;\n  if (tag === 'seqof' || tag === 'setof')\n    return this._decodeList(input, tag, state.args[0], options);\n  else if (/str$/.test(tag))\n    return this._decodeStr(input, tag, options);\n  else if (tag === 'objid' && state.args)\n    return this._decodeObjid(input, state.args[0], state.args[1], options);\n  else if (tag === 'objid')\n    return this._decodeObjid(input, null, null, options);\n  else if (tag === 'gentime' || tag === 'utctime')\n    return this._decodeTime(input, tag, options);\n  else if (tag === 'null_')\n    return this._decodeNull(input, options);\n  else if (tag === 'bool')\n    return this._decodeBool(input, options);\n  else if (tag === 'objDesc')\n    return this._decodeStr(input, tag, options);\n  else if (tag === 'int' || tag === 'enum')\n    return this._decodeInt(input, state.args && state.args[0], options);\n\n  if (state.use !== null) {\n    return this._getUse(state.use, input._reporterState.obj)\n        ._decode(input, options);\n  } else {\n    return input.error('unknown tag: ' + tag);\n  }\n};\n\nNode.prototype._getUse = function _getUse(entity, obj) {\n\n  var state = this._baseState;\n  // Create altered use decoder if implicit is set\n  state.useDecoder = this._use(entity, obj);\n  assert(state.useDecoder._baseState.parent === null);\n  state.useDecoder = state.useDecoder._baseState.children[0];\n  if (state.implicit !== state.useDecoder._baseState.implicit) {\n    state.useDecoder = state.useDecoder.clone();\n    state.useDecoder._baseState.implicit = state.implicit;\n  }\n  return state.useDecoder;\n};\n\nNode.prototype._decodeChoice = function decodeChoice(input, options) {\n  var state = this._baseState;\n  var result = null;\n  var match = false;\n\n  Object.keys(state.choice).some(function(key) {\n    var save = input.save();\n    var node = state.choice[key];\n    try {\n      var value = node._decode(input, options);\n      if (input.isError(value))\n        return false;\n\n      result = { type: key, value: value };\n      match = true;\n    } catch (e) {\n      input.restore(save);\n      return false;\n    }\n    return true;\n  }, this);\n\n  if (!match)\n    return input.error('Choice not matched');\n\n  return result;\n};\n\n//\n// Encoding\n//\n\nNode.prototype._createEncoderBuffer = function createEncoderBuffer(data) {\n  return new EncoderBuffer(data, this.reporter);\n};\n\nNode.prototype._encode = function encode(data, reporter, parent) {\n  var state = this._baseState;\n  if (state['default'] !== null && state['default'] === data)\n    return;\n\n  var result = this._encodeValue(data, reporter, parent);\n  if (result === undefined)\n    return;\n\n  if (this._skipDefault(result, reporter, parent))\n    return;\n\n  return result;\n};\n\nNode.prototype._encodeValue = function encode(data, reporter, parent) {\n  var state = this._baseState;\n\n  // Decode root node\n  if (state.parent === null)\n    return state.children[0]._encode(data, reporter || new Reporter());\n\n  var result = null;\n\n  // Set reporter to share it with a child class\n  this.reporter = reporter;\n\n  // Check if data is there\n  if (state.optional && data === undefined) {\n    if (state['default'] !== null)\n      data = state['default']\n    else\n      return;\n  }\n\n  // Encode children first\n  var content = null;\n  var primitive = false;\n  if (state.any) {\n    // Anything that was given is translated to buffer\n    result = this._createEncoderBuffer(data);\n  } else if (state.choice) {\n    result = this._encodeChoice(data, reporter);\n  } else if (state.contains) {\n    content = this._getUse(state.contains, parent)._encode(data, reporter);\n    primitive = true;\n  } else if (state.children) {\n    content = state.children.map(function(child) {\n      if (child._baseState.tag === 'null_')\n        return child._encode(null, reporter, data);\n\n      if (child._baseState.key === null)\n        return reporter.error('Child should have a key');\n      var prevKey = reporter.enterKey(child._baseState.key);\n\n      if (typeof data !== 'object')\n        return reporter.error('Child expected, but input is not object');\n\n      var res = child._encode(data[child._baseState.key], reporter, data);\n      reporter.leaveKey(prevKey);\n\n      return res;\n    }, this).filter(function(child) {\n      return child;\n    });\n    content = this._createEncoderBuffer(content);\n  } else {\n    if (state.tag === 'seqof' || state.tag === 'setof') {\n      // TODO(indutny): this should be thrown on DSL level\n      if (!(state.args && state.args.length === 1))\n        return reporter.error('Too many args for : ' + state.tag);\n\n      if (!Array.isArray(data))\n        return reporter.error('seqof/setof, but data is not Array');\n\n      var child = this.clone();\n      child._baseState.implicit = null;\n      content = this._createEncoderBuffer(data.map(function(item) {\n        var state = this._baseState;\n\n        return this._getUse(state.args[0], data)._encode(item, reporter);\n      }, child));\n    } else if (state.use !== null) {\n      result = this._getUse(state.use, parent)._encode(data, reporter);\n    } else {\n      content = this._encodePrimitive(state.tag, data);\n      primitive = true;\n    }\n  }\n\n  // Encode data itself\n  var result;\n  if (!state.any && state.choice === null) {\n    var tag = state.implicit !== null ? state.implicit : state.tag;\n    var cls = state.implicit === null ? 'universal' : 'context';\n\n    if (tag === null) {\n      if (state.use === null)\n        reporter.error('Tag could be omitted only for .use()');\n    } else {\n      if (state.use === null)\n        result = this._encodeComposite(tag, primitive, cls, content);\n    }\n  }\n\n  // Wrap in explicit\n  if (state.explicit !== null)\n    result = this._encodeComposite(state.explicit, false, 'context', result);\n\n  return result;\n};\n\nNode.prototype._encodeChoice = function encodeChoice(data, reporter) {\n  var state = this._baseState;\n\n  var node = state.choice[data.type];\n  if (!node) {\n    assert(\n        false,\n        data.type + ' not found in ' +\n            JSON.stringify(Object.keys(state.choice)));\n  }\n  return node._encode(data.value, reporter);\n};\n\nNode.prototype._encodePrimitive = function encodePrimitive(tag, data) {\n  var state = this._baseState;\n\n  if (/str$/.test(tag))\n    return this._encodeStr(data, tag);\n  else if (tag === 'objid' && state.args)\n    return this._encodeObjid(data, state.reverseArgs[0], state.args[1]);\n  else if (tag === 'objid')\n    return this._encodeObjid(data, null, null);\n  else if (tag === 'gentime' || tag === 'utctime')\n    return this._encodeTime(data, tag);\n  else if (tag === 'null_')\n    return this._encodeNull();\n  else if (tag === 'int' || tag === 'enum')\n    return this._encodeInt(data, state.args && state.reverseArgs[0]);\n  else if (tag === 'bool')\n    return this._encodeBool(data);\n  else if (tag === 'objDesc')\n    return this._encodeStr(data, tag);\n  else\n    throw new Error('Unsupported tag: ' + tag);\n};\n\nNode.prototype._isNumstr = function isNumstr(str) {\n  return /^[0-9 ]*$/.test(str);\n};\n\nNode.prototype._isPrintstr = function isPrintstr(str) {\n  return /^[A-Za-z0-9 '\\(\\)\\+,\\-\\.\\/:=\\?]*$/.test(str);\n};\n","var inherits = require('inherits');\n\nfunction Reporter(options) {\n  this._reporterState = {\n    obj: null,\n    path: [],\n    options: options || {},\n    errors: []\n  };\n}\nexports.Reporter = Reporter;\n\nReporter.prototype.isError = function isError(obj) {\n  return obj instanceof ReporterError;\n};\n\nReporter.prototype.save = function save() {\n  var state = this._reporterState;\n\n  return { obj: state.obj, pathLen: state.path.length };\n};\n\nReporter.prototype.restore = function restore(data) {\n  var state = this._reporterState;\n\n  state.obj = data.obj;\n  state.path = state.path.slice(0, data.pathLen);\n};\n\nReporter.prototype.enterKey = function enterKey(key) {\n  return this._reporterState.path.push(key);\n};\n\nReporter.prototype.exitKey = function exitKey(index) {\n  var state = this._reporterState;\n\n  state.path = state.path.slice(0, index - 1);\n};\n\nReporter.prototype.leaveKey = function leaveKey(index, key, value) {\n  var state = this._reporterState;\n\n  this.exitKey(index);\n  if (state.obj !== null)\n    state.obj[key] = value;\n};\n\nReporter.prototype.path = function path() {\n  return this._reporterState.path.join('/');\n};\n\nReporter.prototype.enterObject = function enterObject() {\n  var state = this._reporterState;\n\n  var prev = state.obj;\n  state.obj = {};\n  return prev;\n};\n\nReporter.prototype.leaveObject = function leaveObject(prev) {\n  var state = this._reporterState;\n\n  var now = state.obj;\n  state.obj = prev;\n  return now;\n};\n\nReporter.prototype.error = function error(msg) {\n  var err;\n  var state = this._reporterState;\n\n  var inherited = msg instanceof ReporterError;\n  if (inherited) {\n    err = msg;\n  } else {\n    err = new ReporterError(state.path.map(function(elem) {\n      return '[' + JSON.stringify(elem) + ']';\n    }).join(''), msg.message || msg, msg.stack);\n  }\n\n  if (!state.options.partial)\n    throw err;\n\n  if (!inherited)\n    state.errors.push(err);\n\n  return err;\n};\n\nReporter.prototype.wrapResult = function wrapResult(result) {\n  var state = this._reporterState;\n  if (!state.options.partial)\n    return result;\n\n  return {\n    result: this.isError(result) ? null : result,\n    errors: state.errors\n  };\n};\n\nfunction ReporterError(path, msg) {\n  this.path = path;\n  this.rethrow(msg);\n};\ninherits(ReporterError, Error);\n\nReporterError.prototype.rethrow = function rethrow(msg) {\n  this.message = msg + ' at: ' + (this.path || '(shallow)');\n  if (Error.captureStackTrace)\n    Error.captureStackTrace(this, ReporterError);\n\n  if (!this.stack) {\n    try {\n      // IE only adds stack when thrown\n      throw new Error(this.message);\n    } catch (e) {\n      this.stack = e.stack;\n    }\n  }\n  return this;\n};\n","var constants = require('../constants');\n\nexports.tagClass = {\n  0: 'universal',\n  1: 'application',\n  2: 'context',\n  3: 'private'\n};\nexports.tagClassByName = constants._reverse(exports.tagClass);\n\nexports.tag = {\n  0x00: 'end',\n  0x01: 'bool',\n  0x02: 'int',\n  0x03: 'bitstr',\n  0x04: 'octstr',\n  0x05: 'null_',\n  0x06: 'objid',\n  0x07: 'objDesc',\n  0x08: 'external',\n  0x09: 'real',\n  0x0a: 'enum',\n  0x0b: 'embed',\n  0x0c: 'utf8str',\n  0x0d: 'relativeOid',\n  0x10: 'seq',\n  0x11: 'set',\n  0x12: 'numstr',\n  0x13: 'printstr',\n  0x14: 't61str',\n  0x15: 'videostr',\n  0x16: 'ia5str',\n  0x17: 'utctime',\n  0x18: 'gentime',\n  0x19: 'graphstr',\n  0x1a: 'iso646str',\n  0x1b: 'genstr',\n  0x1c: 'unistr',\n  0x1d: 'charstr',\n  0x1e: 'bmpstr'\n};\nexports.tagByName = constants._reverse(exports.tag);\n","var constants = exports;\n\n// Helper\nconstants._reverse = function reverse(map) {\n  var res = {};\n\n  Object.keys(map).forEach(function(key) {\n    // Convert key to integer if it is stringified\n    if ((key | 0) == key)\n      key = key | 0;\n\n    var value = map[key];\n    res[value] = key;\n  });\n\n  return res;\n};\n\nconstants.der = require('./der');\n","var inherits = require('inherits');\n\nvar asn1 = require('../../asn1');\nvar base = asn1.base;\nvar bignum = asn1.bignum;\n\n// Import DER constants\nvar der = asn1.constants.der;\n\nfunction DERDecoder(entity) {\n  this.enc = 'der';\n  this.name = entity.name;\n  this.entity = entity;\n\n  // Construct base tree\n  this.tree = new DERNode();\n  this.tree._init(entity.body);\n};\nmodule.exports = DERDecoder;\n\nDERDecoder.prototype.decode = function decode(data, options) {\n  if (!(data instanceof base.DecoderBuffer))\n    data = new base.DecoderBuffer(data, options);\n\n  return this.tree._decode(data, options);\n};\n\n// Tree methods\n\nfunction DERNode(parent) {\n  base.Node.call(this, 'der', parent);\n}\ninherits(DERNode, base.Node);\n\nDERNode.prototype._peekTag = function peekTag(buffer, tag, any) {\n  if (buffer.isEmpty())\n    return false;\n\n  var state = buffer.save();\n  var decodedTag = derDecodeTag(buffer, 'Failed to peek tag: \"' + tag + '\"');\n  if (buffer.isError(decodedTag))\n    return decodedTag;\n\n  buffer.restore(state);\n\n  return decodedTag.tag === tag || decodedTag.tagStr === tag ||\n    (decodedTag.tagStr + 'of') === tag || any;\n};\n\nDERNode.prototype._decodeTag = function decodeTag(buffer, tag, any) {\n  var decodedTag = derDecodeTag(buffer,\n                                'Failed to decode tag of \"' + tag + '\"');\n  if (buffer.isError(decodedTag))\n    return decodedTag;\n\n  var len = derDecodeLen(buffer,\n                         decodedTag.primitive,\n                         'Failed to get length of \"' + tag + '\"');\n\n  // Failure\n  if (buffer.isError(len))\n    return len;\n\n  if (!any &&\n      decodedTag.tag !== tag &&\n      decodedTag.tagStr !== tag &&\n      decodedTag.tagStr + 'of' !== tag) {\n    return buffer.error('Failed to match tag: \"' + tag + '\"');\n  }\n\n  if (decodedTag.primitive || len !== null)\n    return buffer.skip(len, 'Failed to match body of: \"' + tag + '\"');\n\n  // Indefinite length... find END tag\n  var state = buffer.save();\n  var res = this._skipUntilEnd(\n      buffer,\n      'Failed to skip indefinite length body: \"' + this.tag + '\"');\n  if (buffer.isError(res))\n    return res;\n\n  len = buffer.offset - state.offset;\n  buffer.restore(state);\n  return buffer.skip(len, 'Failed to match body of: \"' + tag + '\"');\n};\n\nDERNode.prototype._skipUntilEnd = function skipUntilEnd(buffer, fail) {\n  while (true) {\n    var tag = derDecodeTag(buffer, fail);\n    if (buffer.isError(tag))\n      return tag;\n    var len = derDecodeLen(buffer, tag.primitive, fail);\n    if (buffer.isError(len))\n      return len;\n\n    var res;\n    if (tag.primitive || len !== null)\n      res = buffer.skip(len)\n    else\n      res = this._skipUntilEnd(buffer, fail);\n\n    // Failure\n    if (buffer.isError(res))\n      return res;\n\n    if (tag.tagStr === 'end')\n      break;\n  }\n};\n\nDERNode.prototype._decodeList = function decodeList(buffer, tag, decoder,\n                                                    options) {\n  var result = [];\n  while (!buffer.isEmpty()) {\n    var possibleEnd = this._peekTag(buffer, 'end');\n    if (buffer.isError(possibleEnd))\n      return possibleEnd;\n\n    var res = decoder.decode(buffer, 'der', options);\n    if (buffer.isError(res) && possibleEnd)\n      break;\n    result.push(res);\n  }\n  return result;\n};\n\nDERNode.prototype._decodeStr = function decodeStr(buffer, tag) {\n  if (tag === 'bitstr') {\n    var unused = buffer.readUInt8();\n    if (buffer.isError(unused))\n      return unused;\n    return { unused: unused, data: buffer.raw() };\n  } else if (tag === 'bmpstr') {\n    var raw = buffer.raw();\n    if (raw.length % 2 === 1)\n      return buffer.error('Decoding of string type: bmpstr length mismatch');\n\n    var str = '';\n    for (var i = 0; i < raw.length / 2; i++) {\n      str += String.fromCharCode(raw.readUInt16BE(i * 2));\n    }\n    return str;\n  } else if (tag === 'numstr') {\n    var numstr = buffer.raw().toString('ascii');\n    if (!this._isNumstr(numstr)) {\n      return buffer.error('Decoding of string type: ' +\n                          'numstr unsupported characters');\n    }\n    return numstr;\n  } else if (tag === 'octstr') {\n    return buffer.raw();\n  } else if (tag === 'objDesc') {\n    return buffer.raw();\n  } else if (tag === 'printstr') {\n    var printstr = buffer.raw().toString('ascii');\n    if (!this._isPrintstr(printstr)) {\n      return buffer.error('Decoding of string type: ' +\n                          'printstr unsupported characters');\n    }\n    return printstr;\n  } else if (/str$/.test(tag)) {\n    return buffer.raw().toString();\n  } else {\n    return buffer.error('Decoding of string type: ' + tag + ' unsupported');\n  }\n};\n\nDERNode.prototype._decodeObjid = function decodeObjid(buffer, values, relative) {\n  var result;\n  var identifiers = [];\n  var ident = 0;\n  while (!buffer.isEmpty()) {\n    var subident = buffer.readUInt8();\n    ident <<= 7;\n    ident |= subident & 0x7f;\n    if ((subident & 0x80) === 0) {\n      identifiers.push(ident);\n      ident = 0;\n    }\n  }\n  if (subident & 0x80)\n    identifiers.push(ident);\n\n  var first = (identifiers[0] / 40) | 0;\n  var second = identifiers[0] % 40;\n\n  if (relative)\n    result = identifiers;\n  else\n    result = [first, second].concat(identifiers.slice(1));\n\n  if (values) {\n    var tmp = values[result.join(' ')];\n    if (tmp === undefined)\n      tmp = values[result.join('.')];\n    if (tmp !== undefined)\n      result = tmp;\n  }\n\n  return result;\n};\n\nDERNode.prototype._decodeTime = function decodeTime(buffer, tag) {\n  var str = buffer.raw().toString();\n  if (tag === 'gentime') {\n    var year = str.slice(0, 4) | 0;\n    var mon = str.slice(4, 6) | 0;\n    var day = str.slice(6, 8) | 0;\n    var hour = str.slice(8, 10) | 0;\n    var min = str.slice(10, 12) | 0;\n    var sec = str.slice(12, 14) | 0;\n  } else if (tag === 'utctime') {\n    var year = str.slice(0, 2) | 0;\n    var mon = str.slice(2, 4) | 0;\n    var day = str.slice(4, 6) | 0;\n    var hour = str.slice(6, 8) | 0;\n    var min = str.slice(8, 10) | 0;\n    var sec = str.slice(10, 12) | 0;\n    if (year < 70)\n      year = 2000 + year;\n    else\n      year = 1900 + year;\n  } else {\n    return buffer.error('Decoding ' + tag + ' time is not supported yet');\n  }\n\n  return Date.UTC(year, mon - 1, day, hour, min, sec, 0);\n};\n\nDERNode.prototype._decodeNull = function decodeNull(buffer) {\n  return null;\n};\n\nDERNode.prototype._decodeBool = function decodeBool(buffer) {\n  var res = buffer.readUInt8();\n  if (buffer.isError(res))\n    return res;\n  else\n    return res !== 0;\n};\n\nDERNode.prototype._decodeInt = function decodeInt(buffer, values) {\n  // Bigint, return as it is (assume big endian)\n  var raw = buffer.raw();\n  var res = new bignum(raw);\n\n  if (values)\n    res = values[res.toString(10)] || res;\n\n  return res;\n};\n\nDERNode.prototype._use = function use(entity, obj) {\n  if (typeof entity === 'function')\n    entity = entity(obj);\n  return entity._getDecoder('der').tree;\n};\n\n// Utility methods\n\nfunction derDecodeTag(buf, fail) {\n  var tag = buf.readUInt8(fail);\n  if (buf.isError(tag))\n    return tag;\n\n  var cls = der.tagClass[tag >> 6];\n  var primitive = (tag & 0x20) === 0;\n\n  // Multi-octet tag - load\n  if ((tag & 0x1f) === 0x1f) {\n    var oct = tag;\n    tag = 0;\n    while ((oct & 0x80) === 0x80) {\n      oct = buf.readUInt8(fail);\n      if (buf.isError(oct))\n        return oct;\n\n      tag <<= 7;\n      tag |= oct & 0x7f;\n    }\n  } else {\n    tag &= 0x1f;\n  }\n  var tagStr = der.tag[tag];\n\n  return {\n    cls: cls,\n    primitive: primitive,\n    tag: tag,\n    tagStr: tagStr\n  };\n}\n\nfunction derDecodeLen(buf, primitive, fail) {\n  var len = buf.readUInt8(fail);\n  if (buf.isError(len))\n    return len;\n\n  // Indefinite form\n  if (!primitive && len === 0x80)\n    return null;\n\n  // Definite form\n  if ((len & 0x80) === 0) {\n    // Short form\n    return len;\n  }\n\n  // Long form\n  var num = len & 0x7f;\n  if (num > 4)\n    return buf.error('length octect is too long');\n\n  len = 0;\n  for (var i = 0; i < num; i++) {\n    len <<= 8;\n    var j = buf.readUInt8(fail);\n    if (buf.isError(j))\n      return j;\n    len |= j;\n  }\n\n  return len;\n}\n","var decoders = exports;\n\ndecoders.der = require('./der');\ndecoders.pem = require('./pem');\n","var inherits = require('inherits');\nvar Buffer = require('buffer').Buffer;\n\nvar DERDecoder = require('./der');\n\nfunction PEMDecoder(entity) {\n  DERDecoder.call(this, entity);\n  this.enc = 'pem';\n};\ninherits(PEMDecoder, DERDecoder);\nmodule.exports = PEMDecoder;\n\nPEMDecoder.prototype.decode = function decode(data, options) {\n  var lines = data.toString().split(/[\\r\\n]+/g);\n\n  var label = options.label.toUpperCase();\n\n  var re = /^-----(BEGIN|END) ([^-]+)-----$/;\n  var start = -1;\n  var end = -1;\n  for (var i = 0; i < lines.length; i++) {\n    var match = lines[i].match(re);\n    if (match === null)\n      continue;\n\n    if (match[2] !== label)\n      continue;\n\n    if (start === -1) {\n      if (match[1] !== 'BEGIN')\n        break;\n      start = i;\n    } else {\n      if (match[1] !== 'END')\n        break;\n      end = i;\n      break;\n    }\n  }\n  if (start === -1 || end === -1)\n    throw new Error('PEM section not found for: ' + label);\n\n  var base64 = lines.slice(start + 1, end).join('');\n  // Remove excessive symbols\n  base64.replace(/[^a-z0-9\\+\\/=]+/gi, '');\n\n  var input = new Buffer(base64, 'base64');\n  return DERDecoder.prototype.decode.call(this, input, options);\n};\n","var inherits = require('inherits');\nvar Buffer = require('buffer').Buffer;\n\nvar asn1 = require('../../asn1');\nvar base = asn1.base;\n\n// Import DER constants\nvar der = asn1.constants.der;\n\nfunction DEREncoder(entity) {\n  this.enc = 'der';\n  this.name = entity.name;\n  this.entity = entity;\n\n  // Construct base tree\n  this.tree = new DERNode();\n  this.tree._init(entity.body);\n};\nmodule.exports = DEREncoder;\n\nDEREncoder.prototype.encode = function encode(data, reporter) {\n  return this.tree._encode(data, reporter).join();\n};\n\n// Tree methods\n\nfunction DERNode(parent) {\n  base.Node.call(this, 'der', parent);\n}\ninherits(DERNode, base.Node);\n\nDERNode.prototype._encodeComposite = function encodeComposite(tag,\n                                                              primitive,\n                                                              cls,\n                                                              content) {\n  var encodedTag = encodeTag(tag, primitive, cls, this.reporter);\n\n  // Short form\n  if (content.length < 0x80) {\n    var header = new Buffer(2);\n    header[0] = encodedTag;\n    header[1] = content.length;\n    return this._createEncoderBuffer([ header, content ]);\n  }\n\n  // Long form\n  // Count octets required to store length\n  var lenOctets = 1;\n  for (var i = content.length; i >= 0x100; i >>= 8)\n    lenOctets++;\n\n  var header = new Buffer(1 + 1 + lenOctets);\n  header[0] = encodedTag;\n  header[1] = 0x80 | lenOctets;\n\n  for (var i = 1 + lenOctets, j = content.length; j > 0; i--, j >>= 8)\n    header[i] = j & 0xff;\n\n  return this._createEncoderBuffer([ header, content ]);\n};\n\nDERNode.prototype._encodeStr = function encodeStr(str, tag) {\n  if (tag === 'bitstr') {\n    return this._createEncoderBuffer([ str.unused | 0, str.data ]);\n  } else if (tag === 'bmpstr') {\n    var buf = new Buffer(str.length * 2);\n    for (var i = 0; i < str.length; i++) {\n      buf.writeUInt16BE(str.charCodeAt(i), i * 2);\n    }\n    return this._createEncoderBuffer(buf);\n  } else if (tag === 'numstr') {\n    if (!this._isNumstr(str)) {\n      return this.reporter.error('Encoding of string type: numstr supports ' +\n                                 'only digits and space');\n    }\n    return this._createEncoderBuffer(str);\n  } else if (tag === 'printstr') {\n    if (!this._isPrintstr(str)) {\n      return this.reporter.error('Encoding of string type: printstr supports ' +\n                                 'only latin upper and lower case letters, ' +\n                                 'digits, space, apostrophe, left and rigth ' +\n                                 'parenthesis, plus sign, comma, hyphen, ' +\n                                 'dot, slash, colon, equal sign, ' +\n                                 'question mark');\n    }\n    return this._createEncoderBuffer(str);\n  } else if (/str$/.test(tag)) {\n    return this._createEncoderBuffer(str);\n  } else if (tag === 'objDesc') {\n    return this._createEncoderBuffer(str);\n  } else {\n    return this.reporter.error('Encoding of string type: ' + tag +\n                               ' unsupported');\n  }\n};\n\nDERNode.prototype._encodeObjid = function encodeObjid(id, values, relative) {\n  if (typeof id === 'string') {\n    if (!values)\n      return this.reporter.error('string objid given, but no values map found');\n    if (!values.hasOwnProperty(id))\n      return this.reporter.error('objid not found in values map');\n    id = values[id].split(/[\\s\\.]+/g);\n    for (var i = 0; i < id.length; i++)\n      id[i] |= 0;\n  } else if (Array.isArray(id)) {\n    id = id.slice();\n    for (var i = 0; i < id.length; i++)\n      id[i] |= 0;\n  }\n\n  if (!Array.isArray(id)) {\n    return this.reporter.error('objid() should be either array or string, ' +\n                               'got: ' + JSON.stringify(id));\n  }\n\n  if (!relative) {\n    if (id[1] >= 40)\n      return this.reporter.error('Second objid identifier OOB');\n    id.splice(0, 2, id[0] * 40 + id[1]);\n  }\n\n  // Count number of octets\n  var size = 0;\n  for (var i = 0; i < id.length; i++) {\n    var ident = id[i];\n    for (size++; ident >= 0x80; ident >>= 7)\n      size++;\n  }\n\n  var objid = new Buffer(size);\n  var offset = objid.length - 1;\n  for (var i = id.length - 1; i >= 0; i--) {\n    var ident = id[i];\n    objid[offset--] = ident & 0x7f;\n    while ((ident >>= 7) > 0)\n      objid[offset--] = 0x80 | (ident & 0x7f);\n  }\n\n  return this._createEncoderBuffer(objid);\n};\n\nfunction two(num) {\n  if (num < 10)\n    return '0' + num;\n  else\n    return num;\n}\n\nDERNode.prototype._encodeTime = function encodeTime(time, tag) {\n  var str;\n  var date = new Date(time);\n\n  if (tag === 'gentime') {\n    str = [\n      two(date.getFullYear()),\n      two(date.getUTCMonth() + 1),\n      two(date.getUTCDate()),\n      two(date.getUTCHours()),\n      two(date.getUTCMinutes()),\n      two(date.getUTCSeconds()),\n      'Z'\n    ].join('');\n  } else if (tag === 'utctime') {\n    str = [\n      two(date.getFullYear() % 100),\n      two(date.getUTCMonth() + 1),\n      two(date.getUTCDate()),\n      two(date.getUTCHours()),\n      two(date.getUTCMinutes()),\n      two(date.getUTCSeconds()),\n      'Z'\n    ].join('');\n  } else {\n    this.reporter.error('Encoding ' + tag + ' time is not supported yet');\n  }\n\n  return this._encodeStr(str, 'octstr');\n};\n\nDERNode.prototype._encodeNull = function encodeNull() {\n  return this._createEncoderBuffer('');\n};\n\nDERNode.prototype._encodeInt = function encodeInt(num, values) {\n  if (typeof num === 'string') {\n    if (!values)\n      return this.reporter.error('String int or enum given, but no values map');\n    if (!values.hasOwnProperty(num)) {\n      return this.reporter.error('Values map doesn\\'t contain: ' +\n                                 JSON.stringify(num));\n    }\n    num = values[num];\n  }\n\n  // Bignum, assume big endian\n  if (typeof num !== 'number' && !Buffer.isBuffer(num)) {\n    var numArray = num.toArray();\n    if (!num.sign && numArray[0] & 0x80) {\n      numArray.unshift(0);\n    }\n    num = new Buffer(numArray);\n  }\n\n  if (Buffer.isBuffer(num)) {\n    var size = num.length;\n    if (num.length === 0)\n      size++;\n\n    var out = new Buffer(size);\n    num.copy(out);\n    if (num.length === 0)\n      out[0] = 0\n    return this._createEncoderBuffer(out);\n  }\n\n  if (num < 0x80)\n    return this._createEncoderBuffer(num);\n\n  if (num < 0x100)\n    return this._createEncoderBuffer([0, num]);\n\n  var size = 1;\n  for (var i = num; i >= 0x100; i >>= 8)\n    size++;\n\n  var out = new Array(size);\n  for (var i = out.length - 1; i >= 0; i--) {\n    out[i] = num & 0xff;\n    num >>= 8;\n  }\n  if(out[0] & 0x80) {\n    out.unshift(0);\n  }\n\n  return this._createEncoderBuffer(new Buffer(out));\n};\n\nDERNode.prototype._encodeBool = function encodeBool(value) {\n  return this._createEncoderBuffer(value ? 0xff : 0);\n};\n\nDERNode.prototype._use = function use(entity, obj) {\n  if (typeof entity === 'function')\n    entity = entity(obj);\n  return entity._getEncoder('der').tree;\n};\n\nDERNode.prototype._skipDefault = function skipDefault(dataBuffer, reporter, parent) {\n  var state = this._baseState;\n  var i;\n  if (state['default'] === null)\n    return false;\n\n  var data = dataBuffer.join();\n  if (state.defaultBuffer === undefined)\n    state.defaultBuffer = this._encodeValue(state['default'], reporter, parent).join();\n\n  if (data.length !== state.defaultBuffer.length)\n    return false;\n\n  for (i=0; i < data.length; i++)\n    if (data[i] !== state.defaultBuffer[i])\n      return false;\n\n  return true;\n};\n\n// Utility methods\n\nfunction encodeTag(tag, primitive, cls, reporter) {\n  var res;\n\n  if (tag === 'seqof')\n    tag = 'seq';\n  else if (tag === 'setof')\n    tag = 'set';\n\n  if (der.tagByName.hasOwnProperty(tag))\n    res = der.tagByName[tag];\n  else if (typeof tag === 'number' && (tag | 0) === tag)\n    res = tag;\n  else\n    return reporter.error('Unknown tag: ' + tag);\n\n  if (res >= 0x1f)\n    return reporter.error('Multi-octet tag encoding unsupported');\n\n  if (!primitive)\n    res |= 0x20;\n\n  res |= (der.tagClassByName[cls || 'universal'] << 6);\n\n  return res;\n}\n","var encoders = exports;\n\nencoders.der = require('./der');\nencoders.pem = require('./pem');\n","var inherits = require('inherits');\n\nvar DEREncoder = require('./der');\n\nfunction PEMEncoder(entity) {\n  DEREncoder.call(this, entity);\n  this.enc = 'pem';\n};\ninherits(PEMEncoder, DEREncoder);\nmodule.exports = PEMEncoder;\n\nPEMEncoder.prototype.encode = function encode(data, options) {\n  var buf = DEREncoder.prototype.encode.call(this, data);\n\n  var p = buf.toString('base64');\n  var out = [ '-----BEGIN ' + options.label + '-----' ];\n  for (var i = 0; i < p.length; i += 64)\n    out.push(p.slice(i, i + 64));\n  out.push('-----END ' + options.label + '-----');\n  return out.join('\\n');\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    if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') {\n      Buffer = window.Buffer;\n    } else {\n      Buffer = require('buffer').Buffer;\n    }\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      this.negative = 1;\n    }\n\n    if (start < number.length) {\n      if (base === 16) {\n        this._parseHex(number, start, endian);\n      } else {\n        this._parseBase(number, base, start);\n        if (endian === 'le') {\n          this._initArray(this.toArray(), base, endian);\n        }\n      }\n    }\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 parseHex4Bits (string, index) {\n    var c = string.charCodeAt(index);\n    // 'A' - 'F'\n    if (c >= 65 && c <= 70) {\n      return c - 55;\n    // 'a' - 'f'\n    } else if (c >= 97 && c <= 102) {\n      return c - 87;\n    // '0' - '9'\n    } else {\n      return (c - 48) & 0xf;\n    }\n  }\n\n  function parseHexByte (string, lowerBound, index) {\n    var r = parseHex4Bits(string, index);\n    if (index - 1 >= lowerBound) {\n      r |= parseHex4Bits(string, index - 1) << 4;\n    }\n    return r;\n  }\n\n  BN.prototype._parseHex = function _parseHex (number, start, endian) {\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    // 24-bits chunks\n    var off = 0;\n    var j = 0;\n\n    var w;\n    if (endian === 'be') {\n      for (i = number.length - 1; i >= start; i -= 2) {\n        w = parseHexByte(number, start, i) << off;\n        this.words[j] |= w & 0x3ffffff;\n        if (off >= 18) {\n          off -= 18;\n          j += 1;\n          this.words[j] |= w >>> 26;\n        } else {\n          off += 8;\n        }\n      }\n    } else {\n      var parseLength = number.length - start;\n      for (i = parseLength % 2 === 0 ? start + 1 : start; i < number.length; i += 2) {\n        w = parseHexByte(number, start, i) << off;\n        this.words[j] |= w & 0x3ffffff;\n        if (off >= 18) {\n          off -= 18;\n          j += 1;\n          this.words[j] |= w >>> 26;\n        } else {\n          off += 8;\n        }\n      }\n    }\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    this.strip();\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 ? '<BN-R: ' : '<BN: ') + this.toString(16) + '>';\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        off += 2;\n        if (off >= 26) {\n          off -= 26;\n          i--;\n        }\n        if (carry !== 0 || i !== this.length - 1) {\n          out = zeros[6 - word.length] + word + out;\n        } else {\n          out = word + out;\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    this.length = num === 0 ? 1 : this.length;\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","'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n  lookup[i] = code[i]\n  revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction getLens (b64) {\n  var len = b64.length\n\n  if (len % 4 > 0) {\n    throw new Error('Invalid string. Length must be a multiple of 4')\n  }\n\n  // Trim off extra bytes after placeholder bytes are found\n  // See: https://github.com/beatgammit/base64-js/issues/42\n  var validLen = b64.indexOf('=')\n  if (validLen === -1) validLen = len\n\n  var placeHoldersLen = validLen === len\n    ? 0\n    : 4 - (validLen % 4)\n\n  return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction byteLength (b64) {\n  var lens = getLens(b64)\n  var validLen = lens[0]\n  var placeHoldersLen = lens[1]\n  return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n  return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n  var tmp\n  var lens = getLens(b64)\n  var validLen = lens[0]\n  var placeHoldersLen = lens[1]\n\n  var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n  var curByte = 0\n\n  // if there are placeholders, only get up to the last complete 4 chars\n  var len = placeHoldersLen > 0\n    ? validLen - 4\n    : validLen\n\n  var i\n  for (i = 0; i < len; i += 4) {\n    tmp =\n      (revLookup[b64.charCodeAt(i)] << 18) |\n      (revLookup[b64.charCodeAt(i + 1)] << 12) |\n      (revLookup[b64.charCodeAt(i + 2)] << 6) |\n      revLookup[b64.charCodeAt(i + 3)]\n    arr[curByte++] = (tmp >> 16) & 0xFF\n    arr[curByte++] = (tmp >> 8) & 0xFF\n    arr[curByte++] = tmp & 0xFF\n  }\n\n  if (placeHoldersLen === 2) {\n    tmp =\n      (revLookup[b64.charCodeAt(i)] << 2) |\n      (revLookup[b64.charCodeAt(i + 1)] >> 4)\n    arr[curByte++] = tmp & 0xFF\n  }\n\n  if (placeHoldersLen === 1) {\n    tmp =\n      (revLookup[b64.charCodeAt(i)] << 10) |\n      (revLookup[b64.charCodeAt(i + 1)] << 4) |\n      (revLookup[b64.charCodeAt(i + 2)] >> 2)\n    arr[curByte++] = (tmp >> 8) & 0xFF\n    arr[curByte++] = tmp & 0xFF\n  }\n\n  return arr\n}\n\nfunction tripletToBase64 (num) {\n  return lookup[num >> 18 & 0x3F] +\n    lookup[num >> 12 & 0x3F] +\n    lookup[num >> 6 & 0x3F] +\n    lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n  var tmp\n  var output = []\n  for (var i = start; i < end; i += 3) {\n    tmp =\n      ((uint8[i] << 16) & 0xFF0000) +\n      ((uint8[i + 1] << 8) & 0xFF00) +\n      (uint8[i + 2] & 0xFF)\n    output.push(tripletToBase64(tmp))\n  }\n  return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n  var tmp\n  var len = uint8.length\n  var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n  var parts = []\n  var maxChunkLength = 16383 // must be multiple of 3\n\n  // go through the array every three bytes, we'll deal with trailing stuff later\n  for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n    parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))\n  }\n\n  // pad the end with zeros, but make sure to not forget the extra bytes\n  if (extraBytes === 1) {\n    tmp = uint8[len - 1]\n    parts.push(\n      lookup[tmp >> 2] +\n      lookup[(tmp << 4) & 0x3F] +\n      '=='\n    )\n  } else if (extraBytes === 2) {\n    tmp = (uint8[len - 2] << 8) + uint8[len - 1]\n    parts.push(\n      lookup[tmp >> 10] +\n      lookup[(tmp >> 4) & 0x3F] +\n      lookup[(tmp << 2) & 0x3F] +\n      '='\n    )\n  }\n\n  return parts.join('')\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    if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') {\n      Buffer = window.Buffer;\n    } else {\n      Buffer = require('buffer').Buffer;\n    }\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      this.negative = 1;\n    }\n\n    if (start < number.length) {\n      if (base === 16) {\n        this._parseHex(number, start, endian);\n      } else {\n        this._parseBase(number, base, start);\n        if (endian === 'le') {\n          this._initArray(this.toArray(), base, endian);\n        }\n      }\n    }\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 parseHex4Bits (string, index) {\n    var c = string.charCodeAt(index);\n    // '0' - '9'\n    if (c >= 48 && c <= 57) {\n      return c - 48;\n    // 'A' - 'F'\n    } else if (c >= 65 && c <= 70) {\n      return c - 55;\n    // 'a' - 'f'\n    } else if (c >= 97 && c <= 102) {\n      return c - 87;\n    } else {\n      assert(false, 'Invalid character in ' + string);\n    }\n  }\n\n  function parseHexByte (string, lowerBound, index) {\n    var r = parseHex4Bits(string, index);\n    if (index - 1 >= lowerBound) {\n      r |= parseHex4Bits(string, index - 1) << 4;\n    }\n    return r;\n  }\n\n  BN.prototype._parseHex = function _parseHex (number, start, endian) {\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    // 24-bits chunks\n    var off = 0;\n    var j = 0;\n\n    var w;\n    if (endian === 'be') {\n      for (i = number.length - 1; i >= start; i -= 2) {\n        w = parseHexByte(number, start, i) << off;\n        this.words[j] |= w & 0x3ffffff;\n        if (off >= 18) {\n          off -= 18;\n          j += 1;\n          this.words[j] |= w >>> 26;\n        } else {\n          off += 8;\n        }\n      }\n    } else {\n      var parseLength = number.length - start;\n      for (i = parseLength % 2 === 0 ? start + 1 : start; i < number.length; i += 2) {\n        w = parseHexByte(number, start, i) << off;\n        this.words[j] |= w & 0x3ffffff;\n        if (off >= 18) {\n          off -= 18;\n          j += 1;\n          this.words[j] |= w >>> 26;\n        } else {\n          off += 8;\n        }\n      }\n    }\n\n    this._strip();\n  };\n\n  function parseBase (str, start, end, mul) {\n    var r = 0;\n    var b = 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        b = c - 49 + 0xa;\n\n      // 'A'\n      } else if (c >= 17) {\n        b = c - 17 + 0xa;\n\n      // '0' - '9'\n      } else {\n        b = c;\n      }\n      assert(c >= 0 && b < mul, 'Invalid character');\n      r += b;\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    this._strip();\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  function move (dest, src) {\n    dest.words = src.words;\n    dest.length = src.length;\n    dest.negative = src.negative;\n    dest.red = src.red;\n  }\n\n  BN.prototype._move = function _move (dest) {\n    move(dest, this);\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  // Check Symbol.for because not everywhere where Symbol defined\n  // See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol#Browser_compatibility\n  if (typeof Symbol !== 'undefined' && typeof Symbol.for === 'function') {\n    try {\n      BN.prototype[Symbol.for('nodejs.util.inspect.custom')] = inspect;\n    } catch (e) {\n      BN.prototype.inspect = inspect;\n    }\n  } else {\n    BN.prototype.inspect = inspect;\n  }\n\n  function inspect () {\n    return (this.red ? '<BN-R: ' : '<BN: ') + this.toString(16) + '>';\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        off += 2;\n        if (off >= 26) {\n          off -= 26;\n          i--;\n        }\n        if (carry !== 0 || i !== this.length - 1) {\n          out = zeros[6 - word.length] + word + out;\n        } else {\n          out = word + out;\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.modrn(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, 2);\n  };\n\n  if (Buffer) {\n    BN.prototype.toBuffer = function toBuffer (endian, length) {\n      return this.toArrayLike(Buffer, endian, length);\n    };\n  }\n\n  BN.prototype.toArray = function toArray (endian, length) {\n    return this.toArrayLike(Array, endian, length);\n  };\n\n  var allocate = function allocate (ArrayType, size) {\n    if (ArrayType.allocUnsafe) {\n      return ArrayType.allocUnsafe(size);\n    }\n    return new ArrayType(size);\n  };\n\n  BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {\n    this._strip();\n\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    var res = allocate(ArrayType, reqLength);\n    var postfix = endian === 'le' ? 'LE' : 'BE';\n    this['_toArrayLike' + postfix](res, byteLength);\n    return res;\n  };\n\n  BN.prototype._toArrayLikeLE = function _toArrayLikeLE (res, byteLength) {\n    var position = 0;\n    var carry = 0;\n\n    for (var i = 0, shift = 0; i < this.length; i++) {\n      var word = (this.words[i] << shift) | carry;\n\n      res[position++] = word & 0xff;\n      if (position < res.length) {\n        res[position++] = (word >> 8) & 0xff;\n      }\n      if (position < res.length) {\n        res[position++] = (word >> 16) & 0xff;\n      }\n\n      if (shift === 6) {\n        if (position < res.length) {\n          res[position++] = (word >> 24) & 0xff;\n        }\n        carry = 0;\n        shift = 0;\n      } else {\n        carry = word >>> 24;\n        shift += 2;\n      }\n    }\n\n    if (position < res.length) {\n      res[position++] = carry;\n\n      while (position < res.length) {\n        res[position++] = 0;\n      }\n    }\n  };\n\n  BN.prototype._toArrayLikeBE = function _toArrayLikeBE (res, byteLength) {\n    var position = res.length - 1;\n    var carry = 0;\n\n    for (var i = 0, shift = 0; i < this.length; i++) {\n      var word = (this.words[i] << shift) | carry;\n\n      res[position--] = word & 0xff;\n      if (position >= 0) {\n        res[position--] = (word >> 8) & 0xff;\n      }\n      if (position >= 0) {\n        res[position--] = (word >> 16) & 0xff;\n      }\n\n      if (shift === 6) {\n        if (position >= 0) {\n          res[position--] = (word >> 24) & 0xff;\n        }\n        carry = 0;\n        shift = 0;\n      } else {\n        carry = word >>> 24;\n        shift += 2;\n      }\n    }\n\n    if (position >= 0) {\n      res[position--] = carry;\n\n      while (position >= 0) {\n        res[position--] = 0;\n      }\n    }\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] >>> wbit) & 0x01;\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    // Temporary disable, see https://github.com/indutny/bn.js/issues/211\n    // var fftm = new FFTM();\n    // return fftm.mulp(self, num, out);\n    return bigMulTo(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    var isNegNum = num < 0;\n    if (isNegNum) num = -num;\n\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    this.length = num === 0 ? 1 : this.length;\n\n    return isNegNum ? this.ineg() : 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.modrn(num.words[0]))\n        };\n      }\n\n      return {\n        div: this.divn(num.words[0]),\n        mod: new BN(this.modrn(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.modrn = function modrn (num) {\n    var isNegNum = num < 0;\n    if (isNegNum) num = -num;\n\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 isNegNum ? -acc : acc;\n  };\n\n  // WARNING: DEPRECATED\n  BN.prototype.modn = function modn (num) {\n    return this.modrn(num);\n  };\n\n  // In-place division by number\n  BN.prototype.idivn = function idivn (num) {\n    var isNegNum = num < 0;\n    if (isNegNum) num = -num;\n\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    this._strip();\n    return isNegNum ? this.ineg() : this;\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 a BN v4 instance\n        r.strip();\n      } else {\n        // r is a 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\n    move(a, a.umod(this.m)._forceRed(this));\n    return a;\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 r;\n\nmodule.exports = function rand(len) {\n  if (!r)\n    r = new Rand(null);\n\n  return r.generate(len);\n};\n\nfunction Rand(rand) {\n  this.rand = rand;\n}\nmodule.exports.Rand = Rand;\n\nRand.prototype.generate = function generate(len) {\n  return this._rand(len);\n};\n\n// Emulate crypto API using randy\nRand.prototype._rand = function _rand(n) {\n  if (this.rand.getBytes)\n    return this.rand.getBytes(n);\n\n  var res = new Uint8Array(n);\n  for (var i = 0; i < res.length; i++)\n    res[i] = this.rand.getByte();\n  return res;\n};\n\nif (typeof self === 'object') {\n  if (self.crypto && self.crypto.getRandomValues) {\n    // Modern browsers\n    Rand.prototype._rand = function _rand(n) {\n      var arr = new Uint8Array(n);\n      self.crypto.getRandomValues(arr);\n      return arr;\n    };\n  } else if (self.msCrypto && self.msCrypto.getRandomValues) {\n    // IE\n    Rand.prototype._rand = function _rand(n) {\n      var arr = new Uint8Array(n);\n      self.msCrypto.getRandomValues(arr);\n      return arr;\n    };\n\n  // Safari's WebWorkers do not have `crypto`\n  } else if (typeof window === 'object') {\n    // Old junk\n    Rand.prototype._rand = function() {\n      throw new Error('Not implemented yet');\n    };\n  }\n} else {\n  // Node.js or Web worker with no crypto support\n  try {\n    var crypto = require('crypto');\n    if (typeof crypto.randomBytes !== 'function')\n      throw new Error('Not supported');\n\n    Rand.prototype._rand = function _rand(n) {\n      return crypto.randomBytes(n);\n    };\n  } catch (e) {\n  }\n}\n","// based on the aes implimentation in triple sec\n// https://github.com/keybase/triplesec\n// which is in turn based on the one from crypto-js\n// https://code.google.com/p/crypto-js/\n\nvar Buffer = require('safe-buffer').Buffer\n\nfunction asUInt32Array (buf) {\n  if (!Buffer.isBuffer(buf)) buf = Buffer.from(buf)\n\n  var len = (buf.length / 4) | 0\n  var out = new Array(len)\n\n  for (var i = 0; i < len; i++) {\n    out[i] = buf.readUInt32BE(i * 4)\n  }\n\n  return out\n}\n\nfunction scrubVec (v) {\n  for (var i = 0; i < v.length; v++) {\n    v[i] = 0\n  }\n}\n\nfunction cryptBlock (M, keySchedule, SUB_MIX, SBOX, nRounds) {\n  var SUB_MIX0 = SUB_MIX[0]\n  var SUB_MIX1 = SUB_MIX[1]\n  var SUB_MIX2 = SUB_MIX[2]\n  var SUB_MIX3 = SUB_MIX[3]\n\n  var s0 = M[0] ^ keySchedule[0]\n  var s1 = M[1] ^ keySchedule[1]\n  var s2 = M[2] ^ keySchedule[2]\n  var s3 = M[3] ^ keySchedule[3]\n  var t0, t1, t2, t3\n  var ksRow = 4\n\n  for (var round = 1; round < nRounds; round++) {\n    t0 = SUB_MIX0[s0 >>> 24] ^ SUB_MIX1[(s1 >>> 16) & 0xff] ^ SUB_MIX2[(s2 >>> 8) & 0xff] ^ SUB_MIX3[s3 & 0xff] ^ keySchedule[ksRow++]\n    t1 = SUB_MIX0[s1 >>> 24] ^ SUB_MIX1[(s2 >>> 16) & 0xff] ^ SUB_MIX2[(s3 >>> 8) & 0xff] ^ SUB_MIX3[s0 & 0xff] ^ keySchedule[ksRow++]\n    t2 = SUB_MIX0[s2 >>> 24] ^ SUB_MIX1[(s3 >>> 16) & 0xff] ^ SUB_MIX2[(s0 >>> 8) & 0xff] ^ SUB_MIX3[s1 & 0xff] ^ keySchedule[ksRow++]\n    t3 = SUB_MIX0[s3 >>> 24] ^ SUB_MIX1[(s0 >>> 16) & 0xff] ^ SUB_MIX2[(s1 >>> 8) & 0xff] ^ SUB_MIX3[s2 & 0xff] ^ keySchedule[ksRow++]\n    s0 = t0\n    s1 = t1\n    s2 = t2\n    s3 = t3\n  }\n\n  t0 = ((SBOX[s0 >>> 24] << 24) | (SBOX[(s1 >>> 16) & 0xff] << 16) | (SBOX[(s2 >>> 8) & 0xff] << 8) | SBOX[s3 & 0xff]) ^ keySchedule[ksRow++]\n  t1 = ((SBOX[s1 >>> 24] << 24) | (SBOX[(s2 >>> 16) & 0xff] << 16) | (SBOX[(s3 >>> 8) & 0xff] << 8) | SBOX[s0 & 0xff]) ^ keySchedule[ksRow++]\n  t2 = ((SBOX[s2 >>> 24] << 24) | (SBOX[(s3 >>> 16) & 0xff] << 16) | (SBOX[(s0 >>> 8) & 0xff] << 8) | SBOX[s1 & 0xff]) ^ keySchedule[ksRow++]\n  t3 = ((SBOX[s3 >>> 24] << 24) | (SBOX[(s0 >>> 16) & 0xff] << 16) | (SBOX[(s1 >>> 8) & 0xff] << 8) | SBOX[s2 & 0xff]) ^ keySchedule[ksRow++]\n  t0 = t0 >>> 0\n  t1 = t1 >>> 0\n  t2 = t2 >>> 0\n  t3 = t3 >>> 0\n\n  return [t0, t1, t2, t3]\n}\n\n// AES constants\nvar RCON = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36]\nvar G = (function () {\n  // Compute double table\n  var d = new Array(256)\n  for (var j = 0; j < 256; j++) {\n    if (j < 128) {\n      d[j] = j << 1\n    } else {\n      d[j] = (j << 1) ^ 0x11b\n    }\n  }\n\n  var SBOX = []\n  var INV_SBOX = []\n  var SUB_MIX = [[], [], [], []]\n  var INV_SUB_MIX = [[], [], [], []]\n\n  // Walk GF(2^8)\n  var x = 0\n  var xi = 0\n  for (var i = 0; i < 256; ++i) {\n    // Compute sbox\n    var sx = xi ^ (xi << 1) ^ (xi << 2) ^ (xi << 3) ^ (xi << 4)\n    sx = (sx >>> 8) ^ (sx & 0xff) ^ 0x63\n    SBOX[x] = sx\n    INV_SBOX[sx] = x\n\n    // Compute multiplication\n    var x2 = d[x]\n    var x4 = d[x2]\n    var x8 = d[x4]\n\n    // Compute sub bytes, mix columns tables\n    var t = (d[sx] * 0x101) ^ (sx * 0x1010100)\n    SUB_MIX[0][x] = (t << 24) | (t >>> 8)\n    SUB_MIX[1][x] = (t << 16) | (t >>> 16)\n    SUB_MIX[2][x] = (t << 8) | (t >>> 24)\n    SUB_MIX[3][x] = t\n\n    // Compute inv sub bytes, inv mix columns tables\n    t = (x8 * 0x1010101) ^ (x4 * 0x10001) ^ (x2 * 0x101) ^ (x * 0x1010100)\n    INV_SUB_MIX[0][sx] = (t << 24) | (t >>> 8)\n    INV_SUB_MIX[1][sx] = (t << 16) | (t >>> 16)\n    INV_SUB_MIX[2][sx] = (t << 8) | (t >>> 24)\n    INV_SUB_MIX[3][sx] = t\n\n    if (x === 0) {\n      x = xi = 1\n    } else {\n      x = x2 ^ d[d[d[x8 ^ x2]]]\n      xi ^= d[d[xi]]\n    }\n  }\n\n  return {\n    SBOX: SBOX,\n    INV_SBOX: INV_SBOX,\n    SUB_MIX: SUB_MIX,\n    INV_SUB_MIX: INV_SUB_MIX\n  }\n})()\n\nfunction AES (key) {\n  this._key = asUInt32Array(key)\n  this._reset()\n}\n\nAES.blockSize = 4 * 4\nAES.keySize = 256 / 8\nAES.prototype.blockSize = AES.blockSize\nAES.prototype.keySize = AES.keySize\nAES.prototype._reset = function () {\n  var keyWords = this._key\n  var keySize = keyWords.length\n  var nRounds = keySize + 6\n  var ksRows = (nRounds + 1) * 4\n\n  var keySchedule = []\n  for (var k = 0; k < keySize; k++) {\n    keySchedule[k] = keyWords[k]\n  }\n\n  for (k = keySize; k < ksRows; k++) {\n    var t = keySchedule[k - 1]\n\n    if (k % keySize === 0) {\n      t = (t << 8) | (t >>> 24)\n      t =\n        (G.SBOX[t >>> 24] << 24) |\n        (G.SBOX[(t >>> 16) & 0xff] << 16) |\n        (G.SBOX[(t >>> 8) & 0xff] << 8) |\n        (G.SBOX[t & 0xff])\n\n      t ^= RCON[(k / keySize) | 0] << 24\n    } else if (keySize > 6 && k % keySize === 4) {\n      t =\n        (G.SBOX[t >>> 24] << 24) |\n        (G.SBOX[(t >>> 16) & 0xff] << 16) |\n        (G.SBOX[(t >>> 8) & 0xff] << 8) |\n        (G.SBOX[t & 0xff])\n    }\n\n    keySchedule[k] = keySchedule[k - keySize] ^ t\n  }\n\n  var invKeySchedule = []\n  for (var ik = 0; ik < ksRows; ik++) {\n    var ksR = ksRows - ik\n    var tt = keySchedule[ksR - (ik % 4 ? 0 : 4)]\n\n    if (ik < 4 || ksR <= 4) {\n      invKeySchedule[ik] = tt\n    } else {\n      invKeySchedule[ik] =\n        G.INV_SUB_MIX[0][G.SBOX[tt >>> 24]] ^\n        G.INV_SUB_MIX[1][G.SBOX[(tt >>> 16) & 0xff]] ^\n        G.INV_SUB_MIX[2][G.SBOX[(tt >>> 8) & 0xff]] ^\n        G.INV_SUB_MIX[3][G.SBOX[tt & 0xff]]\n    }\n  }\n\n  this._nRounds = nRounds\n  this._keySchedule = keySchedule\n  this._invKeySchedule = invKeySchedule\n}\n\nAES.prototype.encryptBlockRaw = function (M) {\n  M = asUInt32Array(M)\n  return cryptBlock(M, this._keySchedule, G.SUB_MIX, G.SBOX, this._nRounds)\n}\n\nAES.prototype.encryptBlock = function (M) {\n  var out = this.encryptBlockRaw(M)\n  var buf = Buffer.allocUnsafe(16)\n  buf.writeUInt32BE(out[0], 0)\n  buf.writeUInt32BE(out[1], 4)\n  buf.writeUInt32BE(out[2], 8)\n  buf.writeUInt32BE(out[3], 12)\n  return buf\n}\n\nAES.prototype.decryptBlock = function (M) {\n  M = asUInt32Array(M)\n\n  // swap\n  var m1 = M[1]\n  M[1] = M[3]\n  M[3] = m1\n\n  var out = cryptBlock(M, this._invKeySchedule, G.INV_SUB_MIX, G.INV_SBOX, this._nRounds)\n  var buf = Buffer.allocUnsafe(16)\n  buf.writeUInt32BE(out[0], 0)\n  buf.writeUInt32BE(out[3], 4)\n  buf.writeUInt32BE(out[2], 8)\n  buf.writeUInt32BE(out[1], 12)\n  return buf\n}\n\nAES.prototype.scrub = function () {\n  scrubVec(this._keySchedule)\n  scrubVec(this._invKeySchedule)\n  scrubVec(this._key)\n}\n\nmodule.exports.AES = AES\n","var aes = require('./aes')\nvar Buffer = require('safe-buffer').Buffer\nvar Transform = require('cipher-base')\nvar inherits = require('inherits')\nvar GHASH = require('./ghash')\nvar xor = require('buffer-xor')\nvar incr32 = require('./incr32')\n\nfunction xorTest (a, b) {\n  var out = 0\n  if (a.length !== b.length) out++\n\n  var len = Math.min(a.length, b.length)\n  for (var i = 0; i < len; ++i) {\n    out += (a[i] ^ b[i])\n  }\n\n  return out\n}\n\nfunction calcIv (self, iv, ck) {\n  if (iv.length === 12) {\n    self._finID = Buffer.concat([iv, Buffer.from([0, 0, 0, 1])])\n    return Buffer.concat([iv, Buffer.from([0, 0, 0, 2])])\n  }\n  var ghash = new GHASH(ck)\n  var len = iv.length\n  var toPad = len % 16\n  ghash.update(iv)\n  if (toPad) {\n    toPad = 16 - toPad\n    ghash.update(Buffer.alloc(toPad, 0))\n  }\n  ghash.update(Buffer.alloc(8, 0))\n  var ivBits = len * 8\n  var tail = Buffer.alloc(8)\n  tail.writeUIntBE(ivBits, 0, 8)\n  ghash.update(tail)\n  self._finID = ghash.state\n  var out = Buffer.from(self._finID)\n  incr32(out)\n  return out\n}\nfunction StreamCipher (mode, key, iv, decrypt) {\n  Transform.call(this)\n\n  var h = Buffer.alloc(4, 0)\n\n  this._cipher = new aes.AES(key)\n  var ck = this._cipher.encryptBlock(h)\n  this._ghash = new GHASH(ck)\n  iv = calcIv(this, iv, ck)\n\n  this._prev = Buffer.from(iv)\n  this._cache = Buffer.allocUnsafe(0)\n  this._secCache = Buffer.allocUnsafe(0)\n  this._decrypt = decrypt\n  this._alen = 0\n  this._len = 0\n  this._mode = mode\n\n  this._authTag = null\n  this._called = false\n}\n\ninherits(StreamCipher, Transform)\n\nStreamCipher.prototype._update = function (chunk) {\n  if (!this._called && this._alen) {\n    var rump = 16 - (this._alen % 16)\n    if (rump < 16) {\n      rump = Buffer.alloc(rump, 0)\n      this._ghash.update(rump)\n    }\n  }\n\n  this._called = true\n  var out = this._mode.encrypt(this, chunk)\n  if (this._decrypt) {\n    this._ghash.update(chunk)\n  } else {\n    this._ghash.update(out)\n  }\n  this._len += chunk.length\n  return out\n}\n\nStreamCipher.prototype._final = function () {\n  if (this._decrypt && !this._authTag) throw new Error('Unsupported state or unable to authenticate data')\n\n  var tag = xor(this._ghash.final(this._alen * 8, this._len * 8), this._cipher.encryptBlock(this._finID))\n  if (this._decrypt && xorTest(tag, this._authTag)) throw new Error('Unsupported state or unable to authenticate data')\n\n  this._authTag = tag\n  this._cipher.scrub()\n}\n\nStreamCipher.prototype.getAuthTag = function getAuthTag () {\n  if (this._decrypt || !Buffer.isBuffer(this._authTag)) throw new Error('Attempting to get auth tag in unsupported state')\n\n  return this._authTag\n}\n\nStreamCipher.prototype.setAuthTag = function setAuthTag (tag) {\n  if (!this._decrypt) throw new Error('Attempting to set auth tag in unsupported state')\n\n  this._authTag = tag\n}\n\nStreamCipher.prototype.setAAD = function setAAD (buf) {\n  if (this._called) throw new Error('Attempting to set AAD in unsupported state')\n\n  this._ghash.update(buf)\n  this._alen += buf.length\n}\n\nmodule.exports = StreamCipher\n","var ciphers = require('./encrypter')\nvar deciphers = require('./decrypter')\nvar modes = require('./modes/list.json')\n\nfunction getCiphers () {\n  return Object.keys(modes)\n}\n\nexports.createCipher = exports.Cipher = ciphers.createCipher\nexports.createCipheriv = exports.Cipheriv = ciphers.createCipheriv\nexports.createDecipher = exports.Decipher = deciphers.createDecipher\nexports.createDecipheriv = exports.Decipheriv = deciphers.createDecipheriv\nexports.listCiphers = exports.getCiphers = getCiphers\n","var AuthCipher = require('./authCipher')\nvar Buffer = require('safe-buffer').Buffer\nvar MODES = require('./modes')\nvar StreamCipher = require('./streamCipher')\nvar Transform = require('cipher-base')\nvar aes = require('./aes')\nvar ebtk = require('evp_bytestokey')\nvar inherits = require('inherits')\n\nfunction Decipher (mode, key, iv) {\n  Transform.call(this)\n\n  this._cache = new Splitter()\n  this._last = void 0\n  this._cipher = new aes.AES(key)\n  this._prev = Buffer.from(iv)\n  this._mode = mode\n  this._autopadding = true\n}\n\ninherits(Decipher, Transform)\n\nDecipher.prototype._update = function (data) {\n  this._cache.add(data)\n  var chunk\n  var thing\n  var out = []\n  while ((chunk = this._cache.get(this._autopadding))) {\n    thing = this._mode.decrypt(this, chunk)\n    out.push(thing)\n  }\n  return Buffer.concat(out)\n}\n\nDecipher.prototype._final = function () {\n  var chunk = this._cache.flush()\n  if (this._autopadding) {\n    return unpad(this._mode.decrypt(this, chunk))\n  } else if (chunk) {\n    throw new Error('data not multiple of block length')\n  }\n}\n\nDecipher.prototype.setAutoPadding = function (setTo) {\n  this._autopadding = !!setTo\n  return this\n}\n\nfunction Splitter () {\n  this.cache = Buffer.allocUnsafe(0)\n}\n\nSplitter.prototype.add = function (data) {\n  this.cache = Buffer.concat([this.cache, data])\n}\n\nSplitter.prototype.get = function (autoPadding) {\n  var out\n  if (autoPadding) {\n    if (this.cache.length > 16) {\n      out = this.cache.slice(0, 16)\n      this.cache = this.cache.slice(16)\n      return out\n    }\n  } else {\n    if (this.cache.length >= 16) {\n      out = this.cache.slice(0, 16)\n      this.cache = this.cache.slice(16)\n      return out\n    }\n  }\n\n  return null\n}\n\nSplitter.prototype.flush = function () {\n  if (this.cache.length) return this.cache\n}\n\nfunction unpad (last) {\n  var padded = last[15]\n  if (padded < 1 || padded > 16) {\n    throw new Error('unable to decrypt data')\n  }\n  var i = -1\n  while (++i < padded) {\n    if (last[(i + (16 - padded))] !== padded) {\n      throw new Error('unable to decrypt data')\n    }\n  }\n  if (padded === 16) return\n\n  return last.slice(0, 16 - padded)\n}\n\nfunction createDecipheriv (suite, password, iv) {\n  var config = MODES[suite.toLowerCase()]\n  if (!config) throw new TypeError('invalid suite type')\n\n  if (typeof iv === 'string') iv = Buffer.from(iv)\n  if (config.mode !== 'GCM' && iv.length !== config.iv) throw new TypeError('invalid iv length ' + iv.length)\n\n  if (typeof password === 'string') password = Buffer.from(password)\n  if (password.length !== config.key / 8) throw new TypeError('invalid key length ' + password.length)\n\n  if (config.type === 'stream') {\n    return new StreamCipher(config.module, password, iv, true)\n  } else if (config.type === 'auth') {\n    return new AuthCipher(config.module, password, iv, true)\n  }\n\n  return new Decipher(config.module, password, iv)\n}\n\nfunction createDecipher (suite, password) {\n  var config = MODES[suite.toLowerCase()]\n  if (!config) throw new TypeError('invalid suite type')\n\n  var keys = ebtk(password, false, config.key, config.iv)\n  return createDecipheriv(suite, keys.key, keys.iv)\n}\n\nexports.createDecipher = createDecipher\nexports.createDecipheriv = createDecipheriv\n","var MODES = require('./modes')\nvar AuthCipher = require('./authCipher')\nvar Buffer = require('safe-buffer').Buffer\nvar StreamCipher = require('./streamCipher')\nvar Transform = require('cipher-base')\nvar aes = require('./aes')\nvar ebtk = require('evp_bytestokey')\nvar inherits = require('inherits')\n\nfunction Cipher (mode, key, iv) {\n  Transform.call(this)\n\n  this._cache = new Splitter()\n  this._cipher = new aes.AES(key)\n  this._prev = Buffer.from(iv)\n  this._mode = mode\n  this._autopadding = true\n}\n\ninherits(Cipher, Transform)\n\nCipher.prototype._update = function (data) {\n  this._cache.add(data)\n  var chunk\n  var thing\n  var out = []\n\n  while ((chunk = this._cache.get())) {\n    thing = this._mode.encrypt(this, chunk)\n    out.push(thing)\n  }\n\n  return Buffer.concat(out)\n}\n\nvar PADDING = Buffer.alloc(16, 0x10)\n\nCipher.prototype._final = function () {\n  var chunk = this._cache.flush()\n  if (this._autopadding) {\n    chunk = this._mode.encrypt(this, chunk)\n    this._cipher.scrub()\n    return chunk\n  }\n\n  if (!chunk.equals(PADDING)) {\n    this._cipher.scrub()\n    throw new Error('data not multiple of block length')\n  }\n}\n\nCipher.prototype.setAutoPadding = function (setTo) {\n  this._autopadding = !!setTo\n  return this\n}\n\nfunction Splitter () {\n  this.cache = Buffer.allocUnsafe(0)\n}\n\nSplitter.prototype.add = function (data) {\n  this.cache = Buffer.concat([this.cache, data])\n}\n\nSplitter.prototype.get = function () {\n  if (this.cache.length > 15) {\n    var out = this.cache.slice(0, 16)\n    this.cache = this.cache.slice(16)\n    return out\n  }\n  return null\n}\n\nSplitter.prototype.flush = function () {\n  var len = 16 - this.cache.length\n  var padBuff = Buffer.allocUnsafe(len)\n\n  var i = -1\n  while (++i < len) {\n    padBuff.writeUInt8(len, i)\n  }\n\n  return Buffer.concat([this.cache, padBuff])\n}\n\nfunction createCipheriv (suite, password, iv) {\n  var config = MODES[suite.toLowerCase()]\n  if (!config) throw new TypeError('invalid suite type')\n\n  if (typeof password === 'string') password = Buffer.from(password)\n  if (password.length !== config.key / 8) throw new TypeError('invalid key length ' + password.length)\n\n  if (typeof iv === 'string') iv = Buffer.from(iv)\n  if (config.mode !== 'GCM' && iv.length !== config.iv) throw new TypeError('invalid iv length ' + iv.length)\n\n  if (config.type === 'stream') {\n    return new StreamCipher(config.module, password, iv)\n  } else if (config.type === 'auth') {\n    return new AuthCipher(config.module, password, iv)\n  }\n\n  return new Cipher(config.module, password, iv)\n}\n\nfunction createCipher (suite, password) {\n  var config = MODES[suite.toLowerCase()]\n  if (!config) throw new TypeError('invalid suite type')\n\n  var keys = ebtk(password, false, config.key, config.iv)\n  return createCipheriv(suite, keys.key, keys.iv)\n}\n\nexports.createCipheriv = createCipheriv\nexports.createCipher = createCipher\n","var Buffer = require('safe-buffer').Buffer\nvar ZEROES = Buffer.alloc(16, 0)\n\nfunction toArray (buf) {\n  return [\n    buf.readUInt32BE(0),\n    buf.readUInt32BE(4),\n    buf.readUInt32BE(8),\n    buf.readUInt32BE(12)\n  ]\n}\n\nfunction fromArray (out) {\n  var buf = Buffer.allocUnsafe(16)\n  buf.writeUInt32BE(out[0] >>> 0, 0)\n  buf.writeUInt32BE(out[1] >>> 0, 4)\n  buf.writeUInt32BE(out[2] >>> 0, 8)\n  buf.writeUInt32BE(out[3] >>> 0, 12)\n  return buf\n}\n\nfunction GHASH (key) {\n  this.h = key\n  this.state = Buffer.alloc(16, 0)\n  this.cache = Buffer.allocUnsafe(0)\n}\n\n// from http://bitwiseshiftleft.github.io/sjcl/doc/symbols/src/core_gcm.js.html\n// by Juho Vähä-Herttua\nGHASH.prototype.ghash = function (block) {\n  var i = -1\n  while (++i < block.length) {\n    this.state[i] ^= block[i]\n  }\n  this._multiply()\n}\n\nGHASH.prototype._multiply = function () {\n  var Vi = toArray(this.h)\n  var Zi = [0, 0, 0, 0]\n  var j, xi, lsbVi\n  var i = -1\n  while (++i < 128) {\n    xi = (this.state[~~(i / 8)] & (1 << (7 - (i % 8)))) !== 0\n    if (xi) {\n      // Z_i+1 = Z_i ^ V_i\n      Zi[0] ^= Vi[0]\n      Zi[1] ^= Vi[1]\n      Zi[2] ^= Vi[2]\n      Zi[3] ^= Vi[3]\n    }\n\n    // Store the value of LSB(V_i)\n    lsbVi = (Vi[3] & 1) !== 0\n\n    // V_i+1 = V_i >> 1\n    for (j = 3; j > 0; j--) {\n      Vi[j] = (Vi[j] >>> 1) | ((Vi[j - 1] & 1) << 31)\n    }\n    Vi[0] = Vi[0] >>> 1\n\n    // If LSB(V_i) is 1, V_i+1 = (V_i >> 1) ^ R\n    if (lsbVi) {\n      Vi[0] = Vi[0] ^ (0xe1 << 24)\n    }\n  }\n  this.state = fromArray(Zi)\n}\n\nGHASH.prototype.update = function (buf) {\n  this.cache = Buffer.concat([this.cache, buf])\n  var chunk\n  while (this.cache.length >= 16) {\n    chunk = this.cache.slice(0, 16)\n    this.cache = this.cache.slice(16)\n    this.ghash(chunk)\n  }\n}\n\nGHASH.prototype.final = function (abl, bl) {\n  if (this.cache.length) {\n    this.ghash(Buffer.concat([this.cache, ZEROES], 16))\n  }\n\n  this.ghash(fromArray([0, abl, 0, bl]))\n  return this.state\n}\n\nmodule.exports = GHASH\n","function incr32 (iv) {\n  var len = iv.length\n  var item\n  while (len--) {\n    item = iv.readUInt8(len)\n    if (item === 255) {\n      iv.writeUInt8(0, len)\n    } else {\n      item++\n      iv.writeUInt8(item, len)\n      break\n    }\n  }\n}\nmodule.exports = incr32\n","var xor = require('buffer-xor')\n\nexports.encrypt = function (self, block) {\n  var data = xor(block, self._prev)\n\n  self._prev = self._cipher.encryptBlock(data)\n  return self._prev\n}\n\nexports.decrypt = function (self, block) {\n  var pad = self._prev\n\n  self._prev = block\n  var out = self._cipher.decryptBlock(block)\n\n  return xor(out, pad)\n}\n","var Buffer = require('safe-buffer').Buffer\nvar xor = require('buffer-xor')\n\nfunction encryptStart (self, data, decrypt) {\n  var len = data.length\n  var out = xor(data, self._cache)\n  self._cache = self._cache.slice(len)\n  self._prev = Buffer.concat([self._prev, decrypt ? data : out])\n  return out\n}\n\nexports.encrypt = function (self, data, decrypt) {\n  var out = Buffer.allocUnsafe(0)\n  var len\n\n  while (data.length) {\n    if (self._cache.length === 0) {\n      self._cache = self._cipher.encryptBlock(self._prev)\n      self._prev = Buffer.allocUnsafe(0)\n    }\n\n    if (self._cache.length <= data.length) {\n      len = self._cache.length\n      out = Buffer.concat([out, encryptStart(self, data.slice(0, len), decrypt)])\n      data = data.slice(len)\n    } else {\n      out = Buffer.concat([out, encryptStart(self, data, decrypt)])\n      break\n    }\n  }\n\n  return out\n}\n","var Buffer = require('safe-buffer').Buffer\n\nfunction encryptByte (self, byteParam, decrypt) {\n  var pad\n  var i = -1\n  var len = 8\n  var out = 0\n  var bit, value\n  while (++i < len) {\n    pad = self._cipher.encryptBlock(self._prev)\n    bit = (byteParam & (1 << (7 - i))) ? 0x80 : 0\n    value = pad[0] ^ bit\n    out += ((value & 0x80) >> (i % 8))\n    self._prev = shiftIn(self._prev, decrypt ? bit : value)\n  }\n  return out\n}\n\nfunction shiftIn (buffer, value) {\n  var len = buffer.length\n  var i = -1\n  var out = Buffer.allocUnsafe(buffer.length)\n  buffer = Buffer.concat([buffer, Buffer.from([value])])\n\n  while (++i < len) {\n    out[i] = buffer[i] << 1 | buffer[i + 1] >> (7)\n  }\n\n  return out\n}\n\nexports.encrypt = function (self, chunk, decrypt) {\n  var len = chunk.length\n  var out = Buffer.allocUnsafe(len)\n  var i = -1\n\n  while (++i < len) {\n    out[i] = encryptByte(self, chunk[i], decrypt)\n  }\n\n  return out\n}\n","var Buffer = require('safe-buffer').Buffer\n\nfunction encryptByte (self, byteParam, decrypt) {\n  var pad = self._cipher.encryptBlock(self._prev)\n  var out = pad[0] ^ byteParam\n\n  self._prev = Buffer.concat([\n    self._prev.slice(1),\n    Buffer.from([decrypt ? byteParam : out])\n  ])\n\n  return out\n}\n\nexports.encrypt = function (self, chunk, decrypt) {\n  var len = chunk.length\n  var out = Buffer.allocUnsafe(len)\n  var i = -1\n\n  while (++i < len) {\n    out[i] = encryptByte(self, chunk[i], decrypt)\n  }\n\n  return out\n}\n","var xor = require('buffer-xor')\nvar Buffer = require('safe-buffer').Buffer\nvar incr32 = require('../incr32')\n\nfunction getBlock (self) {\n  var out = self._cipher.encryptBlockRaw(self._prev)\n  incr32(self._prev)\n  return out\n}\n\nvar blockSize = 16\nexports.encrypt = function (self, chunk) {\n  var chunkNum = Math.ceil(chunk.length / blockSize)\n  var start = self._cache.length\n  self._cache = Buffer.concat([\n    self._cache,\n    Buffer.allocUnsafe(chunkNum * blockSize)\n  ])\n  for (var i = 0; i < chunkNum; i++) {\n    var out = getBlock(self)\n    var offset = start + i * blockSize\n    self._cache.writeUInt32BE(out[0], offset + 0)\n    self._cache.writeUInt32BE(out[1], offset + 4)\n    self._cache.writeUInt32BE(out[2], offset + 8)\n    self._cache.writeUInt32BE(out[3], offset + 12)\n  }\n  var pad = self._cache.slice(0, chunk.length)\n  self._cache = self._cache.slice(chunk.length)\n  return xor(chunk, pad)\n}\n","exports.encrypt = function (self, block) {\n  return self._cipher.encryptBlock(block)\n}\n\nexports.decrypt = function (self, block) {\n  return self._cipher.decryptBlock(block)\n}\n","var modeModules = {\n  ECB: require('./ecb'),\n  CBC: require('./cbc'),\n  CFB: require('./cfb'),\n  CFB8: require('./cfb8'),\n  CFB1: require('./cfb1'),\n  OFB: require('./ofb'),\n  CTR: require('./ctr'),\n  GCM: require('./ctr')\n}\n\nvar modes = require('./list.json')\n\nfor (var key in modes) {\n  modes[key].module = modeModules[modes[key].mode]\n}\n\nmodule.exports = modes\n","var xor = require('buffer-xor')\n\nfunction getBlock (self) {\n  self._prev = self._cipher.encryptBlock(self._prev)\n  return self._prev\n}\n\nexports.encrypt = function (self, chunk) {\n  while (self._cache.length < chunk.length) {\n    self._cache = Buffer.concat([self._cache, getBlock(self)])\n  }\n\n  var pad = self._cache.slice(0, chunk.length)\n  self._cache = self._cache.slice(chunk.length)\n  return xor(chunk, pad)\n}\n","var aes = require('./aes')\nvar Buffer = require('safe-buffer').Buffer\nvar Transform = require('cipher-base')\nvar inherits = require('inherits')\n\nfunction StreamCipher (mode, key, iv, decrypt) {\n  Transform.call(this)\n\n  this._cipher = new aes.AES(key)\n  this._prev = Buffer.from(iv)\n  this._cache = Buffer.allocUnsafe(0)\n  this._secCache = Buffer.allocUnsafe(0)\n  this._decrypt = decrypt\n  this._mode = mode\n}\n\ninherits(StreamCipher, Transform)\n\nStreamCipher.prototype._update = function (chunk) {\n  return this._mode.encrypt(this, chunk, this._decrypt)\n}\n\nStreamCipher.prototype._final = function () {\n  this._cipher.scrub()\n}\n\nmodule.exports = StreamCipher\n","var DES = require('browserify-des')\nvar aes = require('browserify-aes/browser')\nvar aesModes = require('browserify-aes/modes')\nvar desModes = require('browserify-des/modes')\nvar ebtk = require('evp_bytestokey')\n\nfunction createCipher (suite, password) {\n  suite = suite.toLowerCase()\n\n  var keyLen, ivLen\n  if (aesModes[suite]) {\n    keyLen = aesModes[suite].key\n    ivLen = aesModes[suite].iv\n  } else if (desModes[suite]) {\n    keyLen = desModes[suite].key * 8\n    ivLen = desModes[suite].iv\n  } else {\n    throw new TypeError('invalid suite type')\n  }\n\n  var keys = ebtk(password, false, keyLen, ivLen)\n  return createCipheriv(suite, keys.key, keys.iv)\n}\n\nfunction createDecipher (suite, password) {\n  suite = suite.toLowerCase()\n\n  var keyLen, ivLen\n  if (aesModes[suite]) {\n    keyLen = aesModes[suite].key\n    ivLen = aesModes[suite].iv\n  } else if (desModes[suite]) {\n    keyLen = desModes[suite].key * 8\n    ivLen = desModes[suite].iv\n  } else {\n    throw new TypeError('invalid suite type')\n  }\n\n  var keys = ebtk(password, false, keyLen, ivLen)\n  return createDecipheriv(suite, keys.key, keys.iv)\n}\n\nfunction createCipheriv (suite, key, iv) {\n  suite = suite.toLowerCase()\n  if (aesModes[suite]) return aes.createCipheriv(suite, key, iv)\n  if (desModes[suite]) return new DES({ key: key, iv: iv, mode: suite })\n\n  throw new TypeError('invalid suite type')\n}\n\nfunction createDecipheriv (suite, key, iv) {\n  suite = suite.toLowerCase()\n  if (aesModes[suite]) return aes.createDecipheriv(suite, key, iv)\n  if (desModes[suite]) return new DES({ key: key, iv: iv, mode: suite, decrypt: true })\n\n  throw new TypeError('invalid suite type')\n}\n\nfunction getCiphers () {\n  return Object.keys(desModes).concat(aes.getCiphers())\n}\n\nexports.createCipher = exports.Cipher = createCipher\nexports.createCipheriv = exports.Cipheriv = createCipheriv\nexports.createDecipher = exports.Decipher = createDecipher\nexports.createDecipheriv = exports.Decipheriv = createDecipheriv\nexports.listCiphers = exports.getCiphers = getCiphers\n","var CipherBase = require('cipher-base')\nvar des = require('des.js')\nvar inherits = require('inherits')\nvar Buffer = require('safe-buffer').Buffer\n\nvar modes = {\n  'des-ede3-cbc': des.CBC.instantiate(des.EDE),\n  'des-ede3': des.EDE,\n  'des-ede-cbc': des.CBC.instantiate(des.EDE),\n  'des-ede': des.EDE,\n  'des-cbc': des.CBC.instantiate(des.DES),\n  'des-ecb': des.DES\n}\nmodes.des = modes['des-cbc']\nmodes.des3 = modes['des-ede3-cbc']\nmodule.exports = DES\ninherits(DES, CipherBase)\nfunction DES (opts) {\n  CipherBase.call(this)\n  var modeName = opts.mode.toLowerCase()\n  var mode = modes[modeName]\n  var type\n  if (opts.decrypt) {\n    type = 'decrypt'\n  } else {\n    type = 'encrypt'\n  }\n  var key = opts.key\n  if (!Buffer.isBuffer(key)) {\n    key = Buffer.from(key)\n  }\n  if (modeName === 'des-ede' || modeName === 'des-ede-cbc') {\n    key = Buffer.concat([key, key.slice(0, 8)])\n  }\n  var iv = opts.iv\n  if (!Buffer.isBuffer(iv)) {\n    iv = Buffer.from(iv)\n  }\n  this._des = mode.create({\n    key: key,\n    iv: iv,\n    type: type\n  })\n}\nDES.prototype._update = function (data) {\n  return Buffer.from(this._des.update(data))\n}\nDES.prototype._final = function () {\n  return Buffer.from(this._des.final())\n}\n","exports['des-ecb'] = {\n  key: 8,\n  iv: 0\n}\nexports['des-cbc'] = exports.des = {\n  key: 8,\n  iv: 8\n}\nexports['des-ede3-cbc'] = exports.des3 = {\n  key: 24,\n  iv: 8\n}\nexports['des-ede3'] = {\n  key: 24,\n  iv: 0\n}\nexports['des-ede-cbc'] = {\n  key: 16,\n  iv: 8\n}\nexports['des-ede'] = {\n  key: 16,\n  iv: 0\n}\n","'use strict';\n\nvar BN = require('bn.js');\nvar randomBytes = require('randombytes');\nvar Buffer = require('safe-buffer').Buffer;\n\nfunction getr(priv) {\n\tvar len = priv.modulus.byteLength();\n\tvar r;\n\tdo {\n\t\tr = new BN(randomBytes(len));\n\t} while (r.cmp(priv.modulus) >= 0 || !r.umod(priv.prime1) || !r.umod(priv.prime2));\n\treturn r;\n}\n\nfunction blind(priv) {\n\tvar r = getr(priv);\n\tvar blinder = r.toRed(BN.mont(priv.modulus)).redPow(new BN(priv.publicExponent)).fromRed();\n\treturn { blinder: blinder, unblinder: r.invm(priv.modulus) };\n}\n\nfunction crt(msg, priv) {\n\tvar blinds = blind(priv);\n\tvar len = priv.modulus.byteLength();\n\tvar blinded = new BN(msg).mul(blinds.blinder).umod(priv.modulus);\n\tvar c1 = blinded.toRed(BN.mont(priv.prime1));\n\tvar c2 = blinded.toRed(BN.mont(priv.prime2));\n\tvar qinv = priv.coefficient;\n\tvar p = priv.prime1;\n\tvar q = priv.prime2;\n\tvar m1 = c1.redPow(priv.exponent1).fromRed();\n\tvar m2 = c2.redPow(priv.exponent2).fromRed();\n\tvar h = m1.isub(m2).imul(qinv).umod(p).imul(q);\n\treturn m2.iadd(h).imul(blinds.unblinder).umod(priv.modulus).toArrayLike(Buffer, 'be', len);\n}\ncrt.getr = getr;\n\nmodule.exports = crt;\n","'use strict';\n\nmodule.exports = require('./browser/algorithms.json');\n","'use strict';\n\nvar Buffer = require('safe-buffer').Buffer;\nvar createHash = require('create-hash');\nvar stream = require('readable-stream');\nvar inherits = require('inherits');\nvar sign = require('./sign');\nvar verify = require('./verify');\n\nvar algorithms = require('./algorithms.json');\nObject.keys(algorithms).forEach(function (key) {\n  algorithms[key].id = Buffer.from(algorithms[key].id, 'hex');\n  algorithms[key.toLowerCase()] = algorithms[key];\n});\n\nfunction Sign(algorithm) {\n  stream.Writable.call(this);\n\n  var data = algorithms[algorithm];\n  if (!data) { throw new Error('Unknown message digest'); }\n\n  this._hashType = data.hash;\n  this._hash = createHash(data.hash);\n  this._tag = data.id;\n  this._signType = data.sign;\n}\ninherits(Sign, stream.Writable);\n\nSign.prototype._write = function _write(data, _, done) {\n  this._hash.update(data);\n  done();\n};\n\nSign.prototype.update = function update(data, enc) {\n  this._hash.update(typeof data === 'string' ? Buffer.from(data, enc) : data);\n\n  return this;\n};\n\nSign.prototype.sign = function signMethod(key, enc) {\n  this.end();\n  var hash = this._hash.digest();\n  var sig = sign(hash, key, this._hashType, this._signType, this._tag);\n\n  return enc ? sig.toString(enc) : sig;\n};\n\nfunction Verify(algorithm) {\n  stream.Writable.call(this);\n\n  var data = algorithms[algorithm];\n  if (!data) { throw new Error('Unknown message digest'); }\n\n  this._hash = createHash(data.hash);\n  this._tag = data.id;\n  this._signType = data.sign;\n}\ninherits(Verify, stream.Writable);\n\nVerify.prototype._write = function _write(data, _, done) {\n  this._hash.update(data);\n  done();\n};\n\nVerify.prototype.update = function update(data, enc) {\n  this._hash.update(typeof data === 'string' ? Buffer.from(data, enc) : data);\n\n  return this;\n};\n\nVerify.prototype.verify = function verifyMethod(key, sig, enc) {\n  var sigBuffer = typeof sig === 'string' ? Buffer.from(sig, enc) : sig;\n\n  this.end();\n  var hash = this._hash.digest();\n  return verify(sigBuffer, hash, key, this._signType, this._tag);\n};\n\nfunction createSign(algorithm) {\n  return new Sign(algorithm);\n}\n\nfunction createVerify(algorithm) {\n  return new Verify(algorithm);\n}\n\nmodule.exports = {\n  Sign: createSign,\n  Verify: createVerify,\n  createSign: createSign,\n  createVerify: createVerify\n};\n","'use strict';\n\n// much of this based on https://github.com/indutny/self-signed/blob/gh-pages/lib/rsa.js\nvar Buffer = require('safe-buffer').Buffer;\nvar createHmac = require('create-hmac');\nvar crt = require('browserify-rsa');\nvar EC = require('elliptic').ec;\nvar BN = require('bn.js');\nvar parseKeys = require('parse-asn1');\nvar curves = require('./curves.json');\n\nvar RSA_PKCS1_PADDING = 1;\n\nfunction sign(hash, key, hashType, signType, tag) {\n  var priv = parseKeys(key);\n  if (priv.curve) {\n    // rsa keys can be interpreted as ecdsa ones in openssl\n    if (signType !== 'ecdsa' && signType !== 'ecdsa/rsa') { throw new Error('wrong private key type'); }\n    return ecSign(hash, priv);\n  } else if (priv.type === 'dsa') {\n    if (signType !== 'dsa') { throw new Error('wrong private key type'); }\n    return dsaSign(hash, priv, hashType);\n  }\n  if (signType !== 'rsa' && signType !== 'ecdsa/rsa') { throw new Error('wrong private key type'); }\n  if (key.padding !== undefined && key.padding !== RSA_PKCS1_PADDING) { throw new Error('illegal or unsupported padding mode'); }\n\n  hash = Buffer.concat([tag, hash]);\n  var len = priv.modulus.byteLength();\n  var pad = [0, 1];\n  while (hash.length + pad.length + 1 < len) { pad.push(0xff); }\n  pad.push(0x00);\n  var i = -1;\n  while (++i < hash.length) { pad.push(hash[i]); }\n\n  var out = crt(pad, priv);\n  return out;\n}\n\nfunction ecSign(hash, priv) {\n  var curveId = curves[priv.curve.join('.')];\n  if (!curveId) { throw new Error('unknown curve ' + priv.curve.join('.')); }\n\n  var curve = new EC(curveId);\n  var key = curve.keyFromPrivate(priv.privateKey);\n  var out = key.sign(hash);\n\n  return Buffer.from(out.toDER());\n}\n\nfunction dsaSign(hash, priv, algo) {\n  var x = priv.params.priv_key;\n  var p = priv.params.p;\n  var q = priv.params.q;\n  var g = priv.params.g;\n  var r = new BN(0);\n  var k;\n  var H = bits2int(hash, q).mod(q);\n  var s = false;\n  var kv = getKey(x, q, hash, algo);\n  while (s === false) {\n    k = makeKey(q, kv, algo);\n    r = makeR(g, k, p, q);\n    s = k.invm(q).imul(H.add(x.mul(r))).mod(q);\n    if (s.cmpn(0) === 0) {\n      s = false;\n      r = new BN(0);\n    }\n  }\n  return toDER(r, s);\n}\n\nfunction toDER(r, s) {\n  r = r.toArray();\n  s = s.toArray();\n\n  // Pad values\n  if (r[0] & 0x80) { r = [0].concat(r); }\n  if (s[0] & 0x80) { s = [0].concat(s); }\n\n  var total = r.length + s.length + 4;\n  var res = [\n    0x30, total, 0x02, r.length\n  ];\n  res = res.concat(r, [0x02, s.length], s);\n  return Buffer.from(res);\n}\n\nfunction getKey(x, q, hash, algo) {\n  x = Buffer.from(x.toArray());\n  if (x.length < q.byteLength()) {\n    var zeros = Buffer.alloc(q.byteLength() - x.length);\n    x = Buffer.concat([zeros, x]);\n  }\n  var hlen = hash.length;\n  var hbits = bits2octets(hash, q);\n  var v = Buffer.alloc(hlen);\n  v.fill(1);\n  var k = Buffer.alloc(hlen);\n  k = createHmac(algo, k).update(v).update(Buffer.from([0])).update(x).update(hbits).digest();\n  v = createHmac(algo, k).update(v).digest();\n  k = createHmac(algo, k).update(v).update(Buffer.from([1])).update(x).update(hbits).digest();\n  v = createHmac(algo, k).update(v).digest();\n  return { k: k, v: v };\n}\n\nfunction bits2int(obits, q) {\n  var bits = new BN(obits);\n  var shift = (obits.length << 3) - q.bitLength();\n  if (shift > 0) { bits.ishrn(shift); }\n  return bits;\n}\n\nfunction bits2octets(bits, q) {\n  bits = bits2int(bits, q);\n  bits = bits.mod(q);\n  var out = Buffer.from(bits.toArray());\n  if (out.length < q.byteLength()) {\n    var zeros = Buffer.alloc(q.byteLength() - out.length);\n    out = Buffer.concat([zeros, out]);\n  }\n  return out;\n}\n\nfunction makeKey(q, kv, algo) {\n  var t;\n  var k;\n\n  do {\n    t = Buffer.alloc(0);\n\n    while (t.length * 8 < q.bitLength()) {\n      kv.v = createHmac(algo, kv.k).update(kv.v).digest();\n      t = Buffer.concat([t, kv.v]);\n    }\n\n    k = bits2int(t, q);\n    kv.k = createHmac(algo, kv.k).update(kv.v).update(Buffer.from([0])).digest();\n    kv.v = createHmac(algo, kv.k).update(kv.v).digest();\n  } while (k.cmp(q) !== -1);\n\n  return k;\n}\n\nfunction makeR(g, k, p, q) {\n  return g.toRed(BN.mont(p)).redPow(k).fromRed().mod(q);\n}\n\nmodule.exports = sign;\nmodule.exports.getKey = getKey;\nmodule.exports.makeKey = makeKey;\n","'use strict';\n\n// much of this based on https://github.com/indutny/self-signed/blob/gh-pages/lib/rsa.js\nvar Buffer = require('safe-buffer').Buffer;\nvar BN = require('bn.js');\nvar EC = require('elliptic').ec;\nvar parseKeys = require('parse-asn1');\nvar curves = require('./curves.json');\n\nfunction verify(sig, hash, key, signType, tag) {\n  var pub = parseKeys(key);\n  if (pub.type === 'ec') {\n    // rsa keys can be interpreted as ecdsa ones in openssl\n    if (signType !== 'ecdsa' && signType !== 'ecdsa/rsa') { throw new Error('wrong public key type'); }\n    return ecVerify(sig, hash, pub);\n  } else if (pub.type === 'dsa') {\n    if (signType !== 'dsa') { throw new Error('wrong public key type'); }\n    return dsaVerify(sig, hash, pub);\n  }\n  if (signType !== 'rsa' && signType !== 'ecdsa/rsa') { throw new Error('wrong public key type'); }\n\n  hash = Buffer.concat([tag, hash]);\n  var len = pub.modulus.byteLength();\n  var pad = [1];\n  var padNum = 0;\n  while (hash.length + pad.length + 2 < len) {\n    pad.push(0xff);\n    padNum += 1;\n  }\n  pad.push(0x00);\n  var i = -1;\n  while (++i < hash.length) {\n    pad.push(hash[i]);\n  }\n  pad = Buffer.from(pad);\n  var red = BN.mont(pub.modulus);\n  sig = new BN(sig).toRed(red);\n\n  sig = sig.redPow(new BN(pub.publicExponent));\n  sig = Buffer.from(sig.fromRed().toArray());\n  var out = padNum < 8 ? 1 : 0;\n  len = Math.min(sig.length, pad.length);\n  if (sig.length !== pad.length) { out = 1; }\n\n  i = -1;\n  while (++i < len) { out |= sig[i] ^ pad[i]; }\n  return out === 0;\n}\n\nfunction ecVerify(sig, hash, pub) {\n  var curveId = curves[pub.data.algorithm.curve.join('.')];\n  if (!curveId) { throw new Error('unknown curve ' + pub.data.algorithm.curve.join('.')); }\n\n  var curve = new EC(curveId);\n  var pubkey = pub.data.subjectPrivateKey.data;\n\n  return curve.verify(hash, sig, pubkey);\n}\n\nfunction dsaVerify(sig, hash, pub) {\n  var p = pub.data.p;\n  var q = pub.data.q;\n  var g = pub.data.g;\n  var y = pub.data.pub_key;\n  var unpacked = parseKeys.signature.decode(sig, 'der');\n  var s = unpacked.s;\n  var r = unpacked.r;\n  checkValue(s, q);\n  checkValue(r, q);\n  var montp = BN.mont(p);\n  var w = s.invm(q);\n  var v = g.toRed(montp)\n    .redPow(new BN(hash).mul(w).mod(q))\n    .fromRed()\n    .mul(y.toRed(montp).redPow(r.mul(w).mod(q)).fromRed())\n    .mod(p)\n    .mod(q);\n  return v.cmp(r) === 0;\n}\n\nfunction checkValue(b, q) {\n  if (b.cmpn(0) <= 0) { throw new Error('invalid sig'); }\n  if (b.cmp(q) >= 0) { throw new Error('invalid sig'); }\n}\n\nmodule.exports = verify;\n","module.exports = function xor (a, b) {\n  var length = Math.min(a.length, b.length)\n  var buffer = new Buffer(length)\n\n  for (var i = 0; i < length; ++i) {\n    buffer[i] = a[i] ^ b[i]\n  }\n\n  return buffer\n}\n","/*!\n * The buffer module from node.js, for the browser.\n *\n * @author   Feross Aboukhadijeh <https://feross.org>\n * @license  MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nvar base64 = require('base64-js')\nvar ieee754 = require('ieee754')\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\nvar K_MAX_LENGTH = 0x7fffffff\nexports.kMaxLength = K_MAX_LENGTH\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n *   === true    Use Uint8Array implementation (fastest)\n *   === false   Print warning and recommend using `buffer` v4.x which has an Object\n *               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 * We report that the browser does not support typed arrays if the are not subclassable\n * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`\n * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support\n * for __proto__ and has a buggy typed array implementation.\n */\nBuffer.TYPED_ARRAY_SUPPORT = typedArraySupport()\n\nif (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&\n    typeof console.error === 'function') {\n  console.error(\n    'This browser lacks typed array (Uint8Array) support which is required by ' +\n    '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'\n  )\n}\n\nfunction typedArraySupport () {\n  // Can typed array instances can be augmented?\n  try {\n    var arr = new Uint8Array(1)\n    arr.__proto__ = { __proto__: Uint8Array.prototype, foo: function () { return 42 } }\n    return arr.foo() === 42\n  } catch (e) {\n    return false\n  }\n}\n\nObject.defineProperty(Buffer.prototype, 'parent', {\n  enumerable: true,\n  get: function () {\n    if (!Buffer.isBuffer(this)) return undefined\n    return this.buffer\n  }\n})\n\nObject.defineProperty(Buffer.prototype, 'offset', {\n  enumerable: true,\n  get: function () {\n    if (!Buffer.isBuffer(this)) return undefined\n    return this.byteOffset\n  }\n})\n\nfunction createBuffer (length) {\n  if (length > K_MAX_LENGTH) {\n    throw new RangeError('The value \"' + length + '\" is invalid for option \"size\"')\n  }\n  // Return an augmented `Uint8Array` instance\n  var buf = new Uint8Array(length)\n  buf.__proto__ = Buffer.prototype\n  return buf\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  // Common case.\n  if (typeof arg === 'number') {\n    if (typeof encodingOrOffset === 'string') {\n      throw new TypeError(\n        'The \"string\" argument must be of type string. Received type number'\n      )\n    }\n    return allocUnsafe(arg)\n  }\n  return from(arg, encodingOrOffset, length)\n}\n\n// Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97\nif (typeof Symbol !== 'undefined' && Symbol.species != null &&\n    Buffer[Symbol.species] === Buffer) {\n  Object.defineProperty(Buffer, Symbol.species, {\n    value: null,\n    configurable: true,\n    enumerable: false,\n    writable: false\n  })\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\nfunction from (value, encodingOrOffset, length) {\n  if (typeof value === 'string') {\n    return fromString(value, encodingOrOffset)\n  }\n\n  if (ArrayBuffer.isView(value)) {\n    return fromArrayLike(value)\n  }\n\n  if (value == null) {\n    throw TypeError(\n      'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n      'or Array-like Object. Received type ' + (typeof value)\n    )\n  }\n\n  if (isInstance(value, ArrayBuffer) ||\n      (value && isInstance(value.buffer, ArrayBuffer))) {\n    return fromArrayBuffer(value, encodingOrOffset, length)\n  }\n\n  if (typeof value === 'number') {\n    throw new TypeError(\n      'The \"value\" argument must not be of type number. Received type number'\n    )\n  }\n\n  var valueOf = value.valueOf && value.valueOf()\n  if (valueOf != null && valueOf !== value) {\n    return Buffer.from(valueOf, encodingOrOffset, length)\n  }\n\n  var b = fromObject(value)\n  if (b) return b\n\n  if (typeof Symbol !== 'undefined' && Symbol.toPrimitive != null &&\n      typeof value[Symbol.toPrimitive] === 'function') {\n    return Buffer.from(\n      value[Symbol.toPrimitive]('string'), encodingOrOffset, length\n    )\n  }\n\n  throw new TypeError(\n    'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n    'or Array-like Object. Received type ' + (typeof value)\n  )\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(value, encodingOrOffset, length)\n}\n\n// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:\n// https://github.com/feross/buffer/pull/148\nBuffer.prototype.__proto__ = Uint8Array.prototype\nBuffer.__proto__ = Uint8Array\n\nfunction assertSize (size) {\n  if (typeof size !== 'number') {\n    throw new TypeError('\"size\" argument must be of type number')\n  } else if (size < 0) {\n    throw new RangeError('The value \"' + size + '\" is invalid for option \"size\"')\n  }\n}\n\nfunction alloc (size, fill, encoding) {\n  assertSize(size)\n  if (size <= 0) {\n    return createBuffer(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(size).fill(fill, encoding)\n      : createBuffer(size).fill(fill)\n  }\n  return createBuffer(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(size, fill, encoding)\n}\n\nfunction allocUnsafe (size) {\n  assertSize(size)\n  return createBuffer(size < 0 ? 0 : checked(size) | 0)\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(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(size)\n}\n\nfunction fromString (string, encoding) {\n  if (typeof encoding !== 'string' || encoding === '') {\n    encoding = 'utf8'\n  }\n\n  if (!Buffer.isEncoding(encoding)) {\n    throw new TypeError('Unknown encoding: ' + encoding)\n  }\n\n  var length = byteLength(string, encoding) | 0\n  var buf = createBuffer(length)\n\n  var actual = buf.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    buf = buf.slice(0, actual)\n  }\n\n  return buf\n}\n\nfunction fromArrayLike (array) {\n  var length = array.length < 0 ? 0 : checked(array.length) | 0\n  var buf = createBuffer(length)\n  for (var i = 0; i < length; i += 1) {\n    buf[i] = array[i] & 255\n  }\n  return buf\n}\n\nfunction fromArrayBuffer (array, byteOffset, length) {\n  if (byteOffset < 0 || array.byteLength < byteOffset) {\n    throw new RangeError('\"offset\" is outside of buffer bounds')\n  }\n\n  if (array.byteLength < byteOffset + (length || 0)) {\n    throw new RangeError('\"length\" is outside of buffer bounds')\n  }\n\n  var buf\n  if (byteOffset === undefined && length === undefined) {\n    buf = new Uint8Array(array)\n  } else if (length === undefined) {\n    buf = new Uint8Array(array, byteOffset)\n  } else {\n    buf = new Uint8Array(array, byteOffset, length)\n  }\n\n  // Return an augmented `Uint8Array` instance\n  buf.__proto__ = Buffer.prototype\n  return buf\n}\n\nfunction fromObject (obj) {\n  if (Buffer.isBuffer(obj)) {\n    var len = checked(obj.length) | 0\n    var buf = createBuffer(len)\n\n    if (buf.length === 0) {\n      return buf\n    }\n\n    obj.copy(buf, 0, 0, len)\n    return buf\n  }\n\n  if (obj.length !== undefined) {\n    if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) {\n      return createBuffer(0)\n    }\n    return fromArrayLike(obj)\n  }\n\n  if (obj.type === 'Buffer' && Array.isArray(obj.data)) {\n    return fromArrayLike(obj.data)\n  }\n}\n\nfunction checked (length) {\n  // Note: cannot use `length < K_MAX_LENGTH` here because that fails when\n  // length is NaN (which is otherwise coerced to zero.)\n  if (length >= K_MAX_LENGTH) {\n    throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n                         'size: 0x' + K_MAX_LENGTH.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 === true &&\n    b !== Buffer.prototype // so Buffer.isBuffer(Buffer.prototype) will be false\n}\n\nBuffer.compare = function compare (a, b) {\n  if (isInstance(a, Uint8Array)) a = Buffer.from(a, a.offset, a.byteLength)\n  if (isInstance(b, Uint8Array)) b = Buffer.from(b, b.offset, b.byteLength)\n  if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n    throw new TypeError(\n      'The \"buf1\", \"buf2\" arguments must be one of type Buffer or Uint8Array'\n    )\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 (!Array.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 (isInstance(buf, Uint8Array)) {\n      buf = Buffer.from(buf)\n    }\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 (ArrayBuffer.isView(string) || isInstance(string, ArrayBuffer)) {\n    return string.byteLength\n  }\n  if (typeof string !== 'string') {\n    throw new TypeError(\n      'The \"string\" argument must be one of type string, Buffer, or ArrayBuffer. ' +\n      'Received type ' + typeof string\n    )\n  }\n\n  var len = string.length\n  var mustMatch = (arguments.length > 2 && arguments[2] === true)\n  if (!mustMatch && 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        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) {\n          return mustMatch ? -1 : utf8ToBytes(string).length // assume utf8\n        }\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// This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)\n// to detect a Buffer instance. It's not possible to use `instanceof Buffer`\n// reliably in a browserify context because there could be multiple different\n// copies of the 'buffer' package in use. This method works even for Buffer\n// instances that were created from another copy of the `buffer` package.\n// See: https://github.com/feross/buffer/issues/154\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\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.toLocaleString = Buffer.prototype.toString\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  str = this.toString('hex', 0, max).replace(/(.{2})/g, '$1 ').trim()\n  if (this.length > max) str += ' ... '\n  return '<Buffer ' + str + '>'\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n  if (isInstance(target, Uint8Array)) {\n    target = Buffer.from(target, target.offset, target.byteLength)\n  }\n  if (!Buffer.isBuffer(target)) {\n    throw new TypeError(\n      'The \"target\" argument must be one of type Buffer or Uint8Array. ' +\n      'Received type ' + (typeof target)\n    )\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 (numberIsNaN(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 (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  var strLen = string.length\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 (numberIsNaN(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  } 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 = this.subarray(start, end)\n  // Return an augmented `Uint8Array` instance\n  newBuf.__proto__ = Buffer.prototype\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  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 1, this.length)\n  return this[offset]\n}\n\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n  offset = offset >>> 0\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  offset = offset >>> 0\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  offset = offset >>> 0\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  offset = offset >>> 0\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  offset = offset >>> 0\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  offset = offset >>> 0\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  offset = offset >>> 0\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  offset = offset >>> 0\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  offset = offset >>> 0\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  offset = offset >>> 0\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  offset = offset >>> 0\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  offset = offset >>> 0\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  offset = offset >>> 0\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  this[offset] = (value & 0xff)\n  return offset + 1\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  this[offset] = (value & 0xff)\n  this[offset + 1] = (value >>> 8)\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  this[offset] = (value >>> 8)\n  this[offset + 1] = (value & 0xff)\n  return offset + 2\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  this[offset + 3] = (value >>> 24)\n  this[offset + 2] = (value >>> 16)\n  this[offset + 1] = (value >>> 8)\n  this[offset] = (value & 0xff)\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  this[offset] = (value >>> 24)\n  this[offset + 1] = (value >>> 16)\n  this[offset + 2] = (value >>> 8)\n  this[offset + 3] = (value & 0xff)\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 (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  this[offset] = (value & 0xff)\n  this[offset + 1] = (value >>> 8)\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  this[offset] = (value >>> 8)\n  this[offset + 1] = (value & 0xff)\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  this[offset] = (value & 0xff)\n  this[offset + 1] = (value >>> 8)\n  this[offset + 2] = (value >>> 16)\n  this[offset + 3] = (value >>> 24)\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  this[offset] = (value >>> 24)\n  this[offset + 1] = (value >>> 16)\n  this[offset + 2] = (value >>> 8)\n  this[offset + 3] = (value & 0xff)\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  value = +value\n  offset = offset >>> 0\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  value = +value\n  offset = offset >>> 0\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 (!Buffer.isBuffer(target)) throw new TypeError('argument should be a Buffer')\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('Index out of range')\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\n  if (this === target && typeof Uint8Array.prototype.copyWithin === 'function') {\n    // Use built-in when available, missing from IE11\n    this.copyWithin(targetStart, start, end)\n  } else if (this === target && start < targetStart && targetStart < end) {\n    // descending copy from end\n    for (var i = len - 1; i >= 0; --i) {\n      target[i + targetStart] = this[i + start]\n    }\n  } else {\n    Uint8Array.prototype.set.call(\n      target,\n      this.subarray(start, end),\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 (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    if (val.length === 1) {\n      var code = val.charCodeAt(0)\n      if ((encoding === 'utf8' && code < 128) ||\n          encoding === 'latin1') {\n        // Fast path: If `val` fits into a single byte, use that numeric value.\n        val = code\n      }\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      : Buffer.from(val, encoding)\n    var len = bytes.length\n    if (len === 0) {\n      throw new TypeError('The value \"' + val +\n        '\" is invalid for argument \"value\"')\n    }\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 takes equal signs as end of the Base64 encoding\n  str = str.split('=')[0]\n  // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n  str = str.trim().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 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\n// ArrayBuffer or Uint8Array objects from other contexts (i.e. iframes) do not pass\n// the `instanceof` check but they should be treated as of that type.\n// See: https://github.com/feross/buffer/issues/166\nfunction isInstance (obj, type) {\n  return obj instanceof type ||\n    (obj != null && obj.constructor != null && obj.constructor.name != null &&\n      obj.constructor.name === type.name)\n}\nfunction numberIsNaN (obj) {\n  // For IE11 support\n  return obj !== obj // eslint-disable-line no-self-compare\n}\n","/*!\n * Chart.js v2.9.4\n * https://www.chartjs.org\n * (c) 2020 Chart.js Contributors\n * Released under the MIT License\n */\n(function (global, factory) {\ntypeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(function() { try { return require('moment'); } catch(e) { } }()) :\ntypeof define === 'function' && define.amd ? define(['require'], function(require) { return factory(function() { try { return require('moment'); } catch(e) { } }()); }) :\n(global = global || self, global.Chart = factory(global.moment));\n}(this, (function (moment) { 'use strict';\n\nmoment = moment && moment.hasOwnProperty('default') ? moment['default'] : moment;\n\nfunction createCommonjsModule(fn, module) {\n\treturn module = { exports: {} }, fn(module, module.exports), module.exports;\n}\n\nfunction getCjsExportFromNamespace (n) {\n\treturn n && n['default'] || n;\n}\n\nvar colorName = {\r\n\t\"aliceblue\": [240, 248, 255],\r\n\t\"antiquewhite\": [250, 235, 215],\r\n\t\"aqua\": [0, 255, 255],\r\n\t\"aquamarine\": [127, 255, 212],\r\n\t\"azure\": [240, 255, 255],\r\n\t\"beige\": [245, 245, 220],\r\n\t\"bisque\": [255, 228, 196],\r\n\t\"black\": [0, 0, 0],\r\n\t\"blanchedalmond\": [255, 235, 205],\r\n\t\"blue\": [0, 0, 255],\r\n\t\"blueviolet\": [138, 43, 226],\r\n\t\"brown\": [165, 42, 42],\r\n\t\"burlywood\": [222, 184, 135],\r\n\t\"cadetblue\": [95, 158, 160],\r\n\t\"chartreuse\": [127, 255, 0],\r\n\t\"chocolate\": [210, 105, 30],\r\n\t\"coral\": [255, 127, 80],\r\n\t\"cornflowerblue\": [100, 149, 237],\r\n\t\"cornsilk\": [255, 248, 220],\r\n\t\"crimson\": [220, 20, 60],\r\n\t\"cyan\": [0, 255, 255],\r\n\t\"darkblue\": [0, 0, 139],\r\n\t\"darkcyan\": [0, 139, 139],\r\n\t\"darkgoldenrod\": [184, 134, 11],\r\n\t\"darkgray\": [169, 169, 169],\r\n\t\"darkgreen\": [0, 100, 0],\r\n\t\"darkgrey\": [169, 169, 169],\r\n\t\"darkkhaki\": [189, 183, 107],\r\n\t\"darkmagenta\": [139, 0, 139],\r\n\t\"darkolivegreen\": [85, 107, 47],\r\n\t\"darkorange\": [255, 140, 0],\r\n\t\"darkorchid\": [153, 50, 204],\r\n\t\"darkred\": [139, 0, 0],\r\n\t\"darksalmon\": [233, 150, 122],\r\n\t\"darkseagreen\": [143, 188, 143],\r\n\t\"darkslateblue\": [72, 61, 139],\r\n\t\"darkslategray\": [47, 79, 79],\r\n\t\"darkslategrey\": [47, 79, 79],\r\n\t\"darkturquoise\": [0, 206, 209],\r\n\t\"darkviolet\": [148, 0, 211],\r\n\t\"deeppink\": [255, 20, 147],\r\n\t\"deepskyblue\": [0, 191, 255],\r\n\t\"dimgray\": [105, 105, 105],\r\n\t\"dimgrey\": [105, 105, 105],\r\n\t\"dodgerblue\": [30, 144, 255],\r\n\t\"firebrick\": [178, 34, 34],\r\n\t\"floralwhite\": [255, 250, 240],\r\n\t\"forestgreen\": [34, 139, 34],\r\n\t\"fuchsia\": [255, 0, 255],\r\n\t\"gainsboro\": [220, 220, 220],\r\n\t\"ghostwhite\": [248, 248, 255],\r\n\t\"gold\": [255, 215, 0],\r\n\t\"goldenrod\": [218, 165, 32],\r\n\t\"gray\": [128, 128, 128],\r\n\t\"green\": [0, 128, 0],\r\n\t\"greenyellow\": [173, 255, 47],\r\n\t\"grey\": [128, 128, 128],\r\n\t\"honeydew\": [240, 255, 240],\r\n\t\"hotpink\": [255, 105, 180],\r\n\t\"indianred\": [205, 92, 92],\r\n\t\"indigo\": [75, 0, 130],\r\n\t\"ivory\": [255, 255, 240],\r\n\t\"khaki\": [240, 230, 140],\r\n\t\"lavender\": [230, 230, 250],\r\n\t\"lavenderblush\": [255, 240, 245],\r\n\t\"lawngreen\": [124, 252, 0],\r\n\t\"lemonchiffon\": [255, 250, 205],\r\n\t\"lightblue\": [173, 216, 230],\r\n\t\"lightcoral\": [240, 128, 128],\r\n\t\"lightcyan\": [224, 255, 255],\r\n\t\"lightgoldenrodyellow\": [250, 250, 210],\r\n\t\"lightgray\": [211, 211, 211],\r\n\t\"lightgreen\": [144, 238, 144],\r\n\t\"lightgrey\": [211, 211, 211],\r\n\t\"lightpink\": [255, 182, 193],\r\n\t\"lightsalmon\": [255, 160, 122],\r\n\t\"lightseagreen\": [32, 178, 170],\r\n\t\"lightskyblue\": [135, 206, 250],\r\n\t\"lightslategray\": [119, 136, 153],\r\n\t\"lightslategrey\": [119, 136, 153],\r\n\t\"lightsteelblue\": [176, 196, 222],\r\n\t\"lightyellow\": [255, 255, 224],\r\n\t\"lime\": [0, 255, 0],\r\n\t\"limegreen\": [50, 205, 50],\r\n\t\"linen\": [250, 240, 230],\r\n\t\"magenta\": [255, 0, 255],\r\n\t\"maroon\": [128, 0, 0],\r\n\t\"mediumaquamarine\": [102, 205, 170],\r\n\t\"mediumblue\": [0, 0, 205],\r\n\t\"mediumorchid\": [186, 85, 211],\r\n\t\"mediumpurple\": [147, 112, 219],\r\n\t\"mediumseagreen\": [60, 179, 113],\r\n\t\"mediumslateblue\": [123, 104, 238],\r\n\t\"mediumspringgreen\": [0, 250, 154],\r\n\t\"mediumturquoise\": [72, 209, 204],\r\n\t\"mediumvioletred\": [199, 21, 133],\r\n\t\"midnightblue\": [25, 25, 112],\r\n\t\"mintcream\": [245, 255, 250],\r\n\t\"mistyrose\": [255, 228, 225],\r\n\t\"moccasin\": [255, 228, 181],\r\n\t\"navajowhite\": [255, 222, 173],\r\n\t\"navy\": [0, 0, 128],\r\n\t\"oldlace\": [253, 245, 230],\r\n\t\"olive\": [128, 128, 0],\r\n\t\"olivedrab\": [107, 142, 35],\r\n\t\"orange\": [255, 165, 0],\r\n\t\"orangered\": [255, 69, 0],\r\n\t\"orchid\": [218, 112, 214],\r\n\t\"palegoldenrod\": [238, 232, 170],\r\n\t\"palegreen\": [152, 251, 152],\r\n\t\"paleturquoise\": [175, 238, 238],\r\n\t\"palevioletred\": [219, 112, 147],\r\n\t\"papayawhip\": [255, 239, 213],\r\n\t\"peachpuff\": [255, 218, 185],\r\n\t\"peru\": [205, 133, 63],\r\n\t\"pink\": [255, 192, 203],\r\n\t\"plum\": [221, 160, 221],\r\n\t\"powderblue\": [176, 224, 230],\r\n\t\"purple\": [128, 0, 128],\r\n\t\"rebeccapurple\": [102, 51, 153],\r\n\t\"red\": [255, 0, 0],\r\n\t\"rosybrown\": [188, 143, 143],\r\n\t\"royalblue\": [65, 105, 225],\r\n\t\"saddlebrown\": [139, 69, 19],\r\n\t\"salmon\": [250, 128, 114],\r\n\t\"sandybrown\": [244, 164, 96],\r\n\t\"seagreen\": [46, 139, 87],\r\n\t\"seashell\": [255, 245, 238],\r\n\t\"sienna\": [160, 82, 45],\r\n\t\"silver\": [192, 192, 192],\r\n\t\"skyblue\": [135, 206, 235],\r\n\t\"slateblue\": [106, 90, 205],\r\n\t\"slategray\": [112, 128, 144],\r\n\t\"slategrey\": [112, 128, 144],\r\n\t\"snow\": [255, 250, 250],\r\n\t\"springgreen\": [0, 255, 127],\r\n\t\"steelblue\": [70, 130, 180],\r\n\t\"tan\": [210, 180, 140],\r\n\t\"teal\": [0, 128, 128],\r\n\t\"thistle\": [216, 191, 216],\r\n\t\"tomato\": [255, 99, 71],\r\n\t\"turquoise\": [64, 224, 208],\r\n\t\"violet\": [238, 130, 238],\r\n\t\"wheat\": [245, 222, 179],\r\n\t\"white\": [255, 255, 255],\r\n\t\"whitesmoke\": [245, 245, 245],\r\n\t\"yellow\": [255, 255, 0],\r\n\t\"yellowgreen\": [154, 205, 50]\r\n};\n\nvar conversions = createCommonjsModule(function (module) {\n/* MIT license */\n\n\n// NOTE: conversions should only return primitive values (i.e. arrays, or\n//       values that give correct `typeof` results).\n//       do not use box values types (i.e. Number(), String(), etc.)\n\nvar reverseKeywords = {};\nfor (var key in colorName) {\n\tif (colorName.hasOwnProperty(key)) {\n\t\treverseKeywords[colorName[key]] = key;\n\t}\n}\n\nvar convert = module.exports = {\n\trgb: {channels: 3, labels: 'rgb'},\n\thsl: {channels: 3, labels: 'hsl'},\n\thsv: {channels: 3, labels: 'hsv'},\n\thwb: {channels: 3, labels: 'hwb'},\n\tcmyk: {channels: 4, labels: 'cmyk'},\n\txyz: {channels: 3, labels: 'xyz'},\n\tlab: {channels: 3, labels: 'lab'},\n\tlch: {channels: 3, labels: 'lch'},\n\thex: {channels: 1, labels: ['hex']},\n\tkeyword: {channels: 1, labels: ['keyword']},\n\tansi16: {channels: 1, labels: ['ansi16']},\n\tansi256: {channels: 1, labels: ['ansi256']},\n\thcg: {channels: 3, labels: ['h', 'c', 'g']},\n\tapple: {channels: 3, labels: ['r16', 'g16', 'b16']},\n\tgray: {channels: 1, labels: ['gray']}\n};\n\n// hide .channels and .labels properties\nfor (var model in convert) {\n\tif (convert.hasOwnProperty(model)) {\n\t\tif (!('channels' in convert[model])) {\n\t\t\tthrow new Error('missing channels property: ' + model);\n\t\t}\n\n\t\tif (!('labels' in convert[model])) {\n\t\t\tthrow new Error('missing channel labels property: ' + model);\n\t\t}\n\n\t\tif (convert[model].labels.length !== convert[model].channels) {\n\t\t\tthrow new Error('channel and label counts mismatch: ' + model);\n\t\t}\n\n\t\tvar channels = convert[model].channels;\n\t\tvar labels = convert[model].labels;\n\t\tdelete convert[model].channels;\n\t\tdelete convert[model].labels;\n\t\tObject.defineProperty(convert[model], 'channels', {value: channels});\n\t\tObject.defineProperty(convert[model], 'labels', {value: labels});\n\t}\n}\n\nconvert.rgb.hsl = function (rgb) {\n\tvar r = rgb[0] / 255;\n\tvar g = rgb[1] / 255;\n\tvar b = rgb[2] / 255;\n\tvar min = Math.min(r, g, b);\n\tvar max = Math.max(r, g, b);\n\tvar delta = max - min;\n\tvar h;\n\tvar s;\n\tvar l;\n\n\tif (max === min) {\n\t\th = 0;\n\t} else if (r === max) {\n\t\th = (g - b) / delta;\n\t} else if (g === max) {\n\t\th = 2 + (b - r) / delta;\n\t} else if (b === max) {\n\t\th = 4 + (r - g) / delta;\n\t}\n\n\th = Math.min(h * 60, 360);\n\n\tif (h < 0) {\n\t\th += 360;\n\t}\n\n\tl = (min + max) / 2;\n\n\tif (max === min) {\n\t\ts = 0;\n\t} else if (l <= 0.5) {\n\t\ts = delta / (max + min);\n\t} else {\n\t\ts = delta / (2 - max - min);\n\t}\n\n\treturn [h, s * 100, l * 100];\n};\n\nconvert.rgb.hsv = function (rgb) {\n\tvar rdif;\n\tvar gdif;\n\tvar bdif;\n\tvar h;\n\tvar s;\n\n\tvar r = rgb[0] / 255;\n\tvar g = rgb[1] / 255;\n\tvar b = rgb[2] / 255;\n\tvar v = Math.max(r, g, b);\n\tvar diff = v - Math.min(r, g, b);\n\tvar diffc = function (c) {\n\t\treturn (v - c) / 6 / diff + 1 / 2;\n\t};\n\n\tif (diff === 0) {\n\t\th = s = 0;\n\t} else {\n\t\ts = diff / v;\n\t\trdif = diffc(r);\n\t\tgdif = diffc(g);\n\t\tbdif = diffc(b);\n\n\t\tif (r === v) {\n\t\t\th = bdif - gdif;\n\t\t} else if (g === v) {\n\t\t\th = (1 / 3) + rdif - bdif;\n\t\t} else if (b === v) {\n\t\t\th = (2 / 3) + gdif - rdif;\n\t\t}\n\t\tif (h < 0) {\n\t\t\th += 1;\n\t\t} else if (h > 1) {\n\t\t\th -= 1;\n\t\t}\n\t}\n\n\treturn [\n\t\th * 360,\n\t\ts * 100,\n\t\tv * 100\n\t];\n};\n\nconvert.rgb.hwb = function (rgb) {\n\tvar r = rgb[0];\n\tvar g = rgb[1];\n\tvar b = rgb[2];\n\tvar h = convert.rgb.hsl(rgb)[0];\n\tvar w = 1 / 255 * Math.min(r, Math.min(g, b));\n\n\tb = 1 - 1 / 255 * Math.max(r, Math.max(g, b));\n\n\treturn [h, w * 100, b * 100];\n};\n\nconvert.rgb.cmyk = function (rgb) {\n\tvar r = rgb[0] / 255;\n\tvar g = rgb[1] / 255;\n\tvar b = rgb[2] / 255;\n\tvar c;\n\tvar m;\n\tvar y;\n\tvar k;\n\n\tk = Math.min(1 - r, 1 - g, 1 - b);\n\tc = (1 - r - k) / (1 - k) || 0;\n\tm = (1 - g - k) / (1 - k) || 0;\n\ty = (1 - b - k) / (1 - k) || 0;\n\n\treturn [c * 100, m * 100, y * 100, k * 100];\n};\n\n/**\n * See https://en.m.wikipedia.org/wiki/Euclidean_distance#Squared_Euclidean_distance\n * */\nfunction comparativeDistance(x, y) {\n\treturn (\n\t\tMath.pow(x[0] - y[0], 2) +\n\t\tMath.pow(x[1] - y[1], 2) +\n\t\tMath.pow(x[2] - y[2], 2)\n\t);\n}\n\nconvert.rgb.keyword = function (rgb) {\n\tvar reversed = reverseKeywords[rgb];\n\tif (reversed) {\n\t\treturn reversed;\n\t}\n\n\tvar currentClosestDistance = Infinity;\n\tvar currentClosestKeyword;\n\n\tfor (var keyword in colorName) {\n\t\tif (colorName.hasOwnProperty(keyword)) {\n\t\t\tvar value = colorName[keyword];\n\n\t\t\t// Compute comparative distance\n\t\t\tvar distance = comparativeDistance(rgb, value);\n\n\t\t\t// Check if its less, if so set as closest\n\t\t\tif (distance < currentClosestDistance) {\n\t\t\t\tcurrentClosestDistance = distance;\n\t\t\t\tcurrentClosestKeyword = keyword;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn currentClosestKeyword;\n};\n\nconvert.keyword.rgb = function (keyword) {\n\treturn colorName[keyword];\n};\n\nconvert.rgb.xyz = function (rgb) {\n\tvar r = rgb[0] / 255;\n\tvar g = rgb[1] / 255;\n\tvar b = rgb[2] / 255;\n\n\t// assume sRGB\n\tr = r > 0.04045 ? Math.pow(((r + 0.055) / 1.055), 2.4) : (r / 12.92);\n\tg = g > 0.04045 ? Math.pow(((g + 0.055) / 1.055), 2.4) : (g / 12.92);\n\tb = b > 0.04045 ? Math.pow(((b + 0.055) / 1.055), 2.4) : (b / 12.92);\n\n\tvar x = (r * 0.4124) + (g * 0.3576) + (b * 0.1805);\n\tvar y = (r * 0.2126) + (g * 0.7152) + (b * 0.0722);\n\tvar z = (r * 0.0193) + (g * 0.1192) + (b * 0.9505);\n\n\treturn [x * 100, y * 100, z * 100];\n};\n\nconvert.rgb.lab = function (rgb) {\n\tvar xyz = convert.rgb.xyz(rgb);\n\tvar x = xyz[0];\n\tvar y = xyz[1];\n\tvar z = xyz[2];\n\tvar l;\n\tvar a;\n\tvar b;\n\n\tx /= 95.047;\n\ty /= 100;\n\tz /= 108.883;\n\n\tx = x > 0.008856 ? Math.pow(x, 1 / 3) : (7.787 * x) + (16 / 116);\n\ty = y > 0.008856 ? Math.pow(y, 1 / 3) : (7.787 * y) + (16 / 116);\n\tz = z > 0.008856 ? Math.pow(z, 1 / 3) : (7.787 * z) + (16 / 116);\n\n\tl = (116 * y) - 16;\n\ta = 500 * (x - y);\n\tb = 200 * (y - z);\n\n\treturn [l, a, b];\n};\n\nconvert.hsl.rgb = function (hsl) {\n\tvar h = hsl[0] / 360;\n\tvar s = hsl[1] / 100;\n\tvar l = hsl[2] / 100;\n\tvar t1;\n\tvar t2;\n\tvar t3;\n\tvar rgb;\n\tvar val;\n\n\tif (s === 0) {\n\t\tval = l * 255;\n\t\treturn [val, val, val];\n\t}\n\n\tif (l < 0.5) {\n\t\tt2 = l * (1 + s);\n\t} else {\n\t\tt2 = l + s - l * s;\n\t}\n\n\tt1 = 2 * l - t2;\n\n\trgb = [0, 0, 0];\n\tfor (var i = 0; i < 3; i++) {\n\t\tt3 = h + 1 / 3 * -(i - 1);\n\t\tif (t3 < 0) {\n\t\t\tt3++;\n\t\t}\n\t\tif (t3 > 1) {\n\t\t\tt3--;\n\t\t}\n\n\t\tif (6 * t3 < 1) {\n\t\t\tval = t1 + (t2 - t1) * 6 * t3;\n\t\t} else if (2 * t3 < 1) {\n\t\t\tval = t2;\n\t\t} else if (3 * t3 < 2) {\n\t\t\tval = t1 + (t2 - t1) * (2 / 3 - t3) * 6;\n\t\t} else {\n\t\t\tval = t1;\n\t\t}\n\n\t\trgb[i] = val * 255;\n\t}\n\n\treturn rgb;\n};\n\nconvert.hsl.hsv = function (hsl) {\n\tvar h = hsl[0];\n\tvar s = hsl[1] / 100;\n\tvar l = hsl[2] / 100;\n\tvar smin = s;\n\tvar lmin = Math.max(l, 0.01);\n\tvar sv;\n\tvar v;\n\n\tl *= 2;\n\ts *= (l <= 1) ? l : 2 - l;\n\tsmin *= lmin <= 1 ? lmin : 2 - lmin;\n\tv = (l + s) / 2;\n\tsv = l === 0 ? (2 * smin) / (lmin + smin) : (2 * s) / (l + s);\n\n\treturn [h, sv * 100, v * 100];\n};\n\nconvert.hsv.rgb = function (hsv) {\n\tvar h = hsv[0] / 60;\n\tvar s = hsv[1] / 100;\n\tvar v = hsv[2] / 100;\n\tvar hi = Math.floor(h) % 6;\n\n\tvar f = h - Math.floor(h);\n\tvar p = 255 * v * (1 - s);\n\tvar q = 255 * v * (1 - (s * f));\n\tvar t = 255 * v * (1 - (s * (1 - f)));\n\tv *= 255;\n\n\tswitch (hi) {\n\t\tcase 0:\n\t\t\treturn [v, t, p];\n\t\tcase 1:\n\t\t\treturn [q, v, p];\n\t\tcase 2:\n\t\t\treturn [p, v, t];\n\t\tcase 3:\n\t\t\treturn [p, q, v];\n\t\tcase 4:\n\t\t\treturn [t, p, v];\n\t\tcase 5:\n\t\t\treturn [v, p, q];\n\t}\n};\n\nconvert.hsv.hsl = function (hsv) {\n\tvar h = hsv[0];\n\tvar s = hsv[1] / 100;\n\tvar v = hsv[2] / 100;\n\tvar vmin = Math.max(v, 0.01);\n\tvar lmin;\n\tvar sl;\n\tvar l;\n\n\tl = (2 - s) * v;\n\tlmin = (2 - s) * vmin;\n\tsl = s * vmin;\n\tsl /= (lmin <= 1) ? lmin : 2 - lmin;\n\tsl = sl || 0;\n\tl /= 2;\n\n\treturn [h, sl * 100, l * 100];\n};\n\n// http://dev.w3.org/csswg/css-color/#hwb-to-rgb\nconvert.hwb.rgb = function (hwb) {\n\tvar h = hwb[0] / 360;\n\tvar wh = hwb[1] / 100;\n\tvar bl = hwb[2] / 100;\n\tvar ratio = wh + bl;\n\tvar i;\n\tvar v;\n\tvar f;\n\tvar n;\n\n\t// wh + bl cant be > 1\n\tif (ratio > 1) {\n\t\twh /= ratio;\n\t\tbl /= ratio;\n\t}\n\n\ti = Math.floor(6 * h);\n\tv = 1 - bl;\n\tf = 6 * h - i;\n\n\tif ((i & 0x01) !== 0) {\n\t\tf = 1 - f;\n\t}\n\n\tn = wh + f * (v - wh); // linear interpolation\n\n\tvar r;\n\tvar g;\n\tvar b;\n\tswitch (i) {\n\t\tdefault:\n\t\tcase 6:\n\t\tcase 0: r = v; g = n; b = wh; break;\n\t\tcase 1: r = n; g = v; b = wh; break;\n\t\tcase 2: r = wh; g = v; b = n; break;\n\t\tcase 3: r = wh; g = n; b = v; break;\n\t\tcase 4: r = n; g = wh; b = v; break;\n\t\tcase 5: r = v; g = wh; b = n; break;\n\t}\n\n\treturn [r * 255, g * 255, b * 255];\n};\n\nconvert.cmyk.rgb = function (cmyk) {\n\tvar c = cmyk[0] / 100;\n\tvar m = cmyk[1] / 100;\n\tvar y = cmyk[2] / 100;\n\tvar k = cmyk[3] / 100;\n\tvar r;\n\tvar g;\n\tvar b;\n\n\tr = 1 - Math.min(1, c * (1 - k) + k);\n\tg = 1 - Math.min(1, m * (1 - k) + k);\n\tb = 1 - Math.min(1, y * (1 - k) + k);\n\n\treturn [r * 255, g * 255, b * 255];\n};\n\nconvert.xyz.rgb = function (xyz) {\n\tvar x = xyz[0] / 100;\n\tvar y = xyz[1] / 100;\n\tvar z = xyz[2] / 100;\n\tvar r;\n\tvar g;\n\tvar b;\n\n\tr = (x * 3.2406) + (y * -1.5372) + (z * -0.4986);\n\tg = (x * -0.9689) + (y * 1.8758) + (z * 0.0415);\n\tb = (x * 0.0557) + (y * -0.2040) + (z * 1.0570);\n\n\t// assume sRGB\n\tr = r > 0.0031308\n\t\t? ((1.055 * Math.pow(r, 1.0 / 2.4)) - 0.055)\n\t\t: r * 12.92;\n\n\tg = g > 0.0031308\n\t\t? ((1.055 * Math.pow(g, 1.0 / 2.4)) - 0.055)\n\t\t: g * 12.92;\n\n\tb = b > 0.0031308\n\t\t? ((1.055 * Math.pow(b, 1.0 / 2.4)) - 0.055)\n\t\t: b * 12.92;\n\n\tr = Math.min(Math.max(0, r), 1);\n\tg = Math.min(Math.max(0, g), 1);\n\tb = Math.min(Math.max(0, b), 1);\n\n\treturn [r * 255, g * 255, b * 255];\n};\n\nconvert.xyz.lab = function (xyz) {\n\tvar x = xyz[0];\n\tvar y = xyz[1];\n\tvar z = xyz[2];\n\tvar l;\n\tvar a;\n\tvar b;\n\n\tx /= 95.047;\n\ty /= 100;\n\tz /= 108.883;\n\n\tx = x > 0.008856 ? Math.pow(x, 1 / 3) : (7.787 * x) + (16 / 116);\n\ty = y > 0.008856 ? Math.pow(y, 1 / 3) : (7.787 * y) + (16 / 116);\n\tz = z > 0.008856 ? Math.pow(z, 1 / 3) : (7.787 * z) + (16 / 116);\n\n\tl = (116 * y) - 16;\n\ta = 500 * (x - y);\n\tb = 200 * (y - z);\n\n\treturn [l, a, b];\n};\n\nconvert.lab.xyz = function (lab) {\n\tvar l = lab[0];\n\tvar a = lab[1];\n\tvar b = lab[2];\n\tvar x;\n\tvar y;\n\tvar z;\n\n\ty = (l + 16) / 116;\n\tx = a / 500 + y;\n\tz = y - b / 200;\n\n\tvar y2 = Math.pow(y, 3);\n\tvar x2 = Math.pow(x, 3);\n\tvar z2 = Math.pow(z, 3);\n\ty = y2 > 0.008856 ? y2 : (y - 16 / 116) / 7.787;\n\tx = x2 > 0.008856 ? x2 : (x - 16 / 116) / 7.787;\n\tz = z2 > 0.008856 ? z2 : (z - 16 / 116) / 7.787;\n\n\tx *= 95.047;\n\ty *= 100;\n\tz *= 108.883;\n\n\treturn [x, y, z];\n};\n\nconvert.lab.lch = function (lab) {\n\tvar l = lab[0];\n\tvar a = lab[1];\n\tvar b = lab[2];\n\tvar hr;\n\tvar h;\n\tvar c;\n\n\thr = Math.atan2(b, a);\n\th = hr * 360 / 2 / Math.PI;\n\n\tif (h < 0) {\n\t\th += 360;\n\t}\n\n\tc = Math.sqrt(a * a + b * b);\n\n\treturn [l, c, h];\n};\n\nconvert.lch.lab = function (lch) {\n\tvar l = lch[0];\n\tvar c = lch[1];\n\tvar h = lch[2];\n\tvar a;\n\tvar b;\n\tvar hr;\n\n\thr = h / 360 * 2 * Math.PI;\n\ta = c * Math.cos(hr);\n\tb = c * Math.sin(hr);\n\n\treturn [l, a, b];\n};\n\nconvert.rgb.ansi16 = function (args) {\n\tvar r = args[0];\n\tvar g = args[1];\n\tvar b = args[2];\n\tvar value = 1 in arguments ? arguments[1] : convert.rgb.hsv(args)[2]; // hsv -> ansi16 optimization\n\n\tvalue = Math.round(value / 50);\n\n\tif (value === 0) {\n\t\treturn 30;\n\t}\n\n\tvar ansi = 30\n\t\t+ ((Math.round(b / 255) << 2)\n\t\t| (Math.round(g / 255) << 1)\n\t\t| Math.round(r / 255));\n\n\tif (value === 2) {\n\t\tansi += 60;\n\t}\n\n\treturn ansi;\n};\n\nconvert.hsv.ansi16 = function (args) {\n\t// optimization here; we already know the value and don't need to get\n\t// it converted for us.\n\treturn convert.rgb.ansi16(convert.hsv.rgb(args), args[2]);\n};\n\nconvert.rgb.ansi256 = function (args) {\n\tvar r = args[0];\n\tvar g = args[1];\n\tvar b = args[2];\n\n\t// we use the extended greyscale palette here, with the exception of\n\t// black and white. normal palette only has 4 greyscale shades.\n\tif (r === g && g === b) {\n\t\tif (r < 8) {\n\t\t\treturn 16;\n\t\t}\n\n\t\tif (r > 248) {\n\t\t\treturn 231;\n\t\t}\n\n\t\treturn Math.round(((r - 8) / 247) * 24) + 232;\n\t}\n\n\tvar ansi = 16\n\t\t+ (36 * Math.round(r / 255 * 5))\n\t\t+ (6 * Math.round(g / 255 * 5))\n\t\t+ Math.round(b / 255 * 5);\n\n\treturn ansi;\n};\n\nconvert.ansi16.rgb = function (args) {\n\tvar color = args % 10;\n\n\t// handle greyscale\n\tif (color === 0 || color === 7) {\n\t\tif (args > 50) {\n\t\t\tcolor += 3.5;\n\t\t}\n\n\t\tcolor = color / 10.5 * 255;\n\n\t\treturn [color, color, color];\n\t}\n\n\tvar mult = (~~(args > 50) + 1) * 0.5;\n\tvar r = ((color & 1) * mult) * 255;\n\tvar g = (((color >> 1) & 1) * mult) * 255;\n\tvar b = (((color >> 2) & 1) * mult) * 255;\n\n\treturn [r, g, b];\n};\n\nconvert.ansi256.rgb = function (args) {\n\t// handle greyscale\n\tif (args >= 232) {\n\t\tvar c = (args - 232) * 10 + 8;\n\t\treturn [c, c, c];\n\t}\n\n\targs -= 16;\n\n\tvar rem;\n\tvar r = Math.floor(args / 36) / 5 * 255;\n\tvar g = Math.floor((rem = args % 36) / 6) / 5 * 255;\n\tvar b = (rem % 6) / 5 * 255;\n\n\treturn [r, g, b];\n};\n\nconvert.rgb.hex = function (args) {\n\tvar integer = ((Math.round(args[0]) & 0xFF) << 16)\n\t\t+ ((Math.round(args[1]) & 0xFF) << 8)\n\t\t+ (Math.round(args[2]) & 0xFF);\n\n\tvar string = integer.toString(16).toUpperCase();\n\treturn '000000'.substring(string.length) + string;\n};\n\nconvert.hex.rgb = function (args) {\n\tvar match = args.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);\n\tif (!match) {\n\t\treturn [0, 0, 0];\n\t}\n\n\tvar colorString = match[0];\n\n\tif (match[0].length === 3) {\n\t\tcolorString = colorString.split('').map(function (char) {\n\t\t\treturn char + char;\n\t\t}).join('');\n\t}\n\n\tvar integer = parseInt(colorString, 16);\n\tvar r = (integer >> 16) & 0xFF;\n\tvar g = (integer >> 8) & 0xFF;\n\tvar b = integer & 0xFF;\n\n\treturn [r, g, b];\n};\n\nconvert.rgb.hcg = function (rgb) {\n\tvar r = rgb[0] / 255;\n\tvar g = rgb[1] / 255;\n\tvar b = rgb[2] / 255;\n\tvar max = Math.max(Math.max(r, g), b);\n\tvar min = Math.min(Math.min(r, g), b);\n\tvar chroma = (max - min);\n\tvar grayscale;\n\tvar hue;\n\n\tif (chroma < 1) {\n\t\tgrayscale = min / (1 - chroma);\n\t} else {\n\t\tgrayscale = 0;\n\t}\n\n\tif (chroma <= 0) {\n\t\thue = 0;\n\t} else\n\tif (max === r) {\n\t\thue = ((g - b) / chroma) % 6;\n\t} else\n\tif (max === g) {\n\t\thue = 2 + (b - r) / chroma;\n\t} else {\n\t\thue = 4 + (r - g) / chroma + 4;\n\t}\n\n\thue /= 6;\n\thue %= 1;\n\n\treturn [hue * 360, chroma * 100, grayscale * 100];\n};\n\nconvert.hsl.hcg = function (hsl) {\n\tvar s = hsl[1] / 100;\n\tvar l = hsl[2] / 100;\n\tvar c = 1;\n\tvar f = 0;\n\n\tif (l < 0.5) {\n\t\tc = 2.0 * s * l;\n\t} else {\n\t\tc = 2.0 * s * (1.0 - l);\n\t}\n\n\tif (c < 1.0) {\n\t\tf = (l - 0.5 * c) / (1.0 - c);\n\t}\n\n\treturn [hsl[0], c * 100, f * 100];\n};\n\nconvert.hsv.hcg = function (hsv) {\n\tvar s = hsv[1] / 100;\n\tvar v = hsv[2] / 100;\n\n\tvar c = s * v;\n\tvar f = 0;\n\n\tif (c < 1.0) {\n\t\tf = (v - c) / (1 - c);\n\t}\n\n\treturn [hsv[0], c * 100, f * 100];\n};\n\nconvert.hcg.rgb = function (hcg) {\n\tvar h = hcg[0] / 360;\n\tvar c = hcg[1] / 100;\n\tvar g = hcg[2] / 100;\n\n\tif (c === 0.0) {\n\t\treturn [g * 255, g * 255, g * 255];\n\t}\n\n\tvar pure = [0, 0, 0];\n\tvar hi = (h % 1) * 6;\n\tvar v = hi % 1;\n\tvar w = 1 - v;\n\tvar mg = 0;\n\n\tswitch (Math.floor(hi)) {\n\t\tcase 0:\n\t\t\tpure[0] = 1; pure[1] = v; pure[2] = 0; break;\n\t\tcase 1:\n\t\t\tpure[0] = w; pure[1] = 1; pure[2] = 0; break;\n\t\tcase 2:\n\t\t\tpure[0] = 0; pure[1] = 1; pure[2] = v; break;\n\t\tcase 3:\n\t\t\tpure[0] = 0; pure[1] = w; pure[2] = 1; break;\n\t\tcase 4:\n\t\t\tpure[0] = v; pure[1] = 0; pure[2] = 1; break;\n\t\tdefault:\n\t\t\tpure[0] = 1; pure[1] = 0; pure[2] = w;\n\t}\n\n\tmg = (1.0 - c) * g;\n\n\treturn [\n\t\t(c * pure[0] + mg) * 255,\n\t\t(c * pure[1] + mg) * 255,\n\t\t(c * pure[2] + mg) * 255\n\t];\n};\n\nconvert.hcg.hsv = function (hcg) {\n\tvar c = hcg[1] / 100;\n\tvar g = hcg[2] / 100;\n\n\tvar v = c + g * (1.0 - c);\n\tvar f = 0;\n\n\tif (v > 0.0) {\n\t\tf = c / v;\n\t}\n\n\treturn [hcg[0], f * 100, v * 100];\n};\n\nconvert.hcg.hsl = function (hcg) {\n\tvar c = hcg[1] / 100;\n\tvar g = hcg[2] / 100;\n\n\tvar l = g * (1.0 - c) + 0.5 * c;\n\tvar s = 0;\n\n\tif (l > 0.0 && l < 0.5) {\n\t\ts = c / (2 * l);\n\t} else\n\tif (l >= 0.5 && l < 1.0) {\n\t\ts = c / (2 * (1 - l));\n\t}\n\n\treturn [hcg[0], s * 100, l * 100];\n};\n\nconvert.hcg.hwb = function (hcg) {\n\tvar c = hcg[1] / 100;\n\tvar g = hcg[2] / 100;\n\tvar v = c + g * (1.0 - c);\n\treturn [hcg[0], (v - c) * 100, (1 - v) * 100];\n};\n\nconvert.hwb.hcg = function (hwb) {\n\tvar w = hwb[1] / 100;\n\tvar b = hwb[2] / 100;\n\tvar v = 1 - b;\n\tvar c = v - w;\n\tvar g = 0;\n\n\tif (c < 1) {\n\t\tg = (v - c) / (1 - c);\n\t}\n\n\treturn [hwb[0], c * 100, g * 100];\n};\n\nconvert.apple.rgb = function (apple) {\n\treturn [(apple[0] / 65535) * 255, (apple[1] / 65535) * 255, (apple[2] / 65535) * 255];\n};\n\nconvert.rgb.apple = function (rgb) {\n\treturn [(rgb[0] / 255) * 65535, (rgb[1] / 255) * 65535, (rgb[2] / 255) * 65535];\n};\n\nconvert.gray.rgb = function (args) {\n\treturn [args[0] / 100 * 255, args[0] / 100 * 255, args[0] / 100 * 255];\n};\n\nconvert.gray.hsl = convert.gray.hsv = function (args) {\n\treturn [0, 0, args[0]];\n};\n\nconvert.gray.hwb = function (gray) {\n\treturn [0, 100, gray[0]];\n};\n\nconvert.gray.cmyk = function (gray) {\n\treturn [0, 0, 0, gray[0]];\n};\n\nconvert.gray.lab = function (gray) {\n\treturn [gray[0], 0, 0];\n};\n\nconvert.gray.hex = function (gray) {\n\tvar val = Math.round(gray[0] / 100 * 255) & 0xFF;\n\tvar integer = (val << 16) + (val << 8) + val;\n\n\tvar string = integer.toString(16).toUpperCase();\n\treturn '000000'.substring(string.length) + string;\n};\n\nconvert.rgb.gray = function (rgb) {\n\tvar val = (rgb[0] + rgb[1] + rgb[2]) / 3;\n\treturn [val / 255 * 100];\n};\n});\nvar conversions_1 = conversions.rgb;\nvar conversions_2 = conversions.hsl;\nvar conversions_3 = conversions.hsv;\nvar conversions_4 = conversions.hwb;\nvar conversions_5 = conversions.cmyk;\nvar conversions_6 = conversions.xyz;\nvar conversions_7 = conversions.lab;\nvar conversions_8 = conversions.lch;\nvar conversions_9 = conversions.hex;\nvar conversions_10 = conversions.keyword;\nvar conversions_11 = conversions.ansi16;\nvar conversions_12 = conversions.ansi256;\nvar conversions_13 = conversions.hcg;\nvar conversions_14 = conversions.apple;\nvar conversions_15 = conversions.gray;\n\n/*\n\tthis function routes a model to all other models.\n\n\tall functions that are routed have a property `.conversion` attached\n\tto the returned synthetic function. This property is an array\n\tof strings, each with the steps in between the 'from' and 'to'\n\tcolor models (inclusive).\n\n\tconversions that are not possible simply are not included.\n*/\n\nfunction buildGraph() {\n\tvar graph = {};\n\t// https://jsperf.com/object-keys-vs-for-in-with-closure/3\n\tvar models = Object.keys(conversions);\n\n\tfor (var len = models.length, i = 0; i < len; i++) {\n\t\tgraph[models[i]] = {\n\t\t\t// http://jsperf.com/1-vs-infinity\n\t\t\t// micro-opt, but this is simple.\n\t\t\tdistance: -1,\n\t\t\tparent: null\n\t\t};\n\t}\n\n\treturn graph;\n}\n\n// https://en.wikipedia.org/wiki/Breadth-first_search\nfunction deriveBFS(fromModel) {\n\tvar graph = buildGraph();\n\tvar queue = [fromModel]; // unshift -> queue -> pop\n\n\tgraph[fromModel].distance = 0;\n\n\twhile (queue.length) {\n\t\tvar current = queue.pop();\n\t\tvar adjacents = Object.keys(conversions[current]);\n\n\t\tfor (var len = adjacents.length, i = 0; i < len; i++) {\n\t\t\tvar adjacent = adjacents[i];\n\t\t\tvar node = graph[adjacent];\n\n\t\t\tif (node.distance === -1) {\n\t\t\t\tnode.distance = graph[current].distance + 1;\n\t\t\t\tnode.parent = current;\n\t\t\t\tqueue.unshift(adjacent);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn graph;\n}\n\nfunction link(from, to) {\n\treturn function (args) {\n\t\treturn to(from(args));\n\t};\n}\n\nfunction wrapConversion(toModel, graph) {\n\tvar path = [graph[toModel].parent, toModel];\n\tvar fn = conversions[graph[toModel].parent][toModel];\n\n\tvar cur = graph[toModel].parent;\n\twhile (graph[cur].parent) {\n\t\tpath.unshift(graph[cur].parent);\n\t\tfn = link(conversions[graph[cur].parent][cur], fn);\n\t\tcur = graph[cur].parent;\n\t}\n\n\tfn.conversion = path;\n\treturn fn;\n}\n\nvar route = function (fromModel) {\n\tvar graph = deriveBFS(fromModel);\n\tvar conversion = {};\n\n\tvar models = Object.keys(graph);\n\tfor (var len = models.length, i = 0; i < len; i++) {\n\t\tvar toModel = models[i];\n\t\tvar node = graph[toModel];\n\n\t\tif (node.parent === null) {\n\t\t\t// no possible conversion, or this node is the source model.\n\t\t\tcontinue;\n\t\t}\n\n\t\tconversion[toModel] = wrapConversion(toModel, graph);\n\t}\n\n\treturn conversion;\n};\n\nvar convert = {};\n\nvar models = Object.keys(conversions);\n\nfunction wrapRaw(fn) {\n\tvar wrappedFn = function (args) {\n\t\tif (args === undefined || args === null) {\n\t\t\treturn args;\n\t\t}\n\n\t\tif (arguments.length > 1) {\n\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t}\n\n\t\treturn fn(args);\n\t};\n\n\t// preserve .conversion property if there is one\n\tif ('conversion' in fn) {\n\t\twrappedFn.conversion = fn.conversion;\n\t}\n\n\treturn wrappedFn;\n}\n\nfunction wrapRounded(fn) {\n\tvar wrappedFn = function (args) {\n\t\tif (args === undefined || args === null) {\n\t\t\treturn args;\n\t\t}\n\n\t\tif (arguments.length > 1) {\n\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t}\n\n\t\tvar result = fn(args);\n\n\t\t// we're assuming the result is an array here.\n\t\t// see notice in conversions.js; don't use box types\n\t\t// in conversion functions.\n\t\tif (typeof result === 'object') {\n\t\t\tfor (var len = result.length, i = 0; i < len; i++) {\n\t\t\t\tresult[i] = Math.round(result[i]);\n\t\t\t}\n\t\t}\n\n\t\treturn result;\n\t};\n\n\t// preserve .conversion property if there is one\n\tif ('conversion' in fn) {\n\t\twrappedFn.conversion = fn.conversion;\n\t}\n\n\treturn wrappedFn;\n}\n\nmodels.forEach(function (fromModel) {\n\tconvert[fromModel] = {};\n\n\tObject.defineProperty(convert[fromModel], 'channels', {value: conversions[fromModel].channels});\n\tObject.defineProperty(convert[fromModel], 'labels', {value: conversions[fromModel].labels});\n\n\tvar routes = route(fromModel);\n\tvar routeModels = Object.keys(routes);\n\n\trouteModels.forEach(function (toModel) {\n\t\tvar fn = routes[toModel];\n\n\t\tconvert[fromModel][toModel] = wrapRounded(fn);\n\t\tconvert[fromModel][toModel].raw = wrapRaw(fn);\n\t});\n});\n\nvar colorConvert = convert;\n\nvar colorName$1 = {\r\n\t\"aliceblue\": [240, 248, 255],\r\n\t\"antiquewhite\": [250, 235, 215],\r\n\t\"aqua\": [0, 255, 255],\r\n\t\"aquamarine\": [127, 255, 212],\r\n\t\"azure\": [240, 255, 255],\r\n\t\"beige\": [245, 245, 220],\r\n\t\"bisque\": [255, 228, 196],\r\n\t\"black\": [0, 0, 0],\r\n\t\"blanchedalmond\": [255, 235, 205],\r\n\t\"blue\": [0, 0, 255],\r\n\t\"blueviolet\": [138, 43, 226],\r\n\t\"brown\": [165, 42, 42],\r\n\t\"burlywood\": [222, 184, 135],\r\n\t\"cadetblue\": [95, 158, 160],\r\n\t\"chartreuse\": [127, 255, 0],\r\n\t\"chocolate\": [210, 105, 30],\r\n\t\"coral\": [255, 127, 80],\r\n\t\"cornflowerblue\": [100, 149, 237],\r\n\t\"cornsilk\": [255, 248, 220],\r\n\t\"crimson\": [220, 20, 60],\r\n\t\"cyan\": [0, 255, 255],\r\n\t\"darkblue\": [0, 0, 139],\r\n\t\"darkcyan\": [0, 139, 139],\r\n\t\"darkgoldenrod\": [184, 134, 11],\r\n\t\"darkgray\": [169, 169, 169],\r\n\t\"darkgreen\": [0, 100, 0],\r\n\t\"darkgrey\": [169, 169, 169],\r\n\t\"darkkhaki\": [189, 183, 107],\r\n\t\"darkmagenta\": [139, 0, 139],\r\n\t\"darkolivegreen\": [85, 107, 47],\r\n\t\"darkorange\": [255, 140, 0],\r\n\t\"darkorchid\": [153, 50, 204],\r\n\t\"darkred\": [139, 0, 0],\r\n\t\"darksalmon\": [233, 150, 122],\r\n\t\"darkseagreen\": [143, 188, 143],\r\n\t\"darkslateblue\": [72, 61, 139],\r\n\t\"darkslategray\": [47, 79, 79],\r\n\t\"darkslategrey\": [47, 79, 79],\r\n\t\"darkturquoise\": [0, 206, 209],\r\n\t\"darkviolet\": [148, 0, 211],\r\n\t\"deeppink\": [255, 20, 147],\r\n\t\"deepskyblue\": [0, 191, 255],\r\n\t\"dimgray\": [105, 105, 105],\r\n\t\"dimgrey\": [105, 105, 105],\r\n\t\"dodgerblue\": [30, 144, 255],\r\n\t\"firebrick\": [178, 34, 34],\r\n\t\"floralwhite\": [255, 250, 240],\r\n\t\"forestgreen\": [34, 139, 34],\r\n\t\"fuchsia\": [255, 0, 255],\r\n\t\"gainsboro\": [220, 220, 220],\r\n\t\"ghostwhite\": [248, 248, 255],\r\n\t\"gold\": [255, 215, 0],\r\n\t\"goldenrod\": [218, 165, 32],\r\n\t\"gray\": [128, 128, 128],\r\n\t\"green\": [0, 128, 0],\r\n\t\"greenyellow\": [173, 255, 47],\r\n\t\"grey\": [128, 128, 128],\r\n\t\"honeydew\": [240, 255, 240],\r\n\t\"hotpink\": [255, 105, 180],\r\n\t\"indianred\": [205, 92, 92],\r\n\t\"indigo\": [75, 0, 130],\r\n\t\"ivory\": [255, 255, 240],\r\n\t\"khaki\": [240, 230, 140],\r\n\t\"lavender\": [230, 230, 250],\r\n\t\"lavenderblush\": [255, 240, 245],\r\n\t\"lawngreen\": [124, 252, 0],\r\n\t\"lemonchiffon\": [255, 250, 205],\r\n\t\"lightblue\": [173, 216, 230],\r\n\t\"lightcoral\": [240, 128, 128],\r\n\t\"lightcyan\": [224, 255, 255],\r\n\t\"lightgoldenrodyellow\": [250, 250, 210],\r\n\t\"lightgray\": [211, 211, 211],\r\n\t\"lightgreen\": [144, 238, 144],\r\n\t\"lightgrey\": [211, 211, 211],\r\n\t\"lightpink\": [255, 182, 193],\r\n\t\"lightsalmon\": [255, 160, 122],\r\n\t\"lightseagreen\": [32, 178, 170],\r\n\t\"lightskyblue\": [135, 206, 250],\r\n\t\"lightslategray\": [119, 136, 153],\r\n\t\"lightslategrey\": [119, 136, 153],\r\n\t\"lightsteelblue\": [176, 196, 222],\r\n\t\"lightyellow\": [255, 255, 224],\r\n\t\"lime\": [0, 255, 0],\r\n\t\"limegreen\": [50, 205, 50],\r\n\t\"linen\": [250, 240, 230],\r\n\t\"magenta\": [255, 0, 255],\r\n\t\"maroon\": [128, 0, 0],\r\n\t\"mediumaquamarine\": [102, 205, 170],\r\n\t\"mediumblue\": [0, 0, 205],\r\n\t\"mediumorchid\": [186, 85, 211],\r\n\t\"mediumpurple\": [147, 112, 219],\r\n\t\"mediumseagreen\": [60, 179, 113],\r\n\t\"mediumslateblue\": [123, 104, 238],\r\n\t\"mediumspringgreen\": [0, 250, 154],\r\n\t\"mediumturquoise\": [72, 209, 204],\r\n\t\"mediumvioletred\": [199, 21, 133],\r\n\t\"midnightblue\": [25, 25, 112],\r\n\t\"mintcream\": [245, 255, 250],\r\n\t\"mistyrose\": [255, 228, 225],\r\n\t\"moccasin\": [255, 228, 181],\r\n\t\"navajowhite\": [255, 222, 173],\r\n\t\"navy\": [0, 0, 128],\r\n\t\"oldlace\": [253, 245, 230],\r\n\t\"olive\": [128, 128, 0],\r\n\t\"olivedrab\": [107, 142, 35],\r\n\t\"orange\": [255, 165, 0],\r\n\t\"orangered\": [255, 69, 0],\r\n\t\"orchid\": [218, 112, 214],\r\n\t\"palegoldenrod\": [238, 232, 170],\r\n\t\"palegreen\": [152, 251, 152],\r\n\t\"paleturquoise\": [175, 238, 238],\r\n\t\"palevioletred\": [219, 112, 147],\r\n\t\"papayawhip\": [255, 239, 213],\r\n\t\"peachpuff\": [255, 218, 185],\r\n\t\"peru\": [205, 133, 63],\r\n\t\"pink\": [255, 192, 203],\r\n\t\"plum\": [221, 160, 221],\r\n\t\"powderblue\": [176, 224, 230],\r\n\t\"purple\": [128, 0, 128],\r\n\t\"rebeccapurple\": [102, 51, 153],\r\n\t\"red\": [255, 0, 0],\r\n\t\"rosybrown\": [188, 143, 143],\r\n\t\"royalblue\": [65, 105, 225],\r\n\t\"saddlebrown\": [139, 69, 19],\r\n\t\"salmon\": [250, 128, 114],\r\n\t\"sandybrown\": [244, 164, 96],\r\n\t\"seagreen\": [46, 139, 87],\r\n\t\"seashell\": [255, 245, 238],\r\n\t\"sienna\": [160, 82, 45],\r\n\t\"silver\": [192, 192, 192],\r\n\t\"skyblue\": [135, 206, 235],\r\n\t\"slateblue\": [106, 90, 205],\r\n\t\"slategray\": [112, 128, 144],\r\n\t\"slategrey\": [112, 128, 144],\r\n\t\"snow\": [255, 250, 250],\r\n\t\"springgreen\": [0, 255, 127],\r\n\t\"steelblue\": [70, 130, 180],\r\n\t\"tan\": [210, 180, 140],\r\n\t\"teal\": [0, 128, 128],\r\n\t\"thistle\": [216, 191, 216],\r\n\t\"tomato\": [255, 99, 71],\r\n\t\"turquoise\": [64, 224, 208],\r\n\t\"violet\": [238, 130, 238],\r\n\t\"wheat\": [245, 222, 179],\r\n\t\"white\": [255, 255, 255],\r\n\t\"whitesmoke\": [245, 245, 245],\r\n\t\"yellow\": [255, 255, 0],\r\n\t\"yellowgreen\": [154, 205, 50]\r\n};\n\n/* MIT license */\n\n\nvar colorString = {\n   getRgba: getRgba,\n   getHsla: getHsla,\n   getRgb: getRgb,\n   getHsl: getHsl,\n   getHwb: getHwb,\n   getAlpha: getAlpha,\n\n   hexString: hexString,\n   rgbString: rgbString,\n   rgbaString: rgbaString,\n   percentString: percentString,\n   percentaString: percentaString,\n   hslString: hslString,\n   hslaString: hslaString,\n   hwbString: hwbString,\n   keyword: keyword\n};\n\nfunction getRgba(string) {\n   if (!string) {\n      return;\n   }\n   var abbr =  /^#([a-fA-F0-9]{3,4})$/i,\n       hex =  /^#([a-fA-F0-9]{6}([a-fA-F0-9]{2})?)$/i,\n       rgba = /^rgba?\\(\\s*([+-]?\\d+)\\s*,\\s*([+-]?\\d+)\\s*,\\s*([+-]?\\d+)\\s*(?:,\\s*([+-]?[\\d\\.]+)\\s*)?\\)$/i,\n       per = /^rgba?\\(\\s*([+-]?[\\d\\.]+)\\%\\s*,\\s*([+-]?[\\d\\.]+)\\%\\s*,\\s*([+-]?[\\d\\.]+)\\%\\s*(?:,\\s*([+-]?[\\d\\.]+)\\s*)?\\)$/i,\n       keyword = /(\\w+)/;\n\n   var rgb = [0, 0, 0],\n       a = 1,\n       match = string.match(abbr),\n       hexAlpha = \"\";\n   if (match) {\n      match = match[1];\n      hexAlpha = match[3];\n      for (var i = 0; i < rgb.length; i++) {\n         rgb[i] = parseInt(match[i] + match[i], 16);\n      }\n      if (hexAlpha) {\n         a = Math.round((parseInt(hexAlpha + hexAlpha, 16) / 255) * 100) / 100;\n      }\n   }\n   else if (match = string.match(hex)) {\n      hexAlpha = match[2];\n      match = match[1];\n      for (var i = 0; i < rgb.length; i++) {\n         rgb[i] = parseInt(match.slice(i * 2, i * 2 + 2), 16);\n      }\n      if (hexAlpha) {\n         a = Math.round((parseInt(hexAlpha, 16) / 255) * 100) / 100;\n      }\n   }\n   else if (match = string.match(rgba)) {\n      for (var i = 0; i < rgb.length; i++) {\n         rgb[i] = parseInt(match[i + 1]);\n      }\n      a = parseFloat(match[4]);\n   }\n   else if (match = string.match(per)) {\n      for (var i = 0; i < rgb.length; i++) {\n         rgb[i] = Math.round(parseFloat(match[i + 1]) * 2.55);\n      }\n      a = parseFloat(match[4]);\n   }\n   else if (match = string.match(keyword)) {\n      if (match[1] == \"transparent\") {\n         return [0, 0, 0, 0];\n      }\n      rgb = colorName$1[match[1]];\n      if (!rgb) {\n         return;\n      }\n   }\n\n   for (var i = 0; i < rgb.length; i++) {\n      rgb[i] = scale(rgb[i], 0, 255);\n   }\n   if (!a && a != 0) {\n      a = 1;\n   }\n   else {\n      a = scale(a, 0, 1);\n   }\n   rgb[3] = a;\n   return rgb;\n}\n\nfunction getHsla(string) {\n   if (!string) {\n      return;\n   }\n   var hsl = /^hsla?\\(\\s*([+-]?\\d+)(?:deg)?\\s*,\\s*([+-]?[\\d\\.]+)%\\s*,\\s*([+-]?[\\d\\.]+)%\\s*(?:,\\s*([+-]?[\\d\\.]+)\\s*)?\\)/;\n   var match = string.match(hsl);\n   if (match) {\n      var alpha = parseFloat(match[4]);\n      var h = scale(parseInt(match[1]), 0, 360),\n          s = scale(parseFloat(match[2]), 0, 100),\n          l = scale(parseFloat(match[3]), 0, 100),\n          a = scale(isNaN(alpha) ? 1 : alpha, 0, 1);\n      return [h, s, l, a];\n   }\n}\n\nfunction getHwb(string) {\n   if (!string) {\n      return;\n   }\n   var hwb = /^hwb\\(\\s*([+-]?\\d+)(?:deg)?\\s*,\\s*([+-]?[\\d\\.]+)%\\s*,\\s*([+-]?[\\d\\.]+)%\\s*(?:,\\s*([+-]?[\\d\\.]+)\\s*)?\\)/;\n   var match = string.match(hwb);\n   if (match) {\n    var alpha = parseFloat(match[4]);\n      var h = scale(parseInt(match[1]), 0, 360),\n          w = scale(parseFloat(match[2]), 0, 100),\n          b = scale(parseFloat(match[3]), 0, 100),\n          a = scale(isNaN(alpha) ? 1 : alpha, 0, 1);\n      return [h, w, b, a];\n   }\n}\n\nfunction getRgb(string) {\n   var rgba = getRgba(string);\n   return rgba && rgba.slice(0, 3);\n}\n\nfunction getHsl(string) {\n  var hsla = getHsla(string);\n  return hsla && hsla.slice(0, 3);\n}\n\nfunction getAlpha(string) {\n   var vals = getRgba(string);\n   if (vals) {\n      return vals[3];\n   }\n   else if (vals = getHsla(string)) {\n      return vals[3];\n   }\n   else if (vals = getHwb(string)) {\n      return vals[3];\n   }\n}\n\n// generators\nfunction hexString(rgba, a) {\n   var a = (a !== undefined && rgba.length === 3) ? a : rgba[3];\n   return \"#\" + hexDouble(rgba[0]) \n              + hexDouble(rgba[1])\n              + hexDouble(rgba[2])\n              + (\n                 (a >= 0 && a < 1)\n                 ? hexDouble(Math.round(a * 255))\n                 : \"\"\n              );\n}\n\nfunction rgbString(rgba, alpha) {\n   if (alpha < 1 || (rgba[3] && rgba[3] < 1)) {\n      return rgbaString(rgba, alpha);\n   }\n   return \"rgb(\" + rgba[0] + \", \" + rgba[1] + \", \" + rgba[2] + \")\";\n}\n\nfunction rgbaString(rgba, alpha) {\n   if (alpha === undefined) {\n      alpha = (rgba[3] !== undefined ? rgba[3] : 1);\n   }\n   return \"rgba(\" + rgba[0] + \", \" + rgba[1] + \", \" + rgba[2]\n           + \", \" + alpha + \")\";\n}\n\nfunction percentString(rgba, alpha) {\n   if (alpha < 1 || (rgba[3] && rgba[3] < 1)) {\n      return percentaString(rgba, alpha);\n   }\n   var r = Math.round(rgba[0]/255 * 100),\n       g = Math.round(rgba[1]/255 * 100),\n       b = Math.round(rgba[2]/255 * 100);\n\n   return \"rgb(\" + r + \"%, \" + g + \"%, \" + b + \"%)\";\n}\n\nfunction percentaString(rgba, alpha) {\n   var r = Math.round(rgba[0]/255 * 100),\n       g = Math.round(rgba[1]/255 * 100),\n       b = Math.round(rgba[2]/255 * 100);\n   return \"rgba(\" + r + \"%, \" + g + \"%, \" + b + \"%, \" + (alpha || rgba[3] || 1) + \")\";\n}\n\nfunction hslString(hsla, alpha) {\n   if (alpha < 1 || (hsla[3] && hsla[3] < 1)) {\n      return hslaString(hsla, alpha);\n   }\n   return \"hsl(\" + hsla[0] + \", \" + hsla[1] + \"%, \" + hsla[2] + \"%)\";\n}\n\nfunction hslaString(hsla, alpha) {\n   if (alpha === undefined) {\n      alpha = (hsla[3] !== undefined ? hsla[3] : 1);\n   }\n   return \"hsla(\" + hsla[0] + \", \" + hsla[1] + \"%, \" + hsla[2] + \"%, \"\n           + alpha + \")\";\n}\n\n// hwb is a bit different than rgb(a) & hsl(a) since there is no alpha specific syntax\n// (hwb have alpha optional & 1 is default value)\nfunction hwbString(hwb, alpha) {\n   if (alpha === undefined) {\n      alpha = (hwb[3] !== undefined ? hwb[3] : 1);\n   }\n   return \"hwb(\" + hwb[0] + \", \" + hwb[1] + \"%, \" + hwb[2] + \"%\"\n           + (alpha !== undefined && alpha !== 1 ? \", \" + alpha : \"\") + \")\";\n}\n\nfunction keyword(rgb) {\n  return reverseNames[rgb.slice(0, 3)];\n}\n\n// helpers\nfunction scale(num, min, max) {\n   return Math.min(Math.max(min, num), max);\n}\n\nfunction hexDouble(num) {\n  var str = num.toString(16).toUpperCase();\n  return (str.length < 2) ? \"0\" + str : str;\n}\n\n\n//create a list of reverse color names\nvar reverseNames = {};\nfor (var name in colorName$1) {\n   reverseNames[colorName$1[name]] = name;\n}\n\n/* MIT license */\n\n\n\nvar Color = function (obj) {\n\tif (obj instanceof Color) {\n\t\treturn obj;\n\t}\n\tif (!(this instanceof Color)) {\n\t\treturn new Color(obj);\n\t}\n\n\tthis.valid = false;\n\tthis.values = {\n\t\trgb: [0, 0, 0],\n\t\thsl: [0, 0, 0],\n\t\thsv: [0, 0, 0],\n\t\thwb: [0, 0, 0],\n\t\tcmyk: [0, 0, 0, 0],\n\t\talpha: 1\n\t};\n\n\t// parse Color() argument\n\tvar vals;\n\tif (typeof obj === 'string') {\n\t\tvals = colorString.getRgba(obj);\n\t\tif (vals) {\n\t\t\tthis.setValues('rgb', vals);\n\t\t} else if (vals = colorString.getHsla(obj)) {\n\t\t\tthis.setValues('hsl', vals);\n\t\t} else if (vals = colorString.getHwb(obj)) {\n\t\t\tthis.setValues('hwb', vals);\n\t\t}\n\t} else if (typeof obj === 'object') {\n\t\tvals = obj;\n\t\tif (vals.r !== undefined || vals.red !== undefined) {\n\t\t\tthis.setValues('rgb', vals);\n\t\t} else if (vals.l !== undefined || vals.lightness !== undefined) {\n\t\t\tthis.setValues('hsl', vals);\n\t\t} else if (vals.v !== undefined || vals.value !== undefined) {\n\t\t\tthis.setValues('hsv', vals);\n\t\t} else if (vals.w !== undefined || vals.whiteness !== undefined) {\n\t\t\tthis.setValues('hwb', vals);\n\t\t} else if (vals.c !== undefined || vals.cyan !== undefined) {\n\t\t\tthis.setValues('cmyk', vals);\n\t\t}\n\t}\n};\n\nColor.prototype = {\n\tisValid: function () {\n\t\treturn this.valid;\n\t},\n\trgb: function () {\n\t\treturn this.setSpace('rgb', arguments);\n\t},\n\thsl: function () {\n\t\treturn this.setSpace('hsl', arguments);\n\t},\n\thsv: function () {\n\t\treturn this.setSpace('hsv', arguments);\n\t},\n\thwb: function () {\n\t\treturn this.setSpace('hwb', arguments);\n\t},\n\tcmyk: function () {\n\t\treturn this.setSpace('cmyk', arguments);\n\t},\n\n\trgbArray: function () {\n\t\treturn this.values.rgb;\n\t},\n\thslArray: function () {\n\t\treturn this.values.hsl;\n\t},\n\thsvArray: function () {\n\t\treturn this.values.hsv;\n\t},\n\thwbArray: function () {\n\t\tvar values = this.values;\n\t\tif (values.alpha !== 1) {\n\t\t\treturn values.hwb.concat([values.alpha]);\n\t\t}\n\t\treturn values.hwb;\n\t},\n\tcmykArray: function () {\n\t\treturn this.values.cmyk;\n\t},\n\trgbaArray: function () {\n\t\tvar values = this.values;\n\t\treturn values.rgb.concat([values.alpha]);\n\t},\n\thslaArray: function () {\n\t\tvar values = this.values;\n\t\treturn values.hsl.concat([values.alpha]);\n\t},\n\talpha: function (val) {\n\t\tif (val === undefined) {\n\t\t\treturn this.values.alpha;\n\t\t}\n\t\tthis.setValues('alpha', val);\n\t\treturn this;\n\t},\n\n\tred: function (val) {\n\t\treturn this.setChannel('rgb', 0, val);\n\t},\n\tgreen: function (val) {\n\t\treturn this.setChannel('rgb', 1, val);\n\t},\n\tblue: function (val) {\n\t\treturn this.setChannel('rgb', 2, val);\n\t},\n\thue: function (val) {\n\t\tif (val) {\n\t\t\tval %= 360;\n\t\t\tval = val < 0 ? 360 + val : val;\n\t\t}\n\t\treturn this.setChannel('hsl', 0, val);\n\t},\n\tsaturation: function (val) {\n\t\treturn this.setChannel('hsl', 1, val);\n\t},\n\tlightness: function (val) {\n\t\treturn this.setChannel('hsl', 2, val);\n\t},\n\tsaturationv: function (val) {\n\t\treturn this.setChannel('hsv', 1, val);\n\t},\n\twhiteness: function (val) {\n\t\treturn this.setChannel('hwb', 1, val);\n\t},\n\tblackness: function (val) {\n\t\treturn this.setChannel('hwb', 2, val);\n\t},\n\tvalue: function (val) {\n\t\treturn this.setChannel('hsv', 2, val);\n\t},\n\tcyan: function (val) {\n\t\treturn this.setChannel('cmyk', 0, val);\n\t},\n\tmagenta: function (val) {\n\t\treturn this.setChannel('cmyk', 1, val);\n\t},\n\tyellow: function (val) {\n\t\treturn this.setChannel('cmyk', 2, val);\n\t},\n\tblack: function (val) {\n\t\treturn this.setChannel('cmyk', 3, val);\n\t},\n\n\thexString: function () {\n\t\treturn colorString.hexString(this.values.rgb);\n\t},\n\trgbString: function () {\n\t\treturn colorString.rgbString(this.values.rgb, this.values.alpha);\n\t},\n\trgbaString: function () {\n\t\treturn colorString.rgbaString(this.values.rgb, this.values.alpha);\n\t},\n\tpercentString: function () {\n\t\treturn colorString.percentString(this.values.rgb, this.values.alpha);\n\t},\n\thslString: function () {\n\t\treturn colorString.hslString(this.values.hsl, this.values.alpha);\n\t},\n\thslaString: function () {\n\t\treturn colorString.hslaString(this.values.hsl, this.values.alpha);\n\t},\n\thwbString: function () {\n\t\treturn colorString.hwbString(this.values.hwb, this.values.alpha);\n\t},\n\tkeyword: function () {\n\t\treturn colorString.keyword(this.values.rgb, this.values.alpha);\n\t},\n\n\trgbNumber: function () {\n\t\tvar rgb = this.values.rgb;\n\t\treturn (rgb[0] << 16) | (rgb[1] << 8) | rgb[2];\n\t},\n\n\tluminosity: function () {\n\t\t// http://www.w3.org/TR/WCAG20/#relativeluminancedef\n\t\tvar rgb = this.values.rgb;\n\t\tvar lum = [];\n\t\tfor (var i = 0; i < rgb.length; i++) {\n\t\t\tvar chan = rgb[i] / 255;\n\t\t\tlum[i] = (chan <= 0.03928) ? chan / 12.92 : Math.pow(((chan + 0.055) / 1.055), 2.4);\n\t\t}\n\t\treturn 0.2126 * lum[0] + 0.7152 * lum[1] + 0.0722 * lum[2];\n\t},\n\n\tcontrast: function (color2) {\n\t\t// http://www.w3.org/TR/WCAG20/#contrast-ratiodef\n\t\tvar lum1 = this.luminosity();\n\t\tvar lum2 = color2.luminosity();\n\t\tif (lum1 > lum2) {\n\t\t\treturn (lum1 + 0.05) / (lum2 + 0.05);\n\t\t}\n\t\treturn (lum2 + 0.05) / (lum1 + 0.05);\n\t},\n\n\tlevel: function (color2) {\n\t\tvar contrastRatio = this.contrast(color2);\n\t\tif (contrastRatio >= 7.1) {\n\t\t\treturn 'AAA';\n\t\t}\n\n\t\treturn (contrastRatio >= 4.5) ? 'AA' : '';\n\t},\n\n\tdark: function () {\n\t\t// YIQ equation from http://24ways.org/2010/calculating-color-contrast\n\t\tvar rgb = this.values.rgb;\n\t\tvar yiq = (rgb[0] * 299 + rgb[1] * 587 + rgb[2] * 114) / 1000;\n\t\treturn yiq < 128;\n\t},\n\n\tlight: function () {\n\t\treturn !this.dark();\n\t},\n\n\tnegate: function () {\n\t\tvar rgb = [];\n\t\tfor (var i = 0; i < 3; i++) {\n\t\t\trgb[i] = 255 - this.values.rgb[i];\n\t\t}\n\t\tthis.setValues('rgb', rgb);\n\t\treturn this;\n\t},\n\n\tlighten: function (ratio) {\n\t\tvar hsl = this.values.hsl;\n\t\thsl[2] += hsl[2] * ratio;\n\t\tthis.setValues('hsl', hsl);\n\t\treturn this;\n\t},\n\n\tdarken: function (ratio) {\n\t\tvar hsl = this.values.hsl;\n\t\thsl[2] -= hsl[2] * ratio;\n\t\tthis.setValues('hsl', hsl);\n\t\treturn this;\n\t},\n\n\tsaturate: function (ratio) {\n\t\tvar hsl = this.values.hsl;\n\t\thsl[1] += hsl[1] * ratio;\n\t\tthis.setValues('hsl', hsl);\n\t\treturn this;\n\t},\n\n\tdesaturate: function (ratio) {\n\t\tvar hsl = this.values.hsl;\n\t\thsl[1] -= hsl[1] * ratio;\n\t\tthis.setValues('hsl', hsl);\n\t\treturn this;\n\t},\n\n\twhiten: function (ratio) {\n\t\tvar hwb = this.values.hwb;\n\t\thwb[1] += hwb[1] * ratio;\n\t\tthis.setValues('hwb', hwb);\n\t\treturn this;\n\t},\n\n\tblacken: function (ratio) {\n\t\tvar hwb = this.values.hwb;\n\t\thwb[2] += hwb[2] * ratio;\n\t\tthis.setValues('hwb', hwb);\n\t\treturn this;\n\t},\n\n\tgreyscale: function () {\n\t\tvar rgb = this.values.rgb;\n\t\t// http://en.wikipedia.org/wiki/Grayscale#Converting_color_to_grayscale\n\t\tvar val = rgb[0] * 0.3 + rgb[1] * 0.59 + rgb[2] * 0.11;\n\t\tthis.setValues('rgb', [val, val, val]);\n\t\treturn this;\n\t},\n\n\tclearer: function (ratio) {\n\t\tvar alpha = this.values.alpha;\n\t\tthis.setValues('alpha', alpha - (alpha * ratio));\n\t\treturn this;\n\t},\n\n\topaquer: function (ratio) {\n\t\tvar alpha = this.values.alpha;\n\t\tthis.setValues('alpha', alpha + (alpha * ratio));\n\t\treturn this;\n\t},\n\n\trotate: function (degrees) {\n\t\tvar hsl = this.values.hsl;\n\t\tvar hue = (hsl[0] + degrees) % 360;\n\t\thsl[0] = hue < 0 ? 360 + hue : hue;\n\t\tthis.setValues('hsl', hsl);\n\t\treturn this;\n\t},\n\n\t/**\n\t * Ported from sass implementation in C\n\t * https://github.com/sass/libsass/blob/0e6b4a2850092356aa3ece07c6b249f0221caced/functions.cpp#L209\n\t */\n\tmix: function (mixinColor, weight) {\n\t\tvar color1 = this;\n\t\tvar color2 = mixinColor;\n\t\tvar p = weight === undefined ? 0.5 : weight;\n\n\t\tvar w = 2 * p - 1;\n\t\tvar a = color1.alpha() - color2.alpha();\n\n\t\tvar w1 = (((w * a === -1) ? w : (w + a) / (1 + w * a)) + 1) / 2.0;\n\t\tvar w2 = 1 - w1;\n\n\t\treturn this\n\t\t\t.rgb(\n\t\t\t\tw1 * color1.red() + w2 * color2.red(),\n\t\t\t\tw1 * color1.green() + w2 * color2.green(),\n\t\t\t\tw1 * color1.blue() + w2 * color2.blue()\n\t\t\t)\n\t\t\t.alpha(color1.alpha() * p + color2.alpha() * (1 - p));\n\t},\n\n\ttoJSON: function () {\n\t\treturn this.rgb();\n\t},\n\n\tclone: function () {\n\t\t// NOTE(SB): using node-clone creates a dependency to Buffer when using browserify,\n\t\t// making the final build way to big to embed in Chart.js. So let's do it manually,\n\t\t// assuming that values to clone are 1 dimension arrays containing only numbers,\n\t\t// except 'alpha' which is a number.\n\t\tvar result = new Color();\n\t\tvar source = this.values;\n\t\tvar target = result.values;\n\t\tvar value, type;\n\n\t\tfor (var prop in source) {\n\t\t\tif (source.hasOwnProperty(prop)) {\n\t\t\t\tvalue = source[prop];\n\t\t\t\ttype = ({}).toString.call(value);\n\t\t\t\tif (type === '[object Array]') {\n\t\t\t\t\ttarget[prop] = value.slice(0);\n\t\t\t\t} else if (type === '[object Number]') {\n\t\t\t\t\ttarget[prop] = value;\n\t\t\t\t} else {\n\t\t\t\t\tconsole.error('unexpected color value:', value);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn result;\n\t}\n};\n\nColor.prototype.spaces = {\n\trgb: ['red', 'green', 'blue'],\n\thsl: ['hue', 'saturation', 'lightness'],\n\thsv: ['hue', 'saturation', 'value'],\n\thwb: ['hue', 'whiteness', 'blackness'],\n\tcmyk: ['cyan', 'magenta', 'yellow', 'black']\n};\n\nColor.prototype.maxes = {\n\trgb: [255, 255, 255],\n\thsl: [360, 100, 100],\n\thsv: [360, 100, 100],\n\thwb: [360, 100, 100],\n\tcmyk: [100, 100, 100, 100]\n};\n\nColor.prototype.getValues = function (space) {\n\tvar values = this.values;\n\tvar vals = {};\n\n\tfor (var i = 0; i < space.length; i++) {\n\t\tvals[space.charAt(i)] = values[space][i];\n\t}\n\n\tif (values.alpha !== 1) {\n\t\tvals.a = values.alpha;\n\t}\n\n\t// {r: 255, g: 255, b: 255, a: 0.4}\n\treturn vals;\n};\n\nColor.prototype.setValues = function (space, vals) {\n\tvar values = this.values;\n\tvar spaces = this.spaces;\n\tvar maxes = this.maxes;\n\tvar alpha = 1;\n\tvar i;\n\n\tthis.valid = true;\n\n\tif (space === 'alpha') {\n\t\talpha = vals;\n\t} else if (vals.length) {\n\t\t// [10, 10, 10]\n\t\tvalues[space] = vals.slice(0, space.length);\n\t\talpha = vals[space.length];\n\t} else if (vals[space.charAt(0)] !== undefined) {\n\t\t// {r: 10, g: 10, b: 10}\n\t\tfor (i = 0; i < space.length; i++) {\n\t\t\tvalues[space][i] = vals[space.charAt(i)];\n\t\t}\n\n\t\talpha = vals.a;\n\t} else if (vals[spaces[space][0]] !== undefined) {\n\t\t// {red: 10, green: 10, blue: 10}\n\t\tvar chans = spaces[space];\n\n\t\tfor (i = 0; i < space.length; i++) {\n\t\t\tvalues[space][i] = vals[chans[i]];\n\t\t}\n\n\t\talpha = vals.alpha;\n\t}\n\n\tvalues.alpha = Math.max(0, Math.min(1, (alpha === undefined ? values.alpha : alpha)));\n\n\tif (space === 'alpha') {\n\t\treturn false;\n\t}\n\n\tvar capped;\n\n\t// cap values of the space prior converting all values\n\tfor (i = 0; i < space.length; i++) {\n\t\tcapped = Math.max(0, Math.min(maxes[space][i], values[space][i]));\n\t\tvalues[space][i] = Math.round(capped);\n\t}\n\n\t// convert to all the other color spaces\n\tfor (var sname in spaces) {\n\t\tif (sname !== space) {\n\t\t\tvalues[sname] = colorConvert[space][sname](values[space]);\n\t\t}\n\t}\n\n\treturn true;\n};\n\nColor.prototype.setSpace = function (space, args) {\n\tvar vals = args[0];\n\n\tif (vals === undefined) {\n\t\t// color.rgb()\n\t\treturn this.getValues(space);\n\t}\n\n\t// color.rgb(10, 10, 10)\n\tif (typeof vals === 'number') {\n\t\tvals = Array.prototype.slice.call(args);\n\t}\n\n\tthis.setValues(space, vals);\n\treturn this;\n};\n\nColor.prototype.setChannel = function (space, index, val) {\n\tvar svalues = this.values[space];\n\tif (val === undefined) {\n\t\t// color.red()\n\t\treturn svalues[index];\n\t} else if (val === svalues[index]) {\n\t\t// color.red(color.red())\n\t\treturn this;\n\t}\n\n\t// color.red(100)\n\tsvalues[index] = val;\n\tthis.setValues(space, svalues);\n\n\treturn this;\n};\n\nif (typeof window !== 'undefined') {\n\twindow.Color = Color;\n}\n\nvar chartjsColor = Color;\n\nfunction isValidKey(key) {\r\n\treturn ['__proto__', 'prototype', 'constructor'].indexOf(key) === -1;\r\n}\r\n\r\n/**\r\n * @namespace Chart.helpers\r\n */\r\nvar helpers = {\r\n\t/**\r\n\t * An empty function that can be used, for example, for optional callback.\r\n\t */\r\n\tnoop: function() {},\r\n\r\n\t/**\r\n\t * Returns a unique id, sequentially generated from a global variable.\r\n\t * @returns {number}\r\n\t * @function\r\n\t */\r\n\tuid: (function() {\r\n\t\tvar id = 0;\r\n\t\treturn function() {\r\n\t\t\treturn id++;\r\n\t\t};\r\n\t}()),\r\n\r\n\t/**\r\n\t * Returns true if `value` is neither null nor undefined, else returns false.\r\n\t * @param {*} value - The value to test.\r\n\t * @returns {boolean}\r\n\t * @since 2.7.0\r\n\t */\r\n\tisNullOrUndef: function(value) {\r\n\t\treturn value === null || typeof value === 'undefined';\r\n\t},\r\n\r\n\t/**\r\n\t * Returns true if `value` is an array (including typed arrays), else returns false.\r\n\t * @param {*} value - The value to test.\r\n\t * @returns {boolean}\r\n\t * @function\r\n\t */\r\n\tisArray: function(value) {\r\n\t\tif (Array.isArray && Array.isArray(value)) {\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\tvar type = Object.prototype.toString.call(value);\r\n\t\tif (type.substr(0, 7) === '[object' && type.substr(-6) === 'Array]') {\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn false;\r\n\t},\r\n\r\n\t/**\r\n\t * Returns true if `value` is an object (excluding null), else returns false.\r\n\t * @param {*} value - The value to test.\r\n\t * @returns {boolean}\r\n\t * @since 2.7.0\r\n\t */\r\n\tisObject: function(value) {\r\n\t\treturn value !== null && Object.prototype.toString.call(value) === '[object Object]';\r\n\t},\r\n\r\n\t/**\r\n\t * Returns true if `value` is a finite number, else returns false\r\n\t * @param {*} value  - The value to test.\r\n\t * @returns {boolean}\r\n\t */\r\n\tisFinite: function(value) {\r\n\t\treturn (typeof value === 'number' || value instanceof Number) && isFinite(value);\r\n\t},\r\n\r\n\t/**\r\n\t * Returns `value` if defined, else returns `defaultValue`.\r\n\t * @param {*} value - The value to return if defined.\r\n\t * @param {*} defaultValue - The value to return if `value` is undefined.\r\n\t * @returns {*}\r\n\t */\r\n\tvalueOrDefault: function(value, defaultValue) {\r\n\t\treturn typeof value === 'undefined' ? defaultValue : value;\r\n\t},\r\n\r\n\t/**\r\n\t * Returns value at the given `index` in array if defined, else returns `defaultValue`.\r\n\t * @param {Array} value - The array to lookup for value at `index`.\r\n\t * @param {number} index - The index in `value` to lookup for value.\r\n\t * @param {*} defaultValue - The value to return if `value[index]` is undefined.\r\n\t * @returns {*}\r\n\t */\r\n\tvalueAtIndexOrDefault: function(value, index, defaultValue) {\r\n\t\treturn helpers.valueOrDefault(helpers.isArray(value) ? value[index] : value, defaultValue);\r\n\t},\r\n\r\n\t/**\r\n\t * Calls `fn` with the given `args` in the scope defined by `thisArg` and returns the\r\n\t * value returned by `fn`. If `fn` is not a function, this method returns undefined.\r\n\t * @param {function} fn - The function to call.\r\n\t * @param {Array|undefined|null} args - The arguments with which `fn` should be called.\r\n\t * @param {object} [thisArg] - The value of `this` provided for the call to `fn`.\r\n\t * @returns {*}\r\n\t */\r\n\tcallback: function(fn, args, thisArg) {\r\n\t\tif (fn && typeof fn.call === 'function') {\r\n\t\t\treturn fn.apply(thisArg, args);\r\n\t\t}\r\n\t},\r\n\r\n\t/**\r\n\t * Note(SB) for performance sake, this method should only be used when loopable type\r\n\t * is unknown or in none intensive code (not called often and small loopable). Else\r\n\t * it's preferable to use a regular for() loop and save extra function calls.\r\n\t * @param {object|Array} loopable - The object or array to be iterated.\r\n\t * @param {function} fn - The function to call for each item.\r\n\t * @param {object} [thisArg] - The value of `this` provided for the call to `fn`.\r\n\t * @param {boolean} [reverse] - If true, iterates backward on the loopable.\r\n\t */\r\n\teach: function(loopable, fn, thisArg, reverse) {\r\n\t\tvar i, len, keys;\r\n\t\tif (helpers.isArray(loopable)) {\r\n\t\t\tlen = loopable.length;\r\n\t\t\tif (reverse) {\r\n\t\t\t\tfor (i = len - 1; i >= 0; i--) {\r\n\t\t\t\t\tfn.call(thisArg, loopable[i], i);\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tfor (i = 0; i < len; i++) {\r\n\t\t\t\t\tfn.call(thisArg, loopable[i], i);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t} else if (helpers.isObject(loopable)) {\r\n\t\t\tkeys = Object.keys(loopable);\r\n\t\t\tlen = keys.length;\r\n\t\t\tfor (i = 0; i < len; i++) {\r\n\t\t\t\tfn.call(thisArg, loopable[keys[i]], keys[i]);\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\t/**\r\n\t * Returns true if the `a0` and `a1` arrays have the same content, else returns false.\r\n\t * @see https://stackoverflow.com/a/14853974\r\n\t * @param {Array} a0 - The array to compare\r\n\t * @param {Array} a1 - The array to compare\r\n\t * @returns {boolean}\r\n\t */\r\n\tarrayEquals: function(a0, a1) {\r\n\t\tvar i, ilen, v0, v1;\r\n\r\n\t\tif (!a0 || !a1 || a0.length !== a1.length) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tfor (i = 0, ilen = a0.length; i < ilen; ++i) {\r\n\t\t\tv0 = a0[i];\r\n\t\t\tv1 = a1[i];\r\n\r\n\t\t\tif (v0 instanceof Array && v1 instanceof Array) {\r\n\t\t\t\tif (!helpers.arrayEquals(v0, v1)) {\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t} else if (v0 !== v1) {\r\n\t\t\t\t// NOTE: two different object instances will never be equal: {x:20} != {x:20}\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn true;\r\n\t},\r\n\r\n\t/**\r\n\t * Returns a deep copy of `source` without keeping references on objects and arrays.\r\n\t * @param {*} source - The value to clone.\r\n\t * @returns {*}\r\n\t */\r\n\tclone: function(source) {\r\n\t\tif (helpers.isArray(source)) {\r\n\t\t\treturn source.map(helpers.clone);\r\n\t\t}\r\n\r\n\t\tif (helpers.isObject(source)) {\r\n\t\t\tvar target = Object.create(source);\r\n\t\t\tvar keys = Object.keys(source);\r\n\t\t\tvar klen = keys.length;\r\n\t\t\tvar k = 0;\r\n\r\n\t\t\tfor (; k < klen; ++k) {\r\n\t\t\t\ttarget[keys[k]] = helpers.clone(source[keys[k]]);\r\n\t\t\t}\r\n\r\n\t\t\treturn target;\r\n\t\t}\r\n\r\n\t\treturn source;\r\n\t},\r\n\r\n\t/**\r\n\t * The default merger when Chart.helpers.merge is called without merger option.\r\n\t * Note(SB): also used by mergeConfig and mergeScaleConfig as fallback.\r\n\t * @private\r\n\t */\r\n\t_merger: function(key, target, source, options) {\r\n\t\tif (!isValidKey(key)) {\r\n\t\t\t// We want to ensure we do not copy prototypes over\r\n\t\t\t// as this can pollute global namespaces\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tvar tval = target[key];\r\n\t\tvar sval = source[key];\r\n\r\n\t\tif (helpers.isObject(tval) && helpers.isObject(sval)) {\r\n\t\t\thelpers.merge(tval, sval, options);\r\n\t\t} else {\r\n\t\t\ttarget[key] = helpers.clone(sval);\r\n\t\t}\r\n\t},\r\n\r\n\t/**\r\n\t * Merges source[key] in target[key] only if target[key] is undefined.\r\n\t * @private\r\n\t */\r\n\t_mergerIf: function(key, target, source) {\r\n\t\tif (!isValidKey(key)) {\r\n\t\t\t// We want to ensure we do not copy prototypes over\r\n\t\t\t// as this can pollute global namespaces\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tvar tval = target[key];\r\n\t\tvar sval = source[key];\r\n\r\n\t\tif (helpers.isObject(tval) && helpers.isObject(sval)) {\r\n\t\t\thelpers.mergeIf(tval, sval);\r\n\t\t} else if (!target.hasOwnProperty(key)) {\r\n\t\t\ttarget[key] = helpers.clone(sval);\r\n\t\t}\r\n\t},\r\n\r\n\t/**\r\n\t * Recursively deep copies `source` properties into `target` with the given `options`.\r\n\t * IMPORTANT: `target` is not cloned and will be updated with `source` properties.\r\n\t * @param {object} target - The target object in which all sources are merged into.\r\n\t * @param {object|object[]} source - Object(s) to merge into `target`.\r\n\t * @param {object} [options] - Merging options:\r\n\t * @param {function} [options.merger] - The merge method (key, target, source, options)\r\n\t * @returns {object} The `target` object.\r\n\t */\r\n\tmerge: function(target, source, options) {\r\n\t\tvar sources = helpers.isArray(source) ? source : [source];\r\n\t\tvar ilen = sources.length;\r\n\t\tvar merge, i, keys, klen, k;\r\n\r\n\t\tif (!helpers.isObject(target)) {\r\n\t\t\treturn target;\r\n\t\t}\r\n\r\n\t\toptions = options || {};\r\n\t\tmerge = options.merger || helpers._merger;\r\n\r\n\t\tfor (i = 0; i < ilen; ++i) {\r\n\t\t\tsource = sources[i];\r\n\t\t\tif (!helpers.isObject(source)) {\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\tkeys = Object.keys(source);\r\n\t\t\tfor (k = 0, klen = keys.length; k < klen; ++k) {\r\n\t\t\t\tmerge(keys[k], target, source, options);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn target;\r\n\t},\r\n\r\n\t/**\r\n\t * Recursively deep copies `source` properties into `target` *only* if not defined in target.\r\n\t * IMPORTANT: `target` is not cloned and will be updated with `source` properties.\r\n\t * @param {object} target - The target object in which all sources are merged into.\r\n\t * @param {object|object[]} source - Object(s) to merge into `target`.\r\n\t * @returns {object} The `target` object.\r\n\t */\r\n\tmergeIf: function(target, source) {\r\n\t\treturn helpers.merge(target, source, {merger: helpers._mergerIf});\r\n\t},\r\n\r\n\t/**\r\n\t * Applies the contents of two or more objects together into the first object.\r\n\t * @param {object} target - The target object in which all objects are merged into.\r\n\t * @param {object} arg1 - Object containing additional properties to merge in target.\r\n\t * @param {object} argN - Additional objects containing properties to merge in target.\r\n\t * @returns {object} The `target` object.\r\n\t */\r\n\textend: Object.assign || function(target) {\r\n\t\treturn helpers.merge(target, [].slice.call(arguments, 1), {\r\n\t\t\tmerger: function(key, dst, src) {\r\n\t\t\t\tdst[key] = src[key];\r\n\t\t\t}\r\n\t\t});\r\n\t},\r\n\r\n\t/**\r\n\t * Basic javascript inheritance based on the model created in Backbone.js\r\n\t */\r\n\tinherits: function(extensions) {\r\n\t\tvar me = this;\r\n\t\tvar ChartElement = (extensions && extensions.hasOwnProperty('constructor')) ? extensions.constructor : function() {\r\n\t\t\treturn me.apply(this, arguments);\r\n\t\t};\r\n\r\n\t\tvar Surrogate = function() {\r\n\t\t\tthis.constructor = ChartElement;\r\n\t\t};\r\n\r\n\t\tSurrogate.prototype = me.prototype;\r\n\t\tChartElement.prototype = new Surrogate();\r\n\t\tChartElement.extend = helpers.inherits;\r\n\r\n\t\tif (extensions) {\r\n\t\t\thelpers.extend(ChartElement.prototype, extensions);\r\n\t\t}\r\n\r\n\t\tChartElement.__super__ = me.prototype;\r\n\t\treturn ChartElement;\r\n\t},\r\n\r\n\t_deprecated: function(scope, value, previous, current) {\r\n\t\tif (value !== undefined) {\r\n\t\t\tconsole.warn(scope + ': \"' + previous +\r\n\t\t\t\t'\" is deprecated. Please use \"' + current + '\" instead');\r\n\t\t}\r\n\t}\r\n};\r\n\r\nvar helpers_core = helpers;\r\n\r\n// DEPRECATIONS\r\n\r\n/**\r\n * Provided for backward compatibility, use Chart.helpers.callback instead.\r\n * @function Chart.helpers.callCallback\r\n * @deprecated since version 2.6.0\r\n * @todo remove at version 3\r\n * @private\r\n */\r\nhelpers.callCallback = helpers.callback;\r\n\r\n/**\r\n * Provided for backward compatibility, use Array.prototype.indexOf instead.\r\n * Array.prototype.indexOf compatibility: Chrome, Opera, Safari, FF1.5+, IE9+\r\n * @function Chart.helpers.indexOf\r\n * @deprecated since version 2.7.0\r\n * @todo remove at version 3\r\n * @private\r\n */\r\nhelpers.indexOf = function(array, item, fromIndex) {\r\n\treturn Array.prototype.indexOf.call(array, item, fromIndex);\r\n};\r\n\r\n/**\r\n * Provided for backward compatibility, use Chart.helpers.valueOrDefault instead.\r\n * @function Chart.helpers.getValueOrDefault\r\n * @deprecated since version 2.7.0\r\n * @todo remove at version 3\r\n * @private\r\n */\r\nhelpers.getValueOrDefault = helpers.valueOrDefault;\r\n\r\n/**\r\n * Provided for backward compatibility, use Chart.helpers.valueAtIndexOrDefault instead.\r\n * @function Chart.helpers.getValueAtIndexOrDefault\r\n * @deprecated since version 2.7.0\r\n * @todo remove at version 3\r\n * @private\r\n */\r\nhelpers.getValueAtIndexOrDefault = helpers.valueAtIndexOrDefault;\n\n/**\r\n * Easing functions adapted from Robert Penner's easing equations.\r\n * @namespace Chart.helpers.easingEffects\r\n * @see http://www.robertpenner.com/easing/\r\n */\r\nvar effects = {\r\n\tlinear: function(t) {\r\n\t\treturn t;\r\n\t},\r\n\r\n\teaseInQuad: function(t) {\r\n\t\treturn t * t;\r\n\t},\r\n\r\n\teaseOutQuad: function(t) {\r\n\t\treturn -t * (t - 2);\r\n\t},\r\n\r\n\teaseInOutQuad: function(t) {\r\n\t\tif ((t /= 0.5) < 1) {\r\n\t\t\treturn 0.5 * t * t;\r\n\t\t}\r\n\t\treturn -0.5 * ((--t) * (t - 2) - 1);\r\n\t},\r\n\r\n\teaseInCubic: function(t) {\r\n\t\treturn t * t * t;\r\n\t},\r\n\r\n\teaseOutCubic: function(t) {\r\n\t\treturn (t = t - 1) * t * t + 1;\r\n\t},\r\n\r\n\teaseInOutCubic: function(t) {\r\n\t\tif ((t /= 0.5) < 1) {\r\n\t\t\treturn 0.5 * t * t * t;\r\n\t\t}\r\n\t\treturn 0.5 * ((t -= 2) * t * t + 2);\r\n\t},\r\n\r\n\teaseInQuart: function(t) {\r\n\t\treturn t * t * t * t;\r\n\t},\r\n\r\n\teaseOutQuart: function(t) {\r\n\t\treturn -((t = t - 1) * t * t * t - 1);\r\n\t},\r\n\r\n\teaseInOutQuart: function(t) {\r\n\t\tif ((t /= 0.5) < 1) {\r\n\t\t\treturn 0.5 * t * t * t * t;\r\n\t\t}\r\n\t\treturn -0.5 * ((t -= 2) * t * t * t - 2);\r\n\t},\r\n\r\n\teaseInQuint: function(t) {\r\n\t\treturn t * t * t * t * t;\r\n\t},\r\n\r\n\teaseOutQuint: function(t) {\r\n\t\treturn (t = t - 1) * t * t * t * t + 1;\r\n\t},\r\n\r\n\teaseInOutQuint: function(t) {\r\n\t\tif ((t /= 0.5) < 1) {\r\n\t\t\treturn 0.5 * t * t * t * t * t;\r\n\t\t}\r\n\t\treturn 0.5 * ((t -= 2) * t * t * t * t + 2);\r\n\t},\r\n\r\n\teaseInSine: function(t) {\r\n\t\treturn -Math.cos(t * (Math.PI / 2)) + 1;\r\n\t},\r\n\r\n\teaseOutSine: function(t) {\r\n\t\treturn Math.sin(t * (Math.PI / 2));\r\n\t},\r\n\r\n\teaseInOutSine: function(t) {\r\n\t\treturn -0.5 * (Math.cos(Math.PI * t) - 1);\r\n\t},\r\n\r\n\teaseInExpo: function(t) {\r\n\t\treturn (t === 0) ? 0 : Math.pow(2, 10 * (t - 1));\r\n\t},\r\n\r\n\teaseOutExpo: function(t) {\r\n\t\treturn (t === 1) ? 1 : -Math.pow(2, -10 * t) + 1;\r\n\t},\r\n\r\n\teaseInOutExpo: function(t) {\r\n\t\tif (t === 0) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\t\tif (t === 1) {\r\n\t\t\treturn 1;\r\n\t\t}\r\n\t\tif ((t /= 0.5) < 1) {\r\n\t\t\treturn 0.5 * Math.pow(2, 10 * (t - 1));\r\n\t\t}\r\n\t\treturn 0.5 * (-Math.pow(2, -10 * --t) + 2);\r\n\t},\r\n\r\n\teaseInCirc: function(t) {\r\n\t\tif (t >= 1) {\r\n\t\t\treturn t;\r\n\t\t}\r\n\t\treturn -(Math.sqrt(1 - t * t) - 1);\r\n\t},\r\n\r\n\teaseOutCirc: function(t) {\r\n\t\treturn Math.sqrt(1 - (t = t - 1) * t);\r\n\t},\r\n\r\n\teaseInOutCirc: function(t) {\r\n\t\tif ((t /= 0.5) < 1) {\r\n\t\t\treturn -0.5 * (Math.sqrt(1 - t * t) - 1);\r\n\t\t}\r\n\t\treturn 0.5 * (Math.sqrt(1 - (t -= 2) * t) + 1);\r\n\t},\r\n\r\n\teaseInElastic: function(t) {\r\n\t\tvar s = 1.70158;\r\n\t\tvar p = 0;\r\n\t\tvar a = 1;\r\n\t\tif (t === 0) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\t\tif (t === 1) {\r\n\t\t\treturn 1;\r\n\t\t}\r\n\t\tif (!p) {\r\n\t\t\tp = 0.3;\r\n\t\t}\r\n\t\tif (a < 1) {\r\n\t\t\ta = 1;\r\n\t\t\ts = p / 4;\r\n\t\t} else {\r\n\t\t\ts = p / (2 * Math.PI) * Math.asin(1 / a);\r\n\t\t}\r\n\t\treturn -(a * Math.pow(2, 10 * (t -= 1)) * Math.sin((t - s) * (2 * Math.PI) / p));\r\n\t},\r\n\r\n\teaseOutElastic: function(t) {\r\n\t\tvar s = 1.70158;\r\n\t\tvar p = 0;\r\n\t\tvar a = 1;\r\n\t\tif (t === 0) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\t\tif (t === 1) {\r\n\t\t\treturn 1;\r\n\t\t}\r\n\t\tif (!p) {\r\n\t\t\tp = 0.3;\r\n\t\t}\r\n\t\tif (a < 1) {\r\n\t\t\ta = 1;\r\n\t\t\ts = p / 4;\r\n\t\t} else {\r\n\t\t\ts = p / (2 * Math.PI) * Math.asin(1 / a);\r\n\t\t}\r\n\t\treturn a * Math.pow(2, -10 * t) * Math.sin((t - s) * (2 * Math.PI) / p) + 1;\r\n\t},\r\n\r\n\teaseInOutElastic: function(t) {\r\n\t\tvar s = 1.70158;\r\n\t\tvar p = 0;\r\n\t\tvar a = 1;\r\n\t\tif (t === 0) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\t\tif ((t /= 0.5) === 2) {\r\n\t\t\treturn 1;\r\n\t\t}\r\n\t\tif (!p) {\r\n\t\t\tp = 0.45;\r\n\t\t}\r\n\t\tif (a < 1) {\r\n\t\t\ta = 1;\r\n\t\t\ts = p / 4;\r\n\t\t} else {\r\n\t\t\ts = p / (2 * Math.PI) * Math.asin(1 / a);\r\n\t\t}\r\n\t\tif (t < 1) {\r\n\t\t\treturn -0.5 * (a * Math.pow(2, 10 * (t -= 1)) * Math.sin((t - s) * (2 * Math.PI) / p));\r\n\t\t}\r\n\t\treturn a * Math.pow(2, -10 * (t -= 1)) * Math.sin((t - s) * (2 * Math.PI) / p) * 0.5 + 1;\r\n\t},\r\n\teaseInBack: function(t) {\r\n\t\tvar s = 1.70158;\r\n\t\treturn t * t * ((s + 1) * t - s);\r\n\t},\r\n\r\n\teaseOutBack: function(t) {\r\n\t\tvar s = 1.70158;\r\n\t\treturn (t = t - 1) * t * ((s + 1) * t + s) + 1;\r\n\t},\r\n\r\n\teaseInOutBack: function(t) {\r\n\t\tvar s = 1.70158;\r\n\t\tif ((t /= 0.5) < 1) {\r\n\t\t\treturn 0.5 * (t * t * (((s *= (1.525)) + 1) * t - s));\r\n\t\t}\r\n\t\treturn 0.5 * ((t -= 2) * t * (((s *= (1.525)) + 1) * t + s) + 2);\r\n\t},\r\n\r\n\teaseInBounce: function(t) {\r\n\t\treturn 1 - effects.easeOutBounce(1 - t);\r\n\t},\r\n\r\n\teaseOutBounce: function(t) {\r\n\t\tif (t < (1 / 2.75)) {\r\n\t\t\treturn 7.5625 * t * t;\r\n\t\t}\r\n\t\tif (t < (2 / 2.75)) {\r\n\t\t\treturn 7.5625 * (t -= (1.5 / 2.75)) * t + 0.75;\r\n\t\t}\r\n\t\tif (t < (2.5 / 2.75)) {\r\n\t\t\treturn 7.5625 * (t -= (2.25 / 2.75)) * t + 0.9375;\r\n\t\t}\r\n\t\treturn 7.5625 * (t -= (2.625 / 2.75)) * t + 0.984375;\r\n\t},\r\n\r\n\teaseInOutBounce: function(t) {\r\n\t\tif (t < 0.5) {\r\n\t\t\treturn effects.easeInBounce(t * 2) * 0.5;\r\n\t\t}\r\n\t\treturn effects.easeOutBounce(t * 2 - 1) * 0.5 + 0.5;\r\n\t}\r\n};\r\n\r\nvar helpers_easing = {\r\n\teffects: effects\r\n};\r\n\r\n// DEPRECATIONS\r\n\r\n/**\r\n * Provided for backward compatibility, use Chart.helpers.easing.effects instead.\r\n * @function Chart.helpers.easingEffects\r\n * @deprecated since version 2.7.0\r\n * @todo remove at version 3\r\n * @private\r\n */\r\nhelpers_core.easingEffects = effects;\n\nvar PI = Math.PI;\r\nvar RAD_PER_DEG = PI / 180;\r\nvar DOUBLE_PI = PI * 2;\r\nvar HALF_PI = PI / 2;\r\nvar QUARTER_PI = PI / 4;\r\nvar TWO_THIRDS_PI = PI * 2 / 3;\r\n\r\n/**\r\n * @namespace Chart.helpers.canvas\r\n */\r\nvar exports$1 = {\r\n\t/**\r\n\t * Clears the entire canvas associated to the given `chart`.\r\n\t * @param {Chart} chart - The chart for which to clear the canvas.\r\n\t */\r\n\tclear: function(chart) {\r\n\t\tchart.ctx.clearRect(0, 0, chart.width, chart.height);\r\n\t},\r\n\r\n\t/**\r\n\t * Creates a \"path\" for a rectangle with rounded corners at position (x, y) with a\r\n\t * given size (width, height) and the same `radius` for all corners.\r\n\t * @param {CanvasRenderingContext2D} ctx - The canvas 2D Context.\r\n\t * @param {number} x - The x axis of the coordinate for the rectangle starting point.\r\n\t * @param {number} y - The y axis of the coordinate for the rectangle starting point.\r\n\t * @param {number} width - The rectangle's width.\r\n\t * @param {number} height - The rectangle's height.\r\n\t * @param {number} radius - The rounded amount (in pixels) for the four corners.\r\n\t * @todo handle `radius` as top-left, top-right, bottom-right, bottom-left array/object?\r\n\t */\r\n\troundedRect: function(ctx, x, y, width, height, radius) {\r\n\t\tif (radius) {\r\n\t\t\tvar r = Math.min(radius, height / 2, width / 2);\r\n\t\t\tvar left = x + r;\r\n\t\t\tvar top = y + r;\r\n\t\t\tvar right = x + width - r;\r\n\t\t\tvar bottom = y + height - r;\r\n\r\n\t\t\tctx.moveTo(x, top);\r\n\t\t\tif (left < right && top < bottom) {\r\n\t\t\t\tctx.arc(left, top, r, -PI, -HALF_PI);\r\n\t\t\t\tctx.arc(right, top, r, -HALF_PI, 0);\r\n\t\t\t\tctx.arc(right, bottom, r, 0, HALF_PI);\r\n\t\t\t\tctx.arc(left, bottom, r, HALF_PI, PI);\r\n\t\t\t} else if (left < right) {\r\n\t\t\t\tctx.moveTo(left, y);\r\n\t\t\t\tctx.arc(right, top, r, -HALF_PI, HALF_PI);\r\n\t\t\t\tctx.arc(left, top, r, HALF_PI, PI + HALF_PI);\r\n\t\t\t} else if (top < bottom) {\r\n\t\t\t\tctx.arc(left, top, r, -PI, 0);\r\n\t\t\t\tctx.arc(left, bottom, r, 0, PI);\r\n\t\t\t} else {\r\n\t\t\t\tctx.arc(left, top, r, -PI, PI);\r\n\t\t\t}\r\n\t\t\tctx.closePath();\r\n\t\t\tctx.moveTo(x, y);\r\n\t\t} else {\r\n\t\t\tctx.rect(x, y, width, height);\r\n\t\t}\r\n\t},\r\n\r\n\tdrawPoint: function(ctx, style, radius, x, y, rotation) {\r\n\t\tvar type, xOffset, yOffset, size, cornerRadius;\r\n\t\tvar rad = (rotation || 0) * RAD_PER_DEG;\r\n\r\n\t\tif (style && typeof style === 'object') {\r\n\t\t\ttype = style.toString();\r\n\t\t\tif (type === '[object HTMLImageElement]' || type === '[object HTMLCanvasElement]') {\r\n\t\t\t\tctx.save();\r\n\t\t\t\tctx.translate(x, y);\r\n\t\t\t\tctx.rotate(rad);\r\n\t\t\t\tctx.drawImage(style, -style.width / 2, -style.height / 2, style.width, style.height);\r\n\t\t\t\tctx.restore();\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (isNaN(radius) || radius <= 0) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tctx.beginPath();\r\n\r\n\t\tswitch (style) {\r\n\t\t// Default includes circle\r\n\t\tdefault:\r\n\t\t\tctx.arc(x, y, radius, 0, DOUBLE_PI);\r\n\t\t\tctx.closePath();\r\n\t\t\tbreak;\r\n\t\tcase 'triangle':\r\n\t\t\tctx.moveTo(x + Math.sin(rad) * radius, y - Math.cos(rad) * radius);\r\n\t\t\trad += TWO_THIRDS_PI;\r\n\t\t\tctx.lineTo(x + Math.sin(rad) * radius, y - Math.cos(rad) * radius);\r\n\t\t\trad += TWO_THIRDS_PI;\r\n\t\t\tctx.lineTo(x + Math.sin(rad) * radius, y - Math.cos(rad) * radius);\r\n\t\t\tctx.closePath();\r\n\t\t\tbreak;\r\n\t\tcase 'rectRounded':\r\n\t\t\t// NOTE: the rounded rect implementation changed to use `arc` instead of\r\n\t\t\t// `quadraticCurveTo` since it generates better results when rect is\r\n\t\t\t// almost a circle. 0.516 (instead of 0.5) produces results with visually\r\n\t\t\t// closer proportion to the previous impl and it is inscribed in the\r\n\t\t\t// circle with `radius`. For more details, see the following PRs:\r\n\t\t\t// https://github.com/chartjs/Chart.js/issues/5597\r\n\t\t\t// https://github.com/chartjs/Chart.js/issues/5858\r\n\t\t\tcornerRadius = radius * 0.516;\r\n\t\t\tsize = radius - cornerRadius;\r\n\t\t\txOffset = Math.cos(rad + QUARTER_PI) * size;\r\n\t\t\tyOffset = Math.sin(rad + QUARTER_PI) * size;\r\n\t\t\tctx.arc(x - xOffset, y - yOffset, cornerRadius, rad - PI, rad - HALF_PI);\r\n\t\t\tctx.arc(x + yOffset, y - xOffset, cornerRadius, rad - HALF_PI, rad);\r\n\t\t\tctx.arc(x + xOffset, y + yOffset, cornerRadius, rad, rad + HALF_PI);\r\n\t\t\tctx.arc(x - yOffset, y + xOffset, cornerRadius, rad + HALF_PI, rad + PI);\r\n\t\t\tctx.closePath();\r\n\t\t\tbreak;\r\n\t\tcase 'rect':\r\n\t\t\tif (!rotation) {\r\n\t\t\t\tsize = Math.SQRT1_2 * radius;\r\n\t\t\t\tctx.rect(x - size, y - size, 2 * size, 2 * size);\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t\trad += QUARTER_PI;\r\n\t\t\t/* falls through */\r\n\t\tcase 'rectRot':\r\n\t\t\txOffset = Math.cos(rad) * radius;\r\n\t\t\tyOffset = Math.sin(rad) * radius;\r\n\t\t\tctx.moveTo(x - xOffset, y - yOffset);\r\n\t\t\tctx.lineTo(x + yOffset, y - xOffset);\r\n\t\t\tctx.lineTo(x + xOffset, y + yOffset);\r\n\t\t\tctx.lineTo(x - yOffset, y + xOffset);\r\n\t\t\tctx.closePath();\r\n\t\t\tbreak;\r\n\t\tcase 'crossRot':\r\n\t\t\trad += QUARTER_PI;\r\n\t\t\t/* falls through */\r\n\t\tcase 'cross':\r\n\t\t\txOffset = Math.cos(rad) * radius;\r\n\t\t\tyOffset = Math.sin(rad) * radius;\r\n\t\t\tctx.moveTo(x - xOffset, y - yOffset);\r\n\t\t\tctx.lineTo(x + xOffset, y + yOffset);\r\n\t\t\tctx.moveTo(x + yOffset, y - xOffset);\r\n\t\t\tctx.lineTo(x - yOffset, y + xOffset);\r\n\t\t\tbreak;\r\n\t\tcase 'star':\r\n\t\t\txOffset = Math.cos(rad) * radius;\r\n\t\t\tyOffset = Math.sin(rad) * radius;\r\n\t\t\tctx.moveTo(x - xOffset, y - yOffset);\r\n\t\t\tctx.lineTo(x + xOffset, y + yOffset);\r\n\t\t\tctx.moveTo(x + yOffset, y - xOffset);\r\n\t\t\tctx.lineTo(x - yOffset, y + xOffset);\r\n\t\t\trad += QUARTER_PI;\r\n\t\t\txOffset = Math.cos(rad) * radius;\r\n\t\t\tyOffset = Math.sin(rad) * radius;\r\n\t\t\tctx.moveTo(x - xOffset, y - yOffset);\r\n\t\t\tctx.lineTo(x + xOffset, y + yOffset);\r\n\t\t\tctx.moveTo(x + yOffset, y - xOffset);\r\n\t\t\tctx.lineTo(x - yOffset, y + xOffset);\r\n\t\t\tbreak;\r\n\t\tcase 'line':\r\n\t\t\txOffset = Math.cos(rad) * radius;\r\n\t\t\tyOffset = Math.sin(rad) * radius;\r\n\t\t\tctx.moveTo(x - xOffset, y - yOffset);\r\n\t\t\tctx.lineTo(x + xOffset, y + yOffset);\r\n\t\t\tbreak;\r\n\t\tcase 'dash':\r\n\t\t\tctx.moveTo(x, y);\r\n\t\t\tctx.lineTo(x + Math.cos(rad) * radius, y + Math.sin(rad) * radius);\r\n\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\tctx.fill();\r\n\t\tctx.stroke();\r\n\t},\r\n\r\n\t/**\r\n\t * Returns true if the point is inside the rectangle\r\n\t * @param {object} point - The point to test\r\n\t * @param {object} area - The rectangle\r\n\t * @returns {boolean}\r\n\t * @private\r\n\t */\r\n\t_isPointInArea: function(point, area) {\r\n\t\tvar epsilon = 1e-6; // 1e-6 is margin in pixels for accumulated error.\r\n\r\n\t\treturn point.x > area.left - epsilon && point.x < area.right + epsilon &&\r\n\t\t\tpoint.y > area.top - epsilon && point.y < area.bottom + epsilon;\r\n\t},\r\n\r\n\tclipArea: function(ctx, area) {\r\n\t\tctx.save();\r\n\t\tctx.beginPath();\r\n\t\tctx.rect(area.left, area.top, area.right - area.left, area.bottom - area.top);\r\n\t\tctx.clip();\r\n\t},\r\n\r\n\tunclipArea: function(ctx) {\r\n\t\tctx.restore();\r\n\t},\r\n\r\n\tlineTo: function(ctx, previous, target, flip) {\r\n\t\tvar stepped = target.steppedLine;\r\n\t\tif (stepped) {\r\n\t\t\tif (stepped === 'middle') {\r\n\t\t\t\tvar midpoint = (previous.x + target.x) / 2.0;\r\n\t\t\t\tctx.lineTo(midpoint, flip ? target.y : previous.y);\r\n\t\t\t\tctx.lineTo(midpoint, flip ? previous.y : target.y);\r\n\t\t\t} else if ((stepped === 'after' && !flip) || (stepped !== 'after' && flip)) {\r\n\t\t\t\tctx.lineTo(previous.x, target.y);\r\n\t\t\t} else {\r\n\t\t\t\tctx.lineTo(target.x, previous.y);\r\n\t\t\t}\r\n\t\t\tctx.lineTo(target.x, target.y);\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (!target.tension) {\r\n\t\t\tctx.lineTo(target.x, target.y);\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tctx.bezierCurveTo(\r\n\t\t\tflip ? previous.controlPointPreviousX : previous.controlPointNextX,\r\n\t\t\tflip ? previous.controlPointPreviousY : previous.controlPointNextY,\r\n\t\t\tflip ? target.controlPointNextX : target.controlPointPreviousX,\r\n\t\t\tflip ? target.controlPointNextY : target.controlPointPreviousY,\r\n\t\t\ttarget.x,\r\n\t\t\ttarget.y);\r\n\t}\r\n};\r\n\r\nvar helpers_canvas = exports$1;\r\n\r\n// DEPRECATIONS\r\n\r\n/**\r\n * Provided for backward compatibility, use Chart.helpers.canvas.clear instead.\r\n * @namespace Chart.helpers.clear\r\n * @deprecated since version 2.7.0\r\n * @todo remove at version 3\r\n * @private\r\n */\r\nhelpers_core.clear = exports$1.clear;\r\n\r\n/**\r\n * Provided for backward compatibility, use Chart.helpers.canvas.roundedRect instead.\r\n * @namespace Chart.helpers.drawRoundedRectangle\r\n * @deprecated since version 2.7.0\r\n * @todo remove at version 3\r\n * @private\r\n */\r\nhelpers_core.drawRoundedRectangle = function(ctx) {\r\n\tctx.beginPath();\r\n\texports$1.roundedRect.apply(exports$1, arguments);\r\n};\n\nvar defaults = {\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_set: function(scope, values) {\r\n\t\treturn helpers_core.merge(this[scope] || (this[scope] = {}), values);\r\n\t}\r\n};\r\n\r\n// TODO(v3): remove 'global' from namespace.  all default are global and\r\n// there's inconsistency around which options are under 'global'\r\ndefaults._set('global', {\r\n\tdefaultColor: 'rgba(0,0,0,0.1)',\r\n\tdefaultFontColor: '#666',\r\n\tdefaultFontFamily: \"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif\",\r\n\tdefaultFontSize: 12,\r\n\tdefaultFontStyle: 'normal',\r\n\tdefaultLineHeight: 1.2,\r\n\tshowLines: true\r\n});\r\n\r\nvar core_defaults = defaults;\n\nvar valueOrDefault = helpers_core.valueOrDefault;\r\n\r\n/**\r\n * Converts the given font object into a CSS font string.\r\n * @param {object} font - A font object.\r\n * @return {string} The CSS font string. See https://developer.mozilla.org/en-US/docs/Web/CSS/font\r\n * @private\r\n */\r\nfunction toFontString(font) {\r\n\tif (!font || helpers_core.isNullOrUndef(font.size) || helpers_core.isNullOrUndef(font.family)) {\r\n\t\treturn null;\r\n\t}\r\n\r\n\treturn (font.style ? font.style + ' ' : '')\r\n\t\t+ (font.weight ? font.weight + ' ' : '')\r\n\t\t+ font.size + 'px '\r\n\t\t+ font.family;\r\n}\r\n\r\n/**\r\n * @alias Chart.helpers.options\r\n * @namespace\r\n */\r\nvar helpers_options = {\r\n\t/**\r\n\t * Converts the given line height `value` in pixels for a specific font `size`.\r\n\t * @param {number|string} value - The lineHeight to parse (eg. 1.6, '14px', '75%', '1.6em').\r\n\t * @param {number} size - The font size (in pixels) used to resolve relative `value`.\r\n\t * @returns {number} The effective line height in pixels (size * 1.2 if value is invalid).\r\n\t * @see https://developer.mozilla.org/en-US/docs/Web/CSS/line-height\r\n\t * @since 2.7.0\r\n\t */\r\n\ttoLineHeight: function(value, size) {\r\n\t\tvar matches = ('' + value).match(/^(normal|(\\d+(?:\\.\\d+)?)(px|em|%)?)$/);\r\n\t\tif (!matches || matches[1] === 'normal') {\r\n\t\t\treturn size * 1.2;\r\n\t\t}\r\n\r\n\t\tvalue = +matches[2];\r\n\r\n\t\tswitch (matches[3]) {\r\n\t\tcase 'px':\r\n\t\t\treturn value;\r\n\t\tcase '%':\r\n\t\t\tvalue /= 100;\r\n\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\treturn size * value;\r\n\t},\r\n\r\n\t/**\r\n\t * Converts the given value into a padding object with pre-computed width/height.\r\n\t * @param {number|object} value - If a number, set the value to all TRBL component,\r\n\t *  else, if and object, use defined properties and sets undefined ones to 0.\r\n\t * @returns {object} The padding values (top, right, bottom, left, width, height)\r\n\t * @since 2.7.0\r\n\t */\r\n\ttoPadding: function(value) {\r\n\t\tvar t, r, b, l;\r\n\r\n\t\tif (helpers_core.isObject(value)) {\r\n\t\t\tt = +value.top || 0;\r\n\t\t\tr = +value.right || 0;\r\n\t\t\tb = +value.bottom || 0;\r\n\t\t\tl = +value.left || 0;\r\n\t\t} else {\r\n\t\t\tt = r = b = l = +value || 0;\r\n\t\t}\r\n\r\n\t\treturn {\r\n\t\t\ttop: t,\r\n\t\t\tright: r,\r\n\t\t\tbottom: b,\r\n\t\t\tleft: l,\r\n\t\t\theight: t + b,\r\n\t\t\twidth: l + r\r\n\t\t};\r\n\t},\r\n\r\n\t/**\r\n\t * Parses font options and returns the font object.\r\n\t * @param {object} options - A object that contains font options to be parsed.\r\n\t * @return {object} The font object.\r\n\t * @todo Support font.* options and renamed to toFont().\r\n\t * @private\r\n\t */\r\n\t_parseFont: function(options) {\r\n\t\tvar globalDefaults = core_defaults.global;\r\n\t\tvar size = valueOrDefault(options.fontSize, globalDefaults.defaultFontSize);\r\n\t\tvar font = {\r\n\t\t\tfamily: valueOrDefault(options.fontFamily, globalDefaults.defaultFontFamily),\r\n\t\t\tlineHeight: helpers_core.options.toLineHeight(valueOrDefault(options.lineHeight, globalDefaults.defaultLineHeight), size),\r\n\t\t\tsize: size,\r\n\t\t\tstyle: valueOrDefault(options.fontStyle, globalDefaults.defaultFontStyle),\r\n\t\t\tweight: null,\r\n\t\t\tstring: ''\r\n\t\t};\r\n\r\n\t\tfont.string = toFontString(font);\r\n\t\treturn font;\r\n\t},\r\n\r\n\t/**\r\n\t * Evaluates the given `inputs` sequentially and returns the first defined value.\r\n\t * @param {Array} inputs - An array of values, falling back to the last value.\r\n\t * @param {object} [context] - If defined and the current value is a function, the value\r\n\t * is called with `context` as first argument and the result becomes the new input.\r\n\t * @param {number} [index] - If defined and the current value is an array, the value\r\n\t * at `index` become the new input.\r\n\t * @param {object} [info] - object to return information about resolution in\r\n\t * @param {boolean} [info.cacheable] - Will be set to `false` if option is not cacheable.\r\n\t * @since 2.7.0\r\n\t */\r\n\tresolve: function(inputs, context, index, info) {\r\n\t\tvar cacheable = true;\r\n\t\tvar i, ilen, value;\r\n\r\n\t\tfor (i = 0, ilen = inputs.length; i < ilen; ++i) {\r\n\t\t\tvalue = inputs[i];\r\n\t\t\tif (value === undefined) {\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\t\t\tif (context !== undefined && typeof value === 'function') {\r\n\t\t\t\tvalue = value(context);\r\n\t\t\t\tcacheable = false;\r\n\t\t\t}\r\n\t\t\tif (index !== undefined && helpers_core.isArray(value)) {\r\n\t\t\t\tvalue = value[index];\r\n\t\t\t\tcacheable = false;\r\n\t\t\t}\r\n\t\t\tif (value !== undefined) {\r\n\t\t\t\tif (info && !cacheable) {\r\n\t\t\t\t\tinfo.cacheable = false;\r\n\t\t\t\t}\r\n\t\t\t\treturn value;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n};\n\n/**\r\n * @alias Chart.helpers.math\r\n * @namespace\r\n */\r\nvar exports$2 = {\r\n\t/**\r\n\t * Returns an array of factors sorted from 1 to sqrt(value)\r\n\t * @private\r\n\t */\r\n\t_factorize: function(value) {\r\n\t\tvar result = [];\r\n\t\tvar sqrt = Math.sqrt(value);\r\n\t\tvar i;\r\n\r\n\t\tfor (i = 1; i < sqrt; i++) {\r\n\t\t\tif (value % i === 0) {\r\n\t\t\t\tresult.push(i);\r\n\t\t\t\tresult.push(value / i);\r\n\t\t\t}\r\n\t\t}\r\n\t\tif (sqrt === (sqrt | 0)) { // if value is a square number\r\n\t\t\tresult.push(sqrt);\r\n\t\t}\r\n\r\n\t\tresult.sort(function(a, b) {\r\n\t\t\treturn a - b;\r\n\t\t}).pop();\r\n\t\treturn result;\r\n\t},\r\n\r\n\tlog10: Math.log10 || function(x) {\r\n\t\tvar exponent = Math.log(x) * Math.LOG10E; // Math.LOG10E = 1 / Math.LN10.\r\n\t\t// Check for whole powers of 10,\r\n\t\t// which due to floating point rounding error should be corrected.\r\n\t\tvar powerOf10 = Math.round(exponent);\r\n\t\tvar isPowerOf10 = x === Math.pow(10, powerOf10);\r\n\r\n\t\treturn isPowerOf10 ? powerOf10 : exponent;\r\n\t}\r\n};\r\n\r\nvar helpers_math = exports$2;\r\n\r\n// DEPRECATIONS\r\n\r\n/**\r\n * Provided for backward compatibility, use Chart.helpers.math.log10 instead.\r\n * @namespace Chart.helpers.log10\r\n * @deprecated since version 2.9.0\r\n * @todo remove at version 3\r\n * @private\r\n */\r\nhelpers_core.log10 = exports$2.log10;\n\nvar getRtlAdapter = function(rectX, width) {\r\n\treturn {\r\n\t\tx: function(x) {\r\n\t\t\treturn rectX + rectX + width - x;\r\n\t\t},\r\n\t\tsetWidth: function(w) {\r\n\t\t\twidth = w;\r\n\t\t},\r\n\t\ttextAlign: function(align) {\r\n\t\t\tif (align === 'center') {\r\n\t\t\t\treturn align;\r\n\t\t\t}\r\n\t\t\treturn align === 'right' ? 'left' : 'right';\r\n\t\t},\r\n\t\txPlus: function(x, value) {\r\n\t\t\treturn x - value;\r\n\t\t},\r\n\t\tleftForLtr: function(x, itemWidth) {\r\n\t\t\treturn x - itemWidth;\r\n\t\t},\r\n\t};\r\n};\r\n\r\nvar getLtrAdapter = function() {\r\n\treturn {\r\n\t\tx: function(x) {\r\n\t\t\treturn x;\r\n\t\t},\r\n\t\tsetWidth: function(w) { // eslint-disable-line no-unused-vars\r\n\t\t},\r\n\t\ttextAlign: function(align) {\r\n\t\t\treturn align;\r\n\t\t},\r\n\t\txPlus: function(x, value) {\r\n\t\t\treturn x + value;\r\n\t\t},\r\n\t\tleftForLtr: function(x, _itemWidth) { // eslint-disable-line no-unused-vars\r\n\t\t\treturn x;\r\n\t\t},\r\n\t};\r\n};\r\n\r\nvar getAdapter = function(rtl, rectX, width) {\r\n\treturn rtl ? getRtlAdapter(rectX, width) : getLtrAdapter();\r\n};\r\n\r\nvar overrideTextDirection = function(ctx, direction) {\r\n\tvar style, original;\r\n\tif (direction === 'ltr' || direction === 'rtl') {\r\n\t\tstyle = ctx.canvas.style;\r\n\t\toriginal = [\r\n\t\t\tstyle.getPropertyValue('direction'),\r\n\t\t\tstyle.getPropertyPriority('direction'),\r\n\t\t];\r\n\r\n\t\tstyle.setProperty('direction', direction, 'important');\r\n\t\tctx.prevTextDirection = original;\r\n\t}\r\n};\r\n\r\nvar restoreTextDirection = function(ctx) {\r\n\tvar original = ctx.prevTextDirection;\r\n\tif (original !== undefined) {\r\n\t\tdelete ctx.prevTextDirection;\r\n\t\tctx.canvas.style.setProperty('direction', original[0], original[1]);\r\n\t}\r\n};\r\n\r\nvar helpers_rtl = {\r\n\tgetRtlAdapter: getAdapter,\r\n\toverrideTextDirection: overrideTextDirection,\r\n\trestoreTextDirection: restoreTextDirection,\r\n};\n\nvar helpers$1 = helpers_core;\r\nvar easing = helpers_easing;\r\nvar canvas = helpers_canvas;\r\nvar options = helpers_options;\r\nvar math = helpers_math;\r\nvar rtl = helpers_rtl;\nhelpers$1.easing = easing;\nhelpers$1.canvas = canvas;\nhelpers$1.options = options;\nhelpers$1.math = math;\nhelpers$1.rtl = rtl;\n\nfunction interpolate(start, view, model, ease) {\r\n\tvar keys = Object.keys(model);\r\n\tvar i, ilen, key, actual, origin, target, type, c0, c1;\r\n\r\n\tfor (i = 0, ilen = keys.length; i < ilen; ++i) {\r\n\t\tkey = keys[i];\r\n\r\n\t\ttarget = model[key];\r\n\r\n\t\t// if a value is added to the model after pivot() has been called, the view\r\n\t\t// doesn't contain it, so let's initialize the view to the target value.\r\n\t\tif (!view.hasOwnProperty(key)) {\r\n\t\t\tview[key] = target;\r\n\t\t}\r\n\r\n\t\tactual = view[key];\r\n\r\n\t\tif (actual === target || key[0] === '_') {\r\n\t\t\tcontinue;\r\n\t\t}\r\n\r\n\t\tif (!start.hasOwnProperty(key)) {\r\n\t\t\tstart[key] = actual;\r\n\t\t}\r\n\r\n\t\torigin = start[key];\r\n\r\n\t\ttype = typeof target;\r\n\r\n\t\tif (type === typeof origin) {\r\n\t\t\tif (type === 'string') {\r\n\t\t\t\tc0 = chartjsColor(origin);\r\n\t\t\t\tif (c0.valid) {\r\n\t\t\t\t\tc1 = chartjsColor(target);\r\n\t\t\t\t\tif (c1.valid) {\r\n\t\t\t\t\t\tview[key] = c1.mix(c0, ease).rgbString();\r\n\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t} else if (helpers$1.isFinite(origin) && helpers$1.isFinite(target)) {\r\n\t\t\t\tview[key] = origin + (target - origin) * ease;\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tview[key] = target;\r\n\t}\r\n}\r\n\r\nvar Element = function(configuration) {\r\n\thelpers$1.extend(this, configuration);\r\n\tthis.initialize.apply(this, arguments);\r\n};\r\n\r\nhelpers$1.extend(Element.prototype, {\r\n\t_type: undefined,\r\n\r\n\tinitialize: function() {\r\n\t\tthis.hidden = false;\r\n\t},\r\n\r\n\tpivot: function() {\r\n\t\tvar me = this;\r\n\t\tif (!me._view) {\r\n\t\t\tme._view = helpers$1.extend({}, me._model);\r\n\t\t}\r\n\t\tme._start = {};\r\n\t\treturn me;\r\n\t},\r\n\r\n\ttransition: function(ease) {\r\n\t\tvar me = this;\r\n\t\tvar model = me._model;\r\n\t\tvar start = me._start;\r\n\t\tvar view = me._view;\r\n\r\n\t\t// No animation -> No Transition\r\n\t\tif (!model || ease === 1) {\r\n\t\t\tme._view = helpers$1.extend({}, model);\r\n\t\t\tme._start = null;\r\n\t\t\treturn me;\r\n\t\t}\r\n\r\n\t\tif (!view) {\r\n\t\t\tview = me._view = {};\r\n\t\t}\r\n\r\n\t\tif (!start) {\r\n\t\t\tstart = me._start = {};\r\n\t\t}\r\n\r\n\t\tinterpolate(start, view, model, ease);\r\n\r\n\t\treturn me;\r\n\t},\r\n\r\n\ttooltipPosition: function() {\r\n\t\treturn {\r\n\t\t\tx: this._model.x,\r\n\t\t\ty: this._model.y\r\n\t\t};\r\n\t},\r\n\r\n\thasValue: function() {\r\n\t\treturn helpers$1.isNumber(this._model.x) && helpers$1.isNumber(this._model.y);\r\n\t}\r\n});\r\n\r\nElement.extend = helpers$1.inherits;\r\n\r\nvar core_element = Element;\n\nvar exports$3 = core_element.extend({\r\n\tchart: null, // the animation associated chart instance\r\n\tcurrentStep: 0, // the current animation step\r\n\tnumSteps: 60, // default number of steps\r\n\teasing: '', // the easing to use for this animation\r\n\trender: null, // render function used by the animation service\r\n\r\n\tonAnimationProgress: null, // user specified callback to fire on each step of the animation\r\n\tonAnimationComplete: null, // user specified callback to fire when the animation finishes\r\n});\r\n\r\nvar core_animation = exports$3;\r\n\r\n// DEPRECATIONS\r\n\r\n/**\r\n * Provided for backward compatibility, use Chart.Animation instead\r\n * @prop Chart.Animation#animationObject\r\n * @deprecated since version 2.6.0\r\n * @todo remove at version 3\r\n */\r\nObject.defineProperty(exports$3.prototype, 'animationObject', {\r\n\tget: function() {\r\n\t\treturn this;\r\n\t}\r\n});\r\n\r\n/**\r\n * Provided for backward compatibility, use Chart.Animation#chart instead\r\n * @prop Chart.Animation#chartInstance\r\n * @deprecated since version 2.6.0\r\n * @todo remove at version 3\r\n */\r\nObject.defineProperty(exports$3.prototype, 'chartInstance', {\r\n\tget: function() {\r\n\t\treturn this.chart;\r\n\t},\r\n\tset: function(value) {\r\n\t\tthis.chart = value;\r\n\t}\r\n});\n\ncore_defaults._set('global', {\r\n\tanimation: {\r\n\t\tduration: 1000,\r\n\t\teasing: 'easeOutQuart',\r\n\t\tonProgress: helpers$1.noop,\r\n\t\tonComplete: helpers$1.noop\r\n\t}\r\n});\r\n\r\nvar core_animations = {\r\n\tanimations: [],\r\n\trequest: null,\r\n\r\n\t/**\r\n\t * @param {Chart} chart - The chart to animate.\r\n\t * @param {Chart.Animation} animation - The animation that we will animate.\r\n\t * @param {number} duration - The animation duration in ms.\r\n\t * @param {boolean} lazy - if true, the chart is not marked as animating to enable more responsive interactions\r\n\t */\r\n\taddAnimation: function(chart, animation, duration, lazy) {\r\n\t\tvar animations = this.animations;\r\n\t\tvar i, ilen;\r\n\r\n\t\tanimation.chart = chart;\r\n\t\tanimation.startTime = Date.now();\r\n\t\tanimation.duration = duration;\r\n\r\n\t\tif (!lazy) {\r\n\t\t\tchart.animating = true;\r\n\t\t}\r\n\r\n\t\tfor (i = 0, ilen = animations.length; i < ilen; ++i) {\r\n\t\t\tif (animations[i].chart === chart) {\r\n\t\t\t\tanimations[i] = animation;\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tanimations.push(animation);\r\n\r\n\t\t// If there are no animations queued, manually kickstart a digest, for lack of a better word\r\n\t\tif (animations.length === 1) {\r\n\t\t\tthis.requestAnimationFrame();\r\n\t\t}\r\n\t},\r\n\r\n\tcancelAnimation: function(chart) {\r\n\t\tvar index = helpers$1.findIndex(this.animations, function(animation) {\r\n\t\t\treturn animation.chart === chart;\r\n\t\t});\r\n\r\n\t\tif (index !== -1) {\r\n\t\t\tthis.animations.splice(index, 1);\r\n\t\t\tchart.animating = false;\r\n\t\t}\r\n\t},\r\n\r\n\trequestAnimationFrame: function() {\r\n\t\tvar me = this;\r\n\t\tif (me.request === null) {\r\n\t\t\t// Skip animation frame requests until the active one is executed.\r\n\t\t\t// This can happen when processing mouse events, e.g. 'mousemove'\r\n\t\t\t// and 'mouseout' events will trigger multiple renders.\r\n\t\t\tme.request = helpers$1.requestAnimFrame.call(window, function() {\r\n\t\t\t\tme.request = null;\r\n\t\t\t\tme.startDigest();\r\n\t\t\t});\r\n\t\t}\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\tstartDigest: function() {\r\n\t\tvar me = this;\r\n\r\n\t\tme.advance();\r\n\r\n\t\t// Do we have more stuff to animate?\r\n\t\tif (me.animations.length > 0) {\r\n\t\t\tme.requestAnimationFrame();\r\n\t\t}\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\tadvance: function() {\r\n\t\tvar animations = this.animations;\r\n\t\tvar animation, chart, numSteps, nextStep;\r\n\t\tvar i = 0;\r\n\r\n\t\t// 1 animation per chart, so we are looping charts here\r\n\t\twhile (i < animations.length) {\r\n\t\t\tanimation = animations[i];\r\n\t\t\tchart = animation.chart;\r\n\t\t\tnumSteps = animation.numSteps;\r\n\r\n\t\t\t// Make sure that currentStep starts at 1\r\n\t\t\t// https://github.com/chartjs/Chart.js/issues/6104\r\n\t\t\tnextStep = Math.floor((Date.now() - animation.startTime) / animation.duration * numSteps) + 1;\r\n\t\t\tanimation.currentStep = Math.min(nextStep, numSteps);\r\n\r\n\t\t\thelpers$1.callback(animation.render, [chart, animation], chart);\r\n\t\t\thelpers$1.callback(animation.onAnimationProgress, [animation], chart);\r\n\r\n\t\t\tif (animation.currentStep >= numSteps) {\r\n\t\t\t\thelpers$1.callback(animation.onAnimationComplete, [animation], chart);\r\n\t\t\t\tchart.animating = false;\r\n\t\t\t\tanimations.splice(i, 1);\r\n\t\t\t} else {\r\n\t\t\t\t++i;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n};\n\nvar resolve = helpers$1.options.resolve;\r\n\r\nvar arrayEvents = ['push', 'pop', 'shift', 'splice', 'unshift'];\r\n\r\n/**\r\n * Hooks the array methods that add or remove values ('push', pop', 'shift', 'splice',\r\n * 'unshift') and notify the listener AFTER the array has been altered. Listeners are\r\n * called on the 'onData*' callbacks (e.g. onDataPush, etc.) with same arguments.\r\n */\r\nfunction listenArrayEvents(array, listener) {\r\n\tif (array._chartjs) {\r\n\t\tarray._chartjs.listeners.push(listener);\r\n\t\treturn;\r\n\t}\r\n\r\n\tObject.defineProperty(array, '_chartjs', {\r\n\t\tconfigurable: true,\r\n\t\tenumerable: false,\r\n\t\tvalue: {\r\n\t\t\tlisteners: [listener]\r\n\t\t}\r\n\t});\r\n\r\n\tarrayEvents.forEach(function(key) {\r\n\t\tvar method = 'onData' + key.charAt(0).toUpperCase() + key.slice(1);\r\n\t\tvar base = array[key];\r\n\r\n\t\tObject.defineProperty(array, key, {\r\n\t\t\tconfigurable: true,\r\n\t\t\tenumerable: false,\r\n\t\t\tvalue: function() {\r\n\t\t\t\tvar args = Array.prototype.slice.call(arguments);\r\n\t\t\t\tvar res = base.apply(this, args);\r\n\r\n\t\t\t\thelpers$1.each(array._chartjs.listeners, function(object) {\r\n\t\t\t\t\tif (typeof object[method] === 'function') {\r\n\t\t\t\t\t\tobject[method].apply(object, args);\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\treturn res;\r\n\t\t\t}\r\n\t\t});\r\n\t});\r\n}\r\n\r\n/**\r\n * Removes the given array event listener and cleanup extra attached properties (such as\r\n * the _chartjs stub and overridden methods) if array doesn't have any more listeners.\r\n */\r\nfunction unlistenArrayEvents(array, listener) {\r\n\tvar stub = array._chartjs;\r\n\tif (!stub) {\r\n\t\treturn;\r\n\t}\r\n\r\n\tvar listeners = stub.listeners;\r\n\tvar index = listeners.indexOf(listener);\r\n\tif (index !== -1) {\r\n\t\tlisteners.splice(index, 1);\r\n\t}\r\n\r\n\tif (listeners.length > 0) {\r\n\t\treturn;\r\n\t}\r\n\r\n\tarrayEvents.forEach(function(key) {\r\n\t\tdelete array[key];\r\n\t});\r\n\r\n\tdelete array._chartjs;\r\n}\r\n\r\n// Base class for all dataset controllers (line, bar, etc)\r\nvar DatasetController = function(chart, datasetIndex) {\r\n\tthis.initialize(chart, datasetIndex);\r\n};\r\n\r\nhelpers$1.extend(DatasetController.prototype, {\r\n\r\n\t/**\r\n\t * Element type used to generate a meta dataset (e.g. Chart.element.Line).\r\n\t * @type {Chart.core.element}\r\n\t */\r\n\tdatasetElementType: null,\r\n\r\n\t/**\r\n\t * Element type used to generate a meta data (e.g. Chart.element.Point).\r\n\t * @type {Chart.core.element}\r\n\t */\r\n\tdataElementType: null,\r\n\r\n\t/**\r\n\t * Dataset element option keys to be resolved in _resolveDatasetElementOptions.\r\n\t * A derived controller may override this to resolve controller-specific options.\r\n\t * The keys defined here are for backward compatibility for legend styles.\r\n\t * @private\r\n\t */\r\n\t_datasetElementOptions: [\r\n\t\t'backgroundColor',\r\n\t\t'borderCapStyle',\r\n\t\t'borderColor',\r\n\t\t'borderDash',\r\n\t\t'borderDashOffset',\r\n\t\t'borderJoinStyle',\r\n\t\t'borderWidth'\r\n\t],\r\n\r\n\t/**\r\n\t * Data element option keys to be resolved in _resolveDataElementOptions.\r\n\t * A derived controller may override this to resolve controller-specific options.\r\n\t * The keys defined here are for backward compatibility for legend styles.\r\n\t * @private\r\n\t */\r\n\t_dataElementOptions: [\r\n\t\t'backgroundColor',\r\n\t\t'borderColor',\r\n\t\t'borderWidth',\r\n\t\t'pointStyle'\r\n\t],\r\n\r\n\tinitialize: function(chart, datasetIndex) {\r\n\t\tvar me = this;\r\n\t\tme.chart = chart;\r\n\t\tme.index = datasetIndex;\r\n\t\tme.linkScales();\r\n\t\tme.addElements();\r\n\t\tme._type = me.getMeta().type;\r\n\t},\r\n\r\n\tupdateIndex: function(datasetIndex) {\r\n\t\tthis.index = datasetIndex;\r\n\t},\r\n\r\n\tlinkScales: function() {\r\n\t\tvar me = this;\r\n\t\tvar meta = me.getMeta();\r\n\t\tvar chart = me.chart;\r\n\t\tvar scales = chart.scales;\r\n\t\tvar dataset = me.getDataset();\r\n\t\tvar scalesOpts = chart.options.scales;\r\n\r\n\t\tif (meta.xAxisID === null || !(meta.xAxisID in scales) || dataset.xAxisID) {\r\n\t\t\tmeta.xAxisID = dataset.xAxisID || scalesOpts.xAxes[0].id;\r\n\t\t}\r\n\t\tif (meta.yAxisID === null || !(meta.yAxisID in scales) || dataset.yAxisID) {\r\n\t\t\tmeta.yAxisID = dataset.yAxisID || scalesOpts.yAxes[0].id;\r\n\t\t}\r\n\t},\r\n\r\n\tgetDataset: function() {\r\n\t\treturn this.chart.data.datasets[this.index];\r\n\t},\r\n\r\n\tgetMeta: function() {\r\n\t\treturn this.chart.getDatasetMeta(this.index);\r\n\t},\r\n\r\n\tgetScaleForId: function(scaleID) {\r\n\t\treturn this.chart.scales[scaleID];\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_getValueScaleId: function() {\r\n\t\treturn this.getMeta().yAxisID;\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_getIndexScaleId: function() {\r\n\t\treturn this.getMeta().xAxisID;\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_getValueScale: function() {\r\n\t\treturn this.getScaleForId(this._getValueScaleId());\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_getIndexScale: function() {\r\n\t\treturn this.getScaleForId(this._getIndexScaleId());\r\n\t},\r\n\r\n\treset: function() {\r\n\t\tthis._update(true);\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\tdestroy: function() {\r\n\t\tif (this._data) {\r\n\t\t\tunlistenArrayEvents(this._data, this);\r\n\t\t}\r\n\t},\r\n\r\n\tcreateMetaDataset: function() {\r\n\t\tvar me = this;\r\n\t\tvar type = me.datasetElementType;\r\n\t\treturn type && new type({\r\n\t\t\t_chart: me.chart,\r\n\t\t\t_datasetIndex: me.index\r\n\t\t});\r\n\t},\r\n\r\n\tcreateMetaData: function(index) {\r\n\t\tvar me = this;\r\n\t\tvar type = me.dataElementType;\r\n\t\treturn type && new type({\r\n\t\t\t_chart: me.chart,\r\n\t\t\t_datasetIndex: me.index,\r\n\t\t\t_index: index\r\n\t\t});\r\n\t},\r\n\r\n\taddElements: function() {\r\n\t\tvar me = this;\r\n\t\tvar meta = me.getMeta();\r\n\t\tvar data = me.getDataset().data || [];\r\n\t\tvar metaData = meta.data;\r\n\t\tvar i, ilen;\r\n\r\n\t\tfor (i = 0, ilen = data.length; i < ilen; ++i) {\r\n\t\t\tmetaData[i] = metaData[i] || me.createMetaData(i);\r\n\t\t}\r\n\r\n\t\tmeta.dataset = meta.dataset || me.createMetaDataset();\r\n\t},\r\n\r\n\taddElementAndReset: function(index) {\r\n\t\tvar element = this.createMetaData(index);\r\n\t\tthis.getMeta().data.splice(index, 0, element);\r\n\t\tthis.updateElement(element, index, true);\r\n\t},\r\n\r\n\tbuildOrUpdateElements: function() {\r\n\t\tvar me = this;\r\n\t\tvar dataset = me.getDataset();\r\n\t\tvar data = dataset.data || (dataset.data = []);\r\n\r\n\t\t// In order to correctly handle data addition/deletion animation (an thus simulate\r\n\t\t// real-time charts), we need to monitor these data modifications and synchronize\r\n\t\t// the internal meta data accordingly.\r\n\t\tif (me._data !== data) {\r\n\t\t\tif (me._data) {\r\n\t\t\t\t// This case happens when the user replaced the data array instance.\r\n\t\t\t\tunlistenArrayEvents(me._data, me);\r\n\t\t\t}\r\n\r\n\t\t\tif (data && Object.isExtensible(data)) {\r\n\t\t\t\tlistenArrayEvents(data, me);\r\n\t\t\t}\r\n\t\t\tme._data = data;\r\n\t\t}\r\n\r\n\t\t// Re-sync meta data in case the user replaced the data array or if we missed\r\n\t\t// any updates and so make sure that we handle number of datapoints changing.\r\n\t\tme.resyncElements();\r\n\t},\r\n\r\n\t/**\r\n\t * Returns the merged user-supplied and default dataset-level options\r\n\t * @private\r\n\t */\r\n\t_configure: function() {\r\n\t\tvar me = this;\r\n\t\tme._config = helpers$1.merge(Object.create(null), [\r\n\t\t\tme.chart.options.datasets[me._type],\r\n\t\t\tme.getDataset(),\r\n\t\t], {\r\n\t\t\tmerger: function(key, target, source) {\r\n\t\t\t\tif (key !== '_meta' && key !== 'data') {\r\n\t\t\t\t\thelpers$1._merger(key, target, source);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\t},\r\n\r\n\t_update: function(reset) {\r\n\t\tvar me = this;\r\n\t\tme._configure();\r\n\t\tme._cachedDataOpts = null;\r\n\t\tme.update(reset);\r\n\t},\r\n\r\n\tupdate: helpers$1.noop,\r\n\r\n\ttransition: function(easingValue) {\r\n\t\tvar meta = this.getMeta();\r\n\t\tvar elements = meta.data || [];\r\n\t\tvar ilen = elements.length;\r\n\t\tvar i = 0;\r\n\r\n\t\tfor (; i < ilen; ++i) {\r\n\t\t\telements[i].transition(easingValue);\r\n\t\t}\r\n\r\n\t\tif (meta.dataset) {\r\n\t\t\tmeta.dataset.transition(easingValue);\r\n\t\t}\r\n\t},\r\n\r\n\tdraw: function() {\r\n\t\tvar meta = this.getMeta();\r\n\t\tvar elements = meta.data || [];\r\n\t\tvar ilen = elements.length;\r\n\t\tvar i = 0;\r\n\r\n\t\tif (meta.dataset) {\r\n\t\t\tmeta.dataset.draw();\r\n\t\t}\r\n\r\n\t\tfor (; i < ilen; ++i) {\r\n\t\t\telements[i].draw();\r\n\t\t}\r\n\t},\r\n\r\n\t/**\r\n\t * Returns a set of predefined style properties that should be used to represent the dataset\r\n\t * or the data if the index is specified\r\n\t * @param {number} index - data index\r\n\t * @return {IStyleInterface} style object\r\n\t */\r\n\tgetStyle: function(index) {\r\n\t\tvar me = this;\r\n\t\tvar meta = me.getMeta();\r\n\t\tvar dataset = meta.dataset;\r\n\t\tvar style;\r\n\r\n\t\tme._configure();\r\n\t\tif (dataset && index === undefined) {\r\n\t\t\tstyle = me._resolveDatasetElementOptions(dataset || {});\r\n\t\t} else {\r\n\t\t\tindex = index || 0;\r\n\t\t\tstyle = me._resolveDataElementOptions(meta.data[index] || {}, index);\r\n\t\t}\r\n\r\n\t\tif (style.fill === false || style.fill === null) {\r\n\t\t\tstyle.backgroundColor = style.borderColor;\r\n\t\t}\r\n\r\n\t\treturn style;\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_resolveDatasetElementOptions: function(element, hover) {\r\n\t\tvar me = this;\r\n\t\tvar chart = me.chart;\r\n\t\tvar datasetOpts = me._config;\r\n\t\tvar custom = element.custom || {};\r\n\t\tvar options = chart.options.elements[me.datasetElementType.prototype._type] || {};\r\n\t\tvar elementOptions = me._datasetElementOptions;\r\n\t\tvar values = {};\r\n\t\tvar i, ilen, key, readKey;\r\n\r\n\t\t// Scriptable options\r\n\t\tvar context = {\r\n\t\t\tchart: chart,\r\n\t\t\tdataset: me.getDataset(),\r\n\t\t\tdatasetIndex: me.index,\r\n\t\t\thover: hover\r\n\t\t};\r\n\r\n\t\tfor (i = 0, ilen = elementOptions.length; i < ilen; ++i) {\r\n\t\t\tkey = elementOptions[i];\r\n\t\t\treadKey = hover ? 'hover' + key.charAt(0).toUpperCase() + key.slice(1) : key;\r\n\t\t\tvalues[key] = resolve([\r\n\t\t\t\tcustom[readKey],\r\n\t\t\t\tdatasetOpts[readKey],\r\n\t\t\t\toptions[readKey]\r\n\t\t\t], context);\r\n\t\t}\r\n\r\n\t\treturn values;\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_resolveDataElementOptions: function(element, index) {\r\n\t\tvar me = this;\r\n\t\tvar custom = element && element.custom;\r\n\t\tvar cached = me._cachedDataOpts;\r\n\t\tif (cached && !custom) {\r\n\t\t\treturn cached;\r\n\t\t}\r\n\t\tvar chart = me.chart;\r\n\t\tvar datasetOpts = me._config;\r\n\t\tvar options = chart.options.elements[me.dataElementType.prototype._type] || {};\r\n\t\tvar elementOptions = me._dataElementOptions;\r\n\t\tvar values = {};\r\n\r\n\t\t// Scriptable options\r\n\t\tvar context = {\r\n\t\t\tchart: chart,\r\n\t\t\tdataIndex: index,\r\n\t\t\tdataset: me.getDataset(),\r\n\t\t\tdatasetIndex: me.index\r\n\t\t};\r\n\r\n\t\t// `resolve` sets cacheable to `false` if any option is indexed or scripted\r\n\t\tvar info = {cacheable: !custom};\r\n\r\n\t\tvar keys, i, ilen, key;\r\n\r\n\t\tcustom = custom || {};\r\n\r\n\t\tif (helpers$1.isArray(elementOptions)) {\r\n\t\t\tfor (i = 0, ilen = elementOptions.length; i < ilen; ++i) {\r\n\t\t\t\tkey = elementOptions[i];\r\n\t\t\t\tvalues[key] = resolve([\r\n\t\t\t\t\tcustom[key],\r\n\t\t\t\t\tdatasetOpts[key],\r\n\t\t\t\t\toptions[key]\r\n\t\t\t\t], context, index, info);\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tkeys = Object.keys(elementOptions);\r\n\t\t\tfor (i = 0, ilen = keys.length; i < ilen; ++i) {\r\n\t\t\t\tkey = keys[i];\r\n\t\t\t\tvalues[key] = resolve([\r\n\t\t\t\t\tcustom[key],\r\n\t\t\t\t\tdatasetOpts[elementOptions[key]],\r\n\t\t\t\t\tdatasetOpts[key],\r\n\t\t\t\t\toptions[key]\r\n\t\t\t\t], context, index, info);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (info.cacheable) {\r\n\t\t\tme._cachedDataOpts = Object.freeze(values);\r\n\t\t}\r\n\r\n\t\treturn values;\r\n\t},\r\n\r\n\tremoveHoverStyle: function(element) {\r\n\t\thelpers$1.merge(element._model, element.$previousStyle || {});\r\n\t\tdelete element.$previousStyle;\r\n\t},\r\n\r\n\tsetHoverStyle: function(element) {\r\n\t\tvar dataset = this.chart.data.datasets[element._datasetIndex];\r\n\t\tvar index = element._index;\r\n\t\tvar custom = element.custom || {};\r\n\t\tvar model = element._model;\r\n\t\tvar getHoverColor = helpers$1.getHoverColor;\r\n\r\n\t\telement.$previousStyle = {\r\n\t\t\tbackgroundColor: model.backgroundColor,\r\n\t\t\tborderColor: model.borderColor,\r\n\t\t\tborderWidth: model.borderWidth\r\n\t\t};\r\n\r\n\t\tmodel.backgroundColor = resolve([custom.hoverBackgroundColor, dataset.hoverBackgroundColor, getHoverColor(model.backgroundColor)], undefined, index);\r\n\t\tmodel.borderColor = resolve([custom.hoverBorderColor, dataset.hoverBorderColor, getHoverColor(model.borderColor)], undefined, index);\r\n\t\tmodel.borderWidth = resolve([custom.hoverBorderWidth, dataset.hoverBorderWidth, model.borderWidth], undefined, index);\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_removeDatasetHoverStyle: function() {\r\n\t\tvar element = this.getMeta().dataset;\r\n\r\n\t\tif (element) {\r\n\t\t\tthis.removeHoverStyle(element);\r\n\t\t}\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_setDatasetHoverStyle: function() {\r\n\t\tvar element = this.getMeta().dataset;\r\n\t\tvar prev = {};\r\n\t\tvar i, ilen, key, keys, hoverOptions, model;\r\n\r\n\t\tif (!element) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tmodel = element._model;\r\n\t\thoverOptions = this._resolveDatasetElementOptions(element, true);\r\n\r\n\t\tkeys = Object.keys(hoverOptions);\r\n\t\tfor (i = 0, ilen = keys.length; i < ilen; ++i) {\r\n\t\t\tkey = keys[i];\r\n\t\t\tprev[key] = model[key];\r\n\t\t\tmodel[key] = hoverOptions[key];\r\n\t\t}\r\n\r\n\t\telement.$previousStyle = prev;\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\tresyncElements: function() {\r\n\t\tvar me = this;\r\n\t\tvar meta = me.getMeta();\r\n\t\tvar data = me.getDataset().data;\r\n\t\tvar numMeta = meta.data.length;\r\n\t\tvar numData = data.length;\r\n\r\n\t\tif (numData < numMeta) {\r\n\t\t\tmeta.data.splice(numData, numMeta - numData);\r\n\t\t} else if (numData > numMeta) {\r\n\t\t\tme.insertElements(numMeta, numData - numMeta);\r\n\t\t}\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\tinsertElements: function(start, count) {\r\n\t\tfor (var i = 0; i < count; ++i) {\r\n\t\t\tthis.addElementAndReset(start + i);\r\n\t\t}\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\tonDataPush: function() {\r\n\t\tvar count = arguments.length;\r\n\t\tthis.insertElements(this.getDataset().data.length - count, count);\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\tonDataPop: function() {\r\n\t\tthis.getMeta().data.pop();\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\tonDataShift: function() {\r\n\t\tthis.getMeta().data.shift();\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\tonDataSplice: function(start, count) {\r\n\t\tthis.getMeta().data.splice(start, count);\r\n\t\tthis.insertElements(start, arguments.length - 2);\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\tonDataUnshift: function() {\r\n\t\tthis.insertElements(0, arguments.length);\r\n\t}\r\n});\r\n\r\nDatasetController.extend = helpers$1.inherits;\r\n\r\nvar core_datasetController = DatasetController;\n\nvar TAU = Math.PI * 2;\r\n\r\ncore_defaults._set('global', {\r\n\telements: {\r\n\t\tarc: {\r\n\t\t\tbackgroundColor: core_defaults.global.defaultColor,\r\n\t\t\tborderColor: '#fff',\r\n\t\t\tborderWidth: 2,\r\n\t\t\tborderAlign: 'center'\r\n\t\t}\r\n\t}\r\n});\r\n\r\nfunction clipArc(ctx, arc) {\r\n\tvar startAngle = arc.startAngle;\r\n\tvar endAngle = arc.endAngle;\r\n\tvar pixelMargin = arc.pixelMargin;\r\n\tvar angleMargin = pixelMargin / arc.outerRadius;\r\n\tvar x = arc.x;\r\n\tvar y = arc.y;\r\n\r\n\t// Draw an inner border by cliping the arc and drawing a double-width border\r\n\t// Enlarge the clipping arc by 0.33 pixels to eliminate glitches between borders\r\n\tctx.beginPath();\r\n\tctx.arc(x, y, arc.outerRadius, startAngle - angleMargin, endAngle + angleMargin);\r\n\tif (arc.innerRadius > pixelMargin) {\r\n\t\tangleMargin = pixelMargin / arc.innerRadius;\r\n\t\tctx.arc(x, y, arc.innerRadius - pixelMargin, endAngle + angleMargin, startAngle - angleMargin, true);\r\n\t} else {\r\n\t\tctx.arc(x, y, pixelMargin, endAngle + Math.PI / 2, startAngle - Math.PI / 2);\r\n\t}\r\n\tctx.closePath();\r\n\tctx.clip();\r\n}\r\n\r\nfunction drawFullCircleBorders(ctx, vm, arc, inner) {\r\n\tvar endAngle = arc.endAngle;\r\n\tvar i;\r\n\r\n\tif (inner) {\r\n\t\tarc.endAngle = arc.startAngle + TAU;\r\n\t\tclipArc(ctx, arc);\r\n\t\tarc.endAngle = endAngle;\r\n\t\tif (arc.endAngle === arc.startAngle && arc.fullCircles) {\r\n\t\t\tarc.endAngle += TAU;\r\n\t\t\tarc.fullCircles--;\r\n\t\t}\r\n\t}\r\n\r\n\tctx.beginPath();\r\n\tctx.arc(arc.x, arc.y, arc.innerRadius, arc.startAngle + TAU, arc.startAngle, true);\r\n\tfor (i = 0; i < arc.fullCircles; ++i) {\r\n\t\tctx.stroke();\r\n\t}\r\n\r\n\tctx.beginPath();\r\n\tctx.arc(arc.x, arc.y, vm.outerRadius, arc.startAngle, arc.startAngle + TAU);\r\n\tfor (i = 0; i < arc.fullCircles; ++i) {\r\n\t\tctx.stroke();\r\n\t}\r\n}\r\n\r\nfunction drawBorder(ctx, vm, arc) {\r\n\tvar inner = vm.borderAlign === 'inner';\r\n\r\n\tif (inner) {\r\n\t\tctx.lineWidth = vm.borderWidth * 2;\r\n\t\tctx.lineJoin = 'round';\r\n\t} else {\r\n\t\tctx.lineWidth = vm.borderWidth;\r\n\t\tctx.lineJoin = 'bevel';\r\n\t}\r\n\r\n\tif (arc.fullCircles) {\r\n\t\tdrawFullCircleBorders(ctx, vm, arc, inner);\r\n\t}\r\n\r\n\tif (inner) {\r\n\t\tclipArc(ctx, arc);\r\n\t}\r\n\r\n\tctx.beginPath();\r\n\tctx.arc(arc.x, arc.y, vm.outerRadius, arc.startAngle, arc.endAngle);\r\n\tctx.arc(arc.x, arc.y, arc.innerRadius, arc.endAngle, arc.startAngle, true);\r\n\tctx.closePath();\r\n\tctx.stroke();\r\n}\r\n\r\nvar element_arc = core_element.extend({\r\n\t_type: 'arc',\r\n\r\n\tinLabelRange: function(mouseX) {\r\n\t\tvar vm = this._view;\r\n\r\n\t\tif (vm) {\r\n\t\t\treturn (Math.pow(mouseX - vm.x, 2) < Math.pow(vm.radius + vm.hoverRadius, 2));\r\n\t\t}\r\n\t\treturn false;\r\n\t},\r\n\r\n\tinRange: function(chartX, chartY) {\r\n\t\tvar vm = this._view;\r\n\r\n\t\tif (vm) {\r\n\t\t\tvar pointRelativePosition = helpers$1.getAngleFromPoint(vm, {x: chartX, y: chartY});\r\n\t\t\tvar angle = pointRelativePosition.angle;\r\n\t\t\tvar distance = pointRelativePosition.distance;\r\n\r\n\t\t\t// Sanitise angle range\r\n\t\t\tvar startAngle = vm.startAngle;\r\n\t\t\tvar endAngle = vm.endAngle;\r\n\t\t\twhile (endAngle < startAngle) {\r\n\t\t\t\tendAngle += TAU;\r\n\t\t\t}\r\n\t\t\twhile (angle > endAngle) {\r\n\t\t\t\tangle -= TAU;\r\n\t\t\t}\r\n\t\t\twhile (angle < startAngle) {\r\n\t\t\t\tangle += TAU;\r\n\t\t\t}\r\n\r\n\t\t\t// Check if within the range of the open/close angle\r\n\t\t\tvar betweenAngles = (angle >= startAngle && angle <= endAngle);\r\n\t\t\tvar withinRadius = (distance >= vm.innerRadius && distance <= vm.outerRadius);\r\n\r\n\t\t\treturn (betweenAngles && withinRadius);\r\n\t\t}\r\n\t\treturn false;\r\n\t},\r\n\r\n\tgetCenterPoint: function() {\r\n\t\tvar vm = this._view;\r\n\t\tvar halfAngle = (vm.startAngle + vm.endAngle) / 2;\r\n\t\tvar halfRadius = (vm.innerRadius + vm.outerRadius) / 2;\r\n\t\treturn {\r\n\t\t\tx: vm.x + Math.cos(halfAngle) * halfRadius,\r\n\t\t\ty: vm.y + Math.sin(halfAngle) * halfRadius\r\n\t\t};\r\n\t},\r\n\r\n\tgetArea: function() {\r\n\t\tvar vm = this._view;\r\n\t\treturn Math.PI * ((vm.endAngle - vm.startAngle) / (2 * Math.PI)) * (Math.pow(vm.outerRadius, 2) - Math.pow(vm.innerRadius, 2));\r\n\t},\r\n\r\n\ttooltipPosition: function() {\r\n\t\tvar vm = this._view;\r\n\t\tvar centreAngle = vm.startAngle + ((vm.endAngle - vm.startAngle) / 2);\r\n\t\tvar rangeFromCentre = (vm.outerRadius - vm.innerRadius) / 2 + vm.innerRadius;\r\n\r\n\t\treturn {\r\n\t\t\tx: vm.x + (Math.cos(centreAngle) * rangeFromCentre),\r\n\t\t\ty: vm.y + (Math.sin(centreAngle) * rangeFromCentre)\r\n\t\t};\r\n\t},\r\n\r\n\tdraw: function() {\r\n\t\tvar ctx = this._chart.ctx;\r\n\t\tvar vm = this._view;\r\n\t\tvar pixelMargin = (vm.borderAlign === 'inner') ? 0.33 : 0;\r\n\t\tvar arc = {\r\n\t\t\tx: vm.x,\r\n\t\t\ty: vm.y,\r\n\t\t\tinnerRadius: vm.innerRadius,\r\n\t\t\touterRadius: Math.max(vm.outerRadius - pixelMargin, 0),\r\n\t\t\tpixelMargin: pixelMargin,\r\n\t\t\tstartAngle: vm.startAngle,\r\n\t\t\tendAngle: vm.endAngle,\r\n\t\t\tfullCircles: Math.floor(vm.circumference / TAU)\r\n\t\t};\r\n\t\tvar i;\r\n\r\n\t\tctx.save();\r\n\r\n\t\tctx.fillStyle = vm.backgroundColor;\r\n\t\tctx.strokeStyle = vm.borderColor;\r\n\r\n\t\tif (arc.fullCircles) {\r\n\t\t\tarc.endAngle = arc.startAngle + TAU;\r\n\t\t\tctx.beginPath();\r\n\t\t\tctx.arc(arc.x, arc.y, arc.outerRadius, arc.startAngle, arc.endAngle);\r\n\t\t\tctx.arc(arc.x, arc.y, arc.innerRadius, arc.endAngle, arc.startAngle, true);\r\n\t\t\tctx.closePath();\r\n\t\t\tfor (i = 0; i < arc.fullCircles; ++i) {\r\n\t\t\t\tctx.fill();\r\n\t\t\t}\r\n\t\t\tarc.endAngle = arc.startAngle + vm.circumference % TAU;\r\n\t\t}\r\n\r\n\t\tctx.beginPath();\r\n\t\tctx.arc(arc.x, arc.y, arc.outerRadius, arc.startAngle, arc.endAngle);\r\n\t\tctx.arc(arc.x, arc.y, arc.innerRadius, arc.endAngle, arc.startAngle, true);\r\n\t\tctx.closePath();\r\n\t\tctx.fill();\r\n\r\n\t\tif (vm.borderWidth) {\r\n\t\t\tdrawBorder(ctx, vm, arc);\r\n\t\t}\r\n\r\n\t\tctx.restore();\r\n\t}\r\n});\n\nvar valueOrDefault$1 = helpers$1.valueOrDefault;\r\n\r\nvar defaultColor = core_defaults.global.defaultColor;\r\n\r\ncore_defaults._set('global', {\r\n\telements: {\r\n\t\tline: {\r\n\t\t\ttension: 0.4,\r\n\t\t\tbackgroundColor: defaultColor,\r\n\t\t\tborderWidth: 3,\r\n\t\t\tborderColor: defaultColor,\r\n\t\t\tborderCapStyle: 'butt',\r\n\t\t\tborderDash: [],\r\n\t\t\tborderDashOffset: 0.0,\r\n\t\t\tborderJoinStyle: 'miter',\r\n\t\t\tcapBezierPoints: true,\r\n\t\t\tfill: true, // do we fill in the area between the line and its base axis\r\n\t\t}\r\n\t}\r\n});\r\n\r\nvar element_line = core_element.extend({\r\n\t_type: 'line',\r\n\r\n\tdraw: function() {\r\n\t\tvar me = this;\r\n\t\tvar vm = me._view;\r\n\t\tvar ctx = me._chart.ctx;\r\n\t\tvar spanGaps = vm.spanGaps;\r\n\t\tvar points = me._children.slice(); // clone array\r\n\t\tvar globalDefaults = core_defaults.global;\r\n\t\tvar globalOptionLineElements = globalDefaults.elements.line;\r\n\t\tvar lastDrawnIndex = -1;\r\n\t\tvar closePath = me._loop;\r\n\t\tvar index, previous, currentVM;\r\n\r\n\t\tif (!points.length) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (me._loop) {\r\n\t\t\tfor (index = 0; index < points.length; ++index) {\r\n\t\t\t\tprevious = helpers$1.previousItem(points, index);\r\n\t\t\t\t// If the line has an open path, shift the point array\r\n\t\t\t\tif (!points[index]._view.skip && previous._view.skip) {\r\n\t\t\t\t\tpoints = points.slice(index).concat(points.slice(0, index));\r\n\t\t\t\t\tclosePath = spanGaps;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t// If the line has a close path, add the first point again\r\n\t\t\tif (closePath) {\r\n\t\t\t\tpoints.push(points[0]);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tctx.save();\r\n\r\n\t\t// Stroke Line Options\r\n\t\tctx.lineCap = vm.borderCapStyle || globalOptionLineElements.borderCapStyle;\r\n\r\n\t\t// IE 9 and 10 do not support line dash\r\n\t\tif (ctx.setLineDash) {\r\n\t\t\tctx.setLineDash(vm.borderDash || globalOptionLineElements.borderDash);\r\n\t\t}\r\n\r\n\t\tctx.lineDashOffset = valueOrDefault$1(vm.borderDashOffset, globalOptionLineElements.borderDashOffset);\r\n\t\tctx.lineJoin = vm.borderJoinStyle || globalOptionLineElements.borderJoinStyle;\r\n\t\tctx.lineWidth = valueOrDefault$1(vm.borderWidth, globalOptionLineElements.borderWidth);\r\n\t\tctx.strokeStyle = vm.borderColor || globalDefaults.defaultColor;\r\n\r\n\t\t// Stroke Line\r\n\t\tctx.beginPath();\r\n\r\n\t\t// First point moves to it's starting position no matter what\r\n\t\tcurrentVM = points[0]._view;\r\n\t\tif (!currentVM.skip) {\r\n\t\t\tctx.moveTo(currentVM.x, currentVM.y);\r\n\t\t\tlastDrawnIndex = 0;\r\n\t\t}\r\n\r\n\t\tfor (index = 1; index < points.length; ++index) {\r\n\t\t\tcurrentVM = points[index]._view;\r\n\t\t\tprevious = lastDrawnIndex === -1 ? helpers$1.previousItem(points, index) : points[lastDrawnIndex];\r\n\r\n\t\t\tif (!currentVM.skip) {\r\n\t\t\t\tif ((lastDrawnIndex !== (index - 1) && !spanGaps) || lastDrawnIndex === -1) {\r\n\t\t\t\t\t// There was a gap and this is the first point after the gap\r\n\t\t\t\t\tctx.moveTo(currentVM.x, currentVM.y);\r\n\t\t\t\t} else {\r\n\t\t\t\t\t// Line to next point\r\n\t\t\t\t\thelpers$1.canvas.lineTo(ctx, previous._view, currentVM);\r\n\t\t\t\t}\r\n\t\t\t\tlastDrawnIndex = index;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (closePath) {\r\n\t\t\tctx.closePath();\r\n\t\t}\r\n\r\n\t\tctx.stroke();\r\n\t\tctx.restore();\r\n\t}\r\n});\n\nvar valueOrDefault$2 = helpers$1.valueOrDefault;\r\n\r\nvar defaultColor$1 = core_defaults.global.defaultColor;\r\n\r\ncore_defaults._set('global', {\r\n\telements: {\r\n\t\tpoint: {\r\n\t\t\tradius: 3,\r\n\t\t\tpointStyle: 'circle',\r\n\t\t\tbackgroundColor: defaultColor$1,\r\n\t\t\tborderColor: defaultColor$1,\r\n\t\t\tborderWidth: 1,\r\n\t\t\t// Hover\r\n\t\t\thitRadius: 1,\r\n\t\t\thoverRadius: 4,\r\n\t\t\thoverBorderWidth: 1\r\n\t\t}\r\n\t}\r\n});\r\n\r\nfunction xRange(mouseX) {\r\n\tvar vm = this._view;\r\n\treturn vm ? (Math.abs(mouseX - vm.x) < vm.radius + vm.hitRadius) : false;\r\n}\r\n\r\nfunction yRange(mouseY) {\r\n\tvar vm = this._view;\r\n\treturn vm ? (Math.abs(mouseY - vm.y) < vm.radius + vm.hitRadius) : false;\r\n}\r\n\r\nvar element_point = core_element.extend({\r\n\t_type: 'point',\r\n\r\n\tinRange: function(mouseX, mouseY) {\r\n\t\tvar vm = this._view;\r\n\t\treturn vm ? ((Math.pow(mouseX - vm.x, 2) + Math.pow(mouseY - vm.y, 2)) < Math.pow(vm.hitRadius + vm.radius, 2)) : false;\r\n\t},\r\n\r\n\tinLabelRange: xRange,\r\n\tinXRange: xRange,\r\n\tinYRange: yRange,\r\n\r\n\tgetCenterPoint: function() {\r\n\t\tvar vm = this._view;\r\n\t\treturn {\r\n\t\t\tx: vm.x,\r\n\t\t\ty: vm.y\r\n\t\t};\r\n\t},\r\n\r\n\tgetArea: function() {\r\n\t\treturn Math.PI * Math.pow(this._view.radius, 2);\r\n\t},\r\n\r\n\ttooltipPosition: function() {\r\n\t\tvar vm = this._view;\r\n\t\treturn {\r\n\t\t\tx: vm.x,\r\n\t\t\ty: vm.y,\r\n\t\t\tpadding: vm.radius + vm.borderWidth\r\n\t\t};\r\n\t},\r\n\r\n\tdraw: function(chartArea) {\r\n\t\tvar vm = this._view;\r\n\t\tvar ctx = this._chart.ctx;\r\n\t\tvar pointStyle = vm.pointStyle;\r\n\t\tvar rotation = vm.rotation;\r\n\t\tvar radius = vm.radius;\r\n\t\tvar x = vm.x;\r\n\t\tvar y = vm.y;\r\n\t\tvar globalDefaults = core_defaults.global;\r\n\t\tvar defaultColor = globalDefaults.defaultColor; // eslint-disable-line no-shadow\r\n\r\n\t\tif (vm.skip) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Clipping for Points.\r\n\t\tif (chartArea === undefined || helpers$1.canvas._isPointInArea(vm, chartArea)) {\r\n\t\t\tctx.strokeStyle = vm.borderColor || defaultColor;\r\n\t\t\tctx.lineWidth = valueOrDefault$2(vm.borderWidth, globalDefaults.elements.point.borderWidth);\r\n\t\t\tctx.fillStyle = vm.backgroundColor || defaultColor;\r\n\t\t\thelpers$1.canvas.drawPoint(ctx, pointStyle, radius, x, y, rotation);\r\n\t\t}\r\n\t}\r\n});\n\nvar defaultColor$2 = core_defaults.global.defaultColor;\r\n\r\ncore_defaults._set('global', {\r\n\telements: {\r\n\t\trectangle: {\r\n\t\t\tbackgroundColor: defaultColor$2,\r\n\t\t\tborderColor: defaultColor$2,\r\n\t\t\tborderSkipped: 'bottom',\r\n\t\t\tborderWidth: 0\r\n\t\t}\r\n\t}\r\n});\r\n\r\nfunction isVertical(vm) {\r\n\treturn vm && vm.width !== undefined;\r\n}\r\n\r\n/**\r\n * Helper function to get the bounds of the bar regardless of the orientation\r\n * @param bar {Chart.Element.Rectangle} the bar\r\n * @return {Bounds} bounds of the bar\r\n * @private\r\n */\r\nfunction getBarBounds(vm) {\r\n\tvar x1, x2, y1, y2, half;\r\n\r\n\tif (isVertical(vm)) {\r\n\t\thalf = vm.width / 2;\r\n\t\tx1 = vm.x - half;\r\n\t\tx2 = vm.x + half;\r\n\t\ty1 = Math.min(vm.y, vm.base);\r\n\t\ty2 = Math.max(vm.y, vm.base);\r\n\t} else {\r\n\t\thalf = vm.height / 2;\r\n\t\tx1 = Math.min(vm.x, vm.base);\r\n\t\tx2 = Math.max(vm.x, vm.base);\r\n\t\ty1 = vm.y - half;\r\n\t\ty2 = vm.y + half;\r\n\t}\r\n\r\n\treturn {\r\n\t\tleft: x1,\r\n\t\ttop: y1,\r\n\t\tright: x2,\r\n\t\tbottom: y2\r\n\t};\r\n}\r\n\r\nfunction swap(orig, v1, v2) {\r\n\treturn orig === v1 ? v2 : orig === v2 ? v1 : orig;\r\n}\r\n\r\nfunction parseBorderSkipped(vm) {\r\n\tvar edge = vm.borderSkipped;\r\n\tvar res = {};\r\n\r\n\tif (!edge) {\r\n\t\treturn res;\r\n\t}\r\n\r\n\tif (vm.horizontal) {\r\n\t\tif (vm.base > vm.x) {\r\n\t\t\tedge = swap(edge, 'left', 'right');\r\n\t\t}\r\n\t} else if (vm.base < vm.y) {\r\n\t\tedge = swap(edge, 'bottom', 'top');\r\n\t}\r\n\r\n\tres[edge] = true;\r\n\treturn res;\r\n}\r\n\r\nfunction parseBorderWidth(vm, maxW, maxH) {\r\n\tvar value = vm.borderWidth;\r\n\tvar skip = parseBorderSkipped(vm);\r\n\tvar t, r, b, l;\r\n\r\n\tif (helpers$1.isObject(value)) {\r\n\t\tt = +value.top || 0;\r\n\t\tr = +value.right || 0;\r\n\t\tb = +value.bottom || 0;\r\n\t\tl = +value.left || 0;\r\n\t} else {\r\n\t\tt = r = b = l = +value || 0;\r\n\t}\r\n\r\n\treturn {\r\n\t\tt: skip.top || (t < 0) ? 0 : t > maxH ? maxH : t,\r\n\t\tr: skip.right || (r < 0) ? 0 : r > maxW ? maxW : r,\r\n\t\tb: skip.bottom || (b < 0) ? 0 : b > maxH ? maxH : b,\r\n\t\tl: skip.left || (l < 0) ? 0 : l > maxW ? maxW : l\r\n\t};\r\n}\r\n\r\nfunction boundingRects(vm) {\r\n\tvar bounds = getBarBounds(vm);\r\n\tvar width = bounds.right - bounds.left;\r\n\tvar height = bounds.bottom - bounds.top;\r\n\tvar border = parseBorderWidth(vm, width / 2, height / 2);\r\n\r\n\treturn {\r\n\t\touter: {\r\n\t\t\tx: bounds.left,\r\n\t\t\ty: bounds.top,\r\n\t\t\tw: width,\r\n\t\t\th: height\r\n\t\t},\r\n\t\tinner: {\r\n\t\t\tx: bounds.left + border.l,\r\n\t\t\ty: bounds.top + border.t,\r\n\t\t\tw: width - border.l - border.r,\r\n\t\t\th: height - border.t - border.b\r\n\t\t}\r\n\t};\r\n}\r\n\r\nfunction inRange(vm, x, y) {\r\n\tvar skipX = x === null;\r\n\tvar skipY = y === null;\r\n\tvar bounds = !vm || (skipX && skipY) ? false : getBarBounds(vm);\r\n\r\n\treturn bounds\r\n\t\t&& (skipX || x >= bounds.left && x <= bounds.right)\r\n\t\t&& (skipY || y >= bounds.top && y <= bounds.bottom);\r\n}\r\n\r\nvar element_rectangle = core_element.extend({\r\n\t_type: 'rectangle',\r\n\r\n\tdraw: function() {\r\n\t\tvar ctx = this._chart.ctx;\r\n\t\tvar vm = this._view;\r\n\t\tvar rects = boundingRects(vm);\r\n\t\tvar outer = rects.outer;\r\n\t\tvar inner = rects.inner;\r\n\r\n\t\tctx.fillStyle = vm.backgroundColor;\r\n\t\tctx.fillRect(outer.x, outer.y, outer.w, outer.h);\r\n\r\n\t\tif (outer.w === inner.w && outer.h === inner.h) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tctx.save();\r\n\t\tctx.beginPath();\r\n\t\tctx.rect(outer.x, outer.y, outer.w, outer.h);\r\n\t\tctx.clip();\r\n\t\tctx.fillStyle = vm.borderColor;\r\n\t\tctx.rect(inner.x, inner.y, inner.w, inner.h);\r\n\t\tctx.fill('evenodd');\r\n\t\tctx.restore();\r\n\t},\r\n\r\n\theight: function() {\r\n\t\tvar vm = this._view;\r\n\t\treturn vm.base - vm.y;\r\n\t},\r\n\r\n\tinRange: function(mouseX, mouseY) {\r\n\t\treturn inRange(this._view, mouseX, mouseY);\r\n\t},\r\n\r\n\tinLabelRange: function(mouseX, mouseY) {\r\n\t\tvar vm = this._view;\r\n\t\treturn isVertical(vm)\r\n\t\t\t? inRange(vm, mouseX, null)\r\n\t\t\t: inRange(vm, null, mouseY);\r\n\t},\r\n\r\n\tinXRange: function(mouseX) {\r\n\t\treturn inRange(this._view, mouseX, null);\r\n\t},\r\n\r\n\tinYRange: function(mouseY) {\r\n\t\treturn inRange(this._view, null, mouseY);\r\n\t},\r\n\r\n\tgetCenterPoint: function() {\r\n\t\tvar vm = this._view;\r\n\t\tvar x, y;\r\n\t\tif (isVertical(vm)) {\r\n\t\t\tx = vm.x;\r\n\t\t\ty = (vm.y + vm.base) / 2;\r\n\t\t} else {\r\n\t\t\tx = (vm.x + vm.base) / 2;\r\n\t\t\ty = vm.y;\r\n\t\t}\r\n\r\n\t\treturn {x: x, y: y};\r\n\t},\r\n\r\n\tgetArea: function() {\r\n\t\tvar vm = this._view;\r\n\r\n\t\treturn isVertical(vm)\r\n\t\t\t? vm.width * Math.abs(vm.y - vm.base)\r\n\t\t\t: vm.height * Math.abs(vm.x - vm.base);\r\n\t},\r\n\r\n\ttooltipPosition: function() {\r\n\t\tvar vm = this._view;\r\n\t\treturn {\r\n\t\t\tx: vm.x,\r\n\t\t\ty: vm.y\r\n\t\t};\r\n\t}\r\n});\n\nvar elements = {};\r\nvar Arc = element_arc;\r\nvar Line = element_line;\r\nvar Point = element_point;\r\nvar Rectangle = element_rectangle;\nelements.Arc = Arc;\nelements.Line = Line;\nelements.Point = Point;\nelements.Rectangle = Rectangle;\n\nvar deprecated = helpers$1._deprecated;\r\nvar valueOrDefault$3 = helpers$1.valueOrDefault;\r\n\r\ncore_defaults._set('bar', {\r\n\thover: {\r\n\t\tmode: 'label'\r\n\t},\r\n\r\n\tscales: {\r\n\t\txAxes: [{\r\n\t\t\ttype: 'category',\r\n\t\t\toffset: true,\r\n\t\t\tgridLines: {\r\n\t\t\t\toffsetGridLines: true\r\n\t\t\t}\r\n\t\t}],\r\n\r\n\t\tyAxes: [{\r\n\t\t\ttype: 'linear'\r\n\t\t}]\r\n\t}\r\n});\r\n\r\ncore_defaults._set('global', {\r\n\tdatasets: {\r\n\t\tbar: {\r\n\t\t\tcategoryPercentage: 0.8,\r\n\t\t\tbarPercentage: 0.9\r\n\t\t}\r\n\t}\r\n});\r\n\r\n/**\r\n * Computes the \"optimal\" sample size to maintain bars equally sized while preventing overlap.\r\n * @private\r\n */\r\nfunction computeMinSampleSize(scale, pixels) {\r\n\tvar min = scale._length;\r\n\tvar prev, curr, i, ilen;\r\n\r\n\tfor (i = 1, ilen = pixels.length; i < ilen; ++i) {\r\n\t\tmin = Math.min(min, Math.abs(pixels[i] - pixels[i - 1]));\r\n\t}\r\n\r\n\tfor (i = 0, ilen = scale.getTicks().length; i < ilen; ++i) {\r\n\t\tcurr = scale.getPixelForTick(i);\r\n\t\tmin = i > 0 ? Math.min(min, Math.abs(curr - prev)) : min;\r\n\t\tprev = curr;\r\n\t}\r\n\r\n\treturn min;\r\n}\r\n\r\n/**\r\n * Computes an \"ideal\" category based on the absolute bar thickness or, if undefined or null,\r\n * uses the smallest interval (see computeMinSampleSize) that prevents bar overlapping. This\r\n * mode currently always generates bars equally sized (until we introduce scriptable options?).\r\n * @private\r\n */\r\nfunction computeFitCategoryTraits(index, ruler, options) {\r\n\tvar thickness = options.barThickness;\r\n\tvar count = ruler.stackCount;\r\n\tvar curr = ruler.pixels[index];\r\n\tvar min = helpers$1.isNullOrUndef(thickness)\r\n\t\t? computeMinSampleSize(ruler.scale, ruler.pixels)\r\n\t\t: -1;\r\n\tvar size, ratio;\r\n\r\n\tif (helpers$1.isNullOrUndef(thickness)) {\r\n\t\tsize = min * options.categoryPercentage;\r\n\t\tratio = options.barPercentage;\r\n\t} else {\r\n\t\t// When bar thickness is enforced, category and bar percentages are ignored.\r\n\t\t// Note(SB): we could add support for relative bar thickness (e.g. barThickness: '50%')\r\n\t\t// and deprecate barPercentage since this value is ignored when thickness is absolute.\r\n\t\tsize = thickness * count;\r\n\t\tratio = 1;\r\n\t}\r\n\r\n\treturn {\r\n\t\tchunk: size / count,\r\n\t\tratio: ratio,\r\n\t\tstart: curr - (size / 2)\r\n\t};\r\n}\r\n\r\n/**\r\n * Computes an \"optimal\" category that globally arranges bars side by side (no gap when\r\n * percentage options are 1), based on the previous and following categories. This mode\r\n * generates bars with different widths when data are not evenly spaced.\r\n * @private\r\n */\r\nfunction computeFlexCategoryTraits(index, ruler, options) {\r\n\tvar pixels = ruler.pixels;\r\n\tvar curr = pixels[index];\r\n\tvar prev = index > 0 ? pixels[index - 1] : null;\r\n\tvar next = index < pixels.length - 1 ? pixels[index + 1] : null;\r\n\tvar percent = options.categoryPercentage;\r\n\tvar start, size;\r\n\r\n\tif (prev === null) {\r\n\t\t// first data: its size is double based on the next point or,\r\n\t\t// if it's also the last data, we use the scale size.\r\n\t\tprev = curr - (next === null ? ruler.end - ruler.start : next - curr);\r\n\t}\r\n\r\n\tif (next === null) {\r\n\t\t// last data: its size is also double based on the previous point.\r\n\t\tnext = curr + curr - prev;\r\n\t}\r\n\r\n\tstart = curr - (curr - Math.min(prev, next)) / 2 * percent;\r\n\tsize = Math.abs(next - prev) / 2 * percent;\r\n\r\n\treturn {\r\n\t\tchunk: size / ruler.stackCount,\r\n\t\tratio: options.barPercentage,\r\n\t\tstart: start\r\n\t};\r\n}\r\n\r\nvar controller_bar = core_datasetController.extend({\r\n\r\n\tdataElementType: elements.Rectangle,\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_dataElementOptions: [\r\n\t\t'backgroundColor',\r\n\t\t'borderColor',\r\n\t\t'borderSkipped',\r\n\t\t'borderWidth',\r\n\t\t'barPercentage',\r\n\t\t'barThickness',\r\n\t\t'categoryPercentage',\r\n\t\t'maxBarThickness',\r\n\t\t'minBarLength'\r\n\t],\r\n\r\n\tinitialize: function() {\r\n\t\tvar me = this;\r\n\t\tvar meta, scaleOpts;\r\n\r\n\t\tcore_datasetController.prototype.initialize.apply(me, arguments);\r\n\r\n\t\tmeta = me.getMeta();\r\n\t\tmeta.stack = me.getDataset().stack;\r\n\t\tmeta.bar = true;\r\n\r\n\t\tscaleOpts = me._getIndexScale().options;\r\n\t\tdeprecated('bar chart', scaleOpts.barPercentage, 'scales.[x/y]Axes.barPercentage', 'dataset.barPercentage');\r\n\t\tdeprecated('bar chart', scaleOpts.barThickness, 'scales.[x/y]Axes.barThickness', 'dataset.barThickness');\r\n\t\tdeprecated('bar chart', scaleOpts.categoryPercentage, 'scales.[x/y]Axes.categoryPercentage', 'dataset.categoryPercentage');\r\n\t\tdeprecated('bar chart', me._getValueScale().options.minBarLength, 'scales.[x/y]Axes.minBarLength', 'dataset.minBarLength');\r\n\t\tdeprecated('bar chart', scaleOpts.maxBarThickness, 'scales.[x/y]Axes.maxBarThickness', 'dataset.maxBarThickness');\r\n\t},\r\n\r\n\tupdate: function(reset) {\r\n\t\tvar me = this;\r\n\t\tvar rects = me.getMeta().data;\r\n\t\tvar i, ilen;\r\n\r\n\t\tme._ruler = me.getRuler();\r\n\r\n\t\tfor (i = 0, ilen = rects.length; i < ilen; ++i) {\r\n\t\t\tme.updateElement(rects[i], i, reset);\r\n\t\t}\r\n\t},\r\n\r\n\tupdateElement: function(rectangle, index, reset) {\r\n\t\tvar me = this;\r\n\t\tvar meta = me.getMeta();\r\n\t\tvar dataset = me.getDataset();\r\n\t\tvar options = me._resolveDataElementOptions(rectangle, index);\r\n\r\n\t\trectangle._xScale = me.getScaleForId(meta.xAxisID);\r\n\t\trectangle._yScale = me.getScaleForId(meta.yAxisID);\r\n\t\trectangle._datasetIndex = me.index;\r\n\t\trectangle._index = index;\r\n\t\trectangle._model = {\r\n\t\t\tbackgroundColor: options.backgroundColor,\r\n\t\t\tborderColor: options.borderColor,\r\n\t\t\tborderSkipped: options.borderSkipped,\r\n\t\t\tborderWidth: options.borderWidth,\r\n\t\t\tdatasetLabel: dataset.label,\r\n\t\t\tlabel: me.chart.data.labels[index]\r\n\t\t};\r\n\r\n\t\tif (helpers$1.isArray(dataset.data[index])) {\r\n\t\t\trectangle._model.borderSkipped = null;\r\n\t\t}\r\n\r\n\t\tme._updateElementGeometry(rectangle, index, reset, options);\r\n\r\n\t\trectangle.pivot();\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_updateElementGeometry: function(rectangle, index, reset, options) {\r\n\t\tvar me = this;\r\n\t\tvar model = rectangle._model;\r\n\t\tvar vscale = me._getValueScale();\r\n\t\tvar base = vscale.getBasePixel();\r\n\t\tvar horizontal = vscale.isHorizontal();\r\n\t\tvar ruler = me._ruler || me.getRuler();\r\n\t\tvar vpixels = me.calculateBarValuePixels(me.index, index, options);\r\n\t\tvar ipixels = me.calculateBarIndexPixels(me.index, index, ruler, options);\r\n\r\n\t\tmodel.horizontal = horizontal;\r\n\t\tmodel.base = reset ? base : vpixels.base;\r\n\t\tmodel.x = horizontal ? reset ? base : vpixels.head : ipixels.center;\r\n\t\tmodel.y = horizontal ? ipixels.center : reset ? base : vpixels.head;\r\n\t\tmodel.height = horizontal ? ipixels.size : undefined;\r\n\t\tmodel.width = horizontal ? undefined : ipixels.size;\r\n\t},\r\n\r\n\t/**\r\n\t * Returns the stacks based on groups and bar visibility.\r\n\t * @param {number} [last] - The dataset index\r\n\t * @returns {string[]} The list of stack IDs\r\n\t * @private\r\n\t */\r\n\t_getStacks: function(last) {\r\n\t\tvar me = this;\r\n\t\tvar scale = me._getIndexScale();\r\n\t\tvar metasets = scale._getMatchingVisibleMetas(me._type);\r\n\t\tvar stacked = scale.options.stacked;\r\n\t\tvar ilen = metasets.length;\r\n\t\tvar stacks = [];\r\n\t\tvar i, meta;\r\n\r\n\t\tfor (i = 0; i < ilen; ++i) {\r\n\t\t\tmeta = metasets[i];\r\n\t\t\t// stacked   | meta.stack\r\n\t\t\t//           | found | not found | undefined\r\n\t\t\t// false     |   x   |     x     |     x\r\n\t\t\t// true      |       |     x     |\r\n\t\t\t// undefined |       |     x     |     x\r\n\t\t\tif (stacked === false || stacks.indexOf(meta.stack) === -1 ||\r\n\t\t\t\t(stacked === undefined && meta.stack === undefined)) {\r\n\t\t\t\tstacks.push(meta.stack);\r\n\t\t\t}\r\n\t\t\tif (meta.index === last) {\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn stacks;\r\n\t},\r\n\r\n\t/**\r\n\t * Returns the effective number of stacks based on groups and bar visibility.\r\n\t * @private\r\n\t */\r\n\tgetStackCount: function() {\r\n\t\treturn this._getStacks().length;\r\n\t},\r\n\r\n\t/**\r\n\t * Returns the stack index for the given dataset based on groups and bar visibility.\r\n\t * @param {number} [datasetIndex] - The dataset index\r\n\t * @param {string} [name] - The stack name to find\r\n\t * @returns {number} The stack index\r\n\t * @private\r\n\t */\r\n\tgetStackIndex: function(datasetIndex, name) {\r\n\t\tvar stacks = this._getStacks(datasetIndex);\r\n\t\tvar index = (name !== undefined)\r\n\t\t\t? stacks.indexOf(name)\r\n\t\t\t: -1; // indexOf returns -1 if element is not present\r\n\r\n\t\treturn (index === -1)\r\n\t\t\t? stacks.length - 1\r\n\t\t\t: index;\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\tgetRuler: function() {\r\n\t\tvar me = this;\r\n\t\tvar scale = me._getIndexScale();\r\n\t\tvar pixels = [];\r\n\t\tvar i, ilen;\r\n\r\n\t\tfor (i = 0, ilen = me.getMeta().data.length; i < ilen; ++i) {\r\n\t\t\tpixels.push(scale.getPixelForValue(null, i, me.index));\r\n\t\t}\r\n\r\n\t\treturn {\r\n\t\t\tpixels: pixels,\r\n\t\t\tstart: scale._startPixel,\r\n\t\t\tend: scale._endPixel,\r\n\t\t\tstackCount: me.getStackCount(),\r\n\t\t\tscale: scale\r\n\t\t};\r\n\t},\r\n\r\n\t/**\r\n\t * Note: pixel values are not clamped to the scale area.\r\n\t * @private\r\n\t */\r\n\tcalculateBarValuePixels: function(datasetIndex, index, options) {\r\n\t\tvar me = this;\r\n\t\tvar chart = me.chart;\r\n\t\tvar scale = me._getValueScale();\r\n\t\tvar isHorizontal = scale.isHorizontal();\r\n\t\tvar datasets = chart.data.datasets;\r\n\t\tvar metasets = scale._getMatchingVisibleMetas(me._type);\r\n\t\tvar value = scale._parseValue(datasets[datasetIndex].data[index]);\r\n\t\tvar minBarLength = options.minBarLength;\r\n\t\tvar stacked = scale.options.stacked;\r\n\t\tvar stack = me.getMeta().stack;\r\n\t\tvar start = value.start === undefined ? 0 : value.max >= 0 && value.min >= 0 ? value.min : value.max;\r\n\t\tvar length = value.start === undefined ? value.end : value.max >= 0 && value.min >= 0 ? value.max - value.min : value.min - value.max;\r\n\t\tvar ilen = metasets.length;\r\n\t\tvar i, imeta, ivalue, base, head, size, stackLength;\r\n\r\n\t\tif (stacked || (stacked === undefined && stack !== undefined)) {\r\n\t\t\tfor (i = 0; i < ilen; ++i) {\r\n\t\t\t\timeta = metasets[i];\r\n\r\n\t\t\t\tif (imeta.index === datasetIndex) {\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (imeta.stack === stack) {\r\n\t\t\t\t\tstackLength = scale._parseValue(datasets[imeta.index].data[index]);\r\n\t\t\t\t\tivalue = stackLength.start === undefined ? stackLength.end : stackLength.min >= 0 && stackLength.max >= 0 ? stackLength.max : stackLength.min;\r\n\r\n\t\t\t\t\tif ((value.min < 0 && ivalue < 0) || (value.max >= 0 && ivalue > 0)) {\r\n\t\t\t\t\t\tstart += ivalue;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tbase = scale.getPixelForValue(start);\r\n\t\thead = scale.getPixelForValue(start + length);\r\n\t\tsize = head - base;\r\n\r\n\t\tif (minBarLength !== undefined && Math.abs(size) < minBarLength) {\r\n\t\t\tsize = minBarLength;\r\n\t\t\tif (length >= 0 && !isHorizontal || length < 0 && isHorizontal) {\r\n\t\t\t\thead = base - minBarLength;\r\n\t\t\t} else {\r\n\t\t\t\thead = base + minBarLength;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn {\r\n\t\t\tsize: size,\r\n\t\t\tbase: base,\r\n\t\t\thead: head,\r\n\t\t\tcenter: head + size / 2\r\n\t\t};\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\tcalculateBarIndexPixels: function(datasetIndex, index, ruler, options) {\r\n\t\tvar me = this;\r\n\t\tvar range = options.barThickness === 'flex'\r\n\t\t\t? computeFlexCategoryTraits(index, ruler, options)\r\n\t\t\t: computeFitCategoryTraits(index, ruler, options);\r\n\r\n\t\tvar stackIndex = me.getStackIndex(datasetIndex, me.getMeta().stack);\r\n\t\tvar center = range.start + (range.chunk * stackIndex) + (range.chunk / 2);\r\n\t\tvar size = Math.min(\r\n\t\t\tvalueOrDefault$3(options.maxBarThickness, Infinity),\r\n\t\t\trange.chunk * range.ratio);\r\n\r\n\t\treturn {\r\n\t\t\tbase: center - size / 2,\r\n\t\t\thead: center + size / 2,\r\n\t\t\tcenter: center,\r\n\t\t\tsize: size\r\n\t\t};\r\n\t},\r\n\r\n\tdraw: function() {\r\n\t\tvar me = this;\r\n\t\tvar chart = me.chart;\r\n\t\tvar scale = me._getValueScale();\r\n\t\tvar rects = me.getMeta().data;\r\n\t\tvar dataset = me.getDataset();\r\n\t\tvar ilen = rects.length;\r\n\t\tvar i = 0;\r\n\r\n\t\thelpers$1.canvas.clipArea(chart.ctx, chart.chartArea);\r\n\r\n\t\tfor (; i < ilen; ++i) {\r\n\t\t\tvar val = scale._parseValue(dataset.data[i]);\r\n\t\t\tif (!isNaN(val.min) && !isNaN(val.max)) {\r\n\t\t\t\trects[i].draw();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\thelpers$1.canvas.unclipArea(chart.ctx);\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_resolveDataElementOptions: function() {\r\n\t\tvar me = this;\r\n\t\tvar values = helpers$1.extend({}, core_datasetController.prototype._resolveDataElementOptions.apply(me, arguments));\r\n\t\tvar indexOpts = me._getIndexScale().options;\r\n\t\tvar valueOpts = me._getValueScale().options;\r\n\r\n\t\tvalues.barPercentage = valueOrDefault$3(indexOpts.barPercentage, values.barPercentage);\r\n\t\tvalues.barThickness = valueOrDefault$3(indexOpts.barThickness, values.barThickness);\r\n\t\tvalues.categoryPercentage = valueOrDefault$3(indexOpts.categoryPercentage, values.categoryPercentage);\r\n\t\tvalues.maxBarThickness = valueOrDefault$3(indexOpts.maxBarThickness, values.maxBarThickness);\r\n\t\tvalues.minBarLength = valueOrDefault$3(valueOpts.minBarLength, values.minBarLength);\r\n\r\n\t\treturn values;\r\n\t}\r\n\r\n});\n\nvar valueOrDefault$4 = helpers$1.valueOrDefault;\r\nvar resolve$1 = helpers$1.options.resolve;\r\n\r\ncore_defaults._set('bubble', {\r\n\thover: {\r\n\t\tmode: 'single'\r\n\t},\r\n\r\n\tscales: {\r\n\t\txAxes: [{\r\n\t\t\ttype: 'linear', // bubble should probably use a linear scale by default\r\n\t\t\tposition: 'bottom',\r\n\t\t\tid: 'x-axis-0' // need an ID so datasets can reference the scale\r\n\t\t}],\r\n\t\tyAxes: [{\r\n\t\t\ttype: 'linear',\r\n\t\t\tposition: 'left',\r\n\t\t\tid: 'y-axis-0'\r\n\t\t}]\r\n\t},\r\n\r\n\ttooltips: {\r\n\t\tcallbacks: {\r\n\t\t\ttitle: function() {\r\n\t\t\t\t// Title doesn't make sense for scatter since we format the data as a point\r\n\t\t\t\treturn '';\r\n\t\t\t},\r\n\t\t\tlabel: function(item, data) {\r\n\t\t\t\tvar datasetLabel = data.datasets[item.datasetIndex].label || '';\r\n\t\t\t\tvar dataPoint = data.datasets[item.datasetIndex].data[item.index];\r\n\t\t\t\treturn datasetLabel + ': (' + item.xLabel + ', ' + item.yLabel + ', ' + dataPoint.r + ')';\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n});\r\n\r\nvar controller_bubble = core_datasetController.extend({\r\n\t/**\r\n\t * @protected\r\n\t */\r\n\tdataElementType: elements.Point,\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_dataElementOptions: [\r\n\t\t'backgroundColor',\r\n\t\t'borderColor',\r\n\t\t'borderWidth',\r\n\t\t'hoverBackgroundColor',\r\n\t\t'hoverBorderColor',\r\n\t\t'hoverBorderWidth',\r\n\t\t'hoverRadius',\r\n\t\t'hitRadius',\r\n\t\t'pointStyle',\r\n\t\t'rotation'\r\n\t],\r\n\r\n\t/**\r\n\t * @protected\r\n\t */\r\n\tupdate: function(reset) {\r\n\t\tvar me = this;\r\n\t\tvar meta = me.getMeta();\r\n\t\tvar points = meta.data;\r\n\r\n\t\t// Update Points\r\n\t\thelpers$1.each(points, function(point, index) {\r\n\t\t\tme.updateElement(point, index, reset);\r\n\t\t});\r\n\t},\r\n\r\n\t/**\r\n\t * @protected\r\n\t */\r\n\tupdateElement: function(point, index, reset) {\r\n\t\tvar me = this;\r\n\t\tvar meta = me.getMeta();\r\n\t\tvar custom = point.custom || {};\r\n\t\tvar xScale = me.getScaleForId(meta.xAxisID);\r\n\t\tvar yScale = me.getScaleForId(meta.yAxisID);\r\n\t\tvar options = me._resolveDataElementOptions(point, index);\r\n\t\tvar data = me.getDataset().data[index];\r\n\t\tvar dsIndex = me.index;\r\n\r\n\t\tvar x = reset ? xScale.getPixelForDecimal(0.5) : xScale.getPixelForValue(typeof data === 'object' ? data : NaN, index, dsIndex);\r\n\t\tvar y = reset ? yScale.getBasePixel() : yScale.getPixelForValue(data, index, dsIndex);\r\n\r\n\t\tpoint._xScale = xScale;\r\n\t\tpoint._yScale = yScale;\r\n\t\tpoint._options = options;\r\n\t\tpoint._datasetIndex = dsIndex;\r\n\t\tpoint._index = index;\r\n\t\tpoint._model = {\r\n\t\t\tbackgroundColor: options.backgroundColor,\r\n\t\t\tborderColor: options.borderColor,\r\n\t\t\tborderWidth: options.borderWidth,\r\n\t\t\thitRadius: options.hitRadius,\r\n\t\t\tpointStyle: options.pointStyle,\r\n\t\t\trotation: options.rotation,\r\n\t\t\tradius: reset ? 0 : options.radius,\r\n\t\t\tskip: custom.skip || isNaN(x) || isNaN(y),\r\n\t\t\tx: x,\r\n\t\t\ty: y,\r\n\t\t};\r\n\r\n\t\tpoint.pivot();\r\n\t},\r\n\r\n\t/**\r\n\t * @protected\r\n\t */\r\n\tsetHoverStyle: function(point) {\r\n\t\tvar model = point._model;\r\n\t\tvar options = point._options;\r\n\t\tvar getHoverColor = helpers$1.getHoverColor;\r\n\r\n\t\tpoint.$previousStyle = {\r\n\t\t\tbackgroundColor: model.backgroundColor,\r\n\t\t\tborderColor: model.borderColor,\r\n\t\t\tborderWidth: model.borderWidth,\r\n\t\t\tradius: model.radius\r\n\t\t};\r\n\r\n\t\tmodel.backgroundColor = valueOrDefault$4(options.hoverBackgroundColor, getHoverColor(options.backgroundColor));\r\n\t\tmodel.borderColor = valueOrDefault$4(options.hoverBorderColor, getHoverColor(options.borderColor));\r\n\t\tmodel.borderWidth = valueOrDefault$4(options.hoverBorderWidth, options.borderWidth);\r\n\t\tmodel.radius = options.radius + options.hoverRadius;\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_resolveDataElementOptions: function(point, index) {\r\n\t\tvar me = this;\r\n\t\tvar chart = me.chart;\r\n\t\tvar dataset = me.getDataset();\r\n\t\tvar custom = point.custom || {};\r\n\t\tvar data = dataset.data[index] || {};\r\n\t\tvar values = core_datasetController.prototype._resolveDataElementOptions.apply(me, arguments);\r\n\r\n\t\t// Scriptable options\r\n\t\tvar context = {\r\n\t\t\tchart: chart,\r\n\t\t\tdataIndex: index,\r\n\t\t\tdataset: dataset,\r\n\t\t\tdatasetIndex: me.index\r\n\t\t};\r\n\r\n\t\t// In case values were cached (and thus frozen), we need to clone the values\r\n\t\tif (me._cachedDataOpts === values) {\r\n\t\t\tvalues = helpers$1.extend({}, values);\r\n\t\t}\r\n\r\n\t\t// Custom radius resolution\r\n\t\tvalues.radius = resolve$1([\r\n\t\t\tcustom.radius,\r\n\t\t\tdata.r,\r\n\t\t\tme._config.radius,\r\n\t\t\tchart.options.elements.point.radius\r\n\t\t], context, index);\r\n\r\n\t\treturn values;\r\n\t}\r\n});\n\nvar valueOrDefault$5 = helpers$1.valueOrDefault;\r\n\r\nvar PI$1 = Math.PI;\r\nvar DOUBLE_PI$1 = PI$1 * 2;\r\nvar HALF_PI$1 = PI$1 / 2;\r\n\r\ncore_defaults._set('doughnut', {\r\n\tanimation: {\r\n\t\t// Boolean - Whether we animate the rotation of the Doughnut\r\n\t\tanimateRotate: true,\r\n\t\t// Boolean - Whether we animate scaling the Doughnut from the centre\r\n\t\tanimateScale: false\r\n\t},\r\n\thover: {\r\n\t\tmode: 'single'\r\n\t},\r\n\tlegendCallback: function(chart) {\r\n\t\tvar list = document.createElement('ul');\r\n\t\tvar data = chart.data;\r\n\t\tvar datasets = data.datasets;\r\n\t\tvar labels = data.labels;\r\n\t\tvar i, ilen, listItem, listItemSpan;\r\n\r\n\t\tlist.setAttribute('class', chart.id + '-legend');\r\n\t\tif (datasets.length) {\r\n\t\t\tfor (i = 0, ilen = datasets[0].data.length; i < ilen; ++i) {\r\n\t\t\t\tlistItem = list.appendChild(document.createElement('li'));\r\n\t\t\t\tlistItemSpan = listItem.appendChild(document.createElement('span'));\r\n\t\t\t\tlistItemSpan.style.backgroundColor = datasets[0].backgroundColor[i];\r\n\t\t\t\tif (labels[i]) {\r\n\t\t\t\t\tlistItem.appendChild(document.createTextNode(labels[i]));\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn list.outerHTML;\r\n\t},\r\n\tlegend: {\r\n\t\tlabels: {\r\n\t\t\tgenerateLabels: function(chart) {\r\n\t\t\t\tvar data = chart.data;\r\n\t\t\t\tif (data.labels.length && data.datasets.length) {\r\n\t\t\t\t\treturn data.labels.map(function(label, i) {\r\n\t\t\t\t\t\tvar meta = chart.getDatasetMeta(0);\r\n\t\t\t\t\t\tvar style = meta.controller.getStyle(i);\r\n\r\n\t\t\t\t\t\treturn {\r\n\t\t\t\t\t\t\ttext: label,\r\n\t\t\t\t\t\t\tfillStyle: style.backgroundColor,\r\n\t\t\t\t\t\t\tstrokeStyle: style.borderColor,\r\n\t\t\t\t\t\t\tlineWidth: style.borderWidth,\r\n\t\t\t\t\t\t\thidden: isNaN(data.datasets[0].data[i]) || meta.data[i].hidden,\r\n\r\n\t\t\t\t\t\t\t// Extra data used for toggling the correct item\r\n\t\t\t\t\t\t\tindex: i\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t\treturn [];\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\tonClick: function(e, legendItem) {\r\n\t\t\tvar index = legendItem.index;\r\n\t\t\tvar chart = this.chart;\r\n\t\t\tvar i, ilen, meta;\r\n\r\n\t\t\tfor (i = 0, ilen = (chart.data.datasets || []).length; i < ilen; ++i) {\r\n\t\t\t\tmeta = chart.getDatasetMeta(i);\r\n\t\t\t\t// toggle visibility of index if exists\r\n\t\t\t\tif (meta.data[index]) {\r\n\t\t\t\t\tmeta.data[index].hidden = !meta.data[index].hidden;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tchart.update();\r\n\t\t}\r\n\t},\r\n\r\n\t// The percentage of the chart that we cut out of the middle.\r\n\tcutoutPercentage: 50,\r\n\r\n\t// The rotation of the chart, where the first data arc begins.\r\n\trotation: -HALF_PI$1,\r\n\r\n\t// The total circumference of the chart.\r\n\tcircumference: DOUBLE_PI$1,\r\n\r\n\t// Need to override these to give a nice default\r\n\ttooltips: {\r\n\t\tcallbacks: {\r\n\t\t\ttitle: function() {\r\n\t\t\t\treturn '';\r\n\t\t\t},\r\n\t\t\tlabel: function(tooltipItem, data) {\r\n\t\t\t\tvar dataLabel = data.labels[tooltipItem.index];\r\n\t\t\t\tvar value = ': ' + data.datasets[tooltipItem.datasetIndex].data[tooltipItem.index];\r\n\r\n\t\t\t\tif (helpers$1.isArray(dataLabel)) {\r\n\t\t\t\t\t// show value on first line of multiline label\r\n\t\t\t\t\t// need to clone because we are changing the value\r\n\t\t\t\t\tdataLabel = dataLabel.slice();\r\n\t\t\t\t\tdataLabel[0] += value;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tdataLabel += value;\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn dataLabel;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n});\r\n\r\nvar controller_doughnut = core_datasetController.extend({\r\n\r\n\tdataElementType: elements.Arc,\r\n\r\n\tlinkScales: helpers$1.noop,\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_dataElementOptions: [\r\n\t\t'backgroundColor',\r\n\t\t'borderColor',\r\n\t\t'borderWidth',\r\n\t\t'borderAlign',\r\n\t\t'hoverBackgroundColor',\r\n\t\t'hoverBorderColor',\r\n\t\t'hoverBorderWidth',\r\n\t],\r\n\r\n\t// Get index of the dataset in relation to the visible datasets. This allows determining the inner and outer radius correctly\r\n\tgetRingIndex: function(datasetIndex) {\r\n\t\tvar ringIndex = 0;\r\n\r\n\t\tfor (var j = 0; j < datasetIndex; ++j) {\r\n\t\t\tif (this.chart.isDatasetVisible(j)) {\r\n\t\t\t\t++ringIndex;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn ringIndex;\r\n\t},\r\n\r\n\tupdate: function(reset) {\r\n\t\tvar me = this;\r\n\t\tvar chart = me.chart;\r\n\t\tvar chartArea = chart.chartArea;\r\n\t\tvar opts = chart.options;\r\n\t\tvar ratioX = 1;\r\n\t\tvar ratioY = 1;\r\n\t\tvar offsetX = 0;\r\n\t\tvar offsetY = 0;\r\n\t\tvar meta = me.getMeta();\r\n\t\tvar arcs = meta.data;\r\n\t\tvar cutout = opts.cutoutPercentage / 100 || 0;\r\n\t\tvar circumference = opts.circumference;\r\n\t\tvar chartWeight = me._getRingWeight(me.index);\r\n\t\tvar maxWidth, maxHeight, i, ilen;\r\n\r\n\t\t// If the chart's circumference isn't a full circle, calculate size as a ratio of the width/height of the arc\r\n\t\tif (circumference < DOUBLE_PI$1) {\r\n\t\t\tvar startAngle = opts.rotation % DOUBLE_PI$1;\r\n\t\t\tstartAngle += startAngle >= PI$1 ? -DOUBLE_PI$1 : startAngle < -PI$1 ? DOUBLE_PI$1 : 0;\r\n\t\t\tvar endAngle = startAngle + circumference;\r\n\t\t\tvar startX = Math.cos(startAngle);\r\n\t\t\tvar startY = Math.sin(startAngle);\r\n\t\t\tvar endX = Math.cos(endAngle);\r\n\t\t\tvar endY = Math.sin(endAngle);\r\n\t\t\tvar contains0 = (startAngle <= 0 && endAngle >= 0) || endAngle >= DOUBLE_PI$1;\r\n\t\t\tvar contains90 = (startAngle <= HALF_PI$1 && endAngle >= HALF_PI$1) || endAngle >= DOUBLE_PI$1 + HALF_PI$1;\r\n\t\t\tvar contains180 = startAngle === -PI$1 || endAngle >= PI$1;\r\n\t\t\tvar contains270 = (startAngle <= -HALF_PI$1 && endAngle >= -HALF_PI$1) || endAngle >= PI$1 + HALF_PI$1;\r\n\t\t\tvar minX = contains180 ? -1 : Math.min(startX, startX * cutout, endX, endX * cutout);\r\n\t\t\tvar minY = contains270 ? -1 : Math.min(startY, startY * cutout, endY, endY * cutout);\r\n\t\t\tvar maxX = contains0 ? 1 : Math.max(startX, startX * cutout, endX, endX * cutout);\r\n\t\t\tvar maxY = contains90 ? 1 : Math.max(startY, startY * cutout, endY, endY * cutout);\r\n\t\t\tratioX = (maxX - minX) / 2;\r\n\t\t\tratioY = (maxY - minY) / 2;\r\n\t\t\toffsetX = -(maxX + minX) / 2;\r\n\t\t\toffsetY = -(maxY + minY) / 2;\r\n\t\t}\r\n\r\n\t\tfor (i = 0, ilen = arcs.length; i < ilen; ++i) {\r\n\t\t\tarcs[i]._options = me._resolveDataElementOptions(arcs[i], i);\r\n\t\t}\r\n\r\n\t\tchart.borderWidth = me.getMaxBorderWidth();\r\n\t\tmaxWidth = (chartArea.right - chartArea.left - chart.borderWidth) / ratioX;\r\n\t\tmaxHeight = (chartArea.bottom - chartArea.top - chart.borderWidth) / ratioY;\r\n\t\tchart.outerRadius = Math.max(Math.min(maxWidth, maxHeight) / 2, 0);\r\n\t\tchart.innerRadius = Math.max(chart.outerRadius * cutout, 0);\r\n\t\tchart.radiusLength = (chart.outerRadius - chart.innerRadius) / (me._getVisibleDatasetWeightTotal() || 1);\r\n\t\tchart.offsetX = offsetX * chart.outerRadius;\r\n\t\tchart.offsetY = offsetY * chart.outerRadius;\r\n\r\n\t\tmeta.total = me.calculateTotal();\r\n\r\n\t\tme.outerRadius = chart.outerRadius - chart.radiusLength * me._getRingWeightOffset(me.index);\r\n\t\tme.innerRadius = Math.max(me.outerRadius - chart.radiusLength * chartWeight, 0);\r\n\r\n\t\tfor (i = 0, ilen = arcs.length; i < ilen; ++i) {\r\n\t\t\tme.updateElement(arcs[i], i, reset);\r\n\t\t}\r\n\t},\r\n\r\n\tupdateElement: function(arc, index, reset) {\r\n\t\tvar me = this;\r\n\t\tvar chart = me.chart;\r\n\t\tvar chartArea = chart.chartArea;\r\n\t\tvar opts = chart.options;\r\n\t\tvar animationOpts = opts.animation;\r\n\t\tvar centerX = (chartArea.left + chartArea.right) / 2;\r\n\t\tvar centerY = (chartArea.top + chartArea.bottom) / 2;\r\n\t\tvar startAngle = opts.rotation; // non reset case handled later\r\n\t\tvar endAngle = opts.rotation; // non reset case handled later\r\n\t\tvar dataset = me.getDataset();\r\n\t\tvar circumference = reset && animationOpts.animateRotate ? 0 : arc.hidden ? 0 : me.calculateCircumference(dataset.data[index]) * (opts.circumference / DOUBLE_PI$1);\r\n\t\tvar innerRadius = reset && animationOpts.animateScale ? 0 : me.innerRadius;\r\n\t\tvar outerRadius = reset && animationOpts.animateScale ? 0 : me.outerRadius;\r\n\t\tvar options = arc._options || {};\r\n\r\n\t\thelpers$1.extend(arc, {\r\n\t\t\t// Utility\r\n\t\t\t_datasetIndex: me.index,\r\n\t\t\t_index: index,\r\n\r\n\t\t\t// Desired view properties\r\n\t\t\t_model: {\r\n\t\t\t\tbackgroundColor: options.backgroundColor,\r\n\t\t\t\tborderColor: options.borderColor,\r\n\t\t\t\tborderWidth: options.borderWidth,\r\n\t\t\t\tborderAlign: options.borderAlign,\r\n\t\t\t\tx: centerX + chart.offsetX,\r\n\t\t\t\ty: centerY + chart.offsetY,\r\n\t\t\t\tstartAngle: startAngle,\r\n\t\t\t\tendAngle: endAngle,\r\n\t\t\t\tcircumference: circumference,\r\n\t\t\t\touterRadius: outerRadius,\r\n\t\t\t\tinnerRadius: innerRadius,\r\n\t\t\t\tlabel: helpers$1.valueAtIndexOrDefault(dataset.label, index, chart.data.labels[index])\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tvar model = arc._model;\r\n\r\n\t\t// Set correct angles if not resetting\r\n\t\tif (!reset || !animationOpts.animateRotate) {\r\n\t\t\tif (index === 0) {\r\n\t\t\t\tmodel.startAngle = opts.rotation;\r\n\t\t\t} else {\r\n\t\t\t\tmodel.startAngle = me.getMeta().data[index - 1]._model.endAngle;\r\n\t\t\t}\r\n\r\n\t\t\tmodel.endAngle = model.startAngle + model.circumference;\r\n\t\t}\r\n\r\n\t\tarc.pivot();\r\n\t},\r\n\r\n\tcalculateTotal: function() {\r\n\t\tvar dataset = this.getDataset();\r\n\t\tvar meta = this.getMeta();\r\n\t\tvar total = 0;\r\n\t\tvar value;\r\n\r\n\t\thelpers$1.each(meta.data, function(element, index) {\r\n\t\t\tvalue = dataset.data[index];\r\n\t\t\tif (!isNaN(value) && !element.hidden) {\r\n\t\t\t\ttotal += Math.abs(value);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\t/* if (total === 0) {\r\n\t\t\ttotal = NaN;\r\n\t\t}*/\r\n\r\n\t\treturn total;\r\n\t},\r\n\r\n\tcalculateCircumference: function(value) {\r\n\t\tvar total = this.getMeta().total;\r\n\t\tif (total > 0 && !isNaN(value)) {\r\n\t\t\treturn DOUBLE_PI$1 * (Math.abs(value) / total);\r\n\t\t}\r\n\t\treturn 0;\r\n\t},\r\n\r\n\t// gets the max border or hover width to properly scale pie charts\r\n\tgetMaxBorderWidth: function(arcs) {\r\n\t\tvar me = this;\r\n\t\tvar max = 0;\r\n\t\tvar chart = me.chart;\r\n\t\tvar i, ilen, meta, arc, controller, options, borderWidth, hoverWidth;\r\n\r\n\t\tif (!arcs) {\r\n\t\t\t// Find the outmost visible dataset\r\n\t\t\tfor (i = 0, ilen = chart.data.datasets.length; i < ilen; ++i) {\r\n\t\t\t\tif (chart.isDatasetVisible(i)) {\r\n\t\t\t\t\tmeta = chart.getDatasetMeta(i);\r\n\t\t\t\t\tarcs = meta.data;\r\n\t\t\t\t\tif (i !== me.index) {\r\n\t\t\t\t\t\tcontroller = meta.controller;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (!arcs) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\t\tfor (i = 0, ilen = arcs.length; i < ilen; ++i) {\r\n\t\t\tarc = arcs[i];\r\n\t\t\tif (controller) {\r\n\t\t\t\tcontroller._configure();\r\n\t\t\t\toptions = controller._resolveDataElementOptions(arc, i);\r\n\t\t\t} else {\r\n\t\t\t\toptions = arc._options;\r\n\t\t\t}\r\n\t\t\tif (options.borderAlign !== 'inner') {\r\n\t\t\t\tborderWidth = options.borderWidth;\r\n\t\t\t\thoverWidth = options.hoverBorderWidth;\r\n\r\n\t\t\t\tmax = borderWidth > max ? borderWidth : max;\r\n\t\t\t\tmax = hoverWidth > max ? hoverWidth : max;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn max;\r\n\t},\r\n\r\n\t/**\r\n\t * @protected\r\n\t */\r\n\tsetHoverStyle: function(arc) {\r\n\t\tvar model = arc._model;\r\n\t\tvar options = arc._options;\r\n\t\tvar getHoverColor = helpers$1.getHoverColor;\r\n\r\n\t\tarc.$previousStyle = {\r\n\t\t\tbackgroundColor: model.backgroundColor,\r\n\t\t\tborderColor: model.borderColor,\r\n\t\t\tborderWidth: model.borderWidth,\r\n\t\t};\r\n\r\n\t\tmodel.backgroundColor = valueOrDefault$5(options.hoverBackgroundColor, getHoverColor(options.backgroundColor));\r\n\t\tmodel.borderColor = valueOrDefault$5(options.hoverBorderColor, getHoverColor(options.borderColor));\r\n\t\tmodel.borderWidth = valueOrDefault$5(options.hoverBorderWidth, options.borderWidth);\r\n\t},\r\n\r\n\t/**\r\n\t * Get radius length offset of the dataset in relation to the visible datasets weights. This allows determining the inner and outer radius correctly\r\n\t * @private\r\n\t */\r\n\t_getRingWeightOffset: function(datasetIndex) {\r\n\t\tvar ringWeightOffset = 0;\r\n\r\n\t\tfor (var i = 0; i < datasetIndex; ++i) {\r\n\t\t\tif (this.chart.isDatasetVisible(i)) {\r\n\t\t\t\tringWeightOffset += this._getRingWeight(i);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn ringWeightOffset;\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_getRingWeight: function(dataSetIndex) {\r\n\t\treturn Math.max(valueOrDefault$5(this.chart.data.datasets[dataSetIndex].weight, 1), 0);\r\n\t},\r\n\r\n\t/**\r\n\t * Returns the sum of all visibile data set weights.  This value can be 0.\r\n\t * @private\r\n\t */\r\n\t_getVisibleDatasetWeightTotal: function() {\r\n\t\treturn this._getRingWeightOffset(this.chart.data.datasets.length);\r\n\t}\r\n});\n\ncore_defaults._set('horizontalBar', {\r\n\thover: {\r\n\t\tmode: 'index',\r\n\t\taxis: 'y'\r\n\t},\r\n\r\n\tscales: {\r\n\t\txAxes: [{\r\n\t\t\ttype: 'linear',\r\n\t\t\tposition: 'bottom'\r\n\t\t}],\r\n\r\n\t\tyAxes: [{\r\n\t\t\ttype: 'category',\r\n\t\t\tposition: 'left',\r\n\t\t\toffset: true,\r\n\t\t\tgridLines: {\r\n\t\t\t\toffsetGridLines: true\r\n\t\t\t}\r\n\t\t}]\r\n\t},\r\n\r\n\telements: {\r\n\t\trectangle: {\r\n\t\t\tborderSkipped: 'left'\r\n\t\t}\r\n\t},\r\n\r\n\ttooltips: {\r\n\t\tmode: 'index',\r\n\t\taxis: 'y'\r\n\t}\r\n});\r\n\r\ncore_defaults._set('global', {\r\n\tdatasets: {\r\n\t\thorizontalBar: {\r\n\t\t\tcategoryPercentage: 0.8,\r\n\t\t\tbarPercentage: 0.9\r\n\t\t}\r\n\t}\r\n});\r\n\r\nvar controller_horizontalBar = controller_bar.extend({\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_getValueScaleId: function() {\r\n\t\treturn this.getMeta().xAxisID;\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_getIndexScaleId: function() {\r\n\t\treturn this.getMeta().yAxisID;\r\n\t}\r\n});\n\nvar valueOrDefault$6 = helpers$1.valueOrDefault;\r\nvar resolve$2 = helpers$1.options.resolve;\r\nvar isPointInArea = helpers$1.canvas._isPointInArea;\r\n\r\ncore_defaults._set('line', {\r\n\tshowLines: true,\r\n\tspanGaps: false,\r\n\r\n\thover: {\r\n\t\tmode: 'label'\r\n\t},\r\n\r\n\tscales: {\r\n\t\txAxes: [{\r\n\t\t\ttype: 'category',\r\n\t\t\tid: 'x-axis-0'\r\n\t\t}],\r\n\t\tyAxes: [{\r\n\t\t\ttype: 'linear',\r\n\t\t\tid: 'y-axis-0'\r\n\t\t}]\r\n\t}\r\n});\r\n\r\nfunction scaleClip(scale, halfBorderWidth) {\r\n\tvar tickOpts = scale && scale.options.ticks || {};\r\n\tvar reverse = tickOpts.reverse;\r\n\tvar min = tickOpts.min === undefined ? halfBorderWidth : 0;\r\n\tvar max = tickOpts.max === undefined ? halfBorderWidth : 0;\r\n\treturn {\r\n\t\tstart: reverse ? max : min,\r\n\t\tend: reverse ? min : max\r\n\t};\r\n}\r\n\r\nfunction defaultClip(xScale, yScale, borderWidth) {\r\n\tvar halfBorderWidth = borderWidth / 2;\r\n\tvar x = scaleClip(xScale, halfBorderWidth);\r\n\tvar y = scaleClip(yScale, halfBorderWidth);\r\n\r\n\treturn {\r\n\t\ttop: y.end,\r\n\t\tright: x.end,\r\n\t\tbottom: y.start,\r\n\t\tleft: x.start\r\n\t};\r\n}\r\n\r\nfunction toClip(value) {\r\n\tvar t, r, b, l;\r\n\r\n\tif (helpers$1.isObject(value)) {\r\n\t\tt = value.top;\r\n\t\tr = value.right;\r\n\t\tb = value.bottom;\r\n\t\tl = value.left;\r\n\t} else {\r\n\t\tt = r = b = l = value;\r\n\t}\r\n\r\n\treturn {\r\n\t\ttop: t,\r\n\t\tright: r,\r\n\t\tbottom: b,\r\n\t\tleft: l\r\n\t};\r\n}\r\n\r\n\r\nvar controller_line = core_datasetController.extend({\r\n\r\n\tdatasetElementType: elements.Line,\r\n\r\n\tdataElementType: elements.Point,\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_datasetElementOptions: [\r\n\t\t'backgroundColor',\r\n\t\t'borderCapStyle',\r\n\t\t'borderColor',\r\n\t\t'borderDash',\r\n\t\t'borderDashOffset',\r\n\t\t'borderJoinStyle',\r\n\t\t'borderWidth',\r\n\t\t'cubicInterpolationMode',\r\n\t\t'fill'\r\n\t],\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_dataElementOptions: {\r\n\t\tbackgroundColor: 'pointBackgroundColor',\r\n\t\tborderColor: 'pointBorderColor',\r\n\t\tborderWidth: 'pointBorderWidth',\r\n\t\thitRadius: 'pointHitRadius',\r\n\t\thoverBackgroundColor: 'pointHoverBackgroundColor',\r\n\t\thoverBorderColor: 'pointHoverBorderColor',\r\n\t\thoverBorderWidth: 'pointHoverBorderWidth',\r\n\t\thoverRadius: 'pointHoverRadius',\r\n\t\tpointStyle: 'pointStyle',\r\n\t\tradius: 'pointRadius',\r\n\t\trotation: 'pointRotation'\r\n\t},\r\n\r\n\tupdate: function(reset) {\r\n\t\tvar me = this;\r\n\t\tvar meta = me.getMeta();\r\n\t\tvar line = meta.dataset;\r\n\t\tvar points = meta.data || [];\r\n\t\tvar options = me.chart.options;\r\n\t\tvar config = me._config;\r\n\t\tvar showLine = me._showLine = valueOrDefault$6(config.showLine, options.showLines);\r\n\t\tvar i, ilen;\r\n\r\n\t\tme._xScale = me.getScaleForId(meta.xAxisID);\r\n\t\tme._yScale = me.getScaleForId(meta.yAxisID);\r\n\r\n\t\t// Update Line\r\n\t\tif (showLine) {\r\n\t\t\t// Compatibility: If the properties are defined with only the old name, use those values\r\n\t\t\tif (config.tension !== undefined && config.lineTension === undefined) {\r\n\t\t\t\tconfig.lineTension = config.tension;\r\n\t\t\t}\r\n\r\n\t\t\t// Utility\r\n\t\t\tline._scale = me._yScale;\r\n\t\t\tline._datasetIndex = me.index;\r\n\t\t\t// Data\r\n\t\t\tline._children = points;\r\n\t\t\t// Model\r\n\t\t\tline._model = me._resolveDatasetElementOptions(line);\r\n\r\n\t\t\tline.pivot();\r\n\t\t}\r\n\r\n\t\t// Update Points\r\n\t\tfor (i = 0, ilen = points.length; i < ilen; ++i) {\r\n\t\t\tme.updateElement(points[i], i, reset);\r\n\t\t}\r\n\r\n\t\tif (showLine && line._model.tension !== 0) {\r\n\t\t\tme.updateBezierControlPoints();\r\n\t\t}\r\n\r\n\t\t// Now pivot the point for animation\r\n\t\tfor (i = 0, ilen = points.length; i < ilen; ++i) {\r\n\t\t\tpoints[i].pivot();\r\n\t\t}\r\n\t},\r\n\r\n\tupdateElement: function(point, index, reset) {\r\n\t\tvar me = this;\r\n\t\tvar meta = me.getMeta();\r\n\t\tvar custom = point.custom || {};\r\n\t\tvar dataset = me.getDataset();\r\n\t\tvar datasetIndex = me.index;\r\n\t\tvar value = dataset.data[index];\r\n\t\tvar xScale = me._xScale;\r\n\t\tvar yScale = me._yScale;\r\n\t\tvar lineModel = meta.dataset._model;\r\n\t\tvar x, y;\r\n\r\n\t\tvar options = me._resolveDataElementOptions(point, index);\r\n\r\n\t\tx = xScale.getPixelForValue(typeof value === 'object' ? value : NaN, index, datasetIndex);\r\n\t\ty = reset ? yScale.getBasePixel() : me.calculatePointY(value, index, datasetIndex);\r\n\r\n\t\t// Utility\r\n\t\tpoint._xScale = xScale;\r\n\t\tpoint._yScale = yScale;\r\n\t\tpoint._options = options;\r\n\t\tpoint._datasetIndex = datasetIndex;\r\n\t\tpoint._index = index;\r\n\r\n\t\t// Desired view properties\r\n\t\tpoint._model = {\r\n\t\t\tx: x,\r\n\t\t\ty: y,\r\n\t\t\tskip: custom.skip || isNaN(x) || isNaN(y),\r\n\t\t\t// Appearance\r\n\t\t\tradius: options.radius,\r\n\t\t\tpointStyle: options.pointStyle,\r\n\t\t\trotation: options.rotation,\r\n\t\t\tbackgroundColor: options.backgroundColor,\r\n\t\t\tborderColor: options.borderColor,\r\n\t\t\tborderWidth: options.borderWidth,\r\n\t\t\ttension: valueOrDefault$6(custom.tension, lineModel ? lineModel.tension : 0),\r\n\t\t\tsteppedLine: lineModel ? lineModel.steppedLine : false,\r\n\t\t\t// Tooltip\r\n\t\t\thitRadius: options.hitRadius\r\n\t\t};\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_resolveDatasetElementOptions: function(element) {\r\n\t\tvar me = this;\r\n\t\tvar config = me._config;\r\n\t\tvar custom = element.custom || {};\r\n\t\tvar options = me.chart.options;\r\n\t\tvar lineOptions = options.elements.line;\r\n\t\tvar values = core_datasetController.prototype._resolveDatasetElementOptions.apply(me, arguments);\r\n\r\n\t\t// The default behavior of lines is to break at null values, according\r\n\t\t// to https://github.com/chartjs/Chart.js/issues/2435#issuecomment-216718158\r\n\t\t// This option gives lines the ability to span gaps\r\n\t\tvalues.spanGaps = valueOrDefault$6(config.spanGaps, options.spanGaps);\r\n\t\tvalues.tension = valueOrDefault$6(config.lineTension, lineOptions.tension);\r\n\t\tvalues.steppedLine = resolve$2([custom.steppedLine, config.steppedLine, lineOptions.stepped]);\r\n\t\tvalues.clip = toClip(valueOrDefault$6(config.clip, defaultClip(me._xScale, me._yScale, values.borderWidth)));\r\n\r\n\t\treturn values;\r\n\t},\r\n\r\n\tcalculatePointY: function(value, index, datasetIndex) {\r\n\t\tvar me = this;\r\n\t\tvar chart = me.chart;\r\n\t\tvar yScale = me._yScale;\r\n\t\tvar sumPos = 0;\r\n\t\tvar sumNeg = 0;\r\n\t\tvar i, ds, dsMeta, stackedRightValue, rightValue, metasets, ilen;\r\n\r\n\t\tif (yScale.options.stacked) {\r\n\t\t\trightValue = +yScale.getRightValue(value);\r\n\t\t\tmetasets = chart._getSortedVisibleDatasetMetas();\r\n\t\t\tilen = metasets.length;\r\n\r\n\t\t\tfor (i = 0; i < ilen; ++i) {\r\n\t\t\t\tdsMeta = metasets[i];\r\n\t\t\t\tif (dsMeta.index === datasetIndex) {\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tds = chart.data.datasets[dsMeta.index];\r\n\t\t\t\tif (dsMeta.type === 'line' && dsMeta.yAxisID === yScale.id) {\r\n\t\t\t\t\tstackedRightValue = +yScale.getRightValue(ds.data[index]);\r\n\t\t\t\t\tif (stackedRightValue < 0) {\r\n\t\t\t\t\t\tsumNeg += stackedRightValue || 0;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tsumPos += stackedRightValue || 0;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (rightValue < 0) {\r\n\t\t\t\treturn yScale.getPixelForValue(sumNeg + rightValue);\r\n\t\t\t}\r\n\t\t\treturn yScale.getPixelForValue(sumPos + rightValue);\r\n\t\t}\r\n\t\treturn yScale.getPixelForValue(value);\r\n\t},\r\n\r\n\tupdateBezierControlPoints: function() {\r\n\t\tvar me = this;\r\n\t\tvar chart = me.chart;\r\n\t\tvar meta = me.getMeta();\r\n\t\tvar lineModel = meta.dataset._model;\r\n\t\tvar area = chart.chartArea;\r\n\t\tvar points = meta.data || [];\r\n\t\tvar i, ilen, model, controlPoints;\r\n\r\n\t\t// Only consider points that are drawn in case the spanGaps option is used\r\n\t\tif (lineModel.spanGaps) {\r\n\t\t\tpoints = points.filter(function(pt) {\r\n\t\t\t\treturn !pt._model.skip;\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tfunction capControlPoint(pt, min, max) {\r\n\t\t\treturn Math.max(Math.min(pt, max), min);\r\n\t\t}\r\n\r\n\t\tif (lineModel.cubicInterpolationMode === 'monotone') {\r\n\t\t\thelpers$1.splineCurveMonotone(points);\r\n\t\t} else {\r\n\t\t\tfor (i = 0, ilen = points.length; i < ilen; ++i) {\r\n\t\t\t\tmodel = points[i]._model;\r\n\t\t\t\tcontrolPoints = helpers$1.splineCurve(\r\n\t\t\t\t\thelpers$1.previousItem(points, i)._model,\r\n\t\t\t\t\tmodel,\r\n\t\t\t\t\thelpers$1.nextItem(points, i)._model,\r\n\t\t\t\t\tlineModel.tension\r\n\t\t\t\t);\r\n\t\t\t\tmodel.controlPointPreviousX = controlPoints.previous.x;\r\n\t\t\t\tmodel.controlPointPreviousY = controlPoints.previous.y;\r\n\t\t\t\tmodel.controlPointNextX = controlPoints.next.x;\r\n\t\t\t\tmodel.controlPointNextY = controlPoints.next.y;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (chart.options.elements.line.capBezierPoints) {\r\n\t\t\tfor (i = 0, ilen = points.length; i < ilen; ++i) {\r\n\t\t\t\tmodel = points[i]._model;\r\n\t\t\t\tif (isPointInArea(model, area)) {\r\n\t\t\t\t\tif (i > 0 && isPointInArea(points[i - 1]._model, area)) {\r\n\t\t\t\t\t\tmodel.controlPointPreviousX = capControlPoint(model.controlPointPreviousX, area.left, area.right);\r\n\t\t\t\t\t\tmodel.controlPointPreviousY = capControlPoint(model.controlPointPreviousY, area.top, area.bottom);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (i < points.length - 1 && isPointInArea(points[i + 1]._model, area)) {\r\n\t\t\t\t\t\tmodel.controlPointNextX = capControlPoint(model.controlPointNextX, area.left, area.right);\r\n\t\t\t\t\t\tmodel.controlPointNextY = capControlPoint(model.controlPointNextY, area.top, area.bottom);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\tdraw: function() {\r\n\t\tvar me = this;\r\n\t\tvar chart = me.chart;\r\n\t\tvar meta = me.getMeta();\r\n\t\tvar points = meta.data || [];\r\n\t\tvar area = chart.chartArea;\r\n\t\tvar canvas = chart.canvas;\r\n\t\tvar i = 0;\r\n\t\tvar ilen = points.length;\r\n\t\tvar clip;\r\n\r\n\t\tif (me._showLine) {\r\n\t\t\tclip = meta.dataset._model.clip;\r\n\r\n\t\t\thelpers$1.canvas.clipArea(chart.ctx, {\r\n\t\t\t\tleft: clip.left === false ? 0 : area.left - clip.left,\r\n\t\t\t\tright: clip.right === false ? canvas.width : area.right + clip.right,\r\n\t\t\t\ttop: clip.top === false ? 0 : area.top - clip.top,\r\n\t\t\t\tbottom: clip.bottom === false ? canvas.height : area.bottom + clip.bottom\r\n\t\t\t});\r\n\r\n\t\t\tmeta.dataset.draw();\r\n\r\n\t\t\thelpers$1.canvas.unclipArea(chart.ctx);\r\n\t\t}\r\n\r\n\t\t// Draw the points\r\n\t\tfor (; i < ilen; ++i) {\r\n\t\t\tpoints[i].draw(area);\r\n\t\t}\r\n\t},\r\n\r\n\t/**\r\n\t * @protected\r\n\t */\r\n\tsetHoverStyle: function(point) {\r\n\t\tvar model = point._model;\r\n\t\tvar options = point._options;\r\n\t\tvar getHoverColor = helpers$1.getHoverColor;\r\n\r\n\t\tpoint.$previousStyle = {\r\n\t\t\tbackgroundColor: model.backgroundColor,\r\n\t\t\tborderColor: model.borderColor,\r\n\t\t\tborderWidth: model.borderWidth,\r\n\t\t\tradius: model.radius\r\n\t\t};\r\n\r\n\t\tmodel.backgroundColor = valueOrDefault$6(options.hoverBackgroundColor, getHoverColor(options.backgroundColor));\r\n\t\tmodel.borderColor = valueOrDefault$6(options.hoverBorderColor, getHoverColor(options.borderColor));\r\n\t\tmodel.borderWidth = valueOrDefault$6(options.hoverBorderWidth, options.borderWidth);\r\n\t\tmodel.radius = valueOrDefault$6(options.hoverRadius, options.radius);\r\n\t},\r\n});\n\nvar resolve$3 = helpers$1.options.resolve;\r\n\r\ncore_defaults._set('polarArea', {\r\n\tscale: {\r\n\t\ttype: 'radialLinear',\r\n\t\tangleLines: {\r\n\t\t\tdisplay: false\r\n\t\t},\r\n\t\tgridLines: {\r\n\t\t\tcircular: true\r\n\t\t},\r\n\t\tpointLabels: {\r\n\t\t\tdisplay: false\r\n\t\t},\r\n\t\tticks: {\r\n\t\t\tbeginAtZero: true\r\n\t\t}\r\n\t},\r\n\r\n\t// Boolean - Whether to animate the rotation of the chart\r\n\tanimation: {\r\n\t\tanimateRotate: true,\r\n\t\tanimateScale: true\r\n\t},\r\n\r\n\tstartAngle: -0.5 * Math.PI,\r\n\tlegendCallback: function(chart) {\r\n\t\tvar list = document.createElement('ul');\r\n\t\tvar data = chart.data;\r\n\t\tvar datasets = data.datasets;\r\n\t\tvar labels = data.labels;\r\n\t\tvar i, ilen, listItem, listItemSpan;\r\n\r\n\t\tlist.setAttribute('class', chart.id + '-legend');\r\n\t\tif (datasets.length) {\r\n\t\t\tfor (i = 0, ilen = datasets[0].data.length; i < ilen; ++i) {\r\n\t\t\t\tlistItem = list.appendChild(document.createElement('li'));\r\n\t\t\t\tlistItemSpan = listItem.appendChild(document.createElement('span'));\r\n\t\t\t\tlistItemSpan.style.backgroundColor = datasets[0].backgroundColor[i];\r\n\t\t\t\tif (labels[i]) {\r\n\t\t\t\t\tlistItem.appendChild(document.createTextNode(labels[i]));\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn list.outerHTML;\r\n\t},\r\n\tlegend: {\r\n\t\tlabels: {\r\n\t\t\tgenerateLabels: function(chart) {\r\n\t\t\t\tvar data = chart.data;\r\n\t\t\t\tif (data.labels.length && data.datasets.length) {\r\n\t\t\t\t\treturn data.labels.map(function(label, i) {\r\n\t\t\t\t\t\tvar meta = chart.getDatasetMeta(0);\r\n\t\t\t\t\t\tvar style = meta.controller.getStyle(i);\r\n\r\n\t\t\t\t\t\treturn {\r\n\t\t\t\t\t\t\ttext: label,\r\n\t\t\t\t\t\t\tfillStyle: style.backgroundColor,\r\n\t\t\t\t\t\t\tstrokeStyle: style.borderColor,\r\n\t\t\t\t\t\t\tlineWidth: style.borderWidth,\r\n\t\t\t\t\t\t\thidden: isNaN(data.datasets[0].data[i]) || meta.data[i].hidden,\r\n\r\n\t\t\t\t\t\t\t// Extra data used for toggling the correct item\r\n\t\t\t\t\t\t\tindex: i\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t\treturn [];\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\tonClick: function(e, legendItem) {\r\n\t\t\tvar index = legendItem.index;\r\n\t\t\tvar chart = this.chart;\r\n\t\t\tvar i, ilen, meta;\r\n\r\n\t\t\tfor (i = 0, ilen = (chart.data.datasets || []).length; i < ilen; ++i) {\r\n\t\t\t\tmeta = chart.getDatasetMeta(i);\r\n\t\t\t\tmeta.data[index].hidden = !meta.data[index].hidden;\r\n\t\t\t}\r\n\r\n\t\t\tchart.update();\r\n\t\t}\r\n\t},\r\n\r\n\t// Need to override these to give a nice default\r\n\ttooltips: {\r\n\t\tcallbacks: {\r\n\t\t\ttitle: function() {\r\n\t\t\t\treturn '';\r\n\t\t\t},\r\n\t\t\tlabel: function(item, data) {\r\n\t\t\t\treturn data.labels[item.index] + ': ' + item.yLabel;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n});\r\n\r\nvar controller_polarArea = core_datasetController.extend({\r\n\r\n\tdataElementType: elements.Arc,\r\n\r\n\tlinkScales: helpers$1.noop,\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_dataElementOptions: [\r\n\t\t'backgroundColor',\r\n\t\t'borderColor',\r\n\t\t'borderWidth',\r\n\t\t'borderAlign',\r\n\t\t'hoverBackgroundColor',\r\n\t\t'hoverBorderColor',\r\n\t\t'hoverBorderWidth',\r\n\t],\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_getIndexScaleId: function() {\r\n\t\treturn this.chart.scale.id;\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_getValueScaleId: function() {\r\n\t\treturn this.chart.scale.id;\r\n\t},\r\n\r\n\tupdate: function(reset) {\r\n\t\tvar me = this;\r\n\t\tvar dataset = me.getDataset();\r\n\t\tvar meta = me.getMeta();\r\n\t\tvar start = me.chart.options.startAngle || 0;\r\n\t\tvar starts = me._starts = [];\r\n\t\tvar angles = me._angles = [];\r\n\t\tvar arcs = meta.data;\r\n\t\tvar i, ilen, angle;\r\n\r\n\t\tme._updateRadius();\r\n\r\n\t\tmeta.count = me.countVisibleElements();\r\n\r\n\t\tfor (i = 0, ilen = dataset.data.length; i < ilen; i++) {\r\n\t\t\tstarts[i] = start;\r\n\t\t\tangle = me._computeAngle(i);\r\n\t\t\tangles[i] = angle;\r\n\t\t\tstart += angle;\r\n\t\t}\r\n\r\n\t\tfor (i = 0, ilen = arcs.length; i < ilen; ++i) {\r\n\t\t\tarcs[i]._options = me._resolveDataElementOptions(arcs[i], i);\r\n\t\t\tme.updateElement(arcs[i], i, reset);\r\n\t\t}\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_updateRadius: function() {\r\n\t\tvar me = this;\r\n\t\tvar chart = me.chart;\r\n\t\tvar chartArea = chart.chartArea;\r\n\t\tvar opts = chart.options;\r\n\t\tvar minSize = Math.min(chartArea.right - chartArea.left, chartArea.bottom - chartArea.top);\r\n\r\n\t\tchart.outerRadius = Math.max(minSize / 2, 0);\r\n\t\tchart.innerRadius = Math.max(opts.cutoutPercentage ? (chart.outerRadius / 100) * (opts.cutoutPercentage) : 1, 0);\r\n\t\tchart.radiusLength = (chart.outerRadius - chart.innerRadius) / chart.getVisibleDatasetCount();\r\n\r\n\t\tme.outerRadius = chart.outerRadius - (chart.radiusLength * me.index);\r\n\t\tme.innerRadius = me.outerRadius - chart.radiusLength;\r\n\t},\r\n\r\n\tupdateElement: function(arc, index, reset) {\r\n\t\tvar me = this;\r\n\t\tvar chart = me.chart;\r\n\t\tvar dataset = me.getDataset();\r\n\t\tvar opts = chart.options;\r\n\t\tvar animationOpts = opts.animation;\r\n\t\tvar scale = chart.scale;\r\n\t\tvar labels = chart.data.labels;\r\n\r\n\t\tvar centerX = scale.xCenter;\r\n\t\tvar centerY = scale.yCenter;\r\n\r\n\t\t// var negHalfPI = -0.5 * Math.PI;\r\n\t\tvar datasetStartAngle = opts.startAngle;\r\n\t\tvar distance = arc.hidden ? 0 : scale.getDistanceFromCenterForValue(dataset.data[index]);\r\n\t\tvar startAngle = me._starts[index];\r\n\t\tvar endAngle = startAngle + (arc.hidden ? 0 : me._angles[index]);\r\n\r\n\t\tvar resetRadius = animationOpts.animateScale ? 0 : scale.getDistanceFromCenterForValue(dataset.data[index]);\r\n\t\tvar options = arc._options || {};\r\n\r\n\t\thelpers$1.extend(arc, {\r\n\t\t\t// Utility\r\n\t\t\t_datasetIndex: me.index,\r\n\t\t\t_index: index,\r\n\t\t\t_scale: scale,\r\n\r\n\t\t\t// Desired view properties\r\n\t\t\t_model: {\r\n\t\t\t\tbackgroundColor: options.backgroundColor,\r\n\t\t\t\tborderColor: options.borderColor,\r\n\t\t\t\tborderWidth: options.borderWidth,\r\n\t\t\t\tborderAlign: options.borderAlign,\r\n\t\t\t\tx: centerX,\r\n\t\t\t\ty: centerY,\r\n\t\t\t\tinnerRadius: 0,\r\n\t\t\t\touterRadius: reset ? resetRadius : distance,\r\n\t\t\t\tstartAngle: reset && animationOpts.animateRotate ? datasetStartAngle : startAngle,\r\n\t\t\t\tendAngle: reset && animationOpts.animateRotate ? datasetStartAngle : endAngle,\r\n\t\t\t\tlabel: helpers$1.valueAtIndexOrDefault(labels, index, labels[index])\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tarc.pivot();\r\n\t},\r\n\r\n\tcountVisibleElements: function() {\r\n\t\tvar dataset = this.getDataset();\r\n\t\tvar meta = this.getMeta();\r\n\t\tvar count = 0;\r\n\r\n\t\thelpers$1.each(meta.data, function(element, index) {\r\n\t\t\tif (!isNaN(dataset.data[index]) && !element.hidden) {\r\n\t\t\t\tcount++;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn count;\r\n\t},\r\n\r\n\t/**\r\n\t * @protected\r\n\t */\r\n\tsetHoverStyle: function(arc) {\r\n\t\tvar model = arc._model;\r\n\t\tvar options = arc._options;\r\n\t\tvar getHoverColor = helpers$1.getHoverColor;\r\n\t\tvar valueOrDefault = helpers$1.valueOrDefault;\r\n\r\n\t\tarc.$previousStyle = {\r\n\t\t\tbackgroundColor: model.backgroundColor,\r\n\t\t\tborderColor: model.borderColor,\r\n\t\t\tborderWidth: model.borderWidth,\r\n\t\t};\r\n\r\n\t\tmodel.backgroundColor = valueOrDefault(options.hoverBackgroundColor, getHoverColor(options.backgroundColor));\r\n\t\tmodel.borderColor = valueOrDefault(options.hoverBorderColor, getHoverColor(options.borderColor));\r\n\t\tmodel.borderWidth = valueOrDefault(options.hoverBorderWidth, options.borderWidth);\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_computeAngle: function(index) {\r\n\t\tvar me = this;\r\n\t\tvar count = this.getMeta().count;\r\n\t\tvar dataset = me.getDataset();\r\n\t\tvar meta = me.getMeta();\r\n\r\n\t\tif (isNaN(dataset.data[index]) || meta.data[index].hidden) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\t\t// Scriptable options\r\n\t\tvar context = {\r\n\t\t\tchart: me.chart,\r\n\t\t\tdataIndex: index,\r\n\t\t\tdataset: dataset,\r\n\t\t\tdatasetIndex: me.index\r\n\t\t};\r\n\r\n\t\treturn resolve$3([\r\n\t\t\tme.chart.options.elements.arc.angle,\r\n\t\t\t(2 * Math.PI) / count\r\n\t\t], context, index);\r\n\t}\r\n});\n\ncore_defaults._set('pie', helpers$1.clone(core_defaults.doughnut));\r\ncore_defaults._set('pie', {\r\n\tcutoutPercentage: 0\r\n});\r\n\r\n// Pie charts are Doughnut chart with different defaults\r\nvar controller_pie = controller_doughnut;\n\nvar valueOrDefault$7 = helpers$1.valueOrDefault;\r\n\r\ncore_defaults._set('radar', {\r\n\tspanGaps: false,\r\n\tscale: {\r\n\t\ttype: 'radialLinear'\r\n\t},\r\n\telements: {\r\n\t\tline: {\r\n\t\t\tfill: 'start',\r\n\t\t\ttension: 0 // no bezier in radar\r\n\t\t}\r\n\t}\r\n});\r\n\r\nvar controller_radar = core_datasetController.extend({\r\n\tdatasetElementType: elements.Line,\r\n\r\n\tdataElementType: elements.Point,\r\n\r\n\tlinkScales: helpers$1.noop,\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_datasetElementOptions: [\r\n\t\t'backgroundColor',\r\n\t\t'borderWidth',\r\n\t\t'borderColor',\r\n\t\t'borderCapStyle',\r\n\t\t'borderDash',\r\n\t\t'borderDashOffset',\r\n\t\t'borderJoinStyle',\r\n\t\t'fill'\r\n\t],\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_dataElementOptions: {\r\n\t\tbackgroundColor: 'pointBackgroundColor',\r\n\t\tborderColor: 'pointBorderColor',\r\n\t\tborderWidth: 'pointBorderWidth',\r\n\t\thitRadius: 'pointHitRadius',\r\n\t\thoverBackgroundColor: 'pointHoverBackgroundColor',\r\n\t\thoverBorderColor: 'pointHoverBorderColor',\r\n\t\thoverBorderWidth: 'pointHoverBorderWidth',\r\n\t\thoverRadius: 'pointHoverRadius',\r\n\t\tpointStyle: 'pointStyle',\r\n\t\tradius: 'pointRadius',\r\n\t\trotation: 'pointRotation'\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_getIndexScaleId: function() {\r\n\t\treturn this.chart.scale.id;\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_getValueScaleId: function() {\r\n\t\treturn this.chart.scale.id;\r\n\t},\r\n\r\n\tupdate: function(reset) {\r\n\t\tvar me = this;\r\n\t\tvar meta = me.getMeta();\r\n\t\tvar line = meta.dataset;\r\n\t\tvar points = meta.data || [];\r\n\t\tvar scale = me.chart.scale;\r\n\t\tvar config = me._config;\r\n\t\tvar i, ilen;\r\n\r\n\t\t// Compatibility: If the properties are defined with only the old name, use those values\r\n\t\tif (config.tension !== undefined && config.lineTension === undefined) {\r\n\t\t\tconfig.lineTension = config.tension;\r\n\t\t}\r\n\r\n\t\t// Utility\r\n\t\tline._scale = scale;\r\n\t\tline._datasetIndex = me.index;\r\n\t\t// Data\r\n\t\tline._children = points;\r\n\t\tline._loop = true;\r\n\t\t// Model\r\n\t\tline._model = me._resolveDatasetElementOptions(line);\r\n\r\n\t\tline.pivot();\r\n\r\n\t\t// Update Points\r\n\t\tfor (i = 0, ilen = points.length; i < ilen; ++i) {\r\n\t\t\tme.updateElement(points[i], i, reset);\r\n\t\t}\r\n\r\n\t\t// Update bezier control points\r\n\t\tme.updateBezierControlPoints();\r\n\r\n\t\t// Now pivot the point for animation\r\n\t\tfor (i = 0, ilen = points.length; i < ilen; ++i) {\r\n\t\t\tpoints[i].pivot();\r\n\t\t}\r\n\t},\r\n\r\n\tupdateElement: function(point, index, reset) {\r\n\t\tvar me = this;\r\n\t\tvar custom = point.custom || {};\r\n\t\tvar dataset = me.getDataset();\r\n\t\tvar scale = me.chart.scale;\r\n\t\tvar pointPosition = scale.getPointPositionForValue(index, dataset.data[index]);\r\n\t\tvar options = me._resolveDataElementOptions(point, index);\r\n\t\tvar lineModel = me.getMeta().dataset._model;\r\n\t\tvar x = reset ? scale.xCenter : pointPosition.x;\r\n\t\tvar y = reset ? scale.yCenter : pointPosition.y;\r\n\r\n\t\t// Utility\r\n\t\tpoint._scale = scale;\r\n\t\tpoint._options = options;\r\n\t\tpoint._datasetIndex = me.index;\r\n\t\tpoint._index = index;\r\n\r\n\t\t// Desired view properties\r\n\t\tpoint._model = {\r\n\t\t\tx: x, // value not used in dataset scale, but we want a consistent API between scales\r\n\t\t\ty: y,\r\n\t\t\tskip: custom.skip || isNaN(x) || isNaN(y),\r\n\t\t\t// Appearance\r\n\t\t\tradius: options.radius,\r\n\t\t\tpointStyle: options.pointStyle,\r\n\t\t\trotation: options.rotation,\r\n\t\t\tbackgroundColor: options.backgroundColor,\r\n\t\t\tborderColor: options.borderColor,\r\n\t\t\tborderWidth: options.borderWidth,\r\n\t\t\ttension: valueOrDefault$7(custom.tension, lineModel ? lineModel.tension : 0),\r\n\r\n\t\t\t// Tooltip\r\n\t\t\thitRadius: options.hitRadius\r\n\t\t};\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_resolveDatasetElementOptions: function() {\r\n\t\tvar me = this;\r\n\t\tvar config = me._config;\r\n\t\tvar options = me.chart.options;\r\n\t\tvar values = core_datasetController.prototype._resolveDatasetElementOptions.apply(me, arguments);\r\n\r\n\t\tvalues.spanGaps = valueOrDefault$7(config.spanGaps, options.spanGaps);\r\n\t\tvalues.tension = valueOrDefault$7(config.lineTension, options.elements.line.tension);\r\n\r\n\t\treturn values;\r\n\t},\r\n\r\n\tupdateBezierControlPoints: function() {\r\n\t\tvar me = this;\r\n\t\tvar meta = me.getMeta();\r\n\t\tvar area = me.chart.chartArea;\r\n\t\tvar points = meta.data || [];\r\n\t\tvar i, ilen, model, controlPoints;\r\n\r\n\t\t// Only consider points that are drawn in case the spanGaps option is used\r\n\t\tif (meta.dataset._model.spanGaps) {\r\n\t\t\tpoints = points.filter(function(pt) {\r\n\t\t\t\treturn !pt._model.skip;\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tfunction capControlPoint(pt, min, max) {\r\n\t\t\treturn Math.max(Math.min(pt, max), min);\r\n\t\t}\r\n\r\n\t\tfor (i = 0, ilen = points.length; i < ilen; ++i) {\r\n\t\t\tmodel = points[i]._model;\r\n\t\t\tcontrolPoints = helpers$1.splineCurve(\r\n\t\t\t\thelpers$1.previousItem(points, i, true)._model,\r\n\t\t\t\tmodel,\r\n\t\t\t\thelpers$1.nextItem(points, i, true)._model,\r\n\t\t\t\tmodel.tension\r\n\t\t\t);\r\n\r\n\t\t\t// Prevent the bezier going outside of the bounds of the graph\r\n\t\t\tmodel.controlPointPreviousX = capControlPoint(controlPoints.previous.x, area.left, area.right);\r\n\t\t\tmodel.controlPointPreviousY = capControlPoint(controlPoints.previous.y, area.top, area.bottom);\r\n\t\t\tmodel.controlPointNextX = capControlPoint(controlPoints.next.x, area.left, area.right);\r\n\t\t\tmodel.controlPointNextY = capControlPoint(controlPoints.next.y, area.top, area.bottom);\r\n\t\t}\r\n\t},\r\n\r\n\tsetHoverStyle: function(point) {\r\n\t\tvar model = point._model;\r\n\t\tvar options = point._options;\r\n\t\tvar getHoverColor = helpers$1.getHoverColor;\r\n\r\n\t\tpoint.$previousStyle = {\r\n\t\t\tbackgroundColor: model.backgroundColor,\r\n\t\t\tborderColor: model.borderColor,\r\n\t\t\tborderWidth: model.borderWidth,\r\n\t\t\tradius: model.radius\r\n\t\t};\r\n\r\n\t\tmodel.backgroundColor = valueOrDefault$7(options.hoverBackgroundColor, getHoverColor(options.backgroundColor));\r\n\t\tmodel.borderColor = valueOrDefault$7(options.hoverBorderColor, getHoverColor(options.borderColor));\r\n\t\tmodel.borderWidth = valueOrDefault$7(options.hoverBorderWidth, options.borderWidth);\r\n\t\tmodel.radius = valueOrDefault$7(options.hoverRadius, options.radius);\r\n\t}\r\n});\n\ncore_defaults._set('scatter', {\r\n\thover: {\r\n\t\tmode: 'single'\r\n\t},\r\n\r\n\tscales: {\r\n\t\txAxes: [{\r\n\t\t\tid: 'x-axis-1',    // need an ID so datasets can reference the scale\r\n\t\t\ttype: 'linear',    // scatter should not use a category axis\r\n\t\t\tposition: 'bottom'\r\n\t\t}],\r\n\t\tyAxes: [{\r\n\t\t\tid: 'y-axis-1',\r\n\t\t\ttype: 'linear',\r\n\t\t\tposition: 'left'\r\n\t\t}]\r\n\t},\r\n\r\n\ttooltips: {\r\n\t\tcallbacks: {\r\n\t\t\ttitle: function() {\r\n\t\t\t\treturn '';     // doesn't make sense for scatter since data are formatted as a point\r\n\t\t\t},\r\n\t\t\tlabel: function(item) {\r\n\t\t\t\treturn '(' + item.xLabel + ', ' + item.yLabel + ')';\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n});\r\n\r\ncore_defaults._set('global', {\r\n\tdatasets: {\r\n\t\tscatter: {\r\n\t\t\tshowLine: false\r\n\t\t}\r\n\t}\r\n});\r\n\r\n// Scatter charts use line controllers\r\nvar controller_scatter = controller_line;\n\n// NOTE export a map in which the key represents the controller type, not\r\n// the class, and so must be CamelCase in order to be correctly retrieved\r\n// by the controller in core.controller.js (`controllers[meta.type]`).\r\n\r\nvar controllers = {\r\n\tbar: controller_bar,\r\n\tbubble: controller_bubble,\r\n\tdoughnut: controller_doughnut,\r\n\thorizontalBar: controller_horizontalBar,\r\n\tline: controller_line,\r\n\tpolarArea: controller_polarArea,\r\n\tpie: controller_pie,\r\n\tradar: controller_radar,\r\n\tscatter: controller_scatter\r\n};\n\n/**\r\n * Helper function to get relative position for an event\r\n * @param {Event|IEvent} event - The event to get the position for\r\n * @param {Chart} chart - The chart\r\n * @returns {object} the event position\r\n */\r\nfunction getRelativePosition(e, chart) {\r\n\tif (e.native) {\r\n\t\treturn {\r\n\t\t\tx: e.x,\r\n\t\t\ty: e.y\r\n\t\t};\r\n\t}\r\n\r\n\treturn helpers$1.getRelativePosition(e, chart);\r\n}\r\n\r\n/**\r\n * Helper function to traverse all of the visible elements in the chart\r\n * @param {Chart} chart - the chart\r\n * @param {function} handler - the callback to execute for each visible item\r\n */\r\nfunction parseVisibleItems(chart, handler) {\r\n\tvar metasets = chart._getSortedVisibleDatasetMetas();\r\n\tvar metadata, i, j, ilen, jlen, element;\r\n\r\n\tfor (i = 0, ilen = metasets.length; i < ilen; ++i) {\r\n\t\tmetadata = metasets[i].data;\r\n\t\tfor (j = 0, jlen = metadata.length; j < jlen; ++j) {\r\n\t\t\telement = metadata[j];\r\n\t\t\tif (!element._view.skip) {\r\n\t\t\t\thandler(element);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n\r\n/**\r\n * Helper function to get the items that intersect the event position\r\n * @param {ChartElement[]} items - elements to filter\r\n * @param {object} position - the point to be nearest to\r\n * @return {ChartElement[]} the nearest items\r\n */\r\nfunction getIntersectItems(chart, position) {\r\n\tvar elements = [];\r\n\r\n\tparseVisibleItems(chart, function(element) {\r\n\t\tif (element.inRange(position.x, position.y)) {\r\n\t\t\telements.push(element);\r\n\t\t}\r\n\t});\r\n\r\n\treturn elements;\r\n}\r\n\r\n/**\r\n * Helper function to get the items nearest to the event position considering all visible items in teh chart\r\n * @param {Chart} chart - the chart to look at elements from\r\n * @param {object} position - the point to be nearest to\r\n * @param {boolean} intersect - if true, only consider items that intersect the position\r\n * @param {function} distanceMetric - function to provide the distance between points\r\n * @return {ChartElement[]} the nearest items\r\n */\r\nfunction getNearestItems(chart, position, intersect, distanceMetric) {\r\n\tvar minDistance = Number.POSITIVE_INFINITY;\r\n\tvar nearestItems = [];\r\n\r\n\tparseVisibleItems(chart, function(element) {\r\n\t\tif (intersect && !element.inRange(position.x, position.y)) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tvar center = element.getCenterPoint();\r\n\t\tvar distance = distanceMetric(position, center);\r\n\t\tif (distance < minDistance) {\r\n\t\t\tnearestItems = [element];\r\n\t\t\tminDistance = distance;\r\n\t\t} else if (distance === minDistance) {\r\n\t\t\t// Can have multiple items at the same distance in which case we sort by size\r\n\t\t\tnearestItems.push(element);\r\n\t\t}\r\n\t});\r\n\r\n\treturn nearestItems;\r\n}\r\n\r\n/**\r\n * Get a distance metric function for two points based on the\r\n * axis mode setting\r\n * @param {string} axis - the axis mode. x|y|xy\r\n */\r\nfunction getDistanceMetricForAxis(axis) {\r\n\tvar useX = axis.indexOf('x') !== -1;\r\n\tvar useY = axis.indexOf('y') !== -1;\r\n\r\n\treturn function(pt1, pt2) {\r\n\t\tvar deltaX = useX ? Math.abs(pt1.x - pt2.x) : 0;\r\n\t\tvar deltaY = useY ? Math.abs(pt1.y - pt2.y) : 0;\r\n\t\treturn Math.sqrt(Math.pow(deltaX, 2) + Math.pow(deltaY, 2));\r\n\t};\r\n}\r\n\r\nfunction indexMode(chart, e, options) {\r\n\tvar position = getRelativePosition(e, chart);\r\n\t// Default axis for index mode is 'x' to match old behaviour\r\n\toptions.axis = options.axis || 'x';\r\n\tvar distanceMetric = getDistanceMetricForAxis(options.axis);\r\n\tvar items = options.intersect ? getIntersectItems(chart, position) : getNearestItems(chart, position, false, distanceMetric);\r\n\tvar elements = [];\r\n\r\n\tif (!items.length) {\r\n\t\treturn [];\r\n\t}\r\n\r\n\tchart._getSortedVisibleDatasetMetas().forEach(function(meta) {\r\n\t\tvar element = meta.data[items[0]._index];\r\n\r\n\t\t// don't count items that are skipped (null data)\r\n\t\tif (element && !element._view.skip) {\r\n\t\t\telements.push(element);\r\n\t\t}\r\n\t});\r\n\r\n\treturn elements;\r\n}\r\n\r\n/**\r\n * @interface IInteractionOptions\r\n */\r\n/**\r\n * If true, only consider items that intersect the point\r\n * @name IInterfaceOptions#boolean\r\n * @type Boolean\r\n */\r\n\r\n/**\r\n * Contains interaction related functions\r\n * @namespace Chart.Interaction\r\n */\r\nvar core_interaction = {\r\n\t// Helper function for different modes\r\n\tmodes: {\r\n\t\tsingle: function(chart, e) {\r\n\t\t\tvar position = getRelativePosition(e, chart);\r\n\t\t\tvar elements = [];\r\n\r\n\t\t\tparseVisibleItems(chart, function(element) {\r\n\t\t\t\tif (element.inRange(position.x, position.y)) {\r\n\t\t\t\t\telements.push(element);\r\n\t\t\t\t\treturn elements;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\treturn elements.slice(0, 1);\r\n\t\t},\r\n\r\n\t\t/**\r\n\t\t * @function Chart.Interaction.modes.label\r\n\t\t * @deprecated since version 2.4.0\r\n\t\t * @todo remove at version 3\r\n\t\t * @private\r\n\t\t */\r\n\t\tlabel: indexMode,\r\n\r\n\t\t/**\r\n\t\t * Returns items at the same index. If the options.intersect parameter is true, we only return items if we intersect something\r\n\t\t * If the options.intersect mode is false, we find the nearest item and return the items at the same index as that item\r\n\t\t * @function Chart.Interaction.modes.index\r\n\t\t * @since v2.4.0\r\n\t\t * @param {Chart} chart - the chart we are returning items from\r\n\t\t * @param {Event} e - the event we are find things at\r\n\t\t * @param {IInteractionOptions} options - options to use during interaction\r\n\t\t * @return {Chart.Element[]} Array of elements that are under the point. If none are found, an empty array is returned\r\n\t\t */\r\n\t\tindex: indexMode,\r\n\r\n\t\t/**\r\n\t\t * Returns items in the same dataset. If the options.intersect parameter is true, we only return items if we intersect something\r\n\t\t * If the options.intersect is false, we find the nearest item and return the items in that dataset\r\n\t\t * @function Chart.Interaction.modes.dataset\r\n\t\t * @param {Chart} chart - the chart we are returning items from\r\n\t\t * @param {Event} e - the event we are find things at\r\n\t\t * @param {IInteractionOptions} options - options to use during interaction\r\n\t\t * @return {Chart.Element[]} Array of elements that are under the point. If none are found, an empty array is returned\r\n\t\t */\r\n\t\tdataset: function(chart, e, options) {\r\n\t\t\tvar position = getRelativePosition(e, chart);\r\n\t\t\toptions.axis = options.axis || 'xy';\r\n\t\t\tvar distanceMetric = getDistanceMetricForAxis(options.axis);\r\n\t\t\tvar items = options.intersect ? getIntersectItems(chart, position) : getNearestItems(chart, position, false, distanceMetric);\r\n\r\n\t\t\tif (items.length > 0) {\r\n\t\t\t\titems = chart.getDatasetMeta(items[0]._datasetIndex).data;\r\n\t\t\t}\r\n\r\n\t\t\treturn items;\r\n\t\t},\r\n\r\n\t\t/**\r\n\t\t * @function Chart.Interaction.modes.x-axis\r\n\t\t * @deprecated since version 2.4.0. Use index mode and intersect == true\r\n\t\t * @todo remove at version 3\r\n\t\t * @private\r\n\t\t */\r\n\t\t'x-axis': function(chart, e) {\r\n\t\t\treturn indexMode(chart, e, {intersect: false});\r\n\t\t},\r\n\r\n\t\t/**\r\n\t\t * Point mode returns all elements that hit test based on the event position\r\n\t\t * of the event\r\n\t\t * @function Chart.Interaction.modes.intersect\r\n\t\t * @param {Chart} chart - the chart we are returning items from\r\n\t\t * @param {Event} e - the event we are find things at\r\n\t\t * @return {Chart.Element[]} Array of elements that are under the point. If none are found, an empty array is returned\r\n\t\t */\r\n\t\tpoint: function(chart, e) {\r\n\t\t\tvar position = getRelativePosition(e, chart);\r\n\t\t\treturn getIntersectItems(chart, position);\r\n\t\t},\r\n\r\n\t\t/**\r\n\t\t * nearest mode returns the element closest to the point\r\n\t\t * @function Chart.Interaction.modes.intersect\r\n\t\t * @param {Chart} chart - the chart we are returning items from\r\n\t\t * @param {Event} e - the event we are find things at\r\n\t\t * @param {IInteractionOptions} options - options to use\r\n\t\t * @return {Chart.Element[]} Array of elements that are under the point. If none are found, an empty array is returned\r\n\t\t */\r\n\t\tnearest: function(chart, e, options) {\r\n\t\t\tvar position = getRelativePosition(e, chart);\r\n\t\t\toptions.axis = options.axis || 'xy';\r\n\t\t\tvar distanceMetric = getDistanceMetricForAxis(options.axis);\r\n\t\t\treturn getNearestItems(chart, position, options.intersect, distanceMetric);\r\n\t\t},\r\n\r\n\t\t/**\r\n\t\t * x mode returns the elements that hit-test at the current x coordinate\r\n\t\t * @function Chart.Interaction.modes.x\r\n\t\t * @param {Chart} chart - the chart we are returning items from\r\n\t\t * @param {Event} e - the event we are find things at\r\n\t\t * @param {IInteractionOptions} options - options to use\r\n\t\t * @return {Chart.Element[]} Array of elements that are under the point. If none are found, an empty array is returned\r\n\t\t */\r\n\t\tx: function(chart, e, options) {\r\n\t\t\tvar position = getRelativePosition(e, chart);\r\n\t\t\tvar items = [];\r\n\t\t\tvar intersectsItem = false;\r\n\r\n\t\t\tparseVisibleItems(chart, function(element) {\r\n\t\t\t\tif (element.inXRange(position.x)) {\r\n\t\t\t\t\titems.push(element);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (element.inRange(position.x, position.y)) {\r\n\t\t\t\t\tintersectsItem = true;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\t// If we want to trigger on an intersect and we don't have any items\r\n\t\t\t// that intersect the position, return nothing\r\n\t\t\tif (options.intersect && !intersectsItem) {\r\n\t\t\t\titems = [];\r\n\t\t\t}\r\n\t\t\treturn items;\r\n\t\t},\r\n\r\n\t\t/**\r\n\t\t * y mode returns the elements that hit-test at the current y coordinate\r\n\t\t * @function Chart.Interaction.modes.y\r\n\t\t * @param {Chart} chart - the chart we are returning items from\r\n\t\t * @param {Event} e - the event we are find things at\r\n\t\t * @param {IInteractionOptions} options - options to use\r\n\t\t * @return {Chart.Element[]} Array of elements that are under the point. If none are found, an empty array is returned\r\n\t\t */\r\n\t\ty: function(chart, e, options) {\r\n\t\t\tvar position = getRelativePosition(e, chart);\r\n\t\t\tvar items = [];\r\n\t\t\tvar intersectsItem = false;\r\n\r\n\t\t\tparseVisibleItems(chart, function(element) {\r\n\t\t\t\tif (element.inYRange(position.y)) {\r\n\t\t\t\t\titems.push(element);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (element.inRange(position.x, position.y)) {\r\n\t\t\t\t\tintersectsItem = true;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\t// If we want to trigger on an intersect and we don't have any items\r\n\t\t\t// that intersect the position, return nothing\r\n\t\t\tif (options.intersect && !intersectsItem) {\r\n\t\t\t\titems = [];\r\n\t\t\t}\r\n\t\t\treturn items;\r\n\t\t}\r\n\t}\r\n};\n\nvar extend = helpers$1.extend;\r\n\r\nfunction filterByPosition(array, position) {\r\n\treturn helpers$1.where(array, function(v) {\r\n\t\treturn v.pos === position;\r\n\t});\r\n}\r\n\r\nfunction sortByWeight(array, reverse) {\r\n\treturn array.sort(function(a, b) {\r\n\t\tvar v0 = reverse ? b : a;\r\n\t\tvar v1 = reverse ? a : b;\r\n\t\treturn v0.weight === v1.weight ?\r\n\t\t\tv0.index - v1.index :\r\n\t\t\tv0.weight - v1.weight;\r\n\t});\r\n}\r\n\r\nfunction wrapBoxes(boxes) {\r\n\tvar layoutBoxes = [];\r\n\tvar i, ilen, box;\r\n\r\n\tfor (i = 0, ilen = (boxes || []).length; i < ilen; ++i) {\r\n\t\tbox = boxes[i];\r\n\t\tlayoutBoxes.push({\r\n\t\t\tindex: i,\r\n\t\t\tbox: box,\r\n\t\t\tpos: box.position,\r\n\t\t\thorizontal: box.isHorizontal(),\r\n\t\t\tweight: box.weight\r\n\t\t});\r\n\t}\r\n\treturn layoutBoxes;\r\n}\r\n\r\nfunction setLayoutDims(layouts, params) {\r\n\tvar i, ilen, layout;\r\n\tfor (i = 0, ilen = layouts.length; i < ilen; ++i) {\r\n\t\tlayout = layouts[i];\r\n\t\t// store width used instead of chartArea.w in fitBoxes\r\n\t\tlayout.width = layout.horizontal\r\n\t\t\t? layout.box.fullWidth && params.availableWidth\r\n\t\t\t: params.vBoxMaxWidth;\r\n\t\t// store height used instead of chartArea.h in fitBoxes\r\n\t\tlayout.height = layout.horizontal && params.hBoxMaxHeight;\r\n\t}\r\n}\r\n\r\nfunction buildLayoutBoxes(boxes) {\r\n\tvar layoutBoxes = wrapBoxes(boxes);\r\n\tvar left = sortByWeight(filterByPosition(layoutBoxes, 'left'), true);\r\n\tvar right = sortByWeight(filterByPosition(layoutBoxes, 'right'));\r\n\tvar top = sortByWeight(filterByPosition(layoutBoxes, 'top'), true);\r\n\tvar bottom = sortByWeight(filterByPosition(layoutBoxes, 'bottom'));\r\n\r\n\treturn {\r\n\t\tleftAndTop: left.concat(top),\r\n\t\trightAndBottom: right.concat(bottom),\r\n\t\tchartArea: filterByPosition(layoutBoxes, 'chartArea'),\r\n\t\tvertical: left.concat(right),\r\n\t\thorizontal: top.concat(bottom)\r\n\t};\r\n}\r\n\r\nfunction getCombinedMax(maxPadding, chartArea, a, b) {\r\n\treturn Math.max(maxPadding[a], chartArea[a]) + Math.max(maxPadding[b], chartArea[b]);\r\n}\r\n\r\nfunction updateDims(chartArea, params, layout) {\r\n\tvar box = layout.box;\r\n\tvar maxPadding = chartArea.maxPadding;\r\n\tvar newWidth, newHeight;\r\n\r\n\tif (layout.size) {\r\n\t\t// this layout was already counted for, lets first reduce old size\r\n\t\tchartArea[layout.pos] -= layout.size;\r\n\t}\r\n\tlayout.size = layout.horizontal ? box.height : box.width;\r\n\tchartArea[layout.pos] += layout.size;\r\n\r\n\tif (box.getPadding) {\r\n\t\tvar boxPadding = box.getPadding();\r\n\t\tmaxPadding.top = Math.max(maxPadding.top, boxPadding.top);\r\n\t\tmaxPadding.left = Math.max(maxPadding.left, boxPadding.left);\r\n\t\tmaxPadding.bottom = Math.max(maxPadding.bottom, boxPadding.bottom);\r\n\t\tmaxPadding.right = Math.max(maxPadding.right, boxPadding.right);\r\n\t}\r\n\r\n\tnewWidth = params.outerWidth - getCombinedMax(maxPadding, chartArea, 'left', 'right');\r\n\tnewHeight = params.outerHeight - getCombinedMax(maxPadding, chartArea, 'top', 'bottom');\r\n\r\n\tif (newWidth !== chartArea.w || newHeight !== chartArea.h) {\r\n\t\tchartArea.w = newWidth;\r\n\t\tchartArea.h = newHeight;\r\n\r\n\t\t// return true if chart area changed in layout's direction\r\n\t\tvar sizes = layout.horizontal ? [newWidth, chartArea.w] : [newHeight, chartArea.h];\r\n\t\treturn sizes[0] !== sizes[1] && (!isNaN(sizes[0]) || !isNaN(sizes[1]));\r\n\t}\r\n}\r\n\r\nfunction handleMaxPadding(chartArea) {\r\n\tvar maxPadding = chartArea.maxPadding;\r\n\r\n\tfunction updatePos(pos) {\r\n\t\tvar change = Math.max(maxPadding[pos] - chartArea[pos], 0);\r\n\t\tchartArea[pos] += change;\r\n\t\treturn change;\r\n\t}\r\n\tchartArea.y += updatePos('top');\r\n\tchartArea.x += updatePos('left');\r\n\tupdatePos('right');\r\n\tupdatePos('bottom');\r\n}\r\n\r\nfunction getMargins(horizontal, chartArea) {\r\n\tvar maxPadding = chartArea.maxPadding;\r\n\r\n\tfunction marginForPositions(positions) {\r\n\t\tvar margin = {left: 0, top: 0, right: 0, bottom: 0};\r\n\t\tpositions.forEach(function(pos) {\r\n\t\t\tmargin[pos] = Math.max(chartArea[pos], maxPadding[pos]);\r\n\t\t});\r\n\t\treturn margin;\r\n\t}\r\n\r\n\treturn horizontal\r\n\t\t? marginForPositions(['left', 'right'])\r\n\t\t: marginForPositions(['top', 'bottom']);\r\n}\r\n\r\nfunction fitBoxes(boxes, chartArea, params) {\r\n\tvar refitBoxes = [];\r\n\tvar i, ilen, layout, box, refit, changed;\r\n\r\n\tfor (i = 0, ilen = boxes.length; i < ilen; ++i) {\r\n\t\tlayout = boxes[i];\r\n\t\tbox = layout.box;\r\n\r\n\t\tbox.update(\r\n\t\t\tlayout.width || chartArea.w,\r\n\t\t\tlayout.height || chartArea.h,\r\n\t\t\tgetMargins(layout.horizontal, chartArea)\r\n\t\t);\r\n\t\tif (updateDims(chartArea, params, layout)) {\r\n\t\t\tchanged = true;\r\n\t\t\tif (refitBoxes.length) {\r\n\t\t\t\t// Dimensions changed and there were non full width boxes before this\r\n\t\t\t\t// -> we have to refit those\r\n\t\t\t\trefit = true;\r\n\t\t\t}\r\n\t\t}\r\n\t\tif (!box.fullWidth) { // fullWidth boxes don't need to be re-fitted in any case\r\n\t\t\trefitBoxes.push(layout);\r\n\t\t}\r\n\t}\r\n\r\n\treturn refit ? fitBoxes(refitBoxes, chartArea, params) || changed : changed;\r\n}\r\n\r\nfunction placeBoxes(boxes, chartArea, params) {\r\n\tvar userPadding = params.padding;\r\n\tvar x = chartArea.x;\r\n\tvar y = chartArea.y;\r\n\tvar i, ilen, layout, box;\r\n\r\n\tfor (i = 0, ilen = boxes.length; i < ilen; ++i) {\r\n\t\tlayout = boxes[i];\r\n\t\tbox = layout.box;\r\n\t\tif (layout.horizontal) {\r\n\t\t\tbox.left = box.fullWidth ? userPadding.left : chartArea.left;\r\n\t\t\tbox.right = box.fullWidth ? params.outerWidth - userPadding.right : chartArea.left + chartArea.w;\r\n\t\t\tbox.top = y;\r\n\t\t\tbox.bottom = y + box.height;\r\n\t\t\tbox.width = box.right - box.left;\r\n\t\t\ty = box.bottom;\r\n\t\t} else {\r\n\t\t\tbox.left = x;\r\n\t\t\tbox.right = x + box.width;\r\n\t\t\tbox.top = chartArea.top;\r\n\t\t\tbox.bottom = chartArea.top + chartArea.h;\r\n\t\t\tbox.height = box.bottom - box.top;\r\n\t\t\tx = box.right;\r\n\t\t}\r\n\t}\r\n\r\n\tchartArea.x = x;\r\n\tchartArea.y = y;\r\n}\r\n\r\ncore_defaults._set('global', {\r\n\tlayout: {\r\n\t\tpadding: {\r\n\t\t\ttop: 0,\r\n\t\t\tright: 0,\r\n\t\t\tbottom: 0,\r\n\t\t\tleft: 0\r\n\t\t}\r\n\t}\r\n});\r\n\r\n/**\r\n * @interface ILayoutItem\r\n * @prop {string} position - The position of the item in the chart layout. Possible values are\r\n * 'left', 'top', 'right', 'bottom', and 'chartArea'\r\n * @prop {number} weight - The weight used to sort the item. Higher weights are further away from the chart area\r\n * @prop {boolean} fullWidth - if true, and the item is horizontal, then push vertical boxes down\r\n * @prop {function} isHorizontal - returns true if the layout item is horizontal (ie. top or bottom)\r\n * @prop {function} update - Takes two parameters: width and height. Returns size of item\r\n * @prop {function} getPadding -  Returns an object with padding on the edges\r\n * @prop {number} width - Width of item. Must be valid after update()\r\n * @prop {number} height - Height of item. Must be valid after update()\r\n * @prop {number} left - Left edge of the item. Set by layout system and cannot be used in update\r\n * @prop {number} top - Top edge of the item. Set by layout system and cannot be used in update\r\n * @prop {number} right - Right edge of the item. Set by layout system and cannot be used in update\r\n * @prop {number} bottom - Bottom edge of the item. Set by layout system and cannot be used in update\r\n */\r\n\r\n// The layout service is very self explanatory.  It's responsible for the layout within a chart.\r\n// Scales, Legends and Plugins all rely on the layout service and can easily register to be placed anywhere they need\r\n// It is this service's responsibility of carrying out that layout.\r\nvar core_layouts = {\r\n\tdefaults: {},\r\n\r\n\t/**\r\n\t * Register a box to a chart.\r\n\t * A box is simply a reference to an object that requires layout. eg. Scales, Legend, Title.\r\n\t * @param {Chart} chart - the chart to use\r\n\t * @param {ILayoutItem} item - the item to add to be layed out\r\n\t */\r\n\taddBox: function(chart, item) {\r\n\t\tif (!chart.boxes) {\r\n\t\t\tchart.boxes = [];\r\n\t\t}\r\n\r\n\t\t// initialize item with default values\r\n\t\titem.fullWidth = item.fullWidth || false;\r\n\t\titem.position = item.position || 'top';\r\n\t\titem.weight = item.weight || 0;\r\n\t\titem._layers = item._layers || function() {\r\n\t\t\treturn [{\r\n\t\t\t\tz: 0,\r\n\t\t\t\tdraw: function() {\r\n\t\t\t\t\titem.draw.apply(item, arguments);\r\n\t\t\t\t}\r\n\t\t\t}];\r\n\t\t};\r\n\r\n\t\tchart.boxes.push(item);\r\n\t},\r\n\r\n\t/**\r\n\t * Remove a layoutItem from a chart\r\n\t * @param {Chart} chart - the chart to remove the box from\r\n\t * @param {ILayoutItem} layoutItem - the item to remove from the layout\r\n\t */\r\n\tremoveBox: function(chart, layoutItem) {\r\n\t\tvar index = chart.boxes ? chart.boxes.indexOf(layoutItem) : -1;\r\n\t\tif (index !== -1) {\r\n\t\t\tchart.boxes.splice(index, 1);\r\n\t\t}\r\n\t},\r\n\r\n\t/**\r\n\t * Sets (or updates) options on the given `item`.\r\n\t * @param {Chart} chart - the chart in which the item lives (or will be added to)\r\n\t * @param {ILayoutItem} item - the item to configure with the given options\r\n\t * @param {object} options - the new item options.\r\n\t */\r\n\tconfigure: function(chart, item, options) {\r\n\t\tvar props = ['fullWidth', 'position', 'weight'];\r\n\t\tvar ilen = props.length;\r\n\t\tvar i = 0;\r\n\t\tvar prop;\r\n\r\n\t\tfor (; i < ilen; ++i) {\r\n\t\t\tprop = props[i];\r\n\t\t\tif (options.hasOwnProperty(prop)) {\r\n\t\t\t\titem[prop] = options[prop];\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\t/**\r\n\t * Fits boxes of the given chart into the given size by having each box measure itself\r\n\t * then running a fitting algorithm\r\n\t * @param {Chart} chart - the chart\r\n\t * @param {number} width - the width to fit into\r\n\t * @param {number} height - the height to fit into\r\n\t */\r\n\tupdate: function(chart, width, height) {\r\n\t\tif (!chart) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tvar layoutOptions = chart.options.layout || {};\r\n\t\tvar padding = helpers$1.options.toPadding(layoutOptions.padding);\r\n\r\n\t\tvar availableWidth = width - padding.width;\r\n\t\tvar availableHeight = height - padding.height;\r\n\t\tvar boxes = buildLayoutBoxes(chart.boxes);\r\n\t\tvar verticalBoxes = boxes.vertical;\r\n\t\tvar horizontalBoxes = boxes.horizontal;\r\n\r\n\t\t// Essentially we now have any number of boxes on each of the 4 sides.\r\n\t\t// Our canvas looks like the following.\r\n\t\t// The areas L1 and L2 are the left axes. R1 is the right axis, T1 is the top axis and\r\n\t\t// B1 is the bottom axis\r\n\t\t// There are also 4 quadrant-like locations (left to right instead of clockwise) reserved for chart overlays\r\n\t\t// These locations are single-box locations only, when trying to register a chartArea location that is already taken,\r\n\t\t// an error will be thrown.\r\n\t\t//\r\n\t\t// |----------------------------------------------------|\r\n\t\t// |                  T1 (Full Width)                   |\r\n\t\t// |----------------------------------------------------|\r\n\t\t// |    |    |                 T2                  |    |\r\n\t\t// |    |----|-------------------------------------|----|\r\n\t\t// |    |    | C1 |                           | C2 |    |\r\n\t\t// |    |    |----|                           |----|    |\r\n\t\t// |    |    |                                     |    |\r\n\t\t// | L1 | L2 |           ChartArea (C0)            | R1 |\r\n\t\t// |    |    |                                     |    |\r\n\t\t// |    |    |----|                           |----|    |\r\n\t\t// |    |    | C3 |                           | C4 |    |\r\n\t\t// |    |----|-------------------------------------|----|\r\n\t\t// |    |    |                 B1                  |    |\r\n\t\t// |----------------------------------------------------|\r\n\t\t// |                  B2 (Full Width)                   |\r\n\t\t// |----------------------------------------------------|\r\n\t\t//\r\n\r\n\t\tvar params = Object.freeze({\r\n\t\t\touterWidth: width,\r\n\t\t\touterHeight: height,\r\n\t\t\tpadding: padding,\r\n\t\t\tavailableWidth: availableWidth,\r\n\t\t\tvBoxMaxWidth: availableWidth / 2 / verticalBoxes.length,\r\n\t\t\thBoxMaxHeight: availableHeight / 2\r\n\t\t});\r\n\t\tvar chartArea = extend({\r\n\t\t\tmaxPadding: extend({}, padding),\r\n\t\t\tw: availableWidth,\r\n\t\t\th: availableHeight,\r\n\t\t\tx: padding.left,\r\n\t\t\ty: padding.top\r\n\t\t}, padding);\r\n\r\n\t\tsetLayoutDims(verticalBoxes.concat(horizontalBoxes), params);\r\n\r\n\t\t// First fit vertical boxes\r\n\t\tfitBoxes(verticalBoxes, chartArea, params);\r\n\r\n\t\t// Then fit horizontal boxes\r\n\t\tif (fitBoxes(horizontalBoxes, chartArea, params)) {\r\n\t\t\t// if the area changed, re-fit vertical boxes\r\n\t\t\tfitBoxes(verticalBoxes, chartArea, params);\r\n\t\t}\r\n\r\n\t\thandleMaxPadding(chartArea);\r\n\r\n\t\t// Finally place the boxes to correct coordinates\r\n\t\tplaceBoxes(boxes.leftAndTop, chartArea, params);\r\n\r\n\t\t// Move to opposite side of chart\r\n\t\tchartArea.x += chartArea.w;\r\n\t\tchartArea.y += chartArea.h;\r\n\r\n\t\tplaceBoxes(boxes.rightAndBottom, chartArea, params);\r\n\r\n\t\tchart.chartArea = {\r\n\t\t\tleft: chartArea.left,\r\n\t\t\ttop: chartArea.top,\r\n\t\t\tright: chartArea.left + chartArea.w,\r\n\t\t\tbottom: chartArea.top + chartArea.h\r\n\t\t};\r\n\r\n\t\t// Finally update boxes in chartArea (radial scale for example)\r\n\t\thelpers$1.each(boxes.chartArea, function(layout) {\r\n\t\t\tvar box = layout.box;\r\n\t\t\textend(box, chart.chartArea);\r\n\t\t\tbox.update(chartArea.w, chartArea.h);\r\n\t\t});\r\n\t}\r\n};\n\n/**\r\n * Platform fallback implementation (minimal).\r\n * @see https://github.com/chartjs/Chart.js/pull/4591#issuecomment-319575939\r\n */\r\n\r\nvar platform_basic = {\r\n\tacquireContext: function(item) {\r\n\t\tif (item && item.canvas) {\r\n\t\t\t// Support for any object associated to a canvas (including a context2d)\r\n\t\t\titem = item.canvas;\r\n\t\t}\r\n\r\n\t\treturn item && item.getContext('2d') || null;\r\n\t}\r\n};\n\nvar platform_dom = \"/*\\r\\n * DOM element rendering detection\\r\\n * https://davidwalsh.name/detect-node-insertion\\r\\n */\\r\\n@keyframes chartjs-render-animation {\\r\\n\\tfrom { opacity: 0.99; }\\r\\n\\tto { opacity: 1; }\\r\\n}\\r\\n\\r\\n.chartjs-render-monitor {\\r\\n\\tanimation: chartjs-render-animation 0.001s;\\r\\n}\\r\\n\\r\\n/*\\r\\n * DOM element resizing detection\\r\\n * https://github.com/marcj/css-element-queries\\r\\n */\\r\\n.chartjs-size-monitor,\\r\\n.chartjs-size-monitor-expand,\\r\\n.chartjs-size-monitor-shrink {\\r\\n\\tposition: absolute;\\r\\n\\tdirection: ltr;\\r\\n\\tleft: 0;\\r\\n\\ttop: 0;\\r\\n\\tright: 0;\\r\\n\\tbottom: 0;\\r\\n\\toverflow: hidden;\\r\\n\\tpointer-events: none;\\r\\n\\tvisibility: hidden;\\r\\n\\tz-index: -1;\\r\\n}\\r\\n\\r\\n.chartjs-size-monitor-expand > div {\\r\\n\\tposition: absolute;\\r\\n\\twidth: 1000000px;\\r\\n\\theight: 1000000px;\\r\\n\\tleft: 0;\\r\\n\\ttop: 0;\\r\\n}\\r\\n\\r\\n.chartjs-size-monitor-shrink > div {\\r\\n\\tposition: absolute;\\r\\n\\twidth: 200%;\\r\\n\\theight: 200%;\\r\\n\\tleft: 0;\\r\\n\\ttop: 0;\\r\\n}\\r\\n\";\n\nvar platform_dom$1 = /*#__PURE__*/Object.freeze({\n__proto__: null,\n'default': platform_dom\n});\n\nvar stylesheet = getCjsExportFromNamespace(platform_dom$1);\n\nvar EXPANDO_KEY = '$chartjs';\r\nvar CSS_PREFIX = 'chartjs-';\r\nvar CSS_SIZE_MONITOR = CSS_PREFIX + 'size-monitor';\r\nvar CSS_RENDER_MONITOR = CSS_PREFIX + 'render-monitor';\r\nvar CSS_RENDER_ANIMATION = CSS_PREFIX + 'render-animation';\r\nvar ANIMATION_START_EVENTS = ['animationstart', 'webkitAnimationStart'];\r\n\r\n/**\r\n * DOM event types -> Chart.js event types.\r\n * Note: only events with different types are mapped.\r\n * @see https://developer.mozilla.org/en-US/docs/Web/Events\r\n */\r\nvar EVENT_TYPES = {\r\n\ttouchstart: 'mousedown',\r\n\ttouchmove: 'mousemove',\r\n\ttouchend: 'mouseup',\r\n\tpointerenter: 'mouseenter',\r\n\tpointerdown: 'mousedown',\r\n\tpointermove: 'mousemove',\r\n\tpointerup: 'mouseup',\r\n\tpointerleave: 'mouseout',\r\n\tpointerout: 'mouseout'\r\n};\r\n\r\n/**\r\n * The \"used\" size is the final value of a dimension property after all calculations have\r\n * been performed. This method uses the computed style of `element` but returns undefined\r\n * if the computed style is not expressed in pixels. That can happen in some cases where\r\n * `element` has a size relative to its parent and this last one is not yet displayed,\r\n * for example because of `display: none` on a parent node.\r\n * @see https://developer.mozilla.org/en-US/docs/Web/CSS/used_value\r\n * @returns {number} Size in pixels or undefined if unknown.\r\n */\r\nfunction readUsedSize(element, property) {\r\n\tvar value = helpers$1.getStyle(element, property);\r\n\tvar matches = value && value.match(/^(\\d+)(\\.\\d+)?px$/);\r\n\treturn matches ? Number(matches[1]) : undefined;\r\n}\r\n\r\n/**\r\n * Initializes the canvas style and render size without modifying the canvas display size,\r\n * since responsiveness is handled by the controller.resize() method. The config is used\r\n * to determine the aspect ratio to apply in case no explicit height has been specified.\r\n */\r\nfunction initCanvas(canvas, config) {\r\n\tvar style = canvas.style;\r\n\r\n\t// NOTE(SB) canvas.getAttribute('width') !== canvas.width: in the first case it\r\n\t// returns null or '' if no explicit value has been set to the canvas attribute.\r\n\tvar renderHeight = canvas.getAttribute('height');\r\n\tvar renderWidth = canvas.getAttribute('width');\r\n\r\n\t// Chart.js modifies some canvas values that we want to restore on destroy\r\n\tcanvas[EXPANDO_KEY] = {\r\n\t\tinitial: {\r\n\t\t\theight: renderHeight,\r\n\t\t\twidth: renderWidth,\r\n\t\t\tstyle: {\r\n\t\t\t\tdisplay: style.display,\r\n\t\t\t\theight: style.height,\r\n\t\t\t\twidth: style.width\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t// Force canvas to display as block to avoid extra space caused by inline\r\n\t// elements, which would interfere with the responsive resize process.\r\n\t// https://github.com/chartjs/Chart.js/issues/2538\r\n\tstyle.display = style.display || 'block';\r\n\r\n\tif (renderWidth === null || renderWidth === '') {\r\n\t\tvar displayWidth = readUsedSize(canvas, 'width');\r\n\t\tif (displayWidth !== undefined) {\r\n\t\t\tcanvas.width = displayWidth;\r\n\t\t}\r\n\t}\r\n\r\n\tif (renderHeight === null || renderHeight === '') {\r\n\t\tif (canvas.style.height === '') {\r\n\t\t\t// If no explicit render height and style height, let's apply the aspect ratio,\r\n\t\t\t// which one can be specified by the user but also by charts as default option\r\n\t\t\t// (i.e. options.aspectRatio). If not specified, use canvas aspect ratio of 2.\r\n\t\t\tcanvas.height = canvas.width / (config.options.aspectRatio || 2);\r\n\t\t} else {\r\n\t\t\tvar displayHeight = readUsedSize(canvas, 'height');\r\n\t\t\tif (displayWidth !== undefined) {\r\n\t\t\t\tcanvas.height = displayHeight;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\treturn canvas;\r\n}\r\n\r\n/**\r\n * Detects support for options object argument in addEventListener.\r\n * https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#Safely_detecting_option_support\r\n * @private\r\n */\r\nvar supportsEventListenerOptions = (function() {\r\n\tvar supports = false;\r\n\ttry {\r\n\t\tvar options = Object.defineProperty({}, 'passive', {\r\n\t\t\t// eslint-disable-next-line getter-return\r\n\t\t\tget: function() {\r\n\t\t\t\tsupports = true;\r\n\t\t\t}\r\n\t\t});\r\n\t\twindow.addEventListener('e', null, options);\r\n\t} catch (e) {\r\n\t\t// continue regardless of error\r\n\t}\r\n\treturn supports;\r\n}());\r\n\r\n// Default passive to true as expected by Chrome for 'touchstart' and 'touchend' events.\r\n// https://github.com/chartjs/Chart.js/issues/4287\r\nvar eventListenerOptions = supportsEventListenerOptions ? {passive: true} : false;\r\n\r\nfunction addListener(node, type, listener) {\r\n\tnode.addEventListener(type, listener, eventListenerOptions);\r\n}\r\n\r\nfunction removeListener(node, type, listener) {\r\n\tnode.removeEventListener(type, listener, eventListenerOptions);\r\n}\r\n\r\nfunction createEvent(type, chart, x, y, nativeEvent) {\r\n\treturn {\r\n\t\ttype: type,\r\n\t\tchart: chart,\r\n\t\tnative: nativeEvent || null,\r\n\t\tx: x !== undefined ? x : null,\r\n\t\ty: y !== undefined ? y : null,\r\n\t};\r\n}\r\n\r\nfunction fromNativeEvent(event, chart) {\r\n\tvar type = EVENT_TYPES[event.type] || event.type;\r\n\tvar pos = helpers$1.getRelativePosition(event, chart);\r\n\treturn createEvent(type, chart, pos.x, pos.y, event);\r\n}\r\n\r\nfunction throttled(fn, thisArg) {\r\n\tvar ticking = false;\r\n\tvar args = [];\r\n\r\n\treturn function() {\r\n\t\targs = Array.prototype.slice.call(arguments);\r\n\t\tthisArg = thisArg || this;\r\n\r\n\t\tif (!ticking) {\r\n\t\t\tticking = true;\r\n\t\t\thelpers$1.requestAnimFrame.call(window, function() {\r\n\t\t\t\tticking = false;\r\n\t\t\t\tfn.apply(thisArg, args);\r\n\t\t\t});\r\n\t\t}\r\n\t};\r\n}\r\n\r\nfunction createDiv(cls) {\r\n\tvar el = document.createElement('div');\r\n\tel.className = cls || '';\r\n\treturn el;\r\n}\r\n\r\n// Implementation based on https://github.com/marcj/css-element-queries\r\nfunction createResizer(handler) {\r\n\tvar maxSize = 1000000;\r\n\r\n\t// NOTE(SB) Don't use innerHTML because it could be considered unsafe.\r\n\t// https://github.com/chartjs/Chart.js/issues/5902\r\n\tvar resizer = createDiv(CSS_SIZE_MONITOR);\r\n\tvar expand = createDiv(CSS_SIZE_MONITOR + '-expand');\r\n\tvar shrink = createDiv(CSS_SIZE_MONITOR + '-shrink');\r\n\r\n\texpand.appendChild(createDiv());\r\n\tshrink.appendChild(createDiv());\r\n\r\n\tresizer.appendChild(expand);\r\n\tresizer.appendChild(shrink);\r\n\tresizer._reset = function() {\r\n\t\texpand.scrollLeft = maxSize;\r\n\t\texpand.scrollTop = maxSize;\r\n\t\tshrink.scrollLeft = maxSize;\r\n\t\tshrink.scrollTop = maxSize;\r\n\t};\r\n\r\n\tvar onScroll = function() {\r\n\t\tresizer._reset();\r\n\t\thandler();\r\n\t};\r\n\r\n\taddListener(expand, 'scroll', onScroll.bind(expand, 'expand'));\r\n\taddListener(shrink, 'scroll', onScroll.bind(shrink, 'shrink'));\r\n\r\n\treturn resizer;\r\n}\r\n\r\n// https://davidwalsh.name/detect-node-insertion\r\nfunction watchForRender(node, handler) {\r\n\tvar expando = node[EXPANDO_KEY] || (node[EXPANDO_KEY] = {});\r\n\tvar proxy = expando.renderProxy = function(e) {\r\n\t\tif (e.animationName === CSS_RENDER_ANIMATION) {\r\n\t\t\thandler();\r\n\t\t}\r\n\t};\r\n\r\n\thelpers$1.each(ANIMATION_START_EVENTS, function(type) {\r\n\t\taddListener(node, type, proxy);\r\n\t});\r\n\r\n\t// #4737: Chrome might skip the CSS animation when the CSS_RENDER_MONITOR class\r\n\t// is removed then added back immediately (same animation frame?). Accessing the\r\n\t// `offsetParent` property will force a reflow and re-evaluate the CSS animation.\r\n\t// https://gist.github.com/paulirish/5d52fb081b3570c81e3a#box-metrics\r\n\t// https://github.com/chartjs/Chart.js/issues/4737\r\n\texpando.reflow = !!node.offsetParent;\r\n\r\n\tnode.classList.add(CSS_RENDER_MONITOR);\r\n}\r\n\r\nfunction unwatchForRender(node) {\r\n\tvar expando = node[EXPANDO_KEY] || {};\r\n\tvar proxy = expando.renderProxy;\r\n\r\n\tif (proxy) {\r\n\t\thelpers$1.each(ANIMATION_START_EVENTS, function(type) {\r\n\t\t\tremoveListener(node, type, proxy);\r\n\t\t});\r\n\r\n\t\tdelete expando.renderProxy;\r\n\t}\r\n\r\n\tnode.classList.remove(CSS_RENDER_MONITOR);\r\n}\r\n\r\nfunction addResizeListener(node, listener, chart) {\r\n\tvar expando = node[EXPANDO_KEY] || (node[EXPANDO_KEY] = {});\r\n\r\n\t// Let's keep track of this added resizer and thus avoid DOM query when removing it.\r\n\tvar resizer = expando.resizer = createResizer(throttled(function() {\r\n\t\tif (expando.resizer) {\r\n\t\t\tvar container = chart.options.maintainAspectRatio && node.parentNode;\r\n\t\t\tvar w = container ? container.clientWidth : 0;\r\n\t\t\tlistener(createEvent('resize', chart));\r\n\t\t\tif (container && container.clientWidth < w && chart.canvas) {\r\n\t\t\t\t// If the container size shrank during chart resize, let's assume\r\n\t\t\t\t// scrollbar appeared. So we resize again with the scrollbar visible -\r\n\t\t\t\t// effectively making chart smaller and the scrollbar hidden again.\r\n\t\t\t\t// Because we are inside `throttled`, and currently `ticking`, scroll\r\n\t\t\t\t// events are ignored during this whole 2 resize process.\r\n\t\t\t\t// If we assumed wrong and something else happened, we are resizing\r\n\t\t\t\t// twice in a frame (potential performance issue)\r\n\t\t\t\tlistener(createEvent('resize', chart));\r\n\t\t\t}\r\n\t\t}\r\n\t}));\r\n\r\n\t// The resizer needs to be attached to the node parent, so we first need to be\r\n\t// sure that `node` is attached to the DOM before injecting the resizer element.\r\n\twatchForRender(node, function() {\r\n\t\tif (expando.resizer) {\r\n\t\t\tvar container = node.parentNode;\r\n\t\t\tif (container && container !== resizer.parentNode) {\r\n\t\t\t\tcontainer.insertBefore(resizer, container.firstChild);\r\n\t\t\t}\r\n\r\n\t\t\t// The container size might have changed, let's reset the resizer state.\r\n\t\t\tresizer._reset();\r\n\t\t}\r\n\t});\r\n}\r\n\r\nfunction removeResizeListener(node) {\r\n\tvar expando = node[EXPANDO_KEY] || {};\r\n\tvar resizer = expando.resizer;\r\n\r\n\tdelete expando.resizer;\r\n\tunwatchForRender(node);\r\n\r\n\tif (resizer && resizer.parentNode) {\r\n\t\tresizer.parentNode.removeChild(resizer);\r\n\t}\r\n}\r\n\r\n/**\r\n * Injects CSS styles inline if the styles are not already present.\r\n * @param {HTMLDocument|ShadowRoot} rootNode - the node to contain the <style>.\r\n * @param {string} css - the CSS to be injected.\r\n */\r\nfunction injectCSS(rootNode, css) {\r\n\t// https://stackoverflow.com/q/3922139\r\n\tvar expando = rootNode[EXPANDO_KEY] || (rootNode[EXPANDO_KEY] = {});\r\n\tif (!expando.containsStyles) {\r\n\t\texpando.containsStyles = true;\r\n\t\tcss = '/* Chart.js */\\n' + css;\r\n\t\tvar style = document.createElement('style');\r\n\t\tstyle.setAttribute('type', 'text/css');\r\n\t\tstyle.appendChild(document.createTextNode(css));\r\n\t\trootNode.appendChild(style);\r\n\t}\r\n}\r\n\r\nvar platform_dom$2 = {\r\n\t/**\r\n\t * When `true`, prevents the automatic injection of the stylesheet required to\r\n\t * correctly detect when the chart is added to the DOM and then resized. This\r\n\t * switch has been added to allow external stylesheet (`dist/Chart(.min)?.js`)\r\n\t * to be manually imported to make this library compatible with any CSP.\r\n\t * See https://github.com/chartjs/Chart.js/issues/5208\r\n\t */\r\n\tdisableCSSInjection: false,\r\n\r\n\t/**\r\n\t * This property holds whether this platform is enabled for the current environment.\r\n\t * Currently used by platform.js to select the proper implementation.\r\n\t * @private\r\n\t */\r\n\t_enabled: typeof window !== 'undefined' && typeof document !== 'undefined',\r\n\r\n\t/**\r\n\t * Initializes resources that depend on platform options.\r\n\t * @param {HTMLCanvasElement} canvas - The Canvas element.\r\n\t * @private\r\n\t */\r\n\t_ensureLoaded: function(canvas) {\r\n\t\tif (!this.disableCSSInjection) {\r\n\t\t\t// If the canvas is in a shadow DOM, then the styles must also be inserted\r\n\t\t\t// into the same shadow DOM.\r\n\t\t\t// https://github.com/chartjs/Chart.js/issues/5763\r\n\t\t\tvar root = canvas.getRootNode ? canvas.getRootNode() : document;\r\n\t\t\tvar targetNode = root.host ? root : document.head;\r\n\t\t\tinjectCSS(targetNode, stylesheet);\r\n\t\t}\r\n\t},\r\n\r\n\tacquireContext: function(item, config) {\r\n\t\tif (typeof item === 'string') {\r\n\t\t\titem = document.getElementById(item);\r\n\t\t} else if (item.length) {\r\n\t\t\t// Support for array based queries (such as jQuery)\r\n\t\t\titem = item[0];\r\n\t\t}\r\n\r\n\t\tif (item && item.canvas) {\r\n\t\t\t// Support for any object associated to a canvas (including a context2d)\r\n\t\t\titem = item.canvas;\r\n\t\t}\r\n\r\n\t\t// To prevent canvas fingerprinting, some add-ons undefine the getContext\r\n\t\t// method, for example: https://github.com/kkapsner/CanvasBlocker\r\n\t\t// https://github.com/chartjs/Chart.js/issues/2807\r\n\t\tvar context = item && item.getContext && item.getContext('2d');\r\n\r\n\t\t// `instanceof HTMLCanvasElement/CanvasRenderingContext2D` fails when the item is\r\n\t\t// inside an iframe or when running in a protected environment. We could guess the\r\n\t\t// types from their toString() value but let's keep things flexible and assume it's\r\n\t\t// a sufficient condition if the item has a context2D which has item as `canvas`.\r\n\t\t// https://github.com/chartjs/Chart.js/issues/3887\r\n\t\t// https://github.com/chartjs/Chart.js/issues/4102\r\n\t\t// https://github.com/chartjs/Chart.js/issues/4152\r\n\t\tif (context && context.canvas === item) {\r\n\t\t\t// Load platform resources on first chart creation, to make it possible to\r\n\t\t\t// import the library before setting platform options.\r\n\t\t\tthis._ensureLoaded(item);\r\n\t\t\tinitCanvas(item, config);\r\n\t\t\treturn context;\r\n\t\t}\r\n\r\n\t\treturn null;\r\n\t},\r\n\r\n\treleaseContext: function(context) {\r\n\t\tvar canvas = context.canvas;\r\n\t\tif (!canvas[EXPANDO_KEY]) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tvar initial = canvas[EXPANDO_KEY].initial;\r\n\t\t['height', 'width'].forEach(function(prop) {\r\n\t\t\tvar value = initial[prop];\r\n\t\t\tif (helpers$1.isNullOrUndef(value)) {\r\n\t\t\t\tcanvas.removeAttribute(prop);\r\n\t\t\t} else {\r\n\t\t\t\tcanvas.setAttribute(prop, value);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\thelpers$1.each(initial.style || {}, function(value, key) {\r\n\t\t\tcanvas.style[key] = value;\r\n\t\t});\r\n\r\n\t\t// The canvas render size might have been changed (and thus the state stack discarded),\r\n\t\t// we can't use save() and restore() to restore the initial state. So make sure that at\r\n\t\t// least the canvas context is reset to the default state by setting the canvas width.\r\n\t\t// https://www.w3.org/TR/2011/WD-html5-20110525/the-canvas-element.html\r\n\t\t// eslint-disable-next-line no-self-assign\r\n\t\tcanvas.width = canvas.width;\r\n\r\n\t\tdelete canvas[EXPANDO_KEY];\r\n\t},\r\n\r\n\taddEventListener: function(chart, type, listener) {\r\n\t\tvar canvas = chart.canvas;\r\n\t\tif (type === 'resize') {\r\n\t\t\t// Note: the resize event is not supported on all browsers.\r\n\t\t\taddResizeListener(canvas, listener, chart);\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tvar expando = listener[EXPANDO_KEY] || (listener[EXPANDO_KEY] = {});\r\n\t\tvar proxies = expando.proxies || (expando.proxies = {});\r\n\t\tvar proxy = proxies[chart.id + '_' + type] = function(event) {\r\n\t\t\tlistener(fromNativeEvent(event, chart));\r\n\t\t};\r\n\r\n\t\taddListener(canvas, type, proxy);\r\n\t},\r\n\r\n\tremoveEventListener: function(chart, type, listener) {\r\n\t\tvar canvas = chart.canvas;\r\n\t\tif (type === 'resize') {\r\n\t\t\t// Note: the resize event is not supported on all browsers.\r\n\t\t\tremoveResizeListener(canvas);\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tvar expando = listener[EXPANDO_KEY] || {};\r\n\t\tvar proxies = expando.proxies || {};\r\n\t\tvar proxy = proxies[chart.id + '_' + type];\r\n\t\tif (!proxy) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tremoveListener(canvas, type, proxy);\r\n\t}\r\n};\r\n\r\n// DEPRECATIONS\r\n\r\n/**\r\n * Provided for backward compatibility, use EventTarget.addEventListener instead.\r\n * EventTarget.addEventListener compatibility: Chrome, Opera 7, Safari, FF1.5+, IE9+\r\n * @see https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener\r\n * @function Chart.helpers.addEvent\r\n * @deprecated since version 2.7.0\r\n * @todo remove at version 3\r\n * @private\r\n */\r\nhelpers$1.addEvent = addListener;\r\n\r\n/**\r\n * Provided for backward compatibility, use EventTarget.removeEventListener instead.\r\n * EventTarget.removeEventListener compatibility: Chrome, Opera 7, Safari, FF1.5+, IE9+\r\n * @see https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/removeEventListener\r\n * @function Chart.helpers.removeEvent\r\n * @deprecated since version 2.7.0\r\n * @todo remove at version 3\r\n * @private\r\n */\r\nhelpers$1.removeEvent = removeListener;\n\n// @TODO Make possible to select another platform at build time.\r\nvar implementation = platform_dom$2._enabled ? platform_dom$2 : platform_basic;\r\n\r\n/**\r\n * @namespace Chart.platform\r\n * @see https://chartjs.gitbooks.io/proposals/content/Platform.html\r\n * @since 2.4.0\r\n */\r\nvar platform = helpers$1.extend({\r\n\t/**\r\n\t * @since 2.7.0\r\n\t */\r\n\tinitialize: function() {},\r\n\r\n\t/**\r\n\t * Called at chart construction time, returns a context2d instance implementing\r\n\t * the [W3C Canvas 2D Context API standard]{@link https://www.w3.org/TR/2dcontext/}.\r\n\t * @param {*} item - The native item from which to acquire context (platform specific)\r\n\t * @param {object} options - The chart options\r\n\t * @returns {CanvasRenderingContext2D} context2d instance\r\n\t */\r\n\tacquireContext: function() {},\r\n\r\n\t/**\r\n\t * Called at chart destruction time, releases any resources associated to the context\r\n\t * previously returned by the acquireContext() method.\r\n\t * @param {CanvasRenderingContext2D} context - The context2d instance\r\n\t * @returns {boolean} true if the method succeeded, else false\r\n\t */\r\n\treleaseContext: function() {},\r\n\r\n\t/**\r\n\t * Registers the specified listener on the given chart.\r\n\t * @param {Chart} chart - Chart from which to listen for event\r\n\t * @param {string} type - The ({@link IEvent}) type to listen for\r\n\t * @param {function} listener - Receives a notification (an object that implements\r\n\t * the {@link IEvent} interface) when an event of the specified type occurs.\r\n\t */\r\n\taddEventListener: function() {},\r\n\r\n\t/**\r\n\t * Removes the specified listener previously registered with addEventListener.\r\n\t * @param {Chart} chart - Chart from which to remove the listener\r\n\t * @param {string} type - The ({@link IEvent}) type to remove\r\n\t * @param {function} listener - The listener function to remove from the event target.\r\n\t */\r\n\tremoveEventListener: function() {}\r\n\r\n}, implementation);\n\ncore_defaults._set('global', {\r\n\tplugins: {}\r\n});\r\n\r\n/**\r\n * The plugin service singleton\r\n * @namespace Chart.plugins\r\n * @since 2.1.0\r\n */\r\nvar core_plugins = {\r\n\t/**\r\n\t * Globally registered plugins.\r\n\t * @private\r\n\t */\r\n\t_plugins: [],\r\n\r\n\t/**\r\n\t * This identifier is used to invalidate the descriptors cache attached to each chart\r\n\t * when a global plugin is registered or unregistered. In this case, the cache ID is\r\n\t * incremented and descriptors are regenerated during following API calls.\r\n\t * @private\r\n\t */\r\n\t_cacheId: 0,\r\n\r\n\t/**\r\n\t * Registers the given plugin(s) if not already registered.\r\n\t * @param {IPlugin[]|IPlugin} plugins plugin instance(s).\r\n\t */\r\n\tregister: function(plugins) {\r\n\t\tvar p = this._plugins;\r\n\t\t([]).concat(plugins).forEach(function(plugin) {\r\n\t\t\tif (p.indexOf(plugin) === -1) {\r\n\t\t\t\tp.push(plugin);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tthis._cacheId++;\r\n\t},\r\n\r\n\t/**\r\n\t * Unregisters the given plugin(s) only if registered.\r\n\t * @param {IPlugin[]|IPlugin} plugins plugin instance(s).\r\n\t */\r\n\tunregister: function(plugins) {\r\n\t\tvar p = this._plugins;\r\n\t\t([]).concat(plugins).forEach(function(plugin) {\r\n\t\t\tvar idx = p.indexOf(plugin);\r\n\t\t\tif (idx !== -1) {\r\n\t\t\t\tp.splice(idx, 1);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tthis._cacheId++;\r\n\t},\r\n\r\n\t/**\r\n\t * Remove all registered plugins.\r\n\t * @since 2.1.5\r\n\t */\r\n\tclear: function() {\r\n\t\tthis._plugins = [];\r\n\t\tthis._cacheId++;\r\n\t},\r\n\r\n\t/**\r\n\t * Returns the number of registered plugins?\r\n\t * @returns {number}\r\n\t * @since 2.1.5\r\n\t */\r\n\tcount: function() {\r\n\t\treturn this._plugins.length;\r\n\t},\r\n\r\n\t/**\r\n\t * Returns all registered plugin instances.\r\n\t * @returns {IPlugin[]} array of plugin objects.\r\n\t * @since 2.1.5\r\n\t */\r\n\tgetAll: function() {\r\n\t\treturn this._plugins;\r\n\t},\r\n\r\n\t/**\r\n\t * Calls enabled plugins for `chart` on the specified hook and with the given args.\r\n\t * This method immediately returns as soon as a plugin explicitly returns false. The\r\n\t * returned value can be used, for instance, to interrupt the current action.\r\n\t * @param {Chart} chart - The chart instance for which plugins should be called.\r\n\t * @param {string} hook - The name of the plugin method to call (e.g. 'beforeUpdate').\r\n\t * @param {Array} [args] - Extra arguments to apply to the hook call.\r\n\t * @returns {boolean} false if any of the plugins return false, else returns true.\r\n\t */\r\n\tnotify: function(chart, hook, args) {\r\n\t\tvar descriptors = this.descriptors(chart);\r\n\t\tvar ilen = descriptors.length;\r\n\t\tvar i, descriptor, plugin, params, method;\r\n\r\n\t\tfor (i = 0; i < ilen; ++i) {\r\n\t\t\tdescriptor = descriptors[i];\r\n\t\t\tplugin = descriptor.plugin;\r\n\t\t\tmethod = plugin[hook];\r\n\t\t\tif (typeof method === 'function') {\r\n\t\t\t\tparams = [chart].concat(args || []);\r\n\t\t\t\tparams.push(descriptor.options);\r\n\t\t\t\tif (method.apply(plugin, params) === false) {\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn true;\r\n\t},\r\n\r\n\t/**\r\n\t * Returns descriptors of enabled plugins for the given chart.\r\n\t * @returns {object[]} [{ plugin, options }]\r\n\t * @private\r\n\t */\r\n\tdescriptors: function(chart) {\r\n\t\tvar cache = chart.$plugins || (chart.$plugins = {});\r\n\t\tif (cache.id === this._cacheId) {\r\n\t\t\treturn cache.descriptors;\r\n\t\t}\r\n\r\n\t\tvar plugins = [];\r\n\t\tvar descriptors = [];\r\n\t\tvar config = (chart && chart.config) || {};\r\n\t\tvar options = (config.options && config.options.plugins) || {};\r\n\r\n\t\tthis._plugins.concat(config.plugins || []).forEach(function(plugin) {\r\n\t\t\tvar idx = plugins.indexOf(plugin);\r\n\t\t\tif (idx !== -1) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tvar id = plugin.id;\r\n\t\t\tvar opts = options[id];\r\n\t\t\tif (opts === false) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tif (opts === true) {\r\n\t\t\t\topts = helpers$1.clone(core_defaults.global.plugins[id]);\r\n\t\t\t}\r\n\r\n\t\t\tplugins.push(plugin);\r\n\t\t\tdescriptors.push({\r\n\t\t\t\tplugin: plugin,\r\n\t\t\t\toptions: opts || {}\r\n\t\t\t});\r\n\t\t});\r\n\r\n\t\tcache.descriptors = descriptors;\r\n\t\tcache.id = this._cacheId;\r\n\t\treturn descriptors;\r\n\t},\r\n\r\n\t/**\r\n\t * Invalidates cache for the given chart: descriptors hold a reference on plugin option,\r\n\t * but in some cases, this reference can be changed by the user when updating options.\r\n\t * https://github.com/chartjs/Chart.js/issues/5111#issuecomment-355934167\r\n\t * @private\r\n\t */\r\n\t_invalidate: function(chart) {\r\n\t\tdelete chart.$plugins;\r\n\t}\r\n};\n\nvar core_scaleService = {\r\n\t// Scale registration object. Extensions can register new scale types (such as log or DB scales) and then\r\n\t// use the new chart options to grab the correct scale\r\n\tconstructors: {},\r\n\t// Use a registration function so that we can move to an ES6 map when we no longer need to support\r\n\t// old browsers\r\n\r\n\t// Scale config defaults\r\n\tdefaults: {},\r\n\tregisterScaleType: function(type, scaleConstructor, scaleDefaults) {\r\n\t\tthis.constructors[type] = scaleConstructor;\r\n\t\tthis.defaults[type] = helpers$1.clone(scaleDefaults);\r\n\t},\r\n\tgetScaleConstructor: function(type) {\r\n\t\treturn this.constructors.hasOwnProperty(type) ? this.constructors[type] : undefined;\r\n\t},\r\n\tgetScaleDefaults: function(type) {\r\n\t\t// Return the scale defaults merged with the global settings so that we always use the latest ones\r\n\t\treturn this.defaults.hasOwnProperty(type) ? helpers$1.merge(Object.create(null), [core_defaults.scale, this.defaults[type]]) : {};\r\n\t},\r\n\tupdateScaleDefaults: function(type, additions) {\r\n\t\tvar me = this;\r\n\t\tif (me.defaults.hasOwnProperty(type)) {\r\n\t\t\tme.defaults[type] = helpers$1.extend(me.defaults[type], additions);\r\n\t\t}\r\n\t},\r\n\taddScalesToLayout: function(chart) {\r\n\t\t// Adds each scale to the chart.boxes array to be sized accordingly\r\n\t\thelpers$1.each(chart.scales, function(scale) {\r\n\t\t\t// Set ILayoutItem parameters for backwards compatibility\r\n\t\t\tscale.fullWidth = scale.options.fullWidth;\r\n\t\t\tscale.position = scale.options.position;\r\n\t\t\tscale.weight = scale.options.weight;\r\n\t\t\tcore_layouts.addBox(chart, scale);\r\n\t\t});\r\n\t}\r\n};\n\nvar valueOrDefault$8 = helpers$1.valueOrDefault;\r\nvar getRtlHelper = helpers$1.rtl.getRtlAdapter;\r\n\r\ncore_defaults._set('global', {\r\n\ttooltips: {\r\n\t\tenabled: true,\r\n\t\tcustom: null,\r\n\t\tmode: 'nearest',\r\n\t\tposition: 'average',\r\n\t\tintersect: true,\r\n\t\tbackgroundColor: 'rgba(0,0,0,0.8)',\r\n\t\ttitleFontStyle: 'bold',\r\n\t\ttitleSpacing: 2,\r\n\t\ttitleMarginBottom: 6,\r\n\t\ttitleFontColor: '#fff',\r\n\t\ttitleAlign: 'left',\r\n\t\tbodySpacing: 2,\r\n\t\tbodyFontColor: '#fff',\r\n\t\tbodyAlign: 'left',\r\n\t\tfooterFontStyle: 'bold',\r\n\t\tfooterSpacing: 2,\r\n\t\tfooterMarginTop: 6,\r\n\t\tfooterFontColor: '#fff',\r\n\t\tfooterAlign: 'left',\r\n\t\tyPadding: 6,\r\n\t\txPadding: 6,\r\n\t\tcaretPadding: 2,\r\n\t\tcaretSize: 5,\r\n\t\tcornerRadius: 6,\r\n\t\tmultiKeyBackground: '#fff',\r\n\t\tdisplayColors: true,\r\n\t\tborderColor: 'rgba(0,0,0,0)',\r\n\t\tborderWidth: 0,\r\n\t\tcallbacks: {\r\n\t\t\t// Args are: (tooltipItems, data)\r\n\t\t\tbeforeTitle: helpers$1.noop,\r\n\t\t\ttitle: function(tooltipItems, data) {\r\n\t\t\t\tvar title = '';\r\n\t\t\t\tvar labels = data.labels;\r\n\t\t\t\tvar labelCount = labels ? labels.length : 0;\r\n\r\n\t\t\t\tif (tooltipItems.length > 0) {\r\n\t\t\t\t\tvar item = tooltipItems[0];\r\n\t\t\t\t\tif (item.label) {\r\n\t\t\t\t\t\ttitle = item.label;\r\n\t\t\t\t\t} else if (item.xLabel) {\r\n\t\t\t\t\t\ttitle = item.xLabel;\r\n\t\t\t\t\t} else if (labelCount > 0 && item.index < labelCount) {\r\n\t\t\t\t\t\ttitle = labels[item.index];\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn title;\r\n\t\t\t},\r\n\t\t\tafterTitle: helpers$1.noop,\r\n\r\n\t\t\t// Args are: (tooltipItems, data)\r\n\t\t\tbeforeBody: helpers$1.noop,\r\n\r\n\t\t\t// Args are: (tooltipItem, data)\r\n\t\t\tbeforeLabel: helpers$1.noop,\r\n\t\t\tlabel: function(tooltipItem, data) {\r\n\t\t\t\tvar label = data.datasets[tooltipItem.datasetIndex].label || '';\r\n\r\n\t\t\t\tif (label) {\r\n\t\t\t\t\tlabel += ': ';\r\n\t\t\t\t}\r\n\t\t\t\tif (!helpers$1.isNullOrUndef(tooltipItem.value)) {\r\n\t\t\t\t\tlabel += tooltipItem.value;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tlabel += tooltipItem.yLabel;\r\n\t\t\t\t}\r\n\t\t\t\treturn label;\r\n\t\t\t},\r\n\t\t\tlabelColor: function(tooltipItem, chart) {\r\n\t\t\t\tvar meta = chart.getDatasetMeta(tooltipItem.datasetIndex);\r\n\t\t\t\tvar activeElement = meta.data[tooltipItem.index];\r\n\t\t\t\tvar view = activeElement._view;\r\n\t\t\t\treturn {\r\n\t\t\t\t\tborderColor: view.borderColor,\r\n\t\t\t\t\tbackgroundColor: view.backgroundColor\r\n\t\t\t\t};\r\n\t\t\t},\r\n\t\t\tlabelTextColor: function() {\r\n\t\t\t\treturn this._options.bodyFontColor;\r\n\t\t\t},\r\n\t\t\tafterLabel: helpers$1.noop,\r\n\r\n\t\t\t// Args are: (tooltipItems, data)\r\n\t\t\tafterBody: helpers$1.noop,\r\n\r\n\t\t\t// Args are: (tooltipItems, data)\r\n\t\t\tbeforeFooter: helpers$1.noop,\r\n\t\t\tfooter: helpers$1.noop,\r\n\t\t\tafterFooter: helpers$1.noop\r\n\t\t}\r\n\t}\r\n});\r\n\r\nvar positioners = {\r\n\t/**\r\n\t * Average mode places the tooltip at the average position of the elements shown\r\n\t * @function Chart.Tooltip.positioners.average\r\n\t * @param elements {ChartElement[]} the elements being displayed in the tooltip\r\n\t * @returns {object} tooltip position\r\n\t */\r\n\taverage: function(elements) {\r\n\t\tif (!elements.length) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tvar i, len;\r\n\t\tvar x = 0;\r\n\t\tvar y = 0;\r\n\t\tvar count = 0;\r\n\r\n\t\tfor (i = 0, len = elements.length; i < len; ++i) {\r\n\t\t\tvar el = elements[i];\r\n\t\t\tif (el && el.hasValue()) {\r\n\t\t\t\tvar pos = el.tooltipPosition();\r\n\t\t\t\tx += pos.x;\r\n\t\t\t\ty += pos.y;\r\n\t\t\t\t++count;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn {\r\n\t\t\tx: x / count,\r\n\t\t\ty: y / count\r\n\t\t};\r\n\t},\r\n\r\n\t/**\r\n\t * Gets the tooltip position nearest of the item nearest to the event position\r\n\t * @function Chart.Tooltip.positioners.nearest\r\n\t * @param elements {Chart.Element[]} the tooltip elements\r\n\t * @param eventPosition {object} the position of the event in canvas coordinates\r\n\t * @returns {object} the tooltip position\r\n\t */\r\n\tnearest: function(elements, eventPosition) {\r\n\t\tvar x = eventPosition.x;\r\n\t\tvar y = eventPosition.y;\r\n\t\tvar minDistance = Number.POSITIVE_INFINITY;\r\n\t\tvar i, len, nearestElement;\r\n\r\n\t\tfor (i = 0, len = elements.length; i < len; ++i) {\r\n\t\t\tvar el = elements[i];\r\n\t\t\tif (el && el.hasValue()) {\r\n\t\t\t\tvar center = el.getCenterPoint();\r\n\t\t\t\tvar d = helpers$1.distanceBetweenPoints(eventPosition, center);\r\n\r\n\t\t\t\tif (d < minDistance) {\r\n\t\t\t\t\tminDistance = d;\r\n\t\t\t\t\tnearestElement = el;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (nearestElement) {\r\n\t\t\tvar tp = nearestElement.tooltipPosition();\r\n\t\t\tx = tp.x;\r\n\t\t\ty = tp.y;\r\n\t\t}\r\n\r\n\t\treturn {\r\n\t\t\tx: x,\r\n\t\t\ty: y\r\n\t\t};\r\n\t}\r\n};\r\n\r\n// Helper to push or concat based on if the 2nd parameter is an array or not\r\nfunction pushOrConcat(base, toPush) {\r\n\tif (toPush) {\r\n\t\tif (helpers$1.isArray(toPush)) {\r\n\t\t\t// base = base.concat(toPush);\r\n\t\t\tArray.prototype.push.apply(base, toPush);\r\n\t\t} else {\r\n\t\t\tbase.push(toPush);\r\n\t\t}\r\n\t}\r\n\r\n\treturn base;\r\n}\r\n\r\n/**\r\n * Returns array of strings split by newline\r\n * @param {string} value - The value to split by newline.\r\n * @returns {string[]} value if newline present - Returned from String split() method\r\n * @function\r\n */\r\nfunction splitNewlines(str) {\r\n\tif ((typeof str === 'string' || str instanceof String) && str.indexOf('\\n') > -1) {\r\n\t\treturn str.split('\\n');\r\n\t}\r\n\treturn str;\r\n}\r\n\r\n\r\n/**\r\n * Private helper to create a tooltip item model\r\n * @param element - the chart element (point, arc, bar) to create the tooltip item for\r\n * @return new tooltip item\r\n */\r\nfunction createTooltipItem(element) {\r\n\tvar xScale = element._xScale;\r\n\tvar yScale = element._yScale || element._scale; // handle radar || polarArea charts\r\n\tvar index = element._index;\r\n\tvar datasetIndex = element._datasetIndex;\r\n\tvar controller = element._chart.getDatasetMeta(datasetIndex).controller;\r\n\tvar indexScale = controller._getIndexScale();\r\n\tvar valueScale = controller._getValueScale();\r\n\r\n\treturn {\r\n\t\txLabel: xScale ? xScale.getLabelForIndex(index, datasetIndex) : '',\r\n\t\tyLabel: yScale ? yScale.getLabelForIndex(index, datasetIndex) : '',\r\n\t\tlabel: indexScale ? '' + indexScale.getLabelForIndex(index, datasetIndex) : '',\r\n\t\tvalue: valueScale ? '' + valueScale.getLabelForIndex(index, datasetIndex) : '',\r\n\t\tindex: index,\r\n\t\tdatasetIndex: datasetIndex,\r\n\t\tx: element._model.x,\r\n\t\ty: element._model.y\r\n\t};\r\n}\r\n\r\n/**\r\n * Helper to get the reset model for the tooltip\r\n * @param tooltipOpts {object} the tooltip options\r\n */\r\nfunction getBaseModel(tooltipOpts) {\r\n\tvar globalDefaults = core_defaults.global;\r\n\r\n\treturn {\r\n\t\t// Positioning\r\n\t\txPadding: tooltipOpts.xPadding,\r\n\t\tyPadding: tooltipOpts.yPadding,\r\n\t\txAlign: tooltipOpts.xAlign,\r\n\t\tyAlign: tooltipOpts.yAlign,\r\n\r\n\t\t// Drawing direction and text direction\r\n\t\trtl: tooltipOpts.rtl,\r\n\t\ttextDirection: tooltipOpts.textDirection,\r\n\r\n\t\t// Body\r\n\t\tbodyFontColor: tooltipOpts.bodyFontColor,\r\n\t\t_bodyFontFamily: valueOrDefault$8(tooltipOpts.bodyFontFamily, globalDefaults.defaultFontFamily),\r\n\t\t_bodyFontStyle: valueOrDefault$8(tooltipOpts.bodyFontStyle, globalDefaults.defaultFontStyle),\r\n\t\t_bodyAlign: tooltipOpts.bodyAlign,\r\n\t\tbodyFontSize: valueOrDefault$8(tooltipOpts.bodyFontSize, globalDefaults.defaultFontSize),\r\n\t\tbodySpacing: tooltipOpts.bodySpacing,\r\n\r\n\t\t// Title\r\n\t\ttitleFontColor: tooltipOpts.titleFontColor,\r\n\t\t_titleFontFamily: valueOrDefault$8(tooltipOpts.titleFontFamily, globalDefaults.defaultFontFamily),\r\n\t\t_titleFontStyle: valueOrDefault$8(tooltipOpts.titleFontStyle, globalDefaults.defaultFontStyle),\r\n\t\ttitleFontSize: valueOrDefault$8(tooltipOpts.titleFontSize, globalDefaults.defaultFontSize),\r\n\t\t_titleAlign: tooltipOpts.titleAlign,\r\n\t\ttitleSpacing: tooltipOpts.titleSpacing,\r\n\t\ttitleMarginBottom: tooltipOpts.titleMarginBottom,\r\n\r\n\t\t// Footer\r\n\t\tfooterFontColor: tooltipOpts.footerFontColor,\r\n\t\t_footerFontFamily: valueOrDefault$8(tooltipOpts.footerFontFamily, globalDefaults.defaultFontFamily),\r\n\t\t_footerFontStyle: valueOrDefault$8(tooltipOpts.footerFontStyle, globalDefaults.defaultFontStyle),\r\n\t\tfooterFontSize: valueOrDefault$8(tooltipOpts.footerFontSize, globalDefaults.defaultFontSize),\r\n\t\t_footerAlign: tooltipOpts.footerAlign,\r\n\t\tfooterSpacing: tooltipOpts.footerSpacing,\r\n\t\tfooterMarginTop: tooltipOpts.footerMarginTop,\r\n\r\n\t\t// Appearance\r\n\t\tcaretSize: tooltipOpts.caretSize,\r\n\t\tcornerRadius: tooltipOpts.cornerRadius,\r\n\t\tbackgroundColor: tooltipOpts.backgroundColor,\r\n\t\topacity: 0,\r\n\t\tlegendColorBackground: tooltipOpts.multiKeyBackground,\r\n\t\tdisplayColors: tooltipOpts.displayColors,\r\n\t\tborderColor: tooltipOpts.borderColor,\r\n\t\tborderWidth: tooltipOpts.borderWidth\r\n\t};\r\n}\r\n\r\n/**\r\n * Get the size of the tooltip\r\n */\r\nfunction getTooltipSize(tooltip, model) {\r\n\tvar ctx = tooltip._chart.ctx;\r\n\r\n\tvar height = model.yPadding * 2; // Tooltip Padding\r\n\tvar width = 0;\r\n\r\n\t// Count of all lines in the body\r\n\tvar body = model.body;\r\n\tvar combinedBodyLength = body.reduce(function(count, bodyItem) {\r\n\t\treturn count + bodyItem.before.length + bodyItem.lines.length + bodyItem.after.length;\r\n\t}, 0);\r\n\tcombinedBodyLength += model.beforeBody.length + model.afterBody.length;\r\n\r\n\tvar titleLineCount = model.title.length;\r\n\tvar footerLineCount = model.footer.length;\r\n\tvar titleFontSize = model.titleFontSize;\r\n\tvar bodyFontSize = model.bodyFontSize;\r\n\tvar footerFontSize = model.footerFontSize;\r\n\r\n\theight += titleLineCount * titleFontSize; // Title Lines\r\n\theight += titleLineCount ? (titleLineCount - 1) * model.titleSpacing : 0; // Title Line Spacing\r\n\theight += titleLineCount ? model.titleMarginBottom : 0; // Title's bottom Margin\r\n\theight += combinedBodyLength * bodyFontSize; // Body Lines\r\n\theight += combinedBodyLength ? (combinedBodyLength - 1) * model.bodySpacing : 0; // Body Line Spacing\r\n\theight += footerLineCount ? model.footerMarginTop : 0; // Footer Margin\r\n\theight += footerLineCount * (footerFontSize); // Footer Lines\r\n\theight += footerLineCount ? (footerLineCount - 1) * model.footerSpacing : 0; // Footer Line Spacing\r\n\r\n\t// Title width\r\n\tvar widthPadding = 0;\r\n\tvar maxLineWidth = function(line) {\r\n\t\twidth = Math.max(width, ctx.measureText(line).width + widthPadding);\r\n\t};\r\n\r\n\tctx.font = helpers$1.fontString(titleFontSize, model._titleFontStyle, model._titleFontFamily);\r\n\thelpers$1.each(model.title, maxLineWidth);\r\n\r\n\t// Body width\r\n\tctx.font = helpers$1.fontString(bodyFontSize, model._bodyFontStyle, model._bodyFontFamily);\r\n\thelpers$1.each(model.beforeBody.concat(model.afterBody), maxLineWidth);\r\n\r\n\t// Body lines may include some extra width due to the color box\r\n\twidthPadding = model.displayColors ? (bodyFontSize + 2) : 0;\r\n\thelpers$1.each(body, function(bodyItem) {\r\n\t\thelpers$1.each(bodyItem.before, maxLineWidth);\r\n\t\thelpers$1.each(bodyItem.lines, maxLineWidth);\r\n\t\thelpers$1.each(bodyItem.after, maxLineWidth);\r\n\t});\r\n\r\n\t// Reset back to 0\r\n\twidthPadding = 0;\r\n\r\n\t// Footer width\r\n\tctx.font = helpers$1.fontString(footerFontSize, model._footerFontStyle, model._footerFontFamily);\r\n\thelpers$1.each(model.footer, maxLineWidth);\r\n\r\n\t// Add padding\r\n\twidth += 2 * model.xPadding;\r\n\r\n\treturn {\r\n\t\twidth: width,\r\n\t\theight: height\r\n\t};\r\n}\r\n\r\n/**\r\n * Helper to get the alignment of a tooltip given the size\r\n */\r\nfunction determineAlignment(tooltip, size) {\r\n\tvar model = tooltip._model;\r\n\tvar chart = tooltip._chart;\r\n\tvar chartArea = tooltip._chart.chartArea;\r\n\tvar xAlign = 'center';\r\n\tvar yAlign = 'center';\r\n\r\n\tif (model.y < size.height) {\r\n\t\tyAlign = 'top';\r\n\t} else if (model.y > (chart.height - size.height)) {\r\n\t\tyAlign = 'bottom';\r\n\t}\r\n\r\n\tvar lf, rf; // functions to determine left, right alignment\r\n\tvar olf, orf; // functions to determine if left/right alignment causes tooltip to go outside chart\r\n\tvar yf; // function to get the y alignment if the tooltip goes outside of the left or right edges\r\n\tvar midX = (chartArea.left + chartArea.right) / 2;\r\n\tvar midY = (chartArea.top + chartArea.bottom) / 2;\r\n\r\n\tif (yAlign === 'center') {\r\n\t\tlf = function(x) {\r\n\t\t\treturn x <= midX;\r\n\t\t};\r\n\t\trf = function(x) {\r\n\t\t\treturn x > midX;\r\n\t\t};\r\n\t} else {\r\n\t\tlf = function(x) {\r\n\t\t\treturn x <= (size.width / 2);\r\n\t\t};\r\n\t\trf = function(x) {\r\n\t\t\treturn x >= (chart.width - (size.width / 2));\r\n\t\t};\r\n\t}\r\n\r\n\tolf = function(x) {\r\n\t\treturn x + size.width + model.caretSize + model.caretPadding > chart.width;\r\n\t};\r\n\torf = function(x) {\r\n\t\treturn x - size.width - model.caretSize - model.caretPadding < 0;\r\n\t};\r\n\tyf = function(y) {\r\n\t\treturn y <= midY ? 'top' : 'bottom';\r\n\t};\r\n\r\n\tif (lf(model.x)) {\r\n\t\txAlign = 'left';\r\n\r\n\t\t// Is tooltip too wide and goes over the right side of the chart.?\r\n\t\tif (olf(model.x)) {\r\n\t\t\txAlign = 'center';\r\n\t\t\tyAlign = yf(model.y);\r\n\t\t}\r\n\t} else if (rf(model.x)) {\r\n\t\txAlign = 'right';\r\n\r\n\t\t// Is tooltip too wide and goes outside left edge of canvas?\r\n\t\tif (orf(model.x)) {\r\n\t\t\txAlign = 'center';\r\n\t\t\tyAlign = yf(model.y);\r\n\t\t}\r\n\t}\r\n\r\n\tvar opts = tooltip._options;\r\n\treturn {\r\n\t\txAlign: opts.xAlign ? opts.xAlign : xAlign,\r\n\t\tyAlign: opts.yAlign ? opts.yAlign : yAlign\r\n\t};\r\n}\r\n\r\n/**\r\n * Helper to get the location a tooltip needs to be placed at given the initial position (via the vm) and the size and alignment\r\n */\r\nfunction getBackgroundPoint(vm, size, alignment, chart) {\r\n\t// Background Position\r\n\tvar x = vm.x;\r\n\tvar y = vm.y;\r\n\r\n\tvar caretSize = vm.caretSize;\r\n\tvar caretPadding = vm.caretPadding;\r\n\tvar cornerRadius = vm.cornerRadius;\r\n\tvar xAlign = alignment.xAlign;\r\n\tvar yAlign = alignment.yAlign;\r\n\tvar paddingAndSize = caretSize + caretPadding;\r\n\tvar radiusAndPadding = cornerRadius + caretPadding;\r\n\r\n\tif (xAlign === 'right') {\r\n\t\tx -= size.width;\r\n\t} else if (xAlign === 'center') {\r\n\t\tx -= (size.width / 2);\r\n\t\tif (x + size.width > chart.width) {\r\n\t\t\tx = chart.width - size.width;\r\n\t\t}\r\n\t\tif (x < 0) {\r\n\t\t\tx = 0;\r\n\t\t}\r\n\t}\r\n\r\n\tif (yAlign === 'top') {\r\n\t\ty += paddingAndSize;\r\n\t} else if (yAlign === 'bottom') {\r\n\t\ty -= size.height + paddingAndSize;\r\n\t} else {\r\n\t\ty -= (size.height / 2);\r\n\t}\r\n\r\n\tif (yAlign === 'center') {\r\n\t\tif (xAlign === 'left') {\r\n\t\t\tx += paddingAndSize;\r\n\t\t} else if (xAlign === 'right') {\r\n\t\t\tx -= paddingAndSize;\r\n\t\t}\r\n\t} else if (xAlign === 'left') {\r\n\t\tx -= radiusAndPadding;\r\n\t} else if (xAlign === 'right') {\r\n\t\tx += radiusAndPadding;\r\n\t}\r\n\r\n\treturn {\r\n\t\tx: x,\r\n\t\ty: y\r\n\t};\r\n}\r\n\r\nfunction getAlignedX(vm, align) {\r\n\treturn align === 'center'\r\n\t\t? vm.x + vm.width / 2\r\n\t\t: align === 'right'\r\n\t\t\t? vm.x + vm.width - vm.xPadding\r\n\t\t\t: vm.x + vm.xPadding;\r\n}\r\n\r\n/**\r\n * Helper to build before and after body lines\r\n */\r\nfunction getBeforeAfterBodyLines(callback) {\r\n\treturn pushOrConcat([], splitNewlines(callback));\r\n}\r\n\r\nvar exports$4 = core_element.extend({\r\n\tinitialize: function() {\r\n\t\tthis._model = getBaseModel(this._options);\r\n\t\tthis._lastActive = [];\r\n\t},\r\n\r\n\t// Get the title\r\n\t// Args are: (tooltipItem, data)\r\n\tgetTitle: function() {\r\n\t\tvar me = this;\r\n\t\tvar opts = me._options;\r\n\t\tvar callbacks = opts.callbacks;\r\n\r\n\t\tvar beforeTitle = callbacks.beforeTitle.apply(me, arguments);\r\n\t\tvar title = callbacks.title.apply(me, arguments);\r\n\t\tvar afterTitle = callbacks.afterTitle.apply(me, arguments);\r\n\r\n\t\tvar lines = [];\r\n\t\tlines = pushOrConcat(lines, splitNewlines(beforeTitle));\r\n\t\tlines = pushOrConcat(lines, splitNewlines(title));\r\n\t\tlines = pushOrConcat(lines, splitNewlines(afterTitle));\r\n\r\n\t\treturn lines;\r\n\t},\r\n\r\n\t// Args are: (tooltipItem, data)\r\n\tgetBeforeBody: function() {\r\n\t\treturn getBeforeAfterBodyLines(this._options.callbacks.beforeBody.apply(this, arguments));\r\n\t},\r\n\r\n\t// Args are: (tooltipItem, data)\r\n\tgetBody: function(tooltipItems, data) {\r\n\t\tvar me = this;\r\n\t\tvar callbacks = me._options.callbacks;\r\n\t\tvar bodyItems = [];\r\n\r\n\t\thelpers$1.each(tooltipItems, function(tooltipItem) {\r\n\t\t\tvar bodyItem = {\r\n\t\t\t\tbefore: [],\r\n\t\t\t\tlines: [],\r\n\t\t\t\tafter: []\r\n\t\t\t};\r\n\t\t\tpushOrConcat(bodyItem.before, splitNewlines(callbacks.beforeLabel.call(me, tooltipItem, data)));\r\n\t\t\tpushOrConcat(bodyItem.lines, callbacks.label.call(me, tooltipItem, data));\r\n\t\t\tpushOrConcat(bodyItem.after, splitNewlines(callbacks.afterLabel.call(me, tooltipItem, data)));\r\n\r\n\t\t\tbodyItems.push(bodyItem);\r\n\t\t});\r\n\r\n\t\treturn bodyItems;\r\n\t},\r\n\r\n\t// Args are: (tooltipItem, data)\r\n\tgetAfterBody: function() {\r\n\t\treturn getBeforeAfterBodyLines(this._options.callbacks.afterBody.apply(this, arguments));\r\n\t},\r\n\r\n\t// Get the footer and beforeFooter and afterFooter lines\r\n\t// Args are: (tooltipItem, data)\r\n\tgetFooter: function() {\r\n\t\tvar me = this;\r\n\t\tvar callbacks = me._options.callbacks;\r\n\r\n\t\tvar beforeFooter = callbacks.beforeFooter.apply(me, arguments);\r\n\t\tvar footer = callbacks.footer.apply(me, arguments);\r\n\t\tvar afterFooter = callbacks.afterFooter.apply(me, arguments);\r\n\r\n\t\tvar lines = [];\r\n\t\tlines = pushOrConcat(lines, splitNewlines(beforeFooter));\r\n\t\tlines = pushOrConcat(lines, splitNewlines(footer));\r\n\t\tlines = pushOrConcat(lines, splitNewlines(afterFooter));\r\n\r\n\t\treturn lines;\r\n\t},\r\n\r\n\tupdate: function(changed) {\r\n\t\tvar me = this;\r\n\t\tvar opts = me._options;\r\n\r\n\t\t// Need to regenerate the model because its faster than using extend and it is necessary due to the optimization in Chart.Element.transition\r\n\t\t// that does _view = _model if ease === 1. This causes the 2nd tooltip update to set properties in both the view and model at the same time\r\n\t\t// which breaks any animations.\r\n\t\tvar existingModel = me._model;\r\n\t\tvar model = me._model = getBaseModel(opts);\r\n\t\tvar active = me._active;\r\n\r\n\t\tvar data = me._data;\r\n\r\n\t\t// In the case where active.length === 0 we need to keep these at existing values for good animations\r\n\t\tvar alignment = {\r\n\t\t\txAlign: existingModel.xAlign,\r\n\t\t\tyAlign: existingModel.yAlign\r\n\t\t};\r\n\t\tvar backgroundPoint = {\r\n\t\t\tx: existingModel.x,\r\n\t\t\ty: existingModel.y\r\n\t\t};\r\n\t\tvar tooltipSize = {\r\n\t\t\twidth: existingModel.width,\r\n\t\t\theight: existingModel.height\r\n\t\t};\r\n\t\tvar tooltipPosition = {\r\n\t\t\tx: existingModel.caretX,\r\n\t\t\ty: existingModel.caretY\r\n\t\t};\r\n\r\n\t\tvar i, len;\r\n\r\n\t\tif (active.length) {\r\n\t\t\tmodel.opacity = 1;\r\n\r\n\t\t\tvar labelColors = [];\r\n\t\t\tvar labelTextColors = [];\r\n\t\t\ttooltipPosition = positioners[opts.position].call(me, active, me._eventPosition);\r\n\r\n\t\t\tvar tooltipItems = [];\r\n\t\t\tfor (i = 0, len = active.length; i < len; ++i) {\r\n\t\t\t\ttooltipItems.push(createTooltipItem(active[i]));\r\n\t\t\t}\r\n\r\n\t\t\t// If the user provided a filter function, use it to modify the tooltip items\r\n\t\t\tif (opts.filter) {\r\n\t\t\t\ttooltipItems = tooltipItems.filter(function(a) {\r\n\t\t\t\t\treturn opts.filter(a, data);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\t// If the user provided a sorting function, use it to modify the tooltip items\r\n\t\t\tif (opts.itemSort) {\r\n\t\t\t\ttooltipItems = tooltipItems.sort(function(a, b) {\r\n\t\t\t\t\treturn opts.itemSort(a, b, data);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\t// Determine colors for boxes\r\n\t\t\thelpers$1.each(tooltipItems, function(tooltipItem) {\r\n\t\t\t\tlabelColors.push(opts.callbacks.labelColor.call(me, tooltipItem, me._chart));\r\n\t\t\t\tlabelTextColors.push(opts.callbacks.labelTextColor.call(me, tooltipItem, me._chart));\r\n\t\t\t});\r\n\r\n\r\n\t\t\t// Build the Text Lines\r\n\t\t\tmodel.title = me.getTitle(tooltipItems, data);\r\n\t\t\tmodel.beforeBody = me.getBeforeBody(tooltipItems, data);\r\n\t\t\tmodel.body = me.getBody(tooltipItems, data);\r\n\t\t\tmodel.afterBody = me.getAfterBody(tooltipItems, data);\r\n\t\t\tmodel.footer = me.getFooter(tooltipItems, data);\r\n\r\n\t\t\t// Initial positioning and colors\r\n\t\t\tmodel.x = tooltipPosition.x;\r\n\t\t\tmodel.y = tooltipPosition.y;\r\n\t\t\tmodel.caretPadding = opts.caretPadding;\r\n\t\t\tmodel.labelColors = labelColors;\r\n\t\t\tmodel.labelTextColors = labelTextColors;\r\n\r\n\t\t\t// data points\r\n\t\t\tmodel.dataPoints = tooltipItems;\r\n\r\n\t\t\t// We need to determine alignment of the tooltip\r\n\t\t\ttooltipSize = getTooltipSize(this, model);\r\n\t\t\talignment = determineAlignment(this, tooltipSize);\r\n\t\t\t// Final Size and Position\r\n\t\t\tbackgroundPoint = getBackgroundPoint(model, tooltipSize, alignment, me._chart);\r\n\t\t} else {\r\n\t\t\tmodel.opacity = 0;\r\n\t\t}\r\n\r\n\t\tmodel.xAlign = alignment.xAlign;\r\n\t\tmodel.yAlign = alignment.yAlign;\r\n\t\tmodel.x = backgroundPoint.x;\r\n\t\tmodel.y = backgroundPoint.y;\r\n\t\tmodel.width = tooltipSize.width;\r\n\t\tmodel.height = tooltipSize.height;\r\n\r\n\t\t// Point where the caret on the tooltip points to\r\n\t\tmodel.caretX = tooltipPosition.x;\r\n\t\tmodel.caretY = tooltipPosition.y;\r\n\r\n\t\tme._model = model;\r\n\r\n\t\tif (changed && opts.custom) {\r\n\t\t\topts.custom.call(me, model);\r\n\t\t}\r\n\r\n\t\treturn me;\r\n\t},\r\n\r\n\tdrawCaret: function(tooltipPoint, size) {\r\n\t\tvar ctx = this._chart.ctx;\r\n\t\tvar vm = this._view;\r\n\t\tvar caretPosition = this.getCaretPosition(tooltipPoint, size, vm);\r\n\r\n\t\tctx.lineTo(caretPosition.x1, caretPosition.y1);\r\n\t\tctx.lineTo(caretPosition.x2, caretPosition.y2);\r\n\t\tctx.lineTo(caretPosition.x3, caretPosition.y3);\r\n\t},\r\n\tgetCaretPosition: function(tooltipPoint, size, vm) {\r\n\t\tvar x1, x2, x3, y1, y2, y3;\r\n\t\tvar caretSize = vm.caretSize;\r\n\t\tvar cornerRadius = vm.cornerRadius;\r\n\t\tvar xAlign = vm.xAlign;\r\n\t\tvar yAlign = vm.yAlign;\r\n\t\tvar ptX = tooltipPoint.x;\r\n\t\tvar ptY = tooltipPoint.y;\r\n\t\tvar width = size.width;\r\n\t\tvar height = size.height;\r\n\r\n\t\tif (yAlign === 'center') {\r\n\t\t\ty2 = ptY + (height / 2);\r\n\r\n\t\t\tif (xAlign === 'left') {\r\n\t\t\t\tx1 = ptX;\r\n\t\t\t\tx2 = x1 - caretSize;\r\n\t\t\t\tx3 = x1;\r\n\r\n\t\t\t\ty1 = y2 + caretSize;\r\n\t\t\t\ty3 = y2 - caretSize;\r\n\t\t\t} else {\r\n\t\t\t\tx1 = ptX + width;\r\n\t\t\t\tx2 = x1 + caretSize;\r\n\t\t\t\tx3 = x1;\r\n\r\n\t\t\t\ty1 = y2 - caretSize;\r\n\t\t\t\ty3 = y2 + caretSize;\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tif (xAlign === 'left') {\r\n\t\t\t\tx2 = ptX + cornerRadius + (caretSize);\r\n\t\t\t\tx1 = x2 - caretSize;\r\n\t\t\t\tx3 = x2 + caretSize;\r\n\t\t\t} else if (xAlign === 'right') {\r\n\t\t\t\tx2 = ptX + width - cornerRadius - caretSize;\r\n\t\t\t\tx1 = x2 - caretSize;\r\n\t\t\t\tx3 = x2 + caretSize;\r\n\t\t\t} else {\r\n\t\t\t\tx2 = vm.caretX;\r\n\t\t\t\tx1 = x2 - caretSize;\r\n\t\t\t\tx3 = x2 + caretSize;\r\n\t\t\t}\r\n\t\t\tif (yAlign === 'top') {\r\n\t\t\t\ty1 = ptY;\r\n\t\t\t\ty2 = y1 - caretSize;\r\n\t\t\t\ty3 = y1;\r\n\t\t\t} else {\r\n\t\t\t\ty1 = ptY + height;\r\n\t\t\t\ty2 = y1 + caretSize;\r\n\t\t\t\ty3 = y1;\r\n\t\t\t\t// invert drawing order\r\n\t\t\t\tvar tmp = x3;\r\n\t\t\t\tx3 = x1;\r\n\t\t\t\tx1 = tmp;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn {x1: x1, x2: x2, x3: x3, y1: y1, y2: y2, y3: y3};\r\n\t},\r\n\r\n\tdrawTitle: function(pt, vm, ctx) {\r\n\t\tvar title = vm.title;\r\n\t\tvar length = title.length;\r\n\t\tvar titleFontSize, titleSpacing, i;\r\n\r\n\t\tif (length) {\r\n\t\t\tvar rtlHelper = getRtlHelper(vm.rtl, vm.x, vm.width);\r\n\r\n\t\t\tpt.x = getAlignedX(vm, vm._titleAlign);\r\n\r\n\t\t\tctx.textAlign = rtlHelper.textAlign(vm._titleAlign);\r\n\t\t\tctx.textBaseline = 'middle';\r\n\r\n\t\t\ttitleFontSize = vm.titleFontSize;\r\n\t\t\ttitleSpacing = vm.titleSpacing;\r\n\r\n\t\t\tctx.fillStyle = vm.titleFontColor;\r\n\t\t\tctx.font = helpers$1.fontString(titleFontSize, vm._titleFontStyle, vm._titleFontFamily);\r\n\r\n\t\t\tfor (i = 0; i < length; ++i) {\r\n\t\t\t\tctx.fillText(title[i], rtlHelper.x(pt.x), pt.y + titleFontSize / 2);\r\n\t\t\t\tpt.y += titleFontSize + titleSpacing; // Line Height and spacing\r\n\r\n\t\t\t\tif (i + 1 === length) {\r\n\t\t\t\t\tpt.y += vm.titleMarginBottom - titleSpacing; // If Last, add margin, remove spacing\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\tdrawBody: function(pt, vm, ctx) {\r\n\t\tvar bodyFontSize = vm.bodyFontSize;\r\n\t\tvar bodySpacing = vm.bodySpacing;\r\n\t\tvar bodyAlign = vm._bodyAlign;\r\n\t\tvar body = vm.body;\r\n\t\tvar drawColorBoxes = vm.displayColors;\r\n\t\tvar xLinePadding = 0;\r\n\t\tvar colorX = drawColorBoxes ? getAlignedX(vm, 'left') : 0;\r\n\r\n\t\tvar rtlHelper = getRtlHelper(vm.rtl, vm.x, vm.width);\r\n\r\n\t\tvar fillLineOfText = function(line) {\r\n\t\t\tctx.fillText(line, rtlHelper.x(pt.x + xLinePadding), pt.y + bodyFontSize / 2);\r\n\t\t\tpt.y += bodyFontSize + bodySpacing;\r\n\t\t};\r\n\r\n\t\tvar bodyItem, textColor, labelColors, lines, i, j, ilen, jlen;\r\n\t\tvar bodyAlignForCalculation = rtlHelper.textAlign(bodyAlign);\r\n\r\n\t\tctx.textAlign = bodyAlign;\r\n\t\tctx.textBaseline = 'middle';\r\n\t\tctx.font = helpers$1.fontString(bodyFontSize, vm._bodyFontStyle, vm._bodyFontFamily);\r\n\r\n\t\tpt.x = getAlignedX(vm, bodyAlignForCalculation);\r\n\r\n\t\t// Before body lines\r\n\t\tctx.fillStyle = vm.bodyFontColor;\r\n\t\thelpers$1.each(vm.beforeBody, fillLineOfText);\r\n\r\n\t\txLinePadding = drawColorBoxes && bodyAlignForCalculation !== 'right'\r\n\t\t\t? bodyAlign === 'center' ? (bodyFontSize / 2 + 1) : (bodyFontSize + 2)\r\n\t\t\t: 0;\r\n\r\n\t\t// Draw body lines now\r\n\t\tfor (i = 0, ilen = body.length; i < ilen; ++i) {\r\n\t\t\tbodyItem = body[i];\r\n\t\t\ttextColor = vm.labelTextColors[i];\r\n\t\t\tlabelColors = vm.labelColors[i];\r\n\r\n\t\t\tctx.fillStyle = textColor;\r\n\t\t\thelpers$1.each(bodyItem.before, fillLineOfText);\r\n\r\n\t\t\tlines = bodyItem.lines;\r\n\t\t\tfor (j = 0, jlen = lines.length; j < jlen; ++j) {\r\n\t\t\t\t// Draw Legend-like boxes if needed\r\n\t\t\t\tif (drawColorBoxes) {\r\n\t\t\t\t\tvar rtlColorX = rtlHelper.x(colorX);\r\n\r\n\t\t\t\t\t// Fill a white rect so that colours merge nicely if the opacity is < 1\r\n\t\t\t\t\tctx.fillStyle = vm.legendColorBackground;\r\n\t\t\t\t\tctx.fillRect(rtlHelper.leftForLtr(rtlColorX, bodyFontSize), pt.y, bodyFontSize, bodyFontSize);\r\n\r\n\t\t\t\t\t// Border\r\n\t\t\t\t\tctx.lineWidth = 1;\r\n\t\t\t\t\tctx.strokeStyle = labelColors.borderColor;\r\n\t\t\t\t\tctx.strokeRect(rtlHelper.leftForLtr(rtlColorX, bodyFontSize), pt.y, bodyFontSize, bodyFontSize);\r\n\r\n\t\t\t\t\t// Inner square\r\n\t\t\t\t\tctx.fillStyle = labelColors.backgroundColor;\r\n\t\t\t\t\tctx.fillRect(rtlHelper.leftForLtr(rtlHelper.xPlus(rtlColorX, 1), bodyFontSize - 2), pt.y + 1, bodyFontSize - 2, bodyFontSize - 2);\r\n\t\t\t\t\tctx.fillStyle = textColor;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tfillLineOfText(lines[j]);\r\n\t\t\t}\r\n\r\n\t\t\thelpers$1.each(bodyItem.after, fillLineOfText);\r\n\t\t}\r\n\r\n\t\t// Reset back to 0 for after body\r\n\t\txLinePadding = 0;\r\n\r\n\t\t// After body lines\r\n\t\thelpers$1.each(vm.afterBody, fillLineOfText);\r\n\t\tpt.y -= bodySpacing; // Remove last body spacing\r\n\t},\r\n\r\n\tdrawFooter: function(pt, vm, ctx) {\r\n\t\tvar footer = vm.footer;\r\n\t\tvar length = footer.length;\r\n\t\tvar footerFontSize, i;\r\n\r\n\t\tif (length) {\r\n\t\t\tvar rtlHelper = getRtlHelper(vm.rtl, vm.x, vm.width);\r\n\r\n\t\t\tpt.x = getAlignedX(vm, vm._footerAlign);\r\n\t\t\tpt.y += vm.footerMarginTop;\r\n\r\n\t\t\tctx.textAlign = rtlHelper.textAlign(vm._footerAlign);\r\n\t\t\tctx.textBaseline = 'middle';\r\n\r\n\t\t\tfooterFontSize = vm.footerFontSize;\r\n\r\n\t\t\tctx.fillStyle = vm.footerFontColor;\r\n\t\t\tctx.font = helpers$1.fontString(footerFontSize, vm._footerFontStyle, vm._footerFontFamily);\r\n\r\n\t\t\tfor (i = 0; i < length; ++i) {\r\n\t\t\t\tctx.fillText(footer[i], rtlHelper.x(pt.x), pt.y + footerFontSize / 2);\r\n\t\t\t\tpt.y += footerFontSize + vm.footerSpacing;\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\tdrawBackground: function(pt, vm, ctx, tooltipSize) {\r\n\t\tctx.fillStyle = vm.backgroundColor;\r\n\t\tctx.strokeStyle = vm.borderColor;\r\n\t\tctx.lineWidth = vm.borderWidth;\r\n\t\tvar xAlign = vm.xAlign;\r\n\t\tvar yAlign = vm.yAlign;\r\n\t\tvar x = pt.x;\r\n\t\tvar y = pt.y;\r\n\t\tvar width = tooltipSize.width;\r\n\t\tvar height = tooltipSize.height;\r\n\t\tvar radius = vm.cornerRadius;\r\n\r\n\t\tctx.beginPath();\r\n\t\tctx.moveTo(x + radius, y);\r\n\t\tif (yAlign === 'top') {\r\n\t\t\tthis.drawCaret(pt, tooltipSize);\r\n\t\t}\r\n\t\tctx.lineTo(x + width - radius, y);\r\n\t\tctx.quadraticCurveTo(x + width, y, x + width, y + radius);\r\n\t\tif (yAlign === 'center' && xAlign === 'right') {\r\n\t\t\tthis.drawCaret(pt, tooltipSize);\r\n\t\t}\r\n\t\tctx.lineTo(x + width, y + height - radius);\r\n\t\tctx.quadraticCurveTo(x + width, y + height, x + width - radius, y + height);\r\n\t\tif (yAlign === 'bottom') {\r\n\t\t\tthis.drawCaret(pt, tooltipSize);\r\n\t\t}\r\n\t\tctx.lineTo(x + radius, y + height);\r\n\t\tctx.quadraticCurveTo(x, y + height, x, y + height - radius);\r\n\t\tif (yAlign === 'center' && xAlign === 'left') {\r\n\t\t\tthis.drawCaret(pt, tooltipSize);\r\n\t\t}\r\n\t\tctx.lineTo(x, y + radius);\r\n\t\tctx.quadraticCurveTo(x, y, x + radius, y);\r\n\t\tctx.closePath();\r\n\r\n\t\tctx.fill();\r\n\r\n\t\tif (vm.borderWidth > 0) {\r\n\t\t\tctx.stroke();\r\n\t\t}\r\n\t},\r\n\r\n\tdraw: function() {\r\n\t\tvar ctx = this._chart.ctx;\r\n\t\tvar vm = this._view;\r\n\r\n\t\tif (vm.opacity === 0) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tvar tooltipSize = {\r\n\t\t\twidth: vm.width,\r\n\t\t\theight: vm.height\r\n\t\t};\r\n\t\tvar pt = {\r\n\t\t\tx: vm.x,\r\n\t\t\ty: vm.y\r\n\t\t};\r\n\r\n\t\t// IE11/Edge does not like very small opacities, so snap to 0\r\n\t\tvar opacity = Math.abs(vm.opacity < 1e-3) ? 0 : vm.opacity;\r\n\r\n\t\t// Truthy/falsey value for empty tooltip\r\n\t\tvar hasTooltipContent = vm.title.length || vm.beforeBody.length || vm.body.length || vm.afterBody.length || vm.footer.length;\r\n\r\n\t\tif (this._options.enabled && hasTooltipContent) {\r\n\t\t\tctx.save();\r\n\t\t\tctx.globalAlpha = opacity;\r\n\r\n\t\t\t// Draw Background\r\n\t\t\tthis.drawBackground(pt, vm, ctx, tooltipSize);\r\n\r\n\t\t\t// Draw Title, Body, and Footer\r\n\t\t\tpt.y += vm.yPadding;\r\n\r\n\t\t\thelpers$1.rtl.overrideTextDirection(ctx, vm.textDirection);\r\n\r\n\t\t\t// Titles\r\n\t\t\tthis.drawTitle(pt, vm, ctx);\r\n\r\n\t\t\t// Body\r\n\t\t\tthis.drawBody(pt, vm, ctx);\r\n\r\n\t\t\t// Footer\r\n\t\t\tthis.drawFooter(pt, vm, ctx);\r\n\r\n\t\t\thelpers$1.rtl.restoreTextDirection(ctx, vm.textDirection);\r\n\r\n\t\t\tctx.restore();\r\n\t\t}\r\n\t},\r\n\r\n\t/**\r\n\t * Handle an event\r\n\t * @private\r\n\t * @param {IEvent} event - The event to handle\r\n\t * @returns {boolean} true if the tooltip changed\r\n\t */\r\n\thandleEvent: function(e) {\r\n\t\tvar me = this;\r\n\t\tvar options = me._options;\r\n\t\tvar changed = false;\r\n\r\n\t\tme._lastActive = me._lastActive || [];\r\n\r\n\t\t// Find Active Elements for tooltips\r\n\t\tif (e.type === 'mouseout') {\r\n\t\t\tme._active = [];\r\n\t\t} else {\r\n\t\t\tme._active = me._chart.getElementsAtEventForMode(e, options.mode, options);\r\n\t\t\tif (options.reverse) {\r\n\t\t\t\tme._active.reverse();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// Remember Last Actives\r\n\t\tchanged = !helpers$1.arrayEquals(me._active, me._lastActive);\r\n\r\n\t\t// Only handle target event on tooltip change\r\n\t\tif (changed) {\r\n\t\t\tme._lastActive = me._active;\r\n\r\n\t\t\tif (options.enabled || options.custom) {\r\n\t\t\t\tme._eventPosition = {\r\n\t\t\t\t\tx: e.x,\r\n\t\t\t\t\ty: e.y\r\n\t\t\t\t};\r\n\r\n\t\t\t\tme.update(true);\r\n\t\t\t\tme.pivot();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn changed;\r\n\t}\r\n});\r\n\r\n/**\r\n * @namespace Chart.Tooltip.positioners\r\n */\r\nvar positioners_1 = positioners;\r\n\r\nvar core_tooltip = exports$4;\ncore_tooltip.positioners = positioners_1;\n\nvar valueOrDefault$9 = helpers$1.valueOrDefault;\r\n\r\ncore_defaults._set('global', {\r\n\telements: {},\r\n\tevents: [\r\n\t\t'mousemove',\r\n\t\t'mouseout',\r\n\t\t'click',\r\n\t\t'touchstart',\r\n\t\t'touchmove'\r\n\t],\r\n\thover: {\r\n\t\tonHover: null,\r\n\t\tmode: 'nearest',\r\n\t\tintersect: true,\r\n\t\tanimationDuration: 400\r\n\t},\r\n\tonClick: null,\r\n\tmaintainAspectRatio: true,\r\n\tresponsive: true,\r\n\tresponsiveAnimationDuration: 0\r\n});\r\n\r\n/**\r\n * Recursively merge the given config objects representing the `scales` option\r\n * by incorporating scale defaults in `xAxes` and `yAxes` array items, then\r\n * returns a deep copy of the result, thus doesn't alter inputs.\r\n */\r\nfunction mergeScaleConfig(/* config objects ... */) {\r\n\treturn helpers$1.merge(Object.create(null), [].slice.call(arguments), {\r\n\t\tmerger: function(key, target, source, options) {\r\n\t\t\tif (key === 'xAxes' || key === 'yAxes') {\r\n\t\t\t\tvar slen = source[key].length;\r\n\t\t\t\tvar i, type, scale;\r\n\r\n\t\t\t\tif (!target[key]) {\r\n\t\t\t\t\ttarget[key] = [];\r\n\t\t\t\t}\r\n\r\n\t\t\t\tfor (i = 0; i < slen; ++i) {\r\n\t\t\t\t\tscale = source[key][i];\r\n\t\t\t\t\ttype = valueOrDefault$9(scale.type, key === 'xAxes' ? 'category' : 'linear');\r\n\r\n\t\t\t\t\tif (i >= target[key].length) {\r\n\t\t\t\t\t\ttarget[key].push({});\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (!target[key][i].type || (scale.type && scale.type !== target[key][i].type)) {\r\n\t\t\t\t\t\t// new/untyped scale or type changed: let's apply the new defaults\r\n\t\t\t\t\t\t// then merge source scale to correctly overwrite the defaults.\r\n\t\t\t\t\t\thelpers$1.merge(target[key][i], [core_scaleService.getScaleDefaults(type), scale]);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\t// scales type are the same\r\n\t\t\t\t\t\thelpers$1.merge(target[key][i], scale);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\thelpers$1._merger(key, target, source, options);\r\n\t\t\t}\r\n\t\t}\r\n\t});\r\n}\r\n\r\n/**\r\n * Recursively merge the given config objects as the root options by handling\r\n * default scale options for the `scales` and `scale` properties, then returns\r\n * a deep copy of the result, thus doesn't alter inputs.\r\n */\r\nfunction mergeConfig(/* config objects ... */) {\r\n\treturn helpers$1.merge(Object.create(null), [].slice.call(arguments), {\r\n\t\tmerger: function(key, target, source, options) {\r\n\t\t\tvar tval = target[key] || Object.create(null);\r\n\t\t\tvar sval = source[key];\r\n\r\n\t\t\tif (key === 'scales') {\r\n\t\t\t\t// scale config merging is complex. Add our own function here for that\r\n\t\t\t\ttarget[key] = mergeScaleConfig(tval, sval);\r\n\t\t\t} else if (key === 'scale') {\r\n\t\t\t\t// used in polar area & radar charts since there is only one scale\r\n\t\t\t\ttarget[key] = helpers$1.merge(tval, [core_scaleService.getScaleDefaults(sval.type), sval]);\r\n\t\t\t} else {\r\n\t\t\t\thelpers$1._merger(key, target, source, options);\r\n\t\t\t}\r\n\t\t}\r\n\t});\r\n}\r\n\r\nfunction initConfig(config) {\r\n\tconfig = config || Object.create(null);\r\n\r\n\t// Do NOT use mergeConfig for the data object because this method merges arrays\r\n\t// and so would change references to labels and datasets, preventing data updates.\r\n\tvar data = config.data = config.data || {};\r\n\tdata.datasets = data.datasets || [];\r\n\tdata.labels = data.labels || [];\r\n\r\n\tconfig.options = mergeConfig(\r\n\t\tcore_defaults.global,\r\n\t\tcore_defaults[config.type],\r\n\t\tconfig.options || {});\r\n\r\n\treturn config;\r\n}\r\n\r\nfunction updateConfig(chart) {\r\n\tvar newOptions = chart.options;\r\n\r\n\thelpers$1.each(chart.scales, function(scale) {\r\n\t\tcore_layouts.removeBox(chart, scale);\r\n\t});\r\n\r\n\tnewOptions = mergeConfig(\r\n\t\tcore_defaults.global,\r\n\t\tcore_defaults[chart.config.type],\r\n\t\tnewOptions);\r\n\r\n\tchart.options = chart.config.options = newOptions;\r\n\tchart.ensureScalesHaveIDs();\r\n\tchart.buildOrUpdateScales();\r\n\r\n\t// Tooltip\r\n\tchart.tooltip._options = newOptions.tooltips;\r\n\tchart.tooltip.initialize();\r\n}\r\n\r\nfunction nextAvailableScaleId(axesOpts, prefix, index) {\r\n\tvar id;\r\n\tvar hasId = function(obj) {\r\n\t\treturn obj.id === id;\r\n\t};\r\n\r\n\tdo {\r\n\t\tid = prefix + index++;\r\n\t} while (helpers$1.findIndex(axesOpts, hasId) >= 0);\r\n\r\n\treturn id;\r\n}\r\n\r\nfunction positionIsHorizontal(position) {\r\n\treturn position === 'top' || position === 'bottom';\r\n}\r\n\r\nfunction compare2Level(l1, l2) {\r\n\treturn function(a, b) {\r\n\t\treturn a[l1] === b[l1]\r\n\t\t\t? a[l2] - b[l2]\r\n\t\t\t: a[l1] - b[l1];\r\n\t};\r\n}\r\n\r\nvar Chart = function(item, config) {\r\n\tthis.construct(item, config);\r\n\treturn this;\r\n};\r\n\r\nhelpers$1.extend(Chart.prototype, /** @lends Chart */ {\r\n\t/**\r\n\t * @private\r\n\t */\r\n\tconstruct: function(item, config) {\r\n\t\tvar me = this;\r\n\r\n\t\tconfig = initConfig(config);\r\n\r\n\t\tvar context = platform.acquireContext(item, config);\r\n\t\tvar canvas = context && context.canvas;\r\n\t\tvar height = canvas && canvas.height;\r\n\t\tvar width = canvas && canvas.width;\r\n\r\n\t\tme.id = helpers$1.uid();\r\n\t\tme.ctx = context;\r\n\t\tme.canvas = canvas;\r\n\t\tme.config = config;\r\n\t\tme.width = width;\r\n\t\tme.height = height;\r\n\t\tme.aspectRatio = height ? width / height : null;\r\n\t\tme.options = config.options;\r\n\t\tme._bufferedRender = false;\r\n\t\tme._layers = [];\r\n\r\n\t\t/**\r\n\t\t * Provided for backward compatibility, Chart and Chart.Controller have been merged,\r\n\t\t * the \"instance\" still need to be defined since it might be called from plugins.\r\n\t\t * @prop Chart#chart\r\n\t\t * @deprecated since version 2.6.0\r\n\t\t * @todo remove at version 3\r\n\t\t * @private\r\n\t\t */\r\n\t\tme.chart = me;\r\n\t\tme.controller = me; // chart.chart.controller #inception\r\n\r\n\t\t// Add the chart instance to the global namespace\r\n\t\tChart.instances[me.id] = me;\r\n\r\n\t\t// Define alias to the config data: `chart.data === chart.config.data`\r\n\t\tObject.defineProperty(me, 'data', {\r\n\t\t\tget: function() {\r\n\t\t\t\treturn me.config.data;\r\n\t\t\t},\r\n\t\t\tset: function(value) {\r\n\t\t\t\tme.config.data = value;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tif (!context || !canvas) {\r\n\t\t\t// The given item is not a compatible context2d element, let's return before finalizing\r\n\t\t\t// the chart initialization but after setting basic chart / controller properties that\r\n\t\t\t// can help to figure out that the chart is not valid (e.g chart.canvas !== null);\r\n\t\t\t// https://github.com/chartjs/Chart.js/issues/2807\r\n\t\t\tconsole.error(\"Failed to create chart: can't acquire context from the given item\");\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tme.initialize();\r\n\t\tme.update();\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\tinitialize: function() {\r\n\t\tvar me = this;\r\n\r\n\t\t// Before init plugin notification\r\n\t\tcore_plugins.notify(me, 'beforeInit');\r\n\r\n\t\thelpers$1.retinaScale(me, me.options.devicePixelRatio);\r\n\r\n\t\tme.bindEvents();\r\n\r\n\t\tif (me.options.responsive) {\r\n\t\t\t// Initial resize before chart draws (must be silent to preserve initial animations).\r\n\t\t\tme.resize(true);\r\n\t\t}\r\n\r\n\t\tme.initToolTip();\r\n\r\n\t\t// After init plugin notification\r\n\t\tcore_plugins.notify(me, 'afterInit');\r\n\r\n\t\treturn me;\r\n\t},\r\n\r\n\tclear: function() {\r\n\t\thelpers$1.canvas.clear(this);\r\n\t\treturn this;\r\n\t},\r\n\r\n\tstop: function() {\r\n\t\t// Stops any current animation loop occurring\r\n\t\tcore_animations.cancelAnimation(this);\r\n\t\treturn this;\r\n\t},\r\n\r\n\tresize: function(silent) {\r\n\t\tvar me = this;\r\n\t\tvar options = me.options;\r\n\t\tvar canvas = me.canvas;\r\n\t\tvar aspectRatio = (options.maintainAspectRatio && me.aspectRatio) || null;\r\n\r\n\t\t// the canvas render width and height will be casted to integers so make sure that\r\n\t\t// the canvas display style uses the same integer values to avoid blurring effect.\r\n\r\n\t\t// Set to 0 instead of canvas.size because the size defaults to 300x150 if the element is collapsed\r\n\t\tvar newWidth = Math.max(0, Math.floor(helpers$1.getMaximumWidth(canvas)));\r\n\t\tvar newHeight = Math.max(0, Math.floor(aspectRatio ? newWidth / aspectRatio : helpers$1.getMaximumHeight(canvas)));\r\n\r\n\t\tif (me.width === newWidth && me.height === newHeight) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tcanvas.width = me.width = newWidth;\r\n\t\tcanvas.height = me.height = newHeight;\r\n\t\tcanvas.style.width = newWidth + 'px';\r\n\t\tcanvas.style.height = newHeight + 'px';\r\n\r\n\t\thelpers$1.retinaScale(me, options.devicePixelRatio);\r\n\r\n\t\tif (!silent) {\r\n\t\t\t// Notify any plugins about the resize\r\n\t\t\tvar newSize = {width: newWidth, height: newHeight};\r\n\t\t\tcore_plugins.notify(me, 'resize', [newSize]);\r\n\r\n\t\t\t// Notify of resize\r\n\t\t\tif (options.onResize) {\r\n\t\t\t\toptions.onResize(me, newSize);\r\n\t\t\t}\r\n\r\n\t\t\tme.stop();\r\n\t\t\tme.update({\r\n\t\t\t\tduration: options.responsiveAnimationDuration\r\n\t\t\t});\r\n\t\t}\r\n\t},\r\n\r\n\tensureScalesHaveIDs: function() {\r\n\t\tvar options = this.options;\r\n\t\tvar scalesOptions = options.scales || {};\r\n\t\tvar scaleOptions = options.scale;\r\n\r\n\t\thelpers$1.each(scalesOptions.xAxes, function(xAxisOptions, index) {\r\n\t\t\tif (!xAxisOptions.id) {\r\n\t\t\t\txAxisOptions.id = nextAvailableScaleId(scalesOptions.xAxes, 'x-axis-', index);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\thelpers$1.each(scalesOptions.yAxes, function(yAxisOptions, index) {\r\n\t\t\tif (!yAxisOptions.id) {\r\n\t\t\t\tyAxisOptions.id = nextAvailableScaleId(scalesOptions.yAxes, 'y-axis-', index);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tif (scaleOptions) {\r\n\t\t\tscaleOptions.id = scaleOptions.id || 'scale';\r\n\t\t}\r\n\t},\r\n\r\n\t/**\r\n\t * Builds a map of scale ID to scale object for future lookup.\r\n\t */\r\n\tbuildOrUpdateScales: function() {\r\n\t\tvar me = this;\r\n\t\tvar options = me.options;\r\n\t\tvar scales = me.scales || {};\r\n\t\tvar items = [];\r\n\t\tvar updated = Object.keys(scales).reduce(function(obj, id) {\r\n\t\t\tobj[id] = false;\r\n\t\t\treturn obj;\r\n\t\t}, {});\r\n\r\n\t\tif (options.scales) {\r\n\t\t\titems = items.concat(\r\n\t\t\t\t(options.scales.xAxes || []).map(function(xAxisOptions) {\r\n\t\t\t\t\treturn {options: xAxisOptions, dtype: 'category', dposition: 'bottom'};\r\n\t\t\t\t}),\r\n\t\t\t\t(options.scales.yAxes || []).map(function(yAxisOptions) {\r\n\t\t\t\t\treturn {options: yAxisOptions, dtype: 'linear', dposition: 'left'};\r\n\t\t\t\t})\r\n\t\t\t);\r\n\t\t}\r\n\r\n\t\tif (options.scale) {\r\n\t\t\titems.push({\r\n\t\t\t\toptions: options.scale,\r\n\t\t\t\tdtype: 'radialLinear',\r\n\t\t\t\tisDefault: true,\r\n\t\t\t\tdposition: 'chartArea'\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\thelpers$1.each(items, function(item) {\r\n\t\t\tvar scaleOptions = item.options;\r\n\t\t\tvar id = scaleOptions.id;\r\n\t\t\tvar scaleType = valueOrDefault$9(scaleOptions.type, item.dtype);\r\n\r\n\t\t\tif (positionIsHorizontal(scaleOptions.position) !== positionIsHorizontal(item.dposition)) {\r\n\t\t\t\tscaleOptions.position = item.dposition;\r\n\t\t\t}\r\n\r\n\t\t\tupdated[id] = true;\r\n\t\t\tvar scale = null;\r\n\t\t\tif (id in scales && scales[id].type === scaleType) {\r\n\t\t\t\tscale = scales[id];\r\n\t\t\t\tscale.options = scaleOptions;\r\n\t\t\t\tscale.ctx = me.ctx;\r\n\t\t\t\tscale.chart = me;\r\n\t\t\t} else {\r\n\t\t\t\tvar scaleClass = core_scaleService.getScaleConstructor(scaleType);\r\n\t\t\t\tif (!scaleClass) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tscale = new scaleClass({\r\n\t\t\t\t\tid: id,\r\n\t\t\t\t\ttype: scaleType,\r\n\t\t\t\t\toptions: scaleOptions,\r\n\t\t\t\t\tctx: me.ctx,\r\n\t\t\t\t\tchart: me\r\n\t\t\t\t});\r\n\t\t\t\tscales[scale.id] = scale;\r\n\t\t\t}\r\n\r\n\t\t\tscale.mergeTicksOptions();\r\n\r\n\t\t\t// TODO(SB): I think we should be able to remove this custom case (options.scale)\r\n\t\t\t// and consider it as a regular scale part of the \"scales\"\" map only! This would\r\n\t\t\t// make the logic easier and remove some useless? custom code.\r\n\t\t\tif (item.isDefault) {\r\n\t\t\t\tme.scale = scale;\r\n\t\t\t}\r\n\t\t});\r\n\t\t// clear up discarded scales\r\n\t\thelpers$1.each(updated, function(hasUpdated, id) {\r\n\t\t\tif (!hasUpdated) {\r\n\t\t\t\tdelete scales[id];\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tme.scales = scales;\r\n\r\n\t\tcore_scaleService.addScalesToLayout(this);\r\n\t},\r\n\r\n\tbuildOrUpdateControllers: function() {\r\n\t\tvar me = this;\r\n\t\tvar newControllers = [];\r\n\t\tvar datasets = me.data.datasets;\r\n\t\tvar i, ilen;\r\n\r\n\t\tfor (i = 0, ilen = datasets.length; i < ilen; i++) {\r\n\t\t\tvar dataset = datasets[i];\r\n\t\t\tvar meta = me.getDatasetMeta(i);\r\n\t\t\tvar type = dataset.type || me.config.type;\r\n\r\n\t\t\tif (meta.type && meta.type !== type) {\r\n\t\t\t\tme.destroyDatasetMeta(i);\r\n\t\t\t\tmeta = me.getDatasetMeta(i);\r\n\t\t\t}\r\n\t\t\tmeta.type = type;\r\n\t\t\tmeta.order = dataset.order || 0;\r\n\t\t\tmeta.index = i;\r\n\r\n\t\t\tif (meta.controller) {\r\n\t\t\t\tmeta.controller.updateIndex(i);\r\n\t\t\t\tmeta.controller.linkScales();\r\n\t\t\t} else {\r\n\t\t\t\tvar ControllerClass = controllers[meta.type];\r\n\t\t\t\tif (ControllerClass === undefined) {\r\n\t\t\t\t\tthrow new Error('\"' + meta.type + '\" is not a chart type.');\r\n\t\t\t\t}\r\n\r\n\t\t\t\tmeta.controller = new ControllerClass(me, i);\r\n\t\t\t\tnewControllers.push(meta.controller);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn newControllers;\r\n\t},\r\n\r\n\t/**\r\n\t * Reset the elements of all datasets\r\n\t * @private\r\n\t */\r\n\tresetElements: function() {\r\n\t\tvar me = this;\r\n\t\thelpers$1.each(me.data.datasets, function(dataset, datasetIndex) {\r\n\t\t\tme.getDatasetMeta(datasetIndex).controller.reset();\r\n\t\t}, me);\r\n\t},\r\n\r\n\t/**\r\n\t* Resets the chart back to it's state before the initial animation\r\n\t*/\r\n\treset: function() {\r\n\t\tthis.resetElements();\r\n\t\tthis.tooltip.initialize();\r\n\t},\r\n\r\n\tupdate: function(config) {\r\n\t\tvar me = this;\r\n\t\tvar i, ilen;\r\n\r\n\t\tif (!config || typeof config !== 'object') {\r\n\t\t\t// backwards compatibility\r\n\t\t\tconfig = {\r\n\t\t\t\tduration: config,\r\n\t\t\t\tlazy: arguments[1]\r\n\t\t\t};\r\n\t\t}\r\n\r\n\t\tupdateConfig(me);\r\n\r\n\t\t// plugins options references might have change, let's invalidate the cache\r\n\t\t// https://github.com/chartjs/Chart.js/issues/5111#issuecomment-355934167\r\n\t\tcore_plugins._invalidate(me);\r\n\r\n\t\tif (core_plugins.notify(me, 'beforeUpdate') === false) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// In case the entire data object changed\r\n\t\tme.tooltip._data = me.data;\r\n\r\n\t\t// Make sure dataset controllers are updated and new controllers are reset\r\n\t\tvar newControllers = me.buildOrUpdateControllers();\r\n\r\n\t\t// Make sure all dataset controllers have correct meta data counts\r\n\t\tfor (i = 0, ilen = me.data.datasets.length; i < ilen; i++) {\r\n\t\t\tme.getDatasetMeta(i).controller.buildOrUpdateElements();\r\n\t\t}\r\n\r\n\t\tme.updateLayout();\r\n\r\n\t\t// Can only reset the new controllers after the scales have been updated\r\n\t\tif (me.options.animation && me.options.animation.duration) {\r\n\t\t\thelpers$1.each(newControllers, function(controller) {\r\n\t\t\t\tcontroller.reset();\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tme.updateDatasets();\r\n\r\n\t\t// Need to reset tooltip in case it is displayed with elements that are removed\r\n\t\t// after update.\r\n\t\tme.tooltip.initialize();\r\n\r\n\t\t// Last active contains items that were previously in the tooltip.\r\n\t\t// When we reset the tooltip, we need to clear it\r\n\t\tme.lastActive = [];\r\n\r\n\t\t// Do this before render so that any plugins that need final scale updates can use it\r\n\t\tcore_plugins.notify(me, 'afterUpdate');\r\n\r\n\t\tme._layers.sort(compare2Level('z', '_idx'));\r\n\r\n\t\tif (me._bufferedRender) {\r\n\t\t\tme._bufferedRequest = {\r\n\t\t\t\tduration: config.duration,\r\n\t\t\t\teasing: config.easing,\r\n\t\t\t\tlazy: config.lazy\r\n\t\t\t};\r\n\t\t} else {\r\n\t\t\tme.render(config);\r\n\t\t}\r\n\t},\r\n\r\n\t/**\r\n\t * Updates the chart layout unless a plugin returns `false` to the `beforeLayout`\r\n\t * hook, in which case, plugins will not be called on `afterLayout`.\r\n\t * @private\r\n\t */\r\n\tupdateLayout: function() {\r\n\t\tvar me = this;\r\n\r\n\t\tif (core_plugins.notify(me, 'beforeLayout') === false) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tcore_layouts.update(this, this.width, this.height);\r\n\r\n\t\tme._layers = [];\r\n\t\thelpers$1.each(me.boxes, function(box) {\r\n\t\t\t// _configure is called twice, once in core.scale.update and once here.\r\n\t\t\t// Here the boxes are fully updated and at their final positions.\r\n\t\t\tif (box._configure) {\r\n\t\t\t\tbox._configure();\r\n\t\t\t}\r\n\t\t\tme._layers.push.apply(me._layers, box._layers());\r\n\t\t}, me);\r\n\r\n\t\tme._layers.forEach(function(item, index) {\r\n\t\t\titem._idx = index;\r\n\t\t});\r\n\r\n\t\t/**\r\n\t\t * Provided for backward compatibility, use `afterLayout` instead.\r\n\t\t * @method IPlugin#afterScaleUpdate\r\n\t\t * @deprecated since version 2.5.0\r\n\t\t * @todo remove at version 3\r\n\t\t * @private\r\n\t\t */\r\n\t\tcore_plugins.notify(me, 'afterScaleUpdate');\r\n\t\tcore_plugins.notify(me, 'afterLayout');\r\n\t},\r\n\r\n\t/**\r\n\t * Updates all datasets unless a plugin returns `false` to the `beforeDatasetsUpdate`\r\n\t * hook, in which case, plugins will not be called on `afterDatasetsUpdate`.\r\n\t * @private\r\n\t */\r\n\tupdateDatasets: function() {\r\n\t\tvar me = this;\r\n\r\n\t\tif (core_plugins.notify(me, 'beforeDatasetsUpdate') === false) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tfor (var i = 0, ilen = me.data.datasets.length; i < ilen; ++i) {\r\n\t\t\tme.updateDataset(i);\r\n\t\t}\r\n\r\n\t\tcore_plugins.notify(me, 'afterDatasetsUpdate');\r\n\t},\r\n\r\n\t/**\r\n\t * Updates dataset at index unless a plugin returns `false` to the `beforeDatasetUpdate`\r\n\t * hook, in which case, plugins will not be called on `afterDatasetUpdate`.\r\n\t * @private\r\n\t */\r\n\tupdateDataset: function(index) {\r\n\t\tvar me = this;\r\n\t\tvar meta = me.getDatasetMeta(index);\r\n\t\tvar args = {\r\n\t\t\tmeta: meta,\r\n\t\t\tindex: index\r\n\t\t};\r\n\r\n\t\tif (core_plugins.notify(me, 'beforeDatasetUpdate', [args]) === false) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tmeta.controller._update();\r\n\r\n\t\tcore_plugins.notify(me, 'afterDatasetUpdate', [args]);\r\n\t},\r\n\r\n\trender: function(config) {\r\n\t\tvar me = this;\r\n\r\n\t\tif (!config || typeof config !== 'object') {\r\n\t\t\t// backwards compatibility\r\n\t\t\tconfig = {\r\n\t\t\t\tduration: config,\r\n\t\t\t\tlazy: arguments[1]\r\n\t\t\t};\r\n\t\t}\r\n\r\n\t\tvar animationOptions = me.options.animation;\r\n\t\tvar duration = valueOrDefault$9(config.duration, animationOptions && animationOptions.duration);\r\n\t\tvar lazy = config.lazy;\r\n\r\n\t\tif (core_plugins.notify(me, 'beforeRender') === false) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tvar onComplete = function(animation) {\r\n\t\t\tcore_plugins.notify(me, 'afterRender');\r\n\t\t\thelpers$1.callback(animationOptions && animationOptions.onComplete, [animation], me);\r\n\t\t};\r\n\r\n\t\tif (animationOptions && duration) {\r\n\t\t\tvar animation = new core_animation({\r\n\t\t\t\tnumSteps: duration / 16.66, // 60 fps\r\n\t\t\t\teasing: config.easing || animationOptions.easing,\r\n\r\n\t\t\t\trender: function(chart, animationObject) {\r\n\t\t\t\t\tvar easingFunction = helpers$1.easing.effects[animationObject.easing];\r\n\t\t\t\t\tvar currentStep = animationObject.currentStep;\r\n\t\t\t\t\tvar stepDecimal = currentStep / animationObject.numSteps;\r\n\r\n\t\t\t\t\tchart.draw(easingFunction(stepDecimal), stepDecimal, currentStep);\r\n\t\t\t\t},\r\n\r\n\t\t\t\tonAnimationProgress: animationOptions.onProgress,\r\n\t\t\t\tonAnimationComplete: onComplete\r\n\t\t\t});\r\n\r\n\t\t\tcore_animations.addAnimation(me, animation, duration, lazy);\r\n\t\t} else {\r\n\t\t\tme.draw();\r\n\r\n\t\t\t// See https://github.com/chartjs/Chart.js/issues/3781\r\n\t\t\tonComplete(new core_animation({numSteps: 0, chart: me}));\r\n\t\t}\r\n\r\n\t\treturn me;\r\n\t},\r\n\r\n\tdraw: function(easingValue) {\r\n\t\tvar me = this;\r\n\t\tvar i, layers;\r\n\r\n\t\tme.clear();\r\n\r\n\t\tif (helpers$1.isNullOrUndef(easingValue)) {\r\n\t\t\teasingValue = 1;\r\n\t\t}\r\n\r\n\t\tme.transition(easingValue);\r\n\r\n\t\tif (me.width <= 0 || me.height <= 0) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (core_plugins.notify(me, 'beforeDraw', [easingValue]) === false) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Because of plugin hooks (before/afterDatasetsDraw), datasets can't\r\n\t\t// currently be part of layers. Instead, we draw\r\n\t\t// layers <= 0 before(default, backward compat), and the rest after\r\n\t\tlayers = me._layers;\r\n\t\tfor (i = 0; i < layers.length && layers[i].z <= 0; ++i) {\r\n\t\t\tlayers[i].draw(me.chartArea);\r\n\t\t}\r\n\r\n\t\tme.drawDatasets(easingValue);\r\n\r\n\t\t// Rest of layers\r\n\t\tfor (; i < layers.length; ++i) {\r\n\t\t\tlayers[i].draw(me.chartArea);\r\n\t\t}\r\n\r\n\t\tme._drawTooltip(easingValue);\r\n\r\n\t\tcore_plugins.notify(me, 'afterDraw', [easingValue]);\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\ttransition: function(easingValue) {\r\n\t\tvar me = this;\r\n\r\n\t\tfor (var i = 0, ilen = (me.data.datasets || []).length; i < ilen; ++i) {\r\n\t\t\tif (me.isDatasetVisible(i)) {\r\n\t\t\t\tme.getDatasetMeta(i).controller.transition(easingValue);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tme.tooltip.transition(easingValue);\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_getSortedDatasetMetas: function(filterVisible) {\r\n\t\tvar me = this;\r\n\t\tvar datasets = me.data.datasets || [];\r\n\t\tvar result = [];\r\n\t\tvar i, ilen;\r\n\r\n\t\tfor (i = 0, ilen = datasets.length; i < ilen; ++i) {\r\n\t\t\tif (!filterVisible || me.isDatasetVisible(i)) {\r\n\t\t\t\tresult.push(me.getDatasetMeta(i));\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tresult.sort(compare2Level('order', 'index'));\r\n\r\n\t\treturn result;\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_getSortedVisibleDatasetMetas: function() {\r\n\t\treturn this._getSortedDatasetMetas(true);\r\n\t},\r\n\r\n\t/**\r\n\t * Draws all datasets unless a plugin returns `false` to the `beforeDatasetsDraw`\r\n\t * hook, in which case, plugins will not be called on `afterDatasetsDraw`.\r\n\t * @private\r\n\t */\r\n\tdrawDatasets: function(easingValue) {\r\n\t\tvar me = this;\r\n\t\tvar metasets, i;\r\n\r\n\t\tif (core_plugins.notify(me, 'beforeDatasetsDraw', [easingValue]) === false) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tmetasets = me._getSortedVisibleDatasetMetas();\r\n\t\tfor (i = metasets.length - 1; i >= 0; --i) {\r\n\t\t\tme.drawDataset(metasets[i], easingValue);\r\n\t\t}\r\n\r\n\t\tcore_plugins.notify(me, 'afterDatasetsDraw', [easingValue]);\r\n\t},\r\n\r\n\t/**\r\n\t * Draws dataset at index unless a plugin returns `false` to the `beforeDatasetDraw`\r\n\t * hook, in which case, plugins will not be called on `afterDatasetDraw`.\r\n\t * @private\r\n\t */\r\n\tdrawDataset: function(meta, easingValue) {\r\n\t\tvar me = this;\r\n\t\tvar args = {\r\n\t\t\tmeta: meta,\r\n\t\t\tindex: meta.index,\r\n\t\t\teasingValue: easingValue\r\n\t\t};\r\n\r\n\t\tif (core_plugins.notify(me, 'beforeDatasetDraw', [args]) === false) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tmeta.controller.draw(easingValue);\r\n\r\n\t\tcore_plugins.notify(me, 'afterDatasetDraw', [args]);\r\n\t},\r\n\r\n\t/**\r\n\t * Draws tooltip unless a plugin returns `false` to the `beforeTooltipDraw`\r\n\t * hook, in which case, plugins will not be called on `afterTooltipDraw`.\r\n\t * @private\r\n\t */\r\n\t_drawTooltip: function(easingValue) {\r\n\t\tvar me = this;\r\n\t\tvar tooltip = me.tooltip;\r\n\t\tvar args = {\r\n\t\t\ttooltip: tooltip,\r\n\t\t\teasingValue: easingValue\r\n\t\t};\r\n\r\n\t\tif (core_plugins.notify(me, 'beforeTooltipDraw', [args]) === false) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\ttooltip.draw();\r\n\r\n\t\tcore_plugins.notify(me, 'afterTooltipDraw', [args]);\r\n\t},\r\n\r\n\t/**\r\n\t * Get the single element that was clicked on\r\n\t * @return An object containing the dataset index and element index of the matching element. Also contains the rectangle that was draw\r\n\t */\r\n\tgetElementAtEvent: function(e) {\r\n\t\treturn core_interaction.modes.single(this, e);\r\n\t},\r\n\r\n\tgetElementsAtEvent: function(e) {\r\n\t\treturn core_interaction.modes.label(this, e, {intersect: true});\r\n\t},\r\n\r\n\tgetElementsAtXAxis: function(e) {\r\n\t\treturn core_interaction.modes['x-axis'](this, e, {intersect: true});\r\n\t},\r\n\r\n\tgetElementsAtEventForMode: function(e, mode, options) {\r\n\t\tvar method = core_interaction.modes[mode];\r\n\t\tif (typeof method === 'function') {\r\n\t\t\treturn method(this, e, options);\r\n\t\t}\r\n\r\n\t\treturn [];\r\n\t},\r\n\r\n\tgetDatasetAtEvent: function(e) {\r\n\t\treturn core_interaction.modes.dataset(this, e, {intersect: true});\r\n\t},\r\n\r\n\tgetDatasetMeta: function(datasetIndex) {\r\n\t\tvar me = this;\r\n\t\tvar dataset = me.data.datasets[datasetIndex];\r\n\t\tif (!dataset._meta) {\r\n\t\t\tdataset._meta = {};\r\n\t\t}\r\n\r\n\t\tvar meta = dataset._meta[me.id];\r\n\t\tif (!meta) {\r\n\t\t\tmeta = dataset._meta[me.id] = {\r\n\t\t\t\ttype: null,\r\n\t\t\t\tdata: [],\r\n\t\t\t\tdataset: null,\r\n\t\t\t\tcontroller: null,\r\n\t\t\t\thidden: null,\t\t\t// See isDatasetVisible() comment\r\n\t\t\t\txAxisID: null,\r\n\t\t\t\tyAxisID: null,\r\n\t\t\t\torder: dataset.order || 0,\r\n\t\t\t\tindex: datasetIndex\r\n\t\t\t};\r\n\t\t}\r\n\r\n\t\treturn meta;\r\n\t},\r\n\r\n\tgetVisibleDatasetCount: function() {\r\n\t\tvar count = 0;\r\n\t\tfor (var i = 0, ilen = this.data.datasets.length; i < ilen; ++i) {\r\n\t\t\tif (this.isDatasetVisible(i)) {\r\n\t\t\t\tcount++;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn count;\r\n\t},\r\n\r\n\tisDatasetVisible: function(datasetIndex) {\r\n\t\tvar meta = this.getDatasetMeta(datasetIndex);\r\n\r\n\t\t// meta.hidden is a per chart dataset hidden flag override with 3 states: if true or false,\r\n\t\t// the dataset.hidden value is ignored, else if null, the dataset hidden state is returned.\r\n\t\treturn typeof meta.hidden === 'boolean' ? !meta.hidden : !this.data.datasets[datasetIndex].hidden;\r\n\t},\r\n\r\n\tgenerateLegend: function() {\r\n\t\treturn this.options.legendCallback(this);\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\tdestroyDatasetMeta: function(datasetIndex) {\r\n\t\tvar id = this.id;\r\n\t\tvar dataset = this.data.datasets[datasetIndex];\r\n\t\tvar meta = dataset._meta && dataset._meta[id];\r\n\r\n\t\tif (meta) {\r\n\t\t\tmeta.controller.destroy();\r\n\t\t\tdelete dataset._meta[id];\r\n\t\t}\r\n\t},\r\n\r\n\tdestroy: function() {\r\n\t\tvar me = this;\r\n\t\tvar canvas = me.canvas;\r\n\t\tvar i, ilen;\r\n\r\n\t\tme.stop();\r\n\r\n\t\t// dataset controllers need to cleanup associated data\r\n\t\tfor (i = 0, ilen = me.data.datasets.length; i < ilen; ++i) {\r\n\t\t\tme.destroyDatasetMeta(i);\r\n\t\t}\r\n\r\n\t\tif (canvas) {\r\n\t\t\tme.unbindEvents();\r\n\t\t\thelpers$1.canvas.clear(me);\r\n\t\t\tplatform.releaseContext(me.ctx);\r\n\t\t\tme.canvas = null;\r\n\t\t\tme.ctx = null;\r\n\t\t}\r\n\r\n\t\tcore_plugins.notify(me, 'destroy');\r\n\r\n\t\tdelete Chart.instances[me.id];\r\n\t},\r\n\r\n\ttoBase64Image: function() {\r\n\t\treturn this.canvas.toDataURL.apply(this.canvas, arguments);\r\n\t},\r\n\r\n\tinitToolTip: function() {\r\n\t\tvar me = this;\r\n\t\tme.tooltip = new core_tooltip({\r\n\t\t\t_chart: me,\r\n\t\t\t_chartInstance: me, // deprecated, backward compatibility\r\n\t\t\t_data: me.data,\r\n\t\t\t_options: me.options.tooltips\r\n\t\t}, me);\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\tbindEvents: function() {\r\n\t\tvar me = this;\r\n\t\tvar listeners = me._listeners = {};\r\n\t\tvar listener = function() {\r\n\t\t\tme.eventHandler.apply(me, arguments);\r\n\t\t};\r\n\r\n\t\thelpers$1.each(me.options.events, function(type) {\r\n\t\t\tplatform.addEventListener(me, type, listener);\r\n\t\t\tlisteners[type] = listener;\r\n\t\t});\r\n\r\n\t\t// Elements used to detect size change should not be injected for non responsive charts.\r\n\t\t// See https://github.com/chartjs/Chart.js/issues/2210\r\n\t\tif (me.options.responsive) {\r\n\t\t\tlistener = function() {\r\n\t\t\t\tme.resize();\r\n\t\t\t};\r\n\r\n\t\t\tplatform.addEventListener(me, 'resize', listener);\r\n\t\t\tlisteners.resize = listener;\r\n\t\t}\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\tunbindEvents: function() {\r\n\t\tvar me = this;\r\n\t\tvar listeners = me._listeners;\r\n\t\tif (!listeners) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tdelete me._listeners;\r\n\t\thelpers$1.each(listeners, function(listener, type) {\r\n\t\t\tplatform.removeEventListener(me, type, listener);\r\n\t\t});\r\n\t},\r\n\r\n\tupdateHoverStyle: function(elements, mode, enabled) {\r\n\t\tvar prefix = enabled ? 'set' : 'remove';\r\n\t\tvar element, i, ilen;\r\n\r\n\t\tfor (i = 0, ilen = elements.length; i < ilen; ++i) {\r\n\t\t\telement = elements[i];\r\n\t\t\tif (element) {\r\n\t\t\t\tthis.getDatasetMeta(element._datasetIndex).controller[prefix + 'HoverStyle'](element);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (mode === 'dataset') {\r\n\t\t\tthis.getDatasetMeta(elements[0]._datasetIndex).controller['_' + prefix + 'DatasetHoverStyle']();\r\n\t\t}\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\teventHandler: function(e) {\r\n\t\tvar me = this;\r\n\t\tvar tooltip = me.tooltip;\r\n\r\n\t\tif (core_plugins.notify(me, 'beforeEvent', [e]) === false) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Buffer any update calls so that renders do not occur\r\n\t\tme._bufferedRender = true;\r\n\t\tme._bufferedRequest = null;\r\n\r\n\t\tvar changed = me.handleEvent(e);\r\n\t\t// for smooth tooltip animations issue #4989\r\n\t\t// the tooltip should be the source of change\r\n\t\t// Animation check workaround:\r\n\t\t// tooltip._start will be null when tooltip isn't animating\r\n\t\tif (tooltip) {\r\n\t\t\tchanged = tooltip._start\r\n\t\t\t\t? tooltip.handleEvent(e)\r\n\t\t\t\t: changed | tooltip.handleEvent(e);\r\n\t\t}\r\n\r\n\t\tcore_plugins.notify(me, 'afterEvent', [e]);\r\n\r\n\t\tvar bufferedRequest = me._bufferedRequest;\r\n\t\tif (bufferedRequest) {\r\n\t\t\t// If we have an update that was triggered, we need to do a normal render\r\n\t\t\tme.render(bufferedRequest);\r\n\t\t} else if (changed && !me.animating) {\r\n\t\t\t// If entering, leaving, or changing elements, animate the change via pivot\r\n\t\t\tme.stop();\r\n\r\n\t\t\t// We only need to render at this point. Updating will cause scales to be\r\n\t\t\t// recomputed generating flicker & using more memory than necessary.\r\n\t\t\tme.render({\r\n\t\t\t\tduration: me.options.hover.animationDuration,\r\n\t\t\t\tlazy: true\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tme._bufferedRender = false;\r\n\t\tme._bufferedRequest = null;\r\n\r\n\t\treturn me;\r\n\t},\r\n\r\n\t/**\r\n\t * Handle an event\r\n\t * @private\r\n\t * @param {IEvent} event the event to handle\r\n\t * @return {boolean} true if the chart needs to re-render\r\n\t */\r\n\thandleEvent: function(e) {\r\n\t\tvar me = this;\r\n\t\tvar options = me.options || {};\r\n\t\tvar hoverOptions = options.hover;\r\n\t\tvar changed = false;\r\n\r\n\t\tme.lastActive = me.lastActive || [];\r\n\r\n\t\t// Find Active Elements for hover and tooltips\r\n\t\tif (e.type === 'mouseout') {\r\n\t\t\tme.active = [];\r\n\t\t} else {\r\n\t\t\tme.active = me.getElementsAtEventForMode(e, hoverOptions.mode, hoverOptions);\r\n\t\t}\r\n\r\n\t\t// Invoke onHover hook\r\n\t\t// Need to call with native event here to not break backwards compatibility\r\n\t\thelpers$1.callback(options.onHover || options.hover.onHover, [e.native, me.active], me);\r\n\r\n\t\tif (e.type === 'mouseup' || e.type === 'click') {\r\n\t\t\tif (options.onClick) {\r\n\t\t\t\t// Use e.native here for backwards compatibility\r\n\t\t\t\toptions.onClick.call(me, e.native, me.active);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// Remove styling for last active (even if it may still be active)\r\n\t\tif (me.lastActive.length) {\r\n\t\t\tme.updateHoverStyle(me.lastActive, hoverOptions.mode, false);\r\n\t\t}\r\n\r\n\t\t// Built in hover styling\r\n\t\tif (me.active.length && hoverOptions.mode) {\r\n\t\t\tme.updateHoverStyle(me.active, hoverOptions.mode, true);\r\n\t\t}\r\n\r\n\t\tchanged = !helpers$1.arrayEquals(me.active, me.lastActive);\r\n\r\n\t\t// Remember Last Actives\r\n\t\tme.lastActive = me.active;\r\n\r\n\t\treturn changed;\r\n\t}\r\n});\r\n\r\n/**\r\n * NOTE(SB) We actually don't use this container anymore but we need to keep it\r\n * for backward compatibility. Though, it can still be useful for plugins that\r\n * would need to work on multiple charts?!\r\n */\r\nChart.instances = {};\r\n\r\nvar core_controller = Chart;\r\n\r\n// DEPRECATIONS\r\n\r\n/**\r\n * Provided for backward compatibility, use Chart instead.\r\n * @class Chart.Controller\r\n * @deprecated since version 2.6\r\n * @todo remove at version 3\r\n * @private\r\n */\r\nChart.Controller = Chart;\r\n\r\n/**\r\n * Provided for backward compatibility, not available anymore.\r\n * @namespace Chart\r\n * @deprecated since version 2.8\r\n * @todo remove at version 3\r\n * @private\r\n */\r\nChart.types = {};\r\n\r\n/**\r\n * Provided for backward compatibility, not available anymore.\r\n * @namespace Chart.helpers.configMerge\r\n * @deprecated since version 2.8.0\r\n * @todo remove at version 3\r\n * @private\r\n */\r\nhelpers$1.configMerge = mergeConfig;\r\n\r\n/**\r\n * Provided for backward compatibility, not available anymore.\r\n * @namespace Chart.helpers.scaleMerge\r\n * @deprecated since version 2.8.0\r\n * @todo remove at version 3\r\n * @private\r\n */\r\nhelpers$1.scaleMerge = mergeScaleConfig;\n\nvar core_helpers = function() {\r\n\r\n\t// -- Basic js utility methods\r\n\r\n\thelpers$1.where = function(collection, filterCallback) {\r\n\t\tif (helpers$1.isArray(collection) && Array.prototype.filter) {\r\n\t\t\treturn collection.filter(filterCallback);\r\n\t\t}\r\n\t\tvar filtered = [];\r\n\r\n\t\thelpers$1.each(collection, function(item) {\r\n\t\t\tif (filterCallback(item)) {\r\n\t\t\t\tfiltered.push(item);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn filtered;\r\n\t};\r\n\thelpers$1.findIndex = Array.prototype.findIndex ?\r\n\t\tfunction(array, callback, scope) {\r\n\t\t\treturn array.findIndex(callback, scope);\r\n\t\t} :\r\n\t\tfunction(array, callback, scope) {\r\n\t\t\tscope = scope === undefined ? array : scope;\r\n\t\t\tfor (var i = 0, ilen = array.length; i < ilen; ++i) {\r\n\t\t\t\tif (callback.call(scope, array[i], i, array)) {\r\n\t\t\t\t\treturn i;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn -1;\r\n\t\t};\r\n\thelpers$1.findNextWhere = function(arrayToSearch, filterCallback, startIndex) {\r\n\t\t// Default to start of the array\r\n\t\tif (helpers$1.isNullOrUndef(startIndex)) {\r\n\t\t\tstartIndex = -1;\r\n\t\t}\r\n\t\tfor (var i = startIndex + 1; i < arrayToSearch.length; i++) {\r\n\t\t\tvar currentItem = arrayToSearch[i];\r\n\t\t\tif (filterCallback(currentItem)) {\r\n\t\t\t\treturn currentItem;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\thelpers$1.findPreviousWhere = function(arrayToSearch, filterCallback, startIndex) {\r\n\t\t// Default to end of the array\r\n\t\tif (helpers$1.isNullOrUndef(startIndex)) {\r\n\t\t\tstartIndex = arrayToSearch.length;\r\n\t\t}\r\n\t\tfor (var i = startIndex - 1; i >= 0; i--) {\r\n\t\t\tvar currentItem = arrayToSearch[i];\r\n\t\t\tif (filterCallback(currentItem)) {\r\n\t\t\t\treturn currentItem;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t// -- Math methods\r\n\thelpers$1.isNumber = function(n) {\r\n\t\treturn !isNaN(parseFloat(n)) && isFinite(n);\r\n\t};\r\n\thelpers$1.almostEquals = function(x, y, epsilon) {\r\n\t\treturn Math.abs(x - y) < epsilon;\r\n\t};\r\n\thelpers$1.almostWhole = function(x, epsilon) {\r\n\t\tvar rounded = Math.round(x);\r\n\t\treturn ((rounded - epsilon) <= x) && ((rounded + epsilon) >= x);\r\n\t};\r\n\thelpers$1.max = function(array) {\r\n\t\treturn array.reduce(function(max, value) {\r\n\t\t\tif (!isNaN(value)) {\r\n\t\t\t\treturn Math.max(max, value);\r\n\t\t\t}\r\n\t\t\treturn max;\r\n\t\t}, Number.NEGATIVE_INFINITY);\r\n\t};\r\n\thelpers$1.min = function(array) {\r\n\t\treturn array.reduce(function(min, value) {\r\n\t\t\tif (!isNaN(value)) {\r\n\t\t\t\treturn Math.min(min, value);\r\n\t\t\t}\r\n\t\t\treturn min;\r\n\t\t}, Number.POSITIVE_INFINITY);\r\n\t};\r\n\thelpers$1.sign = Math.sign ?\r\n\t\tfunction(x) {\r\n\t\t\treturn Math.sign(x);\r\n\t\t} :\r\n\t\tfunction(x) {\r\n\t\t\tx = +x; // convert to a number\r\n\t\t\tif (x === 0 || isNaN(x)) {\r\n\t\t\t\treturn x;\r\n\t\t\t}\r\n\t\t\treturn x > 0 ? 1 : -1;\r\n\t\t};\r\n\thelpers$1.toRadians = function(degrees) {\r\n\t\treturn degrees * (Math.PI / 180);\r\n\t};\r\n\thelpers$1.toDegrees = function(radians) {\r\n\t\treturn radians * (180 / Math.PI);\r\n\t};\r\n\r\n\t/**\r\n\t * Returns the number of decimal places\r\n\t * i.e. the number of digits after the decimal point, of the value of this Number.\r\n\t * @param {number} x - A number.\r\n\t * @returns {number} The number of decimal places.\r\n\t * @private\r\n\t */\r\n\thelpers$1._decimalPlaces = function(x) {\r\n\t\tif (!helpers$1.isFinite(x)) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tvar e = 1;\r\n\t\tvar p = 0;\r\n\t\twhile (Math.round(x * e) / e !== x) {\r\n\t\t\te *= 10;\r\n\t\t\tp++;\r\n\t\t}\r\n\t\treturn p;\r\n\t};\r\n\r\n\t// Gets the angle from vertical upright to the point about a centre.\r\n\thelpers$1.getAngleFromPoint = function(centrePoint, anglePoint) {\r\n\t\tvar distanceFromXCenter = anglePoint.x - centrePoint.x;\r\n\t\tvar distanceFromYCenter = anglePoint.y - centrePoint.y;\r\n\t\tvar radialDistanceFromCenter = Math.sqrt(distanceFromXCenter * distanceFromXCenter + distanceFromYCenter * distanceFromYCenter);\r\n\r\n\t\tvar angle = Math.atan2(distanceFromYCenter, distanceFromXCenter);\r\n\r\n\t\tif (angle < (-0.5 * Math.PI)) {\r\n\t\t\tangle += 2.0 * Math.PI; // make sure the returned angle is in the range of (-PI/2, 3PI/2]\r\n\t\t}\r\n\r\n\t\treturn {\r\n\t\t\tangle: angle,\r\n\t\t\tdistance: radialDistanceFromCenter\r\n\t\t};\r\n\t};\r\n\thelpers$1.distanceBetweenPoints = function(pt1, pt2) {\r\n\t\treturn Math.sqrt(Math.pow(pt2.x - pt1.x, 2) + Math.pow(pt2.y - pt1.y, 2));\r\n\t};\r\n\r\n\t/**\r\n\t * Provided for backward compatibility, not available anymore\r\n\t * @function Chart.helpers.aliasPixel\r\n\t * @deprecated since version 2.8.0\r\n\t * @todo remove at version 3\r\n\t */\r\n\thelpers$1.aliasPixel = function(pixelWidth) {\r\n\t\treturn (pixelWidth % 2 === 0) ? 0 : 0.5;\r\n\t};\r\n\r\n\t/**\r\n\t * Returns the aligned pixel value to avoid anti-aliasing blur\r\n\t * @param {Chart} chart - The chart instance.\r\n\t * @param {number} pixel - A pixel value.\r\n\t * @param {number} width - The width of the element.\r\n\t * @returns {number} The aligned pixel value.\r\n\t * @private\r\n\t */\r\n\thelpers$1._alignPixel = function(chart, pixel, width) {\r\n\t\tvar devicePixelRatio = chart.currentDevicePixelRatio;\r\n\t\tvar halfWidth = width / 2;\r\n\t\treturn Math.round((pixel - halfWidth) * devicePixelRatio) / devicePixelRatio + halfWidth;\r\n\t};\r\n\r\n\thelpers$1.splineCurve = function(firstPoint, middlePoint, afterPoint, t) {\r\n\t\t// Props to Rob Spencer at scaled innovation for his post on splining between points\r\n\t\t// http://scaledinnovation.com/analytics/splines/aboutSplines.html\r\n\r\n\t\t// This function must also respect \"skipped\" points\r\n\r\n\t\tvar previous = firstPoint.skip ? middlePoint : firstPoint;\r\n\t\tvar current = middlePoint;\r\n\t\tvar next = afterPoint.skip ? middlePoint : afterPoint;\r\n\r\n\t\tvar d01 = Math.sqrt(Math.pow(current.x - previous.x, 2) + Math.pow(current.y - previous.y, 2));\r\n\t\tvar d12 = Math.sqrt(Math.pow(next.x - current.x, 2) + Math.pow(next.y - current.y, 2));\r\n\r\n\t\tvar s01 = d01 / (d01 + d12);\r\n\t\tvar s12 = d12 / (d01 + d12);\r\n\r\n\t\t// If all points are the same, s01 & s02 will be inf\r\n\t\ts01 = isNaN(s01) ? 0 : s01;\r\n\t\ts12 = isNaN(s12) ? 0 : s12;\r\n\r\n\t\tvar fa = t * s01; // scaling factor for triangle Ta\r\n\t\tvar fb = t * s12;\r\n\r\n\t\treturn {\r\n\t\t\tprevious: {\r\n\t\t\t\tx: current.x - fa * (next.x - previous.x),\r\n\t\t\t\ty: current.y - fa * (next.y - previous.y)\r\n\t\t\t},\r\n\t\t\tnext: {\r\n\t\t\t\tx: current.x + fb * (next.x - previous.x),\r\n\t\t\t\ty: current.y + fb * (next.y - previous.y)\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\thelpers$1.EPSILON = Number.EPSILON || 1e-14;\r\n\thelpers$1.splineCurveMonotone = function(points) {\r\n\t\t// This function calculates Bézier control points in a similar way than |splineCurve|,\r\n\t\t// but preserves monotonicity of the provided data and ensures no local extremums are added\r\n\t\t// between the dataset discrete points due to the interpolation.\r\n\t\t// See : https://en.wikipedia.org/wiki/Monotone_cubic_interpolation\r\n\r\n\t\tvar pointsWithTangents = (points || []).map(function(point) {\r\n\t\t\treturn {\r\n\t\t\t\tmodel: point._model,\r\n\t\t\t\tdeltaK: 0,\r\n\t\t\t\tmK: 0\r\n\t\t\t};\r\n\t\t});\r\n\r\n\t\t// Calculate slopes (deltaK) and initialize tangents (mK)\r\n\t\tvar pointsLen = pointsWithTangents.length;\r\n\t\tvar i, pointBefore, pointCurrent, pointAfter;\r\n\t\tfor (i = 0; i < pointsLen; ++i) {\r\n\t\t\tpointCurrent = pointsWithTangents[i];\r\n\t\t\tif (pointCurrent.model.skip) {\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\tpointBefore = i > 0 ? pointsWithTangents[i - 1] : null;\r\n\t\t\tpointAfter = i < pointsLen - 1 ? pointsWithTangents[i + 1] : null;\r\n\t\t\tif (pointAfter && !pointAfter.model.skip) {\r\n\t\t\t\tvar slopeDeltaX = (pointAfter.model.x - pointCurrent.model.x);\r\n\r\n\t\t\t\t// In the case of two points that appear at the same x pixel, slopeDeltaX is 0\r\n\t\t\t\tpointCurrent.deltaK = slopeDeltaX !== 0 ? (pointAfter.model.y - pointCurrent.model.y) / slopeDeltaX : 0;\r\n\t\t\t}\r\n\r\n\t\t\tif (!pointBefore || pointBefore.model.skip) {\r\n\t\t\t\tpointCurrent.mK = pointCurrent.deltaK;\r\n\t\t\t} else if (!pointAfter || pointAfter.model.skip) {\r\n\t\t\t\tpointCurrent.mK = pointBefore.deltaK;\r\n\t\t\t} else if (this.sign(pointBefore.deltaK) !== this.sign(pointCurrent.deltaK)) {\r\n\t\t\t\tpointCurrent.mK = 0;\r\n\t\t\t} else {\r\n\t\t\t\tpointCurrent.mK = (pointBefore.deltaK + pointCurrent.deltaK) / 2;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// Adjust tangents to ensure monotonic properties\r\n\t\tvar alphaK, betaK, tauK, squaredMagnitude;\r\n\t\tfor (i = 0; i < pointsLen - 1; ++i) {\r\n\t\t\tpointCurrent = pointsWithTangents[i];\r\n\t\t\tpointAfter = pointsWithTangents[i + 1];\r\n\t\t\tif (pointCurrent.model.skip || pointAfter.model.skip) {\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\tif (helpers$1.almostEquals(pointCurrent.deltaK, 0, this.EPSILON)) {\r\n\t\t\t\tpointCurrent.mK = pointAfter.mK = 0;\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\talphaK = pointCurrent.mK / pointCurrent.deltaK;\r\n\t\t\tbetaK = pointAfter.mK / pointCurrent.deltaK;\r\n\t\t\tsquaredMagnitude = Math.pow(alphaK, 2) + Math.pow(betaK, 2);\r\n\t\t\tif (squaredMagnitude <= 9) {\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\ttauK = 3 / Math.sqrt(squaredMagnitude);\r\n\t\t\tpointCurrent.mK = alphaK * tauK * pointCurrent.deltaK;\r\n\t\t\tpointAfter.mK = betaK * tauK * pointCurrent.deltaK;\r\n\t\t}\r\n\r\n\t\t// Compute control points\r\n\t\tvar deltaX;\r\n\t\tfor (i = 0; i < pointsLen; ++i) {\r\n\t\t\tpointCurrent = pointsWithTangents[i];\r\n\t\t\tif (pointCurrent.model.skip) {\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\tpointBefore = i > 0 ? pointsWithTangents[i - 1] : null;\r\n\t\t\tpointAfter = i < pointsLen - 1 ? pointsWithTangents[i + 1] : null;\r\n\t\t\tif (pointBefore && !pointBefore.model.skip) {\r\n\t\t\t\tdeltaX = (pointCurrent.model.x - pointBefore.model.x) / 3;\r\n\t\t\t\tpointCurrent.model.controlPointPreviousX = pointCurrent.model.x - deltaX;\r\n\t\t\t\tpointCurrent.model.controlPointPreviousY = pointCurrent.model.y - deltaX * pointCurrent.mK;\r\n\t\t\t}\r\n\t\t\tif (pointAfter && !pointAfter.model.skip) {\r\n\t\t\t\tdeltaX = (pointAfter.model.x - pointCurrent.model.x) / 3;\r\n\t\t\t\tpointCurrent.model.controlPointNextX = pointCurrent.model.x + deltaX;\r\n\t\t\t\tpointCurrent.model.controlPointNextY = pointCurrent.model.y + deltaX * pointCurrent.mK;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\thelpers$1.nextItem = function(collection, index, loop) {\r\n\t\tif (loop) {\r\n\t\t\treturn index >= collection.length - 1 ? collection[0] : collection[index + 1];\r\n\t\t}\r\n\t\treturn index >= collection.length - 1 ? collection[collection.length - 1] : collection[index + 1];\r\n\t};\r\n\thelpers$1.previousItem = function(collection, index, loop) {\r\n\t\tif (loop) {\r\n\t\t\treturn index <= 0 ? collection[collection.length - 1] : collection[index - 1];\r\n\t\t}\r\n\t\treturn index <= 0 ? collection[0] : collection[index - 1];\r\n\t};\r\n\t// Implementation of the nice number algorithm used in determining where axis labels will go\r\n\thelpers$1.niceNum = function(range, round) {\r\n\t\tvar exponent = Math.floor(helpers$1.log10(range));\r\n\t\tvar fraction = range / Math.pow(10, exponent);\r\n\t\tvar niceFraction;\r\n\r\n\t\tif (round) {\r\n\t\t\tif (fraction < 1.5) {\r\n\t\t\t\tniceFraction = 1;\r\n\t\t\t} else if (fraction < 3) {\r\n\t\t\t\tniceFraction = 2;\r\n\t\t\t} else if (fraction < 7) {\r\n\t\t\t\tniceFraction = 5;\r\n\t\t\t} else {\r\n\t\t\t\tniceFraction = 10;\r\n\t\t\t}\r\n\t\t} else if (fraction <= 1.0) {\r\n\t\t\tniceFraction = 1;\r\n\t\t} else if (fraction <= 2) {\r\n\t\t\tniceFraction = 2;\r\n\t\t} else if (fraction <= 5) {\r\n\t\t\tniceFraction = 5;\r\n\t\t} else {\r\n\t\t\tniceFraction = 10;\r\n\t\t}\r\n\r\n\t\treturn niceFraction * Math.pow(10, exponent);\r\n\t};\r\n\t// Request animation polyfill - https://www.paulirish.com/2011/requestanimationframe-for-smart-animating/\r\n\thelpers$1.requestAnimFrame = (function() {\r\n\t\tif (typeof window === 'undefined') {\r\n\t\t\treturn function(callback) {\r\n\t\t\t\tcallback();\r\n\t\t\t};\r\n\t\t}\r\n\t\treturn window.requestAnimationFrame ||\r\n\t\t\twindow.webkitRequestAnimationFrame ||\r\n\t\t\twindow.mozRequestAnimationFrame ||\r\n\t\t\twindow.oRequestAnimationFrame ||\r\n\t\t\twindow.msRequestAnimationFrame ||\r\n\t\t\tfunction(callback) {\r\n\t\t\t\treturn window.setTimeout(callback, 1000 / 60);\r\n\t\t\t};\r\n\t}());\r\n\t// -- DOM methods\r\n\thelpers$1.getRelativePosition = function(evt, chart) {\r\n\t\tvar mouseX, mouseY;\r\n\t\tvar e = evt.originalEvent || evt;\r\n\t\tvar canvas = evt.target || evt.srcElement;\r\n\t\tvar boundingRect = canvas.getBoundingClientRect();\r\n\r\n\t\tvar touches = e.touches;\r\n\t\tif (touches && touches.length > 0) {\r\n\t\t\tmouseX = touches[0].clientX;\r\n\t\t\tmouseY = touches[0].clientY;\r\n\r\n\t\t} else {\r\n\t\t\tmouseX = e.clientX;\r\n\t\t\tmouseY = e.clientY;\r\n\t\t}\r\n\r\n\t\t// Scale mouse coordinates into canvas coordinates\r\n\t\t// by following the pattern laid out by 'jerryj' in the comments of\r\n\t\t// https://www.html5canvastutorials.com/advanced/html5-canvas-mouse-coordinates/\r\n\t\tvar paddingLeft = parseFloat(helpers$1.getStyle(canvas, 'padding-left'));\r\n\t\tvar paddingTop = parseFloat(helpers$1.getStyle(canvas, 'padding-top'));\r\n\t\tvar paddingRight = parseFloat(helpers$1.getStyle(canvas, 'padding-right'));\r\n\t\tvar paddingBottom = parseFloat(helpers$1.getStyle(canvas, 'padding-bottom'));\r\n\t\tvar width = boundingRect.right - boundingRect.left - paddingLeft - paddingRight;\r\n\t\tvar height = boundingRect.bottom - boundingRect.top - paddingTop - paddingBottom;\r\n\r\n\t\t// We divide by the current device pixel ratio, because the canvas is scaled up by that amount in each direction. However\r\n\t\t// the backend model is in unscaled coordinates. Since we are going to deal with our model coordinates, we go back here\r\n\t\tmouseX = Math.round((mouseX - boundingRect.left - paddingLeft) / (width) * canvas.width / chart.currentDevicePixelRatio);\r\n\t\tmouseY = Math.round((mouseY - boundingRect.top - paddingTop) / (height) * canvas.height / chart.currentDevicePixelRatio);\r\n\r\n\t\treturn {\r\n\t\t\tx: mouseX,\r\n\t\t\ty: mouseY\r\n\t\t};\r\n\r\n\t};\r\n\r\n\t// Private helper function to convert max-width/max-height values that may be percentages into a number\r\n\tfunction parseMaxStyle(styleValue, node, parentProperty) {\r\n\t\tvar valueInPixels;\r\n\t\tif (typeof styleValue === 'string') {\r\n\t\t\tvalueInPixels = parseInt(styleValue, 10);\r\n\r\n\t\t\tif (styleValue.indexOf('%') !== -1) {\r\n\t\t\t\t// percentage * size in dimension\r\n\t\t\t\tvalueInPixels = valueInPixels / 100 * node.parentNode[parentProperty];\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tvalueInPixels = styleValue;\r\n\t\t}\r\n\r\n\t\treturn valueInPixels;\r\n\t}\r\n\r\n\t/**\r\n\t * Returns if the given value contains an effective constraint.\r\n\t * @private\r\n\t */\r\n\tfunction isConstrainedValue(value) {\r\n\t\treturn value !== undefined && value !== null && value !== 'none';\r\n\t}\r\n\r\n\t/**\r\n\t * Returns the max width or height of the given DOM node in a cross-browser compatible fashion\r\n\t * @param {HTMLElement} domNode - the node to check the constraint on\r\n\t * @param {string} maxStyle - the style that defines the maximum for the direction we are using ('max-width' / 'max-height')\r\n\t * @param {string} percentageProperty - property of parent to use when calculating width as a percentage\r\n\t * @see {@link https://www.nathanaeljones.com/blog/2013/reading-max-width-cross-browser}\r\n\t */\r\n\tfunction getConstraintDimension(domNode, maxStyle, percentageProperty) {\r\n\t\tvar view = document.defaultView;\r\n\t\tvar parentNode = helpers$1._getParentNode(domNode);\r\n\t\tvar constrainedNode = view.getComputedStyle(domNode)[maxStyle];\r\n\t\tvar constrainedContainer = view.getComputedStyle(parentNode)[maxStyle];\r\n\t\tvar hasCNode = isConstrainedValue(constrainedNode);\r\n\t\tvar hasCContainer = isConstrainedValue(constrainedContainer);\r\n\t\tvar infinity = Number.POSITIVE_INFINITY;\r\n\r\n\t\tif (hasCNode || hasCContainer) {\r\n\t\t\treturn Math.min(\r\n\t\t\t\thasCNode ? parseMaxStyle(constrainedNode, domNode, percentageProperty) : infinity,\r\n\t\t\t\thasCContainer ? parseMaxStyle(constrainedContainer, parentNode, percentageProperty) : infinity);\r\n\t\t}\r\n\r\n\t\treturn 'none';\r\n\t}\r\n\t// returns Number or undefined if no constraint\r\n\thelpers$1.getConstraintWidth = function(domNode) {\r\n\t\treturn getConstraintDimension(domNode, 'max-width', 'clientWidth');\r\n\t};\r\n\t// returns Number or undefined if no constraint\r\n\thelpers$1.getConstraintHeight = function(domNode) {\r\n\t\treturn getConstraintDimension(domNode, 'max-height', 'clientHeight');\r\n\t};\r\n\t/**\r\n\t * @private\r\n \t */\r\n\thelpers$1._calculatePadding = function(container, padding, parentDimension) {\r\n\t\tpadding = helpers$1.getStyle(container, padding);\r\n\r\n\t\treturn padding.indexOf('%') > -1 ? parentDimension * parseInt(padding, 10) / 100 : parseInt(padding, 10);\r\n\t};\r\n\t/**\r\n\t * @private\r\n\t */\r\n\thelpers$1._getParentNode = function(domNode) {\r\n\t\tvar parent = domNode.parentNode;\r\n\t\tif (parent && parent.toString() === '[object ShadowRoot]') {\r\n\t\t\tparent = parent.host;\r\n\t\t}\r\n\t\treturn parent;\r\n\t};\r\n\thelpers$1.getMaximumWidth = function(domNode) {\r\n\t\tvar container = helpers$1._getParentNode(domNode);\r\n\t\tif (!container) {\r\n\t\t\treturn domNode.clientWidth;\r\n\t\t}\r\n\r\n\t\tvar clientWidth = container.clientWidth;\r\n\t\tvar paddingLeft = helpers$1._calculatePadding(container, 'padding-left', clientWidth);\r\n\t\tvar paddingRight = helpers$1._calculatePadding(container, 'padding-right', clientWidth);\r\n\r\n\t\tvar w = clientWidth - paddingLeft - paddingRight;\r\n\t\tvar cw = helpers$1.getConstraintWidth(domNode);\r\n\t\treturn isNaN(cw) ? w : Math.min(w, cw);\r\n\t};\r\n\thelpers$1.getMaximumHeight = function(domNode) {\r\n\t\tvar container = helpers$1._getParentNode(domNode);\r\n\t\tif (!container) {\r\n\t\t\treturn domNode.clientHeight;\r\n\t\t}\r\n\r\n\t\tvar clientHeight = container.clientHeight;\r\n\t\tvar paddingTop = helpers$1._calculatePadding(container, 'padding-top', clientHeight);\r\n\t\tvar paddingBottom = helpers$1._calculatePadding(container, 'padding-bottom', clientHeight);\r\n\r\n\t\tvar h = clientHeight - paddingTop - paddingBottom;\r\n\t\tvar ch = helpers$1.getConstraintHeight(domNode);\r\n\t\treturn isNaN(ch) ? h : Math.min(h, ch);\r\n\t};\r\n\thelpers$1.getStyle = function(el, property) {\r\n\t\treturn el.currentStyle ?\r\n\t\t\tel.currentStyle[property] :\r\n\t\t\tdocument.defaultView.getComputedStyle(el, null).getPropertyValue(property);\r\n\t};\r\n\thelpers$1.retinaScale = function(chart, forceRatio) {\r\n\t\tvar pixelRatio = chart.currentDevicePixelRatio = forceRatio || (typeof window !== 'undefined' && window.devicePixelRatio) || 1;\r\n\t\tif (pixelRatio === 1) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tvar canvas = chart.canvas;\r\n\t\tvar height = chart.height;\r\n\t\tvar width = chart.width;\r\n\r\n\t\tcanvas.height = height * pixelRatio;\r\n\t\tcanvas.width = width * pixelRatio;\r\n\t\tchart.ctx.scale(pixelRatio, pixelRatio);\r\n\r\n\t\t// If no style has been set on the canvas, the render size is used as display size,\r\n\t\t// making the chart visually bigger, so let's enforce it to the \"correct\" values.\r\n\t\t// See https://github.com/chartjs/Chart.js/issues/3575\r\n\t\tif (!canvas.style.height && !canvas.style.width) {\r\n\t\t\tcanvas.style.height = height + 'px';\r\n\t\t\tcanvas.style.width = width + 'px';\r\n\t\t}\r\n\t};\r\n\t// -- Canvas methods\r\n\thelpers$1.fontString = function(pixelSize, fontStyle, fontFamily) {\r\n\t\treturn fontStyle + ' ' + pixelSize + 'px ' + fontFamily;\r\n\t};\r\n\thelpers$1.longestText = function(ctx, font, arrayOfThings, cache) {\r\n\t\tcache = cache || {};\r\n\t\tvar data = cache.data = cache.data || {};\r\n\t\tvar gc = cache.garbageCollect = cache.garbageCollect || [];\r\n\r\n\t\tif (cache.font !== font) {\r\n\t\t\tdata = cache.data = {};\r\n\t\t\tgc = cache.garbageCollect = [];\r\n\t\t\tcache.font = font;\r\n\t\t}\r\n\r\n\t\tctx.font = font;\r\n\t\tvar longest = 0;\r\n\t\tvar ilen = arrayOfThings.length;\r\n\t\tvar i, j, jlen, thing, nestedThing;\r\n\t\tfor (i = 0; i < ilen; i++) {\r\n\t\t\tthing = arrayOfThings[i];\r\n\r\n\t\t\t// Undefined strings and arrays should not be measured\r\n\t\t\tif (thing !== undefined && thing !== null && helpers$1.isArray(thing) !== true) {\r\n\t\t\t\tlongest = helpers$1.measureText(ctx, data, gc, longest, thing);\r\n\t\t\t} else if (helpers$1.isArray(thing)) {\r\n\t\t\t\t// if it is an array lets measure each element\r\n\t\t\t\t// to do maybe simplify this function a bit so we can do this more recursively?\r\n\t\t\t\tfor (j = 0, jlen = thing.length; j < jlen; j++) {\r\n\t\t\t\t\tnestedThing = thing[j];\r\n\t\t\t\t\t// Undefined strings and arrays should not be measured\r\n\t\t\t\t\tif (nestedThing !== undefined && nestedThing !== null && !helpers$1.isArray(nestedThing)) {\r\n\t\t\t\t\t\tlongest = helpers$1.measureText(ctx, data, gc, longest, nestedThing);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tvar gcLen = gc.length / 2;\r\n\t\tif (gcLen > arrayOfThings.length) {\r\n\t\t\tfor (i = 0; i < gcLen; i++) {\r\n\t\t\t\tdelete data[gc[i]];\r\n\t\t\t}\r\n\t\t\tgc.splice(0, gcLen);\r\n\t\t}\r\n\t\treturn longest;\r\n\t};\r\n\thelpers$1.measureText = function(ctx, data, gc, longest, string) {\r\n\t\tvar textWidth = data[string];\r\n\t\tif (!textWidth) {\r\n\t\t\ttextWidth = data[string] = ctx.measureText(string).width;\r\n\t\t\tgc.push(string);\r\n\t\t}\r\n\t\tif (textWidth > longest) {\r\n\t\t\tlongest = textWidth;\r\n\t\t}\r\n\t\treturn longest;\r\n\t};\r\n\r\n\t/**\r\n\t * @deprecated\r\n\t */\r\n\thelpers$1.numberOfLabelLines = function(arrayOfThings) {\r\n\t\tvar numberOfLines = 1;\r\n\t\thelpers$1.each(arrayOfThings, function(thing) {\r\n\t\t\tif (helpers$1.isArray(thing)) {\r\n\t\t\t\tif (thing.length > numberOfLines) {\r\n\t\t\t\t\tnumberOfLines = thing.length;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\t\treturn numberOfLines;\r\n\t};\r\n\r\n\thelpers$1.color = !chartjsColor ?\r\n\t\tfunction(value) {\r\n\t\t\tconsole.error('Color.js not found!');\r\n\t\t\treturn value;\r\n\t\t} :\r\n\t\tfunction(value) {\r\n\t\t\t/* global CanvasGradient */\r\n\t\t\tif (value instanceof CanvasGradient) {\r\n\t\t\t\tvalue = core_defaults.global.defaultColor;\r\n\t\t\t}\r\n\r\n\t\t\treturn chartjsColor(value);\r\n\t\t};\r\n\r\n\thelpers$1.getHoverColor = function(colorValue) {\r\n\t\t/* global CanvasPattern */\r\n\t\treturn (colorValue instanceof CanvasPattern || colorValue instanceof CanvasGradient) ?\r\n\t\t\tcolorValue :\r\n\t\t\thelpers$1.color(colorValue).saturate(0.5).darken(0.1).rgbString();\r\n\t};\r\n};\n\nfunction abstract() {\r\n\tthrow new Error(\r\n\t\t'This method is not implemented: either no adapter can ' +\r\n\t\t'be found or an incomplete integration was provided.'\r\n\t);\r\n}\r\n\r\n/**\r\n * Date adapter (current used by the time scale)\r\n * @namespace Chart._adapters._date\r\n * @memberof Chart._adapters\r\n * @private\r\n */\r\n\r\n/**\r\n * Currently supported unit string values.\r\n * @typedef {('millisecond'|'second'|'minute'|'hour'|'day'|'week'|'month'|'quarter'|'year')}\r\n * @memberof Chart._adapters._date\r\n * @name Unit\r\n */\r\n\r\n/**\r\n * @class\r\n */\r\nfunction DateAdapter(options) {\r\n\tthis.options = options || {};\r\n}\r\n\r\nhelpers$1.extend(DateAdapter.prototype, /** @lends DateAdapter */ {\r\n\t/**\r\n\t * Returns a map of time formats for the supported formatting units defined\r\n\t * in Unit as well as 'datetime' representing a detailed date/time string.\r\n\t * @returns {{string: string}}\r\n\t */\r\n\tformats: abstract,\r\n\r\n\t/**\r\n\t * Parses the given `value` and return the associated timestamp.\r\n\t * @param {any} value - the value to parse (usually comes from the data)\r\n\t * @param {string} [format] - the expected data format\r\n\t * @returns {(number|null)}\r\n\t * @function\r\n\t */\r\n\tparse: abstract,\r\n\r\n\t/**\r\n\t * Returns the formatted date in the specified `format` for a given `timestamp`.\r\n\t * @param {number} timestamp - the timestamp to format\r\n\t * @param {string} format - the date/time token\r\n\t * @return {string}\r\n\t * @function\r\n\t */\r\n\tformat: abstract,\r\n\r\n\t/**\r\n\t * Adds the specified `amount` of `unit` to the given `timestamp`.\r\n\t * @param {number} timestamp - the input timestamp\r\n\t * @param {number} amount - the amount to add\r\n\t * @param {Unit} unit - the unit as string\r\n\t * @return {number}\r\n\t * @function\r\n\t */\r\n\tadd: abstract,\r\n\r\n\t/**\r\n\t * Returns the number of `unit` between the given timestamps.\r\n\t * @param {number} max - the input timestamp (reference)\r\n\t * @param {number} min - the timestamp to substract\r\n\t * @param {Unit} unit - the unit as string\r\n\t * @return {number}\r\n\t * @function\r\n\t */\r\n\tdiff: abstract,\r\n\r\n\t/**\r\n\t * Returns start of `unit` for the given `timestamp`.\r\n\t * @param {number} timestamp - the input timestamp\r\n\t * @param {Unit} unit - the unit as string\r\n\t * @param {number} [weekday] - the ISO day of the week with 1 being Monday\r\n\t * and 7 being Sunday (only needed if param *unit* is `isoWeek`).\r\n\t * @function\r\n\t */\r\n\tstartOf: abstract,\r\n\r\n\t/**\r\n\t * Returns end of `unit` for the given `timestamp`.\r\n\t * @param {number} timestamp - the input timestamp\r\n\t * @param {Unit} unit - the unit as string\r\n\t * @function\r\n\t */\r\n\tendOf: abstract,\r\n\r\n\t// DEPRECATIONS\r\n\r\n\t/**\r\n\t * Provided for backward compatibility for scale.getValueForPixel(),\r\n\t * this method should be overridden only by the moment adapter.\r\n\t * @deprecated since version 2.8.0\r\n\t * @todo remove at version 3\r\n\t * @private\r\n\t */\r\n\t_create: function(value) {\r\n\t\treturn value;\r\n\t}\r\n});\r\n\r\nDateAdapter.override = function(members) {\r\n\thelpers$1.extend(DateAdapter.prototype, members);\r\n};\r\n\r\nvar _date = DateAdapter;\n\nvar core_adapters = {\n\t_date: _date\n};\n\n/**\r\n * Namespace to hold static tick generation functions\r\n * @namespace Chart.Ticks\r\n */\r\nvar core_ticks = {\r\n\t/**\r\n\t * Namespace to hold formatters for different types of ticks\r\n\t * @namespace Chart.Ticks.formatters\r\n\t */\r\n\tformatters: {\r\n\t\t/**\r\n\t\t * Formatter for value labels\r\n\t\t * @method Chart.Ticks.formatters.values\r\n\t\t * @param value the value to display\r\n\t\t * @return {string|string[]} the label to display\r\n\t\t */\r\n\t\tvalues: function(value) {\r\n\t\t\treturn helpers$1.isArray(value) ? value : '' + value;\r\n\t\t},\r\n\r\n\t\t/**\r\n\t\t * Formatter for linear numeric ticks\r\n\t\t * @method Chart.Ticks.formatters.linear\r\n\t\t * @param tickValue {number} the value to be formatted\r\n\t\t * @param index {number} the position of the tickValue parameter in the ticks array\r\n\t\t * @param ticks {number[]} the list of ticks being converted\r\n\t\t * @return {string} string representation of the tickValue parameter\r\n\t\t */\r\n\t\tlinear: function(tickValue, index, ticks) {\r\n\t\t\t// If we have lots of ticks, don't use the ones\r\n\t\t\tvar delta = ticks.length > 3 ? ticks[2] - ticks[1] : ticks[1] - ticks[0];\r\n\r\n\t\t\t// If we have a number like 2.5 as the delta, figure out how many decimal places we need\r\n\t\t\tif (Math.abs(delta) > 1) {\r\n\t\t\t\tif (tickValue !== Math.floor(tickValue)) {\r\n\t\t\t\t\t// not an integer\r\n\t\t\t\t\tdelta = tickValue - Math.floor(tickValue);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tvar logDelta = helpers$1.log10(Math.abs(delta));\r\n\t\t\tvar tickString = '';\r\n\r\n\t\t\tif (tickValue !== 0) {\r\n\t\t\t\tvar maxTick = Math.max(Math.abs(ticks[0]), Math.abs(ticks[ticks.length - 1]));\r\n\t\t\t\tif (maxTick < 1e-4) { // all ticks are small numbers; use scientific notation\r\n\t\t\t\t\tvar logTick = helpers$1.log10(Math.abs(tickValue));\r\n\t\t\t\t\tvar numExponential = Math.floor(logTick) - Math.floor(logDelta);\r\n\t\t\t\t\tnumExponential = Math.max(Math.min(numExponential, 20), 0);\r\n\t\t\t\t\ttickString = tickValue.toExponential(numExponential);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tvar numDecimal = -1 * Math.floor(logDelta);\r\n\t\t\t\t\tnumDecimal = Math.max(Math.min(numDecimal, 20), 0); // toFixed has a max of 20 decimal places\r\n\t\t\t\t\ttickString = tickValue.toFixed(numDecimal);\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\ttickString = '0'; // never show decimal places for 0\r\n\t\t\t}\r\n\r\n\t\t\treturn tickString;\r\n\t\t},\r\n\r\n\t\tlogarithmic: function(tickValue, index, ticks) {\r\n\t\t\tvar remain = tickValue / (Math.pow(10, Math.floor(helpers$1.log10(tickValue))));\r\n\r\n\t\t\tif (tickValue === 0) {\r\n\t\t\t\treturn '0';\r\n\t\t\t} else if (remain === 1 || remain === 2 || remain === 5 || index === 0 || index === ticks.length - 1) {\r\n\t\t\t\treturn tickValue.toExponential();\r\n\t\t\t}\r\n\t\t\treturn '';\r\n\t\t}\r\n\t}\r\n};\n\nvar isArray = helpers$1.isArray;\r\nvar isNullOrUndef = helpers$1.isNullOrUndef;\r\nvar valueOrDefault$a = helpers$1.valueOrDefault;\r\nvar valueAtIndexOrDefault = helpers$1.valueAtIndexOrDefault;\r\n\r\ncore_defaults._set('scale', {\r\n\tdisplay: true,\r\n\tposition: 'left',\r\n\toffset: false,\r\n\r\n\t// grid line settings\r\n\tgridLines: {\r\n\t\tdisplay: true,\r\n\t\tcolor: 'rgba(0,0,0,0.1)',\r\n\t\tlineWidth: 1,\r\n\t\tdrawBorder: true,\r\n\t\tdrawOnChartArea: true,\r\n\t\tdrawTicks: true,\r\n\t\ttickMarkLength: 10,\r\n\t\tzeroLineWidth: 1,\r\n\t\tzeroLineColor: 'rgba(0,0,0,0.25)',\r\n\t\tzeroLineBorderDash: [],\r\n\t\tzeroLineBorderDashOffset: 0.0,\r\n\t\toffsetGridLines: false,\r\n\t\tborderDash: [],\r\n\t\tborderDashOffset: 0.0\r\n\t},\r\n\r\n\t// scale label\r\n\tscaleLabel: {\r\n\t\t// display property\r\n\t\tdisplay: false,\r\n\r\n\t\t// actual label\r\n\t\tlabelString: '',\r\n\r\n\t\t// top/bottom padding\r\n\t\tpadding: {\r\n\t\t\ttop: 4,\r\n\t\t\tbottom: 4\r\n\t\t}\r\n\t},\r\n\r\n\t// label settings\r\n\tticks: {\r\n\t\tbeginAtZero: false,\r\n\t\tminRotation: 0,\r\n\t\tmaxRotation: 50,\r\n\t\tmirror: false,\r\n\t\tpadding: 0,\r\n\t\treverse: false,\r\n\t\tdisplay: true,\r\n\t\tautoSkip: true,\r\n\t\tautoSkipPadding: 0,\r\n\t\tlabelOffset: 0,\r\n\t\t// We pass through arrays to be rendered as multiline labels, we convert Others to strings here.\r\n\t\tcallback: core_ticks.formatters.values,\r\n\t\tminor: {},\r\n\t\tmajor: {}\r\n\t}\r\n});\r\n\r\n/** Returns a new array containing numItems from arr */\r\nfunction sample(arr, numItems) {\r\n\tvar result = [];\r\n\tvar increment = arr.length / numItems;\r\n\tvar i = 0;\r\n\tvar len = arr.length;\r\n\r\n\tfor (; i < len; i += increment) {\r\n\t\tresult.push(arr[Math.floor(i)]);\r\n\t}\r\n\treturn result;\r\n}\r\n\r\nfunction getPixelForGridLine(scale, index, offsetGridLines) {\r\n\tvar length = scale.getTicks().length;\r\n\tvar validIndex = Math.min(index, length - 1);\r\n\tvar lineValue = scale.getPixelForTick(validIndex);\r\n\tvar start = scale._startPixel;\r\n\tvar end = scale._endPixel;\r\n\tvar epsilon = 1e-6; // 1e-6 is margin in pixels for accumulated error.\r\n\tvar offset;\r\n\r\n\tif (offsetGridLines) {\r\n\t\tif (length === 1) {\r\n\t\t\toffset = Math.max(lineValue - start, end - lineValue);\r\n\t\t} else if (index === 0) {\r\n\t\t\toffset = (scale.getPixelForTick(1) - lineValue) / 2;\r\n\t\t} else {\r\n\t\t\toffset = (lineValue - scale.getPixelForTick(validIndex - 1)) / 2;\r\n\t\t}\r\n\t\tlineValue += validIndex < index ? offset : -offset;\r\n\r\n\t\t// Return undefined if the pixel is out of the range\r\n\t\tif (lineValue < start - epsilon || lineValue > end + epsilon) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t}\r\n\treturn lineValue;\r\n}\r\n\r\nfunction garbageCollect(caches, length) {\r\n\thelpers$1.each(caches, function(cache) {\r\n\t\tvar gc = cache.gc;\r\n\t\tvar gcLen = gc.length / 2;\r\n\t\tvar i;\r\n\t\tif (gcLen > length) {\r\n\t\t\tfor (i = 0; i < gcLen; ++i) {\r\n\t\t\t\tdelete cache.data[gc[i]];\r\n\t\t\t}\r\n\t\t\tgc.splice(0, gcLen);\r\n\t\t}\r\n\t});\r\n}\r\n\r\n/**\r\n * Returns {width, height, offset} objects for the first, last, widest, highest tick\r\n * labels where offset indicates the anchor point offset from the top in pixels.\r\n */\r\nfunction computeLabelSizes(ctx, tickFonts, ticks, caches) {\r\n\tvar length = ticks.length;\r\n\tvar widths = [];\r\n\tvar heights = [];\r\n\tvar offsets = [];\r\n\tvar widestLabelSize = 0;\r\n\tvar highestLabelSize = 0;\r\n\tvar i, j, jlen, label, tickFont, fontString, cache, lineHeight, width, height, nestedLabel, widest, highest;\r\n\r\n\tfor (i = 0; i < length; ++i) {\r\n\t\tlabel = ticks[i].label;\r\n\t\ttickFont = ticks[i].major ? tickFonts.major : tickFonts.minor;\r\n\t\tctx.font = fontString = tickFont.string;\r\n\t\tcache = caches[fontString] = caches[fontString] || {data: {}, gc: []};\r\n\t\tlineHeight = tickFont.lineHeight;\r\n\t\twidth = height = 0;\r\n\t\t// Undefined labels and arrays should not be measured\r\n\t\tif (!isNullOrUndef(label) && !isArray(label)) {\r\n\t\t\twidth = helpers$1.measureText(ctx, cache.data, cache.gc, width, label);\r\n\t\t\theight = lineHeight;\r\n\t\t} else if (isArray(label)) {\r\n\t\t\t// if it is an array let's measure each element\r\n\t\t\tfor (j = 0, jlen = label.length; j < jlen; ++j) {\r\n\t\t\t\tnestedLabel = label[j];\r\n\t\t\t\t// Undefined labels and arrays should not be measured\r\n\t\t\t\tif (!isNullOrUndef(nestedLabel) && !isArray(nestedLabel)) {\r\n\t\t\t\t\twidth = helpers$1.measureText(ctx, cache.data, cache.gc, width, nestedLabel);\r\n\t\t\t\t\theight += lineHeight;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\twidths.push(width);\r\n\t\theights.push(height);\r\n\t\toffsets.push(lineHeight / 2);\r\n\t\twidestLabelSize = Math.max(width, widestLabelSize);\r\n\t\thighestLabelSize = Math.max(height, highestLabelSize);\r\n\t}\r\n\tgarbageCollect(caches, length);\r\n\r\n\twidest = widths.indexOf(widestLabelSize);\r\n\thighest = heights.indexOf(highestLabelSize);\r\n\r\n\tfunction valueAt(idx) {\r\n\t\treturn {\r\n\t\t\twidth: widths[idx] || 0,\r\n\t\t\theight: heights[idx] || 0,\r\n\t\t\toffset: offsets[idx] || 0\r\n\t\t};\r\n\t}\r\n\r\n\treturn {\r\n\t\tfirst: valueAt(0),\r\n\t\tlast: valueAt(length - 1),\r\n\t\twidest: valueAt(widest),\r\n\t\thighest: valueAt(highest)\r\n\t};\r\n}\r\n\r\nfunction getTickMarkLength(options) {\r\n\treturn options.drawTicks ? options.tickMarkLength : 0;\r\n}\r\n\r\nfunction getScaleLabelHeight(options) {\r\n\tvar font, padding;\r\n\r\n\tif (!options.display) {\r\n\t\treturn 0;\r\n\t}\r\n\r\n\tfont = helpers$1.options._parseFont(options);\r\n\tpadding = helpers$1.options.toPadding(options.padding);\r\n\r\n\treturn font.lineHeight + padding.height;\r\n}\r\n\r\nfunction parseFontOptions(options, nestedOpts) {\r\n\treturn helpers$1.extend(helpers$1.options._parseFont({\r\n\t\tfontFamily: valueOrDefault$a(nestedOpts.fontFamily, options.fontFamily),\r\n\t\tfontSize: valueOrDefault$a(nestedOpts.fontSize, options.fontSize),\r\n\t\tfontStyle: valueOrDefault$a(nestedOpts.fontStyle, options.fontStyle),\r\n\t\tlineHeight: valueOrDefault$a(nestedOpts.lineHeight, options.lineHeight)\r\n\t}), {\r\n\t\tcolor: helpers$1.options.resolve([nestedOpts.fontColor, options.fontColor, core_defaults.global.defaultFontColor])\r\n\t});\r\n}\r\n\r\nfunction parseTickFontOptions(options) {\r\n\tvar minor = parseFontOptions(options, options.minor);\r\n\tvar major = options.major.enabled ? parseFontOptions(options, options.major) : minor;\r\n\r\n\treturn {minor: minor, major: major};\r\n}\r\n\r\nfunction nonSkipped(ticksToFilter) {\r\n\tvar filtered = [];\r\n\tvar item, index, len;\r\n\tfor (index = 0, len = ticksToFilter.length; index < len; ++index) {\r\n\t\titem = ticksToFilter[index];\r\n\t\tif (typeof item._index !== 'undefined') {\r\n\t\t\tfiltered.push(item);\r\n\t\t}\r\n\t}\r\n\treturn filtered;\r\n}\r\n\r\nfunction getEvenSpacing(arr) {\r\n\tvar len = arr.length;\r\n\tvar i, diff;\r\n\r\n\tif (len < 2) {\r\n\t\treturn false;\r\n\t}\r\n\r\n\tfor (diff = arr[0], i = 1; i < len; ++i) {\r\n\t\tif (arr[i] - arr[i - 1] !== diff) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\treturn diff;\r\n}\r\n\r\nfunction calculateSpacing(majorIndices, ticks, axisLength, ticksLimit) {\r\n\tvar evenMajorSpacing = getEvenSpacing(majorIndices);\r\n\tvar spacing = (ticks.length - 1) / ticksLimit;\r\n\tvar factors, factor, i, ilen;\r\n\r\n\t// If the major ticks are evenly spaced apart, place the minor ticks\r\n\t// so that they divide the major ticks into even chunks\r\n\tif (!evenMajorSpacing) {\r\n\t\treturn Math.max(spacing, 1);\r\n\t}\r\n\r\n\tfactors = helpers$1.math._factorize(evenMajorSpacing);\r\n\tfor (i = 0, ilen = factors.length - 1; i < ilen; i++) {\r\n\t\tfactor = factors[i];\r\n\t\tif (factor > spacing) {\r\n\t\t\treturn factor;\r\n\t\t}\r\n\t}\r\n\treturn Math.max(spacing, 1);\r\n}\r\n\r\nfunction getMajorIndices(ticks) {\r\n\tvar result = [];\r\n\tvar i, ilen;\r\n\tfor (i = 0, ilen = ticks.length; i < ilen; i++) {\r\n\t\tif (ticks[i].major) {\r\n\t\t\tresult.push(i);\r\n\t\t}\r\n\t}\r\n\treturn result;\r\n}\r\n\r\nfunction skipMajors(ticks, majorIndices, spacing) {\r\n\tvar count = 0;\r\n\tvar next = majorIndices[0];\r\n\tvar i, tick;\r\n\r\n\tspacing = Math.ceil(spacing);\r\n\tfor (i = 0; i < ticks.length; i++) {\r\n\t\ttick = ticks[i];\r\n\t\tif (i === next) {\r\n\t\t\ttick._index = i;\r\n\t\t\tcount++;\r\n\t\t\tnext = majorIndices[count * spacing];\r\n\t\t} else {\r\n\t\t\tdelete tick.label;\r\n\t\t}\r\n\t}\r\n}\r\n\r\nfunction skip(ticks, spacing, majorStart, majorEnd) {\r\n\tvar start = valueOrDefault$a(majorStart, 0);\r\n\tvar end = Math.min(valueOrDefault$a(majorEnd, ticks.length), ticks.length);\r\n\tvar count = 0;\r\n\tvar length, i, tick, next;\r\n\r\n\tspacing = Math.ceil(spacing);\r\n\tif (majorEnd) {\r\n\t\tlength = majorEnd - majorStart;\r\n\t\tspacing = length / Math.floor(length / spacing);\r\n\t}\r\n\r\n\tnext = start;\r\n\r\n\twhile (next < 0) {\r\n\t\tcount++;\r\n\t\tnext = Math.round(start + count * spacing);\r\n\t}\r\n\r\n\tfor (i = Math.max(start, 0); i < end; i++) {\r\n\t\ttick = ticks[i];\r\n\t\tif (i === next) {\r\n\t\t\ttick._index = i;\r\n\t\t\tcount++;\r\n\t\t\tnext = Math.round(start + count * spacing);\r\n\t\t} else {\r\n\t\t\tdelete tick.label;\r\n\t\t}\r\n\t}\r\n}\r\n\r\nvar Scale = core_element.extend({\r\n\r\n\tzeroLineIndex: 0,\r\n\r\n\t/**\r\n\t * Get the padding needed for the scale\r\n\t * @method getPadding\r\n\t * @private\r\n\t * @returns {Padding} the necessary padding\r\n\t */\r\n\tgetPadding: function() {\r\n\t\tvar me = this;\r\n\t\treturn {\r\n\t\t\tleft: me.paddingLeft || 0,\r\n\t\t\ttop: me.paddingTop || 0,\r\n\t\t\tright: me.paddingRight || 0,\r\n\t\t\tbottom: me.paddingBottom || 0\r\n\t\t};\r\n\t},\r\n\r\n\t/**\r\n\t * Returns the scale tick objects ({label, major})\r\n\t * @since 2.7\r\n\t */\r\n\tgetTicks: function() {\r\n\t\treturn this._ticks;\r\n\t},\r\n\r\n\t/**\r\n\t* @private\r\n\t*/\r\n\t_getLabels: function() {\r\n\t\tvar data = this.chart.data;\r\n\t\treturn this.options.labels || (this.isHorizontal() ? data.xLabels : data.yLabels) || data.labels || [];\r\n\t},\r\n\r\n\t// These methods are ordered by lifecyle. Utilities then follow.\r\n\t// Any function defined here is inherited by all scale types.\r\n\t// Any function can be extended by the scale type\r\n\r\n\t/**\r\n\t * Provided for backward compatibility, not available anymore\r\n\t * @function Chart.Scale.mergeTicksOptions\r\n\t * @deprecated since version 2.8.0\r\n\t * @todo remove at version 3\r\n\t */\r\n\tmergeTicksOptions: function() {\r\n\t\t// noop\r\n\t},\r\n\r\n\tbeforeUpdate: function() {\r\n\t\thelpers$1.callback(this.options.beforeUpdate, [this]);\r\n\t},\r\n\r\n\t/**\r\n\t * @param {number} maxWidth - the max width in pixels\r\n\t * @param {number} maxHeight - the max height in pixels\r\n\t * @param {object} margins - the space between the edge of the other scales and edge of the chart\r\n\t *   This space comes from two sources:\r\n\t *     - padding - space that's required to show the labels at the edges of the scale\r\n\t *     - thickness of scales or legends in another orientation\r\n\t */\r\n\tupdate: function(maxWidth, maxHeight, margins) {\r\n\t\tvar me = this;\r\n\t\tvar tickOpts = me.options.ticks;\r\n\t\tvar sampleSize = tickOpts.sampleSize;\r\n\t\tvar i, ilen, labels, ticks, samplingEnabled;\r\n\r\n\t\t// Update Lifecycle - Probably don't want to ever extend or overwrite this function ;)\r\n\t\tme.beforeUpdate();\r\n\r\n\t\t// Absorb the master measurements\r\n\t\tme.maxWidth = maxWidth;\r\n\t\tme.maxHeight = maxHeight;\r\n\t\tme.margins = helpers$1.extend({\r\n\t\t\tleft: 0,\r\n\t\t\tright: 0,\r\n\t\t\ttop: 0,\r\n\t\t\tbottom: 0\r\n\t\t}, margins);\r\n\r\n\t\tme._ticks = null;\r\n\t\tme.ticks = null;\r\n\t\tme._labelSizes = null;\r\n\t\tme._maxLabelLines = 0;\r\n\t\tme.longestLabelWidth = 0;\r\n\t\tme.longestTextCache = me.longestTextCache || {};\r\n\t\tme._gridLineItems = null;\r\n\t\tme._labelItems = null;\r\n\r\n\t\t// Dimensions\r\n\t\tme.beforeSetDimensions();\r\n\t\tme.setDimensions();\r\n\t\tme.afterSetDimensions();\r\n\r\n\t\t// Data min/max\r\n\t\tme.beforeDataLimits();\r\n\t\tme.determineDataLimits();\r\n\t\tme.afterDataLimits();\r\n\r\n\t\t// Ticks - `this.ticks` is now DEPRECATED!\r\n\t\t// Internal ticks are now stored as objects in the PRIVATE `this._ticks` member\r\n\t\t// and must not be accessed directly from outside this class. `this.ticks` being\r\n\t\t// around for long time and not marked as private, we can't change its structure\r\n\t\t// without unexpected breaking changes. If you need to access the scale ticks,\r\n\t\t// use scale.getTicks() instead.\r\n\r\n\t\tme.beforeBuildTicks();\r\n\r\n\t\t// New implementations should return an array of objects but for BACKWARD COMPAT,\r\n\t\t// we still support no return (`this.ticks` internally set by calling this method).\r\n\t\tticks = me.buildTicks() || [];\r\n\r\n\t\t// Allow modification of ticks in callback.\r\n\t\tticks = me.afterBuildTicks(ticks) || ticks;\r\n\r\n\t\t// Ensure ticks contains ticks in new tick format\r\n\t\tif ((!ticks || !ticks.length) && me.ticks) {\r\n\t\t\tticks = [];\r\n\t\t\tfor (i = 0, ilen = me.ticks.length; i < ilen; ++i) {\r\n\t\t\t\tticks.push({\r\n\t\t\t\t\tvalue: me.ticks[i],\r\n\t\t\t\t\tmajor: false\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tme._ticks = ticks;\r\n\r\n\t\t// Compute tick rotation and fit using a sampled subset of labels\r\n\t\t// We generally don't need to compute the size of every single label for determining scale size\r\n\t\tsamplingEnabled = sampleSize < ticks.length;\r\n\t\tlabels = me._convertTicksToLabels(samplingEnabled ? sample(ticks, sampleSize) : ticks);\r\n\r\n\t\t// _configure is called twice, once here, once from core.controller.updateLayout.\r\n\t\t// Here we haven't been positioned yet, but dimensions are correct.\r\n\t\t// Variables set in _configure are needed for calculateTickRotation, and\r\n\t\t// it's ok that coordinates are not correct there, only dimensions matter.\r\n\t\tme._configure();\r\n\r\n\t\t// Tick Rotation\r\n\t\tme.beforeCalculateTickRotation();\r\n\t\tme.calculateTickRotation();\r\n\t\tme.afterCalculateTickRotation();\r\n\r\n\t\tme.beforeFit();\r\n\t\tme.fit();\r\n\t\tme.afterFit();\r\n\r\n\t\t// Auto-skip\r\n\t\tme._ticksToDraw = tickOpts.display && (tickOpts.autoSkip || tickOpts.source === 'auto') ? me._autoSkip(ticks) : ticks;\r\n\r\n\t\tif (samplingEnabled) {\r\n\t\t\t// Generate labels using all non-skipped ticks\r\n\t\t\tlabels = me._convertTicksToLabels(me._ticksToDraw);\r\n\t\t}\r\n\r\n\t\tme.ticks = labels;   // BACKWARD COMPATIBILITY\r\n\r\n\t\t// IMPORTANT: after this point, we consider that `this.ticks` will NEVER change!\r\n\r\n\t\tme.afterUpdate();\r\n\r\n\t\t// TODO(v3): remove minSize as a public property and return value from all layout boxes. It is unused\r\n\t\t// make maxWidth and maxHeight private\r\n\t\treturn me.minSize;\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_configure: function() {\r\n\t\tvar me = this;\r\n\t\tvar reversePixels = me.options.ticks.reverse;\r\n\t\tvar startPixel, endPixel;\r\n\r\n\t\tif (me.isHorizontal()) {\r\n\t\t\tstartPixel = me.left;\r\n\t\t\tendPixel = me.right;\r\n\t\t} else {\r\n\t\t\tstartPixel = me.top;\r\n\t\t\tendPixel = me.bottom;\r\n\t\t\t// by default vertical scales are from bottom to top, so pixels are reversed\r\n\t\t\treversePixels = !reversePixels;\r\n\t\t}\r\n\t\tme._startPixel = startPixel;\r\n\t\tme._endPixel = endPixel;\r\n\t\tme._reversePixels = reversePixels;\r\n\t\tme._length = endPixel - startPixel;\r\n\t},\r\n\r\n\tafterUpdate: function() {\r\n\t\thelpers$1.callback(this.options.afterUpdate, [this]);\r\n\t},\r\n\r\n\t//\r\n\r\n\tbeforeSetDimensions: function() {\r\n\t\thelpers$1.callback(this.options.beforeSetDimensions, [this]);\r\n\t},\r\n\tsetDimensions: function() {\r\n\t\tvar me = this;\r\n\t\t// Set the unconstrained dimension before label rotation\r\n\t\tif (me.isHorizontal()) {\r\n\t\t\t// Reset position before calculating rotation\r\n\t\t\tme.width = me.maxWidth;\r\n\t\t\tme.left = 0;\r\n\t\t\tme.right = me.width;\r\n\t\t} else {\r\n\t\t\tme.height = me.maxHeight;\r\n\r\n\t\t\t// Reset position before calculating rotation\r\n\t\t\tme.top = 0;\r\n\t\t\tme.bottom = me.height;\r\n\t\t}\r\n\r\n\t\t// Reset padding\r\n\t\tme.paddingLeft = 0;\r\n\t\tme.paddingTop = 0;\r\n\t\tme.paddingRight = 0;\r\n\t\tme.paddingBottom = 0;\r\n\t},\r\n\tafterSetDimensions: function() {\r\n\t\thelpers$1.callback(this.options.afterSetDimensions, [this]);\r\n\t},\r\n\r\n\t// Data limits\r\n\tbeforeDataLimits: function() {\r\n\t\thelpers$1.callback(this.options.beforeDataLimits, [this]);\r\n\t},\r\n\tdetermineDataLimits: helpers$1.noop,\r\n\tafterDataLimits: function() {\r\n\t\thelpers$1.callback(this.options.afterDataLimits, [this]);\r\n\t},\r\n\r\n\t//\r\n\tbeforeBuildTicks: function() {\r\n\t\thelpers$1.callback(this.options.beforeBuildTicks, [this]);\r\n\t},\r\n\tbuildTicks: helpers$1.noop,\r\n\tafterBuildTicks: function(ticks) {\r\n\t\tvar me = this;\r\n\t\t// ticks is empty for old axis implementations here\r\n\t\tif (isArray(ticks) && ticks.length) {\r\n\t\t\treturn helpers$1.callback(me.options.afterBuildTicks, [me, ticks]);\r\n\t\t}\r\n\t\t// Support old implementations (that modified `this.ticks` directly in buildTicks)\r\n\t\tme.ticks = helpers$1.callback(me.options.afterBuildTicks, [me, me.ticks]) || me.ticks;\r\n\t\treturn ticks;\r\n\t},\r\n\r\n\tbeforeTickToLabelConversion: function() {\r\n\t\thelpers$1.callback(this.options.beforeTickToLabelConversion, [this]);\r\n\t},\r\n\tconvertTicksToLabels: function() {\r\n\t\tvar me = this;\r\n\t\t// Convert ticks to strings\r\n\t\tvar tickOpts = me.options.ticks;\r\n\t\tme.ticks = me.ticks.map(tickOpts.userCallback || tickOpts.callback, this);\r\n\t},\r\n\tafterTickToLabelConversion: function() {\r\n\t\thelpers$1.callback(this.options.afterTickToLabelConversion, [this]);\r\n\t},\r\n\r\n\t//\r\n\r\n\tbeforeCalculateTickRotation: function() {\r\n\t\thelpers$1.callback(this.options.beforeCalculateTickRotation, [this]);\r\n\t},\r\n\tcalculateTickRotation: function() {\r\n\t\tvar me = this;\r\n\t\tvar options = me.options;\r\n\t\tvar tickOpts = options.ticks;\r\n\t\tvar numTicks = me.getTicks().length;\r\n\t\tvar minRotation = tickOpts.minRotation || 0;\r\n\t\tvar maxRotation = tickOpts.maxRotation;\r\n\t\tvar labelRotation = minRotation;\r\n\t\tvar labelSizes, maxLabelWidth, maxLabelHeight, maxWidth, tickWidth, maxHeight, maxLabelDiagonal;\r\n\r\n\t\tif (!me._isVisible() || !tickOpts.display || minRotation >= maxRotation || numTicks <= 1 || !me.isHorizontal()) {\r\n\t\t\tme.labelRotation = minRotation;\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tlabelSizes = me._getLabelSizes();\r\n\t\tmaxLabelWidth = labelSizes.widest.width;\r\n\t\tmaxLabelHeight = labelSizes.highest.height - labelSizes.highest.offset;\r\n\r\n\t\t// Estimate the width of each grid based on the canvas width, the maximum\r\n\t\t// label width and the number of tick intervals\r\n\t\tmaxWidth = Math.min(me.maxWidth, me.chart.width - maxLabelWidth);\r\n\t\ttickWidth = options.offset ? me.maxWidth / numTicks : maxWidth / (numTicks - 1);\r\n\r\n\t\t// Allow 3 pixels x2 padding either side for label readability\r\n\t\tif (maxLabelWidth + 6 > tickWidth) {\r\n\t\t\ttickWidth = maxWidth / (numTicks - (options.offset ? 0.5 : 1));\r\n\t\t\tmaxHeight = me.maxHeight - getTickMarkLength(options.gridLines)\r\n\t\t\t\t- tickOpts.padding - getScaleLabelHeight(options.scaleLabel);\r\n\t\t\tmaxLabelDiagonal = Math.sqrt(maxLabelWidth * maxLabelWidth + maxLabelHeight * maxLabelHeight);\r\n\t\t\tlabelRotation = helpers$1.toDegrees(Math.min(\r\n\t\t\t\tMath.asin(Math.min((labelSizes.highest.height + 6) / tickWidth, 1)),\r\n\t\t\t\tMath.asin(Math.min(maxHeight / maxLabelDiagonal, 1)) - Math.asin(maxLabelHeight / maxLabelDiagonal)\r\n\t\t\t));\r\n\t\t\tlabelRotation = Math.max(minRotation, Math.min(maxRotation, labelRotation));\r\n\t\t}\r\n\r\n\t\tme.labelRotation = labelRotation;\r\n\t},\r\n\tafterCalculateTickRotation: function() {\r\n\t\thelpers$1.callback(this.options.afterCalculateTickRotation, [this]);\r\n\t},\r\n\r\n\t//\r\n\r\n\tbeforeFit: function() {\r\n\t\thelpers$1.callback(this.options.beforeFit, [this]);\r\n\t},\r\n\tfit: function() {\r\n\t\tvar me = this;\r\n\t\t// Reset\r\n\t\tvar minSize = me.minSize = {\r\n\t\t\twidth: 0,\r\n\t\t\theight: 0\r\n\t\t};\r\n\r\n\t\tvar chart = me.chart;\r\n\t\tvar opts = me.options;\r\n\t\tvar tickOpts = opts.ticks;\r\n\t\tvar scaleLabelOpts = opts.scaleLabel;\r\n\t\tvar gridLineOpts = opts.gridLines;\r\n\t\tvar display = me._isVisible();\r\n\t\tvar isBottom = opts.position === 'bottom';\r\n\t\tvar isHorizontal = me.isHorizontal();\r\n\r\n\t\t// Width\r\n\t\tif (isHorizontal) {\r\n\t\t\tminSize.width = me.maxWidth;\r\n\t\t} else if (display) {\r\n\t\t\tminSize.width = getTickMarkLength(gridLineOpts) + getScaleLabelHeight(scaleLabelOpts);\r\n\t\t}\r\n\r\n\t\t// height\r\n\t\tif (!isHorizontal) {\r\n\t\t\tminSize.height = me.maxHeight; // fill all the height\r\n\t\t} else if (display) {\r\n\t\t\tminSize.height = getTickMarkLength(gridLineOpts) + getScaleLabelHeight(scaleLabelOpts);\r\n\t\t}\r\n\r\n\t\t// Don't bother fitting the ticks if we are not showing the labels\r\n\t\tif (tickOpts.display && display) {\r\n\t\t\tvar tickFonts = parseTickFontOptions(tickOpts);\r\n\t\t\tvar labelSizes = me._getLabelSizes();\r\n\t\t\tvar firstLabelSize = labelSizes.first;\r\n\t\t\tvar lastLabelSize = labelSizes.last;\r\n\t\t\tvar widestLabelSize = labelSizes.widest;\r\n\t\t\tvar highestLabelSize = labelSizes.highest;\r\n\t\t\tvar lineSpace = tickFonts.minor.lineHeight * 0.4;\r\n\t\t\tvar tickPadding = tickOpts.padding;\r\n\r\n\t\t\tif (isHorizontal) {\r\n\t\t\t\t// A horizontal axis is more constrained by the height.\r\n\t\t\t\tvar isRotated = me.labelRotation !== 0;\r\n\t\t\t\tvar angleRadians = helpers$1.toRadians(me.labelRotation);\r\n\t\t\t\tvar cosRotation = Math.cos(angleRadians);\r\n\t\t\t\tvar sinRotation = Math.sin(angleRadians);\r\n\r\n\t\t\t\tvar labelHeight = sinRotation * widestLabelSize.width\r\n\t\t\t\t\t+ cosRotation * (highestLabelSize.height - (isRotated ? highestLabelSize.offset : 0))\r\n\t\t\t\t\t+ (isRotated ? 0 : lineSpace); // padding\r\n\r\n\t\t\t\tminSize.height = Math.min(me.maxHeight, minSize.height + labelHeight + tickPadding);\r\n\r\n\t\t\t\tvar offsetLeft = me.getPixelForTick(0) - me.left;\r\n\t\t\t\tvar offsetRight = me.right - me.getPixelForTick(me.getTicks().length - 1);\r\n\t\t\t\tvar paddingLeft, paddingRight;\r\n\r\n\t\t\t\t// Ensure that our ticks are always inside the canvas. When rotated, ticks are right aligned\r\n\t\t\t\t// which means that the right padding is dominated by the font height\r\n\t\t\t\tif (isRotated) {\r\n\t\t\t\t\tpaddingLeft = isBottom ?\r\n\t\t\t\t\t\tcosRotation * firstLabelSize.width + sinRotation * firstLabelSize.offset :\r\n\t\t\t\t\t\tsinRotation * (firstLabelSize.height - firstLabelSize.offset);\r\n\t\t\t\t\tpaddingRight = isBottom ?\r\n\t\t\t\t\t\tsinRotation * (lastLabelSize.height - lastLabelSize.offset) :\r\n\t\t\t\t\t\tcosRotation * lastLabelSize.width + sinRotation * lastLabelSize.offset;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tpaddingLeft = firstLabelSize.width / 2;\r\n\t\t\t\t\tpaddingRight = lastLabelSize.width / 2;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Adjust padding taking into account changes in offsets\r\n\t\t\t\t// and add 3 px to move away from canvas edges\r\n\t\t\t\tme.paddingLeft = Math.max((paddingLeft - offsetLeft) * me.width / (me.width - offsetLeft), 0) + 3;\r\n\t\t\t\tme.paddingRight = Math.max((paddingRight - offsetRight) * me.width / (me.width - offsetRight), 0) + 3;\r\n\t\t\t} else {\r\n\t\t\t\t// A vertical axis is more constrained by the width. Labels are the\r\n\t\t\t\t// dominant factor here, so get that length first and account for padding\r\n\t\t\t\tvar labelWidth = tickOpts.mirror ? 0 :\r\n\t\t\t\t\t// use lineSpace for consistency with horizontal axis\r\n\t\t\t\t\t// tickPadding is not implemented for horizontal\r\n\t\t\t\t\twidestLabelSize.width + tickPadding + lineSpace;\r\n\r\n\t\t\t\tminSize.width = Math.min(me.maxWidth, minSize.width + labelWidth);\r\n\r\n\t\t\t\tme.paddingTop = firstLabelSize.height / 2;\r\n\t\t\t\tme.paddingBottom = lastLabelSize.height / 2;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tme.handleMargins();\r\n\r\n\t\tif (isHorizontal) {\r\n\t\t\tme.width = me._length = chart.width - me.margins.left - me.margins.right;\r\n\t\t\tme.height = minSize.height;\r\n\t\t} else {\r\n\t\t\tme.width = minSize.width;\r\n\t\t\tme.height = me._length = chart.height - me.margins.top - me.margins.bottom;\r\n\t\t}\r\n\t},\r\n\r\n\t/**\r\n\t * Handle margins and padding interactions\r\n\t * @private\r\n\t */\r\n\thandleMargins: function() {\r\n\t\tvar me = this;\r\n\t\tif (me.margins) {\r\n\t\t\tme.margins.left = Math.max(me.paddingLeft, me.margins.left);\r\n\t\t\tme.margins.top = Math.max(me.paddingTop, me.margins.top);\r\n\t\t\tme.margins.right = Math.max(me.paddingRight, me.margins.right);\r\n\t\t\tme.margins.bottom = Math.max(me.paddingBottom, me.margins.bottom);\r\n\t\t}\r\n\t},\r\n\r\n\tafterFit: function() {\r\n\t\thelpers$1.callback(this.options.afterFit, [this]);\r\n\t},\r\n\r\n\t// Shared Methods\r\n\tisHorizontal: function() {\r\n\t\tvar pos = this.options.position;\r\n\t\treturn pos === 'top' || pos === 'bottom';\r\n\t},\r\n\tisFullWidth: function() {\r\n\t\treturn this.options.fullWidth;\r\n\t},\r\n\r\n\t// Get the correct value. NaN bad inputs, If the value type is object get the x or y based on whether we are horizontal or not\r\n\tgetRightValue: function(rawValue) {\r\n\t\t// Null and undefined values first\r\n\t\tif (isNullOrUndef(rawValue)) {\r\n\t\t\treturn NaN;\r\n\t\t}\r\n\t\t// isNaN(object) returns true, so make sure NaN is checking for a number; Discard Infinite values\r\n\t\tif ((typeof rawValue === 'number' || rawValue instanceof Number) && !isFinite(rawValue)) {\r\n\t\t\treturn NaN;\r\n\t\t}\r\n\r\n\t\t// If it is in fact an object, dive in one more level\r\n\t\tif (rawValue) {\r\n\t\t\tif (this.isHorizontal()) {\r\n\t\t\t\tif (rawValue.x !== undefined) {\r\n\t\t\t\t\treturn this.getRightValue(rawValue.x);\r\n\t\t\t\t}\r\n\t\t\t} else if (rawValue.y !== undefined) {\r\n\t\t\t\treturn this.getRightValue(rawValue.y);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// Value is good, return it\r\n\t\treturn rawValue;\r\n\t},\r\n\r\n\t_convertTicksToLabels: function(ticks) {\r\n\t\tvar me = this;\r\n\t\tvar labels, i, ilen;\r\n\r\n\t\tme.ticks = ticks.map(function(tick) {\r\n\t\t\treturn tick.value;\r\n\t\t});\r\n\r\n\t\tme.beforeTickToLabelConversion();\r\n\r\n\t\t// New implementations should return the formatted tick labels but for BACKWARD\r\n\t\t// COMPAT, we still support no return (`this.ticks` internally changed by calling\r\n\t\t// this method and supposed to contain only string values).\r\n\t\tlabels = me.convertTicksToLabels(ticks) || me.ticks;\r\n\r\n\t\tme.afterTickToLabelConversion();\r\n\r\n\t\t// BACKWARD COMPAT: synchronize `_ticks` with labels (so potentially `this.ticks`)\r\n\t\tfor (i = 0, ilen = ticks.length; i < ilen; ++i) {\r\n\t\t\tticks[i].label = labels[i];\r\n\t\t}\r\n\r\n\t\treturn labels;\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_getLabelSizes: function() {\r\n\t\tvar me = this;\r\n\t\tvar labelSizes = me._labelSizes;\r\n\r\n\t\tif (!labelSizes) {\r\n\t\t\tme._labelSizes = labelSizes = computeLabelSizes(me.ctx, parseTickFontOptions(me.options.ticks), me.getTicks(), me.longestTextCache);\r\n\t\t\tme.longestLabelWidth = labelSizes.widest.width;\r\n\t\t}\r\n\r\n\t\treturn labelSizes;\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_parseValue: function(value) {\r\n\t\tvar start, end, min, max;\r\n\r\n\t\tif (isArray(value)) {\r\n\t\t\tstart = +this.getRightValue(value[0]);\r\n\t\t\tend = +this.getRightValue(value[1]);\r\n\t\t\tmin = Math.min(start, end);\r\n\t\t\tmax = Math.max(start, end);\r\n\t\t} else {\r\n\t\t\tvalue = +this.getRightValue(value);\r\n\t\t\tstart = undefined;\r\n\t\t\tend = value;\r\n\t\t\tmin = value;\r\n\t\t\tmax = value;\r\n\t\t}\r\n\r\n\t\treturn {\r\n\t\t\tmin: min,\r\n\t\t\tmax: max,\r\n\t\t\tstart: start,\r\n\t\t\tend: end\r\n\t\t};\r\n\t},\r\n\r\n\t/**\r\n\t* @private\r\n\t*/\r\n\t_getScaleLabel: function(rawValue) {\r\n\t\tvar v = this._parseValue(rawValue);\r\n\t\tif (v.start !== undefined) {\r\n\t\t\treturn '[' + v.start + ', ' + v.end + ']';\r\n\t\t}\r\n\r\n\t\treturn +this.getRightValue(rawValue);\r\n\t},\r\n\r\n\t/**\r\n\t * Used to get the value to display in the tooltip for the data at the given index\r\n\t * @param index\r\n\t * @param datasetIndex\r\n\t */\r\n\tgetLabelForIndex: helpers$1.noop,\r\n\r\n\t/**\r\n\t * Returns the location of the given data point. Value can either be an index or a numerical value\r\n\t * The coordinate (0, 0) is at the upper-left corner of the canvas\r\n\t * @param value\r\n\t * @param index\r\n\t * @param datasetIndex\r\n\t */\r\n\tgetPixelForValue: helpers$1.noop,\r\n\r\n\t/**\r\n\t * Used to get the data value from a given pixel. This is the inverse of getPixelForValue\r\n\t * The coordinate (0, 0) is at the upper-left corner of the canvas\r\n\t * @param pixel\r\n\t */\r\n\tgetValueForPixel: helpers$1.noop,\r\n\r\n\t/**\r\n\t * Returns the location of the tick at the given index\r\n\t * The coordinate (0, 0) is at the upper-left corner of the canvas\r\n\t */\r\n\tgetPixelForTick: function(index) {\r\n\t\tvar me = this;\r\n\t\tvar offset = me.options.offset;\r\n\t\tvar numTicks = me._ticks.length;\r\n\t\tvar tickWidth = 1 / Math.max(numTicks - (offset ? 0 : 1), 1);\r\n\r\n\t\treturn index < 0 || index > numTicks - 1\r\n\t\t\t? null\r\n\t\t\t: me.getPixelForDecimal(index * tickWidth + (offset ? tickWidth / 2 : 0));\r\n\t},\r\n\r\n\t/**\r\n\t * Utility for getting the pixel location of a percentage of scale\r\n\t * The coordinate (0, 0) is at the upper-left corner of the canvas\r\n\t */\r\n\tgetPixelForDecimal: function(decimal) {\r\n\t\tvar me = this;\r\n\r\n\t\tif (me._reversePixels) {\r\n\t\t\tdecimal = 1 - decimal;\r\n\t\t}\r\n\r\n\t\treturn me._startPixel + decimal * me._length;\r\n\t},\r\n\r\n\tgetDecimalForPixel: function(pixel) {\r\n\t\tvar decimal = (pixel - this._startPixel) / this._length;\r\n\t\treturn this._reversePixels ? 1 - decimal : decimal;\r\n\t},\r\n\r\n\t/**\r\n\t * Returns the pixel for the minimum chart value\r\n\t * The coordinate (0, 0) is at the upper-left corner of the canvas\r\n\t */\r\n\tgetBasePixel: function() {\r\n\t\treturn this.getPixelForValue(this.getBaseValue());\r\n\t},\r\n\r\n\tgetBaseValue: function() {\r\n\t\tvar me = this;\r\n\t\tvar min = me.min;\r\n\t\tvar max = me.max;\r\n\r\n\t\treturn me.beginAtZero ? 0 :\r\n\t\t\tmin < 0 && max < 0 ? max :\r\n\t\t\tmin > 0 && max > 0 ? min :\r\n\t\t\t0;\r\n\t},\r\n\r\n\t/**\r\n\t * Returns a subset of ticks to be plotted to avoid overlapping labels.\r\n\t * @private\r\n\t */\r\n\t_autoSkip: function(ticks) {\r\n\t\tvar me = this;\r\n\t\tvar tickOpts = me.options.ticks;\r\n\t\tvar axisLength = me._length;\r\n\t\tvar ticksLimit = tickOpts.maxTicksLimit || axisLength / me._tickSize() + 1;\r\n\t\tvar majorIndices = tickOpts.major.enabled ? getMajorIndices(ticks) : [];\r\n\t\tvar numMajorIndices = majorIndices.length;\r\n\t\tvar first = majorIndices[0];\r\n\t\tvar last = majorIndices[numMajorIndices - 1];\r\n\t\tvar i, ilen, spacing, avgMajorSpacing;\r\n\r\n\t\t// If there are too many major ticks to display them all\r\n\t\tif (numMajorIndices > ticksLimit) {\r\n\t\t\tskipMajors(ticks, majorIndices, numMajorIndices / ticksLimit);\r\n\t\t\treturn nonSkipped(ticks);\r\n\t\t}\r\n\r\n\t\tspacing = calculateSpacing(majorIndices, ticks, axisLength, ticksLimit);\r\n\r\n\t\tif (numMajorIndices > 0) {\r\n\t\t\tfor (i = 0, ilen = numMajorIndices - 1; i < ilen; i++) {\r\n\t\t\t\tskip(ticks, spacing, majorIndices[i], majorIndices[i + 1]);\r\n\t\t\t}\r\n\t\t\tavgMajorSpacing = numMajorIndices > 1 ? (last - first) / (numMajorIndices - 1) : null;\r\n\t\t\tskip(ticks, spacing, helpers$1.isNullOrUndef(avgMajorSpacing) ? 0 : first - avgMajorSpacing, first);\r\n\t\t\tskip(ticks, spacing, last, helpers$1.isNullOrUndef(avgMajorSpacing) ? ticks.length : last + avgMajorSpacing);\r\n\t\t\treturn nonSkipped(ticks);\r\n\t\t}\r\n\t\tskip(ticks, spacing);\r\n\t\treturn nonSkipped(ticks);\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_tickSize: function() {\r\n\t\tvar me = this;\r\n\t\tvar optionTicks = me.options.ticks;\r\n\r\n\t\t// Calculate space needed by label in axis direction.\r\n\t\tvar rot = helpers$1.toRadians(me.labelRotation);\r\n\t\tvar cos = Math.abs(Math.cos(rot));\r\n\t\tvar sin = Math.abs(Math.sin(rot));\r\n\r\n\t\tvar labelSizes = me._getLabelSizes();\r\n\t\tvar padding = optionTicks.autoSkipPadding || 0;\r\n\t\tvar w = labelSizes ? labelSizes.widest.width + padding : 0;\r\n\t\tvar h = labelSizes ? labelSizes.highest.height + padding : 0;\r\n\r\n\t\t// Calculate space needed for 1 tick in axis direction.\r\n\t\treturn me.isHorizontal()\r\n\t\t\t? h * cos > w * sin ? w / cos : h / sin\r\n\t\t\t: h * sin < w * cos ? h / cos : w / sin;\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_isVisible: function() {\r\n\t\tvar me = this;\r\n\t\tvar chart = me.chart;\r\n\t\tvar display = me.options.display;\r\n\t\tvar i, ilen, meta;\r\n\r\n\t\tif (display !== 'auto') {\r\n\t\t\treturn !!display;\r\n\t\t}\r\n\r\n\t\t// When 'auto', the scale is visible if at least one associated dataset is visible.\r\n\t\tfor (i = 0, ilen = chart.data.datasets.length; i < ilen; ++i) {\r\n\t\t\tif (chart.isDatasetVisible(i)) {\r\n\t\t\t\tmeta = chart.getDatasetMeta(i);\r\n\t\t\t\tif (meta.xAxisID === me.id || meta.yAxisID === me.id) {\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_computeGridLineItems: function(chartArea) {\r\n\t\tvar me = this;\r\n\t\tvar chart = me.chart;\r\n\t\tvar options = me.options;\r\n\t\tvar gridLines = options.gridLines;\r\n\t\tvar position = options.position;\r\n\t\tvar offsetGridLines = gridLines.offsetGridLines;\r\n\t\tvar isHorizontal = me.isHorizontal();\r\n\t\tvar ticks = me._ticksToDraw;\r\n\t\tvar ticksLength = ticks.length + (offsetGridLines ? 1 : 0);\r\n\r\n\t\tvar tl = getTickMarkLength(gridLines);\r\n\t\tvar items = [];\r\n\t\tvar axisWidth = gridLines.drawBorder ? valueAtIndexOrDefault(gridLines.lineWidth, 0, 0) : 0;\r\n\t\tvar axisHalfWidth = axisWidth / 2;\r\n\t\tvar alignPixel = helpers$1._alignPixel;\r\n\t\tvar alignBorderValue = function(pixel) {\r\n\t\t\treturn alignPixel(chart, pixel, axisWidth);\r\n\t\t};\r\n\t\tvar borderValue, i, tick, lineValue, alignedLineValue;\r\n\t\tvar tx1, ty1, tx2, ty2, x1, y1, x2, y2, lineWidth, lineColor, borderDash, borderDashOffset;\r\n\r\n\t\tif (position === 'top') {\r\n\t\t\tborderValue = alignBorderValue(me.bottom);\r\n\t\t\tty1 = me.bottom - tl;\r\n\t\t\tty2 = borderValue - axisHalfWidth;\r\n\t\t\ty1 = alignBorderValue(chartArea.top) + axisHalfWidth;\r\n\t\t\ty2 = chartArea.bottom;\r\n\t\t} else if (position === 'bottom') {\r\n\t\t\tborderValue = alignBorderValue(me.top);\r\n\t\t\ty1 = chartArea.top;\r\n\t\t\ty2 = alignBorderValue(chartArea.bottom) - axisHalfWidth;\r\n\t\t\tty1 = borderValue + axisHalfWidth;\r\n\t\t\tty2 = me.top + tl;\r\n\t\t} else if (position === 'left') {\r\n\t\t\tborderValue = alignBorderValue(me.right);\r\n\t\t\ttx1 = me.right - tl;\r\n\t\t\ttx2 = borderValue - axisHalfWidth;\r\n\t\t\tx1 = alignBorderValue(chartArea.left) + axisHalfWidth;\r\n\t\t\tx2 = chartArea.right;\r\n\t\t} else {\r\n\t\t\tborderValue = alignBorderValue(me.left);\r\n\t\t\tx1 = chartArea.left;\r\n\t\t\tx2 = alignBorderValue(chartArea.right) - axisHalfWidth;\r\n\t\t\ttx1 = borderValue + axisHalfWidth;\r\n\t\t\ttx2 = me.left + tl;\r\n\t\t}\r\n\r\n\t\tfor (i = 0; i < ticksLength; ++i) {\r\n\t\t\ttick = ticks[i] || {};\r\n\r\n\t\t\t// autoskipper skipped this tick (#4635)\r\n\t\t\tif (isNullOrUndef(tick.label) && i < ticks.length) {\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\tif (i === me.zeroLineIndex && options.offset === offsetGridLines) {\r\n\t\t\t\t// Draw the first index specially\r\n\t\t\t\tlineWidth = gridLines.zeroLineWidth;\r\n\t\t\t\tlineColor = gridLines.zeroLineColor;\r\n\t\t\t\tborderDash = gridLines.zeroLineBorderDash || [];\r\n\t\t\t\tborderDashOffset = gridLines.zeroLineBorderDashOffset || 0.0;\r\n\t\t\t} else {\r\n\t\t\t\tlineWidth = valueAtIndexOrDefault(gridLines.lineWidth, i, 1);\r\n\t\t\t\tlineColor = valueAtIndexOrDefault(gridLines.color, i, 'rgba(0,0,0,0.1)');\r\n\t\t\t\tborderDash = gridLines.borderDash || [];\r\n\t\t\t\tborderDashOffset = gridLines.borderDashOffset || 0.0;\r\n\t\t\t}\r\n\r\n\t\t\tlineValue = getPixelForGridLine(me, tick._index || i, offsetGridLines);\r\n\r\n\t\t\t// Skip if the pixel is out of the range\r\n\t\t\tif (lineValue === undefined) {\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\talignedLineValue = alignPixel(chart, lineValue, lineWidth);\r\n\r\n\t\t\tif (isHorizontal) {\r\n\t\t\t\ttx1 = tx2 = x1 = x2 = alignedLineValue;\r\n\t\t\t} else {\r\n\t\t\t\tty1 = ty2 = y1 = y2 = alignedLineValue;\r\n\t\t\t}\r\n\r\n\t\t\titems.push({\r\n\t\t\t\ttx1: tx1,\r\n\t\t\t\tty1: ty1,\r\n\t\t\t\ttx2: tx2,\r\n\t\t\t\tty2: ty2,\r\n\t\t\t\tx1: x1,\r\n\t\t\t\ty1: y1,\r\n\t\t\t\tx2: x2,\r\n\t\t\t\ty2: y2,\r\n\t\t\t\twidth: lineWidth,\r\n\t\t\t\tcolor: lineColor,\r\n\t\t\t\tborderDash: borderDash,\r\n\t\t\t\tborderDashOffset: borderDashOffset,\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\titems.ticksLength = ticksLength;\r\n\t\titems.borderValue = borderValue;\r\n\r\n\t\treturn items;\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_computeLabelItems: function() {\r\n\t\tvar me = this;\r\n\t\tvar options = me.options;\r\n\t\tvar optionTicks = options.ticks;\r\n\t\tvar position = options.position;\r\n\t\tvar isMirrored = optionTicks.mirror;\r\n\t\tvar isHorizontal = me.isHorizontal();\r\n\t\tvar ticks = me._ticksToDraw;\r\n\t\tvar fonts = parseTickFontOptions(optionTicks);\r\n\t\tvar tickPadding = optionTicks.padding;\r\n\t\tvar tl = getTickMarkLength(options.gridLines);\r\n\t\tvar rotation = -helpers$1.toRadians(me.labelRotation);\r\n\t\tvar items = [];\r\n\t\tvar i, ilen, tick, label, x, y, textAlign, pixel, font, lineHeight, lineCount, textOffset;\r\n\r\n\t\tif (position === 'top') {\r\n\t\t\ty = me.bottom - tl - tickPadding;\r\n\t\t\ttextAlign = !rotation ? 'center' : 'left';\r\n\t\t} else if (position === 'bottom') {\r\n\t\t\ty = me.top + tl + tickPadding;\r\n\t\t\ttextAlign = !rotation ? 'center' : 'right';\r\n\t\t} else if (position === 'left') {\r\n\t\t\tx = me.right - (isMirrored ? 0 : tl) - tickPadding;\r\n\t\t\ttextAlign = isMirrored ? 'left' : 'right';\r\n\t\t} else {\r\n\t\t\tx = me.left + (isMirrored ? 0 : tl) + tickPadding;\r\n\t\t\ttextAlign = isMirrored ? 'right' : 'left';\r\n\t\t}\r\n\r\n\t\tfor (i = 0, ilen = ticks.length; i < ilen; ++i) {\r\n\t\t\ttick = ticks[i];\r\n\t\t\tlabel = tick.label;\r\n\r\n\t\t\t// autoskipper skipped this tick (#4635)\r\n\t\t\tif (isNullOrUndef(label)) {\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\tpixel = me.getPixelForTick(tick._index || i) + optionTicks.labelOffset;\r\n\t\t\tfont = tick.major ? fonts.major : fonts.minor;\r\n\t\t\tlineHeight = font.lineHeight;\r\n\t\t\tlineCount = isArray(label) ? label.length : 1;\r\n\r\n\t\t\tif (isHorizontal) {\r\n\t\t\t\tx = pixel;\r\n\t\t\t\ttextOffset = position === 'top'\r\n\t\t\t\t\t? ((!rotation ? 0.5 : 1) - lineCount) * lineHeight\r\n\t\t\t\t\t: (!rotation ? 0.5 : 0) * lineHeight;\r\n\t\t\t} else {\r\n\t\t\t\ty = pixel;\r\n\t\t\t\ttextOffset = (1 - lineCount) * lineHeight / 2;\r\n\t\t\t}\r\n\r\n\t\t\titems.push({\r\n\t\t\t\tx: x,\r\n\t\t\t\ty: y,\r\n\t\t\t\trotation: rotation,\r\n\t\t\t\tlabel: label,\r\n\t\t\t\tfont: font,\r\n\t\t\t\ttextOffset: textOffset,\r\n\t\t\t\ttextAlign: textAlign\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn items;\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_drawGrid: function(chartArea) {\r\n\t\tvar me = this;\r\n\t\tvar gridLines = me.options.gridLines;\r\n\r\n\t\tif (!gridLines.display) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tvar ctx = me.ctx;\r\n\t\tvar chart = me.chart;\r\n\t\tvar alignPixel = helpers$1._alignPixel;\r\n\t\tvar axisWidth = gridLines.drawBorder ? valueAtIndexOrDefault(gridLines.lineWidth, 0, 0) : 0;\r\n\t\tvar items = me._gridLineItems || (me._gridLineItems = me._computeGridLineItems(chartArea));\r\n\t\tvar width, color, i, ilen, item;\r\n\r\n\t\tfor (i = 0, ilen = items.length; i < ilen; ++i) {\r\n\t\t\titem = items[i];\r\n\t\t\twidth = item.width;\r\n\t\t\tcolor = item.color;\r\n\r\n\t\t\tif (width && color) {\r\n\t\t\t\tctx.save();\r\n\t\t\t\tctx.lineWidth = width;\r\n\t\t\t\tctx.strokeStyle = color;\r\n\t\t\t\tif (ctx.setLineDash) {\r\n\t\t\t\t\tctx.setLineDash(item.borderDash);\r\n\t\t\t\t\tctx.lineDashOffset = item.borderDashOffset;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tctx.beginPath();\r\n\r\n\t\t\t\tif (gridLines.drawTicks) {\r\n\t\t\t\t\tctx.moveTo(item.tx1, item.ty1);\r\n\t\t\t\t\tctx.lineTo(item.tx2, item.ty2);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (gridLines.drawOnChartArea) {\r\n\t\t\t\t\tctx.moveTo(item.x1, item.y1);\r\n\t\t\t\t\tctx.lineTo(item.x2, item.y2);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tctx.stroke();\r\n\t\t\t\tctx.restore();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (axisWidth) {\r\n\t\t\t// Draw the line at the edge of the axis\r\n\t\t\tvar firstLineWidth = axisWidth;\r\n\t\t\tvar lastLineWidth = valueAtIndexOrDefault(gridLines.lineWidth, items.ticksLength - 1, 1);\r\n\t\t\tvar borderValue = items.borderValue;\r\n\t\t\tvar x1, x2, y1, y2;\r\n\r\n\t\t\tif (me.isHorizontal()) {\r\n\t\t\t\tx1 = alignPixel(chart, me.left, firstLineWidth) - firstLineWidth / 2;\r\n\t\t\t\tx2 = alignPixel(chart, me.right, lastLineWidth) + lastLineWidth / 2;\r\n\t\t\t\ty1 = y2 = borderValue;\r\n\t\t\t} else {\r\n\t\t\t\ty1 = alignPixel(chart, me.top, firstLineWidth) - firstLineWidth / 2;\r\n\t\t\t\ty2 = alignPixel(chart, me.bottom, lastLineWidth) + lastLineWidth / 2;\r\n\t\t\t\tx1 = x2 = borderValue;\r\n\t\t\t}\r\n\r\n\t\t\tctx.lineWidth = axisWidth;\r\n\t\t\tctx.strokeStyle = valueAtIndexOrDefault(gridLines.color, 0);\r\n\t\t\tctx.beginPath();\r\n\t\t\tctx.moveTo(x1, y1);\r\n\t\t\tctx.lineTo(x2, y2);\r\n\t\t\tctx.stroke();\r\n\t\t}\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_drawLabels: function() {\r\n\t\tvar me = this;\r\n\t\tvar optionTicks = me.options.ticks;\r\n\r\n\t\tif (!optionTicks.display) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tvar ctx = me.ctx;\r\n\t\tvar items = me._labelItems || (me._labelItems = me._computeLabelItems());\r\n\t\tvar i, j, ilen, jlen, item, tickFont, label, y;\r\n\r\n\t\tfor (i = 0, ilen = items.length; i < ilen; ++i) {\r\n\t\t\titem = items[i];\r\n\t\t\ttickFont = item.font;\r\n\r\n\t\t\t// Make sure we draw text in the correct color and font\r\n\t\t\tctx.save();\r\n\t\t\tctx.translate(item.x, item.y);\r\n\t\t\tctx.rotate(item.rotation);\r\n\t\t\tctx.font = tickFont.string;\r\n\t\t\tctx.fillStyle = tickFont.color;\r\n\t\t\tctx.textBaseline = 'middle';\r\n\t\t\tctx.textAlign = item.textAlign;\r\n\r\n\t\t\tlabel = item.label;\r\n\t\t\ty = item.textOffset;\r\n\t\t\tif (isArray(label)) {\r\n\t\t\t\tfor (j = 0, jlen = label.length; j < jlen; ++j) {\r\n\t\t\t\t\t// We just make sure the multiline element is a string here..\r\n\t\t\t\t\tctx.fillText('' + label[j], 0, y);\r\n\t\t\t\t\ty += tickFont.lineHeight;\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tctx.fillText(label, 0, y);\r\n\t\t\t}\r\n\t\t\tctx.restore();\r\n\t\t}\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_drawTitle: function() {\r\n\t\tvar me = this;\r\n\t\tvar ctx = me.ctx;\r\n\t\tvar options = me.options;\r\n\t\tvar scaleLabel = options.scaleLabel;\r\n\r\n\t\tif (!scaleLabel.display) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tvar scaleLabelFontColor = valueOrDefault$a(scaleLabel.fontColor, core_defaults.global.defaultFontColor);\r\n\t\tvar scaleLabelFont = helpers$1.options._parseFont(scaleLabel);\r\n\t\tvar scaleLabelPadding = helpers$1.options.toPadding(scaleLabel.padding);\r\n\t\tvar halfLineHeight = scaleLabelFont.lineHeight / 2;\r\n\t\tvar position = options.position;\r\n\t\tvar rotation = 0;\r\n\t\tvar scaleLabelX, scaleLabelY;\r\n\r\n\t\tif (me.isHorizontal()) {\r\n\t\t\tscaleLabelX = me.left + me.width / 2; // midpoint of the width\r\n\t\t\tscaleLabelY = position === 'bottom'\r\n\t\t\t\t? me.bottom - halfLineHeight - scaleLabelPadding.bottom\r\n\t\t\t\t: me.top + halfLineHeight + scaleLabelPadding.top;\r\n\t\t} else {\r\n\t\t\tvar isLeft = position === 'left';\r\n\t\t\tscaleLabelX = isLeft\r\n\t\t\t\t? me.left + halfLineHeight + scaleLabelPadding.top\r\n\t\t\t\t: me.right - halfLineHeight - scaleLabelPadding.top;\r\n\t\t\tscaleLabelY = me.top + me.height / 2;\r\n\t\t\trotation = isLeft ? -0.5 * Math.PI : 0.5 * Math.PI;\r\n\t\t}\r\n\r\n\t\tctx.save();\r\n\t\tctx.translate(scaleLabelX, scaleLabelY);\r\n\t\tctx.rotate(rotation);\r\n\t\tctx.textAlign = 'center';\r\n\t\tctx.textBaseline = 'middle';\r\n\t\tctx.fillStyle = scaleLabelFontColor; // render in correct colour\r\n\t\tctx.font = scaleLabelFont.string;\r\n\t\tctx.fillText(scaleLabel.labelString, 0, 0);\r\n\t\tctx.restore();\r\n\t},\r\n\r\n\tdraw: function(chartArea) {\r\n\t\tvar me = this;\r\n\r\n\t\tif (!me._isVisible()) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tme._drawGrid(chartArea);\r\n\t\tme._drawTitle();\r\n\t\tme._drawLabels();\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_layers: function() {\r\n\t\tvar me = this;\r\n\t\tvar opts = me.options;\r\n\t\tvar tz = opts.ticks && opts.ticks.z || 0;\r\n\t\tvar gz = opts.gridLines && opts.gridLines.z || 0;\r\n\r\n\t\tif (!me._isVisible() || tz === gz || me.draw !== me._draw) {\r\n\t\t\t// backward compatibility: draw has been overridden by custom scale\r\n\t\t\treturn [{\r\n\t\t\t\tz: tz,\r\n\t\t\t\tdraw: function() {\r\n\t\t\t\t\tme.draw.apply(me, arguments);\r\n\t\t\t\t}\r\n\t\t\t}];\r\n\t\t}\r\n\r\n\t\treturn [{\r\n\t\t\tz: gz,\r\n\t\t\tdraw: function() {\r\n\t\t\t\tme._drawGrid.apply(me, arguments);\r\n\t\t\t\tme._drawTitle.apply(me, arguments);\r\n\t\t\t}\r\n\t\t}, {\r\n\t\t\tz: tz,\r\n\t\t\tdraw: function() {\r\n\t\t\t\tme._drawLabels.apply(me, arguments);\r\n\t\t\t}\r\n\t\t}];\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_getMatchingVisibleMetas: function(type) {\r\n\t\tvar me = this;\r\n\t\tvar isHorizontal = me.isHorizontal();\r\n\t\treturn me.chart._getSortedVisibleDatasetMetas()\r\n\t\t\t.filter(function(meta) {\r\n\t\t\t\treturn (!type || meta.type === type)\r\n\t\t\t\t\t&& (isHorizontal ? meta.xAxisID === me.id : meta.yAxisID === me.id);\r\n\t\t\t});\r\n\t}\r\n});\r\n\r\nScale.prototype._draw = Scale.prototype.draw;\r\n\r\nvar core_scale = Scale;\n\nvar isNullOrUndef$1 = helpers$1.isNullOrUndef;\r\n\r\nvar defaultConfig = {\r\n\tposition: 'bottom'\r\n};\r\n\r\nvar scale_category = core_scale.extend({\r\n\tdetermineDataLimits: function() {\r\n\t\tvar me = this;\r\n\t\tvar labels = me._getLabels();\r\n\t\tvar ticksOpts = me.options.ticks;\r\n\t\tvar min = ticksOpts.min;\r\n\t\tvar max = ticksOpts.max;\r\n\t\tvar minIndex = 0;\r\n\t\tvar maxIndex = labels.length - 1;\r\n\t\tvar findIndex;\r\n\r\n\t\tif (min !== undefined) {\r\n\t\t\t// user specified min value\r\n\t\t\tfindIndex = labels.indexOf(min);\r\n\t\t\tif (findIndex >= 0) {\r\n\t\t\t\tminIndex = findIndex;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (max !== undefined) {\r\n\t\t\t// user specified max value\r\n\t\t\tfindIndex = labels.indexOf(max);\r\n\t\t\tif (findIndex >= 0) {\r\n\t\t\t\tmaxIndex = findIndex;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tme.minIndex = minIndex;\r\n\t\tme.maxIndex = maxIndex;\r\n\t\tme.min = labels[minIndex];\r\n\t\tme.max = labels[maxIndex];\r\n\t},\r\n\r\n\tbuildTicks: function() {\r\n\t\tvar me = this;\r\n\t\tvar labels = me._getLabels();\r\n\t\tvar minIndex = me.minIndex;\r\n\t\tvar maxIndex = me.maxIndex;\r\n\r\n\t\t// If we are viewing some subset of labels, slice the original array\r\n\t\tme.ticks = (minIndex === 0 && maxIndex === labels.length - 1) ? labels : labels.slice(minIndex, maxIndex + 1);\r\n\t},\r\n\r\n\tgetLabelForIndex: function(index, datasetIndex) {\r\n\t\tvar me = this;\r\n\t\tvar chart = me.chart;\r\n\r\n\t\tif (chart.getDatasetMeta(datasetIndex).controller._getValueScaleId() === me.id) {\r\n\t\t\treturn me.getRightValue(chart.data.datasets[datasetIndex].data[index]);\r\n\t\t}\r\n\r\n\t\treturn me._getLabels()[index];\r\n\t},\r\n\r\n\t_configure: function() {\r\n\t\tvar me = this;\r\n\t\tvar offset = me.options.offset;\r\n\t\tvar ticks = me.ticks;\r\n\r\n\t\tcore_scale.prototype._configure.call(me);\r\n\r\n\t\tif (!me.isHorizontal()) {\r\n\t\t\t// For backward compatibility, vertical category scale reverse is inverted.\r\n\t\t\tme._reversePixels = !me._reversePixels;\r\n\t\t}\r\n\r\n\t\tif (!ticks) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tme._startValue = me.minIndex - (offset ? 0.5 : 0);\r\n\t\tme._valueRange = Math.max(ticks.length - (offset ? 0 : 1), 1);\r\n\t},\r\n\r\n\t// Used to get data value locations.  Value can either be an index or a numerical value\r\n\tgetPixelForValue: function(value, index, datasetIndex) {\r\n\t\tvar me = this;\r\n\t\tvar valueCategory, labels, idx;\r\n\r\n\t\tif (!isNullOrUndef$1(index) && !isNullOrUndef$1(datasetIndex)) {\r\n\t\t\tvalue = me.chart.data.datasets[datasetIndex].data[index];\r\n\t\t}\r\n\r\n\t\t// If value is a data object, then index is the index in the data array,\r\n\t\t// not the index of the scale. We need to change that.\r\n\t\tif (!isNullOrUndef$1(value)) {\r\n\t\t\tvalueCategory = me.isHorizontal() ? value.x : value.y;\r\n\t\t}\r\n\t\tif (valueCategory !== undefined || (value !== undefined && isNaN(index))) {\r\n\t\t\tlabels = me._getLabels();\r\n\t\t\tvalue = helpers$1.valueOrDefault(valueCategory, value);\r\n\t\t\tidx = labels.indexOf(value);\r\n\t\t\tindex = idx !== -1 ? idx : index;\r\n\t\t\tif (isNaN(index)) {\r\n\t\t\t\tindex = value;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn me.getPixelForDecimal((index - me._startValue) / me._valueRange);\r\n\t},\r\n\r\n\tgetPixelForTick: function(index) {\r\n\t\tvar ticks = this.ticks;\r\n\t\treturn index < 0 || index > ticks.length - 1\r\n\t\t\t? null\r\n\t\t\t: this.getPixelForValue(ticks[index], index + this.minIndex);\r\n\t},\r\n\r\n\tgetValueForPixel: function(pixel) {\r\n\t\tvar me = this;\r\n\t\tvar value = Math.round(me._startValue + me.getDecimalForPixel(pixel) * me._valueRange);\r\n\t\treturn Math.min(Math.max(value, 0), me.ticks.length - 1);\r\n\t},\r\n\r\n\tgetBasePixel: function() {\r\n\t\treturn this.bottom;\r\n\t}\r\n});\r\n\r\n// INTERNAL: static default options, registered in src/index.js\r\nvar _defaults = defaultConfig;\nscale_category._defaults = _defaults;\n\nvar noop = helpers$1.noop;\r\nvar isNullOrUndef$2 = helpers$1.isNullOrUndef;\r\n\r\n/**\r\n * Generate a set of linear ticks\r\n * @param generationOptions the options used to generate the ticks\r\n * @param dataRange the range of the data\r\n * @returns {number[]} array of tick values\r\n */\r\nfunction generateTicks(generationOptions, dataRange) {\r\n\tvar ticks = [];\r\n\t// To get a \"nice\" value for the tick spacing, we will use the appropriately named\r\n\t// \"nice number\" algorithm. See https://stackoverflow.com/questions/8506881/nice-label-algorithm-for-charts-with-minimum-ticks\r\n\t// for details.\r\n\r\n\tvar MIN_SPACING = 1e-14;\r\n\tvar stepSize = generationOptions.stepSize;\r\n\tvar unit = stepSize || 1;\r\n\tvar maxNumSpaces = generationOptions.maxTicks - 1;\r\n\tvar min = generationOptions.min;\r\n\tvar max = generationOptions.max;\r\n\tvar precision = generationOptions.precision;\r\n\tvar rmin = dataRange.min;\r\n\tvar rmax = dataRange.max;\r\n\tvar spacing = helpers$1.niceNum((rmax - rmin) / maxNumSpaces / unit) * unit;\r\n\tvar factor, niceMin, niceMax, numSpaces;\r\n\r\n\t// Beyond MIN_SPACING floating point numbers being to lose precision\r\n\t// such that we can't do the math necessary to generate ticks\r\n\tif (spacing < MIN_SPACING && isNullOrUndef$2(min) && isNullOrUndef$2(max)) {\r\n\t\treturn [rmin, rmax];\r\n\t}\r\n\r\n\tnumSpaces = Math.ceil(rmax / spacing) - Math.floor(rmin / spacing);\r\n\tif (numSpaces > maxNumSpaces) {\r\n\t\t// If the calculated num of spaces exceeds maxNumSpaces, recalculate it\r\n\t\tspacing = helpers$1.niceNum(numSpaces * spacing / maxNumSpaces / unit) * unit;\r\n\t}\r\n\r\n\tif (stepSize || isNullOrUndef$2(precision)) {\r\n\t\t// If a precision is not specified, calculate factor based on spacing\r\n\t\tfactor = Math.pow(10, helpers$1._decimalPlaces(spacing));\r\n\t} else {\r\n\t\t// If the user specified a precision, round to that number of decimal places\r\n\t\tfactor = Math.pow(10, precision);\r\n\t\tspacing = Math.ceil(spacing * factor) / factor;\r\n\t}\r\n\r\n\tniceMin = Math.floor(rmin / spacing) * spacing;\r\n\tniceMax = Math.ceil(rmax / spacing) * spacing;\r\n\r\n\t// If min, max and stepSize is set and they make an evenly spaced scale use it.\r\n\tif (stepSize) {\r\n\t\t// If very close to our whole number, use it.\r\n\t\tif (!isNullOrUndef$2(min) && helpers$1.almostWhole(min / spacing, spacing / 1000)) {\r\n\t\t\tniceMin = min;\r\n\t\t}\r\n\t\tif (!isNullOrUndef$2(max) && helpers$1.almostWhole(max / spacing, spacing / 1000)) {\r\n\t\t\tniceMax = max;\r\n\t\t}\r\n\t}\r\n\r\n\tnumSpaces = (niceMax - niceMin) / spacing;\r\n\t// If very close to our rounded value, use it.\r\n\tif (helpers$1.almostEquals(numSpaces, Math.round(numSpaces), spacing / 1000)) {\r\n\t\tnumSpaces = Math.round(numSpaces);\r\n\t} else {\r\n\t\tnumSpaces = Math.ceil(numSpaces);\r\n\t}\r\n\r\n\tniceMin = Math.round(niceMin * factor) / factor;\r\n\tniceMax = Math.round(niceMax * factor) / factor;\r\n\tticks.push(isNullOrUndef$2(min) ? niceMin : min);\r\n\tfor (var j = 1; j < numSpaces; ++j) {\r\n\t\tticks.push(Math.round((niceMin + j * spacing) * factor) / factor);\r\n\t}\r\n\tticks.push(isNullOrUndef$2(max) ? niceMax : max);\r\n\r\n\treturn ticks;\r\n}\r\n\r\nvar scale_linearbase = core_scale.extend({\r\n\tgetRightValue: function(value) {\r\n\t\tif (typeof value === 'string') {\r\n\t\t\treturn +value;\r\n\t\t}\r\n\t\treturn core_scale.prototype.getRightValue.call(this, value);\r\n\t},\r\n\r\n\thandleTickRangeOptions: function() {\r\n\t\tvar me = this;\r\n\t\tvar opts = me.options;\r\n\t\tvar tickOpts = opts.ticks;\r\n\r\n\t\t// If we are forcing it to begin at 0, but 0 will already be rendered on the chart,\r\n\t\t// do nothing since that would make the chart weird. If the user really wants a weird chart\r\n\t\t// axis, they can manually override it\r\n\t\tif (tickOpts.beginAtZero) {\r\n\t\t\tvar minSign = helpers$1.sign(me.min);\r\n\t\t\tvar maxSign = helpers$1.sign(me.max);\r\n\r\n\t\t\tif (minSign < 0 && maxSign < 0) {\r\n\t\t\t\t// move the top up to 0\r\n\t\t\t\tme.max = 0;\r\n\t\t\t} else if (minSign > 0 && maxSign > 0) {\r\n\t\t\t\t// move the bottom down to 0\r\n\t\t\t\tme.min = 0;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tvar setMin = tickOpts.min !== undefined || tickOpts.suggestedMin !== undefined;\r\n\t\tvar setMax = tickOpts.max !== undefined || tickOpts.suggestedMax !== undefined;\r\n\r\n\t\tif (tickOpts.min !== undefined) {\r\n\t\t\tme.min = tickOpts.min;\r\n\t\t} else if (tickOpts.suggestedMin !== undefined) {\r\n\t\t\tif (me.min === null) {\r\n\t\t\t\tme.min = tickOpts.suggestedMin;\r\n\t\t\t} else {\r\n\t\t\t\tme.min = Math.min(me.min, tickOpts.suggestedMin);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (tickOpts.max !== undefined) {\r\n\t\t\tme.max = tickOpts.max;\r\n\t\t} else if (tickOpts.suggestedMax !== undefined) {\r\n\t\t\tif (me.max === null) {\r\n\t\t\t\tme.max = tickOpts.suggestedMax;\r\n\t\t\t} else {\r\n\t\t\t\tme.max = Math.max(me.max, tickOpts.suggestedMax);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (setMin !== setMax) {\r\n\t\t\t// We set the min or the max but not both.\r\n\t\t\t// So ensure that our range is good\r\n\t\t\t// Inverted or 0 length range can happen when\r\n\t\t\t// ticks.min is set, and no datasets are visible\r\n\t\t\tif (me.min >= me.max) {\r\n\t\t\t\tif (setMin) {\r\n\t\t\t\t\tme.max = me.min + 1;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tme.min = me.max - 1;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (me.min === me.max) {\r\n\t\t\tme.max++;\r\n\r\n\t\t\tif (!tickOpts.beginAtZero) {\r\n\t\t\t\tme.min--;\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\tgetTickLimit: function() {\r\n\t\tvar me = this;\r\n\t\tvar tickOpts = me.options.ticks;\r\n\t\tvar stepSize = tickOpts.stepSize;\r\n\t\tvar maxTicksLimit = tickOpts.maxTicksLimit;\r\n\t\tvar maxTicks;\r\n\r\n\t\tif (stepSize) {\r\n\t\t\tmaxTicks = Math.ceil(me.max / stepSize) - Math.floor(me.min / stepSize) + 1;\r\n\t\t} else {\r\n\t\t\tmaxTicks = me._computeTickLimit();\r\n\t\t\tmaxTicksLimit = maxTicksLimit || 11;\r\n\t\t}\r\n\r\n\t\tif (maxTicksLimit) {\r\n\t\t\tmaxTicks = Math.min(maxTicksLimit, maxTicks);\r\n\t\t}\r\n\r\n\t\treturn maxTicks;\r\n\t},\r\n\r\n\t_computeTickLimit: function() {\r\n\t\treturn Number.POSITIVE_INFINITY;\r\n\t},\r\n\r\n\thandleDirectionalChanges: noop,\r\n\r\n\tbuildTicks: function() {\r\n\t\tvar me = this;\r\n\t\tvar opts = me.options;\r\n\t\tvar tickOpts = opts.ticks;\r\n\r\n\t\t// Figure out what the max number of ticks we can support it is based on the size of\r\n\t\t// the axis area. For now, we say that the minimum tick spacing in pixels must be 40\r\n\t\t// We also limit the maximum number of ticks to 11 which gives a nice 10 squares on\r\n\t\t// the graph. Make sure we always have at least 2 ticks\r\n\t\tvar maxTicks = me.getTickLimit();\r\n\t\tmaxTicks = Math.max(2, maxTicks);\r\n\r\n\t\tvar numericGeneratorOptions = {\r\n\t\t\tmaxTicks: maxTicks,\r\n\t\t\tmin: tickOpts.min,\r\n\t\t\tmax: tickOpts.max,\r\n\t\t\tprecision: tickOpts.precision,\r\n\t\t\tstepSize: helpers$1.valueOrDefault(tickOpts.fixedStepSize, tickOpts.stepSize)\r\n\t\t};\r\n\t\tvar ticks = me.ticks = generateTicks(numericGeneratorOptions, me);\r\n\r\n\t\tme.handleDirectionalChanges();\r\n\r\n\t\t// At this point, we need to update our max and min given the tick values since we have expanded the\r\n\t\t// range of the scale\r\n\t\tme.max = helpers$1.max(ticks);\r\n\t\tme.min = helpers$1.min(ticks);\r\n\r\n\t\tif (tickOpts.reverse) {\r\n\t\t\tticks.reverse();\r\n\r\n\t\t\tme.start = me.max;\r\n\t\t\tme.end = me.min;\r\n\t\t} else {\r\n\t\t\tme.start = me.min;\r\n\t\t\tme.end = me.max;\r\n\t\t}\r\n\t},\r\n\r\n\tconvertTicksToLabels: function() {\r\n\t\tvar me = this;\r\n\t\tme.ticksAsNumbers = me.ticks.slice();\r\n\t\tme.zeroLineIndex = me.ticks.indexOf(0);\r\n\r\n\t\tcore_scale.prototype.convertTicksToLabels.call(me);\r\n\t},\r\n\r\n\t_configure: function() {\r\n\t\tvar me = this;\r\n\t\tvar ticks = me.getTicks();\r\n\t\tvar start = me.min;\r\n\t\tvar end = me.max;\r\n\t\tvar offset;\r\n\r\n\t\tcore_scale.prototype._configure.call(me);\r\n\r\n\t\tif (me.options.offset && ticks.length) {\r\n\t\t\toffset = (end - start) / Math.max(ticks.length - 1, 1) / 2;\r\n\t\t\tstart -= offset;\r\n\t\t\tend += offset;\r\n\t\t}\r\n\t\tme._startValue = start;\r\n\t\tme._endValue = end;\r\n\t\tme._valueRange = end - start;\r\n\t}\r\n});\n\nvar defaultConfig$1 = {\r\n\tposition: 'left',\r\n\tticks: {\r\n\t\tcallback: core_ticks.formatters.linear\r\n\t}\r\n};\r\n\r\nvar DEFAULT_MIN = 0;\r\nvar DEFAULT_MAX = 1;\r\n\r\nfunction getOrCreateStack(stacks, stacked, meta) {\r\n\tvar key = [\r\n\t\tmeta.type,\r\n\t\t// we have a separate stack for stack=undefined datasets when the opts.stacked is undefined\r\n\t\tstacked === undefined && meta.stack === undefined ? meta.index : '',\r\n\t\tmeta.stack\r\n\t].join('.');\r\n\r\n\tif (stacks[key] === undefined) {\r\n\t\tstacks[key] = {\r\n\t\t\tpos: [],\r\n\t\t\tneg: []\r\n\t\t};\r\n\t}\r\n\r\n\treturn stacks[key];\r\n}\r\n\r\nfunction stackData(scale, stacks, meta, data) {\r\n\tvar opts = scale.options;\r\n\tvar stacked = opts.stacked;\r\n\tvar stack = getOrCreateStack(stacks, stacked, meta);\r\n\tvar pos = stack.pos;\r\n\tvar neg = stack.neg;\r\n\tvar ilen = data.length;\r\n\tvar i, value;\r\n\r\n\tfor (i = 0; i < ilen; ++i) {\r\n\t\tvalue = scale._parseValue(data[i]);\r\n\t\tif (isNaN(value.min) || isNaN(value.max) || meta.data[i].hidden) {\r\n\t\t\tcontinue;\r\n\t\t}\r\n\r\n\t\tpos[i] = pos[i] || 0;\r\n\t\tneg[i] = neg[i] || 0;\r\n\r\n\t\tif (opts.relativePoints) {\r\n\t\t\tpos[i] = 100;\r\n\t\t} else if (value.min < 0 || value.max < 0) {\r\n\t\t\tneg[i] += value.min;\r\n\t\t} else {\r\n\t\t\tpos[i] += value.max;\r\n\t\t}\r\n\t}\r\n}\r\n\r\nfunction updateMinMax(scale, meta, data) {\r\n\tvar ilen = data.length;\r\n\tvar i, value;\r\n\r\n\tfor (i = 0; i < ilen; ++i) {\r\n\t\tvalue = scale._parseValue(data[i]);\r\n\t\tif (isNaN(value.min) || isNaN(value.max) || meta.data[i].hidden) {\r\n\t\t\tcontinue;\r\n\t\t}\r\n\r\n\t\tscale.min = Math.min(scale.min, value.min);\r\n\t\tscale.max = Math.max(scale.max, value.max);\r\n\t}\r\n}\r\n\r\nvar scale_linear = scale_linearbase.extend({\r\n\tdetermineDataLimits: function() {\r\n\t\tvar me = this;\r\n\t\tvar opts = me.options;\r\n\t\tvar chart = me.chart;\r\n\t\tvar datasets = chart.data.datasets;\r\n\t\tvar metasets = me._getMatchingVisibleMetas();\r\n\t\tvar hasStacks = opts.stacked;\r\n\t\tvar stacks = {};\r\n\t\tvar ilen = metasets.length;\r\n\t\tvar i, meta, data, values;\r\n\r\n\t\tme.min = Number.POSITIVE_INFINITY;\r\n\t\tme.max = Number.NEGATIVE_INFINITY;\r\n\r\n\t\tif (hasStacks === undefined) {\r\n\t\t\tfor (i = 0; !hasStacks && i < ilen; ++i) {\r\n\t\t\t\tmeta = metasets[i];\r\n\t\t\t\thasStacks = meta.stack !== undefined;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfor (i = 0; i < ilen; ++i) {\r\n\t\t\tmeta = metasets[i];\r\n\t\t\tdata = datasets[meta.index].data;\r\n\t\t\tif (hasStacks) {\r\n\t\t\t\tstackData(me, stacks, meta, data);\r\n\t\t\t} else {\r\n\t\t\t\tupdateMinMax(me, meta, data);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\thelpers$1.each(stacks, function(stackValues) {\r\n\t\t\tvalues = stackValues.pos.concat(stackValues.neg);\r\n\t\t\tme.min = Math.min(me.min, helpers$1.min(values));\r\n\t\t\tme.max = Math.max(me.max, helpers$1.max(values));\r\n\t\t});\r\n\r\n\t\tme.min = helpers$1.isFinite(me.min) && !isNaN(me.min) ? me.min : DEFAULT_MIN;\r\n\t\tme.max = helpers$1.isFinite(me.max) && !isNaN(me.max) ? me.max : DEFAULT_MAX;\r\n\r\n\t\t// Common base implementation to handle ticks.min, ticks.max, ticks.beginAtZero\r\n\t\tme.handleTickRangeOptions();\r\n\t},\r\n\r\n\t// Returns the maximum number of ticks based on the scale dimension\r\n\t_computeTickLimit: function() {\r\n\t\tvar me = this;\r\n\t\tvar tickFont;\r\n\r\n\t\tif (me.isHorizontal()) {\r\n\t\t\treturn Math.ceil(me.width / 40);\r\n\t\t}\r\n\t\ttickFont = helpers$1.options._parseFont(me.options.ticks);\r\n\t\treturn Math.ceil(me.height / tickFont.lineHeight);\r\n\t},\r\n\r\n\t// Called after the ticks are built. We need\r\n\thandleDirectionalChanges: function() {\r\n\t\tif (!this.isHorizontal()) {\r\n\t\t\t// We are in a vertical orientation. The top value is the highest. So reverse the array\r\n\t\t\tthis.ticks.reverse();\r\n\t\t}\r\n\t},\r\n\r\n\tgetLabelForIndex: function(index, datasetIndex) {\r\n\t\treturn this._getScaleLabel(this.chart.data.datasets[datasetIndex].data[index]);\r\n\t},\r\n\r\n\t// Utils\r\n\tgetPixelForValue: function(value) {\r\n\t\tvar me = this;\r\n\t\treturn me.getPixelForDecimal((+me.getRightValue(value) - me._startValue) / me._valueRange);\r\n\t},\r\n\r\n\tgetValueForPixel: function(pixel) {\r\n\t\treturn this._startValue + this.getDecimalForPixel(pixel) * this._valueRange;\r\n\t},\r\n\r\n\tgetPixelForTick: function(index) {\r\n\t\tvar ticks = this.ticksAsNumbers;\r\n\t\tif (index < 0 || index > ticks.length - 1) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\treturn this.getPixelForValue(ticks[index]);\r\n\t}\r\n});\r\n\r\n// INTERNAL: static default options, registered in src/index.js\r\nvar _defaults$1 = defaultConfig$1;\nscale_linear._defaults = _defaults$1;\n\nvar valueOrDefault$b = helpers$1.valueOrDefault;\r\nvar log10 = helpers$1.math.log10;\r\n\r\n/**\r\n * Generate a set of logarithmic ticks\r\n * @param generationOptions the options used to generate the ticks\r\n * @param dataRange the range of the data\r\n * @returns {number[]} array of tick values\r\n */\r\nfunction generateTicks$1(generationOptions, dataRange) {\r\n\tvar ticks = [];\r\n\r\n\tvar tickVal = valueOrDefault$b(generationOptions.min, Math.pow(10, Math.floor(log10(dataRange.min))));\r\n\r\n\tvar endExp = Math.floor(log10(dataRange.max));\r\n\tvar endSignificand = Math.ceil(dataRange.max / Math.pow(10, endExp));\r\n\tvar exp, significand;\r\n\r\n\tif (tickVal === 0) {\r\n\t\texp = Math.floor(log10(dataRange.minNotZero));\r\n\t\tsignificand = Math.floor(dataRange.minNotZero / Math.pow(10, exp));\r\n\r\n\t\tticks.push(tickVal);\r\n\t\ttickVal = significand * Math.pow(10, exp);\r\n\t} else {\r\n\t\texp = Math.floor(log10(tickVal));\r\n\t\tsignificand = Math.floor(tickVal / Math.pow(10, exp));\r\n\t}\r\n\tvar precision = exp < 0 ? Math.pow(10, Math.abs(exp)) : 1;\r\n\r\n\tdo {\r\n\t\tticks.push(tickVal);\r\n\r\n\t\t++significand;\r\n\t\tif (significand === 10) {\r\n\t\t\tsignificand = 1;\r\n\t\t\t++exp;\r\n\t\t\tprecision = exp >= 0 ? 1 : precision;\r\n\t\t}\r\n\r\n\t\ttickVal = Math.round(significand * Math.pow(10, exp) * precision) / precision;\r\n\t} while (exp < endExp || (exp === endExp && significand < endSignificand));\r\n\r\n\tvar lastTick = valueOrDefault$b(generationOptions.max, tickVal);\r\n\tticks.push(lastTick);\r\n\r\n\treturn ticks;\r\n}\r\n\r\nvar defaultConfig$2 = {\r\n\tposition: 'left',\r\n\r\n\t// label settings\r\n\tticks: {\r\n\t\tcallback: core_ticks.formatters.logarithmic\r\n\t}\r\n};\r\n\r\n// TODO(v3): change this to positiveOrDefault\r\nfunction nonNegativeOrDefault(value, defaultValue) {\r\n\treturn helpers$1.isFinite(value) && value >= 0 ? value : defaultValue;\r\n}\r\n\r\nvar scale_logarithmic = core_scale.extend({\r\n\tdetermineDataLimits: function() {\r\n\t\tvar me = this;\r\n\t\tvar opts = me.options;\r\n\t\tvar chart = me.chart;\r\n\t\tvar datasets = chart.data.datasets;\r\n\t\tvar isHorizontal = me.isHorizontal();\r\n\t\tfunction IDMatches(meta) {\r\n\t\t\treturn isHorizontal ? meta.xAxisID === me.id : meta.yAxisID === me.id;\r\n\t\t}\r\n\t\tvar datasetIndex, meta, value, data, i, ilen;\r\n\r\n\t\t// Calculate Range\r\n\t\tme.min = Number.POSITIVE_INFINITY;\r\n\t\tme.max = Number.NEGATIVE_INFINITY;\r\n\t\tme.minNotZero = Number.POSITIVE_INFINITY;\r\n\r\n\t\tvar hasStacks = opts.stacked;\r\n\t\tif (hasStacks === undefined) {\r\n\t\t\tfor (datasetIndex = 0; datasetIndex < datasets.length; datasetIndex++) {\r\n\t\t\t\tmeta = chart.getDatasetMeta(datasetIndex);\r\n\t\t\t\tif (chart.isDatasetVisible(datasetIndex) && IDMatches(meta) &&\r\n\t\t\t\t\tmeta.stack !== undefined) {\r\n\t\t\t\t\thasStacks = true;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (opts.stacked || hasStacks) {\r\n\t\t\tvar valuesPerStack = {};\r\n\r\n\t\t\tfor (datasetIndex = 0; datasetIndex < datasets.length; datasetIndex++) {\r\n\t\t\t\tmeta = chart.getDatasetMeta(datasetIndex);\r\n\t\t\t\tvar key = [\r\n\t\t\t\t\tmeta.type,\r\n\t\t\t\t\t// we have a separate stack for stack=undefined datasets when the opts.stacked is undefined\r\n\t\t\t\t\t((opts.stacked === undefined && meta.stack === undefined) ? datasetIndex : ''),\r\n\t\t\t\t\tmeta.stack\r\n\t\t\t\t].join('.');\r\n\r\n\t\t\t\tif (chart.isDatasetVisible(datasetIndex) && IDMatches(meta)) {\r\n\t\t\t\t\tif (valuesPerStack[key] === undefined) {\r\n\t\t\t\t\t\tvaluesPerStack[key] = [];\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tdata = datasets[datasetIndex].data;\r\n\t\t\t\t\tfor (i = 0, ilen = data.length; i < ilen; i++) {\r\n\t\t\t\t\t\tvar values = valuesPerStack[key];\r\n\t\t\t\t\t\tvalue = me._parseValue(data[i]);\r\n\t\t\t\t\t\t// invalid, hidden and negative values are ignored\r\n\t\t\t\t\t\tif (isNaN(value.min) || isNaN(value.max) || meta.data[i].hidden || value.min < 0 || value.max < 0) {\r\n\t\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tvalues[i] = values[i] || 0;\r\n\t\t\t\t\t\tvalues[i] += value.max;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\thelpers$1.each(valuesPerStack, function(valuesForType) {\r\n\t\t\t\tif (valuesForType.length > 0) {\r\n\t\t\t\t\tvar minVal = helpers$1.min(valuesForType);\r\n\t\t\t\t\tvar maxVal = helpers$1.max(valuesForType);\r\n\t\t\t\t\tme.min = Math.min(me.min, minVal);\r\n\t\t\t\t\tme.max = Math.max(me.max, maxVal);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t} else {\r\n\t\t\tfor (datasetIndex = 0; datasetIndex < datasets.length; datasetIndex++) {\r\n\t\t\t\tmeta = chart.getDatasetMeta(datasetIndex);\r\n\t\t\t\tif (chart.isDatasetVisible(datasetIndex) && IDMatches(meta)) {\r\n\t\t\t\t\tdata = datasets[datasetIndex].data;\r\n\t\t\t\t\tfor (i = 0, ilen = data.length; i < ilen; i++) {\r\n\t\t\t\t\t\tvalue = me._parseValue(data[i]);\r\n\t\t\t\t\t\t// invalid, hidden and negative values are ignored\r\n\t\t\t\t\t\tif (isNaN(value.min) || isNaN(value.max) || meta.data[i].hidden || value.min < 0 || value.max < 0) {\r\n\t\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tme.min = Math.min(value.min, me.min);\r\n\t\t\t\t\t\tme.max = Math.max(value.max, me.max);\r\n\r\n\t\t\t\t\t\tif (value.min !== 0) {\r\n\t\t\t\t\t\t\tme.minNotZero = Math.min(value.min, me.minNotZero);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tme.min = helpers$1.isFinite(me.min) ? me.min : null;\r\n\t\tme.max = helpers$1.isFinite(me.max) ? me.max : null;\r\n\t\tme.minNotZero = helpers$1.isFinite(me.minNotZero) ? me.minNotZero : null;\r\n\r\n\t\t// Common base implementation to handle ticks.min, ticks.max\r\n\t\tthis.handleTickRangeOptions();\r\n\t},\r\n\r\n\thandleTickRangeOptions: function() {\r\n\t\tvar me = this;\r\n\t\tvar tickOpts = me.options.ticks;\r\n\t\tvar DEFAULT_MIN = 1;\r\n\t\tvar DEFAULT_MAX = 10;\r\n\r\n\t\tme.min = nonNegativeOrDefault(tickOpts.min, me.min);\r\n\t\tme.max = nonNegativeOrDefault(tickOpts.max, me.max);\r\n\r\n\t\tif (me.min === me.max) {\r\n\t\t\tif (me.min !== 0 && me.min !== null) {\r\n\t\t\t\tme.min = Math.pow(10, Math.floor(log10(me.min)) - 1);\r\n\t\t\t\tme.max = Math.pow(10, Math.floor(log10(me.max)) + 1);\r\n\t\t\t} else {\r\n\t\t\t\tme.min = DEFAULT_MIN;\r\n\t\t\t\tme.max = DEFAULT_MAX;\r\n\t\t\t}\r\n\t\t}\r\n\t\tif (me.min === null) {\r\n\t\t\tme.min = Math.pow(10, Math.floor(log10(me.max)) - 1);\r\n\t\t}\r\n\t\tif (me.max === null) {\r\n\t\t\tme.max = me.min !== 0\r\n\t\t\t\t? Math.pow(10, Math.floor(log10(me.min)) + 1)\r\n\t\t\t\t: DEFAULT_MAX;\r\n\t\t}\r\n\t\tif (me.minNotZero === null) {\r\n\t\t\tif (me.min > 0) {\r\n\t\t\t\tme.minNotZero = me.min;\r\n\t\t\t} else if (me.max < 1) {\r\n\t\t\t\tme.minNotZero = Math.pow(10, Math.floor(log10(me.max)));\r\n\t\t\t} else {\r\n\t\t\t\tme.minNotZero = DEFAULT_MIN;\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\tbuildTicks: function() {\r\n\t\tvar me = this;\r\n\t\tvar tickOpts = me.options.ticks;\r\n\t\tvar reverse = !me.isHorizontal();\r\n\r\n\t\tvar generationOptions = {\r\n\t\t\tmin: nonNegativeOrDefault(tickOpts.min),\r\n\t\t\tmax: nonNegativeOrDefault(tickOpts.max)\r\n\t\t};\r\n\t\tvar ticks = me.ticks = generateTicks$1(generationOptions, me);\r\n\r\n\t\t// At this point, we need to update our max and min given the tick values since we have expanded the\r\n\t\t// range of the scale\r\n\t\tme.max = helpers$1.max(ticks);\r\n\t\tme.min = helpers$1.min(ticks);\r\n\r\n\t\tif (tickOpts.reverse) {\r\n\t\t\treverse = !reverse;\r\n\t\t\tme.start = me.max;\r\n\t\t\tme.end = me.min;\r\n\t\t} else {\r\n\t\t\tme.start = me.min;\r\n\t\t\tme.end = me.max;\r\n\t\t}\r\n\t\tif (reverse) {\r\n\t\t\tticks.reverse();\r\n\t\t}\r\n\t},\r\n\r\n\tconvertTicksToLabels: function() {\r\n\t\tthis.tickValues = this.ticks.slice();\r\n\r\n\t\tcore_scale.prototype.convertTicksToLabels.call(this);\r\n\t},\r\n\r\n\t// Get the correct tooltip label\r\n\tgetLabelForIndex: function(index, datasetIndex) {\r\n\t\treturn this._getScaleLabel(this.chart.data.datasets[datasetIndex].data[index]);\r\n\t},\r\n\r\n\tgetPixelForTick: function(index) {\r\n\t\tvar ticks = this.tickValues;\r\n\t\tif (index < 0 || index > ticks.length - 1) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\treturn this.getPixelForValue(ticks[index]);\r\n\t},\r\n\r\n\t/**\r\n\t * Returns the value of the first tick.\r\n\t * @param {number} value - The minimum not zero value.\r\n\t * @return {number} The first tick value.\r\n\t * @private\r\n\t */\r\n\t_getFirstTickValue: function(value) {\r\n\t\tvar exp = Math.floor(log10(value));\r\n\t\tvar significand = Math.floor(value / Math.pow(10, exp));\r\n\r\n\t\treturn significand * Math.pow(10, exp);\r\n\t},\r\n\r\n\t_configure: function() {\r\n\t\tvar me = this;\r\n\t\tvar start = me.min;\r\n\t\tvar offset = 0;\r\n\r\n\t\tcore_scale.prototype._configure.call(me);\r\n\r\n\t\tif (start === 0) {\r\n\t\t\tstart = me._getFirstTickValue(me.minNotZero);\r\n\t\t\toffset = valueOrDefault$b(me.options.ticks.fontSize, core_defaults.global.defaultFontSize) / me._length;\r\n\t\t}\r\n\r\n\t\tme._startValue = log10(start);\r\n\t\tme._valueOffset = offset;\r\n\t\tme._valueRange = (log10(me.max) - log10(start)) / (1 - offset);\r\n\t},\r\n\r\n\tgetPixelForValue: function(value) {\r\n\t\tvar me = this;\r\n\t\tvar decimal = 0;\r\n\r\n\t\tvalue = +me.getRightValue(value);\r\n\r\n\t\tif (value > me.min && value > 0) {\r\n\t\t\tdecimal = (log10(value) - me._startValue) / me._valueRange + me._valueOffset;\r\n\t\t}\r\n\t\treturn me.getPixelForDecimal(decimal);\r\n\t},\r\n\r\n\tgetValueForPixel: function(pixel) {\r\n\t\tvar me = this;\r\n\t\tvar decimal = me.getDecimalForPixel(pixel);\r\n\t\treturn decimal === 0 && me.min === 0\r\n\t\t\t? 0\r\n\t\t\t: Math.pow(10, me._startValue + (decimal - me._valueOffset) * me._valueRange);\r\n\t}\r\n});\r\n\r\n// INTERNAL: static default options, registered in src/index.js\r\nvar _defaults$2 = defaultConfig$2;\nscale_logarithmic._defaults = _defaults$2;\n\nvar valueOrDefault$c = helpers$1.valueOrDefault;\r\nvar valueAtIndexOrDefault$1 = helpers$1.valueAtIndexOrDefault;\r\nvar resolve$4 = helpers$1.options.resolve;\r\n\r\nvar defaultConfig$3 = {\r\n\tdisplay: true,\r\n\r\n\t// Boolean - Whether to animate scaling the chart from the centre\r\n\tanimate: true,\r\n\tposition: 'chartArea',\r\n\r\n\tangleLines: {\r\n\t\tdisplay: true,\r\n\t\tcolor: 'rgba(0,0,0,0.1)',\r\n\t\tlineWidth: 1,\r\n\t\tborderDash: [],\r\n\t\tborderDashOffset: 0.0\r\n\t},\r\n\r\n\tgridLines: {\r\n\t\tcircular: false\r\n\t},\r\n\r\n\t// label settings\r\n\tticks: {\r\n\t\t// Boolean - Show a backdrop to the scale label\r\n\t\tshowLabelBackdrop: true,\r\n\r\n\t\t// String - The colour of the label backdrop\r\n\t\tbackdropColor: 'rgba(255,255,255,0.75)',\r\n\r\n\t\t// Number - The backdrop padding above & below the label in pixels\r\n\t\tbackdropPaddingY: 2,\r\n\r\n\t\t// Number - The backdrop padding to the side of the label in pixels\r\n\t\tbackdropPaddingX: 2,\r\n\r\n\t\tcallback: core_ticks.formatters.linear\r\n\t},\r\n\r\n\tpointLabels: {\r\n\t\t// Boolean - if true, show point labels\r\n\t\tdisplay: true,\r\n\r\n\t\t// Number - Point label font size in pixels\r\n\t\tfontSize: 10,\r\n\r\n\t\t// Function - Used to convert point labels\r\n\t\tcallback: function(label) {\r\n\t\t\treturn label;\r\n\t\t}\r\n\t}\r\n};\r\n\r\nfunction getTickBackdropHeight(opts) {\r\n\tvar tickOpts = opts.ticks;\r\n\r\n\tif (tickOpts.display && opts.display) {\r\n\t\treturn valueOrDefault$c(tickOpts.fontSize, core_defaults.global.defaultFontSize) + tickOpts.backdropPaddingY * 2;\r\n\t}\r\n\treturn 0;\r\n}\r\n\r\nfunction measureLabelSize(ctx, lineHeight, label) {\r\n\tif (helpers$1.isArray(label)) {\r\n\t\treturn {\r\n\t\t\tw: helpers$1.longestText(ctx, ctx.font, label),\r\n\t\t\th: label.length * lineHeight\r\n\t\t};\r\n\t}\r\n\r\n\treturn {\r\n\t\tw: ctx.measureText(label).width,\r\n\t\th: lineHeight\r\n\t};\r\n}\r\n\r\nfunction determineLimits(angle, pos, size, min, max) {\r\n\tif (angle === min || angle === max) {\r\n\t\treturn {\r\n\t\t\tstart: pos - (size / 2),\r\n\t\t\tend: pos + (size / 2)\r\n\t\t};\r\n\t} else if (angle < min || angle > max) {\r\n\t\treturn {\r\n\t\t\tstart: pos - size,\r\n\t\t\tend: pos\r\n\t\t};\r\n\t}\r\n\r\n\treturn {\r\n\t\tstart: pos,\r\n\t\tend: pos + size\r\n\t};\r\n}\r\n\r\n/**\r\n * Helper function to fit a radial linear scale with point labels\r\n */\r\nfunction fitWithPointLabels(scale) {\r\n\r\n\t// Right, this is really confusing and there is a lot of maths going on here\r\n\t// The gist of the problem is here: https://gist.github.com/nnnick/696cc9c55f4b0beb8fe9\r\n\t//\r\n\t// Reaction: https://dl.dropboxusercontent.com/u/34601363/toomuchscience.gif\r\n\t//\r\n\t// Solution:\r\n\t//\r\n\t// We assume the radius of the polygon is half the size of the canvas at first\r\n\t// at each index we check if the text overlaps.\r\n\t//\r\n\t// Where it does, we store that angle and that index.\r\n\t//\r\n\t// After finding the largest index and angle we calculate how much we need to remove\r\n\t// from the shape radius to move the point inwards by that x.\r\n\t//\r\n\t// We average the left and right distances to get the maximum shape radius that can fit in the box\r\n\t// along with labels.\r\n\t//\r\n\t// Once we have that, we can find the centre point for the chart, by taking the x text protrusion\r\n\t// on each side, removing that from the size, halving it and adding the left x protrusion width.\r\n\t//\r\n\t// This will mean we have a shape fitted to the canvas, as large as it can be with the labels\r\n\t// and position it in the most space efficient manner\r\n\t//\r\n\t// https://dl.dropboxusercontent.com/u/34601363/yeahscience.gif\r\n\r\n\tvar plFont = helpers$1.options._parseFont(scale.options.pointLabels);\r\n\r\n\t// Get maximum radius of the polygon. Either half the height (minus the text width) or half the width.\r\n\t// Use this to calculate the offset + change. - Make sure L/R protrusion is at least 0 to stop issues with centre points\r\n\tvar furthestLimits = {\r\n\t\tl: 0,\r\n\t\tr: scale.width,\r\n\t\tt: 0,\r\n\t\tb: scale.height - scale.paddingTop\r\n\t};\r\n\tvar furthestAngles = {};\r\n\tvar i, textSize, pointPosition;\r\n\r\n\tscale.ctx.font = plFont.string;\r\n\tscale._pointLabelSizes = [];\r\n\r\n\tvar valueCount = scale.chart.data.labels.length;\r\n\tfor (i = 0; i < valueCount; i++) {\r\n\t\tpointPosition = scale.getPointPosition(i, scale.drawingArea + 5);\r\n\t\ttextSize = measureLabelSize(scale.ctx, plFont.lineHeight, scale.pointLabels[i]);\r\n\t\tscale._pointLabelSizes[i] = textSize;\r\n\r\n\t\t// Add quarter circle to make degree 0 mean top of circle\r\n\t\tvar angleRadians = scale.getIndexAngle(i);\r\n\t\tvar angle = helpers$1.toDegrees(angleRadians) % 360;\r\n\t\tvar hLimits = determineLimits(angle, pointPosition.x, textSize.w, 0, 180);\r\n\t\tvar vLimits = determineLimits(angle, pointPosition.y, textSize.h, 90, 270);\r\n\r\n\t\tif (hLimits.start < furthestLimits.l) {\r\n\t\t\tfurthestLimits.l = hLimits.start;\r\n\t\t\tfurthestAngles.l = angleRadians;\r\n\t\t}\r\n\r\n\t\tif (hLimits.end > furthestLimits.r) {\r\n\t\t\tfurthestLimits.r = hLimits.end;\r\n\t\t\tfurthestAngles.r = angleRadians;\r\n\t\t}\r\n\r\n\t\tif (vLimits.start < furthestLimits.t) {\r\n\t\t\tfurthestLimits.t = vLimits.start;\r\n\t\t\tfurthestAngles.t = angleRadians;\r\n\t\t}\r\n\r\n\t\tif (vLimits.end > furthestLimits.b) {\r\n\t\t\tfurthestLimits.b = vLimits.end;\r\n\t\t\tfurthestAngles.b = angleRadians;\r\n\t\t}\r\n\t}\r\n\r\n\tscale.setReductions(scale.drawingArea, furthestLimits, furthestAngles);\r\n}\r\n\r\nfunction getTextAlignForAngle(angle) {\r\n\tif (angle === 0 || angle === 180) {\r\n\t\treturn 'center';\r\n\t} else if (angle < 180) {\r\n\t\treturn 'left';\r\n\t}\r\n\r\n\treturn 'right';\r\n}\r\n\r\nfunction fillText(ctx, text, position, lineHeight) {\r\n\tvar y = position.y + lineHeight / 2;\r\n\tvar i, ilen;\r\n\r\n\tif (helpers$1.isArray(text)) {\r\n\t\tfor (i = 0, ilen = text.length; i < ilen; ++i) {\r\n\t\t\tctx.fillText(text[i], position.x, y);\r\n\t\t\ty += lineHeight;\r\n\t\t}\r\n\t} else {\r\n\t\tctx.fillText(text, position.x, y);\r\n\t}\r\n}\r\n\r\nfunction adjustPointPositionForLabelHeight(angle, textSize, position) {\r\n\tif (angle === 90 || angle === 270) {\r\n\t\tposition.y -= (textSize.h / 2);\r\n\t} else if (angle > 270 || angle < 90) {\r\n\t\tposition.y -= textSize.h;\r\n\t}\r\n}\r\n\r\nfunction drawPointLabels(scale) {\r\n\tvar ctx = scale.ctx;\r\n\tvar opts = scale.options;\r\n\tvar pointLabelOpts = opts.pointLabels;\r\n\tvar tickBackdropHeight = getTickBackdropHeight(opts);\r\n\tvar outerDistance = scale.getDistanceFromCenterForValue(opts.ticks.reverse ? scale.min : scale.max);\r\n\tvar plFont = helpers$1.options._parseFont(pointLabelOpts);\r\n\r\n\tctx.save();\r\n\r\n\tctx.font = plFont.string;\r\n\tctx.textBaseline = 'middle';\r\n\r\n\tfor (var i = scale.chart.data.labels.length - 1; i >= 0; i--) {\r\n\t\t// Extra pixels out for some label spacing\r\n\t\tvar extra = (i === 0 ? tickBackdropHeight / 2 : 0);\r\n\t\tvar pointLabelPosition = scale.getPointPosition(i, outerDistance + extra + 5);\r\n\r\n\t\t// Keep this in loop since we may support array properties here\r\n\t\tvar pointLabelFontColor = valueAtIndexOrDefault$1(pointLabelOpts.fontColor, i, core_defaults.global.defaultFontColor);\r\n\t\tctx.fillStyle = pointLabelFontColor;\r\n\r\n\t\tvar angleRadians = scale.getIndexAngle(i);\r\n\t\tvar angle = helpers$1.toDegrees(angleRadians);\r\n\t\tctx.textAlign = getTextAlignForAngle(angle);\r\n\t\tadjustPointPositionForLabelHeight(angle, scale._pointLabelSizes[i], pointLabelPosition);\r\n\t\tfillText(ctx, scale.pointLabels[i], pointLabelPosition, plFont.lineHeight);\r\n\t}\r\n\tctx.restore();\r\n}\r\n\r\nfunction drawRadiusLine(scale, gridLineOpts, radius, index) {\r\n\tvar ctx = scale.ctx;\r\n\tvar circular = gridLineOpts.circular;\r\n\tvar valueCount = scale.chart.data.labels.length;\r\n\tvar lineColor = valueAtIndexOrDefault$1(gridLineOpts.color, index - 1);\r\n\tvar lineWidth = valueAtIndexOrDefault$1(gridLineOpts.lineWidth, index - 1);\r\n\tvar pointPosition;\r\n\r\n\tif ((!circular && !valueCount) || !lineColor || !lineWidth) {\r\n\t\treturn;\r\n\t}\r\n\r\n\tctx.save();\r\n\tctx.strokeStyle = lineColor;\r\n\tctx.lineWidth = lineWidth;\r\n\tif (ctx.setLineDash) {\r\n\t\tctx.setLineDash(gridLineOpts.borderDash || []);\r\n\t\tctx.lineDashOffset = gridLineOpts.borderDashOffset || 0.0;\r\n\t}\r\n\r\n\tctx.beginPath();\r\n\tif (circular) {\r\n\t\t// Draw circular arcs between the points\r\n\t\tctx.arc(scale.xCenter, scale.yCenter, radius, 0, Math.PI * 2);\r\n\t} else {\r\n\t\t// Draw straight lines connecting each index\r\n\t\tpointPosition = scale.getPointPosition(0, radius);\r\n\t\tctx.moveTo(pointPosition.x, pointPosition.y);\r\n\r\n\t\tfor (var i = 1; i < valueCount; i++) {\r\n\t\t\tpointPosition = scale.getPointPosition(i, radius);\r\n\t\t\tctx.lineTo(pointPosition.x, pointPosition.y);\r\n\t\t}\r\n\t}\r\n\tctx.closePath();\r\n\tctx.stroke();\r\n\tctx.restore();\r\n}\r\n\r\nfunction numberOrZero(param) {\r\n\treturn helpers$1.isNumber(param) ? param : 0;\r\n}\r\n\r\nvar scale_radialLinear = scale_linearbase.extend({\r\n\tsetDimensions: function() {\r\n\t\tvar me = this;\r\n\r\n\t\t// Set the unconstrained dimension before label rotation\r\n\t\tme.width = me.maxWidth;\r\n\t\tme.height = me.maxHeight;\r\n\t\tme.paddingTop = getTickBackdropHeight(me.options) / 2;\r\n\t\tme.xCenter = Math.floor(me.width / 2);\r\n\t\tme.yCenter = Math.floor((me.height - me.paddingTop) / 2);\r\n\t\tme.drawingArea = Math.min(me.height - me.paddingTop, me.width) / 2;\r\n\t},\r\n\r\n\tdetermineDataLimits: function() {\r\n\t\tvar me = this;\r\n\t\tvar chart = me.chart;\r\n\t\tvar min = Number.POSITIVE_INFINITY;\r\n\t\tvar max = Number.NEGATIVE_INFINITY;\r\n\r\n\t\thelpers$1.each(chart.data.datasets, function(dataset, datasetIndex) {\r\n\t\t\tif (chart.isDatasetVisible(datasetIndex)) {\r\n\t\t\t\tvar meta = chart.getDatasetMeta(datasetIndex);\r\n\r\n\t\t\t\thelpers$1.each(dataset.data, function(rawValue, index) {\r\n\t\t\t\t\tvar value = +me.getRightValue(rawValue);\r\n\t\t\t\t\tif (isNaN(value) || meta.data[index].hidden) {\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tmin = Math.min(value, min);\r\n\t\t\t\t\tmax = Math.max(value, max);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tme.min = (min === Number.POSITIVE_INFINITY ? 0 : min);\r\n\t\tme.max = (max === Number.NEGATIVE_INFINITY ? 0 : max);\r\n\r\n\t\t// Common base implementation to handle ticks.min, ticks.max, ticks.beginAtZero\r\n\t\tme.handleTickRangeOptions();\r\n\t},\r\n\r\n\t// Returns the maximum number of ticks based on the scale dimension\r\n\t_computeTickLimit: function() {\r\n\t\treturn Math.ceil(this.drawingArea / getTickBackdropHeight(this.options));\r\n\t},\r\n\r\n\tconvertTicksToLabels: function() {\r\n\t\tvar me = this;\r\n\r\n\t\tscale_linearbase.prototype.convertTicksToLabels.call(me);\r\n\r\n\t\t// Point labels\r\n\t\tme.pointLabels = me.chart.data.labels.map(function() {\r\n\t\t\tvar label = helpers$1.callback(me.options.pointLabels.callback, arguments, me);\r\n\t\t\treturn label || label === 0 ? label : '';\r\n\t\t});\r\n\t},\r\n\r\n\tgetLabelForIndex: function(index, datasetIndex) {\r\n\t\treturn +this.getRightValue(this.chart.data.datasets[datasetIndex].data[index]);\r\n\t},\r\n\r\n\tfit: function() {\r\n\t\tvar me = this;\r\n\t\tvar opts = me.options;\r\n\r\n\t\tif (opts.display && opts.pointLabels.display) {\r\n\t\t\tfitWithPointLabels(me);\r\n\t\t} else {\r\n\t\t\tme.setCenterPoint(0, 0, 0, 0);\r\n\t\t}\r\n\t},\r\n\r\n\t/**\r\n\t * Set radius reductions and determine new radius and center point\r\n\t * @private\r\n\t */\r\n\tsetReductions: function(largestPossibleRadius, furthestLimits, furthestAngles) {\r\n\t\tvar me = this;\r\n\t\tvar radiusReductionLeft = furthestLimits.l / Math.sin(furthestAngles.l);\r\n\t\tvar radiusReductionRight = Math.max(furthestLimits.r - me.width, 0) / Math.sin(furthestAngles.r);\r\n\t\tvar radiusReductionTop = -furthestLimits.t / Math.cos(furthestAngles.t);\r\n\t\tvar radiusReductionBottom = -Math.max(furthestLimits.b - (me.height - me.paddingTop), 0) / Math.cos(furthestAngles.b);\r\n\r\n\t\tradiusReductionLeft = numberOrZero(radiusReductionLeft);\r\n\t\tradiusReductionRight = numberOrZero(radiusReductionRight);\r\n\t\tradiusReductionTop = numberOrZero(radiusReductionTop);\r\n\t\tradiusReductionBottom = numberOrZero(radiusReductionBottom);\r\n\r\n\t\tme.drawingArea = Math.min(\r\n\t\t\tMath.floor(largestPossibleRadius - (radiusReductionLeft + radiusReductionRight) / 2),\r\n\t\t\tMath.floor(largestPossibleRadius - (radiusReductionTop + radiusReductionBottom) / 2));\r\n\t\tme.setCenterPoint(radiusReductionLeft, radiusReductionRight, radiusReductionTop, radiusReductionBottom);\r\n\t},\r\n\r\n\tsetCenterPoint: function(leftMovement, rightMovement, topMovement, bottomMovement) {\r\n\t\tvar me = this;\r\n\t\tvar maxRight = me.width - rightMovement - me.drawingArea;\r\n\t\tvar maxLeft = leftMovement + me.drawingArea;\r\n\t\tvar maxTop = topMovement + me.drawingArea;\r\n\t\tvar maxBottom = (me.height - me.paddingTop) - bottomMovement - me.drawingArea;\r\n\r\n\t\tme.xCenter = Math.floor(((maxLeft + maxRight) / 2) + me.left);\r\n\t\tme.yCenter = Math.floor(((maxTop + maxBottom) / 2) + me.top + me.paddingTop);\r\n\t},\r\n\r\n\tgetIndexAngle: function(index) {\r\n\t\tvar chart = this.chart;\r\n\t\tvar angleMultiplier = 360 / chart.data.labels.length;\r\n\t\tvar options = chart.options || {};\r\n\t\tvar startAngle = options.startAngle || 0;\r\n\r\n\t\t// Start from the top instead of right, so remove a quarter of the circle\r\n\t\tvar angle = (index * angleMultiplier + startAngle) % 360;\r\n\r\n\t\treturn (angle < 0 ? angle + 360 : angle) * Math.PI * 2 / 360;\r\n\t},\r\n\r\n\tgetDistanceFromCenterForValue: function(value) {\r\n\t\tvar me = this;\r\n\r\n\t\tif (helpers$1.isNullOrUndef(value)) {\r\n\t\t\treturn NaN;\r\n\t\t}\r\n\r\n\t\t// Take into account half font size + the yPadding of the top value\r\n\t\tvar scalingFactor = me.drawingArea / (me.max - me.min);\r\n\t\tif (me.options.ticks.reverse) {\r\n\t\t\treturn (me.max - value) * scalingFactor;\r\n\t\t}\r\n\t\treturn (value - me.min) * scalingFactor;\r\n\t},\r\n\r\n\tgetPointPosition: function(index, distanceFromCenter) {\r\n\t\tvar me = this;\r\n\t\tvar thisAngle = me.getIndexAngle(index) - (Math.PI / 2);\r\n\t\treturn {\r\n\t\t\tx: Math.cos(thisAngle) * distanceFromCenter + me.xCenter,\r\n\t\t\ty: Math.sin(thisAngle) * distanceFromCenter + me.yCenter\r\n\t\t};\r\n\t},\r\n\r\n\tgetPointPositionForValue: function(index, value) {\r\n\t\treturn this.getPointPosition(index, this.getDistanceFromCenterForValue(value));\r\n\t},\r\n\r\n\tgetBasePosition: function(index) {\r\n\t\tvar me = this;\r\n\t\tvar min = me.min;\r\n\t\tvar max = me.max;\r\n\r\n\t\treturn me.getPointPositionForValue(index || 0,\r\n\t\t\tme.beginAtZero ? 0 :\r\n\t\t\tmin < 0 && max < 0 ? max :\r\n\t\t\tmin > 0 && max > 0 ? min :\r\n\t\t\t0);\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_drawGrid: function() {\r\n\t\tvar me = this;\r\n\t\tvar ctx = me.ctx;\r\n\t\tvar opts = me.options;\r\n\t\tvar gridLineOpts = opts.gridLines;\r\n\t\tvar angleLineOpts = opts.angleLines;\r\n\t\tvar lineWidth = valueOrDefault$c(angleLineOpts.lineWidth, gridLineOpts.lineWidth);\r\n\t\tvar lineColor = valueOrDefault$c(angleLineOpts.color, gridLineOpts.color);\r\n\t\tvar i, offset, position;\r\n\r\n\t\tif (opts.pointLabels.display) {\r\n\t\t\tdrawPointLabels(me);\r\n\t\t}\r\n\r\n\t\tif (gridLineOpts.display) {\r\n\t\t\thelpers$1.each(me.ticks, function(label, index) {\r\n\t\t\t\tif (index !== 0) {\r\n\t\t\t\t\toffset = me.getDistanceFromCenterForValue(me.ticksAsNumbers[index]);\r\n\t\t\t\t\tdrawRadiusLine(me, gridLineOpts, offset, index);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif (angleLineOpts.display && lineWidth && lineColor) {\r\n\t\t\tctx.save();\r\n\t\t\tctx.lineWidth = lineWidth;\r\n\t\t\tctx.strokeStyle = lineColor;\r\n\t\t\tif (ctx.setLineDash) {\r\n\t\t\t\tctx.setLineDash(resolve$4([angleLineOpts.borderDash, gridLineOpts.borderDash, []]));\r\n\t\t\t\tctx.lineDashOffset = resolve$4([angleLineOpts.borderDashOffset, gridLineOpts.borderDashOffset, 0.0]);\r\n\t\t\t}\r\n\r\n\t\t\tfor (i = me.chart.data.labels.length - 1; i >= 0; i--) {\r\n\t\t\t\toffset = me.getDistanceFromCenterForValue(opts.ticks.reverse ? me.min : me.max);\r\n\t\t\t\tposition = me.getPointPosition(i, offset);\r\n\t\t\t\tctx.beginPath();\r\n\t\t\t\tctx.moveTo(me.xCenter, me.yCenter);\r\n\t\t\t\tctx.lineTo(position.x, position.y);\r\n\t\t\t\tctx.stroke();\r\n\t\t\t}\r\n\r\n\t\t\tctx.restore();\r\n\t\t}\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_drawLabels: function() {\r\n\t\tvar me = this;\r\n\t\tvar ctx = me.ctx;\r\n\t\tvar opts = me.options;\r\n\t\tvar tickOpts = opts.ticks;\r\n\r\n\t\tif (!tickOpts.display) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tvar startAngle = me.getIndexAngle(0);\r\n\t\tvar tickFont = helpers$1.options._parseFont(tickOpts);\r\n\t\tvar tickFontColor = valueOrDefault$c(tickOpts.fontColor, core_defaults.global.defaultFontColor);\r\n\t\tvar offset, width;\r\n\r\n\t\tctx.save();\r\n\t\tctx.font = tickFont.string;\r\n\t\tctx.translate(me.xCenter, me.yCenter);\r\n\t\tctx.rotate(startAngle);\r\n\t\tctx.textAlign = 'center';\r\n\t\tctx.textBaseline = 'middle';\r\n\r\n\t\thelpers$1.each(me.ticks, function(label, index) {\r\n\t\t\tif (index === 0 && !tickOpts.reverse) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\toffset = me.getDistanceFromCenterForValue(me.ticksAsNumbers[index]);\r\n\r\n\t\t\tif (tickOpts.showLabelBackdrop) {\r\n\t\t\t\twidth = ctx.measureText(label).width;\r\n\t\t\t\tctx.fillStyle = tickOpts.backdropColor;\r\n\r\n\t\t\t\tctx.fillRect(\r\n\t\t\t\t\t-width / 2 - tickOpts.backdropPaddingX,\r\n\t\t\t\t\t-offset - tickFont.size / 2 - tickOpts.backdropPaddingY,\r\n\t\t\t\t\twidth + tickOpts.backdropPaddingX * 2,\r\n\t\t\t\t\ttickFont.size + tickOpts.backdropPaddingY * 2\r\n\t\t\t\t);\r\n\t\t\t}\r\n\r\n\t\t\tctx.fillStyle = tickFontColor;\r\n\t\t\tctx.fillText(label, 0, -offset);\r\n\t\t});\r\n\r\n\t\tctx.restore();\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_drawTitle: helpers$1.noop\r\n});\r\n\r\n// INTERNAL: static default options, registered in src/index.js\r\nvar _defaults$3 = defaultConfig$3;\nscale_radialLinear._defaults = _defaults$3;\n\nvar deprecated$1 = helpers$1._deprecated;\r\nvar resolve$5 = helpers$1.options.resolve;\r\nvar valueOrDefault$d = helpers$1.valueOrDefault;\r\n\r\n// Integer constants are from the ES6 spec.\r\nvar MIN_INTEGER = Number.MIN_SAFE_INTEGER || -9007199254740991;\r\nvar MAX_INTEGER = Number.MAX_SAFE_INTEGER || 9007199254740991;\r\n\r\nvar INTERVALS = {\r\n\tmillisecond: {\r\n\t\tcommon: true,\r\n\t\tsize: 1,\r\n\t\tsteps: 1000\r\n\t},\r\n\tsecond: {\r\n\t\tcommon: true,\r\n\t\tsize: 1000,\r\n\t\tsteps: 60\r\n\t},\r\n\tminute: {\r\n\t\tcommon: true,\r\n\t\tsize: 60000,\r\n\t\tsteps: 60\r\n\t},\r\n\thour: {\r\n\t\tcommon: true,\r\n\t\tsize: 3600000,\r\n\t\tsteps: 24\r\n\t},\r\n\tday: {\r\n\t\tcommon: true,\r\n\t\tsize: 86400000,\r\n\t\tsteps: 30\r\n\t},\r\n\tweek: {\r\n\t\tcommon: false,\r\n\t\tsize: 604800000,\r\n\t\tsteps: 4\r\n\t},\r\n\tmonth: {\r\n\t\tcommon: true,\r\n\t\tsize: 2.628e9,\r\n\t\tsteps: 12\r\n\t},\r\n\tquarter: {\r\n\t\tcommon: false,\r\n\t\tsize: 7.884e9,\r\n\t\tsteps: 4\r\n\t},\r\n\tyear: {\r\n\t\tcommon: true,\r\n\t\tsize: 3.154e10\r\n\t}\r\n};\r\n\r\nvar UNITS = Object.keys(INTERVALS);\r\n\r\nfunction sorter(a, b) {\r\n\treturn a - b;\r\n}\r\n\r\nfunction arrayUnique(items) {\r\n\tvar hash = {};\r\n\tvar out = [];\r\n\tvar i, ilen, item;\r\n\r\n\tfor (i = 0, ilen = items.length; i < ilen; ++i) {\r\n\t\titem = items[i];\r\n\t\tif (!hash[item]) {\r\n\t\t\thash[item] = true;\r\n\t\t\tout.push(item);\r\n\t\t}\r\n\t}\r\n\r\n\treturn out;\r\n}\r\n\r\nfunction getMin(options) {\r\n\treturn helpers$1.valueOrDefault(options.time.min, options.ticks.min);\r\n}\r\n\r\nfunction getMax(options) {\r\n\treturn helpers$1.valueOrDefault(options.time.max, options.ticks.max);\r\n}\r\n\r\n/**\r\n * Returns an array of {time, pos} objects used to interpolate a specific `time` or position\r\n * (`pos`) on the scale, by searching entries before and after the requested value. `pos` is\r\n * a decimal between 0 and 1: 0 being the start of the scale (left or top) and 1 the other\r\n * extremity (left + width or top + height). Note that it would be more optimized to directly\r\n * store pre-computed pixels, but the scale dimensions are not guaranteed at the time we need\r\n * to create the lookup table. The table ALWAYS contains at least two items: min and max.\r\n *\r\n * @param {number[]} timestamps - timestamps sorted from lowest to highest.\r\n * @param {string} distribution - If 'linear', timestamps will be spread linearly along the min\r\n * and max range, so basically, the table will contains only two items: {min, 0} and {max, 1}.\r\n * If 'series', timestamps will be positioned at the same distance from each other. In this\r\n * case, only timestamps that break the time linearity are registered, meaning that in the\r\n * best case, all timestamps are linear, the table contains only min and max.\r\n */\r\nfunction buildLookupTable(timestamps, min, max, distribution) {\r\n\tif (distribution === 'linear' || !timestamps.length) {\r\n\t\treturn [\r\n\t\t\t{time: min, pos: 0},\r\n\t\t\t{time: max, pos: 1}\r\n\t\t];\r\n\t}\r\n\r\n\tvar table = [];\r\n\tvar items = [min];\r\n\tvar i, ilen, prev, curr, next;\r\n\r\n\tfor (i = 0, ilen = timestamps.length; i < ilen; ++i) {\r\n\t\tcurr = timestamps[i];\r\n\t\tif (curr > min && curr < max) {\r\n\t\t\titems.push(curr);\r\n\t\t}\r\n\t}\r\n\r\n\titems.push(max);\r\n\r\n\tfor (i = 0, ilen = items.length; i < ilen; ++i) {\r\n\t\tnext = items[i + 1];\r\n\t\tprev = items[i - 1];\r\n\t\tcurr = items[i];\r\n\r\n\t\t// only add points that breaks the scale linearity\r\n\t\tif (prev === undefined || next === undefined || Math.round((next + prev) / 2) !== curr) {\r\n\t\t\ttable.push({time: curr, pos: i / (ilen - 1)});\r\n\t\t}\r\n\t}\r\n\r\n\treturn table;\r\n}\r\n\r\n// @see adapted from https://www.anujgakhar.com/2014/03/01/binary-search-in-javascript/\r\nfunction lookup(table, key, value) {\r\n\tvar lo = 0;\r\n\tvar hi = table.length - 1;\r\n\tvar mid, i0, i1;\r\n\r\n\twhile (lo >= 0 && lo <= hi) {\r\n\t\tmid = (lo + hi) >> 1;\r\n\t\ti0 = table[mid - 1] || null;\r\n\t\ti1 = table[mid];\r\n\r\n\t\tif (!i0) {\r\n\t\t\t// given value is outside table (before first item)\r\n\t\t\treturn {lo: null, hi: i1};\r\n\t\t} else if (i1[key] < value) {\r\n\t\t\tlo = mid + 1;\r\n\t\t} else if (i0[key] > value) {\r\n\t\t\thi = mid - 1;\r\n\t\t} else {\r\n\t\t\treturn {lo: i0, hi: i1};\r\n\t\t}\r\n\t}\r\n\r\n\t// given value is outside table (after last item)\r\n\treturn {lo: i1, hi: null};\r\n}\r\n\r\n/**\r\n * Linearly interpolates the given source `value` using the table items `skey` values and\r\n * returns the associated `tkey` value. For example, interpolate(table, 'time', 42, 'pos')\r\n * returns the position for a timestamp equal to 42. If value is out of bounds, values at\r\n * index [0, 1] or [n - 1, n] are used for the interpolation.\r\n */\r\nfunction interpolate$1(table, skey, sval, tkey) {\r\n\tvar range = lookup(table, skey, sval);\r\n\r\n\t// Note: the lookup table ALWAYS contains at least 2 items (min and max)\r\n\tvar prev = !range.lo ? table[0] : !range.hi ? table[table.length - 2] : range.lo;\r\n\tvar next = !range.lo ? table[1] : !range.hi ? table[table.length - 1] : range.hi;\r\n\r\n\tvar span = next[skey] - prev[skey];\r\n\tvar ratio = span ? (sval - prev[skey]) / span : 0;\r\n\tvar offset = (next[tkey] - prev[tkey]) * ratio;\r\n\r\n\treturn prev[tkey] + offset;\r\n}\r\n\r\nfunction toTimestamp(scale, input) {\r\n\tvar adapter = scale._adapter;\r\n\tvar options = scale.options.time;\r\n\tvar parser = options.parser;\r\n\tvar format = parser || options.format;\r\n\tvar value = input;\r\n\r\n\tif (typeof parser === 'function') {\r\n\t\tvalue = parser(value);\r\n\t}\r\n\r\n\t// Only parse if its not a timestamp already\r\n\tif (!helpers$1.isFinite(value)) {\r\n\t\tvalue = typeof format === 'string'\r\n\t\t\t? adapter.parse(value, format)\r\n\t\t\t: adapter.parse(value);\r\n\t}\r\n\r\n\tif (value !== null) {\r\n\t\treturn +value;\r\n\t}\r\n\r\n\t// Labels are in an incompatible format and no `parser` has been provided.\r\n\t// The user might still use the deprecated `format` option for parsing.\r\n\tif (!parser && typeof format === 'function') {\r\n\t\tvalue = format(input);\r\n\r\n\t\t// `format` could return something else than a timestamp, if so, parse it\r\n\t\tif (!helpers$1.isFinite(value)) {\r\n\t\t\tvalue = adapter.parse(value);\r\n\t\t}\r\n\t}\r\n\r\n\treturn value;\r\n}\r\n\r\nfunction parse(scale, input) {\r\n\tif (helpers$1.isNullOrUndef(input)) {\r\n\t\treturn null;\r\n\t}\r\n\r\n\tvar options = scale.options.time;\r\n\tvar value = toTimestamp(scale, scale.getRightValue(input));\r\n\tif (value === null) {\r\n\t\treturn value;\r\n\t}\r\n\r\n\tif (options.round) {\r\n\t\tvalue = +scale._adapter.startOf(value, options.round);\r\n\t}\r\n\r\n\treturn value;\r\n}\r\n\r\n/**\r\n * Figures out what unit results in an appropriate number of auto-generated ticks\r\n */\r\nfunction determineUnitForAutoTicks(minUnit, min, max, capacity) {\r\n\tvar ilen = UNITS.length;\r\n\tvar i, interval, factor;\r\n\r\n\tfor (i = UNITS.indexOf(minUnit); i < ilen - 1; ++i) {\r\n\t\tinterval = INTERVALS[UNITS[i]];\r\n\t\tfactor = interval.steps ? interval.steps : MAX_INTEGER;\r\n\r\n\t\tif (interval.common && Math.ceil((max - min) / (factor * interval.size)) <= capacity) {\r\n\t\t\treturn UNITS[i];\r\n\t\t}\r\n\t}\r\n\r\n\treturn UNITS[ilen - 1];\r\n}\r\n\r\n/**\r\n * Figures out what unit to format a set of ticks with\r\n */\r\nfunction determineUnitForFormatting(scale, numTicks, minUnit, min, max) {\r\n\tvar i, unit;\r\n\r\n\tfor (i = UNITS.length - 1; i >= UNITS.indexOf(minUnit); i--) {\r\n\t\tunit = UNITS[i];\r\n\t\tif (INTERVALS[unit].common && scale._adapter.diff(max, min, unit) >= numTicks - 1) {\r\n\t\t\treturn unit;\r\n\t\t}\r\n\t}\r\n\r\n\treturn UNITS[minUnit ? UNITS.indexOf(minUnit) : 0];\r\n}\r\n\r\nfunction determineMajorUnit(unit) {\r\n\tfor (var i = UNITS.indexOf(unit) + 1, ilen = UNITS.length; i < ilen; ++i) {\r\n\t\tif (INTERVALS[UNITS[i]].common) {\r\n\t\t\treturn UNITS[i];\r\n\t\t}\r\n\t}\r\n}\r\n\r\n/**\r\n * Generates a maximum of `capacity` timestamps between min and max, rounded to the\r\n * `minor` unit using the given scale time `options`.\r\n * Important: this method can return ticks outside the min and max range, it's the\r\n * responsibility of the calling code to clamp values if needed.\r\n */\r\nfunction generate(scale, min, max, capacity) {\r\n\tvar adapter = scale._adapter;\r\n\tvar options = scale.options;\r\n\tvar timeOpts = options.time;\r\n\tvar minor = timeOpts.unit || determineUnitForAutoTicks(timeOpts.minUnit, min, max, capacity);\r\n\tvar stepSize = resolve$5([timeOpts.stepSize, timeOpts.unitStepSize, 1]);\r\n\tvar weekday = minor === 'week' ? timeOpts.isoWeekday : false;\r\n\tvar first = min;\r\n\tvar ticks = [];\r\n\tvar time;\r\n\r\n\t// For 'week' unit, handle the first day of week option\r\n\tif (weekday) {\r\n\t\tfirst = +adapter.startOf(first, 'isoWeek', weekday);\r\n\t}\r\n\r\n\t// Align first ticks on unit\r\n\tfirst = +adapter.startOf(first, weekday ? 'day' : minor);\r\n\r\n\t// Prevent browser from freezing in case user options request millions of milliseconds\r\n\tif (adapter.diff(max, min, minor) > 100000 * stepSize) {\r\n\t\tthrow min + ' and ' + max + ' are too far apart with stepSize of ' + stepSize + ' ' + minor;\r\n\t}\r\n\r\n\tfor (time = first; time < max; time = +adapter.add(time, stepSize, minor)) {\r\n\t\tticks.push(time);\r\n\t}\r\n\r\n\tif (time === max || options.bounds === 'ticks') {\r\n\t\tticks.push(time);\r\n\t}\r\n\r\n\treturn ticks;\r\n}\r\n\r\n/**\r\n * Returns the start and end offsets from edges in the form of {start, end}\r\n * where each value is a relative width to the scale and ranges between 0 and 1.\r\n * They add extra margins on the both sides by scaling down the original scale.\r\n * Offsets are added when the `offset` option is true.\r\n */\r\nfunction computeOffsets(table, ticks, min, max, options) {\r\n\tvar start = 0;\r\n\tvar end = 0;\r\n\tvar first, last;\r\n\r\n\tif (options.offset && ticks.length) {\r\n\t\tfirst = interpolate$1(table, 'time', ticks[0], 'pos');\r\n\t\tif (ticks.length === 1) {\r\n\t\t\tstart = 1 - first;\r\n\t\t} else {\r\n\t\t\tstart = (interpolate$1(table, 'time', ticks[1], 'pos') - first) / 2;\r\n\t\t}\r\n\t\tlast = interpolate$1(table, 'time', ticks[ticks.length - 1], 'pos');\r\n\t\tif (ticks.length === 1) {\r\n\t\t\tend = last;\r\n\t\t} else {\r\n\t\t\tend = (last - interpolate$1(table, 'time', ticks[ticks.length - 2], 'pos')) / 2;\r\n\t\t}\r\n\t}\r\n\r\n\treturn {start: start, end: end, factor: 1 / (start + 1 + end)};\r\n}\r\n\r\nfunction setMajorTicks(scale, ticks, map, majorUnit) {\r\n\tvar adapter = scale._adapter;\r\n\tvar first = +adapter.startOf(ticks[0].value, majorUnit);\r\n\tvar last = ticks[ticks.length - 1].value;\r\n\tvar major, index;\r\n\r\n\tfor (major = first; major <= last; major = +adapter.add(major, 1, majorUnit)) {\r\n\t\tindex = map[major];\r\n\t\tif (index >= 0) {\r\n\t\t\tticks[index].major = true;\r\n\t\t}\r\n\t}\r\n\treturn ticks;\r\n}\r\n\r\nfunction ticksFromTimestamps(scale, values, majorUnit) {\r\n\tvar ticks = [];\r\n\tvar map = {};\r\n\tvar ilen = values.length;\r\n\tvar i, value;\r\n\r\n\tfor (i = 0; i < ilen; ++i) {\r\n\t\tvalue = values[i];\r\n\t\tmap[value] = i;\r\n\r\n\t\tticks.push({\r\n\t\t\tvalue: value,\r\n\t\t\tmajor: false\r\n\t\t});\r\n\t}\r\n\r\n\t// We set the major ticks separately from the above loop because calling startOf for every tick\r\n\t// is expensive when there is a large number of ticks\r\n\treturn (ilen === 0 || !majorUnit) ? ticks : setMajorTicks(scale, ticks, map, majorUnit);\r\n}\r\n\r\nvar defaultConfig$4 = {\r\n\tposition: 'bottom',\r\n\r\n\t/**\r\n\t * Data distribution along the scale:\r\n\t * - 'linear': data are spread according to their time (distances can vary),\r\n\t * - 'series': data are spread at the same distance from each other.\r\n\t * @see https://github.com/chartjs/Chart.js/pull/4507\r\n\t * @since 2.7.0\r\n\t */\r\n\tdistribution: 'linear',\r\n\r\n\t/**\r\n\t * Scale boundary strategy (bypassed by min/max time options)\r\n\t * - `data`: make sure data are fully visible, ticks outside are removed\r\n\t * - `ticks`: make sure ticks are fully visible, data outside are truncated\r\n\t * @see https://github.com/chartjs/Chart.js/pull/4556\r\n\t * @since 2.7.0\r\n\t */\r\n\tbounds: 'data',\r\n\r\n\tadapters: {},\r\n\ttime: {\r\n\t\tparser: false, // false == a pattern string from https://momentjs.com/docs/#/parsing/string-format/ or a custom callback that converts its argument to a moment\r\n\t\tunit: false, // false == automatic or override with week, month, year, etc.\r\n\t\tround: false, // none, or override with week, month, year, etc.\r\n\t\tdisplayFormat: false, // DEPRECATED\r\n\t\tisoWeekday: false, // override week start day - see https://momentjs.com/docs/#/get-set/iso-weekday/\r\n\t\tminUnit: 'millisecond',\r\n\t\tdisplayFormats: {}\r\n\t},\r\n\tticks: {\r\n\t\tautoSkip: false,\r\n\r\n\t\t/**\r\n\t\t * Ticks generation input values:\r\n\t\t * - 'auto': generates \"optimal\" ticks based on scale size and time options.\r\n\t\t * - 'data': generates ticks from data (including labels from data {t|x|y} objects).\r\n\t\t * - 'labels': generates ticks from user given `data.labels` values ONLY.\r\n\t\t * @see https://github.com/chartjs/Chart.js/pull/4507\r\n\t\t * @since 2.7.0\r\n\t\t */\r\n\t\tsource: 'auto',\r\n\r\n\t\tmajor: {\r\n\t\t\tenabled: false\r\n\t\t}\r\n\t}\r\n};\r\n\r\nvar scale_time = core_scale.extend({\r\n\tinitialize: function() {\r\n\t\tthis.mergeTicksOptions();\r\n\t\tcore_scale.prototype.initialize.call(this);\r\n\t},\r\n\r\n\tupdate: function() {\r\n\t\tvar me = this;\r\n\t\tvar options = me.options;\r\n\t\tvar time = options.time || (options.time = {});\r\n\t\tvar adapter = me._adapter = new core_adapters._date(options.adapters.date);\r\n\r\n\t\t// DEPRECATIONS: output a message only one time per update\r\n\t\tdeprecated$1('time scale', time.format, 'time.format', 'time.parser');\r\n\t\tdeprecated$1('time scale', time.min, 'time.min', 'ticks.min');\r\n\t\tdeprecated$1('time scale', time.max, 'time.max', 'ticks.max');\r\n\r\n\t\t// Backward compatibility: before introducing adapter, `displayFormats` was\r\n\t\t// supposed to contain *all* unit/string pairs but this can't be resolved\r\n\t\t// when loading the scale (adapters are loaded afterward), so let's populate\r\n\t\t// missing formats on update\r\n\t\thelpers$1.mergeIf(time.displayFormats, adapter.formats());\r\n\r\n\t\treturn core_scale.prototype.update.apply(me, arguments);\r\n\t},\r\n\r\n\t/**\r\n\t * Allows data to be referenced via 't' attribute\r\n\t */\r\n\tgetRightValue: function(rawValue) {\r\n\t\tif (rawValue && rawValue.t !== undefined) {\r\n\t\t\trawValue = rawValue.t;\r\n\t\t}\r\n\t\treturn core_scale.prototype.getRightValue.call(this, rawValue);\r\n\t},\r\n\r\n\tdetermineDataLimits: function() {\r\n\t\tvar me = this;\r\n\t\tvar chart = me.chart;\r\n\t\tvar adapter = me._adapter;\r\n\t\tvar options = me.options;\r\n\t\tvar unit = options.time.unit || 'day';\r\n\t\tvar min = MAX_INTEGER;\r\n\t\tvar max = MIN_INTEGER;\r\n\t\tvar timestamps = [];\r\n\t\tvar datasets = [];\r\n\t\tvar labels = [];\r\n\t\tvar i, j, ilen, jlen, data, timestamp, labelsAdded;\r\n\t\tvar dataLabels = me._getLabels();\r\n\r\n\t\tfor (i = 0, ilen = dataLabels.length; i < ilen; ++i) {\r\n\t\t\tlabels.push(parse(me, dataLabels[i]));\r\n\t\t}\r\n\r\n\t\tfor (i = 0, ilen = (chart.data.datasets || []).length; i < ilen; ++i) {\r\n\t\t\tif (chart.isDatasetVisible(i)) {\r\n\t\t\t\tdata = chart.data.datasets[i].data;\r\n\r\n\t\t\t\t// Let's consider that all data have the same format.\r\n\t\t\t\tif (helpers$1.isObject(data[0])) {\r\n\t\t\t\t\tdatasets[i] = [];\r\n\r\n\t\t\t\t\tfor (j = 0, jlen = data.length; j < jlen; ++j) {\r\n\t\t\t\t\t\ttimestamp = parse(me, data[j]);\r\n\t\t\t\t\t\ttimestamps.push(timestamp);\r\n\t\t\t\t\t\tdatasets[i][j] = timestamp;\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\tdatasets[i] = labels.slice(0);\r\n\t\t\t\t\tif (!labelsAdded) {\r\n\t\t\t\t\t\ttimestamps = timestamps.concat(labels);\r\n\t\t\t\t\t\tlabelsAdded = true;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tdatasets[i] = [];\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (labels.length) {\r\n\t\t\tmin = Math.min(min, labels[0]);\r\n\t\t\tmax = Math.max(max, labels[labels.length - 1]);\r\n\t\t}\r\n\r\n\t\tif (timestamps.length) {\r\n\t\t\ttimestamps = ilen > 1 ? arrayUnique(timestamps).sort(sorter) : timestamps.sort(sorter);\r\n\t\t\tmin = Math.min(min, timestamps[0]);\r\n\t\t\tmax = Math.max(max, timestamps[timestamps.length - 1]);\r\n\t\t}\r\n\r\n\t\tmin = parse(me, getMin(options)) || min;\r\n\t\tmax = parse(me, getMax(options)) || max;\r\n\r\n\t\t// In case there is no valid min/max, set limits based on unit time option\r\n\t\tmin = min === MAX_INTEGER ? +adapter.startOf(Date.now(), unit) : min;\r\n\t\tmax = max === MIN_INTEGER ? +adapter.endOf(Date.now(), unit) + 1 : max;\r\n\r\n\t\t// Make sure that max is strictly higher than min (required by the lookup table)\r\n\t\tme.min = Math.min(min, max);\r\n\t\tme.max = Math.max(min + 1, max);\r\n\r\n\t\t// PRIVATE\r\n\t\tme._table = [];\r\n\t\tme._timestamps = {\r\n\t\t\tdata: timestamps,\r\n\t\t\tdatasets: datasets,\r\n\t\t\tlabels: labels\r\n\t\t};\r\n\t},\r\n\r\n\tbuildTicks: function() {\r\n\t\tvar me = this;\r\n\t\tvar min = me.min;\r\n\t\tvar max = me.max;\r\n\t\tvar options = me.options;\r\n\t\tvar tickOpts = options.ticks;\r\n\t\tvar timeOpts = options.time;\r\n\t\tvar timestamps = me._timestamps;\r\n\t\tvar ticks = [];\r\n\t\tvar capacity = me.getLabelCapacity(min);\r\n\t\tvar source = tickOpts.source;\r\n\t\tvar distribution = options.distribution;\r\n\t\tvar i, ilen, timestamp;\r\n\r\n\t\tif (source === 'data' || (source === 'auto' && distribution === 'series')) {\r\n\t\t\ttimestamps = timestamps.data;\r\n\t\t} else if (source === 'labels') {\r\n\t\t\ttimestamps = timestamps.labels;\r\n\t\t} else {\r\n\t\t\ttimestamps = generate(me, min, max, capacity);\r\n\t\t}\r\n\r\n\t\tif (options.bounds === 'ticks' && timestamps.length) {\r\n\t\t\tmin = timestamps[0];\r\n\t\t\tmax = timestamps[timestamps.length - 1];\r\n\t\t}\r\n\r\n\t\t// Enforce limits with user min/max options\r\n\t\tmin = parse(me, getMin(options)) || min;\r\n\t\tmax = parse(me, getMax(options)) || max;\r\n\r\n\t\t// Remove ticks outside the min/max range\r\n\t\tfor (i = 0, ilen = timestamps.length; i < ilen; ++i) {\r\n\t\t\ttimestamp = timestamps[i];\r\n\t\t\tif (timestamp >= min && timestamp <= max) {\r\n\t\t\t\tticks.push(timestamp);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tme.min = min;\r\n\t\tme.max = max;\r\n\r\n\t\t// PRIVATE\r\n\t\t// determineUnitForFormatting relies on the number of ticks so we don't use it when\r\n\t\t// autoSkip is enabled because we don't yet know what the final number of ticks will be\r\n\t\tme._unit = timeOpts.unit || (tickOpts.autoSkip\r\n\t\t\t? determineUnitForAutoTicks(timeOpts.minUnit, me.min, me.max, capacity)\r\n\t\t\t: determineUnitForFormatting(me, ticks.length, timeOpts.minUnit, me.min, me.max));\r\n\t\tme._majorUnit = !tickOpts.major.enabled || me._unit === 'year' ? undefined\r\n\t\t\t: determineMajorUnit(me._unit);\r\n\t\tme._table = buildLookupTable(me._timestamps.data, min, max, distribution);\r\n\t\tme._offsets = computeOffsets(me._table, ticks, min, max, options);\r\n\r\n\t\tif (tickOpts.reverse) {\r\n\t\t\tticks.reverse();\r\n\t\t}\r\n\r\n\t\treturn ticksFromTimestamps(me, ticks, me._majorUnit);\r\n\t},\r\n\r\n\tgetLabelForIndex: function(index, datasetIndex) {\r\n\t\tvar me = this;\r\n\t\tvar adapter = me._adapter;\r\n\t\tvar data = me.chart.data;\r\n\t\tvar timeOpts = me.options.time;\r\n\t\tvar label = data.labels && index < data.labels.length ? data.labels[index] : '';\r\n\t\tvar value = data.datasets[datasetIndex].data[index];\r\n\r\n\t\tif (helpers$1.isObject(value)) {\r\n\t\t\tlabel = me.getRightValue(value);\r\n\t\t}\r\n\t\tif (timeOpts.tooltipFormat) {\r\n\t\t\treturn adapter.format(toTimestamp(me, label), timeOpts.tooltipFormat);\r\n\t\t}\r\n\t\tif (typeof label === 'string') {\r\n\t\t\treturn label;\r\n\t\t}\r\n\t\treturn adapter.format(toTimestamp(me, label), timeOpts.displayFormats.datetime);\r\n\t},\r\n\r\n\t/**\r\n\t * Function to format an individual tick mark\r\n\t * @private\r\n\t */\r\n\ttickFormatFunction: function(time, index, ticks, format) {\r\n\t\tvar me = this;\r\n\t\tvar adapter = me._adapter;\r\n\t\tvar options = me.options;\r\n\t\tvar formats = options.time.displayFormats;\r\n\t\tvar minorFormat = formats[me._unit];\r\n\t\tvar majorUnit = me._majorUnit;\r\n\t\tvar majorFormat = formats[majorUnit];\r\n\t\tvar tick = ticks[index];\r\n\t\tvar tickOpts = options.ticks;\r\n\t\tvar major = majorUnit && majorFormat && tick && tick.major;\r\n\t\tvar label = adapter.format(time, format ? format : major ? majorFormat : minorFormat);\r\n\t\tvar nestedTickOpts = major ? tickOpts.major : tickOpts.minor;\r\n\t\tvar formatter = resolve$5([\r\n\t\t\tnestedTickOpts.callback,\r\n\t\t\tnestedTickOpts.userCallback,\r\n\t\t\ttickOpts.callback,\r\n\t\t\ttickOpts.userCallback\r\n\t\t]);\r\n\r\n\t\treturn formatter ? formatter(label, index, ticks) : label;\r\n\t},\r\n\r\n\tconvertTicksToLabels: function(ticks) {\r\n\t\tvar labels = [];\r\n\t\tvar i, ilen;\r\n\r\n\t\tfor (i = 0, ilen = ticks.length; i < ilen; ++i) {\r\n\t\t\tlabels.push(this.tickFormatFunction(ticks[i].value, i, ticks));\r\n\t\t}\r\n\r\n\t\treturn labels;\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\tgetPixelForOffset: function(time) {\r\n\t\tvar me = this;\r\n\t\tvar offsets = me._offsets;\r\n\t\tvar pos = interpolate$1(me._table, 'time', time, 'pos');\r\n\t\treturn me.getPixelForDecimal((offsets.start + pos) * offsets.factor);\r\n\t},\r\n\r\n\tgetPixelForValue: function(value, index, datasetIndex) {\r\n\t\tvar me = this;\r\n\t\tvar time = null;\r\n\r\n\t\tif (index !== undefined && datasetIndex !== undefined) {\r\n\t\t\ttime = me._timestamps.datasets[datasetIndex][index];\r\n\t\t}\r\n\r\n\t\tif (time === null) {\r\n\t\t\ttime = parse(me, value);\r\n\t\t}\r\n\r\n\t\tif (time !== null) {\r\n\t\t\treturn me.getPixelForOffset(time);\r\n\t\t}\r\n\t},\r\n\r\n\tgetPixelForTick: function(index) {\r\n\t\tvar ticks = this.getTicks();\r\n\t\treturn index >= 0 && index < ticks.length ?\r\n\t\t\tthis.getPixelForOffset(ticks[index].value) :\r\n\t\t\tnull;\r\n\t},\r\n\r\n\tgetValueForPixel: function(pixel) {\r\n\t\tvar me = this;\r\n\t\tvar offsets = me._offsets;\r\n\t\tvar pos = me.getDecimalForPixel(pixel) / offsets.factor - offsets.end;\r\n\t\tvar time = interpolate$1(me._table, 'pos', pos, 'time');\r\n\r\n\t\t// DEPRECATION, we should return time directly\r\n\t\treturn me._adapter._create(time);\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_getLabelSize: function(label) {\r\n\t\tvar me = this;\r\n\t\tvar ticksOpts = me.options.ticks;\r\n\t\tvar tickLabelWidth = me.ctx.measureText(label).width;\r\n\t\tvar angle = helpers$1.toRadians(me.isHorizontal() ? ticksOpts.maxRotation : ticksOpts.minRotation);\r\n\t\tvar cosRotation = Math.cos(angle);\r\n\t\tvar sinRotation = Math.sin(angle);\r\n\t\tvar tickFontSize = valueOrDefault$d(ticksOpts.fontSize, core_defaults.global.defaultFontSize);\r\n\r\n\t\treturn {\r\n\t\t\tw: (tickLabelWidth * cosRotation) + (tickFontSize * sinRotation),\r\n\t\t\th: (tickLabelWidth * sinRotation) + (tickFontSize * cosRotation)\r\n\t\t};\r\n\t},\r\n\r\n\t/**\r\n\t * Crude approximation of what the label width might be\r\n\t * @private\r\n\t */\r\n\tgetLabelWidth: function(label) {\r\n\t\treturn this._getLabelSize(label).w;\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\tgetLabelCapacity: function(exampleTime) {\r\n\t\tvar me = this;\r\n\t\tvar timeOpts = me.options.time;\r\n\t\tvar displayFormats = timeOpts.displayFormats;\r\n\r\n\t\t// pick the longest format (milliseconds) for guestimation\r\n\t\tvar format = displayFormats[timeOpts.unit] || displayFormats.millisecond;\r\n\t\tvar exampleLabel = me.tickFormatFunction(exampleTime, 0, ticksFromTimestamps(me, [exampleTime], me._majorUnit), format);\r\n\t\tvar size = me._getLabelSize(exampleLabel);\r\n\t\tvar capacity = Math.floor(me.isHorizontal() ? me.width / size.w : me.height / size.h);\r\n\r\n\t\tif (me.options.offset) {\r\n\t\t\tcapacity--;\r\n\t\t}\r\n\r\n\t\treturn capacity > 0 ? capacity : 1;\r\n\t}\r\n});\r\n\r\n// INTERNAL: static default options, registered in src/index.js\r\nvar _defaults$4 = defaultConfig$4;\nscale_time._defaults = _defaults$4;\n\nvar scales = {\r\n\tcategory: scale_category,\r\n\tlinear: scale_linear,\r\n\tlogarithmic: scale_logarithmic,\r\n\tradialLinear: scale_radialLinear,\r\n\ttime: scale_time\r\n};\n\nvar FORMATS = {\r\n\tdatetime: 'MMM D, YYYY, h:mm:ss a',\r\n\tmillisecond: 'h:mm:ss.SSS a',\r\n\tsecond: 'h:mm:ss a',\r\n\tminute: 'h:mm a',\r\n\thour: 'hA',\r\n\tday: 'MMM D',\r\n\tweek: 'll',\r\n\tmonth: 'MMM YYYY',\r\n\tquarter: '[Q]Q - YYYY',\r\n\tyear: 'YYYY'\r\n};\r\n\r\ncore_adapters._date.override(typeof moment === 'function' ? {\r\n\t_id: 'moment', // DEBUG ONLY\r\n\r\n\tformats: function() {\r\n\t\treturn FORMATS;\r\n\t},\r\n\r\n\tparse: function(value, format) {\r\n\t\tif (typeof value === 'string' && typeof format === 'string') {\r\n\t\t\tvalue = moment(value, format);\r\n\t\t} else if (!(value instanceof moment)) {\r\n\t\t\tvalue = moment(value);\r\n\t\t}\r\n\t\treturn value.isValid() ? value.valueOf() : null;\r\n\t},\r\n\r\n\tformat: function(time, format) {\r\n\t\treturn moment(time).format(format);\r\n\t},\r\n\r\n\tadd: function(time, amount, unit) {\r\n\t\treturn moment(time).add(amount, unit).valueOf();\r\n\t},\r\n\r\n\tdiff: function(max, min, unit) {\r\n\t\treturn moment(max).diff(moment(min), unit);\r\n\t},\r\n\r\n\tstartOf: function(time, unit, weekday) {\r\n\t\ttime = moment(time);\r\n\t\tif (unit === 'isoWeek') {\r\n\t\t\treturn time.isoWeekday(weekday).valueOf();\r\n\t\t}\r\n\t\treturn time.startOf(unit).valueOf();\r\n\t},\r\n\r\n\tendOf: function(time, unit) {\r\n\t\treturn moment(time).endOf(unit).valueOf();\r\n\t},\r\n\r\n\t// DEPRECATIONS\r\n\r\n\t/**\r\n\t * Provided for backward compatibility with scale.getValueForPixel().\r\n\t * @deprecated since version 2.8.0\r\n\t * @todo remove at version 3\r\n\t * @private\r\n\t */\r\n\t_create: function(time) {\r\n\t\treturn moment(time);\r\n\t},\r\n} : {});\n\ncore_defaults._set('global', {\r\n\tplugins: {\r\n\t\tfiller: {\r\n\t\t\tpropagate: true\r\n\t\t}\r\n\t}\r\n});\r\n\r\nvar mappers = {\r\n\tdataset: function(source) {\r\n\t\tvar index = source.fill;\r\n\t\tvar chart = source.chart;\r\n\t\tvar meta = chart.getDatasetMeta(index);\r\n\t\tvar visible = meta && chart.isDatasetVisible(index);\r\n\t\tvar points = (visible && meta.dataset._children) || [];\r\n\t\tvar length = points.length || 0;\r\n\r\n\t\treturn !length ? null : function(point, i) {\r\n\t\t\treturn (i < length && points[i]._view) || null;\r\n\t\t};\r\n\t},\r\n\r\n\tboundary: function(source) {\r\n\t\tvar boundary = source.boundary;\r\n\t\tvar x = boundary ? boundary.x : null;\r\n\t\tvar y = boundary ? boundary.y : null;\r\n\r\n\t\tif (helpers$1.isArray(boundary)) {\r\n\t\t\treturn function(point, i) {\r\n\t\t\t\treturn boundary[i];\r\n\t\t\t};\r\n\t\t}\r\n\r\n\t\treturn function(point) {\r\n\t\t\treturn {\r\n\t\t\t\tx: x === null ? point.x : x,\r\n\t\t\t\ty: y === null ? point.y : y,\r\n\t\t\t};\r\n\t\t};\r\n\t}\r\n};\r\n\r\n// @todo if (fill[0] === '#')\r\nfunction decodeFill(el, index, count) {\r\n\tvar model = el._model || {};\r\n\tvar fill = model.fill;\r\n\tvar target;\r\n\r\n\tif (fill === undefined) {\r\n\t\tfill = !!model.backgroundColor;\r\n\t}\r\n\r\n\tif (fill === false || fill === null) {\r\n\t\treturn false;\r\n\t}\r\n\r\n\tif (fill === true) {\r\n\t\treturn 'origin';\r\n\t}\r\n\r\n\ttarget = parseFloat(fill, 10);\r\n\tif (isFinite(target) && Math.floor(target) === target) {\r\n\t\tif (fill[0] === '-' || fill[0] === '+') {\r\n\t\t\ttarget = index + target;\r\n\t\t}\r\n\r\n\t\tif (target === index || target < 0 || target >= count) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\treturn target;\r\n\t}\r\n\r\n\tswitch (fill) {\r\n\t// compatibility\r\n\tcase 'bottom':\r\n\t\treturn 'start';\r\n\tcase 'top':\r\n\t\treturn 'end';\r\n\tcase 'zero':\r\n\t\treturn 'origin';\r\n\t// supported boundaries\r\n\tcase 'origin':\r\n\tcase 'start':\r\n\tcase 'end':\r\n\t\treturn fill;\r\n\t// invalid fill values\r\n\tdefault:\r\n\t\treturn false;\r\n\t}\r\n}\r\n\r\nfunction computeLinearBoundary(source) {\r\n\tvar model = source.el._model || {};\r\n\tvar scale = source.el._scale || {};\r\n\tvar fill = source.fill;\r\n\tvar target = null;\r\n\tvar horizontal;\r\n\r\n\tif (isFinite(fill)) {\r\n\t\treturn null;\r\n\t}\r\n\r\n\t// Backward compatibility: until v3, we still need to support boundary values set on\r\n\t// the model (scaleTop, scaleBottom and scaleZero) because some external plugins and\r\n\t// controllers might still use it (e.g. the Smith chart).\r\n\r\n\tif (fill === 'start') {\r\n\t\ttarget = model.scaleBottom === undefined ? scale.bottom : model.scaleBottom;\r\n\t} else if (fill === 'end') {\r\n\t\ttarget = model.scaleTop === undefined ? scale.top : model.scaleTop;\r\n\t} else if (model.scaleZero !== undefined) {\r\n\t\ttarget = model.scaleZero;\r\n\t} else if (scale.getBasePixel) {\r\n\t\ttarget = scale.getBasePixel();\r\n\t}\r\n\r\n\tif (target !== undefined && target !== null) {\r\n\t\tif (target.x !== undefined && target.y !== undefined) {\r\n\t\t\treturn target;\r\n\t\t}\r\n\r\n\t\tif (helpers$1.isFinite(target)) {\r\n\t\t\thorizontal = scale.isHorizontal();\r\n\t\t\treturn {\r\n\t\t\t\tx: horizontal ? target : null,\r\n\t\t\t\ty: horizontal ? null : target\r\n\t\t\t};\r\n\t\t}\r\n\t}\r\n\r\n\treturn null;\r\n}\r\n\r\nfunction computeCircularBoundary(source) {\r\n\tvar scale = source.el._scale;\r\n\tvar options = scale.options;\r\n\tvar length = scale.chart.data.labels.length;\r\n\tvar fill = source.fill;\r\n\tvar target = [];\r\n\tvar start, end, center, i, point;\r\n\r\n\tif (!length) {\r\n\t\treturn null;\r\n\t}\r\n\r\n\tstart = options.ticks.reverse ? scale.max : scale.min;\r\n\tend = options.ticks.reverse ? scale.min : scale.max;\r\n\tcenter = scale.getPointPositionForValue(0, start);\r\n\tfor (i = 0; i < length; ++i) {\r\n\t\tpoint = fill === 'start' || fill === 'end'\r\n\t\t\t? scale.getPointPositionForValue(i, fill === 'start' ? start : end)\r\n\t\t\t: scale.getBasePosition(i);\r\n\t\tif (options.gridLines.circular) {\r\n\t\t\tpoint.cx = center.x;\r\n\t\t\tpoint.cy = center.y;\r\n\t\t\tpoint.angle = scale.getIndexAngle(i) - Math.PI / 2;\r\n\t\t}\r\n\t\ttarget.push(point);\r\n\t}\r\n\treturn target;\r\n}\r\n\r\nfunction computeBoundary(source) {\r\n\tvar scale = source.el._scale || {};\r\n\r\n\tif (scale.getPointPositionForValue) {\r\n\t\treturn computeCircularBoundary(source);\r\n\t}\r\n\treturn computeLinearBoundary(source);\r\n}\r\n\r\nfunction resolveTarget(sources, index, propagate) {\r\n\tvar source = sources[index];\r\n\tvar fill = source.fill;\r\n\tvar visited = [index];\r\n\tvar target;\r\n\r\n\tif (!propagate) {\r\n\t\treturn fill;\r\n\t}\r\n\r\n\twhile (fill !== false && visited.indexOf(fill) === -1) {\r\n\t\tif (!isFinite(fill)) {\r\n\t\t\treturn fill;\r\n\t\t}\r\n\r\n\t\ttarget = sources[fill];\r\n\t\tif (!target) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tif (target.visible) {\r\n\t\t\treturn fill;\r\n\t\t}\r\n\r\n\t\tvisited.push(fill);\r\n\t\tfill = target.fill;\r\n\t}\r\n\r\n\treturn false;\r\n}\r\n\r\nfunction createMapper(source) {\r\n\tvar fill = source.fill;\r\n\tvar type = 'dataset';\r\n\r\n\tif (fill === false) {\r\n\t\treturn null;\r\n\t}\r\n\r\n\tif (!isFinite(fill)) {\r\n\t\ttype = 'boundary';\r\n\t}\r\n\r\n\treturn mappers[type](source);\r\n}\r\n\r\nfunction isDrawable(point) {\r\n\treturn point && !point.skip;\r\n}\r\n\r\nfunction drawArea(ctx, curve0, curve1, len0, len1) {\r\n\tvar i, cx, cy, r;\r\n\r\n\tif (!len0 || !len1) {\r\n\t\treturn;\r\n\t}\r\n\r\n\t// building first area curve (normal)\r\n\tctx.moveTo(curve0[0].x, curve0[0].y);\r\n\tfor (i = 1; i < len0; ++i) {\r\n\t\thelpers$1.canvas.lineTo(ctx, curve0[i - 1], curve0[i]);\r\n\t}\r\n\r\n\tif (curve1[0].angle !== undefined) {\r\n\t\tcx = curve1[0].cx;\r\n\t\tcy = curve1[0].cy;\r\n\t\tr = Math.sqrt(Math.pow(curve1[0].x - cx, 2) + Math.pow(curve1[0].y - cy, 2));\r\n\t\tfor (i = len1 - 1; i > 0; --i) {\r\n\t\t\tctx.arc(cx, cy, r, curve1[i].angle, curve1[i - 1].angle, true);\r\n\t\t}\r\n\t\treturn;\r\n\t}\r\n\r\n\t// joining the two area curves\r\n\tctx.lineTo(curve1[len1 - 1].x, curve1[len1 - 1].y);\r\n\r\n\t// building opposite area curve (reverse)\r\n\tfor (i = len1 - 1; i > 0; --i) {\r\n\t\thelpers$1.canvas.lineTo(ctx, curve1[i], curve1[i - 1], true);\r\n\t}\r\n}\r\n\r\nfunction doFill(ctx, points, mapper, view, color, loop) {\r\n\tvar count = points.length;\r\n\tvar span = view.spanGaps;\r\n\tvar curve0 = [];\r\n\tvar curve1 = [];\r\n\tvar len0 = 0;\r\n\tvar len1 = 0;\r\n\tvar i, ilen, index, p0, p1, d0, d1, loopOffset;\r\n\r\n\tctx.beginPath();\r\n\r\n\tfor (i = 0, ilen = count; i < ilen; ++i) {\r\n\t\tindex = i % count;\r\n\t\tp0 = points[index]._view;\r\n\t\tp1 = mapper(p0, index, view);\r\n\t\td0 = isDrawable(p0);\r\n\t\td1 = isDrawable(p1);\r\n\r\n\t\tif (loop && loopOffset === undefined && d0) {\r\n\t\t\tloopOffset = i + 1;\r\n\t\t\tilen = count + loopOffset;\r\n\t\t}\r\n\r\n\t\tif (d0 && d1) {\r\n\t\t\tlen0 = curve0.push(p0);\r\n\t\t\tlen1 = curve1.push(p1);\r\n\t\t} else if (len0 && len1) {\r\n\t\t\tif (!span) {\r\n\t\t\t\tdrawArea(ctx, curve0, curve1, len0, len1);\r\n\t\t\t\tlen0 = len1 = 0;\r\n\t\t\t\tcurve0 = [];\r\n\t\t\t\tcurve1 = [];\r\n\t\t\t} else {\r\n\t\t\t\tif (d0) {\r\n\t\t\t\t\tcurve0.push(p0);\r\n\t\t\t\t}\r\n\t\t\t\tif (d1) {\r\n\t\t\t\t\tcurve1.push(p1);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tdrawArea(ctx, curve0, curve1, len0, len1);\r\n\r\n\tctx.closePath();\r\n\tctx.fillStyle = color;\r\n\tctx.fill();\r\n}\r\n\r\nvar plugin_filler = {\r\n\tid: 'filler',\r\n\r\n\tafterDatasetsUpdate: function(chart, options) {\r\n\t\tvar count = (chart.data.datasets || []).length;\r\n\t\tvar propagate = options.propagate;\r\n\t\tvar sources = [];\r\n\t\tvar meta, i, el, source;\r\n\r\n\t\tfor (i = 0; i < count; ++i) {\r\n\t\t\tmeta = chart.getDatasetMeta(i);\r\n\t\t\tel = meta.dataset;\r\n\t\t\tsource = null;\r\n\r\n\t\t\tif (el && el._model && el instanceof elements.Line) {\r\n\t\t\t\tsource = {\r\n\t\t\t\t\tvisible: chart.isDatasetVisible(i),\r\n\t\t\t\t\tfill: decodeFill(el, i, count),\r\n\t\t\t\t\tchart: chart,\r\n\t\t\t\t\tel: el\r\n\t\t\t\t};\r\n\t\t\t}\r\n\r\n\t\t\tmeta.$filler = source;\r\n\t\t\tsources.push(source);\r\n\t\t}\r\n\r\n\t\tfor (i = 0; i < count; ++i) {\r\n\t\t\tsource = sources[i];\r\n\t\t\tif (!source) {\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\tsource.fill = resolveTarget(sources, i, propagate);\r\n\t\t\tsource.boundary = computeBoundary(source);\r\n\t\t\tsource.mapper = createMapper(source);\r\n\t\t}\r\n\t},\r\n\r\n\tbeforeDatasetsDraw: function(chart) {\r\n\t\tvar metasets = chart._getSortedVisibleDatasetMetas();\r\n\t\tvar ctx = chart.ctx;\r\n\t\tvar meta, i, el, view, points, mapper, color;\r\n\r\n\t\tfor (i = metasets.length - 1; i >= 0; --i) {\r\n\t\t\tmeta = metasets[i].$filler;\r\n\r\n\t\t\tif (!meta || !meta.visible) {\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\tel = meta.el;\r\n\t\t\tview = el._view;\r\n\t\t\tpoints = el._children || [];\r\n\t\t\tmapper = meta.mapper;\r\n\t\t\tcolor = view.backgroundColor || core_defaults.global.defaultColor;\r\n\r\n\t\t\tif (mapper && color && points.length) {\r\n\t\t\t\thelpers$1.canvas.clipArea(ctx, chart.chartArea);\r\n\t\t\t\tdoFill(ctx, points, mapper, view, color, el._loop);\r\n\t\t\t\thelpers$1.canvas.unclipArea(ctx);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n};\n\nvar getRtlHelper$1 = helpers$1.rtl.getRtlAdapter;\r\nvar noop$1 = helpers$1.noop;\r\nvar valueOrDefault$e = helpers$1.valueOrDefault;\r\n\r\ncore_defaults._set('global', {\r\n\tlegend: {\r\n\t\tdisplay: true,\r\n\t\tposition: 'top',\r\n\t\talign: 'center',\r\n\t\tfullWidth: true,\r\n\t\treverse: false,\r\n\t\tweight: 1000,\r\n\r\n\t\t// a callback that will handle\r\n\t\tonClick: function(e, legendItem) {\r\n\t\t\tvar index = legendItem.datasetIndex;\r\n\t\t\tvar ci = this.chart;\r\n\t\t\tvar meta = ci.getDatasetMeta(index);\r\n\r\n\t\t\t// See controller.isDatasetVisible comment\r\n\t\t\tmeta.hidden = meta.hidden === null ? !ci.data.datasets[index].hidden : null;\r\n\r\n\t\t\t// We hid a dataset ... rerender the chart\r\n\t\t\tci.update();\r\n\t\t},\r\n\r\n\t\tonHover: null,\r\n\t\tonLeave: null,\r\n\r\n\t\tlabels: {\r\n\t\t\tboxWidth: 40,\r\n\t\t\tpadding: 10,\r\n\t\t\t// Generates labels shown in the legend\r\n\t\t\t// Valid properties to return:\r\n\t\t\t// text : text to display\r\n\t\t\t// fillStyle : fill of coloured box\r\n\t\t\t// strokeStyle: stroke of coloured box\r\n\t\t\t// hidden : if this legend item refers to a hidden item\r\n\t\t\t// lineCap : cap style for line\r\n\t\t\t// lineDash\r\n\t\t\t// lineDashOffset :\r\n\t\t\t// lineJoin :\r\n\t\t\t// lineWidth :\r\n\t\t\tgenerateLabels: function(chart) {\r\n\t\t\t\tvar datasets = chart.data.datasets;\r\n\t\t\t\tvar options = chart.options.legend || {};\r\n\t\t\t\tvar usePointStyle = options.labels && options.labels.usePointStyle;\r\n\r\n\t\t\t\treturn chart._getSortedDatasetMetas().map(function(meta) {\r\n\t\t\t\t\tvar style = meta.controller.getStyle(usePointStyle ? 0 : undefined);\r\n\r\n\t\t\t\t\treturn {\r\n\t\t\t\t\t\ttext: datasets[meta.index].label,\r\n\t\t\t\t\t\tfillStyle: style.backgroundColor,\r\n\t\t\t\t\t\thidden: !chart.isDatasetVisible(meta.index),\r\n\t\t\t\t\t\tlineCap: style.borderCapStyle,\r\n\t\t\t\t\t\tlineDash: style.borderDash,\r\n\t\t\t\t\t\tlineDashOffset: style.borderDashOffset,\r\n\t\t\t\t\t\tlineJoin: style.borderJoinStyle,\r\n\t\t\t\t\t\tlineWidth: style.borderWidth,\r\n\t\t\t\t\t\tstrokeStyle: style.borderColor,\r\n\t\t\t\t\t\tpointStyle: style.pointStyle,\r\n\t\t\t\t\t\trotation: style.rotation,\r\n\r\n\t\t\t\t\t\t// Below is extra data used for toggling the datasets\r\n\t\t\t\t\t\tdatasetIndex: meta.index\r\n\t\t\t\t\t};\r\n\t\t\t\t}, this);\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\tlegendCallback: function(chart) {\r\n\t\tvar list = document.createElement('ul');\r\n\t\tvar datasets = chart.data.datasets;\r\n\t\tvar i, ilen, listItem, listItemSpan;\r\n\r\n\t\tlist.setAttribute('class', chart.id + '-legend');\r\n\r\n\t\tfor (i = 0, ilen = datasets.length; i < ilen; i++) {\r\n\t\t\tlistItem = list.appendChild(document.createElement('li'));\r\n\t\t\tlistItemSpan = listItem.appendChild(document.createElement('span'));\r\n\t\t\tlistItemSpan.style.backgroundColor = datasets[i].backgroundColor;\r\n\t\t\tif (datasets[i].label) {\r\n\t\t\t\tlistItem.appendChild(document.createTextNode(datasets[i].label));\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn list.outerHTML;\r\n\t}\r\n});\r\n\r\n/**\r\n * Helper function to get the box width based on the usePointStyle option\r\n * @param {object} labelopts - the label options on the legend\r\n * @param {number} fontSize - the label font size\r\n * @return {number} width of the color box area\r\n */\r\nfunction getBoxWidth(labelOpts, fontSize) {\r\n\treturn labelOpts.usePointStyle && labelOpts.boxWidth > fontSize ?\r\n\t\tfontSize :\r\n\t\tlabelOpts.boxWidth;\r\n}\r\n\r\n/**\r\n * IMPORTANT: this class is exposed publicly as Chart.Legend, backward compatibility required!\r\n */\r\nvar Legend = core_element.extend({\r\n\r\n\tinitialize: function(config) {\r\n\t\tvar me = this;\r\n\t\thelpers$1.extend(me, config);\r\n\r\n\t\t// Contains hit boxes for each dataset (in dataset order)\r\n\t\tme.legendHitBoxes = [];\r\n\r\n\t\t/**\r\n \t\t * @private\r\n \t\t */\r\n\t\tme._hoveredItem = null;\r\n\r\n\t\t// Are we in doughnut mode which has a different data type\r\n\t\tme.doughnutMode = false;\r\n\t},\r\n\r\n\t// These methods are ordered by lifecycle. Utilities then follow.\r\n\t// Any function defined here is inherited by all legend types.\r\n\t// Any function can be extended by the legend type\r\n\r\n\tbeforeUpdate: noop$1,\r\n\tupdate: function(maxWidth, maxHeight, margins) {\r\n\t\tvar me = this;\r\n\r\n\t\t// Update Lifecycle - Probably don't want to ever extend or overwrite this function ;)\r\n\t\tme.beforeUpdate();\r\n\r\n\t\t// Absorb the master measurements\r\n\t\tme.maxWidth = maxWidth;\r\n\t\tme.maxHeight = maxHeight;\r\n\t\tme.margins = margins;\r\n\r\n\t\t// Dimensions\r\n\t\tme.beforeSetDimensions();\r\n\t\tme.setDimensions();\r\n\t\tme.afterSetDimensions();\r\n\t\t// Labels\r\n\t\tme.beforeBuildLabels();\r\n\t\tme.buildLabels();\r\n\t\tme.afterBuildLabels();\r\n\r\n\t\t// Fit\r\n\t\tme.beforeFit();\r\n\t\tme.fit();\r\n\t\tme.afterFit();\r\n\t\t//\r\n\t\tme.afterUpdate();\r\n\r\n\t\treturn me.minSize;\r\n\t},\r\n\tafterUpdate: noop$1,\r\n\r\n\t//\r\n\r\n\tbeforeSetDimensions: noop$1,\r\n\tsetDimensions: function() {\r\n\t\tvar me = this;\r\n\t\t// Set the unconstrained dimension before label rotation\r\n\t\tif (me.isHorizontal()) {\r\n\t\t\t// Reset position before calculating rotation\r\n\t\t\tme.width = me.maxWidth;\r\n\t\t\tme.left = 0;\r\n\t\t\tme.right = me.width;\r\n\t\t} else {\r\n\t\t\tme.height = me.maxHeight;\r\n\r\n\t\t\t// Reset position before calculating rotation\r\n\t\t\tme.top = 0;\r\n\t\t\tme.bottom = me.height;\r\n\t\t}\r\n\r\n\t\t// Reset padding\r\n\t\tme.paddingLeft = 0;\r\n\t\tme.paddingTop = 0;\r\n\t\tme.paddingRight = 0;\r\n\t\tme.paddingBottom = 0;\r\n\r\n\t\t// Reset minSize\r\n\t\tme.minSize = {\r\n\t\t\twidth: 0,\r\n\t\t\theight: 0\r\n\t\t};\r\n\t},\r\n\tafterSetDimensions: noop$1,\r\n\r\n\t//\r\n\r\n\tbeforeBuildLabels: noop$1,\r\n\tbuildLabels: function() {\r\n\t\tvar me = this;\r\n\t\tvar labelOpts = me.options.labels || {};\r\n\t\tvar legendItems = helpers$1.callback(labelOpts.generateLabels, [me.chart], me) || [];\r\n\r\n\t\tif (labelOpts.filter) {\r\n\t\t\tlegendItems = legendItems.filter(function(item) {\r\n\t\t\t\treturn labelOpts.filter(item, me.chart.data);\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif (me.options.reverse) {\r\n\t\t\tlegendItems.reverse();\r\n\t\t}\r\n\r\n\t\tme.legendItems = legendItems;\r\n\t},\r\n\tafterBuildLabels: noop$1,\r\n\r\n\t//\r\n\r\n\tbeforeFit: noop$1,\r\n\tfit: function() {\r\n\t\tvar me = this;\r\n\t\tvar opts = me.options;\r\n\t\tvar labelOpts = opts.labels;\r\n\t\tvar display = opts.display;\r\n\r\n\t\tvar ctx = me.ctx;\r\n\r\n\t\tvar labelFont = helpers$1.options._parseFont(labelOpts);\r\n\t\tvar fontSize = labelFont.size;\r\n\r\n\t\t// Reset hit boxes\r\n\t\tvar hitboxes = me.legendHitBoxes = [];\r\n\r\n\t\tvar minSize = me.minSize;\r\n\t\tvar isHorizontal = me.isHorizontal();\r\n\r\n\t\tif (isHorizontal) {\r\n\t\t\tminSize.width = me.maxWidth; // fill all the width\r\n\t\t\tminSize.height = display ? 10 : 0;\r\n\t\t} else {\r\n\t\t\tminSize.width = display ? 10 : 0;\r\n\t\t\tminSize.height = me.maxHeight; // fill all the height\r\n\t\t}\r\n\r\n\t\t// Increase sizes here\r\n\t\tif (!display) {\r\n\t\t\tme.width = minSize.width = me.height = minSize.height = 0;\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tctx.font = labelFont.string;\r\n\r\n\t\tif (isHorizontal) {\r\n\t\t\t// Labels\r\n\r\n\t\t\t// Width of each line of legend boxes. Labels wrap onto multiple lines when there are too many to fit on one\r\n\t\t\tvar lineWidths = me.lineWidths = [0];\r\n\t\t\tvar totalHeight = 0;\r\n\r\n\t\t\tctx.textAlign = 'left';\r\n\t\t\tctx.textBaseline = 'middle';\r\n\r\n\t\t\thelpers$1.each(me.legendItems, function(legendItem, i) {\r\n\t\t\t\tvar boxWidth = getBoxWidth(labelOpts, fontSize);\r\n\t\t\t\tvar width = boxWidth + (fontSize / 2) + ctx.measureText(legendItem.text).width;\r\n\r\n\t\t\t\tif (i === 0 || lineWidths[lineWidths.length - 1] + width + 2 * labelOpts.padding > minSize.width) {\r\n\t\t\t\t\ttotalHeight += fontSize + labelOpts.padding;\r\n\t\t\t\t\tlineWidths[lineWidths.length - (i > 0 ? 0 : 1)] = 0;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Store the hitbox width and height here. Final position will be updated in `draw`\r\n\t\t\t\thitboxes[i] = {\r\n\t\t\t\t\tleft: 0,\r\n\t\t\t\t\ttop: 0,\r\n\t\t\t\t\twidth: width,\r\n\t\t\t\t\theight: fontSize\r\n\t\t\t\t};\r\n\r\n\t\t\t\tlineWidths[lineWidths.length - 1] += width + labelOpts.padding;\r\n\t\t\t});\r\n\r\n\t\t\tminSize.height += totalHeight;\r\n\r\n\t\t} else {\r\n\t\t\tvar vPadding = labelOpts.padding;\r\n\t\t\tvar columnWidths = me.columnWidths = [];\r\n\t\t\tvar columnHeights = me.columnHeights = [];\r\n\t\t\tvar totalWidth = labelOpts.padding;\r\n\t\t\tvar currentColWidth = 0;\r\n\t\t\tvar currentColHeight = 0;\r\n\r\n\t\t\thelpers$1.each(me.legendItems, function(legendItem, i) {\r\n\t\t\t\tvar boxWidth = getBoxWidth(labelOpts, fontSize);\r\n\t\t\t\tvar itemWidth = boxWidth + (fontSize / 2) + ctx.measureText(legendItem.text).width;\r\n\r\n\t\t\t\t// If too tall, go to new column\r\n\t\t\t\tif (i > 0 && currentColHeight + fontSize + 2 * vPadding > minSize.height) {\r\n\t\t\t\t\ttotalWidth += currentColWidth + labelOpts.padding;\r\n\t\t\t\t\tcolumnWidths.push(currentColWidth); // previous column width\r\n\t\t\t\t\tcolumnHeights.push(currentColHeight);\r\n\t\t\t\t\tcurrentColWidth = 0;\r\n\t\t\t\t\tcurrentColHeight = 0;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Get max width\r\n\t\t\t\tcurrentColWidth = Math.max(currentColWidth, itemWidth);\r\n\t\t\t\tcurrentColHeight += fontSize + vPadding;\r\n\r\n\t\t\t\t// Store the hitbox width and height here. Final position will be updated in `draw`\r\n\t\t\t\thitboxes[i] = {\r\n\t\t\t\t\tleft: 0,\r\n\t\t\t\t\ttop: 0,\r\n\t\t\t\t\twidth: itemWidth,\r\n\t\t\t\t\theight: fontSize\r\n\t\t\t\t};\r\n\t\t\t});\r\n\r\n\t\t\ttotalWidth += currentColWidth;\r\n\t\t\tcolumnWidths.push(currentColWidth);\r\n\t\t\tcolumnHeights.push(currentColHeight);\r\n\t\t\tminSize.width += totalWidth;\r\n\t\t}\r\n\r\n\t\tme.width = minSize.width;\r\n\t\tme.height = minSize.height;\r\n\t},\r\n\tafterFit: noop$1,\r\n\r\n\t// Shared Methods\r\n\tisHorizontal: function() {\r\n\t\treturn this.options.position === 'top' || this.options.position === 'bottom';\r\n\t},\r\n\r\n\t// Actually draw the legend on the canvas\r\n\tdraw: function() {\r\n\t\tvar me = this;\r\n\t\tvar opts = me.options;\r\n\t\tvar labelOpts = opts.labels;\r\n\t\tvar globalDefaults = core_defaults.global;\r\n\t\tvar defaultColor = globalDefaults.defaultColor;\r\n\t\tvar lineDefault = globalDefaults.elements.line;\r\n\t\tvar legendHeight = me.height;\r\n\t\tvar columnHeights = me.columnHeights;\r\n\t\tvar legendWidth = me.width;\r\n\t\tvar lineWidths = me.lineWidths;\r\n\r\n\t\tif (!opts.display) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tvar rtlHelper = getRtlHelper$1(opts.rtl, me.left, me.minSize.width);\r\n\t\tvar ctx = me.ctx;\r\n\t\tvar fontColor = valueOrDefault$e(labelOpts.fontColor, globalDefaults.defaultFontColor);\r\n\t\tvar labelFont = helpers$1.options._parseFont(labelOpts);\r\n\t\tvar fontSize = labelFont.size;\r\n\t\tvar cursor;\r\n\r\n\t\t// Canvas setup\r\n\t\tctx.textAlign = rtlHelper.textAlign('left');\r\n\t\tctx.textBaseline = 'middle';\r\n\t\tctx.lineWidth = 0.5;\r\n\t\tctx.strokeStyle = fontColor; // for strikethrough effect\r\n\t\tctx.fillStyle = fontColor; // render in correct colour\r\n\t\tctx.font = labelFont.string;\r\n\r\n\t\tvar boxWidth = getBoxWidth(labelOpts, fontSize);\r\n\t\tvar hitboxes = me.legendHitBoxes;\r\n\r\n\t\t// current position\r\n\t\tvar drawLegendBox = function(x, y, legendItem) {\r\n\t\t\tif (isNaN(boxWidth) || boxWidth <= 0) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\t// Set the ctx for the box\r\n\t\t\tctx.save();\r\n\r\n\t\t\tvar lineWidth = valueOrDefault$e(legendItem.lineWidth, lineDefault.borderWidth);\r\n\t\t\tctx.fillStyle = valueOrDefault$e(legendItem.fillStyle, defaultColor);\r\n\t\t\tctx.lineCap = valueOrDefault$e(legendItem.lineCap, lineDefault.borderCapStyle);\r\n\t\t\tctx.lineDashOffset = valueOrDefault$e(legendItem.lineDashOffset, lineDefault.borderDashOffset);\r\n\t\t\tctx.lineJoin = valueOrDefault$e(legendItem.lineJoin, lineDefault.borderJoinStyle);\r\n\t\t\tctx.lineWidth = lineWidth;\r\n\t\t\tctx.strokeStyle = valueOrDefault$e(legendItem.strokeStyle, defaultColor);\r\n\r\n\t\t\tif (ctx.setLineDash) {\r\n\t\t\t\t// IE 9 and 10 do not support line dash\r\n\t\t\t\tctx.setLineDash(valueOrDefault$e(legendItem.lineDash, lineDefault.borderDash));\r\n\t\t\t}\r\n\r\n\t\t\tif (labelOpts && labelOpts.usePointStyle) {\r\n\t\t\t\t// Recalculate x and y for drawPoint() because its expecting\r\n\t\t\t\t// x and y to be center of figure (instead of top left)\r\n\t\t\t\tvar radius = boxWidth * Math.SQRT2 / 2;\r\n\t\t\t\tvar centerX = rtlHelper.xPlus(x, boxWidth / 2);\r\n\t\t\t\tvar centerY = y + fontSize / 2;\r\n\r\n\t\t\t\t// Draw pointStyle as legend symbol\r\n\t\t\t\thelpers$1.canvas.drawPoint(ctx, legendItem.pointStyle, radius, centerX, centerY, legendItem.rotation);\r\n\t\t\t} else {\r\n\t\t\t\t// Draw box as legend symbol\r\n\t\t\t\tctx.fillRect(rtlHelper.leftForLtr(x, boxWidth), y, boxWidth, fontSize);\r\n\t\t\t\tif (lineWidth !== 0) {\r\n\t\t\t\t\tctx.strokeRect(rtlHelper.leftForLtr(x, boxWidth), y, boxWidth, fontSize);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tctx.restore();\r\n\t\t};\r\n\r\n\t\tvar fillText = function(x, y, legendItem, textWidth) {\r\n\t\t\tvar halfFontSize = fontSize / 2;\r\n\t\t\tvar xLeft = rtlHelper.xPlus(x, boxWidth + halfFontSize);\r\n\t\t\tvar yMiddle = y + halfFontSize;\r\n\r\n\t\t\tctx.fillText(legendItem.text, xLeft, yMiddle);\r\n\r\n\t\t\tif (legendItem.hidden) {\r\n\t\t\t\t// Strikethrough the text if hidden\r\n\t\t\t\tctx.beginPath();\r\n\t\t\t\tctx.lineWidth = 2;\r\n\t\t\t\tctx.moveTo(xLeft, yMiddle);\r\n\t\t\t\tctx.lineTo(rtlHelper.xPlus(xLeft, textWidth), yMiddle);\r\n\t\t\t\tctx.stroke();\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tvar alignmentOffset = function(dimension, blockSize) {\r\n\t\t\tswitch (opts.align) {\r\n\t\t\tcase 'start':\r\n\t\t\t\treturn labelOpts.padding;\r\n\t\t\tcase 'end':\r\n\t\t\t\treturn dimension - blockSize;\r\n\t\t\tdefault: // center\r\n\t\t\t\treturn (dimension - blockSize + labelOpts.padding) / 2;\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\t// Horizontal\r\n\t\tvar isHorizontal = me.isHorizontal();\r\n\t\tif (isHorizontal) {\r\n\t\t\tcursor = {\r\n\t\t\t\tx: me.left + alignmentOffset(legendWidth, lineWidths[0]),\r\n\t\t\t\ty: me.top + labelOpts.padding,\r\n\t\t\t\tline: 0\r\n\t\t\t};\r\n\t\t} else {\r\n\t\t\tcursor = {\r\n\t\t\t\tx: me.left + labelOpts.padding,\r\n\t\t\t\ty: me.top + alignmentOffset(legendHeight, columnHeights[0]),\r\n\t\t\t\tline: 0\r\n\t\t\t};\r\n\t\t}\r\n\r\n\t\thelpers$1.rtl.overrideTextDirection(me.ctx, opts.textDirection);\r\n\r\n\t\tvar itemHeight = fontSize + labelOpts.padding;\r\n\t\thelpers$1.each(me.legendItems, function(legendItem, i) {\r\n\t\t\tvar textWidth = ctx.measureText(legendItem.text).width;\r\n\t\t\tvar width = boxWidth + (fontSize / 2) + textWidth;\r\n\t\t\tvar x = cursor.x;\r\n\t\t\tvar y = cursor.y;\r\n\r\n\t\t\trtlHelper.setWidth(me.minSize.width);\r\n\r\n\t\t\t// Use (me.left + me.minSize.width) and (me.top + me.minSize.height)\r\n\t\t\t// instead of me.right and me.bottom because me.width and me.height\r\n\t\t\t// may have been changed since me.minSize was calculated\r\n\t\t\tif (isHorizontal) {\r\n\t\t\t\tif (i > 0 && x + width + labelOpts.padding > me.left + me.minSize.width) {\r\n\t\t\t\t\ty = cursor.y += itemHeight;\r\n\t\t\t\t\tcursor.line++;\r\n\t\t\t\t\tx = cursor.x = me.left + alignmentOffset(legendWidth, lineWidths[cursor.line]);\r\n\t\t\t\t}\r\n\t\t\t} else if (i > 0 && y + itemHeight > me.top + me.minSize.height) {\r\n\t\t\t\tx = cursor.x = x + me.columnWidths[cursor.line] + labelOpts.padding;\r\n\t\t\t\tcursor.line++;\r\n\t\t\t\ty = cursor.y = me.top + alignmentOffset(legendHeight, columnHeights[cursor.line]);\r\n\t\t\t}\r\n\r\n\t\t\tvar realX = rtlHelper.x(x);\r\n\r\n\t\t\tdrawLegendBox(realX, y, legendItem);\r\n\r\n\t\t\thitboxes[i].left = rtlHelper.leftForLtr(realX, hitboxes[i].width);\r\n\t\t\thitboxes[i].top = y;\r\n\r\n\t\t\t// Fill the actual label\r\n\t\t\tfillText(realX, y, legendItem, textWidth);\r\n\r\n\t\t\tif (isHorizontal) {\r\n\t\t\t\tcursor.x += width + labelOpts.padding;\r\n\t\t\t} else {\r\n\t\t\t\tcursor.y += itemHeight;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\thelpers$1.rtl.restoreTextDirection(me.ctx, opts.textDirection);\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_getLegendItemAt: function(x, y) {\r\n\t\tvar me = this;\r\n\t\tvar i, hitBox, lh;\r\n\r\n\t\tif (x >= me.left && x <= me.right && y >= me.top && y <= me.bottom) {\r\n\t\t\t// See if we are touching one of the dataset boxes\r\n\t\t\tlh = me.legendHitBoxes;\r\n\t\t\tfor (i = 0; i < lh.length; ++i) {\r\n\t\t\t\thitBox = lh[i];\r\n\r\n\t\t\t\tif (x >= hitBox.left && x <= hitBox.left + hitBox.width && y >= hitBox.top && y <= hitBox.top + hitBox.height) {\r\n\t\t\t\t\t// Touching an element\r\n\t\t\t\t\treturn me.legendItems[i];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn null;\r\n\t},\r\n\r\n\t/**\r\n\t * Handle an event\r\n\t * @private\r\n\t * @param {IEvent} event - The event to handle\r\n\t */\r\n\thandleEvent: function(e) {\r\n\t\tvar me = this;\r\n\t\tvar opts = me.options;\r\n\t\tvar type = e.type === 'mouseup' ? 'click' : e.type;\r\n\t\tvar hoveredItem;\r\n\r\n\t\tif (type === 'mousemove') {\r\n\t\t\tif (!opts.onHover && !opts.onLeave) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t} else if (type === 'click') {\r\n\t\t\tif (!opts.onClick) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Chart event already has relative position in it\r\n\t\thoveredItem = me._getLegendItemAt(e.x, e.y);\r\n\r\n\t\tif (type === 'click') {\r\n\t\t\tif (hoveredItem && opts.onClick) {\r\n\t\t\t\t// use e.native for backwards compatibility\r\n\t\t\t\topts.onClick.call(me, e.native, hoveredItem);\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tif (opts.onLeave && hoveredItem !== me._hoveredItem) {\r\n\t\t\t\tif (me._hoveredItem) {\r\n\t\t\t\t\topts.onLeave.call(me, e.native, me._hoveredItem);\r\n\t\t\t\t}\r\n\t\t\t\tme._hoveredItem = hoveredItem;\r\n\t\t\t}\r\n\r\n\t\t\tif (opts.onHover && hoveredItem) {\r\n\t\t\t\t// use e.native for backwards compatibility\r\n\t\t\t\topts.onHover.call(me, e.native, hoveredItem);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n});\r\n\r\nfunction createNewLegendAndAttach(chart, legendOpts) {\r\n\tvar legend = new Legend({\r\n\t\tctx: chart.ctx,\r\n\t\toptions: legendOpts,\r\n\t\tchart: chart\r\n\t});\r\n\r\n\tcore_layouts.configure(chart, legend, legendOpts);\r\n\tcore_layouts.addBox(chart, legend);\r\n\tchart.legend = legend;\r\n}\r\n\r\nvar plugin_legend = {\r\n\tid: 'legend',\r\n\r\n\t/**\r\n\t * Backward compatibility: since 2.1.5, the legend is registered as a plugin, making\r\n\t * Chart.Legend obsolete. To avoid a breaking change, we export the Legend as part of\r\n\t * the plugin, which one will be re-exposed in the chart.js file.\r\n\t * https://github.com/chartjs/Chart.js/pull/2640\r\n\t * @private\r\n\t */\r\n\t_element: Legend,\r\n\r\n\tbeforeInit: function(chart) {\r\n\t\tvar legendOpts = chart.options.legend;\r\n\r\n\t\tif (legendOpts) {\r\n\t\t\tcreateNewLegendAndAttach(chart, legendOpts);\r\n\t\t}\r\n\t},\r\n\r\n\tbeforeUpdate: function(chart) {\r\n\t\tvar legendOpts = chart.options.legend;\r\n\t\tvar legend = chart.legend;\r\n\r\n\t\tif (legendOpts) {\r\n\t\t\thelpers$1.mergeIf(legendOpts, core_defaults.global.legend);\r\n\r\n\t\t\tif (legend) {\r\n\t\t\t\tcore_layouts.configure(chart, legend, legendOpts);\r\n\t\t\t\tlegend.options = legendOpts;\r\n\t\t\t} else {\r\n\t\t\t\tcreateNewLegendAndAttach(chart, legendOpts);\r\n\t\t\t}\r\n\t\t} else if (legend) {\r\n\t\t\tcore_layouts.removeBox(chart, legend);\r\n\t\t\tdelete chart.legend;\r\n\t\t}\r\n\t},\r\n\r\n\tafterEvent: function(chart, e) {\r\n\t\tvar legend = chart.legend;\r\n\t\tif (legend) {\r\n\t\t\tlegend.handleEvent(e);\r\n\t\t}\r\n\t}\r\n};\n\nvar noop$2 = helpers$1.noop;\r\n\r\ncore_defaults._set('global', {\r\n\ttitle: {\r\n\t\tdisplay: false,\r\n\t\tfontStyle: 'bold',\r\n\t\tfullWidth: true,\r\n\t\tpadding: 10,\r\n\t\tposition: 'top',\r\n\t\ttext: '',\r\n\t\tweight: 2000         // by default greater than legend (1000) to be above\r\n\t}\r\n});\r\n\r\n/**\r\n * IMPORTANT: this class is exposed publicly as Chart.Legend, backward compatibility required!\r\n */\r\nvar Title = core_element.extend({\r\n\tinitialize: function(config) {\r\n\t\tvar me = this;\r\n\t\thelpers$1.extend(me, config);\r\n\r\n\t\t// Contains hit boxes for each dataset (in dataset order)\r\n\t\tme.legendHitBoxes = [];\r\n\t},\r\n\r\n\t// These methods are ordered by lifecycle. Utilities then follow.\r\n\r\n\tbeforeUpdate: noop$2,\r\n\tupdate: function(maxWidth, maxHeight, margins) {\r\n\t\tvar me = this;\r\n\r\n\t\t// Update Lifecycle - Probably don't want to ever extend or overwrite this function ;)\r\n\t\tme.beforeUpdate();\r\n\r\n\t\t// Absorb the master measurements\r\n\t\tme.maxWidth = maxWidth;\r\n\t\tme.maxHeight = maxHeight;\r\n\t\tme.margins = margins;\r\n\r\n\t\t// Dimensions\r\n\t\tme.beforeSetDimensions();\r\n\t\tme.setDimensions();\r\n\t\tme.afterSetDimensions();\r\n\t\t// Labels\r\n\t\tme.beforeBuildLabels();\r\n\t\tme.buildLabels();\r\n\t\tme.afterBuildLabels();\r\n\r\n\t\t// Fit\r\n\t\tme.beforeFit();\r\n\t\tme.fit();\r\n\t\tme.afterFit();\r\n\t\t//\r\n\t\tme.afterUpdate();\r\n\r\n\t\treturn me.minSize;\r\n\r\n\t},\r\n\tafterUpdate: noop$2,\r\n\r\n\t//\r\n\r\n\tbeforeSetDimensions: noop$2,\r\n\tsetDimensions: function() {\r\n\t\tvar me = this;\r\n\t\t// Set the unconstrained dimension before label rotation\r\n\t\tif (me.isHorizontal()) {\r\n\t\t\t// Reset position before calculating rotation\r\n\t\t\tme.width = me.maxWidth;\r\n\t\t\tme.left = 0;\r\n\t\t\tme.right = me.width;\r\n\t\t} else {\r\n\t\t\tme.height = me.maxHeight;\r\n\r\n\t\t\t// Reset position before calculating rotation\r\n\t\t\tme.top = 0;\r\n\t\t\tme.bottom = me.height;\r\n\t\t}\r\n\r\n\t\t// Reset padding\r\n\t\tme.paddingLeft = 0;\r\n\t\tme.paddingTop = 0;\r\n\t\tme.paddingRight = 0;\r\n\t\tme.paddingBottom = 0;\r\n\r\n\t\t// Reset minSize\r\n\t\tme.minSize = {\r\n\t\t\twidth: 0,\r\n\t\t\theight: 0\r\n\t\t};\r\n\t},\r\n\tafterSetDimensions: noop$2,\r\n\r\n\t//\r\n\r\n\tbeforeBuildLabels: noop$2,\r\n\tbuildLabels: noop$2,\r\n\tafterBuildLabels: noop$2,\r\n\r\n\t//\r\n\r\n\tbeforeFit: noop$2,\r\n\tfit: function() {\r\n\t\tvar me = this;\r\n\t\tvar opts = me.options;\r\n\t\tvar minSize = me.minSize = {};\r\n\t\tvar isHorizontal = me.isHorizontal();\r\n\t\tvar lineCount, textSize;\r\n\r\n\t\tif (!opts.display) {\r\n\t\t\tme.width = minSize.width = me.height = minSize.height = 0;\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tlineCount = helpers$1.isArray(opts.text) ? opts.text.length : 1;\r\n\t\ttextSize = lineCount * helpers$1.options._parseFont(opts).lineHeight + opts.padding * 2;\r\n\r\n\t\tme.width = minSize.width = isHorizontal ? me.maxWidth : textSize;\r\n\t\tme.height = minSize.height = isHorizontal ? textSize : me.maxHeight;\r\n\t},\r\n\tafterFit: noop$2,\r\n\r\n\t// Shared Methods\r\n\tisHorizontal: function() {\r\n\t\tvar pos = this.options.position;\r\n\t\treturn pos === 'top' || pos === 'bottom';\r\n\t},\r\n\r\n\t// Actually draw the title block on the canvas\r\n\tdraw: function() {\r\n\t\tvar me = this;\r\n\t\tvar ctx = me.ctx;\r\n\t\tvar opts = me.options;\r\n\r\n\t\tif (!opts.display) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tvar fontOpts = helpers$1.options._parseFont(opts);\r\n\t\tvar lineHeight = fontOpts.lineHeight;\r\n\t\tvar offset = lineHeight / 2 + opts.padding;\r\n\t\tvar rotation = 0;\r\n\t\tvar top = me.top;\r\n\t\tvar left = me.left;\r\n\t\tvar bottom = me.bottom;\r\n\t\tvar right = me.right;\r\n\t\tvar maxWidth, titleX, titleY;\r\n\r\n\t\tctx.fillStyle = helpers$1.valueOrDefault(opts.fontColor, core_defaults.global.defaultFontColor); // render in correct colour\r\n\t\tctx.font = fontOpts.string;\r\n\r\n\t\t// Horizontal\r\n\t\tif (me.isHorizontal()) {\r\n\t\t\ttitleX = left + ((right - left) / 2); // midpoint of the width\r\n\t\t\ttitleY = top + offset;\r\n\t\t\tmaxWidth = right - left;\r\n\t\t} else {\r\n\t\t\ttitleX = opts.position === 'left' ? left + offset : right - offset;\r\n\t\t\ttitleY = top + ((bottom - top) / 2);\r\n\t\t\tmaxWidth = bottom - top;\r\n\t\t\trotation = Math.PI * (opts.position === 'left' ? -0.5 : 0.5);\r\n\t\t}\r\n\r\n\t\tctx.save();\r\n\t\tctx.translate(titleX, titleY);\r\n\t\tctx.rotate(rotation);\r\n\t\tctx.textAlign = 'center';\r\n\t\tctx.textBaseline = 'middle';\r\n\r\n\t\tvar text = opts.text;\r\n\t\tif (helpers$1.isArray(text)) {\r\n\t\t\tvar y = 0;\r\n\t\t\tfor (var i = 0; i < text.length; ++i) {\r\n\t\t\t\tctx.fillText(text[i], 0, y, maxWidth);\r\n\t\t\t\ty += lineHeight;\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tctx.fillText(text, 0, 0, maxWidth);\r\n\t\t}\r\n\r\n\t\tctx.restore();\r\n\t}\r\n});\r\n\r\nfunction createNewTitleBlockAndAttach(chart, titleOpts) {\r\n\tvar title = new Title({\r\n\t\tctx: chart.ctx,\r\n\t\toptions: titleOpts,\r\n\t\tchart: chart\r\n\t});\r\n\r\n\tcore_layouts.configure(chart, title, titleOpts);\r\n\tcore_layouts.addBox(chart, title);\r\n\tchart.titleBlock = title;\r\n}\r\n\r\nvar plugin_title = {\r\n\tid: 'title',\r\n\r\n\t/**\r\n\t * Backward compatibility: since 2.1.5, the title is registered as a plugin, making\r\n\t * Chart.Title obsolete. To avoid a breaking change, we export the Title as part of\r\n\t * the plugin, which one will be re-exposed in the chart.js file.\r\n\t * https://github.com/chartjs/Chart.js/pull/2640\r\n\t * @private\r\n\t */\r\n\t_element: Title,\r\n\r\n\tbeforeInit: function(chart) {\r\n\t\tvar titleOpts = chart.options.title;\r\n\r\n\t\tif (titleOpts) {\r\n\t\t\tcreateNewTitleBlockAndAttach(chart, titleOpts);\r\n\t\t}\r\n\t},\r\n\r\n\tbeforeUpdate: function(chart) {\r\n\t\tvar titleOpts = chart.options.title;\r\n\t\tvar titleBlock = chart.titleBlock;\r\n\r\n\t\tif (titleOpts) {\r\n\t\t\thelpers$1.mergeIf(titleOpts, core_defaults.global.title);\r\n\r\n\t\t\tif (titleBlock) {\r\n\t\t\t\tcore_layouts.configure(chart, titleBlock, titleOpts);\r\n\t\t\t\ttitleBlock.options = titleOpts;\r\n\t\t\t} else {\r\n\t\t\t\tcreateNewTitleBlockAndAttach(chart, titleOpts);\r\n\t\t\t}\r\n\t\t} else if (titleBlock) {\r\n\t\t\tcore_layouts.removeBox(chart, titleBlock);\r\n\t\t\tdelete chart.titleBlock;\r\n\t\t}\r\n\t}\r\n};\n\nvar plugins = {};\r\nvar filler = plugin_filler;\r\nvar legend = plugin_legend;\r\nvar title = plugin_title;\nplugins.filler = filler;\nplugins.legend = legend;\nplugins.title = title;\n\n/**\r\n * @namespace Chart\r\n */\r\n\r\n\r\ncore_controller.helpers = helpers$1;\r\n\r\n// @todo dispatch these helpers into appropriated helpers/helpers.* file and write unit tests!\r\ncore_helpers();\r\n\r\ncore_controller._adapters = core_adapters;\r\ncore_controller.Animation = core_animation;\r\ncore_controller.animationService = core_animations;\r\ncore_controller.controllers = controllers;\r\ncore_controller.DatasetController = core_datasetController;\r\ncore_controller.defaults = core_defaults;\r\ncore_controller.Element = core_element;\r\ncore_controller.elements = elements;\r\ncore_controller.Interaction = core_interaction;\r\ncore_controller.layouts = core_layouts;\r\ncore_controller.platform = platform;\r\ncore_controller.plugins = core_plugins;\r\ncore_controller.Scale = core_scale;\r\ncore_controller.scaleService = core_scaleService;\r\ncore_controller.Ticks = core_ticks;\r\ncore_controller.Tooltip = core_tooltip;\r\n\r\n// Register built-in scales\r\n\r\ncore_controller.helpers.each(scales, function(scale, type) {\r\n\tcore_controller.scaleService.registerScaleType(type, scale, scale._defaults);\r\n});\r\n\r\n// Load to register built-in adapters (as side effects)\r\n\r\n\r\n// Loading built-in plugins\r\n\r\nfor (var k in plugins) {\r\n\tif (plugins.hasOwnProperty(k)) {\r\n\t\tcore_controller.plugins.register(plugins[k]);\r\n\t}\r\n}\r\n\r\ncore_controller.platform.initialize();\r\n\r\nvar src = core_controller;\r\nif (typeof window !== 'undefined') {\r\n\twindow.Chart = core_controller;\r\n}\r\n\r\n// DEPRECATIONS\r\n\r\n/**\r\n * Provided for backward compatibility, not available anymore\r\n * @namespace Chart.Chart\r\n * @deprecated since version 2.8.0\r\n * @todo remove at version 3\r\n * @private\r\n */\r\ncore_controller.Chart = core_controller;\r\n\r\n/**\r\n * Provided for backward compatibility, not available anymore\r\n * @namespace Chart.Legend\r\n * @deprecated since version 2.1.5\r\n * @todo remove at version 3\r\n * @private\r\n */\r\ncore_controller.Legend = plugins.legend._element;\r\n\r\n/**\r\n * Provided for backward compatibility, not available anymore\r\n * @namespace Chart.Title\r\n * @deprecated since version 2.1.5\r\n * @todo remove at version 3\r\n * @private\r\n */\r\ncore_controller.Title = plugins.title._element;\r\n\r\n/**\r\n * Provided for backward compatibility, use Chart.plugins instead\r\n * @namespace Chart.pluginService\r\n * @deprecated since version 2.1.5\r\n * @todo remove at version 3\r\n * @private\r\n */\r\ncore_controller.pluginService = core_controller.plugins;\r\n\r\n/**\r\n * Provided for backward compatibility, inheriting from Chart.PlugingBase has no\r\n * effect, instead simply create/register plugins via plain JavaScript objects.\r\n * @interface Chart.PluginBase\r\n * @deprecated since version 2.5.0\r\n * @todo remove at version 3\r\n * @private\r\n */\r\ncore_controller.PluginBase = core_controller.Element.extend({});\r\n\r\n/**\r\n * Provided for backward compatibility, use Chart.helpers.canvas instead.\r\n * @namespace Chart.canvasHelpers\r\n * @deprecated since version 2.6.0\r\n * @todo remove at version 3\r\n * @private\r\n */\r\ncore_controller.canvasHelpers = core_controller.helpers.canvas;\r\n\r\n/**\r\n * Provided for backward compatibility, use Chart.layouts instead.\r\n * @namespace Chart.layoutService\r\n * @deprecated since version 2.7.3\r\n * @todo remove at version 3\r\n * @private\r\n */\r\ncore_controller.layoutService = core_controller.layouts;\r\n\r\n/**\r\n * Provided for backward compatibility, not available anymore.\r\n * @namespace Chart.LinearScaleBase\r\n * @deprecated since version 2.8\r\n * @todo remove at version 3\r\n * @private\r\n */\r\ncore_controller.LinearScaleBase = scale_linearbase;\r\n\r\n/**\r\n * Provided for backward compatibility, instead we should create a new Chart\r\n * by setting the type in the config (`new Chart(id, {type: '{chart-type}'}`).\r\n * @deprecated since version 2.8.0\r\n * @todo remove at version 3\r\n */\r\ncore_controller.helpers.each(\r\n\t[\r\n\t\t'Bar',\r\n\t\t'Bubble',\r\n\t\t'Doughnut',\r\n\t\t'Line',\r\n\t\t'PolarArea',\r\n\t\t'Radar',\r\n\t\t'Scatter'\r\n\t],\r\n\tfunction(klass) {\r\n\t\tcore_controller[klass] = function(ctx, cfg) {\r\n\t\t\treturn new core_controller(ctx, core_controller.helpers.merge(cfg || {}, {\r\n\t\t\t\ttype: klass.charAt(0).toLowerCase() + klass.slice(1)\r\n\t\t\t}));\r\n\t\t};\r\n\t}\r\n);\n\nreturn src;\n\n})));\n","/* MIT license */\nvar colorNames = require('color-name');\n\nmodule.exports = {\n   getRgba: getRgba,\n   getHsla: getHsla,\n   getRgb: getRgb,\n   getHsl: getHsl,\n   getHwb: getHwb,\n   getAlpha: getAlpha,\n\n   hexString: hexString,\n   rgbString: rgbString,\n   rgbaString: rgbaString,\n   percentString: percentString,\n   percentaString: percentaString,\n   hslString: hslString,\n   hslaString: hslaString,\n   hwbString: hwbString,\n   keyword: keyword\n}\n\nfunction getRgba(string) {\n   if (!string) {\n      return;\n   }\n   var abbr =  /^#([a-fA-F0-9]{3,4})$/i,\n       hex =  /^#([a-fA-F0-9]{6}([a-fA-F0-9]{2})?)$/i,\n       rgba = /^rgba?\\(\\s*([+-]?\\d+)\\s*,\\s*([+-]?\\d+)\\s*,\\s*([+-]?\\d+)\\s*(?:,\\s*([+-]?[\\d\\.]+)\\s*)?\\)$/i,\n       per = /^rgba?\\(\\s*([+-]?[\\d\\.]+)\\%\\s*,\\s*([+-]?[\\d\\.]+)\\%\\s*,\\s*([+-]?[\\d\\.]+)\\%\\s*(?:,\\s*([+-]?[\\d\\.]+)\\s*)?\\)$/i,\n       keyword = /(\\w+)/;\n\n   var rgb = [0, 0, 0],\n       a = 1,\n       match = string.match(abbr),\n       hexAlpha = \"\";\n   if (match) {\n      match = match[1];\n      hexAlpha = match[3];\n      for (var i = 0; i < rgb.length; i++) {\n         rgb[i] = parseInt(match[i] + match[i], 16);\n      }\n      if (hexAlpha) {\n         a = Math.round((parseInt(hexAlpha + hexAlpha, 16) / 255) * 100) / 100;\n      }\n   }\n   else if (match = string.match(hex)) {\n      hexAlpha = match[2];\n      match = match[1];\n      for (var i = 0; i < rgb.length; i++) {\n         rgb[i] = parseInt(match.slice(i * 2, i * 2 + 2), 16);\n      }\n      if (hexAlpha) {\n         a = Math.round((parseInt(hexAlpha, 16) / 255) * 100) / 100;\n      }\n   }\n   else if (match = string.match(rgba)) {\n      for (var i = 0; i < rgb.length; i++) {\n         rgb[i] = parseInt(match[i + 1]);\n      }\n      a = parseFloat(match[4]);\n   }\n   else if (match = string.match(per)) {\n      for (var i = 0; i < rgb.length; i++) {\n         rgb[i] = Math.round(parseFloat(match[i + 1]) * 2.55);\n      }\n      a = parseFloat(match[4]);\n   }\n   else if (match = string.match(keyword)) {\n      if (match[1] == \"transparent\") {\n         return [0, 0, 0, 0];\n      }\n      rgb = colorNames[match[1]];\n      if (!rgb) {\n         return;\n      }\n   }\n\n   for (var i = 0; i < rgb.length; i++) {\n      rgb[i] = scale(rgb[i], 0, 255);\n   }\n   if (!a && a != 0) {\n      a = 1;\n   }\n   else {\n      a = scale(a, 0, 1);\n   }\n   rgb[3] = a;\n   return rgb;\n}\n\nfunction getHsla(string) {\n   if (!string) {\n      return;\n   }\n   var hsl = /^hsla?\\(\\s*([+-]?\\d+)(?:deg)?\\s*,\\s*([+-]?[\\d\\.]+)%\\s*,\\s*([+-]?[\\d\\.]+)%\\s*(?:,\\s*([+-]?[\\d\\.]+)\\s*)?\\)/;\n   var match = string.match(hsl);\n   if (match) {\n      var alpha = parseFloat(match[4]);\n      var h = scale(parseInt(match[1]), 0, 360),\n          s = scale(parseFloat(match[2]), 0, 100),\n          l = scale(parseFloat(match[3]), 0, 100),\n          a = scale(isNaN(alpha) ? 1 : alpha, 0, 1);\n      return [h, s, l, a];\n   }\n}\n\nfunction getHwb(string) {\n   if (!string) {\n      return;\n   }\n   var hwb = /^hwb\\(\\s*([+-]?\\d+)(?:deg)?\\s*,\\s*([+-]?[\\d\\.]+)%\\s*,\\s*([+-]?[\\d\\.]+)%\\s*(?:,\\s*([+-]?[\\d\\.]+)\\s*)?\\)/;\n   var match = string.match(hwb);\n   if (match) {\n    var alpha = parseFloat(match[4]);\n      var h = scale(parseInt(match[1]), 0, 360),\n          w = scale(parseFloat(match[2]), 0, 100),\n          b = scale(parseFloat(match[3]), 0, 100),\n          a = scale(isNaN(alpha) ? 1 : alpha, 0, 1);\n      return [h, w, b, a];\n   }\n}\n\nfunction getRgb(string) {\n   var rgba = getRgba(string);\n   return rgba && rgba.slice(0, 3);\n}\n\nfunction getHsl(string) {\n  var hsla = getHsla(string);\n  return hsla && hsla.slice(0, 3);\n}\n\nfunction getAlpha(string) {\n   var vals = getRgba(string);\n   if (vals) {\n      return vals[3];\n   }\n   else if (vals = getHsla(string)) {\n      return vals[3];\n   }\n   else if (vals = getHwb(string)) {\n      return vals[3];\n   }\n}\n\n// generators\nfunction hexString(rgba, a) {\n   var a = (a !== undefined && rgba.length === 3) ? a : rgba[3];\n   return \"#\" + hexDouble(rgba[0]) \n              + hexDouble(rgba[1])\n              + hexDouble(rgba[2])\n              + (\n                 (a >= 0 && a < 1)\n                 ? hexDouble(Math.round(a * 255))\n                 : \"\"\n              );\n}\n\nfunction rgbString(rgba, alpha) {\n   if (alpha < 1 || (rgba[3] && rgba[3] < 1)) {\n      return rgbaString(rgba, alpha);\n   }\n   return \"rgb(\" + rgba[0] + \", \" + rgba[1] + \", \" + rgba[2] + \")\";\n}\n\nfunction rgbaString(rgba, alpha) {\n   if (alpha === undefined) {\n      alpha = (rgba[3] !== undefined ? rgba[3] : 1);\n   }\n   return \"rgba(\" + rgba[0] + \", \" + rgba[1] + \", \" + rgba[2]\n           + \", \" + alpha + \")\";\n}\n\nfunction percentString(rgba, alpha) {\n   if (alpha < 1 || (rgba[3] && rgba[3] < 1)) {\n      return percentaString(rgba, alpha);\n   }\n   var r = Math.round(rgba[0]/255 * 100),\n       g = Math.round(rgba[1]/255 * 100),\n       b = Math.round(rgba[2]/255 * 100);\n\n   return \"rgb(\" + r + \"%, \" + g + \"%, \" + b + \"%)\";\n}\n\nfunction percentaString(rgba, alpha) {\n   var r = Math.round(rgba[0]/255 * 100),\n       g = Math.round(rgba[1]/255 * 100),\n       b = Math.round(rgba[2]/255 * 100);\n   return \"rgba(\" + r + \"%, \" + g + \"%, \" + b + \"%, \" + (alpha || rgba[3] || 1) + \")\";\n}\n\nfunction hslString(hsla, alpha) {\n   if (alpha < 1 || (hsla[3] && hsla[3] < 1)) {\n      return hslaString(hsla, alpha);\n   }\n   return \"hsl(\" + hsla[0] + \", \" + hsla[1] + \"%, \" + hsla[2] + \"%)\";\n}\n\nfunction hslaString(hsla, alpha) {\n   if (alpha === undefined) {\n      alpha = (hsla[3] !== undefined ? hsla[3] : 1);\n   }\n   return \"hsla(\" + hsla[0] + \", \" + hsla[1] + \"%, \" + hsla[2] + \"%, \"\n           + alpha + \")\";\n}\n\n// hwb is a bit different than rgb(a) & hsl(a) since there is no alpha specific syntax\n// (hwb have alpha optional & 1 is default value)\nfunction hwbString(hwb, alpha) {\n   if (alpha === undefined) {\n      alpha = (hwb[3] !== undefined ? hwb[3] : 1);\n   }\n   return \"hwb(\" + hwb[0] + \", \" + hwb[1] + \"%, \" + hwb[2] + \"%\"\n           + (alpha !== undefined && alpha !== 1 ? \", \" + alpha : \"\") + \")\";\n}\n\nfunction keyword(rgb) {\n  return reverseNames[rgb.slice(0, 3)];\n}\n\n// helpers\nfunction scale(num, min, max) {\n   return Math.min(Math.max(min, num), max);\n}\n\nfunction hexDouble(num) {\n  var str = num.toString(16).toUpperCase();\n  return (str.length < 2) ? \"0\" + str : str;\n}\n\n\n//create a list of reverse color names\nvar reverseNames = {};\nfor (var name in colorNames) {\n   reverseNames[colorNames[name]] = name;\n}\n","/* MIT license */\nvar convert = require('color-convert');\nvar string = require('chartjs-color-string');\n\nvar Color = function (obj) {\n\tif (obj instanceof Color) {\n\t\treturn obj;\n\t}\n\tif (!(this instanceof Color)) {\n\t\treturn new Color(obj);\n\t}\n\n\tthis.valid = false;\n\tthis.values = {\n\t\trgb: [0, 0, 0],\n\t\thsl: [0, 0, 0],\n\t\thsv: [0, 0, 0],\n\t\thwb: [0, 0, 0],\n\t\tcmyk: [0, 0, 0, 0],\n\t\talpha: 1\n\t};\n\n\t// parse Color() argument\n\tvar vals;\n\tif (typeof obj === 'string') {\n\t\tvals = string.getRgba(obj);\n\t\tif (vals) {\n\t\t\tthis.setValues('rgb', vals);\n\t\t} else if (vals = string.getHsla(obj)) {\n\t\t\tthis.setValues('hsl', vals);\n\t\t} else if (vals = string.getHwb(obj)) {\n\t\t\tthis.setValues('hwb', vals);\n\t\t}\n\t} else if (typeof obj === 'object') {\n\t\tvals = obj;\n\t\tif (vals.r !== undefined || vals.red !== undefined) {\n\t\t\tthis.setValues('rgb', vals);\n\t\t} else if (vals.l !== undefined || vals.lightness !== undefined) {\n\t\t\tthis.setValues('hsl', vals);\n\t\t} else if (vals.v !== undefined || vals.value !== undefined) {\n\t\t\tthis.setValues('hsv', vals);\n\t\t} else if (vals.w !== undefined || vals.whiteness !== undefined) {\n\t\t\tthis.setValues('hwb', vals);\n\t\t} else if (vals.c !== undefined || vals.cyan !== undefined) {\n\t\t\tthis.setValues('cmyk', vals);\n\t\t}\n\t}\n};\n\nColor.prototype = {\n\tisValid: function () {\n\t\treturn this.valid;\n\t},\n\trgb: function () {\n\t\treturn this.setSpace('rgb', arguments);\n\t},\n\thsl: function () {\n\t\treturn this.setSpace('hsl', arguments);\n\t},\n\thsv: function () {\n\t\treturn this.setSpace('hsv', arguments);\n\t},\n\thwb: function () {\n\t\treturn this.setSpace('hwb', arguments);\n\t},\n\tcmyk: function () {\n\t\treturn this.setSpace('cmyk', arguments);\n\t},\n\n\trgbArray: function () {\n\t\treturn this.values.rgb;\n\t},\n\thslArray: function () {\n\t\treturn this.values.hsl;\n\t},\n\thsvArray: function () {\n\t\treturn this.values.hsv;\n\t},\n\thwbArray: function () {\n\t\tvar values = this.values;\n\t\tif (values.alpha !== 1) {\n\t\t\treturn values.hwb.concat([values.alpha]);\n\t\t}\n\t\treturn values.hwb;\n\t},\n\tcmykArray: function () {\n\t\treturn this.values.cmyk;\n\t},\n\trgbaArray: function () {\n\t\tvar values = this.values;\n\t\treturn values.rgb.concat([values.alpha]);\n\t},\n\thslaArray: function () {\n\t\tvar values = this.values;\n\t\treturn values.hsl.concat([values.alpha]);\n\t},\n\talpha: function (val) {\n\t\tif (val === undefined) {\n\t\t\treturn this.values.alpha;\n\t\t}\n\t\tthis.setValues('alpha', val);\n\t\treturn this;\n\t},\n\n\tred: function (val) {\n\t\treturn this.setChannel('rgb', 0, val);\n\t},\n\tgreen: function (val) {\n\t\treturn this.setChannel('rgb', 1, val);\n\t},\n\tblue: function (val) {\n\t\treturn this.setChannel('rgb', 2, val);\n\t},\n\thue: function (val) {\n\t\tif (val) {\n\t\t\tval %= 360;\n\t\t\tval = val < 0 ? 360 + val : val;\n\t\t}\n\t\treturn this.setChannel('hsl', 0, val);\n\t},\n\tsaturation: function (val) {\n\t\treturn this.setChannel('hsl', 1, val);\n\t},\n\tlightness: function (val) {\n\t\treturn this.setChannel('hsl', 2, val);\n\t},\n\tsaturationv: function (val) {\n\t\treturn this.setChannel('hsv', 1, val);\n\t},\n\twhiteness: function (val) {\n\t\treturn this.setChannel('hwb', 1, val);\n\t},\n\tblackness: function (val) {\n\t\treturn this.setChannel('hwb', 2, val);\n\t},\n\tvalue: function (val) {\n\t\treturn this.setChannel('hsv', 2, val);\n\t},\n\tcyan: function (val) {\n\t\treturn this.setChannel('cmyk', 0, val);\n\t},\n\tmagenta: function (val) {\n\t\treturn this.setChannel('cmyk', 1, val);\n\t},\n\tyellow: function (val) {\n\t\treturn this.setChannel('cmyk', 2, val);\n\t},\n\tblack: function (val) {\n\t\treturn this.setChannel('cmyk', 3, val);\n\t},\n\n\thexString: function () {\n\t\treturn string.hexString(this.values.rgb);\n\t},\n\trgbString: function () {\n\t\treturn string.rgbString(this.values.rgb, this.values.alpha);\n\t},\n\trgbaString: function () {\n\t\treturn string.rgbaString(this.values.rgb, this.values.alpha);\n\t},\n\tpercentString: function () {\n\t\treturn string.percentString(this.values.rgb, this.values.alpha);\n\t},\n\thslString: function () {\n\t\treturn string.hslString(this.values.hsl, this.values.alpha);\n\t},\n\thslaString: function () {\n\t\treturn string.hslaString(this.values.hsl, this.values.alpha);\n\t},\n\thwbString: function () {\n\t\treturn string.hwbString(this.values.hwb, this.values.alpha);\n\t},\n\tkeyword: function () {\n\t\treturn string.keyword(this.values.rgb, this.values.alpha);\n\t},\n\n\trgbNumber: function () {\n\t\tvar rgb = this.values.rgb;\n\t\treturn (rgb[0] << 16) | (rgb[1] << 8) | rgb[2];\n\t},\n\n\tluminosity: function () {\n\t\t// http://www.w3.org/TR/WCAG20/#relativeluminancedef\n\t\tvar rgb = this.values.rgb;\n\t\tvar lum = [];\n\t\tfor (var i = 0; i < rgb.length; i++) {\n\t\t\tvar chan = rgb[i] / 255;\n\t\t\tlum[i] = (chan <= 0.03928) ? chan / 12.92 : Math.pow(((chan + 0.055) / 1.055), 2.4);\n\t\t}\n\t\treturn 0.2126 * lum[0] + 0.7152 * lum[1] + 0.0722 * lum[2];\n\t},\n\n\tcontrast: function (color2) {\n\t\t// http://www.w3.org/TR/WCAG20/#contrast-ratiodef\n\t\tvar lum1 = this.luminosity();\n\t\tvar lum2 = color2.luminosity();\n\t\tif (lum1 > lum2) {\n\t\t\treturn (lum1 + 0.05) / (lum2 + 0.05);\n\t\t}\n\t\treturn (lum2 + 0.05) / (lum1 + 0.05);\n\t},\n\n\tlevel: function (color2) {\n\t\tvar contrastRatio = this.contrast(color2);\n\t\tif (contrastRatio >= 7.1) {\n\t\t\treturn 'AAA';\n\t\t}\n\n\t\treturn (contrastRatio >= 4.5) ? 'AA' : '';\n\t},\n\n\tdark: function () {\n\t\t// YIQ equation from http://24ways.org/2010/calculating-color-contrast\n\t\tvar rgb = this.values.rgb;\n\t\tvar yiq = (rgb[0] * 299 + rgb[1] * 587 + rgb[2] * 114) / 1000;\n\t\treturn yiq < 128;\n\t},\n\n\tlight: function () {\n\t\treturn !this.dark();\n\t},\n\n\tnegate: function () {\n\t\tvar rgb = [];\n\t\tfor (var i = 0; i < 3; i++) {\n\t\t\trgb[i] = 255 - this.values.rgb[i];\n\t\t}\n\t\tthis.setValues('rgb', rgb);\n\t\treturn this;\n\t},\n\n\tlighten: function (ratio) {\n\t\tvar hsl = this.values.hsl;\n\t\thsl[2] += hsl[2] * ratio;\n\t\tthis.setValues('hsl', hsl);\n\t\treturn this;\n\t},\n\n\tdarken: function (ratio) {\n\t\tvar hsl = this.values.hsl;\n\t\thsl[2] -= hsl[2] * ratio;\n\t\tthis.setValues('hsl', hsl);\n\t\treturn this;\n\t},\n\n\tsaturate: function (ratio) {\n\t\tvar hsl = this.values.hsl;\n\t\thsl[1] += hsl[1] * ratio;\n\t\tthis.setValues('hsl', hsl);\n\t\treturn this;\n\t},\n\n\tdesaturate: function (ratio) {\n\t\tvar hsl = this.values.hsl;\n\t\thsl[1] -= hsl[1] * ratio;\n\t\tthis.setValues('hsl', hsl);\n\t\treturn this;\n\t},\n\n\twhiten: function (ratio) {\n\t\tvar hwb = this.values.hwb;\n\t\thwb[1] += hwb[1] * ratio;\n\t\tthis.setValues('hwb', hwb);\n\t\treturn this;\n\t},\n\n\tblacken: function (ratio) {\n\t\tvar hwb = this.values.hwb;\n\t\thwb[2] += hwb[2] * ratio;\n\t\tthis.setValues('hwb', hwb);\n\t\treturn this;\n\t},\n\n\tgreyscale: function () {\n\t\tvar rgb = this.values.rgb;\n\t\t// http://en.wikipedia.org/wiki/Grayscale#Converting_color_to_grayscale\n\t\tvar val = rgb[0] * 0.3 + rgb[1] * 0.59 + rgb[2] * 0.11;\n\t\tthis.setValues('rgb', [val, val, val]);\n\t\treturn this;\n\t},\n\n\tclearer: function (ratio) {\n\t\tvar alpha = this.values.alpha;\n\t\tthis.setValues('alpha', alpha - (alpha * ratio));\n\t\treturn this;\n\t},\n\n\topaquer: function (ratio) {\n\t\tvar alpha = this.values.alpha;\n\t\tthis.setValues('alpha', alpha + (alpha * ratio));\n\t\treturn this;\n\t},\n\n\trotate: function (degrees) {\n\t\tvar hsl = this.values.hsl;\n\t\tvar hue = (hsl[0] + degrees) % 360;\n\t\thsl[0] = hue < 0 ? 360 + hue : hue;\n\t\tthis.setValues('hsl', hsl);\n\t\treturn this;\n\t},\n\n\t/**\n\t * Ported from sass implementation in C\n\t * https://github.com/sass/libsass/blob/0e6b4a2850092356aa3ece07c6b249f0221caced/functions.cpp#L209\n\t */\n\tmix: function (mixinColor, weight) {\n\t\tvar color1 = this;\n\t\tvar color2 = mixinColor;\n\t\tvar p = weight === undefined ? 0.5 : weight;\n\n\t\tvar w = 2 * p - 1;\n\t\tvar a = color1.alpha() - color2.alpha();\n\n\t\tvar w1 = (((w * a === -1) ? w : (w + a) / (1 + w * a)) + 1) / 2.0;\n\t\tvar w2 = 1 - w1;\n\n\t\treturn this\n\t\t\t.rgb(\n\t\t\t\tw1 * color1.red() + w2 * color2.red(),\n\t\t\t\tw1 * color1.green() + w2 * color2.green(),\n\t\t\t\tw1 * color1.blue() + w2 * color2.blue()\n\t\t\t)\n\t\t\t.alpha(color1.alpha() * p + color2.alpha() * (1 - p));\n\t},\n\n\ttoJSON: function () {\n\t\treturn this.rgb();\n\t},\n\n\tclone: function () {\n\t\t// NOTE(SB): using node-clone creates a dependency to Buffer when using browserify,\n\t\t// making the final build way to big to embed in Chart.js. So let's do it manually,\n\t\t// assuming that values to clone are 1 dimension arrays containing only numbers,\n\t\t// except 'alpha' which is a number.\n\t\tvar result = new Color();\n\t\tvar source = this.values;\n\t\tvar target = result.values;\n\t\tvar value, type;\n\n\t\tfor (var prop in source) {\n\t\t\tif (source.hasOwnProperty(prop)) {\n\t\t\t\tvalue = source[prop];\n\t\t\t\ttype = ({}).toString.call(value);\n\t\t\t\tif (type === '[object Array]') {\n\t\t\t\t\ttarget[prop] = value.slice(0);\n\t\t\t\t} else if (type === '[object Number]') {\n\t\t\t\t\ttarget[prop] = value;\n\t\t\t\t} else {\n\t\t\t\t\tconsole.error('unexpected color value:', value);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn result;\n\t}\n};\n\nColor.prototype.spaces = {\n\trgb: ['red', 'green', 'blue'],\n\thsl: ['hue', 'saturation', 'lightness'],\n\thsv: ['hue', 'saturation', 'value'],\n\thwb: ['hue', 'whiteness', 'blackness'],\n\tcmyk: ['cyan', 'magenta', 'yellow', 'black']\n};\n\nColor.prototype.maxes = {\n\trgb: [255, 255, 255],\n\thsl: [360, 100, 100],\n\thsv: [360, 100, 100],\n\thwb: [360, 100, 100],\n\tcmyk: [100, 100, 100, 100]\n};\n\nColor.prototype.getValues = function (space) {\n\tvar values = this.values;\n\tvar vals = {};\n\n\tfor (var i = 0; i < space.length; i++) {\n\t\tvals[space.charAt(i)] = values[space][i];\n\t}\n\n\tif (values.alpha !== 1) {\n\t\tvals.a = values.alpha;\n\t}\n\n\t// {r: 255, g: 255, b: 255, a: 0.4}\n\treturn vals;\n};\n\nColor.prototype.setValues = function (space, vals) {\n\tvar values = this.values;\n\tvar spaces = this.spaces;\n\tvar maxes = this.maxes;\n\tvar alpha = 1;\n\tvar i;\n\n\tthis.valid = true;\n\n\tif (space === 'alpha') {\n\t\talpha = vals;\n\t} else if (vals.length) {\n\t\t// [10, 10, 10]\n\t\tvalues[space] = vals.slice(0, space.length);\n\t\talpha = vals[space.length];\n\t} else if (vals[space.charAt(0)] !== undefined) {\n\t\t// {r: 10, g: 10, b: 10}\n\t\tfor (i = 0; i < space.length; i++) {\n\t\t\tvalues[space][i] = vals[space.charAt(i)];\n\t\t}\n\n\t\talpha = vals.a;\n\t} else if (vals[spaces[space][0]] !== undefined) {\n\t\t// {red: 10, green: 10, blue: 10}\n\t\tvar chans = spaces[space];\n\n\t\tfor (i = 0; i < space.length; i++) {\n\t\t\tvalues[space][i] = vals[chans[i]];\n\t\t}\n\n\t\talpha = vals.alpha;\n\t}\n\n\tvalues.alpha = Math.max(0, Math.min(1, (alpha === undefined ? values.alpha : alpha)));\n\n\tif (space === 'alpha') {\n\t\treturn false;\n\t}\n\n\tvar capped;\n\n\t// cap values of the space prior converting all values\n\tfor (i = 0; i < space.length; i++) {\n\t\tcapped = Math.max(0, Math.min(maxes[space][i], values[space][i]));\n\t\tvalues[space][i] = Math.round(capped);\n\t}\n\n\t// convert to all the other color spaces\n\tfor (var sname in spaces) {\n\t\tif (sname !== space) {\n\t\t\tvalues[sname] = convert[space][sname](values[space]);\n\t\t}\n\t}\n\n\treturn true;\n};\n\nColor.prototype.setSpace = function (space, args) {\n\tvar vals = args[0];\n\n\tif (vals === undefined) {\n\t\t// color.rgb()\n\t\treturn this.getValues(space);\n\t}\n\n\t// color.rgb(10, 10, 10)\n\tif (typeof vals === 'number') {\n\t\tvals = Array.prototype.slice.call(args);\n\t}\n\n\tthis.setValues(space, vals);\n\treturn this;\n};\n\nColor.prototype.setChannel = function (space, index, val) {\n\tvar svalues = this.values[space];\n\tif (val === undefined) {\n\t\t// color.red()\n\t\treturn svalues[index];\n\t} else if (val === svalues[index]) {\n\t\t// color.red(color.red())\n\t\treturn this;\n\t}\n\n\t// color.red(100)\n\tsvalues[index] = val;\n\tthis.setValues(space, svalues);\n\n\treturn this;\n};\n\nif (typeof window !== 'undefined') {\n\twindow.Color = Color;\n}\n\nmodule.exports = Color;\n","'use strict';\n\nvar Buffer = require('safe-buffer').Buffer;\nvar Transform = require('stream').Transform;\nvar StringDecoder = require('string_decoder').StringDecoder;\nvar inherits = require('inherits');\n\nfunction CipherBase(hashMode) {\n\tTransform.call(this);\n\tthis.hashMode = typeof hashMode === 'string';\n\tif (this.hashMode) {\n\t\tthis[hashMode] = this._finalOrDigest;\n\t} else {\n\t\tthis['final'] = this._finalOrDigest;\n\t}\n\tif (this._final) {\n\t\tthis.__final = this._final;\n\t\tthis._final = null;\n\t}\n\tthis._decoder = null;\n\tthis._encoding = null;\n}\ninherits(CipherBase, Transform);\n\nvar useUint8Array = typeof Uint8Array !== 'undefined';\nvar useArrayBuffer = typeof ArrayBuffer !== 'undefined'\n\t&& typeof Uint8Array !== 'undefined'\n\t&& ArrayBuffer.isView\n\t&& (Buffer.prototype instanceof Uint8Array || Buffer.TYPED_ARRAY_SUPPORT);\n\nfunction toBuffer(data, encoding) {\n\t/*\n\t * No need to do anything for exact instance\n\t * This is only valid when safe-buffer.Buffer === buffer.Buffer, i.e. when Buffer.from/Buffer.alloc existed\n\t */\n\tif (data instanceof Buffer) {\n\t\treturn data;\n\t}\n\n\t// Convert strings to Buffer\n\tif (typeof data === 'string') {\n\t\treturn Buffer.from(data, encoding);\n\t}\n\n\t/*\n\t * Wrap any TypedArray instances and DataViews\n\t * Makes sense only on engines with full TypedArray support -- let Buffer detect that\n\t */\n\tif (useArrayBuffer && ArrayBuffer.isView(data)) {\n\t\t// Bug in Node.js <6.3.1, which treats this as out-of-bounds\n\t\tif (data.byteLength === 0) {\n\t\t\treturn Buffer.alloc(0);\n\t\t}\n\n\t\tvar res = Buffer.from(data.buffer, data.byteOffset, data.byteLength);\n\t\t/*\n\t\t * Recheck result size, as offset/length doesn't work on Node.js <5.10\n\t\t * We just go to Uint8Array case if this fails\n\t\t */\n\t\tif (res.byteLength === data.byteLength) {\n\t\t\treturn res;\n\t\t}\n\t}\n\n\t/*\n\t * Uint8Array in engines where Buffer.from might not work with ArrayBuffer, just copy over\n\t * Doesn't make sense with other TypedArray instances\n\t */\n\tif (useUint8Array && data instanceof Uint8Array) {\n\t\treturn Buffer.from(data);\n\t}\n\n\t/*\n\t * Old Buffer polyfill on an engine that doesn't have TypedArray support\n\t * Also, this is from a different Buffer polyfill implementation then we have, as instanceof check failed\n\t * Convert to our current Buffer implementation\n\t */\n\tif (\n\t\tBuffer.isBuffer(data)\n\t\t\t&& data.constructor\n\t\t\t&& typeof data.constructor.isBuffer === 'function'\n\t\t\t&& data.constructor.isBuffer(data)\n\t) {\n\t\treturn Buffer.from(data);\n\t}\n\n\tthrow new TypeError('The \"data\" argument must be of type string or an instance of Buffer, TypedArray, or DataView.');\n}\n\nCipherBase.prototype.update = function (data, inputEnc, outputEnc) {\n\tvar bufferData = toBuffer(data, inputEnc); // asserts correct input type\n\tvar outData = this._update(bufferData);\n\tif (this.hashMode) {\n\t\treturn this;\n\t}\n\n\tif (outputEnc) {\n\t\toutData = this._toString(outData, outputEnc);\n\t}\n\n\treturn outData;\n};\n\nCipherBase.prototype.setAutoPadding = function () {};\nCipherBase.prototype.getAuthTag = function () {\n\tthrow new Error('trying to get auth tag in unsupported state');\n};\n\nCipherBase.prototype.setAuthTag = function () {\n\tthrow new Error('trying to set auth tag in unsupported state');\n};\n\nCipherBase.prototype.setAAD = function () {\n\tthrow new Error('trying to set aad in unsupported state');\n};\n\nCipherBase.prototype._transform = function (data, _, next) {\n\tvar err;\n\ttry {\n\t\tif (this.hashMode) {\n\t\t\tthis._update(data);\n\t\t} else {\n\t\t\tthis.push(this._update(data));\n\t\t}\n\t} catch (e) {\n\t\terr = e;\n\t} finally {\n\t\tnext(err);\n\t}\n};\nCipherBase.prototype._flush = function (done) {\n\tvar err;\n\ttry {\n\t\tthis.push(this.__final());\n\t} catch (e) {\n\t\terr = e;\n\t}\n\n\tdone(err);\n};\nCipherBase.prototype._finalOrDigest = function (outputEnc) {\n\tvar outData = this.__final() || Buffer.alloc(0);\n\tif (outputEnc) {\n\t\toutData = this._toString(outData, outputEnc, true);\n\t}\n\treturn outData;\n};\n\nCipherBase.prototype._toString = function (value, enc, fin) {\n\tif (!this._decoder) {\n\t\tthis._decoder = new StringDecoder(enc);\n\t\tthis._encoding = enc;\n\t}\n\n\tif (this._encoding !== enc) {\n\t\tthrow new Error('can’t switch encodings');\n\t}\n\n\tvar out = this._decoder.write(value);\n\tif (fin) {\n\t\tout += this._decoder.end();\n\t}\n\n\treturn out;\n};\n\nmodule.exports = CipherBase;\n","/* MIT license */\nvar cssKeywords = require('color-name');\n\n// NOTE: conversions should only return primitive values (i.e. arrays, or\n//       values that give correct `typeof` results).\n//       do not use box values types (i.e. Number(), String(), etc.)\n\nvar reverseKeywords = {};\nfor (var key in cssKeywords) {\n\tif (cssKeywords.hasOwnProperty(key)) {\n\t\treverseKeywords[cssKeywords[key]] = key;\n\t}\n}\n\nvar convert = module.exports = {\n\trgb: {channels: 3, labels: 'rgb'},\n\thsl: {channels: 3, labels: 'hsl'},\n\thsv: {channels: 3, labels: 'hsv'},\n\thwb: {channels: 3, labels: 'hwb'},\n\tcmyk: {channels: 4, labels: 'cmyk'},\n\txyz: {channels: 3, labels: 'xyz'},\n\tlab: {channels: 3, labels: 'lab'},\n\tlch: {channels: 3, labels: 'lch'},\n\thex: {channels: 1, labels: ['hex']},\n\tkeyword: {channels: 1, labels: ['keyword']},\n\tansi16: {channels: 1, labels: ['ansi16']},\n\tansi256: {channels: 1, labels: ['ansi256']},\n\thcg: {channels: 3, labels: ['h', 'c', 'g']},\n\tapple: {channels: 3, labels: ['r16', 'g16', 'b16']},\n\tgray: {channels: 1, labels: ['gray']}\n};\n\n// hide .channels and .labels properties\nfor (var model in convert) {\n\tif (convert.hasOwnProperty(model)) {\n\t\tif (!('channels' in convert[model])) {\n\t\t\tthrow new Error('missing channels property: ' + model);\n\t\t}\n\n\t\tif (!('labels' in convert[model])) {\n\t\t\tthrow new Error('missing channel labels property: ' + model);\n\t\t}\n\n\t\tif (convert[model].labels.length !== convert[model].channels) {\n\t\t\tthrow new Error('channel and label counts mismatch: ' + model);\n\t\t}\n\n\t\tvar channels = convert[model].channels;\n\t\tvar labels = convert[model].labels;\n\t\tdelete convert[model].channels;\n\t\tdelete convert[model].labels;\n\t\tObject.defineProperty(convert[model], 'channels', {value: channels});\n\t\tObject.defineProperty(convert[model], 'labels', {value: labels});\n\t}\n}\n\nconvert.rgb.hsl = function (rgb) {\n\tvar r = rgb[0] / 255;\n\tvar g = rgb[1] / 255;\n\tvar b = rgb[2] / 255;\n\tvar min = Math.min(r, g, b);\n\tvar max = Math.max(r, g, b);\n\tvar delta = max - min;\n\tvar h;\n\tvar s;\n\tvar l;\n\n\tif (max === min) {\n\t\th = 0;\n\t} else if (r === max) {\n\t\th = (g - b) / delta;\n\t} else if (g === max) {\n\t\th = 2 + (b - r) / delta;\n\t} else if (b === max) {\n\t\th = 4 + (r - g) / delta;\n\t}\n\n\th = Math.min(h * 60, 360);\n\n\tif (h < 0) {\n\t\th += 360;\n\t}\n\n\tl = (min + max) / 2;\n\n\tif (max === min) {\n\t\ts = 0;\n\t} else if (l <= 0.5) {\n\t\ts = delta / (max + min);\n\t} else {\n\t\ts = delta / (2 - max - min);\n\t}\n\n\treturn [h, s * 100, l * 100];\n};\n\nconvert.rgb.hsv = function (rgb) {\n\tvar rdif;\n\tvar gdif;\n\tvar bdif;\n\tvar h;\n\tvar s;\n\n\tvar r = rgb[0] / 255;\n\tvar g = rgb[1] / 255;\n\tvar b = rgb[2] / 255;\n\tvar v = Math.max(r, g, b);\n\tvar diff = v - Math.min(r, g, b);\n\tvar diffc = function (c) {\n\t\treturn (v - c) / 6 / diff + 1 / 2;\n\t};\n\n\tif (diff === 0) {\n\t\th = s = 0;\n\t} else {\n\t\ts = diff / v;\n\t\trdif = diffc(r);\n\t\tgdif = diffc(g);\n\t\tbdif = diffc(b);\n\n\t\tif (r === v) {\n\t\t\th = bdif - gdif;\n\t\t} else if (g === v) {\n\t\t\th = (1 / 3) + rdif - bdif;\n\t\t} else if (b === v) {\n\t\t\th = (2 / 3) + gdif - rdif;\n\t\t}\n\t\tif (h < 0) {\n\t\t\th += 1;\n\t\t} else if (h > 1) {\n\t\t\th -= 1;\n\t\t}\n\t}\n\n\treturn [\n\t\th * 360,\n\t\ts * 100,\n\t\tv * 100\n\t];\n};\n\nconvert.rgb.hwb = function (rgb) {\n\tvar r = rgb[0];\n\tvar g = rgb[1];\n\tvar b = rgb[2];\n\tvar h = convert.rgb.hsl(rgb)[0];\n\tvar w = 1 / 255 * Math.min(r, Math.min(g, b));\n\n\tb = 1 - 1 / 255 * Math.max(r, Math.max(g, b));\n\n\treturn [h, w * 100, b * 100];\n};\n\nconvert.rgb.cmyk = function (rgb) {\n\tvar r = rgb[0] / 255;\n\tvar g = rgb[1] / 255;\n\tvar b = rgb[2] / 255;\n\tvar c;\n\tvar m;\n\tvar y;\n\tvar k;\n\n\tk = Math.min(1 - r, 1 - g, 1 - b);\n\tc = (1 - r - k) / (1 - k) || 0;\n\tm = (1 - g - k) / (1 - k) || 0;\n\ty = (1 - b - k) / (1 - k) || 0;\n\n\treturn [c * 100, m * 100, y * 100, k * 100];\n};\n\n/**\n * See https://en.m.wikipedia.org/wiki/Euclidean_distance#Squared_Euclidean_distance\n * */\nfunction comparativeDistance(x, y) {\n\treturn (\n\t\tMath.pow(x[0] - y[0], 2) +\n\t\tMath.pow(x[1] - y[1], 2) +\n\t\tMath.pow(x[2] - y[2], 2)\n\t);\n}\n\nconvert.rgb.keyword = function (rgb) {\n\tvar reversed = reverseKeywords[rgb];\n\tif (reversed) {\n\t\treturn reversed;\n\t}\n\n\tvar currentClosestDistance = Infinity;\n\tvar currentClosestKeyword;\n\n\tfor (var keyword in cssKeywords) {\n\t\tif (cssKeywords.hasOwnProperty(keyword)) {\n\t\t\tvar value = cssKeywords[keyword];\n\n\t\t\t// Compute comparative distance\n\t\t\tvar distance = comparativeDistance(rgb, value);\n\n\t\t\t// Check if its less, if so set as closest\n\t\t\tif (distance < currentClosestDistance) {\n\t\t\t\tcurrentClosestDistance = distance;\n\t\t\t\tcurrentClosestKeyword = keyword;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn currentClosestKeyword;\n};\n\nconvert.keyword.rgb = function (keyword) {\n\treturn cssKeywords[keyword];\n};\n\nconvert.rgb.xyz = function (rgb) {\n\tvar r = rgb[0] / 255;\n\tvar g = rgb[1] / 255;\n\tvar b = rgb[2] / 255;\n\n\t// assume sRGB\n\tr = r > 0.04045 ? Math.pow(((r + 0.055) / 1.055), 2.4) : (r / 12.92);\n\tg = g > 0.04045 ? Math.pow(((g + 0.055) / 1.055), 2.4) : (g / 12.92);\n\tb = b > 0.04045 ? Math.pow(((b + 0.055) / 1.055), 2.4) : (b / 12.92);\n\n\tvar x = (r * 0.4124) + (g * 0.3576) + (b * 0.1805);\n\tvar y = (r * 0.2126) + (g * 0.7152) + (b * 0.0722);\n\tvar z = (r * 0.0193) + (g * 0.1192) + (b * 0.9505);\n\n\treturn [x * 100, y * 100, z * 100];\n};\n\nconvert.rgb.lab = function (rgb) {\n\tvar xyz = convert.rgb.xyz(rgb);\n\tvar x = xyz[0];\n\tvar y = xyz[1];\n\tvar z = xyz[2];\n\tvar l;\n\tvar a;\n\tvar b;\n\n\tx /= 95.047;\n\ty /= 100;\n\tz /= 108.883;\n\n\tx = x > 0.008856 ? Math.pow(x, 1 / 3) : (7.787 * x) + (16 / 116);\n\ty = y > 0.008856 ? Math.pow(y, 1 / 3) : (7.787 * y) + (16 / 116);\n\tz = z > 0.008856 ? Math.pow(z, 1 / 3) : (7.787 * z) + (16 / 116);\n\n\tl = (116 * y) - 16;\n\ta = 500 * (x - y);\n\tb = 200 * (y - z);\n\n\treturn [l, a, b];\n};\n\nconvert.hsl.rgb = function (hsl) {\n\tvar h = hsl[0] / 360;\n\tvar s = hsl[1] / 100;\n\tvar l = hsl[2] / 100;\n\tvar t1;\n\tvar t2;\n\tvar t3;\n\tvar rgb;\n\tvar val;\n\n\tif (s === 0) {\n\t\tval = l * 255;\n\t\treturn [val, val, val];\n\t}\n\n\tif (l < 0.5) {\n\t\tt2 = l * (1 + s);\n\t} else {\n\t\tt2 = l + s - l * s;\n\t}\n\n\tt1 = 2 * l - t2;\n\n\trgb = [0, 0, 0];\n\tfor (var i = 0; i < 3; i++) {\n\t\tt3 = h + 1 / 3 * -(i - 1);\n\t\tif (t3 < 0) {\n\t\t\tt3++;\n\t\t}\n\t\tif (t3 > 1) {\n\t\t\tt3--;\n\t\t}\n\n\t\tif (6 * t3 < 1) {\n\t\t\tval = t1 + (t2 - t1) * 6 * t3;\n\t\t} else if (2 * t3 < 1) {\n\t\t\tval = t2;\n\t\t} else if (3 * t3 < 2) {\n\t\t\tval = t1 + (t2 - t1) * (2 / 3 - t3) * 6;\n\t\t} else {\n\t\t\tval = t1;\n\t\t}\n\n\t\trgb[i] = val * 255;\n\t}\n\n\treturn rgb;\n};\n\nconvert.hsl.hsv = function (hsl) {\n\tvar h = hsl[0];\n\tvar s = hsl[1] / 100;\n\tvar l = hsl[2] / 100;\n\tvar smin = s;\n\tvar lmin = Math.max(l, 0.01);\n\tvar sv;\n\tvar v;\n\n\tl *= 2;\n\ts *= (l <= 1) ? l : 2 - l;\n\tsmin *= lmin <= 1 ? lmin : 2 - lmin;\n\tv = (l + s) / 2;\n\tsv = l === 0 ? (2 * smin) / (lmin + smin) : (2 * s) / (l + s);\n\n\treturn [h, sv * 100, v * 100];\n};\n\nconvert.hsv.rgb = function (hsv) {\n\tvar h = hsv[0] / 60;\n\tvar s = hsv[1] / 100;\n\tvar v = hsv[2] / 100;\n\tvar hi = Math.floor(h) % 6;\n\n\tvar f = h - Math.floor(h);\n\tvar p = 255 * v * (1 - s);\n\tvar q = 255 * v * (1 - (s * f));\n\tvar t = 255 * v * (1 - (s * (1 - f)));\n\tv *= 255;\n\n\tswitch (hi) {\n\t\tcase 0:\n\t\t\treturn [v, t, p];\n\t\tcase 1:\n\t\t\treturn [q, v, p];\n\t\tcase 2:\n\t\t\treturn [p, v, t];\n\t\tcase 3:\n\t\t\treturn [p, q, v];\n\t\tcase 4:\n\t\t\treturn [t, p, v];\n\t\tcase 5:\n\t\t\treturn [v, p, q];\n\t}\n};\n\nconvert.hsv.hsl = function (hsv) {\n\tvar h = hsv[0];\n\tvar s = hsv[1] / 100;\n\tvar v = hsv[2] / 100;\n\tvar vmin = Math.max(v, 0.01);\n\tvar lmin;\n\tvar sl;\n\tvar l;\n\n\tl = (2 - s) * v;\n\tlmin = (2 - s) * vmin;\n\tsl = s * vmin;\n\tsl /= (lmin <= 1) ? lmin : 2 - lmin;\n\tsl = sl || 0;\n\tl /= 2;\n\n\treturn [h, sl * 100, l * 100];\n};\n\n// http://dev.w3.org/csswg/css-color/#hwb-to-rgb\nconvert.hwb.rgb = function (hwb) {\n\tvar h = hwb[0] / 360;\n\tvar wh = hwb[1] / 100;\n\tvar bl = hwb[2] / 100;\n\tvar ratio = wh + bl;\n\tvar i;\n\tvar v;\n\tvar f;\n\tvar n;\n\n\t// wh + bl cant be > 1\n\tif (ratio > 1) {\n\t\twh /= ratio;\n\t\tbl /= ratio;\n\t}\n\n\ti = Math.floor(6 * h);\n\tv = 1 - bl;\n\tf = 6 * h - i;\n\n\tif ((i & 0x01) !== 0) {\n\t\tf = 1 - f;\n\t}\n\n\tn = wh + f * (v - wh); // linear interpolation\n\n\tvar r;\n\tvar g;\n\tvar b;\n\tswitch (i) {\n\t\tdefault:\n\t\tcase 6:\n\t\tcase 0: r = v; g = n; b = wh; break;\n\t\tcase 1: r = n; g = v; b = wh; break;\n\t\tcase 2: r = wh; g = v; b = n; break;\n\t\tcase 3: r = wh; g = n; b = v; break;\n\t\tcase 4: r = n; g = wh; b = v; break;\n\t\tcase 5: r = v; g = wh; b = n; break;\n\t}\n\n\treturn [r * 255, g * 255, b * 255];\n};\n\nconvert.cmyk.rgb = function (cmyk) {\n\tvar c = cmyk[0] / 100;\n\tvar m = cmyk[1] / 100;\n\tvar y = cmyk[2] / 100;\n\tvar k = cmyk[3] / 100;\n\tvar r;\n\tvar g;\n\tvar b;\n\n\tr = 1 - Math.min(1, c * (1 - k) + k);\n\tg = 1 - Math.min(1, m * (1 - k) + k);\n\tb = 1 - Math.min(1, y * (1 - k) + k);\n\n\treturn [r * 255, g * 255, b * 255];\n};\n\nconvert.xyz.rgb = function (xyz) {\n\tvar x = xyz[0] / 100;\n\tvar y = xyz[1] / 100;\n\tvar z = xyz[2] / 100;\n\tvar r;\n\tvar g;\n\tvar b;\n\n\tr = (x * 3.2406) + (y * -1.5372) + (z * -0.4986);\n\tg = (x * -0.9689) + (y * 1.8758) + (z * 0.0415);\n\tb = (x * 0.0557) + (y * -0.2040) + (z * 1.0570);\n\n\t// assume sRGB\n\tr = r > 0.0031308\n\t\t? ((1.055 * Math.pow(r, 1.0 / 2.4)) - 0.055)\n\t\t: r * 12.92;\n\n\tg = g > 0.0031308\n\t\t? ((1.055 * Math.pow(g, 1.0 / 2.4)) - 0.055)\n\t\t: g * 12.92;\n\n\tb = b > 0.0031308\n\t\t? ((1.055 * Math.pow(b, 1.0 / 2.4)) - 0.055)\n\t\t: b * 12.92;\n\n\tr = Math.min(Math.max(0, r), 1);\n\tg = Math.min(Math.max(0, g), 1);\n\tb = Math.min(Math.max(0, b), 1);\n\n\treturn [r * 255, g * 255, b * 255];\n};\n\nconvert.xyz.lab = function (xyz) {\n\tvar x = xyz[0];\n\tvar y = xyz[1];\n\tvar z = xyz[2];\n\tvar l;\n\tvar a;\n\tvar b;\n\n\tx /= 95.047;\n\ty /= 100;\n\tz /= 108.883;\n\n\tx = x > 0.008856 ? Math.pow(x, 1 / 3) : (7.787 * x) + (16 / 116);\n\ty = y > 0.008856 ? Math.pow(y, 1 / 3) : (7.787 * y) + (16 / 116);\n\tz = z > 0.008856 ? Math.pow(z, 1 / 3) : (7.787 * z) + (16 / 116);\n\n\tl = (116 * y) - 16;\n\ta = 500 * (x - y);\n\tb = 200 * (y - z);\n\n\treturn [l, a, b];\n};\n\nconvert.lab.xyz = function (lab) {\n\tvar l = lab[0];\n\tvar a = lab[1];\n\tvar b = lab[2];\n\tvar x;\n\tvar y;\n\tvar z;\n\n\ty = (l + 16) / 116;\n\tx = a / 500 + y;\n\tz = y - b / 200;\n\n\tvar y2 = Math.pow(y, 3);\n\tvar x2 = Math.pow(x, 3);\n\tvar z2 = Math.pow(z, 3);\n\ty = y2 > 0.008856 ? y2 : (y - 16 / 116) / 7.787;\n\tx = x2 > 0.008856 ? x2 : (x - 16 / 116) / 7.787;\n\tz = z2 > 0.008856 ? z2 : (z - 16 / 116) / 7.787;\n\n\tx *= 95.047;\n\ty *= 100;\n\tz *= 108.883;\n\n\treturn [x, y, z];\n};\n\nconvert.lab.lch = function (lab) {\n\tvar l = lab[0];\n\tvar a = lab[1];\n\tvar b = lab[2];\n\tvar hr;\n\tvar h;\n\tvar c;\n\n\thr = Math.atan2(b, a);\n\th = hr * 360 / 2 / Math.PI;\n\n\tif (h < 0) {\n\t\th += 360;\n\t}\n\n\tc = Math.sqrt(a * a + b * b);\n\n\treturn [l, c, h];\n};\n\nconvert.lch.lab = function (lch) {\n\tvar l = lch[0];\n\tvar c = lch[1];\n\tvar h = lch[2];\n\tvar a;\n\tvar b;\n\tvar hr;\n\n\thr = h / 360 * 2 * Math.PI;\n\ta = c * Math.cos(hr);\n\tb = c * Math.sin(hr);\n\n\treturn [l, a, b];\n};\n\nconvert.rgb.ansi16 = function (args) {\n\tvar r = args[0];\n\tvar g = args[1];\n\tvar b = args[2];\n\tvar value = 1 in arguments ? arguments[1] : convert.rgb.hsv(args)[2]; // hsv -> ansi16 optimization\n\n\tvalue = Math.round(value / 50);\n\n\tif (value === 0) {\n\t\treturn 30;\n\t}\n\n\tvar ansi = 30\n\t\t+ ((Math.round(b / 255) << 2)\n\t\t| (Math.round(g / 255) << 1)\n\t\t| Math.round(r / 255));\n\n\tif (value === 2) {\n\t\tansi += 60;\n\t}\n\n\treturn ansi;\n};\n\nconvert.hsv.ansi16 = function (args) {\n\t// optimization here; we already know the value and don't need to get\n\t// it converted for us.\n\treturn convert.rgb.ansi16(convert.hsv.rgb(args), args[2]);\n};\n\nconvert.rgb.ansi256 = function (args) {\n\tvar r = args[0];\n\tvar g = args[1];\n\tvar b = args[2];\n\n\t// we use the extended greyscale palette here, with the exception of\n\t// black and white. normal palette only has 4 greyscale shades.\n\tif (r === g && g === b) {\n\t\tif (r < 8) {\n\t\t\treturn 16;\n\t\t}\n\n\t\tif (r > 248) {\n\t\t\treturn 231;\n\t\t}\n\n\t\treturn Math.round(((r - 8) / 247) * 24) + 232;\n\t}\n\n\tvar ansi = 16\n\t\t+ (36 * Math.round(r / 255 * 5))\n\t\t+ (6 * Math.round(g / 255 * 5))\n\t\t+ Math.round(b / 255 * 5);\n\n\treturn ansi;\n};\n\nconvert.ansi16.rgb = function (args) {\n\tvar color = args % 10;\n\n\t// handle greyscale\n\tif (color === 0 || color === 7) {\n\t\tif (args > 50) {\n\t\t\tcolor += 3.5;\n\t\t}\n\n\t\tcolor = color / 10.5 * 255;\n\n\t\treturn [color, color, color];\n\t}\n\n\tvar mult = (~~(args > 50) + 1) * 0.5;\n\tvar r = ((color & 1) * mult) * 255;\n\tvar g = (((color >> 1) & 1) * mult) * 255;\n\tvar b = (((color >> 2) & 1) * mult) * 255;\n\n\treturn [r, g, b];\n};\n\nconvert.ansi256.rgb = function (args) {\n\t// handle greyscale\n\tif (args >= 232) {\n\t\tvar c = (args - 232) * 10 + 8;\n\t\treturn [c, c, c];\n\t}\n\n\targs -= 16;\n\n\tvar rem;\n\tvar r = Math.floor(args / 36) / 5 * 255;\n\tvar g = Math.floor((rem = args % 36) / 6) / 5 * 255;\n\tvar b = (rem % 6) / 5 * 255;\n\n\treturn [r, g, b];\n};\n\nconvert.rgb.hex = function (args) {\n\tvar integer = ((Math.round(args[0]) & 0xFF) << 16)\n\t\t+ ((Math.round(args[1]) & 0xFF) << 8)\n\t\t+ (Math.round(args[2]) & 0xFF);\n\n\tvar string = integer.toString(16).toUpperCase();\n\treturn '000000'.substring(string.length) + string;\n};\n\nconvert.hex.rgb = function (args) {\n\tvar match = args.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);\n\tif (!match) {\n\t\treturn [0, 0, 0];\n\t}\n\n\tvar colorString = match[0];\n\n\tif (match[0].length === 3) {\n\t\tcolorString = colorString.split('').map(function (char) {\n\t\t\treturn char + char;\n\t\t}).join('');\n\t}\n\n\tvar integer = parseInt(colorString, 16);\n\tvar r = (integer >> 16) & 0xFF;\n\tvar g = (integer >> 8) & 0xFF;\n\tvar b = integer & 0xFF;\n\n\treturn [r, g, b];\n};\n\nconvert.rgb.hcg = function (rgb) {\n\tvar r = rgb[0] / 255;\n\tvar g = rgb[1] / 255;\n\tvar b = rgb[2] / 255;\n\tvar max = Math.max(Math.max(r, g), b);\n\tvar min = Math.min(Math.min(r, g), b);\n\tvar chroma = (max - min);\n\tvar grayscale;\n\tvar hue;\n\n\tif (chroma < 1) {\n\t\tgrayscale = min / (1 - chroma);\n\t} else {\n\t\tgrayscale = 0;\n\t}\n\n\tif (chroma <= 0) {\n\t\thue = 0;\n\t} else\n\tif (max === r) {\n\t\thue = ((g - b) / chroma) % 6;\n\t} else\n\tif (max === g) {\n\t\thue = 2 + (b - r) / chroma;\n\t} else {\n\t\thue = 4 + (r - g) / chroma + 4;\n\t}\n\n\thue /= 6;\n\thue %= 1;\n\n\treturn [hue * 360, chroma * 100, grayscale * 100];\n};\n\nconvert.hsl.hcg = function (hsl) {\n\tvar s = hsl[1] / 100;\n\tvar l = hsl[2] / 100;\n\tvar c = 1;\n\tvar f = 0;\n\n\tif (l < 0.5) {\n\t\tc = 2.0 * s * l;\n\t} else {\n\t\tc = 2.0 * s * (1.0 - l);\n\t}\n\n\tif (c < 1.0) {\n\t\tf = (l - 0.5 * c) / (1.0 - c);\n\t}\n\n\treturn [hsl[0], c * 100, f * 100];\n};\n\nconvert.hsv.hcg = function (hsv) {\n\tvar s = hsv[1] / 100;\n\tvar v = hsv[2] / 100;\n\n\tvar c = s * v;\n\tvar f = 0;\n\n\tif (c < 1.0) {\n\t\tf = (v - c) / (1 - c);\n\t}\n\n\treturn [hsv[0], c * 100, f * 100];\n};\n\nconvert.hcg.rgb = function (hcg) {\n\tvar h = hcg[0] / 360;\n\tvar c = hcg[1] / 100;\n\tvar g = hcg[2] / 100;\n\n\tif (c === 0.0) {\n\t\treturn [g * 255, g * 255, g * 255];\n\t}\n\n\tvar pure = [0, 0, 0];\n\tvar hi = (h % 1) * 6;\n\tvar v = hi % 1;\n\tvar w = 1 - v;\n\tvar mg = 0;\n\n\tswitch (Math.floor(hi)) {\n\t\tcase 0:\n\t\t\tpure[0] = 1; pure[1] = v; pure[2] = 0; break;\n\t\tcase 1:\n\t\t\tpure[0] = w; pure[1] = 1; pure[2] = 0; break;\n\t\tcase 2:\n\t\t\tpure[0] = 0; pure[1] = 1; pure[2] = v; break;\n\t\tcase 3:\n\t\t\tpure[0] = 0; pure[1] = w; pure[2] = 1; break;\n\t\tcase 4:\n\t\t\tpure[0] = v; pure[1] = 0; pure[2] = 1; break;\n\t\tdefault:\n\t\t\tpure[0] = 1; pure[1] = 0; pure[2] = w;\n\t}\n\n\tmg = (1.0 - c) * g;\n\n\treturn [\n\t\t(c * pure[0] + mg) * 255,\n\t\t(c * pure[1] + mg) * 255,\n\t\t(c * pure[2] + mg) * 255\n\t];\n};\n\nconvert.hcg.hsv = function (hcg) {\n\tvar c = hcg[1] / 100;\n\tvar g = hcg[2] / 100;\n\n\tvar v = c + g * (1.0 - c);\n\tvar f = 0;\n\n\tif (v > 0.0) {\n\t\tf = c / v;\n\t}\n\n\treturn [hcg[0], f * 100, v * 100];\n};\n\nconvert.hcg.hsl = function (hcg) {\n\tvar c = hcg[1] / 100;\n\tvar g = hcg[2] / 100;\n\n\tvar l = g * (1.0 - c) + 0.5 * c;\n\tvar s = 0;\n\n\tif (l > 0.0 && l < 0.5) {\n\t\ts = c / (2 * l);\n\t} else\n\tif (l >= 0.5 && l < 1.0) {\n\t\ts = c / (2 * (1 - l));\n\t}\n\n\treturn [hcg[0], s * 100, l * 100];\n};\n\nconvert.hcg.hwb = function (hcg) {\n\tvar c = hcg[1] / 100;\n\tvar g = hcg[2] / 100;\n\tvar v = c + g * (1.0 - c);\n\treturn [hcg[0], (v - c) * 100, (1 - v) * 100];\n};\n\nconvert.hwb.hcg = function (hwb) {\n\tvar w = hwb[1] / 100;\n\tvar b = hwb[2] / 100;\n\tvar v = 1 - b;\n\tvar c = v - w;\n\tvar g = 0;\n\n\tif (c < 1) {\n\t\tg = (v - c) / (1 - c);\n\t}\n\n\treturn [hwb[0], c * 100, g * 100];\n};\n\nconvert.apple.rgb = function (apple) {\n\treturn [(apple[0] / 65535) * 255, (apple[1] / 65535) * 255, (apple[2] / 65535) * 255];\n};\n\nconvert.rgb.apple = function (rgb) {\n\treturn [(rgb[0] / 255) * 65535, (rgb[1] / 255) * 65535, (rgb[2] / 255) * 65535];\n};\n\nconvert.gray.rgb = function (args) {\n\treturn [args[0] / 100 * 255, args[0] / 100 * 255, args[0] / 100 * 255];\n};\n\nconvert.gray.hsl = convert.gray.hsv = function (args) {\n\treturn [0, 0, args[0]];\n};\n\nconvert.gray.hwb = function (gray) {\n\treturn [0, 100, gray[0]];\n};\n\nconvert.gray.cmyk = function (gray) {\n\treturn [0, 0, 0, gray[0]];\n};\n\nconvert.gray.lab = function (gray) {\n\treturn [gray[0], 0, 0];\n};\n\nconvert.gray.hex = function (gray) {\n\tvar val = Math.round(gray[0] / 100 * 255) & 0xFF;\n\tvar integer = (val << 16) + (val << 8) + val;\n\n\tvar string = integer.toString(16).toUpperCase();\n\treturn '000000'.substring(string.length) + string;\n};\n\nconvert.rgb.gray = function (rgb) {\n\tvar val = (rgb[0] + rgb[1] + rgb[2]) / 3;\n\treturn [val / 255 * 100];\n};\n","var conversions = require('./conversions');\nvar route = require('./route');\n\nvar convert = {};\n\nvar models = Object.keys(conversions);\n\nfunction wrapRaw(fn) {\n\tvar wrappedFn = function (args) {\n\t\tif (args === undefined || args === null) {\n\t\t\treturn args;\n\t\t}\n\n\t\tif (arguments.length > 1) {\n\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t}\n\n\t\treturn fn(args);\n\t};\n\n\t// preserve .conversion property if there is one\n\tif ('conversion' in fn) {\n\t\twrappedFn.conversion = fn.conversion;\n\t}\n\n\treturn wrappedFn;\n}\n\nfunction wrapRounded(fn) {\n\tvar wrappedFn = function (args) {\n\t\tif (args === undefined || args === null) {\n\t\t\treturn args;\n\t\t}\n\n\t\tif (arguments.length > 1) {\n\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t}\n\n\t\tvar result = fn(args);\n\n\t\t// we're assuming the result is an array here.\n\t\t// see notice in conversions.js; don't use box types\n\t\t// in conversion functions.\n\t\tif (typeof result === 'object') {\n\t\t\tfor (var len = result.length, i = 0; i < len; i++) {\n\t\t\t\tresult[i] = Math.round(result[i]);\n\t\t\t}\n\t\t}\n\n\t\treturn result;\n\t};\n\n\t// preserve .conversion property if there is one\n\tif ('conversion' in fn) {\n\t\twrappedFn.conversion = fn.conversion;\n\t}\n\n\treturn wrappedFn;\n}\n\nmodels.forEach(function (fromModel) {\n\tconvert[fromModel] = {};\n\n\tObject.defineProperty(convert[fromModel], 'channels', {value: conversions[fromModel].channels});\n\tObject.defineProperty(convert[fromModel], 'labels', {value: conversions[fromModel].labels});\n\n\tvar routes = route(fromModel);\n\tvar routeModels = Object.keys(routes);\n\n\trouteModels.forEach(function (toModel) {\n\t\tvar fn = routes[toModel];\n\n\t\tconvert[fromModel][toModel] = wrapRounded(fn);\n\t\tconvert[fromModel][toModel].raw = wrapRaw(fn);\n\t});\n});\n\nmodule.exports = convert;\n","var conversions = require('./conversions');\n\n/*\n\tthis function routes a model to all other models.\n\n\tall functions that are routed have a property `.conversion` attached\n\tto the returned synthetic function. This property is an array\n\tof strings, each with the steps in between the 'from' and 'to'\n\tcolor models (inclusive).\n\n\tconversions that are not possible simply are not included.\n*/\n\nfunction buildGraph() {\n\tvar graph = {};\n\t// https://jsperf.com/object-keys-vs-for-in-with-closure/3\n\tvar models = Object.keys(conversions);\n\n\tfor (var len = models.length, i = 0; i < len; i++) {\n\t\tgraph[models[i]] = {\n\t\t\t// http://jsperf.com/1-vs-infinity\n\t\t\t// micro-opt, but this is simple.\n\t\t\tdistance: -1,\n\t\t\tparent: null\n\t\t};\n\t}\n\n\treturn graph;\n}\n\n// https://en.wikipedia.org/wiki/Breadth-first_search\nfunction deriveBFS(fromModel) {\n\tvar graph = buildGraph();\n\tvar queue = [fromModel]; // unshift -> queue -> pop\n\n\tgraph[fromModel].distance = 0;\n\n\twhile (queue.length) {\n\t\tvar current = queue.pop();\n\t\tvar adjacents = Object.keys(conversions[current]);\n\n\t\tfor (var len = adjacents.length, i = 0; i < len; i++) {\n\t\t\tvar adjacent = adjacents[i];\n\t\t\tvar node = graph[adjacent];\n\n\t\t\tif (node.distance === -1) {\n\t\t\t\tnode.distance = graph[current].distance + 1;\n\t\t\t\tnode.parent = current;\n\t\t\t\tqueue.unshift(adjacent);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn graph;\n}\n\nfunction link(from, to) {\n\treturn function (args) {\n\t\treturn to(from(args));\n\t};\n}\n\nfunction wrapConversion(toModel, graph) {\n\tvar path = [graph[toModel].parent, toModel];\n\tvar fn = conversions[graph[toModel].parent][toModel];\n\n\tvar cur = graph[toModel].parent;\n\twhile (graph[cur].parent) {\n\t\tpath.unshift(graph[cur].parent);\n\t\tfn = link(conversions[graph[cur].parent][cur], fn);\n\t\tcur = graph[cur].parent;\n\t}\n\n\tfn.conversion = path;\n\treturn fn;\n}\n\nmodule.exports = function (fromModel) {\n\tvar graph = deriveBFS(fromModel);\n\tvar conversion = {};\n\n\tvar models = Object.keys(graph);\n\tfor (var len = models.length, i = 0; i < len; i++) {\n\t\tvar toModel = models[i];\n\t\tvar node = graph[toModel];\n\n\t\tif (node.parent === null) {\n\t\t\t// no possible conversion, or this node is the source model.\n\t\t\tcontinue;\n\t\t}\n\n\t\tconversion[toModel] = wrapConversion(toModel, graph);\n\t}\n\n\treturn conversion;\n};\n\n","'use strict'\r\n\r\nmodule.exports = {\r\n\t\"aliceblue\": [240, 248, 255],\r\n\t\"antiquewhite\": [250, 235, 215],\r\n\t\"aqua\": [0, 255, 255],\r\n\t\"aquamarine\": [127, 255, 212],\r\n\t\"azure\": [240, 255, 255],\r\n\t\"beige\": [245, 245, 220],\r\n\t\"bisque\": [255, 228, 196],\r\n\t\"black\": [0, 0, 0],\r\n\t\"blanchedalmond\": [255, 235, 205],\r\n\t\"blue\": [0, 0, 255],\r\n\t\"blueviolet\": [138, 43, 226],\r\n\t\"brown\": [165, 42, 42],\r\n\t\"burlywood\": [222, 184, 135],\r\n\t\"cadetblue\": [95, 158, 160],\r\n\t\"chartreuse\": [127, 255, 0],\r\n\t\"chocolate\": [210, 105, 30],\r\n\t\"coral\": [255, 127, 80],\r\n\t\"cornflowerblue\": [100, 149, 237],\r\n\t\"cornsilk\": [255, 248, 220],\r\n\t\"crimson\": [220, 20, 60],\r\n\t\"cyan\": [0, 255, 255],\r\n\t\"darkblue\": [0, 0, 139],\r\n\t\"darkcyan\": [0, 139, 139],\r\n\t\"darkgoldenrod\": [184, 134, 11],\r\n\t\"darkgray\": [169, 169, 169],\r\n\t\"darkgreen\": [0, 100, 0],\r\n\t\"darkgrey\": [169, 169, 169],\r\n\t\"darkkhaki\": [189, 183, 107],\r\n\t\"darkmagenta\": [139, 0, 139],\r\n\t\"darkolivegreen\": [85, 107, 47],\r\n\t\"darkorange\": [255, 140, 0],\r\n\t\"darkorchid\": [153, 50, 204],\r\n\t\"darkred\": [139, 0, 0],\r\n\t\"darksalmon\": [233, 150, 122],\r\n\t\"darkseagreen\": [143, 188, 143],\r\n\t\"darkslateblue\": [72, 61, 139],\r\n\t\"darkslategray\": [47, 79, 79],\r\n\t\"darkslategrey\": [47, 79, 79],\r\n\t\"darkturquoise\": [0, 206, 209],\r\n\t\"darkviolet\": [148, 0, 211],\r\n\t\"deeppink\": [255, 20, 147],\r\n\t\"deepskyblue\": [0, 191, 255],\r\n\t\"dimgray\": [105, 105, 105],\r\n\t\"dimgrey\": [105, 105, 105],\r\n\t\"dodgerblue\": [30, 144, 255],\r\n\t\"firebrick\": [178, 34, 34],\r\n\t\"floralwhite\": [255, 250, 240],\r\n\t\"forestgreen\": [34, 139, 34],\r\n\t\"fuchsia\": [255, 0, 255],\r\n\t\"gainsboro\": [220, 220, 220],\r\n\t\"ghostwhite\": [248, 248, 255],\r\n\t\"gold\": [255, 215, 0],\r\n\t\"goldenrod\": [218, 165, 32],\r\n\t\"gray\": [128, 128, 128],\r\n\t\"green\": [0, 128, 0],\r\n\t\"greenyellow\": [173, 255, 47],\r\n\t\"grey\": [128, 128, 128],\r\n\t\"honeydew\": [240, 255, 240],\r\n\t\"hotpink\": [255, 105, 180],\r\n\t\"indianred\": [205, 92, 92],\r\n\t\"indigo\": [75, 0, 130],\r\n\t\"ivory\": [255, 255, 240],\r\n\t\"khaki\": [240, 230, 140],\r\n\t\"lavender\": [230, 230, 250],\r\n\t\"lavenderblush\": [255, 240, 245],\r\n\t\"lawngreen\": [124, 252, 0],\r\n\t\"lemonchiffon\": [255, 250, 205],\r\n\t\"lightblue\": [173, 216, 230],\r\n\t\"lightcoral\": [240, 128, 128],\r\n\t\"lightcyan\": [224, 255, 255],\r\n\t\"lightgoldenrodyellow\": [250, 250, 210],\r\n\t\"lightgray\": [211, 211, 211],\r\n\t\"lightgreen\": [144, 238, 144],\r\n\t\"lightgrey\": [211, 211, 211],\r\n\t\"lightpink\": [255, 182, 193],\r\n\t\"lightsalmon\": [255, 160, 122],\r\n\t\"lightseagreen\": [32, 178, 170],\r\n\t\"lightskyblue\": [135, 206, 250],\r\n\t\"lightslategray\": [119, 136, 153],\r\n\t\"lightslategrey\": [119, 136, 153],\r\n\t\"lightsteelblue\": [176, 196, 222],\r\n\t\"lightyellow\": [255, 255, 224],\r\n\t\"lime\": [0, 255, 0],\r\n\t\"limegreen\": [50, 205, 50],\r\n\t\"linen\": [250, 240, 230],\r\n\t\"magenta\": [255, 0, 255],\r\n\t\"maroon\": [128, 0, 0],\r\n\t\"mediumaquamarine\": [102, 205, 170],\r\n\t\"mediumblue\": [0, 0, 205],\r\n\t\"mediumorchid\": [186, 85, 211],\r\n\t\"mediumpurple\": [147, 112, 219],\r\n\t\"mediumseagreen\": [60, 179, 113],\r\n\t\"mediumslateblue\": [123, 104, 238],\r\n\t\"mediumspringgreen\": [0, 250, 154],\r\n\t\"mediumturquoise\": [72, 209, 204],\r\n\t\"mediumvioletred\": [199, 21, 133],\r\n\t\"midnightblue\": [25, 25, 112],\r\n\t\"mintcream\": [245, 255, 250],\r\n\t\"mistyrose\": [255, 228, 225],\r\n\t\"moccasin\": [255, 228, 181],\r\n\t\"navajowhite\": [255, 222, 173],\r\n\t\"navy\": [0, 0, 128],\r\n\t\"oldlace\": [253, 245, 230],\r\n\t\"olive\": [128, 128, 0],\r\n\t\"olivedrab\": [107, 142, 35],\r\n\t\"orange\": [255, 165, 0],\r\n\t\"orangered\": [255, 69, 0],\r\n\t\"orchid\": [218, 112, 214],\r\n\t\"palegoldenrod\": [238, 232, 170],\r\n\t\"palegreen\": [152, 251, 152],\r\n\t\"paleturquoise\": [175, 238, 238],\r\n\t\"palevioletred\": [219, 112, 147],\r\n\t\"papayawhip\": [255, 239, 213],\r\n\t\"peachpuff\": [255, 218, 185],\r\n\t\"peru\": [205, 133, 63],\r\n\t\"pink\": [255, 192, 203],\r\n\t\"plum\": [221, 160, 221],\r\n\t\"powderblue\": [176, 224, 230],\r\n\t\"purple\": [128, 0, 128],\r\n\t\"rebeccapurple\": [102, 51, 153],\r\n\t\"red\": [255, 0, 0],\r\n\t\"rosybrown\": [188, 143, 143],\r\n\t\"royalblue\": [65, 105, 225],\r\n\t\"saddlebrown\": [139, 69, 19],\r\n\t\"salmon\": [250, 128, 114],\r\n\t\"sandybrown\": [244, 164, 96],\r\n\t\"seagreen\": [46, 139, 87],\r\n\t\"seashell\": [255, 245, 238],\r\n\t\"sienna\": [160, 82, 45],\r\n\t\"silver\": [192, 192, 192],\r\n\t\"skyblue\": [135, 206, 235],\r\n\t\"slateblue\": [106, 90, 205],\r\n\t\"slategray\": [112, 128, 144],\r\n\t\"slategrey\": [112, 128, 144],\r\n\t\"snow\": [255, 250, 250],\r\n\t\"springgreen\": [0, 255, 127],\r\n\t\"steelblue\": [70, 130, 180],\r\n\t\"tan\": [210, 180, 140],\r\n\t\"teal\": [0, 128, 128],\r\n\t\"thistle\": [216, 191, 216],\r\n\t\"tomato\": [255, 99, 71],\r\n\t\"turquoise\": [64, 224, 208],\r\n\t\"violet\": [238, 130, 238],\r\n\t\"wheat\": [245, 222, 179],\r\n\t\"white\": [255, 255, 255],\r\n\t\"whitesmoke\": [245, 245, 245],\r\n\t\"yellow\": [255, 255, 0],\r\n\t\"yellowgreen\": [154, 205, 50]\r\n};\r\n","require('../modules/es6.symbol');\nrequire('../modules/es6.object.create');\nrequire('../modules/es6.object.define-property');\nrequire('../modules/es6.object.define-properties');\nrequire('../modules/es6.object.get-own-property-descriptor');\nrequire('../modules/es6.object.get-prototype-of');\nrequire('../modules/es6.object.keys');\nrequire('../modules/es6.object.get-own-property-names');\nrequire('../modules/es6.object.freeze');\nrequire('../modules/es6.object.seal');\nrequire('../modules/es6.object.prevent-extensions');\nrequire('../modules/es6.object.is-frozen');\nrequire('../modules/es6.object.is-sealed');\nrequire('../modules/es6.object.is-extensible');\nrequire('../modules/es6.object.assign');\nrequire('../modules/es6.object.is');\nrequire('../modules/es6.object.set-prototype-of');\nrequire('../modules/es6.object.to-string');\nrequire('../modules/es6.function.bind');\nrequire('../modules/es6.function.name');\nrequire('../modules/es6.function.has-instance');\nrequire('../modules/es6.parse-int');\nrequire('../modules/es6.parse-float');\nrequire('../modules/es6.number.constructor');\nrequire('../modules/es6.number.to-fixed');\nrequire('../modules/es6.number.to-precision');\nrequire('../modules/es6.number.epsilon');\nrequire('../modules/es6.number.is-finite');\nrequire('../modules/es6.number.is-integer');\nrequire('../modules/es6.number.is-nan');\nrequire('../modules/es6.number.is-safe-integer');\nrequire('../modules/es6.number.max-safe-integer');\nrequire('../modules/es6.number.min-safe-integer');\nrequire('../modules/es6.number.parse-float');\nrequire('../modules/es6.number.parse-int');\nrequire('../modules/es6.math.acosh');\nrequire('../modules/es6.math.asinh');\nrequire('../modules/es6.math.atanh');\nrequire('../modules/es6.math.cbrt');\nrequire('../modules/es6.math.clz32');\nrequire('../modules/es6.math.cosh');\nrequire('../modules/es6.math.expm1');\nrequire('../modules/es6.math.fround');\nrequire('../modules/es6.math.hypot');\nrequire('../modules/es6.math.imul');\nrequire('../modules/es6.math.log10');\nrequire('../modules/es6.math.log1p');\nrequire('../modules/es6.math.log2');\nrequire('../modules/es6.math.sign');\nrequire('../modules/es6.math.sinh');\nrequire('../modules/es6.math.tanh');\nrequire('../modules/es6.math.trunc');\nrequire('../modules/es6.string.from-code-point');\nrequire('../modules/es6.string.raw');\nrequire('../modules/es6.string.trim');\nrequire('../modules/es6.string.iterator');\nrequire('../modules/es6.string.code-point-at');\nrequire('../modules/es6.string.ends-with');\nrequire('../modules/es6.string.includes');\nrequire('../modules/es6.string.repeat');\nrequire('../modules/es6.string.starts-with');\nrequire('../modules/es6.string.anchor');\nrequire('../modules/es6.string.big');\nrequire('../modules/es6.string.blink');\nrequire('../modules/es6.string.bold');\nrequire('../modules/es6.string.fixed');\nrequire('../modules/es6.string.fontcolor');\nrequire('../modules/es6.string.fontsize');\nrequire('../modules/es6.string.italics');\nrequire('../modules/es6.string.link');\nrequire('../modules/es6.string.small');\nrequire('../modules/es6.string.strike');\nrequire('../modules/es6.string.sub');\nrequire('../modules/es6.string.sup');\nrequire('../modules/es6.date.now');\nrequire('../modules/es6.date.to-json');\nrequire('../modules/es6.date.to-iso-string');\nrequire('../modules/es6.date.to-string');\nrequire('../modules/es6.date.to-primitive');\nrequire('../modules/es6.array.is-array');\nrequire('../modules/es6.array.from');\nrequire('../modules/es6.array.of');\nrequire('../modules/es6.array.join');\nrequire('../modules/es6.array.slice');\nrequire('../modules/es6.array.sort');\nrequire('../modules/es6.array.for-each');\nrequire('../modules/es6.array.map');\nrequire('../modules/es6.array.filter');\nrequire('../modules/es6.array.some');\nrequire('../modules/es6.array.every');\nrequire('../modules/es6.array.reduce');\nrequire('../modules/es6.array.reduce-right');\nrequire('../modules/es6.array.index-of');\nrequire('../modules/es6.array.last-index-of');\nrequire('../modules/es6.array.copy-within');\nrequire('../modules/es6.array.fill');\nrequire('../modules/es6.array.find');\nrequire('../modules/es6.array.find-index');\nrequire('../modules/es6.array.species');\nrequire('../modules/es6.array.iterator');\nrequire('../modules/es6.regexp.constructor');\nrequire('../modules/es6.regexp.exec');\nrequire('../modules/es6.regexp.to-string');\nrequire('../modules/es6.regexp.flags');\nrequire('../modules/es6.regexp.match');\nrequire('../modules/es6.regexp.replace');\nrequire('../modules/es6.regexp.search');\nrequire('../modules/es6.regexp.split');\nrequire('../modules/es6.promise');\nrequire('../modules/es6.map');\nrequire('../modules/es6.set');\nrequire('../modules/es6.weak-map');\nrequire('../modules/es6.weak-set');\nrequire('../modules/es6.typed.array-buffer');\nrequire('../modules/es6.typed.data-view');\nrequire('../modules/es6.typed.int8-array');\nrequire('../modules/es6.typed.uint8-array');\nrequire('../modules/es6.typed.uint8-clamped-array');\nrequire('../modules/es6.typed.int16-array');\nrequire('../modules/es6.typed.uint16-array');\nrequire('../modules/es6.typed.int32-array');\nrequire('../modules/es6.typed.uint32-array');\nrequire('../modules/es6.typed.float32-array');\nrequire('../modules/es6.typed.float64-array');\nrequire('../modules/es6.reflect.apply');\nrequire('../modules/es6.reflect.construct');\nrequire('../modules/es6.reflect.define-property');\nrequire('../modules/es6.reflect.delete-property');\nrequire('../modules/es6.reflect.enumerate');\nrequire('../modules/es6.reflect.get');\nrequire('../modules/es6.reflect.get-own-property-descriptor');\nrequire('../modules/es6.reflect.get-prototype-of');\nrequire('../modules/es6.reflect.has');\nrequire('../modules/es6.reflect.is-extensible');\nrequire('../modules/es6.reflect.own-keys');\nrequire('../modules/es6.reflect.prevent-extensions');\nrequire('../modules/es6.reflect.set');\nrequire('../modules/es6.reflect.set-prototype-of');\nmodule.exports = require('../modules/_core');\n","require('../../modules/es7.array.flat-map');\nmodule.exports = require('../../modules/_core').Array.flatMap;\n","require('../../modules/es7.array.includes');\nmodule.exports = require('../../modules/_core').Array.includes;\n","require('../../modules/es7.object.entries');\nmodule.exports = require('../../modules/_core').Object.entries;\n","require('../../modules/es7.object.get-own-property-descriptors');\nmodule.exports = require('../../modules/_core').Object.getOwnPropertyDescriptors;\n","require('../../modules/es7.object.values');\nmodule.exports = require('../../modules/_core').Object.values;\n","'use strict';\nrequire('../../modules/es6.promise');\nrequire('../../modules/es7.promise.finally');\nmodule.exports = require('../../modules/_core').Promise['finally'];\n","require('../../modules/es7.string.pad-end');\nmodule.exports = require('../../modules/_core').String.padEnd;\n","require('../../modules/es7.string.pad-start');\nmodule.exports = require('../../modules/_core').String.padStart;\n","require('../../modules/es7.string.trim-right');\nmodule.exports = require('../../modules/_core').String.trimRight;\n","require('../../modules/es7.string.trim-left');\nmodule.exports = require('../../modules/_core').String.trimLeft;\n","require('../../modules/es7.symbol.async-iterator');\nmodule.exports = require('../../modules/_wks-ext').f('asyncIterator');\n","require('../modules/es7.global');\nmodule.exports = require('../modules/_core').global;\n","module.exports = function (it) {\n  if (typeof it != 'function') throw TypeError(it + ' is not a function!');\n  return it;\n};\n","var isObject = require('./_is-object');\nmodule.exports = function (it) {\n  if (!isObject(it)) throw TypeError(it + ' is not an object!');\n  return it;\n};\n","var core = module.exports = { version: '2.6.12' };\nif (typeof __e == 'number') __e = core; // eslint-disable-line no-undef\n","// optional / simple context binding\nvar aFunction = require('./_a-function');\nmodule.exports = function (fn, that, length) {\n  aFunction(fn);\n  if (that === undefined) return fn;\n  switch (length) {\n    case 1: return function (a) {\n      return fn.call(that, a);\n    };\n    case 2: return function (a, b) {\n      return fn.call(that, a, b);\n    };\n    case 3: return function (a, b, c) {\n      return fn.call(that, a, b, c);\n    };\n  }\n  return function (/* ...args */) {\n    return fn.apply(that, arguments);\n  };\n};\n","// Thank's IE8 for his funny defineProperty\nmodule.exports = !require('./_fails')(function () {\n  return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;\n});\n","var isObject = require('./_is-object');\nvar document = require('./_global').document;\n// typeof document.createElement is 'object' in old IE\nvar is = isObject(document) && isObject(document.createElement);\nmodule.exports = function (it) {\n  return is ? document.createElement(it) : {};\n};\n","var global = require('./_global');\nvar core = require('./_core');\nvar ctx = require('./_ctx');\nvar hide = require('./_hide');\nvar has = require('./_has');\nvar PROTOTYPE = 'prototype';\n\nvar $export = function (type, name, source) {\n  var IS_FORCED = type & $export.F;\n  var IS_GLOBAL = type & $export.G;\n  var IS_STATIC = type & $export.S;\n  var IS_PROTO = type & $export.P;\n  var IS_BIND = type & $export.B;\n  var IS_WRAP = type & $export.W;\n  var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});\n  var expProto = exports[PROTOTYPE];\n  var target = IS_GLOBAL ? global : IS_STATIC ? global[name] : (global[name] || {})[PROTOTYPE];\n  var key, own, out;\n  if (IS_GLOBAL) source = name;\n  for (key in source) {\n    // contains in native\n    own = !IS_FORCED && target && target[key] !== undefined;\n    if (own && has(exports, key)) continue;\n    // export native or passed\n    out = own ? target[key] : source[key];\n    // prevent global pollution for namespaces\n    exports[key] = IS_GLOBAL && typeof target[key] != 'function' ? source[key]\n    // bind timers to global for call from export context\n    : IS_BIND && own ? ctx(out, global)\n    // wrap global constructors for prevent change them in library\n    : IS_WRAP && target[key] == out ? (function (C) {\n      var F = function (a, b, c) {\n        if (this instanceof C) {\n          switch (arguments.length) {\n            case 0: return new C();\n            case 1: return new C(a);\n            case 2: return new C(a, b);\n          } return new C(a, b, c);\n        } return C.apply(this, arguments);\n      };\n      F[PROTOTYPE] = C[PROTOTYPE];\n      return F;\n    // make static versions for prototype methods\n    })(out) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n    // export proto methods to core.%CONSTRUCTOR%.methods.%NAME%\n    if (IS_PROTO) {\n      (exports.virtual || (exports.virtual = {}))[key] = out;\n      // export proto methods to core.%CONSTRUCTOR%.prototype.%NAME%\n      if (type & $export.R && expProto && !expProto[key]) hide(expProto, key, out);\n    }\n  }\n};\n// type bitmap\n$export.F = 1;   // forced\n$export.G = 2;   // global\n$export.S = 4;   // static\n$export.P = 8;   // proto\n$export.B = 16;  // bind\n$export.W = 32;  // wrap\n$export.U = 64;  // safe\n$export.R = 128; // real proto method for `library`\nmodule.exports = $export;\n","module.exports = function (exec) {\n  try {\n    return !!exec();\n  } catch (e) {\n    return true;\n  }\n};\n","// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n  ? window : typeof self != 'undefined' && self.Math == Math ? self\n  // eslint-disable-next-line no-new-func\n  : Function('return this')();\nif (typeof __g == 'number') __g = global; // eslint-disable-line no-undef\n","var hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function (it, key) {\n  return hasOwnProperty.call(it, key);\n};\n","var dP = require('./_object-dp');\nvar createDesc = require('./_property-desc');\nmodule.exports = require('./_descriptors') ? function (object, key, value) {\n  return dP.f(object, key, createDesc(1, value));\n} : function (object, key, value) {\n  object[key] = value;\n  return object;\n};\n","module.exports = !require('./_descriptors') && !require('./_fails')(function () {\n  return Object.defineProperty(require('./_dom-create')('div'), 'a', { get: function () { return 7; } }).a != 7;\n});\n","module.exports = function (it) {\n  return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n","var anObject = require('./_an-object');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar toPrimitive = require('./_to-primitive');\nvar dP = Object.defineProperty;\n\nexports.f = require('./_descriptors') ? Object.defineProperty : function defineProperty(O, P, Attributes) {\n  anObject(O);\n  P = toPrimitive(P, true);\n  anObject(Attributes);\n  if (IE8_DOM_DEFINE) try {\n    return dP(O, P, Attributes);\n  } catch (e) { /* empty */ }\n  if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');\n  if ('value' in Attributes) O[P] = Attributes.value;\n  return O;\n};\n","module.exports = function (bitmap, value) {\n  return {\n    enumerable: !(bitmap & 1),\n    configurable: !(bitmap & 2),\n    writable: !(bitmap & 4),\n    value: value\n  };\n};\n","// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = require('./_is-object');\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (it, S) {\n  if (!isObject(it)) return it;\n  var fn, val;\n  if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n  if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;\n  if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n  throw TypeError(\"Can't convert object to primitive value\");\n};\n","// https://github.com/tc39/proposal-global\nvar $export = require('./_export');\n\n$export($export.G, { global: require('./_global') });\n","var cof = require('./_cof');\nmodule.exports = function (it, msg) {\n  if (typeof it != 'number' && cof(it) != 'Number') throw TypeError(msg);\n  return +it;\n};\n","// 22.1.3.31 Array.prototype[@@unscopables]\nvar UNSCOPABLES = require('./_wks')('unscopables');\nvar ArrayProto = Array.prototype;\nif (ArrayProto[UNSCOPABLES] == undefined) require('./_hide')(ArrayProto, UNSCOPABLES, {});\nmodule.exports = function (key) {\n  ArrayProto[UNSCOPABLES][key] = true;\n};\n","'use strict';\nvar at = require('./_string-at')(true);\n\n // `AdvanceStringIndex` abstract operation\n// https://tc39.github.io/ecma262/#sec-advancestringindex\nmodule.exports = function (S, index, unicode) {\n  return index + (unicode ? at(S, index).length : 1);\n};\n","module.exports = function (it, Constructor, name, forbiddenField) {\n  if (!(it instanceof Constructor) || (forbiddenField !== undefined && forbiddenField in it)) {\n    throw TypeError(name + ': incorrect invocation!');\n  } return it;\n};\n","// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\n'use strict';\nvar toObject = require('./_to-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\n\nmodule.exports = [].copyWithin || function copyWithin(target /* = 0 */, start /* = 0, end = @length */) {\n  var O = toObject(this);\n  var len = toLength(O.length);\n  var to = toAbsoluteIndex(target, len);\n  var from = toAbsoluteIndex(start, len);\n  var end = arguments.length > 2 ? arguments[2] : undefined;\n  var count = Math.min((end === undefined ? len : toAbsoluteIndex(end, len)) - from, len - to);\n  var inc = 1;\n  if (from < to && to < from + count) {\n    inc = -1;\n    from += count - 1;\n    to += count - 1;\n  }\n  while (count-- > 0) {\n    if (from in O) O[to] = O[from];\n    else delete O[to];\n    to += inc;\n    from += inc;\n  } return O;\n};\n","// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\n'use strict';\nvar toObject = require('./_to-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\nmodule.exports = function fill(value /* , start = 0, end = @length */) {\n  var O = toObject(this);\n  var length = toLength(O.length);\n  var aLen = arguments.length;\n  var index = toAbsoluteIndex(aLen > 1 ? arguments[1] : undefined, length);\n  var end = aLen > 2 ? arguments[2] : undefined;\n  var endPos = end === undefined ? length : toAbsoluteIndex(end, length);\n  while (endPos > index) O[index++] = value;\n  return O;\n};\n","// false -> Array#indexOf\n// true  -> Array#includes\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nmodule.exports = function (IS_INCLUDES) {\n  return function ($this, el, fromIndex) {\n    var O = toIObject($this);\n    var length = toLength(O.length);\n    var index = toAbsoluteIndex(fromIndex, length);\n    var value;\n    // Array#includes uses SameValueZero equality algorithm\n    // eslint-disable-next-line no-self-compare\n    if (IS_INCLUDES && el != el) while (length > index) {\n      value = O[index++];\n      // eslint-disable-next-line no-self-compare\n      if (value != value) return true;\n    // Array#indexOf ignores holes, Array#includes - not\n    } else for (;length > index; index++) if (IS_INCLUDES || index in O) {\n      if (O[index] === el) return IS_INCLUDES || index || 0;\n    } return !IS_INCLUDES && -1;\n  };\n};\n","// 0 -> Array#forEach\n// 1 -> Array#map\n// 2 -> Array#filter\n// 3 -> Array#some\n// 4 -> Array#every\n// 5 -> Array#find\n// 6 -> Array#findIndex\nvar ctx = require('./_ctx');\nvar IObject = require('./_iobject');\nvar toObject = require('./_to-object');\nvar toLength = require('./_to-length');\nvar asc = require('./_array-species-create');\nmodule.exports = function (TYPE, $create) {\n  var IS_MAP = TYPE == 1;\n  var IS_FILTER = TYPE == 2;\n  var IS_SOME = TYPE == 3;\n  var IS_EVERY = TYPE == 4;\n  var IS_FIND_INDEX = TYPE == 6;\n  var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;\n  var create = $create || asc;\n  return function ($this, callbackfn, that) {\n    var O = toObject($this);\n    var self = IObject(O);\n    var f = ctx(callbackfn, that, 3);\n    var length = toLength(self.length);\n    var index = 0;\n    var result = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined;\n    var val, res;\n    for (;length > index; index++) if (NO_HOLES || index in self) {\n      val = self[index];\n      res = f(val, index, O);\n      if (TYPE) {\n        if (IS_MAP) result[index] = res;   // map\n        else if (res) switch (TYPE) {\n          case 3: return true;             // some\n          case 5: return val;              // find\n          case 6: return index;            // findIndex\n          case 2: result.push(val);        // filter\n        } else if (IS_EVERY) return false; // every\n      }\n    }\n    return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result;\n  };\n};\n","var aFunction = require('./_a-function');\nvar toObject = require('./_to-object');\nvar IObject = require('./_iobject');\nvar toLength = require('./_to-length');\n\nmodule.exports = function (that, callbackfn, aLen, memo, isRight) {\n  aFunction(callbackfn);\n  var O = toObject(that);\n  var self = IObject(O);\n  var length = toLength(O.length);\n  var index = isRight ? length - 1 : 0;\n  var i = isRight ? -1 : 1;\n  if (aLen < 2) for (;;) {\n    if (index in self) {\n      memo = self[index];\n      index += i;\n      break;\n    }\n    index += i;\n    if (isRight ? index < 0 : length <= index) {\n      throw TypeError('Reduce of empty array with no initial value');\n    }\n  }\n  for (;isRight ? index >= 0 : length > index; index += i) if (index in self) {\n    memo = callbackfn(memo, self[index], index, O);\n  }\n  return memo;\n};\n","var isObject = require('./_is-object');\nvar isArray = require('./_is-array');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (original) {\n  var C;\n  if (isArray(original)) {\n    C = original.constructor;\n    // cross-realm fallback\n    if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined;\n    if (isObject(C)) {\n      C = C[SPECIES];\n      if (C === null) C = undefined;\n    }\n  } return C === undefined ? Array : C;\n};\n","// 9.4.2.3 ArraySpeciesCreate(originalArray, length)\nvar speciesConstructor = require('./_array-species-constructor');\n\nmodule.exports = function (original, length) {\n  return new (speciesConstructor(original))(length);\n};\n","'use strict';\nvar aFunction = require('./_a-function');\nvar isObject = require('./_is-object');\nvar invoke = require('./_invoke');\nvar arraySlice = [].slice;\nvar factories = {};\n\nvar construct = function (F, len, args) {\n  if (!(len in factories)) {\n    for (var n = [], i = 0; i < len; i++) n[i] = 'a[' + i + ']';\n    // eslint-disable-next-line no-new-func\n    factories[len] = Function('F,a', 'return new F(' + n.join(',') + ')');\n  } return factories[len](F, args);\n};\n\nmodule.exports = Function.bind || function bind(that /* , ...args */) {\n  var fn = aFunction(this);\n  var partArgs = arraySlice.call(arguments, 1);\n  var bound = function (/* args... */) {\n    var args = partArgs.concat(arraySlice.call(arguments));\n    return this instanceof bound ? construct(fn, args.length, args) : invoke(fn, args, that);\n  };\n  if (isObject(fn.prototype)) bound.prototype = fn.prototype;\n  return bound;\n};\n","// getting tag from 19.1.3.6 Object.prototype.toString()\nvar cof = require('./_cof');\nvar TAG = require('./_wks')('toStringTag');\n// ES3 wrong here\nvar ARG = cof(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n  try {\n    return it[key];\n  } catch (e) { /* empty */ }\n};\n\nmodule.exports = function (it) {\n  var O, T, B;\n  return it === undefined ? 'Undefined' : it === null ? 'Null'\n    // @@toStringTag case\n    : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T\n    // builtinTag case\n    : ARG ? cof(O)\n    // ES3 arguments fallback\n    : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;\n};\n","var toString = {}.toString;\n\nmodule.exports = function (it) {\n  return toString.call(it).slice(8, -1);\n};\n","'use strict';\nvar dP = require('./_object-dp').f;\nvar create = require('./_object-create');\nvar redefineAll = require('./_redefine-all');\nvar ctx = require('./_ctx');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar $iterDefine = require('./_iter-define');\nvar step = require('./_iter-step');\nvar setSpecies = require('./_set-species');\nvar DESCRIPTORS = require('./_descriptors');\nvar fastKey = require('./_meta').fastKey;\nvar validate = require('./_validate-collection');\nvar SIZE = DESCRIPTORS ? '_s' : 'size';\n\nvar getEntry = function (that, key) {\n  // fast case\n  var index = fastKey(key);\n  var entry;\n  if (index !== 'F') return that._i[index];\n  // frozen object case\n  for (entry = that._f; entry; entry = entry.n) {\n    if (entry.k == key) return entry;\n  }\n};\n\nmodule.exports = {\n  getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n    var C = wrapper(function (that, iterable) {\n      anInstance(that, C, NAME, '_i');\n      that._t = NAME;         // collection type\n      that._i = create(null); // index\n      that._f = undefined;    // first entry\n      that._l = undefined;    // last entry\n      that[SIZE] = 0;         // size\n      if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n    });\n    redefineAll(C.prototype, {\n      // 23.1.3.1 Map.prototype.clear()\n      // 23.2.3.2 Set.prototype.clear()\n      clear: function clear() {\n        for (var that = validate(this, NAME), data = that._i, entry = that._f; entry; entry = entry.n) {\n          entry.r = true;\n          if (entry.p) entry.p = entry.p.n = undefined;\n          delete data[entry.i];\n        }\n        that._f = that._l = undefined;\n        that[SIZE] = 0;\n      },\n      // 23.1.3.3 Map.prototype.delete(key)\n      // 23.2.3.4 Set.prototype.delete(value)\n      'delete': function (key) {\n        var that = validate(this, NAME);\n        var entry = getEntry(that, key);\n        if (entry) {\n          var next = entry.n;\n          var prev = entry.p;\n          delete that._i[entry.i];\n          entry.r = true;\n          if (prev) prev.n = next;\n          if (next) next.p = prev;\n          if (that._f == entry) that._f = next;\n          if (that._l == entry) that._l = prev;\n          that[SIZE]--;\n        } return !!entry;\n      },\n      // 23.2.3.6 Set.prototype.forEach(callbackfn, thisArg = undefined)\n      // 23.1.3.5 Map.prototype.forEach(callbackfn, thisArg = undefined)\n      forEach: function forEach(callbackfn /* , that = undefined */) {\n        validate(this, NAME);\n        var f = ctx(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3);\n        var entry;\n        while (entry = entry ? entry.n : this._f) {\n          f(entry.v, entry.k, this);\n          // revert to the last existing entry\n          while (entry && entry.r) entry = entry.p;\n        }\n      },\n      // 23.1.3.7 Map.prototype.has(key)\n      // 23.2.3.7 Set.prototype.has(value)\n      has: function has(key) {\n        return !!getEntry(validate(this, NAME), key);\n      }\n    });\n    if (DESCRIPTORS) dP(C.prototype, 'size', {\n      get: function () {\n        return validate(this, NAME)[SIZE];\n      }\n    });\n    return C;\n  },\n  def: function (that, key, value) {\n    var entry = getEntry(that, key);\n    var prev, index;\n    // change existing entry\n    if (entry) {\n      entry.v = value;\n    // create new entry\n    } else {\n      that._l = entry = {\n        i: index = fastKey(key, true), // <- index\n        k: key,                        // <- key\n        v: value,                      // <- value\n        p: prev = that._l,             // <- previous entry\n        n: undefined,                  // <- next entry\n        r: false                       // <- removed\n      };\n      if (!that._f) that._f = entry;\n      if (prev) prev.n = entry;\n      that[SIZE]++;\n      // add to index\n      if (index !== 'F') that._i[index] = entry;\n    } return that;\n  },\n  getEntry: getEntry,\n  setStrong: function (C, NAME, IS_MAP) {\n    // add .keys, .values, .entries, [@@iterator]\n    // 23.1.3.4, 23.1.3.8, 23.1.3.11, 23.1.3.12, 23.2.3.5, 23.2.3.8, 23.2.3.10, 23.2.3.11\n    $iterDefine(C, NAME, function (iterated, kind) {\n      this._t = validate(iterated, NAME); // target\n      this._k = kind;                     // kind\n      this._l = undefined;                // previous\n    }, function () {\n      var that = this;\n      var kind = that._k;\n      var entry = that._l;\n      // revert to the last existing entry\n      while (entry && entry.r) entry = entry.p;\n      // get next entry\n      if (!that._t || !(that._l = entry = entry ? entry.n : that._t._f)) {\n        // or finish the iteration\n        that._t = undefined;\n        return step(1);\n      }\n      // return step by kind\n      if (kind == 'keys') return step(0, entry.k);\n      if (kind == 'values') return step(0, entry.v);\n      return step(0, [entry.k, entry.v]);\n    }, IS_MAP ? 'entries' : 'values', !IS_MAP, true);\n\n    // add [@@species], 23.1.2.2, 23.2.2.2\n    setSpecies(NAME);\n  }\n};\n","'use strict';\nvar redefineAll = require('./_redefine-all');\nvar getWeak = require('./_meta').getWeak;\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar createArrayMethod = require('./_array-methods');\nvar $has = require('./_has');\nvar validate = require('./_validate-collection');\nvar arrayFind = createArrayMethod(5);\nvar arrayFindIndex = createArrayMethod(6);\nvar id = 0;\n\n// fallback for uncaught frozen keys\nvar uncaughtFrozenStore = function (that) {\n  return that._l || (that._l = new UncaughtFrozenStore());\n};\nvar UncaughtFrozenStore = function () {\n  this.a = [];\n};\nvar findUncaughtFrozen = function (store, key) {\n  return arrayFind(store.a, function (it) {\n    return it[0] === key;\n  });\n};\nUncaughtFrozenStore.prototype = {\n  get: function (key) {\n    var entry = findUncaughtFrozen(this, key);\n    if (entry) return entry[1];\n  },\n  has: function (key) {\n    return !!findUncaughtFrozen(this, key);\n  },\n  set: function (key, value) {\n    var entry = findUncaughtFrozen(this, key);\n    if (entry) entry[1] = value;\n    else this.a.push([key, value]);\n  },\n  'delete': function (key) {\n    var index = arrayFindIndex(this.a, function (it) {\n      return it[0] === key;\n    });\n    if (~index) this.a.splice(index, 1);\n    return !!~index;\n  }\n};\n\nmodule.exports = {\n  getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n    var C = wrapper(function (that, iterable) {\n      anInstance(that, C, NAME, '_i');\n      that._t = NAME;      // collection type\n      that._i = id++;      // collection id\n      that._l = undefined; // leak store for uncaught frozen objects\n      if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n    });\n    redefineAll(C.prototype, {\n      // 23.3.3.2 WeakMap.prototype.delete(key)\n      // 23.4.3.3 WeakSet.prototype.delete(value)\n      'delete': function (key) {\n        if (!isObject(key)) return false;\n        var data = getWeak(key);\n        if (data === true) return uncaughtFrozenStore(validate(this, NAME))['delete'](key);\n        return data && $has(data, this._i) && delete data[this._i];\n      },\n      // 23.3.3.4 WeakMap.prototype.has(key)\n      // 23.4.3.4 WeakSet.prototype.has(value)\n      has: function has(key) {\n        if (!isObject(key)) return false;\n        var data = getWeak(key);\n        if (data === true) return uncaughtFrozenStore(validate(this, NAME)).has(key);\n        return data && $has(data, this._i);\n      }\n    });\n    return C;\n  },\n  def: function (that, key, value) {\n    var data = getWeak(anObject(key), true);\n    if (data === true) uncaughtFrozenStore(that).set(key, value);\n    else data[that._i] = value;\n    return that;\n  },\n  ufstore: uncaughtFrozenStore\n};\n","'use strict';\nvar global = require('./_global');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar redefineAll = require('./_redefine-all');\nvar meta = require('./_meta');\nvar forOf = require('./_for-of');\nvar anInstance = require('./_an-instance');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar $iterDetect = require('./_iter-detect');\nvar setToStringTag = require('./_set-to-string-tag');\nvar inheritIfRequired = require('./_inherit-if-required');\n\nmodule.exports = function (NAME, wrapper, methods, common, IS_MAP, IS_WEAK) {\n  var Base = global[NAME];\n  var C = Base;\n  var ADDER = IS_MAP ? 'set' : 'add';\n  var proto = C && C.prototype;\n  var O = {};\n  var fixMethod = function (KEY) {\n    var fn = proto[KEY];\n    redefine(proto, KEY,\n      KEY == 'delete' ? function (a) {\n        return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n      } : KEY == 'has' ? function has(a) {\n        return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n      } : KEY == 'get' ? function get(a) {\n        return IS_WEAK && !isObject(a) ? undefined : fn.call(this, a === 0 ? 0 : a);\n      } : KEY == 'add' ? function add(a) { fn.call(this, a === 0 ? 0 : a); return this; }\n        : function set(a, b) { fn.call(this, a === 0 ? 0 : a, b); return this; }\n    );\n  };\n  if (typeof C != 'function' || !(IS_WEAK || proto.forEach && !fails(function () {\n    new C().entries().next();\n  }))) {\n    // create collection constructor\n    C = common.getConstructor(wrapper, NAME, IS_MAP, ADDER);\n    redefineAll(C.prototype, methods);\n    meta.NEED = true;\n  } else {\n    var instance = new C();\n    // early implementations not supports chaining\n    var HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance;\n    // V8 ~  Chromium 40- weak-collections throws on primitives, but should return false\n    var THROWS_ON_PRIMITIVES = fails(function () { instance.has(1); });\n    // most early implementations doesn't supports iterables, most modern - not close it correctly\n    var ACCEPT_ITERABLES = $iterDetect(function (iter) { new C(iter); }); // eslint-disable-line no-new\n    // for early implementations -0 and +0 not the same\n    var BUGGY_ZERO = !IS_WEAK && fails(function () {\n      // V8 ~ Chromium 42- fails only with 5+ elements\n      var $instance = new C();\n      var index = 5;\n      while (index--) $instance[ADDER](index, index);\n      return !$instance.has(-0);\n    });\n    if (!ACCEPT_ITERABLES) {\n      C = wrapper(function (target, iterable) {\n        anInstance(target, C, NAME);\n        var that = inheritIfRequired(new Base(), target, C);\n        if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n        return that;\n      });\n      C.prototype = proto;\n      proto.constructor = C;\n    }\n    if (THROWS_ON_PRIMITIVES || BUGGY_ZERO) {\n      fixMethod('delete');\n      fixMethod('has');\n      IS_MAP && fixMethod('get');\n    }\n    if (BUGGY_ZERO || HASNT_CHAINING) fixMethod(ADDER);\n    // weak collections should not contains .clear method\n    if (IS_WEAK && proto.clear) delete proto.clear;\n  }\n\n  setToStringTag(C, NAME);\n\n  O[NAME] = C;\n  $export($export.G + $export.W + $export.F * (C != Base), O);\n\n  if (!IS_WEAK) common.setStrong(C, NAME, IS_MAP);\n\n  return C;\n};\n","'use strict';\nvar $defineProperty = require('./_object-dp');\nvar createDesc = require('./_property-desc');\n\nmodule.exports = function (object, index, value) {\n  if (index in object) $defineProperty.f(object, index, createDesc(0, value));\n  else object[index] = value;\n};\n","'use strict';\n// 20.3.4.36 / 15.9.5.43 Date.prototype.toISOString()\nvar fails = require('./_fails');\nvar getTime = Date.prototype.getTime;\nvar $toISOString = Date.prototype.toISOString;\n\nvar lz = function (num) {\n  return num > 9 ? num : '0' + num;\n};\n\n// PhantomJS / old WebKit has a broken implementations\nmodule.exports = (fails(function () {\n  return $toISOString.call(new Date(-5e13 - 1)) != '0385-07-25T07:06:39.999Z';\n}) || !fails(function () {\n  $toISOString.call(new Date(NaN));\n})) ? function toISOString() {\n  if (!isFinite(getTime.call(this))) throw RangeError('Invalid time value');\n  var d = this;\n  var y = d.getUTCFullYear();\n  var m = d.getUTCMilliseconds();\n  var s = y < 0 ? '-' : y > 9999 ? '+' : '';\n  return s + ('00000' + Math.abs(y)).slice(s ? -6 : -4) +\n    '-' + lz(d.getUTCMonth() + 1) + '-' + lz(d.getUTCDate()) +\n    'T' + lz(d.getUTCHours()) + ':' + lz(d.getUTCMinutes()) +\n    ':' + lz(d.getUTCSeconds()) + '.' + (m > 99 ? m : '0' + lz(m)) + 'Z';\n} : $toISOString;\n","'use strict';\nvar anObject = require('./_an-object');\nvar toPrimitive = require('./_to-primitive');\nvar NUMBER = 'number';\n\nmodule.exports = function (hint) {\n  if (hint !== 'string' && hint !== NUMBER && hint !== 'default') throw TypeError('Incorrect hint');\n  return toPrimitive(anObject(this), hint != NUMBER);\n};\n","// 7.2.1 RequireObjectCoercible(argument)\nmodule.exports = function (it) {\n  if (it == undefined) throw TypeError(\"Can't call method on  \" + it);\n  return it;\n};\n","// IE 8- don't enum bug keys\nmodule.exports = (\n  'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'\n).split(',');\n","// all enumerable object keys, includes symbols\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nmodule.exports = function (it) {\n  var result = getKeys(it);\n  var getSymbols = gOPS.f;\n  if (getSymbols) {\n    var symbols = getSymbols(it);\n    var isEnum = pIE.f;\n    var i = 0;\n    var key;\n    while (symbols.length > i) if (isEnum.call(it, key = symbols[i++])) result.push(key);\n  } return result;\n};\n","var global = require('./_global');\nvar core = require('./_core');\nvar hide = require('./_hide');\nvar redefine = require('./_redefine');\nvar ctx = require('./_ctx');\nvar PROTOTYPE = 'prototype';\n\nvar $export = function (type, name, source) {\n  var IS_FORCED = type & $export.F;\n  var IS_GLOBAL = type & $export.G;\n  var IS_STATIC = type & $export.S;\n  var IS_PROTO = type & $export.P;\n  var IS_BIND = type & $export.B;\n  var target = IS_GLOBAL ? global : IS_STATIC ? global[name] || (global[name] = {}) : (global[name] || {})[PROTOTYPE];\n  var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});\n  var expProto = exports[PROTOTYPE] || (exports[PROTOTYPE] = {});\n  var key, own, out, exp;\n  if (IS_GLOBAL) source = name;\n  for (key in source) {\n    // contains in native\n    own = !IS_FORCED && target && target[key] !== undefined;\n    // export native or passed\n    out = (own ? target : source)[key];\n    // bind timers to global for call from export context\n    exp = IS_BIND && own ? ctx(out, global) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n    // extend global\n    if (target) redefine(target, key, out, type & $export.U);\n    // export\n    if (exports[key] != out) hide(exports, key, exp);\n    if (IS_PROTO && expProto[key] != out) expProto[key] = out;\n  }\n};\nglobal.core = core;\n// type bitmap\n$export.F = 1;   // forced\n$export.G = 2;   // global\n$export.S = 4;   // static\n$export.P = 8;   // proto\n$export.B = 16;  // bind\n$export.W = 32;  // wrap\n$export.U = 64;  // safe\n$export.R = 128; // real proto method for `library`\nmodule.exports = $export;\n","var MATCH = require('./_wks')('match');\nmodule.exports = function (KEY) {\n  var re = /./;\n  try {\n    '/./'[KEY](re);\n  } catch (e) {\n    try {\n      re[MATCH] = false;\n      return !'/./'[KEY](re);\n    } catch (f) { /* empty */ }\n  } return true;\n};\n","'use strict';\nrequire('./es6.regexp.exec');\nvar redefine = require('./_redefine');\nvar hide = require('./_hide');\nvar fails = require('./_fails');\nvar defined = require('./_defined');\nvar wks = require('./_wks');\nvar regexpExec = require('./_regexp-exec');\n\nvar SPECIES = wks('species');\n\nvar REPLACE_SUPPORTS_NAMED_GROUPS = !fails(function () {\n  // #replace needs built-in support for named groups.\n  // #match works fine because it just return the exec results, even if it has\n  // a \"grops\" property.\n  var re = /./;\n  re.exec = function () {\n    var result = [];\n    result.groups = { a: '7' };\n    return result;\n  };\n  return ''.replace(re, '$<a>') !== '7';\n});\n\nvar SPLIT_WORKS_WITH_OVERWRITTEN_EXEC = (function () {\n  // Chrome 51 has a buggy \"split\" implementation when RegExp#exec !== nativeExec\n  var re = /(?:)/;\n  var originalExec = re.exec;\n  re.exec = function () { return originalExec.apply(this, arguments); };\n  var result = 'ab'.split(re);\n  return result.length === 2 && result[0] === 'a' && result[1] === 'b';\n})();\n\nmodule.exports = function (KEY, length, exec) {\n  var SYMBOL = wks(KEY);\n\n  var DELEGATES_TO_SYMBOL = !fails(function () {\n    // String methods call symbol-named RegEp methods\n    var O = {};\n    O[SYMBOL] = function () { return 7; };\n    return ''[KEY](O) != 7;\n  });\n\n  var DELEGATES_TO_EXEC = DELEGATES_TO_SYMBOL ? !fails(function () {\n    // Symbol-named RegExp methods call .exec\n    var execCalled = false;\n    var re = /a/;\n    re.exec = function () { execCalled = true; return null; };\n    if (KEY === 'split') {\n      // RegExp[@@split] doesn't call the regex's exec method, but first creates\n      // a new one. We need to return the patched regex when creating the new one.\n      re.constructor = {};\n      re.constructor[SPECIES] = function () { return re; };\n    }\n    re[SYMBOL]('');\n    return !execCalled;\n  }) : undefined;\n\n  if (\n    !DELEGATES_TO_SYMBOL ||\n    !DELEGATES_TO_EXEC ||\n    (KEY === 'replace' && !REPLACE_SUPPORTS_NAMED_GROUPS) ||\n    (KEY === 'split' && !SPLIT_WORKS_WITH_OVERWRITTEN_EXEC)\n  ) {\n    var nativeRegExpMethod = /./[SYMBOL];\n    var fns = exec(\n      defined,\n      SYMBOL,\n      ''[KEY],\n      function maybeCallNative(nativeMethod, regexp, str, arg2, forceStringMethod) {\n        if (regexp.exec === regexpExec) {\n          if (DELEGATES_TO_SYMBOL && !forceStringMethod) {\n            // The native String method already delegates to @@method (this\n            // polyfilled function), leasing to infinite recursion.\n            // We avoid it by directly calling the native @@method method.\n            return { done: true, value: nativeRegExpMethod.call(regexp, str, arg2) };\n          }\n          return { done: true, value: nativeMethod.call(str, regexp, arg2) };\n        }\n        return { done: false };\n      }\n    );\n    var strfn = fns[0];\n    var rxfn = fns[1];\n\n    redefine(String.prototype, KEY, strfn);\n    hide(RegExp.prototype, SYMBOL, length == 2\n      // 21.2.5.8 RegExp.prototype[@@replace](string, replaceValue)\n      // 21.2.5.11 RegExp.prototype[@@split](string, limit)\n      ? function (string, arg) { return rxfn.call(string, this, arg); }\n      // 21.2.5.6 RegExp.prototype[@@match](string)\n      // 21.2.5.9 RegExp.prototype[@@search](string)\n      : function (string) { return rxfn.call(string, this); }\n    );\n  }\n};\n","'use strict';\n// 21.2.5.3 get RegExp.prototype.flags\nvar anObject = require('./_an-object');\nmodule.exports = function () {\n  var that = anObject(this);\n  var result = '';\n  if (that.global) result += 'g';\n  if (that.ignoreCase) result += 'i';\n  if (that.multiline) result += 'm';\n  if (that.unicode) result += 'u';\n  if (that.sticky) result += 'y';\n  return result;\n};\n","'use strict';\n// https://tc39.github.io/proposal-flatMap/#sec-FlattenIntoArray\nvar isArray = require('./_is-array');\nvar isObject = require('./_is-object');\nvar toLength = require('./_to-length');\nvar ctx = require('./_ctx');\nvar IS_CONCAT_SPREADABLE = require('./_wks')('isConcatSpreadable');\n\nfunction flattenIntoArray(target, original, source, sourceLen, start, depth, mapper, thisArg) {\n  var targetIndex = start;\n  var sourceIndex = 0;\n  var mapFn = mapper ? ctx(mapper, thisArg, 3) : false;\n  var element, spreadable;\n\n  while (sourceIndex < sourceLen) {\n    if (sourceIndex in source) {\n      element = mapFn ? mapFn(source[sourceIndex], sourceIndex, original) : source[sourceIndex];\n\n      spreadable = false;\n      if (isObject(element)) {\n        spreadable = element[IS_CONCAT_SPREADABLE];\n        spreadable = spreadable !== undefined ? !!spreadable : isArray(element);\n      }\n\n      if (spreadable && depth > 0) {\n        targetIndex = flattenIntoArray(target, original, element, toLength(element.length), targetIndex, depth - 1) - 1;\n      } else {\n        if (targetIndex >= 0x1fffffffffffff) throw TypeError();\n        target[targetIndex] = element;\n      }\n\n      targetIndex++;\n    }\n    sourceIndex++;\n  }\n  return targetIndex;\n}\n\nmodule.exports = flattenIntoArray;\n","var ctx = require('./_ctx');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar anObject = require('./_an-object');\nvar toLength = require('./_to-length');\nvar getIterFn = require('./core.get-iterator-method');\nvar BREAK = {};\nvar RETURN = {};\nvar exports = module.exports = function (iterable, entries, fn, that, ITERATOR) {\n  var iterFn = ITERATOR ? function () { return iterable; } : getIterFn(iterable);\n  var f = ctx(fn, that, entries ? 2 : 1);\n  var index = 0;\n  var length, step, iterator, result;\n  if (typeof iterFn != 'function') throw TypeError(iterable + ' is not iterable!');\n  // fast case for arrays with default iterator\n  if (isArrayIter(iterFn)) for (length = toLength(iterable.length); length > index; index++) {\n    result = entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]);\n    if (result === BREAK || result === RETURN) return result;\n  } else for (iterator = iterFn.call(iterable); !(step = iterator.next()).done;) {\n    result = call(iterator, f, step.value, entries);\n    if (result === BREAK || result === RETURN) return result;\n  }\n};\nexports.BREAK = BREAK;\nexports.RETURN = RETURN;\n","module.exports = require('./_shared')('native-function-to-string', Function.toString);\n","var document = require('./_global').document;\nmodule.exports = document && document.documentElement;\n","var isObject = require('./_is-object');\nvar setPrototypeOf = require('./_set-proto').set;\nmodule.exports = function (that, target, C) {\n  var S = target.constructor;\n  var P;\n  if (S !== C && typeof S == 'function' && (P = S.prototype) !== C.prototype && isObject(P) && setPrototypeOf) {\n    setPrototypeOf(that, P);\n  } return that;\n};\n","// fast apply, http://jsperf.lnkit.com/fast-apply/5\nmodule.exports = function (fn, args, that) {\n  var un = that === undefined;\n  switch (args.length) {\n    case 0: return un ? fn()\n                      : fn.call(that);\n    case 1: return un ? fn(args[0])\n                      : fn.call(that, args[0]);\n    case 2: return un ? fn(args[0], args[1])\n                      : fn.call(that, args[0], args[1]);\n    case 3: return un ? fn(args[0], args[1], args[2])\n                      : fn.call(that, args[0], args[1], args[2]);\n    case 4: return un ? fn(args[0], args[1], args[2], args[3])\n                      : fn.call(that, args[0], args[1], args[2], args[3]);\n  } return fn.apply(that, args);\n};\n","// fallback for non-array-like ES3 and non-enumerable old V8 strings\nvar cof = require('./_cof');\n// eslint-disable-next-line no-prototype-builtins\nmodule.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) {\n  return cof(it) == 'String' ? it.split('') : Object(it);\n};\n","// check on default Array iterator\nvar Iterators = require('./_iterators');\nvar ITERATOR = require('./_wks')('iterator');\nvar ArrayProto = Array.prototype;\n\nmodule.exports = function (it) {\n  return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it);\n};\n","// 7.2.2 IsArray(argument)\nvar cof = require('./_cof');\nmodule.exports = Array.isArray || function isArray(arg) {\n  return cof(arg) == 'Array';\n};\n","// 20.1.2.3 Number.isInteger(number)\nvar isObject = require('./_is-object');\nvar floor = Math.floor;\nmodule.exports = function isInteger(it) {\n  return !isObject(it) && isFinite(it) && floor(it) === it;\n};\n","// 7.2.8 IsRegExp(argument)\nvar isObject = require('./_is-object');\nvar cof = require('./_cof');\nvar MATCH = require('./_wks')('match');\nmodule.exports = function (it) {\n  var isRegExp;\n  return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : cof(it) == 'RegExp');\n};\n","// call something on iterator step with safe closing on error\nvar anObject = require('./_an-object');\nmodule.exports = function (iterator, fn, value, entries) {\n  try {\n    return entries ? fn(anObject(value)[0], value[1]) : fn(value);\n  // 7.4.6 IteratorClose(iterator, completion)\n  } catch (e) {\n    var ret = iterator['return'];\n    if (ret !== undefined) anObject(ret.call(iterator));\n    throw e;\n  }\n};\n","'use strict';\nvar create = require('./_object-create');\nvar descriptor = require('./_property-desc');\nvar setToStringTag = require('./_set-to-string-tag');\nvar IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\nrequire('./_hide')(IteratorPrototype, require('./_wks')('iterator'), function () { return this; });\n\nmodule.exports = function (Constructor, NAME, next) {\n  Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) });\n  setToStringTag(Constructor, NAME + ' Iterator');\n};\n","'use strict';\nvar LIBRARY = require('./_library');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar hide = require('./_hide');\nvar Iterators = require('./_iterators');\nvar $iterCreate = require('./_iter-create');\nvar setToStringTag = require('./_set-to-string-tag');\nvar getPrototypeOf = require('./_object-gpo');\nvar ITERATOR = require('./_wks')('iterator');\nvar BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next`\nvar FF_ITERATOR = '@@iterator';\nvar KEYS = 'keys';\nvar VALUES = 'values';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {\n  $iterCreate(Constructor, NAME, next);\n  var getMethod = function (kind) {\n    if (!BUGGY && kind in proto) return proto[kind];\n    switch (kind) {\n      case KEYS: return function keys() { return new Constructor(this, kind); };\n      case VALUES: return function values() { return new Constructor(this, kind); };\n    } return function entries() { return new Constructor(this, kind); };\n  };\n  var TAG = NAME + ' Iterator';\n  var DEF_VALUES = DEFAULT == VALUES;\n  var VALUES_BUG = false;\n  var proto = Base.prototype;\n  var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT];\n  var $default = $native || getMethod(DEFAULT);\n  var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;\n  var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;\n  var methods, key, IteratorPrototype;\n  // Fix native\n  if ($anyNative) {\n    IteratorPrototype = getPrototypeOf($anyNative.call(new Base()));\n    if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {\n      // Set @@toStringTag to native iterators\n      setToStringTag(IteratorPrototype, TAG, true);\n      // fix for some old engines\n      if (!LIBRARY && typeof IteratorPrototype[ITERATOR] != 'function') hide(IteratorPrototype, ITERATOR, returnThis);\n    }\n  }\n  // fix Array#{values, @@iterator}.name in V8 / FF\n  if (DEF_VALUES && $native && $native.name !== VALUES) {\n    VALUES_BUG = true;\n    $default = function values() { return $native.call(this); };\n  }\n  // Define iterator\n  if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {\n    hide(proto, ITERATOR, $default);\n  }\n  // Plug for library\n  Iterators[NAME] = $default;\n  Iterators[TAG] = returnThis;\n  if (DEFAULT) {\n    methods = {\n      values: DEF_VALUES ? $default : getMethod(VALUES),\n      keys: IS_SET ? $default : getMethod(KEYS),\n      entries: $entries\n    };\n    if (FORCED) for (key in methods) {\n      if (!(key in proto)) redefine(proto, key, methods[key]);\n    } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);\n  }\n  return methods;\n};\n","var ITERATOR = require('./_wks')('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n  var riter = [7][ITERATOR]();\n  riter['return'] = function () { SAFE_CLOSING = true; };\n  // eslint-disable-next-line no-throw-literal\n  Array.from(riter, function () { throw 2; });\n} catch (e) { /* empty */ }\n\nmodule.exports = function (exec, skipClosing) {\n  if (!skipClosing && !SAFE_CLOSING) return false;\n  var safe = false;\n  try {\n    var arr = [7];\n    var iter = arr[ITERATOR]();\n    iter.next = function () { return { done: safe = true }; };\n    arr[ITERATOR] = function () { return iter; };\n    exec(arr);\n  } catch (e) { /* empty */ }\n  return safe;\n};\n","module.exports = function (done, value) {\n  return { value: value, done: !!done };\n};\n","module.exports = {};\n","module.exports = false;\n","// 20.2.2.14 Math.expm1(x)\nvar $expm1 = Math.expm1;\nmodule.exports = (!$expm1\n  // Old FF bug\n  || $expm1(10) > 22025.465794806719 || $expm1(10) < 22025.4657948067165168\n  // Tor Browser bug\n  || $expm1(-2e-17) != -2e-17\n) ? function expm1(x) {\n  return (x = +x) == 0 ? x : x > -1e-6 && x < 1e-6 ? x + x * x / 2 : Math.exp(x) - 1;\n} : $expm1;\n","// 20.2.2.16 Math.fround(x)\nvar sign = require('./_math-sign');\nvar pow = Math.pow;\nvar EPSILON = pow(2, -52);\nvar EPSILON32 = pow(2, -23);\nvar MAX32 = pow(2, 127) * (2 - EPSILON32);\nvar MIN32 = pow(2, -126);\n\nvar roundTiesToEven = function (n) {\n  return n + 1 / EPSILON - 1 / EPSILON;\n};\n\nmodule.exports = Math.fround || function fround(x) {\n  var $abs = Math.abs(x);\n  var $sign = sign(x);\n  var a, result;\n  if ($abs < MIN32) return $sign * roundTiesToEven($abs / MIN32 / EPSILON32) * MIN32 * EPSILON32;\n  a = (1 + EPSILON32 / EPSILON) * $abs;\n  result = a - (a - $abs);\n  // eslint-disable-next-line no-self-compare\n  if (result > MAX32 || result != result) return $sign * Infinity;\n  return $sign * result;\n};\n","// 20.2.2.20 Math.log1p(x)\nmodule.exports = Math.log1p || function log1p(x) {\n  return (x = +x) > -1e-8 && x < 1e-8 ? x - x * x / 2 : Math.log(1 + x);\n};\n","// 20.2.2.28 Math.sign(x)\nmodule.exports = Math.sign || function sign(x) {\n  // eslint-disable-next-line no-self-compare\n  return (x = +x) == 0 || x != x ? x : x < 0 ? -1 : 1;\n};\n","var META = require('./_uid')('meta');\nvar isObject = require('./_is-object');\nvar has = require('./_has');\nvar setDesc = require('./_object-dp').f;\nvar id = 0;\nvar isExtensible = Object.isExtensible || function () {\n  return true;\n};\nvar FREEZE = !require('./_fails')(function () {\n  return isExtensible(Object.preventExtensions({}));\n});\nvar setMeta = function (it) {\n  setDesc(it, META, { value: {\n    i: 'O' + ++id, // object ID\n    w: {}          // weak collections IDs\n  } });\n};\nvar fastKey = function (it, create) {\n  // return primitive with prefix\n  if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\n  if (!has(it, META)) {\n    // can't set metadata to uncaught frozen object\n    if (!isExtensible(it)) return 'F';\n    // not necessary to add metadata\n    if (!create) return 'E';\n    // add missing metadata\n    setMeta(it);\n  // return object ID\n  } return it[META].i;\n};\nvar getWeak = function (it, create) {\n  if (!has(it, META)) {\n    // can't set metadata to uncaught frozen object\n    if (!isExtensible(it)) return true;\n    // not necessary to add metadata\n    if (!create) return false;\n    // add missing metadata\n    setMeta(it);\n  // return hash weak collections IDs\n  } return it[META].w;\n};\n// add metadata on freeze-family methods calling\nvar onFreeze = function (it) {\n  if (FREEZE && meta.NEED && isExtensible(it) && !has(it, META)) setMeta(it);\n  return it;\n};\nvar meta = module.exports = {\n  KEY: META,\n  NEED: false,\n  fastKey: fastKey,\n  getWeak: getWeak,\n  onFreeze: onFreeze\n};\n","var global = require('./_global');\nvar macrotask = require('./_task').set;\nvar Observer = global.MutationObserver || global.WebKitMutationObserver;\nvar process = global.process;\nvar Promise = global.Promise;\nvar isNode = require('./_cof')(process) == 'process';\n\nmodule.exports = function () {\n  var head, last, notify;\n\n  var flush = function () {\n    var parent, fn;\n    if (isNode && (parent = process.domain)) parent.exit();\n    while (head) {\n      fn = head.fn;\n      head = head.next;\n      try {\n        fn();\n      } catch (e) {\n        if (head) notify();\n        else last = undefined;\n        throw e;\n      }\n    } last = undefined;\n    if (parent) parent.enter();\n  };\n\n  // Node.js\n  if (isNode) {\n    notify = function () {\n      process.nextTick(flush);\n    };\n  // browsers with MutationObserver, except iOS Safari - https://github.com/zloirock/core-js/issues/339\n  } else if (Observer && !(global.navigator && global.navigator.standalone)) {\n    var toggle = true;\n    var node = document.createTextNode('');\n    new Observer(flush).observe(node, { characterData: true }); // eslint-disable-line no-new\n    notify = function () {\n      node.data = toggle = !toggle;\n    };\n  // environments with maybe non-completely correct, but existent Promise\n  } else if (Promise && Promise.resolve) {\n    // Promise.resolve without an argument throws an error in LG WebOS 2\n    var promise = Promise.resolve(undefined);\n    notify = function () {\n      promise.then(flush);\n    };\n  // for other environments - macrotask based on:\n  // - setImmediate\n  // - MessageChannel\n  // - window.postMessag\n  // - onreadystatechange\n  // - setTimeout\n  } else {\n    notify = function () {\n      // strange IE + webpack dev server bug - use .call(global)\n      macrotask.call(global, flush);\n    };\n  }\n\n  return function (fn) {\n    var task = { fn: fn, next: undefined };\n    if (last) last.next = task;\n    if (!head) {\n      head = task;\n      notify();\n    } last = task;\n  };\n};\n","'use strict';\n// 25.4.1.5 NewPromiseCapability(C)\nvar aFunction = require('./_a-function');\n\nfunction PromiseCapability(C) {\n  var resolve, reject;\n  this.promise = new C(function ($$resolve, $$reject) {\n    if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor');\n    resolve = $$resolve;\n    reject = $$reject;\n  });\n  this.resolve = aFunction(resolve);\n  this.reject = aFunction(reject);\n}\n\nmodule.exports.f = function (C) {\n  return new PromiseCapability(C);\n};\n","'use strict';\n// 19.1.2.1 Object.assign(target, source, ...)\nvar DESCRIPTORS = require('./_descriptors');\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nvar toObject = require('./_to-object');\nvar IObject = require('./_iobject');\nvar $assign = Object.assign;\n\n// should work with symbols and should have deterministic property order (V8 bug)\nmodule.exports = !$assign || require('./_fails')(function () {\n  var A = {};\n  var B = {};\n  // eslint-disable-next-line no-undef\n  var S = Symbol();\n  var K = 'abcdefghijklmnopqrst';\n  A[S] = 7;\n  K.split('').forEach(function (k) { B[k] = k; });\n  return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars\n  var T = toObject(target);\n  var aLen = arguments.length;\n  var index = 1;\n  var getSymbols = gOPS.f;\n  var isEnum = pIE.f;\n  while (aLen > index) {\n    var S = IObject(arguments[index++]);\n    var keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S);\n    var length = keys.length;\n    var j = 0;\n    var key;\n    while (length > j) {\n      key = keys[j++];\n      if (!DESCRIPTORS || isEnum.call(S, key)) T[key] = S[key];\n    }\n  } return T;\n} : $assign;\n","// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\nvar anObject = require('./_an-object');\nvar dPs = require('./_object-dps');\nvar enumBugKeys = require('./_enum-bug-keys');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar Empty = function () { /* empty */ };\nvar PROTOTYPE = 'prototype';\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar createDict = function () {\n  // Thrash, waste and sodomy: IE GC bug\n  var iframe = require('./_dom-create')('iframe');\n  var i = enumBugKeys.length;\n  var lt = '<';\n  var gt = '>';\n  var iframeDocument;\n  iframe.style.display = 'none';\n  require('./_html').appendChild(iframe);\n  iframe.src = 'javascript:'; // eslint-disable-line no-script-url\n  // createDict = iframe.contentWindow.Object;\n  // html.removeChild(iframe);\n  iframeDocument = iframe.contentWindow.document;\n  iframeDocument.open();\n  iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);\n  iframeDocument.close();\n  createDict = iframeDocument.F;\n  while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]];\n  return createDict();\n};\n\nmodule.exports = Object.create || function create(O, Properties) {\n  var result;\n  if (O !== null) {\n    Empty[PROTOTYPE] = anObject(O);\n    result = new Empty();\n    Empty[PROTOTYPE] = null;\n    // add \"__proto__\" for Object.getPrototypeOf polyfill\n    result[IE_PROTO] = O;\n  } else result = createDict();\n  return Properties === undefined ? result : dPs(result, Properties);\n};\n","var dP = require('./_object-dp');\nvar anObject = require('./_an-object');\nvar getKeys = require('./_object-keys');\n\nmodule.exports = require('./_descriptors') ? Object.defineProperties : function defineProperties(O, Properties) {\n  anObject(O);\n  var keys = getKeys(Properties);\n  var length = keys.length;\n  var i = 0;\n  var P;\n  while (length > i) dP.f(O, P = keys[i++], Properties[P]);\n  return O;\n};\n","var pIE = require('./_object-pie');\nvar createDesc = require('./_property-desc');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar has = require('./_has');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nexports.f = require('./_descriptors') ? gOPD : function getOwnPropertyDescriptor(O, P) {\n  O = toIObject(O);\n  P = toPrimitive(P, true);\n  if (IE8_DOM_DEFINE) try {\n    return gOPD(O, P);\n  } catch (e) { /* empty */ }\n  if (has(O, P)) return createDesc(!pIE.f.call(O, P), O[P]);\n};\n","// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nvar toIObject = require('./_to-iobject');\nvar gOPN = require('./_object-gopn').f;\nvar toString = {}.toString;\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n  ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function (it) {\n  try {\n    return gOPN(it);\n  } catch (e) {\n    return windowNames.slice();\n  }\n};\n\nmodule.exports.f = function getOwnPropertyNames(it) {\n  return windowNames && toString.call(it) == '[object Window]' ? getWindowNames(it) : gOPN(toIObject(it));\n};\n","// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)\nvar $keys = require('./_object-keys-internal');\nvar hiddenKeys = require('./_enum-bug-keys').concat('length', 'prototype');\n\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n  return $keys(O, hiddenKeys);\n};\n","exports.f = Object.getOwnPropertySymbols;\n","// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)\nvar has = require('./_has');\nvar toObject = require('./_to-object');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar ObjectProto = Object.prototype;\n\nmodule.exports = Object.getPrototypeOf || function (O) {\n  O = toObject(O);\n  if (has(O, IE_PROTO)) return O[IE_PROTO];\n  if (typeof O.constructor == 'function' && O instanceof O.constructor) {\n    return O.constructor.prototype;\n  } return O instanceof Object ? ObjectProto : null;\n};\n","var has = require('./_has');\nvar toIObject = require('./_to-iobject');\nvar arrayIndexOf = require('./_array-includes')(false);\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\n\nmodule.exports = function (object, names) {\n  var O = toIObject(object);\n  var i = 0;\n  var result = [];\n  var key;\n  for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key);\n  // Don't enum bug & hidden keys\n  while (names.length > i) if (has(O, key = names[i++])) {\n    ~arrayIndexOf(result, key) || result.push(key);\n  }\n  return result;\n};\n","// 19.1.2.14 / 15.2.3.14 Object.keys(O)\nvar $keys = require('./_object-keys-internal');\nvar enumBugKeys = require('./_enum-bug-keys');\n\nmodule.exports = Object.keys || function keys(O) {\n  return $keys(O, enumBugKeys);\n};\n","exports.f = {}.propertyIsEnumerable;\n","// most Object methods by ES6 should accept primitives\nvar $export = require('./_export');\nvar core = require('./_core');\nvar fails = require('./_fails');\nmodule.exports = function (KEY, exec) {\n  var fn = (core.Object || {})[KEY] || Object[KEY];\n  var exp = {};\n  exp[KEY] = exec(fn);\n  $export($export.S + $export.F * fails(function () { fn(1); }), 'Object', exp);\n};\n","var DESCRIPTORS = require('./_descriptors');\nvar getKeys = require('./_object-keys');\nvar toIObject = require('./_to-iobject');\nvar isEnum = require('./_object-pie').f;\nmodule.exports = function (isEntries) {\n  return function (it) {\n    var O = toIObject(it);\n    var keys = getKeys(O);\n    var length = keys.length;\n    var i = 0;\n    var result = [];\n    var key;\n    while (length > i) {\n      key = keys[i++];\n      if (!DESCRIPTORS || isEnum.call(O, key)) {\n        result.push(isEntries ? [key, O[key]] : O[key]);\n      }\n    }\n    return result;\n  };\n};\n","// all object keys, includes non-enumerable and symbols\nvar gOPN = require('./_object-gopn');\nvar gOPS = require('./_object-gops');\nvar anObject = require('./_an-object');\nvar Reflect = require('./_global').Reflect;\nmodule.exports = Reflect && Reflect.ownKeys || function ownKeys(it) {\n  var keys = gOPN.f(anObject(it));\n  var getSymbols = gOPS.f;\n  return getSymbols ? keys.concat(getSymbols(it)) : keys;\n};\n","var $parseFloat = require('./_global').parseFloat;\nvar $trim = require('./_string-trim').trim;\n\nmodule.exports = 1 / $parseFloat(require('./_string-ws') + '-0') !== -Infinity ? function parseFloat(str) {\n  var string = $trim(String(str), 3);\n  var result = $parseFloat(string);\n  return result === 0 && string.charAt(0) == '-' ? -0 : result;\n} : $parseFloat;\n","var $parseInt = require('./_global').parseInt;\nvar $trim = require('./_string-trim').trim;\nvar ws = require('./_string-ws');\nvar hex = /^[-+]?0[xX]/;\n\nmodule.exports = $parseInt(ws + '08') !== 8 || $parseInt(ws + '0x16') !== 22 ? function parseInt(str, radix) {\n  var string = $trim(String(str), 3);\n  return $parseInt(string, (radix >>> 0) || (hex.test(string) ? 16 : 10));\n} : $parseInt;\n","module.exports = function (exec) {\n  try {\n    return { e: false, v: exec() };\n  } catch (e) {\n    return { e: true, v: e };\n  }\n};\n","var anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar newPromiseCapability = require('./_new-promise-capability');\n\nmodule.exports = function (C, x) {\n  anObject(C);\n  if (isObject(x) && x.constructor === C) return x;\n  var promiseCapability = newPromiseCapability.f(C);\n  var resolve = promiseCapability.resolve;\n  resolve(x);\n  return promiseCapability.promise;\n};\n","var redefine = require('./_redefine');\nmodule.exports = function (target, src, safe) {\n  for (var key in src) redefine(target, key, src[key], safe);\n  return target;\n};\n","var global = require('./_global');\nvar hide = require('./_hide');\nvar has = require('./_has');\nvar SRC = require('./_uid')('src');\nvar $toString = require('./_function-to-string');\nvar TO_STRING = 'toString';\nvar TPL = ('' + $toString).split(TO_STRING);\n\nrequire('./_core').inspectSource = function (it) {\n  return $toString.call(it);\n};\n\n(module.exports = function (O, key, val, safe) {\n  var isFunction = typeof val == 'function';\n  if (isFunction) has(val, 'name') || hide(val, 'name', key);\n  if (O[key] === val) return;\n  if (isFunction) has(val, SRC) || hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key)));\n  if (O === global) {\n    O[key] = val;\n  } else if (!safe) {\n    delete O[key];\n    hide(O, key, val);\n  } else if (O[key]) {\n    O[key] = val;\n  } else {\n    hide(O, key, val);\n  }\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n})(Function.prototype, TO_STRING, function toString() {\n  return typeof this == 'function' && this[SRC] || $toString.call(this);\n});\n","'use strict';\n\nvar classof = require('./_classof');\nvar builtinExec = RegExp.prototype.exec;\n\n // `RegExpExec` abstract operation\n// https://tc39.github.io/ecma262/#sec-regexpexec\nmodule.exports = function (R, S) {\n  var exec = R.exec;\n  if (typeof exec === 'function') {\n    var result = exec.call(R, S);\n    if (typeof result !== 'object') {\n      throw new TypeError('RegExp exec method returned something other than an Object or null');\n    }\n    return result;\n  }\n  if (classof(R) !== 'RegExp') {\n    throw new TypeError('RegExp#exec called on incompatible receiver');\n  }\n  return builtinExec.call(R, S);\n};\n","'use strict';\n\nvar regexpFlags = require('./_flags');\n\nvar nativeExec = RegExp.prototype.exec;\n// This always refers to the native implementation, because the\n// String#replace polyfill uses ./fix-regexp-well-known-symbol-logic.js,\n// which loads this file before patching the method.\nvar nativeReplace = String.prototype.replace;\n\nvar patchedExec = nativeExec;\n\nvar LAST_INDEX = 'lastIndex';\n\nvar UPDATES_LAST_INDEX_WRONG = (function () {\n  var re1 = /a/,\n      re2 = /b*/g;\n  nativeExec.call(re1, 'a');\n  nativeExec.call(re2, 'a');\n  return re1[LAST_INDEX] !== 0 || re2[LAST_INDEX] !== 0;\n})();\n\n// nonparticipating capturing group, copied from es5-shim's String#split patch.\nvar NPCG_INCLUDED = /()??/.exec('')[1] !== undefined;\n\nvar PATCH = UPDATES_LAST_INDEX_WRONG || NPCG_INCLUDED;\n\nif (PATCH) {\n  patchedExec = function exec(str) {\n    var re = this;\n    var lastIndex, reCopy, match, i;\n\n    if (NPCG_INCLUDED) {\n      reCopy = new RegExp('^' + re.source + '$(?!\\\\s)', regexpFlags.call(re));\n    }\n    if (UPDATES_LAST_INDEX_WRONG) lastIndex = re[LAST_INDEX];\n\n    match = nativeExec.call(re, str);\n\n    if (UPDATES_LAST_INDEX_WRONG && match) {\n      re[LAST_INDEX] = re.global ? match.index + match[0].length : lastIndex;\n    }\n    if (NPCG_INCLUDED && match && match.length > 1) {\n      // Fix browsers whose `exec` methods don't consistently return `undefined`\n      // for NPCG, like IE8. NOTE: This doesn' work for /(.?)?/\n      // eslint-disable-next-line no-loop-func\n      nativeReplace.call(match[0], reCopy, function () {\n        for (i = 1; i < arguments.length - 2; i++) {\n          if (arguments[i] === undefined) match[i] = undefined;\n        }\n      });\n    }\n\n    return match;\n  };\n}\n\nmodule.exports = patchedExec;\n","// 7.2.9 SameValue(x, y)\nmodule.exports = Object.is || function is(x, y) {\n  // eslint-disable-next-line no-self-compare\n  return x === y ? x !== 0 || 1 / x === 1 / y : x != x && y != y;\n};\n","// Works with __proto__ only. Old v8 can't work with null proto objects.\n/* eslint-disable no-proto */\nvar isObject = require('./_is-object');\nvar anObject = require('./_an-object');\nvar check = function (O, proto) {\n  anObject(O);\n  if (!isObject(proto) && proto !== null) throw TypeError(proto + \": can't set as prototype!\");\n};\nmodule.exports = {\n  set: Object.setPrototypeOf || ('__proto__' in {} ? // eslint-disable-line\n    function (test, buggy, set) {\n      try {\n        set = require('./_ctx')(Function.call, require('./_object-gopd').f(Object.prototype, '__proto__').set, 2);\n        set(test, []);\n        buggy = !(test instanceof Array);\n      } catch (e) { buggy = true; }\n      return function setPrototypeOf(O, proto) {\n        check(O, proto);\n        if (buggy) O.__proto__ = proto;\n        else set(O, proto);\n        return O;\n      };\n    }({}, false) : undefined),\n  check: check\n};\n","'use strict';\nvar global = require('./_global');\nvar dP = require('./_object-dp');\nvar DESCRIPTORS = require('./_descriptors');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (KEY) {\n  var C = global[KEY];\n  if (DESCRIPTORS && C && !C[SPECIES]) dP.f(C, SPECIES, {\n    configurable: true,\n    get: function () { return this; }\n  });\n};\n","var def = require('./_object-dp').f;\nvar has = require('./_has');\nvar TAG = require('./_wks')('toStringTag');\n\nmodule.exports = function (it, tag, stat) {\n  if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });\n};\n","var shared = require('./_shared')('keys');\nvar uid = require('./_uid');\nmodule.exports = function (key) {\n  return shared[key] || (shared[key] = uid(key));\n};\n","var core = require('./_core');\nvar global = require('./_global');\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || (global[SHARED] = {});\n\n(module.exports = function (key, value) {\n  return store[key] || (store[key] = value !== undefined ? value : {});\n})('versions', []).push({\n  version: core.version,\n  mode: require('./_library') ? 'pure' : 'global',\n  copyright: '© 2020 Denis Pushkarev (zloirock.ru)'\n});\n","// 7.3.20 SpeciesConstructor(O, defaultConstructor)\nvar anObject = require('./_an-object');\nvar aFunction = require('./_a-function');\nvar SPECIES = require('./_wks')('species');\nmodule.exports = function (O, D) {\n  var C = anObject(O).constructor;\n  var S;\n  return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? D : aFunction(S);\n};\n","'use strict';\nvar fails = require('./_fails');\n\nmodule.exports = function (method, arg) {\n  return !!method && fails(function () {\n    // eslint-disable-next-line no-useless-call\n    arg ? method.call(null, function () { /* empty */ }, 1) : method.call(null);\n  });\n};\n","var toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n// true  -> String#at\n// false -> String#codePointAt\nmodule.exports = function (TO_STRING) {\n  return function (that, pos) {\n    var s = String(defined(that));\n    var i = toInteger(pos);\n    var l = s.length;\n    var a, b;\n    if (i < 0 || i >= l) return TO_STRING ? '' : undefined;\n    a = s.charCodeAt(i);\n    return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff\n      ? TO_STRING ? s.charAt(i) : a\n      : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;\n  };\n};\n","// helper for String#{startsWith, endsWith, includes}\nvar isRegExp = require('./_is-regexp');\nvar defined = require('./_defined');\n\nmodule.exports = function (that, searchString, NAME) {\n  if (isRegExp(searchString)) throw TypeError('String#' + NAME + \" doesn't accept regex!\");\n  return String(defined(that));\n};\n","var $export = require('./_export');\nvar fails = require('./_fails');\nvar defined = require('./_defined');\nvar quot = /\"/g;\n// B.2.3.2.1 CreateHTML(string, tag, attribute, value)\nvar createHTML = function (string, tag, attribute, value) {\n  var S = String(defined(string));\n  var p1 = '<' + tag;\n  if (attribute !== '') p1 += ' ' + attribute + '=\"' + String(value).replace(quot, '&quot;') + '\"';\n  return p1 + '>' + S + '</' + tag + '>';\n};\nmodule.exports = function (NAME, exec) {\n  var O = {};\n  O[NAME] = exec(createHTML);\n  $export($export.P + $export.F * fails(function () {\n    var test = ''[NAME]('\"');\n    return test !== test.toLowerCase() || test.split('\"').length > 3;\n  }), 'String', O);\n};\n","// https://github.com/tc39/proposal-string-pad-start-end\nvar toLength = require('./_to-length');\nvar repeat = require('./_string-repeat');\nvar defined = require('./_defined');\n\nmodule.exports = function (that, maxLength, fillString, left) {\n  var S = String(defined(that));\n  var stringLength = S.length;\n  var fillStr = fillString === undefined ? ' ' : String(fillString);\n  var intMaxLength = toLength(maxLength);\n  if (intMaxLength <= stringLength || fillStr == '') return S;\n  var fillLen = intMaxLength - stringLength;\n  var stringFiller = repeat.call(fillStr, Math.ceil(fillLen / fillStr.length));\n  if (stringFiller.length > fillLen) stringFiller = stringFiller.slice(0, fillLen);\n  return left ? stringFiller + S : S + stringFiller;\n};\n","'use strict';\nvar toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n\nmodule.exports = function repeat(count) {\n  var str = String(defined(this));\n  var res = '';\n  var n = toInteger(count);\n  if (n < 0 || n == Infinity) throw RangeError(\"Count can't be negative\");\n  for (;n > 0; (n >>>= 1) && (str += str)) if (n & 1) res += str;\n  return res;\n};\n","var $export = require('./_export');\nvar defined = require('./_defined');\nvar fails = require('./_fails');\nvar spaces = require('./_string-ws');\nvar space = '[' + spaces + ']';\nvar non = '\\u200b\\u0085';\nvar ltrim = RegExp('^' + space + space + '*');\nvar rtrim = RegExp(space + space + '*$');\n\nvar exporter = function (KEY, exec, ALIAS) {\n  var exp = {};\n  var FORCE = fails(function () {\n    return !!spaces[KEY]() || non[KEY]() != non;\n  });\n  var fn = exp[KEY] = FORCE ? exec(trim) : spaces[KEY];\n  if (ALIAS) exp[ALIAS] = fn;\n  $export($export.P + $export.F * FORCE, 'String', exp);\n};\n\n// 1 -> String#trimLeft\n// 2 -> String#trimRight\n// 3 -> String#trim\nvar trim = exporter.trim = function (string, TYPE) {\n  string = String(defined(string));\n  if (TYPE & 1) string = string.replace(ltrim, '');\n  if (TYPE & 2) string = string.replace(rtrim, '');\n  return string;\n};\n\nmodule.exports = exporter;\n","module.exports = '\\x09\\x0A\\x0B\\x0C\\x0D\\x20\\xA0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003' +\n  '\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\\u2029\\uFEFF';\n","var ctx = require('./_ctx');\nvar invoke = require('./_invoke');\nvar html = require('./_html');\nvar cel = require('./_dom-create');\nvar global = require('./_global');\nvar process = global.process;\nvar setTask = global.setImmediate;\nvar clearTask = global.clearImmediate;\nvar MessageChannel = global.MessageChannel;\nvar Dispatch = global.Dispatch;\nvar counter = 0;\nvar queue = {};\nvar ONREADYSTATECHANGE = 'onreadystatechange';\nvar defer, channel, port;\nvar run = function () {\n  var id = +this;\n  // eslint-disable-next-line no-prototype-builtins\n  if (queue.hasOwnProperty(id)) {\n    var fn = queue[id];\n    delete queue[id];\n    fn();\n  }\n};\nvar listener = function (event) {\n  run.call(event.data);\n};\n// Node.js 0.9+ & IE10+ has setImmediate, otherwise:\nif (!setTask || !clearTask) {\n  setTask = function setImmediate(fn) {\n    var args = [];\n    var i = 1;\n    while (arguments.length > i) args.push(arguments[i++]);\n    queue[++counter] = function () {\n      // eslint-disable-next-line no-new-func\n      invoke(typeof fn == 'function' ? fn : Function(fn), args);\n    };\n    defer(counter);\n    return counter;\n  };\n  clearTask = function clearImmediate(id) {\n    delete queue[id];\n  };\n  // Node.js 0.8-\n  if (require('./_cof')(process) == 'process') {\n    defer = function (id) {\n      process.nextTick(ctx(run, id, 1));\n    };\n  // Sphere (JS game engine) Dispatch API\n  } else if (Dispatch && Dispatch.now) {\n    defer = function (id) {\n      Dispatch.now(ctx(run, id, 1));\n    };\n  // Browsers with MessageChannel, includes WebWorkers\n  } else if (MessageChannel) {\n    channel = new MessageChannel();\n    port = channel.port2;\n    channel.port1.onmessage = listener;\n    defer = ctx(port.postMessage, port, 1);\n  // Browsers with postMessage, skip WebWorkers\n  // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'\n  } else if (global.addEventListener && typeof postMessage == 'function' && !global.importScripts) {\n    defer = function (id) {\n      global.postMessage(id + '', '*');\n    };\n    global.addEventListener('message', listener, false);\n  // IE8-\n  } else if (ONREADYSTATECHANGE in cel('script')) {\n    defer = function (id) {\n      html.appendChild(cel('script'))[ONREADYSTATECHANGE] = function () {\n        html.removeChild(this);\n        run.call(id);\n      };\n    };\n  // Rest old browsers\n  } else {\n    defer = function (id) {\n      setTimeout(ctx(run, id, 1), 0);\n    };\n  }\n}\nmodule.exports = {\n  set: setTask,\n  clear: clearTask\n};\n","var toInteger = require('./_to-integer');\nvar max = Math.max;\nvar min = Math.min;\nmodule.exports = function (index, length) {\n  index = toInteger(index);\n  return index < 0 ? max(index + length, 0) : min(index, length);\n};\n","// https://tc39.github.io/ecma262/#sec-toindex\nvar toInteger = require('./_to-integer');\nvar toLength = require('./_to-length');\nmodule.exports = function (it) {\n  if (it === undefined) return 0;\n  var number = toInteger(it);\n  var length = toLength(number);\n  if (number !== length) throw RangeError('Wrong length!');\n  return length;\n};\n","// 7.1.4 ToInteger\nvar ceil = Math.ceil;\nvar floor = Math.floor;\nmodule.exports = function (it) {\n  return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n};\n","// to indexed object, toObject with fallback for non-array-like ES3 strings\nvar IObject = require('./_iobject');\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n  return IObject(defined(it));\n};\n","// 7.1.15 ToLength\nvar toInteger = require('./_to-integer');\nvar min = Math.min;\nmodule.exports = function (it) {\n  return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n};\n","// 7.1.13 ToObject(argument)\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n  return Object(defined(it));\n};\n","'use strict';\nif (require('./_descriptors')) {\n  var LIBRARY = require('./_library');\n  var global = require('./_global');\n  var fails = require('./_fails');\n  var $export = require('./_export');\n  var $typed = require('./_typed');\n  var $buffer = require('./_typed-buffer');\n  var ctx = require('./_ctx');\n  var anInstance = require('./_an-instance');\n  var propertyDesc = require('./_property-desc');\n  var hide = require('./_hide');\n  var redefineAll = require('./_redefine-all');\n  var toInteger = require('./_to-integer');\n  var toLength = require('./_to-length');\n  var toIndex = require('./_to-index');\n  var toAbsoluteIndex = require('./_to-absolute-index');\n  var toPrimitive = require('./_to-primitive');\n  var has = require('./_has');\n  var classof = require('./_classof');\n  var isObject = require('./_is-object');\n  var toObject = require('./_to-object');\n  var isArrayIter = require('./_is-array-iter');\n  var create = require('./_object-create');\n  var getPrototypeOf = require('./_object-gpo');\n  var gOPN = require('./_object-gopn').f;\n  var getIterFn = require('./core.get-iterator-method');\n  var uid = require('./_uid');\n  var wks = require('./_wks');\n  var createArrayMethod = require('./_array-methods');\n  var createArrayIncludes = require('./_array-includes');\n  var speciesConstructor = require('./_species-constructor');\n  var ArrayIterators = require('./es6.array.iterator');\n  var Iterators = require('./_iterators');\n  var $iterDetect = require('./_iter-detect');\n  var setSpecies = require('./_set-species');\n  var arrayFill = require('./_array-fill');\n  var arrayCopyWithin = require('./_array-copy-within');\n  var $DP = require('./_object-dp');\n  var $GOPD = require('./_object-gopd');\n  var dP = $DP.f;\n  var gOPD = $GOPD.f;\n  var RangeError = global.RangeError;\n  var TypeError = global.TypeError;\n  var Uint8Array = global.Uint8Array;\n  var ARRAY_BUFFER = 'ArrayBuffer';\n  var SHARED_BUFFER = 'Shared' + ARRAY_BUFFER;\n  var BYTES_PER_ELEMENT = 'BYTES_PER_ELEMENT';\n  var PROTOTYPE = 'prototype';\n  var ArrayProto = Array[PROTOTYPE];\n  var $ArrayBuffer = $buffer.ArrayBuffer;\n  var $DataView = $buffer.DataView;\n  var arrayForEach = createArrayMethod(0);\n  var arrayFilter = createArrayMethod(2);\n  var arraySome = createArrayMethod(3);\n  var arrayEvery = createArrayMethod(4);\n  var arrayFind = createArrayMethod(5);\n  var arrayFindIndex = createArrayMethod(6);\n  var arrayIncludes = createArrayIncludes(true);\n  var arrayIndexOf = createArrayIncludes(false);\n  var arrayValues = ArrayIterators.values;\n  var arrayKeys = ArrayIterators.keys;\n  var arrayEntries = ArrayIterators.entries;\n  var arrayLastIndexOf = ArrayProto.lastIndexOf;\n  var arrayReduce = ArrayProto.reduce;\n  var arrayReduceRight = ArrayProto.reduceRight;\n  var arrayJoin = ArrayProto.join;\n  var arraySort = ArrayProto.sort;\n  var arraySlice = ArrayProto.slice;\n  var arrayToString = ArrayProto.toString;\n  var arrayToLocaleString = ArrayProto.toLocaleString;\n  var ITERATOR = wks('iterator');\n  var TAG = wks('toStringTag');\n  var TYPED_CONSTRUCTOR = uid('typed_constructor');\n  var DEF_CONSTRUCTOR = uid('def_constructor');\n  var ALL_CONSTRUCTORS = $typed.CONSTR;\n  var TYPED_ARRAY = $typed.TYPED;\n  var VIEW = $typed.VIEW;\n  var WRONG_LENGTH = 'Wrong length!';\n\n  var $map = createArrayMethod(1, function (O, length) {\n    return allocate(speciesConstructor(O, O[DEF_CONSTRUCTOR]), length);\n  });\n\n  var LITTLE_ENDIAN = fails(function () {\n    // eslint-disable-next-line no-undef\n    return new Uint8Array(new Uint16Array([1]).buffer)[0] === 1;\n  });\n\n  var FORCED_SET = !!Uint8Array && !!Uint8Array[PROTOTYPE].set && fails(function () {\n    new Uint8Array(1).set({});\n  });\n\n  var toOffset = function (it, BYTES) {\n    var offset = toInteger(it);\n    if (offset < 0 || offset % BYTES) throw RangeError('Wrong offset!');\n    return offset;\n  };\n\n  var validate = function (it) {\n    if (isObject(it) && TYPED_ARRAY in it) return it;\n    throw TypeError(it + ' is not a typed array!');\n  };\n\n  var allocate = function (C, length) {\n    if (!(isObject(C) && TYPED_CONSTRUCTOR in C)) {\n      throw TypeError('It is not a typed array constructor!');\n    } return new C(length);\n  };\n\n  var speciesFromList = function (O, list) {\n    return fromList(speciesConstructor(O, O[DEF_CONSTRUCTOR]), list);\n  };\n\n  var fromList = function (C, list) {\n    var index = 0;\n    var length = list.length;\n    var result = allocate(C, length);\n    while (length > index) result[index] = list[index++];\n    return result;\n  };\n\n  var addGetter = function (it, key, internal) {\n    dP(it, key, { get: function () { return this._d[internal]; } });\n  };\n\n  var $from = function from(source /* , mapfn, thisArg */) {\n    var O = toObject(source);\n    var aLen = arguments.length;\n    var mapfn = aLen > 1 ? arguments[1] : undefined;\n    var mapping = mapfn !== undefined;\n    var iterFn = getIterFn(O);\n    var i, length, values, result, step, iterator;\n    if (iterFn != undefined && !isArrayIter(iterFn)) {\n      for (iterator = iterFn.call(O), values = [], i = 0; !(step = iterator.next()).done; i++) {\n        values.push(step.value);\n      } O = values;\n    }\n    if (mapping && aLen > 2) mapfn = ctx(mapfn, arguments[2], 2);\n    for (i = 0, length = toLength(O.length), result = allocate(this, length); length > i; i++) {\n      result[i] = mapping ? mapfn(O[i], i) : O[i];\n    }\n    return result;\n  };\n\n  var $of = function of(/* ...items */) {\n    var index = 0;\n    var length = arguments.length;\n    var result = allocate(this, length);\n    while (length > index) result[index] = arguments[index++];\n    return result;\n  };\n\n  // iOS Safari 6.x fails here\n  var TO_LOCALE_BUG = !!Uint8Array && fails(function () { arrayToLocaleString.call(new Uint8Array(1)); });\n\n  var $toLocaleString = function toLocaleString() {\n    return arrayToLocaleString.apply(TO_LOCALE_BUG ? arraySlice.call(validate(this)) : validate(this), arguments);\n  };\n\n  var proto = {\n    copyWithin: function copyWithin(target, start /* , end */) {\n      return arrayCopyWithin.call(validate(this), target, start, arguments.length > 2 ? arguments[2] : undefined);\n    },\n    every: function every(callbackfn /* , thisArg */) {\n      return arrayEvery(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n    },\n    fill: function fill(value /* , start, end */) { // eslint-disable-line no-unused-vars\n      return arrayFill.apply(validate(this), arguments);\n    },\n    filter: function filter(callbackfn /* , thisArg */) {\n      return speciesFromList(this, arrayFilter(validate(this), callbackfn,\n        arguments.length > 1 ? arguments[1] : undefined));\n    },\n    find: function find(predicate /* , thisArg */) {\n      return arrayFind(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n    },\n    findIndex: function findIndex(predicate /* , thisArg */) {\n      return arrayFindIndex(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n    },\n    forEach: function forEach(callbackfn /* , thisArg */) {\n      arrayForEach(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n    },\n    indexOf: function indexOf(searchElement /* , fromIndex */) {\n      return arrayIndexOf(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n    },\n    includes: function includes(searchElement /* , fromIndex */) {\n      return arrayIncludes(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n    },\n    join: function join(separator) { // eslint-disable-line no-unused-vars\n      return arrayJoin.apply(validate(this), arguments);\n    },\n    lastIndexOf: function lastIndexOf(searchElement /* , fromIndex */) { // eslint-disable-line no-unused-vars\n      return arrayLastIndexOf.apply(validate(this), arguments);\n    },\n    map: function map(mapfn /* , thisArg */) {\n      return $map(validate(this), mapfn, arguments.length > 1 ? arguments[1] : undefined);\n    },\n    reduce: function reduce(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars\n      return arrayReduce.apply(validate(this), arguments);\n    },\n    reduceRight: function reduceRight(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars\n      return arrayReduceRight.apply(validate(this), arguments);\n    },\n    reverse: function reverse() {\n      var that = this;\n      var length = validate(that).length;\n      var middle = Math.floor(length / 2);\n      var index = 0;\n      var value;\n      while (index < middle) {\n        value = that[index];\n        that[index++] = that[--length];\n        that[length] = value;\n      } return that;\n    },\n    some: function some(callbackfn /* , thisArg */) {\n      return arraySome(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n    },\n    sort: function sort(comparefn) {\n      return arraySort.call(validate(this), comparefn);\n    },\n    subarray: function subarray(begin, end) {\n      var O = validate(this);\n      var length = O.length;\n      var $begin = toAbsoluteIndex(begin, length);\n      return new (speciesConstructor(O, O[DEF_CONSTRUCTOR]))(\n        O.buffer,\n        O.byteOffset + $begin * O.BYTES_PER_ELEMENT,\n        toLength((end === undefined ? length : toAbsoluteIndex(end, length)) - $begin)\n      );\n    }\n  };\n\n  var $slice = function slice(start, end) {\n    return speciesFromList(this, arraySlice.call(validate(this), start, end));\n  };\n\n  var $set = function set(arrayLike /* , offset */) {\n    validate(this);\n    var offset = toOffset(arguments[1], 1);\n    var length = this.length;\n    var src = toObject(arrayLike);\n    var len = toLength(src.length);\n    var index = 0;\n    if (len + offset > length) throw RangeError(WRONG_LENGTH);\n    while (index < len) this[offset + index] = src[index++];\n  };\n\n  var $iterators = {\n    entries: function entries() {\n      return arrayEntries.call(validate(this));\n    },\n    keys: function keys() {\n      return arrayKeys.call(validate(this));\n    },\n    values: function values() {\n      return arrayValues.call(validate(this));\n    }\n  };\n\n  var isTAIndex = function (target, key) {\n    return isObject(target)\n      && target[TYPED_ARRAY]\n      && typeof key != 'symbol'\n      && key in target\n      && String(+key) == String(key);\n  };\n  var $getDesc = function getOwnPropertyDescriptor(target, key) {\n    return isTAIndex(target, key = toPrimitive(key, true))\n      ? propertyDesc(2, target[key])\n      : gOPD(target, key);\n  };\n  var $setDesc = function defineProperty(target, key, desc) {\n    if (isTAIndex(target, key = toPrimitive(key, true))\n      && isObject(desc)\n      && has(desc, 'value')\n      && !has(desc, 'get')\n      && !has(desc, 'set')\n      // TODO: add validation descriptor w/o calling accessors\n      && !desc.configurable\n      && (!has(desc, 'writable') || desc.writable)\n      && (!has(desc, 'enumerable') || desc.enumerable)\n    ) {\n      target[key] = desc.value;\n      return target;\n    } return dP(target, key, desc);\n  };\n\n  if (!ALL_CONSTRUCTORS) {\n    $GOPD.f = $getDesc;\n    $DP.f = $setDesc;\n  }\n\n  $export($export.S + $export.F * !ALL_CONSTRUCTORS, 'Object', {\n    getOwnPropertyDescriptor: $getDesc,\n    defineProperty: $setDesc\n  });\n\n  if (fails(function () { arrayToString.call({}); })) {\n    arrayToString = arrayToLocaleString = function toString() {\n      return arrayJoin.call(this);\n    };\n  }\n\n  var $TypedArrayPrototype$ = redefineAll({}, proto);\n  redefineAll($TypedArrayPrototype$, $iterators);\n  hide($TypedArrayPrototype$, ITERATOR, $iterators.values);\n  redefineAll($TypedArrayPrototype$, {\n    slice: $slice,\n    set: $set,\n    constructor: function () { /* noop */ },\n    toString: arrayToString,\n    toLocaleString: $toLocaleString\n  });\n  addGetter($TypedArrayPrototype$, 'buffer', 'b');\n  addGetter($TypedArrayPrototype$, 'byteOffset', 'o');\n  addGetter($TypedArrayPrototype$, 'byteLength', 'l');\n  addGetter($TypedArrayPrototype$, 'length', 'e');\n  dP($TypedArrayPrototype$, TAG, {\n    get: function () { return this[TYPED_ARRAY]; }\n  });\n\n  // eslint-disable-next-line max-statements\n  module.exports = function (KEY, BYTES, wrapper, CLAMPED) {\n    CLAMPED = !!CLAMPED;\n    var NAME = KEY + (CLAMPED ? 'Clamped' : '') + 'Array';\n    var GETTER = 'get' + KEY;\n    var SETTER = 'set' + KEY;\n    var TypedArray = global[NAME];\n    var Base = TypedArray || {};\n    var TAC = TypedArray && getPrototypeOf(TypedArray);\n    var FORCED = !TypedArray || !$typed.ABV;\n    var O = {};\n    var TypedArrayPrototype = TypedArray && TypedArray[PROTOTYPE];\n    var getter = function (that, index) {\n      var data = that._d;\n      return data.v[GETTER](index * BYTES + data.o, LITTLE_ENDIAN);\n    };\n    var setter = function (that, index, value) {\n      var data = that._d;\n      if (CLAMPED) value = (value = Math.round(value)) < 0 ? 0 : value > 0xff ? 0xff : value & 0xff;\n      data.v[SETTER](index * BYTES + data.o, value, LITTLE_ENDIAN);\n    };\n    var addElement = function (that, index) {\n      dP(that, index, {\n        get: function () {\n          return getter(this, index);\n        },\n        set: function (value) {\n          return setter(this, index, value);\n        },\n        enumerable: true\n      });\n    };\n    if (FORCED) {\n      TypedArray = wrapper(function (that, data, $offset, $length) {\n        anInstance(that, TypedArray, NAME, '_d');\n        var index = 0;\n        var offset = 0;\n        var buffer, byteLength, length, klass;\n        if (!isObject(data)) {\n          length = toIndex(data);\n          byteLength = length * BYTES;\n          buffer = new $ArrayBuffer(byteLength);\n        } else if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {\n          buffer = data;\n          offset = toOffset($offset, BYTES);\n          var $len = data.byteLength;\n          if ($length === undefined) {\n            if ($len % BYTES) throw RangeError(WRONG_LENGTH);\n            byteLength = $len - offset;\n            if (byteLength < 0) throw RangeError(WRONG_LENGTH);\n          } else {\n            byteLength = toLength($length) * BYTES;\n            if (byteLength + offset > $len) throw RangeError(WRONG_LENGTH);\n          }\n          length = byteLength / BYTES;\n        } else if (TYPED_ARRAY in data) {\n          return fromList(TypedArray, data);\n        } else {\n          return $from.call(TypedArray, data);\n        }\n        hide(that, '_d', {\n          b: buffer,\n          o: offset,\n          l: byteLength,\n          e: length,\n          v: new $DataView(buffer)\n        });\n        while (index < length) addElement(that, index++);\n      });\n      TypedArrayPrototype = TypedArray[PROTOTYPE] = create($TypedArrayPrototype$);\n      hide(TypedArrayPrototype, 'constructor', TypedArray);\n    } else if (!fails(function () {\n      TypedArray(1);\n    }) || !fails(function () {\n      new TypedArray(-1); // eslint-disable-line no-new\n    }) || !$iterDetect(function (iter) {\n      new TypedArray(); // eslint-disable-line no-new\n      new TypedArray(null); // eslint-disable-line no-new\n      new TypedArray(1.5); // eslint-disable-line no-new\n      new TypedArray(iter); // eslint-disable-line no-new\n    }, true)) {\n      TypedArray = wrapper(function (that, data, $offset, $length) {\n        anInstance(that, TypedArray, NAME);\n        var klass;\n        // `ws` module bug, temporarily remove validation length for Uint8Array\n        // https://github.com/websockets/ws/pull/645\n        if (!isObject(data)) return new Base(toIndex(data));\n        if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {\n          return $length !== undefined\n            ? new Base(data, toOffset($offset, BYTES), $length)\n            : $offset !== undefined\n              ? new Base(data, toOffset($offset, BYTES))\n              : new Base(data);\n        }\n        if (TYPED_ARRAY in data) return fromList(TypedArray, data);\n        return $from.call(TypedArray, data);\n      });\n      arrayForEach(TAC !== Function.prototype ? gOPN(Base).concat(gOPN(TAC)) : gOPN(Base), function (key) {\n        if (!(key in TypedArray)) hide(TypedArray, key, Base[key]);\n      });\n      TypedArray[PROTOTYPE] = TypedArrayPrototype;\n      if (!LIBRARY) TypedArrayPrototype.constructor = TypedArray;\n    }\n    var $nativeIterator = TypedArrayPrototype[ITERATOR];\n    var CORRECT_ITER_NAME = !!$nativeIterator\n      && ($nativeIterator.name == 'values' || $nativeIterator.name == undefined);\n    var $iterator = $iterators.values;\n    hide(TypedArray, TYPED_CONSTRUCTOR, true);\n    hide(TypedArrayPrototype, TYPED_ARRAY, NAME);\n    hide(TypedArrayPrototype, VIEW, true);\n    hide(TypedArrayPrototype, DEF_CONSTRUCTOR, TypedArray);\n\n    if (CLAMPED ? new TypedArray(1)[TAG] != NAME : !(TAG in TypedArrayPrototype)) {\n      dP(TypedArrayPrototype, TAG, {\n        get: function () { return NAME; }\n      });\n    }\n\n    O[NAME] = TypedArray;\n\n    $export($export.G + $export.W + $export.F * (TypedArray != Base), O);\n\n    $export($export.S, NAME, {\n      BYTES_PER_ELEMENT: BYTES\n    });\n\n    $export($export.S + $export.F * fails(function () { Base.of.call(TypedArray, 1); }), NAME, {\n      from: $from,\n      of: $of\n    });\n\n    if (!(BYTES_PER_ELEMENT in TypedArrayPrototype)) hide(TypedArrayPrototype, BYTES_PER_ELEMENT, BYTES);\n\n    $export($export.P, NAME, proto);\n\n    setSpecies(NAME);\n\n    $export($export.P + $export.F * FORCED_SET, NAME, { set: $set });\n\n    $export($export.P + $export.F * !CORRECT_ITER_NAME, NAME, $iterators);\n\n    if (!LIBRARY && TypedArrayPrototype.toString != arrayToString) TypedArrayPrototype.toString = arrayToString;\n\n    $export($export.P + $export.F * fails(function () {\n      new TypedArray(1).slice();\n    }), NAME, { slice: $slice });\n\n    $export($export.P + $export.F * (fails(function () {\n      return [1, 2].toLocaleString() != new TypedArray([1, 2]).toLocaleString();\n    }) || !fails(function () {\n      TypedArrayPrototype.toLocaleString.call([1, 2]);\n    })), NAME, { toLocaleString: $toLocaleString });\n\n    Iterators[NAME] = CORRECT_ITER_NAME ? $nativeIterator : $iterator;\n    if (!LIBRARY && !CORRECT_ITER_NAME) hide(TypedArrayPrototype, ITERATOR, $iterator);\n  };\n} else module.exports = function () { /* empty */ };\n","'use strict';\nvar global = require('./_global');\nvar DESCRIPTORS = require('./_descriptors');\nvar LIBRARY = require('./_library');\nvar $typed = require('./_typed');\nvar hide = require('./_hide');\nvar redefineAll = require('./_redefine-all');\nvar fails = require('./_fails');\nvar anInstance = require('./_an-instance');\nvar toInteger = require('./_to-integer');\nvar toLength = require('./_to-length');\nvar toIndex = require('./_to-index');\nvar gOPN = require('./_object-gopn').f;\nvar dP = require('./_object-dp').f;\nvar arrayFill = require('./_array-fill');\nvar setToStringTag = require('./_set-to-string-tag');\nvar ARRAY_BUFFER = 'ArrayBuffer';\nvar DATA_VIEW = 'DataView';\nvar PROTOTYPE = 'prototype';\nvar WRONG_LENGTH = 'Wrong length!';\nvar WRONG_INDEX = 'Wrong index!';\nvar $ArrayBuffer = global[ARRAY_BUFFER];\nvar $DataView = global[DATA_VIEW];\nvar Math = global.Math;\nvar RangeError = global.RangeError;\n// eslint-disable-next-line no-shadow-restricted-names\nvar Infinity = global.Infinity;\nvar BaseBuffer = $ArrayBuffer;\nvar abs = Math.abs;\nvar pow = Math.pow;\nvar floor = Math.floor;\nvar log = Math.log;\nvar LN2 = Math.LN2;\nvar BUFFER = 'buffer';\nvar BYTE_LENGTH = 'byteLength';\nvar BYTE_OFFSET = 'byteOffset';\nvar $BUFFER = DESCRIPTORS ? '_b' : BUFFER;\nvar $LENGTH = DESCRIPTORS ? '_l' : BYTE_LENGTH;\nvar $OFFSET = DESCRIPTORS ? '_o' : BYTE_OFFSET;\n\n// IEEE754 conversions based on https://github.com/feross/ieee754\nfunction packIEEE754(value, mLen, nBytes) {\n  var buffer = new Array(nBytes);\n  var eLen = nBytes * 8 - mLen - 1;\n  var eMax = (1 << eLen) - 1;\n  var eBias = eMax >> 1;\n  var rt = mLen === 23 ? pow(2, -24) - pow(2, -77) : 0;\n  var i = 0;\n  var s = value < 0 || value === 0 && 1 / value < 0 ? 1 : 0;\n  var e, m, c;\n  value = abs(value);\n  // eslint-disable-next-line no-self-compare\n  if (value != value || value === Infinity) {\n    // eslint-disable-next-line no-self-compare\n    m = value != value ? 1 : 0;\n    e = eMax;\n  } else {\n    e = floor(log(value) / LN2);\n    if (value * (c = pow(2, -e)) < 1) {\n      e--;\n      c *= 2;\n    }\n    if (e + eBias >= 1) {\n      value += rt / c;\n    } else {\n      value += rt * pow(2, 1 - eBias);\n    }\n    if (value * c >= 2) {\n      e++;\n      c /= 2;\n    }\n    if (e + eBias >= eMax) {\n      m = 0;\n      e = eMax;\n    } else if (e + eBias >= 1) {\n      m = (value * c - 1) * pow(2, mLen);\n      e = e + eBias;\n    } else {\n      m = value * pow(2, eBias - 1) * pow(2, mLen);\n      e = 0;\n    }\n  }\n  for (; mLen >= 8; buffer[i++] = m & 255, m /= 256, mLen -= 8);\n  e = e << mLen | m;\n  eLen += mLen;\n  for (; eLen > 0; buffer[i++] = e & 255, e /= 256, eLen -= 8);\n  buffer[--i] |= s * 128;\n  return buffer;\n}\nfunction unpackIEEE754(buffer, mLen, nBytes) {\n  var eLen = nBytes * 8 - mLen - 1;\n  var eMax = (1 << eLen) - 1;\n  var eBias = eMax >> 1;\n  var nBits = eLen - 7;\n  var i = nBytes - 1;\n  var s = buffer[i--];\n  var e = s & 127;\n  var m;\n  s >>= 7;\n  for (; nBits > 0; e = e * 256 + buffer[i], i--, nBits -= 8);\n  m = e & (1 << -nBits) - 1;\n  e >>= -nBits;\n  nBits += mLen;\n  for (; nBits > 0; m = m * 256 + buffer[i], i--, nBits -= 8);\n  if (e === 0) {\n    e = 1 - eBias;\n  } else if (e === eMax) {\n    return m ? NaN : s ? -Infinity : Infinity;\n  } else {\n    m = m + pow(2, mLen);\n    e = e - eBias;\n  } return (s ? -1 : 1) * m * pow(2, e - mLen);\n}\n\nfunction unpackI32(bytes) {\n  return bytes[3] << 24 | bytes[2] << 16 | bytes[1] << 8 | bytes[0];\n}\nfunction packI8(it) {\n  return [it & 0xff];\n}\nfunction packI16(it) {\n  return [it & 0xff, it >> 8 & 0xff];\n}\nfunction packI32(it) {\n  return [it & 0xff, it >> 8 & 0xff, it >> 16 & 0xff, it >> 24 & 0xff];\n}\nfunction packF64(it) {\n  return packIEEE754(it, 52, 8);\n}\nfunction packF32(it) {\n  return packIEEE754(it, 23, 4);\n}\n\nfunction addGetter(C, key, internal) {\n  dP(C[PROTOTYPE], key, { get: function () { return this[internal]; } });\n}\n\nfunction get(view, bytes, index, isLittleEndian) {\n  var numIndex = +index;\n  var intIndex = toIndex(numIndex);\n  if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);\n  var store = view[$BUFFER]._b;\n  var start = intIndex + view[$OFFSET];\n  var pack = store.slice(start, start + bytes);\n  return isLittleEndian ? pack : pack.reverse();\n}\nfunction set(view, bytes, index, conversion, value, isLittleEndian) {\n  var numIndex = +index;\n  var intIndex = toIndex(numIndex);\n  if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);\n  var store = view[$BUFFER]._b;\n  var start = intIndex + view[$OFFSET];\n  var pack = conversion(+value);\n  for (var i = 0; i < bytes; i++) store[start + i] = pack[isLittleEndian ? i : bytes - i - 1];\n}\n\nif (!$typed.ABV) {\n  $ArrayBuffer = function ArrayBuffer(length) {\n    anInstance(this, $ArrayBuffer, ARRAY_BUFFER);\n    var byteLength = toIndex(length);\n    this._b = arrayFill.call(new Array(byteLength), 0);\n    this[$LENGTH] = byteLength;\n  };\n\n  $DataView = function DataView(buffer, byteOffset, byteLength) {\n    anInstance(this, $DataView, DATA_VIEW);\n    anInstance(buffer, $ArrayBuffer, DATA_VIEW);\n    var bufferLength = buffer[$LENGTH];\n    var offset = toInteger(byteOffset);\n    if (offset < 0 || offset > bufferLength) throw RangeError('Wrong offset!');\n    byteLength = byteLength === undefined ? bufferLength - offset : toLength(byteLength);\n    if (offset + byteLength > bufferLength) throw RangeError(WRONG_LENGTH);\n    this[$BUFFER] = buffer;\n    this[$OFFSET] = offset;\n    this[$LENGTH] = byteLength;\n  };\n\n  if (DESCRIPTORS) {\n    addGetter($ArrayBuffer, BYTE_LENGTH, '_l');\n    addGetter($DataView, BUFFER, '_b');\n    addGetter($DataView, BYTE_LENGTH, '_l');\n    addGetter($DataView, BYTE_OFFSET, '_o');\n  }\n\n  redefineAll($DataView[PROTOTYPE], {\n    getInt8: function getInt8(byteOffset) {\n      return get(this, 1, byteOffset)[0] << 24 >> 24;\n    },\n    getUint8: function getUint8(byteOffset) {\n      return get(this, 1, byteOffset)[0];\n    },\n    getInt16: function getInt16(byteOffset /* , littleEndian */) {\n      var bytes = get(this, 2, byteOffset, arguments[1]);\n      return (bytes[1] << 8 | bytes[0]) << 16 >> 16;\n    },\n    getUint16: function getUint16(byteOffset /* , littleEndian */) {\n      var bytes = get(this, 2, byteOffset, arguments[1]);\n      return bytes[1] << 8 | bytes[0];\n    },\n    getInt32: function getInt32(byteOffset /* , littleEndian */) {\n      return unpackI32(get(this, 4, byteOffset, arguments[1]));\n    },\n    getUint32: function getUint32(byteOffset /* , littleEndian */) {\n      return unpackI32(get(this, 4, byteOffset, arguments[1])) >>> 0;\n    },\n    getFloat32: function getFloat32(byteOffset /* , littleEndian */) {\n      return unpackIEEE754(get(this, 4, byteOffset, arguments[1]), 23, 4);\n    },\n    getFloat64: function getFloat64(byteOffset /* , littleEndian */) {\n      return unpackIEEE754(get(this, 8, byteOffset, arguments[1]), 52, 8);\n    },\n    setInt8: function setInt8(byteOffset, value) {\n      set(this, 1, byteOffset, packI8, value);\n    },\n    setUint8: function setUint8(byteOffset, value) {\n      set(this, 1, byteOffset, packI8, value);\n    },\n    setInt16: function setInt16(byteOffset, value /* , littleEndian */) {\n      set(this, 2, byteOffset, packI16, value, arguments[2]);\n    },\n    setUint16: function setUint16(byteOffset, value /* , littleEndian */) {\n      set(this, 2, byteOffset, packI16, value, arguments[2]);\n    },\n    setInt32: function setInt32(byteOffset, value /* , littleEndian */) {\n      set(this, 4, byteOffset, packI32, value, arguments[2]);\n    },\n    setUint32: function setUint32(byteOffset, value /* , littleEndian */) {\n      set(this, 4, byteOffset, packI32, value, arguments[2]);\n    },\n    setFloat32: function setFloat32(byteOffset, value /* , littleEndian */) {\n      set(this, 4, byteOffset, packF32, value, arguments[2]);\n    },\n    setFloat64: function setFloat64(byteOffset, value /* , littleEndian */) {\n      set(this, 8, byteOffset, packF64, value, arguments[2]);\n    }\n  });\n} else {\n  if (!fails(function () {\n    $ArrayBuffer(1);\n  }) || !fails(function () {\n    new $ArrayBuffer(-1); // eslint-disable-line no-new\n  }) || fails(function () {\n    new $ArrayBuffer(); // eslint-disable-line no-new\n    new $ArrayBuffer(1.5); // eslint-disable-line no-new\n    new $ArrayBuffer(NaN); // eslint-disable-line no-new\n    return $ArrayBuffer.name != ARRAY_BUFFER;\n  })) {\n    $ArrayBuffer = function ArrayBuffer(length) {\n      anInstance(this, $ArrayBuffer);\n      return new BaseBuffer(toIndex(length));\n    };\n    var ArrayBufferProto = $ArrayBuffer[PROTOTYPE] = BaseBuffer[PROTOTYPE];\n    for (var keys = gOPN(BaseBuffer), j = 0, key; keys.length > j;) {\n      if (!((key = keys[j++]) in $ArrayBuffer)) hide($ArrayBuffer, key, BaseBuffer[key]);\n    }\n    if (!LIBRARY) ArrayBufferProto.constructor = $ArrayBuffer;\n  }\n  // iOS Safari 7.x bug\n  var view = new $DataView(new $ArrayBuffer(2));\n  var $setInt8 = $DataView[PROTOTYPE].setInt8;\n  view.setInt8(0, 2147483648);\n  view.setInt8(1, 2147483649);\n  if (view.getInt8(0) || !view.getInt8(1)) redefineAll($DataView[PROTOTYPE], {\n    setInt8: function setInt8(byteOffset, value) {\n      $setInt8.call(this, byteOffset, value << 24 >> 24);\n    },\n    setUint8: function setUint8(byteOffset, value) {\n      $setInt8.call(this, byteOffset, value << 24 >> 24);\n    }\n  }, true);\n}\nsetToStringTag($ArrayBuffer, ARRAY_BUFFER);\nsetToStringTag($DataView, DATA_VIEW);\nhide($DataView[PROTOTYPE], $typed.VIEW, true);\nexports[ARRAY_BUFFER] = $ArrayBuffer;\nexports[DATA_VIEW] = $DataView;\n","var global = require('./_global');\nvar hide = require('./_hide');\nvar uid = require('./_uid');\nvar TYPED = uid('typed_array');\nvar VIEW = uid('view');\nvar ABV = !!(global.ArrayBuffer && global.DataView);\nvar CONSTR = ABV;\nvar i = 0;\nvar l = 9;\nvar Typed;\n\nvar TypedArrayConstructors = (\n  'Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array'\n).split(',');\n\nwhile (i < l) {\n  if (Typed = global[TypedArrayConstructors[i++]]) {\n    hide(Typed.prototype, TYPED, true);\n    hide(Typed.prototype, VIEW, true);\n  } else CONSTR = false;\n}\n\nmodule.exports = {\n  ABV: ABV,\n  CONSTR: CONSTR,\n  TYPED: TYPED,\n  VIEW: VIEW\n};\n","var id = 0;\nvar px = Math.random();\nmodule.exports = function (key) {\n  return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n};\n","var global = require('./_global');\nvar navigator = global.navigator;\n\nmodule.exports = navigator && navigator.userAgent || '';\n","var isObject = require('./_is-object');\nmodule.exports = function (it, TYPE) {\n  if (!isObject(it) || it._t !== TYPE) throw TypeError('Incompatible receiver, ' + TYPE + ' required!');\n  return it;\n};\n","var global = require('./_global');\nvar core = require('./_core');\nvar LIBRARY = require('./_library');\nvar wksExt = require('./_wks-ext');\nvar defineProperty = require('./_object-dp').f;\nmodule.exports = function (name) {\n  var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global.Symbol || {});\n  if (name.charAt(0) != '_' && !(name in $Symbol)) defineProperty($Symbol, name, { value: wksExt.f(name) });\n};\n","exports.f = require('./_wks');\n","var store = require('./_shared')('wks');\nvar uid = require('./_uid');\nvar Symbol = require('./_global').Symbol;\nvar USE_SYMBOL = typeof Symbol == 'function';\n\nvar $exports = module.exports = function (name) {\n  return store[name] || (store[name] =\n    USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));\n};\n\n$exports.store = store;\n","var classof = require('./_classof');\nvar ITERATOR = require('./_wks')('iterator');\nvar Iterators = require('./_iterators');\nmodule.exports = require('./_core').getIteratorMethod = function (it) {\n  if (it != undefined) return it[ITERATOR]\n    || it['@@iterator']\n    || Iterators[classof(it)];\n};\n","// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\nvar $export = require('./_export');\n\n$export($export.P, 'Array', { copyWithin: require('./_array-copy-within') });\n\nrequire('./_add-to-unscopables')('copyWithin');\n","'use strict';\nvar $export = require('./_export');\nvar $every = require('./_array-methods')(4);\n\n$export($export.P + $export.F * !require('./_strict-method')([].every, true), 'Array', {\n  // 22.1.3.5 / 15.4.4.16 Array.prototype.every(callbackfn [, thisArg])\n  every: function every(callbackfn /* , thisArg */) {\n    return $every(this, callbackfn, arguments[1]);\n  }\n});\n","// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\nvar $export = require('./_export');\n\n$export($export.P, 'Array', { fill: require('./_array-fill') });\n\nrequire('./_add-to-unscopables')('fill');\n","'use strict';\nvar $export = require('./_export');\nvar $filter = require('./_array-methods')(2);\n\n$export($export.P + $export.F * !require('./_strict-method')([].filter, true), 'Array', {\n  // 22.1.3.7 / 15.4.4.20 Array.prototype.filter(callbackfn [, thisArg])\n  filter: function filter(callbackfn /* , thisArg */) {\n    return $filter(this, callbackfn, arguments[1]);\n  }\n});\n","'use strict';\n// 22.1.3.9 Array.prototype.findIndex(predicate, thisArg = undefined)\nvar $export = require('./_export');\nvar $find = require('./_array-methods')(6);\nvar KEY = 'findIndex';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n  findIndex: function findIndex(callbackfn /* , that = undefined */) {\n    return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n  }\n});\nrequire('./_add-to-unscopables')(KEY);\n","'use strict';\n// 22.1.3.8 Array.prototype.find(predicate, thisArg = undefined)\nvar $export = require('./_export');\nvar $find = require('./_array-methods')(5);\nvar KEY = 'find';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n  find: function find(callbackfn /* , that = undefined */) {\n    return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n  }\n});\nrequire('./_add-to-unscopables')(KEY);\n","'use strict';\nvar $export = require('./_export');\nvar $forEach = require('./_array-methods')(0);\nvar STRICT = require('./_strict-method')([].forEach, true);\n\n$export($export.P + $export.F * !STRICT, 'Array', {\n  // 22.1.3.10 / 15.4.4.18 Array.prototype.forEach(callbackfn [, thisArg])\n  forEach: function forEach(callbackfn /* , thisArg */) {\n    return $forEach(this, callbackfn, arguments[1]);\n  }\n});\n","'use strict';\nvar ctx = require('./_ctx');\nvar $export = require('./_export');\nvar toObject = require('./_to-object');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar toLength = require('./_to-length');\nvar createProperty = require('./_create-property');\nvar getIterFn = require('./core.get-iterator-method');\n\n$export($export.S + $export.F * !require('./_iter-detect')(function (iter) { Array.from(iter); }), 'Array', {\n  // 22.1.2.1 Array.from(arrayLike, mapfn = undefined, thisArg = undefined)\n  from: function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {\n    var O = toObject(arrayLike);\n    var C = typeof this == 'function' ? this : Array;\n    var aLen = arguments.length;\n    var mapfn = aLen > 1 ? arguments[1] : undefined;\n    var mapping = mapfn !== undefined;\n    var index = 0;\n    var iterFn = getIterFn(O);\n    var length, result, step, iterator;\n    if (mapping) mapfn = ctx(mapfn, aLen > 2 ? arguments[2] : undefined, 2);\n    // if object isn't iterable or it's array with default iterator - use simple case\n    if (iterFn != undefined && !(C == Array && isArrayIter(iterFn))) {\n      for (iterator = iterFn.call(O), result = new C(); !(step = iterator.next()).done; index++) {\n        createProperty(result, index, mapping ? call(iterator, mapfn, [step.value, index], true) : step.value);\n      }\n    } else {\n      length = toLength(O.length);\n      for (result = new C(length); length > index; index++) {\n        createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]);\n      }\n    }\n    result.length = index;\n    return result;\n  }\n});\n","'use strict';\nvar $export = require('./_export');\nvar $indexOf = require('./_array-includes')(false);\nvar $native = [].indexOf;\nvar NEGATIVE_ZERO = !!$native && 1 / [1].indexOf(1, -0) < 0;\n\n$export($export.P + $export.F * (NEGATIVE_ZERO || !require('./_strict-method')($native)), 'Array', {\n  // 22.1.3.11 / 15.4.4.14 Array.prototype.indexOf(searchElement [, fromIndex])\n  indexOf: function indexOf(searchElement /* , fromIndex = 0 */) {\n    return NEGATIVE_ZERO\n      // convert -0 to +0\n      ? $native.apply(this, arguments) || 0\n      : $indexOf(this, searchElement, arguments[1]);\n  }\n});\n","// 22.1.2.2 / 15.4.3.2 Array.isArray(arg)\nvar $export = require('./_export');\n\n$export($export.S, 'Array', { isArray: require('./_is-array') });\n","'use strict';\nvar addToUnscopables = require('./_add-to-unscopables');\nvar step = require('./_iter-step');\nvar Iterators = require('./_iterators');\nvar toIObject = require('./_to-iobject');\n\n// 22.1.3.4 Array.prototype.entries()\n// 22.1.3.13 Array.prototype.keys()\n// 22.1.3.29 Array.prototype.values()\n// 22.1.3.30 Array.prototype[@@iterator]()\nmodule.exports = require('./_iter-define')(Array, 'Array', function (iterated, kind) {\n  this._t = toIObject(iterated); // target\n  this._i = 0;                   // next index\n  this._k = kind;                // kind\n// 22.1.5.2.1 %ArrayIteratorPrototype%.next()\n}, function () {\n  var O = this._t;\n  var kind = this._k;\n  var index = this._i++;\n  if (!O || index >= O.length) {\n    this._t = undefined;\n    return step(1);\n  }\n  if (kind == 'keys') return step(0, index);\n  if (kind == 'values') return step(0, O[index]);\n  return step(0, [index, O[index]]);\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)\nIterators.Arguments = Iterators.Array;\n\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n","'use strict';\n// 22.1.3.13 Array.prototype.join(separator)\nvar $export = require('./_export');\nvar toIObject = require('./_to-iobject');\nvar arrayJoin = [].join;\n\n// fallback for not array-like strings\n$export($export.P + $export.F * (require('./_iobject') != Object || !require('./_strict-method')(arrayJoin)), 'Array', {\n  join: function join(separator) {\n    return arrayJoin.call(toIObject(this), separator === undefined ? ',' : separator);\n  }\n});\n","'use strict';\nvar $export = require('./_export');\nvar toIObject = require('./_to-iobject');\nvar toInteger = require('./_to-integer');\nvar toLength = require('./_to-length');\nvar $native = [].lastIndexOf;\nvar NEGATIVE_ZERO = !!$native && 1 / [1].lastIndexOf(1, -0) < 0;\n\n$export($export.P + $export.F * (NEGATIVE_ZERO || !require('./_strict-method')($native)), 'Array', {\n  // 22.1.3.14 / 15.4.4.15 Array.prototype.lastIndexOf(searchElement [, fromIndex])\n  lastIndexOf: function lastIndexOf(searchElement /* , fromIndex = @[*-1] */) {\n    // convert -0 to +0\n    if (NEGATIVE_ZERO) return $native.apply(this, arguments) || 0;\n    var O = toIObject(this);\n    var length = toLength(O.length);\n    var index = length - 1;\n    if (arguments.length > 1) index = Math.min(index, toInteger(arguments[1]));\n    if (index < 0) index = length + index;\n    for (;index >= 0; index--) if (index in O) if (O[index] === searchElement) return index || 0;\n    return -1;\n  }\n});\n","'use strict';\nvar $export = require('./_export');\nvar $map = require('./_array-methods')(1);\n\n$export($export.P + $export.F * !require('./_strict-method')([].map, true), 'Array', {\n  // 22.1.3.15 / 15.4.4.19 Array.prototype.map(callbackfn [, thisArg])\n  map: function map(callbackfn /* , thisArg */) {\n    return $map(this, callbackfn, arguments[1]);\n  }\n});\n","'use strict';\nvar $export = require('./_export');\nvar createProperty = require('./_create-property');\n\n// WebKit Array.of isn't generic\n$export($export.S + $export.F * require('./_fails')(function () {\n  function F() { /* empty */ }\n  return !(Array.of.call(F) instanceof F);\n}), 'Array', {\n  // 22.1.2.3 Array.of( ...items)\n  of: function of(/* ...args */) {\n    var index = 0;\n    var aLen = arguments.length;\n    var result = new (typeof this == 'function' ? this : Array)(aLen);\n    while (aLen > index) createProperty(result, index, arguments[index++]);\n    result.length = aLen;\n    return result;\n  }\n});\n","'use strict';\nvar $export = require('./_export');\nvar $reduce = require('./_array-reduce');\n\n$export($export.P + $export.F * !require('./_strict-method')([].reduceRight, true), 'Array', {\n  // 22.1.3.19 / 15.4.4.22 Array.prototype.reduceRight(callbackfn [, initialValue])\n  reduceRight: function reduceRight(callbackfn /* , initialValue */) {\n    return $reduce(this, callbackfn, arguments.length, arguments[1], true);\n  }\n});\n","'use strict';\nvar $export = require('./_export');\nvar $reduce = require('./_array-reduce');\n\n$export($export.P + $export.F * !require('./_strict-method')([].reduce, true), 'Array', {\n  // 22.1.3.18 / 15.4.4.21 Array.prototype.reduce(callbackfn [, initialValue])\n  reduce: function reduce(callbackfn /* , initialValue */) {\n    return $reduce(this, callbackfn, arguments.length, arguments[1], false);\n  }\n});\n","'use strict';\nvar $export = require('./_export');\nvar html = require('./_html');\nvar cof = require('./_cof');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\nvar arraySlice = [].slice;\n\n// fallback for not array-like ES3 strings and DOM objects\n$export($export.P + $export.F * require('./_fails')(function () {\n  if (html) arraySlice.call(html);\n}), 'Array', {\n  slice: function slice(begin, end) {\n    var len = toLength(this.length);\n    var klass = cof(this);\n    end = end === undefined ? len : end;\n    if (klass == 'Array') return arraySlice.call(this, begin, end);\n    var start = toAbsoluteIndex(begin, len);\n    var upTo = toAbsoluteIndex(end, len);\n    var size = toLength(upTo - start);\n    var cloned = new Array(size);\n    var i = 0;\n    for (; i < size; i++) cloned[i] = klass == 'String'\n      ? this.charAt(start + i)\n      : this[start + i];\n    return cloned;\n  }\n});\n","'use strict';\nvar $export = require('./_export');\nvar $some = require('./_array-methods')(3);\n\n$export($export.P + $export.F * !require('./_strict-method')([].some, true), 'Array', {\n  // 22.1.3.23 / 15.4.4.17 Array.prototype.some(callbackfn [, thisArg])\n  some: function some(callbackfn /* , thisArg */) {\n    return $some(this, callbackfn, arguments[1]);\n  }\n});\n","'use strict';\nvar $export = require('./_export');\nvar aFunction = require('./_a-function');\nvar toObject = require('./_to-object');\nvar fails = require('./_fails');\nvar $sort = [].sort;\nvar test = [1, 2, 3];\n\n$export($export.P + $export.F * (fails(function () {\n  // IE8-\n  test.sort(undefined);\n}) || !fails(function () {\n  // V8 bug\n  test.sort(null);\n  // Old WebKit\n}) || !require('./_strict-method')($sort)), 'Array', {\n  // 22.1.3.25 Array.prototype.sort(comparefn)\n  sort: function sort(comparefn) {\n    return comparefn === undefined\n      ? $sort.call(toObject(this))\n      : $sort.call(toObject(this), aFunction(comparefn));\n  }\n});\n","require('./_set-species')('Array');\n","// 20.3.3.1 / 15.9.4.4 Date.now()\nvar $export = require('./_export');\n\n$export($export.S, 'Date', { now: function () { return new Date().getTime(); } });\n","// 20.3.4.36 / 15.9.5.43 Date.prototype.toISOString()\nvar $export = require('./_export');\nvar toISOString = require('./_date-to-iso-string');\n\n// PhantomJS / old WebKit has a broken implementations\n$export($export.P + $export.F * (Date.prototype.toISOString !== toISOString), 'Date', {\n  toISOString: toISOString\n});\n","'use strict';\nvar $export = require('./_export');\nvar toObject = require('./_to-object');\nvar toPrimitive = require('./_to-primitive');\n\n$export($export.P + $export.F * require('./_fails')(function () {\n  return new Date(NaN).toJSON() !== null\n    || Date.prototype.toJSON.call({ toISOString: function () { return 1; } }) !== 1;\n}), 'Date', {\n  // eslint-disable-next-line no-unused-vars\n  toJSON: function toJSON(key) {\n    var O = toObject(this);\n    var pv = toPrimitive(O);\n    return typeof pv == 'number' && !isFinite(pv) ? null : O.toISOString();\n  }\n});\n","var TO_PRIMITIVE = require('./_wks')('toPrimitive');\nvar proto = Date.prototype;\n\nif (!(TO_PRIMITIVE in proto)) require('./_hide')(proto, TO_PRIMITIVE, require('./_date-to-primitive'));\n","var DateProto = Date.prototype;\nvar INVALID_DATE = 'Invalid Date';\nvar TO_STRING = 'toString';\nvar $toString = DateProto[TO_STRING];\nvar getTime = DateProto.getTime;\nif (new Date(NaN) + '' != INVALID_DATE) {\n  require('./_redefine')(DateProto, TO_STRING, function toString() {\n    var value = getTime.call(this);\n    // eslint-disable-next-line no-self-compare\n    return value === value ? $toString.call(this) : INVALID_DATE;\n  });\n}\n","// 19.2.3.2 / 15.3.4.5 Function.prototype.bind(thisArg, args...)\nvar $export = require('./_export');\n\n$export($export.P, 'Function', { bind: require('./_bind') });\n","'use strict';\nvar isObject = require('./_is-object');\nvar getPrototypeOf = require('./_object-gpo');\nvar HAS_INSTANCE = require('./_wks')('hasInstance');\nvar FunctionProto = Function.prototype;\n// 19.2.3.6 Function.prototype[@@hasInstance](V)\nif (!(HAS_INSTANCE in FunctionProto)) require('./_object-dp').f(FunctionProto, HAS_INSTANCE, { value: function (O) {\n  if (typeof this != 'function' || !isObject(O)) return false;\n  if (!isObject(this.prototype)) return O instanceof this;\n  // for environment w/o native `@@hasInstance` logic enough `instanceof`, but add this:\n  while (O = getPrototypeOf(O)) if (this.prototype === O) return true;\n  return false;\n} });\n","var dP = require('./_object-dp').f;\nvar FProto = Function.prototype;\nvar nameRE = /^\\s*function ([^ (]*)/;\nvar NAME = 'name';\n\n// 19.2.4.2 name\nNAME in FProto || require('./_descriptors') && dP(FProto, NAME, {\n  configurable: true,\n  get: function () {\n    try {\n      return ('' + this).match(nameRE)[1];\n    } catch (e) {\n      return '';\n    }\n  }\n});\n","'use strict';\nvar strong = require('./_collection-strong');\nvar validate = require('./_validate-collection');\nvar MAP = 'Map';\n\n// 23.1 Map Objects\nmodule.exports = require('./_collection')(MAP, function (get) {\n  return function Map() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n  // 23.1.3.6 Map.prototype.get(key)\n  get: function get(key) {\n    var entry = strong.getEntry(validate(this, MAP), key);\n    return entry && entry.v;\n  },\n  // 23.1.3.9 Map.prototype.set(key, value)\n  set: function set(key, value) {\n    return strong.def(validate(this, MAP), key === 0 ? 0 : key, value);\n  }\n}, strong, true);\n","// 20.2.2.3 Math.acosh(x)\nvar $export = require('./_export');\nvar log1p = require('./_math-log1p');\nvar sqrt = Math.sqrt;\nvar $acosh = Math.acosh;\n\n$export($export.S + $export.F * !($acosh\n  // V8 bug: https://code.google.com/p/v8/issues/detail?id=3509\n  && Math.floor($acosh(Number.MAX_VALUE)) == 710\n  // Tor Browser bug: Math.acosh(Infinity) -> NaN\n  && $acosh(Infinity) == Infinity\n), 'Math', {\n  acosh: function acosh(x) {\n    return (x = +x) < 1 ? NaN : x > 94906265.62425156\n      ? Math.log(x) + Math.LN2\n      : log1p(x - 1 + sqrt(x - 1) * sqrt(x + 1));\n  }\n});\n","// 20.2.2.5 Math.asinh(x)\nvar $export = require('./_export');\nvar $asinh = Math.asinh;\n\nfunction asinh(x) {\n  return !isFinite(x = +x) || x == 0 ? x : x < 0 ? -asinh(-x) : Math.log(x + Math.sqrt(x * x + 1));\n}\n\n// Tor Browser bug: Math.asinh(0) -> -0\n$export($export.S + $export.F * !($asinh && 1 / $asinh(0) > 0), 'Math', { asinh: asinh });\n","// 20.2.2.7 Math.atanh(x)\nvar $export = require('./_export');\nvar $atanh = Math.atanh;\n\n// Tor Browser bug: Math.atanh(-0) -> 0\n$export($export.S + $export.F * !($atanh && 1 / $atanh(-0) < 0), 'Math', {\n  atanh: function atanh(x) {\n    return (x = +x) == 0 ? x : Math.log((1 + x) / (1 - x)) / 2;\n  }\n});\n","// 20.2.2.9 Math.cbrt(x)\nvar $export = require('./_export');\nvar sign = require('./_math-sign');\n\n$export($export.S, 'Math', {\n  cbrt: function cbrt(x) {\n    return sign(x = +x) * Math.pow(Math.abs(x), 1 / 3);\n  }\n});\n","// 20.2.2.11 Math.clz32(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n  clz32: function clz32(x) {\n    return (x >>>= 0) ? 31 - Math.floor(Math.log(x + 0.5) * Math.LOG2E) : 32;\n  }\n});\n","// 20.2.2.12 Math.cosh(x)\nvar $export = require('./_export');\nvar exp = Math.exp;\n\n$export($export.S, 'Math', {\n  cosh: function cosh(x) {\n    return (exp(x = +x) + exp(-x)) / 2;\n  }\n});\n","// 20.2.2.14 Math.expm1(x)\nvar $export = require('./_export');\nvar $expm1 = require('./_math-expm1');\n\n$export($export.S + $export.F * ($expm1 != Math.expm1), 'Math', { expm1: $expm1 });\n","// 20.2.2.16 Math.fround(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { fround: require('./_math-fround') });\n","// 20.2.2.17 Math.hypot([value1[, value2[, … ]]])\nvar $export = require('./_export');\nvar abs = Math.abs;\n\n$export($export.S, 'Math', {\n  hypot: function hypot(value1, value2) { // eslint-disable-line no-unused-vars\n    var sum = 0;\n    var i = 0;\n    var aLen = arguments.length;\n    var larg = 0;\n    var arg, div;\n    while (i < aLen) {\n      arg = abs(arguments[i++]);\n      if (larg < arg) {\n        div = larg / arg;\n        sum = sum * div * div + 1;\n        larg = arg;\n      } else if (arg > 0) {\n        div = arg / larg;\n        sum += div * div;\n      } else sum += arg;\n    }\n    return larg === Infinity ? Infinity : larg * Math.sqrt(sum);\n  }\n});\n","// 20.2.2.18 Math.imul(x, y)\nvar $export = require('./_export');\nvar $imul = Math.imul;\n\n// some WebKit versions fails with big numbers, some has wrong arity\n$export($export.S + $export.F * require('./_fails')(function () {\n  return $imul(0xffffffff, 5) != -5 || $imul.length != 2;\n}), 'Math', {\n  imul: function imul(x, y) {\n    var UINT16 = 0xffff;\n    var xn = +x;\n    var yn = +y;\n    var xl = UINT16 & xn;\n    var yl = UINT16 & yn;\n    return 0 | xl * yl + ((UINT16 & xn >>> 16) * yl + xl * (UINT16 & yn >>> 16) << 16 >>> 0);\n  }\n});\n","// 20.2.2.21 Math.log10(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n  log10: function log10(x) {\n    return Math.log(x) * Math.LOG10E;\n  }\n});\n","// 20.2.2.20 Math.log1p(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { log1p: require('./_math-log1p') });\n","// 20.2.2.22 Math.log2(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n  log2: function log2(x) {\n    return Math.log(x) / Math.LN2;\n  }\n});\n","// 20.2.2.28 Math.sign(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { sign: require('./_math-sign') });\n","// 20.2.2.30 Math.sinh(x)\nvar $export = require('./_export');\nvar expm1 = require('./_math-expm1');\nvar exp = Math.exp;\n\n// V8 near Chromium 38 has a problem with very small numbers\n$export($export.S + $export.F * require('./_fails')(function () {\n  return !Math.sinh(-2e-17) != -2e-17;\n}), 'Math', {\n  sinh: function sinh(x) {\n    return Math.abs(x = +x) < 1\n      ? (expm1(x) - expm1(-x)) / 2\n      : (exp(x - 1) - exp(-x - 1)) * (Math.E / 2);\n  }\n});\n","// 20.2.2.33 Math.tanh(x)\nvar $export = require('./_export');\nvar expm1 = require('./_math-expm1');\nvar exp = Math.exp;\n\n$export($export.S, 'Math', {\n  tanh: function tanh(x) {\n    var a = expm1(x = +x);\n    var b = expm1(-x);\n    return a == Infinity ? 1 : b == Infinity ? -1 : (a - b) / (exp(x) + exp(-x));\n  }\n});\n","// 20.2.2.34 Math.trunc(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n  trunc: function trunc(it) {\n    return (it > 0 ? Math.floor : Math.ceil)(it);\n  }\n});\n","'use strict';\nvar global = require('./_global');\nvar has = require('./_has');\nvar cof = require('./_cof');\nvar inheritIfRequired = require('./_inherit-if-required');\nvar toPrimitive = require('./_to-primitive');\nvar fails = require('./_fails');\nvar gOPN = require('./_object-gopn').f;\nvar gOPD = require('./_object-gopd').f;\nvar dP = require('./_object-dp').f;\nvar $trim = require('./_string-trim').trim;\nvar NUMBER = 'Number';\nvar $Number = global[NUMBER];\nvar Base = $Number;\nvar proto = $Number.prototype;\n// Opera ~12 has broken Object#toString\nvar BROKEN_COF = cof(require('./_object-create')(proto)) == NUMBER;\nvar TRIM = 'trim' in String.prototype;\n\n// 7.1.3 ToNumber(argument)\nvar toNumber = function (argument) {\n  var it = toPrimitive(argument, false);\n  if (typeof it == 'string' && it.length > 2) {\n    it = TRIM ? it.trim() : $trim(it, 3);\n    var first = it.charCodeAt(0);\n    var third, radix, maxCode;\n    if (first === 43 || first === 45) {\n      third = it.charCodeAt(2);\n      if (third === 88 || third === 120) return NaN; // Number('+0x1') should be NaN, old V8 fix\n    } else if (first === 48) {\n      switch (it.charCodeAt(1)) {\n        case 66: case 98: radix = 2; maxCode = 49; break; // fast equal /^0b[01]+$/i\n        case 79: case 111: radix = 8; maxCode = 55; break; // fast equal /^0o[0-7]+$/i\n        default: return +it;\n      }\n      for (var digits = it.slice(2), i = 0, l = digits.length, code; i < l; i++) {\n        code = digits.charCodeAt(i);\n        // parseInt parses a string to a first unavailable symbol\n        // but ToNumber should return NaN if a string contains unavailable symbols\n        if (code < 48 || code > maxCode) return NaN;\n      } return parseInt(digits, radix);\n    }\n  } return +it;\n};\n\nif (!$Number(' 0o1') || !$Number('0b1') || $Number('+0x1')) {\n  $Number = function Number(value) {\n    var it = arguments.length < 1 ? 0 : value;\n    var that = this;\n    return that instanceof $Number\n      // check on 1..constructor(foo) case\n      && (BROKEN_COF ? fails(function () { proto.valueOf.call(that); }) : cof(that) != NUMBER)\n        ? inheritIfRequired(new Base(toNumber(it)), that, $Number) : toNumber(it);\n  };\n  for (var keys = require('./_descriptors') ? gOPN(Base) : (\n    // ES3:\n    'MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,' +\n    // ES6 (in case, if modules with ES6 Number statics required before):\n    'EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,' +\n    'MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger'\n  ).split(','), j = 0, key; keys.length > j; j++) {\n    if (has(Base, key = keys[j]) && !has($Number, key)) {\n      dP($Number, key, gOPD(Base, key));\n    }\n  }\n  $Number.prototype = proto;\n  proto.constructor = $Number;\n  require('./_redefine')(global, NUMBER, $Number);\n}\n","// 20.1.2.1 Number.EPSILON\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { EPSILON: Math.pow(2, -52) });\n","// 20.1.2.2 Number.isFinite(number)\nvar $export = require('./_export');\nvar _isFinite = require('./_global').isFinite;\n\n$export($export.S, 'Number', {\n  isFinite: function isFinite(it) {\n    return typeof it == 'number' && _isFinite(it);\n  }\n});\n","// 20.1.2.3 Number.isInteger(number)\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { isInteger: require('./_is-integer') });\n","// 20.1.2.4 Number.isNaN(number)\nvar $export = require('./_export');\n\n$export($export.S, 'Number', {\n  isNaN: function isNaN(number) {\n    // eslint-disable-next-line no-self-compare\n    return number != number;\n  }\n});\n","// 20.1.2.5 Number.isSafeInteger(number)\nvar $export = require('./_export');\nvar isInteger = require('./_is-integer');\nvar abs = Math.abs;\n\n$export($export.S, 'Number', {\n  isSafeInteger: function isSafeInteger(number) {\n    return isInteger(number) && abs(number) <= 0x1fffffffffffff;\n  }\n});\n","// 20.1.2.6 Number.MAX_SAFE_INTEGER\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { MAX_SAFE_INTEGER: 0x1fffffffffffff });\n","// 20.1.2.10 Number.MIN_SAFE_INTEGER\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { MIN_SAFE_INTEGER: -0x1fffffffffffff });\n","var $export = require('./_export');\nvar $parseFloat = require('./_parse-float');\n// 20.1.2.12 Number.parseFloat(string)\n$export($export.S + $export.F * (Number.parseFloat != $parseFloat), 'Number', { parseFloat: $parseFloat });\n","var $export = require('./_export');\nvar $parseInt = require('./_parse-int');\n// 20.1.2.13 Number.parseInt(string, radix)\n$export($export.S + $export.F * (Number.parseInt != $parseInt), 'Number', { parseInt: $parseInt });\n","'use strict';\nvar $export = require('./_export');\nvar toInteger = require('./_to-integer');\nvar aNumberValue = require('./_a-number-value');\nvar repeat = require('./_string-repeat');\nvar $toFixed = 1.0.toFixed;\nvar floor = Math.floor;\nvar data = [0, 0, 0, 0, 0, 0];\nvar ERROR = 'Number.toFixed: incorrect invocation!';\nvar ZERO = '0';\n\nvar multiply = function (n, c) {\n  var i = -1;\n  var c2 = c;\n  while (++i < 6) {\n    c2 += n * data[i];\n    data[i] = c2 % 1e7;\n    c2 = floor(c2 / 1e7);\n  }\n};\nvar divide = function (n) {\n  var i = 6;\n  var c = 0;\n  while (--i >= 0) {\n    c += data[i];\n    data[i] = floor(c / n);\n    c = (c % n) * 1e7;\n  }\n};\nvar numToString = function () {\n  var i = 6;\n  var s = '';\n  while (--i >= 0) {\n    if (s !== '' || i === 0 || data[i] !== 0) {\n      var t = String(data[i]);\n      s = s === '' ? t : s + repeat.call(ZERO, 7 - t.length) + t;\n    }\n  } return s;\n};\nvar pow = function (x, n, acc) {\n  return n === 0 ? acc : n % 2 === 1 ? pow(x, n - 1, acc * x) : pow(x * x, n / 2, acc);\n};\nvar log = function (x) {\n  var n = 0;\n  var x2 = x;\n  while (x2 >= 4096) {\n    n += 12;\n    x2 /= 4096;\n  }\n  while (x2 >= 2) {\n    n += 1;\n    x2 /= 2;\n  } return n;\n};\n\n$export($export.P + $export.F * (!!$toFixed && (\n  0.00008.toFixed(3) !== '0.000' ||\n  0.9.toFixed(0) !== '1' ||\n  1.255.toFixed(2) !== '1.25' ||\n  1000000000000000128.0.toFixed(0) !== '1000000000000000128'\n) || !require('./_fails')(function () {\n  // V8 ~ Android 4.3-\n  $toFixed.call({});\n})), 'Number', {\n  toFixed: function toFixed(fractionDigits) {\n    var x = aNumberValue(this, ERROR);\n    var f = toInteger(fractionDigits);\n    var s = '';\n    var m = ZERO;\n    var e, z, j, k;\n    if (f < 0 || f > 20) throw RangeError(ERROR);\n    // eslint-disable-next-line no-self-compare\n    if (x != x) return 'NaN';\n    if (x <= -1e21 || x >= 1e21) return String(x);\n    if (x < 0) {\n      s = '-';\n      x = -x;\n    }\n    if (x > 1e-21) {\n      e = log(x * pow(2, 69, 1)) - 69;\n      z = e < 0 ? x * pow(2, -e, 1) : x / pow(2, e, 1);\n      z *= 0x10000000000000;\n      e = 52 - e;\n      if (e > 0) {\n        multiply(0, z);\n        j = f;\n        while (j >= 7) {\n          multiply(1e7, 0);\n          j -= 7;\n        }\n        multiply(pow(10, j, 1), 0);\n        j = e - 1;\n        while (j >= 23) {\n          divide(1 << 23);\n          j -= 23;\n        }\n        divide(1 << j);\n        multiply(1, 1);\n        divide(2);\n        m = numToString();\n      } else {\n        multiply(0, z);\n        multiply(1 << -e, 0);\n        m = numToString() + repeat.call(ZERO, f);\n      }\n    }\n    if (f > 0) {\n      k = m.length;\n      m = s + (k <= f ? '0.' + repeat.call(ZERO, f - k) + m : m.slice(0, k - f) + '.' + m.slice(k - f));\n    } else {\n      m = s + m;\n    } return m;\n  }\n});\n","'use strict';\nvar $export = require('./_export');\nvar $fails = require('./_fails');\nvar aNumberValue = require('./_a-number-value');\nvar $toPrecision = 1.0.toPrecision;\n\n$export($export.P + $export.F * ($fails(function () {\n  // IE7-\n  return $toPrecision.call(1, undefined) !== '1';\n}) || !$fails(function () {\n  // V8 ~ Android 4.3-\n  $toPrecision.call({});\n})), 'Number', {\n  toPrecision: function toPrecision(precision) {\n    var that = aNumberValue(this, 'Number#toPrecision: incorrect invocation!');\n    return precision === undefined ? $toPrecision.call(that) : $toPrecision.call(that, precision);\n  }\n});\n","// 19.1.3.1 Object.assign(target, source)\nvar $export = require('./_export');\n\n$export($export.S + $export.F, 'Object', { assign: require('./_object-assign') });\n","var $export = require('./_export');\n// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\n$export($export.S, 'Object', { create: require('./_object-create') });\n","var $export = require('./_export');\n// 19.1.2.3 / 15.2.3.7 Object.defineProperties(O, Properties)\n$export($export.S + $export.F * !require('./_descriptors'), 'Object', { defineProperties: require('./_object-dps') });\n","var $export = require('./_export');\n// 19.1.2.4 / 15.2.3.6 Object.defineProperty(O, P, Attributes)\n$export($export.S + $export.F * !require('./_descriptors'), 'Object', { defineProperty: require('./_object-dp').f });\n","// 19.1.2.5 Object.freeze(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('freeze', function ($freeze) {\n  return function freeze(it) {\n    return $freeze && isObject(it) ? $freeze(meta(it)) : it;\n  };\n});\n","// 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\nvar toIObject = require('./_to-iobject');\nvar $getOwnPropertyDescriptor = require('./_object-gopd').f;\n\nrequire('./_object-sap')('getOwnPropertyDescriptor', function () {\n  return function getOwnPropertyDescriptor(it, key) {\n    return $getOwnPropertyDescriptor(toIObject(it), key);\n  };\n});\n","// 19.1.2.7 Object.getOwnPropertyNames(O)\nrequire('./_object-sap')('getOwnPropertyNames', function () {\n  return require('./_object-gopn-ext').f;\n});\n","// 19.1.2.9 Object.getPrototypeOf(O)\nvar toObject = require('./_to-object');\nvar $getPrototypeOf = require('./_object-gpo');\n\nrequire('./_object-sap')('getPrototypeOf', function () {\n  return function getPrototypeOf(it) {\n    return $getPrototypeOf(toObject(it));\n  };\n});\n","// 19.1.2.11 Object.isExtensible(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isExtensible', function ($isExtensible) {\n  return function isExtensible(it) {\n    return isObject(it) ? $isExtensible ? $isExtensible(it) : true : false;\n  };\n});\n","// 19.1.2.12 Object.isFrozen(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isFrozen', function ($isFrozen) {\n  return function isFrozen(it) {\n    return isObject(it) ? $isFrozen ? $isFrozen(it) : false : true;\n  };\n});\n","// 19.1.2.13 Object.isSealed(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isSealed', function ($isSealed) {\n  return function isSealed(it) {\n    return isObject(it) ? $isSealed ? $isSealed(it) : false : true;\n  };\n});\n","// 19.1.3.10 Object.is(value1, value2)\nvar $export = require('./_export');\n$export($export.S, 'Object', { is: require('./_same-value') });\n","// 19.1.2.14 Object.keys(O)\nvar toObject = require('./_to-object');\nvar $keys = require('./_object-keys');\n\nrequire('./_object-sap')('keys', function () {\n  return function keys(it) {\n    return $keys(toObject(it));\n  };\n});\n","// 19.1.2.15 Object.preventExtensions(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('preventExtensions', function ($preventExtensions) {\n  return function preventExtensions(it) {\n    return $preventExtensions && isObject(it) ? $preventExtensions(meta(it)) : it;\n  };\n});\n","// 19.1.2.17 Object.seal(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('seal', function ($seal) {\n  return function seal(it) {\n    return $seal && isObject(it) ? $seal(meta(it)) : it;\n  };\n});\n","// 19.1.3.19 Object.setPrototypeOf(O, proto)\nvar $export = require('./_export');\n$export($export.S, 'Object', { setPrototypeOf: require('./_set-proto').set });\n","'use strict';\n// 19.1.3.6 Object.prototype.toString()\nvar classof = require('./_classof');\nvar test = {};\ntest[require('./_wks')('toStringTag')] = 'z';\nif (test + '' != '[object z]') {\n  require('./_redefine')(Object.prototype, 'toString', function toString() {\n    return '[object ' + classof(this) + ']';\n  }, true);\n}\n","var $export = require('./_export');\nvar $parseFloat = require('./_parse-float');\n// 18.2.4 parseFloat(string)\n$export($export.G + $export.F * (parseFloat != $parseFloat), { parseFloat: $parseFloat });\n","var $export = require('./_export');\nvar $parseInt = require('./_parse-int');\n// 18.2.5 parseInt(string, radix)\n$export($export.G + $export.F * (parseInt != $parseInt), { parseInt: $parseInt });\n","'use strict';\nvar LIBRARY = require('./_library');\nvar global = require('./_global');\nvar ctx = require('./_ctx');\nvar classof = require('./_classof');\nvar $export = require('./_export');\nvar isObject = require('./_is-object');\nvar aFunction = require('./_a-function');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar speciesConstructor = require('./_species-constructor');\nvar task = require('./_task').set;\nvar microtask = require('./_microtask')();\nvar newPromiseCapabilityModule = require('./_new-promise-capability');\nvar perform = require('./_perform');\nvar userAgent = require('./_user-agent');\nvar promiseResolve = require('./_promise-resolve');\nvar PROMISE = 'Promise';\nvar TypeError = global.TypeError;\nvar process = global.process;\nvar versions = process && process.versions;\nvar v8 = versions && versions.v8 || '';\nvar $Promise = global[PROMISE];\nvar isNode = classof(process) == 'process';\nvar empty = function () { /* empty */ };\nvar Internal, newGenericPromiseCapability, OwnPromiseCapability, Wrapper;\nvar newPromiseCapability = newGenericPromiseCapability = newPromiseCapabilityModule.f;\n\nvar USE_NATIVE = !!function () {\n  try {\n    // correct subclassing with @@species support\n    var promise = $Promise.resolve(1);\n    var FakePromise = (promise.constructor = {})[require('./_wks')('species')] = function (exec) {\n      exec(empty, empty);\n    };\n    // unhandled rejections tracking support, NodeJS Promise without it fails @@species test\n    return (isNode || typeof PromiseRejectionEvent == 'function')\n      && promise.then(empty) instanceof FakePromise\n      // v8 6.6 (Node 10 and Chrome 66) have a bug with resolving custom thenables\n      // https://bugs.chromium.org/p/chromium/issues/detail?id=830565\n      // we can't detect it synchronously, so just check versions\n      && v8.indexOf('6.6') !== 0\n      && userAgent.indexOf('Chrome/66') === -1;\n  } catch (e) { /* empty */ }\n}();\n\n// helpers\nvar isThenable = function (it) {\n  var then;\n  return isObject(it) && typeof (then = it.then) == 'function' ? then : false;\n};\nvar notify = function (promise, isReject) {\n  if (promise._n) return;\n  promise._n = true;\n  var chain = promise._c;\n  microtask(function () {\n    var value = promise._v;\n    var ok = promise._s == 1;\n    var i = 0;\n    var run = function (reaction) {\n      var handler = ok ? reaction.ok : reaction.fail;\n      var resolve = reaction.resolve;\n      var reject = reaction.reject;\n      var domain = reaction.domain;\n      var result, then, exited;\n      try {\n        if (handler) {\n          if (!ok) {\n            if (promise._h == 2) onHandleUnhandled(promise);\n            promise._h = 1;\n          }\n          if (handler === true) result = value;\n          else {\n            if (domain) domain.enter();\n            result = handler(value); // may throw\n            if (domain) {\n              domain.exit();\n              exited = true;\n            }\n          }\n          if (result === reaction.promise) {\n            reject(TypeError('Promise-chain cycle'));\n          } else if (then = isThenable(result)) {\n            then.call(result, resolve, reject);\n          } else resolve(result);\n        } else reject(value);\n      } catch (e) {\n        if (domain && !exited) domain.exit();\n        reject(e);\n      }\n    };\n    while (chain.length > i) run(chain[i++]); // variable length - can't use forEach\n    promise._c = [];\n    promise._n = false;\n    if (isReject && !promise._h) onUnhandled(promise);\n  });\n};\nvar onUnhandled = function (promise) {\n  task.call(global, function () {\n    var value = promise._v;\n    var unhandled = isUnhandled(promise);\n    var result, handler, console;\n    if (unhandled) {\n      result = perform(function () {\n        if (isNode) {\n          process.emit('unhandledRejection', value, promise);\n        } else if (handler = global.onunhandledrejection) {\n          handler({ promise: promise, reason: value });\n        } else if ((console = global.console) && console.error) {\n          console.error('Unhandled promise rejection', value);\n        }\n      });\n      // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should\n      promise._h = isNode || isUnhandled(promise) ? 2 : 1;\n    } promise._a = undefined;\n    if (unhandled && result.e) throw result.v;\n  });\n};\nvar isUnhandled = function (promise) {\n  return promise._h !== 1 && (promise._a || promise._c).length === 0;\n};\nvar onHandleUnhandled = function (promise) {\n  task.call(global, function () {\n    var handler;\n    if (isNode) {\n      process.emit('rejectionHandled', promise);\n    } else if (handler = global.onrejectionhandled) {\n      handler({ promise: promise, reason: promise._v });\n    }\n  });\n};\nvar $reject = function (value) {\n  var promise = this;\n  if (promise._d) return;\n  promise._d = true;\n  promise = promise._w || promise; // unwrap\n  promise._v = value;\n  promise._s = 2;\n  if (!promise._a) promise._a = promise._c.slice();\n  notify(promise, true);\n};\nvar $resolve = function (value) {\n  var promise = this;\n  var then;\n  if (promise._d) return;\n  promise._d = true;\n  promise = promise._w || promise; // unwrap\n  try {\n    if (promise === value) throw TypeError(\"Promise can't be resolved itself\");\n    if (then = isThenable(value)) {\n      microtask(function () {\n        var wrapper = { _w: promise, _d: false }; // wrap\n        try {\n          then.call(value, ctx($resolve, wrapper, 1), ctx($reject, wrapper, 1));\n        } catch (e) {\n          $reject.call(wrapper, e);\n        }\n      });\n    } else {\n      promise._v = value;\n      promise._s = 1;\n      notify(promise, false);\n    }\n  } catch (e) {\n    $reject.call({ _w: promise, _d: false }, e); // wrap\n  }\n};\n\n// constructor polyfill\nif (!USE_NATIVE) {\n  // 25.4.3.1 Promise(executor)\n  $Promise = function Promise(executor) {\n    anInstance(this, $Promise, PROMISE, '_h');\n    aFunction(executor);\n    Internal.call(this);\n    try {\n      executor(ctx($resolve, this, 1), ctx($reject, this, 1));\n    } catch (err) {\n      $reject.call(this, err);\n    }\n  };\n  // eslint-disable-next-line no-unused-vars\n  Internal = function Promise(executor) {\n    this._c = [];             // <- awaiting reactions\n    this._a = undefined;      // <- checked in isUnhandled reactions\n    this._s = 0;              // <- state\n    this._d = false;          // <- done\n    this._v = undefined;      // <- value\n    this._h = 0;              // <- rejection state, 0 - default, 1 - handled, 2 - unhandled\n    this._n = false;          // <- notify\n  };\n  Internal.prototype = require('./_redefine-all')($Promise.prototype, {\n    // 25.4.5.3 Promise.prototype.then(onFulfilled, onRejected)\n    then: function then(onFulfilled, onRejected) {\n      var reaction = newPromiseCapability(speciesConstructor(this, $Promise));\n      reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true;\n      reaction.fail = typeof onRejected == 'function' && onRejected;\n      reaction.domain = isNode ? process.domain : undefined;\n      this._c.push(reaction);\n      if (this._a) this._a.push(reaction);\n      if (this._s) notify(this, false);\n      return reaction.promise;\n    },\n    // 25.4.5.1 Promise.prototype.catch(onRejected)\n    'catch': function (onRejected) {\n      return this.then(undefined, onRejected);\n    }\n  });\n  OwnPromiseCapability = function () {\n    var promise = new Internal();\n    this.promise = promise;\n    this.resolve = ctx($resolve, promise, 1);\n    this.reject = ctx($reject, promise, 1);\n  };\n  newPromiseCapabilityModule.f = newPromiseCapability = function (C) {\n    return C === $Promise || C === Wrapper\n      ? new OwnPromiseCapability(C)\n      : newGenericPromiseCapability(C);\n  };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Promise: $Promise });\nrequire('./_set-to-string-tag')($Promise, PROMISE);\nrequire('./_set-species')(PROMISE);\nWrapper = require('./_core')[PROMISE];\n\n// statics\n$export($export.S + $export.F * !USE_NATIVE, PROMISE, {\n  // 25.4.4.5 Promise.reject(r)\n  reject: function reject(r) {\n    var capability = newPromiseCapability(this);\n    var $$reject = capability.reject;\n    $$reject(r);\n    return capability.promise;\n  }\n});\n$export($export.S + $export.F * (LIBRARY || !USE_NATIVE), PROMISE, {\n  // 25.4.4.6 Promise.resolve(x)\n  resolve: function resolve(x) {\n    return promiseResolve(LIBRARY && this === Wrapper ? $Promise : this, x);\n  }\n});\n$export($export.S + $export.F * !(USE_NATIVE && require('./_iter-detect')(function (iter) {\n  $Promise.all(iter)['catch'](empty);\n})), PROMISE, {\n  // 25.4.4.1 Promise.all(iterable)\n  all: function all(iterable) {\n    var C = this;\n    var capability = newPromiseCapability(C);\n    var resolve = capability.resolve;\n    var reject = capability.reject;\n    var result = perform(function () {\n      var values = [];\n      var index = 0;\n      var remaining = 1;\n      forOf(iterable, false, function (promise) {\n        var $index = index++;\n        var alreadyCalled = false;\n        values.push(undefined);\n        remaining++;\n        C.resolve(promise).then(function (value) {\n          if (alreadyCalled) return;\n          alreadyCalled = true;\n          values[$index] = value;\n          --remaining || resolve(values);\n        }, reject);\n      });\n      --remaining || resolve(values);\n    });\n    if (result.e) reject(result.v);\n    return capability.promise;\n  },\n  // 25.4.4.4 Promise.race(iterable)\n  race: function race(iterable) {\n    var C = this;\n    var capability = newPromiseCapability(C);\n    var reject = capability.reject;\n    var result = perform(function () {\n      forOf(iterable, false, function (promise) {\n        C.resolve(promise).then(capability.resolve, reject);\n      });\n    });\n    if (result.e) reject(result.v);\n    return capability.promise;\n  }\n});\n","// 26.1.1 Reflect.apply(target, thisArgument, argumentsList)\nvar $export = require('./_export');\nvar aFunction = require('./_a-function');\nvar anObject = require('./_an-object');\nvar rApply = (require('./_global').Reflect || {}).apply;\nvar fApply = Function.apply;\n// MS Edge argumentsList argument is optional\n$export($export.S + $export.F * !require('./_fails')(function () {\n  rApply(function () { /* empty */ });\n}), 'Reflect', {\n  apply: function apply(target, thisArgument, argumentsList) {\n    var T = aFunction(target);\n    var L = anObject(argumentsList);\n    return rApply ? rApply(T, thisArgument, L) : fApply.call(T, thisArgument, L);\n  }\n});\n","// 26.1.2 Reflect.construct(target, argumentsList [, newTarget])\nvar $export = require('./_export');\nvar create = require('./_object-create');\nvar aFunction = require('./_a-function');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar bind = require('./_bind');\nvar rConstruct = (require('./_global').Reflect || {}).construct;\n\n// MS Edge supports only 2 arguments and argumentsList argument is optional\n// FF Nightly sets third argument as `new.target`, but does not create `this` from it\nvar NEW_TARGET_BUG = fails(function () {\n  function F() { /* empty */ }\n  return !(rConstruct(function () { /* empty */ }, [], F) instanceof F);\n});\nvar ARGS_BUG = !fails(function () {\n  rConstruct(function () { /* empty */ });\n});\n\n$export($export.S + $export.F * (NEW_TARGET_BUG || ARGS_BUG), 'Reflect', {\n  construct: function construct(Target, args /* , newTarget */) {\n    aFunction(Target);\n    anObject(args);\n    var newTarget = arguments.length < 3 ? Target : aFunction(arguments[2]);\n    if (ARGS_BUG && !NEW_TARGET_BUG) return rConstruct(Target, args, newTarget);\n    if (Target == newTarget) {\n      // w/o altered newTarget, optimization for 0-4 arguments\n      switch (args.length) {\n        case 0: return new Target();\n        case 1: return new Target(args[0]);\n        case 2: return new Target(args[0], args[1]);\n        case 3: return new Target(args[0], args[1], args[2]);\n        case 4: return new Target(args[0], args[1], args[2], args[3]);\n      }\n      // w/o altered newTarget, lot of arguments case\n      var $args = [null];\n      $args.push.apply($args, args);\n      return new (bind.apply(Target, $args))();\n    }\n    // with altered newTarget, not support built-in constructors\n    var proto = newTarget.prototype;\n    var instance = create(isObject(proto) ? proto : Object.prototype);\n    var result = Function.apply.call(Target, instance, args);\n    return isObject(result) ? result : instance;\n  }\n});\n","// 26.1.3 Reflect.defineProperty(target, propertyKey, attributes)\nvar dP = require('./_object-dp');\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar toPrimitive = require('./_to-primitive');\n\n// MS Edge has broken Reflect.defineProperty - throwing instead of returning false\n$export($export.S + $export.F * require('./_fails')(function () {\n  // eslint-disable-next-line no-undef\n  Reflect.defineProperty(dP.f({}, 1, { value: 1 }), 1, { value: 2 });\n}), 'Reflect', {\n  defineProperty: function defineProperty(target, propertyKey, attributes) {\n    anObject(target);\n    propertyKey = toPrimitive(propertyKey, true);\n    anObject(attributes);\n    try {\n      dP.f(target, propertyKey, attributes);\n      return true;\n    } catch (e) {\n      return false;\n    }\n  }\n});\n","// 26.1.4 Reflect.deleteProperty(target, propertyKey)\nvar $export = require('./_export');\nvar gOPD = require('./_object-gopd').f;\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n  deleteProperty: function deleteProperty(target, propertyKey) {\n    var desc = gOPD(anObject(target), propertyKey);\n    return desc && !desc.configurable ? false : delete target[propertyKey];\n  }\n});\n","'use strict';\n// 26.1.5 Reflect.enumerate(target)\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar Enumerate = function (iterated) {\n  this._t = anObject(iterated); // target\n  this._i = 0;                  // next index\n  var keys = this._k = [];      // keys\n  var key;\n  for (key in iterated) keys.push(key);\n};\nrequire('./_iter-create')(Enumerate, 'Object', function () {\n  var that = this;\n  var keys = that._k;\n  var key;\n  do {\n    if (that._i >= keys.length) return { value: undefined, done: true };\n  } while (!((key = keys[that._i++]) in that._t));\n  return { value: key, done: false };\n});\n\n$export($export.S, 'Reflect', {\n  enumerate: function enumerate(target) {\n    return new Enumerate(target);\n  }\n});\n","// 26.1.7 Reflect.getOwnPropertyDescriptor(target, propertyKey)\nvar gOPD = require('./_object-gopd');\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n  getOwnPropertyDescriptor: function getOwnPropertyDescriptor(target, propertyKey) {\n    return gOPD.f(anObject(target), propertyKey);\n  }\n});\n","// 26.1.8 Reflect.getPrototypeOf(target)\nvar $export = require('./_export');\nvar getProto = require('./_object-gpo');\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n  getPrototypeOf: function getPrototypeOf(target) {\n    return getProto(anObject(target));\n  }\n});\n","// 26.1.6 Reflect.get(target, propertyKey [, receiver])\nvar gOPD = require('./_object-gopd');\nvar getPrototypeOf = require('./_object-gpo');\nvar has = require('./_has');\nvar $export = require('./_export');\nvar isObject = require('./_is-object');\nvar anObject = require('./_an-object');\n\nfunction get(target, propertyKey /* , receiver */) {\n  var receiver = arguments.length < 3 ? target : arguments[2];\n  var desc, proto;\n  if (anObject(target) === receiver) return target[propertyKey];\n  if (desc = gOPD.f(target, propertyKey)) return has(desc, 'value')\n    ? desc.value\n    : desc.get !== undefined\n      ? desc.get.call(receiver)\n      : undefined;\n  if (isObject(proto = getPrototypeOf(target))) return get(proto, propertyKey, receiver);\n}\n\n$export($export.S, 'Reflect', { get: get });\n","// 26.1.9 Reflect.has(target, propertyKey)\nvar $export = require('./_export');\n\n$export($export.S, 'Reflect', {\n  has: function has(target, propertyKey) {\n    return propertyKey in target;\n  }\n});\n","// 26.1.10 Reflect.isExtensible(target)\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar $isExtensible = Object.isExtensible;\n\n$export($export.S, 'Reflect', {\n  isExtensible: function isExtensible(target) {\n    anObject(target);\n    return $isExtensible ? $isExtensible(target) : true;\n  }\n});\n","// 26.1.11 Reflect.ownKeys(target)\nvar $export = require('./_export');\n\n$export($export.S, 'Reflect', { ownKeys: require('./_own-keys') });\n","// 26.1.12 Reflect.preventExtensions(target)\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar $preventExtensions = Object.preventExtensions;\n\n$export($export.S, 'Reflect', {\n  preventExtensions: function preventExtensions(target) {\n    anObject(target);\n    try {\n      if ($preventExtensions) $preventExtensions(target);\n      return true;\n    } catch (e) {\n      return false;\n    }\n  }\n});\n","// 26.1.14 Reflect.setPrototypeOf(target, proto)\nvar $export = require('./_export');\nvar setProto = require('./_set-proto');\n\nif (setProto) $export($export.S, 'Reflect', {\n  setPrototypeOf: function setPrototypeOf(target, proto) {\n    setProto.check(target, proto);\n    try {\n      setProto.set(target, proto);\n      return true;\n    } catch (e) {\n      return false;\n    }\n  }\n});\n","// 26.1.13 Reflect.set(target, propertyKey, V [, receiver])\nvar dP = require('./_object-dp');\nvar gOPD = require('./_object-gopd');\nvar getPrototypeOf = require('./_object-gpo');\nvar has = require('./_has');\nvar $export = require('./_export');\nvar createDesc = require('./_property-desc');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\n\nfunction set(target, propertyKey, V /* , receiver */) {\n  var receiver = arguments.length < 4 ? target : arguments[3];\n  var ownDesc = gOPD.f(anObject(target), propertyKey);\n  var existingDescriptor, proto;\n  if (!ownDesc) {\n    if (isObject(proto = getPrototypeOf(target))) {\n      return set(proto, propertyKey, V, receiver);\n    }\n    ownDesc = createDesc(0);\n  }\n  if (has(ownDesc, 'value')) {\n    if (ownDesc.writable === false || !isObject(receiver)) return false;\n    if (existingDescriptor = gOPD.f(receiver, propertyKey)) {\n      if (existingDescriptor.get || existingDescriptor.set || existingDescriptor.writable === false) return false;\n      existingDescriptor.value = V;\n      dP.f(receiver, propertyKey, existingDescriptor);\n    } else dP.f(receiver, propertyKey, createDesc(0, V));\n    return true;\n  }\n  return ownDesc.set === undefined ? false : (ownDesc.set.call(receiver, V), true);\n}\n\n$export($export.S, 'Reflect', { set: set });\n","var global = require('./_global');\nvar inheritIfRequired = require('./_inherit-if-required');\nvar dP = require('./_object-dp').f;\nvar gOPN = require('./_object-gopn').f;\nvar isRegExp = require('./_is-regexp');\nvar $flags = require('./_flags');\nvar $RegExp = global.RegExp;\nvar Base = $RegExp;\nvar proto = $RegExp.prototype;\nvar re1 = /a/g;\nvar re2 = /a/g;\n// \"new\" creates a new object, old webkit buggy here\nvar CORRECT_NEW = new $RegExp(re1) !== re1;\n\nif (require('./_descriptors') && (!CORRECT_NEW || require('./_fails')(function () {\n  re2[require('./_wks')('match')] = false;\n  // RegExp constructor can alter flags and IsRegExp works correct with @@match\n  return $RegExp(re1) != re1 || $RegExp(re2) == re2 || $RegExp(re1, 'i') != '/a/i';\n}))) {\n  $RegExp = function RegExp(p, f) {\n    var tiRE = this instanceof $RegExp;\n    var piRE = isRegExp(p);\n    var fiU = f === undefined;\n    return !tiRE && piRE && p.constructor === $RegExp && fiU ? p\n      : inheritIfRequired(CORRECT_NEW\n        ? new Base(piRE && !fiU ? p.source : p, f)\n        : Base((piRE = p instanceof $RegExp) ? p.source : p, piRE && fiU ? $flags.call(p) : f)\n      , tiRE ? this : proto, $RegExp);\n  };\n  var proxy = function (key) {\n    key in $RegExp || dP($RegExp, key, {\n      configurable: true,\n      get: function () { return Base[key]; },\n      set: function (it) { Base[key] = it; }\n    });\n  };\n  for (var keys = gOPN(Base), i = 0; keys.length > i;) proxy(keys[i++]);\n  proto.constructor = $RegExp;\n  $RegExp.prototype = proto;\n  require('./_redefine')(global, 'RegExp', $RegExp);\n}\n\nrequire('./_set-species')('RegExp');\n","'use strict';\nvar regexpExec = require('./_regexp-exec');\nrequire('./_export')({\n  target: 'RegExp',\n  proto: true,\n  forced: regexpExec !== /./.exec\n}, {\n  exec: regexpExec\n});\n","// 21.2.5.3 get RegExp.prototype.flags()\nif (require('./_descriptors') && /./g.flags != 'g') require('./_object-dp').f(RegExp.prototype, 'flags', {\n  configurable: true,\n  get: require('./_flags')\n});\n","'use strict';\n\nvar anObject = require('./_an-object');\nvar toLength = require('./_to-length');\nvar advanceStringIndex = require('./_advance-string-index');\nvar regExpExec = require('./_regexp-exec-abstract');\n\n// @@match logic\nrequire('./_fix-re-wks')('match', 1, function (defined, MATCH, $match, maybeCallNative) {\n  return [\n    // `String.prototype.match` method\n    // https://tc39.github.io/ecma262/#sec-string.prototype.match\n    function match(regexp) {\n      var O = defined(this);\n      var fn = regexp == undefined ? undefined : regexp[MATCH];\n      return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[MATCH](String(O));\n    },\n    // `RegExp.prototype[@@match]` method\n    // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@match\n    function (regexp) {\n      var res = maybeCallNative($match, regexp, this);\n      if (res.done) return res.value;\n      var rx = anObject(regexp);\n      var S = String(this);\n      if (!rx.global) return regExpExec(rx, S);\n      var fullUnicode = rx.unicode;\n      rx.lastIndex = 0;\n      var A = [];\n      var n = 0;\n      var result;\n      while ((result = regExpExec(rx, S)) !== null) {\n        var matchStr = String(result[0]);\n        A[n] = matchStr;\n        if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);\n        n++;\n      }\n      return n === 0 ? null : A;\n    }\n  ];\n});\n","'use strict';\n\nvar anObject = require('./_an-object');\nvar toObject = require('./_to-object');\nvar toLength = require('./_to-length');\nvar toInteger = require('./_to-integer');\nvar advanceStringIndex = require('./_advance-string-index');\nvar regExpExec = require('./_regexp-exec-abstract');\nvar max = Math.max;\nvar min = Math.min;\nvar floor = Math.floor;\nvar SUBSTITUTION_SYMBOLS = /\\$([$&`']|\\d\\d?|<[^>]*>)/g;\nvar SUBSTITUTION_SYMBOLS_NO_NAMED = /\\$([$&`']|\\d\\d?)/g;\n\nvar maybeToString = function (it) {\n  return it === undefined ? it : String(it);\n};\n\n// @@replace logic\nrequire('./_fix-re-wks')('replace', 2, function (defined, REPLACE, $replace, maybeCallNative) {\n  return [\n    // `String.prototype.replace` method\n    // https://tc39.github.io/ecma262/#sec-string.prototype.replace\n    function replace(searchValue, replaceValue) {\n      var O = defined(this);\n      var fn = searchValue == undefined ? undefined : searchValue[REPLACE];\n      return fn !== undefined\n        ? fn.call(searchValue, O, replaceValue)\n        : $replace.call(String(O), searchValue, replaceValue);\n    },\n    // `RegExp.prototype[@@replace]` method\n    // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@replace\n    function (regexp, replaceValue) {\n      var res = maybeCallNative($replace, regexp, this, replaceValue);\n      if (res.done) return res.value;\n\n      var rx = anObject(regexp);\n      var S = String(this);\n      var functionalReplace = typeof replaceValue === 'function';\n      if (!functionalReplace) replaceValue = String(replaceValue);\n      var global = rx.global;\n      if (global) {\n        var fullUnicode = rx.unicode;\n        rx.lastIndex = 0;\n      }\n      var results = [];\n      while (true) {\n        var result = regExpExec(rx, S);\n        if (result === null) break;\n        results.push(result);\n        if (!global) break;\n        var matchStr = String(result[0]);\n        if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);\n      }\n      var accumulatedResult = '';\n      var nextSourcePosition = 0;\n      for (var i = 0; i < results.length; i++) {\n        result = results[i];\n        var matched = String(result[0]);\n        var position = max(min(toInteger(result.index), S.length), 0);\n        var captures = [];\n        // NOTE: This is equivalent to\n        //   captures = result.slice(1).map(maybeToString)\n        // but for some reason `nativeSlice.call(result, 1, result.length)` (called in\n        // the slice polyfill when slicing native arrays) \"doesn't work\" in safari 9 and\n        // causes a crash (https://pastebin.com/N21QzeQA) when trying to debug it.\n        for (var j = 1; j < result.length; j++) captures.push(maybeToString(result[j]));\n        var namedCaptures = result.groups;\n        if (functionalReplace) {\n          var replacerArgs = [matched].concat(captures, position, S);\n          if (namedCaptures !== undefined) replacerArgs.push(namedCaptures);\n          var replacement = String(replaceValue.apply(undefined, replacerArgs));\n        } else {\n          replacement = getSubstitution(matched, S, position, captures, namedCaptures, replaceValue);\n        }\n        if (position >= nextSourcePosition) {\n          accumulatedResult += S.slice(nextSourcePosition, position) + replacement;\n          nextSourcePosition = position + matched.length;\n        }\n      }\n      return accumulatedResult + S.slice(nextSourcePosition);\n    }\n  ];\n\n    // https://tc39.github.io/ecma262/#sec-getsubstitution\n  function getSubstitution(matched, str, position, captures, namedCaptures, replacement) {\n    var tailPos = position + matched.length;\n    var m = captures.length;\n    var symbols = SUBSTITUTION_SYMBOLS_NO_NAMED;\n    if (namedCaptures !== undefined) {\n      namedCaptures = toObject(namedCaptures);\n      symbols = SUBSTITUTION_SYMBOLS;\n    }\n    return $replace.call(replacement, symbols, function (match, ch) {\n      var capture;\n      switch (ch.charAt(0)) {\n        case '$': return '$';\n        case '&': return matched;\n        case '`': return str.slice(0, position);\n        case \"'\": return str.slice(tailPos);\n        case '<':\n          capture = namedCaptures[ch.slice(1, -1)];\n          break;\n        default: // \\d\\d?\n          var n = +ch;\n          if (n === 0) return match;\n          if (n > m) {\n            var f = floor(n / 10);\n            if (f === 0) return match;\n            if (f <= m) return captures[f - 1] === undefined ? ch.charAt(1) : captures[f - 1] + ch.charAt(1);\n            return match;\n          }\n          capture = captures[n - 1];\n      }\n      return capture === undefined ? '' : capture;\n    });\n  }\n});\n","'use strict';\n\nvar anObject = require('./_an-object');\nvar sameValue = require('./_same-value');\nvar regExpExec = require('./_regexp-exec-abstract');\n\n// @@search logic\nrequire('./_fix-re-wks')('search', 1, function (defined, SEARCH, $search, maybeCallNative) {\n  return [\n    // `String.prototype.search` method\n    // https://tc39.github.io/ecma262/#sec-string.prototype.search\n    function search(regexp) {\n      var O = defined(this);\n      var fn = regexp == undefined ? undefined : regexp[SEARCH];\n      return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[SEARCH](String(O));\n    },\n    // `RegExp.prototype[@@search]` method\n    // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@search\n    function (regexp) {\n      var res = maybeCallNative($search, regexp, this);\n      if (res.done) return res.value;\n      var rx = anObject(regexp);\n      var S = String(this);\n      var previousLastIndex = rx.lastIndex;\n      if (!sameValue(previousLastIndex, 0)) rx.lastIndex = 0;\n      var result = regExpExec(rx, S);\n      if (!sameValue(rx.lastIndex, previousLastIndex)) rx.lastIndex = previousLastIndex;\n      return result === null ? -1 : result.index;\n    }\n  ];\n});\n","'use strict';\n\nvar isRegExp = require('./_is-regexp');\nvar anObject = require('./_an-object');\nvar speciesConstructor = require('./_species-constructor');\nvar advanceStringIndex = require('./_advance-string-index');\nvar toLength = require('./_to-length');\nvar callRegExpExec = require('./_regexp-exec-abstract');\nvar regexpExec = require('./_regexp-exec');\nvar fails = require('./_fails');\nvar $min = Math.min;\nvar $push = [].push;\nvar $SPLIT = 'split';\nvar LENGTH = 'length';\nvar LAST_INDEX = 'lastIndex';\nvar MAX_UINT32 = 0xffffffff;\n\n// babel-minify transpiles RegExp('x', 'y') -> /x/y and it causes SyntaxError\nvar SUPPORTS_Y = !fails(function () { RegExp(MAX_UINT32, 'y'); });\n\n// @@split logic\nrequire('./_fix-re-wks')('split', 2, function (defined, SPLIT, $split, maybeCallNative) {\n  var internalSplit;\n  if (\n    'abbc'[$SPLIT](/(b)*/)[1] == 'c' ||\n    'test'[$SPLIT](/(?:)/, -1)[LENGTH] != 4 ||\n    'ab'[$SPLIT](/(?:ab)*/)[LENGTH] != 2 ||\n    '.'[$SPLIT](/(.?)(.?)/)[LENGTH] != 4 ||\n    '.'[$SPLIT](/()()/)[LENGTH] > 1 ||\n    ''[$SPLIT](/.?/)[LENGTH]\n  ) {\n    // based on es5-shim implementation, need to rework it\n    internalSplit = function (separator, limit) {\n      var string = String(this);\n      if (separator === undefined && limit === 0) return [];\n      // If `separator` is not a regex, use native split\n      if (!isRegExp(separator)) return $split.call(string, separator, limit);\n      var output = [];\n      var flags = (separator.ignoreCase ? 'i' : '') +\n                  (separator.multiline ? 'm' : '') +\n                  (separator.unicode ? 'u' : '') +\n                  (separator.sticky ? 'y' : '');\n      var lastLastIndex = 0;\n      var splitLimit = limit === undefined ? MAX_UINT32 : limit >>> 0;\n      // Make `global` and avoid `lastIndex` issues by working with a copy\n      var separatorCopy = new RegExp(separator.source, flags + 'g');\n      var match, lastIndex, lastLength;\n      while (match = regexpExec.call(separatorCopy, string)) {\n        lastIndex = separatorCopy[LAST_INDEX];\n        if (lastIndex > lastLastIndex) {\n          output.push(string.slice(lastLastIndex, match.index));\n          if (match[LENGTH] > 1 && match.index < string[LENGTH]) $push.apply(output, match.slice(1));\n          lastLength = match[0][LENGTH];\n          lastLastIndex = lastIndex;\n          if (output[LENGTH] >= splitLimit) break;\n        }\n        if (separatorCopy[LAST_INDEX] === match.index) separatorCopy[LAST_INDEX]++; // Avoid an infinite loop\n      }\n      if (lastLastIndex === string[LENGTH]) {\n        if (lastLength || !separatorCopy.test('')) output.push('');\n      } else output.push(string.slice(lastLastIndex));\n      return output[LENGTH] > splitLimit ? output.slice(0, splitLimit) : output;\n    };\n  // Chakra, V8\n  } else if ('0'[$SPLIT](undefined, 0)[LENGTH]) {\n    internalSplit = function (separator, limit) {\n      return separator === undefined && limit === 0 ? [] : $split.call(this, separator, limit);\n    };\n  } else {\n    internalSplit = $split;\n  }\n\n  return [\n    // `String.prototype.split` method\n    // https://tc39.github.io/ecma262/#sec-string.prototype.split\n    function split(separator, limit) {\n      var O = defined(this);\n      var splitter = separator == undefined ? undefined : separator[SPLIT];\n      return splitter !== undefined\n        ? splitter.call(separator, O, limit)\n        : internalSplit.call(String(O), separator, limit);\n    },\n    // `RegExp.prototype[@@split]` method\n    // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@split\n    //\n    // NOTE: This cannot be properly polyfilled in engines that don't support\n    // the 'y' flag.\n    function (regexp, limit) {\n      var res = maybeCallNative(internalSplit, regexp, this, limit, internalSplit !== $split);\n      if (res.done) return res.value;\n\n      var rx = anObject(regexp);\n      var S = String(this);\n      var C = speciesConstructor(rx, RegExp);\n\n      var unicodeMatching = rx.unicode;\n      var flags = (rx.ignoreCase ? 'i' : '') +\n                  (rx.multiline ? 'm' : '') +\n                  (rx.unicode ? 'u' : '') +\n                  (SUPPORTS_Y ? 'y' : 'g');\n\n      // ^(? + rx + ) is needed, in combination with some S slicing, to\n      // simulate the 'y' flag.\n      var splitter = new C(SUPPORTS_Y ? rx : '^(?:' + rx.source + ')', flags);\n      var lim = limit === undefined ? MAX_UINT32 : limit >>> 0;\n      if (lim === 0) return [];\n      if (S.length === 0) return callRegExpExec(splitter, S) === null ? [S] : [];\n      var p = 0;\n      var q = 0;\n      var A = [];\n      while (q < S.length) {\n        splitter.lastIndex = SUPPORTS_Y ? q : 0;\n        var z = callRegExpExec(splitter, SUPPORTS_Y ? S : S.slice(q));\n        var e;\n        if (\n          z === null ||\n          (e = $min(toLength(splitter.lastIndex + (SUPPORTS_Y ? 0 : q)), S.length)) === p\n        ) {\n          q = advanceStringIndex(S, q, unicodeMatching);\n        } else {\n          A.push(S.slice(p, q));\n          if (A.length === lim) return A;\n          for (var i = 1; i <= z.length - 1; i++) {\n            A.push(z[i]);\n            if (A.length === lim) return A;\n          }\n          q = p = e;\n        }\n      }\n      A.push(S.slice(p));\n      return A;\n    }\n  ];\n});\n","'use strict';\nrequire('./es6.regexp.flags');\nvar anObject = require('./_an-object');\nvar $flags = require('./_flags');\nvar DESCRIPTORS = require('./_descriptors');\nvar TO_STRING = 'toString';\nvar $toString = /./[TO_STRING];\n\nvar define = function (fn) {\n  require('./_redefine')(RegExp.prototype, TO_STRING, fn, true);\n};\n\n// 21.2.5.14 RegExp.prototype.toString()\nif (require('./_fails')(function () { return $toString.call({ source: 'a', flags: 'b' }) != '/a/b'; })) {\n  define(function toString() {\n    var R = anObject(this);\n    return '/'.concat(R.source, '/',\n      'flags' in R ? R.flags : !DESCRIPTORS && R instanceof RegExp ? $flags.call(R) : undefined);\n  });\n// FF44- RegExp#toString has a wrong name\n} else if ($toString.name != TO_STRING) {\n  define(function toString() {\n    return $toString.call(this);\n  });\n}\n","'use strict';\nvar strong = require('./_collection-strong');\nvar validate = require('./_validate-collection');\nvar SET = 'Set';\n\n// 23.2 Set Objects\nmodule.exports = require('./_collection')(SET, function (get) {\n  return function Set() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n  // 23.2.3.1 Set.prototype.add(value)\n  add: function add(value) {\n    return strong.def(validate(this, SET), value = value === 0 ? 0 : value, value);\n  }\n}, strong);\n","'use strict';\n// B.2.3.2 String.prototype.anchor(name)\nrequire('./_string-html')('anchor', function (createHTML) {\n  return function anchor(name) {\n    return createHTML(this, 'a', 'name', name);\n  };\n});\n","'use strict';\n// B.2.3.3 String.prototype.big()\nrequire('./_string-html')('big', function (createHTML) {\n  return function big() {\n    return createHTML(this, 'big', '', '');\n  };\n});\n","'use strict';\n// B.2.3.4 String.prototype.blink()\nrequire('./_string-html')('blink', function (createHTML) {\n  return function blink() {\n    return createHTML(this, 'blink', '', '');\n  };\n});\n","'use strict';\n// B.2.3.5 String.prototype.bold()\nrequire('./_string-html')('bold', function (createHTML) {\n  return function bold() {\n    return createHTML(this, 'b', '', '');\n  };\n});\n","'use strict';\nvar $export = require('./_export');\nvar $at = require('./_string-at')(false);\n$export($export.P, 'String', {\n  // 21.1.3.3 String.prototype.codePointAt(pos)\n  codePointAt: function codePointAt(pos) {\n    return $at(this, pos);\n  }\n});\n","// 21.1.3.6 String.prototype.endsWith(searchString [, endPosition])\n'use strict';\nvar $export = require('./_export');\nvar toLength = require('./_to-length');\nvar context = require('./_string-context');\nvar ENDS_WITH = 'endsWith';\nvar $endsWith = ''[ENDS_WITH];\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(ENDS_WITH), 'String', {\n  endsWith: function endsWith(searchString /* , endPosition = @length */) {\n    var that = context(this, searchString, ENDS_WITH);\n    var endPosition = arguments.length > 1 ? arguments[1] : undefined;\n    var len = toLength(that.length);\n    var end = endPosition === undefined ? len : Math.min(toLength(endPosition), len);\n    var search = String(searchString);\n    return $endsWith\n      ? $endsWith.call(that, search, end)\n      : that.slice(end - search.length, end) === search;\n  }\n});\n","'use strict';\n// B.2.3.6 String.prototype.fixed()\nrequire('./_string-html')('fixed', function (createHTML) {\n  return function fixed() {\n    return createHTML(this, 'tt', '', '');\n  };\n});\n","'use strict';\n// B.2.3.7 String.prototype.fontcolor(color)\nrequire('./_string-html')('fontcolor', function (createHTML) {\n  return function fontcolor(color) {\n    return createHTML(this, 'font', 'color', color);\n  };\n});\n","'use strict';\n// B.2.3.8 String.prototype.fontsize(size)\nrequire('./_string-html')('fontsize', function (createHTML) {\n  return function fontsize(size) {\n    return createHTML(this, 'font', 'size', size);\n  };\n});\n","var $export = require('./_export');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar fromCharCode = String.fromCharCode;\nvar $fromCodePoint = String.fromCodePoint;\n\n// length should be 1, old FF problem\n$export($export.S + $export.F * (!!$fromCodePoint && $fromCodePoint.length != 1), 'String', {\n  // 21.1.2.2 String.fromCodePoint(...codePoints)\n  fromCodePoint: function fromCodePoint(x) { // eslint-disable-line no-unused-vars\n    var res = [];\n    var aLen = arguments.length;\n    var i = 0;\n    var code;\n    while (aLen > i) {\n      code = +arguments[i++];\n      if (toAbsoluteIndex(code, 0x10ffff) !== code) throw RangeError(code + ' is not a valid code point');\n      res.push(code < 0x10000\n        ? fromCharCode(code)\n        : fromCharCode(((code -= 0x10000) >> 10) + 0xd800, code % 0x400 + 0xdc00)\n      );\n    } return res.join('');\n  }\n});\n","// 21.1.3.7 String.prototype.includes(searchString, position = 0)\n'use strict';\nvar $export = require('./_export');\nvar context = require('./_string-context');\nvar INCLUDES = 'includes';\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(INCLUDES), 'String', {\n  includes: function includes(searchString /* , position = 0 */) {\n    return !!~context(this, searchString, INCLUDES)\n      .indexOf(searchString, arguments.length > 1 ? arguments[1] : undefined);\n  }\n});\n","'use strict';\n// B.2.3.9 String.prototype.italics()\nrequire('./_string-html')('italics', function (createHTML) {\n  return function italics() {\n    return createHTML(this, 'i', '', '');\n  };\n});\n","'use strict';\nvar $at = require('./_string-at')(true);\n\n// 21.1.3.27 String.prototype[@@iterator]()\nrequire('./_iter-define')(String, 'String', function (iterated) {\n  this._t = String(iterated); // target\n  this._i = 0;                // next index\n// 21.1.5.2.1 %StringIteratorPrototype%.next()\n}, function () {\n  var O = this._t;\n  var index = this._i;\n  var point;\n  if (index >= O.length) return { value: undefined, done: true };\n  point = $at(O, index);\n  this._i += point.length;\n  return { value: point, done: false };\n});\n","'use strict';\n// B.2.3.10 String.prototype.link(url)\nrequire('./_string-html')('link', function (createHTML) {\n  return function link(url) {\n    return createHTML(this, 'a', 'href', url);\n  };\n});\n","var $export = require('./_export');\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\n\n$export($export.S, 'String', {\n  // 21.1.2.4 String.raw(callSite, ...substitutions)\n  raw: function raw(callSite) {\n    var tpl = toIObject(callSite.raw);\n    var len = toLength(tpl.length);\n    var aLen = arguments.length;\n    var res = [];\n    var i = 0;\n    while (len > i) {\n      res.push(String(tpl[i++]));\n      if (i < aLen) res.push(String(arguments[i]));\n    } return res.join('');\n  }\n});\n","var $export = require('./_export');\n\n$export($export.P, 'String', {\n  // 21.1.3.13 String.prototype.repeat(count)\n  repeat: require('./_string-repeat')\n});\n","'use strict';\n// B.2.3.11 String.prototype.small()\nrequire('./_string-html')('small', function (createHTML) {\n  return function small() {\n    return createHTML(this, 'small', '', '');\n  };\n});\n","// 21.1.3.18 String.prototype.startsWith(searchString [, position ])\n'use strict';\nvar $export = require('./_export');\nvar toLength = require('./_to-length');\nvar context = require('./_string-context');\nvar STARTS_WITH = 'startsWith';\nvar $startsWith = ''[STARTS_WITH];\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(STARTS_WITH), 'String', {\n  startsWith: function startsWith(searchString /* , position = 0 */) {\n    var that = context(this, searchString, STARTS_WITH);\n    var index = toLength(Math.min(arguments.length > 1 ? arguments[1] : undefined, that.length));\n    var search = String(searchString);\n    return $startsWith\n      ? $startsWith.call(that, search, index)\n      : that.slice(index, index + search.length) === search;\n  }\n});\n","'use strict';\n// B.2.3.12 String.prototype.strike()\nrequire('./_string-html')('strike', function (createHTML) {\n  return function strike() {\n    return createHTML(this, 'strike', '', '');\n  };\n});\n","'use strict';\n// B.2.3.13 String.prototype.sub()\nrequire('./_string-html')('sub', function (createHTML) {\n  return function sub() {\n    return createHTML(this, 'sub', '', '');\n  };\n});\n","'use strict';\n// B.2.3.14 String.prototype.sup()\nrequire('./_string-html')('sup', function (createHTML) {\n  return function sup() {\n    return createHTML(this, 'sup', '', '');\n  };\n});\n","'use strict';\n// 21.1.3.25 String.prototype.trim()\nrequire('./_string-trim')('trim', function ($trim) {\n  return function trim() {\n    return $trim(this, 3);\n  };\n});\n","'use strict';\n// ECMAScript 6 symbols shim\nvar global = require('./_global');\nvar has = require('./_has');\nvar DESCRIPTORS = require('./_descriptors');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar META = require('./_meta').KEY;\nvar $fails = require('./_fails');\nvar shared = require('./_shared');\nvar setToStringTag = require('./_set-to-string-tag');\nvar uid = require('./_uid');\nvar wks = require('./_wks');\nvar wksExt = require('./_wks-ext');\nvar wksDefine = require('./_wks-define');\nvar enumKeys = require('./_enum-keys');\nvar isArray = require('./_is-array');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar toObject = require('./_to-object');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar createDesc = require('./_property-desc');\nvar _create = require('./_object-create');\nvar gOPNExt = require('./_object-gopn-ext');\nvar $GOPD = require('./_object-gopd');\nvar $GOPS = require('./_object-gops');\nvar $DP = require('./_object-dp');\nvar $keys = require('./_object-keys');\nvar gOPD = $GOPD.f;\nvar dP = $DP.f;\nvar gOPN = gOPNExt.f;\nvar $Symbol = global.Symbol;\nvar $JSON = global.JSON;\nvar _stringify = $JSON && $JSON.stringify;\nvar PROTOTYPE = 'prototype';\nvar HIDDEN = wks('_hidden');\nvar TO_PRIMITIVE = wks('toPrimitive');\nvar isEnum = {}.propertyIsEnumerable;\nvar SymbolRegistry = shared('symbol-registry');\nvar AllSymbols = shared('symbols');\nvar OPSymbols = shared('op-symbols');\nvar ObjectProto = Object[PROTOTYPE];\nvar USE_NATIVE = typeof $Symbol == 'function' && !!$GOPS.f;\nvar QObject = global.QObject;\n// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173\nvar setter = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;\n\n// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\nvar setSymbolDesc = DESCRIPTORS && $fails(function () {\n  return _create(dP({}, 'a', {\n    get: function () { return dP(this, 'a', { value: 7 }).a; }\n  })).a != 7;\n}) ? function (it, key, D) {\n  var protoDesc = gOPD(ObjectProto, key);\n  if (protoDesc) delete ObjectProto[key];\n  dP(it, key, D);\n  if (protoDesc && it !== ObjectProto) dP(ObjectProto, key, protoDesc);\n} : dP;\n\nvar wrap = function (tag) {\n  var sym = AllSymbols[tag] = _create($Symbol[PROTOTYPE]);\n  sym._k = tag;\n  return sym;\n};\n\nvar isSymbol = USE_NATIVE && typeof $Symbol.iterator == 'symbol' ? function (it) {\n  return typeof it == 'symbol';\n} : function (it) {\n  return it instanceof $Symbol;\n};\n\nvar $defineProperty = function defineProperty(it, key, D) {\n  if (it === ObjectProto) $defineProperty(OPSymbols, key, D);\n  anObject(it);\n  key = toPrimitive(key, true);\n  anObject(D);\n  if (has(AllSymbols, key)) {\n    if (!D.enumerable) {\n      if (!has(it, HIDDEN)) dP(it, HIDDEN, createDesc(1, {}));\n      it[HIDDEN][key] = true;\n    } else {\n      if (has(it, HIDDEN) && it[HIDDEN][key]) it[HIDDEN][key] = false;\n      D = _create(D, { enumerable: createDesc(0, false) });\n    } return setSymbolDesc(it, key, D);\n  } return dP(it, key, D);\n};\nvar $defineProperties = function defineProperties(it, P) {\n  anObject(it);\n  var keys = enumKeys(P = toIObject(P));\n  var i = 0;\n  var l = keys.length;\n  var key;\n  while (l > i) $defineProperty(it, key = keys[i++], P[key]);\n  return it;\n};\nvar $create = function create(it, P) {\n  return P === undefined ? _create(it) : $defineProperties(_create(it), P);\n};\nvar $propertyIsEnumerable = function propertyIsEnumerable(key) {\n  var E = isEnum.call(this, key = toPrimitive(key, true));\n  if (this === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return false;\n  return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] ? E : true;\n};\nvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key) {\n  it = toIObject(it);\n  key = toPrimitive(key, true);\n  if (it === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return;\n  var D = gOPD(it, key);\n  if (D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key])) D.enumerable = true;\n  return D;\n};\nvar $getOwnPropertyNames = function getOwnPropertyNames(it) {\n  var names = gOPN(toIObject(it));\n  var result = [];\n  var i = 0;\n  var key;\n  while (names.length > i) {\n    if (!has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META) result.push(key);\n  } return result;\n};\nvar $getOwnPropertySymbols = function getOwnPropertySymbols(it) {\n  var IS_OP = it === ObjectProto;\n  var names = gOPN(IS_OP ? OPSymbols : toIObject(it));\n  var result = [];\n  var i = 0;\n  var key;\n  while (names.length > i) {\n    if (has(AllSymbols, key = names[i++]) && (IS_OP ? has(ObjectProto, key) : true)) result.push(AllSymbols[key]);\n  } return result;\n};\n\n// 19.4.1.1 Symbol([description])\nif (!USE_NATIVE) {\n  $Symbol = function Symbol() {\n    if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor!');\n    var tag = uid(arguments.length > 0 ? arguments[0] : undefined);\n    var $set = function (value) {\n      if (this === ObjectProto) $set.call(OPSymbols, value);\n      if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = false;\n      setSymbolDesc(this, tag, createDesc(1, value));\n    };\n    if (DESCRIPTORS && setter) setSymbolDesc(ObjectProto, tag, { configurable: true, set: $set });\n    return wrap(tag);\n  };\n  redefine($Symbol[PROTOTYPE], 'toString', function toString() {\n    return this._k;\n  });\n\n  $GOPD.f = $getOwnPropertyDescriptor;\n  $DP.f = $defineProperty;\n  require('./_object-gopn').f = gOPNExt.f = $getOwnPropertyNames;\n  require('./_object-pie').f = $propertyIsEnumerable;\n  $GOPS.f = $getOwnPropertySymbols;\n\n  if (DESCRIPTORS && !require('./_library')) {\n    redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true);\n  }\n\n  wksExt.f = function (name) {\n    return wrap(wks(name));\n  };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Symbol: $Symbol });\n\nfor (var es6Symbols = (\n  // 19.4.2.2, 19.4.2.3, 19.4.2.4, 19.4.2.6, 19.4.2.8, 19.4.2.9, 19.4.2.10, 19.4.2.11, 19.4.2.12, 19.4.2.13, 19.4.2.14\n  'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables'\n).split(','), j = 0; es6Symbols.length > j;)wks(es6Symbols[j++]);\n\nfor (var wellKnownSymbols = $keys(wks.store), k = 0; wellKnownSymbols.length > k;) wksDefine(wellKnownSymbols[k++]);\n\n$export($export.S + $export.F * !USE_NATIVE, 'Symbol', {\n  // 19.4.2.1 Symbol.for(key)\n  'for': function (key) {\n    return has(SymbolRegistry, key += '')\n      ? SymbolRegistry[key]\n      : SymbolRegistry[key] = $Symbol(key);\n  },\n  // 19.4.2.5 Symbol.keyFor(sym)\n  keyFor: function keyFor(sym) {\n    if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol!');\n    for (var key in SymbolRegistry) if (SymbolRegistry[key] === sym) return key;\n  },\n  useSetter: function () { setter = true; },\n  useSimple: function () { setter = false; }\n});\n\n$export($export.S + $export.F * !USE_NATIVE, 'Object', {\n  // 19.1.2.2 Object.create(O [, Properties])\n  create: $create,\n  // 19.1.2.4 Object.defineProperty(O, P, Attributes)\n  defineProperty: $defineProperty,\n  // 19.1.2.3 Object.defineProperties(O, Properties)\n  defineProperties: $defineProperties,\n  // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\n  getOwnPropertyDescriptor: $getOwnPropertyDescriptor,\n  // 19.1.2.7 Object.getOwnPropertyNames(O)\n  getOwnPropertyNames: $getOwnPropertyNames,\n  // 19.1.2.8 Object.getOwnPropertySymbols(O)\n  getOwnPropertySymbols: $getOwnPropertySymbols\n});\n\n// Chrome 38 and 39 `Object.getOwnPropertySymbols` fails on primitives\n// https://bugs.chromium.org/p/v8/issues/detail?id=3443\nvar FAILS_ON_PRIMITIVES = $fails(function () { $GOPS.f(1); });\n\n$export($export.S + $export.F * FAILS_ON_PRIMITIVES, 'Object', {\n  getOwnPropertySymbols: function getOwnPropertySymbols(it) {\n    return $GOPS.f(toObject(it));\n  }\n});\n\n// 24.3.2 JSON.stringify(value [, replacer [, space]])\n$JSON && $export($export.S + $export.F * (!USE_NATIVE || $fails(function () {\n  var S = $Symbol();\n  // MS Edge converts symbol values to JSON as {}\n  // WebKit converts symbol values to JSON as null\n  // V8 throws on boxed symbols\n  return _stringify([S]) != '[null]' || _stringify({ a: S }) != '{}' || _stringify(Object(S)) != '{}';\n})), 'JSON', {\n  stringify: function stringify(it) {\n    var args = [it];\n    var i = 1;\n    var replacer, $replacer;\n    while (arguments.length > i) args.push(arguments[i++]);\n    $replacer = replacer = args[1];\n    if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined\n    if (!isArray(replacer)) replacer = function (key, value) {\n      if (typeof $replacer == 'function') value = $replacer.call(this, key, value);\n      if (!isSymbol(value)) return value;\n    };\n    args[1] = replacer;\n    return _stringify.apply($JSON, args);\n  }\n});\n\n// 19.4.3.4 Symbol.prototype[@@toPrimitive](hint)\n$Symbol[PROTOTYPE][TO_PRIMITIVE] || require('./_hide')($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf);\n// 19.4.3.5 Symbol.prototype[@@toStringTag]\nsetToStringTag($Symbol, 'Symbol');\n// 20.2.1.9 Math[@@toStringTag]\nsetToStringTag(Math, 'Math', true);\n// 24.3.3 JSON[@@toStringTag]\nsetToStringTag(global.JSON, 'JSON', true);\n","'use strict';\nvar $export = require('./_export');\nvar $typed = require('./_typed');\nvar buffer = require('./_typed-buffer');\nvar anObject = require('./_an-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\nvar isObject = require('./_is-object');\nvar ArrayBuffer = require('./_global').ArrayBuffer;\nvar speciesConstructor = require('./_species-constructor');\nvar $ArrayBuffer = buffer.ArrayBuffer;\nvar $DataView = buffer.DataView;\nvar $isView = $typed.ABV && ArrayBuffer.isView;\nvar $slice = $ArrayBuffer.prototype.slice;\nvar VIEW = $typed.VIEW;\nvar ARRAY_BUFFER = 'ArrayBuffer';\n\n$export($export.G + $export.W + $export.F * (ArrayBuffer !== $ArrayBuffer), { ArrayBuffer: $ArrayBuffer });\n\n$export($export.S + $export.F * !$typed.CONSTR, ARRAY_BUFFER, {\n  // 24.1.3.1 ArrayBuffer.isView(arg)\n  isView: function isView(it) {\n    return $isView && $isView(it) || isObject(it) && VIEW in it;\n  }\n});\n\n$export($export.P + $export.U + $export.F * require('./_fails')(function () {\n  return !new $ArrayBuffer(2).slice(1, undefined).byteLength;\n}), ARRAY_BUFFER, {\n  // 24.1.4.3 ArrayBuffer.prototype.slice(start, end)\n  slice: function slice(start, end) {\n    if ($slice !== undefined && end === undefined) return $slice.call(anObject(this), start); // FF fix\n    var len = anObject(this).byteLength;\n    var first = toAbsoluteIndex(start, len);\n    var fin = toAbsoluteIndex(end === undefined ? len : end, len);\n    var result = new (speciesConstructor(this, $ArrayBuffer))(toLength(fin - first));\n    var viewS = new $DataView(this);\n    var viewT = new $DataView(result);\n    var index = 0;\n    while (first < fin) {\n      viewT.setUint8(index++, viewS.getUint8(first++));\n    } return result;\n  }\n});\n\nrequire('./_set-species')(ARRAY_BUFFER);\n","var $export = require('./_export');\n$export($export.G + $export.W + $export.F * !require('./_typed').ABV, {\n  DataView: require('./_typed-buffer').DataView\n});\n","require('./_typed-array')('Float32', 4, function (init) {\n  return function Float32Array(data, byteOffset, length) {\n    return init(this, data, byteOffset, length);\n  };\n});\n","require('./_typed-array')('Float64', 8, function (init) {\n  return function Float64Array(data, byteOffset, length) {\n    return init(this, data, byteOffset, length);\n  };\n});\n","require('./_typed-array')('Int16', 2, function (init) {\n  return function Int16Array(data, byteOffset, length) {\n    return init(this, data, byteOffset, length);\n  };\n});\n","require('./_typed-array')('Int32', 4, function (init) {\n  return function Int32Array(data, byteOffset, length) {\n    return init(this, data, byteOffset, length);\n  };\n});\n","require('./_typed-array')('Int8', 1, function (init) {\n  return function Int8Array(data, byteOffset, length) {\n    return init(this, data, byteOffset, length);\n  };\n});\n","require('./_typed-array')('Uint16', 2, function (init) {\n  return function Uint16Array(data, byteOffset, length) {\n    return init(this, data, byteOffset, length);\n  };\n});\n","require('./_typed-array')('Uint32', 4, function (init) {\n  return function Uint32Array(data, byteOffset, length) {\n    return init(this, data, byteOffset, length);\n  };\n});\n","require('./_typed-array')('Uint8', 1, function (init) {\n  return function Uint8Array(data, byteOffset, length) {\n    return init(this, data, byteOffset, length);\n  };\n});\n","require('./_typed-array')('Uint8', 1, function (init) {\n  return function Uint8ClampedArray(data, byteOffset, length) {\n    return init(this, data, byteOffset, length);\n  };\n}, true);\n","'use strict';\nvar global = require('./_global');\nvar each = require('./_array-methods')(0);\nvar redefine = require('./_redefine');\nvar meta = require('./_meta');\nvar assign = require('./_object-assign');\nvar weak = require('./_collection-weak');\nvar isObject = require('./_is-object');\nvar validate = require('./_validate-collection');\nvar NATIVE_WEAK_MAP = require('./_validate-collection');\nvar IS_IE11 = !global.ActiveXObject && 'ActiveXObject' in global;\nvar WEAK_MAP = 'WeakMap';\nvar getWeak = meta.getWeak;\nvar isExtensible = Object.isExtensible;\nvar uncaughtFrozenStore = weak.ufstore;\nvar InternalMap;\n\nvar wrapper = function (get) {\n  return function WeakMap() {\n    return get(this, arguments.length > 0 ? arguments[0] : undefined);\n  };\n};\n\nvar methods = {\n  // 23.3.3.3 WeakMap.prototype.get(key)\n  get: function get(key) {\n    if (isObject(key)) {\n      var data = getWeak(key);\n      if (data === true) return uncaughtFrozenStore(validate(this, WEAK_MAP)).get(key);\n      return data ? data[this._i] : undefined;\n    }\n  },\n  // 23.3.3.5 WeakMap.prototype.set(key, value)\n  set: function set(key, value) {\n    return weak.def(validate(this, WEAK_MAP), key, value);\n  }\n};\n\n// 23.3 WeakMap Objects\nvar $WeakMap = module.exports = require('./_collection')(WEAK_MAP, wrapper, methods, weak, true, true);\n\n// IE11 WeakMap frozen keys fix\nif (NATIVE_WEAK_MAP && IS_IE11) {\n  InternalMap = weak.getConstructor(wrapper, WEAK_MAP);\n  assign(InternalMap.prototype, methods);\n  meta.NEED = true;\n  each(['delete', 'has', 'get', 'set'], function (key) {\n    var proto = $WeakMap.prototype;\n    var method = proto[key];\n    redefine(proto, key, function (a, b) {\n      // store frozen objects on internal weakmap shim\n      if (isObject(a) && !isExtensible(a)) {\n        if (!this._f) this._f = new InternalMap();\n        var result = this._f[key](a, b);\n        return key == 'set' ? this : result;\n      // store all the rest on native weakmap\n      } return method.call(this, a, b);\n    });\n  });\n}\n","'use strict';\nvar weak = require('./_collection-weak');\nvar validate = require('./_validate-collection');\nvar WEAK_SET = 'WeakSet';\n\n// 23.4 WeakSet Objects\nrequire('./_collection')(WEAK_SET, function (get) {\n  return function WeakSet() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n  // 23.4.3.1 WeakSet.prototype.add(value)\n  add: function add(value) {\n    return weak.def(validate(this, WEAK_SET), value, true);\n  }\n}, weak, false, true);\n","'use strict';\n// https://tc39.github.io/proposal-flatMap/#sec-Array.prototype.flatMap\nvar $export = require('./_export');\nvar flattenIntoArray = require('./_flatten-into-array');\nvar toObject = require('./_to-object');\nvar toLength = require('./_to-length');\nvar aFunction = require('./_a-function');\nvar arraySpeciesCreate = require('./_array-species-create');\n\n$export($export.P, 'Array', {\n  flatMap: function flatMap(callbackfn /* , thisArg */) {\n    var O = toObject(this);\n    var sourceLen, A;\n    aFunction(callbackfn);\n    sourceLen = toLength(O.length);\n    A = arraySpeciesCreate(O, 0);\n    flattenIntoArray(A, O, O, sourceLen, 0, 1, callbackfn, arguments[1]);\n    return A;\n  }\n});\n\nrequire('./_add-to-unscopables')('flatMap');\n","'use strict';\n// https://github.com/tc39/Array.prototype.includes\nvar $export = require('./_export');\nvar $includes = require('./_array-includes')(true);\n\n$export($export.P, 'Array', {\n  includes: function includes(el /* , fromIndex = 0 */) {\n    return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined);\n  }\n});\n\nrequire('./_add-to-unscopables')('includes');\n","// https://github.com/tc39/proposal-object-values-entries\nvar $export = require('./_export');\nvar $entries = require('./_object-to-array')(true);\n\n$export($export.S, 'Object', {\n  entries: function entries(it) {\n    return $entries(it);\n  }\n});\n","// https://github.com/tc39/proposal-object-getownpropertydescriptors\nvar $export = require('./_export');\nvar ownKeys = require('./_own-keys');\nvar toIObject = require('./_to-iobject');\nvar gOPD = require('./_object-gopd');\nvar createProperty = require('./_create-property');\n\n$export($export.S, 'Object', {\n  getOwnPropertyDescriptors: function getOwnPropertyDescriptors(object) {\n    var O = toIObject(object);\n    var getDesc = gOPD.f;\n    var keys = ownKeys(O);\n    var result = {};\n    var i = 0;\n    var key, desc;\n    while (keys.length > i) {\n      desc = getDesc(O, key = keys[i++]);\n      if (desc !== undefined) createProperty(result, key, desc);\n    }\n    return result;\n  }\n});\n","// https://github.com/tc39/proposal-object-values-entries\nvar $export = require('./_export');\nvar $values = require('./_object-to-array')(false);\n\n$export($export.S, 'Object', {\n  values: function values(it) {\n    return $values(it);\n  }\n});\n","// https://github.com/tc39/proposal-promise-finally\n'use strict';\nvar $export = require('./_export');\nvar core = require('./_core');\nvar global = require('./_global');\nvar speciesConstructor = require('./_species-constructor');\nvar promiseResolve = require('./_promise-resolve');\n\n$export($export.P + $export.R, 'Promise', { 'finally': function (onFinally) {\n  var C = speciesConstructor(this, core.Promise || global.Promise);\n  var isFunction = typeof onFinally == 'function';\n  return this.then(\n    isFunction ? function (x) {\n      return promiseResolve(C, onFinally()).then(function () { return x; });\n    } : onFinally,\n    isFunction ? function (e) {\n      return promiseResolve(C, onFinally()).then(function () { throw e; });\n    } : onFinally\n  );\n} });\n","'use strict';\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = require('./_export');\nvar $pad = require('./_string-pad');\nvar userAgent = require('./_user-agent');\n\n// https://github.com/zloirock/core-js/issues/280\nvar WEBKIT_BUG = /Version\\/10\\.\\d+(\\.\\d+)?( Mobile\\/\\w+)? Safari\\//.test(userAgent);\n\n$export($export.P + $export.F * WEBKIT_BUG, 'String', {\n  padEnd: function padEnd(maxLength /* , fillString = ' ' */) {\n    return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, false);\n  }\n});\n","'use strict';\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = require('./_export');\nvar $pad = require('./_string-pad');\nvar userAgent = require('./_user-agent');\n\n// https://github.com/zloirock/core-js/issues/280\nvar WEBKIT_BUG = /Version\\/10\\.\\d+(\\.\\d+)?( Mobile\\/\\w+)? Safari\\//.test(userAgent);\n\n$export($export.P + $export.F * WEBKIT_BUG, 'String', {\n  padStart: function padStart(maxLength /* , fillString = ' ' */) {\n    return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, true);\n  }\n});\n","'use strict';\n// https://github.com/sebmarkbage/ecmascript-string-left-right-trim\nrequire('./_string-trim')('trimLeft', function ($trim) {\n  return function trimLeft() {\n    return $trim(this, 1);\n  };\n}, 'trimStart');\n","'use strict';\n// https://github.com/sebmarkbage/ecmascript-string-left-right-trim\nrequire('./_string-trim')('trimRight', function ($trim) {\n  return function trimRight() {\n    return $trim(this, 2);\n  };\n}, 'trimEnd');\n","require('./_wks-define')('asyncIterator');\n","var $iterators = require('./es6.array.iterator');\nvar getKeys = require('./_object-keys');\nvar redefine = require('./_redefine');\nvar global = require('./_global');\nvar hide = require('./_hide');\nvar Iterators = require('./_iterators');\nvar wks = require('./_wks');\nvar ITERATOR = wks('iterator');\nvar TO_STRING_TAG = wks('toStringTag');\nvar ArrayValues = Iterators.Array;\n\nvar DOMIterables = {\n  CSSRuleList: true, // TODO: Not spec compliant, should be false.\n  CSSStyleDeclaration: false,\n  CSSValueList: false,\n  ClientRectList: false,\n  DOMRectList: false,\n  DOMStringList: false,\n  DOMTokenList: true,\n  DataTransferItemList: false,\n  FileList: false,\n  HTMLAllCollection: false,\n  HTMLCollection: false,\n  HTMLFormElement: false,\n  HTMLSelectElement: false,\n  MediaList: true, // TODO: Not spec compliant, should be false.\n  MimeTypeArray: false,\n  NamedNodeMap: false,\n  NodeList: true,\n  PaintRequestList: false,\n  Plugin: false,\n  PluginArray: false,\n  SVGLengthList: false,\n  SVGNumberList: false,\n  SVGPathSegList: false,\n  SVGPointList: false,\n  SVGStringList: false,\n  SVGTransformList: false,\n  SourceBufferList: false,\n  StyleSheetList: true, // TODO: Not spec compliant, should be false.\n  TextTrackCueList: false,\n  TextTrackList: false,\n  TouchList: false\n};\n\nfor (var collections = getKeys(DOMIterables), i = 0; i < collections.length; i++) {\n  var NAME = collections[i];\n  var explicit = DOMIterables[NAME];\n  var Collection = global[NAME];\n  var proto = Collection && Collection.prototype;\n  var key;\n  if (proto) {\n    if (!proto[ITERATOR]) hide(proto, ITERATOR, ArrayValues);\n    if (!proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME);\n    Iterators[NAME] = ArrayValues;\n    if (explicit) for (key in $iterators) if (!proto[key]) redefine(proto, key, $iterators[key], true);\n  }\n}\n","var $export = require('./_export');\nvar $task = require('./_task');\n$export($export.G + $export.B, {\n  setImmediate: $task.set,\n  clearImmediate: $task.clear\n});\n","// ie9- setTimeout & setInterval additional parameters fix\nvar global = require('./_global');\nvar $export = require('./_export');\nvar userAgent = require('./_user-agent');\nvar slice = [].slice;\nvar MSIE = /MSIE .\\./.test(userAgent); // <- dirty ie9- check\nvar wrap = function (set) {\n  return function (fn, time /* , ...args */) {\n    var boundArgs = arguments.length > 2;\n    var args = boundArgs ? slice.call(arguments, 2) : false;\n    return set(boundArgs ? function () {\n      // eslint-disable-next-line no-new-func\n      (typeof fn == 'function' ? fn : Function(fn)).apply(this, args);\n    } : fn, time);\n  };\n};\n$export($export.G + $export.B + $export.F * MSIE, {\n  setTimeout: wrap(global.setTimeout),\n  setInterval: wrap(global.setInterval)\n});\n","require('../modules/web.timers');\nrequire('../modules/web.immediate');\nrequire('../modules/web.dom.iterable');\nmodule.exports = require('../modules/_core');\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// NOTE: These type checking functions intentionally don't use `instanceof`\n// because it is fragile and can be easily faked with `Object.create()`.\n\nfunction isArray(arg) {\n  if (Array.isArray) {\n    return Array.isArray(arg);\n  }\n  return objectToString(arg) === '[object Array]';\n}\nexports.isArray = isArray;\n\nfunction isBoolean(arg) {\n  return typeof arg === 'boolean';\n}\nexports.isBoolean = isBoolean;\n\nfunction isNull(arg) {\n  return arg === null;\n}\nexports.isNull = isNull;\n\nfunction isNullOrUndefined(arg) {\n  return arg == null;\n}\nexports.isNullOrUndefined = isNullOrUndefined;\n\nfunction isNumber(arg) {\n  return typeof arg === 'number';\n}\nexports.isNumber = isNumber;\n\nfunction isString(arg) {\n  return typeof arg === 'string';\n}\nexports.isString = isString;\n\nfunction isSymbol(arg) {\n  return typeof arg === 'symbol';\n}\nexports.isSymbol = isSymbol;\n\nfunction isUndefined(arg) {\n  return arg === void 0;\n}\nexports.isUndefined = isUndefined;\n\nfunction isRegExp(re) {\n  return objectToString(re) === '[object RegExp]';\n}\nexports.isRegExp = isRegExp;\n\nfunction isObject(arg) {\n  return typeof arg === 'object' && arg !== null;\n}\nexports.isObject = isObject;\n\nfunction isDate(d) {\n  return objectToString(d) === '[object Date]';\n}\nexports.isDate = isDate;\n\nfunction isError(e) {\n  return (objectToString(e) === '[object Error]' || e instanceof Error);\n}\nexports.isError = isError;\n\nfunction isFunction(arg) {\n  return typeof arg === 'function';\n}\nexports.isFunction = isFunction;\n\nfunction isPrimitive(arg) {\n  return arg === null ||\n         typeof arg === 'boolean' ||\n         typeof arg === 'number' ||\n         typeof arg === 'string' ||\n         typeof arg === 'symbol' ||  // ES6 symbol\n         typeof arg === 'undefined';\n}\nexports.isPrimitive = isPrimitive;\n\nexports.isBuffer = require('buffer').Buffer.isBuffer;\n\nfunction objectToString(o) {\n  return Object.prototype.toString.call(o);\n}\n","var elliptic = require('elliptic')\nvar BN = require('bn.js')\n\nmodule.exports = function createECDH (curve) {\n  return new ECDH(curve)\n}\n\nvar aliases = {\n  secp256k1: {\n    name: 'secp256k1',\n    byteLength: 32\n  },\n  secp224r1: {\n    name: 'p224',\n    byteLength: 28\n  },\n  prime256v1: {\n    name: 'p256',\n    byteLength: 32\n  },\n  prime192v1: {\n    name: 'p192',\n    byteLength: 24\n  },\n  ed25519: {\n    name: 'ed25519',\n    byteLength: 32\n  },\n  secp384r1: {\n    name: 'p384',\n    byteLength: 48\n  },\n  secp521r1: {\n    name: 'p521',\n    byteLength: 66\n  }\n}\n\naliases.p224 = aliases.secp224r1\naliases.p256 = aliases.secp256r1 = aliases.prime256v1\naliases.p192 = aliases.secp192r1 = aliases.prime192v1\naliases.p384 = aliases.secp384r1\naliases.p521 = aliases.secp521r1\n\nfunction ECDH (curve) {\n  this.curveType = aliases[curve]\n  if (!this.curveType) {\n    this.curveType = {\n      name: curve\n    }\n  }\n  this.curve = new elliptic.ec(this.curveType.name) // eslint-disable-line new-cap\n  this.keys = void 0\n}\n\nECDH.prototype.generateKeys = function (enc, format) {\n  this.keys = this.curve.genKeyPair()\n  return this.getPublicKey(enc, format)\n}\n\nECDH.prototype.computeSecret = function (other, inenc, enc) {\n  inenc = inenc || 'utf8'\n  if (!Buffer.isBuffer(other)) {\n    other = new Buffer(other, inenc)\n  }\n  var otherPub = this.curve.keyFromPublic(other).getPublic()\n  var out = otherPub.mul(this.keys.getPrivate()).getX()\n  return formatReturnValue(out, enc, this.curveType.byteLength)\n}\n\nECDH.prototype.getPublicKey = function (enc, format) {\n  var key = this.keys.getPublic(format === 'compressed', true)\n  if (format === 'hybrid') {\n    if (key[key.length - 1] % 2) {\n      key[0] = 7\n    } else {\n      key[0] = 6\n    }\n  }\n  return formatReturnValue(key, enc)\n}\n\nECDH.prototype.getPrivateKey = function (enc) {\n  return formatReturnValue(this.keys.getPrivate(), enc)\n}\n\nECDH.prototype.setPublicKey = function (pub, enc) {\n  enc = enc || 'utf8'\n  if (!Buffer.isBuffer(pub)) {\n    pub = new Buffer(pub, enc)\n  }\n  this.keys._importPublic(pub)\n  return this\n}\n\nECDH.prototype.setPrivateKey = function (priv, enc) {\n  enc = enc || 'utf8'\n  if (!Buffer.isBuffer(priv)) {\n    priv = new Buffer(priv, enc)\n  }\n\n  var _priv = new BN(priv)\n  _priv = _priv.toString(16)\n  this.keys = this.curve.genKeyPair()\n  this.keys._importPrivate(_priv)\n  return this\n}\n\nfunction formatReturnValue (bn, enc, len) {\n  if (!Array.isArray(bn)) {\n    bn = bn.toArray()\n  }\n  var buf = new Buffer(bn)\n  if (len && buf.length < len) {\n    var zeros = new Buffer(len - buf.length)\n    zeros.fill(0)\n    buf = Buffer.concat([zeros, buf])\n  }\n  if (!enc) {\n    return buf\n  } else {\n    return buf.toString(enc)\n  }\n}\n","'use strict'\nvar inherits = require('inherits')\nvar MD5 = require('md5.js')\nvar RIPEMD160 = require('ripemd160')\nvar sha = require('sha.js')\nvar Base = require('cipher-base')\n\nfunction Hash (hash) {\n  Base.call(this, 'digest')\n\n  this._hash = hash\n}\n\ninherits(Hash, Base)\n\nHash.prototype._update = function (data) {\n  this._hash.update(data)\n}\n\nHash.prototype._final = function () {\n  return this._hash.digest()\n}\n\nmodule.exports = function createHash (alg) {\n  alg = alg.toLowerCase()\n  if (alg === 'md5') return new MD5()\n  if (alg === 'rmd160' || alg === 'ripemd160') return new RIPEMD160()\n\n  return new Hash(sha(alg))\n}\n","var MD5 = require('md5.js')\n\nmodule.exports = function (buffer) {\n  return new MD5().update(buffer).digest()\n}\n","'use strict'\nvar inherits = require('inherits')\nvar Legacy = require('./legacy')\nvar Base = require('cipher-base')\nvar Buffer = require('safe-buffer').Buffer\nvar md5 = require('create-hash/md5')\nvar RIPEMD160 = require('ripemd160')\n\nvar sha = require('sha.js')\n\nvar ZEROS = Buffer.alloc(128)\n\nfunction Hmac (alg, key) {\n  Base.call(this, 'digest')\n  if (typeof key === 'string') {\n    key = Buffer.from(key)\n  }\n\n  var blocksize = (alg === 'sha512' || alg === 'sha384') ? 128 : 64\n\n  this._alg = alg\n  this._key = key\n  if (key.length > blocksize) {\n    var hash = alg === 'rmd160' ? new RIPEMD160() : sha(alg)\n    key = hash.update(key).digest()\n  } else if (key.length < blocksize) {\n    key = Buffer.concat([key, ZEROS], blocksize)\n  }\n\n  var ipad = this._ipad = Buffer.allocUnsafe(blocksize)\n  var opad = this._opad = Buffer.allocUnsafe(blocksize)\n\n  for (var i = 0; i < blocksize; i++) {\n    ipad[i] = key[i] ^ 0x36\n    opad[i] = key[i] ^ 0x5C\n  }\n  this._hash = alg === 'rmd160' ? new RIPEMD160() : sha(alg)\n  this._hash.update(ipad)\n}\n\ninherits(Hmac, Base)\n\nHmac.prototype._update = function (data) {\n  this._hash.update(data)\n}\n\nHmac.prototype._final = function () {\n  var h = this._hash.digest()\n  var hash = this._alg === 'rmd160' ? new RIPEMD160() : sha(this._alg)\n  return hash.update(this._opad).update(h).digest()\n}\n\nmodule.exports = function createHmac (alg, key) {\n  alg = alg.toLowerCase()\n  if (alg === 'rmd160' || alg === 'ripemd160') {\n    return new Hmac('rmd160', key)\n  }\n  if (alg === 'md5') {\n    return new Legacy(md5, key)\n  }\n  return new Hmac(alg, key)\n}\n","'use strict'\nvar inherits = require('inherits')\nvar Buffer = require('safe-buffer').Buffer\n\nvar Base = require('cipher-base')\n\nvar ZEROS = Buffer.alloc(128)\nvar blocksize = 64\n\nfunction Hmac (alg, key) {\n  Base.call(this, 'digest')\n  if (typeof key === 'string') {\n    key = Buffer.from(key)\n  }\n\n  this._alg = alg\n  this._key = key\n\n  if (key.length > blocksize) {\n    key = alg(key)\n  } else if (key.length < blocksize) {\n    key = Buffer.concat([key, ZEROS], blocksize)\n  }\n\n  var ipad = this._ipad = Buffer.allocUnsafe(blocksize)\n  var opad = this._opad = Buffer.allocUnsafe(blocksize)\n\n  for (var i = 0; i < blocksize; i++) {\n    ipad[i] = key[i] ^ 0x36\n    opad[i] = key[i] ^ 0x5C\n  }\n\n  this._hash = [ipad]\n}\n\ninherits(Hmac, Base)\n\nHmac.prototype._update = function (data) {\n  this._hash.push(data)\n}\n\nHmac.prototype._final = function () {\n  var h = this._alg(Buffer.concat(this._hash))\n  return this._alg(Buffer.concat([this._opad, h]))\n}\nmodule.exports = Hmac\n","'use strict';\n\n// eslint-disable-next-line no-multi-assign\nexports.randomBytes = exports.rng = exports.pseudoRandomBytes = exports.prng = require('randombytes');\n\n// eslint-disable-next-line no-multi-assign\nexports.createHash = exports.Hash = require('create-hash');\n\n// eslint-disable-next-line no-multi-assign\nexports.createHmac = exports.Hmac = require('create-hmac');\n\nvar algos = require('browserify-sign/algos');\nvar algoKeys = Object.keys(algos);\nvar hashes = [\n\t'sha1',\n\t'sha224',\n\t'sha256',\n\t'sha384',\n\t'sha512',\n\t'md5',\n\t'rmd160'\n].concat(algoKeys);\n\nexports.getHashes = function () {\n\treturn hashes;\n};\n\nvar p = require('pbkdf2');\nexports.pbkdf2 = p.pbkdf2;\nexports.pbkdf2Sync = p.pbkdf2Sync;\n\nvar aes = require('browserify-cipher');\n\nexports.Cipher = aes.Cipher;\nexports.createCipher = aes.createCipher;\nexports.Cipheriv = aes.Cipheriv;\nexports.createCipheriv = aes.createCipheriv;\nexports.Decipher = aes.Decipher;\nexports.createDecipher = aes.createDecipher;\nexports.Decipheriv = aes.Decipheriv;\nexports.createDecipheriv = aes.createDecipheriv;\nexports.getCiphers = aes.getCiphers;\nexports.listCiphers = aes.listCiphers;\n\nvar dh = require('diffie-hellman');\n\nexports.DiffieHellmanGroup = dh.DiffieHellmanGroup;\nexports.createDiffieHellmanGroup = dh.createDiffieHellmanGroup;\nexports.getDiffieHellman = dh.getDiffieHellman;\nexports.createDiffieHellman = dh.createDiffieHellman;\nexports.DiffieHellman = dh.DiffieHellman;\n\nvar sign = require('browserify-sign');\n\nexports.createSign = sign.createSign;\nexports.Sign = sign.Sign;\nexports.createVerify = sign.createVerify;\nexports.Verify = sign.Verify;\n\nexports.createECDH = require('create-ecdh');\n\nvar publicEncrypt = require('public-encrypt');\n\nexports.publicEncrypt = publicEncrypt.publicEncrypt;\nexports.privateEncrypt = publicEncrypt.privateEncrypt;\nexports.publicDecrypt = publicEncrypt.publicDecrypt;\nexports.privateDecrypt = publicEncrypt.privateDecrypt;\n\n// the least I can do is make error messages for the rest of the node.js/crypto api.\n// [\n//   'createCredentials'\n// ].forEach(function (name) {\n//   exports[name] = function () {\n//     throw new Error('sorry, ' + name + ' is not implemented yet\\nwe accept pull requests\\nhttps://github.com/browserify/crypto-browserify');\n//   };\n// });\n\nvar rf = require('randomfill');\n\nexports.randomFill = rf.randomFill;\nexports.randomFillSync = rf.randomFillSync;\n\nexports.createCredentials = function () {\n\tthrow new Error('sorry, createCredentials is not implemented yet\\nwe accept pull requests\\nhttps://github.com/browserify/crypto-browserify');\n};\n\nexports.constants = {\n\tDH_CHECK_P_NOT_SAFE_PRIME: 2,\n\tDH_CHECK_P_NOT_PRIME: 1,\n\tDH_UNABLE_TO_CHECK_GENERATOR: 4,\n\tDH_NOT_SUITABLE_GENERATOR: 8,\n\tNPN_ENABLED: 1,\n\tALPN_ENABLED: 1,\n\tRSA_PKCS1_PADDING: 1,\n\tRSA_SSLV23_PADDING: 2,\n\tRSA_NO_PADDING: 3,\n\tRSA_PKCS1_OAEP_PADDING: 4,\n\tRSA_X931_PADDING: 5,\n\tRSA_PKCS1_PSS_PADDING: 6,\n\tPOINT_CONVERSION_COMPRESSED: 2,\n\tPOINT_CONVERSION_UNCOMPRESSED: 4,\n\tPOINT_CONVERSION_HYBRID: 6\n};\n","!function t(e,i,n){function s(r,a){if(!i[r]){if(!e[r]){var l=\"function\"==typeof require&&require;if(!a&&l)return l(r,!0);if(o)return o(r,!0);var c=new Error(\"Cannot find module '\"+r+\"'\");throw c.code=\"MODULE_NOT_FOUND\",c}var h=i[r]={exports:{}};e[r][0].call(h.exports,function(t){var i=e[r][1][t];return s(i||t)},h,h.exports,t,e,i,n)}return i[r].exports}for(var o=\"function\"==typeof require&&require,r=0;r<n.length;r++)s(n[r]);return s}({1:[function(t,e,i){!function(n,s){\"function\"==typeof define&&define.amd?define([\"iscroll\",\"platform\"],s):\"object\"==typeof i?e.exports=s(t(\"iscroll\"),t(\"platform\")):n.angularIscroll=s(n.IScroll,n.platform)}(this,function(t,e){\"use strict\";function i(t,e,i){function n(t){return(s?/^\\d+[A-Za-z]*$/:/^\\d+$/).test(t)}var s=i&&i.lexicographical,o=i&&i.zeroExtend,r=t.split(\".\"),a=e.split(\".\");if(!r.every(n)||!a.every(n))return NaN;if(o){for(;r.length<a.length;)r.push(\"0\");for(;a.length<r.length;)a.push(\"0\")}s||(r=r.map(Number),a=a.map(Number));for(var l=0;l<r.length;++l){if(a.length==l)return 1;if(r[l]!=a[l])return r[l]>a[l]?1:-1}return r.length!=a.length?-1:0}function n(t){return\"Chrome Mobile\"===t.name}function s(t){return\"Android Browser\"===t.name&&i(t.os.version,\"4.0.4\")>=0}function o(t){return t.substring(0,1).toLocaleUpperCase()+t.substring(1)}function r(){function t(t){angular.isDefined(t.directive)&&angular.extend(o.directive,t.directive),angular.isDefined(t.iScroll)&&angular.extend(o.iScroll,t.iScroll)}function n(){return o}function s(t,n){function s(e){e||(c.useIScroll=!1),t.$emit(n.disabled)}function r(e){e||(c.useIScroll=!0),t.$emit(n.enabled)}function a(t){c.useIScroll^t?s(t):r(t)}function l(e){t.$emit(n.refresh,e)}var c={useIScroll:o.directive.initiallyEnabled,autoDetectedUseNativeScroll:d};return{defaults:o,state:c,versionCompare:i,platform:e,enable:r,disable:s,toggle:a,refresh:l}}s.$inject=[\"$rootScope\",\"iScrollSignals\"];var o={iScroll:{momentum:!0,mouseWheel:!0},directive:{initiallyEnabled:!d,asyncRefreshDelay:0,refreshInterval:!1,invokeApply:!1}};angular.forEach(u,function(t,e){this[e]=void 0},o.directive),this.useNativeScroll=d,this.platform=e,this.configureDefaults=t,this.getDefaults=n,this.$get=s}function a(t){t()}function l(e,i,n,s,o){function r(t,e){i(function(){t.refresh()},e.directive.asyncRefreshDelay,e.directive.invokeApply)}function l(i,o,l,c){function p(){null!==b&&n.cancel(b),angular.isDefined(i.iscrollInstance)&&delete i.iscrollInstance,g.destroy(),o.removeClass(h.on).addClass(h.off),o.children(\".iscroll-scroller\").attr(\"style\",null),angular.forEach(x,a)}function d(){v&&(v=!1,r(g,c),v=!0)}function m(){v=!1}function f(){v=!0}var g=new t(o[0],c.iScroll),v=!0,b=null;angular.forEach(u,function(t,e){angular.isDefined(c.directive[e])&&g.on(t,c.directive[e])}),o.removeClass(h.off).addClass(h.on),angular.isDefined(l.iscrollInstance)&&(i.iscrollInstance=g),!1!==c.directive.asyncRefreshDelay&&r(g,c),g.on(\"scrollStart\",m),g.on(\"scrollEnd\",f),!1!==c.directive.refreshInterval&&(b=n(d,c.directive.refreshInterval,0,c.directive.invokeApply));var x=[e.$on(s.disabled,p),e.$on(s.refresh,d),i.$on(\"$destroy\",p)];return g}function c(t,i,n){function r(){i.hasClass(h.on)||l(t,i,n,p)}function c(){angular.forEach(d,a)}var p={iScroll:angular.extend({},t.iscroll||{},o.defaults.iScroll),directive:angular.extend({},o.defaults.directive)};angular.forEach(p.iScroll,function(t,e){(o.defaults.directive.hasOwnProperty(e)||u.hasOwnProperty(e))&&(p.directive[e]=t,delete p.iScroll[e])});var d=[e.$on(s.enabled,r)];o.state.useIScroll?r():i.removeClass(h.on).addClass(h.off),t.$on(\"$destroy\",c)}return{restrict:\"A\",link:c,scope:{iscroll:\"=\",iscrollInstance:\"=\"}}}l.$inject=[\"$rootScope\",\"$timeout\",\"$interval\",\"iScrollSignals\",\"iScrollService\"];var c={disabled:\"iscroll:disabled\",enabled:\"iscroll:enabled\",refresh:\"iscroll:refresh\"},h={on:\"iscroll-on\",off:\"iscroll-off\"},p=[\"beforeScrollStart\",\"scrollCancel\",\"scrollStart\",\"scroll\",\"scrollEnd\",\"flick\",\"zoomStart\",\"zoomEnd\"],u={},d=angular.isDefined(e)&&function(t){if(\"Opera Mini\"===t.name)return!1;if(\"IE Mobile\"===t.name)return i(t.version,\"11.0\")>=0;switch(t.os.family){case\"Android\":return n(t)||s(t);case\"iOS\":return i(t.version,\"5.1\")>=0;default:return!0}}(e);return angular.forEach(p,function(t){this[\"on\"+o(t)]=t},u),angular.module(\"angular-iscroll\",[]).directive(\"iscroll\",l).provider(\"iScrollService\",r).constant(\"iScrollSignals\",c)})},{iscroll:4,platform:5}],2:[function(t,e,i){!function(t,e){\"use strict\";function i(t){return e.lowercase(t.nodeName||t[0]&&t[0].nodeName)}function n(t,i){var n=!1,s=!1;this.ngClickOverrideEnabled=function(o){return e.isDefined(o)?(o&&!s&&(s=!0,r.$$moduleName=\"ngTouch\",i.directive(\"ngClick\",r),t.decorator(\"ngClickDirective\",[\"$delegate\",function(t){if(n)t.shift();else for(var e=t.length-1;e>=0;){if(\"ngTouch\"===t[e].$$moduleName){t.splice(e,1);break}e--}return t}])),n=o,this):n},this.$get=function(){return{ngClickOverrideEnabled:function(){return n}}}}function s(t,i,n){o.directive(t,[\"$parse\",\"$swipe\",function(s,o){return function(r,a,l){function c(t){if(!h)return!1;var e=Math.abs(t.y-h.y),n=(t.x-h.x)*i;return p&&e<75&&n>0&&n>30&&e/n<.3}var h,p,u=s(l[t]),d=[\"touch\"];e.isDefined(l.ngSwipeDisableMouse)||d.push(\"mouse\"),o.bind(a,{start:function(t,e){h=t,p=!0},cancel:function(t){p=!1},end:function(t,e){c(t)&&r.$apply(function(){a.triggerHandler(n),u(r,{$event:e})})}},d)}}])}var o=e.module(\"ngTouch\",[]);o.provider(\"$touch\",n),n.$inject=[\"$provide\",\"$compileProvider\"],o.factory(\"$swipe\",[function(){function t(t){var e=t.originalEvent||t,i=e.touches&&e.touches.length?e.touches:[e],n=e.changedTouches&&e.changedTouches[0]||i[0];return{x:n.clientX,y:n.clientY}}function i(t,i){var s=[];return e.forEach(t,function(t){var e=n[t][i];e&&s.push(e)}),s.join(\" \")}var n={mouse:{start:\"mousedown\",move:\"mousemove\",end:\"mouseup\"},touch:{start:\"touchstart\",move:\"touchmove\",end:\"touchend\",cancel:\"touchcancel\"},pointer:{start:\"pointerdown\",move:\"pointermove\",end:\"pointerup\",cancel:\"pointercancel\"}};return{bind:function(e,n,s){var o,r,a,l,c=!1;s=s||[\"mouse\",\"touch\",\"pointer\"],e.on(i(s,\"start\"),function(e){a=t(e),c=!0,o=0,r=0,l=a,n.start&&n.start(a,e)});var h=i(s,\"cancel\");h&&e.on(h,function(t){c=!1,n.cancel&&n.cancel(t)}),e.on(i(s,\"move\"),function(e){if(c&&a){var i=t(e);if(o+=Math.abs(i.x-l.x),r+=Math.abs(i.y-l.y),l=i,!(o<10&&r<10))return r>o?(c=!1,void(n.cancel&&n.cancel(e))):(e.preventDefault(),void(n.move&&n.move(i,e)))}}),e.on(i(s,\"end\"),function(e){c&&(c=!1,n.end&&n.end(t(e),e))})}}}]);var r=[\"$parse\",\"$timeout\",\"$rootElement\",function(t,n,s){function o(t,e,i,n){return Math.abs(t-i)<m&&Math.abs(e-n)<m}function r(t,e,i){for(var n=0;n<t.length;n+=2)if(o(t[n],t[n+1],e,i))return t.splice(n,n+2),!0;return!1}function a(t){if(!(Date.now()-h>d)){var e=t.touches&&t.touches.length?t.touches:[t],n=e[0].clientX,s=e[0].clientY;n<1&&s<1||u&&u[0]===n&&u[1]===s||(u&&(u=null),\"label\"===i(t.target)&&(u=[n,s]),r(p,n,s)||(t.stopPropagation(),t.preventDefault(),t.target&&t.target.blur&&t.target.blur()))}}function l(t){var e=t.touches&&t.touches.length?t.touches:[t],i=e[0].clientX,s=e[0].clientY;p.push(i,s),n(function(){for(var t=0;t<p.length;t+=2)if(p[t]===i&&p[t+1]===s)return void p.splice(t,t+2)},d,!1)}function c(t,e){p||(s[0].addEventListener(\"click\",a,!0),s[0].addEventListener(\"touchstart\",l,!0),p=[]),h=Date.now(),r(p,t,e)}var h,p,u,d=2500,m=25,f=\"ng-click-active\";return function(i,n,s){function o(){u=!1,n.removeClass(f)}var r,a,l,h,p=t(s.ngClick),u=!1;n.on(\"touchstart\",function(t){u=!0,r=t.target?t.target:t.srcElement,3===r.nodeType&&(r=r.parentNode),n.addClass(f),a=Date.now();var e=t.originalEvent||t,i=e.touches&&e.touches.length?e.touches:[e],s=i[0];l=s.clientX,h=s.clientY}),n.on(\"touchcancel\",function(t){o()}),n.on(\"touchend\",function(t){var i=Date.now()-a,p=t.originalEvent||t,d=p.changedTouches&&p.changedTouches.length?p.changedTouches:p.touches&&p.touches.length?p.touches:[p],m=d[0],f=m.clientX,g=m.clientY,v=Math.sqrt(Math.pow(f-l,2)+Math.pow(g-h,2));u&&i<750&&v<12&&(c(f,g),r&&r.blur(),e.isDefined(s.disabled)&&!1!==s.disabled||n.triggerHandler(\"click\",[t])),o()}),n.onclick=function(t){},n.on(\"click\",function(t,e){i.$apply(function(){p(i,{$event:e||t})})}),n.on(\"mousedown\",function(t){n.addClass(f)}),n.on(\"mousemove mouseup\",function(t){n.removeClass(f)})}}];s(\"ngSwipeLeft\",-1,\"swipeleft\"),s(\"ngSwipeRight\",1,\"swiperight\")}(window,window.angular)},{}],3:[function(t,e,i){t(\"./angular-touch\"),e.exports=\"ngTouch\"},{\"./angular-touch\":2}],4:[function(t,e,i){!function(t,i,n){function s(e,n){this.wrapper=\"string\"==typeof e?i.querySelector(e):e,this.scroller=this.wrapper.children[0],this.scrollerStyle=this.scroller.style,this.options={resizeScrollbars:!0,mouseWheelSpeed:20,snapThreshold:.334,disablePointer:!l.hasPointer,disableTouch:l.hasPointer||!l.hasTouch,disableMouse:l.hasPointer||l.hasTouch,startX:0,startY:0,scrollY:!0,directionLockThreshold:5,momentum:!0,bounce:!0,bounceTime:600,bounceEasing:\"\",preventDefault:!0,preventDefaultException:{tagName:/^(INPUT|TEXTAREA|BUTTON|SELECT)$/},HWCompositing:!0,useTransition:!0,useTransform:!0,bindToWrapper:void 0===t.onmousedown};for(var s in n)this.options[s]=n[s];this.translateZ=this.options.HWCompositing&&l.hasPerspective?\" translateZ(0)\":\"\",this.options.useTransition=l.hasTransition&&this.options.useTransition,this.options.useTransform=l.hasTransform&&this.options.useTransform,this.options.eventPassthrough=!0===this.options.eventPassthrough?\"vertical\":this.options.eventPassthrough,this.options.preventDefault=!this.options.eventPassthrough&&this.options.preventDefault,this.options.scrollY=\"vertical\"!=this.options.eventPassthrough&&this.options.scrollY,this.options.scrollX=\"horizontal\"!=this.options.eventPassthrough&&this.options.scrollX,this.options.freeScroll=this.options.freeScroll&&!this.options.eventPassthrough,this.options.directionLockThreshold=this.options.eventPassthrough?0:this.options.directionLockThreshold,this.options.bounceEasing=\"string\"==typeof this.options.bounceEasing?l.ease[this.options.bounceEasing]||l.ease.circular:this.options.bounceEasing,this.options.resizePolling=void 0===this.options.resizePolling?60:this.options.resizePolling,!0===this.options.tap&&(this.options.tap=\"tap\"),\"scale\"==this.options.shrinkScrollbars&&(this.options.useTransition=!1),this.options.invertWheelDirection=this.options.invertWheelDirection?-1:1,this.x=0,this.y=0,this.directionX=0,this.directionY=0,this._events={},this._init(),this.refresh(),this.scrollTo(this.options.startX,this.options.startY),this.enable()}function o(t,e,n){var s=i.createElement(\"div\"),o=i.createElement(\"div\");return!0===n&&(s.style.cssText=\"position:absolute;z-index:9999\",o.style.cssText=\"-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;position:absolute;background:rgba(0,0,0,0.5);border:1px solid rgba(255,255,255,0.9);border-radius:3px\"),o.className=\"iScrollIndicator\",\"h\"==t?(!0===n&&(s.style.cssText+=\";height:7px;left:2px;right:2px;bottom:0\",o.style.height=\"100%\"),s.className=\"iScrollHorizontalScrollbar\"):(!0===n&&(s.style.cssText+=\";width:7px;bottom:2px;top:2px;right:1px\",o.style.width=\"100%\"),s.className=\"iScrollVerticalScrollbar\"),s.style.cssText+=\";overflow:hidden\",e||(s.style.pointerEvents=\"none\"),s.appendChild(o),s}function r(e,n){this.wrapper=\"string\"==typeof n.el?i.querySelector(n.el):n.el,this.wrapperStyle=this.wrapper.style,this.indicator=this.wrapper.children[0],this.indicatorStyle=this.indicator.style,this.scroller=e,this.options={listenX:!0,listenY:!0,interactive:!1,resize:!0,defaultScrollbars:!1,shrink:!1,fade:!1,speedRatioX:0,speedRatioY:0};for(var s in n)this.options[s]=n[s];if(this.sizeRatioX=1,this.sizeRatioY=1,this.maxPosX=0,this.maxPosY=0,this.options.interactive&&(this.options.disableTouch||(l.addEvent(this.indicator,\"touchstart\",this),l.addEvent(t,\"touchend\",this)),this.options.disablePointer||(l.addEvent(this.indicator,l.prefixPointerEvent(\"pointerdown\"),this),l.addEvent(t,l.prefixPointerEvent(\"pointerup\"),this)),this.options.disableMouse||(l.addEvent(this.indicator,\"mousedown\",this),l.addEvent(t,\"mouseup\",this))),this.options.fade){this.wrapperStyle[l.style.transform]=this.scroller.translateZ;var o=l.style.transitionDuration;this.wrapperStyle[o]=l.isBadAndroid?\"0.0001ms\":\"0ms\";var r=this;l.isBadAndroid&&a(function(){\"0.0001ms\"===r.wrapperStyle[o]&&(r.wrapperStyle[o]=\"0s\")}),this.wrapperStyle.opacity=\"0\"}}var a=t.requestAnimationFrame||t.webkitRequestAnimationFrame||t.mozRequestAnimationFrame||t.oRequestAnimationFrame||t.msRequestAnimationFrame||function(e){t.setTimeout(e,1e3/60)},l=function(){function e(t){return!1!==r&&(\"\"===r?t:r+t.charAt(0).toUpperCase()+t.substr(1))}var s={},o=i.createElement(\"div\").style,r=function(){for(var t=[\"t\",\"webkitT\",\"MozT\",\"msT\",\"OT\"],e=0,i=t.length;e<i;e++)if(t[e]+\"ransform\"in o)return t[e].substr(0,t[e].length-1);return!1}();s.getTime=Date.now||function(){return(new Date).getTime()},s.extend=function(t,e){for(var i in e)t[i]=e[i]},s.addEvent=function(t,e,i,n){t.addEventListener(e,i,!!n)},s.removeEvent=function(t,e,i,n){t.removeEventListener(e,i,!!n)},s.prefixPointerEvent=function(e){return t.MSPointerEvent?\"MSPointer\"+e.charAt(7).toUpperCase()+e.substr(8):e},s.momentum=function(t,e,i,s,o,r){var a,l,c=t-e,h=n.abs(c)/i;return r=void 0===r?6e-4:r,a=t+h*h/(2*r)*(c<0?-1:1),l=h/r,a<s?(a=o?s-o/2.5*(h/8):s,c=n.abs(a-t),l=c/h):a>0&&(a=o?o/2.5*(h/8):0,c=n.abs(t)+a,l=c/h),{destination:n.round(a),duration:l}};var a=e(\"transform\");return s.extend(s,{hasTransform:!1!==a,hasPerspective:e(\"perspective\")in o,hasTouch:\"ontouchstart\"in t,hasPointer:!(!t.PointerEvent&&!t.MSPointerEvent),hasTransition:e(\"transition\")in o}),s.isBadAndroid=function(){var e=t.navigator.appVersion;if(/Android/.test(e)&&!/Chrome\\/\\d/.test(e)){var i=e.match(/Safari\\/(\\d+.\\d)/);return!(i&&\"object\"==typeof i&&i.length>=2)||parseFloat(i[1])<535.19}return!1}(),s.extend(s.style={},{transform:a,transitionTimingFunction:e(\"transitionTimingFunction\"),transitionDuration:e(\"transitionDuration\"),transitionDelay:e(\"transitionDelay\"),transformOrigin:e(\"transformOrigin\")}),s.hasClass=function(t,e){return new RegExp(\"(^|\\\\s)\"+e+\"(\\\\s|$)\").test(t.className)},s.addClass=function(t,e){if(!s.hasClass(t,e)){var i=t.className.split(\" \");i.push(e),t.className=i.join(\" \")}},s.removeClass=function(t,e){if(s.hasClass(t,e)){var i=new RegExp(\"(^|\\\\s)\"+e+\"(\\\\s|$)\",\"g\");t.className=t.className.replace(i,\" \")}},s.offset=function(t){for(var e=-t.offsetLeft,i=-t.offsetTop;t=t.offsetParent;)e-=t.offsetLeft,i-=t.offsetTop;return{left:e,top:i}},s.preventDefaultException=function(t,e){for(var i in e)if(e[i].test(t[i]))return!0;return!1},s.extend(s.eventType={},{touchstart:1,touchmove:1,touchend:1,mousedown:2,mousemove:2,mouseup:2,pointerdown:3,pointermove:3,pointerup:3,MSPointerDown:3,MSPointerMove:3,MSPointerUp:3}),s.extend(s.ease={},{quadratic:{style:\"cubic-bezier(0.25, 0.46, 0.45, 0.94)\",fn:function(t){return t*(2-t)}},circular:{style:\"cubic-bezier(0.1, 0.57, 0.1, 1)\",fn:function(t){return n.sqrt(1- --t*t)}},back:{style:\"cubic-bezier(0.175, 0.885, 0.32, 1.275)\",fn:function(t){return(t-=1)*t*(5*t+4)+1}},bounce:{style:\"\",fn:function(t){return(t/=1)<1/2.75?7.5625*t*t:t<2/2.75?7.5625*(t-=1.5/2.75)*t+.75:t<2.5/2.75?7.5625*(t-=2.25/2.75)*t+.9375:7.5625*(t-=2.625/2.75)*t+.984375}},elastic:{style:\"\",fn:function(t){return 0===t?0:1==t?1:.4*n.pow(2,-10*t)*n.sin((t-.055)*(2*n.PI)/.22)+1}}}),s.tap=function(t,e){var n=i.createEvent(\"Event\");n.initEvent(e,!0,!0),n.pageX=t.pageX,n.pageY=t.pageY,t.target.dispatchEvent(n)},s.click=function(t){var e,n=t.target;/(SELECT|INPUT|TEXTAREA)/i.test(n.tagName)||(e=i.createEvent(\"MouseEvents\"),e.initMouseEvent(\"click\",!0,!0,t.view,1,n.screenX,n.screenY,n.clientX,n.clientY,t.ctrlKey,t.altKey,t.shiftKey,t.metaKey,0,null),e._constructed=!0,n.dispatchEvent(e))},s}();s.prototype={version:\"5.2.0\",_init:function(){this._initEvents(),(this.options.scrollbars||this.options.indicators)&&this._initIndicators(),this.options.mouseWheel&&this._initWheel(),this.options.snap&&this._initSnap(),this.options.keyBindings&&this._initKeys()},destroy:function(){this._initEvents(!0),clearTimeout(this.resizeTimeout),this.resizeTimeout=null,this._execEvent(\"destroy\")},_transitionEnd:function(t){t.target==this.scroller&&this.isInTransition&&(this._transitionTime(),this.resetPosition(this.options.bounceTime)||(this.isInTransition=!1,this._execEvent(\"scrollEnd\")))},_start:function(t){if(1!=l.eventType[t.type]){if(0!==(t.which?t.button:t.button<2?0:4==t.button?1:2))return}if(this.enabled&&(!this.initiated||l.eventType[t.type]===this.initiated)){!this.options.preventDefault||l.isBadAndroid||l.preventDefaultException(t.target,this.options.preventDefaultException)||t.preventDefault();var e,i=t.touches?t.touches[0]:t;this.initiated=l.eventType[t.type],this.moved=!1,this.distX=0,this.distY=0,this.directionX=0,this.directionY=0,this.directionLocked=0,this.startTime=l.getTime(),this.options.useTransition&&this.isInTransition?(this._transitionTime(),this.isInTransition=!1,e=this.getComputedPosition(),this._translate(n.round(e.x),n.round(e.y)),this._execEvent(\"scrollEnd\")):!this.options.useTransition&&this.isAnimating&&(this.isAnimating=!1,this._execEvent(\"scrollEnd\")),this.startX=this.x,this.startY=this.y,this.absStartX=this.x,this.absStartY=this.y,this.pointX=i.pageX,this.pointY=i.pageY,this._execEvent(\"beforeScrollStart\")}},_move:function(t){if(this.enabled&&l.eventType[t.type]===this.initiated){this.options.preventDefault&&t.preventDefault();var e,i,s,o,r=t.touches?t.touches[0]:t,a=r.pageX-this.pointX,c=r.pageY-this.pointY,h=l.getTime();if(this.pointX=r.pageX,this.pointY=r.pageY,this.distX+=a,this.distY+=c,s=n.abs(this.distX),o=n.abs(this.distY),!(h-this.endTime>300&&s<10&&o<10)){if(this.directionLocked||this.options.freeScroll||(s>o+this.options.directionLockThreshold?this.directionLocked=\"h\":o>=s+this.options.directionLockThreshold?this.directionLocked=\"v\":this.directionLocked=\"n\"),\"h\"==this.directionLocked){if(\"vertical\"==this.options.eventPassthrough)t.preventDefault();else if(\"horizontal\"==this.options.eventPassthrough)return void(this.initiated=!1);c=0}else if(\"v\"==this.directionLocked){if(\"horizontal\"==this.options.eventPassthrough)t.preventDefault();else if(\"vertical\"==this.options.eventPassthrough)return void(this.initiated=!1);a=0}a=this.hasHorizontalScroll?a:0,c=this.hasVerticalScroll?c:0,e=this.x+a,i=this.y+c,(e>0||e<this.maxScrollX)&&(e=this.options.bounce?this.x+a/3:e>0?0:this.maxScrollX),(i>0||i<this.maxScrollY)&&(i=this.options.bounce?this.y+c/3:i>0?0:this.maxScrollY),this.directionX=a>0?-1:a<0?1:0,this.directionY=c>0?-1:c<0?1:0,this.moved||this._execEvent(\"scrollStart\"),this.moved=!0,this._translate(e,i),h-this.startTime>300&&(this.startTime=h,this.startX=this.x,this.startY=this.y)}}},_end:function(t){if(this.enabled&&l.eventType[t.type]===this.initiated){this.options.preventDefault&&!l.preventDefaultException(t.target,this.options.preventDefaultException)&&t.preventDefault();var e,i,s=(t.changedTouches&&t.changedTouches[0],l.getTime()-this.startTime),o=n.round(this.x),r=n.round(this.y),a=n.abs(o-this.startX),c=n.abs(r-this.startY),h=0,p=\"\";if(this.isInTransition=0,this.initiated=0,this.endTime=l.getTime(),!this.resetPosition(this.options.bounceTime)){if(this.scrollTo(o,r),!this.moved)return this.options.tap&&l.tap(t,this.options.tap),this.options.click&&l.click(t),void this._execEvent(\"scrollCancel\");if(this._events.flick&&s<200&&a<100&&c<100)return void this._execEvent(\"flick\");if(this.options.momentum&&s<300&&(e=this.hasHorizontalScroll?l.momentum(this.x,this.startX,s,this.maxScrollX,this.options.bounce?this.wrapperWidth:0,this.options.deceleration):{destination:o,duration:0},i=this.hasVerticalScroll?l.momentum(this.y,this.startY,s,this.maxScrollY,this.options.bounce?this.wrapperHeight:0,this.options.deceleration):{destination:r,duration:0},o=e.destination,r=i.destination,h=n.max(e.duration,i.duration),this.isInTransition=1),this.options.snap){var u=this._nearestSnap(o,r);this.currentPage=u,h=this.options.snapSpeed||n.max(n.max(n.min(n.abs(o-u.x),1e3),n.min(n.abs(r-u.y),1e3)),300),o=u.x,r=u.y,this.directionX=0,this.directionY=0,p=this.options.bounceEasing}if(o!=this.x||r!=this.y)return(o>0||o<this.maxScrollX||r>0||r<this.maxScrollY)&&(p=l.ease.quadratic),void this.scrollTo(o,r,h,p);this._execEvent(\"scrollEnd\")}}},_resize:function(){var t=this;clearTimeout(this.resizeTimeout),this.resizeTimeout=setTimeout(function(){t.refresh()},this.options.resizePolling)},resetPosition:function(t){var e=this.x,i=this.y;return t=t||0,!this.hasHorizontalScroll||this.x>0?e=0:this.x<this.maxScrollX&&(e=this.maxScrollX),!this.hasVerticalScroll||this.y>0?i=0:this.y<this.maxScrollY&&(i=this.maxScrollY),(e!=this.x||i!=this.y)&&(this.scrollTo(e,i,t,this.options.bounceEasing),!0)},disable:function(){this.enabled=!1},enable:function(){this.enabled=!0},refresh:function(){this.wrapper.offsetHeight;this.wrapperWidth=this.wrapper.clientWidth,this.wrapperHeight=this.wrapper.clientHeight,this.scrollerWidth=this.scroller.offsetWidth,this.scrollerHeight=this.scroller.offsetHeight,this.maxScrollX=this.wrapperWidth-this.scrollerWidth,this.maxScrollY=this.wrapperHeight-this.scrollerHeight,this.hasHorizontalScroll=this.options.scrollX&&this.maxScrollX<0,this.hasVerticalScroll=this.options.scrollY&&this.maxScrollY<0,this.hasHorizontalScroll||(this.maxScrollX=0,this.scrollerWidth=this.wrapperWidth),this.hasVerticalScroll||(this.maxScrollY=0,this.scrollerHeight=this.wrapperHeight),this.endTime=0,this.directionX=0,this.directionY=0,this.wrapperOffset=l.offset(this.wrapper),this._execEvent(\"refresh\"),this.resetPosition()},on:function(t,e){this._events[t]||(this._events[t]=[]),this._events[t].push(e)},off:function(t,e){if(this._events[t]){var i=this._events[t].indexOf(e);i>-1&&this._events[t].splice(i,1)}},_execEvent:function(t){if(this._events[t]){var e=0,i=this._events[t].length;if(i)for(;e<i;e++)this._events[t][e].apply(this,[].slice.call(arguments,1))}},scrollBy:function(t,e,i,n){t=this.x+t,e=this.y+e,i=i||0,this.scrollTo(t,e,i,n)},scrollTo:function(t,e,i,n){n=n||l.ease.circular,this.isInTransition=this.options.useTransition&&i>0;var s=this.options.useTransition&&n.style;!i||s?(s&&(this._transitionTimingFunction(n.style),this._transitionTime(i)),this._translate(t,e)):this._animate(t,e,i,n.fn)},scrollToElement:function(t,e,i,s,o){if(t=t.nodeType?t:this.scroller.querySelector(t)){var r=l.offset(t);r.left-=this.wrapperOffset.left,r.top-=this.wrapperOffset.top,!0===i&&(i=n.round(t.offsetWidth/2-this.wrapper.offsetWidth/2)),!0===s&&(s=n.round(t.offsetHeight/2-this.wrapper.offsetHeight/2)),r.left-=i||0,r.top-=s||0,r.left=r.left>0?0:r.left<this.maxScrollX?this.maxScrollX:r.left,r.top=r.top>0?0:r.top<this.maxScrollY?this.maxScrollY:r.top,e=void 0===e||null===e||\"auto\"===e?n.max(n.abs(this.x-r.left),n.abs(this.y-r.top)):e,this.scrollTo(r.left,r.top,e,o)}},_transitionTime:function(t){t=t||0;var e=l.style.transitionDuration;if(this.scrollerStyle[e]=t+\"ms\",!t&&l.isBadAndroid){this.scrollerStyle[e]=\"0.0001ms\";var i=this;a(function(){\"0.0001ms\"===i.scrollerStyle[e]&&(i.scrollerStyle[e]=\"0s\")})}if(this.indicators)for(var n=this.indicators.length;n--;)this.indicators[n].transitionTime(t)},_transitionTimingFunction:function(t){if(this.scrollerStyle[l.style.transitionTimingFunction]=t,this.indicators)for(var e=this.indicators.length;e--;)this.indicators[e].transitionTimingFunction(t)},_translate:function(t,e){if(this.options.useTransform?this.scrollerStyle[l.style.transform]=\"translate(\"+t+\"px,\"+e+\"px)\"+this.translateZ:(t=n.round(t),e=n.round(e),this.scrollerStyle.left=t+\"px\",this.scrollerStyle.top=e+\"px\"),this.x=t,this.y=e,this.indicators)for(var i=this.indicators.length;i--;)this.indicators[i].updatePosition()},_initEvents:function(e){var i=e?l.removeEvent:l.addEvent,n=this.options.bindToWrapper?this.wrapper:t;i(t,\"orientationchange\",this),i(t,\"resize\",this),this.options.click&&i(this.wrapper,\"click\",this,!0),this.options.disableMouse||(i(this.wrapper,\"mousedown\",this),i(n,\"mousemove\",this),i(n,\"mousecancel\",this),i(n,\"mouseup\",this)),l.hasPointer&&!this.options.disablePointer&&(i(this.wrapper,l.prefixPointerEvent(\"pointerdown\"),this),i(n,l.prefixPointerEvent(\"pointermove\"),this),i(n,l.prefixPointerEvent(\"pointercancel\"),this),i(n,l.prefixPointerEvent(\"pointerup\"),this)),l.hasTouch&&!this.options.disableTouch&&(i(this.wrapper,\"touchstart\",this),i(n,\"touchmove\",this),i(n,\"touchcancel\",this),i(n,\"touchend\",this)),i(this.scroller,\"transitionend\",this),i(this.scroller,\"webkitTransitionEnd\",this),i(this.scroller,\"oTransitionEnd\",this),i(this.scroller,\"MSTransitionEnd\",this)},getComputedPosition:function(){var e,i,n=t.getComputedStyle(this.scroller,null);return this.options.useTransform?(n=n[l.style.transform].split(\")\")[0].split(\", \"),e=+(n[12]||n[4]),i=+(n[13]||n[5])):(e=+n.left.replace(/[^-\\d.]/g,\"\"),i=+n.top.replace(/[^-\\d.]/g,\"\")),{x:e,y:i}},_initIndicators:function(){function t(t){if(a.indicators)for(var e=a.indicators.length;e--;)t.call(a.indicators[e])}var e,i=this.options.interactiveScrollbars,n=\"string\"!=typeof this.options.scrollbars,s=[],a=this;this.indicators=[],this.options.scrollbars&&(this.options.scrollY&&(e={el:o(\"v\",i,this.options.scrollbars),interactive:i,defaultScrollbars:!0,customStyle:n,resize:this.options.resizeScrollbars,shrink:this.options.shrinkScrollbars,fade:this.options.fadeScrollbars,listenX:!1},this.wrapper.appendChild(e.el),s.push(e)),this.options.scrollX&&(e={el:o(\"h\",i,this.options.scrollbars),interactive:i,defaultScrollbars:!0,customStyle:n,resize:this.options.resizeScrollbars,shrink:this.options.shrinkScrollbars,fade:this.options.fadeScrollbars,listenY:!1},this.wrapper.appendChild(e.el),s.push(e))),this.options.indicators&&(s=s.concat(this.options.indicators));for(var l=s.length;l--;)this.indicators.push(new r(this,s[l]));this.options.fadeScrollbars&&(this.on(\"scrollEnd\",function(){t(function(){this.fade()})}),this.on(\"scrollCancel\",function(){t(function(){this.fade()})}),this.on(\"scrollStart\",function(){t(function(){this.fade(1)})}),this.on(\"beforeScrollStart\",function(){t(function(){this.fade(1,!0)})})),this.on(\"refresh\",function(){t(function(){this.refresh()})}),this.on(\"destroy\",function(){t(function(){this.destroy()}),delete this.indicators})},_initWheel:function(){l.addEvent(this.wrapper,\"wheel\",this),l.addEvent(this.wrapper,\"mousewheel\",this),l.addEvent(this.wrapper,\"DOMMouseScroll\",this),this.on(\"destroy\",function(){clearTimeout(this.wheelTimeout),this.wheelTimeout=null,l.removeEvent(this.wrapper,\"wheel\",this),l.removeEvent(this.wrapper,\"mousewheel\",this),l.removeEvent(this.wrapper,\"DOMMouseScroll\",this)})},_wheel:function(t){if(this.enabled){t.preventDefault();var e,i,s,o,r=this;if(void 0===this.wheelTimeout&&r._execEvent(\"scrollStart\"),clearTimeout(this.wheelTimeout),this.wheelTimeout=setTimeout(function(){r.options.snap||r._execEvent(\"scrollEnd\"),r.wheelTimeout=void 0},400),\"deltaX\"in t)1===t.deltaMode?(e=-t.deltaX*this.options.mouseWheelSpeed,i=-t.deltaY*this.options.mouseWheelSpeed):(e=-t.deltaX,i=-t.deltaY);else if(\"wheelDeltaX\"in t)e=t.wheelDeltaX/120*this.options.mouseWheelSpeed,i=t.wheelDeltaY/120*this.options.mouseWheelSpeed;else if(\"wheelDelta\"in t)e=i=t.wheelDelta/120*this.options.mouseWheelSpeed;else{if(!(\"detail\"in t))return;e=i=-t.detail/3*this.options.mouseWheelSpeed}if(e*=this.options.invertWheelDirection,i*=this.options.invertWheelDirection,this.hasVerticalScroll||(e=i,i=0),this.options.snap)return s=this.currentPage.pageX,o=this.currentPage.pageY,e>0?s--:e<0&&s++,i>0?o--:i<0&&o++,void this.goToPage(s,o);s=this.x+n.round(this.hasHorizontalScroll?e:0),o=this.y+n.round(this.hasVerticalScroll?i:0),this.directionX=e>0?-1:e<0?1:0,this.directionY=i>0?-1:i<0?1:0,s>0?s=0:s<this.maxScrollX&&(s=this.maxScrollX),o>0?o=0:o<this.maxScrollY&&(o=this.maxScrollY),this.scrollTo(s,o,0)}},_initSnap:function(){this.currentPage={},\"string\"==typeof this.options.snap&&(this.options.snap=this.scroller.querySelectorAll(this.options.snap)),this.on(\"refresh\",function(){var t,e,i,s,o,r,a=0,l=0,c=0,h=this.options.snapStepX||this.wrapperWidth,p=this.options.snapStepY||this.wrapperHeight;if(this.pages=[],this.wrapperWidth&&this.wrapperHeight&&this.scrollerWidth&&this.scrollerHeight){if(!0===this.options.snap)for(i=n.round(h/2),s=n.round(p/2);c>-this.scrollerWidth;){for(this.pages[a]=[],t=0,o=0;o>-this.scrollerHeight;)this.pages[a][t]={x:n.max(c,this.maxScrollX),y:n.max(o,this.maxScrollY),width:h,height:p,cx:c-i,cy:o-s},o-=p,t++;c-=h,a++}else for(r=this.options.snap,t=r.length,e=-1;a<t;a++)(0===a||r[a].offsetLeft<=r[a-1].offsetLeft)&&(l=0,e++),this.pages[l]||(this.pages[l]=[]),c=n.max(-r[a].offsetLeft,this.maxScrollX),o=n.max(-r[a].offsetTop,this.maxScrollY),i=c-n.round(r[a].offsetWidth/2),s=o-n.round(r[a].offsetHeight/2),this.pages[l][e]={x:c,y:o,width:r[a].offsetWidth,height:r[a].offsetHeight,cx:i,cy:s},c>this.maxScrollX&&l++;this.goToPage(this.currentPage.pageX||0,this.currentPage.pageY||0,0),this.options.snapThreshold%1==0?(this.snapThresholdX=this.options.snapThreshold,this.snapThresholdY=this.options.snapThreshold):(this.snapThresholdX=n.round(this.pages[this.currentPage.pageX][this.currentPage.pageY].width*this.options.snapThreshold),this.snapThresholdY=n.round(this.pages[this.currentPage.pageX][this.currentPage.pageY].height*this.options.snapThreshold))}}),this.on(\"flick\",function(){var t=this.options.snapSpeed||n.max(n.max(n.min(n.abs(this.x-this.startX),1e3),n.min(n.abs(this.y-this.startY),1e3)),300);this.goToPage(this.currentPage.pageX+this.directionX,this.currentPage.pageY+this.directionY,t)})},_nearestSnap:function(t,e){if(!this.pages.length)return{x:0,y:0,pageX:0,pageY:0};var i=0,s=this.pages.length,o=0;if(n.abs(t-this.absStartX)<this.snapThresholdX&&n.abs(e-this.absStartY)<this.snapThresholdY)return this.currentPage;for(t>0?t=0:t<this.maxScrollX&&(t=this.maxScrollX),e>0?e=0:e<this.maxScrollY&&(e=this.maxScrollY);i<s;i++)if(t>=this.pages[i][0].cx){t=this.pages[i][0].x;break}for(s=this.pages[i].length;o<s;o++)if(e>=this.pages[0][o].cy){e=this.pages[0][o].y;break}return i==this.currentPage.pageX&&(i+=this.directionX,i<0?i=0:i>=this.pages.length&&(i=this.pages.length-1),t=this.pages[i][0].x),o==this.currentPage.pageY&&(o+=this.directionY,o<0?o=0:o>=this.pages[0].length&&(o=this.pages[0].length-1),e=this.pages[0][o].y),{x:t,y:e,pageX:i,pageY:o}},goToPage:function(t,e,i,s){s=s||this.options.bounceEasing,t>=this.pages.length?t=this.pages.length-1:t<0&&(t=0),e>=this.pages[t].length?e=this.pages[t].length-1:e<0&&(e=0);var o=this.pages[t][e].x,r=this.pages[t][e].y;i=void 0===i?this.options.snapSpeed||n.max(n.max(n.min(n.abs(o-this.x),1e3),n.min(n.abs(r-this.y),1e3)),300):i,this.currentPage={x:o,y:r,pageX:t,pageY:e},this.scrollTo(o,r,i,s)},next:function(t,e){var i=this.currentPage.pageX,n=this.currentPage.pageY;i++,i>=this.pages.length&&this.hasVerticalScroll&&(i=0,n++),this.goToPage(i,n,t,e)},prev:function(t,e){var i=this.currentPage.pageX,n=this.currentPage.pageY;i--,i<0&&this.hasVerticalScroll&&(i=0,n--),this.goToPage(i,n,t,e)},_initKeys:function(e){var i,n={pageUp:33,pageDown:34,end:35,home:36,left:37,up:38,right:39,down:40};if(\"object\"==typeof this.options.keyBindings)for(i in this.options.keyBindings)\"string\"==typeof this.options.keyBindings[i]&&(this.options.keyBindings[i]=this.options.keyBindings[i].toUpperCase().charCodeAt(0));else this.options.keyBindings={};for(i in n)this.options.keyBindings[i]=this.options.keyBindings[i]||n[i];l.addEvent(t,\"keydown\",this),this.on(\"destroy\",function(){l.removeEvent(t,\"keydown\",this)})},_key:function(t){if(this.enabled){var e,i=this.options.snap,s=i?this.currentPage.pageX:this.x,o=i?this.currentPage.pageY:this.y,r=l.getTime(),a=this.keyTime||0;switch(this.options.useTransition&&this.isInTransition&&(e=this.getComputedPosition(),this._translate(n.round(e.x),n.round(e.y)),this.isInTransition=!1),this.keyAcceleration=r-a<200?n.min(this.keyAcceleration+.25,50):0,t.keyCode){case this.options.keyBindings.pageUp:\nthis.hasHorizontalScroll&&!this.hasVerticalScroll?s+=i?1:this.wrapperWidth:o+=i?1:this.wrapperHeight;break;case this.options.keyBindings.pageDown:this.hasHorizontalScroll&&!this.hasVerticalScroll?s-=i?1:this.wrapperWidth:o-=i?1:this.wrapperHeight;break;case this.options.keyBindings.end:s=i?this.pages.length-1:this.maxScrollX,o=i?this.pages[0].length-1:this.maxScrollY;break;case this.options.keyBindings.home:s=0,o=0;break;case this.options.keyBindings.left:s+=i?-1:5+this.keyAcceleration>>0;break;case this.options.keyBindings.up:o+=i?1:5+this.keyAcceleration>>0;break;case this.options.keyBindings.right:s-=i?-1:5+this.keyAcceleration>>0;break;case this.options.keyBindings.down:o-=i?1:5+this.keyAcceleration>>0;break;default:return}if(i)return void this.goToPage(s,o);s>0?(s=0,this.keyAcceleration=0):s<this.maxScrollX&&(s=this.maxScrollX,this.keyAcceleration=0),o>0?(o=0,this.keyAcceleration=0):o<this.maxScrollY&&(o=this.maxScrollY,this.keyAcceleration=0),this.scrollTo(s,o,0),this.keyTime=r}},_animate:function(t,e,i,n){function s(){var u,d,m,f=l.getTime();if(f>=p)return o.isAnimating=!1,o._translate(t,e),void(o.resetPosition(o.options.bounceTime)||o._execEvent(\"scrollEnd\"));f=(f-h)/i,m=n(f),u=(t-r)*m+r,d=(e-c)*m+c,o._translate(u,d),o.isAnimating&&a(s)}var o=this,r=this.x,c=this.y,h=l.getTime(),p=h+i;this.isAnimating=!0,s()},handleEvent:function(t){switch(t.type){case\"touchstart\":case\"pointerdown\":case\"MSPointerDown\":case\"mousedown\":this._start(t);break;case\"touchmove\":case\"pointermove\":case\"MSPointerMove\":case\"mousemove\":this._move(t);break;case\"touchend\":case\"pointerup\":case\"MSPointerUp\":case\"mouseup\":case\"touchcancel\":case\"pointercancel\":case\"MSPointerCancel\":case\"mousecancel\":this._end(t);break;case\"orientationchange\":case\"resize\":this._resize();break;case\"transitionend\":case\"webkitTransitionEnd\":case\"oTransitionEnd\":case\"MSTransitionEnd\":this._transitionEnd(t);break;case\"wheel\":case\"DOMMouseScroll\":case\"mousewheel\":this._wheel(t);break;case\"keydown\":this._key(t);break;case\"click\":this.enabled&&!t._constructed&&(t.preventDefault(),t.stopPropagation())}}},r.prototype={handleEvent:function(t){switch(t.type){case\"touchstart\":case\"pointerdown\":case\"MSPointerDown\":case\"mousedown\":this._start(t);break;case\"touchmove\":case\"pointermove\":case\"MSPointerMove\":case\"mousemove\":this._move(t);break;case\"touchend\":case\"pointerup\":case\"MSPointerUp\":case\"mouseup\":case\"touchcancel\":case\"pointercancel\":case\"MSPointerCancel\":case\"mousecancel\":this._end(t)}},destroy:function(){this.options.fadeScrollbars&&(clearTimeout(this.fadeTimeout),this.fadeTimeout=null),this.options.interactive&&(l.removeEvent(this.indicator,\"touchstart\",this),l.removeEvent(this.indicator,l.prefixPointerEvent(\"pointerdown\"),this),l.removeEvent(this.indicator,\"mousedown\",this),l.removeEvent(t,\"touchmove\",this),l.removeEvent(t,l.prefixPointerEvent(\"pointermove\"),this),l.removeEvent(t,\"mousemove\",this),l.removeEvent(t,\"touchend\",this),l.removeEvent(t,l.prefixPointerEvent(\"pointerup\"),this),l.removeEvent(t,\"mouseup\",this)),this.options.defaultScrollbars&&this.wrapper.parentNode.removeChild(this.wrapper)},_start:function(e){var i=e.touches?e.touches[0]:e;e.preventDefault(),e.stopPropagation(),this.transitionTime(),this.initiated=!0,this.moved=!1,this.lastPointX=i.pageX,this.lastPointY=i.pageY,this.startTime=l.getTime(),this.options.disableTouch||l.addEvent(t,\"touchmove\",this),this.options.disablePointer||l.addEvent(t,l.prefixPointerEvent(\"pointermove\"),this),this.options.disableMouse||l.addEvent(t,\"mousemove\",this),this.scroller._execEvent(\"beforeScrollStart\")},_move:function(t){var e,i,n,s,o=t.touches?t.touches[0]:t;l.getTime();this.moved||this.scroller._execEvent(\"scrollStart\"),this.moved=!0,e=o.pageX-this.lastPointX,this.lastPointX=o.pageX,i=o.pageY-this.lastPointY,this.lastPointY=o.pageY,n=this.x+e,s=this.y+i,this._pos(n,s),t.preventDefault(),t.stopPropagation()},_end:function(e){if(this.initiated){if(this.initiated=!1,e.preventDefault(),e.stopPropagation(),l.removeEvent(t,\"touchmove\",this),l.removeEvent(t,l.prefixPointerEvent(\"pointermove\"),this),l.removeEvent(t,\"mousemove\",this),this.scroller.options.snap){var i=this.scroller._nearestSnap(this.scroller.x,this.scroller.y),s=this.options.snapSpeed||n.max(n.max(n.min(n.abs(this.scroller.x-i.x),1e3),n.min(n.abs(this.scroller.y-i.y),1e3)),300);this.scroller.x==i.x&&this.scroller.y==i.y||(this.scroller.directionX=0,this.scroller.directionY=0,this.scroller.currentPage=i,this.scroller.scrollTo(i.x,i.y,s,this.scroller.options.bounceEasing))}this.moved&&this.scroller._execEvent(\"scrollEnd\")}},transitionTime:function(t){t=t||0;var e=l.style.transitionDuration;if(this.indicatorStyle[e]=t+\"ms\",!t&&l.isBadAndroid){this.indicatorStyle[e]=\"0.0001ms\";var i=this;a(function(){\"0.0001ms\"===i.indicatorStyle[e]&&(i.indicatorStyle[e]=\"0s\")})}},transitionTimingFunction:function(t){this.indicatorStyle[l.style.transitionTimingFunction]=t},refresh:function(){this.transitionTime(),this.options.listenX&&!this.options.listenY?this.indicatorStyle.display=this.scroller.hasHorizontalScroll?\"block\":\"none\":this.options.listenY&&!this.options.listenX?this.indicatorStyle.display=this.scroller.hasVerticalScroll?\"block\":\"none\":this.indicatorStyle.display=this.scroller.hasHorizontalScroll||this.scroller.hasVerticalScroll?\"block\":\"none\",this.scroller.hasHorizontalScroll&&this.scroller.hasVerticalScroll?(l.addClass(this.wrapper,\"iScrollBothScrollbars\"),l.removeClass(this.wrapper,\"iScrollLoneScrollbar\"),this.options.defaultScrollbars&&this.options.customStyle&&(this.options.listenX?this.wrapper.style.right=\"8px\":this.wrapper.style.bottom=\"8px\")):(l.removeClass(this.wrapper,\"iScrollBothScrollbars\"),l.addClass(this.wrapper,\"iScrollLoneScrollbar\"),this.options.defaultScrollbars&&this.options.customStyle&&(this.options.listenX?this.wrapper.style.right=\"2px\":this.wrapper.style.bottom=\"2px\"));this.wrapper.offsetHeight;this.options.listenX&&(this.wrapperWidth=this.wrapper.clientWidth,this.options.resize?(this.indicatorWidth=n.max(n.round(this.wrapperWidth*this.wrapperWidth/(this.scroller.scrollerWidth||this.wrapperWidth||1)),8),this.indicatorStyle.width=this.indicatorWidth+\"px\"):this.indicatorWidth=this.indicator.clientWidth,this.maxPosX=this.wrapperWidth-this.indicatorWidth,\"clip\"==this.options.shrink?(this.minBoundaryX=8-this.indicatorWidth,this.maxBoundaryX=this.wrapperWidth-8):(this.minBoundaryX=0,this.maxBoundaryX=this.maxPosX),this.sizeRatioX=this.options.speedRatioX||this.scroller.maxScrollX&&this.maxPosX/this.scroller.maxScrollX),this.options.listenY&&(this.wrapperHeight=this.wrapper.clientHeight,this.options.resize?(this.indicatorHeight=n.max(n.round(this.wrapperHeight*this.wrapperHeight/(this.scroller.scrollerHeight||this.wrapperHeight||1)),8),this.indicatorStyle.height=this.indicatorHeight+\"px\"):this.indicatorHeight=this.indicator.clientHeight,this.maxPosY=this.wrapperHeight-this.indicatorHeight,\"clip\"==this.options.shrink?(this.minBoundaryY=8-this.indicatorHeight,this.maxBoundaryY=this.wrapperHeight-8):(this.minBoundaryY=0,this.maxBoundaryY=this.maxPosY),this.maxPosY=this.wrapperHeight-this.indicatorHeight,this.sizeRatioY=this.options.speedRatioY||this.scroller.maxScrollY&&this.maxPosY/this.scroller.maxScrollY),this.updatePosition()},updatePosition:function(){var t=this.options.listenX&&n.round(this.sizeRatioX*this.scroller.x)||0,e=this.options.listenY&&n.round(this.sizeRatioY*this.scroller.y)||0;this.options.ignoreBoundaries||(t<this.minBoundaryX?(\"scale\"==this.options.shrink&&(this.width=n.max(this.indicatorWidth+t,8),this.indicatorStyle.width=this.width+\"px\"),t=this.minBoundaryX):t>this.maxBoundaryX?\"scale\"==this.options.shrink?(this.width=n.max(this.indicatorWidth-(t-this.maxPosX),8),this.indicatorStyle.width=this.width+\"px\",t=this.maxPosX+this.indicatorWidth-this.width):t=this.maxBoundaryX:\"scale\"==this.options.shrink&&this.width!=this.indicatorWidth&&(this.width=this.indicatorWidth,this.indicatorStyle.width=this.width+\"px\"),e<this.minBoundaryY?(\"scale\"==this.options.shrink&&(this.height=n.max(this.indicatorHeight+3*e,8),this.indicatorStyle.height=this.height+\"px\"),e=this.minBoundaryY):e>this.maxBoundaryY?\"scale\"==this.options.shrink?(this.height=n.max(this.indicatorHeight-3*(e-this.maxPosY),8),this.indicatorStyle.height=this.height+\"px\",e=this.maxPosY+this.indicatorHeight-this.height):e=this.maxBoundaryY:\"scale\"==this.options.shrink&&this.height!=this.indicatorHeight&&(this.height=this.indicatorHeight,this.indicatorStyle.height=this.height+\"px\")),this.x=t,this.y=e,this.scroller.options.useTransform?this.indicatorStyle[l.style.transform]=\"translate(\"+t+\"px,\"+e+\"px)\"+this.scroller.translateZ:(this.indicatorStyle.left=t+\"px\",this.indicatorStyle.top=e+\"px\")},_pos:function(t,e){t<0?t=0:t>this.maxPosX&&(t=this.maxPosX),e<0?e=0:e>this.maxPosY&&(e=this.maxPosY),t=this.options.listenX?n.round(t/this.sizeRatioX):this.scroller.x,e=this.options.listenY?n.round(e/this.sizeRatioY):this.scroller.y,this.scroller.scrollTo(t,e)},fade:function(t,e){if(!e||this.visible){clearTimeout(this.fadeTimeout),this.fadeTimeout=null;var i=t?250:500,n=t?0:300;t=t?\"1\":\"0\",this.wrapperStyle[l.style.transitionDuration]=i+\"ms\",this.fadeTimeout=setTimeout(function(t){this.wrapperStyle.opacity=t,this.visible=+t}.bind(this,t),n)}}},s.utils=l,void 0!==e&&e.exports?e.exports=s:\"function\"==typeof define&&define.amd?define(function(){return s}):t.IScroll=s}(window,document,Math)},{}],5:[function(t,e,i){(function(t){(function(){\"use strict\";function n(t){return t=String(t),t.charAt(0).toUpperCase()+t.slice(1)}function s(t,e,i){var n={\"10.0\":\"10\",6.4:\"10 Technical Preview\",6.3:\"8.1\",6.2:\"8\",6.1:\"Server 2008 R2 / 7\",\"6.0\":\"Server 2008 / Vista\",5.2:\"Server 2003 / XP 64-bit\",5.1:\"XP\",5.01:\"2000 SP1\",\"5.0\":\"2000\",\"4.0\":\"NT\",\"4.90\":\"ME\"};return e&&i&&/^Win/i.test(t)&&!/^Windows Phone /i.test(t)&&(n=n[/[\\d.]+$/.exec(t)])&&(t=\"Windows \"+n),t=String(t),e&&i&&(t=t.replace(RegExp(e,\"i\"),i)),t=r(t.replace(/ ce$/i,\" CE\").replace(/\\bhpw/i,\"web\").replace(/\\bMacintosh\\b/,\"Mac OS\").replace(/_PowerPC\\b/i,\" OS\").replace(/\\b(OS X) [^ \\d]+/i,\"$1\").replace(/\\bMac (OS X)\\b/,\"$1\").replace(/\\/(\\d)/,\" $1\").replace(/_/g,\".\").replace(/(?: BePC|[ .]*fc[ \\d.]+)$/i,\"\").replace(/\\bx86\\.64\\b/gi,\"x86_64\").replace(/\\b(Windows Phone) OS\\b/,\"$1\").replace(/\\b(Chrome OS \\w+) [\\d.]+\\b/,\"$1\").split(\" on \")[0])}function o(t,e){var i=-1,n=t?t.length:0;if(\"number\"==typeof n&&n>-1&&n<=S)for(;++i<n;)e(t[i],i,t);else a(t,e)}function r(t){return t=u(t),/^(?:webOS|i(?:OS|P))/.test(t)?t:n(t)}function a(t,e){for(var i in t)$.call(t,i)&&e(t[i],i,t)}function l(t){return null==t?n(t):T.call(t).slice(8,-1)}function c(t,e){var i=null!=t?typeof t[e]:\"number\";return!(/^(?:boolean|number|string|undefined)$/.test(i)||\"object\"==i&&!t[e])}function h(t){return String(t).replace(/([ -])(?!$)/g,\"$1?\")}function p(t,e){var i=null;return o(t,function(n,s){i=e(i,n,s,t)}),i}function u(t){return String(t).replace(/^ +| +$/g,\"\")}function d(t){function e(e){return p(e,function(e,i){var n=i.pattern||h(i);return!e&&(e=RegExp(\"\\\\b\"+n+\" *\\\\d+[.\\\\w_]*\",\"i\").exec(t)||RegExp(\"\\\\b\"+n+\" *\\\\w+-[\\\\w]*\",\"i\").exec(t)||RegExp(\"\\\\b\"+n+\"(?:; *(?:[a-z]+[_-])?[a-z]+\\\\d+|[^ ();-]*)\",\"i\").exec(t))&&((e=String(i.label&&!RegExp(n,\"i\").test(i.label)?i.label:e).split(\"/\"))[1]&&!/[\\d.]+/.test(e[0])&&(e[0]+=\" \"+e[1]),i=i.label||i,e=r(e[0].replace(RegExp(n,\"i\"),i).replace(RegExp(\"; *(?:\"+i+\"[_-])?\",\"i\"),\" \").replace(RegExp(\"(\"+i+\")[-_.]?(\\\\w)\",\"i\"),\"$1 $2\"))),e})}function i(){return this.description||\"\"}var n=f,o=t&&\"object\"==typeof t&&\"String\"!=l(t);o&&(n=t,t=null);var m=n.navigator||{},v=m.userAgent||\"\";t||(t=v);var b,x,S=o||w==g,_=o?!!m.likeChrome:/\\bChrome\\b/.test(t)&&!/internal|\\n/i.test(T.toString()),$=o?\"Object\":\"ScriptBridgingProxyObject\",k=o?\"Object\":\"Environment\",E=o&&n.java?\"JavaPackage\":l(n.java),P=o?\"Object\":\"RuntimeObject\",C=/\\bJava/.test(E)&&n.java,X=C&&l(n.environment)==k,A=C?\"a\":\"α\",I=C?\"b\":\"β\",M=n.document||{},Y=n.operamini||n.opera,O=y.test(O=o&&Y?Y[\"[[Class]]\"]:l(Y))?O:Y=null,W=t,B=[],D=null,H=t==v,z=H&&Y&&\"function\"==typeof Y.version&&Y.version(),N=function(e){return p(e,function(e,i){return e||RegExp(\"\\\\b\"+(i.pattern||h(i))+\"\\\\b\",\"i\").exec(t)&&(i.label||i)})}([{label:\"EdgeHTML\",pattern:\"Edge\"},\"Trident\",{label:\"WebKit\",pattern:\"AppleWebKit\"},\"iCab\",\"Presto\",\"NetFront\",\"Tasman\",\"KHTML\",\"Gecko\"]),R=function(e){return p(e,function(e,i){return e||RegExp(\"\\\\b\"+(i.pattern||h(i))+\"\\\\b\",\"i\").exec(t)&&(i.label||i)})}([\"Adobe AIR\",\"Arora\",\"Avant Browser\",\"Breach\",\"Camino\",\"Electron\",\"Epiphany\",\"Fennec\",\"Flock\",\"Galeon\",\"GreenBrowser\",\"iCab\",\"Iceweasel\",\"K-Meleon\",\"Konqueror\",\"Lunascape\",\"Maxthon\",{label:\"Microsoft Edge\",pattern:\"Edge\"},\"Midori\",\"Nook Browser\",\"PaleMoon\",\"PhantomJS\",\"Raven\",\"Rekonq\",\"RockMelt\",{label:\"Samsung Internet\",pattern:\"SamsungBrowser\"},\"SeaMonkey\",{label:\"Silk\",pattern:\"(?:Cloud9|Silk-Accelerated)\"},\"Sleipnir\",\"SlimBrowser\",{label:\"SRWare Iron\",pattern:\"Iron\"},\"Sunrise\",\"Swiftfox\",\"Waterfox\",\"WebPositive\",\"Opera Mini\",{label:\"Opera Mini\",pattern:\"OPiOS\"},\"Opera\",{label:\"Opera\",pattern:\"OPR\"},\"Chrome\",{label:\"Chrome Mobile\",pattern:\"(?:CriOS|CrMo)\"},{label:\"Firefox\",pattern:\"(?:Firefox|Minefield)\"},{label:\"Firefox for iOS\",pattern:\"FxiOS\"},{label:\"IE\",pattern:\"IEMobile\"},{label:\"IE\",pattern:\"MSIE\"},\"Safari\"]),L=e([{label:\"BlackBerry\",pattern:\"BB10\"},\"BlackBerry\",{label:\"Galaxy S\",pattern:\"GT-I9000\"},{label:\"Galaxy S2\",pattern:\"GT-I9100\"},{label:\"Galaxy S3\",pattern:\"GT-I9300\"},{label:\"Galaxy S4\",pattern:\"GT-I9500\"},{label:\"Galaxy S5\",pattern:\"SM-G900\"},{label:\"Galaxy S6\",pattern:\"SM-G920\"},{label:\"Galaxy S6 Edge\",pattern:\"SM-G925\"},{label:\"Galaxy S7\",pattern:\"SM-G930\"},{label:\"Galaxy S7 Edge\",pattern:\"SM-G935\"},\"Google TV\",\"Lumia\",\"iPad\",\"iPod\",\"iPhone\",\"Kindle\",{label:\"Kindle Fire\",pattern:\"(?:Cloud9|Silk-Accelerated)\"},\"Nexus\",\"Nook\",\"PlayBook\",\"PlayStation Vita\",\"PlayStation\",\"TouchPad\",\"Transformer\",{label:\"Wii U\",pattern:\"WiiU\"},\"Wii\",\"Xbox One\",{label:\"Xbox 360\",pattern:\"Xbox\"},\"Xoom\"]),F=function(e){return p(e,function(e,i,n){return e||(i[L]||i[/^[a-z]+(?: +[a-z]+\\b)*/i.exec(L)]||RegExp(\"\\\\b\"+h(n)+\"(?:\\\\b|\\\\w*\\\\d)\",\"i\").exec(t))&&n})}({Apple:{iPad:1,iPhone:1,iPod:1},Archos:{},Amazon:{Kindle:1,\"Kindle Fire\":1},Asus:{Transformer:1},\"Barnes & Noble\":{Nook:1},BlackBerry:{PlayBook:1},Google:{\"Google TV\":1,Nexus:1},HP:{TouchPad:1},HTC:{},LG:{},Microsoft:{Xbox:1,\"Xbox One\":1},Motorola:{Xoom:1},Nintendo:{\"Wii U\":1,Wii:1},Nokia:{Lumia:1},Samsung:{\"Galaxy S\":1,\"Galaxy S2\":1,\"Galaxy S3\":1,\"Galaxy S4\":1},Sony:{PlayStation:1,\"PlayStation Vita\":1}}),V=function(e){return p(e,function(e,i){var n=i.pattern||h(i);return!e&&(e=RegExp(\"\\\\b\"+n+\"(?:/[\\\\d.]+|[ \\\\w.]*)\",\"i\").exec(t))&&(e=s(e,n,i.label||i)),e})}([\"Windows Phone\",\"Android\",\"CentOS\",{label:\"Chrome OS\",pattern:\"CrOS\"},\"Debian\",\"Fedora\",\"FreeBSD\",\"Gentoo\",\"Haiku\",\"Kubuntu\",\"Linux Mint\",\"OpenBSD\",\"Red Hat\",\"SuSE\",\"Ubuntu\",\"Xubuntu\",\"Cygwin\",\"Symbian OS\",\"hpwOS\",\"webOS \",\"webOS\",\"Tablet OS\",\"Tizen\",\"Linux\",\"Mac OS X\",\"Macintosh\",\"Mac\",\"Windows 98;\",\"Windows \"]);if(N&&(N=[N]),F&&!L&&(L=e([F])),(b=/\\bGoogle TV\\b/.exec(L))&&(L=b[0]),/\\bSimulator\\b/i.test(t)&&(L=(L?L+\" \":\"\")+\"Simulator\"),\"Opera Mini\"==R&&/\\bOPiOS\\b/.test(t)&&B.push(\"running in Turbo/Uncompressed mode\"),\"IE\"==R&&/\\blike iPhone OS\\b/.test(t)?(b=d(t.replace(/like iPhone OS/,\"\")),F=b.manufacturer,L=b.product):/^iP/.test(L)?(R||(R=\"Safari\"),V=\"iOS\"+((b=/ OS ([\\d_]+)/i.exec(t))?\" \"+b[1].replace(/_/g,\".\"):\"\")):\"Konqueror\"!=R||/buntu/i.test(V)?F&&\"Google\"!=F&&(/Chrome/.test(R)&&!/\\bMobile Safari\\b/i.test(t)||/\\bVita\\b/.test(L))||/\\bAndroid\\b/.test(V)&&/^Chrome/.test(R)&&/\\bVersion\\//i.test(t)?(R=\"Android Browser\",V=/\\bAndroid\\b/.test(V)?V:\"Android\"):\"Silk\"==R?(/\\bMobi/i.test(t)||(V=\"Android\",B.unshift(\"desktop mode\")),/Accelerated *= *true/i.test(t)&&B.unshift(\"accelerated\")):\"PaleMoon\"==R&&(b=/\\bFirefox\\/([\\d.]+)\\b/.exec(t))?B.push(\"identifying as Firefox \"+b[1]):\"Firefox\"==R&&(b=/\\b(Mobile|Tablet|TV)\\b/i.exec(t))?(V||(V=\"Firefox OS\"),L||(L=b[1])):!R||(b=!/\\bMinefield\\b/i.test(t)&&/\\b(?:Firefox|Safari)\\b/.exec(R))?(R&&!L&&/[\\/,]|^[^(]+?\\)/.test(t.slice(t.indexOf(b+\"/\")+8))&&(R=null),(b=L||F||V)&&(L||F||/\\b(?:Android|Symbian OS|Tablet OS|webOS)\\b/.test(V))&&(R=/[a-z]+(?: Hat)?/i.exec(/\\bAndroid\\b/.test(V)?V:b)+\" Browser\")):\"Electron\"==R&&(b=(/\\bChrome\\/([\\d.]+)\\b/.exec(t)||0)[1])&&B.push(\"Chromium \"+b):V=\"Kubuntu\",z||(z=function(e){return p(e,function(e,i){return e||(RegExp(i+\"(?:-[\\\\d.]+/|(?: for [\\\\w-]+)?[ /-])([\\\\d.]+[^ ();/_-]*)\",\"i\").exec(t)||0)[1]||null})}([\"(?:Cloud9|CriOS|CrMo|Edge|FxiOS|IEMobile|Iron|Opera ?Mini|OPiOS|OPR|Raven|SamsungBrowser|Silk(?!/[\\\\d.]+$))\",\"Version\",h(R),\"(?:Firefox|Minefield|NetFront)\"])),(b=\"iCab\"==N&&parseFloat(z)>3&&\"WebKit\"||/\\bOpera\\b/.test(R)&&(/\\bOPR\\b/.test(t)?\"Blink\":\"Presto\")||/\\b(?:Midori|Nook|Safari)\\b/i.test(t)&&!/^(?:Trident|EdgeHTML)$/.test(N)&&\"WebKit\"||!N&&/\\bMSIE\\b/i.test(t)&&(\"Mac OS\"==V?\"Tasman\":\"Trident\")||\"WebKit\"==N&&/\\bPlayStation\\b(?! Vita\\b)/i.test(R)&&\"NetFront\")&&(N=[b]),\"IE\"==R&&(b=(/; *(?:XBLWP|ZuneWP)(\\d+)/i.exec(t)||0)[1])?(R+=\" Mobile\",V=\"Windows Phone \"+(/\\+$/.test(b)?b:b+\".x\"),B.unshift(\"desktop mode\")):/\\bWPDesktop\\b/i.test(t)?(R=\"IE Mobile\",V=\"Windows Phone 8.x\",B.unshift(\"desktop mode\"),z||(z=(/\\brv:([\\d.]+)/.exec(t)||0)[1])):\"IE\"!=R&&\"Trident\"==N&&(b=/\\brv:([\\d.]+)/.exec(t))&&(R&&B.push(\"identifying as \"+R+(z?\" \"+z:\"\")),R=\"IE\",z=b[1]),H){if(c(n,\"global\"))if(C&&(b=C.lang.System,W=b.getProperty(\"os.arch\"),V=V||b.getProperty(\"os.name\")+\" \"+b.getProperty(\"os.version\")),S&&c(n,\"system\")&&(b=[n.system])[0]){V||(V=b[0].os||null);try{b[1]=n.require(\"ringo/engine\").version,z=b[1].join(\".\"),R=\"RingoJS\"}catch(t){b[0].global.system==n.system&&(R=\"Narwhal\")}}else\"object\"==typeof n.process&&!n.process.browser&&(b=n.process)?\"object\"==typeof b.versions?\"string\"==typeof b.versions.electron?(B.push(\"Node \"+b.versions.node),R=\"Electron\",z=b.versions.electron):\"string\"==typeof b.versions.nw&&(B.push(\"Chromium \"+z,\"Node \"+b.versions.node),R=\"NW.js\",z=b.versions.nw):(R=\"Node.js\",W=b.arch,V=b.platform,z=/[\\d.]+/.exec(b.version),z=z?z[0]:\"unknown\"):X&&(R=\"Rhino\");else l(b=n.runtime)==$?(R=\"Adobe AIR\",V=b.flash.system.Capabilities.os):l(b=n.phantom)==P?(R=\"PhantomJS\",z=(b=b.version||null)&&b.major+\".\"+b.minor+\".\"+b.patch):\"number\"==typeof M.documentMode&&(b=/\\bTrident\\/(\\d+)/i.exec(t))?(z=[z,M.documentMode],(b=+b[1]+4)!=z[1]&&(B.push(\"IE \"+z[1]+\" mode\"),N&&(N[1]=\"\"),z[1]=b),z=\"IE\"==R?String(z[1].toFixed(1)):z[0]):\"number\"==typeof M.documentMode&&/^(?:Chrome|Firefox)\\b/.test(R)&&(B.push(\"masking as \"+R+\" \"+z),R=\"IE\",z=\"11.0\",N=[\"Trident\"],V=\"Windows\");V=V&&r(V)}if(z&&(b=/(?:[ab]|dp|pre|[ab]\\d+pre)(?:\\d+\\+?)?$/i.exec(z)||/(?:alpha|beta)(?: ?\\d)?/i.exec(t+\";\"+(H&&m.appMinorVersion))||/\\bMinefield\\b/i.test(t)&&\"a\")&&(D=/b/i.test(b)?\"beta\":\"alpha\",z=z.replace(RegExp(b+\"\\\\+?$\"),\"\")+(\"beta\"==D?I:A)+(/\\d+\\+?/.exec(b)||\"\")),\"Fennec\"==R||\"Firefox\"==R&&/\\b(?:Android|Firefox OS)\\b/.test(V))R=\"Firefox Mobile\";else if(\"Maxthon\"==R&&z)z=z.replace(/\\.[\\d.]+/,\".x\");else if(/\\bXbox\\b/i.test(L))\"Xbox 360\"==L&&(V=null),\"Xbox 360\"==L&&/\\bIEMobile\\b/.test(t)&&B.unshift(\"mobile mode\");else if(!/^(?:Chrome|IE|Opera)$/.test(R)&&(!R||L||/Browser|Mobi/.test(R))||\"Windows CE\"!=V&&!/Mobi/i.test(t))if(\"IE\"==R&&H)try{null===n.external&&B.unshift(\"platform preview\")}catch(t){B.unshift(\"embedded\")}else(/\\bBlackBerry\\b/.test(L)||/\\bBB10\\b/.test(t))&&(b=(RegExp(L.replace(/ +/g,\" *\")+\"/([.\\\\d]+)\",\"i\").exec(t)||0)[1]||z)?(b=[b,/BB10/.test(t)],V=(b[1]?(L=null,F=\"BlackBerry\"):\"Device Software\")+\" \"+b[0],z=null):this!=a&&\"Wii\"!=L&&(H&&Y||/Opera/.test(R)&&/\\b(?:MSIE|Firefox)\\b/i.test(t)||\"Firefox\"==R&&/\\bOS X (?:\\d+\\.){2,}/.test(V)||\"IE\"==R&&(V&&!/^Win/.test(V)&&z>5.5||/\\bWindows XP\\b/.test(V)&&z>8||8==z&&!/\\bTrident\\b/.test(t)))&&!y.test(b=d.call(a,t.replace(y,\"\")+\";\"))&&b.name&&(b=\"ing as \"+b.name+((b=b.version)?\" \"+b:\"\"),y.test(R)?(/\\bIE\\b/.test(b)&&\"Mac OS\"==V&&(V=null),b=\"identify\"+b):(b=\"mask\"+b,R=O?r(O.replace(/([a-z])([A-Z])/g,\"$1 $2\")):\"Opera\",/\\bIE\\b/.test(b)&&(V=null),H||(z=null)),N=[\"Presto\"],B.push(b));else R+=\" Mobile\";(b=(/\\bAppleWebKit\\/([\\d.]+\\+?)/i.exec(t)||0)[1])&&(b=[parseFloat(b.replace(/\\.(\\d)$/,\".0$1\")),b],\"Safari\"==R&&\"+\"==b[1].slice(-1)?(R=\"WebKit Nightly\",D=\"alpha\",z=b[1].slice(0,-1)):z!=b[1]&&z!=(b[2]=(/\\bSafari\\/([\\d.]+\\+?)/i.exec(t)||0)[1])||(z=null),b[1]=(/\\bChrome\\/([\\d.]+)/i.exec(t)||0)[1],537.36==b[0]&&537.36==b[2]&&parseFloat(b[1])>=28&&\"WebKit\"==N&&(N=[\"Blink\"]),H&&(_||b[1])?(N&&(N[1]=\"like Chrome\"),b=b[1]||(b=b[0],b<530?1:b<532?2:b<532.05?3:b<533?4:b<534.03?5:b<534.07?6:b<534.1?7:b<534.13?8:b<534.16?9:b<534.24?10:b<534.3?11:b<535.01?12:b<535.02?\"13+\":b<535.07?15:b<535.11?16:b<535.19?17:b<536.05?18:b<536.1?19:b<537.01?20:b<537.11?\"21+\":b<537.13?23:b<537.18?24:b<537.24?25:b<537.36?26:\"Blink\"!=N?\"27\":\"28\")):(N&&(N[1]=\"like Safari\"),b=b[0],b=b<400?1:b<500?2:b<526?3:b<533?4:b<534?\"4+\":b<535?5:b<537?6:b<538?7:b<601?8:\"8\"),N&&(N[1]+=\" \"+(b+=\"number\"==typeof b?\".x\":/[.+]/.test(b)?\"\":\"+\")),\"Safari\"==R&&(!z||parseInt(z)>45)&&(z=b)),\"Opera\"==R&&(b=/\\bzbov|zvav$/.exec(V))?(R+=\" \",B.unshift(\"desktop mode\"),\"zvav\"==b?(R+=\"Mini\",z=null):R+=\"Mobile\",V=V.replace(RegExp(\" *\"+b+\"$\"),\"\")):\"Safari\"==R&&/\\bChrome\\b/.exec(N&&N[1])&&(B.unshift(\"desktop mode\"),R=\"Chrome Mobile\",z=null,/\\bOS X\\b/.test(V)?(F=\"Apple\",V=\"iOS 4.3+\"):V=null),z&&0==z.indexOf(b=/[\\d.]+$/.exec(V))&&t.indexOf(\"/\"+b+\"-\")>-1&&(V=u(V.replace(b,\"\"))),N&&!/\\b(?:Avant|Nook)\\b/.test(R)&&(/Browser|Lunascape|Maxthon/.test(R)||\"Safari\"!=R&&/^iOS/.test(V)&&/\\bSafari\\b/.test(N[1])||/^(?:Adobe|Arora|Breach|Midori|Opera|Phantom|Rekonq|Rock|Samsung Internet|Sleipnir|Web)/.test(R)&&N[1])&&(b=N[N.length-1])&&B.push(b),B.length&&(B=[\"(\"+B.join(\"; \")+\")\"]),F&&L&&L.indexOf(F)<0&&B.push(\"on \"+F),L&&B.push((/^on /.test(B[B.length-1])?\"\":\"on \")+L),V&&(b=/ ([\\d.+]+)$/.exec(V),x=b&&\"/\"==V.charAt(V.length-b[0].length-1),V={architecture:32,family:b&&!x?V.replace(b[0],\"\"):V,version:b?b[1]:null,toString:function(){var t=this.version;return this.family+(t&&!x?\" \"+t:\"\")+(64==this.architecture?\" 64-bit\":\"\")}}),(b=/\\b(?:AMD|IA|Win|WOW|x86_|x)64\\b/i.exec(W))&&!/\\bi686\\b/i.test(W)?(V&&(V.architecture=64,V.family=V.family.replace(RegExp(\" *\"+b),\"\")),R&&(/\\bWOW64\\b/i.test(t)||H&&/\\w(?:86|32)$/.test(m.cpuClass||m.platform)&&!/\\bWin64; x64\\b/i.test(t))&&B.unshift(\"32-bit\")):V&&/^OS X/.test(V.family)&&\"Chrome\"==R&&parseFloat(z)>=39&&(V.architecture=64),t||(t=null);var G={};return G.description=t,G.layout=N&&N[0],G.manufacturer=F,G.name=R,G.prerelease=D,G.product=L,G.ua=t,G.version=R&&z,G.os=V||{architecture:null,family:null,version:null,toString:function(){return\"null\"}},G.parse=d,G.toString=i,G.version&&B.unshift(z),G.name&&B.unshift(R),V&&R&&(V!=String(V).split(\" \")[0]||V!=R.split(\" \")[0]&&!L)&&B.push(L?\"(\"+V+\")\":\"on \"+V),B.length&&(G.description=B.join(\" \")),G}var m={function:!0,object:!0},f=m[typeof window]&&window||this,g=f,v=m[typeof i]&&i,b=m[typeof e]&&e&&!e.nodeType&&e,x=v&&b&&\"object\"==typeof t&&t;!x||x.global!==x&&x.window!==x&&x.self!==x||(f=x);var S=Math.pow(2,53)-1,y=/\\bOpera/,w=this,_=Object.prototype,$=_.hasOwnProperty,T=_.toString,k=d();\"function\"==typeof define&&\"object\"==typeof define.amd&&define.amd?(f.platform=k,define(function(){return k})):v&&b?a(k,function(t,e){v[e]=t}):f.platform=k}).call(this)}).call(this,\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:{})},{}],6:[function(t,e,i){\"use strict\";t(\"angular-touch\"),t(\"angular-iscroll\"),angular.module(\"dddAssets\",[\"ngTouch\",\"angular-iscroll\"]),t(\"./services/Platform\"),t(\"./directives/iScroll\"),t(\"./directives/Flex\"),t(\"./directives/ToggleElement\"),t(\"./directives/Input\"),t(\"./components/Logo\"),t(\"./components/SelectMenu\"),t(\"./components/Progress\"),t(\"./components/PageSplash\"),t(\"./components/Dropdown\"),t(\"./components/Checkbox\"),t(\"./components/ToggleSwitch\"),t(\"./components/Button\"),t(\"./components/SplitButton\"),t(\"./components/Multiselect\"),t(\"./components/InputGroup\"),t(\"./components/View\"),t(\"./components/Aside\"),t(\"./components/Modal\"),t(\"./components/Spacer\"),t(\"./components/Grid\"),t(\"./components/PageActions\"),t(\"./components/InnerSidebar\"),t(\"./components/InnerSidebarItem\"),t(\"./components/SplitView\"),t(\"./components/Header\"),t(\"./components/HeaderButton\"),t(\"./components/Toolbar\"),t(\"./components/List\"),t(\"./components/ListItem\"),t(\"./components/ListItemGroup\"),t(\"./components/Navigation\"),t(\"./components/NavigationItem\")},{\"./components/Aside\":7,\"./components/Button\":9,\"./components/Checkbox\":11,\"./components/Dropdown\":13,\"./components/Grid\":15,\"./components/Header\":16,\"./components/HeaderButton\":18,\"./components/InnerSidebar\":20,\"./components/InnerSidebarItem\":22,\"./components/InputGroup\":24,\"./components/List\":25,\"./components/ListItem\":27,\"./components/ListItemGroup\":29,\"./components/Logo\":31,\"./components/Modal\":33,\"./components/Multiselect\":35,\"./components/Navigation\":37,\"./components/NavigationItem\":39,\"./components/PageActions\":41,\"./components/PageSplash\":43,\"./components/Progress\":45,\"./components/SelectMenu\":47,\"./components/Spacer\":49,\"./components/SplitButton\":50,\"./components/SplitView\":51,\"./components/ToggleSwitch\":53,\"./components/Toolbar\":55,\"./components/View\":57,\"./directives/Flex\":59,\"./directives/Input\":60,\"./directives/ToggleElement\":61,\"./directives/iScroll\":62,\"./services/Platform\":63,\"angular-iscroll\":1,\"angular-touch\":3}],7:[function(t,e,i){\"use strict\";e.exports=angular.module(\"dddAssets\").component(\"aside\",{bindings:{visible:\"=\",aside:\"@\"},template:t(\"./template.html\"),transclude:!0,controller:\"aside\"}).controller(\"aside\",[\"$scope\",\"AsideService\",function(t,e){this.hide=function(t){return e.hide(t)}}]).factory(\"AsideService\",function(){var t={instances:{}};return t.show=function(e){t.instances[e]||(t.instances[e]=!0)},t.hide=function(e){t.instances[e]=!1},t.isVisible=function(e){return!!t.instances[e]},t})},{\"./template.html\":8}],8:[function(t,e,i){e.exports='<div\\n    class=\"c-aside__wrap\"\\n    ng-click=\"$ctrl.hide($ctrl.aside)\"\\n    ng-class=\"{\\'is-visible\\': $ctrl.visible}\"\\n>\\n    <div\\n        class=\"c-aside\"\\n        ng-transclude\\n        ng-click=\"$event.stopPropagation()\"\\n    ></div>\\n</div>\\n'},{}],9:[function(t,e,i){\"use strict\";e.exports=angular.module(\"dddAssets\").component(\"cButton\",{bindings:{icon:\"@\",label:\"@\",buttonType:\"@\"},template:t(\"./template.html\"),transclude:!0,controller:\"cButton\"}).controller(\"cButton\",[\"$scope\",function(t){var e=this;this.$onInit=function(){e.icon=this.icon,e.label=this.label,e.buttonType=this.buttonType}}])},{\"./template.html\":10}],10:[function(t,e,i){e.exports='<a class=\"c-button {{ $ctrl.buttonType || default }}\">\\n    <i class=\"c-button__icon icons8-{{ $ctrl.icon }}\" ng-if=\"$ctrl.icon\"></i>\\n    <span class=\"c-button__label\" ng-if=\"$ctrl.label\">{{ $ctrl.label }}</span>\\n</a>\\n'},{}],11:[function(t,e,i){\"use strict\";e.exports=angular.module(\"dddAssets\").component(\"checkbox\",{bindings:{label:\"@\",states:\"<\",customStateControl:\"<\",currentState:\"=\",onChange:\"&\",onToggleState:\"&\",type:\"@\"},template:t(\"./template.html\"),controller:\"checkbox\"}).controller(\"checkbox\",[\"$scope\",\"$element\",\"$attrs\",\"$compile\",\"$timeout\",function(t,e,i,n,s){function o(){var t=r.states.indexOf(r.currentState);t==r.states.length-1?t=0:t++,r.currentState=r.states[t],s(function(){r.onChange&&r.onChange()})}var r=this;r.showCheckboxBackground=!1,r.singleWayCheckbox=!0,this.$onInit=function(){r.states||r.customStateControl?r.singleWayCheckbox=!1:r.states=[!1,!0],r.currentState||r.customStateControl||!r.states||(r.currentState=r.states[0])},r.toggleCheckbox=function(){r.customStateControl||o(),r.onToggleState&&r.onToggleState()}}])},{\"./template.html\":12}],12:[function(t,e,i){e.exports='<div class=\"c-checkbox__wrap\" ng-click=\"$event.stopPropagation();$ctrl.toggleCheckbox()\" ng-class=\"{\\'{{$ctrl.type}}\\': $ctrl.type}\">\\n    <div class=\"c-checkbox\">\\n        <div class=\"c-checkbox__background {{ $ctrl.currentState.type }}\"\\n            ng-if=\"$ctrl.singleWayCheckbox\"\\n            ng-class=\"{\\'u-visible\\': $ctrl.currentState === true }\">\\n            <i class=\"icons8-checkmark c-checkbox__icon\"></i>\\n        </div>\\n\\n        <div class=\"c-checkbox__background {{ $ctrl.currentState.type }} u-visible\"\\n            ng-if=\"!$ctrl.singleWayCheckbox\">\\n            <i class=\"icons8-{{$ctrl.currentState.icon }} c-checkbox__icon\"></i>\\n        </div>\\n\\n        <div class=\"c-checkbox__ripple\"></div>\\n    </div>\\n    <label for=\"{{ $ctrl.label }}\" class=\"c-checkbox__label\" ng-if=\"$ctrl.label\">{{ $ctrl.label }}</label>\\n</div>\\n\\n\\x3c!--\\n<div class=\"c-checkbox__wrap\" ng-click=\"$event.stopPropagation();$ctrl.applyCheck()\">\\n    {{$ctrl.model}}\\n</div>\\n--\\x3e\\n'},{}],13:[function(t,e,i){\"use strict\";e.exports=angular.module(\"dddAssets\").component(\"dropdown\",{bindings:{errorIf:\"=\",sucessIf:\"=\",list:\"=\",displayProperty:\"@\",valueProperty:\"@\",model:\"=\",onChange:\"&\",onFocus:\"&\",isDisabled:\"=\",useNumber:\"=\",unselectedValue:\"=?\",unselectedText:\"@?\"},template:t(\"./template.html\"),transclude:!0,controller:\"dropdown\"}).controller(\"dropdown\",[\"$scope\",\"$element\",\"$attrs\",\"$compile\",function(t,e,i,n){var s=this;this.$onInit=function(){s.attributes=i,angular.forEach(s.attributes.$attr,function(t,i){e.find(\"select\").attr(t,s.attributes[i]),e.removeAttr(t)})}}])},{\"./template.html\":14}],14:[function(t,e,i){e.exports='<div class=\"c-dropdown\">\\n    <span class=\"c-dropdown__label\" ng-if=\"$ctrl.attributes.label\">{{ $ctrl.attributes.label }}</span>\\n    <select ng-disabled=\"$ctrl.isDisabled\" class=\"c-dropdown__input\" ng-focus=\"$ctrl.onFocus()\" ng-model=\"$ctrl.model\" ng-change=\"$ctrl.onChange()\" ng-click=\"$event.stopPropagation()\" ng-attr-convert-to-number=\"$ctrl.useNumber\">\\n        <option value=\"\" disabled selected>{{ $ctrl.attributes.placeholder }}</option>\\n        <option value=\"{{ $ctrl.unselectedValue || null }}\" ng-if=\"$ctrl.unselectedText\">{{ $ctrl.unselectedText }}</option>\\n        <option value=\"{{ item[$ctrl.valueProperty] }}\" ng-repeat=\"item in $ctrl.list\">{{ item[$ctrl.displayProperty] }}</option>\\n    </select>\\n    <i class=\"icons8-expand-arrow c-dropdown__icon\"></i>\\n</div>\\n'},{}],15:[function(t,e,i){\"use strict\";e.exports=angular.module(\"dddAssets\").component(\"grid\",{bindings:{},template:'<div class=\"c-grid\" ng-transclude></div>',transclude:!0}).component(\"row\",{bindings:{},template:'<div class=\"c-grid__row\" ng-transclude></div>',transclude:!0}).component(\"column\",{bindings:{},template:'<div class=\"c-grid__column\" ng-transclude></div>',transclude:!0})},{}],16:[function(t,e,i){\"use strict\";e.exports=angular.module(\"dddAssets\").component(\"cHeader\",{bindings:{headerHeading:\"@\",headerSubheading:\"@\",theme:\"@\"},transclude:!0,template:t(\"./template.html\"),controller:\"cHeader\"}).controller(\"cHeader\",[\"$scope\",function(t){}])},{\"./template.html\":17}],17:[function(t,e,i){e.exports='<header class=\"c-header c-header--theme-{{ $ctrl.theme }}\">\\n    <logo></logo>\\n    <div class=\"c-header__text\">\\n        <span class=\"c-header__heading\" ng-if=\"$ctrl.headerHeading\">{{ $ctrl.headerHeading }}</span>\\n        <span class=\"c-header__subheading\" ng-if=\"$ctrl.headerSubheading\">{{ $ctrl.headerSubheading }}</span>\\n    </div>\\n    <div class=\"c-header__spacing\"></div>\\n    <div class=\"c-header__buttons\" ng-transclude>\\n    </div>\\n</header>\\n'},{}],18:[function(t,e,i){\"use strict\";e.exports=angular.module(\"dddAssets\").component(\"cHeaderButton\",{bindings:{icon:\"@\",label:\"@\"},template:t(\"./template.html\"),controller:\"cHeaderButton\",controllerAs:\"cHeaderButton\"}).controller(\"cHeaderButton\",[\"$scope\",function(t){this.$onInit=function(){t.icon=this.icon,t.label=this.label}}])},{\"./template.html\":19}],19:[function(t,e,i){e.exports='<a class=\"c-header__button\">\\n    <i class=\"c-header__button-icon\" ng-class=\"{\\'icons8-{{cHeaderButton.icon}}\\': true}\"></i>\\n</a>\\n'},{}],20:[function(t,e,i){\"use strict\";e.exports=angular.module(\"dddAssets\").component(\"innerSidebar\",{template:t(\"./template.html\"),transclude:!0})},{\"./template.html\":21}],21:[function(t,e,i){e.exports='<div class=\"inner-sidebar\" ng-transclude></div>\\n'},{}],\n22:[function(t,e,i){\"use strict\";e.exports=angular.module(\"dddAssets\").component(\"innerSidebarItem\",{bindings:{label:\"@\"},template:t(\"./template.html\"),controller:\"innerSidebarItem\"}).controller(\"innerSidebarItem\",function(){})},{\"./template.html\":23}],23:[function(t,e,i){e.exports='<div class=\"inner-sidebar__item\">\\n    Label: {{ $ctrl.label }}\\n</div>\\n'},{}],24:[function(t,e,i){\"use strict\";e.exports=angular.module(\"dddAssets\").component(\"inputGroup\",{bindings:{},template:'\\n        <div class=\"c-input-group\" ng-transclude></div>\\n    ',transclude:!0})},{}],25:[function(t,e,i){\"use strict\";e.exports=angular.module(\"dddAssets\").component(\"list\",{transclude:!0,template:t(\"./template.html\")})},{\"./template.html\":26}],26:[function(t,e,i){e.exports='<div class=\"c-list\" ng-transclude></div>\\n'},{}],27:[function(t,e,i){\"use strict\";e.exports=angular.module(\"dddAssets\").component(\"listItem\",{bindings:{expanded:\"<\",animateIn:\"=\"},template:t(\"./template.html\"),transclude:!0,controller:\"listItem\"}).controller(\"listItem\",[\"$scope\",\"$element\",\"$attrs\",function(t,e,i){var n=this;this.$onChanges=function(t){t.expanded.currentValue?e.addClass(\"expanded\"):e.removeClass(\"expanded\")},this.$onInit=function(){n.animateIn&&e.addClass(\"new\")}}])},{\"./template.html\":28}],28:[function(t,e,i){e.exports='<div class=\"c-list-item\" ng-transclude></div>\\n'},{}],29:[function(t,e,i){\"use strict\";e.exports=angular.module(\"dddAssets\").component(\"listItemGroup\",{bindings:{label:\"@\",labelIcon:\"@\",sublabel:\"@\",sublabelIcon:\"@\",align:\"@\"},template:t(\"./template.html\"),controller:\"listItemGroup\"}).controller(\"listItemGroup\",[\"$scope\",function(t){this.$onInit=function(){}}])},{\"./template.html\":30}],30:[function(t,e,i){e.exports='<div class=\"c-list-item__group\" ng-class=\"{\\'align-{{$ctrl.align}}\\': $ctrl.align}\">\\n    <span class=\"c-list-item__group-label\">{{ $ctrl.label }} <i ng-class=\"{\\'icons8-{{$ctrl.labelIcon}}\\': true}\" ng-if=\"$ctrl.labelIcon\"></i></span>\\n    <span class=\"c-list-item__group-text\">{{ $ctrl.sublabel }} <i ng-class=\"{\\'icons8-{{$ctrl.sublabelIcon}}\\': true}\" ng-if=\"$ctrl.sublabelIcon\"></i></span>\\n</div>\\n'},{}],31:[function(t,e,i){\"use strict\";e.exports=angular.module(\"dddAssets\").component(\"logo\",{template:t(\"./template.html\")})},{\"./template.html\":32}],32:[function(t,e,i){e.exports='<img src=\"http://pos.dddretail.com/assets/img/ddd-logo.png\" alt=\"DdD Retail Logo\" class=\"c-logo\">\\n'},{}],33:[function(t,e,i){\"use strict\";e.exports=angular.module(\"dddAssets\").component(\"modal\",{bindings:{visible:\"=\",modal:\"@\",content:\"=\"},template:t(\"./template.html\"),controller:\"modal\"}).controller(\"modal\",[\"$scope\",\"$element\",\"ModalService\",function(t,e,i){var n=this;n.hide=function(t){return i.hide(t)},n.hideIfEnabled=function(t){n.content.closeable&&(n.hide(t),n.content.closeableAction&&n.content.closeableAction())}}]).factory(\"ModalService\",function(){var t={instances:{}};return t.show=function(e){t.instances[e]||(t.instances[e]=!0)},t.hide=function(e){t.instances[e]=!1},t.isVisible=function(e){return!!t.instances[e]},t})},{\"./template.html\":34}],34:[function(t,e,i){e.exports='<div\\n    class=\"c-modal__wrap\"\\n    ng-class=\"{\\'is-visible\\': $ctrl.visible}\"\\n    ng-click=\"$ctrl.hideIfEnabled($ctrl.modal);\"\\n>\\n    <div class=\"c-modal\" ng-click=\"$event.stopPropagation()\">\\n        <div class=\"c-modal__title\">\\n            <span class=\"c-modal__title-text\">{{ $ctrl.content.title }}</span>\\n            <a class=\"c-modal__title-exit\" ng-if=\"$ctrl.content.closeable\" ng-click=\"$ctrl.hideIfEnabled($ctrl.modal);\"><i class=\"icons8-delete\"></i></a>\\n        </div>\\n        <div class=\"c-modal__description\">{{ $ctrl.content.description }}</div>\\n        <div class=\"c-modal__actions\">\\n            <c-button\\n                ng-repeat=\"button in $ctrl.content.buttons\"\\n                label=\"{{ button.label }}\"\\n                button-type=\"{{ button.type }}\"\\n                ng-click=\"button.action();button.closes && $ctrl.hide($ctrl.modal)\"\\n            ></c-button>\\n        </div>\\n    </div>\\n</div>\\n'},{}],35:[function(t,e,i){\"use strict\";e.exports=angular.module(\"dddAssets\").component(\"multiselect\",{bindings:{list:\"=\",label:\"@\",displayProperty:\"@\",valueProperty:\"@\",model:\"=\",placeholder:\"@\"},template:t(\"./template.html\"),controller:\"multiselect\"}).controller(\"multiselect\",[\"$scope\",\"$element\",\"$attrs\",\"$compile\",function(t,e,i,n){var s=this;this.$onInit=function(){s.listItems=[]},s.toggleItem=function(t){var e=t[s.displayProperty];t.isSelected?(t.isSelected=!1,s.model.splice(s.model.indexOf(t),1),s.listItems.splice(s.listItems.indexOf(e),1)):(t.isSelected=!0,s.model.push(t),s.listItems.push(e))}}])},{\"./template.html\":36}],36:[function(t,e,i){e.exports='<div class=\"c-multiselect\">\\n    <span class=\"c-multiselect__label\" ng-if=\"$ctrl.label\">{{ $ctrl.label }}</span>\\n    <div class=\"c-multiselect__input\" tabindex=\"0\">\\n        <span class=\"c-multiselect__input-text\">\\n            <span ng-repeat=\"item in $ctrl.listItems track by $index\" ng-if=\"$ctrl.listItems.length > 0\">{{ item }}<span ng-if=\"!$last\">,&nbsp;</span></span>\\n            <span class=\"c-multiselect__input-placeholder\" ng-if=\"$ctrl.listItems.length < 1\">{{ $ctrl.placeholder || \\'Select\\' }}</span>\\n        </span>\\n    </div>\\n    <i class=\"icons8-expand-arrow c-dropdown__icon\"></i>\\n\\n    <ul class=\"c-multiselect__list\">\\n        <li class=\"c-multiselect__list-item\" ng-repeat=\"item in $ctrl.list track by $index\" ng-mousedown=\"$event.stopPropagation();$event.preventDefault();$ctrl.toggleItem(item)\">\\n            {{ item[$ctrl.displayProperty] }}\\n            <i class=\"icons8-checkmark c-multiselect__list-icon\" ng-class=\"{\\'selected\\': item.isSelected}\"></i>\\n        </li>\\n    </ul>\\n</div>\\n'},{}],37:[function(t,e,i){\"use strict\";e.exports=angular.module(\"dddAssets\").component(\"navigation\",{bindings:{drawerOpen:\"=\"},template:t(\"./template.html\"),transclude:{main:\"?navigationMain\",drawer:\"?navigationDrawer\"},controller:\"navigation\"}).controller(\"navigation\",[\"$scope\",\"NavigationService\",function(t,e){this.closeDrawer=function(){e.drawerOpen=!e.drawerOpen}}]).service(\"NavigationService\",function(){return{drawerOpen:!1}})},{\"./template.html\":38}],38:[function(t,e,i){e.exports='<div class=\"c-navigation\" tab-index=\"0\">\\n    <nav class=\"c-navigation__buttons\">\\n        <div\\n            class=\"c-navigation__button-group c-navigation__button-group-main\"\\n            ng-transclude=\"main\"\\n        >\\n        </div>\\n\\n        <div\\n            class=\"c-navigation__background\"\\n            ng-class=\"{\\'open\\': $ctrl.drawerOpen}\"\\n            ng-click=\"$ctrl.closeDrawer()\"\\n        >\\n            <div\\n                class=\"c-navigation__button-group c-navigation__button-drawer\"\\n                ng-transclude=\"drawer\"\\n            >\\n            </div>\\n        </div>\\n    </nav>\\n</div>\\n'},{}],39:[function(t,e,i){\"use strict\";e.exports=angular.module(\"dddAssets\").component(\"navigationItem\",{bindings:{label:\"@\",icon:\"@\",navigationTrigger:\"@\"},template:t(\"./template.html\"),controller:\"navigationItem\"}).controller(\"navigationItem\",[\"$scope\",\"NavigationService\",function(t,e){this.navigationDrawer=e.drawerOpen,t.triggerNavigation=function(){e.drawerOpen=!e.drawerOpen}}])},{\"./template.html\":40}],40:[function(t,e,i){e.exports='<div class=\"c-navigation__button\"\\n    ng-class=\"{\\'c-navigation__button-navigation-trigger\\': $ctrl.navigationTrigger}\"\\n    iscroll-tap=\"$ctrl.navigationTrigger && triggerNavigation()\">\\n\\n    <i class=\"c-navigation__button-icon\" ng-class=\"{\\'icons8-{{$ctrl.icon}}\\': true}\"></i>\\n    <span class=\"c-navigation__button-label\">{{ $ctrl.label }}</span>\\n\\n</div>\\n'},{}],41:[function(t,e,i){\"use strict\";e.exports=angular.module(\"dddAssets\").component(\"pageActions\",{bindings:{showWhen:\"<\"},template:t(\"./template.html\"),transclude:!0,controller:\"pageActions\"}).controller(\"pageActions\",[\"$scope\",\"$element\",\"$attrs\",function(t,e,i){var n=this;this.$onChanges=function(t){t.showWhen&&(t.showWhen.currentValue?e.addClass(\"page-actions__visible\"):e.removeClass(\"page-actions__visible\"))},this.$onInit=function(){n.showWhen?e.addClass(\"page-actions__visible\"):e.removeClass(\"page-actions__visible\")}}])},{\"./template.html\":42}],42:[function(t,e,i){e.exports='<div class=\"c-page-actions\" ng-transclude></div>\\n'},{}],43:[function(t,e,i){\"use strict\";e.exports=angular.module(\"dddAssets\").component(\"pageSplash\",{bindings:{label:\"@\",icon:\"@\"},transclude:!0,template:t(\"./template.html\"),controller:\"pageSplash\"}).controller(\"pageSplash\",function(){})},{\"./template.html\":44}],44:[function(t,e,i){e.exports='<div class=\"page-splash__container\">\\n    <i class=\"icons8-home page-splash__icon\" ng-class=\"{\\'icons8-{{ $ctrl.icon }}\\': $ctrl.icon}\" ng-if=\"$ctrl.icon\"></i>\\n    <h2 class=\"page-splash__label\" ng-if=\"$ctrl.label\">{{ $ctrl.label }}</h2>\\n    <div class=\"page-splash__content\" ng-transclude></div>\\n</div>\\n'},{}],45:[function(t,e,i){\"use strict\";e.exports=angular.module(\"dddAssets\").component(\"progressBar\",{bindings:{fill:\"=\",type:\"@\",size:\"@\"},template:t(\"./template.html\"),controller:function(){}})},{\"./template.html\":46}],46:[function(t,e,i){e.exports='<div\\n    class=\"progress-bar\"\\n    ng-class=\"{\\'size-{{$ctrl.size}}\\': $ctrl.size, \\'type-{{$ctrl.type}}\\': $ctrl.type}\">\\n    <div\\n        class=\"progress-bar__fill\"\\n        style=\"width: {{$ctrl.fill}}%\"\\n    ></div>\\n</div>\\n'},{}],47:[function(t,e,i){\"use strict\";e.exports=angular.module(\"dddAssets\").component(\"selectMenu\",{bindings:{list:\"=\",displayProperty:\"@\",label:\"@\",type:\"@\",heading:\"@\",inputPlaceholder:\"@\"},template:t(\"./template.html\"),transclude:!0,controller:\"selectMenu\"}).controller(\"selectMenu\",[\"$scope\",\"$element\",\"$attrs\",\"$compile\",\"$document\",function(t,e,i,n,s){var o=this;o.selectedProperties={},this.$onInit=function(){o.selectItem=function(t,e){o.selectedProperties[\"item-\"+t]?delete o.selectedProperties[\"item-\"+t]:o.selectedProperties[\"item-\"+t]=!0}}}])},{\"./template.html\":48}],48:[function(t,e,i){e.exports='<a class=\"c-select-menu__wrap\" tabindex=\"1\">\\n    {{ $ctrl.label }}\\n    <i class=\"icons8-expand-arrow\"></i>\\n\\n    <div class=\"c-select-menu\">\\n        <div class=\"c-select-menu__header\" ng-if=\"!$ctrl.noInput\">\\n            <textinput ng-focus=\"$event.preventDefault()\" input-laceholder=\"{{ $ctrl.placeholder }}\" label=\"{{ $ctrl.heading }}\"></textinput>\\n        </div>\\n        <div class=\"c-select-menu__body\" ng-transclude></div>\\n    </div>\\n</a>\\n\\n\\n'},{}],49:[function(t,e,i){\"use strict\";e.exports=angular.module(\"dddAssets\").component(\"spacer\",{template:'<div class=\"spacer\"></div>',transclude:!0}).component(\"space\",{template:'<div class=\"space\"></div>',transclude:!0}).component(\"spaceVertical\",{template:'<div class=\"spaceVertical\"></div>',transclude:!0})},{}],50:[function(t,e,i){\"use strict\";e.exports=angular.module(\"dddAssets\").component(\"splitButton\",{bindings:{label:\"@\",icon:\"@\",iconLabel:\"@?\",hoverIcon:\"@?\",buttonType:\"@?\",fullClick:\"=?\",disabled:\"=?\"},template:'\\n    <div class=\"c-split-button c-split-button--type-{{$ctrl.buttonType || \\'default\\'}}\" ng-class=\"{\\n      \\'c-split-button--full-click\\': $ctrl.fullClick,\\n      \\'c-split-button--dynamic-icon\\': $ctrl.hoverIcon,\\n      \\'c-split-button--disabled\\': $ctrl.disabled\\n    }\">\\n      <span class=\"c-split-button__icon\" ng-if=\"$ctrl.icon\">\\n        <span class=\"c-split-button__icon-polyfill\">\\n          <i class=\"c-split-button__icon-original icons8-{{ $ctrl.icon }}\"></i>\\n          <i class=\"c-split-button__icon-hover icons8-{{ $ctrl.hoverIcon }}\" ng-if=\"$ctrl.hoverIcon\"></i>\\n        </span>\\n        <span class=\"c-split-button__icon-label\" ng-if=\"$ctrl.iconLabel\">{{ $ctrl.iconLabel }}</span>\\n      </span>\\n      <span class=\"c-split-button__label\" ng-if=\"$ctrl.label\">{{ $ctrl.label }}</span>\\n    </div>\\n  ',controller:\"SplitButtonController\"}).controller(\"SplitButtonController\",function(){var t=this;(!t.icon||!t.label)&&console.warn(\"Please note that 'c-split-button' is intended for use with both an icon and a label. If you don't intend to use both, please use the 'c-button' component instead.\")})},{}],51:[function(t,e,i){\"use strict\";e.exports=angular.module(\"dddAssets\").component(\"splitView\",{template:t(\"./template.html\"),transclude:{navigation:\"?splitNavigation\",content:\"?splitContent\"}}).component(\"splitNavigationList\",{transclude:!0,template:'<div class=\"split-view__navigation-list\" ng-transclude></div>'}).component(\"splitNavigationButton\",{bindings:{label:\"@\"},template:'\\n        <a class=\"split-view__navigation-button\">\\n            <span>{{ $ctrl.label }}</span>\\n            <i class=\"icons8-collapse-arrow split-view__navigation-button-icon\"></i>\\n        </a>\\n    ',controller:function(){}})},{\"./template.html\":52}],52:[function(t,e,i){e.exports='<div class=\"split-view\">\\n    <div class=\"split-view__navigation\" ng-transclude=\"navigation\"></div>\\n    <div class=\"split-view__content\" ng-transclude=\"content\"></div>\\n</div>\\n'},{}],53:[function(t,e,i){\"use strict\";e.exports=angular.module(\"dddAssets\").component(\"toggleSwitch\",{bindings:{currentState:\"=\",label:\"@\",true:\"@\",false:\"@\",onChange:\"&\"},template:t(\"./template.html\"),controller:\"toggleSwitch\"}).controller(\"toggleSwitch\",function(){var t=this;this.$onChanges=function(e){t.setStateValue()},this.$onInit=function(){t.setStateValue()},t.change=function(){t.currentState=!t.currentState,t.setStateValue(),t.onChange&&t.onChange()},t.setStateValue=function(){t.currentStateValue=t.currentState?t.true:t.false}})},{\"./template.html\":54}],54:[function(t,e,i){e.exports='<div class=\"toggle-switch\" ng-click=\"$ctrl.change()\">\\n    <span class=\"toggle-switch__label\">{{ $ctrl.label }}</span>\\n    <div class=\"toggle-switch__container\">\\n        <div class=\"toggle-switch__controller\" ng-class=\"{\\'active\\': $ctrl.currentState}\">\\n            <div class=\"toggle-switch__knob\"></div>\\n        </div>\\n        <span class=\"toggle-switch__value\">{{ $ctrl.currentStateValue }}</span>\\n    </div>\\n</div>\\n'},{}],55:[function(t,e,i){\"use strict\";e.exports=angular.module(\"dddAssets\").component(\"toolbar\",{template:t(\"./template.html\"),transclude:!0}).component(\"toolbarWrap\",{template:'<div class=\"c-toolbar__wrap\" ng-transclude></div>',transclude:!0})},{\"./template.html\":56}],56:[function(t,e,i){e.exports='<div class=\"c-toolbar\" ng-transclude></div>\\n'},{}],57:[function(t,e,i){\"use strict\";e.exports=angular.module(\"dddAssets\").component(\"view\",{bindings:{screen:\"=\"},transclude:!0,template:t(\"./template.html\"),controller:\"viewController\"}).controller(\"viewController\",function(){})},{\"./template.html\":58}],58:[function(t,e,i){e.exports='<div class=\"view\" ng-class=\"{\\'view--screen\\': $ctrl.screen}\" ng-transclude></div>\\n'},{}],59:[function(t,e,i){\"use strict\";e.exports=angular.module(\"dddAssets\").directive(\"fillSpace\",function(){return{restrict:\"EA\",link:function(t,e,i){e.addClass(\"flex-grow\")}}}).directive(\"fillHorizontalSpace\",function(){return{restrict:\"EA\",link:function(t,e,i){e.addClass(\"fill-horizontal\")}}}).directive(\"direction\",function(){return{restrict:\"A\",link:function(t,e,i){e.addClass(\"flex-direction-row\")}}}).directive(\"flexColumn\",function(){return{restrict:\"A\",link:function(t,e,i){e.addClass(\"flex-direction-column\")}}}).directive(\"flexRow\",function(){return{restrict:\"A\",link:function(t,e,i){e.addClass(\"flex flex-direction-row\")}}}).directive(\"flexFillVertical\",function(){return{restrict:\"A\",link:function(t,e,i){e.addClass(\"flex flex-fill-vertical\")}}}).directive(\"flexFillHorizontal\",function(){return{restrict:\"A\",link:function(t,e,i){e.addClass(\"flex flex-fill-horizontal\")}}}).directive(\"verticalScroll\",function(){return{restrict:\"A\",link:function(t,e,i){e.addClass(\"vertical-scroll\")}}}).directive(\"noHorizontalScroll\",function(){return{restrict:\"A\",link:function(t,e,i){e.addClass(\"no-horizontal-scroll\")}}}).directive(\"fitToOldView\",function(){return{restrict:\"A\",link:function(t,e,i){e.addClass(\"fit-to-old-view\")}}})},{}],60:[function(t,e,i){\"use strict\";e.exports=angular.module(\"dddAssets\").directive(\"dddAssetsInput\",function(){return{restrict:\"A\",link:{pre:function(t,e,i){e.addClass(\"c-textinput__input\"),e.wrap('<div class=\"c-textinput theme--'+i.theme+'\">'),i.label&&e.parent().prepend('<span class=\"c-textinput__label\">'+i.label+\"</span>\"),i.icon&&e.parent().prepend('<i class=\"c-textinput__icon icons8-'+i.icon+'\"></i>')}}}})},{}],61:[function(t,e,i){\"use strict\";e.exports=angular.module(\"dddAssets\").directive(\"toggleElement\",function(){return{restrict:\"A\",link:function(t,e,i){e.on(\"click\",function(){var t=angular.element(document.querySelector('[toggle-element-target=\"'+i.toggleElement+'\"]')),e=t[0].className;e.indexOf(\"toggle-element-visible\")>-1?t[0].className=e.replace(\" toggle-element-visible\",\" \"):t[0].className+=\" toggle-element-visible\"})}}})},{}],62:[function(t,e,i){\"use strict\";e.exports=angular.forEach([\"iscrollTap\",\"iscrollTapStop\"],function(t){angular.module(\"dddAssets\").directive(t,[\"$parse\",\"iScrollService\",function(e,i){return{restrict:\"A\",compile:function(n,s){var o=e(s[t],null,!0);return function(e,n){var s;e.$watch(function(){return i.state.useIScroll},function(r,a){s&&n.off(s),s=i.state.useIScroll?\"tap\":\"click\",n.on(s,function(i){var n=function(){o(e,{$event:i})};e.$apply(n),\"iscrollTapStop\"===t&&i.stopPropagation()})})}}}}])}),angular.module(\"dddAssets\").factory(\"iscrollAction\",[\"$timeout\",function(t){var e={};return e.toBottom=function(t){var e=angular.element(document.querySelector(t))[0],i=angular.element(document.querySelector(t+\" .iscroll-scroller\"))[0];e&&(e.scrollTop=i.offsetHeight)},e}]),angular.module(\"dddAssets\").directive(\"iscrollUiSref\",[\"$state\",\"$timeout\",\"iScrollService\",function(t,e,i){function n(t,e){var i,n=t.match(/^\\s*({[^}]*})\\s*$/);if(n&&(t=e+\"(\"+n[1]+\")\"),!(i=t.replace(/\\n/g,\" \").match(/^([^(]+?)\\s*(\\((.*)\\))?$/))||4!==i.length)throw new Error(\"Invalid state ref '\"+t+\"'\");return{state:i[1],paramExpr:i[3]||null}}function s(t){var e=t.parent().inheritedData(\"$uiView\");if(e&&e.state&&e.state.name)return e.state}var o=[\"location\",\"inherit\",\"reload\"];return{link:function(r,a,l){var c,h=n(l.iscrollUiSref,t.current.name),p=s(a)||t.$current,u={relative:p,inherit:!0},d=r.$eval(l.iscrollUiSrefOpts)||{};angular.forEach(o,function(t){t in d&&(u[t]=d[t])}),h.paramExpr&&(c=angular.copy(r.$eval(h.paramExpr)));var m;r.$watch(function(){return i.state.useIScroll},function(n,s){m&&a.off(m),m=i.state.useIScroll?\"tap\":\"click\",a.on(m,function(i){(i.which||i.button)>1||i.ctrlKey||i.metaKey||i.shiftKey||a.attr(\"target\")||(e(function(){t.go(h.state,c,u)}),i.preventDefault())})})}}}]).directive(\"tapBlurs\",[\"$document\",function(t){return{restrict:\"A\",link:function(e,i,n){i.on(\"tap\",function(){t[0].activeElement.blur&&t[0].activeElement.blur()})}}}]).run([\"$rootScope\",\"$window\",\"iScrollService\",function(t,e,i){function n(){var e=navigator.userAgent.toLowerCase().indexOf(\"android\")>-1;/iPad|iPhone|iPod|android/.test(navigator.userAgent)&&!window.MSStream||e?(t.$broadcast(s),i.state.useIScroll=!1):(t.$broadcast(o),i.state.useIScroll=!0)}var s=\"iscroll:disabled\",o=\"iscroll:enabled\";n(),angular.element(e).bind(\"resize\",function(){n()})}])},{}],63:[function(t,e,i){\"use strict\";e.exports=angular.module(\"dddAssets\").factory(\"PlatformService\",function(){return t(\"platform\")})},{platform:5}]},{},[6]);","'use strict'\n\nmodule.exports = require('./dist/ddd-assets.min.js')\n",";(function (globalScope) {\r\n  'use strict';\r\n\r\n\r\n  /*!\r\n   *  decimal.js v10.5.0\r\n   *  An arbitrary-precision Decimal type for JavaScript.\r\n   *  https://github.com/MikeMcl/decimal.js\r\n   *  Copyright (c) 2025 Michael Mclaughlin <M8ch88l@gmail.com>\r\n   *  MIT Licence\r\n   */\r\n\r\n\r\n  // -----------------------------------  EDITABLE DEFAULTS  ------------------------------------ //\r\n\r\n\r\n    // The maximum exponent magnitude.\r\n    // The limit on the value of `toExpNeg`, `toExpPos`, `minE` and `maxE`.\r\n  var EXP_LIMIT = 9e15,                      // 0 to 9e15\r\n\r\n    // The limit on the value of `precision`, and on the value of the first argument to\r\n    // `toDecimalPlaces`, `toExponential`, `toFixed`, `toPrecision` and `toSignificantDigits`.\r\n    MAX_DIGITS = 1e9,                        // 0 to 1e9\r\n\r\n    // Base conversion alphabet.\r\n    NUMERALS = '0123456789abcdef',\r\n\r\n    // The natural logarithm of 10 (1025 digits).\r\n    LN10 = '2.3025850929940456840179914546843642076011014886287729760333279009675726096773524802359972050895982983419677840422862486334095254650828067566662873690987816894829072083255546808437998948262331985283935053089653777326288461633662222876982198867465436674744042432743651550489343149393914796194044002221051017141748003688084012647080685567743216228355220114804663715659121373450747856947683463616792101806445070648000277502684916746550586856935673420670581136429224554405758925724208241314695689016758940256776311356919292033376587141660230105703089634572075440370847469940168269282808481184289314848524948644871927809676271275775397027668605952496716674183485704422507197965004714951050492214776567636938662976979522110718264549734772662425709429322582798502585509785265383207606726317164309505995087807523710333101197857547331541421808427543863591778117054309827482385045648019095610299291824318237525357709750539565187697510374970888692180205189339507238539205144634197265287286965110862571492198849978748873771345686209167058',\r\n\r\n    // Pi (1025 digits).\r\n    PI = '3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406566430860213949463952247371907021798609437027705392171762931767523846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963185950244594553469083026425223082533446850352619311881710100031378387528865875332083814206171776691473035982534904287554687311595628638823537875937519577818577805321712268066130019278766111959092164201989380952572010654858632789',\r\n\r\n\r\n    // The initial configuration properties of the Decimal constructor.\r\n    DEFAULTS = {\r\n\r\n      // These values must be integers within the stated ranges (inclusive).\r\n      // Most of these values can be changed at run-time using the `Decimal.config` method.\r\n\r\n      // The maximum number of significant digits of the result of a calculation or base conversion.\r\n      // E.g. `Decimal.config({ precision: 20 });`\r\n      precision: 20,                         // 1 to MAX_DIGITS\r\n\r\n      // The rounding mode used when rounding to `precision`.\r\n      //\r\n      // ROUND_UP         0 Away from zero.\r\n      // ROUND_DOWN       1 Towards zero.\r\n      // ROUND_CEIL       2 Towards +Infinity.\r\n      // ROUND_FLOOR      3 Towards -Infinity.\r\n      // ROUND_HALF_UP    4 Towards nearest neighbour. If equidistant, up.\r\n      // ROUND_HALF_DOWN  5 Towards nearest neighbour. If equidistant, down.\r\n      // ROUND_HALF_EVEN  6 Towards nearest neighbour. If equidistant, towards even neighbour.\r\n      // ROUND_HALF_CEIL  7 Towards nearest neighbour. If equidistant, towards +Infinity.\r\n      // ROUND_HALF_FLOOR 8 Towards nearest neighbour. If equidistant, towards -Infinity.\r\n      //\r\n      // E.g.\r\n      // `Decimal.rounding = 4;`\r\n      // `Decimal.rounding = Decimal.ROUND_HALF_UP;`\r\n      rounding: 4,                           // 0 to 8\r\n\r\n      // The modulo mode used when calculating the modulus: a mod n.\r\n      // The quotient (q = a / n) is calculated according to the corresponding rounding mode.\r\n      // The remainder (r) is calculated as: r = a - n * q.\r\n      //\r\n      // UP         0 The remainder is positive if the dividend is negative, else is negative.\r\n      // DOWN       1 The remainder has the same sign as the dividend (JavaScript %).\r\n      // FLOOR      3 The remainder has the same sign as the divisor (Python %).\r\n      // HALF_EVEN  6 The IEEE 754 remainder function.\r\n      // EUCLID     9 Euclidian division. q = sign(n) * floor(a / abs(n)). Always positive.\r\n      //\r\n      // Truncated division (1), floored division (3), the IEEE 754 remainder (6), and Euclidian\r\n      // division (9) are commonly used for the modulus operation. The other rounding modes can also\r\n      // be used, but they may not give useful results.\r\n      modulo: 1,                             // 0 to 9\r\n\r\n      // The exponent value at and beneath which `toString` returns exponential notation.\r\n      // JavaScript numbers: -7\r\n      toExpNeg: -7,                          // 0 to -EXP_LIMIT\r\n\r\n      // The exponent value at and above which `toString` returns exponential notation.\r\n      // JavaScript numbers: 21\r\n      toExpPos:  21,                         // 0 to EXP_LIMIT\r\n\r\n      // The minimum exponent value, beneath which underflow to zero occurs.\r\n      // JavaScript numbers: -324  (5e-324)\r\n      minE: -EXP_LIMIT,                      // -1 to -EXP_LIMIT\r\n\r\n      // The maximum exponent value, above which overflow to Infinity occurs.\r\n      // JavaScript numbers: 308  (1.7976931348623157e+308)\r\n      maxE: EXP_LIMIT,                       // 1 to EXP_LIMIT\r\n\r\n      // Whether to use cryptographically-secure random number generation, if available.\r\n      crypto: false                          // true/false\r\n    },\r\n\r\n\r\n  // ----------------------------------- END OF EDITABLE DEFAULTS ------------------------------- //\r\n\r\n\r\n    Decimal, inexact, noConflict, quadrant,\r\n    external = true,\r\n\r\n    decimalError = '[DecimalError] ',\r\n    invalidArgument = decimalError + 'Invalid argument: ',\r\n    precisionLimitExceeded = decimalError + 'Precision limit exceeded',\r\n    cryptoUnavailable = decimalError + 'crypto unavailable',\r\n    tag = '[object Decimal]',\r\n\r\n    mathfloor = Math.floor,\r\n    mathpow = Math.pow,\r\n\r\n    isBinary = /^0b([01]+(\\.[01]*)?|\\.[01]+)(p[+-]?\\d+)?$/i,\r\n    isHex = /^0x([0-9a-f]+(\\.[0-9a-f]*)?|\\.[0-9a-f]+)(p[+-]?\\d+)?$/i,\r\n    isOctal = /^0o([0-7]+(\\.[0-7]*)?|\\.[0-7]+)(p[+-]?\\d+)?$/i,\r\n    isDecimal = /^(\\d+(\\.\\d*)?|\\.\\d+)(e[+-]?\\d+)?$/i,\r\n\r\n    BASE = 1e7,\r\n    LOG_BASE = 7,\r\n    MAX_SAFE_INTEGER = 9007199254740991,\r\n\r\n    LN10_PRECISION = LN10.length - 1,\r\n    PI_PRECISION = PI.length - 1,\r\n\r\n    // Decimal.prototype object\r\n    P = { toStringTag: tag };\r\n\r\n\r\n  // Decimal prototype methods\r\n\r\n\r\n  /*\r\n   *  absoluteValue             abs\r\n   *  ceil\r\n   *  clampedTo                 clamp\r\n   *  comparedTo                cmp\r\n   *  cosine                    cos\r\n   *  cubeRoot                  cbrt\r\n   *  decimalPlaces             dp\r\n   *  dividedBy                 div\r\n   *  dividedToIntegerBy        divToInt\r\n   *  equals                    eq\r\n   *  floor\r\n   *  greaterThan               gt\r\n   *  greaterThanOrEqualTo      gte\r\n   *  hyperbolicCosine          cosh\r\n   *  hyperbolicSine            sinh\r\n   *  hyperbolicTangent         tanh\r\n   *  inverseCosine             acos\r\n   *  inverseHyperbolicCosine   acosh\r\n   *  inverseHyperbolicSine     asinh\r\n   *  inverseHyperbolicTangent  atanh\r\n   *  inverseSine               asin\r\n   *  inverseTangent            atan\r\n   *  isFinite\r\n   *  isInteger                 isInt\r\n   *  isNaN\r\n   *  isNegative                isNeg\r\n   *  isPositive                isPos\r\n   *  isZero\r\n   *  lessThan                  lt\r\n   *  lessThanOrEqualTo         lte\r\n   *  logarithm                 log\r\n   *  [maximum]                 [max]\r\n   *  [minimum]                 [min]\r\n   *  minus                     sub\r\n   *  modulo                    mod\r\n   *  naturalExponential        exp\r\n   *  naturalLogarithm          ln\r\n   *  negated                   neg\r\n   *  plus                      add\r\n   *  precision                 sd\r\n   *  round\r\n   *  sine                      sin\r\n   *  squareRoot                sqrt\r\n   *  tangent                   tan\r\n   *  times                     mul\r\n   *  toBinary\r\n   *  toDecimalPlaces           toDP\r\n   *  toExponential\r\n   *  toFixed\r\n   *  toFraction\r\n   *  toHexadecimal             toHex\r\n   *  toNearest\r\n   *  toNumber\r\n   *  toOctal\r\n   *  toPower                   pow\r\n   *  toPrecision\r\n   *  toSignificantDigits       toSD\r\n   *  toString\r\n   *  truncated                 trunc\r\n   *  valueOf                   toJSON\r\n   */\r\n\r\n\r\n  /*\r\n   * Return a new Decimal whose value is the absolute value of this Decimal.\r\n   *\r\n   */\r\n  P.absoluteValue = P.abs = function () {\r\n    var x = new this.constructor(this);\r\n    if (x.s < 0) x.s = 1;\r\n    return finalise(x);\r\n  };\r\n\r\n\r\n  /*\r\n   * Return a new Decimal whose value is the value of this Decimal rounded to a whole number in the\r\n   * direction of positive Infinity.\r\n   *\r\n   */\r\n  P.ceil = function () {\r\n    return finalise(new this.constructor(this), this.e + 1, 2);\r\n  };\r\n\r\n\r\n  /*\r\n   * Return a new Decimal whose value is the value of this Decimal clamped to the range\r\n   * delineated by `min` and `max`.\r\n   *\r\n   * min {number|string|bigint|Decimal}\r\n   * max {number|string|bigint|Decimal}\r\n   *\r\n   */\r\n  P.clampedTo = P.clamp = function (min, max) {\r\n    var k,\r\n      x = this,\r\n      Ctor = x.constructor;\r\n    min = new Ctor(min);\r\n    max = new Ctor(max);\r\n    if (!min.s || !max.s) return new Ctor(NaN);\r\n    if (min.gt(max)) throw Error(invalidArgument + max);\r\n    k = x.cmp(min);\r\n    return k < 0 ? min : x.cmp(max) > 0 ? max : new Ctor(x);\r\n  };\r\n\r\n\r\n  /*\r\n   * Return\r\n   *   1    if the value of this Decimal is greater than the value of `y`,\r\n   *  -1    if the value of this Decimal is less than the value of `y`,\r\n   *   0    if they have the same value,\r\n   *   NaN  if the value of either Decimal is NaN.\r\n   *\r\n   */\r\n  P.comparedTo = P.cmp = function (y) {\r\n    var i, j, xdL, ydL,\r\n      x = this,\r\n      xd = x.d,\r\n      yd = (y = new x.constructor(y)).d,\r\n      xs = x.s,\r\n      ys = y.s;\r\n\r\n    // Either NaN or ±Infinity?\r\n    if (!xd || !yd) {\r\n      return !xs || !ys ? NaN : xs !== ys ? xs : xd === yd ? 0 : !xd ^ xs < 0 ? 1 : -1;\r\n    }\r\n\r\n    // Either zero?\r\n    if (!xd[0] || !yd[0]) return xd[0] ? xs : yd[0] ? -ys : 0;\r\n\r\n    // Signs differ?\r\n    if (xs !== ys) return xs;\r\n\r\n    // Compare exponents.\r\n    if (x.e !== y.e) return x.e > y.e ^ xs < 0 ? 1 : -1;\r\n\r\n    xdL = xd.length;\r\n    ydL = yd.length;\r\n\r\n    // Compare digit by digit.\r\n    for (i = 0, j = xdL < ydL ? xdL : ydL; i < j; ++i) {\r\n      if (xd[i] !== yd[i]) return xd[i] > yd[i] ^ xs < 0 ? 1 : -1;\r\n    }\r\n\r\n    // Compare lengths.\r\n    return xdL === ydL ? 0 : xdL > ydL ^ xs < 0 ? 1 : -1;\r\n  };\r\n\r\n\r\n  /*\r\n   * Return a new Decimal whose value is the cosine of the value in radians of this Decimal.\r\n   *\r\n   * Domain: [-Infinity, Infinity]\r\n   * Range: [-1, 1]\r\n   *\r\n   * cos(0)         = 1\r\n   * cos(-0)        = 1\r\n   * cos(Infinity)  = NaN\r\n   * cos(-Infinity) = NaN\r\n   * cos(NaN)       = NaN\r\n   *\r\n   */\r\n  P.cosine = P.cos = function () {\r\n    var pr, rm,\r\n      x = this,\r\n      Ctor = x.constructor;\r\n\r\n    if (!x.d) return new Ctor(NaN);\r\n\r\n    // cos(0) = cos(-0) = 1\r\n    if (!x.d[0]) return new Ctor(1);\r\n\r\n    pr = Ctor.precision;\r\n    rm = Ctor.rounding;\r\n    Ctor.precision = pr + Math.max(x.e, x.sd()) + LOG_BASE;\r\n    Ctor.rounding = 1;\r\n\r\n    x = cosine(Ctor, toLessThanHalfPi(Ctor, x));\r\n\r\n    Ctor.precision = pr;\r\n    Ctor.rounding = rm;\r\n\r\n    return finalise(quadrant == 2 || quadrant == 3 ? x.neg() : x, pr, rm, true);\r\n  };\r\n\r\n\r\n  /*\r\n   *\r\n   * Return a new Decimal whose value is the cube root of the value of this Decimal, rounded to\r\n   * `precision` significant digits using rounding mode `rounding`.\r\n   *\r\n   *  cbrt(0)  =  0\r\n   *  cbrt(-0) = -0\r\n   *  cbrt(1)  =  1\r\n   *  cbrt(-1) = -1\r\n   *  cbrt(N)  =  N\r\n   *  cbrt(-I) = -I\r\n   *  cbrt(I)  =  I\r\n   *\r\n   * Math.cbrt(x) = (x < 0 ? -Math.pow(-x, 1/3) : Math.pow(x, 1/3))\r\n   *\r\n   */\r\n  P.cubeRoot = P.cbrt = function () {\r\n    var e, m, n, r, rep, s, sd, t, t3, t3plusx,\r\n      x = this,\r\n      Ctor = x.constructor;\r\n\r\n    if (!x.isFinite() || x.isZero()) return new Ctor(x);\r\n    external = false;\r\n\r\n    // Initial estimate.\r\n    s = x.s * mathpow(x.s * x, 1 / 3);\r\n\r\n     // Math.cbrt underflow/overflow?\r\n     // Pass x to Math.pow as integer, then adjust the exponent of the result.\r\n    if (!s || Math.abs(s) == 1 / 0) {\r\n      n = digitsToString(x.d);\r\n      e = x.e;\r\n\r\n      // Adjust n exponent so it is a multiple of 3 away from x exponent.\r\n      if (s = (e - n.length + 1) % 3) n += (s == 1 || s == -2 ? '0' : '00');\r\n      s = mathpow(n, 1 / 3);\r\n\r\n      // Rarely, e may be one less than the result exponent value.\r\n      e = mathfloor((e + 1) / 3) - (e % 3 == (e < 0 ? -1 : 2));\r\n\r\n      if (s == 1 / 0) {\r\n        n = '5e' + e;\r\n      } else {\r\n        n = s.toExponential();\r\n        n = n.slice(0, n.indexOf('e') + 1) + e;\r\n      }\r\n\r\n      r = new Ctor(n);\r\n      r.s = x.s;\r\n    } else {\r\n      r = new Ctor(s.toString());\r\n    }\r\n\r\n    sd = (e = Ctor.precision) + 3;\r\n\r\n    // Halley's method.\r\n    // TODO? Compare Newton's method.\r\n    for (;;) {\r\n      t = r;\r\n      t3 = t.times(t).times(t);\r\n      t3plusx = t3.plus(x);\r\n      r = divide(t3plusx.plus(x).times(t), t3plusx.plus(t3), sd + 2, 1);\r\n\r\n      // TODO? Replace with for-loop and checkRoundingDigits.\r\n      if (digitsToString(t.d).slice(0, sd) === (n = digitsToString(r.d)).slice(0, sd)) {\r\n        n = n.slice(sd - 3, sd + 1);\r\n\r\n        // The 4th rounding digit may be in error by -1 so if the 4 rounding digits are 9999 or 4999\r\n        // , i.e. approaching a rounding boundary, continue the iteration.\r\n        if (n == '9999' || !rep && n == '4999') {\r\n\r\n          // On the first iteration only, check to see if rounding up gives the exact result as the\r\n          // nines may infinitely repeat.\r\n          if (!rep) {\r\n            finalise(t, e + 1, 0);\r\n\r\n            if (t.times(t).times(t).eq(x)) {\r\n              r = t;\r\n              break;\r\n            }\r\n          }\r\n\r\n          sd += 4;\r\n          rep = 1;\r\n        } else {\r\n\r\n          // If the rounding digits are null, 0{0,4} or 50{0,3}, check for an exact result.\r\n          // If not, then there are further digits and m will be truthy.\r\n          if (!+n || !+n.slice(1) && n.charAt(0) == '5') {\r\n\r\n            // Truncate to the first rounding digit.\r\n            finalise(r, e + 1, 1);\r\n            m = !r.times(r).times(r).eq(x);\r\n          }\r\n\r\n          break;\r\n        }\r\n      }\r\n    }\r\n\r\n    external = true;\r\n\r\n    return finalise(r, e, Ctor.rounding, m);\r\n  };\r\n\r\n\r\n  /*\r\n   * Return the number of decimal places of the value of this Decimal.\r\n   *\r\n   */\r\n  P.decimalPlaces = P.dp = function () {\r\n    var w,\r\n      d = this.d,\r\n      n = NaN;\r\n\r\n    if (d) {\r\n      w = d.length - 1;\r\n      n = (w - mathfloor(this.e / LOG_BASE)) * LOG_BASE;\r\n\r\n      // Subtract the number of trailing zeros of the last word.\r\n      w = d[w];\r\n      if (w) for (; w % 10 == 0; w /= 10) n--;\r\n      if (n < 0) n = 0;\r\n    }\r\n\r\n    return n;\r\n  };\r\n\r\n\r\n  /*\r\n   *  n / 0 = I\r\n   *  n / N = N\r\n   *  n / I = 0\r\n   *  0 / n = 0\r\n   *  0 / 0 = N\r\n   *  0 / N = N\r\n   *  0 / I = 0\r\n   *  N / n = N\r\n   *  N / 0 = N\r\n   *  N / N = N\r\n   *  N / I = N\r\n   *  I / n = I\r\n   *  I / 0 = I\r\n   *  I / N = N\r\n   *  I / I = N\r\n   *\r\n   * Return a new Decimal whose value is the value of this Decimal divided by `y`, rounded to\r\n   * `precision` significant digits using rounding mode `rounding`.\r\n   *\r\n   */\r\n  P.dividedBy = P.div = function (y) {\r\n    return divide(this, new this.constructor(y));\r\n  };\r\n\r\n\r\n  /*\r\n   * Return a new Decimal whose value is the integer part of dividing the value of this Decimal\r\n   * by the value of `y`, rounded to `precision` significant digits using rounding mode `rounding`.\r\n   *\r\n   */\r\n  P.dividedToIntegerBy = P.divToInt = function (y) {\r\n    var x = this,\r\n      Ctor = x.constructor;\r\n    return finalise(divide(x, new Ctor(y), 0, 1, 1), Ctor.precision, Ctor.rounding);\r\n  };\r\n\r\n\r\n  /*\r\n   * Return true if the value of this Decimal is equal to the value of `y`, otherwise return false.\r\n   *\r\n   */\r\n  P.equals = P.eq = function (y) {\r\n    return this.cmp(y) === 0;\r\n  };\r\n\r\n\r\n  /*\r\n   * Return a new Decimal whose value is the value of this Decimal rounded to a whole number in the\r\n   * direction of negative Infinity.\r\n   *\r\n   */\r\n  P.floor = function () {\r\n    return finalise(new this.constructor(this), this.e + 1, 3);\r\n  };\r\n\r\n\r\n  /*\r\n   * Return true if the value of this Decimal is greater than the value of `y`, otherwise return\r\n   * false.\r\n   *\r\n   */\r\n  P.greaterThan = P.gt = function (y) {\r\n    return this.cmp(y) > 0;\r\n  };\r\n\r\n\r\n  /*\r\n   * Return true if the value of this Decimal is greater than or equal to the value of `y`,\r\n   * otherwise return false.\r\n   *\r\n   */\r\n  P.greaterThanOrEqualTo = P.gte = function (y) {\r\n    var k = this.cmp(y);\r\n    return k == 1 || k === 0;\r\n  };\r\n\r\n\r\n  /*\r\n   * Return a new Decimal whose value is the hyperbolic cosine of the value in radians of this\r\n   * Decimal.\r\n   *\r\n   * Domain: [-Infinity, Infinity]\r\n   * Range: [1, Infinity]\r\n   *\r\n   * cosh(x) = 1 + x^2/2! + x^4/4! + x^6/6! + ...\r\n   *\r\n   * cosh(0)         = 1\r\n   * cosh(-0)        = 1\r\n   * cosh(Infinity)  = Infinity\r\n   * cosh(-Infinity) = Infinity\r\n   * cosh(NaN)       = NaN\r\n   *\r\n   *  x        time taken (ms)   result\r\n   * 1000      9                 9.8503555700852349694e+433\r\n   * 10000     25                4.4034091128314607936e+4342\r\n   * 100000    171               1.4033316802130615897e+43429\r\n   * 1000000   3817              1.5166076984010437725e+434294\r\n   * 10000000  abandoned after 2 minute wait\r\n   *\r\n   * TODO? Compare performance of cosh(x) = 0.5 * (exp(x) + exp(-x))\r\n   *\r\n   */\r\n  P.hyperbolicCosine = P.cosh = function () {\r\n    var k, n, pr, rm, len,\r\n      x = this,\r\n      Ctor = x.constructor,\r\n      one = new Ctor(1);\r\n\r\n    if (!x.isFinite()) return new Ctor(x.s ? 1 / 0 : NaN);\r\n    if (x.isZero()) return one;\r\n\r\n    pr = Ctor.precision;\r\n    rm = Ctor.rounding;\r\n    Ctor.precision = pr + Math.max(x.e, x.sd()) + 4;\r\n    Ctor.rounding = 1;\r\n    len = x.d.length;\r\n\r\n    // Argument reduction: cos(4x) = 1 - 8cos^2(x) + 8cos^4(x) + 1\r\n    // i.e. cos(x) = 1 - cos^2(x/4)(8 - 8cos^2(x/4))\r\n\r\n    // Estimate the optimum number of times to use the argument reduction.\r\n    // TODO? Estimation reused from cosine() and may not be optimal here.\r\n    if (len < 32) {\r\n      k = Math.ceil(len / 3);\r\n      n = (1 / tinyPow(4, k)).toString();\r\n    } else {\r\n      k = 16;\r\n      n = '2.3283064365386962890625e-10';\r\n    }\r\n\r\n    x = taylorSeries(Ctor, 1, x.times(n), new Ctor(1), true);\r\n\r\n    // Reverse argument reduction\r\n    var cosh2_x,\r\n      i = k,\r\n      d8 = new Ctor(8);\r\n    for (; i--;) {\r\n      cosh2_x = x.times(x);\r\n      x = one.minus(cosh2_x.times(d8.minus(cosh2_x.times(d8))));\r\n    }\r\n\r\n    return finalise(x, Ctor.precision = pr, Ctor.rounding = rm, true);\r\n  };\r\n\r\n\r\n  /*\r\n   * Return a new Decimal whose value is the hyperbolic sine of the value in radians of this\r\n   * Decimal.\r\n   *\r\n   * Domain: [-Infinity, Infinity]\r\n   * Range: [-Infinity, Infinity]\r\n   *\r\n   * sinh(x) = x + x^3/3! + x^5/5! + x^7/7! + ...\r\n   *\r\n   * sinh(0)         = 0\r\n   * sinh(-0)        = -0\r\n   * sinh(Infinity)  = Infinity\r\n   * sinh(-Infinity) = -Infinity\r\n   * sinh(NaN)       = NaN\r\n   *\r\n   * x        time taken (ms)\r\n   * 10       2 ms\r\n   * 100      5 ms\r\n   * 1000     14 ms\r\n   * 10000    82 ms\r\n   * 100000   886 ms            1.4033316802130615897e+43429\r\n   * 200000   2613 ms\r\n   * 300000   5407 ms\r\n   * 400000   8824 ms\r\n   * 500000   13026 ms          8.7080643612718084129e+217146\r\n   * 1000000  48543 ms\r\n   *\r\n   * TODO? Compare performance of sinh(x) = 0.5 * (exp(x) - exp(-x))\r\n   *\r\n   */\r\n  P.hyperbolicSine = P.sinh = function () {\r\n    var k, pr, rm, len,\r\n      x = this,\r\n      Ctor = x.constructor;\r\n\r\n    if (!x.isFinite() || x.isZero()) return new Ctor(x);\r\n\r\n    pr = Ctor.precision;\r\n    rm = Ctor.rounding;\r\n    Ctor.precision = pr + Math.max(x.e, x.sd()) + 4;\r\n    Ctor.rounding = 1;\r\n    len = x.d.length;\r\n\r\n    if (len < 3) {\r\n      x = taylorSeries(Ctor, 2, x, x, true);\r\n    } else {\r\n\r\n      // Alternative argument reduction: sinh(3x) = sinh(x)(3 + 4sinh^2(x))\r\n      // i.e. sinh(x) = sinh(x/3)(3 + 4sinh^2(x/3))\r\n      // 3 multiplications and 1 addition\r\n\r\n      // Argument reduction: sinh(5x) = sinh(x)(5 + sinh^2(x)(20 + 16sinh^2(x)))\r\n      // i.e. sinh(x) = sinh(x/5)(5 + sinh^2(x/5)(20 + 16sinh^2(x/5)))\r\n      // 4 multiplications and 2 additions\r\n\r\n      // Estimate the optimum number of times to use the argument reduction.\r\n      k = 1.4 * Math.sqrt(len);\r\n      k = k > 16 ? 16 : k | 0;\r\n\r\n      x = x.times(1 / tinyPow(5, k));\r\n      x = taylorSeries(Ctor, 2, x, x, true);\r\n\r\n      // Reverse argument reduction\r\n      var sinh2_x,\r\n        d5 = new Ctor(5),\r\n        d16 = new Ctor(16),\r\n        d20 = new Ctor(20);\r\n      for (; k--;) {\r\n        sinh2_x = x.times(x);\r\n        x = x.times(d5.plus(sinh2_x.times(d16.times(sinh2_x).plus(d20))));\r\n      }\r\n    }\r\n\r\n    Ctor.precision = pr;\r\n    Ctor.rounding = rm;\r\n\r\n    return finalise(x, pr, rm, true);\r\n  };\r\n\r\n\r\n  /*\r\n   * Return a new Decimal whose value is the hyperbolic tangent of the value in radians of this\r\n   * Decimal.\r\n   *\r\n   * Domain: [-Infinity, Infinity]\r\n   * Range: [-1, 1]\r\n   *\r\n   * tanh(x) = sinh(x) / cosh(x)\r\n   *\r\n   * tanh(0)         = 0\r\n   * tanh(-0)        = -0\r\n   * tanh(Infinity)  = 1\r\n   * tanh(-Infinity) = -1\r\n   * tanh(NaN)       = NaN\r\n   *\r\n   */\r\n  P.hyperbolicTangent = P.tanh = function () {\r\n    var pr, rm,\r\n      x = this,\r\n      Ctor = x.constructor;\r\n\r\n    if (!x.isFinite()) return new Ctor(x.s);\r\n    if (x.isZero()) return new Ctor(x);\r\n\r\n    pr = Ctor.precision;\r\n    rm = Ctor.rounding;\r\n    Ctor.precision = pr + 7;\r\n    Ctor.rounding = 1;\r\n\r\n    return divide(x.sinh(), x.cosh(), Ctor.precision = pr, Ctor.rounding = rm);\r\n  };\r\n\r\n\r\n  /*\r\n   * Return a new Decimal whose value is the arccosine (inverse cosine) in radians of the value of\r\n   * this Decimal.\r\n   *\r\n   * Domain: [-1, 1]\r\n   * Range: [0, pi]\r\n   *\r\n   * acos(x) = pi/2 - asin(x)\r\n   *\r\n   * acos(0)       = pi/2\r\n   * acos(-0)      = pi/2\r\n   * acos(1)       = 0\r\n   * acos(-1)      = pi\r\n   * acos(1/2)     = pi/3\r\n   * acos(-1/2)    = 2*pi/3\r\n   * acos(|x| > 1) = NaN\r\n   * acos(NaN)     = NaN\r\n   *\r\n   */\r\n  P.inverseCosine = P.acos = function () {\r\n    var x = this,\r\n      Ctor = x.constructor,\r\n      k = x.abs().cmp(1),\r\n      pr = Ctor.precision,\r\n      rm = Ctor.rounding;\r\n\r\n    if (k !== -1) {\r\n      return k === 0\r\n        // |x| is 1\r\n        ? x.isNeg() ? getPi(Ctor, pr, rm) : new Ctor(0)\r\n        // |x| > 1 or x is NaN\r\n        : new Ctor(NaN);\r\n    }\r\n\r\n    if (x.isZero()) return getPi(Ctor, pr + 4, rm).times(0.5);\r\n\r\n    // TODO? Special case acos(0.5) = pi/3 and acos(-0.5) = 2*pi/3\r\n\r\n    Ctor.precision = pr + 6;\r\n    Ctor.rounding = 1;\r\n\r\n    // See https://github.com/MikeMcl/decimal.js/pull/217\r\n    x = new Ctor(1).minus(x).div(x.plus(1)).sqrt().atan();\r\n\r\n    Ctor.precision = pr;\r\n    Ctor.rounding = rm;\r\n\r\n    return x.times(2);\r\n  };\r\n\r\n\r\n  /*\r\n   * Return a new Decimal whose value is the inverse of the hyperbolic cosine in radians of the\r\n   * value of this Decimal.\r\n   *\r\n   * Domain: [1, Infinity]\r\n   * Range: [0, Infinity]\r\n   *\r\n   * acosh(x) = ln(x + sqrt(x^2 - 1))\r\n   *\r\n   * acosh(x < 1)     = NaN\r\n   * acosh(NaN)       = NaN\r\n   * acosh(Infinity)  = Infinity\r\n   * acosh(-Infinity) = NaN\r\n   * acosh(0)         = NaN\r\n   * acosh(-0)        = NaN\r\n   * acosh(1)         = 0\r\n   * acosh(-1)        = NaN\r\n   *\r\n   */\r\n  P.inverseHyperbolicCosine = P.acosh = function () {\r\n    var pr, rm,\r\n      x = this,\r\n      Ctor = x.constructor;\r\n\r\n    if (x.lte(1)) return new Ctor(x.eq(1) ? 0 : NaN);\r\n    if (!x.isFinite()) return new Ctor(x);\r\n\r\n    pr = Ctor.precision;\r\n    rm = Ctor.rounding;\r\n    Ctor.precision = pr + Math.max(Math.abs(x.e), x.sd()) + 4;\r\n    Ctor.rounding = 1;\r\n    external = false;\r\n\r\n    x = x.times(x).minus(1).sqrt().plus(x);\r\n\r\n    external = true;\r\n    Ctor.precision = pr;\r\n    Ctor.rounding = rm;\r\n\r\n    return x.ln();\r\n  };\r\n\r\n\r\n  /*\r\n   * Return a new Decimal whose value is the inverse of the hyperbolic sine in radians of the value\r\n   * of this Decimal.\r\n   *\r\n   * Domain: [-Infinity, Infinity]\r\n   * Range: [-Infinity, Infinity]\r\n   *\r\n   * asinh(x) = ln(x + sqrt(x^2 + 1))\r\n   *\r\n   * asinh(NaN)       = NaN\r\n   * asinh(Infinity)  = Infinity\r\n   * asinh(-Infinity) = -Infinity\r\n   * asinh(0)         = 0\r\n   * asinh(-0)        = -0\r\n   *\r\n   */\r\n  P.inverseHyperbolicSine = P.asinh = function () {\r\n    var pr, rm,\r\n      x = this,\r\n      Ctor = x.constructor;\r\n\r\n    if (!x.isFinite() || x.isZero()) return new Ctor(x);\r\n\r\n    pr = Ctor.precision;\r\n    rm = Ctor.rounding;\r\n    Ctor.precision = pr + 2 * Math.max(Math.abs(x.e), x.sd()) + 6;\r\n    Ctor.rounding = 1;\r\n    external = false;\r\n\r\n    x = x.times(x).plus(1).sqrt().plus(x);\r\n\r\n    external = true;\r\n    Ctor.precision = pr;\r\n    Ctor.rounding = rm;\r\n\r\n    return x.ln();\r\n  };\r\n\r\n\r\n  /*\r\n   * Return a new Decimal whose value is the inverse of the hyperbolic tangent in radians of the\r\n   * value of this Decimal.\r\n   *\r\n   * Domain: [-1, 1]\r\n   * Range: [-Infinity, Infinity]\r\n   *\r\n   * atanh(x) = 0.5 * ln((1 + x) / (1 - x))\r\n   *\r\n   * atanh(|x| > 1)   = NaN\r\n   * atanh(NaN)       = NaN\r\n   * atanh(Infinity)  = NaN\r\n   * atanh(-Infinity) = NaN\r\n   * atanh(0)         = 0\r\n   * atanh(-0)        = -0\r\n   * atanh(1)         = Infinity\r\n   * atanh(-1)        = -Infinity\r\n   *\r\n   */\r\n  P.inverseHyperbolicTangent = P.atanh = function () {\r\n    var pr, rm, wpr, xsd,\r\n      x = this,\r\n      Ctor = x.constructor;\r\n\r\n    if (!x.isFinite()) return new Ctor(NaN);\r\n    if (x.e >= 0) return new Ctor(x.abs().eq(1) ? x.s / 0 : x.isZero() ? x : NaN);\r\n\r\n    pr = Ctor.precision;\r\n    rm = Ctor.rounding;\r\n    xsd = x.sd();\r\n\r\n    if (Math.max(xsd, pr) < 2 * -x.e - 1) return finalise(new Ctor(x), pr, rm, true);\r\n\r\n    Ctor.precision = wpr = xsd - x.e;\r\n\r\n    x = divide(x.plus(1), new Ctor(1).minus(x), wpr + pr, 1);\r\n\r\n    Ctor.precision = pr + 4;\r\n    Ctor.rounding = 1;\r\n\r\n    x = x.ln();\r\n\r\n    Ctor.precision = pr;\r\n    Ctor.rounding = rm;\r\n\r\n    return x.times(0.5);\r\n  };\r\n\r\n\r\n  /*\r\n   * Return a new Decimal whose value is the arcsine (inverse sine) in radians of the value of this\r\n   * Decimal.\r\n   *\r\n   * Domain: [-Infinity, Infinity]\r\n   * Range: [-pi/2, pi/2]\r\n   *\r\n   * asin(x) = 2*atan(x/(1 + sqrt(1 - x^2)))\r\n   *\r\n   * asin(0)       = 0\r\n   * asin(-0)      = -0\r\n   * asin(1/2)     = pi/6\r\n   * asin(-1/2)    = -pi/6\r\n   * asin(1)       = pi/2\r\n   * asin(-1)      = -pi/2\r\n   * asin(|x| > 1) = NaN\r\n   * asin(NaN)     = NaN\r\n   *\r\n   * TODO? Compare performance of Taylor series.\r\n   *\r\n   */\r\n  P.inverseSine = P.asin = function () {\r\n    var halfPi, k,\r\n      pr, rm,\r\n      x = this,\r\n      Ctor = x.constructor;\r\n\r\n    if (x.isZero()) return new Ctor(x);\r\n\r\n    k = x.abs().cmp(1);\r\n    pr = Ctor.precision;\r\n    rm = Ctor.rounding;\r\n\r\n    if (k !== -1) {\r\n\r\n      // |x| is 1\r\n      if (k === 0) {\r\n        halfPi = getPi(Ctor, pr + 4, rm).times(0.5);\r\n        halfPi.s = x.s;\r\n        return halfPi;\r\n      }\r\n\r\n      // |x| > 1 or x is NaN\r\n      return new Ctor(NaN);\r\n    }\r\n\r\n    // TODO? Special case asin(1/2) = pi/6 and asin(-1/2) = -pi/6\r\n\r\n    Ctor.precision = pr + 6;\r\n    Ctor.rounding = 1;\r\n\r\n    x = x.div(new Ctor(1).minus(x.times(x)).sqrt().plus(1)).atan();\r\n\r\n    Ctor.precision = pr;\r\n    Ctor.rounding = rm;\r\n\r\n    return x.times(2);\r\n  };\r\n\r\n\r\n  /*\r\n   * Return a new Decimal whose value is the arctangent (inverse tangent) in radians of the value\r\n   * of this Decimal.\r\n   *\r\n   * Domain: [-Infinity, Infinity]\r\n   * Range: [-pi/2, pi/2]\r\n   *\r\n   * atan(x) = x - x^3/3 + x^5/5 - x^7/7 + ...\r\n   *\r\n   * atan(0)         = 0\r\n   * atan(-0)        = -0\r\n   * atan(1)         = pi/4\r\n   * atan(-1)        = -pi/4\r\n   * atan(Infinity)  = pi/2\r\n   * atan(-Infinity) = -pi/2\r\n   * atan(NaN)       = NaN\r\n   *\r\n   */\r\n  P.inverseTangent = P.atan = function () {\r\n    var i, j, k, n, px, t, r, wpr, x2,\r\n      x = this,\r\n      Ctor = x.constructor,\r\n      pr = Ctor.precision,\r\n      rm = Ctor.rounding;\r\n\r\n    if (!x.isFinite()) {\r\n      if (!x.s) return new Ctor(NaN);\r\n      if (pr + 4 <= PI_PRECISION) {\r\n        r = getPi(Ctor, pr + 4, rm).times(0.5);\r\n        r.s = x.s;\r\n        return r;\r\n      }\r\n    } else if (x.isZero()) {\r\n      return new Ctor(x);\r\n    } else if (x.abs().eq(1) && pr + 4 <= PI_PRECISION) {\r\n      r = getPi(Ctor, pr + 4, rm).times(0.25);\r\n      r.s = x.s;\r\n      return r;\r\n    }\r\n\r\n    Ctor.precision = wpr = pr + 10;\r\n    Ctor.rounding = 1;\r\n\r\n    // TODO? if (x >= 1 && pr <= PI_PRECISION) atan(x) = halfPi * x.s - atan(1 / x);\r\n\r\n    // Argument reduction\r\n    // Ensure |x| < 0.42\r\n    // atan(x) = 2 * atan(x / (1 + sqrt(1 + x^2)))\r\n\r\n    k = Math.min(28, wpr / LOG_BASE + 2 | 0);\r\n\r\n    for (i = k; i; --i) x = x.div(x.times(x).plus(1).sqrt().plus(1));\r\n\r\n    external = false;\r\n\r\n    j = Math.ceil(wpr / LOG_BASE);\r\n    n = 1;\r\n    x2 = x.times(x);\r\n    r = new Ctor(x);\r\n    px = x;\r\n\r\n    // atan(x) = x - x^3/3 + x^5/5 - x^7/7 + ...\r\n    for (; i !== -1;) {\r\n      px = px.times(x2);\r\n      t = r.minus(px.div(n += 2));\r\n\r\n      px = px.times(x2);\r\n      r = t.plus(px.div(n += 2));\r\n\r\n      if (r.d[j] !== void 0) for (i = j; r.d[i] === t.d[i] && i--;);\r\n    }\r\n\r\n    if (k) r = r.times(2 << (k - 1));\r\n\r\n    external = true;\r\n\r\n    return finalise(r, Ctor.precision = pr, Ctor.rounding = rm, true);\r\n  };\r\n\r\n\r\n  /*\r\n   * Return true if the value of this Decimal is a finite number, otherwise return false.\r\n   *\r\n   */\r\n  P.isFinite = function () {\r\n    return !!this.d;\r\n  };\r\n\r\n\r\n  /*\r\n   * Return true if the value of this Decimal is an integer, otherwise return false.\r\n   *\r\n   */\r\n  P.isInteger = P.isInt = function () {\r\n    return !!this.d && mathfloor(this.e / LOG_BASE) > this.d.length - 2;\r\n  };\r\n\r\n\r\n  /*\r\n   * Return true if the value of this Decimal is NaN, otherwise return false.\r\n   *\r\n   */\r\n  P.isNaN = function () {\r\n    return !this.s;\r\n  };\r\n\r\n\r\n  /*\r\n   * Return true if the value of this Decimal is negative, otherwise return false.\r\n   *\r\n   */\r\n  P.isNegative = P.isNeg = function () {\r\n    return this.s < 0;\r\n  };\r\n\r\n\r\n  /*\r\n   * Return true if the value of this Decimal is positive, otherwise return false.\r\n   *\r\n   */\r\n  P.isPositive = P.isPos = function () {\r\n    return this.s > 0;\r\n  };\r\n\r\n\r\n  /*\r\n   * Return true if the value of this Decimal is 0 or -0, otherwise return false.\r\n   *\r\n   */\r\n  P.isZero = function () {\r\n    return !!this.d && this.d[0] === 0;\r\n  };\r\n\r\n\r\n  /*\r\n   * Return true if the value of this Decimal is less than `y`, otherwise return false.\r\n   *\r\n   */\r\n  P.lessThan = P.lt = function (y) {\r\n    return this.cmp(y) < 0;\r\n  };\r\n\r\n\r\n  /*\r\n   * Return true if the value of this Decimal is less than or equal to `y`, otherwise return false.\r\n   *\r\n   */\r\n  P.lessThanOrEqualTo = P.lte = function (y) {\r\n    return this.cmp(y) < 1;\r\n  };\r\n\r\n\r\n  /*\r\n   * Return the logarithm of the value of this Decimal to the specified base, rounded to `precision`\r\n   * significant digits using rounding mode `rounding`.\r\n   *\r\n   * If no base is specified, return log[10](arg).\r\n   *\r\n   * log[base](arg) = ln(arg) / ln(base)\r\n   *\r\n   * The result will always be correctly rounded if the base of the log is 10, and 'almost always'\r\n   * otherwise:\r\n   *\r\n   * Depending on the rounding mode, the result may be incorrectly rounded if the first fifteen\r\n   * rounding digits are [49]99999999999999 or [50]00000000000000. In that case, the maximum error\r\n   * between the result and the correctly rounded result will be one ulp (unit in the last place).\r\n   *\r\n   * log[-b](a)       = NaN\r\n   * log[0](a)        = NaN\r\n   * log[1](a)        = NaN\r\n   * log[NaN](a)      = NaN\r\n   * log[Infinity](a) = NaN\r\n   * log[b](0)        = -Infinity\r\n   * log[b](-0)       = -Infinity\r\n   * log[b](-a)       = NaN\r\n   * log[b](1)        = 0\r\n   * log[b](Infinity) = Infinity\r\n   * log[b](NaN)      = NaN\r\n   *\r\n   * [base] {number|string|bigint|Decimal} The base of the logarithm.\r\n   *\r\n   */\r\n  P.logarithm = P.log = function (base) {\r\n    var isBase10, d, denominator, k, inf, num, sd, r,\r\n      arg = this,\r\n      Ctor = arg.constructor,\r\n      pr = Ctor.precision,\r\n      rm = Ctor.rounding,\r\n      guard = 5;\r\n\r\n    // Default base is 10.\r\n    if (base == null) {\r\n      base = new Ctor(10);\r\n      isBase10 = true;\r\n    } else {\r\n      base = new Ctor(base);\r\n      d = base.d;\r\n\r\n      // Return NaN if base is negative, or non-finite, or is 0 or 1.\r\n      if (base.s < 0 || !d || !d[0] || base.eq(1)) return new Ctor(NaN);\r\n\r\n      isBase10 = base.eq(10);\r\n    }\r\n\r\n    d = arg.d;\r\n\r\n    // Is arg negative, non-finite, 0 or 1?\r\n    if (arg.s < 0 || !d || !d[0] || arg.eq(1)) {\r\n      return new Ctor(d && !d[0] ? -1 / 0 : arg.s != 1 ? NaN : d ? 0 : 1 / 0);\r\n    }\r\n\r\n    // The result will have a non-terminating decimal expansion if base is 10 and arg is not an\r\n    // integer power of 10.\r\n    if (isBase10) {\r\n      if (d.length > 1) {\r\n        inf = true;\r\n      } else {\r\n        for (k = d[0]; k % 10 === 0;) k /= 10;\r\n        inf = k !== 1;\r\n      }\r\n    }\r\n\r\n    external = false;\r\n    sd = pr + guard;\r\n    num = naturalLogarithm(arg, sd);\r\n    denominator = isBase10 ? getLn10(Ctor, sd + 10) : naturalLogarithm(base, sd);\r\n\r\n    // The result will have 5 rounding digits.\r\n    r = divide(num, denominator, sd, 1);\r\n\r\n    // If at a rounding boundary, i.e. the result's rounding digits are [49]9999 or [50]0000,\r\n    // calculate 10 further digits.\r\n    //\r\n    // If the result is known to have an infinite decimal expansion, repeat this until it is clear\r\n    // that the result is above or below the boundary. Otherwise, if after calculating the 10\r\n    // further digits, the last 14 are nines, round up and assume the result is exact.\r\n    // Also assume the result is exact if the last 14 are zero.\r\n    //\r\n    // Example of a result that will be incorrectly rounded:\r\n    // log[1048576](4503599627370502) = 2.60000000000000009610279511444746...\r\n    // The above result correctly rounded using ROUND_CEIL to 1 decimal place should be 2.7, but it\r\n    // will be given as 2.6 as there are 15 zeros immediately after the requested decimal place, so\r\n    // the exact result would be assumed to be 2.6, which rounded using ROUND_CEIL to 1 decimal\r\n    // place is still 2.6.\r\n    if (checkRoundingDigits(r.d, k = pr, rm)) {\r\n\r\n      do {\r\n        sd += 10;\r\n        num = naturalLogarithm(arg, sd);\r\n        denominator = isBase10 ? getLn10(Ctor, sd + 10) : naturalLogarithm(base, sd);\r\n        r = divide(num, denominator, sd, 1);\r\n\r\n        if (!inf) {\r\n\r\n          // Check for 14 nines from the 2nd rounding digit, as the first may be 4.\r\n          if (+digitsToString(r.d).slice(k + 1, k + 15) + 1 == 1e14) {\r\n            r = finalise(r, pr + 1, 0);\r\n          }\r\n\r\n          break;\r\n        }\r\n      } while (checkRoundingDigits(r.d, k += 10, rm));\r\n    }\r\n\r\n    external = true;\r\n\r\n    return finalise(r, pr, rm);\r\n  };\r\n\r\n\r\n  /*\r\n   * Return a new Decimal whose value is the maximum of the arguments and the value of this Decimal.\r\n   *\r\n   * arguments {number|string|bigint|Decimal}\r\n   *\r\n  P.max = function () {\r\n    Array.prototype.push.call(arguments, this);\r\n    return maxOrMin(this.constructor, arguments, -1);\r\n  };\r\n   */\r\n\r\n\r\n  /*\r\n   * Return a new Decimal whose value is the minimum of the arguments and the value of this Decimal.\r\n   *\r\n   * arguments {number|string|bigint|Decimal}\r\n   *\r\n  P.min = function () {\r\n    Array.prototype.push.call(arguments, this);\r\n    return maxOrMin(this.constructor, arguments, 1);\r\n  };\r\n   */\r\n\r\n\r\n  /*\r\n   *  n - 0 = n\r\n   *  n - N = N\r\n   *  n - I = -I\r\n   *  0 - n = -n\r\n   *  0 - 0 = 0\r\n   *  0 - N = N\r\n   *  0 - I = -I\r\n   *  N - n = N\r\n   *  N - 0 = N\r\n   *  N - N = N\r\n   *  N - I = N\r\n   *  I - n = I\r\n   *  I - 0 = I\r\n   *  I - N = N\r\n   *  I - I = N\r\n   *\r\n   * Return a new Decimal whose value is the value of this Decimal minus `y`, rounded to `precision`\r\n   * significant digits using rounding mode `rounding`.\r\n   *\r\n   */\r\n  P.minus = P.sub = function (y) {\r\n    var d, e, i, j, k, len, pr, rm, xd, xe, xLTy, yd,\r\n      x = this,\r\n      Ctor = x.constructor;\r\n\r\n    y = new Ctor(y);\r\n\r\n    // If either is not finite...\r\n    if (!x.d || !y.d) {\r\n\r\n      // Return NaN if either is NaN.\r\n      if (!x.s || !y.s) y = new Ctor(NaN);\r\n\r\n      // Return y negated if x is finite and y is ±Infinity.\r\n      else if (x.d) y.s = -y.s;\r\n\r\n      // Return x if y is finite and x is ±Infinity.\r\n      // Return x if both are ±Infinity with different signs.\r\n      // Return NaN if both are ±Infinity with the same sign.\r\n      else y = new Ctor(y.d || x.s !== y.s ? x : NaN);\r\n\r\n      return y;\r\n    }\r\n\r\n    // If signs differ...\r\n    if (x.s != y.s) {\r\n      y.s = -y.s;\r\n      return x.plus(y);\r\n    }\r\n\r\n    xd = x.d;\r\n    yd = y.d;\r\n    pr = Ctor.precision;\r\n    rm = Ctor.rounding;\r\n\r\n    // If either is zero...\r\n    if (!xd[0] || !yd[0]) {\r\n\r\n      // Return y negated if x is zero and y is non-zero.\r\n      if (yd[0]) y.s = -y.s;\r\n\r\n      // Return x if y is zero and x is non-zero.\r\n      else if (xd[0]) y = new Ctor(x);\r\n\r\n      // Return zero if both are zero.\r\n      // From IEEE 754 (2008) 6.3: 0 - 0 = -0 - -0 = -0 when rounding to -Infinity.\r\n      else return new Ctor(rm === 3 ? -0 : 0);\r\n\r\n      return external ? finalise(y, pr, rm) : y;\r\n    }\r\n\r\n    // x and y are finite, non-zero numbers with the same sign.\r\n\r\n    // Calculate base 1e7 exponents.\r\n    e = mathfloor(y.e / LOG_BASE);\r\n    xe = mathfloor(x.e / LOG_BASE);\r\n\r\n    xd = xd.slice();\r\n    k = xe - e;\r\n\r\n    // If base 1e7 exponents differ...\r\n    if (k) {\r\n      xLTy = k < 0;\r\n\r\n      if (xLTy) {\r\n        d = xd;\r\n        k = -k;\r\n        len = yd.length;\r\n      } else {\r\n        d = yd;\r\n        e = xe;\r\n        len = xd.length;\r\n      }\r\n\r\n      // Numbers with massively different exponents would result in a very high number of\r\n      // zeros needing to be prepended, but this can be avoided while still ensuring correct\r\n      // rounding by limiting the number of zeros to `Math.ceil(pr / LOG_BASE) + 2`.\r\n      i = Math.max(Math.ceil(pr / LOG_BASE), len) + 2;\r\n\r\n      if (k > i) {\r\n        k = i;\r\n        d.length = 1;\r\n      }\r\n\r\n      // Prepend zeros to equalise exponents.\r\n      d.reverse();\r\n      for (i = k; i--;) d.push(0);\r\n      d.reverse();\r\n\r\n    // Base 1e7 exponents equal.\r\n    } else {\r\n\r\n      // Check digits to determine which is the bigger number.\r\n\r\n      i = xd.length;\r\n      len = yd.length;\r\n      xLTy = i < len;\r\n      if (xLTy) len = i;\r\n\r\n      for (i = 0; i < len; i++) {\r\n        if (xd[i] != yd[i]) {\r\n          xLTy = xd[i] < yd[i];\r\n          break;\r\n        }\r\n      }\r\n\r\n      k = 0;\r\n    }\r\n\r\n    if (xLTy) {\r\n      d = xd;\r\n      xd = yd;\r\n      yd = d;\r\n      y.s = -y.s;\r\n    }\r\n\r\n    len = xd.length;\r\n\r\n    // Append zeros to `xd` if shorter.\r\n    // Don't add zeros to `yd` if shorter as subtraction only needs to start at `yd` length.\r\n    for (i = yd.length - len; i > 0; --i) xd[len++] = 0;\r\n\r\n    // Subtract yd from xd.\r\n    for (i = yd.length; i > k;) {\r\n\r\n      if (xd[--i] < yd[i]) {\r\n        for (j = i; j && xd[--j] === 0;) xd[j] = BASE - 1;\r\n        --xd[j];\r\n        xd[i] += BASE;\r\n      }\r\n\r\n      xd[i] -= yd[i];\r\n    }\r\n\r\n    // Remove trailing zeros.\r\n    for (; xd[--len] === 0;) xd.pop();\r\n\r\n    // Remove leading zeros and adjust exponent accordingly.\r\n    for (; xd[0] === 0; xd.shift()) --e;\r\n\r\n    // Zero?\r\n    if (!xd[0]) return new Ctor(rm === 3 ? -0 : 0);\r\n\r\n    y.d = xd;\r\n    y.e = getBase10Exponent(xd, e);\r\n\r\n    return external ? finalise(y, pr, rm) : y;\r\n  };\r\n\r\n\r\n  /*\r\n   *   n % 0 =  N\r\n   *   n % N =  N\r\n   *   n % I =  n\r\n   *   0 % n =  0\r\n   *  -0 % n = -0\r\n   *   0 % 0 =  N\r\n   *   0 % N =  N\r\n   *   0 % I =  0\r\n   *   N % n =  N\r\n   *   N % 0 =  N\r\n   *   N % N =  N\r\n   *   N % I =  N\r\n   *   I % n =  N\r\n   *   I % 0 =  N\r\n   *   I % N =  N\r\n   *   I % I =  N\r\n   *\r\n   * Return a new Decimal whose value is the value of this Decimal modulo `y`, rounded to\r\n   * `precision` significant digits using rounding mode `rounding`.\r\n   *\r\n   * The result depends on the modulo mode.\r\n   *\r\n   */\r\n  P.modulo = P.mod = function (y) {\r\n    var q,\r\n      x = this,\r\n      Ctor = x.constructor;\r\n\r\n    y = new Ctor(y);\r\n\r\n    // Return NaN if x is ±Infinity or NaN, or y is NaN or ±0.\r\n    if (!x.d || !y.s || y.d && !y.d[0]) return new Ctor(NaN);\r\n\r\n    // Return x if y is ±Infinity or x is ±0.\r\n    if (!y.d || x.d && !x.d[0]) {\r\n      return finalise(new Ctor(x), Ctor.precision, Ctor.rounding);\r\n    }\r\n\r\n    // Prevent rounding of intermediate calculations.\r\n    external = false;\r\n\r\n    if (Ctor.modulo == 9) {\r\n\r\n      // Euclidian division: q = sign(y) * floor(x / abs(y))\r\n      // result = x - q * y    where  0 <= result < abs(y)\r\n      q = divide(x, y.abs(), 0, 3, 1);\r\n      q.s *= y.s;\r\n    } else {\r\n      q = divide(x, y, 0, Ctor.modulo, 1);\r\n    }\r\n\r\n    q = q.times(y);\r\n\r\n    external = true;\r\n\r\n    return x.minus(q);\r\n  };\r\n\r\n\r\n  /*\r\n   * Return a new Decimal whose value is the natural exponential of the value of this Decimal,\r\n   * i.e. the base e raised to the power the value of this Decimal, rounded to `precision`\r\n   * significant digits using rounding mode `rounding`.\r\n   *\r\n   */\r\n  P.naturalExponential = P.exp = function () {\r\n    return naturalExponential(this);\r\n  };\r\n\r\n\r\n  /*\r\n   * Return a new Decimal whose value is the natural logarithm of the value of this Decimal,\r\n   * rounded to `precision` significant digits using rounding mode `rounding`.\r\n   *\r\n   */\r\n  P.naturalLogarithm = P.ln = function () {\r\n    return naturalLogarithm(this);\r\n  };\r\n\r\n\r\n  /*\r\n   * Return a new Decimal whose value is the value of this Decimal negated, i.e. as if multiplied by\r\n   * -1.\r\n   *\r\n   */\r\n  P.negated = P.neg = function () {\r\n    var x = new this.constructor(this);\r\n    x.s = -x.s;\r\n    return finalise(x);\r\n  };\r\n\r\n\r\n  /*\r\n   *  n + 0 = n\r\n   *  n + N = N\r\n   *  n + I = I\r\n   *  0 + n = n\r\n   *  0 + 0 = 0\r\n   *  0 + N = N\r\n   *  0 + I = I\r\n   *  N + n = N\r\n   *  N + 0 = N\r\n   *  N + N = N\r\n   *  N + I = N\r\n   *  I + n = I\r\n   *  I + 0 = I\r\n   *  I + N = N\r\n   *  I + I = I\r\n   *\r\n   * Return a new Decimal whose value is the value of this Decimal plus `y`, rounded to `precision`\r\n   * significant digits using rounding mode `rounding`.\r\n   *\r\n   */\r\n  P.plus = P.add = function (y) {\r\n    var carry, d, e, i, k, len, pr, rm, xd, yd,\r\n      x = this,\r\n      Ctor = x.constructor;\r\n\r\n    y = new Ctor(y);\r\n\r\n    // If either is not finite...\r\n    if (!x.d || !y.d) {\r\n\r\n      // Return NaN if either is NaN.\r\n      if (!x.s || !y.s) y = new Ctor(NaN);\r\n\r\n      // Return x if y is finite and x is ±Infinity.\r\n      // Return x if both are ±Infinity with the same sign.\r\n      // Return NaN if both are ±Infinity with different signs.\r\n      // Return y if x is finite and y is ±Infinity.\r\n      else if (!x.d) y = new Ctor(y.d || x.s === y.s ? x : NaN);\r\n\r\n      return y;\r\n    }\r\n\r\n     // If signs differ...\r\n    if (x.s != y.s) {\r\n      y.s = -y.s;\r\n      return x.minus(y);\r\n    }\r\n\r\n    xd = x.d;\r\n    yd = y.d;\r\n    pr = Ctor.precision;\r\n    rm = Ctor.rounding;\r\n\r\n    // If either is zero...\r\n    if (!xd[0] || !yd[0]) {\r\n\r\n      // Return x if y is zero.\r\n      // Return y if y is non-zero.\r\n      if (!yd[0]) y = new Ctor(x);\r\n\r\n      return external ? finalise(y, pr, rm) : y;\r\n    }\r\n\r\n    // x and y are finite, non-zero numbers with the same sign.\r\n\r\n    // Calculate base 1e7 exponents.\r\n    k = mathfloor(x.e / LOG_BASE);\r\n    e = mathfloor(y.e / LOG_BASE);\r\n\r\n    xd = xd.slice();\r\n    i = k - e;\r\n\r\n    // If base 1e7 exponents differ...\r\n    if (i) {\r\n\r\n      if (i < 0) {\r\n        d = xd;\r\n        i = -i;\r\n        len = yd.length;\r\n      } else {\r\n        d = yd;\r\n        e = k;\r\n        len = xd.length;\r\n      }\r\n\r\n      // Limit number of zeros prepended to max(ceil(pr / LOG_BASE), len) + 1.\r\n      k = Math.ceil(pr / LOG_BASE);\r\n      len = k > len ? k + 1 : len + 1;\r\n\r\n      if (i > len) {\r\n        i = len;\r\n        d.length = 1;\r\n      }\r\n\r\n      // Prepend zeros to equalise exponents. Note: Faster to use reverse then do unshifts.\r\n      d.reverse();\r\n      for (; i--;) d.push(0);\r\n      d.reverse();\r\n    }\r\n\r\n    len = xd.length;\r\n    i = yd.length;\r\n\r\n    // If yd is longer than xd, swap xd and yd so xd points to the longer array.\r\n    if (len - i < 0) {\r\n      i = len;\r\n      d = yd;\r\n      yd = xd;\r\n      xd = d;\r\n    }\r\n\r\n    // Only start adding at yd.length - 1 as the further digits of xd can be left as they are.\r\n    for (carry = 0; i;) {\r\n      carry = (xd[--i] = xd[i] + yd[i] + carry) / BASE | 0;\r\n      xd[i] %= BASE;\r\n    }\r\n\r\n    if (carry) {\r\n      xd.unshift(carry);\r\n      ++e;\r\n    }\r\n\r\n    // Remove trailing zeros.\r\n    // No need to check for zero, as +x + +y != 0 && -x + -y != 0\r\n    for (len = xd.length; xd[--len] == 0;) xd.pop();\r\n\r\n    y.d = xd;\r\n    y.e = getBase10Exponent(xd, e);\r\n\r\n    return external ? finalise(y, pr, rm) : y;\r\n  };\r\n\r\n\r\n  /*\r\n   * Return the number of significant digits of the value of this Decimal.\r\n   *\r\n   * [z] {boolean|number} Whether to count integer-part trailing zeros: true, false, 1 or 0.\r\n   *\r\n   */\r\n  P.precision = P.sd = function (z) {\r\n    var k,\r\n      x = this;\r\n\r\n    if (z !== void 0 && z !== !!z && z !== 1 && z !== 0) throw Error(invalidArgument + z);\r\n\r\n    if (x.d) {\r\n      k = getPrecision(x.d);\r\n      if (z && x.e + 1 > k) k = x.e + 1;\r\n    } else {\r\n      k = NaN;\r\n    }\r\n\r\n    return k;\r\n  };\r\n\r\n\r\n  /*\r\n   * Return a new Decimal whose value is the value of this Decimal rounded to a whole number using\r\n   * rounding mode `rounding`.\r\n   *\r\n   */\r\n  P.round = function () {\r\n    var x = this,\r\n      Ctor = x.constructor;\r\n\r\n    return finalise(new Ctor(x), x.e + 1, Ctor.rounding);\r\n  };\r\n\r\n\r\n  /*\r\n   * Return a new Decimal whose value is the sine of the value in radians of this Decimal.\r\n   *\r\n   * Domain: [-Infinity, Infinity]\r\n   * Range: [-1, 1]\r\n   *\r\n   * sin(x) = x - x^3/3! + x^5/5! - ...\r\n   *\r\n   * sin(0)         = 0\r\n   * sin(-0)        = -0\r\n   * sin(Infinity)  = NaN\r\n   * sin(-Infinity) = NaN\r\n   * sin(NaN)       = NaN\r\n   *\r\n   */\r\n  P.sine = P.sin = function () {\r\n    var pr, rm,\r\n      x = this,\r\n      Ctor = x.constructor;\r\n\r\n    if (!x.isFinite()) return new Ctor(NaN);\r\n    if (x.isZero()) return new Ctor(x);\r\n\r\n    pr = Ctor.precision;\r\n    rm = Ctor.rounding;\r\n    Ctor.precision = pr + Math.max(x.e, x.sd()) + LOG_BASE;\r\n    Ctor.rounding = 1;\r\n\r\n    x = sine(Ctor, toLessThanHalfPi(Ctor, x));\r\n\r\n    Ctor.precision = pr;\r\n    Ctor.rounding = rm;\r\n\r\n    return finalise(quadrant > 2 ? x.neg() : x, pr, rm, true);\r\n  };\r\n\r\n\r\n  /*\r\n   * Return a new Decimal whose value is the square root of this Decimal, rounded to `precision`\r\n   * significant digits using rounding mode `rounding`.\r\n   *\r\n   *  sqrt(-n) =  N\r\n   *  sqrt(N)  =  N\r\n   *  sqrt(-I) =  N\r\n   *  sqrt(I)  =  I\r\n   *  sqrt(0)  =  0\r\n   *  sqrt(-0) = -0\r\n   *\r\n   */\r\n  P.squareRoot = P.sqrt = function () {\r\n    var m, n, sd, r, rep, t,\r\n      x = this,\r\n      d = x.d,\r\n      e = x.e,\r\n      s = x.s,\r\n      Ctor = x.constructor;\r\n\r\n    // Negative/NaN/Infinity/zero?\r\n    if (s !== 1 || !d || !d[0]) {\r\n      return new Ctor(!s || s < 0 && (!d || d[0]) ? NaN : d ? x : 1 / 0);\r\n    }\r\n\r\n    external = false;\r\n\r\n    // Initial estimate.\r\n    s = Math.sqrt(+x);\r\n\r\n    // Math.sqrt underflow/overflow?\r\n    // Pass x to Math.sqrt as integer, then adjust the exponent of the result.\r\n    if (s == 0 || s == 1 / 0) {\r\n      n = digitsToString(d);\r\n\r\n      if ((n.length + e) % 2 == 0) n += '0';\r\n      s = Math.sqrt(n);\r\n      e = mathfloor((e + 1) / 2) - (e < 0 || e % 2);\r\n\r\n      if (s == 1 / 0) {\r\n        n = '5e' + e;\r\n      } else {\r\n        n = s.toExponential();\r\n        n = n.slice(0, n.indexOf('e') + 1) + e;\r\n      }\r\n\r\n      r = new Ctor(n);\r\n    } else {\r\n      r = new Ctor(s.toString());\r\n    }\r\n\r\n    sd = (e = Ctor.precision) + 3;\r\n\r\n    // Newton-Raphson iteration.\r\n    for (;;) {\r\n      t = r;\r\n      r = t.plus(divide(x, t, sd + 2, 1)).times(0.5);\r\n\r\n      // TODO? Replace with for-loop and checkRoundingDigits.\r\n      if (digitsToString(t.d).slice(0, sd) === (n = digitsToString(r.d)).slice(0, sd)) {\r\n        n = n.slice(sd - 3, sd + 1);\r\n\r\n        // The 4th rounding digit may be in error by -1 so if the 4 rounding digits are 9999 or\r\n        // 4999, i.e. approaching a rounding boundary, continue the iteration.\r\n        if (n == '9999' || !rep && n == '4999') {\r\n\r\n          // On the first iteration only, check to see if rounding up gives the exact result as the\r\n          // nines may infinitely repeat.\r\n          if (!rep) {\r\n            finalise(t, e + 1, 0);\r\n\r\n            if (t.times(t).eq(x)) {\r\n              r = t;\r\n              break;\r\n            }\r\n          }\r\n\r\n          sd += 4;\r\n          rep = 1;\r\n        } else {\r\n\r\n          // If the rounding digits are null, 0{0,4} or 50{0,3}, check for an exact result.\r\n          // If not, then there are further digits and m will be truthy.\r\n          if (!+n || !+n.slice(1) && n.charAt(0) == '5') {\r\n\r\n            // Truncate to the first rounding digit.\r\n            finalise(r, e + 1, 1);\r\n            m = !r.times(r).eq(x);\r\n          }\r\n\r\n          break;\r\n        }\r\n      }\r\n    }\r\n\r\n    external = true;\r\n\r\n    return finalise(r, e, Ctor.rounding, m);\r\n  };\r\n\r\n\r\n  /*\r\n   * Return a new Decimal whose value is the tangent of the value in radians of this Decimal.\r\n   *\r\n   * Domain: [-Infinity, Infinity]\r\n   * Range: [-Infinity, Infinity]\r\n   *\r\n   * tan(0)         = 0\r\n   * tan(-0)        = -0\r\n   * tan(Infinity)  = NaN\r\n   * tan(-Infinity) = NaN\r\n   * tan(NaN)       = NaN\r\n   *\r\n   */\r\n  P.tangent = P.tan = function () {\r\n    var pr, rm,\r\n      x = this,\r\n      Ctor = x.constructor;\r\n\r\n    if (!x.isFinite()) return new Ctor(NaN);\r\n    if (x.isZero()) return new Ctor(x);\r\n\r\n    pr = Ctor.precision;\r\n    rm = Ctor.rounding;\r\n    Ctor.precision = pr + 10;\r\n    Ctor.rounding = 1;\r\n\r\n    x = x.sin();\r\n    x.s = 1;\r\n    x = divide(x, new Ctor(1).minus(x.times(x)).sqrt(), pr + 10, 0);\r\n\r\n    Ctor.precision = pr;\r\n    Ctor.rounding = rm;\r\n\r\n    return finalise(quadrant == 2 || quadrant == 4 ? x.neg() : x, pr, rm, true);\r\n  };\r\n\r\n\r\n  /*\r\n   *  n * 0 = 0\r\n   *  n * N = N\r\n   *  n * I = I\r\n   *  0 * n = 0\r\n   *  0 * 0 = 0\r\n   *  0 * N = N\r\n   *  0 * I = N\r\n   *  N * n = N\r\n   *  N * 0 = N\r\n   *  N * N = N\r\n   *  N * I = N\r\n   *  I * n = I\r\n   *  I * 0 = N\r\n   *  I * N = N\r\n   *  I * I = I\r\n   *\r\n   * Return a new Decimal whose value is this Decimal times `y`, rounded to `precision` significant\r\n   * digits using rounding mode `rounding`.\r\n   *\r\n   */\r\n  P.times = P.mul = function (y) {\r\n    var carry, e, i, k, r, rL, t, xdL, ydL,\r\n      x = this,\r\n      Ctor = x.constructor,\r\n      xd = x.d,\r\n      yd = (y = new Ctor(y)).d;\r\n\r\n    y.s *= x.s;\r\n\r\n     // If either is NaN, ±Infinity or ±0...\r\n    if (!xd || !xd[0] || !yd || !yd[0]) {\r\n\r\n      return new Ctor(!y.s || xd && !xd[0] && !yd || yd && !yd[0] && !xd\r\n\r\n        // Return NaN if either is NaN.\r\n        // Return NaN if x is ±0 and y is ±Infinity, or y is ±0 and x is ±Infinity.\r\n        ? NaN\r\n\r\n        // Return ±Infinity if either is ±Infinity.\r\n        // Return ±0 if either is ±0.\r\n        : !xd || !yd ? y.s / 0 : y.s * 0);\r\n    }\r\n\r\n    e = mathfloor(x.e / LOG_BASE) + mathfloor(y.e / LOG_BASE);\r\n    xdL = xd.length;\r\n    ydL = yd.length;\r\n\r\n    // Ensure xd points to the longer array.\r\n    if (xdL < ydL) {\r\n      r = xd;\r\n      xd = yd;\r\n      yd = r;\r\n      rL = xdL;\r\n      xdL = ydL;\r\n      ydL = rL;\r\n    }\r\n\r\n    // Initialise the result array with zeros.\r\n    r = [];\r\n    rL = xdL + ydL;\r\n    for (i = rL; i--;) r.push(0);\r\n\r\n    // Multiply!\r\n    for (i = ydL; --i >= 0;) {\r\n      carry = 0;\r\n      for (k = xdL + i; k > i;) {\r\n        t = r[k] + yd[i] * xd[k - i - 1] + carry;\r\n        r[k--] = t % BASE | 0;\r\n        carry = t / BASE | 0;\r\n      }\r\n\r\n      r[k] = (r[k] + carry) % BASE | 0;\r\n    }\r\n\r\n    // Remove trailing zeros.\r\n    for (; !r[--rL];) r.pop();\r\n\r\n    if (carry) ++e;\r\n    else r.shift();\r\n\r\n    y.d = r;\r\n    y.e = getBase10Exponent(r, e);\r\n\r\n    return external ? finalise(y, Ctor.precision, Ctor.rounding) : y;\r\n  };\r\n\r\n\r\n  /*\r\n   * Return a string representing the value of this Decimal in base 2, round to `sd` significant\r\n   * digits using rounding mode `rm`.\r\n   *\r\n   * If the optional `sd` argument is present then return binary exponential notation.\r\n   *\r\n   * [sd] {number} Significant digits. Integer, 1 to MAX_DIGITS inclusive.\r\n   * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n   *\r\n   */\r\n  P.toBinary = function (sd, rm) {\r\n    return toStringBinary(this, 2, sd, rm);\r\n  };\r\n\r\n\r\n  /*\r\n   * Return a new Decimal whose value is the value of this Decimal rounded to a maximum of `dp`\r\n   * decimal places using rounding mode `rm` or `rounding` if `rm` is omitted.\r\n   *\r\n   * If `dp` is omitted, return a new Decimal whose value is the value of this Decimal.\r\n   *\r\n   * [dp] {number} Decimal places. Integer, 0 to MAX_DIGITS inclusive.\r\n   * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n   *\r\n   */\r\n  P.toDecimalPlaces = P.toDP = function (dp, rm) {\r\n    var x = this,\r\n      Ctor = x.constructor;\r\n\r\n    x = new Ctor(x);\r\n    if (dp === void 0) return x;\r\n\r\n    checkInt32(dp, 0, MAX_DIGITS);\r\n\r\n    if (rm === void 0) rm = Ctor.rounding;\r\n    else checkInt32(rm, 0, 8);\r\n\r\n    return finalise(x, dp + x.e + 1, rm);\r\n  };\r\n\r\n\r\n  /*\r\n   * Return a string representing the value of this Decimal in exponential notation rounded to\r\n   * `dp` fixed decimal places using rounding mode `rounding`.\r\n   *\r\n   * [dp] {number} Decimal places. Integer, 0 to MAX_DIGITS inclusive.\r\n   * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n   *\r\n   */\r\n  P.toExponential = function (dp, rm) {\r\n    var str,\r\n      x = this,\r\n      Ctor = x.constructor;\r\n\r\n    if (dp === void 0) {\r\n      str = finiteToString(x, true);\r\n    } else {\r\n      checkInt32(dp, 0, MAX_DIGITS);\r\n\r\n      if (rm === void 0) rm = Ctor.rounding;\r\n      else checkInt32(rm, 0, 8);\r\n\r\n      x = finalise(new Ctor(x), dp + 1, rm);\r\n      str = finiteToString(x, true, dp + 1);\r\n    }\r\n\r\n    return x.isNeg() && !x.isZero() ? '-' + str : str;\r\n  };\r\n\r\n\r\n  /*\r\n   * Return a string representing the value of this Decimal in normal (fixed-point) notation to\r\n   * `dp` fixed decimal places and rounded using rounding mode `rm` or `rounding` if `rm` is\r\n   * omitted.\r\n   *\r\n   * As with JavaScript numbers, (-0).toFixed(0) is '0', but e.g. (-0.00001).toFixed(0) is '-0'.\r\n   *\r\n   * [dp] {number} Decimal places. Integer, 0 to MAX_DIGITS inclusive.\r\n   * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n   *\r\n   * (-0).toFixed(0) is '0', but (-0.1).toFixed(0) is '-0'.\r\n   * (-0).toFixed(1) is '0.0', but (-0.01).toFixed(1) is '-0.0'.\r\n   * (-0).toFixed(3) is '0.000'.\r\n   * (-0.5).toFixed(0) is '-0'.\r\n   *\r\n   */\r\n  P.toFixed = function (dp, rm) {\r\n    var str, y,\r\n      x = this,\r\n      Ctor = x.constructor;\r\n\r\n    if (dp === void 0) {\r\n      str = finiteToString(x);\r\n    } else {\r\n      checkInt32(dp, 0, MAX_DIGITS);\r\n\r\n      if (rm === void 0) rm = Ctor.rounding;\r\n      else checkInt32(rm, 0, 8);\r\n\r\n      y = finalise(new Ctor(x), dp + x.e + 1, rm);\r\n      str = finiteToString(y, false, dp + y.e + 1);\r\n    }\r\n\r\n    // To determine whether to add the minus sign look at the value before it was rounded,\r\n    // i.e. look at `x` rather than `y`.\r\n    return x.isNeg() && !x.isZero() ? '-' + str : str;\r\n  };\r\n\r\n\r\n  /*\r\n   * Return an array representing the value of this Decimal as a simple fraction with an integer\r\n   * numerator and an integer denominator.\r\n   *\r\n   * The denominator will be a positive non-zero value less than or equal to the specified maximum\r\n   * denominator. If a maximum denominator is not specified, the denominator will be the lowest\r\n   * value necessary to represent the number exactly.\r\n   *\r\n   * [maxD] {number|string|bigint|Decimal} Maximum denominator. Integer >= 1 and < Infinity.\r\n   *\r\n   */\r\n  P.toFraction = function (maxD) {\r\n    var d, d0, d1, d2, e, k, n, n0, n1, pr, q, r,\r\n      x = this,\r\n      xd = x.d,\r\n      Ctor = x.constructor;\r\n\r\n    if (!xd) return new Ctor(x);\r\n\r\n    n1 = d0 = new Ctor(1);\r\n    d1 = n0 = new Ctor(0);\r\n\r\n    d = new Ctor(d1);\r\n    e = d.e = getPrecision(xd) - x.e - 1;\r\n    k = e % LOG_BASE;\r\n    d.d[0] = mathpow(10, k < 0 ? LOG_BASE + k : k);\r\n\r\n    if (maxD == null) {\r\n\r\n      // d is 10**e, the minimum max-denominator needed.\r\n      maxD = e > 0 ? d : n1;\r\n    } else {\r\n      n = new Ctor(maxD);\r\n      if (!n.isInt() || n.lt(n1)) throw Error(invalidArgument + n);\r\n      maxD = n.gt(d) ? (e > 0 ? d : n1) : n;\r\n    }\r\n\r\n    external = false;\r\n    n = new Ctor(digitsToString(xd));\r\n    pr = Ctor.precision;\r\n    Ctor.precision = e = xd.length * LOG_BASE * 2;\r\n\r\n    for (;;)  {\r\n      q = divide(n, d, 0, 1, 1);\r\n      d2 = d0.plus(q.times(d1));\r\n      if (d2.cmp(maxD) == 1) break;\r\n      d0 = d1;\r\n      d1 = d2;\r\n      d2 = n1;\r\n      n1 = n0.plus(q.times(d2));\r\n      n0 = d2;\r\n      d2 = d;\r\n      d = n.minus(q.times(d2));\r\n      n = d2;\r\n    }\r\n\r\n    d2 = divide(maxD.minus(d0), d1, 0, 1, 1);\r\n    n0 = n0.plus(d2.times(n1));\r\n    d0 = d0.plus(d2.times(d1));\r\n    n0.s = n1.s = x.s;\r\n\r\n    // Determine which fraction is closer to x, n0/d0 or n1/d1?\r\n    r = divide(n1, d1, e, 1).minus(x).abs().cmp(divide(n0, d0, e, 1).minus(x).abs()) < 1\r\n        ? [n1, d1] : [n0, d0];\r\n\r\n    Ctor.precision = pr;\r\n    external = true;\r\n\r\n    return r;\r\n  };\r\n\r\n\r\n  /*\r\n   * Return a string representing the value of this Decimal in base 16, round to `sd` significant\r\n   * digits using rounding mode `rm`.\r\n   *\r\n   * If the optional `sd` argument is present then return binary exponential notation.\r\n   *\r\n   * [sd] {number} Significant digits. Integer, 1 to MAX_DIGITS inclusive.\r\n   * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n   *\r\n   */\r\n  P.toHexadecimal = P.toHex = function (sd, rm) {\r\n    return toStringBinary(this, 16, sd, rm);\r\n  };\r\n\r\n\r\n  /*\r\n   * Returns a new Decimal whose value is the nearest multiple of `y` in the direction of rounding\r\n   * mode `rm`, or `Decimal.rounding` if `rm` is omitted, to the value of this Decimal.\r\n   *\r\n   * The return value will always have the same sign as this Decimal, unless either this Decimal\r\n   * or `y` is NaN, in which case the return value will be also be NaN.\r\n   *\r\n   * The return value is not affected by the value of `precision`.\r\n   *\r\n   * y {number|string|bigint|Decimal} The magnitude to round to a multiple of.\r\n   * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n   *\r\n   * 'toNearest() rounding mode not an integer: {rm}'\r\n   * 'toNearest() rounding mode out of range: {rm}'\r\n   *\r\n   */\r\n  P.toNearest = function (y, rm) {\r\n    var x = this,\r\n      Ctor = x.constructor;\r\n\r\n    x = new Ctor(x);\r\n\r\n    if (y == null) {\r\n\r\n      // If x is not finite, return x.\r\n      if (!x.d) return x;\r\n\r\n      y = new Ctor(1);\r\n      rm = Ctor.rounding;\r\n    } else {\r\n      y = new Ctor(y);\r\n      if (rm === void 0) {\r\n        rm = Ctor.rounding;\r\n      } else {\r\n        checkInt32(rm, 0, 8);\r\n      }\r\n\r\n      // If x is not finite, return x if y is not NaN, else NaN.\r\n      if (!x.d) return y.s ? x : y;\r\n\r\n      // If y is not finite, return Infinity with the sign of x if y is Infinity, else NaN.\r\n      if (!y.d) {\r\n        if (y.s) y.s = x.s;\r\n        return y;\r\n      }\r\n    }\r\n\r\n    // If y is not zero, calculate the nearest multiple of y to x.\r\n    if (y.d[0]) {\r\n      external = false;\r\n      x = divide(x, y, 0, rm, 1).times(y);\r\n      external = true;\r\n      finalise(x);\r\n\r\n    // If y is zero, return zero with the sign of x.\r\n    } else {\r\n      y.s = x.s;\r\n      x = y;\r\n    }\r\n\r\n    return x;\r\n  };\r\n\r\n\r\n  /*\r\n   * Return the value of this Decimal converted to a number primitive.\r\n   * Zero keeps its sign.\r\n   *\r\n   */\r\n  P.toNumber = function () {\r\n    return +this;\r\n  };\r\n\r\n\r\n  /*\r\n   * Return a string representing the value of this Decimal in base 8, round to `sd` significant\r\n   * digits using rounding mode `rm`.\r\n   *\r\n   * If the optional `sd` argument is present then return binary exponential notation.\r\n   *\r\n   * [sd] {number} Significant digits. Integer, 1 to MAX_DIGITS inclusive.\r\n   * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n   *\r\n   */\r\n  P.toOctal = function (sd, rm) {\r\n    return toStringBinary(this, 8, sd, rm);\r\n  };\r\n\r\n\r\n  /*\r\n   * Return a new Decimal whose value is the value of this Decimal raised to the power `y`, rounded\r\n   * to `precision` significant digits using rounding mode `rounding`.\r\n   *\r\n   * ECMAScript compliant.\r\n   *\r\n   *   pow(x, NaN)                           = NaN\r\n   *   pow(x, ±0)                            = 1\r\n\r\n   *   pow(NaN, non-zero)                    = NaN\r\n   *   pow(abs(x) > 1, +Infinity)            = +Infinity\r\n   *   pow(abs(x) > 1, -Infinity)            = +0\r\n   *   pow(abs(x) == 1, ±Infinity)           = NaN\r\n   *   pow(abs(x) < 1, +Infinity)            = +0\r\n   *   pow(abs(x) < 1, -Infinity)            = +Infinity\r\n   *   pow(+Infinity, y > 0)                 = +Infinity\r\n   *   pow(+Infinity, y < 0)                 = +0\r\n   *   pow(-Infinity, odd integer > 0)       = -Infinity\r\n   *   pow(-Infinity, even integer > 0)      = +Infinity\r\n   *   pow(-Infinity, odd integer < 0)       = -0\r\n   *   pow(-Infinity, even integer < 0)      = +0\r\n   *   pow(+0, y > 0)                        = +0\r\n   *   pow(+0, y < 0)                        = +Infinity\r\n   *   pow(-0, odd integer > 0)              = -0\r\n   *   pow(-0, even integer > 0)             = +0\r\n   *   pow(-0, odd integer < 0)              = -Infinity\r\n   *   pow(-0, even integer < 0)             = +Infinity\r\n   *   pow(finite x < 0, finite non-integer) = NaN\r\n   *\r\n   * For non-integer or very large exponents pow(x, y) is calculated using\r\n   *\r\n   *   x^y = exp(y*ln(x))\r\n   *\r\n   * Assuming the first 15 rounding digits are each equally likely to be any digit 0-9, the\r\n   * probability of an incorrectly rounded result\r\n   * P([49]9{14} | [50]0{14}) = 2 * 0.2 * 10^-14 = 4e-15 = 1/2.5e+14\r\n   * i.e. 1 in 250,000,000,000,000\r\n   *\r\n   * If a result is incorrectly rounded the maximum error will be 1 ulp (unit in last place).\r\n   *\r\n   * y {number|string|bigint|Decimal} The power to which to raise this Decimal.\r\n   *\r\n   */\r\n  P.toPower = P.pow = function (y) {\r\n    var e, k, pr, r, rm, s,\r\n      x = this,\r\n      Ctor = x.constructor,\r\n      yn = +(y = new Ctor(y));\r\n\r\n    // Either ±Infinity, NaN or ±0?\r\n    if (!x.d || !y.d || !x.d[0] || !y.d[0]) return new Ctor(mathpow(+x, yn));\r\n\r\n    x = new Ctor(x);\r\n\r\n    if (x.eq(1)) return x;\r\n\r\n    pr = Ctor.precision;\r\n    rm = Ctor.rounding;\r\n\r\n    if (y.eq(1)) return finalise(x, pr, rm);\r\n\r\n    // y exponent\r\n    e = mathfloor(y.e / LOG_BASE);\r\n\r\n    // If y is a small integer use the 'exponentiation by squaring' algorithm.\r\n    if (e >= y.d.length - 1 && (k = yn < 0 ? -yn : yn) <= MAX_SAFE_INTEGER) {\r\n      r = intPow(Ctor, x, k, pr);\r\n      return y.s < 0 ? new Ctor(1).div(r) : finalise(r, pr, rm);\r\n    }\r\n\r\n    s = x.s;\r\n\r\n    // if x is negative\r\n    if (s < 0) {\r\n\r\n      // if y is not an integer\r\n      if (e < y.d.length - 1) return new Ctor(NaN);\r\n\r\n      // Result is positive if x is negative and the last digit of integer y is even.\r\n      if ((y.d[e] & 1) == 0) s = 1;\r\n\r\n      // if x.eq(-1)\r\n      if (x.e == 0 && x.d[0] == 1 && x.d.length == 1) {\r\n        x.s = s;\r\n        return x;\r\n      }\r\n    }\r\n\r\n    // Estimate result exponent.\r\n    // x^y = 10^e,  where e = y * log10(x)\r\n    // log10(x) = log10(x_significand) + x_exponent\r\n    // log10(x_significand) = ln(x_significand) / ln(10)\r\n    k = mathpow(+x, yn);\r\n    e = k == 0 || !isFinite(k)\r\n      ? mathfloor(yn * (Math.log('0.' + digitsToString(x.d)) / Math.LN10 + x.e + 1))\r\n      : new Ctor(k + '').e;\r\n\r\n    // Exponent estimate may be incorrect e.g. x: 0.999999999999999999, y: 2.29, e: 0, r.e: -1.\r\n\r\n    // Overflow/underflow?\r\n    if (e > Ctor.maxE + 1 || e < Ctor.minE - 1) return new Ctor(e > 0 ? s / 0 : 0);\r\n\r\n    external = false;\r\n    Ctor.rounding = x.s = 1;\r\n\r\n    // Estimate the extra guard digits needed to ensure five correct rounding digits from\r\n    // naturalLogarithm(x). Example of failure without these extra digits (precision: 10):\r\n    // new Decimal(2.32456).pow('2087987436534566.46411')\r\n    // should be 1.162377823e+764914905173815, but is 1.162355823e+764914905173815\r\n    k = Math.min(12, (e + '').length);\r\n\r\n    // r = x^y = exp(y*ln(x))\r\n    r = naturalExponential(y.times(naturalLogarithm(x, pr + k)), pr);\r\n\r\n    // r may be Infinity, e.g. (0.9999999999999999).pow(-1e+40)\r\n    if (r.d) {\r\n\r\n      // Truncate to the required precision plus five rounding digits.\r\n      r = finalise(r, pr + 5, 1);\r\n\r\n      // If the rounding digits are [49]9999 or [50]0000 increase the precision by 10 and recalculate\r\n      // the result.\r\n      if (checkRoundingDigits(r.d, pr, rm)) {\r\n        e = pr + 10;\r\n\r\n        // Truncate to the increased precision plus five rounding digits.\r\n        r = finalise(naturalExponential(y.times(naturalLogarithm(x, e + k)), e), e + 5, 1);\r\n\r\n        // Check for 14 nines from the 2nd rounding digit (the first rounding digit may be 4 or 9).\r\n        if (+digitsToString(r.d).slice(pr + 1, pr + 15) + 1 == 1e14) {\r\n          r = finalise(r, pr + 1, 0);\r\n        }\r\n      }\r\n    }\r\n\r\n    r.s = s;\r\n    external = true;\r\n    Ctor.rounding = rm;\r\n\r\n    return finalise(r, pr, rm);\r\n  };\r\n\r\n\r\n  /*\r\n   * Return a string representing the value of this Decimal rounded to `sd` significant digits\r\n   * using rounding mode `rounding`.\r\n   *\r\n   * Return exponential notation if `sd` is less than the number of digits necessary to represent\r\n   * the integer part of the value in normal notation.\r\n   *\r\n   * [sd] {number} Significant digits. Integer, 1 to MAX_DIGITS inclusive.\r\n   * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n   *\r\n   */\r\n  P.toPrecision = function (sd, rm) {\r\n    var str,\r\n      x = this,\r\n      Ctor = x.constructor;\r\n\r\n    if (sd === void 0) {\r\n      str = finiteToString(x, x.e <= Ctor.toExpNeg || x.e >= Ctor.toExpPos);\r\n    } else {\r\n      checkInt32(sd, 1, MAX_DIGITS);\r\n\r\n      if (rm === void 0) rm = Ctor.rounding;\r\n      else checkInt32(rm, 0, 8);\r\n\r\n      x = finalise(new Ctor(x), sd, rm);\r\n      str = finiteToString(x, sd <= x.e || x.e <= Ctor.toExpNeg, sd);\r\n    }\r\n\r\n    return x.isNeg() && !x.isZero() ? '-' + str : str;\r\n  };\r\n\r\n\r\n  /*\r\n   * Return a new Decimal whose value is the value of this Decimal rounded to a maximum of `sd`\r\n   * significant digits using rounding mode `rm`, or to `precision` and `rounding` respectively if\r\n   * omitted.\r\n   *\r\n   * [sd] {number} Significant digits. Integer, 1 to MAX_DIGITS inclusive.\r\n   * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n   *\r\n   * 'toSD() digits out of range: {sd}'\r\n   * 'toSD() digits not an integer: {sd}'\r\n   * 'toSD() rounding mode not an integer: {rm}'\r\n   * 'toSD() rounding mode out of range: {rm}'\r\n   *\r\n   */\r\n  P.toSignificantDigits = P.toSD = function (sd, rm) {\r\n    var x = this,\r\n      Ctor = x.constructor;\r\n\r\n    if (sd === void 0) {\r\n      sd = Ctor.precision;\r\n      rm = Ctor.rounding;\r\n    } else {\r\n      checkInt32(sd, 1, MAX_DIGITS);\r\n\r\n      if (rm === void 0) rm = Ctor.rounding;\r\n      else checkInt32(rm, 0, 8);\r\n    }\r\n\r\n    return finalise(new Ctor(x), sd, rm);\r\n  };\r\n\r\n\r\n  /*\r\n   * Return a string representing the value of this Decimal.\r\n   *\r\n   * Return exponential notation if this Decimal has a positive exponent equal to or greater than\r\n   * `toExpPos`, or a negative exponent equal to or less than `toExpNeg`.\r\n   *\r\n   */\r\n  P.toString = function () {\r\n    var x = this,\r\n      Ctor = x.constructor,\r\n      str = finiteToString(x, x.e <= Ctor.toExpNeg || x.e >= Ctor.toExpPos);\r\n\r\n    return x.isNeg() && !x.isZero() ? '-' + str : str;\r\n  };\r\n\r\n\r\n  /*\r\n   * Return a new Decimal whose value is the value of this Decimal truncated to a whole number.\r\n   *\r\n   */\r\n  P.truncated = P.trunc = function () {\r\n    return finalise(new this.constructor(this), this.e + 1, 1);\r\n  };\r\n\r\n\r\n  /*\r\n   * Return a string representing the value of this Decimal.\r\n   * Unlike `toString`, negative zero will include the minus sign.\r\n   *\r\n   */\r\n  P.valueOf = P.toJSON = function () {\r\n    var x = this,\r\n      Ctor = x.constructor,\r\n      str = finiteToString(x, x.e <= Ctor.toExpNeg || x.e >= Ctor.toExpPos);\r\n\r\n    return x.isNeg() ? '-' + str : str;\r\n  };\r\n\r\n\r\n  // Helper functions for Decimal.prototype (P) and/or Decimal methods, and their callers.\r\n\r\n\r\n  /*\r\n   *  digitsToString           P.cubeRoot, P.logarithm, P.squareRoot, P.toFraction, P.toPower,\r\n   *                           finiteToString, naturalExponential, naturalLogarithm\r\n   *  checkInt32               P.toDecimalPlaces, P.toExponential, P.toFixed, P.toNearest,\r\n   *                           P.toPrecision, P.toSignificantDigits, toStringBinary, random\r\n   *  checkRoundingDigits      P.logarithm, P.toPower, naturalExponential, naturalLogarithm\r\n   *  convertBase              toStringBinary, parseOther\r\n   *  cos                      P.cos\r\n   *  divide                   P.atanh, P.cubeRoot, P.dividedBy, P.dividedToIntegerBy,\r\n   *                           P.logarithm, P.modulo, P.squareRoot, P.tan, P.tanh, P.toFraction,\r\n   *                           P.toNearest, toStringBinary, naturalExponential, naturalLogarithm,\r\n   *                           taylorSeries, atan2, parseOther\r\n   *  finalise                 P.absoluteValue, P.atan, P.atanh, P.ceil, P.cos, P.cosh,\r\n   *                           P.cubeRoot, P.dividedToIntegerBy, P.floor, P.logarithm, P.minus,\r\n   *                           P.modulo, P.negated, P.plus, P.round, P.sin, P.sinh, P.squareRoot,\r\n   *                           P.tan, P.times, P.toDecimalPlaces, P.toExponential, P.toFixed,\r\n   *                           P.toNearest, P.toPower, P.toPrecision, P.toSignificantDigits,\r\n   *                           P.truncated, divide, getLn10, getPi, naturalExponential,\r\n   *                           naturalLogarithm, ceil, floor, round, trunc\r\n   *  finiteToString           P.toExponential, P.toFixed, P.toPrecision, P.toString, P.valueOf,\r\n   *                           toStringBinary\r\n   *  getBase10Exponent        P.minus, P.plus, P.times, parseOther\r\n   *  getLn10                  P.logarithm, naturalLogarithm\r\n   *  getPi                    P.acos, P.asin, P.atan, toLessThanHalfPi, atan2\r\n   *  getPrecision             P.precision, P.toFraction\r\n   *  getZeroString            digitsToString, finiteToString\r\n   *  intPow                   P.toPower, parseOther\r\n   *  isOdd                    toLessThanHalfPi\r\n   *  maxOrMin                 max, min\r\n   *  naturalExponential       P.naturalExponential, P.toPower\r\n   *  naturalLogarithm         P.acosh, P.asinh, P.atanh, P.logarithm, P.naturalLogarithm,\r\n   *                           P.toPower, naturalExponential\r\n   *  nonFiniteToString        finiteToString, toStringBinary\r\n   *  parseDecimal             Decimal\r\n   *  parseOther               Decimal\r\n   *  sin                      P.sin\r\n   *  taylorSeries             P.cosh, P.sinh, cos, sin\r\n   *  toLessThanHalfPi         P.cos, P.sin\r\n   *  toStringBinary           P.toBinary, P.toHexadecimal, P.toOctal\r\n   *  truncate                 intPow\r\n   *\r\n   *  Throws:                  P.logarithm, P.precision, P.toFraction, checkInt32, getLn10, getPi,\r\n   *                           naturalLogarithm, config, parseOther, random, Decimal\r\n   */\r\n\r\n\r\n  function digitsToString(d) {\r\n    var i, k, ws,\r\n      indexOfLastWord = d.length - 1,\r\n      str = '',\r\n      w = d[0];\r\n\r\n    if (indexOfLastWord > 0) {\r\n      str += w;\r\n      for (i = 1; i < indexOfLastWord; i++) {\r\n        ws = d[i] + '';\r\n        k = LOG_BASE - ws.length;\r\n        if (k) str += getZeroString(k);\r\n        str += ws;\r\n      }\r\n\r\n      w = d[i];\r\n      ws = w + '';\r\n      k = LOG_BASE - ws.length;\r\n      if (k) str += getZeroString(k);\r\n    } else if (w === 0) {\r\n      return '0';\r\n    }\r\n\r\n    // Remove trailing zeros of last w.\r\n    for (; w % 10 === 0;) w /= 10;\r\n\r\n    return str + w;\r\n  }\r\n\r\n\r\n  function checkInt32(i, min, max) {\r\n    if (i !== ~~i || i < min || i > max) {\r\n      throw Error(invalidArgument + i);\r\n    }\r\n  }\r\n\r\n\r\n  /*\r\n   * Check 5 rounding digits if `repeating` is null, 4 otherwise.\r\n   * `repeating == null` if caller is `log` or `pow`,\r\n   * `repeating != null` if caller is `naturalLogarithm` or `naturalExponential`.\r\n   */\r\n  function checkRoundingDigits(d, i, rm, repeating) {\r\n    var di, k, r, rd;\r\n\r\n    // Get the length of the first word of the array d.\r\n    for (k = d[0]; k >= 10; k /= 10) --i;\r\n\r\n    // Is the rounding digit in the first word of d?\r\n    if (--i < 0) {\r\n      i += LOG_BASE;\r\n      di = 0;\r\n    } else {\r\n      di = Math.ceil((i + 1) / LOG_BASE);\r\n      i %= LOG_BASE;\r\n    }\r\n\r\n    // i is the index (0 - 6) of the rounding digit.\r\n    // E.g. if within the word 3487563 the first rounding digit is 5,\r\n    // then i = 4, k = 1000, rd = 3487563 % 1000 = 563\r\n    k = mathpow(10, LOG_BASE - i);\r\n    rd = d[di] % k | 0;\r\n\r\n    if (repeating == null) {\r\n      if (i < 3) {\r\n        if (i == 0) rd = rd / 100 | 0;\r\n        else if (i == 1) rd = rd / 10 | 0;\r\n        r = rm < 4 && rd == 99999 || rm > 3 && rd == 49999 || rd == 50000 || rd == 0;\r\n      } else {\r\n        r = (rm < 4 && rd + 1 == k || rm > 3 && rd + 1 == k / 2) &&\r\n          (d[di + 1] / k / 100 | 0) == mathpow(10, i - 2) - 1 ||\r\n            (rd == k / 2 || rd == 0) && (d[di + 1] / k / 100 | 0) == 0;\r\n      }\r\n    } else {\r\n      if (i < 4) {\r\n        if (i == 0) rd = rd / 1000 | 0;\r\n        else if (i == 1) rd = rd / 100 | 0;\r\n        else if (i == 2) rd = rd / 10 | 0;\r\n        r = (repeating || rm < 4) && rd == 9999 || !repeating && rm > 3 && rd == 4999;\r\n      } else {\r\n        r = ((repeating || rm < 4) && rd + 1 == k ||\r\n        (!repeating && rm > 3) && rd + 1 == k / 2) &&\r\n          (d[di + 1] / k / 1000 | 0) == mathpow(10, i - 3) - 1;\r\n      }\r\n    }\r\n\r\n    return r;\r\n  }\r\n\r\n\r\n  // Convert string of `baseIn` to an array of numbers of `baseOut`.\r\n  // Eg. convertBase('255', 10, 16) returns [15, 15].\r\n  // Eg. convertBase('ff', 16, 10) returns [2, 5, 5].\r\n  function convertBase(str, baseIn, baseOut) {\r\n    var j,\r\n      arr = [0],\r\n      arrL,\r\n      i = 0,\r\n      strL = str.length;\r\n\r\n    for (; i < strL;) {\r\n      for (arrL = arr.length; arrL--;) arr[arrL] *= baseIn;\r\n      arr[0] += NUMERALS.indexOf(str.charAt(i++));\r\n      for (j = 0; j < arr.length; j++) {\r\n        if (arr[j] > baseOut - 1) {\r\n          if (arr[j + 1] === void 0) arr[j + 1] = 0;\r\n          arr[j + 1] += arr[j] / baseOut | 0;\r\n          arr[j] %= baseOut;\r\n        }\r\n      }\r\n    }\r\n\r\n    return arr.reverse();\r\n  }\r\n\r\n\r\n  /*\r\n   * cos(x) = 1 - x^2/2! + x^4/4! - ...\r\n   * |x| < pi/2\r\n   *\r\n   */\r\n  function cosine(Ctor, x) {\r\n    var k, len, y;\r\n\r\n    if (x.isZero()) return x;\r\n\r\n    // Argument reduction: cos(4x) = 8*(cos^4(x) - cos^2(x)) + 1\r\n    // i.e. cos(x) = 8*(cos^4(x/4) - cos^2(x/4)) + 1\r\n\r\n    // Estimate the optimum number of times to use the argument reduction.\r\n    len = x.d.length;\r\n    if (len < 32) {\r\n      k = Math.ceil(len / 3);\r\n      y = (1 / tinyPow(4, k)).toString();\r\n    } else {\r\n      k = 16;\r\n      y = '2.3283064365386962890625e-10';\r\n    }\r\n\r\n    Ctor.precision += k;\r\n\r\n    x = taylorSeries(Ctor, 1, x.times(y), new Ctor(1));\r\n\r\n    // Reverse argument reduction\r\n    for (var i = k; i--;) {\r\n      var cos2x = x.times(x);\r\n      x = cos2x.times(cos2x).minus(cos2x).times(8).plus(1);\r\n    }\r\n\r\n    Ctor.precision -= k;\r\n\r\n    return x;\r\n  }\r\n\r\n\r\n  /*\r\n   * Perform division in the specified base.\r\n   */\r\n  var divide = (function () {\r\n\r\n    // Assumes non-zero x and k, and hence non-zero result.\r\n    function multiplyInteger(x, k, base) {\r\n      var temp,\r\n        carry = 0,\r\n        i = x.length;\r\n\r\n      for (x = x.slice(); i--;) {\r\n        temp = x[i] * k + carry;\r\n        x[i] = temp % base | 0;\r\n        carry = temp / base | 0;\r\n      }\r\n\r\n      if (carry) x.unshift(carry);\r\n\r\n      return x;\r\n    }\r\n\r\n    function compare(a, b, aL, bL) {\r\n      var i, r;\r\n\r\n      if (aL != bL) {\r\n        r = aL > bL ? 1 : -1;\r\n      } else {\r\n        for (i = r = 0; i < aL; i++) {\r\n          if (a[i] != b[i]) {\r\n            r = a[i] > b[i] ? 1 : -1;\r\n            break;\r\n          }\r\n        }\r\n      }\r\n\r\n      return r;\r\n    }\r\n\r\n    function subtract(a, b, aL, base) {\r\n      var i = 0;\r\n\r\n      // Subtract b from a.\r\n      for (; aL--;) {\r\n        a[aL] -= i;\r\n        i = a[aL] < b[aL] ? 1 : 0;\r\n        a[aL] = i * base + a[aL] - b[aL];\r\n      }\r\n\r\n      // Remove leading zeros.\r\n      for (; !a[0] && a.length > 1;) a.shift();\r\n    }\r\n\r\n    return function (x, y, pr, rm, dp, base) {\r\n      var cmp, e, i, k, logBase, more, prod, prodL, q, qd, rem, remL, rem0, sd, t, xi, xL, yd0,\r\n        yL, yz,\r\n        Ctor = x.constructor,\r\n        sign = x.s == y.s ? 1 : -1,\r\n        xd = x.d,\r\n        yd = y.d;\r\n\r\n      // Either NaN, Infinity or 0?\r\n      if (!xd || !xd[0] || !yd || !yd[0]) {\r\n\r\n        return new Ctor(// Return NaN if either NaN, or both Infinity or 0.\r\n          !x.s || !y.s || (xd ? yd && xd[0] == yd[0] : !yd) ? NaN :\r\n\r\n          // Return ±0 if x is 0 or y is ±Infinity, or return ±Infinity as y is 0.\r\n          xd && xd[0] == 0 || !yd ? sign * 0 : sign / 0);\r\n      }\r\n\r\n      if (base) {\r\n        logBase = 1;\r\n        e = x.e - y.e;\r\n      } else {\r\n        base = BASE;\r\n        logBase = LOG_BASE;\r\n        e = mathfloor(x.e / logBase) - mathfloor(y.e / logBase);\r\n      }\r\n\r\n      yL = yd.length;\r\n      xL = xd.length;\r\n      q = new Ctor(sign);\r\n      qd = q.d = [];\r\n\r\n      // Result exponent may be one less than e.\r\n      // The digit array of a Decimal from toStringBinary may have trailing zeros.\r\n      for (i = 0; yd[i] == (xd[i] || 0); i++);\r\n\r\n      if (yd[i] > (xd[i] || 0)) e--;\r\n\r\n      if (pr == null) {\r\n        sd = pr = Ctor.precision;\r\n        rm = Ctor.rounding;\r\n      } else if (dp) {\r\n        sd = pr + (x.e - y.e) + 1;\r\n      } else {\r\n        sd = pr;\r\n      }\r\n\r\n      if (sd < 0) {\r\n        qd.push(1);\r\n        more = true;\r\n      } else {\r\n\r\n        // Convert precision in number of base 10 digits to base 1e7 digits.\r\n        sd = sd / logBase + 2 | 0;\r\n        i = 0;\r\n\r\n        // divisor < 1e7\r\n        if (yL == 1) {\r\n          k = 0;\r\n          yd = yd[0];\r\n          sd++;\r\n\r\n          // k is the carry.\r\n          for (; (i < xL || k) && sd--; i++) {\r\n            t = k * base + (xd[i] || 0);\r\n            qd[i] = t / yd | 0;\r\n            k = t % yd | 0;\r\n          }\r\n\r\n          more = k || i < xL;\r\n\r\n        // divisor >= 1e7\r\n        } else {\r\n\r\n          // Normalise xd and yd so highest order digit of yd is >= base/2\r\n          k = base / (yd[0] + 1) | 0;\r\n\r\n          if (k > 1) {\r\n            yd = multiplyInteger(yd, k, base);\r\n            xd = multiplyInteger(xd, k, base);\r\n            yL = yd.length;\r\n            xL = xd.length;\r\n          }\r\n\r\n          xi = yL;\r\n          rem = xd.slice(0, yL);\r\n          remL = rem.length;\r\n\r\n          // Add zeros to make remainder as long as divisor.\r\n          for (; remL < yL;) rem[remL++] = 0;\r\n\r\n          yz = yd.slice();\r\n          yz.unshift(0);\r\n          yd0 = yd[0];\r\n\r\n          if (yd[1] >= base / 2) ++yd0;\r\n\r\n          do {\r\n            k = 0;\r\n\r\n            // Compare divisor and remainder.\r\n            cmp = compare(yd, rem, yL, remL);\r\n\r\n            // If divisor < remainder.\r\n            if (cmp < 0) {\r\n\r\n              // Calculate trial digit, k.\r\n              rem0 = rem[0];\r\n              if (yL != remL) rem0 = rem0 * base + (rem[1] || 0);\r\n\r\n              // k will be how many times the divisor goes into the current remainder.\r\n              k = rem0 / yd0 | 0;\r\n\r\n              //  Algorithm:\r\n              //  1. product = divisor * trial digit (k)\r\n              //  2. if product > remainder: product -= divisor, k--\r\n              //  3. remainder -= product\r\n              //  4. if product was < remainder at 2:\r\n              //    5. compare new remainder and divisor\r\n              //    6. If remainder > divisor: remainder -= divisor, k++\r\n\r\n              if (k > 1) {\r\n                if (k >= base) k = base - 1;\r\n\r\n                // product = divisor * trial digit.\r\n                prod = multiplyInteger(yd, k, base);\r\n                prodL = prod.length;\r\n                remL = rem.length;\r\n\r\n                // Compare product and remainder.\r\n                cmp = compare(prod, rem, prodL, remL);\r\n\r\n                // product > remainder.\r\n                if (cmp == 1) {\r\n                  k--;\r\n\r\n                  // Subtract divisor from product.\r\n                  subtract(prod, yL < prodL ? yz : yd, prodL, base);\r\n                }\r\n              } else {\r\n\r\n                // cmp is -1.\r\n                // If k is 0, there is no need to compare yd and rem again below, so change cmp to 1\r\n                // to avoid it. If k is 1 there is a need to compare yd and rem again below.\r\n                if (k == 0) cmp = k = 1;\r\n                prod = yd.slice();\r\n              }\r\n\r\n              prodL = prod.length;\r\n              if (prodL < remL) prod.unshift(0);\r\n\r\n              // Subtract product from remainder.\r\n              subtract(rem, prod, remL, base);\r\n\r\n              // If product was < previous remainder.\r\n              if (cmp == -1) {\r\n                remL = rem.length;\r\n\r\n                // Compare divisor and new remainder.\r\n                cmp = compare(yd, rem, yL, remL);\r\n\r\n                // If divisor < new remainder, subtract divisor from remainder.\r\n                if (cmp < 1) {\r\n                  k++;\r\n\r\n                  // Subtract divisor from remainder.\r\n                  subtract(rem, yL < remL ? yz : yd, remL, base);\r\n                }\r\n              }\r\n\r\n              remL = rem.length;\r\n            } else if (cmp === 0) {\r\n              k++;\r\n              rem = [0];\r\n            }    // if cmp === 1, k will be 0\r\n\r\n            // Add the next digit, k, to the result array.\r\n            qd[i++] = k;\r\n\r\n            // Update the remainder.\r\n            if (cmp && rem[0]) {\r\n              rem[remL++] = xd[xi] || 0;\r\n            } else {\r\n              rem = [xd[xi]];\r\n              remL = 1;\r\n            }\r\n\r\n          } while ((xi++ < xL || rem[0] !== void 0) && sd--);\r\n\r\n          more = rem[0] !== void 0;\r\n        }\r\n\r\n        // Leading zero?\r\n        if (!qd[0]) qd.shift();\r\n      }\r\n\r\n      // logBase is 1 when divide is being used for base conversion.\r\n      if (logBase == 1) {\r\n        q.e = e;\r\n        inexact = more;\r\n      } else {\r\n\r\n        // To calculate q.e, first get the number of digits of qd[0].\r\n        for (i = 1, k = qd[0]; k >= 10; k /= 10) i++;\r\n        q.e = i + e * logBase - 1;\r\n\r\n        finalise(q, dp ? pr + q.e + 1 : pr, rm, more);\r\n      }\r\n\r\n      return q;\r\n    };\r\n  })();\r\n\r\n\r\n  /*\r\n   * Round `x` to `sd` significant digits using rounding mode `rm`.\r\n   * Check for over/under-flow.\r\n   */\r\n   function finalise(x, sd, rm, isTruncated) {\r\n    var digits, i, j, k, rd, roundUp, w, xd, xdi,\r\n      Ctor = x.constructor;\r\n\r\n    // Don't round if sd is null or undefined.\r\n    out: if (sd != null) {\r\n      xd = x.d;\r\n\r\n      // Infinity/NaN.\r\n      if (!xd) return x;\r\n\r\n      // rd: the rounding digit, i.e. the digit after the digit that may be rounded up.\r\n      // w: the word of xd containing rd, a base 1e7 number.\r\n      // xdi: the index of w within xd.\r\n      // digits: the number of digits of w.\r\n      // i: what would be the index of rd within w if all the numbers were 7 digits long (i.e. if\r\n      // they had leading zeros)\r\n      // j: if > 0, the actual index of rd within w (if < 0, rd is a leading zero).\r\n\r\n      // Get the length of the first word of the digits array xd.\r\n      for (digits = 1, k = xd[0]; k >= 10; k /= 10) digits++;\r\n      i = sd - digits;\r\n\r\n      // Is the rounding digit in the first word of xd?\r\n      if (i < 0) {\r\n        i += LOG_BASE;\r\n        j = sd;\r\n        w = xd[xdi = 0];\r\n\r\n        // Get the rounding digit at index j of w.\r\n        rd = w / mathpow(10, digits - j - 1) % 10 | 0;\r\n      } else {\r\n        xdi = Math.ceil((i + 1) / LOG_BASE);\r\n        k = xd.length;\r\n        if (xdi >= k) {\r\n          if (isTruncated) {\r\n\r\n            // Needed by `naturalExponential`, `naturalLogarithm` and `squareRoot`.\r\n            for (; k++ <= xdi;) xd.push(0);\r\n            w = rd = 0;\r\n            digits = 1;\r\n            i %= LOG_BASE;\r\n            j = i - LOG_BASE + 1;\r\n          } else {\r\n            break out;\r\n          }\r\n        } else {\r\n          w = k = xd[xdi];\r\n\r\n          // Get the number of digits of w.\r\n          for (digits = 1; k >= 10; k /= 10) digits++;\r\n\r\n          // Get the index of rd within w.\r\n          i %= LOG_BASE;\r\n\r\n          // Get the index of rd within w, adjusted for leading zeros.\r\n          // The number of leading zeros of w is given by LOG_BASE - digits.\r\n          j = i - LOG_BASE + digits;\r\n\r\n          // Get the rounding digit at index j of w.\r\n          rd = j < 0 ? 0 : w / mathpow(10, digits - j - 1) % 10 | 0;\r\n        }\r\n      }\r\n\r\n      // Are there any non-zero digits after the rounding digit?\r\n      isTruncated = isTruncated || sd < 0 ||\r\n        xd[xdi + 1] !== void 0 || (j < 0 ? w : w % mathpow(10, digits - j - 1));\r\n\r\n      // The expression `w % mathpow(10, digits - j - 1)` returns all the digits of w to the right\r\n      // of the digit at (left-to-right) index j, e.g. if w is 908714 and j is 2, the expression\r\n      // will give 714.\r\n\r\n      roundUp = rm < 4\r\n        ? (rd || isTruncated) && (rm == 0 || rm == (x.s < 0 ? 3 : 2))\r\n        : rd > 5 || rd == 5 && (rm == 4 || isTruncated || rm == 6 &&\r\n\r\n          // Check whether the digit to the left of the rounding digit is odd.\r\n          ((i > 0 ? j > 0 ? w / mathpow(10, digits - j) : 0 : xd[xdi - 1]) % 10) & 1 ||\r\n            rm == (x.s < 0 ? 8 : 7));\r\n\r\n      if (sd < 1 || !xd[0]) {\r\n        xd.length = 0;\r\n        if (roundUp) {\r\n\r\n          // Convert sd to decimal places.\r\n          sd -= x.e + 1;\r\n\r\n          // 1, 0.1, 0.01, 0.001, 0.0001 etc.\r\n          xd[0] = mathpow(10, (LOG_BASE - sd % LOG_BASE) % LOG_BASE);\r\n          x.e = -sd || 0;\r\n        } else {\r\n\r\n          // Zero.\r\n          xd[0] = x.e = 0;\r\n        }\r\n\r\n        return x;\r\n      }\r\n\r\n      // Remove excess digits.\r\n      if (i == 0) {\r\n        xd.length = xdi;\r\n        k = 1;\r\n        xdi--;\r\n      } else {\r\n        xd.length = xdi + 1;\r\n        k = mathpow(10, LOG_BASE - i);\r\n\r\n        // E.g. 56700 becomes 56000 if 7 is the rounding digit.\r\n        // j > 0 means i > number of leading zeros of w.\r\n        xd[xdi] = j > 0 ? (w / mathpow(10, digits - j) % mathpow(10, j) | 0) * k : 0;\r\n      }\r\n\r\n      if (roundUp) {\r\n        for (;;) {\r\n\r\n          // Is the digit to be rounded up in the first word of xd?\r\n          if (xdi == 0) {\r\n\r\n            // i will be the length of xd[0] before k is added.\r\n            for (i = 1, j = xd[0]; j >= 10; j /= 10) i++;\r\n            j = xd[0] += k;\r\n            for (k = 1; j >= 10; j /= 10) k++;\r\n\r\n            // if i != k the length has increased.\r\n            if (i != k) {\r\n              x.e++;\r\n              if (xd[0] == BASE) xd[0] = 1;\r\n            }\r\n\r\n            break;\r\n          } else {\r\n            xd[xdi] += k;\r\n            if (xd[xdi] != BASE) break;\r\n            xd[xdi--] = 0;\r\n            k = 1;\r\n          }\r\n        }\r\n      }\r\n\r\n      // Remove trailing zeros.\r\n      for (i = xd.length; xd[--i] === 0;) xd.pop();\r\n    }\r\n\r\n    if (external) {\r\n\r\n      // Overflow?\r\n      if (x.e > Ctor.maxE) {\r\n\r\n        // Infinity.\r\n        x.d = null;\r\n        x.e = NaN;\r\n\r\n      // Underflow?\r\n      } else if (x.e < Ctor.minE) {\r\n\r\n        // Zero.\r\n        x.e = 0;\r\n        x.d = [0];\r\n        // Ctor.underflow = true;\r\n      } // else Ctor.underflow = false;\r\n    }\r\n\r\n    return x;\r\n  }\r\n\r\n\r\n  function finiteToString(x, isExp, sd) {\r\n    if (!x.isFinite()) return nonFiniteToString(x);\r\n    var k,\r\n      e = x.e,\r\n      str = digitsToString(x.d),\r\n      len = str.length;\r\n\r\n    if (isExp) {\r\n      if (sd && (k = sd - len) > 0) {\r\n        str = str.charAt(0) + '.' + str.slice(1) + getZeroString(k);\r\n      } else if (len > 1) {\r\n        str = str.charAt(0) + '.' + str.slice(1);\r\n      }\r\n\r\n      str = str + (x.e < 0 ? 'e' : 'e+') + x.e;\r\n    } else if (e < 0) {\r\n      str = '0.' + getZeroString(-e - 1) + str;\r\n      if (sd && (k = sd - len) > 0) str += getZeroString(k);\r\n    } else if (e >= len) {\r\n      str += getZeroString(e + 1 - len);\r\n      if (sd && (k = sd - e - 1) > 0) str = str + '.' + getZeroString(k);\r\n    } else {\r\n      if ((k = e + 1) < len) str = str.slice(0, k) + '.' + str.slice(k);\r\n      if (sd && (k = sd - len) > 0) {\r\n        if (e + 1 === len) str += '.';\r\n        str += getZeroString(k);\r\n      }\r\n    }\r\n\r\n    return str;\r\n  }\r\n\r\n\r\n  // Calculate the base 10 exponent from the base 1e7 exponent.\r\n  function getBase10Exponent(digits, e) {\r\n    var w = digits[0];\r\n\r\n    // Add the number of digits of the first word of the digits array.\r\n    for ( e *= LOG_BASE; w >= 10; w /= 10) e++;\r\n    return e;\r\n  }\r\n\r\n\r\n  function getLn10(Ctor, sd, pr) {\r\n    if (sd > LN10_PRECISION) {\r\n\r\n      // Reset global state in case the exception is caught.\r\n      external = true;\r\n      if (pr) Ctor.precision = pr;\r\n      throw Error(precisionLimitExceeded);\r\n    }\r\n    return finalise(new Ctor(LN10), sd, 1, true);\r\n  }\r\n\r\n\r\n  function getPi(Ctor, sd, rm) {\r\n    if (sd > PI_PRECISION) throw Error(precisionLimitExceeded);\r\n    return finalise(new Ctor(PI), sd, rm, true);\r\n  }\r\n\r\n\r\n  function getPrecision(digits) {\r\n    var w = digits.length - 1,\r\n      len = w * LOG_BASE + 1;\r\n\r\n    w = digits[w];\r\n\r\n    // If non-zero...\r\n    if (w) {\r\n\r\n      // Subtract the number of trailing zeros of the last word.\r\n      for (; w % 10 == 0; w /= 10) len--;\r\n\r\n      // Add the number of digits of the first word.\r\n      for (w = digits[0]; w >= 10; w /= 10) len++;\r\n    }\r\n\r\n    return len;\r\n  }\r\n\r\n\r\n  function getZeroString(k) {\r\n    var zs = '';\r\n    for (; k--;) zs += '0';\r\n    return zs;\r\n  }\r\n\r\n\r\n  /*\r\n   * Return a new Decimal whose value is the value of Decimal `x` to the power `n`, where `n` is an\r\n   * integer of type number.\r\n   *\r\n   * Implements 'exponentiation by squaring'. Called by `pow` and `parseOther`.\r\n   *\r\n   */\r\n  function intPow(Ctor, x, n, pr) {\r\n    var isTruncated,\r\n      r = new Ctor(1),\r\n\r\n      // Max n of 9007199254740991 takes 53 loop iterations.\r\n      // Maximum digits array length; leaves [28, 34] guard digits.\r\n      k = Math.ceil(pr / LOG_BASE + 4);\r\n\r\n    external = false;\r\n\r\n    for (;;) {\r\n      if (n % 2) {\r\n        r = r.times(x);\r\n        if (truncate(r.d, k)) isTruncated = true;\r\n      }\r\n\r\n      n = mathfloor(n / 2);\r\n      if (n === 0) {\r\n\r\n        // To ensure correct rounding when r.d is truncated, increment the last word if it is zero.\r\n        n = r.d.length - 1;\r\n        if (isTruncated && r.d[n] === 0) ++r.d[n];\r\n        break;\r\n      }\r\n\r\n      x = x.times(x);\r\n      truncate(x.d, k);\r\n    }\r\n\r\n    external = true;\r\n\r\n    return r;\r\n  }\r\n\r\n\r\n  function isOdd(n) {\r\n    return n.d[n.d.length - 1] & 1;\r\n  }\r\n\r\n\r\n  /*\r\n   * Handle `max` (`n` is -1) and `min` (`n` is 1).\r\n   */\r\n  function maxOrMin(Ctor, args, n) {\r\n    var k, y,\r\n      x = new Ctor(args[0]),\r\n      i = 0;\r\n\r\n    for (; ++i < args.length;) {\r\n      y = new Ctor(args[i]);\r\n\r\n      // NaN?\r\n      if (!y.s) {\r\n        x = y;\r\n        break;\r\n      }\r\n\r\n      k = x.cmp(y);\r\n\r\n      if (k === n || k === 0 && x.s === n) {\r\n        x = y;\r\n      }\r\n    }\r\n\r\n    return x;\r\n  }\r\n\r\n\r\n  /*\r\n   * Return a new Decimal whose value is the natural exponential of `x` rounded to `sd` significant\r\n   * digits.\r\n   *\r\n   * Taylor/Maclaurin series.\r\n   *\r\n   * exp(x) = x^0/0! + x^1/1! + x^2/2! + x^3/3! + ...\r\n   *\r\n   * Argument reduction:\r\n   *   Repeat x = x / 32, k += 5, until |x| < 0.1\r\n   *   exp(x) = exp(x / 2^k)^(2^k)\r\n   *\r\n   * Previously, the argument was initially reduced by\r\n   * exp(x) = exp(r) * 10^k  where r = x - k * ln10, k = floor(x / ln10)\r\n   * to first put r in the range [0, ln10], before dividing by 32 until |x| < 0.1, but this was\r\n   * found to be slower than just dividing repeatedly by 32 as above.\r\n   *\r\n   * Max integer argument: exp('20723265836946413') = 6.3e+9000000000000000\r\n   * Min integer argument: exp('-20723265836946411') = 1.2e-9000000000000000\r\n   * (Math object integer min/max: Math.exp(709) = 8.2e+307, Math.exp(-745) = 5e-324)\r\n   *\r\n   *  exp(Infinity)  = Infinity\r\n   *  exp(-Infinity) = 0\r\n   *  exp(NaN)       = NaN\r\n   *  exp(±0)        = 1\r\n   *\r\n   *  exp(x) is non-terminating for any finite, non-zero x.\r\n   *\r\n   *  The result will always be correctly rounded.\r\n   *\r\n   */\r\n  function naturalExponential(x, sd) {\r\n    var denominator, guard, j, pow, sum, t, wpr,\r\n      rep = 0,\r\n      i = 0,\r\n      k = 0,\r\n      Ctor = x.constructor,\r\n      rm = Ctor.rounding,\r\n      pr = Ctor.precision;\r\n\r\n    // 0/NaN/Infinity?\r\n    if (!x.d || !x.d[0] || x.e > 17) {\r\n\r\n      return new Ctor(x.d\r\n        ? !x.d[0] ? 1 : x.s < 0 ? 0 : 1 / 0\r\n        : x.s ? x.s < 0 ? 0 : x : 0 / 0);\r\n    }\r\n\r\n    if (sd == null) {\r\n      external = false;\r\n      wpr = pr;\r\n    } else {\r\n      wpr = sd;\r\n    }\r\n\r\n    t = new Ctor(0.03125);\r\n\r\n    // while abs(x) >= 0.1\r\n    while (x.e > -2) {\r\n\r\n      // x = x / 2^5\r\n      x = x.times(t);\r\n      k += 5;\r\n    }\r\n\r\n    // Use 2 * log10(2^k) + 5 (empirically derived) to estimate the increase in precision\r\n    // necessary to ensure the first 4 rounding digits are correct.\r\n    guard = Math.log(mathpow(2, k)) / Math.LN10 * 2 + 5 | 0;\r\n    wpr += guard;\r\n    denominator = pow = sum = new Ctor(1);\r\n    Ctor.precision = wpr;\r\n\r\n    for (;;) {\r\n      pow = finalise(pow.times(x), wpr, 1);\r\n      denominator = denominator.times(++i);\r\n      t = sum.plus(divide(pow, denominator, wpr, 1));\r\n\r\n      if (digitsToString(t.d).slice(0, wpr) === digitsToString(sum.d).slice(0, wpr)) {\r\n        j = k;\r\n        while (j--) sum = finalise(sum.times(sum), wpr, 1);\r\n\r\n        // Check to see if the first 4 rounding digits are [49]999.\r\n        // If so, repeat the summation with a higher precision, otherwise\r\n        // e.g. with precision: 18, rounding: 1\r\n        // exp(18.404272462595034083567793919843761) = 98372560.1229999999 (should be 98372560.123)\r\n        // `wpr - guard` is the index of first rounding digit.\r\n        if (sd == null) {\r\n\r\n          if (rep < 3 && checkRoundingDigits(sum.d, wpr - guard, rm, rep)) {\r\n            Ctor.precision = wpr += 10;\r\n            denominator = pow = t = new Ctor(1);\r\n            i = 0;\r\n            rep++;\r\n          } else {\r\n            return finalise(sum, Ctor.precision = pr, rm, external = true);\r\n          }\r\n        } else {\r\n          Ctor.precision = pr;\r\n          return sum;\r\n        }\r\n      }\r\n\r\n      sum = t;\r\n    }\r\n  }\r\n\r\n\r\n  /*\r\n   * Return a new Decimal whose value is the natural logarithm of `x` rounded to `sd` significant\r\n   * digits.\r\n   *\r\n   *  ln(-n)        = NaN\r\n   *  ln(0)         = -Infinity\r\n   *  ln(-0)        = -Infinity\r\n   *  ln(1)         = 0\r\n   *  ln(Infinity)  = Infinity\r\n   *  ln(-Infinity) = NaN\r\n   *  ln(NaN)       = NaN\r\n   *\r\n   *  ln(n) (n != 1) is non-terminating.\r\n   *\r\n   */\r\n  function naturalLogarithm(y, sd) {\r\n    var c, c0, denominator, e, numerator, rep, sum, t, wpr, x1, x2,\r\n      n = 1,\r\n      guard = 10,\r\n      x = y,\r\n      xd = x.d,\r\n      Ctor = x.constructor,\r\n      rm = Ctor.rounding,\r\n      pr = Ctor.precision;\r\n\r\n    // Is x negative or Infinity, NaN, 0 or 1?\r\n    if (x.s < 0 || !xd || !xd[0] || !x.e && xd[0] == 1 && xd.length == 1) {\r\n      return new Ctor(xd && !xd[0] ? -1 / 0 : x.s != 1 ? NaN : xd ? 0 : x);\r\n    }\r\n\r\n    if (sd == null) {\r\n      external = false;\r\n      wpr = pr;\r\n    } else {\r\n      wpr = sd;\r\n    }\r\n\r\n    Ctor.precision = wpr += guard;\r\n    c = digitsToString(xd);\r\n    c0 = c.charAt(0);\r\n\r\n    if (Math.abs(e = x.e) < 1.5e15) {\r\n\r\n      // Argument reduction.\r\n      // The series converges faster the closer the argument is to 1, so using\r\n      // ln(a^b) = b * ln(a),   ln(a) = ln(a^b) / b\r\n      // multiply the argument by itself until the leading digits of the significand are 7, 8, 9,\r\n      // 10, 11, 12 or 13, recording the number of multiplications so the sum of the series can\r\n      // later be divided by this number, then separate out the power of 10 using\r\n      // ln(a*10^b) = ln(a) + b*ln(10).\r\n\r\n      // max n is 21 (gives 0.9, 1.0 or 1.1) (9e15 / 21 = 4.2e14).\r\n      //while (c0 < 9 && c0 != 1 || c0 == 1 && c.charAt(1) > 1) {\r\n      // max n is 6 (gives 0.7 - 1.3)\r\n      while (c0 < 7 && c0 != 1 || c0 == 1 && c.charAt(1) > 3) {\r\n        x = x.times(y);\r\n        c = digitsToString(x.d);\r\n        c0 = c.charAt(0);\r\n        n++;\r\n      }\r\n\r\n      e = x.e;\r\n\r\n      if (c0 > 1) {\r\n        x = new Ctor('0.' + c);\r\n        e++;\r\n      } else {\r\n        x = new Ctor(c0 + '.' + c.slice(1));\r\n      }\r\n    } else {\r\n\r\n      // The argument reduction method above may result in overflow if the argument y is a massive\r\n      // number with exponent >= 1500000000000000 (9e15 / 6 = 1.5e15), so instead recall this\r\n      // function using ln(x*10^e) = ln(x) + e*ln(10).\r\n      t = getLn10(Ctor, wpr + 2, pr).times(e + '');\r\n      x = naturalLogarithm(new Ctor(c0 + '.' + c.slice(1)), wpr - guard).plus(t);\r\n      Ctor.precision = pr;\r\n\r\n      return sd == null ? finalise(x, pr, rm, external = true) : x;\r\n    }\r\n\r\n    // x1 is x reduced to a value near 1.\r\n    x1 = x;\r\n\r\n    // Taylor series.\r\n    // ln(y) = ln((1 + x)/(1 - x)) = 2(x + x^3/3 + x^5/5 + x^7/7 + ...)\r\n    // where x = (y - 1)/(y + 1)    (|x| < 1)\r\n    sum = numerator = x = divide(x.minus(1), x.plus(1), wpr, 1);\r\n    x2 = finalise(x.times(x), wpr, 1);\r\n    denominator = 3;\r\n\r\n    for (;;) {\r\n      numerator = finalise(numerator.times(x2), wpr, 1);\r\n      t = sum.plus(divide(numerator, new Ctor(denominator), wpr, 1));\r\n\r\n      if (digitsToString(t.d).slice(0, wpr) === digitsToString(sum.d).slice(0, wpr)) {\r\n        sum = sum.times(2);\r\n\r\n        // Reverse the argument reduction. Check that e is not 0 because, besides preventing an\r\n        // unnecessary calculation, -0 + 0 = +0 and to ensure correct rounding -0 needs to stay -0.\r\n        if (e !== 0) sum = sum.plus(getLn10(Ctor, wpr + 2, pr).times(e + ''));\r\n        sum = divide(sum, new Ctor(n), wpr, 1);\r\n\r\n        // Is rm > 3 and the first 4 rounding digits 4999, or rm < 4 (or the summation has\r\n        // been repeated previously) and the first 4 rounding digits 9999?\r\n        // If so, restart the summation with a higher precision, otherwise\r\n        // e.g. with precision: 12, rounding: 1\r\n        // ln(135520028.6126091714265381533) = 18.7246299999 when it should be 18.72463.\r\n        // `wpr - guard` is the index of first rounding digit.\r\n        if (sd == null) {\r\n          if (checkRoundingDigits(sum.d, wpr - guard, rm, rep)) {\r\n            Ctor.precision = wpr += guard;\r\n            t = numerator = x = divide(x1.minus(1), x1.plus(1), wpr, 1);\r\n            x2 = finalise(x.times(x), wpr, 1);\r\n            denominator = rep = 1;\r\n          } else {\r\n            return finalise(sum, Ctor.precision = pr, rm, external = true);\r\n          }\r\n        } else {\r\n          Ctor.precision = pr;\r\n          return sum;\r\n        }\r\n      }\r\n\r\n      sum = t;\r\n      denominator += 2;\r\n    }\r\n  }\r\n\r\n\r\n  // ±Infinity, NaN.\r\n  function nonFiniteToString(x) {\r\n    // Unsigned.\r\n    return String(x.s * x.s / 0);\r\n  }\r\n\r\n\r\n  /*\r\n   * Parse the value of a new Decimal `x` from string `str`.\r\n   */\r\n  function parseDecimal(x, str) {\r\n    var e, i, len;\r\n\r\n    // TODO BigInt str: no need to check for decimal point, exponential form or leading zeros.\r\n\r\n    // Decimal point?\r\n    if ((e = str.indexOf('.')) > -1) str = str.replace('.', '');\r\n\r\n    // Exponential form?\r\n    if ((i = str.search(/e/i)) > 0) {\r\n\r\n      // Determine exponent.\r\n      if (e < 0) e = i;\r\n      e += +str.slice(i + 1);\r\n      str = str.substring(0, i);\r\n    } else if (e < 0) {\r\n\r\n      // Integer.\r\n      e = str.length;\r\n    }\r\n\r\n    // Determine leading zeros.\r\n    for (i = 0; str.charCodeAt(i) === 48; i++);\r\n\r\n    // Determine trailing zeros.\r\n    for (len = str.length; str.charCodeAt(len - 1) === 48; --len);\r\n    str = str.slice(i, len);\r\n\r\n    if (str) {\r\n      len -= i;\r\n      x.e = e = e - i - 1;\r\n      x.d = [];\r\n\r\n      // Transform base\r\n\r\n      // e is the base 10 exponent.\r\n      // i is where to slice str to get the first word of the digits array.\r\n      i = (e + 1) % LOG_BASE;\r\n      if (e < 0) i += LOG_BASE;\r\n\r\n      if (i < len) {\r\n        if (i) x.d.push(+str.slice(0, i));\r\n        for (len -= LOG_BASE; i < len;) x.d.push(+str.slice(i, i += LOG_BASE));\r\n        str = str.slice(i);\r\n        i = LOG_BASE - str.length;\r\n      } else {\r\n        i -= len;\r\n      }\r\n\r\n      for (; i--;) str += '0';\r\n      x.d.push(+str);\r\n\r\n      if (external) {\r\n\r\n        // Overflow?\r\n        if (x.e > x.constructor.maxE) {\r\n\r\n          // Infinity.\r\n          x.d = null;\r\n          x.e = NaN;\r\n\r\n        // Underflow?\r\n        } else if (x.e < x.constructor.minE) {\r\n\r\n          // Zero.\r\n          x.e = 0;\r\n          x.d = [0];\r\n          // x.constructor.underflow = true;\r\n        } // else x.constructor.underflow = false;\r\n      }\r\n    } else {\r\n\r\n      // Zero.\r\n      x.e = 0;\r\n      x.d = [0];\r\n    }\r\n\r\n    return x;\r\n  }\r\n\r\n\r\n  /*\r\n   * Parse the value of a new Decimal `x` from a string `str`, which is not a decimal value.\r\n   */\r\n  function parseOther(x, str) {\r\n    var base, Ctor, divisor, i, isFloat, len, p, xd, xe;\r\n\r\n    if (str.indexOf('_') > -1) {\r\n      str = str.replace(/(\\d)_(?=\\d)/g, '$1');\r\n      if (isDecimal.test(str)) return parseDecimal(x, str);\r\n    } else if (str === 'Infinity' || str === 'NaN') {\r\n      if (!+str) x.s = NaN;\r\n      x.e = NaN;\r\n      x.d = null;\r\n      return x;\r\n    }\r\n\r\n    if (isHex.test(str))  {\r\n      base = 16;\r\n      str = str.toLowerCase();\r\n    } else if (isBinary.test(str))  {\r\n      base = 2;\r\n    } else if (isOctal.test(str))  {\r\n      base = 8;\r\n    } else {\r\n      throw Error(invalidArgument + str);\r\n    }\r\n\r\n    // Is there a binary exponent part?\r\n    i = str.search(/p/i);\r\n\r\n    if (i > 0) {\r\n      p = +str.slice(i + 1);\r\n      str = str.substring(2, i);\r\n    } else {\r\n      str = str.slice(2);\r\n    }\r\n\r\n    // Convert `str` as an integer then divide the result by `base` raised to a power such that the\r\n    // fraction part will be restored.\r\n    i = str.indexOf('.');\r\n    isFloat = i >= 0;\r\n    Ctor = x.constructor;\r\n\r\n    if (isFloat) {\r\n      str = str.replace('.', '');\r\n      len = str.length;\r\n      i = len - i;\r\n\r\n      // log[10](16) = 1.2041... , log[10](88) = 1.9444....\r\n      divisor = intPow(Ctor, new Ctor(base), i, i * 2);\r\n    }\r\n\r\n    xd = convertBase(str, base, BASE);\r\n    xe = xd.length - 1;\r\n\r\n    // Remove trailing zeros.\r\n    for (i = xe; xd[i] === 0; --i) xd.pop();\r\n    if (i < 0) return new Ctor(x.s * 0);\r\n    x.e = getBase10Exponent(xd, xe);\r\n    x.d = xd;\r\n    external = false;\r\n\r\n    // At what precision to perform the division to ensure exact conversion?\r\n    // maxDecimalIntegerPartDigitCount = ceil(log[10](b) * otherBaseIntegerPartDigitCount)\r\n    // log[10](2) = 0.30103, log[10](8) = 0.90309, log[10](16) = 1.20412\r\n    // E.g. ceil(1.2 * 3) = 4, so up to 4 decimal digits are needed to represent 3 hex int digits.\r\n    // maxDecimalFractionPartDigitCount = {Hex:4|Oct:3|Bin:1} * otherBaseFractionPartDigitCount\r\n    // Therefore using 4 * the number of digits of str will always be enough.\r\n    if (isFloat) x = divide(x, divisor, len * 4);\r\n\r\n    // Multiply by the binary exponent part if present.\r\n    if (p) x = x.times(Math.abs(p) < 54 ? mathpow(2, p) : Decimal.pow(2, p));\r\n    external = true;\r\n\r\n    return x;\r\n  }\r\n\r\n\r\n  /*\r\n   * sin(x) = x - x^3/3! + x^5/5! - ...\r\n   * |x| < pi/2\r\n   *\r\n   */\r\n  function sine(Ctor, x) {\r\n    var k,\r\n      len = x.d.length;\r\n\r\n    if (len < 3) {\r\n      return x.isZero() ? x : taylorSeries(Ctor, 2, x, x);\r\n    }\r\n\r\n    // Argument reduction: sin(5x) = 16*sin^5(x) - 20*sin^3(x) + 5*sin(x)\r\n    // i.e. sin(x) = 16*sin^5(x/5) - 20*sin^3(x/5) + 5*sin(x/5)\r\n    // and  sin(x) = sin(x/5)(5 + sin^2(x/5)(16sin^2(x/5) - 20))\r\n\r\n    // Estimate the optimum number of times to use the argument reduction.\r\n    k = 1.4 * Math.sqrt(len);\r\n    k = k > 16 ? 16 : k | 0;\r\n\r\n    x = x.times(1 / tinyPow(5, k));\r\n    x = taylorSeries(Ctor, 2, x, x);\r\n\r\n    // Reverse argument reduction\r\n    var sin2_x,\r\n      d5 = new Ctor(5),\r\n      d16 = new Ctor(16),\r\n      d20 = new Ctor(20);\r\n    for (; k--;) {\r\n      sin2_x = x.times(x);\r\n      x = x.times(d5.plus(sin2_x.times(d16.times(sin2_x).minus(d20))));\r\n    }\r\n\r\n    return x;\r\n  }\r\n\r\n\r\n  // Calculate Taylor series for `cos`, `cosh`, `sin` and `sinh`.\r\n  function taylorSeries(Ctor, n, x, y, isHyperbolic) {\r\n    var j, t, u, x2,\r\n      i = 1,\r\n      pr = Ctor.precision,\r\n      k = Math.ceil(pr / LOG_BASE);\r\n\r\n    external = false;\r\n    x2 = x.times(x);\r\n    u = new Ctor(y);\r\n\r\n    for (;;) {\r\n      t = divide(u.times(x2), new Ctor(n++ * n++), pr, 1);\r\n      u = isHyperbolic ? y.plus(t) : y.minus(t);\r\n      y = divide(t.times(x2), new Ctor(n++ * n++), pr, 1);\r\n      t = u.plus(y);\r\n\r\n      if (t.d[k] !== void 0) {\r\n        for (j = k; t.d[j] === u.d[j] && j--;);\r\n        if (j == -1) break;\r\n      }\r\n\r\n      j = u;\r\n      u = y;\r\n      y = t;\r\n      t = j;\r\n      i++;\r\n    }\r\n\r\n    external = true;\r\n    t.d.length = k + 1;\r\n\r\n    return t;\r\n  }\r\n\r\n\r\n  // Exponent e must be positive and non-zero.\r\n  function tinyPow(b, e) {\r\n    var n = b;\r\n    while (--e) n *= b;\r\n    return n;\r\n  }\r\n\r\n\r\n  // Return the absolute value of `x` reduced to less than or equal to half pi.\r\n  function toLessThanHalfPi(Ctor, x) {\r\n    var t,\r\n      isNeg = x.s < 0,\r\n      pi = getPi(Ctor, Ctor.precision, 1),\r\n      halfPi = pi.times(0.5);\r\n\r\n    x = x.abs();\r\n\r\n    if (x.lte(halfPi)) {\r\n      quadrant = isNeg ? 4 : 1;\r\n      return x;\r\n    }\r\n\r\n    t = x.divToInt(pi);\r\n\r\n    if (t.isZero()) {\r\n      quadrant = isNeg ? 3 : 2;\r\n    } else {\r\n      x = x.minus(t.times(pi));\r\n\r\n      // 0 <= x < pi\r\n      if (x.lte(halfPi)) {\r\n        quadrant = isOdd(t) ? (isNeg ? 2 : 3) : (isNeg ? 4 : 1);\r\n        return x;\r\n      }\r\n\r\n      quadrant = isOdd(t) ? (isNeg ? 1 : 4) : (isNeg ? 3 : 2);\r\n    }\r\n\r\n    return x.minus(pi).abs();\r\n  }\r\n\r\n\r\n  /*\r\n   * Return the value of Decimal `x` as a string in base `baseOut`.\r\n   *\r\n   * If the optional `sd` argument is present include a binary exponent suffix.\r\n   */\r\n  function toStringBinary(x, baseOut, sd, rm) {\r\n    var base, e, i, k, len, roundUp, str, xd, y,\r\n      Ctor = x.constructor,\r\n      isExp = sd !== void 0;\r\n\r\n    if (isExp) {\r\n      checkInt32(sd, 1, MAX_DIGITS);\r\n      if (rm === void 0) rm = Ctor.rounding;\r\n      else checkInt32(rm, 0, 8);\r\n    } else {\r\n      sd = Ctor.precision;\r\n      rm = Ctor.rounding;\r\n    }\r\n\r\n    if (!x.isFinite()) {\r\n      str = nonFiniteToString(x);\r\n    } else {\r\n      str = finiteToString(x);\r\n      i = str.indexOf('.');\r\n\r\n      // Use exponential notation according to `toExpPos` and `toExpNeg`? No, but if required:\r\n      // maxBinaryExponent = floor((decimalExponent + 1) * log[2](10))\r\n      // minBinaryExponent = floor(decimalExponent * log[2](10))\r\n      // log[2](10) = 3.321928094887362347870319429489390175864\r\n\r\n      if (isExp) {\r\n        base = 2;\r\n        if (baseOut == 16) {\r\n          sd = sd * 4 - 3;\r\n        } else if (baseOut == 8) {\r\n          sd = sd * 3 - 2;\r\n        }\r\n      } else {\r\n        base = baseOut;\r\n      }\r\n\r\n      // Convert the number as an integer then divide the result by its base raised to a power such\r\n      // that the fraction part will be restored.\r\n\r\n      // Non-integer.\r\n      if (i >= 0) {\r\n        str = str.replace('.', '');\r\n        y = new Ctor(1);\r\n        y.e = str.length - i;\r\n        y.d = convertBase(finiteToString(y), 10, base);\r\n        y.e = y.d.length;\r\n      }\r\n\r\n      xd = convertBase(str, 10, base);\r\n      e = len = xd.length;\r\n\r\n      // Remove trailing zeros.\r\n      for (; xd[--len] == 0;) xd.pop();\r\n\r\n      if (!xd[0]) {\r\n        str = isExp ? '0p+0' : '0';\r\n      } else {\r\n        if (i < 0) {\r\n          e--;\r\n        } else {\r\n          x = new Ctor(x);\r\n          x.d = xd;\r\n          x.e = e;\r\n          x = divide(x, y, sd, rm, 0, base);\r\n          xd = x.d;\r\n          e = x.e;\r\n          roundUp = inexact;\r\n        }\r\n\r\n        // The rounding digit, i.e. the digit after the digit that may be rounded up.\r\n        i = xd[sd];\r\n        k = base / 2;\r\n        roundUp = roundUp || xd[sd + 1] !== void 0;\r\n\r\n        roundUp = rm < 4\r\n          ? (i !== void 0 || roundUp) && (rm === 0 || rm === (x.s < 0 ? 3 : 2))\r\n          : i > k || i === k && (rm === 4 || roundUp || rm === 6 && xd[sd - 1] & 1 ||\r\n            rm === (x.s < 0 ? 8 : 7));\r\n\r\n        xd.length = sd;\r\n\r\n        if (roundUp) {\r\n\r\n          // Rounding up may mean the previous digit has to be rounded up and so on.\r\n          for (; ++xd[--sd] > base - 1;) {\r\n            xd[sd] = 0;\r\n            if (!sd) {\r\n              ++e;\r\n              xd.unshift(1);\r\n            }\r\n          }\r\n        }\r\n\r\n        // Determine trailing zeros.\r\n        for (len = xd.length; !xd[len - 1]; --len);\r\n\r\n        // E.g. [4, 11, 15] becomes 4bf.\r\n        for (i = 0, str = ''; i < len; i++) str += NUMERALS.charAt(xd[i]);\r\n\r\n        // Add binary exponent suffix?\r\n        if (isExp) {\r\n          if (len > 1) {\r\n            if (baseOut == 16 || baseOut == 8) {\r\n              i = baseOut == 16 ? 4 : 3;\r\n              for (--len; len % i; len++) str += '0';\r\n              xd = convertBase(str, base, baseOut);\r\n              for (len = xd.length; !xd[len - 1]; --len);\r\n\r\n              // xd[0] will always be be 1\r\n              for (i = 1, str = '1.'; i < len; i++) str += NUMERALS.charAt(xd[i]);\r\n            } else {\r\n              str = str.charAt(0) + '.' + str.slice(1);\r\n            }\r\n          }\r\n\r\n          str =  str + (e < 0 ? 'p' : 'p+') + e;\r\n        } else if (e < 0) {\r\n          for (; ++e;) str = '0' + str;\r\n          str = '0.' + str;\r\n        } else {\r\n          if (++e > len) for (e -= len; e-- ;) str += '0';\r\n          else if (e < len) str = str.slice(0, e) + '.' + str.slice(e);\r\n        }\r\n      }\r\n\r\n      str = (baseOut == 16 ? '0x' : baseOut == 2 ? '0b' : baseOut == 8 ? '0o' : '') + str;\r\n    }\r\n\r\n    return x.s < 0 ? '-' + str : str;\r\n  }\r\n\r\n\r\n  // Does not strip trailing zeros.\r\n  function truncate(arr, len) {\r\n    if (arr.length > len) {\r\n      arr.length = len;\r\n      return true;\r\n    }\r\n  }\r\n\r\n\r\n  // Decimal methods\r\n\r\n\r\n  /*\r\n   *  abs\r\n   *  acos\r\n   *  acosh\r\n   *  add\r\n   *  asin\r\n   *  asinh\r\n   *  atan\r\n   *  atanh\r\n   *  atan2\r\n   *  cbrt\r\n   *  ceil\r\n   *  clamp\r\n   *  clone\r\n   *  config\r\n   *  cos\r\n   *  cosh\r\n   *  div\r\n   *  exp\r\n   *  floor\r\n   *  hypot\r\n   *  ln\r\n   *  log\r\n   *  log2\r\n   *  log10\r\n   *  max\r\n   *  min\r\n   *  mod\r\n   *  mul\r\n   *  pow\r\n   *  random\r\n   *  round\r\n   *  set\r\n   *  sign\r\n   *  sin\r\n   *  sinh\r\n   *  sqrt\r\n   *  sub\r\n   *  sum\r\n   *  tan\r\n   *  tanh\r\n   *  trunc\r\n   */\r\n\r\n\r\n  /*\r\n   * Return a new Decimal whose value is the absolute value of `x`.\r\n   *\r\n   * x {number|string|bigint|Decimal}\r\n   *\r\n   */\r\n  function abs(x) {\r\n    return new this(x).abs();\r\n  }\r\n\r\n\r\n  /*\r\n   * Return a new Decimal whose value is the arccosine in radians of `x`.\r\n   *\r\n   * x {number|string|bigint|Decimal}\r\n   *\r\n   */\r\n  function acos(x) {\r\n    return new this(x).acos();\r\n  }\r\n\r\n\r\n  /*\r\n   * Return a new Decimal whose value is the inverse of the hyperbolic cosine of `x`, rounded to\r\n   * `precision` significant digits using rounding mode `rounding`.\r\n   *\r\n   * x {number|string|bigint|Decimal} A value in radians.\r\n   *\r\n   */\r\n  function acosh(x) {\r\n    return new this(x).acosh();\r\n  }\r\n\r\n\r\n  /*\r\n   * Return a new Decimal whose value is the sum of `x` and `y`, rounded to `precision` significant\r\n   * digits using rounding mode `rounding`.\r\n   *\r\n   * x {number|string|bigint|Decimal}\r\n   * y {number|string|bigint|Decimal}\r\n   *\r\n   */\r\n  function add(x, y) {\r\n    return new this(x).plus(y);\r\n  }\r\n\r\n\r\n  /*\r\n   * Return a new Decimal whose value is the arcsine in radians of `x`, rounded to `precision`\r\n   * significant digits using rounding mode `rounding`.\r\n   *\r\n   * x {number|string|bigint|Decimal}\r\n   *\r\n   */\r\n  function asin(x) {\r\n    return new this(x).asin();\r\n  }\r\n\r\n\r\n  /*\r\n   * Return a new Decimal whose value is the inverse of the hyperbolic sine of `x`, rounded to\r\n   * `precision` significant digits using rounding mode `rounding`.\r\n   *\r\n   * x {number|string|bigint|Decimal} A value in radians.\r\n   *\r\n   */\r\n  function asinh(x) {\r\n    return new this(x).asinh();\r\n  }\r\n\r\n\r\n  /*\r\n   * Return a new Decimal whose value is the arctangent in radians of `x`, rounded to `precision`\r\n   * significant digits using rounding mode `rounding`.\r\n   *\r\n   * x {number|string|bigint|Decimal}\r\n   *\r\n   */\r\n  function atan(x) {\r\n    return new this(x).atan();\r\n  }\r\n\r\n\r\n  /*\r\n   * Return a new Decimal whose value is the inverse of the hyperbolic tangent of `x`, rounded to\r\n   * `precision` significant digits using rounding mode `rounding`.\r\n   *\r\n   * x {number|string|bigint|Decimal} A value in radians.\r\n   *\r\n   */\r\n  function atanh(x) {\r\n    return new this(x).atanh();\r\n  }\r\n\r\n\r\n  /*\r\n   * Return a new Decimal whose value is the arctangent in radians of `y/x` in the range -pi to pi\r\n   * (inclusive), rounded to `precision` significant digits using rounding mode `rounding`.\r\n   *\r\n   * Domain: [-Infinity, Infinity]\r\n   * Range: [-pi, pi]\r\n   *\r\n   * y {number|string|bigint|Decimal} The y-coordinate.\r\n   * x {number|string|bigint|Decimal} The x-coordinate.\r\n   *\r\n   * atan2(±0, -0)               = ±pi\r\n   * atan2(±0, +0)               = ±0\r\n   * atan2(±0, -x)               = ±pi for x > 0\r\n   * atan2(±0, x)                = ±0 for x > 0\r\n   * atan2(-y, ±0)               = -pi/2 for y > 0\r\n   * atan2(y, ±0)                = pi/2 for y > 0\r\n   * atan2(±y, -Infinity)        = ±pi for finite y > 0\r\n   * atan2(±y, +Infinity)        = ±0 for finite y > 0\r\n   * atan2(±Infinity, x)         = ±pi/2 for finite x\r\n   * atan2(±Infinity, -Infinity) = ±3*pi/4\r\n   * atan2(±Infinity, +Infinity) = ±pi/4\r\n   * atan2(NaN, x) = NaN\r\n   * atan2(y, NaN) = NaN\r\n   *\r\n   */\r\n  function atan2(y, x) {\r\n    y = new this(y);\r\n    x = new this(x);\r\n    var r,\r\n      pr = this.precision,\r\n      rm = this.rounding,\r\n      wpr = pr + 4;\r\n\r\n    // Either NaN\r\n    if (!y.s || !x.s) {\r\n      r = new this(NaN);\r\n\r\n    // Both ±Infinity\r\n    } else if (!y.d && !x.d) {\r\n      r = getPi(this, wpr, 1).times(x.s > 0 ? 0.25 : 0.75);\r\n      r.s = y.s;\r\n\r\n    // x is ±Infinity or y is ±0\r\n    } else if (!x.d || y.isZero()) {\r\n      r = x.s < 0 ? getPi(this, pr, rm) : new this(0);\r\n      r.s = y.s;\r\n\r\n    // y is ±Infinity or x is ±0\r\n    } else if (!y.d || x.isZero()) {\r\n      r = getPi(this, wpr, 1).times(0.5);\r\n      r.s = y.s;\r\n\r\n    // Both non-zero and finite\r\n    } else if (x.s < 0) {\r\n      this.precision = wpr;\r\n      this.rounding = 1;\r\n      r = this.atan(divide(y, x, wpr, 1));\r\n      x = getPi(this, wpr, 1);\r\n      this.precision = pr;\r\n      this.rounding = rm;\r\n      r = y.s < 0 ? r.minus(x) : r.plus(x);\r\n    } else {\r\n      r = this.atan(divide(y, x, wpr, 1));\r\n    }\r\n\r\n    return r;\r\n  }\r\n\r\n\r\n  /*\r\n   * Return a new Decimal whose value is the cube root of `x`, rounded to `precision` significant\r\n   * digits using rounding mode `rounding`.\r\n   *\r\n   * x {number|string|bigint|Decimal}\r\n   *\r\n   */\r\n  function cbrt(x) {\r\n    return new this(x).cbrt();\r\n  }\r\n\r\n\r\n  /*\r\n   * Return a new Decimal whose value is `x` rounded to an integer using `ROUND_CEIL`.\r\n   *\r\n   * x {number|string|bigint|Decimal}\r\n   *\r\n   */\r\n  function ceil(x) {\r\n    return finalise(x = new this(x), x.e + 1, 2);\r\n  }\r\n\r\n\r\n  /*\r\n   * Return a new Decimal whose value is `x` clamped to the range delineated by `min` and `max`.\r\n   *\r\n   * x {number|string|bigint|Decimal}\r\n   * min {number|string|bigint|Decimal}\r\n   * max {number|string|bigint|Decimal}\r\n   *\r\n   */\r\n  function clamp(x, min, max) {\r\n    return new this(x).clamp(min, max);\r\n  }\r\n\r\n\r\n  /*\r\n   * Configure global settings for a Decimal constructor.\r\n   *\r\n   * `obj` is an object with one or more of the following properties,\r\n   *\r\n   *   precision  {number}\r\n   *   rounding   {number}\r\n   *   toExpNeg   {number}\r\n   *   toExpPos   {number}\r\n   *   maxE       {number}\r\n   *   minE       {number}\r\n   *   modulo     {number}\r\n   *   crypto     {boolean|number}\r\n   *   defaults   {true}\r\n   *\r\n   * E.g. Decimal.config({ precision: 20, rounding: 4 })\r\n   *\r\n   */\r\n  function config(obj) {\r\n    if (!obj || typeof obj !== 'object') throw Error(decimalError + 'Object expected');\r\n    var i, p, v,\r\n      useDefaults = obj.defaults === true,\r\n      ps = [\r\n        'precision', 1, MAX_DIGITS,\r\n        'rounding', 0, 8,\r\n        'toExpNeg', -EXP_LIMIT, 0,\r\n        'toExpPos', 0, EXP_LIMIT,\r\n        'maxE', 0, EXP_LIMIT,\r\n        'minE', -EXP_LIMIT, 0,\r\n        'modulo', 0, 9\r\n      ];\r\n\r\n    for (i = 0; i < ps.length; i += 3) {\r\n      if (p = ps[i], useDefaults) this[p] = DEFAULTS[p];\r\n      if ((v = obj[p]) !== void 0) {\r\n        if (mathfloor(v) === v && v >= ps[i + 1] && v <= ps[i + 2]) this[p] = v;\r\n        else throw Error(invalidArgument + p + ': ' + v);\r\n      }\r\n    }\r\n\r\n    if (p = 'crypto', useDefaults) this[p] = DEFAULTS[p];\r\n    if ((v = obj[p]) !== void 0) {\r\n      if (v === true || v === false || v === 0 || v === 1) {\r\n        if (v) {\r\n          if (typeof crypto != 'undefined' && crypto &&\r\n            (crypto.getRandomValues || crypto.randomBytes)) {\r\n            this[p] = true;\r\n          } else {\r\n            throw Error(cryptoUnavailable);\r\n          }\r\n        } else {\r\n          this[p] = false;\r\n        }\r\n      } else {\r\n        throw Error(invalidArgument + p + ': ' + v);\r\n      }\r\n    }\r\n\r\n    return this;\r\n  }\r\n\r\n\r\n  /*\r\n   * Return a new Decimal whose value is the cosine of `x`, rounded to `precision` significant\r\n   * digits using rounding mode `rounding`.\r\n   *\r\n   * x {number|string|bigint|Decimal} A value in radians.\r\n   *\r\n   */\r\n  function cos(x) {\r\n    return new this(x).cos();\r\n  }\r\n\r\n\r\n  /*\r\n   * Return a new Decimal whose value is the hyperbolic cosine of `x`, rounded to precision\r\n   * significant digits using rounding mode `rounding`.\r\n   *\r\n   * x {number|string|bigint|Decimal} A value in radians.\r\n   *\r\n   */\r\n  function cosh(x) {\r\n    return new this(x).cosh();\r\n  }\r\n\r\n\r\n  /*\r\n   * Create and return a Decimal constructor with the same configuration properties as this Decimal\r\n   * constructor.\r\n   *\r\n   */\r\n  function clone(obj) {\r\n    var i, p, ps;\r\n\r\n    /*\r\n     * The Decimal constructor and exported function.\r\n     * Return a new Decimal instance.\r\n     *\r\n     * v {number|string|bigint|Decimal} A numeric value.\r\n     *\r\n     */\r\n    function Decimal(v) {\r\n      var e, i, t,\r\n        x = this;\r\n\r\n      // Decimal called without new.\r\n      if (!(x instanceof Decimal)) return new Decimal(v);\r\n\r\n      // Retain a reference to this Decimal constructor, and shadow Decimal.prototype.constructor\r\n      // which points to Object.\r\n      x.constructor = Decimal;\r\n\r\n      if (isDecimalInstance(v)) {\r\n        x.s = v.s;\r\n\r\n        if (external) {\r\n          if (!v.d || v.e > Decimal.maxE) {\r\n\r\n            // Infinity.\r\n            x.e = NaN;\r\n            x.d = null;\r\n          } else if (v.e < Decimal.minE) {\r\n\r\n            // Zero.\r\n            x.e = 0;\r\n            x.d = [0];\r\n          } else {\r\n            x.e = v.e;\r\n            x.d = v.d.slice();\r\n          }\r\n        } else {\r\n          x.e = v.e;\r\n          x.d = v.d ? v.d.slice() : v.d;\r\n        }\r\n\r\n        return;\r\n      }\r\n\r\n      t = typeof v;\r\n\r\n      if (t === 'number') {\r\n        if (v === 0) {\r\n          x.s = 1 / v < 0 ? -1 : 1;\r\n          x.e = 0;\r\n          x.d = [0];\r\n          return;\r\n        }\r\n\r\n        if (v < 0) {\r\n          v = -v;\r\n          x.s = -1;\r\n        } else {\r\n          x.s = 1;\r\n        }\r\n\r\n        // Fast path for small integers.\r\n        if (v === ~~v && v < 1e7) {\r\n          for (e = 0, i = v; i >= 10; i /= 10) e++;\r\n\r\n          if (external) {\r\n            if (e > Decimal.maxE) {\r\n              x.e = NaN;\r\n              x.d = null;\r\n            } else if (e < Decimal.minE) {\r\n              x.e = 0;\r\n              x.d = [0];\r\n            } else {\r\n              x.e = e;\r\n              x.d = [v];\r\n            }\r\n          } else {\r\n            x.e = e;\r\n            x.d = [v];\r\n          }\r\n\r\n          return;\r\n        }\r\n\r\n        // Infinity or NaN?\r\n        if (v * 0 !== 0) {\r\n          if (!v) x.s = NaN;\r\n          x.e = NaN;\r\n          x.d = null;\r\n          return;\r\n        }\r\n\r\n        return parseDecimal(x, v.toString());\r\n      }\r\n\r\n      if (t === 'string') {\r\n        if ((i = v.charCodeAt(0)) === 45) {  // minus sign\r\n          v = v.slice(1);\r\n          x.s = -1;\r\n        } else {\r\n          if (i === 43) v = v.slice(1);  // plus sign\r\n          x.s = 1;\r\n        }\r\n\r\n        return isDecimal.test(v) ? parseDecimal(x, v) : parseOther(x, v);\r\n      }\r\n\r\n      if (t === 'bigint') {\r\n        if (v < 0) {\r\n          v = -v;\r\n          x.s = -1;\r\n        } else {\r\n          x.s = 1;\r\n        }\r\n\r\n        return parseDecimal(x, v.toString());\r\n      }\r\n\r\n      throw Error(invalidArgument + v);\r\n    }\r\n\r\n    Decimal.prototype = P;\r\n\r\n    Decimal.ROUND_UP = 0;\r\n    Decimal.ROUND_DOWN = 1;\r\n    Decimal.ROUND_CEIL = 2;\r\n    Decimal.ROUND_FLOOR = 3;\r\n    Decimal.ROUND_HALF_UP = 4;\r\n    Decimal.ROUND_HALF_DOWN = 5;\r\n    Decimal.ROUND_HALF_EVEN = 6;\r\n    Decimal.ROUND_HALF_CEIL = 7;\r\n    Decimal.ROUND_HALF_FLOOR = 8;\r\n    Decimal.EUCLID = 9;\r\n\r\n    Decimal.config = Decimal.set = config;\r\n    Decimal.clone = clone;\r\n    Decimal.isDecimal = isDecimalInstance;\r\n\r\n    Decimal.abs = abs;\r\n    Decimal.acos = acos;\r\n    Decimal.acosh = acosh;        // ES6\r\n    Decimal.add = add;\r\n    Decimal.asin = asin;\r\n    Decimal.asinh = asinh;        // ES6\r\n    Decimal.atan = atan;\r\n    Decimal.atanh = atanh;        // ES6\r\n    Decimal.atan2 = atan2;\r\n    Decimal.cbrt = cbrt;          // ES6\r\n    Decimal.ceil = ceil;\r\n    Decimal.clamp = clamp;\r\n    Decimal.cos = cos;\r\n    Decimal.cosh = cosh;          // ES6\r\n    Decimal.div = div;\r\n    Decimal.exp = exp;\r\n    Decimal.floor = floor;\r\n    Decimal.hypot = hypot;        // ES6\r\n    Decimal.ln = ln;\r\n    Decimal.log = log;\r\n    Decimal.log10 = log10;        // ES6\r\n    Decimal.log2 = log2;          // ES6\r\n    Decimal.max = max;\r\n    Decimal.min = min;\r\n    Decimal.mod = mod;\r\n    Decimal.mul = mul;\r\n    Decimal.pow = pow;\r\n    Decimal.random = random;\r\n    Decimal.round = round;\r\n    Decimal.sign = sign;          // ES6\r\n    Decimal.sin = sin;\r\n    Decimal.sinh = sinh;          // ES6\r\n    Decimal.sqrt = sqrt;\r\n    Decimal.sub = sub;\r\n    Decimal.sum = sum;\r\n    Decimal.tan = tan;\r\n    Decimal.tanh = tanh;          // ES6\r\n    Decimal.trunc = trunc;        // ES6\r\n\r\n    if (obj === void 0) obj = {};\r\n    if (obj) {\r\n      if (obj.defaults !== true) {\r\n        ps = ['precision', 'rounding', 'toExpNeg', 'toExpPos', 'maxE', 'minE', 'modulo', 'crypto'];\r\n        for (i = 0; i < ps.length;) if (!obj.hasOwnProperty(p = ps[i++])) obj[p] = this[p];\r\n      }\r\n    }\r\n\r\n    Decimal.config(obj);\r\n\r\n    return Decimal;\r\n  }\r\n\r\n\r\n  /*\r\n   * Return a new Decimal whose value is `x` divided by `y`, rounded to `precision` significant\r\n   * digits using rounding mode `rounding`.\r\n   *\r\n   * x {number|string|bigint|Decimal}\r\n   * y {number|string|bigint|Decimal}\r\n   *\r\n   */\r\n  function div(x, y) {\r\n    return new this(x).div(y);\r\n  }\r\n\r\n\r\n  /*\r\n   * Return a new Decimal whose value is the natural exponential of `x`, rounded to `precision`\r\n   * significant digits using rounding mode `rounding`.\r\n   *\r\n   * x {number|string|bigint|Decimal} The power to which to raise the base of the natural log.\r\n   *\r\n   */\r\n  function exp(x) {\r\n    return new this(x).exp();\r\n  }\r\n\r\n\r\n  /*\r\n   * Return a new Decimal whose value is `x` round to an integer using `ROUND_FLOOR`.\r\n   *\r\n   * x {number|string|bigint|Decimal}\r\n   *\r\n   */\r\n  function floor(x) {\r\n    return finalise(x = new this(x), x.e + 1, 3);\r\n  }\r\n\r\n\r\n  /*\r\n   * Return a new Decimal whose value is the square root of the sum of the squares of the arguments,\r\n   * rounded to `precision` significant digits using rounding mode `rounding`.\r\n   *\r\n   * hypot(a, b, ...) = sqrt(a^2 + b^2 + ...)\r\n   *\r\n   * arguments {number|string|bigint|Decimal}\r\n   *\r\n   */\r\n  function hypot() {\r\n    var i, n,\r\n      t = new this(0);\r\n\r\n    external = false;\r\n\r\n    for (i = 0; i < arguments.length;) {\r\n      n = new this(arguments[i++]);\r\n      if (!n.d) {\r\n        if (n.s) {\r\n          external = true;\r\n          return new this(1 / 0);\r\n        }\r\n        t = n;\r\n      } else if (t.d) {\r\n        t = t.plus(n.times(n));\r\n      }\r\n    }\r\n\r\n    external = true;\r\n\r\n    return t.sqrt();\r\n  }\r\n\r\n\r\n  /*\r\n   * Return true if object is a Decimal instance (where Decimal is any Decimal constructor),\r\n   * otherwise return false.\r\n   *\r\n   */\r\n  function isDecimalInstance(obj) {\r\n    return obj instanceof Decimal || obj && obj.toStringTag === tag || false;\r\n  }\r\n\r\n\r\n  /*\r\n   * Return a new Decimal whose value is the natural logarithm of `x`, rounded to `precision`\r\n   * significant digits using rounding mode `rounding`.\r\n   *\r\n   * x {number|string|bigint|Decimal}\r\n   *\r\n   */\r\n  function ln(x) {\r\n    return new this(x).ln();\r\n  }\r\n\r\n\r\n  /*\r\n   * Return a new Decimal whose value is the log of `x` to the base `y`, or to base 10 if no base\r\n   * is specified, rounded to `precision` significant digits using rounding mode `rounding`.\r\n   *\r\n   * log[y](x)\r\n   *\r\n   * x {number|string|bigint|Decimal} The argument of the logarithm.\r\n   * y {number|string|bigint|Decimal} The base of the logarithm.\r\n   *\r\n   */\r\n  function log(x, y) {\r\n    return new this(x).log(y);\r\n  }\r\n\r\n\r\n  /*\r\n   * Return a new Decimal whose value is the base 2 logarithm of `x`, rounded to `precision`\r\n   * significant digits using rounding mode `rounding`.\r\n   *\r\n   * x {number|string|bigint|Decimal}\r\n   *\r\n   */\r\n  function log2(x) {\r\n    return new this(x).log(2);\r\n  }\r\n\r\n\r\n  /*\r\n   * Return a new Decimal whose value is the base 10 logarithm of `x`, rounded to `precision`\r\n   * significant digits using rounding mode `rounding`.\r\n   *\r\n   * x {number|string|bigint|Decimal}\r\n   *\r\n   */\r\n  function log10(x) {\r\n    return new this(x).log(10);\r\n  }\r\n\r\n\r\n  /*\r\n   * Return a new Decimal whose value is the maximum of the arguments.\r\n   *\r\n   * arguments {number|string|bigint|Decimal}\r\n   *\r\n   */\r\n  function max() {\r\n    return maxOrMin(this, arguments, -1);\r\n  }\r\n\r\n\r\n  /*\r\n   * Return a new Decimal whose value is the minimum of the arguments.\r\n   *\r\n   * arguments {number|string|bigint|Decimal}\r\n   *\r\n   */\r\n  function min() {\r\n    return maxOrMin(this, arguments, 1);\r\n  }\r\n\r\n\r\n  /*\r\n   * Return a new Decimal whose value is `x` modulo `y`, rounded to `precision` significant digits\r\n   * using rounding mode `rounding`.\r\n   *\r\n   * x {number|string|bigint|Decimal}\r\n   * y {number|string|bigint|Decimal}\r\n   *\r\n   */\r\n  function mod(x, y) {\r\n    return new this(x).mod(y);\r\n  }\r\n\r\n\r\n  /*\r\n   * Return a new Decimal whose value is `x` multiplied by `y`, rounded to `precision` significant\r\n   * digits using rounding mode `rounding`.\r\n   *\r\n   * x {number|string|bigint|Decimal}\r\n   * y {number|string|bigint|Decimal}\r\n   *\r\n   */\r\n  function mul(x, y) {\r\n    return new this(x).mul(y);\r\n  }\r\n\r\n\r\n  /*\r\n   * Return a new Decimal whose value is `x` raised to the power `y`, rounded to precision\r\n   * significant digits using rounding mode `rounding`.\r\n   *\r\n   * x {number|string|bigint|Decimal} The base.\r\n   * y {number|string|bigint|Decimal} The exponent.\r\n   *\r\n   */\r\n  function pow(x, y) {\r\n    return new this(x).pow(y);\r\n  }\r\n\r\n\r\n  /*\r\n   * Returns a new Decimal with a random value equal to or greater than 0 and less than 1, and with\r\n   * `sd`, or `Decimal.precision` if `sd` is omitted, significant digits (or less if trailing zeros\r\n   * are produced).\r\n   *\r\n   * [sd] {number} Significant digits. Integer, 0 to MAX_DIGITS inclusive.\r\n   *\r\n   */\r\n  function random(sd) {\r\n    var d, e, k, n,\r\n      i = 0,\r\n      r = new this(1),\r\n      rd = [];\r\n\r\n    if (sd === void 0) sd = this.precision;\r\n    else checkInt32(sd, 1, MAX_DIGITS);\r\n\r\n    k = Math.ceil(sd / LOG_BASE);\r\n\r\n    if (!this.crypto) {\r\n      for (; i < k;) rd[i++] = Math.random() * 1e7 | 0;\r\n\r\n    // Browsers supporting crypto.getRandomValues.\r\n    } else if (crypto.getRandomValues) {\r\n      d = crypto.getRandomValues(new Uint32Array(k));\r\n\r\n      for (; i < k;) {\r\n        n = d[i];\r\n\r\n        // 0 <= n < 4294967296\r\n        // Probability n >= 4.29e9, is 4967296 / 4294967296 = 0.00116 (1 in 865).\r\n        if (n >= 4.29e9) {\r\n          d[i] = crypto.getRandomValues(new Uint32Array(1))[0];\r\n        } else {\r\n\r\n          // 0 <= n <= 4289999999\r\n          // 0 <= (n % 1e7) <= 9999999\r\n          rd[i++] = n % 1e7;\r\n        }\r\n      }\r\n\r\n    // Node.js supporting crypto.randomBytes.\r\n    } else if (crypto.randomBytes) {\r\n\r\n      // buffer\r\n      d = crypto.randomBytes(k *= 4);\r\n\r\n      for (; i < k;) {\r\n\r\n        // 0 <= n < 2147483648\r\n        n = d[i] + (d[i + 1] << 8) + (d[i + 2] << 16) + ((d[i + 3] & 0x7f) << 24);\r\n\r\n        // Probability n >= 2.14e9, is 7483648 / 2147483648 = 0.0035 (1 in 286).\r\n        if (n >= 2.14e9) {\r\n          crypto.randomBytes(4).copy(d, i);\r\n        } else {\r\n\r\n          // 0 <= n <= 2139999999\r\n          // 0 <= (n % 1e7) <= 9999999\r\n          rd.push(n % 1e7);\r\n          i += 4;\r\n        }\r\n      }\r\n\r\n      i = k / 4;\r\n    } else {\r\n      throw Error(cryptoUnavailable);\r\n    }\r\n\r\n    k = rd[--i];\r\n    sd %= LOG_BASE;\r\n\r\n    // Convert trailing digits to zeros according to sd.\r\n    if (k && sd) {\r\n      n = mathpow(10, LOG_BASE - sd);\r\n      rd[i] = (k / n | 0) * n;\r\n    }\r\n\r\n    // Remove trailing words which are zero.\r\n    for (; rd[i] === 0; i--) rd.pop();\r\n\r\n    // Zero?\r\n    if (i < 0) {\r\n      e = 0;\r\n      rd = [0];\r\n    } else {\r\n      e = -1;\r\n\r\n      // Remove leading words which are zero and adjust exponent accordingly.\r\n      for (; rd[0] === 0; e -= LOG_BASE) rd.shift();\r\n\r\n      // Count the digits of the first word of rd to determine leading zeros.\r\n      for (k = 1, n = rd[0]; n >= 10; n /= 10) k++;\r\n\r\n      // Adjust the exponent for leading zeros of the first word of rd.\r\n      if (k < LOG_BASE) e -= LOG_BASE - k;\r\n    }\r\n\r\n    r.e = e;\r\n    r.d = rd;\r\n\r\n    return r;\r\n  }\r\n\r\n\r\n  /*\r\n   * Return a new Decimal whose value is `x` rounded to an integer using rounding mode `rounding`.\r\n   *\r\n   * To emulate `Math.round`, set rounding to 7 (ROUND_HALF_CEIL).\r\n   *\r\n   * x {number|string|bigint|Decimal}\r\n   *\r\n   */\r\n  function round(x) {\r\n    return finalise(x = new this(x), x.e + 1, this.rounding);\r\n  }\r\n\r\n\r\n  /*\r\n   * Return\r\n   *   1    if x > 0,\r\n   *  -1    if x < 0,\r\n   *   0    if x is 0,\r\n   *  -0    if x is -0,\r\n   *   NaN  otherwise\r\n   *\r\n   * x {number|string|bigint|Decimal}\r\n   *\r\n   */\r\n  function sign(x) {\r\n    x = new this(x);\r\n    return x.d ? (x.d[0] ? x.s : 0 * x.s) : x.s || NaN;\r\n  }\r\n\r\n\r\n  /*\r\n   * Return a new Decimal whose value is the sine of `x`, rounded to `precision` significant digits\r\n   * using rounding mode `rounding`.\r\n   *\r\n   * x {number|string|bigint|Decimal} A value in radians.\r\n   *\r\n   */\r\n  function sin(x) {\r\n    return new this(x).sin();\r\n  }\r\n\r\n\r\n  /*\r\n   * Return a new Decimal whose value is the hyperbolic sine of `x`, rounded to `precision`\r\n   * significant digits using rounding mode `rounding`.\r\n   *\r\n   * x {number|string|bigint|Decimal} A value in radians.\r\n   *\r\n   */\r\n  function sinh(x) {\r\n    return new this(x).sinh();\r\n  }\r\n\r\n\r\n  /*\r\n   * Return a new Decimal whose value is the square root of `x`, rounded to `precision` significant\r\n   * digits using rounding mode `rounding`.\r\n   *\r\n   * x {number|string|bigint|Decimal}\r\n   *\r\n   */\r\n  function sqrt(x) {\r\n    return new this(x).sqrt();\r\n  }\r\n\r\n\r\n  /*\r\n   * Return a new Decimal whose value is `x` minus `y`, rounded to `precision` significant digits\r\n   * using rounding mode `rounding`.\r\n   *\r\n   * x {number|string|bigint|Decimal}\r\n   * y {number|string|bigint|Decimal}\r\n   *\r\n   */\r\n  function sub(x, y) {\r\n    return new this(x).sub(y);\r\n  }\r\n\r\n\r\n  /*\r\n   * Return a new Decimal whose value is the sum of the arguments, rounded to `precision`\r\n   * significant digits using rounding mode `rounding`.\r\n   *\r\n   * Only the result is rounded, not the intermediate calculations.\r\n   *\r\n   * arguments {number|string|bigint|Decimal}\r\n   *\r\n   */\r\n  function sum() {\r\n    var i = 0,\r\n      args = arguments,\r\n      x = new this(args[i]);\r\n\r\n    external = false;\r\n    for (; x.s && ++i < args.length;) x = x.plus(args[i]);\r\n    external = true;\r\n\r\n    return finalise(x, this.precision, this.rounding);\r\n  }\r\n\r\n\r\n  /*\r\n   * Return a new Decimal whose value is the tangent of `x`, rounded to `precision` significant\r\n   * digits using rounding mode `rounding`.\r\n   *\r\n   * x {number|string|bigint|Decimal} A value in radians.\r\n   *\r\n   */\r\n  function tan(x) {\r\n    return new this(x).tan();\r\n  }\r\n\r\n\r\n  /*\r\n   * Return a new Decimal whose value is the hyperbolic tangent of `x`, rounded to `precision`\r\n   * significant digits using rounding mode `rounding`.\r\n   *\r\n   * x {number|string|bigint|Decimal} A value in radians.\r\n   *\r\n   */\r\n  function tanh(x) {\r\n    return new this(x).tanh();\r\n  }\r\n\r\n\r\n  /*\r\n   * Return a new Decimal whose value is `x` truncated to an integer.\r\n   *\r\n   * x {number|string|bigint|Decimal}\r\n   *\r\n   */\r\n  function trunc(x) {\r\n    return finalise(x = new this(x), x.e + 1, 1);\r\n  }\r\n\r\n\r\n  // Create and configure initial Decimal constructor.\r\n  Decimal = clone(DEFAULTS);\r\n  Decimal.prototype.constructor = Decimal;\r\n  Decimal['default'] = Decimal.Decimal = Decimal;\r\n\r\n  // Create the internal constants from their string values.\r\n  LN10 = new Decimal(LN10);\r\n  PI = new Decimal(PI);\r\n\r\n\r\n  // Export.\r\n\r\n\r\n  // AMD.\r\n  if (typeof define == 'function' && define.amd) {\r\n    define(function () {\r\n      return Decimal;\r\n    });\r\n\r\n  // Node and other environments that support module.exports.\r\n  } else if (typeof module != 'undefined' && module.exports) {\r\n    if (typeof Symbol == 'function' && typeof Symbol.iterator == 'symbol') {\r\n      P[Symbol['for']('nodejs.util.inspect.custom')] = P.toString;\r\n      P[Symbol.toStringTag] = 'Decimal';\r\n    }\r\n\r\n    module.exports = Decimal;\r\n\r\n  // Browser.\r\n  } else {\r\n    if (!globalScope) {\r\n      globalScope = typeof self != 'undefined' && self && self.self == self ? self : window;\r\n    }\r\n\r\n    noConflict = globalScope.Decimal;\r\n    Decimal.noConflict = function () {\r\n      globalScope.Decimal = noConflict;\r\n      return Decimal;\r\n    };\r\n\r\n    globalScope.Decimal = Decimal;\r\n  }\r\n})(this);\r\n","'use strict';\n\nexports.utils = require('./des/utils');\nexports.Cipher = require('./des/cipher');\nexports.DES = require('./des/des');\nexports.CBC = require('./des/cbc');\nexports.EDE = require('./des/ede');\n","'use strict';\n\nvar assert = require('minimalistic-assert');\nvar inherits = require('inherits');\n\nvar proto = {};\n\nfunction CBCState(iv) {\n  assert.equal(iv.length, 8, 'Invalid IV length');\n\n  this.iv = new Array(8);\n  for (var i = 0; i < this.iv.length; i++)\n    this.iv[i] = iv[i];\n}\n\nfunction instantiate(Base) {\n  function CBC(options) {\n    Base.call(this, options);\n    this._cbcInit();\n  }\n  inherits(CBC, Base);\n\n  var keys = Object.keys(proto);\n  for (var i = 0; i < keys.length; i++) {\n    var key = keys[i];\n    CBC.prototype[key] = proto[key];\n  }\n\n  CBC.create = function create(options) {\n    return new CBC(options);\n  };\n\n  return CBC;\n}\n\nexports.instantiate = instantiate;\n\nproto._cbcInit = function _cbcInit() {\n  var state = new CBCState(this.options.iv);\n  this._cbcState = state;\n};\n\nproto._update = function _update(inp, inOff, out, outOff) {\n  var state = this._cbcState;\n  var superProto = this.constructor.super_.prototype;\n\n  var iv = state.iv;\n  if (this.type === 'encrypt') {\n    for (var i = 0; i < this.blockSize; i++)\n      iv[i] ^= inp[inOff + i];\n\n    superProto._update.call(this, iv, 0, out, outOff);\n\n    for (var i = 0; i < this.blockSize; i++)\n      iv[i] = out[outOff + i];\n  } else {\n    superProto._update.call(this, inp, inOff, out, outOff);\n\n    for (var i = 0; i < this.blockSize; i++)\n      out[outOff + i] ^= iv[i];\n\n    for (var i = 0; i < this.blockSize; i++)\n      iv[i] = inp[inOff + i];\n  }\n};\n","'use strict';\n\nvar assert = require('minimalistic-assert');\n\nfunction Cipher(options) {\n  this.options = options;\n\n  this.type = this.options.type;\n  this.blockSize = 8;\n  this._init();\n\n  this.buffer = new Array(this.blockSize);\n  this.bufferOff = 0;\n  this.padding = options.padding !== false\n}\nmodule.exports = Cipher;\n\nCipher.prototype._init = function _init() {\n  // Might be overrided\n};\n\nCipher.prototype.update = function update(data) {\n  if (data.length === 0)\n    return [];\n\n  if (this.type === 'decrypt')\n    return this._updateDecrypt(data);\n  else\n    return this._updateEncrypt(data);\n};\n\nCipher.prototype._buffer = function _buffer(data, off) {\n  // Append data to buffer\n  var min = Math.min(this.buffer.length - this.bufferOff, data.length - off);\n  for (var i = 0; i < min; i++)\n    this.buffer[this.bufferOff + i] = data[off + i];\n  this.bufferOff += min;\n\n  // Shift next\n  return min;\n};\n\nCipher.prototype._flushBuffer = function _flushBuffer(out, off) {\n  this._update(this.buffer, 0, out, off);\n  this.bufferOff = 0;\n  return this.blockSize;\n};\n\nCipher.prototype._updateEncrypt = function _updateEncrypt(data) {\n  var inputOff = 0;\n  var outputOff = 0;\n\n  var count = ((this.bufferOff + data.length) / this.blockSize) | 0;\n  var out = new Array(count * this.blockSize);\n\n  if (this.bufferOff !== 0) {\n    inputOff += this._buffer(data, inputOff);\n\n    if (this.bufferOff === this.buffer.length)\n      outputOff += this._flushBuffer(out, outputOff);\n  }\n\n  // Write blocks\n  var max = data.length - ((data.length - inputOff) % this.blockSize);\n  for (; inputOff < max; inputOff += this.blockSize) {\n    this._update(data, inputOff, out, outputOff);\n    outputOff += this.blockSize;\n  }\n\n  // Queue rest\n  for (; inputOff < data.length; inputOff++, this.bufferOff++)\n    this.buffer[this.bufferOff] = data[inputOff];\n\n  return out;\n};\n\nCipher.prototype._updateDecrypt = function _updateDecrypt(data) {\n  var inputOff = 0;\n  var outputOff = 0;\n\n  var count = Math.ceil((this.bufferOff + data.length) / this.blockSize) - 1;\n  var out = new Array(count * this.blockSize);\n\n  // TODO(indutny): optimize it, this is far from optimal\n  for (; count > 0; count--) {\n    inputOff += this._buffer(data, inputOff);\n    outputOff += this._flushBuffer(out, outputOff);\n  }\n\n  // Buffer rest of the input\n  inputOff += this._buffer(data, inputOff);\n\n  return out;\n};\n\nCipher.prototype.final = function final(buffer) {\n  var first;\n  if (buffer)\n    first = this.update(buffer);\n\n  var last;\n  if (this.type === 'encrypt')\n    last = this._finalEncrypt();\n  else\n    last = this._finalDecrypt();\n\n  if (first)\n    return first.concat(last);\n  else\n    return last;\n};\n\nCipher.prototype._pad = function _pad(buffer, off) {\n  if (off === 0)\n    return false;\n\n  while (off < buffer.length)\n    buffer[off++] = 0;\n\n  return true;\n};\n\nCipher.prototype._finalEncrypt = function _finalEncrypt() {\n  if (!this._pad(this.buffer, this.bufferOff))\n    return [];\n\n  var out = new Array(this.blockSize);\n  this._update(this.buffer, 0, out, 0);\n  return out;\n};\n\nCipher.prototype._unpad = function _unpad(buffer) {\n  return buffer;\n};\n\nCipher.prototype._finalDecrypt = function _finalDecrypt() {\n  assert.equal(this.bufferOff, this.blockSize, 'Not enough data to decrypt');\n  var out = new Array(this.blockSize);\n  this._flushBuffer(out, 0);\n\n  return this._unpad(out);\n};\n","'use strict';\n\nvar assert = require('minimalistic-assert');\nvar inherits = require('inherits');\n\nvar utils = require('./utils');\nvar Cipher = require('./cipher');\n\nfunction DESState() {\n  this.tmp = new Array(2);\n  this.keys = null;\n}\n\nfunction DES(options) {\n  Cipher.call(this, options);\n\n  var state = new DESState();\n  this._desState = state;\n\n  this.deriveKeys(state, options.key);\n}\ninherits(DES, Cipher);\nmodule.exports = DES;\n\nDES.create = function create(options) {\n  return new DES(options);\n};\n\nvar shiftTable = [\n  1, 1, 2, 2, 2, 2, 2, 2,\n  1, 2, 2, 2, 2, 2, 2, 1\n];\n\nDES.prototype.deriveKeys = function deriveKeys(state, key) {\n  state.keys = new Array(16 * 2);\n\n  assert.equal(key.length, this.blockSize, 'Invalid key length');\n\n  var kL = utils.readUInt32BE(key, 0);\n  var kR = utils.readUInt32BE(key, 4);\n\n  utils.pc1(kL, kR, state.tmp, 0);\n  kL = state.tmp[0];\n  kR = state.tmp[1];\n  for (var i = 0; i < state.keys.length; i += 2) {\n    var shift = shiftTable[i >>> 1];\n    kL = utils.r28shl(kL, shift);\n    kR = utils.r28shl(kR, shift);\n    utils.pc2(kL, kR, state.keys, i);\n  }\n};\n\nDES.prototype._update = function _update(inp, inOff, out, outOff) {\n  var state = this._desState;\n\n  var l = utils.readUInt32BE(inp, inOff);\n  var r = utils.readUInt32BE(inp, inOff + 4);\n\n  // Initial Permutation\n  utils.ip(l, r, state.tmp, 0);\n  l = state.tmp[0];\n  r = state.tmp[1];\n\n  if (this.type === 'encrypt')\n    this._encrypt(state, l, r, state.tmp, 0);\n  else\n    this._decrypt(state, l, r, state.tmp, 0);\n\n  l = state.tmp[0];\n  r = state.tmp[1];\n\n  utils.writeUInt32BE(out, l, outOff);\n  utils.writeUInt32BE(out, r, outOff + 4);\n};\n\nDES.prototype._pad = function _pad(buffer, off) {\n  if (this.padding === false) {\n    return false;\n  }\n\n  var value = buffer.length - off;\n  for (var i = off; i < buffer.length; i++)\n    buffer[i] = value;\n\n  return true;\n};\n\nDES.prototype._unpad = function _unpad(buffer) {\n  if (this.padding === false) {\n    return buffer;\n  }\n\n  var pad = buffer[buffer.length - 1];\n  for (var i = buffer.length - pad; i < buffer.length; i++)\n    assert.equal(buffer[i], pad);\n\n  return buffer.slice(0, buffer.length - pad);\n};\n\nDES.prototype._encrypt = function _encrypt(state, lStart, rStart, out, off) {\n  var l = lStart;\n  var r = rStart;\n\n  // Apply f() x16 times\n  for (var i = 0; i < state.keys.length; i += 2) {\n    var keyL = state.keys[i];\n    var keyR = state.keys[i + 1];\n\n    // f(r, k)\n    utils.expand(r, state.tmp, 0);\n\n    keyL ^= state.tmp[0];\n    keyR ^= state.tmp[1];\n    var s = utils.substitute(keyL, keyR);\n    var f = utils.permute(s);\n\n    var t = r;\n    r = (l ^ f) >>> 0;\n    l = t;\n  }\n\n  // Reverse Initial Permutation\n  utils.rip(r, l, out, off);\n};\n\nDES.prototype._decrypt = function _decrypt(state, lStart, rStart, out, off) {\n  var l = rStart;\n  var r = lStart;\n\n  // Apply f() x16 times\n  for (var i = state.keys.length - 2; i >= 0; i -= 2) {\n    var keyL = state.keys[i];\n    var keyR = state.keys[i + 1];\n\n    // f(r, k)\n    utils.expand(l, state.tmp, 0);\n\n    keyL ^= state.tmp[0];\n    keyR ^= state.tmp[1];\n    var s = utils.substitute(keyL, keyR);\n    var f = utils.permute(s);\n\n    var t = l;\n    l = (r ^ f) >>> 0;\n    r = t;\n  }\n\n  // Reverse Initial Permutation\n  utils.rip(l, r, out, off);\n};\n","'use strict';\n\nvar assert = require('minimalistic-assert');\nvar inherits = require('inherits');\n\nvar Cipher = require('./cipher');\nvar DES = require('./des');\n\nfunction EDEState(type, key) {\n  assert.equal(key.length, 24, 'Invalid key length');\n\n  var k1 = key.slice(0, 8);\n  var k2 = key.slice(8, 16);\n  var k3 = key.slice(16, 24);\n\n  if (type === 'encrypt') {\n    this.ciphers = [\n      DES.create({ type: 'encrypt', key: k1 }),\n      DES.create({ type: 'decrypt', key: k2 }),\n      DES.create({ type: 'encrypt', key: k3 })\n    ];\n  } else {\n    this.ciphers = [\n      DES.create({ type: 'decrypt', key: k3 }),\n      DES.create({ type: 'encrypt', key: k2 }),\n      DES.create({ type: 'decrypt', key: k1 })\n    ];\n  }\n}\n\nfunction EDE(options) {\n  Cipher.call(this, options);\n\n  var state = new EDEState(this.type, this.options.key);\n  this._edeState = state;\n}\ninherits(EDE, Cipher);\n\nmodule.exports = EDE;\n\nEDE.create = function create(options) {\n  return new EDE(options);\n};\n\nEDE.prototype._update = function _update(inp, inOff, out, outOff) {\n  var state = this._edeState;\n\n  state.ciphers[0]._update(inp, inOff, out, outOff);\n  state.ciphers[1]._update(out, outOff, out, outOff);\n  state.ciphers[2]._update(out, outOff, out, outOff);\n};\n\nEDE.prototype._pad = DES.prototype._pad;\nEDE.prototype._unpad = DES.prototype._unpad;\n","'use strict';\n\nexports.readUInt32BE = function readUInt32BE(bytes, off) {\n  var res =  (bytes[0 + off] << 24) |\n             (bytes[1 + off] << 16) |\n             (bytes[2 + off] << 8) |\n             bytes[3 + off];\n  return res >>> 0;\n};\n\nexports.writeUInt32BE = function writeUInt32BE(bytes, value, off) {\n  bytes[0 + off] = value >>> 24;\n  bytes[1 + off] = (value >>> 16) & 0xff;\n  bytes[2 + off] = (value >>> 8) & 0xff;\n  bytes[3 + off] = value & 0xff;\n};\n\nexports.ip = function ip(inL, inR, out, off) {\n  var outL = 0;\n  var outR = 0;\n\n  for (var i = 6; i >= 0; i -= 2) {\n    for (var j = 0; j <= 24; j += 8) {\n      outL <<= 1;\n      outL |= (inR >>> (j + i)) & 1;\n    }\n    for (var j = 0; j <= 24; j += 8) {\n      outL <<= 1;\n      outL |= (inL >>> (j + i)) & 1;\n    }\n  }\n\n  for (var i = 6; i >= 0; i -= 2) {\n    for (var j = 1; j <= 25; j += 8) {\n      outR <<= 1;\n      outR |= (inR >>> (j + i)) & 1;\n    }\n    for (var j = 1; j <= 25; j += 8) {\n      outR <<= 1;\n      outR |= (inL >>> (j + i)) & 1;\n    }\n  }\n\n  out[off + 0] = outL >>> 0;\n  out[off + 1] = outR >>> 0;\n};\n\nexports.rip = function rip(inL, inR, out, off) {\n  var outL = 0;\n  var outR = 0;\n\n  for (var i = 0; i < 4; i++) {\n    for (var j = 24; j >= 0; j -= 8) {\n      outL <<= 1;\n      outL |= (inR >>> (j + i)) & 1;\n      outL <<= 1;\n      outL |= (inL >>> (j + i)) & 1;\n    }\n  }\n  for (var i = 4; i < 8; i++) {\n    for (var j = 24; j >= 0; j -= 8) {\n      outR <<= 1;\n      outR |= (inR >>> (j + i)) & 1;\n      outR <<= 1;\n      outR |= (inL >>> (j + i)) & 1;\n    }\n  }\n\n  out[off + 0] = outL >>> 0;\n  out[off + 1] = outR >>> 0;\n};\n\nexports.pc1 = function pc1(inL, inR, out, off) {\n  var outL = 0;\n  var outR = 0;\n\n  // 7, 15, 23, 31, 39, 47, 55, 63\n  // 6, 14, 22, 30, 39, 47, 55, 63\n  // 5, 13, 21, 29, 39, 47, 55, 63\n  // 4, 12, 20, 28\n  for (var i = 7; i >= 5; i--) {\n    for (var j = 0; j <= 24; j += 8) {\n      outL <<= 1;\n      outL |= (inR >> (j + i)) & 1;\n    }\n    for (var j = 0; j <= 24; j += 8) {\n      outL <<= 1;\n      outL |= (inL >> (j + i)) & 1;\n    }\n  }\n  for (var j = 0; j <= 24; j += 8) {\n    outL <<= 1;\n    outL |= (inR >> (j + i)) & 1;\n  }\n\n  // 1, 9, 17, 25, 33, 41, 49, 57\n  // 2, 10, 18, 26, 34, 42, 50, 58\n  // 3, 11, 19, 27, 35, 43, 51, 59\n  // 36, 44, 52, 60\n  for (var i = 1; i <= 3; i++) {\n    for (var j = 0; j <= 24; j += 8) {\n      outR <<= 1;\n      outR |= (inR >> (j + i)) & 1;\n    }\n    for (var j = 0; j <= 24; j += 8) {\n      outR <<= 1;\n      outR |= (inL >> (j + i)) & 1;\n    }\n  }\n  for (var j = 0; j <= 24; j += 8) {\n    outR <<= 1;\n    outR |= (inL >> (j + i)) & 1;\n  }\n\n  out[off + 0] = outL >>> 0;\n  out[off + 1] = outR >>> 0;\n};\n\nexports.r28shl = function r28shl(num, shift) {\n  return ((num << shift) & 0xfffffff) | (num >>> (28 - shift));\n};\n\nvar pc2table = [\n  // inL => outL\n  14, 11, 17, 4, 27, 23, 25, 0,\n  13, 22, 7, 18, 5, 9, 16, 24,\n  2, 20, 12, 21, 1, 8, 15, 26,\n\n  // inR => outR\n  15, 4, 25, 19, 9, 1, 26, 16,\n  5, 11, 23, 8, 12, 7, 17, 0,\n  22, 3, 10, 14, 6, 20, 27, 24\n];\n\nexports.pc2 = function pc2(inL, inR, out, off) {\n  var outL = 0;\n  var outR = 0;\n\n  var len = pc2table.length >>> 1;\n  for (var i = 0; i < len; i++) {\n    outL <<= 1;\n    outL |= (inL >>> pc2table[i]) & 0x1;\n  }\n  for (var i = len; i < pc2table.length; i++) {\n    outR <<= 1;\n    outR |= (inR >>> pc2table[i]) & 0x1;\n  }\n\n  out[off + 0] = outL >>> 0;\n  out[off + 1] = outR >>> 0;\n};\n\nexports.expand = function expand(r, out, off) {\n  var outL = 0;\n  var outR = 0;\n\n  outL = ((r & 1) << 5) | (r >>> 27);\n  for (var i = 23; i >= 15; i -= 4) {\n    outL <<= 6;\n    outL |= (r >>> i) & 0x3f;\n  }\n  for (var i = 11; i >= 3; i -= 4) {\n    outR |= (r >>> i) & 0x3f;\n    outR <<= 6;\n  }\n  outR |= ((r & 0x1f) << 1) | (r >>> 31);\n\n  out[off + 0] = outL >>> 0;\n  out[off + 1] = outR >>> 0;\n};\n\nvar sTable = [\n  14, 0, 4, 15, 13, 7, 1, 4, 2, 14, 15, 2, 11, 13, 8, 1,\n  3, 10, 10, 6, 6, 12, 12, 11, 5, 9, 9, 5, 0, 3, 7, 8,\n  4, 15, 1, 12, 14, 8, 8, 2, 13, 4, 6, 9, 2, 1, 11, 7,\n  15, 5, 12, 11, 9, 3, 7, 14, 3, 10, 10, 0, 5, 6, 0, 13,\n\n  15, 3, 1, 13, 8, 4, 14, 7, 6, 15, 11, 2, 3, 8, 4, 14,\n  9, 12, 7, 0, 2, 1, 13, 10, 12, 6, 0, 9, 5, 11, 10, 5,\n  0, 13, 14, 8, 7, 10, 11, 1, 10, 3, 4, 15, 13, 4, 1, 2,\n  5, 11, 8, 6, 12, 7, 6, 12, 9, 0, 3, 5, 2, 14, 15, 9,\n\n  10, 13, 0, 7, 9, 0, 14, 9, 6, 3, 3, 4, 15, 6, 5, 10,\n  1, 2, 13, 8, 12, 5, 7, 14, 11, 12, 4, 11, 2, 15, 8, 1,\n  13, 1, 6, 10, 4, 13, 9, 0, 8, 6, 15, 9, 3, 8, 0, 7,\n  11, 4, 1, 15, 2, 14, 12, 3, 5, 11, 10, 5, 14, 2, 7, 12,\n\n  7, 13, 13, 8, 14, 11, 3, 5, 0, 6, 6, 15, 9, 0, 10, 3,\n  1, 4, 2, 7, 8, 2, 5, 12, 11, 1, 12, 10, 4, 14, 15, 9,\n  10, 3, 6, 15, 9, 0, 0, 6, 12, 10, 11, 1, 7, 13, 13, 8,\n  15, 9, 1, 4, 3, 5, 14, 11, 5, 12, 2, 7, 8, 2, 4, 14,\n\n  2, 14, 12, 11, 4, 2, 1, 12, 7, 4, 10, 7, 11, 13, 6, 1,\n  8, 5, 5, 0, 3, 15, 15, 10, 13, 3, 0, 9, 14, 8, 9, 6,\n  4, 11, 2, 8, 1, 12, 11, 7, 10, 1, 13, 14, 7, 2, 8, 13,\n  15, 6, 9, 15, 12, 0, 5, 9, 6, 10, 3, 4, 0, 5, 14, 3,\n\n  12, 10, 1, 15, 10, 4, 15, 2, 9, 7, 2, 12, 6, 9, 8, 5,\n  0, 6, 13, 1, 3, 13, 4, 14, 14, 0, 7, 11, 5, 3, 11, 8,\n  9, 4, 14, 3, 15, 2, 5, 12, 2, 9, 8, 5, 12, 15, 3, 10,\n  7, 11, 0, 14, 4, 1, 10, 7, 1, 6, 13, 0, 11, 8, 6, 13,\n\n  4, 13, 11, 0, 2, 11, 14, 7, 15, 4, 0, 9, 8, 1, 13, 10,\n  3, 14, 12, 3, 9, 5, 7, 12, 5, 2, 10, 15, 6, 8, 1, 6,\n  1, 6, 4, 11, 11, 13, 13, 8, 12, 1, 3, 4, 7, 10, 14, 7,\n  10, 9, 15, 5, 6, 0, 8, 15, 0, 14, 5, 2, 9, 3, 2, 12,\n\n  13, 1, 2, 15, 8, 13, 4, 8, 6, 10, 15, 3, 11, 7, 1, 4,\n  10, 12, 9, 5, 3, 6, 14, 11, 5, 0, 0, 14, 12, 9, 7, 2,\n  7, 2, 11, 1, 4, 14, 1, 7, 9, 4, 12, 10, 14, 8, 2, 13,\n  0, 15, 6, 12, 10, 9, 13, 0, 15, 3, 3, 5, 5, 6, 8, 11\n];\n\nexports.substitute = function substitute(inL, inR) {\n  var out = 0;\n  for (var i = 0; i < 4; i++) {\n    var b = (inL >>> (18 - i * 6)) & 0x3f;\n    var sb = sTable[i * 0x40 + b];\n\n    out <<= 4;\n    out |= sb;\n  }\n  for (var i = 0; i < 4; i++) {\n    var b = (inR >>> (18 - i * 6)) & 0x3f;\n    var sb = sTable[4 * 0x40 + i * 0x40 + b];\n\n    out <<= 4;\n    out |= sb;\n  }\n  return out >>> 0;\n};\n\nvar permuteTable = [\n  16, 25, 12, 11, 3, 20, 4, 15, 31, 17, 9, 6, 27, 14, 1, 22,\n  30, 24, 8, 18, 0, 5, 29, 23, 13, 19, 2, 26, 10, 21, 28, 7\n];\n\nexports.permute = function permute(num) {\n  var out = 0;\n  for (var i = 0; i < permuteTable.length; i++) {\n    out <<= 1;\n    out |= (num >>> permuteTable[i]) & 0x1;\n  }\n  return out >>> 0;\n};\n\nexports.padSplit = function padSplit(num, size, group) {\n  var str = num.toString(2);\n  while (str.length < size)\n    str = '0' + str;\n\n  var out = [];\n  for (var i = 0; i < size; i += group)\n    out.push(str.slice(i, i + group));\n  return out.join(' ');\n};\n","/*\n * Dexie.js - a minimalistic wrapper for IndexedDB\n * ===============================================\n *\n * By David Fahlander, david.fahlander@gmail.com\n *\n * Version 2.0.4, Fri May 25 2018\n *\n * http://dexie.org\n *\n * Apache License Version 2.0, January 2004, http://www.apache.org/licenses/\n */\n \n(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n\ttypeof define === 'function' && define.amd ? define(factory) :\n\t(global.Dexie = factory());\n}(this, (function () { 'use strict';\n\nvar keys = Object.keys;\nvar isArray = Array.isArray;\nvar _global = typeof self !== 'undefined' ? self :\n    typeof window !== 'undefined' ? window :\n        global;\nfunction extend(obj, extension) {\n    if (typeof extension !== 'object')\n        return obj;\n    keys(extension).forEach(function (key) {\n        obj[key] = extension[key];\n    });\n    return obj;\n}\nvar getProto = Object.getPrototypeOf;\nvar _hasOwn = {}.hasOwnProperty;\nfunction hasOwn(obj, prop) {\n    return _hasOwn.call(obj, prop);\n}\nfunction props(proto, extension) {\n    if (typeof extension === 'function')\n        extension = extension(getProto(proto));\n    keys(extension).forEach(function (key) {\n        setProp(proto, key, extension[key]);\n    });\n}\nvar defineProperty = Object.defineProperty;\nfunction setProp(obj, prop, functionOrGetSet, options) {\n    defineProperty(obj, prop, extend(functionOrGetSet && hasOwn(functionOrGetSet, \"get\") && typeof functionOrGetSet.get === 'function' ?\n        { get: functionOrGetSet.get, set: functionOrGetSet.set, configurable: true } :\n        { value: functionOrGetSet, configurable: true, writable: true }, options));\n}\nfunction derive(Child) {\n    return {\n        from: function (Parent) {\n            Child.prototype = Object.create(Parent.prototype);\n            setProp(Child.prototype, \"constructor\", Child);\n            return {\n                extend: props.bind(null, Child.prototype)\n            };\n        }\n    };\n}\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\nfunction getPropertyDescriptor(obj, prop) {\n    var pd = getOwnPropertyDescriptor(obj, prop), proto;\n    return pd || (proto = getProto(obj)) && getPropertyDescriptor(proto, prop);\n}\nvar _slice = [].slice;\nfunction slice(args, start, end) {\n    return _slice.call(args, start, end);\n}\nfunction override(origFunc, overridedFactory) {\n    return overridedFactory(origFunc);\n}\nfunction assert(b) {\n    if (!b)\n        throw new Error(\"Assertion Failed\");\n}\nfunction asap(fn) {\n    if (_global.setImmediate)\n        setImmediate(fn);\n    else\n        setTimeout(fn, 0);\n}\n\n/** Generate an object (hash map) based on given array.\n * @param extractor Function taking an array item and its index and returning an array of 2 items ([key, value]) to\n *        instert on the resulting object for each item in the array. If this function returns a falsy value, the\n *        current item wont affect the resulting object.\n */\nfunction arrayToObject(array, extractor) {\n    return array.reduce(function (result, item, i) {\n        var nameAndValue = extractor(item, i);\n        if (nameAndValue)\n            result[nameAndValue[0]] = nameAndValue[1];\n        return result;\n    }, {});\n}\nfunction trycatcher(fn, reject) {\n    return function () {\n        try {\n            fn.apply(this, arguments);\n        }\n        catch (e) {\n            reject(e);\n        }\n    };\n}\nfunction tryCatch(fn, onerror, args) {\n    try {\n        fn.apply(null, args);\n    }\n    catch (ex) {\n        onerror && onerror(ex);\n    }\n}\nfunction getByKeyPath(obj, keyPath) {\n    // http://www.w3.org/TR/IndexedDB/#steps-for-extracting-a-key-from-a-value-using-a-key-path\n    if (hasOwn(obj, keyPath))\n        return obj[keyPath]; // This line is moved from last to first for optimization purpose.\n    if (!keyPath)\n        return obj;\n    if (typeof keyPath !== 'string') {\n        var rv = [];\n        for (var i = 0, l = keyPath.length; i < l; ++i) {\n            var val = getByKeyPath(obj, keyPath[i]);\n            rv.push(val);\n        }\n        return rv;\n    }\n    var period = keyPath.indexOf('.');\n    if (period !== -1) {\n        var innerObj = obj[keyPath.substr(0, period)];\n        return innerObj === undefined ? undefined : getByKeyPath(innerObj, keyPath.substr(period + 1));\n    }\n    return undefined;\n}\nfunction setByKeyPath(obj, keyPath, value) {\n    if (!obj || keyPath === undefined)\n        return;\n    if ('isFrozen' in Object && Object.isFrozen(obj))\n        return;\n    if (typeof keyPath !== 'string' && 'length' in keyPath) {\n        assert(typeof value !== 'string' && 'length' in value);\n        for (var i = 0, l = keyPath.length; i < l; ++i) {\n            setByKeyPath(obj, keyPath[i], value[i]);\n        }\n    }\n    else {\n        var period = keyPath.indexOf('.');\n        if (period !== -1) {\n            var currentKeyPath = keyPath.substr(0, period);\n            var remainingKeyPath = keyPath.substr(period + 1);\n            if (remainingKeyPath === \"\")\n                if (value === undefined)\n                    delete obj[currentKeyPath];\n                else\n                    obj[currentKeyPath] = value;\n            else {\n                var innerObj = obj[currentKeyPath];\n                if (!innerObj)\n                    innerObj = (obj[currentKeyPath] = {});\n                setByKeyPath(innerObj, remainingKeyPath, value);\n            }\n        }\n        else {\n            if (value === undefined)\n                delete obj[keyPath];\n            else\n                obj[keyPath] = value;\n        }\n    }\n}\nfunction delByKeyPath(obj, keyPath) {\n    if (typeof keyPath === 'string')\n        setByKeyPath(obj, keyPath, undefined);\n    else if ('length' in keyPath)\n        [].map.call(keyPath, function (kp) {\n            setByKeyPath(obj, kp, undefined);\n        });\n}\nfunction shallowClone(obj) {\n    var rv = {};\n    for (var m in obj) {\n        if (hasOwn(obj, m))\n            rv[m] = obj[m];\n    }\n    return rv;\n}\nvar concat = [].concat;\nfunction flatten(a) {\n    return concat.apply([], a);\n}\n//https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Structured_clone_algorithm\nvar intrinsicTypes = \"Boolean,String,Date,RegExp,Blob,File,FileList,ArrayBuffer,DataView,Uint8ClampedArray,ImageData,Map,Set\"\n    .split(',').concat(flatten([8, 16, 32, 64].map(function (num) { return [\"Int\", \"Uint\", \"Float\"].map(function (t) { return t + num + \"Array\"; }); }))).filter(function (t) { return _global[t]; }).map(function (t) { return _global[t]; });\nfunction deepClone(any) {\n    if (!any || typeof any !== 'object')\n        return any;\n    var rv;\n    if (isArray(any)) {\n        rv = [];\n        for (var i = 0, l = any.length; i < l; ++i) {\n            rv.push(deepClone(any[i]));\n        }\n    }\n    else if (intrinsicTypes.indexOf(any.constructor) >= 0) {\n        rv = any;\n    }\n    else {\n        rv = any.constructor ? Object.create(any.constructor.prototype) : {};\n        for (var prop in any) {\n            if (hasOwn(any, prop)) {\n                rv[prop] = deepClone(any[prop]);\n            }\n        }\n    }\n    return rv;\n}\nfunction getObjectDiff(a, b, rv, prfx) {\n    // Compares objects a and b and produces a diff object.\n    rv = rv || {};\n    prfx = prfx || '';\n    keys(a).forEach(function (prop) {\n        if (!hasOwn(b, prop))\n            rv[prfx + prop] = undefined; // Property removed\n        else {\n            var ap = a[prop], bp = b[prop];\n            if (typeof ap === 'object' && typeof bp === 'object' &&\n                ap && bp &&\n                // Now compare constructors are same (not equal because wont work in Safari)\n                ('' + ap.constructor) === ('' + bp.constructor))\n                // Same type of object but its properties may have changed\n                getObjectDiff(ap, bp, rv, prfx + prop + \".\");\n            else if (ap !== bp)\n                rv[prfx + prop] = b[prop]; // Primitive value changed\n        }\n    });\n    keys(b).forEach(function (prop) {\n        if (!hasOwn(a, prop)) {\n            rv[prfx + prop] = b[prop]; // Property added\n        }\n    });\n    return rv;\n}\n// If first argument is iterable or array-like, return it as an array\nvar iteratorSymbol = typeof Symbol !== 'undefined' && Symbol.iterator;\nvar getIteratorOf = iteratorSymbol ? function (x) {\n    var i;\n    return x != null && (i = x[iteratorSymbol]) && i.apply(x);\n} : function () { return null; };\nvar NO_CHAR_ARRAY = {};\n// Takes one or several arguments and returns an array based on the following criteras:\n// * If several arguments provided, return arguments converted to an array in a way that\n//   still allows javascript engine to optimize the code.\n// * If single argument is an array, return a clone of it.\n// * If this-pointer equals NO_CHAR_ARRAY, don't accept strings as valid iterables as a special\n//   case to the two bullets below.\n// * If single argument is an iterable, convert it to an array and return the resulting array.\n// * If single argument is array-like (has length of type number), convert it to an array.\nfunction getArrayOf(arrayLike) {\n    var i, a, x, it;\n    if (arguments.length === 1) {\n        if (isArray(arrayLike))\n            return arrayLike.slice();\n        if (this === NO_CHAR_ARRAY && typeof arrayLike === 'string')\n            return [arrayLike];\n        if ((it = getIteratorOf(arrayLike))) {\n            a = [];\n            while ((x = it.next()), !x.done)\n                a.push(x.value);\n            return a;\n        }\n        if (arrayLike == null)\n            return [arrayLike];\n        i = arrayLike.length;\n        if (typeof i === 'number') {\n            a = new Array(i);\n            while (i--)\n                a[i] = arrayLike[i];\n            return a;\n        }\n        return [arrayLike];\n    }\n    i = arguments.length;\n    a = new Array(i);\n    while (i--)\n        a[i] = arguments[i];\n    return a;\n}\n\n// By default, debug will be true only if platform is a web platform and its page is served from localhost.\n// When debug = true, error's stacks will contain asyncronic long stacks.\nvar debug = typeof location !== 'undefined' &&\n    // By default, use debug mode if served from localhost.\n    /^(http|https):\\/\\/(localhost|127\\.0\\.0\\.1)/.test(location.href);\nfunction setDebug(value, filter) {\n    debug = value;\n    libraryFilter = filter;\n}\nvar libraryFilter = function () { return true; };\nvar NEEDS_THROW_FOR_STACK = !new Error(\"\").stack;\nfunction getErrorWithStack() {\n    \"use strict\";\n    if (NEEDS_THROW_FOR_STACK)\n        try {\n            // Doing something naughty in strict mode here to trigger a specific error\n            // that can be explicitely ignored in debugger's exception settings.\n            // If we'd just throw new Error() here, IE's debugger's exception settings\n            // will just consider it as \"exception thrown by javascript code\" which is\n            // something you wouldn't want it to ignore.\n            getErrorWithStack.arguments;\n            throw new Error(); // Fallback if above line don't throw.\n        }\n        catch (e) {\n            return e;\n        }\n    return new Error();\n}\nfunction prettyStack(exception, numIgnoredFrames) {\n    var stack = exception.stack;\n    if (!stack)\n        return \"\";\n    numIgnoredFrames = (numIgnoredFrames || 0);\n    if (stack.indexOf(exception.name) === 0)\n        numIgnoredFrames += (exception.name + exception.message).split('\\n').length;\n    return stack.split('\\n')\n        .slice(numIgnoredFrames)\n        .filter(libraryFilter)\n        .map(function (frame) { return \"\\n\" + frame; })\n        .join('');\n}\nfunction deprecated(what, fn) {\n    return function () {\n        console.warn(what + \" is deprecated. See https://github.com/dfahlander/Dexie.js/wiki/Deprecations. \" + prettyStack(getErrorWithStack(), 1));\n        return fn.apply(this, arguments);\n    };\n}\n\nvar dexieErrorNames = [\n    'Modify',\n    'Bulk',\n    'OpenFailed',\n    'VersionChange',\n    'Schema',\n    'Upgrade',\n    'InvalidTable',\n    'MissingAPI',\n    'NoSuchDatabase',\n    'InvalidArgument',\n    'SubTransaction',\n    'Unsupported',\n    'Internal',\n    'DatabaseClosed',\n    'PrematureCommit',\n    'ForeignAwait'\n];\nvar idbDomErrorNames = [\n    'Unknown',\n    'Constraint',\n    'Data',\n    'TransactionInactive',\n    'ReadOnly',\n    'Version',\n    'NotFound',\n    'InvalidState',\n    'InvalidAccess',\n    'Abort',\n    'Timeout',\n    'QuotaExceeded',\n    'Syntax',\n    'DataClone'\n];\nvar errorList = dexieErrorNames.concat(idbDomErrorNames);\nvar defaultTexts = {\n    VersionChanged: \"Database version changed by other database connection\",\n    DatabaseClosed: \"Database has been closed\",\n    Abort: \"Transaction aborted\",\n    TransactionInactive: \"Transaction has already completed or failed\"\n};\n//\n// DexieError - base class of all out exceptions.\n//\nfunction DexieError(name, msg) {\n    // Reason we don't use ES6 classes is because:\n    // 1. It bloats transpiled code and increases size of minified code.\n    // 2. It doesn't give us much in this case.\n    // 3. It would require sub classes to call super(), which\n    //    is not needed when deriving from Error.\n    this._e = getErrorWithStack();\n    this.name = name;\n    this.message = msg;\n}\nderive(DexieError).from(Error).extend({\n    stack: {\n        get: function () {\n            return this._stack ||\n                (this._stack = this.name + \": \" + this.message + prettyStack(this._e, 2));\n        }\n    },\n    toString: function () { return this.name + \": \" + this.message; }\n});\nfunction getMultiErrorMessage(msg, failures) {\n    return msg + \". Errors: \" + failures\n        .map(function (f) { return f.toString(); })\n        .filter(function (v, i, s) { return s.indexOf(v) === i; }) // Only unique error strings\n        .join('\\n');\n}\n//\n// ModifyError - thrown in Collection.modify()\n// Specific constructor because it contains members failures and failedKeys.\n//\nfunction ModifyError(msg, failures, successCount, failedKeys) {\n    this._e = getErrorWithStack();\n    this.failures = failures;\n    this.failedKeys = failedKeys;\n    this.successCount = successCount;\n}\nderive(ModifyError).from(DexieError);\nfunction BulkError(msg, failures) {\n    this._e = getErrorWithStack();\n    this.name = \"BulkError\";\n    this.failures = failures;\n    this.message = getMultiErrorMessage(msg, failures);\n}\nderive(BulkError).from(DexieError);\n//\n//\n// Dynamically generate error names and exception classes based\n// on the names in errorList.\n//\n//\n// Map of {ErrorName -> ErrorName + \"Error\"}\nvar errnames = errorList.reduce(function (obj, name) { return (obj[name] = name + \"Error\", obj); }, {});\n// Need an alias for DexieError because we're gonna create subclasses with the same name.\nvar BaseException = DexieError;\n// Map of {ErrorName -> exception constructor}\nvar exceptions = errorList.reduce(function (obj, name) {\n    // Let the name be \"DexieError\" because this name may\n    // be shown in call stack and when debugging. DexieError is\n    // the most true name because it derives from DexieError,\n    // and we cannot change Function.name programatically without\n    // dynamically create a Function object, which would be considered\n    // 'eval-evil'.\n    var fullName = name + \"Error\";\n    function DexieError(msgOrInner, inner) {\n        this._e = getErrorWithStack();\n        this.name = fullName;\n        if (!msgOrInner) {\n            this.message = defaultTexts[name] || fullName;\n            this.inner = null;\n        }\n        else if (typeof msgOrInner === 'string') {\n            this.message = msgOrInner;\n            this.inner = inner || null;\n        }\n        else if (typeof msgOrInner === 'object') {\n            this.message = msgOrInner.name + \" \" + msgOrInner.message;\n            this.inner = msgOrInner;\n        }\n    }\n    derive(DexieError).from(BaseException);\n    obj[name] = DexieError;\n    return obj;\n}, {});\n// Use ECMASCRIPT standard exceptions where applicable:\nexceptions.Syntax = SyntaxError;\nexceptions.Type = TypeError;\nexceptions.Range = RangeError;\nvar exceptionMap = idbDomErrorNames.reduce(function (obj, name) {\n    obj[name + \"Error\"] = exceptions[name];\n    return obj;\n}, {});\nfunction mapError(domError, message) {\n    if (!domError || domError instanceof DexieError || domError instanceof TypeError || domError instanceof SyntaxError || !domError.name || !exceptionMap[domError.name])\n        return domError;\n    var rv = new exceptionMap[domError.name](message || domError.message, domError);\n    if (\"stack\" in domError) {\n        // Derive stack from inner exception if it has a stack\n        setProp(rv, \"stack\", { get: function () {\n                return this.inner.stack;\n            } });\n    }\n    return rv;\n}\nvar fullNameExceptions = errorList.reduce(function (obj, name) {\n    if ([\"Syntax\", \"Type\", \"Range\"].indexOf(name) === -1)\n        obj[name + \"Error\"] = exceptions[name];\n    return obj;\n}, {});\nfullNameExceptions.ModifyError = ModifyError;\nfullNameExceptions.DexieError = DexieError;\nfullNameExceptions.BulkError = BulkError;\n\nfunction nop() { }\nfunction mirror(val) { return val; }\nfunction pureFunctionChain(f1, f2) {\n    // Enables chained events that takes ONE argument and returns it to the next function in chain.\n    // This pattern is used in the hook(\"reading\") event.\n    if (f1 == null || f1 === mirror)\n        return f2;\n    return function (val) {\n        return f2(f1(val));\n    };\n}\nfunction callBoth(on1, on2) {\n    return function () {\n        on1.apply(this, arguments);\n        on2.apply(this, arguments);\n    };\n}\nfunction hookCreatingChain(f1, f2) {\n    // Enables chained events that takes several arguments and may modify first argument by making a modification and then returning the same instance.\n    // This pattern is used in the hook(\"creating\") event.\n    if (f1 === nop)\n        return f2;\n    return function () {\n        var res = f1.apply(this, arguments);\n        if (res !== undefined)\n            arguments[0] = res;\n        var onsuccess = this.onsuccess, // In case event listener has set this.onsuccess\n        onerror = this.onerror; // In case event listener has set this.onerror\n        this.onsuccess = null;\n        this.onerror = null;\n        var res2 = f2.apply(this, arguments);\n        if (onsuccess)\n            this.onsuccess = this.onsuccess ? callBoth(onsuccess, this.onsuccess) : onsuccess;\n        if (onerror)\n            this.onerror = this.onerror ? callBoth(onerror, this.onerror) : onerror;\n        return res2 !== undefined ? res2 : res;\n    };\n}\nfunction hookDeletingChain(f1, f2) {\n    if (f1 === nop)\n        return f2;\n    return function () {\n        f1.apply(this, arguments);\n        var onsuccess = this.onsuccess, // In case event listener has set this.onsuccess\n        onerror = this.onerror; // In case event listener has set this.onerror\n        this.onsuccess = this.onerror = null;\n        f2.apply(this, arguments);\n        if (onsuccess)\n            this.onsuccess = this.onsuccess ? callBoth(onsuccess, this.onsuccess) : onsuccess;\n        if (onerror)\n            this.onerror = this.onerror ? callBoth(onerror, this.onerror) : onerror;\n    };\n}\nfunction hookUpdatingChain(f1, f2) {\n    if (f1 === nop)\n        return f2;\n    return function (modifications) {\n        var res = f1.apply(this, arguments);\n        extend(modifications, res); // If f1 returns new modifications, extend caller's modifications with the result before calling next in chain.\n        var onsuccess = this.onsuccess, // In case event listener has set this.onsuccess\n        onerror = this.onerror; // In case event listener has set this.onerror\n        this.onsuccess = null;\n        this.onerror = null;\n        var res2 = f2.apply(this, arguments);\n        if (onsuccess)\n            this.onsuccess = this.onsuccess ? callBoth(onsuccess, this.onsuccess) : onsuccess;\n        if (onerror)\n            this.onerror = this.onerror ? callBoth(onerror, this.onerror) : onerror;\n        return res === undefined ?\n            (res2 === undefined ? undefined : res2) :\n            (extend(res, res2));\n    };\n}\nfunction reverseStoppableEventChain(f1, f2) {\n    if (f1 === nop)\n        return f2;\n    return function () {\n        if (f2.apply(this, arguments) === false)\n            return false;\n        return f1.apply(this, arguments);\n    };\n}\n\nfunction promisableChain(f1, f2) {\n    if (f1 === nop)\n        return f2;\n    return function () {\n        var res = f1.apply(this, arguments);\n        if (res && typeof res.then === 'function') {\n            var thiz = this, i = arguments.length, args = new Array(i);\n            while (i--)\n                args[i] = arguments[i];\n            return res.then(function () {\n                return f2.apply(thiz, args);\n            });\n        }\n        return f2.apply(this, arguments);\n    };\n}\n\n/*\n * Copyright (c) 2014-2017 David Fahlander\n * Apache License Version 2.0, January 2004, http://www.apache.org/licenses/LICENSE-2.0\n */\n//\n// Promise and Zone (PSD) for Dexie library\n//\n// I started out writing this Promise class by copying promise-light (https://github.com/taylorhakes/promise-light) by\n// https://github.com/taylorhakes - an A+ and ECMASCRIPT 6 compliant Promise implementation.\n//\n// In previous versions this was fixed by not calling setTimeout when knowing that the resolve() or reject() came from another\n// tick. In Dexie v1.4.0, I've rewritten the Promise class entirely. Just some fragments of promise-light is left. I use\n// another strategy now that simplifies everything a lot: to always execute callbacks in a new micro-task, but have an own micro-task\n// engine that is indexedDB compliant across all browsers.\n// Promise class has also been optimized a lot with inspiration from bluebird - to avoid closures as much as possible.\n// Also with inspiration from bluebird, asyncronic stacks in debug mode.\n//\n// Specific non-standard features of this Promise class:\n// * Custom zone support (a.k.a. PSD) with ability to keep zones also when using native promises as well as\n//   native async / await.\n// * Promise.follow() method built upon the custom zone engine, that allows user to track all promises created from current stack frame\n//   and below + all promises that those promises creates or awaits.\n// * Detect any unhandled promise in a PSD-scope (PSD.onunhandled). \n//\n// David Fahlander, https://github.com/dfahlander\n//\n// Just a pointer that only this module knows about.\n// Used in Promise constructor to emulate a private constructor.\nvar INTERNAL = {};\n// Async stacks (long stacks) must not grow infinitely.\nvar LONG_STACKS_CLIP_LIMIT = 100;\nvar MAX_LONG_STACKS = 20;\nvar ZONE_ECHO_LIMIT = 7;\nvar nativePromiseInstanceAndProto = (function () {\n    try {\n        // Be able to patch native async functions\n        return new Function(\"let F=async ()=>{},p=F();return [p,Object.getPrototypeOf(p),Promise.resolve(),F.constructor];\")();\n    }\n    catch (e) {\n        var P = _global.Promise;\n        return P ?\n            [P.resolve(), P.prototype, P.resolve()] :\n            [];\n    }\n})();\nvar resolvedNativePromise = nativePromiseInstanceAndProto[0];\nvar nativePromiseProto = nativePromiseInstanceAndProto[1];\nvar resolvedGlobalPromise = nativePromiseInstanceAndProto[2];\nvar nativePromiseThen = nativePromiseProto && nativePromiseProto.then;\nvar NativePromise = resolvedNativePromise && resolvedNativePromise.constructor;\nvar AsyncFunction = nativePromiseInstanceAndProto[3];\nvar patchGlobalPromise = !!resolvedGlobalPromise;\nvar stack_being_generated = false;\n/* The default function used only for the very first promise in a promise chain.\n   As soon as then promise is resolved or rejected, all next tasks will be executed in micro ticks\n   emulated in this module. For indexedDB compatibility, this means that every method needs to\n   execute at least one promise before doing an indexedDB operation. Dexie will always call\n   db.ready().then() for every operation to make sure the indexedDB event is started in an\n   indexedDB-compatible emulated micro task loop.\n*/\nvar schedulePhysicalTick = resolvedGlobalPromise ?\n    function () { resolvedGlobalPromise.then(physicalTick); }\n    :\n        _global.setImmediate ?\n            // setImmediate supported. Those modern platforms also supports Function.bind().\n            setImmediate.bind(null, physicalTick) :\n            _global.MutationObserver ?\n                // MutationObserver supported\n                function () {\n                    var hiddenDiv = document.createElement(\"div\");\n                    (new MutationObserver(function () {\n                        physicalTick();\n                        hiddenDiv = null;\n                    })).observe(hiddenDiv, { attributes: true });\n                    hiddenDiv.setAttribute('i', '1');\n                } :\n                // No support for setImmediate or MutationObserver. No worry, setTimeout is only called\n                // once time. Every tick that follows will be our emulated micro tick.\n                // Could have uses setTimeout.bind(null, 0, physicalTick) if it wasnt for that FF13 and below has a bug \n                function () { setTimeout(physicalTick, 0); };\n// Configurable through Promise.scheduler.\n// Don't export because it would be unsafe to let unknown\n// code call it unless they do try..catch within their callback.\n// This function can be retrieved through getter of Promise.scheduler though,\n// but users must not do Promise.scheduler = myFuncThatThrowsException\nvar asap$1 = function (callback, args) {\n    microtickQueue.push([callback, args]);\n    if (needsNewPhysicalTick) {\n        schedulePhysicalTick();\n        needsNewPhysicalTick = false;\n    }\n};\nvar isOutsideMicroTick = true;\nvar needsNewPhysicalTick = true;\nvar unhandledErrors = [];\nvar rejectingErrors = [];\nvar currentFulfiller = null;\nvar rejectionMapper = mirror; // Remove in next major when removing error mapping of DOMErrors and DOMExceptions\nvar globalPSD = {\n    id: 'global',\n    global: true,\n    ref: 0,\n    unhandleds: [],\n    onunhandled: globalError,\n    pgp: false,\n    env: {},\n    finalize: function () {\n        this.unhandleds.forEach(function (uh) {\n            try {\n                globalError(uh[0], uh[1]);\n            }\n            catch (e) { }\n        });\n    }\n};\nvar PSD = globalPSD;\nvar microtickQueue = []; // Callbacks to call in this or next physical tick.\nvar numScheduledCalls = 0; // Number of listener-calls left to do in this physical tick.\nvar tickFinalizers = []; // Finalizers to call when there are no more async calls scheduled within current physical tick.\nfunction Promise(fn) {\n    if (typeof this !== 'object')\n        throw new TypeError('Promises must be constructed via new');\n    this._listeners = [];\n    this.onuncatched = nop; // Deprecate in next major. Not needed. Better to use global error handler.\n    // A library may set `promise._lib = true;` after promise is created to make resolve() or reject()\n    // execute the microtask engine implicitely within the call to resolve() or reject().\n    // To remain A+ compliant, a library must only set `_lib=true` if it can guarantee that the stack\n    // only contains library code when calling resolve() or reject().\n    // RULE OF THUMB: ONLY set _lib = true for promises explicitely resolving/rejecting directly from\n    // global scope (event handler, timer etc)!\n    this._lib = false;\n    // Current async scope\n    var psd = (this._PSD = PSD);\n    if (debug) {\n        this._stackHolder = getErrorWithStack();\n        this._prev = null;\n        this._numPrev = 0; // Number of previous promises (for long stacks)\n    }\n    if (typeof fn !== 'function') {\n        if (fn !== INTERNAL)\n            throw new TypeError('Not a function');\n        // Private constructor (INTERNAL, state, value).\n        // Used internally by Promise.resolve() and Promise.reject().\n        this._state = arguments[1];\n        this._value = arguments[2];\n        if (this._state === false)\n            handleRejection(this, this._value); // Map error, set stack and addPossiblyUnhandledError().\n        return;\n    }\n    this._state = null; // null (=pending), false (=rejected) or true (=resolved)\n    this._value = null; // error or result\n    ++psd.ref; // Refcounting current scope\n    executePromiseTask(this, fn);\n}\n// Prepare a property descriptor to put onto Promise.prototype.then\nvar thenProp = {\n    get: function () {\n        var psd = PSD, microTaskId = totalEchoes;\n        function then(onFulfilled, onRejected) {\n            var _this = this;\n            var possibleAwait = !psd.global && (psd !== PSD || microTaskId !== totalEchoes);\n            if (possibleAwait)\n                decrementExpectedAwaits();\n            var rv = new Promise(function (resolve, reject) {\n                propagateToListener(_this, new Listener(nativeAwaitCompatibleWrap(onFulfilled, psd, possibleAwait), nativeAwaitCompatibleWrap(onRejected, psd, possibleAwait), resolve, reject, psd));\n            });\n            debug && linkToPreviousPromise(rv, this);\n            return rv;\n        }\n        then.prototype = INTERNAL; // For idempotense, see setter below.\n        return then;\n    },\n    // Be idempotent and allow another framework (such as zone.js or another instance of a Dexie.Promise module) to replace Promise.prototype.then\n    // and when that framework wants to restore the original property, we must identify that and restore the original property descriptor.\n    set: function (value) {\n        setProp(this, 'then', value && value.prototype === INTERNAL ?\n            thenProp : // Restore to original property descriptor.\n            {\n                get: function () {\n                    return value; // Getter returning provided value (behaves like value is just changed)\n                },\n                set: thenProp.set // Keep a setter that is prepared to restore original.\n            });\n    }\n};\nprops(Promise.prototype, {\n    then: thenProp,\n    _then: function (onFulfilled, onRejected) {\n        // A little tinier version of then() that don't have to create a resulting promise.\n        propagateToListener(this, new Listener(null, null, onFulfilled, onRejected, PSD));\n    },\n    catch: function (onRejected) {\n        if (arguments.length === 1)\n            return this.then(null, onRejected);\n        // First argument is the Error type to catch\n        var type = arguments[0], handler = arguments[1];\n        return typeof type === 'function' ? this.then(null, function (err) {\n            // Catching errors by its constructor type (similar to java / c++ / c#)\n            // Sample: promise.catch(TypeError, function (e) { ... });\n            return err instanceof type ? handler(err) : PromiseReject(err);\n        })\n            : this.then(null, function (err) {\n                // Catching errors by the error.name property. Makes sense for indexedDB where error type\n                // is always DOMError but where e.name tells the actual error type.\n                // Sample: promise.catch('ConstraintError', function (e) { ... });\n                return err && err.name === type ? handler(err) : PromiseReject(err);\n            });\n    },\n    finally: function (onFinally) {\n        return this.then(function (value) {\n            onFinally();\n            return value;\n        }, function (err) {\n            onFinally();\n            return PromiseReject(err);\n        });\n    },\n    stack: {\n        get: function () {\n            if (this._stack)\n                return this._stack;\n            try {\n                stack_being_generated = true;\n                var stacks = getStack(this, [], MAX_LONG_STACKS);\n                var stack = stacks.join(\"\\nFrom previous: \");\n                if (this._state !== null)\n                    this._stack = stack; // Stack may be updated on reject.\n                return stack;\n            }\n            finally {\n                stack_being_generated = false;\n            }\n        }\n    },\n    timeout: function (ms, msg) {\n        var _this = this;\n        return ms < Infinity ?\n            new Promise(function (resolve, reject) {\n                var handle = setTimeout(function () { return reject(new exceptions.Timeout(msg)); }, ms);\n                _this.then(resolve, reject).finally(clearTimeout.bind(null, handle));\n            }) : this;\n    }\n});\nif (typeof Symbol !== 'undefined' && Symbol.toStringTag)\n    setProp(Promise.prototype, Symbol.toStringTag, 'Promise');\n// Now that Promise.prototype is defined, we have all it takes to set globalPSD.env.\n// Environment globals snapshotted on leaving global zone\nglobalPSD.env = snapShot();\nfunction Listener(onFulfilled, onRejected, resolve, reject, zone) {\n    this.onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : null;\n    this.onRejected = typeof onRejected === 'function' ? onRejected : null;\n    this.resolve = resolve;\n    this.reject = reject;\n    this.psd = zone;\n}\n// Promise Static Properties\nprops(Promise, {\n    all: function () {\n        var values = getArrayOf.apply(null, arguments) // Supports iterables, implicit arguments and array-like.\n            .map(onPossibleParallellAsync); // Handle parallell async/awaits \n        return new Promise(function (resolve, reject) {\n            if (values.length === 0)\n                resolve([]);\n            var remaining = values.length;\n            values.forEach(function (a, i) { return Promise.resolve(a).then(function (x) {\n                values[i] = x;\n                if (!--remaining)\n                    resolve(values);\n            }, reject); });\n        });\n    },\n    resolve: function (value) {\n        if (value instanceof Promise)\n            return value;\n        if (value && typeof value.then === 'function')\n            return new Promise(function (resolve, reject) {\n                value.then(resolve, reject);\n            });\n        var rv = new Promise(INTERNAL, true, value);\n        linkToPreviousPromise(rv, currentFulfiller);\n        return rv;\n    },\n    reject: PromiseReject,\n    race: function () {\n        var values = getArrayOf.apply(null, arguments).map(onPossibleParallellAsync);\n        return new Promise(function (resolve, reject) {\n            values.map(function (value) { return Promise.resolve(value).then(resolve, reject); });\n        });\n    },\n    PSD: {\n        get: function () { return PSD; },\n        set: function (value) { return PSD = value; }\n    },\n    //totalEchoes: {get: ()=>totalEchoes},\n    //task: {get: ()=>task},\n    newPSD: newScope,\n    usePSD: usePSD,\n    scheduler: {\n        get: function () { return asap$1; },\n        set: function (value) { asap$1 = value; }\n    },\n    rejectionMapper: {\n        get: function () { return rejectionMapper; },\n        set: function (value) { rejectionMapper = value; } // Map reject failures\n    },\n    follow: function (fn, zoneProps) {\n        return new Promise(function (resolve, reject) {\n            return newScope(function (resolve, reject) {\n                var psd = PSD;\n                psd.unhandleds = []; // For unhandled standard- or 3rd party Promises. Checked at psd.finalize()\n                psd.onunhandled = reject; // Triggered directly on unhandled promises of this library.\n                psd.finalize = callBoth(function () {\n                    var _this = this;\n                    // Unhandled standard or 3rd part promises are put in PSD.unhandleds and\n                    // examined upon scope completion while unhandled rejections in this Promise\n                    // will trigger directly through psd.onunhandled\n                    run_at_end_of_this_or_next_physical_tick(function () {\n                        _this.unhandleds.length === 0 ? resolve() : reject(_this.unhandleds[0]);\n                    });\n                }, psd.finalize);\n                fn();\n            }, zoneProps, resolve, reject);\n        });\n    }\n});\n/**\n* Take a potentially misbehaving resolver function and make sure\n* onFulfilled and onRejected are only called once.\n*\n* Makes no guarantees about asynchrony.\n*/\nfunction executePromiseTask(promise, fn) {\n    // Promise Resolution Procedure:\n    // https://github.com/promises-aplus/promises-spec#the-promise-resolution-procedure\n    try {\n        fn(function (value) {\n            if (promise._state !== null)\n                return; // Already settled\n            if (value === promise)\n                throw new TypeError('A promise cannot be resolved with itself.');\n            var shouldExecuteTick = promise._lib && beginMicroTickScope();\n            if (value && typeof value.then === 'function') {\n                executePromiseTask(promise, function (resolve, reject) {\n                    value instanceof Promise ?\n                        value._then(resolve, reject) :\n                        value.then(resolve, reject);\n                });\n            }\n            else {\n                promise._state = true;\n                promise._value = value;\n                propagateAllListeners(promise);\n            }\n            if (shouldExecuteTick)\n                endMicroTickScope();\n        }, handleRejection.bind(null, promise)); // If Function.bind is not supported. Exception is handled in catch below\n    }\n    catch (ex) {\n        handleRejection(promise, ex);\n    }\n}\nfunction handleRejection(promise, reason) {\n    rejectingErrors.push(reason);\n    if (promise._state !== null)\n        return;\n    var shouldExecuteTick = promise._lib && beginMicroTickScope();\n    reason = rejectionMapper(reason);\n    promise._state = false;\n    promise._value = reason;\n    debug && reason !== null && typeof reason === 'object' && !reason._promise && tryCatch(function () {\n        var origProp = getPropertyDescriptor(reason, \"stack\");\n        reason._promise = promise;\n        setProp(reason, \"stack\", {\n            get: function () {\n                return stack_being_generated ?\n                    origProp && (origProp.get ?\n                        origProp.get.apply(reason) :\n                        origProp.value) :\n                    promise.stack;\n            }\n        });\n    });\n    // Add the failure to a list of possibly uncaught errors\n    addPossiblyUnhandledError(promise);\n    propagateAllListeners(promise);\n    if (shouldExecuteTick)\n        endMicroTickScope();\n}\nfunction propagateAllListeners(promise) {\n    //debug && linkToPreviousPromise(promise);\n    var listeners = promise._listeners;\n    promise._listeners = [];\n    for (var i = 0, len = listeners.length; i < len; ++i) {\n        propagateToListener(promise, listeners[i]);\n    }\n    var psd = promise._PSD;\n    --psd.ref || psd.finalize(); // if psd.ref reaches zero, call psd.finalize();\n    if (numScheduledCalls === 0) {\n        // If numScheduledCalls is 0, it means that our stack is not in a callback of a scheduled call,\n        // and that no deferreds where listening to this rejection or success.\n        // Since there is a risk that our stack can contain application code that may\n        // do stuff after this code is finished that may generate new calls, we cannot\n        // call finalizers here.\n        ++numScheduledCalls;\n        asap$1(function () {\n            if (--numScheduledCalls === 0)\n                finalizePhysicalTick(); // Will detect unhandled errors\n        }, []);\n    }\n}\nfunction propagateToListener(promise, listener) {\n    if (promise._state === null) {\n        promise._listeners.push(listener);\n        return;\n    }\n    var cb = promise._state ? listener.onFulfilled : listener.onRejected;\n    if (cb === null) {\n        // This Listener doesnt have a listener for the event being triggered (onFulfilled or onReject) so lets forward the event to any eventual listeners on the Promise instance returned by then() or catch()\n        return (promise._state ? listener.resolve : listener.reject)(promise._value);\n    }\n    ++listener.psd.ref;\n    ++numScheduledCalls;\n    asap$1(callListener, [cb, promise, listener]);\n}\nfunction callListener(cb, promise, listener) {\n    try {\n        // Set static variable currentFulfiller to the promise that is being fullfilled,\n        // so that we connect the chain of promises (for long stacks support)\n        currentFulfiller = promise;\n        // Call callback and resolve our listener with it's return value.\n        var ret, value = promise._value;\n        if (promise._state) {\n            // cb is onResolved\n            ret = cb(value);\n        }\n        else {\n            // cb is onRejected\n            if (rejectingErrors.length)\n                rejectingErrors = [];\n            ret = cb(value);\n            if (rejectingErrors.indexOf(value) === -1)\n                markErrorAsHandled(promise); // Callback didnt do Promise.reject(err) nor reject(err) onto another promise.\n        }\n        listener.resolve(ret);\n    }\n    catch (e) {\n        // Exception thrown in callback. Reject our listener.\n        listener.reject(e);\n    }\n    finally {\n        // Restore env and currentFulfiller.\n        currentFulfiller = null;\n        if (--numScheduledCalls === 0)\n            finalizePhysicalTick();\n        --listener.psd.ref || listener.psd.finalize();\n    }\n}\nfunction getStack(promise, stacks, limit) {\n    if (stacks.length === limit)\n        return stacks;\n    var stack = \"\";\n    if (promise._state === false) {\n        var failure = promise._value, errorName, message;\n        if (failure != null) {\n            errorName = failure.name || \"Error\";\n            message = failure.message || failure;\n            stack = prettyStack(failure, 0);\n        }\n        else {\n            errorName = failure; // If error is undefined or null, show that.\n            message = \"\";\n        }\n        stacks.push(errorName + (message ? \": \" + message : \"\") + stack);\n    }\n    if (debug) {\n        stack = prettyStack(promise._stackHolder, 2);\n        if (stack && stacks.indexOf(stack) === -1)\n            stacks.push(stack);\n        if (promise._prev)\n            getStack(promise._prev, stacks, limit);\n    }\n    return stacks;\n}\nfunction linkToPreviousPromise(promise, prev) {\n    // Support long stacks by linking to previous completed promise.\n    var numPrev = prev ? prev._numPrev + 1 : 0;\n    if (numPrev < LONG_STACKS_CLIP_LIMIT) {\n        promise._prev = prev;\n        promise._numPrev = numPrev;\n    }\n}\n/* The callback to schedule with setImmediate() or setTimeout().\n   It runs a virtual microtick and executes any callback registered in microtickQueue.\n */\nfunction physicalTick() {\n    beginMicroTickScope() && endMicroTickScope();\n}\nfunction beginMicroTickScope() {\n    var wasRootExec = isOutsideMicroTick;\n    isOutsideMicroTick = false;\n    needsNewPhysicalTick = false;\n    return wasRootExec;\n}\n/* Executes micro-ticks without doing try..catch.\n   This can be possible because we only use this internally and\n   the registered functions are exception-safe (they do try..catch\n   internally before calling any external method). If registering\n   functions in the microtickQueue that are not exception-safe, this\n   would destroy the framework and make it instable. So we don't export\n   our asap method.\n*/\nfunction endMicroTickScope() {\n    var callbacks, i, l;\n    do {\n        while (microtickQueue.length > 0) {\n            callbacks = microtickQueue;\n            microtickQueue = [];\n            l = callbacks.length;\n            for (i = 0; i < l; ++i) {\n                var item = callbacks[i];\n                item[0].apply(null, item[1]);\n            }\n        }\n    } while (microtickQueue.length > 0);\n    isOutsideMicroTick = true;\n    needsNewPhysicalTick = true;\n}\nfunction finalizePhysicalTick() {\n    var unhandledErrs = unhandledErrors;\n    unhandledErrors = [];\n    unhandledErrs.forEach(function (p) {\n        p._PSD.onunhandled.call(null, p._value, p);\n    });\n    var finalizers = tickFinalizers.slice(0); // Clone first because finalizer may remove itself from list.\n    var i = finalizers.length;\n    while (i)\n        finalizers[--i]();\n}\nfunction run_at_end_of_this_or_next_physical_tick(fn) {\n    function finalizer() {\n        fn();\n        tickFinalizers.splice(tickFinalizers.indexOf(finalizer), 1);\n    }\n    tickFinalizers.push(finalizer);\n    ++numScheduledCalls;\n    asap$1(function () {\n        if (--numScheduledCalls === 0)\n            finalizePhysicalTick();\n    }, []);\n}\nfunction addPossiblyUnhandledError(promise) {\n    // Only add to unhandledErrors if not already there. The first one to add to this list\n    // will be upon the first rejection so that the root cause (first promise in the\n    // rejection chain) is the one listed.\n    if (!unhandledErrors.some(function (p) { return p._value === promise._value; }))\n        unhandledErrors.push(promise);\n}\nfunction markErrorAsHandled(promise) {\n    // Called when a reject handled is actually being called.\n    // Search in unhandledErrors for any promise whos _value is this promise_value (list\n    // contains only rejected promises, and only one item per error)\n    var i = unhandledErrors.length;\n    while (i)\n        if (unhandledErrors[--i]._value === promise._value) {\n            // Found a promise that failed with this same error object pointer,\n            // Remove that since there is a listener that actually takes care of it.\n            unhandledErrors.splice(i, 1);\n            return;\n        }\n}\nfunction PromiseReject(reason) {\n    return new Promise(INTERNAL, false, reason);\n}\nfunction wrap(fn, errorCatcher) {\n    var psd = PSD;\n    return function () {\n        var wasRootExec = beginMicroTickScope(), outerScope = PSD;\n        try {\n            switchToZone(psd, true);\n            return fn.apply(this, arguments);\n        }\n        catch (e) {\n            errorCatcher && errorCatcher(e);\n        }\n        finally {\n            switchToZone(outerScope, false);\n            if (wasRootExec)\n                endMicroTickScope();\n        }\n    };\n}\n//\n// variables used for native await support\n//\nvar task = { awaits: 0, echoes: 0, id: 0 }; // The ongoing macro-task when using zone-echoing.\nvar taskCounter = 0; // ID counter for macro tasks.\nvar zoneStack = []; // Stack of left zones to restore asynchronically.\nvar zoneEchoes = 0; // zoneEchoes is a must in order to persist zones between native await expressions.\nvar totalEchoes = 0; // ID counter for micro-tasks. Used to detect possible native await in our Promise.prototype.then.\nvar zone_id_counter = 0;\nfunction newScope(fn, props$$1, a1, a2) {\n    var parent = PSD, psd = Object.create(parent);\n    psd.parent = parent;\n    psd.ref = 0;\n    psd.global = false;\n    psd.id = ++zone_id_counter;\n    // Prepare for promise patching (done in usePSD):\n    var globalEnv = globalPSD.env;\n    psd.env = patchGlobalPromise ? {\n        Promise: Promise,\n        PromiseProp: { value: Promise, configurable: true, writable: true },\n        all: Promise.all,\n        race: Promise.race,\n        resolve: Promise.resolve,\n        reject: Promise.reject,\n        nthen: getPatchedPromiseThen(globalEnv.nthen, psd),\n        gthen: getPatchedPromiseThen(globalEnv.gthen, psd) // global then\n    } : {};\n    if (props$$1)\n        extend(psd, props$$1);\n    // unhandleds and onunhandled should not be specifically set here.\n    // Leave them on parent prototype.\n    // unhandleds.push(err) will push to parent's prototype\n    // onunhandled() will call parents onunhandled (with this scope's this-pointer though!)\n    ++parent.ref;\n    psd.finalize = function () {\n        --this.parent.ref || this.parent.finalize();\n    };\n    var rv = usePSD(psd, fn, a1, a2);\n    if (psd.ref === 0)\n        psd.finalize();\n    return rv;\n}\n// Function to call if scopeFunc returns NativePromise\n// Also for each NativePromise in the arguments to Promise.all()\nfunction incrementExpectedAwaits() {\n    if (!task.id)\n        task.id = ++taskCounter;\n    ++task.awaits;\n    task.echoes += ZONE_ECHO_LIMIT;\n    return task.id;\n}\n// Function to call when 'then' calls back on a native promise where onAwaitExpected() had been called.\n// Also call this when a native await calls then method on a promise. In that case, don't supply\n// sourceTaskId because we already know it refers to current task.\nfunction decrementExpectedAwaits(sourceTaskId) {\n    if (!task.awaits || (sourceTaskId && sourceTaskId !== task.id))\n        return;\n    if (--task.awaits === 0)\n        task.id = 0;\n    task.echoes = task.awaits * ZONE_ECHO_LIMIT; // Will reset echoes to 0 if awaits is 0.\n}\n// Call from Promise.all() and Promise.race()\nfunction onPossibleParallellAsync(possiblePromise) {\n    if (task.echoes && possiblePromise && possiblePromise.constructor === NativePromise) {\n        incrementExpectedAwaits();\n        return possiblePromise.then(function (x) {\n            decrementExpectedAwaits();\n            return x;\n        }, function (e) {\n            decrementExpectedAwaits();\n            return rejection(e);\n        });\n    }\n    return possiblePromise;\n}\nfunction zoneEnterEcho(targetZone) {\n    ++totalEchoes;\n    if (!task.echoes || --task.echoes === 0) {\n        task.echoes = task.id = 0; // Cancel zone echoing.\n    }\n    zoneStack.push(PSD);\n    switchToZone(targetZone, true);\n}\nfunction zoneLeaveEcho() {\n    var zone = zoneStack[zoneStack.length - 1];\n    zoneStack.pop();\n    switchToZone(zone, false);\n}\nfunction switchToZone(targetZone, bEnteringZone) {\n    var currentZone = PSD;\n    if (bEnteringZone ? task.echoes && (!zoneEchoes++ || targetZone !== PSD) : zoneEchoes && (!--zoneEchoes || targetZone !== PSD)) {\n        // Enter or leave zone asynchronically as well, so that tasks initiated during current tick\n        // will be surrounded by the zone when they are invoked.\n        enqueueNativeMicroTask(bEnteringZone ? zoneEnterEcho.bind(null, targetZone) : zoneLeaveEcho);\n    }\n    if (targetZone === PSD)\n        return;\n    PSD = targetZone; // The actual zone switch occurs at this line.\n    // Snapshot on every leave from global zone.\n    if (currentZone === globalPSD)\n        globalPSD.env = snapShot();\n    if (patchGlobalPromise) {\n        // Let's patch the global and native Promises (may be same or may be different)\n        var GlobalPromise = globalPSD.env.Promise;\n        // Swich environments (may be PSD-zone or the global zone. Both apply.)\n        var targetEnv = targetZone.env;\n        // Change Promise.prototype.then for native and global Promise (they MAY differ on polyfilled environments, but both can be accessed)\n        // Must be done on each zone change because the patched method contains targetZone in its closure.\n        nativePromiseProto.then = targetEnv.nthen;\n        GlobalPromise.prototype.then = targetEnv.gthen;\n        if (currentZone.global || targetZone.global) {\n            // Leaving or entering global zone. It's time to patch / restore global Promise.\n            // Set this Promise to window.Promise so that transiled async functions will work on Firefox, Safari and IE, as well as with Zonejs and angular.\n            Object.defineProperty(_global, 'Promise', targetEnv.PromiseProp);\n            // Support Promise.all() etc to work indexedDB-safe also when people are including es6-promise as a module (they might\n            // not be accessing global.Promise but a local reference to it)\n            GlobalPromise.all = targetEnv.all;\n            GlobalPromise.race = targetEnv.race;\n            GlobalPromise.resolve = targetEnv.resolve;\n            GlobalPromise.reject = targetEnv.reject;\n        }\n    }\n}\nfunction snapShot() {\n    var GlobalPromise = _global.Promise;\n    return patchGlobalPromise ? {\n        Promise: GlobalPromise,\n        PromiseProp: Object.getOwnPropertyDescriptor(_global, \"Promise\"),\n        all: GlobalPromise.all,\n        race: GlobalPromise.race,\n        resolve: GlobalPromise.resolve,\n        reject: GlobalPromise.reject,\n        nthen: nativePromiseProto.then,\n        gthen: GlobalPromise.prototype.then\n    } : {};\n}\nfunction usePSD(psd, fn, a1, a2, a3) {\n    var outerScope = PSD;\n    try {\n        switchToZone(psd, true);\n        return fn(a1, a2, a3);\n    }\n    finally {\n        switchToZone(outerScope, false);\n    }\n}\nfunction enqueueNativeMicroTask(job) {\n    //\n    // Precondition: nativePromiseThen !== undefined\n    //\n    nativePromiseThen.call(resolvedNativePromise, job);\n}\nfunction nativeAwaitCompatibleWrap(fn, zone, possibleAwait) {\n    return typeof fn !== 'function' ? fn : function () {\n        var outerZone = PSD;\n        if (possibleAwait)\n            incrementExpectedAwaits();\n        switchToZone(zone, true);\n        try {\n            return fn.apply(this, arguments);\n        }\n        finally {\n            switchToZone(outerZone, false);\n        }\n    };\n}\nfunction getPatchedPromiseThen(origThen, zone) {\n    return function (onResolved, onRejected) {\n        return origThen.call(this, nativeAwaitCompatibleWrap(onResolved, zone, false), nativeAwaitCompatibleWrap(onRejected, zone, false));\n    };\n}\nvar UNHANDLEDREJECTION = \"unhandledrejection\";\nfunction globalError(err, promise) {\n    var rv;\n    try {\n        rv = promise.onuncatched(err);\n    }\n    catch (e) { }\n    if (rv !== false)\n        try {\n            var event, eventData = { promise: promise, reason: err };\n            if (_global.document && document.createEvent) {\n                event = document.createEvent('Event');\n                event.initEvent(UNHANDLEDREJECTION, true, true);\n                extend(event, eventData);\n            }\n            else if (_global.CustomEvent) {\n                event = new CustomEvent(UNHANDLEDREJECTION, { detail: eventData });\n                extend(event, eventData);\n            }\n            if (event && _global.dispatchEvent) {\n                dispatchEvent(event);\n                if (!_global.PromiseRejectionEvent && _global.onunhandledrejection)\n                    // No native support for PromiseRejectionEvent but user has set window.onunhandledrejection. Manually call it.\n                    try {\n                        _global.onunhandledrejection(event);\n                    }\n                    catch (_) { }\n            }\n            if (!event.defaultPrevented) {\n                console.warn(\"Unhandled rejection: \" + (err.stack || err));\n            }\n        }\n        catch (e) { }\n}\nvar rejection = Promise.reject;\n\nfunction Events(ctx) {\n    var evs = {};\n    var rv = function (eventName, subscriber) {\n        if (subscriber) {\n            // Subscribe. If additional arguments than just the subscriber was provided, forward them as well.\n            var i = arguments.length, args = new Array(i - 1);\n            while (--i)\n                args[i - 1] = arguments[i];\n            evs[eventName].subscribe.apply(null, args);\n            return ctx;\n        }\n        else if (typeof (eventName) === 'string') {\n            // Return interface allowing to fire or unsubscribe from event\n            return evs[eventName];\n        }\n    };\n    rv.addEventType = add;\n    for (var i = 1, l = arguments.length; i < l; ++i) {\n        add(arguments[i]);\n    }\n    return rv;\n    function add(eventName, chainFunction, defaultFunction) {\n        if (typeof eventName === 'object')\n            return addConfiguredEvents(eventName);\n        if (!chainFunction)\n            chainFunction = reverseStoppableEventChain;\n        if (!defaultFunction)\n            defaultFunction = nop;\n        var context = {\n            subscribers: [],\n            fire: defaultFunction,\n            subscribe: function (cb) {\n                if (context.subscribers.indexOf(cb) === -1) {\n                    context.subscribers.push(cb);\n                    context.fire = chainFunction(context.fire, cb);\n                }\n            },\n            unsubscribe: function (cb) {\n                context.subscribers = context.subscribers.filter(function (fn) { return fn !== cb; });\n                context.fire = context.subscribers.reduce(chainFunction, defaultFunction);\n            }\n        };\n        evs[eventName] = rv[eventName] = context;\n        return context;\n    }\n    function addConfiguredEvents(cfg) {\n        // events(this, {reading: [functionChain, nop]});\n        keys(cfg).forEach(function (eventName) {\n            var args = cfg[eventName];\n            if (isArray(args)) {\n                add(eventName, cfg[eventName][0], cfg[eventName][1]);\n            }\n            else if (args === 'asap') {\n                // Rather than approaching event subscription using a functional approach, we here do it in a for-loop where subscriber is executed in its own stack\n                // enabling that any exception that occur wont disturb the initiator and also not nescessary be catched and forgotten.\n                var context = add(eventName, mirror, function fire() {\n                    // Optimazation-safe cloning of arguments into args.\n                    var i = arguments.length, args = new Array(i);\n                    while (i--)\n                        args[i] = arguments[i];\n                    // All each subscriber:\n                    context.subscribers.forEach(function (fn) {\n                        asap(function fireEvent() {\n                            fn.apply(null, args);\n                        });\n                    });\n                });\n            }\n            else\n                throw new exceptions.InvalidArgument(\"Invalid event config\");\n        });\n    }\n}\n\n/*\n * Dexie.js - a minimalistic wrapper for IndexedDB\n * ===============================================\n *\n * Copyright (c) 2014-2017 David Fahlander\n *\n * Version 2.0.4, Fri May 25 2018\n *\n * http://dexie.org\n *\n * Apache License Version 2.0, January 2004, http://www.apache.org/licenses/LICENSE-2.0\n *\n */\nvar DEXIE_VERSION = '2.0.4';\nvar maxString = String.fromCharCode(65535);\nvar maxKey = (function () { try {\n    IDBKeyRange.only([[]]);\n    return [[]];\n}\ncatch (e) {\n    return maxString;\n} })();\nvar minKey = -Infinity;\nvar INVALID_KEY_ARGUMENT = \"Invalid key provided. Keys must be of type string, number, Date or Array<string | number | Date>.\";\nvar STRING_EXPECTED = \"String expected.\";\nvar connections = [];\nvar isIEOrEdge = typeof navigator !== 'undefined' && /(MSIE|Trident|Edge)/.test(navigator.userAgent);\nvar hasIEDeleteObjectStoreBug = isIEOrEdge;\nvar hangsOnDeleteLargeKeyRange = isIEOrEdge;\nvar dexieStackFrameFilter = function (frame) { return !/(dexie\\.js|dexie\\.min\\.js)/.test(frame); };\nvar dbNamesDB; // Global database for backing Dexie.getDatabaseNames() on browser without indexedDB.webkitGetDatabaseNames() \n// Init debug\nsetDebug(debug, dexieStackFrameFilter);\nfunction Dexie(dbName, options) {\n    /// <param name=\"options\" type=\"Object\" optional=\"true\">Specify only if you wich to control which addons that should run on this instance</param>\n    var deps = Dexie.dependencies;\n    var opts = extend({\n        // Default Options\n        addons: Dexie.addons,\n        autoOpen: true,\n        indexedDB: deps.indexedDB,\n        IDBKeyRange: deps.IDBKeyRange // Backend IDBKeyRange api. Default to browser env.\n    }, options);\n    var addons = opts.addons, autoOpen = opts.autoOpen, indexedDB = opts.indexedDB, IDBKeyRange = opts.IDBKeyRange;\n    var globalSchema = this._dbSchema = {};\n    var versions = [];\n    var dbStoreNames = [];\n    var allTables = {};\n    ///<var type=\"IDBDatabase\" />\n    var idbdb = null; // Instance of IDBDatabase\n    var dbOpenError = null;\n    var isBeingOpened = false;\n    var onReadyBeingFired = null;\n    var openComplete = false;\n    var READONLY = \"readonly\", READWRITE = \"readwrite\";\n    var db = this;\n    var dbReadyResolve, dbReadyPromise = new Promise(function (resolve) {\n        dbReadyResolve = resolve;\n    }), cancelOpen, openCanceller = new Promise(function (_, reject) {\n        cancelOpen = reject;\n    });\n    var autoSchema = true;\n    var hasNativeGetDatabaseNames = !!getNativeGetDatabaseNamesFn(indexedDB), hasGetAll;\n    function init() {\n        // Default subscribers to \"versionchange\" and \"blocked\".\n        // Can be overridden by custom handlers. If custom handlers return false, these default\n        // behaviours will be prevented.\n        db.on(\"versionchange\", function (ev) {\n            // Default behavior for versionchange event is to close database connection.\n            // Caller can override this behavior by doing db.on(\"versionchange\", function(){ return false; });\n            // Let's not block the other window from making it's delete() or open() call.\n            // NOTE! This event is never fired in IE,Edge or Safari.\n            if (ev.newVersion > 0)\n                console.warn(\"Another connection wants to upgrade database '\" + db.name + \"'. Closing db now to resume the upgrade.\");\n            else\n                console.warn(\"Another connection wants to delete database '\" + db.name + \"'. Closing db now to resume the delete request.\");\n            db.close();\n            // In many web applications, it would be recommended to force window.reload()\n            // when this event occurs. To do that, subscribe to the versionchange event\n            // and call window.location.reload(true) if ev.newVersion > 0 (not a deletion)\n            // The reason for this is that your current web app obviously has old schema code that needs\n            // to be updated. Another window got a newer version of the app and needs to upgrade DB but\n            // your window is blocking it unless we close it here.\n        });\n        db.on(\"blocked\", function (ev) {\n            if (!ev.newVersion || ev.newVersion < ev.oldVersion)\n                console.warn(\"Dexie.delete('\" + db.name + \"') was blocked\");\n            else\n                console.warn(\"Upgrade '\" + db.name + \"' blocked by other connection holding version \" + ev.oldVersion / 10);\n        });\n    }\n    //\n    //\n    //\n    // ------------------------- Versioning Framework---------------------------\n    //\n    //\n    //\n    this.version = function (versionNumber) {\n        /// <param name=\"versionNumber\" type=\"Number\"></param>\n        /// <returns type=\"Version\"></returns>\n        if (idbdb || isBeingOpened)\n            throw new exceptions.Schema(\"Cannot add version when database is open\");\n        this.verno = Math.max(this.verno, versionNumber);\n        var versionInstance = versions.filter(function (v) { return v._cfg.version === versionNumber; })[0];\n        if (versionInstance)\n            return versionInstance;\n        versionInstance = new Version(versionNumber);\n        versions.push(versionInstance);\n        versions.sort(lowerVersionFirst);\n        // Disable autoschema mode, as at least one version is specified.\n        autoSchema = false;\n        return versionInstance;\n    };\n    function Version(versionNumber) {\n        this._cfg = {\n            version: versionNumber,\n            storesSource: null,\n            dbschema: {},\n            tables: {},\n            contentUpgrade: null\n        };\n        this.stores({}); // Derive earlier schemas by default.\n    }\n    extend(Version.prototype, {\n        stores: function (stores) {\n            /// <summary>\n            ///   Defines the schema for a particular version\n            /// </summary>\n            /// <param name=\"stores\" type=\"Object\">\n            /// Example: <br/>\n            ///   {users: \"id++,first,last,&amp;username,*email\", <br/>\n            ///   passwords: \"id++,&amp;username\"}<br/>\n            /// <br/>\n            /// Syntax: {Table: \"[primaryKey][++],[&amp;][*]index1,[&amp;][*]index2,...\"}<br/><br/>\n            /// Special characters:<br/>\n            ///  \"&amp;\"  means unique key, <br/>\n            ///  \"*\"  means value is multiEntry, <br/>\n            ///  \"++\" means auto-increment and only applicable for primary key <br/>\n            /// </param>\n            this._cfg.storesSource = this._cfg.storesSource ? extend(this._cfg.storesSource, stores) : stores;\n            // Derive stores from earlier versions if they are not explicitely specified as null or a new syntax.\n            var storesSpec = {};\n            versions.forEach(function (version) {\n                extend(storesSpec, version._cfg.storesSource);\n            });\n            var dbschema = (this._cfg.dbschema = {});\n            this._parseStoresSpec(storesSpec, dbschema);\n            // Update the latest schema to this version\n            // Update API\n            globalSchema = db._dbSchema = dbschema;\n            removeTablesApi([allTables, db, Transaction.prototype]); // Keep Transaction.prototype even though it should be depr.\n            setApiOnPlace([allTables, db, Transaction.prototype, this._cfg.tables], keys(dbschema), dbschema);\n            dbStoreNames = keys(dbschema);\n            return this;\n        },\n        upgrade: function (upgradeFunction) {\n            this._cfg.contentUpgrade = upgradeFunction;\n            return this;\n        },\n        _parseStoresSpec: function (stores, outSchema) {\n            keys(stores).forEach(function (tableName) {\n                if (stores[tableName] !== null) {\n                    var instanceTemplate = {};\n                    var indexes = parseIndexSyntax(stores[tableName]);\n                    var primKey = indexes.shift();\n                    if (primKey.multi)\n                        throw new exceptions.Schema(\"Primary key cannot be multi-valued\");\n                    if (primKey.keyPath)\n                        setByKeyPath(instanceTemplate, primKey.keyPath, primKey.auto ? 0 : primKey.keyPath);\n                    indexes.forEach(function (idx) {\n                        if (idx.auto)\n                            throw new exceptions.Schema(\"Only primary key can be marked as autoIncrement (++)\");\n                        if (!idx.keyPath)\n                            throw new exceptions.Schema(\"Index must have a name and cannot be an empty string\");\n                        setByKeyPath(instanceTemplate, idx.keyPath, idx.compound ? idx.keyPath.map(function () { return \"\"; }) : \"\");\n                    });\n                    outSchema[tableName] = new TableSchema(tableName, primKey, indexes, instanceTemplate);\n                }\n            });\n        }\n    });\n    function runUpgraders(oldVersion, idbtrans, reject) {\n        var trans = db._createTransaction(READWRITE, dbStoreNames, globalSchema);\n        trans.create(idbtrans);\n        trans._completion.catch(reject);\n        var rejectTransaction = trans._reject.bind(trans);\n        newScope(function () {\n            PSD.trans = trans;\n            if (oldVersion === 0) {\n                // Create tables:\n                keys(globalSchema).forEach(function (tableName) {\n                    createTable(idbtrans, tableName, globalSchema[tableName].primKey, globalSchema[tableName].indexes);\n                });\n                Promise.follow(function () { return db.on.populate.fire(trans); }).catch(rejectTransaction);\n            }\n            else\n                updateTablesAndIndexes(oldVersion, trans, idbtrans).catch(rejectTransaction);\n        });\n    }\n    function updateTablesAndIndexes(oldVersion, trans, idbtrans) {\n        // Upgrade version to version, step-by-step from oldest to newest version.\n        // Each transaction object will contain the table set that was current in that version (but also not-yet-deleted tables from its previous version)\n        var queue = [];\n        var oldVersionStruct = versions.filter(function (version) { return version._cfg.version === oldVersion; })[0];\n        if (!oldVersionStruct)\n            throw new exceptions.Upgrade(\"Dexie specification of currently installed DB version is missing\");\n        globalSchema = db._dbSchema = oldVersionStruct._cfg.dbschema;\n        var anyContentUpgraderHasRun = false;\n        var versToRun = versions.filter(function (v) { return v._cfg.version > oldVersion; });\n        versToRun.forEach(function (version) {\n            /// <param name=\"version\" type=\"Version\"></param>\n            queue.push(function () {\n                var oldSchema = globalSchema;\n                var newSchema = version._cfg.dbschema;\n                adjustToExistingIndexNames(oldSchema, idbtrans);\n                adjustToExistingIndexNames(newSchema, idbtrans);\n                globalSchema = db._dbSchema = newSchema;\n                var diff = getSchemaDiff(oldSchema, newSchema);\n                // Add tables           \n                diff.add.forEach(function (tuple) {\n                    createTable(idbtrans, tuple[0], tuple[1].primKey, tuple[1].indexes);\n                });\n                // Change tables\n                diff.change.forEach(function (change) {\n                    if (change.recreate) {\n                        throw new exceptions.Upgrade(\"Not yet support for changing primary key\");\n                    }\n                    else {\n                        var store = idbtrans.objectStore(change.name);\n                        // Add indexes\n                        change.add.forEach(function (idx) {\n                            addIndex(store, idx);\n                        });\n                        // Update indexes\n                        change.change.forEach(function (idx) {\n                            store.deleteIndex(idx.name);\n                            addIndex(store, idx);\n                        });\n                        // Delete indexes\n                        change.del.forEach(function (idxName) {\n                            store.deleteIndex(idxName);\n                        });\n                    }\n                });\n                if (version._cfg.contentUpgrade) {\n                    anyContentUpgraderHasRun = true;\n                    return Promise.follow(function () {\n                        version._cfg.contentUpgrade(trans);\n                    });\n                }\n            });\n            queue.push(function (idbtrans) {\n                if (!anyContentUpgraderHasRun || !hasIEDeleteObjectStoreBug) {\n                    var newSchema = version._cfg.dbschema;\n                    // Delete old tables\n                    deleteRemovedTables(newSchema, idbtrans);\n                }\n            });\n        });\n        // Now, create a queue execution engine\n        function runQueue() {\n            return queue.length ? Promise.resolve(queue.shift()(trans.idbtrans)).then(runQueue) :\n                Promise.resolve();\n        }\n        return runQueue().then(function () {\n            createMissingTables(globalSchema, idbtrans); // At last, make sure to create any missing tables. (Needed by addons that add stores to DB without specifying version)\n        });\n    }\n    function getSchemaDiff(oldSchema, newSchema) {\n        var diff = {\n            del: [],\n            add: [],\n            change: [] // Array of {name: tableName, recreate: newDefinition, del: delIndexNames, add: newIndexDefs, change: changedIndexDefs}\n        };\n        for (var table in oldSchema) {\n            if (!newSchema[table])\n                diff.del.push(table);\n        }\n        for (table in newSchema) {\n            var oldDef = oldSchema[table], newDef = newSchema[table];\n            if (!oldDef) {\n                diff.add.push([table, newDef]);\n            }\n            else {\n                var change = {\n                    name: table,\n                    def: newDef,\n                    recreate: false,\n                    del: [],\n                    add: [],\n                    change: []\n                };\n                if (oldDef.primKey.src !== newDef.primKey.src) {\n                    // Primary key has changed. Remove and re-add table.\n                    change.recreate = true;\n                    diff.change.push(change);\n                }\n                else {\n                    // Same primary key. Just find out what differs:\n                    var oldIndexes = oldDef.idxByName;\n                    var newIndexes = newDef.idxByName;\n                    for (var idxName in oldIndexes) {\n                        if (!newIndexes[idxName])\n                            change.del.push(idxName);\n                    }\n                    for (idxName in newIndexes) {\n                        var oldIdx = oldIndexes[idxName], newIdx = newIndexes[idxName];\n                        if (!oldIdx)\n                            change.add.push(newIdx);\n                        else if (oldIdx.src !== newIdx.src)\n                            change.change.push(newIdx);\n                    }\n                    if (change.del.length > 0 || change.add.length > 0 || change.change.length > 0) {\n                        diff.change.push(change);\n                    }\n                }\n            }\n        }\n        return diff;\n    }\n    function createTable(idbtrans, tableName, primKey, indexes) {\n        /// <param name=\"idbtrans\" type=\"IDBTransaction\"></param>\n        var store = idbtrans.db.createObjectStore(tableName, primKey.keyPath ? { keyPath: primKey.keyPath, autoIncrement: primKey.auto } : { autoIncrement: primKey.auto });\n        indexes.forEach(function (idx) { addIndex(store, idx); });\n        return store;\n    }\n    function createMissingTables(newSchema, idbtrans) {\n        keys(newSchema).forEach(function (tableName) {\n            if (!idbtrans.db.objectStoreNames.contains(tableName)) {\n                createTable(idbtrans, tableName, newSchema[tableName].primKey, newSchema[tableName].indexes);\n            }\n        });\n    }\n    function deleteRemovedTables(newSchema, idbtrans) {\n        for (var i = 0; i < idbtrans.db.objectStoreNames.length; ++i) {\n            var storeName = idbtrans.db.objectStoreNames[i];\n            if (newSchema[storeName] == null) {\n                idbtrans.db.deleteObjectStore(storeName);\n            }\n        }\n    }\n    function addIndex(store, idx) {\n        store.createIndex(idx.name, idx.keyPath, { unique: idx.unique, multiEntry: idx.multi });\n    }\n    //\n    //\n    //      Dexie Protected API\n    //\n    //\n    this._allTables = allTables;\n    this._createTransaction = function (mode, storeNames, dbschema, parentTransaction) {\n        return new Transaction(mode, storeNames, dbschema, parentTransaction);\n    };\n    /* Generate a temporary transaction when db operations are done outside a transaction scope.\n    */\n    function tempTransaction(mode, storeNames, fn) {\n        if (!openComplete && (!PSD.letThrough)) {\n            if (!isBeingOpened) {\n                if (!autoOpen)\n                    return rejection(new exceptions.DatabaseClosed());\n                db.open().catch(nop); // Open in background. If if fails, it will be catched by the final promise anyway.\n            }\n            return dbReadyPromise.then(function () { return tempTransaction(mode, storeNames, fn); });\n        }\n        else {\n            var trans = db._createTransaction(mode, storeNames, globalSchema);\n            try {\n                trans.create();\n            }\n            catch (ex) {\n                return rejection(ex);\n            }\n            return trans._promise(mode, function (resolve, reject) {\n                return newScope(function () {\n                    PSD.trans = trans;\n                    return fn(resolve, reject, trans);\n                });\n            }).then(function (result) {\n                // Instead of resolving value directly, wait with resolving it until transaction has completed.\n                // Otherwise the data would not be in the DB if requesting it in the then() operation.\n                // Specifically, to ensure that the following expression will work:\n                //\n                //   db.friends.put({name: \"Arne\"}).then(function () {\n                //       db.friends.where(\"name\").equals(\"Arne\").count(function(count) {\n                //           assert (count === 1);\n                //       });\n                //   });\n                //\n                return trans._completion.then(function () { return result; });\n            }); /*.catch(err => { // Don't do this as of now. If would affect bulk- and modify methods in a way that could be more intuitive. But wait! Maybe change in next major.\n                trans._reject(err);\n                return rejection(err);\n            });*/\n        }\n    }\n    this._whenReady = function (fn) {\n        return openComplete || PSD.letThrough ? fn() : new Promise(function (resolve, reject) {\n            if (!isBeingOpened) {\n                if (!autoOpen) {\n                    reject(new exceptions.DatabaseClosed());\n                    return;\n                }\n                db.open().catch(nop); // Open in background. If if fails, it will be catched by the final promise anyway.\n            }\n            dbReadyPromise.then(resolve, reject);\n        }).then(fn);\n    };\n    //\n    //\n    //\n    //\n    //      Dexie API\n    //\n    //\n    //\n    this.verno = 0;\n    this.open = function () {\n        if (isBeingOpened || idbdb)\n            return dbReadyPromise.then(function () { return dbOpenError ? rejection(dbOpenError) : db; });\n        debug && (openCanceller._stackHolder = getErrorWithStack()); // Let stacks point to when open() was called rather than where new Dexie() was called.\n        isBeingOpened = true;\n        dbOpenError = null;\n        openComplete = false;\n        // Function pointers to call when the core opening process completes.\n        var resolveDbReady = dbReadyResolve, \n        // upgradeTransaction to abort on failure.\n        upgradeTransaction = null;\n        return Promise.race([openCanceller, new Promise(function (resolve, reject) {\n                // Multiply db.verno with 10 will be needed to workaround upgrading bug in IE:\n                // IE fails when deleting objectStore after reading from it.\n                // A future version of Dexie.js will stopover an intermediate version to workaround this.\n                // At that point, we want to be backward compatible. Could have been multiplied with 2, but by using 10, it is easier to map the number to the real version number.\n                // If no API, throw!\n                if (!indexedDB)\n                    throw new exceptions.MissingAPI(\"indexedDB API not found. If using IE10+, make sure to run your code on a server URL \" +\n                        \"(not locally). If using old Safari versions, make sure to include indexedDB polyfill.\");\n                var req = autoSchema ? indexedDB.open(dbName) : indexedDB.open(dbName, Math.round(db.verno * 10));\n                if (!req)\n                    throw new exceptions.MissingAPI(\"IndexedDB API not available\"); // May happen in Safari private mode, see https://github.com/dfahlander/Dexie.js/issues/134\n                req.onerror = eventRejectHandler(reject);\n                req.onblocked = wrap(fireOnBlocked);\n                req.onupgradeneeded = wrap(function (e) {\n                    upgradeTransaction = req.transaction;\n                    if (autoSchema && !db._allowEmptyDB) {\n                        // Caller did not specify a version or schema. Doing that is only acceptable for opening alread existing databases.\n                        // If onupgradeneeded is called it means database did not exist. Reject the open() promise and make sure that we\n                        // do not create a new database by accident here.\n                        req.onerror = preventDefault; // Prohibit onabort error from firing before we're done!\n                        upgradeTransaction.abort(); // Abort transaction (would hope that this would make DB disappear but it doesnt.)\n                        // Close database and delete it.\n                        req.result.close();\n                        var delreq = indexedDB.deleteDatabase(dbName); // The upgrade transaction is atomic, and javascript is single threaded - meaning that there is no risk that we delete someone elses database here!\n                        delreq.onsuccess = delreq.onerror = wrap(function () {\n                            reject(new exceptions.NoSuchDatabase(\"Database \" + dbName + \" doesnt exist\"));\n                        });\n                    }\n                    else {\n                        upgradeTransaction.onerror = eventRejectHandler(reject);\n                        var oldVer = e.oldVersion > Math.pow(2, 62) ? 0 : e.oldVersion; // Safari 8 fix.\n                        runUpgraders(oldVer / 10, upgradeTransaction, reject, req);\n                    }\n                }, reject);\n                req.onsuccess = wrap(function () {\n                    // Core opening procedure complete. Now let's just record some stuff.\n                    upgradeTransaction = null;\n                    idbdb = req.result;\n                    connections.push(db); // Used for emulating versionchange event on IE/Edge/Safari.\n                    if (autoSchema)\n                        readGlobalSchema();\n                    else if (idbdb.objectStoreNames.length > 0) {\n                        try {\n                            adjustToExistingIndexNames(globalSchema, idbdb.transaction(safariMultiStoreFix(idbdb.objectStoreNames), READONLY));\n                        }\n                        catch (e) {\n                            // Safari may bail out if > 1 store names. However, this shouldnt be a showstopper. Issue #120.\n                        }\n                    }\n                    idbdb.onversionchange = wrap(function (ev) {\n                        db._vcFired = true; // detect implementations that not support versionchange (IE/Edge/Safari)\n                        db.on(\"versionchange\").fire(ev);\n                    });\n                    if (!hasNativeGetDatabaseNames && dbName !== '__dbnames') {\n                        dbNamesDB.dbnames.put({ name: dbName }).catch(nop);\n                    }\n                    resolve();\n                }, reject);\n            })]).then(function () {\n            // Before finally resolving the dbReadyPromise and this promise,\n            // call and await all on('ready') subscribers:\n            // Dexie.vip() makes subscribers able to use the database while being opened.\n            // This is a must since these subscribers take part of the opening procedure.\n            onReadyBeingFired = [];\n            return Promise.resolve(Dexie.vip(db.on.ready.fire)).then(function fireRemainders() {\n                if (onReadyBeingFired.length > 0) {\n                    // In case additional subscribers to db.on('ready') were added during the time db.on.ready.fire was executed.\n                    var remainders = onReadyBeingFired.reduce(promisableChain, nop);\n                    onReadyBeingFired = [];\n                    return Promise.resolve(Dexie.vip(remainders)).then(fireRemainders);\n                }\n            });\n        }).finally(function () {\n            onReadyBeingFired = null;\n        }).then(function () {\n            // Resolve the db.open() with the db instance.\n            isBeingOpened = false;\n            return db;\n        }).catch(function (err) {\n            try {\n                // Did we fail within onupgradeneeded? Make sure to abort the upgrade transaction so it doesnt commit.\n                upgradeTransaction && upgradeTransaction.abort();\n            }\n            catch (e) { }\n            isBeingOpened = false; // Set before calling db.close() so that it doesnt reject openCanceller again (leads to unhandled rejection event).\n            db.close(); // Closes and resets idbdb, removes connections, resets dbReadyPromise and openCanceller so that a later db.open() is fresh.\n            // A call to db.close() may have made on-ready subscribers fail. Use dbOpenError if set, since err could be a follow-up error on that.\n            dbOpenError = err; // Record the error. It will be used to reject further promises of db operations.\n            return rejection(dbOpenError);\n        }).finally(function () {\n            openComplete = true;\n            resolveDbReady(); // dbReadyPromise is resolved no matter if open() rejects or resolved. It's just to wake up waiters.\n        });\n    };\n    this.close = function () {\n        var idx = connections.indexOf(db);\n        if (idx >= 0)\n            connections.splice(idx, 1);\n        if (idbdb) {\n            try {\n                idbdb.close();\n            }\n            catch (e) { }\n            idbdb = null;\n        }\n        autoOpen = false;\n        dbOpenError = new exceptions.DatabaseClosed();\n        if (isBeingOpened)\n            cancelOpen(dbOpenError);\n        // Reset dbReadyPromise promise:\n        dbReadyPromise = new Promise(function (resolve) {\n            dbReadyResolve = resolve;\n        });\n        openCanceller = new Promise(function (_, reject) {\n            cancelOpen = reject;\n        });\n    };\n    this.delete = function () {\n        var hasArguments = arguments.length > 0;\n        return new Promise(function (resolve, reject) {\n            if (hasArguments)\n                throw new exceptions.InvalidArgument(\"Arguments not allowed in db.delete()\");\n            if (isBeingOpened) {\n                dbReadyPromise.then(doDelete);\n            }\n            else {\n                doDelete();\n            }\n            function doDelete() {\n                db.close();\n                var req = indexedDB.deleteDatabase(dbName);\n                req.onsuccess = wrap(function () {\n                    if (!hasNativeGetDatabaseNames) {\n                        dbNamesDB.dbnames.delete(dbName).catch(nop);\n                    }\n                    resolve();\n                });\n                req.onerror = eventRejectHandler(reject);\n                req.onblocked = fireOnBlocked;\n            }\n        });\n    };\n    this.backendDB = function () {\n        return idbdb;\n    };\n    this.isOpen = function () {\n        return idbdb !== null;\n    };\n    this.hasBeenClosed = function () {\n        return dbOpenError && (dbOpenError instanceof exceptions.DatabaseClosed);\n    };\n    this.hasFailed = function () {\n        return dbOpenError !== null;\n    };\n    this.dynamicallyOpened = function () {\n        return autoSchema;\n    };\n    //\n    // Properties\n    //\n    this.name = dbName;\n    // db.tables - an array of all Table instances.\n    props(this, {\n        tables: {\n            get: function () {\n                /// <returns type=\"Array\" elementType=\"Table\" />\n                return keys(allTables).map(function (name) { return allTables[name]; });\n            }\n        }\n    });\n    //\n    // Events\n    //\n    this.on = Events(this, \"populate\", \"blocked\", \"versionchange\", { ready: [promisableChain, nop] });\n    this.on.ready.subscribe = override(this.on.ready.subscribe, function (subscribe) {\n        return function (subscriber, bSticky) {\n            Dexie.vip(function () {\n                if (openComplete) {\n                    // Database already open. Call subscriber asap.\n                    if (!dbOpenError)\n                        Promise.resolve().then(subscriber);\n                    // bSticky: Also subscribe to future open sucesses (after close / reopen) \n                    if (bSticky)\n                        subscribe(subscriber);\n                }\n                else if (onReadyBeingFired) {\n                    // db.on('ready') subscribers are currently being executed and have not yet resolved or rejected\n                    onReadyBeingFired.push(subscriber);\n                    if (bSticky)\n                        subscribe(subscriber);\n                }\n                else {\n                    // Database not yet open. Subscribe to it.\n                    subscribe(subscriber);\n                    // If bSticky is falsy, make sure to unsubscribe subscriber when fired once.\n                    if (!bSticky)\n                        subscribe(function unsubscribe() {\n                            db.on.ready.unsubscribe(subscriber);\n                            db.on.ready.unsubscribe(unsubscribe);\n                        });\n                }\n            });\n        };\n    });\n    this.transaction = function () {\n        /// <summary>\n        ///\n        /// </summary>\n        /// <param name=\"mode\" type=\"String\">\"r\" for readonly, or \"rw\" for readwrite</param>\n        /// <param name=\"tableInstances\">Table instance, Array of Table instances, String or String Array of object stores to include in the transaction</param>\n        /// <param name=\"scopeFunc\" type=\"Function\">Function to execute with transaction</param>\n        var args = extractTransactionArgs.apply(this, arguments);\n        return this._transaction.apply(this, args);\n    };\n    function extractTransactionArgs(mode, _tableArgs_, scopeFunc) {\n        // Let table arguments be all arguments between mode and last argument.\n        var i = arguments.length;\n        if (i < 2)\n            throw new exceptions.InvalidArgument(\"Too few arguments\");\n        // Prevent optimzation killer (https://github.com/petkaantonov/bluebird/wiki/Optimization-killers#32-leaking-arguments)\n        // and clone arguments except the first one into local var 'args'.\n        var args = new Array(i - 1);\n        while (--i)\n            args[i - 1] = arguments[i];\n        // Let scopeFunc be the last argument and pop it so that args now only contain the table arguments.\n        scopeFunc = args.pop();\n        var tables = flatten(args); // Support using array as middle argument, or a mix of arrays and non-arrays.\n        return [mode, tables, scopeFunc];\n    }\n    this._transaction = function (mode, tables, scopeFunc) {\n        var parentTransaction = PSD.trans;\n        // Check if parent transactions is bound to this db instance, and if caller wants to reuse it\n        if (!parentTransaction || parentTransaction.db !== db || mode.indexOf('!') !== -1)\n            parentTransaction = null;\n        var onlyIfCompatible = mode.indexOf('?') !== -1;\n        mode = mode.replace('!', '').replace('?', ''); // Ok. Will change arguments[0] as well but we wont touch arguments henceforth.\n        try {\n            //\n            // Get storeNames from arguments. Either through given table instances, or through given table names.\n            //\n            var storeNames = tables.map(function (table) {\n                var storeName = table instanceof Table ? table.name : table;\n                if (typeof storeName !== 'string')\n                    throw new TypeError(\"Invalid table argument to Dexie.transaction(). Only Table or String are allowed\");\n                return storeName;\n            });\n            //\n            // Resolve mode. Allow shortcuts \"r\" and \"rw\".\n            //\n            if (mode == \"r\" || mode == READONLY)\n                mode = READONLY;\n            else if (mode == \"rw\" || mode == READWRITE)\n                mode = READWRITE;\n            else\n                throw new exceptions.InvalidArgument(\"Invalid transaction mode: \" + mode);\n            if (parentTransaction) {\n                // Basic checks\n                if (parentTransaction.mode === READONLY && mode === READWRITE) {\n                    if (onlyIfCompatible) {\n                        // Spawn new transaction instead.\n                        parentTransaction = null;\n                    }\n                    else\n                        throw new exceptions.SubTransaction(\"Cannot enter a sub-transaction with READWRITE mode when parent transaction is READONLY\");\n                }\n                if (parentTransaction) {\n                    storeNames.forEach(function (storeName) {\n                        if (parentTransaction && parentTransaction.storeNames.indexOf(storeName) === -1) {\n                            if (onlyIfCompatible) {\n                                // Spawn new transaction instead.\n                                parentTransaction = null;\n                            }\n                            else\n                                throw new exceptions.SubTransaction(\"Table \" + storeName +\n                                    \" not included in parent transaction.\");\n                        }\n                    });\n                }\n                if (onlyIfCompatible && parentTransaction && !parentTransaction.active) {\n                    // '?' mode should not keep using an inactive transaction.\n                    parentTransaction = null;\n                }\n            }\n        }\n        catch (e) {\n            return parentTransaction ?\n                parentTransaction._promise(null, function (_, reject) { reject(e); }) :\n                rejection(e);\n        }\n        // If this is a sub-transaction, lock the parent and then launch the sub-transaction.\n        return (parentTransaction ?\n            parentTransaction._promise(mode, enterTransactionScope, \"lock\") :\n            PSD.trans ?\n                // no parent transaction despite PSD.trans exists. Make sure also\n                // that the zone we create is not a sub-zone of current, because\n                // Promise.follow() should not wait for it if so.\n                usePSD(PSD.transless, function () { return db._whenReady(enterTransactionScope); }) :\n                db._whenReady(enterTransactionScope));\n        function enterTransactionScope() {\n            return Promise.resolve().then(function () {\n                // Keep a pointer to last non-transactional PSD to use if someone calls Dexie.ignoreTransaction().\n                var transless = PSD.transless || PSD;\n                // Our transaction.\n                //return new Promise((resolve, reject) => {\n                var trans = db._createTransaction(mode, storeNames, globalSchema, parentTransaction);\n                // Let the transaction instance be part of a Promise-specific data (PSD) value.\n                var zoneProps = {\n                    trans: trans,\n                    transless: transless\n                };\n                if (parentTransaction) {\n                    // Emulate transaction commit awareness for inner transaction (must 'commit' when the inner transaction has no more operations ongoing)\n                    trans.idbtrans = parentTransaction.idbtrans;\n                }\n                else {\n                    trans.create(); // Create the backend transaction so that complete() or error() will trigger even if no operation is made upon it.\n                }\n                // Support for native async await.\n                if (scopeFunc.constructor === AsyncFunction) {\n                    incrementExpectedAwaits();\n                }\n                var returnValue;\n                var promiseFollowed = Promise.follow(function () {\n                    // Finally, call the scope function with our table and transaction arguments.\n                    returnValue = scopeFunc.call(trans, trans);\n                    if (returnValue) {\n                        if (returnValue.constructor === NativePromise) {\n                            var decrementor = decrementExpectedAwaits.bind(null, null);\n                            returnValue.then(decrementor, decrementor);\n                        }\n                        else if (typeof returnValue.next === 'function' && typeof returnValue.throw === 'function') {\n                            // scopeFunc returned an iterator with throw-support. Handle yield as await.\n                            returnValue = awaitIterator(returnValue);\n                        }\n                    }\n                }, zoneProps);\n                return (returnValue && typeof returnValue.then === 'function' ?\n                    // Promise returned. User uses promise-style transactions.\n                    Promise.resolve(returnValue).then(function (x) { return trans.active ?\n                        x // Transaction still active. Continue.\n                        : rejection(new exceptions.PrematureCommit(\"Transaction committed too early. See http://bit.ly/2kdckMn\")); })\n                    // No promise returned. Wait for all outstanding promises before continuing. \n                    : promiseFollowed.then(function () { return returnValue; })).then(function (x) {\n                    // sub transactions don't react to idbtrans.oncomplete. We must trigger a completion:\n                    if (parentTransaction)\n                        trans._resolve();\n                    // wait for trans._completion\n                    // (if root transaction, this means 'complete' event. If sub-transaction, we've just fired it ourselves)\n                    return trans._completion.then(function () { return x; });\n                }).catch(function (e) {\n                    trans._reject(e); // Yes, above then-handler were maybe not called because of an unhandled rejection in scopeFunc!\n                    return rejection(e);\n                });\n            });\n        }\n    };\n    this.table = function (tableName) {\n        /// <returns type=\"Table\"></returns>\n        if (!hasOwn(allTables, tableName)) {\n            throw new exceptions.InvalidTable(\"Table \" + tableName + \" does not exist\");\n        }\n        return allTables[tableName];\n    };\n    //\n    //\n    //\n    // Table Class\n    //\n    //\n    //\n    function Table(name, tableSchema, optionalTrans) {\n        /// <param name=\"name\" type=\"String\"></param>\n        this.name = name;\n        this.schema = tableSchema;\n        this._tx = optionalTrans;\n        this.hook = allTables[name] ? allTables[name].hook : Events(null, {\n            \"creating\": [hookCreatingChain, nop],\n            \"reading\": [pureFunctionChain, mirror],\n            \"updating\": [hookUpdatingChain, nop],\n            \"deleting\": [hookDeletingChain, nop]\n        });\n    }\n    function BulkErrorHandlerCatchAll(errorList, done, supportHooks) {\n        return (supportHooks ? hookedEventRejectHandler : eventRejectHandler)(function (e) {\n            errorList.push(e);\n            done && done();\n        });\n    }\n    function bulkDelete(idbstore, trans, keysOrTuples, hasDeleteHook, deletingHook) {\n        // If hasDeleteHook, keysOrTuples must be an array of tuples: [[key1, value2],[key2,value2],...],\n        // else keysOrTuples must be just an array of keys: [key1, key2, ...].\n        return new Promise(function (resolve, reject) {\n            var len = keysOrTuples.length, lastItem = len - 1;\n            if (len === 0)\n                return resolve();\n            if (!hasDeleteHook) {\n                for (var i = 0; i < len; ++i) {\n                    var req = idbstore.delete(keysOrTuples[i]);\n                    req.onerror = eventRejectHandler(reject);\n                    if (i === lastItem)\n                        req.onsuccess = wrap(function () { return resolve(); });\n                }\n            }\n            else {\n                var hookCtx, errorHandler = hookedEventRejectHandler(reject), successHandler = hookedEventSuccessHandler(null);\n                tryCatch(function () {\n                    for (var i = 0; i < len; ++i) {\n                        hookCtx = { onsuccess: null, onerror: null };\n                        var tuple = keysOrTuples[i];\n                        deletingHook.call(hookCtx, tuple[0], tuple[1], trans);\n                        var req = idbstore.delete(tuple[0]);\n                        req._hookCtx = hookCtx;\n                        req.onerror = errorHandler;\n                        if (i === lastItem)\n                            req.onsuccess = hookedEventSuccessHandler(resolve);\n                        else\n                            req.onsuccess = successHandler;\n                    }\n                }, function (err) {\n                    hookCtx.onerror && hookCtx.onerror(err);\n                    throw err;\n                });\n            }\n        });\n    }\n    props(Table.prototype, {\n        //\n        // Table Protected Methods\n        //\n        _trans: function getTransaction(mode, fn, writeLocked) {\n            var trans = this._tx || PSD.trans;\n            return trans && trans.db === db ?\n                trans === PSD.trans ?\n                    trans._promise(mode, fn, writeLocked) :\n                    newScope(function () { return trans._promise(mode, fn, writeLocked); }, { trans: trans, transless: PSD.transless || PSD }) :\n                tempTransaction(mode, [this.name], fn);\n        },\n        _idbstore: function getIDBObjectStore(mode, fn, writeLocked) {\n            var tableName = this.name;\n            function supplyIdbStore(resolve, reject, trans) {\n                if (trans.storeNames.indexOf(tableName) === -1)\n                    throw new exceptions.NotFound(\"Table\" + tableName + \" not part of transaction\");\n                return fn(resolve, reject, trans.idbtrans.objectStore(tableName), trans);\n            }\n            return this._trans(mode, supplyIdbStore, writeLocked);\n        },\n        //\n        // Table Public Methods\n        //\n        get: function (keyOrCrit, cb) {\n            if (keyOrCrit && keyOrCrit.constructor === Object)\n                return this.where(keyOrCrit).first(cb);\n            var self = this;\n            return this._idbstore(READONLY, function (resolve, reject, idbstore) {\n                var req = idbstore.get(keyOrCrit);\n                req.onerror = eventRejectHandler(reject);\n                req.onsuccess = wrap(function () {\n                    resolve(self.hook.reading.fire(req.result));\n                }, reject);\n            }).then(cb);\n        },\n        where: function (indexOrCrit) {\n            if (typeof indexOrCrit === 'string')\n                return new WhereClause(this, indexOrCrit);\n            if (isArray(indexOrCrit))\n                return new WhereClause(this, \"[\" + indexOrCrit.join('+') + \"]\");\n            // indexOrCrit is an object map of {[keyPath]:value} \n            var keyPaths = keys(indexOrCrit);\n            if (keyPaths.length === 1)\n                // Only one critera. This was the easy case:\n                return this\n                    .where(keyPaths[0])\n                    .equals(indexOrCrit[keyPaths[0]]);\n            // Multiple criterias.\n            // Let's try finding a compound index that matches all keyPaths in\n            // arbritary order:\n            var compoundIndex = this.schema.indexes.concat(this.schema.primKey).filter(function (ix) {\n                return ix.compound &&\n                    keyPaths.every(function (keyPath) { return ix.keyPath.indexOf(keyPath) >= 0; }) &&\n                    ix.keyPath.every(function (keyPath) { return keyPaths.indexOf(keyPath) >= 0; });\n            })[0];\n            if (compoundIndex && maxKey !== maxString)\n                // Cool! We found such compound index\n                // and this browser supports compound indexes (maxKey !== maxString)!\n                return this\n                    .where(compoundIndex.name)\n                    .equals(compoundIndex.keyPath.map(function (kp) { return indexOrCrit[kp]; }));\n            if (!compoundIndex)\n                console.warn(\"The query \" + JSON.stringify(indexOrCrit) + \" on \" + this.name + \" would benefit of a \" +\n                    (\"compound index [\" + keyPaths.join('+') + \"]\"));\n            // Ok, now let's fallback to finding at least one matching index\n            // and filter the rest.\n            var idxByName = this.schema.idxByName;\n            var simpleIndex = keyPaths.reduce(function (r, keyPath) { return [\n                r[0] || idxByName[keyPath],\n                r[0] || !idxByName[keyPath] ?\n                    combine(r[1], function (x) { return '' + getByKeyPath(x, keyPath) ==\n                        '' + indexOrCrit[keyPath]; })\n                    : r[1]\n            ]; }, [null, null]);\n            var idx = simpleIndex[0];\n            return idx ?\n                this.where(idx.name).equals(indexOrCrit[idx.keyPath])\n                    .filter(simpleIndex[1]) :\n                compoundIndex ?\n                    this.filter(simpleIndex[1]) : // Has compound but browser bad. Allow filter.\n                    this.where(keyPaths).equals(''); // No index at all. Fail lazily.\n        },\n        count: function (cb) {\n            return this.toCollection().count(cb);\n        },\n        offset: function (offset) {\n            return this.toCollection().offset(offset);\n        },\n        limit: function (numRows) {\n            return this.toCollection().limit(numRows);\n        },\n        reverse: function () {\n            return this.toCollection().reverse();\n        },\n        filter: function (filterFunction) {\n            return this.toCollection().and(filterFunction);\n        },\n        each: function (fn) {\n            return this.toCollection().each(fn);\n        },\n        toArray: function (cb) {\n            return this.toCollection().toArray(cb);\n        },\n        orderBy: function (index) {\n            return new Collection(new WhereClause(this, isArray(index) ?\n                \"[\" + index.join('+') + \"]\" :\n                index));\n        },\n        toCollection: function () {\n            return new Collection(new WhereClause(this));\n        },\n        mapToClass: function (constructor, structure) {\n            /// <summary>\n            ///     Map table to a javascript constructor function. Objects returned from the database will be instances of this class, making\n            ///     it possible to the instanceOf operator as well as extending the class using constructor.prototype.method = function(){...}.\n            /// </summary>\n            /// <param name=\"constructor\">Constructor function representing the class.</param>\n            /// <param name=\"structure\" optional=\"true\">Helps IDE code completion by knowing the members that objects contain and not just the indexes. Also\n            /// know what type each member has. Example: {name: String, emailAddresses: [String], password}</param>\n            this.schema.mappedClass = constructor;\n            var instanceTemplate = Object.create(constructor.prototype);\n            if (structure) {\n                // structure and instanceTemplate is for IDE code competion only while constructor.prototype is for actual inheritance.\n                applyStructure(instanceTemplate, structure);\n            }\n            this.schema.instanceTemplate = instanceTemplate;\n            // Now, subscribe to the when(\"reading\") event to make all objects that come out from this table inherit from given class\n            // no matter which method to use for reading (Table.get() or Table.where(...)... )\n            var readHook = function (obj) {\n                if (!obj)\n                    return obj; // No valid object. (Value is null). Return as is.\n                // Create a new object that derives from constructor:\n                var res = Object.create(constructor.prototype);\n                // Clone members:\n                for (var m in obj)\n                    if (hasOwn(obj, m))\n                        try {\n                            res[m] = obj[m];\n                        }\n                        catch (_) { }\n                return res;\n            };\n            if (this.schema.readHook) {\n                this.hook.reading.unsubscribe(this.schema.readHook);\n            }\n            this.schema.readHook = readHook;\n            this.hook(\"reading\", readHook);\n            return constructor;\n        },\n        defineClass: function (structure) {\n            /// <summary>\n            ///     Define all members of the class that represents the table. This will help code completion of when objects are read from the database\n            ///     as well as making it possible to extend the prototype of the returned constructor function.\n            /// </summary>\n            /// <param name=\"structure\">Helps IDE code completion by knowing the members that objects contain and not just the indexes. Also\n            /// know what type each member has. Example: {name: String, emailAddresses: [String], properties: {shoeSize: Number}}</param>\n            return this.mapToClass(Dexie.defineClass(structure), structure);\n        },\n        bulkDelete: function (keys$$1) {\n            if (this.hook.deleting.fire === nop) {\n                return this._idbstore(READWRITE, function (resolve, reject, idbstore, trans) {\n                    resolve(bulkDelete(idbstore, trans, keys$$1, false, nop));\n                });\n            }\n            else {\n                return this\n                    .where(':id')\n                    .anyOf(keys$$1)\n                    .delete()\n                    .then(function () { }); // Resolve with undefined.\n            }\n        },\n        bulkPut: function (objects, keys$$1) {\n            var _this = this;\n            return this._idbstore(READWRITE, function (resolve, reject, idbstore) {\n                if (!idbstore.keyPath && !_this.schema.primKey.auto && !keys$$1)\n                    throw new exceptions.InvalidArgument(\"bulkPut() with non-inbound keys requires keys array in second argument\");\n                if (idbstore.keyPath && keys$$1)\n                    throw new exceptions.InvalidArgument(\"bulkPut(): keys argument invalid on tables with inbound keys\");\n                if (keys$$1 && keys$$1.length !== objects.length)\n                    throw new exceptions.InvalidArgument(\"Arguments objects and keys must have the same length\");\n                if (objects.length === 0)\n                    return resolve(); // Caller provided empty list.\n                var done = function (result) {\n                    if (errorList.length === 0)\n                        resolve(result);\n                    else\n                        reject(new BulkError(_this.name + \".bulkPut(): \" + errorList.length + \" of \" + numObjs + \" operations failed\", errorList));\n                };\n                var req, errorList = [], errorHandler, numObjs = objects.length, table = _this;\n                if (_this.hook.creating.fire === nop && _this.hook.updating.fire === nop) {\n                    //\n                    // Standard Bulk (no 'creating' or 'updating' hooks to care about)\n                    //\n                    errorHandler = BulkErrorHandlerCatchAll(errorList);\n                    for (var i = 0, l = objects.length; i < l; ++i) {\n                        req = keys$$1 ? idbstore.put(objects[i], keys$$1[i]) : idbstore.put(objects[i]);\n                        req.onerror = errorHandler;\n                    }\n                    // Only need to catch success or error on the last operation\n                    // according to the IDB spec.\n                    req.onerror = BulkErrorHandlerCatchAll(errorList, done);\n                    req.onsuccess = eventSuccessHandler(done);\n                }\n                else {\n                    var effectiveKeys = keys$$1 || idbstore.keyPath && objects.map(function (o) { return getByKeyPath(o, idbstore.keyPath); });\n                    // Generate map of {[key]: object}\n                    var objectLookup = effectiveKeys && arrayToObject(effectiveKeys, function (key, i) { return key != null && [key, objects[i]]; });\n                    var promise = !effectiveKeys ?\n                        // Auto-incremented key-less objects only without any keys argument.\n                        table.bulkAdd(objects) :\n                        // Keys provided. Either as inbound in provided objects, or as a keys argument.\n                        // Begin with updating those that exists in DB:\n                        table.where(':id').anyOf(effectiveKeys.filter(function (key) { return key != null; })).modify(function () {\n                            this.value = objectLookup[this.primKey];\n                            objectLookup[this.primKey] = null; // Mark as \"don't add this\"\n                        }).catch(ModifyError, function (e) {\n                            errorList = e.failures; // No need to concat here. These are the first errors added.\n                        }).then(function () {\n                            // Now, let's examine which items didnt exist so we can add them:\n                            var objsToAdd = [], keysToAdd = keys$$1 && [];\n                            // Iterate backwards. Why? Because if same key was used twice, just add the last one.\n                            for (var i = effectiveKeys.length - 1; i >= 0; --i) {\n                                var key = effectiveKeys[i];\n                                if (key == null || objectLookup[key]) {\n                                    objsToAdd.push(objects[i]);\n                                    keys$$1 && keysToAdd.push(key);\n                                    if (key != null)\n                                        objectLookup[key] = null; // Mark as \"dont add again\"\n                                }\n                            }\n                            // The items are in reverse order so reverse them before adding.\n                            // Could be important in order to get auto-incremented keys the way the caller\n                            // would expect. Could have used unshift instead of push()/reverse(),\n                            // but: http://jsperf.com/unshift-vs-reverse\n                            objsToAdd.reverse();\n                            keys$$1 && keysToAdd.reverse();\n                            return table.bulkAdd(objsToAdd, keysToAdd);\n                        }).then(function (lastAddedKey) {\n                            // Resolve with key of the last object in given arguments to bulkPut():\n                            var lastEffectiveKey = effectiveKeys[effectiveKeys.length - 1]; // Key was provided.\n                            return lastEffectiveKey != null ? lastEffectiveKey : lastAddedKey;\n                        });\n                    promise.then(done).catch(BulkError, function (e) {\n                        // Concat failure from ModifyError and reject using our 'done' method.\n                        errorList = errorList.concat(e.failures);\n                        done();\n                    }).catch(reject);\n                }\n            }, \"locked\"); // If called from transaction scope, lock transaction til all steps are done.\n        },\n        bulkAdd: function (objects, keys$$1) {\n            var self = this, creatingHook = this.hook.creating.fire;\n            return this._idbstore(READWRITE, function (resolve, reject, idbstore, trans) {\n                if (!idbstore.keyPath && !self.schema.primKey.auto && !keys$$1)\n                    throw new exceptions.InvalidArgument(\"bulkAdd() with non-inbound keys requires keys array in second argument\");\n                if (idbstore.keyPath && keys$$1)\n                    throw new exceptions.InvalidArgument(\"bulkAdd(): keys argument invalid on tables with inbound keys\");\n                if (keys$$1 && keys$$1.length !== objects.length)\n                    throw new exceptions.InvalidArgument(\"Arguments objects and keys must have the same length\");\n                if (objects.length === 0)\n                    return resolve(); // Caller provided empty list.\n                function done(result) {\n                    if (errorList.length === 0)\n                        resolve(result);\n                    else\n                        reject(new BulkError(self.name + \".bulkAdd(): \" + errorList.length + \" of \" + numObjs + \" operations failed\", errorList));\n                }\n                var req, errorList = [], errorHandler, successHandler, numObjs = objects.length;\n                if (creatingHook !== nop) {\n                    //\n                    // There are subscribers to hook('creating')\n                    // Must behave as documented.\n                    //\n                    var keyPath = idbstore.keyPath, hookCtx;\n                    errorHandler = BulkErrorHandlerCatchAll(errorList, null, true);\n                    successHandler = hookedEventSuccessHandler(null);\n                    tryCatch(function () {\n                        for (var i = 0, l = objects.length; i < l; ++i) {\n                            hookCtx = { onerror: null, onsuccess: null };\n                            var key = keys$$1 && keys$$1[i];\n                            var obj = objects[i], effectiveKey = keys$$1 ? key : keyPath ? getByKeyPath(obj, keyPath) : undefined, keyToUse = creatingHook.call(hookCtx, effectiveKey, obj, trans);\n                            if (effectiveKey == null && keyToUse != null) {\n                                if (keyPath) {\n                                    obj = deepClone(obj);\n                                    setByKeyPath(obj, keyPath, keyToUse);\n                                }\n                                else {\n                                    key = keyToUse;\n                                }\n                            }\n                            req = key != null ? idbstore.add(obj, key) : idbstore.add(obj);\n                            req._hookCtx = hookCtx;\n                            if (i < l - 1) {\n                                req.onerror = errorHandler;\n                                if (hookCtx.onsuccess)\n                                    req.onsuccess = successHandler;\n                            }\n                        }\n                    }, function (err) {\n                        hookCtx.onerror && hookCtx.onerror(err);\n                        throw err;\n                    });\n                    req.onerror = BulkErrorHandlerCatchAll(errorList, done, true);\n                    req.onsuccess = hookedEventSuccessHandler(done);\n                }\n                else {\n                    //\n                    // Standard Bulk (no 'creating' hook to care about)\n                    //\n                    errorHandler = BulkErrorHandlerCatchAll(errorList);\n                    for (var i = 0, l = objects.length; i < l; ++i) {\n                        req = keys$$1 ? idbstore.add(objects[i], keys$$1[i]) : idbstore.add(objects[i]);\n                        req.onerror = errorHandler;\n                    }\n                    // Only need to catch success or error on the last operation\n                    // according to the IDB spec.\n                    req.onerror = BulkErrorHandlerCatchAll(errorList, done);\n                    req.onsuccess = eventSuccessHandler(done);\n                }\n            });\n        },\n        add: function (obj, key) {\n            /// <summary>\n            ///   Add an object to the database. In case an object with same primary key already exists, the object will not be added.\n            /// </summary>\n            /// <param name=\"obj\" type=\"Object\">A javascript object to insert</param>\n            /// <param name=\"key\" optional=\"true\">Primary key</param>\n            var creatingHook = this.hook.creating.fire;\n            return this._idbstore(READWRITE, function (resolve, reject, idbstore, trans) {\n                var hookCtx = { onsuccess: null, onerror: null };\n                if (creatingHook !== nop) {\n                    var effectiveKey = (key != null) ? key : (idbstore.keyPath ? getByKeyPath(obj, idbstore.keyPath) : undefined);\n                    var keyToUse = creatingHook.call(hookCtx, effectiveKey, obj, trans); // Allow subscribers to when(\"creating\") to generate the key.\n                    if (effectiveKey == null && keyToUse != null) {\n                        if (idbstore.keyPath)\n                            setByKeyPath(obj, idbstore.keyPath, keyToUse);\n                        else\n                            key = keyToUse;\n                    }\n                }\n                try {\n                    var req = key != null ? idbstore.add(obj, key) : idbstore.add(obj);\n                    req._hookCtx = hookCtx;\n                    req.onerror = hookedEventRejectHandler(reject);\n                    req.onsuccess = hookedEventSuccessHandler(function (result) {\n                        // TODO: Remove these two lines in next major release (2.0?)\n                        // It's no good practice to have side effects on provided parameters\n                        var keyPath = idbstore.keyPath;\n                        if (keyPath)\n                            setByKeyPath(obj, keyPath, result);\n                        resolve(result);\n                    });\n                }\n                catch (e) {\n                    if (hookCtx.onerror)\n                        hookCtx.onerror(e);\n                    throw e;\n                }\n            });\n        },\n        put: function (obj, key) {\n            var _this = this;\n            /// <summary>\n            ///   Add an object to the database but in case an object with same primary key alread exists, the existing one will get updated.\n            /// </summary>\n            /// <param name=\"obj\" type=\"Object\">A javascript object to insert or update</param>\n            /// <param name=\"key\" optional=\"true\">Primary key</param>\n            var creatingHook = this.hook.creating.fire, updatingHook = this.hook.updating.fire;\n            if (creatingHook !== nop || updatingHook !== nop) {\n                //\n                // People listens to when(\"creating\") or when(\"updating\") events!\n                // We must know whether the put operation results in an CREATE or UPDATE.\n                //\n                var keyPath = this.schema.primKey.keyPath;\n                var effectiveKey = (key !== undefined) ? key : (keyPath && getByKeyPath(obj, keyPath));\n                if (effectiveKey == null)\n                    return this.add(obj);\n                // Since key is optional, make sure we get it from obj if not provided\n                // Primary key exist. Lock transaction and try modifying existing. If nothing modified, call add().\n                // clone obj before this async call. If caller modifies obj the line after put(), the IDB spec requires that it should not affect operation.\n                obj = deepClone(obj);\n                return this._trans(READWRITE, function () {\n                    return _this.where(\":id\").equals(effectiveKey).modify(function () {\n                        // Replace extisting value with our object\n                        // CRUD event firing handled in Collection.modify()\n                        this.value = obj;\n                    }).then(function (count) { return count === 0 ? _this.add(obj, key) : effectiveKey; });\n                }, \"locked\"); // Lock needed because operation is splitted into modify() and add().\n            }\n            else {\n                // Use the standard IDB put() method.\n                return this._idbstore(READWRITE, function (resolve, reject, idbstore) {\n                    var req = key !== undefined ? idbstore.put(obj, key) : idbstore.put(obj);\n                    req.onerror = eventRejectHandler(reject);\n                    req.onsuccess = wrap(function (ev) {\n                        var keyPath = idbstore.keyPath;\n                        if (keyPath)\n                            setByKeyPath(obj, keyPath, ev.target.result);\n                        resolve(req.result);\n                    });\n                });\n            }\n        },\n        'delete': function (key) {\n            /// <param name=\"key\">Primary key of the object to delete</param>\n            if (this.hook.deleting.subscribers.length) {\n                // People listens to when(\"deleting\") event. Must implement delete using Collection.delete() that will\n                // call the CRUD event. Only Collection.delete() will know whether an object was actually deleted.\n                return this.where(\":id\").equals(key).delete();\n            }\n            else {\n                // No one listens. Use standard IDB delete() method.\n                return this._idbstore(READWRITE, function (resolve, reject, idbstore) {\n                    var req = idbstore.delete(key);\n                    req.onerror = eventRejectHandler(reject);\n                    req.onsuccess = wrap(function () {\n                        resolve(req.result);\n                    });\n                });\n            }\n        },\n        clear: function () {\n            if (this.hook.deleting.subscribers.length) {\n                // People listens to when(\"deleting\") event. Must implement delete using Collection.delete() that will\n                // call the CRUD event. Only Collection.delete() will knows which objects that are actually deleted.\n                return this.toCollection().delete();\n            }\n            else {\n                return this._idbstore(READWRITE, function (resolve, reject, idbstore) {\n                    var req = idbstore.clear();\n                    req.onerror = eventRejectHandler(reject);\n                    req.onsuccess = wrap(function () {\n                        resolve(req.result);\n                    });\n                });\n            }\n        },\n        update: function (keyOrObject, modifications) {\n            if (typeof modifications !== 'object' || isArray(modifications))\n                throw new exceptions.InvalidArgument(\"Modifications must be an object.\");\n            if (typeof keyOrObject === 'object' && !isArray(keyOrObject)) {\n                // object to modify. Also modify given object with the modifications:\n                keys(modifications).forEach(function (keyPath) {\n                    setByKeyPath(keyOrObject, keyPath, modifications[keyPath]);\n                });\n                var key = getByKeyPath(keyOrObject, this.schema.primKey.keyPath);\n                if (key === undefined)\n                    return rejection(new exceptions.InvalidArgument(\"Given object does not contain its primary key\"));\n                return this.where(\":id\").equals(key).modify(modifications);\n            }\n            else {\n                // key to modify\n                return this.where(\":id\").equals(keyOrObject).modify(modifications);\n            }\n        }\n    });\n    //\n    //\n    //\n    // Transaction Class\n    //\n    //\n    //\n    function Transaction(mode, storeNames, dbschema, parent) {\n        var _this = this;\n        /// <summary>\n        ///    Transaction class. Represents a database transaction. All operations on db goes through a Transaction.\n        /// </summary>\n        /// <param name=\"mode\" type=\"String\">Any of \"readwrite\" or \"readonly\"</param>\n        /// <param name=\"storeNames\" type=\"Array\">Array of table names to operate on</param>\n        this.db = db;\n        this.mode = mode;\n        this.storeNames = storeNames;\n        this.idbtrans = null;\n        this.on = Events(this, \"complete\", \"error\", \"abort\");\n        this.parent = parent || null;\n        this.active = true;\n        this._reculock = 0;\n        this._blockedFuncs = [];\n        this._resolve = null;\n        this._reject = null;\n        this._waitingFor = null;\n        this._waitingQueue = null;\n        this._spinCount = 0; // Just for debugging waitFor()\n        this._completion = new Promise(function (resolve, reject) {\n            _this._resolve = resolve;\n            _this._reject = reject;\n        });\n        this._completion.then(function () {\n            _this.active = false;\n            _this.on.complete.fire();\n        }, function (e) {\n            var wasActive = _this.active;\n            _this.active = false;\n            _this.on.error.fire(e);\n            _this.parent ?\n                _this.parent._reject(e) :\n                wasActive && _this.idbtrans && _this.idbtrans.abort();\n            return rejection(e); // Indicate we actually DO NOT catch this error.\n        });\n    }\n    props(Transaction.prototype, {\n        //\n        // Transaction Protected Methods (not required by API users, but needed internally and eventually by dexie extensions)\n        //\n        _lock: function () {\n            assert(!PSD.global); // Locking and unlocking reuires to be within a PSD scope.\n            // Temporary set all requests into a pending queue if they are called before database is ready.\n            ++this._reculock; // Recursive read/write lock pattern using PSD (Promise Specific Data) instead of TLS (Thread Local Storage)\n            if (this._reculock === 1 && !PSD.global)\n                PSD.lockOwnerFor = this;\n            return this;\n        },\n        _unlock: function () {\n            assert(!PSD.global); // Locking and unlocking reuires to be within a PSD scope.\n            if (--this._reculock === 0) {\n                if (!PSD.global)\n                    PSD.lockOwnerFor = null;\n                while (this._blockedFuncs.length > 0 && !this._locked()) {\n                    var fnAndPSD = this._blockedFuncs.shift();\n                    try {\n                        usePSD(fnAndPSD[1], fnAndPSD[0]);\n                    }\n                    catch (e) { }\n                }\n            }\n            return this;\n        },\n        _locked: function () {\n            // Checks if any write-lock is applied on this transaction.\n            // To simplify the Dexie API for extension implementations, we support recursive locks.\n            // This is accomplished by using \"Promise Specific Data\" (PSD).\n            // PSD data is bound to a Promise and any child Promise emitted through then() or resolve( new Promise() ).\n            // PSD is local to code executing on top of the call stacks of any of any code executed by Promise():\n            //         * callback given to the Promise() constructor  (function (resolve, reject){...})\n            //         * callbacks given to then()/catch()/finally() methods (function (value){...})\n            // If creating a new independant Promise instance from within a Promise call stack, the new Promise will derive the PSD from the call stack of the parent Promise.\n            // Derivation is done so that the inner PSD __proto__ points to the outer PSD.\n            // PSD.lockOwnerFor will point to current transaction object if the currently executing PSD scope owns the lock.\n            return this._reculock && PSD.lockOwnerFor !== this;\n        },\n        create: function (idbtrans) {\n            var _this = this;\n            if (!this.mode)\n                return this;\n            assert(!this.idbtrans);\n            if (!idbtrans && !idbdb) {\n                switch (dbOpenError && dbOpenError.name) {\n                    case \"DatabaseClosedError\":\n                        // Errors where it is no difference whether it was caused by the user operation or an earlier call to db.open()\n                        throw new exceptions.DatabaseClosed(dbOpenError);\n                    case \"MissingAPIError\":\n                        // Errors where it is no difference whether it was caused by the user operation or an earlier call to db.open()\n                        throw new exceptions.MissingAPI(dbOpenError.message, dbOpenError);\n                    default:\n                        // Make it clear that the user operation was not what caused the error - the error had occurred earlier on db.open()!\n                        throw new exceptions.OpenFailed(dbOpenError);\n                }\n            }\n            if (!this.active)\n                throw new exceptions.TransactionInactive();\n            assert(this._completion._state === null);\n            idbtrans = this.idbtrans = idbtrans || idbdb.transaction(safariMultiStoreFix(this.storeNames), this.mode);\n            idbtrans.onerror = wrap(function (ev) {\n                preventDefault(ev); // Prohibit default bubbling to window.error\n                _this._reject(idbtrans.error);\n            });\n            idbtrans.onabort = wrap(function (ev) {\n                preventDefault(ev);\n                _this.active && _this._reject(new exceptions.Abort(idbtrans.error));\n                _this.active = false;\n                _this.on(\"abort\").fire(ev);\n            });\n            idbtrans.oncomplete = wrap(function () {\n                _this.active = false;\n                _this._resolve();\n            });\n            return this;\n        },\n        _promise: function (mode, fn, bWriteLock) {\n            var _this = this;\n            if (mode === READWRITE && this.mode !== READWRITE)\n                return rejection(new exceptions.ReadOnly(\"Transaction is readonly\"));\n            if (!this.active)\n                return rejection(new exceptions.TransactionInactive());\n            if (this._locked()) {\n                return new Promise(function (resolve, reject) {\n                    _this._blockedFuncs.push([function () {\n                            _this._promise(mode, fn, bWriteLock).then(resolve, reject);\n                        }, PSD]);\n                });\n            }\n            else if (bWriteLock) {\n                return newScope(function () {\n                    var p = new Promise(function (resolve, reject) {\n                        _this._lock();\n                        var rv = fn(resolve, reject, _this);\n                        if (rv && rv.then)\n                            rv.then(resolve, reject);\n                    });\n                    p.finally(function () { return _this._unlock(); });\n                    p._lib = true;\n                    return p;\n                });\n            }\n            else {\n                var p = new Promise(function (resolve, reject) {\n                    var rv = fn(resolve, reject, _this);\n                    if (rv && rv.then)\n                        rv.then(resolve, reject);\n                });\n                p._lib = true;\n                return p;\n            }\n        },\n        _root: function () {\n            return this.parent ? this.parent._root() : this;\n        },\n        waitFor: function (promise) {\n            // Always operate on the root transaction (in case this is a sub stransaction)\n            var root = this._root();\n            // For stability reasons, convert parameter to promise no matter what type is passed to waitFor().\n            // (We must be able to call .then() on it.)\n            promise = Promise.resolve(promise);\n            if (root._waitingFor) {\n                // Already called waitFor(). Wait for both to complete.\n                root._waitingFor = root._waitingFor.then(function () { return promise; });\n            }\n            else {\n                // We're not in waiting state. Start waiting state.\n                root._waitingFor = promise;\n                root._waitingQueue = [];\n                // Start interacting with indexedDB until promise completes:\n                var store = root.idbtrans.objectStore(root.storeNames[0]);\n                (function spin() {\n                    ++root._spinCount; // For debugging only\n                    while (root._waitingQueue.length)\n                        (root._waitingQueue.shift())();\n                    if (root._waitingFor)\n                        store.get(-Infinity).onsuccess = spin;\n                }());\n            }\n            var currentWaitPromise = root._waitingFor;\n            return new Promise(function (resolve, reject) {\n                promise.then(function (res) { return root._waitingQueue.push(wrap(resolve.bind(null, res))); }, function (err) { return root._waitingQueue.push(wrap(reject.bind(null, err))); }).finally(function () {\n                    if (root._waitingFor === currentWaitPromise) {\n                        // No one added a wait after us. Safe to stop the spinning.\n                        root._waitingFor = null;\n                    }\n                });\n            });\n        },\n        //\n        // Transaction Public Properties and Methods\n        //\n        abort: function () {\n            this.active && this._reject(new exceptions.Abort());\n            this.active = false;\n        },\n        tables: {\n            get: deprecated(\"Transaction.tables\", function () { return allTables; })\n        },\n        table: function (name) {\n            var table = db.table(name); // Don't check that table is part of transaction. It must fail lazily!\n            return new Table(name, table.schema, this);\n        }\n    });\n    //\n    //\n    //\n    // WhereClause\n    //\n    //\n    //\n    function WhereClause(table, index, orCollection) {\n        /// <param name=\"table\" type=\"Table\"></param>\n        /// <param name=\"index\" type=\"String\" optional=\"true\"></param>\n        /// <param name=\"orCollection\" type=\"Collection\" optional=\"true\"></param>\n        this._ctx = {\n            table: table,\n            index: index === \":id\" ? null : index,\n            or: orCollection\n        };\n    }\n    props(WhereClause.prototype, function () {\n        // WhereClause private methods\n        function fail(collectionOrWhereClause, err, T) {\n            var collection = collectionOrWhereClause instanceof WhereClause ?\n                new Collection(collectionOrWhereClause) :\n                collectionOrWhereClause;\n            collection._ctx.error = T ? new T(err) : new TypeError(err);\n            return collection;\n        }\n        function emptyCollection(whereClause) {\n            return new Collection(whereClause, function () { return IDBKeyRange.only(\"\"); }).limit(0);\n        }\n        function upperFactory(dir) {\n            return dir === \"next\" ? function (s) { return s.toUpperCase(); } : function (s) { return s.toLowerCase(); };\n        }\n        function lowerFactory(dir) {\n            return dir === \"next\" ? function (s) { return s.toLowerCase(); } : function (s) { return s.toUpperCase(); };\n        }\n        function nextCasing(key, lowerKey, upperNeedle, lowerNeedle, cmp, dir) {\n            var length = Math.min(key.length, lowerNeedle.length);\n            var llp = -1;\n            for (var i = 0; i < length; ++i) {\n                var lwrKeyChar = lowerKey[i];\n                if (lwrKeyChar !== lowerNeedle[i]) {\n                    if (cmp(key[i], upperNeedle[i]) < 0)\n                        return key.substr(0, i) + upperNeedle[i] + upperNeedle.substr(i + 1);\n                    if (cmp(key[i], lowerNeedle[i]) < 0)\n                        return key.substr(0, i) + lowerNeedle[i] + upperNeedle.substr(i + 1);\n                    if (llp >= 0)\n                        return key.substr(0, llp) + lowerKey[llp] + upperNeedle.substr(llp + 1);\n                    return null;\n                }\n                if (cmp(key[i], lwrKeyChar) < 0)\n                    llp = i;\n            }\n            if (length < lowerNeedle.length && dir === \"next\")\n                return key + upperNeedle.substr(key.length);\n            if (length < key.length && dir === \"prev\")\n                return key.substr(0, upperNeedle.length);\n            return (llp < 0 ? null : key.substr(0, llp) + lowerNeedle[llp] + upperNeedle.substr(llp + 1));\n        }\n        function addIgnoreCaseAlgorithm(whereClause, match, needles, suffix) {\n            /// <param name=\"needles\" type=\"Array\" elementType=\"String\"></param>\n            var upper, lower, compare, upperNeedles, lowerNeedles, direction, nextKeySuffix, needlesLen = needles.length;\n            if (!needles.every(function (s) { return typeof s === 'string'; })) {\n                return fail(whereClause, STRING_EXPECTED);\n            }\n            function initDirection(dir) {\n                upper = upperFactory(dir);\n                lower = lowerFactory(dir);\n                compare = (dir === \"next\" ? simpleCompare : simpleCompareReverse);\n                var needleBounds = needles.map(function (needle) {\n                    return { lower: lower(needle), upper: upper(needle) };\n                }).sort(function (a, b) {\n                    return compare(a.lower, b.lower);\n                });\n                upperNeedles = needleBounds.map(function (nb) { return nb.upper; });\n                lowerNeedles = needleBounds.map(function (nb) { return nb.lower; });\n                direction = dir;\n                nextKeySuffix = (dir === \"next\" ? \"\" : suffix);\n            }\n            initDirection(\"next\");\n            var c = new Collection(whereClause, function () {\n                return IDBKeyRange.bound(upperNeedles[0], lowerNeedles[needlesLen - 1] + suffix);\n            });\n            c._ondirectionchange = function (direction) {\n                // This event onlys occur before filter is called the first time.\n                initDirection(direction);\n            };\n            var firstPossibleNeedle = 0;\n            c._addAlgorithm(function (cursor, advance, resolve) {\n                /// <param name=\"cursor\" type=\"IDBCursor\"></param>\n                /// <param name=\"advance\" type=\"Function\"></param>\n                /// <param name=\"resolve\" type=\"Function\"></param>\n                var key = cursor.key;\n                if (typeof key !== 'string')\n                    return false;\n                var lowerKey = lower(key);\n                if (match(lowerKey, lowerNeedles, firstPossibleNeedle)) {\n                    return true;\n                }\n                else {\n                    var lowestPossibleCasing = null;\n                    for (var i = firstPossibleNeedle; i < needlesLen; ++i) {\n                        var casing = nextCasing(key, lowerKey, upperNeedles[i], lowerNeedles[i], compare, direction);\n                        if (casing === null && lowestPossibleCasing === null)\n                            firstPossibleNeedle = i + 1;\n                        else if (lowestPossibleCasing === null || compare(lowestPossibleCasing, casing) > 0) {\n                            lowestPossibleCasing = casing;\n                        }\n                    }\n                    if (lowestPossibleCasing !== null) {\n                        advance(function () { cursor.continue(lowestPossibleCasing + nextKeySuffix); });\n                    }\n                    else {\n                        advance(resolve);\n                    }\n                    return false;\n                }\n            });\n            return c;\n        }\n        //\n        // WhereClause public methods\n        //\n        return {\n            between: function (lower, upper, includeLower, includeUpper) {\n                /// <summary>\n                ///     Filter out records whose where-field lays between given lower and upper values. Applies to Strings, Numbers and Dates.\n                /// </summary>\n                /// <param name=\"lower\"></param>\n                /// <param name=\"upper\"></param>\n                /// <param name=\"includeLower\" optional=\"true\">Whether items that equals lower should be included. Default true.</param>\n                /// <param name=\"includeUpper\" optional=\"true\">Whether items that equals upper should be included. Default false.</param>\n                /// <returns type=\"Collection\"></returns>\n                includeLower = includeLower !== false; // Default to true\n                includeUpper = includeUpper === true; // Default to false\n                try {\n                    if ((cmp(lower, upper) > 0) ||\n                        (cmp(lower, upper) === 0 && (includeLower || includeUpper) && !(includeLower && includeUpper)))\n                        return emptyCollection(this); // Workaround for idiotic W3C Specification that DataError must be thrown if lower > upper. The natural result would be to return an empty collection.\n                    return new Collection(this, function () { return IDBKeyRange.bound(lower, upper, !includeLower, !includeUpper); });\n                }\n                catch (e) {\n                    return fail(this, INVALID_KEY_ARGUMENT);\n                }\n            },\n            equals: function (value) {\n                return new Collection(this, function () { return IDBKeyRange.only(value); });\n            },\n            above: function (value) {\n                return new Collection(this, function () { return IDBKeyRange.lowerBound(value, true); });\n            },\n            aboveOrEqual: function (value) {\n                return new Collection(this, function () { return IDBKeyRange.lowerBound(value); });\n            },\n            below: function (value) {\n                return new Collection(this, function () { return IDBKeyRange.upperBound(value, true); });\n            },\n            belowOrEqual: function (value) {\n                return new Collection(this, function () { return IDBKeyRange.upperBound(value); });\n            },\n            startsWith: function (str) {\n                /// <param name=\"str\" type=\"String\"></param>\n                if (typeof str !== 'string')\n                    return fail(this, STRING_EXPECTED);\n                return this.between(str, str + maxString, true, true);\n            },\n            startsWithIgnoreCase: function (str) {\n                /// <param name=\"str\" type=\"String\"></param>\n                if (str === \"\")\n                    return this.startsWith(str);\n                return addIgnoreCaseAlgorithm(this, function (x, a) { return x.indexOf(a[0]) === 0; }, [str], maxString);\n            },\n            equalsIgnoreCase: function (str) {\n                /// <param name=\"str\" type=\"String\"></param>\n                return addIgnoreCaseAlgorithm(this, function (x, a) { return x === a[0]; }, [str], \"\");\n            },\n            anyOfIgnoreCase: function () {\n                var set = getArrayOf.apply(NO_CHAR_ARRAY, arguments);\n                if (set.length === 0)\n                    return emptyCollection(this);\n                return addIgnoreCaseAlgorithm(this, function (x, a) { return a.indexOf(x) !== -1; }, set, \"\");\n            },\n            startsWithAnyOfIgnoreCase: function () {\n                var set = getArrayOf.apply(NO_CHAR_ARRAY, arguments);\n                if (set.length === 0)\n                    return emptyCollection(this);\n                return addIgnoreCaseAlgorithm(this, function (x, a) {\n                    return a.some(function (n) {\n                        return x.indexOf(n) === 0;\n                    });\n                }, set, maxString);\n            },\n            anyOf: function () {\n                var set = getArrayOf.apply(NO_CHAR_ARRAY, arguments);\n                var compare = ascending;\n                try {\n                    set.sort(compare);\n                }\n                catch (e) {\n                    return fail(this, INVALID_KEY_ARGUMENT);\n                }\n                if (set.length === 0)\n                    return emptyCollection(this);\n                var c = new Collection(this, function () { return IDBKeyRange.bound(set[0], set[set.length - 1]); });\n                c._ondirectionchange = function (direction) {\n                    compare = (direction === \"next\" ? ascending : descending);\n                    set.sort(compare);\n                };\n                var i = 0;\n                c._addAlgorithm(function (cursor, advance, resolve) {\n                    var key = cursor.key;\n                    while (compare(key, set[i]) > 0) {\n                        // The cursor has passed beyond this key. Check next.\n                        ++i;\n                        if (i === set.length) {\n                            // There is no next. Stop searching.\n                            advance(resolve);\n                            return false;\n                        }\n                    }\n                    if (compare(key, set[i]) === 0) {\n                        // The current cursor value should be included and we should continue a single step in case next item has the same key or possibly our next key in set.\n                        return true;\n                    }\n                    else {\n                        // cursor.key not yet at set[i]. Forward cursor to the next key to hunt for.\n                        advance(function () { cursor.continue(set[i]); });\n                        return false;\n                    }\n                });\n                return c;\n            },\n            notEqual: function (value) {\n                return this.inAnyRange([[minKey, value], [value, maxKey]], { includeLowers: false, includeUppers: false });\n            },\n            noneOf: function () {\n                var set = getArrayOf.apply(NO_CHAR_ARRAY, arguments);\n                if (set.length === 0)\n                    return new Collection(this); // Return entire collection.\n                try {\n                    set.sort(ascending);\n                }\n                catch (e) {\n                    return fail(this, INVALID_KEY_ARGUMENT);\n                }\n                // Transform [\"a\",\"b\",\"c\"] to a set of ranges for between/above/below: [[minKey,\"a\"], [\"a\",\"b\"], [\"b\",\"c\"], [\"c\",maxKey]]\n                var ranges = set.reduce(function (res, val) { return res ? res.concat([[res[res.length - 1][1], val]]) : [[minKey, val]]; }, null);\n                ranges.push([set[set.length - 1], maxKey]);\n                return this.inAnyRange(ranges, { includeLowers: false, includeUppers: false });\n            },\n            /** Filter out values withing given set of ranges.\n            * Example, give children and elders a rebate of 50%:\n            *\n            *   db.friends.where('age').inAnyRange([[0,18],[65,Infinity]]).modify({Rebate: 1/2});\n            *\n            * @param {(string|number|Date|Array)[][]} ranges\n            * @param {{includeLowers: boolean, includeUppers: boolean}} options\n            */\n            inAnyRange: function (ranges, options) {\n                if (ranges.length === 0)\n                    return emptyCollection(this);\n                if (!ranges.every(function (range) { return range[0] !== undefined && range[1] !== undefined && ascending(range[0], range[1]) <= 0; })) {\n                    return fail(this, \"First argument to inAnyRange() must be an Array of two-value Arrays [lower,upper] where upper must not be lower than lower\", exceptions.InvalidArgument);\n                }\n                var includeLowers = !options || options.includeLowers !== false; // Default to true\n                var includeUppers = options && options.includeUppers === true; // Default to false\n                function addRange(ranges, newRange) {\n                    for (var i = 0, l = ranges.length; i < l; ++i) {\n                        var range = ranges[i];\n                        if (cmp(newRange[0], range[1]) < 0 && cmp(newRange[1], range[0]) > 0) {\n                            range[0] = min(range[0], newRange[0]);\n                            range[1] = max(range[1], newRange[1]);\n                            break;\n                        }\n                    }\n                    if (i === l)\n                        ranges.push(newRange);\n                    return ranges;\n                }\n                var sortDirection = ascending;\n                function rangeSorter(a, b) { return sortDirection(a[0], b[0]); }\n                // Join overlapping ranges\n                var set;\n                try {\n                    set = ranges.reduce(addRange, []);\n                    set.sort(rangeSorter);\n                }\n                catch (ex) {\n                    return fail(this, INVALID_KEY_ARGUMENT);\n                }\n                var i = 0;\n                var keyIsBeyondCurrentEntry = includeUppers ?\n                    function (key) { return ascending(key, set[i][1]) > 0; } :\n                    function (key) { return ascending(key, set[i][1]) >= 0; };\n                var keyIsBeforeCurrentEntry = includeLowers ?\n                    function (key) { return descending(key, set[i][0]) > 0; } :\n                    function (key) { return descending(key, set[i][0]) >= 0; };\n                function keyWithinCurrentRange(key) {\n                    return !keyIsBeyondCurrentEntry(key) && !keyIsBeforeCurrentEntry(key);\n                }\n                var checkKey = keyIsBeyondCurrentEntry;\n                var c = new Collection(this, function () {\n                    return IDBKeyRange.bound(set[0][0], set[set.length - 1][1], !includeLowers, !includeUppers);\n                });\n                c._ondirectionchange = function (direction) {\n                    if (direction === \"next\") {\n                        checkKey = keyIsBeyondCurrentEntry;\n                        sortDirection = ascending;\n                    }\n                    else {\n                        checkKey = keyIsBeforeCurrentEntry;\n                        sortDirection = descending;\n                    }\n                    set.sort(rangeSorter);\n                };\n                c._addAlgorithm(function (cursor, advance, resolve) {\n                    var key = cursor.key;\n                    while (checkKey(key)) {\n                        // The cursor has passed beyond this key. Check next.\n                        ++i;\n                        if (i === set.length) {\n                            // There is no next. Stop searching.\n                            advance(resolve);\n                            return false;\n                        }\n                    }\n                    if (keyWithinCurrentRange(key)) {\n                        // The current cursor value should be included and we should continue a single step in case next item has the same key or possibly our next key in set.\n                        return true;\n                    }\n                    else if (cmp(key, set[i][1]) === 0 || cmp(key, set[i][0]) === 0) {\n                        // includeUpper or includeLower is false so keyWithinCurrentRange() returns false even though we are at range border.\n                        // Continue to next key but don't include this one.\n                        return false;\n                    }\n                    else {\n                        // cursor.key not yet at set[i]. Forward cursor to the next key to hunt for.\n                        advance(function () {\n                            if (sortDirection === ascending)\n                                cursor.continue(set[i][0]);\n                            else\n                                cursor.continue(set[i][1]);\n                        });\n                        return false;\n                    }\n                });\n                return c;\n            },\n            startsWithAnyOf: function () {\n                var set = getArrayOf.apply(NO_CHAR_ARRAY, arguments);\n                if (!set.every(function (s) { return typeof s === 'string'; })) {\n                    return fail(this, \"startsWithAnyOf() only works with strings\");\n                }\n                if (set.length === 0)\n                    return emptyCollection(this);\n                return this.inAnyRange(set.map(function (str) {\n                    return [str, str + maxString];\n                }));\n            }\n        };\n    });\n    //\n    //\n    //\n    // Collection Class\n    //\n    //\n    //\n    function Collection(whereClause, keyRangeGenerator) {\n        /// <summary>\n        ///\n        /// </summary>\n        /// <param name=\"whereClause\" type=\"WhereClause\">Where clause instance</param>\n        /// <param name=\"keyRangeGenerator\" value=\"function(){ return IDBKeyRange.bound(0,1);}\" optional=\"true\"></param>\n        var keyRange = null, error = null;\n        if (keyRangeGenerator)\n            try {\n                keyRange = keyRangeGenerator();\n            }\n            catch (ex) {\n                error = ex;\n            }\n        var whereCtx = whereClause._ctx, table = whereCtx.table;\n        this._ctx = {\n            table: table,\n            index: whereCtx.index,\n            isPrimKey: (!whereCtx.index || (table.schema.primKey.keyPath && whereCtx.index === table.schema.primKey.name)),\n            range: keyRange,\n            keysOnly: false,\n            dir: \"next\",\n            unique: \"\",\n            algorithm: null,\n            filter: null,\n            replayFilter: null,\n            justLimit: true,\n            isMatch: null,\n            offset: 0,\n            limit: Infinity,\n            error: error,\n            or: whereCtx.or,\n            valueMapper: table.hook.reading.fire\n        };\n    }\n    function isPlainKeyRange(ctx, ignoreLimitFilter) {\n        return !(ctx.filter || ctx.algorithm || ctx.or) &&\n            (ignoreLimitFilter ? ctx.justLimit : !ctx.replayFilter);\n    }\n    props(Collection.prototype, function () {\n        //\n        // Collection Private Functions\n        //\n        function addFilter(ctx, fn) {\n            ctx.filter = combine(ctx.filter, fn);\n        }\n        function addReplayFilter(ctx, factory, isLimitFilter) {\n            var curr = ctx.replayFilter;\n            ctx.replayFilter = curr ? function () { return combine(curr(), factory()); } : factory;\n            ctx.justLimit = isLimitFilter && !curr;\n        }\n        function addMatchFilter(ctx, fn) {\n            ctx.isMatch = combine(ctx.isMatch, fn);\n        }\n        /** @param ctx {\n         *      isPrimKey: boolean,\n         *      table: Table,\n         *      index: string\n         * }\n         * @param store IDBObjectStore\n         **/\n        function getIndexOrStore(ctx, store) {\n            if (ctx.isPrimKey)\n                return store;\n            var indexSpec = ctx.table.schema.idxByName[ctx.index];\n            if (!indexSpec)\n                throw new exceptions.Schema(\"KeyPath \" + ctx.index + \" on object store \" + store.name + \" is not indexed\");\n            return store.index(indexSpec.name);\n        }\n        /** @param ctx {\n         *      isPrimKey: boolean,\n         *      table: Table,\n         *      index: string,\n         *      keysOnly: boolean,\n         *      range?: IDBKeyRange,\n         *      dir: \"next\" | \"prev\"\n         * }\n         */\n        function openCursor(ctx, store) {\n            var idxOrStore = getIndexOrStore(ctx, store);\n            return ctx.keysOnly && 'openKeyCursor' in idxOrStore ?\n                idxOrStore.openKeyCursor(ctx.range || null, ctx.dir + ctx.unique) :\n                idxOrStore.openCursor(ctx.range || null, ctx.dir + ctx.unique);\n        }\n        function iter(ctx, fn, resolve, reject, idbstore) {\n            var filter = ctx.replayFilter ? combine(ctx.filter, ctx.replayFilter()) : ctx.filter;\n            if (!ctx.or) {\n                iterate(openCursor(ctx, idbstore), combine(ctx.algorithm, filter), fn, resolve, reject, !ctx.keysOnly && ctx.valueMapper);\n            }\n            else\n                (function () {\n                    var set = {};\n                    var resolved = 0;\n                    function resolveboth() {\n                        if (++resolved === 2)\n                            resolve(); // Seems like we just support or btwn max 2 expressions, but there are no limit because we do recursion.\n                    }\n                    function union(item, cursor, advance) {\n                        if (!filter || filter(cursor, advance, resolveboth, reject)) {\n                            var primaryKey = cursor.primaryKey;\n                            var key = '' + primaryKey;\n                            if (key === '[object ArrayBuffer]')\n                                key = '' + new Uint8Array(primaryKey);\n                            if (!hasOwn(set, key)) {\n                                set[key] = true;\n                                fn(item, cursor, advance);\n                            }\n                        }\n                    }\n                    ctx.or._iterate(union, resolveboth, reject, idbstore);\n                    iterate(openCursor(ctx, idbstore), ctx.algorithm, union, resolveboth, reject, !ctx.keysOnly && ctx.valueMapper);\n                })();\n        }\n        return {\n            //\n            // Collection Protected Functions\n            //\n            _read: function (fn, cb) {\n                var ctx = this._ctx;\n                return ctx.error ?\n                    ctx.table._trans(null, rejection.bind(null, ctx.error)) :\n                    ctx.table._idbstore(READONLY, fn).then(cb);\n            },\n            _write: function (fn) {\n                var ctx = this._ctx;\n                return ctx.error ?\n                    ctx.table._trans(null, rejection.bind(null, ctx.error)) :\n                    ctx.table._idbstore(READWRITE, fn, \"locked\"); // When doing write operations on collections, always lock the operation so that upcoming operations gets queued.\n            },\n            _addAlgorithm: function (fn) {\n                var ctx = this._ctx;\n                ctx.algorithm = combine(ctx.algorithm, fn);\n            },\n            _iterate: function (fn, resolve, reject, idbstore) {\n                return iter(this._ctx, fn, resolve, reject, idbstore);\n            },\n            clone: function (props$$1) {\n                var rv = Object.create(this.constructor.prototype), ctx = Object.create(this._ctx);\n                if (props$$1)\n                    extend(ctx, props$$1);\n                rv._ctx = ctx;\n                return rv;\n            },\n            raw: function () {\n                this._ctx.valueMapper = null;\n                return this;\n            },\n            //\n            // Collection Public methods\n            //\n            each: function (fn) {\n                var ctx = this._ctx;\n                return this._read(function (resolve, reject, idbstore) {\n                    iter(ctx, fn, resolve, reject, idbstore);\n                });\n            },\n            count: function (cb) {\n                var ctx = this._ctx;\n                if (isPlainKeyRange(ctx, true)) {\n                    // This is a plain key range. We can use the count() method if the index.\n                    return this._read(function (resolve, reject, idbstore) {\n                        var idx = getIndexOrStore(ctx, idbstore);\n                        var req = (ctx.range ? idx.count(ctx.range) : idx.count());\n                        req.onerror = eventRejectHandler(reject);\n                        req.onsuccess = function (e) {\n                            resolve(Math.min(e.target.result, ctx.limit));\n                        };\n                    }, cb);\n                }\n                else {\n                    // Algorithms, filters or expressions are applied. Need to count manually.\n                    var count = 0;\n                    return this._read(function (resolve, reject, idbstore) {\n                        iter(ctx, function () { ++count; return false; }, function () { resolve(count); }, reject, idbstore);\n                    }, cb);\n                }\n            },\n            sortBy: function (keyPath, cb) {\n                /// <param name=\"keyPath\" type=\"String\"></param>\n                var parts = keyPath.split('.').reverse(), lastPart = parts[0], lastIndex = parts.length - 1;\n                function getval(obj, i) {\n                    if (i)\n                        return getval(obj[parts[i]], i - 1);\n                    return obj[lastPart];\n                }\n                var order = this._ctx.dir === \"next\" ? 1 : -1;\n                function sorter(a, b) {\n                    var aVal = getval(a, lastIndex), bVal = getval(b, lastIndex);\n                    return aVal < bVal ? -order : aVal > bVal ? order : 0;\n                }\n                return this.toArray(function (a) {\n                    return a.sort(sorter);\n                }).then(cb);\n            },\n            toArray: function (cb) {\n                var ctx = this._ctx;\n                return this._read(function (resolve, reject, idbstore) {\n                    if (hasGetAll && ctx.dir === 'next' && isPlainKeyRange(ctx, true) && ctx.limit > 0) {\n                        // Special optimation if we could use IDBObjectStore.getAll() or\n                        // IDBKeyRange.getAll():\n                        var readingHook = ctx.table.hook.reading.fire;\n                        var idxOrStore = getIndexOrStore(ctx, idbstore);\n                        var req = ctx.limit < Infinity ?\n                            idxOrStore.getAll(ctx.range, ctx.limit) :\n                            idxOrStore.getAll(ctx.range);\n                        req.onerror = eventRejectHandler(reject);\n                        req.onsuccess = readingHook === mirror ?\n                            eventSuccessHandler(resolve) :\n                            eventSuccessHandler(function (res) {\n                                try {\n                                    resolve(res.map(readingHook));\n                                }\n                                catch (e) {\n                                    reject(e);\n                                }\n                            });\n                    }\n                    else {\n                        // Getting array through a cursor.\n                        var a = [];\n                        iter(ctx, function (item) { a.push(item); }, function arrayComplete() {\n                            resolve(a);\n                        }, reject, idbstore);\n                    }\n                }, cb);\n            },\n            offset: function (offset) {\n                var ctx = this._ctx;\n                if (offset <= 0)\n                    return this;\n                ctx.offset += offset; // For count()\n                if (isPlainKeyRange(ctx)) {\n                    addReplayFilter(ctx, function () {\n                        var offsetLeft = offset;\n                        return function (cursor, advance) {\n                            if (offsetLeft === 0)\n                                return true;\n                            if (offsetLeft === 1) {\n                                --offsetLeft;\n                                return false;\n                            }\n                            advance(function () {\n                                cursor.advance(offsetLeft);\n                                offsetLeft = 0;\n                            });\n                            return false;\n                        };\n                    });\n                }\n                else {\n                    addReplayFilter(ctx, function () {\n                        var offsetLeft = offset;\n                        return function () { return (--offsetLeft < 0); };\n                    });\n                }\n                return this;\n            },\n            limit: function (numRows) {\n                this._ctx.limit = Math.min(this._ctx.limit, numRows); // For count()\n                addReplayFilter(this._ctx, function () {\n                    var rowsLeft = numRows;\n                    return function (cursor, advance, resolve) {\n                        if (--rowsLeft <= 0)\n                            advance(resolve); // Stop after this item has been included\n                        return rowsLeft >= 0; // If numRows is already below 0, return false because then 0 was passed to numRows initially. Otherwise we wouldnt come here.\n                    };\n                }, true);\n                return this;\n            },\n            until: function (filterFunction, bIncludeStopEntry) {\n                addFilter(this._ctx, function (cursor, advance, resolve) {\n                    if (filterFunction(cursor.value)) {\n                        advance(resolve);\n                        return bIncludeStopEntry;\n                    }\n                    else {\n                        return true;\n                    }\n                });\n                return this;\n            },\n            first: function (cb) {\n                return this.limit(1).toArray(function (a) { return a[0]; }).then(cb);\n            },\n            last: function (cb) {\n                return this.reverse().first(cb);\n            },\n            filter: function (filterFunction) {\n                /// <param name=\"jsFunctionFilter\" type=\"Function\">function(val){return true/false}</param>\n                addFilter(this._ctx, function (cursor) {\n                    return filterFunction(cursor.value);\n                });\n                // match filters not used in Dexie.js but can be used by 3rd part libraries to test a\n                // collection for a match without querying DB. Used by Dexie.Observable.\n                addMatchFilter(this._ctx, filterFunction);\n                return this;\n            },\n            and: function (filterFunction) {\n                return this.filter(filterFunction);\n            },\n            or: function (indexName) {\n                return new WhereClause(this._ctx.table, indexName, this);\n            },\n            reverse: function () {\n                this._ctx.dir = (this._ctx.dir === \"prev\" ? \"next\" : \"prev\");\n                if (this._ondirectionchange)\n                    this._ondirectionchange(this._ctx.dir);\n                return this;\n            },\n            desc: function () {\n                return this.reverse();\n            },\n            eachKey: function (cb) {\n                var ctx = this._ctx;\n                ctx.keysOnly = !ctx.isMatch;\n                return this.each(function (val, cursor) { cb(cursor.key, cursor); });\n            },\n            eachUniqueKey: function (cb) {\n                this._ctx.unique = \"unique\";\n                return this.eachKey(cb);\n            },\n            eachPrimaryKey: function (cb) {\n                var ctx = this._ctx;\n                ctx.keysOnly = !ctx.isMatch;\n                return this.each(function (val, cursor) { cb(cursor.primaryKey, cursor); });\n            },\n            keys: function (cb) {\n                var ctx = this._ctx;\n                ctx.keysOnly = !ctx.isMatch;\n                var a = [];\n                return this.each(function (item, cursor) {\n                    a.push(cursor.key);\n                }).then(function () {\n                    return a;\n                }).then(cb);\n            },\n            primaryKeys: function (cb) {\n                var ctx = this._ctx;\n                if (hasGetAll && ctx.dir === 'next' && isPlainKeyRange(ctx, true) && ctx.limit > 0) {\n                    // Special optimation if we could use IDBObjectStore.getAllKeys() or\n                    // IDBKeyRange.getAllKeys():\n                    return this._read(function (resolve, reject, idbstore) {\n                        var idxOrStore = getIndexOrStore(ctx, idbstore);\n                        var req = ctx.limit < Infinity ?\n                            idxOrStore.getAllKeys(ctx.range, ctx.limit) :\n                            idxOrStore.getAllKeys(ctx.range);\n                        req.onerror = eventRejectHandler(reject);\n                        req.onsuccess = eventSuccessHandler(resolve);\n                    }).then(cb);\n                }\n                ctx.keysOnly = !ctx.isMatch;\n                var a = [];\n                return this.each(function (item, cursor) {\n                    a.push(cursor.primaryKey);\n                }).then(function () {\n                    return a;\n                }).then(cb);\n            },\n            uniqueKeys: function (cb) {\n                this._ctx.unique = \"unique\";\n                return this.keys(cb);\n            },\n            firstKey: function (cb) {\n                return this.limit(1).keys(function (a) { return a[0]; }).then(cb);\n            },\n            lastKey: function (cb) {\n                return this.reverse().firstKey(cb);\n            },\n            distinct: function () {\n                var ctx = this._ctx, idx = ctx.index && ctx.table.schema.idxByName[ctx.index];\n                if (!idx || !idx.multi)\n                    return this; // distinct() only makes differencies on multiEntry indexes.\n                var set = {};\n                addFilter(this._ctx, function (cursor) {\n                    var strKey = cursor.primaryKey.toString(); // Converts any Date to String, String to String, Number to String and Array to comma-separated string\n                    var found = hasOwn(set, strKey);\n                    set[strKey] = true;\n                    return !found;\n                });\n                return this;\n            },\n            //\n            // Methods that mutate storage\n            //\n            modify: function (changes) {\n                var self = this, ctx = this._ctx, hook = ctx.table.hook, updatingHook = hook.updating.fire, deletingHook = hook.deleting.fire;\n                return this._write(function (resolve, reject, idbstore, trans) {\n                    var modifyer;\n                    if (typeof changes === 'function') {\n                        // Changes is a function that may update, add or delete propterties or even require a deletion the object itself (delete this.item)\n                        if (updatingHook === nop && deletingHook === nop) {\n                            // Noone cares about what is being changed. Just let the modifier function be the given argument as is.\n                            modifyer = changes;\n                        }\n                        else {\n                            // People want to know exactly what is being modified or deleted.\n                            // Let modifyer be a proxy function that finds out what changes the caller is actually doing\n                            // and call the hooks accordingly!\n                            modifyer = function (item) {\n                                var origItem = deepClone(item); // Clone the item first so we can compare laters.\n                                if (changes.call(this, item, this) === false)\n                                    return false; // Call the real modifyer function (If it returns false explicitely, it means it dont want to modify anyting on this object)\n                                if (!hasOwn(this, \"value\")) {\n                                    // The real modifyer function requests a deletion of the object. Inform the deletingHook that a deletion is taking place.\n                                    deletingHook.call(this, this.primKey, item, trans);\n                                }\n                                else {\n                                    // No deletion. Check what was changed\n                                    var objectDiff = getObjectDiff(origItem, this.value);\n                                    var additionalChanges = updatingHook.call(this, objectDiff, this.primKey, origItem, trans);\n                                    if (additionalChanges) {\n                                        // Hook want to apply additional modifications. Make sure to fullfill the will of the hook.\n                                        item = this.value;\n                                        keys(additionalChanges).forEach(function (keyPath) {\n                                            setByKeyPath(item, keyPath, additionalChanges[keyPath]); // Adding {keyPath: undefined} means that the keyPath should be deleted. Handled by setByKeyPath\n                                        });\n                                    }\n                                }\n                            };\n                        }\n                    }\n                    else if (updatingHook === nop) {\n                        // changes is a set of {keyPath: value} and no one is listening to the updating hook.\n                        var keyPaths = keys(changes);\n                        var numKeys = keyPaths.length;\n                        modifyer = function (item) {\n                            var anythingModified = false;\n                            for (var i = 0; i < numKeys; ++i) {\n                                var keyPath = keyPaths[i], val = changes[keyPath];\n                                if (getByKeyPath(item, keyPath) !== val) {\n                                    setByKeyPath(item, keyPath, val); // Adding {keyPath: undefined} means that the keyPath should be deleted. Handled by setByKeyPath\n                                    anythingModified = true;\n                                }\n                            }\n                            return anythingModified;\n                        };\n                    }\n                    else {\n                        // changes is a set of {keyPath: value} and people are listening to the updating hook so we need to call it and\n                        // allow it to add additional modifications to make.\n                        var origChanges = changes;\n                        changes = shallowClone(origChanges); // Let's work with a clone of the changes keyPath/value set so that we can restore it in case a hook extends it.\n                        modifyer = function (item) {\n                            var anythingModified = false;\n                            var additionalChanges = updatingHook.call(this, changes, this.primKey, deepClone(item), trans);\n                            if (additionalChanges)\n                                extend(changes, additionalChanges);\n                            keys(changes).forEach(function (keyPath) {\n                                var val = changes[keyPath];\n                                if (getByKeyPath(item, keyPath) !== val) {\n                                    setByKeyPath(item, keyPath, val);\n                                    anythingModified = true;\n                                }\n                            });\n                            if (additionalChanges)\n                                changes = shallowClone(origChanges); // Restore original changes for next iteration\n                            return anythingModified;\n                        };\n                    }\n                    var count = 0;\n                    var successCount = 0;\n                    var iterationComplete = false;\n                    var failures = [];\n                    var failKeys = [];\n                    var currentKey = null;\n                    function modifyItem(item, cursor) {\n                        currentKey = cursor.primaryKey;\n                        var thisContext = {\n                            primKey: cursor.primaryKey,\n                            value: item,\n                            onsuccess: null,\n                            onerror: null\n                        };\n                        function onerror(e) {\n                            failures.push(e);\n                            failKeys.push(thisContext.primKey);\n                            checkFinished();\n                            return true; // Catch these errors and let a final rejection decide whether or not to abort entire transaction\n                        }\n                        if (modifyer.call(thisContext, item, thisContext) !== false) {\n                            var bDelete = !hasOwn(thisContext, \"value\");\n                            ++count;\n                            tryCatch(function () {\n                                var req = (bDelete ? cursor.delete() : cursor.update(thisContext.value));\n                                req._hookCtx = thisContext;\n                                req.onerror = hookedEventRejectHandler(onerror);\n                                req.onsuccess = hookedEventSuccessHandler(function () {\n                                    ++successCount;\n                                    checkFinished();\n                                });\n                            }, onerror);\n                        }\n                        else if (thisContext.onsuccess) {\n                            // Hook will expect either onerror or onsuccess to always be called!\n                            thisContext.onsuccess(thisContext.value);\n                        }\n                    }\n                    function doReject(e) {\n                        if (e) {\n                            failures.push(e);\n                            failKeys.push(currentKey);\n                        }\n                        return reject(new ModifyError(\"Error modifying one or more objects\", failures, successCount, failKeys));\n                    }\n                    function checkFinished() {\n                        if (iterationComplete && successCount + failures.length === count) {\n                            if (failures.length > 0)\n                                doReject();\n                            else\n                                resolve(successCount);\n                        }\n                    }\n                    self.clone().raw()._iterate(modifyItem, function () {\n                        iterationComplete = true;\n                        checkFinished();\n                    }, doReject, idbstore);\n                });\n            },\n            'delete': function () {\n                var _this = this;\n                var ctx = this._ctx, range = ctx.range, deletingHook = ctx.table.hook.deleting.fire, hasDeleteHook = deletingHook !== nop;\n                if (!hasDeleteHook &&\n                    isPlainKeyRange(ctx) &&\n                    ((ctx.isPrimKey && !hangsOnDeleteLargeKeyRange) || !range)) {\n                    // May use IDBObjectStore.delete(IDBKeyRange) in this case (Issue #208)\n                    // For chromium, this is the way most optimized version.\n                    // For IE/Edge, this could hang the indexedDB engine and make operating system instable\n                    // (https://gist.github.com/dfahlander/5a39328f029de18222cf2125d56c38f7)\n                    return this._write(function (resolve, reject, idbstore) {\n                        // Our API contract is to return a count of deleted items, so we have to count() before delete().\n                        var onerror = eventRejectHandler(reject), countReq = (range ? idbstore.count(range) : idbstore.count());\n                        countReq.onerror = onerror;\n                        countReq.onsuccess = function () {\n                            var count = countReq.result;\n                            tryCatch(function () {\n                                var delReq = (range ? idbstore.delete(range) : idbstore.clear());\n                                delReq.onerror = onerror;\n                                delReq.onsuccess = function () { return resolve(count); };\n                            }, function (err) { return reject(err); });\n                        };\n                    });\n                }\n                // Default version to use when collection is not a vanilla IDBKeyRange on the primary key.\n                // Divide into chunks to not starve RAM.\n                // If has delete hook, we will have to collect not just keys but also objects, so it will use\n                // more memory and need lower chunk size.\n                var CHUNKSIZE = hasDeleteHook ? 2000 : 10000;\n                return this._write(function (resolve, reject, idbstore, trans) {\n                    var totalCount = 0;\n                    // Clone collection and change its table and set a limit of CHUNKSIZE on the cloned Collection instance.\n                    var collection = _this\n                        .clone({\n                        keysOnly: !ctx.isMatch && !hasDeleteHook\n                    }) // load just keys (unless filter() or and() or deleteHook has subscribers)\n                        .distinct() // In case multiEntry is used, never delete same key twice because resulting count\n                        .limit(CHUNKSIZE)\n                        .raw(); // Don't filter through reading-hooks (like mapped classes etc)\n                    var keysOrTuples = [];\n                    // We're gonna do things on as many chunks that are needed.\n                    // Use recursion of nextChunk function:\n                    var nextChunk = function () { return collection.each(hasDeleteHook ? function (val, cursor) {\n                        // Somebody subscribes to hook('deleting'). Collect all primary keys and their values,\n                        // so that the hook can be called with its values in bulkDelete().\n                        keysOrTuples.push([cursor.primaryKey, cursor.value]);\n                    } : function (val, cursor) {\n                        // No one subscribes to hook('deleting'). Collect only primary keys:\n                        keysOrTuples.push(cursor.primaryKey);\n                    }).then(function () {\n                        // Chromium deletes faster when doing it in sort order.\n                        hasDeleteHook ?\n                            keysOrTuples.sort(function (a, b) { return ascending(a[0], b[0]); }) :\n                            keysOrTuples.sort(ascending);\n                        return bulkDelete(idbstore, trans, keysOrTuples, hasDeleteHook, deletingHook);\n                    }).then(function () {\n                        var count = keysOrTuples.length;\n                        totalCount += count;\n                        keysOrTuples = [];\n                        return count < CHUNKSIZE ? totalCount : nextChunk();\n                    }); };\n                    resolve(nextChunk());\n                });\n            }\n        };\n    });\n    //\n    //\n    //\n    // ------------------------- Help functions ---------------------------\n    //\n    //\n    //\n    function lowerVersionFirst(a, b) {\n        return a._cfg.version - b._cfg.version;\n    }\n    function setApiOnPlace(objs, tableNames, dbschema) {\n        tableNames.forEach(function (tableName) {\n            var schema = dbschema[tableName];\n            objs.forEach(function (obj) {\n                if (!(tableName in obj)) {\n                    if (obj === Transaction.prototype || obj instanceof Transaction) {\n                        // obj is a Transaction prototype (or prototype of a subclass to Transaction)\n                        // Make the API a getter that returns this.table(tableName)\n                        setProp(obj, tableName, { get: function () { return this.table(tableName); } });\n                    }\n                    else {\n                        // Table will not be bound to a transaction (will use Dexie.currentTransaction)\n                        obj[tableName] = new Table(tableName, schema);\n                    }\n                }\n            });\n        });\n    }\n    function removeTablesApi(objs) {\n        objs.forEach(function (obj) {\n            for (var key in obj) {\n                if (obj[key] instanceof Table)\n                    delete obj[key];\n            }\n        });\n    }\n    function iterate(req, filter, fn, resolve, reject, valueMapper) {\n        // Apply valueMapper (hook('reading') or mappped class)\n        var mappedFn = valueMapper ? function (x, c, a) { return fn(valueMapper(x), c, a); } : fn;\n        // Wrap fn with PSD and microtick stuff from Promise.\n        var wrappedFn = wrap(mappedFn, reject);\n        if (!req.onerror)\n            req.onerror = eventRejectHandler(reject);\n        if (filter) {\n            req.onsuccess = trycatcher(function filter_record() {\n                var cursor = req.result;\n                if (cursor) {\n                    var c = function () { cursor.continue(); };\n                    if (filter(cursor, function (advancer) { c = advancer; }, resolve, reject))\n                        wrappedFn(cursor.value, cursor, function (advancer) { c = advancer; });\n                    c();\n                }\n                else {\n                    resolve();\n                }\n            }, reject);\n        }\n        else {\n            req.onsuccess = trycatcher(function filter_record() {\n                var cursor = req.result;\n                if (cursor) {\n                    var c = function () { cursor.continue(); };\n                    wrappedFn(cursor.value, cursor, function (advancer) { c = advancer; });\n                    c();\n                }\n                else {\n                    resolve();\n                }\n            }, reject);\n        }\n    }\n    function parseIndexSyntax(indexes) {\n        /// <param name=\"indexes\" type=\"String\"></param>\n        /// <returns type=\"Array\" elementType=\"IndexSpec\"></returns>\n        var rv = [];\n        indexes.split(',').forEach(function (index) {\n            index = index.trim();\n            var name = index.replace(/([&*]|\\+\\+)/g, \"\"); // Remove \"&\", \"++\" and \"*\"\n            // Let keyPath of \"[a+b]\" be [\"a\",\"b\"]:\n            var keyPath = /^\\[/.test(name) ? name.match(/^\\[(.*)\\]$/)[1].split('+') : name;\n            rv.push(new IndexSpec(name, keyPath || null, /\\&/.test(index), /\\*/.test(index), /\\+\\+/.test(index), isArray(keyPath), /\\./.test(index)));\n        });\n        return rv;\n    }\n    function cmp(key1, key2) {\n        return indexedDB.cmp(key1, key2);\n    }\n    function min(a, b) {\n        return cmp(a, b) < 0 ? a : b;\n    }\n    function max(a, b) {\n        return cmp(a, b) > 0 ? a : b;\n    }\n    function ascending(a, b) {\n        return indexedDB.cmp(a, b);\n    }\n    function descending(a, b) {\n        return indexedDB.cmp(b, a);\n    }\n    function simpleCompare(a, b) {\n        return a < b ? -1 : a === b ? 0 : 1;\n    }\n    function simpleCompareReverse(a, b) {\n        return a > b ? -1 : a === b ? 0 : 1;\n    }\n    function combine(filter1, filter2) {\n        return filter1 ?\n            filter2 ?\n                function () { return filter1.apply(this, arguments) && filter2.apply(this, arguments); } :\n                filter1 :\n            filter2;\n    }\n    function readGlobalSchema() {\n        db.verno = idbdb.version / 10;\n        db._dbSchema = globalSchema = {};\n        dbStoreNames = slice(idbdb.objectStoreNames, 0);\n        if (dbStoreNames.length === 0)\n            return; // Database contains no stores.\n        var trans = idbdb.transaction(safariMultiStoreFix(dbStoreNames), 'readonly');\n        dbStoreNames.forEach(function (storeName) {\n            var store = trans.objectStore(storeName), keyPath = store.keyPath, dotted = keyPath && typeof keyPath === 'string' && keyPath.indexOf('.') !== -1;\n            var primKey = new IndexSpec(keyPath, keyPath || \"\", false, false, !!store.autoIncrement, keyPath && typeof keyPath !== 'string', dotted);\n            var indexes = [];\n            for (var j = 0; j < store.indexNames.length; ++j) {\n                var idbindex = store.index(store.indexNames[j]);\n                keyPath = idbindex.keyPath;\n                dotted = keyPath && typeof keyPath === 'string' && keyPath.indexOf('.') !== -1;\n                var index = new IndexSpec(idbindex.name, keyPath, !!idbindex.unique, !!idbindex.multiEntry, false, keyPath && typeof keyPath !== 'string', dotted);\n                indexes.push(index);\n            }\n            globalSchema[storeName] = new TableSchema(storeName, primKey, indexes, {});\n        });\n        setApiOnPlace([allTables], keys(globalSchema), globalSchema);\n    }\n    function adjustToExistingIndexNames(schema, idbtrans) {\n        /// <summary>\n        /// Issue #30 Problem with existing db - adjust to existing index names when migrating from non-dexie db\n        /// </summary>\n        /// <param name=\"schema\" type=\"Object\">Map between name and TableSchema</param>\n        /// <param name=\"idbtrans\" type=\"IDBTransaction\"></param>\n        var storeNames = idbtrans.db.objectStoreNames;\n        for (var i = 0; i < storeNames.length; ++i) {\n            var storeName = storeNames[i];\n            var store = idbtrans.objectStore(storeName);\n            hasGetAll = 'getAll' in store;\n            for (var j = 0; j < store.indexNames.length; ++j) {\n                var indexName = store.indexNames[j];\n                var keyPath = store.index(indexName).keyPath;\n                var dexieName = typeof keyPath === 'string' ? keyPath : \"[\" + slice(keyPath).join('+') + \"]\";\n                if (schema[storeName]) {\n                    var indexSpec = schema[storeName].idxByName[dexieName];\n                    if (indexSpec)\n                        indexSpec.name = indexName;\n                }\n            }\n        }\n        // Bug with getAll() on Safari ver<604 on Workers only, see discussion following PR #579\n        if (/Safari/.test(navigator.userAgent) &&\n            !/(Chrome\\/|Edge\\/)/.test(navigator.userAgent) &&\n            _global.WorkerGlobalScope && _global instanceof _global.WorkerGlobalScope &&\n            [].concat(navigator.userAgent.match(/Safari\\/(\\d*)/))[1] < 604) {\n            hasGetAll = false;\n        }\n    }\n    function fireOnBlocked(ev) {\n        db.on(\"blocked\").fire(ev);\n        // Workaround (not fully*) for missing \"versionchange\" event in IE,Edge and Safari:\n        connections\n            .filter(function (c) { return c.name === db.name && c !== db && !c._vcFired; })\n            .map(function (c) { return c.on(\"versionchange\").fire(ev); });\n    }\n    extend(this, {\n        Collection: Collection,\n        Table: Table,\n        Transaction: Transaction,\n        Version: Version,\n        WhereClause: WhereClause\n    });\n    init();\n    addons.forEach(function (fn) {\n        fn(db);\n    });\n}\nfunction parseType(type) {\n    if (typeof type === 'function') {\n        return new type();\n    }\n    else if (isArray(type)) {\n        return [parseType(type[0])];\n    }\n    else if (type && typeof type === 'object') {\n        var rv = {};\n        applyStructure(rv, type);\n        return rv;\n    }\n    else {\n        return type;\n    }\n}\nfunction applyStructure(obj, structure) {\n    keys(structure).forEach(function (member) {\n        var value = parseType(structure[member]);\n        obj[member] = value;\n    });\n    return obj;\n}\nfunction hookedEventSuccessHandler(resolve) {\n    // wrap() is needed when calling hooks because the rare scenario of:\n    //  * hook does a db operation that fails immediately (IDB throws exception)\n    //    For calling db operations on correct transaction, wrap makes sure to set PSD correctly.\n    //    wrap() will also execute in a virtual tick.\n    //  * If not wrapped in a virtual tick, direct exception will launch a new physical tick.\n    //  * If this was the last event in the bulk, the promise will resolve after a physical tick\n    //    and the transaction will have committed already.\n    // If no hook, the virtual tick will be executed in the reject()/resolve of the final promise,\n    // because it is always marked with _lib = true when created using Transaction._promise().\n    return wrap(function (event) {\n        var req = event.target, ctx = req._hookCtx, // Contains the hook error handler. Put here instead of closure to boost performance.\n        result = ctx.value || req.result, // Pass the object value on updates. The result from IDB is the primary key.\n        hookSuccessHandler = ctx && ctx.onsuccess;\n        hookSuccessHandler && hookSuccessHandler(result);\n        resolve && resolve(result);\n    }, resolve);\n}\nfunction eventRejectHandler(reject) {\n    return wrap(function (event) {\n        preventDefault(event);\n        reject(event.target.error);\n        return false;\n    });\n}\nfunction eventSuccessHandler(resolve) {\n    return wrap(function (event) {\n        resolve(event.target.result);\n    });\n}\nfunction hookedEventRejectHandler(reject) {\n    return wrap(function (event) {\n        // See comment on hookedEventSuccessHandler() why wrap() is needed only when supporting hooks.\n        var req = event.target, err = req.error, ctx = req._hookCtx, // Contains the hook error handler. Put here instead of closure to boost performance.\n        hookErrorHandler = ctx && ctx.onerror;\n        hookErrorHandler && hookErrorHandler(err);\n        preventDefault(event);\n        reject(err);\n        return false;\n    });\n}\nfunction preventDefault(event) {\n    if (event.stopPropagation)\n        event.stopPropagation();\n    if (event.preventDefault)\n        event.preventDefault();\n}\nfunction awaitIterator(iterator) {\n    var callNext = function (result) { return iterator.next(result); }, doThrow = function (error) { return iterator.throw(error); }, onSuccess = step(callNext), onError = step(doThrow);\n    function step(getNext) {\n        return function (val) {\n            var next = getNext(val), value = next.value;\n            return next.done ? value :\n                (!value || typeof value.then !== 'function' ?\n                    isArray(value) ? Promise.all(value).then(onSuccess, onError) : onSuccess(value) :\n                    value.then(onSuccess, onError));\n        };\n    }\n    return step(callNext)();\n}\n//\n// IndexSpec struct\n//\nfunction IndexSpec(name, keyPath, unique, multi, auto, compound, dotted) {\n    /// <param name=\"name\" type=\"String\"></param>\n    /// <param name=\"keyPath\" type=\"String\"></param>\n    /// <param name=\"unique\" type=\"Boolean\"></param>\n    /// <param name=\"multi\" type=\"Boolean\"></param>\n    /// <param name=\"auto\" type=\"Boolean\"></param>\n    /// <param name=\"compound\" type=\"Boolean\"></param>\n    /// <param name=\"dotted\" type=\"Boolean\"></param>\n    this.name = name;\n    this.keyPath = keyPath;\n    this.unique = unique;\n    this.multi = multi;\n    this.auto = auto;\n    this.compound = compound;\n    this.dotted = dotted;\n    var keyPathSrc = typeof keyPath === 'string' ? keyPath : keyPath && ('[' + [].join.call(keyPath, '+') + ']');\n    this.src = (unique ? '&' : '') + (multi ? '*' : '') + (auto ? \"++\" : \"\") + keyPathSrc;\n}\n//\n// TableSchema struct\n//\nfunction TableSchema(name, primKey, indexes, instanceTemplate) {\n    /// <param name=\"name\" type=\"String\"></param>\n    /// <param name=\"primKey\" type=\"IndexSpec\"></param>\n    /// <param name=\"indexes\" type=\"Array\" elementType=\"IndexSpec\"></param>\n    /// <param name=\"instanceTemplate\" type=\"Object\"></param>\n    this.name = name;\n    this.primKey = primKey || new IndexSpec();\n    this.indexes = indexes || [new IndexSpec()];\n    this.instanceTemplate = instanceTemplate;\n    this.mappedClass = null;\n    this.idxByName = arrayToObject(indexes, function (index) { return [index.name, index]; });\n}\nfunction safariMultiStoreFix(storeNames) {\n    return storeNames.length === 1 ? storeNames[0] : storeNames;\n}\nfunction getNativeGetDatabaseNamesFn(indexedDB) {\n    var fn = indexedDB && (indexedDB.getDatabaseNames || indexedDB.webkitGetDatabaseNames);\n    return fn && fn.bind(indexedDB);\n}\n// Export Error classes\nprops(Dexie, fullNameExceptions); // Dexie.XXXError = class XXXError {...};\n//\n// Static methods and properties\n// \nprops(Dexie, {\n    //\n    // Static delete() method.\n    //\n    delete: function (databaseName) {\n        var db = new Dexie(databaseName), promise = db.delete();\n        promise.onblocked = function (fn) {\n            db.on(\"blocked\", fn);\n            return this;\n        };\n        return promise;\n    },\n    //\n    // Static exists() method.\n    //\n    exists: function (name) {\n        return new Dexie(name).open().then(function (db) {\n            db.close();\n            return true;\n        }).catch(Dexie.NoSuchDatabaseError, function () { return false; });\n    },\n    //\n    // Static method for retrieving a list of all existing databases at current host.\n    //\n    getDatabaseNames: function (cb) {\n        var getDatabaseNames = getNativeGetDatabaseNamesFn(Dexie.dependencies.indexedDB);\n        return getDatabaseNames ? new Promise(function (resolve, reject) {\n            var req = getDatabaseNames();\n            req.onsuccess = function (event) {\n                resolve(slice(event.target.result, 0)); // Converst DOMStringList to Array<String>\n            };\n            req.onerror = eventRejectHandler(reject);\n        }).then(cb) : dbNamesDB.dbnames.toCollection().primaryKeys(cb);\n    },\n    defineClass: function () {\n        // Default constructor able to copy given properties into this object.\n        function Class(properties) {\n            /// <param name=\"properties\" type=\"Object\" optional=\"true\">Properties to initialize object with.\n            /// </param>\n            if (properties)\n                extend(this, properties);\n        }\n        return Class;\n    },\n    applyStructure: applyStructure,\n    ignoreTransaction: function (scopeFunc) {\n        // In case caller is within a transaction but needs to create a separate transaction.\n        // Example of usage:\n        //\n        // Let's say we have a logger function in our app. Other application-logic should be unaware of the\n        // logger function and not need to include the 'logentries' table in all transaction it performs.\n        // The logging should always be done in a separate transaction and not be dependant on the current\n        // running transaction context. Then you could use Dexie.ignoreTransaction() to run code that starts a new transaction.\n        //\n        //     Dexie.ignoreTransaction(function() {\n        //         db.logentries.add(newLogEntry);\n        //     });\n        //\n        // Unless using Dexie.ignoreTransaction(), the above example would try to reuse the current transaction\n        // in current Promise-scope.\n        //\n        // An alternative to Dexie.ignoreTransaction() would be setImmediate() or setTimeout(). The reason we still provide an\n        // API for this because\n        //  1) The intention of writing the statement could be unclear if using setImmediate() or setTimeout().\n        //  2) setTimeout() would wait unnescessary until firing. This is however not the case with setImmediate().\n        //  3) setImmediate() is not supported in the ES standard.\n        //  4) You might want to keep other PSD state that was set in a parent PSD, such as PSD.letThrough.\n        return PSD.trans ?\n            usePSD(PSD.transless, scopeFunc) : // Use the closest parent that was non-transactional.\n            scopeFunc(); // No need to change scope because there is no ongoing transaction.\n    },\n    vip: function (fn) {\n        // To be used by subscribers to the on('ready') event.\n        // This will let caller through to access DB even when it is blocked while the db.ready() subscribers are firing.\n        // This would have worked automatically if we were certain that the Provider was using Dexie.Promise for all asyncronic operations. The promise PSD\n        // from the provider.connect() call would then be derived all the way to when provider would call localDatabase.applyChanges(). But since\n        // the provider more likely is using non-promise async APIs or other thenable implementations, we cannot assume that.\n        // Note that this method is only useful for on('ready') subscribers that is returning a Promise from the event. If not using vip()\n        // the database could deadlock since it wont open until the returned Promise is resolved, and any non-VIPed operation started by\n        // the caller will not resolve until database is opened.\n        return newScope(function () {\n            PSD.letThrough = true; // Make sure we are let through if still blocking db due to onready is firing.\n            return fn();\n        });\n    },\n    async: function (generatorFn) {\n        return function () {\n            try {\n                var rv = awaitIterator(generatorFn.apply(this, arguments));\n                if (!rv || typeof rv.then !== 'function')\n                    return Promise.resolve(rv);\n                return rv;\n            }\n            catch (e) {\n                return rejection(e);\n            }\n        };\n    },\n    spawn: function (generatorFn, args, thiz) {\n        try {\n            var rv = awaitIterator(generatorFn.apply(thiz, args || []));\n            if (!rv || typeof rv.then !== 'function')\n                return Promise.resolve(rv);\n            return rv;\n        }\n        catch (e) {\n            return rejection(e);\n        }\n    },\n    // Dexie.currentTransaction property\n    currentTransaction: {\n        get: function () { return PSD.trans || null; }\n    },\n    waitFor: function (promiseOrFunction, optionalTimeout) {\n        // If a function is provided, invoke it and pass the returning value to Transaction.waitFor()\n        var promise = Promise.resolve(typeof promiseOrFunction === 'function' ? Dexie.ignoreTransaction(promiseOrFunction) : promiseOrFunction)\n            .timeout(optionalTimeout || 60000); // Default the timeout to one minute. Caller may specify Infinity if required.       \n        // Run given promise on current transaction. If no current transaction, just return a Dexie promise based\n        // on given value.\n        return PSD.trans ? PSD.trans.waitFor(promise) : promise;\n    },\n    // Export our Promise implementation since it can be handy as a standalone Promise implementation\n    Promise: Promise,\n    // Dexie.debug proptery:\n    // Dexie.debug = false\n    // Dexie.debug = true\n    // Dexie.debug = \"dexie\" - don't hide dexie's stack frames.\n    debug: {\n        get: function () { return debug; },\n        set: function (value) {\n            setDebug(value, value === 'dexie' ? function () { return true; } : dexieStackFrameFilter);\n        }\n    },\n    // Export our derive/extend/override methodology\n    derive: derive,\n    extend: extend,\n    props: props,\n    override: override,\n    // Export our Events() function - can be handy as a toolkit\n    Events: Events,\n    // Utilities\n    getByKeyPath: getByKeyPath,\n    setByKeyPath: setByKeyPath,\n    delByKeyPath: delByKeyPath,\n    shallowClone: shallowClone,\n    deepClone: deepClone,\n    getObjectDiff: getObjectDiff,\n    asap: asap,\n    maxKey: maxKey,\n    minKey: minKey,\n    // Addon registry\n    addons: [],\n    // Global DB connection list\n    connections: connections,\n    MultiModifyError: exceptions.Modify,\n    errnames: errnames,\n    // Export other static classes\n    IndexSpec: IndexSpec,\n    TableSchema: TableSchema,\n    //\n    // Dependencies\n    //\n    // These will automatically work in browsers with indexedDB support, or where an indexedDB polyfill has been included.\n    //\n    // In node.js, however, these properties must be set \"manually\" before instansiating a new Dexie().\n    // For node.js, you need to require indexeddb-js or similar and then set these deps.\n    //\n    dependencies: (function () {\n        try {\n            return {\n                // Required:\n                indexedDB: _global.indexedDB || _global.mozIndexedDB || _global.webkitIndexedDB || _global.msIndexedDB,\n                IDBKeyRange: _global.IDBKeyRange || _global.webkitIDBKeyRange\n            };\n        }\n        catch (e) {\n            return {\n                indexedDB: null,\n                IDBKeyRange: null\n            };\n        }\n    })(),\n    // API Version Number: Type Number, make sure to always set a version number that can be comparable correctly. Example: 0.9, 0.91, 0.92, 1.0, 1.01, 1.1, 1.2, 1.21, etc.\n    semVer: DEXIE_VERSION,\n    version: DEXIE_VERSION.split('.')\n        .map(function (n) { return parseInt(n); })\n        .reduce(function (p, c, i) { return p + (c / Math.pow(10, i * 2)); }),\n    // https://github.com/dfahlander/Dexie.js/issues/186\n    // typescript compiler tsc in mode ts-->es5 & commonJS, will expect require() to return\n    // x.default. Workaround: Set Dexie.default = Dexie.\n    default: Dexie,\n    // Make it possible to import {Dexie} (non-default import)\n    // Reason 1: May switch to that in future.\n    // Reason 2: We declare it both default and named exported in d.ts to make it possible\n    // to let addons extend the Dexie interface with Typescript 2.1 (works only when explicitely\n    // exporting the symbol, not just default exporting)\n    Dexie: Dexie\n});\n// Map DOMErrors and DOMExceptions to corresponding Dexie errors. May change in Dexie v2.0.\nPromise.rejectionMapper = mapError;\n// Initialize dbNamesDB (won't ever be opened on chromium browsers')\ndbNamesDB = new Dexie('__dbnames');\ndbNamesDB.version(1).stores({ dbnames: 'name' });\n(function () {\n    // Migrate from Dexie 1.x database names stored in localStorage:\n    var DBNAMES = 'Dexie.DatabaseNames';\n    try {\n        if (typeof localStorage !== undefined && _global.document !== undefined) {\n            // Have localStorage and is not executing in a worker. Lets migrate from Dexie 1.x.\n            JSON.parse(localStorage.getItem(DBNAMES) || \"[]\")\n                .forEach(function (name) { return dbNamesDB.dbnames.put({ name: name }).catch(nop); });\n            localStorage.removeItem(DBNAMES);\n        }\n    }\n    catch (_e) { }\n})();\n\nreturn Dexie;\n\n})));\n//# sourceMappingURL=dexie.js.map\n","var generatePrime = require('./lib/generatePrime')\nvar primes = require('./lib/primes.json')\n\nvar DH = require('./lib/dh')\n\nfunction getDiffieHellman (mod) {\n  var prime = new Buffer(primes[mod].prime, 'hex')\n  var gen = new Buffer(primes[mod].gen, 'hex')\n\n  return new DH(prime, gen)\n}\n\nvar ENCODINGS = {\n  'binary': true, 'hex': true, 'base64': true\n}\n\nfunction createDiffieHellman (prime, enc, generator, genc) {\n  if (Buffer.isBuffer(enc) || ENCODINGS[enc] === undefined) {\n    return createDiffieHellman(prime, 'binary', enc, generator)\n  }\n\n  enc = enc || 'binary'\n  genc = genc || 'binary'\n  generator = generator || new Buffer([2])\n\n  if (!Buffer.isBuffer(generator)) {\n    generator = new Buffer(generator, genc)\n  }\n\n  if (typeof prime === 'number') {\n    return new DH(generatePrime(prime, generator), generator, true)\n  }\n\n  if (!Buffer.isBuffer(prime)) {\n    prime = new Buffer(prime, enc)\n  }\n\n  return new DH(prime, generator, true)\n}\n\nexports.DiffieHellmanGroup = exports.createDiffieHellmanGroup = exports.getDiffieHellman = getDiffieHellman\nexports.createDiffieHellman = exports.DiffieHellman = createDiffieHellman\n","var BN = require('bn.js');\nvar MillerRabin = require('miller-rabin');\nvar millerRabin = new MillerRabin();\nvar TWENTYFOUR = new BN(24);\nvar ELEVEN = new BN(11);\nvar TEN = new BN(10);\nvar THREE = new BN(3);\nvar SEVEN = new BN(7);\nvar primes = require('./generatePrime');\nvar randomBytes = require('randombytes');\nmodule.exports = DH;\n\nfunction setPublicKey(pub, enc) {\n  enc = enc || 'utf8';\n  if (!Buffer.isBuffer(pub)) {\n    pub = new Buffer(pub, enc);\n  }\n  this._pub = new BN(pub);\n  return this;\n}\n\nfunction setPrivateKey(priv, enc) {\n  enc = enc || 'utf8';\n  if (!Buffer.isBuffer(priv)) {\n    priv = new Buffer(priv, enc);\n  }\n  this._priv = new BN(priv);\n  return this;\n}\n\nvar primeCache = {};\nfunction checkPrime(prime, generator) {\n  var gen = generator.toString('hex');\n  var hex = [gen, prime.toString(16)].join('_');\n  if (hex in primeCache) {\n    return primeCache[hex];\n  }\n  var error = 0;\n\n  if (prime.isEven() ||\n    !primes.simpleSieve ||\n    !primes.fermatTest(prime) ||\n    !millerRabin.test(prime)) {\n    //not a prime so +1\n    error += 1;\n\n    if (gen === '02' || gen === '05') {\n      // we'd be able to check the generator\n      // it would fail so +8\n      error += 8;\n    } else {\n      //we wouldn't be able to test the generator\n      // so +4\n      error += 4;\n    }\n    primeCache[hex] = error;\n    return error;\n  }\n  if (!millerRabin.test(prime.shrn(1))) {\n    //not a safe prime\n    error += 2;\n  }\n  var rem;\n  switch (gen) {\n    case '02':\n      if (prime.mod(TWENTYFOUR).cmp(ELEVEN)) {\n        // unsuidable generator\n        error += 8;\n      }\n      break;\n    case '05':\n      rem = prime.mod(TEN);\n      if (rem.cmp(THREE) && rem.cmp(SEVEN)) {\n        // prime mod 10 needs to equal 3 or 7\n        error += 8;\n      }\n      break;\n    default:\n      error += 4;\n  }\n  primeCache[hex] = error;\n  return error;\n}\n\nfunction DH(prime, generator, malleable) {\n  this.setGenerator(generator);\n  this.__prime = new BN(prime);\n  this._prime = BN.mont(this.__prime);\n  this._primeLen = prime.length;\n  this._pub = undefined;\n  this._priv = undefined;\n  this._primeCode = undefined;\n  if (malleable) {\n    this.setPublicKey = setPublicKey;\n    this.setPrivateKey = setPrivateKey;\n  } else {\n    this._primeCode = 8;\n  }\n}\nObject.defineProperty(DH.prototype, 'verifyError', {\n  enumerable: true,\n  get: function () {\n    if (typeof this._primeCode !== 'number') {\n      this._primeCode = checkPrime(this.__prime, this.__gen);\n    }\n    return this._primeCode;\n  }\n});\nDH.prototype.generateKeys = function () {\n  if (!this._priv) {\n    this._priv = new BN(randomBytes(this._primeLen));\n  }\n  this._pub = this._gen.toRed(this._prime).redPow(this._priv).fromRed();\n  return this.getPublicKey();\n};\n\nDH.prototype.computeSecret = function (other) {\n  other = new BN(other);\n  other = other.toRed(this._prime);\n  var secret = other.redPow(this._priv).fromRed();\n  var out = new Buffer(secret.toArray());\n  var prime = this.getPrime();\n  if (out.length < prime.length) {\n    var front = new Buffer(prime.length - out.length);\n    front.fill(0);\n    out = Buffer.concat([front, out]);\n  }\n  return out;\n};\n\nDH.prototype.getPublicKey = function getPublicKey(enc) {\n  return formatReturnValue(this._pub, enc);\n};\n\nDH.prototype.getPrivateKey = function getPrivateKey(enc) {\n  return formatReturnValue(this._priv, enc);\n};\n\nDH.prototype.getPrime = function (enc) {\n  return formatReturnValue(this.__prime, enc);\n};\n\nDH.prototype.getGenerator = function (enc) {\n  return formatReturnValue(this._gen, enc);\n};\n\nDH.prototype.setGenerator = function (gen, enc) {\n  enc = enc || 'utf8';\n  if (!Buffer.isBuffer(gen)) {\n    gen = new Buffer(gen, enc);\n  }\n  this.__gen = gen;\n  this._gen = new BN(gen);\n  return this;\n};\n\nfunction formatReturnValue(bn, enc) {\n  var buf = new Buffer(bn.toArray());\n  if (!enc) {\n    return buf;\n  } else {\n    return buf.toString(enc);\n  }\n}\n","var randomBytes = require('randombytes');\nmodule.exports = findPrime;\nfindPrime.simpleSieve = simpleSieve;\nfindPrime.fermatTest = fermatTest;\nvar BN = require('bn.js');\nvar TWENTYFOUR = new BN(24);\nvar MillerRabin = require('miller-rabin');\nvar millerRabin = new MillerRabin();\nvar ONE = new BN(1);\nvar TWO = new BN(2);\nvar FIVE = new BN(5);\nvar SIXTEEN = new BN(16);\nvar EIGHT = new BN(8);\nvar TEN = new BN(10);\nvar THREE = new BN(3);\nvar SEVEN = new BN(7);\nvar ELEVEN = new BN(11);\nvar FOUR = new BN(4);\nvar TWELVE = new BN(12);\nvar primes = null;\n\nfunction _getPrimes() {\n  if (primes !== null)\n    return primes;\n\n  var limit = 0x100000;\n  var res = [];\n  res[0] = 2;\n  for (var i = 1, k = 3; k < limit; k += 2) {\n    var sqrt = Math.ceil(Math.sqrt(k));\n    for (var j = 0; j < i && res[j] <= sqrt; j++)\n      if (k % res[j] === 0)\n        break;\n\n    if (i !== j && res[j] <= sqrt)\n      continue;\n\n    res[i++] = k;\n  }\n  primes = res;\n  return res;\n}\n\nfunction simpleSieve(p) {\n  var primes = _getPrimes();\n\n  for (var i = 0; i < primes.length; i++)\n    if (p.modn(primes[i]) === 0) {\n      if (p.cmpn(primes[i]) === 0) {\n        return true;\n      } else {\n        return false;\n      }\n    }\n\n  return true;\n}\n\nfunction fermatTest(p) {\n  var red = BN.mont(p);\n  return TWO.toRed(red).redPow(p.subn(1)).fromRed().cmpn(1) === 0;\n}\n\nfunction findPrime(bits, gen) {\n  if (bits < 16) {\n    // this is what openssl does\n    if (gen === 2 || gen === 5) {\n      return new BN([0x8c, 0x7b]);\n    } else {\n      return new BN([0x8c, 0x27]);\n    }\n  }\n  gen = new BN(gen);\n\n  var num, n2;\n\n  while (true) {\n    num = new BN(randomBytes(Math.ceil(bits / 8)));\n    while (num.bitLength() > bits) {\n      num.ishrn(1);\n    }\n    if (num.isEven()) {\n      num.iadd(ONE);\n    }\n    if (!num.testn(1)) {\n      num.iadd(TWO);\n    }\n    if (!gen.cmp(TWO)) {\n      while (num.mod(TWENTYFOUR).cmp(ELEVEN)) {\n        num.iadd(FOUR);\n      }\n    } else if (!gen.cmp(FIVE)) {\n      while (num.mod(TEN).cmp(THREE)) {\n        num.iadd(FOUR);\n      }\n    }\n    n2 = num.shrn(1);\n    if (simpleSieve(n2) && simpleSieve(num) &&\n      fermatTest(n2) && fermatTest(num) &&\n      millerRabin.test(n2) && millerRabin.test(num)) {\n      return num;\n    }\n  }\n\n}\n","'use strict';\n\nvar elliptic = exports;\n\nelliptic.version = require('../package.json').version;\nelliptic.utils = require('./elliptic/utils');\nelliptic.rand = require('brorand');\nelliptic.curve = require('./elliptic/curve');\nelliptic.curves = require('./elliptic/curves');\n\n// Protocols\nelliptic.ec = require('./elliptic/ec');\nelliptic.eddsa = require('./elliptic/eddsa');\n","'use strict';\n\nvar BN = require('bn.js');\nvar utils = require('../utils');\nvar getNAF = utils.getNAF;\nvar getJSF = utils.getJSF;\nvar assert = utils.assert;\n\nfunction BaseCurve(type, conf) {\n  this.type = type;\n  this.p = new BN(conf.p, 16);\n\n  // Use Montgomery, when there is no fast reduction for the prime\n  this.red = conf.prime ? BN.red(conf.prime) : BN.mont(this.p);\n\n  // Useful for many curves\n  this.zero = new BN(0).toRed(this.red);\n  this.one = new BN(1).toRed(this.red);\n  this.two = new BN(2).toRed(this.red);\n\n  // Curve configuration, optional\n  this.n = conf.n && new BN(conf.n, 16);\n  this.g = conf.g && this.pointFromJSON(conf.g, conf.gRed);\n\n  // Temporary arrays\n  this._wnafT1 = new Array(4);\n  this._wnafT2 = new Array(4);\n  this._wnafT3 = new Array(4);\n  this._wnafT4 = new Array(4);\n\n  this._bitLength = this.n ? this.n.bitLength() : 0;\n\n  // Generalized Greg Maxwell's trick\n  var adjustCount = this.n && this.p.div(this.n);\n  if (!adjustCount || adjustCount.cmpn(100) > 0) {\n    this.redN = null;\n  } else {\n    this._maxwellTrick = true;\n    this.redN = this.n.toRed(this.red);\n  }\n}\nmodule.exports = BaseCurve;\n\nBaseCurve.prototype.point = function point() {\n  throw new Error('Not implemented');\n};\n\nBaseCurve.prototype.validate = function validate() {\n  throw new Error('Not implemented');\n};\n\nBaseCurve.prototype._fixedNafMul = function _fixedNafMul(p, k) {\n  assert(p.precomputed);\n  var doubles = p._getDoubles();\n\n  var naf = getNAF(k, 1, this._bitLength);\n  var I = (1 << (doubles.step + 1)) - (doubles.step % 2 === 0 ? 2 : 1);\n  I /= 3;\n\n  // Translate into more windowed form\n  var repr = [];\n  var j;\n  var nafW;\n  for (j = 0; j < naf.length; j += doubles.step) {\n    nafW = 0;\n    for (var l = j + doubles.step - 1; l >= j; l--)\n      nafW = (nafW << 1) + naf[l];\n    repr.push(nafW);\n  }\n\n  var a = this.jpoint(null, null, null);\n  var b = this.jpoint(null, null, null);\n  for (var i = I; i > 0; i--) {\n    for (j = 0; j < repr.length; j++) {\n      nafW = repr[j];\n      if (nafW === i)\n        b = b.mixedAdd(doubles.points[j]);\n      else if (nafW === -i)\n        b = b.mixedAdd(doubles.points[j].neg());\n    }\n    a = a.add(b);\n  }\n  return a.toP();\n};\n\nBaseCurve.prototype._wnafMul = function _wnafMul(p, k) {\n  var w = 4;\n\n  // Precompute window\n  var nafPoints = p._getNAFPoints(w);\n  w = nafPoints.wnd;\n  var wnd = nafPoints.points;\n\n  // Get NAF form\n  var naf = getNAF(k, w, this._bitLength);\n\n  // Add `this`*(N+1) for every w-NAF index\n  var acc = this.jpoint(null, null, null);\n  for (var i = naf.length - 1; i >= 0; i--) {\n    // Count zeroes\n    for (var l = 0; i >= 0 && naf[i] === 0; i--)\n      l++;\n    if (i >= 0)\n      l++;\n    acc = acc.dblp(l);\n\n    if (i < 0)\n      break;\n    var z = naf[i];\n    assert(z !== 0);\n    if (p.type === 'affine') {\n      // J +- P\n      if (z > 0)\n        acc = acc.mixedAdd(wnd[(z - 1) >> 1]);\n      else\n        acc = acc.mixedAdd(wnd[(-z - 1) >> 1].neg());\n    } else {\n      // J +- J\n      if (z > 0)\n        acc = acc.add(wnd[(z - 1) >> 1]);\n      else\n        acc = acc.add(wnd[(-z - 1) >> 1].neg());\n    }\n  }\n  return p.type === 'affine' ? acc.toP() : acc;\n};\n\nBaseCurve.prototype._wnafMulAdd = function _wnafMulAdd(defW,\n  points,\n  coeffs,\n  len,\n  jacobianResult) {\n  var wndWidth = this._wnafT1;\n  var wnd = this._wnafT2;\n  var naf = this._wnafT3;\n\n  // Fill all arrays\n  var max = 0;\n  var i;\n  var j;\n  var p;\n  for (i = 0; i < len; i++) {\n    p = points[i];\n    var nafPoints = p._getNAFPoints(defW);\n    wndWidth[i] = nafPoints.wnd;\n    wnd[i] = nafPoints.points;\n  }\n\n  // Comb small window NAFs\n  for (i = len - 1; i >= 1; i -= 2) {\n    var a = i - 1;\n    var b = i;\n    if (wndWidth[a] !== 1 || wndWidth[b] !== 1) {\n      naf[a] = getNAF(coeffs[a], wndWidth[a], this._bitLength);\n      naf[b] = getNAF(coeffs[b], wndWidth[b], this._bitLength);\n      max = Math.max(naf[a].length, max);\n      max = Math.max(naf[b].length, max);\n      continue;\n    }\n\n    var comb = [\n      points[a], /* 1 */\n      null, /* 3 */\n      null, /* 5 */\n      points[b], /* 7 */\n    ];\n\n    // Try to avoid Projective points, if possible\n    if (points[a].y.cmp(points[b].y) === 0) {\n      comb[1] = points[a].add(points[b]);\n      comb[2] = points[a].toJ().mixedAdd(points[b].neg());\n    } else if (points[a].y.cmp(points[b].y.redNeg()) === 0) {\n      comb[1] = points[a].toJ().mixedAdd(points[b]);\n      comb[2] = points[a].add(points[b].neg());\n    } else {\n      comb[1] = points[a].toJ().mixedAdd(points[b]);\n      comb[2] = points[a].toJ().mixedAdd(points[b].neg());\n    }\n\n    var index = [\n      -3, /* -1 -1 */\n      -1, /* -1 0 */\n      -5, /* -1 1 */\n      -7, /* 0 -1 */\n      0, /* 0 0 */\n      7, /* 0 1 */\n      5, /* 1 -1 */\n      1, /* 1 0 */\n      3,  /* 1 1 */\n    ];\n\n    var jsf = getJSF(coeffs[a], coeffs[b]);\n    max = Math.max(jsf[0].length, max);\n    naf[a] = new Array(max);\n    naf[b] = new Array(max);\n    for (j = 0; j < max; j++) {\n      var ja = jsf[0][j] | 0;\n      var jb = jsf[1][j] | 0;\n\n      naf[a][j] = index[(ja + 1) * 3 + (jb + 1)];\n      naf[b][j] = 0;\n      wnd[a] = comb;\n    }\n  }\n\n  var acc = this.jpoint(null, null, null);\n  var tmp = this._wnafT4;\n  for (i = max; i >= 0; i--) {\n    var k = 0;\n\n    while (i >= 0) {\n      var zero = true;\n      for (j = 0; j < len; j++) {\n        tmp[j] = naf[j][i] | 0;\n        if (tmp[j] !== 0)\n          zero = false;\n      }\n      if (!zero)\n        break;\n      k++;\n      i--;\n    }\n    if (i >= 0)\n      k++;\n    acc = acc.dblp(k);\n    if (i < 0)\n      break;\n\n    for (j = 0; j < len; j++) {\n      var z = tmp[j];\n      p;\n      if (z === 0)\n        continue;\n      else if (z > 0)\n        p = wnd[j][(z - 1) >> 1];\n      else if (z < 0)\n        p = wnd[j][(-z - 1) >> 1].neg();\n\n      if (p.type === 'affine')\n        acc = acc.mixedAdd(p);\n      else\n        acc = acc.add(p);\n    }\n  }\n  // Zeroify references\n  for (i = 0; i < len; i++)\n    wnd[i] = null;\n\n  if (jacobianResult)\n    return acc;\n  else\n    return acc.toP();\n};\n\nfunction BasePoint(curve, type) {\n  this.curve = curve;\n  this.type = type;\n  this.precomputed = null;\n}\nBaseCurve.BasePoint = BasePoint;\n\nBasePoint.prototype.eq = function eq(/*other*/) {\n  throw new Error('Not implemented');\n};\n\nBasePoint.prototype.validate = function validate() {\n  return this.curve.validate(this);\n};\n\nBaseCurve.prototype.decodePoint = function decodePoint(bytes, enc) {\n  bytes = utils.toArray(bytes, enc);\n\n  var len = this.p.byteLength();\n\n  // uncompressed, hybrid-odd, hybrid-even\n  if ((bytes[0] === 0x04 || bytes[0] === 0x06 || bytes[0] === 0x07) &&\n      bytes.length - 1 === 2 * len) {\n    if (bytes[0] === 0x06)\n      assert(bytes[bytes.length - 1] % 2 === 0);\n    else if (bytes[0] === 0x07)\n      assert(bytes[bytes.length - 1] % 2 === 1);\n\n    var res =  this.point(bytes.slice(1, 1 + len),\n      bytes.slice(1 + len, 1 + 2 * len));\n\n    return res;\n  } else if ((bytes[0] === 0x02 || bytes[0] === 0x03) &&\n              bytes.length - 1 === len) {\n    return this.pointFromX(bytes.slice(1, 1 + len), bytes[0] === 0x03);\n  }\n  throw new Error('Unknown point format');\n};\n\nBasePoint.prototype.encodeCompressed = function encodeCompressed(enc) {\n  return this.encode(enc, true);\n};\n\nBasePoint.prototype._encode = function _encode(compact) {\n  var len = this.curve.p.byteLength();\n  var x = this.getX().toArray('be', len);\n\n  if (compact)\n    return [ this.getY().isEven() ? 0x02 : 0x03 ].concat(x);\n\n  return [ 0x04 ].concat(x, this.getY().toArray('be', len));\n};\n\nBasePoint.prototype.encode = function encode(enc, compact) {\n  return utils.encode(this._encode(compact), enc);\n};\n\nBasePoint.prototype.precompute = function precompute(power) {\n  if (this.precomputed)\n    return this;\n\n  var precomputed = {\n    doubles: null,\n    naf: null,\n    beta: null,\n  };\n  precomputed.naf = this._getNAFPoints(8);\n  precomputed.doubles = this._getDoubles(4, power);\n  precomputed.beta = this._getBeta();\n  this.precomputed = precomputed;\n\n  return this;\n};\n\nBasePoint.prototype._hasDoubles = function _hasDoubles(k) {\n  if (!this.precomputed)\n    return false;\n\n  var doubles = this.precomputed.doubles;\n  if (!doubles)\n    return false;\n\n  return doubles.points.length >= Math.ceil((k.bitLength() + 1) / doubles.step);\n};\n\nBasePoint.prototype._getDoubles = function _getDoubles(step, power) {\n  if (this.precomputed && this.precomputed.doubles)\n    return this.precomputed.doubles;\n\n  var doubles = [ this ];\n  var acc = this;\n  for (var i = 0; i < power; i += step) {\n    for (var j = 0; j < step; j++)\n      acc = acc.dbl();\n    doubles.push(acc);\n  }\n  return {\n    step: step,\n    points: doubles,\n  };\n};\n\nBasePoint.prototype._getNAFPoints = function _getNAFPoints(wnd) {\n  if (this.precomputed && this.precomputed.naf)\n    return this.precomputed.naf;\n\n  var res = [ this ];\n  var max = (1 << wnd) - 1;\n  var dbl = max === 1 ? null : this.dbl();\n  for (var i = 1; i < max; i++)\n    res[i] = res[i - 1].add(dbl);\n  return {\n    wnd: wnd,\n    points: res,\n  };\n};\n\nBasePoint.prototype._getBeta = function _getBeta() {\n  return null;\n};\n\nBasePoint.prototype.dblp = function dblp(k) {\n  var r = this;\n  for (var i = 0; i < k; i++)\n    r = r.dbl();\n  return r;\n};\n","'use strict';\n\nvar utils = require('../utils');\nvar BN = require('bn.js');\nvar inherits = require('inherits');\nvar Base = require('./base');\n\nvar assert = utils.assert;\n\nfunction EdwardsCurve(conf) {\n  // NOTE: Important as we are creating point in Base.call()\n  this.twisted = (conf.a | 0) !== 1;\n  this.mOneA = this.twisted && (conf.a | 0) === -1;\n  this.extended = this.mOneA;\n\n  Base.call(this, 'edwards', conf);\n\n  this.a = new BN(conf.a, 16).umod(this.red.m);\n  this.a = this.a.toRed(this.red);\n  this.c = new BN(conf.c, 16).toRed(this.red);\n  this.c2 = this.c.redSqr();\n  this.d = new BN(conf.d, 16).toRed(this.red);\n  this.dd = this.d.redAdd(this.d);\n\n  assert(!this.twisted || this.c.fromRed().cmpn(1) === 0);\n  this.oneC = (conf.c | 0) === 1;\n}\ninherits(EdwardsCurve, Base);\nmodule.exports = EdwardsCurve;\n\nEdwardsCurve.prototype._mulA = function _mulA(num) {\n  if (this.mOneA)\n    return num.redNeg();\n  else\n    return this.a.redMul(num);\n};\n\nEdwardsCurve.prototype._mulC = function _mulC(num) {\n  if (this.oneC)\n    return num;\n  else\n    return this.c.redMul(num);\n};\n\n// Just for compatibility with Short curve\nEdwardsCurve.prototype.jpoint = function jpoint(x, y, z, t) {\n  return this.point(x, y, z, t);\n};\n\nEdwardsCurve.prototype.pointFromX = function pointFromX(x, odd) {\n  x = new BN(x, 16);\n  if (!x.red)\n    x = x.toRed(this.red);\n\n  var x2 = x.redSqr();\n  var rhs = this.c2.redSub(this.a.redMul(x2));\n  var lhs = this.one.redSub(this.c2.redMul(this.d).redMul(x2));\n\n  var y2 = rhs.redMul(lhs.redInvm());\n  var y = y2.redSqrt();\n  if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)\n    throw new Error('invalid point');\n\n  var isOdd = y.fromRed().isOdd();\n  if (odd && !isOdd || !odd && isOdd)\n    y = y.redNeg();\n\n  return this.point(x, y);\n};\n\nEdwardsCurve.prototype.pointFromY = function pointFromY(y, odd) {\n  y = new BN(y, 16);\n  if (!y.red)\n    y = y.toRed(this.red);\n\n  // x^2 = (y^2 - c^2) / (c^2 d y^2 - a)\n  var y2 = y.redSqr();\n  var lhs = y2.redSub(this.c2);\n  var rhs = y2.redMul(this.d).redMul(this.c2).redSub(this.a);\n  var x2 = lhs.redMul(rhs.redInvm());\n\n  if (x2.cmp(this.zero) === 0) {\n    if (odd)\n      throw new Error('invalid point');\n    else\n      return this.point(this.zero, y);\n  }\n\n  var x = x2.redSqrt();\n  if (x.redSqr().redSub(x2).cmp(this.zero) !== 0)\n    throw new Error('invalid point');\n\n  if (x.fromRed().isOdd() !== odd)\n    x = x.redNeg();\n\n  return this.point(x, y);\n};\n\nEdwardsCurve.prototype.validate = function validate(point) {\n  if (point.isInfinity())\n    return true;\n\n  // Curve: A * X^2 + Y^2 = C^2 * (1 + D * X^2 * Y^2)\n  point.normalize();\n\n  var x2 = point.x.redSqr();\n  var y2 = point.y.redSqr();\n  var lhs = x2.redMul(this.a).redAdd(y2);\n  var rhs = this.c2.redMul(this.one.redAdd(this.d.redMul(x2).redMul(y2)));\n\n  return lhs.cmp(rhs) === 0;\n};\n\nfunction Point(curve, x, y, z, t) {\n  Base.BasePoint.call(this, curve, 'projective');\n  if (x === null && y === null && z === null) {\n    this.x = this.curve.zero;\n    this.y = this.curve.one;\n    this.z = this.curve.one;\n    this.t = this.curve.zero;\n    this.zOne = true;\n  } else {\n    this.x = new BN(x, 16);\n    this.y = new BN(y, 16);\n    this.z = z ? new BN(z, 16) : this.curve.one;\n    this.t = t && new BN(t, 16);\n    if (!this.x.red)\n      this.x = this.x.toRed(this.curve.red);\n    if (!this.y.red)\n      this.y = this.y.toRed(this.curve.red);\n    if (!this.z.red)\n      this.z = this.z.toRed(this.curve.red);\n    if (this.t && !this.t.red)\n      this.t = this.t.toRed(this.curve.red);\n    this.zOne = this.z === this.curve.one;\n\n    // Use extended coordinates\n    if (this.curve.extended && !this.t) {\n      this.t = this.x.redMul(this.y);\n      if (!this.zOne)\n        this.t = this.t.redMul(this.z.redInvm());\n    }\n  }\n}\ninherits(Point, Base.BasePoint);\n\nEdwardsCurve.prototype.pointFromJSON = function pointFromJSON(obj) {\n  return Point.fromJSON(this, obj);\n};\n\nEdwardsCurve.prototype.point = function point(x, y, z, t) {\n  return new Point(this, x, y, z, t);\n};\n\nPoint.fromJSON = function fromJSON(curve, obj) {\n  return new Point(curve, obj[0], obj[1], obj[2]);\n};\n\nPoint.prototype.inspect = function inspect() {\n  if (this.isInfinity())\n    return '<EC Point Infinity>';\n  return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +\n      ' y: ' + this.y.fromRed().toString(16, 2) +\n      ' z: ' + this.z.fromRed().toString(16, 2) + '>';\n};\n\nPoint.prototype.isInfinity = function isInfinity() {\n  // XXX This code assumes that zero is always zero in red\n  return this.x.cmpn(0) === 0 &&\n    (this.y.cmp(this.z) === 0 ||\n    (this.zOne && this.y.cmp(this.curve.c) === 0));\n};\n\nPoint.prototype._extDbl = function _extDbl() {\n  // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html\n  //     #doubling-dbl-2008-hwcd\n  // 4M + 4S\n\n  // A = X1^2\n  var a = this.x.redSqr();\n  // B = Y1^2\n  var b = this.y.redSqr();\n  // C = 2 * Z1^2\n  var c = this.z.redSqr();\n  c = c.redIAdd(c);\n  // D = a * A\n  var d = this.curve._mulA(a);\n  // E = (X1 + Y1)^2 - A - B\n  var e = this.x.redAdd(this.y).redSqr().redISub(a).redISub(b);\n  // G = D + B\n  var g = d.redAdd(b);\n  // F = G - C\n  var f = g.redSub(c);\n  // H = D - B\n  var h = d.redSub(b);\n  // X3 = E * F\n  var nx = e.redMul(f);\n  // Y3 = G * H\n  var ny = g.redMul(h);\n  // T3 = E * H\n  var nt = e.redMul(h);\n  // Z3 = F * G\n  var nz = f.redMul(g);\n  return this.curve.point(nx, ny, nz, nt);\n};\n\nPoint.prototype._projDbl = function _projDbl() {\n  // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html\n  //     #doubling-dbl-2008-bbjlp\n  //     #doubling-dbl-2007-bl\n  // and others\n  // Generally 3M + 4S or 2M + 4S\n\n  // B = (X1 + Y1)^2\n  var b = this.x.redAdd(this.y).redSqr();\n  // C = X1^2\n  var c = this.x.redSqr();\n  // D = Y1^2\n  var d = this.y.redSqr();\n\n  var nx;\n  var ny;\n  var nz;\n  var e;\n  var h;\n  var j;\n  if (this.curve.twisted) {\n    // E = a * C\n    e = this.curve._mulA(c);\n    // F = E + D\n    var f = e.redAdd(d);\n    if (this.zOne) {\n      // X3 = (B - C - D) * (F - 2)\n      nx = b.redSub(c).redSub(d).redMul(f.redSub(this.curve.two));\n      // Y3 = F * (E - D)\n      ny = f.redMul(e.redSub(d));\n      // Z3 = F^2 - 2 * F\n      nz = f.redSqr().redSub(f).redSub(f);\n    } else {\n      // H = Z1^2\n      h = this.z.redSqr();\n      // J = F - 2 * H\n      j = f.redSub(h).redISub(h);\n      // X3 = (B-C-D)*J\n      nx = b.redSub(c).redISub(d).redMul(j);\n      // Y3 = F * (E - D)\n      ny = f.redMul(e.redSub(d));\n      // Z3 = F * J\n      nz = f.redMul(j);\n    }\n  } else {\n    // E = C + D\n    e = c.redAdd(d);\n    // H = (c * Z1)^2\n    h = this.curve._mulC(this.z).redSqr();\n    // J = E - 2 * H\n    j = e.redSub(h).redSub(h);\n    // X3 = c * (B - E) * J\n    nx = this.curve._mulC(b.redISub(e)).redMul(j);\n    // Y3 = c * E * (C - D)\n    ny = this.curve._mulC(e).redMul(c.redISub(d));\n    // Z3 = E * J\n    nz = e.redMul(j);\n  }\n  return this.curve.point(nx, ny, nz);\n};\n\nPoint.prototype.dbl = function dbl() {\n  if (this.isInfinity())\n    return this;\n\n  // Double in extended coordinates\n  if (this.curve.extended)\n    return this._extDbl();\n  else\n    return this._projDbl();\n};\n\nPoint.prototype._extAdd = function _extAdd(p) {\n  // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html\n  //     #addition-add-2008-hwcd-3\n  // 8M\n\n  // A = (Y1 - X1) * (Y2 - X2)\n  var a = this.y.redSub(this.x).redMul(p.y.redSub(p.x));\n  // B = (Y1 + X1) * (Y2 + X2)\n  var b = this.y.redAdd(this.x).redMul(p.y.redAdd(p.x));\n  // C = T1 * k * T2\n  var c = this.t.redMul(this.curve.dd).redMul(p.t);\n  // D = Z1 * 2 * Z2\n  var d = this.z.redMul(p.z.redAdd(p.z));\n  // E = B - A\n  var e = b.redSub(a);\n  // F = D - C\n  var f = d.redSub(c);\n  // G = D + C\n  var g = d.redAdd(c);\n  // H = B + A\n  var h = b.redAdd(a);\n  // X3 = E * F\n  var nx = e.redMul(f);\n  // Y3 = G * H\n  var ny = g.redMul(h);\n  // T3 = E * H\n  var nt = e.redMul(h);\n  // Z3 = F * G\n  var nz = f.redMul(g);\n  return this.curve.point(nx, ny, nz, nt);\n};\n\nPoint.prototype._projAdd = function _projAdd(p) {\n  // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html\n  //     #addition-add-2008-bbjlp\n  //     #addition-add-2007-bl\n  // 10M + 1S\n\n  // A = Z1 * Z2\n  var a = this.z.redMul(p.z);\n  // B = A^2\n  var b = a.redSqr();\n  // C = X1 * X2\n  var c = this.x.redMul(p.x);\n  // D = Y1 * Y2\n  var d = this.y.redMul(p.y);\n  // E = d * C * D\n  var e = this.curve.d.redMul(c).redMul(d);\n  // F = B - E\n  var f = b.redSub(e);\n  // G = B + E\n  var g = b.redAdd(e);\n  // X3 = A * F * ((X1 + Y1) * (X2 + Y2) - C - D)\n  var tmp = this.x.redAdd(this.y).redMul(p.x.redAdd(p.y)).redISub(c).redISub(d);\n  var nx = a.redMul(f).redMul(tmp);\n  var ny;\n  var nz;\n  if (this.curve.twisted) {\n    // Y3 = A * G * (D - a * C)\n    ny = a.redMul(g).redMul(d.redSub(this.curve._mulA(c)));\n    // Z3 = F * G\n    nz = f.redMul(g);\n  } else {\n    // Y3 = A * G * (D - C)\n    ny = a.redMul(g).redMul(d.redSub(c));\n    // Z3 = c * F * G\n    nz = this.curve._mulC(f).redMul(g);\n  }\n  return this.curve.point(nx, ny, nz);\n};\n\nPoint.prototype.add = function add(p) {\n  if (this.isInfinity())\n    return p;\n  if (p.isInfinity())\n    return this;\n\n  if (this.curve.extended)\n    return this._extAdd(p);\n  else\n    return this._projAdd(p);\n};\n\nPoint.prototype.mul = function mul(k) {\n  if (this._hasDoubles(k))\n    return this.curve._fixedNafMul(this, k);\n  else\n    return this.curve._wnafMul(this, k);\n};\n\nPoint.prototype.mulAdd = function mulAdd(k1, p, k2) {\n  return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, false);\n};\n\nPoint.prototype.jmulAdd = function jmulAdd(k1, p, k2) {\n  return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, true);\n};\n\nPoint.prototype.normalize = function normalize() {\n  if (this.zOne)\n    return this;\n\n  // Normalize coordinates\n  var zi = this.z.redInvm();\n  this.x = this.x.redMul(zi);\n  this.y = this.y.redMul(zi);\n  if (this.t)\n    this.t = this.t.redMul(zi);\n  this.z = this.curve.one;\n  this.zOne = true;\n  return this;\n};\n\nPoint.prototype.neg = function neg() {\n  return this.curve.point(this.x.redNeg(),\n    this.y,\n    this.z,\n    this.t && this.t.redNeg());\n};\n\nPoint.prototype.getX = function getX() {\n  this.normalize();\n  return this.x.fromRed();\n};\n\nPoint.prototype.getY = function getY() {\n  this.normalize();\n  return this.y.fromRed();\n};\n\nPoint.prototype.eq = function eq(other) {\n  return this === other ||\n         this.getX().cmp(other.getX()) === 0 &&\n         this.getY().cmp(other.getY()) === 0;\n};\n\nPoint.prototype.eqXToP = function eqXToP(x) {\n  var rx = x.toRed(this.curve.red).redMul(this.z);\n  if (this.x.cmp(rx) === 0)\n    return true;\n\n  var xc = x.clone();\n  var t = this.curve.redN.redMul(this.z);\n  for (;;) {\n    xc.iadd(this.curve.n);\n    if (xc.cmp(this.curve.p) >= 0)\n      return false;\n\n    rx.redIAdd(t);\n    if (this.x.cmp(rx) === 0)\n      return true;\n  }\n};\n\n// Compatibility with BaseCurve\nPoint.prototype.toP = Point.prototype.normalize;\nPoint.prototype.mixedAdd = Point.prototype.add;\n","'use strict';\n\nvar curve = exports;\n\ncurve.base = require('./base');\ncurve.short = require('./short');\ncurve.mont = require('./mont');\ncurve.edwards = require('./edwards');\n","'use strict';\n\nvar BN = require('bn.js');\nvar inherits = require('inherits');\nvar Base = require('./base');\n\nvar utils = require('../utils');\n\nfunction MontCurve(conf) {\n  Base.call(this, 'mont', conf);\n\n  this.a = new BN(conf.a, 16).toRed(this.red);\n  this.b = new BN(conf.b, 16).toRed(this.red);\n  this.i4 = new BN(4).toRed(this.red).redInvm();\n  this.two = new BN(2).toRed(this.red);\n  this.a24 = this.i4.redMul(this.a.redAdd(this.two));\n}\ninherits(MontCurve, Base);\nmodule.exports = MontCurve;\n\nMontCurve.prototype.validate = function validate(point) {\n  var x = point.normalize().x;\n  var x2 = x.redSqr();\n  var rhs = x2.redMul(x).redAdd(x2.redMul(this.a)).redAdd(x);\n  var y = rhs.redSqrt();\n\n  return y.redSqr().cmp(rhs) === 0;\n};\n\nfunction Point(curve, x, z) {\n  Base.BasePoint.call(this, curve, 'projective');\n  if (x === null && z === null) {\n    this.x = this.curve.one;\n    this.z = this.curve.zero;\n  } else {\n    this.x = new BN(x, 16);\n    this.z = new BN(z, 16);\n    if (!this.x.red)\n      this.x = this.x.toRed(this.curve.red);\n    if (!this.z.red)\n      this.z = this.z.toRed(this.curve.red);\n  }\n}\ninherits(Point, Base.BasePoint);\n\nMontCurve.prototype.decodePoint = function decodePoint(bytes, enc) {\n  return this.point(utils.toArray(bytes, enc), 1);\n};\n\nMontCurve.prototype.point = function point(x, z) {\n  return new Point(this, x, z);\n};\n\nMontCurve.prototype.pointFromJSON = function pointFromJSON(obj) {\n  return Point.fromJSON(this, obj);\n};\n\nPoint.prototype.precompute = function precompute() {\n  // No-op\n};\n\nPoint.prototype._encode = function _encode() {\n  return this.getX().toArray('be', this.curve.p.byteLength());\n};\n\nPoint.fromJSON = function fromJSON(curve, obj) {\n  return new Point(curve, obj[0], obj[1] || curve.one);\n};\n\nPoint.prototype.inspect = function inspect() {\n  if (this.isInfinity())\n    return '<EC Point Infinity>';\n  return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +\n      ' z: ' + this.z.fromRed().toString(16, 2) + '>';\n};\n\nPoint.prototype.isInfinity = function isInfinity() {\n  // XXX This code assumes that zero is always zero in red\n  return this.z.cmpn(0) === 0;\n};\n\nPoint.prototype.dbl = function dbl() {\n  // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#doubling-dbl-1987-m-3\n  // 2M + 2S + 4A\n\n  // A = X1 + Z1\n  var a = this.x.redAdd(this.z);\n  // AA = A^2\n  var aa = a.redSqr();\n  // B = X1 - Z1\n  var b = this.x.redSub(this.z);\n  // BB = B^2\n  var bb = b.redSqr();\n  // C = AA - BB\n  var c = aa.redSub(bb);\n  // X3 = AA * BB\n  var nx = aa.redMul(bb);\n  // Z3 = C * (BB + A24 * C)\n  var nz = c.redMul(bb.redAdd(this.curve.a24.redMul(c)));\n  return this.curve.point(nx, nz);\n};\n\nPoint.prototype.add = function add() {\n  throw new Error('Not supported on Montgomery curve');\n};\n\nPoint.prototype.diffAdd = function diffAdd(p, diff) {\n  // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#diffadd-dadd-1987-m-3\n  // 4M + 2S + 6A\n\n  // A = X2 + Z2\n  var a = this.x.redAdd(this.z);\n  // B = X2 - Z2\n  var b = this.x.redSub(this.z);\n  // C = X3 + Z3\n  var c = p.x.redAdd(p.z);\n  // D = X3 - Z3\n  var d = p.x.redSub(p.z);\n  // DA = D * A\n  var da = d.redMul(a);\n  // CB = C * B\n  var cb = c.redMul(b);\n  // X5 = Z1 * (DA + CB)^2\n  var nx = diff.z.redMul(da.redAdd(cb).redSqr());\n  // Z5 = X1 * (DA - CB)^2\n  var nz = diff.x.redMul(da.redISub(cb).redSqr());\n  return this.curve.point(nx, nz);\n};\n\nPoint.prototype.mul = function mul(k) {\n  var t = k.clone();\n  var a = this; // (N / 2) * Q + Q\n  var b = this.curve.point(null, null); // (N / 2) * Q\n  var c = this; // Q\n\n  for (var bits = []; t.cmpn(0) !== 0; t.iushrn(1))\n    bits.push(t.andln(1));\n\n  for (var i = bits.length - 1; i >= 0; i--) {\n    if (bits[i] === 0) {\n      // N * Q + Q = ((N / 2) * Q + Q)) + (N / 2) * Q\n      a = a.diffAdd(b, c);\n      // N * Q = 2 * ((N / 2) * Q + Q))\n      b = b.dbl();\n    } else {\n      // N * Q = ((N / 2) * Q + Q) + ((N / 2) * Q)\n      b = a.diffAdd(b, c);\n      // N * Q + Q = 2 * ((N / 2) * Q + Q)\n      a = a.dbl();\n    }\n  }\n  return b;\n};\n\nPoint.prototype.mulAdd = function mulAdd() {\n  throw new Error('Not supported on Montgomery curve');\n};\n\nPoint.prototype.jumlAdd = function jumlAdd() {\n  throw new Error('Not supported on Montgomery curve');\n};\n\nPoint.prototype.eq = function eq(other) {\n  return this.getX().cmp(other.getX()) === 0;\n};\n\nPoint.prototype.normalize = function normalize() {\n  this.x = this.x.redMul(this.z.redInvm());\n  this.z = this.curve.one;\n  return this;\n};\n\nPoint.prototype.getX = function getX() {\n  // Normalize coordinates\n  this.normalize();\n\n  return this.x.fromRed();\n};\n","'use strict';\n\nvar utils = require('../utils');\nvar BN = require('bn.js');\nvar inherits = require('inherits');\nvar Base = require('./base');\n\nvar assert = utils.assert;\n\nfunction ShortCurve(conf) {\n  Base.call(this, 'short', conf);\n\n  this.a = new BN(conf.a, 16).toRed(this.red);\n  this.b = new BN(conf.b, 16).toRed(this.red);\n  this.tinv = this.two.redInvm();\n\n  this.zeroA = this.a.fromRed().cmpn(0) === 0;\n  this.threeA = this.a.fromRed().sub(this.p).cmpn(-3) === 0;\n\n  // If the curve is endomorphic, precalculate beta and lambda\n  this.endo = this._getEndomorphism(conf);\n  this._endoWnafT1 = new Array(4);\n  this._endoWnafT2 = new Array(4);\n}\ninherits(ShortCurve, Base);\nmodule.exports = ShortCurve;\n\nShortCurve.prototype._getEndomorphism = function _getEndomorphism(conf) {\n  // No efficient endomorphism\n  if (!this.zeroA || !this.g || !this.n || this.p.modn(3) !== 1)\n    return;\n\n  // Compute beta and lambda, that lambda * P = (beta * Px; Py)\n  var beta;\n  var lambda;\n  if (conf.beta) {\n    beta = new BN(conf.beta, 16).toRed(this.red);\n  } else {\n    var betas = this._getEndoRoots(this.p);\n    // Choose the smallest beta\n    beta = betas[0].cmp(betas[1]) < 0 ? betas[0] : betas[1];\n    beta = beta.toRed(this.red);\n  }\n  if (conf.lambda) {\n    lambda = new BN(conf.lambda, 16);\n  } else {\n    // Choose the lambda that is matching selected beta\n    var lambdas = this._getEndoRoots(this.n);\n    if (this.g.mul(lambdas[0]).x.cmp(this.g.x.redMul(beta)) === 0) {\n      lambda = lambdas[0];\n    } else {\n      lambda = lambdas[1];\n      assert(this.g.mul(lambda).x.cmp(this.g.x.redMul(beta)) === 0);\n    }\n  }\n\n  // Get basis vectors, used for balanced length-two representation\n  var basis;\n  if (conf.basis) {\n    basis = conf.basis.map(function(vec) {\n      return {\n        a: new BN(vec.a, 16),\n        b: new BN(vec.b, 16),\n      };\n    });\n  } else {\n    basis = this._getEndoBasis(lambda);\n  }\n\n  return {\n    beta: beta,\n    lambda: lambda,\n    basis: basis,\n  };\n};\n\nShortCurve.prototype._getEndoRoots = function _getEndoRoots(num) {\n  // Find roots of for x^2 + x + 1 in F\n  // Root = (-1 +- Sqrt(-3)) / 2\n  //\n  var red = num === this.p ? this.red : BN.mont(num);\n  var tinv = new BN(2).toRed(red).redInvm();\n  var ntinv = tinv.redNeg();\n\n  var s = new BN(3).toRed(red).redNeg().redSqrt().redMul(tinv);\n\n  var l1 = ntinv.redAdd(s).fromRed();\n  var l2 = ntinv.redSub(s).fromRed();\n  return [ l1, l2 ];\n};\n\nShortCurve.prototype._getEndoBasis = function _getEndoBasis(lambda) {\n  // aprxSqrt >= sqrt(this.n)\n  var aprxSqrt = this.n.ushrn(Math.floor(this.n.bitLength() / 2));\n\n  // 3.74\n  // Run EGCD, until r(L + 1) < aprxSqrt\n  var u = lambda;\n  var v = this.n.clone();\n  var x1 = new BN(1);\n  var y1 = new BN(0);\n  var x2 = new BN(0);\n  var y2 = new BN(1);\n\n  // NOTE: all vectors are roots of: a + b * lambda = 0 (mod n)\n  var a0;\n  var b0;\n  // First vector\n  var a1;\n  var b1;\n  // Second vector\n  var a2;\n  var b2;\n\n  var prevR;\n  var i = 0;\n  var r;\n  var x;\n  while (u.cmpn(0) !== 0) {\n    var q = v.div(u);\n    r = v.sub(q.mul(u));\n    x = x2.sub(q.mul(x1));\n    var y = y2.sub(q.mul(y1));\n\n    if (!a1 && r.cmp(aprxSqrt) < 0) {\n      a0 = prevR.neg();\n      b0 = x1;\n      a1 = r.neg();\n      b1 = x;\n    } else if (a1 && ++i === 2) {\n      break;\n    }\n    prevR = r;\n\n    v = u;\n    u = r;\n    x2 = x1;\n    x1 = x;\n    y2 = y1;\n    y1 = y;\n  }\n  a2 = r.neg();\n  b2 = x;\n\n  var len1 = a1.sqr().add(b1.sqr());\n  var len2 = a2.sqr().add(b2.sqr());\n  if (len2.cmp(len1) >= 0) {\n    a2 = a0;\n    b2 = b0;\n  }\n\n  // Normalize signs\n  if (a1.negative) {\n    a1 = a1.neg();\n    b1 = b1.neg();\n  }\n  if (a2.negative) {\n    a2 = a2.neg();\n    b2 = b2.neg();\n  }\n\n  return [\n    { a: a1, b: b1 },\n    { a: a2, b: b2 },\n  ];\n};\n\nShortCurve.prototype._endoSplit = function _endoSplit(k) {\n  var basis = this.endo.basis;\n  var v1 = basis[0];\n  var v2 = basis[1];\n\n  var c1 = v2.b.mul(k).divRound(this.n);\n  var c2 = v1.b.neg().mul(k).divRound(this.n);\n\n  var p1 = c1.mul(v1.a);\n  var p2 = c2.mul(v2.a);\n  var q1 = c1.mul(v1.b);\n  var q2 = c2.mul(v2.b);\n\n  // Calculate answer\n  var k1 = k.sub(p1).sub(p2);\n  var k2 = q1.add(q2).neg();\n  return { k1: k1, k2: k2 };\n};\n\nShortCurve.prototype.pointFromX = function pointFromX(x, odd) {\n  x = new BN(x, 16);\n  if (!x.red)\n    x = x.toRed(this.red);\n\n  var y2 = x.redSqr().redMul(x).redIAdd(x.redMul(this.a)).redIAdd(this.b);\n  var y = y2.redSqrt();\n  if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)\n    throw new Error('invalid point');\n\n  // XXX Is there any way to tell if the number is odd without converting it\n  // to non-red form?\n  var isOdd = y.fromRed().isOdd();\n  if (odd && !isOdd || !odd && isOdd)\n    y = y.redNeg();\n\n  return this.point(x, y);\n};\n\nShortCurve.prototype.validate = function validate(point) {\n  if (point.inf)\n    return true;\n\n  var x = point.x;\n  var y = point.y;\n\n  var ax = this.a.redMul(x);\n  var rhs = x.redSqr().redMul(x).redIAdd(ax).redIAdd(this.b);\n  return y.redSqr().redISub(rhs).cmpn(0) === 0;\n};\n\nShortCurve.prototype._endoWnafMulAdd =\n    function _endoWnafMulAdd(points, coeffs, jacobianResult) {\n      var npoints = this._endoWnafT1;\n      var ncoeffs = this._endoWnafT2;\n      for (var i = 0; i < points.length; i++) {\n        var split = this._endoSplit(coeffs[i]);\n        var p = points[i];\n        var beta = p._getBeta();\n\n        if (split.k1.negative) {\n          split.k1.ineg();\n          p = p.neg(true);\n        }\n        if (split.k2.negative) {\n          split.k2.ineg();\n          beta = beta.neg(true);\n        }\n\n        npoints[i * 2] = p;\n        npoints[i * 2 + 1] = beta;\n        ncoeffs[i * 2] = split.k1;\n        ncoeffs[i * 2 + 1] = split.k2;\n      }\n      var res = this._wnafMulAdd(1, npoints, ncoeffs, i * 2, jacobianResult);\n\n      // Clean-up references to points and coefficients\n      for (var j = 0; j < i * 2; j++) {\n        npoints[j] = null;\n        ncoeffs[j] = null;\n      }\n      return res;\n    };\n\nfunction Point(curve, x, y, isRed) {\n  Base.BasePoint.call(this, curve, 'affine');\n  if (x === null && y === null) {\n    this.x = null;\n    this.y = null;\n    this.inf = true;\n  } else {\n    this.x = new BN(x, 16);\n    this.y = new BN(y, 16);\n    // Force redgomery representation when loading from JSON\n    if (isRed) {\n      this.x.forceRed(this.curve.red);\n      this.y.forceRed(this.curve.red);\n    }\n    if (!this.x.red)\n      this.x = this.x.toRed(this.curve.red);\n    if (!this.y.red)\n      this.y = this.y.toRed(this.curve.red);\n    this.inf = false;\n  }\n}\ninherits(Point, Base.BasePoint);\n\nShortCurve.prototype.point = function point(x, y, isRed) {\n  return new Point(this, x, y, isRed);\n};\n\nShortCurve.prototype.pointFromJSON = function pointFromJSON(obj, red) {\n  return Point.fromJSON(this, obj, red);\n};\n\nPoint.prototype._getBeta = function _getBeta() {\n  if (!this.curve.endo)\n    return;\n\n  var pre = this.precomputed;\n  if (pre && pre.beta)\n    return pre.beta;\n\n  var beta = this.curve.point(this.x.redMul(this.curve.endo.beta), this.y);\n  if (pre) {\n    var curve = this.curve;\n    var endoMul = function(p) {\n      return curve.point(p.x.redMul(curve.endo.beta), p.y);\n    };\n    pre.beta = beta;\n    beta.precomputed = {\n      beta: null,\n      naf: pre.naf && {\n        wnd: pre.naf.wnd,\n        points: pre.naf.points.map(endoMul),\n      },\n      doubles: pre.doubles && {\n        step: pre.doubles.step,\n        points: pre.doubles.points.map(endoMul),\n      },\n    };\n  }\n  return beta;\n};\n\nPoint.prototype.toJSON = function toJSON() {\n  if (!this.precomputed)\n    return [ this.x, this.y ];\n\n  return [ this.x, this.y, this.precomputed && {\n    doubles: this.precomputed.doubles && {\n      step: this.precomputed.doubles.step,\n      points: this.precomputed.doubles.points.slice(1),\n    },\n    naf: this.precomputed.naf && {\n      wnd: this.precomputed.naf.wnd,\n      points: this.precomputed.naf.points.slice(1),\n    },\n  } ];\n};\n\nPoint.fromJSON = function fromJSON(curve, obj, red) {\n  if (typeof obj === 'string')\n    obj = JSON.parse(obj);\n  var res = curve.point(obj[0], obj[1], red);\n  if (!obj[2])\n    return res;\n\n  function obj2point(obj) {\n    return curve.point(obj[0], obj[1], red);\n  }\n\n  var pre = obj[2];\n  res.precomputed = {\n    beta: null,\n    doubles: pre.doubles && {\n      step: pre.doubles.step,\n      points: [ res ].concat(pre.doubles.points.map(obj2point)),\n    },\n    naf: pre.naf && {\n      wnd: pre.naf.wnd,\n      points: [ res ].concat(pre.naf.points.map(obj2point)),\n    },\n  };\n  return res;\n};\n\nPoint.prototype.inspect = function inspect() {\n  if (this.isInfinity())\n    return '<EC Point Infinity>';\n  return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +\n      ' y: ' + this.y.fromRed().toString(16, 2) + '>';\n};\n\nPoint.prototype.isInfinity = function isInfinity() {\n  return this.inf;\n};\n\nPoint.prototype.add = function add(p) {\n  // O + P = P\n  if (this.inf)\n    return p;\n\n  // P + O = P\n  if (p.inf)\n    return this;\n\n  // P + P = 2P\n  if (this.eq(p))\n    return this.dbl();\n\n  // P + (-P) = O\n  if (this.neg().eq(p))\n    return this.curve.point(null, null);\n\n  // P + Q = O\n  if (this.x.cmp(p.x) === 0)\n    return this.curve.point(null, null);\n\n  var c = this.y.redSub(p.y);\n  if (c.cmpn(0) !== 0)\n    c = c.redMul(this.x.redSub(p.x).redInvm());\n  var nx = c.redSqr().redISub(this.x).redISub(p.x);\n  var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);\n  return this.curve.point(nx, ny);\n};\n\nPoint.prototype.dbl = function dbl() {\n  if (this.inf)\n    return this;\n\n  // 2P = O\n  var ys1 = this.y.redAdd(this.y);\n  if (ys1.cmpn(0) === 0)\n    return this.curve.point(null, null);\n\n  var a = this.curve.a;\n\n  var x2 = this.x.redSqr();\n  var dyinv = ys1.redInvm();\n  var c = x2.redAdd(x2).redIAdd(x2).redIAdd(a).redMul(dyinv);\n\n  var nx = c.redSqr().redISub(this.x.redAdd(this.x));\n  var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);\n  return this.curve.point(nx, ny);\n};\n\nPoint.prototype.getX = function getX() {\n  return this.x.fromRed();\n};\n\nPoint.prototype.getY = function getY() {\n  return this.y.fromRed();\n};\n\nPoint.prototype.mul = function mul(k) {\n  k = new BN(k, 16);\n  if (this.isInfinity())\n    return this;\n  else if (this._hasDoubles(k))\n    return this.curve._fixedNafMul(this, k);\n  else if (this.curve.endo)\n    return this.curve._endoWnafMulAdd([ this ], [ k ]);\n  else\n    return this.curve._wnafMul(this, k);\n};\n\nPoint.prototype.mulAdd = function mulAdd(k1, p2, k2) {\n  var points = [ this, p2 ];\n  var coeffs = [ k1, k2 ];\n  if (this.curve.endo)\n    return this.curve._endoWnafMulAdd(points, coeffs);\n  else\n    return this.curve._wnafMulAdd(1, points, coeffs, 2);\n};\n\nPoint.prototype.jmulAdd = function jmulAdd(k1, p2, k2) {\n  var points = [ this, p2 ];\n  var coeffs = [ k1, k2 ];\n  if (this.curve.endo)\n    return this.curve._endoWnafMulAdd(points, coeffs, true);\n  else\n    return this.curve._wnafMulAdd(1, points, coeffs, 2, true);\n};\n\nPoint.prototype.eq = function eq(p) {\n  return this === p ||\n         this.inf === p.inf &&\n             (this.inf || this.x.cmp(p.x) === 0 && this.y.cmp(p.y) === 0);\n};\n\nPoint.prototype.neg = function neg(_precompute) {\n  if (this.inf)\n    return this;\n\n  var res = this.curve.point(this.x, this.y.redNeg());\n  if (_precompute && this.precomputed) {\n    var pre = this.precomputed;\n    var negate = function(p) {\n      return p.neg();\n    };\n    res.precomputed = {\n      naf: pre.naf && {\n        wnd: pre.naf.wnd,\n        points: pre.naf.points.map(negate),\n      },\n      doubles: pre.doubles && {\n        step: pre.doubles.step,\n        points: pre.doubles.points.map(negate),\n      },\n    };\n  }\n  return res;\n};\n\nPoint.prototype.toJ = function toJ() {\n  if (this.inf)\n    return this.curve.jpoint(null, null, null);\n\n  var res = this.curve.jpoint(this.x, this.y, this.curve.one);\n  return res;\n};\n\nfunction JPoint(curve, x, y, z) {\n  Base.BasePoint.call(this, curve, 'jacobian');\n  if (x === null && y === null && z === null) {\n    this.x = this.curve.one;\n    this.y = this.curve.one;\n    this.z = new BN(0);\n  } else {\n    this.x = new BN(x, 16);\n    this.y = new BN(y, 16);\n    this.z = new BN(z, 16);\n  }\n  if (!this.x.red)\n    this.x = this.x.toRed(this.curve.red);\n  if (!this.y.red)\n    this.y = this.y.toRed(this.curve.red);\n  if (!this.z.red)\n    this.z = this.z.toRed(this.curve.red);\n\n  this.zOne = this.z === this.curve.one;\n}\ninherits(JPoint, Base.BasePoint);\n\nShortCurve.prototype.jpoint = function jpoint(x, y, z) {\n  return new JPoint(this, x, y, z);\n};\n\nJPoint.prototype.toP = function toP() {\n  if (this.isInfinity())\n    return this.curve.point(null, null);\n\n  var zinv = this.z.redInvm();\n  var zinv2 = zinv.redSqr();\n  var ax = this.x.redMul(zinv2);\n  var ay = this.y.redMul(zinv2).redMul(zinv);\n\n  return this.curve.point(ax, ay);\n};\n\nJPoint.prototype.neg = function neg() {\n  return this.curve.jpoint(this.x, this.y.redNeg(), this.z);\n};\n\nJPoint.prototype.add = function add(p) {\n  // O + P = P\n  if (this.isInfinity())\n    return p;\n\n  // P + O = P\n  if (p.isInfinity())\n    return this;\n\n  // 12M + 4S + 7A\n  var pz2 = p.z.redSqr();\n  var z2 = this.z.redSqr();\n  var u1 = this.x.redMul(pz2);\n  var u2 = p.x.redMul(z2);\n  var s1 = this.y.redMul(pz2.redMul(p.z));\n  var s2 = p.y.redMul(z2.redMul(this.z));\n\n  var h = u1.redSub(u2);\n  var r = s1.redSub(s2);\n  if (h.cmpn(0) === 0) {\n    if (r.cmpn(0) !== 0)\n      return this.curve.jpoint(null, null, null);\n    else\n      return this.dbl();\n  }\n\n  var h2 = h.redSqr();\n  var h3 = h2.redMul(h);\n  var v = u1.redMul(h2);\n\n  var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);\n  var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));\n  var nz = this.z.redMul(p.z).redMul(h);\n\n  return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.mixedAdd = function mixedAdd(p) {\n  // O + P = P\n  if (this.isInfinity())\n    return p.toJ();\n\n  // P + O = P\n  if (p.isInfinity())\n    return this;\n\n  // 8M + 3S + 7A\n  var z2 = this.z.redSqr();\n  var u1 = this.x;\n  var u2 = p.x.redMul(z2);\n  var s1 = this.y;\n  var s2 = p.y.redMul(z2).redMul(this.z);\n\n  var h = u1.redSub(u2);\n  var r = s1.redSub(s2);\n  if (h.cmpn(0) === 0) {\n    if (r.cmpn(0) !== 0)\n      return this.curve.jpoint(null, null, null);\n    else\n      return this.dbl();\n  }\n\n  var h2 = h.redSqr();\n  var h3 = h2.redMul(h);\n  var v = u1.redMul(h2);\n\n  var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);\n  var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));\n  var nz = this.z.redMul(h);\n\n  return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.dblp = function dblp(pow) {\n  if (pow === 0)\n    return this;\n  if (this.isInfinity())\n    return this;\n  if (!pow)\n    return this.dbl();\n\n  var i;\n  if (this.curve.zeroA || this.curve.threeA) {\n    var r = this;\n    for (i = 0; i < pow; i++)\n      r = r.dbl();\n    return r;\n  }\n\n  // 1M + 2S + 1A + N * (4S + 5M + 8A)\n  // N = 1 => 6M + 6S + 9A\n  var a = this.curve.a;\n  var tinv = this.curve.tinv;\n\n  var jx = this.x;\n  var jy = this.y;\n  var jz = this.z;\n  var jz4 = jz.redSqr().redSqr();\n\n  // Reuse results\n  var jyd = jy.redAdd(jy);\n  for (i = 0; i < pow; i++) {\n    var jx2 = jx.redSqr();\n    var jyd2 = jyd.redSqr();\n    var jyd4 = jyd2.redSqr();\n    var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));\n\n    var t1 = jx.redMul(jyd2);\n    var nx = c.redSqr().redISub(t1.redAdd(t1));\n    var t2 = t1.redISub(nx);\n    var dny = c.redMul(t2);\n    dny = dny.redIAdd(dny).redISub(jyd4);\n    var nz = jyd.redMul(jz);\n    if (i + 1 < pow)\n      jz4 = jz4.redMul(jyd4);\n\n    jx = nx;\n    jz = nz;\n    jyd = dny;\n  }\n\n  return this.curve.jpoint(jx, jyd.redMul(tinv), jz);\n};\n\nJPoint.prototype.dbl = function dbl() {\n  if (this.isInfinity())\n    return this;\n\n  if (this.curve.zeroA)\n    return this._zeroDbl();\n  else if (this.curve.threeA)\n    return this._threeDbl();\n  else\n    return this._dbl();\n};\n\nJPoint.prototype._zeroDbl = function _zeroDbl() {\n  var nx;\n  var ny;\n  var nz;\n  // Z = 1\n  if (this.zOne) {\n    // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html\n    //     #doubling-mdbl-2007-bl\n    // 1M + 5S + 14A\n\n    // XX = X1^2\n    var xx = this.x.redSqr();\n    // YY = Y1^2\n    var yy = this.y.redSqr();\n    // YYYY = YY^2\n    var yyyy = yy.redSqr();\n    // S = 2 * ((X1 + YY)^2 - XX - YYYY)\n    var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);\n    s = s.redIAdd(s);\n    // M = 3 * XX + a; a = 0\n    var m = xx.redAdd(xx).redIAdd(xx);\n    // T = M ^ 2 - 2*S\n    var t = m.redSqr().redISub(s).redISub(s);\n\n    // 8 * YYYY\n    var yyyy8 = yyyy.redIAdd(yyyy);\n    yyyy8 = yyyy8.redIAdd(yyyy8);\n    yyyy8 = yyyy8.redIAdd(yyyy8);\n\n    // X3 = T\n    nx = t;\n    // Y3 = M * (S - T) - 8 * YYYY\n    ny = m.redMul(s.redISub(t)).redISub(yyyy8);\n    // Z3 = 2*Y1\n    nz = this.y.redAdd(this.y);\n  } else {\n    // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html\n    //     #doubling-dbl-2009-l\n    // 2M + 5S + 13A\n\n    // A = X1^2\n    var a = this.x.redSqr();\n    // B = Y1^2\n    var b = this.y.redSqr();\n    // C = B^2\n    var c = b.redSqr();\n    // D = 2 * ((X1 + B)^2 - A - C)\n    var d = this.x.redAdd(b).redSqr().redISub(a).redISub(c);\n    d = d.redIAdd(d);\n    // E = 3 * A\n    var e = a.redAdd(a).redIAdd(a);\n    // F = E^2\n    var f = e.redSqr();\n\n    // 8 * C\n    var c8 = c.redIAdd(c);\n    c8 = c8.redIAdd(c8);\n    c8 = c8.redIAdd(c8);\n\n    // X3 = F - 2 * D\n    nx = f.redISub(d).redISub(d);\n    // Y3 = E * (D - X3) - 8 * C\n    ny = e.redMul(d.redISub(nx)).redISub(c8);\n    // Z3 = 2 * Y1 * Z1\n    nz = this.y.redMul(this.z);\n    nz = nz.redIAdd(nz);\n  }\n\n  return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype._threeDbl = function _threeDbl() {\n  var nx;\n  var ny;\n  var nz;\n  // Z = 1\n  if (this.zOne) {\n    // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html\n    //     #doubling-mdbl-2007-bl\n    // 1M + 5S + 15A\n\n    // XX = X1^2\n    var xx = this.x.redSqr();\n    // YY = Y1^2\n    var yy = this.y.redSqr();\n    // YYYY = YY^2\n    var yyyy = yy.redSqr();\n    // S = 2 * ((X1 + YY)^2 - XX - YYYY)\n    var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);\n    s = s.redIAdd(s);\n    // M = 3 * XX + a\n    var m = xx.redAdd(xx).redIAdd(xx).redIAdd(this.curve.a);\n    // T = M^2 - 2 * S\n    var t = m.redSqr().redISub(s).redISub(s);\n    // X3 = T\n    nx = t;\n    // Y3 = M * (S - T) - 8 * YYYY\n    var yyyy8 = yyyy.redIAdd(yyyy);\n    yyyy8 = yyyy8.redIAdd(yyyy8);\n    yyyy8 = yyyy8.redIAdd(yyyy8);\n    ny = m.redMul(s.redISub(t)).redISub(yyyy8);\n    // Z3 = 2 * Y1\n    nz = this.y.redAdd(this.y);\n  } else {\n    // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html#doubling-dbl-2001-b\n    // 3M + 5S\n\n    // delta = Z1^2\n    var delta = this.z.redSqr();\n    // gamma = Y1^2\n    var gamma = this.y.redSqr();\n    // beta = X1 * gamma\n    var beta = this.x.redMul(gamma);\n    // alpha = 3 * (X1 - delta) * (X1 + delta)\n    var alpha = this.x.redSub(delta).redMul(this.x.redAdd(delta));\n    alpha = alpha.redAdd(alpha).redIAdd(alpha);\n    // X3 = alpha^2 - 8 * beta\n    var beta4 = beta.redIAdd(beta);\n    beta4 = beta4.redIAdd(beta4);\n    var beta8 = beta4.redAdd(beta4);\n    nx = alpha.redSqr().redISub(beta8);\n    // Z3 = (Y1 + Z1)^2 - gamma - delta\n    nz = this.y.redAdd(this.z).redSqr().redISub(gamma).redISub(delta);\n    // Y3 = alpha * (4 * beta - X3) - 8 * gamma^2\n    var ggamma8 = gamma.redSqr();\n    ggamma8 = ggamma8.redIAdd(ggamma8);\n    ggamma8 = ggamma8.redIAdd(ggamma8);\n    ggamma8 = ggamma8.redIAdd(ggamma8);\n    ny = alpha.redMul(beta4.redISub(nx)).redISub(ggamma8);\n  }\n\n  return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype._dbl = function _dbl() {\n  var a = this.curve.a;\n\n  // 4M + 6S + 10A\n  var jx = this.x;\n  var jy = this.y;\n  var jz = this.z;\n  var jz4 = jz.redSqr().redSqr();\n\n  var jx2 = jx.redSqr();\n  var jy2 = jy.redSqr();\n\n  var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));\n\n  var jxd4 = jx.redAdd(jx);\n  jxd4 = jxd4.redIAdd(jxd4);\n  var t1 = jxd4.redMul(jy2);\n  var nx = c.redSqr().redISub(t1.redAdd(t1));\n  var t2 = t1.redISub(nx);\n\n  var jyd8 = jy2.redSqr();\n  jyd8 = jyd8.redIAdd(jyd8);\n  jyd8 = jyd8.redIAdd(jyd8);\n  jyd8 = jyd8.redIAdd(jyd8);\n  var ny = c.redMul(t2).redISub(jyd8);\n  var nz = jy.redAdd(jy).redMul(jz);\n\n  return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.trpl = function trpl() {\n  if (!this.curve.zeroA)\n    return this.dbl().add(this);\n\n  // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#tripling-tpl-2007-bl\n  // 5M + 10S + ...\n\n  // XX = X1^2\n  var xx = this.x.redSqr();\n  // YY = Y1^2\n  var yy = this.y.redSqr();\n  // ZZ = Z1^2\n  var zz = this.z.redSqr();\n  // YYYY = YY^2\n  var yyyy = yy.redSqr();\n  // M = 3 * XX + a * ZZ2; a = 0\n  var m = xx.redAdd(xx).redIAdd(xx);\n  // MM = M^2\n  var mm = m.redSqr();\n  // E = 6 * ((X1 + YY)^2 - XX - YYYY) - MM\n  var e = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);\n  e = e.redIAdd(e);\n  e = e.redAdd(e).redIAdd(e);\n  e = e.redISub(mm);\n  // EE = E^2\n  var ee = e.redSqr();\n  // T = 16*YYYY\n  var t = yyyy.redIAdd(yyyy);\n  t = t.redIAdd(t);\n  t = t.redIAdd(t);\n  t = t.redIAdd(t);\n  // U = (M + E)^2 - MM - EE - T\n  var u = m.redIAdd(e).redSqr().redISub(mm).redISub(ee).redISub(t);\n  // X3 = 4 * (X1 * EE - 4 * YY * U)\n  var yyu4 = yy.redMul(u);\n  yyu4 = yyu4.redIAdd(yyu4);\n  yyu4 = yyu4.redIAdd(yyu4);\n  var nx = this.x.redMul(ee).redISub(yyu4);\n  nx = nx.redIAdd(nx);\n  nx = nx.redIAdd(nx);\n  // Y3 = 8 * Y1 * (U * (T - U) - E * EE)\n  var ny = this.y.redMul(u.redMul(t.redISub(u)).redISub(e.redMul(ee)));\n  ny = ny.redIAdd(ny);\n  ny = ny.redIAdd(ny);\n  ny = ny.redIAdd(ny);\n  // Z3 = (Z1 + E)^2 - ZZ - EE\n  var nz = this.z.redAdd(e).redSqr().redISub(zz).redISub(ee);\n\n  return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.mul = function mul(k, kbase) {\n  k = new BN(k, kbase);\n\n  return this.curve._wnafMul(this, k);\n};\n\nJPoint.prototype.eq = function eq(p) {\n  if (p.type === 'affine')\n    return this.eq(p.toJ());\n\n  if (this === p)\n    return true;\n\n  // x1 * z2^2 == x2 * z1^2\n  var z2 = this.z.redSqr();\n  var pz2 = p.z.redSqr();\n  if (this.x.redMul(pz2).redISub(p.x.redMul(z2)).cmpn(0) !== 0)\n    return false;\n\n  // y1 * z2^3 == y2 * z1^3\n  var z3 = z2.redMul(this.z);\n  var pz3 = pz2.redMul(p.z);\n  return this.y.redMul(pz3).redISub(p.y.redMul(z3)).cmpn(0) === 0;\n};\n\nJPoint.prototype.eqXToP = function eqXToP(x) {\n  var zs = this.z.redSqr();\n  var rx = x.toRed(this.curve.red).redMul(zs);\n  if (this.x.cmp(rx) === 0)\n    return true;\n\n  var xc = x.clone();\n  var t = this.curve.redN.redMul(zs);\n  for (;;) {\n    xc.iadd(this.curve.n);\n    if (xc.cmp(this.curve.p) >= 0)\n      return false;\n\n    rx.redIAdd(t);\n    if (this.x.cmp(rx) === 0)\n      return true;\n  }\n};\n\nJPoint.prototype.inspect = function inspect() {\n  if (this.isInfinity())\n    return '<EC JPoint Infinity>';\n  return '<EC JPoint x: ' + this.x.toString(16, 2) +\n      ' y: ' + this.y.toString(16, 2) +\n      ' z: ' + this.z.toString(16, 2) + '>';\n};\n\nJPoint.prototype.isInfinity = function isInfinity() {\n  // XXX This code assumes that zero is always zero in red\n  return this.z.cmpn(0) === 0;\n};\n","'use strict';\n\nvar curves = exports;\n\nvar hash = require('hash.js');\nvar curve = require('./curve');\nvar utils = require('./utils');\n\nvar assert = utils.assert;\n\nfunction PresetCurve(options) {\n  if (options.type === 'short')\n    this.curve = new curve.short(options);\n  else if (options.type === 'edwards')\n    this.curve = new curve.edwards(options);\n  else\n    this.curve = new curve.mont(options);\n  this.g = this.curve.g;\n  this.n = this.curve.n;\n  this.hash = options.hash;\n\n  assert(this.g.validate(), 'Invalid curve');\n  assert(this.g.mul(this.n).isInfinity(), 'Invalid curve, G*N != O');\n}\ncurves.PresetCurve = PresetCurve;\n\nfunction defineCurve(name, options) {\n  Object.defineProperty(curves, name, {\n    configurable: true,\n    enumerable: true,\n    get: function() {\n      var curve = new PresetCurve(options);\n      Object.defineProperty(curves, name, {\n        configurable: true,\n        enumerable: true,\n        value: curve,\n      });\n      return curve;\n    },\n  });\n}\n\ndefineCurve('p192', {\n  type: 'short',\n  prime: 'p192',\n  p: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff',\n  a: 'ffffffff ffffffff ffffffff fffffffe ffffffff fffffffc',\n  b: '64210519 e59c80e7 0fa7e9ab 72243049 feb8deec c146b9b1',\n  n: 'ffffffff ffffffff ffffffff 99def836 146bc9b1 b4d22831',\n  hash: hash.sha256,\n  gRed: false,\n  g: [\n    '188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012',\n    '07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811',\n  ],\n});\n\ndefineCurve('p224', {\n  type: 'short',\n  prime: 'p224',\n  p: 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001',\n  a: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff fffffffe',\n  b: 'b4050a85 0c04b3ab f5413256 5044b0b7 d7bfd8ba 270b3943 2355ffb4',\n  n: 'ffffffff ffffffff ffffffff ffff16a2 e0b8f03e 13dd2945 5c5c2a3d',\n  hash: hash.sha256,\n  gRed: false,\n  g: [\n    'b70e0cbd 6bb4bf7f 321390b9 4a03c1d3 56c21122 343280d6 115c1d21',\n    'bd376388 b5f723fb 4c22dfe6 cd4375a0 5a074764 44d58199 85007e34',\n  ],\n});\n\ndefineCurve('p256', {\n  type: 'short',\n  prime: null,\n  p: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff ffffffff',\n  a: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff fffffffc',\n  b: '5ac635d8 aa3a93e7 b3ebbd55 769886bc 651d06b0 cc53b0f6 3bce3c3e 27d2604b',\n  n: 'ffffffff 00000000 ffffffff ffffffff bce6faad a7179e84 f3b9cac2 fc632551',\n  hash: hash.sha256,\n  gRed: false,\n  g: [\n    '6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945 d898c296',\n    '4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5',\n  ],\n});\n\ndefineCurve('p384', {\n  type: 'short',\n  prime: null,\n  p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n     'fffffffe ffffffff 00000000 00000000 ffffffff',\n  a: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n     'fffffffe ffffffff 00000000 00000000 fffffffc',\n  b: 'b3312fa7 e23ee7e4 988e056b e3f82d19 181d9c6e fe814112 0314088f ' +\n     '5013875a c656398d 8a2ed19d 2a85c8ed d3ec2aef',\n  n: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff c7634d81 ' +\n     'f4372ddf 581a0db2 48b0a77a ecec196a ccc52973',\n  hash: hash.sha384,\n  gRed: false,\n  g: [\n    'aa87ca22 be8b0537 8eb1c71e f320ad74 6e1d3b62 8ba79b98 59f741e0 82542a38 ' +\n    '5502f25d bf55296c 3a545e38 72760ab7',\n    '3617de4a 96262c6f 5d9e98bf 9292dc29 f8f41dbd 289a147c e9da3113 b5f0b8c0 ' +\n    '0a60b1ce 1d7e819d 7a431d7c 90ea0e5f',\n  ],\n});\n\ndefineCurve('p521', {\n  type: 'short',\n  prime: null,\n  p: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n     'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n     'ffffffff ffffffff ffffffff ffffffff ffffffff',\n  a: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n     'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n     'ffffffff ffffffff ffffffff ffffffff fffffffc',\n  b: '00000051 953eb961 8e1c9a1f 929a21a0 b68540ee a2da725b ' +\n     '99b315f3 b8b48991 8ef109e1 56193951 ec7e937b 1652c0bd ' +\n     '3bb1bf07 3573df88 3d2c34f1 ef451fd4 6b503f00',\n  n: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n     'ffffffff ffffffff fffffffa 51868783 bf2f966b 7fcc0148 ' +\n     'f709a5d0 3bb5c9b8 899c47ae bb6fb71e 91386409',\n  hash: hash.sha512,\n  gRed: false,\n  g: [\n    '000000c6 858e06b7 0404e9cd 9e3ecb66 2395b442 9c648139 ' +\n    '053fb521 f828af60 6b4d3dba a14b5e77 efe75928 fe1dc127 ' +\n    'a2ffa8de 3348b3c1 856a429b f97e7e31 c2e5bd66',\n    '00000118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9 98f54449 ' +\n    '579b4468 17afbd17 273e662c 97ee7299 5ef42640 c550b901 ' +\n    '3fad0761 353c7086 a272c240 88be9476 9fd16650',\n  ],\n});\n\ndefineCurve('curve25519', {\n  type: 'mont',\n  prime: 'p25519',\n  p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',\n  a: '76d06',\n  b: '1',\n  n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',\n  hash: hash.sha256,\n  gRed: false,\n  g: [\n    '9',\n  ],\n});\n\ndefineCurve('ed25519', {\n  type: 'edwards',\n  prime: 'p25519',\n  p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',\n  a: '-1',\n  c: '1',\n  // -121665 * (121666^(-1)) (mod P)\n  d: '52036cee2b6ffe73 8cc740797779e898 00700a4d4141d8ab 75eb4dca135978a3',\n  n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',\n  hash: hash.sha256,\n  gRed: false,\n  g: [\n    '216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a',\n\n    // 4/5\n    '6666666666666666666666666666666666666666666666666666666666666658',\n  ],\n});\n\nvar pre;\ntry {\n  pre = require('./precomputed/secp256k1');\n} catch (e) {\n  pre = undefined;\n}\n\ndefineCurve('secp256k1', {\n  type: 'short',\n  prime: 'k256',\n  p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f',\n  a: '0',\n  b: '7',\n  n: 'ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141',\n  h: '1',\n  hash: hash.sha256,\n\n  // Precomputed endomorphism\n  beta: '7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee',\n  lambda: '5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72',\n  basis: [\n    {\n      a: '3086d221a7d46bcde86c90e49284eb15',\n      b: '-e4437ed6010e88286f547fa90abfe4c3',\n    },\n    {\n      a: '114ca50f7a8e2f3f657c1108d9d44cfd8',\n      b: '3086d221a7d46bcde86c90e49284eb15',\n    },\n  ],\n\n  gRed: false,\n  g: [\n    '79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798',\n    '483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8',\n    pre,\n  ],\n});\n","'use strict';\n\nvar BN = require('bn.js');\nvar HmacDRBG = require('hmac-drbg');\nvar utils = require('../utils');\nvar curves = require('../curves');\nvar rand = require('brorand');\nvar assert = utils.assert;\n\nvar KeyPair = require('./key');\nvar Signature = require('./signature');\n\nfunction EC(options) {\n  if (!(this instanceof EC))\n    return new EC(options);\n\n  // Shortcut `elliptic.ec(curve-name)`\n  if (typeof options === 'string') {\n    assert(Object.prototype.hasOwnProperty.call(curves, options),\n      'Unknown curve ' + options);\n\n    options = curves[options];\n  }\n\n  // Shortcut for `elliptic.ec(elliptic.curves.curveName)`\n  if (options instanceof curves.PresetCurve)\n    options = { curve: options };\n\n  this.curve = options.curve.curve;\n  this.n = this.curve.n;\n  this.nh = this.n.ushrn(1);\n  this.g = this.curve.g;\n\n  // Point on curve\n  this.g = options.curve.g;\n  this.g.precompute(options.curve.n.bitLength() + 1);\n\n  // Hash for function for DRBG\n  this.hash = options.hash || options.curve.hash;\n}\nmodule.exports = EC;\n\nEC.prototype.keyPair = function keyPair(options) {\n  return new KeyPair(this, options);\n};\n\nEC.prototype.keyFromPrivate = function keyFromPrivate(priv, enc) {\n  return KeyPair.fromPrivate(this, priv, enc);\n};\n\nEC.prototype.keyFromPublic = function keyFromPublic(pub, enc) {\n  return KeyPair.fromPublic(this, pub, enc);\n};\n\nEC.prototype.genKeyPair = function genKeyPair(options) {\n  if (!options)\n    options = {};\n\n  // Instantiate Hmac_DRBG\n  var drbg = new HmacDRBG({\n    hash: this.hash,\n    pers: options.pers,\n    persEnc: options.persEnc || 'utf8',\n    entropy: options.entropy || rand(this.hash.hmacStrength),\n    entropyEnc: options.entropy && options.entropyEnc || 'utf8',\n    nonce: this.n.toArray(),\n  });\n\n  var bytes = this.n.byteLength();\n  var ns2 = this.n.sub(new BN(2));\n  for (;;) {\n    var priv = new BN(drbg.generate(bytes));\n    if (priv.cmp(ns2) > 0)\n      continue;\n\n    priv.iaddn(1);\n    return this.keyFromPrivate(priv);\n  }\n};\n\nEC.prototype._truncateToN = function _truncateToN(msg, truncOnly, bitLength) {\n  var byteLength;\n  if (BN.isBN(msg) || typeof msg === 'number') {\n    msg = new BN(msg, 16);\n    byteLength = msg.byteLength();\n  } else if (typeof msg === 'object') {\n    // BN assumes an array-like input and asserts length\n    byteLength = msg.length;\n    msg = new BN(msg, 16);\n  } else {\n    // BN converts the value to string\n    var str = msg.toString();\n    // HEX encoding\n    byteLength = (str.length + 1) >>> 1;\n    msg = new BN(str, 16);\n  }\n  // Allow overriding\n  if (typeof bitLength !== 'number') {\n    bitLength = byteLength * 8;\n  }\n  var delta = bitLength - this.n.bitLength();\n  if (delta > 0)\n    msg = msg.ushrn(delta);\n  if (!truncOnly && msg.cmp(this.n) >= 0)\n    return msg.sub(this.n);\n  else\n    return msg;\n};\n\nEC.prototype.sign = function sign(msg, key, enc, options) {\n  if (typeof enc === 'object') {\n    options = enc;\n    enc = null;\n  }\n  if (!options)\n    options = {};\n\n  if (typeof msg !== 'string' && typeof msg !== 'number' && !BN.isBN(msg)) {\n    assert(typeof msg === 'object' && msg && typeof msg.length === 'number',\n      'Expected message to be an array-like, a hex string, or a BN instance');\n    assert((msg.length >>> 0) === msg.length); // non-negative 32-bit integer\n    for (var i = 0; i < msg.length; i++) assert((msg[i] & 255) === msg[i]);\n  }\n\n  key = this.keyFromPrivate(key, enc);\n  msg = this._truncateToN(msg, false, options.msgBitLength);\n\n  // Would fail further checks, but let's make the error message clear\n  assert(!msg.isNeg(), 'Can not sign a negative message');\n\n  // Zero-extend key to provide enough entropy\n  var bytes = this.n.byteLength();\n  var bkey = key.getPrivate().toArray('be', bytes);\n\n  // Zero-extend nonce to have the same byte size as N\n  var nonce = msg.toArray('be', bytes);\n\n  // Recheck nonce to be bijective to msg\n  assert((new BN(nonce)).eq(msg), 'Can not sign message');\n\n  // Instantiate Hmac_DRBG\n  var drbg = new HmacDRBG({\n    hash: this.hash,\n    entropy: bkey,\n    nonce: nonce,\n    pers: options.pers,\n    persEnc: options.persEnc || 'utf8',\n  });\n\n  // Number of bytes to generate\n  var ns1 = this.n.sub(new BN(1));\n\n  for (var iter = 0; ; iter++) {\n    var k = options.k ?\n      options.k(iter) :\n      new BN(drbg.generate(this.n.byteLength()));\n    k = this._truncateToN(k, true);\n    if (k.cmpn(1) <= 0 || k.cmp(ns1) >= 0)\n      continue;\n\n    var kp = this.g.mul(k);\n    if (kp.isInfinity())\n      continue;\n\n    var kpX = kp.getX();\n    var r = kpX.umod(this.n);\n    if (r.cmpn(0) === 0)\n      continue;\n\n    var s = k.invm(this.n).mul(r.mul(key.getPrivate()).iadd(msg));\n    s = s.umod(this.n);\n    if (s.cmpn(0) === 0)\n      continue;\n\n    var recoveryParam = (kp.getY().isOdd() ? 1 : 0) |\n                        (kpX.cmp(r) !== 0 ? 2 : 0);\n\n    // Use complement of `s`, if it is > `n / 2`\n    if (options.canonical && s.cmp(this.nh) > 0) {\n      s = this.n.sub(s);\n      recoveryParam ^= 1;\n    }\n\n    return new Signature({ r: r, s: s, recoveryParam: recoveryParam });\n  }\n};\n\nEC.prototype.verify = function verify(msg, signature, key, enc, options) {\n  if (!options)\n    options = {};\n\n  msg = this._truncateToN(msg, false, options.msgBitLength);\n  key = this.keyFromPublic(key, enc);\n  signature = new Signature(signature, 'hex');\n\n  // Perform primitive values validation\n  var r = signature.r;\n  var s = signature.s;\n  if (r.cmpn(1) < 0 || r.cmp(this.n) >= 0)\n    return false;\n  if (s.cmpn(1) < 0 || s.cmp(this.n) >= 0)\n    return false;\n\n  // Validate signature\n  var sinv = s.invm(this.n);\n  var u1 = sinv.mul(msg).umod(this.n);\n  var u2 = sinv.mul(r).umod(this.n);\n  var p;\n\n  if (!this.curve._maxwellTrick) {\n    p = this.g.mulAdd(u1, key.getPublic(), u2);\n    if (p.isInfinity())\n      return false;\n\n    return p.getX().umod(this.n).cmp(r) === 0;\n  }\n\n  // NOTE: Greg Maxwell's trick, inspired by:\n  // https://git.io/vad3K\n\n  p = this.g.jmulAdd(u1, key.getPublic(), u2);\n  if (p.isInfinity())\n    return false;\n\n  // Compare `p.x` of Jacobian point with `r`,\n  // this will do `p.x == r * p.z^2` instead of multiplying `p.x` by the\n  // inverse of `p.z^2`\n  return p.eqXToP(r);\n};\n\nEC.prototype.recoverPubKey = function(msg, signature, j, enc) {\n  assert((3 & j) === j, 'The recovery param is more than two bits');\n  signature = new Signature(signature, enc);\n\n  var n = this.n;\n  var e = new BN(msg);\n  var r = signature.r;\n  var s = signature.s;\n\n  // A set LSB signifies that the y-coordinate is odd\n  var isYOdd = j & 1;\n  var isSecondKey = j >> 1;\n  if (r.cmp(this.curve.p.umod(this.curve.n)) >= 0 && isSecondKey)\n    throw new Error('Unable to find sencond key candinate');\n\n  // 1.1. Let x = r + jn.\n  if (isSecondKey)\n    r = this.curve.pointFromX(r.add(this.curve.n), isYOdd);\n  else\n    r = this.curve.pointFromX(r, isYOdd);\n\n  var rInv = signature.r.invm(n);\n  var s1 = n.sub(e).mul(rInv).umod(n);\n  var s2 = s.mul(rInv).umod(n);\n\n  // 1.6.1 Compute Q = r^-1 (sR -  eG)\n  //               Q = r^-1 (sR + -eG)\n  return this.g.mulAdd(s1, r, s2);\n};\n\nEC.prototype.getKeyRecoveryParam = function(e, signature, Q, enc) {\n  signature = new Signature(signature, enc);\n  if (signature.recoveryParam !== null)\n    return signature.recoveryParam;\n\n  for (var i = 0; i < 4; i++) {\n    var Qprime;\n    try {\n      Qprime = this.recoverPubKey(e, signature, i);\n    } catch (e) {\n      continue;\n    }\n\n    if (Qprime.eq(Q))\n      return i;\n  }\n  throw new Error('Unable to find valid recovery factor');\n};\n","'use strict';\n\nvar BN = require('bn.js');\nvar utils = require('../utils');\nvar assert = utils.assert;\n\nfunction KeyPair(ec, options) {\n  this.ec = ec;\n  this.priv = null;\n  this.pub = null;\n\n  // KeyPair(ec, { priv: ..., pub: ... })\n  if (options.priv)\n    this._importPrivate(options.priv, options.privEnc);\n  if (options.pub)\n    this._importPublic(options.pub, options.pubEnc);\n}\nmodule.exports = KeyPair;\n\nKeyPair.fromPublic = function fromPublic(ec, pub, enc) {\n  if (pub instanceof KeyPair)\n    return pub;\n\n  return new KeyPair(ec, {\n    pub: pub,\n    pubEnc: enc,\n  });\n};\n\nKeyPair.fromPrivate = function fromPrivate(ec, priv, enc) {\n  if (priv instanceof KeyPair)\n    return priv;\n\n  return new KeyPair(ec, {\n    priv: priv,\n    privEnc: enc,\n  });\n};\n\nKeyPair.prototype.validate = function validate() {\n  var pub = this.getPublic();\n\n  if (pub.isInfinity())\n    return { result: false, reason: 'Invalid public key' };\n  if (!pub.validate())\n    return { result: false, reason: 'Public key is not a point' };\n  if (!pub.mul(this.ec.curve.n).isInfinity())\n    return { result: false, reason: 'Public key * N != O' };\n\n  return { result: true, reason: null };\n};\n\nKeyPair.prototype.getPublic = function getPublic(compact, enc) {\n  // compact is optional argument\n  if (typeof compact === 'string') {\n    enc = compact;\n    compact = null;\n  }\n\n  if (!this.pub)\n    this.pub = this.ec.g.mul(this.priv);\n\n  if (!enc)\n    return this.pub;\n\n  return this.pub.encode(enc, compact);\n};\n\nKeyPair.prototype.getPrivate = function getPrivate(enc) {\n  if (enc === 'hex')\n    return this.priv.toString(16, 2);\n  else\n    return this.priv;\n};\n\nKeyPair.prototype._importPrivate = function _importPrivate(key, enc) {\n  this.priv = new BN(key, enc || 16);\n\n  // Ensure that the priv won't be bigger than n, otherwise we may fail\n  // in fixed multiplication method\n  this.priv = this.priv.umod(this.ec.curve.n);\n};\n\nKeyPair.prototype._importPublic = function _importPublic(key, enc) {\n  if (key.x || key.y) {\n    // Montgomery points only have an `x` coordinate.\n    // Weierstrass/Edwards points on the other hand have both `x` and\n    // `y` coordinates.\n    if (this.ec.curve.type === 'mont') {\n      assert(key.x, 'Need x coordinate');\n    } else if (this.ec.curve.type === 'short' ||\n               this.ec.curve.type === 'edwards') {\n      assert(key.x && key.y, 'Need both x and y coordinate');\n    }\n    this.pub = this.ec.curve.point(key.x, key.y);\n    return;\n  }\n  this.pub = this.ec.curve.decodePoint(key, enc);\n};\n\n// ECDH\nKeyPair.prototype.derive = function derive(pub) {\n  if(!pub.validate()) {\n    assert(pub.validate(), 'public point not validated');\n  }\n  return pub.mul(this.priv).getX();\n};\n\n// ECDSA\nKeyPair.prototype.sign = function sign(msg, enc, options) {\n  return this.ec.sign(msg, this, enc, options);\n};\n\nKeyPair.prototype.verify = function verify(msg, signature, options) {\n  return this.ec.verify(msg, signature, this, undefined, options);\n};\n\nKeyPair.prototype.inspect = function inspect() {\n  return '<Key priv: ' + (this.priv && this.priv.toString(16, 2)) +\n         ' pub: ' + (this.pub && this.pub.inspect()) + ' >';\n};\n","'use strict';\n\nvar BN = require('bn.js');\n\nvar utils = require('../utils');\nvar assert = utils.assert;\n\nfunction Signature(options, enc) {\n  if (options instanceof Signature)\n    return options;\n\n  if (this._importDER(options, enc))\n    return;\n\n  assert(options.r && options.s, 'Signature without r or s');\n  this.r = new BN(options.r, 16);\n  this.s = new BN(options.s, 16);\n  if (options.recoveryParam === undefined)\n    this.recoveryParam = null;\n  else\n    this.recoveryParam = options.recoveryParam;\n}\nmodule.exports = Signature;\n\nfunction Position() {\n  this.place = 0;\n}\n\nfunction getLength(buf, p) {\n  var initial = buf[p.place++];\n  if (!(initial & 0x80)) {\n    return initial;\n  }\n  var octetLen = initial & 0xf;\n\n  // Indefinite length or overflow\n  if (octetLen === 0 || octetLen > 4) {\n    return false;\n  }\n\n  if(buf[p.place] === 0x00) {\n    return false;\n  }\n\n  var val = 0;\n  for (var i = 0, off = p.place; i < octetLen; i++, off++) {\n    val <<= 8;\n    val |= buf[off];\n    val >>>= 0;\n  }\n\n  // Leading zeroes\n  if (val <= 0x7f) {\n    return false;\n  }\n\n  p.place = off;\n  return val;\n}\n\nfunction rmPadding(buf) {\n  var i = 0;\n  var len = buf.length - 1;\n  while (!buf[i] && !(buf[i + 1] & 0x80) && i < len) {\n    i++;\n  }\n  if (i === 0) {\n    return buf;\n  }\n  return buf.slice(i);\n}\n\nSignature.prototype._importDER = function _importDER(data, enc) {\n  data = utils.toArray(data, enc);\n  var p = new Position();\n  if (data[p.place++] !== 0x30) {\n    return false;\n  }\n  var len = getLength(data, p);\n  if (len === false) {\n    return false;\n  }\n  if ((len + p.place) !== data.length) {\n    return false;\n  }\n  if (data[p.place++] !== 0x02) {\n    return false;\n  }\n  var rlen = getLength(data, p);\n  if (rlen === false) {\n    return false;\n  }\n  if ((data[p.place] & 128) !== 0) {\n    return false;\n  }\n  var r = data.slice(p.place, rlen + p.place);\n  p.place += rlen;\n  if (data[p.place++] !== 0x02) {\n    return false;\n  }\n  var slen = getLength(data, p);\n  if (slen === false) {\n    return false;\n  }\n  if (data.length !== slen + p.place) {\n    return false;\n  }\n  if ((data[p.place] & 128) !== 0) {\n    return false;\n  }\n  var s = data.slice(p.place, slen + p.place);\n  if (r[0] === 0) {\n    if (r[1] & 0x80) {\n      r = r.slice(1);\n    } else {\n      // Leading zeroes\n      return false;\n    }\n  }\n  if (s[0] === 0) {\n    if (s[1] & 0x80) {\n      s = s.slice(1);\n    } else {\n      // Leading zeroes\n      return false;\n    }\n  }\n\n  this.r = new BN(r);\n  this.s = new BN(s);\n  this.recoveryParam = null;\n\n  return true;\n};\n\nfunction constructLength(arr, len) {\n  if (len < 0x80) {\n    arr.push(len);\n    return;\n  }\n  var octets = 1 + (Math.log(len) / Math.LN2 >>> 3);\n  arr.push(octets | 0x80);\n  while (--octets) {\n    arr.push((len >>> (octets << 3)) & 0xff);\n  }\n  arr.push(len);\n}\n\nSignature.prototype.toDER = function toDER(enc) {\n  var r = this.r.toArray();\n  var s = this.s.toArray();\n\n  // Pad values\n  if (r[0] & 0x80)\n    r = [ 0 ].concat(r);\n  // Pad values\n  if (s[0] & 0x80)\n    s = [ 0 ].concat(s);\n\n  r = rmPadding(r);\n  s = rmPadding(s);\n\n  while (!s[0] && !(s[1] & 0x80)) {\n    s = s.slice(1);\n  }\n  var arr = [ 0x02 ];\n  constructLength(arr, r.length);\n  arr = arr.concat(r);\n  arr.push(0x02);\n  constructLength(arr, s.length);\n  var backHalf = arr.concat(s);\n  var res = [ 0x30 ];\n  constructLength(res, backHalf.length);\n  res = res.concat(backHalf);\n  return utils.encode(res, enc);\n};\n","'use strict';\n\nvar hash = require('hash.js');\nvar curves = require('../curves');\nvar utils = require('../utils');\nvar assert = utils.assert;\nvar parseBytes = utils.parseBytes;\nvar KeyPair = require('./key');\nvar Signature = require('./signature');\n\nfunction EDDSA(curve) {\n  assert(curve === 'ed25519', 'only tested with ed25519 so far');\n\n  if (!(this instanceof EDDSA))\n    return new EDDSA(curve);\n\n  curve = curves[curve].curve;\n  this.curve = curve;\n  this.g = curve.g;\n  this.g.precompute(curve.n.bitLength() + 1);\n\n  this.pointClass = curve.point().constructor;\n  this.encodingLength = Math.ceil(curve.n.bitLength() / 8);\n  this.hash = hash.sha512;\n}\n\nmodule.exports = EDDSA;\n\n/**\n* @param {Array|String} message - message bytes\n* @param {Array|String|KeyPair} secret - secret bytes or a keypair\n* @returns {Signature} - signature\n*/\nEDDSA.prototype.sign = function sign(message, secret) {\n  message = parseBytes(message);\n  var key = this.keyFromSecret(secret);\n  var r = this.hashInt(key.messagePrefix(), message);\n  var R = this.g.mul(r);\n  var Rencoded = this.encodePoint(R);\n  var s_ = this.hashInt(Rencoded, key.pubBytes(), message)\n    .mul(key.priv());\n  var S = r.add(s_).umod(this.curve.n);\n  return this.makeSignature({ R: R, S: S, Rencoded: Rencoded });\n};\n\n/**\n* @param {Array} message - message bytes\n* @param {Array|String|Signature} sig - sig bytes\n* @param {Array|String|Point|KeyPair} pub - public key\n* @returns {Boolean} - true if public key matches sig of message\n*/\nEDDSA.prototype.verify = function verify(message, sig, pub) {\n  message = parseBytes(message);\n  sig = this.makeSignature(sig);\n  if (sig.S().gte(sig.eddsa.curve.n) || sig.S().isNeg()) {\n    return false;\n  }\n  var key = this.keyFromPublic(pub);\n  var h = this.hashInt(sig.Rencoded(), key.pubBytes(), message);\n  var SG = this.g.mul(sig.S());\n  var RplusAh = sig.R().add(key.pub().mul(h));\n  return RplusAh.eq(SG);\n};\n\nEDDSA.prototype.hashInt = function hashInt() {\n  var hash = this.hash();\n  for (var i = 0; i < arguments.length; i++)\n    hash.update(arguments[i]);\n  return utils.intFromLE(hash.digest()).umod(this.curve.n);\n};\n\nEDDSA.prototype.keyFromPublic = function keyFromPublic(pub) {\n  return KeyPair.fromPublic(this, pub);\n};\n\nEDDSA.prototype.keyFromSecret = function keyFromSecret(secret) {\n  return KeyPair.fromSecret(this, secret);\n};\n\nEDDSA.prototype.makeSignature = function makeSignature(sig) {\n  if (sig instanceof Signature)\n    return sig;\n  return new Signature(this, sig);\n};\n\n/**\n* * https://tools.ietf.org/html/draft-josefsson-eddsa-ed25519-03#section-5.2\n*\n* EDDSA defines methods for encoding and decoding points and integers. These are\n* helper convenience methods, that pass along to utility functions implied\n* parameters.\n*\n*/\nEDDSA.prototype.encodePoint = function encodePoint(point) {\n  var enc = point.getY().toArray('le', this.encodingLength);\n  enc[this.encodingLength - 1] |= point.getX().isOdd() ? 0x80 : 0;\n  return enc;\n};\n\nEDDSA.prototype.decodePoint = function decodePoint(bytes) {\n  bytes = utils.parseBytes(bytes);\n\n  var lastIx = bytes.length - 1;\n  var normed = bytes.slice(0, lastIx).concat(bytes[lastIx] & ~0x80);\n  var xIsOdd = (bytes[lastIx] & 0x80) !== 0;\n\n  var y = utils.intFromLE(normed);\n  return this.curve.pointFromY(y, xIsOdd);\n};\n\nEDDSA.prototype.encodeInt = function encodeInt(num) {\n  return num.toArray('le', this.encodingLength);\n};\n\nEDDSA.prototype.decodeInt = function decodeInt(bytes) {\n  return utils.intFromLE(bytes);\n};\n\nEDDSA.prototype.isPoint = function isPoint(val) {\n  return val instanceof this.pointClass;\n};\n","'use strict';\n\nvar utils = require('../utils');\nvar assert = utils.assert;\nvar parseBytes = utils.parseBytes;\nvar cachedProperty = utils.cachedProperty;\n\n/**\n* @param {EDDSA} eddsa - instance\n* @param {Object} params - public/private key parameters\n*\n* @param {Array<Byte>} [params.secret] - secret seed bytes\n* @param {Point} [params.pub] - public key point (aka `A` in eddsa terms)\n* @param {Array<Byte>} [params.pub] - public key point encoded as bytes\n*\n*/\nfunction KeyPair(eddsa, params) {\n  this.eddsa = eddsa;\n  this._secret = parseBytes(params.secret);\n  if (eddsa.isPoint(params.pub))\n    this._pub = params.pub;\n  else\n    this._pubBytes = parseBytes(params.pub);\n}\n\nKeyPair.fromPublic = function fromPublic(eddsa, pub) {\n  if (pub instanceof KeyPair)\n    return pub;\n  return new KeyPair(eddsa, { pub: pub });\n};\n\nKeyPair.fromSecret = function fromSecret(eddsa, secret) {\n  if (secret instanceof KeyPair)\n    return secret;\n  return new KeyPair(eddsa, { secret: secret });\n};\n\nKeyPair.prototype.secret = function secret() {\n  return this._secret;\n};\n\ncachedProperty(KeyPair, 'pubBytes', function pubBytes() {\n  return this.eddsa.encodePoint(this.pub());\n});\n\ncachedProperty(KeyPair, 'pub', function pub() {\n  if (this._pubBytes)\n    return this.eddsa.decodePoint(this._pubBytes);\n  return this.eddsa.g.mul(this.priv());\n});\n\ncachedProperty(KeyPair, 'privBytes', function privBytes() {\n  var eddsa = this.eddsa;\n  var hash = this.hash();\n  var lastIx = eddsa.encodingLength - 1;\n\n  var a = hash.slice(0, eddsa.encodingLength);\n  a[0] &= 248;\n  a[lastIx] &= 127;\n  a[lastIx] |= 64;\n\n  return a;\n});\n\ncachedProperty(KeyPair, 'priv', function priv() {\n  return this.eddsa.decodeInt(this.privBytes());\n});\n\ncachedProperty(KeyPair, 'hash', function hash() {\n  return this.eddsa.hash().update(this.secret()).digest();\n});\n\ncachedProperty(KeyPair, 'messagePrefix', function messagePrefix() {\n  return this.hash().slice(this.eddsa.encodingLength);\n});\n\nKeyPair.prototype.sign = function sign(message) {\n  assert(this._secret, 'KeyPair can only verify');\n  return this.eddsa.sign(message, this);\n};\n\nKeyPair.prototype.verify = function verify(message, sig) {\n  return this.eddsa.verify(message, sig, this);\n};\n\nKeyPair.prototype.getSecret = function getSecret(enc) {\n  assert(this._secret, 'KeyPair is public only');\n  return utils.encode(this.secret(), enc);\n};\n\nKeyPair.prototype.getPublic = function getPublic(enc) {\n  return utils.encode(this.pubBytes(), enc);\n};\n\nmodule.exports = KeyPair;\n","'use strict';\n\nvar BN = require('bn.js');\nvar utils = require('../utils');\nvar assert = utils.assert;\nvar cachedProperty = utils.cachedProperty;\nvar parseBytes = utils.parseBytes;\n\n/**\n* @param {EDDSA} eddsa - eddsa instance\n* @param {Array<Bytes>|Object} sig -\n* @param {Array<Bytes>|Point} [sig.R] - R point as Point or bytes\n* @param {Array<Bytes>|bn} [sig.S] - S scalar as bn or bytes\n* @param {Array<Bytes>} [sig.Rencoded] - R point encoded\n* @param {Array<Bytes>} [sig.Sencoded] - S scalar encoded\n*/\nfunction Signature(eddsa, sig) {\n  this.eddsa = eddsa;\n\n  if (typeof sig !== 'object')\n    sig = parseBytes(sig);\n\n  if (Array.isArray(sig)) {\n    assert(sig.length === eddsa.encodingLength * 2, 'Signature has invalid size');\n    sig = {\n      R: sig.slice(0, eddsa.encodingLength),\n      S: sig.slice(eddsa.encodingLength),\n    };\n  }\n\n  assert(sig.R && sig.S, 'Signature without R or S');\n\n  if (eddsa.isPoint(sig.R))\n    this._R = sig.R;\n  if (sig.S instanceof BN)\n    this._S = sig.S;\n\n  this._Rencoded = Array.isArray(sig.R) ? sig.R : sig.Rencoded;\n  this._Sencoded = Array.isArray(sig.S) ? sig.S : sig.Sencoded;\n}\n\ncachedProperty(Signature, 'S', function S() {\n  return this.eddsa.decodeInt(this.Sencoded());\n});\n\ncachedProperty(Signature, 'R', function R() {\n  return this.eddsa.decodePoint(this.Rencoded());\n});\n\ncachedProperty(Signature, 'Rencoded', function Rencoded() {\n  return this.eddsa.encodePoint(this.R());\n});\n\ncachedProperty(Signature, 'Sencoded', function Sencoded() {\n  return this.eddsa.encodeInt(this.S());\n});\n\nSignature.prototype.toBytes = function toBytes() {\n  return this.Rencoded().concat(this.Sencoded());\n};\n\nSignature.prototype.toHex = function toHex() {\n  return utils.encode(this.toBytes(), 'hex').toUpperCase();\n};\n\nmodule.exports = Signature;\n","module.exports = {\n  doubles: {\n    step: 4,\n    points: [\n      [\n        'e60fce93b59e9ec53011aabc21c23e97b2a31369b87a5ae9c44ee89e2a6dec0a',\n        'f7e3507399e595929db99f34f57937101296891e44d23f0be1f32cce69616821',\n      ],\n      [\n        '8282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508',\n        '11f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26caf',\n      ],\n      [\n        '175e159f728b865a72f99cc6c6fc846de0b93833fd2222ed73fce5b551e5b739',\n        'd3506e0d9e3c79eba4ef97a51ff71f5eacb5955add24345c6efa6ffee9fed695',\n      ],\n      [\n        '363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640',\n        '4e273adfc732221953b445397f3363145b9a89008199ecb62003c7f3bee9de9',\n      ],\n      [\n        '8b4b5f165df3c2be8c6244b5b745638843e4a781a15bcd1b69f79a55dffdf80c',\n        '4aad0a6f68d308b4b3fbd7813ab0da04f9e336546162ee56b3eff0c65fd4fd36',\n      ],\n      [\n        '723cbaa6e5db996d6bf771c00bd548c7b700dbffa6c0e77bcb6115925232fcda',\n        '96e867b5595cc498a921137488824d6e2660a0653779494801dc069d9eb39f5f',\n      ],\n      [\n        'eebfa4d493bebf98ba5feec812c2d3b50947961237a919839a533eca0e7dd7fa',\n        '5d9a8ca3970ef0f269ee7edaf178089d9ae4cdc3a711f712ddfd4fdae1de8999',\n      ],\n      [\n        '100f44da696e71672791d0a09b7bde459f1215a29b3c03bfefd7835b39a48db0',\n        'cdd9e13192a00b772ec8f3300c090666b7ff4a18ff5195ac0fbd5cd62bc65a09',\n      ],\n      [\n        'e1031be262c7ed1b1dc9227a4a04c017a77f8d4464f3b3852c8acde6e534fd2d',\n        '9d7061928940405e6bb6a4176597535af292dd419e1ced79a44f18f29456a00d',\n      ],\n      [\n        'feea6cae46d55b530ac2839f143bd7ec5cf8b266a41d6af52d5e688d9094696d',\n        'e57c6b6c97dce1bab06e4e12bf3ecd5c981c8957cc41442d3155debf18090088',\n      ],\n      [\n        'da67a91d91049cdcb367be4be6ffca3cfeed657d808583de33fa978bc1ec6cb1',\n        '9bacaa35481642bc41f463f7ec9780e5dec7adc508f740a17e9ea8e27a68be1d',\n      ],\n      [\n        '53904faa0b334cdda6e000935ef22151ec08d0f7bb11069f57545ccc1a37b7c0',\n        '5bc087d0bc80106d88c9eccac20d3c1c13999981e14434699dcb096b022771c8',\n      ],\n      [\n        '8e7bcd0bd35983a7719cca7764ca906779b53a043a9b8bcaeff959f43ad86047',\n        '10b7770b2a3da4b3940310420ca9514579e88e2e47fd68b3ea10047e8460372a',\n      ],\n      [\n        '385eed34c1cdff21e6d0818689b81bde71a7f4f18397e6690a841e1599c43862',\n        '283bebc3e8ea23f56701de19e9ebf4576b304eec2086dc8cc0458fe5542e5453',\n      ],\n      [\n        '6f9d9b803ecf191637c73a4413dfa180fddf84a5947fbc9c606ed86c3fac3a7',\n        '7c80c68e603059ba69b8e2a30e45c4d47ea4dd2f5c281002d86890603a842160',\n      ],\n      [\n        '3322d401243c4e2582a2147c104d6ecbf774d163db0f5e5313b7e0e742d0e6bd',\n        '56e70797e9664ef5bfb019bc4ddaf9b72805f63ea2873af624f3a2e96c28b2a0',\n      ],\n      [\n        '85672c7d2de0b7da2bd1770d89665868741b3f9af7643397721d74d28134ab83',\n        '7c481b9b5b43b2eb6374049bfa62c2e5e77f17fcc5298f44c8e3094f790313a6',\n      ],\n      [\n        '948bf809b1988a46b06c9f1919413b10f9226c60f668832ffd959af60c82a0a',\n        '53a562856dcb6646dc6b74c5d1c3418c6d4dff08c97cd2bed4cb7f88d8c8e589',\n      ],\n      [\n        '6260ce7f461801c34f067ce0f02873a8f1b0e44dfc69752accecd819f38fd8e8',\n        'bc2da82b6fa5b571a7f09049776a1ef7ecd292238051c198c1a84e95b2b4ae17',\n      ],\n      [\n        'e5037de0afc1d8d43d8348414bbf4103043ec8f575bfdc432953cc8d2037fa2d',\n        '4571534baa94d3b5f9f98d09fb990bddbd5f5b03ec481f10e0e5dc841d755bda',\n      ],\n      [\n        'e06372b0f4a207adf5ea905e8f1771b4e7e8dbd1c6a6c5b725866a0ae4fce725',\n        '7a908974bce18cfe12a27bb2ad5a488cd7484a7787104870b27034f94eee31dd',\n      ],\n      [\n        '213c7a715cd5d45358d0bbf9dc0ce02204b10bdde2a3f58540ad6908d0559754',\n        '4b6dad0b5ae462507013ad06245ba190bb4850f5f36a7eeddff2c27534b458f2',\n      ],\n      [\n        '4e7c272a7af4b34e8dbb9352a5419a87e2838c70adc62cddf0cc3a3b08fbd53c',\n        '17749c766c9d0b18e16fd09f6def681b530b9614bff7dd33e0b3941817dcaae6',\n      ],\n      [\n        'fea74e3dbe778b1b10f238ad61686aa5c76e3db2be43057632427e2840fb27b6',\n        '6e0568db9b0b13297cf674deccb6af93126b596b973f7b77701d3db7f23cb96f',\n      ],\n      [\n        '76e64113f677cf0e10a2570d599968d31544e179b760432952c02a4417bdde39',\n        'c90ddf8dee4e95cf577066d70681f0d35e2a33d2b56d2032b4b1752d1901ac01',\n      ],\n      [\n        'c738c56b03b2abe1e8281baa743f8f9a8f7cc643df26cbee3ab150242bcbb891',\n        '893fb578951ad2537f718f2eacbfbbbb82314eef7880cfe917e735d9699a84c3',\n      ],\n      [\n        'd895626548b65b81e264c7637c972877d1d72e5f3a925014372e9f6588f6c14b',\n        'febfaa38f2bc7eae728ec60818c340eb03428d632bb067e179363ed75d7d991f',\n      ],\n      [\n        'b8da94032a957518eb0f6433571e8761ceffc73693e84edd49150a564f676e03',\n        '2804dfa44805a1e4d7c99cc9762808b092cc584d95ff3b511488e4e74efdf6e7',\n      ],\n      [\n        'e80fea14441fb33a7d8adab9475d7fab2019effb5156a792f1a11778e3c0df5d',\n        'eed1de7f638e00771e89768ca3ca94472d155e80af322ea9fcb4291b6ac9ec78',\n      ],\n      [\n        'a301697bdfcd704313ba48e51d567543f2a182031efd6915ddc07bbcc4e16070',\n        '7370f91cfb67e4f5081809fa25d40f9b1735dbf7c0a11a130c0d1a041e177ea1',\n      ],\n      [\n        '90ad85b389d6b936463f9d0512678de208cc330b11307fffab7ac63e3fb04ed4',\n        'e507a3620a38261affdcbd9427222b839aefabe1582894d991d4d48cb6ef150',\n      ],\n      [\n        '8f68b9d2f63b5f339239c1ad981f162ee88c5678723ea3351b7b444c9ec4c0da',\n        '662a9f2dba063986de1d90c2b6be215dbbea2cfe95510bfdf23cbf79501fff82',\n      ],\n      [\n        'e4f3fb0176af85d65ff99ff9198c36091f48e86503681e3e6686fd5053231e11',\n        '1e63633ad0ef4f1c1661a6d0ea02b7286cc7e74ec951d1c9822c38576feb73bc',\n      ],\n      [\n        '8c00fa9b18ebf331eb961537a45a4266c7034f2f0d4e1d0716fb6eae20eae29e',\n        'efa47267fea521a1a9dc343a3736c974c2fadafa81e36c54e7d2a4c66702414b',\n      ],\n      [\n        'e7a26ce69dd4829f3e10cec0a9e98ed3143d084f308b92c0997fddfc60cb3e41',\n        '2a758e300fa7984b471b006a1aafbb18d0a6b2c0420e83e20e8a9421cf2cfd51',\n      ],\n      [\n        'b6459e0ee3662ec8d23540c223bcbdc571cbcb967d79424f3cf29eb3de6b80ef',\n        '67c876d06f3e06de1dadf16e5661db3c4b3ae6d48e35b2ff30bf0b61a71ba45',\n      ],\n      [\n        'd68a80c8280bb840793234aa118f06231d6f1fc67e73c5a5deda0f5b496943e8',\n        'db8ba9fff4b586d00c4b1f9177b0e28b5b0e7b8f7845295a294c84266b133120',\n      ],\n      [\n        '324aed7df65c804252dc0270907a30b09612aeb973449cea4095980fc28d3d5d',\n        '648a365774b61f2ff130c0c35aec1f4f19213b0c7e332843967224af96ab7c84',\n      ],\n      [\n        '4df9c14919cde61f6d51dfdbe5fee5dceec4143ba8d1ca888e8bd373fd054c96',\n        '35ec51092d8728050974c23a1d85d4b5d506cdc288490192ebac06cad10d5d',\n      ],\n      [\n        '9c3919a84a474870faed8a9c1cc66021523489054d7f0308cbfc99c8ac1f98cd',\n        'ddb84f0f4a4ddd57584f044bf260e641905326f76c64c8e6be7e5e03d4fc599d',\n      ],\n      [\n        '6057170b1dd12fdf8de05f281d8e06bb91e1493a8b91d4cc5a21382120a959e5',\n        '9a1af0b26a6a4807add9a2daf71df262465152bc3ee24c65e899be932385a2a8',\n      ],\n      [\n        'a576df8e23a08411421439a4518da31880cef0fba7d4df12b1a6973eecb94266',\n        '40a6bf20e76640b2c92b97afe58cd82c432e10a7f514d9f3ee8be11ae1b28ec8',\n      ],\n      [\n        '7778a78c28dec3e30a05fe9629de8c38bb30d1f5cf9a3a208f763889be58ad71',\n        '34626d9ab5a5b22ff7098e12f2ff580087b38411ff24ac563b513fc1fd9f43ac',\n      ],\n      [\n        '928955ee637a84463729fd30e7afd2ed5f96274e5ad7e5cb09eda9c06d903ac',\n        'c25621003d3f42a827b78a13093a95eeac3d26efa8a8d83fc5180e935bcd091f',\n      ],\n      [\n        '85d0fef3ec6db109399064f3a0e3b2855645b4a907ad354527aae75163d82751',\n        '1f03648413a38c0be29d496e582cf5663e8751e96877331582c237a24eb1f962',\n      ],\n      [\n        'ff2b0dce97eece97c1c9b6041798b85dfdfb6d8882da20308f5404824526087e',\n        '493d13fef524ba188af4c4dc54d07936c7b7ed6fb90e2ceb2c951e01f0c29907',\n      ],\n      [\n        '827fbbe4b1e880ea9ed2b2e6301b212b57f1ee148cd6dd28780e5e2cf856e241',\n        'c60f9c923c727b0b71bef2c67d1d12687ff7a63186903166d605b68baec293ec',\n      ],\n      [\n        'eaa649f21f51bdbae7be4ae34ce6e5217a58fdce7f47f9aa7f3b58fa2120e2b3',\n        'be3279ed5bbbb03ac69a80f89879aa5a01a6b965f13f7e59d47a5305ba5ad93d',\n      ],\n      [\n        'e4a42d43c5cf169d9391df6decf42ee541b6d8f0c9a137401e23632dda34d24f',\n        '4d9f92e716d1c73526fc99ccfb8ad34ce886eedfa8d8e4f13a7f7131deba9414',\n      ],\n      [\n        '1ec80fef360cbdd954160fadab352b6b92b53576a88fea4947173b9d4300bf19',\n        'aeefe93756b5340d2f3a4958a7abbf5e0146e77f6295a07b671cdc1cc107cefd',\n      ],\n      [\n        '146a778c04670c2f91b00af4680dfa8bce3490717d58ba889ddb5928366642be',\n        'b318e0ec3354028add669827f9d4b2870aaa971d2f7e5ed1d0b297483d83efd0',\n      ],\n      [\n        'fa50c0f61d22e5f07e3acebb1aa07b128d0012209a28b9776d76a8793180eef9',\n        '6b84c6922397eba9b72cd2872281a68a5e683293a57a213b38cd8d7d3f4f2811',\n      ],\n      [\n        'da1d61d0ca721a11b1a5bf6b7d88e8421a288ab5d5bba5220e53d32b5f067ec2',\n        '8157f55a7c99306c79c0766161c91e2966a73899d279b48a655fba0f1ad836f1',\n      ],\n      [\n        'a8e282ff0c9706907215ff98e8fd416615311de0446f1e062a73b0610d064e13',\n        '7f97355b8db81c09abfb7f3c5b2515888b679a3e50dd6bd6cef7c73111f4cc0c',\n      ],\n      [\n        '174a53b9c9a285872d39e56e6913cab15d59b1fa512508c022f382de8319497c',\n        'ccc9dc37abfc9c1657b4155f2c47f9e6646b3a1d8cb9854383da13ac079afa73',\n      ],\n      [\n        '959396981943785c3d3e57edf5018cdbe039e730e4918b3d884fdff09475b7ba',\n        '2e7e552888c331dd8ba0386a4b9cd6849c653f64c8709385e9b8abf87524f2fd',\n      ],\n      [\n        'd2a63a50ae401e56d645a1153b109a8fcca0a43d561fba2dbb51340c9d82b151',\n        'e82d86fb6443fcb7565aee58b2948220a70f750af484ca52d4142174dcf89405',\n      ],\n      [\n        '64587e2335471eb890ee7896d7cfdc866bacbdbd3839317b3436f9b45617e073',\n        'd99fcdd5bf6902e2ae96dd6447c299a185b90a39133aeab358299e5e9faf6589',\n      ],\n      [\n        '8481bde0e4e4d885b3a546d3e549de042f0aa6cea250e7fd358d6c86dd45e458',\n        '38ee7b8cba5404dd84a25bf39cecb2ca900a79c42b262e556d64b1b59779057e',\n      ],\n      [\n        '13464a57a78102aa62b6979ae817f4637ffcfed3c4b1ce30bcd6303f6caf666b',\n        '69be159004614580ef7e433453ccb0ca48f300a81d0942e13f495a907f6ecc27',\n      ],\n      [\n        'bc4a9df5b713fe2e9aef430bcc1dc97a0cd9ccede2f28588cada3a0d2d83f366',\n        'd3a81ca6e785c06383937adf4b798caa6e8a9fbfa547b16d758d666581f33c1',\n      ],\n      [\n        '8c28a97bf8298bc0d23d8c749452a32e694b65e30a9472a3954ab30fe5324caa',\n        '40a30463a3305193378fedf31f7cc0eb7ae784f0451cb9459e71dc73cbef9482',\n      ],\n      [\n        '8ea9666139527a8c1dd94ce4f071fd23c8b350c5a4bb33748c4ba111faccae0',\n        '620efabbc8ee2782e24e7c0cfb95c5d735b783be9cf0f8e955af34a30e62b945',\n      ],\n      [\n        'dd3625faef5ba06074669716bbd3788d89bdde815959968092f76cc4eb9a9787',\n        '7a188fa3520e30d461da2501045731ca941461982883395937f68d00c644a573',\n      ],\n      [\n        'f710d79d9eb962297e4f6232b40e8f7feb2bc63814614d692c12de752408221e',\n        'ea98e67232d3b3295d3b535532115ccac8612c721851617526ae47a9c77bfc82',\n      ],\n    ],\n  },\n  naf: {\n    wnd: 7,\n    points: [\n      [\n        'f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9',\n        '388f7b0f632de8140fe337e62a37f3566500a99934c2231b6cb9fd7584b8e672',\n      ],\n      [\n        '2f8bde4d1a07209355b4a7250a5c5128e88b84bddc619ab7cba8d569b240efe4',\n        'd8ac222636e5e3d6d4dba9dda6c9c426f788271bab0d6840dca87d3aa6ac62d6',\n      ],\n      [\n        '5cbdf0646e5db4eaa398f365f2ea7a0e3d419b7e0330e39ce92bddedcac4f9bc',\n        '6aebca40ba255960a3178d6d861a54dba813d0b813fde7b5a5082628087264da',\n      ],\n      [\n        'acd484e2f0c7f65309ad178a9f559abde09796974c57e714c35f110dfc27ccbe',\n        'cc338921b0a7d9fd64380971763b61e9add888a4375f8e0f05cc262ac64f9c37',\n      ],\n      [\n        '774ae7f858a9411e5ef4246b70c65aac5649980be5c17891bbec17895da008cb',\n        'd984a032eb6b5e190243dd56d7b7b365372db1e2dff9d6a8301d74c9c953c61b',\n      ],\n      [\n        'f28773c2d975288bc7d1d205c3748651b075fbc6610e58cddeeddf8f19405aa8',\n        'ab0902e8d880a89758212eb65cdaf473a1a06da521fa91f29b5cb52db03ed81',\n      ],\n      [\n        'd7924d4f7d43ea965a465ae3095ff41131e5946f3c85f79e44adbcf8e27e080e',\n        '581e2872a86c72a683842ec228cc6defea40af2bd896d3a5c504dc9ff6a26b58',\n      ],\n      [\n        'defdea4cdb677750a420fee807eacf21eb9898ae79b9768766e4faa04a2d4a34',\n        '4211ab0694635168e997b0ead2a93daeced1f4a04a95c0f6cfb199f69e56eb77',\n      ],\n      [\n        '2b4ea0a797a443d293ef5cff444f4979f06acfebd7e86d277475656138385b6c',\n        '85e89bc037945d93b343083b5a1c86131a01f60c50269763b570c854e5c09b7a',\n      ],\n      [\n        '352bbf4a4cdd12564f93fa332ce333301d9ad40271f8107181340aef25be59d5',\n        '321eb4075348f534d59c18259dda3e1f4a1b3b2e71b1039c67bd3d8bcf81998c',\n      ],\n      [\n        '2fa2104d6b38d11b0230010559879124e42ab8dfeff5ff29dc9cdadd4ecacc3f',\n        '2de1068295dd865b64569335bd5dd80181d70ecfc882648423ba76b532b7d67',\n      ],\n      [\n        '9248279b09b4d68dab21a9b066edda83263c3d84e09572e269ca0cd7f5453714',\n        '73016f7bf234aade5d1aa71bdea2b1ff3fc0de2a887912ffe54a32ce97cb3402',\n      ],\n      [\n        'daed4f2be3a8bf278e70132fb0beb7522f570e144bf615c07e996d443dee8729',\n        'a69dce4a7d6c98e8d4a1aca87ef8d7003f83c230f3afa726ab40e52290be1c55',\n      ],\n      [\n        'c44d12c7065d812e8acf28d7cbb19f9011ecd9e9fdf281b0e6a3b5e87d22e7db',\n        '2119a460ce326cdc76c45926c982fdac0e106e861edf61c5a039063f0e0e6482',\n      ],\n      [\n        '6a245bf6dc698504c89a20cfded60853152b695336c28063b61c65cbd269e6b4',\n        'e022cf42c2bd4a708b3f5126f16a24ad8b33ba48d0423b6efd5e6348100d8a82',\n      ],\n      [\n        '1697ffa6fd9de627c077e3d2fe541084ce13300b0bec1146f95ae57f0d0bd6a5',\n        'b9c398f186806f5d27561506e4557433a2cf15009e498ae7adee9d63d01b2396',\n      ],\n      [\n        '605bdb019981718b986d0f07e834cb0d9deb8360ffb7f61df982345ef27a7479',\n        '2972d2de4f8d20681a78d93ec96fe23c26bfae84fb14db43b01e1e9056b8c49',\n      ],\n      [\n        '62d14dab4150bf497402fdc45a215e10dcb01c354959b10cfe31c7e9d87ff33d',\n        '80fc06bd8cc5b01098088a1950eed0db01aa132967ab472235f5642483b25eaf',\n      ],\n      [\n        '80c60ad0040f27dade5b4b06c408e56b2c50e9f56b9b8b425e555c2f86308b6f',\n        '1c38303f1cc5c30f26e66bad7fe72f70a65eed4cbe7024eb1aa01f56430bd57a',\n      ],\n      [\n        '7a9375ad6167ad54aa74c6348cc54d344cc5dc9487d847049d5eabb0fa03c8fb',\n        'd0e3fa9eca8726909559e0d79269046bdc59ea10c70ce2b02d499ec224dc7f7',\n      ],\n      [\n        'd528ecd9b696b54c907a9ed045447a79bb408ec39b68df504bb51f459bc3ffc9',\n        'eecf41253136e5f99966f21881fd656ebc4345405c520dbc063465b521409933',\n      ],\n      [\n        '49370a4b5f43412ea25f514e8ecdad05266115e4a7ecb1387231808f8b45963',\n        '758f3f41afd6ed428b3081b0512fd62a54c3f3afbb5b6764b653052a12949c9a',\n      ],\n      [\n        '77f230936ee88cbbd73df930d64702ef881d811e0e1498e2f1c13eb1fc345d74',\n        '958ef42a7886b6400a08266e9ba1b37896c95330d97077cbbe8eb3c7671c60d6',\n      ],\n      [\n        'f2dac991cc4ce4b9ea44887e5c7c0bce58c80074ab9d4dbaeb28531b7739f530',\n        'e0dedc9b3b2f8dad4da1f32dec2531df9eb5fbeb0598e4fd1a117dba703a3c37',\n      ],\n      [\n        '463b3d9f662621fb1b4be8fbbe2520125a216cdfc9dae3debcba4850c690d45b',\n        '5ed430d78c296c3543114306dd8622d7c622e27c970a1de31cb377b01af7307e',\n      ],\n      [\n        'f16f804244e46e2a09232d4aff3b59976b98fac14328a2d1a32496b49998f247',\n        'cedabd9b82203f7e13d206fcdf4e33d92a6c53c26e5cce26d6579962c4e31df6',\n      ],\n      [\n        'caf754272dc84563b0352b7a14311af55d245315ace27c65369e15f7151d41d1',\n        'cb474660ef35f5f2a41b643fa5e460575f4fa9b7962232a5c32f908318a04476',\n      ],\n      [\n        '2600ca4b282cb986f85d0f1709979d8b44a09c07cb86d7c124497bc86f082120',\n        '4119b88753c15bd6a693b03fcddbb45d5ac6be74ab5f0ef44b0be9475a7e4b40',\n      ],\n      [\n        '7635ca72d7e8432c338ec53cd12220bc01c48685e24f7dc8c602a7746998e435',\n        '91b649609489d613d1d5e590f78e6d74ecfc061d57048bad9e76f302c5b9c61',\n      ],\n      [\n        '754e3239f325570cdbbf4a87deee8a66b7f2b33479d468fbc1a50743bf56cc18',\n        '673fb86e5bda30fb3cd0ed304ea49a023ee33d0197a695d0c5d98093c536683',\n      ],\n      [\n        'e3e6bd1071a1e96aff57859c82d570f0330800661d1c952f9fe2694691d9b9e8',\n        '59c9e0bba394e76f40c0aa58379a3cb6a5a2283993e90c4167002af4920e37f5',\n      ],\n      [\n        '186b483d056a033826ae73d88f732985c4ccb1f32ba35f4b4cc47fdcf04aa6eb',\n        '3b952d32c67cf77e2e17446e204180ab21fb8090895138b4a4a797f86e80888b',\n      ],\n      [\n        'df9d70a6b9876ce544c98561f4be4f725442e6d2b737d9c91a8321724ce0963f',\n        '55eb2dafd84d6ccd5f862b785dc39d4ab157222720ef9da217b8c45cf2ba2417',\n      ],\n      [\n        '5edd5cc23c51e87a497ca815d5dce0f8ab52554f849ed8995de64c5f34ce7143',\n        'efae9c8dbc14130661e8cec030c89ad0c13c66c0d17a2905cdc706ab7399a868',\n      ],\n      [\n        '290798c2b6476830da12fe02287e9e777aa3fba1c355b17a722d362f84614fba',\n        'e38da76dcd440621988d00bcf79af25d5b29c094db2a23146d003afd41943e7a',\n      ],\n      [\n        'af3c423a95d9f5b3054754efa150ac39cd29552fe360257362dfdecef4053b45',\n        'f98a3fd831eb2b749a93b0e6f35cfb40c8cd5aa667a15581bc2feded498fd9c6',\n      ],\n      [\n        '766dbb24d134e745cccaa28c99bf274906bb66b26dcf98df8d2fed50d884249a',\n        '744b1152eacbe5e38dcc887980da38b897584a65fa06cedd2c924f97cbac5996',\n      ],\n      [\n        '59dbf46f8c94759ba21277c33784f41645f7b44f6c596a58ce92e666191abe3e',\n        'c534ad44175fbc300f4ea6ce648309a042ce739a7919798cd85e216c4a307f6e',\n      ],\n      [\n        'f13ada95103c4537305e691e74e9a4a8dd647e711a95e73cb62dc6018cfd87b8',\n        'e13817b44ee14de663bf4bc808341f326949e21a6a75c2570778419bdaf5733d',\n      ],\n      [\n        '7754b4fa0e8aced06d4167a2c59cca4cda1869c06ebadfb6488550015a88522c',\n        '30e93e864e669d82224b967c3020b8fa8d1e4e350b6cbcc537a48b57841163a2',\n      ],\n      [\n        '948dcadf5990e048aa3874d46abef9d701858f95de8041d2a6828c99e2262519',\n        'e491a42537f6e597d5d28a3224b1bc25df9154efbd2ef1d2cbba2cae5347d57e',\n      ],\n      [\n        '7962414450c76c1689c7b48f8202ec37fb224cf5ac0bfa1570328a8a3d7c77ab',\n        '100b610ec4ffb4760d5c1fc133ef6f6b12507a051f04ac5760afa5b29db83437',\n      ],\n      [\n        '3514087834964b54b15b160644d915485a16977225b8847bb0dd085137ec47ca',\n        'ef0afbb2056205448e1652c48e8127fc6039e77c15c2378b7e7d15a0de293311',\n      ],\n      [\n        'd3cc30ad6b483e4bc79ce2c9dd8bc54993e947eb8df787b442943d3f7b527eaf',\n        '8b378a22d827278d89c5e9be8f9508ae3c2ad46290358630afb34db04eede0a4',\n      ],\n      [\n        '1624d84780732860ce1c78fcbfefe08b2b29823db913f6493975ba0ff4847610',\n        '68651cf9b6da903e0914448c6cd9d4ca896878f5282be4c8cc06e2a404078575',\n      ],\n      [\n        '733ce80da955a8a26902c95633e62a985192474b5af207da6df7b4fd5fc61cd4',\n        'f5435a2bd2badf7d485a4d8b8db9fcce3e1ef8e0201e4578c54673bc1dc5ea1d',\n      ],\n      [\n        '15d9441254945064cf1a1c33bbd3b49f8966c5092171e699ef258dfab81c045c',\n        'd56eb30b69463e7234f5137b73b84177434800bacebfc685fc37bbe9efe4070d',\n      ],\n      [\n        'a1d0fcf2ec9de675b612136e5ce70d271c21417c9d2b8aaaac138599d0717940',\n        'edd77f50bcb5a3cab2e90737309667f2641462a54070f3d519212d39c197a629',\n      ],\n      [\n        'e22fbe15c0af8ccc5780c0735f84dbe9a790badee8245c06c7ca37331cb36980',\n        'a855babad5cd60c88b430a69f53a1a7a38289154964799be43d06d77d31da06',\n      ],\n      [\n        '311091dd9860e8e20ee13473c1155f5f69635e394704eaa74009452246cfa9b3',\n        '66db656f87d1f04fffd1f04788c06830871ec5a64feee685bd80f0b1286d8374',\n      ],\n      [\n        '34c1fd04d301be89b31c0442d3e6ac24883928b45a9340781867d4232ec2dbdf',\n        '9414685e97b1b5954bd46f730174136d57f1ceeb487443dc5321857ba73abee',\n      ],\n      [\n        'f219ea5d6b54701c1c14de5b557eb42a8d13f3abbcd08affcc2a5e6b049b8d63',\n        '4cb95957e83d40b0f73af4544cccf6b1f4b08d3c07b27fb8d8c2962a400766d1',\n      ],\n      [\n        'd7b8740f74a8fbaab1f683db8f45de26543a5490bca627087236912469a0b448',\n        'fa77968128d9c92ee1010f337ad4717eff15db5ed3c049b3411e0315eaa4593b',\n      ],\n      [\n        '32d31c222f8f6f0ef86f7c98d3a3335ead5bcd32abdd94289fe4d3091aa824bf',\n        '5f3032f5892156e39ccd3d7915b9e1da2e6dac9e6f26e961118d14b8462e1661',\n      ],\n      [\n        '7461f371914ab32671045a155d9831ea8793d77cd59592c4340f86cbc18347b5',\n        '8ec0ba238b96bec0cbdddcae0aa442542eee1ff50c986ea6b39847b3cc092ff6',\n      ],\n      [\n        'ee079adb1df1860074356a25aa38206a6d716b2c3e67453d287698bad7b2b2d6',\n        '8dc2412aafe3be5c4c5f37e0ecc5f9f6a446989af04c4e25ebaac479ec1c8c1e',\n      ],\n      [\n        '16ec93e447ec83f0467b18302ee620f7e65de331874c9dc72bfd8616ba9da6b5',\n        '5e4631150e62fb40d0e8c2a7ca5804a39d58186a50e497139626778e25b0674d',\n      ],\n      [\n        'eaa5f980c245f6f038978290afa70b6bd8855897f98b6aa485b96065d537bd99',\n        'f65f5d3e292c2e0819a528391c994624d784869d7e6ea67fb18041024edc07dc',\n      ],\n      [\n        '78c9407544ac132692ee1910a02439958ae04877151342ea96c4b6b35a49f51',\n        'f3e0319169eb9b85d5404795539a5e68fa1fbd583c064d2462b675f194a3ddb4',\n      ],\n      [\n        '494f4be219a1a77016dcd838431aea0001cdc8ae7a6fc688726578d9702857a5',\n        '42242a969283a5f339ba7f075e36ba2af925ce30d767ed6e55f4b031880d562c',\n      ],\n      [\n        'a598a8030da6d86c6bc7f2f5144ea549d28211ea58faa70ebf4c1e665c1fe9b5',\n        '204b5d6f84822c307e4b4a7140737aec23fc63b65b35f86a10026dbd2d864e6b',\n      ],\n      [\n        'c41916365abb2b5d09192f5f2dbeafec208f020f12570a184dbadc3e58595997',\n        '4f14351d0087efa49d245b328984989d5caf9450f34bfc0ed16e96b58fa9913',\n      ],\n      [\n        '841d6063a586fa475a724604da03bc5b92a2e0d2e0a36acfe4c73a5514742881',\n        '73867f59c0659e81904f9a1c7543698e62562d6744c169ce7a36de01a8d6154',\n      ],\n      [\n        '5e95bb399a6971d376026947f89bde2f282b33810928be4ded112ac4d70e20d5',\n        '39f23f366809085beebfc71181313775a99c9aed7d8ba38b161384c746012865',\n      ],\n      [\n        '36e4641a53948fd476c39f8a99fd974e5ec07564b5315d8bf99471bca0ef2f66',\n        'd2424b1b1abe4eb8164227b085c9aa9456ea13493fd563e06fd51cf5694c78fc',\n      ],\n      [\n        '336581ea7bfbbb290c191a2f507a41cf5643842170e914faeab27c2c579f726',\n        'ead12168595fe1be99252129b6e56b3391f7ab1410cd1e0ef3dcdcabd2fda224',\n      ],\n      [\n        '8ab89816dadfd6b6a1f2634fcf00ec8403781025ed6890c4849742706bd43ede',\n        '6fdcef09f2f6d0a044e654aef624136f503d459c3e89845858a47a9129cdd24e',\n      ],\n      [\n        '1e33f1a746c9c5778133344d9299fcaa20b0938e8acff2544bb40284b8c5fb94',\n        '60660257dd11b3aa9c8ed618d24edff2306d320f1d03010e33a7d2057f3b3b6',\n      ],\n      [\n        '85b7c1dcb3cec1b7ee7f30ded79dd20a0ed1f4cc18cbcfcfa410361fd8f08f31',\n        '3d98a9cdd026dd43f39048f25a8847f4fcafad1895d7a633c6fed3c35e999511',\n      ],\n      [\n        '29df9fbd8d9e46509275f4b125d6d45d7fbe9a3b878a7af872a2800661ac5f51',\n        'b4c4fe99c775a606e2d8862179139ffda61dc861c019e55cd2876eb2a27d84b',\n      ],\n      [\n        'a0b1cae06b0a847a3fea6e671aaf8adfdfe58ca2f768105c8082b2e449fce252',\n        'ae434102edde0958ec4b19d917a6a28e6b72da1834aff0e650f049503a296cf2',\n      ],\n      [\n        '4e8ceafb9b3e9a136dc7ff67e840295b499dfb3b2133e4ba113f2e4c0e121e5',\n        'cf2174118c8b6d7a4b48f6d534ce5c79422c086a63460502b827ce62a326683c',\n      ],\n      [\n        'd24a44e047e19b6f5afb81c7ca2f69080a5076689a010919f42725c2b789a33b',\n        '6fb8d5591b466f8fc63db50f1c0f1c69013f996887b8244d2cdec417afea8fa3',\n      ],\n      [\n        'ea01606a7a6c9cdd249fdfcfacb99584001edd28abbab77b5104e98e8e3b35d4',\n        '322af4908c7312b0cfbfe369f7a7b3cdb7d4494bc2823700cfd652188a3ea98d',\n      ],\n      [\n        'af8addbf2b661c8a6c6328655eb96651252007d8c5ea31be4ad196de8ce2131f',\n        '6749e67c029b85f52a034eafd096836b2520818680e26ac8f3dfbcdb71749700',\n      ],\n      [\n        'e3ae1974566ca06cc516d47e0fb165a674a3dabcfca15e722f0e3450f45889',\n        '2aeabe7e4531510116217f07bf4d07300de97e4874f81f533420a72eeb0bd6a4',\n      ],\n      [\n        '591ee355313d99721cf6993ffed1e3e301993ff3ed258802075ea8ced397e246',\n        'b0ea558a113c30bea60fc4775460c7901ff0b053d25ca2bdeee98f1a4be5d196',\n      ],\n      [\n        '11396d55fda54c49f19aa97318d8da61fa8584e47b084945077cf03255b52984',\n        '998c74a8cd45ac01289d5833a7beb4744ff536b01b257be4c5767bea93ea57a4',\n      ],\n      [\n        '3c5d2a1ba39c5a1790000738c9e0c40b8dcdfd5468754b6405540157e017aa7a',\n        'b2284279995a34e2f9d4de7396fc18b80f9b8b9fdd270f6661f79ca4c81bd257',\n      ],\n      [\n        'cc8704b8a60a0defa3a99a7299f2e9c3fbc395afb04ac078425ef8a1793cc030',\n        'bdd46039feed17881d1e0862db347f8cf395b74fc4bcdc4e940b74e3ac1f1b13',\n      ],\n      [\n        'c533e4f7ea8555aacd9777ac5cad29b97dd4defccc53ee7ea204119b2889b197',\n        '6f0a256bc5efdf429a2fb6242f1a43a2d9b925bb4a4b3a26bb8e0f45eb596096',\n      ],\n      [\n        'c14f8f2ccb27d6f109f6d08d03cc96a69ba8c34eec07bbcf566d48e33da6593',\n        'c359d6923bb398f7fd4473e16fe1c28475b740dd098075e6c0e8649113dc3a38',\n      ],\n      [\n        'a6cbc3046bc6a450bac24789fa17115a4c9739ed75f8f21ce441f72e0b90e6ef',\n        '21ae7f4680e889bb130619e2c0f95a360ceb573c70603139862afd617fa9b9f',\n      ],\n      [\n        '347d6d9a02c48927ebfb86c1359b1caf130a3c0267d11ce6344b39f99d43cc38',\n        '60ea7f61a353524d1c987f6ecec92f086d565ab687870cb12689ff1e31c74448',\n      ],\n      [\n        'da6545d2181db8d983f7dcb375ef5866d47c67b1bf31c8cf855ef7437b72656a',\n        '49b96715ab6878a79e78f07ce5680c5d6673051b4935bd897fea824b77dc208a',\n      ],\n      [\n        'c40747cc9d012cb1a13b8148309c6de7ec25d6945d657146b9d5994b8feb1111',\n        '5ca560753be2a12fc6de6caf2cb489565db936156b9514e1bb5e83037e0fa2d4',\n      ],\n      [\n        '4e42c8ec82c99798ccf3a610be870e78338c7f713348bd34c8203ef4037f3502',\n        '7571d74ee5e0fb92a7a8b33a07783341a5492144cc54bcc40a94473693606437',\n      ],\n      [\n        '3775ab7089bc6af823aba2e1af70b236d251cadb0c86743287522a1b3b0dedea',\n        'be52d107bcfa09d8bcb9736a828cfa7fac8db17bf7a76a2c42ad961409018cf7',\n      ],\n      [\n        'cee31cbf7e34ec379d94fb814d3d775ad954595d1314ba8846959e3e82f74e26',\n        '8fd64a14c06b589c26b947ae2bcf6bfa0149ef0be14ed4d80f448a01c43b1c6d',\n      ],\n      [\n        'b4f9eaea09b6917619f6ea6a4eb5464efddb58fd45b1ebefcdc1a01d08b47986',\n        '39e5c9925b5a54b07433a4f18c61726f8bb131c012ca542eb24a8ac07200682a',\n      ],\n      [\n        'd4263dfc3d2df923a0179a48966d30ce84e2515afc3dccc1b77907792ebcc60e',\n        '62dfaf07a0f78feb30e30d6295853ce189e127760ad6cf7fae164e122a208d54',\n      ],\n      [\n        '48457524820fa65a4f8d35eb6930857c0032acc0a4a2de422233eeda897612c4',\n        '25a748ab367979d98733c38a1fa1c2e7dc6cc07db2d60a9ae7a76aaa49bd0f77',\n      ],\n      [\n        'dfeeef1881101f2cb11644f3a2afdfc2045e19919152923f367a1767c11cceda',\n        'ecfb7056cf1de042f9420bab396793c0c390bde74b4bbdff16a83ae09a9a7517',\n      ],\n      [\n        '6d7ef6b17543f8373c573f44e1f389835d89bcbc6062ced36c82df83b8fae859',\n        'cd450ec335438986dfefa10c57fea9bcc521a0959b2d80bbf74b190dca712d10',\n      ],\n      [\n        'e75605d59102a5a2684500d3b991f2e3f3c88b93225547035af25af66e04541f',\n        'f5c54754a8f71ee540b9b48728473e314f729ac5308b06938360990e2bfad125',\n      ],\n      [\n        'eb98660f4c4dfaa06a2be453d5020bc99a0c2e60abe388457dd43fefb1ed620c',\n        '6cb9a8876d9cb8520609af3add26cd20a0a7cd8a9411131ce85f44100099223e',\n      ],\n      [\n        '13e87b027d8514d35939f2e6892b19922154596941888336dc3563e3b8dba942',\n        'fef5a3c68059a6dec5d624114bf1e91aac2b9da568d6abeb2570d55646b8adf1',\n      ],\n      [\n        'ee163026e9fd6fe017c38f06a5be6fc125424b371ce2708e7bf4491691e5764a',\n        '1acb250f255dd61c43d94ccc670d0f58f49ae3fa15b96623e5430da0ad6c62b2',\n      ],\n      [\n        'b268f5ef9ad51e4d78de3a750c2dc89b1e626d43505867999932e5db33af3d80',\n        '5f310d4b3c99b9ebb19f77d41c1dee018cf0d34fd4191614003e945a1216e423',\n      ],\n      [\n        'ff07f3118a9df035e9fad85eb6c7bfe42b02f01ca99ceea3bf7ffdba93c4750d',\n        '438136d603e858a3a5c440c38eccbaddc1d2942114e2eddd4740d098ced1f0d8',\n      ],\n      [\n        '8d8b9855c7c052a34146fd20ffb658bea4b9f69e0d825ebec16e8c3ce2b526a1',\n        'cdb559eedc2d79f926baf44fb84ea4d44bcf50fee51d7ceb30e2e7f463036758',\n      ],\n      [\n        '52db0b5384dfbf05bfa9d472d7ae26dfe4b851ceca91b1eba54263180da32b63',\n        'c3b997d050ee5d423ebaf66a6db9f57b3180c902875679de924b69d84a7b375',\n      ],\n      [\n        'e62f9490d3d51da6395efd24e80919cc7d0f29c3f3fa48c6fff543becbd43352',\n        '6d89ad7ba4876b0b22c2ca280c682862f342c8591f1daf5170e07bfd9ccafa7d',\n      ],\n      [\n        '7f30ea2476b399b4957509c88f77d0191afa2ff5cb7b14fd6d8e7d65aaab1193',\n        'ca5ef7d4b231c94c3b15389a5f6311e9daff7bb67b103e9880ef4bff637acaec',\n      ],\n      [\n        '5098ff1e1d9f14fb46a210fada6c903fef0fb7b4a1dd1d9ac60a0361800b7a00',\n        '9731141d81fc8f8084d37c6e7542006b3ee1b40d60dfe5362a5b132fd17ddc0',\n      ],\n      [\n        '32b78c7de9ee512a72895be6b9cbefa6e2f3c4ccce445c96b9f2c81e2778ad58',\n        'ee1849f513df71e32efc3896ee28260c73bb80547ae2275ba497237794c8753c',\n      ],\n      [\n        'e2cb74fddc8e9fbcd076eef2a7c72b0ce37d50f08269dfc074b581550547a4f7',\n        'd3aa2ed71c9dd2247a62df062736eb0baddea9e36122d2be8641abcb005cc4a4',\n      ],\n      [\n        '8438447566d4d7bedadc299496ab357426009a35f235cb141be0d99cd10ae3a8',\n        'c4e1020916980a4da5d01ac5e6ad330734ef0d7906631c4f2390426b2edd791f',\n      ],\n      [\n        '4162d488b89402039b584c6fc6c308870587d9c46f660b878ab65c82c711d67e',\n        '67163e903236289f776f22c25fb8a3afc1732f2b84b4e95dbda47ae5a0852649',\n      ],\n      [\n        '3fad3fa84caf0f34f0f89bfd2dcf54fc175d767aec3e50684f3ba4a4bf5f683d',\n        'cd1bc7cb6cc407bb2f0ca647c718a730cf71872e7d0d2a53fa20efcdfe61826',\n      ],\n      [\n        '674f2600a3007a00568c1a7ce05d0816c1fb84bf1370798f1c69532faeb1a86b',\n        '299d21f9413f33b3edf43b257004580b70db57da0b182259e09eecc69e0d38a5',\n      ],\n      [\n        'd32f4da54ade74abb81b815ad1fb3b263d82d6c692714bcff87d29bd5ee9f08f',\n        'f9429e738b8e53b968e99016c059707782e14f4535359d582fc416910b3eea87',\n      ],\n      [\n        '30e4e670435385556e593657135845d36fbb6931f72b08cb1ed954f1e3ce3ff6',\n        '462f9bce619898638499350113bbc9b10a878d35da70740dc695a559eb88db7b',\n      ],\n      [\n        'be2062003c51cc3004682904330e4dee7f3dcd10b01e580bf1971b04d4cad297',\n        '62188bc49d61e5428573d48a74e1c655b1c61090905682a0d5558ed72dccb9bc',\n      ],\n      [\n        '93144423ace3451ed29e0fb9ac2af211cb6e84a601df5993c419859fff5df04a',\n        '7c10dfb164c3425f5c71a3f9d7992038f1065224f72bb9d1d902a6d13037b47c',\n      ],\n      [\n        'b015f8044f5fcbdcf21ca26d6c34fb8197829205c7b7d2a7cb66418c157b112c',\n        'ab8c1e086d04e813744a655b2df8d5f83b3cdc6faa3088c1d3aea1454e3a1d5f',\n      ],\n      [\n        'd5e9e1da649d97d89e4868117a465a3a4f8a18de57a140d36b3f2af341a21b52',\n        '4cb04437f391ed73111a13cc1d4dd0db1693465c2240480d8955e8592f27447a',\n      ],\n      [\n        'd3ae41047dd7ca065dbf8ed77b992439983005cd72e16d6f996a5316d36966bb',\n        'bd1aeb21ad22ebb22a10f0303417c6d964f8cdd7df0aca614b10dc14d125ac46',\n      ],\n      [\n        '463e2763d885f958fc66cdd22800f0a487197d0a82e377b49f80af87c897b065',\n        'bfefacdb0e5d0fd7df3a311a94de062b26b80c61fbc97508b79992671ef7ca7f',\n      ],\n      [\n        '7985fdfd127c0567c6f53ec1bb63ec3158e597c40bfe747c83cddfc910641917',\n        '603c12daf3d9862ef2b25fe1de289aed24ed291e0ec6708703a5bd567f32ed03',\n      ],\n      [\n        '74a1ad6b5f76e39db2dd249410eac7f99e74c59cb83d2d0ed5ff1543da7703e9',\n        'cc6157ef18c9c63cd6193d83631bbea0093e0968942e8c33d5737fd790e0db08',\n      ],\n      [\n        '30682a50703375f602d416664ba19b7fc9bab42c72747463a71d0896b22f6da3',\n        '553e04f6b018b4fa6c8f39e7f311d3176290d0e0f19ca73f17714d9977a22ff8',\n      ],\n      [\n        '9e2158f0d7c0d5f26c3791efefa79597654e7a2b2464f52b1ee6c1347769ef57',\n        '712fcdd1b9053f09003a3481fa7762e9ffd7c8ef35a38509e2fbf2629008373',\n      ],\n      [\n        '176e26989a43c9cfeba4029c202538c28172e566e3c4fce7322857f3be327d66',\n        'ed8cc9d04b29eb877d270b4878dc43c19aefd31f4eee09ee7b47834c1fa4b1c3',\n      ],\n      [\n        '75d46efea3771e6e68abb89a13ad747ecf1892393dfc4f1b7004788c50374da8',\n        '9852390a99507679fd0b86fd2b39a868d7efc22151346e1a3ca4726586a6bed8',\n      ],\n      [\n        '809a20c67d64900ffb698c4c825f6d5f2310fb0451c869345b7319f645605721',\n        '9e994980d9917e22b76b061927fa04143d096ccc54963e6a5ebfa5f3f8e286c1',\n      ],\n      [\n        '1b38903a43f7f114ed4500b4eac7083fdefece1cf29c63528d563446f972c180',\n        '4036edc931a60ae889353f77fd53de4a2708b26b6f5da72ad3394119daf408f9',\n      ],\n    ],\n  },\n};\n","'use strict';\n\nvar utils = exports;\nvar BN = require('bn.js');\nvar minAssert = require('minimalistic-assert');\nvar minUtils = require('minimalistic-crypto-utils');\n\nutils.assert = minAssert;\nutils.toArray = minUtils.toArray;\nutils.zero2 = minUtils.zero2;\nutils.toHex = minUtils.toHex;\nutils.encode = minUtils.encode;\n\n// Represent num in a w-NAF form\nfunction getNAF(num, w, bits) {\n  var naf = new Array(Math.max(num.bitLength(), bits) + 1);\n  var i;\n  for (i = 0; i < naf.length; i += 1) {\n    naf[i] = 0;\n  }\n\n  var ws = 1 << (w + 1);\n  var k = num.clone();\n\n  for (i = 0; i < naf.length; i++) {\n    var z;\n    var mod = k.andln(ws - 1);\n    if (k.isOdd()) {\n      if (mod > (ws >> 1) - 1)\n        z = (ws >> 1) - mod;\n      else\n        z = mod;\n      k.isubn(z);\n    } else {\n      z = 0;\n    }\n\n    naf[i] = z;\n    k.iushrn(1);\n  }\n\n  return naf;\n}\nutils.getNAF = getNAF;\n\n// Represent k1, k2 in a Joint Sparse Form\nfunction getJSF(k1, k2) {\n  var jsf = [\n    [],\n    [],\n  ];\n\n  k1 = k1.clone();\n  k2 = k2.clone();\n  var d1 = 0;\n  var d2 = 0;\n  var m8;\n  while (k1.cmpn(-d1) > 0 || k2.cmpn(-d2) > 0) {\n    // First phase\n    var m14 = (k1.andln(3) + d1) & 3;\n    var m24 = (k2.andln(3) + d2) & 3;\n    if (m14 === 3)\n      m14 = -1;\n    if (m24 === 3)\n      m24 = -1;\n    var u1;\n    if ((m14 & 1) === 0) {\n      u1 = 0;\n    } else {\n      m8 = (k1.andln(7) + d1) & 7;\n      if ((m8 === 3 || m8 === 5) && m24 === 2)\n        u1 = -m14;\n      else\n        u1 = m14;\n    }\n    jsf[0].push(u1);\n\n    var u2;\n    if ((m24 & 1) === 0) {\n      u2 = 0;\n    } else {\n      m8 = (k2.andln(7) + d2) & 7;\n      if ((m8 === 3 || m8 === 5) && m14 === 2)\n        u2 = -m24;\n      else\n        u2 = m24;\n    }\n    jsf[1].push(u2);\n\n    // Second phase\n    if (2 * d1 === u1 + 1)\n      d1 = 1 - d1;\n    if (2 * d2 === u2 + 1)\n      d2 = 1 - d2;\n    k1.iushrn(1);\n    k2.iushrn(1);\n  }\n\n  return jsf;\n}\nutils.getJSF = getJSF;\n\nfunction cachedProperty(obj, name, computer) {\n  var key = '_' + name;\n  obj.prototype[name] = function cachedProperty() {\n    return this[key] !== undefined ? this[key] :\n      this[key] = computer.call(this);\n  };\n}\nutils.cachedProperty = cachedProperty;\n\nfunction parseBytes(bytes) {\n  return typeof bytes === 'string' ? utils.toArray(bytes, 'hex') :\n    bytes;\n}\nutils.parseBytes = parseBytes;\n\nfunction intFromLE(bytes) {\n  return new BN(bytes, 'hex', 'le');\n}\nutils.intFromLE = intFromLE;\n\n","(function(root, factory) {\n    'use strict';\n    // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n    /* istanbul ignore next */\n    if (typeof define === 'function' && define.amd) {\n        define('error-stack-parser', ['stackframe'], factory);\n    } else if (typeof exports === 'object') {\n        module.exports = factory(require('stackframe'));\n    } else {\n        root.ErrorStackParser = factory(root.StackFrame);\n    }\n}(this, function ErrorStackParser(StackFrame) {\n    'use strict';\n\n    var FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\\S+\\:\\d+/;\n    var CHROME_IE_STACK_REGEXP = /^\\s*at .*(\\S+\\:\\d+|\\(native\\))/m;\n    var SAFARI_NATIVE_CODE_REGEXP = /^(eval@)?(\\[native code\\])?$/;\n\n    function _map(array, fn, thisArg) {\n        if (typeof Array.prototype.map === 'function') {\n            return array.map(fn, thisArg);\n        } else {\n            var output = new Array(array.length);\n            for (var i = 0; i < array.length; i++) {\n                output[i] = fn.call(thisArg, array[i]);\n            }\n            return output;\n        }\n    }\n\n    function _filter(array, fn, thisArg) {\n        if (typeof Array.prototype.filter === 'function') {\n            return array.filter(fn, thisArg);\n        } else {\n            var output = [];\n            for (var i = 0; i < array.length; i++) {\n                if (fn.call(thisArg, array[i])) {\n                    output.push(array[i]);\n                }\n            }\n            return output;\n        }\n    }\n\n    function _indexOf(array, target) {\n        if (typeof Array.prototype.indexOf === 'function') {\n            return array.indexOf(target);\n        } else {\n            for (var i = 0; i < array.length; i++) {\n                if (array[i] === target) {\n                    return i;\n                }\n            }\n            return -1;\n        }\n    }\n\n    return {\n        /**\n         * Given an Error object, extract the most information from it.\n         *\n         * @param {Error} error object\n         * @return {Array} of StackFrames\n         */\n        parse: function ErrorStackParser$$parse(error) {\n            if (typeof error.stacktrace !== 'undefined' || typeof error['opera#sourceloc'] !== 'undefined') {\n                return this.parseOpera(error);\n            } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) {\n                return this.parseV8OrIE(error);\n            } else if (error.stack) {\n                return this.parseFFOrSafari(error);\n            } else {\n                throw new Error('Cannot parse given Error object');\n            }\n        },\n\n        // Separate line and column numbers from a string of the form: (URI:Line:Column)\n        extractLocation: function ErrorStackParser$$extractLocation(urlLike) {\n            // Fail-fast but return locations like \"(native)\"\n            if (urlLike.indexOf(':') === -1) {\n                return [urlLike];\n            }\n\n            var regExp = /(.+?)(?:\\:(\\d+))?(?:\\:(\\d+))?$/;\n            var parts = regExp.exec(urlLike.replace(/[\\(\\)]/g, ''));\n            return [parts[1], parts[2] || undefined, parts[3] || undefined];\n        },\n\n        parseV8OrIE: function ErrorStackParser$$parseV8OrIE(error) {\n            var filtered = _filter(error.stack.split('\\n'), function(line) {\n                return !!line.match(CHROME_IE_STACK_REGEXP);\n            }, this);\n\n            return _map(filtered, function(line) {\n                if (line.indexOf('(eval ') > -1) {\n                    // Throw away eval information until we implement stacktrace.js/stackframe#8\n                    line = line.replace(/eval code/g, 'eval').replace(/(\\(eval at [^\\()]*)|(\\)\\,.*$)/g, '');\n                }\n                var tokens = line.replace(/^\\s+/, '').replace(/\\(eval code/g, '(').split(/\\s+/).slice(1);\n                var locationParts = this.extractLocation(tokens.pop());\n                var functionName = tokens.join(' ') || undefined;\n                var fileName = _indexOf(['eval', '<anonymous>'], locationParts[0]) > -1 ? undefined : locationParts[0];\n\n                return new StackFrame(functionName, undefined, fileName, locationParts[1], locationParts[2], line);\n            }, this);\n        },\n\n        parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) {\n            var filtered = _filter(error.stack.split('\\n'), function(line) {\n                return !line.match(SAFARI_NATIVE_CODE_REGEXP);\n            }, this);\n\n            return _map(filtered, function(line) {\n                // Throw away eval information until we implement stacktrace.js/stackframe#8\n                if (line.indexOf(' > eval') > -1) {\n                    line = line.replace(/ line (\\d+)(?: > eval line \\d+)* > eval\\:\\d+\\:\\d+/g, ':$1');\n                }\n\n                if (line.indexOf('@') === -1 && line.indexOf(':') === -1) {\n                    // Safari eval frames only have function names and nothing else\n                    return new StackFrame(line);\n                } else {\n                    var tokens = line.split('@');\n                    var locationParts = this.extractLocation(tokens.pop());\n                    var functionName = tokens.join('@') || undefined;\n                    return new StackFrame(functionName,\n                        undefined,\n                        locationParts[0],\n                        locationParts[1],\n                        locationParts[2],\n                        line);\n                }\n            }, this);\n        },\n\n        parseOpera: function ErrorStackParser$$parseOpera(e) {\n            if (!e.stacktrace || (e.message.indexOf('\\n') > -1 &&\n                e.message.split('\\n').length > e.stacktrace.split('\\n').length)) {\n                return this.parseOpera9(e);\n            } else if (!e.stack) {\n                return this.parseOpera10(e);\n            } else {\n                return this.parseOpera11(e);\n            }\n        },\n\n        parseOpera9: function ErrorStackParser$$parseOpera9(e) {\n            var lineRE = /Line (\\d+).*script (?:in )?(\\S+)/i;\n            var lines = e.message.split('\\n');\n            var result = [];\n\n            for (var i = 2, len = lines.length; i < len; i += 2) {\n                var match = lineRE.exec(lines[i]);\n                if (match) {\n                    result.push(new StackFrame(undefined, undefined, match[2], match[1], undefined, lines[i]));\n                }\n            }\n\n            return result;\n        },\n\n        parseOpera10: function ErrorStackParser$$parseOpera10(e) {\n            var lineRE = /Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i;\n            var lines = e.stacktrace.split('\\n');\n            var result = [];\n\n            for (var i = 0, len = lines.length; i < len; i += 2) {\n                var match = lineRE.exec(lines[i]);\n                if (match) {\n                    result.push(\n                        new StackFrame(\n                            match[3] || undefined,\n                            undefined,\n                            match[2],\n                            match[1],\n                            undefined,\n                            lines[i]\n                        )\n                    );\n                }\n            }\n\n            return result;\n        },\n\n        // Opera 10.65+ Error.stack very similar to FF/Safari\n        parseOpera11: function ErrorStackParser$$parseOpera11(error) {\n            var filtered = _filter(error.stack.split('\\n'), function(line) {\n                return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) && !line.match(/^Error created at/);\n            }, this);\n\n            return _map(filtered, function(line) {\n                var tokens = line.split('@');\n                var locationParts = this.extractLocation(tokens.pop());\n                var functionCall = (tokens.shift() || '');\n                var functionName = functionCall\n                        .replace(/<anonymous function(: (\\w+))?>/, '$2')\n                        .replace(/\\([^\\)]*\\)/g, '') || undefined;\n                var argsRaw;\n                if (functionCall.match(/\\(([^\\)]*)\\)/)) {\n                    argsRaw = functionCall.replace(/^[^\\(]+\\(([^\\)]*)\\)$/, '$1');\n                }\n                var args = (argsRaw === undefined || argsRaw === '[arguments not available]') ?\n                    undefined : argsRaw.split(',');\n                return new StackFrame(\n                    functionName,\n                    args,\n                    locationParts[0],\n                    locationParts[1],\n                    locationParts[2],\n                    line);\n            }, this);\n        }\n    };\n}));\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\nvar objectCreate = Object.create || objectCreatePolyfill\nvar objectKeys = Object.keys || objectKeysPolyfill\nvar bind = Function.prototype.bind || functionBindPolyfill\n\nfunction EventEmitter() {\n  if (!this._events || !Object.prototype.hasOwnProperty.call(this, '_events')) {\n    this._events = objectCreate(null);\n    this._eventsCount = 0;\n  }\n\n  this._maxListeners = this._maxListeners || undefined;\n}\nmodule.exports = EventEmitter;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\n\nvar hasDefineProperty;\ntry {\n  var o = {};\n  if (Object.defineProperty) Object.defineProperty(o, 'x', { value: 0 });\n  hasDefineProperty = o.x === 0;\n} catch (err) { hasDefineProperty = false }\nif (hasDefineProperty) {\n  Object.defineProperty(EventEmitter, 'defaultMaxListeners', {\n    enumerable: true,\n    get: function() {\n      return defaultMaxListeners;\n    },\n    set: function(arg) {\n      // check whether the input is a positive number (whose value is zero or\n      // greater and not a NaN).\n      if (typeof arg !== 'number' || arg < 0 || arg !== arg)\n        throw new TypeError('\"defaultMaxListeners\" must be a positive number');\n      defaultMaxListeners = arg;\n    }\n  });\n} else {\n  EventEmitter.defaultMaxListeners = defaultMaxListeners;\n}\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n  if (typeof n !== 'number' || n < 0 || isNaN(n))\n    throw new TypeError('\"n\" argument must be a positive number');\n  this._maxListeners = n;\n  return this;\n};\n\nfunction $getMaxListeners(that) {\n  if (that._maxListeners === undefined)\n    return EventEmitter.defaultMaxListeners;\n  return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n  return $getMaxListeners(this);\n};\n\n// These standalone emit* functions are used to optimize calling of event\n// handlers for fast cases because emit() itself often has a variable number of\n// arguments and can be deoptimized because of that. These functions always have\n// the same number of arguments and thus do not get deoptimized, so the code\n// inside them can execute faster.\nfunction emitNone(handler, isFn, self) {\n  if (isFn)\n    handler.call(self);\n  else {\n    var len = handler.length;\n    var listeners = arrayClone(handler, len);\n    for (var i = 0; i < len; ++i)\n      listeners[i].call(self);\n  }\n}\nfunction emitOne(handler, isFn, self, arg1) {\n  if (isFn)\n    handler.call(self, arg1);\n  else {\n    var len = handler.length;\n    var listeners = arrayClone(handler, len);\n    for (var i = 0; i < len; ++i)\n      listeners[i].call(self, arg1);\n  }\n}\nfunction emitTwo(handler, isFn, self, arg1, arg2) {\n  if (isFn)\n    handler.call(self, arg1, arg2);\n  else {\n    var len = handler.length;\n    var listeners = arrayClone(handler, len);\n    for (var i = 0; i < len; ++i)\n      listeners[i].call(self, arg1, arg2);\n  }\n}\nfunction emitThree(handler, isFn, self, arg1, arg2, arg3) {\n  if (isFn)\n    handler.call(self, arg1, arg2, arg3);\n  else {\n    var len = handler.length;\n    var listeners = arrayClone(handler, len);\n    for (var i = 0; i < len; ++i)\n      listeners[i].call(self, arg1, arg2, arg3);\n  }\n}\n\nfunction emitMany(handler, isFn, self, args) {\n  if (isFn)\n    handler.apply(self, args);\n  else {\n    var len = handler.length;\n    var listeners = arrayClone(handler, len);\n    for (var i = 0; i < len; ++i)\n      listeners[i].apply(self, args);\n  }\n}\n\nEventEmitter.prototype.emit = function emit(type) {\n  var er, handler, len, args, i, events;\n  var doError = (type === 'error');\n\n  events = this._events;\n  if (events)\n    doError = (doError && events.error == null);\n  else if (!doError)\n    return false;\n\n  // If there is no 'error' event listener then throw.\n  if (doError) {\n    if (arguments.length > 1)\n      er = arguments[1];\n    if (er instanceof Error) {\n      throw er; // Unhandled 'error' event\n    } else {\n      // At least give some kind of context to the user\n      var err = new Error('Unhandled \"error\" event. (' + er + ')');\n      err.context = er;\n      throw err;\n    }\n    return false;\n  }\n\n  handler = events[type];\n\n  if (!handler)\n    return false;\n\n  var isFn = typeof handler === 'function';\n  len = arguments.length;\n  switch (len) {\n      // fast cases\n    case 1:\n      emitNone(handler, isFn, this);\n      break;\n    case 2:\n      emitOne(handler, isFn, this, arguments[1]);\n      break;\n    case 3:\n      emitTwo(handler, isFn, this, arguments[1], arguments[2]);\n      break;\n    case 4:\n      emitThree(handler, isFn, this, arguments[1], arguments[2], arguments[3]);\n      break;\n      // slower\n    default:\n      args = new Array(len - 1);\n      for (i = 1; i < len; i++)\n        args[i - 1] = arguments[i];\n      emitMany(handler, isFn, this, args);\n  }\n\n  return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n  var m;\n  var events;\n  var existing;\n\n  if (typeof listener !== 'function')\n    throw new TypeError('\"listener\" argument must be a function');\n\n  events = target._events;\n  if (!events) {\n    events = target._events = objectCreate(null);\n    target._eventsCount = 0;\n  } else {\n    // To avoid recursion in the case that type === \"newListener\"! Before\n    // adding it to the listeners, first emit \"newListener\".\n    if (events.newListener) {\n      target.emit('newListener', type,\n          listener.listener ? listener.listener : listener);\n\n      // Re-assign `events` because a newListener handler could have caused the\n      // this._events to be assigned to a new object\n      events = target._events;\n    }\n    existing = events[type];\n  }\n\n  if (!existing) {\n    // Optimize the case of one listener. Don't need the extra array object.\n    existing = events[type] = listener;\n    ++target._eventsCount;\n  } else {\n    if (typeof existing === 'function') {\n      // Adding the second element, need to change to array.\n      existing = events[type] =\n          prepend ? [listener, existing] : [existing, listener];\n    } else {\n      // If we've already got an array, just append.\n      if (prepend) {\n        existing.unshift(listener);\n      } else {\n        existing.push(listener);\n      }\n    }\n\n    // Check for listener leak\n    if (!existing.warned) {\n      m = $getMaxListeners(target);\n      if (m && m > 0 && existing.length > m) {\n        existing.warned = true;\n        var w = new Error('Possible EventEmitter memory leak detected. ' +\n            existing.length + ' \"' + String(type) + '\" listeners ' +\n            'added. Use emitter.setMaxListeners() to ' +\n            'increase limit.');\n        w.name = 'MaxListenersExceededWarning';\n        w.emitter = target;\n        w.type = type;\n        w.count = existing.length;\n        if (typeof console === 'object' && console.warn) {\n          console.warn('%s: %s', w.name, w.message);\n        }\n      }\n    }\n  }\n\n  return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n  return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n    function prependListener(type, listener) {\n      return _addListener(this, type, listener, true);\n    };\n\nfunction onceWrapper() {\n  if (!this.fired) {\n    this.target.removeListener(this.type, this.wrapFn);\n    this.fired = true;\n    switch (arguments.length) {\n      case 0:\n        return this.listener.call(this.target);\n      case 1:\n        return this.listener.call(this.target, arguments[0]);\n      case 2:\n        return this.listener.call(this.target, arguments[0], arguments[1]);\n      case 3:\n        return this.listener.call(this.target, arguments[0], arguments[1],\n            arguments[2]);\n      default:\n        var args = new Array(arguments.length);\n        for (var i = 0; i < args.length; ++i)\n          args[i] = arguments[i];\n        this.listener.apply(this.target, args);\n    }\n  }\n}\n\nfunction _onceWrap(target, type, listener) {\n  var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n  var wrapped = bind.call(onceWrapper, state);\n  wrapped.listener = listener;\n  state.wrapFn = wrapped;\n  return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n  if (typeof listener !== 'function')\n    throw new TypeError('\"listener\" argument must be a function');\n  this.on(type, _onceWrap(this, type, listener));\n  return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n    function prependOnceListener(type, listener) {\n      if (typeof listener !== 'function')\n        throw new TypeError('\"listener\" argument must be a function');\n      this.prependListener(type, _onceWrap(this, type, listener));\n      return this;\n    };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener =\n    function removeListener(type, listener) {\n      var list, events, position, i, originalListener;\n\n      if (typeof listener !== 'function')\n        throw new TypeError('\"listener\" argument must be a function');\n\n      events = this._events;\n      if (!events)\n        return this;\n\n      list = events[type];\n      if (!list)\n        return this;\n\n      if (list === listener || list.listener === listener) {\n        if (--this._eventsCount === 0)\n          this._events = objectCreate(null);\n        else {\n          delete events[type];\n          if (events.removeListener)\n            this.emit('removeListener', type, list.listener || listener);\n        }\n      } else if (typeof list !== 'function') {\n        position = -1;\n\n        for (i = list.length - 1; i >= 0; i--) {\n          if (list[i] === listener || list[i].listener === listener) {\n            originalListener = list[i].listener;\n            position = i;\n            break;\n          }\n        }\n\n        if (position < 0)\n          return this;\n\n        if (position === 0)\n          list.shift();\n        else\n          spliceOne(list, position);\n\n        if (list.length === 1)\n          events[type] = list[0];\n\n        if (events.removeListener)\n          this.emit('removeListener', type, originalListener || listener);\n      }\n\n      return this;\n    };\n\nEventEmitter.prototype.removeAllListeners =\n    function removeAllListeners(type) {\n      var listeners, events, i;\n\n      events = this._events;\n      if (!events)\n        return this;\n\n      // not listening for removeListener, no need to emit\n      if (!events.removeListener) {\n        if (arguments.length === 0) {\n          this._events = objectCreate(null);\n          this._eventsCount = 0;\n        } else if (events[type]) {\n          if (--this._eventsCount === 0)\n            this._events = objectCreate(null);\n          else\n            delete events[type];\n        }\n        return this;\n      }\n\n      // emit removeListener for all listeners on all events\n      if (arguments.length === 0) {\n        var keys = objectKeys(events);\n        var key;\n        for (i = 0; i < keys.length; ++i) {\n          key = keys[i];\n          if (key === 'removeListener') continue;\n          this.removeAllListeners(key);\n        }\n        this.removeAllListeners('removeListener');\n        this._events = objectCreate(null);\n        this._eventsCount = 0;\n        return this;\n      }\n\n      listeners = events[type];\n\n      if (typeof listeners === 'function') {\n        this.removeListener(type, listeners);\n      } else if (listeners) {\n        // LIFO order\n        for (i = listeners.length - 1; i >= 0; i--) {\n          this.removeListener(type, listeners[i]);\n        }\n      }\n\n      return this;\n    };\n\nfunction _listeners(target, type, unwrap) {\n  var events = target._events;\n\n  if (!events)\n    return [];\n\n  var evlistener = events[type];\n  if (!evlistener)\n    return [];\n\n  if (typeof evlistener === 'function')\n    return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n  return unwrap ? unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n  return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n  return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n  if (typeof emitter.listenerCount === 'function') {\n    return emitter.listenerCount(type);\n  } else {\n    return listenerCount.call(emitter, type);\n  }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n  var events = this._events;\n\n  if (events) {\n    var evlistener = events[type];\n\n    if (typeof evlistener === 'function') {\n      return 1;\n    } else if (evlistener) {\n      return evlistener.length;\n    }\n  }\n\n  return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n  return this._eventsCount > 0 ? Reflect.ownKeys(this._events) : [];\n};\n\n// About 1.5x faster than the two-arg version of Array#splice().\nfunction spliceOne(list, index) {\n  for (var i = index, k = i + 1, n = list.length; k < n; i += 1, k += 1)\n    list[i] = list[k];\n  list.pop();\n}\n\nfunction arrayClone(arr, n) {\n  var copy = new Array(n);\n  for (var i = 0; i < n; ++i)\n    copy[i] = arr[i];\n  return copy;\n}\n\nfunction unwrapListeners(arr) {\n  var ret = new Array(arr.length);\n  for (var i = 0; i < ret.length; ++i) {\n    ret[i] = arr[i].listener || arr[i];\n  }\n  return ret;\n}\n\nfunction objectCreatePolyfill(proto) {\n  var F = function() {};\n  F.prototype = proto;\n  return new F;\n}\nfunction objectKeysPolyfill(obj) {\n  var keys = [];\n  for (var k in obj) if (Object.prototype.hasOwnProperty.call(obj, k)) {\n    keys.push(k);\n  }\n  return k;\n}\nfunction functionBindPolyfill(context) {\n  var fn = this;\n  return function () {\n    return fn.apply(context, arguments);\n  };\n}\n","var Buffer = require('safe-buffer').Buffer\nvar MD5 = require('md5.js')\n\n/* eslint-disable camelcase */\nfunction EVP_BytesToKey (password, salt, keyBits, ivLen) {\n  if (!Buffer.isBuffer(password)) password = Buffer.from(password, 'binary')\n  if (salt) {\n    if (!Buffer.isBuffer(salt)) salt = Buffer.from(salt, 'binary')\n    if (salt.length !== 8) throw new RangeError('salt should be Buffer with 8 byte length')\n  }\n\n  var keyLen = keyBits / 8\n  var key = Buffer.alloc(keyLen)\n  var iv = Buffer.alloc(ivLen || 0)\n  var tmp = Buffer.alloc(0)\n\n  while (keyLen > 0 || ivLen > 0) {\n    var hash = new MD5()\n    hash.update(tmp)\n    hash.update(password)\n    if (salt) hash.update(salt)\n    tmp = hash.digest()\n\n    var used = 0\n\n    if (keyLen > 0) {\n      var keyStart = key.length - keyLen\n      used = Math.min(keyLen, tmp.length)\n      tmp.copy(key, keyStart, 0, used)\n      keyLen -= used\n    }\n\n    if (used < tmp.length && ivLen > 0) {\n      var ivStart = iv.length - ivLen\n      var length = Math.min(ivLen, tmp.length - used)\n      tmp.copy(iv, ivStart, used, used + length)\n      ivLen -= length\n    }\n  }\n\n  tmp.fill(0)\n  return { key: key, iv: iv }\n}\n\nmodule.exports = EVP_BytesToKey\n","(function(a,b){if(\"function\"==typeof define&&define.amd)define([],b);else if(\"undefined\"!=typeof exports)b();else{b(),a.FileSaver={exports:{}}.exports}})(this,function(){\"use strict\";function b(a,b){return\"undefined\"==typeof b?b={autoBom:!1}:\"object\"!=typeof b&&(console.warn(\"Deprecated: Expected third argument to be a object\"),b={autoBom:!b}),b.autoBom&&/^\\s*(?:text\\/\\S*|application\\/xml|\\S*\\/\\S*\\+xml)\\s*;.*charset\\s*=\\s*utf-8/i.test(a.type)?new Blob([\"\\uFEFF\",a],{type:a.type}):a}function c(a,b,c){var d=new XMLHttpRequest;d.open(\"GET\",a),d.responseType=\"blob\",d.onload=function(){g(d.response,b,c)},d.onerror=function(){console.error(\"could not download file\")},d.send()}function d(a){var b=new XMLHttpRequest;b.open(\"HEAD\",a,!1);try{b.send()}catch(a){}return 200<=b.status&&299>=b.status}function e(a){try{a.dispatchEvent(new MouseEvent(\"click\"))}catch(c){var b=document.createEvent(\"MouseEvents\");b.initMouseEvent(\"click\",!0,!0,window,0,0,0,80,20,!1,!1,!1,!1,0,null),a.dispatchEvent(b)}}var f=\"object\"==typeof window&&window.window===window?window:\"object\"==typeof self&&self.self===self?self:\"object\"==typeof global&&global.global===global?global:void 0,a=f.navigator&&/Macintosh/.test(navigator.userAgent)&&/AppleWebKit/.test(navigator.userAgent)&&!/Safari/.test(navigator.userAgent),g=f.saveAs||(\"object\"!=typeof window||window!==f?function(){}:\"download\"in HTMLAnchorElement.prototype&&!a?function(b,g,h){var i=f.URL||f.webkitURL,j=document.createElement(\"a\");g=g||b.name||\"download\",j.download=g,j.rel=\"noopener\",\"string\"==typeof b?(j.href=b,j.origin===location.origin?e(j):d(j.href)?c(b,g,h):e(j,j.target=\"_blank\")):(j.href=i.createObjectURL(b),setTimeout(function(){i.revokeObjectURL(j.href)},4E4),setTimeout(function(){e(j)},0))}:\"msSaveOrOpenBlob\"in navigator?function(f,g,h){if(g=g||f.name||\"download\",\"string\"!=typeof f)navigator.msSaveOrOpenBlob(b(f,h),g);else if(d(f))c(f,g,h);else{var i=document.createElement(\"a\");i.href=f,i.target=\"_blank\",setTimeout(function(){e(i)})}}:function(b,d,e,g){if(g=g||open(\"\",\"_blank\"),g&&(g.document.title=g.document.body.innerText=\"downloading...\"),\"string\"==typeof b)return c(b,d,e);var h=\"application/octet-stream\"===b.type,i=/constructor/i.test(f.HTMLElement)||f.safari,j=/CriOS\\/[\\d]+/.test(navigator.userAgent);if((j||h&&i||a)&&\"undefined\"!=typeof FileReader){var k=new FileReader;k.onloadend=function(){var a=k.result;a=j?a:a.replace(/^data:[^;]*;/,\"data:attachment/file;\"),g?g.location.href=a:location=a,g=null},k.readAsDataURL(b)}else{var l=f.URL||f.webkitURL,m=l.createObjectURL(b);g?g.location=m:location.href=m,g=null,setTimeout(function(){l.revokeObjectURL(m)},4E4)}});f.saveAs=g.saveAs=g,\"undefined\"!=typeof module&&(module.exports=g)});\n\n//# sourceMappingURL=FileSaver.min.js.map","(function(f){if(typeof exports===\"object\"&&typeof module!==\"undefined\"){module.exports=f()}else if(typeof define===\"function\"&&define.amd){define([],f)}else{var g;if(typeof window!==\"undefined\"){g=window}else if(typeof global!==\"undefined\"){g=global}else if(typeof self!==\"undefined\"){g=self}else{g=this}g.libphonenumber = f()}})(function(){var define,module,exports;return (function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c=\"function\"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error(\"Cannot find module '\"+i+\"'\");throw a.code=\"MODULE_NOT_FOUND\",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u=\"function\"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()({1:[function(require,module,exports){\n(function (global){(function (){\n/*\n\n Copyright The Closure Library Authors.\n SPDX-License-Identifier: Apache-2.0\n*/\nvar $jscomp=$jscomp||{};$jscomp.scope={};$jscomp.createTemplateTagFirstArg=function(a){return a.raw=a};$jscomp.createTemplateTagFirstArgWithRaw=function(a,b){a.raw=b;return a};$jscomp.arrayIteratorImpl=function(a){var b=0;return function(){return b<a.length?{done:!1,value:a[b++]}:{done:!0}}};$jscomp.arrayIterator=function(a){return{next:$jscomp.arrayIteratorImpl(a)}};$jscomp.makeIterator=function(a){var b=\"undefined\"!=typeof Symbol&&Symbol.iterator&&a[Symbol.iterator];return b?b.call(a):$jscomp.arrayIterator(a)};\n$jscomp.arrayFromIterator=function(a){for(var b,c=[];!(b=a.next()).done;)c.push(b.value);return c};$jscomp.arrayFromIterable=function(a){return a instanceof Array?a:$jscomp.arrayFromIterator($jscomp.makeIterator(a))};$jscomp.checkStringArgs=function(a,b,c){if(null==a)throw new TypeError(\"The 'this' value for String.prototype.\"+c+\" must not be null or undefined\");if(b instanceof RegExp)throw new TypeError(\"First argument to String.prototype.\"+c+\" must not be a regular expression\");return a+\"\"};\n$jscomp.ASSUME_ES5=!1;$jscomp.ASSUME_NO_NATIVE_MAP=!1;$jscomp.ASSUME_NO_NATIVE_SET=!1;$jscomp.SIMPLE_FROUND_POLYFILL=!1;$jscomp.ISOLATE_POLYFILLS=!1;$jscomp.FORCE_POLYFILL_PROMISE=!1;$jscomp.FORCE_POLYFILL_PROMISE_WHEN_NO_UNHANDLED_REJECTION=!1;$jscomp.defineProperty=$jscomp.ASSUME_ES5||\"function\"==typeof Object.defineProperties?Object.defineProperty:function(a,b,c){if(a==Array.prototype||a==Object.prototype)return a;a[b]=c.value;return a};\n$jscomp.getGlobal=function(a){a=[\"object\"==typeof globalThis&&globalThis,a,\"object\"==typeof window&&window,\"object\"==typeof self&&self,\"object\"==typeof global&&global];for(var b=0;b<a.length;++b){var c=a[b];if(c&&c.Math==Math)return c}throw Error(\"Cannot find global object\");};$jscomp.global=$jscomp.getGlobal(this);$jscomp.IS_SYMBOL_NATIVE=\"function\"===typeof Symbol&&\"symbol\"===typeof Symbol(\"x\");$jscomp.TRUST_ES6_POLYFILLS=!$jscomp.ISOLATE_POLYFILLS||$jscomp.IS_SYMBOL_NATIVE;$jscomp.polyfills={};\n$jscomp.propertyToPolyfillSymbol={};$jscomp.POLYFILL_PREFIX=\"$jscp$\";var $jscomp$lookupPolyfilledValue=function(a,b){var c=$jscomp.propertyToPolyfillSymbol[b];if(null==c)return a[b];c=a[c];return void 0!==c?c:a[b]};$jscomp.polyfill=function(a,b,c,d){b&&($jscomp.ISOLATE_POLYFILLS?$jscomp.polyfillIsolated(a,b,c,d):$jscomp.polyfillUnisolated(a,b,c,d))};\n$jscomp.polyfillUnisolated=function(a,b,c,d){c=$jscomp.global;a=a.split(\".\");for(d=0;d<a.length-1;d++){var e=a[d];if(!(e in c))return;c=c[e]}a=a[a.length-1];d=c[a];b=b(d);b!=d&&null!=b&&$jscomp.defineProperty(c,a,{configurable:!0,writable:!0,value:b})};\n$jscomp.polyfillIsolated=function(a,b,c,d){var e=a.split(\".\");a=1===e.length;d=e[0];d=!a&&d in $jscomp.polyfills?$jscomp.polyfills:$jscomp.global;for(var f=0;f<e.length-1;f++){var g=e[f];if(!(g in d))return;d=d[g]}e=e[e.length-1];c=$jscomp.IS_SYMBOL_NATIVE&&\"es6\"===c?d[e]:null;b=b(c);null!=b&&(a?$jscomp.defineProperty($jscomp.polyfills,e,{configurable:!0,writable:!0,value:b}):b!==c&&($jscomp.propertyToPolyfillSymbol[e]=$jscomp.IS_SYMBOL_NATIVE?$jscomp.global.Symbol(e):$jscomp.POLYFILL_PREFIX+e,e=\n$jscomp.propertyToPolyfillSymbol[e],$jscomp.defineProperty(d,e,{configurable:!0,writable:!0,value:b})))};$jscomp.polyfill(\"String.prototype.endsWith\",function(a){return a?a:function(b,c){var d=$jscomp.checkStringArgs(this,b,\"endsWith\");b+=\"\";void 0===c&&(c=d.length);c=Math.max(0,Math.min(c|0,d.length));for(var e=b.length;0<e&&0<c;)if(d[--c]!=b[--e])return!1;return 0>=e}},\"es6\",\"es3\");\n$jscomp.findInternal=function(a,b,c){a instanceof String&&(a=String(a));for(var d=a.length,e=0;e<d;e++){var f=a[e];if(b.call(c,f,e,a))return{i:e,v:f}}return{i:-1,v:void 0}};$jscomp.polyfill(\"Array.prototype.find\",function(a){return a?a:function(b,c){return $jscomp.findInternal(this,b,c).v}},\"es6\",\"es3\");\n$jscomp.polyfill(\"String.prototype.startsWith\",function(a){return a?a:function(b,c){var d=$jscomp.checkStringArgs(this,b,\"startsWith\");b+=\"\";var e=d.length,f=b.length;c=Math.max(0,Math.min(c|0,d.length));for(var g=0;g<f&&c<e;)if(d[c++]!=b[g++])return!1;return g>=f}},\"es6\",\"es3\");\n$jscomp.polyfill(\"String.prototype.repeat\",function(a){return a?a:function(b){var c=$jscomp.checkStringArgs(this,null,\"repeat\");if(0>b||1342177279<b)throw new RangeError(\"Invalid count value\");b|=0;for(var d=\"\";b;)if(b&1&&(d+=c),b>>>=1)c+=c;return d}},\"es6\",\"es3\");$jscomp.initSymbol=function(){};\n$jscomp.polyfill(\"Symbol\",function(a){if(a)return a;var b=function(e,f){this.$jscomp$symbol$id_=e;$jscomp.defineProperty(this,\"description\",{configurable:!0,writable:!0,value:f})};b.prototype.toString=function(){return this.$jscomp$symbol$id_};var c=0,d=function(e){if(this instanceof d)throw new TypeError(\"Symbol is not a constructor\");return new b(\"jscomp_symbol_\"+(e||\"\")+\"_\"+c++,e)};return d},\"es6\",\"es3\");\n$jscomp.polyfill(\"Symbol.iterator\",function(a){if(a)return a;a=Symbol(\"Symbol.iterator\");for(var b=\"Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array\".split(\" \"),c=0;c<b.length;c++){var d=$jscomp.global[b[c]];\"function\"===typeof d&&\"function\"!=typeof d.prototype[a]&&$jscomp.defineProperty(d.prototype,a,{configurable:!0,writable:!0,value:function(){return $jscomp.iteratorPrototype($jscomp.arrayIteratorImpl(this))}})}return a},\"es6\",\n\"es3\");$jscomp.iteratorPrototype=function(a){a={next:a};a[Symbol.iterator]=function(){return this};return a};$jscomp.iteratorFromArray=function(a,b){a instanceof String&&(a+=\"\");var c=0,d=!1,e={next:function(){if(!d&&c<a.length){var f=c++;return{value:b(f,a[f]),done:!1}}d=!0;return{done:!0,value:void 0}}};e[Symbol.iterator]=function(){return e};return e};$jscomp.polyfill(\"Array.prototype.keys\",function(a){return a?a:function(){return $jscomp.iteratorFromArray(this,function(b){return b})}},\"es6\",\"es3\");\n$jscomp.polyfill(\"Object.is\",function(a){return a?a:function(b,c){return b===c?0!==b||1/b===1/c:b!==b&&c!==c}},\"es6\",\"es3\");$jscomp.polyfill(\"Array.prototype.includes\",function(a){return a?a:function(b,c){var d=this;d instanceof String&&(d=String(d));var e=d.length;c=c||0;for(0>c&&(c=Math.max(c+e,0));c<e;c++){var f=d[c];if(f===b||Object.is(f,b))return!0}return!1}},\"es7\",\"es3\");\n$jscomp.polyfill(\"String.prototype.includes\",function(a){return a?a:function(b,c){return-1!==$jscomp.checkStringArgs(this,b,\"includes\").indexOf(b,c||0)}},\"es6\",\"es3\");var COMPILED=!0,goog=goog||{};goog.global=this||self;\ngoog.exportPath_=function(a,b,c,d){a=a.split(\".\");d=d||goog.global;a[0]in d||\"undefined\"==typeof d.execScript||d.execScript(\"var \"+a[0]);for(var e;a.length&&(e=a.shift());)if(a.length||void 0===b)d=d[e]&&d[e]!==Object.prototype[e]?d[e]:d[e]={};else if(!c&&goog.isObject(b)&&goog.isObject(d[e]))for(var f in b)b.hasOwnProperty(f)&&(d[e][f]=b[f]);else d[e]=b};\ngoog.define=function(a,b){if(!COMPILED){var c=goog.global.CLOSURE_UNCOMPILED_DEFINES,d=goog.global.CLOSURE_DEFINES;c&&void 0===c.nodeType&&Object.prototype.hasOwnProperty.call(c,a)?b=c[a]:d&&void 0===d.nodeType&&Object.prototype.hasOwnProperty.call(d,a)&&(b=d[a])}return b};goog.FEATURESET_YEAR=2012;goog.DEBUG=!0;goog.LOCALE=\"en\";goog.TRUSTED_SITE=!0;goog.DISALLOW_TEST_ONLY_CODE=COMPILED&&!goog.DEBUG;goog.ENABLE_CHROME_APP_SAFE_SCRIPT_LOADING=!1;\ngoog.provide=function(a){if(goog.isInModuleLoader_())throw Error(\"goog.provide cannot be used within a module.\");if(!COMPILED&&goog.isProvided_(a))throw Error('Namespace \"'+a+'\" already declared.');goog.constructNamespace_(a)};goog.constructNamespace_=function(a,b,c){if(!COMPILED){delete goog.implicitNamespaces_[a];for(var d=a;(d=d.substring(0,d.lastIndexOf(\".\")))&&!goog.getObjectByName(d);)goog.implicitNamespaces_[d]=!0}goog.exportPath_(a,b,c)};\ngoog.getScriptNonce=function(a){if(a&&a!=goog.global)return goog.getScriptNonce_(a.document);null===goog.cspNonce_&&(goog.cspNonce_=goog.getScriptNonce_(goog.global.document));return goog.cspNonce_};goog.NONCE_PATTERN_=/^[\\w+/_-]+[=]{0,2}$/;goog.cspNonce_=null;goog.getScriptNonce_=function(a){return(a=a.querySelector&&a.querySelector(\"script[nonce]\"))&&(a=a.nonce||a.getAttribute(\"nonce\"))&&goog.NONCE_PATTERN_.test(a)?a:\"\"};goog.VALID_MODULE_RE_=/^[a-zA-Z_$][a-zA-Z0-9._$]*$/;\ngoog.module=function(a){if(\"string\"!==typeof a||!a||-1==a.search(goog.VALID_MODULE_RE_))throw Error(\"Invalid module identifier\");if(!goog.isInGoogModuleLoader_())throw Error(\"Module \"+a+\" has been loaded incorrectly. Note, modules cannot be loaded as normal scripts. They require some kind of pre-processing step. You're likely trying to load a module via a script tag or as a part of a concatenated bundle without rewriting the module. For more info see: https://github.com/google/closure-library/wiki/goog.module:-an-ES6-module-like-alternative-to-goog.provide.\");\nif(goog.moduleLoaderState_.moduleName)throw Error(\"goog.module may only be called once per module.\");goog.moduleLoaderState_.moduleName=a;if(!COMPILED){if(goog.isProvided_(a))throw Error('Namespace \"'+a+'\" already declared.');delete goog.implicitNamespaces_[a]}};goog.module.get=function(a){return goog.module.getInternal_(a)};\ngoog.module.getInternal_=function(a){if(!COMPILED){if(a in goog.loadedModules_)return goog.loadedModules_[a].exports;if(!goog.implicitNamespaces_[a])return a=goog.getObjectByName(a),null!=a?a:null}return null};goog.ModuleType={ES6:\"es6\",GOOG:\"goog\"};goog.moduleLoaderState_=null;goog.isInModuleLoader_=function(){return goog.isInGoogModuleLoader_()||goog.isInEs6ModuleLoader_()};goog.isInGoogModuleLoader_=function(){return!!goog.moduleLoaderState_&&goog.moduleLoaderState_.type==goog.ModuleType.GOOG};\ngoog.isInEs6ModuleLoader_=function(){if(goog.moduleLoaderState_&&goog.moduleLoaderState_.type==goog.ModuleType.ES6)return!0;var a=goog.global.$jscomp;return a?\"function\"!=typeof a.getCurrentModulePath?!1:!!a.getCurrentModulePath():!1};\ngoog.module.declareLegacyNamespace=function(){if(!COMPILED&&!goog.isInGoogModuleLoader_())throw Error(\"goog.module.declareLegacyNamespace must be called from within a goog.module\");if(!COMPILED&&!goog.moduleLoaderState_.moduleName)throw Error(\"goog.module must be called prior to goog.module.declareLegacyNamespace.\");goog.moduleLoaderState_.declareLegacyNamespace=!0};\ngoog.declareModuleId=function(a){if(!COMPILED){if(!goog.isInEs6ModuleLoader_())throw Error(\"goog.declareModuleId may only be called from within an ES6 module\");if(goog.moduleLoaderState_&&goog.moduleLoaderState_.moduleName)throw Error(\"goog.declareModuleId may only be called once per module.\");if(a in goog.loadedModules_)throw Error('Module with namespace \"'+a+'\" already exists.');}if(goog.moduleLoaderState_)goog.moduleLoaderState_.moduleName=a;else{var b=goog.global.$jscomp;if(!b||\"function\"!=typeof b.getCurrentModulePath)throw Error('Module with namespace \"'+\na+'\" has been loaded incorrectly.');b=b.require(b.getCurrentModulePath());goog.loadedModules_[a]={exports:b,type:goog.ModuleType.ES6,moduleId:a}}};goog.setTestOnly=function(a){if(goog.DISALLOW_TEST_ONLY_CODE)throw a=a||\"\",Error(\"Importing test-only code into non-debug environment\"+(a?\": \"+a:\".\"));};goog.forwardDeclare=function(a){};COMPILED||(goog.isProvided_=function(a){return a in goog.loadedModules_||!goog.implicitNamespaces_[a]&&null!=goog.getObjectByName(a)},goog.implicitNamespaces_={\"goog.module\":!0});\ngoog.getObjectByName=function(a,b){a=a.split(\".\");b=b||goog.global;for(var c=0;c<a.length;c++)if(b=b[a[c]],null==b)return null;return b};goog.addDependency=function(a,b,c,d){!COMPILED&&goog.DEPENDENCIES_ENABLED&&goog.debugLoader_.addDependency(a,b,c,d)};goog.ENABLE_DEBUG_LOADER=!0;goog.logToConsole_=function(a){goog.global.console&&goog.global.console.error(a)};\ngoog.require=function(a){if(!COMPILED){goog.ENABLE_DEBUG_LOADER&&goog.debugLoader_.requested(a);if(goog.isProvided_(a)){if(goog.isInModuleLoader_())return goog.module.getInternal_(a)}else if(goog.ENABLE_DEBUG_LOADER){var b=goog.moduleLoaderState_;goog.moduleLoaderState_=null;try{goog.debugLoader_.load_(a)}finally{goog.moduleLoaderState_=b}}return null}};goog.requireType=function(a){return{}};goog.basePath=\"\";goog.nullFunction=function(){};\ngoog.abstractMethod=function(){throw Error(\"unimplemented abstract method\");};goog.addSingletonGetter=function(a){a.instance_=void 0;a.getInstance=function(){if(a.instance_)return a.instance_;goog.DEBUG&&(goog.instantiatedSingletons_[goog.instantiatedSingletons_.length]=a);return a.instance_=new a}};goog.instantiatedSingletons_=[];goog.LOAD_MODULE_USING_EVAL=!0;goog.SEAL_MODULE_EXPORTS=goog.DEBUG;goog.loadedModules_={};goog.DEPENDENCIES_ENABLED=!COMPILED&&goog.ENABLE_DEBUG_LOADER;goog.TRANSPILE=\"detect\";\ngoog.ASSUME_ES_MODULES_TRANSPILED=!1;goog.TRANSPILE_TO_LANGUAGE=\"\";goog.TRANSPILER=\"transpile.js\";goog.hasBadLetScoping=null;goog.useSafari10Workaround=function(){if(null==goog.hasBadLetScoping){try{var a=!eval('\"use strict\";let x = 1; function f() { return typeof x; };f() == \"number\";')}catch(b){a=!1}goog.hasBadLetScoping=a}return goog.hasBadLetScoping};goog.workaroundSafari10EvalBug=function(a){return\"(function(){\"+a+\"\\n;})();\\n\"};\ngoog.loadModule=function(a){var b=goog.moduleLoaderState_;try{goog.moduleLoaderState_={moduleName:\"\",declareLegacyNamespace:!1,type:goog.ModuleType.GOOG};var c={},d=c;if(\"function\"===typeof a)d=a.call(void 0,d);else if(\"string\"===typeof a)goog.useSafari10Workaround()&&(a=goog.workaroundSafari10EvalBug(a)),d=goog.loadModuleFromSource_.call(void 0,d,a);else throw Error(\"Invalid module definition\");var e=goog.moduleLoaderState_.moduleName;if(\"string\"===typeof e&&e)goog.moduleLoaderState_.declareLegacyNamespace?\ngoog.constructNamespace_(e,d,c!==d):goog.SEAL_MODULE_EXPORTS&&Object.seal&&\"object\"==typeof d&&null!=d&&Object.seal(d),goog.loadedModules_[e]={exports:d,type:goog.ModuleType.GOOG,moduleId:goog.moduleLoaderState_.moduleName};else throw Error('Invalid module name \"'+e+'\"');}finally{goog.moduleLoaderState_=b}};goog.loadModuleFromSource_=function(a,b){eval(b);return a};\ngoog.normalizePath_=function(a){a=a.split(\"/\");for(var b=0;b<a.length;)\".\"==a[b]?a.splice(b,1):b&&\"..\"==a[b]&&a[b-1]&&\"..\"!=a[b-1]?a.splice(--b,2):b++;return a.join(\"/\")};goog.loadFileSync_=function(a){if(goog.global.CLOSURE_LOAD_FILE_SYNC)return goog.global.CLOSURE_LOAD_FILE_SYNC(a);try{var b=new goog.global.XMLHttpRequest;b.open(\"get\",a,!1);b.send();return 0==b.status||200==b.status?b.responseText:null}catch(c){return null}};\ngoog.transpile_=function(a,b,c){var d=goog.global.$jscomp;d||(goog.global.$jscomp=d={});var e=d.transpile;if(!e){var f=goog.basePath+goog.TRANSPILER,g=goog.loadFileSync_(f);if(g){(function(){(0,eval)(g+\"\\n//# sourceURL=\"+f)}).call(goog.global);if(goog.global.$gwtExport&&goog.global.$gwtExport.$jscomp&&!goog.global.$gwtExport.$jscomp.transpile)throw Error('The transpiler did not properly export the \"transpile\" method. $gwtExport: '+JSON.stringify(goog.global.$gwtExport));goog.global.$jscomp.transpile=\ngoog.global.$gwtExport.$jscomp.transpile;d=goog.global.$jscomp;e=d.transpile}}e||(e=d.transpile=function(h,k){goog.logToConsole_(k+\" requires transpilation but no transpiler was found.\");return h});return e(a,b,c)};goog.typeOf=function(a){var b=typeof a;return\"object\"!=b?b:a?Array.isArray(a)?\"array\":b:\"null\"};goog.isArrayLike=function(a){var b=goog.typeOf(a);return\"array\"==b||\"object\"==b&&\"number\"==typeof a.length};goog.isDateLike=function(a){return goog.isObject(a)&&\"function\"==typeof a.getFullYear};\ngoog.isObject=function(a){var b=typeof a;return\"object\"==b&&null!=a||\"function\"==b};goog.getUid=function(a){return Object.prototype.hasOwnProperty.call(a,goog.UID_PROPERTY_)&&a[goog.UID_PROPERTY_]||(a[goog.UID_PROPERTY_]=++goog.uidCounter_)};goog.hasUid=function(a){return!!a[goog.UID_PROPERTY_]};goog.removeUid=function(a){null!==a&&\"removeAttribute\"in a&&a.removeAttribute(goog.UID_PROPERTY_);try{delete a[goog.UID_PROPERTY_]}catch(b){}};goog.UID_PROPERTY_=\"closure_uid_\"+(1E9*Math.random()>>>0);\ngoog.uidCounter_=0;goog.cloneObject=function(a){var b=goog.typeOf(a);if(\"object\"==b||\"array\"==b){if(\"function\"===typeof a.clone)return a.clone();b=\"array\"==b?[]:{};for(var c in a)b[c]=goog.cloneObject(a[c]);return b}return a};goog.bindNative_=function(a,b,c){return a.call.apply(a.bind,arguments)};\ngoog.bindJs_=function(a,b,c){if(!a)throw Error();if(2<arguments.length){var d=Array.prototype.slice.call(arguments,2);return function(){var e=Array.prototype.slice.call(arguments);Array.prototype.unshift.apply(e,d);return a.apply(b,e)}}return function(){return a.apply(b,arguments)}};goog.bind=function(a,b,c){Function.prototype.bind&&-1!=Function.prototype.bind.toString().indexOf(\"native code\")?goog.bind=goog.bindNative_:goog.bind=goog.bindJs_;return goog.bind.apply(null,arguments)};\ngoog.partial=function(a,b){var c=Array.prototype.slice.call(arguments,1);return function(){var d=c.slice();d.push.apply(d,arguments);return a.apply(this,d)}};goog.mixin=function(a,b){for(var c in b)a[c]=b[c]};goog.now=function(){return Date.now()};goog.globalEval=function(a){(0,eval)(a)};\ngoog.getCssName=function(a,b){if(\".\"==String(a).charAt(0))throw Error('className passed in goog.getCssName must not start with \".\". You passed: '+a);var c=function(e){return goog.cssNameMapping_[e]||e},d=function(e){e=e.split(\"-\");for(var f=[],g=0;g<e.length;g++)f.push(c(e[g]));return f.join(\"-\")};d=goog.cssNameMapping_?\"BY_WHOLE\"==goog.cssNameMappingStyle_?c:d:function(e){return e};a=b?a+\"-\"+d(b):d(a);return goog.global.CLOSURE_CSS_NAME_MAP_FN?goog.global.CLOSURE_CSS_NAME_MAP_FN(a):a};\ngoog.setCssNameMapping=function(a,b){goog.cssNameMapping_=a;goog.cssNameMappingStyle_=b};!COMPILED&&goog.global.CLOSURE_CSS_NAME_MAPPING&&(goog.cssNameMapping_=goog.global.CLOSURE_CSS_NAME_MAPPING);goog.getMsg=function(a,b,c){c&&c.html&&(a=a.replace(/</g,\"&lt;\"));c&&c.unescapeHtmlEntities&&(a=a.replace(/&lt;/g,\"<\").replace(/&gt;/g,\">\").replace(/&apos;/g,\"'\").replace(/&quot;/g,'\"').replace(/&amp;/g,\"&\"));b&&(a=a.replace(/\\{\\$([^}]+)}/g,function(d,e){return null!=b&&e in b?b[e]:d}));return a};\ngoog.getMsgWithFallback=function(a,b){return a};goog.exportSymbol=function(a,b,c){goog.exportPath_(a,b,!0,c)};goog.exportProperty=function(a,b,c){a[b]=c};goog.inherits=function(a,b){function c(){}c.prototype=b.prototype;a.superClass_=b.prototype;a.prototype=new c;a.prototype.constructor=a;a.base=function(d,e,f){for(var g=Array(arguments.length-2),h=2;h<arguments.length;h++)g[h-2]=arguments[h];return b.prototype[e].apply(d,g)}};\ngoog.scope=function(a){if(goog.isInModuleLoader_())throw Error(\"goog.scope is not supported within a module.\");a.call(goog.global)};COMPILED||(goog.global.COMPILED=COMPILED);\ngoog.defineClass=function(a,b){var c=b.constructor,d=b.statics;c&&c!=Object.prototype.constructor||(c=function(){throw Error(\"cannot instantiate an interface (no constructor defined).\");});c=goog.defineClass.createSealingConstructor_(c,a);a&&goog.inherits(c,a);delete b.constructor;delete b.statics;goog.defineClass.applyProperties_(c.prototype,b);null!=d&&(d instanceof Function?d(c):goog.defineClass.applyProperties_(c,d));return c};goog.defineClass.SEAL_CLASS_INSTANCES=goog.DEBUG;\ngoog.defineClass.createSealingConstructor_=function(a,b){return goog.defineClass.SEAL_CLASS_INSTANCES?function(){var c=a.apply(this,arguments)||this;c[goog.UID_PROPERTY_]=c[goog.UID_PROPERTY_];return c}:a};goog.defineClass.OBJECT_PROTOTYPE_FIELDS_=\"constructor hasOwnProperty isPrototypeOf propertyIsEnumerable toLocaleString toString valueOf\".split(\" \");\ngoog.defineClass.applyProperties_=function(a,b){for(var c in b)Object.prototype.hasOwnProperty.call(b,c)&&(a[c]=b[c]);for(var d=0;d<goog.defineClass.OBJECT_PROTOTYPE_FIELDS_.length;d++)c=goog.defineClass.OBJECT_PROTOTYPE_FIELDS_[d],Object.prototype.hasOwnProperty.call(b,c)&&(a[c]=b[c])};\n!COMPILED&&goog.DEPENDENCIES_ENABLED&&(goog.inHtmlDocument_=function(){var a=goog.global.document;return null!=a&&\"write\"in a},goog.isDocumentLoading_=function(){var a=goog.global.document;return a.attachEvent?\"complete\"!=a.readyState:\"loading\"==a.readyState},goog.findBasePath_=function(){if(void 0!=goog.global.CLOSURE_BASE_PATH&&\"string\"===typeof goog.global.CLOSURE_BASE_PATH)goog.basePath=goog.global.CLOSURE_BASE_PATH;else if(goog.inHtmlDocument_()){var a=goog.global.document,b=a.currentScript;\na=b?[b]:a.getElementsByTagName(\"SCRIPT\");for(b=a.length-1;0<=b;--b){var c=a[b].src,d=c.lastIndexOf(\"?\");d=-1==d?c.length:d;if(\"base.js\"==c.substr(d-7,7)){goog.basePath=c.substr(0,d-7);break}}}},goog.findBasePath_(),goog.Transpiler=function(){this.requiresTranspilation_=null;this.transpilationTarget_=goog.TRANSPILE_TO_LANGUAGE},goog.Transpiler.prototype.createRequiresTranspilation_=function(){function a(g,h){e?d[g]=!0:h()?(c=g,d[g]=!1):e=d[g]=!0}function b(g){try{return!!eval(g)}catch(h){return!1}}\nvar c=\"es3\",d={es3:!1},e=!1,f=goog.global.navigator&&goog.global.navigator.userAgent?goog.global.navigator.userAgent:\"\";a(\"es5\",function(){return b(\"[1,].length==1\")});a(\"es6\",function(){return f.match(/Edge\\/(\\d+)(\\.\\d)*/i)?!1:b('(()=>{\"use strict\";class X{constructor(){if(new.target!=String)throw 1;this.x=42}}let q=Reflect.construct(X,[],String);if(q.x!=42||!(q instanceof String))throw 1;for(const a of[2,3]){if(a==2)continue;function f(z={a}){let a=0;return z.a}{function f(){return 0;}}return f()==3}})()')});\na(\"es7\",function(){return b(\"2 ** 2 == 4\")});a(\"es8\",function(){return b(\"async () => 1, true\")});a(\"es9\",function(){return b(\"({...rest} = {}), true\")});a(\"es_next\",function(){return!1});return{target:c,map:d}},goog.Transpiler.prototype.needsTranspile=function(a,b){if(\"always\"==goog.TRANSPILE)return!0;if(\"never\"==goog.TRANSPILE)return!1;if(!this.requiresTranspilation_){var c=this.createRequiresTranspilation_();this.requiresTranspilation_=c.map;this.transpilationTarget_=this.transpilationTarget_||\nc.target}if(a in this.requiresTranspilation_)return this.requiresTranspilation_[a]?!0:!goog.inHtmlDocument_()||\"es6\"!=b||\"noModule\"in goog.global.document.createElement(\"script\")?!1:!0;throw Error(\"Unknown language mode: \"+a);},goog.Transpiler.prototype.transpile=function(a,b){return goog.transpile_(a,b,this.transpilationTarget_)},goog.transpiler_=new goog.Transpiler,goog.protectScriptTag_=function(a){return a.replace(/<\\/(SCRIPT)/ig,\"\\\\x3c/$1\")},goog.DebugLoader_=function(){this.dependencies_={};\nthis.idToPath_={};this.written_={};this.loadingDeps_=[];this.depsToLoad_=[];this.paused_=!1;this.factory_=new goog.DependencyFactory(goog.transpiler_);this.deferredCallbacks_={};this.deferredQueue_=[]},goog.DebugLoader_.prototype.bootstrap=function(a,b){function c(){d&&(goog.global.setTimeout(d,0),d=null)}var d=b;if(a.length){b=[];for(var e=0;e<a.length;e++){var f=this.getPathFromDeps_(a[e]);if(!f)throw Error(\"Unregonized namespace: \"+a[e]);b.push(this.dependencies_[f])}f=goog.require;var g=0;for(e=\n0;e<a.length;e++)f(a[e]),b[e].onLoad(function(){++g==a.length&&c()})}else c()},goog.DebugLoader_.prototype.loadClosureDeps=function(){this.depsToLoad_.push(this.factory_.createDependency(goog.normalizePath_(goog.basePath+\"deps.js\"),\"deps.js\",[],[],{},!1));this.loadDeps_()},goog.DebugLoader_.prototype.requested=function(a,b){(a=this.getPathFromDeps_(a))&&(b||this.areDepsLoaded_(this.dependencies_[a].requires))&&(b=this.deferredCallbacks_[a])&&(delete this.deferredCallbacks_[a],b())},goog.DebugLoader_.prototype.setDependencyFactory=\nfunction(a){this.factory_=a},goog.DebugLoader_.prototype.load_=function(a){if(this.getPathFromDeps_(a)){var b=this,c=[],d=function(e){var f=b.getPathFromDeps_(e);if(!f)throw Error(\"Bad dependency path or symbol: \"+e);if(!b.written_[f]){b.written_[f]=!0;e=b.dependencies_[f];for(f=0;f<e.requires.length;f++)goog.isProvided_(e.requires[f])||d(e.requires[f]);c.push(e)}};d(a);a=!!this.depsToLoad_.length;this.depsToLoad_=this.depsToLoad_.concat(c);this.paused_||a||this.loadDeps_()}else throw a=\"goog.require could not find: \"+\na,goog.logToConsole_(a),Error(a);},goog.DebugLoader_.prototype.loadDeps_=function(){for(var a=this,b=this.paused_;this.depsToLoad_.length&&!b;)(function(){var c=!1,d=a.depsToLoad_.shift(),e=!1;a.loading_(d);var f={pause:function(){if(c)throw Error(\"Cannot call pause after the call to load.\");b=!0},resume:function(){c?a.resume_():b=!1},loaded:function(){if(e)throw Error(\"Double call to loaded.\");e=!0;a.loaded_(d)},pending:function(){for(var g=[],h=0;h<a.loadingDeps_.length;h++)g.push(a.loadingDeps_[h]);\nreturn g},setModuleState:function(g){goog.moduleLoaderState_={type:g,moduleName:\"\",declareLegacyNamespace:!1}},registerEs6ModuleExports:function(g,h,k){k&&(goog.loadedModules_[k]={exports:h,type:goog.ModuleType.ES6,moduleId:k||\"\"})},registerGoogModuleExports:function(g,h){goog.loadedModules_[g]={exports:h,type:goog.ModuleType.GOOG,moduleId:g}},clearModuleState:function(){goog.moduleLoaderState_=null},defer:function(g){if(c)throw Error(\"Cannot register with defer after the call to load.\");a.defer_(d,\ng)},areDepsLoaded:function(){return a.areDepsLoaded_(d.requires)}};try{d.load(f)}finally{c=!0}})();b&&this.pause_()},goog.DebugLoader_.prototype.pause_=function(){this.paused_=!0},goog.DebugLoader_.prototype.resume_=function(){this.paused_&&(this.paused_=!1,this.loadDeps_())},goog.DebugLoader_.prototype.loading_=function(a){this.loadingDeps_.push(a)},goog.DebugLoader_.prototype.loaded_=function(a){for(var b=0;b<this.loadingDeps_.length;b++)if(this.loadingDeps_[b]==a){this.loadingDeps_.splice(b,1);\nbreak}for(b=0;b<this.deferredQueue_.length;b++)if(this.deferredQueue_[b]==a.path){this.deferredQueue_.splice(b,1);break}if(this.loadingDeps_.length==this.deferredQueue_.length&&!this.depsToLoad_.length)for(;this.deferredQueue_.length;)this.requested(this.deferredQueue_.shift(),!0);a.loaded()},goog.DebugLoader_.prototype.areDepsLoaded_=function(a){for(var b=0;b<a.length;b++){var c=this.getPathFromDeps_(a[b]);if(!c||!(c in this.deferredCallbacks_||goog.isProvided_(a[b])))return!1}return!0},goog.DebugLoader_.prototype.getPathFromDeps_=\nfunction(a){return a in this.idToPath_?this.idToPath_[a]:a in this.dependencies_?a:null},goog.DebugLoader_.prototype.defer_=function(a,b){this.deferredCallbacks_[a.path]=b;this.deferredQueue_.push(a.path)},goog.LoadController=function(){},goog.LoadController.prototype.pause=function(){},goog.LoadController.prototype.resume=function(){},goog.LoadController.prototype.loaded=function(){},goog.LoadController.prototype.pending=function(){},goog.LoadController.prototype.registerEs6ModuleExports=function(a,\nb,c){},goog.LoadController.prototype.setModuleState=function(a){},goog.LoadController.prototype.clearModuleState=function(){},goog.LoadController.prototype.defer=function(a){},goog.LoadController.prototype.areDepsLoaded=function(){},goog.Dependency=function(a,b,c,d,e){this.path=a;this.relativePath=b;this.provides=c;this.requires=d;this.loadFlags=e;this.loaded_=!1;this.loadCallbacks_=[]},goog.Dependency.prototype.getPathName=function(){var a=this.path,b=a.indexOf(\"://\");0<=b&&(a=a.substring(b+3),b=\na.indexOf(\"/\"),0<=b&&(a=a.substring(b+1)));return a},goog.Dependency.prototype.onLoad=function(a){this.loaded_?a():this.loadCallbacks_.push(a)},goog.Dependency.prototype.loaded=function(){this.loaded_=!0;var a=this.loadCallbacks_;this.loadCallbacks_=[];for(var b=0;b<a.length;b++)a[b]()},goog.Dependency.defer_=!1,goog.Dependency.callbackMap_={},goog.Dependency.registerCallback_=function(a){var b=Math.random().toString(32);goog.Dependency.callbackMap_[b]=a;return b},goog.Dependency.unregisterCallback_=\nfunction(a){delete goog.Dependency.callbackMap_[a]},goog.Dependency.callback_=function(a,b){if(a in goog.Dependency.callbackMap_){for(var c=goog.Dependency.callbackMap_[a],d=[],e=1;e<arguments.length;e++)d.push(arguments[e]);c.apply(void 0,d)}else throw Error(\"Callback key \"+a+\" does not exist (was base.js loaded more than once?).\");},goog.Dependency.prototype.load=function(a){if(goog.global.CLOSURE_IMPORT_SCRIPT)goog.global.CLOSURE_IMPORT_SCRIPT(this.path)?a.loaded():a.pause();else if(goog.inHtmlDocument_()){var b=\ngoog.global.document;if(\"complete\"==b.readyState&&!goog.ENABLE_CHROME_APP_SAFE_SCRIPT_LOADING){if(/\\bdeps.js$/.test(this.path)){a.loaded();return}throw Error('Cannot write \"'+this.path+'\" after document load');}var c=goog.getScriptNonce();if(!goog.ENABLE_CHROME_APP_SAFE_SCRIPT_LOADING&&goog.isDocumentLoading_()){var d=function(h){h.readyState&&\"complete\"!=h.readyState?h.onload=d:(goog.Dependency.unregisterCallback_(e),a.loaded())};var e=goog.Dependency.registerCallback_(d);c=c?' nonce=\"'+c+'\"':\"\";\nvar f='<script src=\"'+this.path+'\"'+c+(goog.Dependency.defer_?\" defer\":\"\")+' id=\"script-'+e+'\">\\x3c/script>';f+=\"<script\"+c+\">\";f=goog.Dependency.defer_?f+(\"document.getElementById('script-\"+e+\"').onload = function() {\\n  goog.Dependency.callback_('\"+e+\"', this);\\n};\\n\"):f+(\"goog.Dependency.callback_('\"+e+\"', document.getElementById('script-\"+e+\"'));\");f+=\"\\x3c/script>\";b.write(goog.TRUSTED_TYPES_POLICY_?goog.TRUSTED_TYPES_POLICY_.createHTML(f):f)}else{var g=b.createElement(\"script\");g.defer=goog.Dependency.defer_;\ng.async=!1;c&&(g.nonce=c);goog.DebugLoader_.IS_OLD_IE_?(a.pause(),g.onreadystatechange=function(){if(\"loaded\"==g.readyState||\"complete\"==g.readyState)a.loaded(),a.resume()}):g.onload=function(){g.onload=null;a.loaded()};g.src=goog.TRUSTED_TYPES_POLICY_?goog.TRUSTED_TYPES_POLICY_.createScriptURL(this.path):this.path;b.head.appendChild(g)}}else goog.logToConsole_(\"Cannot use default debug loader outside of HTML documents.\"),\"deps.js\"==this.relativePath?(goog.logToConsole_(\"Consider setting CLOSURE_IMPORT_SCRIPT before loading base.js, or setting CLOSURE_NO_DEPS to true.\"),\na.loaded()):a.pause()},goog.Es6ModuleDependency=function(a,b,c,d,e){goog.Dependency.call(this,a,b,c,d,e)},goog.inherits(goog.Es6ModuleDependency,goog.Dependency),goog.Es6ModuleDependency.prototype.load=function(a){function b(l,p){var m=\"\",n=goog.getScriptNonce();n&&(m=' nonce=\"'+n+'\"');l=p?'<script type=\"module\" crossorigin'+m+\">\"+p+\"\\x3c/script>\":'<script type=\"module\" crossorigin src=\"'+l+'\"'+m+\">\\x3c/script>\";d.write(goog.TRUSTED_TYPES_POLICY_?goog.TRUSTED_TYPES_POLICY_.createHTML(l):l)}function c(l,\np){var m=d.createElement(\"script\");m.defer=!0;m.async=!1;m.type=\"module\";m.setAttribute(\"crossorigin\",!0);var n=goog.getScriptNonce();n&&(m.nonce=n);p?m.text=goog.TRUSTED_TYPES_POLICY_?goog.TRUSTED_TYPES_POLICY_.createScript(p):p:m.src=goog.TRUSTED_TYPES_POLICY_?goog.TRUSTED_TYPES_POLICY_.createScriptURL(l):l;d.head.appendChild(m)}if(goog.global.CLOSURE_IMPORT_SCRIPT)goog.global.CLOSURE_IMPORT_SCRIPT(this.path)?a.loaded():a.pause();else if(goog.inHtmlDocument_()){var d=goog.global.document,e=this;\nif(goog.isDocumentLoading_()){var f=b;goog.Dependency.defer_=!0}else f=c;var g=goog.Dependency.registerCallback_(function(){goog.Dependency.unregisterCallback_(g);a.setModuleState(goog.ModuleType.ES6)});f(void 0,'goog.Dependency.callback_(\"'+g+'\")');f(this.path,void 0);var h=goog.Dependency.registerCallback_(function(l){goog.Dependency.unregisterCallback_(h);a.registerEs6ModuleExports(e.path,l,goog.moduleLoaderState_.moduleName)});f(void 0,'import * as m from \"'+this.path+'\"; goog.Dependency.callback_(\"'+\nh+'\", m)');var k=goog.Dependency.registerCallback_(function(){goog.Dependency.unregisterCallback_(k);a.clearModuleState();a.loaded()});f(void 0,'goog.Dependency.callback_(\"'+k+'\")')}else goog.logToConsole_(\"Cannot use default debug loader outside of HTML documents.\"),a.pause()},goog.TransformedDependency=function(a,b,c,d,e){goog.Dependency.call(this,a,b,c,d,e);this.contents_=null;this.lazyFetch_=!goog.inHtmlDocument_()||!(\"noModule\"in goog.global.document.createElement(\"script\"))},goog.inherits(goog.TransformedDependency,\ngoog.Dependency),goog.TransformedDependency.prototype.load=function(a){function b(){e.contents_=goog.loadFileSync_(e.path);e.contents_&&(e.contents_=e.transform(e.contents_),e.contents_&&(e.contents_+=\"\\n//# sourceURL=\"+e.path))}function c(){e.lazyFetch_&&b();if(e.contents_){f&&a.setModuleState(goog.ModuleType.ES6);try{var p=e.contents_;e.contents_=null;goog.globalEval(p);if(f)var m=goog.moduleLoaderState_.moduleName}finally{f&&a.clearModuleState()}f&&goog.global.$jscomp.require.ensure([e.getPathName()],\nfunction(){a.registerEs6ModuleExports(e.path,goog.global.$jscomp.require(e.getPathName()),m)});a.loaded()}}function d(){var p=goog.global.document,m=goog.Dependency.registerCallback_(function(){goog.Dependency.unregisterCallback_(m);c()}),n=goog.getScriptNonce();n=\"<script\"+(n?' nonce=\"'+n+'\"':\"\")+\">\"+goog.protectScriptTag_('goog.Dependency.callback_(\"'+m+'\");')+\"\\x3c/script>\";p.write(goog.TRUSTED_TYPES_POLICY_?goog.TRUSTED_TYPES_POLICY_.createHTML(n):n)}var e=this;if(goog.global.CLOSURE_IMPORT_SCRIPT)b(),\nthis.contents_&&goog.global.CLOSURE_IMPORT_SCRIPT(\"\",this.contents_)?(this.contents_=null,a.loaded()):a.pause();else{var f=this.loadFlags.module==goog.ModuleType.ES6;this.lazyFetch_||b();var g=1<a.pending().length,h=g&&goog.DebugLoader_.IS_OLD_IE_;g=goog.Dependency.defer_&&(g||goog.isDocumentLoading_());if(h||g)a.defer(function(){c()});else{var k=goog.global.document;h=goog.inHtmlDocument_()&&\"ActiveXObject\"in goog.global;if(f&&goog.inHtmlDocument_()&&goog.isDocumentLoading_()&&!h){goog.Dependency.defer_=\n!0;a.pause();var l=k.onreadystatechange;k.onreadystatechange=function(){\"interactive\"==k.readyState&&(k.onreadystatechange=l,c(),a.resume());\"function\"===typeof l&&l.apply(void 0,arguments)}}else!goog.DebugLoader_.IS_OLD_IE_&&goog.inHtmlDocument_()&&goog.isDocumentLoading_()?d():c()}}},goog.TransformedDependency.prototype.transform=function(a){},goog.TranspiledDependency=function(a,b,c,d,e,f){goog.TransformedDependency.call(this,a,b,c,d,e);this.transpiler=f},goog.inherits(goog.TranspiledDependency,\ngoog.TransformedDependency),goog.TranspiledDependency.prototype.transform=function(a){return this.transpiler.transpile(a,this.getPathName())},goog.PreTranspiledEs6ModuleDependency=function(a,b,c,d,e){goog.TransformedDependency.call(this,a,b,c,d,e)},goog.inherits(goog.PreTranspiledEs6ModuleDependency,goog.TransformedDependency),goog.PreTranspiledEs6ModuleDependency.prototype.transform=function(a){return a},goog.GoogModuleDependency=function(a,b,c,d,e,f,g){goog.TransformedDependency.call(this,a,b,c,\nd,e);this.needsTranspile_=f;this.transpiler_=g},goog.inherits(goog.GoogModuleDependency,goog.TransformedDependency),goog.GoogModuleDependency.prototype.transform=function(a){this.needsTranspile_&&(a=this.transpiler_.transpile(a,this.getPathName()));return goog.LOAD_MODULE_USING_EVAL&&void 0!==goog.global.JSON?\"goog.loadModule(\"+goog.global.JSON.stringify(a+\"\\n//# sourceURL=\"+this.path+\"\\n\")+\");\":'goog.loadModule(function(exports) {\"use strict\";'+a+\"\\n;return exports});\\n//# sourceURL=\"+this.path+\n\"\\n\"},goog.DebugLoader_.IS_OLD_IE_=!(goog.global.atob||!goog.global.document||!goog.global.document.all),goog.DebugLoader_.prototype.addDependency=function(a,b,c,d){b=b||[];a=a.replace(/\\\\/g,\"/\");var e=goog.normalizePath_(goog.basePath+a);d&&\"boolean\"!==typeof d||(d=d?{module:goog.ModuleType.GOOG}:{});c=this.factory_.createDependency(e,a,b,c,d,goog.transpiler_.needsTranspile(d.lang||\"es3\",d.module));this.dependencies_[e]=c;for(c=0;c<b.length;c++)this.idToPath_[b[c]]=e;this.idToPath_[a]=e},goog.DependencyFactory=\nfunction(a){this.transpiler=a},goog.DependencyFactory.prototype.createDependency=function(a,b,c,d,e,f){return e.module==goog.ModuleType.GOOG?new goog.GoogModuleDependency(a,b,c,d,e,f,this.transpiler):f?new goog.TranspiledDependency(a,b,c,d,e,this.transpiler):e.module==goog.ModuleType.ES6?\"never\"==goog.TRANSPILE&&goog.ASSUME_ES_MODULES_TRANSPILED?new goog.PreTranspiledEs6ModuleDependency(a,b,c,d,e):new goog.Es6ModuleDependency(a,b,c,d,e):new goog.Dependency(a,b,c,d,e)},goog.debugLoader_=new goog.DebugLoader_,\ngoog.loadClosureDeps=function(){goog.debugLoader_.loadClosureDeps()},goog.setDependencyFactory=function(a){goog.debugLoader_.setDependencyFactory(a)},goog.TRUSTED_TYPES_POLICY_=goog.TRUSTED_TYPES_POLICY_NAME?goog.createTrustedTypesPolicy(goog.TRUSTED_TYPES_POLICY_NAME+\"#base\"):null,goog.global.CLOSURE_NO_DEPS||goog.debugLoader_.loadClosureDeps(),goog.bootstrap=function(a,b){goog.debugLoader_.bootstrap(a,b)});goog.TRUSTED_TYPES_POLICY_NAME=\"goog\";goog.identity_=function(a){return a};\ngoog.createTrustedTypesPolicy=function(a){var b=null,c=goog.global.trustedTypes;if(!c||!c.createPolicy)return b;try{b=c.createPolicy(a,{createHTML:goog.identity_,createScript:goog.identity_,createScriptURL:goog.identity_})}catch(d){goog.logToConsole_(d.message)}return b};goog.debug={};function module$contents$goog$debug$Error_DebugError(a){if(Error.captureStackTrace)Error.captureStackTrace(this,module$contents$goog$debug$Error_DebugError);else{var b=Error().stack;b&&(this.stack=b)}a&&(this.message=String(a));this.reportErrorToServer=!0}goog.inherits(module$contents$goog$debug$Error_DebugError,Error);module$contents$goog$debug$Error_DebugError.prototype.name=\"CustomError\";goog.debug.Error=module$contents$goog$debug$Error_DebugError;goog.dom={};goog.dom.NodeType={ELEMENT:1,ATTRIBUTE:2,TEXT:3,CDATA_SECTION:4,ENTITY_REFERENCE:5,ENTITY:6,PROCESSING_INSTRUCTION:7,COMMENT:8,DOCUMENT:9,DOCUMENT_TYPE:10,DOCUMENT_FRAGMENT:11,NOTATION:12};goog.asserts={};goog.asserts.ENABLE_ASSERTS=goog.DEBUG;goog.asserts.AssertionError=function(a,b){module$contents$goog$debug$Error_DebugError.call(this,goog.asserts.subs_(a,b));this.messagePattern=a};goog.inherits(goog.asserts.AssertionError,module$contents$goog$debug$Error_DebugError);goog.asserts.AssertionError.prototype.name=\"AssertionError\";goog.asserts.DEFAULT_ERROR_HANDLER=function(a){throw a;};goog.asserts.errorHandler_=goog.asserts.DEFAULT_ERROR_HANDLER;\ngoog.asserts.subs_=function(a,b){a=a.split(\"%s\");for(var c=\"\",d=a.length-1,e=0;e<d;e++)c+=a[e]+(e<b.length?b[e]:\"%s\");return c+a[d]};goog.asserts.doAssertFailure_=function(a,b,c,d){var e=\"Assertion failed\";if(c){e+=\": \"+c;var f=d}else a&&(e+=\": \"+a,f=b);a=new goog.asserts.AssertionError(\"\"+e,f||[]);goog.asserts.errorHandler_(a)};goog.asserts.setErrorHandler=function(a){goog.asserts.ENABLE_ASSERTS&&(goog.asserts.errorHandler_=a)};\ngoog.asserts.assert=function(a,b,c){goog.asserts.ENABLE_ASSERTS&&!a&&goog.asserts.doAssertFailure_(\"\",null,b,Array.prototype.slice.call(arguments,2));return a};goog.asserts.assertExists=function(a,b,c){goog.asserts.ENABLE_ASSERTS&&null==a&&goog.asserts.doAssertFailure_(\"Expected to exist: %s.\",[a],b,Array.prototype.slice.call(arguments,2));return a};\ngoog.asserts.fail=function(a,b){goog.asserts.ENABLE_ASSERTS&&goog.asserts.errorHandler_(new goog.asserts.AssertionError(\"Failure\"+(a?\": \"+a:\"\"),Array.prototype.slice.call(arguments,1)))};goog.asserts.assertNumber=function(a,b,c){goog.asserts.ENABLE_ASSERTS&&\"number\"!==typeof a&&goog.asserts.doAssertFailure_(\"Expected number but got %s: %s.\",[goog.typeOf(a),a],b,Array.prototype.slice.call(arguments,2));return a};\ngoog.asserts.assertString=function(a,b,c){goog.asserts.ENABLE_ASSERTS&&\"string\"!==typeof a&&goog.asserts.doAssertFailure_(\"Expected string but got %s: %s.\",[goog.typeOf(a),a],b,Array.prototype.slice.call(arguments,2));return a};goog.asserts.assertFunction=function(a,b,c){goog.asserts.ENABLE_ASSERTS&&\"function\"!==typeof a&&goog.asserts.doAssertFailure_(\"Expected function but got %s: %s.\",[goog.typeOf(a),a],b,Array.prototype.slice.call(arguments,2));return a};\ngoog.asserts.assertObject=function(a,b,c){goog.asserts.ENABLE_ASSERTS&&!goog.isObject(a)&&goog.asserts.doAssertFailure_(\"Expected object but got %s: %s.\",[goog.typeOf(a),a],b,Array.prototype.slice.call(arguments,2));return a};goog.asserts.assertArray=function(a,b,c){goog.asserts.ENABLE_ASSERTS&&!Array.isArray(a)&&goog.asserts.doAssertFailure_(\"Expected array but got %s: %s.\",[goog.typeOf(a),a],b,Array.prototype.slice.call(arguments,2));return a};\ngoog.asserts.assertBoolean=function(a,b,c){goog.asserts.ENABLE_ASSERTS&&\"boolean\"!==typeof a&&goog.asserts.doAssertFailure_(\"Expected boolean but got %s: %s.\",[goog.typeOf(a),a],b,Array.prototype.slice.call(arguments,2));return a};goog.asserts.assertElement=function(a,b,c){!goog.asserts.ENABLE_ASSERTS||goog.isObject(a)&&a.nodeType==goog.dom.NodeType.ELEMENT||goog.asserts.doAssertFailure_(\"Expected Element but got %s: %s.\",[goog.typeOf(a),a],b,Array.prototype.slice.call(arguments,2));return a};\ngoog.asserts.assertInstanceof=function(a,b,c,d){!goog.asserts.ENABLE_ASSERTS||a instanceof b||goog.asserts.doAssertFailure_(\"Expected instanceof %s but got %s.\",[goog.asserts.getType_(b),goog.asserts.getType_(a)],c,Array.prototype.slice.call(arguments,3));return a};goog.asserts.assertFinite=function(a,b,c){!goog.asserts.ENABLE_ASSERTS||\"number\"==typeof a&&isFinite(a)||goog.asserts.doAssertFailure_(\"Expected %s to be a finite number but it is not.\",[a],b,Array.prototype.slice.call(arguments,2));return a};\ngoog.asserts.assertObjectPrototypeIsIntact=function(){for(var a in Object.prototype)goog.asserts.fail(a+\" should not be enumerable in Object.prototype.\")};goog.asserts.getType_=function(a){return a instanceof Function?a.displayName||a.name||\"unknown type name\":a instanceof Object?a.constructor.displayName||a.constructor.name||Object.prototype.toString.call(a):null===a?\"null\":typeof a};goog.array={};goog.NATIVE_ARRAY_PROTOTYPES=goog.TRUSTED_SITE;var module$contents$goog$array_ASSUME_NATIVE_FUNCTIONS=2012<goog.FEATURESET_YEAR;goog.array.ASSUME_NATIVE_FUNCTIONS=module$contents$goog$array_ASSUME_NATIVE_FUNCTIONS;function module$contents$goog$array_peek(a){return a[a.length-1]}goog.array.peek=module$contents$goog$array_peek;goog.array.last=module$contents$goog$array_peek;\nvar module$contents$goog$array_indexOf=goog.NATIVE_ARRAY_PROTOTYPES&&(module$contents$goog$array_ASSUME_NATIVE_FUNCTIONS||Array.prototype.indexOf)?function(a,b,c){goog.asserts.assert(null!=a.length);return Array.prototype.indexOf.call(a,b,c)}:function(a,b,c){c=null==c?0:0>c?Math.max(0,a.length+c):c;if(\"string\"===typeof a)return\"string\"!==typeof b||1!=b.length?-1:a.indexOf(b,c);for(;c<a.length;c++)if(c in a&&a[c]===b)return c;return-1};goog.array.indexOf=module$contents$goog$array_indexOf;\nvar module$contents$goog$array_lastIndexOf=goog.NATIVE_ARRAY_PROTOTYPES&&(module$contents$goog$array_ASSUME_NATIVE_FUNCTIONS||Array.prototype.lastIndexOf)?function(a,b,c){goog.asserts.assert(null!=a.length);return Array.prototype.lastIndexOf.call(a,b,null==c?a.length-1:c)}:function(a,b,c){c=null==c?a.length-1:c;0>c&&(c=Math.max(0,a.length+c));if(\"string\"===typeof a)return\"string\"!==typeof b||1!=b.length?-1:a.lastIndexOf(b,c);for(;0<=c;c--)if(c in a&&a[c]===b)return c;return-1};\ngoog.array.lastIndexOf=module$contents$goog$array_lastIndexOf;var module$contents$goog$array_forEach=goog.NATIVE_ARRAY_PROTOTYPES&&(module$contents$goog$array_ASSUME_NATIVE_FUNCTIONS||Array.prototype.forEach)?function(a,b,c){goog.asserts.assert(null!=a.length);Array.prototype.forEach.call(a,b,c)}:function(a,b,c){for(var d=a.length,e=\"string\"===typeof a?a.split(\"\"):a,f=0;f<d;f++)f in e&&b.call(c,e[f],f,a)};goog.array.forEach=module$contents$goog$array_forEach;\nfunction module$contents$goog$array_forEachRight(a,b,c){var d=a.length,e=\"string\"===typeof a?a.split(\"\"):a;for(--d;0<=d;--d)d in e&&b.call(c,e[d],d,a)}goog.array.forEachRight=module$contents$goog$array_forEachRight;\nvar module$contents$goog$array_filter=goog.NATIVE_ARRAY_PROTOTYPES&&(module$contents$goog$array_ASSUME_NATIVE_FUNCTIONS||Array.prototype.filter)?function(a,b,c){goog.asserts.assert(null!=a.length);return Array.prototype.filter.call(a,b,c)}:function(a,b,c){for(var d=a.length,e=[],f=0,g=\"string\"===typeof a?a.split(\"\"):a,h=0;h<d;h++)if(h in g){var k=g[h];b.call(c,k,h,a)&&(e[f++]=k)}return e};goog.array.filter=module$contents$goog$array_filter;\nvar module$contents$goog$array_map=goog.NATIVE_ARRAY_PROTOTYPES&&(module$contents$goog$array_ASSUME_NATIVE_FUNCTIONS||Array.prototype.map)?function(a,b,c){goog.asserts.assert(null!=a.length);return Array.prototype.map.call(a,b,c)}:function(a,b,c){for(var d=a.length,e=Array(d),f=\"string\"===typeof a?a.split(\"\"):a,g=0;g<d;g++)g in f&&(e[g]=b.call(c,f[g],g,a));return e};goog.array.map=module$contents$goog$array_map;\nvar module$contents$goog$array_reduce=goog.NATIVE_ARRAY_PROTOTYPES&&(module$contents$goog$array_ASSUME_NATIVE_FUNCTIONS||Array.prototype.reduce)?function(a,b,c,d){goog.asserts.assert(null!=a.length);d&&(b=goog.bind(b,d));return Array.prototype.reduce.call(a,b,c)}:function(a,b,c,d){var e=c;module$contents$goog$array_forEach(a,function(f,g){e=b.call(d,e,f,g,a)});return e};goog.array.reduce=module$contents$goog$array_reduce;\nvar module$contents$goog$array_reduceRight=goog.NATIVE_ARRAY_PROTOTYPES&&(module$contents$goog$array_ASSUME_NATIVE_FUNCTIONS||Array.prototype.reduceRight)?function(a,b,c,d){goog.asserts.assert(null!=a.length);goog.asserts.assert(null!=b);d&&(b=goog.bind(b,d));return Array.prototype.reduceRight.call(a,b,c)}:function(a,b,c,d){var e=c;module$contents$goog$array_forEachRight(a,function(f,g){e=b.call(d,e,f,g,a)});return e};goog.array.reduceRight=module$contents$goog$array_reduceRight;\nvar module$contents$goog$array_some=goog.NATIVE_ARRAY_PROTOTYPES&&(module$contents$goog$array_ASSUME_NATIVE_FUNCTIONS||Array.prototype.some)?function(a,b,c){goog.asserts.assert(null!=a.length);return Array.prototype.some.call(a,b,c)}:function(a,b,c){for(var d=a.length,e=\"string\"===typeof a?a.split(\"\"):a,f=0;f<d;f++)if(f in e&&b.call(c,e[f],f,a))return!0;return!1};goog.array.some=module$contents$goog$array_some;\nvar module$contents$goog$array_every=goog.NATIVE_ARRAY_PROTOTYPES&&(module$contents$goog$array_ASSUME_NATIVE_FUNCTIONS||Array.prototype.every)?function(a,b,c){goog.asserts.assert(null!=a.length);return Array.prototype.every.call(a,b,c)}:function(a,b,c){for(var d=a.length,e=\"string\"===typeof a?a.split(\"\"):a,f=0;f<d;f++)if(f in e&&!b.call(c,e[f],f,a))return!1;return!0};goog.array.every=module$contents$goog$array_every;\nfunction module$contents$goog$array_count(a,b,c){var d=0;module$contents$goog$array_forEach(a,function(e,f,g){b.call(c,e,f,g)&&++d},c);return d}goog.array.count=module$contents$goog$array_count;function module$contents$goog$array_find(a,b,c){b=module$contents$goog$array_findIndex(a,b,c);return 0>b?null:\"string\"===typeof a?a.charAt(b):a[b]}goog.array.find=module$contents$goog$array_find;\nfunction module$contents$goog$array_findIndex(a,b,c){for(var d=a.length,e=\"string\"===typeof a?a.split(\"\"):a,f=0;f<d;f++)if(f in e&&b.call(c,e[f],f,a))return f;return-1}goog.array.findIndex=module$contents$goog$array_findIndex;function module$contents$goog$array_findRight(a,b,c){b=module$contents$goog$array_findIndexRight(a,b,c);return 0>b?null:\"string\"===typeof a?a.charAt(b):a[b]}goog.array.findRight=module$contents$goog$array_findRight;\nfunction module$contents$goog$array_findIndexRight(a,b,c){var d=a.length,e=\"string\"===typeof a?a.split(\"\"):a;for(--d;0<=d;d--)if(d in e&&b.call(c,e[d],d,a))return d;return-1}goog.array.findIndexRight=module$contents$goog$array_findIndexRight;function module$contents$goog$array_contains(a,b){return 0<=module$contents$goog$array_indexOf(a,b)}goog.array.contains=module$contents$goog$array_contains;function module$contents$goog$array_isEmpty(a){return 0==a.length}goog.array.isEmpty=module$contents$goog$array_isEmpty;\nfunction module$contents$goog$array_clear(a){if(!Array.isArray(a))for(var b=a.length-1;0<=b;b--)delete a[b];a.length=0}goog.array.clear=module$contents$goog$array_clear;function module$contents$goog$array_insert(a,b){module$contents$goog$array_contains(a,b)||a.push(b)}goog.array.insert=module$contents$goog$array_insert;function module$contents$goog$array_insertAt(a,b,c){module$contents$goog$array_splice(a,c,0,b)}goog.array.insertAt=module$contents$goog$array_insertAt;\nfunction module$contents$goog$array_insertArrayAt(a,b,c){goog.partial(module$contents$goog$array_splice,a,c,0).apply(null,b)}goog.array.insertArrayAt=module$contents$goog$array_insertArrayAt;function module$contents$goog$array_insertBefore(a,b,c){var d;2==arguments.length||0>(d=module$contents$goog$array_indexOf(a,c))?a.push(b):module$contents$goog$array_insertAt(a,b,d)}goog.array.insertBefore=module$contents$goog$array_insertBefore;\nfunction module$contents$goog$array_remove(a,b){b=module$contents$goog$array_indexOf(a,b);var c;(c=0<=b)&&module$contents$goog$array_removeAt(a,b);return c}goog.array.remove=module$contents$goog$array_remove;function module$contents$goog$array_removeLast(a,b){b=module$contents$goog$array_lastIndexOf(a,b);return 0<=b?(module$contents$goog$array_removeAt(a,b),!0):!1}goog.array.removeLast=module$contents$goog$array_removeLast;\nfunction module$contents$goog$array_removeAt(a,b){goog.asserts.assert(null!=a.length);return 1==Array.prototype.splice.call(a,b,1).length}goog.array.removeAt=module$contents$goog$array_removeAt;function module$contents$goog$array_removeIf(a,b,c){b=module$contents$goog$array_findIndex(a,b,c);return 0<=b?(module$contents$goog$array_removeAt(a,b),!0):!1}goog.array.removeIf=module$contents$goog$array_removeIf;\nfunction module$contents$goog$array_removeAllIf(a,b,c){var d=0;module$contents$goog$array_forEachRight(a,function(e,f){b.call(c,e,f,a)&&module$contents$goog$array_removeAt(a,f)&&d++});return d}goog.array.removeAllIf=module$contents$goog$array_removeAllIf;function module$contents$goog$array_concat(a){return Array.prototype.concat.apply([],arguments)}goog.array.concat=module$contents$goog$array_concat;function module$contents$goog$array_join(a){return Array.prototype.concat.apply([],arguments)}\ngoog.array.join=module$contents$goog$array_join;function module$contents$goog$array_toArray(a){var b=a.length;if(0<b){for(var c=Array(b),d=0;d<b;d++)c[d]=a[d];return c}return[]}var module$contents$goog$array_clone=goog.array.toArray=module$contents$goog$array_toArray;goog.array.clone=module$contents$goog$array_clone;\nfunction module$contents$goog$array_extend(a,b){for(var c=1;c<arguments.length;c++){var d=arguments[c];if(goog.isArrayLike(d)){var e=a.length||0,f=d.length||0;a.length=e+f;for(var g=0;g<f;g++)a[e+g]=d[g]}else a.push(d)}}goog.array.extend=module$contents$goog$array_extend;function module$contents$goog$array_splice(a,b,c,d){goog.asserts.assert(null!=a.length);return Array.prototype.splice.apply(a,module$contents$goog$array_slice(arguments,1))}goog.array.splice=module$contents$goog$array_splice;\nfunction module$contents$goog$array_slice(a,b,c){goog.asserts.assert(null!=a.length);return 2>=arguments.length?Array.prototype.slice.call(a,b):Array.prototype.slice.call(a,b,c)}goog.array.slice=module$contents$goog$array_slice;\nfunction module$contents$goog$array_removeDuplicates(a,b,c){b=b||a;var d=function(k){return goog.isObject(k)?\"o\"+goog.getUid(k):(typeof k).charAt(0)+k};c=c||d;d={};for(var e=0,f=0;f<a.length;){var g=a[f++],h=c(g);Object.prototype.hasOwnProperty.call(d,h)||(d[h]=!0,b[e++]=g)}b.length=e}goog.array.removeDuplicates=module$contents$goog$array_removeDuplicates;\nfunction module$contents$goog$array_binarySearch(a,b,c){return module$contents$goog$array_binarySearch_(a,c||module$contents$goog$array_defaultCompare,!1,b)}goog.array.binarySearch=module$contents$goog$array_binarySearch;function module$contents$goog$array_binarySelect(a,b,c){return module$contents$goog$array_binarySearch_(a,b,!0,void 0,c)}goog.array.binarySelect=module$contents$goog$array_binarySelect;\nfunction module$contents$goog$array_binarySearch_(a,b,c,d,e){for(var f=0,g=a.length,h;f<g;){var k=f+(g-f>>>1);var l=c?b.call(e,a[k],k,a):b(d,a[k]);0<l?f=k+1:(g=k,h=!l)}return h?f:-f-1}function module$contents$goog$array_sort(a,b){a.sort(b||module$contents$goog$array_defaultCompare)}goog.array.sort=module$contents$goog$array_sort;\nfunction module$contents$goog$array_stableSort(a,b){for(var c=Array(a.length),d=0;d<a.length;d++)c[d]={index:d,value:a[d]};var e=b||module$contents$goog$array_defaultCompare;module$contents$goog$array_sort(c,function(f,g){return e(f.value,g.value)||f.index-g.index});for(d=0;d<a.length;d++)a[d]=c[d].value}goog.array.stableSort=module$contents$goog$array_stableSort;\nfunction module$contents$goog$array_sortByKey(a,b,c){var d=c||module$contents$goog$array_defaultCompare;module$contents$goog$array_sort(a,function(e,f){return d(b(e),b(f))})}goog.array.sortByKey=module$contents$goog$array_sortByKey;function module$contents$goog$array_sortObjectsByKey(a,b,c){module$contents$goog$array_sortByKey(a,function(d){return d[b]},c)}goog.array.sortObjectsByKey=module$contents$goog$array_sortObjectsByKey;\nfunction module$contents$goog$array_isSorted(a,b,c){b=b||module$contents$goog$array_defaultCompare;for(var d=1;d<a.length;d++){var e=b(a[d-1],a[d]);if(0<e||0==e&&c)return!1}return!0}goog.array.isSorted=module$contents$goog$array_isSorted;function module$contents$goog$array_equals(a,b,c){if(!goog.isArrayLike(a)||!goog.isArrayLike(b)||a.length!=b.length)return!1;var d=a.length;c=c||module$contents$goog$array_defaultCompareEquality;for(var e=0;e<d;e++)if(!c(a[e],b[e]))return!1;return!0}\ngoog.array.equals=module$contents$goog$array_equals;function module$contents$goog$array_compare3(a,b,c){c=c||module$contents$goog$array_defaultCompare;for(var d=Math.min(a.length,b.length),e=0;e<d;e++){var f=c(a[e],b[e]);if(0!=f)return f}return module$contents$goog$array_defaultCompare(a.length,b.length)}goog.array.compare3=module$contents$goog$array_compare3;function module$contents$goog$array_defaultCompare(a,b){return a>b?1:a<b?-1:0}goog.array.defaultCompare=module$contents$goog$array_defaultCompare;\nfunction module$contents$goog$array_inverseDefaultCompare(a,b){return-module$contents$goog$array_defaultCompare(a,b)}goog.array.inverseDefaultCompare=module$contents$goog$array_inverseDefaultCompare;function module$contents$goog$array_defaultCompareEquality(a,b){return a===b}goog.array.defaultCompareEquality=module$contents$goog$array_defaultCompareEquality;\nfunction module$contents$goog$array_binaryInsert(a,b,c){c=module$contents$goog$array_binarySearch(a,b,c);return 0>c?(module$contents$goog$array_insertAt(a,b,-(c+1)),!0):!1}goog.array.binaryInsert=module$contents$goog$array_binaryInsert;function module$contents$goog$array_binaryRemove(a,b,c){b=module$contents$goog$array_binarySearch(a,b,c);return 0<=b?module$contents$goog$array_removeAt(a,b):!1}goog.array.binaryRemove=module$contents$goog$array_binaryRemove;\nfunction module$contents$goog$array_bucket(a,b,c){for(var d={},e=0;e<a.length;e++){var f=a[e],g=b.call(c,f,e,a);void 0!==g&&(d[g]||(d[g]=[])).push(f)}return d}goog.array.bucket=module$contents$goog$array_bucket;function module$contents$goog$array_toObject(a,b,c){var d={};module$contents$goog$array_forEach(a,function(e,f){d[b.call(c,e,f,a)]=e});return d}goog.array.toObject=module$contents$goog$array_toObject;\nfunction module$contents$goog$array_range(a,b,c){var d=[],e=0,f=a;c=c||1;void 0!==b&&(e=a,f=b);if(0>c*(f-e))return[];if(0<c)for(a=e;a<f;a+=c)d.push(a);else for(a=e;a>f;a+=c)d.push(a);return d}goog.array.range=module$contents$goog$array_range;function module$contents$goog$array_repeat(a,b){for(var c=[],d=0;d<b;d++)c[d]=a;return c}goog.array.repeat=module$contents$goog$array_repeat;\nfunction module$contents$goog$array_flatten(a){for(var b=[],c=0;c<arguments.length;c++){var d=arguments[c];if(Array.isArray(d))for(var e=0;e<d.length;e+=8192){var f=module$contents$goog$array_slice(d,e,e+8192);f=module$contents$goog$array_flatten.apply(null,f);for(var g=0;g<f.length;g++)b.push(f[g])}else b.push(d)}return b}goog.array.flatten=module$contents$goog$array_flatten;\nfunction module$contents$goog$array_rotate(a,b){goog.asserts.assert(null!=a.length);a.length&&(b%=a.length,0<b?Array.prototype.unshift.apply(a,a.splice(-b,b)):0>b&&Array.prototype.push.apply(a,a.splice(0,-b)));return a}goog.array.rotate=module$contents$goog$array_rotate;function module$contents$goog$array_moveItem(a,b,c){goog.asserts.assert(0<=b&&b<a.length);goog.asserts.assert(0<=c&&c<a.length);b=Array.prototype.splice.call(a,b,1);Array.prototype.splice.call(a,c,0,b[0])}goog.array.moveItem=module$contents$goog$array_moveItem;\nfunction module$contents$goog$array_zip(a){if(!arguments.length)return[];for(var b=[],c=arguments[0].length,d=1;d<arguments.length;d++)arguments[d].length<c&&(c=arguments[d].length);for(d=0;d<c;d++){for(var e=[],f=0;f<arguments.length;f++)e.push(arguments[f][d]);b.push(e)}return b}goog.array.zip=module$contents$goog$array_zip;function module$contents$goog$array_shuffle(a,b){b=b||Math.random;for(var c=a.length-1;0<c;c--){var d=Math.floor(b()*(c+1)),e=a[c];a[c]=a[d];a[d]=e}}goog.array.shuffle=module$contents$goog$array_shuffle;\nfunction module$contents$goog$array_copyByIndex(a,b){var c=[];module$contents$goog$array_forEach(b,function(d){c.push(a[d])});return c}goog.array.copyByIndex=module$contents$goog$array_copyByIndex;function module$contents$goog$array_concatMap(a,b,c){return module$contents$goog$array_concat.apply([],module$contents$goog$array_map(a,b,c))}goog.array.concatMap=module$contents$goog$array_concatMap;goog.dom.asserts={};goog.dom.asserts.assertIsLocation=function(a){if(goog.asserts.ENABLE_ASSERTS){var b=goog.dom.asserts.getWindow_(a);b&&(!a||!(a instanceof b.Location)&&a instanceof b.Element)&&goog.asserts.fail(\"Argument is not a Location (or a non-Element mock); got: %s\",goog.dom.asserts.debugStringForType_(a))}return a};\ngoog.dom.asserts.assertIsElementType_=function(a,b){if(goog.asserts.ENABLE_ASSERTS){var c=goog.dom.asserts.getWindow_(a);c&&\"undefined\"!=typeof c[b]&&(a&&(a instanceof c[b]||!(a instanceof c.Location||a instanceof c.Element))||goog.asserts.fail(\"Argument is not a %s (or a non-Element, non-Location mock); got: %s\",b,goog.dom.asserts.debugStringForType_(a)))}return a};goog.dom.asserts.assertIsHTMLAnchorElement=function(a){return goog.dom.asserts.assertIsElementType_(a,\"HTMLAnchorElement\")};\ngoog.dom.asserts.assertIsHTMLButtonElement=function(a){return goog.dom.asserts.assertIsElementType_(a,\"HTMLButtonElement\")};goog.dom.asserts.assertIsHTMLLinkElement=function(a){return goog.dom.asserts.assertIsElementType_(a,\"HTMLLinkElement\")};goog.dom.asserts.assertIsHTMLImageElement=function(a){return goog.dom.asserts.assertIsElementType_(a,\"HTMLImageElement\")};goog.dom.asserts.assertIsHTMLAudioElement=function(a){return goog.dom.asserts.assertIsElementType_(a,\"HTMLAudioElement\")};\ngoog.dom.asserts.assertIsHTMLVideoElement=function(a){return goog.dom.asserts.assertIsElementType_(a,\"HTMLVideoElement\")};goog.dom.asserts.assertIsHTMLInputElement=function(a){return goog.dom.asserts.assertIsElementType_(a,\"HTMLInputElement\")};goog.dom.asserts.assertIsHTMLTextAreaElement=function(a){return goog.dom.asserts.assertIsElementType_(a,\"HTMLTextAreaElement\")};goog.dom.asserts.assertIsHTMLCanvasElement=function(a){return goog.dom.asserts.assertIsElementType_(a,\"HTMLCanvasElement\")};\ngoog.dom.asserts.assertIsHTMLEmbedElement=function(a){return goog.dom.asserts.assertIsElementType_(a,\"HTMLEmbedElement\")};goog.dom.asserts.assertIsHTMLFormElement=function(a){return goog.dom.asserts.assertIsElementType_(a,\"HTMLFormElement\")};goog.dom.asserts.assertIsHTMLFrameElement=function(a){return goog.dom.asserts.assertIsElementType_(a,\"HTMLFrameElement\")};goog.dom.asserts.assertIsHTMLIFrameElement=function(a){return goog.dom.asserts.assertIsElementType_(a,\"HTMLIFrameElement\")};\ngoog.dom.asserts.assertIsHTMLObjectElement=function(a){return goog.dom.asserts.assertIsElementType_(a,\"HTMLObjectElement\")};goog.dom.asserts.assertIsHTMLScriptElement=function(a){return goog.dom.asserts.assertIsElementType_(a,\"HTMLScriptElement\")};\ngoog.dom.asserts.debugStringForType_=function(a){if(goog.isObject(a))try{return a.constructor.displayName||a.constructor.name||Object.prototype.toString.call(a)}catch(b){return\"<object could not be stringified>\"}else return void 0===a?\"undefined\":null===a?\"null\":typeof a};goog.dom.asserts.getWindow_=function(a){try{var b=a&&a.ownerDocument,c=b&&(b.defaultView||b.parentWindow);c=c||goog.global;if(c.Element&&c.Location)return c}catch(d){}return null};goog.dom.HtmlElement=function(){};goog.functions={};goog.functions.constant=function(a){return function(){return a}};goog.functions.FALSE=function(){return!1};goog.functions.TRUE=function(){return!0};goog.functions.NULL=function(){return null};goog.functions.identity=function(a,b){return a};goog.functions.error=function(a){return function(){throw Error(a);}};goog.functions.fail=function(a){return function(){throw a;}};\ngoog.functions.lock=function(a,b){b=b||0;return function(){return a.apply(this,Array.prototype.slice.call(arguments,0,b))}};goog.functions.nth=function(a){return function(){return arguments[a]}};goog.functions.partialRight=function(a,b){var c=Array.prototype.slice.call(arguments,1);return function(){var d=this;d===goog.global&&(d=void 0);var e=Array.prototype.slice.call(arguments);e.push.apply(e,c);return a.apply(d,e)}};\ngoog.functions.withReturnValue=function(a,b){return goog.functions.sequence(a,goog.functions.constant(b))};goog.functions.equalTo=function(a,b){return function(c){return b?a==c:a===c}};goog.functions.compose=function(a,b){var c=arguments,d=c.length;return function(){var e;d&&(e=c[d-1].apply(this,arguments));for(var f=d-2;0<=f;f--)e=c[f].call(this,e);return e}};goog.functions.sequence=function(a){var b=arguments,c=b.length;return function(){for(var d,e=0;e<c;e++)d=b[e].apply(this,arguments);return d}};\ngoog.functions.and=function(a){var b=arguments,c=b.length;return function(){for(var d=0;d<c;d++)if(!b[d].apply(this,arguments))return!1;return!0}};goog.functions.or=function(a){var b=arguments,c=b.length;return function(){for(var d=0;d<c;d++)if(b[d].apply(this,arguments))return!0;return!1}};goog.functions.not=function(a){return function(){return!a.apply(this,arguments)}};\ngoog.functions.create=function(a,b){var c=function(){};c.prototype=a.prototype;c=new c;a.apply(c,Array.prototype.slice.call(arguments,1));return c};goog.functions.CACHE_RETURN_VALUE=!0;goog.functions.cacheReturnValue=function(a){var b=!1,c;return function(){if(!goog.functions.CACHE_RETURN_VALUE)return a();b||(c=a(),b=!0);return c}};goog.functions.once=function(a){var b=a;return function(){if(b){var c=b;b=null;c()}}};\ngoog.functions.debounce=function(a,b,c){var d=0;return function(e){goog.global.clearTimeout(d);var f=arguments;d=goog.global.setTimeout(function(){a.apply(c,f)},b)}};goog.functions.throttle=function(a,b,c){var d=0,e=!1,f=[],g=function(){d=0;e&&(e=!1,h())},h=function(){d=goog.global.setTimeout(g,b);a.apply(c,f)};return function(k){f=arguments;d?e=!0:h()}};goog.functions.rateLimit=function(a,b,c){var d=0,e=function(){d=0};return function(f){d||(d=goog.global.setTimeout(e,b),a.apply(c,arguments))}};\ngoog.functions.isFunction=function(a){return\"function\"===typeof a};goog.dom.TagName=function(){};goog.dom.TagName.cast=function(a,b){return a};goog.dom.TagName.prototype.toString=function(){};goog.dom.TagName.A=\"A\";goog.dom.TagName.ABBR=\"ABBR\";goog.dom.TagName.ACRONYM=\"ACRONYM\";goog.dom.TagName.ADDRESS=\"ADDRESS\";goog.dom.TagName.APPLET=\"APPLET\";goog.dom.TagName.AREA=\"AREA\";goog.dom.TagName.ARTICLE=\"ARTICLE\";goog.dom.TagName.ASIDE=\"ASIDE\";goog.dom.TagName.AUDIO=\"AUDIO\";goog.dom.TagName.B=\"B\";goog.dom.TagName.BASE=\"BASE\";goog.dom.TagName.BASEFONT=\"BASEFONT\";\ngoog.dom.TagName.BDI=\"BDI\";goog.dom.TagName.BDO=\"BDO\";goog.dom.TagName.BIG=\"BIG\";goog.dom.TagName.BLOCKQUOTE=\"BLOCKQUOTE\";goog.dom.TagName.BODY=\"BODY\";goog.dom.TagName.BR=\"BR\";goog.dom.TagName.BUTTON=\"BUTTON\";goog.dom.TagName.CANVAS=\"CANVAS\";goog.dom.TagName.CAPTION=\"CAPTION\";goog.dom.TagName.CENTER=\"CENTER\";goog.dom.TagName.CITE=\"CITE\";goog.dom.TagName.CODE=\"CODE\";goog.dom.TagName.COL=\"COL\";goog.dom.TagName.COLGROUP=\"COLGROUP\";goog.dom.TagName.COMMAND=\"COMMAND\";goog.dom.TagName.DATA=\"DATA\";\ngoog.dom.TagName.DATALIST=\"DATALIST\";goog.dom.TagName.DD=\"DD\";goog.dom.TagName.DEL=\"DEL\";goog.dom.TagName.DETAILS=\"DETAILS\";goog.dom.TagName.DFN=\"DFN\";goog.dom.TagName.DIALOG=\"DIALOG\";goog.dom.TagName.DIR=\"DIR\";goog.dom.TagName.DIV=\"DIV\";goog.dom.TagName.DL=\"DL\";goog.dom.TagName.DT=\"DT\";goog.dom.TagName.EM=\"EM\";goog.dom.TagName.EMBED=\"EMBED\";goog.dom.TagName.FIELDSET=\"FIELDSET\";goog.dom.TagName.FIGCAPTION=\"FIGCAPTION\";goog.dom.TagName.FIGURE=\"FIGURE\";goog.dom.TagName.FONT=\"FONT\";\ngoog.dom.TagName.FOOTER=\"FOOTER\";goog.dom.TagName.FORM=\"FORM\";goog.dom.TagName.FRAME=\"FRAME\";goog.dom.TagName.FRAMESET=\"FRAMESET\";goog.dom.TagName.H1=\"H1\";goog.dom.TagName.H2=\"H2\";goog.dom.TagName.H3=\"H3\";goog.dom.TagName.H4=\"H4\";goog.dom.TagName.H5=\"H5\";goog.dom.TagName.H6=\"H6\";goog.dom.TagName.HEAD=\"HEAD\";goog.dom.TagName.HEADER=\"HEADER\";goog.dom.TagName.HGROUP=\"HGROUP\";goog.dom.TagName.HR=\"HR\";goog.dom.TagName.HTML=\"HTML\";goog.dom.TagName.I=\"I\";goog.dom.TagName.IFRAME=\"IFRAME\";\ngoog.dom.TagName.IMG=\"IMG\";goog.dom.TagName.INPUT=\"INPUT\";goog.dom.TagName.INS=\"INS\";goog.dom.TagName.ISINDEX=\"ISINDEX\";goog.dom.TagName.KBD=\"KBD\";goog.dom.TagName.KEYGEN=\"KEYGEN\";goog.dom.TagName.LABEL=\"LABEL\";goog.dom.TagName.LEGEND=\"LEGEND\";goog.dom.TagName.LI=\"LI\";goog.dom.TagName.LINK=\"LINK\";goog.dom.TagName.MAIN=\"MAIN\";goog.dom.TagName.MAP=\"MAP\";goog.dom.TagName.MARK=\"MARK\";goog.dom.TagName.MATH=\"MATH\";goog.dom.TagName.MENU=\"MENU\";goog.dom.TagName.MENUITEM=\"MENUITEM\";goog.dom.TagName.META=\"META\";\ngoog.dom.TagName.METER=\"METER\";goog.dom.TagName.NAV=\"NAV\";goog.dom.TagName.NOFRAMES=\"NOFRAMES\";goog.dom.TagName.NOSCRIPT=\"NOSCRIPT\";goog.dom.TagName.OBJECT=\"OBJECT\";goog.dom.TagName.OL=\"OL\";goog.dom.TagName.OPTGROUP=\"OPTGROUP\";goog.dom.TagName.OPTION=\"OPTION\";goog.dom.TagName.OUTPUT=\"OUTPUT\";goog.dom.TagName.P=\"P\";goog.dom.TagName.PARAM=\"PARAM\";goog.dom.TagName.PICTURE=\"PICTURE\";goog.dom.TagName.PRE=\"PRE\";goog.dom.TagName.PROGRESS=\"PROGRESS\";goog.dom.TagName.Q=\"Q\";goog.dom.TagName.RP=\"RP\";\ngoog.dom.TagName.RT=\"RT\";goog.dom.TagName.RTC=\"RTC\";goog.dom.TagName.RUBY=\"RUBY\";goog.dom.TagName.S=\"S\";goog.dom.TagName.SAMP=\"SAMP\";goog.dom.TagName.SCRIPT=\"SCRIPT\";goog.dom.TagName.SECTION=\"SECTION\";goog.dom.TagName.SELECT=\"SELECT\";goog.dom.TagName.SMALL=\"SMALL\";goog.dom.TagName.SOURCE=\"SOURCE\";goog.dom.TagName.SPAN=\"SPAN\";goog.dom.TagName.STRIKE=\"STRIKE\";goog.dom.TagName.STRONG=\"STRONG\";goog.dom.TagName.STYLE=\"STYLE\";goog.dom.TagName.SUB=\"SUB\";goog.dom.TagName.SUMMARY=\"SUMMARY\";\ngoog.dom.TagName.SUP=\"SUP\";goog.dom.TagName.SVG=\"SVG\";goog.dom.TagName.TABLE=\"TABLE\";goog.dom.TagName.TBODY=\"TBODY\";goog.dom.TagName.TD=\"TD\";goog.dom.TagName.TEMPLATE=\"TEMPLATE\";goog.dom.TagName.TEXTAREA=\"TEXTAREA\";goog.dom.TagName.TFOOT=\"TFOOT\";goog.dom.TagName.TH=\"TH\";goog.dom.TagName.THEAD=\"THEAD\";goog.dom.TagName.TIME=\"TIME\";goog.dom.TagName.TITLE=\"TITLE\";goog.dom.TagName.TR=\"TR\";goog.dom.TagName.TRACK=\"TRACK\";goog.dom.TagName.TT=\"TT\";goog.dom.TagName.U=\"U\";goog.dom.TagName.UL=\"UL\";\ngoog.dom.TagName.VAR=\"VAR\";goog.dom.TagName.VIDEO=\"VIDEO\";goog.dom.TagName.WBR=\"WBR\";goog.object={};goog.object.forEach=function(a,b,c){for(var d in a)b.call(c,a[d],d,a)};goog.object.filter=function(a,b,c){var d={},e;for(e in a)b.call(c,a[e],e,a)&&(d[e]=a[e]);return d};goog.object.map=function(a,b,c){var d={},e;for(e in a)d[e]=b.call(c,a[e],e,a);return d};goog.object.some=function(a,b,c){for(var d in a)if(b.call(c,a[d],d,a))return!0;return!1};goog.object.every=function(a,b,c){for(var d in a)if(!b.call(c,a[d],d,a))return!1;return!0};\ngoog.object.getCount=function(a){var b=0,c;for(c in a)b++;return b};goog.object.getAnyKey=function(a){for(var b in a)return b};goog.object.getAnyValue=function(a){for(var b in a)return a[b]};goog.object.contains=function(a,b){return goog.object.containsValue(a,b)};goog.object.getValues=function(a){var b=[],c=0,d;for(d in a)b[c++]=a[d];return b};goog.object.getKeys=function(a){var b=[],c=0,d;for(d in a)b[c++]=d;return b};\ngoog.object.getValueByKeys=function(a,b){var c=goog.isArrayLike(b),d=c?b:arguments;for(c=c?0:1;c<d.length;c++){if(null==a)return;a=a[d[c]]}return a};goog.object.containsKey=function(a,b){return null!==a&&b in a};goog.object.containsValue=function(a,b){for(var c in a)if(a[c]==b)return!0;return!1};goog.object.findKey=function(a,b,c){for(var d in a)if(b.call(c,a[d],d,a))return d};goog.object.findValue=function(a,b,c){return(b=goog.object.findKey(a,b,c))&&a[b]};\ngoog.object.isEmpty=function(a){for(var b in a)return!1;return!0};goog.object.clear=function(a){for(var b in a)delete a[b]};goog.object.remove=function(a,b){var c;(c=b in a)&&delete a[b];return c};goog.object.add=function(a,b,c){if(null!==a&&b in a)throw Error('The object already contains the key \"'+b+'\"');goog.object.set(a,b,c)};goog.object.get=function(a,b,c){return null!==a&&b in a?a[b]:c};goog.object.set=function(a,b,c){a[b]=c};\ngoog.object.setIfUndefined=function(a,b,c){return b in a?a[b]:a[b]=c};goog.object.setWithReturnValueIfNotSet=function(a,b,c){if(b in a)return a[b];c=c();return a[b]=c};goog.object.equals=function(a,b){for(var c in a)if(!(c in b)||a[c]!==b[c])return!1;for(var d in b)if(!(d in a))return!1;return!0};goog.object.clone=function(a){var b={},c;for(c in a)b[c]=a[c];return b};\ngoog.object.unsafeClone=function(a){if(!a||\"object\"!==typeof a)return a;if(\"function\"===typeof a.clone)return a.clone();var b=Array.isArray(a)?[]:\"function\"!==typeof ArrayBuffer||\"function\"!==typeof ArrayBuffer.isView||!ArrayBuffer.isView(a)||a instanceof DataView?{}:new a.constructor(a.length),c;for(c in a)b[c]=goog.object.unsafeClone(a[c]);return b};goog.object.transpose=function(a){var b={},c;for(c in a)b[a[c]]=c;return b};goog.object.PROTOTYPE_FIELDS_=\"constructor hasOwnProperty isPrototypeOf propertyIsEnumerable toLocaleString toString valueOf\".split(\" \");\ngoog.object.extend=function(a,b){for(var c,d,e=1;e<arguments.length;e++){d=arguments[e];for(c in d)a[c]=d[c];for(var f=0;f<goog.object.PROTOTYPE_FIELDS_.length;f++)c=goog.object.PROTOTYPE_FIELDS_[f],Object.prototype.hasOwnProperty.call(d,c)&&(a[c]=d[c])}};\ngoog.object.create=function(a){var b=arguments.length;if(1==b&&Array.isArray(arguments[0]))return goog.object.create.apply(null,arguments[0]);if(b%2)throw Error(\"Uneven number of arguments\");for(var c={},d=0;d<b;d+=2)c[arguments[d]]=arguments[d+1];return c};goog.object.createSet=function(a){var b=arguments.length;if(1==b&&Array.isArray(arguments[0]))return goog.object.createSet.apply(null,arguments[0]);for(var c={},d=0;d<b;d++)c[arguments[d]]=!0;return c};\ngoog.object.createImmutableView=function(a){var b=a;Object.isFrozen&&!Object.isFrozen(a)&&(b=Object.create(a),Object.freeze(b));return b};goog.object.isImmutableView=function(a){return!!Object.isFrozen&&Object.isFrozen(a)};\ngoog.object.getAllPropertyNames=function(a,b,c){if(!a)return[];if(!Object.getOwnPropertyNames||!Object.getPrototypeOf)return goog.object.getKeys(a);for(var d={};a&&(a!==Object.prototype||b)&&(a!==Function.prototype||c);){for(var e=Object.getOwnPropertyNames(a),f=0;f<e.length;f++)d[e[f]]=!0;a=Object.getPrototypeOf(a)}return goog.object.getKeys(d)};goog.object.getSuperClass=function(a){return(a=Object.getPrototypeOf(a.prototype))&&a.constructor};goog.dom.tags={};goog.dom.tags.VOID_TAGS_={area:!0,base:!0,br:!0,col:!0,command:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0};goog.dom.tags.isVoidTag=function(a){return!0===goog.dom.tags.VOID_TAGS_[a]};goog.string={};goog.string.TypedString=function(){};goog.string.Const=function(a,b){this.stringConstValueWithSecurityContract__googStringSecurityPrivate_=a===goog.string.Const.GOOG_STRING_CONSTRUCTOR_TOKEN_PRIVATE_&&b||\"\";this.STRING_CONST_TYPE_MARKER__GOOG_STRING_SECURITY_PRIVATE_=goog.string.Const.TYPE_MARKER_};goog.string.Const.prototype.implementsGoogStringTypedString=!0;goog.string.Const.prototype.getTypedStringValue=function(){return this.stringConstValueWithSecurityContract__googStringSecurityPrivate_};\ngoog.DEBUG&&(goog.string.Const.prototype.toString=function(){return\"Const{\"+this.stringConstValueWithSecurityContract__googStringSecurityPrivate_+\"}\"});goog.string.Const.unwrap=function(a){if(a instanceof goog.string.Const&&a.constructor===goog.string.Const&&a.STRING_CONST_TYPE_MARKER__GOOG_STRING_SECURITY_PRIVATE_===goog.string.Const.TYPE_MARKER_)return a.stringConstValueWithSecurityContract__googStringSecurityPrivate_;goog.asserts.fail(\"expected object of type Const, got '\"+a+\"'\");return\"type_error:Const\"};\ngoog.string.Const.from=function(a){return new goog.string.Const(goog.string.Const.GOOG_STRING_CONSTRUCTOR_TOKEN_PRIVATE_,a)};goog.string.Const.TYPE_MARKER_={};goog.string.Const.GOOG_STRING_CONSTRUCTOR_TOKEN_PRIVATE_={};goog.string.Const.EMPTY=goog.string.Const.from(\"\");goog.html={};goog.html.trustedtypes={};goog.html.trustedtypes.getPolicyPrivateDoNotAccessOrElse=function(){if(!goog.TRUSTED_TYPES_POLICY_NAME)return null;void 0===goog.html.trustedtypes.cachedPolicy_&&(goog.html.trustedtypes.cachedPolicy_=goog.createTrustedTypesPolicy(goog.TRUSTED_TYPES_POLICY_NAME+\"#html\"));return goog.html.trustedtypes.cachedPolicy_};var module$contents$goog$html$SafeScript_CONSTRUCTOR_TOKEN_PRIVATE={},module$contents$goog$html$SafeScript_SafeScript=function(a,b){this.privateDoNotAccessOrElseSafeScriptWrappedValue_=b===module$contents$goog$html$SafeScript_CONSTRUCTOR_TOKEN_PRIVATE?a:\"\";this.implementsGoogStringTypedString=!0};module$contents$goog$html$SafeScript_SafeScript.fromConstant=function(a){a=goog.string.Const.unwrap(a);return 0===a.length?module$contents$goog$html$SafeScript_SafeScript.EMPTY:module$contents$goog$html$SafeScript_SafeScript.createSafeScriptSecurityPrivateDoNotAccessOrElse(a)};\nmodule$contents$goog$html$SafeScript_SafeScript.fromConstantAndArgs=function(a,b){for(var c=[],d=1;d<arguments.length;d++)c.push(module$contents$goog$html$SafeScript_SafeScript.stringify_(arguments[d]));return module$contents$goog$html$SafeScript_SafeScript.createSafeScriptSecurityPrivateDoNotAccessOrElse(\"(\"+goog.string.Const.unwrap(a)+\")(\"+c.join(\", \")+\");\")};module$contents$goog$html$SafeScript_SafeScript.fromJson=function(a){return module$contents$goog$html$SafeScript_SafeScript.createSafeScriptSecurityPrivateDoNotAccessOrElse(module$contents$goog$html$SafeScript_SafeScript.stringify_(a))};\nmodule$contents$goog$html$SafeScript_SafeScript.prototype.getTypedStringValue=function(){return this.privateDoNotAccessOrElseSafeScriptWrappedValue_.toString()};module$contents$goog$html$SafeScript_SafeScript.unwrap=function(a){return module$contents$goog$html$SafeScript_SafeScript.unwrapTrustedScript(a).toString()};\nmodule$contents$goog$html$SafeScript_SafeScript.unwrapTrustedScript=function(a){if(a instanceof module$contents$goog$html$SafeScript_SafeScript&&a.constructor===module$contents$goog$html$SafeScript_SafeScript)return a.privateDoNotAccessOrElseSafeScriptWrappedValue_;(0,goog.asserts.fail)(\"expected object of type SafeScript, got '\"+a+\"' of type \"+goog.typeOf(a));return\"type_error:SafeScript\"};\nmodule$contents$goog$html$SafeScript_SafeScript.stringify_=function(a){return JSON.stringify(a).replace(/</g,\"\\\\x3c\")};module$contents$goog$html$SafeScript_SafeScript.createSafeScriptSecurityPrivateDoNotAccessOrElse=function(a){var b=goog.html.trustedtypes.getPolicyPrivateDoNotAccessOrElse();a=b?b.createScript(a):a;return new module$contents$goog$html$SafeScript_SafeScript(a,module$contents$goog$html$SafeScript_CONSTRUCTOR_TOKEN_PRIVATE)};\ngoog.DEBUG&&(module$contents$goog$html$SafeScript_SafeScript.prototype.toString=function(){return\"SafeScript{\"+this.privateDoNotAccessOrElseSafeScriptWrappedValue_+\"}\"});module$contents$goog$html$SafeScript_SafeScript.EMPTY=function(){return module$contents$goog$html$SafeScript_SafeScript.createSafeScriptSecurityPrivateDoNotAccessOrElse(\"\")}();goog.html.SafeScript=module$contents$goog$html$SafeScript_SafeScript;goog.fs={};goog.fs.url={};goog.fs.url.createObjectUrl=function(a){return goog.fs.url.getUrlObject_().createObjectURL(a)};goog.fs.url.revokeObjectUrl=function(a){goog.fs.url.getUrlObject_().revokeObjectURL(a)};goog.fs.url.UrlObject_=function(){};goog.fs.url.UrlObject_.prototype.createObjectURL=function(a){};goog.fs.url.UrlObject_.prototype.revokeObjectURL=function(a){};\ngoog.fs.url.getUrlObject_=function(){var a=goog.fs.url.findUrlObject_();if(null!=a)return a;throw Error(\"This browser doesn't seem to support blob URLs\");};goog.fs.url.findUrlObject_=function(){return void 0!==goog.global.URL&&void 0!==goog.global.URL.createObjectURL?goog.global.URL:void 0!==goog.global.webkitURL&&void 0!==goog.global.webkitURL.createObjectURL?goog.global.webkitURL:void 0!==goog.global.createObjectURL?goog.global:null};\ngoog.fs.url.browserSupportsObjectUrls=function(){return null!=goog.fs.url.findUrlObject_()};goog.fs.blob={};goog.fs.blob.getBlob=function(a){var b=goog.global.BlobBuilder||goog.global.WebKitBlobBuilder;if(void 0!==b){b=new b;for(var c=0;c<arguments.length;c++)b.append(arguments[c]);return b.getBlob()}return goog.fs.blob.getBlobWithProperties(module$contents$goog$array_toArray(arguments))};\ngoog.fs.blob.getBlobWithProperties=function(a,b,c){var d=goog.global.BlobBuilder||goog.global.WebKitBlobBuilder;if(void 0!==d){d=new d;for(var e=0;e<a.length;e++)d.append(a[e],c);return d.getBlob(b)}if(void 0!==goog.global.Blob)return d={},b&&(d.type=b),c&&(d.endings=c),new Blob(a,d);throw Error(\"This browser doesn't seem to support creating Blobs\");};goog.i18n={};goog.i18n.bidi={};goog.i18n.bidi.FORCE_RTL=!1;\ngoog.i18n.bidi.IS_RTL=goog.i18n.bidi.FORCE_RTL||(\"ar\"==goog.LOCALE.substring(0,2).toLowerCase()||\"fa\"==goog.LOCALE.substring(0,2).toLowerCase()||\"he\"==goog.LOCALE.substring(0,2).toLowerCase()||\"iw\"==goog.LOCALE.substring(0,2).toLowerCase()||\"ps\"==goog.LOCALE.substring(0,2).toLowerCase()||\"sd\"==goog.LOCALE.substring(0,2).toLowerCase()||\"ug\"==goog.LOCALE.substring(0,2).toLowerCase()||\"ur\"==goog.LOCALE.substring(0,2).toLowerCase()||\"yi\"==goog.LOCALE.substring(0,2).toLowerCase())&&(2==goog.LOCALE.length||\n\"-\"==goog.LOCALE.substring(2,3)||\"_\"==goog.LOCALE.substring(2,3))||3<=goog.LOCALE.length&&\"ckb\"==goog.LOCALE.substring(0,3).toLowerCase()&&(3==goog.LOCALE.length||\"-\"==goog.LOCALE.substring(3,4)||\"_\"==goog.LOCALE.substring(3,4))||7<=goog.LOCALE.length&&(\"-\"==goog.LOCALE.substring(2,3)||\"_\"==goog.LOCALE.substring(2,3))&&(\"adlm\"==goog.LOCALE.substring(3,7).toLowerCase()||\"arab\"==goog.LOCALE.substring(3,7).toLowerCase()||\"hebr\"==goog.LOCALE.substring(3,7).toLowerCase()||\"nkoo\"==goog.LOCALE.substring(3,\n7).toLowerCase()||\"rohg\"==goog.LOCALE.substring(3,7).toLowerCase()||\"thaa\"==goog.LOCALE.substring(3,7).toLowerCase())||8<=goog.LOCALE.length&&(\"-\"==goog.LOCALE.substring(3,4)||\"_\"==goog.LOCALE.substring(3,4))&&(\"adlm\"==goog.LOCALE.substring(4,8).toLowerCase()||\"arab\"==goog.LOCALE.substring(4,8).toLowerCase()||\"hebr\"==goog.LOCALE.substring(4,8).toLowerCase()||\"nkoo\"==goog.LOCALE.substring(4,8).toLowerCase()||\"rohg\"==goog.LOCALE.substring(4,8).toLowerCase()||\"thaa\"==goog.LOCALE.substring(4,8).toLowerCase());\ngoog.i18n.bidi.Format={LRE:\"\\u202a\",RLE:\"\\u202b\",PDF:\"\\u202c\",LRM:\"\\u200e\",RLM:\"\\u200f\"};goog.i18n.bidi.Dir={LTR:1,RTL:-1,NEUTRAL:0};goog.i18n.bidi.RIGHT=\"right\";goog.i18n.bidi.LEFT=\"left\";goog.i18n.bidi.I18N_RIGHT=goog.i18n.bidi.IS_RTL?goog.i18n.bidi.LEFT:goog.i18n.bidi.RIGHT;goog.i18n.bidi.I18N_LEFT=goog.i18n.bidi.IS_RTL?goog.i18n.bidi.RIGHT:goog.i18n.bidi.LEFT;\ngoog.i18n.bidi.toDir=function(a,b){return\"number\"==typeof a?0<a?goog.i18n.bidi.Dir.LTR:0>a?goog.i18n.bidi.Dir.RTL:b?null:goog.i18n.bidi.Dir.NEUTRAL:null==a?null:a?goog.i18n.bidi.Dir.RTL:goog.i18n.bidi.Dir.LTR};goog.i18n.bidi.ltrChars_=\"A-Za-z\\u00c0-\\u00d6\\u00d8-\\u00f6\\u00f8-\\u02b8\\u0300-\\u0590\\u0900-\\u1fff\\u200e\\u2c00-\\ud801\\ud804-\\ud839\\ud83c-\\udbff\\uf900-\\ufb1c\\ufe00-\\ufe6f\\ufefd-\\uffff\";goog.i18n.bidi.rtlChars_=\"\\u0591-\\u06ef\\u06fa-\\u08ff\\u200f\\ud802-\\ud803\\ud83a-\\ud83b\\ufb1d-\\ufdff\\ufe70-\\ufefc\";\ngoog.i18n.bidi.htmlSkipReg_=/<[^>]*>|&[^;]+;/g;goog.i18n.bidi.stripHtmlIfNeeded_=function(a,b){return b?a.replace(goog.i18n.bidi.htmlSkipReg_,\"\"):a};goog.i18n.bidi.rtlCharReg_=new RegExp(\"[\"+goog.i18n.bidi.rtlChars_+\"]\");goog.i18n.bidi.ltrCharReg_=new RegExp(\"[\"+goog.i18n.bidi.ltrChars_+\"]\");goog.i18n.bidi.hasAnyRtl=function(a,b){return goog.i18n.bidi.rtlCharReg_.test(goog.i18n.bidi.stripHtmlIfNeeded_(a,b))};goog.i18n.bidi.hasRtlChar=goog.i18n.bidi.hasAnyRtl;\ngoog.i18n.bidi.hasAnyLtr=function(a,b){return goog.i18n.bidi.ltrCharReg_.test(goog.i18n.bidi.stripHtmlIfNeeded_(a,b))};goog.i18n.bidi.ltrRe_=new RegExp(\"^[\"+goog.i18n.bidi.ltrChars_+\"]\");goog.i18n.bidi.rtlRe_=new RegExp(\"^[\"+goog.i18n.bidi.rtlChars_+\"]\");goog.i18n.bidi.isRtlChar=function(a){return goog.i18n.bidi.rtlRe_.test(a)};goog.i18n.bidi.isLtrChar=function(a){return goog.i18n.bidi.ltrRe_.test(a)};goog.i18n.bidi.isNeutralChar=function(a){return!goog.i18n.bidi.isLtrChar(a)&&!goog.i18n.bidi.isRtlChar(a)};\ngoog.i18n.bidi.ltrDirCheckRe_=new RegExp(\"^[^\"+goog.i18n.bidi.rtlChars_+\"]*[\"+goog.i18n.bidi.ltrChars_+\"]\");goog.i18n.bidi.rtlDirCheckRe_=new RegExp(\"^[^\"+goog.i18n.bidi.ltrChars_+\"]*[\"+goog.i18n.bidi.rtlChars_+\"]\");goog.i18n.bidi.startsWithRtl=function(a,b){return goog.i18n.bidi.rtlDirCheckRe_.test(goog.i18n.bidi.stripHtmlIfNeeded_(a,b))};goog.i18n.bidi.isRtlText=goog.i18n.bidi.startsWithRtl;\ngoog.i18n.bidi.startsWithLtr=function(a,b){return goog.i18n.bidi.ltrDirCheckRe_.test(goog.i18n.bidi.stripHtmlIfNeeded_(a,b))};goog.i18n.bidi.isLtrText=goog.i18n.bidi.startsWithLtr;goog.i18n.bidi.isRequiredLtrRe_=/^http:\\/\\/.*/;goog.i18n.bidi.isNeutralText=function(a,b){a=goog.i18n.bidi.stripHtmlIfNeeded_(a,b);return goog.i18n.bidi.isRequiredLtrRe_.test(a)||!goog.i18n.bidi.hasAnyLtr(a)&&!goog.i18n.bidi.hasAnyRtl(a)};\ngoog.i18n.bidi.ltrExitDirCheckRe_=new RegExp(\"[\"+goog.i18n.bidi.ltrChars_+\"][^\"+goog.i18n.bidi.rtlChars_+\"]*$\");goog.i18n.bidi.rtlExitDirCheckRe_=new RegExp(\"[\"+goog.i18n.bidi.rtlChars_+\"][^\"+goog.i18n.bidi.ltrChars_+\"]*$\");goog.i18n.bidi.endsWithLtr=function(a,b){return goog.i18n.bidi.ltrExitDirCheckRe_.test(goog.i18n.bidi.stripHtmlIfNeeded_(a,b))};goog.i18n.bidi.isLtrExitText=goog.i18n.bidi.endsWithLtr;\ngoog.i18n.bidi.endsWithRtl=function(a,b){return goog.i18n.bidi.rtlExitDirCheckRe_.test(goog.i18n.bidi.stripHtmlIfNeeded_(a,b))};goog.i18n.bidi.isRtlExitText=goog.i18n.bidi.endsWithRtl;goog.i18n.bidi.rtlLocalesRe_=/^(ar|ckb|dv|he|iw|fa|nqo|ps|sd|ug|ur|yi|.*[-_](Adlm|Arab|Hebr|Nkoo|Rohg|Thaa))(?!.*[-_](Latn|Cyrl)($|-|_))($|-|_)/i;goog.i18n.bidi.isRtlLanguage=function(a){return goog.i18n.bidi.rtlLocalesRe_.test(a)};goog.i18n.bidi.bracketGuardTextRe_=/(\\(.*?\\)+)|(\\[.*?\\]+)|(\\{.*?\\}+)|(<.*?>+)/g;\ngoog.i18n.bidi.guardBracketInText=function(a,b){b=(void 0===b?goog.i18n.bidi.hasAnyRtl(a):b)?goog.i18n.bidi.Format.RLM:goog.i18n.bidi.Format.LRM;return a.replace(goog.i18n.bidi.bracketGuardTextRe_,b+\"$&\"+b)};goog.i18n.bidi.enforceRtlInHtml=function(a){return\"<\"==a.charAt(0)?a.replace(/<\\w+/,\"$& dir=rtl\"):\"\\n<span dir=rtl>\"+a+\"</span>\"};goog.i18n.bidi.enforceRtlInText=function(a){return goog.i18n.bidi.Format.RLE+a+goog.i18n.bidi.Format.PDF};\ngoog.i18n.bidi.enforceLtrInHtml=function(a){return\"<\"==a.charAt(0)?a.replace(/<\\w+/,\"$& dir=ltr\"):\"\\n<span dir=ltr>\"+a+\"</span>\"};goog.i18n.bidi.enforceLtrInText=function(a){return goog.i18n.bidi.Format.LRE+a+goog.i18n.bidi.Format.PDF};goog.i18n.bidi.dimensionsRe_=/:\\s*([.\\d][.\\w]*)\\s+([.\\d][.\\w]*)\\s+([.\\d][.\\w]*)\\s+([.\\d][.\\w]*)/g;goog.i18n.bidi.leftRe_=/left/gi;goog.i18n.bidi.rightRe_=/right/gi;goog.i18n.bidi.tempRe_=/%%%%/g;\ngoog.i18n.bidi.mirrorCSS=function(a){return a.replace(goog.i18n.bidi.dimensionsRe_,\":$1 $4 $3 $2\").replace(goog.i18n.bidi.leftRe_,\"%%%%\").replace(goog.i18n.bidi.rightRe_,goog.i18n.bidi.LEFT).replace(goog.i18n.bidi.tempRe_,goog.i18n.bidi.RIGHT)};goog.i18n.bidi.doubleQuoteSubstituteRe_=/([\\u0591-\\u05f2])\"/g;goog.i18n.bidi.singleQuoteSubstituteRe_=/([\\u0591-\\u05f2])'/g;\ngoog.i18n.bidi.normalizeHebrewQuote=function(a){return a.replace(goog.i18n.bidi.doubleQuoteSubstituteRe_,\"$1\\u05f4\").replace(goog.i18n.bidi.singleQuoteSubstituteRe_,\"$1\\u05f3\")};goog.i18n.bidi.wordSeparatorRe_=/\\s+/;goog.i18n.bidi.hasNumeralsRe_=/[\\d\\u06f0-\\u06f9]/;goog.i18n.bidi.rtlDetectionThreshold_=.4;\ngoog.i18n.bidi.estimateDirection=function(a,b){var c=0,d=0,e=!1;a=goog.i18n.bidi.stripHtmlIfNeeded_(a,b).split(goog.i18n.bidi.wordSeparatorRe_);for(b=0;b<a.length;b++){var f=a[b];goog.i18n.bidi.startsWithRtl(f)?(c++,d++):goog.i18n.bidi.isRequiredLtrRe_.test(f)?e=!0:goog.i18n.bidi.hasAnyLtr(f)?d++:goog.i18n.bidi.hasNumeralsRe_.test(f)&&(e=!0)}return 0==d?e?goog.i18n.bidi.Dir.LTR:goog.i18n.bidi.Dir.NEUTRAL:c/d>goog.i18n.bidi.rtlDetectionThreshold_?goog.i18n.bidi.Dir.RTL:goog.i18n.bidi.Dir.LTR};\ngoog.i18n.bidi.detectRtlDirectionality=function(a,b){return goog.i18n.bidi.estimateDirection(a,b)==goog.i18n.bidi.Dir.RTL};goog.i18n.bidi.setElementDirAndAlign=function(a,b){a&&(b=goog.i18n.bidi.toDir(b))&&(a.style.textAlign=b==goog.i18n.bidi.Dir.RTL?goog.i18n.bidi.RIGHT:goog.i18n.bidi.LEFT,a.dir=b==goog.i18n.bidi.Dir.RTL?\"rtl\":\"ltr\")};\ngoog.i18n.bidi.setElementDirByTextDirectionality=function(a,b){switch(goog.i18n.bidi.estimateDirection(b)){case goog.i18n.bidi.Dir.LTR:\"ltr\"!==a.dir&&(a.dir=\"ltr\");break;case goog.i18n.bidi.Dir.RTL:\"rtl\"!==a.dir&&(a.dir=\"rtl\");break;default:a.removeAttribute(\"dir\")}};goog.i18n.bidi.DirectionalString=function(){};goog.html.TrustedResourceUrl=function(a,b){this.privateDoNotAccessOrElseTrustedResourceUrlWrappedValue_=b===goog.html.TrustedResourceUrl.CONSTRUCTOR_TOKEN_PRIVATE_?a:\"\"};goog.html.TrustedResourceUrl.prototype.implementsGoogStringTypedString=!0;goog.html.TrustedResourceUrl.prototype.getTypedStringValue=function(){return this.privateDoNotAccessOrElseTrustedResourceUrlWrappedValue_.toString()};goog.html.TrustedResourceUrl.prototype.implementsGoogI18nBidiDirectionalString=!0;\ngoog.html.TrustedResourceUrl.prototype.getDirection=function(){return goog.i18n.bidi.Dir.LTR};goog.html.TrustedResourceUrl.prototype.cloneWithParams=function(a,b){var c=goog.html.TrustedResourceUrl.unwrap(this);c=goog.html.TrustedResourceUrl.URL_PARAM_PARSER_.exec(c);var d=c[3]||\"\";return goog.html.TrustedResourceUrl.createTrustedResourceUrlSecurityPrivateDoNotAccessOrElse(c[1]+goog.html.TrustedResourceUrl.stringifyParams_(\"?\",c[2]||\"\",a)+goog.html.TrustedResourceUrl.stringifyParams_(\"#\",d,b))};\ngoog.DEBUG&&(goog.html.TrustedResourceUrl.prototype.toString=function(){return\"TrustedResourceUrl{\"+this.privateDoNotAccessOrElseTrustedResourceUrlWrappedValue_+\"}\"});goog.html.TrustedResourceUrl.unwrap=function(a){return goog.html.TrustedResourceUrl.unwrapTrustedScriptURL(a).toString()};\ngoog.html.TrustedResourceUrl.unwrapTrustedScriptURL=function(a){if(a instanceof goog.html.TrustedResourceUrl&&a.constructor===goog.html.TrustedResourceUrl)return a.privateDoNotAccessOrElseTrustedResourceUrlWrappedValue_;goog.asserts.fail(\"expected object of type TrustedResourceUrl, got '\"+a+\"' of type \"+goog.typeOf(a));return\"type_error:TrustedResourceUrl\"};\ngoog.html.TrustedResourceUrl.format=function(a,b){var c=goog.string.Const.unwrap(a);if(!goog.html.TrustedResourceUrl.BASE_URL_.test(c))throw Error(\"Invalid TrustedResourceUrl format: \"+c);a=c.replace(goog.html.TrustedResourceUrl.FORMAT_MARKER_,function(d,e){if(!Object.prototype.hasOwnProperty.call(b,e))throw Error('Found marker, \"'+e+'\", in format string, \"'+c+'\", but no valid label mapping found in args: '+JSON.stringify(b));d=b[e];return d instanceof goog.string.Const?goog.string.Const.unwrap(d):\nencodeURIComponent(String(d))});return goog.html.TrustedResourceUrl.createTrustedResourceUrlSecurityPrivateDoNotAccessOrElse(a)};goog.html.TrustedResourceUrl.FORMAT_MARKER_=/%{(\\w+)}/g;goog.html.TrustedResourceUrl.BASE_URL_=/^((https:)?\\/\\/[0-9a-z.:[\\]-]+\\/|\\/[^/\\\\]|[^:/\\\\%]+\\/|[^:/\\\\%]*[?#]|about:blank#)/i;goog.html.TrustedResourceUrl.URL_PARAM_PARSER_=/^([^?#]*)(\\?[^#]*)?(#[\\s\\S]*)?/;\ngoog.html.TrustedResourceUrl.formatWithParams=function(a,b,c,d){return goog.html.TrustedResourceUrl.format(a,b).cloneWithParams(c,d)};goog.html.TrustedResourceUrl.fromConstant=function(a){return goog.html.TrustedResourceUrl.createTrustedResourceUrlSecurityPrivateDoNotAccessOrElse(goog.string.Const.unwrap(a))};goog.html.TrustedResourceUrl.fromConstants=function(a){for(var b=\"\",c=0;c<a.length;c++)b+=goog.string.Const.unwrap(a[c]);return goog.html.TrustedResourceUrl.createTrustedResourceUrlSecurityPrivateDoNotAccessOrElse(b)};\ngoog.html.TrustedResourceUrl.fromSafeScript=function(a){a=goog.fs.blob.getBlobWithProperties([module$contents$goog$html$SafeScript_SafeScript.unwrap(a)],\"text/javascript\");a=goog.fs.url.createObjectUrl(a);return goog.html.TrustedResourceUrl.createTrustedResourceUrlSecurityPrivateDoNotAccessOrElse(a)};goog.html.TrustedResourceUrl.CONSTRUCTOR_TOKEN_PRIVATE_={};\ngoog.html.TrustedResourceUrl.createTrustedResourceUrlSecurityPrivateDoNotAccessOrElse=function(a){var b=goog.html.trustedtypes.getPolicyPrivateDoNotAccessOrElse();a=b?b.createScriptURL(a):a;return new goog.html.TrustedResourceUrl(a,goog.html.TrustedResourceUrl.CONSTRUCTOR_TOKEN_PRIVATE_)};\ngoog.html.TrustedResourceUrl.stringifyParams_=function(a,b,c){if(null==c)return b;if(\"string\"===typeof c)return c?a+encodeURIComponent(c):\"\";for(var d in c)if(Object.prototype.hasOwnProperty.call(c,d)){var e=c[d];e=Array.isArray(e)?e:[e];for(var f=0;f<e.length;f++){var g=e[f];null!=g&&(b||(b=a),b+=(b.length>a.length?\"&\":\"\")+encodeURIComponent(d)+\"=\"+encodeURIComponent(String(g)))}}return b};goog.string.internal={};goog.string.internal.startsWith=function(a,b){return 0==a.lastIndexOf(b,0)};goog.string.internal.endsWith=function(a,b){var c=a.length-b.length;return 0<=c&&a.indexOf(b,c)==c};goog.string.internal.caseInsensitiveStartsWith=function(a,b){return 0==goog.string.internal.caseInsensitiveCompare(b,a.substr(0,b.length))};goog.string.internal.caseInsensitiveEndsWith=function(a,b){return 0==goog.string.internal.caseInsensitiveCompare(b,a.substr(a.length-b.length,b.length))};\ngoog.string.internal.caseInsensitiveEquals=function(a,b){return a.toLowerCase()==b.toLowerCase()};goog.string.internal.isEmptyOrWhitespace=function(a){return/^[\\s\\xa0]*$/.test(a)};goog.string.internal.trim=goog.TRUSTED_SITE&&String.prototype.trim?function(a){return a.trim()}:function(a){return/^[\\s\\xa0]*([\\s\\S]*?)[\\s\\xa0]*$/.exec(a)[1]};goog.string.internal.caseInsensitiveCompare=function(a,b){a=String(a).toLowerCase();b=String(b).toLowerCase();return a<b?-1:a==b?0:1};\ngoog.string.internal.newLineToBr=function(a,b){return a.replace(/(\\r\\n|\\r|\\n)/g,b?\"<br />\":\"<br>\")};\ngoog.string.internal.htmlEscape=function(a,b){if(b)a=a.replace(goog.string.internal.AMP_RE_,\"&amp;\").replace(goog.string.internal.LT_RE_,\"&lt;\").replace(goog.string.internal.GT_RE_,\"&gt;\").replace(goog.string.internal.QUOT_RE_,\"&quot;\").replace(goog.string.internal.SINGLE_QUOTE_RE_,\"&#39;\").replace(goog.string.internal.NULL_RE_,\"&#0;\");else{if(!goog.string.internal.ALL_RE_.test(a))return a;-1!=a.indexOf(\"&\")&&(a=a.replace(goog.string.internal.AMP_RE_,\"&amp;\"));-1!=a.indexOf(\"<\")&&(a=a.replace(goog.string.internal.LT_RE_,\n\"&lt;\"));-1!=a.indexOf(\">\")&&(a=a.replace(goog.string.internal.GT_RE_,\"&gt;\"));-1!=a.indexOf('\"')&&(a=a.replace(goog.string.internal.QUOT_RE_,\"&quot;\"));-1!=a.indexOf(\"'\")&&(a=a.replace(goog.string.internal.SINGLE_QUOTE_RE_,\"&#39;\"));-1!=a.indexOf(\"\\x00\")&&(a=a.replace(goog.string.internal.NULL_RE_,\"&#0;\"))}return a};goog.string.internal.AMP_RE_=/&/g;goog.string.internal.LT_RE_=/</g;goog.string.internal.GT_RE_=/>/g;goog.string.internal.QUOT_RE_=/\"/g;goog.string.internal.SINGLE_QUOTE_RE_=/'/g;\ngoog.string.internal.NULL_RE_=/\\x00/g;goog.string.internal.ALL_RE_=/[\\x00&<>\"']/;goog.string.internal.whitespaceEscape=function(a,b){return goog.string.internal.newLineToBr(a.replace(/  /g,\" &#160;\"),b)};goog.string.internal.contains=function(a,b){return-1!=a.indexOf(b)};goog.string.internal.caseInsensitiveContains=function(a,b){return goog.string.internal.contains(a.toLowerCase(),b.toLowerCase())};\ngoog.string.internal.compareVersions=function(a,b){var c=0;a=goog.string.internal.trim(String(a)).split(\".\");b=goog.string.internal.trim(String(b)).split(\".\");for(var d=Math.max(a.length,b.length),e=0;0==c&&e<d;e++){var f=a[e]||\"\",g=b[e]||\"\";do{f=/(\\d*)(\\D*)(.*)/.exec(f)||[\"\",\"\",\"\",\"\"];g=/(\\d*)(\\D*)(.*)/.exec(g)||[\"\",\"\",\"\",\"\"];if(0==f[0].length&&0==g[0].length)break;c=0==f[1].length?0:parseInt(f[1],10);var h=0==g[1].length?0:parseInt(g[1],10);c=goog.string.internal.compareElements_(c,h)||goog.string.internal.compareElements_(0==\nf[2].length,0==g[2].length)||goog.string.internal.compareElements_(f[2],g[2]);f=f[3];g=g[3]}while(0==c)}return c};goog.string.internal.compareElements_=function(a,b){return a<b?-1:a>b?1:0};goog.html.SafeUrl=function(a,b){this.privateDoNotAccessOrElseSafeUrlWrappedValue_=b===goog.html.SafeUrl.CONSTRUCTOR_TOKEN_PRIVATE_?a:\"\"};goog.html.SafeUrl.INNOCUOUS_STRING=\"about:invalid#zClosurez\";goog.html.SafeUrl.prototype.implementsGoogStringTypedString=!0;goog.html.SafeUrl.prototype.getTypedStringValue=function(){return this.privateDoNotAccessOrElseSafeUrlWrappedValue_.toString()};goog.html.SafeUrl.prototype.implementsGoogI18nBidiDirectionalString=!0;\ngoog.html.SafeUrl.prototype.getDirection=function(){return goog.i18n.bidi.Dir.LTR};goog.DEBUG&&(goog.html.SafeUrl.prototype.toString=function(){return\"SafeUrl{\"+this.privateDoNotAccessOrElseSafeUrlWrappedValue_+\"}\"});goog.html.SafeUrl.unwrap=function(a){if(a instanceof goog.html.SafeUrl&&a.constructor===goog.html.SafeUrl)return a.privateDoNotAccessOrElseSafeUrlWrappedValue_;goog.asserts.fail(\"expected object of type SafeUrl, got '\"+a+\"' of type \"+goog.typeOf(a));return\"type_error:SafeUrl\"};\ngoog.html.SafeUrl.fromConstant=function(a){return goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse(goog.string.Const.unwrap(a))};goog.html.SAFE_MIME_TYPE_PATTERN_=/^(?:audio\\/(?:3gpp2|3gpp|aac|L16|midi|mp3|mp4|mpeg|oga|ogg|opus|x-m4a|x-matroska|x-wav|wav|webm)|font\\/\\w+|image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp|x-icon)|video\\/(?:mpeg|mp4|ogg|webm|quicktime|x-matroska))(?:;\\w+=(?:\\w+|\"[\\w;,= ]+\"))*$/i;goog.html.SafeUrl.isSafeMimeType=function(a){return goog.html.SAFE_MIME_TYPE_PATTERN_.test(a)};\ngoog.html.SafeUrl.fromBlob=function(a){a=goog.html.SafeUrl.isSafeMimeType(a.type)?goog.fs.url.createObjectUrl(a):goog.html.SafeUrl.INNOCUOUS_STRING;return goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse(a)};goog.html.SafeUrl.revokeObjectUrl=function(a){a=a.getTypedStringValue();a!==goog.html.SafeUrl.INNOCUOUS_STRING&&goog.fs.url.revokeObjectUrl(a)};\ngoog.html.SafeUrl.fromMediaSource=function(a){goog.asserts.assert(\"MediaSource\"in goog.global,\"No support for MediaSource\");a=a instanceof MediaSource?goog.fs.url.createObjectUrl(a):goog.html.SafeUrl.INNOCUOUS_STRING;return goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse(a)};goog.html.DATA_URL_PATTERN_=/^data:(.*);base64,[a-z0-9+\\/]+=*$/i;\ngoog.html.SafeUrl.tryFromDataUrl=function(a){a=String(a);a=a.replace(/(%0A|%0D)/g,\"\");var b=a.match(goog.html.DATA_URL_PATTERN_);return b&&goog.html.SafeUrl.isSafeMimeType(b[1])?goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse(a):null};goog.html.SafeUrl.fromDataUrl=function(a){return goog.html.SafeUrl.tryFromDataUrl(a)||goog.html.SafeUrl.INNOCUOUS_URL};\ngoog.html.SafeUrl.fromTelUrl=function(a){goog.string.internal.caseInsensitiveStartsWith(a,\"tel:\")||(a=goog.html.SafeUrl.INNOCUOUS_STRING);return goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse(a)};goog.html.SIP_URL_PATTERN_=/^sip[s]?:[+a-z0-9_.!$%&'*\\/=^`{|}~-]+@([a-z0-9-]+\\.)+[a-z0-9]{2,63}$/i;goog.html.SafeUrl.fromSipUrl=function(a){goog.html.SIP_URL_PATTERN_.test(decodeURIComponent(a))||(a=goog.html.SafeUrl.INNOCUOUS_STRING);return goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse(a)};\ngoog.html.SafeUrl.fromFacebookMessengerUrl=function(a){goog.string.internal.caseInsensitiveStartsWith(a,\"fb-messenger://share\")||(a=goog.html.SafeUrl.INNOCUOUS_STRING);return goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse(a)};goog.html.SafeUrl.fromWhatsAppUrl=function(a){goog.string.internal.caseInsensitiveStartsWith(a,\"whatsapp://send\")||(a=goog.html.SafeUrl.INNOCUOUS_STRING);return goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse(a)};\ngoog.html.SafeUrl.fromSmsUrl=function(a){goog.string.internal.caseInsensitiveStartsWith(a,\"sms:\")&&goog.html.SafeUrl.isSmsUrlBodyValid_(a)||(a=goog.html.SafeUrl.INNOCUOUS_STRING);return goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse(a)};goog.html.SafeUrl.isSmsUrlBodyValid_=function(a){var b=a.indexOf(\"#\");0<b&&(a=a.substring(0,b));b=a.match(/[?&]body=/gi);if(!b)return!0;if(1<b.length)return!1;a=a.match(/[?&]body=([^&]*)/)[1];if(!a)return!0;try{decodeURIComponent(a)}catch(c){return!1}return/^(?:[a-z0-9\\-_.~]|%[0-9a-f]{2})+$/i.test(a)};\ngoog.html.SafeUrl.fromSshUrl=function(a){goog.string.internal.caseInsensitiveStartsWith(a,\"ssh://\")||(a=goog.html.SafeUrl.INNOCUOUS_STRING);return goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse(a)};goog.html.SafeUrl.sanitizeChromeExtensionUrl=function(a,b){return goog.html.SafeUrl.sanitizeExtensionUrl_(/^chrome-extension:\\/\\/([^\\/]+)\\//,a,b)};\ngoog.html.SafeUrl.sanitizeFirefoxExtensionUrl=function(a,b){return goog.html.SafeUrl.sanitizeExtensionUrl_(/^moz-extension:\\/\\/([^\\/]+)\\//,a,b)};goog.html.SafeUrl.sanitizeEdgeExtensionUrl=function(a,b){return goog.html.SafeUrl.sanitizeExtensionUrl_(/^ms-browser-extension:\\/\\/([^\\/]+)\\//,a,b)};\ngoog.html.SafeUrl.sanitizeExtensionUrl_=function(a,b,c){(a=a.exec(b))?(a=a[1],-1==(c instanceof goog.string.Const?[goog.string.Const.unwrap(c)]:c.map(function(d){return goog.string.Const.unwrap(d)})).indexOf(a)&&(b=goog.html.SafeUrl.INNOCUOUS_STRING)):b=goog.html.SafeUrl.INNOCUOUS_STRING;return goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse(b)};goog.html.SafeUrl.fromTrustedResourceUrl=function(a){return goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse(goog.html.TrustedResourceUrl.unwrap(a))};\ngoog.html.SAFE_URL_PATTERN_=/^(?:(?:https?|mailto|ftp):|[^:/?#]*(?:[/?#]|$))/i;goog.html.SafeUrl.SAFE_URL_PATTERN=goog.html.SAFE_URL_PATTERN_;goog.html.SafeUrl.trySanitize=function(a){if(a instanceof goog.html.SafeUrl)return a;a=\"object\"==typeof a&&a.implementsGoogStringTypedString?a.getTypedStringValue():String(a);return goog.html.SAFE_URL_PATTERN_.test(a)?goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse(a):goog.html.SafeUrl.tryFromDataUrl(a)};\ngoog.html.SafeUrl.sanitize=function(a){return goog.html.SafeUrl.trySanitize(a)||goog.html.SafeUrl.INNOCUOUS_URL};\ngoog.html.SafeUrl.sanitizeAssertUnchanged=function(a,b){if(a instanceof goog.html.SafeUrl)return a;a=\"object\"==typeof a&&a.implementsGoogStringTypedString?a.getTypedStringValue():String(a);if(b&&/^data:/i.test(a)&&(b=goog.html.SafeUrl.fromDataUrl(a),b.getTypedStringValue()==a))return b;goog.asserts.assert(goog.html.SAFE_URL_PATTERN_.test(a),\"%s does not match the safe URL pattern\",a)||(a=goog.html.SafeUrl.INNOCUOUS_STRING);return goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse(a)};\ngoog.html.SafeUrl.CONSTRUCTOR_TOKEN_PRIVATE_={};goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse=function(a){return new goog.html.SafeUrl(a,goog.html.SafeUrl.CONSTRUCTOR_TOKEN_PRIVATE_)};goog.html.SafeUrl.INNOCUOUS_URL=goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse(goog.html.SafeUrl.INNOCUOUS_STRING);goog.html.SafeUrl.ABOUT_BLANK=goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse(\"about:blank\");goog.html.SafeStyle=function(a,b){this.privateDoNotAccessOrElseSafeStyleWrappedValue_=b===goog.html.SafeStyle.CONSTRUCTOR_TOKEN_PRIVATE_?a:\"\"};goog.html.SafeStyle.prototype.implementsGoogStringTypedString=!0;\ngoog.html.SafeStyle.fromConstant=function(a){a=goog.string.Const.unwrap(a);if(0===a.length)return goog.html.SafeStyle.EMPTY;goog.asserts.assert(goog.string.internal.endsWith(a,\";\"),\"Last character of style string is not ';': \"+a);goog.asserts.assert(goog.string.internal.contains(a,\":\"),\"Style string must contain at least one ':', to specify a \\\"name: value\\\" pair: \"+a);return goog.html.SafeStyle.createSafeStyleSecurityPrivateDoNotAccessOrElse(a)};\ngoog.html.SafeStyle.prototype.getTypedStringValue=function(){return this.privateDoNotAccessOrElseSafeStyleWrappedValue_};goog.DEBUG&&(goog.html.SafeStyle.prototype.toString=function(){return\"SafeStyle{\"+this.privateDoNotAccessOrElseSafeStyleWrappedValue_+\"}\"});\ngoog.html.SafeStyle.unwrap=function(a){if(a instanceof goog.html.SafeStyle&&a.constructor===goog.html.SafeStyle)return a.privateDoNotAccessOrElseSafeStyleWrappedValue_;goog.asserts.fail(\"expected object of type SafeStyle, got '\"+a+\"' of type \"+goog.typeOf(a));return\"type_error:SafeStyle\"};goog.html.SafeStyle.CONSTRUCTOR_TOKEN_PRIVATE_={};goog.html.SafeStyle.createSafeStyleSecurityPrivateDoNotAccessOrElse=function(a){return new goog.html.SafeStyle(a,goog.html.SafeStyle.CONSTRUCTOR_TOKEN_PRIVATE_)};\ngoog.html.SafeStyle.EMPTY=goog.html.SafeStyle.createSafeStyleSecurityPrivateDoNotAccessOrElse(\"\");goog.html.SafeStyle.INNOCUOUS_STRING=\"zClosurez\";\ngoog.html.SafeStyle.create=function(a){var b=\"\",c;for(c in a)if(Object.prototype.hasOwnProperty.call(a,c)){if(!/^[-_a-zA-Z0-9]+$/.test(c))throw Error(\"Name allows only [-_a-zA-Z0-9], got: \"+c);var d=a[c];null!=d&&(d=Array.isArray(d)?module$contents$goog$array_map(d,goog.html.SafeStyle.sanitizePropertyValue_).join(\" \"):goog.html.SafeStyle.sanitizePropertyValue_(d),b+=c+\":\"+d+\";\")}return b?goog.html.SafeStyle.createSafeStyleSecurityPrivateDoNotAccessOrElse(b):goog.html.SafeStyle.EMPTY};\ngoog.html.SafeStyle.sanitizePropertyValue_=function(a){if(a instanceof goog.html.SafeUrl)return'url(\"'+goog.html.SafeUrl.unwrap(a).replace(/</g,\"%3c\").replace(/[\\\\\"]/g,\"\\\\$&\")+'\")';a=a instanceof goog.string.Const?goog.string.Const.unwrap(a):goog.html.SafeStyle.sanitizePropertyValueString_(String(a));if(/[{;}]/.test(a))throw new goog.asserts.AssertionError(\"Value does not allow [{;}], got: %s.\",[a]);return a};\ngoog.html.SafeStyle.sanitizePropertyValueString_=function(a){var b=a.replace(goog.html.SafeStyle.FUNCTIONS_RE_,\"$1\").replace(goog.html.SafeStyle.FUNCTIONS_RE_,\"$1\").replace(goog.html.SafeStyle.URL_RE_,\"url\");if(goog.html.SafeStyle.VALUE_RE_.test(b)){if(goog.html.SafeStyle.COMMENT_RE_.test(a))return goog.asserts.fail(\"String value disallows comments, got: \"+a),goog.html.SafeStyle.INNOCUOUS_STRING;if(!goog.html.SafeStyle.hasBalancedQuotes_(a))return goog.asserts.fail(\"String value requires balanced quotes, got: \"+\na),goog.html.SafeStyle.INNOCUOUS_STRING;if(!goog.html.SafeStyle.hasBalancedSquareBrackets_(a))return goog.asserts.fail(\"String value requires balanced square brackets and one identifier per pair of brackets, got: \"+a),goog.html.SafeStyle.INNOCUOUS_STRING}else return goog.asserts.fail(\"String value allows only \"+goog.html.SafeStyle.VALUE_ALLOWED_CHARS_+\" and simple functions, got: \"+a),goog.html.SafeStyle.INNOCUOUS_STRING;return goog.html.SafeStyle.sanitizeUrl_(a)};\ngoog.html.SafeStyle.hasBalancedQuotes_=function(a){for(var b=!0,c=!0,d=0;d<a.length;d++){var e=a.charAt(d);\"'\"==e&&c?b=!b:'\"'==e&&b&&(c=!c)}return b&&c};goog.html.SafeStyle.hasBalancedSquareBrackets_=function(a){for(var b=!0,c=/^[-_a-zA-Z0-9]$/,d=0;d<a.length;d++){var e=a.charAt(d);if(\"]\"==e){if(b)return!1;b=!0}else if(\"[\"==e){if(!b)return!1;b=!1}else if(!b&&!c.test(e))return!1}return b};goog.html.SafeStyle.VALUE_ALLOWED_CHARS_=\"[-,.\\\"'%_!# a-zA-Z0-9\\\\[\\\\]]\";\ngoog.html.SafeStyle.VALUE_RE_=new RegExp(\"^\"+goog.html.SafeStyle.VALUE_ALLOWED_CHARS_+\"+$\");goog.html.SafeStyle.URL_RE_=/\\b(url\\([ \\t\\n]*)('[ -&(-\\[\\]-~]*'|\"[ !#-\\[\\]-~]*\"|[!#-&*-\\[\\]-~]*)([ \\t\\n]*\\))/g;goog.html.SafeStyle.ALLOWED_FUNCTIONS_=\"calc cubic-bezier fit-content hsl hsla linear-gradient matrix minmax repeat rgb rgba (rotate|scale|translate)(X|Y|Z|3d)?\".split(\" \");\ngoog.html.SafeStyle.FUNCTIONS_RE_=new RegExp(\"\\\\b(\"+goog.html.SafeStyle.ALLOWED_FUNCTIONS_.join(\"|\")+\")\\\\([-+*/0-9a-z.%\\\\[\\\\], ]+\\\\)\",\"g\");goog.html.SafeStyle.COMMENT_RE_=/\\/\\*/;goog.html.SafeStyle.sanitizeUrl_=function(a){return a.replace(goog.html.SafeStyle.URL_RE_,function(b,c,d,e){var f=\"\";d=d.replace(/^(['\"])(.*)\\1$/,function(g,h,k){f=h;return k});b=goog.html.SafeUrl.sanitize(d).getTypedStringValue();return c+f+b+f+e})};\ngoog.html.SafeStyle.concat=function(a){var b=\"\",c=function(d){Array.isArray(d)?module$contents$goog$array_forEach(d,c):b+=goog.html.SafeStyle.unwrap(d)};module$contents$goog$array_forEach(arguments,c);return b?goog.html.SafeStyle.createSafeStyleSecurityPrivateDoNotAccessOrElse(b):goog.html.SafeStyle.EMPTY};var module$contents$goog$html$SafeStyleSheet_CONSTRUCTOR_TOKEN_PRIVATE={},module$contents$goog$html$SafeStyleSheet_SafeStyleSheet=function(a,b){this.privateDoNotAccessOrElseSafeStyleSheetWrappedValue_=b===module$contents$goog$html$SafeStyleSheet_CONSTRUCTOR_TOKEN_PRIVATE?a:\"\";this.implementsGoogStringTypedString=!0};\nmodule$contents$goog$html$SafeStyleSheet_SafeStyleSheet.createRule=function(a,b){if((0,goog.string.internal.contains)(a,\"<\"))throw Error(\"Selector does not allow '<', got: \"+a);var c=a.replace(/('|\")((?!\\1)[^\\r\\n\\f\\\\]|\\\\[\\s\\S])*\\1/g,\"\");if(!/^[-_a-zA-Z0-9#.:* ,>+~[\\]()=^$|]+$/.test(c))throw Error(\"Selector allows only [-_a-zA-Z0-9#.:* ,>+~[\\\\]()=^$|] and strings, got: \"+a);if(!module$contents$goog$html$SafeStyleSheet_SafeStyleSheet.hasBalancedBrackets_(c))throw Error(\"() and [] in selector must be balanced, got: \"+\na);b instanceof goog.html.SafeStyle||(b=goog.html.SafeStyle.create(b));a=a+\"{\"+goog.html.SafeStyle.unwrap(b).replace(/</g,\"\\\\3C \")+\"}\";return module$contents$goog$html$SafeStyleSheet_SafeStyleSheet.createSafeStyleSheetSecurityPrivateDoNotAccessOrElse(a)};module$contents$goog$html$SafeStyleSheet_SafeStyleSheet.hasBalancedBrackets_=function(a){for(var b={\"(\":\")\",\"[\":\"]\"},c=[],d=0;d<a.length;d++){var e=a[d];if(b[e])c.push(b[e]);else if(goog.object.contains(b,e)&&c.pop()!=e)return!1}return 0==c.length};\nmodule$contents$goog$html$SafeStyleSheet_SafeStyleSheet.concat=function(a){var b=\"\",c=function(d){Array.isArray(d)?module$contents$goog$array_forEach(d,c):b+=module$contents$goog$html$SafeStyleSheet_SafeStyleSheet.unwrap(d)};module$contents$goog$array_forEach(arguments,c);return module$contents$goog$html$SafeStyleSheet_SafeStyleSheet.createSafeStyleSheetSecurityPrivateDoNotAccessOrElse(b)};\nmodule$contents$goog$html$SafeStyleSheet_SafeStyleSheet.fromConstant=function(a){a=goog.string.Const.unwrap(a);if(0===a.length)return module$contents$goog$html$SafeStyleSheet_SafeStyleSheet.EMPTY;(0,goog.asserts.assert)(!(0,goog.string.internal.contains)(a,\"<\"),\"Forbidden '<' character in style sheet string: \"+a);return module$contents$goog$html$SafeStyleSheet_SafeStyleSheet.createSafeStyleSheetSecurityPrivateDoNotAccessOrElse(a)};\nmodule$contents$goog$html$SafeStyleSheet_SafeStyleSheet.prototype.getTypedStringValue=function(){return this.privateDoNotAccessOrElseSafeStyleSheetWrappedValue_};\nmodule$contents$goog$html$SafeStyleSheet_SafeStyleSheet.unwrap=function(a){if(a instanceof module$contents$goog$html$SafeStyleSheet_SafeStyleSheet&&a.constructor===module$contents$goog$html$SafeStyleSheet_SafeStyleSheet)return a.privateDoNotAccessOrElseSafeStyleSheetWrappedValue_;(0,goog.asserts.fail)(\"expected object of type SafeStyleSheet, got '\"+a+\"' of type \"+goog.typeOf(a));return\"type_error:SafeStyleSheet\"};\nmodule$contents$goog$html$SafeStyleSheet_SafeStyleSheet.createSafeStyleSheetSecurityPrivateDoNotAccessOrElse=function(a){return new module$contents$goog$html$SafeStyleSheet_SafeStyleSheet(a,module$contents$goog$html$SafeStyleSheet_CONSTRUCTOR_TOKEN_PRIVATE)};goog.DEBUG&&(module$contents$goog$html$SafeStyleSheet_SafeStyleSheet.prototype.toString=function(){return\"SafeStyleSheet{\"+this.privateDoNotAccessOrElseSafeStyleSheetWrappedValue_+\"}\"});\nmodule$contents$goog$html$SafeStyleSheet_SafeStyleSheet.EMPTY=module$contents$goog$html$SafeStyleSheet_SafeStyleSheet.createSafeStyleSheetSecurityPrivateDoNotAccessOrElse(\"\");goog.html.SafeStyleSheet=module$contents$goog$html$SafeStyleSheet_SafeStyleSheet;goog.labs={};goog.labs.userAgent={};goog.labs.userAgent.util={};goog.labs.userAgent.util.getNativeUserAgentString_=function(){var a=goog.labs.userAgent.util.getNavigator_();return a&&(a=a.userAgent)?a:\"\"};goog.labs.userAgent.util.getNavigator_=function(){return goog.global.navigator};goog.labs.userAgent.util.userAgent_=goog.labs.userAgent.util.getNativeUserAgentString_();goog.labs.userAgent.util.setUserAgent=function(a){goog.labs.userAgent.util.userAgent_=a||goog.labs.userAgent.util.getNativeUserAgentString_()};\ngoog.labs.userAgent.util.getUserAgent=function(){return goog.labs.userAgent.util.userAgent_};goog.labs.userAgent.util.matchUserAgent=function(a){var b=goog.labs.userAgent.util.getUserAgent();return goog.string.internal.contains(b,a)};goog.labs.userAgent.util.matchUserAgentIgnoreCase=function(a){var b=goog.labs.userAgent.util.getUserAgent();return goog.string.internal.caseInsensitiveContains(b,a)};\ngoog.labs.userAgent.util.extractVersionTuples=function(a){for(var b=/(\\w[\\w ]+)\\/([^\\s]+)\\s*(?:\\((.*?)\\))?/g,c=[],d;d=b.exec(a);)c.push([d[1],d[2],d[3]||void 0]);return c};goog.labs.userAgent.browser={};goog.labs.userAgent.browser.matchOpera_=function(){return goog.labs.userAgent.util.matchUserAgent(\"Opera\")};goog.labs.userAgent.browser.matchIE_=function(){return goog.labs.userAgent.util.matchUserAgent(\"Trident\")||goog.labs.userAgent.util.matchUserAgent(\"MSIE\")};goog.labs.userAgent.browser.matchEdgeHtml_=function(){return goog.labs.userAgent.util.matchUserAgent(\"Edge\")};goog.labs.userAgent.browser.matchEdgeChromium_=function(){return goog.labs.userAgent.util.matchUserAgent(\"Edg/\")};\ngoog.labs.userAgent.browser.matchOperaChromium_=function(){return goog.labs.userAgent.util.matchUserAgent(\"OPR\")};goog.labs.userAgent.browser.matchFirefox_=function(){return goog.labs.userAgent.util.matchUserAgent(\"Firefox\")||goog.labs.userAgent.util.matchUserAgent(\"FxiOS\")};\ngoog.labs.userAgent.browser.matchSafari_=function(){return goog.labs.userAgent.util.matchUserAgent(\"Safari\")&&!(goog.labs.userAgent.browser.matchChrome_()||goog.labs.userAgent.browser.matchCoast_()||goog.labs.userAgent.browser.matchOpera_()||goog.labs.userAgent.browser.matchEdgeHtml_()||goog.labs.userAgent.browser.matchEdgeChromium_()||goog.labs.userAgent.browser.matchOperaChromium_()||goog.labs.userAgent.browser.matchFirefox_()||goog.labs.userAgent.browser.isSilk()||goog.labs.userAgent.util.matchUserAgent(\"Android\"))};\ngoog.labs.userAgent.browser.matchCoast_=function(){return goog.labs.userAgent.util.matchUserAgent(\"Coast\")};goog.labs.userAgent.browser.matchIosWebview_=function(){return(goog.labs.userAgent.util.matchUserAgent(\"iPad\")||goog.labs.userAgent.util.matchUserAgent(\"iPhone\"))&&!goog.labs.userAgent.browser.matchSafari_()&&!goog.labs.userAgent.browser.matchChrome_()&&!goog.labs.userAgent.browser.matchCoast_()&&!goog.labs.userAgent.browser.matchFirefox_()&&goog.labs.userAgent.util.matchUserAgent(\"AppleWebKit\")};\ngoog.labs.userAgent.browser.matchChrome_=function(){return(goog.labs.userAgent.util.matchUserAgent(\"Chrome\")||goog.labs.userAgent.util.matchUserAgent(\"CriOS\"))&&!goog.labs.userAgent.browser.matchEdgeHtml_()};goog.labs.userAgent.browser.matchAndroidBrowser_=function(){return goog.labs.userAgent.util.matchUserAgent(\"Android\")&&!(goog.labs.userAgent.browser.isChrome()||goog.labs.userAgent.browser.isFirefox()||goog.labs.userAgent.browser.isOpera()||goog.labs.userAgent.browser.isSilk())};\ngoog.labs.userAgent.browser.isOpera=goog.labs.userAgent.browser.matchOpera_;goog.labs.userAgent.browser.isIE=goog.labs.userAgent.browser.matchIE_;goog.labs.userAgent.browser.isEdge=goog.labs.userAgent.browser.matchEdgeHtml_;goog.labs.userAgent.browser.isEdgeChromium=goog.labs.userAgent.browser.matchEdgeChromium_;goog.labs.userAgent.browser.isOperaChromium=goog.labs.userAgent.browser.matchOperaChromium_;goog.labs.userAgent.browser.isFirefox=goog.labs.userAgent.browser.matchFirefox_;\ngoog.labs.userAgent.browser.isSafari=goog.labs.userAgent.browser.matchSafari_;goog.labs.userAgent.browser.isCoast=goog.labs.userAgent.browser.matchCoast_;goog.labs.userAgent.browser.isIosWebview=goog.labs.userAgent.browser.matchIosWebview_;goog.labs.userAgent.browser.isChrome=goog.labs.userAgent.browser.matchChrome_;goog.labs.userAgent.browser.isAndroidBrowser=goog.labs.userAgent.browser.matchAndroidBrowser_;goog.labs.userAgent.browser.isSilk=function(){return goog.labs.userAgent.util.matchUserAgent(\"Silk\")};\ngoog.labs.userAgent.browser.getVersion=function(){function a(e){e=module$contents$goog$array_find(e,d);return c[e]||\"\"}var b=goog.labs.userAgent.util.getUserAgent();if(goog.labs.userAgent.browser.isIE())return goog.labs.userAgent.browser.getIEVersion_(b);b=goog.labs.userAgent.util.extractVersionTuples(b);var c={};module$contents$goog$array_forEach(b,function(e){c[e[0]]=e[1]});var d=goog.partial(goog.object.containsKey,c);return goog.labs.userAgent.browser.isOpera()?a([\"Version\",\"Opera\"]):goog.labs.userAgent.browser.isEdge()?\na([\"Edge\"]):goog.labs.userAgent.browser.isEdgeChromium()?a([\"Edg\"]):goog.labs.userAgent.browser.isChrome()?a([\"Chrome\",\"CriOS\",\"HeadlessChrome\"]):(b=b[2])&&b[1]||\"\"};goog.labs.userAgent.browser.isVersionOrHigher=function(a){return 0<=goog.string.internal.compareVersions(goog.labs.userAgent.browser.getVersion(),a)};\ngoog.labs.userAgent.browser.getIEVersion_=function(a){var b=/rv: *([\\d\\.]*)/.exec(a);if(b&&b[1])return b[1];b=\"\";var c=/MSIE +([\\d\\.]+)/.exec(a);if(c&&c[1])if(a=/Trident\\/(\\d.\\d)/.exec(a),\"7.0\"==c[1])if(a&&a[1])switch(a[1]){case \"4.0\":b=\"8.0\";break;case \"5.0\":b=\"9.0\";break;case \"6.0\":b=\"10.0\";break;case \"7.0\":b=\"11.0\"}else b=\"7.0\";else b=c[1];return b};goog.html.SafeHtml=function(a,b,c){this.privateDoNotAccessOrElseSafeHtmlWrappedValue_=c===goog.html.SafeHtml.CONSTRUCTOR_TOKEN_PRIVATE_?a:\"\";this.dir_=b};goog.html.SafeHtml.ENABLE_ERROR_MESSAGES=goog.DEBUG;goog.html.SafeHtml.SUPPORT_STYLE_ATTRIBUTE=!0;goog.html.SafeHtml.prototype.implementsGoogI18nBidiDirectionalString=!0;goog.html.SafeHtml.prototype.getDirection=function(){return this.dir_};goog.html.SafeHtml.prototype.implementsGoogStringTypedString=!0;\ngoog.html.SafeHtml.prototype.getTypedStringValue=function(){return this.privateDoNotAccessOrElseSafeHtmlWrappedValue_.toString()};goog.DEBUG&&(goog.html.SafeHtml.prototype.toString=function(){return\"SafeHtml{\"+this.privateDoNotAccessOrElseSafeHtmlWrappedValue_+\"}\"});goog.html.SafeHtml.unwrap=function(a){return goog.html.SafeHtml.unwrapTrustedHTML(a).toString()};\ngoog.html.SafeHtml.unwrapTrustedHTML=function(a){if(a instanceof goog.html.SafeHtml&&a.constructor===goog.html.SafeHtml)return a.privateDoNotAccessOrElseSafeHtmlWrappedValue_;goog.asserts.fail(\"expected object of type SafeHtml, got '\"+a+\"' of type \"+goog.typeOf(a));return\"type_error:SafeHtml\"};\ngoog.html.SafeHtml.htmlEscape=function(a){if(a instanceof goog.html.SafeHtml)return a;var b=\"object\"==typeof a,c=null;b&&a.implementsGoogI18nBidiDirectionalString&&(c=a.getDirection());a=b&&a.implementsGoogStringTypedString?a.getTypedStringValue():String(a);return goog.html.SafeHtml.createSafeHtmlSecurityPrivateDoNotAccessOrElse(goog.string.internal.htmlEscape(a),c)};\ngoog.html.SafeHtml.htmlEscapePreservingNewlines=function(a){if(a instanceof goog.html.SafeHtml)return a;a=goog.html.SafeHtml.htmlEscape(a);return goog.html.SafeHtml.createSafeHtmlSecurityPrivateDoNotAccessOrElse(goog.string.internal.newLineToBr(goog.html.SafeHtml.unwrap(a)),a.getDirection())};\ngoog.html.SafeHtml.htmlEscapePreservingNewlinesAndSpaces=function(a){if(a instanceof goog.html.SafeHtml)return a;a=goog.html.SafeHtml.htmlEscape(a);return goog.html.SafeHtml.createSafeHtmlSecurityPrivateDoNotAccessOrElse(goog.string.internal.whitespaceEscape(goog.html.SafeHtml.unwrap(a)),a.getDirection())};goog.html.SafeHtml.from=goog.html.SafeHtml.htmlEscape;\ngoog.html.SafeHtml.comment=function(a){return goog.html.SafeHtml.createSafeHtmlSecurityPrivateDoNotAccessOrElse(\"\\x3c!--\"+goog.string.internal.htmlEscape(a)+\"--\\x3e\",null)};goog.html.SafeHtml.VALID_NAMES_IN_TAG_=/^[a-zA-Z0-9-]+$/;goog.html.SafeHtml.URL_ATTRIBUTES_={action:!0,cite:!0,data:!0,formaction:!0,href:!0,manifest:!0,poster:!0,src:!0};\ngoog.html.SafeHtml.NOT_ALLOWED_TAG_NAMES_=goog.object.createSet(goog.dom.TagName.APPLET,goog.dom.TagName.BASE,goog.dom.TagName.EMBED,goog.dom.TagName.IFRAME,goog.dom.TagName.LINK,goog.dom.TagName.MATH,goog.dom.TagName.META,goog.dom.TagName.OBJECT,goog.dom.TagName.SCRIPT,goog.dom.TagName.STYLE,goog.dom.TagName.SVG,goog.dom.TagName.TEMPLATE);\ngoog.html.SafeHtml.create=function(a,b,c){goog.html.SafeHtml.verifyTagName(String(a));return goog.html.SafeHtml.createSafeHtmlTagSecurityPrivateDoNotAccessOrElse(String(a),b,c)};\ngoog.html.SafeHtml.verifyTagName=function(a){if(!goog.html.SafeHtml.VALID_NAMES_IN_TAG_.test(a))throw Error(goog.html.SafeHtml.ENABLE_ERROR_MESSAGES?\"Invalid tag name <\"+a+\">.\":\"\");if(a.toUpperCase()in goog.html.SafeHtml.NOT_ALLOWED_TAG_NAMES_)throw Error(goog.html.SafeHtml.ENABLE_ERROR_MESSAGES?\"Tag name <\"+a+\"> is not allowed for SafeHtml.\":\"\");};\ngoog.html.SafeHtml.createIframe=function(a,b,c,d){a&&goog.html.TrustedResourceUrl.unwrap(a);var e={};e.src=a||null;e.srcdoc=b&&goog.html.SafeHtml.unwrap(b);a=goog.html.SafeHtml.combineAttributes(e,{sandbox:\"\"},c);return goog.html.SafeHtml.createSafeHtmlTagSecurityPrivateDoNotAccessOrElse(\"iframe\",a,d)};\ngoog.html.SafeHtml.createSandboxIframe=function(a,b,c,d){if(!goog.html.SafeHtml.canUseSandboxIframe())throw Error(goog.html.SafeHtml.ENABLE_ERROR_MESSAGES?\"The browser does not support sandboxed iframes.\":\"\");var e={};e.src=a?goog.html.SafeUrl.unwrap(goog.html.SafeUrl.sanitize(a)):null;e.srcdoc=b||null;e.sandbox=\"\";a=goog.html.SafeHtml.combineAttributes(e,{},c);return goog.html.SafeHtml.createSafeHtmlTagSecurityPrivateDoNotAccessOrElse(\"iframe\",a,d)};\ngoog.html.SafeHtml.canUseSandboxIframe=function(){return goog.global.HTMLIFrameElement&&\"sandbox\"in goog.global.HTMLIFrameElement.prototype};goog.html.SafeHtml.createScriptSrc=function(a,b){goog.html.TrustedResourceUrl.unwrap(a);a=goog.html.SafeHtml.combineAttributes({src:a},{},b);return goog.html.SafeHtml.createSafeHtmlTagSecurityPrivateDoNotAccessOrElse(\"script\",a)};\ngoog.html.SafeHtml.createScript=function(a,b){for(var c in b)if(Object.prototype.hasOwnProperty.call(b,c)){var d=c.toLowerCase();if(\"language\"==d||\"src\"==d||\"text\"==d||\"type\"==d)throw Error(goog.html.SafeHtml.ENABLE_ERROR_MESSAGES?'Cannot set \"'+d+'\" attribute':\"\");}c=\"\";a=module$contents$goog$array_concat(a);for(d=0;d<a.length;d++)c+=module$contents$goog$html$SafeScript_SafeScript.unwrap(a[d]);a=goog.html.SafeHtml.createSafeHtmlSecurityPrivateDoNotAccessOrElse(c,goog.i18n.bidi.Dir.NEUTRAL);return goog.html.SafeHtml.createSafeHtmlTagSecurityPrivateDoNotAccessOrElse(\"script\",\nb,a)};goog.html.SafeHtml.createStyle=function(a,b){b=goog.html.SafeHtml.combineAttributes({type:\"text/css\"},{},b);var c=\"\";a=module$contents$goog$array_concat(a);for(var d=0;d<a.length;d++)c+=module$contents$goog$html$SafeStyleSheet_SafeStyleSheet.unwrap(a[d]);a=goog.html.SafeHtml.createSafeHtmlSecurityPrivateDoNotAccessOrElse(c,goog.i18n.bidi.Dir.NEUTRAL);return goog.html.SafeHtml.createSafeHtmlTagSecurityPrivateDoNotAccessOrElse(\"style\",b,a)};\ngoog.html.SafeHtml.createMetaRefresh=function(a,b){a=goog.html.SafeUrl.unwrap(goog.html.SafeUrl.sanitize(a));(goog.labs.userAgent.browser.isIE()||goog.labs.userAgent.browser.isEdge())&&goog.string.internal.contains(a,\";\")&&(a=\"'\"+a.replace(/'/g,\"%27\")+\"'\");return goog.html.SafeHtml.createSafeHtmlTagSecurityPrivateDoNotAccessOrElse(\"meta\",{\"http-equiv\":\"refresh\",content:(b||0)+\"; url=\"+a})};\ngoog.html.SafeHtml.getAttrNameAndValue_=function(a,b,c){if(c instanceof goog.string.Const)c=goog.string.Const.unwrap(c);else if(\"style\"==b.toLowerCase())if(goog.html.SafeHtml.SUPPORT_STYLE_ATTRIBUTE)c=goog.html.SafeHtml.getStyleValue_(c);else throw Error(goog.html.SafeHtml.ENABLE_ERROR_MESSAGES?'Attribute \"style\" not supported.':\"\");else{if(/^on/i.test(b))throw Error(goog.html.SafeHtml.ENABLE_ERROR_MESSAGES?'Attribute \"'+b+'\" requires goog.string.Const value, \"'+c+'\" given.':\"\");if(b.toLowerCase()in\ngoog.html.SafeHtml.URL_ATTRIBUTES_)if(c instanceof goog.html.TrustedResourceUrl)c=goog.html.TrustedResourceUrl.unwrap(c);else if(c instanceof goog.html.SafeUrl)c=goog.html.SafeUrl.unwrap(c);else if(\"string\"===typeof c)c=goog.html.SafeUrl.sanitize(c).getTypedStringValue();else throw Error(goog.html.SafeHtml.ENABLE_ERROR_MESSAGES?'Attribute \"'+b+'\" on tag \"'+a+'\" requires goog.html.SafeUrl, goog.string.Const, or string, value \"'+c+'\" given.':\"\");}c.implementsGoogStringTypedString&&(c=c.getTypedStringValue());\ngoog.asserts.assert(\"string\"===typeof c||\"number\"===typeof c,\"String or number value expected, got \"+typeof c+\" with value: \"+c);return b+'=\"'+goog.string.internal.htmlEscape(String(c))+'\"'};goog.html.SafeHtml.getStyleValue_=function(a){if(!goog.isObject(a))throw Error(goog.html.SafeHtml.ENABLE_ERROR_MESSAGES?'The \"style\" attribute requires goog.html.SafeStyle or map of style properties, '+typeof a+\" given: \"+a:\"\");a instanceof goog.html.SafeStyle||(a=goog.html.SafeStyle.create(a));return goog.html.SafeStyle.unwrap(a)};\ngoog.html.SafeHtml.createWithDir=function(a,b,c,d){b=goog.html.SafeHtml.create(b,c,d);b.dir_=a;return b};\ngoog.html.SafeHtml.join=function(a,b){a=goog.html.SafeHtml.htmlEscape(a);var c=a.getDirection(),d=[],e=function(f){Array.isArray(f)?module$contents$goog$array_forEach(f,e):(f=goog.html.SafeHtml.htmlEscape(f),d.push(goog.html.SafeHtml.unwrap(f)),f=f.getDirection(),c==goog.i18n.bidi.Dir.NEUTRAL?c=f:f!=goog.i18n.bidi.Dir.NEUTRAL&&c!=f&&(c=null))};module$contents$goog$array_forEach(b,e);return goog.html.SafeHtml.createSafeHtmlSecurityPrivateDoNotAccessOrElse(d.join(goog.html.SafeHtml.unwrap(a)),c)};\ngoog.html.SafeHtml.concat=function(a){return goog.html.SafeHtml.join(goog.html.SafeHtml.EMPTY,Array.prototype.slice.call(arguments))};goog.html.SafeHtml.concatWithDir=function(a,b){var c=goog.html.SafeHtml.concat(module$contents$goog$array_slice(arguments,1));c.dir_=a;return c};goog.html.SafeHtml.CONSTRUCTOR_TOKEN_PRIVATE_={};\ngoog.html.SafeHtml.createSafeHtmlSecurityPrivateDoNotAccessOrElse=function(a,b){var c=goog.html.trustedtypes.getPolicyPrivateDoNotAccessOrElse();a=c?c.createHTML(a):a;return new goog.html.SafeHtml(a,b,goog.html.SafeHtml.CONSTRUCTOR_TOKEN_PRIVATE_)};\ngoog.html.SafeHtml.createSafeHtmlTagSecurityPrivateDoNotAccessOrElse=function(a,b,c){var d=null;var e=\"<\"+a+goog.html.SafeHtml.stringifyAttributes(a,b);null==c?c=[]:Array.isArray(c)||(c=[c]);goog.dom.tags.isVoidTag(a.toLowerCase())?(goog.asserts.assert(!c.length,\"Void tag <\"+a+\"> does not allow content.\"),e+=\">\"):(d=goog.html.SafeHtml.concat(c),e+=\">\"+goog.html.SafeHtml.unwrap(d)+\"</\"+a+\">\",d=d.getDirection());(a=b&&b.dir)&&(d=/^(ltr|rtl|auto)$/i.test(a)?goog.i18n.bidi.Dir.NEUTRAL:null);return goog.html.SafeHtml.createSafeHtmlSecurityPrivateDoNotAccessOrElse(e,\nd)};goog.html.SafeHtml.stringifyAttributes=function(a,b){var c=\"\";if(b)for(var d in b)if(Object.prototype.hasOwnProperty.call(b,d)){if(!goog.html.SafeHtml.VALID_NAMES_IN_TAG_.test(d))throw Error(goog.html.SafeHtml.ENABLE_ERROR_MESSAGES?'Invalid attribute name \"'+d+'\".':\"\");var e=b[d];null!=e&&(c+=\" \"+goog.html.SafeHtml.getAttrNameAndValue_(a,d,e))}return c};\ngoog.html.SafeHtml.combineAttributes=function(a,b,c){var d={},e;for(e in a)Object.prototype.hasOwnProperty.call(a,e)&&(goog.asserts.assert(e.toLowerCase()==e,\"Must be lower case\"),d[e]=a[e]);for(e in b)Object.prototype.hasOwnProperty.call(b,e)&&(goog.asserts.assert(e.toLowerCase()==e,\"Must be lower case\"),d[e]=b[e]);if(c)for(e in c)if(Object.prototype.hasOwnProperty.call(c,e)){var f=e.toLowerCase();if(f in a)throw Error(goog.html.SafeHtml.ENABLE_ERROR_MESSAGES?'Cannot override \"'+f+'\" attribute, got \"'+\ne+'\" with value \"'+c[e]+'\"':\"\");f in b&&delete d[f];d[e]=c[e]}return d};goog.html.SafeHtml.DOCTYPE_HTML=function(){return goog.html.SafeHtml.createSafeHtmlSecurityPrivateDoNotAccessOrElse(\"<!DOCTYPE html>\",goog.i18n.bidi.Dir.NEUTRAL)}();goog.html.SafeHtml.EMPTY=new goog.html.SafeHtml(goog.global.trustedTypes&&goog.global.trustedTypes.emptyHTML||\"\",goog.i18n.bidi.Dir.NEUTRAL,goog.html.SafeHtml.CONSTRUCTOR_TOKEN_PRIVATE_);\ngoog.html.SafeHtml.BR=function(){return goog.html.SafeHtml.createSafeHtmlSecurityPrivateDoNotAccessOrElse(\"<br>\",goog.i18n.bidi.Dir.NEUTRAL)}();goog.html.uncheckedconversions={};goog.html.uncheckedconversions.safeHtmlFromStringKnownToSatisfyTypeContract=function(a,b,c){goog.asserts.assertString(goog.string.Const.unwrap(a),\"must provide justification\");goog.asserts.assert(!goog.string.internal.isEmptyOrWhitespace(goog.string.Const.unwrap(a)),\"must provide non-empty justification\");return goog.html.SafeHtml.createSafeHtmlSecurityPrivateDoNotAccessOrElse(b,c||null)};\ngoog.html.uncheckedconversions.safeScriptFromStringKnownToSatisfyTypeContract=function(a,b){goog.asserts.assertString(goog.string.Const.unwrap(a),\"must provide justification\");goog.asserts.assert(!goog.string.internal.isEmptyOrWhitespace(goog.string.Const.unwrap(a)),\"must provide non-empty justification\");return module$contents$goog$html$SafeScript_SafeScript.createSafeScriptSecurityPrivateDoNotAccessOrElse(b)};\ngoog.html.uncheckedconversions.safeStyleFromStringKnownToSatisfyTypeContract=function(a,b){goog.asserts.assertString(goog.string.Const.unwrap(a),\"must provide justification\");goog.asserts.assert(!goog.string.internal.isEmptyOrWhitespace(goog.string.Const.unwrap(a)),\"must provide non-empty justification\");return goog.html.SafeStyle.createSafeStyleSecurityPrivateDoNotAccessOrElse(b)};\ngoog.html.uncheckedconversions.safeStyleSheetFromStringKnownToSatisfyTypeContract=function(a,b){goog.asserts.assertString(goog.string.Const.unwrap(a),\"must provide justification\");goog.asserts.assert(!goog.string.internal.isEmptyOrWhitespace(goog.string.Const.unwrap(a)),\"must provide non-empty justification\");return module$contents$goog$html$SafeStyleSheet_SafeStyleSheet.createSafeStyleSheetSecurityPrivateDoNotAccessOrElse(b)};\ngoog.html.uncheckedconversions.safeUrlFromStringKnownToSatisfyTypeContract=function(a,b){goog.asserts.assertString(goog.string.Const.unwrap(a),\"must provide justification\");goog.asserts.assert(!goog.string.internal.isEmptyOrWhitespace(goog.string.Const.unwrap(a)),\"must provide non-empty justification\");return goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse(b)};\ngoog.html.uncheckedconversions.trustedResourceUrlFromStringKnownToSatisfyTypeContract=function(a,b){goog.asserts.assertString(goog.string.Const.unwrap(a),\"must provide justification\");goog.asserts.assert(!goog.string.internal.isEmptyOrWhitespace(goog.string.Const.unwrap(a)),\"must provide non-empty justification\");return goog.html.TrustedResourceUrl.createTrustedResourceUrlSecurityPrivateDoNotAccessOrElse(b)};goog.dom.safe={};goog.dom.safe.InsertAdjacentHtmlPosition={AFTERBEGIN:\"afterbegin\",AFTEREND:\"afterend\",BEFOREBEGIN:\"beforebegin\",BEFOREEND:\"beforeend\"};goog.dom.safe.insertAdjacentHtml=function(a,b,c){a.insertAdjacentHTML(b,goog.html.SafeHtml.unwrapTrustedHTML(c))};goog.dom.safe.SET_INNER_HTML_DISALLOWED_TAGS_={MATH:!0,SCRIPT:!0,STYLE:!0,SVG:!0,TEMPLATE:!0};\ngoog.dom.safe.isInnerHtmlCleanupRecursive_=goog.functions.cacheReturnValue(function(){if(goog.DEBUG&&\"undefined\"===typeof document)return!1;var a=document.createElement(\"div\"),b=document.createElement(\"div\");b.appendChild(document.createElement(\"div\"));a.appendChild(b);if(goog.DEBUG&&!a.firstChild)return!1;b=a.firstChild.firstChild;a.innerHTML=goog.html.SafeHtml.unwrapTrustedHTML(goog.html.SafeHtml.EMPTY);return!b.parentElement});\ngoog.dom.safe.unsafeSetInnerHtmlDoNotUseOrElse=function(a,b){if(goog.dom.safe.isInnerHtmlCleanupRecursive_())for(;a.lastChild;)a.removeChild(a.lastChild);a.innerHTML=goog.html.SafeHtml.unwrapTrustedHTML(b)};\ngoog.dom.safe.setInnerHtml=function(a,b){if(goog.asserts.ENABLE_ASSERTS&&a.tagName){var c=a.tagName.toUpperCase();if(goog.dom.safe.SET_INNER_HTML_DISALLOWED_TAGS_[c])throw Error(\"goog.dom.safe.setInnerHtml cannot be used to set content of \"+a.tagName+\".\");}goog.dom.safe.unsafeSetInnerHtmlDoNotUseOrElse(a,b)};\ngoog.dom.safe.setInnerHtmlFromConstant=function(a,b){goog.dom.safe.setInnerHtml(a,goog.html.uncheckedconversions.safeHtmlFromStringKnownToSatisfyTypeContract(goog.string.Const.from(\"Constant HTML to be immediatelly used.\"),goog.string.Const.unwrap(b)))};goog.dom.safe.setOuterHtml=function(a,b){a.outerHTML=goog.html.SafeHtml.unwrapTrustedHTML(b)};\ngoog.dom.safe.setFormElementAction=function(a,b){b=b instanceof goog.html.SafeUrl?b:goog.html.SafeUrl.sanitizeAssertUnchanged(b);goog.dom.asserts.assertIsHTMLFormElement(a).action=goog.html.SafeUrl.unwrap(b)};goog.dom.safe.setButtonFormAction=function(a,b){b=b instanceof goog.html.SafeUrl?b:goog.html.SafeUrl.sanitizeAssertUnchanged(b);goog.dom.asserts.assertIsHTMLButtonElement(a).formAction=goog.html.SafeUrl.unwrap(b)};\ngoog.dom.safe.setInputFormAction=function(a,b){b=b instanceof goog.html.SafeUrl?b:goog.html.SafeUrl.sanitizeAssertUnchanged(b);goog.dom.asserts.assertIsHTMLInputElement(a).formAction=goog.html.SafeUrl.unwrap(b)};goog.dom.safe.setStyle=function(a,b){a.style.cssText=goog.html.SafeStyle.unwrap(b)};goog.dom.safe.documentWrite=function(a,b){a.write(goog.html.SafeHtml.unwrapTrustedHTML(b))};\ngoog.dom.safe.setAnchorHref=function(a,b){goog.dom.asserts.assertIsHTMLAnchorElement(a);b=b instanceof goog.html.SafeUrl?b:goog.html.SafeUrl.sanitizeAssertUnchanged(b);a.href=goog.html.SafeUrl.unwrap(b)};goog.dom.safe.setImageSrc=function(a,b){goog.dom.asserts.assertIsHTMLImageElement(a);if(!(b instanceof goog.html.SafeUrl)){var c=/^data:image\\//i.test(b);b=goog.html.SafeUrl.sanitizeAssertUnchanged(b,c)}a.src=goog.html.SafeUrl.unwrap(b)};\ngoog.dom.safe.setAudioSrc=function(a,b){goog.dom.asserts.assertIsHTMLAudioElement(a);if(!(b instanceof goog.html.SafeUrl)){var c=/^data:audio\\//i.test(b);b=goog.html.SafeUrl.sanitizeAssertUnchanged(b,c)}a.src=goog.html.SafeUrl.unwrap(b)};goog.dom.safe.setVideoSrc=function(a,b){goog.dom.asserts.assertIsHTMLVideoElement(a);if(!(b instanceof goog.html.SafeUrl)){var c=/^data:video\\//i.test(b);b=goog.html.SafeUrl.sanitizeAssertUnchanged(b,c)}a.src=goog.html.SafeUrl.unwrap(b)};\ngoog.dom.safe.setEmbedSrc=function(a,b){goog.dom.asserts.assertIsHTMLEmbedElement(a);a.src=goog.html.TrustedResourceUrl.unwrapTrustedScriptURL(b)};goog.dom.safe.setFrameSrc=function(a,b){goog.dom.asserts.assertIsHTMLFrameElement(a);a.src=goog.html.TrustedResourceUrl.unwrap(b)};goog.dom.safe.setIframeSrc=function(a,b){goog.dom.asserts.assertIsHTMLIFrameElement(a);a.src=goog.html.TrustedResourceUrl.unwrap(b)};\ngoog.dom.safe.setIframeSrcdoc=function(a,b){goog.dom.asserts.assertIsHTMLIFrameElement(a);a.srcdoc=goog.html.SafeHtml.unwrapTrustedHTML(b)};\ngoog.dom.safe.setLinkHrefAndRel=function(a,b,c){goog.dom.asserts.assertIsHTMLLinkElement(a);a.rel=c;goog.string.internal.caseInsensitiveContains(c,\"stylesheet\")?(goog.asserts.assert(b instanceof goog.html.TrustedResourceUrl,'URL must be TrustedResourceUrl because \"rel\" contains \"stylesheet\"'),a.href=goog.html.TrustedResourceUrl.unwrap(b)):a.href=b instanceof goog.html.TrustedResourceUrl?goog.html.TrustedResourceUrl.unwrap(b):b instanceof goog.html.SafeUrl?goog.html.SafeUrl.unwrap(b):goog.html.SafeUrl.unwrap(goog.html.SafeUrl.sanitizeAssertUnchanged(b))};\ngoog.dom.safe.setObjectData=function(a,b){goog.dom.asserts.assertIsHTMLObjectElement(a);a.data=goog.html.TrustedResourceUrl.unwrapTrustedScriptURL(b)};goog.dom.safe.setScriptSrc=function(a,b){goog.dom.asserts.assertIsHTMLScriptElement(a);a.src=goog.html.TrustedResourceUrl.unwrapTrustedScriptURL(b);goog.dom.safe.setNonceForScriptElement_(a)};\ngoog.dom.safe.setScriptContent=function(a,b){goog.dom.asserts.assertIsHTMLScriptElement(a);a.textContent=module$contents$goog$html$SafeScript_SafeScript.unwrapTrustedScript(b);goog.dom.safe.setNonceForScriptElement_(a)};goog.dom.safe.setNonceForScriptElement_=function(a){var b=goog.getScriptNonce(a.ownerDocument&&a.ownerDocument.defaultView);b&&a.setAttribute(\"nonce\",b)};\ngoog.dom.safe.setLocationHref=function(a,b){goog.dom.asserts.assertIsLocation(a);b=b instanceof goog.html.SafeUrl?b:goog.html.SafeUrl.sanitizeAssertUnchanged(b);a.href=goog.html.SafeUrl.unwrap(b)};goog.dom.safe.assignLocation=function(a,b){goog.dom.asserts.assertIsLocation(a);b=b instanceof goog.html.SafeUrl?b:goog.html.SafeUrl.sanitizeAssertUnchanged(b);a.assign(goog.html.SafeUrl.unwrap(b))};\ngoog.dom.safe.replaceLocation=function(a,b){b=b instanceof goog.html.SafeUrl?b:goog.html.SafeUrl.sanitizeAssertUnchanged(b);a.replace(goog.html.SafeUrl.unwrap(b))};goog.dom.safe.openInWindow=function(a,b,c,d,e){a=a instanceof goog.html.SafeUrl?a:goog.html.SafeUrl.sanitizeAssertUnchanged(a);b=b||goog.global;c=c instanceof goog.string.Const?goog.string.Const.unwrap(c):c||\"\";return b.open(goog.html.SafeUrl.unwrap(a),c,d,e)};\ngoog.dom.safe.parseFromStringHtml=function(a,b){return goog.dom.safe.parseFromString(a,b,\"text/html\")};goog.dom.safe.parseFromString=function(a,b,c){return a.parseFromString(goog.html.SafeHtml.unwrapTrustedHTML(b),c)};\ngoog.dom.safe.createImageFromBlob=function(a){if(!/^image\\/.*/g.test(a.type))throw Error(\"goog.dom.safe.createImageFromBlob only accepts MIME type image/.*.\");var b=goog.global.URL.createObjectURL(a);a=new goog.global.Image;a.onload=function(){goog.global.URL.revokeObjectURL(b)};goog.dom.safe.setImageSrc(a,goog.html.uncheckedconversions.safeUrlFromStringKnownToSatisfyTypeContract(goog.string.Const.from(\"Image blob URL.\"),b));return a};goog.string.DETECT_DOUBLE_ESCAPING=!1;goog.string.FORCE_NON_DOM_HTML_UNESCAPING=!1;goog.string.Unicode={NBSP:\"\\u00a0\"};goog.string.startsWith=goog.string.internal.startsWith;goog.string.endsWith=goog.string.internal.endsWith;goog.string.caseInsensitiveStartsWith=goog.string.internal.caseInsensitiveStartsWith;goog.string.caseInsensitiveEndsWith=goog.string.internal.caseInsensitiveEndsWith;goog.string.caseInsensitiveEquals=goog.string.internal.caseInsensitiveEquals;\ngoog.string.subs=function(a,b){for(var c=a.split(\"%s\"),d=\"\",e=Array.prototype.slice.call(arguments,1);e.length&&1<c.length;)d+=c.shift()+e.shift();return d+c.join(\"%s\")};goog.string.collapseWhitespace=function(a){return a.replace(/[\\s\\xa0]+/g,\" \").replace(/^\\s+|\\s+$/g,\"\")};goog.string.isEmptyOrWhitespace=goog.string.internal.isEmptyOrWhitespace;goog.string.isEmptyString=function(a){return 0==a.length};goog.string.isEmpty=goog.string.isEmptyOrWhitespace;goog.string.isEmptyOrWhitespaceSafe=function(a){return goog.string.isEmptyOrWhitespace(goog.string.makeSafe(a))};\ngoog.string.isEmptySafe=goog.string.isEmptyOrWhitespaceSafe;goog.string.isBreakingWhitespace=function(a){return!/[^\\t\\n\\r ]/.test(a)};goog.string.isAlpha=function(a){return!/[^a-zA-Z]/.test(a)};goog.string.isNumeric=function(a){return!/[^0-9]/.test(a)};goog.string.isAlphaNumeric=function(a){return!/[^a-zA-Z0-9]/.test(a)};goog.string.isSpace=function(a){return\" \"==a};goog.string.isUnicodeChar=function(a){return 1==a.length&&\" \"<=a&&\"~\">=a||\"\\u0080\"<=a&&\"\\ufffd\">=a};\ngoog.string.stripNewlines=function(a){return a.replace(/(\\r\\n|\\r|\\n)+/g,\" \")};goog.string.canonicalizeNewlines=function(a){return a.replace(/(\\r\\n|\\r|\\n)/g,\"\\n\")};goog.string.normalizeWhitespace=function(a){return a.replace(/\\xa0|\\s/g,\" \")};goog.string.normalizeSpaces=function(a){return a.replace(/\\xa0|[ \\t]+/g,\" \")};goog.string.collapseBreakingSpaces=function(a){return a.replace(/[\\t\\r\\n ]+/g,\" \").replace(/^[\\t\\r\\n ]+|[\\t\\r\\n ]+$/g,\"\")};goog.string.trim=goog.string.internal.trim;\ngoog.string.trimLeft=function(a){return a.replace(/^[\\s\\xa0]+/,\"\")};goog.string.trimRight=function(a){return a.replace(/[\\s\\xa0]+$/,\"\")};goog.string.caseInsensitiveCompare=goog.string.internal.caseInsensitiveCompare;\ngoog.string.numberAwareCompare_=function(a,b,c){if(a==b)return 0;if(!a)return-1;if(!b)return 1;for(var d=a.toLowerCase().match(c),e=b.toLowerCase().match(c),f=Math.min(d.length,e.length),g=0;g<f;g++){c=d[g];var h=e[g];if(c!=h)return a=parseInt(c,10),!isNaN(a)&&(b=parseInt(h,10),!isNaN(b)&&a-b)?a-b:c<h?-1:1}return d.length!=e.length?d.length-e.length:a<b?-1:1};goog.string.intAwareCompare=function(a,b){return goog.string.numberAwareCompare_(a,b,/\\d+|\\D+/g)};\ngoog.string.floatAwareCompare=function(a,b){return goog.string.numberAwareCompare_(a,b,/\\d+|\\.\\d+|\\D+/g)};goog.string.numerateCompare=goog.string.floatAwareCompare;goog.string.urlEncode=function(a){return encodeURIComponent(String(a))};goog.string.urlDecode=function(a){return decodeURIComponent(a.replace(/\\+/g,\" \"))};goog.string.newLineToBr=goog.string.internal.newLineToBr;\ngoog.string.htmlEscape=function(a,b){a=goog.string.internal.htmlEscape(a,b);goog.string.DETECT_DOUBLE_ESCAPING&&(a=a.replace(goog.string.E_RE_,\"&#101;\"));return a};goog.string.E_RE_=/e/g;goog.string.unescapeEntities=function(a){return goog.string.contains(a,\"&\")?!goog.string.FORCE_NON_DOM_HTML_UNESCAPING&&\"document\"in goog.global?goog.string.unescapeEntitiesUsingDom_(a):goog.string.unescapePureXmlEntities_(a):a};\ngoog.string.unescapeEntitiesWithDocument=function(a,b){return goog.string.contains(a,\"&\")?goog.string.unescapeEntitiesUsingDom_(a,b):a};\ngoog.string.unescapeEntitiesUsingDom_=function(a,b){var c={\"&amp;\":\"&\",\"&lt;\":\"<\",\"&gt;\":\">\",\"&quot;\":'\"'};var d=b?b.createElement(\"div\"):goog.global.document.createElement(\"div\");return a.replace(goog.string.HTML_ENTITY_PATTERN_,function(e,f){var g=c[e];if(g)return g;\"#\"==f.charAt(0)&&(f=Number(\"0\"+f.substr(1)),isNaN(f)||(g=String.fromCharCode(f)));g||(goog.dom.safe.setInnerHtml(d,goog.html.uncheckedconversions.safeHtmlFromStringKnownToSatisfyTypeContract(goog.string.Const.from(\"Single HTML entity.\"),\ne+\" \")),g=d.firstChild.nodeValue.slice(0,-1));return c[e]=g})};goog.string.unescapePureXmlEntities_=function(a){return a.replace(/&([^;]+);/g,function(b,c){switch(c){case \"amp\":return\"&\";case \"lt\":return\"<\";case \"gt\":return\">\";case \"quot\":return'\"';default:return\"#\"!=c.charAt(0)||(c=Number(\"0\"+c.substr(1)),isNaN(c))?b:String.fromCharCode(c)}})};goog.string.HTML_ENTITY_PATTERN_=/&([^;\\s<&]+);?/g;goog.string.whitespaceEscape=function(a,b){return goog.string.newLineToBr(a.replace(/  /g,\" &#160;\"),b)};\ngoog.string.preserveSpaces=function(a){return a.replace(/(^|[\\n ]) /g,\"$1\"+goog.string.Unicode.NBSP)};goog.string.stripQuotes=function(a,b){for(var c=b.length,d=0;d<c;d++){var e=1==c?b:b.charAt(d);if(a.charAt(0)==e&&a.charAt(a.length-1)==e)return a.substring(1,a.length-1)}return a};goog.string.truncate=function(a,b,c){c&&(a=goog.string.unescapeEntities(a));a.length>b&&(a=a.substring(0,b-3)+\"...\");c&&(a=goog.string.htmlEscape(a));return a};\ngoog.string.truncateMiddle=function(a,b,c,d){c&&(a=goog.string.unescapeEntities(a));if(d&&a.length>b){d>b&&(d=b);var e=a.length-d;a=a.substring(0,b-d)+\"...\"+a.substring(e)}else a.length>b&&(d=Math.floor(b/2),e=a.length-d,a=a.substring(0,d+b%2)+\"...\"+a.substring(e));c&&(a=goog.string.htmlEscape(a));return a};goog.string.specialEscapeChars_={\"\\x00\":\"\\\\0\",\"\\b\":\"\\\\b\",\"\\f\":\"\\\\f\",\"\\n\":\"\\\\n\",\"\\r\":\"\\\\r\",\"\\t\":\"\\\\t\",\"\\x0B\":\"\\\\x0B\",'\"':'\\\\\"',\"\\\\\":\"\\\\\\\\\",\"<\":\"\\\\u003C\"};goog.string.jsEscapeCache_={\"'\":\"\\\\'\"};\ngoog.string.quote=function(a){a=String(a);for(var b=['\"'],c=0;c<a.length;c++){var d=a.charAt(c),e=d.charCodeAt(0);b[c+1]=goog.string.specialEscapeChars_[d]||(31<e&&127>e?d:goog.string.escapeChar(d))}b.push('\"');return b.join(\"\")};goog.string.escapeString=function(a){for(var b=[],c=0;c<a.length;c++)b[c]=goog.string.escapeChar(a.charAt(c));return b.join(\"\")};\ngoog.string.escapeChar=function(a){if(a in goog.string.jsEscapeCache_)return goog.string.jsEscapeCache_[a];if(a in goog.string.specialEscapeChars_)return goog.string.jsEscapeCache_[a]=goog.string.specialEscapeChars_[a];var b=a.charCodeAt(0);if(31<b&&127>b)var c=a;else{if(256>b){if(c=\"\\\\x\",16>b||256<b)c+=\"0\"}else c=\"\\\\u\",4096>b&&(c+=\"0\");c+=b.toString(16).toUpperCase()}return goog.string.jsEscapeCache_[a]=c};goog.string.contains=goog.string.internal.contains;goog.string.caseInsensitiveContains=goog.string.internal.caseInsensitiveContains;\ngoog.string.countOf=function(a,b){return a&&b?a.split(b).length-1:0};goog.string.removeAt=function(a,b,c){var d=a;0<=b&&b<a.length&&0<c&&(d=a.substr(0,b)+a.substr(b+c,a.length-b-c));return d};goog.string.remove=function(a,b){return a.replace(b,\"\")};goog.string.removeAll=function(a,b){b=new RegExp(goog.string.regExpEscape(b),\"g\");return a.replace(b,\"\")};goog.string.replaceAll=function(a,b,c){b=new RegExp(goog.string.regExpEscape(b),\"g\");return a.replace(b,c.replace(/\\$/g,\"$$$$\"))};\ngoog.string.regExpEscape=function(a){return String(a).replace(/([-()\\[\\]{}+?*.$\\^|,:#<!\\\\])/g,\"\\\\$1\").replace(/\\x08/g,\"\\\\x08\")};goog.string.repeat=String.prototype.repeat?function(a,b){return a.repeat(b)}:function(a,b){return Array(b+1).join(a)};goog.string.padNumber=function(a,b,c){a=void 0!==c?a.toFixed(c):String(a);c=a.indexOf(\".\");-1==c&&(c=a.length);return goog.string.repeat(\"0\",Math.max(0,b-c))+a};goog.string.makeSafe=function(a){return null==a?\"\":String(a)};\ngoog.string.buildString=function(a){return Array.prototype.join.call(arguments,\"\")};goog.string.getRandomString=function(){return Math.floor(2147483648*Math.random()).toString(36)+Math.abs(Math.floor(2147483648*Math.random())^goog.now()).toString(36)};goog.string.compareVersions=goog.string.internal.compareVersions;goog.string.hashCode=function(a){for(var b=0,c=0;c<a.length;++c)b=31*b+a.charCodeAt(c)>>>0;return b};goog.string.uniqueStringCounter_=2147483648*Math.random()|0;\ngoog.string.createUniqueString=function(){return\"goog_\"+goog.string.uniqueStringCounter_++};goog.string.toNumber=function(a){var b=Number(a);return 0==b&&goog.string.isEmptyOrWhitespace(a)?NaN:b};goog.string.isLowerCamelCase=function(a){return/^[a-z]+([A-Z][a-z]*)*$/.test(a)};goog.string.isUpperCamelCase=function(a){return/^([A-Z][a-z]*)+$/.test(a)};goog.string.toCamelCase=function(a){return String(a).replace(/\\-([a-z])/g,function(b,c){return c.toUpperCase()})};\ngoog.string.toSelectorCase=function(a){return String(a).replace(/([A-Z])/g,\"-$1\").toLowerCase()};goog.string.toTitleCase=function(a,b){b=\"string\"===typeof b?goog.string.regExpEscape(b):\"\\\\s\";return a.replace(new RegExp(\"(^\"+(b?\"|[\"+b+\"]+\":\"\")+\")([a-z])\",\"g\"),function(c,d,e){return d+e.toUpperCase()})};goog.string.capitalize=function(a){return String(a.charAt(0)).toUpperCase()+String(a.substr(1)).toLowerCase()};\ngoog.string.parseInt=function(a){isFinite(a)&&(a=String(a));return\"string\"===typeof a?/^\\s*-?0x/i.test(a)?parseInt(a,16):parseInt(a,10):NaN};goog.string.splitLimit=function(a,b,c){a=a.split(b);for(var d=[];0<c&&a.length;)d.push(a.shift()),c--;a.length&&d.push(a.join(b));return d};goog.string.lastComponent=function(a,b){if(b)\"string\"==typeof b&&(b=[b]);else return a;for(var c=-1,d=0;d<b.length;d++)if(\"\"!=b[d]){var e=a.lastIndexOf(b[d]);e>c&&(c=e)}return-1==c?a:a.slice(c+1)};\ngoog.string.editDistance=function(a,b){var c=[],d=[];if(a==b)return 0;if(!a.length||!b.length)return Math.max(a.length,b.length);for(var e=0;e<b.length+1;e++)c[e]=e;for(e=0;e<a.length;e++){d[0]=e+1;for(var f=0;f<b.length;f++)d[f+1]=Math.min(d[f]+1,c[f+1]+1,c[f]+Number(a[e]!=b[f]));for(f=0;f<c.length;f++)c[f]=d[f]}return d[b.length]};goog.proto2={};goog.proto2.Descriptor=function(a,b,c){this.messageType_=a;this.name_=b.name||null;this.fullName_=b.fullName||null;this.containingType_=b.containingType;this.fields_={};for(a=0;a<c.length;a++)b=c[a],this.fields_[b.getTag()]=b};goog.proto2.Descriptor.prototype.getName=function(){return this.name_};goog.proto2.Descriptor.prototype.getFullName=function(){return this.fullName_};\ngoog.proto2.Descriptor.prototype.getContainingType=function(){return this.containingType_?this.containingType_.getDescriptor():null};goog.proto2.Descriptor.prototype.getFields=function(){var a=goog.object.getValues(this.fields_);module$contents$goog$array_sort(a,function(b,c){return b.getTag()-c.getTag()});return a};goog.proto2.Descriptor.prototype.getFieldsMap=function(){return this.fields_};\ngoog.proto2.Descriptor.prototype.findFieldByName=function(a){return goog.object.findValue(this.fields_,function(b,c,d){return b.getName()==a})||null};goog.proto2.Descriptor.prototype.findFieldByTag=function(a){goog.asserts.assert(goog.string.isNumeric(a));return this.fields_[parseInt(a,10)]||null};goog.proto2.Descriptor.prototype.createMessageInstance=function(){return new this.messageType_};goog.proto2.FieldDescriptor=function(a,b,c){this.parent_=a;goog.asserts.assert(goog.string.isNumeric(b));this.tag_=b;this.name_=c.name;this.isPacked_=!!c.packed;this.isRepeated_=!!c.repeated;this.isRequired_=!!c.required;this.fieldType_=c.fieldType;this.nativeType_=c.type;this.deserializationConversionPermitted_=!1;switch(this.fieldType_){case goog.proto2.FieldDescriptor.FieldType.INT64:case goog.proto2.FieldDescriptor.FieldType.UINT64:case goog.proto2.FieldDescriptor.FieldType.FIXED64:case goog.proto2.FieldDescriptor.FieldType.SFIXED64:case goog.proto2.FieldDescriptor.FieldType.SINT64:case goog.proto2.FieldDescriptor.FieldType.FLOAT:case goog.proto2.FieldDescriptor.FieldType.DOUBLE:this.deserializationConversionPermitted_=\n!0}this.defaultValue_=c.defaultValue};goog.proto2.FieldDescriptor.FieldType={DOUBLE:1,FLOAT:2,INT64:3,UINT64:4,INT32:5,FIXED64:6,FIXED32:7,BOOL:8,STRING:9,GROUP:10,MESSAGE:11,BYTES:12,UINT32:13,ENUM:14,SFIXED32:15,SFIXED64:16,SINT32:17,SINT64:18};goog.proto2.FieldDescriptor.prototype.getTag=function(){return this.tag_};goog.proto2.FieldDescriptor.prototype.getContainingType=function(){return this.parent_.prototype.getDescriptor()};goog.proto2.FieldDescriptor.prototype.getName=function(){return this.name_};\ngoog.proto2.FieldDescriptor.prototype.getDefaultValue=function(){if(void 0===this.defaultValue_){var a=this.nativeType_;if(a===Boolean)this.defaultValue_=!1;else if(a===Number)this.defaultValue_=0;else if(a===String)this.defaultValue_=this.deserializationConversionPermitted_?\"0\":\"\";else return new a}return this.defaultValue_};goog.proto2.FieldDescriptor.prototype.getFieldType=function(){return this.fieldType_};goog.proto2.FieldDescriptor.prototype.getNativeType=function(){return this.nativeType_};\ngoog.proto2.FieldDescriptor.prototype.deserializationConversionPermitted=function(){return this.deserializationConversionPermitted_};goog.proto2.FieldDescriptor.prototype.getFieldMessageType=function(){return this.nativeType_.prototype.getDescriptor()};goog.proto2.FieldDescriptor.prototype.isCompositeType=function(){return this.fieldType_==goog.proto2.FieldDescriptor.FieldType.MESSAGE||this.fieldType_==goog.proto2.FieldDescriptor.FieldType.GROUP};goog.proto2.FieldDescriptor.prototype.isPacked=function(){return this.isPacked_};\ngoog.proto2.FieldDescriptor.prototype.isRepeated=function(){return this.isRepeated_};goog.proto2.FieldDescriptor.prototype.isRequired=function(){return this.isRequired_};goog.proto2.FieldDescriptor.prototype.isOptional=function(){return!this.isRepeated_&&!this.isRequired_};goog.proto2.Message=function(){this.values_={};this.fields_=this.getDescriptor().getFieldsMap();this.deserializedFields_=this.lazyDeserializer_=null};goog.proto2.Message.FieldType={DOUBLE:1,FLOAT:2,INT64:3,UINT64:4,INT32:5,FIXED64:6,FIXED32:7,BOOL:8,STRING:9,GROUP:10,MESSAGE:11,BYTES:12,UINT32:13,ENUM:14,SFIXED32:15,SFIXED64:16,SINT32:17,SINT64:18};goog.proto2.Message.prototype.initializeForLazyDeserializer=function(a,b){this.lazyDeserializer_=a;this.values_=b;this.deserializedFields_={}};\ngoog.proto2.Message.prototype.setUnknown=function(a,b){goog.asserts.assert(!this.fields_[a],\"Field is not unknown in this message\");goog.asserts.assert(1<=a,\"Tag \"+a+' has value \"'+b+'\" in descriptor '+this.getDescriptor().getName());goog.asserts.assert(null!==b,\"Value cannot be null\");this.values_[a]=b;this.deserializedFields_&&delete this.deserializedFields_[a]};\ngoog.proto2.Message.prototype.forEachUnknown=function(a,b){b=b||this;for(var c in this.values_){var d=Number(c);this.fields_[d]||a.call(b,d,this.values_[c])}};goog.proto2.Message.prototype.getDescriptor=goog.abstractMethod;goog.proto2.Message.prototype.has=function(a){goog.asserts.assert(a.getContainingType()==this.getDescriptor(),\"The current message does not contain the given field\");return this.has$Value(a.getTag())};\ngoog.proto2.Message.prototype.arrayOf=function(a){goog.asserts.assert(a.getContainingType()==this.getDescriptor(),\"The current message does not contain the given field\");return this.array$Values(a.getTag())};goog.proto2.Message.prototype.countOf=function(a){goog.asserts.assert(a.getContainingType()==this.getDescriptor(),\"The current message does not contain the given field\");return this.count$Values(a.getTag())};\ngoog.proto2.Message.prototype.get=function(a,b){goog.asserts.assert(a.getContainingType()==this.getDescriptor(),\"The current message does not contain the given field\");return this.get$Value(a.getTag(),b)};goog.proto2.Message.prototype.getOrDefault=function(a,b){goog.asserts.assert(a.getContainingType()==this.getDescriptor(),\"The current message does not contain the given field\");return this.get$ValueOrDefault(a.getTag(),b)};\ngoog.proto2.Message.prototype.set=function(a,b){goog.asserts.assert(a.getContainingType()==this.getDescriptor(),\"The current message does not contain the given field\");this.set$Value(a.getTag(),b)};goog.proto2.Message.prototype.add=function(a,b){goog.asserts.assert(a.getContainingType()==this.getDescriptor(),\"The current message does not contain the given field\");this.add$Value(a.getTag(),b)};\ngoog.proto2.Message.prototype.clear=function(a){goog.asserts.assert(a.getContainingType()==this.getDescriptor(),\"The current message does not contain the given field\");this.clear$Field(a.getTag())};\ngoog.proto2.Message.prototype.equals=function(a){if(!a||this.constructor!=a.constructor)return!1;for(var b=this.getDescriptor().getFields(),c=0;c<b.length;c++){var d=b[c],e=d.getTag();if(this.has$Value(e)!=a.has$Value(e))return!1;if(this.has$Value(e)){var f=d.isCompositeType(),g=this.getValueForTag_(e);e=a.getValueForTag_(e);if(d.isRepeated()){if(g.length!=e.length)return!1;for(d=0;d<g.length;d++){var h=g[d],k=e[d];if(f?!h.equals(k):h!=k)return!1}}else if(f?!g.equals(e):g!=e)return!1}}return!0};\ngoog.proto2.Message.prototype.copyFrom=function(a){goog.asserts.assert(this.constructor==a.constructor,\"The source message must have the same type.\");this!=a&&(this.values_={},this.deserializedFields_&&(this.deserializedFields_={}),this.mergeFrom(a))};\ngoog.proto2.Message.prototype.mergeFrom=function(a){goog.asserts.assert(this.constructor==a.constructor,\"The source message must have the same type.\");for(var b=this.getDescriptor().getFields(),c=0;c<b.length;c++){var d=b[c],e=d.getTag();if(a.has$Value(e)){this.deserializedFields_&&delete this.deserializedFields_[d.getTag()];var f=d.isCompositeType();if(d.isRepeated()){d=a.array$Values(e);for(var g=0;g<d.length;g++)this.add$Value(e,f?d[g].clone():d[g])}else d=a.getValueForTag_(e),f?(f=this.getValueForTag_(e))?\nf.mergeFrom(d):this.set$Value(e,d.clone()):this.set$Value(e,d)}}};goog.proto2.Message.prototype.clone=function(){var a=new this.constructor;a.copyFrom(this);return a};\ngoog.proto2.Message.prototype.initDefaults=function(a){for(var b=this.getDescriptor().getFields(),c=0;c<b.length;c++){var d=b[c],e=d.getTag(),f=d.isCompositeType();this.has$Value(e)||d.isRepeated()||(f?this.values_[e]=new (d.getNativeType()):a&&(this.values_[e]=d.getDefaultValue()));if(f)if(d.isRepeated())for(d=this.array$Values(e),e=0;e<d.length;e++)d[e].initDefaults(a);else this.get$Value(e).initDefaults(a)}};goog.proto2.Message.prototype.has$Value=function(a){return null!=this.values_[a]};\ngoog.proto2.Message.prototype.getValueForTag_=function(a){var b=this.values_[a];return null==b?null:this.lazyDeserializer_?a in this.deserializedFields_?this.deserializedFields_[a]:(b=this.lazyDeserializer_.deserializeField(this,this.fields_[a],b),this.deserializedFields_[a]=b):b};\ngoog.proto2.Message.prototype.get$Value=function(a,b){var c=this.getValueForTag_(a);return this.fields_[a].isRepeated()?(a=b||0,goog.asserts.assert(0<=a&&a<c.length,\"Given index %s is out of bounds.  Repeated field length: %s\",a,c.length),c[a]):c};goog.proto2.Message.prototype.get$ValueOrDefault=function(a,b){return this.has$Value(a)?this.get$Value(a,b):this.fields_[a].getDefaultValue()};goog.proto2.Message.prototype.array$Values=function(a){return this.getValueForTag_(a)||[]};\ngoog.proto2.Message.prototype.count$Values=function(a){return this.fields_[a].isRepeated()?this.has$Value(a)?this.values_[a].length:0:this.has$Value(a)?1:0};goog.proto2.Message.prototype.set$Value=function(a,b){goog.asserts.ENABLE_ASSERTS&&this.checkFieldType_(this.fields_[a],b);this.values_[a]=b;this.deserializedFields_&&(this.deserializedFields_[a]=b)};\ngoog.proto2.Message.prototype.add$Value=function(a,b){goog.asserts.ENABLE_ASSERTS&&this.checkFieldType_(this.fields_[a],b);this.values_[a]||(this.values_[a]=[]);this.values_[a].push(b);this.deserializedFields_&&delete this.deserializedFields_[a]};goog.proto2.Message.prototype.checkFieldType_=function(a,b){a.getFieldType()==goog.proto2.FieldDescriptor.FieldType.ENUM?goog.asserts.assertNumber(b):goog.asserts.assert(Object(b).constructor==a.getNativeType())};\ngoog.proto2.Message.prototype.clear$Field=function(a){delete this.values_[a];this.deserializedFields_&&delete this.deserializedFields_[a]};goog.proto2.Message.createDescriptor=function(a,b){var c=[],d=b[0],e;for(e in b)0!=e&&c.push(new goog.proto2.FieldDescriptor(a,e,b[e]));return new goog.proto2.Descriptor(a,d,c)};goog.proto2.Serializer=function(){};goog.proto2.Serializer.DECODE_SYMBOLIC_ENUMS=!1;goog.proto2.Serializer.prototype.serialize=goog.abstractMethod;goog.proto2.Serializer.prototype.getSerializedValue=function(a,b){return a.isCompositeType()?this.serialize(b):\"number\"!==typeof b||isFinite(b)?b:b.toString()};goog.proto2.Serializer.prototype.deserialize=function(a,b){a=a.createMessageInstance();this.deserializeTo(a,b);goog.asserts.assert(a instanceof goog.proto2.Message);return a};\ngoog.proto2.Serializer.prototype.deserializeTo=goog.abstractMethod;\ngoog.proto2.Serializer.prototype.getDeserializedValue=function(a,b){if(a.isCompositeType())return b instanceof goog.proto2.Message?b:this.deserialize(a.getFieldMessageType(),b);if(a.getFieldType()==goog.proto2.FieldDescriptor.FieldType.ENUM)return goog.proto2.Serializer.DECODE_SYMBOLIC_ENUMS&&\"string\"===typeof b&&(a=a.getNativeType(),a.hasOwnProperty(b))?a[b]:\"string\"===typeof b&&goog.proto2.Serializer.INTEGER_REGEX.test(b)&&(a=Number(b),0<a)?a:b;if(!a.deserializationConversionPermitted())return b;\na=a.getNativeType();if(a===String){if(\"number\"===typeof b)return String(b)}else if(a===Number&&\"string\"===typeof b&&(\"Infinity\"===b||\"-Infinity\"===b||\"NaN\"===b||goog.proto2.Serializer.INTEGER_REGEX.test(b)))return Number(b);return b};goog.proto2.Serializer.INTEGER_REGEX=/^-?[0-9]+$/;goog.proto2.LazyDeserializer=function(){};goog.inherits(goog.proto2.LazyDeserializer,goog.proto2.Serializer);goog.proto2.LazyDeserializer.prototype.deserialize=function(a,b){a=a.createMessageInstance();a.initializeForLazyDeserializer(this,b);goog.asserts.assert(a instanceof goog.proto2.Message);return a};goog.proto2.LazyDeserializer.prototype.deserializeTo=function(a,b){throw Error(\"Unimplemented\");};goog.proto2.LazyDeserializer.prototype.deserializeField=goog.abstractMethod;goog.proto2.PbLiteSerializer=function(){};goog.inherits(goog.proto2.PbLiteSerializer,goog.proto2.LazyDeserializer);goog.proto2.PbLiteSerializer.prototype.zeroIndexing_=!1;goog.proto2.PbLiteSerializer.prototype.setZeroIndexed=function(a){this.zeroIndexing_=a};\ngoog.proto2.PbLiteSerializer.prototype.serialize=function(a){for(var b=a.getDescriptor().getFields(),c=[],d=this.zeroIndexing_,e=0;e<b.length;e++){var f=b[e];if(a.has(f)){var g=f.getTag();g=d?g-1:g;if(f.isRepeated()){c[g]=[];for(var h=0;h<a.countOf(f);h++)c[g][h]=this.getSerializedValue(f,a.get(f,h))}else c[g]=this.getSerializedValue(f,a.get(f))}}a.forEachUnknown(function(k,l){c[d?k-1:k]=l});return c};\ngoog.proto2.PbLiteSerializer.prototype.deserializeField=function(a,b,c){if(null==c)return c;if(b.isRepeated()){a=[];goog.asserts.assert(Array.isArray(c),\"Value must be array: %s\",c);for(var d=0;d<c.length;d++)a[d]=this.getDeserializedValue(b,c[d]);return a}return this.getDeserializedValue(b,c)};\ngoog.proto2.PbLiteSerializer.prototype.getSerializedValue=function(a,b){return a.getFieldType()==goog.proto2.FieldDescriptor.FieldType.BOOL?b?1:0:goog.proto2.Serializer.prototype.getSerializedValue.apply(this,arguments)};\ngoog.proto2.PbLiteSerializer.prototype.getDeserializedValue=function(a,b){return a.getFieldType()==goog.proto2.FieldDescriptor.FieldType.BOOL?(goog.asserts.assert(\"number\"===typeof b||\"boolean\"===typeof b,\"Value is expected to be a number or boolean\"),!!b):goog.proto2.Serializer.prototype.getDeserializedValue.apply(this,arguments)};\ngoog.proto2.PbLiteSerializer.prototype.deserialize=function(a,b){var c=b;if(this.zeroIndexing_){c=[];for(var d in b)c[parseInt(d,10)+1]=b[d]}return goog.proto2.PbLiteSerializer.superClass_.deserialize.call(this,a,c)};goog.string.StringBuffer=function(a,b){null!=a&&this.append.apply(this,arguments)};goog.string.StringBuffer.prototype.buffer_=\"\";goog.string.StringBuffer.prototype.set=function(a){this.buffer_=\"\"+a};goog.string.StringBuffer.prototype.append=function(a,b,c){this.buffer_+=String(a);if(null!=b)for(var d=1;d<arguments.length;d++)this.buffer_+=arguments[d];return this};goog.string.StringBuffer.prototype.clear=function(){this.buffer_=\"\"};goog.string.StringBuffer.prototype.getLength=function(){return this.buffer_.length};\ngoog.string.StringBuffer.prototype.toString=function(){return this.buffer_};/*\n\n Protocol Buffer 2 Copyright 2008 Google Inc.\n All other code copyright its respective owners.\n Copyright (C) 2010 The Libphonenumber Authors\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n*/\nvar i18n={phonenumbers:{}};i18n.phonenumbers.NumberFormat=function(){goog.proto2.Message.call(this)};goog.inherits(i18n.phonenumbers.NumberFormat,goog.proto2.Message);i18n.phonenumbers.NumberFormat.descriptor_=null;i18n.phonenumbers.NumberFormat.prototype.getPattern=function(){return this.get$Value(1)};i18n.phonenumbers.NumberFormat.prototype.getPatternOrDefault=function(){return this.get$ValueOrDefault(1)};i18n.phonenumbers.NumberFormat.prototype.setPattern=function(a){this.set$Value(1,a)};\ni18n.phonenumbers.NumberFormat.prototype.hasPattern=function(){return this.has$Value(1)};i18n.phonenumbers.NumberFormat.prototype.patternCount=function(){return this.count$Values(1)};i18n.phonenumbers.NumberFormat.prototype.clearPattern=function(){this.clear$Field(1)};i18n.phonenumbers.NumberFormat.prototype.getFormat=function(){return this.get$Value(2)};i18n.phonenumbers.NumberFormat.prototype.getFormatOrDefault=function(){return this.get$ValueOrDefault(2)};\ni18n.phonenumbers.NumberFormat.prototype.setFormat=function(a){this.set$Value(2,a)};i18n.phonenumbers.NumberFormat.prototype.hasFormat=function(){return this.has$Value(2)};i18n.phonenumbers.NumberFormat.prototype.formatCount=function(){return this.count$Values(2)};i18n.phonenumbers.NumberFormat.prototype.clearFormat=function(){this.clear$Field(2)};i18n.phonenumbers.NumberFormat.prototype.getLeadingDigitsPattern=function(a){return this.get$Value(3,a)};\ni18n.phonenumbers.NumberFormat.prototype.getLeadingDigitsPatternOrDefault=function(a){return this.get$ValueOrDefault(3,a)};i18n.phonenumbers.NumberFormat.prototype.addLeadingDigitsPattern=function(a){this.add$Value(3,a)};i18n.phonenumbers.NumberFormat.prototype.leadingDigitsPatternArray=function(){return this.array$Values(3)};i18n.phonenumbers.NumberFormat.prototype.hasLeadingDigitsPattern=function(){return this.has$Value(3)};i18n.phonenumbers.NumberFormat.prototype.leadingDigitsPatternCount=function(){return this.count$Values(3)};\ni18n.phonenumbers.NumberFormat.prototype.clearLeadingDigitsPattern=function(){this.clear$Field(3)};i18n.phonenumbers.NumberFormat.prototype.getNationalPrefixFormattingRule=function(){return this.get$Value(4)};i18n.phonenumbers.NumberFormat.prototype.getNationalPrefixFormattingRuleOrDefault=function(){return this.get$ValueOrDefault(4)};i18n.phonenumbers.NumberFormat.prototype.setNationalPrefixFormattingRule=function(a){this.set$Value(4,a)};\ni18n.phonenumbers.NumberFormat.prototype.hasNationalPrefixFormattingRule=function(){return this.has$Value(4)};i18n.phonenumbers.NumberFormat.prototype.nationalPrefixFormattingRuleCount=function(){return this.count$Values(4)};i18n.phonenumbers.NumberFormat.prototype.clearNationalPrefixFormattingRule=function(){this.clear$Field(4)};i18n.phonenumbers.NumberFormat.prototype.getNationalPrefixOptionalWhenFormatting=function(){return this.get$Value(6)};\ni18n.phonenumbers.NumberFormat.prototype.getNationalPrefixOptionalWhenFormattingOrDefault=function(){return this.get$ValueOrDefault(6)};i18n.phonenumbers.NumberFormat.prototype.setNationalPrefixOptionalWhenFormatting=function(a){this.set$Value(6,a)};i18n.phonenumbers.NumberFormat.prototype.hasNationalPrefixOptionalWhenFormatting=function(){return this.has$Value(6)};i18n.phonenumbers.NumberFormat.prototype.nationalPrefixOptionalWhenFormattingCount=function(){return this.count$Values(6)};\ni18n.phonenumbers.NumberFormat.prototype.clearNationalPrefixOptionalWhenFormatting=function(){this.clear$Field(6)};i18n.phonenumbers.NumberFormat.prototype.getDomesticCarrierCodeFormattingRule=function(){return this.get$Value(5)};i18n.phonenumbers.NumberFormat.prototype.getDomesticCarrierCodeFormattingRuleOrDefault=function(){return this.get$ValueOrDefault(5)};i18n.phonenumbers.NumberFormat.prototype.setDomesticCarrierCodeFormattingRule=function(a){this.set$Value(5,a)};\ni18n.phonenumbers.NumberFormat.prototype.hasDomesticCarrierCodeFormattingRule=function(){return this.has$Value(5)};i18n.phonenumbers.NumberFormat.prototype.domesticCarrierCodeFormattingRuleCount=function(){return this.count$Values(5)};i18n.phonenumbers.NumberFormat.prototype.clearDomesticCarrierCodeFormattingRule=function(){this.clear$Field(5)};i18n.phonenumbers.PhoneNumberDesc=function(){goog.proto2.Message.call(this)};goog.inherits(i18n.phonenumbers.PhoneNumberDesc,goog.proto2.Message);\ni18n.phonenumbers.PhoneNumberDesc.descriptor_=null;i18n.phonenumbers.PhoneNumberDesc.prototype.getNationalNumberPattern=function(){return this.get$Value(2)};i18n.phonenumbers.PhoneNumberDesc.prototype.getNationalNumberPatternOrDefault=function(){return this.get$ValueOrDefault(2)};i18n.phonenumbers.PhoneNumberDesc.prototype.setNationalNumberPattern=function(a){this.set$Value(2,a)};i18n.phonenumbers.PhoneNumberDesc.prototype.hasNationalNumberPattern=function(){return this.has$Value(2)};\ni18n.phonenumbers.PhoneNumberDesc.prototype.nationalNumberPatternCount=function(){return this.count$Values(2)};i18n.phonenumbers.PhoneNumberDesc.prototype.clearNationalNumberPattern=function(){this.clear$Field(2)};i18n.phonenumbers.PhoneNumberDesc.prototype.getPossibleLength=function(a){return this.get$Value(9,a)};i18n.phonenumbers.PhoneNumberDesc.prototype.getPossibleLengthOrDefault=function(a){return this.get$ValueOrDefault(9,a)};\ni18n.phonenumbers.PhoneNumberDesc.prototype.addPossibleLength=function(a){this.add$Value(9,a)};i18n.phonenumbers.PhoneNumberDesc.prototype.possibleLengthArray=function(){return this.array$Values(9)};i18n.phonenumbers.PhoneNumberDesc.prototype.hasPossibleLength=function(){return this.has$Value(9)};i18n.phonenumbers.PhoneNumberDesc.prototype.possibleLengthCount=function(){return this.count$Values(9)};i18n.phonenumbers.PhoneNumberDesc.prototype.clearPossibleLength=function(){this.clear$Field(9)};\ni18n.phonenumbers.PhoneNumberDesc.prototype.getPossibleLengthLocalOnly=function(a){return this.get$Value(10,a)};i18n.phonenumbers.PhoneNumberDesc.prototype.getPossibleLengthLocalOnlyOrDefault=function(a){return this.get$ValueOrDefault(10,a)};i18n.phonenumbers.PhoneNumberDesc.prototype.addPossibleLengthLocalOnly=function(a){this.add$Value(10,a)};i18n.phonenumbers.PhoneNumberDesc.prototype.possibleLengthLocalOnlyArray=function(){return this.array$Values(10)};\ni18n.phonenumbers.PhoneNumberDesc.prototype.hasPossibleLengthLocalOnly=function(){return this.has$Value(10)};i18n.phonenumbers.PhoneNumberDesc.prototype.possibleLengthLocalOnlyCount=function(){return this.count$Values(10)};i18n.phonenumbers.PhoneNumberDesc.prototype.clearPossibleLengthLocalOnly=function(){this.clear$Field(10)};i18n.phonenumbers.PhoneNumberDesc.prototype.getExampleNumber=function(){return this.get$Value(6)};i18n.phonenumbers.PhoneNumberDesc.prototype.getExampleNumberOrDefault=function(){return this.get$ValueOrDefault(6)};\ni18n.phonenumbers.PhoneNumberDesc.prototype.setExampleNumber=function(a){this.set$Value(6,a)};i18n.phonenumbers.PhoneNumberDesc.prototype.hasExampleNumber=function(){return this.has$Value(6)};i18n.phonenumbers.PhoneNumberDesc.prototype.exampleNumberCount=function(){return this.count$Values(6)};i18n.phonenumbers.PhoneNumberDesc.prototype.clearExampleNumber=function(){this.clear$Field(6)};i18n.phonenumbers.PhoneMetadata=function(){goog.proto2.Message.call(this)};\ngoog.inherits(i18n.phonenumbers.PhoneMetadata,goog.proto2.Message);i18n.phonenumbers.PhoneMetadata.descriptor_=null;i18n.phonenumbers.PhoneMetadata.prototype.getGeneralDesc=function(){return this.get$Value(1)};i18n.phonenumbers.PhoneMetadata.prototype.getGeneralDescOrDefault=function(){return this.get$ValueOrDefault(1)};i18n.phonenumbers.PhoneMetadata.prototype.setGeneralDesc=function(a){this.set$Value(1,a)};i18n.phonenumbers.PhoneMetadata.prototype.hasGeneralDesc=function(){return this.has$Value(1)};\ni18n.phonenumbers.PhoneMetadata.prototype.generalDescCount=function(){return this.count$Values(1)};i18n.phonenumbers.PhoneMetadata.prototype.clearGeneralDesc=function(){this.clear$Field(1)};i18n.phonenumbers.PhoneMetadata.prototype.getFixedLine=function(){return this.get$Value(2)};i18n.phonenumbers.PhoneMetadata.prototype.getFixedLineOrDefault=function(){return this.get$ValueOrDefault(2)};i18n.phonenumbers.PhoneMetadata.prototype.setFixedLine=function(a){this.set$Value(2,a)};\ni18n.phonenumbers.PhoneMetadata.prototype.hasFixedLine=function(){return this.has$Value(2)};i18n.phonenumbers.PhoneMetadata.prototype.fixedLineCount=function(){return this.count$Values(2)};i18n.phonenumbers.PhoneMetadata.prototype.clearFixedLine=function(){this.clear$Field(2)};i18n.phonenumbers.PhoneMetadata.prototype.getMobile=function(){return this.get$Value(3)};i18n.phonenumbers.PhoneMetadata.prototype.getMobileOrDefault=function(){return this.get$ValueOrDefault(3)};\ni18n.phonenumbers.PhoneMetadata.prototype.setMobile=function(a){this.set$Value(3,a)};i18n.phonenumbers.PhoneMetadata.prototype.hasMobile=function(){return this.has$Value(3)};i18n.phonenumbers.PhoneMetadata.prototype.mobileCount=function(){return this.count$Values(3)};i18n.phonenumbers.PhoneMetadata.prototype.clearMobile=function(){this.clear$Field(3)};i18n.phonenumbers.PhoneMetadata.prototype.getTollFree=function(){return this.get$Value(4)};\ni18n.phonenumbers.PhoneMetadata.prototype.getTollFreeOrDefault=function(){return this.get$ValueOrDefault(4)};i18n.phonenumbers.PhoneMetadata.prototype.setTollFree=function(a){this.set$Value(4,a)};i18n.phonenumbers.PhoneMetadata.prototype.hasTollFree=function(){return this.has$Value(4)};i18n.phonenumbers.PhoneMetadata.prototype.tollFreeCount=function(){return this.count$Values(4)};i18n.phonenumbers.PhoneMetadata.prototype.clearTollFree=function(){this.clear$Field(4)};\ni18n.phonenumbers.PhoneMetadata.prototype.getPremiumRate=function(){return this.get$Value(5)};i18n.phonenumbers.PhoneMetadata.prototype.getPremiumRateOrDefault=function(){return this.get$ValueOrDefault(5)};i18n.phonenumbers.PhoneMetadata.prototype.setPremiumRate=function(a){this.set$Value(5,a)};i18n.phonenumbers.PhoneMetadata.prototype.hasPremiumRate=function(){return this.has$Value(5)};i18n.phonenumbers.PhoneMetadata.prototype.premiumRateCount=function(){return this.count$Values(5)};\ni18n.phonenumbers.PhoneMetadata.prototype.clearPremiumRate=function(){this.clear$Field(5)};i18n.phonenumbers.PhoneMetadata.prototype.getSharedCost=function(){return this.get$Value(6)};i18n.phonenumbers.PhoneMetadata.prototype.getSharedCostOrDefault=function(){return this.get$ValueOrDefault(6)};i18n.phonenumbers.PhoneMetadata.prototype.setSharedCost=function(a){this.set$Value(6,a)};i18n.phonenumbers.PhoneMetadata.prototype.hasSharedCost=function(){return this.has$Value(6)};\ni18n.phonenumbers.PhoneMetadata.prototype.sharedCostCount=function(){return this.count$Values(6)};i18n.phonenumbers.PhoneMetadata.prototype.clearSharedCost=function(){this.clear$Field(6)};i18n.phonenumbers.PhoneMetadata.prototype.getPersonalNumber=function(){return this.get$Value(7)};i18n.phonenumbers.PhoneMetadata.prototype.getPersonalNumberOrDefault=function(){return this.get$ValueOrDefault(7)};i18n.phonenumbers.PhoneMetadata.prototype.setPersonalNumber=function(a){this.set$Value(7,a)};\ni18n.phonenumbers.PhoneMetadata.prototype.hasPersonalNumber=function(){return this.has$Value(7)};i18n.phonenumbers.PhoneMetadata.prototype.personalNumberCount=function(){return this.count$Values(7)};i18n.phonenumbers.PhoneMetadata.prototype.clearPersonalNumber=function(){this.clear$Field(7)};i18n.phonenumbers.PhoneMetadata.prototype.getVoip=function(){return this.get$Value(8)};i18n.phonenumbers.PhoneMetadata.prototype.getVoipOrDefault=function(){return this.get$ValueOrDefault(8)};\ni18n.phonenumbers.PhoneMetadata.prototype.setVoip=function(a){this.set$Value(8,a)};i18n.phonenumbers.PhoneMetadata.prototype.hasVoip=function(){return this.has$Value(8)};i18n.phonenumbers.PhoneMetadata.prototype.voipCount=function(){return this.count$Values(8)};i18n.phonenumbers.PhoneMetadata.prototype.clearVoip=function(){this.clear$Field(8)};i18n.phonenumbers.PhoneMetadata.prototype.getPager=function(){return this.get$Value(21)};i18n.phonenumbers.PhoneMetadata.prototype.getPagerOrDefault=function(){return this.get$ValueOrDefault(21)};\ni18n.phonenumbers.PhoneMetadata.prototype.setPager=function(a){this.set$Value(21,a)};i18n.phonenumbers.PhoneMetadata.prototype.hasPager=function(){return this.has$Value(21)};i18n.phonenumbers.PhoneMetadata.prototype.pagerCount=function(){return this.count$Values(21)};i18n.phonenumbers.PhoneMetadata.prototype.clearPager=function(){this.clear$Field(21)};i18n.phonenumbers.PhoneMetadata.prototype.getUan=function(){return this.get$Value(25)};i18n.phonenumbers.PhoneMetadata.prototype.getUanOrDefault=function(){return this.get$ValueOrDefault(25)};\ni18n.phonenumbers.PhoneMetadata.prototype.setUan=function(a){this.set$Value(25,a)};i18n.phonenumbers.PhoneMetadata.prototype.hasUan=function(){return this.has$Value(25)};i18n.phonenumbers.PhoneMetadata.prototype.uanCount=function(){return this.count$Values(25)};i18n.phonenumbers.PhoneMetadata.prototype.clearUan=function(){this.clear$Field(25)};i18n.phonenumbers.PhoneMetadata.prototype.getEmergency=function(){return this.get$Value(27)};\ni18n.phonenumbers.PhoneMetadata.prototype.getEmergencyOrDefault=function(){return this.get$ValueOrDefault(27)};i18n.phonenumbers.PhoneMetadata.prototype.setEmergency=function(a){this.set$Value(27,a)};i18n.phonenumbers.PhoneMetadata.prototype.hasEmergency=function(){return this.has$Value(27)};i18n.phonenumbers.PhoneMetadata.prototype.emergencyCount=function(){return this.count$Values(27)};i18n.phonenumbers.PhoneMetadata.prototype.clearEmergency=function(){this.clear$Field(27)};\ni18n.phonenumbers.PhoneMetadata.prototype.getVoicemail=function(){return this.get$Value(28)};i18n.phonenumbers.PhoneMetadata.prototype.getVoicemailOrDefault=function(){return this.get$ValueOrDefault(28)};i18n.phonenumbers.PhoneMetadata.prototype.setVoicemail=function(a){this.set$Value(28,a)};i18n.phonenumbers.PhoneMetadata.prototype.hasVoicemail=function(){return this.has$Value(28)};i18n.phonenumbers.PhoneMetadata.prototype.voicemailCount=function(){return this.count$Values(28)};\ni18n.phonenumbers.PhoneMetadata.prototype.clearVoicemail=function(){this.clear$Field(28)};i18n.phonenumbers.PhoneMetadata.prototype.getShortCode=function(){return this.get$Value(29)};i18n.phonenumbers.PhoneMetadata.prototype.getShortCodeOrDefault=function(){return this.get$ValueOrDefault(29)};i18n.phonenumbers.PhoneMetadata.prototype.setShortCode=function(a){this.set$Value(29,a)};i18n.phonenumbers.PhoneMetadata.prototype.hasShortCode=function(){return this.has$Value(29)};\ni18n.phonenumbers.PhoneMetadata.prototype.shortCodeCount=function(){return this.count$Values(29)};i18n.phonenumbers.PhoneMetadata.prototype.clearShortCode=function(){this.clear$Field(29)};i18n.phonenumbers.PhoneMetadata.prototype.getStandardRate=function(){return this.get$Value(30)};i18n.phonenumbers.PhoneMetadata.prototype.getStandardRateOrDefault=function(){return this.get$ValueOrDefault(30)};i18n.phonenumbers.PhoneMetadata.prototype.setStandardRate=function(a){this.set$Value(30,a)};\ni18n.phonenumbers.PhoneMetadata.prototype.hasStandardRate=function(){return this.has$Value(30)};i18n.phonenumbers.PhoneMetadata.prototype.standardRateCount=function(){return this.count$Values(30)};i18n.phonenumbers.PhoneMetadata.prototype.clearStandardRate=function(){this.clear$Field(30)};i18n.phonenumbers.PhoneMetadata.prototype.getCarrierSpecific=function(){return this.get$Value(31)};i18n.phonenumbers.PhoneMetadata.prototype.getCarrierSpecificOrDefault=function(){return this.get$ValueOrDefault(31)};\ni18n.phonenumbers.PhoneMetadata.prototype.setCarrierSpecific=function(a){this.set$Value(31,a)};i18n.phonenumbers.PhoneMetadata.prototype.hasCarrierSpecific=function(){return this.has$Value(31)};i18n.phonenumbers.PhoneMetadata.prototype.carrierSpecificCount=function(){return this.count$Values(31)};i18n.phonenumbers.PhoneMetadata.prototype.clearCarrierSpecific=function(){this.clear$Field(31)};i18n.phonenumbers.PhoneMetadata.prototype.getSmsServices=function(){return this.get$Value(33)};\ni18n.phonenumbers.PhoneMetadata.prototype.getSmsServicesOrDefault=function(){return this.get$ValueOrDefault(33)};i18n.phonenumbers.PhoneMetadata.prototype.setSmsServices=function(a){this.set$Value(33,a)};i18n.phonenumbers.PhoneMetadata.prototype.hasSmsServices=function(){return this.has$Value(33)};i18n.phonenumbers.PhoneMetadata.prototype.smsServicesCount=function(){return this.count$Values(33)};i18n.phonenumbers.PhoneMetadata.prototype.clearSmsServices=function(){this.clear$Field(33)};\ni18n.phonenumbers.PhoneMetadata.prototype.getNoInternationalDialling=function(){return this.get$Value(24)};i18n.phonenumbers.PhoneMetadata.prototype.getNoInternationalDiallingOrDefault=function(){return this.get$ValueOrDefault(24)};i18n.phonenumbers.PhoneMetadata.prototype.setNoInternationalDialling=function(a){this.set$Value(24,a)};i18n.phonenumbers.PhoneMetadata.prototype.hasNoInternationalDialling=function(){return this.has$Value(24)};\ni18n.phonenumbers.PhoneMetadata.prototype.noInternationalDiallingCount=function(){return this.count$Values(24)};i18n.phonenumbers.PhoneMetadata.prototype.clearNoInternationalDialling=function(){this.clear$Field(24)};i18n.phonenumbers.PhoneMetadata.prototype.getId=function(){return this.get$Value(9)};i18n.phonenumbers.PhoneMetadata.prototype.getIdOrDefault=function(){return this.get$ValueOrDefault(9)};i18n.phonenumbers.PhoneMetadata.prototype.setId=function(a){this.set$Value(9,a)};\ni18n.phonenumbers.PhoneMetadata.prototype.hasId=function(){return this.has$Value(9)};i18n.phonenumbers.PhoneMetadata.prototype.idCount=function(){return this.count$Values(9)};i18n.phonenumbers.PhoneMetadata.prototype.clearId=function(){this.clear$Field(9)};i18n.phonenumbers.PhoneMetadata.prototype.getCountryCode=function(){return this.get$Value(10)};i18n.phonenumbers.PhoneMetadata.prototype.getCountryCodeOrDefault=function(){return this.get$ValueOrDefault(10)};\ni18n.phonenumbers.PhoneMetadata.prototype.setCountryCode=function(a){this.set$Value(10,a)};i18n.phonenumbers.PhoneMetadata.prototype.hasCountryCode=function(){return this.has$Value(10)};i18n.phonenumbers.PhoneMetadata.prototype.countryCodeCount=function(){return this.count$Values(10)};i18n.phonenumbers.PhoneMetadata.prototype.clearCountryCode=function(){this.clear$Field(10)};i18n.phonenumbers.PhoneMetadata.prototype.getInternationalPrefix=function(){return this.get$Value(11)};\ni18n.phonenumbers.PhoneMetadata.prototype.getInternationalPrefixOrDefault=function(){return this.get$ValueOrDefault(11)};i18n.phonenumbers.PhoneMetadata.prototype.setInternationalPrefix=function(a){this.set$Value(11,a)};i18n.phonenumbers.PhoneMetadata.prototype.hasInternationalPrefix=function(){return this.has$Value(11)};i18n.phonenumbers.PhoneMetadata.prototype.internationalPrefixCount=function(){return this.count$Values(11)};i18n.phonenumbers.PhoneMetadata.prototype.clearInternationalPrefix=function(){this.clear$Field(11)};\ni18n.phonenumbers.PhoneMetadata.prototype.getPreferredInternationalPrefix=function(){return this.get$Value(17)};i18n.phonenumbers.PhoneMetadata.prototype.getPreferredInternationalPrefixOrDefault=function(){return this.get$ValueOrDefault(17)};i18n.phonenumbers.PhoneMetadata.prototype.setPreferredInternationalPrefix=function(a){this.set$Value(17,a)};i18n.phonenumbers.PhoneMetadata.prototype.hasPreferredInternationalPrefix=function(){return this.has$Value(17)};\ni18n.phonenumbers.PhoneMetadata.prototype.preferredInternationalPrefixCount=function(){return this.count$Values(17)};i18n.phonenumbers.PhoneMetadata.prototype.clearPreferredInternationalPrefix=function(){this.clear$Field(17)};i18n.phonenumbers.PhoneMetadata.prototype.getNationalPrefix=function(){return this.get$Value(12)};i18n.phonenumbers.PhoneMetadata.prototype.getNationalPrefixOrDefault=function(){return this.get$ValueOrDefault(12)};\ni18n.phonenumbers.PhoneMetadata.prototype.setNationalPrefix=function(a){this.set$Value(12,a)};i18n.phonenumbers.PhoneMetadata.prototype.hasNationalPrefix=function(){return this.has$Value(12)};i18n.phonenumbers.PhoneMetadata.prototype.nationalPrefixCount=function(){return this.count$Values(12)};i18n.phonenumbers.PhoneMetadata.prototype.clearNationalPrefix=function(){this.clear$Field(12)};i18n.phonenumbers.PhoneMetadata.prototype.getPreferredExtnPrefix=function(){return this.get$Value(13)};\ni18n.phonenumbers.PhoneMetadata.prototype.getPreferredExtnPrefixOrDefault=function(){return this.get$ValueOrDefault(13)};i18n.phonenumbers.PhoneMetadata.prototype.setPreferredExtnPrefix=function(a){this.set$Value(13,a)};i18n.phonenumbers.PhoneMetadata.prototype.hasPreferredExtnPrefix=function(){return this.has$Value(13)};i18n.phonenumbers.PhoneMetadata.prototype.preferredExtnPrefixCount=function(){return this.count$Values(13)};i18n.phonenumbers.PhoneMetadata.prototype.clearPreferredExtnPrefix=function(){this.clear$Field(13)};\ni18n.phonenumbers.PhoneMetadata.prototype.getNationalPrefixForParsing=function(){return this.get$Value(15)};i18n.phonenumbers.PhoneMetadata.prototype.getNationalPrefixForParsingOrDefault=function(){return this.get$ValueOrDefault(15)};i18n.phonenumbers.PhoneMetadata.prototype.setNationalPrefixForParsing=function(a){this.set$Value(15,a)};i18n.phonenumbers.PhoneMetadata.prototype.hasNationalPrefixForParsing=function(){return this.has$Value(15)};\ni18n.phonenumbers.PhoneMetadata.prototype.nationalPrefixForParsingCount=function(){return this.count$Values(15)};i18n.phonenumbers.PhoneMetadata.prototype.clearNationalPrefixForParsing=function(){this.clear$Field(15)};i18n.phonenumbers.PhoneMetadata.prototype.getNationalPrefixTransformRule=function(){return this.get$Value(16)};i18n.phonenumbers.PhoneMetadata.prototype.getNationalPrefixTransformRuleOrDefault=function(){return this.get$ValueOrDefault(16)};\ni18n.phonenumbers.PhoneMetadata.prototype.setNationalPrefixTransformRule=function(a){this.set$Value(16,a)};i18n.phonenumbers.PhoneMetadata.prototype.hasNationalPrefixTransformRule=function(){return this.has$Value(16)};i18n.phonenumbers.PhoneMetadata.prototype.nationalPrefixTransformRuleCount=function(){return this.count$Values(16)};i18n.phonenumbers.PhoneMetadata.prototype.clearNationalPrefixTransformRule=function(){this.clear$Field(16)};\ni18n.phonenumbers.PhoneMetadata.prototype.getSameMobileAndFixedLinePattern=function(){return this.get$Value(18)};i18n.phonenumbers.PhoneMetadata.prototype.getSameMobileAndFixedLinePatternOrDefault=function(){return this.get$ValueOrDefault(18)};i18n.phonenumbers.PhoneMetadata.prototype.setSameMobileAndFixedLinePattern=function(a){this.set$Value(18,a)};i18n.phonenumbers.PhoneMetadata.prototype.hasSameMobileAndFixedLinePattern=function(){return this.has$Value(18)};\ni18n.phonenumbers.PhoneMetadata.prototype.sameMobileAndFixedLinePatternCount=function(){return this.count$Values(18)};i18n.phonenumbers.PhoneMetadata.prototype.clearSameMobileAndFixedLinePattern=function(){this.clear$Field(18)};i18n.phonenumbers.PhoneMetadata.prototype.getNumberFormat=function(a){return this.get$Value(19,a)};i18n.phonenumbers.PhoneMetadata.prototype.getNumberFormatOrDefault=function(a){return this.get$ValueOrDefault(19,a)};\ni18n.phonenumbers.PhoneMetadata.prototype.addNumberFormat=function(a){this.add$Value(19,a)};i18n.phonenumbers.PhoneMetadata.prototype.numberFormatArray=function(){return this.array$Values(19)};i18n.phonenumbers.PhoneMetadata.prototype.hasNumberFormat=function(){return this.has$Value(19)};i18n.phonenumbers.PhoneMetadata.prototype.numberFormatCount=function(){return this.count$Values(19)};i18n.phonenumbers.PhoneMetadata.prototype.clearNumberFormat=function(){this.clear$Field(19)};\ni18n.phonenumbers.PhoneMetadata.prototype.getIntlNumberFormat=function(a){return this.get$Value(20,a)};i18n.phonenumbers.PhoneMetadata.prototype.getIntlNumberFormatOrDefault=function(a){return this.get$ValueOrDefault(20,a)};i18n.phonenumbers.PhoneMetadata.prototype.addIntlNumberFormat=function(a){this.add$Value(20,a)};i18n.phonenumbers.PhoneMetadata.prototype.intlNumberFormatArray=function(){return this.array$Values(20)};i18n.phonenumbers.PhoneMetadata.prototype.hasIntlNumberFormat=function(){return this.has$Value(20)};\ni18n.phonenumbers.PhoneMetadata.prototype.intlNumberFormatCount=function(){return this.count$Values(20)};i18n.phonenumbers.PhoneMetadata.prototype.clearIntlNumberFormat=function(){this.clear$Field(20)};i18n.phonenumbers.PhoneMetadata.prototype.getMainCountryForCode=function(){return this.get$Value(22)};i18n.phonenumbers.PhoneMetadata.prototype.getMainCountryForCodeOrDefault=function(){return this.get$ValueOrDefault(22)};\ni18n.phonenumbers.PhoneMetadata.prototype.setMainCountryForCode=function(a){this.set$Value(22,a)};i18n.phonenumbers.PhoneMetadata.prototype.hasMainCountryForCode=function(){return this.has$Value(22)};i18n.phonenumbers.PhoneMetadata.prototype.mainCountryForCodeCount=function(){return this.count$Values(22)};i18n.phonenumbers.PhoneMetadata.prototype.clearMainCountryForCode=function(){this.clear$Field(22)};i18n.phonenumbers.PhoneMetadata.prototype.getLeadingDigits=function(){return this.get$Value(23)};\ni18n.phonenumbers.PhoneMetadata.prototype.getLeadingDigitsOrDefault=function(){return this.get$ValueOrDefault(23)};i18n.phonenumbers.PhoneMetadata.prototype.setLeadingDigits=function(a){this.set$Value(23,a)};i18n.phonenumbers.PhoneMetadata.prototype.hasLeadingDigits=function(){return this.has$Value(23)};i18n.phonenumbers.PhoneMetadata.prototype.leadingDigitsCount=function(){return this.count$Values(23)};i18n.phonenumbers.PhoneMetadata.prototype.clearLeadingDigits=function(){this.clear$Field(23)};\ni18n.phonenumbers.PhoneMetadataCollection=function(){goog.proto2.Message.call(this)};goog.inherits(i18n.phonenumbers.PhoneMetadataCollection,goog.proto2.Message);i18n.phonenumbers.PhoneMetadataCollection.descriptor_=null;i18n.phonenumbers.PhoneMetadataCollection.prototype.getMetadata=function(a){return this.get$Value(1,a)};i18n.phonenumbers.PhoneMetadataCollection.prototype.getMetadataOrDefault=function(a){return this.get$ValueOrDefault(1,a)};\ni18n.phonenumbers.PhoneMetadataCollection.prototype.addMetadata=function(a){this.add$Value(1,a)};i18n.phonenumbers.PhoneMetadataCollection.prototype.metadataArray=function(){return this.array$Values(1)};i18n.phonenumbers.PhoneMetadataCollection.prototype.hasMetadata=function(){return this.has$Value(1)};i18n.phonenumbers.PhoneMetadataCollection.prototype.metadataCount=function(){return this.count$Values(1)};i18n.phonenumbers.PhoneMetadataCollection.prototype.clearMetadata=function(){this.clear$Field(1)};\ni18n.phonenumbers.NumberFormat.prototype.getDescriptor=function(){var a=i18n.phonenumbers.NumberFormat.descriptor_;a||(i18n.phonenumbers.NumberFormat.descriptor_=a=goog.proto2.Message.createDescriptor(i18n.phonenumbers.NumberFormat,{0:{name:\"NumberFormat\",fullName:\"i18n.phonenumbers.NumberFormat\"},1:{name:\"pattern\",required:!0,fieldType:goog.proto2.Message.FieldType.STRING,type:String},2:{name:\"format\",required:!0,fieldType:goog.proto2.Message.FieldType.STRING,type:String},3:{name:\"leading_digits_pattern\",\nrepeated:!0,fieldType:goog.proto2.Message.FieldType.STRING,type:String},4:{name:\"national_prefix_formatting_rule\",fieldType:goog.proto2.Message.FieldType.STRING,type:String},6:{name:\"national_prefix_optional_when_formatting\",fieldType:goog.proto2.Message.FieldType.BOOL,defaultValue:!1,type:Boolean},5:{name:\"domestic_carrier_code_formatting_rule\",fieldType:goog.proto2.Message.FieldType.STRING,type:String}}));return a};i18n.phonenumbers.NumberFormat.getDescriptor=i18n.phonenumbers.NumberFormat.prototype.getDescriptor;\ni18n.phonenumbers.PhoneNumberDesc.prototype.getDescriptor=function(){var a=i18n.phonenumbers.PhoneNumberDesc.descriptor_;a||(i18n.phonenumbers.PhoneNumberDesc.descriptor_=a=goog.proto2.Message.createDescriptor(i18n.phonenumbers.PhoneNumberDesc,{0:{name:\"PhoneNumberDesc\",fullName:\"i18n.phonenumbers.PhoneNumberDesc\"},2:{name:\"national_number_pattern\",fieldType:goog.proto2.Message.FieldType.STRING,type:String},9:{name:\"possible_length\",repeated:!0,fieldType:goog.proto2.Message.FieldType.INT32,type:Number},\n10:{name:\"possible_length_local_only\",repeated:!0,fieldType:goog.proto2.Message.FieldType.INT32,type:Number},6:{name:\"example_number\",fieldType:goog.proto2.Message.FieldType.STRING,type:String}}));return a};i18n.phonenumbers.PhoneNumberDesc.getDescriptor=i18n.phonenumbers.PhoneNumberDesc.prototype.getDescriptor;\ni18n.phonenumbers.PhoneMetadata.prototype.getDescriptor=function(){var a=i18n.phonenumbers.PhoneMetadata.descriptor_;a||(i18n.phonenumbers.PhoneMetadata.descriptor_=a=goog.proto2.Message.createDescriptor(i18n.phonenumbers.PhoneMetadata,{0:{name:\"PhoneMetadata\",fullName:\"i18n.phonenumbers.PhoneMetadata\"},1:{name:\"general_desc\",fieldType:goog.proto2.Message.FieldType.MESSAGE,type:i18n.phonenumbers.PhoneNumberDesc},2:{name:\"fixed_line\",fieldType:goog.proto2.Message.FieldType.MESSAGE,type:i18n.phonenumbers.PhoneNumberDesc},\n3:{name:\"mobile\",fieldType:goog.proto2.Message.FieldType.MESSAGE,type:i18n.phonenumbers.PhoneNumberDesc},4:{name:\"toll_free\",fieldType:goog.proto2.Message.FieldType.MESSAGE,type:i18n.phonenumbers.PhoneNumberDesc},5:{name:\"premium_rate\",fieldType:goog.proto2.Message.FieldType.MESSAGE,type:i18n.phonenumbers.PhoneNumberDesc},6:{name:\"shared_cost\",fieldType:goog.proto2.Message.FieldType.MESSAGE,type:i18n.phonenumbers.PhoneNumberDesc},7:{name:\"personal_number\",fieldType:goog.proto2.Message.FieldType.MESSAGE,\ntype:i18n.phonenumbers.PhoneNumberDesc},8:{name:\"voip\",fieldType:goog.proto2.Message.FieldType.MESSAGE,type:i18n.phonenumbers.PhoneNumberDesc},21:{name:\"pager\",fieldType:goog.proto2.Message.FieldType.MESSAGE,type:i18n.phonenumbers.PhoneNumberDesc},25:{name:\"uan\",fieldType:goog.proto2.Message.FieldType.MESSAGE,type:i18n.phonenumbers.PhoneNumberDesc},27:{name:\"emergency\",fieldType:goog.proto2.Message.FieldType.MESSAGE,type:i18n.phonenumbers.PhoneNumberDesc},28:{name:\"voicemail\",fieldType:goog.proto2.Message.FieldType.MESSAGE,\ntype:i18n.phonenumbers.PhoneNumberDesc},29:{name:\"short_code\",fieldType:goog.proto2.Message.FieldType.MESSAGE,type:i18n.phonenumbers.PhoneNumberDesc},30:{name:\"standard_rate\",fieldType:goog.proto2.Message.FieldType.MESSAGE,type:i18n.phonenumbers.PhoneNumberDesc},31:{name:\"carrier_specific\",fieldType:goog.proto2.Message.FieldType.MESSAGE,type:i18n.phonenumbers.PhoneNumberDesc},33:{name:\"sms_services\",fieldType:goog.proto2.Message.FieldType.MESSAGE,type:i18n.phonenumbers.PhoneNumberDesc},24:{name:\"no_international_dialling\",\nfieldType:goog.proto2.Message.FieldType.MESSAGE,type:i18n.phonenumbers.PhoneNumberDesc},9:{name:\"id\",required:!0,fieldType:goog.proto2.Message.FieldType.STRING,type:String},10:{name:\"country_code\",fieldType:goog.proto2.Message.FieldType.INT32,type:Number},11:{name:\"international_prefix\",fieldType:goog.proto2.Message.FieldType.STRING,type:String},17:{name:\"preferred_international_prefix\",fieldType:goog.proto2.Message.FieldType.STRING,type:String},12:{name:\"national_prefix\",fieldType:goog.proto2.Message.FieldType.STRING,\ntype:String},13:{name:\"preferred_extn_prefix\",fieldType:goog.proto2.Message.FieldType.STRING,type:String},15:{name:\"national_prefix_for_parsing\",fieldType:goog.proto2.Message.FieldType.STRING,type:String},16:{name:\"national_prefix_transform_rule\",fieldType:goog.proto2.Message.FieldType.STRING,type:String},18:{name:\"same_mobile_and_fixed_line_pattern\",fieldType:goog.proto2.Message.FieldType.BOOL,defaultValue:!1,type:Boolean},19:{name:\"number_format\",repeated:!0,fieldType:goog.proto2.Message.FieldType.MESSAGE,\ntype:i18n.phonenumbers.NumberFormat},20:{name:\"intl_number_format\",repeated:!0,fieldType:goog.proto2.Message.FieldType.MESSAGE,type:i18n.phonenumbers.NumberFormat},22:{name:\"main_country_for_code\",fieldType:goog.proto2.Message.FieldType.BOOL,defaultValue:!1,type:Boolean},23:{name:\"leading_digits\",fieldType:goog.proto2.Message.FieldType.STRING,type:String}}));return a};i18n.phonenumbers.PhoneMetadata.getDescriptor=i18n.phonenumbers.PhoneMetadata.prototype.getDescriptor;\ni18n.phonenumbers.PhoneMetadataCollection.prototype.getDescriptor=function(){var a=i18n.phonenumbers.PhoneMetadataCollection.descriptor_;a||(i18n.phonenumbers.PhoneMetadataCollection.descriptor_=a=goog.proto2.Message.createDescriptor(i18n.phonenumbers.PhoneMetadataCollection,{0:{name:\"PhoneMetadataCollection\",fullName:\"i18n.phonenumbers.PhoneMetadataCollection\"},1:{name:\"metadata\",repeated:!0,fieldType:goog.proto2.Message.FieldType.MESSAGE,type:i18n.phonenumbers.PhoneMetadata}}));return a};\ni18n.phonenumbers.PhoneMetadataCollection.getDescriptor=i18n.phonenumbers.PhoneMetadataCollection.prototype.getDescriptor;i18n.phonenumbers.PhoneNumber=function(){goog.proto2.Message.call(this)};goog.inherits(i18n.phonenumbers.PhoneNumber,goog.proto2.Message);i18n.phonenumbers.PhoneNumber.descriptor_=null;i18n.phonenumbers.PhoneNumber.prototype.getCountryCode=function(){return this.get$Value(1)};i18n.phonenumbers.PhoneNumber.prototype.getCountryCodeOrDefault=function(){return this.get$ValueOrDefault(1)};i18n.phonenumbers.PhoneNumber.prototype.setCountryCode=function(a){this.set$Value(1,a)};\ni18n.phonenumbers.PhoneNumber.prototype.hasCountryCode=function(){return this.has$Value(1)};i18n.phonenumbers.PhoneNumber.prototype.countryCodeCount=function(){return this.count$Values(1)};i18n.phonenumbers.PhoneNumber.prototype.clearCountryCode=function(){this.clear$Field(1)};i18n.phonenumbers.PhoneNumber.prototype.getNationalNumber=function(){return this.get$Value(2)};i18n.phonenumbers.PhoneNumber.prototype.getNationalNumberOrDefault=function(){return this.get$ValueOrDefault(2)};\ni18n.phonenumbers.PhoneNumber.prototype.setNationalNumber=function(a){this.set$Value(2,a)};i18n.phonenumbers.PhoneNumber.prototype.hasNationalNumber=function(){return this.has$Value(2)};i18n.phonenumbers.PhoneNumber.prototype.nationalNumberCount=function(){return this.count$Values(2)};i18n.phonenumbers.PhoneNumber.prototype.clearNationalNumber=function(){this.clear$Field(2)};i18n.phonenumbers.PhoneNumber.prototype.getExtension=function(){return this.get$Value(3)};\ni18n.phonenumbers.PhoneNumber.prototype.getExtensionOrDefault=function(){return this.get$ValueOrDefault(3)};i18n.phonenumbers.PhoneNumber.prototype.setExtension=function(a){this.set$Value(3,a)};i18n.phonenumbers.PhoneNumber.prototype.hasExtension=function(){return this.has$Value(3)};i18n.phonenumbers.PhoneNumber.prototype.extensionCount=function(){return this.count$Values(3)};i18n.phonenumbers.PhoneNumber.prototype.clearExtension=function(){this.clear$Field(3)};\ni18n.phonenumbers.PhoneNumber.prototype.getItalianLeadingZero=function(){return this.get$Value(4)};i18n.phonenumbers.PhoneNumber.prototype.getItalianLeadingZeroOrDefault=function(){return this.get$ValueOrDefault(4)};i18n.phonenumbers.PhoneNumber.prototype.setItalianLeadingZero=function(a){this.set$Value(4,a)};i18n.phonenumbers.PhoneNumber.prototype.hasItalianLeadingZero=function(){return this.has$Value(4)};i18n.phonenumbers.PhoneNumber.prototype.italianLeadingZeroCount=function(){return this.count$Values(4)};\ni18n.phonenumbers.PhoneNumber.prototype.clearItalianLeadingZero=function(){this.clear$Field(4)};i18n.phonenumbers.PhoneNumber.prototype.getNumberOfLeadingZeros=function(){return this.get$Value(8)};i18n.phonenumbers.PhoneNumber.prototype.getNumberOfLeadingZerosOrDefault=function(){return this.get$ValueOrDefault(8)};i18n.phonenumbers.PhoneNumber.prototype.setNumberOfLeadingZeros=function(a){this.set$Value(8,a)};i18n.phonenumbers.PhoneNumber.prototype.hasNumberOfLeadingZeros=function(){return this.has$Value(8)};\ni18n.phonenumbers.PhoneNumber.prototype.numberOfLeadingZerosCount=function(){return this.count$Values(8)};i18n.phonenumbers.PhoneNumber.prototype.clearNumberOfLeadingZeros=function(){this.clear$Field(8)};i18n.phonenumbers.PhoneNumber.prototype.getRawInput=function(){return this.get$Value(5)};i18n.phonenumbers.PhoneNumber.prototype.getRawInputOrDefault=function(){return this.get$ValueOrDefault(5)};i18n.phonenumbers.PhoneNumber.prototype.setRawInput=function(a){this.set$Value(5,a)};\ni18n.phonenumbers.PhoneNumber.prototype.hasRawInput=function(){return this.has$Value(5)};i18n.phonenumbers.PhoneNumber.prototype.rawInputCount=function(){return this.count$Values(5)};i18n.phonenumbers.PhoneNumber.prototype.clearRawInput=function(){this.clear$Field(5)};i18n.phonenumbers.PhoneNumber.prototype.getCountryCodeSource=function(){return this.get$Value(6)};i18n.phonenumbers.PhoneNumber.prototype.getCountryCodeSourceOrDefault=function(){return this.get$ValueOrDefault(6)};\ni18n.phonenumbers.PhoneNumber.prototype.setCountryCodeSource=function(a){this.set$Value(6,a)};i18n.phonenumbers.PhoneNumber.prototype.hasCountryCodeSource=function(){return this.has$Value(6)};i18n.phonenumbers.PhoneNumber.prototype.countryCodeSourceCount=function(){return this.count$Values(6)};i18n.phonenumbers.PhoneNumber.prototype.clearCountryCodeSource=function(){this.clear$Field(6)};i18n.phonenumbers.PhoneNumber.prototype.getPreferredDomesticCarrierCode=function(){return this.get$Value(7)};\ni18n.phonenumbers.PhoneNumber.prototype.getPreferredDomesticCarrierCodeOrDefault=function(){return this.get$ValueOrDefault(7)};i18n.phonenumbers.PhoneNumber.prototype.setPreferredDomesticCarrierCode=function(a){this.set$Value(7,a)};i18n.phonenumbers.PhoneNumber.prototype.hasPreferredDomesticCarrierCode=function(){return this.has$Value(7)};i18n.phonenumbers.PhoneNumber.prototype.preferredDomesticCarrierCodeCount=function(){return this.count$Values(7)};\ni18n.phonenumbers.PhoneNumber.prototype.clearPreferredDomesticCarrierCode=function(){this.clear$Field(7)};i18n.phonenumbers.PhoneNumber.CountryCodeSource={UNSPECIFIED:0,FROM_NUMBER_WITH_PLUS_SIGN:1,FROM_NUMBER_WITH_IDD:5,FROM_NUMBER_WITHOUT_PLUS_SIGN:10,FROM_DEFAULT_COUNTRY:20};\ni18n.phonenumbers.PhoneNumber.prototype.getDescriptor=function(){var a=i18n.phonenumbers.PhoneNumber.descriptor_;a||(i18n.phonenumbers.PhoneNumber.descriptor_=a=goog.proto2.Message.createDescriptor(i18n.phonenumbers.PhoneNumber,{0:{name:\"PhoneNumber\",fullName:\"i18n.phonenumbers.PhoneNumber\"},1:{name:\"country_code\",required:!0,fieldType:goog.proto2.Message.FieldType.INT32,type:Number},2:{name:\"national_number\",required:!0,fieldType:goog.proto2.Message.FieldType.UINT64,type:Number},3:{name:\"extension\",\nfieldType:goog.proto2.Message.FieldType.STRING,type:String},4:{name:\"italian_leading_zero\",fieldType:goog.proto2.Message.FieldType.BOOL,type:Boolean},8:{name:\"number_of_leading_zeros\",fieldType:goog.proto2.Message.FieldType.INT32,defaultValue:1,type:Number},5:{name:\"raw_input\",fieldType:goog.proto2.Message.FieldType.STRING,type:String},6:{name:\"country_code_source\",fieldType:goog.proto2.Message.FieldType.ENUM,defaultValue:i18n.phonenumbers.PhoneNumber.CountryCodeSource.UNSPECIFIED,type:i18n.phonenumbers.PhoneNumber.CountryCodeSource},\n7:{name:\"preferred_domestic_carrier_code\",fieldType:goog.proto2.Message.FieldType.STRING,type:String}}));return a};i18n.phonenumbers.PhoneNumber.ctor=i18n.phonenumbers.PhoneNumber;i18n.phonenumbers.PhoneNumber.ctor.getDescriptor=i18n.phonenumbers.PhoneNumber.prototype.getDescriptor;/*\n\n Copyright (C) 2010 The Libphonenumber Authors\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n*/\ni18n.phonenumbers.metadata={};\ni18n.phonenumbers.metadata.countryCodeToRegionCodeMap={1:\"US AG AI AS BB BM BS CA DM DO GD GU JM KN KY LC MP MS PR SX TC TT VC VG VI\".split(\" \"),7:[\"RU\",\"KZ\"],20:[\"EG\"],27:[\"ZA\"],30:[\"GR\"],31:[\"NL\"],32:[\"BE\"],33:[\"FR\"],34:[\"ES\"],36:[\"HU\"],39:[\"IT\",\"VA\"],40:[\"RO\"],41:[\"CH\"],43:[\"AT\"],44:[\"GB\",\"GG\",\"IM\",\"JE\"],45:[\"DK\"],46:[\"SE\"],47:[\"NO\",\"SJ\"],48:[\"PL\"],49:[\"DE\"],51:[\"PE\"],52:[\"MX\"],53:[\"CU\"],54:[\"AR\"],55:[\"BR\"],56:[\"CL\"],57:[\"CO\"],58:[\"VE\"],60:[\"MY\"],61:[\"AU\",\"CC\",\"CX\"],62:[\"ID\"],63:[\"PH\"],64:[\"NZ\"],\n65:[\"SG\"],66:[\"TH\"],81:[\"JP\"],82:[\"KR\"],84:[\"VN\"],86:[\"CN\"],90:[\"TR\"],91:[\"IN\"],92:[\"PK\"],93:[\"AF\"],94:[\"LK\"],95:[\"MM\"],98:[\"IR\"],211:[\"SS\"],212:[\"MA\",\"EH\"],213:[\"DZ\"],216:[\"TN\"],218:[\"LY\"],220:[\"GM\"],221:[\"SN\"],222:[\"MR\"],223:[\"ML\"],224:[\"GN\"],225:[\"CI\"],226:[\"BF\"],227:[\"NE\"],228:[\"TG\"],229:[\"BJ\"],230:[\"MU\"],231:[\"LR\"],232:[\"SL\"],233:[\"GH\"],234:[\"NG\"],235:[\"TD\"],236:[\"CF\"],237:[\"CM\"],238:[\"CV\"],239:[\"ST\"],240:[\"GQ\"],241:[\"GA\"],242:[\"CG\"],243:[\"CD\"],244:[\"AO\"],245:[\"GW\"],246:[\"IO\"],247:[\"AC\"],248:[\"SC\"],\n249:[\"SD\"],250:[\"RW\"],251:[\"ET\"],252:[\"SO\"],253:[\"DJ\"],254:[\"KE\"],255:[\"TZ\"],256:[\"UG\"],257:[\"BI\"],258:[\"MZ\"],260:[\"ZM\"],261:[\"MG\"],262:[\"RE\",\"YT\"],263:[\"ZW\"],264:[\"NA\"],265:[\"MW\"],266:[\"LS\"],267:[\"BW\"],268:[\"SZ\"],269:[\"KM\"],290:[\"SH\",\"TA\"],291:[\"ER\"],297:[\"AW\"],298:[\"FO\"],299:[\"GL\"],350:[\"GI\"],351:[\"PT\"],352:[\"LU\"],353:[\"IE\"],354:[\"IS\"],355:[\"AL\"],356:[\"MT\"],357:[\"CY\"],358:[\"FI\",\"AX\"],359:[\"BG\"],370:[\"LT\"],371:[\"LV\"],372:[\"EE\"],373:[\"MD\"],374:[\"AM\"],375:[\"BY\"],376:[\"AD\"],377:[\"MC\"],378:[\"SM\"],380:[\"UA\"],\n381:[\"RS\"],382:[\"ME\"],383:[\"XK\"],385:[\"HR\"],386:[\"SI\"],387:[\"BA\"],389:[\"MK\"],420:[\"CZ\"],421:[\"SK\"],423:[\"LI\"],500:[\"FK\"],501:[\"BZ\"],502:[\"GT\"],503:[\"SV\"],504:[\"HN\"],505:[\"NI\"],506:[\"CR\"],507:[\"PA\"],508:[\"PM\"],509:[\"HT\"],590:[\"GP\",\"BL\",\"MF\"],591:[\"BO\"],592:[\"GY\"],593:[\"EC\"],594:[\"GF\"],595:[\"PY\"],596:[\"MQ\"],597:[\"SR\"],598:[\"UY\"],599:[\"CW\",\"BQ\"],670:[\"TL\"],672:[\"NF\"],673:[\"BN\"],674:[\"NR\"],675:[\"PG\"],676:[\"TO\"],677:[\"SB\"],678:[\"VU\"],679:[\"FJ\"],680:[\"PW\"],681:[\"WF\"],682:[\"CK\"],683:[\"NU\"],685:[\"WS\"],686:[\"KI\"],\n687:[\"NC\"],688:[\"TV\"],689:[\"PF\"],690:[\"TK\"],691:[\"FM\"],692:[\"MH\"],800:[\"001\"],808:[\"001\"],850:[\"KP\"],852:[\"HK\"],853:[\"MO\"],855:[\"KH\"],856:[\"LA\"],870:[\"001\"],878:[\"001\"],880:[\"BD\"],881:[\"001\"],882:[\"001\"],883:[\"001\"],886:[\"TW\"],888:[\"001\"],960:[\"MV\"],961:[\"LB\"],962:[\"JO\"],963:[\"SY\"],964:[\"IQ\"],965:[\"KW\"],966:[\"SA\"],967:[\"YE\"],968:[\"OM\"],970:[\"PS\"],971:[\"AE\"],972:[\"IL\"],973:[\"BH\"],974:[\"QA\"],975:[\"BT\"],976:[\"MN\"],977:[\"NP\"],979:[\"001\"],992:[\"TJ\"],993:[\"TM\"],994:[\"AZ\"],995:[\"GE\"],996:[\"KG\"],998:[\"UZ\"]};\ni18n.phonenumbers.metadata.countryToMetadata={AC:[,[,,\"(?:[01589]\\\\d|[46])\\\\d{4}\",,,,,,,[5,6]],[,,\"6[2-467]\\\\d{3}\",,,,\"62889\",,,[5]],[,,\"4\\\\d{4}\",,,,\"40123\",,,[5]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],\"AC\",247,\"00\",,,,,,,,,,[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,\"(?:0[1-9]|[1589]\\\\d)\\\\d{4}\",,,,\"542011\",,,[6]],,,[,,,,,,,,,[-1]]],AD:[,[,,\"(?:1|6\\\\d)\\\\d{7}|[135-9]\\\\d{5}\",,,,,,,[6,8,9]],[,,\"[78]\\\\d{5}\",,,,\"712345\",,,[6]],[,,\"690\\\\d{6}|[356]\\\\d{5}\",,,,\"312345\",\n,,[6,9]],[,,\"180[02]\\\\d{4}\",,,,\"18001234\",,,[8]],[,,\"[19]\\\\d{5}\",,,,\"912345\",,,[6]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],\"AD\",376,\"00\",,,,,,,,[[,\"(\\\\d{3})(\\\\d{3})\",\"$1 $2\",[\"[135-9]\"]],[,\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"1\"]],[,\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"6\"]]],,[,,,,,,,,,[-1]],,,[,,\"1800\\\\d{4}\",,,,,,,[8]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],AE:[,[,,\"(?:[4-7]\\\\d|9[0-689])\\\\d{7}|800\\\\d{2,9}|[2-4679]\\\\d{7}\",,,,,,,[5,6,7,8,9,10,11,12]],[,,\"[2-4679][2-8]\\\\d{6}\",,,,\"22345678\",,,[8],[7]],\n[,,\"5[024-68]\\\\d{7}\",,,,\"501234567\",,,[9]],[,,\"400\\\\d{6}|800\\\\d{2,9}\",,,,\"800123456\"],[,,\"900[02]\\\\d{5}\",,,,\"900234567\",,,[9]],[,,\"700[05]\\\\d{5}\",,,,\"700012345\",,,[9]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],\"AE\",971,\"00\",\"0\",,,\"0\",,,,[[,\"(\\\\d{3})(\\\\d{2,9})\",\"$1 $2\",[\"60|8\"]],[,\"(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[236]|[479][2-8]\"],\"0$1\"],[,\"(\\\\d{3})(\\\\d)(\\\\d{5})\",\"$1 $2 $3\",[\"[479]\"]],[,\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"5\"],\"0$1\"]],,[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,\"600[25]\\\\d{5}\",,,,\"600212345\",\n,,[9]],,,[,,,,,,,,,[-1]]],AF:[,[,,\"[2-7]\\\\d{8}\",,,,,,,[9],[7]],[,,\"(?:[25][0-8]|[34][0-4]|6[0-5])[2-9]\\\\d{6}\",,,,\"234567890\",,,,[7]],[,,\"7\\\\d{8}\",,,,\"701234567\",,,,[7]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],\"AF\",93,\"00\",\"0\",,,\"0\",,,,[[,\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[1-9]\"]],[,\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[2-7]\"],\"0$1\"]],[[,\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[2-7]\"],\"0$1\"]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],\nAG:[,[,,\"(?:268|[58]\\\\d\\\\d|900)\\\\d{7}\",,,,,,,[10],[7]],[,,\"268(?:4(?:6[0-38]|84)|56[0-2])\\\\d{4}\",,,,\"2684601234\",,,,[7]],[,,\"268(?:464|7(?:1[3-9]|[28]\\\\d|3[0246]|64|7[0-689]))\\\\d{4}\",,,,\"2684641234\",,,,[7]],[,,\"8(?:00|33|44|55|66|77|88)[2-9]\\\\d{6}\",,,,\"8002123456\"],[,,\"900[2-9]\\\\d{6}\",,,,\"9002123456\"],[,,,,,,,,,[-1]],[,,\"52(?:3(?:[2-46-9][02-9]\\\\d|5(?:[02-46-9]\\\\d|5[0-46-9]))|4(?:[2-478][02-9]\\\\d|5(?:[034]\\\\d|2[024-9]|5[0-46-9])|6(?:0[1-9]|[2-9]\\\\d)|9(?:[05-9]\\\\d|2[0-5]|49)))\\\\d{4}|52[34][2-9]1[02-9]\\\\d{4}|5(?:00|2[125-9]|33|44|66|77|88)[2-9]\\\\d{6}\",\n,,,\"5002345678\"],[,,\"26848[01]\\\\d{4}\",,,,\"2684801234\",,,,[7]],\"AG\",1,\"011\",\"1\",,,\"([457]\\\\d{6})$|1\",\"268$1\",,,,,[,,\"26840[69]\\\\d{4}\",,,,\"2684061234\",,,,[7]],,\"268\",[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],AI:[,[,,\"(?:264|[58]\\\\d\\\\d|900)\\\\d{7}\",,,,,,,[10],[7]],[,,\"264(?:292|4(?:6[12]|9[78]))\\\\d{4}\",,,,\"2644612345\",,,,[7]],[,,\"264(?:235|4(?:69|76)|5(?:3[6-9]|8[1-4])|7(?:29|72))\\\\d{4}\",,,,\"2642351234\",,,,[7]],[,,\"8(?:00|33|44|55|66|77|88)[2-9]\\\\d{6}\",,,,\"8002123456\"],[,,\"900[2-9]\\\\d{6}\",,,\n,\"9002123456\"],[,,,,,,,,,[-1]],[,,\"52(?:3(?:[2-46-9][02-9]\\\\d|5(?:[02-46-9]\\\\d|5[0-46-9]))|4(?:[2-478][02-9]\\\\d|5(?:[034]\\\\d|2[024-9]|5[0-46-9])|6(?:0[1-9]|[2-9]\\\\d)|9(?:[05-9]\\\\d|2[0-5]|49)))\\\\d{4}|52[34][2-9]1[02-9]\\\\d{4}|5(?:00|2[125-9]|33|44|66|77|88)[2-9]\\\\d{6}\",,,,\"5002345678\"],[,,,,,,,,,[-1]],\"AI\",1,\"011\",\"1\",,,\"([2457]\\\\d{6})$|1\",\"264$1\",,,,,[,,\"264724\\\\d{4}\",,,,\"2647241234\",,,,[7]],,\"264\",[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],AL:[,[,,\"(?:700\\\\d\\\\d|900)\\\\d{3}|8\\\\d{5,7}|(?:[2-5]|6\\\\d)\\\\d{7}\",\n,,,,,,[6,7,8,9],[5]],[,,\"4505[0-2]\\\\d{3}|(?:[2358][16-9]\\\\d[2-9]|4410)\\\\d{4}|(?:[2358][2-5][2-9]|4(?:[2-57-9][2-9]|6\\\\d))\\\\d{5}\",,,,\"22345678\",,,[8],[5,6,7]],[,,\"6(?:[78][2-9]|9\\\\d)\\\\d{6}\",,,,\"672123456\",,,[9]],[,,\"800\\\\d{4}\",,,,\"8001234\",,,[7]],[,,\"900[1-9]\\\\d\\\\d\",,,,\"900123\",,,[6]],[,,\"808[1-9]\\\\d\\\\d\",,,,\"808123\",,,[6]],[,,\"700[2-9]\\\\d{4}\",,,,\"70021234\",,,[8]],[,,,,,,,,,[-1]],\"AL\",355,\"00\",\"0\",,,\"0\",,,,[[,\"(\\\\d{3})(\\\\d{3,4})\",\"$1 $2\",[\"80|9\"],\"0$1\"],[,\"(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"4[2-6]\"],\n\"0$1\"],[,\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[2358][2-5]|4\"],\"0$1\"],[,\"(\\\\d{3})(\\\\d{5})\",\"$1 $2\",[\"[23578]\"],\"0$1\"],[,\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"6\"],\"0$1\"]],,[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],AM:[,[,,\"(?:[1-489]\\\\d|55|60|77)\\\\d{6}\",,,,,,,[8],[5,6]],[,,\"(?:(?:1[0-25]|47)\\\\d|2(?:2[2-46]|3[1-8]|4[2-69]|5[2-7]|6[1-9]|8[1-7])|3[12]2)\\\\d{5}\",,,,\"10123456\",,,,[5,6]],[,,\"(?:33|4[1349]|55|77|88|9[13-9])\\\\d{6}\",,,,\"77123456\"],[,,\"800\\\\d{5}\",,,,\"80012345\"],\n[,,\"90[016]\\\\d{5}\",,,,\"90012345\"],[,,\"80[1-4]\\\\d{5}\",,,,\"80112345\"],[,,,,,,,,,[-1]],[,,\"60(?:2[78]|3[5-9]|4[02-9]|5[0-46-9]|[6-8]\\\\d|9[0-2])\\\\d{4}\",,,,\"60271234\"],\"AM\",374,\"00\",\"0\",,,\"0\",,,,[[,\"(\\\\d{3})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3\",[\"[89]0\"],\"0 $1\"],[,\"(\\\\d{3})(\\\\d{5})\",\"$1 $2\",[\"2|3[12]\"],\"(0$1)\"],[,\"(\\\\d{2})(\\\\d{6})\",\"$1 $2\",[\"1|47\"],\"(0$1)\"],[,\"(\\\\d{2})(\\\\d{6})\",\"$1 $2\",[\"[3-9]\"],\"0$1\"]],,[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],AO:[,[,,\"[29]\\\\d{8}\",,,,,,,[9]],[,,\"2\\\\d(?:[0134][25-9]|[25-9]\\\\d)\\\\d{5}\",\n,,,\"222123456\"],[,,\"9[1-79]\\\\d{7}\",,,,\"923123456\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],\"AO\",244,\"00\",,,,,,,,[[,\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[29]\"]]],,[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],AR:[,[,,\"(?:11|[89]\\\\d\\\\d)\\\\d{8}|[2368]\\\\d{9}\",,,,,,,[10,11],[6,7,8]],[,,\"3(?:7(?:1[15]|81)|8(?:21|4[16]|69|9[12]))[46]\\\\d{5}|(?:(?:11[1-8]|670)\\\\d|2(?:21[2-6]|(?:3[06]|49)4|6(?:04|1[2-8])|9[17][4-6])|3(?:(?:36|64)4|4(?:1[2-8]|[25][4-6]|84)|5(?:1[2-9]|[38][4-6])|8(?:[17][2-6]|3[4-6]|8[3-68])))\\\\d{6}|(?:2(?:23|64|99)|3(?:43|85))[3-6]\\\\d{6}|(?:2(?:657|9(?:54|66))|3(?:487|7(?:55|77)|865))[2-8]\\\\d{5}|(?:2(?:[28]0|37|6[36]|9[48])|3(?:62|7[069]|80))[45]\\\\d{6}|(?:2(?:2(?:2[59]|44|52)|3(?:26|44)|47[35]|9(?:[07]2|2[26]|34|46))|3327)[45]\\\\d{5}|(?:2(?:2(?:62|81)|320|622|9(?:42|83))|3(?:329|4(?:62|76|89)|564))[2-6]\\\\d{5}|(?:2(?:284|3(?:02|23)|477|920)|3(?:4(?:46|[89]2)|541|878))[2-7]\\\\d{5}|2(?:2(?:21|4[23]|6[145]|7[1-4]|8[356]|9[267])|3(?:16|3[13-8]|43|5[346-8]|9[3-5])|6(?:2[46]|4[78]|5[1568])|9(?:03|2[1457-9]|3[1356]|4[08]|[56][23]|82))4\\\\d{5}|(?:2(?:257|3(?:24|46|92)|9(?:01|23|64))|3(?:4(?:42|71)|5(?:25|37|4[347]|71)|7(?:18|35|5[17])))[3-6]\\\\d{5}|(?:2(?:2(?:02|2[3467]|4[156]|5[45]|6[6-8]|91)|3(?:1[47]|25|[45][25]|96)|47[48]|625|932)|3(?:38[2578]|4(?:0[0-24-9]|3[78]|4[457]|58|6[03-9]|72|83|9[136-8])|5(?:2[124]|[368][23]|4[2689]|7[2-6])|7(?:16|2[15]|3[14]|4[13]|5[468]|7[2-5]|8[26])|8(?:2[5-7]|3[278]|4[3-5]|5[78]|6[1-378]|[78]7|94)))[4-6]\\\\d{5}\",\n,,,\"1123456789\",,,[10],[6,7,8]],[,,\"93(?:7(?:1[15]|81)|8(?:21|4[16]|69|9[12]))[46]\\\\d{5}|(?:675\\\\d|9(?:11[1-8]\\\\d|2(?:21[2-6]|(?:3[06]|49)4|6(?:04|1[2-8])|9[17][4-6])|3(?:(?:36|64)4|4(?:1[2-8]|[25][4-6]|84)|5(?:1[2-9]|[38][4-6])|8(?:[17][2-6]|3[4-6]|8[3-68]))))\\\\d{6}|9(?:2(?:23|64|99)|3(?:43|85))[3-6]\\\\d{6}|9(?:2(?:657|9(?:54|66))|3(?:487|7(?:55|77)|865))[2-8]\\\\d{5}|9(?:2(?:[28]0|37|6[36]|9[48])|3(?:62|7[069]|80))[45]\\\\d{6}|9(?:2(?:2(?:2[59]|44|52)|3(?:26|44)|47[35]|9(?:[07]2|2[26]|34|46))|3327)[45]\\\\d{5}|9(?:2(?:2(?:62|81)|320|622|9(?:42|83))|3(?:329|4(?:62|76|89)|564))[2-6]\\\\d{5}|9(?:2(?:284|3(?:02|23)|477|920)|3(?:4(?:46|[89]2)|541|878))[2-7]\\\\d{5}|92(?:2(?:21|4[23]|6[145]|7[1-4]|8[356]|9[267])|3(?:16|3[13-8]|43|5[346-8]|9[3-5])|6(?:2[46]|4[78]|5[1568])|9(?:03|2[1457-9]|3[1356]|4[08]|[56][23]|82))4\\\\d{5}|9(?:2(?:257|3(?:24|46|92)|9(?:01|23|64))|3(?:4(?:42|71)|5(?:25|37|4[347]|71)|7(?:18|35|5[17])))[3-6]\\\\d{5}|9(?:2(?:2(?:02|2[3467]|4[156]|5[45]|6[6-8]|91)|3(?:1[47]|25|[45][25]|96)|47[48]|625|932)|3(?:38[2578]|4(?:0[0-24-9]|3[78]|4[457]|58|6[03-9]|72|83|9[136-8])|5(?:2[124]|[368][23]|4[2689]|7[2-6])|7(?:16|2[15]|3[14]|4[13]|5[468]|7[2-5]|8[26])|8(?:2[5-7]|3[278]|4[3-5]|5[78]|6[1-378]|[78]7|94)))[4-6]\\\\d{5}\",\n,,,\"91123456789\",,,,[6,7,8]],[,,\"800\\\\d{7,8}\",,,,\"8001234567\"],[,,\"60[04579]\\\\d{7}\",,,,\"6001234567\",,,[10]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],\"AR\",54,\"00\",\"0\",,,\"0?(?:(11|2(?:2(?:02?|[13]|2[13-79]|4[1-6]|5[2457]|6[124-8]|7[1-4]|8[13-6]|9[1267])|3(?:02?|1[467]|2[03-6]|3[13-8]|[49][2-6]|5[2-8]|[67])|4(?:7[3-578]|9)|6(?:[0136]|2[24-6]|4[6-8]?|5[15-8])|80|9(?:0[1-3]|[19]|2\\\\d|3[1-6]|4[02568]?|5[2-4]|6[2-46]|72?|8[23]?))|3(?:3(?:2[79]|6|8[2578])|4(?:0[0-24-9]|[12]|3[5-8]?|4[24-7]|5[4-68]?|6[02-9]|7[126]|8[2379]?|9[1-36-8])|5(?:1|2[1245]|3[237]?|4[1-46-9]|6[2-4]|7[1-6]|8[2-5]?)|6[24]|7(?:[069]|1[1568]|2[15]|3[145]|4[13]|5[14-8]|7[2-57]|8[126])|8(?:[01]|2[15-7]|3[2578]?|4[13-6]|5[4-8]?|6[1-357-9]|7[36-8]?|8[5-8]?|9[124])))15)?\",\n\"9$1\",,,[[,\"(\\\\d{3})\",\"$1\",[\"0|1(?:0[0-35-7]|1[02-5]|2[015]|3[47]|4[478])|911\"]],[,\"(\\\\d{2})(\\\\d{4})\",\"$1-$2\",[\"[1-9]\"]],[,\"(\\\\d{3})(\\\\d{4})\",\"$1-$2\",[\"[2-9]\"]],[,\"(\\\\d{4})(\\\\d{4})\",\"$1-$2\",[\"[1-8]\"]],[,\"(\\\\d{4})(\\\\d{2})(\\\\d{4})\",\"$1 $2-$3\",[\"2(?:2[024-9]|3[0-59]|47|6[245]|9[02-8])|3(?:3[28]|4[03-9]|5[2-46-8]|7[1-578]|8[2-9])\",\"2(?:[23]02|6(?:[25]|4[6-8])|9(?:[02356]|4[02568]|72|8[23]))|3(?:3[28]|4(?:[04679]|3[5-8]|5[4-68]|8[2379])|5(?:[2467]|3[237]|8[2-5])|7[1-578]|8(?:[2469]|3[2578]|5[4-8]|7[36-8]|8[5-8]))|2(?:2[24-9]|3[1-59]|47)\",\n\"2(?:[23]02|6(?:[25]|4(?:64|[78]))|9(?:[02356]|4(?:[0268]|5[2-6])|72|8[23]))|3(?:3[28]|4(?:[04679]|3[78]|5(?:4[46]|8)|8[2379])|5(?:[2467]|3[237]|8[23])|7[1-578]|8(?:[2469]|3[278]|5[56][46]|86[3-6]))|2(?:2[24-9]|3[1-59]|47)|38(?:[58][78]|7[378])|3(?:4[35][56]|58[45]|8(?:[38]5|54|76))[4-6]\",\"2(?:[23]02|6(?:[25]|4(?:64|[78]))|9(?:[02356]|4(?:[0268]|5[2-6])|72|8[23]))|3(?:3[28]|4(?:[04679]|3(?:5(?:4[0-25689]|[56])|[78])|58|8[2379])|5(?:[2467]|3[237]|8(?:[23]|4(?:[45]|60)|5(?:4[0-39]|5|64)))|7[1-578]|8(?:[2469]|3[278]|54(?:4|5[13-7]|6[89])|86[3-6]))|2(?:2[24-9]|3[1-59]|47)|38(?:[58][78]|7[378])|3(?:454|85[56])[46]|3(?:4(?:36|5[56])|8(?:[38]5|76))[4-6]\"],\n\"0$1\",,1],[,\"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$1 $2-$3\",[\"1\"],\"0$1\",,1],[,\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1-$2-$3\",[\"[68]\"],\"0$1\"],[,\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2-$3\",[\"[23]\"],\"0$1\",,1],[,\"(\\\\d)(\\\\d{4})(\\\\d{2})(\\\\d{4})\",\"$2 15-$3-$4\",[\"9(?:2[2-469]|3[3-578])\",\"9(?:2(?:2[024-9]|3[0-59]|47|6[245]|9[02-8])|3(?:3[28]|4[03-9]|5[2-46-8]|7[1-578]|8[2-9]))\",\"9(?:2(?:[23]02|6(?:[25]|4[6-8])|9(?:[02356]|4[02568]|72|8[23]))|3(?:3[28]|4(?:[04679]|3[5-8]|5[4-68]|8[2379])|5(?:[2467]|3[237]|8[2-5])|7[1-578]|8(?:[2469]|3[2578]|5[4-8]|7[36-8]|8[5-8])))|92(?:2[24-9]|3[1-59]|47)\",\n\"9(?:2(?:[23]02|6(?:[25]|4(?:64|[78]))|9(?:[02356]|4(?:[0268]|5[2-6])|72|8[23]))|3(?:3[28]|4(?:[04679]|3[78]|5(?:4[46]|8)|8[2379])|5(?:[2467]|3[237]|8[23])|7[1-578]|8(?:[2469]|3[278]|5(?:[56][46]|[78])|7[378]|8(?:6[3-6]|[78]))))|92(?:2[24-9]|3[1-59]|47)|93(?:4[35][56]|58[45]|8(?:[38]5|54|76))[4-6]\",\"9(?:2(?:[23]02|6(?:[25]|4(?:64|[78]))|9(?:[02356]|4(?:[0268]|5[2-6])|72|8[23]))|3(?:3[28]|4(?:[04679]|3(?:5(?:4[0-25689]|[56])|[78])|5(?:4[46]|8)|8[2379])|5(?:[2467]|3[237]|8(?:[23]|4(?:[45]|60)|5(?:4[0-39]|5|64)))|7[1-578]|8(?:[2469]|3[278]|5(?:4(?:4|5[13-7]|6[89])|[56][46]|[78])|7[378]|8(?:6[3-6]|[78]))))|92(?:2[24-9]|3[1-59]|47)|93(?:4(?:36|5[56])|8(?:[38]5|76))[4-6]\"],\n\"0$1\"],[,\"(\\\\d)(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$2 15-$3-$4\",[\"91\"],\"0$1\"],[,\"(\\\\d{3})(\\\\d{3})(\\\\d{5})\",\"$1-$2-$3\",[\"8\"],\"0$1\"],[,\"(\\\\d)(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$2 15-$3-$4\",[\"9\"],\"0$1\"]],[[,\"(\\\\d{4})(\\\\d{2})(\\\\d{4})\",\"$1 $2-$3\",[\"2(?:2[024-9]|3[0-59]|47|6[245]|9[02-8])|3(?:3[28]|4[03-9]|5[2-46-8]|7[1-578]|8[2-9])\",\"2(?:[23]02|6(?:[25]|4[6-8])|9(?:[02356]|4[02568]|72|8[23]))|3(?:3[28]|4(?:[04679]|3[5-8]|5[4-68]|8[2379])|5(?:[2467]|3[237]|8[2-5])|7[1-578]|8(?:[2469]|3[2578]|5[4-8]|7[36-8]|8[5-8]))|2(?:2[24-9]|3[1-59]|47)\",\n\"2(?:[23]02|6(?:[25]|4(?:64|[78]))|9(?:[02356]|4(?:[0268]|5[2-6])|72|8[23]))|3(?:3[28]|4(?:[04679]|3[78]|5(?:4[46]|8)|8[2379])|5(?:[2467]|3[237]|8[23])|7[1-578]|8(?:[2469]|3[278]|5[56][46]|86[3-6]))|2(?:2[24-9]|3[1-59]|47)|38(?:[58][78]|7[378])|3(?:4[35][56]|58[45]|8(?:[38]5|54|76))[4-6]\",\"2(?:[23]02|6(?:[25]|4(?:64|[78]))|9(?:[02356]|4(?:[0268]|5[2-6])|72|8[23]))|3(?:3[28]|4(?:[04679]|3(?:5(?:4[0-25689]|[56])|[78])|58|8[2379])|5(?:[2467]|3[237]|8(?:[23]|4(?:[45]|60)|5(?:4[0-39]|5|64)))|7[1-578]|8(?:[2469]|3[278]|54(?:4|5[13-7]|6[89])|86[3-6]))|2(?:2[24-9]|3[1-59]|47)|38(?:[58][78]|7[378])|3(?:454|85[56])[46]|3(?:4(?:36|5[56])|8(?:[38]5|76))[4-6]\"],\n\"0$1\",,1],[,\"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$1 $2-$3\",[\"1\"],\"0$1\",,1],[,\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1-$2-$3\",[\"[68]\"],\"0$1\"],[,\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2-$3\",[\"[23]\"],\"0$1\",,1],[,\"(\\\\d)(\\\\d{4})(\\\\d{2})(\\\\d{4})\",\"$1 $2 $3-$4\",[\"9(?:2[2-469]|3[3-578])\",\"9(?:2(?:2[024-9]|3[0-59]|47|6[245]|9[02-8])|3(?:3[28]|4[03-9]|5[2-46-8]|7[1-578]|8[2-9]))\",\"9(?:2(?:[23]02|6(?:[25]|4[6-8])|9(?:[02356]|4[02568]|72|8[23]))|3(?:3[28]|4(?:[04679]|3[5-8]|5[4-68]|8[2379])|5(?:[2467]|3[237]|8[2-5])|7[1-578]|8(?:[2469]|3[2578]|5[4-8]|7[36-8]|8[5-8])))|92(?:2[24-9]|3[1-59]|47)\",\n\"9(?:2(?:[23]02|6(?:[25]|4(?:64|[78]))|9(?:[02356]|4(?:[0268]|5[2-6])|72|8[23]))|3(?:3[28]|4(?:[04679]|3[78]|5(?:4[46]|8)|8[2379])|5(?:[2467]|3[237]|8[23])|7[1-578]|8(?:[2469]|3[278]|5(?:[56][46]|[78])|7[378]|8(?:6[3-6]|[78]))))|92(?:2[24-9]|3[1-59]|47)|93(?:4[35][56]|58[45]|8(?:[38]5|54|76))[4-6]\",\"9(?:2(?:[23]02|6(?:[25]|4(?:64|[78]))|9(?:[02356]|4(?:[0268]|5[2-6])|72|8[23]))|3(?:3[28]|4(?:[04679]|3(?:5(?:4[0-25689]|[56])|[78])|5(?:4[46]|8)|8[2379])|5(?:[2467]|3[237]|8(?:[23]|4(?:[45]|60)|5(?:4[0-39]|5|64)))|7[1-578]|8(?:[2469]|3[278]|5(?:4(?:4|5[13-7]|6[89])|[56][46]|[78])|7[378]|8(?:6[3-6]|[78]))))|92(?:2[24-9]|3[1-59]|47)|93(?:4(?:36|5[56])|8(?:[38]5|76))[4-6]\"]],\n[,\"(\\\\d)(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3-$4\",[\"91\"]],[,\"(\\\\d{3})(\\\\d{3})(\\\\d{5})\",\"$1-$2-$3\",[\"8\"],\"0$1\"],[,\"(\\\\d)(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3-$4\",[\"9\"]]],[,,,,,,,,,[-1]],,,[,,\"810\\\\d{7}\",,,,,,,[10]],[,,\"810\\\\d{7}\",,,,\"8101234567\",,,[10]],,,[,,,,,,,,,[-1]]],AS:[,[,,\"(?:[58]\\\\d\\\\d|684|900)\\\\d{7}\",,,,,,,[10],[7]],[,,\"6846(?:22|33|44|55|77|88|9[19])\\\\d{4}\",,,,\"6846221234\",,,,[7]],[,,\"684(?:2(?:48|5[2468]|7[26])|7(?:3[13]|70|82))\\\\d{4}\",,,,\"6847331234\",,,,[7]],[,,\"8(?:00|33|44|55|66|77|88)[2-9]\\\\d{6}\",\n,,,\"8002123456\"],[,,\"900[2-9]\\\\d{6}\",,,,\"9002123456\"],[,,,,,,,,,[-1]],[,,\"52(?:3(?:[2-46-9][02-9]\\\\d|5(?:[02-46-9]\\\\d|5[0-46-9]))|4(?:[2-478][02-9]\\\\d|5(?:[034]\\\\d|2[024-9]|5[0-46-9])|6(?:0[1-9]|[2-9]\\\\d)|9(?:[05-9]\\\\d|2[0-5]|49)))\\\\d{4}|52[34][2-9]1[02-9]\\\\d{4}|5(?:00|2[125-9]|33|44|66|77|88)[2-9]\\\\d{6}\",,,,\"5002345678\"],[,,,,,,,,,[-1]],\"AS\",1,\"011\",\"1\",,,\"([267]\\\\d{6})$|1\",\"684$1\",,,,,[,,,,,,,,,[-1]],,\"684\",[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],AT:[,[,,\"1\\\\d{3,12}|2\\\\d{6,12}|43(?:(?:0\\\\d|5[02-9])\\\\d{3,9}|2\\\\d{4,5}|[3467]\\\\d{4}|8\\\\d{4,6}|9\\\\d{4,7})|5\\\\d{4,12}|8\\\\d{7,12}|9\\\\d{8,12}|(?:[367]\\\\d|4[0-24-9])\\\\d{4,11}\",\n,,,,,,[4,5,6,7,8,9,10,11,12,13],[3]],[,,\"1(?:11\\\\d|[2-9]\\\\d{3,11})|(?:316|463|(?:51|66|73)2)\\\\d{3,10}|(?:2(?:1[467]|2[13-8]|5[2357]|6[1-46-8]|7[1-8]|8[124-7]|9[1458])|3(?:1[1-578]|3[23568]|4[5-7]|5[1378]|6[1-38]|8[3-68])|4(?:2[1-8]|35|7[1368]|8[2457])|5(?:2[1-8]|3[357]|4[147]|5[12578]|6[37])|6(?:13|2[1-47]|4[135-8]|5[468])|7(?:2[1-8]|35|4[13478]|5[68]|6[16-8]|7[1-6]|9[45]))\\\\d{4,10}\",,,,\"1234567890\",,,,[3]],[,,\"6(?:5[0-3579]|6[013-9]|[7-9]\\\\d)\\\\d{4,10}\",,,,\"664123456\",,,[7,8,9,10,11,12,13]],[,,\"800\\\\d{6,10}\",\n,,,\"800123456\",,,[9,10,11,12,13]],[,,\"(?:8[69][2-68]|9(?:0[01]|3[019]))\\\\d{6,10}\",,,,\"900123456\",,,[9,10,11,12,13]],[,,\"8(?:10|2[018])\\\\d{6,10}|828\\\\d{5}\",,,,\"810123456\",,,[8,9,10,11,12,13]],[,,,,,,,,,[-1]],[,,\"5(?:0[1-9]|17|[79]\\\\d)\\\\d{2,10}|7[28]0\\\\d{6,10}\",,,,\"780123456\",,,[5,6,7,8,9,10,11,12,13]],\"AT\",43,\"00\",\"0\",,,\"0\",,,,[[,\"(\\\\d{4})\",\"$1\",[\"14\"]],[,\"(\\\\d)(\\\\d{3,12})\",\"$1 $2\",[\"1(?:11|[2-9])\"],\"0$1\"],[,\"(\\\\d{3})(\\\\d{2})\",\"$1 $2\",[\"517\"],\"0$1\"],[,\"(\\\\d{2})(\\\\d{3,5})\",\"$1 $2\",[\"5[079]\"],\"0$1\"],\n[,\"(\\\\d{6})\",\"$1\",[\"[18]\"]],[,\"(\\\\d{3})(\\\\d{3,10})\",\"$1 $2\",[\"(?:31|4)6|51|6(?:5[0-3579]|[6-9])|7(?:20|32|8)|[89]\"],\"0$1\"],[,\"(\\\\d{4})(\\\\d{3,9})\",\"$1 $2\",[\"[2-467]|5[2-6]\"],\"0$1\"],[,\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"5\"],\"0$1\"],[,\"(\\\\d{2})(\\\\d{4})(\\\\d{4,7})\",\"$1 $2 $3\",[\"5\"],\"0$1\"]],[[,\"(\\\\d)(\\\\d{3,12})\",\"$1 $2\",[\"1(?:11|[2-9])\"],\"0$1\"],[,\"(\\\\d{3})(\\\\d{2})\",\"$1 $2\",[\"517\"],\"0$1\"],[,\"(\\\\d{2})(\\\\d{3,5})\",\"$1 $2\",[\"5[079]\"],\"0$1\"],[,\"(\\\\d{3})(\\\\d{3,10})\",\"$1 $2\",[\"(?:31|4)6|51|6(?:5[0-3579]|[6-9])|7(?:20|32|8)|[89]\"],\n\"0$1\"],[,\"(\\\\d{4})(\\\\d{3,9})\",\"$1 $2\",[\"[2-467]|5[2-6]\"],\"0$1\"],[,\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"5\"],\"0$1\"],[,\"(\\\\d{2})(\\\\d{4})(\\\\d{4,7})\",\"$1 $2 $3\",[\"5\"],\"0$1\"]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],AU:[,[,,\"1(?:[0-79]\\\\d{7}(?:\\\\d(?:\\\\d{2})?)?|8[0-24-9]\\\\d{7})|[2-478]\\\\d{8}|1\\\\d{4,7}\",,,,,,,[5,6,7,8,9,10,12]],[,,\"(?:(?:(?:2(?:[0-26-9]\\\\d|3[0-8]|4[02-9]|5[0135-9])|7(?:[013-57-9]\\\\d|2[0-8]))\\\\d|3(?:(?:[0-3589]\\\\d|6[1-9]|7[0-35-9])\\\\d|4(?:[0-578]\\\\d|90)))\\\\d\\\\d|8(?:51(?:0(?:0[03-9]|[12479]\\\\d|3[2-9]|5[0-8]|6[1-9]|8[0-7])|1(?:[0235689]\\\\d|1[0-69]|4[0-589]|7[0-47-9])|2(?:0[0-79]|[18][13579]|2[14-9]|3[0-46-9]|[4-6]\\\\d|7[89]|9[0-4])|3\\\\d\\\\d)|(?:6[0-8]|[78]\\\\d)\\\\d{3}|9(?:[02-9]\\\\d{3}|1(?:(?:[0-58]\\\\d|6[0135-9])\\\\d|7(?:0[0-24-9]|[1-9]\\\\d)|9(?:[0-46-9]\\\\d|5[0-79])))))\\\\d{3}\",\n,,,\"212345678\",,,[9],[8]],[,,\"4(?:79[01]|83[0-389]|94[0-4])\\\\d{5}|4(?:[0-36]\\\\d|4[047-9]|5[0-25-9]|7[02-8]|8[0-24-9]|9[0-37-9])\\\\d{6}\",,,,\"412345678\",,,[9]],[,,\"180(?:0\\\\d{3}|2)\\\\d{3}\",,,,\"1800123456\",,,[7,10]],[,,\"190[0-26]\\\\d{6}\",,,,\"1900123456\",,,[10]],[,,\"13(?:00\\\\d{6}(?:\\\\d{2})?|45[0-4]\\\\d{3})|13\\\\d{4}\",,,,\"1300123456\",,,[6,8,10,12]],[,,,,,,,,,[-1]],[,,\"14(?:5(?:1[0458]|[23][458])|71\\\\d)\\\\d{4}\",,,,\"147101234\",,,[9]],\"AU\",61,\"001[14-689]|14(?:1[14]|34|4[17]|[56]6|7[47]|88)0011\",\"0\",,,\"(183[12])|0\",\n,\"0011\",,[[,\"(\\\\d{2})(\\\\d{3,4})\",\"$1 $2\",[\"16\"],\"0$1\"],[,\"(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3\",[\"13\"]],[,\"(\\\\d{3})(\\\\d{3})\",\"$1 $2\",[\"19\"]],[,\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"180\",\"1802\"]],[,\"(\\\\d{4})(\\\\d{3,4})\",\"$1 $2\",[\"19\"]],[,\"(\\\\d{2})(\\\\d{3})(\\\\d{2,4})\",\"$1 $2 $3\",[\"16\"],\"0$1\"],[,\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"14|4\"],\"0$1\"],[,\"(\\\\d)(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"[2378]\"],\"(0$1)\",\"$CC ($1)\"],[,\"(\\\\d{4})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"1(?:30|[89])\"]],[,\"(\\\\d{4})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",\n[\"130\"]]],[[,\"(\\\\d{2})(\\\\d{3,4})\",\"$1 $2\",[\"16\"],\"0$1\"],[,\"(\\\\d{2})(\\\\d{3})(\\\\d{2,4})\",\"$1 $2 $3\",[\"16\"],\"0$1\"],[,\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"14|4\"],\"0$1\"],[,\"(\\\\d)(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"[2378]\"],\"(0$1)\",\"$CC ($1)\"],[,\"(\\\\d{4})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"1(?:30|[89])\"]]],[,,\"163\\\\d{2,6}\",,,,\"1631234\",,,[5,6,7,8,9]],1,,[,,\"1(?:3(?:00\\\\d{5}|45[0-4])|802)\\\\d{3}|1[38]00\\\\d{6}|13\\\\d{4}\",,,,,,,[6,7,8,10,12]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],AW:[,[,,\"(?:[25-79]\\\\d\\\\d|800)\\\\d{4}\",\n,,,,,,[7]],[,,\"5(?:2\\\\d|8[1-9])\\\\d{4}\",,,,\"5212345\"],[,,\"(?:290|5[69]\\\\d|6(?:[03]0|22|4[0-2]|[69]\\\\d)|7(?:[34]\\\\d|7[07])|9(?:6[45]|9[4-8]))\\\\d{4}\",,,,\"5601234\"],[,,\"800\\\\d{4}\",,,,\"8001234\"],[,,\"900\\\\d{4}\",,,,\"9001234\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,\"(?:28\\\\d|501)\\\\d{4}\",,,,\"5011234\"],\"AW\",297,\"00\",,,,,,,,[[,\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[25-9]\"]]],,[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],AX:[,[,,\"2\\\\d{4,9}|35\\\\d{4,5}|(?:60\\\\d\\\\d|800)\\\\d{4,6}|7\\\\d{5,11}|(?:[14]\\\\d|3[0-46-9]|50)\\\\d{4,8}\",\n,,,,,,[5,6,7,8,9,10,11,12]],[,,\"18[1-8]\\\\d{3,6}\",,,,\"181234567\",,,[6,7,8,9]],[,,\"4946\\\\d{2,6}|(?:4[0-8]|50)\\\\d{4,8}\",,,,\"412345678\",,,[6,7,8,9,10]],[,,\"800\\\\d{4,6}\",,,,\"800123456\",,,[7,8,9]],[,,\"[67]00\\\\d{5,6}\",,,,\"600123456\",,,[8,9]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],\"AX\",358,\"00|99(?:[01469]|5(?:[14]1|3[23]|5[59]|77|88|9[09]))\",\"0\",,,\"0\",,\"00\",,,,[,,,,,,,,,[-1]],,\"18\",[,,,,,,,,,[-1]],[,,\"20\\\\d{4,8}|60[12]\\\\d{5,6}|7(?:099\\\\d{4,5}|5[03-9]\\\\d{3,7})|20[2-59]\\\\d\\\\d|(?:606|7(?:0[78]|1|3\\\\d))\\\\d{7}|(?:10|29|3[09]|70[1-5]\\\\d)\\\\d{4,8}\",\n,,,\"10112345\"],,,[,,,,,,,,,[-1]]],AZ:[,[,,\"365\\\\d{6}|(?:[124579]\\\\d|60|88)\\\\d{7}\",,,,,,,[9],[7]],[,,\"(?:2[12]428|3655[02])\\\\d{4}|(?:2(?:22[0-79]|63[0-28])|3654)\\\\d{5}|(?:(?:1[28]|46)\\\\d|2(?:[014-6]2|[23]3))\\\\d{6}\",,,,\"123123456\",,,,[7]],[,,\"36554\\\\d{4}|(?:[16]0|4[04]|5[015]|7[07]|99)\\\\d{7}\",,,,\"401234567\"],[,,\"88\\\\d{7}\",,,,\"881234567\"],[,,\"900200\\\\d{3}\",,,,\"900200123\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],\"AZ\",994,\"00\",\"0\",,,\"0\",,,,[[,\"(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3\",[\"[1-9]\"]],[,\n\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"90\"],\"0$1\"],[,\"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"1[28]|2|365|46\",\"1[28]|2|365[45]|46\",\"1[28]|2|365(?:4|5[02])|46\"],\"(0$1)\"],[,\"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[13-9]\"],\"0$1\"]],[[,\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"90\"],\"0$1\"],[,\"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"1[28]|2|365|46\",\"1[28]|2|365[45]|46\",\"1[28]|2|365(?:4|5[02])|46\"],\"(0$1)\"],[,\"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",\n[\"[13-9]\"],\"0$1\"]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],BA:[,[,,\"6\\\\d{8}|(?:[35689]\\\\d|49|70)\\\\d{6}\",,,,,,,[8,9],[6]],[,,\"(?:3(?:[05-79][2-9]|1[4579]|[23][24-9]|4[2-4689]|8[2457-9])|49[2-579]|5(?:0[2-49]|[13][2-9]|[268][2-4679]|4[4689]|5[2-79]|7[2-69]|9[2-4689]))\\\\d{5}\",,,,\"30212345\",,,[8],[6]],[,,\"6040\\\\d{5}|6(?:03|[1-356]|44|7\\\\d)\\\\d{6}\",,,,\"61123456\"],[,,\"8[08]\\\\d{6}\",,,,\"80123456\",,,[8]],[,,\"9[0246]\\\\d{6}\",,,,\"90123456\",,,[8]],[,,\"8[12]\\\\d{6}\",,,,\"82123456\",,,[8]],\n[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],\"BA\",387,\"00\",\"0\",,,\"0\",,,,[[,\"(\\\\d{3})(\\\\d{3})\",\"$1-$2\",[\"[2-9]\"]],[,\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"6[1-3]|[7-9]\"],\"0$1\"],[,\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2-$3\",[\"[3-5]|6[56]\"],\"0$1\"],[,\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"6\"],\"0$1\"]],[[,\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"6[1-3]|[7-9]\"],\"0$1\"],[,\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2-$3\",[\"[3-5]|6[56]\"],\"0$1\"],[,\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"6\"],\"0$1\"]],[,,,,,,,,,[-1]],\n,,[,,,,,,,,,[-1]],[,,\"703[235]0\\\\d{3}|70(?:2[0-5]|3[0146]|[56]0)\\\\d{4}\",,,,\"70341234\",,,[8]],,,[,,,,,,,,,[-1]]],BB:[,[,,\"(?:246|[58]\\\\d\\\\d|900)\\\\d{7}\",,,,,,,[10],[7]],[,,\"246521[0369]\\\\d{3}|246(?:2(?:2[78]|7[0-4])|4(?:1[024-6]|2\\\\d|3[2-9])|5(?:20|[34]\\\\d|54|7[1-3])|6(?:2\\\\d|38)|7[35]7|9(?:1[89]|63))\\\\d{4}\",,,,\"2464123456\",,,,[7]],[,,\"246(?:(?:2(?:[3568]\\\\d|4[0-57-9])|3(?:5[2-9]|6[0-6])|4(?:46|5\\\\d)|69[5-7]|8(?:[2-5]\\\\d|83))\\\\d|52(?:1[147]|20))\\\\d{3}\",,,,\"2462501234\",,,,[7]],[,,\"8(?:00|33|44|55|66|77|88)[2-9]\\\\d{6}\",\n,,,\"8002123456\"],[,,\"(?:246976|900[2-9]\\\\d\\\\d)\\\\d{4}\",,,,\"9002123456\",,,,[7]],[,,,,,,,,,[-1]],[,,\"52(?:3(?:[2-46-9][02-9]\\\\d|5(?:[02-46-9]\\\\d|5[0-46-9]))|4(?:[2-478][02-9]\\\\d|5(?:[034]\\\\d|2[024-9]|5[0-46-9])|6(?:0[1-9]|[2-9]\\\\d)|9(?:[05-9]\\\\d|2[0-5]|49)))\\\\d{4}|52[34][2-9]1[02-9]\\\\d{4}|5(?:00|2[125-9]|33|44|66|77|88)[2-9]\\\\d{6}\",,,,\"5002345678\"],[,,\"24631\\\\d{5}\",,,,\"2463101234\",,,,[7]],\"BB\",1,\"011\",\"1\",,,\"([2-9]\\\\d{6})$|1\",\"246$1\",,,,,[,,,,,,,,,[-1]],,\"246\",[,,,,,,,,,[-1]],[,,\"246(?:292|367|4(?:1[7-9]|3[01]|4[47-9]|67)|7(?:1[2-9]|2\\\\d|3[016]|53))\\\\d{4}\",\n,,,\"2464301234\",,,,[7]],,,[,,,,,,,,,[-1]]],BD:[,[,,\"[1-469]\\\\d{9}|8[0-79]\\\\d{7,8}|[2-79]\\\\d{8}|[2-9]\\\\d{7}|[3-9]\\\\d{6}|[57-9]\\\\d{5}\",,,,,,,[6,7,8,9,10]],[,,\"(?:4(?:31\\\\d\\\\d|423)|5222)\\\\d{3}(?:\\\\d{2})?|8332[6-9]\\\\d\\\\d|(?:3(?:03[56]|224)|4(?:22[25]|653))\\\\d{3,4}|(?:3(?:42[47]|529|823)|4(?:027|525|65(?:28|8))|562|6257|7(?:1(?:5[3-5]|6[12]|7[156]|89)|22[589]56|32|42675|52(?:[25689](?:56|8)|[347]8)|71(?:6[1267]|75|89)|92374)|82(?:2[59]|32)56|9(?:03[23]56|23(?:256|373)|31|5(?:1|2[4589]56)))\\\\d{3}|(?:3(?:02[348]|22[35]|324|422)|4(?:22[67]|32[236-9]|6(?:2[46]|5[57])|953)|5526|6(?:024|6655)|81)\\\\d{4,5}|(?:2(?:7(?:1[0-267]|2[0-289]|3[0-29]|4[01]|5[1-3]|6[013]|7[0178]|91)|8(?:0[125]|1[1-6]|2[0157-9]|3[1-69]|41|6[1-35]|7[1-5]|8[1-8]|9[0-6])|9(?:0[0-2]|1[0-4]|2[568]|3[3-6]|5[5-7]|6[0136-9]|7[0-7]|8[014-9]))|3(?:0(?:2[025-79]|3[2-4])|181|22[12]|32[2356]|824)|4(?:02[09]|22[348]|32[045]|523|6(?:27|54))|666(?:22|53)|7(?:22[57-9]|42[56]|82[35])8|8(?:0[124-9]|2(?:181|2[02-4679]8)|4[12]|[5-7]2)|9(?:[04]2|2(?:2|328)|81))\\\\d{4}|(?:2(?:[23]\\\\d|[45])\\\\d\\\\d|3(?:1(?:2[5-7]|[5-7])|425|822)|4(?:033|1\\\\d|[257]1|332|4(?:2[246]|5[25])|6(?:2[35]|56|62)|8(?:23|54)|92[2-5])|5(?:02[03489]|22[457]|32[35-79]|42[46]|6(?:[18]|53)|724|826)|6(?:023|2(?:2[2-5]|5[3-5]|8)|32[3478]|42[34]|52[47]|6(?:[18]|6(?:2[34]|5[24]))|[78]2[2-5]|92[2-6])|7(?:02|21\\\\d|[3-589]1|6[12]|72[24])|8(?:217|3[12]|[5-7]1)|9[24]1)\\\\d{5}|(?:(?:3[2-8]|5[2-57-9]|6[03-589])1|4[4689][18])\\\\d{5}|[59]1\\\\d{5}\",\n,,,\"27111234\"],[,,\"(?:1[13-9]\\\\d|644)\\\\d{7}|(?:3[78]|44|66)[02-9]\\\\d{7}\",,,,\"1812345678\",,,[10]],[,,\"80[03]\\\\d{7}\",,,,\"8001234567\",,,[10]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,\"96(?:0[469]|1[0-47]|3[389]|43|6[69]|7[78])\\\\d{6}\",,,,\"9604123456\",,,[10]],\"BD\",880,\"00\",\"0\",,,\"0\",,,,[[,\"(\\\\d{2})(\\\\d{4,6})\",\"$1-$2\",[\"31[5-8]|[459]1\"],\"0$1\"],[,\"(\\\\d{3})(\\\\d{3,7})\",\"$1-$2\",[\"3(?:[67]|8[013-9])|4(?:6[168]|7|[89][18])|5(?:6[128]|9)|6(?:[15]|28|4[14])|7[2-589]|8(?:0[014-9]|[12])|9[358]|(?:3[2-5]|4[235]|5[2-578]|6[0389]|76|8[3-7]|9[24])1|(?:44|66)[01346-9]\"],\n\"0$1\"],[,\"(\\\\d{4})(\\\\d{3,6})\",\"$1-$2\",[\"[13-9]|2[23]\"],\"0$1\"],[,\"(\\\\d)(\\\\d{7,8})\",\"$1-$2\",[\"2\"],\"0$1\"]],,[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],BE:[,[,,\"4\\\\d{8}|[1-9]\\\\d{7}\",,,,,,,[8,9]],[,,\"80[2-8]\\\\d{5}|(?:1[0-69]|[23][2-8]|4[23]|5\\\\d|6[013-57-9]|71|8[1-79]|9[2-4])\\\\d{6}\",,,,\"12345678\",,,[8]],[,,\"4[5-9]\\\\d{7}\",,,,\"470123456\",,,[9]],[,,\"800[1-9]\\\\d{4}\",,,,\"80012345\",,,[8]],[,,\"(?:70(?:2[0-57]|3[04-7]|44|6[4-69]|7[0579])|90\\\\d\\\\d)\\\\d{4}\",,,,\"90012345\",,,[8]],[,,\"7879\\\\d{4}\",\n,,,\"78791234\",,,[8]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],\"BE\",32,\"00\",\"0\",,,\"0\",,,,[[,\"(\\\\d{3})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3\",[\"(?:80|9)0\"],\"0$1\"],[,\"(\\\\d)(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[239]|4[23]\"],\"0$1\"],[,\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[15-8]\"],\"0$1\"],[,\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"4\"],\"0$1\"]],,[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,\"78(?:0[57]|1[014-8]|2[25]|3[15-8]|48|[56]0|7[06-8]|9\\\\d)\\\\d{4}\",,,,\"78102345\",,,[8]],,,[,,,,,,,,,[-1]]],BF:[,[,,\"[025-7]\\\\d{7}\",\n,,,,,,[8]],[,,\"2(?:0(?:49|5[23]|6[5-7]|9[016-9])|4(?:4[569]|5[4-6]|6[5-7]|7[0179])|5(?:[34]\\\\d|50|6[5-7]))\\\\d{4}\",,,,\"20491234\"],[,,\"(?:0[1-7]|5[0-8]|[67]\\\\d)\\\\d{6}\",,,,\"70123456\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],\"BF\",226,\"00\",,,,,,,,[[,\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[025-7]\"]]],,[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],BG:[,[,,\"00800\\\\d{7}|[2-7]\\\\d{6,7}|[89]\\\\d{6,8}|2\\\\d{5}\",,,,,,,[6,7,8,9,12],[4,5]],\n[,,\"2\\\\d{5,7}|(?:43[1-6]|70[1-9])\\\\d{4,5}|(?:[36]\\\\d|4[124-7]|[57][1-9]|8[1-6]|9[1-7])\\\\d{5,6}\",,,,\"2123456\",,,[6,7,8],[4,5]],[,,\"(?:43[07-9]|99[69]\\\\d)\\\\d{5}|(?:8[7-9]|98)\\\\d{7}\",,,,\"43012345\",,,[8,9]],[,,\"(?:00800\\\\d\\\\d|800)\\\\d{5}\",,,,\"80012345\",,,[8,12]],[,,\"90\\\\d{6}\",,,,\"90123456\",,,[8]],[,,\"700\\\\d{5}\",,,,\"70012345\",,,[8]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],\"BG\",359,\"00\",\"0\",,,\"0\",,,,[[,\"(\\\\d{6})\",\"$1\",[\"1\"]],[,\"(\\\\d)(\\\\d)(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"2\"],\"0$1\"],[,\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",\n[\"43[1-6]|70[1-9]\"],\"0$1\"],[,\"(\\\\d)(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"2\"],\"0$1\"],[,\"(\\\\d{2})(\\\\d{3})(\\\\d{2,3})\",\"$1 $2 $3\",[\"[356]|4[124-7]|7[1-9]|8[1-6]|9[1-7]\"],\"0$1\"],[,\"(\\\\d{3})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3\",[\"(?:70|8)0\"],\"0$1\"],[,\"(\\\\d{3})(\\\\d{3})(\\\\d{2})\",\"$1 $2 $3\",[\"43[1-7]|7\"],\"0$1\"],[,\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[48]|9[08]\"],\"0$1\"],[,\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"9\"],\"0$1\"]],[[,\"(\\\\d)(\\\\d)(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"2\"],\"0$1\"],[,\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"43[1-6]|70[1-9]\"],\n\"0$1\"],[,\"(\\\\d)(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"2\"],\"0$1\"],[,\"(\\\\d{2})(\\\\d{3})(\\\\d{2,3})\",\"$1 $2 $3\",[\"[356]|4[124-7]|7[1-9]|8[1-6]|9[1-7]\"],\"0$1\"],[,\"(\\\\d{3})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3\",[\"(?:70|8)0\"],\"0$1\"],[,\"(\\\\d{3})(\\\\d{3})(\\\\d{2})\",\"$1 $2 $3\",[\"43[1-7]|7\"],\"0$1\"],[,\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[48]|9[08]\"],\"0$1\"],[,\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"9\"],\"0$1\"]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],BH:[,[,,\"[136-9]\\\\d{7}\",,,,,,,[8]],[,,\"(?:1(?:3[1356]|6[0156]|7\\\\d)\\\\d|6(?:1[16]\\\\d|500|6(?:0\\\\d|3[12]|44|55|7[7-9]|88)|9[69][69])|7(?:[07]\\\\d\\\\d|1(?:11|78)))\\\\d{4}\",\n,,,\"17001234\"],[,,\"(?:3(?:[0-79]\\\\d|8[0-57-9])\\\\d|6(?:3(?:00|33|6[16])|441|6(?:3[03-9]|[69]\\\\d|7[0-689])))\\\\d{4}\",,,,\"36001234\"],[,,\"8[02369]\\\\d{6}\",,,,\"80123456\"],[,,\"(?:87|9[0-8])\\\\d{6}\",,,,\"90123456\"],[,,\"84\\\\d{6}\",,,,\"84123456\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],\"BH\",973,\"00\",,,,,,,,[[,\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[13679]|8[02-4679]\"]]],,[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],BI:[,[,,\"(?:[267]\\\\d|31)\\\\d{6}\",,,,,,,[8]],[,,\"(?:22|31)\\\\d{6}\",,,,\"22201234\"],[,,\"(?:29|[67][125-9])\\\\d{6}\",\n,,,\"79561234\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],\"BI\",257,\"00\",,,,,,,,[[,\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[2367]\"]]],,[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],BJ:[,[,,\"(?:01\\\\d|[24-689])\\\\d{7}\",,,,,,,[8,10]],[,,\"2090\\\\d{4}|(?:012\\\\d\\\\d|2(?:02|1[037]|2[45]|3[68]|4\\\\d))\\\\d{5}\",,,,\"0120211234\"],[,,\"(?:01(?:2[5-9]|[4-69]\\\\d)|4[0-8]|[56]\\\\d|9[013-9])\\\\d{6}\",,,,\"0195123456\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,\n,,,,,[-1]],[,,,,,,,,,[-1]],[,,\"857[58]\\\\d{4}\",,,,\"85751234\",,,[8]],\"BJ\",229,\"00\",,,,,,,,[[,\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[24-689]\"]],[,\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4 $5\",[\"0\"]]],,[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,\"81\\\\d{6}\",,,,\"81123456\",,,[8]],,,[,,,,,,,,,[-1]]],BL:[,[,,\"(?:590\\\\d|7090)\\\\d{5}|(?:69|80|9\\\\d)\\\\d{7}\",,,,,,,[9]],[,,\"590(?:2[7-9]|3[3-7]|5[12]|87)\\\\d{4}\",,,,\"590271234\"],[,,\"(?:69(?:0\\\\d\\\\d|1(?:2[2-9]|3[0-5])|4(?:0[89]|1[2-6]|9\\\\d)|6(?:1[016-9]|5[0-4]|[67]\\\\d))|7090[0-4])\\\\d{4}\",\n,,,\"690001234\"],[,,\"80[0-5]\\\\d{6}\",,,,\"800012345\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,\"9(?:(?:39[5-7]|76[018])\\\\d|475[0-5])\\\\d{4}\",,,,\"976012345\"],\"BL\",590,\"00\",\"0\",,,\"0\",,,,,,[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],BM:[,[,,\"(?:441|[58]\\\\d\\\\d|900)\\\\d{7}\",,,,,,,[10],[7]],[,,\"441(?:[46]\\\\d\\\\d|5(?:4\\\\d|60|89))\\\\d{4}\",,,,\"4414123456\",,,,[7]],[,,\"441(?:[2378]\\\\d|5[0-39]|9[02])\\\\d{5}\",,,,\"4413701234\",,,,[7]],[,,\"8(?:00|33|44|55|66|77|88)[2-9]\\\\d{6}\",,,,\"8002123456\"],\n[,,\"900[2-9]\\\\d{6}\",,,,\"9002123456\"],[,,,,,,,,,[-1]],[,,\"52(?:3(?:[2-46-9][02-9]\\\\d|5(?:[02-46-9]\\\\d|5[0-46-9]))|4(?:[2-478][02-9]\\\\d|5(?:[034]\\\\d|2[024-9]|5[0-46-9])|6(?:0[1-9]|[2-9]\\\\d)|9(?:[05-9]\\\\d|2[0-5]|49)))\\\\d{4}|52[34][2-9]1[02-9]\\\\d{4}|5(?:00|2[125-9]|33|44|66|77|88)[2-9]\\\\d{6}\",,,,\"5002345678\"],[,,,,,,,,,[-1]],\"BM\",1,\"011\",\"1\",,,\"([2-9]\\\\d{6})$|1\",\"441$1\",,,,,[,,,,,,,,,[-1]],,\"441\",[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],BN:[,[,,\"[2-578]\\\\d{6}\",,,,,,,[7]],[,,\"22[0-7]\\\\d{4}|(?:2[013-9]|[34]\\\\d|5[0-25-9])\\\\d{5}\",\n,,,\"2345678\"],[,,\"(?:22[89]|[78]\\\\d\\\\d)\\\\d{4}\",,,,\"7123456\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,\"5[34]\\\\d{5}\",,,,\"5345678\"],\"BN\",673,\"00\",,,,,,,,[[,\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[2-578]\"]]],,[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],BO:[,[,,\"8001\\\\d{5}|(?:[2-467]\\\\d|50)\\\\d{6}\",,,,,,,[8,9],[7]],[,,\"(?:2(?:2\\\\d\\\\d|5(?:11|[258]\\\\d|9[67])|6(?:12|2\\\\d|9[34])|8(?:2[34]|39|62))|3(?:3\\\\d\\\\d|4(?:6\\\\d|8[24])|8(?:25|42|5[257]|86|9[25])|9(?:[27]\\\\d|3[2-4]|4[248]|5[24]|6[2-6]))|4(?:4\\\\d\\\\d|6(?:11|[24689]\\\\d|72)))\\\\d{4}\",\n,,,\"22123456\",,,[8],[7]],[,,\"[67]\\\\d{7}\",,,,\"71234567\",,,[8]],[,,\"8001[07]\\\\d{4}\",,,,\"800171234\",,,[9]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,\"50\\\\d{6}\",,,,\"50123456\",,,[8],[7]],\"BO\",591,\"00(?:1\\\\d)?\",\"0\",,,\"0(1\\\\d)?\",,,,[[,\"(\\\\d)(\\\\d{7})\",\"$1 $2\",[\"[235]|4[46]\"],,\"0$CC $1\"],[,\"(\\\\d{8})\",\"$1\",[\"[67]\"],,\"0$CC $1\"],[,\"(\\\\d{3})(\\\\d{2})(\\\\d{4})\",\"$1 $2 $3\",[\"8\"],,\"0$CC $1\"]],,[,,,,,,,,,[-1]],,,[,,\"8001[07]\\\\d{4}\",,,,,,,[9]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],BQ:[,[,,\"(?:[34]1|7\\\\d)\\\\d{5}\",\n,,,,,,[7]],[,,\"(?:318[023]|41(?:6[023]|70)|7(?:1[578]|2[05]|50)\\\\d)\\\\d{3}\",,,,\"7151234\"],[,,\"(?:31(?:8[14-8]|9[14578])|416[14-9]|7(?:0[01]|7[07]|8\\\\d|9[056])\\\\d)\\\\d{3}\",,,,\"3181234\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],\"BQ\",599,\"00\",,,,,,,,,,[,,,,,,,,,[-1]],,\"[347]\",[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],BR:[,[,,\"(?:[1-46-9]\\\\d\\\\d|5(?:[0-46-9]\\\\d|5[0-46-9]))\\\\d{8}|[1-9]\\\\d{9}|[3589]\\\\d{8}|[34]\\\\d{7}\",,,,,,,[8,9,10,11]],[,,\"(?:[14689][1-9]|2[12478]|3[1-578]|5[13-5]|7[13-579])[2-5]\\\\d{7}\",\n,,,\"1123456789\",,,[10],[8]],[,,\"(?:[14689][1-9]|2[12478]|3[1-578]|5[13-5]|7[13-579])(?:7|9\\\\d)\\\\d{7}\",,,,\"11961234567\",,,[10,11],[8,9]],[,,\"800\\\\d{6,7}\",,,,\"800123456\",,,[9,10]],[,,\"300\\\\d{6}|[59]00\\\\d{6,7}\",,,,\"300123456\",,,[9,10]],[,,\"(?:30[03]\\\\d{3}|4(?:0(?:0\\\\d|20)|370))\\\\d{4}|300\\\\d{5}\",,,,\"40041234\",,,[8,10]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],\"BR\",55,\"00(?:1[245]|2[1-35]|31|4[13]|[56]5|99)\",\"0\",,,\"(?:0|90)(?:(1[245]|2[1-35]|31|4[13]|[56]5|99)(\\\\d{10,11}))?\",\"$2\",,,[[,\"(\\\\d{3,6})\",\"$1\",[\"1(?:1[25-8]|2[357-9]|3[02-68]|4[12568]|5|6[0-8]|8[015]|9[0-47-9])|321|610\"]],\n[,\"(\\\\d{4})(\\\\d{4})\",\"$1-$2\",[\"300|4(?:0[02]|37)\",\"4(?:02|37)0|[34]00\"]],[,\"(\\\\d{4})(\\\\d{4})\",\"$1-$2\",[\"[2-57]\",\"[2357]|4(?:[0-24-9]|3(?:[0-689]|7[1-9]))\"]],[,\"(\\\\d{3})(\\\\d{2,3})(\\\\d{4})\",\"$1 $2 $3\",[\"(?:[358]|90)0\"],\"0$1\"],[,\"(\\\\d{5})(\\\\d{4})\",\"$1-$2\",[\"9\"]],[,\"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$1 $2-$3\",[\"(?:[14689][1-9]|2[12478]|3[1-578]|5[13-5]|7[13-579])[2-57]\"],\"($1)\",\"0 $CC ($1)\"],[,\"(\\\\d{2})(\\\\d{5})(\\\\d{4})\",\"$1 $2-$3\",[\"[16][1-9]|[2-57-9]\"],\"($1)\",\"0 $CC ($1)\"]],[[,\"(\\\\d{4})(\\\\d{4})\",\"$1-$2\",[\"300|4(?:0[02]|37)\",\n\"4(?:02|37)0|[34]00\"]],[,\"(\\\\d{3})(\\\\d{2,3})(\\\\d{4})\",\"$1 $2 $3\",[\"(?:[358]|90)0\"],\"0$1\"],[,\"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$1 $2-$3\",[\"(?:[14689][1-9]|2[12478]|3[1-578]|5[13-5]|7[13-579])[2-57]\"],\"($1)\",\"0 $CC ($1)\"],[,\"(\\\\d{2})(\\\\d{5})(\\\\d{4})\",\"$1 $2-$3\",[\"[16][1-9]|[2-57-9]\"],\"($1)\",\"0 $CC ($1)\"]],[,,,,,,,,,[-1]],,,[,,\"30(?:0\\\\d{5,7}|3\\\\d{7})|40(?:0\\\\d|20)\\\\d{4}|800\\\\d{6,7}\",,,,,,,[8,9,10]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],BS:[,[,,\"(?:242|[58]\\\\d\\\\d|900)\\\\d{7}\",,,,,,,[10],[7]],[,,\"242(?:3(?:02|[236][1-9]|4[0-24-9]|5[0-68]|7[347]|8[0-4]|9[2-467])|461|502|6(?:0[1-5]|12|2[013]|[45]0|7[67]|8[78]|9[89])|7(?:02|88))\\\\d{4}\",\n,,,\"2423456789\",,,,[7]],[,,\"242(?:3(?:5[79]|7[56]|95)|4(?:[23][1-9]|4[1-35-9]|5[1-8]|6[2-8]|7\\\\d|81)|5(?:2[45]|3[35]|44|5[1-46-9]|65|77)|6[34]6|7(?:27|38)|8(?:0[1-9]|1[02-9]|2\\\\d|3[0-4]|[89]9))\\\\d{4}\",,,,\"2423591234\",,,,[7]],[,,\"242300\\\\d{4}|8(?:00|33|44|55|66|77|88)[2-9]\\\\d{6}\",,,,\"8002123456\",,,,[7]],[,,\"900[2-9]\\\\d{6}\",,,,\"9002123456\"],[,,,,,,,,,[-1]],[,,\"52(?:3(?:[2-46-9][02-9]\\\\d|5(?:[02-46-9]\\\\d|5[0-46-9]))|4(?:[2-478][02-9]\\\\d|5(?:[034]\\\\d|2[024-9]|5[0-46-9])|6(?:0[1-9]|[2-9]\\\\d)|9(?:[05-9]\\\\d|2[0-5]|49)))\\\\d{4}|52[34][2-9]1[02-9]\\\\d{4}|5(?:00|2[125-9]|33|44|66|77|88)[2-9]\\\\d{6}\",\n,,,\"5002345678\"],[,,,,,,,,,[-1]],\"BS\",1,\"011\",\"1\",,,\"([3-8]\\\\d{6})$|1\",\"242$1\",,,,,[,,,,,,,,,[-1]],,\"242\",[,,,,,,,,,[-1]],[,,\"242225\\\\d{4}\",,,,\"2422250123\"],,,[,,,,,,,,,[-1]]],BT:[,[,,\"[17]\\\\d{7}|[2-8]\\\\d{6}\",,,,,,,[7,8],[6]],[,,\"(?:2[3-6]|[34][5-7]|5[236]|6[2-46]|7[246]|8[2-4])\\\\d{5}\",,,,\"2345678\",,,[7],[6]],[,,\"(?:1[67]|77)\\\\d{6}\",,,,\"17123456\",,,[8]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],\"BT\",975,\"00\",,,,,,,,[[,\"(\\\\d{3})(\\\\d{3})\",\"$1 $2\",[\"[2-7]\"]],[,\"(\\\\d)(\\\\d{3})(\\\\d{3})\",\n\"$1 $2 $3\",[\"[2-68]|7[246]\"]],[,\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"1[67]|7\"]]],[[,\"(\\\\d)(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[2-68]|7[246]\"]],[,\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"1[67]|7\"]]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],BW:[,[,,\"(?:0800|(?:[37]|800)\\\\d)\\\\d{6}|(?:[2-6]\\\\d|90)\\\\d{5}\",,,,,,,[7,8,10]],[,,\"(?:2(?:4[0-48]|6[0-24]|9[0578])|3(?:1[0-35-9]|55|[69]\\\\d|7[013]|81)|4(?:6[03]|7[1267]|9[0-5])|5(?:3[03489]|4[0489]|7[1-47]|88|9[0-49])|6(?:2[1-35]|5[149]|8[013467]))\\\\d{4}\",\n,,,\"2401234\",,,[7]],[,,\"(?:321|7[1-8]\\\\d)\\\\d{5}\",,,,\"71123456\",,,[8]],[,,\"(?:0800|800\\\\d)\\\\d{6}\",,,,\"0800012345\",,,[10]],[,,\"90\\\\d{5}\",,,,\"9012345\",,,[7]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,\"79(?:1(?:[0-2]\\\\d|3[0-3])|2[0-7]\\\\d)\\\\d{3}\",,,,\"79101234\",,,[8]],\"BW\",267,\"00\",,,,,,,,[[,\"(\\\\d{2})(\\\\d{5})\",\"$1 $2\",[\"90\"]],[,\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[24-6]|3[15-9]\"]],[,\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[37]\"]],[,\"(\\\\d{4})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"0\"]],[,\"(\\\\d{3})(\\\\d{4})(\\\\d{3})\",\"$1 $2 $3\",\n[\"8\"]]],,[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],BY:[,[,,\"(?:[12]\\\\d|33|44|902)\\\\d{7}|8(?:0[0-79]\\\\d{5,7}|[1-7]\\\\d{9})|8(?:1[0-489]|[5-79]\\\\d)\\\\d{7}|8[1-79]\\\\d{6,7}|8[0-79]\\\\d{5}|8\\\\d{5}\",,,,,,,[6,7,8,9,10,11],[5]],[,,\"(?:1(?:5(?:1[1-5]|[24]\\\\d|6[2-4]|9[1-7])|6(?:[235]\\\\d|4[1-7])|7\\\\d\\\\d)|2(?:1(?:[246]\\\\d|3[0-35-9]|5[1-9])|2(?:[235]\\\\d|4[0-8])|3(?:[26]\\\\d|3[02-79]|4[024-7]|5[03-7])))\\\\d{5}\",,,,\"152450911\",,,[9],[5,6,7]],[,,\"(?:2(?:5[5-79]|9[1-9])|(?:33|44)\\\\d)\\\\d{6}\",\n,,,\"294911911\",,,[9]],[,,\"800\\\\d{3,7}|8(?:0[13]|20\\\\d)\\\\d{7}\",,,,\"8011234567\"],[,,\"(?:810|902)\\\\d{7}\",,,,\"9021234567\",,,[10]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,\"249\\\\d{6}\",,,,\"249123456\",,,[9]],\"BY\",375,\"810\",\"8\",,,\"0|80?\",,\"8~10\",,[[,\"(\\\\d{3})(\\\\d{3})\",\"$1 $2\",[\"800\"],\"8 $1\"],[,\"(\\\\d{3})(\\\\d{2})(\\\\d{2,4})\",\"$1 $2 $3\",[\"800\"],\"8 $1\"],[,\"(\\\\d{4})(\\\\d{2})(\\\\d{3})\",\"$1 $2-$3\",[\"1(?:5[169]|6[3-5]|7[179])|2(?:1[35]|2[34]|3[3-5])\",\"1(?:5[169]|6(?:3[1-3]|4|5[125])|7(?:1[3-9]|7[0-24-6]|9[2-7]))|2(?:1[35]|2[34]|3[3-5])\"],\n\"8 0$1\"],[,\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2-$3-$4\",[\"1(?:[56]|7[467])|2[1-3]\"],\"8 0$1\"],[,\"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2-$3-$4\",[\"[1-4]\"],\"8 0$1\"],[,\"(\\\\d{3})(\\\\d{3,4})(\\\\d{4})\",\"$1 $2 $3\",[\"[89]\"],\"8 $1\"]],,[,,,,,,,,,[-1]],,,[,,\"800\\\\d{3,7}|(?:8(?:0[13]|10|20\\\\d)|902)\\\\d{7}\"],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],BZ:[,[,,\"(?:0800\\\\d|[2-8])\\\\d{6}\",,,,,,,[7,11]],[,,\"(?:2(?:[02]\\\\d|36|[68]0)|[3-58](?:[02]\\\\d|[68]0)|7(?:[02]\\\\d|32|[68]0))\\\\d{4}\",,,,\"2221234\",,,[7]],[,,\"6[0-35-7]\\\\d{5}\",\n,,,\"6221234\",,,[7]],[,,\"0800\\\\d{7}\",,,,\"08001234123\",,,[11]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],\"BZ\",501,\"00\",,,,,,,,[[,\"(\\\\d{3})(\\\\d{4})\",\"$1-$2\",[\"[2-8]\"]],[,\"(\\\\d)(\\\\d{3})(\\\\d{4})(\\\\d{3})\",\"$1-$2-$3-$4\",[\"0\"]]],,[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],CA:[,[,,\"[2-9]\\\\d{9}|3\\\\d{6}\",,,,,,,[7,10]],[,,\"(?:2(?:04|[23]6|[48]9|50|63)|3(?:06|43|54|6[578]|82)|4(?:03|1[68]|[26]8|3[178]|50|74)|5(?:06|1[49]|48|79|8[147])|6(?:04|[18]3|39|47|72)|7(?:0[59]|42|53|78|8[02])|8(?:[06]7|19|25|7[39])|9(?:0[25]|42))[2-9]\\\\d{6}\",\n,,,\"5062345678\",,,[10],[7]],[,,\"(?:2(?:04|[23]6|[48]9|50|63)|3(?:06|43|54|6[578]|82)|4(?:03|1[68]|[26]8|3[178]|50|74)|5(?:06|1[49]|48|79|8[147])|6(?:04|[18]3|39|47|72)|7(?:0[59]|42|53|78|8[02])|8(?:[06]7|19|25|7[39])|9(?:0[25]|42))[2-9]\\\\d{6}\",,,,\"5062345678\",,,[10],[7]],[,,\"8(?:00|33|44|55|66|77|88)[2-9]\\\\d{6}\",,,,\"8002123456\",,,[10]],[,,\"900[2-9]\\\\d{6}\",,,,\"9002123456\",,,[10]],[,,,,,,,,,[-1]],[,,\"52(?:3(?:[2-46-9][02-9]\\\\d|5(?:[02-46-9]\\\\d|5[0-46-9]))|4(?:[2-478][02-9]\\\\d|5(?:[034]\\\\d|2[024-9]|5[0-46-9])|6(?:0[1-9]|[2-9]\\\\d)|9(?:[05-9]\\\\d|2[0-5]|49)))\\\\d{4}|52[34][2-9]1[02-9]\\\\d{4}|(?:5(?:00|2[125-9]|33|44|66|77|88)|6(?:22|33))[2-9]\\\\d{6}\",\n,,,\"5002345678\",,,[10]],[,,\"600[2-9]\\\\d{6}\",,,,\"6002012345\",,,[10]],\"CA\",1,\"011\",\"1\",,,\"1\",,,1,,,[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,\"310\\\\d{4}\",,,,\"3101234\",,,[7]],,,[,,,,,,,,,[-1]]],CC:[,[,,\"1(?:[0-79]\\\\d{8}(?:\\\\d{2})?|8[0-24-9]\\\\d{7})|[148]\\\\d{8}|1\\\\d{5,7}\",,,,,,,[6,7,8,9,10,12]],[,,\"8(?:51(?:0(?:02|31|60|89)|1(?:18|76)|223)|91(?:0(?:1[0-2]|29)|1(?:[28]2|50|79)|2(?:10|64)|3(?:[06]8|22)|4[29]8|62\\\\d|70[23]|959))\\\\d{3}\",,,,\"891621234\",,,[9],[8]],[,,\"4(?:79[01]|83[0-389]|94[0-4])\\\\d{5}|4(?:[0-36]\\\\d|4[047-9]|5[0-25-9]|7[02-8]|8[0-24-9]|9[0-37-9])\\\\d{6}\",\n,,,\"412345678\",,,[9]],[,,\"180(?:0\\\\d{3}|2)\\\\d{3}\",,,,\"1800123456\",,,[7,10]],[,,\"190[0-26]\\\\d{6}\",,,,\"1900123456\",,,[10]],[,,\"13(?:00\\\\d{6}(?:\\\\d{2})?|45[0-4]\\\\d{3})|13\\\\d{4}\",,,,\"1300123456\",,,[6,8,10,12]],[,,,,,,,,,[-1]],[,,\"14(?:5(?:1[0458]|[23][458])|71\\\\d)\\\\d{4}\",,,,\"147101234\",,,[9]],\"CC\",61,\"001[14-689]|14(?:1[14]|34|4[17]|[56]6|7[47]|88)0011\",\"0\",,,\"([59]\\\\d{7})$|0\",\"8$1\",\"0011\",,,,[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],CD:[,[,,\"(?:(?:[189]|5\\\\d)\\\\d|2)\\\\d{7}|[1-68]\\\\d{6}\",\n,,,,,,[7,8,9,10]],[,,\"(?:(?:12|573)\\\\d\\\\d|276)\\\\d{5}|[1-6]\\\\d{6}\",,,,\"1234567\"],[,,\"88\\\\d{5}|(?:8[0-69]|9[017-9])\\\\d{7}\",,,,\"991234567\",,,[7,9]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],\"CD\",243,\"00\",\"0\",,,\"0\",,,,[[,\"(\\\\d{2})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3\",[\"88\"],\"0$1\"],[,\"(\\\\d{2})(\\\\d{5})\",\"$1 $2\",[\"[1-6]\"],\"0$1\"],[,\"(\\\\d{2})(\\\\d{2})(\\\\d{4})\",\"$1 $2 $3\",[\"2\"],\"0$1\"],[,\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"1\"],\"0$1\"],[,\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[89]\"],\n\"0$1\"],[,\"(\\\\d{2})(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"5\"],\"0$1\"]],,[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],CF:[,[,,\"(?:[27]\\\\d{3}|8776)\\\\d{4}\",,,,,,,[8]],[,,\"2[12]\\\\d{6}\",,,,\"21612345\"],[,,\"7[024-7]\\\\d{6}\",,,,\"70012345\"],[,,,,,,,,,[-1]],[,,\"8776\\\\d{4}\",,,,\"87761234\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],\"CF\",236,\"00\",,,,,,,,[[,\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[278]\"]]],,[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],\nCG:[,[,,\"222\\\\d{6}|(?:0\\\\d|80)\\\\d{7}\",,,,,,,[9]],[,,\"222[1-589]\\\\d{5}\",,,,\"222123456\"],[,,\"026(?:1[0-5]|6[6-9])\\\\d{4}|0(?:[14-6]\\\\d\\\\d|2(?:40|5[5-8]|6[07-9]))\\\\d{5}\",,,,\"061234567\"],[,,,,,,,,,[-1]],[,,\"80[0-2]\\\\d{6}\",,,,\"800123456\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],\"CG\",242,\"00\",,,,,,,,[[,\"(\\\\d)(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"8\"]],[,\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[02]\"]]],,[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],CH:[,[,,\"8\\\\d{11}|[2-9]\\\\d{8}\",,,\n,,,,[9,12]],[,,\"(?:2[12467]|3[1-4]|4[134]|5[256]|6[12]|[7-9]1)\\\\d{7}\",,,,\"212345678\",,,[9]],[,,\"(?:6[89]|7[235-9])\\\\d{7}\",,,,\"781234567\",,,[9]],[,,\"800\\\\d{6}\",,,,\"800123456\",,,[9]],[,,\"90[016]\\\\d{6}\",,,,\"900123456\",,,[9]],[,,\"84[0248]\\\\d{6}\",,,,\"840123456\",,,[9]],[,,\"878\\\\d{6}\",,,,\"878123456\",,,[9]],[,,,,,,,,,[-1]],\"CH\",41,\"00\",\"0\",,,\"0\",,,,[[,\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"8[047]|90\"],\"0$1\"],[,\"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[2-79]|81\"],\"0$1\"],[,\"(\\\\d{3})(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\n\"$1 $2 $3 $4 $5\",[\"8\"],\"0$1\"]],,[,,\"74[0248]\\\\d{6}\",,,,\"740123456\",,,[9]],,,[,,,,,,,,,[-1]],[,,\"5[18]\\\\d{7}\",,,,\"581234567\",,,[9]],,,[,,\"860\\\\d{9}\",,,,\"860123456789\",,,[12]]],CI:[,[,,\"[02]\\\\d{9}\",,,,,,,[10]],[,,\"2(?:[15]\\\\d{3}|7(?:2(?:0[23]|1[2357]|2[245]|3[45]|4[3-5])|3(?:06|1[69]|[2-6]7)))\\\\d{5}\",,,,\"2123456789\"],[,,\"0[157]\\\\d{8}\",,,,\"0123456789\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],\"CI\",225,\"00\",,,,,,,,[[,\"(\\\\d{2})(\\\\d{2})(\\\\d)(\\\\d{5})\",\"$1 $2 $3 $4\",\n[\"2\"]],[,\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{4})\",\"$1 $2 $3 $4\",[\"0\"]]],,[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],CK:[,[,,\"[2-578]\\\\d{4}\",,,,,,,[5]],[,,\"(?:2\\\\d|3[13-7]|4[1-5])\\\\d{3}\",,,,\"21234\"],[,,\"[578]\\\\d{4}\",,,,\"71234\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],\"CK\",682,\"00\",,,,,,,,[[,\"(\\\\d{2})(\\\\d{3})\",\"$1 $2\",[\"[2-578]\"]]],,[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],CL:[,[,,\"12300\\\\d{6}|6\\\\d{9,10}|[2-9]\\\\d{8}\",\n,,,,,,[9,10,11]],[,,\"2(?:1982[0-6]|3314[05-9])\\\\d{3}|(?:2(?:1(?:160|962)|3(?:2\\\\d\\\\d|3(?:[03467]\\\\d|1[0-35-9]|2[1-9]|5[0-24-9]|8[0-3])|600)|646[59])|80[1-9]\\\\d\\\\d|9(?:3(?:[0-57-9]\\\\d\\\\d|6(?:0[02-9]|[1-9]\\\\d))|6(?:[0-8]\\\\d\\\\d|9(?:[02-79]\\\\d|1[05-9]))|7[1-9]\\\\d\\\\d|9(?:[03-9]\\\\d\\\\d|1(?:[0235-9]\\\\d|4[0-24-9])|2(?:[0-79]\\\\d|8[0-46-9]))))\\\\d{4}|(?:22|3[2-5]|[47][1-35]|5[1-3578]|6[13-57]|8[1-9]|9[2458])\\\\d{7}\",,,,\"221234567\",,,[9]],[,,\"2(?:1982[0-6]|3314[05-9])\\\\d{3}|(?:2(?:1(?:160|962)|3(?:2\\\\d\\\\d|3(?:[03467]\\\\d|1[0-35-9]|2[1-9]|5[0-24-9]|8[0-3])|600)|646[59])|80[1-9]\\\\d\\\\d|9(?:3(?:[0-57-9]\\\\d\\\\d|6(?:0[02-9]|[1-9]\\\\d))|6(?:[0-8]\\\\d\\\\d|9(?:[02-79]\\\\d|1[05-9]))|7[1-9]\\\\d\\\\d|9(?:[03-9]\\\\d\\\\d|1(?:[0235-9]\\\\d|4[0-24-9])|2(?:[0-79]\\\\d|8[0-46-9]))))\\\\d{4}|(?:22|3[2-5]|[47][1-35]|5[1-3578]|6[13-57]|8[1-9]|9[2458])\\\\d{7}\",\n,,,\"221234567\",,,[9]],[,,\"(?:123|8)00\\\\d{6}\",,,,\"800123456\",,,[9,11]],[,,,,,,,,,[-1]],[,,\"600\\\\d{7,8}\",,,,\"6001234567\",,,[10,11]],[,,,,,,,,,[-1]],[,,\"44\\\\d{7}\",,,,\"441234567\",,,[9]],\"CL\",56,\"(?:0|1(?:1[0-69]|2[02-5]|5[13-58]|69|7[0167]|8[018]))0\",,,,,,,1,[[,\"(\\\\d{4})\",\"$1\",[\"1(?:[03-589]|21)|[29]0|78\"]],[,\"(\\\\d{5})(\\\\d{4})\",\"$1 $2\",[\"219\",\"2196\"],\"($1)\"],[,\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"44\"]],[,\"(\\\\d)(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"2[1-36]\"],\"($1)\"],[,\"(\\\\d)(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"9[2-9]\"]],\n[,\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"3[2-5]|[47]|5[1-3578]|6[13-57]|8(?:0[1-9]|[1-9])\"],\"($1)\"],[,\"(\\\\d{3})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"60|8\"]],[,\"(\\\\d{4})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"1\"]],[,\"(\\\\d{3})(\\\\d{3})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"60\"]]],[[,\"(\\\\d{5})(\\\\d{4})\",\"$1 $2\",[\"219\",\"2196\"],\"($1)\"],[,\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"44\"]],[,\"(\\\\d)(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"2[1-36]\"],\"($1)\"],[,\"(\\\\d)(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"9[2-9]\"]],[,\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",\n[\"3[2-5]|[47]|5[1-3578]|6[13-57]|8(?:0[1-9]|[1-9])\"],\"($1)\"],[,\"(\\\\d{3})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"60|8\"]],[,\"(\\\\d{4})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"1\"]],[,\"(\\\\d{3})(\\\\d{3})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"60\"]]],[,,,,,,,,,[-1]],,,[,,\"600\\\\d{7,8}\",,,,,,,[10,11]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],CM:[,[,,\"[26]\\\\d{8}|88\\\\d{6,7}\",,,,,,,[8,9]],[,,\"2(?:22|33)\\\\d{6}\",,,,\"222123456\",,,[9]],[,,\"(?:24[23]|6(?:[25-9]\\\\d|40))\\\\d{6}\",,,,\"671234567\",,,[9]],[,,\"88\\\\d{6,7}\",,,,\"88012345\"],[,,,,,,,,,[-1]],\n[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],\"CM\",237,\"00\",,,,,,,,[[,\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"88\"]],[,\"(\\\\d)(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4 $5\",[\"[26]|88\"]]],,[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],CN:[,[,,\"(?:(?:1[03-689]|2\\\\d)\\\\d\\\\d|6)\\\\d{8}|1\\\\d{10}|[126]\\\\d{6}(?:\\\\d(?:\\\\d{2})?)?|86\\\\d{5,6}|(?:[3-579]\\\\d|8[0-57-9])\\\\d{5,9}\",,,,,,,[7,8,9,10,11,12],[5,6]],[,,\"(?:10(?:[02-79]\\\\d\\\\d|[18](?:0[1-9]|[1-9]\\\\d))|2(?:[02-57-9]\\\\d{3}|1(?:[18](?:0[1-9]|[1-9]\\\\d)|[2-79]\\\\d\\\\d))|(?:41[03]|8078|9(?:78|94))\\\\d\\\\d)\\\\d{5}|(?:10|2[0-57-9])(?:1(?:00|23)\\\\d\\\\d|95\\\\d{3,4})|(?:41[03]|9(?:78|94))(?:100\\\\d\\\\d|95\\\\d{3,4})|8078123|(?:43[35]|754|851)\\\\d{7,8}|(?:43[35]|754|851)(?:1(?:00\\\\d|23)\\\\d|95\\\\d{3,4})|(?:3(?:11|7[179])|4(?:[15]1|3[12])|5(?:1\\\\d|2[37]|3[12]|51|7[13-79]|9[15])|7(?:[39]1|5[57]|6[09])|8(?:71|98))(?:[02-8]\\\\d{7}|1(?:0(?:0\\\\d\\\\d(?:\\\\d{3})?|[1-9]\\\\d{5})|[13-9]\\\\d{6}|2(?:[0-24-9]\\\\d{5}|3\\\\d(?:\\\\d{4})?))|9(?:[0-46-9]\\\\d{6}|5\\\\d{3}(?:\\\\d(?:\\\\d{2})?)?))|(?:3(?:1[02-9]|35|49|5\\\\d|7[02-68]|9[1-68])|4(?:1[24-9]|2[179]|3[46-9]|5[2-9]|6[47-9]|7\\\\d|8[23])|5(?:3[03-9]|4[36]|5[02-9]|6[1-46]|7[028]|80|9[2-46-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[17]\\\\d|2[248]|3[04-9]|4[3-6]|5[0-3689]|6[2368]|9[02-9])|8(?:1[236-8]|2[5-7]|3\\\\d|5[2-9]|7[02-9]|8[36-8]|9[1-7])|9(?:0[1-3689]|1[1-79]|3\\\\d|4[13]|5[1-5]|7[0-79]|9[0-35-9]))(?:[02-8]\\\\d{6}|1(?:0(?:0\\\\d\\\\d(?:\\\\d{2})?|[1-9]\\\\d{4})|[13-9]\\\\d{5}|2(?:[0-24-9]\\\\d{4}|3\\\\d(?:\\\\d{3})?))|9(?:[0-46-9]\\\\d{5}|5\\\\d{3,5}))\",\n,,,\"1012345678\",,,[7,8,9,10,11],[5,6]],[,,\"1740[0-5]\\\\d{6}|1(?:[38]\\\\d|4[57]|[59][0-35-9]|6[25-7]|7[0-35-8])\\\\d{8}\",,,,\"13123456789\",,,[11]],[,,\"(?:(?:10|21)8|8)00\\\\d{7}\",,,,\"8001234567\",,,[10,12]],[,,\"16[08]\\\\d{5}\",,,,\"16812345\",,,[8]],[,,\"10(?:10\\\\d{4}|96\\\\d{3,4})|400\\\\d{7}|950\\\\d{7,8}|(?:2[0-57-9]|3(?:[157]\\\\d|35|49|9[1-68])|4(?:[17]\\\\d|2[179]|[35][1-9]|6[47-9]|8[23])|5(?:[1357]\\\\d|2[37]|4[36]|6[1-46]|80|9[1-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]\\\\d|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:1[236-8]|2[5-7]|[37]\\\\d|5[14-9]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|[379]\\\\d|4[13]|5[1-5]))96\\\\d{3,4}\",\n,,,\"4001234567\",,,[7,8,9,10,11],[5,6]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],\"CN\",86,\"00|1(?:[12]\\\\d|79)\\\\d\\\\d00\",\"0\",,,\"(1(?:[12]\\\\d|79)\\\\d\\\\d)|0\",,\"00\",,[[,\"(\\\\d{5,6})\",\"$1\",[\"1(?:00|2[13])|9[56]\",\"1(?:00|2(?:1|39))|9[56]\",\"1(?:00|2(?:1|395))|9[56]\"]],[,\"(\\\\d{5,6})\",\"$1\",[\"1(?:0|23)|781|[1-9]12\",\"1(?:0|23)|7812|[1-9]123\",\"1(?:0|23(?:[0-8]|9[0-46-9]))|78123|[1-9]123\"]],[,\"(\\\\d{2})(\\\\d{5,6})\",\"$1 $2\",[\"(?:10|2[0-57-9])[19]|3(?:[157]|35|49|9[1-68])|4(?:1[124-9]|2[179]|6[47-9]|7|8[23])|5(?:[1357]|2[37]|4[36]|6[1-46]|80)|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:07|1[236-8]|2[5-7]|[37]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|3|4[13]|5[1-5]|7[0-79]|9[0-35-9])|(?:4[35]|59|85)[1-9]\",\n\"(?:10|2[0-57-9])(?:1[02]|9[56])|8078|(?:3(?:[157]\\\\d|35|49|9[1-68])|4(?:1[124-9]|2[179]|[35][1-9]|6[47-9]|7\\\\d|8[23])|5(?:[1357]\\\\d|2[37]|4[36]|6[1-46]|80|9[1-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]\\\\d|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:1[236-8]|2[5-7]|[37]\\\\d|5[1-9]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|3\\\\d|4[13]|5[1-5]|7[0-79]|9[0-35-9]))1\",\"10(?:1(?:0|23)|9[56])|2[0-57-9](?:1(?:00|23)|9[56])|80781|(?:3(?:[157]\\\\d|35|49|9[1-68])|4(?:1[124-9]|2[179]|[35][1-9]|6[47-9]|7\\\\d|8[23])|5(?:[1357]\\\\d|2[37]|4[36]|6[1-46]|80|9[1-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]\\\\d|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:1[236-8]|2[5-7]|[37]\\\\d|5[1-9]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|3\\\\d|4[13]|5[1-5]|7[0-79]|9[0-35-9]))12\",\n\"10(?:1(?:0|23)|9[56])|2[0-57-9](?:1(?:00|23)|9[56])|807812|(?:3(?:[157]\\\\d|35|49|9[1-68])|4(?:1[124-9]|2[179]|[35][1-9]|6[47-9]|7\\\\d|8[23])|5(?:[1357]\\\\d|2[37]|4[36]|6[1-46]|80|9[1-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]\\\\d|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:1[236-8]|2[5-7]|[37]\\\\d|5[1-9]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|3\\\\d|4[13]|5[1-5]|7[0-79]|9[0-35-9]))123\",\"10(?:1(?:0|23)|9[56])|2[0-57-9](?:1(?:00|23)|9[56])|(?:3(?:[157]\\\\d|35|49|9[1-68])|4(?:1[124-9]|2[179]|[35][1-9]|6[47-9]|7\\\\d|8[23])|5(?:[1357]\\\\d|2[37]|4[36]|6[1-46]|80|9[1-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]\\\\d|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:078|1[236-8]|2[5-7]|[37]\\\\d|5[1-9]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|3\\\\d|4[13]|5[1-5]|7[0-79]|9[0-35-9]))123\"],\n\"0$1\",\"$CC $1\"],[,\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[1-9]\",\"1[1-9]|26|[3-9]|(?:10|2[0-57-9])(?:[0-8]|9[0-47-9])\",\"1(?:0(?:[02-8]|1(?:[013-9]|2[0-24-9])|9[0-47-9])|[1-9])|2(?:[0-57-9](?:[02-8]|1(?:0[1-9]|[13-9]|2[0-24-9])|9[0-47-9])|6)|[3-9]\",\"1(?:0(?:[02-8]|1(?:[013-9]|2[0-24-9])|9[0-47-9])|[1-9])|2(?:[0-57-9](?:[02-8]|1(?:0[1-9]|[13-9]|2[0-24-9])|9[0-47-9])|6)|3(?:[0268]|3[0-46-9]|4[0-8]|9[079])|4(?:[049]|1[03]|2[02-68]|[35]0|6[0-356]|8[014-9])|5(?:0|2[0-24-689]|4[0-2457-9]|6[057-9]|8[1-9]|90)|6(?:[0-24578]|3[06-9]|6[14-79]|9[03-9])|7(?:0[02-9]|2[0135-79]|3[23]|4[0-27-9]|6[1457]|8)|8(?:[046]|1[01459]|2[0-489]|50|8[0-2459]|9[09])|9(?:0[0457]|1[08]|[268]|4[024-9]|5[06-9]|78|94)|(?:3(?:[157]\\\\d|35|49|9[1-68])|4(?:1[124-9]|2[179]|[35][1-9]|6[47-9]|7\\\\d|8[23])|5(?:[1357]\\\\d|2[37]|4[36]|6[1-46]|80|9[1-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]\\\\d|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:1[236-8]|2[5-7]|[37]\\\\d|5[1-9]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|3\\\\d|4[13]|5[1-5]|7[0-79]|9[0-35-9]))(?:[02-9]|1(?:[013-9]|2[0-24-9]))\",\n\"1(?:0(?:[02-8]|1(?:[013-9]|2[0-24-9])|9[0-47-9])|[1-9])|2(?:[0-57-9](?:[02-8]|1(?:0[1-9]|[13-9]|2[0-24-9])|9[0-47-9])|6)|3(?:[0268]|3[0-46-9]|4[0-8]|9[079])|4(?:[049]|1[03]|2[02-68]|[35]0|6[0-356]|8[014-9])|5(?:0|2[0-24-689]|4[0-2457-9]|6[057-9]|8[1-9]|90)|6(?:[0-24578]|3[06-9]|6[14-79]|9[03-9])|7(?:0[02-9]|2[0135-79]|3[23]|4[0-27-9]|6[1457]|8)|8(?:0(?:[0-689]|7[0-79])|1[01459]|2[0-489]|[46]|50|8[0-2459]|9[09])|9(?:0[0457]|1[08]|[268]|4[024-9]|5[06-9]|78|94)|(?:3(?:[157]\\\\d|35|49|9[1-68])|4(?:1[124-9]|2[179]|[35][1-9]|6[47-9]|7\\\\d|8[23])|5(?:[1357]\\\\d|2[37]|4[36]|6[1-46]|80|9[1-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]\\\\d|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:078|1[236-8]|2[5-7]|[37]\\\\d|5[1-9]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|3\\\\d|4[13]|5[1-5]|7[0-79]|9[0-35-9]))(?:[02-9]|1(?:[013-9]|2[0-24-9]))\"]],\n[,\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"16[08]\"]],[,\"(\\\\d{3})(\\\\d{5,6})\",\"$1 $2\",[\"3(?:[157]|35|49|9[1-68])|4(?:[17]|2[179]|6[47-9]|8[23])|5(?:[1357]|2[37]|4[36]|6[1-46]|80)|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:1[236-8]|2[5-7]|[37]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|[379]|4[13]|5[1-5])|(?:4[35]|59|85)[1-9]\",\"(?:3(?:[157]\\\\d|35|49|9[1-68])|4(?:[17]\\\\d|2[179]|[35][1-9]|6[47-9]|8[23])|5(?:[1357]\\\\d|2[37]|4[36]|6[1-46]|80|9[1-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]\\\\d|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:1[236-8]|2[5-7]|[37]\\\\d|5[1-9]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|[379]\\\\d|4[13]|5[1-5]))[19]\",\n\"85[23](?:10|95)|(?:3(?:[157]\\\\d|35|49|9[1-68])|4(?:[17]\\\\d|2[179]|[35][1-9]|6[47-9]|8[23])|5(?:[1357]\\\\d|2[37]|4[36]|6[1-46]|80|9[1-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]\\\\d|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:1[236-8]|2[5-7]|[37]\\\\d|5[14-9]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|[379]\\\\d|4[13]|5[1-5]))(?:10|9[56])\",\"85[23](?:100|95)|(?:3(?:[157]\\\\d|35|49|9[1-68])|4(?:[17]\\\\d|2[179]|[35][1-9]|6[47-9]|8[23])|5(?:[1357]\\\\d|2[37]|4[36]|6[1-46]|80|9[1-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]\\\\d|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:1[236-8]|2[5-7]|[37]\\\\d|5[14-9]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|[379]\\\\d|4[13]|5[1-5]))(?:100|9[56])\"],\n\"0$1\",\"$CC $1\"],[,\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[1-9]\",\"1(?:0(?:[02-8]|1[1-9]|9[0-47-9])|[1-9])|2(?:[0-57-9](?:[0-8]|9[0-47-9])|6)|[3-9]\",\"1(?:0(?:[02-8]|1[1-9]|9[0-47-9])|[1-9])|26|3(?:[0268]|4[0-8]|9[079])|4(?:[049]|2[02-68]|[35]0|6[0-356]|8[014-9])|5(?:0|2[0-24-689]|4[0-2457-9]|6[057-9]|8[1-9]|90)|6(?:[0-24578]|3[06-9]|6[14-79]|9[03-9])|7(?:0[02-9]|2[0135-79]|3[23]|4[0-27-9]|6[1457]|8)|8(?:[046]|1[01459]|2[0-489]|5(?:0|[23][0-8])|8[0-2459]|9[09])|9(?:0[0457]|1[08]|[268]|4[024-9]|5[06-9])|(?:33|85[23]9)[0-46-9]|(?:2[0-57-9]|3(?:[157]\\\\d|35|49|9[1-68])|4(?:[17]\\\\d|2[179]|[35][1-9]|6[47-9]|8[23])|5(?:[1357]\\\\d|2[37]|4[36]|6[1-46]|80|9[1-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]\\\\d|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:1[236-8]|2[5-7]|[37]\\\\d|5[14-9]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|[379]\\\\d|4[13]|5[1-5]))(?:[0-8]|9[0-47-9])\",\n\"1(?:0[02-8]|[1-9])|2(?:[0-57-9][0-8]|6)|3(?:[0268]|3[0-46-9]|4[0-8]|9[079])|4(?:[049]|2[02-68]|[35]0|6[0-356]|8[014-9])|5(?:0|2[0-24-689]|4[0-2457-9]|6[057-9]|90)|6(?:[0-24578]|3[06-9]|6[14-79]|9[03-9])|7(?:0[02-9]|2[0135-79]|3[23]|4[0-27-9]|6[1457]|8)|8(?:[046]|1[01459]|2[0-489]|5(?:0|[23](?:[02-8]|1[1-9]|9[0-46-9]))|8[0-2459]|9[09])|9(?:0[0457]|1[08]|[268]|4[024-9]|5[06-9])|(?:10|2[0-57-9])9[0-47-9]|(?:101|58|85[23]10)[1-9]|(?:3(?:[157]\\\\d|35|49|9[1-68])|4(?:[17]\\\\d|2[179]|[35][1-9]|6[47-9]|8[23])|5(?:[1357]\\\\d|2[37]|4[36]|6[1-46]|80|9[1-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]\\\\d|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:1[236-8]|2[5-7]|[37]\\\\d|5[14-9]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|[379]\\\\d|4[13]|5[1-5]))(?:[02-8]|1(?:0[1-9]|[1-9])|9[0-47-9])\"]],\n[,\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"(?:4|80)0\"]],[,\"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"10|2(?:[02-57-9]|1[1-9])\",\"10|2(?:[02-57-9]|1[1-9])\",\"10[0-79]|2(?:[02-57-9]|1[1-79])|(?:10|21)8(?:0[1-9]|[1-9])\"],\"0$1\",\"$CC $1\",1],[,\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"3(?:[3-59]|7[02-68])|4(?:[26-8]|3[3-9]|5[2-9])|5(?:3[03-9]|[468]|7[028]|9[2-46-9])|6|7(?:[0-247]|3[04-9]|5[0-4689]|6[2368])|8(?:[1-358]|9[1-7])|9(?:[013479]|5[1-5])|(?:[34]1|55|79|87)[02-9]\"],\"0$1\",\"$CC $1\",1],[,\"(\\\\d{3})(\\\\d{7,8})\",\n\"$1 $2\",[\"9\"]],[,\"(\\\\d{4})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"80\"],\"0$1\",\"$CC $1\",1],[,\"(\\\\d{3})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"[3-578]\"],\"0$1\",\"$CC $1\",1],[,\"(\\\\d{3})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"1[3-9]\"],,\"$CC $1\"],[,\"(\\\\d{2})(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3 $4\",[\"[12]\"],\"0$1\",,1]],[[,\"(\\\\d{2})(\\\\d{5,6})\",\"$1 $2\",[\"(?:10|2[0-57-9])[19]|3(?:[157]|35|49|9[1-68])|4(?:1[124-9]|2[179]|6[47-9]|7|8[23])|5(?:[1357]|2[37]|4[36]|6[1-46]|80)|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:07|1[236-8]|2[5-7]|[37]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|3|4[13]|5[1-5]|7[0-79]|9[0-35-9])|(?:4[35]|59|85)[1-9]\",\n\"(?:10|2[0-57-9])(?:1[02]|9[56])|8078|(?:3(?:[157]\\\\d|35|49|9[1-68])|4(?:1[124-9]|2[179]|[35][1-9]|6[47-9]|7\\\\d|8[23])|5(?:[1357]\\\\d|2[37]|4[36]|6[1-46]|80|9[1-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]\\\\d|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:1[236-8]|2[5-7]|[37]\\\\d|5[1-9]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|3\\\\d|4[13]|5[1-5]|7[0-79]|9[0-35-9]))1\",\"10(?:1(?:0|23)|9[56])|2[0-57-9](?:1(?:00|23)|9[56])|80781|(?:3(?:[157]\\\\d|35|49|9[1-68])|4(?:1[124-9]|2[179]|[35][1-9]|6[47-9]|7\\\\d|8[23])|5(?:[1357]\\\\d|2[37]|4[36]|6[1-46]|80|9[1-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]\\\\d|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:1[236-8]|2[5-7]|[37]\\\\d|5[1-9]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|3\\\\d|4[13]|5[1-5]|7[0-79]|9[0-35-9]))12\",\n\"10(?:1(?:0|23)|9[56])|2[0-57-9](?:1(?:00|23)|9[56])|807812|(?:3(?:[157]\\\\d|35|49|9[1-68])|4(?:1[124-9]|2[179]|[35][1-9]|6[47-9]|7\\\\d|8[23])|5(?:[1357]\\\\d|2[37]|4[36]|6[1-46]|80|9[1-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]\\\\d|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:1[236-8]|2[5-7]|[37]\\\\d|5[1-9]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|3\\\\d|4[13]|5[1-5]|7[0-79]|9[0-35-9]))123\",\"10(?:1(?:0|23)|9[56])|2[0-57-9](?:1(?:00|23)|9[56])|(?:3(?:[157]\\\\d|35|49|9[1-68])|4(?:1[124-9]|2[179]|[35][1-9]|6[47-9]|7\\\\d|8[23])|5(?:[1357]\\\\d|2[37]|4[36]|6[1-46]|80|9[1-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]\\\\d|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:078|1[236-8]|2[5-7]|[37]\\\\d|5[1-9]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|3\\\\d|4[13]|5[1-5]|7[0-79]|9[0-35-9]))123\"],\n\"0$1\",\"$CC $1\"],[,\"(\\\\d{3})(\\\\d{5,6})\",\"$1 $2\",[\"3(?:[157]|35|49|9[1-68])|4(?:[17]|2[179]|6[47-9]|8[23])|5(?:[1357]|2[37]|4[36]|6[1-46]|80)|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:1[236-8]|2[5-7]|[37]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|[379]|4[13]|5[1-5])|(?:4[35]|59|85)[1-9]\",\"(?:3(?:[157]\\\\d|35|49|9[1-68])|4(?:[17]\\\\d|2[179]|[35][1-9]|6[47-9]|8[23])|5(?:[1357]\\\\d|2[37]|4[36]|6[1-46]|80|9[1-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]\\\\d|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:1[236-8]|2[5-7]|[37]\\\\d|5[1-9]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|[379]\\\\d|4[13]|5[1-5]))[19]\",\n\"85[23](?:10|95)|(?:3(?:[157]\\\\d|35|49|9[1-68])|4(?:[17]\\\\d|2[179]|[35][1-9]|6[47-9]|8[23])|5(?:[1357]\\\\d|2[37]|4[36]|6[1-46]|80|9[1-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]\\\\d|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:1[236-8]|2[5-7]|[37]\\\\d|5[14-9]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|[379]\\\\d|4[13]|5[1-5]))(?:10|9[56])\",\"85[23](?:100|95)|(?:3(?:[157]\\\\d|35|49|9[1-68])|4(?:[17]\\\\d|2[179]|[35][1-9]|6[47-9]|8[23])|5(?:[1357]\\\\d|2[37]|4[36]|6[1-46]|80|9[1-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]\\\\d|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:1[236-8]|2[5-7]|[37]\\\\d|5[14-9]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|[379]\\\\d|4[13]|5[1-5]))(?:100|9[56])\"],\n\"0$1\",\"$CC $1\"],[,\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"(?:4|80)0\"]],[,\"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"10|2(?:[02-57-9]|1[1-9])\",\"10|2(?:[02-57-9]|1[1-9])\",\"10[0-79]|2(?:[02-57-9]|1[1-79])|(?:10|21)8(?:0[1-9]|[1-9])\"],\"0$1\",\"$CC $1\",1],[,\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"3(?:[3-59]|7[02-68])|4(?:[26-8]|3[3-9]|5[2-9])|5(?:3[03-9]|[468]|7[028]|9[2-46-9])|6|7(?:[0-247]|3[04-9]|5[0-4689]|6[2368])|8(?:[1-358]|9[1-7])|9(?:[013479]|5[1-5])|(?:[34]1|55|79|87)[02-9]\"],\"0$1\",\"$CC $1\",1],[,\"(\\\\d{3})(\\\\d{7,8})\",\n\"$1 $2\",[\"9\"]],[,\"(\\\\d{4})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"80\"],\"0$1\",\"$CC $1\",1],[,\"(\\\\d{3})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"[3-578]\"],\"0$1\",\"$CC $1\",1],[,\"(\\\\d{3})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"1[3-9]\"],,\"$CC $1\"],[,\"(\\\\d{2})(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3 $4\",[\"[12]\"],\"0$1\",,1]],[,,,,,,,,,[-1]],,,[,,\"(?:(?:10|21)8|[48])00\\\\d{7}|950\\\\d{7,8}\",,,,,,,[10,11,12]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],CO:[,[,,\"(?:46|60\\\\d\\\\d)\\\\d{6}|(?:1\\\\d|[39])\\\\d{9}\",,,,,,,[8,10,11],[4,7]],[,,\"601055(?:[0-4]\\\\d|50)\\\\d\\\\d|6010(?:[0-4]\\\\d|5[0-4])\\\\d{4}|(?:46|60(?:[124-7][2-9]|8[1-9]))\\\\d{6}\",\n,,,\"6012345678\",,,[8,10],[4,7]],[,,\"333301[0-5]\\\\d{3}|3333(?:00|2[5-9]|[3-9]\\\\d)\\\\d{4}|(?:3(?:24[1-9]|3(?:00|3[0-24-9]))|9101)\\\\d{6}|3(?:0[0-5]|1\\\\d|2[0-3]|5[01]|70)\\\\d{7}\",,,,\"3211234567\",,,[10]],[,,\"1800\\\\d{7}\",,,,\"18001234567\",,,[11]],[,,\"(?:19(?:0[01]|4[78])|901)\\\\d{7}\",,,,\"19001234567\",,,[10,11]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],\"CO\",57,\"00(?:4(?:[14]4|56)|[579])\",\"0\",,,\"0([3579]|4(?:[14]4|56))?\",,,,[[,\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"46\"]],[,\"(\\\\d{3})(\\\\d{7})\",\"$1 $2\",[\"6|90\"],\"($1)\",\n\"0$CC $1\"],[,\"(\\\\d{3})(\\\\d{7})\",\"$1 $2\",[\"3[0-357]|91\"],,\"0$CC $1\"],[,\"(\\\\d)(\\\\d{3})(\\\\d{7})\",\"$1-$2-$3\",[\"1\"],\"0$1\"]],[[,\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"46\"]],[,\"(\\\\d{3})(\\\\d{7})\",\"$1 $2\",[\"6|90\"],\"($1)\",\"0$CC $1\"],[,\"(\\\\d{3})(\\\\d{7})\",\"$1 $2\",[\"3[0-357]|91\"],,\"0$CC $1\"],[,\"(\\\\d)(\\\\d{3})(\\\\d{7})\",\"$1 $2 $3\",[\"1\"]]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],CR:[,[,,\"(?:8\\\\d|90)\\\\d{8}|(?:[24-8]\\\\d{3}|3005)\\\\d{4}\",,,,,,,[8,10]],[,,\"210[7-9]\\\\d{4}|2(?:[024-7]\\\\d|1[1-9])\\\\d{5}\",\n,,,\"22123456\",,,[8]],[,,\"(?:3005\\\\d|6500[01])\\\\d{3}|(?:5[07]|6[0-4]|7[0-3]|8[3-9])\\\\d{6}\",,,,\"83123456\",,,[8]],[,,\"800\\\\d{7}\",,,,\"8001234567\",,,[10]],[,,\"90[059]\\\\d{7}\",,,,\"9001234567\",,,[10]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,\"(?:210[0-6]|4\\\\d{3}|5100)\\\\d{4}\",,,,\"40001234\",,,[8]],\"CR\",506,\"00\",,,,\"(19(?:0[0-2468]|1[09]|20|66|77|99))\",,,,[[,\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[2-7]|8[3-9]\"],,\"$CC $1\"],[,\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1-$2-$3\",[\"[89]\"],,\"$CC $1\"]],,[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,,,,\n,,,,[-1]],,,[,,,,,,,,,[-1]]],CU:[,[,,\"(?:[2-7]|8\\\\d\\\\d)\\\\d{7}|[2-47]\\\\d{6}|[34]\\\\d{5}\",,,,,,,[6,7,8,10],[4,5]],[,,\"(?:3[23]|4[89])\\\\d{4,6}|(?:31|4[36]|8(?:0[25]|78)\\\\d)\\\\d{6}|(?:2[1-4]|4[1257]|7\\\\d)\\\\d{5,6}\",,,,\"71234567\",,,,[4,5]],[,,\"(?:5\\\\d|6[2-4])\\\\d{6}\",,,,\"51234567\",,,[8]],[,,\"800\\\\d{7}\",,,,\"8001234567\",,,[10]],[,,,,,,,,,[-1]],[,,\"807\\\\d{7}\",,,,\"8071234567\",,,[10]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],\"CU\",53,\"119\",\"0\",,,\"0\",,,,[[,\"(\\\\d{2})(\\\\d{4,6})\",\"$1 $2\",[\"2[1-4]|[34]\"],\"(0$1)\"],[,\"(\\\\d)(\\\\d{6,7})\",\n\"$1 $2\",[\"7\"],\"(0$1)\"],[,\"(\\\\d)(\\\\d{7})\",\"$1 $2\",[\"[56]\"],\"0$1\"],[,\"(\\\\d{3})(\\\\d{7})\",\"$1 $2\",[\"8\"],\"0$1\"]],,[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],CV:[,[,,\"(?:[2-59]\\\\d\\\\d|800)\\\\d{4}\",,,,,,,[7]],[,,\"2(?:2[1-7]|3[0-8]|4[12]|5[1256]|6\\\\d|7[1-3]|8[1-5])\\\\d{4}\",,,,\"2211234\"],[,,\"(?:36|5[1-389]|9\\\\d)\\\\d{5}\",,,,\"9911234\"],[,,\"800\\\\d{4}\",,,,\"8001234\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,\"(?:3[3-5]|4[356])\\\\d{5}\",,,,\"3401234\"],\"CV\",238,\"0\",,,,,,,,[[,\"(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\n\"$1 $2 $3\",[\"[2-589]\"]]],,[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],CW:[,[,,\"(?:[34]1|60|(?:7|9\\\\d)\\\\d)\\\\d{5}\",,,,,,,[7,8]],[,,\"9(?:4(?:3[0-5]|4[14]|6\\\\d)|50\\\\d|7(?:2[014]|3[02-9]|4[4-9]|6[357]|77|8[7-9])|8(?:3[39]|[46]\\\\d|7[01]|8[57-9]))\\\\d{4}\",,,,\"94351234\"],[,,\"953[01]\\\\d{4}|9(?:5[12467]|6[5-9])\\\\d{5}\",,,,\"95181234\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,\"60[0-2]\\\\d{4}\",,,,\"6001234\",,,[7]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],\"CW\",599,\"00\",,,,,,,,[[,\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",\n[\"[3467]\"]],[,\"(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"9[4-8]\"]]],,[,,\"955\\\\d{5}\",,,,\"95581234\",,,[8]],1,\"[69]\",[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],CX:[,[,,\"1(?:[0-79]\\\\d{8}(?:\\\\d{2})?|8[0-24-9]\\\\d{7})|[148]\\\\d{8}|1\\\\d{5,7}\",,,,,,,[6,7,8,9,10,12]],[,,\"8(?:51(?:0(?:01|30|59|88)|1(?:17|46|75)|2(?:22|35))|91(?:00[6-9]|1(?:[28]1|49|78)|2(?:09|63)|3(?:12|26|75)|4(?:56|97)|64\\\\d|7(?:0[01]|1[0-2])|958))\\\\d{3}\",,,,\"891641234\",,,[9],[8]],[,,\"4(?:79[01]|83[0-389]|94[0-4])\\\\d{5}|4(?:[0-36]\\\\d|4[047-9]|5[0-25-9]|7[02-8]|8[0-24-9]|9[0-37-9])\\\\d{6}\",\n,,,\"412345678\",,,[9]],[,,\"180(?:0\\\\d{3}|2)\\\\d{3}\",,,,\"1800123456\",,,[7,10]],[,,\"190[0-26]\\\\d{6}\",,,,\"1900123456\",,,[10]],[,,\"13(?:00\\\\d{6}(?:\\\\d{2})?|45[0-4]\\\\d{3})|13\\\\d{4}\",,,,\"1300123456\",,,[6,8,10,12]],[,,,,,,,,,[-1]],[,,\"14(?:5(?:1[0458]|[23][458])|71\\\\d)\\\\d{4}\",,,,\"147101234\",,,[9]],\"CX\",61,\"001[14-689]|14(?:1[14]|34|4[17]|[56]6|7[47]|88)0011\",\"0\",,,\"([59]\\\\d{7})$|0\",\"8$1\",\"0011\",,,,[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],CY:[,[,,\"(?:[279]\\\\d|[58]0)\\\\d{6}\",,,,,,\n,[8]],[,,\"2[2-6]\\\\d{6}\",,,,\"22345678\"],[,,\"9(?:10|[4-79]\\\\d)\\\\d{5}\",,,,\"96123456\"],[,,\"800\\\\d{5}\",,,,\"80001234\"],[,,\"90[09]\\\\d{5}\",,,,\"90012345\"],[,,\"80[1-9]\\\\d{5}\",,,,\"80112345\"],[,,\"700\\\\d{5}\",,,,\"70012345\"],[,,,,,,,,,[-1]],\"CY\",357,\"00\",,,,,,,,[[,\"(\\\\d{2})(\\\\d{6})\",\"$1 $2\",[\"[257-9]\"]]],,[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,\"(?:50|77)\\\\d{6}\",,,,\"77123456\"],,,[,,,,,,,,,[-1]]],CZ:[,[,,\"(?:[2-578]\\\\d|60)\\\\d{7}|9\\\\d{8,11}\",,,,,,,[9,10,11,12]],[,,\"(?:2\\\\d|3[1257-9]|4[16-9]|5[13-9])\\\\d{7}\",,,,\"212345678\",\n,,[9]],[,,\"(?:60[1-8]\\\\d|7(?:0(?:[2-5]\\\\d|60)|19[01]|[2379]\\\\d\\\\d))\\\\d{5}\",,,,\"601123456\",,,[9]],[,,\"800\\\\d{6}\",,,,\"800123456\",,,[9]],[,,\"9(?:0[05689]|76)\\\\d{6}\",,,,\"900123456\",,,[9]],[,,\"8[134]\\\\d{7}\",,,,\"811234567\",,,[9]],[,,\"70[01]\\\\d{6}\",,,,\"700123456\",,,[9]],[,,\"9[17]0\\\\d{6}\",,,,\"910123456\",,,[9]],\"CZ\",420,\"00\",,,,,,,,[[,\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[2-8]|9[015-7]\"]],[,\"(\\\\d{2})(\\\\d{3})(\\\\d{3})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"96\"]],[,\"(\\\\d{2})(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"9\"]],\n[,\"(\\\\d{3})(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"9\"]]],,[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,\"9(?:5\\\\d|7[2-4])\\\\d{6}\",,,,\"972123456\",,,[9]],,,[,,\"9(?:3\\\\d{9}|6\\\\d{7,10})\",,,,\"93123456789\"]],DE:[,[,,\"[2579]\\\\d{5,14}|49(?:[34]0|69|8\\\\d)\\\\d\\\\d?|49(?:37|49|60|7[089]|9\\\\d)\\\\d{1,3}|49(?:2[024-9]|3[2-689]|7[1-7])\\\\d{1,8}|(?:1|[368]\\\\d|4[0-8])\\\\d{3,13}|49(?:[015]\\\\d|2[13]|31|[46][1-8])\\\\d{1,9}\",,,,,,,[4,5,6,7,8,9,10,11,12,13,14,15],[2,3]],[,,\"32\\\\d{9,11}|49[1-6]\\\\d{10}|322\\\\d{6}|49[0-7]\\\\d{3,9}|(?:[34]0|[68]9)\\\\d{3,13}|(?:2(?:0[1-689]|[1-3569]\\\\d|4[0-8]|7[1-7]|8[0-7])|3(?:[3569]\\\\d|4[0-79]|7[1-7]|8[1-8])|4(?:1[02-9]|[2-48]\\\\d|5[0-6]|6[0-8]|7[0-79])|5(?:0[2-8]|[124-6]\\\\d|[38][0-8]|[79][0-7])|6(?:0[02-9]|[1-358]\\\\d|[47][0-8]|6[1-9])|7(?:0[2-8]|1[1-9]|[27][0-7]|3\\\\d|[4-6][0-8]|8[0-5]|9[013-7])|8(?:0[2-9]|1[0-79]|2\\\\d|3[0-46-9]|4[0-6]|5[013-9]|6[1-8]|7[0-8]|8[0-24-6])|9(?:0[6-9]|[1-4]\\\\d|[589][0-7]|6[0-8]|7[0-467]))\\\\d{3,12}\",\n,,,\"30123456\",,,[5,6,7,8,9,10,11,12,13,14,15],[2,3,4]],[,,\"16[023]\\\\d{7,8}|1(?:5310|7[0-57-9]\\\\d)\\\\d{6}|1(?:5[0-25-9]|76)\\\\d{8}\",,,,\"15123456789\",,,[10,11]],[,,\"800\\\\d{7,12}\",,,,\"8001234567890\",,,[10,11,12,13,14,15]],[,,\"(?:137[7-9]|900(?:[135]|9\\\\d))\\\\d{6}\",,,,\"9001234567\",,,[10,11]],[,,\"180\\\\d{5,11}|13(?:7[1-6]\\\\d\\\\d|8)\\\\d{4}\",,,,\"18012345\",,,[7,8,9,10,11,12,13,14]],[,,\"700\\\\d{8}\",,,,\"70012345678\",,,[11]],[,,,,,,,,,[-1]],\"DE\",49,\"00\",\"0\",,,\"0\",,,,[[,\"(\\\\d{2})(\\\\d{3,13})\",\"$1 $2\",[\"3[02]|40|[68]9\"],\n\"0$1\"],[,\"(\\\\d{3})(\\\\d{3,12})\",\"$1 $2\",[\"2(?:0[1-389]|1[124]|2[18]|3[14])|3(?:[35-9][15]|4[015])|906|(?:2[4-9]|4[2-9]|[579][1-9]|[68][1-8])1\",\"2(?:0[1-389]|12[0-8])|3(?:[35-9][15]|4[015])|906|2(?:[13][14]|2[18])|(?:2[4-9]|4[2-9]|[579][1-9]|[68][1-8])1\"],\"0$1\"],[,\"(\\\\d{4})(\\\\d{2,11})\",\"$1 $2\",[\"[24-6]|3(?:[3569][02-46-9]|4[2-4679]|7[2-467]|8[2-46-8])|70[2-8]|8(?:0[2-9]|[1-8])|90[7-9]|[79][1-9]\",\"[24-6]|3(?:3(?:0[1-467]|2[127-9]|3[124578]|7[1257-9]|8[1256]|9[145])|4(?:2[135]|4[13578]|9[1346])|5(?:0[14]|2[1-3589]|6[1-4]|7[13468]|8[13568])|6(?:2[1-489]|3[124-6]|6[13]|7[12579]|8[1-356]|9[135])|7(?:2[1-7]|4[145]|6[1-5]|7[1-4])|8(?:21|3[1468]|6|7[1467]|8[136])|9(?:0[12479]|2[1358]|4[134679]|6[1-9]|7[136]|8[147]|9[1468]))|70[2-8]|8(?:0[2-9]|[1-8])|90[7-9]|[79][1-9]|3[68]4[1347]|3(?:47|60)[1356]|3(?:3[46]|46|5[49])[1246]|3[4579]3[1357]\"],\n\"0$1\"],[,\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"138\"],\"0$1\"],[,\"(\\\\d{5})(\\\\d{2,10})\",\"$1 $2\",[\"3\"],\"0$1\"],[,\"(\\\\d{3})(\\\\d{5,11})\",\"$1 $2\",[\"181\"],\"0$1\"],[,\"(\\\\d{3})(\\\\d)(\\\\d{4,10})\",\"$1 $2 $3\",[\"1(?:3|80)|9\"],\"0$1\"],[,\"(\\\\d{3})(\\\\d{7,8})\",\"$1 $2\",[\"1[67]\"],\"0$1\"],[,\"(\\\\d{3})(\\\\d{7,12})\",\"$1 $2\",[\"8\"],\"0$1\"],[,\"(\\\\d{5})(\\\\d{6})\",\"$1 $2\",[\"185\",\"1850\",\"18500\"],\"0$1\"],[,\"(\\\\d{3})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"7\"],\"0$1\"],[,\"(\\\\d{4})(\\\\d{7})\",\"$1 $2\",[\"18[68]\"],\"0$1\"],[,\"(\\\\d{4})(\\\\d{7})\",\"$1 $2\",[\"15[1279]\"],\"0$1\"],\n[,\"(\\\\d{5})(\\\\d{6})\",\"$1 $2\",[\"15[03568]\",\"15(?:[0568]|31)\"],\"0$1\"],[,\"(\\\\d{3})(\\\\d{8})\",\"$1 $2\",[\"18\"],\"0$1\"],[,\"(\\\\d{3})(\\\\d{2})(\\\\d{7,8})\",\"$1 $2 $3\",[\"1(?:6[023]|7)\"],\"0$1\"],[,\"(\\\\d{4})(\\\\d{2})(\\\\d{7})\",\"$1 $2 $3\",[\"15[279]\"],\"0$1\"],[,\"(\\\\d{3})(\\\\d{2})(\\\\d{8})\",\"$1 $2 $3\",[\"15\"],\"0$1\"]],,[,,\"16(?:4\\\\d{1,10}|[89]\\\\d{1,11})\",,,,\"16412345\",,,[4,5,6,7,8,9,10,11,12,13,14]],,,[,,,,,,,,,[-1]],[,,\"18(?:1\\\\d{5,11}|[2-9]\\\\d{8})\",,,,\"18500123456\",,,[8,9,10,11,12,13,14]],,,[,,\"1(?:6(?:013|255|399)|7(?:(?:[015]1|[69]3)3|[2-4]55|[78]99))\\\\d{7,8}|15(?:(?:[03-68]00|113)\\\\d|2\\\\d55|7\\\\d99|9\\\\d33)\\\\d{7}\",\n,,,\"177991234567\",,,[12,13]]],DJ:[,[,,\"(?:2\\\\d|77)\\\\d{6}\",,,,,,,[8]],[,,\"2(?:1[2-5]|7[45])\\\\d{5}\",,,,\"21360003\"],[,,\"77\\\\d{6}\",,,,\"77831001\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],\"DJ\",253,\"00\",,,,,,,,[[,\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[27]\"]]],,[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],DK:[,[,,\"[2-9]\\\\d{7}\",,,,,,,[8]],[,,\"(?:(?:2\\\\d|9[1-46-9])\\\\d|3(?:[0-37]\\\\d|4[013]|5[0-58]|6[01347-9]|8[0-8]|9[0-79])|4(?:[0-25]\\\\d|[34][02-9]|6[013-579]|7[013579]|8[0-47]|9[0-27])|5(?:[0-36]\\\\d|4[0146-9]|5[03-57-9]|7[0568]|8[0-358]|9[0-69])|6(?:[013578]\\\\d|2[0-68]|4[02-8]|6[01689]|9[015689])|7(?:[0-69]\\\\d|7[03-9]|8[0147])|8(?:[16-9]\\\\d|2[0-58]))\\\\d{5}\",\n,,,\"32123456\"],[,,\"(?:[2-7]\\\\d|8[126-9]|9[1-46-9])\\\\d{6}\",,,,\"34412345\"],[,,\"80\\\\d{6}\",,,,\"80123456\"],[,,\"90\\\\d{6}\",,,,\"90123456\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],\"DK\",45,\"00\",,,,,,,,[[,\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[2-9]\"]]],,[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],DM:[,[,,\"(?:[58]\\\\d\\\\d|767|900)\\\\d{7}\",,,,,,,[10],[7]],[,,\"767(?:2(?:55|66)|4(?:2[01]|4[0-25-9])|50[0-4])\\\\d{4}\",,,,\"7674201234\",,,,[7]],[,,\"767(?:2(?:[2-4689]5|7[5-7])|31[5-7]|61[1-8]|70[1-6])\\\\d{4}\",\n,,,\"7672251234\",,,,[7]],[,,\"8(?:00|33|44|55|66|77|88)[2-9]\\\\d{6}\",,,,\"8002123456\"],[,,\"900[2-9]\\\\d{6}\",,,,\"9002123456\"],[,,,,,,,,,[-1]],[,,\"52(?:3(?:[2-46-9][02-9]\\\\d|5(?:[02-46-9]\\\\d|5[0-46-9]))|4(?:[2-478][02-9]\\\\d|5(?:[034]\\\\d|2[024-9]|5[0-46-9])|6(?:0[1-9]|[2-9]\\\\d)|9(?:[05-9]\\\\d|2[0-5]|49)))\\\\d{4}|52[34][2-9]1[02-9]\\\\d{4}|5(?:00|2[125-9]|33|44|66|77|88)[2-9]\\\\d{6}\",,,,\"5002345678\"],[,,,,,,,,,[-1]],\"DM\",1,\"011\",\"1\",,,\"([2-7]\\\\d{6})$|1\",\"767$1\",,,,,[,,,,,,,,,[-1]],,\"767\",[,,,,,,,,,[-1]],[,,,,,\n,,,,[-1]],,,[,,,,,,,,,[-1]]],DO:[,[,,\"(?:[58]\\\\d\\\\d|900)\\\\d{7}\",,,,,,,[10],[7]],[,,\"8(?:[04]9[2-9]\\\\d\\\\d|29(?:2(?:[0-59]\\\\d|6[04-9]|7[0-27]|8[0237-9])|3(?:[0-35-9]\\\\d|4[7-9])|[45]\\\\d\\\\d|6(?:[0-27-9]\\\\d|[3-5][1-9]|6[0135-8])|7(?:0[013-9]|[1-37]\\\\d|4[1-35689]|5[1-4689]|6[1-57-9]|8[1-79]|9[1-8])|8(?:0[146-9]|1[0-48]|[248]\\\\d|3[1-79]|5[01589]|6[013-68]|7[124-8]|9[0-8])|9(?:[0-24]\\\\d|3[02-46-9]|5[0-79]|60|7[0169]|8[57-9]|9[02-9])))\\\\d{4}\",,,,\"8092345678\",,,,[7]],[,,\"8[024]9[2-9]\\\\d{6}\",,,,\"8092345678\",\n,,,[7]],[,,\"8(?:00(?:14|[2-9]\\\\d)|(?:33|44|55|66|77|88)[2-9]\\\\d)\\\\d{5}\",,,,\"8002123456\"],[,,\"900[2-9]\\\\d{6}\",,,,\"9002123456\"],[,,,,,,,,,[-1]],[,,\"52(?:3(?:[2-46-9][02-9]\\\\d|5(?:[02-46-9]\\\\d|5[0-46-9]))|4(?:[2-478][02-9]\\\\d|5(?:[034]\\\\d|2[024-9]|5[0-46-9])|6(?:0[1-9]|[2-9]\\\\d)|9(?:[05-9]\\\\d|2[0-5]|49)))\\\\d{4}|52[34][2-9]1[02-9]\\\\d{4}|5(?:00|2[125-9]|33|44|66|77|88)[2-9]\\\\d{6}\",,,,\"5002345678\"],[,,,,,,,,,[-1]],\"DO\",1,\"011\",\"1\",,,\"1\",,,,,,[,,,,,,,,,[-1]],,\"8001|8[024]9\",[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],\n,,[,,,,,,,,,[-1]]],DZ:[,[,,\"(?:[1-4]|[5-79]\\\\d|80)\\\\d{7}\",,,,,,,[8,9]],[,,\"9619\\\\d{5}|(?:1\\\\d|2[013-79]|3[0-8]|4[013-689])\\\\d{6}\",,,,\"12345678\"],[,,\"(?:5(?:4[0-29]|5\\\\d|6[0-3])|6(?:[569]\\\\d|7[0-6])|7[7-9]\\\\d)\\\\d{6}\",,,,\"551234567\",,,[9]],[,,\"800\\\\d{6}\",,,,\"800123456\",,,[9]],[,,\"80[3-689]1\\\\d{5}\",,,,\"808123456\",,,[9]],[,,\"80[12]1\\\\d{5}\",,,,\"801123456\",,,[9]],[,,,,,,,,,[-1]],[,,\"98[23]\\\\d{6}\",,,,\"983123456\",,,[9]],\"DZ\",213,\"00\",\"0\",,,\"0\",,,,[[,\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[1-4]\"],\n\"0$1\"],[,\"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"9\"],\"0$1\"],[,\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[5-8]\"],\"0$1\"]],,[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],EC:[,[,,\"1\\\\d{9,10}|(?:[2-7]|9\\\\d)\\\\d{7}\",,,,,,,[8,9,10,11],[7]],[,,\"[2-7][2-7]\\\\d{6}\",,,,\"22123456\",,,[8],[7]],[,,\"964[0-2]\\\\d{5}|9(?:39|[57][89]|6[0-36-9]|[89]\\\\d)\\\\d{6}\",,,,\"991234567\",,,[9]],[,,\"1800\\\\d{7}|1[78]00\\\\d{6}\",,,,\"18001234567\",,,[10,11]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,\n,,,,[-1]],[,,\"[2-7]890\\\\d{4}\",,,,\"28901234\",,,[8]],\"EC\",593,\"00\",\"0\",,,\"0\",,,,[[,\"(\\\\d{3})(\\\\d{4})\",\"$1-$2\",[\"[2-7]\"]],[,\"(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1 $2-$3\",[\"[2-7]\"],\"(0$1)\"],[,\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"9\"],\"0$1\"],[,\"(\\\\d{4})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"1\"]]],[[,\"(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1-$2-$3\",[\"[2-7]\"]],[,\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"9\"],\"0$1\"],[,\"(\\\\d{4})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"1\"]]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],EE:[,\n[,,\"8\\\\d{9}|[4578]\\\\d{7}|(?:[3-8]\\\\d|90)\\\\d{5}\",,,,,,,[7,8,10]],[,,\"(?:3[23589]|4[3-8]|6\\\\d|7[1-9]|88)\\\\d{5}\",,,,\"3212345\",,,[7]],[,,\"(?:5\\\\d{5}|8(?:1(?:0(?:0(?:00|[178]\\\\d)|[3-9]\\\\d\\\\d)|(?:1(?:0[2-6]|1\\\\d)|(?:2[0-59]|[3-79]\\\\d)\\\\d)\\\\d)|2(?:0(?:0(?:00|4\\\\d)|(?:19|[2-7]\\\\d)\\\\d)|(?:(?:[124-69]\\\\d|3[5-9])\\\\d|7(?:[0-79]\\\\d|8[13-9])|8(?:[2-6]\\\\d|7[01]))\\\\d)|[349]\\\\d{4}))\\\\d\\\\d|5(?:(?:[02]\\\\d|5[0-478])\\\\d|1(?:[0-8]\\\\d|95)|6(?:4[0-4]|5[1-589]))\\\\d{3}\",,,,\"51234567\",,,[7,8]],[,,\"800(?:(?:0\\\\d\\\\d|1)\\\\d|[2-9])\\\\d{3}\",\n,,,\"80012345\"],[,,\"(?:40\\\\d\\\\d|900)\\\\d{4}\",,,,\"9001234\",,,[7,8]],[,,,,,,,,,[-1]],[,,\"70[0-2]\\\\d{5}\",,,,\"70012345\",,,[8]],[,,,,,,,,,[-1]],\"EE\",372,\"00\",,,,,,,,[[,\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[369]|4[3-8]|5(?:[0-2]|5[0-478]|6[45])|7[1-9]|88\",\"[369]|4[3-8]|5(?:[02]|1(?:[0-8]|95)|5[0-478]|6(?:4[0-4]|5[1-589]))|7[1-9]|88\"]],[,\"(\\\\d{4})(\\\\d{3,4})\",\"$1 $2\",[\"[45]|8(?:00|[1-49])\",\"[45]|8(?:00[1-9]|[1-49])\"]],[,\"(\\\\d{2})(\\\\d{2})(\\\\d{4})\",\"$1 $2 $3\",[\"7\"]],[,\"(\\\\d{4})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"8\"]]],,[,\n,,,,,,,,[-1]],,,[,,\"800[2-9]\\\\d{3}\",,,,,,,[7]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],EG:[,[,,\"[189]\\\\d{8,9}|[24-6]\\\\d{8}|[135]\\\\d{7}\",,,,,,,[8,9,10],[6,7]],[,,\"13[23]\\\\d{6}|(?:15|57)\\\\d{6,7}|(?:2\\\\d|3|4[05-8]|5[05]|6[24-689]|8[2468]|9[235-7])\\\\d{7}\",,,,\"234567890\",,,[8,9],[6,7]],[,,\"1[0-25]\\\\d{8}\",,,,\"1001234567\",,,[10]],[,,\"800\\\\d{7}\",,,,\"8001234567\",,,[10]],[,,\"900\\\\d{7}\",,,,\"9001234567\",,,[10]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],\"EG\",20,\"00\",\"0\",,,\"0\",,,,[[,\"(\\\\d)(\\\\d{7,8})\",\"$1 $2\",\n[\"[23]\"],\"0$1\"],[,\"(\\\\d{2})(\\\\d{6,7})\",\"$1 $2\",[\"1[35]|[4-6]|8[2468]|9[235-7]\"],\"0$1\"],[,\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[89]\"],\"0$1\"],[,\"(\\\\d{2})(\\\\d{8})\",\"$1 $2\",[\"1\"],\"0$1\"]],,[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],EH:[,[,,\"[5-8]\\\\d{8}\",,,,,,,[9]],[,,\"528[89]\\\\d{5}\",,,,\"528812345\"],[,,\"(?:6(?:[0-79]\\\\d|8[0-247-9])|7(?:[0167]\\\\d|2[0-4]|5[01]|8[0-3]))\\\\d{6}\",,,,\"650123456\"],[,,\"80[0-7]\\\\d{6}\",,,,\"801234567\"],[,,\"89\\\\d{7}\",,,,\"891234567\"],[,,,,,,,,,[-1]],[,,,\n,,,,,,[-1]],[,,\"(?:592(?:4[0-2]|93)|80[89]\\\\d\\\\d)\\\\d{4}\",,,,\"592401234\"],\"EH\",212,\"00\",\"0\",,,\"0\",,,,,,[,,,,,,,,,[-1]],,\"528[89]\",[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],ER:[,[,,\"[178]\\\\d{6}\",,,,,,,[7],[6]],[,,\"(?:1(?:1[12568]|[24]0|55|6[146])|8\\\\d\\\\d)\\\\d{4}\",,,,\"8370362\",,,,[6]],[,,\"(?:17[1-3]|7\\\\d\\\\d)\\\\d{4}\",,,,\"7123456\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],\"ER\",291,\"00\",\"0\",,,\"0\",,,,[[,\"(\\\\d)(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[178]\"],\"0$1\"]],,[,\n,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],ES:[,[,,\"[5-9]\\\\d{8}\",,,,,,,[9]],[,,\"96906(?:0[0-8]|1[1-9]|[2-9]\\\\d)\\\\d\\\\d|9(?:69(?:0[0-57-9]|[1-9]\\\\d)|73(?:[0-8]\\\\d|9[1-9]))\\\\d{4}|(?:8(?:[1356]\\\\d|[28][0-8]|[47][1-9])|9(?:[135]\\\\d|[268][0-8]|4[1-9]|7[124-9]))\\\\d{6}\",,,,\"810123456\"],[,,\"(?:590[16]00\\\\d|9(?:6906(?:09|10)|7390\\\\d\\\\d))\\\\d\\\\d|(?:6\\\\d|7[1-48])\\\\d{7}\",,,,\"612345678\"],[,,\"[89]00\\\\d{6}\",,,,\"800123456\"],[,,\"80[367]\\\\d{6}\",,,,\"803123456\"],[,,\"90[12]\\\\d{6}\",,,,\"901123456\"],\n[,,\"70\\\\d{7}\",,,,\"701234567\"],[,,,,,,,,,[-1]],\"ES\",34,\"00\",,,,,,,,[[,\"(\\\\d{4})\",\"$1\",[\"905\"]],[,\"(\\\\d{6})\",\"$1\",[\"[79]9\"]],[,\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[89]00\"]],[,\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[5-9]\"]]],[[,\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[89]00\"]],[,\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[5-9]\"]]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,\"51\\\\d{7}\",,,,\"511234567\"],,,[,,,,,,,,,[-1]]],ET:[,[,,\"(?:11|[2-579]\\\\d)\\\\d{7}\",,,,,,,[9],[7]],[,,\"11667[01]\\\\d{3}|(?:11(?:1(?:1[124]|2[2-7]|3[1-5]|5[5-8]|8[6-8])|2(?:13|3[6-8]|5[89]|7[05-9]|8[2-6])|3(?:2[01]|3[0-289]|4[1289]|7[1-4]|87)|4(?:1[69]|3[2-49]|4[0-3]|6[5-8]|7\\\\d)|5(?:1[578]|44|5[0-4])|6(?:1[578]|2[69]|39|4[5-7]|5[0-5]|6[0-59]|8[015-8]))|2(?:2(?:11[1-9]|22[0-7]|33\\\\d|44[1467]|66[1-68])|5(?:11[124-6]|33[2-8]|44[1467]|55[14]|66[1-3679]|77[124-79]|880))|3(?:3(?:11[0-46-8]|(?:22|55)[0-6]|33[0134689]|44[04]|66[01467])|4(?:44[0-8]|55[0-69]|66[0-3]|77[1-5]))|4(?:6(?:119|22[0-24-7]|33[1-5]|44[13-69]|55[14-689]|660|88[1-4])|7(?:(?:11|22)[1-9]|33[13-7]|44[13-6]|55[1-689]))|5(?:7(?:227|55[05]|(?:66|77)[14-8])|8(?:11[149]|22[013-79]|33[0-68]|44[013-8]|550|66[1-5]|77\\\\d)))\\\\d{4}\",\n,,,\"111112345\",,,,[7]],[,,\"700[1-9]\\\\d{5}|(?:7(?:0[1-9]|1[0-8]|22|77|86|99)|9\\\\d\\\\d)\\\\d{6}\",,,,\"911234567\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],\"ET\",251,\"00\",\"0\",,,\"0\",,,,[[,\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[1-579]\"],\"0$1\"]],,[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],FI:[,[,,\"[1-35689]\\\\d{4}|7\\\\d{10,11}|(?:[124-7]\\\\d|3[0-46-9])\\\\d{8}|[1-9]\\\\d{5,8}\",,,,,,,[5,6,7,8,9,10,11,12]],[,,\"1[3-7][1-8]\\\\d{3,6}|(?:19[1-8]|[23568][1-8]\\\\d|9(?:00|[1-8]\\\\d))\\\\d{2,6}\",\n,,,\"131234567\",,,[5,6,7,8,9]],[,,\"4946\\\\d{2,6}|(?:4[0-8]|50)\\\\d{4,8}\",,,,\"412345678\",,,[6,7,8,9,10]],[,,\"800\\\\d{4,6}\",,,,\"800123456\",,,[7,8,9]],[,,\"[67]00\\\\d{5,6}\",,,,\"600123456\",,,[8,9]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],\"FI\",358,\"00|99(?:[01469]|5(?:[14]1|3[23]|5[59]|77|88|9[09]))\",\"0\",,,\"0\",,\"00\",,[[,\"(\\\\d{5})\",\"$1\",[\"75[12]\"],\"0$1\"],[,\"(\\\\d{5})\",\"$1\",[\"20[2-59]\"],\"0$1\"],[,\"(\\\\d{6})\",\"$1\",[\"11\"]],[,\"(\\\\d{3})(\\\\d{3,7})\",\"$1 $2\",[\"(?:[1-3]0|[68])0|70[07-9]\"],\"0$1\"],[,\"(\\\\d{2})(\\\\d{4,8})\",\n\"$1 $2\",[\"[14]|2[09]|50|7[135]\"],\"0$1\"],[,\"(\\\\d{2})(\\\\d{6,10})\",\"$1 $2\",[\"7\"],\"0$1\"],[,\"(\\\\d)(\\\\d{4,9})\",\"$1 $2\",[\"(?:19|[2568])[1-8]|3(?:0[1-9]|[1-9])|9\"],\"0$1\"]],[[,\"(\\\\d{5})\",\"$1\",[\"20[2-59]\"],\"0$1\"],[,\"(\\\\d{3})(\\\\d{3,7})\",\"$1 $2\",[\"(?:[1-3]0|[68])0|70[07-9]\"],\"0$1\"],[,\"(\\\\d{2})(\\\\d{4,8})\",\"$1 $2\",[\"[14]|2[09]|50|7[135]\"],\"0$1\"],[,\"(\\\\d{2})(\\\\d{6,10})\",\"$1 $2\",[\"7\"],\"0$1\"],[,\"(\\\\d)(\\\\d{4,9})\",\"$1 $2\",[\"(?:19|[2568])[1-8]|3(?:0[1-9]|[1-9])|9\"],\"0$1\"]],[,,,,,,,,,[-1]],1,\"1[03-79]|[2-9]\",[,,\"20(?:2[023]|9[89])\\\\d{1,6}|(?:60[12]\\\\d|7099)\\\\d{4,5}|(?:606|7(?:0[78]|1|3\\\\d))\\\\d{7}|(?:[1-3]00|7(?:0[1-5]\\\\d\\\\d|5[03-9]))\\\\d{3,7}\"],\n[,,\"20\\\\d{4,8}|60[12]\\\\d{5,6}|7(?:099\\\\d{4,5}|5[03-9]\\\\d{3,7})|20[2-59]\\\\d\\\\d|(?:606|7(?:0[78]|1|3\\\\d))\\\\d{7}|(?:10|29|3[09]|70[1-5]\\\\d)\\\\d{4,8}\",,,,\"10112345\"],,,[,,,,,,,,,[-1]]],FJ:[,[,,\"45\\\\d{5}|(?:0800\\\\d|[235-9])\\\\d{6}\",,,,,,,[7,11]],[,,\"603\\\\d{4}|(?:3[0-5]|6[25-7]|8[58])\\\\d{5}\",,,,\"3212345\",,,[7]],[,,\"(?:[279]\\\\d|45|5[01568]|8[034679])\\\\d{5}\",,,,\"7012345\",,,[7]],[,,\"0800\\\\d{7}\",,,,\"08001234567\",,,[11]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],\"FJ\",679,\"0(?:0|52)\",,,,,\n,\"00\",,[[,\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[235-9]|45\"]],[,\"(\\\\d{4})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"0\"]]],,[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],FK:[,[,,\"[2-7]\\\\d{4}\",,,,,,,[5]],[,,\"[2-47]\\\\d{4}\",,,,\"31234\"],[,,\"[56]\\\\d{4}\",,,,\"51234\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],\"FK\",500,\"00\",,,,,,,,,,[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],FM:[,[,,\"(?:[39]\\\\d\\\\d|820)\\\\d{4}\",,,,,,,[7]],[,,\"31(?:00[67]|208|309)\\\\d\\\\d|(?:3(?:[2357]0[1-9]|602|804|905)|(?:820|9[2-6]\\\\d)\\\\d)\\\\d{3}\",\n,,,\"3201234\"],[,,\"31(?:00[67]|208|309)\\\\d\\\\d|(?:3(?:[2357]0[1-9]|602|804|905)|(?:820|9[2-7]\\\\d)\\\\d)\\\\d{3}\",,,,\"3501234\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],\"FM\",691,\"00\",,,,,,,,[[,\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[389]\"]]],,[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],FO:[,[,,\"[2-9]\\\\d{5}\",,,,,,,[6]],[,,\"(?:20|[34]\\\\d|8[19])\\\\d{4}\",,,,\"201234\"],[,,\"(?:[27][1-9]|5\\\\d|9[16])\\\\d{4}\",,,,\"211234\"],[,,\"80[257-9]\\\\d{3}\",,,,\"802123\"],[,,\"90(?:[13-5][15-7]|2[125-7]|9\\\\d)\\\\d\\\\d\",\n,,,\"901123\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,\"(?:6[0-36]|88)\\\\d{4}\",,,,\"601234\"],\"FO\",298,\"00\",,,,\"(10(?:01|[12]0|88))\",,,,[[,\"(\\\\d{6})\",\"$1\",[\"[2-9]\"],,\"$CC $1\"]],,[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],FR:[,[,,\"[1-9]\\\\d{8}\",,,,,,,[9]],[,,\"(?:26[013-9]|59[1-35-9])\\\\d{6}|(?:[13]\\\\d|2[0-57-9]|4[1-9]|5[0-8])\\\\d{7}\",,,,\"123456789\"],[,,\"(?:6(?:[0-24-8]\\\\d|3[0-8]|9[589])|7[3-9]\\\\d)\\\\d{6}\",,,,\"612345678\"],[,,\"80[0-5]\\\\d{6}\",,,,\"801234567\"],[,,\"836(?:0[0-36-9]|[1-9]\\\\d)\\\\d{4}|8(?:1[2-9]|2[2-47-9]|3[0-57-9]|[569]\\\\d|8[0-35-9])\\\\d{6}\",\n,,,\"891123456\"],[,,\"8(?:1[01]|2[0156]|4[024]|84)\\\\d{6}\",,,,\"884012345\"],[,,,,,,,,,[-1]],[,,\"9\\\\d{8}\",,,,\"912345678\"],\"FR\",33,\"00\",\"0\",,,\"0\",,,,[[,\"(\\\\d{4})\",\"$1\",[\"10\"]],[,\"(\\\\d{3})(\\\\d{3})\",\"$1 $2\",[\"1\"]],[,\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"8\"],\"0 $1\"],[,\"(\\\\d)(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4 $5\",[\"[1-79]\"],\"0$1\"]],[[,\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"8\"],\"0 $1\"],[,\"(\\\\d)(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4 $5\",[\"[1-79]\"],\"0$1\"]],[,,,,,,,\n,,[-1]],,,[,,,,,,,,,[-1]],[,,\"80[6-9]\\\\d{6}\",,,,\"806123456\"],,,[,,,,,,,,,[-1]]],GA:[,[,,\"(?:[067]\\\\d|11)\\\\d{6}|[2-7]\\\\d{6}\",,,,,,,[7,8]],[,,\"[01]1\\\\d{6}\",,,,\"01441234\",,,[8]],[,,\"(?:(?:0[2-7]|7[467])\\\\d|6(?:0[0-4]|10|[256]\\\\d))\\\\d{5}|[2-7]\\\\d{6}\",,,,\"06031234\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],\"GA\",241,\"00\",,,,\"0(11\\\\d{6}|60\\\\d{6}|61\\\\d{6}|6[256]\\\\d{6}|7[467]\\\\d{6})\",\"$1\",,,[[,\"(\\\\d)(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[2-7]\"],\"0$1\"],[,\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\n\"$1 $2 $3 $4\",[\"0\"]],[,\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"11|[67]\"],\"0$1\"]],,[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],GB:[,[,,\"[1-357-9]\\\\d{9}|[18]\\\\d{8}|8\\\\d{6}\",,,,,,,[7,9,10],[4,5,6,8]],[,,\"(?:1(?:1(?:3(?:[0-58]\\\\d\\\\d|73[0-35])|4(?:(?:[0-5]\\\\d|70)\\\\d|69[7-9])|(?:(?:5[0-26-9]|[78][0-49])\\\\d|6(?:[0-4]\\\\d|50))\\\\d)|(?:2(?:(?:0[024-9]|2[3-9]|3[3-79]|4[1-689]|[58][02-9]|6[0-47-9]|7[013-9]|9\\\\d)\\\\d|1(?:[0-7]\\\\d|8[0-3]))|(?:3(?:0\\\\d|1[0-8]|[25][02-9]|3[02-579]|[468][0-46-9]|7[1-35-79]|9[2-578])|4(?:0[03-9]|[137]\\\\d|[28][02-57-9]|4[02-69]|5[0-8]|[69][0-79])|5(?:0[1-35-9]|[16]\\\\d|2[024-9]|3[015689]|4[02-9]|5[03-9]|7[0-35-9]|8[0-468]|9[0-57-9])|6(?:0[034689]|1\\\\d|2[0-35689]|[38][013-9]|4[1-467]|5[0-69]|6[13-9]|7[0-8]|9[0-24578])|7(?:0[0246-9]|2\\\\d|3[0236-8]|4[03-9]|5[0-46-9]|6[013-9]|7[0-35-9]|8[024-9]|9[02-9])|8(?:0[35-9]|2[1-57-9]|3[02-578]|4[0-578]|5[124-9]|6[2-69]|7\\\\d|8[02-9]|9[02569])|9(?:0[02-589]|[18]\\\\d|2[02-689]|3[1-57-9]|4[2-9]|5[0-579]|6[2-47-9]|7[0-24578]|9[2-57]))\\\\d)\\\\d)|2(?:0[013478]|3[0189]|4[017]|8[0-46-9]|9[0-2])\\\\d{3})\\\\d{4}|1(?:2(?:0(?:46[1-4]|87[2-9])|545[1-79]|76(?:2\\\\d|3[1-8]|6[1-6])|9(?:7(?:2[0-4]|3[2-5])|8(?:2[2-8]|7[0-47-9]|8[3-5])))|3(?:6(?:38[2-5]|47[23])|8(?:47[04-9]|64[0157-9]))|4(?:044[1-7]|20(?:2[23]|8\\\\d)|6(?:0(?:30|5[2-57]|6[1-8]|7[2-8])|140)|8(?:052|87[1-3]))|5(?:2(?:4(?:3[2-79]|6\\\\d)|76\\\\d)|6(?:26[06-9]|686))|6(?:06(?:4\\\\d|7[4-79])|295[5-7]|35[34]\\\\d|47(?:24|61)|59(?:5[08]|6[67]|74)|9(?:55[0-4]|77[23]))|7(?:26(?:6[13-9]|7[0-7])|(?:442|688)\\\\d|50(?:2[0-3]|[3-68]2|76))|8(?:27[56]\\\\d|37(?:5[2-5]|8[239])|843[2-58])|9(?:0(?:0(?:6[1-8]|85)|52\\\\d)|3583|4(?:66[1-8]|9(?:2[01]|81))|63(?:23|3[1-4])|9561))\\\\d{3}\",\n,,,\"1212345678\",,,[9,10],[4,5,6,7,8]],[,,\"7(?:457[0-57-9]|700[01]|911[028])\\\\d{5}|7(?:[1-3]\\\\d\\\\d|4(?:[0-46-9]\\\\d|5[0-689])|5(?:0[0-8]|[13-9]\\\\d|2[0-35-9])|7(?:0[1-9]|[1-7]\\\\d|8[02-9]|9[0-689])|8(?:[014-9]\\\\d|[23][0-8])|9(?:[024-9]\\\\d|1[02-9]|3[0-689]))\\\\d{6}\",,,,\"7400123456\",,,[10]],[,,\"80[08]\\\\d{7}|800\\\\d{6}|8001111\",,,,\"8001234567\"],[,,\"(?:8(?:4[2-5]|7[0-3])|9(?:[01]\\\\d|8[2-49]))\\\\d{7}|845464\\\\d\",,,,\"9012345678\",,,[7,10]],[,,,,,,,,,[-1]],[,,\"70\\\\d{8}\",,,,\"7012345678\",,,[10]],[,,\"56\\\\d{8}\",,,,\"5612345678\",\n,,[10]],\"GB\",44,\"00\",\"0\",\" x\",,\"0\",,,,[[,\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"800\",\"8001\",\"80011\",\"800111\",\"8001111\"],\"0$1\"],[,\"(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3\",[\"845\",\"8454\",\"84546\",\"845464\"],\"0$1\"],[,\"(\\\\d{3})(\\\\d{6})\",\"$1 $2\",[\"800\"],\"0$1\"],[,\"(\\\\d{5})(\\\\d{4,5})\",\"$1 $2\",[\"1(?:38|5[23]|69|76|94)\",\"1(?:(?:38|69)7|5(?:24|39)|768|946)\",\"1(?:3873|5(?:242|39[4-6])|(?:697|768)[347]|9467)\"],\"0$1\"],[,\"(\\\\d{4})(\\\\d{5,6})\",\"$1 $2\",[\"1(?:[2-69][02-9]|[78])\"],\"0$1\"],[,\"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"[25]|7(?:0|6[02-9])\",\n\"[25]|7(?:0|6(?:[03-9]|2[356]))\"],\"0$1\"],[,\"(\\\\d{4})(\\\\d{6})\",\"$1 $2\",[\"7\"],\"0$1\"],[,\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[1389]\"],\"0$1\"]],,[,,\"76(?:464|652)\\\\d{5}|76(?:0[0-28]|2[356]|34|4[01347]|5[49]|6[0-369]|77|8[14]|9[139])\\\\d{6}\",,,,\"7640123456\",,,[10]],1,,[,,,,,,,,,[-1]],[,,\"(?:3[0347]|55)\\\\d{8}\",,,,\"5512345678\",,,[10]],,,[,,,,,,,,,[-1]]],GD:[,[,,\"(?:473|[58]\\\\d\\\\d|900)\\\\d{7}\",,,,,,,[10],[7]],[,,\"473(?:2(?:3[0-2]|69)|3(?:2[89]|86)|4(?:[06]8|3[5-9]|4[0-4]|5[579]|73|90)|63[68]|7(?:58|84)|800|938)\\\\d{4}\",\n,,,\"4732691234\",,,,[7]],[,,\"473(?:4(?:0[2-79]|1[04-9]|2[0-5]|49|5[68])|5(?:2[01]|3[3-8])|901)\\\\d{4}\",,,,\"4734031234\",,,,[7]],[,,\"8(?:00|33|44|55|66|77|88)[2-9]\\\\d{6}\",,,,\"8002123456\"],[,,\"900[2-9]\\\\d{6}\",,,,\"9002123456\"],[,,,,,,,,,[-1]],[,,\"52(?:3(?:[2-46-9][02-9]\\\\d|5(?:[02-46-9]\\\\d|5[0-46-9]))|4(?:[2-478][02-9]\\\\d|5(?:[034]\\\\d|2[024-9]|5[0-46-9])|6(?:0[1-9]|[2-9]\\\\d)|9(?:[05-9]\\\\d|2[0-5]|49)))\\\\d{4}|52[34][2-9]1[02-9]\\\\d{4}|5(?:00|2[125-9]|33|44|66|77|88)[2-9]\\\\d{6}\",,,,\"5002345678\"],[,,,,,,,,,\n[-1]],\"GD\",1,\"011\",\"1\",,,\"([2-9]\\\\d{6})$|1\",\"473$1\",,,,,[,,,,,,,,,[-1]],,\"473\",[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],GE:[,[,,\"(?:[3-57]\\\\d\\\\d|800)\\\\d{6}\",,,,,,,[9],[6,7]],[,,\"(?:3(?:[256]\\\\d|4[124-9]|7[0-4])|4(?:1\\\\d|2[2-7]|3[1-79]|4[2-8]|7[239]|9[1-7]))\\\\d{6}\",,,,\"322123456\",,,,[6,7]],[,,\"5(?:(?:(?:0555|1(?:[17]77|555))[5-9]|757(?:7[7-9]|8[01]))\\\\d|22252[0-4])\\\\d\\\\d|5(?:0(?:0[17]0|505)|1(?:0[01]0|1(?:07|33|51))|2(?:0[02]0|2[25]2)|3(?:0[03]0|3[35]3)|(?:40[04]|900)0|5222)[0-4]\\\\d{3}|(?:5(?:0(?:0(?:0\\\\d|11|22|3[0-6]|44|5[05]|77|88|9[09])|(?:[14]\\\\d|77)\\\\d|22[02])|1(?:1(?:[03][01]|[124]\\\\d|5[2-6]|7[0-4])|4\\\\d\\\\d)|[23]555|4(?:4\\\\d\\\\d|555)|5(?:[0157-9]\\\\d\\\\d|200|333|444)|6[89]\\\\d\\\\d|7(?:[0147-9]\\\\d\\\\d|5(?:00|[57]5))|8(?:0(?:[018]\\\\d|2[0-4])|5(?:55|8[89])|8(?:55|88))|9(?:090|[1-35-9]\\\\d\\\\d))|790\\\\d\\\\d)\\\\d{4}\",\n,,,\"555123456\"],[,,\"800\\\\d{6}\",,,,\"800123456\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,\"70[67]\\\\d{6}\",,,,\"706123456\"],\"GE\",995,\"00\",\"0\",,,\"0\",,,,[[,\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"70\"],\"0$1\"],[,\"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"32\"],\"0$1\"],[,\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[57]\"]],[,\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[348]\"],\"0$1\"]],,[,,,,,,,,,[-1]],,,[,,\"70[67]\\\\d{6}\"],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],GF:[,[,,\"(?:[56]94\\\\d|7093)\\\\d{5}|(?:80|9\\\\d)\\\\d{7}\",\n,,,,,,[9]],[,,\"594(?:[02-49]\\\\d|1[0-5]|5[6-9]|6[0-3]|80)\\\\d{4}\",,,,\"594101234\"],[,,\"(?:694(?:[0-249]\\\\d|3[0-8])|7093[0-3])\\\\d{4}\",,,,\"694201234\"],[,,\"80[0-5]\\\\d{6}\",,,,\"800012345\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,\"9(?:(?:396|76\\\\d)\\\\d|476[0-5])\\\\d{4}\",,,,\"976012345\"],\"GF\",594,\"00\",\"0\",,,\"0\",,,,[[,\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[5-7]|9[47]\"],\"0$1\"],[,\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[89]\"],\"0$1\"]],,[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,,,,,,,\n,[-1]],,,[,,,,,,,,,[-1]]],GG:[,[,,\"(?:1481|[357-9]\\\\d{3})\\\\d{6}|8\\\\d{6}(?:\\\\d{2})?\",,,,,,,[7,9,10],[6]],[,,\"1481[25-9]\\\\d{5}\",,,,\"1481256789\",,,[10],[6]],[,,\"7(?:(?:781|839)\\\\d|911[17])\\\\d{5}\",,,,\"7781123456\",,,[10]],[,,\"80[08]\\\\d{7}|800\\\\d{6}|8001111\",,,,\"8001234567\"],[,,\"(?:8(?:4[2-5]|7[0-3])|9(?:[01]\\\\d|8[0-3]))\\\\d{7}|845464\\\\d\",,,,\"9012345678\",,,[7,10]],[,,,,,,,,,[-1]],[,,\"70\\\\d{8}\",,,,\"7012345678\",,,[10]],[,,\"56\\\\d{8}\",,,,\"5612345678\",,,[10]],\"GG\",44,\"00\",\"0\",,,\"([25-9]\\\\d{5})$|0\",\"1481$1\",,\n,,,[,,\"76(?:464|652)\\\\d{5}|76(?:0[0-28]|2[356]|34|4[01347]|5[49]|6[0-369]|77|8[14]|9[139])\\\\d{6}\",,,,\"7640123456\",,,[10]],,,[,,,,,,,,,[-1]],[,,\"(?:3[0347]|55)\\\\d{8}\",,,,\"5512345678\",,,[10]],,,[,,,,,,,,,[-1]]],GH:[,[,,\"(?:[235]\\\\d{3}|800)\\\\d{5}\",,,,,,,[8,9],[7]],[,,\"3082[0-5]\\\\d{4}|3(?:0(?:[237]\\\\d|8[01])|[167](?:2[0-6]|7\\\\d|80)|2(?:2[0-5]|7\\\\d|80)|3(?:2[0-3]|7\\\\d|80)|4(?:2[013-9]|3[01]|7\\\\d|80)|5(?:2[0-7]|7\\\\d|80)|8(?:2[0-2]|7\\\\d|80)|9(?:[28]0|7\\\\d))\\\\d{5}\",,,,\"302345678\",,,[9],[7]],[,,\"(?:2(?:[0346-9]\\\\d|5[67])|5(?:[03-7]\\\\d|9[1-9]))\\\\d{6}\",\n,,,\"231234567\",,,[9]],[,,\"800\\\\d{5}\",,,,\"80012345\",,,[8]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],\"GH\",233,\"00\",\"0\",,,\"0\",,,,[[,\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[237]|8[0-2]\"]],[,\"(\\\\d{3})(\\\\d{5})\",\"$1 $2\",[\"8\"],\"0$1\"],[,\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[235]\"],\"0$1\"]],[[,\"(\\\\d{3})(\\\\d{5})\",\"$1 $2\",[\"8\"],\"0$1\"],[,\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[235]\"],\"0$1\"]],[,,,,,,,,,[-1]],,,[,,\"800\\\\d{5}\",,,,,,,[8]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],GI:[,[,,\"(?:[25]\\\\d|60)\\\\d{6}\",\n,,,,,,[8]],[,,\"2190[0-2]\\\\d{3}|2(?:0(?:[02]\\\\d|3[01])|16[24-9]|2[2-5]\\\\d)\\\\d{4}\",,,,\"20012345\"],[,,\"5251[0-4]\\\\d{3}|(?:5(?:[146-8]\\\\d\\\\d|250)|60(?:1[01]|6\\\\d))\\\\d{4}\",,,,\"57123456\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],\"GI\",350,\"00\",,,,,,,,[[,\"(\\\\d{3})(\\\\d{5})\",\"$1 $2\",[\"2\"]]],,[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],GL:[,[,,\"(?:19|[2-689]\\\\d|70)\\\\d{4}\",,,,,,,[6]],[,,\"(?:19|3[1-7]|[68][1-9]|70|9\\\\d)\\\\d{4}\",,,,\"321000\"],[,,\"[245]\\\\d{5}\",\n,,,\"221234\"],[,,\"80\\\\d{4}\",,,,\"801234\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,\"3[89]\\\\d{4}\",,,,\"381234\"],\"GL\",299,\"00\",,,,,,,,[[,\"(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3\",[\"19|[2-9]\"]]],,[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],GM:[,[,,\"[2-9]\\\\d{6}\",,,,,,,[7]],[,,\"(?:4(?:[23]\\\\d\\\\d|4(?:1[024679]|[6-9]\\\\d))|5(?:5(?:3\\\\d|4[0-7])|6[67]\\\\d|7(?:1[04]|2[035]|3[58]|48))|8\\\\d{3})\\\\d{3}\",,,,\"5661234\"],[,,\"(?:[23679]\\\\d|4[015]|5[0-489])\\\\d{5}\",,,,\"3012345\"],[,,,,,,,,,[-1]],\n[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],\"GM\",220,\"00\",,,,,,,,[[,\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[2-9]\"]]],,[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],GN:[,[,,\"722\\\\d{6}|(?:3|6\\\\d)\\\\d{7}\",,,,,,,[8,9]],[,,\"3(?:0(?:24|3[12]|4[1-35-7]|5[13]|6[189]|[78]1|9[1478])|1\\\\d\\\\d)\\\\d{4}\",,,,\"30241234\",,,[8]],[,,\"6[0-356]\\\\d{7}\",,,,\"601123456\",,,[9]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,\"722\\\\d{6}\",,,,\"722123456\",,,[9]],\"GN\",224,\"00\",,\n,,,,,,[[,\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"3\"]],[,\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[67]\"]]],,[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],GP:[,[,,\"(?:590\\\\d|7090)\\\\d{5}|(?:69|80|9\\\\d)\\\\d{7}\",,,,,,,[9]],[,,\"590(?:0[1-68]|[14][0-24-9]|2[0-68]|3[1-9]|5[3-579]|[68][0-689]|7[08]|9\\\\d)\\\\d{4}\",,,,\"590201234\"],[,,\"(?:69(?:0\\\\d\\\\d|1(?:2[2-9]|3[0-5])|4(?:0[89]|1[2-6]|9\\\\d)|6(?:1[016-9]|5[0-4]|[67]\\\\d))|7090[0-4])\\\\d{4}\",,,,\"690001234\"],[,,\"80[0-5]\\\\d{6}\",\n,,,\"800012345\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,\"9(?:(?:39[5-7]|76[018])\\\\d|475[0-5])\\\\d{4}\",,,,\"976012345\"],\"GP\",590,\"00\",\"0\",,,\"0\",,,,[[,\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[5-79]\"],\"0$1\"],[,\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"8\"],\"0$1\"]],,[,,,,,,,,,[-1]],1,,[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],GQ:[,[,,\"222\\\\d{6}|(?:3\\\\d|55|[89]0)\\\\d{7}\",,,,,,,[9]],[,,\"33[0-24-9]\\\\d[46]\\\\d{4}|3(?:33|5\\\\d)\\\\d[7-9]\\\\d{4}\",,,,\"333091234\"],[,,\"(?:222|55\\\\d)\\\\d{6}\",\n,,,\"222123456\"],[,,\"80\\\\d[1-9]\\\\d{5}\",,,,\"800123456\"],[,,\"90\\\\d[1-9]\\\\d{5}\",,,,\"900123456\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],\"GQ\",240,\"00\",,,,,,,,[[,\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[235]\"]],[,\"(\\\\d{3})(\\\\d{6})\",\"$1 $2\",[\"[89]\"]]],,[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],GR:[,[,,\"5005000\\\\d{3}|8\\\\d{9,11}|(?:[269]\\\\d|70)\\\\d{8}\",,,,,,,[10,11,12]],[,,\"2(?:1\\\\d\\\\d|2(?:2[1-46-9]|[36][1-8]|4[1-7]|5[1-4]|7[1-5]|[89][1-9])|3(?:1\\\\d|2[1-57]|[35][1-3]|4[13]|7[1-7]|8[124-6]|9[1-79])|4(?:1\\\\d|2[1-8]|3[1-4]|4[13-5]|6[1-578]|9[1-5])|5(?:1\\\\d|[29][1-4]|3[1-5]|4[124]|5[1-6])|6(?:1\\\\d|[269][1-6]|3[1245]|4[1-7]|5[13-9]|7[14]|8[1-5])|7(?:1\\\\d|2[1-5]|3[1-6]|4[1-7]|5[1-57]|6[135]|9[125-7])|8(?:1\\\\d|2[1-5]|[34][1-4]|9[1-57]))\\\\d{6}\",\n,,,\"2123456789\",,,[10]],[,,\"68[57-9]\\\\d{7}|(?:69|94)\\\\d{8}\",,,,\"6912345678\",,,[10]],[,,\"800\\\\d{7,9}\",,,,\"8001234567\"],[,,\"90[19]\\\\d{7}\",,,,\"9091234567\",,,[10]],[,,\"8(?:0[16]|12|[27]5|50)\\\\d{7}\",,,,\"8011234567\",,,[10]],[,,\"70\\\\d{8}\",,,,\"7012345678\",,,[10]],[,,,,,,,,,[-1]],\"GR\",30,\"00\",,,,,,,,[[,\"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"21|7\"]],[,\"(\\\\d{4})(\\\\d{6})\",\"$1 $2\",[\"2(?:2|3[2-57-9]|4[2-469]|5[2-59]|6[2-9]|7[2-69]|8[2-49])|5\"]],[,\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[2689]\"]],[,\"(\\\\d{3})(\\\\d{3,4})(\\\\d{5})\",\n\"$1 $2 $3\",[\"8\"]]],,[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,\"5005000\\\\d{3}\",,,,\"5005000123\",,,[10]],,,[,,,,,,,,,[-1]]],GT:[,[,,\"80\\\\d{6}|(?:1\\\\d{3}|[2-7])\\\\d{7}\",,,,,,,[8,11]],[,,\"[267][2-9]\\\\d{6}\",,,,\"22456789\",,,[8]],[,,\"(?:[3-5]\\\\d\\\\d|80[0-4])\\\\d{5}\",,,,\"51234567\",,,[8]],[,,\"18[01]\\\\d{8}\",,,,\"18001112222\",,,[11]],[,,\"19\\\\d{9}\",,,,\"19001112222\",,,[11]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],\"GT\",502,\"00\",,,,,,,,[[,\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[2-8]\"]],[,\"(\\\\d{4})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",\n[\"1\"]]],,[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],GU:[,[,,\"(?:[58]\\\\d\\\\d|671|900)\\\\d{7}\",,,,,,,[10],[7]],[,,\"671(?:2\\\\d\\\\d|3(?:00|3[39]|4[349]|55|6[26])|4(?:00|56|7[1-9]|8[02-9])|5(?:55|6[2-5]|88)|6(?:3[2-578]|4[24-9]|5[34]|78|8[235-9])|7(?:[0479]7|2[0167]|3[45]|8[7-9])|8(?:[2-57-9]8|6[478])|9(?:2[29]|6[79]|7[1279]|8[7-9]|9[78]))\\\\d{4}\",,,,\"6713001234\",,,,[7]],[,,\"671(?:2\\\\d\\\\d|3(?:00|3[39]|4[349]|55|6[26])|4(?:00|56|7[1-9]|8[02-9])|5(?:55|6[2-5]|88)|6(?:3[2-578]|4[24-9]|5[34]|78|8[235-9])|7(?:[0479]7|2[0167]|3[45]|8[7-9])|8(?:[2-57-9]8|6[478])|9(?:2[29]|6[79]|7[1279]|8[7-9]|9[78]))\\\\d{4}\",\n,,,\"6713001234\",,,,[7]],[,,\"8(?:00|33|44|55|66|77|88)[2-9]\\\\d{6}\",,,,\"8002123456\"],[,,\"900[2-9]\\\\d{6}\",,,,\"9002123456\"],[,,,,,,,,,[-1]],[,,\"52(?:3(?:[2-46-9][02-9]\\\\d|5(?:[02-46-9]\\\\d|5[0-46-9]))|4(?:[2-478][02-9]\\\\d|5(?:[034]\\\\d|2[024-9]|5[0-46-9])|6(?:0[1-9]|[2-9]\\\\d)|9(?:[05-9]\\\\d|2[0-5]|49)))\\\\d{4}|52[34][2-9]1[02-9]\\\\d{4}|5(?:00|2[125-9]|33|44|66|77|88)[2-9]\\\\d{6}\",,,,\"5002345678\"],[,,,,,,,,,[-1]],\"GU\",1,\"011\",\"1\",,,\"([2-9]\\\\d{6})$|1\",\"671$1\",,1,,,[,,,,,,,,,[-1]],,\"671\",[,,,,,,,,,[-1]],[,,,,\n,,,,,[-1]],,,[,,,,,,,,,[-1]]],GW:[,[,,\"[49]\\\\d{8}|4\\\\d{6}\",,,,,,,[7,9]],[,,\"443\\\\d{6}\",,,,\"443201234\",,,[9]],[,,\"9(?:5\\\\d|6[569]|77)\\\\d{6}\",,,,\"955012345\",,,[9]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,\"40\\\\d{5}\",,,,\"4012345\",,,[7]],\"GW\",245,\"00\",,,,,,,,[[,\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"40\"]],[,\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[49]\"]]],,[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],GY:[,[,,\"(?:[2-8]\\\\d{3}|9008)\\\\d{3}\",,,,,,,[7]],[,,\"(?:2(?:1[6-9]|2[0-35-9]|3[1-4]|5[3-9]|6\\\\d|7[0-79])|3(?:2[25-9]|3\\\\d)|4(?:4[0-24]|5[56])|50[0-6]|77[1-57])\\\\d{4}\",\n,,,\"2201234\"],[,,\"510\\\\d{4}|(?:6\\\\d|7[0-5])\\\\d{5}\",,,,\"6091234\"],[,,\"(?:289|8(?:00|6[28]|88|99))\\\\d{4}\",,,,\"2891234\"],[,,\"9008\\\\d{3}\",,,,\"9008123\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,\"515\\\\d{4}\",,,,\"5151234\"],\"GY\",592,\"001\",,,,,,,,[[,\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[2-9]\"]]],,[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],HK:[,[,,\"8[0-46-9]\\\\d{6,7}|9\\\\d{4,7}|(?:[2-7]|9\\\\d{3})\\\\d{7}\",,,,,,,[5,6,7,8,9,11]],[,,\"(?:2(?:[13-9]\\\\d|2[013-9])\\\\d|3(?:(?:[1569][0-24-9]|4[0-246-9]|7[0-24-69])\\\\d|8(?:4[0-8]|[579]\\\\d|6[0-2]))|58(?:0[1-9]|1[2-9]))\\\\d{4}\",\n,,,\"21234567\",,,[8]],[,,\"(?:4(?:44[0-25-9]|6(?:1[0-7]|4[0-57-9]|6[0-4])|7(?:4[0-2]|6[0-5]))|5(?:73[0-6]|95[0-8])|6(?:26[013-8]|66[0-3])|70(?:7[1-8]|8[0-4])|84(?:4[0-2]|8[0-35-9])|9(?:29[013-9]|39[014-9]|59[0-4]|899))\\\\d{4}|(?:4(?:4[0-35-9]|6[02357-9]|7[05])|5(?:[1-59][0-46-9]|6[0-4689]|7[0-246-9])|6(?:0[1-9]|[13-59]\\\\d|[268][0-57-9]|7[0-79])|70[1-49]|84[0-39]|9(?:0[1-9]|1[02-9]|[2358][0-8]|[467]\\\\d))\\\\d{5}\",,,,\"51234567\",,,[8]],[,,\"800\\\\d{6}\",,,,\"800123456\",,,[9]],[,,\"900(?:[0-24-9]\\\\d{7}|3\\\\d{1,4})\",\n,,,\"90012345678\",,,[5,6,7,8,11]],[,,,,,,,,,[-1]],[,,\"8(?:1[0-4679]\\\\d|2(?:[0-36]\\\\d|7[0-4])|3(?:[034]\\\\d|2[09]|70))\\\\d{4}\",,,,\"81123456\",,,[8]],[,,,,,,,,,[-1]],\"HK\",852,\"00(?:30|5[09]|[126-9]?)\",,,,,,\"00\",,[[,\"(\\\\d{3})(\\\\d{2,5})\",\"$1 $2\",[\"900\",\"9003\"]],[,\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[2-7]|8[1-4]|9(?:0[1-9]|[1-8])\"]],[,\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"8\"]],[,\"(\\\\d{3})(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"9\"]]],,[,,\"7(?:1(?:0[0-38]|1[0-3679]|3[013]|69|9[0136])|2(?:[02389]\\\\d|1[18]|7[27-9])|3(?:[0-38]\\\\d|7[0-369]|9[2357-9])|47\\\\d|5(?:[178]\\\\d|5[0-5])|6(?:0[0-7]|2[236-9]|[35]\\\\d)|7(?:[27]\\\\d|8[7-9])|8(?:[23689]\\\\d|7[1-9])|9(?:[025]\\\\d|6[0-246-8]|7[0-36-9]|8[238]))\\\\d{4}\",\n,,,\"71123456\",,,[8]],,,[,,,,,,,,,[-1]],[,,\"30(?:0[1-9]|[15-7]\\\\d|2[047]|89)\\\\d{4}\",,,,\"30161234\",,,[8]],,,[,,,,,,,,,[-1]]],HN:[,[,,\"8\\\\d{10}|[237-9]\\\\d{7}\",,,,,,,[8,11]],[,,\"2(?:2(?:0[0-59]|1[1-9]|[23]\\\\d|4[02-7]|5[57]|6[245]|7[0135689]|8[01346-9]|9[0-2])|4(?:0[578]|2[3-59]|3[13-9]|4[0-68]|5[1-3589])|5(?:0[2357-9]|1[1-356]|4[03-5]|5\\\\d|6[014-69]|7[04]|80)|6(?:[056]\\\\d|17|2[067]|3[047]|4[0-378]|[78][0-8]|9[01])|7(?:0[5-79]|6[46-9]|7[02-9]|8[034]|91)|8(?:79|8[0-357-9]|9[1-57-9]))\\\\d{4}\",,,,\"22123456\",\n,,[8]],[,,\"[37-9]\\\\d{7}\",,,,\"91234567\",,,[8]],[,,\"8002\\\\d{7}\",,,,\"80021234567\",,,[11]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],\"HN\",504,\"00\",,,,,,,,[[,\"(\\\\d{4})(\\\\d{4})\",\"$1-$2\",[\"[237-9]\"]],[,\"(\\\\d{3})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"8\"]]],[[,\"(\\\\d{4})(\\\\d{4})\",\"$1-$2\",[\"[237-9]\"]]],[,,,,,,,,,[-1]],,,[,,\"8002\\\\d{7}\",,,,,,,[11]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],HR:[,[,,\"(?:[24-69]\\\\d|3[0-79])\\\\d{7}|80\\\\d{5,7}|[1-79]\\\\d{7}|6\\\\d{5,6}\",,,,,,,[6,7,8,9]],[,,\"1\\\\d{7}|(?:2[0-3]|3[1-5]|4[02-47-9]|5[1-3])\\\\d{6,7}\",\n,,,\"12345678\",,,[8,9],[6,7]],[,,\"9(?:(?:0[1-9]|[12589]\\\\d)\\\\d\\\\d|7(?:[0679]\\\\d\\\\d|5(?:[01]\\\\d|44|55|77|9[5-79])))\\\\d{4}|98\\\\d{6}\",,,,\"921234567\",,,[8,9]],[,,\"80\\\\d{5,7}\",,,,\"800123456\",,,[7,8,9]],[,,\"6[01459]\\\\d{6}|6[01]\\\\d{4,5}\",,,,\"611234\",,,[6,7,8]],[,,,,,,,,,[-1]],[,,\"7[45]\\\\d{6}\",,,,\"74123456\",,,[8]],[,,,,,,,,,[-1]],\"HR\",385,\"00\",\"0\",,,\"0\",,,,[[,\"(\\\\d{2})(\\\\d{2})(\\\\d{2,3})\",\"$1 $2 $3\",[\"6[01]\"],\"0$1\"],[,\"(\\\\d{3})(\\\\d{2})(\\\\d{2,3})\",\"$1 $2 $3\",[\"8\"],\"0$1\"],[,\"(\\\\d)(\\\\d{4})(\\\\d{3})\",\"$1 $2 $3\",\n[\"1\"],\"0$1\"],[,\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"6|7[245]\"],\"0$1\"],[,\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"9\"],\"0$1\"],[,\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[2-57]\"],\"0$1\"],[,\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"8\"],\"0$1\"]],,[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,\"62\\\\d{6,7}|72\\\\d{6}\",,,,\"62123456\",,,[8,9]],,,[,,,,,,,,,[-1]]],HT:[,[,,\"(?:[2-489]\\\\d|55)\\\\d{6}\",,,,,,,[8]],[,,\"2(?:2\\\\d|5[1-5]|81|9[149])\\\\d{5}\",,,,\"22453300\"],[,,\"(?:[34]\\\\d|55)\\\\d{6}\",,,,\"34101234\"],[,,\"8\\\\d{7}\",,,,\n\"80012345\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,\"9(?:[67][0-4]|8[0-3589]|9\\\\d)\\\\d{5}\",,,,\"98901234\"],\"HT\",509,\"00\",,,,,,,,[[,\"(\\\\d{2})(\\\\d{2})(\\\\d{4})\",\"$1 $2 $3\",[\"[2-589]\"]]],,[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],HU:[,[,,\"[235-7]\\\\d{8}|[1-9]\\\\d{7}\",,,,,,,[8,9],[6,7]],[,,\"(?:1\\\\d|[27][2-9]|3[2-7]|4[24-9]|5[2-79]|6[23689]|8[2-57-9]|9[2-69])\\\\d{6}\",,,,\"12345678\",,,[8],[6,7]],[,,\"(?:[257]0|3[01])\\\\d{7}\",,,,\"201234567\",,,[9]],[,,\"(?:[48]0\\\\d|680[29])\\\\d{5}\",\n,,,\"80123456\"],[,,\"9[01]\\\\d{6}\",,,,\"90123456\",,,[8]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,\"21\\\\d{7}\",,,,\"211234567\",,,[9]],\"HU\",36,\"00\",\"06\",,,\"06\",,,,[[,\"(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"1\"],\"(06 $1)\"],[,\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[27][2-9]|3[2-7]|4[24-9]|5[2-79]|6|8[2-57-9]|9[2-69]\"],\"(06 $1)\"],[,\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[2-9]\"],\"06 $1\"]],,[,,,,,,,,,[-1]],,,[,,\"(?:[48]0\\\\d|680[29])\\\\d{5}\"],[,,\"38\\\\d{7}\",,,,\"381234567\",,,[9]],,,[,,,,,,,,,[-1]]],ID:[,[,,\"00[1-9]\\\\d{9,14}|(?:[1-36]|8\\\\d{5})\\\\d{6}|00\\\\d{9}|[1-9]\\\\d{8,10}|[2-9]\\\\d{7}\",\n,,,,,,[7,8,9,10,11,12,13,14,15,16,17],[5,6]],[,,\"2[124]\\\\d{7,8}|619\\\\d{8}|2(?:1(?:14|500)|2\\\\d{3})\\\\d{3}|61\\\\d{5,8}|(?:2(?:[35][1-4]|6[0-8]|7[1-6]|8\\\\d|9[1-8])|3(?:1|[25][1-8]|3[1-68]|4[1-3]|6[1-3568]|7[0-469]|8\\\\d)|4(?:0[1-589]|1[01347-9]|2[0-36-8]|3[0-24-68]|43|5[1-378]|6[1-5]|7[134]|8[1245])|5(?:1[1-35-9]|2[25-8]|3[124-9]|4[1-3589]|5[1-46]|6[1-8])|6(?:[25]\\\\d|3[1-69]|4[1-6])|7(?:02|[125][1-9]|[36]\\\\d|4[1-8]|7[0-36-9])|9(?:0[12]|1[013-8]|2[0-479]|5[125-8]|6[23679]|7[159]|8[01346]))\\\\d{5,8}\",,,,\n\"218350123\",,,[7,8,9,10,11],[5,6]],[,,\"8[1-35-9]\\\\d{7,10}\",,,,\"812345678\",,,[9,10,11,12]],[,,\"00(?:1803\\\\d{5,11}|7803\\\\d{7})|(?:177\\\\d|800)\\\\d{5,7}\",,,,\"8001234567\",,,[8,9,10,11,12,13,14,15,16,17]],[,,\"809\\\\d{7}\",,,,\"8091234567\",,,[10]],[,,\"804\\\\d{7}\",,,,\"8041234567\",,,[10]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],\"ID\",62,\"00[89]\",\"0\",,,\"0\",,,,[[,\"(\\\\d)(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"15\"]],[,\"(\\\\d{2})(\\\\d{5,9})\",\"$1 $2\",[\"2[124]|[36]1\"],\"(0$1)\"],[,\"(\\\\d{3})(\\\\d{5,7})\",\"$1 $2\",[\"800\"],\"0$1\"],[,\"(\\\\d{3})(\\\\d{5,8})\",\n\"$1 $2\",[\"[2-79]\"],\"(0$1)\"],[,\"(\\\\d{3})(\\\\d{3,4})(\\\\d{3})\",\"$1-$2-$3\",[\"8[1-35-9]\"],\"0$1\"],[,\"(\\\\d{3})(\\\\d{6,8})\",\"$1 $2\",[\"1\"],\"0$1\"],[,\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"804\"],\"0$1\"],[,\"(\\\\d{3})(\\\\d)(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"80\"],\"0$1\"],[,\"(\\\\d{3})(\\\\d{4})(\\\\d{4,5})\",\"$1-$2-$3\",[\"8\"],\"0$1\"],[,\"(\\\\d{3})(\\\\d{3})(\\\\d{3})(\\\\d{2,8})\",\"$1 $2 $3 $4\",[\"001\"]],[,\"(\\\\d{2})(\\\\d{4})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3 $4\",[\"0\"]]],[[,\"(\\\\d)(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"15\"]],[,\"(\\\\d{2})(\\\\d{5,9})\",\"$1 $2\",\n[\"2[124]|[36]1\"],\"(0$1)\"],[,\"(\\\\d{3})(\\\\d{5,7})\",\"$1 $2\",[\"800\"],\"0$1\"],[,\"(\\\\d{3})(\\\\d{5,8})\",\"$1 $2\",[\"[2-79]\"],\"(0$1)\"],[,\"(\\\\d{3})(\\\\d{3,4})(\\\\d{3})\",\"$1-$2-$3\",[\"8[1-35-9]\"],\"0$1\"],[,\"(\\\\d{3})(\\\\d{6,8})\",\"$1 $2\",[\"1\"],\"0$1\"],[,\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"804\"],\"0$1\"],[,\"(\\\\d{3})(\\\\d)(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"80\"],\"0$1\"],[,\"(\\\\d{3})(\\\\d{4})(\\\\d{4,5})\",\"$1-$2-$3\",[\"8\"],\"0$1\"]],[,,,,,,,,,[-1]],,,[,,\"001803\\\\d{5,11}|(?:007803\\\\d|8071)\\\\d{6}\",,,,,,,[10,11,12,13,14,15,16,17]],[,\n,\"(?:1500|8071\\\\d{3})\\\\d{3}\",,,,\"8071123456\",,,[7,10]],,,[,,,,,,,,,[-1]]],IE:[,[,,\"(?:1\\\\d|[2569])\\\\d{6,8}|4\\\\d{6,9}|7\\\\d{8}|8\\\\d{8,9}\",,,,,,,[7,8,9,10],[5,6]],[,,\"(?:1\\\\d|21)\\\\d{6,7}|(?:2[24-9]|4(?:0[24]|5\\\\d|7)|5(?:0[45]|1\\\\d|8)|6(?:1\\\\d|[237-9])|9(?:1\\\\d|[35-9]))\\\\d{5}|(?:23|4(?:[1-469]|8\\\\d)|5[23679]|6[4-6]|7[14]|9[04])\\\\d{7}\",,,,\"2212345\",,,,[5,6]],[,,\"8(?:22|[35-9]\\\\d)\\\\d{6}\",,,,\"850123456\",,,[9]],[,,\"1800\\\\d{6}\",,,,\"1800123456\",,,[10]],[,,\"15(?:1[2-8]|[2-8]0|9[089])\\\\d{6}\",,,,\"1520123456\",\n,,[10]],[,,\"18[59]0\\\\d{6}\",,,,\"1850123456\",,,[10]],[,,\"700\\\\d{6}\",,,,\"700123456\",,,[9]],[,,\"76\\\\d{7}\",,,,\"761234567\",,,[9]],\"IE\",353,\"00\",\"0\",,,\"0\",,,,[[,\"(\\\\d{2})(\\\\d{5})\",\"$1 $2\",[\"2[24-9]|47|58|6[237-9]|9[35-9]\"],\"(0$1)\"],[,\"(\\\\d{3})(\\\\d{5})\",\"$1 $2\",[\"[45]0\"],\"(0$1)\"],[,\"(\\\\d)(\\\\d{3,4})(\\\\d{4})\",\"$1 $2 $3\",[\"1\"],\"(0$1)\"],[,\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[2569]|4[1-69]|7[14]\"],\"(0$1)\"],[,\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"70\"],\"0$1\"],[,\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"81\"],\n\"(0$1)\"],[,\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[78]\"],\"0$1\"],[,\"(\\\\d{4})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"1\"]],[,\"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"4\"],\"(0$1)\"],[,\"(\\\\d{2})(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3 $4\",[\"8\"],\"0$1\"]],,[,,,,,,,,,[-1]],,,[,,\"18[59]0\\\\d{6}\",,,,,,,[10]],[,,\"818\\\\d{6}\",,,,\"818123456\",,,[9]],,,[,,\"88210[1-9]\\\\d{4}|8(?:[35-79]5\\\\d\\\\d|8(?:[013-9]\\\\d\\\\d|2(?:[01][1-9]|[2-9]\\\\d)))\\\\d{5}\",,,,\"8551234567\",,,[10]]],IL:[,[,,\"1\\\\d{6}(?:\\\\d{3,5})?|[57]\\\\d{8}|[1-489]\\\\d{7}\",,,,,,,[7,8,\n9,10,11,12]],[,,\"153\\\\d{8,9}|29[1-9]\\\\d{5}|(?:2[0-8]|[3489]\\\\d)\\\\d{6}\",,,,\"21234567\",,,[8,11,12],[7]],[,,\"55(?:410|57[0-289])\\\\d{4}|5(?:(?:[0-2][02-9]|[36]\\\\d|[49][2-9]|8[3-7])\\\\d|5(?:01|2\\\\d|3[0-3]|4[34]|5[0-25689]|6[6-8]|7[0-267]|8[7-9]|9[1-9]))\\\\d{5}\",,,,\"502345678\",,,[9]],[,,\"1(?:255|80[019]\\\\d{3})\\\\d{3}\",,,,\"1800123456\",,,[7,10]],[,,\"1212\\\\d{4}|1(?:200|9(?:0[0-2]|19))\\\\d{6}\",,,,\"1919123456\",,,[8,10]],[,,\"1700\\\\d{6}\",,,,\"1700123456\",,,[10]],[,,,,,,,,,[-1]],[,,\"7(?:38(?:0\\\\d|5[0-2569]|88)|8(?:33|55|77|81)\\\\d)\\\\d{4}|7(?:18|2[23]|3[237]|47|6[258]|7\\\\d|82|9[2-9])\\\\d{6}\",\n,,,\"771234567\",,,[9]],\"IL\",972,\"0(?:0|1[2-9])\",\"0\",,,\"0\",,,,[[,\"(\\\\d{4})(\\\\d{3})\",\"$1-$2\",[\"125\"]],[,\"(\\\\d{4})(\\\\d{2})(\\\\d{2})\",\"$1-$2-$3\",[\"121\"]],[,\"(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1-$2-$3\",[\"[2-489]\"],\"0$1\"],[,\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1-$2-$3\",[\"[57]\"],\"0$1\"],[,\"(\\\\d{4})(\\\\d{3})(\\\\d{3})\",\"$1-$2-$3\",[\"12\"]],[,\"(\\\\d{4})(\\\\d{6})\",\"$1-$2\",[\"159\"]],[,\"(\\\\d)(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1-$2-$3-$4\",[\"1[7-9]\"]],[,\"(\\\\d{3})(\\\\d{1,2})(\\\\d{3})(\\\\d{4})\",\"$1-$2 $3-$4\",[\"15\"]]],,[,,,,,,,,,[-1]],,,[,,\"1700\\\\d{6}\",\n,,,,,,[10]],[,,\"1599\\\\d{6}\",,,,\"1599123456\",,,[10]],,,[,,\"151\\\\d{8,9}\",,,,\"15112340000\",,,[11,12]]],IM:[,[,,\"1624\\\\d{6}|(?:[3578]\\\\d|90)\\\\d{8}\",,,,,,,[10],[6]],[,,\"1624(?:230|[5-8]\\\\d\\\\d)\\\\d{3}\",,,,\"1624756789\",,,,[6]],[,,\"76245[06]\\\\d{4}|7(?:4576|[59]24\\\\d|624[0-4689])\\\\d{5}\",,,,\"7924123456\"],[,,\"808162\\\\d{4}\",,,,\"8081624567\"],[,,\"8(?:440[49]06|72299\\\\d)\\\\d{3}|(?:8(?:45|70)|90[0167])624\\\\d{4}\",,,,\"9016247890\"],[,,,,,,,,,[-1]],[,,\"70\\\\d{8}\",,,,\"7012345678\"],[,,\"56\\\\d{8}\",,,,\"5612345678\"],\"IM\",44,\n\"00\",\"0\",,,\"([25-8]\\\\d{5})$|0\",\"1624$1\",,,,,[,,,,,,,,,[-1]],,\"74576|(?:16|7[56])24\",[,,,,,,,,,[-1]],[,,\"3440[49]06\\\\d{3}|(?:3(?:08162|3\\\\d{4}|45624|7(?:0624|2299))|55\\\\d{4})\\\\d{4}\",,,,\"5512345678\"],,,[,,,,,,,,,[-1]]],IN:[,[,,\"(?:000800|[2-9]\\\\d\\\\d)\\\\d{7}|1\\\\d{7,12}\",,,,,,,[8,9,10,11,12,13],[6,7]],[,,\"2717(?:[2-7]\\\\d|95)\\\\d{4}|(?:271[0-689]|782[0-6])[2-7]\\\\d{5}|(?:170[24]|2(?:(?:[02][2-79]|90)\\\\d|80[13468])|(?:3(?:23|80)|683|79[1-7])\\\\d|4(?:20[24]|72[2-8])|552[1-7])\\\\d{6}|(?:11|33|4[04]|80)[2-7]\\\\d{7}|(?:342|674|788)(?:[0189][2-7]|[2-7]\\\\d)\\\\d{5}|(?:1(?:2[0-249]|3[0-25]|4[145]|[59][14]|6[014]|7[1257]|8[01346])|2(?:1[257]|3[013]|4[01]|5[0137]|6[0158]|78|8[1568]|9[14])|3(?:26|4[13]|5[34]|6[01489]|7[02-46]|8[159])|4(?:1[36]|2[1-47]|3[15]|5[12]|6[0-26-9]|7[014-9]|8[013-57]|9[014-7])|5(?:1[025]|22|[36][25]|4[28]|[578]1|9[15])|6(?:12|[2-47]1|5[17]|6[13]|80)|7(?:12|2[14]|3[134]|4[47]|5[15]|[67]1)|8(?:16|2[014]|3[126]|6[136]|7[078]|8[34]|91))[2-7]\\\\d{6}|(?:1(?:2[35-8]|3[346-9]|4[236-9]|[59][0235-9]|6[235-9]|7[34689]|8[257-9])|2(?:1[134689]|3[24-8]|4[2-8]|5[25689]|6[2-4679]|7[3-79]|8[2-479]|9[235-9])|3(?:01|1[79]|2[1245]|4[5-8]|5[125689]|6[235-7]|7[157-9]|8[2-46-8])|4(?:1[14578]|2[5689]|3[2-467]|5[4-7]|6[35]|73|8[2689]|9[2389])|5(?:[16][146-9]|2[14-8]|3[1346]|4[14-69]|5[46]|7[2-4]|8[2-8]|9[246])|6(?:1[1358]|2[2457]|3[2-4]|4[235-7]|5[2-689]|6[24578]|7[235689]|8[124-6])|7(?:1[013-9]|2[0235-9]|3[2679]|4[1-35689]|5[2-46-9]|[67][02-9]|8[013-7]|9[089])|8(?:1[1357-9]|2[235-8]|3[03-57-9]|4[0-24-9]|5\\\\d|6[2457-9]|7[1-6]|8[1256]|9[2-4]))\\\\d[2-7]\\\\d{5}\",\n,,,\"7410410123\",,,[10],[6,7,8]],[,,\"(?:61279|7(?:887[02-9]|9(?:313|79[07-9]))|8(?:079[04-9]|(?:84|91)7[02-8]))\\\\d{5}|(?:6(?:12|[2-47]1|5[17]|6[13]|80)[0189]|7(?:1(?:2[0189]|9[0-5])|2(?:[14][017-9]|8[0-59])|3(?:2[5-8]|[34][017-9]|9[016-9])|4(?:1[015-9]|[29][89]|39|8[389])|5(?:[15][017-9]|2[04-9]|9[7-9])|6(?:0[0-47]|1[0-257-9]|2[0-4]|3[19]|5[4589])|70[0289]|88[089]|97[02-8])|8(?:0(?:6[67]|7[02-8])|70[017-9]|84[01489]|91[0-289]))\\\\d{6}|(?:7(?:31|4[47])|8(?:16|2[014]|3[126]|6[136]|7[78]|83))(?:[0189]\\\\d|7[02-8])\\\\d{5}|(?:6(?:[09]\\\\d|1[04679]|2[03689]|3[05-9]|4[0489]|50|6[069]|7[07]|8[7-9])|7(?:0\\\\d|2[0235-79]|3[05-8]|40|5[0346-8]|6[6-9]|7[1-9]|8[0-79]|9[089])|8(?:0[01589]|1[0-57-9]|2[235-9]|3[03-57-9]|[45]\\\\d|6[02457-9]|7[1-69]|8[0-25-9]|9[02-9])|9\\\\d\\\\d)\\\\d{7}|(?:6(?:(?:1[1358]|2[2457]|3[2-4]|4[235-7]|5[2-689]|6[24578]|8[124-6])\\\\d|7(?:[235689]\\\\d|4[0189]))|7(?:1(?:[013-8]\\\\d|9[6-9])|28[6-8]|3(?:2[0-49]|9[2-5])|4(?:1[2-4]|[29][0-7]|3[0-8]|[56]\\\\d|8[0-24-7])|5(?:2[1-3]|9[0-6])|6(?:0[5689]|2[5-9]|3[02-8]|4\\\\d|5[0-367])|70[13-7]|881))[0189]\\\\d{5}\",\n,,,\"8123456789\",,,[10]],[,,\"000800\\\\d{7}|1(?:600\\\\d{6}|80(?:0\\\\d{4,9}|3\\\\d{9}))\",,,,\"1800123456\"],[,,\"186[12]\\\\d{9}\",,,,\"1861123456789\",,,[13]],[,,\"1860\\\\d{7}\",,,,\"18603451234\",,,[11]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],\"IN\",91,\"00\",\"0\",,,\"0\",,,,[[,\"(\\\\d{7})\",\"$1\",[\"575\"]],[,\"(\\\\d{8})\",\"$1\",[\"5(?:0|2[23]|3[03]|[67]1|88)\",\"5(?:0|2(?:21|3)|3(?:0|3[23])|616|717|888)\",\"5(?:0|2(?:21|3)|3(?:0|3[23])|616|717|8888)\"],,,1],[,\"(\\\\d{4})(\\\\d{4,5})\",\"$1 $2\",[\"180\",\"1800\"],,,1],[,\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",\n[\"140\"],,,1],[,\"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"11|2[02]|33|4[04]|79[1-7]|80[2-46]\",\"11|2[02]|33|4[04]|79(?:[1-6]|7[19])|80(?:[2-4]|6[0-589])\",\"11|2[02]|33|4[04]|79(?:[124-6]|3(?:[02-9]|1[0-24-9])|7(?:1|9[1-6]))|80(?:[2-4]|6[0-589])\"],\"0$1\",,1],[,\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"1(?:2[0-249]|3[0-25]|4[145]|[68]|7[1257])|2(?:1[257]|3[013]|4[01]|5[0137]|6[0158]|78|8[1568])|3(?:26|4[1-3]|5[34]|6[01489]|7[02-46]|8[159])|4(?:1[36]|2[1-47]|5[12]|6[0-26-9]|7[0-24-9]|8[013-57]|9[014-7])|5(?:1[025]|22|[36][25]|4[28]|5[12]|[78]1)|6(?:12|[2-4]1|5[17]|6[13]|80)|7(?:12|3[134]|4[47]|61|88)|8(?:16|2[014]|3[126]|6[136]|7[078]|8[34]|91)|(?:43|59|75)[15]|(?:1[59]|29|67|72)[14]\",\n\"1(?:2[0-24]|3[0-25]|4[145]|[59][14]|6[1-9]|7[1257]|8[1-57-9])|2(?:1[257]|3[013]|4[01]|5[0137]|6[058]|78|8[1568]|9[14])|3(?:26|4[1-3]|5[34]|6[01489]|7[02-46]|8[159])|4(?:1[36]|2[1-47]|3[15]|5[12]|6[0-26-9]|7[0-24-9]|8[013-57]|9[014-7])|5(?:1[025]|22|[36][25]|4[28]|[578]1|9[15])|674|7(?:(?:2[14]|3[34]|5[15])[2-6]|61[346]|88[0-8])|8(?:70[2-6]|84[235-7]|91[3-7])|(?:1(?:29|60|8[06])|261|552|6(?:12|[2-47]1|5[17]|6[13]|80)|7(?:12|31|4[47])|8(?:16|2[014]|3[126]|6[136]|7[78]|83))[2-7]\",\"1(?:2[0-24]|3[0-25]|4[145]|[59][14]|6[1-9]|7[1257]|8[1-57-9])|2(?:1[257]|3[013]|4[01]|5[0137]|6[058]|78|8[1568]|9[14])|3(?:26|4[1-3]|5[34]|6[01489]|7[02-46]|8[159])|4(?:1[36]|2[1-47]|3[15]|5[12]|6[0-26-9]|7[0-24-9]|8[013-57]|9[014-7])|5(?:1[025]|22|[36][25]|4[28]|[578]1|9[15])|6(?:12(?:[2-6]|7[0-8])|74[2-7])|7(?:(?:2[14]|5[15])[2-6]|3171|61[346]|88(?:[2-7]|82))|8(?:70[2-6]|84(?:[2356]|7[19])|91(?:[3-6]|7[19]))|73[134][2-6]|(?:74[47]|8(?:16|2[014]|3[126]|6[136]|7[78]|83))(?:[2-6]|7[19])|(?:1(?:29|60|8[06])|261|552|6(?:[2-4]1|5[17]|6[13]|7(?:1|4[0189])|80)|7(?:12|88[01]))[2-7]\"],\n\"0$1\",,1],[,\"(\\\\d{4})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"1(?:[2-479]|5[0235-9])|[2-5]|6(?:1[1358]|2[2457-9]|3[2-5]|4[235-7]|5[2-689]|6[24578]|7[235689]|8[1-6])|7(?:1[013-9]|28|3[129]|4[1-35689]|5[29]|6[02-5]|70)|807\",\"1(?:[2-479]|5[0235-9])|[2-5]|6(?:1[1358]|2(?:[2457]|84|95)|3(?:[2-4]|55)|4[235-7]|5[2-689]|6[24578]|7[235689]|8[1-6])|7(?:1(?:[013-8]|9[6-9])|28[6-8]|3(?:17|2[0-49]|9[2-57])|4(?:1[2-4]|[29][0-7]|3[0-8]|[56]|8[0-24-7])|5(?:2[1-3]|9[0-6])|6(?:0[5689]|2[5-9]|3[02-8]|4|5[0-367])|70[13-7])|807[19]\",\n\"1(?:[2-479]|5(?:[0236-9]|5[013-9]))|[2-5]|6(?:2(?:84|95)|355|83)|73179|807(?:1|9[1-3])|(?:1552|6(?:1[1358]|2[2457]|3[2-4]|4[235-7]|5[2-689]|6[24578]|7[235689]|8[124-6])\\\\d|7(?:1(?:[013-8]\\\\d|9[6-9])|28[6-8]|3(?:2[0-49]|9[2-57])|4(?:1[2-4]|[29][0-7]|3[0-8]|[56]\\\\d|8[0-24-7])|5(?:2[1-3]|9[0-6])|6(?:0[5689]|2[5-9]|3[02-8]|4\\\\d|5[0-367])|70[13-7]))[2-7]\"],\"0$1\",,1],[,\"(\\\\d{5})(\\\\d{5})\",\"$1 $2\",[\"[6-9]\"],\"0$1\",,1],[,\"(\\\\d{4})(\\\\d{2,4})(\\\\d{4})\",\"$1 $2 $3\",[\"1(?:6|8[06])\",\"1(?:6|8[06]0)\"],,,1],[,\"(\\\\d{3})(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\n\"$1 $2 $3 $4\",[\"0\"]],[,\"(\\\\d{4})(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"18\"],,,1]],[[,\"(\\\\d{8})\",\"$1\",[\"5(?:0|2[23]|3[03]|[67]1|88)\",\"5(?:0|2(?:21|3)|3(?:0|3[23])|616|717|888)\",\"5(?:0|2(?:21|3)|3(?:0|3[23])|616|717|8888)\"],,,1],[,\"(\\\\d{4})(\\\\d{4,5})\",\"$1 $2\",[\"180\",\"1800\"],,,1],[,\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"140\"],,,1],[,\"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"11|2[02]|33|4[04]|79[1-7]|80[2-46]\",\"11|2[02]|33|4[04]|79(?:[1-6]|7[19])|80(?:[2-4]|6[0-589])\",\"11|2[02]|33|4[04]|79(?:[124-6]|3(?:[02-9]|1[0-24-9])|7(?:1|9[1-6]))|80(?:[2-4]|6[0-589])\"],\n\"0$1\",,1],[,\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"1(?:2[0-249]|3[0-25]|4[145]|[68]|7[1257])|2(?:1[257]|3[013]|4[01]|5[0137]|6[0158]|78|8[1568])|3(?:26|4[1-3]|5[34]|6[01489]|7[02-46]|8[159])|4(?:1[36]|2[1-47]|5[12]|6[0-26-9]|7[0-24-9]|8[013-57]|9[014-7])|5(?:1[025]|22|[36][25]|4[28]|5[12]|[78]1)|6(?:12|[2-4]1|5[17]|6[13]|80)|7(?:12|3[134]|4[47]|61|88)|8(?:16|2[014]|3[126]|6[136]|7[078]|8[34]|91)|(?:43|59|75)[15]|(?:1[59]|29|67|72)[14]\",\"1(?:2[0-24]|3[0-25]|4[145]|[59][14]|6[1-9]|7[1257]|8[1-57-9])|2(?:1[257]|3[013]|4[01]|5[0137]|6[058]|78|8[1568]|9[14])|3(?:26|4[1-3]|5[34]|6[01489]|7[02-46]|8[159])|4(?:1[36]|2[1-47]|3[15]|5[12]|6[0-26-9]|7[0-24-9]|8[013-57]|9[014-7])|5(?:1[025]|22|[36][25]|4[28]|[578]1|9[15])|674|7(?:(?:2[14]|3[34]|5[15])[2-6]|61[346]|88[0-8])|8(?:70[2-6]|84[235-7]|91[3-7])|(?:1(?:29|60|8[06])|261|552|6(?:12|[2-47]1|5[17]|6[13]|80)|7(?:12|31|4[47])|8(?:16|2[014]|3[126]|6[136]|7[78]|83))[2-7]\",\n\"1(?:2[0-24]|3[0-25]|4[145]|[59][14]|6[1-9]|7[1257]|8[1-57-9])|2(?:1[257]|3[013]|4[01]|5[0137]|6[058]|78|8[1568]|9[14])|3(?:26|4[1-3]|5[34]|6[01489]|7[02-46]|8[159])|4(?:1[36]|2[1-47]|3[15]|5[12]|6[0-26-9]|7[0-24-9]|8[013-57]|9[014-7])|5(?:1[025]|22|[36][25]|4[28]|[578]1|9[15])|6(?:12(?:[2-6]|7[0-8])|74[2-7])|7(?:(?:2[14]|5[15])[2-6]|3171|61[346]|88(?:[2-7]|82))|8(?:70[2-6]|84(?:[2356]|7[19])|91(?:[3-6]|7[19]))|73[134][2-6]|(?:74[47]|8(?:16|2[014]|3[126]|6[136]|7[78]|83))(?:[2-6]|7[19])|(?:1(?:29|60|8[06])|261|552|6(?:[2-4]1|5[17]|6[13]|7(?:1|4[0189])|80)|7(?:12|88[01]))[2-7]\"],\n\"0$1\",,1],[,\"(\\\\d{4})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"1(?:[2-479]|5[0235-9])|[2-5]|6(?:1[1358]|2[2457-9]|3[2-5]|4[235-7]|5[2-689]|6[24578]|7[235689]|8[1-6])|7(?:1[013-9]|28|3[129]|4[1-35689]|5[29]|6[02-5]|70)|807\",\"1(?:[2-479]|5[0235-9])|[2-5]|6(?:1[1358]|2(?:[2457]|84|95)|3(?:[2-4]|55)|4[235-7]|5[2-689]|6[24578]|7[235689]|8[1-6])|7(?:1(?:[013-8]|9[6-9])|28[6-8]|3(?:17|2[0-49]|9[2-57])|4(?:1[2-4]|[29][0-7]|3[0-8]|[56]|8[0-24-7])|5(?:2[1-3]|9[0-6])|6(?:0[5689]|2[5-9]|3[02-8]|4|5[0-367])|70[13-7])|807[19]\",\n\"1(?:[2-479]|5(?:[0236-9]|5[013-9]))|[2-5]|6(?:2(?:84|95)|355|83)|73179|807(?:1|9[1-3])|(?:1552|6(?:1[1358]|2[2457]|3[2-4]|4[235-7]|5[2-689]|6[24578]|7[235689]|8[124-6])\\\\d|7(?:1(?:[013-8]\\\\d|9[6-9])|28[6-8]|3(?:2[0-49]|9[2-57])|4(?:1[2-4]|[29][0-7]|3[0-8]|[56]\\\\d|8[0-24-7])|5(?:2[1-3]|9[0-6])|6(?:0[5689]|2[5-9]|3[02-8]|4\\\\d|5[0-367])|70[13-7]))[2-7]\"],\"0$1\",,1],[,\"(\\\\d{5})(\\\\d{5})\",\"$1 $2\",[\"[6-9]\"],\"0$1\",,1],[,\"(\\\\d{4})(\\\\d{2,4})(\\\\d{4})\",\"$1 $2 $3\",[\"1(?:6|8[06])\",\"1(?:6|8[06]0)\"],,,1],[,\"(\\\\d{4})(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\n\"$1 $2 $3 $4\",[\"18\"],,,1]],[,,,,,,,,,[-1]],,,[,,\"1(?:600\\\\d{6}|800\\\\d{4,9})|(?:000800|18(?:03\\\\d\\\\d|6(?:0|[12]\\\\d\\\\d)))\\\\d{7}\"],[,,\"140\\\\d{7}\",,,,\"1409305260\",,,[10]],,,[,,,,,,,,,[-1]]],IO:[,[,,\"3\\\\d{6}\",,,,,,,[7]],[,,\"37\\\\d{5}\",,,,\"3709100\"],[,,\"38\\\\d{5}\",,,,\"3801234\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],\"IO\",246,\"00\",,,,,,,,[[,\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"3\"]]],,[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],IQ:[,[,,\"(?:1|7\\\\d\\\\d)\\\\d{7}|[2-6]\\\\d{7,8}\",\n,,,,,,[8,9,10],[6,7]],[,,\"1\\\\d{7}|(?:2[13-5]|3[02367]|4[023]|5[03]|6[026])\\\\d{6,7}\",,,,\"12345678\",,,[8,9],[6,7]],[,,\"7[3-9]\\\\d{8}\",,,,\"7912345678\",,,[10]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],\"IQ\",964,\"00\",\"0\",,,\"0\",,,,[[,\"(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"1\"],\"0$1\"],[,\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[2-6]\"],\"0$1\"],[,\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"7\"],\"0$1\"]],,[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],IR:[,\n[,,\"[1-9]\\\\d{9}|(?:[1-8]\\\\d\\\\d|9)\\\\d{3,4}\",,,,,,,[4,5,6,7,10],[8]],[,,\"(?:1[137]|2[13-68]|3[1458]|4[145]|5[1468]|6[16]|7[1467]|8[13467])(?:[03-57]\\\\d{7}|[16]\\\\d{3}(?:\\\\d{4})?|[289]\\\\d{3}(?:\\\\d(?:\\\\d{3})?)?)|94(?:000[09]|(?:12\\\\d|30[0-2])\\\\d|2(?:121|[2689]0\\\\d)|4(?:111|40\\\\d))\\\\d{4}\",,,,\"2123456789\",,,[6,7,10],[4,5,8]],[,,\"9(?:(?:0(?:[0-35]\\\\d|4[4-6])|(?:[13]\\\\d|2[0-3])\\\\d)\\\\d|9(?:[0-46]\\\\d\\\\d|5[15]0|8(?:[12]\\\\d|88)|9(?:0[0-3]|[19]\\\\d|21|69|77|8[7-9])))\\\\d{5}\",,,,\"9123456789\",,,[10]],[,,,,,,,,,[-1]],\n[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],\"IR\",98,\"00\",\"0\",,,\"0\",,,,[[,\"(\\\\d{4,5})\",\"$1\",[\"96\"],\"0$1\"],[,\"(\\\\d{2})(\\\\d{4,5})\",\"$1 $2\",[\"(?:1[137]|2[13-68]|3[1458]|4[145]|5[1468]|6[16]|7[1467]|8[13467])[12689]\"],\"0$1\"],[,\"(\\\\d{3})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"9\"],\"0$1\"],[,\"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"[1-8]\"],\"0$1\"]],,[,,,,,,,,,[-1]],,,[,,\"9(?:4440\\\\d{5}|6(?:0[12]|2[16-8]|3(?:08|[14]5|[23]|66)|4(?:0|80)|5[01]|6[89]|86|9[19]))\",,,,,,,[4,5,10]],[,,\"96(?:0[12]|2[16-8]|3(?:08|[14]5|[23]|66)|4(?:0|80)|5[01]|6[89]|86|9[19])\",\n,,,\"9601\",,,[4,5]],,,[,,,,,,,,,[-1]]],IS:[,[,,\"(?:38\\\\d|[4-9])\\\\d{6}\",,,,,,,[7,9]],[,,\"(?:4(?:1[0-24-69]|2[0-7]|[37][0-8]|4[0-24589]|5[0-68]|6\\\\d|8[0-36-8])|5(?:05|[156]\\\\d|2[02578]|3[0-579]|4[03-7]|7[0-2578]|8[0-35-9]|9[013-689])|872)\\\\d{4}\",,,,\"4101234\",,,[7]],[,,\"(?:38[589]\\\\d\\\\d|6(?:1[1-8]|2[0-6]|3[026-9]|4[014679]|5[0159]|6[0-69]|70|8[06-8]|9\\\\d)|7(?:5[057]|[6-9]\\\\d)|8(?:2[0-59]|[3-69]\\\\d|8[238]))\\\\d{4}\",,,,\"6111234\"],[,,\"80[0-8]\\\\d{4}\",,,,\"8001234\",,,[7]],[,,\"90(?:0\\\\d|1[5-79]|2[015-79]|3[135-79]|4[125-7]|5[25-79]|7[1-37]|8[0-35-7])\\\\d{3}\",\n,,,\"9001234\",,,[7]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,\"49[0-24-79]\\\\d{4}\",,,,\"4921234\",,,[7]],\"IS\",354,\"00|1(?:0(?:01|[12]0)|100)\",,,,,,\"00\",,[[,\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[4-9]\"]],[,\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"3\"]]],,[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,\"809\\\\d{4}\",,,,\"8091234\",,,[7]],,,[,,\"(?:689|8(?:7[18]|80)|95[48])\\\\d{4}\",,,,\"6891234\",,,[7]]],IT:[,[,,\"0\\\\d{5,10}|1\\\\d{8,10}|3(?:[0-8]\\\\d{7,10}|9\\\\d{7,8})|(?:43|55|70)\\\\d{8}|8\\\\d{5}(?:\\\\d{2,4})?\",,,,,,,[6,7,8,9,10,11,12]],[,,\"0669[0-79]\\\\d{1,6}|0(?:1(?:[0159]\\\\d|[27][1-5]|31|4[1-4]|6[1356]|8[2-57])|2\\\\d\\\\d|3(?:[0159]\\\\d|2[1-4]|3[12]|[48][1-6]|6[2-59]|7[1-7])|4(?:[0159]\\\\d|[23][1-9]|4[245]|6[1-5]|7[1-4]|81)|5(?:[0159]\\\\d|2[1-5]|3[2-6]|4[1-79]|6[4-6]|7[1-578]|8[3-8])|6(?:[0-57-9]\\\\d|6[0-8])|7(?:[0159]\\\\d|2[12]|3[1-7]|4[2-46]|6[13569]|7[13-6]|8[1-59])|8(?:[0159]\\\\d|2[3-578]|3[1-356]|[6-8][1-5])|9(?:[0159]\\\\d|[238][1-5]|4[12]|6[1-8]|7[1-6]))\\\\d{2,7}\",\n,,,\"0212345678\",,,[6,7,8,9,10,11]],[,,\"3[2-9]\\\\d{7,8}|(?:31|43)\\\\d{8}\",,,,\"3123456789\",,,[9,10]],[,,\"80(?:0\\\\d{3}|3)\\\\d{3}\",,,,\"800123456\",,,[6,9]],[,,\"(?:0878\\\\d{3}|89(?:2\\\\d|3[04]|4(?:[0-4]|[5-9]\\\\d\\\\d)|5[0-4]))\\\\d\\\\d|(?:1(?:44|6[346])|89(?:38|5[5-9]|9))\\\\d{6}\",,,,\"899123456\",,,[6,8,9,10]],[,,\"84(?:[08]\\\\d{3}|[17])\\\\d{3}\",,,,\"848123456\",,,[6,9]],[,,\"1(?:78\\\\d|99)\\\\d{6}\",,,,\"1781234567\",,,[9,10]],[,,\"55\\\\d{8}\",,,,\"5512345678\",,,[10]],\"IT\",39,\"00\",,,,,,,,[[,\"(\\\\d{4,5})\",\"$1\",[\"1(?:0|9[246])\",\"1(?:0|9(?:2[2-9]|[46]))\"]],\n[,\"(\\\\d{6})\",\"$1\",[\"1(?:1|92)\"]],[,\"(\\\\d{2})(\\\\d{4,6})\",\"$1 $2\",[\"0[26]\"]],[,\"(\\\\d{3})(\\\\d{3,6})\",\"$1 $2\",[\"0[13-57-9][0159]|8(?:03|4[17]|9[2-5])\",\"0[13-57-9][0159]|8(?:03|4[17]|9(?:2|3[04]|[45][0-4]))\"]],[,\"(\\\\d{4})(\\\\d{2,6})\",\"$1 $2\",[\"0(?:[13-579][2-46-8]|8[236-8])\"]],[,\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"894\"]],[,\"(\\\\d{2})(\\\\d{3,4})(\\\\d{4})\",\"$1 $2 $3\",[\"0[26]|5\"]],[,\"(\\\\d{3})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"1(?:44|[679])|[378]|43\"]],[,\"(\\\\d{3})(\\\\d{3,4})(\\\\d{4})\",\"$1 $2 $3\",[\"0[13-57-9][0159]|14\"]],\n[,\"(\\\\d{2})(\\\\d{4})(\\\\d{5})\",\"$1 $2 $3\",[\"0[26]\"]],[,\"(\\\\d{4})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"0\"]],[,\"(\\\\d{3})(\\\\d{4})(\\\\d{4,5})\",\"$1 $2 $3\",[\"3\"]]],[[,\"(\\\\d{2})(\\\\d{4,6})\",\"$1 $2\",[\"0[26]\"]],[,\"(\\\\d{3})(\\\\d{3,6})\",\"$1 $2\",[\"0[13-57-9][0159]|8(?:03|4[17]|9[2-5])\",\"0[13-57-9][0159]|8(?:03|4[17]|9(?:2|3[04]|[45][0-4]))\"]],[,\"(\\\\d{4})(\\\\d{2,6})\",\"$1 $2\",[\"0(?:[13-579][2-46-8]|8[236-8])\"]],[,\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"894\"]],[,\"(\\\\d{2})(\\\\d{3,4})(\\\\d{4})\",\"$1 $2 $3\",[\"0[26]|5\"]],[,\"(\\\\d{3})(\\\\d{3})(\\\\d{3,4})\",\n\"$1 $2 $3\",[\"1(?:44|[679])|[378]|43\"]],[,\"(\\\\d{3})(\\\\d{3,4})(\\\\d{4})\",\"$1 $2 $3\",[\"0[13-57-9][0159]|14\"]],[,\"(\\\\d{2})(\\\\d{4})(\\\\d{5})\",\"$1 $2 $3\",[\"0[26]\"]],[,\"(\\\\d{4})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"0\"]],[,\"(\\\\d{3})(\\\\d{4})(\\\\d{4,5})\",\"$1 $2 $3\",[\"3\"]]],[,,,,,,,,,[-1]],1,,[,,\"848\\\\d{6}\",,,,,,,[9]],[,,,,,,,,,[-1]],,,[,,\"3[2-8]\\\\d{9,10}\",,,,\"33101234501\",,,[11,12]]],JE:[,[,,\"1534\\\\d{6}|(?:[3578]\\\\d|90)\\\\d{8}\",,,,,,,[10],[6]],[,,\"1534[0-24-8]\\\\d{5}\",,,,\"1534456789\",,,,[6]],[,,\"7(?:(?:(?:50|82)9|937)\\\\d|7(?:00[378]|97\\\\d))\\\\d{5}\",\n,,,\"7797712345\"],[,,\"80(?:07(?:35|81)|8901)\\\\d{4}\",,,,\"8007354567\"],[,,\"(?:8(?:4(?:4(?:4(?:05|42|69)|703)|5(?:041|800))|7(?:0002|1206))|90(?:066[59]|1810|71(?:07|55)))\\\\d{4}\",,,,\"9018105678\"],[,,,,,,,,,[-1]],[,,\"701511\\\\d{4}\",,,,\"7015115678\"],[,,\"56\\\\d{8}\",,,,\"5612345678\"],\"JE\",44,\"00\",\"0\",,,\"([0-24-8]\\\\d{5})$|0\",\"1534$1\",,,,,[,,\"76(?:464|652)\\\\d{5}|76(?:0[0-28]|2[356]|34|4[01347]|5[49]|6[0-369]|77|8[14]|9[139])\\\\d{6}\",,,,\"7640123456\"],,,[,,,,,,,,,[-1]],[,,\"(?:3(?:0(?:07(?:35|81)|8901)|3\\\\d{4}|4(?:4(?:4(?:05|42|69)|703)|5(?:041|800))|7(?:0002|1206))|55\\\\d{4})\\\\d{4}\",\n,,,\"5512345678\"],,,[,,,,,,,,,[-1]]],JM:[,[,,\"(?:[58]\\\\d\\\\d|658|900)\\\\d{7}\",,,,,,,[10],[7]],[,,\"8766060\\\\d{3}|(?:658(?:2(?:[0-8]\\\\d|9[0-46-9])|[3-9]\\\\d\\\\d)|876(?:52[35]|6(?:0[1-3579]|1[0235-9]|[23]\\\\d|40|5[06]|6[2-589]|7[0-25-9]|8[04]|9[4-9])|7(?:0[2-689]|[1-6]\\\\d|8[056]|9[45])|9(?:0[1-8]|1[02378]|[2-8]\\\\d|9[2-468])))\\\\d{4}\",,,,\"8765230123\",,,,[7]],[,,\"(?:658295|876(?:2(?:0[1-9]|[13-9]\\\\d|2[013-9])|[348]\\\\d\\\\d|5(?:0[1-9]|[1-9]\\\\d)|6(?:4[89]|6[67])|7(?:0[07]|7\\\\d|8[1-47-9]|9[0-36-9])|9(?:[01]9|9[0579])))\\\\d{4}\",\n,,,\"8762101234\",,,,[7]],[,,\"8(?:00|33|44|55|66|77|88)[2-9]\\\\d{6}\",,,,\"8002123456\"],[,,\"900[2-9]\\\\d{6}\",,,,\"9002123456\"],[,,,,,,,,,[-1]],[,,\"52(?:3(?:[2-46-9][02-9]\\\\d|5(?:[02-46-9]\\\\d|5[0-46-9]))|4(?:[2-478][02-9]\\\\d|5(?:[034]\\\\d|2[024-9]|5[0-46-9])|6(?:0[1-9]|[2-9]\\\\d)|9(?:[05-9]\\\\d|2[0-5]|49)))\\\\d{4}|52[34][2-9]1[02-9]\\\\d{4}|5(?:00|2[125-9]|33|44|66|77|88)[2-9]\\\\d{6}\",,,,\"5002345678\"],[,,,,,,,,,[-1]],\"JM\",1,\"011\",\"1\",,,\"1\",,,,,,[,,,,,,,,,[-1]],,\"658|876\",[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,\n,,,,[-1]]],JO:[,[,,\"(?:(?:[2689]|7\\\\d)\\\\d|32|53)\\\\d{6}\",,,,,,,[8,9]],[,,\"87(?:000|90[01])\\\\d{3}|(?:2(?:6(?:2[0-35-9]|3[0-578]|4[24-7]|5[0-24-8]|[6-8][023]|9[0-3])|7(?:0[1-79]|10|2[014-7]|3[0-689]|4[019]|5[0-3578]))|32(?:0[1-69]|1[1-35-7]|2[024-7]|3\\\\d|4[0-3]|[5-7][023])|53(?:0[0-3]|[13][023]|2[0-59]|49|5[0-35-9]|6[15]|7[45]|8[1-6]|9[0-36-9])|6(?:2(?:[05]0|22)|3(?:00|33)|4(?:0[0-25]|1[2-7]|2[0569]|[38][07-9]|4[025689]|6[0-589]|7\\\\d|9[0-2])|5(?:[01][056]|2[034]|3[0-57-9]|4[178]|5[0-69]|6[0-35-9]|7[1-379]|8[0-68]|9[0239]))|87(?:20|7[078]|99))\\\\d{4}\",\n,,,\"62001234\",,,[8]],[,,\"7(?:[78][0-25-9]|9\\\\d)\\\\d{6}\",,,,\"790123456\",,,[9]],[,,\"80\\\\d{6}\",,,,\"80012345\",,,[8]],[,,\"9\\\\d{7}\",,,,\"90012345\",,,[8]],[,,\"85\\\\d{6}\",,,,\"85012345\",,,[8]],[,,\"70\\\\d{7}\",,,,\"700123456\",,,[9]],[,,,,,,,,,[-1]],\"JO\",962,\"00\",\"0\",,,\"0\",,,,[[,\"(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[2356]|87\"],\"(0$1)\"],[,\"(\\\\d{3})(\\\\d{5,6})\",\"$1 $2\",[\"[89]\"],\"0$1\"],[,\"(\\\\d{2})(\\\\d{7})\",\"$1 $2\",[\"70\"],\"0$1\"],[,\"(\\\\d)(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"7\"],\"0$1\"]],,[,,\"74(?:66|77)\\\\d{5}\",,,,\"746612345\",\n,,[9]],,,[,,,,,,,,,[-1]],[,,\"8(?:10|8\\\\d)\\\\d{5}\",,,,\"88101234\",,,[8]],,,[,,,,,,,,,[-1]]],JP:[,[,,\"00[1-9]\\\\d{6,14}|[257-9]\\\\d{9}|(?:00|[1-9]\\\\d\\\\d)\\\\d{6}\",,,,,,,[8,9,10,11,12,13,14,15,16,17]],[,,\"(?:1(?:1[235-8]|2[3-6]|3[3-9]|4[2-6]|[58][2-8]|6[2-7]|7[2-9]|9[1-9])|(?:2[2-9]|[36][1-9])\\\\d|4(?:[2-578]\\\\d|6[02-8]|9[2-59])|5(?:[2-589]\\\\d|6[1-9]|7[2-8])|7(?:[25-9]\\\\d|3[4-9]|4[02-9])|8(?:[2679]\\\\d|3[2-9]|4[5-9]|5[1-9]|8[03-9])|9(?:[2-58]\\\\d|[679][1-9]))\\\\d{6}\",,,,\"312345678\",,,[9]],[,,\"[7-9]0[1-9]\\\\d{7}\",\n,,,\"9012345678\",,,[10]],[,,\"00777(?:[01]|5\\\\d)\\\\d\\\\d|(?:00(?:7778|882[1245])|(?:120|800\\\\d)\\\\d\\\\d)\\\\d{4}|00(?:37|66|78)\\\\d{6,13}\",,,,\"120123456\"],[,,\"990\\\\d{6}\",,,,\"990123456\",,,[9]],[,,,,,,,,,[-1]],[,,\"60\\\\d{7}\",,,,\"601234567\",,,[9]],[,,\"50[1-9]\\\\d{7}\",,,,\"5012345678\",,,[10]],\"JP\",81,\"010\",\"0\",,,\"(000[259]\\\\d{6})$|(?:(?:003768)0?)|0\",\"$1\",,,[[,\"(\\\\d{4})(\\\\d{4})\",\"$1-$2\",[\"007\",\"0077\",\"00777\",\"00777[01]\"]],[,\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1-$2-$3\",[\"(?:12|57|99)0\"],\"0$1\"],[,\"(\\\\d{4})(\\\\d)(\\\\d{4})\",\n\"$1-$2-$3\",[\"1(?:26|3[79]|4[56]|5[4-68]|6[3-5])|499|5(?:76|97)|746|8(?:3[89]|47|51)|9(?:80|9[16])\",\"1(?:267|3(?:7[247]|9[278])|466|5(?:47|58|64)|6(?:3[245]|48|5[4-68]))|499[2468]|5(?:76|97)9|7468|8(?:3(?:8[7-9]|96)|477|51[2-9])|9(?:802|9(?:1[23]|69))|1(?:45|58)[67]\",\"1(?:267|3(?:7[247]|9[278])|466|5(?:47|58|64)|6(?:3[245]|48|5[4-68]))|499[2468]|5(?:769|979[2-69])|7468|8(?:3(?:8[7-9]|96[2457-9])|477|51[2-9])|9(?:802|9(?:1[23]|69))|1(?:45|58)[67]\"],\"0$1\"],[,\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1-$2-$3\",[\"60\"],\n\"0$1\"],[,\"(\\\\d)(\\\\d{4})(\\\\d{4})\",\"$1-$2-$3\",[\"[36]|4(?:2[09]|7[01])\",\"[36]|4(?:2(?:0|9[02-69])|7(?:0[019]|1))\"],\"0$1\"],[,\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1-$2-$3\",[\"1(?:1|5[45]|77|88|9[69])|2(?:2[1-37]|3[0-269]|4[59]|5|6[24]|7[1-358]|8[1369]|9[0-38])|4(?:[28][1-9]|3[0-57]|[45]|6[248]|7[2-579]|9[29])|5(?:2|3[0459]|4[0-369]|5[29]|8[02389]|9[0-389])|7(?:2[02-46-9]|34|[58]|6[0249]|7[57]|9[2-6])|8(?:2[124589]|3[26-9]|49|51|6|7[0-468]|8[68]|9[019])|9(?:[23][1-9]|4[15]|5[138]|6[1-3]|7[156]|8[189]|9[1-489])\",\n\"1(?:1|5(?:4[018]|5[017])|77|88|9[69])|2(?:2(?:[127]|3[014-9])|3[0-269]|4[59]|5(?:[1-3]|5[0-69]|9[19])|62|7(?:[1-35]|8[0189])|8(?:[16]|3[0134]|9[0-5])|9(?:[028]|17))|4(?:2(?:[13-79]|8[014-6])|3[0-57]|[45]|6[248]|7[2-47]|8[1-9]|9[29])|5(?:2|3(?:[045]|9[0-8])|4[0-369]|5[29]|8[02389]|9[0-3])|7(?:2[02-46-9]|34|[58]|6[0249]|7[57]|9(?:[23]|4[0-59]|5[01569]|6[0167]))|8(?:2(?:[1258]|4[0-39]|9[0-2469])|3(?:[29]|60)|49|51|6(?:[0-24]|36|5[0-3589]|7[23]|9[01459])|7[0-468]|8[68])|9(?:[23][1-9]|4[15]|5[138]|6[1-3]|7[156]|8[189]|9(?:[1289]|3[34]|4[0178]))|(?:264|837)[016-9]|2(?:57|93)[015-9]|(?:25[0468]|422|838)[01]|(?:47[59]|59[89]|8(?:6[68]|9))[019]\",\n\"1(?:1|5(?:4[018]|5[017])|77|88|9[69])|2(?:2[127]|3[0-269]|4[59]|5(?:[1-3]|5[0-69]|9(?:17|99))|6(?:2|4[016-9])|7(?:[1-35]|8[0189])|8(?:[16]|3[0134]|9[0-5])|9(?:[028]|17))|4(?:2(?:[13-79]|8[014-6])|3[0-57]|[45]|6[248]|7[2-47]|9[29])|5(?:2|3(?:[045]|9(?:[0-58]|6[4-9]|7[0-35689]))|4[0-369]|5[29]|8[02389]|9[0-3])|7(?:2[02-46-9]|34|[58]|6[0249]|7[57]|9(?:[23]|4[0-59]|5[01569]|6[0167]))|8(?:2(?:[1258]|4[0-39]|9[0169])|3(?:[29]|60|7(?:[017-9]|6[6-8]))|49|51|6(?:[0-24]|36[2-57-9]|5(?:[0-389]|5[23])|6(?:[01]|9[178])|7(?:2[2-468]|3[78])|9[0145])|7[0-468]|8[68])|9(?:4[15]|5[138]|7[156]|8[189]|9(?:[1289]|3(?:31|4[357])|4[0178]))|(?:8294|96)[1-3]|2(?:57|93)[015-9]|(?:223|8699)[014-9]|(?:25[0468]|422|838)[01]|(?:48|8292|9[23])[1-9]|(?:47[59]|59[89]|8(?:68|9))[019]\"],\n\"0$1\"],[,\"(\\\\d{3})(\\\\d{2})(\\\\d{4})\",\"$1-$2-$3\",[\"[14]|[289][2-9]|5[3-9]|7[2-4679]\"],\"0$1\"],[,\"(\\\\d{4})(\\\\d{2})(\\\\d{3,4})\",\"$1-$2-$3\",[\"007\",\"0077\"]],[,\"(\\\\d{4})(\\\\d{2})(\\\\d{4})\",\"$1-$2-$3\",[\"008\"]],[,\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1-$2-$3\",[\"800\"],\"0$1\"],[,\"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$1-$2-$3\",[\"[257-9]\"],\"0$1\"],[,\"(\\\\d{4})(\\\\d{3})(\\\\d{3,4})\",\"$1-$2-$3\",[\"0\"]],[,\"(\\\\d{4})(\\\\d{4})(\\\\d{4,5})\",\"$1-$2-$3\",[\"0\"]],[,\"(\\\\d{4})(\\\\d{5})(\\\\d{5,6})\",\"$1-$2-$3\",[\"0\"]],[,\"(\\\\d{4})(\\\\d{6})(\\\\d{6,7})\",\"$1-$2-$3\",\n[\"0\"]]],[[,\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1-$2-$3\",[\"(?:12|57|99)0\"],\"0$1\"],[,\"(\\\\d{4})(\\\\d)(\\\\d{4})\",\"$1-$2-$3\",[\"1(?:26|3[79]|4[56]|5[4-68]|6[3-5])|499|5(?:76|97)|746|8(?:3[89]|47|51)|9(?:80|9[16])\",\"1(?:267|3(?:7[247]|9[278])|466|5(?:47|58|64)|6(?:3[245]|48|5[4-68]))|499[2468]|5(?:76|97)9|7468|8(?:3(?:8[7-9]|96)|477|51[2-9])|9(?:802|9(?:1[23]|69))|1(?:45|58)[67]\",\"1(?:267|3(?:7[247]|9[278])|466|5(?:47|58|64)|6(?:3[245]|48|5[4-68]))|499[2468]|5(?:769|979[2-69])|7468|8(?:3(?:8[7-9]|96[2457-9])|477|51[2-9])|9(?:802|9(?:1[23]|69))|1(?:45|58)[67]\"],\n\"0$1\"],[,\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1-$2-$3\",[\"60\"],\"0$1\"],[,\"(\\\\d)(\\\\d{4})(\\\\d{4})\",\"$1-$2-$3\",[\"[36]|4(?:2[09]|7[01])\",\"[36]|4(?:2(?:0|9[02-69])|7(?:0[019]|1))\"],\"0$1\"],[,\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1-$2-$3\",[\"1(?:1|5[45]|77|88|9[69])|2(?:2[1-37]|3[0-269]|4[59]|5|6[24]|7[1-358]|8[1369]|9[0-38])|4(?:[28][1-9]|3[0-57]|[45]|6[248]|7[2-579]|9[29])|5(?:2|3[0459]|4[0-369]|5[29]|8[02389]|9[0-389])|7(?:2[02-46-9]|34|[58]|6[0249]|7[57]|9[2-6])|8(?:2[124589]|3[26-9]|49|51|6|7[0-468]|8[68]|9[019])|9(?:[23][1-9]|4[15]|5[138]|6[1-3]|7[156]|8[189]|9[1-489])\",\n\"1(?:1|5(?:4[018]|5[017])|77|88|9[69])|2(?:2(?:[127]|3[014-9])|3[0-269]|4[59]|5(?:[1-3]|5[0-69]|9[19])|62|7(?:[1-35]|8[0189])|8(?:[16]|3[0134]|9[0-5])|9(?:[028]|17))|4(?:2(?:[13-79]|8[014-6])|3[0-57]|[45]|6[248]|7[2-47]|8[1-9]|9[29])|5(?:2|3(?:[045]|9[0-8])|4[0-369]|5[29]|8[02389]|9[0-3])|7(?:2[02-46-9]|34|[58]|6[0249]|7[57]|9(?:[23]|4[0-59]|5[01569]|6[0167]))|8(?:2(?:[1258]|4[0-39]|9[0-2469])|3(?:[29]|60)|49|51|6(?:[0-24]|36|5[0-3589]|7[23]|9[01459])|7[0-468]|8[68])|9(?:[23][1-9]|4[15]|5[138]|6[1-3]|7[156]|8[189]|9(?:[1289]|3[34]|4[0178]))|(?:264|837)[016-9]|2(?:57|93)[015-9]|(?:25[0468]|422|838)[01]|(?:47[59]|59[89]|8(?:6[68]|9))[019]\",\n\"1(?:1|5(?:4[018]|5[017])|77|88|9[69])|2(?:2[127]|3[0-269]|4[59]|5(?:[1-3]|5[0-69]|9(?:17|99))|6(?:2|4[016-9])|7(?:[1-35]|8[0189])|8(?:[16]|3[0134]|9[0-5])|9(?:[028]|17))|4(?:2(?:[13-79]|8[014-6])|3[0-57]|[45]|6[248]|7[2-47]|9[29])|5(?:2|3(?:[045]|9(?:[0-58]|6[4-9]|7[0-35689]))|4[0-369]|5[29]|8[02389]|9[0-3])|7(?:2[02-46-9]|34|[58]|6[0249]|7[57]|9(?:[23]|4[0-59]|5[01569]|6[0167]))|8(?:2(?:[1258]|4[0-39]|9[0169])|3(?:[29]|60|7(?:[017-9]|6[6-8]))|49|51|6(?:[0-24]|36[2-57-9]|5(?:[0-389]|5[23])|6(?:[01]|9[178])|7(?:2[2-468]|3[78])|9[0145])|7[0-468]|8[68])|9(?:4[15]|5[138]|7[156]|8[189]|9(?:[1289]|3(?:31|4[357])|4[0178]))|(?:8294|96)[1-3]|2(?:57|93)[015-9]|(?:223|8699)[014-9]|(?:25[0468]|422|838)[01]|(?:48|8292|9[23])[1-9]|(?:47[59]|59[89]|8(?:68|9))[019]\"],\n\"0$1\"],[,\"(\\\\d{3})(\\\\d{2})(\\\\d{4})\",\"$1-$2-$3\",[\"[14]|[289][2-9]|5[3-9]|7[2-4679]\"],\"0$1\"],[,\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1-$2-$3\",[\"800\"],\"0$1\"],[,\"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$1-$2-$3\",[\"[257-9]\"],\"0$1\"]],[,,\"20\\\\d{8}\",,,,\"2012345678\",,,[10]],,,[,,\"00(?:777(?:[01]|(?:5|8\\\\d)\\\\d)|882[1245]\\\\d\\\\d)\\\\d\\\\d|00(?:37|66|78)\\\\d{6,13}\"],[,,\"570\\\\d{6}\",,,,\"570123456\",,,[9]],,,[,,,,,,,,,[-1]]],KE:[,[,,\"(?:[17]\\\\d\\\\d|900)\\\\d{6}|(?:2|80)0\\\\d{6,7}|[4-6]\\\\d{6,8}\",,,,,,,[7,8,9,10]],[,,\"(?:4[245]|5[1-79]|6[01457-9])\\\\d{5,7}|(?:4[136]|5[08]|62)\\\\d{7}|(?:[24]0|66)\\\\d{6,7}\",\n,,,\"202012345\",,,[7,8,9]],[,,\"(?:1(?:0[0-8]|1[0-7]|2[014]|30)|7\\\\d\\\\d)\\\\d{6}\",,,,\"712123456\",,,[9]],[,,\"800[02-8]\\\\d{5,6}\",,,,\"800223456\",,,[9,10]],[,,\"900[02-9]\\\\d{5}\",,,,\"900223456\",,,[9]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],\"KE\",254,\"000\",\"0\",,,\"0\",,,,[[,\"(\\\\d{2})(\\\\d{5,7})\",\"$1 $2\",[\"[24-6]\"],\"0$1\"],[,\"(\\\\d{3})(\\\\d{6})\",\"$1 $2\",[\"[17]\"],\"0$1\"],[,\"(\\\\d{3})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[89]\"],\"0$1\"]],,[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],KG:[,[,,\"8\\\\d{9}|[235-9]\\\\d{8}\",\n,,,,,,[9,10],[5,6]],[,,\"312(?:5[0-79]\\\\d|9(?:[0-689]\\\\d|7[0-24-9]))\\\\d{3}|(?:3(?:1(?:2[0-46-8]|3[1-9]|47|[56]\\\\d)|2(?:22|3[0-479]|6[0-7])|4(?:22|5[6-9]|6\\\\d)|5(?:22|3[4-7]|59|6\\\\d)|6(?:22|5[35-7]|6\\\\d)|7(?:22|3[468]|4[1-9]|59|[67]\\\\d)|9(?:22|4[1-8]|6\\\\d))|6(?:09|12|2[2-4])\\\\d)\\\\d{5}\",,,,\"312123456\",,,[9],[5,6]],[,,\"312(?:58\\\\d|973)\\\\d{3}|(?:2(?:0[0-35]|2\\\\d)|5[0-24-7]\\\\d|600|7(?:[07]\\\\d|55)|88[08]|9(?:12|9[05-9]))\\\\d{6}\",,,,\"700123456\",,,[9]],[,,\"800\\\\d{6,7}\",,,,\"800123456\"],[,,,,,,,,,[-1]],[,,,,\n,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],\"KG\",996,\"00\",\"0\",,,\"0\",,,,[[,\"(\\\\d{4})(\\\\d{5})\",\"$1 $2\",[\"3(?:1[346]|[24-79])\"],\"0$1\"],[,\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[235-79]|88\"],\"0$1\"],[,\"(\\\\d{3})(\\\\d{3})(\\\\d)(\\\\d{2,3})\",\"$1 $2 $3 $4\",[\"8\"],\"0$1\"]],,[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],KH:[,[,,\"1\\\\d{9}|[1-9]\\\\d{7,8}\",,,,,,,[8,9,10],[6,7]],[,,\"23(?:4(?:[2-4]|[56]\\\\d)|[568]\\\\d\\\\d)\\\\d{4}|23[236-9]\\\\d{5}|(?:2[4-6]|3[2-6]|4[2-4]|[5-7][2-5])(?:(?:[237-9]|4[56]|5\\\\d)\\\\d{5}|6\\\\d{5,6})\",\n,,,\"23756789\",,,[8,9],[6,7]],[,,\"(?:(?:1[28]|3[18]|9[67])\\\\d|6[016-9]|7(?:[07-9]|[16]\\\\d)|8(?:[013-79]|8\\\\d))\\\\d{6}|(?:1\\\\d|9[0-57-9])\\\\d{6}|(?:2[3-6]|3[2-6]|4[2-4]|[5-7][2-5])48\\\\d{5}\",,,,\"91234567\",,,[8,9]],[,,\"1800(?:1\\\\d|2[019])\\\\d{4}\",,,,\"1800123456\",,,[10]],[,,\"1900(?:1\\\\d|2[09])\\\\d{4}\",,,,\"1900123456\",,,[10]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],\"KH\",855,\"00[14-9]\",\"0\",,,\"0\",,,,[[,\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[1-9]\"],\"0$1\"],[,\"(\\\\d{4})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"1\"]]],\n,[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],KI:[,[,,\"(?:[37]\\\\d|6[0-79])\\\\d{6}|(?:[2-48]\\\\d|50)\\\\d{3}\",,,,,,,[5,8]],[,,\"(?:[24]\\\\d|3[1-9]|50|65(?:02[12]|12[56]|22[89]|[3-5]00)|7(?:27\\\\d\\\\d|3100|5(?:02[12]|12[56]|22[89]|[34](?:00|81)|500))|8[0-5])\\\\d{3}\",,,,\"31234\"],[,,\"(?:6200[01]|7(?:310[1-9]|5(?:02[03-9]|12[0-47-9]|22[0-7]|[34](?:0[1-9]|8[02-9])|50[1-9])))\\\\d{3}|(?:63\\\\d\\\\d|7(?:(?:[0146-9]\\\\d|2[0-689])\\\\d|3(?:[02-9]\\\\d|1[1-9])|5(?:[0-2][013-9]|[34][1-79]|5[1-9]|[6-9]\\\\d)))\\\\d{4}\",\n,,,\"72001234\",,,[8]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,\"30(?:0[01]\\\\d\\\\d|12(?:11|20))\\\\d\\\\d\",,,,\"30010000\",,,[8]],\"KI\",686,\"00\",\"0\",,,\"0\",,,,,,[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],KM:[,[,,\"[3478]\\\\d{6}\",,,,,,,[7],[4]],[,,\"7[4-7]\\\\d{5}\",,,,\"7712345\",,,,[4]],[,,\"[34]\\\\d{6}\",,,,\"3212345\"],[,,,,,,,,,[-1]],[,,\"8\\\\d{6}\",,,,\"8001234\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],\"KM\",269,\"00\",,,,,,,,[[,\"(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3\",\n[\"[3478]\"]]],,[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],KN:[,[,,\"(?:[58]\\\\d\\\\d|900)\\\\d{7}\",,,,,,,[10],[7]],[,,\"869(?:2(?:29|36)|302|4(?:6[015-9]|70)|56[5-7])\\\\d{4}\",,,,\"8692361234\",,,,[7]],[,,\"869(?:48[89]|55[6-8]|66\\\\d|76[02-7])\\\\d{4}\",,,,\"8697652917\",,,,[7]],[,,\"8(?:00|33|44|55|66|77|88)[2-9]\\\\d{6}\",,,,\"8002123456\"],[,,\"900[2-9]\\\\d{6}\",,,,\"9002123456\"],[,,,,,,,,,[-1]],[,,\"52(?:3(?:[2-46-9][02-9]\\\\d|5(?:[02-46-9]\\\\d|5[0-46-9]))|4(?:[2-478][02-9]\\\\d|5(?:[034]\\\\d|2[024-9]|5[0-46-9])|6(?:0[1-9]|[2-9]\\\\d)|9(?:[05-9]\\\\d|2[0-5]|49)))\\\\d{4}|52[34][2-9]1[02-9]\\\\d{4}|5(?:00|2[125-9]|33|44|66|77|88)[2-9]\\\\d{6}\",\n,,,\"5002345678\"],[,,,,,,,,,[-1]],\"KN\",1,\"011\",\"1\",,,\"([2-7]\\\\d{6})$|1\",\"869$1\",,,,,[,,,,,,,,,[-1]],,\"869\",[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],KP:[,[,,\"85\\\\d{6}|(?:19\\\\d|[2-7])\\\\d{7}\",,,,,,,[8,10],[6,7]],[,,\"(?:(?:195|2)\\\\d|3[19]|4[159]|5[37]|6[17]|7[39]|85)\\\\d{6}\",,,,\"21234567\",,,,[6,7]],[,,\"19[1-3]\\\\d{7}\",,,,\"1921234567\",,,[10]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],\"KP\",850,\"00|99\",\"0\",,,\"0\",,,,[[,\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"8\"],\n\"0$1\"],[,\"(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[2-7]\"],\"0$1\"],[,\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"1\"],\"0$1\"]],,[,,,,,,,,,[-1]],,,[,,\"238[02-9]\\\\d{4}|2(?:[0-24-9]\\\\d|3[0-79])\\\\d{5}\",,,,,,,[8]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],KR:[,[,,\"00[1-9]\\\\d{8,11}|(?:[12]|5\\\\d{3})\\\\d{7}|[13-6]\\\\d{9}|(?:[1-6]\\\\d|80)\\\\d{7}|[3-6]\\\\d{4,5}|(?:00|7)0\\\\d{8}\",,,,,,,[5,6,8,9,10,11,12,13,14],[3,4,7]],[,,\"(?:2|3[1-3]|[46][1-4]|5[1-5])[1-9]\\\\d{6,7}|(?:3[1-3]|[46][1-4]|5[1-5])1\\\\d{2,3}\",,,,\"22123456\",,,[5,6,8,9,10],\n[3,4,7]],[,,\"1(?:05(?:[0-8]\\\\d|9[0-6])|22[13]\\\\d)\\\\d{4,5}|1(?:0[0-46-9]|[16-9]\\\\d|2[013-9])\\\\d{6,7}\",,,,\"1020000000\",,,[9,10]],[,,\"00(?:308\\\\d{6,7}|798\\\\d{7,9})|(?:00368|[38]0)\\\\d{7}\",,,,\"801234567\",,,[9,11,12,13,14]],[,,\"60[2-9]\\\\d{6}\",,,,\"602345678\",,,[9]],[,,,,,,,,,[-1]],[,,\"50\\\\d{8,9}\",,,,\"5012345678\",,,[10,11]],[,,\"70\\\\d{8}\",,,,\"7012345678\",,,[10]],\"KR\",82,\"00(?:[125689]|3(?:[46]5|91)|7(?:00|27|3|55|6[126]))\",\"0\",,,\"0(8(?:[1-46-8]|5\\\\d\\\\d))?\",,,,[[,\"(\\\\d{5})\",\"$1\",[\"1[016-9]1\",\"1[016-9]11\",\"1[016-9]114\"],\n\"0$1\"],[,\"(\\\\d{2})(\\\\d{3,4})\",\"$1-$2\",[\"(?:3[1-3]|[46][1-4]|5[1-5])1\"],\"0$1\",\"0$CC-$1\"],[,\"(\\\\d{4})(\\\\d{4})\",\"$1-$2\",[\"1\"]],[,\"(\\\\d)(\\\\d{3,4})(\\\\d{4})\",\"$1-$2-$3\",[\"2\"],\"0$1\",\"0$CC-$1\"],[,\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1-$2-$3\",[\"[36]0|8\"],\"0$1\",\"0$CC-$1\"],[,\"(\\\\d{2})(\\\\d{3,4})(\\\\d{4})\",\"$1-$2-$3\",[\"[1346]|5[1-5]\"],\"0$1\",\"0$CC-$1\"],[,\"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$1-$2-$3\",[\"[57]\"],\"0$1\",\"0$CC-$1\"],[,\"(\\\\d{5})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"003\",\"0030\"]],[,\"(\\\\d{2})(\\\\d{5})(\\\\d{4})\",\"$1-$2-$3\",[\"5\"],\"0$1\",\n\"0$CC-$1\"],[,\"(\\\\d{5})(\\\\d{3,4})(\\\\d{4})\",\"$1 $2 $3\",[\"0\"]],[,\"(\\\\d{5})(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3 $4\",[\"0\"]]],[[,\"(\\\\d{2})(\\\\d{3,4})\",\"$1-$2\",[\"(?:3[1-3]|[46][1-4]|5[1-5])1\"],\"0$1\",\"0$CC-$1\"],[,\"(\\\\d{4})(\\\\d{4})\",\"$1-$2\",[\"1\"]],[,\"(\\\\d)(\\\\d{3,4})(\\\\d{4})\",\"$1-$2-$3\",[\"2\"],\"0$1\",\"0$CC-$1\"],[,\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1-$2-$3\",[\"[36]0|8\"],\"0$1\",\"0$CC-$1\"],[,\"(\\\\d{2})(\\\\d{3,4})(\\\\d{4})\",\"$1-$2-$3\",[\"[1346]|5[1-5]\"],\"0$1\",\"0$CC-$1\"],[,\"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$1-$2-$3\",[\"[57]\"],\"0$1\",\"0$CC-$1\"],\n[,\"(\\\\d{2})(\\\\d{5})(\\\\d{4})\",\"$1-$2-$3\",[\"5\"],\"0$1\",\"0$CC-$1\"]],[,,\"15\\\\d{7,8}\",,,,\"1523456789\",,,[9,10]],,,[,,\"00(?:3(?:08\\\\d{6,7}|68\\\\d{7})|798\\\\d{7,9})\",,,,,,,[11,12,13,14]],[,,\"1(?:5(?:22|33|44|66|77|88|99)|6(?:[07]0|44|6[0168]|88)|8(?:00|33|55|77|99))\\\\d{4}\",,,,\"15441234\",,,[8]],,,[,,,,,,,,,[-1]]],KW:[,[,,\"18\\\\d{5}|(?:[2569]\\\\d|41)\\\\d{6}\",,,,,,,[7,8]],[,,\"2(?:[23]\\\\d\\\\d|4(?:[1-35-9]\\\\d|44)|5(?:0[034]|[2-46]\\\\d|5[1-3]|7[1-7]))\\\\d{4}\",,,,\"22345678\",,,[8]],[,,\"(?:41\\\\d\\\\d|5(?:(?:[05]\\\\d|1[0-7]|6[56])\\\\d|2(?:22|5[25])|7(?:55|77)|88[58])|6(?:(?:0[034679]|5[015-9]|6\\\\d)\\\\d|1(?:00|11|6[16])|2[26]2|3[36]3|4[46]4|7(?:0[013-9]|[67]\\\\d)|8[68]8|9(?:[069]\\\\d|3[039]))|9(?:(?:[04679]\\\\d|8[057-9])\\\\d|1(?:1[01]|99)|2(?:00|2\\\\d)|3(?:00|3[03])|5(?:00|5\\\\d)))\\\\d{4}\",\n,,,\"50012345\",,,[8]],[,,\"18\\\\d{5}\",,,,\"1801234\",,,[7]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],\"KW\",965,\"00\",,,,,,,,[[,\"(\\\\d{4})(\\\\d{3,4})\",\"$1 $2\",[\"[169]|2(?:[235]|4[1-35-9])|52\"]],[,\"(\\\\d{3})(\\\\d{5})\",\"$1 $2\",[\"[245]\"]]],,[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],KY:[,[,,\"(?:345|[58]\\\\d\\\\d|900)\\\\d{7}\",,,,,,,[10],[7]],[,,\"345(?:2(?:22|3[23]|44|66)|333|444|6(?:23|38|40)|7(?:30|4[35-79]|6[6-9]|77)|8(?:00|1[45]|[48]8)|9(?:14|4[035-9]))\\\\d{4}\",,,,\"3452221234\",\n,,,[7]],[,,\"345(?:32[1-9]|42[0-4]|5(?:1[67]|2[5-79]|4[6-9]|50|76)|649|82[56]|9(?:1[679]|2[2-9]|3[06-9]|90))\\\\d{4}\",,,,\"3453231234\",,,,[7]],[,,\"8(?:00|33|44|55|66|77|88)[2-9]\\\\d{6}\",,,,\"8002345678\"],[,,\"(?:345976|900[2-9]\\\\d\\\\d)\\\\d{4}\",,,,\"9002345678\"],[,,,,,,,,,[-1]],[,,\"52(?:3(?:[2-46-9][02-9]\\\\d|5(?:[02-46-9]\\\\d|5[0-46-9]))|4(?:[2-478][02-9]\\\\d|5(?:[034]\\\\d|2[024-9]|5[0-46-9])|6(?:0[1-9]|[2-9]\\\\d)|9(?:[05-9]\\\\d|2[0-5]|49)))\\\\d{4}|52[34][2-9]1[02-9]\\\\d{4}|5(?:00|2[125-9]|33|44|66|77|88)[2-9]\\\\d{6}\",\n,,,\"5002345678\"],[,,,,,,,,,[-1]],\"KY\",1,\"011\",\"1\",,,\"([2-9]\\\\d{6})$|1\",\"345$1\",,,,,[,,\"345849\\\\d{4}\",,,,\"3458491234\"],,\"345\",[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],KZ:[,[,,\"(?:33622|8\\\\d{8})\\\\d{5}|[78]\\\\d{9}\",,,,,,,[10,14],[5,6,7]],[,,\"(?:33622|7(?:1(?:0(?:[23]\\\\d|4[0-3]|59|63)|1(?:[23]\\\\d|4[0-79]|59)|2(?:[23]\\\\d|59)|3(?:2\\\\d|3[0-79]|4[0-35-9]|59)|4(?:[24]\\\\d|3[013-9]|5[1-9]|97)|5(?:2\\\\d|3[1-9]|4[0-7]|59)|6(?:[2-4]\\\\d|5[19]|61)|72\\\\d|8(?:[27]\\\\d|3[1-46-9]|4[0-5]|59))|2(?:1(?:[23]\\\\d|4[46-9]|5[3469])|2(?:2\\\\d|3[0679]|46|5[12679])|3(?:[2-4]\\\\d|5[139])|4(?:2\\\\d|3[1-35-9]|59)|5(?:[23]\\\\d|4[0-8]|59|61)|6(?:2\\\\d|3[1-9]|4[0-4]|59)|7(?:[2379]\\\\d|40|5[279])|8(?:[23]\\\\d|4[0-3]|59)|9(?:2\\\\d|3[124578]|59))))\\\\d{5}\",\n,,,\"7123456789\",,,[10],[5,6,7]],[,,\"7(?:0[0-25-8]|47|6[0-4]|7[15-8]|85)\\\\d{7}\",,,,\"7710009998\",,,[10]],[,,\"8(?:00|108\\\\d{3})\\\\d{7}\",,,,\"8001234567\"],[,,\"809\\\\d{7}\",,,,\"8091234567\",,,[10]],[,,,,,,,,,[-1]],[,,\"808\\\\d{7}\",,,,\"8081234567\",,,[10]],[,,\"751\\\\d{7}\",,,,\"7511234567\",,,[10]],\"KZ\",7,\"810\",\"8\",,,\"8\",,\"8~10\",,,,[,,,,,,,,,[-1]],,\"33|7\",[,,\"751\\\\d{7}\",,,,,,,[10]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],LA:[,[,,\"[23]\\\\d{9}|3\\\\d{8}|(?:[235-8]\\\\d|41)\\\\d{6}\",,,,,,,[8,9,10],[6]],[,,\"(?:2[13]|[35-7][14]|41|8[1468])\\\\d{6}\",\n,,,\"21212862\",,,[8],[6]],[,,\"208[78]\\\\d{6}|(?:20[23579]|30[24])\\\\d{7}\",,,,\"2023123456\",,,[10]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],\"LA\",856,\"00\",\"0\",,,\"0\",,,,[[,\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"2[13]|3[14]|[4-8]\"],\"0$1\"],[,\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"30[0135-9]\"],\"0$1\"],[,\"(\\\\d{2})(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"[23]\"],\"0$1\"]],,[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,\"30[0135-9]\\\\d{6}\",,,,\"301234567\",,,[9]],,,[,,,,,,\n,,,[-1]]],LB:[,[,,\"[27-9]\\\\d{7}|[13-9]\\\\d{6}\",,,,,,,[7,8]],[,,\"7(?:62|8[0-7]|9[04-9])\\\\d{4}|(?:[14-69]\\\\d|2(?:[14-69]\\\\d|[78][1-9])|7[2-57]|8[02-9])\\\\d{5}\",,,,\"1123456\"],[,,\"793(?:[01]\\\\d|2[0-4])\\\\d{3}|(?:(?:3|81)\\\\d|7(?:[01]\\\\d|6[013-9]|8[89]|9[12]))\\\\d{5}\",,,,\"71123456\"],[,,,,,,,,,[-1]],[,,\"9[01]\\\\d{6}\",,,,\"90123456\",,,[8]],[,,\"80\\\\d{6}\",,,,\"80123456\",,,[8]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],\"LB\",961,\"00\",\"0\",,,\"0\",,,,[[,\"(\\\\d)(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[13-69]|7(?:[2-57]|62|8[0-7]|9[04-9])|8[02-9]\"],\n\"0$1\"],[,\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[27-9]\"]]],,[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],LC:[,[,,\"(?:[58]\\\\d\\\\d|758|900)\\\\d{7}\",,,,,,,[10],[7]],[,,\"758(?:234|4(?:30|5\\\\d|6[2-9]|8[0-2])|57[0-2]|(?:63|75)8)\\\\d{4}\",,,,\"7584305678\",,,,[7]],[,,\"758(?:28[4-7]|384|4(?:6[01]|8[4-9])|5(?:1[89]|20|84)|7(?:1[2-9]|2\\\\d|3[0-3])|812)\\\\d{4}\",,,,\"7582845678\",,,,[7]],[,,\"8(?:00|33|44|55|66|77|88)[2-9]\\\\d{6}\",,,,\"8002123456\"],[,,\"900[2-9]\\\\d{6}\",,,,\"9002123456\"],[,,,,,,,,,[-1]],\n[,,\"52(?:3(?:[2-46-9][02-9]\\\\d|5(?:[02-46-9]\\\\d|5[0-46-9]))|4(?:[2-478][02-9]\\\\d|5(?:[034]\\\\d|2[024-9]|5[0-46-9])|6(?:0[1-9]|[2-9]\\\\d)|9(?:[05-9]\\\\d|2[0-5]|49)))\\\\d{4}|52[34][2-9]1[02-9]\\\\d{4}|5(?:00|2[125-9]|33|44|66|77|88)[2-9]\\\\d{6}\",,,,\"5002345678\"],[,,,,,,,,,[-1]],\"LC\",1,\"011\",\"1\",,,\"([2-8]\\\\d{6})$|1\",\"758$1\",,,,,[,,,,,,,,,[-1]],,\"758\",[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],LI:[,[,,\"[68]\\\\d{8}|(?:[2378]\\\\d|90)\\\\d{5}\",,,,,,,[7,9]],[,,\"(?:2(?:01|1[27]|2[02]|3\\\\d|6[02-578]|96)|3(?:[24]0|33|7[0135-7]|8[048]|9[0269]))\\\\d{4}\",\n,,,\"2345678\",,,[7]],[,,\"(?:6(?:(?:4[5-9]|5[0-469])\\\\d|6(?:[024-6]\\\\d|[17]0|3[7-9]))\\\\d|7(?:[37-9]\\\\d|42|56))\\\\d{4}\",,,,\"660234567\"],[,,\"8002[28]\\\\d\\\\d|80(?:05\\\\d|9)\\\\d{4}\",,,,\"8002222\"],[,,\"90(?:02[258]|1(?:23|3[14])|66[136])\\\\d\\\\d\",,,,\"9002222\",,,[7]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],\"LI\",423,\"00\",\"0\",,,\"(1001)|0\",,,,[[,\"(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3\",[\"[2379]|8(?:0[09]|7)\",\"[2379]|8(?:0(?:02|9)|7)\"],,\"$CC $1\"],[,\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"8\"]],[,\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\n\"$1 $2 $3\",[\"69\"],,\"$CC $1\"],[,\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"6\"],,\"$CC $1\"]],,[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,\"870(?:28|87)\\\\d\\\\d\",,,,\"8702812\",,,[7]],,,[,,\"697(?:42|56|[78]\\\\d)\\\\d{4}\",,,,\"697861234\",,,[9]]],LK:[,[,,\"[1-9]\\\\d{8}\",,,,,,,[9],[7]],[,,\"(?:12[2-9]|602|8[12]\\\\d|9(?:1\\\\d|22|9[245]))\\\\d{6}|(?:11|2[13-7]|3[1-8]|4[157]|5[12457]|6[35-7])[2-57]\\\\d{6}\",,,,\"112345678\",,,,[7]],[,,\"7(?:[0-25-8]\\\\d|4[0-4])\\\\d{6}\",,,,\"712345678\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,\n,,,,,[-1]],[,,,,,,,,,[-1]],\"LK\",94,\"00\",\"0\",,,\"0\",,,,[[,\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"7\"],\"0$1\"],[,\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[1-689]\"],\"0$1\"]],,[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,\"1973\\\\d{5}\",,,,\"197312345\"],,,[,,,,,,,,,[-1]]],LR:[,[,,\"(?:[245]\\\\d|33|77|88)\\\\d{7}|(?:2\\\\d|[4-6])\\\\d{6}\",,,,,,,[7,8,9]],[,,\"2\\\\d{7}\",,,,\"21234567\",,,[8]],[,,\"(?:(?:(?:22|33)0|555|(?:77|88)\\\\d)\\\\d|4(?:240|[67]))\\\\d{5}|[56]\\\\d{6}\",,,,\"770123456\",,,[7,9]],[,,,,,,,,,[-1]],[,,\"332(?:02|[34]\\\\d)\\\\d{4}\",\n,,,\"332021234\",,,[9]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],\"LR\",231,\"00\",\"0\",,,\"0\",,,,[[,\"(\\\\d)(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"4[67]|[56]\"],\"0$1\"],[,\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"2\"],\"0$1\"],[,\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[2-578]\"],\"0$1\"]],,[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],LS:[,[,,\"(?:[256]\\\\d\\\\d|800)\\\\d{5}\",,,,,,,[8]],[,,\"2\\\\d{7}\",,,,\"22123456\"],[,,\"[56]\\\\d{7}\",,,,\"50123456\"],[,,\"800[1256]\\\\d{4}\",,,,\"80021234\"],[,,,,,,,,,[-1]],[,,\n,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],\"LS\",266,\"00\",,,,,,,,[[,\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[2568]\"]]],,[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],LT:[,[,,\"(?:[3469]\\\\d|52|[78]0)\\\\d{6}\",,,,,,,[8]],[,,\"(?:3[1478]|4[124-6]|52)\\\\d{6}\",,,,\"31234567\"],[,,\"6\\\\d{7}\",,,,\"61234567\"],[,,\"80[02]\\\\d{5}\",,,,\"80012345\"],[,,\"9(?:0[0239]|10)\\\\d{5}\",,,,\"90012345\"],[,,\"808\\\\d{5}\",,,,\"80812345\"],[,,\"70[05]\\\\d{5}\",,,,\"70012345\"],[,,\"[89]01\\\\d{5}\",,,,\"80123456\"],\"LT\",370,\"00\",\"0\",,,\"[08]\",\n,,,[[,\"(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"52[0-7]\"],\"(0-$1)\",,1],[,\"(\\\\d{3})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3\",[\"[7-9]\"],\"0 $1\",,1],[,\"(\\\\d{2})(\\\\d{6})\",\"$1 $2\",[\"37|4(?:[15]|6[1-8])\"],\"(0-$1)\",,1],[,\"(\\\\d{3})(\\\\d{5})\",\"$1 $2\",[\"[3-6]\"],\"(0-$1)\",,1]],,[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,\"70[67]\\\\d{5}\",,,,\"70712345\"],,,[,,,,,,,,,[-1]]],LU:[,[,,\"35[013-9]\\\\d{4,8}|6\\\\d{8}|35\\\\d{2,4}|(?:[2457-9]\\\\d|3[0-46-9])\\\\d{2,9}\",,,,,,,[4,5,6,7,8,9,10,11]],[,,\"(?:35[013-9]|80[2-9]|90[89])\\\\d{1,8}|(?:2[2-9]|3[0-46-9]|[457]\\\\d|8[13-9]|9[2-579])\\\\d{2,9}\",\n,,,\"27123456\"],[,,\"6(?:[269][18]|5[1568]|7[189]|81)\\\\d{6}\",,,,\"628123456\",,,[9]],[,,\"800\\\\d{5}\",,,,\"80012345\",,,[8]],[,,\"90[015]\\\\d{5}\",,,,\"90012345\",,,[8]],[,,\"801\\\\d{5}\",,,,\"80112345\",,,[8]],[,,,,,,,,,[-1]],[,,\"20(?:1\\\\d{5}|[2-689]\\\\d{1,7})\",,,,\"20201234\",,,[4,5,6,7,8,9,10]],\"LU\",352,\"00\",,,,\"(15(?:0[06]|1[12]|[35]5|4[04]|6[26]|77|88|99)\\\\d)\",,,,[[,\"(\\\\d{2})(\\\\d{3})\",\"$1 $2\",[\"2(?:0[2-689]|[2-9])|[3-57]|8(?:0[2-9]|[13-9])|9(?:0[89]|[2-579])\"],,\"$CC $1\"],[,\"(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3\",[\"2(?:0[2-689]|[2-9])|[3-57]|8(?:0[2-9]|[13-9])|9(?:0[89]|[2-579])\"],\n,\"$CC $1\"],[,\"(\\\\d{2})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3\",[\"20[2-689]\"],,\"$CC $1\"],[,\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{1,2})\",\"$1 $2 $3 $4\",[\"2(?:[0367]|4[3-8])\"],,\"$CC $1\"],[,\"(\\\\d{3})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3\",[\"80[01]|90[015]\"],,\"$CC $1\"],[,\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"20\"],,\"$CC $1\"],[,\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"6\"],,\"$CC $1\"],[,\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{1,2})\",\"$1 $2 $3 $4 $5\",[\"2(?:[0367]|4[3-8])\"],,\"$CC $1\"],[,\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{1,5})\",\"$1 $2 $3 $4\",\n[\"[3-57]|8[13-9]|9(?:0[89]|[2-579])|(?:2|80)[2-9]\"],,\"$CC $1\"]],,[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],LV:[,[,,\"(?:[268]\\\\d|90)\\\\d{6}\",,,,,,,[8]],[,,\"6\\\\d{7}\",,,,\"63123456\"],[,,\"23(?:23[0-57-9]|33[0238])\\\\d{3}|2(?:[0-24-9]\\\\d\\\\d|3(?:0[07]|[14-9]\\\\d|2[024-9]|3[0-24-9]))\\\\d{4}\",,,,\"21234567\"],[,,\"80\\\\d{6}\",,,,\"80123456\"],[,,\"90\\\\d{6}\",,,,\"90123456\"],[,,\"81\\\\d{6}\",,,,\"81123456\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],\"LV\",371,\"00\",,,,,,,,[[,\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",\n[\"[269]|8[01]\"]]],,[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],LY:[,[,,\"[2-9]\\\\d{8}\",,,,,,,[9],[7]],[,,\"(?:2(?:0[56]|[1-6]\\\\d|7[124579]|8[124])|3(?:1\\\\d|2[2356])|4(?:[17]\\\\d|2[1-357]|5[2-4]|8[124])|5(?:[1347]\\\\d|2[1-469]|5[13-5]|8[1-4])|6(?:[1-479]\\\\d|5[2-57]|8[1-5])|7(?:[13]\\\\d|2[13-79])|8(?:[124]\\\\d|5[124]|84))\\\\d{6}\",,,,\"212345678\",,,,[7]],[,,\"9[1-6]\\\\d{7}\",,,,\"912345678\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],\"LY\",218,\"00\",\"0\",\n,,\"0\",,,,[[,\"(\\\\d{2})(\\\\d{7})\",\"$1-$2\",[\"[2-9]\"],\"0$1\"]],,[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],MA:[,[,,\"[5-8]\\\\d{8}\",,,,,,,[9]],[,,\"5(?:2(?:[0-25-79]\\\\d|3[1-578]|4[02-46-8]|8[0235-7])|3(?:[0-47]\\\\d|5[02-9]|6[02-8]|8[014-9]|9[3-9])|(?:4[067]|5[03])\\\\d)\\\\d{5}\",,,,\"520123456\"],[,,\"(?:6(?:[0-79]\\\\d|8[0-247-9])|7(?:[0167]\\\\d|2[0-4]|5[01]|8[0-3]))\\\\d{6}\",,,,\"650123456\"],[,,\"80[0-7]\\\\d{6}\",,,,\"801234567\"],[,,\"89\\\\d{7}\",,,,\"891234567\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,\"(?:592(?:4[0-2]|93)|80[89]\\\\d\\\\d)\\\\d{4}\",\n,,,\"592401234\"],\"MA\",212,\"00\",\"0\",,,\"0\",,,,[[,\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"5[45]\"],\"0$1\"],[,\"(\\\\d{4})(\\\\d{5})\",\"$1-$2\",[\"5(?:2[2-46-9]|3[3-9]|9)|8(?:0[89]|92)\"],\"0$1\"],[,\"(\\\\d{2})(\\\\d{7})\",\"$1-$2\",[\"8\"],\"0$1\"],[,\"(\\\\d{3})(\\\\d{6})\",\"$1-$2\",[\"[5-7]\"],\"0$1\"]],,[,,,,,,,,,[-1]],1,,[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],MC:[,[,,\"(?:[3489]|6\\\\d)\\\\d{7}\",,,,,,,[8,9]],[,,\"(?:870|9[2-47-9]\\\\d)\\\\d{5}\",,,,\"99123456\",,,[8]],[,,\"4(?:[469]\\\\d|5[1-9])\\\\d{5}|(?:3|6\\\\d)\\\\d{7}\",,,,\"612345678\"],\n[,,\"(?:800|90\\\\d)\\\\d{5}\",,,,\"90123456\",,,[8]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],\"MC\",377,\"00\",\"0\",,,\"0\",,,,[[,\"(\\\\d{3})(\\\\d{3})(\\\\d{2})\",\"$1 $2 $3\",[\"87\"]],[,\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"4\"],\"0$1\"],[,\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[389]\"]],[,\"(\\\\d)(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4 $5\",[\"6\"],\"0$1\"]],[[,\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"4\"],\"0$1\"],[,\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[389]\"]],[,\"(\\\\d)(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\n\"$1 $2 $3 $4 $5\",[\"6\"],\"0$1\"]],[,,,,,,,,,[-1]],,,[,,\"8[07]0\\\\d{5}\",,,,,,,[8]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],MD:[,[,,\"(?:[235-7]\\\\d|[89]0)\\\\d{6}\",,,,,,,[8]],[,,\"(?:(?:2[1-9]|3[1-79])\\\\d|5(?:33|5[257]))\\\\d{5}\",,,,\"22212345\"],[,,\"562\\\\d{5}|(?:6\\\\d|7[16-9])\\\\d{6}\",,,,\"62112345\"],[,,\"800\\\\d{5}\",,,,\"80012345\"],[,,\"90[056]\\\\d{5}\",,,,\"90012345\"],[,,\"808\\\\d{5}\",,,,\"80812345\"],[,,,,,,,,,[-1]],[,,\"3[08]\\\\d{6}\",,,,\"30123456\"],\"MD\",373,\"00\",\"0\",,,\"0\",,,,[[,\"(\\\\d{3})(\\\\d{5})\",\"$1 $2\",[\"[89]\"],\"0$1\"],[,\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\n\"$1 $2 $3\",[\"22|3\"],\"0$1\"],[,\"(\\\\d{3})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3\",[\"[25-7]\"],\"0$1\"]],,[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,\"803\\\\d{5}\",,,,\"80312345\"],,,[,,,,,,,,,[-1]]],ME:[,[,,\"(?:20|[3-79]\\\\d)\\\\d{6}|80\\\\d{6,7}\",,,,,,,[8,9],[6]],[,,\"(?:20[2-8]|3(?:[0-2][2-7]|3[24-7])|4(?:0[2-467]|1[2467])|5(?:0[2467]|1[24-7]|2[2-467]))\\\\d{5}\",,,,\"30234567\",,,[8],[6]],[,,\"6(?:[07-9]\\\\d|3[024]|6[0-25])\\\\d{5}\",,,,\"67622901\",,,[8]],[,,\"80(?:[0-2578]|9\\\\d)\\\\d{5}\",,,,\"80080002\"],[,,\"9(?:4[1568]|5[178])\\\\d{5}\",,,,\"94515151\",\n,,[8]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,\"78[1-49]\\\\d{5}\",,,,\"78108780\",,,[8]],\"ME\",382,\"00\",\"0\",,,\"0\",,,,[[,\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[2-9]\"],\"0$1\"]],,[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,\"77[1-9]\\\\d{5}\",,,,\"77273012\",,,[8]],,,[,,,,,,,,,[-1]]],MF:[,[,,\"(?:590\\\\d|7090)\\\\d{5}|(?:69|80|9\\\\d)\\\\d{7}\",,,,,,,[9]],[,,\"590(?:0[079]|[14]3|[27][79]|3[03-7]|5[0-268]|87)\\\\d{4}\",,,,\"590271234\"],[,,\"(?:69(?:0\\\\d\\\\d|1(?:2[2-9]|3[0-5])|4(?:0[89]|1[2-6]|9\\\\d)|6(?:1[016-9]|5[0-4]|[67]\\\\d))|7090[0-4])\\\\d{4}\",\n,,,\"690001234\"],[,,\"80[0-5]\\\\d{6}\",,,,\"800012345\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,\"9(?:(?:39[5-7]|76[018])\\\\d|475[0-5])\\\\d{4}\",,,,\"976012345\"],\"MF\",590,\"00\",\"0\",,,\"0\",,,,,,[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],MG:[,[,,\"[23]\\\\d{8}\",,,,,,,[9],[7]],[,,\"2072[29]\\\\d{4}|20(?:2\\\\d|4[47]|5[3467]|6[279]|7[356]|8[268]|9[2457])\\\\d{5}\",,,,\"202123456\",,,,[7]],[,,\"3[2-47-9]\\\\d{7}\",,,,\"321234567\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],\n[,,\"22\\\\d{7}\",,,,\"221234567\"],\"MG\",261,\"00\",\"0\",,,\"([24-9]\\\\d{6})$|0\",\"20$1\",,,[[,\"(\\\\d{2})(\\\\d{2})(\\\\d{3})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[23]\"],\"0$1\"]],,[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],MH:[,[,,\"329\\\\d{4}|(?:[256]\\\\d|45)\\\\d{5}\",,,,,,,[7]],[,,\"(?:247|528|625)\\\\d{4}\",,,,\"2471234\"],[,,\"(?:(?:23|54)5|329|45[35-8])\\\\d{4}\",,,,\"2351234\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,\"635\\\\d{4}\",,,,\"6351234\"],\"MH\",692,\"011\",\"1\",,,\"1\",,,,[[,\"(\\\\d{3})(\\\\d{4})\",\n\"$1-$2\",[\"[2-6]\"]]],,[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],MK:[,[,,\"[2-578]\\\\d{7}\",,,,,,,[8],[6,7]],[,,\"(?:(?:2(?:62|77)0|3444)\\\\d|4[56]440)\\\\d{3}|(?:34|4[357])700\\\\d{3}|(?:2(?:[0-3]\\\\d|5[0-578]|6[01]|82)|3(?:1[3-68]|[23][2-68]|4[23568])|4(?:[23][2-68]|4[3-68]|5[2568]|6[25-8]|7[24-68]|8[4-68]))\\\\d{5}\",,,,\"22012345\",,,,[6,7]],[,,\"7(?:3555|(?:474|9[019]7)7)\\\\d{3}|7(?:[0-25-8]\\\\d\\\\d|3(?:[1-48]\\\\d|6[01]|7[01578])|4(?:2\\\\d|60|7[01578])|9(?:[2-4]\\\\d|5[01]|7[015]))\\\\d{4}\",\n,,,\"72345678\"],[,,\"800\\\\d{5}\",,,,\"80012345\"],[,,\"5\\\\d{7}\",,,,\"50012345\"],[,,\"8(?:0[1-9]|[1-9]\\\\d)\\\\d{5}\",,,,\"80123456\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],\"MK\",389,\"00\",\"0\",,,\"0\",,,,[[,\"(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"2|34[47]|4(?:[37]7|5[47]|64)\"],\"0$1\"],[,\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[347]\"],\"0$1\"],[,\"(\\\\d{3})(\\\\d)(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[58]\"],\"0$1\"]],,[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],ML:[,[,,\"[24-9]\\\\d{7}\",,,,,,,[8]],[,,\"2(?:07[0-8]|12[67])\\\\d{4}|(?:2(?:02|1[4-689])|4(?:0[0-4]|4[1-39]))\\\\d{5}\",\n,,,\"20212345\"],[,,\"2(?:0(?:01|79)|17\\\\d)\\\\d{4}|(?:5[01]|[679]\\\\d|8[2-49])\\\\d{6}\",,,,\"65012345\"],[,,\"80\\\\d{6}\",,,,\"80012345\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],\"ML\",223,\"00\",,,,,,,,[[,\"(\\\\d{4})\",\"$1\",[\"67[057-9]|74[045]\",\"67(?:0[09]|[59]9|77|8[89])|74(?:0[02]|44|55)\"]],[,\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[24-9]\"]]],[[,\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[24-9]\"]]],[,,,,,,,,,[-1]],,,[,,\"80\\\\d{6}\"],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],MM:[,\n[,,\"1\\\\d{5,7}|95\\\\d{6}|(?:[4-7]|9[0-46-9])\\\\d{6,8}|(?:2|8\\\\d)\\\\d{5,8}\",,,,,,,[6,7,8,9,10],[5]],[,,\"(?:1(?:(?:12|[28]\\\\d|3[56]|7[3-6]|9[0-6])\\\\d|4(?:2[29]|62|7[0-2]|83)|6)|2(?:2(?:00|8[34])|4(?:0\\\\d|[26]2|7[0-2]|83)|51\\\\d\\\\d)|4(?:2(?:2\\\\d\\\\d|48[013])|3(?:20\\\\d|4(?:70|83)|56)|420\\\\d|5(?:2\\\\d|470))|6(?:0(?:[23]|88\\\\d)|(?:124|[56]2\\\\d)\\\\d|2472|3(?:20\\\\d|470)|4(?:2[04]\\\\d|472)|7(?:3\\\\d\\\\d|4[67]0|8(?:[01459]\\\\d|8))))\\\\d{4}|5(?:2(?:2\\\\d{5,6}|47[02]\\\\d{4})|(?:3472|4(?:2(?:1|86)|470)|522\\\\d|6(?:20\\\\d|483)|7(?:20\\\\d|48[01])|8(?:20\\\\d|47[02])|9(?:20\\\\d|470))\\\\d{4})|7(?:(?:0470|4(?:25\\\\d|470)|5(?:202|470|96\\\\d))\\\\d{4}|1(?:20\\\\d{4,5}|4(?:70|83)\\\\d{4}))|8(?:1(?:2\\\\d{5,6}|4(?:10|7[01]\\\\d)\\\\d{3})|2(?:2\\\\d{5,6}|(?:320|490\\\\d)\\\\d{3})|(?:3(?:2\\\\d\\\\d|470)|4[24-7]|5(?:(?:2\\\\d|51)\\\\d|4(?:[1-35-9]\\\\d|4[0-57-9]))|6[23])\\\\d{4})|(?:1[2-6]\\\\d|4(?:2[24-8]|3[2-7]|[46][2-6]|5[3-5])|5(?:[27][2-8]|3[2-68]|4[24-8]|5[23]|6[2-4]|8[24-7]|9[2-7])|6(?:[19]20|42[03-6]|(?:52|7[45])\\\\d)|7(?:[04][24-8]|[15][2-7]|22|3[2-4])|8(?:1[2-689]|2[2-8]|(?:[35]2|64)\\\\d))\\\\d{4}|25\\\\d{5,6}|(?:2[2-9]|6(?:1[2356]|[24][2-6]|3[24-6]|5[2-4]|6[2-8]|7[235-7]|8[245]|9[24])|8(?:3[24]|5[245]))\\\\d{4}\",\n,,,\"1234567\",,,[6,7,8,9],[5]],[,,\"(?:17[01]|9(?:2(?:[0-4]|[56]\\\\d\\\\d)|(?:3(?:[0-36]|4\\\\d)|(?:6\\\\d|8[89]|9[4-8])\\\\d|7(?:3|40|[5-9]\\\\d))\\\\d|4(?:(?:[0245]\\\\d|[1379])\\\\d|88)|5[0-6])\\\\d)\\\\d{4}|9[69]1\\\\d{6}|9(?:[68]\\\\d|9[089])\\\\d{5}\",,,,\"92123456\",,,[7,8,9,10]],[,,\"80080(?:0[1-9]|2\\\\d)\\\\d{3}\",,,,\"8008001234\",,,[10]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,\"1333\\\\d{4}|[12]468\\\\d{4}\",,,,\"13331234\",,,[8]],\"MM\",95,\"00\",\"0\",,,\"0\",,,,[[,\"(\\\\d)(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3\",[\"16|2\"],\"0$1\"],[,\"(\\\\d{2})(\\\\d{2})(\\\\d{3})\",\n\"$1 $2 $3\",[\"4(?:[2-46]|5[3-5])|5|6(?:[1-689]|7[235-7])|7(?:[0-4]|5[2-7])|8[1-5]|(?:60|86)[23]\"],\"0$1\"],[,\"(\\\\d)(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[12]|452|678|86\",\"[12]|452|6788|86\"],\"0$1\"],[,\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[4-7]|8[1-35]\"],\"0$1\"],[,\"(\\\\d)(\\\\d{3})(\\\\d{4,6})\",\"$1 $2 $3\",[\"9(?:2[0-4]|[35-9]|4[137-9])\"],\"0$1\"],[,\"(\\\\d)(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"2\"],\"0$1\"],[,\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"8\"],\"0$1\"],[,\"(\\\\d)(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"92\"],\"0$1\"],[,\n\"(\\\\d)(\\\\d{5})(\\\\d{4})\",\"$1 $2 $3\",[\"9\"],\"0$1\"]],,[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],MN:[,[,,\"[12]\\\\d{7,9}|[5-9]\\\\d{7}\",,,,,,,[8,9,10],[4,5,6]],[,,\"[12]2[1-3]\\\\d{5,6}|(?:(?:[12](?:1|27)|5[368])\\\\d\\\\d|7(?:0(?:[0-5]\\\\d|7[078]|80)|128))\\\\d{4}|[12](?:3[2-8]|4[2-68]|5[1-4689])\\\\d{6,7}\",,,,\"53123456\",,,,[4,5,6]],[,,\"(?:83[01]|92[039])\\\\d{5}|(?:5[05]|6[069]|8[015689]|9[013-9])\\\\d{6}\",,,,\"88123456\",,,[8]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,\n,\"712[0-79]\\\\d{4}|7(?:1[013-9]|[25-9]\\\\d)\\\\d{5}\",,,,\"75123456\",,,[8]],\"MN\",976,\"001\",\"0\",,,\"0\",,,,[[,\"(\\\\d{2})(\\\\d{2})(\\\\d{4})\",\"$1 $2 $3\",[\"[12]1\"],\"0$1\"],[,\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[5-9]\"]],[,\"(\\\\d{3})(\\\\d{5,6})\",\"$1 $2\",[\"[12]2[1-3]\"],\"0$1\"],[,\"(\\\\d{4})(\\\\d{5,6})\",\"$1 $2\",[\"[12](?:27|3[2-8]|4[2-68]|5[1-4689])\",\"[12](?:27|3[2-8]|4[2-68]|5[1-4689])[0-3]\"],\"0$1\"],[,\"(\\\\d{5})(\\\\d{4,5})\",\"$1 $2\",[\"[12]\"],\"0$1\"]],,[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],MO:[,[,,\"0800\\\\d{3}|(?:28|[68]\\\\d)\\\\d{6}\",\n,,,,,,[7,8]],[,,\"(?:28[2-9]|8(?:11|[2-57-9]\\\\d))\\\\d{5}\",,,,\"28212345\",,,[8]],[,,\"6800[0-79]\\\\d{3}|6(?:[235]\\\\d\\\\d|6(?:0[0-5]|[1-9]\\\\d)|8(?:0[1-9]|[14-8]\\\\d|2[5-9]|[39][0-4]))\\\\d{4}\",,,,\"66123456\",,,[8]],[,,\"0800\\\\d{3}\",,,,\"0800501\",,,[7]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],\"MO\",853,\"00\",,,,,,,,[[,\"(\\\\d{4})(\\\\d{3})\",\"$1 $2\",[\"0\"]],[,\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[268]\"]]],,[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],MP:[,[,,\"[58]\\\\d{9}|(?:67|90)0\\\\d{7}\",\n,,,,,,[10],[7]],[,,\"670(?:2(?:3[3-7]|56|8[4-8])|32[1-38]|4(?:33|8[348])|5(?:32|55|88)|6(?:64|70|82)|78[3589]|8[3-9]8|989)\\\\d{4}\",,,,\"6702345678\",,,,[7]],[,,\"670(?:2(?:3[3-7]|56|8[4-8])|32[1-38]|4(?:33|8[348])|5(?:32|55|88)|6(?:64|70|82)|78[3589]|8[3-9]8|989)\\\\d{4}\",,,,\"6702345678\",,,,[7]],[,,\"8(?:00|33|44|55|66|77|88)[2-9]\\\\d{6}\",,,,\"8002123456\"],[,,\"900[2-9]\\\\d{6}\",,,,\"9002123456\"],[,,,,,,,,,[-1]],[,,\"52(?:3(?:[2-46-9][02-9]\\\\d|5(?:[02-46-9]\\\\d|5[0-46-9]))|4(?:[2-478][02-9]\\\\d|5(?:[034]\\\\d|2[024-9]|5[0-46-9])|6(?:0[1-9]|[2-9]\\\\d)|9(?:[05-9]\\\\d|2[0-5]|49)))\\\\d{4}|52[34][2-9]1[02-9]\\\\d{4}|5(?:00|2[125-9]|33|44|66|77|88)[2-9]\\\\d{6}\",\n,,,\"5002345678\"],[,,,,,,,,,[-1]],\"MP\",1,\"011\",\"1\",,,\"([2-9]\\\\d{6})$|1\",\"670$1\",,1,,,[,,,,,,,,,[-1]],,\"670\",[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],MQ:[,[,,\"(?:596\\\\d|7091)\\\\d{5}|(?:69|[89]\\\\d)\\\\d{7}\",,,,,,,[9]],[,,\"(?:596(?:[03-7]\\\\d|1[05]|2[7-9]|8[0-39]|9[04-9])|80[6-9]\\\\d\\\\d|9(?:477[6-9]|767[4589]))\\\\d{4}\",,,,\"596301234\"],[,,\"(?:69[67]\\\\d\\\\d|7091[0-3])\\\\d{4}\",,,,\"696201234\"],[,,\"80[0-5]\\\\d{6}\",,,,\"800012345\"],[,,\"8[129]\\\\d{7}\",,,,\"810123456\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,\"9(?:397[0-3]|477[0-5]|76(?:6\\\\d|7[0-367]))\\\\d{4}\",\n,,,\"976612345\"],\"MQ\",596,\"00\",\"0\",,,\"0\",,,,[[,\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[5-79]|8(?:0[6-9]|[36])\"],\"0$1\"],[,\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"8\"],\"0$1\"]],,[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],MR:[,[,,\"(?:[2-4]\\\\d\\\\d|800)\\\\d{5}\",,,,,,,[8]],[,,\"(?:25[08]|35\\\\d|45[1-7])\\\\d{5}\",,,,\"35123456\"],[,,\"[2-4][0-46-9]\\\\d{6}\",,,,\"22123456\"],[,,\"800\\\\d{5}\",,,,\"80012345\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],\"MR\",\n222,\"00\",,,,,,,,[[,\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[2-48]\"]]],,[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],MS:[,[,,\"(?:[58]\\\\d\\\\d|664|900)\\\\d{7}\",,,,,,,[10],[7]],[,,\"6644(?:1[0-3]|91)\\\\d{4}\",,,,\"6644912345\",,,,[7]],[,,\"664(?:3(?:49|9[1-6])|49[2-6])\\\\d{4}\",,,,\"6644923456\",,,,[7]],[,,\"8(?:00|33|44|55|66|77|88)[2-9]\\\\d{6}\",,,,\"8002123456\"],[,,\"900[2-9]\\\\d{6}\",,,,\"9002123456\"],[,,,,,,,,,[-1]],[,,\"52(?:3(?:[2-46-9][02-9]\\\\d|5(?:[02-46-9]\\\\d|5[0-46-9]))|4(?:[2-478][02-9]\\\\d|5(?:[034]\\\\d|2[024-9]|5[0-46-9])|6(?:0[1-9]|[2-9]\\\\d)|9(?:[05-9]\\\\d|2[0-5]|49)))\\\\d{4}|52[34][2-9]1[02-9]\\\\d{4}|5(?:00|2[125-9]|33|44|66|77|88)[2-9]\\\\d{6}\",\n,,,\"5002345678\"],[,,,,,,,,,[-1]],\"MS\",1,\"011\",\"1\",,,\"([34]\\\\d{6})$|1\",\"664$1\",,,,,[,,,,,,,,,[-1]],,\"664\",[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],MT:[,[,,\"3550\\\\d{4}|(?:[2579]\\\\d\\\\d|800)\\\\d{5}\",,,,,,,[8]],[,,\"20(?:3[1-4]|6[059])\\\\d{4}|2(?:0[19]|[1-357]\\\\d|60)\\\\d{5}\",,,,\"21001234\"],[,,\"(?:7(?:210|[79]\\\\d\\\\d)|9(?:[29]\\\\d\\\\d|69[67]|8(?:1[1-3]|89|97)))\\\\d{4}\",,,,\"96961234\"],[,,\"800(?:02|[3467]\\\\d)\\\\d{3}\",,,,\"80071234\"],[,,\"5(?:0(?:0(?:37|43)|(?:6\\\\d|70|9[0168])\\\\d)|[12]\\\\d0[1-5])\\\\d{3}\",,,,\n\"50037123\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,\"3550\\\\d{4}\",,,,\"35501234\"],\"MT\",356,\"00\",,,,,,,,[[,\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[2357-9]\"]]],,[,,\"7117\\\\d{4}\",,,,\"71171234\"],,,[,,,,,,,,,[-1]],[,,\"501\\\\d{5}\",,,,\"50112345\"],,,[,,,,,,,,,[-1]]],MU:[,[,,\"(?:[57]|8\\\\d\\\\d)\\\\d{7}|[2-468]\\\\d{6}\",,,,,,,[7,8,10]],[,,\"(?:2(?:[0346-8]\\\\d|1[0-7])|4(?:[013568]\\\\d|2[4-8]|71)|54(?:[3-5]\\\\d|71)|6\\\\d\\\\d|8(?:14|3[129]))\\\\d{4}\",,,,\"54480123\",,,[7,8]],[,,\"5(?:4(?:2[1-389]|7[1-9])|87[15-8])\\\\d{4}|(?:5(?:2[5-9]|4[3-689]|[57]\\\\d|8[0-689]|9[0-8])|7(?:0[0-4]|3[013]))\\\\d{5}\",\n,,,\"52512345\",,,[8]],[,,\"802\\\\d{7}|80[0-2]\\\\d{4}\",,,,\"8001234\",,,[7,10]],[,,\"30\\\\d{5}\",,,,\"3012345\",,,[7]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,\"3(?:20|9\\\\d)\\\\d{4}\",,,,\"3201234\",,,[7]],\"MU\",230,\"0(?:0|[24-7]0|3[03])\",,,,,,\"020\",,[[,\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[2-46]|8[013]\"]],[,\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[57]\"]],[,\"(\\\\d{5})(\\\\d{5})\",\"$1 $2\",[\"8\"]]],,[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],MV:[,[,,\"(?:800|9[0-57-9]\\\\d)\\\\d{7}|[34679]\\\\d{6}\",,,,,,,[7,10]],[,,\"(?:3(?:0[0-4]|3[0-59])|6(?:[58][024689]|6[024-68]|7[02468]))\\\\d{4}\",\n,,,\"6701234\",,,[7]],[,,\"(?:46[46]|[79]\\\\d\\\\d)\\\\d{4}\",,,,\"7712345\",,,[7]],[,,\"800\\\\d{7}\",,,,\"8001234567\",,,[10]],[,,\"900\\\\d{7}\",,,,\"9001234567\",,,[10]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],\"MV\",960,\"0(?:0|19)\",,,,,,\"00\",,[[,\"(\\\\d{3})(\\\\d{4})\",\"$1-$2\",[\"[34679]\"]],[,\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[89]\"]]],,[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,\"4(?:0[01]|50)\\\\d{4}\",,,,\"4001234\",,,[7]],,,[,,,,,,,,,[-1]]],MW:[,[,,\"(?:[1289]\\\\d|31|77)\\\\d{7}|1\\\\d{6}\",,,,,,,[7,9]],[,,\"(?:1[2-9]|2[12]\\\\d\\\\d)\\\\d{5}\",\n,,,\"1234567\"],[,,\"111\\\\d{6}|(?:31|77|[89][89])\\\\d{7}\",,,,\"991234567\",,,[9]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],\"MW\",265,\"00\",\"0\",,,\"0\",,,,[[,\"(\\\\d)(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"1[2-9]\"],\"0$1\"],[,\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"2\"],\"0$1\"],[,\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[137-9]\"],\"0$1\"]],,[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],MX:[,[,,\"[2-9]\\\\d{9}\",,,,,,,[10],[7,8]],[,,\"657[12]\\\\d{6}|(?:2(?:0[01]|2\\\\d|3[1-35-8]|4[13-9]|7[1-689]|8[1-578]|9[467])|3(?:1[1-79]|[2458][1-9]|3\\\\d|7[1-8]|9[1-5])|4(?:1[1-57-9]|[267][1-9]|3[1-8]|[45]\\\\d|8[1-35-9]|9[2-689])|5(?:[56]\\\\d|88|9[1-79])|6(?:1[2-68]|[2-4][1-9]|5[1-3689]|6[0-57-9]|7[1-7]|8[67]|9[4-8])|7(?:[1346][1-9]|[27]\\\\d|5[13-9]|8[1-69]|9[17])|8(?:1\\\\d|2[13-689]|3[1-6]|4[124-6]|6[1246-9]|7[0-378]|9[12479])|9(?:1[346-9]|2[1-4]|3[2-46-8]|5[1348]|[69]\\\\d|7[12]|8[1-8]))\\\\d{7}\",\n,,,\"2001234567\",,,,[7,8]],[,,\"657[12]\\\\d{6}|(?:2(?:2\\\\d|3[1-35-8]|4[13-9]|7[1-689]|8[1-578]|9[467])|3(?:1[1-79]|[2458][1-9]|3\\\\d|7[1-8]|9[1-5])|4(?:1[1-57-9]|[267][1-9]|3[1-8]|[45]\\\\d|8[1-35-9]|9[2-689])|5(?:[56]\\\\d|88|9[1-79])|6(?:1[2-68]|[2-4][1-9]|5[1-3689]|6[0-57-9]|7[1-7]|8[67]|9[4-8])|7(?:[1346][1-9]|[27]\\\\d|5[13-9]|8[1-69]|9[17])|8(?:1\\\\d|2[13-689]|3[1-6]|4[124-6]|6[1246-9]|7[0-378]|9[12479])|9(?:1[346-9]|2[1-4]|3[2-46-8]|5[1348]|[69]\\\\d|7[12]|8[1-8]))\\\\d{7}\",,,,\"2221234567\",,,,[7,8]],[,,\"8(?:00|88)\\\\d{7}\",\n,,,\"8001234567\"],[,,\"900\\\\d{7}\",,,,\"9001234567\"],[,,\"300\\\\d{7}\",,,,\"3001234567\"],[,,\"500\\\\d{7}\",,,,\"5001234567\"],[,,,,,,,,,[-1]],\"MX\",52,\"0[09]\",,,,,,\"00\",,[[,\"(\\\\d{5})\",\"$1\",[\"53\"]],[,\"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"33|5[56]|81\"]],[,\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[2-9]\"]]],[[,\"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"33|5[56]|81\"]],[,\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[2-9]\"]]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],MY:[,[,,\"1\\\\d{8,9}|(?:3\\\\d|[4-9])\\\\d{7}\",\n,,,,,,[8,9,10],[6,7]],[,,\"4270\\\\d{4}|(?:3(?:2[0-36-9]|3[0-368]|4[0-278]|5[0-24-8]|6[0-467]|7[1246-9]|8\\\\d|9[0-57])\\\\d|4(?:2[0-689]|[3-79]\\\\d|8[1-35689])|5(?:2[0-589]|[3468]\\\\d|5[0-489]|7[1-9]|9[23])|6(?:2[2-9]|3[1357-9]|[46]\\\\d|5[0-6]|7[0-35-9]|85|9[015-8])|7(?:[2579]\\\\d|3[03-68]|4[0-8]|6[5-9]|8[0-35-9])|8(?:[24][2-8]|3[2-5]|5[2-7]|6[2-589]|7[2-578]|[89][2-9])|9(?:0[57]|13|[25-7]\\\\d|[3489][0-8]))\\\\d{5}\",,,,\"323856789\",,,[8,9],[6,7]],[,,\"1(?:1888[689]|4400|8(?:47|8[27])[0-4])\\\\d{4}|1(?:0(?:[23568]\\\\d|4[0-6]|7[016-9]|9[0-8])|1(?:[1-5]\\\\d\\\\d|6(?:0[5-9]|[1-9]\\\\d)|7(?:[0-4]\\\\d|5[0-7]))|(?:[269]\\\\d|[37][1-9]|4[235-9])\\\\d|5(?:31|9\\\\d\\\\d)|8(?:1[23]|[236]\\\\d|4[06]|5(?:46|[7-9])|7[016-9]|8[01]|9[0-8]))\\\\d{5}\",\n,,,\"123456789\",,,[9,10]],[,,\"1[378]00\\\\d{6}\",,,,\"1300123456\",,,[10]],[,,\"1600\\\\d{6}\",,,,\"1600123456\",,,[10]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,\"15(?:4(?:6[0-4]\\\\d|8(?:0[125]|[17]\\\\d|21|3[01]|4[01589]|5[014]|6[02]))|6(?:32[0-6]|78\\\\d))\\\\d{4}\",,,,\"1546012345\",,,[10]],\"MY\",60,\"00\",\"0\",,,\"0\",,,,[[,\"(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1-$2 $3\",[\"[4-79]\"],\"0$1\"],[,\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1-$2 $3\",[\"1(?:[02469]|[378][1-9]|53)|8\",\"1(?:[02469]|[37][1-9]|53|8(?:[1-46-9]|5[7-9]))|8\"],\"0$1\"],[,\"(\\\\d)(\\\\d{4})(\\\\d{4})\",\n\"$1-$2 $3\",[\"3\"],\"0$1\"],[,\"(\\\\d)(\\\\d{3})(\\\\d{2})(\\\\d{4})\",\"$1-$2-$3-$4\",[\"1(?:[367]|80)\"]],[,\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1-$2 $3\",[\"15\"],\"0$1\"],[,\"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$1-$2 $3\",[\"1\"],\"0$1\"]],,[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],MZ:[,[,,\"(?:2|8\\\\d)\\\\d{7}\",,,,,,,[8,9]],[,,\"2(?:[1346]\\\\d|5[0-2]|[78][12]|93)\\\\d{5}\",,,,\"21123456\",,,[8]],[,,\"8[2-79]\\\\d{7}\",,,,\"821234567\",,,[9]],[,,\"800\\\\d{6}\",,,,\"800123456\",,,[9]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],\n[,,,,,,,,,[-1]],\"MZ\",258,\"00\",,,,,,,,[[,\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"2|8[2-79]\"]],[,\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"8\"]]],,[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],NA:[,[,,\"[68]\\\\d{7,8}\",,,,,,,[8,9]],[,,\"64426\\\\d{3}|6(?:1(?:2[2-7]|3[01378]|4[0-4])|254|32[0237]|4(?:27|41|5[25])|52[236-8]|626|7(?:2[2-4]|30))\\\\d{4,5}|6(?:1(?:(?:0\\\\d|2[0189]|3[24-69]|4[5-9])\\\\d|17|69|7[014])|2(?:17|5[0-36-8]|69|70)|3(?:17|2[14-689]|34|6[289]|7[01]|81)|4(?:17|2[0-2]|4[06]|5[0137]|69|7[01])|5(?:17|2[0459]|69|7[01])|6(?:17|25|38|42|69|7[01])|7(?:17|2[569]|3[13]|6[89]|7[01]))\\\\d{4}\",\n,,,\"61221234\"],[,,\"(?:60|8[1245])\\\\d{7}\",,,,\"811234567\",,,[9]],[,,\"80\\\\d{7}\",,,,\"800123456\",,,[9]],[,,\"8701\\\\d{5}\",,,,\"870123456\",,,[9]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,\"8(?:3\\\\d\\\\d|86)\\\\d{5}\",,,,\"88612345\"],\"NA\",264,\"00\",\"0\",,,\"0\",,,,[[,\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"88\"],\"0$1\"],[,\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"6\"],\"0$1\"],[,\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"87\"],\"0$1\"],[,\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"8\"],\"0$1\"]],,[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,,,,,,,,\n[-1]],,,[,,,,,,,,,[-1]]],NC:[,[,,\"(?:050|[2-57-9]\\\\d\\\\d)\\\\d{3}\",,,,,,,[6]],[,,\"(?:2[03-9]|3[0-5]|4[1-7]|88)\\\\d{4}\",,,,\"201234\"],[,,\"(?:5[0-4]|[79]\\\\d|8[0-79])\\\\d{4}\",,,,\"751234\"],[,,\"050\\\\d{3}\",,,,\"050012\"],[,,\"36\\\\d{4}\",,,,\"366711\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],\"NC\",687,\"00\",,,,,,,,[[,\"(\\\\d{3})\",\"$1\",[\"5[6-8]\"]],[,\"(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1.$2.$3\",[\"[02-57-9]\"]]],[[,\"(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1.$2.$3\",[\"[02-57-9]\"]]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,\n,,,,,,,,[-1]]],NE:[,[,,\"[027-9]\\\\d{7}\",,,,,,,[8]],[,,\"2(?:0(?:20|3[1-8]|4[13-5]|5[14]|6[14578]|7[1-578])|1(?:4[145]|5[14]|6[14-68]|7[169]|88))\\\\d{4}\",,,,\"20201234\"],[,,\"(?:23|7[0467]|[89]\\\\d)\\\\d{6}\",,,,\"93123456\"],[,,\"08\\\\d{6}\",,,,\"08123456\"],[,,\"09\\\\d{6}\",,,,\"09123456\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],\"NE\",227,\"00\",,,,,,,,[[,\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"08\"]],[,\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[089]|2[013]|7[0467]\"]]],,[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],\n[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],NF:[,[,,\"[13]\\\\d{5}\",,,,,,,[6],[5]],[,,\"(?:1(?:06|17|28|39)|3[0-2]\\\\d)\\\\d{3}\",,,,\"106609\",,,,[5]],[,,\"(?:14|3[58])\\\\d{4}\",,,,\"381234\",,,,[5]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],\"NF\",672,\"00\",,,,\"([0-258]\\\\d{4})$\",\"3$1\",,,[[,\"(\\\\d{2})(\\\\d{4})\",\"$1 $2\",[\"1[0-3]\"]],[,\"(\\\\d)(\\\\d{5})\",\"$1 $2\",[\"[13]\"]]],,[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],NG:[,[,,\"38\\\\d{6}|[78]\\\\d{9,13}|(?:20|9\\\\d)\\\\d{8}\",\n,,,,,,[8,10,11,12,13,14],[6,7]],[,,\"(?:20(?:[1259]\\\\d|3[013-9]|4[1-8]|6[024-689]|7[1-79]|8[2-9])|38)\\\\d{6}\",,,,\"2033123456\",,,[8,10],[6,7]],[,,\"(?:702[0-24-9]|819[01])\\\\d{6}|(?:7(?:0[13-9]|[12]\\\\d)|8(?:0[1-9]|1[0-8])|9(?:0[1-9]|1[1-6]))\\\\d{7}\",,,,\"8021234567\",,,[10]],[,,\"800\\\\d{7,11}\",,,,\"80017591759\",,,[10,11,12,13,14]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],\"NG\",234,\"009\",\"0\",,,\"0\",,,,[[,\"(\\\\d{2})(\\\\d{3})(\\\\d{2,3})\",\"$1 $2 $3\",[\"3\"],\"0$1\"],[,\"(\\\\d{3})(\\\\d{3})(\\\\d{3,4})\",\n\"$1 $2 $3\",[\"[7-9]\"],\"0$1\"],[,\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"20[129]\"],\"0$1\"],[,\"(\\\\d{4})(\\\\d{2})(\\\\d{4})\",\"$1 $2 $3\",[\"2\"],\"0$1\"],[,\"(\\\\d{3})(\\\\d{4})(\\\\d{4,5})\",\"$1 $2 $3\",[\"[78]\"],\"0$1\"],[,\"(\\\\d{3})(\\\\d{5})(\\\\d{5,6})\",\"$1 $2 $3\",[\"[78]\"],\"0$1\"]],,[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,\"700\\\\d{7,11}\",,,,\"7001234567\",,,[10,11,12,13,14]],,,[,,,,,,,,,[-1]]],NI:[,[,,\"(?:1800|[25-8]\\\\d{3})\\\\d{4}\",,,,,,,[8]],[,,\"2\\\\d{7}\",,,,\"21234567\"],[,,\"(?:5(?:5[0-7]|[78]\\\\d)|6(?:20|3[035]|4[045]|5[05]|77|8[1-9]|9[059])|(?:7[5-8]|8\\\\d)\\\\d)\\\\d{5}\",\n,,,\"81234567\"],[,,\"1800\\\\d{4}\",,,,\"18001234\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],\"NI\",505,\"00\",,,,,,,,[[,\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[125-8]\"]]],,[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],NL:[,[,,\"(?:[124-7]\\\\d\\\\d|3(?:[02-9]\\\\d|1[0-8]))\\\\d{6}|8\\\\d{6,9}|9\\\\d{6,10}|1\\\\d{4,5}\",,,,,,,[5,6,7,8,9,10,11]],[,,\"(?:1(?:[035]\\\\d|1[13-578]|6[124-8]|7[24]|8[0-467])|2(?:[0346]\\\\d|2[2-46-9]|5[125]|9[479])|3(?:[03568]\\\\d|1[3-8]|2[01]|4[1-8])|4(?:[0356]\\\\d|1[1-368]|7[58]|8[15-8]|9[23579])|5(?:[0358]\\\\d|[19][1-9]|2[1-57-9]|4[13-8]|6[126]|7[0-3578])|7\\\\d\\\\d)\\\\d{6}\",\n,,,\"101234567\",,,[9]],[,,\"(?:6[1-58]|970\\\\d)\\\\d{7}\",,,,\"612345678\",,,[9,11]],[,,\"800\\\\d{4,7}\",,,,\"8001234\",,,[7,8,9,10]],[,,\"90[069]\\\\d{4,7}\",,,,\"9061234\",,,[7,8,9,10]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,\"(?:85|91)\\\\d{7}\",,,,\"851234567\",,,[9]],\"NL\",31,\"00\",\"0\",,,\"0\",,,,[[,\"(\\\\d{4})\",\"$1\",[\"1[238]|[34]\"]],[,\"(\\\\d{2})(\\\\d{3,4})\",\"$1 $2\",[\"14\"]],[,\"(\\\\d{6})\",\"$1\",[\"1\"]],[,\"(\\\\d{3})(\\\\d{4,7})\",\"$1 $2\",[\"[89]0\"],\"0$1\"],[,\"(\\\\d{2})(\\\\d{7})\",\"$1 $2\",[\"66\"],\"0$1\"],[,\"(\\\\d)(\\\\d{8})\",\"$1 $2\",[\"6\"],\"0$1\"],[,\n\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"1[16-8]|2[259]|3[124]|4[17-9]|5[124679]\"],\"0$1\"],[,\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[1-578]|91\"],\"0$1\"],[,\"(\\\\d{3})(\\\\d{3})(\\\\d{5})\",\"$1 $2 $3\",[\"9\"],\"0$1\"]],[[,\"(\\\\d{3})(\\\\d{4,7})\",\"$1 $2\",[\"[89]0\"],\"0$1\"],[,\"(\\\\d{2})(\\\\d{7})\",\"$1 $2\",[\"66\"],\"0$1\"],[,\"(\\\\d)(\\\\d{8})\",\"$1 $2\",[\"6\"],\"0$1\"],[,\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"1[16-8]|2[259]|3[124]|4[17-9]|5[124679]\"],\"0$1\"],[,\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[1-578]|91\"],\"0$1\"],[,\"(\\\\d{3})(\\\\d{3})(\\\\d{5})\",\n\"$1 $2 $3\",[\"9\"],\"0$1\"]],[,,\"66\\\\d{7}\",,,,\"662345678\",,,[9]],,,[,,\"140(?:1[035]|2[0346]|3[03568]|4[0356]|5[0358]|8[458])|140(?:1[16-8]|2[259]|3[124]|4[17-9]|5[124679]|7)\\\\d\",,,,,,,[5,6]],[,,\"140(?:1[035]|2[0346]|3[03568]|4[0356]|5[0358]|8[458])|(?:140(?:1[16-8]|2[259]|3[124]|4[17-9]|5[124679]|7)|8[478]\\\\d{6})\\\\d\",,,,\"14020\",,,[5,6,9]],,,[,,,,,,,,,[-1]]],NO:[,[,,\"(?:0|[2-9]\\\\d{3})\\\\d{4}\",,,,,,,[5,8]],[,,\"(?:2[1-4]|3[1-3578]|5[1-35-7]|6[1-4679]|7[0-8])\\\\d{6}\",,,,\"21234567\",,,[8]],[,,\"(?:4[015-8]|9\\\\d)\\\\d{6}\",\n,,,\"40612345\",,,[8]],[,,\"80[01]\\\\d{5}\",,,,\"80012345\",,,[8]],[,,\"82[09]\\\\d{5}\",,,,\"82012345\",,,[8]],[,,\"810(?:0[0-6]|[2-8]\\\\d)\\\\d{3}\",,,,\"81021234\",,,[8]],[,,\"880\\\\d{5}\",,,,\"88012345\",,,[8]],[,,\"85[0-5]\\\\d{5}\",,,,\"85012345\",,,[8]],\"NO\",47,\"00\",,,,,,,,[[,\"(\\\\d{3})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3\",[\"8\"]],[,\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[2-79]\"]]],,[,,,,,,,,,[-1]],1,\"[02-689]|7[0-8]\",[,,,,,,,,,[-1]],[,,\"(?:0[235-9]|81(?:0(?:0[7-9]|1\\\\d)|5\\\\d\\\\d))\\\\d{3}\",,,,\"02000\"],,,[,,\"81[23]\\\\d{5}\",\n,,,\"81212345\",,,[8]]],NP:[,[,,\"(?:1\\\\d|9)\\\\d{9}|[1-9]\\\\d{7}\",,,,,,,[8,10,11],[6,7]],[,,\"(?:1[0-6]\\\\d|99[02-6])\\\\d{5}|(?:2[13-79]|3[135-8]|4[146-9]|5[135-7]|6[13-9]|7[15-9]|8[1-46-9]|9[1-7])[2-6]\\\\d{5}\",,,,\"14567890\",,,[8],[6,7]],[,,\"9(?:00|6[0-3]|7[024-6]|8[0-24-68])\\\\d{7}\",,,,\"9841234567\",,,[10]],[,,\"1(?:66001|800\\\\d\\\\d)\\\\d{5}\",,,,\"16600101234\",,,[11]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],\"NP\",977,\"00\",\"0\",,,\"0\",,,,[[,\"(\\\\d)(\\\\d{7})\",\"$1-$2\",[\"1[2-6]\"],\"0$1\"],[,\"(\\\\d{2})(\\\\d{6})\",\n\"$1-$2\",[\"1[01]|[2-8]|9(?:[1-59]|[67][2-6])\"],\"0$1\"],[,\"(\\\\d{3})(\\\\d{7})\",\"$1-$2\",[\"9\"]],[,\"(\\\\d{4})(\\\\d{2})(\\\\d{5})\",\"$1-$2-$3\",[\"1\"]]],[[,\"(\\\\d)(\\\\d{7})\",\"$1-$2\",[\"1[2-6]\"],\"0$1\"],[,\"(\\\\d{2})(\\\\d{6})\",\"$1-$2\",[\"1[01]|[2-8]|9(?:[1-59]|[67][2-6])\"],\"0$1\"],[,\"(\\\\d{3})(\\\\d{7})\",\"$1-$2\",[\"9\"]]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],NR:[,[,,\"(?:444|(?:55|8\\\\d)\\\\d|666)\\\\d{4}\",,,,,,,[7]],[,,\"444\\\\d{4}\",,,,\"4441234\"],[,,\"(?:55[3-9]|666|8\\\\d\\\\d)\\\\d{4}\",,,,\"5551234\"],[,,,,,,\n,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],\"NR\",674,\"00\",,,,,,,,[[,\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[4-68]\"]]],,[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],NU:[,[,,\"(?:[4-7]|888\\\\d)\\\\d{3}\",,,,,,,[4,7]],[,,\"[47]\\\\d{3}\",,,,\"7012\",,,[4]],[,,\"(?:[56]|888[1-9])\\\\d{3}\",,,,\"8884012\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],\"NU\",683,\"00\",,,,,,,,[[,\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"8\"]]],,[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],\n[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],NZ:[,[,,\"[1289]\\\\d{9}|50\\\\d{5}(?:\\\\d{2,3})?|[27-9]\\\\d{7,8}|(?:[34]\\\\d|6[0-35-9])\\\\d{6}|8\\\\d{4,6}\",,,,,,,[5,6,7,8,9,10]],[,,\"240\\\\d{5}|(?:3[2-79]|[49][2-9]|6[235-9]|7[2-57-9])\\\\d{6}\",,,,\"32345678\",,,[8],[7]],[,,\"2(?:[0-27-9]\\\\d|6)\\\\d{6,7}|2(?:1\\\\d|75)\\\\d{5}\",,,,\"211234567\",,,[8,9,10]],[,,\"508\\\\d{6,7}|80\\\\d{6,8}\",,,,\"800123456\",,,[8,9,10]],[,,\"(?:1[13-57-9]\\\\d{5}|50(?:0[08]|30|66|77|88))\\\\d{3}|90\\\\d{6,8}\",,,,\"900123456\",,,[7,8,9,10]],[,,,,,,,,,[-1]],[,,\"70\\\\d{7}\",\n,,,\"701234567\",,,[9]],[,,,,,,,,,[-1]],\"NZ\",64,\"0(?:0|161)\",\"0\",,,\"0\",,\"00\",,[[,\"(\\\\d{2})(\\\\d{3,8})\",\"$1 $2\",[\"8[1-79]\"],\"0$1\"],[,\"(\\\\d{3})(\\\\d{2})(\\\\d{2,3})\",\"$1 $2 $3\",[\"50[036-8]|8|90\",\"50(?:[0367]|88)|8|90\"],\"0$1\"],[,\"(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"24|[346]|7[2-57-9]|9[2-9]\"],\"0$1\"],[,\"(\\\\d{3})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"2(?:10|74)|[589]\"],\"0$1\"],[,\"(\\\\d{2})(\\\\d{3,4})(\\\\d{4})\",\"$1 $2 $3\",[\"1|2[028]\"],\"0$1\"],[,\"(\\\\d{2})(\\\\d{3})(\\\\d{3,5})\",\"$1 $2 $3\",[\"2(?:[169]|7[0-35-9])|7\"],\"0$1\"]],\n,[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,\"8(?:1[16-9]|22|3\\\\d|4[045]|5[459]|6[235-9]|7[0-3579]|90)\\\\d{2,7}\",,,,\"83012378\"],,,[,,,,,,,,,[-1]]],OM:[,[,,\"(?:1505|[279]\\\\d{3}|500)\\\\d{4}|800\\\\d{5,6}\",,,,,,,[7,8,9]],[,,\"2[1-6]\\\\d{6}\",,,,\"23123456\",,,[8]],[,,\"(?:1505|90[1-9]\\\\d)\\\\d{4}|(?:7[126-9]|9[1-9])\\\\d{6}\",,,,\"92123456\",,,[8]],[,,\"8007\\\\d{4,5}|(?:500|800[05])\\\\d{4}\",,,,\"80071234\"],[,,\"900\\\\d{5}\",,,,\"90012345\",,,[8]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],\"OM\",968,\"00\",,,,,,,,[[,\"(\\\\d{3})(\\\\d{4,6})\",\n\"$1 $2\",[\"[58]\"]],[,\"(\\\\d{2})(\\\\d{6})\",\"$1 $2\",[\"2\"]],[,\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[179]\"]]],,[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],PA:[,[,,\"(?:00800|8\\\\d{3})\\\\d{6}|[68]\\\\d{7}|[1-57-9]\\\\d{6}\",,,,,,,[7,8,10,11]],[,,\"(?:1(?:0\\\\d|1[479]|2[37]|3[0137]|4[17]|5[05]|6[058]|7[0167]|8[2358]|9[1389])|2(?:[0235-79]\\\\d|1[0-7]|4[013-9]|8[02-9])|3(?:[07-9]\\\\d|1[0-7]|2[0-5]|33|4[0-79]|5[0-35]|6[068])|4(?:00|3[0-579]|4\\\\d|7[0-57-9])|5(?:[01]\\\\d|2[0-7]|[56]0|79)|7(?:0[09]|2[0-26-8]|3[03]|4[04]|5[05-9]|6[0156]|7[0-24-9]|8[5-9]|90)|8(?:09|2[89]|3\\\\d|4[0-24-689]|5[014]|8[02])|9(?:0[5-9]|1[0135-8]|2[036-9]|3[35-79]|40|5[0457-9]|6[05-9]|7[04-9]|8[35-8]|9\\\\d))\\\\d{4}\",\n,,,\"2001234\",,,[7]],[,,\"(?:1[16]1|21[89]|6\\\\d{3}|8(?:1[01]|7[23]))\\\\d{4}\",,,,\"61234567\",,,[7,8]],[,,\"800\\\\d{4,5}|(?:00800|800\\\\d)\\\\d{6}\",,,,\"8001234\"],[,,\"(?:8(?:22|55|60|7[78]|86)|9(?:00|81))\\\\d{4}\",,,,\"8601234\",,,[7]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],\"PA\",507,\"00\",,,,,,,,[[,\"(\\\\d{3})(\\\\d{4})\",\"$1-$2\",[\"[1-57-9]\"]],[,\"(\\\\d{4})(\\\\d{4})\",\"$1-$2\",[\"[68]\"]],[,\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"8\"]]],,[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],PE:[,[,,\"(?:[14-8]|9\\\\d)\\\\d{7}\",\n,,,,,,[8,9],[6,7]],[,,\"(?:(?:(?:4[34]|5[14])[0-8]|687)\\\\d|7(?:173|(?:3[0-8]|55)\\\\d)|8(?:10[05689]|6(?:0[06-9]|1[6-9]|29)|7(?:0[0569]|[56]0)))\\\\d{4}|(?:1[0-8]|4[12]|5[236]|6[1-7]|7[246]|8[2-4])\\\\d{6}\",,,,\"11234567\",,,[8],[6,7]],[,,\"9\\\\d{8}\",,,,\"912345678\",,,[9]],[,,\"800\\\\d{5}\",,,,\"80012345\",,,[8]],[,,\"805\\\\d{5}\",,,,\"80512345\",,,[8]],[,,\"801\\\\d{5}\",,,,\"80112345\",,,[8]],[,,\"80[24]\\\\d{5}\",,,,\"80212345\",,,[8]],[,,,,,,,,,[-1]],\"PE\",51,\"00|19(?:1[124]|77|90)00\",\"0\",\" Anexo \",,\"0\",,\"00\",,[[,\"(\\\\d{3})(\\\\d{5})\",\n\"$1 $2\",[\"80\"],\"(0$1)\"],[,\"(\\\\d)(\\\\d{7})\",\"$1 $2\",[\"1\"],\"(0$1)\"],[,\"(\\\\d{2})(\\\\d{6})\",\"$1 $2\",[\"[4-8]\"],\"(0$1)\"],[,\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"9\"]]],,[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],PF:[,[,,\"4\\\\d{5}(?:\\\\d{2})?|8\\\\d{7,8}\",,,,,,,[6,8,9]],[,,\"4(?:0[4-689]|9[4-68])\\\\d{5}\",,,,\"40412345\",,,[8]],[,,\"8[7-9]\\\\d{6}\",,,,\"87123456\",,,[8]],[,,\"80[0-5]\\\\d{6}\",,,,\"800012345\",,,[9]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,\"499\\\\d{5}\",,,,\"49901234\",,,[8]],\n\"PF\",689,\"00\",,,,,,,,[[,\"(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3\",[\"44\"]],[,\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"4|8[7-9]\"]],[,\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"8\"]]],,[,,,,,,,,,[-1]],,,[,,\"44\\\\d{4}\",,,,,,,[6]],[,,\"44\\\\d{4}\",,,,\"440123\",,,[6]],,,[,,,,,,,,,[-1]]],PG:[,[,,\"(?:180|[78]\\\\d{3})\\\\d{4}|(?:[2-589]\\\\d|64)\\\\d{5}\",,,,,,,[7,8]],[,,\"(?:(?:3[0-2]|4[257]|5[34]|9[78])\\\\d|64[1-9]|85[02-46-9])\\\\d{4}\",,,,\"3123456\",,,[7]],[,,\"(?:7\\\\d|8[1-38])\\\\d{6}\",,,,\"70123456\",,,[8]],[,\n,\"180\\\\d{4}\",,,,\"1801234\",,,[7]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,\"2(?:0[0-57]|7[568])\\\\d{4}\",,,,\"2751234\",,,[7]],\"PG\",675,\"00|140[1-3]\",,,,,,\"00\",,[[,\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"18|[2-69]|85\"]],[,\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[78]\"]]],,[,,\"27[01]\\\\d{4}\",,,,\"2700123\",,,[7]],,,[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],PH:[,[,,\"(?:[2-7]|9\\\\d)\\\\d{8}|2\\\\d{5}|(?:1800|8)\\\\d{7,9}\",,,,,,,[6,8,9,10,11,12,13],[4,5,7]],[,,\"(?:(?:2[3-8]|3[2-68]|4[2-9]|5[2-6]|6[2-58]|7[24578])\\\\d{3}|88(?:22\\\\d\\\\d|42))\\\\d{4}|(?:2|8[2-8]\\\\d\\\\d)\\\\d{5}\",\n,,,\"232345678\",,,[6,8,9,10],[4,5,7]],[,,\"(?:8(?:1[37]|9[5-8])|9(?:0[5-9]|1[0-24-9]|[235-7]\\\\d|4[2-9]|8[135-9]|9[1-9]))\\\\d{7}\",,,,\"9051234567\",,,[10]],[,,\"1800\\\\d{7,9}\",,,,\"180012345678\",,,[11,12,13]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],\"PH\",63,\"00\",\"0\",,,\"0\",,,,[[,\"(\\\\d)(\\\\d{5})\",\"$1 $2\",[\"2\"],\"(0$1)\"],[,\"(\\\\d{4})(\\\\d{4,6})\",\"$1 $2\",[\"3(?:23|39|46)|4(?:2[3-6]|[35]9|4[26]|76)|544|88[245]|(?:52|64|86)2\",\"3(?:230|397|461)|4(?:2(?:35|[46]4|51)|396|4(?:22|63)|59[347]|76[15])|5(?:221|446)|642[23]|8(?:622|8(?:[24]2|5[13]))\"],\n\"(0$1)\"],[,\"(\\\\d{5})(\\\\d{4})\",\"$1 $2\",[\"346|4(?:27|9[35])|883\",\"3469|4(?:279|9(?:30|56))|8834\"],\"(0$1)\"],[,\"(\\\\d)(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"2\"],\"(0$1)\"],[,\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[3-7]|8[2-8]\"],\"(0$1)\"],[,\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[89]\"],\"0$1\"],[,\"(\\\\d{4})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"1\"]],[,\"(\\\\d{4})(\\\\d{1,2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3 $4\",[\"1\"]]],,[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],PK:[,[,,\"122\\\\d{6}|[24-8]\\\\d{10,11}|9(?:[013-9]\\\\d{8,10}|2(?:[01]\\\\d\\\\d|2(?:[06-8]\\\\d|1[01]))\\\\d{7})|(?:[2-8]\\\\d{3}|92(?:[0-7]\\\\d|8[1-9]))\\\\d{6}|[24-9]\\\\d{8}|[89]\\\\d{7}\",\n,,,,,,[8,9,10,11,12],[5,6,7]],[,,\"(?:(?:21|42)[2-9]|58[126])\\\\d{7}|(?:2[25]|4[0146-9]|5[1-35-7]|6[1-8]|7[14]|8[16]|91)[2-9]\\\\d{6,7}|(?:2(?:3[2358]|4[2-4]|9[2-8])|45[3479]|54[2-467]|60[468]|72[236]|8(?:2[2-689]|3[23578]|4[3478]|5[2356])|9(?:2[2-8]|3[27-9]|4[2-6]|6[3569]|9[25-8]))[2-9]\\\\d{5,6}\",,,,\"2123456789\",,,[9,10],[5,6,7,8]],[,,\"3(?:[0-247]\\\\d|3[0-79]|55|64)\\\\d{7}\",,,,\"3012345678\",,,[10]],[,,\"800\\\\d{5}(?:\\\\d{3})?\",,,,\"80012345\",,,[8,11]],[,,\"900\\\\d{5}\",,,,\"90012345\",,,[8]],[,,,,,,,,,[-1]],[,,\"122\\\\d{6}\",\n,,,\"122044444\",,,[9]],[,,,,,,,,,[-1]],\"PK\",92,\"00\",\"0\",,,\"0\",,,,[[,\"(\\\\d{3})(\\\\d{3})(\\\\d{2,7})\",\"$1 $2 $3\",[\"[89]0\"],\"0$1\"],[,\"(\\\\d{4})(\\\\d{5})\",\"$1 $2\",[\"1\"]],[,\"(\\\\d{3})(\\\\d{6,7})\",\"$1 $2\",[\"2(?:3[2358]|4[2-4]|9[2-8])|45[3479]|54[2-467]|60[468]|72[236]|8(?:2[2-689]|3[23578]|4[3478]|5[2356])|9(?:2[2-8]|3[27-9]|4[2-6]|6[3569]|9[25-8])\",\"9(?:2[3-8]|98)|(?:2(?:3[2358]|4[2-4]|9[2-8])|45[3479]|54[2-467]|60[468]|72[236]|8(?:2[2-689]|3[23578]|4[3478]|5[2356])|9(?:22|3[27-9]|4[2-6]|6[3569]|9[25-7]))[2-9]\"],\n\"(0$1)\"],[,\"(\\\\d{2})(\\\\d{7,8})\",\"$1 $2\",[\"(?:2[125]|4[0-246-9]|5[1-35-7]|6[1-8]|7[14]|8[16]|91)[2-9]\"],\"(0$1)\"],[,\"(\\\\d{5})(\\\\d{5})\",\"$1 $2\",[\"58\"],\"(0$1)\"],[,\"(\\\\d{3})(\\\\d{7})\",\"$1 $2\",[\"3\"],\"0$1\"],[,\"(\\\\d{2})(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"2[125]|4[0-246-9]|5[1-35-7]|6[1-8]|7[14]|8[16]|91\"],\"(0$1)\"],[,\"(\\\\d{3})(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"[24-9]\"],\"(0$1)\"]],,[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,\"(?:2(?:[125]|3[2358]|4[2-4]|9[2-8])|4(?:[0-246-9]|5[3479])|5(?:[1-35-7]|4[2-467])|6(?:0[468]|[1-8])|7(?:[14]|2[236])|8(?:[16]|2[2-689]|3[23578]|4[3478]|5[2356])|9(?:1|22|3[27-9]|4[2-6]|6[3569]|9[2-7]))111\\\\d{6}\",\n,,,\"21111825888\",,,[11,12]],,,[,,,,,,,,,[-1]]],PL:[,[,,\"(?:6|8\\\\d\\\\d)\\\\d{7}|[1-9]\\\\d{6}(?:\\\\d{2})?|[26]\\\\d{5}\",,,,,,,[6,7,8,9,10]],[,,\"47\\\\d{7}|(?:1[2-8]|2[2-69]|3[2-4]|4[1-468]|5[24-689]|6[1-3578]|7[14-7]|8[1-79]|9[145])(?:[02-9]\\\\d{6}|1(?:[0-8]\\\\d{5}|9\\\\d{3}(?:\\\\d{2})?))\",,,,\"123456789\",,,[7,9]],[,,\"21(?:1[013-5]|2\\\\d|3[4-9])\\\\d{5}|(?:45|5[0137]|6[069]|7[2389]|88)\\\\d{7}\",,,,\"512345678\",,,[9]],[,,\"800\\\\d{6,7}\",,,,\"800123456\",,,[9,10]],[,,\"70[01346-8]\\\\d{6}\",,,,\"701234567\",,,[9]],[,,\"801\\\\d{6}\",,\n,,\"801234567\",,,[9]],[,,,,,,,,,[-1]],[,,\"39\\\\d{7}\",,,,\"391234567\",,,[9]],\"PL\",48,\"00\",,,,,,,,[[,\"(\\\\d{5})\",\"$1\",[\"19\"]],[,\"(\\\\d{3})(\\\\d{3})\",\"$1 $2\",[\"11|20|64\"]],[,\"(\\\\d{2})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3\",[\"(?:1[2-8]|2[2-69]|3[2-4]|4[1-468]|5[24-689]|6[1-3578]|7[14-7]|8[1-79]|9[145])1\",\"(?:1[2-8]|2[2-69]|3[2-4]|4[1-468]|5[24-689]|6[1-3578]|7[14-7]|8[1-79]|9[145])19\"]],[,\"(\\\\d{3})(\\\\d{2})(\\\\d{2,3})\",\"$1 $2 $3\",[\"64\"]],[,\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"21|39|45|5[0137]|6[0469]|7[02389]|8(?:0[14]|8)\"]],\n[,\"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"1[2-8]|[2-7]|8[1-79]|9[145]\"]],[,\"(\\\\d{3})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"8\"]]],,[,,\"64\\\\d{4,7}\",,,,\"641234567\",,,[6,7,8,9]],,,[,,,,,,,,,[-1]],[,,\"804\\\\d{6}\",,,,\"804123456\",,,[9]],,,[,,,,,,,,,[-1]]],PM:[,[,,\"[45]\\\\d{5}|(?:708|8\\\\d\\\\d)\\\\d{6}\",,,,,,,[6,9]],[,,\"(?:4[1-35-9]|5[0-47-9]|80[6-9]\\\\d\\\\d)\\\\d{4}\",,,,\"430123\"],[,,\"(?:4[02-489]|5[02-9]|708(?:4[0-5]|5[0-6]))\\\\d{4}\",,,,\"551234\"],[,,\"80[0-5]\\\\d{6}\",,,,\"800012345\",,,[9]],[,,\"8[129]\\\\d{7}\",,,,\"810123456\",\n,,[9]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],\"PM\",508,\"00\",\"0\",,,\"0\",,,,[[,\"(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3\",[\"[45]\"],\"0$1\"],[,\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"7\"]],[,\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"8\"],\"0$1\"]],,[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],PR:[,[,,\"(?:[589]\\\\d\\\\d|787)\\\\d{7}\",,,,,,,[10],[7]],[,,\"(?:787|939)[2-9]\\\\d{6}\",,,,\"7872345678\",,,,[7]],[,,\"(?:787|939)[2-9]\\\\d{6}\",,,,\"7872345678\",,,,[7]],[,,\"8(?:00|33|44|55|66|77|88)[2-9]\\\\d{6}\",\n,,,\"8002345678\"],[,,\"900[2-9]\\\\d{6}\",,,,\"9002345678\"],[,,,,,,,,,[-1]],[,,\"52(?:3(?:[2-46-9][02-9]\\\\d|5(?:[02-46-9]\\\\d|5[0-46-9]))|4(?:[2-478][02-9]\\\\d|5(?:[034]\\\\d|2[024-9]|5[0-46-9])|6(?:0[1-9]|[2-9]\\\\d)|9(?:[05-9]\\\\d|2[0-5]|49)))\\\\d{4}|52[34][2-9]1[02-9]\\\\d{4}|5(?:00|2[125-9]|33|44|66|77|88)[2-9]\\\\d{6}\",,,,\"5002345678\"],[,,,,,,,,,[-1]],\"PR\",1,\"011\",\"1\",,,\"1\",,,1,,,[,,,,,,,,,[-1]],,\"787|939\",[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],PS:[,[,,\"[2489]2\\\\d{6}|(?:1\\\\d|5)\\\\d{8}\",,,,,,,[8,9,10],\n[7]],[,,\"(?:22[2-47-9]|42[45]|82[014-68]|92[3569])\\\\d{5}\",,,,\"22234567\",,,[8],[7]],[,,\"5[69]\\\\d{7}\",,,,\"599123456\",,,[9]],[,,\"1800\\\\d{6}\",,,,\"1800123456\",,,[10]],[,,,,,,,,,[-1]],[,,\"1700\\\\d{6}\",,,,\"1700123456\",,,[10]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],\"PS\",970,\"00\",\"0\",,,\"0\",,,,[[,\"(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[2489]\"],\"0$1\"],[,\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"5\"],\"0$1\"],[,\"(\\\\d{4})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"1\"]]],,[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],\nPT:[,[,,\"1693\\\\d{5}|(?:[26-9]\\\\d|30)\\\\d{7}\",,,,,,,[9]],[,,\"2(?:[12]\\\\d|3[1-689]|4[1-59]|[57][1-9]|6[1-35689]|8[1-69]|9[1256])\\\\d{6}\",,,,\"212345678\"],[,,\"6(?:[06]92(?:30|9\\\\d)|[35]92(?:[049]\\\\d|3[034]))\\\\d{3}|(?:(?:16|6[0356])93|9(?:[1-36]\\\\d\\\\d|480))\\\\d{5}\",,,,\"912345678\"],[,,\"80[02]\\\\d{6}\",,,,\"800123456\"],[,,\"(?:6(?:0[178]|4[68])\\\\d|76(?:0[1-57]|1[2-47]|2[237]))\\\\d{5}\",,,,\"760123456\"],[,,\"80(?:8\\\\d|9[1579])\\\\d{5}\",,,,\"808123456\"],[,,\"884[0-4689]\\\\d{5}\",,,,\"884123456\"],[,,\"30\\\\d{7}\",,,,\"301234567\"],\n\"PT\",351,\"00\",,,,,,,,[[,\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"2[12]\"]],[,\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"16|[236-9]\"]]],,[,,\"6(?:222\\\\d|8988)\\\\d{4}\",,,,\"622212345\"],,,[,,,,,,,,,[-1]],[,,\"70(?:38[01]|596|(?:7\\\\d|8[17])\\\\d)\\\\d{4}\",,,,\"707123456\"],,,[,,\"600\\\\d{6}|6[06]92(?:0\\\\d|3[349]|49)\\\\d{3}\",,,,\"600110000\"]],PW:[,[,,\"(?:[24-8]\\\\d\\\\d|345|900)\\\\d{4}\",,,,,,,[7]],[,,\"(?:2(?:55|77)|345|488|5(?:35|44|87)|6(?:22|54|79)|7(?:33|47)|8(?:24|55|76)|900)\\\\d{4}\",,,,\"2771234\"],[,,\"(?:(?:46|83)[0-5]|6[2-4689]0)\\\\d{4}|(?:45|77|88)\\\\d{5}\",\n,,,\"6201234\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],\"PW\",680,\"01[12]\",,,,,,,,[[,\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[2-9]\"]]],,[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],PY:[,[,,\"59\\\\d{4,6}|9\\\\d{5,10}|(?:[2-46-8]\\\\d|5[0-8])\\\\d{4,7}\",,,,,,,[6,7,8,9,10,11],[5]],[,,\"(?:[26]1|3[289]|4[1246-8]|7[1-3]|8[1-36])\\\\d{5,7}|(?:2(?:2[4-68]|[4-68]\\\\d|7[15]|9[1-5])|3(?:18|3[167]|4[2357]|51|[67]\\\\d)|4(?:3[12]|5[13]|9[1-47])|5(?:[1-4]\\\\d|5[02-4])|6(?:3[1-3]|44|7[1-8])|7(?:4[0-4]|5\\\\d|6[1-578]|75|8[0-8])|858)\\\\d{5,6}\",\n,,,\"212345678\",,,[7,8,9],[5,6]],[,,\"9(?:51|6[129]|7[1-6]|8[1-7]|9[1-5])\\\\d{6}\",,,,\"961456789\",,,[9]],[,,\"9800\\\\d{5,7}\",,,,\"98000123456\",,,[9,10,11]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,\"8700[0-4]\\\\d{4}\",,,,\"870012345\",,,[9]],\"PY\",595,\"00\",\"0\",,,\"0\",,,,[[,\"(\\\\d{3})(\\\\d{3,6})\",\"$1 $2\",[\"[2-9]0\"],\"0$1\"],[,\"(\\\\d{2})(\\\\d{5})\",\"$1 $2\",[\"[26]1|3[289]|4[1246-8]|7[1-3]|8[1-36]\"],\"(0$1)\"],[,\"(\\\\d{3})(\\\\d{4,5})\",\"$1 $2\",[\"2[279]|3[13-5]|4[359]|5|6(?:[34]|7[1-46-8])|7[46-8]|85\"],\"(0$1)\"],[,\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\n\"$1 $2 $3\",[\"2[14-68]|3[26-9]|4[1246-8]|6(?:1|75)|7[1-35]|8[1-36]\"],\"(0$1)\"],[,\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"87\"]],[,\"(\\\\d{3})(\\\\d{6})\",\"$1 $2\",[\"9(?:[5-79]|8[1-7])\"],\"0$1\"],[,\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[2-8]\"],\"0$1\"],[,\"(\\\\d{4})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"9\"]]],,[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,\"[2-9]0\\\\d{4,7}\",,,,\"201234567\",,,[6,7,8,9]],,,[,,,,,,,,,[-1]]],QA:[,[,,\"800\\\\d{4}|(?:2|800)\\\\d{6}|(?:0080|[3-7])\\\\d{7}\",,,,,,,[7,8,9,11]],[,,\"4(?:1111|2022)\\\\d{3}|4(?:[04]\\\\d\\\\d|14[0-6]|999)\\\\d{4}\",\n,,,\"44123456\",,,[8]],[,,\"[35-7]\\\\d{7}\",,,,\"33123456\",,,[8]],[,,\"800\\\\d{4}|(?:0080[01]|800)\\\\d{6}\",,,,\"8001234\",,,[7,9,11]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],\"QA\",974,\"00\",,,,,,,,[[,\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"2[16]|8\"]],[,\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[3-7]\"]]],,[,,\"2[16]\\\\d{5}\",,,,\"2123456\",,,[7]],,,[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],RE:[,[,,\"709\\\\d{6}|(?:26|[689]\\\\d)\\\\d{7}\",,,,,,,[9]],[,,\"26(?:2\\\\d\\\\d|3(?:0\\\\d|1[0-6]))\\\\d{4}\",,,,\"262161234\"],[,,\"(?:69(?:2\\\\d\\\\d|3(?:[06][0-6]|1[013]|2[0-2]|3[0-39]|4\\\\d|5[0-5]|7[0-37]|8[0-8]|9[0-479]))|7092[0-3])\\\\d{4}\",\n,,,\"692123456\"],[,,\"80\\\\d{7}\",,,,\"801234567\"],[,,\"89[1-37-9]\\\\d{6}\",,,,\"891123456\"],[,,\"8(?:1[019]|2[0156]|84|90)\\\\d{6}\",,,,\"810123456\"],[,,,,,,,,,[-1]],[,,\"9(?:399[0-3]|479[0-5]|76(?:2[278]|3[0-37]))\\\\d{4}\",,,,\"939901234\"],\"RE\",262,\"00\",\"0\",,,\"0\",,,,[[,\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[26-9]\"],\"0$1\"]],,[,,,,,,,,,[-1]],1,,[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],RO:[,[,,\"(?:[236-8]\\\\d|90)\\\\d{7}|[23]\\\\d{5}\",,,,,,,[6,9]],[,,\"[23][13-6]\\\\d{7}|(?:2(?:19\\\\d|[3-6]\\\\d9)|31\\\\d\\\\d)\\\\d\\\\d\",\n,,,\"211234567\"],[,,\"(?:630|702)0\\\\d{5}|(?:6(?:00|2\\\\d)|7(?:0[013-9]|1[0-3]|[2-7]\\\\d|8[03-8]|9[0-39]))\\\\d{6}\",,,,\"712034567\",,,[9]],[,,\"800\\\\d{6}\",,,,\"800123456\",,,[9]],[,,\"90[0136]\\\\d{6}\",,,,\"900123456\",,,[9]],[,,\"801\\\\d{6}\",,,,\"801123456\",,,[9]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],\"RO\",40,\"00\",\"0\",\" int \",,\"0\",,,,[[,\"(\\\\d{3})(\\\\d{3})\",\"$1 $2\",[\"2[3-6]\",\"2[3-6]\\\\d9\"],\"0$1\"],[,\"(\\\\d{2})(\\\\d{4})\",\"$1 $2\",[\"219|31\"],\"0$1\"],[,\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[23]1\"],\"0$1\"],[,\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\n\"$1 $2 $3\",[\"[236-9]\"],\"0$1\"]],,[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,\"(?:37\\\\d|80[578])\\\\d{6}\",,,,\"372123456\",,,[9]],,,[,,,,,,,,,[-1]]],RS:[,[,,\"38[02-9]\\\\d{6,9}|6\\\\d{7,9}|90\\\\d{4,8}|38\\\\d{5,6}|(?:7\\\\d\\\\d|800)\\\\d{3,9}|(?:[12]\\\\d|3[0-79])\\\\d{5,10}\",,,,,,,[6,7,8,9,10,11,12],[4,5]],[,,\"(?:11[1-9]\\\\d|(?:2[389]|39)(?:0[2-9]|[2-9]\\\\d))\\\\d{3,8}|(?:1[02-9]|2[0-24-7]|3[0-8])[2-9]\\\\d{4,9}\",,,,\"10234567\",,,[7,8,9,10,11,12],[4,5,6]],[,,\"6(?:[0-689]|7\\\\d)\\\\d{6,7}\",,,,\"601234567\",,,[8,9,10]],[,,\"800\\\\d{3,9}\",,\n,,\"80012345\"],[,,\"(?:78\\\\d|90[0169])\\\\d{3,7}\",,,,\"90012345\",,,[6,7,8,9,10]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],\"RS\",381,\"00\",\"0\",,,\"0\",,,,[[,\"(\\\\d{3})(\\\\d{3,9})\",\"$1 $2\",[\"(?:2[389]|39)0|[7-9]\"],\"0$1\"],[,\"(\\\\d{2})(\\\\d{5,10})\",\"$1 $2\",[\"[1-36]\"],\"0$1\"]],,[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,\"7[06]\\\\d{4,10}\",,,,\"700123456\"],,,[,,,,,,,,,[-1]]],RU:[,[,,\"8\\\\d{13}|[347-9]\\\\d{9}\",,,,,,,[10,14],[7]],[,,\"(?:3(?:0[12]|4[1-35-79]|5[1-3]|65|8[1-58]|9[0145])|4(?:01|1[1356]|2[13467]|7[1-5]|8[1-7]|9[1-689])|8(?:1[1-8]|2[01]|3[13-6]|4[0-8]|5[15]|6[1-35-79]|7[1-37-9]))\\\\d{7}\",\n,,,\"3011234567\",,,[10],[7]],[,,\"9\\\\d{9}\",,,,\"9123456789\",,,[10]],[,,\"8(?:0[04]|108\\\\d{3})\\\\d{7}\",,,,\"8001234567\"],[,,\"80[39]\\\\d{7}\",,,,\"8091234567\",,,[10]],[,,,,,,,,,[-1]],[,,\"808\\\\d{7}\",,,,\"8081234567\",,,[10]],[,,,,,,,,,[-1]],\"RU\",7,\"810\",\"8\",,,\"8\",,\"8~10\",,[[,\"(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1-$2-$3\",[\"[0-79]\"]],[,\"(\\\\d{4})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"7(?:1[0-8]|2[1-9])\",\"7(?:1(?:[0-356]2|4[29]|7|8[27])|2(?:1[23]|[2-9]2))\",\"7(?:1(?:[0-356]2|4[29]|7|8[27])|2(?:13[03-69]|62[013-9]))|72[1-57-9]2\"],\n\"8 ($1)\",,1],[,\"(\\\\d{5})(\\\\d)(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"7(?:1[0-68]|2[1-9])\",\"7(?:1(?:[06][3-6]|[18]|2[35]|[3-5][3-5])|2(?:[13][3-5]|[24-689]|7[457]))\",\"7(?:1(?:0(?:[356]|4[023])|[18]|2(?:3[013-9]|5)|3[45]|43[013-79]|5(?:3[1-8]|4[1-7]|5)|6(?:3[0-35-9]|[4-6]))|2(?:1(?:3[178]|[45])|[24-689]|3[35]|7[457]))|7(?:14|23)4[0-8]|71(?:33|45)[1-79]\"],\"8 ($1)\",,1],[,\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"7\"],\"8 ($1)\",,1],[,\"(\\\\d{3})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2-$3-$4\",[\"[349]|8(?:[02-7]|1[1-8])\"],\n\"8 ($1)\",,1],[,\"(\\\\d{4})(\\\\d{4})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"8\"],\"8 ($1)\"]],[[,\"(\\\\d{4})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"7(?:1[0-8]|2[1-9])\",\"7(?:1(?:[0-356]2|4[29]|7|8[27])|2(?:1[23]|[2-9]2))\",\"7(?:1(?:[0-356]2|4[29]|7|8[27])|2(?:13[03-69]|62[013-9]))|72[1-57-9]2\"],\"8 ($1)\",,1],[,\"(\\\\d{5})(\\\\d)(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"7(?:1[0-68]|2[1-9])\",\"7(?:1(?:[06][3-6]|[18]|2[35]|[3-5][3-5])|2(?:[13][3-5]|[24-689]|7[457]))\",\"7(?:1(?:0(?:[356]|4[023])|[18]|2(?:3[013-9]|5)|3[45]|43[013-79]|5(?:3[1-8]|4[1-7]|5)|6(?:3[0-35-9]|[4-6]))|2(?:1(?:3[178]|[45])|[24-689]|3[35]|7[457]))|7(?:14|23)4[0-8]|71(?:33|45)[1-79]\"],\n\"8 ($1)\",,1],[,\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"7\"],\"8 ($1)\",,1],[,\"(\\\\d{3})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2-$3-$4\",[\"[349]|8(?:[02-7]|1[1-8])\"],\"8 ($1)\",,1],[,\"(\\\\d{4})(\\\\d{4})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"8\"],\"8 ($1)\"]],[,,,,,,,,,[-1]],1,\"3[04-689]|[489]\",[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],RW:[,[,,\"(?:06|[27]\\\\d\\\\d|[89]00)\\\\d{6}\",,,,,,,[8,9]],[,,\"(?:06|2[23568]\\\\d)\\\\d{6}\",,,,\"250123456\"],[,,\"7[237-9]\\\\d{7}\",,,,\"720123456\",,,[9]],[,,\"800\\\\d{6}\",,,,\"800123456\",,,[9]],[,\n,\"900\\\\d{6}\",,,,\"900123456\",,,[9]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],\"RW\",250,\"00\",\"0\",,,\"0\",,,,[[,\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"0\"]],[,\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"2\"]],[,\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[7-9]\"],\"0$1\"]],,[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],SA:[,[,,\"92\\\\d{7}|(?:[15]|8\\\\d)\\\\d{8}\",,,,,,,[9,10],[7]],[,,\"1(?:1\\\\d|2[24-8]|3[35-8]|4[3-68]|6[2-5]|7[235-7])\\\\d{6}\",,,,\"112345678\",,,[9],[7]],[,,\"579[01]\\\\d{5}|5(?:[013-689]\\\\d|7[0-8])\\\\d{6}\",\n,,,\"512345678\",,,[9]],[,,\"800\\\\d{7}\",,,,\"8001234567\",,,[10]],[,,\"925\\\\d{6}\",,,,\"925012345\",,,[9]],[,,\"920\\\\d{6}\",,,,\"920012345\",,,[9]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],\"SA\",966,\"00\",\"0\",,,\"0\",,,,[[,\"(\\\\d{4})(\\\\d{5})\",\"$1 $2\",[\"9\"]],[,\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"1\"],\"0$1\"],[,\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"5\"],\"0$1\"],[,\"(\\\\d{3})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"81\"],\"0$1\"],[,\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"8\"]]],,[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,\"811\\\\d{7}\",,,,\"8110123456\",\n,,[10]],,,[,,,,,,,,,[-1]]],SB:[,[,,\"[6-9]\\\\d{6}|[1-6]\\\\d{4}\",,,,,,,[5,7]],[,,\"(?:1[4-79]|[23]\\\\d|4[0-2]|5[03]|6[0-37])\\\\d{3}\",,,,\"40123\",,,[5]],[,,\"48\\\\d{3}|(?:(?:6[89]|7[1-9]|8[4-9])\\\\d|9(?:1[2-9]|2[013-9]|3[0-2]|[46]\\\\d|5[0-46-9]|7[0-689]|8[0-79]|9[0-8]))\\\\d{4}\",,,,\"7421234\"],[,,\"1[38]\\\\d{3}\",,,,\"18123\",,,[5]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,\"5[12]\\\\d{3}\",,,,\"51123\",,,[5]],\"SB\",677,\"0[01]\",,,,,,,,[[,\"(\\\\d{2})(\\\\d{5})\",\"$1 $2\",[\"6[89]|7|8[4-9]|9(?:[1-8]|9[0-8])\"]]],,[,,,,,,,,,\n[-1]],,,[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],SC:[,[,,\"(?:[2489]\\\\d|64)\\\\d{5}\",,,,,,,[7]],[,,\"4[2-46]\\\\d{5}\",,,,\"4217123\"],[,,\"2[125-8]\\\\d{5}\",,,,\"2510123\"],[,,\"800[08]\\\\d{3}\",,,,\"8000000\"],[,,\"85\\\\d{5}\",,,,\"8512345\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,\"971\\\\d{4}|(?:64|95)\\\\d{5}\",,,,\"6412345\"],\"SC\",248,\"010|0[0-2]\",,,,,,\"00\",,[[,\"(\\\\d)(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[246]|9[57]\"]]],,[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],SD:[,[,,\"[19]\\\\d{8}\",,,,,,,[9]],[,\n,\"1(?:5\\\\d|8[35-7])\\\\d{6}\",,,,\"153123456\"],[,,\"(?:1[0-2]|9[0-3569])\\\\d{7}\",,,,\"911231234\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],\"SD\",249,\"00\",\"0\",,,\"0\",,,,[[,\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[19]\"],\"0$1\"]],,[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],SE:[,[,,\"(?:[26]\\\\d\\\\d|9)\\\\d{9}|[1-9]\\\\d{8}|[1-689]\\\\d{7}|[1-4689]\\\\d{6}|2\\\\d{5}\",,,,,,,[6,7,8,9,10,12]],[,,\"(?:(?:[12][136]|3[356]|4[0246]|6[03]|8\\\\d)\\\\d|90[1-9])\\\\d{4,6}|(?:1(?:2[0-35]|4[0-4]|5[0-25-9]|7[13-6]|[89]\\\\d)|2(?:2[0-7]|4[0136-8]|5[0138]|7[018]|8[01]|9[0-57])|3(?:0[0-4]|1\\\\d|2[0-25]|4[056]|7[0-2]|8[0-3]|9[023])|4(?:1[013-8]|3[0135]|5[14-79]|7[0-246-9]|8[0156]|9[0-689])|5(?:0[0-6]|[15][0-5]|2[0-68]|3[0-4]|4\\\\d|6[03-5]|7[013]|8[0-79]|9[01])|6(?:1[1-3]|2[0-4]|4[02-57]|5[0-37]|6[0-3]|7[0-2]|8[0247]|9[0-356])|9(?:1[0-68]|2\\\\d|3[02-5]|4[0-3]|5[0-4]|[68][01]|7[0135-8]))\\\\d{5,6}\",\n,,,\"8123456\",,,[7,8,9]],[,,\"7[02369]\\\\d{7}\",,,,\"701234567\",,,[9]],[,,\"20\\\\d{4,7}\",,,,\"20123456\",,,[6,7,8,9]],[,,\"649\\\\d{6}|99[1-59]\\\\d{4}(?:\\\\d{3})?|9(?:00|39|44)[1-8]\\\\d{3,6}\",,,,\"9001234567\",,,[7,8,9,10]],[,,\"77[0-7]\\\\d{6}\",,,,\"771234567\",,,[9]],[,,\"75[1-8]\\\\d{6}\",,,,\"751234567\",,,[9]],[,,,,,,,,,[-1]],\"SE\",46,\"00\",\"0\",,,\"0\",,,,[[,\"(\\\\d{2})(\\\\d{2,3})(\\\\d{2})\",\"$1-$2 $3\",[\"20\"],\"0$1\"],[,\"(\\\\d{3})(\\\\d{4})\",\"$1-$2\",[\"9(?:00|39|44|9)\"],\"0$1\"],[,\"(\\\\d{2})(\\\\d{3})(\\\\d{2})\",\"$1-$2 $3\",[\"[12][136]|3[356]|4[0246]|6[03]|90[1-9]\"],\n\"0$1\"],[,\"(\\\\d)(\\\\d{2,3})(\\\\d{2})(\\\\d{2})\",\"$1-$2 $3 $4\",[\"8\"],\"0$1\"],[,\"(\\\\d{3})(\\\\d{2,3})(\\\\d{2})\",\"$1-$2 $3\",[\"1[2457]|2(?:[247-9]|5[0138])|3[0247-9]|4[1357-9]|5[0-35-9]|6(?:[125689]|4[02-57]|7[0-2])|9(?:[125-8]|3[02-5]|4[0-3])\"],\"0$1\"],[,\"(\\\\d{3})(\\\\d{2,3})(\\\\d{3})\",\"$1-$2 $3\",[\"9(?:00|39|44)\"],\"0$1\"],[,\"(\\\\d{2})(\\\\d{2,3})(\\\\d{2})(\\\\d{2})\",\"$1-$2 $3 $4\",[\"1[13689]|2[0136]|3[1356]|4[0246]|54|6[03]|90[1-9]\"],\"0$1\"],[,\"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1-$2 $3 $4\",[\"10|7\"],\"0$1\"],[,\"(\\\\d)(\\\\d{3})(\\\\d{3})(\\\\d{2})\",\n\"$1-$2 $3 $4\",[\"8\"],\"0$1\"],[,\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1-$2 $3 $4\",[\"[13-5]|2(?:[247-9]|5[0138])|6(?:[124-689]|7[0-2])|9(?:[125-8]|3[02-5]|4[0-3])\"],\"0$1\"],[,\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{3})\",\"$1-$2 $3 $4\",[\"9\"],\"0$1\"],[,\"(\\\\d{3})(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1-$2 $3 $4 $5\",[\"[26]\"],\"0$1\"]],[[,\"(\\\\d{2})(\\\\d{2,3})(\\\\d{2})\",\"$1 $2 $3\",[\"20\"]],[,\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"9(?:00|39|44|9)\"]],[,\"(\\\\d{2})(\\\\d{3})(\\\\d{2})\",\"$1 $2 $3\",[\"[12][136]|3[356]|4[0246]|6[03]|90[1-9]\"]],[,\"(\\\\d)(\\\\d{2,3})(\\\\d{2})(\\\\d{2})\",\n\"$1 $2 $3 $4\",[\"8\"]],[,\"(\\\\d{3})(\\\\d{2,3})(\\\\d{2})\",\"$1 $2 $3\",[\"1[2457]|2(?:[247-9]|5[0138])|3[0247-9]|4[1357-9]|5[0-35-9]|6(?:[125689]|4[02-57]|7[0-2])|9(?:[125-8]|3[02-5]|4[0-3])\"]],[,\"(\\\\d{3})(\\\\d{2,3})(\\\\d{3})\",\"$1 $2 $3\",[\"9(?:00|39|44)\"]],[,\"(\\\\d{2})(\\\\d{2,3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"1[13689]|2[0136]|3[1356]|4[0246]|54|6[03]|90[1-9]\"]],[,\"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"10|7\"]],[,\"(\\\\d)(\\\\d{3})(\\\\d{3})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"8\"]],[,\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\n\"$1 $2 $3 $4\",[\"[13-5]|2(?:[247-9]|5[0138])|6(?:[124-689]|7[0-2])|9(?:[125-8]|3[02-5]|4[0-3])\"]],[,\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"9\"]],[,\"(\\\\d{3})(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4 $5\",[\"[26]\"]]],[,,\"74[02-9]\\\\d{6}\",,,,\"740123456\",,,[9]],,,[,,,,,,,,,[-1]],[,,\"10[1-8]\\\\d{6}\",,,,\"102345678\",,,[9]],,,[,,\"(?:25[245]|67[3-68])\\\\d{9}\",,,,\"254123456789\",,,[12]]],SG:[,[,,\"(?:(?:1\\\\d|8)\\\\d\\\\d|7000)\\\\d{7}|[3689]\\\\d{7}\",,,,,,,[8,10,11]],[,,\"662[0-24-9]\\\\d{4}|6(?:[0-578]\\\\d|6[013-57-9]|9[0-35-9])\\\\d{5}\",\n,,,\"61234567\",,,[8]],[,,\"896[0-4]\\\\d{4}|(?:8(?:0[1-9]|[1-8]\\\\d|9[0-5])|9[0-8]\\\\d)\\\\d{5}\",,,,\"81234567\",,,[8]],[,,\"(?:18|8)00\\\\d{7}\",,,,\"18001234567\",,,[10,11]],[,,\"1900\\\\d{7}\",,,,\"19001234567\",,,[11]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,\"(?:3[12]\\\\d|666)\\\\d{5}\",,,,\"31234567\",,,[8]],\"SG\",65,\"0[0-3]\\\\d\",,,,,,,,[[,\"(\\\\d{4,5})\",\"$1\",[\"1[013-9]|77\",\"1(?:[013-8]|9(?:0[1-9]|[1-9]))|77\"]],[,\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[369]|8(?:0[1-9]|[1-9])\"]],[,\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"8\"]],[,\"(\\\\d{4})(\\\\d{4})(\\\\d{3})\",\n\"$1 $2 $3\",[\"7\"]],[,\"(\\\\d{4})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"1\"]]],[[,\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[369]|8(?:0[1-9]|[1-9])\"]],[,\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"8\"]],[,\"(\\\\d{4})(\\\\d{4})(\\\\d{3})\",\"$1 $2 $3\",[\"7\"]],[,\"(\\\\d{4})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"1\"]]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,\"7000\\\\d{7}\",,,,\"70001234567\",,,[11]],,,[,,,,,,,,,[-1]]],SH:[,[,,\"(?:[256]\\\\d|8)\\\\d{3}\",,,,,,,[4,5]],[,,\"2(?:[0-57-9]\\\\d|6[4-9])\\\\d\\\\d\",,,,\"22158\"],[,,\"[56]\\\\d{4}\",,,,\"51234\",,,[5]],[,,,,,,,,,[-1]],\n[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,\"262\\\\d\\\\d\",,,,\"26212\",,,[5]],\"SH\",290,\"00\",,,,,,,,,,[,,,,,,,,,[-1]],1,\"[256]\",[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],SI:[,[,,\"[1-7]\\\\d{7}|8\\\\d{4,7}|90\\\\d{4,6}\",,,,,,,[5,6,7,8]],[,,\"(?:[1-357][2-8]|4[24-8])\\\\d{6}\",,,,\"12345678\",,,[8],[7]],[,,\"65(?:[178]\\\\d|5[56]|6[01])\\\\d{4}|(?:[37][01]|4[0139]|51|6[489])\\\\d{6}\",,,,\"31234567\",,,[8]],[,,\"80\\\\d{4,6}\",,,,\"80123456\",,,[6,7,8]],[,,\"89[1-3]\\\\d{2,5}|90\\\\d{4,6}\",,,,\"90123456\"],[,,,,,,,,,[-1]],\n[,,,,,,,,,[-1]],[,,\"(?:59\\\\d\\\\d|8(?:1(?:[67]\\\\d|8[0-589])|2(?:0\\\\d|2[0-37-9]|8[0-2489])|3[389]\\\\d))\\\\d{4}\",,,,\"59012345\",,,[8]],\"SI\",386,\"00|10(?:22|66|88|99)\",\"0\",,,\"0\",,\"00\",,[[,\"(\\\\d{2})(\\\\d{3,6})\",\"$1 $2\",[\"8[09]|9\"],\"0$1\"],[,\"(\\\\d{3})(\\\\d{5})\",\"$1 $2\",[\"59|8\"],\"0$1\"],[,\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[37][01]|4[0139]|51|6\"],\"0$1\"],[,\"(\\\\d)(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[1-57]\"],\"(0$1)\"]],,[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],SJ:[,[,,\"0\\\\d{4}|(?:[489]\\\\d|79)\\\\d{6}\",\n,,,,,,[5,8]],[,,\"79\\\\d{6}\",,,,\"79123456\",,,[8]],[,,\"(?:4[015-8]|9\\\\d)\\\\d{6}\",,,,\"41234567\",,,[8]],[,,\"80[01]\\\\d{5}\",,,,\"80012345\",,,[8]],[,,\"82[09]\\\\d{5}\",,,,\"82012345\",,,[8]],[,,\"810(?:0[0-6]|[2-8]\\\\d)\\\\d{3}\",,,,\"81021234\",,,[8]],[,,\"880\\\\d{5}\",,,,\"88012345\",,,[8]],[,,\"85[0-5]\\\\d{5}\",,,,\"85012345\",,,[8]],\"SJ\",47,\"00\",,,,,,,,,,[,,,,,,,,,[-1]],,\"79\",[,,,,,,,,,[-1]],[,,\"(?:0[235-9]|81(?:0(?:0[7-9]|1\\\\d)|5\\\\d\\\\d))\\\\d{3}\",,,,\"02000\"],,,[,,\"81[23]\\\\d{5}\",,,,\"81212345\",,,[8]]],SK:[,[,,\"[2-689]\\\\d{8}|[2-59]\\\\d{6}|[2-5]\\\\d{5}\",\n,,,,,,[6,7,9]],[,,\"(?:2(?:16|[2-9]\\\\d{3})|(?:(?:[3-5][1-8]\\\\d|819)\\\\d|601[1-5])\\\\d)\\\\d{4}|(?:2|[3-5][1-8])1[67]\\\\d{3}|[3-5][1-8]16\\\\d\\\\d\",,,,\"221234567\"],[,,\"909[1-9]\\\\d{5}|9(?:0[1-8]|1[0-24-9]|4[03-57-9]|5\\\\d)\\\\d{6}\",,,,\"912123456\",,,[9]],[,,\"800\\\\d{6}\",,,,\"800123456\",,,[9]],[,,\"9(?:00|[78]\\\\d)\\\\d{6}\",,,,\"900123456\",,,[9]],[,,\"8[5-9]\\\\d{7}\",,,,\"850123456\",,,[9]],[,,,,,,,,,[-1]],[,,\"6(?:02|5[0-4]|9[0-6])\\\\d{6}\",,,,\"690123456\",,,[9]],\"SK\",421,\"00\",\"0\",,,\"0\",,,,[[,\"(\\\\d)(\\\\d{2})(\\\\d{3,4})\",\"$1 $2 $3\",\n[\"21\"],\"0$1\"],[,\"(\\\\d{2})(\\\\d{2})(\\\\d{2,3})\",\"$1 $2 $3\",[\"[3-5][1-8]1\",\"[3-5][1-8]1[67]\"],\"0$1\"],[,\"(\\\\d{4})(\\\\d{3})\",\"$1 $2\",[\"909\",\"9090\"],\"0$1\"],[,\"(\\\\d)(\\\\d{3})(\\\\d{3})(\\\\d{2})\",\"$1/$2 $3 $4\",[\"2\"],\"0$1\"],[,\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[689]\"],\"0$1\"],[,\"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1/$2 $3 $4\",[\"[3-5]\"],\"0$1\"]],[[,\"(\\\\d)(\\\\d{2})(\\\\d{3,4})\",\"$1 $2 $3\",[\"21\"],\"0$1\"],[,\"(\\\\d{2})(\\\\d{2})(\\\\d{2,3})\",\"$1 $2 $3\",[\"[3-5][1-8]1\",\"[3-5][1-8]1[67]\"],\"0$1\"],[,\"(\\\\d)(\\\\d{3})(\\\\d{3})(\\\\d{2})\",\n\"$1/$2 $3 $4\",[\"2\"],\"0$1\"],[,\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[689]\"],\"0$1\"],[,\"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1/$2 $3 $4\",[\"[3-5]\"],\"0$1\"]],[,,\"9090\\\\d{3}\",,,,\"9090123\",,,[7]],,,[,,\"9090\\\\d{3}|(?:602|8(?:00|[5-9]\\\\d)|9(?:00|[78]\\\\d))\\\\d{6}\",,,,,,,[7,9]],[,,\"96\\\\d{7}\",,,,\"961234567\",,,[9]],,,[,,,,,,,,,[-1]]],SL:[,[,,\"(?:[237-9]\\\\d|66)\\\\d{6}\",,,,,,,[8],[6]],[,,\"22[2-4][2-9]\\\\d{4}\",,,,\"22221234\",,,,[6]],[,,\"(?:25|3[0-5]|66|7[2-9]|8[08]|9[09])\\\\d{6}\",,,,\"25123456\"],[,,,,,,,,,[-1]],[,,,,,\n,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],\"SL\",232,\"00\",\"0\",,,\"0\",,,,[[,\"(\\\\d{2})(\\\\d{6})\",\"$1 $2\",[\"[236-9]\"],\"(0$1)\"]],,[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],SM:[,[,,\"(?:0549|[5-7]\\\\d)\\\\d{6}\",,,,,,,[8,10],[6]],[,,\"0549(?:8[0157-9]|9\\\\d)\\\\d{4}\",,,,\"0549886377\",,,[10],[6]],[,,\"6[16]\\\\d{6}\",,,,\"66661212\",,,[8]],[,,,,,,,,,[-1]],[,,\"7[178]\\\\d{6}\",,,,\"71123456\",,,[8]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,\"5[158]\\\\d{6}\",,,,\"58001110\",,,[8]],\"SM\",378,\"00\",,,\n,\"([89]\\\\d{5})$\",\"0549$1\",,,[[,\"(\\\\d{6})\",\"$1\",[\"[89]\"]],[,\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[5-7]\"]],[,\"(\\\\d{4})(\\\\d{6})\",\"$1 $2\",[\"0\"]]],[[,\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[5-7]\"]],[,\"(\\\\d{4})(\\\\d{6})\",\"$1 $2\",[\"0\"]]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],SN:[,[,,\"(?:[378]\\\\d|93)\\\\d{7}\",,,,,,,[9]],[,,\"3(?:0(?:1[0-2]|80)|282|3(?:8[1-9]|9[3-9])|611)\\\\d{5}\",,,,\"301012345\"],[,,\"7(?:(?:[06-8]\\\\d|[19]0|21)\\\\d|5(?:0[01]|[19]0|2[25]|3[36]|[4-7]\\\\d|8[35]))\\\\d{5}\",\n,,,\"701234567\"],[,,\"800\\\\d{6}\",,,,\"800123456\"],[,,\"88[4689]\\\\d{6}\",,,,\"884123456\"],[,,\"81[02468]\\\\d{6}\",,,,\"810123456\"],[,,,,,,,,,[-1]],[,,\"(?:3(?:392|9[01]\\\\d)\\\\d|93(?:3[13]0|929))\\\\d{4}\",,,,\"933301234\"],\"SN\",221,\"00\",,,,,,,,[[,\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"8\"]],[,\"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[379]\"]]],,[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],SO:[,[,,\"[346-9]\\\\d{8}|[12679]\\\\d{7}|[1-5]\\\\d{6}|[1348]\\\\d{5}\",,,,,,,[6,7,8,9]],[,,\n\"(?:1\\\\d|2[0-79]|3[0-46-8]|4[0-7]|5[57-9])\\\\d{5}|(?:[134]\\\\d|8[125])\\\\d{4}\",,,,\"4012345\",,,[6,7]],[,,\"(?:(?:15|(?:3[59]|4[89]|6\\\\d|7[79]|8[08])\\\\d|9(?:0\\\\d|[2-9]))\\\\d|2(?:4\\\\d|8))\\\\d{5}|(?:[67]\\\\d\\\\d|904)\\\\d{5}\",,,,\"71123456\",,,[7,8,9]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],\"SO\",252,\"00\",\"0\",,,\"0\",,,,[[,\"(\\\\d{2})(\\\\d{4})\",\"$1 $2\",[\"8[125]\"]],[,\"(\\\\d{6})\",\"$1\",[\"[134]\"]],[,\"(\\\\d)(\\\\d{6})\",\"$1 $2\",[\"[15]|2[0-79]|3[0-46-8]|4[0-7]\"]],[,\"(\\\\d)(\\\\d{7})\",\"$1 $2\",\n[\"(?:2|90)4|[67]\"]],[,\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[348]|64|79|90\"]],[,\"(\\\\d{2})(\\\\d{5,7})\",\"$1 $2\",[\"1|28|6[0-35-9]|77|9[2-9]\"]]],,[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],SR:[,[,,\"(?:[2-5]|68|[78]\\\\d)\\\\d{5}\",,,,,,,[6,7]],[,,\"(?:2[1-3]|3[0-7]|(?:4|68)\\\\d|5[2-58])\\\\d{4}\",,,,\"211234\"],[,,\"(?:7[124-7]|8[124-9])\\\\d{5}\",,,,\"7412345\",,,[7]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,\"56\\\\d{4}\",,,,\"561234\",,,[6]],\"SR\",597,\"00\",,,,,,,,[[,\"(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\n\"$1-$2-$3\",[\"56\"]],[,\"(\\\\d{3})(\\\\d{3})\",\"$1-$2\",[\"[2-5]\"]],[,\"(\\\\d{3})(\\\\d{4})\",\"$1-$2\",[\"[6-8]\"]]],,[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],SS:[,[,,\"[19]\\\\d{8}\",,,,,,,[9]],[,,\"1[89]\\\\d{7}\",,,,\"181234567\"],[,,\"(?:12|9[1257-9])\\\\d{7}\",,,,\"977123456\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],\"SS\",211,\"00\",\"0\",,,\"0\",,,,[[,\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[19]\"],\"0$1\"]],,[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,\n,,,,,,[-1]]],ST:[,[,,\"(?:22|9\\\\d)\\\\d{5}\",,,,,,,[7]],[,,\"22\\\\d{5}\",,,,\"2221234\"],[,,\"900[5-9]\\\\d{3}|9(?:0[1-9]|[89]\\\\d)\\\\d{4}\",,,,\"9812345\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],\"ST\",239,\"00\",,,,,,,,[[,\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[29]\"]]],,[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],SV:[,[,,\"[267]\\\\d{7}|(?:80\\\\d|900)\\\\d{4}(?:\\\\d{4})?\",,,,,,,[7,8,11]],[,,\"2(?:79(?:0[0347-9]|[1-9]\\\\d)|89(?:0[024589]|[1-9]\\\\d))\\\\d{3}|2(?:[1-69]\\\\d|[78][0-8])\\\\d{5}\",\n,,,\"21234567\",,,[8]],[,,\"[67]\\\\d{7}\",,,,\"70123456\",,,[8]],[,,\"800\\\\d{8}|80[01]\\\\d{4}\",,,,\"8001234\",,,[7,11]],[,,\"900\\\\d{4}(?:\\\\d{4})?\",,,,\"9001234\",,,[7,11]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],\"SV\",503,\"00\",,,,,,,,[[,\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[89]\"]],[,\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[267]\"]],[,\"(\\\\d{3})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"[89]\"]]],,[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],SX:[,[,,\"7215\\\\d{6}|(?:[58]\\\\d\\\\d|900)\\\\d{7}\",,,,,,,[10],[7]],[,,\"7215(?:4[2-8]|8[239]|9[056])\\\\d{4}\",\n,,,\"7215425678\",,,,[7]],[,,\"7215(?:1[02]|2\\\\d|5[034679]|8[014-8])\\\\d{4}\",,,,\"7215205678\",,,,[7]],[,,\"8(?:00|33|44|55|66|77|88)[2-9]\\\\d{6}\",,,,\"8002123456\"],[,,\"900[2-9]\\\\d{6}\",,,,\"9002123456\"],[,,,,,,,,,[-1]],[,,\"52(?:3(?:[2-46-9][02-9]\\\\d|5(?:[02-46-9]\\\\d|5[0-46-9]))|4(?:[2-478][02-9]\\\\d|5(?:[034]\\\\d|2[024-9]|5[0-46-9])|6(?:0[1-9]|[2-9]\\\\d)|9(?:[05-9]\\\\d|2[0-5]|49)))\\\\d{4}|52[34][2-9]1[02-9]\\\\d{4}|5(?:00|2[125-9]|33|44|66|77|88)[2-9]\\\\d{6}\",,,,\"5002345678\"],[,,,,,,,,,[-1]],\"SX\",1,\"011\",\"1\",,,\"(5\\\\d{6})$|1\",\n\"721$1\",,,,,[,,,,,,,,,[-1]],,\"721\",[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],SY:[,[,,\"[1-359]\\\\d{8}|[1-5]\\\\d{7}\",,,,,,,[8,9],[6,7]],[,,\"21\\\\d{6,7}|(?:1(?:[14]\\\\d|[2356])|2[235]|3(?:[13]\\\\d|4)|4[134]|5[1-3])\\\\d{6}\",,,,\"112345678\",,,,[6,7]],[,,\"(?:50|9[1-689])\\\\d{7}\",,,,\"944567890\",,,[9]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],\"SY\",963,\"00\",\"0\",,,\"0\",,,,[[,\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[1-4]|5[1-3]\"],\"0$1\",,1],[,\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\n\"$1 $2 $3\",[\"[59]\"],\"0$1\",,1]],,[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],SZ:[,[,,\"0800\\\\d{4}|(?:[237]\\\\d|900)\\\\d{6}\",,,,,,,[8,9]],[,,\"[23][2-5]\\\\d{6}\",,,,\"22171234\",,,[8]],[,,\"7[6-9]\\\\d{6}\",,,,\"76123456\",,,[8]],[,,\"0800\\\\d{4}\",,,,\"08001234\",,,[8]],[,,\"900\\\\d{6}\",,,,\"900012345\",,,[9]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,\"70\\\\d{6}\",,,,\"70012345\",,,[8]],\"SZ\",268,\"00\",,,,,,,,[[,\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[0237]\"]],[,\"(\\\\d{5})(\\\\d{4})\",\"$1 $2\",[\"9\"]]],,[,,,,,,,,,[-1]],,,[,\n,\"0800\\\\d{4}\",,,,,,,[8]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],TA:[,[,,\"8\\\\d{3}\",,,,,,,[4]],[,,\"8\\\\d{3}\",,,,\"8999\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],\"TA\",290,\"00\",,,,,,,,,,[,,,,,,,,,[-1]],,\"8\",[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],TC:[,[,,\"(?:[58]\\\\d\\\\d|649|900)\\\\d{7}\",,,,,,,[10],[7]],[,,\"649(?:266|712|9(?:4\\\\d|50))\\\\d{4}\",,,,\"6497121234\",,,,[7]],[,,\"649(?:2(?:3[129]|4[1-79])|3\\\\d\\\\d|4[34][1-3])\\\\d{4}\",,,,\"6492311234\",,,,[7]],\n[,,\"8(?:00|33|44|55|66|77|88)[2-9]\\\\d{6}\",,,,\"8002345678\"],[,,\"900[2-9]\\\\d{6}\",,,,\"9002345678\"],[,,,,,,,,,[-1]],[,,\"52(?:3(?:[2-46-9][02-9]\\\\d|5(?:[02-46-9]\\\\d|5[0-46-9]))|4(?:[2-478][02-9]\\\\d|5(?:[034]\\\\d|2[024-9]|5[0-46-9])|6(?:0[1-9]|[2-9]\\\\d)|9(?:[05-9]\\\\d|2[0-5]|49)))\\\\d{4}|52[34][2-9]1[02-9]\\\\d{4}|5(?:00|2[125-9]|33|44|66|77|88)[2-9]\\\\d{6}\",,,,\"5002345678\"],[,,\"649(?:71[01]|966)\\\\d{4}\",,,,\"6497101234\",,,,[7]],\"TC\",1,\"011\",\"1\",,,\"([2-479]\\\\d{6})$|1\",\"649$1\",,,,,[,,,,,,,,,[-1]],,\"649\",[,,,,,,\n,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],TD:[,[,,\"(?:22|[689]\\\\d|77)\\\\d{6}\",,,,,,,[8]],[,,\"22(?:[37-9]0|5[0-5]|6[89])\\\\d{4}\",,,,\"22501234\"],[,,\"(?:[69]\\\\d|77|8[56])\\\\d{6}\",,,,\"63012345\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],\"TD\",235,\"00|16\",,,,,,\"00\",,[[,\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[26-9]\"]]],,[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],TG:[,[,,\"[279]\\\\d{7}\",,,,,,,[8]],[,,\"2(?:2[2-7]|3[23]|4[45]|55|6[67]|77)\\\\d{5}\",\n,,,\"22212345\"],[,,\"(?:7[0-29]|9[0-36-9])\\\\d{6}\",,,,\"90112345\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],\"TG\",228,\"00\",,,,,,,,[[,\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[279]\"]]],,[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],TH:[,[,,\"(?:001800|[2-57]|[689]\\\\d)\\\\d{7}|1\\\\d{7,9}\",,,,,,,[8,9,10,13]],[,,\"(?:1[0689]|2\\\\d|3[2-9]|4[2-5]|5[2-6]|7[3-7])\\\\d{6}\",,,,\"21234567\",,,[8]],[,,\"67(?:1[0-8]|2[4-7])\\\\d{5}|(?:14|6[1-6]|[89]\\\\d)\\\\d{7}\",\n,,,\"812345678\",,,[9]],[,,\"(?:001800\\\\d|1800)\\\\d{6}\",,,,\"1800123456\",,,[10,13]],[,,\"1900\\\\d{6}\",,,,\"1900123456\",,,[10]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,\"6[08]\\\\d{7}\",,,,\"601234567\",,,[9]],\"TH\",66,\"00[1-9]\",\"0\",,,\"0\",,,,[[,\"(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"2\"],\"0$1\"],[,\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[13-9]\"],\"0$1\"],[,\"(\\\\d{4})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"1\"]]],,[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],TJ:[,[,,\"[0-57-9]\\\\d{8}\",,,,,,,[9],[3,5,6,7]],[,,\"(?:3(?:1[3-5]|2[245]|3[12]|4[24-7]|5[25]|72)|4(?:46|74|87))\\\\d{6}\",\n,,,\"372123456\",,,,[3,5,6,7]],[,,\"(?:33[03-9]|4(?:1[18]|4[02-479])|81[1-9])\\\\d{6}|(?:[09]\\\\d|1[0178]|2[02]|[34]0|5[05]|7[01578]|8[078])\\\\d{7}\",,,,\"917123456\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],\"TJ\",992,\"810\",,,,,,\"8~10\",,[[,\"(\\\\d{6})(\\\\d)(\\\\d{2})\",\"$1 $2 $3\",[\"331\",\"3317\"]],[,\"(\\\\d{3})(\\\\d{2})(\\\\d{4})\",\"$1 $2 $3\",[\"44[02-479]|[34]7\"]],[,\"(\\\\d{4})(\\\\d)(\\\\d{4})\",\"$1 $2 $3\",[\"3(?:[1245]|3[12])\"]],[,\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[0-57-9]\"]]],,[,,\n,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],TK:[,[,,\"[2-47]\\\\d{3,6}\",,,,,,,[4,5,6,7]],[,,\"(?:2[2-4]|[34]\\\\d)\\\\d{2,5}\",,,,\"3101\"],[,,\"7[2-4]\\\\d{2,5}\",,,,\"7290\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],\"TK\",690,\"00\",,,,,,,,,,[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],TL:[,[,,\"7\\\\d{7}|(?:[2-47]\\\\d|[89]0)\\\\d{5}\",,,,,,,[7,8]],[,,\"(?:2[1-5]|3[1-9]|4[1-4])\\\\d{5}\",,,,\"2112345\",,,[7]],[,,\"7[2-8]\\\\d{6}\",,,,\"77212345\",,,\n[8]],[,,\"80\\\\d{5}\",,,,\"8012345\",,,[7]],[,,\"90\\\\d{5}\",,,,\"9012345\",,,[7]],[,,,,,,,,,[-1]],[,,\"70\\\\d{5}\",,,,\"7012345\",,,[7]],[,,,,,,,,,[-1]],\"TL\",670,\"00\",,,,,,,,[[,\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[2-489]|70\"]],[,\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"7\"]]],,[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],TM:[,[,,\"(?:[1-6]\\\\d|71)\\\\d{6}\",,,,,,,[8]],[,,\"(?:1(?:2\\\\d|3[1-9])|2(?:22|4[0-35-8])|3(?:22|4[03-9])|4(?:22|3[128]|4\\\\d|6[15])|5(?:22|5[7-9]|6[014-689]))\\\\d{5}\",,,,\"12345678\"],[,,\"(?:6\\\\d|71)\\\\d{6}\",\n,,,\"66123456\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],\"TM\",993,\"810\",\"8\",,,\"8\",,\"8~10\",,[[,\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2-$3-$4\",[\"12\"],\"(8 $1)\"],[,\"(\\\\d{3})(\\\\d)(\\\\d{2})(\\\\d{2})\",\"$1 $2-$3-$4\",[\"[1-5]\"],\"(8 $1)\"],[,\"(\\\\d{2})(\\\\d{6})\",\"$1 $2\",[\"[67]\"],\"8 $1\"]],,[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],TN:[,[,,\"[2-57-9]\\\\d{7}\",,,,,,,[8]],[,,\"81200\\\\d{3}|(?:3[0-2]|7\\\\d)\\\\d{6}\",,,,\"30010123\"],[,,\"3(?:001|[12]40)\\\\d{4}|(?:(?:[259]\\\\d|4[0-8])\\\\d|3(?:1[1-35]|6[0-4]|91))\\\\d{5}\",\n,,,\"20123456\"],[,,\"8010\\\\d{4}\",,,,\"80101234\"],[,,\"88\\\\d{6}\",,,,\"88123456\"],[,,\"8[12]10\\\\d{4}\",,,,\"81101234\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],\"TN\",216,\"00\",,,,,,,,[[,\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[2-57-9]\"]]],,[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],TO:[,[,,\"(?:0800|(?:[5-8]\\\\d\\\\d|999)\\\\d)\\\\d{3}|[2-8]\\\\d{4}\",,,,,,,[5,7]],[,,\"(?:2\\\\d|3[0-8]|4[0-4]|50|6[09]|7[0-24-69]|8[05])\\\\d{3}\",,,,\"20123\",,,[5]],[,,\"(?:5(?:4[0-5]|5[4-6])|6(?:[09]\\\\d|3[02]|8[15-9])|(?:7\\\\d|8[46-9])\\\\d|999)\\\\d{4}\",\n,,,\"7715123\",,,[7]],[,,\"0800\\\\d{3}\",,,,\"0800222\",,,[7]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,\"55[0-37-9]\\\\d{4}\",,,,\"5510123\",,,[7]],\"TO\",676,\"00\",,,,,,,,[[,\"(\\\\d{2})(\\\\d{3})\",\"$1-$2\",[\"[2-4]|50|6[09]|7[0-24-69]|8[05]\"]],[,\"(\\\\d{4})(\\\\d{3})\",\"$1 $2\",[\"0\"]],[,\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[5-9]\"]]],,[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],TR:[,[,,\"4\\\\d{6}|8\\\\d{11,12}|(?:[2-58]\\\\d\\\\d|900)\\\\d{7}\",,,,,,,[7,10,12,13]],[,,\"(?:2(?:[13][26]|[28][2468]|[45][268]|[67][246])|3(?:[13][28]|[24-6][2468]|[78][02468]|92)|4(?:[16][246]|[23578][2468]|4[26]))\\\\d{7}\",\n,,,\"2123456789\",,,[10]],[,,\"561(?:011|61\\\\d)\\\\d{4}|5(?:0[15-7]|1[06]|24|[34]\\\\d|5[1-59]|9[46])\\\\d{7}\",,,,\"5012345678\",,,[10]],[,,\"8(?:00\\\\d{7}(?:\\\\d{2,3})?|11\\\\d{7})\",,,,\"8001234567\",,,[10,12,13]],[,,\"(?:8[89]8|900)\\\\d{7}\",,,,\"9001234567\",,,[10]],[,,,,,,,,,[-1]],[,,\"592(?:21[12]|461)\\\\d{4}\",,,,\"5922121234\",,,[10]],[,,\"850\\\\d{7}\",,,,\"8500123456\",,,[10]],\"TR\",90,\"00\",\"0\",,,\"0\",,,,[[,\"(\\\\d{3})(\\\\d)(\\\\d{3})\",\"$1 $2 $3\",[\"444\"],,,1],[,\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"512|8[01589]|90\"],\"0$1\",,1],\n[,\"(\\\\d{3})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"5(?:[0-59]|61)\",\"5(?:[0-59]|61[06])\",\"5(?:[0-59]|61[06]1)\"],\"0$1\",,1],[,\"(\\\\d{3})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[24][1-8]|3[1-9]\"],\"(0$1)\",,1],[,\"(\\\\d{3})(\\\\d{3})(\\\\d{6,7})\",\"$1 $2 $3\",[\"80\"],\"0$1\",,1]],[[,\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"512|8[01589]|90\"],\"0$1\",,1],[,\"(\\\\d{3})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"5(?:[0-59]|61)\",\"5(?:[0-59]|61[06])\",\"5(?:[0-59]|61[06]1)\"],\"0$1\",,1],[,\"(\\\\d{3})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",\n[\"[24][1-8]|3[1-9]\"],\"(0$1)\",,1],[,\"(\\\\d{3})(\\\\d{3})(\\\\d{6,7})\",\"$1 $2 $3\",[\"80\"],\"0$1\",,1]],[,,\"512\\\\d{7}\",,,,\"5123456789\",,,[10]],,,[,,\"(?:444|811\\\\d{3})\\\\d{4}\",,,,,,,[7,10]],[,,\"444\\\\d{4}\",,,,\"4441444\",,,[7]],,,[,,,,,,,,,[-1]]],TT:[,[,,\"(?:[58]\\\\d\\\\d|900)\\\\d{7}\",,,,,,,[10],[7]],[,,\"868(?:2(?:01|1[5-9]|[23]\\\\d|4[0-2])|6(?:0[7-9]|1[02-8]|2[1-9]|[3-69]\\\\d|7[0-79])|82[124])\\\\d{4}\",,,,\"8682211234\",,,,[7]],[,,\"868(?:(?:2[5-9]|3\\\\d)\\\\d|4(?:3[0-6]|[6-9]\\\\d)|6(?:20|78|8\\\\d)|7(?:0[1-9]|1[02-9]|[2-9]\\\\d))\\\\d{4}\",\n,,,\"8682911234\",,,,[7]],[,,\"8(?:00|33|44|55|66|77|88)[2-9]\\\\d{6}\",,,,\"8002345678\"],[,,\"900[2-9]\\\\d{6}\",,,,\"9002345678\"],[,,,,,,,,,[-1]],[,,\"52(?:3(?:[2-46-9][02-9]\\\\d|5(?:[02-46-9]\\\\d|5[0-46-9]))|4(?:[2-478][02-9]\\\\d|5(?:[034]\\\\d|2[024-9]|5[0-46-9])|6(?:0[1-9]|[2-9]\\\\d)|9(?:[05-9]\\\\d|2[0-5]|49)))\\\\d{4}|52[34][2-9]1[02-9]\\\\d{4}|5(?:00|2[125-9]|33|44|66|77|88)[2-9]\\\\d{6}\",,,,\"5002345678\"],[,,,,,,,,,[-1]],\"TT\",1,\"011\",\"1\",,,\"([2-46-8]\\\\d{6})$|1\",\"868$1\",,,,,[,,,,,,,,,[-1]],,\"868\",[,,,,,,,,,[-1]],[,,\n,,,,,,,[-1]],,,[,,\"868619\\\\d{4}\",,,,\"8686191234\",,,,[7]]],TV:[,[,,\"(?:2|7\\\\d\\\\d|90)\\\\d{4}\",,,,,,,[5,6,7]],[,,\"2[02-9]\\\\d{3}\",,,,\"20123\",,,[5]],[,,\"(?:7[01]\\\\d|90)\\\\d{4}\",,,,\"901234\",,,[6,7]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],\"TV\",688,\"00\",,,,,,,,[[,\"(\\\\d{2})(\\\\d{3})\",\"$1 $2\",[\"2\"]],[,\"(\\\\d{2})(\\\\d{4})\",\"$1 $2\",[\"90\"]],[,\"(\\\\d{2})(\\\\d{5})\",\"$1 $2\",[\"7\"]]],,[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],TW:[,[,,\"[2-689]\\\\d{8}|7\\\\d{9,10}|[2-8]\\\\d{7}|2\\\\d{6}\",\n,,,,,,[7,8,9,10,11]],[,,\"(?:2[2-8]\\\\d|370|55[01]|7[1-9])\\\\d{6}|4(?:(?:0(?:0[1-9]|[2-48]\\\\d)|1[023]\\\\d)\\\\d{4,5}|(?:[239]\\\\d\\\\d|4(?:0[56]|12|49))\\\\d{5})|6(?:[01]\\\\d{7}|4(?:0[56]|12|24|4[09])\\\\d{4,5})|8(?:(?:2(?:3\\\\d|4[0-269]|[578]0|66)|36[24-9]|90\\\\d\\\\d)\\\\d{4}|4(?:0[56]|12|24|4[09])\\\\d{4,5})|(?:2(?:2(?:0\\\\d\\\\d|4(?:0[68]|[249]0|3[0-467]|5[0-25-9]|6[0235689]))|(?:3(?:[09]\\\\d|1[0-4])|(?:4\\\\d|5[0-49]|6[0-29]|7[0-5])\\\\d)\\\\d)|(?:(?:3[2-9]|5[2-8]|6[0-35-79]|8[7-9])\\\\d\\\\d|4(?:2(?:[089]\\\\d|7[1-9])|(?:3[0-4]|[78]\\\\d|9[01])\\\\d))\\\\d)\\\\d{3}\",\n,,,\"221234567\",,,[8,9]],[,,\"(?:40001[0-2]|9[0-8]\\\\d{4})\\\\d{3}\",,,,\"912345678\",,,[9]],[,,\"80[0-79]\\\\d{6}|800\\\\d{5}\",,,,\"800123456\",,,[8,9]],[,,\"20(?:[013-9]\\\\d\\\\d|2)\\\\d{4}\",,,,\"203123456\",,,[7,9]],[,,,,,,,,,[-1]],[,,\"99\\\\d{7}\",,,,\"990123456\",,,[9]],[,,\"7010(?:[0-2679]\\\\d|3[0-7]|8[0-5])\\\\d{5}|70\\\\d{8}\",,,,\"7012345678\",,,[10,11]],\"TW\",886,\"0(?:0[25-79]|19)\",\"0\",\"#\",,\"0\",,,,[[,\"(\\\\d{2})(\\\\d)(\\\\d{4})\",\"$1 $2 $3\",[\"202\"],\"0$1\"],[,\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[258]0\"],\"0$1\"],[,\"(\\\\d)(\\\\d{3,4})(\\\\d{4})\",\n\"$1 $2 $3\",[\"[23568]|4(?:0[02-48]|[1-47-9])|7[1-9]\",\"[23568]|4(?:0[2-48]|[1-47-9])|(?:400|7)[1-9]\"],\"0$1\"],[,\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[49]\"],\"0$1\"],[,\"(\\\\d{2})(\\\\d{4})(\\\\d{4,5})\",\"$1 $2 $3\",[\"7\"],\"0$1\"]],,[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,\"50[0-46-9]\\\\d{6}\",,,,\"500123456\",,,[9]],,,[,,,,,,,,,[-1]]],TZ:[,[,,\"(?:[25-8]\\\\d|41|90)\\\\d{7}\",,,,,,,[9]],[,,\"2[2-8]\\\\d{7}\",,,,\"222345678\"],[,,\"(?:6[125-9]|7[13-9])\\\\d{7}\",,,,\"621234567\"],[,,\"80[08]\\\\d{6}\",,,,\"800123456\"],[,,\"90\\\\d{7}\",,,,\"900123456\"],\n[,,\"8(?:40|6[01])\\\\d{6}\",,,,\"840123456\"],[,,,,,,,,,[-1]],[,,\"41\\\\d{7}\",,,,\"412345678\"],\"TZ\",255,\"00[056]\",\"0\",,,\"0\",,,,[[,\"(\\\\d{3})(\\\\d{2})(\\\\d{4})\",\"$1 $2 $3\",[\"[89]\"],\"0$1\"],[,\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[24]\"],\"0$1\"],[,\"(\\\\d{2})(\\\\d{7})\",\"$1 $2\",[\"5\"]],[,\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[67]\"],\"0$1\"]],,[,,,,,,,,,[-1]],,,[,,\"(?:8(?:[04]0|6[01])|90\\\\d)\\\\d{6}\"],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],UA:[,[,,\"[89]\\\\d{9}|[3-9]\\\\d{8}\",,,,,,,[9,10],[5,6,7]],[,,\"(?:3[1-8]|4[13-8]|5[1-7]|6[12459])\\\\d{7}\",\n,,,\"311234567\",,,[9],[5,6,7]],[,,\"790\\\\d{6}|(?:39|50|6[36-8]|7[1-357]|9[1-9])\\\\d{7}\",,,,\"501234567\",,,[9]],[,,\"800[1-8]\\\\d{5,6}\",,,,\"800123456\"],[,,\"900[239]\\\\d{5,6}\",,,,\"900212345\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,\"89[1-579]\\\\d{6}\",,,,\"891234567\",,,[9]],\"UA\",380,\"00\",\"0\",,,\"0\",,\"0~0\",,[[,\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"6[12][29]|(?:3[1-8]|4[136-8]|5[12457]|6[49])2|(?:56|65)[24]\",\"6[12][29]|(?:35|4[1378]|5[12457]|6[49])2|(?:56|65)[24]|(?:3[1-46-8]|46)2[013-9]\"],\"0$1\"],[,\"(\\\\d{4})(\\\\d{5})\",\n\"$1 $2\",[\"3[1-8]|4(?:[1367]|[45][6-9]|8[4-6])|5(?:[1-5]|6[0135689]|7[4-6])|6(?:[12][3-7]|[459])\",\"3[1-8]|4(?:[1367]|[45][6-9]|8[4-6])|5(?:[1-5]|6(?:[015689]|3[02389])|7[4-6])|6(?:[12][3-7]|[459])\"],\"0$1\"],[,\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[3-7]|89|9[1-9]\"],\"0$1\"],[,\"(\\\\d{3})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[89]\"],\"0$1\"]],,[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],UG:[,[,,\"800\\\\d{6}|(?:[29]0|[347]\\\\d)\\\\d{7}\",,,,,,,[9],[5,6,7]],[,,\"20(?:(?:240|30[67])\\\\d|6(?:00[0-2]|30[0-4]))\\\\d{3}|(?:20(?:[017]\\\\d|2[5-9]|3[1-4]|5[0-4]|6[15-9])|[34]\\\\d{3})\\\\d{5}\",\n,,,\"312345678\",,,,[5,6,7]],[,,\"72[48]0\\\\d{5}|7(?:[015-8]\\\\d|2[067]|36|4[0-6]|9[89])\\\\d{6}\",,,,\"712345678\"],[,,\"800[1-3]\\\\d{5}\",,,,\"800123456\"],[,,\"90[1-3]\\\\d{6}\",,,,\"901123456\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],\"UG\",256,\"00[057]\",\"0\",,,\"0\",,,,[[,\"(\\\\d{4})(\\\\d{5})\",\"$1 $2\",[\"202\",\"2024\"],\"0$1\"],[,\"(\\\\d{3})(\\\\d{6})\",\"$1 $2\",[\"[27-9]|4(?:6[45]|[7-9])\"],\"0$1\"],[,\"(\\\\d{2})(\\\\d{7})\",\"$1 $2\",[\"[34]\"],\"0$1\"]],,[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],US:[,[,,\"[2-9]\\\\d{9}|3\\\\d{6}\",\n,,,,,,[10],[7]],[,,\"(?:3052(?:0[0-8]|[1-9]\\\\d)|5056(?:[0-35-9]\\\\d|4[468])|7302[0-4]\\\\d)\\\\d{4}|(?:305[3-9]|472[24]|505[2-57-9]|7306|983[2-47-9])\\\\d{6}|(?:2(?:0[1-35-9]|1[02-9]|2[03-57-9]|3[1459]|4[08]|5[1-46]|6[0279]|7[0269]|8[13])|3(?:0[1-47-9]|1[02-9]|2[0135-79]|3[0-24679]|4[167]|5[0-2]|6[01349]|8[056])|4(?:0[124-9]|1[02-579]|2[3-5]|3[0245]|4[023578]|58|6[349]|7[0589]|8[04])|5(?:0[1-47-9]|1[0235-8]|20|3[0149]|4[01]|5[179]|6[1-47]|7[0-5]|8[0256])|6(?:0[1-35-9]|1[024-9]|2[03689]|3[016]|4[0156]|5[01679]|6[0-279]|78|8[0-29])|7(?:0[1-46-8]|1[2-9]|2[04-8]|3[1247]|4[037]|5[47]|6[02359]|7[0-59]|8[156])|8(?:0[1-68]|1[02-8]|2[068]|3[0-2589]|4[03578]|5[046-9]|6[02-5]|7[028])|9(?:0[1346-9]|1[02-9]|2[0589]|3[0146-8]|4[01357-9]|5[12469]|7[0-389]|8[04-69]))[2-9]\\\\d{6}\",\n,,,\"2015550123\",,,,[7]],[,,\"(?:3052(?:0[0-8]|[1-9]\\\\d)|5056(?:[0-35-9]\\\\d|4[468])|7302[0-4]\\\\d)\\\\d{4}|(?:305[3-9]|472[24]|505[2-57-9]|7306|983[2-47-9])\\\\d{6}|(?:2(?:0[1-35-9]|1[02-9]|2[03-57-9]|3[1459]|4[08]|5[1-46]|6[0279]|7[0269]|8[13])|3(?:0[1-47-9]|1[02-9]|2[0135-79]|3[0-24679]|4[167]|5[0-2]|6[01349]|8[056])|4(?:0[124-9]|1[02-579]|2[3-5]|3[0245]|4[023578]|58|6[349]|7[0589]|8[04])|5(?:0[1-47-9]|1[0235-8]|20|3[0149]|4[01]|5[179]|6[1-47]|7[0-5]|8[0256])|6(?:0[1-35-9]|1[024-9]|2[03689]|3[016]|4[0156]|5[01679]|6[0-279]|78|8[0-29])|7(?:0[1-46-8]|1[2-9]|2[04-8]|3[1247]|4[037]|5[47]|6[02359]|7[0-59]|8[156])|8(?:0[1-68]|1[02-8]|2[068]|3[0-2589]|4[03578]|5[046-9]|6[02-5]|7[028])|9(?:0[1346-9]|1[02-9]|2[0589]|3[0146-8]|4[01357-9]|5[12469]|7[0-389]|8[04-69]))[2-9]\\\\d{6}\",\n,,,\"2015550123\",,,,[7]],[,,\"8(?:00|33|44|55|66|77|88)[2-9]\\\\d{6}\",,,,\"8002345678\"],[,,\"900[2-9]\\\\d{6}\",,,,\"9002345678\"],[,,,,,,,,,[-1]],[,,\"52(?:3(?:[2-46-9][02-9]\\\\d|5(?:[02-46-9]\\\\d|5[0-46-9]))|4(?:[2-478][02-9]\\\\d|5(?:[034]\\\\d|2[024-9]|5[0-46-9])|6(?:0[1-9]|[2-9]\\\\d)|9(?:[05-9]\\\\d|2[0-5]|49)))\\\\d{4}|52[34][2-9]1[02-9]\\\\d{4}|5(?:00|2[125-9]|33|44|66|77|88)[2-9]\\\\d{6}\",,,,\"5002345678\"],[,,\"305209\\\\d{4}\",,,,\"3052090123\",,,,[7]],\"US\",1,\"011\",\"1\",,,\"1\",,,1,[[,\"(\\\\d{3})(\\\\d{4})\",\"$1-$2\",[\"310\"],,,1],\n[,\"(\\\\d{3})(\\\\d{4})\",\"$1-$2\",[\"[24-9]|3(?:[02-9]|1[1-9])\"]],[,\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"($1) $2-$3\",[\"[2-9]\"],,,1]],[[,\"(\\\\d{3})(\\\\d{4})\",\"$1-$2\",[\"310\"],,,1],[,\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1-$2-$3\",[\"[2-9]\"]]],[,,,,,,,,,[-1]],1,,[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],UY:[,[,,\"0004\\\\d{2,9}|[1249]\\\\d{7}|(?:[49]\\\\d|80)\\\\d{5}\",,,,,,,[6,7,8,9,10,11,12,13]],[,,\"(?:1(?:770|9(?:20|[89]7))|(?:2\\\\d|4[2-7])\\\\d\\\\d)\\\\d{4}\",,,,\"21231234\",,,[8],[7]],[,,\"9[1-9]\\\\d{6}\",,,,\"94231234\",,,[8]],[,,\"0004\\\\d{2,9}|(?:405|80[05])\\\\d{4}\",\n,,,\"8001234\"],[,,\"90[0-8]\\\\d{4}\",,,,\"9001234\",,,[7]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],\"UY\",598,\"0(?:0|1[3-9]\\\\d)\",\"0\",\" int. \",,\"0\",,\"00\",,[[,\"(\\\\d{3})(\\\\d{3,4})\",\"$1 $2\",[\"0\"]],[,\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[49]0|8\"],\"0$1\"],[,\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"9\"],\"0$1\"],[,\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[124]\"]],[,\"(\\\\d{3})(\\\\d{3})(\\\\d{2,4})\",\"$1 $2 $3\",[\"0\"]],[,\"(\\\\d{3})(\\\\d{3})(\\\\d{3})(\\\\d{2,4})\",\"$1 $2 $3 $4\",[\"0\"]]],,[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,\n,,,,,,[-1]]],UZ:[,[,,\"(?:20|33|[5-79]\\\\d|88)\\\\d{7}\",,,,,,,[9]],[,,\"(?:55\\\\d\\\\d|6(?:1(?:22|3[124]|4[1-4]|5[1-3578]|64)|2(?:22|3[0-57-9]|41)|5(?:22|3[3-7]|5[024-8])|[69]\\\\d\\\\d|7(?:[23]\\\\d|7[69]))|7(?:0(?:5[4-9]|6[0146]|7[124-6]|9[135-8])|(?:1[12]|[68]\\\\d)\\\\d|2(?:22|3[13-57-9]|4[1-3579]|5[14])|3(?:2\\\\d|3[1578]|4[1-35-7]|5[1-57]|61)|4(?:2\\\\d|3[1-579]|7[1-79])|5(?:22|5[1-9]|6[1457])|9(?:22|5[1-9])))\\\\d{5}\",,,,\"669050123\"],[,,\"(?:(?:[25]0|33|88|9[0-57-9])\\\\d{3}|6(?:1(?:2(?:2[01]|98)|35[0-4]|50\\\\d|61[23]|7(?:[01][017]|4\\\\d|55|9[5-9]))|2(?:(?:11|7\\\\d)\\\\d|2(?:[12]1|9[01379])|5(?:[126]\\\\d|3[0-4]))|5(?:19[01]|2(?:27|9[26])|(?:30|59|7\\\\d)\\\\d)|6(?:2(?:1[5-9]|2[0367]|38|41|52|60)|(?:3[79]|9[0-3])\\\\d|4(?:56|83)|7(?:[07]\\\\d|1[017]|3[07]|4[047]|5[057]|67|8[0178]|9[79]))|7(?:2(?:24|3[237]|4[5-9]|7[15-8])|5(?:7[12]|8[0589])|7(?:0\\\\d|[39][07])|9(?:0\\\\d|7[079])))|7(?:[07]\\\\d{3}|1(?:13[01]|6(?:0[47]|1[67]|66)|71[3-69]|98\\\\d)|2(?:2(?:2[79]|95)|3(?:2[5-9]|6[0-6])|57\\\\d|7(?:0\\\\d|1[17]|2[27]|3[37]|44|5[057]|66|88))|3(?:2(?:1[0-6]|21|3[469]|7[159])|(?:33|9[4-6])\\\\d|5(?:0[0-4]|5[579]|9\\\\d)|7(?:[0-3579]\\\\d|4[0467]|6[67]|8[078]))|4(?:2(?:29|5[0257]|6[0-7]|7[1-57])|5(?:1[0-4]|8\\\\d|9[5-9])|7(?:0\\\\d|1[024589]|2[0-27]|3[0137]|[46][07]|5[01]|7[5-9]|9[079])|9(?:7[015-9]|[89]\\\\d))|5(?:112|2(?:0\\\\d|2[29]|[49]4)|3[1568]\\\\d|52[6-9]|7(?:0[01578]|1[017]|[23]7|4[047]|[5-7]\\\\d|8[78]|9[079]))|9(?:22[128]|3(?:2[0-4]|7\\\\d)|57[02569]|7(?:2[05-9]|3[37]|4\\\\d|60|7[2579]|87|9[07]))))\\\\d{4}\",\n,,,\"912345678\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],\"UZ\",998,\"00\",,,,,,,,[[,\"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[235-9]\"]]],,[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],VA:[,[,,\"0\\\\d{5,10}|3[0-8]\\\\d{7,10}|55\\\\d{8}|8\\\\d{5}(?:\\\\d{2,4})?|(?:1\\\\d|39)\\\\d{7,8}\",,,,,,,[6,7,8,9,10,11,12]],[,,\"06698\\\\d{1,6}\",,,,\"0669812345\",,,[6,7,8,9,10,11]],[,,\"3[1-9]\\\\d{8}|3[2-9]\\\\d{7}\",,,,\"3123456789\",,,[9,10]],[,,\"80(?:0\\\\d{3}|3)\\\\d{3}\",\n,,,\"800123456\",,,[6,9]],[,,\"(?:0878\\\\d{3}|89(?:2\\\\d|3[04]|4(?:[0-4]|[5-9]\\\\d\\\\d)|5[0-4]))\\\\d\\\\d|(?:1(?:44|6[346])|89(?:38|5[5-9]|9))\\\\d{6}\",,,,\"899123456\",,,[6,8,9,10]],[,,\"84(?:[08]\\\\d{3}|[17])\\\\d{3}\",,,,\"848123456\",,,[6,9]],[,,\"1(?:78\\\\d|99)\\\\d{6}\",,,,\"1781234567\",,,[9,10]],[,,\"55\\\\d{8}\",,,,\"5512345678\",,,[10]],\"VA\",39,\"00\",,,,,,,,,,[,,,,,,,,,[-1]],,\"06698\",[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,\"3[2-8]\\\\d{9,10}\",,,,\"33101234501\",,,[11,12]]],VC:[,[,,\"(?:[58]\\\\d\\\\d|784|900)\\\\d{7}\",,,,,,,[10],[7]],\n[,,\"784(?:266|3(?:6[6-9]|7\\\\d|8[0-6])|4(?:38|5[0-36-8]|8[0-8])|5(?:55|7[0-2]|93)|638|784)\\\\d{4}\",,,,\"7842661234\",,,,[7]],[,,\"784(?:4(?:3[0-5]|5[45]|89|9[0-8])|5(?:2[6-9]|3[0-4])|720)\\\\d{4}\",,,,\"7844301234\",,,,[7]],[,,\"8(?:00|33|44|55|66|77|88)[2-9]\\\\d{6}\",,,,\"8002345678\"],[,,\"900[2-9]\\\\d{6}\",,,,\"9002345678\"],[,,,,,,,,,[-1]],[,,\"52(?:3(?:[2-46-9][02-9]\\\\d|5(?:[02-46-9]\\\\d|5[0-46-9]))|4(?:[2-478][02-9]\\\\d|5(?:[034]\\\\d|2[024-9]|5[0-46-9])|6(?:0[1-9]|[2-9]\\\\d)|9(?:[05-9]\\\\d|2[0-5]|49)))\\\\d{4}|52[34][2-9]1[02-9]\\\\d{4}|5(?:00|2[125-9]|33|44|66|77|88)[2-9]\\\\d{6}\",\n,,,\"5002345678\"],[,,\"78451[0-2]\\\\d{4}\",,,,\"7845101234\",,,,[7]],\"VC\",1,\"011\",\"1\",,,\"([2-7]\\\\d{6})$|1\",\"784$1\",,,,,[,,,,,,,,,[-1]],,\"784\",[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],VE:[,[,,\"[68]00\\\\d{7}|(?:[24]\\\\d|[59]0)\\\\d{8}\",,,,,,,[10],[7]],[,,\"(?:2(?:12|3[457-9]|[467]\\\\d|[58][1-9]|9[1-6])|[4-6]00)\\\\d{7}\",,,,\"2121234567\",,,,[7]],[,,\"4(?:1[24-8]|2[46])\\\\d{7}\",,,,\"4121234567\"],[,,\"800\\\\d{7}\",,,,\"8001234567\"],[,,\"90[01]\\\\d{7}\",,,,\"9001234567\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],\n\"VE\",58,\"00\",\"0\",,,\"0\",,,,[[,\"(\\\\d{3})(\\\\d{7})\",\"$1-$2\",[\"[24-689]\"],\"0$1\",\"$CC $1\"]],,[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,\"501\\\\d{7}\",,,,\"5010123456\",,,,[7]],,,[,,,,,,,,,[-1]]],VG:[,[,,\"(?:284|[58]\\\\d\\\\d|900)\\\\d{7}\",,,,,,,[10],[7]],[,,\"284(?:229|4(?:22|9[45])|774|8(?:52|6[459]))\\\\d{4}\",,,,\"2842291234\",,,,[7]],[,,\"284(?:245|3(?:0[0-3]|4[0-7]|68|9[34])|4(?:4[0-6]|68|9[69])|5(?:4[0-7]|68|9[69]))\\\\d{4}\",,,,\"2843001234\",,,,[7]],[,,\"8(?:00|33|44|55|66|77|88)[2-9]\\\\d{6}\",,,,\"8002345678\"],[,,\"900[2-9]\\\\d{6}\",\n,,,\"9002345678\"],[,,,,,,,,,[-1]],[,,\"52(?:3(?:[2-46-9][02-9]\\\\d|5(?:[02-46-9]\\\\d|5[0-46-9]))|4(?:[2-478][02-9]\\\\d|5(?:[034]\\\\d|2[024-9]|5[0-46-9])|6(?:0[1-9]|[2-9]\\\\d)|9(?:[05-9]\\\\d|2[0-5]|49)))\\\\d{4}|52[34][2-9]1[02-9]\\\\d{4}|5(?:00|2[125-9]|33|44|66|77|88)[2-9]\\\\d{6}\",,,,\"5002345678\"],[,,,,,,,,,[-1]],\"VG\",1,\"011\",\"1\",,,\"([2-578]\\\\d{6})$|1\",\"284$1\",,,,,[,,,,,,,,,[-1]],,\"284\",[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],VI:[,[,,\"[58]\\\\d{9}|(?:34|90)0\\\\d{7}\",,,,,,,[10],[7]],[,,\"340(?:2(?:0\\\\d|10|2[06-8]|4[49]|77)|3(?:32|44)|4(?:2[23]|44|7[34]|89)|5(?:1[34]|55)|6(?:2[56]|4[23]|77|9[023])|7(?:1[2-57-9]|2[57]|7\\\\d)|884|998)\\\\d{4}\",\n,,,\"3406421234\",,,,[7]],[,,\"340(?:2(?:0\\\\d|10|2[06-8]|4[49]|77)|3(?:32|44)|4(?:2[23]|44|7[34]|89)|5(?:1[34]|55)|6(?:2[56]|4[23]|77|9[023])|7(?:1[2-57-9]|2[57]|7\\\\d)|884|998)\\\\d{4}\",,,,\"3406421234\",,,,[7]],[,,\"8(?:00|33|44|55|66|77|88)[2-9]\\\\d{6}\",,,,\"8002345678\"],[,,\"900[2-9]\\\\d{6}\",,,,\"9002345678\"],[,,,,,,,,,[-1]],[,,\"52(?:3(?:[2-46-9][02-9]\\\\d|5(?:[02-46-9]\\\\d|5[0-46-9]))|4(?:[2-478][02-9]\\\\d|5(?:[034]\\\\d|2[024-9]|5[0-46-9])|6(?:0[1-9]|[2-9]\\\\d)|9(?:[05-9]\\\\d|2[0-5]|49)))\\\\d{4}|52[34][2-9]1[02-9]\\\\d{4}|5(?:00|2[125-9]|33|44|66|77|88)[2-9]\\\\d{6}\",\n,,,\"5002345678\"],[,,,,,,,,,[-1]],\"VI\",1,\"011\",\"1\",,,\"([2-9]\\\\d{6})$|1\",\"340$1\",,1,,,[,,,,,,,,,[-1]],,\"340\",[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],VN:[,[,,\"[12]\\\\d{9}|[135-9]\\\\d{8}|[16]\\\\d{7}|[16-8]\\\\d{6}\",,,,,,,[7,8,9,10]],[,,\"2(?:0[3-9]|1[0-689]|2[0-25-9]|[38][2-9]|4[2-8]|5[124-9]|6[0-39]|7[0-7]|9[0-4679])\\\\d{7}\",,,,\"2101234567\",,,[10]],[,,\"(?:5(?:2[238]|59)|89[6-9]|99[013-9])\\\\d{6}|(?:3\\\\d|5[1689]|7[06-9]|8[1-8]|9[0-8])\\\\d{7}\",,,,\"912345678\",,,[9]],[,,\"1800\\\\d{4,6}|12(?:0[13]|28)\\\\d{4}\",\n,,,\"1800123456\",,,[8,9,10]],[,,\"1900\\\\d{4,6}\",,,,\"1900123456\",,,[8,9,10]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,\"672\\\\d{6}\",,,,\"672012345\",,,[9]],\"VN\",84,\"00\",\"0\",,,\"0\",,,,[[,\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[17]99\"],\"0$1\",,1],[,\"(\\\\d{2})(\\\\d{5})\",\"$1 $2\",[\"80\"],\"0$1\",,1],[,\"(\\\\d{3})(\\\\d{4,5})\",\"$1 $2\",[\"69\"],\"0$1\",,1],[,\"(\\\\d{4})(\\\\d{4,6})\",\"$1 $2\",[\"1\"],,,1],[,\"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"6\"],\"0$1\",,1],[,\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[357-9]\"],\"0$1\",,1],[,\"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\n\"$1 $2 $3\",[\"2[48]\"],\"0$1\",,1],[,\"(\\\\d{3})(\\\\d{4})(\\\\d{3})\",\"$1 $2 $3\",[\"2\"],\"0$1\",,1]],[[,\"(\\\\d{2})(\\\\d{5})\",\"$1 $2\",[\"80\"],\"0$1\",,1],[,\"(\\\\d{4})(\\\\d{4,6})\",\"$1 $2\",[\"1\"],,,1],[,\"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"6\"],\"0$1\",,1],[,\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[357-9]\"],\"0$1\",,1],[,\"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"2[48]\"],\"0$1\",,1],[,\"(\\\\d{3})(\\\\d{4})(\\\\d{3})\",\"$1 $2 $3\",[\"2\"],\"0$1\",,1]],[,,,,,,,,,[-1]],,,[,,\"[17]99\\\\d{4}|69\\\\d{5,6}\",,,,,,,[7,8]],[,,\"(?:[17]99|80\\\\d)\\\\d{4}|69\\\\d{5,6}\",\n,,,\"1992000\",,,[7,8]],,,[,,,,,,,,,[-1]]],VU:[,[,,\"[57-9]\\\\d{6}|(?:[238]\\\\d|48)\\\\d{3}\",,,,,,,[5,7]],[,,\"(?:38[0-8]|48[4-9])\\\\d\\\\d|(?:2[02-9]|3[4-7]|88)\\\\d{3}\",,,,\"22123\",,,[5]],[,,\"(?:[58]\\\\d|7[013-7])\\\\d{5}\",,,,\"5912345\",,,[7]],[,,\"81[18]\\\\d\\\\d\",,,,\"81123\",,,[5]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,\"9(?:0[1-9]|1[01])\\\\d{4}\",,,,\"9010123\",,,[7]],\"VU\",678,\"00\",,,,,,,,[[,\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[57-9]\"]]],,[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,\"(?:3[03]|900\\\\d)\\\\d{3}\",,,,\"30123\"],,\n,[,,,,,,,,,[-1]]],WF:[,[,,\"(?:40|72|8\\\\d{4})\\\\d{4}|[89]\\\\d{5}\",,,,,,,[6,9]],[,,\"72\\\\d{4}\",,,,\"721234\",,,[6]],[,,\"(?:72|8[23])\\\\d{4}\",,,,\"821234\",,,[6]],[,,\"80[0-5]\\\\d{6}\",,,,\"800012345\",,,[9]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,\"9[23]\\\\d{4}\",,,,\"921234\",,,[6]],\"WF\",681,\"00\",,,,,,,,[[,\"(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3\",[\"[47-9]\"]],[,\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"8\"]]],,[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,\"[48]0\\\\d{4}\",,,,\"401234\",,,[6]]],WS:[,\n[,,\"(?:[2-6]|8\\\\d{5})\\\\d{4}|[78]\\\\d{6}|[68]\\\\d{5}\",,,,,,,[5,6,7,10]],[,,\"6[1-9]\\\\d{3}|(?:[2-5]|60)\\\\d{4}\",,,,\"22123\",,,[5,6]],[,,\"(?:7[1-35-7]|8(?:[3-7]|9\\\\d{3}))\\\\d{5}\",,,,\"7212345\",,,[7,10]],[,,\"800\\\\d{3}\",,,,\"800123\",,,[6]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],\"WS\",685,\"0\",,,,,,,,[[,\"(\\\\d{5})\",\"$1\",[\"[2-5]|6[1-9]\"]],[,\"(\\\\d{3})(\\\\d{3,7})\",\"$1 $2\",[\"[68]\"]],[,\"(\\\\d{2})(\\\\d{5})\",\"$1 $2\",[\"7\"]]],,[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],XK:[,\n[,,\"2\\\\d{7,8}|3\\\\d{7,11}|(?:4\\\\d\\\\d|[89]00)\\\\d{5}\",,,,,,,[8,9,10,11,12]],[,,\"38\\\\d{6,10}|(?:2[89]|39)(?:0\\\\d{5,6}|[1-9]\\\\d{5})\",,,,\"28012345\"],[,,\"4[3-9]\\\\d{6}\",,,,\"43201234\",,,[8]],[,,\"800\\\\d{5}\",,,,\"80001234\",,,[8]],[,,\"900\\\\d{5}\",,,,\"90001234\",,,[8]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],\"XK\",383,\"00\",\"0\",,,\"0\",,,,[[,\"(\\\\d{3})(\\\\d{5})\",\"$1 $2\",[\"[89]\"],\"0$1\"],[,\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[2-4]\"],\"0$1\"],[,\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"2|39\"],\"0$1\"],[,\"(\\\\d{2})(\\\\d{7,10})\",\n\"$1 $2\",[\"3\"],\"0$1\"]],,[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],YE:[,[,,\"(?:1|7\\\\d)\\\\d{7}|[1-7]\\\\d{6}\",,,,,,,[7,8,9],[6]],[,,\"78[0-7]\\\\d{4}|17\\\\d{6}|(?:[12][2-68]|3[2358]|4[2-58]|5[2-6]|6[3-58]|7[24-6])\\\\d{5}\",,,,\"1234567\",,,[7,8],[6]],[,,\"7[01378]\\\\d{7}\",,,,\"712345678\",,,[9]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],\"YE\",967,\"00\",\"0\",,,\"0\",,,,[[,\"(\\\\d)(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[1-6]|7(?:[24-6]|8[0-7])\"],\"0$1\"],[,\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\n\"$1 $2 $3\",[\"7\"],\"0$1\"]],,[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],YT:[,[,,\"7093\\\\d{5}|(?:80|9\\\\d)\\\\d{7}|(?:26|63)9\\\\d{6}\",,,,,,,[9]],[,,\"269(?:0[0-467]|15|5[0-4]|6\\\\d|[78]0)\\\\d{4}\",,,,\"269601234\"],[,,\"(?:639(?:0[0-79]|1[019]|[267]\\\\d|3[09]|40|5[05-9]|9[04-79])|7093[5-7])\\\\d{4}\",,,,\"639012345\"],[,,\"80\\\\d{7}\",,,,\"801234567\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,\"9(?:(?:39|47)8[01]|769\\\\d)\\\\d{4}\",,,,\"939801234\"],\"YT\",262,\"00\",\"0\",,,\"0\",,,,,,[,,,,,,,,,[-1]],\n,,[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],ZA:[,[,,\"[1-79]\\\\d{8}|8\\\\d{4,9}\",,,,,,,[5,6,7,8,9,10]],[,,\"(?:2(?:0330|4302)|52087)0\\\\d{3}|(?:1[0-8]|2[1-378]|3[1-69]|4\\\\d|5[1346-8])\\\\d{7}\",,,,\"101234567\",,,[9]],[,,\"(?:1(?:3492[0-25]|4495[0235]|549(?:20|5[01]))|4[34]492[01])\\\\d{3}|8[1-4]\\\\d{3,7}|(?:2[27]|47|54)4950\\\\d{3}|(?:1(?:049[2-4]|9[12]\\\\d\\\\d)|(?:6\\\\d\\\\d|7(?:[0-46-9]\\\\d|5[0-4]))\\\\d\\\\d|8(?:5\\\\d{3}|7(?:08[67]|158|28[5-9]|310)))\\\\d{4}|(?:1[6-8]|28|3[2-69]|4[025689]|5[36-8])4920\\\\d{3}|(?:12|[2-5]1)492\\\\d{4}\",\n,,,\"711234567\",,,[5,6,7,8,9]],[,,\"80\\\\d{7}\",,,,\"801234567\",,,[9]],[,,\"(?:86[2-9]|9[0-2]\\\\d)\\\\d{6}\",,,,\"862345678\",,,[9]],[,,\"860\\\\d{6}\",,,,\"860123456\",,,[9]],[,,,,,,,,,[-1]],[,,\"87(?:08[0-589]|15[0-79]|28[0-4]|31[1-9])\\\\d{4}|87(?:[02][0-79]|1[0-46-9]|3[02-9]|[4-9]\\\\d)\\\\d{5}\",,,,\"871234567\",,,[9]],\"ZA\",27,\"00\",\"0\",,,\"0\",,,,[[,\"(\\\\d{2})(\\\\d{3,4})\",\"$1 $2\",[\"8[1-4]\"],\"0$1\"],[,\"(\\\\d{2})(\\\\d{3})(\\\\d{2,3})\",\"$1 $2 $3\",[\"8[1-4]\"],\"0$1\"],[,\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"860\"],\"0$1\"],[,\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\n\"$1 $2 $3\",[\"[1-9]\"],\"0$1\"],[,\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"8\"],\"0$1\"]],,[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,\"861\\\\d{6,7}\",,,,\"861123456\",,,[9,10]],,,[,,,,,,,,,[-1]]],ZM:[,[,,\"800\\\\d{6}|(?:21|63|[79]\\\\d)\\\\d{7}\",,,,,,,[9],[6]],[,,\"21[1-8]\\\\d{6}\",,,,\"211234567\",,,,[6]],[,,\"(?:7[5-79]|9[5-8])\\\\d{7}\",,,,\"955123456\"],[,,\"800\\\\d{6}\",,,,\"800123456\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,\"63\\\\d{7}\",,,,\"630123456\"],\"ZM\",260,\"00\",\"0\",,,\"0\",,,,[[,\"(\\\\d{3})(\\\\d{3})\",\"$1 $2\",[\"[1-9]\"]],\n[,\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[28]\"],\"0$1\"],[,\"(\\\\d{2})(\\\\d{7})\",\"$1 $2\",[\"[79]\"],\"0$1\"]],[[,\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[28]\"],\"0$1\"],[,\"(\\\\d{2})(\\\\d{7})\",\"$1 $2\",[\"[79]\"],\"0$1\"]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],ZW:[,[,,\"2(?:[0-57-9]\\\\d{6,8}|6[0-24-9]\\\\d{6,7})|[38]\\\\d{9}|[35-8]\\\\d{8}|[3-6]\\\\d{7}|[1-689]\\\\d{6}|[1-3569]\\\\d{5}|[1356]\\\\d{4}\",,,,,,,[5,6,7,8,9,10],[3,4]],[,,\"(?:1(?:(?:3\\\\d|9)\\\\d|[4-8])|2(?:(?:(?:0(?:2[014]|5)|(?:2[0157]|31|84|9)\\\\d\\\\d|[56](?:[14]\\\\d\\\\d|20)|7(?:[089]|2[03]|[35]\\\\d\\\\d))\\\\d|4(?:2\\\\d\\\\d|8))\\\\d|1(?:2|[39]\\\\d{4}))|3(?:(?:123|(?:29\\\\d|92)\\\\d)\\\\d\\\\d|7(?:[19]|[56]\\\\d))|5(?:0|1[2-478]|26|[37]2|4(?:2\\\\d{3}|83)|5(?:25\\\\d\\\\d|[78])|[689]\\\\d)|6(?:(?:[16-8]21|28|52[013])\\\\d\\\\d|[39])|8(?:[1349]28|523)\\\\d\\\\d)\\\\d{3}|(?:4\\\\d\\\\d|9[2-9])\\\\d{4,5}|(?:(?:2(?:(?:(?:0|8[146])\\\\d|7[1-7])\\\\d|2(?:[278]\\\\d|92)|58(?:2\\\\d|3))|3(?:[26]|9\\\\d{3})|5(?:4\\\\d|5)\\\\d\\\\d)\\\\d|6(?:(?:(?:[0-246]|[78]\\\\d)\\\\d|37)\\\\d|5[2-8]))\\\\d\\\\d|(?:2(?:[569]\\\\d|8[2-57-9])|3(?:[013-59]\\\\d|8[37])|6[89]8)\\\\d{3}\",\n,,,\"1312345\",,,,[3,4]],[,,\"7(?:[1278]\\\\d|3[1-9])\\\\d{6}\",,,,\"712345678\",,,[9]],[,,\"80(?:[01]\\\\d|20|8[0-8])\\\\d{3}\",,,,\"8001234\",,,[7]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,\"86(?:1[12]|22|30|44|55|77|8[368])\\\\d{6}\",,,,\"8686123456\",,,[10]],\"ZW\",263,\"00\",\"0\",,,\"0\",,,,[[,\"(\\\\d{3})(\\\\d{3,5})\",\"$1 $2\",[\"2(?:0[45]|2[278]|[49]8)|3(?:[09]8|17)|6(?:[29]8|37|75)|[23][78]|(?:33|5[15]|6[68])[78]\"],\"0$1\"],[,\"(\\\\d)(\\\\d{3})(\\\\d{2,4})\",\"$1 $2 $3\",[\"[49]\"],\"0$1\"],[,\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"80\"],\"0$1\"],\n[,\"(\\\\d{2})(\\\\d{7})\",\"$1 $2\",[\"24|8[13-59]|(?:2[05-79]|39|5[45]|6[15-8])2\",\"2(?:02[014]|4|[56]20|[79]2)|392|5(?:42|525)|6(?:[16-8]21|52[013])|8[13-59]\"],\"(0$1)\"],[,\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"7\"],\"0$1\"],[,\"(\\\\d{3})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"2(?:1[39]|2[0157]|[378]|[56][14])|3(?:12|29)\",\"2(?:1[39]|2[0157]|[378]|[56][14])|3(?:123|29)\"],\"0$1\"],[,\"(\\\\d{4})(\\\\d{6})\",\"$1 $2\",[\"8\"],\"0$1\"],[,\"(\\\\d{2})(\\\\d{3,5})\",\"$1 $2\",[\"1|2(?:0[0-36-9]|12|29|[56])|3(?:1[0-689]|[24-6])|5(?:[0236-9]|1[2-4])|6(?:[013-59]|7[0-46-9])|(?:33|55|6[68])[0-69]|(?:29|3[09]|62)[0-79]\"],\n\"0$1\"],[,\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"29[013-9]|39|54\"],\"0$1\"],[,\"(\\\\d{4})(\\\\d{3,5})\",\"$1 $2\",[\"(?:25|54)8\",\"258|5483\"],\"0$1\"]],,[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],800:[,[,,\"(?:00|[1-9]\\\\d)\\\\d{6}\",,,,,,,[8]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,\"(?:00|[1-9]\\\\d)\\\\d{6}\",,,,\"12345678\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],\"001\",800,,,,,,,,1,[[,\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"\\\\d\"]]],,[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],\n,,[,,,,,,,,,[-1]]],808:[,[,,\"[1-9]\\\\d{7}\",,,,,,,[8]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,\"[1-9]\\\\d{7}\",,,,\"12345678\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],\"001\",808,,,,,,,,1,[[,\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[1-9]\"]]],,[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],870:[,[,,\"7\\\\d{11}|[235-7]\\\\d{8}\",,,,,,,[9,12]],[,,,,,,,,,[-1]],[,,\"(?:[356]|774[45])\\\\d{8}|7[6-8]\\\\d{7}\",,,,\"301234567\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,\n\"2\\\\d{8}\",,,,\"201234567\",,,[9]],\"001\",870,,,,,,,,,[[,\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[235-7]\"]]],,[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],878:[,[,,\"10\\\\d{10}\",,,,,,,[12]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,\"10\\\\d{10}\",,,,\"101234567890\"],\"001\",878,,,,,,,,1,[[,\"(\\\\d{2})(\\\\d{5})(\\\\d{5})\",\"$1 $2 $3\",[\"1\"]]],,[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],881:[,[,,\"6\\\\d{9}|[0-36-9]\\\\d{8}\",\n,,,,,,[9,10]],[,,,,,,,,,[-1]],[,,\"6\\\\d{9}|[0-36-9]\\\\d{8}\",,,,\"612345678\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],\"001\",881,,,,,,,,,[[,\"(\\\\d)(\\\\d{3})(\\\\d{5})\",\"$1 $2 $3\",[\"[0-37-9]\"]],[,\"(\\\\d)(\\\\d{3})(\\\\d{5,6})\",\"$1 $2 $3\",[\"6\"]]],,[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],882:[,[,,\"[13]\\\\d{6}(?:\\\\d{2,5})?|[19]\\\\d{7}|(?:[25]\\\\d\\\\d|4)\\\\d{7}(?:\\\\d{2})?\",,,,,,,[7,8,9,10,11,12]],[,,,,,,,,,[-1]],[,,\"342\\\\d{4}|(?:337|49)\\\\d{6}|(?:3(?:2|47|7\\\\d{3})|50\\\\d{3})\\\\d{7}\",\n,,,\"3421234\",,,[7,8,9,10,12]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,\"1(?:3(?:0[0347]|[13][0139]|2[035]|4[013568]|6[0459]|7[06]|8[15-8]|9[0689])\\\\d{4}|6\\\\d{5,10})|(?:345\\\\d|9[89])\\\\d{6}|(?:10|2(?:3|85\\\\d)|3(?:[15]|[69]\\\\d\\\\d)|4[15-8]|51)\\\\d{8}\",,,,\"390123456789\"],\"001\",882,,,,,,,,,[[,\"(\\\\d{2})(\\\\d{5})\",\"$1 $2\",[\"16|342\"]],[,\"(\\\\d{2})(\\\\d{6})\",\"$1 $2\",[\"49\"]],[,\"(\\\\d{2})(\\\\d{2})(\\\\d{4})\",\"$1 $2 $3\",[\"1[36]|9\"]],[,\"(\\\\d{2})(\\\\d{4})(\\\\d{3})\",\"$1 $2 $3\",[\"3[23]\"]],[,\"(\\\\d{2})(\\\\d{3,4})(\\\\d{4})\",\n\"$1 $2 $3\",[\"16\"]],[,\"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"10|23|3(?:[15]|4[57])|4|51\"]],[,\"(\\\\d{3})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"34\"]],[,\"(\\\\d{2})(\\\\d{4,5})(\\\\d{5})\",\"$1 $2 $3\",[\"[1-35]\"]]],,[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,\"348[57]\\\\d{7}\",,,,\"34851234567\",,,[11]]],883:[,[,,\"(?:[1-4]\\\\d|51)\\\\d{6,10}\",,,,,,,[8,9,10,11,12]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,\"(?:2(?:00\\\\d\\\\d|10)|(?:370[1-9]|51\\\\d0)\\\\d)\\\\d{7}|51(?:00\\\\d{5}|[24-9]0\\\\d{4,7})|(?:1[0-79]|2[24-689]|3[02-689]|4[0-4])0\\\\d{5,9}\",\n,,,\"510012345\"],\"001\",883,,,,,,,,1,[[,\"(\\\\d{3})(\\\\d{3})(\\\\d{2,8})\",\"$1 $2 $3\",[\"[14]|2[24-689]|3[02-689]|51[24-9]\"]],[,\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"510\"]],[,\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"21\"]],[,\"(\\\\d{4})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"51[13]\"]],[,\"(\\\\d{3})(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"[235]\"]]],,[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]],888:[,[,,\"\\\\d{11}\",,,,,,,[11]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,\n,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],\"001\",888,,,,,,,,1,[[,\"(\\\\d{3})(\\\\d{3})(\\\\d{5})\",\"$1 $2 $3\"]],,[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,\"\\\\d{11}\",,,,\"12345678901\"],,,[,,,,,,,,,[-1]]],979:[,[,,\"[1359]\\\\d{8}\",,,,,,,[9],[8]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,\"[1359]\\\\d{8}\",,,,\"123456789\",,,,[8]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],\"001\",979,,,,,,,,1,[[,\"(\\\\d)(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"[1359]\"]]],,[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,[,,,,,,,,,[-1]]]};/*\n\n Copyright (C) 2010 The Libphonenumber Authors.\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n*/\ni18n.phonenumbers.PhoneNumberUtil=function(){this.regionToMetadataMap={}};goog.addSingletonGetter(i18n.phonenumbers.PhoneNumberUtil);i18n.phonenumbers.Error={INVALID_COUNTRY_CODE:\"Invalid country calling code\",NOT_A_NUMBER:\"The string supplied did not seem to be a phone number\",TOO_SHORT_AFTER_IDD:\"Phone number too short after IDD\",TOO_SHORT_NSN:\"The string supplied is too short to be a phone number\",TOO_LONG:\"The string supplied is too long to be a phone number\"};\ni18n.phonenumbers.PhoneNumberUtil.NANPA_COUNTRY_CODE_=1;i18n.phonenumbers.PhoneNumberUtil.MIN_LENGTH_FOR_NSN_=2;i18n.phonenumbers.PhoneNumberUtil.MAX_LENGTH_FOR_NSN_=17;i18n.phonenumbers.PhoneNumberUtil.MAX_LENGTH_COUNTRY_CODE_=3;i18n.phonenumbers.PhoneNumberUtil.MAX_INPUT_STRING_LENGTH_=250;i18n.phonenumbers.PhoneNumberUtil.UNKNOWN_REGION_=\"ZZ\";i18n.phonenumbers.PhoneNumberUtil.MOBILE_TOKEN_MAPPINGS_={54:\"9\"};i18n.phonenumbers.PhoneNumberUtil.GEO_MOBILE_COUNTRIES_=[52,54,55];\ni18n.phonenumbers.PhoneNumberUtil.PLUS_SIGN=\"+\";i18n.phonenumbers.PhoneNumberUtil.STAR_SIGN_=\"*\";i18n.phonenumbers.PhoneNumberUtil.RFC3966_EXTN_PREFIX_=\";ext=\";i18n.phonenumbers.PhoneNumberUtil.RFC3966_PREFIX_=\"tel:\";i18n.phonenumbers.PhoneNumberUtil.RFC3966_PHONE_CONTEXT_=\";phone-context=\";i18n.phonenumbers.PhoneNumberUtil.RFC3966_ISDN_SUBADDRESS_=\";isub=\";\ni18n.phonenumbers.PhoneNumberUtil.DIGIT_MAPPINGS={0:\"0\",1:\"1\",2:\"2\",3:\"3\",4:\"4\",5:\"5\",6:\"6\",7:\"7\",8:\"8\",9:\"9\",\"\\uff10\":\"0\",\"\\uff11\":\"1\",\"\\uff12\":\"2\",\"\\uff13\":\"3\",\"\\uff14\":\"4\",\"\\uff15\":\"5\",\"\\uff16\":\"6\",\"\\uff17\":\"7\",\"\\uff18\":\"8\",\"\\uff19\":\"9\",\"\\u0660\":\"0\",\"\\u0661\":\"1\",\"\\u0662\":\"2\",\"\\u0663\":\"3\",\"\\u0664\":\"4\",\"\\u0665\":\"5\",\"\\u0666\":\"6\",\"\\u0667\":\"7\",\"\\u0668\":\"8\",\"\\u0669\":\"9\",\"\\u06f0\":\"0\",\"\\u06f1\":\"1\",\"\\u06f2\":\"2\",\"\\u06f3\":\"3\",\"\\u06f4\":\"4\",\"\\u06f5\":\"5\",\"\\u06f6\":\"6\",\"\\u06f7\":\"7\",\"\\u06f8\":\"8\",\"\\u06f9\":\"9\"};\ni18n.phonenumbers.PhoneNumberUtil.DIALLABLE_CHAR_MAPPINGS_={0:\"0\",1:\"1\",2:\"2\",3:\"3\",4:\"4\",5:\"5\",6:\"6\",7:\"7\",8:\"8\",9:\"9\",\"+\":i18n.phonenumbers.PhoneNumberUtil.PLUS_SIGN,\"*\":\"*\",\"#\":\"#\"};i18n.phonenumbers.PhoneNumberUtil.ALPHA_MAPPINGS_={A:\"2\",B:\"2\",C:\"2\",D:\"3\",E:\"3\",F:\"3\",G:\"4\",H:\"4\",I:\"4\",J:\"5\",K:\"5\",L:\"5\",M:\"6\",N:\"6\",O:\"6\",P:\"7\",Q:\"7\",R:\"7\",S:\"7\",T:\"8\",U:\"8\",V:\"8\",W:\"9\",X:\"9\",Y:\"9\",Z:\"9\"};\ni18n.phonenumbers.PhoneNumberUtil.ALL_NORMALIZATION_MAPPINGS_={0:\"0\",1:\"1\",2:\"2\",3:\"3\",4:\"4\",5:\"5\",6:\"6\",7:\"7\",8:\"8\",9:\"9\",\"\\uff10\":\"0\",\"\\uff11\":\"1\",\"\\uff12\":\"2\",\"\\uff13\":\"3\",\"\\uff14\":\"4\",\"\\uff15\":\"5\",\"\\uff16\":\"6\",\"\\uff17\":\"7\",\"\\uff18\":\"8\",\"\\uff19\":\"9\",\"\\u0660\":\"0\",\"\\u0661\":\"1\",\"\\u0662\":\"2\",\"\\u0663\":\"3\",\"\\u0664\":\"4\",\"\\u0665\":\"5\",\"\\u0666\":\"6\",\"\\u0667\":\"7\",\"\\u0668\":\"8\",\"\\u0669\":\"9\",\"\\u06f0\":\"0\",\"\\u06f1\":\"1\",\"\\u06f2\":\"2\",\"\\u06f3\":\"3\",\"\\u06f4\":\"4\",\"\\u06f5\":\"5\",\"\\u06f6\":\"6\",\"\\u06f7\":\"7\",\"\\u06f8\":\"8\",\"\\u06f9\":\"9\",\nA:\"2\",B:\"2\",C:\"2\",D:\"3\",E:\"3\",F:\"3\",G:\"4\",H:\"4\",I:\"4\",J:\"5\",K:\"5\",L:\"5\",M:\"6\",N:\"6\",O:\"6\",P:\"7\",Q:\"7\",R:\"7\",S:\"7\",T:\"8\",U:\"8\",V:\"8\",W:\"9\",X:\"9\",Y:\"9\",Z:\"9\"};\ni18n.phonenumbers.PhoneNumberUtil.ALL_PLUS_NUMBER_GROUPING_SYMBOLS_={0:\"0\",1:\"1\",2:\"2\",3:\"3\",4:\"4\",5:\"5\",6:\"6\",7:\"7\",8:\"8\",9:\"9\",A:\"A\",B:\"B\",C:\"C\",D:\"D\",E:\"E\",F:\"F\",G:\"G\",H:\"H\",I:\"I\",J:\"J\",K:\"K\",L:\"L\",M:\"M\",N:\"N\",O:\"O\",P:\"P\",Q:\"Q\",R:\"R\",S:\"S\",T:\"T\",U:\"U\",V:\"V\",W:\"W\",X:\"X\",Y:\"Y\",Z:\"Z\",a:\"A\",b:\"B\",c:\"C\",d:\"D\",e:\"E\",f:\"F\",g:\"G\",h:\"H\",i:\"I\",j:\"J\",k:\"K\",l:\"L\",m:\"M\",n:\"N\",o:\"O\",p:\"P\",q:\"Q\",r:\"R\",s:\"S\",t:\"T\",u:\"U\",v:\"V\",w:\"W\",x:\"X\",y:\"Y\",z:\"Z\",\"-\":\"-\",\"\\uff0d\":\"-\",\"\\u2010\":\"-\",\"\\u2011\":\"-\",\"\\u2012\":\"-\",\n\"\\u2013\":\"-\",\"\\u2014\":\"-\",\"\\u2015\":\"-\",\"\\u2212\":\"-\",\"/\":\"/\",\"\\uff0f\":\"/\",\" \":\" \",\"\\u3000\":\" \",\"\\u2060\":\" \",\".\":\".\",\"\\uff0e\":\".\"};i18n.phonenumbers.PhoneNumberUtil.SINGLE_INTERNATIONAL_PREFIX_=/[\\d]+(?:[~\\u2053\\u223C\\uFF5E][\\d]+)?/;i18n.phonenumbers.PhoneNumberUtil.VALID_PUNCTUATION=\"-x\\u2010-\\u2015\\u2212\\u30fc\\uff0d-\\uff0f \\u00a0\\u00ad\\u200b\\u2060\\u3000()\\uff08\\uff09\\uff3b\\uff3d.\\\\[\\\\]/~\\u2053\\u223c\\uff5e\";i18n.phonenumbers.PhoneNumberUtil.VALID_DIGITS_=\"0-9\\uff10-\\uff19\\u0660-\\u0669\\u06f0-\\u06f9\";\ni18n.phonenumbers.PhoneNumberUtil.VALID_ALPHA_=\"A-Za-z\";i18n.phonenumbers.PhoneNumberUtil.PLUS_CHARS_=\"+\\uff0b\";i18n.phonenumbers.PhoneNumberUtil.PLUS_CHARS_PATTERN=new RegExp(\"[\"+i18n.phonenumbers.PhoneNumberUtil.PLUS_CHARS_+\"]+\");i18n.phonenumbers.PhoneNumberUtil.LEADING_PLUS_CHARS_PATTERN=new RegExp(\"^[\"+i18n.phonenumbers.PhoneNumberUtil.PLUS_CHARS_+\"]+\");i18n.phonenumbers.PhoneNumberUtil.SEPARATOR_PATTERN_=\"[\"+i18n.phonenumbers.PhoneNumberUtil.VALID_PUNCTUATION+\"]+\";\ni18n.phonenumbers.PhoneNumberUtil.CAPTURING_DIGIT_PATTERN=new RegExp(\"([\"+i18n.phonenumbers.PhoneNumberUtil.VALID_DIGITS_+\"])\");i18n.phonenumbers.PhoneNumberUtil.VALID_START_CHAR_PATTERN_=new RegExp(\"[\"+i18n.phonenumbers.PhoneNumberUtil.PLUS_CHARS_+i18n.phonenumbers.PhoneNumberUtil.VALID_DIGITS_+\"]\");i18n.phonenumbers.PhoneNumberUtil.SECOND_NUMBER_START_PATTERN_=/[\\\\\\/] *x/;\ni18n.phonenumbers.PhoneNumberUtil.UNWANTED_END_CHAR_PATTERN_=new RegExp(\"[^\"+i18n.phonenumbers.PhoneNumberUtil.VALID_DIGITS_+i18n.phonenumbers.PhoneNumberUtil.VALID_ALPHA_+\"#]+$\");i18n.phonenumbers.PhoneNumberUtil.VALID_ALPHA_PHONE_PATTERN_=/(?:.*?[A-Za-z]){3}.*/;i18n.phonenumbers.PhoneNumberUtil.MIN_LENGTH_PHONE_NUMBER_PATTERN_=\"[\"+i18n.phonenumbers.PhoneNumberUtil.VALID_DIGITS_+\"]{\"+i18n.phonenumbers.PhoneNumberUtil.MIN_LENGTH_FOR_NSN_+\"}\";\ni18n.phonenumbers.PhoneNumberUtil.VALID_PHONE_NUMBER_=\"[\"+i18n.phonenumbers.PhoneNumberUtil.PLUS_CHARS_+\"]*(?:[\"+i18n.phonenumbers.PhoneNumberUtil.VALID_PUNCTUATION+i18n.phonenumbers.PhoneNumberUtil.STAR_SIGN_+\"]*[\"+i18n.phonenumbers.PhoneNumberUtil.VALID_DIGITS_+\"]){3,}[\"+i18n.phonenumbers.PhoneNumberUtil.VALID_PUNCTUATION+i18n.phonenumbers.PhoneNumberUtil.STAR_SIGN_+i18n.phonenumbers.PhoneNumberUtil.VALID_ALPHA_+i18n.phonenumbers.PhoneNumberUtil.VALID_DIGITS_+\"]*\";\ni18n.phonenumbers.PhoneNumberUtil.DEFAULT_EXTN_PREFIX_=\" ext. \";i18n.phonenumbers.PhoneNumberUtil.RFC3966_VISUAL_SEPARATOR_=\"[\\\\-\\\\.\\\\(\\\\)]?\";i18n.phonenumbers.PhoneNumberUtil.RFC3966_PHONE_DIGIT_=\"([\"+i18n.phonenumbers.PhoneNumberUtil.VALID_DIGITS_+\"]|\"+i18n.phonenumbers.PhoneNumberUtil.RFC3966_VISUAL_SEPARATOR_+\")\";\ni18n.phonenumbers.PhoneNumberUtil.RFC3966_GLOBAL_NUMBER_DIGITS_=\"^\\\\\"+i18n.phonenumbers.PhoneNumberUtil.PLUS_SIGN+i18n.phonenumbers.PhoneNumberUtil.RFC3966_PHONE_DIGIT_+\"*[\"+i18n.phonenumbers.PhoneNumberUtil.VALID_DIGITS_+\"]\"+i18n.phonenumbers.PhoneNumberUtil.RFC3966_PHONE_DIGIT_+\"*$\";i18n.phonenumbers.PhoneNumberUtil.RFC3966_GLOBAL_NUMBER_DIGITS_PATTERN_=new RegExp(i18n.phonenumbers.PhoneNumberUtil.RFC3966_GLOBAL_NUMBER_DIGITS_);\ni18n.phonenumbers.PhoneNumberUtil.ALPHANUM_=i18n.phonenumbers.PhoneNumberUtil.VALID_ALPHA_+i18n.phonenumbers.PhoneNumberUtil.VALID_DIGITS_;i18n.phonenumbers.PhoneNumberUtil.RFC3966_DOMAINLABEL_=\"[\"+i18n.phonenumbers.PhoneNumberUtil.ALPHANUM_+\"]+((\\\\-)*[\"+i18n.phonenumbers.PhoneNumberUtil.ALPHANUM_+\"])*\";i18n.phonenumbers.PhoneNumberUtil.RFC3966_TOPLABEL_=\"[\"+i18n.phonenumbers.PhoneNumberUtil.VALID_ALPHA_+\"]+((\\\\-)*[\"+i18n.phonenumbers.PhoneNumberUtil.ALPHANUM_+\"])*\";\ni18n.phonenumbers.PhoneNumberUtil.RFC3966_DOMAINNAME_=\"^(\"+i18n.phonenumbers.PhoneNumberUtil.RFC3966_DOMAINLABEL_+\"\\\\.)*\"+i18n.phonenumbers.PhoneNumberUtil.RFC3966_TOPLABEL_+\"\\\\.?$\";i18n.phonenumbers.PhoneNumberUtil.RFC3966_DOMAINNAME_PATTERN_=new RegExp(i18n.phonenumbers.PhoneNumberUtil.RFC3966_DOMAINNAME_);i18n.phonenumbers.PhoneNumberUtil.extnDigits_=function(a){return\"([\"+i18n.phonenumbers.PhoneNumberUtil.VALID_DIGITS_+\"]{1,\"+a+\"})\"};\ni18n.phonenumbers.PhoneNumberUtil.createExtnPattern_=function(){var a=i18n.phonenumbers.PhoneNumberUtil.RFC3966_EXTN_PREFIX_+i18n.phonenumbers.PhoneNumberUtil.extnDigits_(\"20\"),b=\"[ \\u00a0\\\\t,]*(?:e?xt(?:ensi(?:o\\u0301?|\\u00f3))?n?|\\uff45?\\uff58\\uff54\\uff4e?|\\u0434\\u043e\\u0431|anexo)[:\\\\.\\uff0e]?[ \\u00a0\\\\t,-]*\"+i18n.phonenumbers.PhoneNumberUtil.extnDigits_(\"20\")+\"#?\",c=\"[ \\u00a0\\\\t,]*(?:[x\\uff58#\\uff03~\\uff5e]|int|\\uff49\\uff4e\\uff54)[:\\\\.\\uff0e]?[ \\u00a0\\\\t,-]*\"+i18n.phonenumbers.PhoneNumberUtil.extnDigits_(\"9\")+\n\"#?\",d=\"[- ]+\"+i18n.phonenumbers.PhoneNumberUtil.extnDigits_(\"6\")+\"#\",e=\"[ \\u00a0\\\\t]*(?:,{2}|;)[:\\\\.\\uff0e]?[ \\u00a0\\\\t,-]*\"+i18n.phonenumbers.PhoneNumberUtil.extnDigits_(\"15\")+\"#?\",f=\"[ \\u00a0\\\\t]*(?:,)+[:\\\\.\\uff0e]?[ \\u00a0\\\\t,-]*\"+i18n.phonenumbers.PhoneNumberUtil.extnDigits_(\"9\")+\"#?\";return a+\"|\"+b+\"|\"+c+\"|\"+d+\"|\"+e+\"|\"+f};i18n.phonenumbers.PhoneNumberUtil.EXTN_PATTERN_=new RegExp(\"(?:\"+i18n.phonenumbers.PhoneNumberUtil.createExtnPattern_()+\")$\",\"i\");\ni18n.phonenumbers.PhoneNumberUtil.VALID_PHONE_NUMBER_PATTERN_=new RegExp(\"^\"+i18n.phonenumbers.PhoneNumberUtil.MIN_LENGTH_PHONE_NUMBER_PATTERN_+\"$|^\"+i18n.phonenumbers.PhoneNumberUtil.VALID_PHONE_NUMBER_+\"(?:\"+i18n.phonenumbers.PhoneNumberUtil.createExtnPattern_()+\")?$\",\"i\");i18n.phonenumbers.PhoneNumberUtil.NON_DIGITS_PATTERN_=/\\D+/;i18n.phonenumbers.PhoneNumberUtil.FIRST_GROUP_PATTERN_=/(\\$\\d)/;i18n.phonenumbers.PhoneNumberUtil.NP_PATTERN_=/\\$NP/;i18n.phonenumbers.PhoneNumberUtil.FG_PATTERN_=/\\$FG/;\ni18n.phonenumbers.PhoneNumberUtil.CC_PATTERN_=/\\$CC/;i18n.phonenumbers.PhoneNumberUtil.FIRST_GROUP_ONLY_PREFIX_PATTERN_=/^\\(?\\$1\\)?$/;i18n.phonenumbers.PhoneNumberUtil.REGION_CODE_FOR_NON_GEO_ENTITY=\"001\";i18n.phonenumbers.PhoneNumberFormat={E164:0,INTERNATIONAL:1,NATIONAL:2,RFC3966:3};i18n.phonenumbers.PhoneNumberType={FIXED_LINE:0,MOBILE:1,FIXED_LINE_OR_MOBILE:2,TOLL_FREE:3,PREMIUM_RATE:4,SHARED_COST:5,VOIP:6,PERSONAL_NUMBER:7,PAGER:8,UAN:9,VOICEMAIL:10,UNKNOWN:-1};\ni18n.phonenumbers.PhoneNumberUtil.MatchType={NOT_A_NUMBER:0,NO_MATCH:1,SHORT_NSN_MATCH:2,NSN_MATCH:3,EXACT_MATCH:4};i18n.phonenumbers.PhoneNumberUtil.ValidationResult={IS_POSSIBLE:0,IS_POSSIBLE_LOCAL_ONLY:4,INVALID_COUNTRY_CODE:1,TOO_SHORT:2,INVALID_LENGTH:5,TOO_LONG:3};\ni18n.phonenumbers.PhoneNumberUtil.extractPossibleNumber=function(a){var b=a.search(i18n.phonenumbers.PhoneNumberUtil.VALID_START_CHAR_PATTERN_);0<=b?(a=a.substring(b),a=a.replace(i18n.phonenumbers.PhoneNumberUtil.UNWANTED_END_CHAR_PATTERN_,\"\"),b=a.search(i18n.phonenumbers.PhoneNumberUtil.SECOND_NUMBER_START_PATTERN_),0<=b&&(a=a.substring(0,b))):a=\"\";return a};\ni18n.phonenumbers.PhoneNumberUtil.isViablePhoneNumber=function(a){return a.length<i18n.phonenumbers.PhoneNumberUtil.MIN_LENGTH_FOR_NSN_?!1:i18n.phonenumbers.PhoneNumberUtil.matchesEntirely(i18n.phonenumbers.PhoneNumberUtil.VALID_PHONE_NUMBER_PATTERN_,a)};\ni18n.phonenumbers.PhoneNumberUtil.normalize=function(a){return i18n.phonenumbers.PhoneNumberUtil.matchesEntirely(i18n.phonenumbers.PhoneNumberUtil.VALID_ALPHA_PHONE_PATTERN_,a)?i18n.phonenumbers.PhoneNumberUtil.normalizeHelper_(a,i18n.phonenumbers.PhoneNumberUtil.ALL_NORMALIZATION_MAPPINGS_,!0):i18n.phonenumbers.PhoneNumberUtil.normalizeDigitsOnly(a)};i18n.phonenumbers.PhoneNumberUtil.normalizeSB_=function(a){var b=i18n.phonenumbers.PhoneNumberUtil.normalize(a.toString());a.clear();a.append(b)};\ni18n.phonenumbers.PhoneNumberUtil.normalizeDigitsOnly=function(a){return i18n.phonenumbers.PhoneNumberUtil.normalizeHelper_(a,i18n.phonenumbers.PhoneNumberUtil.DIGIT_MAPPINGS,!0)};i18n.phonenumbers.PhoneNumberUtil.normalizeDiallableCharsOnly=function(a){return i18n.phonenumbers.PhoneNumberUtil.normalizeHelper_(a,i18n.phonenumbers.PhoneNumberUtil.DIALLABLE_CHAR_MAPPINGS_,!0)};\ni18n.phonenumbers.PhoneNumberUtil.convertAlphaCharactersInNumber=function(a){return i18n.phonenumbers.PhoneNumberUtil.normalizeHelper_(a,i18n.phonenumbers.PhoneNumberUtil.ALL_NORMALIZATION_MAPPINGS_,!1)};i18n.phonenumbers.PhoneNumberUtil.prototype.getLengthOfGeographicalAreaCode=function(a){var b=this.getMetadataForRegion(this.getRegionCodeForNumber(a));return null!=b&&(b.hasNationalPrefix()||a.hasItalianLeadingZero())&&this.isNumberGeographical(a)?this.getLengthOfNationalDestinationCode(a):0};\ni18n.phonenumbers.PhoneNumberUtil.prototype.getLengthOfNationalDestinationCode=function(a){if(a.hasExtension()){var b=a.clone();b.clearExtension()}else b=a;b=this.format(b,i18n.phonenumbers.PhoneNumberFormat.INTERNATIONAL).split(i18n.phonenumbers.PhoneNumberUtil.NON_DIGITS_PATTERN_);0==b[0].length&&b.shift();return 2>=b.length?0:this.getNumberType(a)==i18n.phonenumbers.PhoneNumberType.MOBILE&&(a=i18n.phonenumbers.PhoneNumberUtil.getCountryMobileToken(a.getCountryCodeOrDefault()),\"\"!=a)?b[2].length+\na.length:b[1].length};i18n.phonenumbers.PhoneNumberUtil.getCountryMobileToken=function(a){return i18n.phonenumbers.PhoneNumberUtil.MOBILE_TOKEN_MAPPINGS_[a]||\"\"};i18n.phonenumbers.PhoneNumberUtil.prototype.getSupportedRegions=function(){return Object.keys(i18n.phonenumbers.metadata.countryToMetadata).filter(function(a){return isNaN(a)})};\ni18n.phonenumbers.PhoneNumberUtil.prototype.getSupportedGlobalNetworkCallingCodes=function(){return Object.keys(i18n.phonenumbers.metadata.countryToMetadata).filter(function(a){return!isNaN(a)}).map(function(a){return parseInt(a,10)})};\ni18n.phonenumbers.PhoneNumberUtil.prototype.getSupportedCallingCodes=function(){var a=Object.keys(i18n.phonenumbers.metadata.countryCodeToRegionCodeMap);return[].concat($jscomp.arrayFromIterable(this.getSupportedGlobalNetworkCallingCodes()),$jscomp.arrayFromIterable(a.map(function(b){return parseInt(b,10)})))};i18n.phonenumbers.PhoneNumberUtil.descHasPossibleNumberData_=function(a){return null!=a&&(1!=a.possibleLengthCount()||-1!=a.possibleLengthArray()[0])};\ni18n.phonenumbers.PhoneNumberUtil.descHasData_=function(a){return null!=a&&(a.hasExampleNumber()||i18n.phonenumbers.PhoneNumberUtil.descHasPossibleNumberData_(a)||a.hasNationalNumberPattern())};\ni18n.phonenumbers.PhoneNumberUtil.getSupportedTypesForMetadata_=function(a){var b=[];goog.object.forEach(i18n.phonenumbers.PhoneNumberType,function(c){if(c!=i18n.phonenumbers.PhoneNumberType.FIXED_LINE_OR_MOBILE&&c!=i18n.phonenumbers.PhoneNumberType.UNKNOWN){var d=i18n.phonenumbers.PhoneNumberUtil.getNumberDescByType_(a,c);i18n.phonenumbers.PhoneNumberUtil.descHasData_(d)&&b.push(c)}});return b};\ni18n.phonenumbers.PhoneNumberUtil.prototype.getSupportedTypesForRegion=function(a){return this.isValidRegionCode_(a)?i18n.phonenumbers.PhoneNumberUtil.getSupportedTypesForMetadata_(this.getMetadataForRegion(a)):[]};i18n.phonenumbers.PhoneNumberUtil.prototype.getSupportedTypesForNonGeoEntity=function(a){a=this.getMetadataForNonGeographicalRegion(a);return null==a?[]:i18n.phonenumbers.PhoneNumberUtil.getSupportedTypesForMetadata_(a)};\ni18n.phonenumbers.PhoneNumberUtil.normalizeHelper_=function(a,b,c){for(var d=new goog.string.StringBuffer,e,f,g=a.length,h=0;h<g;++h)e=a.charAt(h),f=b[e.toUpperCase()],null!=f?d.append(f):c||d.append(e);return d.toString()};i18n.phonenumbers.PhoneNumberUtil.prototype.formattingRuleHasFirstGroupOnly=function(a){return 0==a.length||i18n.phonenumbers.PhoneNumberUtil.FIRST_GROUP_ONLY_PREFIX_PATTERN_.test(a)};\ni18n.phonenumbers.PhoneNumberUtil.prototype.isNumberGeographical=function(a){var b=this.getNumberType(a);return b==i18n.phonenumbers.PhoneNumberType.FIXED_LINE||b==i18n.phonenumbers.PhoneNumberType.FIXED_LINE_OR_MOBILE||i18n.phonenumbers.PhoneNumberUtil.GEO_MOBILE_COUNTRIES_.includes(a.getCountryCodeOrDefault())&&b==i18n.phonenumbers.PhoneNumberType.MOBILE};i18n.phonenumbers.PhoneNumberUtil.prototype.isValidRegionCode_=function(a){return null!=a&&isNaN(a)&&a.toUpperCase()in i18n.phonenumbers.metadata.countryToMetadata};\ni18n.phonenumbers.PhoneNumberUtil.prototype.hasValidCountryCallingCode_=function(a){return a in i18n.phonenumbers.metadata.countryCodeToRegionCodeMap};\ni18n.phonenumbers.PhoneNumberUtil.prototype.format=function(a,b){if(0==a.getNationalNumber()&&a.hasRawInput()){var c=a.getRawInputOrDefault();if(0<c.length)return c}c=a.getCountryCodeOrDefault();var d=this.getNationalSignificantNumber(a);if(b==i18n.phonenumbers.PhoneNumberFormat.E164)return this.prefixNumberWithCountryCallingCode_(c,i18n.phonenumbers.PhoneNumberFormat.E164,d,\"\");if(!this.hasValidCountryCallingCode_(c))return d;var e=this.getRegionCodeForCountryCode(c);e=this.getMetadataForRegionOrCallingCode_(c,\ne);a=this.maybeGetFormattedExtension_(a,e,b);d=this.formatNsn_(d,e,b);return this.prefixNumberWithCountryCallingCode_(c,b,d,a)};\ni18n.phonenumbers.PhoneNumberUtil.prototype.formatByPattern=function(a,b,c){var d=a.getCountryCodeOrDefault(),e=this.getNationalSignificantNumber(a);if(!this.hasValidCountryCallingCode_(d))return e;var f=this.getRegionCodeForCountryCode(d);f=this.getMetadataForRegionOrCallingCode_(d,f);var g=this.chooseFormattingPatternForNumber_(c,e);if(null!=g){c=g.clone();g=g.getNationalPrefixFormattingRuleOrDefault();if(0<g.length){var h=f.getNationalPrefixOrDefault();0<h.length?(g=g.replace(i18n.phonenumbers.PhoneNumberUtil.NP_PATTERN_,\nh).replace(i18n.phonenumbers.PhoneNumberUtil.FG_PATTERN_,\"$1\"),c.setNationalPrefixFormattingRule(g)):c.clearNationalPrefixFormattingRule()}e=this.formatNsnUsingPattern_(e,c,b)}a=this.maybeGetFormattedExtension_(a,f,b);return this.prefixNumberWithCountryCallingCode_(d,b,e,a)};\ni18n.phonenumbers.PhoneNumberUtil.prototype.formatNationalNumberWithCarrierCode=function(a,b){var c=a.getCountryCodeOrDefault(),d=this.getNationalSignificantNumber(a);if(!this.hasValidCountryCallingCode_(c))return d;var e=this.getRegionCodeForCountryCode(c);e=this.getMetadataForRegionOrCallingCode_(c,e);a=this.maybeGetFormattedExtension_(a,e,i18n.phonenumbers.PhoneNumberFormat.NATIONAL);b=this.formatNsn_(d,e,i18n.phonenumbers.PhoneNumberFormat.NATIONAL,b);return this.prefixNumberWithCountryCallingCode_(c,\ni18n.phonenumbers.PhoneNumberFormat.NATIONAL,b,a)};i18n.phonenumbers.PhoneNumberUtil.prototype.getMetadataForRegionOrCallingCode_=function(a,b){return i18n.phonenumbers.PhoneNumberUtil.REGION_CODE_FOR_NON_GEO_ENTITY==b?this.getMetadataForNonGeographicalRegion(a):this.getMetadataForRegion(b)};\ni18n.phonenumbers.PhoneNumberUtil.prototype.formatNationalNumberWithPreferredCarrierCode=function(a,b){return this.formatNationalNumberWithCarrierCode(a,0<a.getPreferredDomesticCarrierCodeOrDefault().length?a.getPreferredDomesticCarrierCodeOrDefault():b)};\ni18n.phonenumbers.PhoneNumberUtil.prototype.formatNumberForMobileDialing=function(a,b,c){var d=a.getCountryCodeOrDefault();if(!this.hasValidCountryCallingCode_(d))return a.hasRawInput()?a.getRawInputOrDefault():\"\";var e=\"\";a=a.clone();a.clearExtension();var f=this.getRegionCodeForCountryCode(d),g=this.getNumberType(a),h=g!=i18n.phonenumbers.PhoneNumberType.UNKNOWN;if(b==f)e=g==i18n.phonenumbers.PhoneNumberType.FIXED_LINE||g==i18n.phonenumbers.PhoneNumberType.MOBILE||g==i18n.phonenumbers.PhoneNumberType.FIXED_LINE_OR_MOBILE,\n\"BR\"==f&&e?e=0<a.getPreferredDomesticCarrierCodeOrDefault().length?this.formatNationalNumberWithPreferredCarrierCode(a,\"\"):\"\":d==i18n.phonenumbers.PhoneNumberUtil.NANPA_COUNTRY_CODE_?(b=this.getMetadataForRegion(b),e=this.canBeInternationallyDialled(a)&&this.testNumberLength_(this.getNationalSignificantNumber(a),b)!=i18n.phonenumbers.PhoneNumberUtil.ValidationResult.TOO_SHORT?this.format(a,i18n.phonenumbers.PhoneNumberFormat.INTERNATIONAL):this.format(a,i18n.phonenumbers.PhoneNumberFormat.NATIONAL)):\ne=(f==i18n.phonenumbers.PhoneNumberUtil.REGION_CODE_FOR_NON_GEO_ENTITY||(\"MX\"==f||\"CL\"==f||\"UZ\"==f)&&e)&&this.canBeInternationallyDialled(a)?this.format(a,i18n.phonenumbers.PhoneNumberFormat.INTERNATIONAL):this.format(a,i18n.phonenumbers.PhoneNumberFormat.NATIONAL);else if(h&&this.canBeInternationallyDialled(a))return c?this.format(a,i18n.phonenumbers.PhoneNumberFormat.INTERNATIONAL):this.format(a,i18n.phonenumbers.PhoneNumberFormat.E164);return c?e:i18n.phonenumbers.PhoneNumberUtil.normalizeDiallableCharsOnly(e)};\ni18n.phonenumbers.PhoneNumberUtil.prototype.formatOutOfCountryCallingNumber=function(a,b){if(!this.isValidRegionCode_(b))return this.format(a,i18n.phonenumbers.PhoneNumberFormat.INTERNATIONAL);var c=a.getCountryCodeOrDefault(),d=this.getNationalSignificantNumber(a);if(!this.hasValidCountryCallingCode_(c))return d;if(c==i18n.phonenumbers.PhoneNumberUtil.NANPA_COUNTRY_CODE_){if(this.isNANPACountry(b))return c+\" \"+this.format(a,i18n.phonenumbers.PhoneNumberFormat.NATIONAL)}else if(c==this.getCountryCodeForValidRegion_(b))return this.format(a,\ni18n.phonenumbers.PhoneNumberFormat.NATIONAL);var e=this.getMetadataForRegion(b),f=e.getInternationalPrefixOrDefault();b=\"\";e.hasPreferredInternationalPrefix()?b=e.getPreferredInternationalPrefixOrDefault():i18n.phonenumbers.PhoneNumberUtil.matchesEntirely(i18n.phonenumbers.PhoneNumberUtil.SINGLE_INTERNATIONAL_PREFIX_,f)&&(b=f);e=this.getRegionCodeForCountryCode(c);e=this.getMetadataForRegionOrCallingCode_(c,e);d=this.formatNsn_(d,e,i18n.phonenumbers.PhoneNumberFormat.INTERNATIONAL);a=this.maybeGetFormattedExtension_(a,\ne,i18n.phonenumbers.PhoneNumberFormat.INTERNATIONAL);return 0<b.length?b+\" \"+c+\" \"+d+a:this.prefixNumberWithCountryCallingCode_(c,i18n.phonenumbers.PhoneNumberFormat.INTERNATIONAL,d,a)};\ni18n.phonenumbers.PhoneNumberUtil.prototype.formatInOriginalFormat=function(a,b){if(a.hasRawInput()&&!this.hasFormattingPatternForNumber_(a))return a.getRawInputOrDefault();if(!a.hasCountryCodeSource())return this.format(a,i18n.phonenumbers.PhoneNumberFormat.NATIONAL);switch(a.getCountryCodeSource()){case i18n.phonenumbers.PhoneNumber.CountryCodeSource.FROM_NUMBER_WITH_PLUS_SIGN:b=this.format(a,i18n.phonenumbers.PhoneNumberFormat.INTERNATIONAL);break;case i18n.phonenumbers.PhoneNumber.CountryCodeSource.FROM_NUMBER_WITH_IDD:b=\nthis.formatOutOfCountryCallingNumber(a,b);break;case i18n.phonenumbers.PhoneNumber.CountryCodeSource.FROM_NUMBER_WITHOUT_PLUS_SIGN:b=this.format(a,i18n.phonenumbers.PhoneNumberFormat.INTERNATIONAL).substring(1);break;default:var c=this.getRegionCodeForCountryCode(a.getCountryCodeOrDefault()),d=this.getNddPrefixForRegion(c,!0);b=this.format(a,i18n.phonenumbers.PhoneNumberFormat.NATIONAL);if(null!=d&&0!=d.length&&!this.rawInputContainsNationalPrefix_(a.getRawInputOrDefault(),d,c)&&(c=this.getMetadataForRegion(c),\nd=this.getNationalSignificantNumber(a),c=this.chooseFormattingPatternForNumber_(c.numberFormatArray(),d),null!=c)){d=c.getNationalPrefixFormattingRuleOrDefault();var e=d.indexOf(\"$1\");0>=e||(d=d.substring(0,e),d=i18n.phonenumbers.PhoneNumberUtil.normalizeDigitsOnly(d),0!=d.length&&(b=c.clone(),b.clearNationalPrefixFormattingRule(),b=this.formatByPattern(a,i18n.phonenumbers.PhoneNumberFormat.NATIONAL,[b])))}}a=a.getRawInputOrDefault();null!=b&&0<a.length&&(c=i18n.phonenumbers.PhoneNumberUtil.normalizeDiallableCharsOnly(b),\nd=i18n.phonenumbers.PhoneNumberUtil.normalizeDiallableCharsOnly(a),c!=d&&(b=a));return b};i18n.phonenumbers.PhoneNumberUtil.prototype.rawInputContainsNationalPrefix_=function(a,b,c){a=i18n.phonenumbers.PhoneNumberUtil.normalizeDigitsOnly(a);if(goog.string.startsWith(a,b))try{return this.isValidNumber(this.parse(a.substring(b.length),c))}catch(d){}return!1};\ni18n.phonenumbers.PhoneNumberUtil.prototype.hasFormattingPatternForNumber_=function(a){var b=a.getCountryCodeOrDefault(),c=this.getRegionCodeForCountryCode(b);b=this.getMetadataForRegionOrCallingCode_(b,c);if(null==b)return!1;a=this.getNationalSignificantNumber(a);return null!=this.chooseFormattingPatternForNumber_(b.numberFormatArray(),a)};\ni18n.phonenumbers.PhoneNumberUtil.prototype.formatOutOfCountryKeepingAlphaChars=function(a,b){var c=a.getRawInputOrDefault();if(0==c.length)return this.formatOutOfCountryCallingNumber(a,b);var d=a.getCountryCodeOrDefault();if(!this.hasValidCountryCallingCode_(d))return c;c=i18n.phonenumbers.PhoneNumberUtil.normalizeHelper_(c,i18n.phonenumbers.PhoneNumberUtil.ALL_PLUS_NUMBER_GROUPING_SYMBOLS_,!0);var e=this.getNationalSignificantNumber(a);if(3<e.length){var f=c.indexOf(e.substring(0,3));-1!=f&&(c=\nc.substring(f))}f=this.getMetadataForRegion(b);if(d==i18n.phonenumbers.PhoneNumberUtil.NANPA_COUNTRY_CODE_){if(this.isNANPACountry(b))return d+\" \"+c}else if(null!=f&&d==this.getCountryCodeForValidRegion_(b)){d=this.chooseFormattingPatternForNumber_(f.numberFormatArray(),e);if(null==d)return c;d=d.clone();d.setPattern(\"(\\\\d+)(.*)\");d.setFormat(\"$1$2\");return this.formatNsnUsingPattern_(c,d,i18n.phonenumbers.PhoneNumberFormat.NATIONAL)}b=\"\";null!=f&&(b=f.getInternationalPrefixOrDefault(),b=i18n.phonenumbers.PhoneNumberUtil.matchesEntirely(i18n.phonenumbers.PhoneNumberUtil.SINGLE_INTERNATIONAL_PREFIX_,\nb)?b:f.getPreferredInternationalPrefixOrDefault());f=this.getRegionCodeForCountryCode(d);f=this.getMetadataForRegionOrCallingCode_(d,f);a=this.maybeGetFormattedExtension_(a,f,i18n.phonenumbers.PhoneNumberFormat.INTERNATIONAL);return 0<b.length?b+\" \"+d+\" \"+c+a:this.prefixNumberWithCountryCallingCode_(d,i18n.phonenumbers.PhoneNumberFormat.INTERNATIONAL,c,a)};\ni18n.phonenumbers.PhoneNumberUtil.prototype.getNationalSignificantNumber=function(a){if(!a.hasNationalNumber())return\"\";var b=\"\"+a.getNationalNumber();return a.hasItalianLeadingZero()&&a.getItalianLeadingZero()&&0<a.getNumberOfLeadingZerosOrDefault()?Array(a.getNumberOfLeadingZerosOrDefault()+1).join(\"0\")+b:b};\ni18n.phonenumbers.PhoneNumberUtil.prototype.prefixNumberWithCountryCallingCode_=function(a,b,c,d){switch(b){case i18n.phonenumbers.PhoneNumberFormat.E164:return i18n.phonenumbers.PhoneNumberUtil.PLUS_SIGN+a+c+d;case i18n.phonenumbers.PhoneNumberFormat.INTERNATIONAL:return i18n.phonenumbers.PhoneNumberUtil.PLUS_SIGN+a+\" \"+c+d;case i18n.phonenumbers.PhoneNumberFormat.RFC3966:return i18n.phonenumbers.PhoneNumberUtil.RFC3966_PREFIX_+i18n.phonenumbers.PhoneNumberUtil.PLUS_SIGN+a+\"-\"+c+d;default:return c+\nd}};i18n.phonenumbers.PhoneNumberUtil.prototype.formatNsn_=function(a,b,c,d){b=0==b.intlNumberFormatArray().length||c==i18n.phonenumbers.PhoneNumberFormat.NATIONAL?b.numberFormatArray():b.intlNumberFormatArray();b=this.chooseFormattingPatternForNumber_(b,a);return null==b?a:this.formatNsnUsingPattern_(a,b,c,d)};\ni18n.phonenumbers.PhoneNumberUtil.prototype.chooseFormattingPatternForNumber_=function(a,b){for(var c,d=a.length,e=0;e<d;++e){c=a[e];var f=c.leadingDigitsPatternCount();if(0==f||0==b.search(c.getLeadingDigitsPattern(f-1)))if(f=new RegExp(c.getPattern()),i18n.phonenumbers.PhoneNumberUtil.matchesEntirely(f,b))return c}return null};\ni18n.phonenumbers.PhoneNumberUtil.prototype.formatNsnUsingPattern_=function(a,b,c,d){var e=b.getFormatOrDefault(),f=new RegExp(b.getPattern()),g=b.getDomesticCarrierCodeFormattingRuleOrDefault();c==i18n.phonenumbers.PhoneNumberFormat.NATIONAL&&null!=d&&0<d.length&&0<g.length?(b=g.replace(i18n.phonenumbers.PhoneNumberUtil.CC_PATTERN_,d),e=e.replace(i18n.phonenumbers.PhoneNumberUtil.FIRST_GROUP_PATTERN_,b),a=a.replace(f,e)):(b=b.getNationalPrefixFormattingRuleOrDefault(),a=c==i18n.phonenumbers.PhoneNumberFormat.NATIONAL&&\nnull!=b&&0<b.length?a.replace(f,e.replace(i18n.phonenumbers.PhoneNumberUtil.FIRST_GROUP_PATTERN_,b)):a.replace(f,e));c==i18n.phonenumbers.PhoneNumberFormat.RFC3966&&(a=a.replace(new RegExp(\"^\"+i18n.phonenumbers.PhoneNumberUtil.SEPARATOR_PATTERN_),\"\"),a=a.replace(new RegExp(i18n.phonenumbers.PhoneNumberUtil.SEPARATOR_PATTERN_,\"g\"),\"-\"));return a};i18n.phonenumbers.PhoneNumberUtil.prototype.getExampleNumber=function(a){return this.getExampleNumberForType(a,i18n.phonenumbers.PhoneNumberType.FIXED_LINE)};\ni18n.phonenumbers.PhoneNumberUtil.prototype.getExampleNumberForType=function(a,b){if(!this.isValidRegionCode_(a))return null;b=i18n.phonenumbers.PhoneNumberUtil.getNumberDescByType_(this.getMetadataForRegion(a),b);try{if(b.hasExampleNumber())return this.parse(b.getExampleNumber(),a)}catch(c){}return null};\ni18n.phonenumbers.PhoneNumberUtil.prototype.getExampleNumberForNonGeoEntity=function(a){var b=this.getMetadataForNonGeographicalRegion(a);if(null!=b&&(b=[b.getMobile(),b.getTollFree(),b.getSharedCost(),b.getVoip(),b.getVoicemail(),b.getUan(),b.getPremiumRate()].find(function(c,d){return c.hasExampleNumber()}),void 0!==b))try{return this.parse(\"+\"+a+b.getExampleNumber(),\"ZZ\")}catch(c){}return null};\ni18n.phonenumbers.PhoneNumberUtil.prototype.maybeGetFormattedExtension_=function(a,b,c){return a.hasExtension()&&0!=a.getExtension().length?c==i18n.phonenumbers.PhoneNumberFormat.RFC3966?i18n.phonenumbers.PhoneNumberUtil.RFC3966_EXTN_PREFIX_+a.getExtension():b.hasPreferredExtnPrefix()?b.getPreferredExtnPrefix()+a.getExtensionOrDefault():i18n.phonenumbers.PhoneNumberUtil.DEFAULT_EXTN_PREFIX_+a.getExtensionOrDefault():\"\"};\ni18n.phonenumbers.PhoneNumberUtil.getNumberDescByType_=function(a,b){switch(b){case i18n.phonenumbers.PhoneNumberType.PREMIUM_RATE:return a.getPremiumRate();case i18n.phonenumbers.PhoneNumberType.TOLL_FREE:return a.getTollFree();case i18n.phonenumbers.PhoneNumberType.MOBILE:return a.getMobile();case i18n.phonenumbers.PhoneNumberType.FIXED_LINE:case i18n.phonenumbers.PhoneNumberType.FIXED_LINE_OR_MOBILE:return a.getFixedLine();case i18n.phonenumbers.PhoneNumberType.SHARED_COST:return a.getSharedCost();\ncase i18n.phonenumbers.PhoneNumberType.VOIP:return a.getVoip();case i18n.phonenumbers.PhoneNumberType.PERSONAL_NUMBER:return a.getPersonalNumber();case i18n.phonenumbers.PhoneNumberType.PAGER:return a.getPager();case i18n.phonenumbers.PhoneNumberType.UAN:return a.getUan();case i18n.phonenumbers.PhoneNumberType.VOICEMAIL:return a.getVoicemail();default:return a.getGeneralDesc()}};\ni18n.phonenumbers.PhoneNumberUtil.prototype.getNumberType=function(a){var b=this.getRegionCodeForNumber(a);b=this.getMetadataForRegionOrCallingCode_(a.getCountryCodeOrDefault(),b);if(null==b)return i18n.phonenumbers.PhoneNumberType.UNKNOWN;a=this.getNationalSignificantNumber(a);return this.getNumberTypeHelper_(a,b)};\ni18n.phonenumbers.PhoneNumberUtil.prototype.getNumberTypeHelper_=function(a,b){return this.isNumberMatchingDesc_(a,b.getGeneralDesc())?this.isNumberMatchingDesc_(a,b.getPremiumRate())?i18n.phonenumbers.PhoneNumberType.PREMIUM_RATE:this.isNumberMatchingDesc_(a,b.getTollFree())?i18n.phonenumbers.PhoneNumberType.TOLL_FREE:this.isNumberMatchingDesc_(a,b.getSharedCost())?i18n.phonenumbers.PhoneNumberType.SHARED_COST:this.isNumberMatchingDesc_(a,b.getVoip())?i18n.phonenumbers.PhoneNumberType.VOIP:this.isNumberMatchingDesc_(a,\nb.getPersonalNumber())?i18n.phonenumbers.PhoneNumberType.PERSONAL_NUMBER:this.isNumberMatchingDesc_(a,b.getPager())?i18n.phonenumbers.PhoneNumberType.PAGER:this.isNumberMatchingDesc_(a,b.getUan())?i18n.phonenumbers.PhoneNumberType.UAN:this.isNumberMatchingDesc_(a,b.getVoicemail())?i18n.phonenumbers.PhoneNumberType.VOICEMAIL:this.isNumberMatchingDesc_(a,b.getFixedLine())?b.getSameMobileAndFixedLinePattern()||this.isNumberMatchingDesc_(a,b.getMobile())?i18n.phonenumbers.PhoneNumberType.FIXED_LINE_OR_MOBILE:\ni18n.phonenumbers.PhoneNumberType.FIXED_LINE:!b.getSameMobileAndFixedLinePattern()&&this.isNumberMatchingDesc_(a,b.getMobile())?i18n.phonenumbers.PhoneNumberType.MOBILE:i18n.phonenumbers.PhoneNumberType.UNKNOWN:i18n.phonenumbers.PhoneNumberType.UNKNOWN};\ni18n.phonenumbers.PhoneNumberUtil.prototype.getMetadataForRegion=function(a){if(null==a)return null;a=a.toUpperCase();var b=this.regionToMetadataMap[a];if(null==b){b=new goog.proto2.PbLiteSerializer;var c=i18n.phonenumbers.metadata.countryToMetadata[a];if(null==c)return null;b=b.deserialize(i18n.phonenumbers.PhoneMetadata.getDescriptor(),c);this.regionToMetadataMap[a]=b}return b};\ni18n.phonenumbers.PhoneNumberUtil.prototype.getMetadataForNonGeographicalRegion=function(a){return this.getMetadataForRegion(\"\"+a)};i18n.phonenumbers.PhoneNumberUtil.prototype.isNumberMatchingDesc_=function(a,b){var c=a.length;return 0<b.possibleLengthCount()&&-1==b.possibleLengthArray().indexOf(c)?!1:i18n.phonenumbers.PhoneNumberUtil.matchesEntirely(b.getNationalNumberPatternOrDefault(),a)};\ni18n.phonenumbers.PhoneNumberUtil.prototype.isValidNumber=function(a){var b=this.getRegionCodeForNumber(a);return this.isValidNumberForRegion(a,b)};\ni18n.phonenumbers.PhoneNumberUtil.prototype.isValidNumberForRegion=function(a,b){var c=a.getCountryCodeOrDefault(),d=this.getMetadataForRegionOrCallingCode_(c,b);if(null==d||i18n.phonenumbers.PhoneNumberUtil.REGION_CODE_FOR_NON_GEO_ENTITY!=b&&c!=this.getCountryCodeForValidRegion_(b))return!1;a=this.getNationalSignificantNumber(a);return this.getNumberTypeHelper_(a,d)!=i18n.phonenumbers.PhoneNumberType.UNKNOWN};\ni18n.phonenumbers.PhoneNumberUtil.prototype.getRegionCodeForNumber=function(a){if(null==a)return null;var b=a.getCountryCodeOrDefault();b=i18n.phonenumbers.metadata.countryCodeToRegionCodeMap[b];return null==b?null:1==b.length?b[0]:this.getRegionCodeForNumberFromRegionList_(a,b)};\ni18n.phonenumbers.PhoneNumberUtil.prototype.getRegionCodeForNumberFromRegionList_=function(a,b){a=this.getNationalSignificantNumber(a);for(var c,d=b.length,e=0;e<d;e++){c=b[e];var f=this.getMetadataForRegion(c);if(f.hasLeadingDigits()){if(0==a.search(f.getLeadingDigits()))return c}else if(this.getNumberTypeHelper_(a,f)!=i18n.phonenumbers.PhoneNumberType.UNKNOWN)return c}return null};\ni18n.phonenumbers.PhoneNumberUtil.prototype.getRegionCodeForCountryCode=function(a){a=i18n.phonenumbers.metadata.countryCodeToRegionCodeMap[a];return null==a?i18n.phonenumbers.PhoneNumberUtil.UNKNOWN_REGION_:a[0]};i18n.phonenumbers.PhoneNumberUtil.prototype.getRegionCodesForCountryCode=function(a){a=i18n.phonenumbers.metadata.countryCodeToRegionCodeMap[a];return null==a?[]:a};\ni18n.phonenumbers.PhoneNumberUtil.prototype.getCountryCodeForRegion=function(a){return this.isValidRegionCode_(a)?this.getCountryCodeForValidRegion_(a):0};i18n.phonenumbers.PhoneNumberUtil.prototype.getCountryCodeForValidRegion_=function(a){var b=this.getMetadataForRegion(a);if(null==b)throw Error(\"Invalid region code: \"+a);return b.getCountryCodeOrDefault()};\ni18n.phonenumbers.PhoneNumberUtil.prototype.getNddPrefixForRegion=function(a,b){a=this.getMetadataForRegion(a);if(null==a)return null;a=a.getNationalPrefixOrDefault();if(0==a.length)return null;b&&(a=a.replace(\"~\",\"\"));return a};i18n.phonenumbers.PhoneNumberUtil.prototype.isNANPACountry=function(a){return null!=a&&i18n.phonenumbers.metadata.countryCodeToRegionCodeMap[i18n.phonenumbers.PhoneNumberUtil.NANPA_COUNTRY_CODE_].includes(a.toUpperCase())};\ni18n.phonenumbers.PhoneNumberUtil.prototype.isAlphaNumber=function(a){if(!i18n.phonenumbers.PhoneNumberUtil.isViablePhoneNumber(a))return!1;a=new goog.string.StringBuffer(a);this.maybeStripExtension(a);return i18n.phonenumbers.PhoneNumberUtil.matchesEntirely(i18n.phonenumbers.PhoneNumberUtil.VALID_ALPHA_PHONE_PATTERN_,a.toString())};\ni18n.phonenumbers.PhoneNumberUtil.prototype.isPossibleNumber=function(a){a=this.isPossibleNumberWithReason(a);return a==i18n.phonenumbers.PhoneNumberUtil.ValidationResult.IS_POSSIBLE||a==i18n.phonenumbers.PhoneNumberUtil.ValidationResult.IS_POSSIBLE_LOCAL_ONLY};i18n.phonenumbers.PhoneNumberUtil.prototype.isPossibleNumberForType=function(a,b){a=this.isPossibleNumberForTypeWithReason(a,b);return a==i18n.phonenumbers.PhoneNumberUtil.ValidationResult.IS_POSSIBLE||a==i18n.phonenumbers.PhoneNumberUtil.ValidationResult.IS_POSSIBLE_LOCAL_ONLY};\ni18n.phonenumbers.PhoneNumberUtil.prototype.testNumberLength_=function(a,b){return this.testNumberLengthForType_(a,b,i18n.phonenumbers.PhoneNumberType.UNKNOWN)};\ni18n.phonenumbers.PhoneNumberUtil.prototype.testNumberLengthForType_=function(a,b,c){var d=i18n.phonenumbers.PhoneNumberUtil.getNumberDescByType_(b,c),e=0==d.possibleLengthCount()?b.getGeneralDesc().possibleLengthArray():d.possibleLengthArray();d=d.possibleLengthLocalOnlyArray();if(c==i18n.phonenumbers.PhoneNumberType.FIXED_LINE_OR_MOBILE)if(i18n.phonenumbers.PhoneNumberUtil.descHasPossibleNumberData_(i18n.phonenumbers.PhoneNumberUtil.getNumberDescByType_(b,i18n.phonenumbers.PhoneNumberType.FIXED_LINE)))c=\ni18n.phonenumbers.PhoneNumberUtil.getNumberDescByType_(b,i18n.phonenumbers.PhoneNumberType.MOBILE),i18n.phonenumbers.PhoneNumberUtil.descHasPossibleNumberData_(c)&&(e=e.concat(0==c.possibleLengthCount()?b.getGeneralDesc().possibleLengthArray():c.possibleLengthArray()),e.sort(),0==d.length?d=c.possibleLengthLocalOnlyArray():(d=d.concat(c.possibleLengthLocalOnlyArray()),d.sort()));else return this.testNumberLengthForType_(a,b,i18n.phonenumbers.PhoneNumberType.MOBILE);if(-1==e[0])return i18n.phonenumbers.PhoneNumberUtil.ValidationResult.INVALID_LENGTH;\na=a.length;if(-1<d.indexOf(a))return i18n.phonenumbers.PhoneNumberUtil.ValidationResult.IS_POSSIBLE_LOCAL_ONLY;b=e[0];return b==a?i18n.phonenumbers.PhoneNumberUtil.ValidationResult.IS_POSSIBLE:b>a?i18n.phonenumbers.PhoneNumberUtil.ValidationResult.TOO_SHORT:e[e.length-1]<a?i18n.phonenumbers.PhoneNumberUtil.ValidationResult.TOO_LONG:-1<e.indexOf(a,1)?i18n.phonenumbers.PhoneNumberUtil.ValidationResult.IS_POSSIBLE:i18n.phonenumbers.PhoneNumberUtil.ValidationResult.INVALID_LENGTH};\ni18n.phonenumbers.PhoneNumberUtil.prototype.isPossibleNumberWithReason=function(a){return this.isPossibleNumberForTypeWithReason(a,i18n.phonenumbers.PhoneNumberType.UNKNOWN)};\ni18n.phonenumbers.PhoneNumberUtil.prototype.isPossibleNumberForTypeWithReason=function(a,b){var c=this.getNationalSignificantNumber(a);a=a.getCountryCodeOrDefault();if(!this.hasValidCountryCallingCode_(a))return i18n.phonenumbers.PhoneNumberUtil.ValidationResult.INVALID_COUNTRY_CODE;var d=this.getRegionCodeForCountryCode(a);a=this.getMetadataForRegionOrCallingCode_(a,d);return this.testNumberLengthForType_(c,a,b)};\ni18n.phonenumbers.PhoneNumberUtil.prototype.isPossibleNumberString=function(a,b){try{return this.isPossibleNumber(this.parse(a,b))}catch(c){return!1}};\ni18n.phonenumbers.PhoneNumberUtil.prototype.truncateTooLongNumber=function(a){if(this.isValidNumber(a))return!0;var b=a.clone(),c=a.getNationalNumberOrDefault();do if(c=Math.floor(c/10),b.setNationalNumber(c),0==c||this.isPossibleNumberWithReason(b)==i18n.phonenumbers.PhoneNumberUtil.ValidationResult.TOO_SHORT)return!1;while(!this.isValidNumber(b));a.setNationalNumber(c);return!0};\ni18n.phonenumbers.PhoneNumberUtil.prototype.extractCountryCode=function(a,b){a=a.toString();if(0==a.length||\"0\"==a.charAt(0))return 0;for(var c,d=a.length,e=1;e<=i18n.phonenumbers.PhoneNumberUtil.MAX_LENGTH_COUNTRY_CODE_&&e<=d;++e)if(c=parseInt(a.substring(0,e),10),c in i18n.phonenumbers.metadata.countryCodeToRegionCodeMap)return b.append(a.substring(e)),c;return 0};\ni18n.phonenumbers.PhoneNumberUtil.prototype.maybeExtractCountryCode=function(a,b,c,d,e){if(0==a.length)return 0;a=new goog.string.StringBuffer(a);var f;null!=b&&(f=b.getInternationalPrefix());null==f&&(f=\"NonMatch\");f=this.maybeStripInternationalPrefixAndNormalize(a,f);d&&e.setCountryCodeSource(f);if(f!=i18n.phonenumbers.PhoneNumber.CountryCodeSource.FROM_DEFAULT_COUNTRY){if(a.getLength()<=i18n.phonenumbers.PhoneNumberUtil.MIN_LENGTH_FOR_NSN_)throw Error(i18n.phonenumbers.Error.TOO_SHORT_AFTER_IDD);\nb=this.extractCountryCode(a,c);if(0!=b)return e.setCountryCode(b),b;throw Error(i18n.phonenumbers.Error.INVALID_COUNTRY_CODE);}if(null!=b){f=b.getCountryCodeOrDefault();var g=\"\"+f,h=a.toString();if(goog.string.startsWith(h,g)&&(g=new goog.string.StringBuffer(h.substring(g.length)),h=b.getGeneralDesc(),h=new RegExp(h.getNationalNumberPatternOrDefault()),this.maybeStripNationalPrefixAndCarrierCode(g,b,null),g=g.toString(),!i18n.phonenumbers.PhoneNumberUtil.matchesEntirely(h,a.toString())&&i18n.phonenumbers.PhoneNumberUtil.matchesEntirely(h,\ng)||this.testNumberLength_(a.toString(),b)==i18n.phonenumbers.PhoneNumberUtil.ValidationResult.TOO_LONG))return c.append(g),d&&e.setCountryCodeSource(i18n.phonenumbers.PhoneNumber.CountryCodeSource.FROM_NUMBER_WITHOUT_PLUS_SIGN),e.setCountryCode(f),f}e.setCountryCode(0);return 0};\ni18n.phonenumbers.PhoneNumberUtil.prototype.parsePrefixAsIdd_=function(a,b){var c=b.toString();if(0==c.search(a)){a=c.match(a)[0].length;var d=c.substring(a).match(i18n.phonenumbers.PhoneNumberUtil.CAPTURING_DIGIT_PATTERN);if(d&&null!=d[1]&&0<d[1].length&&\"0\"==i18n.phonenumbers.PhoneNumberUtil.normalizeDigitsOnly(d[1]))return!1;b.clear();b.append(c.substring(a));return!0}return!1};\ni18n.phonenumbers.PhoneNumberUtil.prototype.maybeStripInternationalPrefixAndNormalize=function(a,b){var c=a.toString();if(0==c.length)return i18n.phonenumbers.PhoneNumber.CountryCodeSource.FROM_DEFAULT_COUNTRY;if(i18n.phonenumbers.PhoneNumberUtil.LEADING_PLUS_CHARS_PATTERN.test(c))return c=c.replace(i18n.phonenumbers.PhoneNumberUtil.LEADING_PLUS_CHARS_PATTERN,\"\"),a.clear(),a.append(i18n.phonenumbers.PhoneNumberUtil.normalize(c)),i18n.phonenumbers.PhoneNumber.CountryCodeSource.FROM_NUMBER_WITH_PLUS_SIGN;\nb=new RegExp(b);i18n.phonenumbers.PhoneNumberUtil.normalizeSB_(a);return this.parsePrefixAsIdd_(b,a)?i18n.phonenumbers.PhoneNumber.CountryCodeSource.FROM_NUMBER_WITH_IDD:i18n.phonenumbers.PhoneNumber.CountryCodeSource.FROM_DEFAULT_COUNTRY};\ni18n.phonenumbers.PhoneNumberUtil.prototype.maybeStripNationalPrefixAndCarrierCode=function(a,b,c){var d=a.toString(),e=d.length,f=b.getNationalPrefixForParsing();if(0==e||null==f||0==f.length)return!1;var g=new RegExp(\"^(?:\"+f+\")\");if(e=g.exec(d)){f=new RegExp(b.getGeneralDesc().getNationalNumberPatternOrDefault());var h=i18n.phonenumbers.PhoneNumberUtil.matchesEntirely(f,d),k=e.length-1;b=b.getNationalPrefixTransformRule();if(null==b||0==b.length||null==e[k]||0==e[k].length){if(h&&!i18n.phonenumbers.PhoneNumberUtil.matchesEntirely(f,\nd.substring(e[0].length)))return!1;null!=c&&0<k&&null!=e[k]&&c.append(e[1]);a.set(d.substring(e[0].length))}else{d=d.replace(g,b);if(h&&!i18n.phonenumbers.PhoneNumberUtil.matchesEntirely(f,d))return!1;null!=c&&0<k&&c.append(e[1]);a.set(d)}return!0}return!1};\ni18n.phonenumbers.PhoneNumberUtil.prototype.maybeStripExtension=function(a){var b=a.toString(),c=b.search(i18n.phonenumbers.PhoneNumberUtil.EXTN_PATTERN_);if(0<=c&&i18n.phonenumbers.PhoneNumberUtil.isViablePhoneNumber(b.substring(0,c)))for(var d=b.match(i18n.phonenumbers.PhoneNumberUtil.EXTN_PATTERN_),e=d.length,f=1;f<e;++f)if(null!=d[f]&&0<d[f].length)return a.clear(),a.append(b.substring(0,c)),d[f];return\"\"};\ni18n.phonenumbers.PhoneNumberUtil.prototype.checkRegionForParsing_=function(a,b){return this.isValidRegionCode_(b)||null!=a&&0<a.length&&i18n.phonenumbers.PhoneNumberUtil.LEADING_PLUS_CHARS_PATTERN.test(a)};i18n.phonenumbers.PhoneNumberUtil.prototype.parse=function(a,b){return this.parseHelper_(a,b,!1,!0)};\ni18n.phonenumbers.PhoneNumberUtil.prototype.parseAndKeepRawInput=function(a,b){if(!this.isValidRegionCode_(b)&&0<a.length&&a.charAt(0)!=i18n.phonenumbers.PhoneNumberUtil.PLUS_SIGN)throw Error(i18n.phonenumbers.Error.INVALID_COUNTRY_CODE);return this.parseHelper_(a,b,!0,!0)};i18n.phonenumbers.PhoneNumberUtil.setItalianLeadingZerosForPhoneNumber_=function(a,b){if(1<a.length&&\"0\"==a.charAt(0)){b.setItalianLeadingZero(!0);for(var c=1;c<a.length-1&&\"0\"==a.charAt(c);)c++;1!=c&&b.setNumberOfLeadingZeros(c)}};\ni18n.phonenumbers.PhoneNumberUtil.prototype.parseHelper_=function(a,b,c,d){if(null==a)throw Error(i18n.phonenumbers.Error.NOT_A_NUMBER);if(a.length>i18n.phonenumbers.PhoneNumberUtil.MAX_INPUT_STRING_LENGTH_)throw Error(i18n.phonenumbers.Error.TOO_LONG);var e=new goog.string.StringBuffer;this.buildNationalNumberForParsing_(a,e);if(!i18n.phonenumbers.PhoneNumberUtil.isViablePhoneNumber(e.toString()))throw Error(i18n.phonenumbers.Error.NOT_A_NUMBER);if(d&&!this.checkRegionForParsing_(e.toString(),b))throw Error(i18n.phonenumbers.Error.INVALID_COUNTRY_CODE);\nd=new i18n.phonenumbers.PhoneNumber;c&&d.setRawInput(a);a=this.maybeStripExtension(e);0<a.length&&d.setExtension(a);var f=this.getMetadataForRegion(b);a=new goog.string.StringBuffer;var g=0,h=e.toString();try{g=this.maybeExtractCountryCode(h,f,a,c,d)}catch(k){if(k.message==i18n.phonenumbers.Error.INVALID_COUNTRY_CODE&&i18n.phonenumbers.PhoneNumberUtil.LEADING_PLUS_CHARS_PATTERN.test(h)){if(h=h.replace(i18n.phonenumbers.PhoneNumberUtil.LEADING_PLUS_CHARS_PATTERN,\"\"),g=this.maybeExtractCountryCode(h,\nf,a,c,d),0==g)throw k;}else throw k;}0!=g?(e=this.getRegionCodeForCountryCode(g),e!=b&&(f=this.getMetadataForRegionOrCallingCode_(g,e))):(i18n.phonenumbers.PhoneNumberUtil.normalizeSB_(e),a.append(e.toString()),null!=b?(g=f.getCountryCodeOrDefault(),d.setCountryCode(g)):c&&d.clearCountryCodeSource());if(a.getLength()<i18n.phonenumbers.PhoneNumberUtil.MIN_LENGTH_FOR_NSN_)throw Error(i18n.phonenumbers.Error.TOO_SHORT_NSN);null!=f&&(b=new goog.string.StringBuffer,e=new goog.string.StringBuffer(a.toString()),\nthis.maybeStripNationalPrefixAndCarrierCode(e,f,b),f=this.testNumberLength_(e.toString(),f),g=i18n.phonenumbers.PhoneNumberUtil.ValidationResult,f!=g.TOO_SHORT&&f!=g.IS_POSSIBLE_LOCAL_ONLY&&f!=g.INVALID_LENGTH&&(a=e,c&&0<b.toString().length&&d.setPreferredDomesticCarrierCode(b.toString())));c=a.toString();a=c.length;if(a<i18n.phonenumbers.PhoneNumberUtil.MIN_LENGTH_FOR_NSN_)throw Error(i18n.phonenumbers.Error.TOO_SHORT_NSN);if(a>i18n.phonenumbers.PhoneNumberUtil.MAX_LENGTH_FOR_NSN_)throw Error(i18n.phonenumbers.Error.TOO_LONG);\ni18n.phonenumbers.PhoneNumberUtil.setItalianLeadingZerosForPhoneNumber_(c,d);d.setNationalNumber(parseInt(c,10));return d};i18n.phonenumbers.PhoneNumberUtil.prototype.extractPhoneContext_=function(a){var b=a.indexOf(i18n.phonenumbers.PhoneNumberUtil.RFC3966_PHONE_CONTEXT_);if(-1===b)return null;b+=i18n.phonenumbers.PhoneNumberUtil.RFC3966_PHONE_CONTEXT_.length;if(b>=a.length)return\"\";var c=a.indexOf(\";\",b);return-1!==c?a.substring(b,c):a.substring(b)};\ni18n.phonenumbers.PhoneNumberUtil.prototype.isPhoneContextValid_=function(a){if(null==a)return!0;if(0===a.length)return!1;var b=i18n.phonenumbers.PhoneNumberUtil.RFC3966_GLOBAL_NUMBER_DIGITS_PATTERN_.exec(a);a=i18n.phonenumbers.PhoneNumberUtil.RFC3966_DOMAINNAME_PATTERN_.exec(a);return null!==b||null!==a};\ni18n.phonenumbers.PhoneNumberUtil.prototype.buildNationalNumberForParsing_=function(a,b){var c=i18n.phonenumbers.PhoneNumberUtil.prototype.extractPhoneContext_(a);if(!i18n.phonenumbers.PhoneNumberUtil.prototype.isPhoneContextValid_(c))throw Error(i18n.phonenumbers.Error.NOT_A_NUMBER);if(null!=c){c.charAt(0)===i18n.phonenumbers.PhoneNumberUtil.PLUS_SIGN&&b.append(c);c=a.indexOf(i18n.phonenumbers.PhoneNumberUtil.RFC3966_PREFIX_);c=0<=c?c+i18n.phonenumbers.PhoneNumberUtil.RFC3966_PREFIX_.length:0;var d=\na.indexOf(i18n.phonenumbers.PhoneNumberUtil.RFC3966_PHONE_CONTEXT_);b.append(a.substring(c,d))}else b.append(i18n.phonenumbers.PhoneNumberUtil.extractPossibleNumber(null!=a?a:\"\"));a=b.toString();c=a.indexOf(i18n.phonenumbers.PhoneNumberUtil.RFC3966_ISDN_SUBADDRESS_);0<c&&(b.clear(),b.append(a.substring(0,c)))};\ni18n.phonenumbers.PhoneNumberUtil.copyCoreFieldsOnly_=function(a){var b=new i18n.phonenumbers.PhoneNumber;b.setCountryCode(a.getCountryCodeOrDefault());b.setNationalNumber(a.getNationalNumberOrDefault());0<a.getExtensionOrDefault().length&&b.setExtension(a.getExtensionOrDefault());a.getItalianLeadingZero()&&(b.setItalianLeadingZero(!0),b.setNumberOfLeadingZeros(a.getNumberOfLeadingZerosOrDefault()));return b};\ni18n.phonenumbers.PhoneNumberUtil.prototype.isNumberMatch=function(a,b){if(\"string\"==typeof a)try{var c=this.parse(a,i18n.phonenumbers.PhoneNumberUtil.UNKNOWN_REGION_)}catch(f){if(f.message!=i18n.phonenumbers.Error.INVALID_COUNTRY_CODE)return i18n.phonenumbers.PhoneNumberUtil.MatchType.NOT_A_NUMBER;if(\"string\"!=typeof b){var d=this.getRegionCodeForCountryCode(b.getCountryCodeOrDefault());if(d!=i18n.phonenumbers.PhoneNumberUtil.UNKNOWN_REGION_){try{c=this.parse(a,d)}catch(g){return i18n.phonenumbers.PhoneNumberUtil.MatchType.NOT_A_NUMBER}var e=\nthis.isNumberMatch(c,b);return e==i18n.phonenumbers.PhoneNumberUtil.MatchType.EXACT_MATCH?i18n.phonenumbers.PhoneNumberUtil.MatchType.NSN_MATCH:e}}try{c=this.parseHelper_(a,null,!1,!1)}catch(g){return i18n.phonenumbers.PhoneNumberUtil.MatchType.NOT_A_NUMBER}}else c=a.clone();if(\"string\"==typeof b)try{return e=this.parse(b,i18n.phonenumbers.PhoneNumberUtil.UNKNOWN_REGION_),this.isNumberMatch(a,e)}catch(f){return f.message!=i18n.phonenumbers.Error.INVALID_COUNTRY_CODE?i18n.phonenumbers.PhoneNumberUtil.MatchType.NOT_A_NUMBER:\nthis.isNumberMatch(b,c)}else e=b.clone();a=i18n.phonenumbers.PhoneNumberUtil.copyCoreFieldsOnly_(c);e=i18n.phonenumbers.PhoneNumberUtil.copyCoreFieldsOnly_(e);if(a.hasExtension()&&e.hasExtension()&&a.getExtension()!=e.getExtension())return i18n.phonenumbers.PhoneNumberUtil.MatchType.NO_MATCH;b=a.getCountryCodeOrDefault();c=e.getCountryCodeOrDefault();if(0!=b&&0!=c)return a.equals(e)?i18n.phonenumbers.PhoneNumberUtil.MatchType.EXACT_MATCH:b==c&&this.isNationalNumberSuffixOfTheOther_(a,e)?i18n.phonenumbers.PhoneNumberUtil.MatchType.SHORT_NSN_MATCH:\ni18n.phonenumbers.PhoneNumberUtil.MatchType.NO_MATCH;a.setCountryCode(0);e.setCountryCode(0);return a.equals(e)?i18n.phonenumbers.PhoneNumberUtil.MatchType.NSN_MATCH:this.isNationalNumberSuffixOfTheOther_(a,e)?i18n.phonenumbers.PhoneNumberUtil.MatchType.SHORT_NSN_MATCH:i18n.phonenumbers.PhoneNumberUtil.MatchType.NO_MATCH};\ni18n.phonenumbers.PhoneNumberUtil.prototype.isNationalNumberSuffixOfTheOther_=function(a,b){a=\"\"+a.getNationalNumber();b=\"\"+b.getNationalNumber();return goog.string.endsWith(a,b)||goog.string.endsWith(b,a)};i18n.phonenumbers.PhoneNumberUtil.prototype.canBeInternationallyDialled=function(a){var b=this.getMetadataForRegion(this.getRegionCodeForNumber(a));if(null==b)return!0;a=this.getNationalSignificantNumber(a);return!this.isNumberMatchingDesc_(a,b.getNoInternationalDialling())};\ni18n.phonenumbers.PhoneNumberUtil.matchesEntirely=function(a,b){return(a=\"string\"==typeof a?b.match(\"^(?:\"+a+\")$\"):b.match(a))&&a[0].length==b.length?!0:!1};i18n.phonenumbers.PhoneNumberUtil.matchesPrefix=function(a,b){return(a=\"string\"==typeof a?b.match(\"^(?:\"+a+\")\"):b.match(a))&&goog.string.startsWith(b,a[0])?!0:!1};i18n.phonenumbers.shortnumbermetadata={};i18n.phonenumbers.shortnumbermetadata.countryCodeToRegionCodeMap={0:\"AC AD AE AF AG AI AL AM AO AR AS AT AU AW AX AZ BA BB BD BE BF BG BH BI BJ BL BM BN BO BQ BR BS BT BW BY BZ CA CC CD CF CG CH CI CK CL CM CN CO CR CU CV CW CX CY CZ DE DJ DK DM DO DZ EC EE EG EH ER ES ET FI FJ FK FM FO FR GA GB GD GE GF GG GH GI GL GM GN GP GR GT GU GW GY HK HN HR HT HU ID IE IL IM IN IQ IR IS IT JE JM JO JP KE KG KH KI KM KN KP KR KW KY KZ LA LB LC LI LK LR LS LT LU LV LY MA MC MD ME MF MG MH MK ML MM MN MO MP MQ MR MS MT MU MV MW MX MY MZ NA NC NE NF NG NI NL NO NP NR NU NZ OM PA PE PF PG PH PK PL PM PR PS PT PW PY QA RE RO RS RU RW SA SB SC SD SE SG SH SI SJ SK SL SM SN SO SR SS ST SV SX SY SZ TC TD TG TH TJ TL TM TN TO TR TT TV TW TZ UA UG US UY UZ VA VC VE VG VI VN VU WF WS XK YE YT ZA ZM ZW\".split(\" \")};\ni18n.phonenumbers.shortnumbermetadata.countryToMetadata={AC:[,[,,\"9\\\\d\\\\d\",,,,,,,[3]],,,[,,\"9(?:11|99)\",,,,\"911\"],[,,,,,,,,,[-1]],,,,\"AC\",,,,,,,,,,,,,,,,,,[,,\"9(?:11|99)\",,,,\"911\"],,[,,\"9(?:11|99)\",,,,\"911\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,[,,,,,,,,,[-1]]],AD:[,[,,\"1\\\\d\\\\d\",,,,,,,[3]],,,[,,\"11[0268]\",,,,\"110\"],[,,,,,,,,,[-1]],,,,\"AD\",,,,,,,,,,,,,,,,,,[,,\"11[0268]\",,,,\"110\"],,[,,\"11[0268]\",,,,\"110\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,[,,,,,,,,,[-1]]],AE:[,[,,\"[149]\\\\d{2,3}\",,,,,,,[3,4]],,,[,,\"112|99[7-9]\",\n,,,\"112\",,,[3]],[,,,,,,,,,[-1]],,,,\"AE\",,,,,,,,,,,,,,,,,,[,,\"112|99[7-9]\",,,,\"112\",,,[3]],,[,,\"112|445[16]|99[7-9]\",,,,\"112\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,[,,\"445\\\\d\",,,,\"4450\",,,[4]]],AF:[,[,,\"[14]\\\\d\\\\d(?:\\\\d{2})?\",,,,,,,[3,5]],,,[,,\"1(?:0[02]|19)\",,,,\"100\",,,[3]],[,,,,,,,,,[-1]],,,,\"AF\",,,,,,,,,,,,,,,,,,[,,\"1(?:0[02]|19)\",,,,\"100\",,,[3]],,[,,\"1(?:0[02]|19)|40404\",,,,\"100\"],[,,,,,,,,,[-1]],[,,\"404\\\\d\\\\d\",,,,\"40400\",,,[5]],,[,,\"404\\\\d\\\\d\",,,,\"40400\",,,[5]]],AG:[,[,,\"[19]\\\\d\\\\d\",,,,,,,[3]],,,\n[,,\"9(?:11|88|99)\",,,,\"911\"],[,,,,,,,,,[-1]],,,,\"AG\",,,,,,,,,,,,,,,,,,[,,\"9(?:11|99)\",,,,\"911\"],,[,,\"176|9(?:11|88|99)\",,,,\"176\"],[,,,,,,,,,[-1]],[,,\"176\",,,,\"176\"],,[,,\"176\",,,,\"176\"]],AI:[,[,,\"[19]\\\\d\\\\d\",,,,,,,[3]],,,[,,\"9(?:11|88)\",,,,\"911\"],[,,,,,,,,,[-1]],,,,\"AI\",,,,,,,,,,,,,,,,,,[,,\"911\",,,,\"911\"],,[,,\"176|9(?:11|88)\",,,,\"176\"],[,,,,,,,,,[-1]],[,,\"176\",,,,\"176\"],,[,,\"176\",,,,\"176\"]],AL:[,[,,\"[15]\\\\d{2,5}\",,,,,,,[3,4,5,6]],,,[,,\"1(?:1(?:2|6[01]\\\\d\\\\d)|2[7-9]|3[15]|41)\",,,,\"112\",,,[3,6]],[,,\n\"5\\\\d{4}\",,,,\"50000\",,,[5]],,,,\"AL\",,,,,,,,,,,,,,,,,,[,,\"1(?:12|2[7-9])\",,,,\"112\",,,[3]],,[,,\"1(?:1(?:6(?:000|1(?:06|11|23))|8\\\\d\\\\d)|65\\\\d|89[12])|5\\\\d{4}|1(?:[1349]\\\\d|2[2-9])\",,,,\"110\"],[,,,,,,,,,[-1]],[,,\"123\",,,,\"123\",,,[3]],,[,,\"131|5\\\\d{4}\",,,,\"131\",,,[3,5]]],AM:[,[,,\"[148]\\\\d{2,4}\",,,,,,,[3,4,5]],,,[,,\"10[1-3]\",,,,\"101\",,,[3]],[,,,,,,,,,[-1]],,,,\"AM\",,,,,,,,,,,,,,,,,,[,,\"10[1-3]\",,,,\"101\",,,[3]],,[,,\"(?:1|8[1-7])\\\\d\\\\d|40404\",,,,\"100\"],[,,,,,,,,,[-1]],[,,\"404\\\\d\\\\d\",,,,\"40400\",,,[5]],,[,,\n\"404\\\\d\\\\d\",,,,\"40400\",,,[5]]],AO:[,[,,\"1\\\\d\\\\d\",,,,,,,[3]],,,[,,\"11[235]\",,,,\"112\"],[,,,,,,,,,[-1]],,,,\"AO\",,,,,,,,,,,,,,,,,,[,,\"11[235]\",,,,\"112\"],,[,,\"11[235]\",,,,\"112\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,[,,,,,,,,,[-1]]],AR:[,[,,\"[01389]\\\\d{1,4}\",,,,,,,[2,3,4,5]],,,[,,\"000|1(?:0[0-35-7]|1[0245]|2[015]|3[47]|4[478]|9)|911\",,,,\"19\",,,[2,3]],[,,,,,,,,,[-1]],,,,\"AR\",,,,,,,,,,,,,,,,,,[,,\"10[017]|911\",,,,\"100\",,,[3]],,[,,\"000|1(?:0[0-35-7]|1[02-5]|2[015]|3[47]|4[478]|9)|3372|89338|911\",,,,\"19\"],[,,,,\n,,,,,[-1]],[,,\"893\\\\d\\\\d\",,,,\"89300\",,,[5]],,[,,\"(?:337|893\\\\d)\\\\d\",,,,\"3370\",,,[4,5]]],AS:[,[,,\"[49]\\\\d\\\\d(?:\\\\d{2})?\",,,,,,,[3,5]],,,[,,\"9(?:11|88)\",,,,\"911\",,,[3]],[,,,,,,,,,[-1]],,,,\"AS\",,,,,,,,,,,,,,,,,,[,,\"911\",,,,\"911\",,,[3]],,[,,\"40404|9(?:11|88)\",,,,\"911\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,[,,\"404\\\\d\\\\d\",,,,\"40400\",,,[5]]],AT:[,[,,\"[1268]\\\\d\\\\d(?:\\\\d(?:\\\\d{2})?)?\",,,,,,,[3,4,6]],,,[,,\"1(?:12|2[0238]|3[03]|4[0-247])|1(?:16\\\\d\\\\d|4[58])\\\\d\",,,,\"112\"],[,,,,,,,,,[-1]],,,,\"AT\",,,,,,,,,,,,,,,,,\n,[,,\"1(?:[12]2|33|44)\",,,,\"112\",,,[3]],,[,,\"1(?:1(?:2|6(?:00[06]|1(?:17|23)))|2[0238]|3[03]|4(?:[0-247]|5[05]|84))|(?:220|61|8108[1-3])0\",,,,\"112\"],[,,,,,,,,,[-1]],[,,\"(?:220|810\\\\d\\\\d)\\\\d|610\",,,,\"610\"],,[,,,,,,,,,[-1]]],AU:[,[,,\"[0-27]\\\\d{2,7}\",,,,,,,[3,4,5,6,7,8]],,,[,,\"000|1(?:06|12|258885|55\\\\d)|733\",,,,\"000\",,,[3,4,7]],[,,\"1(?:2(?:34|456)|9\\\\d{4,6})\",,,,\"1234\",,,[4,5,6,7,8]],,,,\"AU\",,,,,,,,,,,,,,,,,,[,,\"000|1(?:06|12)\",,,,\"000\",,,[3]],,[,,\"000|1(?:06|1(?:00|2|9[46])|2(?:014[1-3]|[23]\\\\d|(?:4|5\\\\d)\\\\d{2,3}|68[689]|72(?:20|3\\\\d\\\\d)|8(?:[013-9]\\\\d|2))|555|9\\\\d{4,6})|225|7(?:33|67)\",\n,,,\"000\"],[,,\"1(?:1[09]\\\\d|24733)|225|767\",,,,\"225\",,,[3,4,6]],[,,\"1(?:258885|55\\\\d)\",,,,\"1550\",,,[4,7]],,[,,\"19\\\\d{4,6}\",,,,\"190000\",,,[6,7,8]]],AW:[,[,,\"[19]\\\\d\\\\d\",,,,,,,[3]],,,[,,\"100|911\",,,,\"100\"],[,,,,,,,,,[-1]],,,,\"AW\",,,,,,,,,,,,,,,,,,[,,\"100|911\",,,,\"100\"],,[,,\"1(?:00|18|76)|91[13]\",,,,\"100\"],[,,,,,,,,,[-1]],[,,\"176\",,,,\"176\"],,[,,\"176\",,,,\"176\"]],AX:[,[,,\"[17]\\\\d\\\\d(?:\\\\d{2})?\",,,,,,,[3,5]],,,[,,\"112\",,,,\"112\",,,[3]],[,,,,,,,,,[-1]],,,,\"AX\",,,,,,,,,,,,,,,,,,[,,\"112\",,,,\"112\",,,[3]],,[,\n,\"112|75[12]\\\\d\\\\d\",,,,\"112\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,[,,,,,,,,,[-1]]],AZ:[,[,,\"[148]\\\\d{2,3}\",,,,,,,[3,4]],,,[,,\"1(?:0[1-3]|12)\",,,,\"101\",,,[3]],[,,,,,,,,,[-1]],,,,\"AZ\",,,,,,,,,,,,,,,,,,[,,\"1(?:0[1-3]|12)\",,,,\"101\",,,[3]],,[,,\"1(?:0[1-3]|12)|(?:404|880)0\",,,,\"101\"],[,,,,,,,,,[-1]],[,,\"(?:404|880)\\\\d\",,,,\"4040\",,,[4]],,[,,\"(?:404|880)\\\\d\",,,,\"4040\",,,[4]]],BA:[,[,,\"1\\\\d{2,5}\",,,,,,,[3,4,5,6]],,,[,,\"1(?:16\\\\d{3}|2[2-4])\",,,,\"122\",,,[3,6]],[,,,,,,,,,[-1]],,,,\"BA\",,,,,,,,,,,,,,,,,,[,,\"12[2-4]\",\n,,,\"122\",,,[3]],,[,,\"1(?:16(?:00[06]|1(?:1[17]|23))|2(?:0[0-7]|[2-5]|6[0-26])|(?:[3-5]|7\\\\d)\\\\d\\\\d)|1(?:18|2[78])\\\\d\\\\d?\",,,,\"122\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,[,,,,,,,,,[-1]]],BB:[,[,,\"[2-689]\\\\d\\\\d\",,,,,,,[3]],,,[,,\"988|[2359]11\",,,,\"211\"],[,,,,,,,,,[-1]],,,,\"BB\",,,,,,,,,,,,,,,,,,[,,\"[2359]11\",,,,\"211\"],,[,,\"988|[2-689]11\",,,,\"211\"],[,,,,,,,,,[-1]],[,,\"[468]11\",,,,\"411\"],,[,,,,,,,,,[-1]]],BD:[,[,,\"[1579]\\\\d{2,4}\",,,,,,,[3,4,5]],,,[,,\"10[0-26]|[19]99\",,,,\"100\",,,[3]],[,,,,,,,,,[-1]],,,,\"BD\",\n,,,,,,,,,,,,,,,,,[,,\"10[0-2]|[19]99\",,,,\"100\",,,[3]],,[,,\"1(?:0(?:[0-369]|5[1-4]|7[0-4]|8[0-29])|1[16-9]|2(?:[134]|2[0-5])|3(?:1\\\\d?|6[3-6])|5[2-9])|5012|786|9594|[19]99|1(?:0(?:50|6\\\\d)|33|4(?:0|1\\\\d))\\\\d\",,,,\"100\"],[,,,,,,,,,[-1]],[,,\"1(?:11|2[13])|(?:501|959)\\\\d|786\",,,,\"111\",,,[3,4]],,[,,\"959\\\\d\",,,,\"9590\",,,[4]]],BE:[,[,,\"[1-9]\\\\d\\\\d(?:\\\\d(?:\\\\d{2})?)?\",,,,,,,[3,4,6]],,,[,,\"1(?:0[0-35-8]|1[0269]|7(?:12|77)|813)|(?:116|8)\\\\d{3}\",,,,\"100\"],[,,\"1(?:2[03]|40)4|(?:1(?:[24]1|3[01])|[2-79]\\\\d\\\\d)\\\\d\",\n,,,\"1204\",,,[4]],,,,\"BE\",,,,,,,,,,,,,,,,,,[,,\"1(?:0[01]|12)\",,,,\"100\",,,[3]],,[,,\"1(?:0[0-8]|16117|2(?:12|3[0-24])|313|414|5(?:1[05]|5[15]|66|95)|6(?:1[167]|36|6[16])|7(?:[07][017]|1[27-9]|22|33|65)|81[39])|[2-9]\\\\d{3}|11[02679]|1(?:1600|45)0|1(?:[2-4]9|78)9|1[2-4]0[47]\",,,,\"100\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,[,,\"[2-9]\\\\d{3}\",,,,\"2000\",,,[4]]],BF:[,[,,\"1\\\\d\",,,,,,,[2]],,,[,,\"1[78]\",,,,\"17\"],[,,,,,,,,,[-1]],,,,\"BF\",,,,,,,,,,,,,,,,,,[,,\"1[78]\",,,,\"17\"],,[,,\"1[78]\",,,,\"17\"],[,,,,,,,,,[-1]],[,,,,\n,,,,,[-1]],,[,,,,,,,,,[-1]]],BG:[,[,,\"1\\\\d\\\\d(?:\\\\d{3})?\",,,,,,,[3,6]],,,[,,\"1(?:1(?:2|6\\\\d{3})|50|6[06])\",,,,\"112\"],[,,,,,,,,,[-1]],,,,\"BG\",,,,,,,,,,,,,,,,,,[,,\"1(?:12|50|6[06])\",,,,\"112\",,,[3]],,[,,\"1(?:1(?:2|6(?:000|111))|50|6[06])\",,,,\"112\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,[,,,,,,,,,[-1]]],BH:[,[,,\"[0189]\\\\d\\\\d(?:\\\\d{2})?\",,,,,,,[3,5]],,,[,,\"(?:0[167]|81)\\\\d{3}|[19]99\",,,,\"199\"],[,,\"9[148]\\\\d{3}\",,,,\"91000\",,,[5]],,,,\"BH\",,,,,,,,,,,,,,,,,,[,,\"[19]99\",,,,\"199\",,,[3]],,[,,\"1(?:[02]\\\\d|12|4[01]|51|8[18]|9[169])|99[02489]|(?:0[167]|8[158]|9[148])\\\\d{3}\",\n,,,\"100\"],[,,,,,,,,,[-1]],[,,\"0[67]\\\\d{3}|88000|98555\",,,,\"06000\",,,[5]],,[,,\"88000|98555\",,,,\"88000\",,,[5]]],BI:[,[,,\"[16-9]\\\\d{2,3}\",,,,,,,[3,4]],,,[,,\"11[237]|611\",,,,\"112\",,,[3]],[,,,,,,,,,[-1]],,,,\"BI\",,,,,,,,,,,,,,,,,,[,,\"11[237]\",,,,\"112\",,,[3]],,[,,\"1(?:1\\\\d|5[2-9]|6[0-256])|611|7(?:10|77|979)|8[28]8|900\",,,,\"110\"],[,,,,,,,,,[-1]],[,,\"611|7(?:10|77)|888|900\",,,,\"611\",,,[3]],,[,,\"(?:71|90)0\",,,,\"710\",,,[3]]],BJ:[,[,,\"[17]\\\\d{2,3}\",,,,,,,[3,4]],,,[,,\"1(?:1[246-8]|3[68]|6[06])|7[3-5]\\\\d\\\\d\",\n,,,\"112\"],[,,,,,,,,,[-1]],,,,\"BJ\",,,,,,,,,,,,,,,,,,[,,\"11[246-8]\",,,,\"112\",,,[3]],,[,,\"1(?:05|1[24-8]|2[02-5]|3[126-8]|5[05]|6[06]|89)|7[0-5]\\\\d\\\\d\",,,,\"105\"],[,,,,,,,,,[-1]],[,,\"12[02-5]\",,,,\"120\",,,[3]],,[,,,,,,,,,[-1]]],BL:[,[,,\"1\\\\d\",,,,,,,[2]],,,[,,\"18\",,,,\"18\"],[,,,,,,,,,[-1]],,,,\"BL\",,,,,,,,,,,,,,,,,,[,,\"18\",,,,\"18\"],,[,,\"18\",,,,\"18\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,[,,,,,,,,,[-1]]],BM:[,[,,\"[19]\\\\d\\\\d\",,,,,,,[3]],,,[,,\"9(?:11|88)\",,,,\"911\"],[,,,,,,,,,[-1]],,,,\"BM\",,,,,,,,,,,,,,,,,,[,,\"911\",\n,,,\"911\"],,[,,\"176|9(?:11|88)\",,,,\"176\"],[,,,,,,,,,[-1]],[,,\"176\",,,,\"176\"],,[,,\"176\",,,,\"176\"]],BN:[,[,,\"9\\\\d\\\\d\",,,,,,,[3]],,,[,,\"99[135]\",,,,\"991\"],[,,,,,,,,,[-1]],,,,\"BN\",,,,,,,,,,,,,,,,,,[,,\"99[135]\",,,,\"991\"],,[,,\"99[135]\",,,,\"991\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,[,,,,,,,,,[-1]]],BO:[,[,,\"[14]\\\\d\\\\d(?:\\\\d{2})?\",,,,,,,[3,5]],,,[,,\"11[089]\",,,,\"110\",,,[3]],[,,,,,,,,,[-1]],,,,\"BO\",,,,,,,,,,,,,,,,,,[,,\"11[089]\",,,,\"110\",,,[3]],,[,,\"11[089]|40404\",,,,\"110\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,[,,\n\"404\\\\d\\\\d\",,,,\"40400\",,,[5]]],BQ:[,[,,\"[19]\\\\d\\\\d\",,,,,,,[3]],,,[,,\"112|911\",,,,\"112\"],[,,,,,,,,,[-1]],,,,\"BQ\",,,,,,,,,,,,,,,,,,[,,\"112|911\",,,,\"112\"],,[,,\"1(?:12|76)|911\",,,,\"112\"],[,,,,,,,,,[-1]],[,,\"176\",,,,\"176\"],,[,,\"176\",,,,\"176\"]],BR:[,[,,\"[1-69]\\\\d{2,5}\",,,,,,,[3,4,5,6]],,,[,,\"1(?:00|12|28|8[015]|9[0-47-9])|4(?:57|82\\\\d)|911\",,,,\"100\",,,[3,4]],[,,,,,,,,,[-1]],,,,\"BR\",,,,,,,,,,,,,,,,,,[,,\"1(?:12|28|9[023])|911\",,,,\"112\",,,[3]],,[,,\"1(?:0(?:[02]|3(?:1[2-579]|2[13-9]|3[124-9]|4[1-3578]|5[1-468]|6[139]|8[149]|9[168])|5[0-35-9]|6(?:0|1[0-35-8]?|2[0145]|3[0137]?|4[37-9]?|5[0-35]|6[016]?|7[137]?|8[5-8]|9[1359]))|1[25-8]|2[357-9]|3[024-68]|4[12568]|5\\\\d|6[0-8]|8[015]|9[0-47-9])|2(?:7(?:330|878)|85959?)|(?:32|91)1|4(?:0404?|57|828)|55555|6(?:0\\\\d{4}|10000)|(?:133|411)[12]\",\n,,,\"100\"],[,,\"102|273\\\\d\\\\d|321\",,,,\"102\",,,[3,5]],[,,\"151|(?:278|555)\\\\d\\\\d|4(?:04\\\\d\\\\d?|11\\\\d|57)\",,,,\"151\",,,[3,4,5]],,[,,\"285\\\\d{2,3}|321|40404|(?:27[38]\\\\d|482)\\\\d|6(?:0\\\\d|10)\\\\d{3}\",,,,\"321\"]],BS:[,[,,\"9\\\\d\\\\d\",,,,,,,[3]],,,[,,\"9(?:1[19]|88)\",,,,\"911\"],[,,,,,,,,,[-1]],,,,\"BS\",,,,,,,,,,,,,,,,,,[,,\"91[19]\",,,,\"911\"],,[,,\"9(?:1[19]|88)\",,,,\"911\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,[,,,,,,,,,[-1]]],BT:[,[,,\"[14]\\\\d\\\\d(?:\\\\d{2})?\",,,,,,,[3,5]],,,[,,\"11[023]\",,,,\"110\",,,[3]],[,,,,,,,,,[-1]],,,,\"BT\",\n,,,,,,,,,,,,,,,,,[,,\"11[023]\",,,,\"110\",,,[3]],,[,,\"11[0-6]|40404\",,,,\"110\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,[,,\"404\\\\d\\\\d\",,,,\"40400\",,,[5]]],BW:[,[,,\"[19]\\\\d\\\\d(?:\\\\d{2})?\",,,,,,,[3,5]],,,[,,\"9(?:11|9[7-9])\",,,,\"911\",,,[3]],[,,,,,,,,,[-1]],,,,\"BW\",,,,,,,,,,,,,,,,,,[,,\"9(?:11|9[7-9])\",,,,\"911\",,,[3]],,[,,\"1(?:1[26]|3123)|9(?:1[14]|9[1-57-9])\",,,,\"112\"],[,,,,,,,,,[-1]],[,,\"131\\\\d\\\\d\",,,,\"13100\",,,[5]],,[,,\"131\\\\d\\\\d\",,,,\"13100\",,,[5]]],BY:[,[,,\"1\\\\d\\\\d\",,,,,,,[3]],,,[,,\"1(?:0[1-3]|12)\",,,,\"101\"],\n[,,,,,,,,,[-1]],,,,\"BY\",,,,,,,,,,,,,,,,,,[,,\"1(?:0[1-3]|12)\",,,,\"101\"],,[,,\"1(?:0[1-79]|1[246]|35|5[1-35]|6[89]|7[5-7]|8[58]|9[1-7])\",,,,\"101\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,[,,,,,,,,,[-1]]],BZ:[,[,,\"9\\\\d\\\\d?\",,,,,,,[2,3]],,,[,,\"9(?:0|11|22|66|77|9[09])\",,,,\"90\"],[,,,,,,,,,[-1]],,,,\"BZ\",,,,,,,,,,,,,,,,,,[,,\"9(?:0|11|90)\",,,,\"90\"],,[,,\"9(?:0|11|22|66|77|9[09])\",,,,\"90\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,[,,,,,,,,,[-1]]],CA:[,[,,\"[1-9]\\\\d\\\\d(?:\\\\d{2,3})?\",,,,,,,[3,5,6]],,,[,,\"112|988|[29]11\",,,,\"112\",\n,,[3]],[,,,,,,,,,[-1]],,,,\"CA\",,,,,,,,,,,,,,,,,,[,,\"112|911\",,,,\"112\",,,[3]],,[,,\"[1-35-9]\\\\d{4,5}|112|[2-8]11|9(?:11|88)\",,,,\"112\"],[,,,,,,,,,[-1]],[,,\"[235-7]11\",,,,\"211\",,,[3]],,[,,\"[1-35-9]\\\\d{4,5}\",,,,\"10000\",,,[5,6]]],CC:[,[,,\"[01]\\\\d\\\\d\",,,,,,,[3]],,,[,,\"000|112\",,,,\"000\"],[,,,,,,,,,[-1]],,,,\"CC\",,,,,,,,,,,,,,,,,,[,,\"000|112\",,,,\"000\"],,[,,\"000|112\",,,,\"000\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,[,,,,,,,,,[-1]]],CD:[,[,,\"[14]\\\\d\\\\d(?:\\\\d{2})?\",,,,,,,[3,5]],,,[,,\"1(?:1[348]|77|88)\",,,,\"113\",,,[3]],\n[,,,,,,,,,[-1]],,,,\"CD\",,,,,,,,,,,,,,,,,,[,,\"1(?:1[348]|77|88)\",,,,\"113\",,,[3]],,[,,\"1(?:1[348]|23|77|88)|40404\",,,,\"113\"],[,,,,,,,,,[-1]],[,,\"404\\\\d\\\\d\",,,,\"40400\",,,[5]],,[,,\"404\\\\d\\\\d\",,,,\"40400\",,,[5]]],CF:[,[,,\"1\\\\d{2,3}\",,,,,,,[3,4]],,,[,,\"1(?:1[78]|22\\\\d)\",,,,\"117\"],[,,,,,,,,,[-1]],,,,\"CF\",,,,,,,,,,,,,,,,,,[,,\"1(?:1[78]|220)\",,,,\"117\"],,[,,\"1(?:1[478]|220)\",,,,\"114\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,[,,,,,,,,,[-1]]],CG:[,[,,\"1\\\\d\\\\d\",,,,,,,[3]],,,[,,\"11[178]\",,,,\"111\"],[,,,,,,,,,[-1]],,,,\"CG\",\n,,,,,,,,,,,,,,,,,[,,\"11[78]\",,,,\"117\"],,[,,\"11[126-8]\",,,,\"111\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,[,,,,,,,,,[-1]]],CH:[,[,,\"[1-9]\\\\d{2,5}\",,,,,,,[3,4,5,6]],,,[,,\"1(?:1(?:[278]|6\\\\d{3})|4[47])|5200\",,,,\"112\",,,[3,4,6]],[,,\"1(?:14|8[0-2589])\\\\d|543|83111\",,,,\"543\",,,[3,4,5]],,,,\"CH\",,,,,,,,,,,,,,,,,,[,,\"1(?:1[278]|44)\",,,,\"112\",,,[3]],,[,,\"1(?:0[78]\\\\d\\\\d|1(?:[278]|45|6(?:000|111))|4(?:[03-57]|1[0145])|6(?:00|[1-46])|8(?:02|1[189]|[25]0|7|8[08]|99))|[2-9]\\\\d{2,4}\",,,,\"112\"],[,,\"1(?:4[035]|6[1-46])|1(?:41|60)\\\\d\",\n,,,\"140\",,,[3,4]],[,,\"5(?:200|35)\",,,,\"535\",,,[3,4]],,[,,\"[2-9]\\\\d{2,4}\",,,,\"200\",,,[3,4,5]]],CI:[,[,,\"[14]\\\\d{2,3}\",,,,,,,[3,4]],,,[,,\"1(?:1[01]|[78]0)\",,,,\"110\",,,[3]],[,,,,,,,,,[-1]],,,,\"CI\",,,,,,,,,,,,,,,,,,[,,\"1(?:1[01]|[78]0)\",,,,\"110\",,,[3]],,[,,\"1(?:1[01]|[78]0)|4443\",,,,\"110\"],[,,,,,,,,,[-1]],[,,\"444\\\\d\",,,,\"4440\",,,[4]],,[,,\"444\\\\d\",,,,\"4440\",,,[4]]],CK:[,[,,\"9\\\\d\\\\d\",,,,,,,[3]],,,[,,\"99[689]\",,,,\"996\"],[,,,,,,,,,[-1]],,,,\"CK\",,,,,,,,,,,,,,,,,,[,,\"99[689]\",,,,\"996\"],,[,,\"99[689]\",,,,\"996\"],\n[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,[,,,,,,,,,[-1]]],CL:[,[,,\"[1-9]\\\\d{2,4}\",,,,,,,[3,4,5]],,,[,,\"1(?:213|3[1-3])|434\\\\d|911\",,,,\"131\",,,[3,4]],[,,\"1(?:211|3(?:13|[348]0|5[01]))|(?:1(?:[05]6|[48]1|9[18])|2(?:01\\\\d|[23]2|77|88)|3(?:0[59]|13|3[279]|66)|4(?:[12]4|36\\\\d|4[017]|55)|5(?:00|41\\\\d|5[67]|99)|6(?:07\\\\d|13|22|3[06]|50|69)|787|8(?:[01]1|[48]8)|9(?:01|[12]0|33))\\\\d\",,,,\"1060\",,,[4,5]],,,,\"CL\",,,,,,,,,,,,,,,,,,[,,\"13[1-3]|911\",,,,\"131\",,,[3]],,[,,\"1(?:00|21[13]|3(?:13|[348]0|5[01])|4(?:0[02-6]|17|[379])|818|919)|2(?:0(?:01|122)|22[47]|323|777|882)|3(?:0(?:51|99)|132|3(?:29|[37]7)|665)|43656|5(?:(?:00|415)4|5(?:66|77)|995)|6(?:131|222|366|699)|7878|8(?:011|11[28]|482|889)|9(?:01|1)1|13\\\\d|4(?:[13]42|243|4(?:02|15|77)|554)|(?:1(?:[05]6|98)|339|6(?:07|[35])0|9(?:[12]0|33))0\",\n,,,\"100\"],[,,\"(?:200|333)\\\\d\",,,,\"2000\",,,[4]],[,,,,,,,,,[-1]],,[,,\"13(?:13|[348]0|5[01])|(?:1(?:[05]6|[28]1|4[01]|9[18])|2(?:0(?:0|1\\\\d)|[23]2|77|88)|3(?:0[59]|13|3[2379]|66)|436\\\\d|5(?:00|41\\\\d|5[67]|99)|6(?:07\\\\d|13|22|3[06]|50|69)|787|8(?:[01]1|[48]8)|9(?:01|[12]0|33))\\\\d|4(?:[1-3]4|4[017]|55)\\\\d\",,,,\"1060\",,,[4,5]]],CM:[,[,,\"[18]\\\\d{1,3}\",,,,,,,[2,3,4]],,,[,,\"1(?:1[37]|[37])\",,,,\"13\",,,[2,3]],[,,,,,,,,,[-1]],,,,\"CM\",,,,,,,,,,,,,,,,,,[,,\"1(?:1[37]|[37])\",,,,\"13\",,,[2,3]],,[,,\"1(?:1[37]|[37])|8711\",\n,,,\"13\"],[,,,,,,,,,[-1]],[,,\"871\\\\d\",,,,\"8710\",,,[4]],,[,,\"871\\\\d\",,,,\"8710\",,,[4]]],CN:[,[,,\"[19]\\\\d{2,5}\",,,,,,,[3,4,5,6]],,,[,,\"1(?:1[09]|2(?:[02]|1\\\\d\\\\d|395))\",,,,\"110\",,,[3,5]],[,,,,,,,,,[-1]],,,,\"CN\",,,,,,,,,,,,,,,,,,[,,\"1(?:1[09]|20)\",,,,\"110\",,,[3]],,[,,\"1(?:00|1[0249]|2395|6[08])|9[56]\\\\d{3,4}|12[023]|1(?:0(?:[0-26]\\\\d|8)|21\\\\d)\\\\d\",,,,\"100\"],[,,\"1(?:0(?:[0-26]\\\\d|8)\\\\d|1[24]|23|6[08])|9[56]\\\\d{3,4}|100\",,,,\"100\"],[,,,,,,,,,[-1]],,[,,\"12110\",,,,\"12110\",,,[5]]],CO:[,[,,\"[1-589]\\\\d\\\\d(?:\\\\d{2,3})?\",\n,,,,,,[3,5,6]],,,[,,\"1(?:1[29]|23|32|56)\",,,,\"112\",,,[3]],[,,,,,,,,,[-1]],,,,\"CO\",,,,,,,,,,,,,,,,,,[,,\"1(?:1[29]|23|32|56)\",,,,\"112\",,,[3]],,[,,\"1(?:06|1[2-9]|2[35-7]|3[27]|4[467]|5[36]|6[4-7]|95)|(?:29002|39003)9|40404|5930\\\\d\\\\d|85432|(?:[2359][57]|8(?:7|9\\\\d))\\\\d{3}\",,,,\"106\"],[,,,,,,,,,[-1]],[,,\"(?:40|85)4\\\\d\\\\d\",,,,\"40400\",,,[5]],,[,,\"(?:40|85)4\\\\d\\\\d\",,,,\"40400\",,,[5]]],CR:[,[,,\"[1359]\\\\d{2,3}\",,,,,,,[3,4]],,,[,,\"112|911\",,,,\"112\",,,[3]],[,,,,,,,,,[-1]],,,,\"CR\",,,,,,,,,,,,,,,,,,[,,\"112|911\",\n,,,\"112\",,,[3]],,[,,\"1(?:0(?:00|15|2[2-4679])|1(?:1[0-35-9]|2|37|[46]6|7[57]|8[79]|9[0-379])|2(?:00|[12]2|34|55)|3(?:21|33)|4(?:0[06]|1[4-6])|5(?:15|5[15])|693|7(?:00|1[7-9]|2[02]|[67]7)|975)|3855|5(?:0(?:30|49)|510)|911\",,,,\"112\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,[,,\"(?:385|5(?:0[34]|51))\\\\d\",,,,\"3850\",,,[4]]],CU:[,[,,\"[12]\\\\d\\\\d(?:\\\\d{3,4})?\",,,,,,,[3,6,7]],,,[,,\"10[4-7]|(?:116|204\\\\d)\\\\d{3}\",,,,\"104\"],[,,,,,,,,,[-1]],,,,\"CU\",,,,,,,,,,,,,,,,,,[,,\"10[4-6]\",,,,\"104\",,,[3]],,[,,\"1(?:0[4-7]|1(?:6111|8)|40)|2045252\",\n,,,\"104\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,[,,,,,,,,,[-1]]],CV:[,[,,\"1\\\\d\\\\d\",,,,,,,[3]],,,[,,\"13[0-2]\",,,,\"130\"],[,,,,,,,,,[-1]],,,,\"CV\",,,,,,,,,,,,,,,,,,[,,\"13[0-2]\",,,,\"130\"],,[,,\"13[0-2]\",,,,\"130\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,[,,,,,,,,,[-1]]],CW:[,[,,\"[19]\\\\d\\\\d\",,,,,,,[3]],,,[,,\"112|911\",,,,\"112\"],[,,,,,,,,,[-1]],,,,\"CW\",,,,,,,,,,,,,,,,,,[,,\"112|911\",,,,\"112\"],,[,,\"1(?:12|76)|911\",,,,\"112\"],[,,,,,,,,,[-1]],[,,\"176\",,,,\"176\"],,[,,\"176\",,,,\"176\"]],CX:[,[,,\"[01]\\\\d\\\\d\",,,,,,,[3]],,,[,,\"000|112\",\n,,,\"000\"],[,,,,,,,,,[-1]],,,,\"CX\",,,,,,,,,,,,,,,,,,[,,\"000|112\",,,,\"000\"],,[,,\"000|112\",,,,\"000\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,[,,,,,,,,,[-1]]],CY:[,[,,\"1\\\\d\\\\d(?:\\\\d{3})?\",,,,,,,[3,6]],,,[,,\"1(?:1(?:2|6\\\\d{3})|99)\",,,,\"112\"],[,,,,,,,,,[-1]],,,,\"CY\",,,,,,,,,,,,,,,,,,[,,\"1(?:12|99)\",,,,\"112\",,,[3]],,[,,\"1(?:1(?:2|6(?:000|111))|99)\",,,,\"112\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,[,,,,,,,,,[-1]]],CZ:[,[,,\"1\\\\d{2,5}\",,,,,,,[3,4,5,6]],,,[,,\"1(?:1(?:2|6(?:00[06]|1(?:11|23)))|5\\\\d)\",,,,\"112\",,,[3,6]],[,\n,,,,,,,,[-1]],,,,\"CZ\",,,,,,,,,,,,,,,,,,[,,\"1(?:12|5\\\\d)\",,,,\"112\",,,[3]],,[,,\"1(?:1(?:2|8\\\\d)|(?:2|3\\\\d)\\\\d{2,3}|5\\\\d|99)|1(?:16|4)\\\\d{3}\",,,,\"112\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,[,,,,,,,,,[-1]]],DE:[,[,,\"[13]\\\\d{2,5}\",,,,,,,[3,4,5,6]],,,[,,\"11(?:[02]|6\\\\d{3})\",,,,\"110\",,,[3,6]],[,,,,,,,,,[-1]],,,,\"DE\",,,,,,,,,,,,,,,,,,[,,\"11[02]\",,,,\"110\",,,[3]],,[,,\"11(?:[025]|6(?:00[06]|1(?:1[167]|23))|800\\\\d)|3311|118\\\\d\\\\d\",,,,\"110\"],[,,,,,,,,,[-1]],[,,\"331\\\\d\",,,,\"3310\",,,[4]],,[,,,,,,,,,[-1]]],DJ:[,[,,\"1\\\\d\",\n,,,,,,[2]],,,[,,\"1[78]\",,,,\"17\"],[,,,,,,,,,[-1]],,,,\"DJ\",,,,,,,,,,,,,,,,,,[,,\"1[78]\",,,,\"17\"],,[,,\"1[78]\",,,,\"17\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,[,,,,,,,,,[-1]]],DK:[,[,,\"1\\\\d{2,5}\",,,,,,,[3,4,5,6]],,,[,,\"11(?:[24]|6\\\\d{3})\",,,,\"112\",,,[3,6]],[,,,,,,,,,[-1]],,,,\"DK\",,,,,,,,,,,,,,,,,,[,,\"11[24]\",,,,\"112\",,,[3]],,[,,\"1(?:1(?:[2-48]|6(?:00[06]|111))|619[0-2]|8(?:01|1[0238]|28|30|5[13]|8[18]))\",,,,\"112\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,[,,,,,,,,,[-1]]],DM:[,[,,\"[39]\\\\d\\\\d\",,,,,,,[3]],,,[,,\"333|9(?:11|88|99)\",\n,,,\"333\"],[,,,,,,,,,[-1]],,,,\"DM\",,,,,,,,,,,,,,,,,,[,,\"333|9(?:11|99)\",,,,\"333\"],,[,,\"333|9(?:11|88|99)\",,,,\"333\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,[,,,,,,,,,[-1]]],DO:[,[,,\"[19]\\\\d\\\\d\",,,,,,,[3]],,,[,,\"112|9(?:11|88)\",,,,\"112\"],[,,,,,,,,,[-1]],,,,\"DO\",,,,,,,,,,,,,,,,,,[,,\"112|911\",,,,\"112\"],,[,,\"112|9(?:11|88)\",,,,\"112\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,[,,,,,,,,,[-1]]],DZ:[,[,,\"[17]\\\\d{1,3}\",,,,,,,[2,3,4]],,,[,,\"1(?:12|[47]|54\\\\d)\",,,,\"14\"],[,,,,,,,,,[-1]],,,,\"DZ\",,,,,,,,,,,,,,,,,,[,,\"1(?:12|[47])\",\n,,,\"14\",,,[2,3]],,[,,\"1(?:055|12|[47]|548)|730\",,,,\"14\"],[,,,,,,,,,[-1]],[,,\"730\",,,,\"730\",,,[3]],,[,,\"730\",,,,\"730\",,,[3]]],EC:[,[,,\"[19]\\\\d\\\\d\",,,,,,,[3]],,,[,,\"1(?:0[12]|12)|911\",,,,\"101\"],[,,,,,,,,,[-1]],,,,\"EC\",,,,,,,,,,,,,,,,,,[,,\"1(?:0[12]|12)|911\",,,,\"101\"],,[,,\"1(?:0[12]|12)|911\",,,,\"101\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,[,,,,,,,,,[-1]]],EE:[,[,,\"1\\\\d{2,5}\",,,,,,,[3,4,5,6]],,,[,,\"1(?:1(?:[02]|6\\\\d{3})|2(?:05|28)|3(?:014|3(?:21|5\\\\d?)|660)|492|5(?:1[03]|410|501)|6(?:112|333|644)|7(?:012|127|89)|8(?:10|8[57])|9(?:0[134]|14))\",\n,,,\"110\"],[,,\"1(?:18(?:00|[12458]\\\\d?)|2(?:0(?:[02-46-8]\\\\d?|1[0-36])|1(?:[0-4]\\\\d?|6[06])|2(?:[0-4]\\\\d?|5[25])|[367]|4(?:0[04]|[12]\\\\d?|4[24]|54)|55[12457])|3(?:0(?:[02]\\\\d?|1[13578]|3[356])|1[1347]|2[02-5]|3(?:[01347]\\\\d?|2[023]|88)|4(?:[35]\\\\d?|4[34])|5(?:3[134]|5[035])|666)|4(?:2(?:00|4\\\\d?)|4(?:0[01358]|1[024]|50|7\\\\d?)|900)|5(?:0[0-35]|1(?:[1267]\\\\d?|5[0-7]|82)|2(?:[014-6]\\\\d?|22)|330|4(?:[35]\\\\d?|44)|5(?:00|[1-69]\\\\d?)|9(?:[159]\\\\d?|[38]0|77))|6(?:1(?:00|1[19]|[35-9]\\\\d?)|2(?:2[26]|[68]\\\\d?)|3(?:22|36|6[36])|5|6(?:[0-359]\\\\d?|6[0-26])|7(?:00|55|7\\\\d?|8[89])|9(?:00|1\\\\d?|69))|7(?:0(?:[023]\\\\d?|1[0578])|1(?:00|2[034]|[4-9]\\\\d?)|2(?:[07]\\\\d?|20|44)|7(?:[0-57]\\\\d?|9[79])|8(?:0[08]|2\\\\d?|8[0178])|9(?:00|97))|8(?:1[127]|8[1268]|9[269])|9(?:0(?:[02]\\\\d?|69|9[0269])|1[1-3689]|21))\",\n,,,\"123\",,,[3,4,5]],,,,\"EE\",,,,,,,,,,,,,,,,,,[,,\"11[02]\",,,,\"110\",,,[3]],,[,,\"1(?:1(?:[02-579]|6(?:000|111)|8(?:[09]\\\\d|[1-8]))|2[36-9]|3[7-9]|4[05-7]|5[6-8]|6[05]|7[3-6]|8[02-7]|9[3-9])|1(?:2[0-245]|3[0-6]|4[1-489]|5[0-59]|6[1-46-9]|7[0-27-9]|8[189]|9[0-2])\\\\d\\\\d?\",,,,\"110\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,[,,\"1(?:18[1258]|2(?:0(?:1[036]|[46]\\\\d?)|166|21|4(?:0[04]|1\\\\d?|5[47])|[67])|3(?:0(?:1[13-578]|2\\\\d?|3[56])|1[15]|2[045]|3(?:[13]\\\\d?|2[13])|43|5(?:00|3[34]|53))|44(?:0[0135]|14|50|7\\\\d?)|5(?:05|1(?:[12]\\\\d?|5[1246]|8[12])|2(?:[01]\\\\d?|22)|3(?:00|3[03])|4(?:15|5\\\\d?)|500|9(?:5\\\\d?|77|80))|6(?:1[35-8]|226|3(?:22|3[36]|66)|644|7(?:00|7\\\\d?|89)|9(?:00|69))|7(?:01[258]|1(?:00|[15]\\\\d?)|2(?:44|7\\\\d?)|8(?:00|87|9\\\\d?))|8(?:1[128]|8[56]|9(?:[26]\\\\d?|77))|90(?:2\\\\d?|69|92))\",\n,,,\"126\",,,[3,4,5]]],EG:[,[,,\"[13]\\\\d\\\\d(?:\\\\d{2})?\",,,,,,,[3,5]],,,[,,\"1(?:2[23]|80)\",,,,\"122\",,,[3]],[,,,,,,,,,[-1]],,,,\"EG\",,,,,,,,,,,,,,,,,,[,,\"1(?:2[23]|80)\",,,,\"122\",,,[3]],,[,,\"1(?:2[23]|[679]\\\\d{3}|80)|34400\",,,,\"122\"],[,,,,,,,,,[-1]],[,,\"344\\\\d\\\\d\",,,,\"34400\",,,[5]],,[,,\"344\\\\d\\\\d\",,,,\"34400\",,,[5]]],EH:[,[,,\"1\\\\d\\\\d?\",,,,,,,[2,3]],,,[,,\"1(?:[59]|77)\",,,,\"15\"],[,,,,,,,,,[-1]],,,,\"EH\",,,,,,,,,,,,,,,,,,[,,\"1(?:[59]|77)\",,,,\"15\"],,[,,\"1(?:[59]|77)\",,,,\"15\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,\n[,,,,,,,,,[-1]]],ER:[,[,,\"[12]\\\\d\\\\d(?:\\\\d{3})?\",,,,,,,[3,6]],,,[,,\"11[2-46]|(?:12[47]|20[12])\\\\d{3}\",,,,\"112\"],[,,,,,,,,,[-1]],,,,\"ER\",,,,,,,,,,,,,,,,,,[,,\"1(?:1[2-46]|24422)|20(?:1(?:606|917)|2914)|(?:1277|2020)99\",,,,\"112\"],,[,,\"1(?:1[2-6]|24422)|20(?:1(?:606|917)|2914)|(?:1277|2020)99\",,,,\"112\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,[,,,,,,,,,[-1]]],ES:[,[,,\"[0-379]\\\\d{2,5}\",,,,,,,[3,4,5,6]],,,[,,\"0(?:16|6[57]|8[58])|1(?:006|12|[3-7]\\\\d\\\\d)|(?:116|20\\\\d)\\\\d{3}\",,,,\"016\",,,[3,4,6]],[,,\"[12]2\\\\d{1,4}|90(?:5\\\\d|7)|(?:118|2(?:[357]\\\\d|80)|3[357]\\\\d)\\\\d\\\\d|[79]9[57]\\\\d{3}\",\n,,,\"120\"],,,,\"ES\",,,,,,,,,,,,,,,,,,[,,\"08[58]|112\",,,,\"085\",,,[3]],,[,,\"0(?:1[0-26]|6[0-257]|8[058]|9[12])|1(?:0[03-57]\\\\d{1,3}|1(?:2|6(?:000|111)|8\\\\d\\\\d)|2\\\\d{1,4}|[3-9]\\\\d\\\\d)|2(?:2\\\\d{1,4}|80\\\\d\\\\d)|90(?:5[124578]|7)|1(?:3[34]|77)|(?:2[01]\\\\d|[79]9[57])\\\\d{3}|[23][357]\\\\d{3}\",,,,\"010\"],[,,\"0(?:[16][0-2]|80|9[12])|21\\\\d{4}\",,,,\"010\",,,[3,6]],[,,\"1(?:3[34]|77)|[12]2\\\\d{1,4}\",,,,\"120\"],,[,,\"(?:2[0-2]\\\\d|3[357]|[79]9[57])\\\\d{3}|2(?:[2357]\\\\d|80)\\\\d\\\\d\",,,,\"22000\",,,[5,6]]],ET:[,[,,\"9\\\\d\\\\d?\",,,,,\n,,[2,3]],,,[,,\"9(?:07|11?|2|39?|9[17])\",,,,\"91\"],[,,,,,,,,,[-1]],,,,\"ET\",,,,,,,,,,,,,,,,,,[,,\"9(?:11?|2|39?|9[17])\",,,,\"91\"],,[,,\"9(?:07|11?|2|39?|45|9[17])\",,,,\"91\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,[,,,,,,,,,[-1]]],FI:[,[,,\"[17]\\\\d\\\\d(?:\\\\d{2,3})?\",,,,,,,[3,5,6]],,,[,,\"11(?:2|6\\\\d{3})\",,,,\"112\",,,[3,6]],[,,,,,,,,,[-1]],,,,\"FI\",,,,,,,,,,,,,,,,,,[,,\"112\",,,,\"112\",,,[3]],,[,,\"11(?:2|6(?:00[06]|1(?:1[17]|23)))|(?:1[2-8]\\\\d|75[12])\\\\d\\\\d\",,,,\"112\"],[,,\"1[2-8]\\\\d{3}\",,,,\"12000\",,,[5]],[,,,,,,,,,[-1]],\n,[,,,,,,,,,[-1]]],FJ:[,[,,\"[0-579]\\\\d(?:\\\\d(?:\\\\d{2})?)?\",,,,,,,[2,3,5]],,,[,,\"91[17]\",,,,\"911\",,,[3]],[,,,,,,,,,[-1]],,,,\"FJ\",,,,,,,,,,,,,,,,,,[,,\"91[17]\",,,,\"911\",,,[3]],,[,,\"0(?:1[34]|8[1-4])|1(?:0[1-3]|[25]9)|2[289]|30|40404|91[137]|[45]4|75\",,,,\"22\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,[,,\"404\\\\d\\\\d\",,,,\"40400\",,,[5]]],FK:[,[,,\"[19]\\\\d\\\\d\",,,,,,,[3]],,,[,,\"999\",,,,\"999\"],[,,,,,,,,,[-1]],,,,\"FK\",,,,,,,,,,,,,,,,,,[,,\"999\",,,,\"999\"],,[,,\"1\\\\d\\\\d|999\",,,,\"100\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,[,,,\n,,,,,,[-1]]],FM:[,[,,\"[39]\\\\d\\\\d(?:\\\\d{3})?\",,,,,,,[3,6]],,,[,,\"320\\\\d{3}|911\",,,,\"911\"],[,,,,,,,,,[-1]],,,,\"FM\",,,,,,,,,,,,,,,,,,[,,\"(?:32022|91)1\",,,,\"911\"],,[,,\"(?:32022|91)1\",,,,\"911\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,[,,,,,,,,,[-1]]],FO:[,[,,\"1\\\\d{2,3}\",,,,,,,[3,4]],,,[,,\"1(?:1[24]|81\\\\d)\",,,,\"112\"],[,,,,,,,,,[-1]],,,,\"FO\",,,,,,,,,,,,,,,,,,[,,\"11[24]\",,,,\"112\",,,[3]],,[,,\"1(?:1[248]|819)|1(?:4[124]|71|8[7-9])\\\\d\",,,,\"112\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,[,,,,,,,,,[-1]]],FR:[,[,,\"[1-8]\\\\d{1,5}\",\n,,,,,,[2,3,4,5,6]],,,[,,\"1(?:1[02459]|[578]|9[167])|224|(?:3370|74)0|(?:116\\\\d|3[01])\\\\d\\\\d\",,,,\"15\"],[,,\"(?:1(?:0|18\\\\d)|366|[4-8]\\\\d\\\\d)\\\\d\\\\d|3[2-9]\\\\d\\\\d\",,,,\"1000\",,,[4,5,6]],,,,\"FR\",,,,,,,,,,,,,,,,,,[,,\"1(?:12|[578])\",,,,\"15\",,,[2,3]],,[,,\"1(?:0\\\\d\\\\d|1(?:[02459]|6(?:000|111)|8\\\\d{3})|[578]|9[167])|2(?:0(?:00|2)0|24)|[3-8]\\\\d{4}|3\\\\d{3}|6(?:1[14]|34)|7(?:0[06]|22|40)\",,,,\"15\"],[,,\"202\\\\d|6(?:1[14]|34)|70[06]\",,,,\"611\",,,[3,4]],[,,\"118777|224|6(?:1[14]|34)|7(?:0[06]|22|40)|20(?:0\\\\d|2)\\\\d\",,\n,,\"224\",,,[3,4,5,6]],,[,,\"114|[3-8]\\\\d{4}\",,,,\"114\",,,[3,5]]],GA:[,[,,\"1\\\\d(?:\\\\d{2})?\",,,,,,,[2,4]],,,[,,\"18|1(?:3\\\\d|73)\\\\d\",,,,\"18\"],[,,,,,,,,,[-1]],,,,\"GA\",,,,,,,,,,,,,,,,,,[,,\"1(?:3\\\\d\\\\d|730|8)\",,,,\"18\"],,[,,\"1(?:3\\\\d\\\\d|730|8)\",,,,\"18\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,[,,,,,,,,,[-1]]],GB:[,[,,\"[1-46-9]\\\\d{2,5}\",,,,,,,[3,4,5,6]],,,[,,\"1(?:05|1(?:[29]|6\\\\d{3})|7[56]\\\\d|8000)|2(?:20\\\\d|48)|4444|999\",,,,\"105\"],[,,,,,,,,,[-1]],,,,\"GB\",,,,,,,,,,,,,,,,,,[,,\"112|999\",,,,\"112\",,,[3]],,[,,\"1(?:0[015]|1(?:[129]|6(?:000|1(?:11|23))|8\\\\d{3})|2(?:[1-3]|50)|33|4(?:1|7\\\\d)|571|7(?:0\\\\d|[56]0)|800\\\\d|9[15])|2(?:0202|1300|2(?:02|11)|3(?:02|336|45)|4(?:25|8))|3[13]3|4(?:0[02]|35[01]|44[45]|5\\\\d)|(?:[68]\\\\d|7[089])\\\\d{3}|15\\\\d|2[02]2|650|789|9(?:01|99)\",\n,,,\"100\"],[,,,,,,,,,[-1]],[,,\"1(?:(?:25|7[56])\\\\d|571)|2(?:02(?:\\\\d{2})?|[13]3\\\\d\\\\d|48)|4444|901\",,,,\"202\",,,[3,4,5]],,[,,\"(?:125|2(?:020|13\\\\d)|(?:7[089]|8[01])\\\\d\\\\d)\\\\d\",,,,\"1250\",,,[4,5]]],GD:[,[,,\"[19]\\\\d\\\\d\",,,,,,,[3]],,,[,,\"9(?:11|88)\",,,,\"911\"],[,,,,,,,,,[-1]],,,,\"GD\",,,,,,,,,,,,,,,,,,[,,\"911\",,,,\"911\"],,[,,\"176|9(?:11|88)\",,,,\"176\"],[,,,,,,,,,[-1]],[,,\"176\",,,,\"176\"],,[,,\"176\",,,,\"176\"]],GE:[,[,,\"[014]\\\\d\\\\d(?:\\\\d{2})?\",,,,,,,[3,5]],,,[,,\"0(?:11|33)|11[1-3]|[01]22\",,,,\"011\",,,[3]],[,,,,\n,,,,,[-1]],,,,\"GE\",,,,,,,,,,,,,,,,,,[,,\"0(?:11|33)|11[1-3]|[01]22\",,,,\"011\",,,[3]],,[,,\"0(?:11|33)|11[1-3]|40404|[01]22\",,,,\"011\"],[,,,,,,,,,[-1]],[,,\"404\\\\d\\\\d\",,,,\"40400\",,,[5]],,[,,\"404\\\\d\\\\d\",,,,\"40400\",,,[5]]],GF:[,[,,\"1\\\\d\",,,,,,,[2]],,,[,,\"1[578]\",,,,\"15\"],[,,,,,,,,,[-1]],,,,\"GF\",,,,,,,,,,,,,,,,,,[,,\"1[578]\",,,,\"15\"],,[,,\"1[578]\",,,,\"15\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,[,,,,,,,,,[-1]]],GG:[,[,,\"[19]\\\\d{2,5}\",,,,,,,[3,4,5,6]],,,[,,\"112|999\",,,,\"112\",,,[3]],[,,,,,,,,,[-1]],,,,\"GG\",,,,,,,,,\n,,,,,,,,,[,,\"112|999\",,,,\"112\",,,[3]],,[,,\"1(?:0[01]|1[12]|23|41|55|9[05])|999|1(?:1[68]\\\\d\\\\d|47|800)\\\\d\",,,,\"100\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,[,,,,,,,,,[-1]]],GH:[,[,,\"[14589]\\\\d{2,4}\",,,,,,,[3,4,5]],,,[,,\"19[1-3]|999\",,,,\"191\",,,[3]],[,,,,,,,,,[-1]],,,,\"GH\",,,,,,,,,,,,,,,,,,[,,\"19[1-3]|999\",,,,\"191\",,,[3]],,[,,\"19[1-3]|40404|(?:54|83)00|999\",,,,\"191\"],[,,,,,,,,,[-1]],[,,\"404\\\\d\\\\d|(?:54|83)0\\\\d\",,,,\"5400\",,,[4,5]],,[,,\"404\\\\d\\\\d|(?:54|83)0\\\\d\",,,,\"5400\",,,[4,5]]],GI:[,[,,\"[158]\\\\d{2,5}\",\n,,,,,,[3,4,5,6]],,,[,,\"1(?:00|1[25]|23|4(?:1|7\\\\d)|5[15]|9[02-49])|555|(?:116\\\\d|80)\\\\d\\\\d\",,,,\"100\",,,[3,4,6]],[,,\"8[1-69]\\\\d\\\\d\",,,,\"8100\",,,[4]],,,,\"GI\",,,,,,,,,,,,,,,,,,[,,\"1(?:12|9[09])\",,,,\"112\",,,[3]],,[,,\"1(?:00|1(?:[25]|6(?:00[06]|1(?:1[17]|23))|8\\\\d\\\\d)|23|4(?:1|7[014])|5[015]|9[02-49])|555|8[0-79]\\\\d\\\\d|8(?:00|4[0-2]|8[0-589])\",,,,\"100\"],[,,\"150|87\\\\d\\\\d\",,,,\"150\",,,[3,4]],[,,\"1(?:00|1(?:5|8\\\\d\\\\d)|23|51|9[2-4])|555|8(?:00|4[0-2]|8[0-589])\",,,,\"100\",,,[3,5]],,[,,,,,,,,,[-1]]],GL:[,[,,\"1\\\\d\\\\d\",\n,,,,,,[3]],,,[,,\"112\",,,,\"112\"],[,,,,,,,,,[-1]],,,,\"GL\",,,,,,,,,,,,,,,,,,[,,\"112\",,,,\"112\"],,[,,\"1[1-8]\\\\d\",,,,\"110\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,[,,,,,,,,,[-1]]],GM:[,[,,\"1\\\\d\\\\d?\",,,,,,,[2,3]],,,[,,\"1(?:1[6-8]|[6-8])\",,,,\"16\"],[,,,,,,,,,[-1]],,,,\"GM\",,,,,,,,,,,,,,,,,,[,,\"1(?:1[6-8]|[6-8])\",,,,\"16\"],,[,,\"1(?:1[6-8]|[6-8])\",,,,\"16\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,[,,,,,,,,,[-1]]],GN:[,[,,\"[14]\\\\d\\\\d(?:\\\\d{2})?\",,,,,,,[3,5]],,,[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,,,\"GN\",,,,,,,,,,,,,,,,,,[,,,,,,\n,,,[-1]],,[,,\"12\\\\d|40404\",,,,\"120\"],[,,,,,,,,,[-1]],[,,\"404\\\\d\\\\d\",,,,\"40400\",,,[5]],,[,,\"404\\\\d\\\\d\",,,,\"40400\",,,[5]]],GP:[,[,,\"1\\\\d\",,,,,,,[2]],,,[,,\"1[578]\",,,,\"15\"],[,,,,,,,,,[-1]],,,,\"GP\",,,,,,,,,,,,,,,,,,[,,\"1[578]\",,,,\"15\"],,[,,\"1[578]\",,,,\"15\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,[,,,,,,,,,[-1]]],GR:[,[,,\"1\\\\d\\\\d(?:\\\\d{2,3})?\",,,,,,,[3,5,6]],,,[,,\"1(?:0[089]|1(?:2|6\\\\d{3})|66|99)\",,,,\"100\",,,[3,6]],[,,,,,,,,,[-1]],,,,\"GR\",,,,,,,,,,,,,,,,,,[,,\"1(?:00|12|66|99)\",,,,\"100\",,,[3]],,[,,\"1(?:0[089]|1(?:2|320|6(?:000|1(?:1[17]|23)))|(?:389|9)9|66)\",\n,,,\"100\"],[,,\"113\\\\d\\\\d\",,,,\"11300\",,,[5]],[,,,,,,,,,[-1]],,[,,,,,,,,,[-1]]],GT:[,[,,\"[14]\\\\d{2,4}\",,,,,,,[3,4,5]],,,[,,\"1(?:10|2[03])\",,,,\"110\",,,[3]],[,,,,,,,,,[-1]],,,,\"GT\",,,,,,,,,,,,,,,,,,[,,\"1(?:10|2[03])\",,,,\"110\",,,[3]],,[,,\"110|40404|1(?:2|[57]\\\\d)\\\\d\",,,,\"110\"],[,,,,,,,,,[-1]],[,,\"404\\\\d\\\\d\",,,,\"40400\",,,[5]],,[,,\"404\\\\d\\\\d\",,,,\"40400\",,,[5]]],GU:[,[,,\"9\\\\d\\\\d\",,,,,,,[3]],,,[,,\"9(?:11|88)\",,,,\"911\"],[,,,,,,,,,[-1]],,,,\"GU\",,,,,,,,,,,,,,,,,,[,,\"911\",,,,\"911\"],,[,,\"9(?:11|88)\",,,,\"911\"],[,\n,,,,,,,,[-1]],[,,,,,,,,,[-1]],,[,,,,,,,,,[-1]]],GW:[,[,,\"1\\\\d\\\\d\",,,,,,,[3]],,,[,,\"11[378]\",,,,\"113\"],[,,,,,,,,,[-1]],,,,\"GW\",,,,,,,,,,,,,,,,,,[,,\"11[378]\",,,,\"113\"],,[,,\"11[378]\",,,,\"113\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,[,,,,,,,,,[-1]]],GY:[,[,,\"[019]\\\\d{2,3}\",,,,,,,[3,4]],,,[,,\"91[1-3]\",,,,\"911\",,,[3]],[,,,,,,,,,[-1]],,,,\"GY\",,,,,,,,,,,,,,,,,,[,,\"91[1-3]\",,,,\"911\",,,[3]],,[,,\"0(?:02|(?:17|80)1|444|7(?:[67]7|9)|9(?:0[78]|[2-47]))|1(?:443|5[568])|91[1-3]\",,,,\"002\"],[,,,,,,,,,[-1]],[,,\"144\\\\d\",,\n,,\"1440\",,,[4]],,[,,\"144\\\\d\",,,,\"1440\",,,[4]]],HK:[,[,,\"[19]\\\\d{2,6}\",,,,,,,[3,4,5,6,7]],,,[,,\"112|99[29]\",,,,\"112\",,,[3]],[,,,,,,,,,[-1]],,,,\"HK\",,,,,,,,,,,,,,,,,,[,,\"112|99[29]\",,,,\"112\",,,[3]],,[,,\"1(?:0(?:(?:[0136]\\\\d|2[14])\\\\d{0,3}|8[138])|12|2(?:[0-3]\\\\d{0,4}|(?:58|8[13])\\\\d{0,3})|7(?:[135-9]\\\\d{0,4}|219\\\\d{0,2})|8(?:0(?:(?:[13]|60\\\\d)\\\\d|8)|1(?:0\\\\d|[2-8])|2(?:0[5-9]|(?:18|2)2|3|8[128])|(?:(?:3[0-689]\\\\d|7(?:2[1-389]|8[0235-9]|93))\\\\d|8)\\\\d|50[138]|6(?:1(?:11|86)|8)))|99[29]|10[0139]\",,,,\"100\"],\n[,,,,,,,,,[-1]],[,,\"109|1(?:08|85\\\\d)\\\\d\",,,,\"109\",,,[3,4,5]],,[,,\"992\",,,,\"992\",,,[3]]],HN:[,[,,\"[14]\\\\d\\\\d(?:\\\\d{2})?\",,,,,,,[3,5]],,,[,,\"199\",,,,\"199\",,,[3]],[,,,,,,,,,[-1]],,,,\"HN\",,,,,,,,,,,,,,,,,,[,,\"199\",,,,\"199\",,,[3]],,[,,\"199|40404\",,,,\"199\"],[,,,,,,,,,[-1]],[,,\"404\\\\d\\\\d\",,,,\"40400\",,,[5]],,[,,\"404\\\\d\\\\d\",,,,\"40400\",,,[5]]],HR:[,[,,\"[19]\\\\d{1,5}\",,,,,,,[2,3,4,5,6]],,,[,,\"1(?:12|9[2-4])|9[34]|1(?:16\\\\d|39)\\\\d\\\\d\",,,,\"93\",,,[2,3,5,6]],[,,\"118\\\\d\\\\d\",,,,\"11800\",,,[5]],,,,\"HR\",,,,,,,,,,,,,\n,,,,,[,,\"1(?:12|9[2-4])|9[34]\",,,,\"93\",,,[2,3]],,[,,\"1(?:1(?:2|6(?:00[06]|1(?:1[17]|23))|8\\\\d\\\\d)|3977|9(?:[2-5]|87))|9[34]\",,,,\"93\"],[,,,,,,,,,[-1]],[,,\"139\\\\d\\\\d\",,,,\"13900\",,,[5]],,[,,\"139\\\\d\\\\d\",,,,\"13900\",,,[5]]],HT:[,[,,\"[14]\\\\d\\\\d(?:\\\\d{2})?\",,,,,,,[3,5]],,,[,,\"11[48]\",,,,\"114\",,,[3]],[,,,,,,,,,[-1]],,,,\"HT\",,,,,,,,,,,,,,,,,,[,,\"11[48]\",,,,\"114\",,,[3]],,[,,\"11[48]|40404\",,,,\"114\"],[,,,,,,,,,[-1]],[,,\"404\\\\d\\\\d\",,,,\"40400\",,,[5]],,[,,\"404\\\\d\\\\d\",,,,\"40400\",,,[5]]],HU:[,[,,\"1\\\\d{2,5}\",,,,,,,\n[3,4,5,6]],,,[,,\"1(?:0[457]|12|4[0-4]\\\\d)|1(?:16\\\\d|37|45)\\\\d\\\\d\",,,,\"104\"],[,,,,,,,,,[-1]],,,,\"HU\",,,,,,,,,,,,,,,,,,[,,\"1(?:0[457]|12)\",,,,\"104\",,,[3]],,[,,\"1(?:0[457]|1(?:2|6(?:000|1(?:11|23))|800)|2(?:0[0-4]|1[013489]|2[0-5]|3[0-46]|4[0-24-68]|5[0-2568]|6[06]|7[0-25-7]|8[028]|9[08])|37(?:00|37|7[07])|4(?:0[0-5]|1[013-8]|2[034]|3[23]|4[02-9]|5(?:00|41|67))|777|8(?:1[27-9]|2[04]|40|[589]))\",,,,\"104\"],[,,,,,,,,,[-1]],[,,\"1(?:4[0-4]|77)\\\\d|1(?:18|2|45)\\\\d\\\\d\",,,,\"1200\",,,[4,5]],,[,,\"184\\\\d\",,,,\"1840\",\n,,[4]]],ID:[,[,,\"[178]\\\\d\\\\d(?:\\\\d{2,3})?\",,,,,,,[3,5,6]],,,[,,\"11[02389]\",,,,\"110\",,,[3]],[,,,,,,,,,[-1]],,,,\"ID\",,,,,,,,,,,,,,,,,,[,,\"11[02389]\",,,,\"110\",,,[3]],,[,,\"1(?:1[02389]|40\\\\d\\\\d|50264)|71400|89887\",,,,\"110\"],[,,,,,,,,,[-1]],[,,\"(?:714|898)\\\\d\\\\d\",,,,\"71400\",,,[5]],,[,,\"714\\\\d\\\\d\",,,,\"71400\",,,[5]]],IE:[,[,,\"[159]\\\\d{2,5}\",,,,,,,[3,4,5,6]],,,[,,\"11(?:2|6\\\\d{3})|999\",,,,\"112\",,,[3,6]],[,,\"5[37]\\\\d{3}\",,,,\"53000\",,,[5]],,,,\"IE\",,,,,,,,,,,,,,,,,,[,,\"112|999\",,,,\"112\",,,[3]],,[,,\"11(?:2|6(?:00[06]|1(?:1[17]|23)))|999|(?:1(?:18|9)|5[0137]\\\\d)\\\\d\\\\d\",\n,,,\"112\"],[,,\"51\\\\d{3}\",,,,\"51000\",,,[5]],[,,\"51210\",,,,\"51210\",,,[5]],,[,,\"51210|(?:118|5[037]\\\\d)\\\\d\\\\d\",,,,\"11800\",,,[5]]],IL:[,[,,\"[12]\\\\d{2,4}\",,,,,,,[3,4,5]],,,[,,\"1(?:0[0-2]|12)\",,,,\"100\",,,[3]],[,,,,,,,,,[-1]],,,,\"IL\",,,,,,,,,,,,,,,,,,[,,\"1(?:0[0-2]|12)\",,,,\"100\",,,[3]],,[,,\"1(?:0[0-2]|1(?:[013-9]\\\\d|2)|[2-9]\\\\d\\\\d)|2407|(?:104|27)00\",,,,\"100\"],[,,,,,,,,,[-1]],[,,\"104\\\\d\\\\d\",,,,\"10400\",,,[5]],,[,,\"104\\\\d\\\\d\",,,,\"10400\",,,[5]]],IM:[,[,,\"[189]\\\\d\\\\d(?:\\\\d{2,3})?\",,,,,,,[3,5,6]],,,[,,\"999\",,\n,,\"999\",,,[3]],[,,,,,,,,,[-1]],,,,\"IM\",,,,,,,,,,,,,,,,,,[,,\"999\",,,,\"999\",,,[3]],,[,,\"1\\\\d\\\\d(?:\\\\d{3})?|8(?:6444|9887)|999\",,,,\"100\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,[,,\"8(?:64|98)\\\\d\\\\d\",,,,\"86400\",,,[5]]],IN:[,[,,\"[12578]\\\\d{2,8}\",,,,,,,[3,4,5,6,7,8,9]],,,[,,\"1(?:0[0-248]|1[289]|21|[39][89]|4[01]|6(?:1|6\\\\d?)|8[12])|777|800|1[05]5\\\\d|1(?:07|51|94)\\\\d\\\\d?|(?:1(?:[05]5\\\\d|70)\\\\d|261)\\\\d|1(?:0[369]|10|29|3[126]|9[0-256])\\\\d\",,,,\"100\",,,[3,4,5,6]],[,,\"11[67]\\\\d{4}|56161561\",,,,\"1160000\",,,[7,8]],\n,,,\"IN\",,,,,,,,,,,,,,,,,,[,,\"1(?:0[0-28]|12|298)|2611\",,,,\"100\",,,[3,4]],,[,,\"1(?:0(?:[0-248]|3[39]|5(?:010|6)|6[3468]|7(?:[01357]|[28]0?|4[01])|9[0135-9])|1(?:00|[289])|2(?:1|98)|3(?:11|2[0-2]|63|[89])|4[01]|5(?:1(?:0[0-36]|[127])|54)|6(?:1|6[01]?)|7000|8[12]|9(?:0[013-59]|12|25|4[4-9]\\\\d?|50|6[1347]|[89]))|2611|5(?:0(?:0(?:0\\\\d|1|20?)|325|5[2-79]\\\\d{3,5})|1(?:234|555|717|818|96[49])|2(?:0(?:0[01]|[14]0)|151|555|666|888|9(?:06|99\\\\d?))|3(?:0[01]0|131|553|(?:66|77)6)|(?:464|55[05])\\\\d{1,3}|6(?:070|3[68]|43)|717\\\\d)|777|800|5(?:05(?:0|1\\\\d)|221|3(?:03|3[23]))\\\\d{1,4}|5(?:(?:04|88)0|2(?:2[0267]|3[16])|4(?:1[04]|20|3[02])|5(?:3[16]|67)|6(?:06|[67]\\\\d)|787|9(?:64|90))\\\\d\\\\d?|(?:1(?:05[79]|(?:1[67][0-2]|802)\\\\d|55[23])\\\\d|5(?:(?:00(?:0\\\\d|1)|(?:304|616)\\\\d\\\\d)\\\\d|1(?:0[12]|4[2-4])|2(?:2[3589]|3(?:1\\\\d{3}|2)|4[04]|7[78])|4(?:[02]4|32\\\\d{4}|4[04]|99)|5(?:1[25]|[36]5|4[45]|93)|7(?:(?:17\\\\d|57)\\\\d\\\\d|[27]7|88)|8(?:3[4-69]|4[01]|5[58]|88(?:8\\\\d\\\\d|9)|99)|9(?:0(?:0|2\\\\d{3})|55|6[67]|77|88)))\\\\d\",\n,,,\"100\"],[,,\"5(?:14(?:2[5-9]|[34]\\\\d)|757555)\",,,,\"51425\",,,[5,7]],[,,\"1(?:(?:1[67]\\\\d\\\\d|70)\\\\d\\\\d|55330|909)|5(?:300\\\\d|6161(?:17[89]|561))|1(?:[19][89]|21|4[01])\",,,,\"118\",,,[3,4,5,6,7,8]],,[,,\"1(?:39|90[019])|5(?:14(?:2[5-9]|[34]\\\\d)|6161(?:17[89]|561)|757555)\",,,,\"139\",,,[3,4,5,7,8]]],IQ:[,[,,\"[1479]\\\\d{2,4}\",,,,,,,[3,4,5]],,,[,,\"1(?:0[04]|15|22)\",,,,\"100\",,,[3]],[,,,,,,,,,[-1]],,,,\"IQ\",,,,,,,,,,,,,,,,,,[,,\"1(?:0[04]|15|22)\",,,,\"100\",,,[3]],,[,,\"1(?:0[04]|15|22)|4432|71117|9988\",,,,\"100\"],[,\n,,,,,,,,[-1]],[,,\"(?:443|711\\\\d|998)\\\\d\",,,,\"4430\",,,[4,5]],,[,,\"(?:443|711\\\\d|998)\\\\d\",,,,\"4430\",,,[4,5]]],IR:[,[,,\"[129]\\\\d{2,5}\",,,,,,,[3,4,5,6]],,,[,,\"1(?:1[0-68]|2[0-59]|9[0-579])|911\",,,,\"110\",,,[3]],[,,,,,,,,,[-1]],,,,\"IR\",,,,,,,,,,,,,,,,,,[,,\"1(?:1[025]|25)|911\",,,,\"110\",,,[3]],,[,,\"1(?:1[0-68]|2[0-59]|3[346-8]|4(?:[0147]|[289]0)|5(?:0[14]|1[02479]|2[0-3]|39|[49]0|65)|6(?:[16]6|[27]|90)|8(?:03|1[18]|22|3[37]|4[28]|88|99)|9[0-579])|20(?:[09]0|1(?:[038]|1[079]|26|9[69])|2[01])|9(?:11|9(?:0009|90))\",\n,,,\"110\"],[,,\"1(?:5[0-469]|8[0-489])\\\\d\",,,,\"1500\",,,[4]],[,,\"(?:1(?:5[0-469]|8[0-489])|99(?:0\\\\d\\\\d|9))\\\\d\",,,,\"1500\",,,[4,6]],,[,,\"990\\\\d{3}\",,,,\"990000\",,,[6]]],IS:[,[,,\"1\\\\d\\\\d(?:\\\\d(?:\\\\d{2})?)?\",,,,,,,[3,4,6]],,,[,,\"1(?:12|71\\\\d)\",,,,\"112\",,,[3,4]],[,,,,,,,,,[-1]],,,,\"IS\",,,,,,,,,,,,,,,,,,[,,\"112\",,,,\"112\",,,[3]],,[,,\"1(?:1(?:[28]|61(?:16|23))|4(?:00|1[145]|4[0146])|55|7(?:00|17|7[07-9])|8(?:[02]0|1[16-9]|88)|900)\",,,,\"112\"],[,,,,,,,,,[-1]],[,,\"14(?:0\\\\d|41)\",,,,\"1400\",,,[4]],,[,,\"1(?:415|90\\\\d)\",\n,,,\"1415\",,,[4]]],IT:[,[,,\"[14]\\\\d{2,6}\",,,,,,,[3,4,5,6,7]],,,[,,\"1(?:1(?:[2358]|6\\\\d{3})|87)\",,,,\"112\",,,[3,6]],[,,\"(?:12|4(?:[478](?:[0-4]|[5-9]\\\\d\\\\d)|55))\\\\d\\\\d\",,,,\"1200\",,,[4,5,7]],,,,\"IT\",,,,,,,,,,,,,,,,,,[,,\"11[2358]\",,,,\"112\",,,[3]],,[,,\"1(?:0\\\\d{2,3}|1(?:[2-57-9]|6(?:000|111))|3[39]|4(?:82|9\\\\d{1,3})|5(?:00|1[58]|2[25]|3[03]|44|[59])|60|8[67]|9(?:[01]|2[2-9]|4\\\\d|696))|4(?:2323|5045)|(?:1(?:2|92[01])|4(?:3(?:[01]|[45]\\\\d\\\\d)|[478](?:[0-4]|[5-9]\\\\d\\\\d)|55))\\\\d\\\\d\",,,,\"112\"],[,,,,,,,,,[-1]],\n[,,,,,,,,,[-1]],,[,,\"4(?:3(?:[01]|[45]\\\\d\\\\d)|[478](?:[0-4]|[5-9]\\\\d\\\\d)|5[05])\\\\d\\\\d\",,,,\"43000\",,,[5,7]]],JE:[,[,,\"[129]\\\\d\\\\d(?:\\\\d(?:\\\\d{2})?)?\",,,,,,,[3,4,6]],,,[,,\"112|999\",,,,\"112\",,,[3]],[,,,,,,,,,[-1]],,,,\"JE\",,,,,,,,,,,,,,,,,,[,,\"112|999\",,,,\"112\",,,[3]],,[,,\"1(?:00|1(?:2|8\\\\d{3})|23|4(?:[14]|28|7\\\\d)|5\\\\d|7(?:0[12]|[128]|35?)|808|9[0135])|23[2-4]|999\",,,,\"100\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,[,,,,,,,,,[-1]]],JM:[,[,,\"[19]\\\\d\\\\d\",,,,,,,[3]],,,[,,\"11[029]|9(?:11|88)\",,,,\"110\"],[,,,,,,,\n,,[-1]],,,,\"JM\",,,,,,,,,,,,,,,,,,[,,\"11[029]|911\",,,,\"110\"],,[,,\"1(?:1[029]|76)|9(?:11|88)\",,,,\"110\"],[,,,,,,,,,[-1]],[,,\"176\",,,,\"176\"],,[,,\"176\",,,,\"176\"]],JO:[,[,,\"[19]\\\\d\\\\d(?:\\\\d{2})?\",,,,,,,[3,5]],,,[,,\"1(?:0[235]|1[2-6]|9[127])|911\",,,,\"102\",,,[3]],[,,\"9[0-4689]\\\\d{3}\",,,,\"90000\",,,[5]],,,,\"JO\",,,,,,,,,,,,,,,,,,[,,\"1(?:12|9[127])|911\",,,,\"112\",,,[3]],,[,,\"1(?:0[2359]|1[0-68]|9[0-24-79])|9[0-4689]\\\\d{3}|911\",,,,\"102\"],[,,,,,,,,,[-1]],[,,\"9[0-4689]\\\\d{3}\",,,,\"90000\",,,[5]],,[,,\"9[0-4689]\\\\d{3}\",\n,,,\"90000\",,,[5]]],JP:[,[,,\"[01]\\\\d\\\\d(?:\\\\d{7})?\",,,,,,,[3,10]],,,[,,\"11[089]\",,,,\"110\",,,[3]],[,,,,,,,,,[-1]],,,,\"JP\",,,,,,,,,,,,,,,,,,[,,\"11[09]\",,,,\"110\",,,[3]],,[,,\"000[259]\\\\d{6}|1(?:0[24]|1[089]|44|89)\",,,,\"102\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,[,,\"000[259]\\\\d{6}\",,,,\"0002000000\",,,[10]]],KE:[,[,,\"[1-9]\\\\d{2,4}\",,,,,,,[3,4,5]],,,[,,\"1(?:1(?:[246]|9\\\\d)|5(?:01|2[127]|6[26]\\\\d))|999\",,,,\"112\"],[,,\"909\\\\d\\\\d\",,,,\"90900\",,,[5]],,,,\"KE\",,,,,,,,,,,,,,,,,,[,,\"11[24]|999\",,,,\"112\",,,[3]],,[,,\"1(?:0(?:[07-9]|1[0-25]|400)|1(?:[024-6]|9[0-579])|2[1-3]|3[01]|4[14]|5(?:[01][01]|2[0-24-79]|33|4[05]|5[59]|6(?:00|29|6[67]))|(?:6[035]\\\\d|[78])\\\\d|9(?:[02-9]\\\\d\\\\d|19))|(?:(?:2[0-79]|[37][0-29]|4[0-4]|6[2357]|8\\\\d)\\\\d|5(?:[0-7]\\\\d|99))\\\\d\\\\d|9(?:09\\\\d\\\\d|99)|8988\",\n,,,\"100\"],[,,,,,,,,,[-1]],[,,\"1(?:(?:04|6[35])\\\\d\\\\d|3[01]|4[14]|5(?:1\\\\d|2[25]))|(?:(?:2[0-79]|[37][0-29]|4[0-4]|6[2357]|8\\\\d)\\\\d|5(?:[0-7]\\\\d|99)|909)\\\\d\\\\d|898\\\\d\",,,,\"130\"],,[,,\"1(?:(?:04|6[035])\\\\d\\\\d|4[14]|5(?:01|55|6[26]\\\\d))|40404|8988|909\\\\d\\\\d\",,,,\"141\"]],KG:[,[,,\"[14]\\\\d{2,3}\",,,,,,,[3,4]],,,[,,\"10[1-3]\",,,,\"101\",,,[3]],[,,,,,,,,,[-1]],,,,\"KG\",,,,,,,,,,,,,,,,,,[,,\"10[1-3]\",,,,\"101\",,,[3]],,[,,\"10[1-3]|4040\",,,,\"101\"],[,,,,,,,,,[-1]],[,,\"404\\\\d\",,,,\"4040\",,,[4]],,[,,\"404\\\\d\",,,,\"4040\",,\n,[4]]],KH:[,[,,\"[146]\\\\d\\\\d(?:\\\\d{2})?\",,,,,,,[3,5]],,,[,,\"11[7-9]|666\",,,,\"117\",,,[3]],[,,,,,,,,,[-1]],,,,\"KH\",,,,,,,,,,,,,,,,,,[,,\"11[7-9]|666\",,,,\"117\",,,[3]],,[,,\"11[7-9]|40404|666\",,,,\"117\"],[,,,,,,,,,[-1]],[,,\"404\\\\d\\\\d\",,,,\"40400\",,,[5]],,[,,\"404\\\\d\\\\d\",,,,\"40400\",,,[5]]],KI:[,[,,\"[179]\\\\d{2,3}\",,,,,,,[3,4]],,,[,,\"19[2-5]|99[2-4]\",,,,\"192\",,,[3]],[,,,,,,,,,[-1]],,,,\"KI\",,,,,,,,,,,,,,,,,,[,,\"19[2-5]|99[2-4]\",,,,\"192\",,,[3]],,[,,\"1(?:05[0-259]|88|9[2-5])|777|99[2-4]|10[0-8]\",,,,\"100\"],[,,\"103\",\n,,,\"103\",,,[3]],[,,,,,,,,,[-1]],,[,,,,,,,,,[-1]]],KM:[,[,,\"1\\\\d\",,,,,,,[2]],,,[,,\"1[78]\",,,,\"17\"],[,,,,,,,,,[-1]],,,,\"KM\",,,,,,,,,,,,,,,,,,[,,\"1[78]\",,,,\"17\"],,[,,\"1[78]\",,,,\"17\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,[,,,,,,,,,[-1]]],KN:[,[,,\"[39]\\\\d\\\\d\",,,,,,,[3]],,,[,,\"333|9(?:11|88|99)\",,,,\"333\"],[,,,,,,,,,[-1]],,,,\"KN\",,,,,,,,,,,,,,,,,,[,,\"333|9(?:11|99)\",,,,\"333\"],,[,,\"333|9(?:11|88|99)\",,,,\"333\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,[,,,,,,,,,[-1]]],KP:[,[,,\"[18]\\\\d\\\\d\",,,,,,,[3]],,,[,,\"11[29]|819\",\n,,,\"112\"],[,,,,,,,,,[-1]],,,,\"KP\",,,,,,,,,,,,,,,,,,[,,\"11[29]|819\",,,,\"112\"],,[,,\"11[29]|819\",,,,\"112\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,[,,,,,,,,,[-1]]],KR:[,[,,\"1\\\\d{2,4}\",,,,,,,[3,4,5]],,,[,,\"1(?:1[27-9]|28|330|82)\",,,,\"112\",,,[3,4]],[,,,,,,,,,[-1]],,,,\"KR\",,,,,,,,,,,,,,,,,,[,,\"11[29]\",,,,\"112\",,,[3]],,[,,\"1(?:[016-9]114|3(?:0[01]|2|3[0-35-9]|45?|5[057]|6[569]|7[79]|8[2589]|9[0189]))|1(?:0[015]|1\\\\d|2[01357-9]|41|8[28])\",,,,\"100\"],[,,,,,,,,,[-1]],[,,\"1(?:0[01]|1[4-6]|41)|1(?:[06-9]1\\\\d|111)\\\\d\",\n,,,\"100\",,,[3,5]],,[,,,,,,,,,[-1]]],KW:[,[,,\"[18]\\\\d\\\\d(?:\\\\d{2})?\",,,,,,,[3,5]],,,[,,\"112\",,,,\"112\",,,[3]],[,,,,,,,,,[-1]],,,,\"KW\",,,,,,,,,,,,,,,,,,[,,\"112\",,,,\"112\",,,[3]],,[,,\"1[0-7]\\\\d|89887\",,,,\"100\"],[,,,,,,,,,[-1]],[,,\"898\\\\d\\\\d\",,,,\"89800\",,,[5]],,[,,,,,,,,,[-1]]],KY:[,[,,\"9\\\\d\\\\d\",,,,,,,[3]],,,[,,\"9(?:11|88)\",,,,\"911\"],[,,,,,,,,,[-1]],,,,\"KY\",,,,,,,,,,,,,,,,,,[,,\"911\",,,,\"911\"],,[,,\"9(?:11|88)\",,,,\"911\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,[,,,,,,,,,[-1]]],KZ:[,[,,\"[1-4]\\\\d{2,4}\",,,,,,,[3,4,\n5]],,,[,,\"1(?:0[1-3]|12)|212\\\\d\",,,,\"101\",,,[3,4]],[,,,,,,,,,[-1]],,,,\"KZ\",,,,,,,,,,,,,,,,,,[,,\"1(?:0[1-3]|12)\",,,,\"101\",,,[3]],,[,,\"1(?:0[1-4]|12)|2121|(?:3040|404)0\",,,,\"101\"],[,,,,,,,,,[-1]],[,,\"(?:304\\\\d|404)\\\\d\",,,,\"4040\",,,[4,5]],,[,,\"(?:304\\\\d|404)\\\\d\",,,,\"4040\",,,[4,5]]],LA:[,[,,\"1\\\\d\\\\d\",,,,,,,[3]],,,[,,\"19[015]\",,,,\"190\"],[,,,,,,,,,[-1]],,,,\"LA\",,,,,,,,,,,,,,,,,,[,,\"19[015]\",,,,\"190\"],,[,,\"19[015]\",,,,\"190\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,[,,,,,,,,,[-1]]],LB:[,[,,\"[19]\\\\d\\\\d\",,,,,,,[3]],\n,,[,,\"1(?:12|40|75)|999\",,,,\"112\"],[,,,,,,,,,[-1]],,,,\"LB\",,,,,,,,,,,,,,,,,,[,,\"1(?:12|40|75)|999\",,,,\"112\"],,[,,\"1(?:12|40|75)|999\",,,,\"112\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,[,,,,,,,,,[-1]]],LC:[,[,,\"9\\\\d\\\\d\",,,,,,,[3]],,,[,,\"9(?:11|88|99)\",,,,\"911\"],[,,,,,,,,,[-1]],,,,\"LC\",,,,,,,,,,,,,,,,,,[,,\"9(?:11|99)\",,,,\"911\"],,[,,\"9(?:11|88|99)\",,,,\"911\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,[,,,,,,,,,[-1]]],LI:[,[,,\"1\\\\d{2,3}\",,,,,,,[3,4]],,,[,,\"1(?:1[278]|44)\",,,,\"112\",,,[3]],[,,,,,,,,,[-1]],,,,\"LI\",,,,,,,\n,,,,,,,,,,,[,,\"1(?:1[278]|44)\",,,,\"112\",,,[3]],,[,,\"1(?:1(?:[278]|45)|4[3-57]|50|75|81[18])\",,,,\"112\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,[,,,,,,,,,[-1]]],LK:[,[,,\"1\\\\d{2,3}\",,,,,,,[3,4]],,,[,,\"11[02689]\",,,,\"110\",,,[3]],[,,,,,,,,,[-1]],,,,\"LK\",,,,,,,,,,,,,,,,,,[,,\"11[02689]\",,,,\"110\",,,[3]],,[,,\"1(?:1[024-9]|3(?:00|1[2-49]|2[23]|3[1-3]|44|5[07]|[67]9|88|9[039])|9(?:0[0-2589]|1[0-357-9]|2[0-25689]|3[0389]|4[0489]|5[014-69]|6[0-2689]|7[03579]|8[02457-9]|9[0-2569]))\",,,,\"110\"],[,,,,,,,,,[-1]],[,,,,,,\n,,,[-1]],,[,,,,,,,,,[-1]]],LR:[,[,,\"[3489]\\\\d{2,3}\",,,,,,,[3,4]],,,[,,\"355|911\",,,,\"355\",,,[3]],[,,,,,,,,,[-1]],,,,\"LR\",,,,,,,,,,,,,,,,,,[,,\"355|911\",,,,\"355\",,,[3]],,[,,\"355|4040|8(?:400|933)|911\",,,,\"355\"],[,,,,,,,,,[-1]],[,,\"(?:404|8(?:40|93))\\\\d\",,,,\"4040\",,,[4]],,[,,\"(?:404|8(?:40|93))\\\\d\",,,,\"4040\",,,[4]]],LS:[,[,,\"1\\\\d\\\\d\",,,,,,,[3]],,,[,,\"11[257]\",,,,\"112\"],[,,,,,,,,,[-1]],,,,\"LS\",,,,,,,,,,,,,,,,,,[,,\"11[257]\",,,,\"112\"],,[,,\"11[257]\",,,,\"112\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,[,,,,,,,,,[-1]]],\nLT:[,[,,\"[01]\\\\d(?:\\\\d(?:\\\\d{3})?)?\",,,,,,,[2,3,6]],,,[,,\"0(?:11?|22?|33?)|1(?:0[1-3]|1(?:2|6111))|116(?:0\\\\d|12)\\\\d\",,,,\"01\"],[,,,,,,,,,[-1]],,,,\"LT\",,,,,,,,,,,,,,,,,,[,,\"0(?:11?|22?|33?)|1(?:0[1-3]|12)\",,,,\"01\",,,[2,3]],,[,,\"0(?:11?|22?|33?)|1(?:0[1-3]|1(?:[27-9]|6(?:000|1(?:1[17]|23))))\",,,,\"01\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,[,,,,,,,,,[-1]]],LU:[,[,,\"1\\\\d{2,5}\",,,,,,,[3,4,5,6]],,,[,,\"11(?:[23]|6\\\\d{3})\",,,,\"112\",,,[3,6]],[,,,,,,,,,[-1]],,,,\"LU\",,,,,,,,,,,,,,,,,,[,,\"11[23]\",,,,\"112\",,,[3]],\n,[,,\"11(?:[23]|6(?:000|111))|1(?:18|[25]\\\\d|3)\\\\d\\\\d\",,,,\"112\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,[,,,,,,,,,[-1]]],LV:[,[,,\"[018]\\\\d{1,5}\",,,,,,,[2,3,4,5,6]],,,[,,\"0[1-3]|11(?:[023]|6\\\\d{3})\",,,,\"01\",,,[2,3,6]],[,,\"1180|821\\\\d\\\\d\",,,,\"1180\",,,[4,5]],,,,\"LV\",,,,,,,,,,,,,,,,,,[,,\"0[1-3]|11[023]\",,,,\"01\",,,[2,3]],,[,,\"0[1-4]|1(?:1(?:[02-4]|6(?:000|111)|8[0189])|(?:5|65)5|77)|821[57]4\",,,,\"01\"],[,,\"1181\",,,,\"1181\",,,[4]],[,,\"165\\\\d\",,,,\"1650\",,,[4]],,[,,,,,,,,,[-1]]],LY:[,[,,\"1\\\\d\\\\d\",,,,,,,[3]],,,[,,\n\"19[013]\",,,,\"190\"],[,,,,,,,,,[-1]],,,,\"LY\",,,,,,,,,,,,,,,,,,[,,\"19[013]\",,,,\"190\"],,[,,\"19[013]\",,,,\"190\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,[,,,,,,,,,[-1]]],MA:[,[,,\"1\\\\d\\\\d?\",,,,,,,[2,3]],,,[,,\"1(?:[59]|77)\",,,,\"15\"],[,,,,,,,,,[-1]],,,,\"MA\",,,,,,,,,,,,,,,,,,[,,\"1(?:[59]|77)\",,,,\"15\"],,[,,\"1(?:[59]|77)\",,,,\"15\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,[,,,,,,,,,[-1]]],MC:[,[,,\"1\\\\d\\\\d?\",,,,,,,[2,3]],,,[,,\"1(?:12|[578])\",,,,\"15\"],[,,,,,,,,,[-1]],,,,\"MC\",,,,,,,,,,,,,,,,,,[,,\"1(?:12|[578])\",,,,\"15\"],,[,,\"1(?:12|41|[578])\",\n,,,\"15\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,[,,,,,,,,,[-1]]],MD:[,[,,\"[19]\\\\d{2,5}\",,,,,,,[3,4,5,6]],,,[,,\"11(?:2|6(?:000|1(?:11|2\\\\d)))|90[1-3]\",,,,\"112\",,,[3,6]],[,,,,,,,,,[-1]],,,,\"MD\",,,,,,,,,,,,,,,,,,[,,\"112|90[1-3]\",,,,\"112\",,,[3]],,[,,\"1(?:1(?:2|6(?:00[06]|1(?:1[17]|23))|8\\\\d\\\\d?|99)|90[04-9])|90[1-3]|1(?:4\\\\d\\\\d|6[0-389]|9[1-4])\\\\d\",,,,\"112\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,[,,,,,,,,,[-1]]],ME:[,[,,\"1\\\\d{2,5}\",,,,,,,[3,4,5,6]],,,[,,\"1(?:12|2[2-4])\",,,,\"112\",,,[3]],[,,,,,,,,,[-1]],,,,\"ME\",,\n,,,,,,,,,,,,,,,,[,,\"1(?:12|2[2-4])\",,,,\"112\",,,[3]],,[,,\"1(?:1(?:(?:[013-57-9]|6\\\\d\\\\d)\\\\d|2)|[249]\\\\d{3}|5999|8(?:0[089]|1[0-8]|888))|1(?:[02-5]\\\\d\\\\d|60[06]|700)|12\\\\d\",,,,\"112\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,[,,,,,,,,,[-1]]],MF:[,[,,\"1\\\\d\",,,,,,,[2]],,,[,,\"1[578]\",,,,\"15\"],[,,,,,,,,,[-1]],,,,\"MF\",,,,,,,,,,,,,,,,,,[,,\"1[578]\",,,,\"15\"],,[,,\"1[578]\",,,,\"15\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,[,,,,,,,,,[-1]]],MG:[,[,,\"1\\\\d\\\\d?\",,,,,,,[2,3]],,,[,,\"1(?:1[78]|[78])\",,,,\"17\"],[,,,,,,,,,[-1]],,,,\"MG\",\n,,,,,,,,,,,,,,,,,[,,\"1(?:1[78]|[78])\",,,,\"17\"],,[,,\"1(?:1[78]|[78])\",,,,\"17\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,[,,,,,,,,,[-1]]],MH:[,[,,\"9\\\\d\\\\d\",,,,,,,[3]],,,[,,\"911\",,,,\"911\"],[,,,,,,,,,[-1]],,,,\"MH\",,,,,,,,,,,,,,,,,,[,,\"911\",,,,\"911\"],,[,,\"911\",,,,\"911\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,[,,,,,,,,,[-1]]],MK:[,[,,\"1\\\\d\\\\d(?:\\\\d(?:\\\\d{2})?)?\",,,,,,,[3,4,6]],,,[,,\"1(?:1(?:2|6\\\\d{3})|9[2-4])\",,,,\"112\",,,[3,6]],[,,,,,,,,,[-1]],,,,\"MK\",,,,,,,,,,,,,,,,,,[,,\"1(?:12|9[2-4])\",,,,\"112\",,,[3]],,[,,\"1(?:1(?:2|8\\\\d)|3\\\\d|9[2-4])|1(?:16|2\\\\d)\\\\d{3}\",\n,,,\"112\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,[,,,,,,,,,[-1]]],ML:[,[,,\"[136-8]\\\\d{1,4}\",,,,,,,[2,3,4,5]],,,[,,\"1[578]|(?:352|67)00|7402|(?:677|744|8000)\\\\d\",,,,\"15\",,,[2,4,5]],[,,\"(?:12|800)2\\\\d|3(?:52(?:11|2[02]|3[04-6]|99)|7574)\",,,,\"1220\",,,[4,5]],,,,\"ML\",,,,,,,,,,,,,,,,,,[,,\"1[578]\",,,,\"15\",,,[2]],,[,,\"1(?:1(?:[013-9]\\\\d|2)|2(?:1[02-469]|2[13])|[578])|350(?:35|57)|67(?:0[09]|[59]9|77|8[89])|74(?:0[02]|44|55)|800[0-2][12]|3(?:52|[67]\\\\d)\\\\d\\\\d\",,,,\"15\"],[,,\"37(?:433|575)|7400|8001\\\\d\",,,,\"7400\",\n,,[4,5]],[,,\"3503\\\\d|(?:3[67]\\\\d|800)\\\\d\\\\d\",,,,\"35030\",,,[5]],,[,,\"374(?:0[24-9]|[1-9]\\\\d)|7400|3(?:6\\\\d|75)\\\\d\\\\d\",,,,\"7400\",,,[4,5]]],MM:[,[,,\"1\\\\d\\\\d\",,,,,,,[3]],,,[,,\"199\",,,,\"199\"],[,,,,,,,,,[-1]],,,,\"MM\",,,,,,,,,,,,,,,,,,[,,\"199\",,,,\"199\"],,[,,\"199\",,,,\"199\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,[,,,,,,,,,[-1]]],MN:[,[,,\"1\\\\d\\\\d\",,,,,,,[3]],,,[,,\"10[0-35]\",,,,\"100\"],[,,,,,,,,,[-1]],,,,\"MN\",,,,,,,,,,,,,,,,,,[,,\"10[0-35]\",,,,\"100\"],,[,,\"10[0-35]\",,,,\"100\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,[,,,,,\n,,,,[-1]]],MO:[,[,,\"9\\\\d\\\\d\",,,,,,,[3]],,,[,,\"999\",,,,\"999\"],[,,,,,,,,,[-1]],,,,\"MO\",,,,,,,,,,,,,,,,,,[,,\"999\",,,,\"999\"],,[,,\"999\",,,,\"999\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,[,,,,,,,,,[-1]]],MP:[,[,,\"9\\\\d\\\\d\",,,,,,,[3]],,,[,,\"9(?:11|88)\",,,,\"911\"],[,,,,,,,,,[-1]],,,,\"MP\",,,,,,,,,,,,,,,,,,[,,\"911\",,,,\"911\"],,[,,\"9(?:11|88)\",,,,\"911\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,[,,,,,,,,,[-1]]],MQ:[,[,,\"[13]\\\\d(?:\\\\d(?:\\\\d(?:\\\\d{2})?)?)?\",,,,,,,[2,3,4,6]],,,[,,\"1(?:12|[578])|3[01]\\\\d\\\\d\",,,,\"15\",,,[2,3,4]],[,\n,\"3[2469]\\\\d\\\\d\",,,,\"3200\",,,[4]],,,,\"MQ\",,,,,,,,,,,,,,,,,,[,,\"1(?:12|[578])\",,,,\"15\",,,[2,3]],,[,,\"1(?:12|[578])|(?:118[02-9]|3[0-2469])\\\\d\\\\d\",,,,\"15\"],[,,\"118\\\\d{3}\",,,,\"118000\",,,[6]],[,,,,,,,,,[-1]],,[,,,,,,,,,[-1]]],MR:[,[,,\"1\\\\d\",,,,,,,[2]],,,[,,\"1[78]\",,,,\"17\"],[,,,,,,,,,[-1]],,,,\"MR\",,,,,,,,,,,,,,,,,,[,,\"1[78]\",,,,\"17\"],,[,,\"1[78]\",,,,\"17\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,[,,,,,,,,,[-1]]],MS:[,[,,\"[29]\\\\d\\\\d\",,,,,,,[3]],,,[,,\"9(?:11|88|99)\",,,,\"911\"],[,,,,,,,,,[-1]],,,,\"MS\",,,,,,,,,,,,,\n,,,,,[,,\"9(?:11|99)\",,,,\"911\"],,[,,\"211|9(?:11|88|99)\",,,,\"211\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,[,,,,,,,,,[-1]]],MT:[,[,,\"1\\\\d\\\\d(?:\\\\d{3})?\",,,,,,,[3,6]],,,[,,\"11(?:2|6\\\\d{3})\",,,,\"112\"],[,,,,,,,,,[-1]],,,,\"MT\",,,,,,,,,,,,,,,,,,[,,\"112\",,,,\"112\",,,[3]],,[,,\"11(?:2|6(?:000|1(?:11|23)))\",,,,\"112\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,[,,,,,,,,,[-1]]],MU:[,[,,\"[189]\\\\d{2,4}\",,,,,,,[3,4,5]],,,[,,\"11[45]|99[59]\",,,,\"114\",,,[3]],[,,,,,,,,,[-1]],,,,\"MU\",,,,,,,,,,,,,,,,,,[,,\"11[45]|99[59]\",,,,\"114\",,,[3]],\n,[,,\"1\\\\d{2,4}|(?:8\\\\d\\\\d|99)\\\\d\",,,,\"100\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,[,,,,,,,,,[-1]]],MV:[,[,,\"[14]\\\\d{2,3}\",,,,,,,[3,4]],,,[,,\"1(?:02|1[89])\",,,,\"102\",,,[3]],[,,,,,,,,,[-1]],,,,\"MV\",,,,,,,,,,,,,,,,,,[,,\"1(?:02|1[89])\",,,,\"102\",,,[3]],,[,,\"1(?:[0-37-9]|[4-6]\\\\d)\\\\d|4040|1[45]1\",,,,\"100\"],[,,,,,,,,,[-1]],[,,\"1[45]1\",,,,\"141\",,,[3]],,[,,,,,,,,,[-1]]],MW:[,[,,\"[189]\\\\d\\\\d(?:\\\\d{2})?\",,,,,,,[3,5]],,,[,,\"199|99[7-9]\",,,,\"199\",,,[3]],[,,,,,,,,,[-1]],,,,\"MW\",,,,,,,,,,,,,,,,,,[,,\"199|99[7-9]\",,,,\n\"199\",,,[3]],,[,,\"199|80400|99[7-9]\",,,,\"199\"],[,,,,,,,,,[-1]],[,,\"804\\\\d\\\\d\",,,,\"80400\",,,[5]],,[,,\"804\\\\d\\\\d\",,,,\"80400\",,,[5]]],MX:[,[,,\"[0579]\\\\d{2,4}\",,,,,,,[3,4,5]],,,[,,\"0(?:6[0568]|80)|911\",,,,\"060\",,,[3]],[,,\"(?:530\\\\d|776)\\\\d\",,,,\"7760\",,,[4,5]],,,,\"MX\",,,,,,,,,,,,,,,,,,[,,\"0(?:6[0568]|80)|911\",,,,\"060\",,,[3]],,[,,\"0[1-9]\\\\d|53053|7766|911\",,,,\"010\"],[,,,,,,,,,[-1]],[,,\"0(?:[249]0|[35][01])\",,,,\"020\",,,[3]],,[,,,,,,,,,[-1]]],MY:[,[,,\"[1369]\\\\d{2,4}\",,,,,,,[3,4,5]],,,[,,\"112|999\",,,,\"112\",\n,,[3]],[,,,,,,,,,[-1]],,,,\"MY\",,,,,,,,,,,,,,,,,,[,,\"112|999\",,,,\"112\",,,[3]],,[,,\"1(?:0[01348]|1(?:[02]|1[128]|311)|2(?:0[125]|[13-6]|2\\\\d{0,2})|(?:3[1-35-79]|7[45])\\\\d\\\\d?|5(?:454|5\\\\d\\\\d?|77|888|999?)|8(?:18?|2|8[18])|9(?:[124]\\\\d?|68|71|9[0679]))|66628|99[1-469]|13[5-7]|(?:1(?:0[569]|309|5[12]|7[136-9]|9[03])|3[23679]\\\\d\\\\d)\\\\d\",,,,\"100\"],[,,\"666\\\\d\\\\d\",,,,\"66600\",,,[5]],[,,,,,,,,,[-1]],,[,,\"(?:3[23679]\\\\d|666)\\\\d\\\\d\",,,,\"32000\",,,[5]]],MZ:[,[,,\"1\\\\d{2,3}\",,,,,,,[3,4]],,,[,,\"1(?:1[79]|9[78])\",\n,,,\"117\",,,[3]],[,,,,,,,,,[-1]],,,,\"MZ\",,,,,,,,,,,,,,,,,,[,,\"1(?:1[79]|9[78])\",,,,\"117\",,,[3]],,[,,\"1(?:[02-5]\\\\d\\\\d|1[79]|9[78])\",,,,\"117\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,[,,,,,,,,,[-1]]],NA:[,[,,\"[19]\\\\d{2,4}\",,,,,,,[3,4,5]],,,[,,\"10111\",,,,\"10111\",,,[5]],[,,,,,,,,,[-1]],,,,\"NA\",,,,,,,,,,,,,,,,,,[,,\"10111\",,,,\"10111\",,,[5]],,[,,\"(?:10|93)111|(?:1\\\\d|9)\\\\d\\\\d\",,,,\"900\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,[,,,,,,,,,[-1]]],NC:[,[,,\"[135]\\\\d{1,3}\",,,,,,,[2,3,4]],,,[,,\"1(?:0(?:00|1[23]|3[0-2]|8\\\\d)|[5-8])|363\\\\d|577\",\n,,,\"15\"],[,,,,,,,,,[-1]],,,,\"NC\",,,,,,,,,,,,,,,,,,[,,\"1[5-8]\",,,,\"15\",,,[2]],,[,,\"1(?:0(?:0[06]|1[02-46]|20|3[0-25]|42|5[058]|77|88)|[5-8])|3631|5[6-8]\\\\d\",,,,\"15\"],[,,\"5(?:67|88)\",,,,\"567\",,,[3]],[,,,,,,,,,[-1]],,[,,,,,,,,,[-1]]],NE:[,[,,\"[1-3578]\\\\d(?:\\\\d(?:\\\\d{3})?)?\",,,,,,,[2,3,6]],,,[,,\"1(?:18|[578])|723\\\\d{3}\",,,,\"15\"],[,,,,,,,,,[-1]],,,,\"NE\",,,,,,,,,,,,,,,,,,[,,\"1(?:18|[578])|723141\",,,,\"15\"],,[,,\"1(?:0[01]|1[128]|2[034]|3[013]|[46]0|55?|[78])|222|333|555|723141|888\",,,,\"15\"],[,,,,,,,,,[-1]],\n[,,\"1(?:0[01]|1[12]|2[034]|3[013]|[46]0|55)|222|333|555|888\",,,,\"100\",,,[3]],,[,,,,,,,,,[-1]]],NF:[,[,,\"9\\\\d\\\\d\",,,,,,,[3]],,,[,,\"9(?:11|55|77)\",,,,\"911\"],[,,,,,,,,,[-1]],,,,\"NF\",,,,,,,,,,,,,,,,,,[,,\"9(?:11|55|77)\",,,,\"911\"],,[,,\"9(?:11|55|77)\",,,,\"911\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,[,,,,,,,,,[-1]]],NG:[,[,,\"[14]\\\\d\\\\d(?:\\\\d{2})?\",,,,,,,[3,5]],,,[,,\"199\",,,,\"199\",,,[3]],[,,,,,,,,,[-1]],,,,\"NG\",,,,,,,,,,,,,,,,,,[,,\"199\",,,,\"199\",,,[3]],,[,,\"199|40700\",,,,\"199\"],[,,,,,,,,,[-1]],[,,\"407\\\\d\\\\d\",,\n,,\"40700\",,,[5]],,[,,\"407\\\\d\\\\d\",,,,\"40700\",,,[5]]],NI:[,[,,\"[12467]\\\\d{2,3}\",,,,,,,[3,4]],,,[,,\"1(?:1[58]|2[08])|737\\\\d\",,,,\"115\"],[,,,,,,,,,[-1]],,,,\"NI\",,,,,,,,,,,,,,,,,,[,,\"1(?:1[58]|2[08])\",,,,\"115\",,,[3]],,[,,\"1(?:1[58]|200)|4878|7(?:010|373)|12[0158]|(?:19|[267]1)00\",,,,\"115\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,[,,,,,,,,,[-1]]],NL:[,[,,\"[1349]\\\\d\\\\d(?:\\\\d(?:\\\\d{2})?)?\",,,,,,,[3,4,6]],,,[,,\"11(?:2|6\\\\d{3})|911\",,,,\"112\",,,[3,6]],[,,,,,,,,,[-1]],,,,\"NL\",,,,,,,,,,,,,,,,,,[,,\"112|911\",,,,\"112\",,\n,[3]],,[,,\"1(?:1(?:2|6(?:00[06]|1(?:11|23)))|2(?:0[0-4]|3[34]|44)|3[03-9]\\\\d|400|8(?:[02-9]\\\\d|1[0-79]))|[34]000|911\",,,,\"112\"],[,,,,,,,,,[-1]],[,,\"120\\\\d\",,,,\"1200\",,,[4]],,[,,\"[34]00\\\\d\",,,,\"3000\",,,[4]]],NO:[,[,,\"[01]\\\\d{2,5}\",,,,,,,[3,4,5,6]],,,[,,\"11(?:[023]|6\\\\d{3})\",,,,\"110\",,,[3,6]],[,,,,,,,,,[-1]],,,,\"NO\",,,,,,,,,,,,,,,,,,[,,\"11[023]\",,,,\"110\",,,[3]],,[,,\"04\\\\d{3}|1(?:1(?:[0239]|61(?:1[17]|23))|2[048]|4(?:12|[59])|7[57]|8[5-9]\\\\d|90)\",,,,\"110\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,[,,\"04\\\\d{3}\",\n,,,\"04000\",,,[5]]],NP:[,[,,\"1\\\\d{2,3}\",,,,,,,[3,4]],,,[,,\"1(?:0[0-36]|12)|1(?:09|11)\\\\d\",,,,\"100\"],[,,,,,,,,,[-1]],,,,\"NP\",,,,,,,,,,,,,,,,,,[,,\"1(?:0[0-3]|12)\",,,,\"100\",,,[3]],,[,,\"1(?:0(?:[0-36]|98)|1(?:1[1-4]|2))\",,,,\"100\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,[,,,,,,,,,[-1]]],NR:[,[,,\"1\\\\d\\\\d\",,,,,,,[3]],,,[,,\"11[0-2]\",,,,\"110\"],[,,,,,,,,,[-1]],,,,\"NR\",,,,,,,,,,,,,,,,,,[,,\"11[0-2]\",,,,\"110\"],,[,,\"1(?:1[0-2]|23|92)\",,,,\"110\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,[,,,,,,,,,[-1]]],NU:[,[,,\"[019]\\\\d\\\\d\",,\n,,,,,[3]],,,[,,\"999\",,,,\"999\"],[,,,,,,,,,[-1]],,,,\"NU\",,,,,,,,,,,,,,,,,,[,,\"999\",,,,\"999\"],,[,,\"01[05]|101|999\",,,,\"010\"],[,,,,,,,,,[-1]],[,,\"010\",,,,\"010\"],,[,,,,,,,,,[-1]]],NZ:[,[,,\"\\\\d{3,4}\",,,,,,,[3,4]],,,[,,\"111\",,,,\"111\",,,[3]],[,,\"018\",,,,\"018\",,,[3]],,,,\"NZ\",,,,,,,,,,,,,,,,,,[,,\"111\",,,,\"111\",,,[3]],,[,,\"018|1(?:(?:1|37)1|(?:23|94)4|7[03]7)|[2-57-9]\\\\d{2,3}|6(?:161|26[0-3]|742)\",,,,\"018\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,[,,\"018|(?:1(?:23|37|7[03]|94)|6(?:[12]6|74))\\\\d|[2-57-9]\\\\d{2,3}\",,\n,,\"018\"]],OM:[,[,,\"[19]\\\\d{3}\",,,,,,,[4]],,,[,,\"1444|999\\\\d\",,,,\"1444\"],[,,,,,,,,,[-1]],,,,\"OM\",,,,,,,,,,,,,,,,,,[,,\"1444|9999\",,,,\"1444\"],,[,,\"1(?:111|222|4(?:4[0-5]|50|66|7[7-9])|51[0-8])|9999|1(?:2[3-5]|3[0-2]|50)\\\\d\",,,,\"1111\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,[,,,,,,,,,[-1]]],PA:[,[,,\"[19]\\\\d\\\\d\",,,,,,,[3]],,,[,,\"911\",,,,\"911\"],[,,,,,,,,,[-1]],,,,\"PA\",,,,,,,,,,,,,,,,,,[,,\"911\",,,,\"911\"],,[,,\"10[2-4]|911\",,,,\"102\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,[,,,,,,,,,[-1]]],PE:[,[,,\"1\\\\d\\\\d\",,,,,,,[3]],\n,,[,,\"1(?:05|1[67])\",,,,\"105\"],[,,,,,,,,,[-1]],,,,\"PE\",,,,,,,,,,,,,,,,,,[,,\"1(?:05|1[67])\",,,,\"105\"],,[,,\"1(?:05|1[67])\",,,,\"105\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,[,,,,,,,,,[-1]]],PF:[,[,,\"1\\\\d\",,,,,,,[2]],,,[,,\"1[578]\",,,,\"15\"],[,,,,,,,,,[-1]],,,,\"PF\",,,,,,,,,,,,,,,,,,[,,\"1[578]\",,,,\"15\"],,[,,\"1[578]\",,,,\"15\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,[,,,,,,,,,[-1]]],PG:[,[,,\"[01]\\\\d{2,6}\",,,,,,,[3,4,5,6,7]],,,[,,\"000|11[01]\",,,,\"000\",,,[3]],[,,,,,,,,,[-1]],,,,\"PG\",,,,,,,,,,,,,,,,,,[,,\"000|11[01]\",,,,\"000\",\n,,[3]],,[,,\"000|1(?:1[01]|5\\\\d\\\\d|6\\\\d{2,5})\",,,,\"000\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,[,,\"16\\\\d{2,5}\",,,,\"1600\",,,[4,5,6,7]]],PH:[,[,,\"[19]\\\\d\\\\d\",,,,,,,[3]],,,[,,\"11[27]|911\",,,,\"112\"],[,,,,,,,,,[-1]],,,,\"PH\",,,,,,,,,,,,,,,,,,[,,\"11[27]|911\",,,,\"112\"],,[,,\"11[27]|911\",,,,\"112\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,[,,,,,,,,,[-1]]],PK:[,[,,\"1\\\\d{1,3}\",,,,,,,[2,3,4]],,,[,,\"1(?:1(?:2\\\\d?|5)|[56])\",,,,\"15\"],[,,,,,,,,,[-1]],,,,\"PK\",,,,,,,,,,,,,,,,,,[,,\"1(?:1(?:22?|5)|[56])\",,,,\"15\"],,[,,\"1(?:122|3[014]|[56])|11[2457-9]\",\n,,,\"15\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,[,,,,,,,,,[-1]]],PL:[,[,,\"[19]\\\\d\\\\d(?:\\\\d{2,3})?\",,,,,,,[3,5,6]],,,[,,\"11(?:2|6\\\\d{3})|99[7-9]\",,,,\"112\",,,[3,6]],[,,,,,,,,,[-1]],,,,\"PL\",,,,,,,,,,,,,,,,,,[,,\"112|99[7-9]\",,,,\"112\",,,[3]],,[,,\"1(?:1(?:2|61(?:11|23)|891[23])|9\\\\d{3})|9(?:8[4-7]|9[1-9])|11[68]000\",,,,\"112\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,[,,,,,,,,,[-1]]],PM:[,[,,\"[13]\\\\d(?:\\\\d\\\\d(?:\\\\d{2})?)?\",,,,,,,[2,4,6]],,,[,,\"1[578]|3(?:0\\\\d|1[689])\\\\d\",,,,\"15\",,,[2,4]],[,,\"3[2469]\\\\d\\\\d\",,,,\"3200\",\n,,[4]],,,,\"PM\",,,,,,,,,,,,,,,,,,[,,\"1[578]\",,,,\"15\",,,[2]],,[,,\"1[578]|31(?:03|[689]\\\\d)|(?:118[02-9]|3[02469])\\\\d\\\\d\",,,,\"15\"],[,,\"118\\\\d{3}\",,,,\"118000\",,,[6]],[,,\"310\\\\d\",,,,\"3100\",,,[4]],,[,,,,,,,,,[-1]]],PR:[,[,,\"9\\\\d\\\\d\",,,,,,,[3]],,,[,,\"9(?:11|88)\",,,,\"911\"],[,,,,,,,,,[-1]],,,,\"PR\",,,,,,,,,,,,,,,,,,[,,\"911\",,,,\"911\"],,[,,\"9(?:11|88)\",,,,\"911\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,[,,,,,,,,,[-1]]],PS:[,[,,\"1\\\\d{2,3}\",,,,,,,[3,4]],,,[,,\"1(?:0[0-2]|66)\",,,,\"100\",,,[3]],[,,,,,,,,,[-1]],,,,\"PS\",,,,\n,,,,,,,,,,,,,,[,,\"10[0-2]\",,,,\"100\",,,[3]],,[,,\"1(?:0[0-2]|122|44|66|99)\",,,,\"100\"],[,,,,,,,,,[-1]],[,,\"112\\\\d\",,,,\"1120\",,,[4]],,[,,,,,,,,,[-1]]],PT:[,[,,\"1\\\\d\\\\d(?:\\\\d(?:\\\\d{2})?)?\",,,,,,,[3,4,6]],,,[,,\"11[257]|1(?:16\\\\d\\\\d|5[1589]|8[279])\\\\d\",,,,\"112\"],[,,,,,,,,,[-1]],,,,\"PT\",,,,,,,,,,,,,,,,,,[,,\"11[25]\",,,,\"112\",,,[3]],,[,,\"1(?:0(?:45|5[01])|1(?:[2578]|600[06])|4(?:1[45]|4)|583|6(?:1[0236]|3[02]|9[169]))|1(?:1611|59)1|1[068]78|1[08]9[16]|1(?:0[1-38]|40|5[15]|6[258]|82)0\",,,,\"112\"],[,,,,,,,,,[-1]],\n[,,,,,,,,,[-1]],,[,,,,,,,,,[-1]]],PW:[,[,,\"9\\\\d\\\\d\",,,,,,,[3]],,,[,,\"911\",,,,\"911\"],[,,,,,,,,,[-1]],,,,\"PW\",,,,,,,,,,,,,,,,,,[,,\"911\",,,,\"911\"],,[,,\"911\",,,,\"911\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,[,,,,,,,,,[-1]]],PY:[,[,,\"[19]\\\\d\\\\d\",,,,,,,[3]],,,[,,\"128|911\",,,,\"128\"],[,,,,,,,,,[-1]],,,,\"PY\",,,,,,,,,,,,,,,,,,[,,\"128|911\",,,,\"128\"],,[,,\"1[1-9]\\\\d|911\",,,,\"110\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,[,,,,,,,,,[-1]]],QA:[,[,,\"[129]\\\\d{2,4}\",,,,,,,[3,4,5]],,,[,,\"99\\\\d\",,,,\"990\",,,[3]],[,,\"900\",,,,\"900\",\n,,[3]],,,,\"QA\",,,,,,,,,,,,,,,,,,[,,\"999\",,,,\"999\",,,[3]],,[,,\"9(?:00|[19]\\\\d)|(?:1|20|9[27]\\\\d)\\\\d\\\\d\",,,,\"100\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,[,,,,,,,,,[-1]]],RE:[,[,,\"1\\\\d\\\\d?\",,,,,,,[2,3]],,,[,,\"1(?:12|[578])\",,,,\"15\"],[,,,,,,,,,[-1]],,,,\"RE\",,,,,,,,,,,,,,,,,,[,,\"1(?:12|[578])\",,,,\"15\"],,[,,\"1(?:12|[578])\",,,,\"15\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,[,,,,,,,,,[-1]]],RO:[,[,,\"[18]\\\\d{2,5}\",,,,,,,[3,4,5,6]],,,[,,\"11(?:2|6\\\\d{3})\",,,,\"112\",,,[3,6]],[,,\"(?:1(?:18[39]|[24])|8[48])\\\\d\\\\d\",,,,\"1200\",\n,,[4,6]],,,,\"RO\",,,,,,,,,,,,,,,,,,[,,\"112\",,,,\"112\",,,[3]],,[,,\"1(?:1(?:2|6(?:000|1(?:11|23))|8(?:(?:01|8[18])1|119|[23]00|932))|[24]\\\\d\\\\d|9(?:0(?:00|19)|1[19]|21|3[02]|5[178]))|8[48]\\\\d\\\\d\",,,,\"112\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,[,,\"(?:1[24]|8[48])\\\\d\\\\d\",,,,\"1200\",,,[4]]],RS:[,[,,\"[19]\\\\d{1,5}\",,,,,,,[2,3,4,5,6]],,,[,,\"112|9[2-4]\",,,,\"92\",,,[2,3]],[,,,,,,,,,[-1]],,,,\"RS\",,,,,,,,,,,,,,,,,,[,,\"112|9[2-4]\",,,,\"92\",,,[2,3]],,[,,\"1[189]\\\\d{1,4}|9[2-4]\",,,,\"92\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,\n[,,,,,,,,,[-1]]],RU:[,[,,\"[01]\\\\d\\\\d?\",,,,,,,[2,3]],,,[,,\"112|(?:0|10)[1-3]\",,,,\"01\"],[,,,,,,,,,[-1]],,,,\"RU\",,,,,,,,,,,,,,,,,,[,,\"112|(?:0|10)[1-3]\",,,,\"01\"],,[,,\"112|(?:0|10)[1-4]\",,,,\"01\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,[,,,,,,,,,[-1]]],RW:[,[,,\"[14]\\\\d\\\\d\",,,,,,,[3]],,,[,,\"11[1245]\",,,,\"111\"],[,,,,,,,,,[-1]],,,,\"RW\",,,,,,,,,,,,,,,,,,[,,\"11[12]\",,,,\"111\"],,[,,\"1(?:0[0-2]|1[0-24-6]|2[13]|70|99)|456\",,,,\"100\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,[,,,,,,,,,[-1]]],SA:[,[,,\"[19]\\\\d{2,5}\",,,,,,,[3,4,\n5,6]],,,[,,\"11(?:2|6\\\\d{3})|9(?:11|37|9[7-9])\",,,,\"112\",,,[3,6]],[,,,,,,,,,[-1]],,,,\"SA\",,,,,,,,,,,,,,,,,,[,,\"112|9(?:11|9[79])\",,,,\"112\",,,[3]],,[,,\"1(?:1(?:00|2|6111)|410|9(?:00|1[89]|9(?:099|22|9[0-3])))|9(?:0[24-79]|11|3[379]|40|66|8[5-9]|9[02-9])\",,,,\"112\"],[,,\"141\\\\d\",,,,\"1410\",,,[4]],[,,\"1(?:10|41)\\\\d|90[24679]\",,,,\"902\",,,[3,4]],,[,,,,,,,,,[-1]]],SB:[,[,,\"[127-9]\\\\d\\\\d\",,,,,,,[3]],,,[,,\"999\",,,,\"999\"],[,,,,,,,,,[-1]],,,,\"SB\",,,,,,,,,,,,,,,,,,[,,\"999\",,,,\"999\"],,[,,\"1(?:[02]\\\\d|1[12]|[35][01]|[49][1-9]|6[2-9]|7[7-9]|8[0-8])|269|777|835|9(?:[01]1|22|33|55|77|88|99)\",\n,,,\"100\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,[,,,,,,,,,[-1]]],SC:[,[,,\"[19]\\\\d{2,3}\",,,,,,,[3,4]],,,[,,\"1(?:1[1468]|60)|999\",,,,\"111\",,,[3]],[,,,,,,,,,[-1]],,,,\"SC\",,,,,,,,,,,,,,,,,,[,,\"999\",,,,\"999\",,,[3]],,[,,\"1(?:[06]\\\\d|1[0-246-8]|2[0-8]|3[13]|4[0-2]|5[15]|7[124-6]|8[158]|9[015])|9(?:6\\\\d\\\\d|99)\",,,,\"100\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,[,,,,,,,,,[-1]]],SD:[,[,,\"9\\\\d\\\\d\",,,,,,,[3]],,,[,,\"999\",,,,\"999\"],[,,,,,,,,,[-1]],,,,\"SD\",,,,,,,,,,,,,,,,,,[,,\"999\",,,,\"999\"],,[,,\"999\",,,,\"999\"],[,,,,,,,,,[-1]],\n[,,,,,,,,,[-1]],,[,,,,,,,,,[-1]]],SE:[,[,,\"[1-37-9]\\\\d{2,5}\",,,,,,,[3,4,5,6]],,,[,,\"11(?:2|(?:3|6\\\\d)\\\\d\\\\d|414|77)|900\\\\d\\\\d\",,,,\"112\"],[,,\"11811[89]|72\\\\d{3}\",,,,\"72000\",,,[5,6]],,,,\"SE\",,,,,,,,,,,,,,,,,,[,,\"112|90000\",,,,\"112\",,,[3,5]],,[,,\"11(?:[25]|313|6(?:00[06]|1(?:1[17]|23))|7[0-8])|2(?:2[02358]|33|4[01]|50|6[1-4])|32[13]|8(?:22|88)|9(?:0(?:00|51)0|12)|(?:11(?:4|8[02-46-9])|7\\\\d\\\\d|90[2-4])\\\\d\\\\d|(?:118|90)1(?:[02-9]\\\\d|1[013-9])\",,,,\"112\"],[,,,,,,,,,[-1]],[,,\"2(?:2[02358]|33|4[01]|50|6[1-4])|32[13]|8(?:22|88)|912\",\n,,,\"220\",,,[3]],,[,,\"7\\\\d{4}\",,,,\"70000\",,,[5]]],SG:[,[,,\"[179]\\\\d{2,4}\",,,,,,,[3,4,5]],,,[,,\"99[359]\",,,,\"993\",,,[3]],[,,,,,,,,,[-1]],,,,\"SG\",,,,,,,,,,,,,,,,,,[,,\"99[359]\",,,,\"993\",,,[3]],,[,,\"1(?:(?:[01368]\\\\d|44)\\\\d|[57]\\\\d{2,3}|9(?:0[1-9]|[1-9]\\\\d))|77222|99[02-9]|100\",,,,\"100\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,[,,\"772\\\\d\\\\d\",,,,\"77200\",,,[5]]],SH:[,[,,\"[129]\\\\d{2,4}\",,,,,,,[3,4,5]],,,[,,\"9(?:11|99)\",,,,\"911\",,,[3]],[,,,,,,,,,[-1]],,,,\"SH\",,,,,,,,,,,,,,,,,,[,,\"9(?:11|99)\",,,,\"911\",,,[3]],,[,,\n\"1\\\\d{2,3}|26[01]\\\\d\\\\d|9(?:11|99)\",,,,\"100\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,[,,,,,,,,,[-1]]],SI:[,[,,\"1\\\\d{2,5}\",,,,,,,[3,4,5,6]],,,[,,\"11(?:(?:0|6\\\\d)\\\\d\\\\d|[23]|8\\\\d\\\\d?)\",,,,\"112\"],[,,,,,,,,,[-1]],,,,\"SI\",,,,,,,,,,,,,,,,,,[,,\"11[23]\",,,,\"112\",,,[3]],,[,,\"1(?:1(?:00[146]|[23]|6(?:000|1(?:11|23))|8(?:[08]|99))|9(?:059|1(?:0[12]|16)|5|70|87|9(?:00|[149])))|19(?:08|81)[09]\",,,,\"112\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,[,,,,,,,,,[-1]]],SJ:[,[,,\"[01]\\\\d\\\\d(?:\\\\d{2})?\",,,,,,,[3,5]],,,[,,\"11[023]\",,,\n,\"110\",,,[3]],[,,,,,,,,,[-1]],,,,\"SJ\",,,,,,,,,,,,,,,,,,[,,\"11[023]\",,,,\"110\",,,[3]],,[,,\"04\\\\d{3}|11[023]\",,,,\"110\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,[,,\"04\\\\d{3}\",,,,\"04000\",,,[5]]],SK:[,[,,\"1\\\\d{2,5}\",,,,,,,[3,4,5,6]],,,[,,\"1(?:1(?:2|6\\\\d{3})|5[058])\",,,,\"112\",,,[3,6]],[,,,,,,,,,[-1]],,,,\"SK\",,,,,,,,,,,,,,,,,,[,,\"1(?:12|5[058])\",,,,\"112\",,,[3]],,[,,\"1(?:1(?:2|6(?:000|111)|8[0-8])|[248]\\\\d{3}|5[0589])\",,,,\"112\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,[,,,,,,,,,[-1]]],SL:[,[,,\"[069]\\\\d\\\\d(?:\\\\d{2})?\",,\n,,,,,[3,5]],,,[,,\"(?:01|99)9\",,,,\"019\",,,[3]],[,,,,,,,,,[-1]],,,,\"SL\",,,,,,,,,,,,,,,,,,[,,\"(?:01|99)9\",,,,\"019\",,,[3]],,[,,\"(?:01|99)9|60400\",,,,\"019\"],[,,,,,,,,,[-1]],[,,\"604\\\\d\\\\d\",,,,\"60400\",,,[5]],,[,,\"604\\\\d\\\\d\",,,,\"60400\",,,[5]]],SM:[,[,,\"1\\\\d\\\\d\",,,,,,,[3]],,,[,,\"11[358]\",,,,\"113\"],[,,,,,,,,,[-1]],,,,\"SM\",,,,,,,,,,,,,,,,,,[,,\"11[358]\",,,,\"113\"],,[,,\"11[358]\",,,,\"113\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,[,,,,,,,,,[-1]]],SN:[,[,,\"[12]\\\\d{1,5}\",,,,,,,[2,3,4,5,6]],,,[,,\"1(?:515|[78])|2(?:00|1)\\\\d{3}\",\n,,,\"17\",,,[2,4,5,6]],[,,\"2(?:0[246]|[468])\\\\d{3}\",,,,\"24000\",,,[5,6]],,,,\"SN\",,,,,,,,,,,,,,,,,,[,,\"1[78]\",,,,\"17\",,,[2]],,[,,\"1(?:1[69]|(?:[246]\\\\d|51)\\\\d)|2(?:0[0-246]|[12468])\\\\d{3}|1[278]\",,,,\"12\"],[,,\"2(?:01|2)\\\\d{3}\",,,,\"22000\",,,[5,6]],[,,\"1[46]\\\\d\\\\d\",,,,\"1400\",,,[4]],,[,,\"2[468]\\\\d{3}\",,,,\"24000\",,,[5]]],SO:[,[,,\"[57-9]\\\\d\\\\d\",,,,,,,[3]],,,[,,\"555|888|999\",,,,\"555\"],[,,,,,,,,,[-1]],,,,\"SO\",,,,,,,,,,,,,,,,,,[,,\"555|888|999\",,,,\"555\"],,[,,\"555|777|888|999\",,,,\"555\"],[,,,,,,,,,[-1]],[,,,,,,,\n,,[-1]],,[,,,,,,,,,[-1]]],SR:[,[,,\"1\\\\d{2,3}\",,,,,,,[3,4]],,,[,,\"115\",,,,\"115\",,,[3]],[,,,,,,,,,[-1]],,,,\"SR\",,,,,,,,,,,,,,,,,,[,,\"115\",,,,\"115\",,,[3]],,[,,\"1\\\\d{2,3}\",,,,\"100\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,[,,,,,,,,,[-1]]],SS:[,[,,\"9\\\\d\\\\d\",,,,,,,[3]],,,[,,\"999\",,,,\"999\"],[,,,,,,,,,[-1]],,,,\"SS\",,,,,,,,,,,,,,,,,,[,,\"999\",,,,\"999\"],,[,,\"999\",,,,\"999\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,[,,,,,,,,,[-1]]],ST:[,[,,\"1\\\\d\\\\d\",,,,,,,[3]],,,[,,\"112\",,,,\"112\"],[,,,,,,,,,[-1]],,,,\"ST\",,,,,,,,,,,,,,,,,,[,\n,\"112\",,,,\"112\"],,[,,\"112\",,,,\"112\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,[,,,,,,,,,[-1]]],SV:[,[,,\"[149]\\\\d\\\\d(?:\\\\d{2,3})?\",,,,,,,[3,5,6]],,,[,,\"116\\\\d{3}|911\",,,,\"911\",,,[3,6]],[,,,,,,,,,[-1]],,,,\"SV\",,,,,,,,,,,,,,,,,,[,,\"91[13]\",,,,\"911\",,,[3]],,[,,\"1(?:1(?:2|6111)|2[136-8]|3[0-6]|9[05])|40404|9(?:1\\\\d|29)\",,,,\"112\"],[,,,,,,,,,[-1]],[,,\"404\\\\d\\\\d\",,,,\"40400\",,,[5]],,[,,\"404\\\\d\\\\d\",,,,\"40400\",,,[5]]],SX:[,[,,\"9\\\\d\\\\d\",,,,,,,[3]],,,[,,\"9(?:19|88)\",,,,\"919\"],[,,,,,,,,,[-1]],,,,\"SX\",,,,,,,,,,,,,,,,,,\n[,,\"919\",,,,\"919\"],,[,,\"9(?:19|88)\",,,,\"919\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,[,,,,,,,,,[-1]]],SY:[,[,,\"1\\\\d\\\\d\",,,,,,,[3]],,,[,,\"11[023]\",,,,\"110\"],[,,,,,,,,,[-1]],,,,\"SY\",,,,,,,,,,,,,,,,,,[,,\"11[023]\",,,,\"110\"],,[,,\"11[023]\",,,,\"110\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,[,,,,,,,,,[-1]]],SZ:[,[,,\"9\\\\d\\\\d\",,,,,,,[3]],,,[,,\"999\",,,,\"999\"],[,,,,,,,,,[-1]],,,,\"SZ\",,,,,,,,,,,,,,,,,,[,,\"999\",,,,\"999\"],,[,,\"999\",,,,\"999\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,[,,,,,,,,,[-1]]],TC:[,[,,\"9\\\\d\\\\d\",,,,,,,[3]],,,[,\n,\"9(?:11|88|99)\",,,,\"911\"],[,,,,,,,,,[-1]],,,,\"TC\",,,,,,,,,,,,,,,,,,[,,\"9(?:11|99)\",,,,\"911\"],,[,,\"9(?:11|88|99)\",,,,\"911\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,[,,,,,,,,,[-1]]],TD:[,[,,\"1\\\\d\",,,,,,,[2]],,,[,,\"1[78]\",,,,\"17\"],[,,,,,,,,,[-1]],,,,\"TD\",,,,,,,,,,,,,,,,,,[,,\"1[78]\",,,,\"17\"],,[,,\"1[78]\",,,,\"17\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,[,,,,,,,,,[-1]]],TG:[,[,,\"1\\\\d{2,3}\",,,,,,,[3,4]],,,[,,\"1(?:1[78]|7[127])\",,,,\"117\",,,[3]],[,,,,,,,,,[-1]],,,,\"TG\",,,,,,,,,,,,,,,,,,[,,\"1(?:1[78]|7[127])\",,,,\"117\",\n,,[3]],,[,,\"1(?:011|1[078]|7[127])\",,,,\"110\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,[,,,,,,,,,[-1]]],TH:[,[,,\"1\\\\d{2,3}\",,,,,,,[3,4]],,,[,,\"1(?:1(?:00|2[03]|3[3479]|7[67]|9[0246])|578|6(?:44|6[79]|88|9[16])|88\\\\d|9[19])|1[15]55\",,,,\"191\"],[,,\"1(?:113|2[23]\\\\d|5(?:09|56))\",,,,\"1113\",,,[4]],,,,\"TH\",,,,,,,,,,,,,,,,,,[,,\"1(?:669|9[19])\",,,,\"191\"],,[,,\"1(?:0[0-2]|1(?:0[03]|1[1-35]|2[0358]|3[03-79]|4[02-489]|5[04-9]|6[04-79]|7[03-9]|8[027-9]|9[02-9])|2(?:22|3[89]|66)|3(?:18|2[23]|3[013]|5[56]|6[45]|73)|477|5(?:0\\\\d|4[0-37-9]|5[1-8]|6[01679]|7[12568]|8[0-24589]|9[013589])|6(?:0[0-29]|2[03]|4[3-6]|6[1-9]|7[0257-9]|8[0158]|9[014-9])|7(?:[14]9|7[27]|90)|888|9[19])\",\n,,,\"100\"],[,,\"1(?:1(?:03|1[15]|2[58]|3[056]|4[02-49]|5[046-9]|7[03-589]|9[57-9])|5(?:0[0-8]|4[0-378]|5[1-478]|7[156])|6(?:20|4[356]|6[1-68]|7[057-9]|8[015]|9[0457-9]))|1(?:1[68]|26|3[1-35]|5[689]|60|7[17])\\\\d\",,,,\"1103\",,,[4]],[,,\"114[89]\",,,,\"1148\",,,[4]],,[,,,,,,,,,[-1]]],TJ:[,[,,\"1\\\\d\\\\d\",,,,,,,[3]],,,[,,\"1(?:0[1-3]|12)\",,,,\"101\"],[,,,,,,,,,[-1]],,,,\"TJ\",,,,,,,,,,,,,,,,,,[,,\"1(?:0[1-3]|12)\",,,,\"101\"],,[,,\"1(?:0[1-3]|12)\",,,,\"101\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,[,,,,,,,,,[-1]]],TL:[,[,,\"1\\\\d\\\\d\",\n,,,,,,[3]],,,[,,\"11[25]\",,,,\"112\"],[,,,,,,,,,[-1]],,,,\"TL\",,,,,,,,,,,,,,,,,,[,,\"11[25]\",,,,\"112\"],,[,,\"1(?:0[02]|1[25]|2[0138]|72|9[07])\",,,,\"100\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,[,,,,,,,,,[-1]]],TM:[,[,,\"0\\\\d\",,,,,,,[2]],,,[,,\"0[1-49]\",,,,\"01\"],[,,,,,,,,,[-1]],,,,\"TM\",,,,,,,,,,,,,,,,,,[,,\"0[1-3]\",,,,\"01\"],,[,,\"0[1-49]\",,,,\"01\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,[,,,,,,,,,[-1]]],TN:[,[,,\"1\\\\d\\\\d\",,,,,,,[3]],,,[,,\"19[078]\",,,,\"190\"],[,,,,,,,,,[-1]],,,,\"TN\",,,,,,,,,,,,,,,,,,[,,\"19[078]\",,,,\"190\"],\n,[,,\"19[078]\",,,,\"190\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,[,,,,,,,,,[-1]]],TO:[,[,,\"9\\\\d\\\\d\",,,,,,,[3]],,,[,,\"9(?:11|22|33|99)\",,,,\"911\"],[,,,,,,,,,[-1]],,,,\"TO\",,,,,,,,,,,,,,,,,,[,,\"9(?:11|22|33|99)\",,,,\"911\"],,[,,\"9(?:11|22|33|99)\",,,,\"911\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,[,,,,,,,,,[-1]]],TR:[,[,,\"[1-9]\\\\d{2,4}\",,,,,,,[3,4,5]],,,[,,\"1(?:1[02]|22|3[126]|4[04]|5[15-9]|6[18]|77|83)\",,,,\"110\",,,[3]],[,,,,,,,,,[-1]],,,,\"TR\",,,,,,,,,,,,,,,,,,[,,\"1(?:1[02]|55)\",,,,\"110\",,,[3]],,[,,\"1(?:1(?:[02-79]|8(?:1[018]|2[0245]|3[2-4]|42|5[058]|6[06]|7[07]|8[01389]|9[089]))|3(?:37|[58]6|65)|471|5(?:07|78)|6(?:[02]6|99)|8(?:63|95))|2(?:077|268|4(?:17|23)|5(?:7[26]|82)|6[14]4|8\\\\d\\\\d|9(?:30|89))|3(?:0(?:05|72)|353|4(?:06|30|64)|502|674|747|851|9(?:1[29]|60))|4(?:0(?:25|3[12]|[47]2)|3(?:3[13]|[89]1)|439|5(?:43|55)|717|832)|5(?:145|290|[4-6]\\\\d\\\\d|772|833|9(?:[06]1|92))|6(?:236|6(?:12|39|8[59])|769)|7890|8(?:688|7(?:28|65)|85[06])|9(?:159|290)|1[2-9]\\\\d\",\n,,,\"110\"],[,,\"(?:285|542)0\",,,,\"2850\",,,[4]],[,,,,,,,,,[-1]],,[,,\"1(?:3(?:37|[58]6|65)|4(?:4|71)|5(?:07|78)|6(?:[02]6|99)|8(?:3|63|95))|(?:2(?:07|26|4[12]|5[78]|6[14]|8\\\\d|9[38])|3(?:0[07]|[38]5|4[036]|50|67|74|9[16])|4(?:0[2-47]|3[389]|[48]3|5[45]|71)|5(?:14|29|[4-6]\\\\d|77|83|9[069])|6(?:23|6[138]|76)|789|8(?:68|7[26]|85)|9(?:15|29))\\\\d\",,,,\"144\",,,[3,4]]],TT:[,[,,\"9\\\\d\\\\d\",,,,,,,[3]],,,[,,\"9(?:88|9[09])\",,,,\"988\"],[,,,,,,,,,[-1]],,,,\"TT\",,,,,,,,,,,,,,,,,,[,,\"99[09]\",,,,\"990\"],,[,,\"9(?:88|9[09])\",\n,,,\"988\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,[,,,,,,,,,[-1]]],TV:[,[,,\"[19]\\\\d\\\\d\",,,,,,,[3]],,,[,,\"911\",,,,\"911\"],[,,,,,,,,,[-1]],,,,\"TV\",,,,,,,,,,,,,,,,,,[,,\"911\",,,,\"911\"],,[,,\"1\\\\d\\\\d|911\",,,,\"100\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,[,,,,,,,,,[-1]]],TW:[,[,,\"1\\\\d{2,3}\",,,,,,,[3,4]],,,[,,\"11[0289]|1(?:81|92)\\\\d\",,,,\"110\"],[,,\"10[56]\",,,,\"105\",,,[3]],,,,\"TW\",,,,,,,,,,,,,,,,,,[,,\"11[029]\",,,,\"110\",,,[3]],,[,,\"1(?:0[04-6]|1[0237-9]|3[389]|6[05-8]|7[07]|8(?:0|11)|9(?:19|22|5[057]|68|8[05]|9[15689]))\",\n,,,\"100\"],[,,\"1(?:65|9(?:1\\\\d|50|85|98))\",,,,\"165\"],[,,,,,,,,,[-1]],,[,,,,,,,,,[-1]]],TZ:[,[,,\"[149]\\\\d\\\\d(?:\\\\d{2})?\",,,,,,,[3,5]],,,[,,\"1(?:1[0-79]|9[09])|999\",,,,\"110\",,,[3]],[,,,,,,,,,[-1]],,,,\"TZ\",,,,,,,,,,,,,,,,,,[,,\"11[0-245]|999\",,,,\"110\",,,[3]],,[,,\"1(?:1\\\\d|9[09])|46400|999\",,,,\"110\"],[,,,,,,,,,[-1]],[,,\"464\\\\d\\\\d\",,,,\"46400\",,,[5]],,[,,\"464\\\\d\\\\d\",,,,\"46400\",,,[5]]],UA:[,[,,\"[189]\\\\d{2,5}\",,,,,,,[3,4,5,6]],,,[,,\"1(?:0[1-3]|1(?:2|6\\\\d{3}))\",,,,\"101\",,,[3,6]],[,,,,,,,,,[-1]],,,,\"UA\",,,,,\n,,,,,,,,,,,,,[,,\"1(?:0[1-3]|12)\",,,,\"101\",,,[3]],,[,,\"1(?:0[1-49]|1(?:2|6(?:000|1(?:11|23))|8\\\\d\\\\d?)|(?:[278]|5\\\\d)\\\\d)|[89]00\\\\d\\\\d?|151|1(?:06|4\\\\d|6)\\\\d\\\\d\",,,,\"101\"],[,,,,,,,,,[-1]],[,,\"(?:118|[89]00)\\\\d\\\\d?\",,,,\"1180\",,,[4,5]],,[,,,,,,,,,[-1]]],UG:[,[,,\"9\\\\d\\\\d\",,,,,,,[3]],,,[,,\"999\",,,,\"999\"],[,,,,,,,,,[-1]],,,,\"UG\",,,,,,,,,,,,,,,,,,[,,\"999\",,,,\"999\"],,[,,\"999\",,,,\"999\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,[,,,,,,,,,[-1]]],US:[,[,,\"[1-9]\\\\d{2,5}\",,,,,,,[3,4,5,6]],,,[,,\"112|611|9(?:11|33|88)\",\n,,,\"112\",,,[3]],[,,\"24280|(?:381|968)35|4(?:3355|7553|8221)|5(?:(?:489|934)2|5928)|72078|(?:323|960)40|(?:276|414)63|(?:2(?:520|744)|7390|9968)9|(?:693|732|976)88|(?:3(?:556|825)|5294|8623|9729)4|(?:3378|4136|7642|8961|9979)6|(?:4(?:6(?:15|32)|827)|(?:591|720)8|9529)7\",,,,\"24280\",,,[5]],,,,\"US\",,,,,,,,,,,,,,,,,,[,,\"112|911\",,,,\"112\",,,[3]],,[,,\"11(?:2|5[1-47]|[68]\\\\d|7[0-57]|98)|[2-9]\\\\d{3,5}|[2-8]11|9(?:11|33|88)\",,,,\"112\"],[,,\"2(?:3333|(?:4224|7562|900)2|56447|6688)|3(?:1010|2665|7404)|40404|560560|6(?:0060|22639|5246|7622)|7(?:0701|3822|4666)|8(?:(?:3825|7226)5|4816)|99099\",\n,,,\"23333\",,,[5,6]],[,,\"336\\\\d\\\\d|[2-9]\\\\d{3}|[2356]11\",,,,\"211\",,,[3,4,5]],,[,,\"[2-9]\\\\d{4,5}\",,,,\"20000\",,,[5,6]]],UY:[,[,,\"[129]\\\\d{2,4}\",,,,,,,[3,4,5]],,,[,,\"128|911\",,,,\"128\",,,[3]],[,,,,,,,,,[-1]],,,,\"UY\",,,,,,,,,,,,,,,,,,[,,\"128|911\",,,,\"128\",,,[3]],,[,,\"1(?:0[4-9]|1[2368]|2[0-3568]|787|997\\\\d?)|21997|911\",,,,\"104\"],[,,\"178\\\\d\",,,,\"1780\",,,[4]],[,,,,,,,,,[-1]],,[,,,,,,,,,[-1]]],UZ:[,[,,\"[04]\\\\d(?:\\\\d(?:\\\\d{2})?)?\",,,,,,,[2,3,5]],,,[,,\"0(?:0[1-3]|[1-3]|50)\",,,,\"01\",,,[2,3]],[,,,,,,,,,[-1]],\n,,,\"UZ\",,,,,,,,,,,,,,,,,,[,,\"0(?:0[1-3]|[1-3]|50)\",,,,\"01\",,,[2,3]],,[,,\"0(?:0[1-3]|[1-3]|50)|45400\",,,,\"01\"],[,,,,,,,,,[-1]],[,,\"454\\\\d\\\\d\",,,,\"45400\",,,[5]],,[,,\"454\\\\d\\\\d\",,,,\"45400\",,,[5]]],VA:[,[,,\"1\\\\d\\\\d\",,,,,,,[3]],,,[,,\"11[2358]\",,,,\"112\"],[,,,,,,,,,[-1]],,,,\"VA\",,,,,,,,,,,,,,,,,,[,,\"11[2358]\",,,,\"112\"],,[,,\"11[2358]\",,,,\"112\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,[,,,,,,,,,[-1]]],VC:[,[,,\"9\\\\d\\\\d\",,,,,,,[3]],,,[,,\"9(?:11|88|99)\",,,,\"911\"],[,,,,,,,,,[-1]],,,,\"VC\",,,,,,,,,,,,,,,,,,[,,\"9(?:11|99)\",\n,,,\"911\"],,[,,\"9(?:11|88|99)\",,,,\"911\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,[,,,,,,,,,[-1]]],VE:[,[,,\"[19]\\\\d\\\\d\",,,,,,,[3]],,,[,,\"1(?:12|71)|911\",,,,\"112\"],[,,,,,,,,,[-1]],,,,\"VE\",,,,,,,,,,,,,,,,,,[,,\"1(?:12|71)|911\",,,,\"112\"],,[,,\"1(?:12|71)|911\",,,,\"112\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,[,,,,,,,,,[-1]]],VG:[,[,,\"9\\\\d\\\\d\",,,,,,,[3]],,,[,,\"9(?:11|88|99)\",,,,\"911\"],[,,,,,,,,,[-1]],,,,\"VG\",,,,,,,,,,,,,,,,,,[,,\"9(?:11|99)\",,,,\"911\"],,[,,\"9(?:11|88|99)\",,,,\"911\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,[,,,,\n,,,,,[-1]]],VI:[,[,,\"9\\\\d\\\\d\",,,,,,,[3]],,,[,,\"9(?:11|88)\",,,,\"911\"],[,,,,,,,,,[-1]],,,,\"VI\",,,,,,,,,,,,,,,,,,[,,\"911\",,,,\"911\"],,[,,\"9(?:11|88)\",,,,\"911\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,[,,,,,,,,,[-1]]],VN:[,[,,\"1\\\\d\\\\d\",,,,,,,[3]],,,[,,\"11[3-5]\",,,,\"113\"],[,,,,,,,,,[-1]],,,,\"VN\",,,,,,,,,,,,,,,,,,[,,\"11[3-5]\",,,,\"113\"],,[,,\"11[3-5]\",,,,\"113\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,[,,,,,,,,,[-1]]],VU:[,[,,\"1\\\\d\\\\d\",,,,,,,[3]],,,[,,\"112\",,,,\"112\"],[,,,,,,,,,[-1]],,,,\"VU\",,,,,,,,,,,,,,,,,,[,,\"112\",,,,\n\"112\"],,[,,\"112\",,,,\"112\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,[,,,,,,,,,[-1]]],WF:[,[,,\"1\\\\d\",,,,,,,[2]],,,[,,\"1[578]\",,,,\"15\"],[,,,,,,,,,[-1]],,,,\"WF\",,,,,,,,,,,,,,,,,,[,,\"1[578]\",,,,\"15\"],,[,,\"1[578]\",,,,\"15\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,[,,,,,,,,,[-1]]],WS:[,[,,\"[19]\\\\d\\\\d\",,,,,,,[3]],,,[,,\"9(?:11|9[4-69])\",,,,\"911\"],[,,,,,,,,,[-1]],,,,\"WS\",,,,,,,,,,,,,,,,,,[,,\"9(?:11|9[4-69])\",,,,\"911\"],,[,,\"1(?:1[12]|2[0-6]|[39]0)|9(?:11|9[4-79])\",,,,\"111\"],[,,,,,,,,,[-1]],[,,\"12[0-6]\",,,,\"120\"],,[,,,,,,,\n,,[-1]]],XK:[,[,,\"1\\\\d\\\\d\",,,,,,,[3]],,,[,,\"1(?:12|9[2-4])\",,,,\"112\"],[,,,,,,,,,[-1]],,,,\"XK\",,,,,,,,,,,,,,,,,,[,,\"1(?:12|9[2-4])\",,,,\"112\"],,[,,\"1(?:12|9[2-4])\",,,,\"112\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,[,,,,,,,,,[-1]]],YE:[,[,,\"1\\\\d\\\\d\",,,,,,,[3]],,,[,,\"19[1459]\",,,,\"191\"],[,,,,,,,,,[-1]],,,,\"YE\",,,,,,,,,,,,,,,,,,[,,\"19[1459]\",,,,\"191\"],,[,,\"19[1459]\",,,,\"191\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,[,,,,,,,,,[-1]]],YT:[,[,,\"1\\\\d\\\\d?\",,,,,,,[2,3]],,,[,,\"1(?:12|5)\",,,,\"15\"],[,,,,,,,,,[-1]],,,,\"YT\",,,\n,,,,,,,,,,,,,,,[,,\"1(?:12|5)\",,,,\"15\"],,[,,\"1(?:12|5)\",,,,\"15\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,[,,,,,,,,,[-1]]],ZA:[,[,,\"[134]\\\\d{2,4}\",,,,,,,[3,4,5]],,,[,,\"1(?:01\\\\d\\\\d|12)\",,,,\"112\",,,[3,5]],[,,\"41(?:348|851)\",,,,\"41348\",,,[5]],,,,\"ZA\",,,,,,,,,,,,,,,,,,[,,\"1(?:01(?:11|77)|12)\",,,,\"112\",,,[3,5]],,[,,\"1(?:0(?:1(?:11|77)|20|7)|1[12]|77(?:3[237]|[45]7|6[279]|9[26]))|[34]\\\\d{4}\",,,,\"107\"],[,,\"3(?:078[23]|7(?:064|567)|8126)|4(?:394[16]|7751|8837)|4[23]699\",,,,\"30782\",,,[5]],[,,\"111\",,,,\"111\",,,[3]],\n,[,,\"[34]\\\\d{4}\",,,,\"30000\",,,[5]]],ZM:[,[,,\"[19]\\\\d\\\\d\",,,,,,,[3]],,,[,,\"112|99[139]\",,,,\"112\"],[,,,,,,,,,[-1]],,,,\"ZM\",,,,,,,,,,,,,,,,,,[,,\"112|99[139]\",,,,\"112\"],,[,,\"112|99[139]\",,,,\"112\"],[,,,,,,,,,[-1]],[,,,,,,,,,[-1]],,[,,,,,,,,,[-1]]],ZW:[,[,,\"[139]\\\\d\\\\d(?:\\\\d{2})?\",,,,,,,[3,5]],,,[,,\"112|9(?:5[023]|61|9[3-59])\",,,,\"112\",,,[3]],[,,\"3[013-57-9]\\\\d{3}\",,,,\"30000\",,,[5]],,,,\"ZW\",,,,,,,,,,,,,,,,,,[,,\"112|99[3-59]\",,,,\"112\",,,[3]],,[,,\"11[2469]|3[013-57-9]\\\\d{3}|9(?:5[023]|6[0-25]|9[3-59])\",,\n,,\"112\"],[,,,,,,,,,[-1]],[,,\"114|9(?:5[023]|6[0-25])\",,,,\"114\",,,[3]],,[,,,,,,,,,[-1]]]};/*\n\n Copyright (C) 2018 The Libphonenumber Authors.\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n*/\ni18n.phonenumbers.ShortNumberInfo=function(){this.regionToMetadataMap={}};goog.addSingletonGetter(i18n.phonenumbers.ShortNumberInfo);i18n.phonenumbers.ShortNumberInfo.REGIONS_WHERE_EMERGENCY_NUMBERS_MUST_BE_EXACT_=[\"BR\",\"CL\",\"NI\"];i18n.phonenumbers.ShortNumberInfo.ShortNumberCost={TOLL_FREE:0,STANDARD_RATE:1,PREMIUM_RATE:2,UNKNOWN_COST:3};i18n.phonenumbers.ShortNumberInfo.prototype.getRegionCodesForCountryCode_=function(a){return(a=i18n.phonenumbers.metadata.countryCodeToRegionCodeMap[a])?a:[]};\ni18n.phonenumbers.ShortNumberInfo.prototype.regionDialingFromMatchesNumber_=function(a,b){a=this.getRegionCodesForCountryCode_(a.getCountryCodeOrDefault());return null!=b&&a.includes(b)};i18n.phonenumbers.ShortNumberInfo.prototype.isPossibleShortNumberForRegion=function(a,b){if(!this.regionDialingFromMatchesNumber_(a,b))return!1;b=this.getMetadataForRegion_(b);if(!b)return!1;a=this.getNationalSignificantNumber_(a).length;return b.getGeneralDesc().possibleLengthArray().includes(a)};\ni18n.phonenumbers.ShortNumberInfo.prototype.isPossibleShortNumber=function(a){var b=this.getRegionCodesForCountryCode_(a.getCountryCodeOrDefault());a=this.getNationalSignificantNumber_(a).length;for(var c=0;c<b.length;c++){var d=this.getMetadataForRegion_(b[c]);if(d&&d.getGeneralDesc().possibleLengthArray().includes(a))return!0}return!1};\ni18n.phonenumbers.ShortNumberInfo.prototype.isValidShortNumberForRegion=function(a,b){if(!this.regionDialingFromMatchesNumber_(a,b))return!1;b=this.getMetadataForRegion_(b);if(!b)return!1;a=this.getNationalSignificantNumber_(a);var c=b.getGeneralDesc();if(!this.matchesPossibleNumberAndNationalNumber_(a,c))return!1;b=b.getShortCode();return this.matchesPossibleNumberAndNationalNumber_(a,b)};\ni18n.phonenumbers.ShortNumberInfo.prototype.isValidShortNumber=function(a){var b=this.getRegionCodesForCountryCode_(a.getCountryCodeOrDefault()),c=this.getRegionCodeForShortNumberFromRegionList_(a,b);return 1<b.length&&null!=c?!0:this.isValidShortNumberForRegion(a,c)};\ni18n.phonenumbers.ShortNumberInfo.prototype.getExpectedCostForRegion=function(a,b){var c=i18n.phonenumbers.ShortNumberInfo.ShortNumberCost;if(!this.regionDialingFromMatchesNumber_(a,b))return c.UNKNOWN_COST;var d=this.getMetadataForRegion_(b);if(!d)return c.UNKNOWN_COST;a=this.getNationalSignificantNumber_(a);return d.getGeneralDesc().possibleLengthArray().includes(a.length)?this.matchesPossibleNumberAndNationalNumber_(a,d.getPremiumRate())?c.PREMIUM_RATE:this.matchesPossibleNumberAndNationalNumber_(a,\nd.getStandardRate())?c.STANDARD_RATE:this.matchesPossibleNumberAndNationalNumber_(a,d.getTollFree())||this.isEmergencyNumber(a,b)?c.TOLL_FREE:c.UNKNOWN_COST:c.UNKNOWN_COST};\ni18n.phonenumbers.ShortNumberInfo.prototype.getExpectedCost=function(a){var b=i18n.phonenumbers.ShortNumberInfo.ShortNumberCost,c=this.getRegionCodesForCountryCode_(a.getCountryCodeOrDefault());if(0===c.length)return b.UNKNOWN_COST;if(1===c.length)return this.getExpectedCostForRegion(a,c[0]);for(var d=b.TOLL_FREE,e=0;e<c.length;e++){var f=this.getExpectedCostForRegion(a,c[e]);switch(f){case b.PREMIUM_RATE:return b.PREMIUM_RATE;case b.UNKNOWN_COST:d=b.UNKNOWN_COST;break;case b.STANDARD_RATE:d!==b.UNKNOWN_COST&&\n(d=b.STANDARD_RATE);break;case b.TOLL_FREE:break;default:throw Error(\"Unrecognized cost for region: \"+f);}}return d};i18n.phonenumbers.ShortNumberInfo.prototype.getRegionCodeForShortNumberFromRegionList_=function(a,b){if(0===b.length)return null;if(1===b.length)return b[0];a=this.getNationalSignificantNumber_(a);for(var c=0;c<b.length;c++){var d=b[c],e=this.getMetadataForRegion_(d);if(e&&this.matchesPossibleNumberAndNationalNumber_(a,e.getShortCode()))return d}return null};\ni18n.phonenumbers.ShortNumberInfo.prototype.getSupportedRegions=function(){return Object.keys(i18n.phonenumbers.shortnumbermetadata.countryToMetadata).filter(function(a){return isNaN(a)})};i18n.phonenumbers.ShortNumberInfo.prototype.getExampleShortNumber=function(a){a=this.getMetadataForRegion_(a);if(!a)return\"\";a=a.getShortCode();return a.hasExampleNumber()?a.getExampleNumber()||\"\":\"\"};\ni18n.phonenumbers.ShortNumberInfo.prototype.getExampleShortNumberForCost=function(a,b){a=this.getMetadataForRegion_(a);if(!a)return\"\";var c=i18n.phonenumbers.ShortNumberInfo.ShortNumberCost,d=null;switch(b){case c.TOLL_FREE:d=a.getTollFree();break;case c.STANDARD_RATE:d=a.getStandardRate();break;case c.PREMIUM_RATE:d=a.getPremiumRate()}return d&&d.hasExampleNumber()?d.getExampleNumber()||\"\":\"\"};\ni18n.phonenumbers.ShortNumberInfo.prototype.connectsToEmergencyNumber=function(a,b){return this.matchesEmergencyNumberHelper_(a,b,!0)};i18n.phonenumbers.ShortNumberInfo.prototype.isEmergencyNumber=function(a,b){return this.matchesEmergencyNumberHelper_(a,b,!1)};\ni18n.phonenumbers.ShortNumberInfo.prototype.getMetadataForRegion_=function(a){if(!a)return null;a=a.toUpperCase();var b=this.regionToMetadataMap[a];if(null==b){b=new goog.proto2.PbLiteSerializer;var c=i18n.phonenumbers.shortnumbermetadata.countryToMetadata[a];if(null==c)return null;b=b.deserialize(i18n.phonenumbers.PhoneMetadata.getDescriptor(),c);this.regionToMetadataMap[a]=b}return b};\ni18n.phonenumbers.ShortNumberInfo.prototype.matchesEmergencyNumberHelper_=function(a,b,c){var d=i18n.phonenumbers.PhoneNumberUtil.extractPossibleNumber(a);if(i18n.phonenumbers.PhoneNumberUtil.LEADING_PLUS_CHARS_PATTERN.test(d))return!1;a=this.getMetadataForRegion_(b);if(null==a||!a.hasEmergency())return!1;d=i18n.phonenumbers.PhoneNumberUtil.normalizeDigitsOnly(d);b=c&&!i18n.phonenumbers.ShortNumberInfo.REGIONS_WHERE_EMERGENCY_NUMBERS_MUST_BE_EXACT_.includes(b);c=a.getEmergency().getNationalNumberPatternOrDefault();\nreturn i18n.phonenumbers.PhoneNumberUtil.matchesEntirely(c,d)||b&&i18n.phonenumbers.PhoneNumberUtil.matchesPrefix(c,d)};i18n.phonenumbers.ShortNumberInfo.prototype.isCarrierSpecific=function(a){var b=this.getRegionCodesForCountryCode_(a.getCountryCodeOrDefault());b=this.getRegionCodeForShortNumberFromRegionList_(a,b);a=this.getNationalSignificantNumber_(a);b=this.getMetadataForRegion_(b);return!!b&&this.matchesPossibleNumberAndNationalNumber_(a,b.getCarrierSpecific())};\ni18n.phonenumbers.ShortNumberInfo.prototype.isCarrierSpecificForRegion=function(a,b){if(!this.regionDialingFromMatchesNumber_(a,b))return!1;a=this.getNationalSignificantNumber_(a);b=this.getMetadataForRegion_(b);return!!b&&this.matchesPossibleNumberAndNationalNumber_(a,b.getCarrierSpecific())};\ni18n.phonenumbers.ShortNumberInfo.prototype.isSmsServiceForRegion=function(a,b){if(!this.regionDialingFromMatchesNumber_(a,b))return!1;b=this.getMetadataForRegion_(b);a=this.getNationalSignificantNumber_(a);return!!b&&this.matchesPossibleNumberAndNationalNumber_(a,b.getSmsServices())};\ni18n.phonenumbers.ShortNumberInfo.prototype.getNationalSignificantNumber_=function(a){if(!a.hasNationalNumber())return\"\";var b=\"\"+a.getNationalNumber();return a.hasItalianLeadingZero()&&a.getItalianLeadingZero()&&0<a.getNumberOfLeadingZerosOrDefault()?Array(a.getNumberOfLeadingZerosOrDefault()+1).join(\"0\")+b:b};\ni18n.phonenumbers.ShortNumberInfo.prototype.matchesPossibleNumberAndNationalNumber_=function(a,b){return 0<b.possibleLengthArray().length&&!b.possibleLengthArray().includes(a.length)?!1:i18n.phonenumbers.PhoneNumberUtil.matchesEntirely(b.getNationalNumberPatternOrDefault(),a.toString())};i18n.phonenumbers.AsYouTypeFormatter=function(a){this.DIGIT_PLACEHOLDER_=\"\\u2008\";this.DIGIT_PATTERN_=new RegExp(this.DIGIT_PLACEHOLDER_);this.currentOutput_=\"\";this.formattingTemplate_=new goog.string.StringBuffer;this.currentFormattingPattern_=\"\";this.accruedInput_=new goog.string.StringBuffer;this.accruedInputWithoutFormatting_=new goog.string.StringBuffer;this.ableToFormat_=!0;this.isExpectingCountryCallingCode_=this.isCompleteNumber_=this.inputHasFormatting_=!1;this.phoneUtil_=i18n.phonenumbers.PhoneNumberUtil.getInstance();\nthis.positionToRemember_=this.originalPosition_=this.lastMatchPosition_=0;this.prefixBeforeNationalNumber_=new goog.string.StringBuffer;this.shouldAddSpaceAfterNationalPrefix_=!1;this.extractedNationalPrefix_=\"\";this.nationalNumber_=new goog.string.StringBuffer;this.possibleFormats_=[];this.defaultCountry_=a;this.defaultMetadata_=this.currentMetadata_=this.getMetadataForRegion_(this.defaultCountry_)};i18n.phonenumbers.AsYouTypeFormatter.SEPARATOR_BEFORE_NATIONAL_NUMBER_=\" \";\ni18n.phonenumbers.AsYouTypeFormatter.EMPTY_METADATA_=new i18n.phonenumbers.PhoneMetadata;i18n.phonenumbers.AsYouTypeFormatter.EMPTY_METADATA_.setInternationalPrefix(\"NA\");i18n.phonenumbers.AsYouTypeFormatter.ELIGIBLE_FORMAT_PATTERN_=new RegExp(\"^[\"+i18n.phonenumbers.PhoneNumberUtil.VALID_PUNCTUATION+\"]*\\\\$1[\"+i18n.phonenumbers.PhoneNumberUtil.VALID_PUNCTUATION+\"]*(\\\\$\\\\d[\"+i18n.phonenumbers.PhoneNumberUtil.VALID_PUNCTUATION+\"]*)*$\");\ni18n.phonenumbers.AsYouTypeFormatter.NATIONAL_PREFIX_SEPARATORS_PATTERN_=/[- ]/;i18n.phonenumbers.AsYouTypeFormatter.MIN_LEADING_DIGITS_LENGTH_=3;i18n.phonenumbers.AsYouTypeFormatter.prototype.getMetadataForRegion_=function(a){a=this.phoneUtil_.getCountryCodeForRegion(a);a=this.phoneUtil_.getRegionCodeForCountryCode(a);a=this.phoneUtil_.getMetadataForRegion(a);return null!=a?a:i18n.phonenumbers.AsYouTypeFormatter.EMPTY_METADATA_};\ni18n.phonenumbers.AsYouTypeFormatter.prototype.maybeCreateNewTemplate_=function(){for(var a=this.possibleFormats_.length,b=0;b<a;++b){var c=this.possibleFormats_[b],d=c.getPatternOrDefault();if(this.currentFormattingPattern_==d)return!1;if(this.createFormattingTemplate_(c))return this.currentFormattingPattern_=d,this.shouldAddSpaceAfterNationalPrefix_=i18n.phonenumbers.AsYouTypeFormatter.NATIONAL_PREFIX_SEPARATORS_PATTERN_.test(c.getNationalPrefixFormattingRule()),this.lastMatchPosition_=0,!0}return this.ableToFormat_=\n!1};\ni18n.phonenumbers.AsYouTypeFormatter.prototype.getAvailableFormats_=function(a){for(var b=this.isCompleteNumber_&&0==this.extractedNationalPrefix_.length&&0<this.currentMetadata_.intlNumberFormatCount()?this.currentMetadata_.intlNumberFormatArray():this.currentMetadata_.numberFormatArray(),c=b.length,d=0;d<c;++d){var e=b[d];0<this.extractedNationalPrefix_.length&&this.phoneUtil_.formattingRuleHasFirstGroupOnly(e.getNationalPrefixFormattingRuleOrDefault())&&!e.getNationalPrefixOptionalWhenFormatting()&&!e.hasDomesticCarrierCodeFormattingRule()||\n(0!=this.extractedNationalPrefix_.length||this.isCompleteNumber_||this.phoneUtil_.formattingRuleHasFirstGroupOnly(e.getNationalPrefixFormattingRuleOrDefault())||e.getNationalPrefixOptionalWhenFormatting())&&i18n.phonenumbers.AsYouTypeFormatter.ELIGIBLE_FORMAT_PATTERN_.test(e.getFormatOrDefault())&&this.possibleFormats_.push(e)}this.narrowDownPossibleFormats_(a)};\ni18n.phonenumbers.AsYouTypeFormatter.prototype.narrowDownPossibleFormats_=function(a){for(var b=[],c=a.length-i18n.phonenumbers.AsYouTypeFormatter.MIN_LEADING_DIGITS_LENGTH_,d=this.possibleFormats_.length,e=0;e<d;++e){var f=this.possibleFormats_[e];if(0==f.leadingDigitsPatternCount())b.push(this.possibleFormats_[e]);else{var g=Math.min(c,f.leadingDigitsPatternCount()-1);f=f.getLeadingDigitsPattern(g);0==a.search(f)&&b.push(this.possibleFormats_[e])}}this.possibleFormats_=b};\ni18n.phonenumbers.AsYouTypeFormatter.prototype.createFormattingTemplate_=function(a){var b=a.getPatternOrDefault();this.formattingTemplate_.clear();a=this.getFormattingTemplate_(b,a.getFormatOrDefault());return 0<a.length?(this.formattingTemplate_.append(a),!0):!1};i18n.phonenumbers.AsYouTypeFormatter.prototype.getFormattingTemplate_=function(a,b){var c=\"999999999999999\".match(a)[0];if(c.length<this.nationalNumber_.getLength())return\"\";a=c.replace(new RegExp(a,\"g\"),b);return a=a.replace(/9/g,this.DIGIT_PLACEHOLDER_)};\ni18n.phonenumbers.AsYouTypeFormatter.prototype.clear=function(){this.currentOutput_=\"\";this.accruedInput_.clear();this.accruedInputWithoutFormatting_.clear();this.formattingTemplate_.clear();this.lastMatchPosition_=0;this.currentFormattingPattern_=\"\";this.prefixBeforeNationalNumber_.clear();this.extractedNationalPrefix_=\"\";this.nationalNumber_.clear();this.ableToFormat_=!0;this.inputHasFormatting_=!1;this.originalPosition_=this.positionToRemember_=0;this.isExpectingCountryCallingCode_=this.isCompleteNumber_=\n!1;this.possibleFormats_=[];this.shouldAddSpaceAfterNationalPrefix_=!1;this.currentMetadata_!=this.defaultMetadata_&&(this.currentMetadata_=this.getMetadataForRegion_(this.defaultCountry_))};i18n.phonenumbers.AsYouTypeFormatter.prototype.inputDigit=function(a){return this.currentOutput_=this.inputDigitWithOptionToRememberPosition_(a,!1)};\ni18n.phonenumbers.AsYouTypeFormatter.prototype.inputDigitAndRememberPosition=function(a){return this.currentOutput_=this.inputDigitWithOptionToRememberPosition_(a,!0)};\ni18n.phonenumbers.AsYouTypeFormatter.prototype.inputDigitWithOptionToRememberPosition_=function(a,b){this.accruedInput_.append(a);b&&(this.originalPosition_=this.accruedInput_.getLength());this.isDigitOrLeadingPlusSign_(a)?a=this.normalizeAndAccrueDigitsAndPlusSign_(a,b):(this.ableToFormat_=!1,this.inputHasFormatting_=!0);if(!this.ableToFormat_){if(!this.inputHasFormatting_)if(this.attemptToExtractIdd_()){if(this.attemptToExtractCountryCallingCode_())return this.attemptToChoosePatternWithPrefixExtracted_()}else if(this.ableToExtractLongerNdd_())return this.prefixBeforeNationalNumber_.append(i18n.phonenumbers.AsYouTypeFormatter.SEPARATOR_BEFORE_NATIONAL_NUMBER_),this.attemptToChoosePatternWithPrefixExtracted_();\nreturn this.accruedInput_.toString()}switch(this.accruedInputWithoutFormatting_.getLength()){case 0:case 1:case 2:return this.accruedInput_.toString();case 3:if(this.attemptToExtractIdd_())this.isExpectingCountryCallingCode_=!0;else return this.extractedNationalPrefix_=this.removeNationalPrefixFromNationalNumber_(),this.attemptToChooseFormattingPattern_();default:if(this.isExpectingCountryCallingCode_)return this.attemptToExtractCountryCallingCode_()&&(this.isExpectingCountryCallingCode_=!1),this.prefixBeforeNationalNumber_.toString()+\nthis.nationalNumber_.toString();if(0<this.possibleFormats_.length){a=this.inputDigitHelper_(a);b=this.attemptToFormatAccruedDigits_();if(0<b.length)return b;this.narrowDownPossibleFormats_(this.nationalNumber_.toString());return this.maybeCreateNewTemplate_()?this.inputAccruedNationalNumber_():this.ableToFormat_?this.appendNationalNumber_(a):this.accruedInput_.toString()}return this.attemptToChooseFormattingPattern_()}};\ni18n.phonenumbers.AsYouTypeFormatter.prototype.attemptToChoosePatternWithPrefixExtracted_=function(){this.ableToFormat_=!0;this.isExpectingCountryCallingCode_=!1;this.possibleFormats_=[];this.lastMatchPosition_=0;this.formattingTemplate_.clear();this.currentFormattingPattern_=\"\";return this.attemptToChooseFormattingPattern_()};i18n.phonenumbers.AsYouTypeFormatter.prototype.getExtractedNationalPrefix_=function(){return this.extractedNationalPrefix_};\ni18n.phonenumbers.AsYouTypeFormatter.prototype.ableToExtractLongerNdd_=function(){if(0<this.extractedNationalPrefix_.length){var a=this.nationalNumber_.toString();this.nationalNumber_.clear();this.nationalNumber_.append(this.extractedNationalPrefix_);this.nationalNumber_.append(a);a=this.prefixBeforeNationalNumber_.toString();var b=a.lastIndexOf(this.extractedNationalPrefix_);this.prefixBeforeNationalNumber_.clear();this.prefixBeforeNationalNumber_.append(a.substring(0,b))}return this.extractedNationalPrefix_!=\nthis.removeNationalPrefixFromNationalNumber_()};i18n.phonenumbers.AsYouTypeFormatter.prototype.isDigitOrLeadingPlusSign_=function(a){return i18n.phonenumbers.PhoneNumberUtil.CAPTURING_DIGIT_PATTERN.test(a)||1==this.accruedInput_.getLength()&&i18n.phonenumbers.PhoneNumberUtil.PLUS_CHARS_PATTERN.test(a)};\ni18n.phonenumbers.AsYouTypeFormatter.prototype.attemptToFormatAccruedDigits_=function(){for(var a=this.nationalNumber_.toString(),b=this.possibleFormats_.length,c=0;c<b;++c){var d=this.possibleFormats_[c],e=d.getPatternOrDefault();if((new RegExp(\"^(?:\"+e+\")$\")).test(a)&&(this.shouldAddSpaceAfterNationalPrefix_=i18n.phonenumbers.AsYouTypeFormatter.NATIONAL_PREFIX_SEPARATORS_PATTERN_.test(d.getNationalPrefixFormattingRule()),d=a.replace(new RegExp(e,\"g\"),d.getFormat()),d=this.appendNationalNumber_(d),\ni18n.phonenumbers.PhoneNumberUtil.normalizeDiallableCharsOnly(d)==this.accruedInputWithoutFormatting_))return d}return\"\"};\ni18n.phonenumbers.AsYouTypeFormatter.prototype.appendNationalNumber_=function(a){var b=this.prefixBeforeNationalNumber_.getLength();return this.shouldAddSpaceAfterNationalPrefix_&&0<b&&this.prefixBeforeNationalNumber_.toString().charAt(b-1)!=i18n.phonenumbers.AsYouTypeFormatter.SEPARATOR_BEFORE_NATIONAL_NUMBER_?this.prefixBeforeNationalNumber_+i18n.phonenumbers.AsYouTypeFormatter.SEPARATOR_BEFORE_NATIONAL_NUMBER_+a:this.prefixBeforeNationalNumber_+a};\ni18n.phonenumbers.AsYouTypeFormatter.prototype.getRememberedPosition=function(){if(!this.ableToFormat_)return this.originalPosition_;for(var a=0,b=0,c=this.accruedInputWithoutFormatting_.toString(),d=this.currentOutput_.toString();a<this.positionToRemember_&&b<d.length;)c.charAt(a)==d.charAt(b)&&a++,b++;return b};\ni18n.phonenumbers.AsYouTypeFormatter.prototype.attemptToChooseFormattingPattern_=function(){var a=this.nationalNumber_.toString();return a.length>=i18n.phonenumbers.AsYouTypeFormatter.MIN_LEADING_DIGITS_LENGTH_?(this.getAvailableFormats_(a),a=this.attemptToFormatAccruedDigits_(),0<a.length?a:this.maybeCreateNewTemplate_()?this.inputAccruedNationalNumber_():this.accruedInput_.toString()):this.appendNationalNumber_(a)};\ni18n.phonenumbers.AsYouTypeFormatter.prototype.inputAccruedNationalNumber_=function(){var a=this.nationalNumber_.toString(),b=a.length;if(0<b){for(var c=\"\",d=0;d<b;d++)c=this.inputDigitHelper_(a.charAt(d));return this.ableToFormat_?this.appendNationalNumber_(c):this.accruedInput_.toString()}return this.prefixBeforeNationalNumber_.toString()};\ni18n.phonenumbers.AsYouTypeFormatter.prototype.isNanpaNumberWithNationalPrefix_=function(){if(1!=this.currentMetadata_.getCountryCode())return!1;var a=this.nationalNumber_.toString();return\"1\"==a.charAt(0)&&\"0\"!=a.charAt(1)&&\"1\"!=a.charAt(1)};\ni18n.phonenumbers.AsYouTypeFormatter.prototype.removeNationalPrefixFromNationalNumber_=function(){var a=this.nationalNumber_.toString(),b=0;if(this.isNanpaNumberWithNationalPrefix_())b=1,this.prefixBeforeNationalNumber_.append(\"1\").append(i18n.phonenumbers.AsYouTypeFormatter.SEPARATOR_BEFORE_NATIONAL_NUMBER_),this.isCompleteNumber_=!0;else if(this.currentMetadata_.hasNationalPrefixForParsing()){var c=new RegExp(\"^(?:\"+this.currentMetadata_.getNationalPrefixForParsing()+\")\");c=a.match(c);null!=c&&\nnull!=c[0]&&0<c[0].length&&(this.isCompleteNumber_=!0,b=c[0].length,this.prefixBeforeNationalNumber_.append(a.substring(0,b)))}this.nationalNumber_.clear();this.nationalNumber_.append(a.substring(b));return a.substring(0,b)};\ni18n.phonenumbers.AsYouTypeFormatter.prototype.attemptToExtractIdd_=function(){var a=this.accruedInputWithoutFormatting_.toString(),b=new RegExp(\"^(?:\\\\\"+i18n.phonenumbers.PhoneNumberUtil.PLUS_SIGN+\"|\"+this.currentMetadata_.getInternationalPrefix()+\")\");b=a.match(b);return null!=b&&null!=b[0]&&0<b[0].length?(this.isCompleteNumber_=!0,b=b[0].length,this.nationalNumber_.clear(),this.nationalNumber_.append(a.substring(b)),this.prefixBeforeNationalNumber_.clear(),this.prefixBeforeNationalNumber_.append(a.substring(0,\nb)),a.charAt(0)!=i18n.phonenumbers.PhoneNumberUtil.PLUS_SIGN&&this.prefixBeforeNationalNumber_.append(i18n.phonenumbers.AsYouTypeFormatter.SEPARATOR_BEFORE_NATIONAL_NUMBER_),!0):!1};\ni18n.phonenumbers.AsYouTypeFormatter.prototype.attemptToExtractCountryCallingCode_=function(){if(0==this.nationalNumber_.getLength())return!1;var a=new goog.string.StringBuffer,b=this.phoneUtil_.extractCountryCode(this.nationalNumber_,a);if(0==b)return!1;this.nationalNumber_.clear();this.nationalNumber_.append(a.toString());a=this.phoneUtil_.getRegionCodeForCountryCode(b);i18n.phonenumbers.PhoneNumberUtil.REGION_CODE_FOR_NON_GEO_ENTITY==a?this.currentMetadata_=this.phoneUtil_.getMetadataForNonGeographicalRegion(b):\na!=this.defaultCountry_&&(this.currentMetadata_=this.getMetadataForRegion_(a));this.prefixBeforeNationalNumber_.append(\"\"+b).append(i18n.phonenumbers.AsYouTypeFormatter.SEPARATOR_BEFORE_NATIONAL_NUMBER_);this.extractedNationalPrefix_=\"\";return!0};\ni18n.phonenumbers.AsYouTypeFormatter.prototype.normalizeAndAccrueDigitsAndPlusSign_=function(a,b){if(a==i18n.phonenumbers.PhoneNumberUtil.PLUS_SIGN){var c=a;this.accruedInputWithoutFormatting_.append(a)}else c=i18n.phonenumbers.PhoneNumberUtil.DIGIT_MAPPINGS[a],this.accruedInputWithoutFormatting_.append(c),this.nationalNumber_.append(c);b&&(this.positionToRemember_=this.accruedInputWithoutFormatting_.getLength());return c};\ni18n.phonenumbers.AsYouTypeFormatter.prototype.inputDigitHelper_=function(a){var b=this.formattingTemplate_.toString();if(0<=b.substring(this.lastMatchPosition_).search(this.DIGIT_PATTERN_)){var c=b.search(this.DIGIT_PATTERN_);a=b.replace(this.DIGIT_PATTERN_,a);this.formattingTemplate_.clear();this.formattingTemplate_.append(a);this.lastMatchPosition_=c;return a.substring(0,this.lastMatchPosition_+1)}1==this.possibleFormats_.length&&(this.ableToFormat_=!1);this.currentFormattingPattern_=\"\";return this.accruedInput_.toString()};Object.defineProperty(exports,\"__esModule\",{value:!0});exports.default=i18n.phonenumbers;module.exports=exports[\"default\"];\n\n}).call(this)}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{}]},{},[1])(1)\n});\n","'use strict'\nvar Buffer = require('safe-buffer').Buffer\nvar Transform = require('stream').Transform\nvar inherits = require('inherits')\n\nfunction HashBase (blockSize) {\n  Transform.call(this)\n\n  this._block = Buffer.allocUnsafe(blockSize)\n  this._blockSize = blockSize\n  this._blockOffset = 0\n  this._length = [0, 0, 0, 0]\n\n  this._finalized = false\n}\n\ninherits(HashBase, Transform)\n\nHashBase.prototype._transform = function (chunk, encoding, callback) {\n  var error = null\n  try {\n    this.update(chunk, encoding)\n  } catch (err) {\n    error = err\n  }\n\n  callback(error)\n}\n\nHashBase.prototype._flush = function (callback) {\n  var error = null\n  try {\n    this.push(this.digest())\n  } catch (err) {\n    error = err\n  }\n\n  callback(error)\n}\n\nvar useUint8Array = typeof Uint8Array !== 'undefined'\nvar useArrayBuffer = typeof ArrayBuffer !== 'undefined' &&\n  typeof Uint8Array !== 'undefined' &&\n  ArrayBuffer.isView &&\n  (Buffer.prototype instanceof Uint8Array || Buffer.TYPED_ARRAY_SUPPORT)\n\nfunction toBuffer (data, encoding) {\n  // No need to do anything for exact instance\n  // This is only valid when safe-buffer.Buffer === buffer.Buffer, i.e. when Buffer.from/Buffer.alloc existed\n  if (data instanceof Buffer) return data\n\n  // Convert strings to Buffer\n  if (typeof data === 'string') return Buffer.from(data, encoding)\n\n  /*\n   * Wrap any TypedArray instances and DataViews\n   * Makes sense only on engines with full TypedArray support -- let Buffer detect that\n   */\n  if (useArrayBuffer && ArrayBuffer.isView(data)) {\n    if (data.byteLength === 0) return Buffer.alloc(0) // Bug in Node.js <6.3.1, which treats this as out-of-bounds\n    var res = Buffer.from(data.buffer, data.byteOffset, data.byteLength)\n    // Recheck result size, as offset/length doesn't work on Node.js <5.10\n    // We just go to Uint8Array case if this fails\n    if (res.byteLength === data.byteLength) return res\n  }\n\n  /*\n   * Uint8Array in engines where Buffer.from might not work with ArrayBuffer, just copy over\n   * Doesn't make sense with other TypedArray instances\n   */\n  if (useUint8Array && data instanceof Uint8Array) return Buffer.from(data)\n\n  /*\n   * Old Buffer polyfill on an engine that doesn't have TypedArray support\n   * Also, this is from a different Buffer polyfill implementation then we have, as instanceof check failed\n   * Convert to our current Buffer implementation\n   */\n  if (\n    Buffer.isBuffer(data) &&\n    data.constructor &&\n    typeof data.constructor.isBuffer === 'function' &&\n    data.constructor.isBuffer(data)\n  ) {\n    return Buffer.from(data)\n  }\n\n  throw new TypeError('The \"data\" argument must be of type string or an instance of Buffer, TypedArray, or DataView.')\n}\n\nHashBase.prototype.update = function (data, encoding) {\n  if (this._finalized) throw new Error('Digest already called')\n\n  data = toBuffer(data, encoding) // asserts correct input type\n\n  // consume data\n  var block = this._block\n  var offset = 0\n  while (this._blockOffset + data.length - offset >= this._blockSize) {\n    for (var i = this._blockOffset; i < this._blockSize;) block[i++] = data[offset++]\n    this._update()\n    this._blockOffset = 0\n  }\n  while (offset < data.length) block[this._blockOffset++] = data[offset++]\n\n  // update length\n  for (var j = 0, carry = data.length * 8; carry > 0; ++j) {\n    this._length[j] += carry\n    carry = (this._length[j] / 0x0100000000) | 0\n    if (carry > 0) this._length[j] -= 0x0100000000 * carry\n  }\n\n  return this\n}\n\nHashBase.prototype._update = function () {\n  throw new Error('_update is not implemented')\n}\n\nHashBase.prototype.digest = function (encoding) {\n  if (this._finalized) throw new Error('Digest already called')\n  this._finalized = true\n\n  var digest = this._digest()\n  if (encoding !== undefined) digest = digest.toString(encoding)\n\n  // reset state\n  this._block.fill(0)\n  this._blockOffset = 0\n  for (var i = 0; i < 4; ++i) this._length[i] = 0\n\n  return digest\n}\n\nHashBase.prototype._digest = function () {\n  throw new Error('_digest is not implemented')\n}\n\nmodule.exports = HashBase\n","var hash = exports;\n\nhash.utils = require('./hash/utils');\nhash.common = require('./hash/common');\nhash.sha = require('./hash/sha');\nhash.ripemd = require('./hash/ripemd');\nhash.hmac = require('./hash/hmac');\n\n// Proxy hash functions to the main object\nhash.sha1 = hash.sha.sha1;\nhash.sha256 = hash.sha.sha256;\nhash.sha224 = hash.sha.sha224;\nhash.sha384 = hash.sha.sha384;\nhash.sha512 = hash.sha.sha512;\nhash.ripemd160 = hash.ripemd.ripemd160;\n","'use strict';\n\nvar utils = require('./utils');\nvar assert = require('minimalistic-assert');\n\nfunction BlockHash() {\n  this.pending = null;\n  this.pendingTotal = 0;\n  this.blockSize = this.constructor.blockSize;\n  this.outSize = this.constructor.outSize;\n  this.hmacStrength = this.constructor.hmacStrength;\n  this.padLength = this.constructor.padLength / 8;\n  this.endian = 'big';\n\n  this._delta8 = this.blockSize / 8;\n  this._delta32 = this.blockSize / 32;\n}\nexports.BlockHash = BlockHash;\n\nBlockHash.prototype.update = function update(msg, enc) {\n  // Convert message to array, pad it, and join into 32bit blocks\n  msg = utils.toArray(msg, enc);\n  if (!this.pending)\n    this.pending = msg;\n  else\n    this.pending = this.pending.concat(msg);\n  this.pendingTotal += msg.length;\n\n  // Enough data, try updating\n  if (this.pending.length >= this._delta8) {\n    msg = this.pending;\n\n    // Process pending data in blocks\n    var r = msg.length % this._delta8;\n    this.pending = msg.slice(msg.length - r, msg.length);\n    if (this.pending.length === 0)\n      this.pending = null;\n\n    msg = utils.join32(msg, 0, msg.length - r, this.endian);\n    for (var i = 0; i < msg.length; i += this._delta32)\n      this._update(msg, i, i + this._delta32);\n  }\n\n  return this;\n};\n\nBlockHash.prototype.digest = function digest(enc) {\n  this.update(this._pad());\n  assert(this.pending === null);\n\n  return this._digest(enc);\n};\n\nBlockHash.prototype._pad = function pad() {\n  var len = this.pendingTotal;\n  var bytes = this._delta8;\n  var k = bytes - ((len + this.padLength) % bytes);\n  var res = new Array(k + this.padLength);\n  res[0] = 0x80;\n  for (var i = 1; i < k; i++)\n    res[i] = 0;\n\n  // Append length\n  len <<= 3;\n  if (this.endian === 'big') {\n    for (var t = 8; t < this.padLength; t++)\n      res[i++] = 0;\n\n    res[i++] = 0;\n    res[i++] = 0;\n    res[i++] = 0;\n    res[i++] = 0;\n    res[i++] = (len >>> 24) & 0xff;\n    res[i++] = (len >>> 16) & 0xff;\n    res[i++] = (len >>> 8) & 0xff;\n    res[i++] = len & 0xff;\n  } else {\n    res[i++] = len & 0xff;\n    res[i++] = (len >>> 8) & 0xff;\n    res[i++] = (len >>> 16) & 0xff;\n    res[i++] = (len >>> 24) & 0xff;\n    res[i++] = 0;\n    res[i++] = 0;\n    res[i++] = 0;\n    res[i++] = 0;\n\n    for (t = 8; t < this.padLength; t++)\n      res[i++] = 0;\n  }\n\n  return res;\n};\n","'use strict';\n\nvar utils = require('./utils');\nvar assert = require('minimalistic-assert');\n\nfunction Hmac(hash, key, enc) {\n  if (!(this instanceof Hmac))\n    return new Hmac(hash, key, enc);\n  this.Hash = hash;\n  this.blockSize = hash.blockSize / 8;\n  this.outSize = hash.outSize / 8;\n  this.inner = null;\n  this.outer = null;\n\n  this._init(utils.toArray(key, enc));\n}\nmodule.exports = Hmac;\n\nHmac.prototype._init = function init(key) {\n  // Shorten key, if needed\n  if (key.length > this.blockSize)\n    key = new this.Hash().update(key).digest();\n  assert(key.length <= this.blockSize);\n\n  // Add padding to key\n  for (var i = key.length; i < this.blockSize; i++)\n    key.push(0);\n\n  for (i = 0; i < key.length; i++)\n    key[i] ^= 0x36;\n  this.inner = new this.Hash().update(key);\n\n  // 0x36 ^ 0x5c = 0x6a\n  for (i = 0; i < key.length; i++)\n    key[i] ^= 0x6a;\n  this.outer = new this.Hash().update(key);\n};\n\nHmac.prototype.update = function update(msg, enc) {\n  this.inner.update(msg, enc);\n  return this;\n};\n\nHmac.prototype.digest = function digest(enc) {\n  this.outer.update(this.inner.digest());\n  return this.outer.digest(enc);\n};\n","'use strict';\n\nvar utils = require('./utils');\nvar common = require('./common');\n\nvar rotl32 = utils.rotl32;\nvar sum32 = utils.sum32;\nvar sum32_3 = utils.sum32_3;\nvar sum32_4 = utils.sum32_4;\nvar BlockHash = common.BlockHash;\n\nfunction RIPEMD160() {\n  if (!(this instanceof RIPEMD160))\n    return new RIPEMD160();\n\n  BlockHash.call(this);\n\n  this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0 ];\n  this.endian = 'little';\n}\nutils.inherits(RIPEMD160, BlockHash);\nexports.ripemd160 = RIPEMD160;\n\nRIPEMD160.blockSize = 512;\nRIPEMD160.outSize = 160;\nRIPEMD160.hmacStrength = 192;\nRIPEMD160.padLength = 64;\n\nRIPEMD160.prototype._update = function update(msg, start) {\n  var A = this.h[0];\n  var B = this.h[1];\n  var C = this.h[2];\n  var D = this.h[3];\n  var E = this.h[4];\n  var Ah = A;\n  var Bh = B;\n  var Ch = C;\n  var Dh = D;\n  var Eh = E;\n  for (var j = 0; j < 80; j++) {\n    var T = sum32(\n      rotl32(\n        sum32_4(A, f(j, B, C, D), msg[r[j] + start], K(j)),\n        s[j]),\n      E);\n    A = E;\n    E = D;\n    D = rotl32(C, 10);\n    C = B;\n    B = T;\n    T = sum32(\n      rotl32(\n        sum32_4(Ah, f(79 - j, Bh, Ch, Dh), msg[rh[j] + start], Kh(j)),\n        sh[j]),\n      Eh);\n    Ah = Eh;\n    Eh = Dh;\n    Dh = rotl32(Ch, 10);\n    Ch = Bh;\n    Bh = T;\n  }\n  T = sum32_3(this.h[1], C, Dh);\n  this.h[1] = sum32_3(this.h[2], D, Eh);\n  this.h[2] = sum32_3(this.h[3], E, Ah);\n  this.h[3] = sum32_3(this.h[4], A, Bh);\n  this.h[4] = sum32_3(this.h[0], B, Ch);\n  this.h[0] = T;\n};\n\nRIPEMD160.prototype._digest = function digest(enc) {\n  if (enc === 'hex')\n    return utils.toHex32(this.h, 'little');\n  else\n    return utils.split32(this.h, 'little');\n};\n\nfunction f(j, x, y, z) {\n  if (j <= 15)\n    return x ^ y ^ z;\n  else if (j <= 31)\n    return (x & y) | ((~x) & z);\n  else if (j <= 47)\n    return (x | (~y)) ^ z;\n  else if (j <= 63)\n    return (x & z) | (y & (~z));\n  else\n    return x ^ (y | (~z));\n}\n\nfunction K(j) {\n  if (j <= 15)\n    return 0x00000000;\n  else if (j <= 31)\n    return 0x5a827999;\n  else if (j <= 47)\n    return 0x6ed9eba1;\n  else if (j <= 63)\n    return 0x8f1bbcdc;\n  else\n    return 0xa953fd4e;\n}\n\nfunction Kh(j) {\n  if (j <= 15)\n    return 0x50a28be6;\n  else if (j <= 31)\n    return 0x5c4dd124;\n  else if (j <= 47)\n    return 0x6d703ef3;\n  else if (j <= 63)\n    return 0x7a6d76e9;\n  else\n    return 0x00000000;\n}\n\nvar r = [\n  0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n  7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,\n  3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,\n  1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,\n  4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13\n];\n\nvar rh = [\n  5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,\n  6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,\n  15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,\n  8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,\n  12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11\n];\n\nvar s = [\n  11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,\n  7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,\n  11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,\n  11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,\n  9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6\n];\n\nvar sh = [\n  8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,\n  9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,\n  9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,\n  15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,\n  8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11\n];\n","'use strict';\n\nexports.sha1 = require('./sha/1');\nexports.sha224 = require('./sha/224');\nexports.sha256 = require('./sha/256');\nexports.sha384 = require('./sha/384');\nexports.sha512 = require('./sha/512');\n","'use strict';\n\nvar utils = require('../utils');\nvar common = require('../common');\nvar shaCommon = require('./common');\n\nvar rotl32 = utils.rotl32;\nvar sum32 = utils.sum32;\nvar sum32_5 = utils.sum32_5;\nvar ft_1 = shaCommon.ft_1;\nvar BlockHash = common.BlockHash;\n\nvar sha1_K = [\n  0x5A827999, 0x6ED9EBA1,\n  0x8F1BBCDC, 0xCA62C1D6\n];\n\nfunction SHA1() {\n  if (!(this instanceof SHA1))\n    return new SHA1();\n\n  BlockHash.call(this);\n  this.h = [\n    0x67452301, 0xefcdab89, 0x98badcfe,\n    0x10325476, 0xc3d2e1f0 ];\n  this.W = new Array(80);\n}\n\nutils.inherits(SHA1, BlockHash);\nmodule.exports = SHA1;\n\nSHA1.blockSize = 512;\nSHA1.outSize = 160;\nSHA1.hmacStrength = 80;\nSHA1.padLength = 64;\n\nSHA1.prototype._update = function _update(msg, start) {\n  var W = this.W;\n\n  for (var i = 0; i < 16; i++)\n    W[i] = msg[start + i];\n\n  for(; i < W.length; i++)\n    W[i] = rotl32(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16], 1);\n\n  var a = this.h[0];\n  var b = this.h[1];\n  var c = this.h[2];\n  var d = this.h[3];\n  var e = this.h[4];\n\n  for (i = 0; i < W.length; i++) {\n    var s = ~~(i / 20);\n    var t = sum32_5(rotl32(a, 5), ft_1(s, b, c, d), e, W[i], sha1_K[s]);\n    e = d;\n    d = c;\n    c = rotl32(b, 30);\n    b = a;\n    a = t;\n  }\n\n  this.h[0] = sum32(this.h[0], a);\n  this.h[1] = sum32(this.h[1], b);\n  this.h[2] = sum32(this.h[2], c);\n  this.h[3] = sum32(this.h[3], d);\n  this.h[4] = sum32(this.h[4], e);\n};\n\nSHA1.prototype._digest = function digest(enc) {\n  if (enc === 'hex')\n    return utils.toHex32(this.h, 'big');\n  else\n    return utils.split32(this.h, 'big');\n};\n","'use strict';\n\nvar utils = require('../utils');\nvar SHA256 = require('./256');\n\nfunction SHA224() {\n  if (!(this instanceof SHA224))\n    return new SHA224();\n\n  SHA256.call(this);\n  this.h = [\n    0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939,\n    0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 ];\n}\nutils.inherits(SHA224, SHA256);\nmodule.exports = SHA224;\n\nSHA224.blockSize = 512;\nSHA224.outSize = 224;\nSHA224.hmacStrength = 192;\nSHA224.padLength = 64;\n\nSHA224.prototype._digest = function digest(enc) {\n  // Just truncate output\n  if (enc === 'hex')\n    return utils.toHex32(this.h.slice(0, 7), 'big');\n  else\n    return utils.split32(this.h.slice(0, 7), 'big');\n};\n\n","'use strict';\n\nvar utils = require('../utils');\nvar common = require('../common');\nvar shaCommon = require('./common');\nvar assert = require('minimalistic-assert');\n\nvar sum32 = utils.sum32;\nvar sum32_4 = utils.sum32_4;\nvar sum32_5 = utils.sum32_5;\nvar ch32 = shaCommon.ch32;\nvar maj32 = shaCommon.maj32;\nvar s0_256 = shaCommon.s0_256;\nvar s1_256 = shaCommon.s1_256;\nvar g0_256 = shaCommon.g0_256;\nvar g1_256 = shaCommon.g1_256;\n\nvar BlockHash = common.BlockHash;\n\nvar sha256_K = [\n  0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,\n  0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n  0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,\n  0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n  0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,\n  0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n  0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,\n  0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n  0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,\n  0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n  0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,\n  0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n  0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,\n  0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n  0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,\n  0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\n];\n\nfunction SHA256() {\n  if (!(this instanceof SHA256))\n    return new SHA256();\n\n  BlockHash.call(this);\n  this.h = [\n    0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,\n    0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19\n  ];\n  this.k = sha256_K;\n  this.W = new Array(64);\n}\nutils.inherits(SHA256, BlockHash);\nmodule.exports = SHA256;\n\nSHA256.blockSize = 512;\nSHA256.outSize = 256;\nSHA256.hmacStrength = 192;\nSHA256.padLength = 64;\n\nSHA256.prototype._update = function _update(msg, start) {\n  var W = this.W;\n\n  for (var i = 0; i < 16; i++)\n    W[i] = msg[start + i];\n  for (; i < W.length; i++)\n    W[i] = sum32_4(g1_256(W[i - 2]), W[i - 7], g0_256(W[i - 15]), W[i - 16]);\n\n  var a = this.h[0];\n  var b = this.h[1];\n  var c = this.h[2];\n  var d = this.h[3];\n  var e = this.h[4];\n  var f = this.h[5];\n  var g = this.h[6];\n  var h = this.h[7];\n\n  assert(this.k.length === W.length);\n  for (i = 0; i < W.length; i++) {\n    var T1 = sum32_5(h, s1_256(e), ch32(e, f, g), this.k[i], W[i]);\n    var T2 = sum32(s0_256(a), maj32(a, b, c));\n    h = g;\n    g = f;\n    f = e;\n    e = sum32(d, T1);\n    d = c;\n    c = b;\n    b = a;\n    a = sum32(T1, T2);\n  }\n\n  this.h[0] = sum32(this.h[0], a);\n  this.h[1] = sum32(this.h[1], b);\n  this.h[2] = sum32(this.h[2], c);\n  this.h[3] = sum32(this.h[3], d);\n  this.h[4] = sum32(this.h[4], e);\n  this.h[5] = sum32(this.h[5], f);\n  this.h[6] = sum32(this.h[6], g);\n  this.h[7] = sum32(this.h[7], h);\n};\n\nSHA256.prototype._digest = function digest(enc) {\n  if (enc === 'hex')\n    return utils.toHex32(this.h, 'big');\n  else\n    return utils.split32(this.h, 'big');\n};\n","'use strict';\n\nvar utils = require('../utils');\n\nvar SHA512 = require('./512');\n\nfunction SHA384() {\n  if (!(this instanceof SHA384))\n    return new SHA384();\n\n  SHA512.call(this);\n  this.h = [\n    0xcbbb9d5d, 0xc1059ed8,\n    0x629a292a, 0x367cd507,\n    0x9159015a, 0x3070dd17,\n    0x152fecd8, 0xf70e5939,\n    0x67332667, 0xffc00b31,\n    0x8eb44a87, 0x68581511,\n    0xdb0c2e0d, 0x64f98fa7,\n    0x47b5481d, 0xbefa4fa4 ];\n}\nutils.inherits(SHA384, SHA512);\nmodule.exports = SHA384;\n\nSHA384.blockSize = 1024;\nSHA384.outSize = 384;\nSHA384.hmacStrength = 192;\nSHA384.padLength = 128;\n\nSHA384.prototype._digest = function digest(enc) {\n  if (enc === 'hex')\n    return utils.toHex32(this.h.slice(0, 12), 'big');\n  else\n    return utils.split32(this.h.slice(0, 12), 'big');\n};\n","'use strict';\n\nvar utils = require('../utils');\nvar common = require('../common');\nvar assert = require('minimalistic-assert');\n\nvar rotr64_hi = utils.rotr64_hi;\nvar rotr64_lo = utils.rotr64_lo;\nvar shr64_hi = utils.shr64_hi;\nvar shr64_lo = utils.shr64_lo;\nvar sum64 = utils.sum64;\nvar sum64_hi = utils.sum64_hi;\nvar sum64_lo = utils.sum64_lo;\nvar sum64_4_hi = utils.sum64_4_hi;\nvar sum64_4_lo = utils.sum64_4_lo;\nvar sum64_5_hi = utils.sum64_5_hi;\nvar sum64_5_lo = utils.sum64_5_lo;\n\nvar BlockHash = common.BlockHash;\n\nvar sha512_K = [\n  0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,\n  0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,\n  0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,\n  0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,\n  0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,\n  0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,\n  0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,\n  0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,\n  0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,\n  0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,\n  0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,\n  0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,\n  0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,\n  0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,\n  0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,\n  0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,\n  0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,\n  0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,\n  0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,\n  0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,\n  0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,\n  0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,\n  0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,\n  0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,\n  0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,\n  0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,\n  0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,\n  0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,\n  0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,\n  0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,\n  0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,\n  0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,\n  0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,\n  0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,\n  0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,\n  0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,\n  0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,\n  0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,\n  0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,\n  0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817\n];\n\nfunction SHA512() {\n  if (!(this instanceof SHA512))\n    return new SHA512();\n\n  BlockHash.call(this);\n  this.h = [\n    0x6a09e667, 0xf3bcc908,\n    0xbb67ae85, 0x84caa73b,\n    0x3c6ef372, 0xfe94f82b,\n    0xa54ff53a, 0x5f1d36f1,\n    0x510e527f, 0xade682d1,\n    0x9b05688c, 0x2b3e6c1f,\n    0x1f83d9ab, 0xfb41bd6b,\n    0x5be0cd19, 0x137e2179 ];\n  this.k = sha512_K;\n  this.W = new Array(160);\n}\nutils.inherits(SHA512, BlockHash);\nmodule.exports = SHA512;\n\nSHA512.blockSize = 1024;\nSHA512.outSize = 512;\nSHA512.hmacStrength = 192;\nSHA512.padLength = 128;\n\nSHA512.prototype._prepareBlock = function _prepareBlock(msg, start) {\n  var W = this.W;\n\n  // 32 x 32bit words\n  for (var i = 0; i < 32; i++)\n    W[i] = msg[start + i];\n  for (; i < W.length; i += 2) {\n    var c0_hi = g1_512_hi(W[i - 4], W[i - 3]);  // i - 2\n    var c0_lo = g1_512_lo(W[i - 4], W[i - 3]);\n    var c1_hi = W[i - 14];  // i - 7\n    var c1_lo = W[i - 13];\n    var c2_hi = g0_512_hi(W[i - 30], W[i - 29]);  // i - 15\n    var c2_lo = g0_512_lo(W[i - 30], W[i - 29]);\n    var c3_hi = W[i - 32];  // i - 16\n    var c3_lo = W[i - 31];\n\n    W[i] = sum64_4_hi(\n      c0_hi, c0_lo,\n      c1_hi, c1_lo,\n      c2_hi, c2_lo,\n      c3_hi, c3_lo);\n    W[i + 1] = sum64_4_lo(\n      c0_hi, c0_lo,\n      c1_hi, c1_lo,\n      c2_hi, c2_lo,\n      c3_hi, c3_lo);\n  }\n};\n\nSHA512.prototype._update = function _update(msg, start) {\n  this._prepareBlock(msg, start);\n\n  var W = this.W;\n\n  var ah = this.h[0];\n  var al = this.h[1];\n  var bh = this.h[2];\n  var bl = this.h[3];\n  var ch = this.h[4];\n  var cl = this.h[5];\n  var dh = this.h[6];\n  var dl = this.h[7];\n  var eh = this.h[8];\n  var el = this.h[9];\n  var fh = this.h[10];\n  var fl = this.h[11];\n  var gh = this.h[12];\n  var gl = this.h[13];\n  var hh = this.h[14];\n  var hl = this.h[15];\n\n  assert(this.k.length === W.length);\n  for (var i = 0; i < W.length; i += 2) {\n    var c0_hi = hh;\n    var c0_lo = hl;\n    var c1_hi = s1_512_hi(eh, el);\n    var c1_lo = s1_512_lo(eh, el);\n    var c2_hi = ch64_hi(eh, el, fh, fl, gh, gl);\n    var c2_lo = ch64_lo(eh, el, fh, fl, gh, gl);\n    var c3_hi = this.k[i];\n    var c3_lo = this.k[i + 1];\n    var c4_hi = W[i];\n    var c4_lo = W[i + 1];\n\n    var T1_hi = sum64_5_hi(\n      c0_hi, c0_lo,\n      c1_hi, c1_lo,\n      c2_hi, c2_lo,\n      c3_hi, c3_lo,\n      c4_hi, c4_lo);\n    var T1_lo = sum64_5_lo(\n      c0_hi, c0_lo,\n      c1_hi, c1_lo,\n      c2_hi, c2_lo,\n      c3_hi, c3_lo,\n      c4_hi, c4_lo);\n\n    c0_hi = s0_512_hi(ah, al);\n    c0_lo = s0_512_lo(ah, al);\n    c1_hi = maj64_hi(ah, al, bh, bl, ch, cl);\n    c1_lo = maj64_lo(ah, al, bh, bl, ch, cl);\n\n    var T2_hi = sum64_hi(c0_hi, c0_lo, c1_hi, c1_lo);\n    var T2_lo = sum64_lo(c0_hi, c0_lo, c1_hi, c1_lo);\n\n    hh = gh;\n    hl = gl;\n\n    gh = fh;\n    gl = fl;\n\n    fh = eh;\n    fl = el;\n\n    eh = sum64_hi(dh, dl, T1_hi, T1_lo);\n    el = sum64_lo(dl, dl, T1_hi, T1_lo);\n\n    dh = ch;\n    dl = cl;\n\n    ch = bh;\n    cl = bl;\n\n    bh = ah;\n    bl = al;\n\n    ah = sum64_hi(T1_hi, T1_lo, T2_hi, T2_lo);\n    al = sum64_lo(T1_hi, T1_lo, T2_hi, T2_lo);\n  }\n\n  sum64(this.h, 0, ah, al);\n  sum64(this.h, 2, bh, bl);\n  sum64(this.h, 4, ch, cl);\n  sum64(this.h, 6, dh, dl);\n  sum64(this.h, 8, eh, el);\n  sum64(this.h, 10, fh, fl);\n  sum64(this.h, 12, gh, gl);\n  sum64(this.h, 14, hh, hl);\n};\n\nSHA512.prototype._digest = function digest(enc) {\n  if (enc === 'hex')\n    return utils.toHex32(this.h, 'big');\n  else\n    return utils.split32(this.h, 'big');\n};\n\nfunction ch64_hi(xh, xl, yh, yl, zh) {\n  var r = (xh & yh) ^ ((~xh) & zh);\n  if (r < 0)\n    r += 0x100000000;\n  return r;\n}\n\nfunction ch64_lo(xh, xl, yh, yl, zh, zl) {\n  var r = (xl & yl) ^ ((~xl) & zl);\n  if (r < 0)\n    r += 0x100000000;\n  return r;\n}\n\nfunction maj64_hi(xh, xl, yh, yl, zh) {\n  var r = (xh & yh) ^ (xh & zh) ^ (yh & zh);\n  if (r < 0)\n    r += 0x100000000;\n  return r;\n}\n\nfunction maj64_lo(xh, xl, yh, yl, zh, zl) {\n  var r = (xl & yl) ^ (xl & zl) ^ (yl & zl);\n  if (r < 0)\n    r += 0x100000000;\n  return r;\n}\n\nfunction s0_512_hi(xh, xl) {\n  var c0_hi = rotr64_hi(xh, xl, 28);\n  var c1_hi = rotr64_hi(xl, xh, 2);  // 34\n  var c2_hi = rotr64_hi(xl, xh, 7);  // 39\n\n  var r = c0_hi ^ c1_hi ^ c2_hi;\n  if (r < 0)\n    r += 0x100000000;\n  return r;\n}\n\nfunction s0_512_lo(xh, xl) {\n  var c0_lo = rotr64_lo(xh, xl, 28);\n  var c1_lo = rotr64_lo(xl, xh, 2);  // 34\n  var c2_lo = rotr64_lo(xl, xh, 7);  // 39\n\n  var r = c0_lo ^ c1_lo ^ c2_lo;\n  if (r < 0)\n    r += 0x100000000;\n  return r;\n}\n\nfunction s1_512_hi(xh, xl) {\n  var c0_hi = rotr64_hi(xh, xl, 14);\n  var c1_hi = rotr64_hi(xh, xl, 18);\n  var c2_hi = rotr64_hi(xl, xh, 9);  // 41\n\n  var r = c0_hi ^ c1_hi ^ c2_hi;\n  if (r < 0)\n    r += 0x100000000;\n  return r;\n}\n\nfunction s1_512_lo(xh, xl) {\n  var c0_lo = rotr64_lo(xh, xl, 14);\n  var c1_lo = rotr64_lo(xh, xl, 18);\n  var c2_lo = rotr64_lo(xl, xh, 9);  // 41\n\n  var r = c0_lo ^ c1_lo ^ c2_lo;\n  if (r < 0)\n    r += 0x100000000;\n  return r;\n}\n\nfunction g0_512_hi(xh, xl) {\n  var c0_hi = rotr64_hi(xh, xl, 1);\n  var c1_hi = rotr64_hi(xh, xl, 8);\n  var c2_hi = shr64_hi(xh, xl, 7);\n\n  var r = c0_hi ^ c1_hi ^ c2_hi;\n  if (r < 0)\n    r += 0x100000000;\n  return r;\n}\n\nfunction g0_512_lo(xh, xl) {\n  var c0_lo = rotr64_lo(xh, xl, 1);\n  var c1_lo = rotr64_lo(xh, xl, 8);\n  var c2_lo = shr64_lo(xh, xl, 7);\n\n  var r = c0_lo ^ c1_lo ^ c2_lo;\n  if (r < 0)\n    r += 0x100000000;\n  return r;\n}\n\nfunction g1_512_hi(xh, xl) {\n  var c0_hi = rotr64_hi(xh, xl, 19);\n  var c1_hi = rotr64_hi(xl, xh, 29);  // 61\n  var c2_hi = shr64_hi(xh, xl, 6);\n\n  var r = c0_hi ^ c1_hi ^ c2_hi;\n  if (r < 0)\n    r += 0x100000000;\n  return r;\n}\n\nfunction g1_512_lo(xh, xl) {\n  var c0_lo = rotr64_lo(xh, xl, 19);\n  var c1_lo = rotr64_lo(xl, xh, 29);  // 61\n  var c2_lo = shr64_lo(xh, xl, 6);\n\n  var r = c0_lo ^ c1_lo ^ c2_lo;\n  if (r < 0)\n    r += 0x100000000;\n  return r;\n}\n","'use strict';\n\nvar utils = require('../utils');\nvar rotr32 = utils.rotr32;\n\nfunction ft_1(s, x, y, z) {\n  if (s === 0)\n    return ch32(x, y, z);\n  if (s === 1 || s === 3)\n    return p32(x, y, z);\n  if (s === 2)\n    return maj32(x, y, z);\n}\nexports.ft_1 = ft_1;\n\nfunction ch32(x, y, z) {\n  return (x & y) ^ ((~x) & z);\n}\nexports.ch32 = ch32;\n\nfunction maj32(x, y, z) {\n  return (x & y) ^ (x & z) ^ (y & z);\n}\nexports.maj32 = maj32;\n\nfunction p32(x, y, z) {\n  return x ^ y ^ z;\n}\nexports.p32 = p32;\n\nfunction s0_256(x) {\n  return rotr32(x, 2) ^ rotr32(x, 13) ^ rotr32(x, 22);\n}\nexports.s0_256 = s0_256;\n\nfunction s1_256(x) {\n  return rotr32(x, 6) ^ rotr32(x, 11) ^ rotr32(x, 25);\n}\nexports.s1_256 = s1_256;\n\nfunction g0_256(x) {\n  return rotr32(x, 7) ^ rotr32(x, 18) ^ (x >>> 3);\n}\nexports.g0_256 = g0_256;\n\nfunction g1_256(x) {\n  return rotr32(x, 17) ^ rotr32(x, 19) ^ (x >>> 10);\n}\nexports.g1_256 = g1_256;\n","'use strict';\n\nvar assert = require('minimalistic-assert');\nvar inherits = require('inherits');\n\nexports.inherits = inherits;\n\nfunction isSurrogatePair(msg, i) {\n  if ((msg.charCodeAt(i) & 0xFC00) !== 0xD800) {\n    return false;\n  }\n  if (i < 0 || i + 1 >= msg.length) {\n    return false;\n  }\n  return (msg.charCodeAt(i + 1) & 0xFC00) === 0xDC00;\n}\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    if (!enc) {\n      // Inspired by stringToUtf8ByteArray() in closure-library by Google\n      // https://github.com/google/closure-library/blob/8598d87242af59aac233270742c8984e2b2bdbe0/closure/goog/crypt/crypt.js#L117-L143\n      // Apache License 2.0\n      // https://github.com/google/closure-library/blob/master/LICENSE\n      var p = 0;\n      for (var i = 0; i < msg.length; i++) {\n        var c = msg.charCodeAt(i);\n        if (c < 128) {\n          res[p++] = c;\n        } else if (c < 2048) {\n          res[p++] = (c >> 6) | 192;\n          res[p++] = (c & 63) | 128;\n        } else if (isSurrogatePair(msg, i)) {\n          c = 0x10000 + ((c & 0x03FF) << 10) + (msg.charCodeAt(++i) & 0x03FF);\n          res[p++] = (c >> 18) | 240;\n          res[p++] = ((c >> 12) & 63) | 128;\n          res[p++] = ((c >> 6) & 63) | 128;\n          res[p++] = (c & 63) | 128;\n        } else {\n          res[p++] = (c >> 12) | 224;\n          res[p++] = ((c >> 6) & 63) | 128;\n          res[p++] = (c & 63) | 128;\n        }\n      }\n    } else if (enc === 'hex') {\n      msg = msg.replace(/[^a-z0-9]+/ig, '');\n      if (msg.length % 2 !== 0)\n        msg = '0' + msg;\n      for (i = 0; i < msg.length; i += 2)\n        res.push(parseInt(msg[i] + msg[i + 1], 16));\n    }\n  } else {\n    for (i = 0; i < msg.length; i++)\n      res[i] = msg[i] | 0;\n  }\n  return res;\n}\nexports.toArray = toArray;\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}\nexports.toHex = toHex;\n\nfunction htonl(w) {\n  var res = (w >>> 24) |\n            ((w >>> 8) & 0xff00) |\n            ((w << 8) & 0xff0000) |\n            ((w & 0xff) << 24);\n  return res >>> 0;\n}\nexports.htonl = htonl;\n\nfunction toHex32(msg, endian) {\n  var res = '';\n  for (var i = 0; i < msg.length; i++) {\n    var w = msg[i];\n    if (endian === 'little')\n      w = htonl(w);\n    res += zero8(w.toString(16));\n  }\n  return res;\n}\nexports.toHex32 = toHex32;\n\nfunction zero2(word) {\n  if (word.length === 1)\n    return '0' + word;\n  else\n    return word;\n}\nexports.zero2 = zero2;\n\nfunction zero8(word) {\n  if (word.length === 7)\n    return '0' + word;\n  else if (word.length === 6)\n    return '00' + word;\n  else if (word.length === 5)\n    return '000' + word;\n  else if (word.length === 4)\n    return '0000' + word;\n  else if (word.length === 3)\n    return '00000' + word;\n  else if (word.length === 2)\n    return '000000' + word;\n  else if (word.length === 1)\n    return '0000000' + word;\n  else\n    return word;\n}\nexports.zero8 = zero8;\n\nfunction join32(msg, start, end, endian) {\n  var len = end - start;\n  assert(len % 4 === 0);\n  var res = new Array(len / 4);\n  for (var i = 0, k = start; i < res.length; i++, k += 4) {\n    var w;\n    if (endian === 'big')\n      w = (msg[k] << 24) | (msg[k + 1] << 16) | (msg[k + 2] << 8) | msg[k + 3];\n    else\n      w = (msg[k + 3] << 24) | (msg[k + 2] << 16) | (msg[k + 1] << 8) | msg[k];\n    res[i] = w >>> 0;\n  }\n  return res;\n}\nexports.join32 = join32;\n\nfunction split32(msg, endian) {\n  var res = new Array(msg.length * 4);\n  for (var i = 0, k = 0; i < msg.length; i++, k += 4) {\n    var m = msg[i];\n    if (endian === 'big') {\n      res[k] = m >>> 24;\n      res[k + 1] = (m >>> 16) & 0xff;\n      res[k + 2] = (m >>> 8) & 0xff;\n      res[k + 3] = m & 0xff;\n    } else {\n      res[k + 3] = m >>> 24;\n      res[k + 2] = (m >>> 16) & 0xff;\n      res[k + 1] = (m >>> 8) & 0xff;\n      res[k] = m & 0xff;\n    }\n  }\n  return res;\n}\nexports.split32 = split32;\n\nfunction rotr32(w, b) {\n  return (w >>> b) | (w << (32 - b));\n}\nexports.rotr32 = rotr32;\n\nfunction rotl32(w, b) {\n  return (w << b) | (w >>> (32 - b));\n}\nexports.rotl32 = rotl32;\n\nfunction sum32(a, b) {\n  return (a + b) >>> 0;\n}\nexports.sum32 = sum32;\n\nfunction sum32_3(a, b, c) {\n  return (a + b + c) >>> 0;\n}\nexports.sum32_3 = sum32_3;\n\nfunction sum32_4(a, b, c, d) {\n  return (a + b + c + d) >>> 0;\n}\nexports.sum32_4 = sum32_4;\n\nfunction sum32_5(a, b, c, d, e) {\n  return (a + b + c + d + e) >>> 0;\n}\nexports.sum32_5 = sum32_5;\n\nfunction sum64(buf, pos, ah, al) {\n  var bh = buf[pos];\n  var bl = buf[pos + 1];\n\n  var lo = (al + bl) >>> 0;\n  var hi = (lo < al ? 1 : 0) + ah + bh;\n  buf[pos] = hi >>> 0;\n  buf[pos + 1] = lo;\n}\nexports.sum64 = sum64;\n\nfunction sum64_hi(ah, al, bh, bl) {\n  var lo = (al + bl) >>> 0;\n  var hi = (lo < al ? 1 : 0) + ah + bh;\n  return hi >>> 0;\n}\nexports.sum64_hi = sum64_hi;\n\nfunction sum64_lo(ah, al, bh, bl) {\n  var lo = al + bl;\n  return lo >>> 0;\n}\nexports.sum64_lo = sum64_lo;\n\nfunction sum64_4_hi(ah, al, bh, bl, ch, cl, dh, dl) {\n  var carry = 0;\n  var lo = al;\n  lo = (lo + bl) >>> 0;\n  carry += lo < al ? 1 : 0;\n  lo = (lo + cl) >>> 0;\n  carry += lo < cl ? 1 : 0;\n  lo = (lo + dl) >>> 0;\n  carry += lo < dl ? 1 : 0;\n\n  var hi = ah + bh + ch + dh + carry;\n  return hi >>> 0;\n}\nexports.sum64_4_hi = sum64_4_hi;\n\nfunction sum64_4_lo(ah, al, bh, bl, ch, cl, dh, dl) {\n  var lo = al + bl + cl + dl;\n  return lo >>> 0;\n}\nexports.sum64_4_lo = sum64_4_lo;\n\nfunction sum64_5_hi(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {\n  var carry = 0;\n  var lo = al;\n  lo = (lo + bl) >>> 0;\n  carry += lo < al ? 1 : 0;\n  lo = (lo + cl) >>> 0;\n  carry += lo < cl ? 1 : 0;\n  lo = (lo + dl) >>> 0;\n  carry += lo < dl ? 1 : 0;\n  lo = (lo + el) >>> 0;\n  carry += lo < el ? 1 : 0;\n\n  var hi = ah + bh + ch + dh + eh + carry;\n  return hi >>> 0;\n}\nexports.sum64_5_hi = sum64_5_hi;\n\nfunction sum64_5_lo(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {\n  var lo = al + bl + cl + dl + el;\n\n  return lo >>> 0;\n}\nexports.sum64_5_lo = sum64_5_lo;\n\nfunction rotr64_hi(ah, al, num) {\n  var r = (al << (32 - num)) | (ah >>> num);\n  return r >>> 0;\n}\nexports.rotr64_hi = rotr64_hi;\n\nfunction rotr64_lo(ah, al, num) {\n  var r = (ah << (32 - num)) | (al >>> num);\n  return r >>> 0;\n}\nexports.rotr64_lo = rotr64_lo;\n\nfunction shr64_hi(ah, al, num) {\n  return ah >>> num;\n}\nexports.shr64_hi = shr64_hi;\n\nfunction shr64_lo(ah, al, num) {\n  var r = (ah << (32 - num)) | (al >>> num);\n  return r >>> 0;\n}\nexports.shr64_lo = shr64_lo;\n","'use strict';\n\nvar hash = require('hash.js');\nvar utils = require('minimalistic-crypto-utils');\nvar assert = require('minimalistic-assert');\n\nfunction HmacDRBG(options) {\n  if (!(this instanceof HmacDRBG))\n    return new HmacDRBG(options);\n  this.hash = options.hash;\n  this.predResist = !!options.predResist;\n\n  this.outLen = this.hash.outSize;\n  this.minEntropy = options.minEntropy || this.hash.hmacStrength;\n\n  this._reseed = null;\n  this.reseedInterval = null;\n  this.K = null;\n  this.V = null;\n\n  var entropy = utils.toArray(options.entropy, options.entropyEnc || 'hex');\n  var nonce = utils.toArray(options.nonce, options.nonceEnc || 'hex');\n  var pers = utils.toArray(options.pers, options.persEnc || 'hex');\n  assert(entropy.length >= (this.minEntropy / 8),\n         'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');\n  this._init(entropy, nonce, pers);\n}\nmodule.exports = HmacDRBG;\n\nHmacDRBG.prototype._init = function init(entropy, nonce, pers) {\n  var seed = entropy.concat(nonce).concat(pers);\n\n  this.K = new Array(this.outLen / 8);\n  this.V = new Array(this.outLen / 8);\n  for (var i = 0; i < this.V.length; i++) {\n    this.K[i] = 0x00;\n    this.V[i] = 0x01;\n  }\n\n  this._update(seed);\n  this._reseed = 1;\n  this.reseedInterval = 0x1000000000000;  // 2^48\n};\n\nHmacDRBG.prototype._hmac = function hmac() {\n  return new hash.hmac(this.hash, this.K);\n};\n\nHmacDRBG.prototype._update = function update(seed) {\n  var kmac = this._hmac()\n                 .update(this.V)\n                 .update([ 0x00 ]);\n  if (seed)\n    kmac = kmac.update(seed);\n  this.K = kmac.digest();\n  this.V = this._hmac().update(this.V).digest();\n  if (!seed)\n    return;\n\n  this.K = this._hmac()\n               .update(this.V)\n               .update([ 0x01 ])\n               .update(seed)\n               .digest();\n  this.V = this._hmac().update(this.V).digest();\n};\n\nHmacDRBG.prototype.reseed = function reseed(entropy, entropyEnc, add, addEnc) {\n  // Optional entropy enc\n  if (typeof entropyEnc !== 'string') {\n    addEnc = add;\n    add = entropyEnc;\n    entropyEnc = null;\n  }\n\n  entropy = utils.toArray(entropy, entropyEnc);\n  add = utils.toArray(add, addEnc);\n\n  assert(entropy.length >= (this.minEntropy / 8),\n         'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');\n\n  this._update(entropy.concat(add || []));\n  this._reseed = 1;\n};\n\nHmacDRBG.prototype.generate = function generate(len, enc, add, addEnc) {\n  if (this._reseed > this.reseedInterval)\n    throw new Error('Reseed is required');\n\n  // Optional encoding\n  if (typeof enc !== 'string') {\n    addEnc = add;\n    add = enc;\n    enc = null;\n  }\n\n  // Optional additional data\n  if (add) {\n    add = utils.toArray(add, addEnc || 'hex');\n    this._update(add);\n  }\n\n  var temp = [];\n  while (temp.length < len) {\n    this.V = this._hmac().update(this.V).digest();\n    temp = temp.concat(this.V);\n  }\n\n  var res = temp.slice(0, len);\n  this._update(add);\n  this._reseed++;\n  return utils.encode(res, enc);\n};\n","/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh <https://feross.org/opensource> */\nexports.read = function (buffer, offset, isLE, mLen, nBytes) {\n  var e, m\n  var eLen = (nBytes * 8) - mLen - 1\n  var eMax = (1 << eLen) - 1\n  var eBias = eMax >> 1\n  var nBits = -7\n  var i = isLE ? (nBytes - 1) : 0\n  var d = isLE ? -1 : 1\n  var s = buffer[offset + i]\n\n  i += d\n\n  e = s & ((1 << (-nBits)) - 1)\n  s >>= (-nBits)\n  nBits += eLen\n  for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n  m = e & ((1 << (-nBits)) - 1)\n  e >>= (-nBits)\n  nBits += mLen\n  for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n  if (e === 0) {\n    e = 1 - eBias\n  } else if (e === eMax) {\n    return m ? NaN : ((s ? -1 : 1) * Infinity)\n  } else {\n    m = m + Math.pow(2, mLen)\n    e = e - eBias\n  }\n  return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n  var e, m, c\n  var eLen = (nBytes * 8) - mLen - 1\n  var eMax = (1 << eLen) - 1\n  var eBias = eMax >> 1\n  var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n  var i = isLE ? 0 : (nBytes - 1)\n  var d = isLE ? 1 : -1\n  var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n  value = Math.abs(value)\n\n  if (isNaN(value) || value === Infinity) {\n    m = isNaN(value) ? 1 : 0\n    e = eMax\n  } else {\n    e = Math.floor(Math.log(value) / Math.LN2)\n    if (value * (c = Math.pow(2, -e)) < 1) {\n      e--\n      c *= 2\n    }\n    if (e + eBias >= 1) {\n      value += rt / c\n    } else {\n      value += rt * Math.pow(2, 1 - eBias)\n    }\n    if (value * c >= 2) {\n      e++\n      c /= 2\n    }\n\n    if (e + eBias >= eMax) {\n      m = 0\n      e = eMax\n    } else if (e + eBias >= 1) {\n      m = ((value * c) - 1) * Math.pow(2, mLen)\n      e = e + eBias\n    } else {\n      m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n      e = 0\n    }\n  }\n\n  for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n  e = (e << mLen) | m\n  eLen += mLen\n  for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n  buffer[offset + i - d] |= s * 128\n}\n","if (typeof Object.create === 'function') {\n  // implementation from standard node.js 'util' module\n  module.exports = function inherits(ctor, superCtor) {\n    if (superCtor) {\n      ctor.super_ = superCtor\n      ctor.prototype = Object.create(superCtor.prototype, {\n        constructor: {\n          value: ctor,\n          enumerable: false,\n          writable: true,\n          configurable: true\n        }\n      })\n    }\n  };\n} else {\n  // old school shim for old browsers\n  module.exports = function inherits(ctor, superCtor) {\n    if (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}\n","/*!\n * Determine if an object is a Buffer\n *\n * @author   Feross Aboukhadijeh <https://feross.org>\n * @license  MIT\n */\n\n// The _isBuffer check is for Safari 5-7 support, because it's missing\n// Object.prototype.constructor. Remove this eventually\nmodule.exports = function (obj) {\n  return obj != null && (isBuffer(obj) || isSlowBuffer(obj) || !!obj._isBuffer)\n}\n\nfunction isBuffer (obj) {\n  return !!obj.constructor && typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj)\n}\n\n// For Node v0.10 support. Remove this eventually.\nfunction isSlowBuffer (obj) {\n  return typeof obj.readFloatLE === 'function' && typeof obj.slice === 'function' && isBuffer(obj.slice(0, 0))\n}\n","var toString = {}.toString;\n\nmodule.exports = Array.isArray || function (arr) {\n  return toString.call(arr) == '[object Array]';\n};\n","/*! iScroll v5.2.0 ~ (c) 2008-2016 Matteo Spinelli ~ http://cubiq.org/license */\n(function (window, document, Math) {\nvar rAF = window.requestAnimationFrame\t||\n\twindow.webkitRequestAnimationFrame\t||\n\twindow.mozRequestAnimationFrame\t\t||\n\twindow.oRequestAnimationFrame\t\t||\n\twindow.msRequestAnimationFrame\t\t||\n\tfunction (callback) { window.setTimeout(callback, 1000 / 60); };\n\nvar utils = (function () {\n\tvar me = {};\n\n\tvar _elementStyle = document.createElement('div').style;\n\tvar _vendor = (function () {\n\t\tvar vendors = ['t', 'webkitT', 'MozT', 'msT', 'OT'],\n\t\t\ttransform,\n\t\t\ti = 0,\n\t\t\tl = vendors.length;\n\n\t\tfor ( ; i < l; i++ ) {\n\t\t\ttransform = vendors[i] + 'ransform';\n\t\t\tif ( transform in _elementStyle ) return vendors[i].substr(0, vendors[i].length-1);\n\t\t}\n\n\t\treturn false;\n\t})();\n\n\tfunction _prefixStyle (style) {\n\t\tif ( _vendor === false ) return false;\n\t\tif ( _vendor === '' ) return style;\n\t\treturn _vendor + style.charAt(0).toUpperCase() + style.substr(1);\n\t}\n\n\tme.getTime = Date.now || function getTime () { return new Date().getTime(); };\n\n\tme.extend = function (target, obj) {\n\t\tfor ( var i in obj ) {\n\t\t\ttarget[i] = obj[i];\n\t\t}\n\t};\n\n\tme.addEvent = function (el, type, fn, capture) {\n\t\tel.addEventListener(type, fn, !!capture);\n\t};\n\n\tme.removeEvent = function (el, type, fn, capture) {\n\t\tel.removeEventListener(type, fn, !!capture);\n\t};\n\n\tme.prefixPointerEvent = function (pointerEvent) {\n\t\treturn window.MSPointerEvent ?\n\t\t\t'MSPointer' + pointerEvent.charAt(7).toUpperCase() + pointerEvent.substr(8):\n\t\t\tpointerEvent;\n\t};\n\n\tme.momentum = function (current, start, time, lowerMargin, wrapperSize, deceleration) {\n\t\tvar distance = current - start,\n\t\t\tspeed = Math.abs(distance) / time,\n\t\t\tdestination,\n\t\t\tduration;\n\n\t\tdeceleration = deceleration === undefined ? 0.0006 : deceleration;\n\n\t\tdestination = current + ( speed * speed ) / ( 2 * deceleration ) * ( distance < 0 ? -1 : 1 );\n\t\tduration = speed / deceleration;\n\n\t\tif ( destination < lowerMargin ) {\n\t\t\tdestination = wrapperSize ? lowerMargin - ( wrapperSize / 2.5 * ( speed / 8 ) ) : lowerMargin;\n\t\t\tdistance = Math.abs(destination - current);\n\t\t\tduration = distance / speed;\n\t\t} else if ( destination > 0 ) {\n\t\t\tdestination = wrapperSize ? wrapperSize / 2.5 * ( speed / 8 ) : 0;\n\t\t\tdistance = Math.abs(current) + destination;\n\t\t\tduration = distance / speed;\n\t\t}\n\n\t\treturn {\n\t\t\tdestination: Math.round(destination),\n\t\t\tduration: duration\n\t\t};\n\t};\n\n\tvar _transform = _prefixStyle('transform');\n\n\tme.extend(me, {\n\t\thasTransform: _transform !== false,\n\t\thasPerspective: _prefixStyle('perspective') in _elementStyle,\n\t\thasTouch: 'ontouchstart' in window,\n\t\thasPointer: !!(window.PointerEvent || window.MSPointerEvent), // IE10 is prefixed\n\t\thasTransition: _prefixStyle('transition') in _elementStyle\n\t});\n\n\t/*\n\tThis should find all Android browsers lower than build 535.19 (both stock browser and webview)\n\t- galaxy S2 is ok\n    - 2.3.6 : `AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1`\n    - 4.0.4 : `AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30`\n   - galaxy S3 is badAndroid (stock brower, webview)\n     `AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30`\n   - galaxy S4 is badAndroid (stock brower, webview)\n     `AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30`\n   - galaxy S5 is OK\n     `AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Mobile Safari/537.36 (Chrome/)`\n   - galaxy S6 is OK\n     `AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Mobile Safari/537.36 (Chrome/)`\n  */\n\tme.isBadAndroid = (function() {\n\t\tvar appVersion = window.navigator.appVersion;\n\t\t// Android browser is not a chrome browser.\n\t\tif (/Android/.test(appVersion) && !(/Chrome\\/\\d/.test(appVersion))) {\n\t\t\tvar safariVersion = appVersion.match(/Safari\\/(\\d+.\\d)/);\n\t\t\tif(safariVersion && typeof safariVersion === \"object\" && safariVersion.length >= 2) {\n\t\t\t\treturn parseFloat(safariVersion[1]) < 535.19;\n\t\t\t} else {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t} else {\n\t\t\treturn false;\n\t\t}\n\t})();\n\n\tme.extend(me.style = {}, {\n\t\ttransform: _transform,\n\t\ttransitionTimingFunction: _prefixStyle('transitionTimingFunction'),\n\t\ttransitionDuration: _prefixStyle('transitionDuration'),\n\t\ttransitionDelay: _prefixStyle('transitionDelay'),\n\t\ttransformOrigin: _prefixStyle('transformOrigin')\n\t});\n\n\tme.hasClass = function (e, c) {\n\t\tvar re = new RegExp(\"(^|\\\\s)\" + c + \"(\\\\s|$)\");\n\t\treturn re.test(e.className);\n\t};\n\n\tme.addClass = function (e, c) {\n\t\tif ( me.hasClass(e, c) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar newclass = e.className.split(' ');\n\t\tnewclass.push(c);\n\t\te.className = newclass.join(' ');\n\t};\n\n\tme.removeClass = function (e, c) {\n\t\tif ( !me.hasClass(e, c) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar re = new RegExp(\"(^|\\\\s)\" + c + \"(\\\\s|$)\", 'g');\n\t\te.className = e.className.replace(re, ' ');\n\t};\n\n\tme.offset = function (el) {\n\t\tvar left = -el.offsetLeft,\n\t\t\ttop = -el.offsetTop;\n\n\t\t// jshint -W084\n\t\twhile (el = el.offsetParent) {\n\t\t\tleft -= el.offsetLeft;\n\t\t\ttop -= el.offsetTop;\n\t\t}\n\t\t// jshint +W084\n\n\t\treturn {\n\t\t\tleft: left,\n\t\t\ttop: top\n\t\t};\n\t};\n\n\tme.preventDefaultException = function (el, exceptions) {\n\t\tfor ( var i in exceptions ) {\n\t\t\tif ( exceptions[i].test(el[i]) ) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t};\n\n\tme.extend(me.eventType = {}, {\n\t\ttouchstart: 1,\n\t\ttouchmove: 1,\n\t\ttouchend: 1,\n\n\t\tmousedown: 2,\n\t\tmousemove: 2,\n\t\tmouseup: 2,\n\n\t\tpointerdown: 3,\n\t\tpointermove: 3,\n\t\tpointerup: 3,\n\n\t\tMSPointerDown: 3,\n\t\tMSPointerMove: 3,\n\t\tMSPointerUp: 3\n\t});\n\n\tme.extend(me.ease = {}, {\n\t\tquadratic: {\n\t\t\tstyle: 'cubic-bezier(0.25, 0.46, 0.45, 0.94)',\n\t\t\tfn: function (k) {\n\t\t\t\treturn k * ( 2 - k );\n\t\t\t}\n\t\t},\n\t\tcircular: {\n\t\t\tstyle: 'cubic-bezier(0.1, 0.57, 0.1, 1)',\t// Not properly \"circular\" but this looks better, it should be (0.075, 0.82, 0.165, 1)\n\t\t\tfn: function (k) {\n\t\t\t\treturn Math.sqrt( 1 - ( --k * k ) );\n\t\t\t}\n\t\t},\n\t\tback: {\n\t\t\tstyle: 'cubic-bezier(0.175, 0.885, 0.32, 1.275)',\n\t\t\tfn: function (k) {\n\t\t\t\tvar b = 4;\n\t\t\t\treturn ( k = k - 1 ) * k * ( ( b + 1 ) * k + b ) + 1;\n\t\t\t}\n\t\t},\n\t\tbounce: {\n\t\t\tstyle: '',\n\t\t\tfn: function (k) {\n\t\t\t\tif ( ( k /= 1 ) < ( 1 / 2.75 ) ) {\n\t\t\t\t\treturn 7.5625 * k * k;\n\t\t\t\t} else if ( k < ( 2 / 2.75 ) ) {\n\t\t\t\t\treturn 7.5625 * ( k -= ( 1.5 / 2.75 ) ) * k + 0.75;\n\t\t\t\t} else if ( k < ( 2.5 / 2.75 ) ) {\n\t\t\t\t\treturn 7.5625 * ( k -= ( 2.25 / 2.75 ) ) * k + 0.9375;\n\t\t\t\t} else {\n\t\t\t\t\treturn 7.5625 * ( k -= ( 2.625 / 2.75 ) ) * k + 0.984375;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\telastic: {\n\t\t\tstyle: '',\n\t\t\tfn: function (k) {\n\t\t\t\tvar f = 0.22,\n\t\t\t\t\te = 0.4;\n\n\t\t\t\tif ( k === 0 ) { return 0; }\n\t\t\t\tif ( k == 1 ) { return 1; }\n\n\t\t\t\treturn ( e * Math.pow( 2, - 10 * k ) * Math.sin( ( k - f / 4 ) * ( 2 * Math.PI ) / f ) + 1 );\n\t\t\t}\n\t\t}\n\t});\n\n\tme.tap = function (e, eventName) {\n\t\tvar ev = document.createEvent('Event');\n\t\tev.initEvent(eventName, true, true);\n\t\tev.pageX = e.pageX;\n\t\tev.pageY = e.pageY;\n\t\te.target.dispatchEvent(ev);\n\t};\n\n\tme.click = function (e) {\n\t\tvar target = e.target,\n\t\t\tev;\n\n\t\tif ( !(/(SELECT|INPUT|TEXTAREA)/i).test(target.tagName) ) {\n\t\t\tev = document.createEvent('MouseEvents');\n\t\t\tev.initMouseEvent('click', true, true, e.view, 1,\n\t\t\t\ttarget.screenX, target.screenY, target.clientX, target.clientY,\n\t\t\t\te.ctrlKey, e.altKey, e.shiftKey, e.metaKey,\n\t\t\t\t0, null);\n\n\t\t\tev._constructed = true;\n\t\t\ttarget.dispatchEvent(ev);\n\t\t}\n\t};\n\n\treturn me;\n})();\nfunction IScroll (el, options) {\n\tthis.wrapper = typeof el == 'string' ? document.querySelector(el) : el;\n\tthis.scroller = this.wrapper.children[0];\n\tthis.scrollerStyle = this.scroller.style;\t\t// cache style for better performance\n\n\tthis.options = {\n\n\t\tresizeScrollbars: true,\n\n\t\tmouseWheelSpeed: 20,\n\n\t\tsnapThreshold: 0.334,\n\n// INSERT POINT: OPTIONS\n\t\tdisablePointer : !utils.hasPointer,\n\t\tdisableTouch : utils.hasPointer || !utils.hasTouch,\n\t\tdisableMouse : utils.hasPointer || utils.hasTouch,\n\t\tstartX: 0,\n\t\tstartY: 0,\n\t\tscrollY: true,\n\t\tdirectionLockThreshold: 5,\n\t\tmomentum: true,\n\n\t\tbounce: true,\n\t\tbounceTime: 600,\n\t\tbounceEasing: '',\n\n\t\tpreventDefault: true,\n\t\tpreventDefaultException: { tagName: /^(INPUT|TEXTAREA|BUTTON|SELECT)$/ },\n\n\t\tHWCompositing: true,\n\t\tuseTransition: true,\n\t\tuseTransform: true,\n\t\tbindToWrapper: typeof window.onmousedown === \"undefined\"\n\t};\n\n\tfor ( var i in options ) {\n\t\tthis.options[i] = options[i];\n\t}\n\n\t// Normalize options\n\tthis.translateZ = this.options.HWCompositing && utils.hasPerspective ? ' translateZ(0)' : '';\n\n\tthis.options.useTransition = utils.hasTransition && this.options.useTransition;\n\tthis.options.useTransform = utils.hasTransform && this.options.useTransform;\n\n\tthis.options.eventPassthrough = this.options.eventPassthrough === true ? 'vertical' : this.options.eventPassthrough;\n\tthis.options.preventDefault = !this.options.eventPassthrough && this.options.preventDefault;\n\n\t// If you want eventPassthrough I have to lock one of the axes\n\tthis.options.scrollY = this.options.eventPassthrough == 'vertical' ? false : this.options.scrollY;\n\tthis.options.scrollX = this.options.eventPassthrough == 'horizontal' ? false : this.options.scrollX;\n\n\t// With eventPassthrough we also need lockDirection mechanism\n\tthis.options.freeScroll = this.options.freeScroll && !this.options.eventPassthrough;\n\tthis.options.directionLockThreshold = this.options.eventPassthrough ? 0 : this.options.directionLockThreshold;\n\n\tthis.options.bounceEasing = typeof this.options.bounceEasing == 'string' ? utils.ease[this.options.bounceEasing] || utils.ease.circular : this.options.bounceEasing;\n\n\tthis.options.resizePolling = this.options.resizePolling === undefined ? 60 : this.options.resizePolling;\n\n\tif ( this.options.tap === true ) {\n\t\tthis.options.tap = 'tap';\n\t}\n\n\tif ( this.options.shrinkScrollbars == 'scale' ) {\n\t\tthis.options.useTransition = false;\n\t}\n\n\tthis.options.invertWheelDirection = this.options.invertWheelDirection ? -1 : 1;\n\n// INSERT POINT: NORMALIZATION\n\n\t// Some defaults\n\tthis.x = 0;\n\tthis.y = 0;\n\tthis.directionX = 0;\n\tthis.directionY = 0;\n\tthis._events = {};\n\n// INSERT POINT: DEFAULTS\n\n\tthis._init();\n\tthis.refresh();\n\n\tthis.scrollTo(this.options.startX, this.options.startY);\n\tthis.enable();\n}\n\nIScroll.prototype = {\n\tversion: '5.2.0',\n\n\t_init: function () {\n\t\tthis._initEvents();\n\n\t\tif ( this.options.scrollbars || this.options.indicators ) {\n\t\t\tthis._initIndicators();\n\t\t}\n\n\t\tif ( this.options.mouseWheel ) {\n\t\t\tthis._initWheel();\n\t\t}\n\n\t\tif ( this.options.snap ) {\n\t\t\tthis._initSnap();\n\t\t}\n\n\t\tif ( this.options.keyBindings ) {\n\t\t\tthis._initKeys();\n\t\t}\n\n// INSERT POINT: _init\n\n\t},\n\n\tdestroy: function () {\n\t\tthis._initEvents(true);\n\t\tclearTimeout(this.resizeTimeout);\n \t\tthis.resizeTimeout = null;\n\t\tthis._execEvent('destroy');\n\t},\n\n\t_transitionEnd: function (e) {\n\t\tif ( e.target != this.scroller || !this.isInTransition ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._transitionTime();\n\t\tif ( !this.resetPosition(this.options.bounceTime) ) {\n\t\t\tthis.isInTransition = false;\n\t\t\tthis._execEvent('scrollEnd');\n\t\t}\n\t},\n\n\t_start: function (e) {\n\t\t// React to left mouse button only\n\t\tif ( utils.eventType[e.type] != 1 ) {\n\t\t  // for button property\n\t\t  // http://unixpapa.com/js/mouse.html\n\t\t  var button;\n\t    if (!e.which) {\n\t      /* IE case */\n\t      button = (e.button < 2) ? 0 :\n\t               ((e.button == 4) ? 1 : 2);\n\t    } else {\n\t      /* All others */\n\t      button = e.button;\n\t    }\n\t\t\tif ( button !== 0 ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tif ( !this.enabled || (this.initiated && utils.eventType[e.type] !== this.initiated) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( this.options.preventDefault && !utils.isBadAndroid && !utils.preventDefaultException(e.target, this.options.preventDefaultException) ) {\n\t\t\te.preventDefault();\n\t\t}\n\n\t\tvar point = e.touches ? e.touches[0] : e,\n\t\t\tpos;\n\n\t\tthis.initiated\t= utils.eventType[e.type];\n\t\tthis.moved\t\t= false;\n\t\tthis.distX\t\t= 0;\n\t\tthis.distY\t\t= 0;\n\t\tthis.directionX = 0;\n\t\tthis.directionY = 0;\n\t\tthis.directionLocked = 0;\n\n\t\tthis.startTime = utils.getTime();\n\n\t\tif ( this.options.useTransition && this.isInTransition ) {\n\t\t\tthis._transitionTime();\n\t\t\tthis.isInTransition = false;\n\t\t\tpos = this.getComputedPosition();\n\t\t\tthis._translate(Math.round(pos.x), Math.round(pos.y));\n\t\t\tthis._execEvent('scrollEnd');\n\t\t} else if ( !this.options.useTransition && this.isAnimating ) {\n\t\t\tthis.isAnimating = false;\n\t\t\tthis._execEvent('scrollEnd');\n\t\t}\n\n\t\tthis.startX    = this.x;\n\t\tthis.startY    = this.y;\n\t\tthis.absStartX = this.x;\n\t\tthis.absStartY = this.y;\n\t\tthis.pointX    = point.pageX;\n\t\tthis.pointY    = point.pageY;\n\n\t\tthis._execEvent('beforeScrollStart');\n\t},\n\n\t_move: function (e) {\n\t\tif ( !this.enabled || utils.eventType[e.type] !== this.initiated ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( this.options.preventDefault ) {\t// increases performance on Android? TODO: check!\n\t\t\te.preventDefault();\n\t\t}\n\n\t\tvar point\t\t= e.touches ? e.touches[0] : e,\n\t\t\tdeltaX\t\t= point.pageX - this.pointX,\n\t\t\tdeltaY\t\t= point.pageY - this.pointY,\n\t\t\ttimestamp\t= utils.getTime(),\n\t\t\tnewX, newY,\n\t\t\tabsDistX, absDistY;\n\n\t\tthis.pointX\t\t= point.pageX;\n\t\tthis.pointY\t\t= point.pageY;\n\n\t\tthis.distX\t\t+= deltaX;\n\t\tthis.distY\t\t+= deltaY;\n\t\tabsDistX\t\t= Math.abs(this.distX);\n\t\tabsDistY\t\t= Math.abs(this.distY);\n\n\t\t// We need to move at least 10 pixels for the scrolling to initiate\n\t\tif ( timestamp - this.endTime > 300 && (absDistX < 10 && absDistY < 10) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If you are scrolling in one direction lock the other\n\t\tif ( !this.directionLocked && !this.options.freeScroll ) {\n\t\t\tif ( absDistX > absDistY + this.options.directionLockThreshold ) {\n\t\t\t\tthis.directionLocked = 'h';\t\t// lock horizontally\n\t\t\t} else if ( absDistY >= absDistX + this.options.directionLockThreshold ) {\n\t\t\t\tthis.directionLocked = 'v';\t\t// lock vertically\n\t\t\t} else {\n\t\t\t\tthis.directionLocked = 'n';\t\t// no lock\n\t\t\t}\n\t\t}\n\n\t\tif ( this.directionLocked == 'h' ) {\n\t\t\tif ( this.options.eventPassthrough == 'vertical' ) {\n\t\t\t\te.preventDefault();\n\t\t\t} else if ( this.options.eventPassthrough == 'horizontal' ) {\n\t\t\t\tthis.initiated = false;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tdeltaY = 0;\n\t\t} else if ( this.directionLocked == 'v' ) {\n\t\t\tif ( this.options.eventPassthrough == 'horizontal' ) {\n\t\t\t\te.preventDefault();\n\t\t\t} else if ( this.options.eventPassthrough == 'vertical' ) {\n\t\t\t\tthis.initiated = false;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tdeltaX = 0;\n\t\t}\n\n\t\tdeltaX = this.hasHorizontalScroll ? deltaX : 0;\n\t\tdeltaY = this.hasVerticalScroll ? deltaY : 0;\n\n\t\tnewX = this.x + deltaX;\n\t\tnewY = this.y + deltaY;\n\n\t\t// Slow down if outside of the boundaries\n\t\tif ( newX > 0 || newX < this.maxScrollX ) {\n\t\t\tnewX = this.options.bounce ? this.x + deltaX / 3 : newX > 0 ? 0 : this.maxScrollX;\n\t\t}\n\t\tif ( newY > 0 || newY < this.maxScrollY ) {\n\t\t\tnewY = this.options.bounce ? this.y + deltaY / 3 : newY > 0 ? 0 : this.maxScrollY;\n\t\t}\n\n\t\tthis.directionX = deltaX > 0 ? -1 : deltaX < 0 ? 1 : 0;\n\t\tthis.directionY = deltaY > 0 ? -1 : deltaY < 0 ? 1 : 0;\n\n\t\tif ( !this.moved ) {\n\t\t\tthis._execEvent('scrollStart');\n\t\t}\n\n\t\tthis.moved = true;\n\n\t\tthis._translate(newX, newY);\n\n/* REPLACE START: _move */\n\n\t\tif ( timestamp - this.startTime > 300 ) {\n\t\t\tthis.startTime = timestamp;\n\t\t\tthis.startX = this.x;\n\t\t\tthis.startY = this.y;\n\t\t}\n\n/* REPLACE END: _move */\n\n\t},\n\n\t_end: function (e) {\n\t\tif ( !this.enabled || utils.eventType[e.type] !== this.initiated ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( this.options.preventDefault && !utils.preventDefaultException(e.target, this.options.preventDefaultException) ) {\n\t\t\te.preventDefault();\n\t\t}\n\n\t\tvar point = e.changedTouches ? e.changedTouches[0] : e,\n\t\t\tmomentumX,\n\t\t\tmomentumY,\n\t\t\tduration = utils.getTime() - this.startTime,\n\t\t\tnewX = Math.round(this.x),\n\t\t\tnewY = Math.round(this.y),\n\t\t\tdistanceX = Math.abs(newX - this.startX),\n\t\t\tdistanceY = Math.abs(newY - this.startY),\n\t\t\ttime = 0,\n\t\t\teasing = '';\n\n\t\tthis.isInTransition = 0;\n\t\tthis.initiated = 0;\n\t\tthis.endTime = utils.getTime();\n\n\t\t// reset if we are outside of the boundaries\n\t\tif ( this.resetPosition(this.options.bounceTime) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.scrollTo(newX, newY);\t// ensures that the last position is rounded\n\n\t\t// we scrolled less than 10 pixels\n\t\tif ( !this.moved ) {\n\t\t\tif ( this.options.tap ) {\n\t\t\t\tutils.tap(e, this.options.tap);\n\t\t\t}\n\n\t\t\tif ( this.options.click ) {\n\t\t\t\tutils.click(e);\n\t\t\t}\n\n\t\t\tthis._execEvent('scrollCancel');\n\t\t\treturn;\n\t\t}\n\n\t\tif ( this._events.flick && duration < 200 && distanceX < 100 && distanceY < 100 ) {\n\t\t\tthis._execEvent('flick');\n\t\t\treturn;\n\t\t}\n\n\t\t// start momentum animation if needed\n\t\tif ( this.options.momentum && duration < 300 ) {\n\t\t\tmomentumX = this.hasHorizontalScroll ? utils.momentum(this.x, this.startX, duration, this.maxScrollX, this.options.bounce ? this.wrapperWidth : 0, this.options.deceleration) : { destination: newX, duration: 0 };\n\t\t\tmomentumY = this.hasVerticalScroll ? utils.momentum(this.y, this.startY, duration, this.maxScrollY, this.options.bounce ? this.wrapperHeight : 0, this.options.deceleration) : { destination: newY, duration: 0 };\n\t\t\tnewX = momentumX.destination;\n\t\t\tnewY = momentumY.destination;\n\t\t\ttime = Math.max(momentumX.duration, momentumY.duration);\n\t\t\tthis.isInTransition = 1;\n\t\t}\n\n\n\t\tif ( this.options.snap ) {\n\t\t\tvar snap = this._nearestSnap(newX, newY);\n\t\t\tthis.currentPage = snap;\n\t\t\ttime = this.options.snapSpeed || Math.max(\n\t\t\t\t\tMath.max(\n\t\t\t\t\t\tMath.min(Math.abs(newX - snap.x), 1000),\n\t\t\t\t\t\tMath.min(Math.abs(newY - snap.y), 1000)\n\t\t\t\t\t), 300);\n\t\t\tnewX = snap.x;\n\t\t\tnewY = snap.y;\n\n\t\t\tthis.directionX = 0;\n\t\t\tthis.directionY = 0;\n\t\t\teasing = this.options.bounceEasing;\n\t\t}\n\n// INSERT POINT: _end\n\n\t\tif ( newX != this.x || newY != this.y ) {\n\t\t\t// change easing function when scroller goes out of the boundaries\n\t\t\tif ( newX > 0 || newX < this.maxScrollX || newY > 0 || newY < this.maxScrollY ) {\n\t\t\t\teasing = utils.ease.quadratic;\n\t\t\t}\n\n\t\t\tthis.scrollTo(newX, newY, time, easing);\n\t\t\treturn;\n\t\t}\n\n\t\tthis._execEvent('scrollEnd');\n\t},\n\n\t_resize: function () {\n\t\tvar that = this;\n\n\t\tclearTimeout(this.resizeTimeout);\n\n\t\tthis.resizeTimeout = setTimeout(function () {\n\t\t\tthat.refresh();\n\t\t}, this.options.resizePolling);\n\t},\n\n\tresetPosition: function (time) {\n\t\tvar x = this.x,\n\t\t\ty = this.y;\n\n\t\ttime = time || 0;\n\n\t\tif ( !this.hasHorizontalScroll || this.x > 0 ) {\n\t\t\tx = 0;\n\t\t} else if ( this.x < this.maxScrollX ) {\n\t\t\tx = this.maxScrollX;\n\t\t}\n\n\t\tif ( !this.hasVerticalScroll || this.y > 0 ) {\n\t\t\ty = 0;\n\t\t} else if ( this.y < this.maxScrollY ) {\n\t\t\ty = this.maxScrollY;\n\t\t}\n\n\t\tif ( x == this.x && y == this.y ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tthis.scrollTo(x, y, time, this.options.bounceEasing);\n\n\t\treturn true;\n\t},\n\n\tdisable: function () {\n\t\tthis.enabled = false;\n\t},\n\n\tenable: function () {\n\t\tthis.enabled = true;\n\t},\n\n\trefresh: function () {\n\t\tvar rf = this.wrapper.offsetHeight;\t\t// Force reflow\n\n\t\tthis.wrapperWidth\t= this.wrapper.clientWidth;\n\t\tthis.wrapperHeight\t= this.wrapper.clientHeight;\n\n/* REPLACE START: refresh */\n\n\t\tthis.scrollerWidth\t= this.scroller.offsetWidth;\n\t\tthis.scrollerHeight\t= this.scroller.offsetHeight;\n\n\t\tthis.maxScrollX\t\t= this.wrapperWidth - this.scrollerWidth;\n\t\tthis.maxScrollY\t\t= this.wrapperHeight - this.scrollerHeight;\n\n/* REPLACE END: refresh */\n\n\t\tthis.hasHorizontalScroll\t= this.options.scrollX && this.maxScrollX < 0;\n\t\tthis.hasVerticalScroll\t\t= this.options.scrollY && this.maxScrollY < 0;\n\n\t\tif ( !this.hasHorizontalScroll ) {\n\t\t\tthis.maxScrollX = 0;\n\t\t\tthis.scrollerWidth = this.wrapperWidth;\n\t\t}\n\n\t\tif ( !this.hasVerticalScroll ) {\n\t\t\tthis.maxScrollY = 0;\n\t\t\tthis.scrollerHeight = this.wrapperHeight;\n\t\t}\n\n\t\tthis.endTime = 0;\n\t\tthis.directionX = 0;\n\t\tthis.directionY = 0;\n\n\t\tthis.wrapperOffset = utils.offset(this.wrapper);\n\n\t\tthis._execEvent('refresh');\n\n\t\tthis.resetPosition();\n\n// INSERT POINT: _refresh\n\n\t},\n\n\ton: function (type, fn) {\n\t\tif ( !this._events[type] ) {\n\t\t\tthis._events[type] = [];\n\t\t}\n\n\t\tthis._events[type].push(fn);\n\t},\n\n\toff: function (type, fn) {\n\t\tif ( !this._events[type] ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar index = this._events[type].indexOf(fn);\n\n\t\tif ( index > -1 ) {\n\t\t\tthis._events[type].splice(index, 1);\n\t\t}\n\t},\n\n\t_execEvent: function (type) {\n\t\tif ( !this._events[type] ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar i = 0,\n\t\t\tl = this._events[type].length;\n\n\t\tif ( !l ) {\n\t\t\treturn;\n\t\t}\n\n\t\tfor ( ; i < l; i++ ) {\n\t\t\tthis._events[type][i].apply(this, [].slice.call(arguments, 1));\n\t\t}\n\t},\n\n\tscrollBy: function (x, y, time, easing) {\n\t\tx = this.x + x;\n\t\ty = this.y + y;\n\t\ttime = time || 0;\n\n\t\tthis.scrollTo(x, y, time, easing);\n\t},\n\n\tscrollTo: function (x, y, time, easing) {\n\t\teasing = easing || utils.ease.circular;\n\n\t\tthis.isInTransition = this.options.useTransition && time > 0;\n\t\tvar transitionType = this.options.useTransition && easing.style;\n\t\tif ( !time || transitionType ) {\n\t\t\t\tif(transitionType) {\n\t\t\t\t\tthis._transitionTimingFunction(easing.style);\n\t\t\t\t\tthis._transitionTime(time);\n\t\t\t\t}\n\t\t\tthis._translate(x, y);\n\t\t} else {\n\t\t\tthis._animate(x, y, time, easing.fn);\n\t\t}\n\t},\n\n\tscrollToElement: function (el, time, offsetX, offsetY, easing) {\n\t\tel = el.nodeType ? el : this.scroller.querySelector(el);\n\n\t\tif ( !el ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar pos = utils.offset(el);\n\n\t\tpos.left -= this.wrapperOffset.left;\n\t\tpos.top  -= this.wrapperOffset.top;\n\n\t\t// if offsetX/Y are true we center the element to the screen\n\t\tif ( offsetX === true ) {\n\t\t\toffsetX = Math.round(el.offsetWidth / 2 - this.wrapper.offsetWidth / 2);\n\t\t}\n\t\tif ( offsetY === true ) {\n\t\t\toffsetY = Math.round(el.offsetHeight / 2 - this.wrapper.offsetHeight / 2);\n\t\t}\n\n\t\tpos.left -= offsetX || 0;\n\t\tpos.top  -= offsetY || 0;\n\n\t\tpos.left = pos.left > 0 ? 0 : pos.left < this.maxScrollX ? this.maxScrollX : pos.left;\n\t\tpos.top  = pos.top  > 0 ? 0 : pos.top  < this.maxScrollY ? this.maxScrollY : pos.top;\n\n\t\ttime = time === undefined || time === null || time === 'auto' ? Math.max(Math.abs(this.x-pos.left), Math.abs(this.y-pos.top)) : time;\n\n\t\tthis.scrollTo(pos.left, pos.top, time, easing);\n\t},\n\n\t_transitionTime: function (time) {\n\t\ttime = time || 0;\n\n\t\tvar durationProp = utils.style.transitionDuration;\n\t\tthis.scrollerStyle[durationProp] = time + 'ms';\n\n\t\tif ( !time && utils.isBadAndroid ) {\n\t\t\tthis.scrollerStyle[durationProp] = '0.0001ms';\n\t\t\t// remove 0.0001ms\n\t\t\tvar self = this;\n\t\t\trAF(function() {\n\t\t\t\tif(self.scrollerStyle[durationProp] === '0.0001ms') {\n\t\t\t\t\tself.scrollerStyle[durationProp] = '0s';\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\n\t\tif ( this.indicators ) {\n\t\t\tfor ( var i = this.indicators.length; i--; ) {\n\t\t\t\tthis.indicators[i].transitionTime(time);\n\t\t\t}\n\t\t}\n\n\n// INSERT POINT: _transitionTime\n\n\t},\n\n\t_transitionTimingFunction: function (easing) {\n\t\tthis.scrollerStyle[utils.style.transitionTimingFunction] = easing;\n\n\n\t\tif ( this.indicators ) {\n\t\t\tfor ( var i = this.indicators.length; i--; ) {\n\t\t\t\tthis.indicators[i].transitionTimingFunction(easing);\n\t\t\t}\n\t\t}\n\n\n// INSERT POINT: _transitionTimingFunction\n\n\t},\n\n\t_translate: function (x, y) {\n\t\tif ( this.options.useTransform ) {\n\n/* REPLACE START: _translate */\n\n\t\t\tthis.scrollerStyle[utils.style.transform] = 'translate(' + x + 'px,' + y + 'px)' + this.translateZ;\n\n/* REPLACE END: _translate */\n\n\t\t} else {\n\t\t\tx = Math.round(x);\n\t\t\ty = Math.round(y);\n\t\t\tthis.scrollerStyle.left = x + 'px';\n\t\t\tthis.scrollerStyle.top = y + 'px';\n\t\t}\n\n\t\tthis.x = x;\n\t\tthis.y = y;\n\n\n\tif ( this.indicators ) {\n\t\tfor ( var i = this.indicators.length; i--; ) {\n\t\t\tthis.indicators[i].updatePosition();\n\t\t}\n\t}\n\n\n// INSERT POINT: _translate\n\n\t},\n\n\t_initEvents: function (remove) {\n\t\tvar eventType = remove ? utils.removeEvent : utils.addEvent,\n\t\t\ttarget = this.options.bindToWrapper ? this.wrapper : window;\n\n\t\teventType(window, 'orientationchange', this);\n\t\teventType(window, 'resize', this);\n\n\t\tif ( this.options.click ) {\n\t\t\teventType(this.wrapper, 'click', this, true);\n\t\t}\n\n\t\tif ( !this.options.disableMouse ) {\n\t\t\teventType(this.wrapper, 'mousedown', this);\n\t\t\teventType(target, 'mousemove', this);\n\t\t\teventType(target, 'mousecancel', this);\n\t\t\teventType(target, 'mouseup', this);\n\t\t}\n\n\t\tif ( utils.hasPointer && !this.options.disablePointer ) {\n\t\t\teventType(this.wrapper, utils.prefixPointerEvent('pointerdown'), this);\n\t\t\teventType(target, utils.prefixPointerEvent('pointermove'), this);\n\t\t\teventType(target, utils.prefixPointerEvent('pointercancel'), this);\n\t\t\teventType(target, utils.prefixPointerEvent('pointerup'), this);\n\t\t}\n\n\t\tif ( utils.hasTouch && !this.options.disableTouch ) {\n\t\t\teventType(this.wrapper, 'touchstart', this);\n\t\t\teventType(target, 'touchmove', this);\n\t\t\teventType(target, 'touchcancel', this);\n\t\t\teventType(target, 'touchend', this);\n\t\t}\n\n\t\teventType(this.scroller, 'transitionend', this);\n\t\teventType(this.scroller, 'webkitTransitionEnd', this);\n\t\teventType(this.scroller, 'oTransitionEnd', this);\n\t\teventType(this.scroller, 'MSTransitionEnd', this);\n\t},\n\n\tgetComputedPosition: function () {\n\t\tvar matrix = window.getComputedStyle(this.scroller, null),\n\t\t\tx, y;\n\n\t\tif ( this.options.useTransform ) {\n\t\t\tmatrix = matrix[utils.style.transform].split(')')[0].split(', ');\n\t\t\tx = +(matrix[12] || matrix[4]);\n\t\t\ty = +(matrix[13] || matrix[5]);\n\t\t} else {\n\t\t\tx = +matrix.left.replace(/[^-\\d.]/g, '');\n\t\t\ty = +matrix.top.replace(/[^-\\d.]/g, '');\n\t\t}\n\n\t\treturn { x: x, y: y };\n\t},\n\t_initIndicators: function () {\n\t\tvar interactive = this.options.interactiveScrollbars,\n\t\t\tcustomStyle = typeof this.options.scrollbars != 'string',\n\t\t\tindicators = [],\n\t\t\tindicator;\n\n\t\tvar that = this;\n\n\t\tthis.indicators = [];\n\n\t\tif ( this.options.scrollbars ) {\n\t\t\t// Vertical scrollbar\n\t\t\tif ( this.options.scrollY ) {\n\t\t\t\tindicator = {\n\t\t\t\t\tel: createDefaultScrollbar('v', interactive, this.options.scrollbars),\n\t\t\t\t\tinteractive: interactive,\n\t\t\t\t\tdefaultScrollbars: true,\n\t\t\t\t\tcustomStyle: customStyle,\n\t\t\t\t\tresize: this.options.resizeScrollbars,\n\t\t\t\t\tshrink: this.options.shrinkScrollbars,\n\t\t\t\t\tfade: this.options.fadeScrollbars,\n\t\t\t\t\tlistenX: false\n\t\t\t\t};\n\n\t\t\t\tthis.wrapper.appendChild(indicator.el);\n\t\t\t\tindicators.push(indicator);\n\t\t\t}\n\n\t\t\t// Horizontal scrollbar\n\t\t\tif ( this.options.scrollX ) {\n\t\t\t\tindicator = {\n\t\t\t\t\tel: createDefaultScrollbar('h', interactive, this.options.scrollbars),\n\t\t\t\t\tinteractive: interactive,\n\t\t\t\t\tdefaultScrollbars: true,\n\t\t\t\t\tcustomStyle: customStyle,\n\t\t\t\t\tresize: this.options.resizeScrollbars,\n\t\t\t\t\tshrink: this.options.shrinkScrollbars,\n\t\t\t\t\tfade: this.options.fadeScrollbars,\n\t\t\t\t\tlistenY: false\n\t\t\t\t};\n\n\t\t\t\tthis.wrapper.appendChild(indicator.el);\n\t\t\t\tindicators.push(indicator);\n\t\t\t}\n\t\t}\n\n\t\tif ( this.options.indicators ) {\n\t\t\t// TODO: check concat compatibility\n\t\t\tindicators = indicators.concat(this.options.indicators);\n\t\t}\n\n\t\tfor ( var i = indicators.length; i--; ) {\n\t\t\tthis.indicators.push( new Indicator(this, indicators[i]) );\n\t\t}\n\n\t\t// TODO: check if we can use array.map (wide compatibility and performance issues)\n\t\tfunction _indicatorsMap (fn) {\n\t\t\tif (that.indicators) {\n\t\t\t\tfor ( var i = that.indicators.length; i--; ) {\n\t\t\t\t\tfn.call(that.indicators[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( this.options.fadeScrollbars ) {\n\t\t\tthis.on('scrollEnd', function () {\n\t\t\t\t_indicatorsMap(function () {\n\t\t\t\t\tthis.fade();\n\t\t\t\t});\n\t\t\t});\n\n\t\t\tthis.on('scrollCancel', function () {\n\t\t\t\t_indicatorsMap(function () {\n\t\t\t\t\tthis.fade();\n\t\t\t\t});\n\t\t\t});\n\n\t\t\tthis.on('scrollStart', function () {\n\t\t\t\t_indicatorsMap(function () {\n\t\t\t\t\tthis.fade(1);\n\t\t\t\t});\n\t\t\t});\n\n\t\t\tthis.on('beforeScrollStart', function () {\n\t\t\t\t_indicatorsMap(function () {\n\t\t\t\t\tthis.fade(1, true);\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\n\n\t\tthis.on('refresh', function () {\n\t\t\t_indicatorsMap(function () {\n\t\t\t\tthis.refresh();\n\t\t\t});\n\t\t});\n\n\t\tthis.on('destroy', function () {\n\t\t\t_indicatorsMap(function () {\n\t\t\t\tthis.destroy();\n\t\t\t});\n\n\t\t\tdelete this.indicators;\n\t\t});\n\t},\n\n\t_initWheel: function () {\n\t\tutils.addEvent(this.wrapper, 'wheel', this);\n\t\tutils.addEvent(this.wrapper, 'mousewheel', this);\n\t\tutils.addEvent(this.wrapper, 'DOMMouseScroll', this);\n\n\t\tthis.on('destroy', function () {\n\t\t\tclearTimeout(this.wheelTimeout);\n\t\t\tthis.wheelTimeout = null;\n\t\t\tutils.removeEvent(this.wrapper, 'wheel', this);\n\t\t\tutils.removeEvent(this.wrapper, 'mousewheel', this);\n\t\t\tutils.removeEvent(this.wrapper, 'DOMMouseScroll', this);\n\t\t});\n\t},\n\n\t_wheel: function (e) {\n\t\tif ( !this.enabled ) {\n\t\t\treturn;\n\t\t}\n\n\t\te.preventDefault();\n\n\t\tvar wheelDeltaX, wheelDeltaY,\n\t\t\tnewX, newY,\n\t\t\tthat = this;\n\n\t\tif ( this.wheelTimeout === undefined ) {\n\t\t\tthat._execEvent('scrollStart');\n\t\t}\n\n\t\t// Execute the scrollEnd event after 400ms the wheel stopped scrolling\n\t\tclearTimeout(this.wheelTimeout);\n\t\tthis.wheelTimeout = setTimeout(function () {\n\t\t\tif(!that.options.snap) {\n\t\t\t\tthat._execEvent('scrollEnd');\n\t\t\t}\n\t\t\tthat.wheelTimeout = undefined;\n\t\t}, 400);\n\n\t\tif ( 'deltaX' in e ) {\n\t\t\tif (e.deltaMode === 1) {\n\t\t\t\twheelDeltaX = -e.deltaX * this.options.mouseWheelSpeed;\n\t\t\t\twheelDeltaY = -e.deltaY * this.options.mouseWheelSpeed;\n\t\t\t} else {\n\t\t\t\twheelDeltaX = -e.deltaX;\n\t\t\t\twheelDeltaY = -e.deltaY;\n\t\t\t}\n\t\t} else if ( 'wheelDeltaX' in e ) {\n\t\t\twheelDeltaX = e.wheelDeltaX / 120 * this.options.mouseWheelSpeed;\n\t\t\twheelDeltaY = e.wheelDeltaY / 120 * this.options.mouseWheelSpeed;\n\t\t} else if ( 'wheelDelta' in e ) {\n\t\t\twheelDeltaX = wheelDeltaY = e.wheelDelta / 120 * this.options.mouseWheelSpeed;\n\t\t} else if ( 'detail' in e ) {\n\t\t\twheelDeltaX = wheelDeltaY = -e.detail / 3 * this.options.mouseWheelSpeed;\n\t\t} else {\n\t\t\treturn;\n\t\t}\n\n\t\twheelDeltaX *= this.options.invertWheelDirection;\n\t\twheelDeltaY *= this.options.invertWheelDirection;\n\n\t\tif ( !this.hasVerticalScroll ) {\n\t\t\twheelDeltaX = wheelDeltaY;\n\t\t\twheelDeltaY = 0;\n\t\t}\n\n\t\tif ( this.options.snap ) {\n\t\t\tnewX = this.currentPage.pageX;\n\t\t\tnewY = this.currentPage.pageY;\n\n\t\t\tif ( wheelDeltaX > 0 ) {\n\t\t\t\tnewX--;\n\t\t\t} else if ( wheelDeltaX < 0 ) {\n\t\t\t\tnewX++;\n\t\t\t}\n\n\t\t\tif ( wheelDeltaY > 0 ) {\n\t\t\t\tnewY--;\n\t\t\t} else if ( wheelDeltaY < 0 ) {\n\t\t\t\tnewY++;\n\t\t\t}\n\n\t\t\tthis.goToPage(newX, newY);\n\n\t\t\treturn;\n\t\t}\n\n\t\tnewX = this.x + Math.round(this.hasHorizontalScroll ? wheelDeltaX : 0);\n\t\tnewY = this.y + Math.round(this.hasVerticalScroll ? wheelDeltaY : 0);\n\n\t\tthis.directionX = wheelDeltaX > 0 ? -1 : wheelDeltaX < 0 ? 1 : 0;\n\t\tthis.directionY = wheelDeltaY > 0 ? -1 : wheelDeltaY < 0 ? 1 : 0;\n\n\t\tif ( newX > 0 ) {\n\t\t\tnewX = 0;\n\t\t} else if ( newX < this.maxScrollX ) {\n\t\t\tnewX = this.maxScrollX;\n\t\t}\n\n\t\tif ( newY > 0 ) {\n\t\t\tnewY = 0;\n\t\t} else if ( newY < this.maxScrollY ) {\n\t\t\tnewY = this.maxScrollY;\n\t\t}\n\n\t\tthis.scrollTo(newX, newY, 0);\n\n// INSERT POINT: _wheel\n\t},\n\n\t_initSnap: function () {\n\t\tthis.currentPage = {};\n\n\t\tif ( typeof this.options.snap == 'string' ) {\n\t\t\tthis.options.snap = this.scroller.querySelectorAll(this.options.snap);\n\t\t}\n\n\t\tthis.on('refresh', function () {\n\t\t\tvar i = 0, l,\n\t\t\t\tm = 0, n,\n\t\t\t\tcx, cy,\n\t\t\t\tx = 0, y,\n\t\t\t\tstepX = this.options.snapStepX || this.wrapperWidth,\n\t\t\t\tstepY = this.options.snapStepY || this.wrapperHeight,\n\t\t\t\tel;\n\n\t\t\tthis.pages = [];\n\n\t\t\tif ( !this.wrapperWidth || !this.wrapperHeight || !this.scrollerWidth || !this.scrollerHeight ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( this.options.snap === true ) {\n\t\t\t\tcx = Math.round( stepX / 2 );\n\t\t\t\tcy = Math.round( stepY / 2 );\n\n\t\t\t\twhile ( x > -this.scrollerWidth ) {\n\t\t\t\t\tthis.pages[i] = [];\n\t\t\t\t\tl = 0;\n\t\t\t\t\ty = 0;\n\n\t\t\t\t\twhile ( y > -this.scrollerHeight ) {\n\t\t\t\t\t\tthis.pages[i][l] = {\n\t\t\t\t\t\t\tx: Math.max(x, this.maxScrollX),\n\t\t\t\t\t\t\ty: Math.max(y, this.maxScrollY),\n\t\t\t\t\t\t\twidth: stepX,\n\t\t\t\t\t\t\theight: stepY,\n\t\t\t\t\t\t\tcx: x - cx,\n\t\t\t\t\t\t\tcy: y - cy\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\ty -= stepY;\n\t\t\t\t\t\tl++;\n\t\t\t\t\t}\n\n\t\t\t\t\tx -= stepX;\n\t\t\t\t\ti++;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tel = this.options.snap;\n\t\t\t\tl = el.length;\n\t\t\t\tn = -1;\n\n\t\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\t\tif ( i === 0 || el[i].offsetLeft <= el[i-1].offsetLeft ) {\n\t\t\t\t\t\tm = 0;\n\t\t\t\t\t\tn++;\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( !this.pages[m] ) {\n\t\t\t\t\t\tthis.pages[m] = [];\n\t\t\t\t\t}\n\n\t\t\t\t\tx = Math.max(-el[i].offsetLeft, this.maxScrollX);\n\t\t\t\t\ty = Math.max(-el[i].offsetTop, this.maxScrollY);\n\t\t\t\t\tcx = x - Math.round(el[i].offsetWidth / 2);\n\t\t\t\t\tcy = y - Math.round(el[i].offsetHeight / 2);\n\n\t\t\t\t\tthis.pages[m][n] = {\n\t\t\t\t\t\tx: x,\n\t\t\t\t\t\ty: y,\n\t\t\t\t\t\twidth: el[i].offsetWidth,\n\t\t\t\t\t\theight: el[i].offsetHeight,\n\t\t\t\t\t\tcx: cx,\n\t\t\t\t\t\tcy: cy\n\t\t\t\t\t};\n\n\t\t\t\t\tif ( x > this.maxScrollX ) {\n\t\t\t\t\t\tm++;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.goToPage(this.currentPage.pageX || 0, this.currentPage.pageY || 0, 0);\n\n\t\t\t// Update snap threshold if needed\n\t\t\tif ( this.options.snapThreshold % 1 === 0 ) {\n\t\t\t\tthis.snapThresholdX = this.options.snapThreshold;\n\t\t\t\tthis.snapThresholdY = this.options.snapThreshold;\n\t\t\t} else {\n\t\t\t\tthis.snapThresholdX = Math.round(this.pages[this.currentPage.pageX][this.currentPage.pageY].width * this.options.snapThreshold);\n\t\t\t\tthis.snapThresholdY = Math.round(this.pages[this.currentPage.pageX][this.currentPage.pageY].height * this.options.snapThreshold);\n\t\t\t}\n\t\t});\n\n\t\tthis.on('flick', function () {\n\t\t\tvar time = this.options.snapSpeed || Math.max(\n\t\t\t\t\tMath.max(\n\t\t\t\t\t\tMath.min(Math.abs(this.x - this.startX), 1000),\n\t\t\t\t\t\tMath.min(Math.abs(this.y - this.startY), 1000)\n\t\t\t\t\t), 300);\n\n\t\t\tthis.goToPage(\n\t\t\t\tthis.currentPage.pageX + this.directionX,\n\t\t\t\tthis.currentPage.pageY + this.directionY,\n\t\t\t\ttime\n\t\t\t);\n\t\t});\n\t},\n\n\t_nearestSnap: function (x, y) {\n\t\tif ( !this.pages.length ) {\n\t\t\treturn { x: 0, y: 0, pageX: 0, pageY: 0 };\n\t\t}\n\n\t\tvar i = 0,\n\t\t\tl = this.pages.length,\n\t\t\tm = 0;\n\n\t\t// Check if we exceeded the snap threshold\n\t\tif ( Math.abs(x - this.absStartX) < this.snapThresholdX &&\n\t\t\tMath.abs(y - this.absStartY) < this.snapThresholdY ) {\n\t\t\treturn this.currentPage;\n\t\t}\n\n\t\tif ( x > 0 ) {\n\t\t\tx = 0;\n\t\t} else if ( x < this.maxScrollX ) {\n\t\t\tx = this.maxScrollX;\n\t\t}\n\n\t\tif ( y > 0 ) {\n\t\t\ty = 0;\n\t\t} else if ( y < this.maxScrollY ) {\n\t\t\ty = this.maxScrollY;\n\t\t}\n\n\t\tfor ( ; i < l; i++ ) {\n\t\t\tif ( x >= this.pages[i][0].cx ) {\n\t\t\t\tx = this.pages[i][0].x;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tl = this.pages[i].length;\n\n\t\tfor ( ; m < l; m++ ) {\n\t\t\tif ( y >= this.pages[0][m].cy ) {\n\t\t\t\ty = this.pages[0][m].y;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tif ( i == this.currentPage.pageX ) {\n\t\t\ti += this.directionX;\n\n\t\t\tif ( i < 0 ) {\n\t\t\t\ti = 0;\n\t\t\t} else if ( i >= this.pages.length ) {\n\t\t\t\ti = this.pages.length - 1;\n\t\t\t}\n\n\t\t\tx = this.pages[i][0].x;\n\t\t}\n\n\t\tif ( m == this.currentPage.pageY ) {\n\t\t\tm += this.directionY;\n\n\t\t\tif ( m < 0 ) {\n\t\t\t\tm = 0;\n\t\t\t} else if ( m >= this.pages[0].length ) {\n\t\t\t\tm = this.pages[0].length - 1;\n\t\t\t}\n\n\t\t\ty = this.pages[0][m].y;\n\t\t}\n\n\t\treturn {\n\t\t\tx: x,\n\t\t\ty: y,\n\t\t\tpageX: i,\n\t\t\tpageY: m\n\t\t};\n\t},\n\n\tgoToPage: function (x, y, time, easing) {\n\t\teasing = easing || this.options.bounceEasing;\n\n\t\tif ( x >= this.pages.length ) {\n\t\t\tx = this.pages.length - 1;\n\t\t} else if ( x < 0 ) {\n\t\t\tx = 0;\n\t\t}\n\n\t\tif ( y >= this.pages[x].length ) {\n\t\t\ty = this.pages[x].length - 1;\n\t\t} else if ( y < 0 ) {\n\t\t\ty = 0;\n\t\t}\n\n\t\tvar posX = this.pages[x][y].x,\n\t\t\tposY = this.pages[x][y].y;\n\n\t\ttime = time === undefined ? this.options.snapSpeed || Math.max(\n\t\t\tMath.max(\n\t\t\t\tMath.min(Math.abs(posX - this.x), 1000),\n\t\t\t\tMath.min(Math.abs(posY - this.y), 1000)\n\t\t\t), 300) : time;\n\n\t\tthis.currentPage = {\n\t\t\tx: posX,\n\t\t\ty: posY,\n\t\t\tpageX: x,\n\t\t\tpageY: y\n\t\t};\n\n\t\tthis.scrollTo(posX, posY, time, easing);\n\t},\n\n\tnext: function (time, easing) {\n\t\tvar x = this.currentPage.pageX,\n\t\t\ty = this.currentPage.pageY;\n\n\t\tx++;\n\n\t\tif ( x >= this.pages.length && this.hasVerticalScroll ) {\n\t\t\tx = 0;\n\t\t\ty++;\n\t\t}\n\n\t\tthis.goToPage(x, y, time, easing);\n\t},\n\n\tprev: function (time, easing) {\n\t\tvar x = this.currentPage.pageX,\n\t\t\ty = this.currentPage.pageY;\n\n\t\tx--;\n\n\t\tif ( x < 0 && this.hasVerticalScroll ) {\n\t\t\tx = 0;\n\t\t\ty--;\n\t\t}\n\n\t\tthis.goToPage(x, y, time, easing);\n\t},\n\n\t_initKeys: function (e) {\n\t\t// default key bindings\n\t\tvar keys = {\n\t\t\tpageUp: 33,\n\t\t\tpageDown: 34,\n\t\t\tend: 35,\n\t\t\thome: 36,\n\t\t\tleft: 37,\n\t\t\tup: 38,\n\t\t\tright: 39,\n\t\t\tdown: 40\n\t\t};\n\t\tvar i;\n\n\t\t// if you give me characters I give you keycode\n\t\tif ( typeof this.options.keyBindings == 'object' ) {\n\t\t\tfor ( i in this.options.keyBindings ) {\n\t\t\t\tif ( typeof this.options.keyBindings[i] == 'string' ) {\n\t\t\t\t\tthis.options.keyBindings[i] = this.options.keyBindings[i].toUpperCase().charCodeAt(0);\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tthis.options.keyBindings = {};\n\t\t}\n\n\t\tfor ( i in keys ) {\n\t\t\tthis.options.keyBindings[i] = this.options.keyBindings[i] || keys[i];\n\t\t}\n\n\t\tutils.addEvent(window, 'keydown', this);\n\n\t\tthis.on('destroy', function () {\n\t\t\tutils.removeEvent(window, 'keydown', this);\n\t\t});\n\t},\n\n\t_key: function (e) {\n\t\tif ( !this.enabled ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar snap = this.options.snap,\t// we are using this alot, better to cache it\n\t\t\tnewX = snap ? this.currentPage.pageX : this.x,\n\t\t\tnewY = snap ? this.currentPage.pageY : this.y,\n\t\t\tnow = utils.getTime(),\n\t\t\tprevTime = this.keyTime || 0,\n\t\t\tacceleration = 0.250,\n\t\t\tpos;\n\n\t\tif ( this.options.useTransition && this.isInTransition ) {\n\t\t\tpos = this.getComputedPosition();\n\n\t\t\tthis._translate(Math.round(pos.x), Math.round(pos.y));\n\t\t\tthis.isInTransition = false;\n\t\t}\n\n\t\tthis.keyAcceleration = now - prevTime < 200 ? Math.min(this.keyAcceleration + acceleration, 50) : 0;\n\n\t\tswitch ( e.keyCode ) {\n\t\t\tcase this.options.keyBindings.pageUp:\n\t\t\t\tif ( this.hasHorizontalScroll && !this.hasVerticalScroll ) {\n\t\t\t\t\tnewX += snap ? 1 : this.wrapperWidth;\n\t\t\t\t} else {\n\t\t\t\t\tnewY += snap ? 1 : this.wrapperHeight;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase this.options.keyBindings.pageDown:\n\t\t\t\tif ( this.hasHorizontalScroll && !this.hasVerticalScroll ) {\n\t\t\t\t\tnewX -= snap ? 1 : this.wrapperWidth;\n\t\t\t\t} else {\n\t\t\t\t\tnewY -= snap ? 1 : this.wrapperHeight;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase this.options.keyBindings.end:\n\t\t\t\tnewX = snap ? this.pages.length-1 : this.maxScrollX;\n\t\t\t\tnewY = snap ? this.pages[0].length-1 : this.maxScrollY;\n\t\t\t\tbreak;\n\t\t\tcase this.options.keyBindings.home:\n\t\t\t\tnewX = 0;\n\t\t\t\tnewY = 0;\n\t\t\t\tbreak;\n\t\t\tcase this.options.keyBindings.left:\n\t\t\t\tnewX += snap ? -1 : 5 + this.keyAcceleration>>0;\n\t\t\t\tbreak;\n\t\t\tcase this.options.keyBindings.up:\n\t\t\t\tnewY += snap ? 1 : 5 + this.keyAcceleration>>0;\n\t\t\t\tbreak;\n\t\t\tcase this.options.keyBindings.right:\n\t\t\t\tnewX -= snap ? -1 : 5 + this.keyAcceleration>>0;\n\t\t\t\tbreak;\n\t\t\tcase this.options.keyBindings.down:\n\t\t\t\tnewY -= snap ? 1 : 5 + this.keyAcceleration>>0;\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\treturn;\n\t\t}\n\n\t\tif ( snap ) {\n\t\t\tthis.goToPage(newX, newY);\n\t\t\treturn;\n\t\t}\n\n\t\tif ( newX > 0 ) {\n\t\t\tnewX = 0;\n\t\t\tthis.keyAcceleration = 0;\n\t\t} else if ( newX < this.maxScrollX ) {\n\t\t\tnewX = this.maxScrollX;\n\t\t\tthis.keyAcceleration = 0;\n\t\t}\n\n\t\tif ( newY > 0 ) {\n\t\t\tnewY = 0;\n\t\t\tthis.keyAcceleration = 0;\n\t\t} else if ( newY < this.maxScrollY ) {\n\t\t\tnewY = this.maxScrollY;\n\t\t\tthis.keyAcceleration = 0;\n\t\t}\n\n\t\tthis.scrollTo(newX, newY, 0);\n\n\t\tthis.keyTime = now;\n\t},\n\n\t_animate: function (destX, destY, duration, easingFn) {\n\t\tvar that = this,\n\t\t\tstartX = this.x,\n\t\t\tstartY = this.y,\n\t\t\tstartTime = utils.getTime(),\n\t\t\tdestTime = startTime + duration;\n\n\t\tfunction step () {\n\t\t\tvar now = utils.getTime(),\n\t\t\t\tnewX, newY,\n\t\t\t\teasing;\n\n\t\t\tif ( now >= destTime ) {\n\t\t\t\tthat.isAnimating = false;\n\t\t\t\tthat._translate(destX, destY);\n\n\t\t\t\tif ( !that.resetPosition(that.options.bounceTime) ) {\n\t\t\t\t\tthat._execEvent('scrollEnd');\n\t\t\t\t}\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tnow = ( now - startTime ) / duration;\n\t\t\teasing = easingFn(now);\n\t\t\tnewX = ( destX - startX ) * easing + startX;\n\t\t\tnewY = ( destY - startY ) * easing + startY;\n\t\t\tthat._translate(newX, newY);\n\n\t\t\tif ( that.isAnimating ) {\n\t\t\t\trAF(step);\n\t\t\t}\n\t\t}\n\n\t\tthis.isAnimating = true;\n\t\tstep();\n\t},\n\thandleEvent: function (e) {\n\t\tswitch ( e.type ) {\n\t\t\tcase 'touchstart':\n\t\t\tcase 'pointerdown':\n\t\t\tcase 'MSPointerDown':\n\t\t\tcase 'mousedown':\n\t\t\t\tthis._start(e);\n\t\t\t\tbreak;\n\t\t\tcase 'touchmove':\n\t\t\tcase 'pointermove':\n\t\t\tcase 'MSPointerMove':\n\t\t\tcase 'mousemove':\n\t\t\t\tthis._move(e);\n\t\t\t\tbreak;\n\t\t\tcase 'touchend':\n\t\t\tcase 'pointerup':\n\t\t\tcase 'MSPointerUp':\n\t\t\tcase 'mouseup':\n\t\t\tcase 'touchcancel':\n\t\t\tcase 'pointercancel':\n\t\t\tcase 'MSPointerCancel':\n\t\t\tcase 'mousecancel':\n\t\t\t\tthis._end(e);\n\t\t\t\tbreak;\n\t\t\tcase 'orientationchange':\n\t\t\tcase 'resize':\n\t\t\t\tthis._resize();\n\t\t\t\tbreak;\n\t\t\tcase 'transitionend':\n\t\t\tcase 'webkitTransitionEnd':\n\t\t\tcase 'oTransitionEnd':\n\t\t\tcase 'MSTransitionEnd':\n\t\t\t\tthis._transitionEnd(e);\n\t\t\t\tbreak;\n\t\t\tcase 'wheel':\n\t\t\tcase 'DOMMouseScroll':\n\t\t\tcase 'mousewheel':\n\t\t\t\tthis._wheel(e);\n\t\t\t\tbreak;\n\t\t\tcase 'keydown':\n\t\t\t\tthis._key(e);\n\t\t\t\tbreak;\n\t\t\tcase 'click':\n\t\t\t\tif ( this.enabled && !e._constructed ) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\t}\n};\nfunction createDefaultScrollbar (direction, interactive, type) {\n\tvar scrollbar = document.createElement('div'),\n\t\tindicator = document.createElement('div');\n\n\tif ( type === true ) {\n\t\tscrollbar.style.cssText = 'position:absolute;z-index:9999';\n\t\tindicator.style.cssText = '-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;position:absolute;background:rgba(0,0,0,0.5);border:1px solid rgba(255,255,255,0.9);border-radius:3px';\n\t}\n\n\tindicator.className = 'iScrollIndicator';\n\n\tif ( direction == 'h' ) {\n\t\tif ( type === true ) {\n\t\t\tscrollbar.style.cssText += ';height:7px;left:2px;right:2px;bottom:0';\n\t\t\tindicator.style.height = '100%';\n\t\t}\n\t\tscrollbar.className = 'iScrollHorizontalScrollbar';\n\t} else {\n\t\tif ( type === true ) {\n\t\t\tscrollbar.style.cssText += ';width:7px;bottom:2px;top:2px;right:1px';\n\t\t\tindicator.style.width = '100%';\n\t\t}\n\t\tscrollbar.className = 'iScrollVerticalScrollbar';\n\t}\n\n\tscrollbar.style.cssText += ';overflow:hidden';\n\n\tif ( !interactive ) {\n\t\tscrollbar.style.pointerEvents = 'none';\n\t}\n\n\tscrollbar.appendChild(indicator);\n\n\treturn scrollbar;\n}\n\nfunction Indicator (scroller, options) {\n\tthis.wrapper = typeof options.el == 'string' ? document.querySelector(options.el) : options.el;\n\tthis.wrapperStyle = this.wrapper.style;\n\tthis.indicator = this.wrapper.children[0];\n\tthis.indicatorStyle = this.indicator.style;\n\tthis.scroller = scroller;\n\n\tthis.options = {\n\t\tlistenX: true,\n\t\tlistenY: true,\n\t\tinteractive: false,\n\t\tresize: true,\n\t\tdefaultScrollbars: false,\n\t\tshrink: false,\n\t\tfade: false,\n\t\tspeedRatioX: 0,\n\t\tspeedRatioY: 0\n\t};\n\n\tfor ( var i in options ) {\n\t\tthis.options[i] = options[i];\n\t}\n\n\tthis.sizeRatioX = 1;\n\tthis.sizeRatioY = 1;\n\tthis.maxPosX = 0;\n\tthis.maxPosY = 0;\n\n\tif ( this.options.interactive ) {\n\t\tif ( !this.options.disableTouch ) {\n\t\t\tutils.addEvent(this.indicator, 'touchstart', this);\n\t\t\tutils.addEvent(window, 'touchend', this);\n\t\t}\n\t\tif ( !this.options.disablePointer ) {\n\t\t\tutils.addEvent(this.indicator, utils.prefixPointerEvent('pointerdown'), this);\n\t\t\tutils.addEvent(window, utils.prefixPointerEvent('pointerup'), this);\n\t\t}\n\t\tif ( !this.options.disableMouse ) {\n\t\t\tutils.addEvent(this.indicator, 'mousedown', this);\n\t\t\tutils.addEvent(window, 'mouseup', this);\n\t\t}\n\t}\n\n\tif ( this.options.fade ) {\n\t\tthis.wrapperStyle[utils.style.transform] = this.scroller.translateZ;\n\t\tvar durationProp = utils.style.transitionDuration;\n\t\tthis.wrapperStyle[durationProp] = utils.isBadAndroid ? '0.0001ms' : '0ms';\n\t\t// remove 0.0001ms\n\t\tvar self = this;\n\t\tif(utils.isBadAndroid) {\n\t\t\trAF(function() {\n\t\t\t\tif(self.wrapperStyle[durationProp] === '0.0001ms') {\n\t\t\t\t\tself.wrapperStyle[durationProp] = '0s';\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\tthis.wrapperStyle.opacity = '0';\n\t}\n}\n\nIndicator.prototype = {\n\thandleEvent: function (e) {\n\t\tswitch ( e.type ) {\n\t\t\tcase 'touchstart':\n\t\t\tcase 'pointerdown':\n\t\t\tcase 'MSPointerDown':\n\t\t\tcase 'mousedown':\n\t\t\t\tthis._start(e);\n\t\t\t\tbreak;\n\t\t\tcase 'touchmove':\n\t\t\tcase 'pointermove':\n\t\t\tcase 'MSPointerMove':\n\t\t\tcase 'mousemove':\n\t\t\t\tthis._move(e);\n\t\t\t\tbreak;\n\t\t\tcase 'touchend':\n\t\t\tcase 'pointerup':\n\t\t\tcase 'MSPointerUp':\n\t\t\tcase 'mouseup':\n\t\t\tcase 'touchcancel':\n\t\t\tcase 'pointercancel':\n\t\t\tcase 'MSPointerCancel':\n\t\t\tcase 'mousecancel':\n\t\t\t\tthis._end(e);\n\t\t\t\tbreak;\n\t\t}\n\t},\n\n\tdestroy: function () {\n\t\tif ( this.options.fadeScrollbars ) {\n\t\t\tclearTimeout(this.fadeTimeout);\n\t\t\tthis.fadeTimeout = null;\n\t\t}\n\t\tif ( this.options.interactive ) {\n\t\t\tutils.removeEvent(this.indicator, 'touchstart', this);\n\t\t\tutils.removeEvent(this.indicator, utils.prefixPointerEvent('pointerdown'), this);\n\t\t\tutils.removeEvent(this.indicator, 'mousedown', this);\n\n\t\t\tutils.removeEvent(window, 'touchmove', this);\n\t\t\tutils.removeEvent(window, utils.prefixPointerEvent('pointermove'), this);\n\t\t\tutils.removeEvent(window, 'mousemove', this);\n\n\t\t\tutils.removeEvent(window, 'touchend', this);\n\t\t\tutils.removeEvent(window, utils.prefixPointerEvent('pointerup'), this);\n\t\t\tutils.removeEvent(window, 'mouseup', this);\n\t\t}\n\n\t\tif ( this.options.defaultScrollbars ) {\n\t\t\tthis.wrapper.parentNode.removeChild(this.wrapper);\n\t\t}\n\t},\n\n\t_start: function (e) {\n\t\tvar point = e.touches ? e.touches[0] : e;\n\n\t\te.preventDefault();\n\t\te.stopPropagation();\n\n\t\tthis.transitionTime();\n\n\t\tthis.initiated = true;\n\t\tthis.moved = false;\n\t\tthis.lastPointX\t= point.pageX;\n\t\tthis.lastPointY\t= point.pageY;\n\n\t\tthis.startTime\t= utils.getTime();\n\n\t\tif ( !this.options.disableTouch ) {\n\t\t\tutils.addEvent(window, 'touchmove', this);\n\t\t}\n\t\tif ( !this.options.disablePointer ) {\n\t\t\tutils.addEvent(window, utils.prefixPointerEvent('pointermove'), this);\n\t\t}\n\t\tif ( !this.options.disableMouse ) {\n\t\t\tutils.addEvent(window, 'mousemove', this);\n\t\t}\n\n\t\tthis.scroller._execEvent('beforeScrollStart');\n\t},\n\n\t_move: function (e) {\n\t\tvar point = e.touches ? e.touches[0] : e,\n\t\t\tdeltaX, deltaY,\n\t\t\tnewX, newY,\n\t\t\ttimestamp = utils.getTime();\n\n\t\tif ( !this.moved ) {\n\t\t\tthis.scroller._execEvent('scrollStart');\n\t\t}\n\n\t\tthis.moved = true;\n\n\t\tdeltaX = point.pageX - this.lastPointX;\n\t\tthis.lastPointX = point.pageX;\n\n\t\tdeltaY = point.pageY - this.lastPointY;\n\t\tthis.lastPointY = point.pageY;\n\n\t\tnewX = this.x + deltaX;\n\t\tnewY = this.y + deltaY;\n\n\t\tthis._pos(newX, newY);\n\n// INSERT POINT: indicator._move\n\n\t\te.preventDefault();\n\t\te.stopPropagation();\n\t},\n\n\t_end: function (e) {\n\t\tif ( !this.initiated ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.initiated = false;\n\n\t\te.preventDefault();\n\t\te.stopPropagation();\n\n\t\tutils.removeEvent(window, 'touchmove', this);\n\t\tutils.removeEvent(window, utils.prefixPointerEvent('pointermove'), this);\n\t\tutils.removeEvent(window, 'mousemove', this);\n\n\t\tif ( this.scroller.options.snap ) {\n\t\t\tvar snap = this.scroller._nearestSnap(this.scroller.x, this.scroller.y);\n\n\t\t\tvar time = this.options.snapSpeed || Math.max(\n\t\t\t\t\tMath.max(\n\t\t\t\t\t\tMath.min(Math.abs(this.scroller.x - snap.x), 1000),\n\t\t\t\t\t\tMath.min(Math.abs(this.scroller.y - snap.y), 1000)\n\t\t\t\t\t), 300);\n\n\t\t\tif ( this.scroller.x != snap.x || this.scroller.y != snap.y ) {\n\t\t\t\tthis.scroller.directionX = 0;\n\t\t\t\tthis.scroller.directionY = 0;\n\t\t\t\tthis.scroller.currentPage = snap;\n\t\t\t\tthis.scroller.scrollTo(snap.x, snap.y, time, this.scroller.options.bounceEasing);\n\t\t\t}\n\t\t}\n\n\t\tif ( this.moved ) {\n\t\t\tthis.scroller._execEvent('scrollEnd');\n\t\t}\n\t},\n\n\ttransitionTime: function (time) {\n\t\ttime = time || 0;\n\t\tvar durationProp = utils.style.transitionDuration;\n\t\tthis.indicatorStyle[durationProp] = time + 'ms';\n\n\t\tif ( !time && utils.isBadAndroid ) {\n\t\t\tthis.indicatorStyle[durationProp] = '0.0001ms';\n\t\t\t// remove 0.0001ms\n\t\t\tvar self = this;\n\t\t\trAF(function() {\n\t\t\t\tif(self.indicatorStyle[durationProp] === '0.0001ms') {\n\t\t\t\t\tself.indicatorStyle[durationProp] = '0s';\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t},\n\n\ttransitionTimingFunction: function (easing) {\n\t\tthis.indicatorStyle[utils.style.transitionTimingFunction] = easing;\n\t},\n\n\trefresh: function () {\n\t\tthis.transitionTime();\n\n\t\tif ( this.options.listenX && !this.options.listenY ) {\n\t\t\tthis.indicatorStyle.display = this.scroller.hasHorizontalScroll ? 'block' : 'none';\n\t\t} else if ( this.options.listenY && !this.options.listenX ) {\n\t\t\tthis.indicatorStyle.display = this.scroller.hasVerticalScroll ? 'block' : 'none';\n\t\t} else {\n\t\t\tthis.indicatorStyle.display = this.scroller.hasHorizontalScroll || this.scroller.hasVerticalScroll ? 'block' : 'none';\n\t\t}\n\n\t\tif ( this.scroller.hasHorizontalScroll && this.scroller.hasVerticalScroll ) {\n\t\t\tutils.addClass(this.wrapper, 'iScrollBothScrollbars');\n\t\t\tutils.removeClass(this.wrapper, 'iScrollLoneScrollbar');\n\n\t\t\tif ( this.options.defaultScrollbars && this.options.customStyle ) {\n\t\t\t\tif ( this.options.listenX ) {\n\t\t\t\t\tthis.wrapper.style.right = '8px';\n\t\t\t\t} else {\n\t\t\t\t\tthis.wrapper.style.bottom = '8px';\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tutils.removeClass(this.wrapper, 'iScrollBothScrollbars');\n\t\t\tutils.addClass(this.wrapper, 'iScrollLoneScrollbar');\n\n\t\t\tif ( this.options.defaultScrollbars && this.options.customStyle ) {\n\t\t\t\tif ( this.options.listenX ) {\n\t\t\t\t\tthis.wrapper.style.right = '2px';\n\t\t\t\t} else {\n\t\t\t\t\tthis.wrapper.style.bottom = '2px';\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tvar r = this.wrapper.offsetHeight;\t// force refresh\n\n\t\tif ( this.options.listenX ) {\n\t\t\tthis.wrapperWidth = this.wrapper.clientWidth;\n\t\t\tif ( this.options.resize ) {\n\t\t\t\tthis.indicatorWidth = Math.max(Math.round(this.wrapperWidth * this.wrapperWidth / (this.scroller.scrollerWidth || this.wrapperWidth || 1)), 8);\n\t\t\t\tthis.indicatorStyle.width = this.indicatorWidth + 'px';\n\t\t\t} else {\n\t\t\t\tthis.indicatorWidth = this.indicator.clientWidth;\n\t\t\t}\n\n\t\t\tthis.maxPosX = this.wrapperWidth - this.indicatorWidth;\n\n\t\t\tif ( this.options.shrink == 'clip' ) {\n\t\t\t\tthis.minBoundaryX = -this.indicatorWidth + 8;\n\t\t\t\tthis.maxBoundaryX = this.wrapperWidth - 8;\n\t\t\t} else {\n\t\t\t\tthis.minBoundaryX = 0;\n\t\t\t\tthis.maxBoundaryX = this.maxPosX;\n\t\t\t}\n\n\t\t\tthis.sizeRatioX = this.options.speedRatioX || (this.scroller.maxScrollX && (this.maxPosX / this.scroller.maxScrollX));\n\t\t}\n\n\t\tif ( this.options.listenY ) {\n\t\t\tthis.wrapperHeight = this.wrapper.clientHeight;\n\t\t\tif ( this.options.resize ) {\n\t\t\t\tthis.indicatorHeight = Math.max(Math.round(this.wrapperHeight * this.wrapperHeight / (this.scroller.scrollerHeight || this.wrapperHeight || 1)), 8);\n\t\t\t\tthis.indicatorStyle.height = this.indicatorHeight + 'px';\n\t\t\t} else {\n\t\t\t\tthis.indicatorHeight = this.indicator.clientHeight;\n\t\t\t}\n\n\t\t\tthis.maxPosY = this.wrapperHeight - this.indicatorHeight;\n\n\t\t\tif ( this.options.shrink == 'clip' ) {\n\t\t\t\tthis.minBoundaryY = -this.indicatorHeight + 8;\n\t\t\t\tthis.maxBoundaryY = this.wrapperHeight - 8;\n\t\t\t} else {\n\t\t\t\tthis.minBoundaryY = 0;\n\t\t\t\tthis.maxBoundaryY = this.maxPosY;\n\t\t\t}\n\n\t\t\tthis.maxPosY = this.wrapperHeight - this.indicatorHeight;\n\t\t\tthis.sizeRatioY = this.options.speedRatioY || (this.scroller.maxScrollY && (this.maxPosY / this.scroller.maxScrollY));\n\t\t}\n\n\t\tthis.updatePosition();\n\t},\n\n\tupdatePosition: function () {\n\t\tvar x = this.options.listenX && Math.round(this.sizeRatioX * this.scroller.x) || 0,\n\t\t\ty = this.options.listenY && Math.round(this.sizeRatioY * this.scroller.y) || 0;\n\n\t\tif ( !this.options.ignoreBoundaries ) {\n\t\t\tif ( x < this.minBoundaryX ) {\n\t\t\t\tif ( this.options.shrink == 'scale' ) {\n\t\t\t\t\tthis.width = Math.max(this.indicatorWidth + x, 8);\n\t\t\t\t\tthis.indicatorStyle.width = this.width + 'px';\n\t\t\t\t}\n\t\t\t\tx = this.minBoundaryX;\n\t\t\t} else if ( x > this.maxBoundaryX ) {\n\t\t\t\tif ( this.options.shrink == 'scale' ) {\n\t\t\t\t\tthis.width = Math.max(this.indicatorWidth - (x - this.maxPosX), 8);\n\t\t\t\t\tthis.indicatorStyle.width = this.width + 'px';\n\t\t\t\t\tx = this.maxPosX + this.indicatorWidth - this.width;\n\t\t\t\t} else {\n\t\t\t\t\tx = this.maxBoundaryX;\n\t\t\t\t}\n\t\t\t} else if ( this.options.shrink == 'scale' && this.width != this.indicatorWidth ) {\n\t\t\t\tthis.width = this.indicatorWidth;\n\t\t\t\tthis.indicatorStyle.width = this.width + 'px';\n\t\t\t}\n\n\t\t\tif ( y < this.minBoundaryY ) {\n\t\t\t\tif ( this.options.shrink == 'scale' ) {\n\t\t\t\t\tthis.height = Math.max(this.indicatorHeight + y * 3, 8);\n\t\t\t\t\tthis.indicatorStyle.height = this.height + 'px';\n\t\t\t\t}\n\t\t\t\ty = this.minBoundaryY;\n\t\t\t} else if ( y > this.maxBoundaryY ) {\n\t\t\t\tif ( this.options.shrink == 'scale' ) {\n\t\t\t\t\tthis.height = Math.max(this.indicatorHeight - (y - this.maxPosY) * 3, 8);\n\t\t\t\t\tthis.indicatorStyle.height = this.height + 'px';\n\t\t\t\t\ty = this.maxPosY + this.indicatorHeight - this.height;\n\t\t\t\t} else {\n\t\t\t\t\ty = this.maxBoundaryY;\n\t\t\t\t}\n\t\t\t} else if ( this.options.shrink == 'scale' && this.height != this.indicatorHeight ) {\n\t\t\t\tthis.height = this.indicatorHeight;\n\t\t\t\tthis.indicatorStyle.height = this.height + 'px';\n\t\t\t}\n\t\t}\n\n\t\tthis.x = x;\n\t\tthis.y = y;\n\n\t\tif ( this.scroller.options.useTransform ) {\n\t\t\tthis.indicatorStyle[utils.style.transform] = 'translate(' + x + 'px,' + y + 'px)' + this.scroller.translateZ;\n\t\t} else {\n\t\t\tthis.indicatorStyle.left = x + 'px';\n\t\t\tthis.indicatorStyle.top = y + 'px';\n\t\t}\n\t},\n\n\t_pos: function (x, y) {\n\t\tif ( x < 0 ) {\n\t\t\tx = 0;\n\t\t} else if ( x > this.maxPosX ) {\n\t\t\tx = this.maxPosX;\n\t\t}\n\n\t\tif ( y < 0 ) {\n\t\t\ty = 0;\n\t\t} else if ( y > this.maxPosY ) {\n\t\t\ty = this.maxPosY;\n\t\t}\n\n\t\tx = this.options.listenX ? Math.round(x / this.sizeRatioX) : this.scroller.x;\n\t\ty = this.options.listenY ? Math.round(y / this.sizeRatioY) : this.scroller.y;\n\n\t\tthis.scroller.scrollTo(x, y);\n\t},\n\n\tfade: function (val, hold) {\n\t\tif ( hold && !this.visible ) {\n\t\t\treturn;\n\t\t}\n\n\t\tclearTimeout(this.fadeTimeout);\n\t\tthis.fadeTimeout = null;\n\n\t\tvar time = val ? 250 : 500,\n\t\t\tdelay = val ? 0 : 300;\n\n\t\tval = val ? '1' : '0';\n\n\t\tthis.wrapperStyle[utils.style.transitionDuration] = time + 'ms';\n\n\t\tthis.fadeTimeout = setTimeout((function (val) {\n\t\t\tthis.wrapperStyle.opacity = val;\n\t\t\tthis.visible = +val;\n\t\t}).bind(this, val), delay);\n\t}\n};\n\nIScroll.utils = utils;\n\nif ( typeof module != 'undefined' && module.exports ) {\n\tmodule.exports = IScroll;\n} else if ( typeof define == 'function' && define.amd ) {\n        define( function () { return IScroll; } );\n} else {\n\twindow.IScroll = IScroll;\n}\n\n})(window, document, Math);\n","/*! jQuery UI - v1.12.1 - 2017-03-19\n* http://jqueryui.com\n* Includes: widget.js, position.js, data.js, disable-selection.js, focusable.js, form-reset-mixin.js, jquery-1-7.js, keycode.js, labels.js, scroll-parent.js, tabbable.js, unique-id.js, widgets/draggable.js, widgets/droppable.js, widgets/resizable.js, widgets/selectable.js, widgets/sortable.js, widgets/accordion.js, widgets/autocomplete.js, widgets/button.js, widgets/checkboxradio.js, widgets/controlgroup.js, widgets/datepicker.js, widgets/dialog.js, widgets/menu.js, widgets/mouse.js, widgets/progressbar.js, widgets/selectmenu.js, widgets/slider.js, widgets/spinner.js, widgets/tabs.js, widgets/tooltip.js, effect.js, effects/effect-blind.js, effects/effect-bounce.js, effects/effect-clip.js, effects/effect-drop.js, effects/effect-explode.js, effects/effect-fade.js, effects/effect-fold.js, effects/effect-highlight.js, effects/effect-puff.js, effects/effect-pulsate.js, effects/effect-scale.js, effects/effect-shake.js, effects/effect-size.js, effects/effect-slide.js, effects/effect-transfer.js\n* Copyright jQuery Foundation and other contributors; Licensed MIT */\n\n(function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\n\t\t// AMD. Register as an anonymous module.\n\t\tdefine([ \"jquery\" ], factory );\n\t} else {\n\n\t\t// Browser globals\n\t\tfactory( jQuery );\n\t}\n}(function( $ ) {\n\n$.ui = $.ui || {};\n\nvar version = $.ui.version = \"1.12.1\";\n\n\n/*!\n * jQuery UI Widget 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Widget\n//>>group: Core\n//>>description: Provides a factory for creating stateful widgets with a common API.\n//>>docs: http://api.jqueryui.com/jQuery.widget/\n//>>demos: http://jqueryui.com/widget/\n\n\n\nvar widgetUuid = 0;\nvar widgetSlice = Array.prototype.slice;\n\n$.cleanData = ( function( orig ) {\n\treturn function( elems ) {\n\t\tvar events, elem, i;\n\t\tfor ( i = 0; ( elem = elems[ i ] ) != null; i++ ) {\n\t\t\ttry {\n\n\t\t\t\t// Only trigger remove when necessary to save time\n\t\t\t\tevents = $._data( elem, \"events\" );\n\t\t\t\tif ( events && events.remove ) {\n\t\t\t\t\t$( elem ).triggerHandler( \"remove\" );\n\t\t\t\t}\n\n\t\t\t// Http://bugs.jquery.com/ticket/8235\n\t\t\t} catch ( e ) {}\n\t\t}\n\t\torig( elems );\n\t};\n} )( $.cleanData );\n\n$.widget = function( name, base, prototype ) {\n\tvar existingConstructor, constructor, basePrototype;\n\n\t// ProxiedPrototype allows the provided prototype to remain unmodified\n\t// so that it can be used as a mixin for multiple widgets (#8876)\n\tvar proxiedPrototype = {};\n\n\tvar namespace = name.split( \".\" )[ 0 ];\n\tname = name.split( \".\" )[ 1 ];\n\tvar fullName = namespace + \"-\" + name;\n\n\tif ( !prototype ) {\n\t\tprototype = base;\n\t\tbase = $.Widget;\n\t}\n\n\tif ( $.isArray( prototype ) ) {\n\t\tprototype = $.extend.apply( null, [ {} ].concat( prototype ) );\n\t}\n\n\t// Create selector for plugin\n\t$.expr[ \":\" ][ fullName.toLowerCase() ] = function( elem ) {\n\t\treturn !!$.data( elem, fullName );\n\t};\n\n\t$[ namespace ] = $[ namespace ] || {};\n\texistingConstructor = $[ namespace ][ name ];\n\tconstructor = $[ namespace ][ name ] = function( options, element ) {\n\n\t\t// Allow instantiation without \"new\" keyword\n\t\tif ( !this._createWidget ) {\n\t\t\treturn new constructor( options, element );\n\t\t}\n\n\t\t// Allow instantiation without initializing for simple inheritance\n\t\t// must use \"new\" keyword (the code above always passes args)\n\t\tif ( arguments.length ) {\n\t\t\tthis._createWidget( options, element );\n\t\t}\n\t};\n\n\t// Extend with the existing constructor to carry over any static properties\n\t$.extend( constructor, existingConstructor, {\n\t\tversion: prototype.version,\n\n\t\t// Copy the object used to create the prototype in case we need to\n\t\t// redefine the widget later\n\t\t_proto: $.extend( {}, prototype ),\n\n\t\t// Track widgets that inherit from this widget in case this widget is\n\t\t// redefined after a widget inherits from it\n\t\t_childConstructors: []\n\t} );\n\n\tbasePrototype = new base();\n\n\t// We need to make the options hash a property directly on the new instance\n\t// otherwise we'll modify the options hash on the prototype that we're\n\t// inheriting from\n\tbasePrototype.options = $.widget.extend( {}, basePrototype.options );\n\t$.each( prototype, function( prop, value ) {\n\t\tif ( !$.isFunction( value ) ) {\n\t\t\tproxiedPrototype[ prop ] = value;\n\t\t\treturn;\n\t\t}\n\t\tproxiedPrototype[ prop ] = ( function() {\n\t\t\tfunction _super() {\n\t\t\t\treturn base.prototype[ prop ].apply( this, arguments );\n\t\t\t}\n\n\t\t\tfunction _superApply( args ) {\n\t\t\t\treturn base.prototype[ prop ].apply( this, args );\n\t\t\t}\n\n\t\t\treturn function() {\n\t\t\t\tvar __super = this._super;\n\t\t\t\tvar __superApply = this._superApply;\n\t\t\t\tvar returnValue;\n\n\t\t\t\tthis._super = _super;\n\t\t\t\tthis._superApply = _superApply;\n\n\t\t\t\treturnValue = value.apply( this, arguments );\n\n\t\t\t\tthis._super = __super;\n\t\t\t\tthis._superApply = __superApply;\n\n\t\t\t\treturn returnValue;\n\t\t\t};\n\t\t} )();\n\t} );\n\tconstructor.prototype = $.widget.extend( basePrototype, {\n\n\t\t// TODO: remove support for widgetEventPrefix\n\t\t// always use the name + a colon as the prefix, e.g., draggable:start\n\t\t// don't prefix for widgets that aren't DOM-based\n\t\twidgetEventPrefix: existingConstructor ? ( basePrototype.widgetEventPrefix || name ) : name\n\t}, proxiedPrototype, {\n\t\tconstructor: constructor,\n\t\tnamespace: namespace,\n\t\twidgetName: name,\n\t\twidgetFullName: fullName\n\t} );\n\n\t// If this widget is being redefined then we need to find all widgets that\n\t// are inheriting from it and redefine all of them so that they inherit from\n\t// the new version of this widget. We're essentially trying to replace one\n\t// level in the prototype chain.\n\tif ( existingConstructor ) {\n\t\t$.each( existingConstructor._childConstructors, function( i, child ) {\n\t\t\tvar childPrototype = child.prototype;\n\n\t\t\t// Redefine the child widget using the same prototype that was\n\t\t\t// originally used, but inherit from the new version of the base\n\t\t\t$.widget( childPrototype.namespace + \".\" + childPrototype.widgetName, constructor,\n\t\t\t\tchild._proto );\n\t\t} );\n\n\t\t// Remove the list of existing child constructors from the old constructor\n\t\t// so the old child constructors can be garbage collected\n\t\tdelete existingConstructor._childConstructors;\n\t} else {\n\t\tbase._childConstructors.push( constructor );\n\t}\n\n\t$.widget.bridge( name, constructor );\n\n\treturn constructor;\n};\n\n$.widget.extend = function( target ) {\n\tvar input = widgetSlice.call( arguments, 1 );\n\tvar inputIndex = 0;\n\tvar inputLength = input.length;\n\tvar key;\n\tvar value;\n\n\tfor ( ; inputIndex < inputLength; inputIndex++ ) {\n\t\tfor ( key in input[ inputIndex ] ) {\n\t\t\tvalue = input[ inputIndex ][ key ];\n\t\t\tif ( input[ inputIndex ].hasOwnProperty( key ) && value !== undefined ) {\n\n\t\t\t\t// Clone objects\n\t\t\t\tif ( $.isPlainObject( value ) ) {\n\t\t\t\t\ttarget[ key ] = $.isPlainObject( target[ key ] ) ?\n\t\t\t\t\t\t$.widget.extend( {}, target[ key ], value ) :\n\n\t\t\t\t\t\t// Don't extend strings, arrays, etc. with objects\n\t\t\t\t\t\t$.widget.extend( {}, value );\n\n\t\t\t\t// Copy everything else by reference\n\t\t\t\t} else {\n\t\t\t\t\ttarget[ key ] = value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn target;\n};\n\n$.widget.bridge = function( name, object ) {\n\tvar fullName = object.prototype.widgetFullName || name;\n\t$.fn[ name ] = function( options ) {\n\t\tvar isMethodCall = typeof options === \"string\";\n\t\tvar args = widgetSlice.call( arguments, 1 );\n\t\tvar returnValue = this;\n\n\t\tif ( isMethodCall ) {\n\n\t\t\t// If this is an empty collection, we need to have the instance method\n\t\t\t// return undefined instead of the jQuery instance\n\t\t\tif ( !this.length && options === \"instance\" ) {\n\t\t\t\treturnValue = undefined;\n\t\t\t} else {\n\t\t\t\tthis.each( function() {\n\t\t\t\t\tvar methodValue;\n\t\t\t\t\tvar instance = $.data( this, fullName );\n\n\t\t\t\t\tif ( options === \"instance\" ) {\n\t\t\t\t\t\treturnValue = instance;\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( !instance ) {\n\t\t\t\t\t\treturn $.error( \"cannot call methods on \" + name +\n\t\t\t\t\t\t\t\" prior to initialization; \" +\n\t\t\t\t\t\t\t\"attempted to call method '\" + options + \"'\" );\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( !$.isFunction( instance[ options ] ) || options.charAt( 0 ) === \"_\" ) {\n\t\t\t\t\t\treturn $.error( \"no such method '\" + options + \"' for \" + name +\n\t\t\t\t\t\t\t\" widget instance\" );\n\t\t\t\t\t}\n\n\t\t\t\t\tmethodValue = instance[ options ].apply( instance, args );\n\n\t\t\t\t\tif ( methodValue !== instance && methodValue !== undefined ) {\n\t\t\t\t\t\treturnValue = methodValue && methodValue.jquery ?\n\t\t\t\t\t\t\treturnValue.pushStack( methodValue.get() ) :\n\t\t\t\t\t\t\tmethodValue;\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t}\n\t\t} else {\n\n\t\t\t// Allow multiple hashes to be passed on init\n\t\t\tif ( args.length ) {\n\t\t\t\toptions = $.widget.extend.apply( null, [ options ].concat( args ) );\n\t\t\t}\n\n\t\t\tthis.each( function() {\n\t\t\t\tvar instance = $.data( this, fullName );\n\t\t\t\tif ( instance ) {\n\t\t\t\t\tinstance.option( options || {} );\n\t\t\t\t\tif ( instance._init ) {\n\t\t\t\t\t\tinstance._init();\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t$.data( this, fullName, new object( options, this ) );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\treturn returnValue;\n\t};\n};\n\n$.Widget = function( /* options, element */ ) {};\n$.Widget._childConstructors = [];\n\n$.Widget.prototype = {\n\twidgetName: \"widget\",\n\twidgetEventPrefix: \"\",\n\tdefaultElement: \"<div>\",\n\n\toptions: {\n\t\tclasses: {},\n\t\tdisabled: false,\n\n\t\t// Callbacks\n\t\tcreate: null\n\t},\n\n\t_createWidget: function( options, element ) {\n\t\telement = $( element || this.defaultElement || this )[ 0 ];\n\t\tthis.element = $( element );\n\t\tthis.uuid = widgetUuid++;\n\t\tthis.eventNamespace = \".\" + this.widgetName + this.uuid;\n\n\t\tthis.bindings = $();\n\t\tthis.hoverable = $();\n\t\tthis.focusable = $();\n\t\tthis.classesElementLookup = {};\n\n\t\tif ( element !== this ) {\n\t\t\t$.data( element, this.widgetFullName, this );\n\t\t\tthis._on( true, this.element, {\n\t\t\t\tremove: function( event ) {\n\t\t\t\t\tif ( event.target === element ) {\n\t\t\t\t\t\tthis.destroy();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t\tthis.document = $( element.style ?\n\n\t\t\t\t// Element within the document\n\t\t\t\telement.ownerDocument :\n\n\t\t\t\t// Element is window or document\n\t\t\t\telement.document || element );\n\t\t\tthis.window = $( this.document[ 0 ].defaultView || this.document[ 0 ].parentWindow );\n\t\t}\n\n\t\tthis.options = $.widget.extend( {},\n\t\t\tthis.options,\n\t\t\tthis._getCreateOptions(),\n\t\t\toptions );\n\n\t\tthis._create();\n\n\t\tif ( this.options.disabled ) {\n\t\t\tthis._setOptionDisabled( this.options.disabled );\n\t\t}\n\n\t\tthis._trigger( \"create\", null, this._getCreateEventData() );\n\t\tthis._init();\n\t},\n\n\t_getCreateOptions: function() {\n\t\treturn {};\n\t},\n\n\t_getCreateEventData: $.noop,\n\n\t_create: $.noop,\n\n\t_init: $.noop,\n\n\tdestroy: function() {\n\t\tvar that = this;\n\n\t\tthis._destroy();\n\t\t$.each( this.classesElementLookup, function( key, value ) {\n\t\t\tthat._removeClass( value, key );\n\t\t} );\n\n\t\t// We can probably remove the unbind calls in 2.0\n\t\t// all event bindings should go through this._on()\n\t\tthis.element\n\t\t\t.off( this.eventNamespace )\n\t\t\t.removeData( this.widgetFullName );\n\t\tthis.widget()\n\t\t\t.off( this.eventNamespace )\n\t\t\t.removeAttr( \"aria-disabled\" );\n\n\t\t// Clean up events and states\n\t\tthis.bindings.off( this.eventNamespace );\n\t},\n\n\t_destroy: $.noop,\n\n\twidget: function() {\n\t\treturn this.element;\n\t},\n\n\toption: function( key, value ) {\n\t\tvar options = key;\n\t\tvar parts;\n\t\tvar curOption;\n\t\tvar i;\n\n\t\tif ( arguments.length === 0 ) {\n\n\t\t\t// Don't return a reference to the internal hash\n\t\t\treturn $.widget.extend( {}, this.options );\n\t\t}\n\n\t\tif ( typeof key === \"string\" ) {\n\n\t\t\t// Handle nested keys, e.g., \"foo.bar\" => { foo: { bar: ___ } }\n\t\t\toptions = {};\n\t\t\tparts = key.split( \".\" );\n\t\t\tkey = parts.shift();\n\t\t\tif ( parts.length ) {\n\t\t\t\tcurOption = options[ key ] = $.widget.extend( {}, this.options[ key ] );\n\t\t\t\tfor ( i = 0; i < parts.length - 1; i++ ) {\n\t\t\t\t\tcurOption[ parts[ i ] ] = curOption[ parts[ i ] ] || {};\n\t\t\t\t\tcurOption = curOption[ parts[ i ] ];\n\t\t\t\t}\n\t\t\t\tkey = parts.pop();\n\t\t\t\tif ( arguments.length === 1 ) {\n\t\t\t\t\treturn curOption[ key ] === undefined ? null : curOption[ key ];\n\t\t\t\t}\n\t\t\t\tcurOption[ key ] = value;\n\t\t\t} else {\n\t\t\t\tif ( arguments.length === 1 ) {\n\t\t\t\t\treturn this.options[ key ] === undefined ? null : this.options[ key ];\n\t\t\t\t}\n\t\t\t\toptions[ key ] = value;\n\t\t\t}\n\t\t}\n\n\t\tthis._setOptions( options );\n\n\t\treturn this;\n\t},\n\n\t_setOptions: function( options ) {\n\t\tvar key;\n\n\t\tfor ( key in options ) {\n\t\t\tthis._setOption( key, options[ key ] );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tif ( key === \"classes\" ) {\n\t\t\tthis._setOptionClasses( value );\n\t\t}\n\n\t\tthis.options[ key ] = value;\n\n\t\tif ( key === \"disabled\" ) {\n\t\t\tthis._setOptionDisabled( value );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\t_setOptionClasses: function( value ) {\n\t\tvar classKey, elements, currentElements;\n\n\t\tfor ( classKey in value ) {\n\t\t\tcurrentElements = this.classesElementLookup[ classKey ];\n\t\t\tif ( value[ classKey ] === this.options.classes[ classKey ] ||\n\t\t\t\t\t!currentElements ||\n\t\t\t\t\t!currentElements.length ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// We are doing this to create a new jQuery object because the _removeClass() call\n\t\t\t// on the next line is going to destroy the reference to the current elements being\n\t\t\t// tracked. We need to save a copy of this collection so that we can add the new classes\n\t\t\t// below.\n\t\t\telements = $( currentElements.get() );\n\t\t\tthis._removeClass( currentElements, classKey );\n\n\t\t\t// We don't use _addClass() here, because that uses this.options.classes\n\t\t\t// for generating the string of classes. We want to use the value passed in from\n\t\t\t// _setOption(), this is the new value of the classes option which was passed to\n\t\t\t// _setOption(). We pass this value directly to _classes().\n\t\t\telements.addClass( this._classes( {\n\t\t\t\telement: elements,\n\t\t\t\tkeys: classKey,\n\t\t\t\tclasses: value,\n\t\t\t\tadd: true\n\t\t\t} ) );\n\t\t}\n\t},\n\n\t_setOptionDisabled: function( value ) {\n\t\tthis._toggleClass( this.widget(), this.widgetFullName + \"-disabled\", null, !!value );\n\n\t\t// If the widget is becoming disabled, then nothing is interactive\n\t\tif ( value ) {\n\t\t\tthis._removeClass( this.hoverable, null, \"ui-state-hover\" );\n\t\t\tthis._removeClass( this.focusable, null, \"ui-state-focus\" );\n\t\t}\n\t},\n\n\tenable: function() {\n\t\treturn this._setOptions( { disabled: false } );\n\t},\n\n\tdisable: function() {\n\t\treturn this._setOptions( { disabled: true } );\n\t},\n\n\t_classes: function( options ) {\n\t\tvar full = [];\n\t\tvar that = this;\n\n\t\toptions = $.extend( {\n\t\t\telement: this.element,\n\t\t\tclasses: this.options.classes || {}\n\t\t}, options );\n\n\t\tfunction processClassString( classes, checkOption ) {\n\t\t\tvar current, i;\n\t\t\tfor ( i = 0; i < classes.length; i++ ) {\n\t\t\t\tcurrent = that.classesElementLookup[ classes[ i ] ] || $();\n\t\t\t\tif ( options.add ) {\n\t\t\t\t\tcurrent = $( $.unique( current.get().concat( options.element.get() ) ) );\n\t\t\t\t} else {\n\t\t\t\t\tcurrent = $( current.not( options.element ).get() );\n\t\t\t\t}\n\t\t\t\tthat.classesElementLookup[ classes[ i ] ] = current;\n\t\t\t\tfull.push( classes[ i ] );\n\t\t\t\tif ( checkOption && options.classes[ classes[ i ] ] ) {\n\t\t\t\t\tfull.push( options.classes[ classes[ i ] ] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis._on( options.element, {\n\t\t\t\"remove\": \"_untrackClassesElement\"\n\t\t} );\n\n\t\tif ( options.keys ) {\n\t\t\tprocessClassString( options.keys.match( /\\S+/g ) || [], true );\n\t\t}\n\t\tif ( options.extra ) {\n\t\t\tprocessClassString( options.extra.match( /\\S+/g ) || [] );\n\t\t}\n\n\t\treturn full.join( \" \" );\n\t},\n\n\t_untrackClassesElement: function( event ) {\n\t\tvar that = this;\n\t\t$.each( that.classesElementLookup, function( key, value ) {\n\t\t\tif ( $.inArray( event.target, value ) !== -1 ) {\n\t\t\t\tthat.classesElementLookup[ key ] = $( value.not( event.target ).get() );\n\t\t\t}\n\t\t} );\n\t},\n\n\t_removeClass: function( element, keys, extra ) {\n\t\treturn this._toggleClass( element, keys, extra, false );\n\t},\n\n\t_addClass: function( element, keys, extra ) {\n\t\treturn this._toggleClass( element, keys, extra, true );\n\t},\n\n\t_toggleClass: function( element, keys, extra, add ) {\n\t\tadd = ( typeof add === \"boolean\" ) ? add : extra;\n\t\tvar shift = ( typeof element === \"string\" || element === null ),\n\t\t\toptions = {\n\t\t\t\textra: shift ? keys : extra,\n\t\t\t\tkeys: shift ? element : keys,\n\t\t\t\telement: shift ? this.element : element,\n\t\t\t\tadd: add\n\t\t\t};\n\t\toptions.element.toggleClass( this._classes( options ), add );\n\t\treturn this;\n\t},\n\n\t_on: function( suppressDisabledCheck, element, handlers ) {\n\t\tvar delegateElement;\n\t\tvar instance = this;\n\n\t\t// No suppressDisabledCheck flag, shuffle arguments\n\t\tif ( typeof suppressDisabledCheck !== \"boolean\" ) {\n\t\t\thandlers = element;\n\t\t\telement = suppressDisabledCheck;\n\t\t\tsuppressDisabledCheck = false;\n\t\t}\n\n\t\t// No element argument, shuffle and use this.element\n\t\tif ( !handlers ) {\n\t\t\thandlers = element;\n\t\t\telement = this.element;\n\t\t\tdelegateElement = this.widget();\n\t\t} else {\n\t\t\telement = delegateElement = $( element );\n\t\t\tthis.bindings = this.bindings.add( element );\n\t\t}\n\n\t\t$.each( handlers, function( event, handler ) {\n\t\t\tfunction handlerProxy() {\n\n\t\t\t\t// Allow widgets to customize the disabled handling\n\t\t\t\t// - disabled as an array instead of boolean\n\t\t\t\t// - disabled class as method for disabling individual parts\n\t\t\t\tif ( !suppressDisabledCheck &&\n\t\t\t\t\t\t( instance.options.disabled === true ||\n\t\t\t\t\t\t$( this ).hasClass( \"ui-state-disabled\" ) ) ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\treturn ( typeof handler === \"string\" ? instance[ handler ] : handler )\n\t\t\t\t\t.apply( instance, arguments );\n\t\t\t}\n\n\t\t\t// Copy the guid so direct unbinding works\n\t\t\tif ( typeof handler !== \"string\" ) {\n\t\t\t\thandlerProxy.guid = handler.guid =\n\t\t\t\t\thandler.guid || handlerProxy.guid || $.guid++;\n\t\t\t}\n\n\t\t\tvar match = event.match( /^([\\w:-]*)\\s*(.*)$/ );\n\t\t\tvar eventName = match[ 1 ] + instance.eventNamespace;\n\t\t\tvar selector = match[ 2 ];\n\n\t\t\tif ( selector ) {\n\t\t\t\tdelegateElement.on( eventName, selector, handlerProxy );\n\t\t\t} else {\n\t\t\t\telement.on( eventName, handlerProxy );\n\t\t\t}\n\t\t} );\n\t},\n\n\t_off: function( element, eventName ) {\n\t\teventName = ( eventName || \"\" ).split( \" \" ).join( this.eventNamespace + \" \" ) +\n\t\t\tthis.eventNamespace;\n\t\telement.off( eventName ).off( eventName );\n\n\t\t// Clear the stack to avoid memory leaks (#10056)\n\t\tthis.bindings = $( this.bindings.not( element ).get() );\n\t\tthis.focusable = $( this.focusable.not( element ).get() );\n\t\tthis.hoverable = $( this.hoverable.not( element ).get() );\n\t},\n\n\t_delay: function( handler, delay ) {\n\t\tfunction handlerProxy() {\n\t\t\treturn ( typeof handler === \"string\" ? instance[ handler ] : handler )\n\t\t\t\t.apply( instance, arguments );\n\t\t}\n\t\tvar instance = this;\n\t\treturn setTimeout( handlerProxy, delay || 0 );\n\t},\n\n\t_hoverable: function( element ) {\n\t\tthis.hoverable = this.hoverable.add( element );\n\t\tthis._on( element, {\n\t\t\tmouseenter: function( event ) {\n\t\t\t\tthis._addClass( $( event.currentTarget ), null, \"ui-state-hover\" );\n\t\t\t},\n\t\t\tmouseleave: function( event ) {\n\t\t\t\tthis._removeClass( $( event.currentTarget ), null, \"ui-state-hover\" );\n\t\t\t}\n\t\t} );\n\t},\n\n\t_focusable: function( element ) {\n\t\tthis.focusable = this.focusable.add( element );\n\t\tthis._on( element, {\n\t\t\tfocusin: function( event ) {\n\t\t\t\tthis._addClass( $( event.currentTarget ), null, \"ui-state-focus\" );\n\t\t\t},\n\t\t\tfocusout: function( event ) {\n\t\t\t\tthis._removeClass( $( event.currentTarget ), null, \"ui-state-focus\" );\n\t\t\t}\n\t\t} );\n\t},\n\n\t_trigger: function( type, event, data ) {\n\t\tvar prop, orig;\n\t\tvar callback = this.options[ type ];\n\n\t\tdata = data || {};\n\t\tevent = $.Event( event );\n\t\tevent.type = ( type === this.widgetEventPrefix ?\n\t\t\ttype :\n\t\t\tthis.widgetEventPrefix + type ).toLowerCase();\n\n\t\t// The original event may come from any element\n\t\t// so we need to reset the target on the new event\n\t\tevent.target = this.element[ 0 ];\n\n\t\t// Copy original event properties over to the new event\n\t\torig = event.originalEvent;\n\t\tif ( orig ) {\n\t\t\tfor ( prop in orig ) {\n\t\t\t\tif ( !( prop in event ) ) {\n\t\t\t\t\tevent[ prop ] = orig[ prop ];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis.element.trigger( event, data );\n\t\treturn !( $.isFunction( callback ) &&\n\t\t\tcallback.apply( this.element[ 0 ], [ event ].concat( data ) ) === false ||\n\t\t\tevent.isDefaultPrevented() );\n\t}\n};\n\n$.each( { show: \"fadeIn\", hide: \"fadeOut\" }, function( method, defaultEffect ) {\n\t$.Widget.prototype[ \"_\" + method ] = function( element, options, callback ) {\n\t\tif ( typeof options === \"string\" ) {\n\t\t\toptions = { effect: options };\n\t\t}\n\n\t\tvar hasOptions;\n\t\tvar effectName = !options ?\n\t\t\tmethod :\n\t\t\toptions === true || typeof options === \"number\" ?\n\t\t\t\tdefaultEffect :\n\t\t\t\toptions.effect || defaultEffect;\n\n\t\toptions = options || {};\n\t\tif ( typeof options === \"number\" ) {\n\t\t\toptions = { duration: options };\n\t\t}\n\n\t\thasOptions = !$.isEmptyObject( options );\n\t\toptions.complete = callback;\n\n\t\tif ( options.delay ) {\n\t\t\telement.delay( options.delay );\n\t\t}\n\n\t\tif ( hasOptions && $.effects && $.effects.effect[ effectName ] ) {\n\t\t\telement[ method ]( options );\n\t\t} else if ( effectName !== method && element[ effectName ] ) {\n\t\t\telement[ effectName ]( options.duration, options.easing, callback );\n\t\t} else {\n\t\t\telement.queue( function( next ) {\n\t\t\t\t$( this )[ method ]();\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback.call( element[ 0 ] );\n\t\t\t\t}\n\t\t\t\tnext();\n\t\t\t} );\n\t\t}\n\t};\n} );\n\nvar widget = $.widget;\n\n\n/*!\n * jQuery UI Position 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n *\n * http://api.jqueryui.com/position/\n */\n\n//>>label: Position\n//>>group: Core\n//>>description: Positions elements relative to other elements.\n//>>docs: http://api.jqueryui.com/position/\n//>>demos: http://jqueryui.com/position/\n\n\n( function() {\nvar cachedScrollbarWidth,\n\tmax = Math.max,\n\tabs = Math.abs,\n\trhorizontal = /left|center|right/,\n\trvertical = /top|center|bottom/,\n\troffset = /[\\+\\-]\\d+(\\.[\\d]+)?%?/,\n\trposition = /^\\w+/,\n\trpercent = /%$/,\n\t_position = $.fn.position;\n\nfunction getOffsets( offsets, width, height ) {\n\treturn [\n\t\tparseFloat( offsets[ 0 ] ) * ( rpercent.test( offsets[ 0 ] ) ? width / 100 : 1 ),\n\t\tparseFloat( offsets[ 1 ] ) * ( rpercent.test( offsets[ 1 ] ) ? height / 100 : 1 )\n\t];\n}\n\nfunction parseCss( element, property ) {\n\treturn parseInt( $.css( element, property ), 10 ) || 0;\n}\n\nfunction getDimensions( elem ) {\n\tvar raw = elem[ 0 ];\n\tif ( raw.nodeType === 9 ) {\n\t\treturn {\n\t\t\twidth: elem.width(),\n\t\t\theight: elem.height(),\n\t\t\toffset: { top: 0, left: 0 }\n\t\t};\n\t}\n\tif ( $.isWindow( raw ) ) {\n\t\treturn {\n\t\t\twidth: elem.width(),\n\t\t\theight: elem.height(),\n\t\t\toffset: { top: elem.scrollTop(), left: elem.scrollLeft() }\n\t\t};\n\t}\n\tif ( raw.preventDefault ) {\n\t\treturn {\n\t\t\twidth: 0,\n\t\t\theight: 0,\n\t\t\toffset: { top: raw.pageY, left: raw.pageX }\n\t\t};\n\t}\n\treturn {\n\t\twidth: elem.outerWidth(),\n\t\theight: elem.outerHeight(),\n\t\toffset: elem.offset()\n\t};\n}\n\n$.position = {\n\tscrollbarWidth: function() {\n\t\tif ( cachedScrollbarWidth !== undefined ) {\n\t\t\treturn cachedScrollbarWidth;\n\t\t}\n\t\tvar w1, w2,\n\t\t\tdiv = $( \"<div \" +\n\t\t\t\t\"style='display:block;position:absolute;width:50px;height:50px;overflow:hidden;'>\" +\n\t\t\t\t\"<div style='height:100px;width:auto;'></div></div>\" ),\n\t\t\tinnerDiv = div.children()[ 0 ];\n\n\t\t$( \"body\" ).append( div );\n\t\tw1 = innerDiv.offsetWidth;\n\t\tdiv.css( \"overflow\", \"scroll\" );\n\n\t\tw2 = innerDiv.offsetWidth;\n\n\t\tif ( w1 === w2 ) {\n\t\t\tw2 = div[ 0 ].clientWidth;\n\t\t}\n\n\t\tdiv.remove();\n\n\t\treturn ( cachedScrollbarWidth = w1 - w2 );\n\t},\n\tgetScrollInfo: function( within ) {\n\t\tvar overflowX = within.isWindow || within.isDocument ? \"\" :\n\t\t\t\twithin.element.css( \"overflow-x\" ),\n\t\t\toverflowY = within.isWindow || within.isDocument ? \"\" :\n\t\t\t\twithin.element.css( \"overflow-y\" ),\n\t\t\thasOverflowX = overflowX === \"scroll\" ||\n\t\t\t\t( overflowX === \"auto\" && within.width < within.element[ 0 ].scrollWidth ),\n\t\t\thasOverflowY = overflowY === \"scroll\" ||\n\t\t\t\t( overflowY === \"auto\" && within.height < within.element[ 0 ].scrollHeight );\n\t\treturn {\n\t\t\twidth: hasOverflowY ? $.position.scrollbarWidth() : 0,\n\t\t\theight: hasOverflowX ? $.position.scrollbarWidth() : 0\n\t\t};\n\t},\n\tgetWithinInfo: function( element ) {\n\t\tvar withinElement = $( element || window ),\n\t\t\tisWindow = $.isWindow( withinElement[ 0 ] ),\n\t\t\tisDocument = !!withinElement[ 0 ] && withinElement[ 0 ].nodeType === 9,\n\t\t\thasOffset = !isWindow && !isDocument;\n\t\treturn {\n\t\t\telement: withinElement,\n\t\t\tisWindow: isWindow,\n\t\t\tisDocument: isDocument,\n\t\t\toffset: hasOffset ? $( element ).offset() : { left: 0, top: 0 },\n\t\t\tscrollLeft: withinElement.scrollLeft(),\n\t\t\tscrollTop: withinElement.scrollTop(),\n\t\t\twidth: withinElement.outerWidth(),\n\t\t\theight: withinElement.outerHeight()\n\t\t};\n\t}\n};\n\n$.fn.position = function( options ) {\n\tif ( !options || !options.of ) {\n\t\treturn _position.apply( this, arguments );\n\t}\n\n\t// Make a copy, we don't want to modify arguments\n\toptions = $.extend( {}, options );\n\n\tvar atOffset, targetWidth, targetHeight, targetOffset, basePosition, dimensions,\n\t\ttarget = $( options.of ),\n\t\twithin = $.position.getWithinInfo( options.within ),\n\t\tscrollInfo = $.position.getScrollInfo( within ),\n\t\tcollision = ( options.collision || \"flip\" ).split( \" \" ),\n\t\toffsets = {};\n\n\tdimensions = getDimensions( target );\n\tif ( target[ 0 ].preventDefault ) {\n\n\t\t// Force left top to allow flipping\n\t\toptions.at = \"left top\";\n\t}\n\ttargetWidth = dimensions.width;\n\ttargetHeight = dimensions.height;\n\ttargetOffset = dimensions.offset;\n\n\t// Clone to reuse original targetOffset later\n\tbasePosition = $.extend( {}, targetOffset );\n\n\t// Force my and at to have valid horizontal and vertical positions\n\t// if a value is missing or invalid, it will be converted to center\n\t$.each( [ \"my\", \"at\" ], function() {\n\t\tvar pos = ( options[ this ] || \"\" ).split( \" \" ),\n\t\t\thorizontalOffset,\n\t\t\tverticalOffset;\n\n\t\tif ( pos.length === 1 ) {\n\t\t\tpos = rhorizontal.test( pos[ 0 ] ) ?\n\t\t\t\tpos.concat( [ \"center\" ] ) :\n\t\t\t\trvertical.test( pos[ 0 ] ) ?\n\t\t\t\t\t[ \"center\" ].concat( pos ) :\n\t\t\t\t\t[ \"center\", \"center\" ];\n\t\t}\n\t\tpos[ 0 ] = rhorizontal.test( pos[ 0 ] ) ? pos[ 0 ] : \"center\";\n\t\tpos[ 1 ] = rvertical.test( pos[ 1 ] ) ? pos[ 1 ] : \"center\";\n\n\t\t// Calculate offsets\n\t\thorizontalOffset = roffset.exec( pos[ 0 ] );\n\t\tverticalOffset = roffset.exec( pos[ 1 ] );\n\t\toffsets[ this ] = [\n\t\t\thorizontalOffset ? horizontalOffset[ 0 ] : 0,\n\t\t\tverticalOffset ? verticalOffset[ 0 ] : 0\n\t\t];\n\n\t\t// Reduce to just the positions without the offsets\n\t\toptions[ this ] = [\n\t\t\trposition.exec( pos[ 0 ] )[ 0 ],\n\t\t\trposition.exec( pos[ 1 ] )[ 0 ]\n\t\t];\n\t} );\n\n\t// Normalize collision option\n\tif ( collision.length === 1 ) {\n\t\tcollision[ 1 ] = collision[ 0 ];\n\t}\n\n\tif ( options.at[ 0 ] === \"right\" ) {\n\t\tbasePosition.left += targetWidth;\n\t} else if ( options.at[ 0 ] === \"center\" ) {\n\t\tbasePosition.left += targetWidth / 2;\n\t}\n\n\tif ( options.at[ 1 ] === \"bottom\" ) {\n\t\tbasePosition.top += targetHeight;\n\t} else if ( options.at[ 1 ] === \"center\" ) {\n\t\tbasePosition.top += targetHeight / 2;\n\t}\n\n\tatOffset = getOffsets( offsets.at, targetWidth, targetHeight );\n\tbasePosition.left += atOffset[ 0 ];\n\tbasePosition.top += atOffset[ 1 ];\n\n\treturn this.each( function() {\n\t\tvar collisionPosition, using,\n\t\t\telem = $( this ),\n\t\t\telemWidth = elem.outerWidth(),\n\t\t\telemHeight = elem.outerHeight(),\n\t\t\tmarginLeft = parseCss( this, \"marginLeft\" ),\n\t\t\tmarginTop = parseCss( this, \"marginTop\" ),\n\t\t\tcollisionWidth = elemWidth + marginLeft + parseCss( this, \"marginRight\" ) +\n\t\t\t\tscrollInfo.width,\n\t\t\tcollisionHeight = elemHeight + marginTop + parseCss( this, \"marginBottom\" ) +\n\t\t\t\tscrollInfo.height,\n\t\t\tposition = $.extend( {}, basePosition ),\n\t\t\tmyOffset = getOffsets( offsets.my, elem.outerWidth(), elem.outerHeight() );\n\n\t\tif ( options.my[ 0 ] === \"right\" ) {\n\t\t\tposition.left -= elemWidth;\n\t\t} else if ( options.my[ 0 ] === \"center\" ) {\n\t\t\tposition.left -= elemWidth / 2;\n\t\t}\n\n\t\tif ( options.my[ 1 ] === \"bottom\" ) {\n\t\t\tposition.top -= elemHeight;\n\t\t} else if ( options.my[ 1 ] === \"center\" ) {\n\t\t\tposition.top -= elemHeight / 2;\n\t\t}\n\n\t\tposition.left += myOffset[ 0 ];\n\t\tposition.top += myOffset[ 1 ];\n\n\t\tcollisionPosition = {\n\t\t\tmarginLeft: marginLeft,\n\t\t\tmarginTop: marginTop\n\t\t};\n\n\t\t$.each( [ \"left\", \"top\" ], function( i, dir ) {\n\t\t\tif ( $.ui.position[ collision[ i ] ] ) {\n\t\t\t\t$.ui.position[ collision[ i ] ][ dir ]( position, {\n\t\t\t\t\ttargetWidth: targetWidth,\n\t\t\t\t\ttargetHeight: targetHeight,\n\t\t\t\t\telemWidth: elemWidth,\n\t\t\t\t\telemHeight: elemHeight,\n\t\t\t\t\tcollisionPosition: collisionPosition,\n\t\t\t\t\tcollisionWidth: collisionWidth,\n\t\t\t\t\tcollisionHeight: collisionHeight,\n\t\t\t\t\toffset: [ atOffset[ 0 ] + myOffset[ 0 ], atOffset [ 1 ] + myOffset[ 1 ] ],\n\t\t\t\t\tmy: options.my,\n\t\t\t\t\tat: options.at,\n\t\t\t\t\twithin: within,\n\t\t\t\t\telem: elem\n\t\t\t\t} );\n\t\t\t}\n\t\t} );\n\n\t\tif ( options.using ) {\n\n\t\t\t// Adds feedback as second argument to using callback, if present\n\t\t\tusing = function( props ) {\n\t\t\t\tvar left = targetOffset.left - position.left,\n\t\t\t\t\tright = left + targetWidth - elemWidth,\n\t\t\t\t\ttop = targetOffset.top - position.top,\n\t\t\t\t\tbottom = top + targetHeight - elemHeight,\n\t\t\t\t\tfeedback = {\n\t\t\t\t\t\ttarget: {\n\t\t\t\t\t\t\telement: target,\n\t\t\t\t\t\t\tleft: targetOffset.left,\n\t\t\t\t\t\t\ttop: targetOffset.top,\n\t\t\t\t\t\t\twidth: targetWidth,\n\t\t\t\t\t\t\theight: targetHeight\n\t\t\t\t\t\t},\n\t\t\t\t\t\telement: {\n\t\t\t\t\t\t\telement: elem,\n\t\t\t\t\t\t\tleft: position.left,\n\t\t\t\t\t\t\ttop: position.top,\n\t\t\t\t\t\t\twidth: elemWidth,\n\t\t\t\t\t\t\theight: elemHeight\n\t\t\t\t\t\t},\n\t\t\t\t\t\thorizontal: right < 0 ? \"left\" : left > 0 ? \"right\" : \"center\",\n\t\t\t\t\t\tvertical: bottom < 0 ? \"top\" : top > 0 ? \"bottom\" : \"middle\"\n\t\t\t\t\t};\n\t\t\t\tif ( targetWidth < elemWidth && abs( left + right ) < targetWidth ) {\n\t\t\t\t\tfeedback.horizontal = \"center\";\n\t\t\t\t}\n\t\t\t\tif ( targetHeight < elemHeight && abs( top + bottom ) < targetHeight ) {\n\t\t\t\t\tfeedback.vertical = \"middle\";\n\t\t\t\t}\n\t\t\t\tif ( max( abs( left ), abs( right ) ) > max( abs( top ), abs( bottom ) ) ) {\n\t\t\t\t\tfeedback.important = \"horizontal\";\n\t\t\t\t} else {\n\t\t\t\t\tfeedback.important = \"vertical\";\n\t\t\t\t}\n\t\t\t\toptions.using.call( this, props, feedback );\n\t\t\t};\n\t\t}\n\n\t\telem.offset( $.extend( position, { using: using } ) );\n\t} );\n};\n\n$.ui.position = {\n\tfit: {\n\t\tleft: function( position, data ) {\n\t\t\tvar within = data.within,\n\t\t\t\twithinOffset = within.isWindow ? within.scrollLeft : within.offset.left,\n\t\t\t\touterWidth = within.width,\n\t\t\t\tcollisionPosLeft = position.left - data.collisionPosition.marginLeft,\n\t\t\t\toverLeft = withinOffset - collisionPosLeft,\n\t\t\t\toverRight = collisionPosLeft + data.collisionWidth - outerWidth - withinOffset,\n\t\t\t\tnewOverRight;\n\n\t\t\t// Element is wider than within\n\t\t\tif ( data.collisionWidth > outerWidth ) {\n\n\t\t\t\t// Element is initially over the left side of within\n\t\t\t\tif ( overLeft > 0 && overRight <= 0 ) {\n\t\t\t\t\tnewOverRight = position.left + overLeft + data.collisionWidth - outerWidth -\n\t\t\t\t\t\twithinOffset;\n\t\t\t\t\tposition.left += overLeft - newOverRight;\n\n\t\t\t\t// Element is initially over right side of within\n\t\t\t\t} else if ( overRight > 0 && overLeft <= 0 ) {\n\t\t\t\t\tposition.left = withinOffset;\n\n\t\t\t\t// Element is initially over both left and right sides of within\n\t\t\t\t} else {\n\t\t\t\t\tif ( overLeft > overRight ) {\n\t\t\t\t\t\tposition.left = withinOffset + outerWidth - data.collisionWidth;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tposition.left = withinOffset;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Too far left -> align with left edge\n\t\t\t} else if ( overLeft > 0 ) {\n\t\t\t\tposition.left += overLeft;\n\n\t\t\t// Too far right -> align with right edge\n\t\t\t} else if ( overRight > 0 ) {\n\t\t\t\tposition.left -= overRight;\n\n\t\t\t// Adjust based on position and margin\n\t\t\t} else {\n\t\t\t\tposition.left = max( position.left - collisionPosLeft, position.left );\n\t\t\t}\n\t\t},\n\t\ttop: function( position, data ) {\n\t\t\tvar within = data.within,\n\t\t\t\twithinOffset = within.isWindow ? within.scrollTop : within.offset.top,\n\t\t\t\touterHeight = data.within.height,\n\t\t\t\tcollisionPosTop = position.top - data.collisionPosition.marginTop,\n\t\t\t\toverTop = withinOffset - collisionPosTop,\n\t\t\t\toverBottom = collisionPosTop + data.collisionHeight - outerHeight - withinOffset,\n\t\t\t\tnewOverBottom;\n\n\t\t\t// Element is taller than within\n\t\t\tif ( data.collisionHeight > outerHeight ) {\n\n\t\t\t\t// Element is initially over the top of within\n\t\t\t\tif ( overTop > 0 && overBottom <= 0 ) {\n\t\t\t\t\tnewOverBottom = position.top + overTop + data.collisionHeight - outerHeight -\n\t\t\t\t\t\twithinOffset;\n\t\t\t\t\tposition.top += overTop - newOverBottom;\n\n\t\t\t\t// Element is initially over bottom of within\n\t\t\t\t} else if ( overBottom > 0 && overTop <= 0 ) {\n\t\t\t\t\tposition.top = withinOffset;\n\n\t\t\t\t// Element is initially over both top and bottom of within\n\t\t\t\t} else {\n\t\t\t\t\tif ( overTop > overBottom ) {\n\t\t\t\t\t\tposition.top = withinOffset + outerHeight - data.collisionHeight;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tposition.top = withinOffset;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Too far up -> align with top\n\t\t\t} else if ( overTop > 0 ) {\n\t\t\t\tposition.top += overTop;\n\n\t\t\t// Too far down -> align with bottom edge\n\t\t\t} else if ( overBottom > 0 ) {\n\t\t\t\tposition.top -= overBottom;\n\n\t\t\t// Adjust based on position and margin\n\t\t\t} else {\n\t\t\t\tposition.top = max( position.top - collisionPosTop, position.top );\n\t\t\t}\n\t\t}\n\t},\n\tflip: {\n\t\tleft: function( position, data ) {\n\t\t\tvar within = data.within,\n\t\t\t\twithinOffset = within.offset.left + within.scrollLeft,\n\t\t\t\touterWidth = within.width,\n\t\t\t\toffsetLeft = within.isWindow ? within.scrollLeft : within.offset.left,\n\t\t\t\tcollisionPosLeft = position.left - data.collisionPosition.marginLeft,\n\t\t\t\toverLeft = collisionPosLeft - offsetLeft,\n\t\t\t\toverRight = collisionPosLeft + data.collisionWidth - outerWidth - offsetLeft,\n\t\t\t\tmyOffset = data.my[ 0 ] === \"left\" ?\n\t\t\t\t\t-data.elemWidth :\n\t\t\t\t\tdata.my[ 0 ] === \"right\" ?\n\t\t\t\t\t\tdata.elemWidth :\n\t\t\t\t\t\t0,\n\t\t\t\tatOffset = data.at[ 0 ] === \"left\" ?\n\t\t\t\t\tdata.targetWidth :\n\t\t\t\t\tdata.at[ 0 ] === \"right\" ?\n\t\t\t\t\t\t-data.targetWidth :\n\t\t\t\t\t\t0,\n\t\t\t\toffset = -2 * data.offset[ 0 ],\n\t\t\t\tnewOverRight,\n\t\t\t\tnewOverLeft;\n\n\t\t\tif ( overLeft < 0 ) {\n\t\t\t\tnewOverRight = position.left + myOffset + atOffset + offset + data.collisionWidth -\n\t\t\t\t\touterWidth - withinOffset;\n\t\t\t\tif ( newOverRight < 0 || newOverRight < abs( overLeft ) ) {\n\t\t\t\t\tposition.left += myOffset + atOffset + offset;\n\t\t\t\t}\n\t\t\t} else if ( overRight > 0 ) {\n\t\t\t\tnewOverLeft = position.left - data.collisionPosition.marginLeft + myOffset +\n\t\t\t\t\tatOffset + offset - offsetLeft;\n\t\t\t\tif ( newOverLeft > 0 || abs( newOverLeft ) < overRight ) {\n\t\t\t\t\tposition.left += myOffset + atOffset + offset;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\ttop: function( position, data ) {\n\t\t\tvar within = data.within,\n\t\t\t\twithinOffset = within.offset.top + within.scrollTop,\n\t\t\t\touterHeight = within.height,\n\t\t\t\toffsetTop = within.isWindow ? within.scrollTop : within.offset.top,\n\t\t\t\tcollisionPosTop = position.top - data.collisionPosition.marginTop,\n\t\t\t\toverTop = collisionPosTop - offsetTop,\n\t\t\t\toverBottom = collisionPosTop + data.collisionHeight - outerHeight - offsetTop,\n\t\t\t\ttop = data.my[ 1 ] === \"top\",\n\t\t\t\tmyOffset = top ?\n\t\t\t\t\t-data.elemHeight :\n\t\t\t\t\tdata.my[ 1 ] === \"bottom\" ?\n\t\t\t\t\t\tdata.elemHeight :\n\t\t\t\t\t\t0,\n\t\t\t\tatOffset = data.at[ 1 ] === \"top\" ?\n\t\t\t\t\tdata.targetHeight :\n\t\t\t\t\tdata.at[ 1 ] === \"bottom\" ?\n\t\t\t\t\t\t-data.targetHeight :\n\t\t\t\t\t\t0,\n\t\t\t\toffset = -2 * data.offset[ 1 ],\n\t\t\t\tnewOverTop,\n\t\t\t\tnewOverBottom;\n\t\t\tif ( overTop < 0 ) {\n\t\t\t\tnewOverBottom = position.top + myOffset + atOffset + offset + data.collisionHeight -\n\t\t\t\t\touterHeight - withinOffset;\n\t\t\t\tif ( newOverBottom < 0 || newOverBottom < abs( overTop ) ) {\n\t\t\t\t\tposition.top += myOffset + atOffset + offset;\n\t\t\t\t}\n\t\t\t} else if ( overBottom > 0 ) {\n\t\t\t\tnewOverTop = position.top - data.collisionPosition.marginTop + myOffset + atOffset +\n\t\t\t\t\toffset - offsetTop;\n\t\t\t\tif ( newOverTop > 0 || abs( newOverTop ) < overBottom ) {\n\t\t\t\t\tposition.top += myOffset + atOffset + offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\tflipfit: {\n\t\tleft: function() {\n\t\t\t$.ui.position.flip.left.apply( this, arguments );\n\t\t\t$.ui.position.fit.left.apply( this, arguments );\n\t\t},\n\t\ttop: function() {\n\t\t\t$.ui.position.flip.top.apply( this, arguments );\n\t\t\t$.ui.position.fit.top.apply( this, arguments );\n\t\t}\n\t}\n};\n\n} )();\n\nvar position = $.ui.position;\n\n\n/*!\n * jQuery UI :data 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: :data Selector\n//>>group: Core\n//>>description: Selects elements which have data stored under the specified key.\n//>>docs: http://api.jqueryui.com/data-selector/\n\n\nvar data = $.extend( $.expr[ \":\" ], {\n\tdata: $.expr.createPseudo ?\n\t\t$.expr.createPseudo( function( dataName ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn !!$.data( elem, dataName );\n\t\t\t};\n\t\t} ) :\n\n\t\t// Support: jQuery <1.8\n\t\tfunction( elem, i, match ) {\n\t\t\treturn !!$.data( elem, match[ 3 ] );\n\t\t}\n} );\n\n/*!\n * jQuery UI Disable Selection 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: disableSelection\n//>>group: Core\n//>>description: Disable selection of text content within the set of matched elements.\n//>>docs: http://api.jqueryui.com/disableSelection/\n\n// This file is deprecated\n\n\nvar disableSelection = $.fn.extend( {\n\tdisableSelection: ( function() {\n\t\tvar eventType = \"onselectstart\" in document.createElement( \"div\" ) ?\n\t\t\t\"selectstart\" :\n\t\t\t\"mousedown\";\n\n\t\treturn function() {\n\t\t\treturn this.on( eventType + \".ui-disableSelection\", function( event ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t} );\n\t\t};\n\t} )(),\n\n\tenableSelection: function() {\n\t\treturn this.off( \".ui-disableSelection\" );\n\t}\n} );\n\n\n/*!\n * jQuery UI Focusable 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: :focusable Selector\n//>>group: Core\n//>>description: Selects elements which can be focused.\n//>>docs: http://api.jqueryui.com/focusable-selector/\n\n\n\n// Selectors\n$.ui.focusable = function( element, hasTabindex ) {\n\tvar map, mapName, img, focusableIfVisible, fieldset,\n\t\tnodeName = element.nodeName.toLowerCase();\n\n\tif ( \"area\" === nodeName ) {\n\t\tmap = element.parentNode;\n\t\tmapName = map.name;\n\t\tif ( !element.href || !mapName || map.nodeName.toLowerCase() !== \"map\" ) {\n\t\t\treturn false;\n\t\t}\n\t\timg = $( \"img[usemap='#\" + mapName + \"']\" );\n\t\treturn img.length > 0 && img.is( \":visible\" );\n\t}\n\n\tif ( /^(input|select|textarea|button|object)$/.test( nodeName ) ) {\n\t\tfocusableIfVisible = !element.disabled;\n\n\t\tif ( focusableIfVisible ) {\n\n\t\t\t// Form controls within a disabled fieldset are disabled.\n\t\t\t// However, controls within the fieldset's legend do not get disabled.\n\t\t\t// Since controls generally aren't placed inside legends, we skip\n\t\t\t// this portion of the check.\n\t\t\tfieldset = $( element ).closest( \"fieldset\" )[ 0 ];\n\t\t\tif ( fieldset ) {\n\t\t\t\tfocusableIfVisible = !fieldset.disabled;\n\t\t\t}\n\t\t}\n\t} else if ( \"a\" === nodeName ) {\n\t\tfocusableIfVisible = element.href || hasTabindex;\n\t} else {\n\t\tfocusableIfVisible = hasTabindex;\n\t}\n\n\treturn focusableIfVisible && $( element ).is( \":visible\" ) && visible( $( element ) );\n};\n\n// Support: IE 8 only\n// IE 8 doesn't resolve inherit to visible/hidden for computed values\nfunction visible( element ) {\n\tvar visibility = element.css( \"visibility\" );\n\twhile ( visibility === \"inherit\" ) {\n\t\telement = element.parent();\n\t\tvisibility = element.css( \"visibility\" );\n\t}\n\treturn visibility !== \"hidden\";\n}\n\n$.extend( $.expr[ \":\" ], {\n\tfocusable: function( element ) {\n\t\treturn $.ui.focusable( element, $.attr( element, \"tabindex\" ) != null );\n\t}\n} );\n\nvar focusable = $.ui.focusable;\n\n\n\n\n// Support: IE8 Only\n// IE8 does not support the form attribute and when it is supplied. It overwrites the form prop\n// with a string, so we need to find the proper form.\nvar form = $.fn.form = function() {\n\treturn typeof this[ 0 ].form === \"string\" ? this.closest( \"form\" ) : $( this[ 0 ].form );\n};\n\n\n/*!\n * jQuery UI Form Reset Mixin 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Form Reset Mixin\n//>>group: Core\n//>>description: Refresh input widgets when their form is reset\n//>>docs: http://api.jqueryui.com/form-reset-mixin/\n\n\n\nvar formResetMixin = $.ui.formResetMixin = {\n\t_formResetHandler: function() {\n\t\tvar form = $( this );\n\n\t\t// Wait for the form reset to actually happen before refreshing\n\t\tsetTimeout( function() {\n\t\t\tvar instances = form.data( \"ui-form-reset-instances\" );\n\t\t\t$.each( instances, function() {\n\t\t\t\tthis.refresh();\n\t\t\t} );\n\t\t} );\n\t},\n\n\t_bindFormResetHandler: function() {\n\t\tthis.form = this.element.form();\n\t\tif ( !this.form.length ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar instances = this.form.data( \"ui-form-reset-instances\" ) || [];\n\t\tif ( !instances.length ) {\n\n\t\t\t// We don't use _on() here because we use a single event handler per form\n\t\t\tthis.form.on( \"reset.ui-form-reset\", this._formResetHandler );\n\t\t}\n\t\tinstances.push( this );\n\t\tthis.form.data( \"ui-form-reset-instances\", instances );\n\t},\n\n\t_unbindFormResetHandler: function() {\n\t\tif ( !this.form.length ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar instances = this.form.data( \"ui-form-reset-instances\" );\n\t\tinstances.splice( $.inArray( this, instances ), 1 );\n\t\tif ( instances.length ) {\n\t\t\tthis.form.data( \"ui-form-reset-instances\", instances );\n\t\t} else {\n\t\t\tthis.form\n\t\t\t\t.removeData( \"ui-form-reset-instances\" )\n\t\t\t\t.off( \"reset.ui-form-reset\" );\n\t\t}\n\t}\n};\n\n\n/*!\n * jQuery UI Support for jQuery core 1.7.x 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n *\n */\n\n//>>label: jQuery 1.7 Support\n//>>group: Core\n//>>description: Support version 1.7.x of jQuery core\n\n\n\n// Support: jQuery 1.7 only\n// Not a great way to check versions, but since we only support 1.7+ and only\n// need to detect <1.8, this is a simple check that should suffice. Checking\n// for \"1.7.\" would be a bit safer, but the version string is 1.7, not 1.7.0\n// and we'll never reach 1.70.0 (if we do, we certainly won't be supporting\n// 1.7 anymore). See #11197 for why we're not using feature detection.\nif ( $.fn.jquery.substring( 0, 3 ) === \"1.7\" ) {\n\n\t// Setters for .innerWidth(), .innerHeight(), .outerWidth(), .outerHeight()\n\t// Unlike jQuery Core 1.8+, these only support numeric values to set the\n\t// dimensions in pixels\n\t$.each( [ \"Width\", \"Height\" ], function( i, name ) {\n\t\tvar side = name === \"Width\" ? [ \"Left\", \"Right\" ] : [ \"Top\", \"Bottom\" ],\n\t\t\ttype = name.toLowerCase(),\n\t\t\torig = {\n\t\t\t\tinnerWidth: $.fn.innerWidth,\n\t\t\t\tinnerHeight: $.fn.innerHeight,\n\t\t\t\touterWidth: $.fn.outerWidth,\n\t\t\t\touterHeight: $.fn.outerHeight\n\t\t\t};\n\n\t\tfunction reduce( elem, size, border, margin ) {\n\t\t\t$.each( side, function() {\n\t\t\t\tsize -= parseFloat( $.css( elem, \"padding\" + this ) ) || 0;\n\t\t\t\tif ( border ) {\n\t\t\t\t\tsize -= parseFloat( $.css( elem, \"border\" + this + \"Width\" ) ) || 0;\n\t\t\t\t}\n\t\t\t\tif ( margin ) {\n\t\t\t\t\tsize -= parseFloat( $.css( elem, \"margin\" + this ) ) || 0;\n\t\t\t\t}\n\t\t\t} );\n\t\t\treturn size;\n\t\t}\n\n\t\t$.fn[ \"inner\" + name ] = function( size ) {\n\t\t\tif ( size === undefined ) {\n\t\t\t\treturn orig[ \"inner\" + name ].call( this );\n\t\t\t}\n\n\t\t\treturn this.each( function() {\n\t\t\t\t$( this ).css( type, reduce( this, size ) + \"px\" );\n\t\t\t} );\n\t\t};\n\n\t\t$.fn[ \"outer\" + name ] = function( size, margin ) {\n\t\t\tif ( typeof size !== \"number\" ) {\n\t\t\t\treturn orig[ \"outer\" + name ].call( this, size );\n\t\t\t}\n\n\t\t\treturn this.each( function() {\n\t\t\t\t$( this ).css( type, reduce( this, size, true, margin ) + \"px\" );\n\t\t\t} );\n\t\t};\n\t} );\n\n\t$.fn.addBack = function( selector ) {\n\t\treturn this.add( selector == null ?\n\t\t\tthis.prevObject : this.prevObject.filter( selector )\n\t\t);\n\t};\n}\n\n;\n/*!\n * jQuery UI Keycode 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Keycode\n//>>group: Core\n//>>description: Provide keycodes as keynames\n//>>docs: http://api.jqueryui.com/jQuery.ui.keyCode/\n\n\nvar keycode = $.ui.keyCode = {\n\tBACKSPACE: 8,\n\tCOMMA: 188,\n\tDELETE: 46,\n\tDOWN: 40,\n\tEND: 35,\n\tENTER: 13,\n\tESCAPE: 27,\n\tHOME: 36,\n\tLEFT: 37,\n\tPAGE_DOWN: 34,\n\tPAGE_UP: 33,\n\tPERIOD: 190,\n\tRIGHT: 39,\n\tSPACE: 32,\n\tTAB: 9,\n\tUP: 38\n};\n\n\n\n\n// Internal use only\nvar escapeSelector = $.ui.escapeSelector = ( function() {\n\tvar selectorEscape = /([!\"#$%&'()*+,./:;<=>?@[\\]^`{|}~])/g;\n\treturn function( selector ) {\n\t\treturn selector.replace( selectorEscape, \"\\\\$1\" );\n\t};\n} )();\n\n\n/*!\n * jQuery UI Labels 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: labels\n//>>group: Core\n//>>description: Find all the labels associated with a given input\n//>>docs: http://api.jqueryui.com/labels/\n\n\n\nvar labels = $.fn.labels = function() {\n\tvar ancestor, selector, id, labels, ancestors;\n\n\t// Check control.labels first\n\tif ( this[ 0 ].labels && this[ 0 ].labels.length ) {\n\t\treturn this.pushStack( this[ 0 ].labels );\n\t}\n\n\t// Support: IE <= 11, FF <= 37, Android <= 2.3 only\n\t// Above browsers do not support control.labels. Everything below is to support them\n\t// as well as document fragments. control.labels does not work on document fragments\n\tlabels = this.eq( 0 ).parents( \"label\" );\n\n\t// Look for the label based on the id\n\tid = this.attr( \"id\" );\n\tif ( id ) {\n\n\t\t// We don't search against the document in case the element\n\t\t// is disconnected from the DOM\n\t\tancestor = this.eq( 0 ).parents().last();\n\n\t\t// Get a full set of top level ancestors\n\t\tancestors = ancestor.add( ancestor.length ? ancestor.siblings() : this.siblings() );\n\n\t\t// Create a selector for the label based on the id\n\t\tselector = \"label[for='\" + $.ui.escapeSelector( id ) + \"']\";\n\n\t\tlabels = labels.add( ancestors.find( selector ).addBack( selector ) );\n\n\t}\n\n\t// Return whatever we have found for labels\n\treturn this.pushStack( labels );\n};\n\n\n/*!\n * jQuery UI Scroll Parent 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: scrollParent\n//>>group: Core\n//>>description: Get the closest ancestor element that is scrollable.\n//>>docs: http://api.jqueryui.com/scrollParent/\n\n\n\nvar scrollParent = $.fn.scrollParent = function( includeHidden ) {\n\tvar position = this.css( \"position\" ),\n\t\texcludeStaticParent = position === \"absolute\",\n\t\toverflowRegex = includeHidden ? /(auto|scroll|hidden)/ : /(auto|scroll)/,\n\t\tscrollParent = this.parents().filter( function() {\n\t\t\tvar parent = $( this );\n\t\t\tif ( excludeStaticParent && parent.css( \"position\" ) === \"static\" ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn overflowRegex.test( parent.css( \"overflow\" ) + parent.css( \"overflow-y\" ) +\n\t\t\t\tparent.css( \"overflow-x\" ) );\n\t\t} ).eq( 0 );\n\n\treturn position === \"fixed\" || !scrollParent.length ?\n\t\t$( this[ 0 ].ownerDocument || document ) :\n\t\tscrollParent;\n};\n\n\n/*!\n * jQuery UI Tabbable 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: :tabbable Selector\n//>>group: Core\n//>>description: Selects elements which can be tabbed to.\n//>>docs: http://api.jqueryui.com/tabbable-selector/\n\n\n\nvar tabbable = $.extend( $.expr[ \":\" ], {\n\ttabbable: function( element ) {\n\t\tvar tabIndex = $.attr( element, \"tabindex\" ),\n\t\t\thasTabindex = tabIndex != null;\n\t\treturn ( !hasTabindex || tabIndex >= 0 ) && $.ui.focusable( element, hasTabindex );\n\t}\n} );\n\n\n/*!\n * jQuery UI Unique ID 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: uniqueId\n//>>group: Core\n//>>description: Functions to generate and remove uniqueId's\n//>>docs: http://api.jqueryui.com/uniqueId/\n\n\n\nvar uniqueId = $.fn.extend( {\n\tuniqueId: ( function() {\n\t\tvar uuid = 0;\n\n\t\treturn function() {\n\t\t\treturn this.each( function() {\n\t\t\t\tif ( !this.id ) {\n\t\t\t\t\tthis.id = \"ui-id-\" + ( ++uuid );\n\t\t\t\t}\n\t\t\t} );\n\t\t};\n\t} )(),\n\n\tremoveUniqueId: function() {\n\t\treturn this.each( function() {\n\t\t\tif ( /^ui-id-\\d+$/.test( this.id ) ) {\n\t\t\t\t$( this ).removeAttr( \"id\" );\n\t\t\t}\n\t\t} );\n\t}\n} );\n\n\n\n\n// This file is deprecated\nvar ie = $.ui.ie = !!/msie [\\w.]+/.exec( navigator.userAgent.toLowerCase() );\n\n/*!\n * jQuery UI Mouse 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Mouse\n//>>group: Widgets\n//>>description: Abstracts mouse-based interactions to assist in creating certain widgets.\n//>>docs: http://api.jqueryui.com/mouse/\n\n\n\nvar mouseHandled = false;\n$( document ).on( \"mouseup\", function() {\n\tmouseHandled = false;\n} );\n\nvar widgetsMouse = $.widget( \"ui.mouse\", {\n\tversion: \"1.12.1\",\n\toptions: {\n\t\tcancel: \"input, textarea, button, select, option\",\n\t\tdistance: 1,\n\t\tdelay: 0\n\t},\n\t_mouseInit: function() {\n\t\tvar that = this;\n\n\t\tthis.element\n\t\t\t.on( \"mousedown.\" + this.widgetName, function( event ) {\n\t\t\t\treturn that._mouseDown( event );\n\t\t\t} )\n\t\t\t.on( \"click.\" + this.widgetName, function( event ) {\n\t\t\t\tif ( true === $.data( event.target, that.widgetName + \".preventClickEvent\" ) ) {\n\t\t\t\t\t$.removeData( event.target, that.widgetName + \".preventClickEvent\" );\n\t\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t} );\n\n\t\tthis.started = false;\n\t},\n\n\t// TODO: make sure destroying one instance of mouse doesn't mess with\n\t// other instances of mouse\n\t_mouseDestroy: function() {\n\t\tthis.element.off( \".\" + this.widgetName );\n\t\tif ( this._mouseMoveDelegate ) {\n\t\t\tthis.document\n\t\t\t\t.off( \"mousemove.\" + this.widgetName, this._mouseMoveDelegate )\n\t\t\t\t.off( \"mouseup.\" + this.widgetName, this._mouseUpDelegate );\n\t\t}\n\t},\n\n\t_mouseDown: function( event ) {\n\n\t\t// don't let more than one widget handle mouseStart\n\t\tif ( mouseHandled ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._mouseMoved = false;\n\n\t\t// We may have missed mouseup (out of window)\n\t\t( this._mouseStarted && this._mouseUp( event ) );\n\n\t\tthis._mouseDownEvent = event;\n\n\t\tvar that = this,\n\t\t\tbtnIsLeft = ( event.which === 1 ),\n\n\t\t\t// event.target.nodeName works around a bug in IE 8 with\n\t\t\t// disabled inputs (#7620)\n\t\t\telIsCancel = ( typeof this.options.cancel === \"string\" && event.target.nodeName ?\n\t\t\t\t$( event.target ).closest( this.options.cancel ).length : false );\n\t\tif ( !btnIsLeft || elIsCancel || !this._mouseCapture( event ) ) {\n\t\t\treturn true;\n\t\t}\n\n\t\tthis.mouseDelayMet = !this.options.delay;\n\t\tif ( !this.mouseDelayMet ) {\n\t\t\tthis._mouseDelayTimer = setTimeout( function() {\n\t\t\t\tthat.mouseDelayMet = true;\n\t\t\t}, this.options.delay );\n\t\t}\n\n\t\tif ( this._mouseDistanceMet( event ) && this._mouseDelayMet( event ) ) {\n\t\t\tthis._mouseStarted = ( this._mouseStart( event ) !== false );\n\t\t\tif ( !this._mouseStarted ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\t// Click event may never have fired (Gecko & Opera)\n\t\tif ( true === $.data( event.target, this.widgetName + \".preventClickEvent\" ) ) {\n\t\t\t$.removeData( event.target, this.widgetName + \".preventClickEvent\" );\n\t\t}\n\n\t\t// These delegates are required to keep context\n\t\tthis._mouseMoveDelegate = function( event ) {\n\t\t\treturn that._mouseMove( event );\n\t\t};\n\t\tthis._mouseUpDelegate = function( event ) {\n\t\t\treturn that._mouseUp( event );\n\t\t};\n\n\t\tthis.document\n\t\t\t.on( \"mousemove.\" + this.widgetName, this._mouseMoveDelegate )\n\t\t\t.on( \"mouseup.\" + this.widgetName, this._mouseUpDelegate );\n\n\t\tevent.preventDefault();\n\n\t\tmouseHandled = true;\n\t\treturn true;\n\t},\n\n\t_mouseMove: function( event ) {\n\n\t\t// Only check for mouseups outside the document if you've moved inside the document\n\t\t// at least once. This prevents the firing of mouseup in the case of IE<9, which will\n\t\t// fire a mousemove event if content is placed under the cursor. See #7778\n\t\t// Support: IE <9\n\t\tif ( this._mouseMoved ) {\n\n\t\t\t// IE mouseup check - mouseup happened when mouse was out of window\n\t\t\tif ( $.ui.ie && ( !document.documentMode || document.documentMode < 9 ) &&\n\t\t\t\t\t!event.button ) {\n\t\t\t\treturn this._mouseUp( event );\n\n\t\t\t// Iframe mouseup check - mouseup occurred in another document\n\t\t\t} else if ( !event.which ) {\n\n\t\t\t\t// Support: Safari <=8 - 9\n\t\t\t\t// Safari sets which to 0 if you press any of the following keys\n\t\t\t\t// during a drag (#14461)\n\t\t\t\tif ( event.originalEvent.altKey || event.originalEvent.ctrlKey ||\n\t\t\t\t\t\tevent.originalEvent.metaKey || event.originalEvent.shiftKey ) {\n\t\t\t\t\tthis.ignoreMissingWhich = true;\n\t\t\t\t} else if ( !this.ignoreMissingWhich ) {\n\t\t\t\t\treturn this._mouseUp( event );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( event.which || event.button ) {\n\t\t\tthis._mouseMoved = true;\n\t\t}\n\n\t\tif ( this._mouseStarted ) {\n\t\t\tthis._mouseDrag( event );\n\t\t\treturn event.preventDefault();\n\t\t}\n\n\t\tif ( this._mouseDistanceMet( event ) && this._mouseDelayMet( event ) ) {\n\t\t\tthis._mouseStarted =\n\t\t\t\t( this._mouseStart( this._mouseDownEvent, event ) !== false );\n\t\t\t( this._mouseStarted ? this._mouseDrag( event ) : this._mouseUp( event ) );\n\t\t}\n\n\t\treturn !this._mouseStarted;\n\t},\n\n\t_mouseUp: function( event ) {\n\t\tthis.document\n\t\t\t.off( \"mousemove.\" + this.widgetName, this._mouseMoveDelegate )\n\t\t\t.off( \"mouseup.\" + this.widgetName, this._mouseUpDelegate );\n\n\t\tif ( this._mouseStarted ) {\n\t\t\tthis._mouseStarted = false;\n\n\t\t\tif ( event.target === this._mouseDownEvent.target ) {\n\t\t\t\t$.data( event.target, this.widgetName + \".preventClickEvent\", true );\n\t\t\t}\n\n\t\t\tthis._mouseStop( event );\n\t\t}\n\n\t\tif ( this._mouseDelayTimer ) {\n\t\t\tclearTimeout( this._mouseDelayTimer );\n\t\t\tdelete this._mouseDelayTimer;\n\t\t}\n\n\t\tthis.ignoreMissingWhich = false;\n\t\tmouseHandled = false;\n\t\tevent.preventDefault();\n\t},\n\n\t_mouseDistanceMet: function( event ) {\n\t\treturn ( Math.max(\n\t\t\t\tMath.abs( this._mouseDownEvent.pageX - event.pageX ),\n\t\t\t\tMath.abs( this._mouseDownEvent.pageY - event.pageY )\n\t\t\t) >= this.options.distance\n\t\t);\n\t},\n\n\t_mouseDelayMet: function( /* event */ ) {\n\t\treturn this.mouseDelayMet;\n\t},\n\n\t// These are placeholder methods, to be overriden by extending plugin\n\t_mouseStart: function( /* event */ ) {},\n\t_mouseDrag: function( /* event */ ) {},\n\t_mouseStop: function( /* event */ ) {},\n\t_mouseCapture: function( /* event */ ) { return true; }\n} );\n\n\n\n\n// $.ui.plugin is deprecated. Use $.widget() extensions instead.\nvar plugin = $.ui.plugin = {\n\tadd: function( module, option, set ) {\n\t\tvar i,\n\t\t\tproto = $.ui[ module ].prototype;\n\t\tfor ( i in set ) {\n\t\t\tproto.plugins[ i ] = proto.plugins[ i ] || [];\n\t\t\tproto.plugins[ i ].push( [ option, set[ i ] ] );\n\t\t}\n\t},\n\tcall: function( instance, name, args, allowDisconnected ) {\n\t\tvar i,\n\t\t\tset = instance.plugins[ name ];\n\n\t\tif ( !set ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( !allowDisconnected && ( !instance.element[ 0 ].parentNode ||\n\t\t\t\tinstance.element[ 0 ].parentNode.nodeType === 11 ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tfor ( i = 0; i < set.length; i++ ) {\n\t\t\tif ( instance.options[ set[ i ][ 0 ] ] ) {\n\t\t\t\tset[ i ][ 1 ].apply( instance.element, args );\n\t\t\t}\n\t\t}\n\t}\n};\n\n\n\nvar safeActiveElement = $.ui.safeActiveElement = function( document ) {\n\tvar activeElement;\n\n\t// Support: IE 9 only\n\t// IE9 throws an \"Unspecified error\" accessing document.activeElement from an <iframe>\n\ttry {\n\t\tactiveElement = document.activeElement;\n\t} catch ( error ) {\n\t\tactiveElement = document.body;\n\t}\n\n\t// Support: IE 9 - 11 only\n\t// IE may return null instead of an element\n\t// Interestingly, this only seems to occur when NOT in an iframe\n\tif ( !activeElement ) {\n\t\tactiveElement = document.body;\n\t}\n\n\t// Support: IE 11 only\n\t// IE11 returns a seemingly empty object in some cases when accessing\n\t// document.activeElement from an <iframe>\n\tif ( !activeElement.nodeName ) {\n\t\tactiveElement = document.body;\n\t}\n\n\treturn activeElement;\n};\n\n\n\nvar safeBlur = $.ui.safeBlur = function( element ) {\n\n\t// Support: IE9 - 10 only\n\t// If the <body> is blurred, IE will switch windows, see #9420\n\tif ( element && element.nodeName.toLowerCase() !== \"body\" ) {\n\t\t$( element ).trigger( \"blur\" );\n\t}\n};\n\n\n/*!\n * jQuery UI Draggable 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Draggable\n//>>group: Interactions\n//>>description: Enables dragging functionality for any element.\n//>>docs: http://api.jqueryui.com/draggable/\n//>>demos: http://jqueryui.com/draggable/\n//>>css.structure: ../../themes/base/draggable.css\n\n\n\n$.widget( \"ui.draggable\", $.ui.mouse, {\n\tversion: \"1.12.1\",\n\twidgetEventPrefix: \"drag\",\n\toptions: {\n\t\taddClasses: true,\n\t\tappendTo: \"parent\",\n\t\taxis: false,\n\t\tconnectToSortable: false,\n\t\tcontainment: false,\n\t\tcursor: \"auto\",\n\t\tcursorAt: false,\n\t\tgrid: false,\n\t\thandle: false,\n\t\thelper: \"original\",\n\t\tiframeFix: false,\n\t\topacity: false,\n\t\trefreshPositions: false,\n\t\trevert: false,\n\t\trevertDuration: 500,\n\t\tscope: \"default\",\n\t\tscroll: true,\n\t\tscrollSensitivity: 20,\n\t\tscrollSpeed: 20,\n\t\tsnap: false,\n\t\tsnapMode: \"both\",\n\t\tsnapTolerance: 20,\n\t\tstack: false,\n\t\tzIndex: false,\n\n\t\t// Callbacks\n\t\tdrag: null,\n\t\tstart: null,\n\t\tstop: null\n\t},\n\t_create: function() {\n\n\t\tif ( this.options.helper === \"original\" ) {\n\t\t\tthis._setPositionRelative();\n\t\t}\n\t\tif ( this.options.addClasses ) {\n\t\t\tthis._addClass( \"ui-draggable\" );\n\t\t}\n\t\tthis._setHandleClassName();\n\n\t\tthis._mouseInit();\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tthis._super( key, value );\n\t\tif ( key === \"handle\" ) {\n\t\t\tthis._removeHandleClassName();\n\t\t\tthis._setHandleClassName();\n\t\t}\n\t},\n\n\t_destroy: function() {\n\t\tif ( ( this.helper || this.element ).is( \".ui-draggable-dragging\" ) ) {\n\t\t\tthis.destroyOnClear = true;\n\t\t\treturn;\n\t\t}\n\t\tthis._removeHandleClassName();\n\t\tthis._mouseDestroy();\n\t},\n\n\t_mouseCapture: function( event ) {\n\t\tvar o = this.options;\n\n\t\t// Among others, prevent a drag on a resizable-handle\n\t\tif ( this.helper || o.disabled ||\n\t\t\t\t$( event.target ).closest( \".ui-resizable-handle\" ).length > 0 ) {\n\t\t\treturn false;\n\t\t}\n\n\t\t//Quit if we're not on a valid handle\n\t\tthis.handle = this._getHandle( event );\n\t\tif ( !this.handle ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tthis._blurActiveElement( event );\n\n\t\tthis._blockFrames( o.iframeFix === true ? \"iframe\" : o.iframeFix );\n\n\t\treturn true;\n\n\t},\n\n\t_blockFrames: function( selector ) {\n\t\tthis.iframeBlocks = this.document.find( selector ).map( function() {\n\t\t\tvar iframe = $( this );\n\n\t\t\treturn $( \"<div>\" )\n\t\t\t\t.css( \"position\", \"absolute\" )\n\t\t\t\t.appendTo( iframe.parent() )\n\t\t\t\t.outerWidth( iframe.outerWidth() )\n\t\t\t\t.outerHeight( iframe.outerHeight() )\n\t\t\t\t.offset( iframe.offset() )[ 0 ];\n\t\t} );\n\t},\n\n\t_unblockFrames: function() {\n\t\tif ( this.iframeBlocks ) {\n\t\t\tthis.iframeBlocks.remove();\n\t\t\tdelete this.iframeBlocks;\n\t\t}\n\t},\n\n\t_blurActiveElement: function( event ) {\n\t\tvar activeElement = $.ui.safeActiveElement( this.document[ 0 ] ),\n\t\t\ttarget = $( event.target );\n\n\t\t// Don't blur if the event occurred on an element that is within\n\t\t// the currently focused element\n\t\t// See #10527, #12472\n\t\tif ( target.closest( activeElement ).length ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Blur any element that currently has focus, see #4261\n\t\t$.ui.safeBlur( activeElement );\n\t},\n\n\t_mouseStart: function( event ) {\n\n\t\tvar o = this.options;\n\n\t\t//Create and append the visible helper\n\t\tthis.helper = this._createHelper( event );\n\n\t\tthis._addClass( this.helper, \"ui-draggable-dragging\" );\n\n\t\t//Cache the helper size\n\t\tthis._cacheHelperProportions();\n\n\t\t//If ddmanager is used for droppables, set the global draggable\n\t\tif ( $.ui.ddmanager ) {\n\t\t\t$.ui.ddmanager.current = this;\n\t\t}\n\n\t\t/*\n\t\t * - Position generation -\n\t\t * This block generates everything position related - it's the core of draggables.\n\t\t */\n\n\t\t//Cache the margins of the original element\n\t\tthis._cacheMargins();\n\n\t\t//Store the helper's css position\n\t\tthis.cssPosition = this.helper.css( \"position\" );\n\t\tthis.scrollParent = this.helper.scrollParent( true );\n\t\tthis.offsetParent = this.helper.offsetParent();\n\t\tthis.hasFixedAncestor = this.helper.parents().filter( function() {\n\t\t\t\treturn $( this ).css( \"position\" ) === \"fixed\";\n\t\t\t} ).length > 0;\n\n\t\t//The element's absolute position on the page minus margins\n\t\tthis.positionAbs = this.element.offset();\n\t\tthis._refreshOffsets( event );\n\n\t\t//Generate the original position\n\t\tthis.originalPosition = this.position = this._generatePosition( event, false );\n\t\tthis.originalPageX = event.pageX;\n\t\tthis.originalPageY = event.pageY;\n\n\t\t//Adjust the mouse offset relative to the helper if \"cursorAt\" is supplied\n\t\t( o.cursorAt && this._adjustOffsetFromHelper( o.cursorAt ) );\n\n\t\t//Set a containment if given in the options\n\t\tthis._setContainment();\n\n\t\t//Trigger event + callbacks\n\t\tif ( this._trigger( \"start\", event ) === false ) {\n\t\t\tthis._clear();\n\t\t\treturn false;\n\t\t}\n\n\t\t//Recache the helper size\n\t\tthis._cacheHelperProportions();\n\n\t\t//Prepare the droppable offsets\n\t\tif ( $.ui.ddmanager && !o.dropBehaviour ) {\n\t\t\t$.ui.ddmanager.prepareOffsets( this, event );\n\t\t}\n\n\t\t// Execute the drag once - this causes the helper not to be visible before getting its\n\t\t// correct position\n\t\tthis._mouseDrag( event, true );\n\n\t\t// If the ddmanager is used for droppables, inform the manager that dragging has started\n\t\t// (see #5003)\n\t\tif ( $.ui.ddmanager ) {\n\t\t\t$.ui.ddmanager.dragStart( this, event );\n\t\t}\n\n\t\treturn true;\n\t},\n\n\t_refreshOffsets: function( event ) {\n\t\tthis.offset = {\n\t\t\ttop: this.positionAbs.top - this.margins.top,\n\t\t\tleft: this.positionAbs.left - this.margins.left,\n\t\t\tscroll: false,\n\t\t\tparent: this._getParentOffset(),\n\t\t\trelative: this._getRelativeOffset()\n\t\t};\n\n\t\tthis.offset.click = {\n\t\t\tleft: event.pageX - this.offset.left,\n\t\t\ttop: event.pageY - this.offset.top\n\t\t};\n\t},\n\n\t_mouseDrag: function( event, noPropagation ) {\n\n\t\t// reset any necessary cached properties (see #5009)\n\t\tif ( this.hasFixedAncestor ) {\n\t\t\tthis.offset.parent = this._getParentOffset();\n\t\t}\n\n\t\t//Compute the helpers position\n\t\tthis.position = this._generatePosition( event, true );\n\t\tthis.positionAbs = this._convertPositionTo( \"absolute\" );\n\n\t\t//Call plugins and callbacks and use the resulting position if something is returned\n\t\tif ( !noPropagation ) {\n\t\t\tvar ui = this._uiHash();\n\t\t\tif ( this._trigger( \"drag\", event, ui ) === false ) {\n\t\t\t\tthis._mouseUp( new $.Event( \"mouseup\", event ) );\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tthis.position = ui.position;\n\t\t}\n\n\t\tthis.helper[ 0 ].style.left = this.position.left + \"px\";\n\t\tthis.helper[ 0 ].style.top = this.position.top + \"px\";\n\n\t\tif ( $.ui.ddmanager ) {\n\t\t\t$.ui.ddmanager.drag( this, event );\n\t\t}\n\n\t\treturn false;\n\t},\n\n\t_mouseStop: function( event ) {\n\n\t\t//If we are using droppables, inform the manager about the drop\n\t\tvar that = this,\n\t\t\tdropped = false;\n\t\tif ( $.ui.ddmanager && !this.options.dropBehaviour ) {\n\t\t\tdropped = $.ui.ddmanager.drop( this, event );\n\t\t}\n\n\t\t//if a drop comes from outside (a sortable)\n\t\tif ( this.dropped ) {\n\t\t\tdropped = this.dropped;\n\t\t\tthis.dropped = false;\n\t\t}\n\n\t\tif ( ( this.options.revert === \"invalid\" && !dropped ) ||\n\t\t\t\t( this.options.revert === \"valid\" && dropped ) ||\n\t\t\t\tthis.options.revert === true || ( $.isFunction( this.options.revert ) &&\n\t\t\t\tthis.options.revert.call( this.element, dropped ) )\n\t\t) {\n\t\t\t$( this.helper ).animate(\n\t\t\t\tthis.originalPosition,\n\t\t\t\tparseInt( this.options.revertDuration, 10 ),\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( that._trigger( \"stop\", event ) !== false ) {\n\t\t\t\t\t\tthat._clear();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t);\n\t\t} else {\n\t\t\tif ( this._trigger( \"stop\", event ) !== false ) {\n\t\t\t\tthis._clear();\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t},\n\n\t_mouseUp: function( event ) {\n\t\tthis._unblockFrames();\n\n\t\t// If the ddmanager is used for droppables, inform the manager that dragging has stopped\n\t\t// (see #5003)\n\t\tif ( $.ui.ddmanager ) {\n\t\t\t$.ui.ddmanager.dragStop( this, event );\n\t\t}\n\n\t\t// Only need to focus if the event occurred on the draggable itself, see #10527\n\t\tif ( this.handleElement.is( event.target ) ) {\n\n\t\t\t// The interaction is over; whether or not the click resulted in a drag,\n\t\t\t// focus the element\n\t\t\tthis.element.trigger( \"focus\" );\n\t\t}\n\n\t\treturn $.ui.mouse.prototype._mouseUp.call( this, event );\n\t},\n\n\tcancel: function() {\n\n\t\tif ( this.helper.is( \".ui-draggable-dragging\" ) ) {\n\t\t\tthis._mouseUp( new $.Event( \"mouseup\", { target: this.element[ 0 ] } ) );\n\t\t} else {\n\t\t\tthis._clear();\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\t_getHandle: function( event ) {\n\t\treturn this.options.handle ?\n\t\t\t!!$( event.target ).closest( this.element.find( this.options.handle ) ).length :\n\t\t\ttrue;\n\t},\n\n\t_setHandleClassName: function() {\n\t\tthis.handleElement = this.options.handle ?\n\t\t\tthis.element.find( this.options.handle ) : this.element;\n\t\tthis._addClass( this.handleElement, \"ui-draggable-handle\" );\n\t},\n\n\t_removeHandleClassName: function() {\n\t\tthis._removeClass( this.handleElement, \"ui-draggable-handle\" );\n\t},\n\n\t_createHelper: function( event ) {\n\n\t\tvar o = this.options,\n\t\t\thelperIsFunction = $.isFunction( o.helper ),\n\t\t\thelper = helperIsFunction ?\n\t\t\t\t$( o.helper.apply( this.element[ 0 ], [ event ] ) ) :\n\t\t\t\t( o.helper === \"clone\" ?\n\t\t\t\t\tthis.element.clone().removeAttr( \"id\" ) :\n\t\t\t\t\tthis.element );\n\n\t\tif ( !helper.parents( \"body\" ).length ) {\n\t\t\thelper.appendTo( ( o.appendTo === \"parent\" ?\n\t\t\t\tthis.element[ 0 ].parentNode :\n\t\t\t\to.appendTo ) );\n\t\t}\n\n\t\t// Http://bugs.jqueryui.com/ticket/9446\n\t\t// a helper function can return the original element\n\t\t// which wouldn't have been set to relative in _create\n\t\tif ( helperIsFunction && helper[ 0 ] === this.element[ 0 ] ) {\n\t\t\tthis._setPositionRelative();\n\t\t}\n\n\t\tif ( helper[ 0 ] !== this.element[ 0 ] &&\n\t\t\t\t!( /(fixed|absolute)/ ).test( helper.css( \"position\" ) ) ) {\n\t\t\thelper.css( \"position\", \"absolute\" );\n\t\t}\n\n\t\treturn helper;\n\n\t},\n\n\t_setPositionRelative: function() {\n\t\tif ( !( /^(?:r|a|f)/ ).test( this.element.css( \"position\" ) ) ) {\n\t\t\tthis.element[ 0 ].style.position = \"relative\";\n\t\t}\n\t},\n\n\t_adjustOffsetFromHelper: function( obj ) {\n\t\tif ( typeof obj === \"string\" ) {\n\t\t\tobj = obj.split( \" \" );\n\t\t}\n\t\tif ( $.isArray( obj ) ) {\n\t\t\tobj = { left: +obj[ 0 ], top: +obj[ 1 ] || 0 };\n\t\t}\n\t\tif ( \"left\" in obj ) {\n\t\t\tthis.offset.click.left = obj.left + this.margins.left;\n\t\t}\n\t\tif ( \"right\" in obj ) {\n\t\t\tthis.offset.click.left = this.helperProportions.width - obj.right + this.margins.left;\n\t\t}\n\t\tif ( \"top\" in obj ) {\n\t\t\tthis.offset.click.top = obj.top + this.margins.top;\n\t\t}\n\t\tif ( \"bottom\" in obj ) {\n\t\t\tthis.offset.click.top = this.helperProportions.height - obj.bottom + this.margins.top;\n\t\t}\n\t},\n\n\t_isRootNode: function( element ) {\n\t\treturn ( /(html|body)/i ).test( element.tagName ) || element === this.document[ 0 ];\n\t},\n\n\t_getParentOffset: function() {\n\n\t\t//Get the offsetParent and cache its position\n\t\tvar po = this.offsetParent.offset(),\n\t\t\tdocument = this.document[ 0 ];\n\n\t\t// This is a special case where we need to modify a offset calculated on start, since the\n\t\t// following happened:\n\t\t// 1. The position of the helper is absolute, so it's position is calculated based on the\n\t\t// next positioned parent\n\t\t// 2. The actual offset parent is a child of the scroll parent, and the scroll parent isn't\n\t\t// the document, which means that the scroll is included in the initial calculation of the\n\t\t// offset of the parent, and never recalculated upon drag\n\t\tif ( this.cssPosition === \"absolute\" && this.scrollParent[ 0 ] !== document &&\n\t\t\t\t$.contains( this.scrollParent[ 0 ], this.offsetParent[ 0 ] ) ) {\n\t\t\tpo.left += this.scrollParent.scrollLeft();\n\t\t\tpo.top += this.scrollParent.scrollTop();\n\t\t}\n\n\t\tif ( this._isRootNode( this.offsetParent[ 0 ] ) ) {\n\t\t\tpo = { top: 0, left: 0 };\n\t\t}\n\n\t\treturn {\n\t\t\ttop: po.top + ( parseInt( this.offsetParent.css( \"borderTopWidth\" ), 10 ) || 0 ),\n\t\t\tleft: po.left + ( parseInt( this.offsetParent.css( \"borderLeftWidth\" ), 10 ) || 0 )\n\t\t};\n\n\t},\n\n\t_getRelativeOffset: function() {\n\t\tif ( this.cssPosition !== \"relative\" ) {\n\t\t\treturn { top: 0, left: 0 };\n\t\t}\n\n\t\tvar p = this.element.position(),\n\t\t\tscrollIsRootNode = this._isRootNode( this.scrollParent[ 0 ] );\n\n\t\treturn {\n\t\t\ttop: p.top - ( parseInt( this.helper.css( \"top\" ), 10 ) || 0 ) +\n\t\t\t\t( !scrollIsRootNode ? this.scrollParent.scrollTop() : 0 ),\n\t\t\tleft: p.left - ( parseInt( this.helper.css( \"left\" ), 10 ) || 0 ) +\n\t\t\t\t( !scrollIsRootNode ? this.scrollParent.scrollLeft() : 0 )\n\t\t};\n\n\t},\n\n\t_cacheMargins: function() {\n\t\tthis.margins = {\n\t\t\tleft: ( parseInt( this.element.css( \"marginLeft\" ), 10 ) || 0 ),\n\t\t\ttop: ( parseInt( this.element.css( \"marginTop\" ), 10 ) || 0 ),\n\t\t\tright: ( parseInt( this.element.css( \"marginRight\" ), 10 ) || 0 ),\n\t\t\tbottom: ( parseInt( this.element.css( \"marginBottom\" ), 10 ) || 0 )\n\t\t};\n\t},\n\n\t_cacheHelperProportions: function() {\n\t\tthis.helperProportions = {\n\t\t\twidth: this.helper.outerWidth(),\n\t\t\theight: this.helper.outerHeight()\n\t\t};\n\t},\n\n\t_setContainment: function() {\n\n\t\tvar isUserScrollable, c, ce,\n\t\t\to = this.options,\n\t\t\tdocument = this.document[ 0 ];\n\n\t\tthis.relativeContainer = null;\n\n\t\tif ( !o.containment ) {\n\t\t\tthis.containment = null;\n\t\t\treturn;\n\t\t}\n\n\t\tif ( o.containment === \"window\" ) {\n\t\t\tthis.containment = [\n\t\t\t\t$( window ).scrollLeft() - this.offset.relative.left - this.offset.parent.left,\n\t\t\t\t$( window ).scrollTop() - this.offset.relative.top - this.offset.parent.top,\n\t\t\t\t$( window ).scrollLeft() + $( window ).width() -\n\t\t\t\t\tthis.helperProportions.width - this.margins.left,\n\t\t\t\t$( window ).scrollTop() +\n\t\t\t\t\t( $( window ).height() || document.body.parentNode.scrollHeight ) -\n\t\t\t\t\tthis.helperProportions.height - this.margins.top\n\t\t\t];\n\t\t\treturn;\n\t\t}\n\n\t\tif ( o.containment === \"document\" ) {\n\t\t\tthis.containment = [\n\t\t\t\t0,\n\t\t\t\t0,\n\t\t\t\t$( document ).width() - this.helperProportions.width - this.margins.left,\n\t\t\t\t( $( document ).height() || document.body.parentNode.scrollHeight ) -\n\t\t\t\t\tthis.helperProportions.height - this.margins.top\n\t\t\t];\n\t\t\treturn;\n\t\t}\n\n\t\tif ( o.containment.constructor === Array ) {\n\t\t\tthis.containment = o.containment;\n\t\t\treturn;\n\t\t}\n\n\t\tif ( o.containment === \"parent\" ) {\n\t\t\to.containment = this.helper[ 0 ].parentNode;\n\t\t}\n\n\t\tc = $( o.containment );\n\t\tce = c[ 0 ];\n\n\t\tif ( !ce ) {\n\t\t\treturn;\n\t\t}\n\n\t\tisUserScrollable = /(scroll|auto)/.test( c.css( \"overflow\" ) );\n\n\t\tthis.containment = [\n\t\t\t( parseInt( c.css( \"borderLeftWidth\" ), 10 ) || 0 ) +\n\t\t\t\t( parseInt( c.css( \"paddingLeft\" ), 10 ) || 0 ),\n\t\t\t( parseInt( c.css( \"borderTopWidth\" ), 10 ) || 0 ) +\n\t\t\t\t( parseInt( c.css( \"paddingTop\" ), 10 ) || 0 ),\n\t\t\t( isUserScrollable ? Math.max( ce.scrollWidth, ce.offsetWidth ) : ce.offsetWidth ) -\n\t\t\t\t( parseInt( c.css( \"borderRightWidth\" ), 10 ) || 0 ) -\n\t\t\t\t( parseInt( c.css( \"paddingRight\" ), 10 ) || 0 ) -\n\t\t\t\tthis.helperProportions.width -\n\t\t\t\tthis.margins.left -\n\t\t\t\tthis.margins.right,\n\t\t\t( isUserScrollable ? Math.max( ce.scrollHeight, ce.offsetHeight ) : ce.offsetHeight ) -\n\t\t\t\t( parseInt( c.css( \"borderBottomWidth\" ), 10 ) || 0 ) -\n\t\t\t\t( parseInt( c.css( \"paddingBottom\" ), 10 ) || 0 ) -\n\t\t\t\tthis.helperProportions.height -\n\t\t\t\tthis.margins.top -\n\t\t\t\tthis.margins.bottom\n\t\t];\n\t\tthis.relativeContainer = c;\n\t},\n\n\t_convertPositionTo: function( d, pos ) {\n\n\t\tif ( !pos ) {\n\t\t\tpos = this.position;\n\t\t}\n\n\t\tvar mod = d === \"absolute\" ? 1 : -1,\n\t\t\tscrollIsRootNode = this._isRootNode( this.scrollParent[ 0 ] );\n\n\t\treturn {\n\t\t\ttop: (\n\n\t\t\t\t// The absolute mouse position\n\t\t\t\tpos.top\t+\n\n\t\t\t\t// Only for relative positioned nodes: Relative offset from element to offset parent\n\t\t\t\tthis.offset.relative.top * mod +\n\n\t\t\t\t// The offsetParent's offset without borders (offset + border)\n\t\t\t\tthis.offset.parent.top * mod -\n\t\t\t\t( ( this.cssPosition === \"fixed\" ?\n\t\t\t\t\t-this.offset.scroll.top :\n\t\t\t\t\t( scrollIsRootNode ? 0 : this.offset.scroll.top ) ) * mod )\n\t\t\t),\n\t\t\tleft: (\n\n\t\t\t\t// The absolute mouse position\n\t\t\t\tpos.left +\n\n\t\t\t\t// Only for relative positioned nodes: Relative offset from element to offset parent\n\t\t\t\tthis.offset.relative.left * mod +\n\n\t\t\t\t// The offsetParent's offset without borders (offset + border)\n\t\t\t\tthis.offset.parent.left * mod\t-\n\t\t\t\t( ( this.cssPosition === \"fixed\" ?\n\t\t\t\t\t-this.offset.scroll.left :\n\t\t\t\t\t( scrollIsRootNode ? 0 : this.offset.scroll.left ) ) * mod )\n\t\t\t)\n\t\t};\n\n\t},\n\n\t_generatePosition: function( event, constrainPosition ) {\n\n\t\tvar containment, co, top, left,\n\t\t\to = this.options,\n\t\t\tscrollIsRootNode = this._isRootNode( this.scrollParent[ 0 ] ),\n\t\t\tpageX = event.pageX,\n\t\t\tpageY = event.pageY;\n\n\t\t// Cache the scroll\n\t\tif ( !scrollIsRootNode || !this.offset.scroll ) {\n\t\t\tthis.offset.scroll = {\n\t\t\t\ttop: this.scrollParent.scrollTop(),\n\t\t\t\tleft: this.scrollParent.scrollLeft()\n\t\t\t};\n\t\t}\n\n\t\t/*\n\t\t * - Position constraining -\n\t\t * Constrain the position to a mix of grid, containment.\n\t\t */\n\n\t\t// If we are not dragging yet, we won't check for options\n\t\tif ( constrainPosition ) {\n\t\t\tif ( this.containment ) {\n\t\t\t\tif ( this.relativeContainer ) {\n\t\t\t\t\tco = this.relativeContainer.offset();\n\t\t\t\t\tcontainment = [\n\t\t\t\t\t\tthis.containment[ 0 ] + co.left,\n\t\t\t\t\t\tthis.containment[ 1 ] + co.top,\n\t\t\t\t\t\tthis.containment[ 2 ] + co.left,\n\t\t\t\t\t\tthis.containment[ 3 ] + co.top\n\t\t\t\t\t];\n\t\t\t\t} else {\n\t\t\t\t\tcontainment = this.containment;\n\t\t\t\t}\n\n\t\t\t\tif ( event.pageX - this.offset.click.left < containment[ 0 ] ) {\n\t\t\t\t\tpageX = containment[ 0 ] + this.offset.click.left;\n\t\t\t\t}\n\t\t\t\tif ( event.pageY - this.offset.click.top < containment[ 1 ] ) {\n\t\t\t\t\tpageY = containment[ 1 ] + this.offset.click.top;\n\t\t\t\t}\n\t\t\t\tif ( event.pageX - this.offset.click.left > containment[ 2 ] ) {\n\t\t\t\t\tpageX = containment[ 2 ] + this.offset.click.left;\n\t\t\t\t}\n\t\t\t\tif ( event.pageY - this.offset.click.top > containment[ 3 ] ) {\n\t\t\t\t\tpageY = containment[ 3 ] + this.offset.click.top;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( o.grid ) {\n\n\t\t\t\t//Check for grid elements set to 0 to prevent divide by 0 error causing invalid\n\t\t\t\t// argument errors in IE (see ticket #6950)\n\t\t\t\ttop = o.grid[ 1 ] ? this.originalPageY + Math.round( ( pageY -\n\t\t\t\t\tthis.originalPageY ) / o.grid[ 1 ] ) * o.grid[ 1 ] : this.originalPageY;\n\t\t\t\tpageY = containment ? ( ( top - this.offset.click.top >= containment[ 1 ] ||\n\t\t\t\t\ttop - this.offset.click.top > containment[ 3 ] ) ?\n\t\t\t\t\t\ttop :\n\t\t\t\t\t\t( ( top - this.offset.click.top >= containment[ 1 ] ) ?\n\t\t\t\t\t\t\ttop - o.grid[ 1 ] : top + o.grid[ 1 ] ) ) : top;\n\n\t\t\t\tleft = o.grid[ 0 ] ? this.originalPageX +\n\t\t\t\t\tMath.round( ( pageX - this.originalPageX ) / o.grid[ 0 ] ) * o.grid[ 0 ] :\n\t\t\t\t\tthis.originalPageX;\n\t\t\t\tpageX = containment ? ( ( left - this.offset.click.left >= containment[ 0 ] ||\n\t\t\t\t\tleft - this.offset.click.left > containment[ 2 ] ) ?\n\t\t\t\t\t\tleft :\n\t\t\t\t\t\t( ( left - this.offset.click.left >= containment[ 0 ] ) ?\n\t\t\t\t\t\t\tleft - o.grid[ 0 ] : left + o.grid[ 0 ] ) ) : left;\n\t\t\t}\n\n\t\t\tif ( o.axis === \"y\" ) {\n\t\t\t\tpageX = this.originalPageX;\n\t\t\t}\n\n\t\t\tif ( o.axis === \"x\" ) {\n\t\t\t\tpageY = this.originalPageY;\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\ttop: (\n\n\t\t\t\t// The absolute mouse position\n\t\t\t\tpageY -\n\n\t\t\t\t// Click offset (relative to the element)\n\t\t\t\tthis.offset.click.top -\n\n\t\t\t\t// Only for relative positioned nodes: Relative offset from element to offset parent\n\t\t\t\tthis.offset.relative.top -\n\n\t\t\t\t// The offsetParent's offset without borders (offset + border)\n\t\t\t\tthis.offset.parent.top +\n\t\t\t\t( this.cssPosition === \"fixed\" ?\n\t\t\t\t\t-this.offset.scroll.top :\n\t\t\t\t\t( scrollIsRootNode ? 0 : this.offset.scroll.top ) )\n\t\t\t),\n\t\t\tleft: (\n\n\t\t\t\t// The absolute mouse position\n\t\t\t\tpageX -\n\n\t\t\t\t// Click offset (relative to the element)\n\t\t\t\tthis.offset.click.left -\n\n\t\t\t\t// Only for relative positioned nodes: Relative offset from element to offset parent\n\t\t\t\tthis.offset.relative.left -\n\n\t\t\t\t// The offsetParent's offset without borders (offset + border)\n\t\t\t\tthis.offset.parent.left +\n\t\t\t\t( this.cssPosition === \"fixed\" ?\n\t\t\t\t\t-this.offset.scroll.left :\n\t\t\t\t\t( scrollIsRootNode ? 0 : this.offset.scroll.left ) )\n\t\t\t)\n\t\t};\n\n\t},\n\n\t_clear: function() {\n\t\tthis._removeClass( this.helper, \"ui-draggable-dragging\" );\n\t\tif ( this.helper[ 0 ] !== this.element[ 0 ] && !this.cancelHelperRemoval ) {\n\t\t\tthis.helper.remove();\n\t\t}\n\t\tthis.helper = null;\n\t\tthis.cancelHelperRemoval = false;\n\t\tif ( this.destroyOnClear ) {\n\t\t\tthis.destroy();\n\t\t}\n\t},\n\n\t// From now on bulk stuff - mainly helpers\n\n\t_trigger: function( type, event, ui ) {\n\t\tui = ui || this._uiHash();\n\t\t$.ui.plugin.call( this, type, [ event, ui, this ], true );\n\n\t\t// Absolute position and offset (see #6884 ) have to be recalculated after plugins\n\t\tif ( /^(drag|start|stop)/.test( type ) ) {\n\t\t\tthis.positionAbs = this._convertPositionTo( \"absolute\" );\n\t\t\tui.offset = this.positionAbs;\n\t\t}\n\t\treturn $.Widget.prototype._trigger.call( this, type, event, ui );\n\t},\n\n\tplugins: {},\n\n\t_uiHash: function() {\n\t\treturn {\n\t\t\thelper: this.helper,\n\t\t\tposition: this.position,\n\t\t\toriginalPosition: this.originalPosition,\n\t\t\toffset: this.positionAbs\n\t\t};\n\t}\n\n} );\n\n$.ui.plugin.add( \"draggable\", \"connectToSortable\", {\n\tstart: function( event, ui, draggable ) {\n\t\tvar uiSortable = $.extend( {}, ui, {\n\t\t\titem: draggable.element\n\t\t} );\n\n\t\tdraggable.sortables = [];\n\t\t$( draggable.options.connectToSortable ).each( function() {\n\t\t\tvar sortable = $( this ).sortable( \"instance\" );\n\n\t\t\tif ( sortable && !sortable.options.disabled ) {\n\t\t\t\tdraggable.sortables.push( sortable );\n\n\t\t\t\t// RefreshPositions is called at drag start to refresh the containerCache\n\t\t\t\t// which is used in drag. This ensures it's initialized and synchronized\n\t\t\t\t// with any changes that might have happened on the page since initialization.\n\t\t\t\tsortable.refreshPositions();\n\t\t\t\tsortable._trigger( \"activate\", event, uiSortable );\n\t\t\t}\n\t\t} );\n\t},\n\tstop: function( event, ui, draggable ) {\n\t\tvar uiSortable = $.extend( {}, ui, {\n\t\t\titem: draggable.element\n\t\t} );\n\n\t\tdraggable.cancelHelperRemoval = false;\n\n\t\t$.each( draggable.sortables, function() {\n\t\t\tvar sortable = this;\n\n\t\t\tif ( sortable.isOver ) {\n\t\t\t\tsortable.isOver = 0;\n\n\t\t\t\t// Allow this sortable to handle removing the helper\n\t\t\t\tdraggable.cancelHelperRemoval = true;\n\t\t\t\tsortable.cancelHelperRemoval = false;\n\n\t\t\t\t// Use _storedCSS To restore properties in the sortable,\n\t\t\t\t// as this also handles revert (#9675) since the draggable\n\t\t\t\t// may have modified them in unexpected ways (#8809)\n\t\t\t\tsortable._storedCSS = {\n\t\t\t\t\tposition: sortable.placeholder.css( \"position\" ),\n\t\t\t\t\ttop: sortable.placeholder.css( \"top\" ),\n\t\t\t\t\tleft: sortable.placeholder.css( \"left\" )\n\t\t\t\t};\n\n\t\t\t\tsortable._mouseStop( event );\n\n\t\t\t\t// Once drag has ended, the sortable should return to using\n\t\t\t\t// its original helper, not the shared helper from draggable\n\t\t\t\tsortable.options.helper = sortable.options._helper;\n\t\t\t} else {\n\n\t\t\t\t// Prevent this Sortable from removing the helper.\n\t\t\t\t// However, don't set the draggable to remove the helper\n\t\t\t\t// either as another connected Sortable may yet handle the removal.\n\t\t\t\tsortable.cancelHelperRemoval = true;\n\n\t\t\t\tsortable._trigger( \"deactivate\", event, uiSortable );\n\t\t\t}\n\t\t} );\n\t},\n\tdrag: function( event, ui, draggable ) {\n\t\t$.each( draggable.sortables, function() {\n\t\t\tvar innermostIntersecting = false,\n\t\t\t\tsortable = this;\n\n\t\t\t// Copy over variables that sortable's _intersectsWith uses\n\t\t\tsortable.positionAbs = draggable.positionAbs;\n\t\t\tsortable.helperProportions = draggable.helperProportions;\n\t\t\tsortable.offset.click = draggable.offset.click;\n\n\t\t\tif ( sortable._intersectsWith( sortable.containerCache ) ) {\n\t\t\t\tinnermostIntersecting = true;\n\n\t\t\t\t$.each( draggable.sortables, function() {\n\n\t\t\t\t\t// Copy over variables that sortable's _intersectsWith uses\n\t\t\t\t\tthis.positionAbs = draggable.positionAbs;\n\t\t\t\t\tthis.helperProportions = draggable.helperProportions;\n\t\t\t\t\tthis.offset.click = draggable.offset.click;\n\n\t\t\t\t\tif ( this !== sortable &&\n\t\t\t\t\t\t\tthis._intersectsWith( this.containerCache ) &&\n\t\t\t\t\t\t\t$.contains( sortable.element[ 0 ], this.element[ 0 ] ) ) {\n\t\t\t\t\t\tinnermostIntersecting = false;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn innermostIntersecting;\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\tif ( innermostIntersecting ) {\n\n\t\t\t\t// If it intersects, we use a little isOver variable and set it once,\n\t\t\t\t// so that the move-in stuff gets fired only once.\n\t\t\t\tif ( !sortable.isOver ) {\n\t\t\t\t\tsortable.isOver = 1;\n\n\t\t\t\t\t// Store draggable's parent in case we need to reappend to it later.\n\t\t\t\t\tdraggable._parent = ui.helper.parent();\n\n\t\t\t\t\tsortable.currentItem = ui.helper\n\t\t\t\t\t\t.appendTo( sortable.element )\n\t\t\t\t\t\t.data( \"ui-sortable-item\", true );\n\n\t\t\t\t\t// Store helper option to later restore it\n\t\t\t\t\tsortable.options._helper = sortable.options.helper;\n\n\t\t\t\t\tsortable.options.helper = function() {\n\t\t\t\t\t\treturn ui.helper[ 0 ];\n\t\t\t\t\t};\n\n\t\t\t\t\t// Fire the start events of the sortable with our passed browser event,\n\t\t\t\t\t// and our own helper (so it doesn't create a new one)\n\t\t\t\t\tevent.target = sortable.currentItem[ 0 ];\n\t\t\t\t\tsortable._mouseCapture( event, true );\n\t\t\t\t\tsortable._mouseStart( event, true, true );\n\n\t\t\t\t\t// Because the browser event is way off the new appended portlet,\n\t\t\t\t\t// modify necessary variables to reflect the changes\n\t\t\t\t\tsortable.offset.click.top = draggable.offset.click.top;\n\t\t\t\t\tsortable.offset.click.left = draggable.offset.click.left;\n\t\t\t\t\tsortable.offset.parent.left -= draggable.offset.parent.left -\n\t\t\t\t\t\tsortable.offset.parent.left;\n\t\t\t\t\tsortable.offset.parent.top -= draggable.offset.parent.top -\n\t\t\t\t\t\tsortable.offset.parent.top;\n\n\t\t\t\t\tdraggable._trigger( \"toSortable\", event );\n\n\t\t\t\t\t// Inform draggable that the helper is in a valid drop zone,\n\t\t\t\t\t// used solely in the revert option to handle \"valid/invalid\".\n\t\t\t\t\tdraggable.dropped = sortable.element;\n\n\t\t\t\t\t// Need to refreshPositions of all sortables in the case that\n\t\t\t\t\t// adding to one sortable changes the location of the other sortables (#9675)\n\t\t\t\t\t$.each( draggable.sortables, function() {\n\t\t\t\t\t\tthis.refreshPositions();\n\t\t\t\t\t} );\n\n\t\t\t\t\t// Hack so receive/update callbacks work (mostly)\n\t\t\t\t\tdraggable.currentItem = draggable.element;\n\t\t\t\t\tsortable.fromOutside = draggable;\n\t\t\t\t}\n\n\t\t\t\tif ( sortable.currentItem ) {\n\t\t\t\t\tsortable._mouseDrag( event );\n\n\t\t\t\t\t// Copy the sortable's position because the draggable's can potentially reflect\n\t\t\t\t\t// a relative position, while sortable is always absolute, which the dragged\n\t\t\t\t\t// element has now become. (#8809)\n\t\t\t\t\tui.position = sortable.position;\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// If it doesn't intersect with the sortable, and it intersected before,\n\t\t\t\t// we fake the drag stop of the sortable, but make sure it doesn't remove\n\t\t\t\t// the helper by using cancelHelperRemoval.\n\t\t\t\tif ( sortable.isOver ) {\n\n\t\t\t\t\tsortable.isOver = 0;\n\t\t\t\t\tsortable.cancelHelperRemoval = true;\n\n\t\t\t\t\t// Calling sortable's mouseStop would trigger a revert,\n\t\t\t\t\t// so revert must be temporarily false until after mouseStop is called.\n\t\t\t\t\tsortable.options._revert = sortable.options.revert;\n\t\t\t\t\tsortable.options.revert = false;\n\n\t\t\t\t\tsortable._trigger( \"out\", event, sortable._uiHash( sortable ) );\n\t\t\t\t\tsortable._mouseStop( event, true );\n\n\t\t\t\t\t// Restore sortable behaviors that were modfied\n\t\t\t\t\t// when the draggable entered the sortable area (#9481)\n\t\t\t\t\tsortable.options.revert = sortable.options._revert;\n\t\t\t\t\tsortable.options.helper = sortable.options._helper;\n\n\t\t\t\t\tif ( sortable.placeholder ) {\n\t\t\t\t\t\tsortable.placeholder.remove();\n\t\t\t\t\t}\n\n\t\t\t\t\t// Restore and recalculate the draggable's offset considering the sortable\n\t\t\t\t\t// may have modified them in unexpected ways. (#8809, #10669)\n\t\t\t\t\tui.helper.appendTo( draggable._parent );\n\t\t\t\t\tdraggable._refreshOffsets( event );\n\t\t\t\t\tui.position = draggable._generatePosition( event, true );\n\n\t\t\t\t\tdraggable._trigger( \"fromSortable\", event );\n\n\t\t\t\t\t// Inform draggable that the helper is no longer in a valid drop zone\n\t\t\t\t\tdraggable.dropped = false;\n\n\t\t\t\t\t// Need to refreshPositions of all sortables just in case removing\n\t\t\t\t\t// from one sortable changes the location of other sortables (#9675)\n\t\t\t\t\t$.each( draggable.sortables, function() {\n\t\t\t\t\t\tthis.refreshPositions();\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t}\n} );\n\n$.ui.plugin.add( \"draggable\", \"cursor\", {\n\tstart: function( event, ui, instance ) {\n\t\tvar t = $( \"body\" ),\n\t\t\to = instance.options;\n\n\t\tif ( t.css( \"cursor\" ) ) {\n\t\t\to._cursor = t.css( \"cursor\" );\n\t\t}\n\t\tt.css( \"cursor\", o.cursor );\n\t},\n\tstop: function( event, ui, instance ) {\n\t\tvar o = instance.options;\n\t\tif ( o._cursor ) {\n\t\t\t$( \"body\" ).css( \"cursor\", o._cursor );\n\t\t}\n\t}\n} );\n\n$.ui.plugin.add( \"draggable\", \"opacity\", {\n\tstart: function( event, ui, instance ) {\n\t\tvar t = $( ui.helper ),\n\t\t\to = instance.options;\n\t\tif ( t.css( \"opacity\" ) ) {\n\t\t\to._opacity = t.css( \"opacity\" );\n\t\t}\n\t\tt.css( \"opacity\", o.opacity );\n\t},\n\tstop: function( event, ui, instance ) {\n\t\tvar o = instance.options;\n\t\tif ( o._opacity ) {\n\t\t\t$( ui.helper ).css( \"opacity\", o._opacity );\n\t\t}\n\t}\n} );\n\n$.ui.plugin.add( \"draggable\", \"scroll\", {\n\tstart: function( event, ui, i ) {\n\t\tif ( !i.scrollParentNotHidden ) {\n\t\t\ti.scrollParentNotHidden = i.helper.scrollParent( false );\n\t\t}\n\n\t\tif ( i.scrollParentNotHidden[ 0 ] !== i.document[ 0 ] &&\n\t\t\t\ti.scrollParentNotHidden[ 0 ].tagName !== \"HTML\" ) {\n\t\t\ti.overflowOffset = i.scrollParentNotHidden.offset();\n\t\t}\n\t},\n\tdrag: function( event, ui, i  ) {\n\n\t\tvar o = i.options,\n\t\t\tscrolled = false,\n\t\t\tscrollParent = i.scrollParentNotHidden[ 0 ],\n\t\t\tdocument = i.document[ 0 ];\n\n\t\tif ( scrollParent !== document && scrollParent.tagName !== \"HTML\" ) {\n\t\t\tif ( !o.axis || o.axis !== \"x\" ) {\n\t\t\t\tif ( ( i.overflowOffset.top + scrollParent.offsetHeight ) - event.pageY <\n\t\t\t\t\t\to.scrollSensitivity ) {\n\t\t\t\t\tscrollParent.scrollTop = scrolled = scrollParent.scrollTop + o.scrollSpeed;\n\t\t\t\t} else if ( event.pageY - i.overflowOffset.top < o.scrollSensitivity ) {\n\t\t\t\t\tscrollParent.scrollTop = scrolled = scrollParent.scrollTop - o.scrollSpeed;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( !o.axis || o.axis !== \"y\" ) {\n\t\t\t\tif ( ( i.overflowOffset.left + scrollParent.offsetWidth ) - event.pageX <\n\t\t\t\t\t\to.scrollSensitivity ) {\n\t\t\t\t\tscrollParent.scrollLeft = scrolled = scrollParent.scrollLeft + o.scrollSpeed;\n\t\t\t\t} else if ( event.pageX - i.overflowOffset.left < o.scrollSensitivity ) {\n\t\t\t\t\tscrollParent.scrollLeft = scrolled = scrollParent.scrollLeft - o.scrollSpeed;\n\t\t\t\t}\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tif ( !o.axis || o.axis !== \"x\" ) {\n\t\t\t\tif ( event.pageY - $( document ).scrollTop() < o.scrollSensitivity ) {\n\t\t\t\t\tscrolled = $( document ).scrollTop( $( document ).scrollTop() - o.scrollSpeed );\n\t\t\t\t} else if ( $( window ).height() - ( event.pageY - $( document ).scrollTop() ) <\n\t\t\t\t\t\to.scrollSensitivity ) {\n\t\t\t\t\tscrolled = $( document ).scrollTop( $( document ).scrollTop() + o.scrollSpeed );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( !o.axis || o.axis !== \"y\" ) {\n\t\t\t\tif ( event.pageX - $( document ).scrollLeft() < o.scrollSensitivity ) {\n\t\t\t\t\tscrolled = $( document ).scrollLeft(\n\t\t\t\t\t\t$( document ).scrollLeft() - o.scrollSpeed\n\t\t\t\t\t);\n\t\t\t\t} else if ( $( window ).width() - ( event.pageX - $( document ).scrollLeft() ) <\n\t\t\t\t\t\to.scrollSensitivity ) {\n\t\t\t\t\tscrolled = $( document ).scrollLeft(\n\t\t\t\t\t\t$( document ).scrollLeft() + o.scrollSpeed\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\n\t\tif ( scrolled !== false && $.ui.ddmanager && !o.dropBehaviour ) {\n\t\t\t$.ui.ddmanager.prepareOffsets( i, event );\n\t\t}\n\n\t}\n} );\n\n$.ui.plugin.add( \"draggable\", \"snap\", {\n\tstart: function( event, ui, i ) {\n\n\t\tvar o = i.options;\n\n\t\ti.snapElements = [];\n\n\t\t$( o.snap.constructor !== String ? ( o.snap.items || \":data(ui-draggable)\" ) : o.snap )\n\t\t\t.each( function() {\n\t\t\t\tvar $t = $( this ),\n\t\t\t\t\t$o = $t.offset();\n\t\t\t\tif ( this !== i.element[ 0 ] ) {\n\t\t\t\t\ti.snapElements.push( {\n\t\t\t\t\t\titem: this,\n\t\t\t\t\t\twidth: $t.outerWidth(), height: $t.outerHeight(),\n\t\t\t\t\t\ttop: $o.top, left: $o.left\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t} );\n\n\t},\n\tdrag: function( event, ui, inst ) {\n\n\t\tvar ts, bs, ls, rs, l, r, t, b, i, first,\n\t\t\to = inst.options,\n\t\t\td = o.snapTolerance,\n\t\t\tx1 = ui.offset.left, x2 = x1 + inst.helperProportions.width,\n\t\t\ty1 = ui.offset.top, y2 = y1 + inst.helperProportions.height;\n\n\t\tfor ( i = inst.snapElements.length - 1; i >= 0; i-- ) {\n\n\t\t\tl = inst.snapElements[ i ].left - inst.margins.left;\n\t\t\tr = l + inst.snapElements[ i ].width;\n\t\t\tt = inst.snapElements[ i ].top - inst.margins.top;\n\t\t\tb = t + inst.snapElements[ i ].height;\n\n\t\t\tif ( x2 < l - d || x1 > r + d || y2 < t - d || y1 > b + d ||\n\t\t\t\t\t!$.contains( inst.snapElements[ i ].item.ownerDocument,\n\t\t\t\t\tinst.snapElements[ i ].item ) ) {\n\t\t\t\tif ( inst.snapElements[ i ].snapping ) {\n\t\t\t\t\t( inst.options.snap.release &&\n\t\t\t\t\t\tinst.options.snap.release.call(\n\t\t\t\t\t\t\tinst.element,\n\t\t\t\t\t\t\tevent,\n\t\t\t\t\t\t\t$.extend( inst._uiHash(), { snapItem: inst.snapElements[ i ].item } )\n\t\t\t\t\t\t) );\n\t\t\t\t}\n\t\t\t\tinst.snapElements[ i ].snapping = false;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif ( o.snapMode !== \"inner\" ) {\n\t\t\t\tts = Math.abs( t - y2 ) <= d;\n\t\t\t\tbs = Math.abs( b - y1 ) <= d;\n\t\t\t\tls = Math.abs( l - x2 ) <= d;\n\t\t\t\trs = Math.abs( r - x1 ) <= d;\n\t\t\t\tif ( ts ) {\n\t\t\t\t\tui.position.top = inst._convertPositionTo( \"relative\", {\n\t\t\t\t\t\ttop: t - inst.helperProportions.height,\n\t\t\t\t\t\tleft: 0\n\t\t\t\t\t} ).top;\n\t\t\t\t}\n\t\t\t\tif ( bs ) {\n\t\t\t\t\tui.position.top = inst._convertPositionTo( \"relative\", {\n\t\t\t\t\t\ttop: b,\n\t\t\t\t\t\tleft: 0\n\t\t\t\t\t} ).top;\n\t\t\t\t}\n\t\t\t\tif ( ls ) {\n\t\t\t\t\tui.position.left = inst._convertPositionTo( \"relative\", {\n\t\t\t\t\t\ttop: 0,\n\t\t\t\t\t\tleft: l - inst.helperProportions.width\n\t\t\t\t\t} ).left;\n\t\t\t\t}\n\t\t\t\tif ( rs ) {\n\t\t\t\t\tui.position.left = inst._convertPositionTo( \"relative\", {\n\t\t\t\t\t\ttop: 0,\n\t\t\t\t\t\tleft: r\n\t\t\t\t\t} ).left;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfirst = ( ts || bs || ls || rs );\n\n\t\t\tif ( o.snapMode !== \"outer\" ) {\n\t\t\t\tts = Math.abs( t - y1 ) <= d;\n\t\t\t\tbs = Math.abs( b - y2 ) <= d;\n\t\t\t\tls = Math.abs( l - x1 ) <= d;\n\t\t\t\trs = Math.abs( r - x2 ) <= d;\n\t\t\t\tif ( ts ) {\n\t\t\t\t\tui.position.top = inst._convertPositionTo( \"relative\", {\n\t\t\t\t\t\ttop: t,\n\t\t\t\t\t\tleft: 0\n\t\t\t\t\t} ).top;\n\t\t\t\t}\n\t\t\t\tif ( bs ) {\n\t\t\t\t\tui.position.top = inst._convertPositionTo( \"relative\", {\n\t\t\t\t\t\ttop: b - inst.helperProportions.height,\n\t\t\t\t\t\tleft: 0\n\t\t\t\t\t} ).top;\n\t\t\t\t}\n\t\t\t\tif ( ls ) {\n\t\t\t\t\tui.position.left = inst._convertPositionTo( \"relative\", {\n\t\t\t\t\t\ttop: 0,\n\t\t\t\t\t\tleft: l\n\t\t\t\t\t} ).left;\n\t\t\t\t}\n\t\t\t\tif ( rs ) {\n\t\t\t\t\tui.position.left = inst._convertPositionTo( \"relative\", {\n\t\t\t\t\t\ttop: 0,\n\t\t\t\t\t\tleft: r - inst.helperProportions.width\n\t\t\t\t\t} ).left;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( !inst.snapElements[ i ].snapping && ( ts || bs || ls || rs || first ) ) {\n\t\t\t\t( inst.options.snap.snap &&\n\t\t\t\t\tinst.options.snap.snap.call(\n\t\t\t\t\t\tinst.element,\n\t\t\t\t\t\tevent,\n\t\t\t\t\t\t$.extend( inst._uiHash(), {\n\t\t\t\t\t\t\tsnapItem: inst.snapElements[ i ].item\n\t\t\t\t\t\t} ) ) );\n\t\t\t}\n\t\t\tinst.snapElements[ i ].snapping = ( ts || bs || ls || rs || first );\n\n\t\t}\n\n\t}\n} );\n\n$.ui.plugin.add( \"draggable\", \"stack\", {\n\tstart: function( event, ui, instance ) {\n\t\tvar min,\n\t\t\to = instance.options,\n\t\t\tgroup = $.makeArray( $( o.stack ) ).sort( function( a, b ) {\n\t\t\t\treturn ( parseInt( $( a ).css( \"zIndex\" ), 10 ) || 0 ) -\n\t\t\t\t\t( parseInt( $( b ).css( \"zIndex\" ), 10 ) || 0 );\n\t\t\t} );\n\n\t\tif ( !group.length ) { return; }\n\n\t\tmin = parseInt( $( group[ 0 ] ).css( \"zIndex\" ), 10 ) || 0;\n\t\t$( group ).each( function( i ) {\n\t\t\t$( this ).css( \"zIndex\", min + i );\n\t\t} );\n\t\tthis.css( \"zIndex\", ( min + group.length ) );\n\t}\n} );\n\n$.ui.plugin.add( \"draggable\", \"zIndex\", {\n\tstart: function( event, ui, instance ) {\n\t\tvar t = $( ui.helper ),\n\t\t\to = instance.options;\n\n\t\tif ( t.css( \"zIndex\" ) ) {\n\t\t\to._zIndex = t.css( \"zIndex\" );\n\t\t}\n\t\tt.css( \"zIndex\", o.zIndex );\n\t},\n\tstop: function( event, ui, instance ) {\n\t\tvar o = instance.options;\n\n\t\tif ( o._zIndex ) {\n\t\t\t$( ui.helper ).css( \"zIndex\", o._zIndex );\n\t\t}\n\t}\n} );\n\nvar widgetsDraggable = $.ui.draggable;\n\n\n/*!\n * jQuery UI Droppable 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Droppable\n//>>group: Interactions\n//>>description: Enables drop targets for draggable elements.\n//>>docs: http://api.jqueryui.com/droppable/\n//>>demos: http://jqueryui.com/droppable/\n\n\n\n$.widget( \"ui.droppable\", {\n\tversion: \"1.12.1\",\n\twidgetEventPrefix: \"drop\",\n\toptions: {\n\t\taccept: \"*\",\n\t\taddClasses: true,\n\t\tgreedy: false,\n\t\tscope: \"default\",\n\t\ttolerance: \"intersect\",\n\n\t\t// Callbacks\n\t\tactivate: null,\n\t\tdeactivate: null,\n\t\tdrop: null,\n\t\tout: null,\n\t\tover: null\n\t},\n\t_create: function() {\n\n\t\tvar proportions,\n\t\t\to = this.options,\n\t\t\taccept = o.accept;\n\n\t\tthis.isover = false;\n\t\tthis.isout = true;\n\n\t\tthis.accept = $.isFunction( accept ) ? accept : function( d ) {\n\t\t\treturn d.is( accept );\n\t\t};\n\n\t\tthis.proportions = function( /* valueToWrite */ ) {\n\t\t\tif ( arguments.length ) {\n\n\t\t\t\t// Store the droppable's proportions\n\t\t\t\tproportions = arguments[ 0 ];\n\t\t\t} else {\n\n\t\t\t\t// Retrieve or derive the droppable's proportions\n\t\t\t\treturn proportions ?\n\t\t\t\t\tproportions :\n\t\t\t\t\tproportions = {\n\t\t\t\t\t\twidth: this.element[ 0 ].offsetWidth,\n\t\t\t\t\t\theight: this.element[ 0 ].offsetHeight\n\t\t\t\t\t};\n\t\t\t}\n\t\t};\n\n\t\tthis._addToManager( o.scope );\n\n\t\to.addClasses && this._addClass( \"ui-droppable\" );\n\n\t},\n\n\t_addToManager: function( scope ) {\n\n\t\t// Add the reference and positions to the manager\n\t\t$.ui.ddmanager.droppables[ scope ] = $.ui.ddmanager.droppables[ scope ] || [];\n\t\t$.ui.ddmanager.droppables[ scope ].push( this );\n\t},\n\n\t_splice: function( drop ) {\n\t\tvar i = 0;\n\t\tfor ( ; i < drop.length; i++ ) {\n\t\t\tif ( drop[ i ] === this ) {\n\t\t\t\tdrop.splice( i, 1 );\n\t\t\t}\n\t\t}\n\t},\n\n\t_destroy: function() {\n\t\tvar drop = $.ui.ddmanager.droppables[ this.options.scope ];\n\n\t\tthis._splice( drop );\n\t},\n\n\t_setOption: function( key, value ) {\n\n\t\tif ( key === \"accept\" ) {\n\t\t\tthis.accept = $.isFunction( value ) ? value : function( d ) {\n\t\t\t\treturn d.is( value );\n\t\t\t};\n\t\t} else if ( key === \"scope\" ) {\n\t\t\tvar drop = $.ui.ddmanager.droppables[ this.options.scope ];\n\n\t\t\tthis._splice( drop );\n\t\t\tthis._addToManager( value );\n\t\t}\n\n\t\tthis._super( key, value );\n\t},\n\n\t_activate: function( event ) {\n\t\tvar draggable = $.ui.ddmanager.current;\n\n\t\tthis._addActiveClass();\n\t\tif ( draggable ) {\n\t\t\tthis._trigger( \"activate\", event, this.ui( draggable ) );\n\t\t}\n\t},\n\n\t_deactivate: function( event ) {\n\t\tvar draggable = $.ui.ddmanager.current;\n\n\t\tthis._removeActiveClass();\n\t\tif ( draggable ) {\n\t\t\tthis._trigger( \"deactivate\", event, this.ui( draggable ) );\n\t\t}\n\t},\n\n\t_over: function( event ) {\n\n\t\tvar draggable = $.ui.ddmanager.current;\n\n\t\t// Bail if draggable and droppable are same element\n\t\tif ( !draggable || ( draggable.currentItem ||\n\t\t\t\tdraggable.element )[ 0 ] === this.element[ 0 ] ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( this.accept.call( this.element[ 0 ], ( draggable.currentItem ||\n\t\t\t\tdraggable.element ) ) ) {\n\t\t\tthis._addHoverClass();\n\t\t\tthis._trigger( \"over\", event, this.ui( draggable ) );\n\t\t}\n\n\t},\n\n\t_out: function( event ) {\n\n\t\tvar draggable = $.ui.ddmanager.current;\n\n\t\t// Bail if draggable and droppable are same element\n\t\tif ( !draggable || ( draggable.currentItem ||\n\t\t\t\tdraggable.element )[ 0 ] === this.element[ 0 ] ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( this.accept.call( this.element[ 0 ], ( draggable.currentItem ||\n\t\t\t\tdraggable.element ) ) ) {\n\t\t\tthis._removeHoverClass();\n\t\t\tthis._trigger( \"out\", event, this.ui( draggable ) );\n\t\t}\n\n\t},\n\n\t_drop: function( event, custom ) {\n\n\t\tvar draggable = custom || $.ui.ddmanager.current,\n\t\t\tchildrenIntersection = false;\n\n\t\t// Bail if draggable and droppable are same element\n\t\tif ( !draggable || ( draggable.currentItem ||\n\t\t\t\tdraggable.element )[ 0 ] === this.element[ 0 ] ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tthis.element\n\t\t\t.find( \":data(ui-droppable)\" )\n\t\t\t.not( \".ui-draggable-dragging\" )\n\t\t\t.each( function() {\n\t\t\t\tvar inst = $( this ).droppable( \"instance\" );\n\t\t\t\tif (\n\t\t\t\t\tinst.options.greedy &&\n\t\t\t\t\t!inst.options.disabled &&\n\t\t\t\t\tinst.options.scope === draggable.options.scope &&\n\t\t\t\t\tinst.accept.call(\n\t\t\t\t\t\tinst.element[ 0 ], ( draggable.currentItem || draggable.element )\n\t\t\t\t\t) &&\n\t\t\t\t\tintersect(\n\t\t\t\t\t\tdraggable,\n\t\t\t\t\t\t$.extend( inst, { offset: inst.element.offset() } ),\n\t\t\t\t\t\tinst.options.tolerance, event\n\t\t\t\t\t)\n\t\t\t\t) {\n\t\t\t\t\tchildrenIntersection = true;\n\t\t\t\t\treturn false; }\n\t\t\t} );\n\t\tif ( childrenIntersection ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif ( this.accept.call( this.element[ 0 ],\n\t\t\t\t( draggable.currentItem || draggable.element ) ) ) {\n\t\t\tthis._removeActiveClass();\n\t\t\tthis._removeHoverClass();\n\n\t\t\tthis._trigger( \"drop\", event, this.ui( draggable ) );\n\t\t\treturn this.element;\n\t\t}\n\n\t\treturn false;\n\n\t},\n\n\tui: function( c ) {\n\t\treturn {\n\t\t\tdraggable: ( c.currentItem || c.element ),\n\t\t\thelper: c.helper,\n\t\t\tposition: c.position,\n\t\t\toffset: c.positionAbs\n\t\t};\n\t},\n\n\t// Extension points just to make backcompat sane and avoid duplicating logic\n\t// TODO: Remove in 1.13 along with call to it below\n\t_addHoverClass: function() {\n\t\tthis._addClass( \"ui-droppable-hover\" );\n\t},\n\n\t_removeHoverClass: function() {\n\t\tthis._removeClass( \"ui-droppable-hover\" );\n\t},\n\n\t_addActiveClass: function() {\n\t\tthis._addClass( \"ui-droppable-active\" );\n\t},\n\n\t_removeActiveClass: function() {\n\t\tthis._removeClass( \"ui-droppable-active\" );\n\t}\n} );\n\nvar intersect = $.ui.intersect = ( function() {\n\tfunction isOverAxis( x, reference, size ) {\n\t\treturn ( x >= reference ) && ( x < ( reference + size ) );\n\t}\n\n\treturn function( draggable, droppable, toleranceMode, event ) {\n\n\t\tif ( !droppable.offset ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tvar x1 = ( draggable.positionAbs ||\n\t\t\t\tdraggable.position.absolute ).left + draggable.margins.left,\n\t\t\ty1 = ( draggable.positionAbs ||\n\t\t\t\tdraggable.position.absolute ).top + draggable.margins.top,\n\t\t\tx2 = x1 + draggable.helperProportions.width,\n\t\t\ty2 = y1 + draggable.helperProportions.height,\n\t\t\tl = droppable.offset.left,\n\t\t\tt = droppable.offset.top,\n\t\t\tr = l + droppable.proportions().width,\n\t\t\tb = t + droppable.proportions().height;\n\n\t\tswitch ( toleranceMode ) {\n\t\tcase \"fit\":\n\t\t\treturn ( l <= x1 && x2 <= r && t <= y1 && y2 <= b );\n\t\tcase \"intersect\":\n\t\t\treturn ( l < x1 + ( draggable.helperProportions.width / 2 ) && // Right Half\n\t\t\t\tx2 - ( draggable.helperProportions.width / 2 ) < r && // Left Half\n\t\t\t\tt < y1 + ( draggable.helperProportions.height / 2 ) && // Bottom Half\n\t\t\t\ty2 - ( draggable.helperProportions.height / 2 ) < b ); // Top Half\n\t\tcase \"pointer\":\n\t\t\treturn isOverAxis( event.pageY, t, droppable.proportions().height ) &&\n\t\t\t\tisOverAxis( event.pageX, l, droppable.proportions().width );\n\t\tcase \"touch\":\n\t\t\treturn (\n\t\t\t\t( y1 >= t && y1 <= b ) || // Top edge touching\n\t\t\t\t( y2 >= t && y2 <= b ) || // Bottom edge touching\n\t\t\t\t( y1 < t && y2 > b ) // Surrounded vertically\n\t\t\t) && (\n\t\t\t\t( x1 >= l && x1 <= r ) || // Left edge touching\n\t\t\t\t( x2 >= l && x2 <= r ) || // Right edge touching\n\t\t\t\t( x1 < l && x2 > r ) // Surrounded horizontally\n\t\t\t);\n\t\tdefault:\n\t\t\treturn false;\n\t\t}\n\t};\n} )();\n\n/*\n\tThis manager tracks offsets of draggables and droppables\n*/\n$.ui.ddmanager = {\n\tcurrent: null,\n\tdroppables: { \"default\": [] },\n\tprepareOffsets: function( t, event ) {\n\n\t\tvar i, j,\n\t\t\tm = $.ui.ddmanager.droppables[ t.options.scope ] || [],\n\t\t\ttype = event ? event.type : null, // workaround for #2317\n\t\t\tlist = ( t.currentItem || t.element ).find( \":data(ui-droppable)\" ).addBack();\n\n\t\tdroppablesLoop: for ( i = 0; i < m.length; i++ ) {\n\n\t\t\t// No disabled and non-accepted\n\t\t\tif ( m[ i ].options.disabled || ( t && !m[ i ].accept.call( m[ i ].element[ 0 ],\n\t\t\t\t\t( t.currentItem || t.element ) ) ) ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// Filter out elements in the current dragged item\n\t\t\tfor ( j = 0; j < list.length; j++ ) {\n\t\t\t\tif ( list[ j ] === m[ i ].element[ 0 ] ) {\n\t\t\t\t\tm[ i ].proportions().height = 0;\n\t\t\t\t\tcontinue droppablesLoop;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tm[ i ].visible = m[ i ].element.css( \"display\" ) !== \"none\";\n\t\t\tif ( !m[ i ].visible ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// Activate the droppable if used directly from draggables\n\t\t\tif ( type === \"mousedown\" ) {\n\t\t\t\tm[ i ]._activate.call( m[ i ], event );\n\t\t\t}\n\n\t\t\tm[ i ].offset = m[ i ].element.offset();\n\t\t\tm[ i ].proportions( {\n\t\t\t\twidth: m[ i ].element[ 0 ].offsetWidth,\n\t\t\t\theight: m[ i ].element[ 0 ].offsetHeight\n\t\t\t} );\n\n\t\t}\n\n\t},\n\tdrop: function( draggable, event ) {\n\n\t\tvar dropped = false;\n\n\t\t// Create a copy of the droppables in case the list changes during the drop (#9116)\n\t\t$.each( ( $.ui.ddmanager.droppables[ draggable.options.scope ] || [] ).slice(), function() {\n\n\t\t\tif ( !this.options ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif ( !this.options.disabled && this.visible &&\n\t\t\t\t\tintersect( draggable, this, this.options.tolerance, event ) ) {\n\t\t\t\tdropped = this._drop.call( this, event ) || dropped;\n\t\t\t}\n\n\t\t\tif ( !this.options.disabled && this.visible && this.accept.call( this.element[ 0 ],\n\t\t\t\t\t( draggable.currentItem || draggable.element ) ) ) {\n\t\t\t\tthis.isout = true;\n\t\t\t\tthis.isover = false;\n\t\t\t\tthis._deactivate.call( this, event );\n\t\t\t}\n\n\t\t} );\n\t\treturn dropped;\n\n\t},\n\tdragStart: function( draggable, event ) {\n\n\t\t// Listen for scrolling so that if the dragging causes scrolling the position of the\n\t\t// droppables can be recalculated (see #5003)\n\t\tdraggable.element.parentsUntil( \"body\" ).on( \"scroll.droppable\", function() {\n\t\t\tif ( !draggable.options.refreshPositions ) {\n\t\t\t\t$.ui.ddmanager.prepareOffsets( draggable, event );\n\t\t\t}\n\t\t} );\n\t},\n\tdrag: function( draggable, event ) {\n\n\t\t// If you have a highly dynamic page, you might try this option. It renders positions\n\t\t// every time you move the mouse.\n\t\tif ( draggable.options.refreshPositions ) {\n\t\t\t$.ui.ddmanager.prepareOffsets( draggable, event );\n\t\t}\n\n\t\t// Run through all droppables and check their positions based on specific tolerance options\n\t\t$.each( $.ui.ddmanager.droppables[ draggable.options.scope ] || [], function() {\n\n\t\t\tif ( this.options.disabled || this.greedyChild || !this.visible ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar parentInstance, scope, parent,\n\t\t\t\tintersects = intersect( draggable, this, this.options.tolerance, event ),\n\t\t\t\tc = !intersects && this.isover ?\n\t\t\t\t\t\"isout\" :\n\t\t\t\t\t( intersects && !this.isover ? \"isover\" : null );\n\t\t\tif ( !c ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( this.options.greedy ) {\n\n\t\t\t\t// find droppable parents with same scope\n\t\t\t\tscope = this.options.scope;\n\t\t\t\tparent = this.element.parents( \":data(ui-droppable)\" ).filter( function() {\n\t\t\t\t\treturn $( this ).droppable( \"instance\" ).options.scope === scope;\n\t\t\t\t} );\n\n\t\t\t\tif ( parent.length ) {\n\t\t\t\t\tparentInstance = $( parent[ 0 ] ).droppable( \"instance\" );\n\t\t\t\t\tparentInstance.greedyChild = ( c === \"isover\" );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// We just moved into a greedy child\n\t\t\tif ( parentInstance && c === \"isover\" ) {\n\t\t\t\tparentInstance.isover = false;\n\t\t\t\tparentInstance.isout = true;\n\t\t\t\tparentInstance._out.call( parentInstance, event );\n\t\t\t}\n\n\t\t\tthis[ c ] = true;\n\t\t\tthis[ c === \"isout\" ? \"isover\" : \"isout\" ] = false;\n\t\t\tthis[ c === \"isover\" ? \"_over\" : \"_out\" ].call( this, event );\n\n\t\t\t// We just moved out of a greedy child\n\t\t\tif ( parentInstance && c === \"isout\" ) {\n\t\t\t\tparentInstance.isout = false;\n\t\t\t\tparentInstance.isover = true;\n\t\t\t\tparentInstance._over.call( parentInstance, event );\n\t\t\t}\n\t\t} );\n\n\t},\n\tdragStop: function( draggable, event ) {\n\t\tdraggable.element.parentsUntil( \"body\" ).off( \"scroll.droppable\" );\n\n\t\t// Call prepareOffsets one final time since IE does not fire return scroll events when\n\t\t// overflow was caused by drag (see #5003)\n\t\tif ( !draggable.options.refreshPositions ) {\n\t\t\t$.ui.ddmanager.prepareOffsets( draggable, event );\n\t\t}\n\t}\n};\n\n// DEPRECATED\n// TODO: switch return back to widget declaration at top of file when this is removed\nif ( $.uiBackCompat !== false ) {\n\n\t// Backcompat for activeClass and hoverClass options\n\t$.widget( \"ui.droppable\", $.ui.droppable, {\n\t\toptions: {\n\t\t\thoverClass: false,\n\t\t\tactiveClass: false\n\t\t},\n\t\t_addActiveClass: function() {\n\t\t\tthis._super();\n\t\t\tif ( this.options.activeClass ) {\n\t\t\t\tthis.element.addClass( this.options.activeClass );\n\t\t\t}\n\t\t},\n\t\t_removeActiveClass: function() {\n\t\t\tthis._super();\n\t\t\tif ( this.options.activeClass ) {\n\t\t\t\tthis.element.removeClass( this.options.activeClass );\n\t\t\t}\n\t\t},\n\t\t_addHoverClass: function() {\n\t\t\tthis._super();\n\t\t\tif ( this.options.hoverClass ) {\n\t\t\t\tthis.element.addClass( this.options.hoverClass );\n\t\t\t}\n\t\t},\n\t\t_removeHoverClass: function() {\n\t\t\tthis._super();\n\t\t\tif ( this.options.hoverClass ) {\n\t\t\t\tthis.element.removeClass( this.options.hoverClass );\n\t\t\t}\n\t\t}\n\t} );\n}\n\nvar widgetsDroppable = $.ui.droppable;\n\n\n/*!\n * jQuery UI Resizable 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Resizable\n//>>group: Interactions\n//>>description: Enables resize functionality for any element.\n//>>docs: http://api.jqueryui.com/resizable/\n//>>demos: http://jqueryui.com/resizable/\n//>>css.structure: ../../themes/base/core.css\n//>>css.structure: ../../themes/base/resizable.css\n//>>css.theme: ../../themes/base/theme.css\n\n\n\n$.widget( \"ui.resizable\", $.ui.mouse, {\n\tversion: \"1.12.1\",\n\twidgetEventPrefix: \"resize\",\n\toptions: {\n\t\talsoResize: false,\n\t\tanimate: false,\n\t\tanimateDuration: \"slow\",\n\t\tanimateEasing: \"swing\",\n\t\taspectRatio: false,\n\t\tautoHide: false,\n\t\tclasses: {\n\t\t\t\"ui-resizable-se\": \"ui-icon ui-icon-gripsmall-diagonal-se\"\n\t\t},\n\t\tcontainment: false,\n\t\tghost: false,\n\t\tgrid: false,\n\t\thandles: \"e,s,se\",\n\t\thelper: false,\n\t\tmaxHeight: null,\n\t\tmaxWidth: null,\n\t\tminHeight: 10,\n\t\tminWidth: 10,\n\n\t\t// See #7960\n\t\tzIndex: 90,\n\n\t\t// Callbacks\n\t\tresize: null,\n\t\tstart: null,\n\t\tstop: null\n\t},\n\n\t_num: function( value ) {\n\t\treturn parseFloat( value ) || 0;\n\t},\n\n\t_isNumber: function( value ) {\n\t\treturn !isNaN( parseFloat( value ) );\n\t},\n\n\t_hasScroll: function( el, a ) {\n\n\t\tif ( $( el ).css( \"overflow\" ) === \"hidden\" ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tvar scroll = ( a && a === \"left\" ) ? \"scrollLeft\" : \"scrollTop\",\n\t\t\thas = false;\n\n\t\tif ( el[ scroll ] > 0 ) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// TODO: determine which cases actually cause this to happen\n\t\t// if the element doesn't have the scroll set, see if it's possible to\n\t\t// set the scroll\n\t\tel[ scroll ] = 1;\n\t\thas = ( el[ scroll ] > 0 );\n\t\tel[ scroll ] = 0;\n\t\treturn has;\n\t},\n\n\t_create: function() {\n\n\t\tvar margins,\n\t\t\to = this.options,\n\t\t\tthat = this;\n\t\tthis._addClass( \"ui-resizable\" );\n\n\t\t$.extend( this, {\n\t\t\t_aspectRatio: !!( o.aspectRatio ),\n\t\t\taspectRatio: o.aspectRatio,\n\t\t\toriginalElement: this.element,\n\t\t\t_proportionallyResizeElements: [],\n\t\t\t_helper: o.helper || o.ghost || o.animate ? o.helper || \"ui-resizable-helper\" : null\n\t\t} );\n\n\t\t// Wrap the element if it cannot hold child nodes\n\t\tif ( this.element[ 0 ].nodeName.match( /^(canvas|textarea|input|select|button|img)$/i ) ) {\n\n\t\t\tthis.element.wrap(\n\t\t\t\t$( \"<div class='ui-wrapper' style='overflow: hidden;'></div>\" ).css( {\n\t\t\t\t\tposition: this.element.css( \"position\" ),\n\t\t\t\t\twidth: this.element.outerWidth(),\n\t\t\t\t\theight: this.element.outerHeight(),\n\t\t\t\t\ttop: this.element.css( \"top\" ),\n\t\t\t\t\tleft: this.element.css( \"left\" )\n\t\t\t\t} )\n\t\t\t);\n\n\t\t\tthis.element = this.element.parent().data(\n\t\t\t\t\"ui-resizable\", this.element.resizable( \"instance\" )\n\t\t\t);\n\n\t\t\tthis.elementIsWrapper = true;\n\n\t\t\tmargins = {\n\t\t\t\tmarginTop: this.originalElement.css( \"marginTop\" ),\n\t\t\t\tmarginRight: this.originalElement.css( \"marginRight\" ),\n\t\t\t\tmarginBottom: this.originalElement.css( \"marginBottom\" ),\n\t\t\t\tmarginLeft: this.originalElement.css( \"marginLeft\" )\n\t\t\t};\n\n\t\t\tthis.element.css( margins );\n\t\t\tthis.originalElement.css( \"margin\", 0 );\n\n\t\t\t// support: Safari\n\t\t\t// Prevent Safari textarea resize\n\t\t\tthis.originalResizeStyle = this.originalElement.css( \"resize\" );\n\t\t\tthis.originalElement.css( \"resize\", \"none\" );\n\n\t\t\tthis._proportionallyResizeElements.push( this.originalElement.css( {\n\t\t\t\tposition: \"static\",\n\t\t\t\tzoom: 1,\n\t\t\t\tdisplay: \"block\"\n\t\t\t} ) );\n\n\t\t\t// Support: IE9\n\t\t\t// avoid IE jump (hard set the margin)\n\t\t\tthis.originalElement.css( margins );\n\n\t\t\tthis._proportionallyResize();\n\t\t}\n\n\t\tthis._setupHandles();\n\n\t\tif ( o.autoHide ) {\n\t\t\t$( this.element )\n\t\t\t\t.on( \"mouseenter\", function() {\n\t\t\t\t\tif ( o.disabled ) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tthat._removeClass( \"ui-resizable-autohide\" );\n\t\t\t\t\tthat._handles.show();\n\t\t\t\t} )\n\t\t\t\t.on( \"mouseleave\", function() {\n\t\t\t\t\tif ( o.disabled ) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tif ( !that.resizing ) {\n\t\t\t\t\t\tthat._addClass( \"ui-resizable-autohide\" );\n\t\t\t\t\t\tthat._handles.hide();\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t}\n\n\t\tthis._mouseInit();\n\t},\n\n\t_destroy: function() {\n\n\t\tthis._mouseDestroy();\n\n\t\tvar wrapper,\n\t\t\t_destroy = function( exp ) {\n\t\t\t\t$( exp )\n\t\t\t\t\t.removeData( \"resizable\" )\n\t\t\t\t\t.removeData( \"ui-resizable\" )\n\t\t\t\t\t.off( \".resizable\" )\n\t\t\t\t\t.find( \".ui-resizable-handle\" )\n\t\t\t\t\t\t.remove();\n\t\t\t};\n\n\t\t// TODO: Unwrap at same DOM position\n\t\tif ( this.elementIsWrapper ) {\n\t\t\t_destroy( this.element );\n\t\t\twrapper = this.element;\n\t\t\tthis.originalElement.css( {\n\t\t\t\tposition: wrapper.css( \"position\" ),\n\t\t\t\twidth: wrapper.outerWidth(),\n\t\t\t\theight: wrapper.outerHeight(),\n\t\t\t\ttop: wrapper.css( \"top\" ),\n\t\t\t\tleft: wrapper.css( \"left\" )\n\t\t\t} ).insertAfter( wrapper );\n\t\t\twrapper.remove();\n\t\t}\n\n\t\tthis.originalElement.css( \"resize\", this.originalResizeStyle );\n\t\t_destroy( this.originalElement );\n\n\t\treturn this;\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tthis._super( key, value );\n\n\t\tswitch ( key ) {\n\t\tcase \"handles\":\n\t\t\tthis._removeHandles();\n\t\t\tthis._setupHandles();\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tbreak;\n\t\t}\n\t},\n\n\t_setupHandles: function() {\n\t\tvar o = this.options, handle, i, n, hname, axis, that = this;\n\t\tthis.handles = o.handles ||\n\t\t\t( !$( \".ui-resizable-handle\", this.element ).length ?\n\t\t\t\t\"e,s,se\" : {\n\t\t\t\t\tn: \".ui-resizable-n\",\n\t\t\t\t\te: \".ui-resizable-e\",\n\t\t\t\t\ts: \".ui-resizable-s\",\n\t\t\t\t\tw: \".ui-resizable-w\",\n\t\t\t\t\tse: \".ui-resizable-se\",\n\t\t\t\t\tsw: \".ui-resizable-sw\",\n\t\t\t\t\tne: \".ui-resizable-ne\",\n\t\t\t\t\tnw: \".ui-resizable-nw\"\n\t\t\t\t} );\n\n\t\tthis._handles = $();\n\t\tif ( this.handles.constructor === String ) {\n\n\t\t\tif ( this.handles === \"all\" ) {\n\t\t\t\tthis.handles = \"n,e,s,w,se,sw,ne,nw\";\n\t\t\t}\n\n\t\t\tn = this.handles.split( \",\" );\n\t\t\tthis.handles = {};\n\n\t\t\tfor ( i = 0; i < n.length; i++ ) {\n\n\t\t\t\thandle = $.trim( n[ i ] );\n\t\t\t\thname = \"ui-resizable-\" + handle;\n\t\t\t\taxis = $( \"<div>\" );\n\t\t\t\tthis._addClass( axis, \"ui-resizable-handle \" + hname );\n\n\t\t\t\taxis.css( { zIndex: o.zIndex } );\n\n\t\t\t\tthis.handles[ handle ] = \".ui-resizable-\" + handle;\n\t\t\t\tthis.element.append( axis );\n\t\t\t}\n\n\t\t}\n\n\t\tthis._renderAxis = function( target ) {\n\n\t\t\tvar i, axis, padPos, padWrapper;\n\n\t\t\ttarget = target || this.element;\n\n\t\t\tfor ( i in this.handles ) {\n\n\t\t\t\tif ( this.handles[ i ].constructor === String ) {\n\t\t\t\t\tthis.handles[ i ] = this.element.children( this.handles[ i ] ).first().show();\n\t\t\t\t} else if ( this.handles[ i ].jquery || this.handles[ i ].nodeType ) {\n\t\t\t\t\tthis.handles[ i ] = $( this.handles[ i ] );\n\t\t\t\t\tthis._on( this.handles[ i ], { \"mousedown\": that._mouseDown } );\n\t\t\t\t}\n\n\t\t\t\tif ( this.elementIsWrapper &&\n\t\t\t\t\t\tthis.originalElement[ 0 ]\n\t\t\t\t\t\t\t.nodeName\n\t\t\t\t\t\t\t.match( /^(textarea|input|select|button)$/i ) ) {\n\t\t\t\t\taxis = $( this.handles[ i ], this.element );\n\n\t\t\t\t\tpadWrapper = /sw|ne|nw|se|n|s/.test( i ) ?\n\t\t\t\t\t\taxis.outerHeight() :\n\t\t\t\t\t\taxis.outerWidth();\n\n\t\t\t\t\tpadPos = [ \"padding\",\n\t\t\t\t\t\t/ne|nw|n/.test( i ) ? \"Top\" :\n\t\t\t\t\t\t/se|sw|s/.test( i ) ? \"Bottom\" :\n\t\t\t\t\t\t/^e$/.test( i ) ? \"Right\" : \"Left\" ].join( \"\" );\n\n\t\t\t\t\ttarget.css( padPos, padWrapper );\n\n\t\t\t\t\tthis._proportionallyResize();\n\t\t\t\t}\n\n\t\t\t\tthis._handles = this._handles.add( this.handles[ i ] );\n\t\t\t}\n\t\t};\n\n\t\t// TODO: make renderAxis a prototype function\n\t\tthis._renderAxis( this.element );\n\n\t\tthis._handles = this._handles.add( this.element.find( \".ui-resizable-handle\" ) );\n\t\tthis._handles.disableSelection();\n\n\t\tthis._handles.on( \"mouseover\", function() {\n\t\t\tif ( !that.resizing ) {\n\t\t\t\tif ( this.className ) {\n\t\t\t\t\taxis = this.className.match( /ui-resizable-(se|sw|ne|nw|n|e|s|w)/i );\n\t\t\t\t}\n\t\t\t\tthat.axis = axis && axis[ 1 ] ? axis[ 1 ] : \"se\";\n\t\t\t}\n\t\t} );\n\n\t\tif ( o.autoHide ) {\n\t\t\tthis._handles.hide();\n\t\t\tthis._addClass( \"ui-resizable-autohide\" );\n\t\t}\n\t},\n\n\t_removeHandles: function() {\n\t\tthis._handles.remove();\n\t},\n\n\t_mouseCapture: function( event ) {\n\t\tvar i, handle,\n\t\t\tcapture = false;\n\n\t\tfor ( i in this.handles ) {\n\t\t\thandle = $( this.handles[ i ] )[ 0 ];\n\t\t\tif ( handle === event.target || $.contains( handle, event.target ) ) {\n\t\t\t\tcapture = true;\n\t\t\t}\n\t\t}\n\n\t\treturn !this.options.disabled && capture;\n\t},\n\n\t_mouseStart: function( event ) {\n\n\t\tvar curleft, curtop, cursor,\n\t\t\to = this.options,\n\t\t\tel = this.element;\n\n\t\tthis.resizing = true;\n\n\t\tthis._renderProxy();\n\n\t\tcurleft = this._num( this.helper.css( \"left\" ) );\n\t\tcurtop = this._num( this.helper.css( \"top\" ) );\n\n\t\tif ( o.containment ) {\n\t\t\tcurleft += $( o.containment ).scrollLeft() || 0;\n\t\t\tcurtop += $( o.containment ).scrollTop() || 0;\n\t\t}\n\n\t\tthis.offset = this.helper.offset();\n\t\tthis.position = { left: curleft, top: curtop };\n\n\t\tthis.size = this._helper ? {\n\t\t\t\twidth: this.helper.width(),\n\t\t\t\theight: this.helper.height()\n\t\t\t} : {\n\t\t\t\twidth: el.width(),\n\t\t\t\theight: el.height()\n\t\t\t};\n\n\t\tthis.originalSize = this._helper ? {\n\t\t\t\twidth: el.outerWidth(),\n\t\t\t\theight: el.outerHeight()\n\t\t\t} : {\n\t\t\t\twidth: el.width(),\n\t\t\t\theight: el.height()\n\t\t\t};\n\n\t\tthis.sizeDiff = {\n\t\t\twidth: el.outerWidth() - el.width(),\n\t\t\theight: el.outerHeight() - el.height()\n\t\t};\n\n\t\tthis.originalPosition = { left: curleft, top: curtop };\n\t\tthis.originalMousePosition = { left: event.pageX, top: event.pageY };\n\n\t\tthis.aspectRatio = ( typeof o.aspectRatio === \"number\" ) ?\n\t\t\to.aspectRatio :\n\t\t\t( ( this.originalSize.width / this.originalSize.height ) || 1 );\n\n\t\tcursor = $( \".ui-resizable-\" + this.axis ).css( \"cursor\" );\n\t\t$( \"body\" ).css( \"cursor\", cursor === \"auto\" ? this.axis + \"-resize\" : cursor );\n\n\t\tthis._addClass( \"ui-resizable-resizing\" );\n\t\tthis._propagate( \"start\", event );\n\t\treturn true;\n\t},\n\n\t_mouseDrag: function( event ) {\n\n\t\tvar data, props,\n\t\t\tsmp = this.originalMousePosition,\n\t\t\ta = this.axis,\n\t\t\tdx = ( event.pageX - smp.left ) || 0,\n\t\t\tdy = ( event.pageY - smp.top ) || 0,\n\t\t\ttrigger = this._change[ a ];\n\n\t\tthis._updatePrevProperties();\n\n\t\tif ( !trigger ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tdata = trigger.apply( this, [ event, dx, dy ] );\n\n\t\tthis._updateVirtualBoundaries( event.shiftKey );\n\t\tif ( this._aspectRatio || event.shiftKey ) {\n\t\t\tdata = this._updateRatio( data, event );\n\t\t}\n\n\t\tdata = this._respectSize( data, event );\n\n\t\tthis._updateCache( data );\n\n\t\tthis._propagate( \"resize\", event );\n\n\t\tprops = this._applyChanges();\n\n\t\tif ( !this._helper && this._proportionallyResizeElements.length ) {\n\t\t\tthis._proportionallyResize();\n\t\t}\n\n\t\tif ( !$.isEmptyObject( props ) ) {\n\t\t\tthis._updatePrevProperties();\n\t\t\tthis._trigger( \"resize\", event, this.ui() );\n\t\t\tthis._applyChanges();\n\t\t}\n\n\t\treturn false;\n\t},\n\n\t_mouseStop: function( event ) {\n\n\t\tthis.resizing = false;\n\t\tvar pr, ista, soffseth, soffsetw, s, left, top,\n\t\t\to = this.options, that = this;\n\n\t\tif ( this._helper ) {\n\n\t\t\tpr = this._proportionallyResizeElements;\n\t\t\tista = pr.length && ( /textarea/i ).test( pr[ 0 ].nodeName );\n\t\t\tsoffseth = ista && this._hasScroll( pr[ 0 ], \"left\" ) ? 0 : that.sizeDiff.height;\n\t\t\tsoffsetw = ista ? 0 : that.sizeDiff.width;\n\n\t\t\ts = {\n\t\t\t\twidth: ( that.helper.width()  - soffsetw ),\n\t\t\t\theight: ( that.helper.height() - soffseth )\n\t\t\t};\n\t\t\tleft = ( parseFloat( that.element.css( \"left\" ) ) +\n\t\t\t\t( that.position.left - that.originalPosition.left ) ) || null;\n\t\t\ttop = ( parseFloat( that.element.css( \"top\" ) ) +\n\t\t\t\t( that.position.top - that.originalPosition.top ) ) || null;\n\n\t\t\tif ( !o.animate ) {\n\t\t\t\tthis.element.css( $.extend( s, { top: top, left: left } ) );\n\t\t\t}\n\n\t\t\tthat.helper.height( that.size.height );\n\t\t\tthat.helper.width( that.size.width );\n\n\t\t\tif ( this._helper && !o.animate ) {\n\t\t\t\tthis._proportionallyResize();\n\t\t\t}\n\t\t}\n\n\t\t$( \"body\" ).css( \"cursor\", \"auto\" );\n\n\t\tthis._removeClass( \"ui-resizable-resizing\" );\n\n\t\tthis._propagate( \"stop\", event );\n\n\t\tif ( this._helper ) {\n\t\t\tthis.helper.remove();\n\t\t}\n\n\t\treturn false;\n\n\t},\n\n\t_updatePrevProperties: function() {\n\t\tthis.prevPosition = {\n\t\t\ttop: this.position.top,\n\t\t\tleft: this.position.left\n\t\t};\n\t\tthis.prevSize = {\n\t\t\twidth: this.size.width,\n\t\t\theight: this.size.height\n\t\t};\n\t},\n\n\t_applyChanges: function() {\n\t\tvar props = {};\n\n\t\tif ( this.position.top !== this.prevPosition.top ) {\n\t\t\tprops.top = this.position.top + \"px\";\n\t\t}\n\t\tif ( this.position.left !== this.prevPosition.left ) {\n\t\t\tprops.left = this.position.left + \"px\";\n\t\t}\n\t\tif ( this.size.width !== this.prevSize.width ) {\n\t\t\tprops.width = this.size.width + \"px\";\n\t\t}\n\t\tif ( this.size.height !== this.prevSize.height ) {\n\t\t\tprops.height = this.size.height + \"px\";\n\t\t}\n\n\t\tthis.helper.css( props );\n\n\t\treturn props;\n\t},\n\n\t_updateVirtualBoundaries: function( forceAspectRatio ) {\n\t\tvar pMinWidth, pMaxWidth, pMinHeight, pMaxHeight, b,\n\t\t\to = this.options;\n\n\t\tb = {\n\t\t\tminWidth: this._isNumber( o.minWidth ) ? o.minWidth : 0,\n\t\t\tmaxWidth: this._isNumber( o.maxWidth ) ? o.maxWidth : Infinity,\n\t\t\tminHeight: this._isNumber( o.minHeight ) ? o.minHeight : 0,\n\t\t\tmaxHeight: this._isNumber( o.maxHeight ) ? o.maxHeight : Infinity\n\t\t};\n\n\t\tif ( this._aspectRatio || forceAspectRatio ) {\n\t\t\tpMinWidth = b.minHeight * this.aspectRatio;\n\t\t\tpMinHeight = b.minWidth / this.aspectRatio;\n\t\t\tpMaxWidth = b.maxHeight * this.aspectRatio;\n\t\t\tpMaxHeight = b.maxWidth / this.aspectRatio;\n\n\t\t\tif ( pMinWidth > b.minWidth ) {\n\t\t\t\tb.minWidth = pMinWidth;\n\t\t\t}\n\t\t\tif ( pMinHeight > b.minHeight ) {\n\t\t\t\tb.minHeight = pMinHeight;\n\t\t\t}\n\t\t\tif ( pMaxWidth < b.maxWidth ) {\n\t\t\t\tb.maxWidth = pMaxWidth;\n\t\t\t}\n\t\t\tif ( pMaxHeight < b.maxHeight ) {\n\t\t\t\tb.maxHeight = pMaxHeight;\n\t\t\t}\n\t\t}\n\t\tthis._vBoundaries = b;\n\t},\n\n\t_updateCache: function( data ) {\n\t\tthis.offset = this.helper.offset();\n\t\tif ( this._isNumber( data.left ) ) {\n\t\t\tthis.position.left = data.left;\n\t\t}\n\t\tif ( this._isNumber( data.top ) ) {\n\t\t\tthis.position.top = data.top;\n\t\t}\n\t\tif ( this._isNumber( data.height ) ) {\n\t\t\tthis.size.height = data.height;\n\t\t}\n\t\tif ( this._isNumber( data.width ) ) {\n\t\t\tthis.size.width = data.width;\n\t\t}\n\t},\n\n\t_updateRatio: function( data ) {\n\n\t\tvar cpos = this.position,\n\t\t\tcsize = this.size,\n\t\t\ta = this.axis;\n\n\t\tif ( this._isNumber( data.height ) ) {\n\t\t\tdata.width = ( data.height * this.aspectRatio );\n\t\t} else if ( this._isNumber( data.width ) ) {\n\t\t\tdata.height = ( data.width / this.aspectRatio );\n\t\t}\n\n\t\tif ( a === \"sw\" ) {\n\t\t\tdata.left = cpos.left + ( csize.width - data.width );\n\t\t\tdata.top = null;\n\t\t}\n\t\tif ( a === \"nw\" ) {\n\t\t\tdata.top = cpos.top + ( csize.height - data.height );\n\t\t\tdata.left = cpos.left + ( csize.width - data.width );\n\t\t}\n\n\t\treturn data;\n\t},\n\n\t_respectSize: function( data ) {\n\n\t\tvar o = this._vBoundaries,\n\t\t\ta = this.axis,\n\t\t\tismaxw = this._isNumber( data.width ) && o.maxWidth && ( o.maxWidth < data.width ),\n\t\t\tismaxh = this._isNumber( data.height ) && o.maxHeight && ( o.maxHeight < data.height ),\n\t\t\tisminw = this._isNumber( data.width ) && o.minWidth && ( o.minWidth > data.width ),\n\t\t\tisminh = this._isNumber( data.height ) && o.minHeight && ( o.minHeight > data.height ),\n\t\t\tdw = this.originalPosition.left + this.originalSize.width,\n\t\t\tdh = this.originalPosition.top + this.originalSize.height,\n\t\t\tcw = /sw|nw|w/.test( a ), ch = /nw|ne|n/.test( a );\n\t\tif ( isminw ) {\n\t\t\tdata.width = o.minWidth;\n\t\t}\n\t\tif ( isminh ) {\n\t\t\tdata.height = o.minHeight;\n\t\t}\n\t\tif ( ismaxw ) {\n\t\t\tdata.width = o.maxWidth;\n\t\t}\n\t\tif ( ismaxh ) {\n\t\t\tdata.height = o.maxHeight;\n\t\t}\n\n\t\tif ( isminw && cw ) {\n\t\t\tdata.left = dw - o.minWidth;\n\t\t}\n\t\tif ( ismaxw && cw ) {\n\t\t\tdata.left = dw - o.maxWidth;\n\t\t}\n\t\tif ( isminh && ch ) {\n\t\t\tdata.top = dh - o.minHeight;\n\t\t}\n\t\tif ( ismaxh && ch ) {\n\t\t\tdata.top = dh - o.maxHeight;\n\t\t}\n\n\t\t// Fixing jump error on top/left - bug #2330\n\t\tif ( !data.width && !data.height && !data.left && data.top ) {\n\t\t\tdata.top = null;\n\t\t} else if ( !data.width && !data.height && !data.top && data.left ) {\n\t\t\tdata.left = null;\n\t\t}\n\n\t\treturn data;\n\t},\n\n\t_getPaddingPlusBorderDimensions: function( element ) {\n\t\tvar i = 0,\n\t\t\twidths = [],\n\t\t\tborders = [\n\t\t\t\telement.css( \"borderTopWidth\" ),\n\t\t\t\telement.css( \"borderRightWidth\" ),\n\t\t\t\telement.css( \"borderBottomWidth\" ),\n\t\t\t\telement.css( \"borderLeftWidth\" )\n\t\t\t],\n\t\t\tpaddings = [\n\t\t\t\telement.css( \"paddingTop\" ),\n\t\t\t\telement.css( \"paddingRight\" ),\n\t\t\t\telement.css( \"paddingBottom\" ),\n\t\t\t\telement.css( \"paddingLeft\" )\n\t\t\t];\n\n\t\tfor ( ; i < 4; i++ ) {\n\t\t\twidths[ i ] = ( parseFloat( borders[ i ] ) || 0 );\n\t\t\twidths[ i ] += ( parseFloat( paddings[ i ] ) || 0 );\n\t\t}\n\n\t\treturn {\n\t\t\theight: widths[ 0 ] + widths[ 2 ],\n\t\t\twidth: widths[ 1 ] + widths[ 3 ]\n\t\t};\n\t},\n\n\t_proportionallyResize: function() {\n\n\t\tif ( !this._proportionallyResizeElements.length ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar prel,\n\t\t\ti = 0,\n\t\t\telement = this.helper || this.element;\n\n\t\tfor ( ; i < this._proportionallyResizeElements.length; i++ ) {\n\n\t\t\tprel = this._proportionallyResizeElements[ i ];\n\n\t\t\t// TODO: Seems like a bug to cache this.outerDimensions\n\t\t\t// considering that we are in a loop.\n\t\t\tif ( !this.outerDimensions ) {\n\t\t\t\tthis.outerDimensions = this._getPaddingPlusBorderDimensions( prel );\n\t\t\t}\n\n\t\t\tprel.css( {\n\t\t\t\theight: ( element.height() - this.outerDimensions.height ) || 0,\n\t\t\t\twidth: ( element.width() - this.outerDimensions.width ) || 0\n\t\t\t} );\n\n\t\t}\n\n\t},\n\n\t_renderProxy: function() {\n\n\t\tvar el = this.element, o = this.options;\n\t\tthis.elementOffset = el.offset();\n\n\t\tif ( this._helper ) {\n\n\t\t\tthis.helper = this.helper || $( \"<div style='overflow:hidden;'></div>\" );\n\n\t\t\tthis._addClass( this.helper, this._helper );\n\t\t\tthis.helper.css( {\n\t\t\t\twidth: this.element.outerWidth(),\n\t\t\t\theight: this.element.outerHeight(),\n\t\t\t\tposition: \"absolute\",\n\t\t\t\tleft: this.elementOffset.left + \"px\",\n\t\t\t\ttop: this.elementOffset.top + \"px\",\n\t\t\t\tzIndex: ++o.zIndex //TODO: Don't modify option\n\t\t\t} );\n\n\t\t\tthis.helper\n\t\t\t\t.appendTo( \"body\" )\n\t\t\t\t.disableSelection();\n\n\t\t} else {\n\t\t\tthis.helper = this.element;\n\t\t}\n\n\t},\n\n\t_change: {\n\t\te: function( event, dx ) {\n\t\t\treturn { width: this.originalSize.width + dx };\n\t\t},\n\t\tw: function( event, dx ) {\n\t\t\tvar cs = this.originalSize, sp = this.originalPosition;\n\t\t\treturn { left: sp.left + dx, width: cs.width - dx };\n\t\t},\n\t\tn: function( event, dx, dy ) {\n\t\t\tvar cs = this.originalSize, sp = this.originalPosition;\n\t\t\treturn { top: sp.top + dy, height: cs.height - dy };\n\t\t},\n\t\ts: function( event, dx, dy ) {\n\t\t\treturn { height: this.originalSize.height + dy };\n\t\t},\n\t\tse: function( event, dx, dy ) {\n\t\t\treturn $.extend( this._change.s.apply( this, arguments ),\n\t\t\t\tthis._change.e.apply( this, [ event, dx, dy ] ) );\n\t\t},\n\t\tsw: function( event, dx, dy ) {\n\t\t\treturn $.extend( this._change.s.apply( this, arguments ),\n\t\t\t\tthis._change.w.apply( this, [ event, dx, dy ] ) );\n\t\t},\n\t\tne: function( event, dx, dy ) {\n\t\t\treturn $.extend( this._change.n.apply( this, arguments ),\n\t\t\t\tthis._change.e.apply( this, [ event, dx, dy ] ) );\n\t\t},\n\t\tnw: function( event, dx, dy ) {\n\t\t\treturn $.extend( this._change.n.apply( this, arguments ),\n\t\t\t\tthis._change.w.apply( this, [ event, dx, dy ] ) );\n\t\t}\n\t},\n\n\t_propagate: function( n, event ) {\n\t\t$.ui.plugin.call( this, n, [ event, this.ui() ] );\n\t\t( n !== \"resize\" && this._trigger( n, event, this.ui() ) );\n\t},\n\n\tplugins: {},\n\n\tui: function() {\n\t\treturn {\n\t\t\toriginalElement: this.originalElement,\n\t\t\telement: this.element,\n\t\t\thelper: this.helper,\n\t\t\tposition: this.position,\n\t\t\tsize: this.size,\n\t\t\toriginalSize: this.originalSize,\n\t\t\toriginalPosition: this.originalPosition\n\t\t};\n\t}\n\n} );\n\n/*\n * Resizable Extensions\n */\n\n$.ui.plugin.add( \"resizable\", \"animate\", {\n\n\tstop: function( event ) {\n\t\tvar that = $( this ).resizable( \"instance\" ),\n\t\t\to = that.options,\n\t\t\tpr = that._proportionallyResizeElements,\n\t\t\tista = pr.length && ( /textarea/i ).test( pr[ 0 ].nodeName ),\n\t\t\tsoffseth = ista && that._hasScroll( pr[ 0 ], \"left\" ) ? 0 : that.sizeDiff.height,\n\t\t\tsoffsetw = ista ? 0 : that.sizeDiff.width,\n\t\t\tstyle = {\n\t\t\t\twidth: ( that.size.width - soffsetw ),\n\t\t\t\theight: ( that.size.height - soffseth )\n\t\t\t},\n\t\t\tleft = ( parseFloat( that.element.css( \"left\" ) ) +\n\t\t\t\t( that.position.left - that.originalPosition.left ) ) || null,\n\t\t\ttop = ( parseFloat( that.element.css( \"top\" ) ) +\n\t\t\t\t( that.position.top - that.originalPosition.top ) ) || null;\n\n\t\tthat.element.animate(\n\t\t\t$.extend( style, top && left ? { top: top, left: left } : {} ), {\n\t\t\t\tduration: o.animateDuration,\n\t\t\t\teasing: o.animateEasing,\n\t\t\t\tstep: function() {\n\n\t\t\t\t\tvar data = {\n\t\t\t\t\t\twidth: parseFloat( that.element.css( \"width\" ) ),\n\t\t\t\t\t\theight: parseFloat( that.element.css( \"height\" ) ),\n\t\t\t\t\t\ttop: parseFloat( that.element.css( \"top\" ) ),\n\t\t\t\t\t\tleft: parseFloat( that.element.css( \"left\" ) )\n\t\t\t\t\t};\n\n\t\t\t\t\tif ( pr && pr.length ) {\n\t\t\t\t\t\t$( pr[ 0 ] ).css( { width: data.width, height: data.height } );\n\t\t\t\t\t}\n\n\t\t\t\t\t// Propagating resize, and updating values for each animation step\n\t\t\t\t\tthat._updateCache( data );\n\t\t\t\t\tthat._propagate( \"resize\", event );\n\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t}\n\n} );\n\n$.ui.plugin.add( \"resizable\", \"containment\", {\n\n\tstart: function() {\n\t\tvar element, p, co, ch, cw, width, height,\n\t\t\tthat = $( this ).resizable( \"instance\" ),\n\t\t\to = that.options,\n\t\t\tel = that.element,\n\t\t\toc = o.containment,\n\t\t\tce = ( oc instanceof $ ) ?\n\t\t\t\toc.get( 0 ) :\n\t\t\t\t( /parent/.test( oc ) ) ? el.parent().get( 0 ) : oc;\n\n\t\tif ( !ce ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthat.containerElement = $( ce );\n\n\t\tif ( /document/.test( oc ) || oc === document ) {\n\t\t\tthat.containerOffset = {\n\t\t\t\tleft: 0,\n\t\t\t\ttop: 0\n\t\t\t};\n\t\t\tthat.containerPosition = {\n\t\t\t\tleft: 0,\n\t\t\t\ttop: 0\n\t\t\t};\n\n\t\t\tthat.parentData = {\n\t\t\t\telement: $( document ),\n\t\t\t\tleft: 0,\n\t\t\t\ttop: 0,\n\t\t\t\twidth: $( document ).width(),\n\t\t\t\theight: $( document ).height() || document.body.parentNode.scrollHeight\n\t\t\t};\n\t\t} else {\n\t\t\telement = $( ce );\n\t\t\tp = [];\n\t\t\t$( [ \"Top\", \"Right\", \"Left\", \"Bottom\" ] ).each( function( i, name ) {\n\t\t\t\tp[ i ] = that._num( element.css( \"padding\" + name ) );\n\t\t\t} );\n\n\t\t\tthat.containerOffset = element.offset();\n\t\t\tthat.containerPosition = element.position();\n\t\t\tthat.containerSize = {\n\t\t\t\theight: ( element.innerHeight() - p[ 3 ] ),\n\t\t\t\twidth: ( element.innerWidth() - p[ 1 ] )\n\t\t\t};\n\n\t\t\tco = that.containerOffset;\n\t\t\tch = that.containerSize.height;\n\t\t\tcw = that.containerSize.width;\n\t\t\twidth = ( that._hasScroll ( ce, \"left\" ) ? ce.scrollWidth : cw );\n\t\t\theight = ( that._hasScroll ( ce ) ? ce.scrollHeight : ch ) ;\n\n\t\t\tthat.parentData = {\n\t\t\t\telement: ce,\n\t\t\t\tleft: co.left,\n\t\t\t\ttop: co.top,\n\t\t\t\twidth: width,\n\t\t\t\theight: height\n\t\t\t};\n\t\t}\n\t},\n\n\tresize: function( event ) {\n\t\tvar woset, hoset, isParent, isOffsetRelative,\n\t\t\tthat = $( this ).resizable( \"instance\" ),\n\t\t\to = that.options,\n\t\t\tco = that.containerOffset,\n\t\t\tcp = that.position,\n\t\t\tpRatio = that._aspectRatio || event.shiftKey,\n\t\t\tcop = {\n\t\t\t\ttop: 0,\n\t\t\t\tleft: 0\n\t\t\t},\n\t\t\tce = that.containerElement,\n\t\t\tcontinueResize = true;\n\n\t\tif ( ce[ 0 ] !== document && ( /static/ ).test( ce.css( \"position\" ) ) ) {\n\t\t\tcop = co;\n\t\t}\n\n\t\tif ( cp.left < ( that._helper ? co.left : 0 ) ) {\n\t\t\tthat.size.width = that.size.width +\n\t\t\t\t( that._helper ?\n\t\t\t\t\t( that.position.left - co.left ) :\n\t\t\t\t\t( that.position.left - cop.left ) );\n\n\t\t\tif ( pRatio ) {\n\t\t\t\tthat.size.height = that.size.width / that.aspectRatio;\n\t\t\t\tcontinueResize = false;\n\t\t\t}\n\t\t\tthat.position.left = o.helper ? co.left : 0;\n\t\t}\n\n\t\tif ( cp.top < ( that._helper ? co.top : 0 ) ) {\n\t\t\tthat.size.height = that.size.height +\n\t\t\t\t( that._helper ?\n\t\t\t\t\t( that.position.top - co.top ) :\n\t\t\t\t\tthat.position.top );\n\n\t\t\tif ( pRatio ) {\n\t\t\t\tthat.size.width = that.size.height * that.aspectRatio;\n\t\t\t\tcontinueResize = false;\n\t\t\t}\n\t\t\tthat.position.top = that._helper ? co.top : 0;\n\t\t}\n\n\t\tisParent = that.containerElement.get( 0 ) === that.element.parent().get( 0 );\n\t\tisOffsetRelative = /relative|absolute/.test( that.containerElement.css( \"position\" ) );\n\n\t\tif ( isParent && isOffsetRelative ) {\n\t\t\tthat.offset.left = that.parentData.left + that.position.left;\n\t\t\tthat.offset.top = that.parentData.top + that.position.top;\n\t\t} else {\n\t\t\tthat.offset.left = that.element.offset().left;\n\t\t\tthat.offset.top = that.element.offset().top;\n\t\t}\n\n\t\twoset = Math.abs( that.sizeDiff.width +\n\t\t\t( that._helper ?\n\t\t\t\tthat.offset.left - cop.left :\n\t\t\t\t( that.offset.left - co.left ) ) );\n\n\t\thoset = Math.abs( that.sizeDiff.height +\n\t\t\t( that._helper ?\n\t\t\t\tthat.offset.top - cop.top :\n\t\t\t\t( that.offset.top - co.top ) ) );\n\n\t\tif ( woset + that.size.width >= that.parentData.width ) {\n\t\t\tthat.size.width = that.parentData.width - woset;\n\t\t\tif ( pRatio ) {\n\t\t\t\tthat.size.height = that.size.width / that.aspectRatio;\n\t\t\t\tcontinueResize = false;\n\t\t\t}\n\t\t}\n\n\t\tif ( hoset + that.size.height >= that.parentData.height ) {\n\t\t\tthat.size.height = that.parentData.height - hoset;\n\t\t\tif ( pRatio ) {\n\t\t\t\tthat.size.width = that.size.height * that.aspectRatio;\n\t\t\t\tcontinueResize = false;\n\t\t\t}\n\t\t}\n\n\t\tif ( !continueResize ) {\n\t\t\tthat.position.left = that.prevPosition.left;\n\t\t\tthat.position.top = that.prevPosition.top;\n\t\t\tthat.size.width = that.prevSize.width;\n\t\t\tthat.size.height = that.prevSize.height;\n\t\t}\n\t},\n\n\tstop: function() {\n\t\tvar that = $( this ).resizable( \"instance\" ),\n\t\t\to = that.options,\n\t\t\tco = that.containerOffset,\n\t\t\tcop = that.containerPosition,\n\t\t\tce = that.containerElement,\n\t\t\thelper = $( that.helper ),\n\t\t\tho = helper.offset(),\n\t\t\tw = helper.outerWidth() - that.sizeDiff.width,\n\t\t\th = helper.outerHeight() - that.sizeDiff.height;\n\n\t\tif ( that._helper && !o.animate && ( /relative/ ).test( ce.css( \"position\" ) ) ) {\n\t\t\t$( this ).css( {\n\t\t\t\tleft: ho.left - cop.left - co.left,\n\t\t\t\twidth: w,\n\t\t\t\theight: h\n\t\t\t} );\n\t\t}\n\n\t\tif ( that._helper && !o.animate && ( /static/ ).test( ce.css( \"position\" ) ) ) {\n\t\t\t$( this ).css( {\n\t\t\t\tleft: ho.left - cop.left - co.left,\n\t\t\t\twidth: w,\n\t\t\t\theight: h\n\t\t\t} );\n\t\t}\n\t}\n} );\n\n$.ui.plugin.add( \"resizable\", \"alsoResize\", {\n\n\tstart: function() {\n\t\tvar that = $( this ).resizable( \"instance\" ),\n\t\t\to = that.options;\n\n\t\t$( o.alsoResize ).each( function() {\n\t\t\tvar el = $( this );\n\t\t\tel.data( \"ui-resizable-alsoresize\", {\n\t\t\t\twidth: parseFloat( el.width() ), height: parseFloat( el.height() ),\n\t\t\t\tleft: parseFloat( el.css( \"left\" ) ), top: parseFloat( el.css( \"top\" ) )\n\t\t\t} );\n\t\t} );\n\t},\n\n\tresize: function( event, ui ) {\n\t\tvar that = $( this ).resizable( \"instance\" ),\n\t\t\to = that.options,\n\t\t\tos = that.originalSize,\n\t\t\top = that.originalPosition,\n\t\t\tdelta = {\n\t\t\t\theight: ( that.size.height - os.height ) || 0,\n\t\t\t\twidth: ( that.size.width - os.width ) || 0,\n\t\t\t\ttop: ( that.position.top - op.top ) || 0,\n\t\t\t\tleft: ( that.position.left - op.left ) || 0\n\t\t\t};\n\n\t\t\t$( o.alsoResize ).each( function() {\n\t\t\t\tvar el = $( this ), start = $( this ).data( \"ui-resizable-alsoresize\" ), style = {},\n\t\t\t\t\tcss = el.parents( ui.originalElement[ 0 ] ).length ?\n\t\t\t\t\t\t\t[ \"width\", \"height\" ] :\n\t\t\t\t\t\t\t[ \"width\", \"height\", \"top\", \"left\" ];\n\n\t\t\t\t$.each( css, function( i, prop ) {\n\t\t\t\t\tvar sum = ( start[ prop ] || 0 ) + ( delta[ prop ] || 0 );\n\t\t\t\t\tif ( sum && sum >= 0 ) {\n\t\t\t\t\t\tstyle[ prop ] = sum || null;\n\t\t\t\t\t}\n\t\t\t\t} );\n\n\t\t\t\tel.css( style );\n\t\t\t} );\n\t},\n\n\tstop: function() {\n\t\t$( this ).removeData( \"ui-resizable-alsoresize\" );\n\t}\n} );\n\n$.ui.plugin.add( \"resizable\", \"ghost\", {\n\n\tstart: function() {\n\n\t\tvar that = $( this ).resizable( \"instance\" ), cs = that.size;\n\n\t\tthat.ghost = that.originalElement.clone();\n\t\tthat.ghost.css( {\n\t\t\topacity: 0.25,\n\t\t\tdisplay: \"block\",\n\t\t\tposition: \"relative\",\n\t\t\theight: cs.height,\n\t\t\twidth: cs.width,\n\t\t\tmargin: 0,\n\t\t\tleft: 0,\n\t\t\ttop: 0\n\t\t} );\n\n\t\tthat._addClass( that.ghost, \"ui-resizable-ghost\" );\n\n\t\t// DEPRECATED\n\t\t// TODO: remove after 1.12\n\t\tif ( $.uiBackCompat !== false && typeof that.options.ghost === \"string\" ) {\n\n\t\t\t// Ghost option\n\t\t\tthat.ghost.addClass( this.options.ghost );\n\t\t}\n\n\t\tthat.ghost.appendTo( that.helper );\n\n\t},\n\n\tresize: function() {\n\t\tvar that = $( this ).resizable( \"instance\" );\n\t\tif ( that.ghost ) {\n\t\t\tthat.ghost.css( {\n\t\t\t\tposition: \"relative\",\n\t\t\t\theight: that.size.height,\n\t\t\t\twidth: that.size.width\n\t\t\t} );\n\t\t}\n\t},\n\n\tstop: function() {\n\t\tvar that = $( this ).resizable( \"instance\" );\n\t\tif ( that.ghost && that.helper ) {\n\t\t\tthat.helper.get( 0 ).removeChild( that.ghost.get( 0 ) );\n\t\t}\n\t}\n\n} );\n\n$.ui.plugin.add( \"resizable\", \"grid\", {\n\n\tresize: function() {\n\t\tvar outerDimensions,\n\t\t\tthat = $( this ).resizable( \"instance\" ),\n\t\t\to = that.options,\n\t\t\tcs = that.size,\n\t\t\tos = that.originalSize,\n\t\t\top = that.originalPosition,\n\t\t\ta = that.axis,\n\t\t\tgrid = typeof o.grid === \"number\" ? [ o.grid, o.grid ] : o.grid,\n\t\t\tgridX = ( grid[ 0 ] || 1 ),\n\t\t\tgridY = ( grid[ 1 ] || 1 ),\n\t\t\tox = Math.round( ( cs.width - os.width ) / gridX ) * gridX,\n\t\t\toy = Math.round( ( cs.height - os.height ) / gridY ) * gridY,\n\t\t\tnewWidth = os.width + ox,\n\t\t\tnewHeight = os.height + oy,\n\t\t\tisMaxWidth = o.maxWidth && ( o.maxWidth < newWidth ),\n\t\t\tisMaxHeight = o.maxHeight && ( o.maxHeight < newHeight ),\n\t\t\tisMinWidth = o.minWidth && ( o.minWidth > newWidth ),\n\t\t\tisMinHeight = o.minHeight && ( o.minHeight > newHeight );\n\n\t\to.grid = grid;\n\n\t\tif ( isMinWidth ) {\n\t\t\tnewWidth += gridX;\n\t\t}\n\t\tif ( isMinHeight ) {\n\t\t\tnewHeight += gridY;\n\t\t}\n\t\tif ( isMaxWidth ) {\n\t\t\tnewWidth -= gridX;\n\t\t}\n\t\tif ( isMaxHeight ) {\n\t\t\tnewHeight -= gridY;\n\t\t}\n\n\t\tif ( /^(se|s|e)$/.test( a ) ) {\n\t\t\tthat.size.width = newWidth;\n\t\t\tthat.size.height = newHeight;\n\t\t} else if ( /^(ne)$/.test( a ) ) {\n\t\t\tthat.size.width = newWidth;\n\t\t\tthat.size.height = newHeight;\n\t\t\tthat.position.top = op.top - oy;\n\t\t} else if ( /^(sw)$/.test( a ) ) {\n\t\t\tthat.size.width = newWidth;\n\t\t\tthat.size.height = newHeight;\n\t\t\tthat.position.left = op.left - ox;\n\t\t} else {\n\t\t\tif ( newHeight - gridY <= 0 || newWidth - gridX <= 0 ) {\n\t\t\t\touterDimensions = that._getPaddingPlusBorderDimensions( this );\n\t\t\t}\n\n\t\t\tif ( newHeight - gridY > 0 ) {\n\t\t\t\tthat.size.height = newHeight;\n\t\t\t\tthat.position.top = op.top - oy;\n\t\t\t} else {\n\t\t\t\tnewHeight = gridY - outerDimensions.height;\n\t\t\t\tthat.size.height = newHeight;\n\t\t\t\tthat.position.top = op.top + os.height - newHeight;\n\t\t\t}\n\t\t\tif ( newWidth - gridX > 0 ) {\n\t\t\t\tthat.size.width = newWidth;\n\t\t\t\tthat.position.left = op.left - ox;\n\t\t\t} else {\n\t\t\t\tnewWidth = gridX - outerDimensions.width;\n\t\t\t\tthat.size.width = newWidth;\n\t\t\t\tthat.position.left = op.left + os.width - newWidth;\n\t\t\t}\n\t\t}\n\t}\n\n} );\n\nvar widgetsResizable = $.ui.resizable;\n\n\n/*!\n * jQuery UI Selectable 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Selectable\n//>>group: Interactions\n//>>description: Allows groups of elements to be selected with the mouse.\n//>>docs: http://api.jqueryui.com/selectable/\n//>>demos: http://jqueryui.com/selectable/\n//>>css.structure: ../../themes/base/selectable.css\n\n\n\nvar widgetsSelectable = $.widget( \"ui.selectable\", $.ui.mouse, {\n\tversion: \"1.12.1\",\n\toptions: {\n\t\tappendTo: \"body\",\n\t\tautoRefresh: true,\n\t\tdistance: 0,\n\t\tfilter: \"*\",\n\t\ttolerance: \"touch\",\n\n\t\t// Callbacks\n\t\tselected: null,\n\t\tselecting: null,\n\t\tstart: null,\n\t\tstop: null,\n\t\tunselected: null,\n\t\tunselecting: null\n\t},\n\t_create: function() {\n\t\tvar that = this;\n\n\t\tthis._addClass( \"ui-selectable\" );\n\n\t\tthis.dragged = false;\n\n\t\t// Cache selectee children based on filter\n\t\tthis.refresh = function() {\n\t\t\tthat.elementPos = $( that.element[ 0 ] ).offset();\n\t\t\tthat.selectees = $( that.options.filter, that.element[ 0 ] );\n\t\t\tthat._addClass( that.selectees, \"ui-selectee\" );\n\t\t\tthat.selectees.each( function() {\n\t\t\t\tvar $this = $( this ),\n\t\t\t\t\tselecteeOffset = $this.offset(),\n\t\t\t\t\tpos = {\n\t\t\t\t\t\tleft: selecteeOffset.left - that.elementPos.left,\n\t\t\t\t\t\ttop: selecteeOffset.top - that.elementPos.top\n\t\t\t\t\t};\n\t\t\t\t$.data( this, \"selectable-item\", {\n\t\t\t\t\telement: this,\n\t\t\t\t\t$element: $this,\n\t\t\t\t\tleft: pos.left,\n\t\t\t\t\ttop: pos.top,\n\t\t\t\t\tright: pos.left + $this.outerWidth(),\n\t\t\t\t\tbottom: pos.top + $this.outerHeight(),\n\t\t\t\t\tstartselected: false,\n\t\t\t\t\tselected: $this.hasClass( \"ui-selected\" ),\n\t\t\t\t\tselecting: $this.hasClass( \"ui-selecting\" ),\n\t\t\t\t\tunselecting: $this.hasClass( \"ui-unselecting\" )\n\t\t\t\t} );\n\t\t\t} );\n\t\t};\n\t\tthis.refresh();\n\n\t\tthis._mouseInit();\n\n\t\tthis.helper = $( \"<div>\" );\n\t\tthis._addClass( this.helper, \"ui-selectable-helper\" );\n\t},\n\n\t_destroy: function() {\n\t\tthis.selectees.removeData( \"selectable-item\" );\n\t\tthis._mouseDestroy();\n\t},\n\n\t_mouseStart: function( event ) {\n\t\tvar that = this,\n\t\t\toptions = this.options;\n\n\t\tthis.opos = [ event.pageX, event.pageY ];\n\t\tthis.elementPos = $( this.element[ 0 ] ).offset();\n\n\t\tif ( this.options.disabled ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.selectees = $( options.filter, this.element[ 0 ] );\n\n\t\tthis._trigger( \"start\", event );\n\n\t\t$( options.appendTo ).append( this.helper );\n\n\t\t// position helper (lasso)\n\t\tthis.helper.css( {\n\t\t\t\"left\": event.pageX,\n\t\t\t\"top\": event.pageY,\n\t\t\t\"width\": 0,\n\t\t\t\"height\": 0\n\t\t} );\n\n\t\tif ( options.autoRefresh ) {\n\t\t\tthis.refresh();\n\t\t}\n\n\t\tthis.selectees.filter( \".ui-selected\" ).each( function() {\n\t\t\tvar selectee = $.data( this, \"selectable-item\" );\n\t\t\tselectee.startselected = true;\n\t\t\tif ( !event.metaKey && !event.ctrlKey ) {\n\t\t\t\tthat._removeClass( selectee.$element, \"ui-selected\" );\n\t\t\t\tselectee.selected = false;\n\t\t\t\tthat._addClass( selectee.$element, \"ui-unselecting\" );\n\t\t\t\tselectee.unselecting = true;\n\n\t\t\t\t// selectable UNSELECTING callback\n\t\t\t\tthat._trigger( \"unselecting\", event, {\n\t\t\t\t\tunselecting: selectee.element\n\t\t\t\t} );\n\t\t\t}\n\t\t} );\n\n\t\t$( event.target ).parents().addBack().each( function() {\n\t\t\tvar doSelect,\n\t\t\t\tselectee = $.data( this, \"selectable-item\" );\n\t\t\tif ( selectee ) {\n\t\t\t\tdoSelect = ( !event.metaKey && !event.ctrlKey ) ||\n\t\t\t\t\t!selectee.$element.hasClass( \"ui-selected\" );\n\t\t\t\tthat._removeClass( selectee.$element, doSelect ? \"ui-unselecting\" : \"ui-selected\" )\n\t\t\t\t\t._addClass( selectee.$element, doSelect ? \"ui-selecting\" : \"ui-unselecting\" );\n\t\t\t\tselectee.unselecting = !doSelect;\n\t\t\t\tselectee.selecting = doSelect;\n\t\t\t\tselectee.selected = doSelect;\n\n\t\t\t\t// selectable (UN)SELECTING callback\n\t\t\t\tif ( doSelect ) {\n\t\t\t\t\tthat._trigger( \"selecting\", event, {\n\t\t\t\t\t\tselecting: selectee.element\n\t\t\t\t\t} );\n\t\t\t\t} else {\n\t\t\t\t\tthat._trigger( \"unselecting\", event, {\n\t\t\t\t\t\tunselecting: selectee.element\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t}\n\t\t} );\n\n\t},\n\n\t_mouseDrag: function( event ) {\n\n\t\tthis.dragged = true;\n\n\t\tif ( this.options.disabled ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar tmp,\n\t\t\tthat = this,\n\t\t\toptions = this.options,\n\t\t\tx1 = this.opos[ 0 ],\n\t\t\ty1 = this.opos[ 1 ],\n\t\t\tx2 = event.pageX,\n\t\t\ty2 = event.pageY;\n\n\t\tif ( x1 > x2 ) { tmp = x2; x2 = x1; x1 = tmp; }\n\t\tif ( y1 > y2 ) { tmp = y2; y2 = y1; y1 = tmp; }\n\t\tthis.helper.css( { left: x1, top: y1, width: x2 - x1, height: y2 - y1 } );\n\n\t\tthis.selectees.each( function() {\n\t\t\tvar selectee = $.data( this, \"selectable-item\" ),\n\t\t\t\thit = false,\n\t\t\t\toffset = {};\n\n\t\t\t//prevent helper from being selected if appendTo: selectable\n\t\t\tif ( !selectee || selectee.element === that.element[ 0 ] ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\toffset.left   = selectee.left   + that.elementPos.left;\n\t\t\toffset.right  = selectee.right  + that.elementPos.left;\n\t\t\toffset.top    = selectee.top    + that.elementPos.top;\n\t\t\toffset.bottom = selectee.bottom + that.elementPos.top;\n\n\t\t\tif ( options.tolerance === \"touch\" ) {\n\t\t\t\thit = ( !( offset.left > x2 || offset.right < x1 || offset.top > y2 ||\n                    offset.bottom < y1 ) );\n\t\t\t} else if ( options.tolerance === \"fit\" ) {\n\t\t\t\thit = ( offset.left > x1 && offset.right < x2 && offset.top > y1 &&\n                    offset.bottom < y2 );\n\t\t\t}\n\n\t\t\tif ( hit ) {\n\n\t\t\t\t// SELECT\n\t\t\t\tif ( selectee.selected ) {\n\t\t\t\t\tthat._removeClass( selectee.$element, \"ui-selected\" );\n\t\t\t\t\tselectee.selected = false;\n\t\t\t\t}\n\t\t\t\tif ( selectee.unselecting ) {\n\t\t\t\t\tthat._removeClass( selectee.$element, \"ui-unselecting\" );\n\t\t\t\t\tselectee.unselecting = false;\n\t\t\t\t}\n\t\t\t\tif ( !selectee.selecting ) {\n\t\t\t\t\tthat._addClass( selectee.$element, \"ui-selecting\" );\n\t\t\t\t\tselectee.selecting = true;\n\n\t\t\t\t\t// selectable SELECTING callback\n\t\t\t\t\tthat._trigger( \"selecting\", event, {\n\t\t\t\t\t\tselecting: selectee.element\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// UNSELECT\n\t\t\t\tif ( selectee.selecting ) {\n\t\t\t\t\tif ( ( event.metaKey || event.ctrlKey ) && selectee.startselected ) {\n\t\t\t\t\t\tthat._removeClass( selectee.$element, \"ui-selecting\" );\n\t\t\t\t\t\tselectee.selecting = false;\n\t\t\t\t\t\tthat._addClass( selectee.$element, \"ui-selected\" );\n\t\t\t\t\t\tselectee.selected = true;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthat._removeClass( selectee.$element, \"ui-selecting\" );\n\t\t\t\t\t\tselectee.selecting = false;\n\t\t\t\t\t\tif ( selectee.startselected ) {\n\t\t\t\t\t\t\tthat._addClass( selectee.$element, \"ui-unselecting\" );\n\t\t\t\t\t\t\tselectee.unselecting = true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// selectable UNSELECTING callback\n\t\t\t\t\t\tthat._trigger( \"unselecting\", event, {\n\t\t\t\t\t\t\tunselecting: selectee.element\n\t\t\t\t\t\t} );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif ( selectee.selected ) {\n\t\t\t\t\tif ( !event.metaKey && !event.ctrlKey && !selectee.startselected ) {\n\t\t\t\t\t\tthat._removeClass( selectee.$element, \"ui-selected\" );\n\t\t\t\t\t\tselectee.selected = false;\n\n\t\t\t\t\t\tthat._addClass( selectee.$element, \"ui-unselecting\" );\n\t\t\t\t\t\tselectee.unselecting = true;\n\n\t\t\t\t\t\t// selectable UNSELECTING callback\n\t\t\t\t\t\tthat._trigger( \"unselecting\", event, {\n\t\t\t\t\t\t\tunselecting: selectee.element\n\t\t\t\t\t\t} );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\n\t\treturn false;\n\t},\n\n\t_mouseStop: function( event ) {\n\t\tvar that = this;\n\n\t\tthis.dragged = false;\n\n\t\t$( \".ui-unselecting\", this.element[ 0 ] ).each( function() {\n\t\t\tvar selectee = $.data( this, \"selectable-item\" );\n\t\t\tthat._removeClass( selectee.$element, \"ui-unselecting\" );\n\t\t\tselectee.unselecting = false;\n\t\t\tselectee.startselected = false;\n\t\t\tthat._trigger( \"unselected\", event, {\n\t\t\t\tunselected: selectee.element\n\t\t\t} );\n\t\t} );\n\t\t$( \".ui-selecting\", this.element[ 0 ] ).each( function() {\n\t\t\tvar selectee = $.data( this, \"selectable-item\" );\n\t\t\tthat._removeClass( selectee.$element, \"ui-selecting\" )\n\t\t\t\t._addClass( selectee.$element, \"ui-selected\" );\n\t\t\tselectee.selecting = false;\n\t\t\tselectee.selected = true;\n\t\t\tselectee.startselected = true;\n\t\t\tthat._trigger( \"selected\", event, {\n\t\t\t\tselected: selectee.element\n\t\t\t} );\n\t\t} );\n\t\tthis._trigger( \"stop\", event );\n\n\t\tthis.helper.remove();\n\n\t\treturn false;\n\t}\n\n} );\n\n\n/*!\n * jQuery UI Sortable 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Sortable\n//>>group: Interactions\n//>>description: Enables items in a list to be sorted using the mouse.\n//>>docs: http://api.jqueryui.com/sortable/\n//>>demos: http://jqueryui.com/sortable/\n//>>css.structure: ../../themes/base/sortable.css\n\n\n\nvar widgetsSortable = $.widget( \"ui.sortable\", $.ui.mouse, {\n\tversion: \"1.12.1\",\n\twidgetEventPrefix: \"sort\",\n\tready: false,\n\toptions: {\n\t\tappendTo: \"parent\",\n\t\taxis: false,\n\t\tconnectWith: false,\n\t\tcontainment: false,\n\t\tcursor: \"auto\",\n\t\tcursorAt: false,\n\t\tdropOnEmpty: true,\n\t\tforcePlaceholderSize: false,\n\t\tforceHelperSize: false,\n\t\tgrid: false,\n\t\thandle: false,\n\t\thelper: \"original\",\n\t\titems: \"> *\",\n\t\topacity: false,\n\t\tplaceholder: false,\n\t\trevert: false,\n\t\tscroll: true,\n\t\tscrollSensitivity: 20,\n\t\tscrollSpeed: 20,\n\t\tscope: \"default\",\n\t\ttolerance: \"intersect\",\n\t\tzIndex: 1000,\n\n\t\t// Callbacks\n\t\tactivate: null,\n\t\tbeforeStop: null,\n\t\tchange: null,\n\t\tdeactivate: null,\n\t\tout: null,\n\t\tover: null,\n\t\treceive: null,\n\t\tremove: null,\n\t\tsort: null,\n\t\tstart: null,\n\t\tstop: null,\n\t\tupdate: null\n\t},\n\n\t_isOverAxis: function( x, reference, size ) {\n\t\treturn ( x >= reference ) && ( x < ( reference + size ) );\n\t},\n\n\t_isFloating: function( item ) {\n\t\treturn ( /left|right/ ).test( item.css( \"float\" ) ) ||\n\t\t\t( /inline|table-cell/ ).test( item.css( \"display\" ) );\n\t},\n\n\t_create: function() {\n\t\tthis.containerCache = {};\n\t\tthis._addClass( \"ui-sortable\" );\n\n\t\t//Get the items\n\t\tthis.refresh();\n\n\t\t//Let's determine the parent's offset\n\t\tthis.offset = this.element.offset();\n\n\t\t//Initialize mouse events for interaction\n\t\tthis._mouseInit();\n\n\t\tthis._setHandleClassName();\n\n\t\t//We're ready to go\n\t\tthis.ready = true;\n\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tthis._super( key, value );\n\n\t\tif ( key === \"handle\" ) {\n\t\t\tthis._setHandleClassName();\n\t\t}\n\t},\n\n\t_setHandleClassName: function() {\n\t\tvar that = this;\n\t\tthis._removeClass( this.element.find( \".ui-sortable-handle\" ), \"ui-sortable-handle\" );\n\t\t$.each( this.items, function() {\n\t\t\tthat._addClass(\n\t\t\t\tthis.instance.options.handle ?\n\t\t\t\t\tthis.item.find( this.instance.options.handle ) :\n\t\t\t\t\tthis.item,\n\t\t\t\t\"ui-sortable-handle\"\n\t\t\t);\n\t\t} );\n\t},\n\n\t_destroy: function() {\n\t\tthis._mouseDestroy();\n\n\t\tfor ( var i = this.items.length - 1; i >= 0; i-- ) {\n\t\t\tthis.items[ i ].item.removeData( this.widgetName + \"-item\" );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\t_mouseCapture: function( event, overrideHandle ) {\n\t\tvar currentItem = null,\n\t\t\tvalidHandle = false,\n\t\t\tthat = this;\n\n\t\tif ( this.reverting ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif ( this.options.disabled || this.options.type === \"static\" ) {\n\t\t\treturn false;\n\t\t}\n\n\t\t//We have to refresh the items data once first\n\t\tthis._refreshItems( event );\n\n\t\t//Find out if the clicked node (or one of its parents) is a actual item in this.items\n\t\t$( event.target ).parents().each( function() {\n\t\t\tif ( $.data( this, that.widgetName + \"-item\" ) === that ) {\n\t\t\t\tcurrentItem = $( this );\n\t\t\t\treturn false;\n\t\t\t}\n\t\t} );\n\t\tif ( $.data( event.target, that.widgetName + \"-item\" ) === that ) {\n\t\t\tcurrentItem = $( event.target );\n\t\t}\n\n\t\tif ( !currentItem ) {\n\t\t\treturn false;\n\t\t}\n\t\tif ( this.options.handle && !overrideHandle ) {\n\t\t\t$( this.options.handle, currentItem ).find( \"*\" ).addBack().each( function() {\n\t\t\t\tif ( this === event.target ) {\n\t\t\t\t\tvalidHandle = true;\n\t\t\t\t}\n\t\t\t} );\n\t\t\tif ( !validHandle ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tthis.currentItem = currentItem;\n\t\tthis._removeCurrentsFromItems();\n\t\treturn true;\n\n\t},\n\n\t_mouseStart: function( event, overrideHandle, noActivation ) {\n\n\t\tvar i, body,\n\t\t\to = this.options;\n\n\t\tthis.currentContainer = this;\n\n\t\t//We only need to call refreshPositions, because the refreshItems call has been moved to\n\t\t// mouseCapture\n\t\tthis.refreshPositions();\n\n\t\t//Create and append the visible helper\n\t\tthis.helper = this._createHelper( event );\n\n\t\t//Cache the helper size\n\t\tthis._cacheHelperProportions();\n\n\t\t/*\n\t\t * - Position generation -\n\t\t * This block generates everything position related - it's the core of draggables.\n\t\t */\n\n\t\t//Cache the margins of the original element\n\t\tthis._cacheMargins();\n\n\t\t//Get the next scrolling parent\n\t\tthis.scrollParent = this.helper.scrollParent();\n\n\t\t//The element's absolute position on the page minus margins\n\t\tthis.offset = this.currentItem.offset();\n\t\tthis.offset = {\n\t\t\ttop: this.offset.top - this.margins.top,\n\t\t\tleft: this.offset.left - this.margins.left\n\t\t};\n\n\t\t$.extend( this.offset, {\n\t\t\tclick: { //Where the click happened, relative to the element\n\t\t\t\tleft: event.pageX - this.offset.left,\n\t\t\t\ttop: event.pageY - this.offset.top\n\t\t\t},\n\t\t\tparent: this._getParentOffset(),\n\n\t\t\t// This is a relative to absolute position minus the actual position calculation -\n\t\t\t// only used for relative positioned helper\n\t\t\trelative: this._getRelativeOffset()\n\t\t} );\n\n\t\t// Only after we got the offset, we can change the helper's position to absolute\n\t\t// TODO: Still need to figure out a way to make relative sorting possible\n\t\tthis.helper.css( \"position\", \"absolute\" );\n\t\tthis.cssPosition = this.helper.css( \"position\" );\n\n\t\t//Generate the original position\n\t\tthis.originalPosition = this._generatePosition( event );\n\t\tthis.originalPageX = event.pageX;\n\t\tthis.originalPageY = event.pageY;\n\n\t\t//Adjust the mouse offset relative to the helper if \"cursorAt\" is supplied\n\t\t( o.cursorAt && this._adjustOffsetFromHelper( o.cursorAt ) );\n\n\t\t//Cache the former DOM position\n\t\tthis.domPosition = {\n\t\t\tprev: this.currentItem.prev()[ 0 ],\n\t\t\tparent: this.currentItem.parent()[ 0 ]\n\t\t};\n\n\t\t// If the helper is not the original, hide the original so it's not playing any role during\n\t\t// the drag, won't cause anything bad this way\n\t\tif ( this.helper[ 0 ] !== this.currentItem[ 0 ] ) {\n\t\t\tthis.currentItem.hide();\n\t\t}\n\n\t\t//Create the placeholder\n\t\tthis._createPlaceholder();\n\n\t\t//Set a containment if given in the options\n\t\tif ( o.containment ) {\n\t\t\tthis._setContainment();\n\t\t}\n\n\t\tif ( o.cursor && o.cursor !== \"auto\" ) { // cursor option\n\t\t\tbody = this.document.find( \"body\" );\n\n\t\t\t// Support: IE\n\t\t\tthis.storedCursor = body.css( \"cursor\" );\n\t\t\tbody.css( \"cursor\", o.cursor );\n\n\t\t\tthis.storedStylesheet =\n\t\t\t\t$( \"<style>*{ cursor: \" + o.cursor + \" !important; }</style>\" ).appendTo( body );\n\t\t}\n\n\t\tif ( o.opacity ) { // opacity option\n\t\t\tif ( this.helper.css( \"opacity\" ) ) {\n\t\t\t\tthis._storedOpacity = this.helper.css( \"opacity\" );\n\t\t\t}\n\t\t\tthis.helper.css( \"opacity\", o.opacity );\n\t\t}\n\n\t\tif ( o.zIndex ) { // zIndex option\n\t\t\tif ( this.helper.css( \"zIndex\" ) ) {\n\t\t\t\tthis._storedZIndex = this.helper.css( \"zIndex\" );\n\t\t\t}\n\t\t\tthis.helper.css( \"zIndex\", o.zIndex );\n\t\t}\n\n\t\t//Prepare scrolling\n\t\tif ( this.scrollParent[ 0 ] !== this.document[ 0 ] &&\n\t\t\t\tthis.scrollParent[ 0 ].tagName !== \"HTML\" ) {\n\t\t\tthis.overflowOffset = this.scrollParent.offset();\n\t\t}\n\n\t\t//Call callbacks\n\t\tthis._trigger( \"start\", event, this._uiHash() );\n\n\t\t//Recache the helper size\n\t\tif ( !this._preserveHelperProportions ) {\n\t\t\tthis._cacheHelperProportions();\n\t\t}\n\n\t\t//Post \"activate\" events to possible containers\n\t\tif ( !noActivation ) {\n\t\t\tfor ( i = this.containers.length - 1; i >= 0; i-- ) {\n\t\t\t\tthis.containers[ i ]._trigger( \"activate\", event, this._uiHash( this ) );\n\t\t\t}\n\t\t}\n\n\t\t//Prepare possible droppables\n\t\tif ( $.ui.ddmanager ) {\n\t\t\t$.ui.ddmanager.current = this;\n\t\t}\n\n\t\tif ( $.ui.ddmanager && !o.dropBehaviour ) {\n\t\t\t$.ui.ddmanager.prepareOffsets( this, event );\n\t\t}\n\n\t\tthis.dragging = true;\n\n\t\tthis._addClass( this.helper, \"ui-sortable-helper\" );\n\n\t\t// Execute the drag once - this causes the helper not to be visiblebefore getting its\n\t\t// correct position\n\t\tthis._mouseDrag( event );\n\t\treturn true;\n\n\t},\n\n\t_mouseDrag: function( event ) {\n\t\tvar i, item, itemElement, intersection,\n\t\t\to = this.options,\n\t\t\tscrolled = false;\n\n\t\t//Compute the helpers position\n\t\tthis.position = this._generatePosition( event );\n\t\tthis.positionAbs = this._convertPositionTo( \"absolute\" );\n\n\t\tif ( !this.lastPositionAbs ) {\n\t\t\tthis.lastPositionAbs = this.positionAbs;\n\t\t}\n\n\t\t//Do scrolling\n\t\tif ( this.options.scroll ) {\n\t\t\tif ( this.scrollParent[ 0 ] !== this.document[ 0 ] &&\n\t\t\t\t\tthis.scrollParent[ 0 ].tagName !== \"HTML\" ) {\n\n\t\t\t\tif ( ( this.overflowOffset.top + this.scrollParent[ 0 ].offsetHeight ) -\n\t\t\t\t\t\tevent.pageY < o.scrollSensitivity ) {\n\t\t\t\t\tthis.scrollParent[ 0 ].scrollTop =\n\t\t\t\t\t\tscrolled = this.scrollParent[ 0 ].scrollTop + o.scrollSpeed;\n\t\t\t\t} else if ( event.pageY - this.overflowOffset.top < o.scrollSensitivity ) {\n\t\t\t\t\tthis.scrollParent[ 0 ].scrollTop =\n\t\t\t\t\t\tscrolled = this.scrollParent[ 0 ].scrollTop - o.scrollSpeed;\n\t\t\t\t}\n\n\t\t\t\tif ( ( this.overflowOffset.left + this.scrollParent[ 0 ].offsetWidth ) -\n\t\t\t\t\t\tevent.pageX < o.scrollSensitivity ) {\n\t\t\t\t\tthis.scrollParent[ 0 ].scrollLeft = scrolled =\n\t\t\t\t\t\tthis.scrollParent[ 0 ].scrollLeft + o.scrollSpeed;\n\t\t\t\t} else if ( event.pageX - this.overflowOffset.left < o.scrollSensitivity ) {\n\t\t\t\t\tthis.scrollParent[ 0 ].scrollLeft = scrolled =\n\t\t\t\t\t\tthis.scrollParent[ 0 ].scrollLeft - o.scrollSpeed;\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tif ( event.pageY - this.document.scrollTop() < o.scrollSensitivity ) {\n\t\t\t\t\tscrolled = this.document.scrollTop( this.document.scrollTop() - o.scrollSpeed );\n\t\t\t\t} else if ( this.window.height() - ( event.pageY - this.document.scrollTop() ) <\n\t\t\t\t\t\to.scrollSensitivity ) {\n\t\t\t\t\tscrolled = this.document.scrollTop( this.document.scrollTop() + o.scrollSpeed );\n\t\t\t\t}\n\n\t\t\t\tif ( event.pageX - this.document.scrollLeft() < o.scrollSensitivity ) {\n\t\t\t\t\tscrolled = this.document.scrollLeft(\n\t\t\t\t\t\tthis.document.scrollLeft() - o.scrollSpeed\n\t\t\t\t\t);\n\t\t\t\t} else if ( this.window.width() - ( event.pageX - this.document.scrollLeft() ) <\n\t\t\t\t\t\to.scrollSensitivity ) {\n\t\t\t\t\tscrolled = this.document.scrollLeft(\n\t\t\t\t\t\tthis.document.scrollLeft() + o.scrollSpeed\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( scrolled !== false && $.ui.ddmanager && !o.dropBehaviour ) {\n\t\t\t\t$.ui.ddmanager.prepareOffsets( this, event );\n\t\t\t}\n\t\t}\n\n\t\t//Regenerate the absolute position used for position checks\n\t\tthis.positionAbs = this._convertPositionTo( \"absolute\" );\n\n\t\t//Set the helper position\n\t\tif ( !this.options.axis || this.options.axis !== \"y\" ) {\n\t\t\tthis.helper[ 0 ].style.left = this.position.left + \"px\";\n\t\t}\n\t\tif ( !this.options.axis || this.options.axis !== \"x\" ) {\n\t\t\tthis.helper[ 0 ].style.top = this.position.top + \"px\";\n\t\t}\n\n\t\t//Rearrange\n\t\tfor ( i = this.items.length - 1; i >= 0; i-- ) {\n\n\t\t\t//Cache variables and intersection, continue if no intersection\n\t\t\titem = this.items[ i ];\n\t\t\titemElement = item.item[ 0 ];\n\t\t\tintersection = this._intersectsWithPointer( item );\n\t\t\tif ( !intersection ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// Only put the placeholder inside the current Container, skip all\n\t\t\t// items from other containers. This works because when moving\n\t\t\t// an item from one container to another the\n\t\t\t// currentContainer is switched before the placeholder is moved.\n\t\t\t//\n\t\t\t// Without this, moving items in \"sub-sortables\" can cause\n\t\t\t// the placeholder to jitter between the outer and inner container.\n\t\t\tif ( item.instance !== this.currentContainer ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// Cannot intersect with itself\n\t\t\t// no useless actions that have been done before\n\t\t\t// no action if the item moved is the parent of the item checked\n\t\t\tif ( itemElement !== this.currentItem[ 0 ] &&\n\t\t\t\tthis.placeholder[ intersection === 1 ? \"next\" : \"prev\" ]()[ 0 ] !== itemElement &&\n\t\t\t\t!$.contains( this.placeholder[ 0 ], itemElement ) &&\n\t\t\t\t( this.options.type === \"semi-dynamic\" ?\n\t\t\t\t\t!$.contains( this.element[ 0 ], itemElement ) :\n\t\t\t\t\ttrue\n\t\t\t\t)\n\t\t\t) {\n\n\t\t\t\tthis.direction = intersection === 1 ? \"down\" : \"up\";\n\n\t\t\t\tif ( this.options.tolerance === \"pointer\" || this._intersectsWithSides( item ) ) {\n\t\t\t\t\tthis._rearrange( event, item );\n\t\t\t\t} else {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tthis._trigger( \"change\", event, this._uiHash() );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\t//Post events to containers\n\t\tthis._contactContainers( event );\n\n\t\t//Interconnect with droppables\n\t\tif ( $.ui.ddmanager ) {\n\t\t\t$.ui.ddmanager.drag( this, event );\n\t\t}\n\n\t\t//Call callbacks\n\t\tthis._trigger( \"sort\", event, this._uiHash() );\n\n\t\tthis.lastPositionAbs = this.positionAbs;\n\t\treturn false;\n\n\t},\n\n\t_mouseStop: function( event, noPropagation ) {\n\n\t\tif ( !event ) {\n\t\t\treturn;\n\t\t}\n\n\t\t//If we are using droppables, inform the manager about the drop\n\t\tif ( $.ui.ddmanager && !this.options.dropBehaviour ) {\n\t\t\t$.ui.ddmanager.drop( this, event );\n\t\t}\n\n\t\tif ( this.options.revert ) {\n\t\t\tvar that = this,\n\t\t\t\tcur = this.placeholder.offset(),\n\t\t\t\taxis = this.options.axis,\n\t\t\t\tanimation = {};\n\n\t\t\tif ( !axis || axis === \"x\" ) {\n\t\t\t\tanimation.left = cur.left - this.offset.parent.left - this.margins.left +\n\t\t\t\t\t( this.offsetParent[ 0 ] === this.document[ 0 ].body ?\n\t\t\t\t\t\t0 :\n\t\t\t\t\t\tthis.offsetParent[ 0 ].scrollLeft\n\t\t\t\t\t);\n\t\t\t}\n\t\t\tif ( !axis || axis === \"y\" ) {\n\t\t\t\tanimation.top = cur.top - this.offset.parent.top - this.margins.top +\n\t\t\t\t\t( this.offsetParent[ 0 ] === this.document[ 0 ].body ?\n\t\t\t\t\t\t0 :\n\t\t\t\t\t\tthis.offsetParent[ 0 ].scrollTop\n\t\t\t\t\t);\n\t\t\t}\n\t\t\tthis.reverting = true;\n\t\t\t$( this.helper ).animate(\n\t\t\t\tanimation,\n\t\t\t\tparseInt( this.options.revert, 10 ) || 500,\n\t\t\t\tfunction() {\n\t\t\t\t\tthat._clear( event );\n\t\t\t\t}\n\t\t\t);\n\t\t} else {\n\t\t\tthis._clear( event, noPropagation );\n\t\t}\n\n\t\treturn false;\n\n\t},\n\n\tcancel: function() {\n\n\t\tif ( this.dragging ) {\n\n\t\t\tthis._mouseUp( new $.Event( \"mouseup\", { target: null } ) );\n\n\t\t\tif ( this.options.helper === \"original\" ) {\n\t\t\t\tthis.currentItem.css( this._storedCSS );\n\t\t\t\tthis._removeClass( this.currentItem, \"ui-sortable-helper\" );\n\t\t\t} else {\n\t\t\t\tthis.currentItem.show();\n\t\t\t}\n\n\t\t\t//Post deactivating events to containers\n\t\t\tfor ( var i = this.containers.length - 1; i >= 0; i-- ) {\n\t\t\t\tthis.containers[ i ]._trigger( \"deactivate\", null, this._uiHash( this ) );\n\t\t\t\tif ( this.containers[ i ].containerCache.over ) {\n\t\t\t\t\tthis.containers[ i ]._trigger( \"out\", null, this._uiHash( this ) );\n\t\t\t\t\tthis.containers[ i ].containerCache.over = 0;\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\n\t\tif ( this.placeholder ) {\n\n\t\t\t//$(this.placeholder[0]).remove(); would have been the jQuery way - unfortunately,\n\t\t\t// it unbinds ALL events from the original node!\n\t\t\tif ( this.placeholder[ 0 ].parentNode ) {\n\t\t\t\tthis.placeholder[ 0 ].parentNode.removeChild( this.placeholder[ 0 ] );\n\t\t\t}\n\t\t\tif ( this.options.helper !== \"original\" && this.helper &&\n\t\t\t\t\tthis.helper[ 0 ].parentNode ) {\n\t\t\t\tthis.helper.remove();\n\t\t\t}\n\n\t\t\t$.extend( this, {\n\t\t\t\thelper: null,\n\t\t\t\tdragging: false,\n\t\t\t\treverting: false,\n\t\t\t\t_noFinalSort: null\n\t\t\t} );\n\n\t\t\tif ( this.domPosition.prev ) {\n\t\t\t\t$( this.domPosition.prev ).after( this.currentItem );\n\t\t\t} else {\n\t\t\t\t$( this.domPosition.parent ).prepend( this.currentItem );\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tserialize: function( o ) {\n\n\t\tvar items = this._getItemsAsjQuery( o && o.connected ),\n\t\t\tstr = [];\n\t\to = o || {};\n\n\t\t$( items ).each( function() {\n\t\t\tvar res = ( $( o.item || this ).attr( o.attribute || \"id\" ) || \"\" )\n\t\t\t\t.match( o.expression || ( /(.+)[\\-=_](.+)/ ) );\n\t\t\tif ( res ) {\n\t\t\t\tstr.push(\n\t\t\t\t\t( o.key || res[ 1 ] + \"[]\" ) +\n\t\t\t\t\t\"=\" + ( o.key && o.expression ? res[ 1 ] : res[ 2 ] ) );\n\t\t\t}\n\t\t} );\n\n\t\tif ( !str.length && o.key ) {\n\t\t\tstr.push( o.key + \"=\" );\n\t\t}\n\n\t\treturn str.join( \"&\" );\n\n\t},\n\n\ttoArray: function( o ) {\n\n\t\tvar items = this._getItemsAsjQuery( o && o.connected ),\n\t\t\tret = [];\n\n\t\to = o || {};\n\n\t\titems.each( function() {\n\t\t\tret.push( $( o.item || this ).attr( o.attribute || \"id\" ) || \"\" );\n\t\t} );\n\t\treturn ret;\n\n\t},\n\n\t/* Be careful with the following core functions */\n\t_intersectsWith: function( item ) {\n\n\t\tvar x1 = this.positionAbs.left,\n\t\t\tx2 = x1 + this.helperProportions.width,\n\t\t\ty1 = this.positionAbs.top,\n\t\t\ty2 = y1 + this.helperProportions.height,\n\t\t\tl = item.left,\n\t\t\tr = l + item.width,\n\t\t\tt = item.top,\n\t\t\tb = t + item.height,\n\t\t\tdyClick = this.offset.click.top,\n\t\t\tdxClick = this.offset.click.left,\n\t\t\tisOverElementHeight = ( this.options.axis === \"x\" ) || ( ( y1 + dyClick ) > t &&\n\t\t\t\t( y1 + dyClick ) < b ),\n\t\t\tisOverElementWidth = ( this.options.axis === \"y\" ) || ( ( x1 + dxClick ) > l &&\n\t\t\t\t( x1 + dxClick ) < r ),\n\t\t\tisOverElement = isOverElementHeight && isOverElementWidth;\n\n\t\tif ( this.options.tolerance === \"pointer\" ||\n\t\t\tthis.options.forcePointerForContainers ||\n\t\t\t( this.options.tolerance !== \"pointer\" &&\n\t\t\t\tthis.helperProportions[ this.floating ? \"width\" : \"height\" ] >\n\t\t\t\titem[ this.floating ? \"width\" : \"height\" ] )\n\t\t) {\n\t\t\treturn isOverElement;\n\t\t} else {\n\n\t\t\treturn ( l < x1 + ( this.helperProportions.width / 2 ) && // Right Half\n\t\t\t\tx2 - ( this.helperProportions.width / 2 ) < r && // Left Half\n\t\t\t\tt < y1 + ( this.helperProportions.height / 2 ) && // Bottom Half\n\t\t\t\ty2 - ( this.helperProportions.height / 2 ) < b ); // Top Half\n\n\t\t}\n\t},\n\n\t_intersectsWithPointer: function( item ) {\n\t\tvar verticalDirection, horizontalDirection,\n\t\t\tisOverElementHeight = ( this.options.axis === \"x\" ) ||\n\t\t\t\tthis._isOverAxis(\n\t\t\t\t\tthis.positionAbs.top + this.offset.click.top, item.top, item.height ),\n\t\t\tisOverElementWidth = ( this.options.axis === \"y\" ) ||\n\t\t\t\tthis._isOverAxis(\n\t\t\t\t\tthis.positionAbs.left + this.offset.click.left, item.left, item.width ),\n\t\t\tisOverElement = isOverElementHeight && isOverElementWidth;\n\n\t\tif ( !isOverElement ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tverticalDirection = this._getDragVerticalDirection();\n\t\thorizontalDirection = this._getDragHorizontalDirection();\n\n\t\treturn this.floating ?\n\t\t\t( ( horizontalDirection === \"right\" || verticalDirection === \"down\" ) ? 2 : 1 )\n\t\t\t: ( verticalDirection && ( verticalDirection === \"down\" ? 2 : 1 ) );\n\n\t},\n\n\t_intersectsWithSides: function( item ) {\n\n\t\tvar isOverBottomHalf = this._isOverAxis( this.positionAbs.top +\n\t\t\t\tthis.offset.click.top, item.top + ( item.height / 2 ), item.height ),\n\t\t\tisOverRightHalf = this._isOverAxis( this.positionAbs.left +\n\t\t\t\tthis.offset.click.left, item.left + ( item.width / 2 ), item.width ),\n\t\t\tverticalDirection = this._getDragVerticalDirection(),\n\t\t\thorizontalDirection = this._getDragHorizontalDirection();\n\n\t\tif ( this.floating && horizontalDirection ) {\n\t\t\treturn ( ( horizontalDirection === \"right\" && isOverRightHalf ) ||\n\t\t\t\t( horizontalDirection === \"left\" && !isOverRightHalf ) );\n\t\t} else {\n\t\t\treturn verticalDirection && ( ( verticalDirection === \"down\" && isOverBottomHalf ) ||\n\t\t\t\t( verticalDirection === \"up\" && !isOverBottomHalf ) );\n\t\t}\n\n\t},\n\n\t_getDragVerticalDirection: function() {\n\t\tvar delta = this.positionAbs.top - this.lastPositionAbs.top;\n\t\treturn delta !== 0 && ( delta > 0 ? \"down\" : \"up\" );\n\t},\n\n\t_getDragHorizontalDirection: function() {\n\t\tvar delta = this.positionAbs.left - this.lastPositionAbs.left;\n\t\treturn delta !== 0 && ( delta > 0 ? \"right\" : \"left\" );\n\t},\n\n\trefresh: function( event ) {\n\t\tthis._refreshItems( event );\n\t\tthis._setHandleClassName();\n\t\tthis.refreshPositions();\n\t\treturn this;\n\t},\n\n\t_connectWith: function() {\n\t\tvar options = this.options;\n\t\treturn options.connectWith.constructor === String ?\n\t\t\t[ options.connectWith ] :\n\t\t\toptions.connectWith;\n\t},\n\n\t_getItemsAsjQuery: function( connected ) {\n\n\t\tvar i, j, cur, inst,\n\t\t\titems = [],\n\t\t\tqueries = [],\n\t\t\tconnectWith = this._connectWith();\n\n\t\tif ( connectWith && connected ) {\n\t\t\tfor ( i = connectWith.length - 1; i >= 0; i-- ) {\n\t\t\t\tcur = $( connectWith[ i ], this.document[ 0 ] );\n\t\t\t\tfor ( j = cur.length - 1; j >= 0; j-- ) {\n\t\t\t\t\tinst = $.data( cur[ j ], this.widgetFullName );\n\t\t\t\t\tif ( inst && inst !== this && !inst.options.disabled ) {\n\t\t\t\t\t\tqueries.push( [ $.isFunction( inst.options.items ) ?\n\t\t\t\t\t\t\tinst.options.items.call( inst.element ) :\n\t\t\t\t\t\t\t$( inst.options.items, inst.element )\n\t\t\t\t\t\t\t\t.not( \".ui-sortable-helper\" )\n\t\t\t\t\t\t\t\t.not( \".ui-sortable-placeholder\" ), inst ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tqueries.push( [ $.isFunction( this.options.items ) ?\n\t\t\tthis.options.items\n\t\t\t\t.call( this.element, null, { options: this.options, item: this.currentItem } ) :\n\t\t\t$( this.options.items, this.element )\n\t\t\t\t.not( \".ui-sortable-helper\" )\n\t\t\t\t.not( \".ui-sortable-placeholder\" ), this ] );\n\n\t\tfunction addItems() {\n\t\t\titems.push( this );\n\t\t}\n\t\tfor ( i = queries.length - 1; i >= 0; i-- ) {\n\t\t\tqueries[ i ][ 0 ].each( addItems );\n\t\t}\n\n\t\treturn $( items );\n\n\t},\n\n\t_removeCurrentsFromItems: function() {\n\n\t\tvar list = this.currentItem.find( \":data(\" + this.widgetName + \"-item)\" );\n\n\t\tthis.items = $.grep( this.items, function( item ) {\n\t\t\tfor ( var j = 0; j < list.length; j++ ) {\n\t\t\t\tif ( list[ j ] === item.item[ 0 ] ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t} );\n\n\t},\n\n\t_refreshItems: function( event ) {\n\n\t\tthis.items = [];\n\t\tthis.containers = [ this ];\n\n\t\tvar i, j, cur, inst, targetData, _queries, item, queriesLength,\n\t\t\titems = this.items,\n\t\t\tqueries = [ [ $.isFunction( this.options.items ) ?\n\t\t\t\tthis.options.items.call( this.element[ 0 ], event, { item: this.currentItem } ) :\n\t\t\t\t$( this.options.items, this.element ), this ] ],\n\t\t\tconnectWith = this._connectWith();\n\n\t\t//Shouldn't be run the first time through due to massive slow-down\n\t\tif ( connectWith && this.ready ) {\n\t\t\tfor ( i = connectWith.length - 1; i >= 0; i-- ) {\n\t\t\t\tcur = $( connectWith[ i ], this.document[ 0 ] );\n\t\t\t\tfor ( j = cur.length - 1; j >= 0; j-- ) {\n\t\t\t\t\tinst = $.data( cur[ j ], this.widgetFullName );\n\t\t\t\t\tif ( inst && inst !== this && !inst.options.disabled ) {\n\t\t\t\t\t\tqueries.push( [ $.isFunction( inst.options.items ) ?\n\t\t\t\t\t\t\tinst.options.items\n\t\t\t\t\t\t\t\t.call( inst.element[ 0 ], event, { item: this.currentItem } ) :\n\t\t\t\t\t\t\t$( inst.options.items, inst.element ), inst ] );\n\t\t\t\t\t\tthis.containers.push( inst );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfor ( i = queries.length - 1; i >= 0; i-- ) {\n\t\t\ttargetData = queries[ i ][ 1 ];\n\t\t\t_queries = queries[ i ][ 0 ];\n\n\t\t\tfor ( j = 0, queriesLength = _queries.length; j < queriesLength; j++ ) {\n\t\t\t\titem = $( _queries[ j ] );\n\n\t\t\t\t// Data for target checking (mouse manager)\n\t\t\t\titem.data( this.widgetName + \"-item\", targetData );\n\n\t\t\t\titems.push( {\n\t\t\t\t\titem: item,\n\t\t\t\t\tinstance: targetData,\n\t\t\t\t\twidth: 0, height: 0,\n\t\t\t\t\tleft: 0, top: 0\n\t\t\t\t} );\n\t\t\t}\n\t\t}\n\n\t},\n\n\trefreshPositions: function( fast ) {\n\n\t\t// Determine whether items are being displayed horizontally\n\t\tthis.floating = this.items.length ?\n\t\t\tthis.options.axis === \"x\" || this._isFloating( this.items[ 0 ].item ) :\n\t\t\tfalse;\n\n\t\t//This has to be redone because due to the item being moved out/into the offsetParent,\n\t\t// the offsetParent's position will change\n\t\tif ( this.offsetParent && this.helper ) {\n\t\t\tthis.offset.parent = this._getParentOffset();\n\t\t}\n\n\t\tvar i, item, t, p;\n\n\t\tfor ( i = this.items.length - 1; i >= 0; i-- ) {\n\t\t\titem = this.items[ i ];\n\n\t\t\t//We ignore calculating positions of all connected containers when we're not over them\n\t\t\tif ( item.instance !== this.currentContainer && this.currentContainer &&\n\t\t\t\t\titem.item[ 0 ] !== this.currentItem[ 0 ] ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tt = this.options.toleranceElement ?\n\t\t\t\t$( this.options.toleranceElement, item.item ) :\n\t\t\t\titem.item;\n\n\t\t\tif ( !fast ) {\n\t\t\t\titem.width = t.outerWidth();\n\t\t\t\titem.height = t.outerHeight();\n\t\t\t}\n\n\t\t\tp = t.offset();\n\t\t\titem.left = p.left;\n\t\t\titem.top = p.top;\n\t\t}\n\n\t\tif ( this.options.custom && this.options.custom.refreshContainers ) {\n\t\t\tthis.options.custom.refreshContainers.call( this );\n\t\t} else {\n\t\t\tfor ( i = this.containers.length - 1; i >= 0; i-- ) {\n\t\t\t\tp = this.containers[ i ].element.offset();\n\t\t\t\tthis.containers[ i ].containerCache.left = p.left;\n\t\t\t\tthis.containers[ i ].containerCache.top = p.top;\n\t\t\t\tthis.containers[ i ].containerCache.width =\n\t\t\t\t\tthis.containers[ i ].element.outerWidth();\n\t\t\t\tthis.containers[ i ].containerCache.height =\n\t\t\t\t\tthis.containers[ i ].element.outerHeight();\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\t_createPlaceholder: function( that ) {\n\t\tthat = that || this;\n\t\tvar className,\n\t\t\to = that.options;\n\n\t\tif ( !o.placeholder || o.placeholder.constructor === String ) {\n\t\t\tclassName = o.placeholder;\n\t\t\to.placeholder = {\n\t\t\t\telement: function() {\n\n\t\t\t\t\tvar nodeName = that.currentItem[ 0 ].nodeName.toLowerCase(),\n\t\t\t\t\t\telement = $( \"<\" + nodeName + \">\", that.document[ 0 ] );\n\n\t\t\t\t\t\tthat._addClass( element, \"ui-sortable-placeholder\",\n\t\t\t\t\t\t\t\tclassName || that.currentItem[ 0 ].className )\n\t\t\t\t\t\t\t._removeClass( element, \"ui-sortable-helper\" );\n\n\t\t\t\t\tif ( nodeName === \"tbody\" ) {\n\t\t\t\t\t\tthat._createTrPlaceholder(\n\t\t\t\t\t\t\tthat.currentItem.find( \"tr\" ).eq( 0 ),\n\t\t\t\t\t\t\t$( \"<tr>\", that.document[ 0 ] ).appendTo( element )\n\t\t\t\t\t\t);\n\t\t\t\t\t} else if ( nodeName === \"tr\" ) {\n\t\t\t\t\t\tthat._createTrPlaceholder( that.currentItem, element );\n\t\t\t\t\t} else if ( nodeName === \"img\" ) {\n\t\t\t\t\t\telement.attr( \"src\", that.currentItem.attr( \"src\" ) );\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( !className ) {\n\t\t\t\t\t\telement.css( \"visibility\", \"hidden\" );\n\t\t\t\t\t}\n\n\t\t\t\t\treturn element;\n\t\t\t\t},\n\t\t\t\tupdate: function( container, p ) {\n\n\t\t\t\t\t// 1. If a className is set as 'placeholder option, we don't force sizes -\n\t\t\t\t\t// the class is responsible for that\n\t\t\t\t\t// 2. The option 'forcePlaceholderSize can be enabled to force it even if a\n\t\t\t\t\t// class name is specified\n\t\t\t\t\tif ( className && !o.forcePlaceholderSize ) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\t//If the element doesn't have a actual height by itself (without styles coming\n\t\t\t\t\t// from a stylesheet), it receives the inline height from the dragged item\n\t\t\t\t\tif ( !p.height() ) {\n\t\t\t\t\t\tp.height(\n\t\t\t\t\t\t\tthat.currentItem.innerHeight() -\n\t\t\t\t\t\t\tparseInt( that.currentItem.css( \"paddingTop\" ) || 0, 10 ) -\n\t\t\t\t\t\t\tparseInt( that.currentItem.css( \"paddingBottom\" ) || 0, 10 ) );\n\t\t\t\t\t}\n\t\t\t\t\tif ( !p.width() ) {\n\t\t\t\t\t\tp.width(\n\t\t\t\t\t\t\tthat.currentItem.innerWidth() -\n\t\t\t\t\t\t\tparseInt( that.currentItem.css( \"paddingLeft\" ) || 0, 10 ) -\n\t\t\t\t\t\t\tparseInt( that.currentItem.css( \"paddingRight\" ) || 0, 10 ) );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\n\t\t//Create the placeholder\n\t\tthat.placeholder = $( o.placeholder.element.call( that.element, that.currentItem ) );\n\n\t\t//Append it after the actual current item\n\t\tthat.currentItem.after( that.placeholder );\n\n\t\t//Update the size of the placeholder (TODO: Logic to fuzzy, see line 316/317)\n\t\to.placeholder.update( that, that.placeholder );\n\n\t},\n\n\t_createTrPlaceholder: function( sourceTr, targetTr ) {\n\t\tvar that = this;\n\n\t\tsourceTr.children().each( function() {\n\t\t\t$( \"<td>&#160;</td>\", that.document[ 0 ] )\n\t\t\t\t.attr( \"colspan\", $( this ).attr( \"colspan\" ) || 1 )\n\t\t\t\t.appendTo( targetTr );\n\t\t} );\n\t},\n\n\t_contactContainers: function( event ) {\n\t\tvar i, j, dist, itemWithLeastDistance, posProperty, sizeProperty, cur, nearBottom,\n\t\t\tfloating, axis,\n\t\t\tinnermostContainer = null,\n\t\t\tinnermostIndex = null;\n\n\t\t// Get innermost container that intersects with item\n\t\tfor ( i = this.containers.length - 1; i >= 0; i-- ) {\n\n\t\t\t// Never consider a container that's located within the item itself\n\t\t\tif ( $.contains( this.currentItem[ 0 ], this.containers[ i ].element[ 0 ] ) ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif ( this._intersectsWith( this.containers[ i ].containerCache ) ) {\n\n\t\t\t\t// If we've already found a container and it's more \"inner\" than this, then continue\n\t\t\t\tif ( innermostContainer &&\n\t\t\t\t\t\t$.contains(\n\t\t\t\t\t\t\tthis.containers[ i ].element[ 0 ],\n\t\t\t\t\t\t\tinnermostContainer.element[ 0 ] ) ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tinnermostContainer = this.containers[ i ];\n\t\t\t\tinnermostIndex = i;\n\n\t\t\t} else {\n\n\t\t\t\t// container doesn't intersect. trigger \"out\" event if necessary\n\t\t\t\tif ( this.containers[ i ].containerCache.over ) {\n\t\t\t\t\tthis.containers[ i ]._trigger( \"out\", event, this._uiHash( this ) );\n\t\t\t\t\tthis.containers[ i ].containerCache.over = 0;\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\n\t\t// If no intersecting containers found, return\n\t\tif ( !innermostContainer ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Move the item into the container if it's not there already\n\t\tif ( this.containers.length === 1 ) {\n\t\t\tif ( !this.containers[ innermostIndex ].containerCache.over ) {\n\t\t\t\tthis.containers[ innermostIndex ]._trigger( \"over\", event, this._uiHash( this ) );\n\t\t\t\tthis.containers[ innermostIndex ].containerCache.over = 1;\n\t\t\t}\n\t\t} else {\n\n\t\t\t// When entering a new container, we will find the item with the least distance and\n\t\t\t// append our item near it\n\t\t\tdist = 10000;\n\t\t\titemWithLeastDistance = null;\n\t\t\tfloating = innermostContainer.floating || this._isFloating( this.currentItem );\n\t\t\tposProperty = floating ? \"left\" : \"top\";\n\t\t\tsizeProperty = floating ? \"width\" : \"height\";\n\t\t\taxis = floating ? \"pageX\" : \"pageY\";\n\n\t\t\tfor ( j = this.items.length - 1; j >= 0; j-- ) {\n\t\t\t\tif ( !$.contains(\n\t\t\t\t\t\tthis.containers[ innermostIndex ].element[ 0 ], this.items[ j ].item[ 0 ] )\n\t\t\t\t) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif ( this.items[ j ].item[ 0 ] === this.currentItem[ 0 ] ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tcur = this.items[ j ].item.offset()[ posProperty ];\n\t\t\t\tnearBottom = false;\n\t\t\t\tif ( event[ axis ] - cur > this.items[ j ][ sizeProperty ] / 2 ) {\n\t\t\t\t\tnearBottom = true;\n\t\t\t\t}\n\n\t\t\t\tif ( Math.abs( event[ axis ] - cur ) < dist ) {\n\t\t\t\t\tdist = Math.abs( event[ axis ] - cur );\n\t\t\t\t\titemWithLeastDistance = this.items[ j ];\n\t\t\t\t\tthis.direction = nearBottom ? \"up\" : \"down\";\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t//Check if dropOnEmpty is enabled\n\t\t\tif ( !itemWithLeastDistance && !this.options.dropOnEmpty ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( this.currentContainer === this.containers[ innermostIndex ] ) {\n\t\t\t\tif ( !this.currentContainer.containerCache.over ) {\n\t\t\t\t\tthis.containers[ innermostIndex ]._trigger( \"over\", event, this._uiHash() );\n\t\t\t\t\tthis.currentContainer.containerCache.over = 1;\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\titemWithLeastDistance ?\n\t\t\t\tthis._rearrange( event, itemWithLeastDistance, null, true ) :\n\t\t\t\tthis._rearrange( event, null, this.containers[ innermostIndex ].element, true );\n\t\t\tthis._trigger( \"change\", event, this._uiHash() );\n\t\t\tthis.containers[ innermostIndex ]._trigger( \"change\", event, this._uiHash( this ) );\n\t\t\tthis.currentContainer = this.containers[ innermostIndex ];\n\n\t\t\t//Update the placeholder\n\t\t\tthis.options.placeholder.update( this.currentContainer, this.placeholder );\n\n\t\t\tthis.containers[ innermostIndex ]._trigger( \"over\", event, this._uiHash( this ) );\n\t\t\tthis.containers[ innermostIndex ].containerCache.over = 1;\n\t\t}\n\n\t},\n\n\t_createHelper: function( event ) {\n\n\t\tvar o = this.options,\n\t\t\thelper = $.isFunction( o.helper ) ?\n\t\t\t\t$( o.helper.apply( this.element[ 0 ], [ event, this.currentItem ] ) ) :\n\t\t\t\t( o.helper === \"clone\" ? this.currentItem.clone() : this.currentItem );\n\n\t\t//Add the helper to the DOM if that didn't happen already\n\t\tif ( !helper.parents( \"body\" ).length ) {\n\t\t\t$( o.appendTo !== \"parent\" ?\n\t\t\t\to.appendTo :\n\t\t\t\tthis.currentItem[ 0 ].parentNode )[ 0 ].appendChild( helper[ 0 ] );\n\t\t}\n\n\t\tif ( helper[ 0 ] === this.currentItem[ 0 ] ) {\n\t\t\tthis._storedCSS = {\n\t\t\t\twidth: this.currentItem[ 0 ].style.width,\n\t\t\t\theight: this.currentItem[ 0 ].style.height,\n\t\t\t\tposition: this.currentItem.css( \"position\" ),\n\t\t\t\ttop: this.currentItem.css( \"top\" ),\n\t\t\t\tleft: this.currentItem.css( \"left\" )\n\t\t\t};\n\t\t}\n\n\t\tif ( !helper[ 0 ].style.width || o.forceHelperSize ) {\n\t\t\thelper.width( this.currentItem.width() );\n\t\t}\n\t\tif ( !helper[ 0 ].style.height || o.forceHelperSize ) {\n\t\t\thelper.height( this.currentItem.height() );\n\t\t}\n\n\t\treturn helper;\n\n\t},\n\n\t_adjustOffsetFromHelper: function( obj ) {\n\t\tif ( typeof obj === \"string\" ) {\n\t\t\tobj = obj.split( \" \" );\n\t\t}\n\t\tif ( $.isArray( obj ) ) {\n\t\t\tobj = { left: +obj[ 0 ], top: +obj[ 1 ] || 0 };\n\t\t}\n\t\tif ( \"left\" in obj ) {\n\t\t\tthis.offset.click.left = obj.left + this.margins.left;\n\t\t}\n\t\tif ( \"right\" in obj ) {\n\t\t\tthis.offset.click.left = this.helperProportions.width - obj.right + this.margins.left;\n\t\t}\n\t\tif ( \"top\" in obj ) {\n\t\t\tthis.offset.click.top = obj.top + this.margins.top;\n\t\t}\n\t\tif ( \"bottom\" in obj ) {\n\t\t\tthis.offset.click.top = this.helperProportions.height - obj.bottom + this.margins.top;\n\t\t}\n\t},\n\n\t_getParentOffset: function() {\n\n\t\t//Get the offsetParent and cache its position\n\t\tthis.offsetParent = this.helper.offsetParent();\n\t\tvar po = this.offsetParent.offset();\n\n\t\t// This is a special case where we need to modify a offset calculated on start, since the\n\t\t// following happened:\n\t\t// 1. The position of the helper is absolute, so it's position is calculated based on the\n\t\t// next positioned parent\n\t\t// 2. The actual offset parent is a child of the scroll parent, and the scroll parent isn't\n\t\t// the document, which means that the scroll is included in the initial calculation of the\n\t\t// offset of the parent, and never recalculated upon drag\n\t\tif ( this.cssPosition === \"absolute\" && this.scrollParent[ 0 ] !== this.document[ 0 ] &&\n\t\t\t\t$.contains( this.scrollParent[ 0 ], this.offsetParent[ 0 ] ) ) {\n\t\t\tpo.left += this.scrollParent.scrollLeft();\n\t\t\tpo.top += this.scrollParent.scrollTop();\n\t\t}\n\n\t\t// This needs to be actually done for all browsers, since pageX/pageY includes this\n\t\t// information with an ugly IE fix\n\t\tif ( this.offsetParent[ 0 ] === this.document[ 0 ].body ||\n\t\t\t\t( this.offsetParent[ 0 ].tagName &&\n\t\t\t\tthis.offsetParent[ 0 ].tagName.toLowerCase() === \"html\" && $.ui.ie ) ) {\n\t\t\tpo = { top: 0, left: 0 };\n\t\t}\n\n\t\treturn {\n\t\t\ttop: po.top + ( parseInt( this.offsetParent.css( \"borderTopWidth\" ), 10 ) || 0 ),\n\t\t\tleft: po.left + ( parseInt( this.offsetParent.css( \"borderLeftWidth\" ), 10 ) || 0 )\n\t\t};\n\n\t},\n\n\t_getRelativeOffset: function() {\n\n\t\tif ( this.cssPosition === \"relative\" ) {\n\t\t\tvar p = this.currentItem.position();\n\t\t\treturn {\n\t\t\t\ttop: p.top - ( parseInt( this.helper.css( \"top\" ), 10 ) || 0 ) +\n\t\t\t\t\tthis.scrollParent.scrollTop(),\n\t\t\t\tleft: p.left - ( parseInt( this.helper.css( \"left\" ), 10 ) || 0 ) +\n\t\t\t\t\tthis.scrollParent.scrollLeft()\n\t\t\t};\n\t\t} else {\n\t\t\treturn { top: 0, left: 0 };\n\t\t}\n\n\t},\n\n\t_cacheMargins: function() {\n\t\tthis.margins = {\n\t\t\tleft: ( parseInt( this.currentItem.css( \"marginLeft\" ), 10 ) || 0 ),\n\t\t\ttop: ( parseInt( this.currentItem.css( \"marginTop\" ), 10 ) || 0 )\n\t\t};\n\t},\n\n\t_cacheHelperProportions: function() {\n\t\tthis.helperProportions = {\n\t\t\twidth: this.helper.outerWidth(),\n\t\t\theight: this.helper.outerHeight()\n\t\t};\n\t},\n\n\t_setContainment: function() {\n\n\t\tvar ce, co, over,\n\t\t\to = this.options;\n\t\tif ( o.containment === \"parent\" ) {\n\t\t\to.containment = this.helper[ 0 ].parentNode;\n\t\t}\n\t\tif ( o.containment === \"document\" || o.containment === \"window\" ) {\n\t\t\tthis.containment = [\n\t\t\t\t0 - this.offset.relative.left - this.offset.parent.left,\n\t\t\t\t0 - this.offset.relative.top - this.offset.parent.top,\n\t\t\t\to.containment === \"document\" ?\n\t\t\t\t\tthis.document.width() :\n\t\t\t\t\tthis.window.width() - this.helperProportions.width - this.margins.left,\n\t\t\t\t( o.containment === \"document\" ?\n\t\t\t\t\t( this.document.height() || document.body.parentNode.scrollHeight ) :\n\t\t\t\t\tthis.window.height() || this.document[ 0 ].body.parentNode.scrollHeight\n\t\t\t\t) - this.helperProportions.height - this.margins.top\n\t\t\t];\n\t\t}\n\n\t\tif ( !( /^(document|window|parent)$/ ).test( o.containment ) ) {\n\t\t\tce = $( o.containment )[ 0 ];\n\t\t\tco = $( o.containment ).offset();\n\t\t\tover = ( $( ce ).css( \"overflow\" ) !== \"hidden\" );\n\n\t\t\tthis.containment = [\n\t\t\t\tco.left + ( parseInt( $( ce ).css( \"borderLeftWidth\" ), 10 ) || 0 ) +\n\t\t\t\t\t( parseInt( $( ce ).css( \"paddingLeft\" ), 10 ) || 0 ) - this.margins.left,\n\t\t\t\tco.top + ( parseInt( $( ce ).css( \"borderTopWidth\" ), 10 ) || 0 ) +\n\t\t\t\t\t( parseInt( $( ce ).css( \"paddingTop\" ), 10 ) || 0 ) - this.margins.top,\n\t\t\t\tco.left + ( over ? Math.max( ce.scrollWidth, ce.offsetWidth ) : ce.offsetWidth ) -\n\t\t\t\t\t( parseInt( $( ce ).css( \"borderLeftWidth\" ), 10 ) || 0 ) -\n\t\t\t\t\t( parseInt( $( ce ).css( \"paddingRight\" ), 10 ) || 0 ) -\n\t\t\t\t\tthis.helperProportions.width - this.margins.left,\n\t\t\t\tco.top + ( over ? Math.max( ce.scrollHeight, ce.offsetHeight ) : ce.offsetHeight ) -\n\t\t\t\t\t( parseInt( $( ce ).css( \"borderTopWidth\" ), 10 ) || 0 ) -\n\t\t\t\t\t( parseInt( $( ce ).css( \"paddingBottom\" ), 10 ) || 0 ) -\n\t\t\t\t\tthis.helperProportions.height - this.margins.top\n\t\t\t];\n\t\t}\n\n\t},\n\n\t_convertPositionTo: function( d, pos ) {\n\n\t\tif ( !pos ) {\n\t\t\tpos = this.position;\n\t\t}\n\t\tvar mod = d === \"absolute\" ? 1 : -1,\n\t\t\tscroll = this.cssPosition === \"absolute\" &&\n\t\t\t\t!( this.scrollParent[ 0 ] !== this.document[ 0 ] &&\n\t\t\t\t$.contains( this.scrollParent[ 0 ], this.offsetParent[ 0 ] ) ) ?\n\t\t\t\t\tthis.offsetParent :\n\t\t\t\t\tthis.scrollParent,\n\t\t\tscrollIsRootNode = ( /(html|body)/i ).test( scroll[ 0 ].tagName );\n\n\t\treturn {\n\t\t\ttop: (\n\n\t\t\t\t// The absolute mouse position\n\t\t\t\tpos.top\t+\n\n\t\t\t\t// Only for relative positioned nodes: Relative offset from element to offset parent\n\t\t\t\tthis.offset.relative.top * mod +\n\n\t\t\t\t// The offsetParent's offset without borders (offset + border)\n\t\t\t\tthis.offset.parent.top * mod -\n\t\t\t\t( ( this.cssPosition === \"fixed\" ?\n\t\t\t\t\t-this.scrollParent.scrollTop() :\n\t\t\t\t\t( scrollIsRootNode ? 0 : scroll.scrollTop() ) ) * mod )\n\t\t\t),\n\t\t\tleft: (\n\n\t\t\t\t// The absolute mouse position\n\t\t\t\tpos.left +\n\n\t\t\t\t// Only for relative positioned nodes: Relative offset from element to offset parent\n\t\t\t\tthis.offset.relative.left * mod +\n\n\t\t\t\t// The offsetParent's offset without borders (offset + border)\n\t\t\t\tthis.offset.parent.left * mod\t-\n\t\t\t\t( ( this.cssPosition === \"fixed\" ?\n\t\t\t\t\t-this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 :\n\t\t\t\t\tscroll.scrollLeft() ) * mod )\n\t\t\t)\n\t\t};\n\n\t},\n\n\t_generatePosition: function( event ) {\n\n\t\tvar top, left,\n\t\t\to = this.options,\n\t\t\tpageX = event.pageX,\n\t\t\tpageY = event.pageY,\n\t\t\tscroll = this.cssPosition === \"absolute\" &&\n\t\t\t\t!( this.scrollParent[ 0 ] !== this.document[ 0 ] &&\n\t\t\t\t$.contains( this.scrollParent[ 0 ], this.offsetParent[ 0 ] ) ) ?\n\t\t\t\t\tthis.offsetParent :\n\t\t\t\t\tthis.scrollParent,\n\t\t\t\tscrollIsRootNode = ( /(html|body)/i ).test( scroll[ 0 ].tagName );\n\n\t\t// This is another very weird special case that only happens for relative elements:\n\t\t// 1. If the css position is relative\n\t\t// 2. and the scroll parent is the document or similar to the offset parent\n\t\t// we have to refresh the relative offset during the scroll so there are no jumps\n\t\tif ( this.cssPosition === \"relative\" && !( this.scrollParent[ 0 ] !== this.document[ 0 ] &&\n\t\t\t\tthis.scrollParent[ 0 ] !== this.offsetParent[ 0 ] ) ) {\n\t\t\tthis.offset.relative = this._getRelativeOffset();\n\t\t}\n\n\t\t/*\n\t\t * - Position constraining -\n\t\t * Constrain the position to a mix of grid, containment.\n\t\t */\n\n\t\tif ( this.originalPosition ) { //If we are not dragging yet, we won't check for options\n\n\t\t\tif ( this.containment ) {\n\t\t\t\tif ( event.pageX - this.offset.click.left < this.containment[ 0 ] ) {\n\t\t\t\t\tpageX = this.containment[ 0 ] + this.offset.click.left;\n\t\t\t\t}\n\t\t\t\tif ( event.pageY - this.offset.click.top < this.containment[ 1 ] ) {\n\t\t\t\t\tpageY = this.containment[ 1 ] + this.offset.click.top;\n\t\t\t\t}\n\t\t\t\tif ( event.pageX - this.offset.click.left > this.containment[ 2 ] ) {\n\t\t\t\t\tpageX = this.containment[ 2 ] + this.offset.click.left;\n\t\t\t\t}\n\t\t\t\tif ( event.pageY - this.offset.click.top > this.containment[ 3 ] ) {\n\t\t\t\t\tpageY = this.containment[ 3 ] + this.offset.click.top;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( o.grid ) {\n\t\t\t\ttop = this.originalPageY + Math.round( ( pageY - this.originalPageY ) /\n\t\t\t\t\to.grid[ 1 ] ) * o.grid[ 1 ];\n\t\t\t\tpageY = this.containment ?\n\t\t\t\t\t( ( top - this.offset.click.top >= this.containment[ 1 ] &&\n\t\t\t\t\t\ttop - this.offset.click.top <= this.containment[ 3 ] ) ?\n\t\t\t\t\t\t\ttop :\n\t\t\t\t\t\t\t( ( top - this.offset.click.top >= this.containment[ 1 ] ) ?\n\t\t\t\t\t\t\t\ttop - o.grid[ 1 ] : top + o.grid[ 1 ] ) ) :\n\t\t\t\t\t\t\t\ttop;\n\n\t\t\t\tleft = this.originalPageX + Math.round( ( pageX - this.originalPageX ) /\n\t\t\t\t\to.grid[ 0 ] ) * o.grid[ 0 ];\n\t\t\t\tpageX = this.containment ?\n\t\t\t\t\t( ( left - this.offset.click.left >= this.containment[ 0 ] &&\n\t\t\t\t\t\tleft - this.offset.click.left <= this.containment[ 2 ] ) ?\n\t\t\t\t\t\t\tleft :\n\t\t\t\t\t\t\t( ( left - this.offset.click.left >= this.containment[ 0 ] ) ?\n\t\t\t\t\t\t\t\tleft - o.grid[ 0 ] : left + o.grid[ 0 ] ) ) :\n\t\t\t\t\t\t\t\tleft;\n\t\t\t}\n\n\t\t}\n\n\t\treturn {\n\t\t\ttop: (\n\n\t\t\t\t// The absolute mouse position\n\t\t\t\tpageY -\n\n\t\t\t\t// Click offset (relative to the element)\n\t\t\t\tthis.offset.click.top -\n\n\t\t\t\t// Only for relative positioned nodes: Relative offset from element to offset parent\n\t\t\t\tthis.offset.relative.top -\n\n\t\t\t\t// The offsetParent's offset without borders (offset + border)\n\t\t\t\tthis.offset.parent.top +\n\t\t\t\t( ( this.cssPosition === \"fixed\" ?\n\t\t\t\t\t-this.scrollParent.scrollTop() :\n\t\t\t\t\t( scrollIsRootNode ? 0 : scroll.scrollTop() ) ) )\n\t\t\t),\n\t\t\tleft: (\n\n\t\t\t\t// The absolute mouse position\n\t\t\t\tpageX -\n\n\t\t\t\t// Click offset (relative to the element)\n\t\t\t\tthis.offset.click.left -\n\n\t\t\t\t// Only for relative positioned nodes: Relative offset from element to offset parent\n\t\t\t\tthis.offset.relative.left -\n\n\t\t\t\t// The offsetParent's offset without borders (offset + border)\n\t\t\t\tthis.offset.parent.left +\n\t\t\t\t( ( this.cssPosition === \"fixed\" ?\n\t\t\t\t\t-this.scrollParent.scrollLeft() :\n\t\t\t\t\tscrollIsRootNode ? 0 : scroll.scrollLeft() ) )\n\t\t\t)\n\t\t};\n\n\t},\n\n\t_rearrange: function( event, i, a, hardRefresh ) {\n\n\t\ta ? a[ 0 ].appendChild( this.placeholder[ 0 ] ) :\n\t\t\ti.item[ 0 ].parentNode.insertBefore( this.placeholder[ 0 ],\n\t\t\t\t( this.direction === \"down\" ? i.item[ 0 ] : i.item[ 0 ].nextSibling ) );\n\n\t\t//Various things done here to improve the performance:\n\t\t// 1. we create a setTimeout, that calls refreshPositions\n\t\t// 2. on the instance, we have a counter variable, that get's higher after every append\n\t\t// 3. on the local scope, we copy the counter variable, and check in the timeout,\n\t\t// if it's still the same\n\t\t// 4. this lets only the last addition to the timeout stack through\n\t\tthis.counter = this.counter ? ++this.counter : 1;\n\t\tvar counter = this.counter;\n\n\t\tthis._delay( function() {\n\t\t\tif ( counter === this.counter ) {\n\n\t\t\t\t//Precompute after each DOM insertion, NOT on mousemove\n\t\t\t\tthis.refreshPositions( !hardRefresh );\n\t\t\t}\n\t\t} );\n\n\t},\n\n\t_clear: function( event, noPropagation ) {\n\n\t\tthis.reverting = false;\n\n\t\t// We delay all events that have to be triggered to after the point where the placeholder\n\t\t// has been removed and everything else normalized again\n\t\tvar i,\n\t\t\tdelayedTriggers = [];\n\n\t\t// We first have to update the dom position of the actual currentItem\n\t\t// Note: don't do it if the current item is already removed (by a user), or it gets\n\t\t// reappended (see #4088)\n\t\tif ( !this._noFinalSort && this.currentItem.parent().length ) {\n\t\t\tthis.placeholder.before( this.currentItem );\n\t\t}\n\t\tthis._noFinalSort = null;\n\n\t\tif ( this.helper[ 0 ] === this.currentItem[ 0 ] ) {\n\t\t\tfor ( i in this._storedCSS ) {\n\t\t\t\tif ( this._storedCSS[ i ] === \"auto\" || this._storedCSS[ i ] === \"static\" ) {\n\t\t\t\t\tthis._storedCSS[ i ] = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.currentItem.css( this._storedCSS );\n\t\t\tthis._removeClass( this.currentItem, \"ui-sortable-helper\" );\n\t\t} else {\n\t\t\tthis.currentItem.show();\n\t\t}\n\n\t\tif ( this.fromOutside && !noPropagation ) {\n\t\t\tdelayedTriggers.push( function( event ) {\n\t\t\t\tthis._trigger( \"receive\", event, this._uiHash( this.fromOutside ) );\n\t\t\t} );\n\t\t}\n\t\tif ( ( this.fromOutside ||\n\t\t\t\tthis.domPosition.prev !==\n\t\t\t\tthis.currentItem.prev().not( \".ui-sortable-helper\" )[ 0 ] ||\n\t\t\t\tthis.domPosition.parent !== this.currentItem.parent()[ 0 ] ) && !noPropagation ) {\n\n\t\t\t// Trigger update callback if the DOM position has changed\n\t\t\tdelayedTriggers.push( function( event ) {\n\t\t\t\tthis._trigger( \"update\", event, this._uiHash() );\n\t\t\t} );\n\t\t}\n\n\t\t// Check if the items Container has Changed and trigger appropriate\n\t\t// events.\n\t\tif ( this !== this.currentContainer ) {\n\t\t\tif ( !noPropagation ) {\n\t\t\t\tdelayedTriggers.push( function( event ) {\n\t\t\t\t\tthis._trigger( \"remove\", event, this._uiHash() );\n\t\t\t\t} );\n\t\t\t\tdelayedTriggers.push( ( function( c ) {\n\t\t\t\t\treturn function( event ) {\n\t\t\t\t\t\tc._trigger( \"receive\", event, this._uiHash( this ) );\n\t\t\t\t\t};\n\t\t\t\t} ).call( this, this.currentContainer ) );\n\t\t\t\tdelayedTriggers.push( ( function( c ) {\n\t\t\t\t\treturn function( event ) {\n\t\t\t\t\t\tc._trigger( \"update\", event, this._uiHash( this ) );\n\t\t\t\t\t};\n\t\t\t\t} ).call( this, this.currentContainer ) );\n\t\t\t}\n\t\t}\n\n\t\t//Post events to containers\n\t\tfunction delayEvent( type, instance, container ) {\n\t\t\treturn function( event ) {\n\t\t\t\tcontainer._trigger( type, event, instance._uiHash( instance ) );\n\t\t\t};\n\t\t}\n\t\tfor ( i = this.containers.length - 1; i >= 0; i-- ) {\n\t\t\tif ( !noPropagation ) {\n\t\t\t\tdelayedTriggers.push( delayEvent( \"deactivate\", this, this.containers[ i ] ) );\n\t\t\t}\n\t\t\tif ( this.containers[ i ].containerCache.over ) {\n\t\t\t\tdelayedTriggers.push( delayEvent( \"out\", this, this.containers[ i ] ) );\n\t\t\t\tthis.containers[ i ].containerCache.over = 0;\n\t\t\t}\n\t\t}\n\n\t\t//Do what was originally in plugins\n\t\tif ( this.storedCursor ) {\n\t\t\tthis.document.find( \"body\" ).css( \"cursor\", this.storedCursor );\n\t\t\tthis.storedStylesheet.remove();\n\t\t}\n\t\tif ( this._storedOpacity ) {\n\t\t\tthis.helper.css( \"opacity\", this._storedOpacity );\n\t\t}\n\t\tif ( this._storedZIndex ) {\n\t\t\tthis.helper.css( \"zIndex\", this._storedZIndex === \"auto\" ? \"\" : this._storedZIndex );\n\t\t}\n\n\t\tthis.dragging = false;\n\n\t\tif ( !noPropagation ) {\n\t\t\tthis._trigger( \"beforeStop\", event, this._uiHash() );\n\t\t}\n\n\t\t//$(this.placeholder[0]).remove(); would have been the jQuery way - unfortunately,\n\t\t// it unbinds ALL events from the original node!\n\t\tthis.placeholder[ 0 ].parentNode.removeChild( this.placeholder[ 0 ] );\n\n\t\tif ( !this.cancelHelperRemoval ) {\n\t\t\tif ( this.helper[ 0 ] !== this.currentItem[ 0 ] ) {\n\t\t\t\tthis.helper.remove();\n\t\t\t}\n\t\t\tthis.helper = null;\n\t\t}\n\n\t\tif ( !noPropagation ) {\n\t\t\tfor ( i = 0; i < delayedTriggers.length; i++ ) {\n\n\t\t\t\t// Trigger all delayed events\n\t\t\t\tdelayedTriggers[ i ].call( this, event );\n\t\t\t}\n\t\t\tthis._trigger( \"stop\", event, this._uiHash() );\n\t\t}\n\n\t\tthis.fromOutside = false;\n\t\treturn !this.cancelHelperRemoval;\n\n\t},\n\n\t_trigger: function() {\n\t\tif ( $.Widget.prototype._trigger.apply( this, arguments ) === false ) {\n\t\t\tthis.cancel();\n\t\t}\n\t},\n\n\t_uiHash: function( _inst ) {\n\t\tvar inst = _inst || this;\n\t\treturn {\n\t\t\thelper: inst.helper,\n\t\t\tplaceholder: inst.placeholder || $( [] ),\n\t\t\tposition: inst.position,\n\t\t\toriginalPosition: inst.originalPosition,\n\t\t\toffset: inst.positionAbs,\n\t\t\titem: inst.currentItem,\n\t\t\tsender: _inst ? _inst.element : null\n\t\t};\n\t}\n\n} );\n\n\n/*!\n * jQuery UI Accordion 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Accordion\n//>>group: Widgets\n// jscs:disable maximumLineLength\n//>>description: Displays collapsible content panels for presenting information in a limited amount of space.\n// jscs:enable maximumLineLength\n//>>docs: http://api.jqueryui.com/accordion/\n//>>demos: http://jqueryui.com/accordion/\n//>>css.structure: ../../themes/base/core.css\n//>>css.structure: ../../themes/base/accordion.css\n//>>css.theme: ../../themes/base/theme.css\n\n\n\nvar widgetsAccordion = $.widget( \"ui.accordion\", {\n\tversion: \"1.12.1\",\n\toptions: {\n\t\tactive: 0,\n\t\tanimate: {},\n\t\tclasses: {\n\t\t\t\"ui-accordion-header\": \"ui-corner-top\",\n\t\t\t\"ui-accordion-header-collapsed\": \"ui-corner-all\",\n\t\t\t\"ui-accordion-content\": \"ui-corner-bottom\"\n\t\t},\n\t\tcollapsible: false,\n\t\tevent: \"click\",\n\t\theader: \"> li > :first-child, > :not(li):even\",\n\t\theightStyle: \"auto\",\n\t\ticons: {\n\t\t\tactiveHeader: \"ui-icon-triangle-1-s\",\n\t\t\theader: \"ui-icon-triangle-1-e\"\n\t\t},\n\n\t\t// Callbacks\n\t\tactivate: null,\n\t\tbeforeActivate: null\n\t},\n\n\thideProps: {\n\t\tborderTopWidth: \"hide\",\n\t\tborderBottomWidth: \"hide\",\n\t\tpaddingTop: \"hide\",\n\t\tpaddingBottom: \"hide\",\n\t\theight: \"hide\"\n\t},\n\n\tshowProps: {\n\t\tborderTopWidth: \"show\",\n\t\tborderBottomWidth: \"show\",\n\t\tpaddingTop: \"show\",\n\t\tpaddingBottom: \"show\",\n\t\theight: \"show\"\n\t},\n\n\t_create: function() {\n\t\tvar options = this.options;\n\n\t\tthis.prevShow = this.prevHide = $();\n\t\tthis._addClass( \"ui-accordion\", \"ui-widget ui-helper-reset\" );\n\t\tthis.element.attr( \"role\", \"tablist\" );\n\n\t\t// Don't allow collapsible: false and active: false / null\n\t\tif ( !options.collapsible && ( options.active === false || options.active == null ) ) {\n\t\t\toptions.active = 0;\n\t\t}\n\n\t\tthis._processPanels();\n\n\t\t// handle negative values\n\t\tif ( options.active < 0 ) {\n\t\t\toptions.active += this.headers.length;\n\t\t}\n\t\tthis._refresh();\n\t},\n\n\t_getCreateEventData: function() {\n\t\treturn {\n\t\t\theader: this.active,\n\t\t\tpanel: !this.active.length ? $() : this.active.next()\n\t\t};\n\t},\n\n\t_createIcons: function() {\n\t\tvar icon, children,\n\t\t\ticons = this.options.icons;\n\n\t\tif ( icons ) {\n\t\t\ticon = $( \"<span>\" );\n\t\t\tthis._addClass( icon, \"ui-accordion-header-icon\", \"ui-icon \" + icons.header );\n\t\t\ticon.prependTo( this.headers );\n\t\t\tchildren = this.active.children( \".ui-accordion-header-icon\" );\n\t\t\tthis._removeClass( children, icons.header )\n\t\t\t\t._addClass( children, null, icons.activeHeader )\n\t\t\t\t._addClass( this.headers, \"ui-accordion-icons\" );\n\t\t}\n\t},\n\n\t_destroyIcons: function() {\n\t\tthis._removeClass( this.headers, \"ui-accordion-icons\" );\n\t\tthis.headers.children( \".ui-accordion-header-icon\" ).remove();\n\t},\n\n\t_destroy: function() {\n\t\tvar contents;\n\n\t\t// Clean up main element\n\t\tthis.element.removeAttr( \"role\" );\n\n\t\t// Clean up headers\n\t\tthis.headers\n\t\t\t.removeAttr( \"role aria-expanded aria-selected aria-controls tabIndex\" )\n\t\t\t.removeUniqueId();\n\n\t\tthis._destroyIcons();\n\n\t\t// Clean up content panels\n\t\tcontents = this.headers.next()\n\t\t\t.css( \"display\", \"\" )\n\t\t\t.removeAttr( \"role aria-hidden aria-labelledby\" )\n\t\t\t.removeUniqueId();\n\n\t\tif ( this.options.heightStyle !== \"content\" ) {\n\t\t\tcontents.css( \"height\", \"\" );\n\t\t}\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tif ( key === \"active\" ) {\n\n\t\t\t// _activate() will handle invalid values and update this.options\n\t\t\tthis._activate( value );\n\t\t\treturn;\n\t\t}\n\n\t\tif ( key === \"event\" ) {\n\t\t\tif ( this.options.event ) {\n\t\t\t\tthis._off( this.headers, this.options.event );\n\t\t\t}\n\t\t\tthis._setupEvents( value );\n\t\t}\n\n\t\tthis._super( key, value );\n\n\t\t// Setting collapsible: false while collapsed; open first panel\n\t\tif ( key === \"collapsible\" && !value && this.options.active === false ) {\n\t\t\tthis._activate( 0 );\n\t\t}\n\n\t\tif ( key === \"icons\" ) {\n\t\t\tthis._destroyIcons();\n\t\t\tif ( value ) {\n\t\t\t\tthis._createIcons();\n\t\t\t}\n\t\t}\n\t},\n\n\t_setOptionDisabled: function( value ) {\n\t\tthis._super( value );\n\n\t\tthis.element.attr( \"aria-disabled\", value );\n\n\t\t// Support: IE8 Only\n\t\t// #5332 / #6059 - opacity doesn't cascade to positioned elements in IE\n\t\t// so we need to add the disabled class to the headers and panels\n\t\tthis._toggleClass( null, \"ui-state-disabled\", !!value );\n\t\tthis._toggleClass( this.headers.add( this.headers.next() ), null, \"ui-state-disabled\",\n\t\t\t!!value );\n\t},\n\n\t_keydown: function( event ) {\n\t\tif ( event.altKey || event.ctrlKey ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar keyCode = $.ui.keyCode,\n\t\t\tlength = this.headers.length,\n\t\t\tcurrentIndex = this.headers.index( event.target ),\n\t\t\ttoFocus = false;\n\n\t\tswitch ( event.keyCode ) {\n\t\tcase keyCode.RIGHT:\n\t\tcase keyCode.DOWN:\n\t\t\ttoFocus = this.headers[ ( currentIndex + 1 ) % length ];\n\t\t\tbreak;\n\t\tcase keyCode.LEFT:\n\t\tcase keyCode.UP:\n\t\t\ttoFocus = this.headers[ ( currentIndex - 1 + length ) % length ];\n\t\t\tbreak;\n\t\tcase keyCode.SPACE:\n\t\tcase keyCode.ENTER:\n\t\t\tthis._eventHandler( event );\n\t\t\tbreak;\n\t\tcase keyCode.HOME:\n\t\t\ttoFocus = this.headers[ 0 ];\n\t\t\tbreak;\n\t\tcase keyCode.END:\n\t\t\ttoFocus = this.headers[ length - 1 ];\n\t\t\tbreak;\n\t\t}\n\n\t\tif ( toFocus ) {\n\t\t\t$( event.target ).attr( \"tabIndex\", -1 );\n\t\t\t$( toFocus ).attr( \"tabIndex\", 0 );\n\t\t\t$( toFocus ).trigger( \"focus\" );\n\t\t\tevent.preventDefault();\n\t\t}\n\t},\n\n\t_panelKeyDown: function( event ) {\n\t\tif ( event.keyCode === $.ui.keyCode.UP && event.ctrlKey ) {\n\t\t\t$( event.currentTarget ).prev().trigger( \"focus\" );\n\t\t}\n\t},\n\n\trefresh: function() {\n\t\tvar options = this.options;\n\t\tthis._processPanels();\n\n\t\t// Was collapsed or no panel\n\t\tif ( ( options.active === false && options.collapsible === true ) ||\n\t\t\t\t!this.headers.length ) {\n\t\t\toptions.active = false;\n\t\t\tthis.active = $();\n\n\t\t// active false only when collapsible is true\n\t\t} else if ( options.active === false ) {\n\t\t\tthis._activate( 0 );\n\n\t\t// was active, but active panel is gone\n\t\t} else if ( this.active.length && !$.contains( this.element[ 0 ], this.active[ 0 ] ) ) {\n\n\t\t\t// all remaining panel are disabled\n\t\t\tif ( this.headers.length === this.headers.find( \".ui-state-disabled\" ).length ) {\n\t\t\t\toptions.active = false;\n\t\t\t\tthis.active = $();\n\n\t\t\t// activate previous panel\n\t\t\t} else {\n\t\t\t\tthis._activate( Math.max( 0, options.active - 1 ) );\n\t\t\t}\n\n\t\t// was active, active panel still exists\n\t\t} else {\n\n\t\t\t// make sure active index is correct\n\t\t\toptions.active = this.headers.index( this.active );\n\t\t}\n\n\t\tthis._destroyIcons();\n\n\t\tthis._refresh();\n\t},\n\n\t_processPanels: function() {\n\t\tvar prevHeaders = this.headers,\n\t\t\tprevPanels = this.panels;\n\n\t\tthis.headers = this.element.find( this.options.header );\n\t\tthis._addClass( this.headers, \"ui-accordion-header ui-accordion-header-collapsed\",\n\t\t\t\"ui-state-default\" );\n\n\t\tthis.panels = this.headers.next().filter( \":not(.ui-accordion-content-active)\" ).hide();\n\t\tthis._addClass( this.panels, \"ui-accordion-content\", \"ui-helper-reset ui-widget-content\" );\n\n\t\t// Avoid memory leaks (#10056)\n\t\tif ( prevPanels ) {\n\t\t\tthis._off( prevHeaders.not( this.headers ) );\n\t\t\tthis._off( prevPanels.not( this.panels ) );\n\t\t}\n\t},\n\n\t_refresh: function() {\n\t\tvar maxHeight,\n\t\t\toptions = this.options,\n\t\t\theightStyle = options.heightStyle,\n\t\t\tparent = this.element.parent();\n\n\t\tthis.active = this._findActive( options.active );\n\t\tthis._addClass( this.active, \"ui-accordion-header-active\", \"ui-state-active\" )\n\t\t\t._removeClass( this.active, \"ui-accordion-header-collapsed\" );\n\t\tthis._addClass( this.active.next(), \"ui-accordion-content-active\" );\n\t\tthis.active.next().show();\n\n\t\tthis.headers\n\t\t\t.attr( \"role\", \"tab\" )\n\t\t\t.each( function() {\n\t\t\t\tvar header = $( this ),\n\t\t\t\t\theaderId = header.uniqueId().attr( \"id\" ),\n\t\t\t\t\tpanel = header.next(),\n\t\t\t\t\tpanelId = panel.uniqueId().attr( \"id\" );\n\t\t\t\theader.attr( \"aria-controls\", panelId );\n\t\t\t\tpanel.attr( \"aria-labelledby\", headerId );\n\t\t\t} )\n\t\t\t.next()\n\t\t\t\t.attr( \"role\", \"tabpanel\" );\n\n\t\tthis.headers\n\t\t\t.not( this.active )\n\t\t\t\t.attr( {\n\t\t\t\t\t\"aria-selected\": \"false\",\n\t\t\t\t\t\"aria-expanded\": \"false\",\n\t\t\t\t\ttabIndex: -1\n\t\t\t\t} )\n\t\t\t\t.next()\n\t\t\t\t\t.attr( {\n\t\t\t\t\t\t\"aria-hidden\": \"true\"\n\t\t\t\t\t} )\n\t\t\t\t\t.hide();\n\n\t\t// Make sure at least one header is in the tab order\n\t\tif ( !this.active.length ) {\n\t\t\tthis.headers.eq( 0 ).attr( \"tabIndex\", 0 );\n\t\t} else {\n\t\t\tthis.active.attr( {\n\t\t\t\t\"aria-selected\": \"true\",\n\t\t\t\t\"aria-expanded\": \"true\",\n\t\t\t\ttabIndex: 0\n\t\t\t} )\n\t\t\t\t.next()\n\t\t\t\t\t.attr( {\n\t\t\t\t\t\t\"aria-hidden\": \"false\"\n\t\t\t\t\t} );\n\t\t}\n\n\t\tthis._createIcons();\n\n\t\tthis._setupEvents( options.event );\n\n\t\tif ( heightStyle === \"fill\" ) {\n\t\t\tmaxHeight = parent.height();\n\t\t\tthis.element.siblings( \":visible\" ).each( function() {\n\t\t\t\tvar elem = $( this ),\n\t\t\t\t\tposition = elem.css( \"position\" );\n\n\t\t\t\tif ( position === \"absolute\" || position === \"fixed\" ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tmaxHeight -= elem.outerHeight( true );\n\t\t\t} );\n\n\t\t\tthis.headers.each( function() {\n\t\t\t\tmaxHeight -= $( this ).outerHeight( true );\n\t\t\t} );\n\n\t\t\tthis.headers.next()\n\t\t\t\t.each( function() {\n\t\t\t\t\t$( this ).height( Math.max( 0, maxHeight -\n\t\t\t\t\t\t$( this ).innerHeight() + $( this ).height() ) );\n\t\t\t\t} )\n\t\t\t\t.css( \"overflow\", \"auto\" );\n\t\t} else if ( heightStyle === \"auto\" ) {\n\t\t\tmaxHeight = 0;\n\t\t\tthis.headers.next()\n\t\t\t\t.each( function() {\n\t\t\t\t\tvar isVisible = $( this ).is( \":visible\" );\n\t\t\t\t\tif ( !isVisible ) {\n\t\t\t\t\t\t$( this ).show();\n\t\t\t\t\t}\n\t\t\t\t\tmaxHeight = Math.max( maxHeight, $( this ).css( \"height\", \"\" ).height() );\n\t\t\t\t\tif ( !isVisible ) {\n\t\t\t\t\t\t$( this ).hide();\n\t\t\t\t\t}\n\t\t\t\t} )\n\t\t\t\t.height( maxHeight );\n\t\t}\n\t},\n\n\t_activate: function( index ) {\n\t\tvar active = this._findActive( index )[ 0 ];\n\n\t\t// Trying to activate the already active panel\n\t\tif ( active === this.active[ 0 ] ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Trying to collapse, simulate a click on the currently active header\n\t\tactive = active || this.active[ 0 ];\n\n\t\tthis._eventHandler( {\n\t\t\ttarget: active,\n\t\t\tcurrentTarget: active,\n\t\t\tpreventDefault: $.noop\n\t\t} );\n\t},\n\n\t_findActive: function( selector ) {\n\t\treturn typeof selector === \"number\" ? this.headers.eq( selector ) : $();\n\t},\n\n\t_setupEvents: function( event ) {\n\t\tvar events = {\n\t\t\tkeydown: \"_keydown\"\n\t\t};\n\t\tif ( event ) {\n\t\t\t$.each( event.split( \" \" ), function( index, eventName ) {\n\t\t\t\tevents[ eventName ] = \"_eventHandler\";\n\t\t\t} );\n\t\t}\n\n\t\tthis._off( this.headers.add( this.headers.next() ) );\n\t\tthis._on( this.headers, events );\n\t\tthis._on( this.headers.next(), { keydown: \"_panelKeyDown\" } );\n\t\tthis._hoverable( this.headers );\n\t\tthis._focusable( this.headers );\n\t},\n\n\t_eventHandler: function( event ) {\n\t\tvar activeChildren, clickedChildren,\n\t\t\toptions = this.options,\n\t\t\tactive = this.active,\n\t\t\tclicked = $( event.currentTarget ),\n\t\t\tclickedIsActive = clicked[ 0 ] === active[ 0 ],\n\t\t\tcollapsing = clickedIsActive && options.collapsible,\n\t\t\ttoShow = collapsing ? $() : clicked.next(),\n\t\t\ttoHide = active.next(),\n\t\t\teventData = {\n\t\t\t\toldHeader: active,\n\t\t\t\toldPanel: toHide,\n\t\t\t\tnewHeader: collapsing ? $() : clicked,\n\t\t\t\tnewPanel: toShow\n\t\t\t};\n\n\t\tevent.preventDefault();\n\n\t\tif (\n\n\t\t\t\t// click on active header, but not collapsible\n\t\t\t\t( clickedIsActive && !options.collapsible ) ||\n\n\t\t\t\t// allow canceling activation\n\t\t\t\t( this._trigger( \"beforeActivate\", event, eventData ) === false ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\toptions.active = collapsing ? false : this.headers.index( clicked );\n\n\t\t// When the call to ._toggle() comes after the class changes\n\t\t// it causes a very odd bug in IE 8 (see #6720)\n\t\tthis.active = clickedIsActive ? $() : clicked;\n\t\tthis._toggle( eventData );\n\n\t\t// Switch classes\n\t\t// corner classes on the previously active header stay after the animation\n\t\tthis._removeClass( active, \"ui-accordion-header-active\", \"ui-state-active\" );\n\t\tif ( options.icons ) {\n\t\t\tactiveChildren = active.children( \".ui-accordion-header-icon\" );\n\t\t\tthis._removeClass( activeChildren, null, options.icons.activeHeader )\n\t\t\t\t._addClass( activeChildren, null, options.icons.header );\n\t\t}\n\n\t\tif ( !clickedIsActive ) {\n\t\t\tthis._removeClass( clicked, \"ui-accordion-header-collapsed\" )\n\t\t\t\t._addClass( clicked, \"ui-accordion-header-active\", \"ui-state-active\" );\n\t\t\tif ( options.icons ) {\n\t\t\t\tclickedChildren = clicked.children( \".ui-accordion-header-icon\" );\n\t\t\t\tthis._removeClass( clickedChildren, null, options.icons.header )\n\t\t\t\t\t._addClass( clickedChildren, null, options.icons.activeHeader );\n\t\t\t}\n\n\t\t\tthis._addClass( clicked.next(), \"ui-accordion-content-active\" );\n\t\t}\n\t},\n\n\t_toggle: function( data ) {\n\t\tvar toShow = data.newPanel,\n\t\t\ttoHide = this.prevShow.length ? this.prevShow : data.oldPanel;\n\n\t\t// Handle activating a panel during the animation for another activation\n\t\tthis.prevShow.add( this.prevHide ).stop( true, true );\n\t\tthis.prevShow = toShow;\n\t\tthis.prevHide = toHide;\n\n\t\tif ( this.options.animate ) {\n\t\t\tthis._animate( toShow, toHide, data );\n\t\t} else {\n\t\t\ttoHide.hide();\n\t\t\ttoShow.show();\n\t\t\tthis._toggleComplete( data );\n\t\t}\n\n\t\ttoHide.attr( {\n\t\t\t\"aria-hidden\": \"true\"\n\t\t} );\n\t\ttoHide.prev().attr( {\n\t\t\t\"aria-selected\": \"false\",\n\t\t\t\"aria-expanded\": \"false\"\n\t\t} );\n\n\t\t// if we're switching panels, remove the old header from the tab order\n\t\t// if we're opening from collapsed state, remove the previous header from the tab order\n\t\t// if we're collapsing, then keep the collapsing header in the tab order\n\t\tif ( toShow.length && toHide.length ) {\n\t\t\ttoHide.prev().attr( {\n\t\t\t\t\"tabIndex\": -1,\n\t\t\t\t\"aria-expanded\": \"false\"\n\t\t\t} );\n\t\t} else if ( toShow.length ) {\n\t\t\tthis.headers.filter( function() {\n\t\t\t\treturn parseInt( $( this ).attr( \"tabIndex\" ), 10 ) === 0;\n\t\t\t} )\n\t\t\t\t.attr( \"tabIndex\", -1 );\n\t\t}\n\n\t\ttoShow\n\t\t\t.attr( \"aria-hidden\", \"false\" )\n\t\t\t.prev()\n\t\t\t\t.attr( {\n\t\t\t\t\t\"aria-selected\": \"true\",\n\t\t\t\t\t\"aria-expanded\": \"true\",\n\t\t\t\t\ttabIndex: 0\n\t\t\t\t} );\n\t},\n\n\t_animate: function( toShow, toHide, data ) {\n\t\tvar total, easing, duration,\n\t\t\tthat = this,\n\t\t\tadjust = 0,\n\t\t\tboxSizing = toShow.css( \"box-sizing\" ),\n\t\t\tdown = toShow.length &&\n\t\t\t\t( !toHide.length || ( toShow.index() < toHide.index() ) ),\n\t\t\tanimate = this.options.animate || {},\n\t\t\toptions = down && animate.down || animate,\n\t\t\tcomplete = function() {\n\t\t\t\tthat._toggleComplete( data );\n\t\t\t};\n\n\t\tif ( typeof options === \"number\" ) {\n\t\t\tduration = options;\n\t\t}\n\t\tif ( typeof options === \"string\" ) {\n\t\t\teasing = options;\n\t\t}\n\n\t\t// fall back from options to animation in case of partial down settings\n\t\teasing = easing || options.easing || animate.easing;\n\t\tduration = duration || options.duration || animate.duration;\n\n\t\tif ( !toHide.length ) {\n\t\t\treturn toShow.animate( this.showProps, duration, easing, complete );\n\t\t}\n\t\tif ( !toShow.length ) {\n\t\t\treturn toHide.animate( this.hideProps, duration, easing, complete );\n\t\t}\n\n\t\ttotal = toShow.show().outerHeight();\n\t\ttoHide.animate( this.hideProps, {\n\t\t\tduration: duration,\n\t\t\teasing: easing,\n\t\t\tstep: function( now, fx ) {\n\t\t\t\tfx.now = Math.round( now );\n\t\t\t}\n\t\t} );\n\t\ttoShow\n\t\t\t.hide()\n\t\t\t.animate( this.showProps, {\n\t\t\t\tduration: duration,\n\t\t\t\teasing: easing,\n\t\t\t\tcomplete: complete,\n\t\t\t\tstep: function( now, fx ) {\n\t\t\t\t\tfx.now = Math.round( now );\n\t\t\t\t\tif ( fx.prop !== \"height\" ) {\n\t\t\t\t\t\tif ( boxSizing === \"content-box\" ) {\n\t\t\t\t\t\t\tadjust += fx.now;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if ( that.options.heightStyle !== \"content\" ) {\n\t\t\t\t\t\tfx.now = Math.round( total - toHide.outerHeight() - adjust );\n\t\t\t\t\t\tadjust = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t},\n\n\t_toggleComplete: function( data ) {\n\t\tvar toHide = data.oldPanel,\n\t\t\tprev = toHide.prev();\n\n\t\tthis._removeClass( toHide, \"ui-accordion-content-active\" );\n\t\tthis._removeClass( prev, \"ui-accordion-header-active\" )\n\t\t\t._addClass( prev, \"ui-accordion-header-collapsed\" );\n\n\t\t// Work around for rendering bug in IE (#5421)\n\t\tif ( toHide.length ) {\n\t\t\ttoHide.parent()[ 0 ].className = toHide.parent()[ 0 ].className;\n\t\t}\n\t\tthis._trigger( \"activate\", null, data );\n\t}\n} );\n\n\n/*!\n * jQuery UI Menu 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Menu\n//>>group: Widgets\n//>>description: Creates nestable menus.\n//>>docs: http://api.jqueryui.com/menu/\n//>>demos: http://jqueryui.com/menu/\n//>>css.structure: ../../themes/base/core.css\n//>>css.structure: ../../themes/base/menu.css\n//>>css.theme: ../../themes/base/theme.css\n\n\n\nvar widgetsMenu = $.widget( \"ui.menu\", {\n\tversion: \"1.12.1\",\n\tdefaultElement: \"<ul>\",\n\tdelay: 300,\n\toptions: {\n\t\ticons: {\n\t\t\tsubmenu: \"ui-icon-caret-1-e\"\n\t\t},\n\t\titems: \"> *\",\n\t\tmenus: \"ul\",\n\t\tposition: {\n\t\t\tmy: \"left top\",\n\t\t\tat: \"right top\"\n\t\t},\n\t\trole: \"menu\",\n\n\t\t// Callbacks\n\t\tblur: null,\n\t\tfocus: null,\n\t\tselect: null\n\t},\n\n\t_create: function() {\n\t\tthis.activeMenu = this.element;\n\n\t\t// Flag used to prevent firing of the click handler\n\t\t// as the event bubbles up through nested menus\n\t\tthis.mouseHandled = false;\n\t\tthis.element\n\t\t\t.uniqueId()\n\t\t\t.attr( {\n\t\t\t\trole: this.options.role,\n\t\t\t\ttabIndex: 0\n\t\t\t} );\n\n\t\tthis._addClass( \"ui-menu\", \"ui-widget ui-widget-content\" );\n\t\tthis._on( {\n\n\t\t\t// Prevent focus from sticking to links inside menu after clicking\n\t\t\t// them (focus should always stay on UL during navigation).\n\t\t\t\"mousedown .ui-menu-item\": function( event ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t},\n\t\t\t\"click .ui-menu-item\": function( event ) {\n\t\t\t\tvar target = $( event.target );\n\t\t\t\tvar active = $( $.ui.safeActiveElement( this.document[ 0 ] ) );\n\t\t\t\tif ( !this.mouseHandled && target.not( \".ui-state-disabled\" ).length ) {\n\t\t\t\t\tthis.select( event );\n\n\t\t\t\t\t// Only set the mouseHandled flag if the event will bubble, see #9469.\n\t\t\t\t\tif ( !event.isPropagationStopped() ) {\n\t\t\t\t\t\tthis.mouseHandled = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Open submenu on click\n\t\t\t\t\tif ( target.has( \".ui-menu\" ).length ) {\n\t\t\t\t\t\tthis.expand( event );\n\t\t\t\t\t} else if ( !this.element.is( \":focus\" ) &&\n\t\t\t\t\t\t\tactive.closest( \".ui-menu\" ).length ) {\n\n\t\t\t\t\t\t// Redirect focus to the menu\n\t\t\t\t\t\tthis.element.trigger( \"focus\", [ true ] );\n\n\t\t\t\t\t\t// If the active item is on the top level, let it stay active.\n\t\t\t\t\t\t// Otherwise, blur the active item since it is no longer visible.\n\t\t\t\t\t\tif ( this.active && this.active.parents( \".ui-menu\" ).length === 1 ) {\n\t\t\t\t\t\t\tclearTimeout( this.timer );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"mouseenter .ui-menu-item\": function( event ) {\n\n\t\t\t\t// Ignore mouse events while typeahead is active, see #10458.\n\t\t\t\t// Prevents focusing the wrong item when typeahead causes a scroll while the mouse\n\t\t\t\t// is over an item in the menu\n\t\t\t\tif ( this.previousFilter ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tvar actualTarget = $( event.target ).closest( \".ui-menu-item\" ),\n\t\t\t\t\ttarget = $( event.currentTarget );\n\n\t\t\t\t// Ignore bubbled events on parent items, see #11641\n\t\t\t\tif ( actualTarget[ 0 ] !== target[ 0 ] ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Remove ui-state-active class from siblings of the newly focused menu item\n\t\t\t\t// to avoid a jump caused by adjacent elements both having a class with a border\n\t\t\t\tthis._removeClass( target.siblings().children( \".ui-state-active\" ),\n\t\t\t\t\tnull, \"ui-state-active\" );\n\t\t\t\tthis.focus( event, target );\n\t\t\t},\n\t\t\tmouseleave: \"collapseAll\",\n\t\t\t\"mouseleave .ui-menu\": \"collapseAll\",\n\t\t\tfocus: function( event, keepActiveItem ) {\n\n\t\t\t\t// If there's already an active item, keep it active\n\t\t\t\t// If not, activate the first item\n\t\t\t\tvar item = this.active || this.element.find( this.options.items ).eq( 0 );\n\n\t\t\t\tif ( !keepActiveItem ) {\n\t\t\t\t\tthis.focus( event, item );\n\t\t\t\t}\n\t\t\t},\n\t\t\tblur: function( event ) {\n\t\t\t\tthis._delay( function() {\n\t\t\t\t\tvar notContained = !$.contains(\n\t\t\t\t\t\tthis.element[ 0 ],\n\t\t\t\t\t\t$.ui.safeActiveElement( this.document[ 0 ] )\n\t\t\t\t\t);\n\t\t\t\t\tif ( notContained ) {\n\t\t\t\t\t\tthis.collapseAll( event );\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t},\n\t\t\tkeydown: \"_keydown\"\n\t\t} );\n\n\t\tthis.refresh();\n\n\t\t// Clicks outside of a menu collapse any open menus\n\t\tthis._on( this.document, {\n\t\t\tclick: function( event ) {\n\t\t\t\tif ( this._closeOnDocumentClick( event ) ) {\n\t\t\t\t\tthis.collapseAll( event );\n\t\t\t\t}\n\n\t\t\t\t// Reset the mouseHandled flag\n\t\t\t\tthis.mouseHandled = false;\n\t\t\t}\n\t\t} );\n\t},\n\n\t_destroy: function() {\n\t\tvar items = this.element.find( \".ui-menu-item\" )\n\t\t\t\t.removeAttr( \"role aria-disabled\" ),\n\t\t\tsubmenus = items.children( \".ui-menu-item-wrapper\" )\n\t\t\t\t.removeUniqueId()\n\t\t\t\t.removeAttr( \"tabIndex role aria-haspopup\" );\n\n\t\t// Destroy (sub)menus\n\t\tthis.element\n\t\t\t.removeAttr( \"aria-activedescendant\" )\n\t\t\t.find( \".ui-menu\" ).addBack()\n\t\t\t\t.removeAttr( \"role aria-labelledby aria-expanded aria-hidden aria-disabled \" +\n\t\t\t\t\t\"tabIndex\" )\n\t\t\t\t.removeUniqueId()\n\t\t\t\t.show();\n\n\t\tsubmenus.children().each( function() {\n\t\t\tvar elem = $( this );\n\t\t\tif ( elem.data( \"ui-menu-submenu-caret\" ) ) {\n\t\t\t\telem.remove();\n\t\t\t}\n\t\t} );\n\t},\n\n\t_keydown: function( event ) {\n\t\tvar match, prev, character, skip,\n\t\t\tpreventDefault = true;\n\n\t\tswitch ( event.keyCode ) {\n\t\tcase $.ui.keyCode.PAGE_UP:\n\t\t\tthis.previousPage( event );\n\t\t\tbreak;\n\t\tcase $.ui.keyCode.PAGE_DOWN:\n\t\t\tthis.nextPage( event );\n\t\t\tbreak;\n\t\tcase $.ui.keyCode.HOME:\n\t\t\tthis._move( \"first\", \"first\", event );\n\t\t\tbreak;\n\t\tcase $.ui.keyCode.END:\n\t\t\tthis._move( \"last\", \"last\", event );\n\t\t\tbreak;\n\t\tcase $.ui.keyCode.UP:\n\t\t\tthis.previous( event );\n\t\t\tbreak;\n\t\tcase $.ui.keyCode.DOWN:\n\t\t\tthis.next( event );\n\t\t\tbreak;\n\t\tcase $.ui.keyCode.LEFT:\n\t\t\tthis.collapse( event );\n\t\t\tbreak;\n\t\tcase $.ui.keyCode.RIGHT:\n\t\t\tif ( this.active && !this.active.is( \".ui-state-disabled\" ) ) {\n\t\t\t\tthis.expand( event );\n\t\t\t}\n\t\t\tbreak;\n\t\tcase $.ui.keyCode.ENTER:\n\t\tcase $.ui.keyCode.SPACE:\n\t\t\tthis._activate( event );\n\t\t\tbreak;\n\t\tcase $.ui.keyCode.ESCAPE:\n\t\t\tthis.collapse( event );\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tpreventDefault = false;\n\t\t\tprev = this.previousFilter || \"\";\n\t\t\tskip = false;\n\n\t\t\t// Support number pad values\n\t\t\tcharacter = event.keyCode >= 96 && event.keyCode <= 105 ?\n\t\t\t\t( event.keyCode - 96 ).toString() : String.fromCharCode( event.keyCode );\n\n\t\t\tclearTimeout( this.filterTimer );\n\n\t\t\tif ( character === prev ) {\n\t\t\t\tskip = true;\n\t\t\t} else {\n\t\t\t\tcharacter = prev + character;\n\t\t\t}\n\n\t\t\tmatch = this._filterMenuItems( character );\n\t\t\tmatch = skip && match.index( this.active.next() ) !== -1 ?\n\t\t\t\tthis.active.nextAll( \".ui-menu-item\" ) :\n\t\t\t\tmatch;\n\n\t\t\t// If no matches on the current filter, reset to the last character pressed\n\t\t\t// to move down the menu to the first item that starts with that character\n\t\t\tif ( !match.length ) {\n\t\t\t\tcharacter = String.fromCharCode( event.keyCode );\n\t\t\t\tmatch = this._filterMenuItems( character );\n\t\t\t}\n\n\t\t\tif ( match.length ) {\n\t\t\t\tthis.focus( event, match );\n\t\t\t\tthis.previousFilter = character;\n\t\t\t\tthis.filterTimer = this._delay( function() {\n\t\t\t\t\tdelete this.previousFilter;\n\t\t\t\t}, 1000 );\n\t\t\t} else {\n\t\t\t\tdelete this.previousFilter;\n\t\t\t}\n\t\t}\n\n\t\tif ( preventDefault ) {\n\t\t\tevent.preventDefault();\n\t\t}\n\t},\n\n\t_activate: function( event ) {\n\t\tif ( this.active && !this.active.is( \".ui-state-disabled\" ) ) {\n\t\t\tif ( this.active.children( \"[aria-haspopup='true']\" ).length ) {\n\t\t\t\tthis.expand( event );\n\t\t\t} else {\n\t\t\t\tthis.select( event );\n\t\t\t}\n\t\t}\n\t},\n\n\trefresh: function() {\n\t\tvar menus, items, newSubmenus, newItems, newWrappers,\n\t\t\tthat = this,\n\t\t\ticon = this.options.icons.submenu,\n\t\t\tsubmenus = this.element.find( this.options.menus );\n\n\t\tthis._toggleClass( \"ui-menu-icons\", null, !!this.element.find( \".ui-icon\" ).length );\n\n\t\t// Initialize nested menus\n\t\tnewSubmenus = submenus.filter( \":not(.ui-menu)\" )\n\t\t\t.hide()\n\t\t\t.attr( {\n\t\t\t\trole: this.options.role,\n\t\t\t\t\"aria-hidden\": \"true\",\n\t\t\t\t\"aria-expanded\": \"false\"\n\t\t\t} )\n\t\t\t.each( function() {\n\t\t\t\tvar menu = $( this ),\n\t\t\t\t\titem = menu.prev(),\n\t\t\t\t\tsubmenuCaret = $( \"<span>\" ).data( \"ui-menu-submenu-caret\", true );\n\n\t\t\t\tthat._addClass( submenuCaret, \"ui-menu-icon\", \"ui-icon \" + icon );\n\t\t\t\titem\n\t\t\t\t\t.attr( \"aria-haspopup\", \"true\" )\n\t\t\t\t\t.prepend( submenuCaret );\n\t\t\t\tmenu.attr( \"aria-labelledby\", item.attr( \"id\" ) );\n\t\t\t} );\n\n\t\tthis._addClass( newSubmenus, \"ui-menu\", \"ui-widget ui-widget-content ui-front\" );\n\n\t\tmenus = submenus.add( this.element );\n\t\titems = menus.find( this.options.items );\n\n\t\t// Initialize menu-items containing spaces and/or dashes only as dividers\n\t\titems.not( \".ui-menu-item\" ).each( function() {\n\t\t\tvar item = $( this );\n\t\t\tif ( that._isDivider( item ) ) {\n\t\t\t\tthat._addClass( item, \"ui-menu-divider\", \"ui-widget-content\" );\n\t\t\t}\n\t\t} );\n\n\t\t// Don't refresh list items that are already adapted\n\t\tnewItems = items.not( \".ui-menu-item, .ui-menu-divider\" );\n\t\tnewWrappers = newItems.children()\n\t\t\t.not( \".ui-menu\" )\n\t\t\t\t.uniqueId()\n\t\t\t\t.attr( {\n\t\t\t\t\ttabIndex: -1,\n\t\t\t\t\trole: this._itemRole()\n\t\t\t\t} );\n\t\tthis._addClass( newItems, \"ui-menu-item\" )\n\t\t\t._addClass( newWrappers, \"ui-menu-item-wrapper\" );\n\n\t\t// Add aria-disabled attribute to any disabled menu item\n\t\titems.filter( \".ui-state-disabled\" ).attr( \"aria-disabled\", \"true\" );\n\n\t\t// If the active item has been removed, blur the menu\n\t\tif ( this.active && !$.contains( this.element[ 0 ], this.active[ 0 ] ) ) {\n\t\t\tthis.blur();\n\t\t}\n\t},\n\n\t_itemRole: function() {\n\t\treturn {\n\t\t\tmenu: \"menuitem\",\n\t\t\tlistbox: \"option\"\n\t\t}[ this.options.role ];\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tif ( key === \"icons\" ) {\n\t\t\tvar icons = this.element.find( \".ui-menu-icon\" );\n\t\t\tthis._removeClass( icons, null, this.options.icons.submenu )\n\t\t\t\t._addClass( icons, null, value.submenu );\n\t\t}\n\t\tthis._super( key, value );\n\t},\n\n\t_setOptionDisabled: function( value ) {\n\t\tthis._super( value );\n\n\t\tthis.element.attr( \"aria-disabled\", String( value ) );\n\t\tthis._toggleClass( null, \"ui-state-disabled\", !!value );\n\t},\n\n\tfocus: function( event, item ) {\n\t\tvar nested, focused, activeParent;\n\t\tthis.blur( event, event && event.type === \"focus\" );\n\n\t\tthis._scrollIntoView( item );\n\n\t\tthis.active = item.first();\n\n\t\tfocused = this.active.children( \".ui-menu-item-wrapper\" );\n\t\tthis._addClass( focused, null, \"ui-state-active\" );\n\n\t\t// Only update aria-activedescendant if there's a role\n\t\t// otherwise we assume focus is managed elsewhere\n\t\tif ( this.options.role ) {\n\t\t\tthis.element.attr( \"aria-activedescendant\", focused.attr( \"id\" ) );\n\t\t}\n\n\t\t// Highlight active parent menu item, if any\n\t\tactiveParent = this.active\n\t\t\t.parent()\n\t\t\t\t.closest( \".ui-menu-item\" )\n\t\t\t\t\t.children( \".ui-menu-item-wrapper\" );\n\t\tthis._addClass( activeParent, null, \"ui-state-active\" );\n\n\t\tif ( event && event.type === \"keydown\" ) {\n\t\t\tthis._close();\n\t\t} else {\n\t\t\tthis.timer = this._delay( function() {\n\t\t\t\tthis._close();\n\t\t\t}, this.delay );\n\t\t}\n\n\t\tnested = item.children( \".ui-menu\" );\n\t\tif ( nested.length && event && ( /^mouse/.test( event.type ) ) ) {\n\t\t\tthis._startOpening( nested );\n\t\t}\n\t\tthis.activeMenu = item.parent();\n\n\t\tthis._trigger( \"focus\", event, { item: item } );\n\t},\n\n\t_scrollIntoView: function( item ) {\n\t\tvar borderTop, paddingTop, offset, scroll, elementHeight, itemHeight;\n\t\tif ( this._hasScroll() ) {\n\t\t\tborderTop = parseFloat( $.css( this.activeMenu[ 0 ], \"borderTopWidth\" ) ) || 0;\n\t\t\tpaddingTop = parseFloat( $.css( this.activeMenu[ 0 ], \"paddingTop\" ) ) || 0;\n\t\t\toffset = item.offset().top - this.activeMenu.offset().top - borderTop - paddingTop;\n\t\t\tscroll = this.activeMenu.scrollTop();\n\t\t\telementHeight = this.activeMenu.height();\n\t\t\titemHeight = item.outerHeight();\n\n\t\t\tif ( offset < 0 ) {\n\t\t\t\tthis.activeMenu.scrollTop( scroll + offset );\n\t\t\t} else if ( offset + itemHeight > elementHeight ) {\n\t\t\t\tthis.activeMenu.scrollTop( scroll + offset - elementHeight + itemHeight );\n\t\t\t}\n\t\t}\n\t},\n\n\tblur: function( event, fromFocus ) {\n\t\tif ( !fromFocus ) {\n\t\t\tclearTimeout( this.timer );\n\t\t}\n\n\t\tif ( !this.active ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._removeClass( this.active.children( \".ui-menu-item-wrapper\" ),\n\t\t\tnull, \"ui-state-active\" );\n\n\t\tthis._trigger( \"blur\", event, { item: this.active } );\n\t\tthis.active = null;\n\t},\n\n\t_startOpening: function( submenu ) {\n\t\tclearTimeout( this.timer );\n\n\t\t// Don't open if already open fixes a Firefox bug that caused a .5 pixel\n\t\t// shift in the submenu position when mousing over the caret icon\n\t\tif ( submenu.attr( \"aria-hidden\" ) !== \"true\" ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.timer = this._delay( function() {\n\t\t\tthis._close();\n\t\t\tthis._open( submenu );\n\t\t}, this.delay );\n\t},\n\n\t_open: function( submenu ) {\n\t\tvar position = $.extend( {\n\t\t\tof: this.active\n\t\t}, this.options.position );\n\n\t\tclearTimeout( this.timer );\n\t\tthis.element.find( \".ui-menu\" ).not( submenu.parents( \".ui-menu\" ) )\n\t\t\t.hide()\n\t\t\t.attr( \"aria-hidden\", \"true\" );\n\n\t\tsubmenu\n\t\t\t.show()\n\t\t\t.removeAttr( \"aria-hidden\" )\n\t\t\t.attr( \"aria-expanded\", \"true\" )\n\t\t\t.position( position );\n\t},\n\n\tcollapseAll: function( event, all ) {\n\t\tclearTimeout( this.timer );\n\t\tthis.timer = this._delay( function() {\n\n\t\t\t// If we were passed an event, look for the submenu that contains the event\n\t\t\tvar currentMenu = all ? this.element :\n\t\t\t\t$( event && event.target ).closest( this.element.find( \".ui-menu\" ) );\n\n\t\t\t// If we found no valid submenu ancestor, use the main menu to close all\n\t\t\t// sub menus anyway\n\t\t\tif ( !currentMenu.length ) {\n\t\t\t\tcurrentMenu = this.element;\n\t\t\t}\n\n\t\t\tthis._close( currentMenu );\n\n\t\t\tthis.blur( event );\n\n\t\t\t// Work around active item staying active after menu is blurred\n\t\t\tthis._removeClass( currentMenu.find( \".ui-state-active\" ), null, \"ui-state-active\" );\n\n\t\t\tthis.activeMenu = currentMenu;\n\t\t}, this.delay );\n\t},\n\n\t// With no arguments, closes the currently active menu - if nothing is active\n\t// it closes all menus.  If passed an argument, it will search for menus BELOW\n\t_close: function( startMenu ) {\n\t\tif ( !startMenu ) {\n\t\t\tstartMenu = this.active ? this.active.parent() : this.element;\n\t\t}\n\n\t\tstartMenu.find( \".ui-menu\" )\n\t\t\t.hide()\n\t\t\t.attr( \"aria-hidden\", \"true\" )\n\t\t\t.attr( \"aria-expanded\", \"false\" );\n\t},\n\n\t_closeOnDocumentClick: function( event ) {\n\t\treturn !$( event.target ).closest( \".ui-menu\" ).length;\n\t},\n\n\t_isDivider: function( item ) {\n\n\t\t// Match hyphen, em dash, en dash\n\t\treturn !/[^\\-\\u2014\\u2013\\s]/.test( item.text() );\n\t},\n\n\tcollapse: function( event ) {\n\t\tvar newItem = this.active &&\n\t\t\tthis.active.parent().closest( \".ui-menu-item\", this.element );\n\t\tif ( newItem && newItem.length ) {\n\t\t\tthis._close();\n\t\t\tthis.focus( event, newItem );\n\t\t}\n\t},\n\n\texpand: function( event ) {\n\t\tvar newItem = this.active &&\n\t\t\tthis.active\n\t\t\t\t.children( \".ui-menu \" )\n\t\t\t\t\t.find( this.options.items )\n\t\t\t\t\t\t.first();\n\n\t\tif ( newItem && newItem.length ) {\n\t\t\tthis._open( newItem.parent() );\n\n\t\t\t// Delay so Firefox will not hide activedescendant change in expanding submenu from AT\n\t\t\tthis._delay( function() {\n\t\t\t\tthis.focus( event, newItem );\n\t\t\t} );\n\t\t}\n\t},\n\n\tnext: function( event ) {\n\t\tthis._move( \"next\", \"first\", event );\n\t},\n\n\tprevious: function( event ) {\n\t\tthis._move( \"prev\", \"last\", event );\n\t},\n\n\tisFirstItem: function() {\n\t\treturn this.active && !this.active.prevAll( \".ui-menu-item\" ).length;\n\t},\n\n\tisLastItem: function() {\n\t\treturn this.active && !this.active.nextAll( \".ui-menu-item\" ).length;\n\t},\n\n\t_move: function( direction, filter, event ) {\n\t\tvar next;\n\t\tif ( this.active ) {\n\t\t\tif ( direction === \"first\" || direction === \"last\" ) {\n\t\t\t\tnext = this.active\n\t\t\t\t\t[ direction === \"first\" ? \"prevAll\" : \"nextAll\" ]( \".ui-menu-item\" )\n\t\t\t\t\t.eq( -1 );\n\t\t\t} else {\n\t\t\t\tnext = this.active\n\t\t\t\t\t[ direction + \"All\" ]( \".ui-menu-item\" )\n\t\t\t\t\t.eq( 0 );\n\t\t\t}\n\t\t}\n\t\tif ( !next || !next.length || !this.active ) {\n\t\t\tnext = this.activeMenu.find( this.options.items )[ filter ]();\n\t\t}\n\n\t\tthis.focus( event, next );\n\t},\n\n\tnextPage: function( event ) {\n\t\tvar item, base, height;\n\n\t\tif ( !this.active ) {\n\t\t\tthis.next( event );\n\t\t\treturn;\n\t\t}\n\t\tif ( this.isLastItem() ) {\n\t\t\treturn;\n\t\t}\n\t\tif ( this._hasScroll() ) {\n\t\t\tbase = this.active.offset().top;\n\t\t\theight = this.element.height();\n\t\t\tthis.active.nextAll( \".ui-menu-item\" ).each( function() {\n\t\t\t\titem = $( this );\n\t\t\t\treturn item.offset().top - base - height < 0;\n\t\t\t} );\n\n\t\t\tthis.focus( event, item );\n\t\t} else {\n\t\t\tthis.focus( event, this.activeMenu.find( this.options.items )\n\t\t\t\t[ !this.active ? \"first\" : \"last\" ]() );\n\t\t}\n\t},\n\n\tpreviousPage: function( event ) {\n\t\tvar item, base, height;\n\t\tif ( !this.active ) {\n\t\t\tthis.next( event );\n\t\t\treturn;\n\t\t}\n\t\tif ( this.isFirstItem() ) {\n\t\t\treturn;\n\t\t}\n\t\tif ( this._hasScroll() ) {\n\t\t\tbase = this.active.offset().top;\n\t\t\theight = this.element.height();\n\t\t\tthis.active.prevAll( \".ui-menu-item\" ).each( function() {\n\t\t\t\titem = $( this );\n\t\t\t\treturn item.offset().top - base + height > 0;\n\t\t\t} );\n\n\t\t\tthis.focus( event, item );\n\t\t} else {\n\t\t\tthis.focus( event, this.activeMenu.find( this.options.items ).first() );\n\t\t}\n\t},\n\n\t_hasScroll: function() {\n\t\treturn this.element.outerHeight() < this.element.prop( \"scrollHeight\" );\n\t},\n\n\tselect: function( event ) {\n\n\t\t// TODO: It should never be possible to not have an active item at this\n\t\t// point, but the tests don't trigger mouseenter before click.\n\t\tthis.active = this.active || $( event.target ).closest( \".ui-menu-item\" );\n\t\tvar ui = { item: this.active };\n\t\tif ( !this.active.has( \".ui-menu\" ).length ) {\n\t\t\tthis.collapseAll( event, true );\n\t\t}\n\t\tthis._trigger( \"select\", event, ui );\n\t},\n\n\t_filterMenuItems: function( character ) {\n\t\tvar escapedCharacter = character.replace( /[\\-\\[\\]{}()*+?.,\\\\\\^$|#\\s]/g, \"\\\\$&\" ),\n\t\t\tregex = new RegExp( \"^\" + escapedCharacter, \"i\" );\n\n\t\treturn this.activeMenu\n\t\t\t.find( this.options.items )\n\n\t\t\t\t// Only match on items, not dividers or other content (#10571)\n\t\t\t\t.filter( \".ui-menu-item\" )\n\t\t\t\t\t.filter( function() {\n\t\t\t\t\t\treturn regex.test(\n\t\t\t\t\t\t\t$.trim( $( this ).children( \".ui-menu-item-wrapper\" ).text() ) );\n\t\t\t\t\t} );\n\t}\n} );\n\n\n/*!\n * jQuery UI Autocomplete 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Autocomplete\n//>>group: Widgets\n//>>description: Lists suggested words as the user is typing.\n//>>docs: http://api.jqueryui.com/autocomplete/\n//>>demos: http://jqueryui.com/autocomplete/\n//>>css.structure: ../../themes/base/core.css\n//>>css.structure: ../../themes/base/autocomplete.css\n//>>css.theme: ../../themes/base/theme.css\n\n\n\n$.widget( \"ui.autocomplete\", {\n\tversion: \"1.12.1\",\n\tdefaultElement: \"<input>\",\n\toptions: {\n\t\tappendTo: null,\n\t\tautoFocus: false,\n\t\tdelay: 300,\n\t\tminLength: 1,\n\t\tposition: {\n\t\t\tmy: \"left top\",\n\t\t\tat: \"left bottom\",\n\t\t\tcollision: \"none\"\n\t\t},\n\t\tsource: null,\n\n\t\t// Callbacks\n\t\tchange: null,\n\t\tclose: null,\n\t\tfocus: null,\n\t\topen: null,\n\t\tresponse: null,\n\t\tsearch: null,\n\t\tselect: null\n\t},\n\n\trequestIndex: 0,\n\tpending: 0,\n\n\t_create: function() {\n\n\t\t// Some browsers only repeat keydown events, not keypress events,\n\t\t// so we use the suppressKeyPress flag to determine if we've already\n\t\t// handled the keydown event. #7269\n\t\t// Unfortunately the code for & in keypress is the same as the up arrow,\n\t\t// so we use the suppressKeyPressRepeat flag to avoid handling keypress\n\t\t// events when we know the keydown event was used to modify the\n\t\t// search term. #7799\n\t\tvar suppressKeyPress, suppressKeyPressRepeat, suppressInput,\n\t\t\tnodeName = this.element[ 0 ].nodeName.toLowerCase(),\n\t\t\tisTextarea = nodeName === \"textarea\",\n\t\t\tisInput = nodeName === \"input\";\n\n\t\t// Textareas are always multi-line\n\t\t// Inputs are always single-line, even if inside a contentEditable element\n\t\t// IE also treats inputs as contentEditable\n\t\t// All other element types are determined by whether or not they're contentEditable\n\t\tthis.isMultiLine = isTextarea || !isInput && this._isContentEditable( this.element );\n\n\t\tthis.valueMethod = this.element[ isTextarea || isInput ? \"val\" : \"text\" ];\n\t\tthis.isNewMenu = true;\n\n\t\tthis._addClass( \"ui-autocomplete-input\" );\n\t\tthis.element.attr( \"autocomplete\", \"off\" );\n\n\t\tthis._on( this.element, {\n\t\t\tkeydown: function( event ) {\n\t\t\t\tif ( this.element.prop( \"readOnly\" ) ) {\n\t\t\t\t\tsuppressKeyPress = true;\n\t\t\t\t\tsuppressInput = true;\n\t\t\t\t\tsuppressKeyPressRepeat = true;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tsuppressKeyPress = false;\n\t\t\t\tsuppressInput = false;\n\t\t\t\tsuppressKeyPressRepeat = false;\n\t\t\t\tvar keyCode = $.ui.keyCode;\n\t\t\t\tswitch ( event.keyCode ) {\n\t\t\t\tcase keyCode.PAGE_UP:\n\t\t\t\t\tsuppressKeyPress = true;\n\t\t\t\t\tthis._move( \"previousPage\", event );\n\t\t\t\t\tbreak;\n\t\t\t\tcase keyCode.PAGE_DOWN:\n\t\t\t\t\tsuppressKeyPress = true;\n\t\t\t\t\tthis._move( \"nextPage\", event );\n\t\t\t\t\tbreak;\n\t\t\t\tcase keyCode.UP:\n\t\t\t\t\tsuppressKeyPress = true;\n\t\t\t\t\tthis._keyEvent( \"previous\", event );\n\t\t\t\t\tbreak;\n\t\t\t\tcase keyCode.DOWN:\n\t\t\t\t\tsuppressKeyPress = true;\n\t\t\t\t\tthis._keyEvent( \"next\", event );\n\t\t\t\t\tbreak;\n\t\t\t\tcase keyCode.ENTER:\n\n\t\t\t\t\t// when menu is open and has focus\n\t\t\t\t\tif ( this.menu.active ) {\n\n\t\t\t\t\t\t// #6055 - Opera still allows the keypress to occur\n\t\t\t\t\t\t// which causes forms to submit\n\t\t\t\t\t\tsuppressKeyPress = true;\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\tthis.menu.select( event );\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase keyCode.TAB:\n\t\t\t\t\tif ( this.menu.active ) {\n\t\t\t\t\t\tthis.menu.select( event );\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase keyCode.ESCAPE:\n\t\t\t\t\tif ( this.menu.element.is( \":visible\" ) ) {\n\t\t\t\t\t\tif ( !this.isMultiLine ) {\n\t\t\t\t\t\t\tthis._value( this.term );\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.close( event );\n\n\t\t\t\t\t\t// Different browsers have different default behavior for escape\n\t\t\t\t\t\t// Single press can mean undo or clear\n\t\t\t\t\t\t// Double press in IE means clear the whole form\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tsuppressKeyPressRepeat = true;\n\n\t\t\t\t\t// search timeout should be triggered before the input value is changed\n\t\t\t\t\tthis._searchTimeout( event );\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t},\n\t\t\tkeypress: function( event ) {\n\t\t\t\tif ( suppressKeyPress ) {\n\t\t\t\t\tsuppressKeyPress = false;\n\t\t\t\t\tif ( !this.isMultiLine || this.menu.element.is( \":visible\" ) ) {\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif ( suppressKeyPressRepeat ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Replicate some key handlers to allow them to repeat in Firefox and Opera\n\t\t\t\tvar keyCode = $.ui.keyCode;\n\t\t\t\tswitch ( event.keyCode ) {\n\t\t\t\tcase keyCode.PAGE_UP:\n\t\t\t\t\tthis._move( \"previousPage\", event );\n\t\t\t\t\tbreak;\n\t\t\t\tcase keyCode.PAGE_DOWN:\n\t\t\t\t\tthis._move( \"nextPage\", event );\n\t\t\t\t\tbreak;\n\t\t\t\tcase keyCode.UP:\n\t\t\t\t\tthis._keyEvent( \"previous\", event );\n\t\t\t\t\tbreak;\n\t\t\t\tcase keyCode.DOWN:\n\t\t\t\t\tthis._keyEvent( \"next\", event );\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t},\n\t\t\tinput: function( event ) {\n\t\t\t\tif ( suppressInput ) {\n\t\t\t\t\tsuppressInput = false;\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tthis._searchTimeout( event );\n\t\t\t},\n\t\t\tfocus: function() {\n\t\t\t\tthis.selectedItem = null;\n\t\t\t\tthis.previous = this._value();\n\t\t\t},\n\t\t\tblur: function( event ) {\n\t\t\t\tif ( this.cancelBlur ) {\n\t\t\t\t\tdelete this.cancelBlur;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tclearTimeout( this.searching );\n\t\t\t\tthis.close( event );\n\t\t\t\tthis._change( event );\n\t\t\t}\n\t\t} );\n\n\t\tthis._initSource();\n\t\tthis.menu = $( \"<ul>\" )\n\t\t\t.appendTo( this._appendTo() )\n\t\t\t.menu( {\n\n\t\t\t\t// disable ARIA support, the live region takes care of that\n\t\t\t\trole: null\n\t\t\t} )\n\t\t\t.hide()\n\t\t\t.menu( \"instance\" );\n\n\t\tthis._addClass( this.menu.element, \"ui-autocomplete\", \"ui-front\" );\n\t\tthis._on( this.menu.element, {\n\t\t\tmousedown: function( event ) {\n\n\t\t\t\t// prevent moving focus out of the text field\n\t\t\t\tevent.preventDefault();\n\n\t\t\t\t// IE doesn't prevent moving focus even with event.preventDefault()\n\t\t\t\t// so we set a flag to know when we should ignore the blur event\n\t\t\t\tthis.cancelBlur = true;\n\t\t\t\tthis._delay( function() {\n\t\t\t\t\tdelete this.cancelBlur;\n\n\t\t\t\t\t// Support: IE 8 only\n\t\t\t\t\t// Right clicking a menu item or selecting text from the menu items will\n\t\t\t\t\t// result in focus moving out of the input. However, we've already received\n\t\t\t\t\t// and ignored the blur event because of the cancelBlur flag set above. So\n\t\t\t\t\t// we restore focus to ensure that the menu closes properly based on the user's\n\t\t\t\t\t// next actions.\n\t\t\t\t\tif ( this.element[ 0 ] !== $.ui.safeActiveElement( this.document[ 0 ] ) ) {\n\t\t\t\t\t\tthis.element.trigger( \"focus\" );\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t},\n\t\t\tmenufocus: function( event, ui ) {\n\t\t\t\tvar label, item;\n\n\t\t\t\t// support: Firefox\n\t\t\t\t// Prevent accidental activation of menu items in Firefox (#7024 #9118)\n\t\t\t\tif ( this.isNewMenu ) {\n\t\t\t\t\tthis.isNewMenu = false;\n\t\t\t\t\tif ( event.originalEvent && /^mouse/.test( event.originalEvent.type ) ) {\n\t\t\t\t\t\tthis.menu.blur();\n\n\t\t\t\t\t\tthis.document.one( \"mousemove\", function() {\n\t\t\t\t\t\t\t$( event.target ).trigger( event.originalEvent );\n\t\t\t\t\t\t} );\n\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\titem = ui.item.data( \"ui-autocomplete-item\" );\n\t\t\t\tif ( false !== this._trigger( \"focus\", event, { item: item } ) ) {\n\n\t\t\t\t\t// use value to match what will end up in the input, if it was a key event\n\t\t\t\t\tif ( event.originalEvent && /^key/.test( event.originalEvent.type ) ) {\n\t\t\t\t\t\tthis._value( item.value );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Announce the value in the liveRegion\n\t\t\t\tlabel = ui.item.attr( \"aria-label\" ) || item.value;\n\t\t\t\tif ( label && $.trim( label ).length ) {\n\t\t\t\t\tthis.liveRegion.children().hide();\n\t\t\t\t\t$( \"<div>\" ).text( label ).appendTo( this.liveRegion );\n\t\t\t\t}\n\t\t\t},\n\t\t\tmenuselect: function( event, ui ) {\n\t\t\t\tvar item = ui.item.data( \"ui-autocomplete-item\" ),\n\t\t\t\t\tprevious = this.previous;\n\n\t\t\t\t// Only trigger when focus was lost (click on menu)\n\t\t\t\tif ( this.element[ 0 ] !== $.ui.safeActiveElement( this.document[ 0 ] ) ) {\n\t\t\t\t\tthis.element.trigger( \"focus\" );\n\t\t\t\t\tthis.previous = previous;\n\n\t\t\t\t\t// #6109 - IE triggers two focus events and the second\n\t\t\t\t\t// is asynchronous, so we need to reset the previous\n\t\t\t\t\t// term synchronously and asynchronously :-(\n\t\t\t\t\tthis._delay( function() {\n\t\t\t\t\t\tthis.previous = previous;\n\t\t\t\t\t\tthis.selectedItem = item;\n\t\t\t\t\t} );\n\t\t\t\t}\n\n\t\t\t\tif ( false !== this._trigger( \"select\", event, { item: item } ) ) {\n\t\t\t\t\tthis._value( item.value );\n\t\t\t\t}\n\n\t\t\t\t// reset the term after the select event\n\t\t\t\t// this allows custom select handling to work properly\n\t\t\t\tthis.term = this._value();\n\n\t\t\t\tthis.close( event );\n\t\t\t\tthis.selectedItem = item;\n\t\t\t}\n\t\t} );\n\n\t\tthis.liveRegion = $( \"<div>\", {\n\t\t\trole: \"status\",\n\t\t\t\"aria-live\": \"assertive\",\n\t\t\t\"aria-relevant\": \"additions\"\n\t\t} )\n\t\t\t.appendTo( this.document[ 0 ].body );\n\n\t\tthis._addClass( this.liveRegion, null, \"ui-helper-hidden-accessible\" );\n\n\t\t// Turning off autocomplete prevents the browser from remembering the\n\t\t// value when navigating through history, so we re-enable autocomplete\n\t\t// if the page is unloaded before the widget is destroyed. #7790\n\t\tthis._on( this.window, {\n\t\t\tbeforeunload: function() {\n\t\t\t\tthis.element.removeAttr( \"autocomplete\" );\n\t\t\t}\n\t\t} );\n\t},\n\n\t_destroy: function() {\n\t\tclearTimeout( this.searching );\n\t\tthis.element.removeAttr( \"autocomplete\" );\n\t\tthis.menu.element.remove();\n\t\tthis.liveRegion.remove();\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tthis._super( key, value );\n\t\tif ( key === \"source\" ) {\n\t\t\tthis._initSource();\n\t\t}\n\t\tif ( key === \"appendTo\" ) {\n\t\t\tthis.menu.element.appendTo( this._appendTo() );\n\t\t}\n\t\tif ( key === \"disabled\" && value && this.xhr ) {\n\t\t\tthis.xhr.abort();\n\t\t}\n\t},\n\n\t_isEventTargetInWidget: function( event ) {\n\t\tvar menuElement = this.menu.element[ 0 ];\n\n\t\treturn event.target === this.element[ 0 ] ||\n\t\t\tevent.target === menuElement ||\n\t\t\t$.contains( menuElement, event.target );\n\t},\n\n\t_closeOnClickOutside: function( event ) {\n\t\tif ( !this._isEventTargetInWidget( event ) ) {\n\t\t\tthis.close();\n\t\t}\n\t},\n\n\t_appendTo: function() {\n\t\tvar element = this.options.appendTo;\n\n\t\tif ( element ) {\n\t\t\telement = element.jquery || element.nodeType ?\n\t\t\t\t$( element ) :\n\t\t\t\tthis.document.find( element ).eq( 0 );\n\t\t}\n\n\t\tif ( !element || !element[ 0 ] ) {\n\t\t\telement = this.element.closest( \".ui-front, dialog\" );\n\t\t}\n\n\t\tif ( !element.length ) {\n\t\t\telement = this.document[ 0 ].body;\n\t\t}\n\n\t\treturn element;\n\t},\n\n\t_initSource: function() {\n\t\tvar array, url,\n\t\t\tthat = this;\n\t\tif ( $.isArray( this.options.source ) ) {\n\t\t\tarray = this.options.source;\n\t\t\tthis.source = function( request, response ) {\n\t\t\t\tresponse( $.ui.autocomplete.filter( array, request.term ) );\n\t\t\t};\n\t\t} else if ( typeof this.options.source === \"string\" ) {\n\t\t\turl = this.options.source;\n\t\t\tthis.source = function( request, response ) {\n\t\t\t\tif ( that.xhr ) {\n\t\t\t\t\tthat.xhr.abort();\n\t\t\t\t}\n\t\t\t\tthat.xhr = $.ajax( {\n\t\t\t\t\turl: url,\n\t\t\t\t\tdata: request,\n\t\t\t\t\tdataType: \"json\",\n\t\t\t\t\tsuccess: function( data ) {\n\t\t\t\t\t\tresponse( data );\n\t\t\t\t\t},\n\t\t\t\t\terror: function() {\n\t\t\t\t\t\tresponse( [] );\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t};\n\t\t} else {\n\t\t\tthis.source = this.options.source;\n\t\t}\n\t},\n\n\t_searchTimeout: function( event ) {\n\t\tclearTimeout( this.searching );\n\t\tthis.searching = this._delay( function() {\n\n\t\t\t// Search if the value has changed, or if the user retypes the same value (see #7434)\n\t\t\tvar equalValues = this.term === this._value(),\n\t\t\t\tmenuVisible = this.menu.element.is( \":visible\" ),\n\t\t\t\tmodifierKey = event.altKey || event.ctrlKey || event.metaKey || event.shiftKey;\n\n\t\t\tif ( !equalValues || ( equalValues && !menuVisible && !modifierKey ) ) {\n\t\t\t\tthis.selectedItem = null;\n\t\t\t\tthis.search( null, event );\n\t\t\t}\n\t\t}, this.options.delay );\n\t},\n\n\tsearch: function( value, event ) {\n\t\tvalue = value != null ? value : this._value();\n\n\t\t// Always save the actual value, not the one passed as an argument\n\t\tthis.term = this._value();\n\n\t\tif ( value.length < this.options.minLength ) {\n\t\t\treturn this.close( event );\n\t\t}\n\n\t\tif ( this._trigger( \"search\", event ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\treturn this._search( value );\n\t},\n\n\t_search: function( value ) {\n\t\tthis.pending++;\n\t\tthis._addClass( \"ui-autocomplete-loading\" );\n\t\tthis.cancelSearch = false;\n\n\t\tthis.source( { term: value }, this._response() );\n\t},\n\n\t_response: function() {\n\t\tvar index = ++this.requestIndex;\n\n\t\treturn $.proxy( function( content ) {\n\t\t\tif ( index === this.requestIndex ) {\n\t\t\t\tthis.__response( content );\n\t\t\t}\n\n\t\t\tthis.pending--;\n\t\t\tif ( !this.pending ) {\n\t\t\t\tthis._removeClass( \"ui-autocomplete-loading\" );\n\t\t\t}\n\t\t}, this );\n\t},\n\n\t__response: function( content ) {\n\t\tif ( content ) {\n\t\t\tcontent = this._normalize( content );\n\t\t}\n\t\tthis._trigger( \"response\", null, { content: content } );\n\t\tif ( !this.options.disabled && content && content.length && !this.cancelSearch ) {\n\t\t\tthis._suggest( content );\n\t\t\tthis._trigger( \"open\" );\n\t\t} else {\n\n\t\t\t// use ._close() instead of .close() so we don't cancel future searches\n\t\t\tthis._close();\n\t\t}\n\t},\n\n\tclose: function( event ) {\n\t\tthis.cancelSearch = true;\n\t\tthis._close( event );\n\t},\n\n\t_close: function( event ) {\n\n\t\t// Remove the handler that closes the menu on outside clicks\n\t\tthis._off( this.document, \"mousedown\" );\n\n\t\tif ( this.menu.element.is( \":visible\" ) ) {\n\t\t\tthis.menu.element.hide();\n\t\t\tthis.menu.blur();\n\t\t\tthis.isNewMenu = true;\n\t\t\tthis._trigger( \"close\", event );\n\t\t}\n\t},\n\n\t_change: function( event ) {\n\t\tif ( this.previous !== this._value() ) {\n\t\t\tthis._trigger( \"change\", event, { item: this.selectedItem } );\n\t\t}\n\t},\n\n\t_normalize: function( items ) {\n\n\t\t// assume all items have the right format when the first item is complete\n\t\tif ( items.length && items[ 0 ].label && items[ 0 ].value ) {\n\t\t\treturn items;\n\t\t}\n\t\treturn $.map( items, function( item ) {\n\t\t\tif ( typeof item === \"string\" ) {\n\t\t\t\treturn {\n\t\t\t\t\tlabel: item,\n\t\t\t\t\tvalue: item\n\t\t\t\t};\n\t\t\t}\n\t\t\treturn $.extend( {}, item, {\n\t\t\t\tlabel: item.label || item.value,\n\t\t\t\tvalue: item.value || item.label\n\t\t\t} );\n\t\t} );\n\t},\n\n\t_suggest: function( items ) {\n\t\tvar ul = this.menu.element.empty();\n\t\tthis._renderMenu( ul, items );\n\t\tthis.isNewMenu = true;\n\t\tthis.menu.refresh();\n\n\t\t// Size and position menu\n\t\tul.show();\n\t\tthis._resizeMenu();\n\t\tul.position( $.extend( {\n\t\t\tof: this.element\n\t\t}, this.options.position ) );\n\n\t\tif ( this.options.autoFocus ) {\n\t\t\tthis.menu.next();\n\t\t}\n\n\t\t// Listen for interactions outside of the widget (#6642)\n\t\tthis._on( this.document, {\n\t\t\tmousedown: \"_closeOnClickOutside\"\n\t\t} );\n\t},\n\n\t_resizeMenu: function() {\n\t\tvar ul = this.menu.element;\n\t\tul.outerWidth( Math.max(\n\n\t\t\t// Firefox wraps long text (possibly a rounding bug)\n\t\t\t// so we add 1px to avoid the wrapping (#7513)\n\t\t\tul.width( \"\" ).outerWidth() + 1,\n\t\t\tthis.element.outerWidth()\n\t\t) );\n\t},\n\n\t_renderMenu: function( ul, items ) {\n\t\tvar that = this;\n\t\t$.each( items, function( index, item ) {\n\t\t\tthat._renderItemData( ul, item );\n\t\t} );\n\t},\n\n\t_renderItemData: function( ul, item ) {\n\t\treturn this._renderItem( ul, item ).data( \"ui-autocomplete-item\", item );\n\t},\n\n\t_renderItem: function( ul, item ) {\n\t\treturn $( \"<li>\" )\n\t\t\t.append( $( \"<div>\" ).text( item.label ) )\n\t\t\t.appendTo( ul );\n\t},\n\n\t_move: function( direction, event ) {\n\t\tif ( !this.menu.element.is( \":visible\" ) ) {\n\t\t\tthis.search( null, event );\n\t\t\treturn;\n\t\t}\n\t\tif ( this.menu.isFirstItem() && /^previous/.test( direction ) ||\n\t\t\t\tthis.menu.isLastItem() && /^next/.test( direction ) ) {\n\n\t\t\tif ( !this.isMultiLine ) {\n\t\t\t\tthis._value( this.term );\n\t\t\t}\n\n\t\t\tthis.menu.blur();\n\t\t\treturn;\n\t\t}\n\t\tthis.menu[ direction ]( event );\n\t},\n\n\twidget: function() {\n\t\treturn this.menu.element;\n\t},\n\n\t_value: function() {\n\t\treturn this.valueMethod.apply( this.element, arguments );\n\t},\n\n\t_keyEvent: function( keyEvent, event ) {\n\t\tif ( !this.isMultiLine || this.menu.element.is( \":visible\" ) ) {\n\t\t\tthis._move( keyEvent, event );\n\n\t\t\t// Prevents moving cursor to beginning/end of the text field in some browsers\n\t\t\tevent.preventDefault();\n\t\t}\n\t},\n\n\t// Support: Chrome <=50\n\t// We should be able to just use this.element.prop( \"isContentEditable\" )\n\t// but hidden elements always report false in Chrome.\n\t// https://code.google.com/p/chromium/issues/detail?id=313082\n\t_isContentEditable: function( element ) {\n\t\tif ( !element.length ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tvar editable = element.prop( \"contentEditable\" );\n\n\t\tif ( editable === \"inherit\" ) {\n\t\t  return this._isContentEditable( element.parent() );\n\t\t}\n\n\t\treturn editable === \"true\";\n\t}\n} );\n\n$.extend( $.ui.autocomplete, {\n\tescapeRegex: function( value ) {\n\t\treturn value.replace( /[\\-\\[\\]{}()*+?.,\\\\\\^$|#\\s]/g, \"\\\\$&\" );\n\t},\n\tfilter: function( array, term ) {\n\t\tvar matcher = new RegExp( $.ui.autocomplete.escapeRegex( term ), \"i\" );\n\t\treturn $.grep( array, function( value ) {\n\t\t\treturn matcher.test( value.label || value.value || value );\n\t\t} );\n\t}\n} );\n\n// Live region extension, adding a `messages` option\n// NOTE: This is an experimental API. We are still investigating\n// a full solution for string manipulation and internationalization.\n$.widget( \"ui.autocomplete\", $.ui.autocomplete, {\n\toptions: {\n\t\tmessages: {\n\t\t\tnoResults: \"No search results.\",\n\t\t\tresults: function( amount ) {\n\t\t\t\treturn amount + ( amount > 1 ? \" results are\" : \" result is\" ) +\n\t\t\t\t\t\" available, use up and down arrow keys to navigate.\";\n\t\t\t}\n\t\t}\n\t},\n\n\t__response: function( content ) {\n\t\tvar message;\n\t\tthis._superApply( arguments );\n\t\tif ( this.options.disabled || this.cancelSearch ) {\n\t\t\treturn;\n\t\t}\n\t\tif ( content && content.length ) {\n\t\t\tmessage = this.options.messages.results( content.length );\n\t\t} else {\n\t\t\tmessage = this.options.messages.noResults;\n\t\t}\n\t\tthis.liveRegion.children().hide();\n\t\t$( \"<div>\" ).text( message ).appendTo( this.liveRegion );\n\t}\n} );\n\nvar widgetsAutocomplete = $.ui.autocomplete;\n\n\n/*!\n * jQuery UI Controlgroup 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Controlgroup\n//>>group: Widgets\n//>>description: Visually groups form control widgets\n//>>docs: http://api.jqueryui.com/controlgroup/\n//>>demos: http://jqueryui.com/controlgroup/\n//>>css.structure: ../../themes/base/core.css\n//>>css.structure: ../../themes/base/controlgroup.css\n//>>css.theme: ../../themes/base/theme.css\n\n\nvar controlgroupCornerRegex = /ui-corner-([a-z]){2,6}/g;\n\nvar widgetsControlgroup = $.widget( \"ui.controlgroup\", {\n\tversion: \"1.12.1\",\n\tdefaultElement: \"<div>\",\n\toptions: {\n\t\tdirection: \"horizontal\",\n\t\tdisabled: null,\n\t\tonlyVisible: true,\n\t\titems: {\n\t\t\t\"button\": \"input[type=button], input[type=submit], input[type=reset], button, a\",\n\t\t\t\"controlgroupLabel\": \".ui-controlgroup-label\",\n\t\t\t\"checkboxradio\": \"input[type='checkbox'], input[type='radio']\",\n\t\t\t\"selectmenu\": \"select\",\n\t\t\t\"spinner\": \".ui-spinner-input\"\n\t\t}\n\t},\n\n\t_create: function() {\n\t\tthis._enhance();\n\t},\n\n\t// To support the enhanced option in jQuery Mobile, we isolate DOM manipulation\n\t_enhance: function() {\n\t\tthis.element.attr( \"role\", \"toolbar\" );\n\t\tthis.refresh();\n\t},\n\n\t_destroy: function() {\n\t\tthis._callChildMethod( \"destroy\" );\n\t\tthis.childWidgets.removeData( \"ui-controlgroup-data\" );\n\t\tthis.element.removeAttr( \"role\" );\n\t\tif ( this.options.items.controlgroupLabel ) {\n\t\t\tthis.element\n\t\t\t\t.find( this.options.items.controlgroupLabel )\n\t\t\t\t.find( \".ui-controlgroup-label-contents\" )\n\t\t\t\t.contents().unwrap();\n\t\t}\n\t},\n\n\t_initWidgets: function() {\n\t\tvar that = this,\n\t\t\tchildWidgets = [];\n\n\t\t// First we iterate over each of the items options\n\t\t$.each( this.options.items, function( widget, selector ) {\n\t\t\tvar labels;\n\t\t\tvar options = {};\n\n\t\t\t// Make sure the widget has a selector set\n\t\t\tif ( !selector ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( widget === \"controlgroupLabel\" ) {\n\t\t\t\tlabels = that.element.find( selector );\n\t\t\t\tlabels.each( function() {\n\t\t\t\t\tvar element = $( this );\n\n\t\t\t\t\tif ( element.children( \".ui-controlgroup-label-contents\" ).length ) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\telement.contents()\n\t\t\t\t\t\t.wrapAll( \"<span class='ui-controlgroup-label-contents'></span>\" );\n\t\t\t\t} );\n\t\t\t\tthat._addClass( labels, null, \"ui-widget ui-widget-content ui-state-default\" );\n\t\t\t\tchildWidgets = childWidgets.concat( labels.get() );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Make sure the widget actually exists\n\t\t\tif ( !$.fn[ widget ] ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// We assume everything is in the middle to start because we can't determine\n\t\t\t// first / last elements until all enhancments are done.\n\t\t\tif ( that[ \"_\" + widget + \"Options\" ] ) {\n\t\t\t\toptions = that[ \"_\" + widget + \"Options\" ]( \"middle\" );\n\t\t\t} else {\n\t\t\t\toptions = { classes: {} };\n\t\t\t}\n\n\t\t\t// Find instances of this widget inside controlgroup and init them\n\t\t\tthat.element\n\t\t\t\t.find( selector )\n\t\t\t\t.each( function() {\n\t\t\t\t\tvar element = $( this );\n\t\t\t\t\tvar instance = element[ widget ]( \"instance\" );\n\n\t\t\t\t\t// We need to clone the default options for this type of widget to avoid\n\t\t\t\t\t// polluting the variable options which has a wider scope than a single widget.\n\t\t\t\t\tvar instanceOptions = $.widget.extend( {}, options );\n\n\t\t\t\t\t// If the button is the child of a spinner ignore it\n\t\t\t\t\t// TODO: Find a more generic solution\n\t\t\t\t\tif ( widget === \"button\" && element.parent( \".ui-spinner\" ).length ) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Create the widget if it doesn't exist\n\t\t\t\t\tif ( !instance ) {\n\t\t\t\t\t\tinstance = element[ widget ]()[ widget ]( \"instance\" );\n\t\t\t\t\t}\n\t\t\t\t\tif ( instance ) {\n\t\t\t\t\t\tinstanceOptions.classes =\n\t\t\t\t\t\t\tthat._resolveClassesValues( instanceOptions.classes, instance );\n\t\t\t\t\t}\n\t\t\t\t\telement[ widget ]( instanceOptions );\n\n\t\t\t\t\t// Store an instance of the controlgroup to be able to reference\n\t\t\t\t\t// from the outermost element for changing options and refresh\n\t\t\t\t\tvar widgetElement = element[ widget ]( \"widget\" );\n\t\t\t\t\t$.data( widgetElement[ 0 ], \"ui-controlgroup-data\",\n\t\t\t\t\t\tinstance ? instance : element[ widget ]( \"instance\" ) );\n\n\t\t\t\t\tchildWidgets.push( widgetElement[ 0 ] );\n\t\t\t\t} );\n\t\t} );\n\n\t\tthis.childWidgets = $( $.unique( childWidgets ) );\n\t\tthis._addClass( this.childWidgets, \"ui-controlgroup-item\" );\n\t},\n\n\t_callChildMethod: function( method ) {\n\t\tthis.childWidgets.each( function() {\n\t\t\tvar element = $( this ),\n\t\t\t\tdata = element.data( \"ui-controlgroup-data\" );\n\t\t\tif ( data && data[ method ] ) {\n\t\t\t\tdata[ method ]();\n\t\t\t}\n\t\t} );\n\t},\n\n\t_updateCornerClass: function( element, position ) {\n\t\tvar remove = \"ui-corner-top ui-corner-bottom ui-corner-left ui-corner-right ui-corner-all\";\n\t\tvar add = this._buildSimpleOptions( position, \"label\" ).classes.label;\n\n\t\tthis._removeClass( element, null, remove );\n\t\tthis._addClass( element, null, add );\n\t},\n\n\t_buildSimpleOptions: function( position, key ) {\n\t\tvar direction = this.options.direction === \"vertical\";\n\t\tvar result = {\n\t\t\tclasses: {}\n\t\t};\n\t\tresult.classes[ key ] = {\n\t\t\t\"middle\": \"\",\n\t\t\t\"first\": \"ui-corner-\" + ( direction ? \"top\" : \"left\" ),\n\t\t\t\"last\": \"ui-corner-\" + ( direction ? \"bottom\" : \"right\" ),\n\t\t\t\"only\": \"ui-corner-all\"\n\t\t}[ position ];\n\n\t\treturn result;\n\t},\n\n\t_spinnerOptions: function( position ) {\n\t\tvar options = this._buildSimpleOptions( position, \"ui-spinner\" );\n\n\t\toptions.classes[ \"ui-spinner-up\" ] = \"\";\n\t\toptions.classes[ \"ui-spinner-down\" ] = \"\";\n\n\t\treturn options;\n\t},\n\n\t_buttonOptions: function( position ) {\n\t\treturn this._buildSimpleOptions( position, \"ui-button\" );\n\t},\n\n\t_checkboxradioOptions: function( position ) {\n\t\treturn this._buildSimpleOptions( position, \"ui-checkboxradio-label\" );\n\t},\n\n\t_selectmenuOptions: function( position ) {\n\t\tvar direction = this.options.direction === \"vertical\";\n\t\treturn {\n\t\t\twidth: direction ? \"auto\" : false,\n\t\t\tclasses: {\n\t\t\t\tmiddle: {\n\t\t\t\t\t\"ui-selectmenu-button-open\": \"\",\n\t\t\t\t\t\"ui-selectmenu-button-closed\": \"\"\n\t\t\t\t},\n\t\t\t\tfirst: {\n\t\t\t\t\t\"ui-selectmenu-button-open\": \"ui-corner-\" + ( direction ? \"top\" : \"tl\" ),\n\t\t\t\t\t\"ui-selectmenu-button-closed\": \"ui-corner-\" + ( direction ? \"top\" : \"left\" )\n\t\t\t\t},\n\t\t\t\tlast: {\n\t\t\t\t\t\"ui-selectmenu-button-open\": direction ? \"\" : \"ui-corner-tr\",\n\t\t\t\t\t\"ui-selectmenu-button-closed\": \"ui-corner-\" + ( direction ? \"bottom\" : \"right\" )\n\t\t\t\t},\n\t\t\t\tonly: {\n\t\t\t\t\t\"ui-selectmenu-button-open\": \"ui-corner-top\",\n\t\t\t\t\t\"ui-selectmenu-button-closed\": \"ui-corner-all\"\n\t\t\t\t}\n\n\t\t\t}[ position ]\n\t\t};\n\t},\n\n\t_resolveClassesValues: function( classes, instance ) {\n\t\tvar result = {};\n\t\t$.each( classes, function( key ) {\n\t\t\tvar current = instance.options.classes[ key ] || \"\";\n\t\t\tcurrent = $.trim( current.replace( controlgroupCornerRegex, \"\" ) );\n\t\t\tresult[ key ] = ( current + \" \" + classes[ key ] ).replace( /\\s+/g, \" \" );\n\t\t} );\n\t\treturn result;\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tif ( key === \"direction\" ) {\n\t\t\tthis._removeClass( \"ui-controlgroup-\" + this.options.direction );\n\t\t}\n\n\t\tthis._super( key, value );\n\t\tif ( key === \"disabled\" ) {\n\t\t\tthis._callChildMethod( value ? \"disable\" : \"enable\" );\n\t\t\treturn;\n\t\t}\n\n\t\tthis.refresh();\n\t},\n\n\trefresh: function() {\n\t\tvar children,\n\t\t\tthat = this;\n\n\t\tthis._addClass( \"ui-controlgroup ui-controlgroup-\" + this.options.direction );\n\n\t\tif ( this.options.direction === \"horizontal\" ) {\n\t\t\tthis._addClass( null, \"ui-helper-clearfix\" );\n\t\t}\n\t\tthis._initWidgets();\n\n\t\tchildren = this.childWidgets;\n\n\t\t// We filter here because we need to track all childWidgets not just the visible ones\n\t\tif ( this.options.onlyVisible ) {\n\t\t\tchildren = children.filter( \":visible\" );\n\t\t}\n\n\t\tif ( children.length ) {\n\n\t\t\t// We do this last because we need to make sure all enhancment is done\n\t\t\t// before determining first and last\n\t\t\t$.each( [ \"first\", \"last\" ], function( index, value ) {\n\t\t\t\tvar instance = children[ value ]().data( \"ui-controlgroup-data\" );\n\n\t\t\t\tif ( instance && that[ \"_\" + instance.widgetName + \"Options\" ] ) {\n\t\t\t\t\tvar options = that[ \"_\" + instance.widgetName + \"Options\" ](\n\t\t\t\t\t\tchildren.length === 1 ? \"only\" : value\n\t\t\t\t\t);\n\t\t\t\t\toptions.classes = that._resolveClassesValues( options.classes, instance );\n\t\t\t\t\tinstance.element[ instance.widgetName ]( options );\n\t\t\t\t} else {\n\t\t\t\t\tthat._updateCornerClass( children[ value ](), value );\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\t// Finally call the refresh method on each of the child widgets.\n\t\t\tthis._callChildMethod( \"refresh\" );\n\t\t}\n\t}\n} );\n\n/*!\n * jQuery UI Checkboxradio 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Checkboxradio\n//>>group: Widgets\n//>>description: Enhances a form with multiple themeable checkboxes or radio buttons.\n//>>docs: http://api.jqueryui.com/checkboxradio/\n//>>demos: http://jqueryui.com/checkboxradio/\n//>>css.structure: ../../themes/base/core.css\n//>>css.structure: ../../themes/base/button.css\n//>>css.structure: ../../themes/base/checkboxradio.css\n//>>css.theme: ../../themes/base/theme.css\n\n\n\n$.widget( \"ui.checkboxradio\", [ $.ui.formResetMixin, {\n\tversion: \"1.12.1\",\n\toptions: {\n\t\tdisabled: null,\n\t\tlabel: null,\n\t\ticon: true,\n\t\tclasses: {\n\t\t\t\"ui-checkboxradio-label\": \"ui-corner-all\",\n\t\t\t\"ui-checkboxradio-icon\": \"ui-corner-all\"\n\t\t}\n\t},\n\n\t_getCreateOptions: function() {\n\t\tvar disabled, labels;\n\t\tvar that = this;\n\t\tvar options = this._super() || {};\n\n\t\t// We read the type here, because it makes more sense to throw a element type error first,\n\t\t// rather then the error for lack of a label. Often if its the wrong type, it\n\t\t// won't have a label (e.g. calling on a div, btn, etc)\n\t\tthis._readType();\n\n\t\tlabels = this.element.labels();\n\n\t\t// If there are multiple labels, use the last one\n\t\tthis.label = $( labels[ labels.length - 1 ] );\n\t\tif ( !this.label.length ) {\n\t\t\t$.error( \"No label found for checkboxradio widget\" );\n\t\t}\n\n\t\tthis.originalLabel = \"\";\n\n\t\t// We need to get the label text but this may also need to make sure it does not contain the\n\t\t// input itself.\n\t\tthis.label.contents().not( this.element[ 0 ] ).each( function() {\n\n\t\t\t// The label contents could be text, html, or a mix. We concat each element to get a\n\t\t\t// string representation of the label, without the input as part of it.\n\t\t\tthat.originalLabel += this.nodeType === 3 ? $( this ).text() : this.outerHTML;\n\t\t} );\n\n\t\t// Set the label option if we found label text\n\t\tif ( this.originalLabel ) {\n\t\t\toptions.label = this.originalLabel;\n\t\t}\n\n\t\tdisabled = this.element[ 0 ].disabled;\n\t\tif ( disabled != null ) {\n\t\t\toptions.disabled = disabled;\n\t\t}\n\t\treturn options;\n\t},\n\n\t_create: function() {\n\t\tvar checked = this.element[ 0 ].checked;\n\n\t\tthis._bindFormResetHandler();\n\n\t\tif ( this.options.disabled == null ) {\n\t\t\tthis.options.disabled = this.element[ 0 ].disabled;\n\t\t}\n\n\t\tthis._setOption( \"disabled\", this.options.disabled );\n\t\tthis._addClass( \"ui-checkboxradio\", \"ui-helper-hidden-accessible\" );\n\t\tthis._addClass( this.label, \"ui-checkboxradio-label\", \"ui-button ui-widget\" );\n\n\t\tif ( this.type === \"radio\" ) {\n\t\t\tthis._addClass( this.label, \"ui-checkboxradio-radio-label\" );\n\t\t}\n\n\t\tif ( this.options.label && this.options.label !== this.originalLabel ) {\n\t\t\tthis._updateLabel();\n\t\t} else if ( this.originalLabel ) {\n\t\t\tthis.options.label = this.originalLabel;\n\t\t}\n\n\t\tthis._enhance();\n\n\t\tif ( checked ) {\n\t\t\tthis._addClass( this.label, \"ui-checkboxradio-checked\", \"ui-state-active\" );\n\t\t\tif ( this.icon ) {\n\t\t\t\tthis._addClass( this.icon, null, \"ui-state-hover\" );\n\t\t\t}\n\t\t}\n\n\t\tthis._on( {\n\t\t\tchange: \"_toggleClasses\",\n\t\t\tfocus: function() {\n\t\t\t\tthis._addClass( this.label, null, \"ui-state-focus ui-visual-focus\" );\n\t\t\t},\n\t\t\tblur: function() {\n\t\t\t\tthis._removeClass( this.label, null, \"ui-state-focus ui-visual-focus\" );\n\t\t\t}\n\t\t} );\n\t},\n\n\t_readType: function() {\n\t\tvar nodeName = this.element[ 0 ].nodeName.toLowerCase();\n\t\tthis.type = this.element[ 0 ].type;\n\t\tif ( nodeName !== \"input\" || !/radio|checkbox/.test( this.type ) ) {\n\t\t\t$.error( \"Can't create checkboxradio on element.nodeName=\" + nodeName +\n\t\t\t\t\" and element.type=\" + this.type );\n\t\t}\n\t},\n\n\t// Support jQuery Mobile enhanced option\n\t_enhance: function() {\n\t\tthis._updateIcon( this.element[ 0 ].checked );\n\t},\n\n\twidget: function() {\n\t\treturn this.label;\n\t},\n\n\t_getRadioGroup: function() {\n\t\tvar group;\n\t\tvar name = this.element[ 0 ].name;\n\t\tvar nameSelector = \"input[name='\" + $.ui.escapeSelector( name ) + \"']\";\n\n\t\tif ( !name ) {\n\t\t\treturn $( [] );\n\t\t}\n\n\t\tif ( this.form.length ) {\n\t\t\tgroup = $( this.form[ 0 ].elements ).filter( nameSelector );\n\t\t} else {\n\n\t\t\t// Not inside a form, check all inputs that also are not inside a form\n\t\t\tgroup = $( nameSelector ).filter( function() {\n\t\t\t\treturn $( this ).form().length === 0;\n\t\t\t} );\n\t\t}\n\n\t\treturn group.not( this.element );\n\t},\n\n\t_toggleClasses: function() {\n\t\tvar checked = this.element[ 0 ].checked;\n\t\tthis._toggleClass( this.label, \"ui-checkboxradio-checked\", \"ui-state-active\", checked );\n\n\t\tif ( this.options.icon && this.type === \"checkbox\" ) {\n\t\t\tthis._toggleClass( this.icon, null, \"ui-icon-check ui-state-checked\", checked )\n\t\t\t\t._toggleClass( this.icon, null, \"ui-icon-blank\", !checked );\n\t\t}\n\n\t\tif ( this.type === \"radio\" ) {\n\t\t\tthis._getRadioGroup()\n\t\t\t\t.each( function() {\n\t\t\t\t\tvar instance = $( this ).checkboxradio( \"instance\" );\n\n\t\t\t\t\tif ( instance ) {\n\t\t\t\t\t\tinstance._removeClass( instance.label,\n\t\t\t\t\t\t\t\"ui-checkboxradio-checked\", \"ui-state-active\" );\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t}\n\t},\n\n\t_destroy: function() {\n\t\tthis._unbindFormResetHandler();\n\n\t\tif ( this.icon ) {\n\t\t\tthis.icon.remove();\n\t\t\tthis.iconSpace.remove();\n\t\t}\n\t},\n\n\t_setOption: function( key, value ) {\n\n\t\t// We don't allow the value to be set to nothing\n\t\tif ( key === \"label\" && !value ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._super( key, value );\n\n\t\tif ( key === \"disabled\" ) {\n\t\t\tthis._toggleClass( this.label, null, \"ui-state-disabled\", value );\n\t\t\tthis.element[ 0 ].disabled = value;\n\n\t\t\t// Don't refresh when setting disabled\n\t\t\treturn;\n\t\t}\n\t\tthis.refresh();\n\t},\n\n\t_updateIcon: function( checked ) {\n\t\tvar toAdd = \"ui-icon ui-icon-background \";\n\n\t\tif ( this.options.icon ) {\n\t\t\tif ( !this.icon ) {\n\t\t\t\tthis.icon = $( \"<span>\" );\n\t\t\t\tthis.iconSpace = $( \"<span> </span>\" );\n\t\t\t\tthis._addClass( this.iconSpace, \"ui-checkboxradio-icon-space\" );\n\t\t\t}\n\n\t\t\tif ( this.type === \"checkbox\" ) {\n\t\t\t\ttoAdd += checked ? \"ui-icon-check ui-state-checked\" : \"ui-icon-blank\";\n\t\t\t\tthis._removeClass( this.icon, null, checked ? \"ui-icon-blank\" : \"ui-icon-check\" );\n\t\t\t} else {\n\t\t\t\ttoAdd += \"ui-icon-blank\";\n\t\t\t}\n\t\t\tthis._addClass( this.icon, \"ui-checkboxradio-icon\", toAdd );\n\t\t\tif ( !checked ) {\n\t\t\t\tthis._removeClass( this.icon, null, \"ui-icon-check ui-state-checked\" );\n\t\t\t}\n\t\t\tthis.icon.prependTo( this.label ).after( this.iconSpace );\n\t\t} else if ( this.icon !== undefined ) {\n\t\t\tthis.icon.remove();\n\t\t\tthis.iconSpace.remove();\n\t\t\tdelete this.icon;\n\t\t}\n\t},\n\n\t_updateLabel: function() {\n\n\t\t// Remove the contents of the label ( minus the icon, icon space, and input )\n\t\tvar contents = this.label.contents().not( this.element[ 0 ] );\n\t\tif ( this.icon ) {\n\t\t\tcontents = contents.not( this.icon[ 0 ] );\n\t\t}\n\t\tif ( this.iconSpace ) {\n\t\t\tcontents = contents.not( this.iconSpace[ 0 ] );\n\t\t}\n\t\tcontents.remove();\n\n\t\tthis.label.append( this.options.label );\n\t},\n\n\trefresh: function() {\n\t\tvar checked = this.element[ 0 ].checked,\n\t\t\tisDisabled = this.element[ 0 ].disabled;\n\n\t\tthis._updateIcon( checked );\n\t\tthis._toggleClass( this.label, \"ui-checkboxradio-checked\", \"ui-state-active\", checked );\n\t\tif ( this.options.label !== null ) {\n\t\t\tthis._updateLabel();\n\t\t}\n\n\t\tif ( isDisabled !== this.options.disabled ) {\n\t\t\tthis._setOptions( { \"disabled\": isDisabled } );\n\t\t}\n\t}\n\n} ] );\n\nvar widgetsCheckboxradio = $.ui.checkboxradio;\n\n\n/*!\n * jQuery UI Button 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Button\n//>>group: Widgets\n//>>description: Enhances a form with themeable buttons.\n//>>docs: http://api.jqueryui.com/button/\n//>>demos: http://jqueryui.com/button/\n//>>css.structure: ../../themes/base/core.css\n//>>css.structure: ../../themes/base/button.css\n//>>css.theme: ../../themes/base/theme.css\n\n\n\n$.widget( \"ui.button\", {\n\tversion: \"1.12.1\",\n\tdefaultElement: \"<button>\",\n\toptions: {\n\t\tclasses: {\n\t\t\t\"ui-button\": \"ui-corner-all\"\n\t\t},\n\t\tdisabled: null,\n\t\ticon: null,\n\t\ticonPosition: \"beginning\",\n\t\tlabel: null,\n\t\tshowLabel: true\n\t},\n\n\t_getCreateOptions: function() {\n\t\tvar disabled,\n\n\t\t\t// This is to support cases like in jQuery Mobile where the base widget does have\n\t\t\t// an implementation of _getCreateOptions\n\t\t\toptions = this._super() || {};\n\n\t\tthis.isInput = this.element.is( \"input\" );\n\n\t\tdisabled = this.element[ 0 ].disabled;\n\t\tif ( disabled != null ) {\n\t\t\toptions.disabled = disabled;\n\t\t}\n\n\t\tthis.originalLabel = this.isInput ? this.element.val() : this.element.html();\n\t\tif ( this.originalLabel ) {\n\t\t\toptions.label = this.originalLabel;\n\t\t}\n\n\t\treturn options;\n\t},\n\n\t_create: function() {\n\t\tif ( !this.option.showLabel & !this.options.icon ) {\n\t\t\tthis.options.showLabel = true;\n\t\t}\n\n\t\t// We have to check the option again here even though we did in _getCreateOptions,\n\t\t// because null may have been passed on init which would override what was set in\n\t\t// _getCreateOptions\n\t\tif ( this.options.disabled == null ) {\n\t\t\tthis.options.disabled = this.element[ 0 ].disabled || false;\n\t\t}\n\n\t\tthis.hasTitle = !!this.element.attr( \"title\" );\n\n\t\t// Check to see if the label needs to be set or if its already correct\n\t\tif ( this.options.label && this.options.label !== this.originalLabel ) {\n\t\t\tif ( this.isInput ) {\n\t\t\t\tthis.element.val( this.options.label );\n\t\t\t} else {\n\t\t\t\tthis.element.html( this.options.label );\n\t\t\t}\n\t\t}\n\t\tthis._addClass( \"ui-button\", \"ui-widget\" );\n\t\tthis._setOption( \"disabled\", this.options.disabled );\n\t\tthis._enhance();\n\n\t\tif ( this.element.is( \"a\" ) ) {\n\t\t\tthis._on( {\n\t\t\t\t\"keyup\": function( event ) {\n\t\t\t\t\tif ( event.keyCode === $.ui.keyCode.SPACE ) {\n\t\t\t\t\t\tevent.preventDefault();\n\n\t\t\t\t\t\t// Support: PhantomJS <= 1.9, IE 8 Only\n\t\t\t\t\t\t// If a native click is available use it so we actually cause navigation\n\t\t\t\t\t\t// otherwise just trigger a click event\n\t\t\t\t\t\tif ( this.element[ 0 ].click ) {\n\t\t\t\t\t\t\tthis.element[ 0 ].click();\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthis.element.trigger( \"click\" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\t},\n\n\t_enhance: function() {\n\t\tif ( !this.element.is( \"button\" ) ) {\n\t\t\tthis.element.attr( \"role\", \"button\" );\n\t\t}\n\n\t\tif ( this.options.icon ) {\n\t\t\tthis._updateIcon( \"icon\", this.options.icon );\n\t\t\tthis._updateTooltip();\n\t\t}\n\t},\n\n\t_updateTooltip: function() {\n\t\tthis.title = this.element.attr( \"title\" );\n\n\t\tif ( !this.options.showLabel && !this.title ) {\n\t\t\tthis.element.attr( \"title\", this.options.label );\n\t\t}\n\t},\n\n\t_updateIcon: function( option, value ) {\n\t\tvar icon = option !== \"iconPosition\",\n\t\t\tposition = icon ? this.options.iconPosition : value,\n\t\t\tdisplayBlock = position === \"top\" || position === \"bottom\";\n\n\t\t// Create icon\n\t\tif ( !this.icon ) {\n\t\t\tthis.icon = $( \"<span>\" );\n\n\t\t\tthis._addClass( this.icon, \"ui-button-icon\", \"ui-icon\" );\n\n\t\t\tif ( !this.options.showLabel ) {\n\t\t\t\tthis._addClass( \"ui-button-icon-only\" );\n\t\t\t}\n\t\t} else if ( icon ) {\n\n\t\t\t// If we are updating the icon remove the old icon class\n\t\t\tthis._removeClass( this.icon, null, this.options.icon );\n\t\t}\n\n\t\t// If we are updating the icon add the new icon class\n\t\tif ( icon ) {\n\t\t\tthis._addClass( this.icon, null, value );\n\t\t}\n\n\t\tthis._attachIcon( position );\n\n\t\t// If the icon is on top or bottom we need to add the ui-widget-icon-block class and remove\n\t\t// the iconSpace if there is one.\n\t\tif ( displayBlock ) {\n\t\t\tthis._addClass( this.icon, null, \"ui-widget-icon-block\" );\n\t\t\tif ( this.iconSpace ) {\n\t\t\t\tthis.iconSpace.remove();\n\t\t\t}\n\t\t} else {\n\n\t\t\t// Position is beginning or end so remove the ui-widget-icon-block class and add the\n\t\t\t// space if it does not exist\n\t\t\tif ( !this.iconSpace ) {\n\t\t\t\tthis.iconSpace = $( \"<span> </span>\" );\n\t\t\t\tthis._addClass( this.iconSpace, \"ui-button-icon-space\" );\n\t\t\t}\n\t\t\tthis._removeClass( this.icon, null, \"ui-wiget-icon-block\" );\n\t\t\tthis._attachIconSpace( position );\n\t\t}\n\t},\n\n\t_destroy: function() {\n\t\tthis.element.removeAttr( \"role\" );\n\n\t\tif ( this.icon ) {\n\t\t\tthis.icon.remove();\n\t\t}\n\t\tif ( this.iconSpace ) {\n\t\t\tthis.iconSpace.remove();\n\t\t}\n\t\tif ( !this.hasTitle ) {\n\t\t\tthis.element.removeAttr( \"title\" );\n\t\t}\n\t},\n\n\t_attachIconSpace: function( iconPosition ) {\n\t\tthis.icon[ /^(?:end|bottom)/.test( iconPosition ) ? \"before\" : \"after\" ]( this.iconSpace );\n\t},\n\n\t_attachIcon: function( iconPosition ) {\n\t\tthis.element[ /^(?:end|bottom)/.test( iconPosition ) ? \"append\" : \"prepend\" ]( this.icon );\n\t},\n\n\t_setOptions: function( options ) {\n\t\tvar newShowLabel = options.showLabel === undefined ?\n\t\t\t\tthis.options.showLabel :\n\t\t\t\toptions.showLabel,\n\t\t\tnewIcon = options.icon === undefined ? this.options.icon : options.icon;\n\n\t\tif ( !newShowLabel && !newIcon ) {\n\t\t\toptions.showLabel = true;\n\t\t}\n\t\tthis._super( options );\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tif ( key === \"icon\" ) {\n\t\t\tif ( value ) {\n\t\t\t\tthis._updateIcon( key, value );\n\t\t\t} else if ( this.icon ) {\n\t\t\t\tthis.icon.remove();\n\t\t\t\tif ( this.iconSpace ) {\n\t\t\t\t\tthis.iconSpace.remove();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( key === \"iconPosition\" ) {\n\t\t\tthis._updateIcon( key, value );\n\t\t}\n\n\t\t// Make sure we can't end up with a button that has neither text nor icon\n\t\tif ( key === \"showLabel\" ) {\n\t\t\t\tthis._toggleClass( \"ui-button-icon-only\", null, !value );\n\t\t\t\tthis._updateTooltip();\n\t\t}\n\n\t\tif ( key === \"label\" ) {\n\t\t\tif ( this.isInput ) {\n\t\t\t\tthis.element.val( value );\n\t\t\t} else {\n\n\t\t\t\t// If there is an icon, append it, else nothing then append the value\n\t\t\t\t// this avoids removal of the icon when setting label text\n\t\t\t\tthis.element.html( value );\n\t\t\t\tif ( this.icon ) {\n\t\t\t\t\tthis._attachIcon( this.options.iconPosition );\n\t\t\t\t\tthis._attachIconSpace( this.options.iconPosition );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis._super( key, value );\n\n\t\tif ( key === \"disabled\" ) {\n\t\t\tthis._toggleClass( null, \"ui-state-disabled\", value );\n\t\t\tthis.element[ 0 ].disabled = value;\n\t\t\tif ( value ) {\n\t\t\t\tthis.element.blur();\n\t\t\t}\n\t\t}\n\t},\n\n\trefresh: function() {\n\n\t\t// Make sure to only check disabled if its an element that supports this otherwise\n\t\t// check for the disabled class to determine state\n\t\tvar isDisabled = this.element.is( \"input, button\" ) ?\n\t\t\tthis.element[ 0 ].disabled : this.element.hasClass( \"ui-button-disabled\" );\n\n\t\tif ( isDisabled !== this.options.disabled ) {\n\t\t\tthis._setOptions( { disabled: isDisabled } );\n\t\t}\n\n\t\tthis._updateTooltip();\n\t}\n} );\n\n// DEPRECATED\nif ( $.uiBackCompat !== false ) {\n\n\t// Text and Icons options\n\t$.widget( \"ui.button\", $.ui.button, {\n\t\toptions: {\n\t\t\ttext: true,\n\t\t\ticons: {\n\t\t\t\tprimary: null,\n\t\t\t\tsecondary: null\n\t\t\t}\n\t\t},\n\n\t\t_create: function() {\n\t\t\tif ( this.options.showLabel && !this.options.text ) {\n\t\t\t\tthis.options.showLabel = this.options.text;\n\t\t\t}\n\t\t\tif ( !this.options.showLabel && this.options.text ) {\n\t\t\t\tthis.options.text = this.options.showLabel;\n\t\t\t}\n\t\t\tif ( !this.options.icon && ( this.options.icons.primary ||\n\t\t\t\t\tthis.options.icons.secondary ) ) {\n\t\t\t\tif ( this.options.icons.primary ) {\n\t\t\t\t\tthis.options.icon = this.options.icons.primary;\n\t\t\t\t} else {\n\t\t\t\t\tthis.options.icon = this.options.icons.secondary;\n\t\t\t\t\tthis.options.iconPosition = \"end\";\n\t\t\t\t}\n\t\t\t} else if ( this.options.icon ) {\n\t\t\t\tthis.options.icons.primary = this.options.icon;\n\t\t\t}\n\t\t\tthis._super();\n\t\t},\n\n\t\t_setOption: function( key, value ) {\n\t\t\tif ( key === \"text\" ) {\n\t\t\t\tthis._super( \"showLabel\", value );\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif ( key === \"showLabel\" ) {\n\t\t\t\tthis.options.text = value;\n\t\t\t}\n\t\t\tif ( key === \"icon\" ) {\n\t\t\t\tthis.options.icons.primary = value;\n\t\t\t}\n\t\t\tif ( key === \"icons\" ) {\n\t\t\t\tif ( value.primary ) {\n\t\t\t\t\tthis._super( \"icon\", value.primary );\n\t\t\t\t\tthis._super( \"iconPosition\", \"beginning\" );\n\t\t\t\t} else if ( value.secondary ) {\n\t\t\t\t\tthis._super( \"icon\", value.secondary );\n\t\t\t\t\tthis._super( \"iconPosition\", \"end\" );\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis._superApply( arguments );\n\t\t}\n\t} );\n\n\t$.fn.button = ( function( orig ) {\n\t\treturn function() {\n\t\t\tif ( !this.length || ( this.length && this[ 0 ].tagName !== \"INPUT\" ) ||\n\t\t\t\t\t( this.length && this[ 0 ].tagName === \"INPUT\" && (\n\t\t\t\t\t\tthis.attr( \"type\" ) !== \"checkbox\" && this.attr( \"type\" ) !== \"radio\"\n\t\t\t\t\t) ) ) {\n\t\t\t\treturn orig.apply( this, arguments );\n\t\t\t}\n\t\t\tif ( !$.ui.checkboxradio ) {\n\t\t\t\t$.error( \"Checkboxradio widget missing\" );\n\t\t\t}\n\t\t\tif ( arguments.length === 0 ) {\n\t\t\t\treturn this.checkboxradio( {\n\t\t\t\t\t\"icon\": false\n\t\t\t\t} );\n\t\t\t}\n\t\t\treturn this.checkboxradio.apply( this, arguments );\n\t\t};\n\t} )( $.fn.button );\n\n\t$.fn.buttonset = function() {\n\t\tif ( !$.ui.controlgroup ) {\n\t\t\t$.error( \"Controlgroup widget missing\" );\n\t\t}\n\t\tif ( arguments[ 0 ] === \"option\" && arguments[ 1 ] === \"items\" && arguments[ 2 ] ) {\n\t\t\treturn this.controlgroup.apply( this,\n\t\t\t\t[ arguments[ 0 ], \"items.button\", arguments[ 2 ] ] );\n\t\t}\n\t\tif ( arguments[ 0 ] === \"option\" && arguments[ 1 ] === \"items\" ) {\n\t\t\treturn this.controlgroup.apply( this, [ arguments[ 0 ], \"items.button\" ] );\n\t\t}\n\t\tif ( typeof arguments[ 0 ] === \"object\" && arguments[ 0 ].items ) {\n\t\t\targuments[ 0 ].items = {\n\t\t\t\tbutton: arguments[ 0 ].items\n\t\t\t};\n\t\t}\n\t\treturn this.controlgroup.apply( this, arguments );\n\t};\n}\n\nvar widgetsButton = $.ui.button;\n\n\n// jscs:disable maximumLineLength\n/* jscs:disable requireCamelCaseOrUpperCaseIdentifiers */\n/*!\n * jQuery UI Datepicker 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Datepicker\n//>>group: Widgets\n//>>description: Displays a calendar from an input or inline for selecting dates.\n//>>docs: http://api.jqueryui.com/datepicker/\n//>>demos: http://jqueryui.com/datepicker/\n//>>css.structure: ../../themes/base/core.css\n//>>css.structure: ../../themes/base/datepicker.css\n//>>css.theme: ../../themes/base/theme.css\n\n\n\n$.extend( $.ui, { datepicker: { version: \"1.12.1\" } } );\n\nvar datepicker_instActive;\n\nfunction datepicker_getZindex( elem ) {\n\tvar position, value;\n\twhile ( elem.length && elem[ 0 ] !== document ) {\n\n\t\t// Ignore z-index if position is set to a value where z-index is ignored by the browser\n\t\t// This makes behavior of this function consistent across browsers\n\t\t// WebKit always returns auto if the element is positioned\n\t\tposition = elem.css( \"position\" );\n\t\tif ( position === \"absolute\" || position === \"relative\" || position === \"fixed\" ) {\n\n\t\t\t// IE returns 0 when zIndex is not specified\n\t\t\t// other browsers return a string\n\t\t\t// we ignore the case of nested elements with an explicit value of 0\n\t\t\t// <div style=\"z-index: -10;\"><div style=\"z-index: 0;\"></div></div>\n\t\t\tvalue = parseInt( elem.css( \"zIndex\" ), 10 );\n\t\t\tif ( !isNaN( value ) && value !== 0 ) {\n\t\t\t\treturn value;\n\t\t\t}\n\t\t}\n\t\telem = elem.parent();\n\t}\n\n\treturn 0;\n}\n/* Date picker manager.\n   Use the singleton instance of this class, $.datepicker, to interact with the date picker.\n   Settings for (groups of) date pickers are maintained in an instance object,\n   allowing multiple different settings on the same page. */\n\nfunction Datepicker() {\n\tthis._curInst = null; // The current instance in use\n\tthis._keyEvent = false; // If the last event was a key event\n\tthis._disabledInputs = []; // List of date picker inputs that have been disabled\n\tthis._datepickerShowing = false; // True if the popup picker is showing , false if not\n\tthis._inDialog = false; // True if showing within a \"dialog\", false if not\n\tthis._mainDivId = \"ui-datepicker-div\"; // The ID of the main datepicker division\n\tthis._inlineClass = \"ui-datepicker-inline\"; // The name of the inline marker class\n\tthis._appendClass = \"ui-datepicker-append\"; // The name of the append marker class\n\tthis._triggerClass = \"ui-datepicker-trigger\"; // The name of the trigger marker class\n\tthis._dialogClass = \"ui-datepicker-dialog\"; // The name of the dialog marker class\n\tthis._disableClass = \"ui-datepicker-disabled\"; // The name of the disabled covering marker class\n\tthis._unselectableClass = \"ui-datepicker-unselectable\"; // The name of the unselectable cell marker class\n\tthis._currentClass = \"ui-datepicker-current-day\"; // The name of the current day marker class\n\tthis._dayOverClass = \"ui-datepicker-days-cell-over\"; // The name of the day hover marker class\n\tthis.regional = []; // Available regional settings, indexed by language code\n\tthis.regional[ \"\" ] = { // Default regional settings\n\t\tcloseText: \"Done\", // Display text for close link\n\t\tprevText: \"Prev\", // Display text for previous month link\n\t\tnextText: \"Next\", // Display text for next month link\n\t\tcurrentText: \"Today\", // Display text for current month link\n\t\tmonthNames: [ \"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\n\t\t\t\"July\",\"August\",\"September\",\"October\",\"November\",\"December\" ], // Names of months for drop-down and formatting\n\t\tmonthNamesShort: [ \"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\" ], // For formatting\n\t\tdayNames: [ \"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\" ], // For formatting\n\t\tdayNamesShort: [ \"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\" ], // For formatting\n\t\tdayNamesMin: [ \"Su\",\"Mo\",\"Tu\",\"We\",\"Th\",\"Fr\",\"Sa\" ], // Column headings for days starting at Sunday\n\t\tweekHeader: \"Wk\", // Column header for week of the year\n\t\tdateFormat: \"mm/dd/yy\", // See format options on parseDate\n\t\tfirstDay: 0, // The first day of the week, Sun = 0, Mon = 1, ...\n\t\tisRTL: false, // True if right-to-left language, false if left-to-right\n\t\tshowMonthAfterYear: false, // True if the year select precedes month, false for month then year\n\t\tyearSuffix: \"\" // Additional text to append to the year in the month headers\n\t};\n\tthis._defaults = { // Global defaults for all the date picker instances\n\t\tshowOn: \"focus\", // \"focus\" for popup on focus,\n\t\t\t// \"button\" for trigger button, or \"both\" for either\n\t\tshowAnim: \"fadeIn\", // Name of jQuery animation for popup\n\t\tshowOptions: {}, // Options for enhanced animations\n\t\tdefaultDate: null, // Used when field is blank: actual date,\n\t\t\t// +/-number for offset from today, null for today\n\t\tappendText: \"\", // Display text following the input box, e.g. showing the format\n\t\tbuttonText: \"...\", // Text for trigger button\n\t\tbuttonImage: \"\", // URL for trigger button image\n\t\tbuttonImageOnly: false, // True if the image appears alone, false if it appears on a button\n\t\thideIfNoPrevNext: false, // True to hide next/previous month links\n\t\t\t// if not applicable, false to just disable them\n\t\tnavigationAsDateFormat: false, // True if date formatting applied to prev/today/next links\n\t\tgotoCurrent: false, // True if today link goes back to current selection instead\n\t\tchangeMonth: false, // True if month can be selected directly, false if only prev/next\n\t\tchangeYear: false, // True if year can be selected directly, false if only prev/next\n\t\tyearRange: \"c-10:c+10\", // Range of years to display in drop-down,\n\t\t\t// either relative to today's year (-nn:+nn), relative to currently displayed year\n\t\t\t// (c-nn:c+nn), absolute (nnnn:nnnn), or a combination of the above (nnnn:-n)\n\t\tshowOtherMonths: false, // True to show dates in other months, false to leave blank\n\t\tselectOtherMonths: false, // True to allow selection of dates in other months, false for unselectable\n\t\tshowWeek: false, // True to show week of the year, false to not show it\n\t\tcalculateWeek: this.iso8601Week, // How to calculate the week of the year,\n\t\t\t// takes a Date and returns the number of the week for it\n\t\tshortYearCutoff: \"+10\", // Short year values < this are in the current century,\n\t\t\t// > this are in the previous century,\n\t\t\t// string value starting with \"+\" for current year + value\n\t\tminDate: null, // The earliest selectable date, or null for no limit\n\t\tmaxDate: null, // The latest selectable date, or null for no limit\n\t\tduration: \"fast\", // Duration of display/closure\n\t\tbeforeShowDay: null, // Function that takes a date and returns an array with\n\t\t\t// [0] = true if selectable, false if not, [1] = custom CSS class name(s) or \"\",\n\t\t\t// [2] = cell title (optional), e.g. $.datepicker.noWeekends\n\t\tbeforeShow: null, // Function that takes an input field and\n\t\t\t// returns a set of custom settings for the date picker\n\t\tonSelect: null, // Define a callback function when a date is selected\n\t\tonChangeMonthYear: null, // Define a callback function when the month or year is changed\n\t\tonClose: null, // Define a callback function when the datepicker is closed\n\t\tnumberOfMonths: 1, // Number of months to show at a time\n\t\tshowCurrentAtPos: 0, // The position in multipe months at which to show the current month (starting at 0)\n\t\tstepMonths: 1, // Number of months to step back/forward\n\t\tstepBigMonths: 12, // Number of months to step back/forward for the big links\n\t\taltField: \"\", // Selector for an alternate field to store selected dates into\n\t\taltFormat: \"\", // The date format to use for the alternate field\n\t\tconstrainInput: true, // The input is constrained by the current date format\n\t\tshowButtonPanel: false, // True to show button panel, false to not show it\n\t\tautoSize: false, // True to size the input for the date format, false to leave as is\n\t\tdisabled: false // The initial disabled state\n\t};\n\t$.extend( this._defaults, this.regional[ \"\" ] );\n\tthis.regional.en = $.extend( true, {}, this.regional[ \"\" ] );\n\tthis.regional[ \"en-US\" ] = $.extend( true, {}, this.regional.en );\n\tthis.dpDiv = datepicker_bindHover( $( \"<div id='\" + this._mainDivId + \"' class='ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>\" ) );\n}\n\n$.extend( Datepicker.prototype, {\n\t/* Class name added to elements to indicate already configured with a date picker. */\n\tmarkerClassName: \"hasDatepicker\",\n\n\t//Keep track of the maximum number of rows displayed (see #7043)\n\tmaxRows: 4,\n\n\t// TODO rename to \"widget\" when switching to widget factory\n\t_widgetDatepicker: function() {\n\t\treturn this.dpDiv;\n\t},\n\n\t/* Override the default settings for all instances of the date picker.\n\t * @param  settings  object - the new settings to use as defaults (anonymous object)\n\t * @return the manager object\n\t */\n\tsetDefaults: function( settings ) {\n\t\tdatepicker_extendRemove( this._defaults, settings || {} );\n\t\treturn this;\n\t},\n\n\t/* Attach the date picker to a jQuery selection.\n\t * @param  target\telement - the target input field or division or span\n\t * @param  settings  object - the new settings to use for this date picker instance (anonymous)\n\t */\n\t_attachDatepicker: function( target, settings ) {\n\t\tvar nodeName, inline, inst;\n\t\tnodeName = target.nodeName.toLowerCase();\n\t\tinline = ( nodeName === \"div\" || nodeName === \"span\" );\n\t\tif ( !target.id ) {\n\t\t\tthis.uuid += 1;\n\t\t\ttarget.id = \"dp\" + this.uuid;\n\t\t}\n\t\tinst = this._newInst( $( target ), inline );\n\t\tinst.settings = $.extend( {}, settings || {} );\n\t\tif ( nodeName === \"input\" ) {\n\t\t\tthis._connectDatepicker( target, inst );\n\t\t} else if ( inline ) {\n\t\t\tthis._inlineDatepicker( target, inst );\n\t\t}\n\t},\n\n\t/* Create a new instance object. */\n\t_newInst: function( target, inline ) {\n\t\tvar id = target[ 0 ].id.replace( /([^A-Za-z0-9_\\-])/g, \"\\\\\\\\$1\" ); // escape jQuery meta chars\n\t\treturn { id: id, input: target, // associated target\n\t\t\tselectedDay: 0, selectedMonth: 0, selectedYear: 0, // current selection\n\t\t\tdrawMonth: 0, drawYear: 0, // month being drawn\n\t\t\tinline: inline, // is datepicker inline or not\n\t\t\tdpDiv: ( !inline ? this.dpDiv : // presentation div\n\t\t\tdatepicker_bindHover( $( \"<div class='\" + this._inlineClass + \" ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>\" ) ) ) };\n\t},\n\n\t/* Attach the date picker to an input field. */\n\t_connectDatepicker: function( target, inst ) {\n\t\tvar input = $( target );\n\t\tinst.append = $( [] );\n\t\tinst.trigger = $( [] );\n\t\tif ( input.hasClass( this.markerClassName ) ) {\n\t\t\treturn;\n\t\t}\n\t\tthis._attachments( input, inst );\n\t\tinput.addClass( this.markerClassName ).on( \"keydown\", this._doKeyDown ).\n\t\t\ton( \"keypress\", this._doKeyPress ).on( \"keyup\", this._doKeyUp );\n\t\tthis._autoSize( inst );\n\t\t$.data( target, \"datepicker\", inst );\n\n\t\t//If disabled option is true, disable the datepicker once it has been attached to the input (see ticket #5665)\n\t\tif ( inst.settings.disabled ) {\n\t\t\tthis._disableDatepicker( target );\n\t\t}\n\t},\n\n\t/* Make attachments based on settings. */\n\t_attachments: function( input, inst ) {\n\t\tvar showOn, buttonText, buttonImage,\n\t\t\tappendText = this._get( inst, \"appendText\" ),\n\t\t\tisRTL = this._get( inst, \"isRTL\" );\n\n\t\tif ( inst.append ) {\n\t\t\tinst.append.remove();\n\t\t}\n\t\tif ( appendText ) {\n\t\t\tinst.append = $( \"<span class='\" + this._appendClass + \"'>\" + appendText + \"</span>\" );\n\t\t\tinput[ isRTL ? \"before\" : \"after\" ]( inst.append );\n\t\t}\n\n\t\tinput.off( \"focus\", this._showDatepicker );\n\n\t\tif ( inst.trigger ) {\n\t\t\tinst.trigger.remove();\n\t\t}\n\n\t\tshowOn = this._get( inst, \"showOn\" );\n\t\tif ( showOn === \"focus\" || showOn === \"both\" ) { // pop-up date picker when in the marked field\n\t\t\tinput.on( \"focus\", this._showDatepicker );\n\t\t}\n\t\tif ( showOn === \"button\" || showOn === \"both\" ) { // pop-up date picker when button clicked\n\t\t\tbuttonText = this._get( inst, \"buttonText\" );\n\t\t\tbuttonImage = this._get( inst, \"buttonImage\" );\n\t\t\tinst.trigger = $( this._get( inst, \"buttonImageOnly\" ) ?\n\t\t\t\t$( \"<img/>\" ).addClass( this._triggerClass ).\n\t\t\t\t\tattr( { src: buttonImage, alt: buttonText, title: buttonText } ) :\n\t\t\t\t$( \"<button type='button'></button>\" ).addClass( this._triggerClass ).\n\t\t\t\t\thtml( !buttonImage ? buttonText : $( \"<img/>\" ).attr(\n\t\t\t\t\t{ src:buttonImage, alt:buttonText, title:buttonText } ) ) );\n\t\t\tinput[ isRTL ? \"before\" : \"after\" ]( inst.trigger );\n\t\t\tinst.trigger.on( \"click\", function() {\n\t\t\t\tif ( $.datepicker._datepickerShowing && $.datepicker._lastInput === input[ 0 ] ) {\n\t\t\t\t\t$.datepicker._hideDatepicker();\n\t\t\t\t} else if ( $.datepicker._datepickerShowing && $.datepicker._lastInput !== input[ 0 ] ) {\n\t\t\t\t\t$.datepicker._hideDatepicker();\n\t\t\t\t\t$.datepicker._showDatepicker( input[ 0 ] );\n\t\t\t\t} else {\n\t\t\t\t\t$.datepicker._showDatepicker( input[ 0 ] );\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t} );\n\t\t}\n\t},\n\n\t/* Apply the maximum length for the date format. */\n\t_autoSize: function( inst ) {\n\t\tif ( this._get( inst, \"autoSize\" ) && !inst.inline ) {\n\t\t\tvar findMax, max, maxI, i,\n\t\t\t\tdate = new Date( 2009, 12 - 1, 20 ), // Ensure double digits\n\t\t\t\tdateFormat = this._get( inst, \"dateFormat\" );\n\n\t\t\tif ( dateFormat.match( /[DM]/ ) ) {\n\t\t\t\tfindMax = function( names ) {\n\t\t\t\t\tmax = 0;\n\t\t\t\t\tmaxI = 0;\n\t\t\t\t\tfor ( i = 0; i < names.length; i++ ) {\n\t\t\t\t\t\tif ( names[ i ].length > max ) {\n\t\t\t\t\t\t\tmax = names[ i ].length;\n\t\t\t\t\t\t\tmaxI = i;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn maxI;\n\t\t\t\t};\n\t\t\t\tdate.setMonth( findMax( this._get( inst, ( dateFormat.match( /MM/ ) ?\n\t\t\t\t\t\"monthNames\" : \"monthNamesShort\" ) ) ) );\n\t\t\t\tdate.setDate( findMax( this._get( inst, ( dateFormat.match( /DD/ ) ?\n\t\t\t\t\t\"dayNames\" : \"dayNamesShort\" ) ) ) + 20 - date.getDay() );\n\t\t\t}\n\t\t\tinst.input.attr( \"size\", this._formatDate( inst, date ).length );\n\t\t}\n\t},\n\n\t/* Attach an inline date picker to a div. */\n\t_inlineDatepicker: function( target, inst ) {\n\t\tvar divSpan = $( target );\n\t\tif ( divSpan.hasClass( this.markerClassName ) ) {\n\t\t\treturn;\n\t\t}\n\t\tdivSpan.addClass( this.markerClassName ).append( inst.dpDiv );\n\t\t$.data( target, \"datepicker\", inst );\n\t\tthis._setDate( inst, this._getDefaultDate( inst ), true );\n\t\tthis._updateDatepicker( inst );\n\t\tthis._updateAlternate( inst );\n\n\t\t//If disabled option is true, disable the datepicker before showing it (see ticket #5665)\n\t\tif ( inst.settings.disabled ) {\n\t\t\tthis._disableDatepicker( target );\n\t\t}\n\n\t\t// Set display:block in place of inst.dpDiv.show() which won't work on disconnected elements\n\t\t// http://bugs.jqueryui.com/ticket/7552 - A Datepicker created on a detached div has zero height\n\t\tinst.dpDiv.css( \"display\", \"block\" );\n\t},\n\n\t/* Pop-up the date picker in a \"dialog\" box.\n\t * @param  input element - ignored\n\t * @param  date\tstring or Date - the initial date to display\n\t * @param  onSelect  function - the function to call when a date is selected\n\t * @param  settings  object - update the dialog date picker instance's settings (anonymous object)\n\t * @param  pos int[2] - coordinates for the dialog's position within the screen or\n\t *\t\t\t\t\tevent - with x/y coordinates or\n\t *\t\t\t\t\tleave empty for default (screen centre)\n\t * @return the manager object\n\t */\n\t_dialogDatepicker: function( input, date, onSelect, settings, pos ) {\n\t\tvar id, browserWidth, browserHeight, scrollX, scrollY,\n\t\t\tinst = this._dialogInst; // internal instance\n\n\t\tif ( !inst ) {\n\t\t\tthis.uuid += 1;\n\t\t\tid = \"dp\" + this.uuid;\n\t\t\tthis._dialogInput = $( \"<input type='text' id='\" + id +\n\t\t\t\t\"' style='position: absolute; top: -100px; width: 0px;'/>\" );\n\t\t\tthis._dialogInput.on( \"keydown\", this._doKeyDown );\n\t\t\t$( \"body\" ).append( this._dialogInput );\n\t\t\tinst = this._dialogInst = this._newInst( this._dialogInput, false );\n\t\t\tinst.settings = {};\n\t\t\t$.data( this._dialogInput[ 0 ], \"datepicker\", inst );\n\t\t}\n\t\tdatepicker_extendRemove( inst.settings, settings || {} );\n\t\tdate = ( date && date.constructor === Date ? this._formatDate( inst, date ) : date );\n\t\tthis._dialogInput.val( date );\n\n\t\tthis._pos = ( pos ? ( pos.length ? pos : [ pos.pageX, pos.pageY ] ) : null );\n\t\tif ( !this._pos ) {\n\t\t\tbrowserWidth = document.documentElement.clientWidth;\n\t\t\tbrowserHeight = document.documentElement.clientHeight;\n\t\t\tscrollX = document.documentElement.scrollLeft || document.body.scrollLeft;\n\t\t\tscrollY = document.documentElement.scrollTop || document.body.scrollTop;\n\t\t\tthis._pos = // should use actual width/height below\n\t\t\t\t[ ( browserWidth / 2 ) - 100 + scrollX, ( browserHeight / 2 ) - 150 + scrollY ];\n\t\t}\n\n\t\t// Move input on screen for focus, but hidden behind dialog\n\t\tthis._dialogInput.css( \"left\", ( this._pos[ 0 ] + 20 ) + \"px\" ).css( \"top\", this._pos[ 1 ] + \"px\" );\n\t\tinst.settings.onSelect = onSelect;\n\t\tthis._inDialog = true;\n\t\tthis.dpDiv.addClass( this._dialogClass );\n\t\tthis._showDatepicker( this._dialogInput[ 0 ] );\n\t\tif ( $.blockUI ) {\n\t\t\t$.blockUI( this.dpDiv );\n\t\t}\n\t\t$.data( this._dialogInput[ 0 ], \"datepicker\", inst );\n\t\treturn this;\n\t},\n\n\t/* Detach a datepicker from its control.\n\t * @param  target\telement - the target input field or division or span\n\t */\n\t_destroyDatepicker: function( target ) {\n\t\tvar nodeName,\n\t\t\t$target = $( target ),\n\t\t\tinst = $.data( target, \"datepicker\" );\n\n\t\tif ( !$target.hasClass( this.markerClassName ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tnodeName = target.nodeName.toLowerCase();\n\t\t$.removeData( target, \"datepicker\" );\n\t\tif ( nodeName === \"input\" ) {\n\t\t\tinst.append.remove();\n\t\t\tinst.trigger.remove();\n\t\t\t$target.removeClass( this.markerClassName ).\n\t\t\t\toff( \"focus\", this._showDatepicker ).\n\t\t\t\toff( \"keydown\", this._doKeyDown ).\n\t\t\t\toff( \"keypress\", this._doKeyPress ).\n\t\t\t\toff( \"keyup\", this._doKeyUp );\n\t\t} else if ( nodeName === \"div\" || nodeName === \"span\" ) {\n\t\t\t$target.removeClass( this.markerClassName ).empty();\n\t\t}\n\n\t\tif ( datepicker_instActive === inst ) {\n\t\t\tdatepicker_instActive = null;\n\t\t}\n\t},\n\n\t/* Enable the date picker to a jQuery selection.\n\t * @param  target\telement - the target input field or division or span\n\t */\n\t_enableDatepicker: function( target ) {\n\t\tvar nodeName, inline,\n\t\t\t$target = $( target ),\n\t\t\tinst = $.data( target, \"datepicker\" );\n\n\t\tif ( !$target.hasClass( this.markerClassName ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tnodeName = target.nodeName.toLowerCase();\n\t\tif ( nodeName === \"input\" ) {\n\t\t\ttarget.disabled = false;\n\t\t\tinst.trigger.filter( \"button\" ).\n\t\t\t\teach( function() { this.disabled = false; } ).end().\n\t\t\t\tfilter( \"img\" ).css( { opacity: \"1.0\", cursor: \"\" } );\n\t\t} else if ( nodeName === \"div\" || nodeName === \"span\" ) {\n\t\t\tinline = $target.children( \".\" + this._inlineClass );\n\t\t\tinline.children().removeClass( \"ui-state-disabled\" );\n\t\t\tinline.find( \"select.ui-datepicker-month, select.ui-datepicker-year\" ).\n\t\t\t\tprop( \"disabled\", false );\n\t\t}\n\t\tthis._disabledInputs = $.map( this._disabledInputs,\n\t\t\tfunction( value ) { return ( value === target ? null : value ); } ); // delete entry\n\t},\n\n\t/* Disable the date picker to a jQuery selection.\n\t * @param  target\telement - the target input field or division or span\n\t */\n\t_disableDatepicker: function( target ) {\n\t\tvar nodeName, inline,\n\t\t\t$target = $( target ),\n\t\t\tinst = $.data( target, \"datepicker\" );\n\n\t\tif ( !$target.hasClass( this.markerClassName ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tnodeName = target.nodeName.toLowerCase();\n\t\tif ( nodeName === \"input\" ) {\n\t\t\ttarget.disabled = true;\n\t\t\tinst.trigger.filter( \"button\" ).\n\t\t\t\teach( function() { this.disabled = true; } ).end().\n\t\t\t\tfilter( \"img\" ).css( { opacity: \"0.5\", cursor: \"default\" } );\n\t\t} else if ( nodeName === \"div\" || nodeName === \"span\" ) {\n\t\t\tinline = $target.children( \".\" + this._inlineClass );\n\t\t\tinline.children().addClass( \"ui-state-disabled\" );\n\t\t\tinline.find( \"select.ui-datepicker-month, select.ui-datepicker-year\" ).\n\t\t\t\tprop( \"disabled\", true );\n\t\t}\n\t\tthis._disabledInputs = $.map( this._disabledInputs,\n\t\t\tfunction( value ) { return ( value === target ? null : value ); } ); // delete entry\n\t\tthis._disabledInputs[ this._disabledInputs.length ] = target;\n\t},\n\n\t/* Is the first field in a jQuery collection disabled as a datepicker?\n\t * @param  target\telement - the target input field or division or span\n\t * @return boolean - true if disabled, false if enabled\n\t */\n\t_isDisabledDatepicker: function( target ) {\n\t\tif ( !target ) {\n\t\t\treturn false;\n\t\t}\n\t\tfor ( var i = 0; i < this._disabledInputs.length; i++ ) {\n\t\t\tif ( this._disabledInputs[ i ] === target ) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t},\n\n\t/* Retrieve the instance data for the target control.\n\t * @param  target  element - the target input field or division or span\n\t * @return  object - the associated instance data\n\t * @throws  error if a jQuery problem getting data\n\t */\n\t_getInst: function( target ) {\n\t\ttry {\n\t\t\treturn $.data( target, \"datepicker\" );\n\t\t}\n\t\tcatch ( err ) {\n\t\t\tthrow \"Missing instance data for this datepicker\";\n\t\t}\n\t},\n\n\t/* Update or retrieve the settings for a date picker attached to an input field or division.\n\t * @param  target  element - the target input field or division or span\n\t * @param  name\tobject - the new settings to update or\n\t *\t\t\t\tstring - the name of the setting to change or retrieve,\n\t *\t\t\t\twhen retrieving also \"all\" for all instance settings or\n\t *\t\t\t\t\"defaults\" for all global defaults\n\t * @param  value   any - the new value for the setting\n\t *\t\t\t\t(omit if above is an object or to retrieve a value)\n\t */\n\t_optionDatepicker: function( target, name, value ) {\n\t\tvar settings, date, minDate, maxDate,\n\t\t\tinst = this._getInst( target );\n\n\t\tif ( arguments.length === 2 && typeof name === \"string\" ) {\n\t\t\treturn ( name === \"defaults\" ? $.extend( {}, $.datepicker._defaults ) :\n\t\t\t\t( inst ? ( name === \"all\" ? $.extend( {}, inst.settings ) :\n\t\t\t\tthis._get( inst, name ) ) : null ) );\n\t\t}\n\n\t\tsettings = name || {};\n\t\tif ( typeof name === \"string\" ) {\n\t\t\tsettings = {};\n\t\t\tsettings[ name ] = value;\n\t\t}\n\n\t\tif ( inst ) {\n\t\t\tif ( this._curInst === inst ) {\n\t\t\t\tthis._hideDatepicker();\n\t\t\t}\n\n\t\t\tdate = this._getDateDatepicker( target, true );\n\t\t\tminDate = this._getMinMaxDate( inst, \"min\" );\n\t\t\tmaxDate = this._getMinMaxDate( inst, \"max\" );\n\t\t\tdatepicker_extendRemove( inst.settings, settings );\n\n\t\t\t// reformat the old minDate/maxDate values if dateFormat changes and a new minDate/maxDate isn't provided\n\t\t\tif ( minDate !== null && settings.dateFormat !== undefined && settings.minDate === undefined ) {\n\t\t\t\tinst.settings.minDate = this._formatDate( inst, minDate );\n\t\t\t}\n\t\t\tif ( maxDate !== null && settings.dateFormat !== undefined && settings.maxDate === undefined ) {\n\t\t\t\tinst.settings.maxDate = this._formatDate( inst, maxDate );\n\t\t\t}\n\t\t\tif ( \"disabled\" in settings ) {\n\t\t\t\tif ( settings.disabled ) {\n\t\t\t\t\tthis._disableDatepicker( target );\n\t\t\t\t} else {\n\t\t\t\t\tthis._enableDatepicker( target );\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis._attachments( $( target ), inst );\n\t\t\tthis._autoSize( inst );\n\t\t\tthis._setDate( inst, date );\n\t\t\tthis._updateAlternate( inst );\n\t\t\tthis._updateDatepicker( inst );\n\t\t}\n\t},\n\n\t// Change method deprecated\n\t_changeDatepicker: function( target, name, value ) {\n\t\tthis._optionDatepicker( target, name, value );\n\t},\n\n\t/* Redraw the date picker attached to an input field or division.\n\t * @param  target  element - the target input field or division or span\n\t */\n\t_refreshDatepicker: function( target ) {\n\t\tvar inst = this._getInst( target );\n\t\tif ( inst ) {\n\t\t\tthis._updateDatepicker( inst );\n\t\t}\n\t},\n\n\t/* Set the dates for a jQuery selection.\n\t * @param  target element - the target input field or division or span\n\t * @param  date\tDate - the new date\n\t */\n\t_setDateDatepicker: function( target, date ) {\n\t\tvar inst = this._getInst( target );\n\t\tif ( inst ) {\n\t\t\tthis._setDate( inst, date );\n\t\t\tthis._updateDatepicker( inst );\n\t\t\tthis._updateAlternate( inst );\n\t\t}\n\t},\n\n\t/* Get the date(s) for the first entry in a jQuery selection.\n\t * @param  target element - the target input field or division or span\n\t * @param  noDefault boolean - true if no default date is to be used\n\t * @return Date - the current date\n\t */\n\t_getDateDatepicker: function( target, noDefault ) {\n\t\tvar inst = this._getInst( target );\n\t\tif ( inst && !inst.inline ) {\n\t\t\tthis._setDateFromField( inst, noDefault );\n\t\t}\n\t\treturn ( inst ? this._getDate( inst ) : null );\n\t},\n\n\t/* Handle keystrokes. */\n\t_doKeyDown: function( event ) {\n\t\tvar onSelect, dateStr, sel,\n\t\t\tinst = $.datepicker._getInst( event.target ),\n\t\t\thandled = true,\n\t\t\tisRTL = inst.dpDiv.is( \".ui-datepicker-rtl\" );\n\n\t\tinst._keyEvent = true;\n\t\tif ( $.datepicker._datepickerShowing ) {\n\t\t\tswitch ( event.keyCode ) {\n\t\t\t\tcase 9: $.datepicker._hideDatepicker();\n\t\t\t\t\t\thandled = false;\n\t\t\t\t\t\tbreak; // hide on tab out\n\t\t\t\tcase 13: sel = $( \"td.\" + $.datepicker._dayOverClass + \":not(.\" +\n\t\t\t\t\t\t\t\t\t$.datepicker._currentClass + \")\", inst.dpDiv );\n\t\t\t\t\t\tif ( sel[ 0 ] ) {\n\t\t\t\t\t\t\t$.datepicker._selectDay( event.target, inst.selectedMonth, inst.selectedYear, sel[ 0 ] );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tonSelect = $.datepicker._get( inst, \"onSelect\" );\n\t\t\t\t\t\tif ( onSelect ) {\n\t\t\t\t\t\t\tdateStr = $.datepicker._formatDate( inst );\n\n\t\t\t\t\t\t\t// Trigger custom callback\n\t\t\t\t\t\t\tonSelect.apply( ( inst.input ? inst.input[ 0 ] : null ), [ dateStr, inst ] );\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t$.datepicker._hideDatepicker();\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn false; // don't submit the form\n\t\t\t\tcase 27: $.datepicker._hideDatepicker();\n\t\t\t\t\t\tbreak; // hide on escape\n\t\t\t\tcase 33: $.datepicker._adjustDate( event.target, ( event.ctrlKey ?\n\t\t\t\t\t\t\t-$.datepicker._get( inst, \"stepBigMonths\" ) :\n\t\t\t\t\t\t\t-$.datepicker._get( inst, \"stepMonths\" ) ), \"M\" );\n\t\t\t\t\t\tbreak; // previous month/year on page up/+ ctrl\n\t\t\t\tcase 34: $.datepicker._adjustDate( event.target, ( event.ctrlKey ?\n\t\t\t\t\t\t\t+$.datepicker._get( inst, \"stepBigMonths\" ) :\n\t\t\t\t\t\t\t+$.datepicker._get( inst, \"stepMonths\" ) ), \"M\" );\n\t\t\t\t\t\tbreak; // next month/year on page down/+ ctrl\n\t\t\t\tcase 35: if ( event.ctrlKey || event.metaKey ) {\n\t\t\t\t\t\t\t$.datepicker._clearDate( event.target );\n\t\t\t\t\t\t}\n\t\t\t\t\t\thandled = event.ctrlKey || event.metaKey;\n\t\t\t\t\t\tbreak; // clear on ctrl or command +end\n\t\t\t\tcase 36: if ( event.ctrlKey || event.metaKey ) {\n\t\t\t\t\t\t\t$.datepicker._gotoToday( event.target );\n\t\t\t\t\t\t}\n\t\t\t\t\t\thandled = event.ctrlKey || event.metaKey;\n\t\t\t\t\t\tbreak; // current on ctrl or command +home\n\t\t\t\tcase 37: if ( event.ctrlKey || event.metaKey ) {\n\t\t\t\t\t\t\t$.datepicker._adjustDate( event.target, ( isRTL ? +1 : -1 ), \"D\" );\n\t\t\t\t\t\t}\n\t\t\t\t\t\thandled = event.ctrlKey || event.metaKey;\n\n\t\t\t\t\t\t// -1 day on ctrl or command +left\n\t\t\t\t\t\tif ( event.originalEvent.altKey ) {\n\t\t\t\t\t\t\t$.datepicker._adjustDate( event.target, ( event.ctrlKey ?\n\t\t\t\t\t\t\t\t-$.datepicker._get( inst, \"stepBigMonths\" ) :\n\t\t\t\t\t\t\t\t-$.datepicker._get( inst, \"stepMonths\" ) ), \"M\" );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// next month/year on alt +left on Mac\n\t\t\t\t\t\tbreak;\n\t\t\t\tcase 38: if ( event.ctrlKey || event.metaKey ) {\n\t\t\t\t\t\t\t$.datepicker._adjustDate( event.target, -7, \"D\" );\n\t\t\t\t\t\t}\n\t\t\t\t\t\thandled = event.ctrlKey || event.metaKey;\n\t\t\t\t\t\tbreak; // -1 week on ctrl or command +up\n\t\t\t\tcase 39: if ( event.ctrlKey || event.metaKey ) {\n\t\t\t\t\t\t\t$.datepicker._adjustDate( event.target, ( isRTL ? -1 : +1 ), \"D\" );\n\t\t\t\t\t\t}\n\t\t\t\t\t\thandled = event.ctrlKey || event.metaKey;\n\n\t\t\t\t\t\t// +1 day on ctrl or command +right\n\t\t\t\t\t\tif ( event.originalEvent.altKey ) {\n\t\t\t\t\t\t\t$.datepicker._adjustDate( event.target, ( event.ctrlKey ?\n\t\t\t\t\t\t\t\t+$.datepicker._get( inst, \"stepBigMonths\" ) :\n\t\t\t\t\t\t\t\t+$.datepicker._get( inst, \"stepMonths\" ) ), \"M\" );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// next month/year on alt +right\n\t\t\t\t\t\tbreak;\n\t\t\t\tcase 40: if ( event.ctrlKey || event.metaKey ) {\n\t\t\t\t\t\t\t$.datepicker._adjustDate( event.target, +7, \"D\" );\n\t\t\t\t\t\t}\n\t\t\t\t\t\thandled = event.ctrlKey || event.metaKey;\n\t\t\t\t\t\tbreak; // +1 week on ctrl or command +down\n\t\t\t\tdefault: handled = false;\n\t\t\t}\n\t\t} else if ( event.keyCode === 36 && event.ctrlKey ) { // display the date picker on ctrl+home\n\t\t\t$.datepicker._showDatepicker( this );\n\t\t} else {\n\t\t\thandled = false;\n\t\t}\n\n\t\tif ( handled ) {\n\t\t\tevent.preventDefault();\n\t\t\tevent.stopPropagation();\n\t\t}\n\t},\n\n\t/* Filter entered characters - based on date format. */\n\t_doKeyPress: function( event ) {\n\t\tvar chars, chr,\n\t\t\tinst = $.datepicker._getInst( event.target );\n\n\t\tif ( $.datepicker._get( inst, \"constrainInput\" ) ) {\n\t\t\tchars = $.datepicker._possibleChars( $.datepicker._get( inst, \"dateFormat\" ) );\n\t\t\tchr = String.fromCharCode( event.charCode == null ? event.keyCode : event.charCode );\n\t\t\treturn event.ctrlKey || event.metaKey || ( chr < \" \" || !chars || chars.indexOf( chr ) > -1 );\n\t\t}\n\t},\n\n\t/* Synchronise manual entry and field/alternate field. */\n\t_doKeyUp: function( event ) {\n\t\tvar date,\n\t\t\tinst = $.datepicker._getInst( event.target );\n\n\t\tif ( inst.input.val() !== inst.lastVal ) {\n\t\t\ttry {\n\t\t\t\tdate = $.datepicker.parseDate( $.datepicker._get( inst, \"dateFormat\" ),\n\t\t\t\t\t( inst.input ? inst.input.val() : null ),\n\t\t\t\t\t$.datepicker._getFormatConfig( inst ) );\n\n\t\t\t\tif ( date ) { // only if valid\n\t\t\t\t\t$.datepicker._setDateFromField( inst );\n\t\t\t\t\t$.datepicker._updateAlternate( inst );\n\t\t\t\t\t$.datepicker._updateDatepicker( inst );\n\t\t\t\t}\n\t\t\t}\n\t\t\tcatch ( err ) {\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t},\n\n\t/* Pop-up the date picker for a given input field.\n\t * If false returned from beforeShow event handler do not show.\n\t * @param  input  element - the input field attached to the date picker or\n\t *\t\t\t\t\tevent - if triggered by focus\n\t */\n\t_showDatepicker: function( input ) {\n\t\tinput = input.target || input;\n\t\tif ( input.nodeName.toLowerCase() !== \"input\" ) { // find from button/image trigger\n\t\t\tinput = $( \"input\", input.parentNode )[ 0 ];\n\t\t}\n\n\t\tif ( $.datepicker._isDisabledDatepicker( input ) || $.datepicker._lastInput === input ) { // already here\n\t\t\treturn;\n\t\t}\n\n\t\tvar inst, beforeShow, beforeShowSettings, isFixed,\n\t\t\toffset, showAnim, duration;\n\n\t\tinst = $.datepicker._getInst( input );\n\t\tif ( $.datepicker._curInst && $.datepicker._curInst !== inst ) {\n\t\t\t$.datepicker._curInst.dpDiv.stop( true, true );\n\t\t\tif ( inst && $.datepicker._datepickerShowing ) {\n\t\t\t\t$.datepicker._hideDatepicker( $.datepicker._curInst.input[ 0 ] );\n\t\t\t}\n\t\t}\n\n\t\tbeforeShow = $.datepicker._get( inst, \"beforeShow\" );\n\t\tbeforeShowSettings = beforeShow ? beforeShow.apply( input, [ input, inst ] ) : {};\n\t\tif ( beforeShowSettings === false ) {\n\t\t\treturn;\n\t\t}\n\t\tdatepicker_extendRemove( inst.settings, beforeShowSettings );\n\n\t\tinst.lastVal = null;\n\t\t$.datepicker._lastInput = input;\n\t\t$.datepicker._setDateFromField( inst );\n\n\t\tif ( $.datepicker._inDialog ) { // hide cursor\n\t\t\tinput.value = \"\";\n\t\t}\n\t\tif ( !$.datepicker._pos ) { // position below input\n\t\t\t$.datepicker._pos = $.datepicker._findPos( input );\n\t\t\t$.datepicker._pos[ 1 ] += input.offsetHeight; // add the height\n\t\t}\n\n\t\tisFixed = false;\n\t\t$( input ).parents().each( function() {\n\t\t\tisFixed |= $( this ).css( \"position\" ) === \"fixed\";\n\t\t\treturn !isFixed;\n\t\t} );\n\n\t\toffset = { left: $.datepicker._pos[ 0 ], top: $.datepicker._pos[ 1 ] };\n\t\t$.datepicker._pos = null;\n\n\t\t//to avoid flashes on Firefox\n\t\tinst.dpDiv.empty();\n\n\t\t// determine sizing offscreen\n\t\tinst.dpDiv.css( { position: \"absolute\", display: \"block\", top: \"-1000px\" } );\n\t\t$.datepicker._updateDatepicker( inst );\n\n\t\t// fix width for dynamic number of date pickers\n\t\t// and adjust position before showing\n\t\toffset = $.datepicker._checkOffset( inst, offset, isFixed );\n\t\tinst.dpDiv.css( { position: ( $.datepicker._inDialog && $.blockUI ?\n\t\t\t\"static\" : ( isFixed ? \"fixed\" : \"absolute\" ) ), display: \"none\",\n\t\t\tleft: offset.left + \"px\", top: offset.top + \"px\" } );\n\n\t\tif ( !inst.inline ) {\n\t\t\tshowAnim = $.datepicker._get( inst, \"showAnim\" );\n\t\t\tduration = $.datepicker._get( inst, \"duration\" );\n\t\t\tinst.dpDiv.css( \"z-index\", datepicker_getZindex( $( input ) ) + 1 );\n\t\t\t$.datepicker._datepickerShowing = true;\n\n\t\t\tif ( $.effects && $.effects.effect[ showAnim ] ) {\n\t\t\t\tinst.dpDiv.show( showAnim, $.datepicker._get( inst, \"showOptions\" ), duration );\n\t\t\t} else {\n\t\t\t\tinst.dpDiv[ showAnim || \"show\" ]( showAnim ? duration : null );\n\t\t\t}\n\n\t\t\tif ( $.datepicker._shouldFocusInput( inst ) ) {\n\t\t\t\tinst.input.trigger( \"focus\" );\n\t\t\t}\n\n\t\t\t$.datepicker._curInst = inst;\n\t\t}\n\t},\n\n\t/* Generate the date picker content. */\n\t_updateDatepicker: function( inst ) {\n\t\tthis.maxRows = 4; //Reset the max number of rows being displayed (see #7043)\n\t\tdatepicker_instActive = inst; // for delegate hover events\n\t\tinst.dpDiv.empty().append( this._generateHTML( inst ) );\n\t\tthis._attachHandlers( inst );\n\n\t\tvar origyearshtml,\n\t\t\tnumMonths = this._getNumberOfMonths( inst ),\n\t\t\tcols = numMonths[ 1 ],\n\t\t\twidth = 17,\n\t\t\tactiveCell = inst.dpDiv.find( \".\" + this._dayOverClass + \" a\" );\n\n\t\tif ( activeCell.length > 0 ) {\n\t\t\tdatepicker_handleMouseover.apply( activeCell.get( 0 ) );\n\t\t}\n\n\t\tinst.dpDiv.removeClass( \"ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4\" ).width( \"\" );\n\t\tif ( cols > 1 ) {\n\t\t\tinst.dpDiv.addClass( \"ui-datepicker-multi-\" + cols ).css( \"width\", ( width * cols ) + \"em\" );\n\t\t}\n\t\tinst.dpDiv[ ( numMonths[ 0 ] !== 1 || numMonths[ 1 ] !== 1 ? \"add\" : \"remove\" ) +\n\t\t\t\"Class\" ]( \"ui-datepicker-multi\" );\n\t\tinst.dpDiv[ ( this._get( inst, \"isRTL\" ) ? \"add\" : \"remove\" ) +\n\t\t\t\"Class\" ]( \"ui-datepicker-rtl\" );\n\n\t\tif ( inst === $.datepicker._curInst && $.datepicker._datepickerShowing && $.datepicker._shouldFocusInput( inst ) ) {\n\t\t\tinst.input.trigger( \"focus\" );\n\t\t}\n\n\t\t// Deffered render of the years select (to avoid flashes on Firefox)\n\t\tif ( inst.yearshtml ) {\n\t\t\torigyearshtml = inst.yearshtml;\n\t\t\tsetTimeout( function() {\n\n\t\t\t\t//assure that inst.yearshtml didn't change.\n\t\t\t\tif ( origyearshtml === inst.yearshtml && inst.yearshtml ) {\n\t\t\t\t\tinst.dpDiv.find( \"select.ui-datepicker-year:first\" ).replaceWith( inst.yearshtml );\n\t\t\t\t}\n\t\t\t\torigyearshtml = inst.yearshtml = null;\n\t\t\t}, 0 );\n\t\t}\n\t},\n\n\t// #6694 - don't focus the input if it's already focused\n\t// this breaks the change event in IE\n\t// Support: IE and jQuery <1.9\n\t_shouldFocusInput: function( inst ) {\n\t\treturn inst.input && inst.input.is( \":visible\" ) && !inst.input.is( \":disabled\" ) && !inst.input.is( \":focus\" );\n\t},\n\n\t/* Check positioning to remain on screen. */\n\t_checkOffset: function( inst, offset, isFixed ) {\n\t\tvar dpWidth = inst.dpDiv.outerWidth(),\n\t\t\tdpHeight = inst.dpDiv.outerHeight(),\n\t\t\tinputWidth = inst.input ? inst.input.outerWidth() : 0,\n\t\t\tinputHeight = inst.input ? inst.input.outerHeight() : 0,\n\t\t\tviewWidth = document.documentElement.clientWidth + ( isFixed ? 0 : $( document ).scrollLeft() ),\n\t\t\tviewHeight = document.documentElement.clientHeight + ( isFixed ? 0 : $( document ).scrollTop() );\n\n\t\toffset.left -= ( this._get( inst, \"isRTL\" ) ? ( dpWidth - inputWidth ) : 0 );\n\t\toffset.left -= ( isFixed && offset.left === inst.input.offset().left ) ? $( document ).scrollLeft() : 0;\n\t\toffset.top -= ( isFixed && offset.top === ( inst.input.offset().top + inputHeight ) ) ? $( document ).scrollTop() : 0;\n\n\t\t// Now check if datepicker is showing outside window viewport - move to a better place if so.\n\t\toffset.left -= Math.min( offset.left, ( offset.left + dpWidth > viewWidth && viewWidth > dpWidth ) ?\n\t\t\tMath.abs( offset.left + dpWidth - viewWidth ) : 0 );\n\t\toffset.top -= Math.min( offset.top, ( offset.top + dpHeight > viewHeight && viewHeight > dpHeight ) ?\n\t\t\tMath.abs( dpHeight + inputHeight ) : 0 );\n\n\t\treturn offset;\n\t},\n\n\t/* Find an object's position on the screen. */\n\t_findPos: function( obj ) {\n\t\tvar position,\n\t\t\tinst = this._getInst( obj ),\n\t\t\tisRTL = this._get( inst, \"isRTL\" );\n\n\t\twhile ( obj && ( obj.type === \"hidden\" || obj.nodeType !== 1 || $.expr.filters.hidden( obj ) ) ) {\n\t\t\tobj = obj[ isRTL ? \"previousSibling\" : \"nextSibling\" ];\n\t\t}\n\n\t\tposition = $( obj ).offset();\n\t\treturn [ position.left, position.top ];\n\t},\n\n\t/* Hide the date picker from view.\n\t * @param  input  element - the input field attached to the date picker\n\t */\n\t_hideDatepicker: function( input ) {\n\t\tvar showAnim, duration, postProcess, onClose,\n\t\t\tinst = this._curInst;\n\n\t\tif ( !inst || ( input && inst !== $.data( input, \"datepicker\" ) ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( this._datepickerShowing ) {\n\t\t\tshowAnim = this._get( inst, \"showAnim\" );\n\t\t\tduration = this._get( inst, \"duration\" );\n\t\t\tpostProcess = function() {\n\t\t\t\t$.datepicker._tidyDialog( inst );\n\t\t\t};\n\n\t\t\t// DEPRECATED: after BC for 1.8.x $.effects[ showAnim ] is not needed\n\t\t\tif ( $.effects && ( $.effects.effect[ showAnim ] || $.effects[ showAnim ] ) ) {\n\t\t\t\tinst.dpDiv.hide( showAnim, $.datepicker._get( inst, \"showOptions\" ), duration, postProcess );\n\t\t\t} else {\n\t\t\t\tinst.dpDiv[ ( showAnim === \"slideDown\" ? \"slideUp\" :\n\t\t\t\t\t( showAnim === \"fadeIn\" ? \"fadeOut\" : \"hide\" ) ) ]( ( showAnim ? duration : null ), postProcess );\n\t\t\t}\n\n\t\t\tif ( !showAnim ) {\n\t\t\t\tpostProcess();\n\t\t\t}\n\t\t\tthis._datepickerShowing = false;\n\n\t\t\tonClose = this._get( inst, \"onClose\" );\n\t\t\tif ( onClose ) {\n\t\t\t\tonClose.apply( ( inst.input ? inst.input[ 0 ] : null ), [ ( inst.input ? inst.input.val() : \"\" ), inst ] );\n\t\t\t}\n\n\t\t\tthis._lastInput = null;\n\t\t\tif ( this._inDialog ) {\n\t\t\t\tthis._dialogInput.css( { position: \"absolute\", left: \"0\", top: \"-100px\" } );\n\t\t\t\tif ( $.blockUI ) {\n\t\t\t\t\t$.unblockUI();\n\t\t\t\t\t$( \"body\" ).append( this.dpDiv );\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis._inDialog = false;\n\t\t}\n\t},\n\n\t/* Tidy up after a dialog display. */\n\t_tidyDialog: function( inst ) {\n\t\tinst.dpDiv.removeClass( this._dialogClass ).off( \".ui-datepicker-calendar\" );\n\t},\n\n\t/* Close date picker if clicked elsewhere. */\n\t_checkExternalClick: function( event ) {\n\t\tif ( !$.datepicker._curInst ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar $target = $( event.target ),\n\t\t\tinst = $.datepicker._getInst( $target[ 0 ] );\n\n\t\tif ( ( ( $target[ 0 ].id !== $.datepicker._mainDivId &&\n\t\t\t\t$target.parents( \"#\" + $.datepicker._mainDivId ).length === 0 &&\n\t\t\t\t!$target.hasClass( $.datepicker.markerClassName ) &&\n\t\t\t\t!$target.closest( \".\" + $.datepicker._triggerClass ).length &&\n\t\t\t\t$.datepicker._datepickerShowing && !( $.datepicker._inDialog && $.blockUI ) ) ) ||\n\t\t\t( $target.hasClass( $.datepicker.markerClassName ) && $.datepicker._curInst !== inst ) ) {\n\t\t\t\t$.datepicker._hideDatepicker();\n\t\t}\n\t},\n\n\t/* Adjust one of the date sub-fields. */\n\t_adjustDate: function( id, offset, period ) {\n\t\tvar target = $( id ),\n\t\t\tinst = this._getInst( target[ 0 ] );\n\n\t\tif ( this._isDisabledDatepicker( target[ 0 ] ) ) {\n\t\t\treturn;\n\t\t}\n\t\tthis._adjustInstDate( inst, offset +\n\t\t\t( period === \"M\" ? this._get( inst, \"showCurrentAtPos\" ) : 0 ), // undo positioning\n\t\t\tperiod );\n\t\tthis._updateDatepicker( inst );\n\t},\n\n\t/* Action for current link. */\n\t_gotoToday: function( id ) {\n\t\tvar date,\n\t\t\ttarget = $( id ),\n\t\t\tinst = this._getInst( target[ 0 ] );\n\n\t\tif ( this._get( inst, \"gotoCurrent\" ) && inst.currentDay ) {\n\t\t\tinst.selectedDay = inst.currentDay;\n\t\t\tinst.drawMonth = inst.selectedMonth = inst.currentMonth;\n\t\t\tinst.drawYear = inst.selectedYear = inst.currentYear;\n\t\t} else {\n\t\t\tdate = new Date();\n\t\t\tinst.selectedDay = date.getDate();\n\t\t\tinst.drawMonth = inst.selectedMonth = date.getMonth();\n\t\t\tinst.drawYear = inst.selectedYear = date.getFullYear();\n\t\t}\n\t\tthis._notifyChange( inst );\n\t\tthis._adjustDate( target );\n\t},\n\n\t/* Action for selecting a new month/year. */\n\t_selectMonthYear: function( id, select, period ) {\n\t\tvar target = $( id ),\n\t\t\tinst = this._getInst( target[ 0 ] );\n\n\t\tinst[ \"selected\" + ( period === \"M\" ? \"Month\" : \"Year\" ) ] =\n\t\tinst[ \"draw\" + ( period === \"M\" ? \"Month\" : \"Year\" ) ] =\n\t\t\tparseInt( select.options[ select.selectedIndex ].value, 10 );\n\n\t\tthis._notifyChange( inst );\n\t\tthis._adjustDate( target );\n\t},\n\n\t/* Action for selecting a day. */\n\t_selectDay: function( id, month, year, td ) {\n\t\tvar inst,\n\t\t\ttarget = $( id );\n\n\t\tif ( $( td ).hasClass( this._unselectableClass ) || this._isDisabledDatepicker( target[ 0 ] ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tinst = this._getInst( target[ 0 ] );\n\t\tinst.selectedDay = inst.currentDay = $( \"a\", td ).html();\n\t\tinst.selectedMonth = inst.currentMonth = month;\n\t\tinst.selectedYear = inst.currentYear = year;\n\t\tthis._selectDate( id, this._formatDate( inst,\n\t\t\tinst.currentDay, inst.currentMonth, inst.currentYear ) );\n\t},\n\n\t/* Erase the input field and hide the date picker. */\n\t_clearDate: function( id ) {\n\t\tvar target = $( id );\n\t\tthis._selectDate( target, \"\" );\n\t},\n\n\t/* Update the input field with the selected date. */\n\t_selectDate: function( id, dateStr ) {\n\t\tvar onSelect,\n\t\t\ttarget = $( id ),\n\t\t\tinst = this._getInst( target[ 0 ] );\n\n\t\tdateStr = ( dateStr != null ? dateStr : this._formatDate( inst ) );\n\t\tif ( inst.input ) {\n\t\t\tinst.input.val( dateStr );\n\t\t}\n\t\tthis._updateAlternate( inst );\n\n\t\tonSelect = this._get( inst, \"onSelect\" );\n\t\tif ( onSelect ) {\n\t\t\tonSelect.apply( ( inst.input ? inst.input[ 0 ] : null ), [ dateStr, inst ] );  // trigger custom callback\n\t\t} else if ( inst.input ) {\n\t\t\tinst.input.trigger( \"change\" ); // fire the change event\n\t\t}\n\n\t\tif ( inst.inline ) {\n\t\t\tthis._updateDatepicker( inst );\n\t\t} else {\n\t\t\tthis._hideDatepicker();\n\t\t\tthis._lastInput = inst.input[ 0 ];\n\t\t\tif ( typeof( inst.input[ 0 ] ) !== \"object\" ) {\n\t\t\t\tinst.input.trigger( \"focus\" ); // restore focus\n\t\t\t}\n\t\t\tthis._lastInput = null;\n\t\t}\n\t},\n\n\t/* Update any alternate field to synchronise with the main field. */\n\t_updateAlternate: function( inst ) {\n\t\tvar altFormat, date, dateStr,\n\t\t\taltField = this._get( inst, \"altField\" );\n\n\t\tif ( altField ) { // update alternate field too\n\t\t\taltFormat = this._get( inst, \"altFormat\" ) || this._get( inst, \"dateFormat\" );\n\t\t\tdate = this._getDate( inst );\n\t\t\tdateStr = this.formatDate( altFormat, date, this._getFormatConfig( inst ) );\n\t\t\t$( altField ).val( dateStr );\n\t\t}\n\t},\n\n\t/* Set as beforeShowDay function to prevent selection of weekends.\n\t * @param  date  Date - the date to customise\n\t * @return [boolean, string] - is this date selectable?, what is its CSS class?\n\t */\n\tnoWeekends: function( date ) {\n\t\tvar day = date.getDay();\n\t\treturn [ ( day > 0 && day < 6 ), \"\" ];\n\t},\n\n\t/* Set as calculateWeek to determine the week of the year based on the ISO 8601 definition.\n\t * @param  date  Date - the date to get the week for\n\t * @return  number - the number of the week within the year that contains this date\n\t */\n\tiso8601Week: function( date ) {\n\t\tvar time,\n\t\t\tcheckDate = new Date( date.getTime() );\n\n\t\t// Find Thursday of this week starting on Monday\n\t\tcheckDate.setDate( checkDate.getDate() + 4 - ( checkDate.getDay() || 7 ) );\n\n\t\ttime = checkDate.getTime();\n\t\tcheckDate.setMonth( 0 ); // Compare with Jan 1\n\t\tcheckDate.setDate( 1 );\n\t\treturn Math.floor( Math.round( ( time - checkDate ) / 86400000 ) / 7 ) + 1;\n\t},\n\n\t/* Parse a string value into a date object.\n\t * See formatDate below for the possible formats.\n\t *\n\t * @param  format string - the expected format of the date\n\t * @param  value string - the date in the above format\n\t * @param  settings Object - attributes include:\n\t *\t\t\t\t\tshortYearCutoff  number - the cutoff year for determining the century (optional)\n\t *\t\t\t\t\tdayNamesShort\tstring[7] - abbreviated names of the days from Sunday (optional)\n\t *\t\t\t\t\tdayNames\t\tstring[7] - names of the days from Sunday (optional)\n\t *\t\t\t\t\tmonthNamesShort string[12] - abbreviated names of the months (optional)\n\t *\t\t\t\t\tmonthNames\t\tstring[12] - names of the months (optional)\n\t * @return  Date - the extracted date value or null if value is blank\n\t */\n\tparseDate: function( format, value, settings ) {\n\t\tif ( format == null || value == null ) {\n\t\t\tthrow \"Invalid arguments\";\n\t\t}\n\n\t\tvalue = ( typeof value === \"object\" ? value.toString() : value + \"\" );\n\t\tif ( value === \"\" ) {\n\t\t\treturn null;\n\t\t}\n\n\t\tvar iFormat, dim, extra,\n\t\t\tiValue = 0,\n\t\t\tshortYearCutoffTemp = ( settings ? settings.shortYearCutoff : null ) || this._defaults.shortYearCutoff,\n\t\t\tshortYearCutoff = ( typeof shortYearCutoffTemp !== \"string\" ? shortYearCutoffTemp :\n\t\t\t\tnew Date().getFullYear() % 100 + parseInt( shortYearCutoffTemp, 10 ) ),\n\t\t\tdayNamesShort = ( settings ? settings.dayNamesShort : null ) || this._defaults.dayNamesShort,\n\t\t\tdayNames = ( settings ? settings.dayNames : null ) || this._defaults.dayNames,\n\t\t\tmonthNamesShort = ( settings ? settings.monthNamesShort : null ) || this._defaults.monthNamesShort,\n\t\t\tmonthNames = ( settings ? settings.monthNames : null ) || this._defaults.monthNames,\n\t\t\tyear = -1,\n\t\t\tmonth = -1,\n\t\t\tday = -1,\n\t\t\tdoy = -1,\n\t\t\tliteral = false,\n\t\t\tdate,\n\n\t\t\t// Check whether a format character is doubled\n\t\t\tlookAhead = function( match ) {\n\t\t\t\tvar matches = ( iFormat + 1 < format.length && format.charAt( iFormat + 1 ) === match );\n\t\t\t\tif ( matches ) {\n\t\t\t\t\tiFormat++;\n\t\t\t\t}\n\t\t\t\treturn matches;\n\t\t\t},\n\n\t\t\t// Extract a number from the string value\n\t\t\tgetNumber = function( match ) {\n\t\t\t\tvar isDoubled = lookAhead( match ),\n\t\t\t\t\tsize = ( match === \"@\" ? 14 : ( match === \"!\" ? 20 :\n\t\t\t\t\t( match === \"y\" && isDoubled ? 4 : ( match === \"o\" ? 3 : 2 ) ) ) ),\n\t\t\t\t\tminSize = ( match === \"y\" ? size : 1 ),\n\t\t\t\t\tdigits = new RegExp( \"^\\\\d{\" + minSize + \",\" + size + \"}\" ),\n\t\t\t\t\tnum = value.substring( iValue ).match( digits );\n\t\t\t\tif ( !num ) {\n\t\t\t\t\tthrow \"Missing number at position \" + iValue;\n\t\t\t\t}\n\t\t\t\tiValue += num[ 0 ].length;\n\t\t\t\treturn parseInt( num[ 0 ], 10 );\n\t\t\t},\n\n\t\t\t// Extract a name from the string value and convert to an index\n\t\t\tgetName = function( match, shortNames, longNames ) {\n\t\t\t\tvar index = -1,\n\t\t\t\t\tnames = $.map( lookAhead( match ) ? longNames : shortNames, function( v, k ) {\n\t\t\t\t\t\treturn [ [ k, v ] ];\n\t\t\t\t\t} ).sort( function( a, b ) {\n\t\t\t\t\t\treturn -( a[ 1 ].length - b[ 1 ].length );\n\t\t\t\t\t} );\n\n\t\t\t\t$.each( names, function( i, pair ) {\n\t\t\t\t\tvar name = pair[ 1 ];\n\t\t\t\t\tif ( value.substr( iValue, name.length ).toLowerCase() === name.toLowerCase() ) {\n\t\t\t\t\t\tindex = pair[ 0 ];\n\t\t\t\t\t\tiValue += name.length;\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\tif ( index !== -1 ) {\n\t\t\t\t\treturn index + 1;\n\t\t\t\t} else {\n\t\t\t\t\tthrow \"Unknown name at position \" + iValue;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// Confirm that a literal character matches the string value\n\t\t\tcheckLiteral = function() {\n\t\t\t\tif ( value.charAt( iValue ) !== format.charAt( iFormat ) ) {\n\t\t\t\t\tthrow \"Unexpected literal at position \" + iValue;\n\t\t\t\t}\n\t\t\t\tiValue++;\n\t\t\t};\n\n\t\tfor ( iFormat = 0; iFormat < format.length; iFormat++ ) {\n\t\t\tif ( literal ) {\n\t\t\t\tif ( format.charAt( iFormat ) === \"'\" && !lookAhead( \"'\" ) ) {\n\t\t\t\t\tliteral = false;\n\t\t\t\t} else {\n\t\t\t\t\tcheckLiteral();\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tswitch ( format.charAt( iFormat ) ) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\tday = getNumber( \"d\" );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"D\":\n\t\t\t\t\t\tgetName( \"D\", dayNamesShort, dayNames );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"o\":\n\t\t\t\t\t\tdoy = getNumber( \"o\" );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\tmonth = getNumber( \"m\" );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"M\":\n\t\t\t\t\t\tmonth = getName( \"M\", monthNamesShort, monthNames );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\tyear = getNumber( \"y\" );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"@\":\n\t\t\t\t\t\tdate = new Date( getNumber( \"@\" ) );\n\t\t\t\t\t\tyear = date.getFullYear();\n\t\t\t\t\t\tmonth = date.getMonth() + 1;\n\t\t\t\t\t\tday = date.getDate();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"!\":\n\t\t\t\t\t\tdate = new Date( ( getNumber( \"!\" ) - this._ticksTo1970 ) / 10000 );\n\t\t\t\t\t\tyear = date.getFullYear();\n\t\t\t\t\t\tmonth = date.getMonth() + 1;\n\t\t\t\t\t\tday = date.getDate();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"'\":\n\t\t\t\t\t\tif ( lookAhead( \"'\" ) ) {\n\t\t\t\t\t\t\tcheckLiteral();\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tliteral = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tcheckLiteral();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( iValue < value.length ) {\n\t\t\textra = value.substr( iValue );\n\t\t\tif ( !/^\\s+/.test( extra ) ) {\n\t\t\t\tthrow \"Extra/unparsed characters found in date: \" + extra;\n\t\t\t}\n\t\t}\n\n\t\tif ( year === -1 ) {\n\t\t\tyear = new Date().getFullYear();\n\t\t} else if ( year < 100 ) {\n\t\t\tyear += new Date().getFullYear() - new Date().getFullYear() % 100 +\n\t\t\t\t( year <= shortYearCutoff ? 0 : -100 );\n\t\t}\n\n\t\tif ( doy > -1 ) {\n\t\t\tmonth = 1;\n\t\t\tday = doy;\n\t\t\tdo {\n\t\t\t\tdim = this._getDaysInMonth( year, month - 1 );\n\t\t\t\tif ( day <= dim ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tmonth++;\n\t\t\t\tday -= dim;\n\t\t\t} while ( true );\n\t\t}\n\n\t\tdate = this._daylightSavingAdjust( new Date( year, month - 1, day ) );\n\t\tif ( date.getFullYear() !== year || date.getMonth() + 1 !== month || date.getDate() !== day ) {\n\t\t\tthrow \"Invalid date\"; // E.g. 31/02/00\n\t\t}\n\t\treturn date;\n\t},\n\n\t/* Standard date formats. */\n\tATOM: \"yy-mm-dd\", // RFC 3339 (ISO 8601)\n\tCOOKIE: \"D, dd M yy\",\n\tISO_8601: \"yy-mm-dd\",\n\tRFC_822: \"D, d M y\",\n\tRFC_850: \"DD, dd-M-y\",\n\tRFC_1036: \"D, d M y\",\n\tRFC_1123: \"D, d M yy\",\n\tRFC_2822: \"D, d M yy\",\n\tRSS: \"D, d M y\", // RFC 822\n\tTICKS: \"!\",\n\tTIMESTAMP: \"@\",\n\tW3C: \"yy-mm-dd\", // ISO 8601\n\n\t_ticksTo1970: ( ( ( 1970 - 1 ) * 365 + Math.floor( 1970 / 4 ) - Math.floor( 1970 / 100 ) +\n\t\tMath.floor( 1970 / 400 ) ) * 24 * 60 * 60 * 10000000 ),\n\n\t/* Format a date object into a string value.\n\t * The format can be combinations of the following:\n\t * d  - day of month (no leading zero)\n\t * dd - day of month (two digit)\n\t * o  - day of year (no leading zeros)\n\t * oo - day of year (three digit)\n\t * D  - day name short\n\t * DD - day name long\n\t * m  - month of year (no leading zero)\n\t * mm - month of year (two digit)\n\t * M  - month name short\n\t * MM - month name long\n\t * y  - year (two digit)\n\t * yy - year (four digit)\n\t * @ - Unix timestamp (ms since 01/01/1970)\n\t * ! - Windows ticks (100ns since 01/01/0001)\n\t * \"...\" - literal text\n\t * '' - single quote\n\t *\n\t * @param  format string - the desired format of the date\n\t * @param  date Date - the date value to format\n\t * @param  settings Object - attributes include:\n\t *\t\t\t\t\tdayNamesShort\tstring[7] - abbreviated names of the days from Sunday (optional)\n\t *\t\t\t\t\tdayNames\t\tstring[7] - names of the days from Sunday (optional)\n\t *\t\t\t\t\tmonthNamesShort string[12] - abbreviated names of the months (optional)\n\t *\t\t\t\t\tmonthNames\t\tstring[12] - names of the months (optional)\n\t * @return  string - the date in the above format\n\t */\n\tformatDate: function( format, date, settings ) {\n\t\tif ( !date ) {\n\t\t\treturn \"\";\n\t\t}\n\n\t\tvar iFormat,\n\t\t\tdayNamesShort = ( settings ? settings.dayNamesShort : null ) || this._defaults.dayNamesShort,\n\t\t\tdayNames = ( settings ? settings.dayNames : null ) || this._defaults.dayNames,\n\t\t\tmonthNamesShort = ( settings ? settings.monthNamesShort : null ) || this._defaults.monthNamesShort,\n\t\t\tmonthNames = ( settings ? settings.monthNames : null ) || this._defaults.monthNames,\n\n\t\t\t// Check whether a format character is doubled\n\t\t\tlookAhead = function( match ) {\n\t\t\t\tvar matches = ( iFormat + 1 < format.length && format.charAt( iFormat + 1 ) === match );\n\t\t\t\tif ( matches ) {\n\t\t\t\t\tiFormat++;\n\t\t\t\t}\n\t\t\t\treturn matches;\n\t\t\t},\n\n\t\t\t// Format a number, with leading zero if necessary\n\t\t\tformatNumber = function( match, value, len ) {\n\t\t\t\tvar num = \"\" + value;\n\t\t\t\tif ( lookAhead( match ) ) {\n\t\t\t\t\twhile ( num.length < len ) {\n\t\t\t\t\t\tnum = \"0\" + num;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn num;\n\t\t\t},\n\n\t\t\t// Format a name, short or long as requested\n\t\t\tformatName = function( match, value, shortNames, longNames ) {\n\t\t\t\treturn ( lookAhead( match ) ? longNames[ value ] : shortNames[ value ] );\n\t\t\t},\n\t\t\toutput = \"\",\n\t\t\tliteral = false;\n\n\t\tif ( date ) {\n\t\t\tfor ( iFormat = 0; iFormat < format.length; iFormat++ ) {\n\t\t\t\tif ( literal ) {\n\t\t\t\t\tif ( format.charAt( iFormat ) === \"'\" && !lookAhead( \"'\" ) ) {\n\t\t\t\t\t\tliteral = false;\n\t\t\t\t\t} else {\n\t\t\t\t\t\toutput += format.charAt( iFormat );\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tswitch ( format.charAt( iFormat ) ) {\n\t\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\t\toutput += formatNumber( \"d\", date.getDate(), 2 );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"D\":\n\t\t\t\t\t\t\toutput += formatName( \"D\", date.getDay(), dayNamesShort, dayNames );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"o\":\n\t\t\t\t\t\t\toutput += formatNumber( \"o\",\n\t\t\t\t\t\t\t\tMath.round( ( new Date( date.getFullYear(), date.getMonth(), date.getDate() ).getTime() - new Date( date.getFullYear(), 0, 0 ).getTime() ) / 86400000 ), 3 );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\t\toutput += formatNumber( \"m\", date.getMonth() + 1, 2 );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"M\":\n\t\t\t\t\t\t\toutput += formatName( \"M\", date.getMonth(), monthNamesShort, monthNames );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\t\toutput += ( lookAhead( \"y\" ) ? date.getFullYear() :\n\t\t\t\t\t\t\t\t( date.getFullYear() % 100 < 10 ? \"0\" : \"\" ) + date.getFullYear() % 100 );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"@\":\n\t\t\t\t\t\t\toutput += date.getTime();\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"!\":\n\t\t\t\t\t\t\toutput += date.getTime() * 10000 + this._ticksTo1970;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"'\":\n\t\t\t\t\t\t\tif ( lookAhead( \"'\" ) ) {\n\t\t\t\t\t\t\t\toutput += \"'\";\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tliteral = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\toutput += format.charAt( iFormat );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t},\n\n\t/* Extract all possible characters from the date format. */\n\t_possibleChars: function( format ) {\n\t\tvar iFormat,\n\t\t\tchars = \"\",\n\t\t\tliteral = false,\n\n\t\t\t// Check whether a format character is doubled\n\t\t\tlookAhead = function( match ) {\n\t\t\t\tvar matches = ( iFormat + 1 < format.length && format.charAt( iFormat + 1 ) === match );\n\t\t\t\tif ( matches ) {\n\t\t\t\t\tiFormat++;\n\t\t\t\t}\n\t\t\t\treturn matches;\n\t\t\t};\n\n\t\tfor ( iFormat = 0; iFormat < format.length; iFormat++ ) {\n\t\t\tif ( literal ) {\n\t\t\t\tif ( format.charAt( iFormat ) === \"'\" && !lookAhead( \"'\" ) ) {\n\t\t\t\t\tliteral = false;\n\t\t\t\t} else {\n\t\t\t\t\tchars += format.charAt( iFormat );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tswitch ( format.charAt( iFormat ) ) {\n\t\t\t\t\tcase \"d\": case \"m\": case \"y\": case \"@\":\n\t\t\t\t\t\tchars += \"0123456789\";\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"D\": case \"M\":\n\t\t\t\t\t\treturn null; // Accept anything\n\t\t\t\t\tcase \"'\":\n\t\t\t\t\t\tif ( lookAhead( \"'\" ) ) {\n\t\t\t\t\t\t\tchars += \"'\";\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tliteral = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tchars += format.charAt( iFormat );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn chars;\n\t},\n\n\t/* Get a setting value, defaulting if necessary. */\n\t_get: function( inst, name ) {\n\t\treturn inst.settings[ name ] !== undefined ?\n\t\t\tinst.settings[ name ] : this._defaults[ name ];\n\t},\n\n\t/* Parse existing date and initialise date picker. */\n\t_setDateFromField: function( inst, noDefault ) {\n\t\tif ( inst.input.val() === inst.lastVal ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar dateFormat = this._get( inst, \"dateFormat\" ),\n\t\t\tdates = inst.lastVal = inst.input ? inst.input.val() : null,\n\t\t\tdefaultDate = this._getDefaultDate( inst ),\n\t\t\tdate = defaultDate,\n\t\t\tsettings = this._getFormatConfig( inst );\n\n\t\ttry {\n\t\t\tdate = this.parseDate( dateFormat, dates, settings ) || defaultDate;\n\t\t} catch ( event ) {\n\t\t\tdates = ( noDefault ? \"\" : dates );\n\t\t}\n\t\tinst.selectedDay = date.getDate();\n\t\tinst.drawMonth = inst.selectedMonth = date.getMonth();\n\t\tinst.drawYear = inst.selectedYear = date.getFullYear();\n\t\tinst.currentDay = ( dates ? date.getDate() : 0 );\n\t\tinst.currentMonth = ( dates ? date.getMonth() : 0 );\n\t\tinst.currentYear = ( dates ? date.getFullYear() : 0 );\n\t\tthis._adjustInstDate( inst );\n\t},\n\n\t/* Retrieve the default date shown on opening. */\n\t_getDefaultDate: function( inst ) {\n\t\treturn this._restrictMinMax( inst,\n\t\t\tthis._determineDate( inst, this._get( inst, \"defaultDate\" ), new Date() ) );\n\t},\n\n\t/* A date may be specified as an exact value or a relative one. */\n\t_determineDate: function( inst, date, defaultDate ) {\n\t\tvar offsetNumeric = function( offset ) {\n\t\t\t\tvar date = new Date();\n\t\t\t\tdate.setDate( date.getDate() + offset );\n\t\t\t\treturn date;\n\t\t\t},\n\t\t\toffsetString = function( offset ) {\n\t\t\t\ttry {\n\t\t\t\t\treturn $.datepicker.parseDate( $.datepicker._get( inst, \"dateFormat\" ),\n\t\t\t\t\t\toffset, $.datepicker._getFormatConfig( inst ) );\n\t\t\t\t}\n\t\t\t\tcatch ( e ) {\n\n\t\t\t\t\t// Ignore\n\t\t\t\t}\n\n\t\t\t\tvar date = ( offset.toLowerCase().match( /^c/ ) ?\n\t\t\t\t\t$.datepicker._getDate( inst ) : null ) || new Date(),\n\t\t\t\t\tyear = date.getFullYear(),\n\t\t\t\t\tmonth = date.getMonth(),\n\t\t\t\t\tday = date.getDate(),\n\t\t\t\t\tpattern = /([+\\-]?[0-9]+)\\s*(d|D|w|W|m|M|y|Y)?/g,\n\t\t\t\t\tmatches = pattern.exec( offset );\n\n\t\t\t\twhile ( matches ) {\n\t\t\t\t\tswitch ( matches[ 2 ] || \"d\" ) {\n\t\t\t\t\t\tcase \"d\" : case \"D\" :\n\t\t\t\t\t\t\tday += parseInt( matches[ 1 ], 10 ); break;\n\t\t\t\t\t\tcase \"w\" : case \"W\" :\n\t\t\t\t\t\t\tday += parseInt( matches[ 1 ], 10 ) * 7; break;\n\t\t\t\t\t\tcase \"m\" : case \"M\" :\n\t\t\t\t\t\t\tmonth += parseInt( matches[ 1 ], 10 );\n\t\t\t\t\t\t\tday = Math.min( day, $.datepicker._getDaysInMonth( year, month ) );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"y\": case \"Y\" :\n\t\t\t\t\t\t\tyear += parseInt( matches[ 1 ], 10 );\n\t\t\t\t\t\t\tday = Math.min( day, $.datepicker._getDaysInMonth( year, month ) );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tmatches = pattern.exec( offset );\n\t\t\t\t}\n\t\t\t\treturn new Date( year, month, day );\n\t\t\t},\n\t\t\tnewDate = ( date == null || date === \"\" ? defaultDate : ( typeof date === \"string\" ? offsetString( date ) :\n\t\t\t\t( typeof date === \"number\" ? ( isNaN( date ) ? defaultDate : offsetNumeric( date ) ) : new Date( date.getTime() ) ) ) );\n\n\t\tnewDate = ( newDate && newDate.toString() === \"Invalid Date\" ? defaultDate : newDate );\n\t\tif ( newDate ) {\n\t\t\tnewDate.setHours( 0 );\n\t\t\tnewDate.setMinutes( 0 );\n\t\t\tnewDate.setSeconds( 0 );\n\t\t\tnewDate.setMilliseconds( 0 );\n\t\t}\n\t\treturn this._daylightSavingAdjust( newDate );\n\t},\n\n\t/* Handle switch to/from daylight saving.\n\t * Hours may be non-zero on daylight saving cut-over:\n\t * > 12 when midnight changeover, but then cannot generate\n\t * midnight datetime, so jump to 1AM, otherwise reset.\n\t * @param  date  (Date) the date to check\n\t * @return  (Date) the corrected date\n\t */\n\t_daylightSavingAdjust: function( date ) {\n\t\tif ( !date ) {\n\t\t\treturn null;\n\t\t}\n\t\tdate.setHours( date.getHours() > 12 ? date.getHours() + 2 : 0 );\n\t\treturn date;\n\t},\n\n\t/* Set the date(s) directly. */\n\t_setDate: function( inst, date, noChange ) {\n\t\tvar clear = !date,\n\t\t\torigMonth = inst.selectedMonth,\n\t\t\torigYear = inst.selectedYear,\n\t\t\tnewDate = this._restrictMinMax( inst, this._determineDate( inst, date, new Date() ) );\n\n\t\tinst.selectedDay = inst.currentDay = newDate.getDate();\n\t\tinst.drawMonth = inst.selectedMonth = inst.currentMonth = newDate.getMonth();\n\t\tinst.drawYear = inst.selectedYear = inst.currentYear = newDate.getFullYear();\n\t\tif ( ( origMonth !== inst.selectedMonth || origYear !== inst.selectedYear ) && !noChange ) {\n\t\t\tthis._notifyChange( inst );\n\t\t}\n\t\tthis._adjustInstDate( inst );\n\t\tif ( inst.input ) {\n\t\t\tinst.input.val( clear ? \"\" : this._formatDate( inst ) );\n\t\t}\n\t},\n\n\t/* Retrieve the date(s) directly. */\n\t_getDate: function( inst ) {\n\t\tvar startDate = ( !inst.currentYear || ( inst.input && inst.input.val() === \"\" ) ? null :\n\t\t\tthis._daylightSavingAdjust( new Date(\n\t\t\tinst.currentYear, inst.currentMonth, inst.currentDay ) ) );\n\t\t\treturn startDate;\n\t},\n\n\t/* Attach the onxxx handlers.  These are declared statically so\n\t * they work with static code transformers like Caja.\n\t */\n\t_attachHandlers: function( inst ) {\n\t\tvar stepMonths = this._get( inst, \"stepMonths\" ),\n\t\t\tid = \"#\" + inst.id.replace( /\\\\\\\\/g, \"\\\\\" );\n\t\tinst.dpDiv.find( \"[data-handler]\" ).map( function() {\n\t\t\tvar handler = {\n\t\t\t\tprev: function() {\n\t\t\t\t\t$.datepicker._adjustDate( id, -stepMonths, \"M\" );\n\t\t\t\t},\n\t\t\t\tnext: function() {\n\t\t\t\t\t$.datepicker._adjustDate( id, +stepMonths, \"M\" );\n\t\t\t\t},\n\t\t\t\thide: function() {\n\t\t\t\t\t$.datepicker._hideDatepicker();\n\t\t\t\t},\n\t\t\t\ttoday: function() {\n\t\t\t\t\t$.datepicker._gotoToday( id );\n\t\t\t\t},\n\t\t\t\tselectDay: function() {\n\t\t\t\t\t$.datepicker._selectDay( id, +this.getAttribute( \"data-month\" ), +this.getAttribute( \"data-year\" ), this );\n\t\t\t\t\treturn false;\n\t\t\t\t},\n\t\t\t\tselectMonth: function() {\n\t\t\t\t\t$.datepicker._selectMonthYear( id, this, \"M\" );\n\t\t\t\t\treturn false;\n\t\t\t\t},\n\t\t\t\tselectYear: function() {\n\t\t\t\t\t$.datepicker._selectMonthYear( id, this, \"Y\" );\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t};\n\t\t\t$( this ).on( this.getAttribute( \"data-event\" ), handler[ this.getAttribute( \"data-handler\" ) ] );\n\t\t} );\n\t},\n\n\t/* Generate the HTML for the current state of the date picker. */\n\t_generateHTML: function( inst ) {\n\t\tvar maxDraw, prevText, prev, nextText, next, currentText, gotoDate,\n\t\t\tcontrols, buttonPanel, firstDay, showWeek, dayNames, dayNamesMin,\n\t\t\tmonthNames, monthNamesShort, beforeShowDay, showOtherMonths,\n\t\t\tselectOtherMonths, defaultDate, html, dow, row, group, col, selectedDate,\n\t\t\tcornerClass, calender, thead, day, daysInMonth, leadDays, curRows, numRows,\n\t\t\tprintDate, dRow, tbody, daySettings, otherMonth, unselectable,\n\t\t\ttempDate = new Date(),\n\t\t\ttoday = this._daylightSavingAdjust(\n\t\t\t\tnew Date( tempDate.getFullYear(), tempDate.getMonth(), tempDate.getDate() ) ), // clear time\n\t\t\tisRTL = this._get( inst, \"isRTL\" ),\n\t\t\tshowButtonPanel = this._get( inst, \"showButtonPanel\" ),\n\t\t\thideIfNoPrevNext = this._get( inst, \"hideIfNoPrevNext\" ),\n\t\t\tnavigationAsDateFormat = this._get( inst, \"navigationAsDateFormat\" ),\n\t\t\tnumMonths = this._getNumberOfMonths( inst ),\n\t\t\tshowCurrentAtPos = this._get( inst, \"showCurrentAtPos\" ),\n\t\t\tstepMonths = this._get( inst, \"stepMonths\" ),\n\t\t\tisMultiMonth = ( numMonths[ 0 ] !== 1 || numMonths[ 1 ] !== 1 ),\n\t\t\tcurrentDate = this._daylightSavingAdjust( ( !inst.currentDay ? new Date( 9999, 9, 9 ) :\n\t\t\t\tnew Date( inst.currentYear, inst.currentMonth, inst.currentDay ) ) ),\n\t\t\tminDate = this._getMinMaxDate( inst, \"min\" ),\n\t\t\tmaxDate = this._getMinMaxDate( inst, \"max\" ),\n\t\t\tdrawMonth = inst.drawMonth - showCurrentAtPos,\n\t\t\tdrawYear = inst.drawYear;\n\n\t\tif ( drawMonth < 0 ) {\n\t\t\tdrawMonth += 12;\n\t\t\tdrawYear--;\n\t\t}\n\t\tif ( maxDate ) {\n\t\t\tmaxDraw = this._daylightSavingAdjust( new Date( maxDate.getFullYear(),\n\t\t\t\tmaxDate.getMonth() - ( numMonths[ 0 ] * numMonths[ 1 ] ) + 1, maxDate.getDate() ) );\n\t\t\tmaxDraw = ( minDate && maxDraw < minDate ? minDate : maxDraw );\n\t\t\twhile ( this._daylightSavingAdjust( new Date( drawYear, drawMonth, 1 ) ) > maxDraw ) {\n\t\t\t\tdrawMonth--;\n\t\t\t\tif ( drawMonth < 0 ) {\n\t\t\t\t\tdrawMonth = 11;\n\t\t\t\t\tdrawYear--;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tinst.drawMonth = drawMonth;\n\t\tinst.drawYear = drawYear;\n\n\t\tprevText = this._get( inst, \"prevText\" );\n\t\tprevText = ( !navigationAsDateFormat ? prevText : this.formatDate( prevText,\n\t\t\tthis._daylightSavingAdjust( new Date( drawYear, drawMonth - stepMonths, 1 ) ),\n\t\t\tthis._getFormatConfig( inst ) ) );\n\n\t\tprev = ( this._canAdjustMonth( inst, -1, drawYear, drawMonth ) ?\n\t\t\t\"<a class='ui-datepicker-prev ui-corner-all' data-handler='prev' data-event='click'\" +\n\t\t\t\" title='\" + prevText + \"'><span class='ui-icon ui-icon-circle-triangle-\" + ( isRTL ? \"e\" : \"w\" ) + \"'>\" + prevText + \"</span></a>\" :\n\t\t\t( hideIfNoPrevNext ? \"\" : \"<a class='ui-datepicker-prev ui-corner-all ui-state-disabled' title='\" + prevText + \"'><span class='ui-icon ui-icon-circle-triangle-\" + ( isRTL ? \"e\" : \"w\" ) + \"'>\" + prevText + \"</span></a>\" ) );\n\n\t\tnextText = this._get( inst, \"nextText\" );\n\t\tnextText = ( !navigationAsDateFormat ? nextText : this.formatDate( nextText,\n\t\t\tthis._daylightSavingAdjust( new Date( drawYear, drawMonth + stepMonths, 1 ) ),\n\t\t\tthis._getFormatConfig( inst ) ) );\n\n\t\tnext = ( this._canAdjustMonth( inst, +1, drawYear, drawMonth ) ?\n\t\t\t\"<a class='ui-datepicker-next ui-corner-all' data-handler='next' data-event='click'\" +\n\t\t\t\" title='\" + nextText + \"'><span class='ui-icon ui-icon-circle-triangle-\" + ( isRTL ? \"w\" : \"e\" ) + \"'>\" + nextText + \"</span></a>\" :\n\t\t\t( hideIfNoPrevNext ? \"\" : \"<a class='ui-datepicker-next ui-corner-all ui-state-disabled' title='\" + nextText + \"'><span class='ui-icon ui-icon-circle-triangle-\" + ( isRTL ? \"w\" : \"e\" ) + \"'>\" + nextText + \"</span></a>\" ) );\n\n\t\tcurrentText = this._get( inst, \"currentText\" );\n\t\tgotoDate = ( this._get( inst, \"gotoCurrent\" ) && inst.currentDay ? currentDate : today );\n\t\tcurrentText = ( !navigationAsDateFormat ? currentText :\n\t\t\tthis.formatDate( currentText, gotoDate, this._getFormatConfig( inst ) ) );\n\n\t\tcontrols = ( !inst.inline ? \"<button type='button' class='ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all' data-handler='hide' data-event='click'>\" +\n\t\t\tthis._get( inst, \"closeText\" ) + \"</button>\" : \"\" );\n\n\t\tbuttonPanel = ( showButtonPanel ) ? \"<div class='ui-datepicker-buttonpane ui-widget-content'>\" + ( isRTL ? controls : \"\" ) +\n\t\t\t( this._isInRange( inst, gotoDate ) ? \"<button type='button' class='ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all' data-handler='today' data-event='click'\" +\n\t\t\t\">\" + currentText + \"</button>\" : \"\" ) + ( isRTL ? \"\" : controls ) + \"</div>\" : \"\";\n\n\t\tfirstDay = parseInt( this._get( inst, \"firstDay\" ), 10 );\n\t\tfirstDay = ( isNaN( firstDay ) ? 0 : firstDay );\n\n\t\tshowWeek = this._get( inst, \"showWeek\" );\n\t\tdayNames = this._get( inst, \"dayNames\" );\n\t\tdayNamesMin = this._get( inst, \"dayNamesMin\" );\n\t\tmonthNames = this._get( inst, \"monthNames\" );\n\t\tmonthNamesShort = this._get( inst, \"monthNamesShort\" );\n\t\tbeforeShowDay = this._get( inst, \"beforeShowDay\" );\n\t\tshowOtherMonths = this._get( inst, \"showOtherMonths\" );\n\t\tselectOtherMonths = this._get( inst, \"selectOtherMonths\" );\n\t\tdefaultDate = this._getDefaultDate( inst );\n\t\thtml = \"\";\n\n\t\tfor ( row = 0; row < numMonths[ 0 ]; row++ ) {\n\t\t\tgroup = \"\";\n\t\t\tthis.maxRows = 4;\n\t\t\tfor ( col = 0; col < numMonths[ 1 ]; col++ ) {\n\t\t\t\tselectedDate = this._daylightSavingAdjust( new Date( drawYear, drawMonth, inst.selectedDay ) );\n\t\t\t\tcornerClass = \" ui-corner-all\";\n\t\t\t\tcalender = \"\";\n\t\t\t\tif ( isMultiMonth ) {\n\t\t\t\t\tcalender += \"<div class='ui-datepicker-group\";\n\t\t\t\t\tif ( numMonths[ 1 ] > 1 ) {\n\t\t\t\t\t\tswitch ( col ) {\n\t\t\t\t\t\t\tcase 0: calender += \" ui-datepicker-group-first\";\n\t\t\t\t\t\t\t\tcornerClass = \" ui-corner-\" + ( isRTL ? \"right\" : \"left\" ); break;\n\t\t\t\t\t\t\tcase numMonths[ 1 ] - 1: calender += \" ui-datepicker-group-last\";\n\t\t\t\t\t\t\t\tcornerClass = \" ui-corner-\" + ( isRTL ? \"left\" : \"right\" ); break;\n\t\t\t\t\t\t\tdefault: calender += \" ui-datepicker-group-middle\"; cornerClass = \"\"; break;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tcalender += \"'>\";\n\t\t\t\t}\n\t\t\t\tcalender += \"<div class='ui-datepicker-header ui-widget-header ui-helper-clearfix\" + cornerClass + \"'>\" +\n\t\t\t\t\t( /all|left/.test( cornerClass ) && row === 0 ? ( isRTL ? next : prev ) : \"\" ) +\n\t\t\t\t\t( /all|right/.test( cornerClass ) && row === 0 ? ( isRTL ? prev : next ) : \"\" ) +\n\t\t\t\t\tthis._generateMonthYearHeader( inst, drawMonth, drawYear, minDate, maxDate,\n\t\t\t\t\trow > 0 || col > 0, monthNames, monthNamesShort ) + // draw month headers\n\t\t\t\t\t\"</div><table class='ui-datepicker-calendar'><thead>\" +\n\t\t\t\t\t\"<tr>\";\n\t\t\t\tthead = ( showWeek ? \"<th class='ui-datepicker-week-col'>\" + this._get( inst, \"weekHeader\" ) + \"</th>\" : \"\" );\n\t\t\t\tfor ( dow = 0; dow < 7; dow++ ) { // days of the week\n\t\t\t\t\tday = ( dow + firstDay ) % 7;\n\t\t\t\t\tthead += \"<th scope='col'\" + ( ( dow + firstDay + 6 ) % 7 >= 5 ? \" class='ui-datepicker-week-end'\" : \"\" ) + \">\" +\n\t\t\t\t\t\t\"<span title='\" + dayNames[ day ] + \"'>\" + dayNamesMin[ day ] + \"</span></th>\";\n\t\t\t\t}\n\t\t\t\tcalender += thead + \"</tr></thead><tbody>\";\n\t\t\t\tdaysInMonth = this._getDaysInMonth( drawYear, drawMonth );\n\t\t\t\tif ( drawYear === inst.selectedYear && drawMonth === inst.selectedMonth ) {\n\t\t\t\t\tinst.selectedDay = Math.min( inst.selectedDay, daysInMonth );\n\t\t\t\t}\n\t\t\t\tleadDays = ( this._getFirstDayOfMonth( drawYear, drawMonth ) - firstDay + 7 ) % 7;\n\t\t\t\tcurRows = Math.ceil( ( leadDays + daysInMonth ) / 7 ); // calculate the number of rows to generate\n\t\t\t\tnumRows = ( isMultiMonth ? this.maxRows > curRows ? this.maxRows : curRows : curRows ); //If multiple months, use the higher number of rows (see #7043)\n\t\t\t\tthis.maxRows = numRows;\n\t\t\t\tprintDate = this._daylightSavingAdjust( new Date( drawYear, drawMonth, 1 - leadDays ) );\n\t\t\t\tfor ( dRow = 0; dRow < numRows; dRow++ ) { // create date picker rows\n\t\t\t\t\tcalender += \"<tr>\";\n\t\t\t\t\ttbody = ( !showWeek ? \"\" : \"<td class='ui-datepicker-week-col'>\" +\n\t\t\t\t\t\tthis._get( inst, \"calculateWeek\" )( printDate ) + \"</td>\" );\n\t\t\t\t\tfor ( dow = 0; dow < 7; dow++ ) { // create date picker days\n\t\t\t\t\t\tdaySettings = ( beforeShowDay ?\n\t\t\t\t\t\t\tbeforeShowDay.apply( ( inst.input ? inst.input[ 0 ] : null ), [ printDate ] ) : [ true, \"\" ] );\n\t\t\t\t\t\totherMonth = ( printDate.getMonth() !== drawMonth );\n\t\t\t\t\t\tunselectable = ( otherMonth && !selectOtherMonths ) || !daySettings[ 0 ] ||\n\t\t\t\t\t\t\t( minDate && printDate < minDate ) || ( maxDate && printDate > maxDate );\n\t\t\t\t\t\ttbody += \"<td class='\" +\n\t\t\t\t\t\t\t( ( dow + firstDay + 6 ) % 7 >= 5 ? \" ui-datepicker-week-end\" : \"\" ) + // highlight weekends\n\t\t\t\t\t\t\t( otherMonth ? \" ui-datepicker-other-month\" : \"\" ) + // highlight days from other months\n\t\t\t\t\t\t\t( ( printDate.getTime() === selectedDate.getTime() && drawMonth === inst.selectedMonth && inst._keyEvent ) || // user pressed key\n\t\t\t\t\t\t\t( defaultDate.getTime() === printDate.getTime() && defaultDate.getTime() === selectedDate.getTime() ) ?\n\n\t\t\t\t\t\t\t// or defaultDate is current printedDate and defaultDate is selectedDate\n\t\t\t\t\t\t\t\" \" + this._dayOverClass : \"\" ) + // highlight selected day\n\t\t\t\t\t\t\t( unselectable ? \" \" + this._unselectableClass + \" ui-state-disabled\" : \"\" ) +  // highlight unselectable days\n\t\t\t\t\t\t\t( otherMonth && !showOtherMonths ? \"\" : \" \" + daySettings[ 1 ] + // highlight custom dates\n\t\t\t\t\t\t\t( printDate.getTime() === currentDate.getTime() ? \" \" + this._currentClass : \"\" ) + // highlight selected day\n\t\t\t\t\t\t\t( printDate.getTime() === today.getTime() ? \" ui-datepicker-today\" : \"\" ) ) + \"'\" + // highlight today (if different)\n\t\t\t\t\t\t\t( ( !otherMonth || showOtherMonths ) && daySettings[ 2 ] ? \" title='\" + daySettings[ 2 ].replace( /'/g, \"&#39;\" ) + \"'\" : \"\" ) + // cell title\n\t\t\t\t\t\t\t( unselectable ? \"\" : \" data-handler='selectDay' data-event='click' data-month='\" + printDate.getMonth() + \"' data-year='\" + printDate.getFullYear() + \"'\" ) + \">\" + // actions\n\t\t\t\t\t\t\t( otherMonth && !showOtherMonths ? \"&#xa0;\" : // display for other months\n\t\t\t\t\t\t\t( unselectable ? \"<span class='ui-state-default'>\" + printDate.getDate() + \"</span>\" : \"<a class='ui-state-default\" +\n\t\t\t\t\t\t\t( printDate.getTime() === today.getTime() ? \" ui-state-highlight\" : \"\" ) +\n\t\t\t\t\t\t\t( printDate.getTime() === currentDate.getTime() ? \" ui-state-active\" : \"\" ) + // highlight selected day\n\t\t\t\t\t\t\t( otherMonth ? \" ui-priority-secondary\" : \"\" ) + // distinguish dates from other months\n\t\t\t\t\t\t\t\"' href='#'>\" + printDate.getDate() + \"</a>\" ) ) + \"</td>\"; // display selectable date\n\t\t\t\t\t\tprintDate.setDate( printDate.getDate() + 1 );\n\t\t\t\t\t\tprintDate = this._daylightSavingAdjust( printDate );\n\t\t\t\t\t}\n\t\t\t\t\tcalender += tbody + \"</tr>\";\n\t\t\t\t}\n\t\t\t\tdrawMonth++;\n\t\t\t\tif ( drawMonth > 11 ) {\n\t\t\t\t\tdrawMonth = 0;\n\t\t\t\t\tdrawYear++;\n\t\t\t\t}\n\t\t\t\tcalender += \"</tbody></table>\" + ( isMultiMonth ? \"</div>\" +\n\t\t\t\t\t\t\t( ( numMonths[ 0 ] > 0 && col === numMonths[ 1 ] - 1 ) ? \"<div class='ui-datepicker-row-break'></div>\" : \"\" ) : \"\" );\n\t\t\t\tgroup += calender;\n\t\t\t}\n\t\t\thtml += group;\n\t\t}\n\t\thtml += buttonPanel;\n\t\tinst._keyEvent = false;\n\t\treturn html;\n\t},\n\n\t/* Generate the month and year header. */\n\t_generateMonthYearHeader: function( inst, drawMonth, drawYear, minDate, maxDate,\n\t\t\tsecondary, monthNames, monthNamesShort ) {\n\n\t\tvar inMinYear, inMaxYear, month, years, thisYear, determineYear, year, endYear,\n\t\t\tchangeMonth = this._get( inst, \"changeMonth\" ),\n\t\t\tchangeYear = this._get( inst, \"changeYear\" ),\n\t\t\tshowMonthAfterYear = this._get( inst, \"showMonthAfterYear\" ),\n\t\t\thtml = \"<div class='ui-datepicker-title'>\",\n\t\t\tmonthHtml = \"\";\n\n\t\t// Month selection\n\t\tif ( secondary || !changeMonth ) {\n\t\t\tmonthHtml += \"<span class='ui-datepicker-month'>\" + monthNames[ drawMonth ] + \"</span>\";\n\t\t} else {\n\t\t\tinMinYear = ( minDate && minDate.getFullYear() === drawYear );\n\t\t\tinMaxYear = ( maxDate && maxDate.getFullYear() === drawYear );\n\t\t\tmonthHtml += \"<select class='ui-datepicker-month' data-handler='selectMonth' data-event='change'>\";\n\t\t\tfor ( month = 0; month < 12; month++ ) {\n\t\t\t\tif ( ( !inMinYear || month >= minDate.getMonth() ) && ( !inMaxYear || month <= maxDate.getMonth() ) ) {\n\t\t\t\t\tmonthHtml += \"<option value='\" + month + \"'\" +\n\t\t\t\t\t\t( month === drawMonth ? \" selected='selected'\" : \"\" ) +\n\t\t\t\t\t\t\">\" + monthNamesShort[ month ] + \"</option>\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tmonthHtml += \"</select>\";\n\t\t}\n\n\t\tif ( !showMonthAfterYear ) {\n\t\t\thtml += monthHtml + ( secondary || !( changeMonth && changeYear ) ? \"&#xa0;\" : \"\" );\n\t\t}\n\n\t\t// Year selection\n\t\tif ( !inst.yearshtml ) {\n\t\t\tinst.yearshtml = \"\";\n\t\t\tif ( secondary || !changeYear ) {\n\t\t\t\thtml += \"<span class='ui-datepicker-year'>\" + drawYear + \"</span>\";\n\t\t\t} else {\n\n\t\t\t\t// determine range of years to display\n\t\t\t\tyears = this._get( inst, \"yearRange\" ).split( \":\" );\n\t\t\t\tthisYear = new Date().getFullYear();\n\t\t\t\tdetermineYear = function( value ) {\n\t\t\t\t\tvar year = ( value.match( /c[+\\-].*/ ) ? drawYear + parseInt( value.substring( 1 ), 10 ) :\n\t\t\t\t\t\t( value.match( /[+\\-].*/ ) ? thisYear + parseInt( value, 10 ) :\n\t\t\t\t\t\tparseInt( value, 10 ) ) );\n\t\t\t\t\treturn ( isNaN( year ) ? thisYear : year );\n\t\t\t\t};\n\t\t\t\tyear = determineYear( years[ 0 ] );\n\t\t\t\tendYear = Math.max( year, determineYear( years[ 1 ] || \"\" ) );\n\t\t\t\tyear = ( minDate ? Math.max( year, minDate.getFullYear() ) : year );\n\t\t\t\tendYear = ( maxDate ? Math.min( endYear, maxDate.getFullYear() ) : endYear );\n\t\t\t\tinst.yearshtml += \"<select class='ui-datepicker-year' data-handler='selectYear' data-event='change'>\";\n\t\t\t\tfor ( ; year <= endYear; year++ ) {\n\t\t\t\t\tinst.yearshtml += \"<option value='\" + year + \"'\" +\n\t\t\t\t\t\t( year === drawYear ? \" selected='selected'\" : \"\" ) +\n\t\t\t\t\t\t\">\" + year + \"</option>\";\n\t\t\t\t}\n\t\t\t\tinst.yearshtml += \"</select>\";\n\n\t\t\t\thtml += inst.yearshtml;\n\t\t\t\tinst.yearshtml = null;\n\t\t\t}\n\t\t}\n\n\t\thtml += this._get( inst, \"yearSuffix\" );\n\t\tif ( showMonthAfterYear ) {\n\t\t\thtml += ( secondary || !( changeMonth && changeYear ) ? \"&#xa0;\" : \"\" ) + monthHtml;\n\t\t}\n\t\thtml += \"</div>\"; // Close datepicker_header\n\t\treturn html;\n\t},\n\n\t/* Adjust one of the date sub-fields. */\n\t_adjustInstDate: function( inst, offset, period ) {\n\t\tvar year = inst.selectedYear + ( period === \"Y\" ? offset : 0 ),\n\t\t\tmonth = inst.selectedMonth + ( period === \"M\" ? offset : 0 ),\n\t\t\tday = Math.min( inst.selectedDay, this._getDaysInMonth( year, month ) ) + ( period === \"D\" ? offset : 0 ),\n\t\t\tdate = this._restrictMinMax( inst, this._daylightSavingAdjust( new Date( year, month, day ) ) );\n\n\t\tinst.selectedDay = date.getDate();\n\t\tinst.drawMonth = inst.selectedMonth = date.getMonth();\n\t\tinst.drawYear = inst.selectedYear = date.getFullYear();\n\t\tif ( period === \"M\" || period === \"Y\" ) {\n\t\t\tthis._notifyChange( inst );\n\t\t}\n\t},\n\n\t/* Ensure a date is within any min/max bounds. */\n\t_restrictMinMax: function( inst, date ) {\n\t\tvar minDate = this._getMinMaxDate( inst, \"min\" ),\n\t\t\tmaxDate = this._getMinMaxDate( inst, \"max\" ),\n\t\t\tnewDate = ( minDate && date < minDate ? minDate : date );\n\t\treturn ( maxDate && newDate > maxDate ? maxDate : newDate );\n\t},\n\n\t/* Notify change of month/year. */\n\t_notifyChange: function( inst ) {\n\t\tvar onChange = this._get( inst, \"onChangeMonthYear\" );\n\t\tif ( onChange ) {\n\t\t\tonChange.apply( ( inst.input ? inst.input[ 0 ] : null ),\n\t\t\t\t[ inst.selectedYear, inst.selectedMonth + 1, inst ] );\n\t\t}\n\t},\n\n\t/* Determine the number of months to show. */\n\t_getNumberOfMonths: function( inst ) {\n\t\tvar numMonths = this._get( inst, \"numberOfMonths\" );\n\t\treturn ( numMonths == null ? [ 1, 1 ] : ( typeof numMonths === \"number\" ? [ 1, numMonths ] : numMonths ) );\n\t},\n\n\t/* Determine the current maximum date - ensure no time components are set. */\n\t_getMinMaxDate: function( inst, minMax ) {\n\t\treturn this._determineDate( inst, this._get( inst, minMax + \"Date\" ), null );\n\t},\n\n\t/* Find the number of days in a given month. */\n\t_getDaysInMonth: function( year, month ) {\n\t\treturn 32 - this._daylightSavingAdjust( new Date( year, month, 32 ) ).getDate();\n\t},\n\n\t/* Find the day of the week of the first of a month. */\n\t_getFirstDayOfMonth: function( year, month ) {\n\t\treturn new Date( year, month, 1 ).getDay();\n\t},\n\n\t/* Determines if we should allow a \"next/prev\" month display change. */\n\t_canAdjustMonth: function( inst, offset, curYear, curMonth ) {\n\t\tvar numMonths = this._getNumberOfMonths( inst ),\n\t\t\tdate = this._daylightSavingAdjust( new Date( curYear,\n\t\t\tcurMonth + ( offset < 0 ? offset : numMonths[ 0 ] * numMonths[ 1 ] ), 1 ) );\n\n\t\tif ( offset < 0 ) {\n\t\t\tdate.setDate( this._getDaysInMonth( date.getFullYear(), date.getMonth() ) );\n\t\t}\n\t\treturn this._isInRange( inst, date );\n\t},\n\n\t/* Is the given date in the accepted range? */\n\t_isInRange: function( inst, date ) {\n\t\tvar yearSplit, currentYear,\n\t\t\tminDate = this._getMinMaxDate( inst, \"min\" ),\n\t\t\tmaxDate = this._getMinMaxDate( inst, \"max\" ),\n\t\t\tminYear = null,\n\t\t\tmaxYear = null,\n\t\t\tyears = this._get( inst, \"yearRange\" );\n\t\t\tif ( years ) {\n\t\t\t\tyearSplit = years.split( \":\" );\n\t\t\t\tcurrentYear = new Date().getFullYear();\n\t\t\t\tminYear = parseInt( yearSplit[ 0 ], 10 );\n\t\t\t\tmaxYear = parseInt( yearSplit[ 1 ], 10 );\n\t\t\t\tif ( yearSplit[ 0 ].match( /[+\\-].*/ ) ) {\n\t\t\t\t\tminYear += currentYear;\n\t\t\t\t}\n\t\t\t\tif ( yearSplit[ 1 ].match( /[+\\-].*/ ) ) {\n\t\t\t\t\tmaxYear += currentYear;\n\t\t\t\t}\n\t\t\t}\n\n\t\treturn ( ( !minDate || date.getTime() >= minDate.getTime() ) &&\n\t\t\t( !maxDate || date.getTime() <= maxDate.getTime() ) &&\n\t\t\t( !minYear || date.getFullYear() >= minYear ) &&\n\t\t\t( !maxYear || date.getFullYear() <= maxYear ) );\n\t},\n\n\t/* Provide the configuration settings for formatting/parsing. */\n\t_getFormatConfig: function( inst ) {\n\t\tvar shortYearCutoff = this._get( inst, \"shortYearCutoff\" );\n\t\tshortYearCutoff = ( typeof shortYearCutoff !== \"string\" ? shortYearCutoff :\n\t\t\tnew Date().getFullYear() % 100 + parseInt( shortYearCutoff, 10 ) );\n\t\treturn { shortYearCutoff: shortYearCutoff,\n\t\t\tdayNamesShort: this._get( inst, \"dayNamesShort\" ), dayNames: this._get( inst, \"dayNames\" ),\n\t\t\tmonthNamesShort: this._get( inst, \"monthNamesShort\" ), monthNames: this._get( inst, \"monthNames\" ) };\n\t},\n\n\t/* Format the given date for display. */\n\t_formatDate: function( inst, day, month, year ) {\n\t\tif ( !day ) {\n\t\t\tinst.currentDay = inst.selectedDay;\n\t\t\tinst.currentMonth = inst.selectedMonth;\n\t\t\tinst.currentYear = inst.selectedYear;\n\t\t}\n\t\tvar date = ( day ? ( typeof day === \"object\" ? day :\n\t\t\tthis._daylightSavingAdjust( new Date( year, month, day ) ) ) :\n\t\t\tthis._daylightSavingAdjust( new Date( inst.currentYear, inst.currentMonth, inst.currentDay ) ) );\n\t\treturn this.formatDate( this._get( inst, \"dateFormat\" ), date, this._getFormatConfig( inst ) );\n\t}\n} );\n\n/*\n * Bind hover events for datepicker elements.\n * Done via delegate so the binding only occurs once in the lifetime of the parent div.\n * Global datepicker_instActive, set by _updateDatepicker allows the handlers to find their way back to the active picker.\n */\nfunction datepicker_bindHover( dpDiv ) {\n\tvar selector = \"button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a\";\n\treturn dpDiv.on( \"mouseout\", selector, function() {\n\t\t\t$( this ).removeClass( \"ui-state-hover\" );\n\t\t\tif ( this.className.indexOf( \"ui-datepicker-prev\" ) !== -1 ) {\n\t\t\t\t$( this ).removeClass( \"ui-datepicker-prev-hover\" );\n\t\t\t}\n\t\t\tif ( this.className.indexOf( \"ui-datepicker-next\" ) !== -1 ) {\n\t\t\t\t$( this ).removeClass( \"ui-datepicker-next-hover\" );\n\t\t\t}\n\t\t} )\n\t\t.on( \"mouseover\", selector, datepicker_handleMouseover );\n}\n\nfunction datepicker_handleMouseover() {\n\tif ( !$.datepicker._isDisabledDatepicker( datepicker_instActive.inline ? datepicker_instActive.dpDiv.parent()[ 0 ] : datepicker_instActive.input[ 0 ] ) ) {\n\t\t$( this ).parents( \".ui-datepicker-calendar\" ).find( \"a\" ).removeClass( \"ui-state-hover\" );\n\t\t$( this ).addClass( \"ui-state-hover\" );\n\t\tif ( this.className.indexOf( \"ui-datepicker-prev\" ) !== -1 ) {\n\t\t\t$( this ).addClass( \"ui-datepicker-prev-hover\" );\n\t\t}\n\t\tif ( this.className.indexOf( \"ui-datepicker-next\" ) !== -1 ) {\n\t\t\t$( this ).addClass( \"ui-datepicker-next-hover\" );\n\t\t}\n\t}\n}\n\n/* jQuery extend now ignores nulls! */\nfunction datepicker_extendRemove( target, props ) {\n\t$.extend( target, props );\n\tfor ( var name in props ) {\n\t\tif ( props[ name ] == null ) {\n\t\t\ttarget[ name ] = props[ name ];\n\t\t}\n\t}\n\treturn target;\n}\n\n/* Invoke the datepicker functionality.\n   @param  options  string - a command, optionally followed by additional parameters or\n\t\t\t\t\tObject - settings for attaching new datepicker functionality\n   @return  jQuery object */\n$.fn.datepicker = function( options ) {\n\n\t/* Verify an empty collection wasn't passed - Fixes #6976 */\n\tif ( !this.length ) {\n\t\treturn this;\n\t}\n\n\t/* Initialise the date picker. */\n\tif ( !$.datepicker.initialized ) {\n\t\t$( document ).on( \"mousedown\", $.datepicker._checkExternalClick );\n\t\t$.datepicker.initialized = true;\n\t}\n\n\t/* Append datepicker main container to body if not exist. */\n\tif ( $( \"#\" + $.datepicker._mainDivId ).length === 0 ) {\n\t\t$( \"body\" ).append( $.datepicker.dpDiv );\n\t}\n\n\tvar otherArgs = Array.prototype.slice.call( arguments, 1 );\n\tif ( typeof options === \"string\" && ( options === \"isDisabled\" || options === \"getDate\" || options === \"widget\" ) ) {\n\t\treturn $.datepicker[ \"_\" + options + \"Datepicker\" ].\n\t\t\tapply( $.datepicker, [ this[ 0 ] ].concat( otherArgs ) );\n\t}\n\tif ( options === \"option\" && arguments.length === 2 && typeof arguments[ 1 ] === \"string\" ) {\n\t\treturn $.datepicker[ \"_\" + options + \"Datepicker\" ].\n\t\t\tapply( $.datepicker, [ this[ 0 ] ].concat( otherArgs ) );\n\t}\n\treturn this.each( function() {\n\t\ttypeof options === \"string\" ?\n\t\t\t$.datepicker[ \"_\" + options + \"Datepicker\" ].\n\t\t\t\tapply( $.datepicker, [ this ].concat( otherArgs ) ) :\n\t\t\t$.datepicker._attachDatepicker( this, options );\n\t} );\n};\n\n$.datepicker = new Datepicker(); // singleton instance\n$.datepicker.initialized = false;\n$.datepicker.uuid = new Date().getTime();\n$.datepicker.version = \"1.12.1\";\n\nvar widgetsDatepicker = $.datepicker;\n\n\n/*!\n * jQuery UI Dialog 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Dialog\n//>>group: Widgets\n//>>description: Displays customizable dialog windows.\n//>>docs: http://api.jqueryui.com/dialog/\n//>>demos: http://jqueryui.com/dialog/\n//>>css.structure: ../../themes/base/core.css\n//>>css.structure: ../../themes/base/dialog.css\n//>>css.theme: ../../themes/base/theme.css\n\n\n\n$.widget( \"ui.dialog\", {\n\tversion: \"1.12.1\",\n\toptions: {\n\t\tappendTo: \"body\",\n\t\tautoOpen: true,\n\t\tbuttons: [],\n\t\tclasses: {\n\t\t\t\"ui-dialog\": \"ui-corner-all\",\n\t\t\t\"ui-dialog-titlebar\": \"ui-corner-all\"\n\t\t},\n\t\tcloseOnEscape: true,\n\t\tcloseText: \"Close\",\n\t\tdraggable: true,\n\t\thide: null,\n\t\theight: \"auto\",\n\t\tmaxHeight: null,\n\t\tmaxWidth: null,\n\t\tminHeight: 150,\n\t\tminWidth: 150,\n\t\tmodal: false,\n\t\tposition: {\n\t\t\tmy: \"center\",\n\t\t\tat: \"center\",\n\t\t\tof: window,\n\t\t\tcollision: \"fit\",\n\n\t\t\t// Ensure the titlebar is always visible\n\t\t\tusing: function( pos ) {\n\t\t\t\tvar topOffset = $( this ).css( pos ).offset().top;\n\t\t\t\tif ( topOffset < 0 ) {\n\t\t\t\t\t$( this ).css( \"top\", pos.top - topOffset );\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tresizable: true,\n\t\tshow: null,\n\t\ttitle: null,\n\t\twidth: 300,\n\n\t\t// Callbacks\n\t\tbeforeClose: null,\n\t\tclose: null,\n\t\tdrag: null,\n\t\tdragStart: null,\n\t\tdragStop: null,\n\t\tfocus: null,\n\t\topen: null,\n\t\tresize: null,\n\t\tresizeStart: null,\n\t\tresizeStop: null\n\t},\n\n\tsizeRelatedOptions: {\n\t\tbuttons: true,\n\t\theight: true,\n\t\tmaxHeight: true,\n\t\tmaxWidth: true,\n\t\tminHeight: true,\n\t\tminWidth: true,\n\t\twidth: true\n\t},\n\n\tresizableRelatedOptions: {\n\t\tmaxHeight: true,\n\t\tmaxWidth: true,\n\t\tminHeight: true,\n\t\tminWidth: true\n\t},\n\n\t_create: function() {\n\t\tthis.originalCss = {\n\t\t\tdisplay: this.element[ 0 ].style.display,\n\t\t\twidth: this.element[ 0 ].style.width,\n\t\t\tminHeight: this.element[ 0 ].style.minHeight,\n\t\t\tmaxHeight: this.element[ 0 ].style.maxHeight,\n\t\t\theight: this.element[ 0 ].style.height\n\t\t};\n\t\tthis.originalPosition = {\n\t\t\tparent: this.element.parent(),\n\t\t\tindex: this.element.parent().children().index( this.element )\n\t\t};\n\t\tthis.originalTitle = this.element.attr( \"title\" );\n\t\tif ( this.options.title == null && this.originalTitle != null ) {\n\t\t\tthis.options.title = this.originalTitle;\n\t\t}\n\n\t\t// Dialogs can't be disabled\n\t\tif ( this.options.disabled ) {\n\t\t\tthis.options.disabled = false;\n\t\t}\n\n\t\tthis._createWrapper();\n\n\t\tthis.element\n\t\t\t.show()\n\t\t\t.removeAttr( \"title\" )\n\t\t\t.appendTo( this.uiDialog );\n\n\t\tthis._addClass( \"ui-dialog-content\", \"ui-widget-content\" );\n\n\t\tthis._createTitlebar();\n\t\tthis._createButtonPane();\n\n\t\tif ( this.options.draggable && $.fn.draggable ) {\n\t\t\tthis._makeDraggable();\n\t\t}\n\t\tif ( this.options.resizable && $.fn.resizable ) {\n\t\t\tthis._makeResizable();\n\t\t}\n\n\t\tthis._isOpen = false;\n\n\t\tthis._trackFocus();\n\t},\n\n\t_init: function() {\n\t\tif ( this.options.autoOpen ) {\n\t\t\tthis.open();\n\t\t}\n\t},\n\n\t_appendTo: function() {\n\t\tvar element = this.options.appendTo;\n\t\tif ( element && ( element.jquery || element.nodeType ) ) {\n\t\t\treturn $( element );\n\t\t}\n\t\treturn this.document.find( element || \"body\" ).eq( 0 );\n\t},\n\n\t_destroy: function() {\n\t\tvar next,\n\t\t\toriginalPosition = this.originalPosition;\n\n\t\tthis._untrackInstance();\n\t\tthis._destroyOverlay();\n\n\t\tthis.element\n\t\t\t.removeUniqueId()\n\t\t\t.css( this.originalCss )\n\n\t\t\t// Without detaching first, the following becomes really slow\n\t\t\t.detach();\n\n\t\tthis.uiDialog.remove();\n\n\t\tif ( this.originalTitle ) {\n\t\t\tthis.element.attr( \"title\", this.originalTitle );\n\t\t}\n\n\t\tnext = originalPosition.parent.children().eq( originalPosition.index );\n\n\t\t// Don't try to place the dialog next to itself (#8613)\n\t\tif ( next.length && next[ 0 ] !== this.element[ 0 ] ) {\n\t\t\tnext.before( this.element );\n\t\t} else {\n\t\t\toriginalPosition.parent.append( this.element );\n\t\t}\n\t},\n\n\twidget: function() {\n\t\treturn this.uiDialog;\n\t},\n\n\tdisable: $.noop,\n\tenable: $.noop,\n\n\tclose: function( event ) {\n\t\tvar that = this;\n\n\t\tif ( !this._isOpen || this._trigger( \"beforeClose\", event ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._isOpen = false;\n\t\tthis._focusedElement = null;\n\t\tthis._destroyOverlay();\n\t\tthis._untrackInstance();\n\n\t\tif ( !this.opener.filter( \":focusable\" ).trigger( \"focus\" ).length ) {\n\n\t\t\t// Hiding a focused element doesn't trigger blur in WebKit\n\t\t\t// so in case we have nothing to focus on, explicitly blur the active element\n\t\t\t// https://bugs.webkit.org/show_bug.cgi?id=47182\n\t\t\t$.ui.safeBlur( $.ui.safeActiveElement( this.document[ 0 ] ) );\n\t\t}\n\n\t\tthis._hide( this.uiDialog, this.options.hide, function() {\n\t\t\tthat._trigger( \"close\", event );\n\t\t} );\n\t},\n\n\tisOpen: function() {\n\t\treturn this._isOpen;\n\t},\n\n\tmoveToTop: function() {\n\t\tthis._moveToTop();\n\t},\n\n\t_moveToTop: function( event, silent ) {\n\t\tvar moved = false,\n\t\t\tzIndices = this.uiDialog.siblings( \".ui-front:visible\" ).map( function() {\n\t\t\t\treturn +$( this ).css( \"z-index\" );\n\t\t\t} ).get(),\n\t\t\tzIndexMax = Math.max.apply( null, zIndices );\n\n\t\tif ( zIndexMax >= +this.uiDialog.css( \"z-index\" ) ) {\n\t\t\tthis.uiDialog.css( \"z-index\", zIndexMax + 1 );\n\t\t\tmoved = true;\n\t\t}\n\n\t\tif ( moved && !silent ) {\n\t\t\tthis._trigger( \"focus\", event );\n\t\t}\n\t\treturn moved;\n\t},\n\n\topen: function() {\n\t\tvar that = this;\n\t\tif ( this._isOpen ) {\n\t\t\tif ( this._moveToTop() ) {\n\t\t\t\tthis._focusTabbable();\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tthis._isOpen = true;\n\t\tthis.opener = $( $.ui.safeActiveElement( this.document[ 0 ] ) );\n\n\t\tthis._size();\n\t\tthis._position();\n\t\tthis._createOverlay();\n\t\tthis._moveToTop( null, true );\n\n\t\t// Ensure the overlay is moved to the top with the dialog, but only when\n\t\t// opening. The overlay shouldn't move after the dialog is open so that\n\t\t// modeless dialogs opened after the modal dialog stack properly.\n\t\tif ( this.overlay ) {\n\t\t\tthis.overlay.css( \"z-index\", this.uiDialog.css( \"z-index\" ) - 1 );\n\t\t}\n\n\t\tthis._show( this.uiDialog, this.options.show, function() {\n\t\t\tthat._focusTabbable();\n\t\t\tthat._trigger( \"focus\" );\n\t\t} );\n\n\t\t// Track the dialog immediately upon openening in case a focus event\n\t\t// somehow occurs outside of the dialog before an element inside the\n\t\t// dialog is focused (#10152)\n\t\tthis._makeFocusTarget();\n\n\t\tthis._trigger( \"open\" );\n\t},\n\n\t_focusTabbable: function() {\n\n\t\t// Set focus to the first match:\n\t\t// 1. An element that was focused previously\n\t\t// 2. First element inside the dialog matching [autofocus]\n\t\t// 3. Tabbable element inside the content element\n\t\t// 4. Tabbable element inside the buttonpane\n\t\t// 5. The close button\n\t\t// 6. The dialog itself\n\t\tvar hasFocus = this._focusedElement;\n\t\tif ( !hasFocus ) {\n\t\t\thasFocus = this.element.find( \"[autofocus]\" );\n\t\t}\n\t\tif ( !hasFocus.length ) {\n\t\t\thasFocus = this.element.find( \":tabbable\" );\n\t\t}\n\t\tif ( !hasFocus.length ) {\n\t\t\thasFocus = this.uiDialogButtonPane.find( \":tabbable\" );\n\t\t}\n\t\tif ( !hasFocus.length ) {\n\t\t\thasFocus = this.uiDialogTitlebarClose.filter( \":tabbable\" );\n\t\t}\n\t\tif ( !hasFocus.length ) {\n\t\t\thasFocus = this.uiDialog;\n\t\t}\n\t\thasFocus.eq( 0 ).trigger( \"focus\" );\n\t},\n\n\t_keepFocus: function( event ) {\n\t\tfunction checkFocus() {\n\t\t\tvar activeElement = $.ui.safeActiveElement( this.document[ 0 ] ),\n\t\t\t\tisActive = this.uiDialog[ 0 ] === activeElement ||\n\t\t\t\t\t$.contains( this.uiDialog[ 0 ], activeElement );\n\t\t\tif ( !isActive ) {\n\t\t\t\tthis._focusTabbable();\n\t\t\t}\n\t\t}\n\t\tevent.preventDefault();\n\t\tcheckFocus.call( this );\n\n\t\t// support: IE\n\t\t// IE <= 8 doesn't prevent moving focus even with event.preventDefault()\n\t\t// so we check again later\n\t\tthis._delay( checkFocus );\n\t},\n\n\t_createWrapper: function() {\n\t\tthis.uiDialog = $( \"<div>\" )\n\t\t\t.hide()\n\t\t\t.attr( {\n\n\t\t\t\t// Setting tabIndex makes the div focusable\n\t\t\t\ttabIndex: -1,\n\t\t\t\trole: \"dialog\"\n\t\t\t} )\n\t\t\t.appendTo( this._appendTo() );\n\n\t\tthis._addClass( this.uiDialog, \"ui-dialog\", \"ui-widget ui-widget-content ui-front\" );\n\t\tthis._on( this.uiDialog, {\n\t\t\tkeydown: function( event ) {\n\t\t\t\tif ( this.options.closeOnEscape && !event.isDefaultPrevented() && event.keyCode &&\n\t\t\t\t\t\tevent.keyCode === $.ui.keyCode.ESCAPE ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\tthis.close( event );\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Prevent tabbing out of dialogs\n\t\t\t\tif ( event.keyCode !== $.ui.keyCode.TAB || event.isDefaultPrevented() ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tvar tabbables = this.uiDialog.find( \":tabbable\" ),\n\t\t\t\t\tfirst = tabbables.filter( \":first\" ),\n\t\t\t\t\tlast = tabbables.filter( \":last\" );\n\n\t\t\t\tif ( ( event.target === last[ 0 ] || event.target === this.uiDialog[ 0 ] ) &&\n\t\t\t\t\t\t!event.shiftKey ) {\n\t\t\t\t\tthis._delay( function() {\n\t\t\t\t\t\tfirst.trigger( \"focus\" );\n\t\t\t\t\t} );\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t} else if ( ( event.target === first[ 0 ] ||\n\t\t\t\t\t\tevent.target === this.uiDialog[ 0 ] ) && event.shiftKey ) {\n\t\t\t\t\tthis._delay( function() {\n\t\t\t\t\t\tlast.trigger( \"focus\" );\n\t\t\t\t\t} );\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t},\n\t\t\tmousedown: function( event ) {\n\t\t\t\tif ( this._moveToTop( event ) ) {\n\t\t\t\t\tthis._focusTabbable();\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\n\t\t// We assume that any existing aria-describedby attribute means\n\t\t// that the dialog content is marked up properly\n\t\t// otherwise we brute force the content as the description\n\t\tif ( !this.element.find( \"[aria-describedby]\" ).length ) {\n\t\t\tthis.uiDialog.attr( {\n\t\t\t\t\"aria-describedby\": this.element.uniqueId().attr( \"id\" )\n\t\t\t} );\n\t\t}\n\t},\n\n\t_createTitlebar: function() {\n\t\tvar uiDialogTitle;\n\n\t\tthis.uiDialogTitlebar = $( \"<div>\" );\n\t\tthis._addClass( this.uiDialogTitlebar,\n\t\t\t\"ui-dialog-titlebar\", \"ui-widget-header ui-helper-clearfix\" );\n\t\tthis._on( this.uiDialogTitlebar, {\n\t\t\tmousedown: function( event ) {\n\n\t\t\t\t// Don't prevent click on close button (#8838)\n\t\t\t\t// Focusing a dialog that is partially scrolled out of view\n\t\t\t\t// causes the browser to scroll it into view, preventing the click event\n\t\t\t\tif ( !$( event.target ).closest( \".ui-dialog-titlebar-close\" ) ) {\n\n\t\t\t\t\t// Dialog isn't getting focus when dragging (#8063)\n\t\t\t\t\tthis.uiDialog.trigger( \"focus\" );\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\n\t\t// Support: IE\n\t\t// Use type=\"button\" to prevent enter keypresses in textboxes from closing the\n\t\t// dialog in IE (#9312)\n\t\tthis.uiDialogTitlebarClose = $( \"<button type='button'></button>\" )\n\t\t\t.button( {\n\t\t\t\tlabel: $( \"<a>\" ).text( this.options.closeText ).html(),\n\t\t\t\ticon: \"ui-icon-closethick\",\n\t\t\t\tshowLabel: false\n\t\t\t} )\n\t\t\t.appendTo( this.uiDialogTitlebar );\n\n\t\tthis._addClass( this.uiDialogTitlebarClose, \"ui-dialog-titlebar-close\" );\n\t\tthis._on( this.uiDialogTitlebarClose, {\n\t\t\tclick: function( event ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tthis.close( event );\n\t\t\t}\n\t\t} );\n\n\t\tuiDialogTitle = $( \"<span>\" ).uniqueId().prependTo( this.uiDialogTitlebar );\n\t\tthis._addClass( uiDialogTitle, \"ui-dialog-title\" );\n\t\tthis._title( uiDialogTitle );\n\n\t\tthis.uiDialogTitlebar.prependTo( this.uiDialog );\n\n\t\tthis.uiDialog.attr( {\n\t\t\t\"aria-labelledby\": uiDialogTitle.attr( \"id\" )\n\t\t} );\n\t},\n\n\t_title: function( title ) {\n\t\tif ( this.options.title ) {\n\t\t\ttitle.text( this.options.title );\n\t\t} else {\n\t\t\ttitle.html( \"&#160;\" );\n\t\t}\n\t},\n\n\t_createButtonPane: function() {\n\t\tthis.uiDialogButtonPane = $( \"<div>\" );\n\t\tthis._addClass( this.uiDialogButtonPane, \"ui-dialog-buttonpane\",\n\t\t\t\"ui-widget-content ui-helper-clearfix\" );\n\n\t\tthis.uiButtonSet = $( \"<div>\" )\n\t\t\t.appendTo( this.uiDialogButtonPane );\n\t\tthis._addClass( this.uiButtonSet, \"ui-dialog-buttonset\" );\n\n\t\tthis._createButtons();\n\t},\n\n\t_createButtons: function() {\n\t\tvar that = this,\n\t\t\tbuttons = this.options.buttons;\n\n\t\t// If we already have a button pane, remove it\n\t\tthis.uiDialogButtonPane.remove();\n\t\tthis.uiButtonSet.empty();\n\n\t\tif ( $.isEmptyObject( buttons ) || ( $.isArray( buttons ) && !buttons.length ) ) {\n\t\t\tthis._removeClass( this.uiDialog, \"ui-dialog-buttons\" );\n\t\t\treturn;\n\t\t}\n\n\t\t$.each( buttons, function( name, props ) {\n\t\t\tvar click, buttonOptions;\n\t\t\tprops = $.isFunction( props ) ?\n\t\t\t\t{ click: props, text: name } :\n\t\t\t\tprops;\n\n\t\t\t// Default to a non-submitting button\n\t\t\tprops = $.extend( { type: \"button\" }, props );\n\n\t\t\t// Change the context for the click callback to be the main element\n\t\t\tclick = props.click;\n\t\t\tbuttonOptions = {\n\t\t\t\ticon: props.icon,\n\t\t\t\ticonPosition: props.iconPosition,\n\t\t\t\tshowLabel: props.showLabel,\n\n\t\t\t\t// Deprecated options\n\t\t\t\ticons: props.icons,\n\t\t\t\ttext: props.text\n\t\t\t};\n\n\t\t\tdelete props.click;\n\t\t\tdelete props.icon;\n\t\t\tdelete props.iconPosition;\n\t\t\tdelete props.showLabel;\n\n\t\t\t// Deprecated options\n\t\t\tdelete props.icons;\n\t\t\tif ( typeof props.text === \"boolean\" ) {\n\t\t\t\tdelete props.text;\n\t\t\t}\n\n\t\t\t$( \"<button></button>\", props )\n\t\t\t\t.button( buttonOptions )\n\t\t\t\t.appendTo( that.uiButtonSet )\n\t\t\t\t.on( \"click\", function() {\n\t\t\t\t\tclick.apply( that.element[ 0 ], arguments );\n\t\t\t\t} );\n\t\t} );\n\t\tthis._addClass( this.uiDialog, \"ui-dialog-buttons\" );\n\t\tthis.uiDialogButtonPane.appendTo( this.uiDialog );\n\t},\n\n\t_makeDraggable: function() {\n\t\tvar that = this,\n\t\t\toptions = this.options;\n\n\t\tfunction filteredUi( ui ) {\n\t\t\treturn {\n\t\t\t\tposition: ui.position,\n\t\t\t\toffset: ui.offset\n\t\t\t};\n\t\t}\n\n\t\tthis.uiDialog.draggable( {\n\t\t\tcancel: \".ui-dialog-content, .ui-dialog-titlebar-close\",\n\t\t\thandle: \".ui-dialog-titlebar\",\n\t\t\tcontainment: \"document\",\n\t\t\tstart: function( event, ui ) {\n\t\t\t\tthat._addClass( $( this ), \"ui-dialog-dragging\" );\n\t\t\t\tthat._blockFrames();\n\t\t\t\tthat._trigger( \"dragStart\", event, filteredUi( ui ) );\n\t\t\t},\n\t\t\tdrag: function( event, ui ) {\n\t\t\t\tthat._trigger( \"drag\", event, filteredUi( ui ) );\n\t\t\t},\n\t\t\tstop: function( event, ui ) {\n\t\t\t\tvar left = ui.offset.left - that.document.scrollLeft(),\n\t\t\t\t\ttop = ui.offset.top - that.document.scrollTop();\n\n\t\t\t\toptions.position = {\n\t\t\t\t\tmy: \"left top\",\n\t\t\t\t\tat: \"left\" + ( left >= 0 ? \"+\" : \"\" ) + left + \" \" +\n\t\t\t\t\t\t\"top\" + ( top >= 0 ? \"+\" : \"\" ) + top,\n\t\t\t\t\tof: that.window\n\t\t\t\t};\n\t\t\t\tthat._removeClass( $( this ), \"ui-dialog-dragging\" );\n\t\t\t\tthat._unblockFrames();\n\t\t\t\tthat._trigger( \"dragStop\", event, filteredUi( ui ) );\n\t\t\t}\n\t\t} );\n\t},\n\n\t_makeResizable: function() {\n\t\tvar that = this,\n\t\t\toptions = this.options,\n\t\t\thandles = options.resizable,\n\n\t\t\t// .ui-resizable has position: relative defined in the stylesheet\n\t\t\t// but dialogs have to use absolute or fixed positioning\n\t\t\tposition = this.uiDialog.css( \"position\" ),\n\t\t\tresizeHandles = typeof handles === \"string\" ?\n\t\t\t\thandles :\n\t\t\t\t\"n,e,s,w,se,sw,ne,nw\";\n\n\t\tfunction filteredUi( ui ) {\n\t\t\treturn {\n\t\t\t\toriginalPosition: ui.originalPosition,\n\t\t\t\toriginalSize: ui.originalSize,\n\t\t\t\tposition: ui.position,\n\t\t\t\tsize: ui.size\n\t\t\t};\n\t\t}\n\n\t\tthis.uiDialog.resizable( {\n\t\t\tcancel: \".ui-dialog-content\",\n\t\t\tcontainment: \"document\",\n\t\t\talsoResize: this.element,\n\t\t\tmaxWidth: options.maxWidth,\n\t\t\tmaxHeight: options.maxHeight,\n\t\t\tminWidth: options.minWidth,\n\t\t\tminHeight: this._minHeight(),\n\t\t\thandles: resizeHandles,\n\t\t\tstart: function( event, ui ) {\n\t\t\t\tthat._addClass( $( this ), \"ui-dialog-resizing\" );\n\t\t\t\tthat._blockFrames();\n\t\t\t\tthat._trigger( \"resizeStart\", event, filteredUi( ui ) );\n\t\t\t},\n\t\t\tresize: function( event, ui ) {\n\t\t\t\tthat._trigger( \"resize\", event, filteredUi( ui ) );\n\t\t\t},\n\t\t\tstop: function( event, ui ) {\n\t\t\t\tvar offset = that.uiDialog.offset(),\n\t\t\t\t\tleft = offset.left - that.document.scrollLeft(),\n\t\t\t\t\ttop = offset.top - that.document.scrollTop();\n\n\t\t\t\toptions.height = that.uiDialog.height();\n\t\t\t\toptions.width = that.uiDialog.width();\n\t\t\t\toptions.position = {\n\t\t\t\t\tmy: \"left top\",\n\t\t\t\t\tat: \"left\" + ( left >= 0 ? \"+\" : \"\" ) + left + \" \" +\n\t\t\t\t\t\t\"top\" + ( top >= 0 ? \"+\" : \"\" ) + top,\n\t\t\t\t\tof: that.window\n\t\t\t\t};\n\t\t\t\tthat._removeClass( $( this ), \"ui-dialog-resizing\" );\n\t\t\t\tthat._unblockFrames();\n\t\t\t\tthat._trigger( \"resizeStop\", event, filteredUi( ui ) );\n\t\t\t}\n\t\t} )\n\t\t\t.css( \"position\", position );\n\t},\n\n\t_trackFocus: function() {\n\t\tthis._on( this.widget(), {\n\t\t\tfocusin: function( event ) {\n\t\t\t\tthis._makeFocusTarget();\n\t\t\t\tthis._focusedElement = $( event.target );\n\t\t\t}\n\t\t} );\n\t},\n\n\t_makeFocusTarget: function() {\n\t\tthis._untrackInstance();\n\t\tthis._trackingInstances().unshift( this );\n\t},\n\n\t_untrackInstance: function() {\n\t\tvar instances = this._trackingInstances(),\n\t\t\texists = $.inArray( this, instances );\n\t\tif ( exists !== -1 ) {\n\t\t\tinstances.splice( exists, 1 );\n\t\t}\n\t},\n\n\t_trackingInstances: function() {\n\t\tvar instances = this.document.data( \"ui-dialog-instances\" );\n\t\tif ( !instances ) {\n\t\t\tinstances = [];\n\t\t\tthis.document.data( \"ui-dialog-instances\", instances );\n\t\t}\n\t\treturn instances;\n\t},\n\n\t_minHeight: function() {\n\t\tvar options = this.options;\n\n\t\treturn options.height === \"auto\" ?\n\t\t\toptions.minHeight :\n\t\t\tMath.min( options.minHeight, options.height );\n\t},\n\n\t_position: function() {\n\n\t\t// Need to show the dialog to get the actual offset in the position plugin\n\t\tvar isVisible = this.uiDialog.is( \":visible\" );\n\t\tif ( !isVisible ) {\n\t\t\tthis.uiDialog.show();\n\t\t}\n\t\tthis.uiDialog.position( this.options.position );\n\t\tif ( !isVisible ) {\n\t\t\tthis.uiDialog.hide();\n\t\t}\n\t},\n\n\t_setOptions: function( options ) {\n\t\tvar that = this,\n\t\t\tresize = false,\n\t\t\tresizableOptions = {};\n\n\t\t$.each( options, function( key, value ) {\n\t\t\tthat._setOption( key, value );\n\n\t\t\tif ( key in that.sizeRelatedOptions ) {\n\t\t\t\tresize = true;\n\t\t\t}\n\t\t\tif ( key in that.resizableRelatedOptions ) {\n\t\t\t\tresizableOptions[ key ] = value;\n\t\t\t}\n\t\t} );\n\n\t\tif ( resize ) {\n\t\t\tthis._size();\n\t\t\tthis._position();\n\t\t}\n\t\tif ( this.uiDialog.is( \":data(ui-resizable)\" ) ) {\n\t\t\tthis.uiDialog.resizable( \"option\", resizableOptions );\n\t\t}\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tvar isDraggable, isResizable,\n\t\t\tuiDialog = this.uiDialog;\n\n\t\tif ( key === \"disabled\" ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._super( key, value );\n\n\t\tif ( key === \"appendTo\" ) {\n\t\t\tthis.uiDialog.appendTo( this._appendTo() );\n\t\t}\n\n\t\tif ( key === \"buttons\" ) {\n\t\t\tthis._createButtons();\n\t\t}\n\n\t\tif ( key === \"closeText\" ) {\n\t\t\tthis.uiDialogTitlebarClose.button( {\n\n\t\t\t\t// Ensure that we always pass a string\n\t\t\t\tlabel: $( \"<a>\" ).text( \"\" + this.options.closeText ).html()\n\t\t\t} );\n\t\t}\n\n\t\tif ( key === \"draggable\" ) {\n\t\t\tisDraggable = uiDialog.is( \":data(ui-draggable)\" );\n\t\t\tif ( isDraggable && !value ) {\n\t\t\t\tuiDialog.draggable( \"destroy\" );\n\t\t\t}\n\n\t\t\tif ( !isDraggable && value ) {\n\t\t\t\tthis._makeDraggable();\n\t\t\t}\n\t\t}\n\n\t\tif ( key === \"position\" ) {\n\t\t\tthis._position();\n\t\t}\n\n\t\tif ( key === \"resizable\" ) {\n\n\t\t\t// currently resizable, becoming non-resizable\n\t\t\tisResizable = uiDialog.is( \":data(ui-resizable)\" );\n\t\t\tif ( isResizable && !value ) {\n\t\t\t\tuiDialog.resizable( \"destroy\" );\n\t\t\t}\n\n\t\t\t// Currently resizable, changing handles\n\t\t\tif ( isResizable && typeof value === \"string\" ) {\n\t\t\t\tuiDialog.resizable( \"option\", \"handles\", value );\n\t\t\t}\n\n\t\t\t// Currently non-resizable, becoming resizable\n\t\t\tif ( !isResizable && value !== false ) {\n\t\t\t\tthis._makeResizable();\n\t\t\t}\n\t\t}\n\n\t\tif ( key === \"title\" ) {\n\t\t\tthis._title( this.uiDialogTitlebar.find( \".ui-dialog-title\" ) );\n\t\t}\n\t},\n\n\t_size: function() {\n\n\t\t// If the user has resized the dialog, the .ui-dialog and .ui-dialog-content\n\t\t// divs will both have width and height set, so we need to reset them\n\t\tvar nonContentHeight, minContentHeight, maxContentHeight,\n\t\t\toptions = this.options;\n\n\t\t// Reset content sizing\n\t\tthis.element.show().css( {\n\t\t\twidth: \"auto\",\n\t\t\tminHeight: 0,\n\t\t\tmaxHeight: \"none\",\n\t\t\theight: 0\n\t\t} );\n\n\t\tif ( options.minWidth > options.width ) {\n\t\t\toptions.width = options.minWidth;\n\t\t}\n\n\t\t// Reset wrapper sizing\n\t\t// determine the height of all the non-content elements\n\t\tnonContentHeight = this.uiDialog.css( {\n\t\t\theight: \"auto\",\n\t\t\twidth: options.width\n\t\t} )\n\t\t\t.outerHeight();\n\t\tminContentHeight = Math.max( 0, options.minHeight - nonContentHeight );\n\t\tmaxContentHeight = typeof options.maxHeight === \"number\" ?\n\t\t\tMath.max( 0, options.maxHeight - nonContentHeight ) :\n\t\t\t\"none\";\n\n\t\tif ( options.height === \"auto\" ) {\n\t\t\tthis.element.css( {\n\t\t\t\tminHeight: minContentHeight,\n\t\t\t\tmaxHeight: maxContentHeight,\n\t\t\t\theight: \"auto\"\n\t\t\t} );\n\t\t} else {\n\t\t\tthis.element.height( Math.max( 0, options.height - nonContentHeight ) );\n\t\t}\n\n\t\tif ( this.uiDialog.is( \":data(ui-resizable)\" ) ) {\n\t\t\tthis.uiDialog.resizable( \"option\", \"minHeight\", this._minHeight() );\n\t\t}\n\t},\n\n\t_blockFrames: function() {\n\t\tthis.iframeBlocks = this.document.find( \"iframe\" ).map( function() {\n\t\t\tvar iframe = $( this );\n\n\t\t\treturn $( \"<div>\" )\n\t\t\t\t.css( {\n\t\t\t\t\tposition: \"absolute\",\n\t\t\t\t\twidth: iframe.outerWidth(),\n\t\t\t\t\theight: iframe.outerHeight()\n\t\t\t\t} )\n\t\t\t\t.appendTo( iframe.parent() )\n\t\t\t\t.offset( iframe.offset() )[ 0 ];\n\t\t} );\n\t},\n\n\t_unblockFrames: function() {\n\t\tif ( this.iframeBlocks ) {\n\t\t\tthis.iframeBlocks.remove();\n\t\t\tdelete this.iframeBlocks;\n\t\t}\n\t},\n\n\t_allowInteraction: function( event ) {\n\t\tif ( $( event.target ).closest( \".ui-dialog\" ).length ) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// TODO: Remove hack when datepicker implements\n\t\t// the .ui-front logic (#8989)\n\t\treturn !!$( event.target ).closest( \".ui-datepicker\" ).length;\n\t},\n\n\t_createOverlay: function() {\n\t\tif ( !this.options.modal ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// We use a delay in case the overlay is created from an\n\t\t// event that we're going to be cancelling (#2804)\n\t\tvar isOpening = true;\n\t\tthis._delay( function() {\n\t\t\tisOpening = false;\n\t\t} );\n\n\t\tif ( !this.document.data( \"ui-dialog-overlays\" ) ) {\n\n\t\t\t// Prevent use of anchors and inputs\n\t\t\t// Using _on() for an event handler shared across many instances is\n\t\t\t// safe because the dialogs stack and must be closed in reverse order\n\t\t\tthis._on( this.document, {\n\t\t\t\tfocusin: function( event ) {\n\t\t\t\t\tif ( isOpening ) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( !this._allowInteraction( event ) ) {\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\tthis._trackingInstances()[ 0 ]._focusTabbable();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\tthis.overlay = $( \"<div>\" )\n\t\t\t.appendTo( this._appendTo() );\n\n\t\tthis._addClass( this.overlay, null, \"ui-widget-overlay ui-front\" );\n\t\tthis._on( this.overlay, {\n\t\t\tmousedown: \"_keepFocus\"\n\t\t} );\n\t\tthis.document.data( \"ui-dialog-overlays\",\n\t\t\t( this.document.data( \"ui-dialog-overlays\" ) || 0 ) + 1 );\n\t},\n\n\t_destroyOverlay: function() {\n\t\tif ( !this.options.modal ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( this.overlay ) {\n\t\t\tvar overlays = this.document.data( \"ui-dialog-overlays\" ) - 1;\n\n\t\t\tif ( !overlays ) {\n\t\t\t\tthis._off( this.document, \"focusin\" );\n\t\t\t\tthis.document.removeData( \"ui-dialog-overlays\" );\n\t\t\t} else {\n\t\t\t\tthis.document.data( \"ui-dialog-overlays\", overlays );\n\t\t\t}\n\n\t\t\tthis.overlay.remove();\n\t\t\tthis.overlay = null;\n\t\t}\n\t}\n} );\n\n// DEPRECATED\n// TODO: switch return back to widget declaration at top of file when this is removed\nif ( $.uiBackCompat !== false ) {\n\n\t// Backcompat for dialogClass option\n\t$.widget( \"ui.dialog\", $.ui.dialog, {\n\t\toptions: {\n\t\t\tdialogClass: \"\"\n\t\t},\n\t\t_createWrapper: function() {\n\t\t\tthis._super();\n\t\t\tthis.uiDialog.addClass( this.options.dialogClass );\n\t\t},\n\t\t_setOption: function( key, value ) {\n\t\t\tif ( key === \"dialogClass\" ) {\n\t\t\t\tthis.uiDialog\n\t\t\t\t\t.removeClass( this.options.dialogClass )\n\t\t\t\t\t.addClass( value );\n\t\t\t}\n\t\t\tthis._superApply( arguments );\n\t\t}\n\t} );\n}\n\nvar widgetsDialog = $.ui.dialog;\n\n\n/*!\n * jQuery UI Progressbar 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Progressbar\n//>>group: Widgets\n// jscs:disable maximumLineLength\n//>>description: Displays a status indicator for loading state, standard percentage, and other progress indicators.\n// jscs:enable maximumLineLength\n//>>docs: http://api.jqueryui.com/progressbar/\n//>>demos: http://jqueryui.com/progressbar/\n//>>css.structure: ../../themes/base/core.css\n//>>css.structure: ../../themes/base/progressbar.css\n//>>css.theme: ../../themes/base/theme.css\n\n\n\nvar widgetsProgressbar = $.widget( \"ui.progressbar\", {\n\tversion: \"1.12.1\",\n\toptions: {\n\t\tclasses: {\n\t\t\t\"ui-progressbar\": \"ui-corner-all\",\n\t\t\t\"ui-progressbar-value\": \"ui-corner-left\",\n\t\t\t\"ui-progressbar-complete\": \"ui-corner-right\"\n\t\t},\n\t\tmax: 100,\n\t\tvalue: 0,\n\n\t\tchange: null,\n\t\tcomplete: null\n\t},\n\n\tmin: 0,\n\n\t_create: function() {\n\n\t\t// Constrain initial value\n\t\tthis.oldValue = this.options.value = this._constrainedValue();\n\n\t\tthis.element.attr( {\n\n\t\t\t// Only set static values; aria-valuenow and aria-valuemax are\n\t\t\t// set inside _refreshValue()\n\t\t\trole: \"progressbar\",\n\t\t\t\"aria-valuemin\": this.min\n\t\t} );\n\t\tthis._addClass( \"ui-progressbar\", \"ui-widget ui-widget-content\" );\n\n\t\tthis.valueDiv = $( \"<div>\" ).appendTo( this.element );\n\t\tthis._addClass( this.valueDiv, \"ui-progressbar-value\", \"ui-widget-header\" );\n\t\tthis._refreshValue();\n\t},\n\n\t_destroy: function() {\n\t\tthis.element.removeAttr( \"role aria-valuemin aria-valuemax aria-valuenow\" );\n\n\t\tthis.valueDiv.remove();\n\t},\n\n\tvalue: function( newValue ) {\n\t\tif ( newValue === undefined ) {\n\t\t\treturn this.options.value;\n\t\t}\n\n\t\tthis.options.value = this._constrainedValue( newValue );\n\t\tthis._refreshValue();\n\t},\n\n\t_constrainedValue: function( newValue ) {\n\t\tif ( newValue === undefined ) {\n\t\t\tnewValue = this.options.value;\n\t\t}\n\n\t\tthis.indeterminate = newValue === false;\n\n\t\t// Sanitize value\n\t\tif ( typeof newValue !== \"number\" ) {\n\t\t\tnewValue = 0;\n\t\t}\n\n\t\treturn this.indeterminate ? false :\n\t\t\tMath.min( this.options.max, Math.max( this.min, newValue ) );\n\t},\n\n\t_setOptions: function( options ) {\n\n\t\t// Ensure \"value\" option is set after other values (like max)\n\t\tvar value = options.value;\n\t\tdelete options.value;\n\n\t\tthis._super( options );\n\n\t\tthis.options.value = this._constrainedValue( value );\n\t\tthis._refreshValue();\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tif ( key === \"max\" ) {\n\n\t\t\t// Don't allow a max less than min\n\t\t\tvalue = Math.max( this.min, value );\n\t\t}\n\t\tthis._super( key, value );\n\t},\n\n\t_setOptionDisabled: function( value ) {\n\t\tthis._super( value );\n\n\t\tthis.element.attr( \"aria-disabled\", value );\n\t\tthis._toggleClass( null, \"ui-state-disabled\", !!value );\n\t},\n\n\t_percentage: function() {\n\t\treturn this.indeterminate ?\n\t\t\t100 :\n\t\t\t100 * ( this.options.value - this.min ) / ( this.options.max - this.min );\n\t},\n\n\t_refreshValue: function() {\n\t\tvar value = this.options.value,\n\t\t\tpercentage = this._percentage();\n\n\t\tthis.valueDiv\n\t\t\t.toggle( this.indeterminate || value > this.min )\n\t\t\t.width( percentage.toFixed( 0 ) + \"%\" );\n\n\t\tthis\n\t\t\t._toggleClass( this.valueDiv, \"ui-progressbar-complete\", null,\n\t\t\t\tvalue === this.options.max )\n\t\t\t._toggleClass( \"ui-progressbar-indeterminate\", null, this.indeterminate );\n\n\t\tif ( this.indeterminate ) {\n\t\t\tthis.element.removeAttr( \"aria-valuenow\" );\n\t\t\tif ( !this.overlayDiv ) {\n\t\t\t\tthis.overlayDiv = $( \"<div>\" ).appendTo( this.valueDiv );\n\t\t\t\tthis._addClass( this.overlayDiv, \"ui-progressbar-overlay\" );\n\t\t\t}\n\t\t} else {\n\t\t\tthis.element.attr( {\n\t\t\t\t\"aria-valuemax\": this.options.max,\n\t\t\t\t\"aria-valuenow\": value\n\t\t\t} );\n\t\t\tif ( this.overlayDiv ) {\n\t\t\t\tthis.overlayDiv.remove();\n\t\t\t\tthis.overlayDiv = null;\n\t\t\t}\n\t\t}\n\n\t\tif ( this.oldValue !== value ) {\n\t\t\tthis.oldValue = value;\n\t\t\tthis._trigger( \"change\" );\n\t\t}\n\t\tif ( value === this.options.max ) {\n\t\t\tthis._trigger( \"complete\" );\n\t\t}\n\t}\n} );\n\n\n/*!\n * jQuery UI Selectmenu 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Selectmenu\n//>>group: Widgets\n// jscs:disable maximumLineLength\n//>>description: Duplicates and extends the functionality of a native HTML select element, allowing it to be customizable in behavior and appearance far beyond the limitations of a native select.\n// jscs:enable maximumLineLength\n//>>docs: http://api.jqueryui.com/selectmenu/\n//>>demos: http://jqueryui.com/selectmenu/\n//>>css.structure: ../../themes/base/core.css\n//>>css.structure: ../../themes/base/selectmenu.css, ../../themes/base/button.css\n//>>css.theme: ../../themes/base/theme.css\n\n\n\nvar widgetsSelectmenu = $.widget( \"ui.selectmenu\", [ $.ui.formResetMixin, {\n\tversion: \"1.12.1\",\n\tdefaultElement: \"<select>\",\n\toptions: {\n\t\tappendTo: null,\n\t\tclasses: {\n\t\t\t\"ui-selectmenu-button-open\": \"ui-corner-top\",\n\t\t\t\"ui-selectmenu-button-closed\": \"ui-corner-all\"\n\t\t},\n\t\tdisabled: null,\n\t\ticons: {\n\t\t\tbutton: \"ui-icon-triangle-1-s\"\n\t\t},\n\t\tposition: {\n\t\t\tmy: \"left top\",\n\t\t\tat: \"left bottom\",\n\t\t\tcollision: \"none\"\n\t\t},\n\t\twidth: false,\n\n\t\t// Callbacks\n\t\tchange: null,\n\t\tclose: null,\n\t\tfocus: null,\n\t\topen: null,\n\t\tselect: null\n\t},\n\n\t_create: function() {\n\t\tvar selectmenuId = this.element.uniqueId().attr( \"id\" );\n\t\tthis.ids = {\n\t\t\telement: selectmenuId,\n\t\t\tbutton: selectmenuId + \"-button\",\n\t\t\tmenu: selectmenuId + \"-menu\"\n\t\t};\n\n\t\tthis._drawButton();\n\t\tthis._drawMenu();\n\t\tthis._bindFormResetHandler();\n\n\t\tthis._rendered = false;\n\t\tthis.menuItems = $();\n\t},\n\n\t_drawButton: function() {\n\t\tvar icon,\n\t\t\tthat = this,\n\t\t\titem = this._parseOption(\n\t\t\t\tthis.element.find( \"option:selected\" ),\n\t\t\t\tthis.element[ 0 ].selectedIndex\n\t\t\t);\n\n\t\t// Associate existing label with the new button\n\t\tthis.labels = this.element.labels().attr( \"for\", this.ids.button );\n\t\tthis._on( this.labels, {\n\t\t\tclick: function( event ) {\n\t\t\t\tthis.button.focus();\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\t\t} );\n\n\t\t// Hide original select element\n\t\tthis.element.hide();\n\n\t\t// Create button\n\t\tthis.button = $( \"<span>\", {\n\t\t\ttabindex: this.options.disabled ? -1 : 0,\n\t\t\tid: this.ids.button,\n\t\t\trole: \"combobox\",\n\t\t\t\"aria-expanded\": \"false\",\n\t\t\t\"aria-autocomplete\": \"list\",\n\t\t\t\"aria-owns\": this.ids.menu,\n\t\t\t\"aria-haspopup\": \"true\",\n\t\t\ttitle: this.element.attr( \"title\" )\n\t\t} )\n\t\t\t.insertAfter( this.element );\n\n\t\tthis._addClass( this.button, \"ui-selectmenu-button ui-selectmenu-button-closed\",\n\t\t\t\"ui-button ui-widget\" );\n\n\t\ticon = $( \"<span>\" ).appendTo( this.button );\n\t\tthis._addClass( icon, \"ui-selectmenu-icon\", \"ui-icon \" + this.options.icons.button );\n\t\tthis.buttonItem = this._renderButtonItem( item )\n\t\t\t.appendTo( this.button );\n\n\t\tif ( this.options.width !== false ) {\n\t\t\tthis._resizeButton();\n\t\t}\n\n\t\tthis._on( this.button, this._buttonEvents );\n\t\tthis.button.one( \"focusin\", function() {\n\n\t\t\t// Delay rendering the menu items until the button receives focus.\n\t\t\t// The menu may have already been rendered via a programmatic open.\n\t\t\tif ( !that._rendered ) {\n\t\t\t\tthat._refreshMenu();\n\t\t\t}\n\t\t} );\n\t},\n\n\t_drawMenu: function() {\n\t\tvar that = this;\n\n\t\t// Create menu\n\t\tthis.menu = $( \"<ul>\", {\n\t\t\t\"aria-hidden\": \"true\",\n\t\t\t\"aria-labelledby\": this.ids.button,\n\t\t\tid: this.ids.menu\n\t\t} );\n\n\t\t// Wrap menu\n\t\tthis.menuWrap = $( \"<div>\" ).append( this.menu );\n\t\tthis._addClass( this.menuWrap, \"ui-selectmenu-menu\", \"ui-front\" );\n\t\tthis.menuWrap.appendTo( this._appendTo() );\n\n\t\t// Initialize menu widget\n\t\tthis.menuInstance = this.menu\n\t\t\t.menu( {\n\t\t\t\tclasses: {\n\t\t\t\t\t\"ui-menu\": \"ui-corner-bottom\"\n\t\t\t\t},\n\t\t\t\trole: \"listbox\",\n\t\t\t\tselect: function( event, ui ) {\n\t\t\t\t\tevent.preventDefault();\n\n\t\t\t\t\t// Support: IE8\n\t\t\t\t\t// If the item was selected via a click, the text selection\n\t\t\t\t\t// will be destroyed in IE\n\t\t\t\t\tthat._setSelection();\n\n\t\t\t\t\tthat._select( ui.item.data( \"ui-selectmenu-item\" ), event );\n\t\t\t\t},\n\t\t\t\tfocus: function( event, ui ) {\n\t\t\t\t\tvar item = ui.item.data( \"ui-selectmenu-item\" );\n\n\t\t\t\t\t// Prevent inital focus from firing and check if its a newly focused item\n\t\t\t\t\tif ( that.focusIndex != null && item.index !== that.focusIndex ) {\n\t\t\t\t\t\tthat._trigger( \"focus\", event, { item: item } );\n\t\t\t\t\t\tif ( !that.isOpen ) {\n\t\t\t\t\t\t\tthat._select( item, event );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tthat.focusIndex = item.index;\n\n\t\t\t\t\tthat.button.attr( \"aria-activedescendant\",\n\t\t\t\t\t\tthat.menuItems.eq( item.index ).attr( \"id\" ) );\n\t\t\t\t}\n\t\t\t} )\n\t\t\t.menu( \"instance\" );\n\n\t\t// Don't close the menu on mouseleave\n\t\tthis.menuInstance._off( this.menu, \"mouseleave\" );\n\n\t\t// Cancel the menu's collapseAll on document click\n\t\tthis.menuInstance._closeOnDocumentClick = function() {\n\t\t\treturn false;\n\t\t};\n\n\t\t// Selects often contain empty items, but never contain dividers\n\t\tthis.menuInstance._isDivider = function() {\n\t\t\treturn false;\n\t\t};\n\t},\n\n\trefresh: function() {\n\t\tthis._refreshMenu();\n\t\tthis.buttonItem.replaceWith(\n\t\t\tthis.buttonItem = this._renderButtonItem(\n\n\t\t\t\t// Fall back to an empty object in case there are no options\n\t\t\t\tthis._getSelectedItem().data( \"ui-selectmenu-item\" ) || {}\n\t\t\t)\n\t\t);\n\t\tif ( this.options.width === null ) {\n\t\t\tthis._resizeButton();\n\t\t}\n\t},\n\n\t_refreshMenu: function() {\n\t\tvar item,\n\t\t\toptions = this.element.find( \"option\" );\n\n\t\tthis.menu.empty();\n\n\t\tthis._parseOptions( options );\n\t\tthis._renderMenu( this.menu, this.items );\n\n\t\tthis.menuInstance.refresh();\n\t\tthis.menuItems = this.menu.find( \"li\" )\n\t\t\t.not( \".ui-selectmenu-optgroup\" )\n\t\t\t\t.find( \".ui-menu-item-wrapper\" );\n\n\t\tthis._rendered = true;\n\n\t\tif ( !options.length ) {\n\t\t\treturn;\n\t\t}\n\n\t\titem = this._getSelectedItem();\n\n\t\t// Update the menu to have the correct item focused\n\t\tthis.menuInstance.focus( null, item );\n\t\tthis._setAria( item.data( \"ui-selectmenu-item\" ) );\n\n\t\t// Set disabled state\n\t\tthis._setOption( \"disabled\", this.element.prop( \"disabled\" ) );\n\t},\n\n\topen: function( event ) {\n\t\tif ( this.options.disabled ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If this is the first time the menu is being opened, render the items\n\t\tif ( !this._rendered ) {\n\t\t\tthis._refreshMenu();\n\t\t} else {\n\n\t\t\t// Menu clears focus on close, reset focus to selected item\n\t\t\tthis._removeClass( this.menu.find( \".ui-state-active\" ), null, \"ui-state-active\" );\n\t\t\tthis.menuInstance.focus( null, this._getSelectedItem() );\n\t\t}\n\n\t\t// If there are no options, don't open the menu\n\t\tif ( !this.menuItems.length ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.isOpen = true;\n\t\tthis._toggleAttr();\n\t\tthis._resizeMenu();\n\t\tthis._position();\n\n\t\tthis._on( this.document, this._documentClick );\n\n\t\tthis._trigger( \"open\", event );\n\t},\n\n\t_position: function() {\n\t\tthis.menuWrap.position( $.extend( { of: this.button }, this.options.position ) );\n\t},\n\n\tclose: function( event ) {\n\t\tif ( !this.isOpen ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.isOpen = false;\n\t\tthis._toggleAttr();\n\n\t\tthis.range = null;\n\t\tthis._off( this.document );\n\n\t\tthis._trigger( \"close\", event );\n\t},\n\n\twidget: function() {\n\t\treturn this.button;\n\t},\n\n\tmenuWidget: function() {\n\t\treturn this.menu;\n\t},\n\n\t_renderButtonItem: function( item ) {\n\t\tvar buttonItem = $( \"<span>\" );\n\n\t\tthis._setText( buttonItem, item.label );\n\t\tthis._addClass( buttonItem, \"ui-selectmenu-text\" );\n\n\t\treturn buttonItem;\n\t},\n\n\t_renderMenu: function( ul, items ) {\n\t\tvar that = this,\n\t\t\tcurrentOptgroup = \"\";\n\n\t\t$.each( items, function( index, item ) {\n\t\t\tvar li;\n\n\t\t\tif ( item.optgroup !== currentOptgroup ) {\n\t\t\t\tli = $( \"<li>\", {\n\t\t\t\t\ttext: item.optgroup\n\t\t\t\t} );\n\t\t\t\tthat._addClass( li, \"ui-selectmenu-optgroup\", \"ui-menu-divider\" +\n\t\t\t\t\t( item.element.parent( \"optgroup\" ).prop( \"disabled\" ) ?\n\t\t\t\t\t\t\" ui-state-disabled\" :\n\t\t\t\t\t\t\"\" ) );\n\n\t\t\t\tli.appendTo( ul );\n\n\t\t\t\tcurrentOptgroup = item.optgroup;\n\t\t\t}\n\n\t\t\tthat._renderItemData( ul, item );\n\t\t} );\n\t},\n\n\t_renderItemData: function( ul, item ) {\n\t\treturn this._renderItem( ul, item ).data( \"ui-selectmenu-item\", item );\n\t},\n\n\t_renderItem: function( ul, item ) {\n\t\tvar li = $( \"<li>\" ),\n\t\t\twrapper = $( \"<div>\", {\n\t\t\t\ttitle: item.element.attr( \"title\" )\n\t\t\t} );\n\n\t\tif ( item.disabled ) {\n\t\t\tthis._addClass( li, null, \"ui-state-disabled\" );\n\t\t}\n\t\tthis._setText( wrapper, item.label );\n\n\t\treturn li.append( wrapper ).appendTo( ul );\n\t},\n\n\t_setText: function( element, value ) {\n\t\tif ( value ) {\n\t\t\telement.text( value );\n\t\t} else {\n\t\t\telement.html( \"&#160;\" );\n\t\t}\n\t},\n\n\t_move: function( direction, event ) {\n\t\tvar item, next,\n\t\t\tfilter = \".ui-menu-item\";\n\n\t\tif ( this.isOpen ) {\n\t\t\titem = this.menuItems.eq( this.focusIndex ).parent( \"li\" );\n\t\t} else {\n\t\t\titem = this.menuItems.eq( this.element[ 0 ].selectedIndex ).parent( \"li\" );\n\t\t\tfilter += \":not(.ui-state-disabled)\";\n\t\t}\n\n\t\tif ( direction === \"first\" || direction === \"last\" ) {\n\t\t\tnext = item[ direction === \"first\" ? \"prevAll\" : \"nextAll\" ]( filter ).eq( -1 );\n\t\t} else {\n\t\t\tnext = item[ direction + \"All\" ]( filter ).eq( 0 );\n\t\t}\n\n\t\tif ( next.length ) {\n\t\t\tthis.menuInstance.focus( event, next );\n\t\t}\n\t},\n\n\t_getSelectedItem: function() {\n\t\treturn this.menuItems.eq( this.element[ 0 ].selectedIndex ).parent( \"li\" );\n\t},\n\n\t_toggle: function( event ) {\n\t\tthis[ this.isOpen ? \"close\" : \"open\" ]( event );\n\t},\n\n\t_setSelection: function() {\n\t\tvar selection;\n\n\t\tif ( !this.range ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( window.getSelection ) {\n\t\t\tselection = window.getSelection();\n\t\t\tselection.removeAllRanges();\n\t\t\tselection.addRange( this.range );\n\n\t\t// Support: IE8\n\t\t} else {\n\t\t\tthis.range.select();\n\t\t}\n\n\t\t// Support: IE\n\t\t// Setting the text selection kills the button focus in IE, but\n\t\t// restoring the focus doesn't kill the selection.\n\t\tthis.button.focus();\n\t},\n\n\t_documentClick: {\n\t\tmousedown: function( event ) {\n\t\t\tif ( !this.isOpen ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( !$( event.target ).closest( \".ui-selectmenu-menu, #\" +\n\t\t\t\t\t$.ui.escapeSelector( this.ids.button ) ).length ) {\n\t\t\t\tthis.close( event );\n\t\t\t}\n\t\t}\n\t},\n\n\t_buttonEvents: {\n\n\t\t// Prevent text selection from being reset when interacting with the selectmenu (#10144)\n\t\tmousedown: function() {\n\t\t\tvar selection;\n\n\t\t\tif ( window.getSelection ) {\n\t\t\t\tselection = window.getSelection();\n\t\t\t\tif ( selection.rangeCount ) {\n\t\t\t\t\tthis.range = selection.getRangeAt( 0 );\n\t\t\t\t}\n\n\t\t\t// Support: IE8\n\t\t\t} else {\n\t\t\t\tthis.range = document.selection.createRange();\n\t\t\t}\n\t\t},\n\n\t\tclick: function( event ) {\n\t\t\tthis._setSelection();\n\t\t\tthis._toggle( event );\n\t\t},\n\n\t\tkeydown: function( event ) {\n\t\t\tvar preventDefault = true;\n\t\t\tswitch ( event.keyCode ) {\n\t\t\tcase $.ui.keyCode.TAB:\n\t\t\tcase $.ui.keyCode.ESCAPE:\n\t\t\t\tthis.close( event );\n\t\t\t\tpreventDefault = false;\n\t\t\t\tbreak;\n\t\t\tcase $.ui.keyCode.ENTER:\n\t\t\t\tif ( this.isOpen ) {\n\t\t\t\t\tthis._selectFocusedItem( event );\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase $.ui.keyCode.UP:\n\t\t\t\tif ( event.altKey ) {\n\t\t\t\t\tthis._toggle( event );\n\t\t\t\t} else {\n\t\t\t\t\tthis._move( \"prev\", event );\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase $.ui.keyCode.DOWN:\n\t\t\t\tif ( event.altKey ) {\n\t\t\t\t\tthis._toggle( event );\n\t\t\t\t} else {\n\t\t\t\t\tthis._move( \"next\", event );\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase $.ui.keyCode.SPACE:\n\t\t\t\tif ( this.isOpen ) {\n\t\t\t\t\tthis._selectFocusedItem( event );\n\t\t\t\t} else {\n\t\t\t\t\tthis._toggle( event );\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase $.ui.keyCode.LEFT:\n\t\t\t\tthis._move( \"prev\", event );\n\t\t\t\tbreak;\n\t\t\tcase $.ui.keyCode.RIGHT:\n\t\t\t\tthis._move( \"next\", event );\n\t\t\t\tbreak;\n\t\t\tcase $.ui.keyCode.HOME:\n\t\t\tcase $.ui.keyCode.PAGE_UP:\n\t\t\t\tthis._move( \"first\", event );\n\t\t\t\tbreak;\n\t\t\tcase $.ui.keyCode.END:\n\t\t\tcase $.ui.keyCode.PAGE_DOWN:\n\t\t\t\tthis._move( \"last\", event );\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tthis.menu.trigger( event );\n\t\t\t\tpreventDefault = false;\n\t\t\t}\n\n\t\t\tif ( preventDefault ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\t\t}\n\t},\n\n\t_selectFocusedItem: function( event ) {\n\t\tvar item = this.menuItems.eq( this.focusIndex ).parent( \"li\" );\n\t\tif ( !item.hasClass( \"ui-state-disabled\" ) ) {\n\t\t\tthis._select( item.data( \"ui-selectmenu-item\" ), event );\n\t\t}\n\t},\n\n\t_select: function( item, event ) {\n\t\tvar oldIndex = this.element[ 0 ].selectedIndex;\n\n\t\t// Change native select element\n\t\tthis.element[ 0 ].selectedIndex = item.index;\n\t\tthis.buttonItem.replaceWith( this.buttonItem = this._renderButtonItem( item ) );\n\t\tthis._setAria( item );\n\t\tthis._trigger( \"select\", event, { item: item } );\n\n\t\tif ( item.index !== oldIndex ) {\n\t\t\tthis._trigger( \"change\", event, { item: item } );\n\t\t}\n\n\t\tthis.close( event );\n\t},\n\n\t_setAria: function( item ) {\n\t\tvar id = this.menuItems.eq( item.index ).attr( \"id\" );\n\n\t\tthis.button.attr( {\n\t\t\t\"aria-labelledby\": id,\n\t\t\t\"aria-activedescendant\": id\n\t\t} );\n\t\tthis.menu.attr( \"aria-activedescendant\", id );\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tif ( key === \"icons\" ) {\n\t\t\tvar icon = this.button.find( \"span.ui-icon\" );\n\t\t\tthis._removeClass( icon, null, this.options.icons.button )\n\t\t\t\t._addClass( icon, null, value.button );\n\t\t}\n\n\t\tthis._super( key, value );\n\n\t\tif ( key === \"appendTo\" ) {\n\t\t\tthis.menuWrap.appendTo( this._appendTo() );\n\t\t}\n\n\t\tif ( key === \"width\" ) {\n\t\t\tthis._resizeButton();\n\t\t}\n\t},\n\n\t_setOptionDisabled: function( value ) {\n\t\tthis._super( value );\n\n\t\tthis.menuInstance.option( \"disabled\", value );\n\t\tthis.button.attr( \"aria-disabled\", value );\n\t\tthis._toggleClass( this.button, null, \"ui-state-disabled\", value );\n\n\t\tthis.element.prop( \"disabled\", value );\n\t\tif ( value ) {\n\t\t\tthis.button.attr( \"tabindex\", -1 );\n\t\t\tthis.close();\n\t\t} else {\n\t\t\tthis.button.attr( \"tabindex\", 0 );\n\t\t}\n\t},\n\n\t_appendTo: function() {\n\t\tvar element = this.options.appendTo;\n\n\t\tif ( element ) {\n\t\t\telement = element.jquery || element.nodeType ?\n\t\t\t\t$( element ) :\n\t\t\t\tthis.document.find( element ).eq( 0 );\n\t\t}\n\n\t\tif ( !element || !element[ 0 ] ) {\n\t\t\telement = this.element.closest( \".ui-front, dialog\" );\n\t\t}\n\n\t\tif ( !element.length ) {\n\t\t\telement = this.document[ 0 ].body;\n\t\t}\n\n\t\treturn element;\n\t},\n\n\t_toggleAttr: function() {\n\t\tthis.button.attr( \"aria-expanded\", this.isOpen );\n\n\t\t// We can't use two _toggleClass() calls here, because we need to make sure\n\t\t// we always remove classes first and add them second, otherwise if both classes have the\n\t\t// same theme class, it will be removed after we add it.\n\t\tthis._removeClass( this.button, \"ui-selectmenu-button-\" +\n\t\t\t( this.isOpen ? \"closed\" : \"open\" ) )\n\t\t\t._addClass( this.button, \"ui-selectmenu-button-\" +\n\t\t\t\t( this.isOpen ? \"open\" : \"closed\" ) )\n\t\t\t._toggleClass( this.menuWrap, \"ui-selectmenu-open\", null, this.isOpen );\n\n\t\tthis.menu.attr( \"aria-hidden\", !this.isOpen );\n\t},\n\n\t_resizeButton: function() {\n\t\tvar width = this.options.width;\n\n\t\t// For `width: false`, just remove inline style and stop\n\t\tif ( width === false ) {\n\t\t\tthis.button.css( \"width\", \"\" );\n\t\t\treturn;\n\t\t}\n\n\t\t// For `width: null`, match the width of the original element\n\t\tif ( width === null ) {\n\t\t\twidth = this.element.show().outerWidth();\n\t\t\tthis.element.hide();\n\t\t}\n\n\t\tthis.button.outerWidth( width );\n\t},\n\n\t_resizeMenu: function() {\n\t\tthis.menu.outerWidth( Math.max(\n\t\t\tthis.button.outerWidth(),\n\n\t\t\t// Support: IE10\n\t\t\t// IE10 wraps long text (possibly a rounding bug)\n\t\t\t// so we add 1px to avoid the wrapping\n\t\t\tthis.menu.width( \"\" ).outerWidth() + 1\n\t\t) );\n\t},\n\n\t_getCreateOptions: function() {\n\t\tvar options = this._super();\n\n\t\toptions.disabled = this.element.prop( \"disabled\" );\n\n\t\treturn options;\n\t},\n\n\t_parseOptions: function( options ) {\n\t\tvar that = this,\n\t\t\tdata = [];\n\t\toptions.each( function( index, item ) {\n\t\t\tdata.push( that._parseOption( $( item ), index ) );\n\t\t} );\n\t\tthis.items = data;\n\t},\n\n\t_parseOption: function( option, index ) {\n\t\tvar optgroup = option.parent( \"optgroup\" );\n\n\t\treturn {\n\t\t\telement: option,\n\t\t\tindex: index,\n\t\t\tvalue: option.val(),\n\t\t\tlabel: option.text(),\n\t\t\toptgroup: optgroup.attr( \"label\" ) || \"\",\n\t\t\tdisabled: optgroup.prop( \"disabled\" ) || option.prop( \"disabled\" )\n\t\t};\n\t},\n\n\t_destroy: function() {\n\t\tthis._unbindFormResetHandler();\n\t\tthis.menuWrap.remove();\n\t\tthis.button.remove();\n\t\tthis.element.show();\n\t\tthis.element.removeUniqueId();\n\t\tthis.labels.attr( \"for\", this.ids.element );\n\t}\n} ] );\n\n\n/*!\n * jQuery UI Slider 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Slider\n//>>group: Widgets\n//>>description: Displays a flexible slider with ranges and accessibility via keyboard.\n//>>docs: http://api.jqueryui.com/slider/\n//>>demos: http://jqueryui.com/slider/\n//>>css.structure: ../../themes/base/core.css\n//>>css.structure: ../../themes/base/slider.css\n//>>css.theme: ../../themes/base/theme.css\n\n\n\nvar widgetsSlider = $.widget( \"ui.slider\", $.ui.mouse, {\n\tversion: \"1.12.1\",\n\twidgetEventPrefix: \"slide\",\n\n\toptions: {\n\t\tanimate: false,\n\t\tclasses: {\n\t\t\t\"ui-slider\": \"ui-corner-all\",\n\t\t\t\"ui-slider-handle\": \"ui-corner-all\",\n\n\t\t\t// Note: ui-widget-header isn't the most fittingly semantic framework class for this\n\t\t\t// element, but worked best visually with a variety of themes\n\t\t\t\"ui-slider-range\": \"ui-corner-all ui-widget-header\"\n\t\t},\n\t\tdistance: 0,\n\t\tmax: 100,\n\t\tmin: 0,\n\t\torientation: \"horizontal\",\n\t\trange: false,\n\t\tstep: 1,\n\t\tvalue: 0,\n\t\tvalues: null,\n\n\t\t// Callbacks\n\t\tchange: null,\n\t\tslide: null,\n\t\tstart: null,\n\t\tstop: null\n\t},\n\n\t// Number of pages in a slider\n\t// (how many times can you page up/down to go through the whole range)\n\tnumPages: 5,\n\n\t_create: function() {\n\t\tthis._keySliding = false;\n\t\tthis._mouseSliding = false;\n\t\tthis._animateOff = true;\n\t\tthis._handleIndex = null;\n\t\tthis._detectOrientation();\n\t\tthis._mouseInit();\n\t\tthis._calculateNewMax();\n\n\t\tthis._addClass( \"ui-slider ui-slider-\" + this.orientation,\n\t\t\t\"ui-widget ui-widget-content\" );\n\n\t\tthis._refresh();\n\n\t\tthis._animateOff = false;\n\t},\n\n\t_refresh: function() {\n\t\tthis._createRange();\n\t\tthis._createHandles();\n\t\tthis._setupEvents();\n\t\tthis._refreshValue();\n\t},\n\n\t_createHandles: function() {\n\t\tvar i, handleCount,\n\t\t\toptions = this.options,\n\t\t\texistingHandles = this.element.find( \".ui-slider-handle\" ),\n\t\t\thandle = \"<span tabindex='0'></span>\",\n\t\t\thandles = [];\n\n\t\thandleCount = ( options.values && options.values.length ) || 1;\n\n\t\tif ( existingHandles.length > handleCount ) {\n\t\t\texistingHandles.slice( handleCount ).remove();\n\t\t\texistingHandles = existingHandles.slice( 0, handleCount );\n\t\t}\n\n\t\tfor ( i = existingHandles.length; i < handleCount; i++ ) {\n\t\t\thandles.push( handle );\n\t\t}\n\n\t\tthis.handles = existingHandles.add( $( handles.join( \"\" ) ).appendTo( this.element ) );\n\n\t\tthis._addClass( this.handles, \"ui-slider-handle\", \"ui-state-default\" );\n\n\t\tthis.handle = this.handles.eq( 0 );\n\n\t\tthis.handles.each( function( i ) {\n\t\t\t$( this )\n\t\t\t\t.data( \"ui-slider-handle-index\", i )\n\t\t\t\t.attr( \"tabIndex\", 0 );\n\t\t} );\n\t},\n\n\t_createRange: function() {\n\t\tvar options = this.options;\n\n\t\tif ( options.range ) {\n\t\t\tif ( options.range === true ) {\n\t\t\t\tif ( !options.values ) {\n\t\t\t\t\toptions.values = [ this._valueMin(), this._valueMin() ];\n\t\t\t\t} else if ( options.values.length && options.values.length !== 2 ) {\n\t\t\t\t\toptions.values = [ options.values[ 0 ], options.values[ 0 ] ];\n\t\t\t\t} else if ( $.isArray( options.values ) ) {\n\t\t\t\t\toptions.values = options.values.slice( 0 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( !this.range || !this.range.length ) {\n\t\t\t\tthis.range = $( \"<div>\" )\n\t\t\t\t\t.appendTo( this.element );\n\n\t\t\t\tthis._addClass( this.range, \"ui-slider-range\" );\n\t\t\t} else {\n\t\t\t\tthis._removeClass( this.range, \"ui-slider-range-min ui-slider-range-max\" );\n\n\t\t\t\t// Handle range switching from true to min/max\n\t\t\t\tthis.range.css( {\n\t\t\t\t\t\"left\": \"\",\n\t\t\t\t\t\"bottom\": \"\"\n\t\t\t\t} );\n\t\t\t}\n\t\t\tif ( options.range === \"min\" || options.range === \"max\" ) {\n\t\t\t\tthis._addClass( this.range, \"ui-slider-range-\" + options.range );\n\t\t\t}\n\t\t} else {\n\t\t\tif ( this.range ) {\n\t\t\t\tthis.range.remove();\n\t\t\t}\n\t\t\tthis.range = null;\n\t\t}\n\t},\n\n\t_setupEvents: function() {\n\t\tthis._off( this.handles );\n\t\tthis._on( this.handles, this._handleEvents );\n\t\tthis._hoverable( this.handles );\n\t\tthis._focusable( this.handles );\n\t},\n\n\t_destroy: function() {\n\t\tthis.handles.remove();\n\t\tif ( this.range ) {\n\t\t\tthis.range.remove();\n\t\t}\n\n\t\tthis._mouseDestroy();\n\t},\n\n\t_mouseCapture: function( event ) {\n\t\tvar position, normValue, distance, closestHandle, index, allowed, offset, mouseOverHandle,\n\t\t\tthat = this,\n\t\t\to = this.options;\n\n\t\tif ( o.disabled ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tthis.elementSize = {\n\t\t\twidth: this.element.outerWidth(),\n\t\t\theight: this.element.outerHeight()\n\t\t};\n\t\tthis.elementOffset = this.element.offset();\n\n\t\tposition = { x: event.pageX, y: event.pageY };\n\t\tnormValue = this._normValueFromMouse( position );\n\t\tdistance = this._valueMax() - this._valueMin() + 1;\n\t\tthis.handles.each( function( i ) {\n\t\t\tvar thisDistance = Math.abs( normValue - that.values( i ) );\n\t\t\tif ( ( distance > thisDistance ) ||\n\t\t\t\t( distance === thisDistance &&\n\t\t\t\t\t( i === that._lastChangedValue || that.values( i ) === o.min ) ) ) {\n\t\t\t\tdistance = thisDistance;\n\t\t\t\tclosestHandle = $( this );\n\t\t\t\tindex = i;\n\t\t\t}\n\t\t} );\n\n\t\tallowed = this._start( event, index );\n\t\tif ( allowed === false ) {\n\t\t\treturn false;\n\t\t}\n\t\tthis._mouseSliding = true;\n\n\t\tthis._handleIndex = index;\n\n\t\tthis._addClass( closestHandle, null, \"ui-state-active\" );\n\t\tclosestHandle.trigger( \"focus\" );\n\n\t\toffset = closestHandle.offset();\n\t\tmouseOverHandle = !$( event.target ).parents().addBack().is( \".ui-slider-handle\" );\n\t\tthis._clickOffset = mouseOverHandle ? { left: 0, top: 0 } : {\n\t\t\tleft: event.pageX - offset.left - ( closestHandle.width() / 2 ),\n\t\t\ttop: event.pageY - offset.top -\n\t\t\t\t( closestHandle.height() / 2 ) -\n\t\t\t\t( parseInt( closestHandle.css( \"borderTopWidth\" ), 10 ) || 0 ) -\n\t\t\t\t( parseInt( closestHandle.css( \"borderBottomWidth\" ), 10 ) || 0 ) +\n\t\t\t\t( parseInt( closestHandle.css( \"marginTop\" ), 10 ) || 0 )\n\t\t};\n\n\t\tif ( !this.handles.hasClass( \"ui-state-hover\" ) ) {\n\t\t\tthis._slide( event, index, normValue );\n\t\t}\n\t\tthis._animateOff = true;\n\t\treturn true;\n\t},\n\n\t_mouseStart: function() {\n\t\treturn true;\n\t},\n\n\t_mouseDrag: function( event ) {\n\t\tvar position = { x: event.pageX, y: event.pageY },\n\t\t\tnormValue = this._normValueFromMouse( position );\n\n\t\tthis._slide( event, this._handleIndex, normValue );\n\n\t\treturn false;\n\t},\n\n\t_mouseStop: function( event ) {\n\t\tthis._removeClass( this.handles, null, \"ui-state-active\" );\n\t\tthis._mouseSliding = false;\n\n\t\tthis._stop( event, this._handleIndex );\n\t\tthis._change( event, this._handleIndex );\n\n\t\tthis._handleIndex = null;\n\t\tthis._clickOffset = null;\n\t\tthis._animateOff = false;\n\n\t\treturn false;\n\t},\n\n\t_detectOrientation: function() {\n\t\tthis.orientation = ( this.options.orientation === \"vertical\" ) ? \"vertical\" : \"horizontal\";\n\t},\n\n\t_normValueFromMouse: function( position ) {\n\t\tvar pixelTotal,\n\t\t\tpixelMouse,\n\t\t\tpercentMouse,\n\t\t\tvalueTotal,\n\t\t\tvalueMouse;\n\n\t\tif ( this.orientation === \"horizontal\" ) {\n\t\t\tpixelTotal = this.elementSize.width;\n\t\t\tpixelMouse = position.x - this.elementOffset.left -\n\t\t\t\t( this._clickOffset ? this._clickOffset.left : 0 );\n\t\t} else {\n\t\t\tpixelTotal = this.elementSize.height;\n\t\t\tpixelMouse = position.y - this.elementOffset.top -\n\t\t\t\t( this._clickOffset ? this._clickOffset.top : 0 );\n\t\t}\n\n\t\tpercentMouse = ( pixelMouse / pixelTotal );\n\t\tif ( percentMouse > 1 ) {\n\t\t\tpercentMouse = 1;\n\t\t}\n\t\tif ( percentMouse < 0 ) {\n\t\t\tpercentMouse = 0;\n\t\t}\n\t\tif ( this.orientation === \"vertical\" ) {\n\t\t\tpercentMouse = 1 - percentMouse;\n\t\t}\n\n\t\tvalueTotal = this._valueMax() - this._valueMin();\n\t\tvalueMouse = this._valueMin() + percentMouse * valueTotal;\n\n\t\treturn this._trimAlignValue( valueMouse );\n\t},\n\n\t_uiHash: function( index, value, values ) {\n\t\tvar uiHash = {\n\t\t\thandle: this.handles[ index ],\n\t\t\thandleIndex: index,\n\t\t\tvalue: value !== undefined ? value : this.value()\n\t\t};\n\n\t\tif ( this._hasMultipleValues() ) {\n\t\t\tuiHash.value = value !== undefined ? value : this.values( index );\n\t\t\tuiHash.values = values || this.values();\n\t\t}\n\n\t\treturn uiHash;\n\t},\n\n\t_hasMultipleValues: function() {\n\t\treturn this.options.values && this.options.values.length;\n\t},\n\n\t_start: function( event, index ) {\n\t\treturn this._trigger( \"start\", event, this._uiHash( index ) );\n\t},\n\n\t_slide: function( event, index, newVal ) {\n\t\tvar allowed, otherVal,\n\t\t\tcurrentValue = this.value(),\n\t\t\tnewValues = this.values();\n\n\t\tif ( this._hasMultipleValues() ) {\n\t\t\totherVal = this.values( index ? 0 : 1 );\n\t\t\tcurrentValue = this.values( index );\n\n\t\t\tif ( this.options.values.length === 2 && this.options.range === true ) {\n\t\t\t\tnewVal =  index === 0 ? Math.min( otherVal, newVal ) : Math.max( otherVal, newVal );\n\t\t\t}\n\n\t\t\tnewValues[ index ] = newVal;\n\t\t}\n\n\t\tif ( newVal === currentValue ) {\n\t\t\treturn;\n\t\t}\n\n\t\tallowed = this._trigger( \"slide\", event, this._uiHash( index, newVal, newValues ) );\n\n\t\t// A slide can be canceled by returning false from the slide callback\n\t\tif ( allowed === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( this._hasMultipleValues() ) {\n\t\t\tthis.values( index, newVal );\n\t\t} else {\n\t\t\tthis.value( newVal );\n\t\t}\n\t},\n\n\t_stop: function( event, index ) {\n\t\tthis._trigger( \"stop\", event, this._uiHash( index ) );\n\t},\n\n\t_change: function( event, index ) {\n\t\tif ( !this._keySliding && !this._mouseSliding ) {\n\n\t\t\t//store the last changed value index for reference when handles overlap\n\t\t\tthis._lastChangedValue = index;\n\t\t\tthis._trigger( \"change\", event, this._uiHash( index ) );\n\t\t}\n\t},\n\n\tvalue: function( newValue ) {\n\t\tif ( arguments.length ) {\n\t\t\tthis.options.value = this._trimAlignValue( newValue );\n\t\t\tthis._refreshValue();\n\t\t\tthis._change( null, 0 );\n\t\t\treturn;\n\t\t}\n\n\t\treturn this._value();\n\t},\n\n\tvalues: function( index, newValue ) {\n\t\tvar vals,\n\t\t\tnewValues,\n\t\t\ti;\n\n\t\tif ( arguments.length > 1 ) {\n\t\t\tthis.options.values[ index ] = this._trimAlignValue( newValue );\n\t\t\tthis._refreshValue();\n\t\t\tthis._change( null, index );\n\t\t\treturn;\n\t\t}\n\n\t\tif ( arguments.length ) {\n\t\t\tif ( $.isArray( arguments[ 0 ] ) ) {\n\t\t\t\tvals = this.options.values;\n\t\t\t\tnewValues = arguments[ 0 ];\n\t\t\t\tfor ( i = 0; i < vals.length; i += 1 ) {\n\t\t\t\t\tvals[ i ] = this._trimAlignValue( newValues[ i ] );\n\t\t\t\t\tthis._change( null, i );\n\t\t\t\t}\n\t\t\t\tthis._refreshValue();\n\t\t\t} else {\n\t\t\t\tif ( this._hasMultipleValues() ) {\n\t\t\t\t\treturn this._values( index );\n\t\t\t\t} else {\n\t\t\t\t\treturn this.value();\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\treturn this._values();\n\t\t}\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tvar i,\n\t\t\tvalsLength = 0;\n\n\t\tif ( key === \"range\" && this.options.range === true ) {\n\t\t\tif ( value === \"min\" ) {\n\t\t\t\tthis.options.value = this._values( 0 );\n\t\t\t\tthis.options.values = null;\n\t\t\t} else if ( value === \"max\" ) {\n\t\t\t\tthis.options.value = this._values( this.options.values.length - 1 );\n\t\t\t\tthis.options.values = null;\n\t\t\t}\n\t\t}\n\n\t\tif ( $.isArray( this.options.values ) ) {\n\t\t\tvalsLength = this.options.values.length;\n\t\t}\n\n\t\tthis._super( key, value );\n\n\t\tswitch ( key ) {\n\t\t\tcase \"orientation\":\n\t\t\t\tthis._detectOrientation();\n\t\t\t\tthis._removeClass( \"ui-slider-horizontal ui-slider-vertical\" )\n\t\t\t\t\t._addClass( \"ui-slider-\" + this.orientation );\n\t\t\t\tthis._refreshValue();\n\t\t\t\tif ( this.options.range ) {\n\t\t\t\t\tthis._refreshRange( value );\n\t\t\t\t}\n\n\t\t\t\t// Reset positioning from previous orientation\n\t\t\t\tthis.handles.css( value === \"horizontal\" ? \"bottom\" : \"left\", \"\" );\n\t\t\t\tbreak;\n\t\t\tcase \"value\":\n\t\t\t\tthis._animateOff = true;\n\t\t\t\tthis._refreshValue();\n\t\t\t\tthis._change( null, 0 );\n\t\t\t\tthis._animateOff = false;\n\t\t\t\tbreak;\n\t\t\tcase \"values\":\n\t\t\t\tthis._animateOff = true;\n\t\t\t\tthis._refreshValue();\n\n\t\t\t\t// Start from the last handle to prevent unreachable handles (#9046)\n\t\t\t\tfor ( i = valsLength - 1; i >= 0; i-- ) {\n\t\t\t\t\tthis._change( null, i );\n\t\t\t\t}\n\t\t\t\tthis._animateOff = false;\n\t\t\t\tbreak;\n\t\t\tcase \"step\":\n\t\t\tcase \"min\":\n\t\t\tcase \"max\":\n\t\t\t\tthis._animateOff = true;\n\t\t\t\tthis._calculateNewMax();\n\t\t\t\tthis._refreshValue();\n\t\t\t\tthis._animateOff = false;\n\t\t\t\tbreak;\n\t\t\tcase \"range\":\n\t\t\t\tthis._animateOff = true;\n\t\t\t\tthis._refresh();\n\t\t\t\tthis._animateOff = false;\n\t\t\t\tbreak;\n\t\t}\n\t},\n\n\t_setOptionDisabled: function( value ) {\n\t\tthis._super( value );\n\n\t\tthis._toggleClass( null, \"ui-state-disabled\", !!value );\n\t},\n\n\t//internal value getter\n\t// _value() returns value trimmed by min and max, aligned by step\n\t_value: function() {\n\t\tvar val = this.options.value;\n\t\tval = this._trimAlignValue( val );\n\n\t\treturn val;\n\t},\n\n\t//internal values getter\n\t// _values() returns array of values trimmed by min and max, aligned by step\n\t// _values( index ) returns single value trimmed by min and max, aligned by step\n\t_values: function( index ) {\n\t\tvar val,\n\t\t\tvals,\n\t\t\ti;\n\n\t\tif ( arguments.length ) {\n\t\t\tval = this.options.values[ index ];\n\t\t\tval = this._trimAlignValue( val );\n\n\t\t\treturn val;\n\t\t} else if ( this._hasMultipleValues() ) {\n\n\t\t\t// .slice() creates a copy of the array\n\t\t\t// this copy gets trimmed by min and max and then returned\n\t\t\tvals = this.options.values.slice();\n\t\t\tfor ( i = 0; i < vals.length; i += 1 ) {\n\t\t\t\tvals[ i ] = this._trimAlignValue( vals[ i ] );\n\t\t\t}\n\n\t\t\treturn vals;\n\t\t} else {\n\t\t\treturn [];\n\t\t}\n\t},\n\n\t// Returns the step-aligned value that val is closest to, between (inclusive) min and max\n\t_trimAlignValue: function( val ) {\n\t\tif ( val <= this._valueMin() ) {\n\t\t\treturn this._valueMin();\n\t\t}\n\t\tif ( val >= this._valueMax() ) {\n\t\t\treturn this._valueMax();\n\t\t}\n\t\tvar step = ( this.options.step > 0 ) ? this.options.step : 1,\n\t\t\tvalModStep = ( val - this._valueMin() ) % step,\n\t\t\talignValue = val - valModStep;\n\n\t\tif ( Math.abs( valModStep ) * 2 >= step ) {\n\t\t\talignValue += ( valModStep > 0 ) ? step : ( -step );\n\t\t}\n\n\t\t// Since JavaScript has problems with large floats, round\n\t\t// the final value to 5 digits after the decimal point (see #4124)\n\t\treturn parseFloat( alignValue.toFixed( 5 ) );\n\t},\n\n\t_calculateNewMax: function() {\n\t\tvar max = this.options.max,\n\t\t\tmin = this._valueMin(),\n\t\t\tstep = this.options.step,\n\t\t\taboveMin = Math.round( ( max - min ) / step ) * step;\n\t\tmax = aboveMin + min;\n\t\tif ( max > this.options.max ) {\n\n\t\t\t//If max is not divisible by step, rounding off may increase its value\n\t\t\tmax -= step;\n\t\t}\n\t\tthis.max = parseFloat( max.toFixed( this._precision() ) );\n\t},\n\n\t_precision: function() {\n\t\tvar precision = this._precisionOf( this.options.step );\n\t\tif ( this.options.min !== null ) {\n\t\t\tprecision = Math.max( precision, this._precisionOf( this.options.min ) );\n\t\t}\n\t\treturn precision;\n\t},\n\n\t_precisionOf: function( num ) {\n\t\tvar str = num.toString(),\n\t\t\tdecimal = str.indexOf( \".\" );\n\t\treturn decimal === -1 ? 0 : str.length - decimal - 1;\n\t},\n\n\t_valueMin: function() {\n\t\treturn this.options.min;\n\t},\n\n\t_valueMax: function() {\n\t\treturn this.max;\n\t},\n\n\t_refreshRange: function( orientation ) {\n\t\tif ( orientation === \"vertical\" ) {\n\t\t\tthis.range.css( { \"width\": \"\", \"left\": \"\" } );\n\t\t}\n\t\tif ( orientation === \"horizontal\" ) {\n\t\t\tthis.range.css( { \"height\": \"\", \"bottom\": \"\" } );\n\t\t}\n\t},\n\n\t_refreshValue: function() {\n\t\tvar lastValPercent, valPercent, value, valueMin, valueMax,\n\t\t\toRange = this.options.range,\n\t\t\to = this.options,\n\t\t\tthat = this,\n\t\t\tanimate = ( !this._animateOff ) ? o.animate : false,\n\t\t\t_set = {};\n\n\t\tif ( this._hasMultipleValues() ) {\n\t\t\tthis.handles.each( function( i ) {\n\t\t\t\tvalPercent = ( that.values( i ) - that._valueMin() ) / ( that._valueMax() -\n\t\t\t\t\tthat._valueMin() ) * 100;\n\t\t\t\t_set[ that.orientation === \"horizontal\" ? \"left\" : \"bottom\" ] = valPercent + \"%\";\n\t\t\t\t$( this ).stop( 1, 1 )[ animate ? \"animate\" : \"css\" ]( _set, o.animate );\n\t\t\t\tif ( that.options.range === true ) {\n\t\t\t\t\tif ( that.orientation === \"horizontal\" ) {\n\t\t\t\t\t\tif ( i === 0 ) {\n\t\t\t\t\t\t\tthat.range.stop( 1, 1 )[ animate ? \"animate\" : \"css\" ]( {\n\t\t\t\t\t\t\t\tleft: valPercent + \"%\"\n\t\t\t\t\t\t\t}, o.animate );\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( i === 1 ) {\n\t\t\t\t\t\t\tthat.range[ animate ? \"animate\" : \"css\" ]( {\n\t\t\t\t\t\t\t\twidth: ( valPercent - lastValPercent ) + \"%\"\n\t\t\t\t\t\t\t}, {\n\t\t\t\t\t\t\t\tqueue: false,\n\t\t\t\t\t\t\t\tduration: o.animate\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif ( i === 0 ) {\n\t\t\t\t\t\t\tthat.range.stop( 1, 1 )[ animate ? \"animate\" : \"css\" ]( {\n\t\t\t\t\t\t\t\tbottom: ( valPercent ) + \"%\"\n\t\t\t\t\t\t\t}, o.animate );\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( i === 1 ) {\n\t\t\t\t\t\t\tthat.range[ animate ? \"animate\" : \"css\" ]( {\n\t\t\t\t\t\t\t\theight: ( valPercent - lastValPercent ) + \"%\"\n\t\t\t\t\t\t\t}, {\n\t\t\t\t\t\t\t\tqueue: false,\n\t\t\t\t\t\t\t\tduration: o.animate\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tlastValPercent = valPercent;\n\t\t\t} );\n\t\t} else {\n\t\t\tvalue = this.value();\n\t\t\tvalueMin = this._valueMin();\n\t\t\tvalueMax = this._valueMax();\n\t\t\tvalPercent = ( valueMax !== valueMin ) ?\n\t\t\t\t\t( value - valueMin ) / ( valueMax - valueMin ) * 100 :\n\t\t\t\t\t0;\n\t\t\t_set[ this.orientation === \"horizontal\" ? \"left\" : \"bottom\" ] = valPercent + \"%\";\n\t\t\tthis.handle.stop( 1, 1 )[ animate ? \"animate\" : \"css\" ]( _set, o.animate );\n\n\t\t\tif ( oRange === \"min\" && this.orientation === \"horizontal\" ) {\n\t\t\t\tthis.range.stop( 1, 1 )[ animate ? \"animate\" : \"css\" ]( {\n\t\t\t\t\twidth: valPercent + \"%\"\n\t\t\t\t}, o.animate );\n\t\t\t}\n\t\t\tif ( oRange === \"max\" && this.orientation === \"horizontal\" ) {\n\t\t\t\tthis.range.stop( 1, 1 )[ animate ? \"animate\" : \"css\" ]( {\n\t\t\t\t\twidth: ( 100 - valPercent ) + \"%\"\n\t\t\t\t}, o.animate );\n\t\t\t}\n\t\t\tif ( oRange === \"min\" && this.orientation === \"vertical\" ) {\n\t\t\t\tthis.range.stop( 1, 1 )[ animate ? \"animate\" : \"css\" ]( {\n\t\t\t\t\theight: valPercent + \"%\"\n\t\t\t\t}, o.animate );\n\t\t\t}\n\t\t\tif ( oRange === \"max\" && this.orientation === \"vertical\" ) {\n\t\t\t\tthis.range.stop( 1, 1 )[ animate ? \"animate\" : \"css\" ]( {\n\t\t\t\t\theight: ( 100 - valPercent ) + \"%\"\n\t\t\t\t}, o.animate );\n\t\t\t}\n\t\t}\n\t},\n\n\t_handleEvents: {\n\t\tkeydown: function( event ) {\n\t\t\tvar allowed, curVal, newVal, step,\n\t\t\t\tindex = $( event.target ).data( \"ui-slider-handle-index\" );\n\n\t\t\tswitch ( event.keyCode ) {\n\t\t\t\tcase $.ui.keyCode.HOME:\n\t\t\t\tcase $.ui.keyCode.END:\n\t\t\t\tcase $.ui.keyCode.PAGE_UP:\n\t\t\t\tcase $.ui.keyCode.PAGE_DOWN:\n\t\t\t\tcase $.ui.keyCode.UP:\n\t\t\t\tcase $.ui.keyCode.RIGHT:\n\t\t\t\tcase $.ui.keyCode.DOWN:\n\t\t\t\tcase $.ui.keyCode.LEFT:\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\tif ( !this._keySliding ) {\n\t\t\t\t\t\tthis._keySliding = true;\n\t\t\t\t\t\tthis._addClass( $( event.target ), null, \"ui-state-active\" );\n\t\t\t\t\t\tallowed = this._start( event, index );\n\t\t\t\t\t\tif ( allowed === false ) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tstep = this.options.step;\n\t\t\tif ( this._hasMultipleValues() ) {\n\t\t\t\tcurVal = newVal = this.values( index );\n\t\t\t} else {\n\t\t\t\tcurVal = newVal = this.value();\n\t\t\t}\n\n\t\t\tswitch ( event.keyCode ) {\n\t\t\t\tcase $.ui.keyCode.HOME:\n\t\t\t\t\tnewVal = this._valueMin();\n\t\t\t\t\tbreak;\n\t\t\t\tcase $.ui.keyCode.END:\n\t\t\t\t\tnewVal = this._valueMax();\n\t\t\t\t\tbreak;\n\t\t\t\tcase $.ui.keyCode.PAGE_UP:\n\t\t\t\t\tnewVal = this._trimAlignValue(\n\t\t\t\t\t\tcurVal + ( ( this._valueMax() - this._valueMin() ) / this.numPages )\n\t\t\t\t\t);\n\t\t\t\t\tbreak;\n\t\t\t\tcase $.ui.keyCode.PAGE_DOWN:\n\t\t\t\t\tnewVal = this._trimAlignValue(\n\t\t\t\t\t\tcurVal - ( ( this._valueMax() - this._valueMin() ) / this.numPages ) );\n\t\t\t\t\tbreak;\n\t\t\t\tcase $.ui.keyCode.UP:\n\t\t\t\tcase $.ui.keyCode.RIGHT:\n\t\t\t\t\tif ( curVal === this._valueMax() ) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tnewVal = this._trimAlignValue( curVal + step );\n\t\t\t\t\tbreak;\n\t\t\t\tcase $.ui.keyCode.DOWN:\n\t\t\t\tcase $.ui.keyCode.LEFT:\n\t\t\t\t\tif ( curVal === this._valueMin() ) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tnewVal = this._trimAlignValue( curVal - step );\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tthis._slide( event, index, newVal );\n\t\t},\n\t\tkeyup: function( event ) {\n\t\t\tvar index = $( event.target ).data( \"ui-slider-handle-index\" );\n\n\t\t\tif ( this._keySliding ) {\n\t\t\t\tthis._keySliding = false;\n\t\t\t\tthis._stop( event, index );\n\t\t\t\tthis._change( event, index );\n\t\t\t\tthis._removeClass( $( event.target ), null, \"ui-state-active\" );\n\t\t\t}\n\t\t}\n\t}\n} );\n\n\n/*!\n * jQuery UI Spinner 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Spinner\n//>>group: Widgets\n//>>description: Displays buttons to easily input numbers via the keyboard or mouse.\n//>>docs: http://api.jqueryui.com/spinner/\n//>>demos: http://jqueryui.com/spinner/\n//>>css.structure: ../../themes/base/core.css\n//>>css.structure: ../../themes/base/spinner.css\n//>>css.theme: ../../themes/base/theme.css\n\n\n\nfunction spinnerModifer( fn ) {\n\treturn function() {\n\t\tvar previous = this.element.val();\n\t\tfn.apply( this, arguments );\n\t\tthis._refresh();\n\t\tif ( previous !== this.element.val() ) {\n\t\t\tthis._trigger( \"change\" );\n\t\t}\n\t};\n}\n\n$.widget( \"ui.spinner\", {\n\tversion: \"1.12.1\",\n\tdefaultElement: \"<input>\",\n\twidgetEventPrefix: \"spin\",\n\toptions: {\n\t\tclasses: {\n\t\t\t\"ui-spinner\": \"ui-corner-all\",\n\t\t\t\"ui-spinner-down\": \"ui-corner-br\",\n\t\t\t\"ui-spinner-up\": \"ui-corner-tr\"\n\t\t},\n\t\tculture: null,\n\t\ticons: {\n\t\t\tdown: \"ui-icon-triangle-1-s\",\n\t\t\tup: \"ui-icon-triangle-1-n\"\n\t\t},\n\t\tincremental: true,\n\t\tmax: null,\n\t\tmin: null,\n\t\tnumberFormat: null,\n\t\tpage: 10,\n\t\tstep: 1,\n\n\t\tchange: null,\n\t\tspin: null,\n\t\tstart: null,\n\t\tstop: null\n\t},\n\n\t_create: function() {\n\n\t\t// handle string values that need to be parsed\n\t\tthis._setOption( \"max\", this.options.max );\n\t\tthis._setOption( \"min\", this.options.min );\n\t\tthis._setOption( \"step\", this.options.step );\n\n\t\t// Only format if there is a value, prevents the field from being marked\n\t\t// as invalid in Firefox, see #9573.\n\t\tif ( this.value() !== \"\" ) {\n\n\t\t\t// Format the value, but don't constrain.\n\t\t\tthis._value( this.element.val(), true );\n\t\t}\n\n\t\tthis._draw();\n\t\tthis._on( this._events );\n\t\tthis._refresh();\n\n\t\t// Turning off autocomplete prevents the browser from remembering the\n\t\t// value when navigating through history, so we re-enable autocomplete\n\t\t// if the page is unloaded before the widget is destroyed. #7790\n\t\tthis._on( this.window, {\n\t\t\tbeforeunload: function() {\n\t\t\t\tthis.element.removeAttr( \"autocomplete\" );\n\t\t\t}\n\t\t} );\n\t},\n\n\t_getCreateOptions: function() {\n\t\tvar options = this._super();\n\t\tvar element = this.element;\n\n\t\t$.each( [ \"min\", \"max\", \"step\" ], function( i, option ) {\n\t\t\tvar value = element.attr( option );\n\t\t\tif ( value != null && value.length ) {\n\t\t\t\toptions[ option ] = value;\n\t\t\t}\n\t\t} );\n\n\t\treturn options;\n\t},\n\n\t_events: {\n\t\tkeydown: function( event ) {\n\t\t\tif ( this._start( event ) && this._keydown( event ) ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\t\t},\n\t\tkeyup: \"_stop\",\n\t\tfocus: function() {\n\t\t\tthis.previous = this.element.val();\n\t\t},\n\t\tblur: function( event ) {\n\t\t\tif ( this.cancelBlur ) {\n\t\t\t\tdelete this.cancelBlur;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis._stop();\n\t\t\tthis._refresh();\n\t\t\tif ( this.previous !== this.element.val() ) {\n\t\t\t\tthis._trigger( \"change\", event );\n\t\t\t}\n\t\t},\n\t\tmousewheel: function( event, delta ) {\n\t\t\tif ( !delta ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif ( !this.spinning && !this._start( event ) ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tthis._spin( ( delta > 0 ? 1 : -1 ) * this.options.step, event );\n\t\t\tclearTimeout( this.mousewheelTimer );\n\t\t\tthis.mousewheelTimer = this._delay( function() {\n\t\t\t\tif ( this.spinning ) {\n\t\t\t\t\tthis._stop( event );\n\t\t\t\t}\n\t\t\t}, 100 );\n\t\t\tevent.preventDefault();\n\t\t},\n\t\t\"mousedown .ui-spinner-button\": function( event ) {\n\t\t\tvar previous;\n\n\t\t\t// We never want the buttons to have focus; whenever the user is\n\t\t\t// interacting with the spinner, the focus should be on the input.\n\t\t\t// If the input is focused then this.previous is properly set from\n\t\t\t// when the input first received focus. If the input is not focused\n\t\t\t// then we need to set this.previous based on the value before spinning.\n\t\t\tprevious = this.element[ 0 ] === $.ui.safeActiveElement( this.document[ 0 ] ) ?\n\t\t\t\tthis.previous : this.element.val();\n\t\t\tfunction checkFocus() {\n\t\t\t\tvar isActive = this.element[ 0 ] === $.ui.safeActiveElement( this.document[ 0 ] );\n\t\t\t\tif ( !isActive ) {\n\t\t\t\t\tthis.element.trigger( \"focus\" );\n\t\t\t\t\tthis.previous = previous;\n\n\t\t\t\t\t// support: IE\n\t\t\t\t\t// IE sets focus asynchronously, so we need to check if focus\n\t\t\t\t\t// moved off of the input because the user clicked on the button.\n\t\t\t\t\tthis._delay( function() {\n\t\t\t\t\t\tthis.previous = previous;\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Ensure focus is on (or stays on) the text field\n\t\t\tevent.preventDefault();\n\t\t\tcheckFocus.call( this );\n\n\t\t\t// Support: IE\n\t\t\t// IE doesn't prevent moving focus even with event.preventDefault()\n\t\t\t// so we set a flag to know when we should ignore the blur event\n\t\t\t// and check (again) if focus moved off of the input.\n\t\t\tthis.cancelBlur = true;\n\t\t\tthis._delay( function() {\n\t\t\t\tdelete this.cancelBlur;\n\t\t\t\tcheckFocus.call( this );\n\t\t\t} );\n\n\t\t\tif ( this._start( event ) === false ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis._repeat( null, $( event.currentTarget )\n\t\t\t\t.hasClass( \"ui-spinner-up\" ) ? 1 : -1, event );\n\t\t},\n\t\t\"mouseup .ui-spinner-button\": \"_stop\",\n\t\t\"mouseenter .ui-spinner-button\": function( event ) {\n\n\t\t\t// button will add ui-state-active if mouse was down while mouseleave and kept down\n\t\t\tif ( !$( event.currentTarget ).hasClass( \"ui-state-active\" ) ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( this._start( event ) === false ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tthis._repeat( null, $( event.currentTarget )\n\t\t\t\t.hasClass( \"ui-spinner-up\" ) ? 1 : -1, event );\n\t\t},\n\n\t\t// TODO: do we really want to consider this a stop?\n\t\t// shouldn't we just stop the repeater and wait until mouseup before\n\t\t// we trigger the stop event?\n\t\t\"mouseleave .ui-spinner-button\": \"_stop\"\n\t},\n\n\t// Support mobile enhanced option and make backcompat more sane\n\t_enhance: function() {\n\t\tthis.uiSpinner = this.element\n\t\t\t.attr( \"autocomplete\", \"off\" )\n\t\t\t.wrap( \"<span>\" )\n\t\t\t.parent()\n\n\t\t\t\t// Add buttons\n\t\t\t\t.append(\n\t\t\t\t\t\"<a></a><a></a>\"\n\t\t\t\t);\n\t},\n\n\t_draw: function() {\n\t\tthis._enhance();\n\n\t\tthis._addClass( this.uiSpinner, \"ui-spinner\", \"ui-widget ui-widget-content\" );\n\t\tthis._addClass( \"ui-spinner-input\" );\n\n\t\tthis.element.attr( \"role\", \"spinbutton\" );\n\n\t\t// Button bindings\n\t\tthis.buttons = this.uiSpinner.children( \"a\" )\n\t\t\t.attr( \"tabIndex\", -1 )\n\t\t\t.attr( \"aria-hidden\", true )\n\t\t\t.button( {\n\t\t\t\tclasses: {\n\t\t\t\t\t\"ui-button\": \"\"\n\t\t\t\t}\n\t\t\t} );\n\n\t\t// TODO: Right now button does not support classes this is already updated in button PR\n\t\tthis._removeClass( this.buttons, \"ui-corner-all\" );\n\n\t\tthis._addClass( this.buttons.first(), \"ui-spinner-button ui-spinner-up\" );\n\t\tthis._addClass( this.buttons.last(), \"ui-spinner-button ui-spinner-down\" );\n\t\tthis.buttons.first().button( {\n\t\t\t\"icon\": this.options.icons.up,\n\t\t\t\"showLabel\": false\n\t\t} );\n\t\tthis.buttons.last().button( {\n\t\t\t\"icon\": this.options.icons.down,\n\t\t\t\"showLabel\": false\n\t\t} );\n\n\t\t// IE 6 doesn't understand height: 50% for the buttons\n\t\t// unless the wrapper has an explicit height\n\t\tif ( this.buttons.height() > Math.ceil( this.uiSpinner.height() * 0.5 ) &&\n\t\t\t\tthis.uiSpinner.height() > 0 ) {\n\t\t\tthis.uiSpinner.height( this.uiSpinner.height() );\n\t\t}\n\t},\n\n\t_keydown: function( event ) {\n\t\tvar options = this.options,\n\t\t\tkeyCode = $.ui.keyCode;\n\n\t\tswitch ( event.keyCode ) {\n\t\tcase keyCode.UP:\n\t\t\tthis._repeat( null, 1, event );\n\t\t\treturn true;\n\t\tcase keyCode.DOWN:\n\t\t\tthis._repeat( null, -1, event );\n\t\t\treturn true;\n\t\tcase keyCode.PAGE_UP:\n\t\t\tthis._repeat( null, options.page, event );\n\t\t\treturn true;\n\t\tcase keyCode.PAGE_DOWN:\n\t\t\tthis._repeat( null, -options.page, event );\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t},\n\n\t_start: function( event ) {\n\t\tif ( !this.spinning && this._trigger( \"start\", event ) === false ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif ( !this.counter ) {\n\t\t\tthis.counter = 1;\n\t\t}\n\t\tthis.spinning = true;\n\t\treturn true;\n\t},\n\n\t_repeat: function( i, steps, event ) {\n\t\ti = i || 500;\n\n\t\tclearTimeout( this.timer );\n\t\tthis.timer = this._delay( function() {\n\t\t\tthis._repeat( 40, steps, event );\n\t\t}, i );\n\n\t\tthis._spin( steps * this.options.step, event );\n\t},\n\n\t_spin: function( step, event ) {\n\t\tvar value = this.value() || 0;\n\n\t\tif ( !this.counter ) {\n\t\t\tthis.counter = 1;\n\t\t}\n\n\t\tvalue = this._adjustValue( value + step * this._increment( this.counter ) );\n\n\t\tif ( !this.spinning || this._trigger( \"spin\", event, { value: value } ) !== false ) {\n\t\t\tthis._value( value );\n\t\t\tthis.counter++;\n\t\t}\n\t},\n\n\t_increment: function( i ) {\n\t\tvar incremental = this.options.incremental;\n\n\t\tif ( incremental ) {\n\t\t\treturn $.isFunction( incremental ) ?\n\t\t\t\tincremental( i ) :\n\t\t\t\tMath.floor( i * i * i / 50000 - i * i / 500 + 17 * i / 200 + 1 );\n\t\t}\n\n\t\treturn 1;\n\t},\n\n\t_precision: function() {\n\t\tvar precision = this._precisionOf( this.options.step );\n\t\tif ( this.options.min !== null ) {\n\t\t\tprecision = Math.max( precision, this._precisionOf( this.options.min ) );\n\t\t}\n\t\treturn precision;\n\t},\n\n\t_precisionOf: function( num ) {\n\t\tvar str = num.toString(),\n\t\t\tdecimal = str.indexOf( \".\" );\n\t\treturn decimal === -1 ? 0 : str.length - decimal - 1;\n\t},\n\n\t_adjustValue: function( value ) {\n\t\tvar base, aboveMin,\n\t\t\toptions = this.options;\n\n\t\t// Make sure we're at a valid step\n\t\t// - find out where we are relative to the base (min or 0)\n\t\tbase = options.min !== null ? options.min : 0;\n\t\taboveMin = value - base;\n\n\t\t// - round to the nearest step\n\t\taboveMin = Math.round( aboveMin / options.step ) * options.step;\n\n\t\t// - rounding is based on 0, so adjust back to our base\n\t\tvalue = base + aboveMin;\n\n\t\t// Fix precision from bad JS floating point math\n\t\tvalue = parseFloat( value.toFixed( this._precision() ) );\n\n\t\t// Clamp the value\n\t\tif ( options.max !== null && value > options.max ) {\n\t\t\treturn options.max;\n\t\t}\n\t\tif ( options.min !== null && value < options.min ) {\n\t\t\treturn options.min;\n\t\t}\n\n\t\treturn value;\n\t},\n\n\t_stop: function( event ) {\n\t\tif ( !this.spinning ) {\n\t\t\treturn;\n\t\t}\n\n\t\tclearTimeout( this.timer );\n\t\tclearTimeout( this.mousewheelTimer );\n\t\tthis.counter = 0;\n\t\tthis.spinning = false;\n\t\tthis._trigger( \"stop\", event );\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tvar prevValue, first, last;\n\n\t\tif ( key === \"culture\" || key === \"numberFormat\" ) {\n\t\t\tprevValue = this._parse( this.element.val() );\n\t\t\tthis.options[ key ] = value;\n\t\t\tthis.element.val( this._format( prevValue ) );\n\t\t\treturn;\n\t\t}\n\n\t\tif ( key === \"max\" || key === \"min\" || key === \"step\" ) {\n\t\t\tif ( typeof value === \"string\" ) {\n\t\t\t\tvalue = this._parse( value );\n\t\t\t}\n\t\t}\n\t\tif ( key === \"icons\" ) {\n\t\t\tfirst = this.buttons.first().find( \".ui-icon\" );\n\t\t\tthis._removeClass( first, null, this.options.icons.up );\n\t\t\tthis._addClass( first, null, value.up );\n\t\t\tlast = this.buttons.last().find( \".ui-icon\" );\n\t\t\tthis._removeClass( last, null, this.options.icons.down );\n\t\t\tthis._addClass( last, null, value.down );\n\t\t}\n\n\t\tthis._super( key, value );\n\t},\n\n\t_setOptionDisabled: function( value ) {\n\t\tthis._super( value );\n\n\t\tthis._toggleClass( this.uiSpinner, null, \"ui-state-disabled\", !!value );\n\t\tthis.element.prop( \"disabled\", !!value );\n\t\tthis.buttons.button( value ? \"disable\" : \"enable\" );\n\t},\n\n\t_setOptions: spinnerModifer( function( options ) {\n\t\tthis._super( options );\n\t} ),\n\n\t_parse: function( val ) {\n\t\tif ( typeof val === \"string\" && val !== \"\" ) {\n\t\t\tval = window.Globalize && this.options.numberFormat ?\n\t\t\t\tGlobalize.parseFloat( val, 10, this.options.culture ) : +val;\n\t\t}\n\t\treturn val === \"\" || isNaN( val ) ? null : val;\n\t},\n\n\t_format: function( value ) {\n\t\tif ( value === \"\" ) {\n\t\t\treturn \"\";\n\t\t}\n\t\treturn window.Globalize && this.options.numberFormat ?\n\t\t\tGlobalize.format( value, this.options.numberFormat, this.options.culture ) :\n\t\t\tvalue;\n\t},\n\n\t_refresh: function() {\n\t\tthis.element.attr( {\n\t\t\t\"aria-valuemin\": this.options.min,\n\t\t\t\"aria-valuemax\": this.options.max,\n\n\t\t\t// TODO: what should we do with values that can't be parsed?\n\t\t\t\"aria-valuenow\": this._parse( this.element.val() )\n\t\t} );\n\t},\n\n\tisValid: function() {\n\t\tvar value = this.value();\n\n\t\t// Null is invalid\n\t\tif ( value === null ) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// If value gets adjusted, it's invalid\n\t\treturn value === this._adjustValue( value );\n\t},\n\n\t// Update the value without triggering change\n\t_value: function( value, allowAny ) {\n\t\tvar parsed;\n\t\tif ( value !== \"\" ) {\n\t\t\tparsed = this._parse( value );\n\t\t\tif ( parsed !== null ) {\n\t\t\t\tif ( !allowAny ) {\n\t\t\t\t\tparsed = this._adjustValue( parsed );\n\t\t\t\t}\n\t\t\t\tvalue = this._format( parsed );\n\t\t\t}\n\t\t}\n\t\tthis.element.val( value );\n\t\tthis._refresh();\n\t},\n\n\t_destroy: function() {\n\t\tthis.element\n\t\t\t.prop( \"disabled\", false )\n\t\t\t.removeAttr( \"autocomplete role aria-valuemin aria-valuemax aria-valuenow\" );\n\n\t\tthis.uiSpinner.replaceWith( this.element );\n\t},\n\n\tstepUp: spinnerModifer( function( steps ) {\n\t\tthis._stepUp( steps );\n\t} ),\n\t_stepUp: function( steps ) {\n\t\tif ( this._start() ) {\n\t\t\tthis._spin( ( steps || 1 ) * this.options.step );\n\t\t\tthis._stop();\n\t\t}\n\t},\n\n\tstepDown: spinnerModifer( function( steps ) {\n\t\tthis._stepDown( steps );\n\t} ),\n\t_stepDown: function( steps ) {\n\t\tif ( this._start() ) {\n\t\t\tthis._spin( ( steps || 1 ) * -this.options.step );\n\t\t\tthis._stop();\n\t\t}\n\t},\n\n\tpageUp: spinnerModifer( function( pages ) {\n\t\tthis._stepUp( ( pages || 1 ) * this.options.page );\n\t} ),\n\n\tpageDown: spinnerModifer( function( pages ) {\n\t\tthis._stepDown( ( pages || 1 ) * this.options.page );\n\t} ),\n\n\tvalue: function( newVal ) {\n\t\tif ( !arguments.length ) {\n\t\t\treturn this._parse( this.element.val() );\n\t\t}\n\t\tspinnerModifer( this._value ).call( this, newVal );\n\t},\n\n\twidget: function() {\n\t\treturn this.uiSpinner;\n\t}\n} );\n\n// DEPRECATED\n// TODO: switch return back to widget declaration at top of file when this is removed\nif ( $.uiBackCompat !== false ) {\n\n\t// Backcompat for spinner html extension points\n\t$.widget( \"ui.spinner\", $.ui.spinner, {\n\t\t_enhance: function() {\n\t\t\tthis.uiSpinner = this.element\n\t\t\t\t.attr( \"autocomplete\", \"off\" )\n\t\t\t\t.wrap( this._uiSpinnerHtml() )\n\t\t\t\t.parent()\n\n\t\t\t\t\t// Add buttons\n\t\t\t\t\t.append( this._buttonHtml() );\n\t\t},\n\t\t_uiSpinnerHtml: function() {\n\t\t\treturn \"<span>\";\n\t\t},\n\n\t\t_buttonHtml: function() {\n\t\t\treturn \"<a></a><a></a>\";\n\t\t}\n\t} );\n}\n\nvar widgetsSpinner = $.ui.spinner;\n\n\n/*!\n * jQuery UI Tabs 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Tabs\n//>>group: Widgets\n//>>description: Transforms a set of container elements into a tab structure.\n//>>docs: http://api.jqueryui.com/tabs/\n//>>demos: http://jqueryui.com/tabs/\n//>>css.structure: ../../themes/base/core.css\n//>>css.structure: ../../themes/base/tabs.css\n//>>css.theme: ../../themes/base/theme.css\n\n\n\n$.widget( \"ui.tabs\", {\n\tversion: \"1.12.1\",\n\tdelay: 300,\n\toptions: {\n\t\tactive: null,\n\t\tclasses: {\n\t\t\t\"ui-tabs\": \"ui-corner-all\",\n\t\t\t\"ui-tabs-nav\": \"ui-corner-all\",\n\t\t\t\"ui-tabs-panel\": \"ui-corner-bottom\",\n\t\t\t\"ui-tabs-tab\": \"ui-corner-top\"\n\t\t},\n\t\tcollapsible: false,\n\t\tevent: \"click\",\n\t\theightStyle: \"content\",\n\t\thide: null,\n\t\tshow: null,\n\n\t\t// Callbacks\n\t\tactivate: null,\n\t\tbeforeActivate: null,\n\t\tbeforeLoad: null,\n\t\tload: null\n\t},\n\n\t_isLocal: ( function() {\n\t\tvar rhash = /#.*$/;\n\n\t\treturn function( anchor ) {\n\t\t\tvar anchorUrl, locationUrl;\n\n\t\t\tanchorUrl = anchor.href.replace( rhash, \"\" );\n\t\t\tlocationUrl = location.href.replace( rhash, \"\" );\n\n\t\t\t// Decoding may throw an error if the URL isn't UTF-8 (#9518)\n\t\t\ttry {\n\t\t\t\tanchorUrl = decodeURIComponent( anchorUrl );\n\t\t\t} catch ( error ) {}\n\t\t\ttry {\n\t\t\t\tlocationUrl = decodeURIComponent( locationUrl );\n\t\t\t} catch ( error ) {}\n\n\t\t\treturn anchor.hash.length > 1 && anchorUrl === locationUrl;\n\t\t};\n\t} )(),\n\n\t_create: function() {\n\t\tvar that = this,\n\t\t\toptions = this.options;\n\n\t\tthis.running = false;\n\n\t\tthis._addClass( \"ui-tabs\", \"ui-widget ui-widget-content\" );\n\t\tthis._toggleClass( \"ui-tabs-collapsible\", null, options.collapsible );\n\n\t\tthis._processTabs();\n\t\toptions.active = this._initialActive();\n\n\t\t// Take disabling tabs via class attribute from HTML\n\t\t// into account and update option properly.\n\t\tif ( $.isArray( options.disabled ) ) {\n\t\t\toptions.disabled = $.unique( options.disabled.concat(\n\t\t\t\t$.map( this.tabs.filter( \".ui-state-disabled\" ), function( li ) {\n\t\t\t\t\treturn that.tabs.index( li );\n\t\t\t\t} )\n\t\t\t) ).sort();\n\t\t}\n\n\t\t// Check for length avoids error when initializing empty list\n\t\tif ( this.options.active !== false && this.anchors.length ) {\n\t\t\tthis.active = this._findActive( options.active );\n\t\t} else {\n\t\t\tthis.active = $();\n\t\t}\n\n\t\tthis._refresh();\n\n\t\tif ( this.active.length ) {\n\t\t\tthis.load( options.active );\n\t\t}\n\t},\n\n\t_initialActive: function() {\n\t\tvar active = this.options.active,\n\t\t\tcollapsible = this.options.collapsible,\n\t\t\tlocationHash = location.hash.substring( 1 );\n\n\t\tif ( active === null ) {\n\n\t\t\t// check the fragment identifier in the URL\n\t\t\tif ( locationHash ) {\n\t\t\t\tthis.tabs.each( function( i, tab ) {\n\t\t\t\t\tif ( $( tab ).attr( \"aria-controls\" ) === locationHash ) {\n\t\t\t\t\t\tactive = i;\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\t// Check for a tab marked active via a class\n\t\t\tif ( active === null ) {\n\t\t\t\tactive = this.tabs.index( this.tabs.filter( \".ui-tabs-active\" ) );\n\t\t\t}\n\n\t\t\t// No active tab, set to false\n\t\t\tif ( active === null || active === -1 ) {\n\t\t\t\tactive = this.tabs.length ? 0 : false;\n\t\t\t}\n\t\t}\n\n\t\t// Handle numbers: negative, out of range\n\t\tif ( active !== false ) {\n\t\t\tactive = this.tabs.index( this.tabs.eq( active ) );\n\t\t\tif ( active === -1 ) {\n\t\t\t\tactive = collapsible ? false : 0;\n\t\t\t}\n\t\t}\n\n\t\t// Don't allow collapsible: false and active: false\n\t\tif ( !collapsible && active === false && this.anchors.length ) {\n\t\t\tactive = 0;\n\t\t}\n\n\t\treturn active;\n\t},\n\n\t_getCreateEventData: function() {\n\t\treturn {\n\t\t\ttab: this.active,\n\t\t\tpanel: !this.active.length ? $() : this._getPanelForTab( this.active )\n\t\t};\n\t},\n\n\t_tabKeydown: function( event ) {\n\t\tvar focusedTab = $( $.ui.safeActiveElement( this.document[ 0 ] ) ).closest( \"li\" ),\n\t\t\tselectedIndex = this.tabs.index( focusedTab ),\n\t\t\tgoingForward = true;\n\n\t\tif ( this._handlePageNav( event ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tswitch ( event.keyCode ) {\n\t\tcase $.ui.keyCode.RIGHT:\n\t\tcase $.ui.keyCode.DOWN:\n\t\t\tselectedIndex++;\n\t\t\tbreak;\n\t\tcase $.ui.keyCode.UP:\n\t\tcase $.ui.keyCode.LEFT:\n\t\t\tgoingForward = false;\n\t\t\tselectedIndex--;\n\t\t\tbreak;\n\t\tcase $.ui.keyCode.END:\n\t\t\tselectedIndex = this.anchors.length - 1;\n\t\t\tbreak;\n\t\tcase $.ui.keyCode.HOME:\n\t\t\tselectedIndex = 0;\n\t\t\tbreak;\n\t\tcase $.ui.keyCode.SPACE:\n\n\t\t\t// Activate only, no collapsing\n\t\t\tevent.preventDefault();\n\t\t\tclearTimeout( this.activating );\n\t\t\tthis._activate( selectedIndex );\n\t\t\treturn;\n\t\tcase $.ui.keyCode.ENTER:\n\n\t\t\t// Toggle (cancel delayed activation, allow collapsing)\n\t\t\tevent.preventDefault();\n\t\t\tclearTimeout( this.activating );\n\n\t\t\t// Determine if we should collapse or activate\n\t\t\tthis._activate( selectedIndex === this.options.active ? false : selectedIndex );\n\t\t\treturn;\n\t\tdefault:\n\t\t\treturn;\n\t\t}\n\n\t\t// Focus the appropriate tab, based on which key was pressed\n\t\tevent.preventDefault();\n\t\tclearTimeout( this.activating );\n\t\tselectedIndex = this._focusNextTab( selectedIndex, goingForward );\n\n\t\t// Navigating with control/command key will prevent automatic activation\n\t\tif ( !event.ctrlKey && !event.metaKey ) {\n\n\t\t\t// Update aria-selected immediately so that AT think the tab is already selected.\n\t\t\t// Otherwise AT may confuse the user by stating that they need to activate the tab,\n\t\t\t// but the tab will already be activated by the time the announcement finishes.\n\t\t\tfocusedTab.attr( \"aria-selected\", \"false\" );\n\t\t\tthis.tabs.eq( selectedIndex ).attr( \"aria-selected\", \"true\" );\n\n\t\t\tthis.activating = this._delay( function() {\n\t\t\t\tthis.option( \"active\", selectedIndex );\n\t\t\t}, this.delay );\n\t\t}\n\t},\n\n\t_panelKeydown: function( event ) {\n\t\tif ( this._handlePageNav( event ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Ctrl+up moves focus to the current tab\n\t\tif ( event.ctrlKey && event.keyCode === $.ui.keyCode.UP ) {\n\t\t\tevent.preventDefault();\n\t\t\tthis.active.trigger( \"focus\" );\n\t\t}\n\t},\n\n\t// Alt+page up/down moves focus to the previous/next tab (and activates)\n\t_handlePageNav: function( event ) {\n\t\tif ( event.altKey && event.keyCode === $.ui.keyCode.PAGE_UP ) {\n\t\t\tthis._activate( this._focusNextTab( this.options.active - 1, false ) );\n\t\t\treturn true;\n\t\t}\n\t\tif ( event.altKey && event.keyCode === $.ui.keyCode.PAGE_DOWN ) {\n\t\t\tthis._activate( this._focusNextTab( this.options.active + 1, true ) );\n\t\t\treturn true;\n\t\t}\n\t},\n\n\t_findNextTab: function( index, goingForward ) {\n\t\tvar lastTabIndex = this.tabs.length - 1;\n\n\t\tfunction constrain() {\n\t\t\tif ( index > lastTabIndex ) {\n\t\t\t\tindex = 0;\n\t\t\t}\n\t\t\tif ( index < 0 ) {\n\t\t\t\tindex = lastTabIndex;\n\t\t\t}\n\t\t\treturn index;\n\t\t}\n\n\t\twhile ( $.inArray( constrain(), this.options.disabled ) !== -1 ) {\n\t\t\tindex = goingForward ? index + 1 : index - 1;\n\t\t}\n\n\t\treturn index;\n\t},\n\n\t_focusNextTab: function( index, goingForward ) {\n\t\tindex = this._findNextTab( index, goingForward );\n\t\tthis.tabs.eq( index ).trigger( \"focus\" );\n\t\treturn index;\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tif ( key === \"active\" ) {\n\n\t\t\t// _activate() will handle invalid values and update this.options\n\t\t\tthis._activate( value );\n\t\t\treturn;\n\t\t}\n\n\t\tthis._super( key, value );\n\n\t\tif ( key === \"collapsible\" ) {\n\t\t\tthis._toggleClass( \"ui-tabs-collapsible\", null, value );\n\n\t\t\t// Setting collapsible: false while collapsed; open first panel\n\t\t\tif ( !value && this.options.active === false ) {\n\t\t\t\tthis._activate( 0 );\n\t\t\t}\n\t\t}\n\n\t\tif ( key === \"event\" ) {\n\t\t\tthis._setupEvents( value );\n\t\t}\n\n\t\tif ( key === \"heightStyle\" ) {\n\t\t\tthis._setupHeightStyle( value );\n\t\t}\n\t},\n\n\t_sanitizeSelector: function( hash ) {\n\t\treturn hash ? hash.replace( /[!\"$%&'()*+,.\\/:;<=>?@\\[\\]\\^`{|}~]/g, \"\\\\$&\" ) : \"\";\n\t},\n\n\trefresh: function() {\n\t\tvar options = this.options,\n\t\t\tlis = this.tablist.children( \":has(a[href])\" );\n\n\t\t// Get disabled tabs from class attribute from HTML\n\t\t// this will get converted to a boolean if needed in _refresh()\n\t\toptions.disabled = $.map( lis.filter( \".ui-state-disabled\" ), function( tab ) {\n\t\t\treturn lis.index( tab );\n\t\t} );\n\n\t\tthis._processTabs();\n\n\t\t// Was collapsed or no tabs\n\t\tif ( options.active === false || !this.anchors.length ) {\n\t\t\toptions.active = false;\n\t\t\tthis.active = $();\n\n\t\t// was active, but active tab is gone\n\t\t} else if ( this.active.length && !$.contains( this.tablist[ 0 ], this.active[ 0 ] ) ) {\n\n\t\t\t// all remaining tabs are disabled\n\t\t\tif ( this.tabs.length === options.disabled.length ) {\n\t\t\t\toptions.active = false;\n\t\t\t\tthis.active = $();\n\n\t\t\t// activate previous tab\n\t\t\t} else {\n\t\t\t\tthis._activate( this._findNextTab( Math.max( 0, options.active - 1 ), false ) );\n\t\t\t}\n\n\t\t// was active, active tab still exists\n\t\t} else {\n\n\t\t\t// make sure active index is correct\n\t\t\toptions.active = this.tabs.index( this.active );\n\t\t}\n\n\t\tthis._refresh();\n\t},\n\n\t_refresh: function() {\n\t\tthis._setOptionDisabled( this.options.disabled );\n\t\tthis._setupEvents( this.options.event );\n\t\tthis._setupHeightStyle( this.options.heightStyle );\n\n\t\tthis.tabs.not( this.active ).attr( {\n\t\t\t\"aria-selected\": \"false\",\n\t\t\t\"aria-expanded\": \"false\",\n\t\t\ttabIndex: -1\n\t\t} );\n\t\tthis.panels.not( this._getPanelForTab( this.active ) )\n\t\t\t.hide()\n\t\t\t.attr( {\n\t\t\t\t\"aria-hidden\": \"true\"\n\t\t\t} );\n\n\t\t// Make sure one tab is in the tab order\n\t\tif ( !this.active.length ) {\n\t\t\tthis.tabs.eq( 0 ).attr( \"tabIndex\", 0 );\n\t\t} else {\n\t\t\tthis.active\n\t\t\t\t.attr( {\n\t\t\t\t\t\"aria-selected\": \"true\",\n\t\t\t\t\t\"aria-expanded\": \"true\",\n\t\t\t\t\ttabIndex: 0\n\t\t\t\t} );\n\t\t\tthis._addClass( this.active, \"ui-tabs-active\", \"ui-state-active\" );\n\t\t\tthis._getPanelForTab( this.active )\n\t\t\t\t.show()\n\t\t\t\t.attr( {\n\t\t\t\t\t\"aria-hidden\": \"false\"\n\t\t\t\t} );\n\t\t}\n\t},\n\n\t_processTabs: function() {\n\t\tvar that = this,\n\t\t\tprevTabs = this.tabs,\n\t\t\tprevAnchors = this.anchors,\n\t\t\tprevPanels = this.panels;\n\n\t\tthis.tablist = this._getList().attr( \"role\", \"tablist\" );\n\t\tthis._addClass( this.tablist, \"ui-tabs-nav\",\n\t\t\t\"ui-helper-reset ui-helper-clearfix ui-widget-header\" );\n\n\t\t// Prevent users from focusing disabled tabs via click\n\t\tthis.tablist\n\t\t\t.on( \"mousedown\" + this.eventNamespace, \"> li\", function( event ) {\n\t\t\t\tif ( $( this ).is( \".ui-state-disabled\" ) ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t} )\n\n\t\t\t// Support: IE <9\n\t\t\t// Preventing the default action in mousedown doesn't prevent IE\n\t\t\t// from focusing the element, so if the anchor gets focused, blur.\n\t\t\t// We don't have to worry about focusing the previously focused\n\t\t\t// element since clicking on a non-focusable element should focus\n\t\t\t// the body anyway.\n\t\t\t.on( \"focus\" + this.eventNamespace, \".ui-tabs-anchor\", function() {\n\t\t\t\tif ( $( this ).closest( \"li\" ).is( \".ui-state-disabled\" ) ) {\n\t\t\t\t\tthis.blur();\n\t\t\t\t}\n\t\t\t} );\n\n\t\tthis.tabs = this.tablist.find( \"> li:has(a[href])\" )\n\t\t\t.attr( {\n\t\t\t\trole: \"tab\",\n\t\t\t\ttabIndex: -1\n\t\t\t} );\n\t\tthis._addClass( this.tabs, \"ui-tabs-tab\", \"ui-state-default\" );\n\n\t\tthis.anchors = this.tabs.map( function() {\n\t\t\treturn $( \"a\", this )[ 0 ];\n\t\t} )\n\t\t\t.attr( {\n\t\t\t\trole: \"presentation\",\n\t\t\t\ttabIndex: -1\n\t\t\t} );\n\t\tthis._addClass( this.anchors, \"ui-tabs-anchor\" );\n\n\t\tthis.panels = $();\n\n\t\tthis.anchors.each( function( i, anchor ) {\n\t\t\tvar selector, panel, panelId,\n\t\t\t\tanchorId = $( anchor ).uniqueId().attr( \"id\" ),\n\t\t\t\ttab = $( anchor ).closest( \"li\" ),\n\t\t\t\toriginalAriaControls = tab.attr( \"aria-controls\" );\n\n\t\t\t// Inline tab\n\t\t\tif ( that._isLocal( anchor ) ) {\n\t\t\t\tselector = anchor.hash;\n\t\t\t\tpanelId = selector.substring( 1 );\n\t\t\t\tpanel = that.element.find( that._sanitizeSelector( selector ) );\n\n\t\t\t// remote tab\n\t\t\t} else {\n\n\t\t\t\t// If the tab doesn't already have aria-controls,\n\t\t\t\t// generate an id by using a throw-away element\n\t\t\t\tpanelId = tab.attr( \"aria-controls\" ) || $( {} ).uniqueId()[ 0 ].id;\n\t\t\t\tselector = \"#\" + panelId;\n\t\t\t\tpanel = that.element.find( selector );\n\t\t\t\tif ( !panel.length ) {\n\t\t\t\t\tpanel = that._createPanel( panelId );\n\t\t\t\t\tpanel.insertAfter( that.panels[ i - 1 ] || that.tablist );\n\t\t\t\t}\n\t\t\t\tpanel.attr( \"aria-live\", \"polite\" );\n\t\t\t}\n\n\t\t\tif ( panel.length ) {\n\t\t\t\tthat.panels = that.panels.add( panel );\n\t\t\t}\n\t\t\tif ( originalAriaControls ) {\n\t\t\t\ttab.data( \"ui-tabs-aria-controls\", originalAriaControls );\n\t\t\t}\n\t\t\ttab.attr( {\n\t\t\t\t\"aria-controls\": panelId,\n\t\t\t\t\"aria-labelledby\": anchorId\n\t\t\t} );\n\t\t\tpanel.attr( \"aria-labelledby\", anchorId );\n\t\t} );\n\n\t\tthis.panels.attr( \"role\", \"tabpanel\" );\n\t\tthis._addClass( this.panels, \"ui-tabs-panel\", \"ui-widget-content\" );\n\n\t\t// Avoid memory leaks (#10056)\n\t\tif ( prevTabs ) {\n\t\t\tthis._off( prevTabs.not( this.tabs ) );\n\t\t\tthis._off( prevAnchors.not( this.anchors ) );\n\t\t\tthis._off( prevPanels.not( this.panels ) );\n\t\t}\n\t},\n\n\t// Allow overriding how to find the list for rare usage scenarios (#7715)\n\t_getList: function() {\n\t\treturn this.tablist || this.element.find( \"ol, ul\" ).eq( 0 );\n\t},\n\n\t_createPanel: function( id ) {\n\t\treturn $( \"<div>\" )\n\t\t\t.attr( \"id\", id )\n\t\t\t.data( \"ui-tabs-destroy\", true );\n\t},\n\n\t_setOptionDisabled: function( disabled ) {\n\t\tvar currentItem, li, i;\n\n\t\tif ( $.isArray( disabled ) ) {\n\t\t\tif ( !disabled.length ) {\n\t\t\t\tdisabled = false;\n\t\t\t} else if ( disabled.length === this.anchors.length ) {\n\t\t\t\tdisabled = true;\n\t\t\t}\n\t\t}\n\n\t\t// Disable tabs\n\t\tfor ( i = 0; ( li = this.tabs[ i ] ); i++ ) {\n\t\t\tcurrentItem = $( li );\n\t\t\tif ( disabled === true || $.inArray( i, disabled ) !== -1 ) {\n\t\t\t\tcurrentItem.attr( \"aria-disabled\", \"true\" );\n\t\t\t\tthis._addClass( currentItem, null, \"ui-state-disabled\" );\n\t\t\t} else {\n\t\t\t\tcurrentItem.removeAttr( \"aria-disabled\" );\n\t\t\t\tthis._removeClass( currentItem, null, \"ui-state-disabled\" );\n\t\t\t}\n\t\t}\n\n\t\tthis.options.disabled = disabled;\n\n\t\tthis._toggleClass( this.widget(), this.widgetFullName + \"-disabled\", null,\n\t\t\tdisabled === true );\n\t},\n\n\t_setupEvents: function( event ) {\n\t\tvar events = {};\n\t\tif ( event ) {\n\t\t\t$.each( event.split( \" \" ), function( index, eventName ) {\n\t\t\t\tevents[ eventName ] = \"_eventHandler\";\n\t\t\t} );\n\t\t}\n\n\t\tthis._off( this.anchors.add( this.tabs ).add( this.panels ) );\n\n\t\t// Always prevent the default action, even when disabled\n\t\tthis._on( true, this.anchors, {\n\t\t\tclick: function( event ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\t\t} );\n\t\tthis._on( this.anchors, events );\n\t\tthis._on( this.tabs, { keydown: \"_tabKeydown\" } );\n\t\tthis._on( this.panels, { keydown: \"_panelKeydown\" } );\n\n\t\tthis._focusable( this.tabs );\n\t\tthis._hoverable( this.tabs );\n\t},\n\n\t_setupHeightStyle: function( heightStyle ) {\n\t\tvar maxHeight,\n\t\t\tparent = this.element.parent();\n\n\t\tif ( heightStyle === \"fill\" ) {\n\t\t\tmaxHeight = parent.height();\n\t\t\tmaxHeight -= this.element.outerHeight() - this.element.height();\n\n\t\t\tthis.element.siblings( \":visible\" ).each( function() {\n\t\t\t\tvar elem = $( this ),\n\t\t\t\t\tposition = elem.css( \"position\" );\n\n\t\t\t\tif ( position === \"absolute\" || position === \"fixed\" ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tmaxHeight -= elem.outerHeight( true );\n\t\t\t} );\n\n\t\t\tthis.element.children().not( this.panels ).each( function() {\n\t\t\t\tmaxHeight -= $( this ).outerHeight( true );\n\t\t\t} );\n\n\t\t\tthis.panels.each( function() {\n\t\t\t\t$( this ).height( Math.max( 0, maxHeight -\n\t\t\t\t\t$( this ).innerHeight() + $( this ).height() ) );\n\t\t\t} )\n\t\t\t\t.css( \"overflow\", \"auto\" );\n\t\t} else if ( heightStyle === \"auto\" ) {\n\t\t\tmaxHeight = 0;\n\t\t\tthis.panels.each( function() {\n\t\t\t\tmaxHeight = Math.max( maxHeight, $( this ).height( \"\" ).height() );\n\t\t\t} ).height( maxHeight );\n\t\t}\n\t},\n\n\t_eventHandler: function( event ) {\n\t\tvar options = this.options,\n\t\t\tactive = this.active,\n\t\t\tanchor = $( event.currentTarget ),\n\t\t\ttab = anchor.closest( \"li\" ),\n\t\t\tclickedIsActive = tab[ 0 ] === active[ 0 ],\n\t\t\tcollapsing = clickedIsActive && options.collapsible,\n\t\t\ttoShow = collapsing ? $() : this._getPanelForTab( tab ),\n\t\t\ttoHide = !active.length ? $() : this._getPanelForTab( active ),\n\t\t\teventData = {\n\t\t\t\toldTab: active,\n\t\t\t\toldPanel: toHide,\n\t\t\t\tnewTab: collapsing ? $() : tab,\n\t\t\t\tnewPanel: toShow\n\t\t\t};\n\n\t\tevent.preventDefault();\n\n\t\tif ( tab.hasClass( \"ui-state-disabled\" ) ||\n\n\t\t\t\t// tab is already loading\n\t\t\t\ttab.hasClass( \"ui-tabs-loading\" ) ||\n\n\t\t\t\t// can't switch durning an animation\n\t\t\t\tthis.running ||\n\n\t\t\t\t// click on active header, but not collapsible\n\t\t\t\t( clickedIsActive && !options.collapsible ) ||\n\n\t\t\t\t// allow canceling activation\n\t\t\t\t( this._trigger( \"beforeActivate\", event, eventData ) === false ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\toptions.active = collapsing ? false : this.tabs.index( tab );\n\n\t\tthis.active = clickedIsActive ? $() : tab;\n\t\tif ( this.xhr ) {\n\t\t\tthis.xhr.abort();\n\t\t}\n\n\t\tif ( !toHide.length && !toShow.length ) {\n\t\t\t$.error( \"jQuery UI Tabs: Mismatching fragment identifier.\" );\n\t\t}\n\n\t\tif ( toShow.length ) {\n\t\t\tthis.load( this.tabs.index( tab ), event );\n\t\t}\n\t\tthis._toggle( event, eventData );\n\t},\n\n\t// Handles show/hide for selecting tabs\n\t_toggle: function( event, eventData ) {\n\t\tvar that = this,\n\t\t\ttoShow = eventData.newPanel,\n\t\t\ttoHide = eventData.oldPanel;\n\n\t\tthis.running = true;\n\n\t\tfunction complete() {\n\t\t\tthat.running = false;\n\t\t\tthat._trigger( \"activate\", event, eventData );\n\t\t}\n\n\t\tfunction show() {\n\t\t\tthat._addClass( eventData.newTab.closest( \"li\" ), \"ui-tabs-active\", \"ui-state-active\" );\n\n\t\t\tif ( toShow.length && that.options.show ) {\n\t\t\t\tthat._show( toShow, that.options.show, complete );\n\t\t\t} else {\n\t\t\t\ttoShow.show();\n\t\t\t\tcomplete();\n\t\t\t}\n\t\t}\n\n\t\t// Start out by hiding, then showing, then completing\n\t\tif ( toHide.length && this.options.hide ) {\n\t\t\tthis._hide( toHide, this.options.hide, function() {\n\t\t\t\tthat._removeClass( eventData.oldTab.closest( \"li\" ),\n\t\t\t\t\t\"ui-tabs-active\", \"ui-state-active\" );\n\t\t\t\tshow();\n\t\t\t} );\n\t\t} else {\n\t\t\tthis._removeClass( eventData.oldTab.closest( \"li\" ),\n\t\t\t\t\"ui-tabs-active\", \"ui-state-active\" );\n\t\t\ttoHide.hide();\n\t\t\tshow();\n\t\t}\n\n\t\ttoHide.attr( \"aria-hidden\", \"true\" );\n\t\teventData.oldTab.attr( {\n\t\t\t\"aria-selected\": \"false\",\n\t\t\t\"aria-expanded\": \"false\"\n\t\t} );\n\n\t\t// If we're switching tabs, remove the old tab from the tab order.\n\t\t// If we're opening from collapsed state, remove the previous tab from the tab order.\n\t\t// If we're collapsing, then keep the collapsing tab in the tab order.\n\t\tif ( toShow.length && toHide.length ) {\n\t\t\teventData.oldTab.attr( \"tabIndex\", -1 );\n\t\t} else if ( toShow.length ) {\n\t\t\tthis.tabs.filter( function() {\n\t\t\t\treturn $( this ).attr( \"tabIndex\" ) === 0;\n\t\t\t} )\n\t\t\t\t.attr( \"tabIndex\", -1 );\n\t\t}\n\n\t\ttoShow.attr( \"aria-hidden\", \"false\" );\n\t\teventData.newTab.attr( {\n\t\t\t\"aria-selected\": \"true\",\n\t\t\t\"aria-expanded\": \"true\",\n\t\t\ttabIndex: 0\n\t\t} );\n\t},\n\n\t_activate: function( index ) {\n\t\tvar anchor,\n\t\t\tactive = this._findActive( index );\n\n\t\t// Trying to activate the already active panel\n\t\tif ( active[ 0 ] === this.active[ 0 ] ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Trying to collapse, simulate a click on the current active header\n\t\tif ( !active.length ) {\n\t\t\tactive = this.active;\n\t\t}\n\n\t\tanchor = active.find( \".ui-tabs-anchor\" )[ 0 ];\n\t\tthis._eventHandler( {\n\t\t\ttarget: anchor,\n\t\t\tcurrentTarget: anchor,\n\t\t\tpreventDefault: $.noop\n\t\t} );\n\t},\n\n\t_findActive: function( index ) {\n\t\treturn index === false ? $() : this.tabs.eq( index );\n\t},\n\n\t_getIndex: function( index ) {\n\n\t\t// meta-function to give users option to provide a href string instead of a numerical index.\n\t\tif ( typeof index === \"string\" ) {\n\t\t\tindex = this.anchors.index( this.anchors.filter( \"[href$='\" +\n\t\t\t\t$.ui.escapeSelector( index ) + \"']\" ) );\n\t\t}\n\n\t\treturn index;\n\t},\n\n\t_destroy: function() {\n\t\tif ( this.xhr ) {\n\t\t\tthis.xhr.abort();\n\t\t}\n\n\t\tthis.tablist\n\t\t\t.removeAttr( \"role\" )\n\t\t\t.off( this.eventNamespace );\n\n\t\tthis.anchors\n\t\t\t.removeAttr( \"role tabIndex\" )\n\t\t\t.removeUniqueId();\n\n\t\tthis.tabs.add( this.panels ).each( function() {\n\t\t\tif ( $.data( this, \"ui-tabs-destroy\" ) ) {\n\t\t\t\t$( this ).remove();\n\t\t\t} else {\n\t\t\t\t$( this ).removeAttr( \"role tabIndex \" +\n\t\t\t\t\t\"aria-live aria-busy aria-selected aria-labelledby aria-hidden aria-expanded\" );\n\t\t\t}\n\t\t} );\n\n\t\tthis.tabs.each( function() {\n\t\t\tvar li = $( this ),\n\t\t\t\tprev = li.data( \"ui-tabs-aria-controls\" );\n\t\t\tif ( prev ) {\n\t\t\t\tli\n\t\t\t\t\t.attr( \"aria-controls\", prev )\n\t\t\t\t\t.removeData( \"ui-tabs-aria-controls\" );\n\t\t\t} else {\n\t\t\t\tli.removeAttr( \"aria-controls\" );\n\t\t\t}\n\t\t} );\n\n\t\tthis.panels.show();\n\n\t\tif ( this.options.heightStyle !== \"content\" ) {\n\t\t\tthis.panels.css( \"height\", \"\" );\n\t\t}\n\t},\n\n\tenable: function( index ) {\n\t\tvar disabled = this.options.disabled;\n\t\tif ( disabled === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( index === undefined ) {\n\t\t\tdisabled = false;\n\t\t} else {\n\t\t\tindex = this._getIndex( index );\n\t\t\tif ( $.isArray( disabled ) ) {\n\t\t\t\tdisabled = $.map( disabled, function( num ) {\n\t\t\t\t\treturn num !== index ? num : null;\n\t\t\t\t} );\n\t\t\t} else {\n\t\t\t\tdisabled = $.map( this.tabs, function( li, num ) {\n\t\t\t\t\treturn num !== index ? num : null;\n\t\t\t\t} );\n\t\t\t}\n\t\t}\n\t\tthis._setOptionDisabled( disabled );\n\t},\n\n\tdisable: function( index ) {\n\t\tvar disabled = this.options.disabled;\n\t\tif ( disabled === true ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( index === undefined ) {\n\t\t\tdisabled = true;\n\t\t} else {\n\t\t\tindex = this._getIndex( index );\n\t\t\tif ( $.inArray( index, disabled ) !== -1 ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif ( $.isArray( disabled ) ) {\n\t\t\t\tdisabled = $.merge( [ index ], disabled ).sort();\n\t\t\t} else {\n\t\t\t\tdisabled = [ index ];\n\t\t\t}\n\t\t}\n\t\tthis._setOptionDisabled( disabled );\n\t},\n\n\tload: function( index, event ) {\n\t\tindex = this._getIndex( index );\n\t\tvar that = this,\n\t\t\ttab = this.tabs.eq( index ),\n\t\t\tanchor = tab.find( \".ui-tabs-anchor\" ),\n\t\t\tpanel = this._getPanelForTab( tab ),\n\t\t\teventData = {\n\t\t\t\ttab: tab,\n\t\t\t\tpanel: panel\n\t\t\t},\n\t\t\tcomplete = function( jqXHR, status ) {\n\t\t\t\tif ( status === \"abort\" ) {\n\t\t\t\t\tthat.panels.stop( false, true );\n\t\t\t\t}\n\n\t\t\t\tthat._removeClass( tab, \"ui-tabs-loading\" );\n\t\t\t\tpanel.removeAttr( \"aria-busy\" );\n\n\t\t\t\tif ( jqXHR === that.xhr ) {\n\t\t\t\t\tdelete that.xhr;\n\t\t\t\t}\n\t\t\t};\n\n\t\t// Not remote\n\t\tif ( this._isLocal( anchor[ 0 ] ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.xhr = $.ajax( this._ajaxSettings( anchor, event, eventData ) );\n\n\t\t// Support: jQuery <1.8\n\t\t// jQuery <1.8 returns false if the request is canceled in beforeSend,\n\t\t// but as of 1.8, $.ajax() always returns a jqXHR object.\n\t\tif ( this.xhr && this.xhr.statusText !== \"canceled\" ) {\n\t\t\tthis._addClass( tab, \"ui-tabs-loading\" );\n\t\t\tpanel.attr( \"aria-busy\", \"true\" );\n\n\t\t\tthis.xhr\n\t\t\t\t.done( function( response, status, jqXHR ) {\n\n\t\t\t\t\t// support: jQuery <1.8\n\t\t\t\t\t// http://bugs.jquery.com/ticket/11778\n\t\t\t\t\tsetTimeout( function() {\n\t\t\t\t\t\tpanel.html( response );\n\t\t\t\t\t\tthat._trigger( \"load\", event, eventData );\n\n\t\t\t\t\t\tcomplete( jqXHR, status );\n\t\t\t\t\t}, 1 );\n\t\t\t\t} )\n\t\t\t\t.fail( function( jqXHR, status ) {\n\n\t\t\t\t\t// support: jQuery <1.8\n\t\t\t\t\t// http://bugs.jquery.com/ticket/11778\n\t\t\t\t\tsetTimeout( function() {\n\t\t\t\t\t\tcomplete( jqXHR, status );\n\t\t\t\t\t}, 1 );\n\t\t\t\t} );\n\t\t}\n\t},\n\n\t_ajaxSettings: function( anchor, event, eventData ) {\n\t\tvar that = this;\n\t\treturn {\n\n\t\t\t// Support: IE <11 only\n\t\t\t// Strip any hash that exists to prevent errors with the Ajax request\n\t\t\turl: anchor.attr( \"href\" ).replace( /#.*$/, \"\" ),\n\t\t\tbeforeSend: function( jqXHR, settings ) {\n\t\t\t\treturn that._trigger( \"beforeLoad\", event,\n\t\t\t\t\t$.extend( { jqXHR: jqXHR, ajaxSettings: settings }, eventData ) );\n\t\t\t}\n\t\t};\n\t},\n\n\t_getPanelForTab: function( tab ) {\n\t\tvar id = $( tab ).attr( \"aria-controls\" );\n\t\treturn this.element.find( this._sanitizeSelector( \"#\" + id ) );\n\t}\n} );\n\n// DEPRECATED\n// TODO: Switch return back to widget declaration at top of file when this is removed\nif ( $.uiBackCompat !== false ) {\n\n\t// Backcompat for ui-tab class (now ui-tabs-tab)\n\t$.widget( \"ui.tabs\", $.ui.tabs, {\n\t\t_processTabs: function() {\n\t\t\tthis._superApply( arguments );\n\t\t\tthis._addClass( this.tabs, \"ui-tab\" );\n\t\t}\n\t} );\n}\n\nvar widgetsTabs = $.ui.tabs;\n\n\n/*!\n * jQuery UI Tooltip 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Tooltip\n//>>group: Widgets\n//>>description: Shows additional information for any element on hover or focus.\n//>>docs: http://api.jqueryui.com/tooltip/\n//>>demos: http://jqueryui.com/tooltip/\n//>>css.structure: ../../themes/base/core.css\n//>>css.structure: ../../themes/base/tooltip.css\n//>>css.theme: ../../themes/base/theme.css\n\n\n\n$.widget( \"ui.tooltip\", {\n\tversion: \"1.12.1\",\n\toptions: {\n\t\tclasses: {\n\t\t\t\"ui-tooltip\": \"ui-corner-all ui-widget-shadow\"\n\t\t},\n\t\tcontent: function() {\n\n\t\t\t// support: IE<9, Opera in jQuery <1.7\n\t\t\t// .text() can't accept undefined, so coerce to a string\n\t\t\tvar title = $( this ).attr( \"title\" ) || \"\";\n\n\t\t\t// Escape title, since we're going from an attribute to raw HTML\n\t\t\treturn $( \"<a>\" ).text( title ).html();\n\t\t},\n\t\thide: true,\n\n\t\t// Disabled elements have inconsistent behavior across browsers (#8661)\n\t\titems: \"[title]:not([disabled])\",\n\t\tposition: {\n\t\t\tmy: \"left top+15\",\n\t\t\tat: \"left bottom\",\n\t\t\tcollision: \"flipfit flip\"\n\t\t},\n\t\tshow: true,\n\t\ttrack: false,\n\n\t\t// Callbacks\n\t\tclose: null,\n\t\topen: null\n\t},\n\n\t_addDescribedBy: function( elem, id ) {\n\t\tvar describedby = ( elem.attr( \"aria-describedby\" ) || \"\" ).split( /\\s+/ );\n\t\tdescribedby.push( id );\n\t\telem\n\t\t\t.data( \"ui-tooltip-id\", id )\n\t\t\t.attr( \"aria-describedby\", $.trim( describedby.join( \" \" ) ) );\n\t},\n\n\t_removeDescribedBy: function( elem ) {\n\t\tvar id = elem.data( \"ui-tooltip-id\" ),\n\t\t\tdescribedby = ( elem.attr( \"aria-describedby\" ) || \"\" ).split( /\\s+/ ),\n\t\t\tindex = $.inArray( id, describedby );\n\n\t\tif ( index !== -1 ) {\n\t\t\tdescribedby.splice( index, 1 );\n\t\t}\n\n\t\telem.removeData( \"ui-tooltip-id\" );\n\t\tdescribedby = $.trim( describedby.join( \" \" ) );\n\t\tif ( describedby ) {\n\t\t\telem.attr( \"aria-describedby\", describedby );\n\t\t} else {\n\t\t\telem.removeAttr( \"aria-describedby\" );\n\t\t}\n\t},\n\n\t_create: function() {\n\t\tthis._on( {\n\t\t\tmouseover: \"open\",\n\t\t\tfocusin: \"open\"\n\t\t} );\n\n\t\t// IDs of generated tooltips, needed for destroy\n\t\tthis.tooltips = {};\n\n\t\t// IDs of parent tooltips where we removed the title attribute\n\t\tthis.parents = {};\n\n\t\t// Append the aria-live region so tooltips announce correctly\n\t\tthis.liveRegion = $( \"<div>\" )\n\t\t\t.attr( {\n\t\t\t\trole: \"log\",\n\t\t\t\t\"aria-live\": \"assertive\",\n\t\t\t\t\"aria-relevant\": \"additions\"\n\t\t\t} )\n\t\t\t.appendTo( this.document[ 0 ].body );\n\t\tthis._addClass( this.liveRegion, null, \"ui-helper-hidden-accessible\" );\n\n\t\tthis.disabledTitles = $( [] );\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tvar that = this;\n\n\t\tthis._super( key, value );\n\n\t\tif ( key === \"content\" ) {\n\t\t\t$.each( this.tooltips, function( id, tooltipData ) {\n\t\t\t\tthat._updateContent( tooltipData.element );\n\t\t\t} );\n\t\t}\n\t},\n\n\t_setOptionDisabled: function( value ) {\n\t\tthis[ value ? \"_disable\" : \"_enable\" ]();\n\t},\n\n\t_disable: function() {\n\t\tvar that = this;\n\n\t\t// Close open tooltips\n\t\t$.each( this.tooltips, function( id, tooltipData ) {\n\t\t\tvar event = $.Event( \"blur\" );\n\t\t\tevent.target = event.currentTarget = tooltipData.element[ 0 ];\n\t\t\tthat.close( event, true );\n\t\t} );\n\n\t\t// Remove title attributes to prevent native tooltips\n\t\tthis.disabledTitles = this.disabledTitles.add(\n\t\t\tthis.element.find( this.options.items ).addBack()\n\t\t\t\t.filter( function() {\n\t\t\t\t\tvar element = $( this );\n\t\t\t\t\tif ( element.is( \"[title]\" ) ) {\n\t\t\t\t\t\treturn element\n\t\t\t\t\t\t\t.data( \"ui-tooltip-title\", element.attr( \"title\" ) )\n\t\t\t\t\t\t\t.removeAttr( \"title\" );\n\t\t\t\t\t}\n\t\t\t\t} )\n\t\t);\n\t},\n\n\t_enable: function() {\n\n\t\t// restore title attributes\n\t\tthis.disabledTitles.each( function() {\n\t\t\tvar element = $( this );\n\t\t\tif ( element.data( \"ui-tooltip-title\" ) ) {\n\t\t\t\telement.attr( \"title\", element.data( \"ui-tooltip-title\" ) );\n\t\t\t}\n\t\t} );\n\t\tthis.disabledTitles = $( [] );\n\t},\n\n\topen: function( event ) {\n\t\tvar that = this,\n\t\t\ttarget = $( event ? event.target : this.element )\n\n\t\t\t\t// we need closest here due to mouseover bubbling,\n\t\t\t\t// but always pointing at the same event target\n\t\t\t\t.closest( this.options.items );\n\n\t\t// No element to show a tooltip for or the tooltip is already open\n\t\tif ( !target.length || target.data( \"ui-tooltip-id\" ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( target.attr( \"title\" ) ) {\n\t\t\ttarget.data( \"ui-tooltip-title\", target.attr( \"title\" ) );\n\t\t}\n\n\t\ttarget.data( \"ui-tooltip-open\", true );\n\n\t\t// Kill parent tooltips, custom or native, for hover\n\t\tif ( event && event.type === \"mouseover\" ) {\n\t\t\ttarget.parents().each( function() {\n\t\t\t\tvar parent = $( this ),\n\t\t\t\t\tblurEvent;\n\t\t\t\tif ( parent.data( \"ui-tooltip-open\" ) ) {\n\t\t\t\t\tblurEvent = $.Event( \"blur\" );\n\t\t\t\t\tblurEvent.target = blurEvent.currentTarget = this;\n\t\t\t\t\tthat.close( blurEvent, true );\n\t\t\t\t}\n\t\t\t\tif ( parent.attr( \"title\" ) ) {\n\t\t\t\t\tparent.uniqueId();\n\t\t\t\t\tthat.parents[ this.id ] = {\n\t\t\t\t\t\telement: this,\n\t\t\t\t\t\ttitle: parent.attr( \"title\" )\n\t\t\t\t\t};\n\t\t\t\t\tparent.attr( \"title\", \"\" );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\tthis._registerCloseHandlers( event, target );\n\t\tthis._updateContent( target, event );\n\t},\n\n\t_updateContent: function( target, event ) {\n\t\tvar content,\n\t\t\tcontentOption = this.options.content,\n\t\t\tthat = this,\n\t\t\teventType = event ? event.type : null;\n\n\t\tif ( typeof contentOption === \"string\" || contentOption.nodeType ||\n\t\t\t\tcontentOption.jquery ) {\n\t\t\treturn this._open( event, target, contentOption );\n\t\t}\n\n\t\tcontent = contentOption.call( target[ 0 ], function( response ) {\n\n\t\t\t// IE may instantly serve a cached response for ajax requests\n\t\t\t// delay this call to _open so the other call to _open runs first\n\t\t\tthat._delay( function() {\n\n\t\t\t\t// Ignore async response if tooltip was closed already\n\t\t\t\tif ( !target.data( \"ui-tooltip-open\" ) ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// JQuery creates a special event for focusin when it doesn't\n\t\t\t\t// exist natively. To improve performance, the native event\n\t\t\t\t// object is reused and the type is changed. Therefore, we can't\n\t\t\t\t// rely on the type being correct after the event finished\n\t\t\t\t// bubbling, so we set it back to the previous value. (#8740)\n\t\t\t\tif ( event ) {\n\t\t\t\t\tevent.type = eventType;\n\t\t\t\t}\n\t\t\t\tthis._open( event, target, response );\n\t\t\t} );\n\t\t} );\n\t\tif ( content ) {\n\t\t\tthis._open( event, target, content );\n\t\t}\n\t},\n\n\t_open: function( event, target, content ) {\n\t\tvar tooltipData, tooltip, delayedShow, a11yContent,\n\t\t\tpositionOption = $.extend( {}, this.options.position );\n\n\t\tif ( !content ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Content can be updated multiple times. If the tooltip already\n\t\t// exists, then just update the content and bail.\n\t\ttooltipData = this._find( target );\n\t\tif ( tooltipData ) {\n\t\t\ttooltipData.tooltip.find( \".ui-tooltip-content\" ).html( content );\n\t\t\treturn;\n\t\t}\n\n\t\t// If we have a title, clear it to prevent the native tooltip\n\t\t// we have to check first to avoid defining a title if none exists\n\t\t// (we don't want to cause an element to start matching [title])\n\t\t//\n\t\t// We use removeAttr only for key events, to allow IE to export the correct\n\t\t// accessible attributes. For mouse events, set to empty string to avoid\n\t\t// native tooltip showing up (happens only when removing inside mouseover).\n\t\tif ( target.is( \"[title]\" ) ) {\n\t\t\tif ( event && event.type === \"mouseover\" ) {\n\t\t\t\ttarget.attr( \"title\", \"\" );\n\t\t\t} else {\n\t\t\t\ttarget.removeAttr( \"title\" );\n\t\t\t}\n\t\t}\n\n\t\ttooltipData = this._tooltip( target );\n\t\ttooltip = tooltipData.tooltip;\n\t\tthis._addDescribedBy( target, tooltip.attr( \"id\" ) );\n\t\ttooltip.find( \".ui-tooltip-content\" ).html( content );\n\n\t\t// Support: Voiceover on OS X, JAWS on IE <= 9\n\t\t// JAWS announces deletions even when aria-relevant=\"additions\"\n\t\t// Voiceover will sometimes re-read the entire log region's contents from the beginning\n\t\tthis.liveRegion.children().hide();\n\t\ta11yContent = $( \"<div>\" ).html( tooltip.find( \".ui-tooltip-content\" ).html() );\n\t\ta11yContent.removeAttr( \"name\" ).find( \"[name]\" ).removeAttr( \"name\" );\n\t\ta11yContent.removeAttr( \"id\" ).find( \"[id]\" ).removeAttr( \"id\" );\n\t\ta11yContent.appendTo( this.liveRegion );\n\n\t\tfunction position( event ) {\n\t\t\tpositionOption.of = event;\n\t\t\tif ( tooltip.is( \":hidden\" ) ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\ttooltip.position( positionOption );\n\t\t}\n\t\tif ( this.options.track && event && /^mouse/.test( event.type ) ) {\n\t\t\tthis._on( this.document, {\n\t\t\t\tmousemove: position\n\t\t\t} );\n\n\t\t\t// trigger once to override element-relative positioning\n\t\t\tposition( event );\n\t\t} else {\n\t\t\ttooltip.position( $.extend( {\n\t\t\t\tof: target\n\t\t\t}, this.options.position ) );\n\t\t}\n\n\t\ttooltip.hide();\n\n\t\tthis._show( tooltip, this.options.show );\n\n\t\t// Handle tracking tooltips that are shown with a delay (#8644). As soon\n\t\t// as the tooltip is visible, position the tooltip using the most recent\n\t\t// event.\n\t\t// Adds the check to add the timers only when both delay and track options are set (#14682)\n\t\tif ( this.options.track && this.options.show && this.options.show.delay ) {\n\t\t\tdelayedShow = this.delayedShow = setInterval( function() {\n\t\t\t\tif ( tooltip.is( \":visible\" ) ) {\n\t\t\t\t\tposition( positionOption.of );\n\t\t\t\t\tclearInterval( delayedShow );\n\t\t\t\t}\n\t\t\t}, $.fx.interval );\n\t\t}\n\n\t\tthis._trigger( \"open\", event, { tooltip: tooltip } );\n\t},\n\n\t_registerCloseHandlers: function( event, target ) {\n\t\tvar events = {\n\t\t\tkeyup: function( event ) {\n\t\t\t\tif ( event.keyCode === $.ui.keyCode.ESCAPE ) {\n\t\t\t\t\tvar fakeEvent = $.Event( event );\n\t\t\t\t\tfakeEvent.currentTarget = target[ 0 ];\n\t\t\t\t\tthis.close( fakeEvent, true );\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\t// Only bind remove handler for delegated targets. Non-delegated\n\t\t// tooltips will handle this in destroy.\n\t\tif ( target[ 0 ] !== this.element[ 0 ] ) {\n\t\t\tevents.remove = function() {\n\t\t\t\tthis._removeTooltip( this._find( target ).tooltip );\n\t\t\t};\n\t\t}\n\n\t\tif ( !event || event.type === \"mouseover\" ) {\n\t\t\tevents.mouseleave = \"close\";\n\t\t}\n\t\tif ( !event || event.type === \"focusin\" ) {\n\t\t\tevents.focusout = \"close\";\n\t\t}\n\t\tthis._on( true, target, events );\n\t},\n\n\tclose: function( event ) {\n\t\tvar tooltip,\n\t\t\tthat = this,\n\t\t\ttarget = $( event ? event.currentTarget : this.element ),\n\t\t\ttooltipData = this._find( target );\n\n\t\t// The tooltip may already be closed\n\t\tif ( !tooltipData ) {\n\n\t\t\t// We set ui-tooltip-open immediately upon open (in open()), but only set the\n\t\t\t// additional data once there's actually content to show (in _open()). So even if the\n\t\t\t// tooltip doesn't have full data, we always remove ui-tooltip-open in case we're in\n\t\t\t// the period between open() and _open().\n\t\t\ttarget.removeData( \"ui-tooltip-open\" );\n\t\t\treturn;\n\t\t}\n\n\t\ttooltip = tooltipData.tooltip;\n\n\t\t// Disabling closes the tooltip, so we need to track when we're closing\n\t\t// to avoid an infinite loop in case the tooltip becomes disabled on close\n\t\tif ( tooltipData.closing ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Clear the interval for delayed tracking tooltips\n\t\tclearInterval( this.delayedShow );\n\n\t\t// Only set title if we had one before (see comment in _open())\n\t\t// If the title attribute has changed since open(), don't restore\n\t\tif ( target.data( \"ui-tooltip-title\" ) && !target.attr( \"title\" ) ) {\n\t\t\ttarget.attr( \"title\", target.data( \"ui-tooltip-title\" ) );\n\t\t}\n\n\t\tthis._removeDescribedBy( target );\n\n\t\ttooltipData.hiding = true;\n\t\ttooltip.stop( true );\n\t\tthis._hide( tooltip, this.options.hide, function() {\n\t\t\tthat._removeTooltip( $( this ) );\n\t\t} );\n\n\t\ttarget.removeData( \"ui-tooltip-open\" );\n\t\tthis._off( target, \"mouseleave focusout keyup\" );\n\n\t\t// Remove 'remove' binding only on delegated targets\n\t\tif ( target[ 0 ] !== this.element[ 0 ] ) {\n\t\t\tthis._off( target, \"remove\" );\n\t\t}\n\t\tthis._off( this.document, \"mousemove\" );\n\n\t\tif ( event && event.type === \"mouseleave\" ) {\n\t\t\t$.each( this.parents, function( id, parent ) {\n\t\t\t\t$( parent.element ).attr( \"title\", parent.title );\n\t\t\t\tdelete that.parents[ id ];\n\t\t\t} );\n\t\t}\n\n\t\ttooltipData.closing = true;\n\t\tthis._trigger( \"close\", event, { tooltip: tooltip } );\n\t\tif ( !tooltipData.hiding ) {\n\t\t\ttooltipData.closing = false;\n\t\t}\n\t},\n\n\t_tooltip: function( element ) {\n\t\tvar tooltip = $( \"<div>\" ).attr( \"role\", \"tooltip\" ),\n\t\t\tcontent = $( \"<div>\" ).appendTo( tooltip ),\n\t\t\tid = tooltip.uniqueId().attr( \"id\" );\n\n\t\tthis._addClass( content, \"ui-tooltip-content\" );\n\t\tthis._addClass( tooltip, \"ui-tooltip\", \"ui-widget ui-widget-content\" );\n\n\t\ttooltip.appendTo( this._appendTo( element ) );\n\n\t\treturn this.tooltips[ id ] = {\n\t\t\telement: element,\n\t\t\ttooltip: tooltip\n\t\t};\n\t},\n\n\t_find: function( target ) {\n\t\tvar id = target.data( \"ui-tooltip-id\" );\n\t\treturn id ? this.tooltips[ id ] : null;\n\t},\n\n\t_removeTooltip: function( tooltip ) {\n\t\ttooltip.remove();\n\t\tdelete this.tooltips[ tooltip.attr( \"id\" ) ];\n\t},\n\n\t_appendTo: function( target ) {\n\t\tvar element = target.closest( \".ui-front, dialog\" );\n\n\t\tif ( !element.length ) {\n\t\t\telement = this.document[ 0 ].body;\n\t\t}\n\n\t\treturn element;\n\t},\n\n\t_destroy: function() {\n\t\tvar that = this;\n\n\t\t// Close open tooltips\n\t\t$.each( this.tooltips, function( id, tooltipData ) {\n\n\t\t\t// Delegate to close method to handle common cleanup\n\t\t\tvar event = $.Event( \"blur\" ),\n\t\t\t\telement = tooltipData.element;\n\t\t\tevent.target = event.currentTarget = element[ 0 ];\n\t\t\tthat.close( event, true );\n\n\t\t\t// Remove immediately; destroying an open tooltip doesn't use the\n\t\t\t// hide animation\n\t\t\t$( \"#\" + id ).remove();\n\n\t\t\t// Restore the title\n\t\t\tif ( element.data( \"ui-tooltip-title\" ) ) {\n\n\t\t\t\t// If the title attribute has changed since open(), don't restore\n\t\t\t\tif ( !element.attr( \"title\" ) ) {\n\t\t\t\t\telement.attr( \"title\", element.data( \"ui-tooltip-title\" ) );\n\t\t\t\t}\n\t\t\t\telement.removeData( \"ui-tooltip-title\" );\n\t\t\t}\n\t\t} );\n\t\tthis.liveRegion.remove();\n\t}\n} );\n\n// DEPRECATED\n// TODO: Switch return back to widget declaration at top of file when this is removed\nif ( $.uiBackCompat !== false ) {\n\n\t// Backcompat for tooltipClass option\n\t$.widget( \"ui.tooltip\", $.ui.tooltip, {\n\t\toptions: {\n\t\t\ttooltipClass: null\n\t\t},\n\t\t_tooltip: function() {\n\t\t\tvar tooltipData = this._superApply( arguments );\n\t\t\tif ( this.options.tooltipClass ) {\n\t\t\t\ttooltipData.tooltip.addClass( this.options.tooltipClass );\n\t\t\t}\n\t\t\treturn tooltipData;\n\t\t}\n\t} );\n}\n\nvar widgetsTooltip = $.ui.tooltip;\n\n\n/*!\n * jQuery UI Effects 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Effects Core\n//>>group: Effects\n// jscs:disable maximumLineLength\n//>>description: Extends the internal jQuery effects. Includes morphing and easing. Required by all other effects.\n// jscs:enable maximumLineLength\n//>>docs: http://api.jqueryui.com/category/effects-core/\n//>>demos: http://jqueryui.com/effect/\n\n\n\nvar dataSpace = \"ui-effects-\",\n\tdataSpaceStyle = \"ui-effects-style\",\n\tdataSpaceAnimated = \"ui-effects-animated\",\n\n\t// Create a local jQuery because jQuery Color relies on it and the\n\t// global may not exist with AMD and a custom build (#10199)\n\tjQuery = $;\n\n$.effects = {\n\teffect: {}\n};\n\n/*!\n * jQuery Color Animations v2.1.2\n * https://github.com/jquery/jquery-color\n *\n * Copyright 2014 jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n *\n * Date: Wed Jan 16 08:47:09 2013 -0600\n */\n( function( jQuery, undefined ) {\n\n\tvar stepHooks = \"backgroundColor borderBottomColor borderLeftColor borderRightColor \" +\n\t\t\"borderTopColor color columnRuleColor outlineColor textDecorationColor textEmphasisColor\",\n\n\t// Plusequals test for += 100 -= 100\n\trplusequals = /^([\\-+])=\\s*(\\d+\\.?\\d*)/,\n\n\t// A set of RE's that can match strings and generate color tuples.\n\tstringParsers = [ {\n\t\t\tre: /rgba?\\(\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*(?:,\\s*(\\d?(?:\\.\\d+)?)\\s*)?\\)/,\n\t\t\tparse: function( execResult ) {\n\t\t\t\treturn [\n\t\t\t\t\texecResult[ 1 ],\n\t\t\t\t\texecResult[ 2 ],\n\t\t\t\t\texecResult[ 3 ],\n\t\t\t\t\texecResult[ 4 ]\n\t\t\t\t];\n\t\t\t}\n\t\t}, {\n\t\t\tre: /rgba?\\(\\s*(\\d+(?:\\.\\d+)?)\\%\\s*,\\s*(\\d+(?:\\.\\d+)?)\\%\\s*,\\s*(\\d+(?:\\.\\d+)?)\\%\\s*(?:,\\s*(\\d?(?:\\.\\d+)?)\\s*)?\\)/,\n\t\t\tparse: function( execResult ) {\n\t\t\t\treturn [\n\t\t\t\t\texecResult[ 1 ] * 2.55,\n\t\t\t\t\texecResult[ 2 ] * 2.55,\n\t\t\t\t\texecResult[ 3 ] * 2.55,\n\t\t\t\t\texecResult[ 4 ]\n\t\t\t\t];\n\t\t\t}\n\t\t}, {\n\n\t\t\t// This regex ignores A-F because it's compared against an already lowercased string\n\t\t\tre: /#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})/,\n\t\t\tparse: function( execResult ) {\n\t\t\t\treturn [\n\t\t\t\t\tparseInt( execResult[ 1 ], 16 ),\n\t\t\t\t\tparseInt( execResult[ 2 ], 16 ),\n\t\t\t\t\tparseInt( execResult[ 3 ], 16 )\n\t\t\t\t];\n\t\t\t}\n\t\t}, {\n\n\t\t\t// This regex ignores A-F because it's compared against an already lowercased string\n\t\t\tre: /#([a-f0-9])([a-f0-9])([a-f0-9])/,\n\t\t\tparse: function( execResult ) {\n\t\t\t\treturn [\n\t\t\t\t\tparseInt( execResult[ 1 ] + execResult[ 1 ], 16 ),\n\t\t\t\t\tparseInt( execResult[ 2 ] + execResult[ 2 ], 16 ),\n\t\t\t\t\tparseInt( execResult[ 3 ] + execResult[ 3 ], 16 )\n\t\t\t\t];\n\t\t\t}\n\t\t}, {\n\t\t\tre: /hsla?\\(\\s*(\\d+(?:\\.\\d+)?)\\s*,\\s*(\\d+(?:\\.\\d+)?)\\%\\s*,\\s*(\\d+(?:\\.\\d+)?)\\%\\s*(?:,\\s*(\\d?(?:\\.\\d+)?)\\s*)?\\)/,\n\t\t\tspace: \"hsla\",\n\t\t\tparse: function( execResult ) {\n\t\t\t\treturn [\n\t\t\t\t\texecResult[ 1 ],\n\t\t\t\t\texecResult[ 2 ] / 100,\n\t\t\t\t\texecResult[ 3 ] / 100,\n\t\t\t\t\texecResult[ 4 ]\n\t\t\t\t];\n\t\t\t}\n\t\t} ],\n\n\t// JQuery.Color( )\n\tcolor = jQuery.Color = function( color, green, blue, alpha ) {\n\t\treturn new jQuery.Color.fn.parse( color, green, blue, alpha );\n\t},\n\tspaces = {\n\t\trgba: {\n\t\t\tprops: {\n\t\t\t\tred: {\n\t\t\t\t\tidx: 0,\n\t\t\t\t\ttype: \"byte\"\n\t\t\t\t},\n\t\t\t\tgreen: {\n\t\t\t\t\tidx: 1,\n\t\t\t\t\ttype: \"byte\"\n\t\t\t\t},\n\t\t\t\tblue: {\n\t\t\t\t\tidx: 2,\n\t\t\t\t\ttype: \"byte\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\thsla: {\n\t\t\tprops: {\n\t\t\t\thue: {\n\t\t\t\t\tidx: 0,\n\t\t\t\t\ttype: \"degrees\"\n\t\t\t\t},\n\t\t\t\tsaturation: {\n\t\t\t\t\tidx: 1,\n\t\t\t\t\ttype: \"percent\"\n\t\t\t\t},\n\t\t\t\tlightness: {\n\t\t\t\t\tidx: 2,\n\t\t\t\t\ttype: \"percent\"\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\tpropTypes = {\n\t\t\"byte\": {\n\t\t\tfloor: true,\n\t\t\tmax: 255\n\t\t},\n\t\t\"percent\": {\n\t\t\tmax: 1\n\t\t},\n\t\t\"degrees\": {\n\t\t\tmod: 360,\n\t\t\tfloor: true\n\t\t}\n\t},\n\tsupport = color.support = {},\n\n\t// Element for support tests\n\tsupportElem = jQuery( \"<p>\" )[ 0 ],\n\n\t// Colors = jQuery.Color.names\n\tcolors,\n\n\t// Local aliases of functions called often\n\teach = jQuery.each;\n\n// Determine rgba support immediately\nsupportElem.style.cssText = \"background-color:rgba(1,1,1,.5)\";\nsupport.rgba = supportElem.style.backgroundColor.indexOf( \"rgba\" ) > -1;\n\n// Define cache name and alpha properties\n// for rgba and hsla spaces\neach( spaces, function( spaceName, space ) {\n\tspace.cache = \"_\" + spaceName;\n\tspace.props.alpha = {\n\t\tidx: 3,\n\t\ttype: \"percent\",\n\t\tdef: 1\n\t};\n} );\n\nfunction clamp( value, prop, allowEmpty ) {\n\tvar type = propTypes[ prop.type ] || {};\n\n\tif ( value == null ) {\n\t\treturn ( allowEmpty || !prop.def ) ? null : prop.def;\n\t}\n\n\t// ~~ is an short way of doing floor for positive numbers\n\tvalue = type.floor ? ~~value : parseFloat( value );\n\n\t// IE will pass in empty strings as value for alpha,\n\t// which will hit this case\n\tif ( isNaN( value ) ) {\n\t\treturn prop.def;\n\t}\n\n\tif ( type.mod ) {\n\n\t\t// We add mod before modding to make sure that negatives values\n\t\t// get converted properly: -10 -> 350\n\t\treturn ( value + type.mod ) % type.mod;\n\t}\n\n\t// For now all property types without mod have min and max\n\treturn 0 > value ? 0 : type.max < value ? type.max : value;\n}\n\nfunction stringParse( string ) {\n\tvar inst = color(),\n\t\trgba = inst._rgba = [];\n\n\tstring = string.toLowerCase();\n\n\teach( stringParsers, function( i, parser ) {\n\t\tvar parsed,\n\t\t\tmatch = parser.re.exec( string ),\n\t\t\tvalues = match && parser.parse( match ),\n\t\t\tspaceName = parser.space || \"rgba\";\n\n\t\tif ( values ) {\n\t\t\tparsed = inst[ spaceName ]( values );\n\n\t\t\t// If this was an rgba parse the assignment might happen twice\n\t\t\t// oh well....\n\t\t\tinst[ spaces[ spaceName ].cache ] = parsed[ spaces[ spaceName ].cache ];\n\t\t\trgba = inst._rgba = parsed._rgba;\n\n\t\t\t// Exit each( stringParsers ) here because we matched\n\t\t\treturn false;\n\t\t}\n\t} );\n\n\t// Found a stringParser that handled it\n\tif ( rgba.length ) {\n\n\t\t// If this came from a parsed string, force \"transparent\" when alpha is 0\n\t\t// chrome, (and maybe others) return \"transparent\" as rgba(0,0,0,0)\n\t\tif ( rgba.join() === \"0,0,0,0\" ) {\n\t\t\tjQuery.extend( rgba, colors.transparent );\n\t\t}\n\t\treturn inst;\n\t}\n\n\t// Named colors\n\treturn colors[ string ];\n}\n\ncolor.fn = jQuery.extend( color.prototype, {\n\tparse: function( red, green, blue, alpha ) {\n\t\tif ( red === undefined ) {\n\t\t\tthis._rgba = [ null, null, null, null ];\n\t\t\treturn this;\n\t\t}\n\t\tif ( red.jquery || red.nodeType ) {\n\t\t\tred = jQuery( red ).css( green );\n\t\t\tgreen = undefined;\n\t\t}\n\n\t\tvar inst = this,\n\t\t\ttype = jQuery.type( red ),\n\t\t\trgba = this._rgba = [];\n\n\t\t// More than 1 argument specified - assume ( red, green, blue, alpha )\n\t\tif ( green !== undefined ) {\n\t\t\tred = [ red, green, blue, alpha ];\n\t\t\ttype = \"array\";\n\t\t}\n\n\t\tif ( type === \"string\" ) {\n\t\t\treturn this.parse( stringParse( red ) || colors._default );\n\t\t}\n\n\t\tif ( type === \"array\" ) {\n\t\t\teach( spaces.rgba.props, function( key, prop ) {\n\t\t\t\trgba[ prop.idx ] = clamp( red[ prop.idx ], prop );\n\t\t\t} );\n\t\t\treturn this;\n\t\t}\n\n\t\tif ( type === \"object\" ) {\n\t\t\tif ( red instanceof color ) {\n\t\t\t\teach( spaces, function( spaceName, space ) {\n\t\t\t\t\tif ( red[ space.cache ] ) {\n\t\t\t\t\t\tinst[ space.cache ] = red[ space.cache ].slice();\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t} else {\n\t\t\t\teach( spaces, function( spaceName, space ) {\n\t\t\t\t\tvar cache = space.cache;\n\t\t\t\t\teach( space.props, function( key, prop ) {\n\n\t\t\t\t\t\t// If the cache doesn't exist, and we know how to convert\n\t\t\t\t\t\tif ( !inst[ cache ] && space.to ) {\n\n\t\t\t\t\t\t\t// If the value was null, we don't need to copy it\n\t\t\t\t\t\t\t// if the key was alpha, we don't need to copy it either\n\t\t\t\t\t\t\tif ( key === \"alpha\" || red[ key ] == null ) {\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tinst[ cache ] = space.to( inst._rgba );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// This is the only case where we allow nulls for ALL properties.\n\t\t\t\t\t\t// call clamp with alwaysAllowEmpty\n\t\t\t\t\t\tinst[ cache ][ prop.idx ] = clamp( red[ key ], prop, true );\n\t\t\t\t\t} );\n\n\t\t\t\t\t// Everything defined but alpha?\n\t\t\t\t\tif ( inst[ cache ] &&\n\t\t\t\t\t\t\tjQuery.inArray( null, inst[ cache ].slice( 0, 3 ) ) < 0 ) {\n\n\t\t\t\t\t\t// Use the default of 1\n\t\t\t\t\t\tinst[ cache ][ 3 ] = 1;\n\t\t\t\t\t\tif ( space.from ) {\n\t\t\t\t\t\t\tinst._rgba = space.from( inst[ cache ] );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t},\n\tis: function( compare ) {\n\t\tvar is = color( compare ),\n\t\t\tsame = true,\n\t\t\tinst = this;\n\n\t\teach( spaces, function( _, space ) {\n\t\t\tvar localCache,\n\t\t\t\tisCache = is[ space.cache ];\n\t\t\tif ( isCache ) {\n\t\t\t\tlocalCache = inst[ space.cache ] || space.to && space.to( inst._rgba ) || [];\n\t\t\t\teach( space.props, function( _, prop ) {\n\t\t\t\t\tif ( isCache[ prop.idx ] != null ) {\n\t\t\t\t\t\tsame = ( isCache[ prop.idx ] === localCache[ prop.idx ] );\n\t\t\t\t\t\treturn same;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t}\n\t\t\treturn same;\n\t\t} );\n\t\treturn same;\n\t},\n\t_space: function() {\n\t\tvar used = [],\n\t\t\tinst = this;\n\t\teach( spaces, function( spaceName, space ) {\n\t\t\tif ( inst[ space.cache ] ) {\n\t\t\t\tused.push( spaceName );\n\t\t\t}\n\t\t} );\n\t\treturn used.pop();\n\t},\n\ttransition: function( other, distance ) {\n\t\tvar end = color( other ),\n\t\t\tspaceName = end._space(),\n\t\t\tspace = spaces[ spaceName ],\n\t\t\tstartColor = this.alpha() === 0 ? color( \"transparent\" ) : this,\n\t\t\tstart = startColor[ space.cache ] || space.to( startColor._rgba ),\n\t\t\tresult = start.slice();\n\n\t\tend = end[ space.cache ];\n\t\teach( space.props, function( key, prop ) {\n\t\t\tvar index = prop.idx,\n\t\t\t\tstartValue = start[ index ],\n\t\t\t\tendValue = end[ index ],\n\t\t\t\ttype = propTypes[ prop.type ] || {};\n\n\t\t\t// If null, don't override start value\n\t\t\tif ( endValue === null ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If null - use end\n\t\t\tif ( startValue === null ) {\n\t\t\t\tresult[ index ] = endValue;\n\t\t\t} else {\n\t\t\t\tif ( type.mod ) {\n\t\t\t\t\tif ( endValue - startValue > type.mod / 2 ) {\n\t\t\t\t\t\tstartValue += type.mod;\n\t\t\t\t\t} else if ( startValue - endValue > type.mod / 2 ) {\n\t\t\t\t\t\tstartValue -= type.mod;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tresult[ index ] = clamp( ( endValue - startValue ) * distance + startValue, prop );\n\t\t\t}\n\t\t} );\n\t\treturn this[ spaceName ]( result );\n\t},\n\tblend: function( opaque ) {\n\n\t\t// If we are already opaque - return ourself\n\t\tif ( this._rgba[ 3 ] === 1 ) {\n\t\t\treturn this;\n\t\t}\n\n\t\tvar rgb = this._rgba.slice(),\n\t\t\ta = rgb.pop(),\n\t\t\tblend = color( opaque )._rgba;\n\n\t\treturn color( jQuery.map( rgb, function( v, i ) {\n\t\t\treturn ( 1 - a ) * blend[ i ] + a * v;\n\t\t} ) );\n\t},\n\ttoRgbaString: function() {\n\t\tvar prefix = \"rgba(\",\n\t\t\trgba = jQuery.map( this._rgba, function( v, i ) {\n\t\t\t\treturn v == null ? ( i > 2 ? 1 : 0 ) : v;\n\t\t\t} );\n\n\t\tif ( rgba[ 3 ] === 1 ) {\n\t\t\trgba.pop();\n\t\t\tprefix = \"rgb(\";\n\t\t}\n\n\t\treturn prefix + rgba.join() + \")\";\n\t},\n\ttoHslaString: function() {\n\t\tvar prefix = \"hsla(\",\n\t\t\thsla = jQuery.map( this.hsla(), function( v, i ) {\n\t\t\t\tif ( v == null ) {\n\t\t\t\t\tv = i > 2 ? 1 : 0;\n\t\t\t\t}\n\n\t\t\t\t// Catch 1 and 2\n\t\t\t\tif ( i && i < 3 ) {\n\t\t\t\t\tv = Math.round( v * 100 ) + \"%\";\n\t\t\t\t}\n\t\t\t\treturn v;\n\t\t\t} );\n\n\t\tif ( hsla[ 3 ] === 1 ) {\n\t\t\thsla.pop();\n\t\t\tprefix = \"hsl(\";\n\t\t}\n\t\treturn prefix + hsla.join() + \")\";\n\t},\n\ttoHexString: function( includeAlpha ) {\n\t\tvar rgba = this._rgba.slice(),\n\t\t\talpha = rgba.pop();\n\n\t\tif ( includeAlpha ) {\n\t\t\trgba.push( ~~( alpha * 255 ) );\n\t\t}\n\n\t\treturn \"#\" + jQuery.map( rgba, function( v ) {\n\n\t\t\t// Default to 0 when nulls exist\n\t\t\tv = ( v || 0 ).toString( 16 );\n\t\t\treturn v.length === 1 ? \"0\" + v : v;\n\t\t} ).join( \"\" );\n\t},\n\ttoString: function() {\n\t\treturn this._rgba[ 3 ] === 0 ? \"transparent\" : this.toRgbaString();\n\t}\n} );\ncolor.fn.parse.prototype = color.fn;\n\n// Hsla conversions adapted from:\n// https://code.google.com/p/maashaack/source/browse/packages/graphics/trunk/src/graphics/colors/HUE2RGB.as?r=5021\n\nfunction hue2rgb( p, q, h ) {\n\th = ( h + 1 ) % 1;\n\tif ( h * 6 < 1 ) {\n\t\treturn p + ( q - p ) * h * 6;\n\t}\n\tif ( h * 2 < 1 ) {\n\t\treturn q;\n\t}\n\tif ( h * 3 < 2 ) {\n\t\treturn p + ( q - p ) * ( ( 2 / 3 ) - h ) * 6;\n\t}\n\treturn p;\n}\n\nspaces.hsla.to = function( rgba ) {\n\tif ( rgba[ 0 ] == null || rgba[ 1 ] == null || rgba[ 2 ] == null ) {\n\t\treturn [ null, null, null, rgba[ 3 ] ];\n\t}\n\tvar r = rgba[ 0 ] / 255,\n\t\tg = rgba[ 1 ] / 255,\n\t\tb = rgba[ 2 ] / 255,\n\t\ta = rgba[ 3 ],\n\t\tmax = Math.max( r, g, b ),\n\t\tmin = Math.min( r, g, b ),\n\t\tdiff = max - min,\n\t\tadd = max + min,\n\t\tl = add * 0.5,\n\t\th, s;\n\n\tif ( min === max ) {\n\t\th = 0;\n\t} else if ( r === max ) {\n\t\th = ( 60 * ( g - b ) / diff ) + 360;\n\t} else if ( g === max ) {\n\t\th = ( 60 * ( b - r ) / diff ) + 120;\n\t} else {\n\t\th = ( 60 * ( r - g ) / diff ) + 240;\n\t}\n\n\t// Chroma (diff) == 0 means greyscale which, by definition, saturation = 0%\n\t// otherwise, saturation is based on the ratio of chroma (diff) to lightness (add)\n\tif ( diff === 0 ) {\n\t\ts = 0;\n\t} else if ( l <= 0.5 ) {\n\t\ts = diff / add;\n\t} else {\n\t\ts = diff / ( 2 - add );\n\t}\n\treturn [ Math.round( h ) % 360, s, l, a == null ? 1 : a ];\n};\n\nspaces.hsla.from = function( hsla ) {\n\tif ( hsla[ 0 ] == null || hsla[ 1 ] == null || hsla[ 2 ] == null ) {\n\t\treturn [ null, null, null, hsla[ 3 ] ];\n\t}\n\tvar h = hsla[ 0 ] / 360,\n\t\ts = hsla[ 1 ],\n\t\tl = hsla[ 2 ],\n\t\ta = hsla[ 3 ],\n\t\tq = l <= 0.5 ? l * ( 1 + s ) : l + s - l * s,\n\t\tp = 2 * l - q;\n\n\treturn [\n\t\tMath.round( hue2rgb( p, q, h + ( 1 / 3 ) ) * 255 ),\n\t\tMath.round( hue2rgb( p, q, h ) * 255 ),\n\t\tMath.round( hue2rgb( p, q, h - ( 1 / 3 ) ) * 255 ),\n\t\ta\n\t];\n};\n\neach( spaces, function( spaceName, space ) {\n\tvar props = space.props,\n\t\tcache = space.cache,\n\t\tto = space.to,\n\t\tfrom = space.from;\n\n\t// Makes rgba() and hsla()\n\tcolor.fn[ spaceName ] = function( value ) {\n\n\t\t// Generate a cache for this space if it doesn't exist\n\t\tif ( to && !this[ cache ] ) {\n\t\t\tthis[ cache ] = to( this._rgba );\n\t\t}\n\t\tif ( value === undefined ) {\n\t\t\treturn this[ cache ].slice();\n\t\t}\n\n\t\tvar ret,\n\t\t\ttype = jQuery.type( value ),\n\t\t\tarr = ( type === \"array\" || type === \"object\" ) ? value : arguments,\n\t\t\tlocal = this[ cache ].slice();\n\n\t\teach( props, function( key, prop ) {\n\t\t\tvar val = arr[ type === \"object\" ? key : prop.idx ];\n\t\t\tif ( val == null ) {\n\t\t\t\tval = local[ prop.idx ];\n\t\t\t}\n\t\t\tlocal[ prop.idx ] = clamp( val, prop );\n\t\t} );\n\n\t\tif ( from ) {\n\t\t\tret = color( from( local ) );\n\t\t\tret[ cache ] = local;\n\t\t\treturn ret;\n\t\t} else {\n\t\t\treturn color( local );\n\t\t}\n\t};\n\n\t// Makes red() green() blue() alpha() hue() saturation() lightness()\n\teach( props, function( key, prop ) {\n\n\t\t// Alpha is included in more than one space\n\t\tif ( color.fn[ key ] ) {\n\t\t\treturn;\n\t\t}\n\t\tcolor.fn[ key ] = function( value ) {\n\t\t\tvar vtype = jQuery.type( value ),\n\t\t\t\tfn = ( key === \"alpha\" ? ( this._hsla ? \"hsla\" : \"rgba\" ) : spaceName ),\n\t\t\t\tlocal = this[ fn ](),\n\t\t\t\tcur = local[ prop.idx ],\n\t\t\t\tmatch;\n\n\t\t\tif ( vtype === \"undefined\" ) {\n\t\t\t\treturn cur;\n\t\t\t}\n\n\t\t\tif ( vtype === \"function\" ) {\n\t\t\t\tvalue = value.call( this, cur );\n\t\t\t\tvtype = jQuery.type( value );\n\t\t\t}\n\t\t\tif ( value == null && prop.empty ) {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\tif ( vtype === \"string\" ) {\n\t\t\t\tmatch = rplusequals.exec( value );\n\t\t\t\tif ( match ) {\n\t\t\t\t\tvalue = cur + parseFloat( match[ 2 ] ) * ( match[ 1 ] === \"+\" ? 1 : -1 );\n\t\t\t\t}\n\t\t\t}\n\t\t\tlocal[ prop.idx ] = value;\n\t\t\treturn this[ fn ]( local );\n\t\t};\n\t} );\n} );\n\n// Add cssHook and .fx.step function for each named hook.\n// accept a space separated string of properties\ncolor.hook = function( hook ) {\n\tvar hooks = hook.split( \" \" );\n\teach( hooks, function( i, hook ) {\n\t\tjQuery.cssHooks[ hook ] = {\n\t\t\tset: function( elem, value ) {\n\t\t\t\tvar parsed, curElem,\n\t\t\t\t\tbackgroundColor = \"\";\n\n\t\t\t\tif ( value !== \"transparent\" && ( jQuery.type( value ) !== \"string\" ||\n\t\t\t\t\t\t( parsed = stringParse( value ) ) ) ) {\n\t\t\t\t\tvalue = color( parsed || value );\n\t\t\t\t\tif ( !support.rgba && value._rgba[ 3 ] !== 1 ) {\n\t\t\t\t\t\tcurElem = hook === \"backgroundColor\" ? elem.parentNode : elem;\n\t\t\t\t\t\twhile (\n\t\t\t\t\t\t\t( backgroundColor === \"\" || backgroundColor === \"transparent\" ) &&\n\t\t\t\t\t\t\tcurElem && curElem.style\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tbackgroundColor = jQuery.css( curElem, \"backgroundColor\" );\n\t\t\t\t\t\t\t\tcurElem = curElem.parentNode;\n\t\t\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvalue = value.blend( backgroundColor && backgroundColor !== \"transparent\" ?\n\t\t\t\t\t\t\tbackgroundColor :\n\t\t\t\t\t\t\t\"_default\" );\n\t\t\t\t\t}\n\n\t\t\t\t\tvalue = value.toRgbaString();\n\t\t\t\t}\n\t\t\t\ttry {\n\t\t\t\t\telem.style[ hook ] = value;\n\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t// Wrapped to prevent IE from throwing errors on \"invalid\" values like\n\t\t\t\t\t// 'auto' or 'inherit'\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\tjQuery.fx.step[ hook ] = function( fx ) {\n\t\t\tif ( !fx.colorInit ) {\n\t\t\t\tfx.start = color( fx.elem, hook );\n\t\t\t\tfx.end = color( fx.end );\n\t\t\t\tfx.colorInit = true;\n\t\t\t}\n\t\t\tjQuery.cssHooks[ hook ].set( fx.elem, fx.start.transition( fx.end, fx.pos ) );\n\t\t};\n\t} );\n\n};\n\ncolor.hook( stepHooks );\n\njQuery.cssHooks.borderColor = {\n\texpand: function( value ) {\n\t\tvar expanded = {};\n\n\t\teach( [ \"Top\", \"Right\", \"Bottom\", \"Left\" ], function( i, part ) {\n\t\t\texpanded[ \"border\" + part + \"Color\" ] = value;\n\t\t} );\n\t\treturn expanded;\n\t}\n};\n\n// Basic color names only.\n// Usage of any of the other color names requires adding yourself or including\n// jquery.color.svg-names.js.\ncolors = jQuery.Color.names = {\n\n\t// 4.1. Basic color keywords\n\taqua: \"#00ffff\",\n\tblack: \"#000000\",\n\tblue: \"#0000ff\",\n\tfuchsia: \"#ff00ff\",\n\tgray: \"#808080\",\n\tgreen: \"#008000\",\n\tlime: \"#00ff00\",\n\tmaroon: \"#800000\",\n\tnavy: \"#000080\",\n\tolive: \"#808000\",\n\tpurple: \"#800080\",\n\tred: \"#ff0000\",\n\tsilver: \"#c0c0c0\",\n\tteal: \"#008080\",\n\twhite: \"#ffffff\",\n\tyellow: \"#ffff00\",\n\n\t// 4.2.3. \"transparent\" color keyword\n\ttransparent: [ null, null, null, 0 ],\n\n\t_default: \"#ffffff\"\n};\n\n} )( jQuery );\n\n/******************************************************************************/\n/****************************** CLASS ANIMATIONS ******************************/\n/******************************************************************************/\n( function() {\n\nvar classAnimationActions = [ \"add\", \"remove\", \"toggle\" ],\n\tshorthandStyles = {\n\t\tborder: 1,\n\t\tborderBottom: 1,\n\t\tborderColor: 1,\n\t\tborderLeft: 1,\n\t\tborderRight: 1,\n\t\tborderTop: 1,\n\t\tborderWidth: 1,\n\t\tmargin: 1,\n\t\tpadding: 1\n\t};\n\n$.each(\n\t[ \"borderLeftStyle\", \"borderRightStyle\", \"borderBottomStyle\", \"borderTopStyle\" ],\n\tfunction( _, prop ) {\n\t\t$.fx.step[ prop ] = function( fx ) {\n\t\t\tif ( fx.end !== \"none\" && !fx.setAttr || fx.pos === 1 && !fx.setAttr ) {\n\t\t\t\tjQuery.style( fx.elem, prop, fx.end );\n\t\t\t\tfx.setAttr = true;\n\t\t\t}\n\t\t};\n\t}\n);\n\nfunction getElementStyles( elem ) {\n\tvar key, len,\n\t\tstyle = elem.ownerDocument.defaultView ?\n\t\t\telem.ownerDocument.defaultView.getComputedStyle( elem, null ) :\n\t\t\telem.currentStyle,\n\t\tstyles = {};\n\n\tif ( style && style.length && style[ 0 ] && style[ style[ 0 ] ] ) {\n\t\tlen = style.length;\n\t\twhile ( len-- ) {\n\t\t\tkey = style[ len ];\n\t\t\tif ( typeof style[ key ] === \"string\" ) {\n\t\t\t\tstyles[ $.camelCase( key ) ] = style[ key ];\n\t\t\t}\n\t\t}\n\n\t// Support: Opera, IE <9\n\t} else {\n\t\tfor ( key in style ) {\n\t\t\tif ( typeof style[ key ] === \"string\" ) {\n\t\t\t\tstyles[ key ] = style[ key ];\n\t\t\t}\n\t\t}\n\t}\n\n\treturn styles;\n}\n\nfunction styleDifference( oldStyle, newStyle ) {\n\tvar diff = {},\n\t\tname, value;\n\n\tfor ( name in newStyle ) {\n\t\tvalue = newStyle[ name ];\n\t\tif ( oldStyle[ name ] !== value ) {\n\t\t\tif ( !shorthandStyles[ name ] ) {\n\t\t\t\tif ( $.fx.step[ name ] || !isNaN( parseFloat( value ) ) ) {\n\t\t\t\t\tdiff[ name ] = value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn diff;\n}\n\n// Support: jQuery <1.8\nif ( !$.fn.addBack ) {\n\t$.fn.addBack = function( selector ) {\n\t\treturn this.add( selector == null ?\n\t\t\tthis.prevObject : this.prevObject.filter( selector )\n\t\t);\n\t};\n}\n\n$.effects.animateClass = function( value, duration, easing, callback ) {\n\tvar o = $.speed( duration, easing, callback );\n\n\treturn this.queue( function() {\n\t\tvar animated = $( this ),\n\t\t\tbaseClass = animated.attr( \"class\" ) || \"\",\n\t\t\tapplyClassChange,\n\t\t\tallAnimations = o.children ? animated.find( \"*\" ).addBack() : animated;\n\n\t\t// Map the animated objects to store the original styles.\n\t\tallAnimations = allAnimations.map( function() {\n\t\t\tvar el = $( this );\n\t\t\treturn {\n\t\t\t\tel: el,\n\t\t\t\tstart: getElementStyles( this )\n\t\t\t};\n\t\t} );\n\n\t\t// Apply class change\n\t\tapplyClassChange = function() {\n\t\t\t$.each( classAnimationActions, function( i, action ) {\n\t\t\t\tif ( value[ action ] ) {\n\t\t\t\t\tanimated[ action + \"Class\" ]( value[ action ] );\n\t\t\t\t}\n\t\t\t} );\n\t\t};\n\t\tapplyClassChange();\n\n\t\t// Map all animated objects again - calculate new styles and diff\n\t\tallAnimations = allAnimations.map( function() {\n\t\t\tthis.end = getElementStyles( this.el[ 0 ] );\n\t\t\tthis.diff = styleDifference( this.start, this.end );\n\t\t\treturn this;\n\t\t} );\n\n\t\t// Apply original class\n\t\tanimated.attr( \"class\", baseClass );\n\n\t\t// Map all animated objects again - this time collecting a promise\n\t\tallAnimations = allAnimations.map( function() {\n\t\t\tvar styleInfo = this,\n\t\t\t\tdfd = $.Deferred(),\n\t\t\t\topts = $.extend( {}, o, {\n\t\t\t\t\tqueue: false,\n\t\t\t\t\tcomplete: function() {\n\t\t\t\t\t\tdfd.resolve( styleInfo );\n\t\t\t\t\t}\n\t\t\t\t} );\n\n\t\t\tthis.el.animate( this.diff, opts );\n\t\t\treturn dfd.promise();\n\t\t} );\n\n\t\t// Once all animations have completed:\n\t\t$.when.apply( $, allAnimations.get() ).done( function() {\n\n\t\t\t// Set the final class\n\t\t\tapplyClassChange();\n\n\t\t\t// For each animated element,\n\t\t\t// clear all css properties that were animated\n\t\t\t$.each( arguments, function() {\n\t\t\t\tvar el = this.el;\n\t\t\t\t$.each( this.diff, function( key ) {\n\t\t\t\t\tel.css( key, \"\" );\n\t\t\t\t} );\n\t\t\t} );\n\n\t\t\t// This is guarnteed to be there if you use jQuery.speed()\n\t\t\t// it also handles dequeuing the next anim...\n\t\t\to.complete.call( animated[ 0 ] );\n\t\t} );\n\t} );\n};\n\n$.fn.extend( {\n\taddClass: ( function( orig ) {\n\t\treturn function( classNames, speed, easing, callback ) {\n\t\t\treturn speed ?\n\t\t\t\t$.effects.animateClass.call( this,\n\t\t\t\t\t{ add: classNames }, speed, easing, callback ) :\n\t\t\t\torig.apply( this, arguments );\n\t\t};\n\t} )( $.fn.addClass ),\n\n\tremoveClass: ( function( orig ) {\n\t\treturn function( classNames, speed, easing, callback ) {\n\t\t\treturn arguments.length > 1 ?\n\t\t\t\t$.effects.animateClass.call( this,\n\t\t\t\t\t{ remove: classNames }, speed, easing, callback ) :\n\t\t\t\torig.apply( this, arguments );\n\t\t};\n\t} )( $.fn.removeClass ),\n\n\ttoggleClass: ( function( orig ) {\n\t\treturn function( classNames, force, speed, easing, callback ) {\n\t\t\tif ( typeof force === \"boolean\" || force === undefined ) {\n\t\t\t\tif ( !speed ) {\n\n\t\t\t\t\t// Without speed parameter\n\t\t\t\t\treturn orig.apply( this, arguments );\n\t\t\t\t} else {\n\t\t\t\t\treturn $.effects.animateClass.call( this,\n\t\t\t\t\t\t( force ? { add: classNames } : { remove: classNames } ),\n\t\t\t\t\t\tspeed, easing, callback );\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// Without force parameter\n\t\t\t\treturn $.effects.animateClass.call( this,\n\t\t\t\t\t{ toggle: classNames }, force, speed, easing );\n\t\t\t}\n\t\t};\n\t} )( $.fn.toggleClass ),\n\n\tswitchClass: function( remove, add, speed, easing, callback ) {\n\t\treturn $.effects.animateClass.call( this, {\n\t\t\tadd: add,\n\t\t\tremove: remove\n\t\t}, speed, easing, callback );\n\t}\n} );\n\n} )();\n\n/******************************************************************************/\n/*********************************** EFFECTS **********************************/\n/******************************************************************************/\n\n( function() {\n\nif ( $.expr && $.expr.filters && $.expr.filters.animated ) {\n\t$.expr.filters.animated = ( function( orig ) {\n\t\treturn function( elem ) {\n\t\t\treturn !!$( elem ).data( dataSpaceAnimated ) || orig( elem );\n\t\t};\n\t} )( $.expr.filters.animated );\n}\n\nif ( $.uiBackCompat !== false ) {\n\t$.extend( $.effects, {\n\n\t\t// Saves a set of properties in a data storage\n\t\tsave: function( element, set ) {\n\t\t\tvar i = 0, length = set.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( set[ i ] !== null ) {\n\t\t\t\t\telement.data( dataSpace + set[ i ], element[ 0 ].style[ set[ i ] ] );\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Restores a set of previously saved properties from a data storage\n\t\trestore: function( element, set ) {\n\t\t\tvar val, i = 0, length = set.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( set[ i ] !== null ) {\n\t\t\t\t\tval = element.data( dataSpace + set[ i ] );\n\t\t\t\t\telement.css( set[ i ], val );\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tsetMode: function( el, mode ) {\n\t\t\tif ( mode === \"toggle\" ) {\n\t\t\t\tmode = el.is( \":hidden\" ) ? \"show\" : \"hide\";\n\t\t\t}\n\t\t\treturn mode;\n\t\t},\n\n\t\t// Wraps the element around a wrapper that copies position properties\n\t\tcreateWrapper: function( element ) {\n\n\t\t\t// If the element is already wrapped, return it\n\t\t\tif ( element.parent().is( \".ui-effects-wrapper\" ) ) {\n\t\t\t\treturn element.parent();\n\t\t\t}\n\n\t\t\t// Wrap the element\n\t\t\tvar props = {\n\t\t\t\t\twidth: element.outerWidth( true ),\n\t\t\t\t\theight: element.outerHeight( true ),\n\t\t\t\t\t\"float\": element.css( \"float\" )\n\t\t\t\t},\n\t\t\t\twrapper = $( \"<div></div>\" )\n\t\t\t\t\t.addClass( \"ui-effects-wrapper\" )\n\t\t\t\t\t.css( {\n\t\t\t\t\t\tfontSize: \"100%\",\n\t\t\t\t\t\tbackground: \"transparent\",\n\t\t\t\t\t\tborder: \"none\",\n\t\t\t\t\t\tmargin: 0,\n\t\t\t\t\t\tpadding: 0\n\t\t\t\t\t} ),\n\n\t\t\t\t// Store the size in case width/height are defined in % - Fixes #5245\n\t\t\t\tsize = {\n\t\t\t\t\twidth: element.width(),\n\t\t\t\t\theight: element.height()\n\t\t\t\t},\n\t\t\t\tactive = document.activeElement;\n\n\t\t\t// Support: Firefox\n\t\t\t// Firefox incorrectly exposes anonymous content\n\t\t\t// https://bugzilla.mozilla.org/show_bug.cgi?id=561664\n\t\t\ttry {\n\t\t\t\tactive.id;\n\t\t\t} catch ( e ) {\n\t\t\t\tactive = document.body;\n\t\t\t}\n\n\t\t\telement.wrap( wrapper );\n\n\t\t\t// Fixes #7595 - Elements lose focus when wrapped.\n\t\t\tif ( element[ 0 ] === active || $.contains( element[ 0 ], active ) ) {\n\t\t\t\t$( active ).trigger( \"focus\" );\n\t\t\t}\n\n\t\t\t// Hotfix for jQuery 1.4 since some change in wrap() seems to actually\n\t\t\t// lose the reference to the wrapped element\n\t\t\twrapper = element.parent();\n\n\t\t\t// Transfer positioning properties to the wrapper\n\t\t\tif ( element.css( \"position\" ) === \"static\" ) {\n\t\t\t\twrapper.css( { position: \"relative\" } );\n\t\t\t\telement.css( { position: \"relative\" } );\n\t\t\t} else {\n\t\t\t\t$.extend( props, {\n\t\t\t\t\tposition: element.css( \"position\" ),\n\t\t\t\t\tzIndex: element.css( \"z-index\" )\n\t\t\t\t} );\n\t\t\t\t$.each( [ \"top\", \"left\", \"bottom\", \"right\" ], function( i, pos ) {\n\t\t\t\t\tprops[ pos ] = element.css( pos );\n\t\t\t\t\tif ( isNaN( parseInt( props[ pos ], 10 ) ) ) {\n\t\t\t\t\t\tprops[ pos ] = \"auto\";\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\telement.css( {\n\t\t\t\t\tposition: \"relative\",\n\t\t\t\t\ttop: 0,\n\t\t\t\t\tleft: 0,\n\t\t\t\t\tright: \"auto\",\n\t\t\t\t\tbottom: \"auto\"\n\t\t\t\t} );\n\t\t\t}\n\t\t\telement.css( size );\n\n\t\t\treturn wrapper.css( props ).show();\n\t\t},\n\n\t\tremoveWrapper: function( element ) {\n\t\t\tvar active = document.activeElement;\n\n\t\t\tif ( element.parent().is( \".ui-effects-wrapper\" ) ) {\n\t\t\t\telement.parent().replaceWith( element );\n\n\t\t\t\t// Fixes #7595 - Elements lose focus when wrapped.\n\t\t\t\tif ( element[ 0 ] === active || $.contains( element[ 0 ], active ) ) {\n\t\t\t\t\t$( active ).trigger( \"focus\" );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn element;\n\t\t}\n\t} );\n}\n\n$.extend( $.effects, {\n\tversion: \"1.12.1\",\n\n\tdefine: function( name, mode, effect ) {\n\t\tif ( !effect ) {\n\t\t\teffect = mode;\n\t\t\tmode = \"effect\";\n\t\t}\n\n\t\t$.effects.effect[ name ] = effect;\n\t\t$.effects.effect[ name ].mode = mode;\n\n\t\treturn effect;\n\t},\n\n\tscaledDimensions: function( element, percent, direction ) {\n\t\tif ( percent === 0 ) {\n\t\t\treturn {\n\t\t\t\theight: 0,\n\t\t\t\twidth: 0,\n\t\t\t\touterHeight: 0,\n\t\t\t\touterWidth: 0\n\t\t\t};\n\t\t}\n\n\t\tvar x = direction !== \"horizontal\" ? ( ( percent || 100 ) / 100 ) : 1,\n\t\t\ty = direction !== \"vertical\" ? ( ( percent || 100 ) / 100 ) : 1;\n\n\t\treturn {\n\t\t\theight: element.height() * y,\n\t\t\twidth: element.width() * x,\n\t\t\touterHeight: element.outerHeight() * y,\n\t\t\touterWidth: element.outerWidth() * x\n\t\t};\n\n\t},\n\n\tclipToBox: function( animation ) {\n\t\treturn {\n\t\t\twidth: animation.clip.right - animation.clip.left,\n\t\t\theight: animation.clip.bottom - animation.clip.top,\n\t\t\tleft: animation.clip.left,\n\t\t\ttop: animation.clip.top\n\t\t};\n\t},\n\n\t// Injects recently queued functions to be first in line (after \"inprogress\")\n\tunshift: function( element, queueLength, count ) {\n\t\tvar queue = element.queue();\n\n\t\tif ( queueLength > 1 ) {\n\t\t\tqueue.splice.apply( queue,\n\t\t\t\t[ 1, 0 ].concat( queue.splice( queueLength, count ) ) );\n\t\t}\n\t\telement.dequeue();\n\t},\n\n\tsaveStyle: function( element ) {\n\t\telement.data( dataSpaceStyle, element[ 0 ].style.cssText );\n\t},\n\n\trestoreStyle: function( element ) {\n\t\telement[ 0 ].style.cssText = element.data( dataSpaceStyle ) || \"\";\n\t\telement.removeData( dataSpaceStyle );\n\t},\n\n\tmode: function( element, mode ) {\n\t\tvar hidden = element.is( \":hidden\" );\n\n\t\tif ( mode === \"toggle\" ) {\n\t\t\tmode = hidden ? \"show\" : \"hide\";\n\t\t}\n\t\tif ( hidden ? mode === \"hide\" : mode === \"show\" ) {\n\t\t\tmode = \"none\";\n\t\t}\n\t\treturn mode;\n\t},\n\n\t// Translates a [top,left] array into a baseline value\n\tgetBaseline: function( origin, original ) {\n\t\tvar y, x;\n\n\t\tswitch ( origin[ 0 ] ) {\n\t\tcase \"top\":\n\t\t\ty = 0;\n\t\t\tbreak;\n\t\tcase \"middle\":\n\t\t\ty = 0.5;\n\t\t\tbreak;\n\t\tcase \"bottom\":\n\t\t\ty = 1;\n\t\t\tbreak;\n\t\tdefault:\n\t\t\ty = origin[ 0 ] / original.height;\n\t\t}\n\n\t\tswitch ( origin[ 1 ] ) {\n\t\tcase \"left\":\n\t\t\tx = 0;\n\t\t\tbreak;\n\t\tcase \"center\":\n\t\t\tx = 0.5;\n\t\t\tbreak;\n\t\tcase \"right\":\n\t\t\tx = 1;\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tx = origin[ 1 ] / original.width;\n\t\t}\n\n\t\treturn {\n\t\t\tx: x,\n\t\t\ty: y\n\t\t};\n\t},\n\n\t// Creates a placeholder element so that the original element can be made absolute\n\tcreatePlaceholder: function( element ) {\n\t\tvar placeholder,\n\t\t\tcssPosition = element.css( \"position\" ),\n\t\t\tposition = element.position();\n\n\t\t// Lock in margins first to account for form elements, which\n\t\t// will change margin if you explicitly set height\n\t\t// see: http://jsfiddle.net/JZSMt/3/ https://bugs.webkit.org/show_bug.cgi?id=107380\n\t\t// Support: Safari\n\t\telement.css( {\n\t\t\tmarginTop: element.css( \"marginTop\" ),\n\t\t\tmarginBottom: element.css( \"marginBottom\" ),\n\t\t\tmarginLeft: element.css( \"marginLeft\" ),\n\t\t\tmarginRight: element.css( \"marginRight\" )\n\t\t} )\n\t\t.outerWidth( element.outerWidth() )\n\t\t.outerHeight( element.outerHeight() );\n\n\t\tif ( /^(static|relative)/.test( cssPosition ) ) {\n\t\t\tcssPosition = \"absolute\";\n\n\t\t\tplaceholder = $( \"<\" + element[ 0 ].nodeName + \">\" ).insertAfter( element ).css( {\n\n\t\t\t\t// Convert inline to inline block to account for inline elements\n\t\t\t\t// that turn to inline block based on content (like img)\n\t\t\t\tdisplay: /^(inline|ruby)/.test( element.css( \"display\" ) ) ?\n\t\t\t\t\t\"inline-block\" :\n\t\t\t\t\t\"block\",\n\t\t\t\tvisibility: \"hidden\",\n\n\t\t\t\t// Margins need to be set to account for margin collapse\n\t\t\t\tmarginTop: element.css( \"marginTop\" ),\n\t\t\t\tmarginBottom: element.css( \"marginBottom\" ),\n\t\t\t\tmarginLeft: element.css( \"marginLeft\" ),\n\t\t\t\tmarginRight: element.css( \"marginRight\" ),\n\t\t\t\t\"float\": element.css( \"float\" )\n\t\t\t} )\n\t\t\t.outerWidth( element.outerWidth() )\n\t\t\t.outerHeight( element.outerHeight() )\n\t\t\t.addClass( \"ui-effects-placeholder\" );\n\n\t\t\telement.data( dataSpace + \"placeholder\", placeholder );\n\t\t}\n\n\t\telement.css( {\n\t\t\tposition: cssPosition,\n\t\t\tleft: position.left,\n\t\t\ttop: position.top\n\t\t} );\n\n\t\treturn placeholder;\n\t},\n\n\tremovePlaceholder: function( element ) {\n\t\tvar dataKey = dataSpace + \"placeholder\",\n\t\t\t\tplaceholder = element.data( dataKey );\n\n\t\tif ( placeholder ) {\n\t\t\tplaceholder.remove();\n\t\t\telement.removeData( dataKey );\n\t\t}\n\t},\n\n\t// Removes a placeholder if it exists and restores\n\t// properties that were modified during placeholder creation\n\tcleanUp: function( element ) {\n\t\t$.effects.restoreStyle( element );\n\t\t$.effects.removePlaceholder( element );\n\t},\n\n\tsetTransition: function( element, list, factor, value ) {\n\t\tvalue = value || {};\n\t\t$.each( list, function( i, x ) {\n\t\t\tvar unit = element.cssUnit( x );\n\t\t\tif ( unit[ 0 ] > 0 ) {\n\t\t\t\tvalue[ x ] = unit[ 0 ] * factor + unit[ 1 ];\n\t\t\t}\n\t\t} );\n\t\treturn value;\n\t}\n} );\n\n// Return an effect options object for the given parameters:\nfunction _normalizeArguments( effect, options, speed, callback ) {\n\n\t// Allow passing all options as the first parameter\n\tif ( $.isPlainObject( effect ) ) {\n\t\toptions = effect;\n\t\teffect = effect.effect;\n\t}\n\n\t// Convert to an object\n\teffect = { effect: effect };\n\n\t// Catch (effect, null, ...)\n\tif ( options == null ) {\n\t\toptions = {};\n\t}\n\n\t// Catch (effect, callback)\n\tif ( $.isFunction( options ) ) {\n\t\tcallback = options;\n\t\tspeed = null;\n\t\toptions = {};\n\t}\n\n\t// Catch (effect, speed, ?)\n\tif ( typeof options === \"number\" || $.fx.speeds[ options ] ) {\n\t\tcallback = speed;\n\t\tspeed = options;\n\t\toptions = {};\n\t}\n\n\t// Catch (effect, options, callback)\n\tif ( $.isFunction( speed ) ) {\n\t\tcallback = speed;\n\t\tspeed = null;\n\t}\n\n\t// Add options to effect\n\tif ( options ) {\n\t\t$.extend( effect, options );\n\t}\n\n\tspeed = speed || options.duration;\n\teffect.duration = $.fx.off ? 0 :\n\t\ttypeof speed === \"number\" ? speed :\n\t\tspeed in $.fx.speeds ? $.fx.speeds[ speed ] :\n\t\t$.fx.speeds._default;\n\n\teffect.complete = callback || options.complete;\n\n\treturn effect;\n}\n\nfunction standardAnimationOption( option ) {\n\n\t// Valid standard speeds (nothing, number, named speed)\n\tif ( !option || typeof option === \"number\" || $.fx.speeds[ option ] ) {\n\t\treturn true;\n\t}\n\n\t// Invalid strings - treat as \"normal\" speed\n\tif ( typeof option === \"string\" && !$.effects.effect[ option ] ) {\n\t\treturn true;\n\t}\n\n\t// Complete callback\n\tif ( $.isFunction( option ) ) {\n\t\treturn true;\n\t}\n\n\t// Options hash (but not naming an effect)\n\tif ( typeof option === \"object\" && !option.effect ) {\n\t\treturn true;\n\t}\n\n\t// Didn't match any standard API\n\treturn false;\n}\n\n$.fn.extend( {\n\teffect: function( /* effect, options, speed, callback */ ) {\n\t\tvar args = _normalizeArguments.apply( this, arguments ),\n\t\t\teffectMethod = $.effects.effect[ args.effect ],\n\t\t\tdefaultMode = effectMethod.mode,\n\t\t\tqueue = args.queue,\n\t\t\tqueueName = queue || \"fx\",\n\t\t\tcomplete = args.complete,\n\t\t\tmode = args.mode,\n\t\t\tmodes = [],\n\t\t\tprefilter = function( next ) {\n\t\t\t\tvar el = $( this ),\n\t\t\t\t\tnormalizedMode = $.effects.mode( el, mode ) || defaultMode;\n\n\t\t\t\t// Sentinel for duck-punching the :animated psuedo-selector\n\t\t\t\tel.data( dataSpaceAnimated, true );\n\n\t\t\t\t// Save effect mode for later use,\n\t\t\t\t// we can't just call $.effects.mode again later,\n\t\t\t\t// as the .show() below destroys the initial state\n\t\t\t\tmodes.push( normalizedMode );\n\n\t\t\t\t// See $.uiBackCompat inside of run() for removal of defaultMode in 1.13\n\t\t\t\tif ( defaultMode && ( normalizedMode === \"show\" ||\n\t\t\t\t\t\t( normalizedMode === defaultMode && normalizedMode === \"hide\" ) ) ) {\n\t\t\t\t\tel.show();\n\t\t\t\t}\n\n\t\t\t\tif ( !defaultMode || normalizedMode !== \"none\" ) {\n\t\t\t\t\t$.effects.saveStyle( el );\n\t\t\t\t}\n\n\t\t\t\tif ( $.isFunction( next ) ) {\n\t\t\t\t\tnext();\n\t\t\t\t}\n\t\t\t};\n\n\t\tif ( $.fx.off || !effectMethod ) {\n\n\t\t\t// Delegate to the original method (e.g., .show()) if possible\n\t\t\tif ( mode ) {\n\t\t\t\treturn this[ mode ]( args.duration, complete );\n\t\t\t} else {\n\t\t\t\treturn this.each( function() {\n\t\t\t\t\tif ( complete ) {\n\t\t\t\t\t\tcomplete.call( this );\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t}\n\t\t}\n\n\t\tfunction run( next ) {\n\t\t\tvar elem = $( this );\n\n\t\t\tfunction cleanup() {\n\t\t\t\telem.removeData( dataSpaceAnimated );\n\n\t\t\t\t$.effects.cleanUp( elem );\n\n\t\t\t\tif ( args.mode === \"hide\" ) {\n\t\t\t\t\telem.hide();\n\t\t\t\t}\n\n\t\t\t\tdone();\n\t\t\t}\n\n\t\t\tfunction done() {\n\t\t\t\tif ( $.isFunction( complete ) ) {\n\t\t\t\t\tcomplete.call( elem[ 0 ] );\n\t\t\t\t}\n\n\t\t\t\tif ( $.isFunction( next ) ) {\n\t\t\t\t\tnext();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override mode option on a per element basis,\n\t\t\t// as toggle can be either show or hide depending on element state\n\t\t\targs.mode = modes.shift();\n\n\t\t\tif ( $.uiBackCompat !== false && !defaultMode ) {\n\t\t\t\tif ( elem.is( \":hidden\" ) ? mode === \"hide\" : mode === \"show\" ) {\n\n\t\t\t\t\t// Call the core method to track \"olddisplay\" properly\n\t\t\t\t\telem[ mode ]();\n\t\t\t\t\tdone();\n\t\t\t\t} else {\n\t\t\t\t\teffectMethod.call( elem[ 0 ], args, done );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif ( args.mode === \"none\" ) {\n\n\t\t\t\t\t// Call the core method to track \"olddisplay\" properly\n\t\t\t\t\telem[ mode ]();\n\t\t\t\t\tdone();\n\t\t\t\t} else {\n\t\t\t\t\teffectMethod.call( elem[ 0 ], args, cleanup );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Run prefilter on all elements first to ensure that\n\t\t// any showing or hiding happens before placeholder creation,\n\t\t// which ensures that any layout changes are correctly captured.\n\t\treturn queue === false ?\n\t\t\tthis.each( prefilter ).each( run ) :\n\t\t\tthis.queue( queueName, prefilter ).queue( queueName, run );\n\t},\n\n\tshow: ( function( orig ) {\n\t\treturn function( option ) {\n\t\t\tif ( standardAnimationOption( option ) ) {\n\t\t\t\treturn orig.apply( this, arguments );\n\t\t\t} else {\n\t\t\t\tvar args = _normalizeArguments.apply( this, arguments );\n\t\t\t\targs.mode = \"show\";\n\t\t\t\treturn this.effect.call( this, args );\n\t\t\t}\n\t\t};\n\t} )( $.fn.show ),\n\n\thide: ( function( orig ) {\n\t\treturn function( option ) {\n\t\t\tif ( standardAnimationOption( option ) ) {\n\t\t\t\treturn orig.apply( this, arguments );\n\t\t\t} else {\n\t\t\t\tvar args = _normalizeArguments.apply( this, arguments );\n\t\t\t\targs.mode = \"hide\";\n\t\t\t\treturn this.effect.call( this, args );\n\t\t\t}\n\t\t};\n\t} )( $.fn.hide ),\n\n\ttoggle: ( function( orig ) {\n\t\treturn function( option ) {\n\t\t\tif ( standardAnimationOption( option ) || typeof option === \"boolean\" ) {\n\t\t\t\treturn orig.apply( this, arguments );\n\t\t\t} else {\n\t\t\t\tvar args = _normalizeArguments.apply( this, arguments );\n\t\t\t\targs.mode = \"toggle\";\n\t\t\t\treturn this.effect.call( this, args );\n\t\t\t}\n\t\t};\n\t} )( $.fn.toggle ),\n\n\tcssUnit: function( key ) {\n\t\tvar style = this.css( key ),\n\t\t\tval = [];\n\n\t\t$.each( [ \"em\", \"px\", \"%\", \"pt\" ], function( i, unit ) {\n\t\t\tif ( style.indexOf( unit ) > 0 ) {\n\t\t\t\tval = [ parseFloat( style ), unit ];\n\t\t\t}\n\t\t} );\n\t\treturn val;\n\t},\n\n\tcssClip: function( clipObj ) {\n\t\tif ( clipObj ) {\n\t\t\treturn this.css( \"clip\", \"rect(\" + clipObj.top + \"px \" + clipObj.right + \"px \" +\n\t\t\t\tclipObj.bottom + \"px \" + clipObj.left + \"px)\" );\n\t\t}\n\t\treturn parseClip( this.css( \"clip\" ), this );\n\t},\n\n\ttransfer: function( options, done ) {\n\t\tvar element = $( this ),\n\t\t\ttarget = $( options.to ),\n\t\t\ttargetFixed = target.css( \"position\" ) === \"fixed\",\n\t\t\tbody = $( \"body\" ),\n\t\t\tfixTop = targetFixed ? body.scrollTop() : 0,\n\t\t\tfixLeft = targetFixed ? body.scrollLeft() : 0,\n\t\t\tendPosition = target.offset(),\n\t\t\tanimation = {\n\t\t\t\ttop: endPosition.top - fixTop,\n\t\t\t\tleft: endPosition.left - fixLeft,\n\t\t\t\theight: target.innerHeight(),\n\t\t\t\twidth: target.innerWidth()\n\t\t\t},\n\t\t\tstartPosition = element.offset(),\n\t\t\ttransfer = $( \"<div class='ui-effects-transfer'></div>\" )\n\t\t\t\t.appendTo( \"body\" )\n\t\t\t\t.addClass( options.className )\n\t\t\t\t.css( {\n\t\t\t\t\ttop: startPosition.top - fixTop,\n\t\t\t\t\tleft: startPosition.left - fixLeft,\n\t\t\t\t\theight: element.innerHeight(),\n\t\t\t\t\twidth: element.innerWidth(),\n\t\t\t\t\tposition: targetFixed ? \"fixed\" : \"absolute\"\n\t\t\t\t} )\n\t\t\t\t.animate( animation, options.duration, options.easing, function() {\n\t\t\t\t\ttransfer.remove();\n\t\t\t\t\tif ( $.isFunction( done ) ) {\n\t\t\t\t\t\tdone();\n\t\t\t\t\t}\n\t\t\t\t} );\n\t}\n} );\n\nfunction parseClip( str, element ) {\n\t\tvar outerWidth = element.outerWidth(),\n\t\t\touterHeight = element.outerHeight(),\n\t\t\tclipRegex = /^rect\\((-?\\d*\\.?\\d*px|-?\\d+%|auto),?\\s*(-?\\d*\\.?\\d*px|-?\\d+%|auto),?\\s*(-?\\d*\\.?\\d*px|-?\\d+%|auto),?\\s*(-?\\d*\\.?\\d*px|-?\\d+%|auto)\\)$/,\n\t\t\tvalues = clipRegex.exec( str ) || [ \"\", 0, outerWidth, outerHeight, 0 ];\n\n\t\treturn {\n\t\t\ttop: parseFloat( values[ 1 ] ) || 0,\n\t\t\tright: values[ 2 ] === \"auto\" ? outerWidth : parseFloat( values[ 2 ] ),\n\t\t\tbottom: values[ 3 ] === \"auto\" ? outerHeight : parseFloat( values[ 3 ] ),\n\t\t\tleft: parseFloat( values[ 4 ] ) || 0\n\t\t};\n}\n\n$.fx.step.clip = function( fx ) {\n\tif ( !fx.clipInit ) {\n\t\tfx.start = $( fx.elem ).cssClip();\n\t\tif ( typeof fx.end === \"string\" ) {\n\t\t\tfx.end = parseClip( fx.end, fx.elem );\n\t\t}\n\t\tfx.clipInit = true;\n\t}\n\n\t$( fx.elem ).cssClip( {\n\t\ttop: fx.pos * ( fx.end.top - fx.start.top ) + fx.start.top,\n\t\tright: fx.pos * ( fx.end.right - fx.start.right ) + fx.start.right,\n\t\tbottom: fx.pos * ( fx.end.bottom - fx.start.bottom ) + fx.start.bottom,\n\t\tleft: fx.pos * ( fx.end.left - fx.start.left ) + fx.start.left\n\t} );\n};\n\n} )();\n\n/******************************************************************************/\n/*********************************** EASING ***********************************/\n/******************************************************************************/\n\n( function() {\n\n// Based on easing equations from Robert Penner (http://www.robertpenner.com/easing)\n\nvar baseEasings = {};\n\n$.each( [ \"Quad\", \"Cubic\", \"Quart\", \"Quint\", \"Expo\" ], function( i, name ) {\n\tbaseEasings[ name ] = function( p ) {\n\t\treturn Math.pow( p, i + 2 );\n\t};\n} );\n\n$.extend( baseEasings, {\n\tSine: function( p ) {\n\t\treturn 1 - Math.cos( p * Math.PI / 2 );\n\t},\n\tCirc: function( p ) {\n\t\treturn 1 - Math.sqrt( 1 - p * p );\n\t},\n\tElastic: function( p ) {\n\t\treturn p === 0 || p === 1 ? p :\n\t\t\t-Math.pow( 2, 8 * ( p - 1 ) ) * Math.sin( ( ( p - 1 ) * 80 - 7.5 ) * Math.PI / 15 );\n\t},\n\tBack: function( p ) {\n\t\treturn p * p * ( 3 * p - 2 );\n\t},\n\tBounce: function( p ) {\n\t\tvar pow2,\n\t\t\tbounce = 4;\n\n\t\twhile ( p < ( ( pow2 = Math.pow( 2, --bounce ) ) - 1 ) / 11 ) {}\n\t\treturn 1 / Math.pow( 4, 3 - bounce ) - 7.5625 * Math.pow( ( pow2 * 3 - 2 ) / 22 - p, 2 );\n\t}\n} );\n\n$.each( baseEasings, function( name, easeIn ) {\n\t$.easing[ \"easeIn\" + name ] = easeIn;\n\t$.easing[ \"easeOut\" + name ] = function( p ) {\n\t\treturn 1 - easeIn( 1 - p );\n\t};\n\t$.easing[ \"easeInOut\" + name ] = function( p ) {\n\t\treturn p < 0.5 ?\n\t\t\teaseIn( p * 2 ) / 2 :\n\t\t\t1 - easeIn( p * -2 + 2 ) / 2;\n\t};\n} );\n\n} )();\n\nvar effect = $.effects;\n\n\n/*!\n * jQuery UI Effects Blind 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Blind Effect\n//>>group: Effects\n//>>description: Blinds the element.\n//>>docs: http://api.jqueryui.com/blind-effect/\n//>>demos: http://jqueryui.com/effect/\n\n\n\nvar effectsEffectBlind = $.effects.define( \"blind\", \"hide\", function( options, done ) {\n\tvar map = {\n\t\t\tup: [ \"bottom\", \"top\" ],\n\t\t\tvertical: [ \"bottom\", \"top\" ],\n\t\t\tdown: [ \"top\", \"bottom\" ],\n\t\t\tleft: [ \"right\", \"left\" ],\n\t\t\thorizontal: [ \"right\", \"left\" ],\n\t\t\tright: [ \"left\", \"right\" ]\n\t\t},\n\t\telement = $( this ),\n\t\tdirection = options.direction || \"up\",\n\t\tstart = element.cssClip(),\n\t\tanimate = { clip: $.extend( {}, start ) },\n\t\tplaceholder = $.effects.createPlaceholder( element );\n\n\tanimate.clip[ map[ direction ][ 0 ] ] = animate.clip[ map[ direction ][ 1 ] ];\n\n\tif ( options.mode === \"show\" ) {\n\t\telement.cssClip( animate.clip );\n\t\tif ( placeholder ) {\n\t\t\tplaceholder.css( $.effects.clipToBox( animate ) );\n\t\t}\n\n\t\tanimate.clip = start;\n\t}\n\n\tif ( placeholder ) {\n\t\tplaceholder.animate( $.effects.clipToBox( animate ), options.duration, options.easing );\n\t}\n\n\telement.animate( animate, {\n\t\tqueue: false,\n\t\tduration: options.duration,\n\t\teasing: options.easing,\n\t\tcomplete: done\n\t} );\n} );\n\n\n/*!\n * jQuery UI Effects Bounce 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Bounce Effect\n//>>group: Effects\n//>>description: Bounces an element horizontally or vertically n times.\n//>>docs: http://api.jqueryui.com/bounce-effect/\n//>>demos: http://jqueryui.com/effect/\n\n\n\nvar effectsEffectBounce = $.effects.define( \"bounce\", function( options, done ) {\n\tvar upAnim, downAnim, refValue,\n\t\telement = $( this ),\n\n\t\t// Defaults:\n\t\tmode = options.mode,\n\t\thide = mode === \"hide\",\n\t\tshow = mode === \"show\",\n\t\tdirection = options.direction || \"up\",\n\t\tdistance = options.distance,\n\t\ttimes = options.times || 5,\n\n\t\t// Number of internal animations\n\t\tanims = times * 2 + ( show || hide ? 1 : 0 ),\n\t\tspeed = options.duration / anims,\n\t\teasing = options.easing,\n\n\t\t// Utility:\n\t\tref = ( direction === \"up\" || direction === \"down\" ) ? \"top\" : \"left\",\n\t\tmotion = ( direction === \"up\" || direction === \"left\" ),\n\t\ti = 0,\n\n\t\tqueuelen = element.queue().length;\n\n\t$.effects.createPlaceholder( element );\n\n\trefValue = element.css( ref );\n\n\t// Default distance for the BIGGEST bounce is the outer Distance / 3\n\tif ( !distance ) {\n\t\tdistance = element[ ref === \"top\" ? \"outerHeight\" : \"outerWidth\" ]() / 3;\n\t}\n\n\tif ( show ) {\n\t\tdownAnim = { opacity: 1 };\n\t\tdownAnim[ ref ] = refValue;\n\n\t\t// If we are showing, force opacity 0 and set the initial position\n\t\t// then do the \"first\" animation\n\t\telement\n\t\t\t.css( \"opacity\", 0 )\n\t\t\t.css( ref, motion ? -distance * 2 : distance * 2 )\n\t\t\t.animate( downAnim, speed, easing );\n\t}\n\n\t// Start at the smallest distance if we are hiding\n\tif ( hide ) {\n\t\tdistance = distance / Math.pow( 2, times - 1 );\n\t}\n\n\tdownAnim = {};\n\tdownAnim[ ref ] = refValue;\n\n\t// Bounces up/down/left/right then back to 0 -- times * 2 animations happen here\n\tfor ( ; i < times; i++ ) {\n\t\tupAnim = {};\n\t\tupAnim[ ref ] = ( motion ? \"-=\" : \"+=\" ) + distance;\n\n\t\telement\n\t\t\t.animate( upAnim, speed, easing )\n\t\t\t.animate( downAnim, speed, easing );\n\n\t\tdistance = hide ? distance * 2 : distance / 2;\n\t}\n\n\t// Last Bounce when Hiding\n\tif ( hide ) {\n\t\tupAnim = { opacity: 0 };\n\t\tupAnim[ ref ] = ( motion ? \"-=\" : \"+=\" ) + distance;\n\n\t\telement.animate( upAnim, speed, easing );\n\t}\n\n\telement.queue( done );\n\n\t$.effects.unshift( element, queuelen, anims + 1 );\n} );\n\n\n/*!\n * jQuery UI Effects Clip 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Clip Effect\n//>>group: Effects\n//>>description: Clips the element on and off like an old TV.\n//>>docs: http://api.jqueryui.com/clip-effect/\n//>>demos: http://jqueryui.com/effect/\n\n\n\nvar effectsEffectClip = $.effects.define( \"clip\", \"hide\", function( options, done ) {\n\tvar start,\n\t\tanimate = {},\n\t\telement = $( this ),\n\t\tdirection = options.direction || \"vertical\",\n\t\tboth = direction === \"both\",\n\t\thorizontal = both || direction === \"horizontal\",\n\t\tvertical = both || direction === \"vertical\";\n\n\tstart = element.cssClip();\n\tanimate.clip = {\n\t\ttop: vertical ? ( start.bottom - start.top ) / 2 : start.top,\n\t\tright: horizontal ? ( start.right - start.left ) / 2 : start.right,\n\t\tbottom: vertical ? ( start.bottom - start.top ) / 2 : start.bottom,\n\t\tleft: horizontal ? ( start.right - start.left ) / 2 : start.left\n\t};\n\n\t$.effects.createPlaceholder( element );\n\n\tif ( options.mode === \"show\" ) {\n\t\telement.cssClip( animate.clip );\n\t\tanimate.clip = start;\n\t}\n\n\telement.animate( animate, {\n\t\tqueue: false,\n\t\tduration: options.duration,\n\t\teasing: options.easing,\n\t\tcomplete: done\n\t} );\n\n} );\n\n\n/*!\n * jQuery UI Effects Drop 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Drop Effect\n//>>group: Effects\n//>>description: Moves an element in one direction and hides it at the same time.\n//>>docs: http://api.jqueryui.com/drop-effect/\n//>>demos: http://jqueryui.com/effect/\n\n\n\nvar effectsEffectDrop = $.effects.define( \"drop\", \"hide\", function( options, done ) {\n\n\tvar distance,\n\t\telement = $( this ),\n\t\tmode = options.mode,\n\t\tshow = mode === \"show\",\n\t\tdirection = options.direction || \"left\",\n\t\tref = ( direction === \"up\" || direction === \"down\" ) ? \"top\" : \"left\",\n\t\tmotion = ( direction === \"up\" || direction === \"left\" ) ? \"-=\" : \"+=\",\n\t\toppositeMotion = ( motion === \"+=\" ) ? \"-=\" : \"+=\",\n\t\tanimation = {\n\t\t\topacity: 0\n\t\t};\n\n\t$.effects.createPlaceholder( element );\n\n\tdistance = options.distance ||\n\t\telement[ ref === \"top\" ? \"outerHeight\" : \"outerWidth\" ]( true ) / 2;\n\n\tanimation[ ref ] = motion + distance;\n\n\tif ( show ) {\n\t\telement.css( animation );\n\n\t\tanimation[ ref ] = oppositeMotion + distance;\n\t\tanimation.opacity = 1;\n\t}\n\n\t// Animate\n\telement.animate( animation, {\n\t\tqueue: false,\n\t\tduration: options.duration,\n\t\teasing: options.easing,\n\t\tcomplete: done\n\t} );\n} );\n\n\n/*!\n * jQuery UI Effects Explode 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Explode Effect\n//>>group: Effects\n// jscs:disable maximumLineLength\n//>>description: Explodes an element in all directions into n pieces. Implodes an element to its original wholeness.\n// jscs:enable maximumLineLength\n//>>docs: http://api.jqueryui.com/explode-effect/\n//>>demos: http://jqueryui.com/effect/\n\n\n\nvar effectsEffectExplode = $.effects.define( \"explode\", \"hide\", function( options, done ) {\n\n\tvar i, j, left, top, mx, my,\n\t\trows = options.pieces ? Math.round( Math.sqrt( options.pieces ) ) : 3,\n\t\tcells = rows,\n\t\telement = $( this ),\n\t\tmode = options.mode,\n\t\tshow = mode === \"show\",\n\n\t\t// Show and then visibility:hidden the element before calculating offset\n\t\toffset = element.show().css( \"visibility\", \"hidden\" ).offset(),\n\n\t\t// Width and height of a piece\n\t\twidth = Math.ceil( element.outerWidth() / cells ),\n\t\theight = Math.ceil( element.outerHeight() / rows ),\n\t\tpieces = [];\n\n\t// Children animate complete:\n\tfunction childComplete() {\n\t\tpieces.push( this );\n\t\tif ( pieces.length === rows * cells ) {\n\t\t\tanimComplete();\n\t\t}\n\t}\n\n\t// Clone the element for each row and cell.\n\tfor ( i = 0; i < rows; i++ ) { // ===>\n\t\ttop = offset.top + i * height;\n\t\tmy = i - ( rows - 1 ) / 2;\n\n\t\tfor ( j = 0; j < cells; j++ ) { // |||\n\t\t\tleft = offset.left + j * width;\n\t\t\tmx = j - ( cells - 1 ) / 2;\n\n\t\t\t// Create a clone of the now hidden main element that will be absolute positioned\n\t\t\t// within a wrapper div off the -left and -top equal to size of our pieces\n\t\t\telement\n\t\t\t\t.clone()\n\t\t\t\t.appendTo( \"body\" )\n\t\t\t\t.wrap( \"<div></div>\" )\n\t\t\t\t.css( {\n\t\t\t\t\tposition: \"absolute\",\n\t\t\t\t\tvisibility: \"visible\",\n\t\t\t\t\tleft: -j * width,\n\t\t\t\t\ttop: -i * height\n\t\t\t\t} )\n\n\t\t\t\t// Select the wrapper - make it overflow: hidden and absolute positioned based on\n\t\t\t\t// where the original was located +left and +top equal to the size of pieces\n\t\t\t\t.parent()\n\t\t\t\t\t.addClass( \"ui-effects-explode\" )\n\t\t\t\t\t.css( {\n\t\t\t\t\t\tposition: \"absolute\",\n\t\t\t\t\t\toverflow: \"hidden\",\n\t\t\t\t\t\twidth: width,\n\t\t\t\t\t\theight: height,\n\t\t\t\t\t\tleft: left + ( show ? mx * width : 0 ),\n\t\t\t\t\t\ttop: top + ( show ? my * height : 0 ),\n\t\t\t\t\t\topacity: show ? 0 : 1\n\t\t\t\t\t} )\n\t\t\t\t\t.animate( {\n\t\t\t\t\t\tleft: left + ( show ? 0 : mx * width ),\n\t\t\t\t\t\ttop: top + ( show ? 0 : my * height ),\n\t\t\t\t\t\topacity: show ? 1 : 0\n\t\t\t\t\t}, options.duration || 500, options.easing, childComplete );\n\t\t}\n\t}\n\n\tfunction animComplete() {\n\t\telement.css( {\n\t\t\tvisibility: \"visible\"\n\t\t} );\n\t\t$( pieces ).remove();\n\t\tdone();\n\t}\n} );\n\n\n/*!\n * jQuery UI Effects Fade 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Fade Effect\n//>>group: Effects\n//>>description: Fades the element.\n//>>docs: http://api.jqueryui.com/fade-effect/\n//>>demos: http://jqueryui.com/effect/\n\n\n\nvar effectsEffectFade = $.effects.define( \"fade\", \"toggle\", function( options, done ) {\n\tvar show = options.mode === \"show\";\n\n\t$( this )\n\t\t.css( \"opacity\", show ? 0 : 1 )\n\t\t.animate( {\n\t\t\topacity: show ? 1 : 0\n\t\t}, {\n\t\t\tqueue: false,\n\t\t\tduration: options.duration,\n\t\t\teasing: options.easing,\n\t\t\tcomplete: done\n\t\t} );\n} );\n\n\n/*!\n * jQuery UI Effects Fold 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Fold Effect\n//>>group: Effects\n//>>description: Folds an element first horizontally and then vertically.\n//>>docs: http://api.jqueryui.com/fold-effect/\n//>>demos: http://jqueryui.com/effect/\n\n\n\nvar effectsEffectFold = $.effects.define( \"fold\", \"hide\", function( options, done ) {\n\n\t// Create element\n\tvar element = $( this ),\n\t\tmode = options.mode,\n\t\tshow = mode === \"show\",\n\t\thide = mode === \"hide\",\n\t\tsize = options.size || 15,\n\t\tpercent = /([0-9]+)%/.exec( size ),\n\t\thorizFirst = !!options.horizFirst,\n\t\tref = horizFirst ? [ \"right\", \"bottom\" ] : [ \"bottom\", \"right\" ],\n\t\tduration = options.duration / 2,\n\n\t\tplaceholder = $.effects.createPlaceholder( element ),\n\n\t\tstart = element.cssClip(),\n\t\tanimation1 = { clip: $.extend( {}, start ) },\n\t\tanimation2 = { clip: $.extend( {}, start ) },\n\n\t\tdistance = [ start[ ref[ 0 ] ], start[ ref[ 1 ] ] ],\n\n\t\tqueuelen = element.queue().length;\n\n\tif ( percent ) {\n\t\tsize = parseInt( percent[ 1 ], 10 ) / 100 * distance[ hide ? 0 : 1 ];\n\t}\n\tanimation1.clip[ ref[ 0 ] ] = size;\n\tanimation2.clip[ ref[ 0 ] ] = size;\n\tanimation2.clip[ ref[ 1 ] ] = 0;\n\n\tif ( show ) {\n\t\telement.cssClip( animation2.clip );\n\t\tif ( placeholder ) {\n\t\t\tplaceholder.css( $.effects.clipToBox( animation2 ) );\n\t\t}\n\n\t\tanimation2.clip = start;\n\t}\n\n\t// Animate\n\telement\n\t\t.queue( function( next ) {\n\t\t\tif ( placeholder ) {\n\t\t\t\tplaceholder\n\t\t\t\t\t.animate( $.effects.clipToBox( animation1 ), duration, options.easing )\n\t\t\t\t\t.animate( $.effects.clipToBox( animation2 ), duration, options.easing );\n\t\t\t}\n\n\t\t\tnext();\n\t\t} )\n\t\t.animate( animation1, duration, options.easing )\n\t\t.animate( animation2, duration, options.easing )\n\t\t.queue( done );\n\n\t$.effects.unshift( element, queuelen, 4 );\n} );\n\n\n/*!\n * jQuery UI Effects Highlight 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Highlight Effect\n//>>group: Effects\n//>>description: Highlights the background of an element in a defined color for a custom duration.\n//>>docs: http://api.jqueryui.com/highlight-effect/\n//>>demos: http://jqueryui.com/effect/\n\n\n\nvar effectsEffectHighlight = $.effects.define( \"highlight\", \"show\", function( options, done ) {\n\tvar element = $( this ),\n\t\tanimation = {\n\t\t\tbackgroundColor: element.css( \"backgroundColor\" )\n\t\t};\n\n\tif ( options.mode === \"hide\" ) {\n\t\tanimation.opacity = 0;\n\t}\n\n\t$.effects.saveStyle( element );\n\n\telement\n\t\t.css( {\n\t\t\tbackgroundImage: \"none\",\n\t\t\tbackgroundColor: options.color || \"#ffff99\"\n\t\t} )\n\t\t.animate( animation, {\n\t\t\tqueue: false,\n\t\t\tduration: options.duration,\n\t\t\teasing: options.easing,\n\t\t\tcomplete: done\n\t\t} );\n} );\n\n\n/*!\n * jQuery UI Effects Size 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Size Effect\n//>>group: Effects\n//>>description: Resize an element to a specified width and height.\n//>>docs: http://api.jqueryui.com/size-effect/\n//>>demos: http://jqueryui.com/effect/\n\n\n\nvar effectsEffectSize = $.effects.define( \"size\", function( options, done ) {\n\n\t// Create element\n\tvar baseline, factor, temp,\n\t\telement = $( this ),\n\n\t\t// Copy for children\n\t\tcProps = [ \"fontSize\" ],\n\t\tvProps = [ \"borderTopWidth\", \"borderBottomWidth\", \"paddingTop\", \"paddingBottom\" ],\n\t\thProps = [ \"borderLeftWidth\", \"borderRightWidth\", \"paddingLeft\", \"paddingRight\" ],\n\n\t\t// Set options\n\t\tmode = options.mode,\n\t\trestore = mode !== \"effect\",\n\t\tscale = options.scale || \"both\",\n\t\torigin = options.origin || [ \"middle\", \"center\" ],\n\t\tposition = element.css( \"position\" ),\n\t\tpos = element.position(),\n\t\toriginal = $.effects.scaledDimensions( element ),\n\t\tfrom = options.from || original,\n\t\tto = options.to || $.effects.scaledDimensions( element, 0 );\n\n\t$.effects.createPlaceholder( element );\n\n\tif ( mode === \"show\" ) {\n\t\ttemp = from;\n\t\tfrom = to;\n\t\tto = temp;\n\t}\n\n\t// Set scaling factor\n\tfactor = {\n\t\tfrom: {\n\t\t\ty: from.height / original.height,\n\t\t\tx: from.width / original.width\n\t\t},\n\t\tto: {\n\t\t\ty: to.height / original.height,\n\t\t\tx: to.width / original.width\n\t\t}\n\t};\n\n\t// Scale the css box\n\tif ( scale === \"box\" || scale === \"both\" ) {\n\n\t\t// Vertical props scaling\n\t\tif ( factor.from.y !== factor.to.y ) {\n\t\t\tfrom = $.effects.setTransition( element, vProps, factor.from.y, from );\n\t\t\tto = $.effects.setTransition( element, vProps, factor.to.y, to );\n\t\t}\n\n\t\t// Horizontal props scaling\n\t\tif ( factor.from.x !== factor.to.x ) {\n\t\t\tfrom = $.effects.setTransition( element, hProps, factor.from.x, from );\n\t\t\tto = $.effects.setTransition( element, hProps, factor.to.x, to );\n\t\t}\n\t}\n\n\t// Scale the content\n\tif ( scale === \"content\" || scale === \"both\" ) {\n\n\t\t// Vertical props scaling\n\t\tif ( factor.from.y !== factor.to.y ) {\n\t\t\tfrom = $.effects.setTransition( element, cProps, factor.from.y, from );\n\t\t\tto = $.effects.setTransition( element, cProps, factor.to.y, to );\n\t\t}\n\t}\n\n\t// Adjust the position properties based on the provided origin points\n\tif ( origin ) {\n\t\tbaseline = $.effects.getBaseline( origin, original );\n\t\tfrom.top = ( original.outerHeight - from.outerHeight ) * baseline.y + pos.top;\n\t\tfrom.left = ( original.outerWidth - from.outerWidth ) * baseline.x + pos.left;\n\t\tto.top = ( original.outerHeight - to.outerHeight ) * baseline.y + pos.top;\n\t\tto.left = ( original.outerWidth - to.outerWidth ) * baseline.x + pos.left;\n\t}\n\telement.css( from );\n\n\t// Animate the children if desired\n\tif ( scale === \"content\" || scale === \"both\" ) {\n\n\t\tvProps = vProps.concat( [ \"marginTop\", \"marginBottom\" ] ).concat( cProps );\n\t\thProps = hProps.concat( [ \"marginLeft\", \"marginRight\" ] );\n\n\t\t// Only animate children with width attributes specified\n\t\t// TODO: is this right? should we include anything with css width specified as well\n\t\telement.find( \"*[width]\" ).each( function() {\n\t\t\tvar child = $( this ),\n\t\t\t\tchildOriginal = $.effects.scaledDimensions( child ),\n\t\t\t\tchildFrom = {\n\t\t\t\t\theight: childOriginal.height * factor.from.y,\n\t\t\t\t\twidth: childOriginal.width * factor.from.x,\n\t\t\t\t\touterHeight: childOriginal.outerHeight * factor.from.y,\n\t\t\t\t\touterWidth: childOriginal.outerWidth * factor.from.x\n\t\t\t\t},\n\t\t\t\tchildTo = {\n\t\t\t\t\theight: childOriginal.height * factor.to.y,\n\t\t\t\t\twidth: childOriginal.width * factor.to.x,\n\t\t\t\t\touterHeight: childOriginal.height * factor.to.y,\n\t\t\t\t\touterWidth: childOriginal.width * factor.to.x\n\t\t\t\t};\n\n\t\t\t// Vertical props scaling\n\t\t\tif ( factor.from.y !== factor.to.y ) {\n\t\t\t\tchildFrom = $.effects.setTransition( child, vProps, factor.from.y, childFrom );\n\t\t\t\tchildTo = $.effects.setTransition( child, vProps, factor.to.y, childTo );\n\t\t\t}\n\n\t\t\t// Horizontal props scaling\n\t\t\tif ( factor.from.x !== factor.to.x ) {\n\t\t\t\tchildFrom = $.effects.setTransition( child, hProps, factor.from.x, childFrom );\n\t\t\t\tchildTo = $.effects.setTransition( child, hProps, factor.to.x, childTo );\n\t\t\t}\n\n\t\t\tif ( restore ) {\n\t\t\t\t$.effects.saveStyle( child );\n\t\t\t}\n\n\t\t\t// Animate children\n\t\t\tchild.css( childFrom );\n\t\t\tchild.animate( childTo, options.duration, options.easing, function() {\n\n\t\t\t\t// Restore children\n\t\t\t\tif ( restore ) {\n\t\t\t\t\t$.effects.restoreStyle( child );\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\t}\n\n\t// Animate\n\telement.animate( to, {\n\t\tqueue: false,\n\t\tduration: options.duration,\n\t\teasing: options.easing,\n\t\tcomplete: function() {\n\n\t\t\tvar offset = element.offset();\n\n\t\t\tif ( to.opacity === 0 ) {\n\t\t\t\telement.css( \"opacity\", from.opacity );\n\t\t\t}\n\n\t\t\tif ( !restore ) {\n\t\t\t\telement\n\t\t\t\t\t.css( \"position\", position === \"static\" ? \"relative\" : position )\n\t\t\t\t\t.offset( offset );\n\n\t\t\t\t// Need to save style here so that automatic style restoration\n\t\t\t\t// doesn't restore to the original styles from before the animation.\n\t\t\t\t$.effects.saveStyle( element );\n\t\t\t}\n\n\t\t\tdone();\n\t\t}\n\t} );\n\n} );\n\n\n/*!\n * jQuery UI Effects Scale 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Scale Effect\n//>>group: Effects\n//>>description: Grows or shrinks an element and its content.\n//>>docs: http://api.jqueryui.com/scale-effect/\n//>>demos: http://jqueryui.com/effect/\n\n\n\nvar effectsEffectScale = $.effects.define( \"scale\", function( options, done ) {\n\n\t// Create element\n\tvar el = $( this ),\n\t\tmode = options.mode,\n\t\tpercent = parseInt( options.percent, 10 ) ||\n\t\t\t( parseInt( options.percent, 10 ) === 0 ? 0 : ( mode !== \"effect\" ? 0 : 100 ) ),\n\n\t\tnewOptions = $.extend( true, {\n\t\t\tfrom: $.effects.scaledDimensions( el ),\n\t\t\tto: $.effects.scaledDimensions( el, percent, options.direction || \"both\" ),\n\t\t\torigin: options.origin || [ \"middle\", \"center\" ]\n\t\t}, options );\n\n\t// Fade option to support puff\n\tif ( options.fade ) {\n\t\tnewOptions.from.opacity = 1;\n\t\tnewOptions.to.opacity = 0;\n\t}\n\n\t$.effects.effect.size.call( this, newOptions, done );\n} );\n\n\n/*!\n * jQuery UI Effects Puff 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Puff Effect\n//>>group: Effects\n//>>description: Creates a puff effect by scaling the element up and hiding it at the same time.\n//>>docs: http://api.jqueryui.com/puff-effect/\n//>>demos: http://jqueryui.com/effect/\n\n\n\nvar effectsEffectPuff = $.effects.define( \"puff\", \"hide\", function( options, done ) {\n\tvar newOptions = $.extend( true, {}, options, {\n\t\tfade: true,\n\t\tpercent: parseInt( options.percent, 10 ) || 150\n\t} );\n\n\t$.effects.effect.scale.call( this, newOptions, done );\n} );\n\n\n/*!\n * jQuery UI Effects Pulsate 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Pulsate Effect\n//>>group: Effects\n//>>description: Pulsates an element n times by changing the opacity to zero and back.\n//>>docs: http://api.jqueryui.com/pulsate-effect/\n//>>demos: http://jqueryui.com/effect/\n\n\n\nvar effectsEffectPulsate = $.effects.define( \"pulsate\", \"show\", function( options, done ) {\n\tvar element = $( this ),\n\t\tmode = options.mode,\n\t\tshow = mode === \"show\",\n\t\thide = mode === \"hide\",\n\t\tshowhide = show || hide,\n\n\t\t// Showing or hiding leaves off the \"last\" animation\n\t\tanims = ( ( options.times || 5 ) * 2 ) + ( showhide ? 1 : 0 ),\n\t\tduration = options.duration / anims,\n\t\tanimateTo = 0,\n\t\ti = 1,\n\t\tqueuelen = element.queue().length;\n\n\tif ( show || !element.is( \":visible\" ) ) {\n\t\telement.css( \"opacity\", 0 ).show();\n\t\tanimateTo = 1;\n\t}\n\n\t// Anims - 1 opacity \"toggles\"\n\tfor ( ; i < anims; i++ ) {\n\t\telement.animate( { opacity: animateTo }, duration, options.easing );\n\t\tanimateTo = 1 - animateTo;\n\t}\n\n\telement.animate( { opacity: animateTo }, duration, options.easing );\n\n\telement.queue( done );\n\n\t$.effects.unshift( element, queuelen, anims + 1 );\n} );\n\n\n/*!\n * jQuery UI Effects Shake 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Shake Effect\n//>>group: Effects\n//>>description: Shakes an element horizontally or vertically n times.\n//>>docs: http://api.jqueryui.com/shake-effect/\n//>>demos: http://jqueryui.com/effect/\n\n\n\nvar effectsEffectShake = $.effects.define( \"shake\", function( options, done ) {\n\n\tvar i = 1,\n\t\telement = $( this ),\n\t\tdirection = options.direction || \"left\",\n\t\tdistance = options.distance || 20,\n\t\ttimes = options.times || 3,\n\t\tanims = times * 2 + 1,\n\t\tspeed = Math.round( options.duration / anims ),\n\t\tref = ( direction === \"up\" || direction === \"down\" ) ? \"top\" : \"left\",\n\t\tpositiveMotion = ( direction === \"up\" || direction === \"left\" ),\n\t\tanimation = {},\n\t\tanimation1 = {},\n\t\tanimation2 = {},\n\n\t\tqueuelen = element.queue().length;\n\n\t$.effects.createPlaceholder( element );\n\n\t// Animation\n\tanimation[ ref ] = ( positiveMotion ? \"-=\" : \"+=\" ) + distance;\n\tanimation1[ ref ] = ( positiveMotion ? \"+=\" : \"-=\" ) + distance * 2;\n\tanimation2[ ref ] = ( positiveMotion ? \"-=\" : \"+=\" ) + distance * 2;\n\n\t// Animate\n\telement.animate( animation, speed, options.easing );\n\n\t// Shakes\n\tfor ( ; i < times; i++ ) {\n\t\telement\n\t\t\t.animate( animation1, speed, options.easing )\n\t\t\t.animate( animation2, speed, options.easing );\n\t}\n\n\telement\n\t\t.animate( animation1, speed, options.easing )\n\t\t.animate( animation, speed / 2, options.easing )\n\t\t.queue( done );\n\n\t$.effects.unshift( element, queuelen, anims + 1 );\n} );\n\n\n/*!\n * jQuery UI Effects Slide 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Slide Effect\n//>>group: Effects\n//>>description: Slides an element in and out of the viewport.\n//>>docs: http://api.jqueryui.com/slide-effect/\n//>>demos: http://jqueryui.com/effect/\n\n\n\nvar effectsEffectSlide = $.effects.define( \"slide\", \"show\", function( options, done ) {\n\tvar startClip, startRef,\n\t\telement = $( this ),\n\t\tmap = {\n\t\t\tup: [ \"bottom\", \"top\" ],\n\t\t\tdown: [ \"top\", \"bottom\" ],\n\t\t\tleft: [ \"right\", \"left\" ],\n\t\t\tright: [ \"left\", \"right\" ]\n\t\t},\n\t\tmode = options.mode,\n\t\tdirection = options.direction || \"left\",\n\t\tref = ( direction === \"up\" || direction === \"down\" ) ? \"top\" : \"left\",\n\t\tpositiveMotion = ( direction === \"up\" || direction === \"left\" ),\n\t\tdistance = options.distance ||\n\t\t\telement[ ref === \"top\" ? \"outerHeight\" : \"outerWidth\" ]( true ),\n\t\tanimation = {};\n\n\t$.effects.createPlaceholder( element );\n\n\tstartClip = element.cssClip();\n\tstartRef = element.position()[ ref ];\n\n\t// Define hide animation\n\tanimation[ ref ] = ( positiveMotion ? -1 : 1 ) * distance + startRef;\n\tanimation.clip = element.cssClip();\n\tanimation.clip[ map[ direction ][ 1 ] ] = animation.clip[ map[ direction ][ 0 ] ];\n\n\t// Reverse the animation if we're showing\n\tif ( mode === \"show\" ) {\n\t\telement.cssClip( animation.clip );\n\t\telement.css( ref, animation[ ref ] );\n\t\tanimation.clip = startClip;\n\t\tanimation[ ref ] = startRef;\n\t}\n\n\t// Actually animate\n\telement.animate( animation, {\n\t\tqueue: false,\n\t\tduration: options.duration,\n\t\teasing: options.easing,\n\t\tcomplete: done\n\t} );\n} );\n\n\n/*!\n * jQuery UI Effects Transfer 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Transfer Effect\n//>>group: Effects\n//>>description: Displays a transfer effect from one element to another.\n//>>docs: http://api.jqueryui.com/transfer-effect/\n//>>demos: http://jqueryui.com/effect/\n\n\n\nvar effect;\nif ( $.uiBackCompat !== false ) {\n\teffect = $.effects.define( \"transfer\", function( options, done ) {\n\t\t$( this ).transfer( options, done );\n\t} );\n}\nvar effectsEffectTransfer = effect;\n\n\n\n\n}));","/*!\n * jQuery UI Touch Punch 0.2.3\n *\n * Copyright 2011–2014, Dave Furfero\n * Dual licensed under the MIT or GPL Version 2 licenses.\n *\n * Depends:\n *  jquery.ui.widget.js\n *  jquery.ui.mouse.js\n */\n(function ($) {\n\n  // Detect touch support\n  $.support.touch = 'ontouchend' in document;\n\n  // Ignore browsers without touch support\n  if (!$.support.touch) {\n    return;\n  }\n\n  var mouseProto = $.ui.mouse.prototype,\n      _mouseInit = mouseProto._mouseInit,\n      _mouseDestroy = mouseProto._mouseDestroy,\n      touchHandled;\n\n  /**\n   * Simulate a mouse event based on a corresponding touch event\n   * @param {Object} event A touch event\n   * @param {String} simulatedType The corresponding mouse event\n   */\n  function simulateMouseEvent (event, simulatedType) {\n\n    // Ignore multi-touch events\n    if (event.originalEvent.touches.length > 1) {\n      return;\n    }\n\n    event.preventDefault();\n\n    var touch = event.originalEvent.changedTouches[0],\n        simulatedEvent = document.createEvent('MouseEvents');\n    \n    // Initialize the simulated mouse event using the touch event's coordinates\n    simulatedEvent.initMouseEvent(\n      simulatedType,    // type\n      true,             // bubbles                    \n      true,             // cancelable                 \n      window,           // view                       \n      1,                // detail                     \n      touch.screenX,    // screenX                    \n      touch.screenY,    // screenY                    \n      touch.clientX,    // clientX                    \n      touch.clientY,    // clientY                    \n      false,            // ctrlKey                    \n      false,            // altKey                     \n      false,            // shiftKey                   \n      false,            // metaKey                    \n      0,                // button                     \n      null              // relatedTarget              \n    );\n\n    // Dispatch the simulated event to the target element\n    event.target.dispatchEvent(simulatedEvent);\n  }\n\n  /**\n   * Handle the jQuery UI widget's touchstart events\n   * @param {Object} event The widget element's touchstart event\n   */\n  mouseProto._touchStart = function (event) {\n\n    var self = this;\n\n    // Ignore the event if another widget is already being handled\n    if (touchHandled || !self._mouseCapture(event.originalEvent.changedTouches[0])) {\n      return;\n    }\n\n    // Set the flag to prevent other widgets from inheriting the touch event\n    touchHandled = true;\n\n    // Track movement to determine if interaction was a click\n    self._touchMoved = false;\n\n    // Simulate the mouseover event\n    simulateMouseEvent(event, 'mouseover');\n\n    // Simulate the mousemove event\n    simulateMouseEvent(event, 'mousemove');\n\n    // Simulate the mousedown event\n    simulateMouseEvent(event, 'mousedown');\n  };\n\n  /**\n   * Handle the jQuery UI widget's touchmove events\n   * @param {Object} event The document's touchmove event\n   */\n  mouseProto._touchMove = function (event) {\n\n    // Ignore event if not handled\n    if (!touchHandled) {\n      return;\n    }\n\n    // Interaction was not a click\n    this._touchMoved = true;\n\n    // Simulate the mousemove event\n    simulateMouseEvent(event, 'mousemove');\n  };\n\n  /**\n   * Handle the jQuery UI widget's touchend events\n   * @param {Object} event The document's touchend event\n   */\n  mouseProto._touchEnd = function (event) {\n\n    // Ignore event if not handled\n    if (!touchHandled) {\n      return;\n    }\n\n    // Simulate the mouseup event\n    simulateMouseEvent(event, 'mouseup');\n\n    // Simulate the mouseout event\n    simulateMouseEvent(event, 'mouseout');\n\n    // If the touch interaction did not move, it should trigger a click\n    if (!this._touchMoved) {\n\n      // Simulate the click event\n      simulateMouseEvent(event, 'click');\n    }\n\n    // Unset the flag to allow other widgets to inherit the touch event\n    touchHandled = false;\n  };\n\n  /**\n   * A duck punch of the $.ui.mouse _mouseInit method to support touch events.\n   * This method extends the widget with bound touch event handlers that\n   * translate touch events to mouse events and pass them to the widget's\n   * original mouse event handling methods.\n   */\n  mouseProto._mouseInit = function () {\n    \n    var self = this;\n\n    // Delegate the touch handlers to the widget's element\n    self.element.bind({\n      touchstart: $.proxy(self, '_touchStart'),\n      touchmove: $.proxy(self, '_touchMove'),\n      touchend: $.proxy(self, '_touchEnd')\n    });\n\n    // Call the original $.ui.mouse init method\n    _mouseInit.call(self);\n  };\n\n  /**\n   * Remove the touch event handlers\n   */\n  mouseProto._mouseDestroy = function () {\n    \n    var self = this;\n\n    // Delegate the touch handlers to the widget's element\n    self.element.unbind({\n      touchstart: $.proxy(self, '_touchStart'),\n      touchmove: $.proxy(self, '_touchMove'),\n      touchend: $.proxy(self, '_touchEnd')\n    });\n\n    // Call the original $.ui.mouse destroy method\n    _mouseDestroy.call(self);\n  };\n\n})(jQuery);","/*!\n * jQuery JavaScript Library v3.7.1\n * https://jquery.com/\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.org/license\n *\n * Date: 2023-08-28T13:37Z\n */\n( function( global, factory ) {\n\n\t\"use strict\";\n\n\tif ( typeof module === \"object\" && typeof module.exports === \"object\" ) {\n\n\t\t// For CommonJS and CommonJS-like environments where a proper `window`\n\t\t// is present, execute the factory and get jQuery.\n\t\t// For environments that do not have a `window` with a `document`\n\t\t// (such as Node.js), expose a factory as module.exports.\n\t\t// This accentuates the need for the creation of a real `window`.\n\t\t// e.g. var jQuery = require(\"jquery\")(window);\n\t\t// See ticket trac-14549 for more info.\n\t\tmodule.exports = global.document ?\n\t\t\tfactory( global, true ) :\n\t\t\tfunction( w ) {\n\t\t\t\tif ( !w.document ) {\n\t\t\t\t\tthrow new Error( \"jQuery requires a window with a document\" );\n\t\t\t\t}\n\t\t\t\treturn factory( w );\n\t\t\t};\n\t} else {\n\t\tfactory( global );\n\t}\n\n// Pass this if window is not defined yet\n} )( typeof window !== \"undefined\" ? window : this, function( window, noGlobal ) {\n\n// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1\n// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode\n// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common\n// enough that all such attempts are guarded in a try block.\n\"use strict\";\n\nvar arr = [];\n\nvar getProto = Object.getPrototypeOf;\n\nvar slice = arr.slice;\n\nvar flat = arr.flat ? function( array ) {\n\treturn arr.flat.call( array );\n} : function( array ) {\n\treturn arr.concat.apply( [], array );\n};\n\n\nvar push = arr.push;\n\nvar indexOf = arr.indexOf;\n\nvar class2type = {};\n\nvar toString = class2type.toString;\n\nvar hasOwn = class2type.hasOwnProperty;\n\nvar fnToString = hasOwn.toString;\n\nvar ObjectFunctionString = fnToString.call( Object );\n\nvar support = {};\n\nvar isFunction = function isFunction( obj ) {\n\n\t\t// Support: Chrome <=57, Firefox <=52\n\t\t// In some browsers, typeof returns \"function\" for HTML <object> elements\n\t\t// (i.e., `typeof document.createElement( \"object\" ) === \"function\"`).\n\t\t// We don't want to classify *any* DOM node as a function.\n\t\t// Support: QtWeb <=3.8.5, WebKit <=534.34, wkhtmltopdf tool <=0.12.5\n\t\t// Plus for old WebKit, typeof returns \"function\" for HTML collections\n\t\t// (e.g., `typeof document.getElementsByTagName(\"div\") === \"function\"`). (gh-4756)\n\t\treturn typeof obj === \"function\" && typeof obj.nodeType !== \"number\" &&\n\t\t\ttypeof obj.item !== \"function\";\n\t};\n\n\nvar isWindow = function isWindow( obj ) {\n\t\treturn obj != null && obj === obj.window;\n\t};\n\n\nvar document = window.document;\n\n\n\n\tvar preservedScriptAttributes = {\n\t\ttype: true,\n\t\tsrc: true,\n\t\tnonce: true,\n\t\tnoModule: true\n\t};\n\n\tfunction DOMEval( code, node, doc ) {\n\t\tdoc = doc || document;\n\n\t\tvar i, val,\n\t\t\tscript = doc.createElement( \"script\" );\n\n\t\tscript.text = code;\n\t\tif ( node ) {\n\t\t\tfor ( i in preservedScriptAttributes ) {\n\n\t\t\t\t// Support: Firefox 64+, Edge 18+\n\t\t\t\t// Some browsers don't support the \"nonce\" property on scripts.\n\t\t\t\t// On the other hand, just using `getAttribute` is not enough as\n\t\t\t\t// the `nonce` attribute is reset to an empty string whenever it\n\t\t\t\t// becomes browsing-context connected.\n\t\t\t\t// See https://github.com/whatwg/html/issues/2369\n\t\t\t\t// See https://html.spec.whatwg.org/#nonce-attributes\n\t\t\t\t// The `node.getAttribute` check was added for the sake of\n\t\t\t\t// `jQuery.globalEval` so that it can fake a nonce-containing node\n\t\t\t\t// via an object.\n\t\t\t\tval = node[ i ] || node.getAttribute && node.getAttribute( i );\n\t\t\t\tif ( val ) {\n\t\t\t\t\tscript.setAttribute( i, val );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tdoc.head.appendChild( script ).parentNode.removeChild( script );\n\t}\n\n\nfunction toType( obj ) {\n\tif ( obj == null ) {\n\t\treturn obj + \"\";\n\t}\n\n\t// Support: Android <=2.3 only (functionish RegExp)\n\treturn typeof obj === \"object\" || typeof obj === \"function\" ?\n\t\tclass2type[ toString.call( obj ) ] || \"object\" :\n\t\ttypeof obj;\n}\n/* global Symbol */\n// Defining this global in .eslintrc.json would create a danger of using the global\n// unguarded in another place, it seems safer to define global only for this module\n\n\n\nvar version = \"3.7.1\",\n\n\trhtmlSuffix = /HTML$/i,\n\n\t// Define a local copy of jQuery\n\tjQuery = function( selector, context ) {\n\n\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\t// Need init if jQuery is called (just allow error to be thrown if not included)\n\t\treturn new jQuery.fn.init( selector, context );\n\t};\n\njQuery.fn = jQuery.prototype = {\n\n\t// The current version of jQuery being used\n\tjquery: version,\n\n\tconstructor: jQuery,\n\n\t// The default length of a jQuery object is 0\n\tlength: 0,\n\n\ttoArray: function() {\n\t\treturn slice.call( this );\n\t},\n\n\t// Get the Nth element in the matched element set OR\n\t// Get the whole matched element set as a clean array\n\tget: function( num ) {\n\n\t\t// Return all the elements in a clean array\n\t\tif ( num == null ) {\n\t\t\treturn slice.call( this );\n\t\t}\n\n\t\t// Return just the one element from the set\n\t\treturn num < 0 ? this[ num + this.length ] : this[ num ];\n\t},\n\n\t// Take an array of elements and push it onto the stack\n\t// (returning the new matched element set)\n\tpushStack: function( elems ) {\n\n\t\t// Build a new jQuery matched element set\n\t\tvar ret = jQuery.merge( this.constructor(), elems );\n\n\t\t// Add the old object onto the stack (as a reference)\n\t\tret.prevObject = this;\n\n\t\t// Return the newly-formed element set\n\t\treturn ret;\n\t},\n\n\t// Execute a callback for every element in the matched set.\n\teach: function( callback ) {\n\t\treturn jQuery.each( this, callback );\n\t},\n\n\tmap: function( callback ) {\n\t\treturn this.pushStack( jQuery.map( this, function( elem, i ) {\n\t\t\treturn callback.call( elem, i, elem );\n\t\t} ) );\n\t},\n\n\tslice: function() {\n\t\treturn this.pushStack( slice.apply( this, arguments ) );\n\t},\n\n\tfirst: function() {\n\t\treturn this.eq( 0 );\n\t},\n\n\tlast: function() {\n\t\treturn this.eq( -1 );\n\t},\n\n\teven: function() {\n\t\treturn this.pushStack( jQuery.grep( this, function( _elem, i ) {\n\t\t\treturn ( i + 1 ) % 2;\n\t\t} ) );\n\t},\n\n\todd: function() {\n\t\treturn this.pushStack( jQuery.grep( this, function( _elem, i ) {\n\t\t\treturn i % 2;\n\t\t} ) );\n\t},\n\n\teq: function( i ) {\n\t\tvar len = this.length,\n\t\t\tj = +i + ( i < 0 ? len : 0 );\n\t\treturn this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );\n\t},\n\n\tend: function() {\n\t\treturn this.prevObject || this.constructor();\n\t},\n\n\t// For internal use only.\n\t// Behaves like an Array's method, not like a jQuery method.\n\tpush: push,\n\tsort: arr.sort,\n\tsplice: arr.splice\n};\n\njQuery.extend = jQuery.fn.extend = function() {\n\tvar options, name, src, copy, copyIsArray, clone,\n\t\ttarget = arguments[ 0 ] || {},\n\t\ti = 1,\n\t\tlength = arguments.length,\n\t\tdeep = false;\n\n\t// Handle a deep copy situation\n\tif ( typeof target === \"boolean\" ) {\n\t\tdeep = target;\n\n\t\t// Skip the boolean and the target\n\t\ttarget = arguments[ i ] || {};\n\t\ti++;\n\t}\n\n\t// Handle case when target is a string or something (possible in deep copy)\n\tif ( typeof target !== \"object\" && !isFunction( target ) ) {\n\t\ttarget = {};\n\t}\n\n\t// Extend jQuery itself if only one argument is passed\n\tif ( i === length ) {\n\t\ttarget = this;\n\t\ti--;\n\t}\n\n\tfor ( ; i < length; i++ ) {\n\n\t\t// Only deal with non-null/undefined values\n\t\tif ( ( options = arguments[ i ] ) != null ) {\n\n\t\t\t// Extend the base object\n\t\t\tfor ( name in options ) {\n\t\t\t\tcopy = options[ name ];\n\n\t\t\t\t// Prevent Object.prototype pollution\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif ( name === \"__proto__\" || target === copy ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\tif ( deep && copy && ( jQuery.isPlainObject( copy ) ||\n\t\t\t\t\t( copyIsArray = Array.isArray( copy ) ) ) ) {\n\t\t\t\t\tsrc = target[ name ];\n\n\t\t\t\t\t// Ensure proper type for the source value\n\t\t\t\t\tif ( copyIsArray && !Array.isArray( src ) ) {\n\t\t\t\t\t\tclone = [];\n\t\t\t\t\t} else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) {\n\t\t\t\t\t\tclone = {};\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclone = src;\n\t\t\t\t\t}\n\t\t\t\t\tcopyIsArray = false;\n\n\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\ttarget[ name ] = jQuery.extend( deep, clone, copy );\n\n\t\t\t\t// Don't bring in undefined values\n\t\t\t\t} else if ( copy !== undefined ) {\n\t\t\t\t\ttarget[ name ] = copy;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\njQuery.extend( {\n\n\t// Unique for each copy of jQuery on the page\n\texpando: \"jQuery\" + ( version + Math.random() ).replace( /\\D/g, \"\" ),\n\n\t// Assume jQuery is ready without the ready module\n\tisReady: true,\n\n\terror: function( msg ) {\n\t\tthrow new Error( msg );\n\t},\n\n\tnoop: function() {},\n\n\tisPlainObject: function( obj ) {\n\t\tvar proto, Ctor;\n\n\t\t// Detect obvious negatives\n\t\t// Use toString instead of jQuery.type to catch host objects\n\t\tif ( !obj || toString.call( obj ) !== \"[object Object]\" ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tproto = getProto( obj );\n\n\t\t// Objects with no prototype (e.g., `Object.create( null )`) are plain\n\t\tif ( !proto ) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Objects with prototype are plain iff they were constructed by a global Object function\n\t\tCtor = hasOwn.call( proto, \"constructor\" ) && proto.constructor;\n\t\treturn typeof Ctor === \"function\" && fnToString.call( Ctor ) === ObjectFunctionString;\n\t},\n\n\tisEmptyObject: function( obj ) {\n\t\tvar name;\n\n\t\tfor ( name in obj ) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\t// Evaluates a script in a provided context; falls back to the global one\n\t// if not specified.\n\tglobalEval: function( code, options, doc ) {\n\t\tDOMEval( code, { nonce: options && options.nonce }, doc );\n\t},\n\n\teach: function( obj, callback ) {\n\t\tvar length, i = 0;\n\n\t\tif ( isArrayLike( obj ) ) {\n\t\t\tlength = obj.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfor ( i in obj ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn obj;\n\t},\n\n\n\t// Retrieve the text value of an array of DOM nodes\n\ttext: function( elem ) {\n\t\tvar node,\n\t\t\tret = \"\",\n\t\t\ti = 0,\n\t\t\tnodeType = elem.nodeType;\n\n\t\tif ( !nodeType ) {\n\n\t\t\t// If no nodeType, this is expected to be an array\n\t\t\twhile ( ( node = elem[ i++ ] ) ) {\n\n\t\t\t\t// Do not traverse comment nodes\n\t\t\t\tret += jQuery.text( node );\n\t\t\t}\n\t\t}\n\t\tif ( nodeType === 1 || nodeType === 11 ) {\n\t\t\treturn elem.textContent;\n\t\t}\n\t\tif ( nodeType === 9 ) {\n\t\t\treturn elem.documentElement.textContent;\n\t\t}\n\t\tif ( nodeType === 3 || nodeType === 4 ) {\n\t\t\treturn elem.nodeValue;\n\t\t}\n\n\t\t// Do not include comment or processing instruction nodes\n\n\t\treturn ret;\n\t},\n\n\t// results is for internal usage only\n\tmakeArray: function( arr, results ) {\n\t\tvar ret = results || [];\n\n\t\tif ( arr != null ) {\n\t\t\tif ( isArrayLike( Object( arr ) ) ) {\n\t\t\t\tjQuery.merge( ret,\n\t\t\t\t\ttypeof arr === \"string\" ?\n\t\t\t\t\t\t[ arr ] : arr\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tpush.call( ret, arr );\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\tinArray: function( elem, arr, i ) {\n\t\treturn arr == null ? -1 : indexOf.call( arr, elem, i );\n\t},\n\n\tisXMLDoc: function( elem ) {\n\t\tvar namespace = elem && elem.namespaceURI,\n\t\t\tdocElem = elem && ( elem.ownerDocument || elem ).documentElement;\n\n\t\t// Assume HTML when documentElement doesn't yet exist, such as inside\n\t\t// document fragments.\n\t\treturn !rhtmlSuffix.test( namespace || docElem && docElem.nodeName || \"HTML\" );\n\t},\n\n\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t// push.apply(_, arraylike) throws on ancient WebKit\n\tmerge: function( first, second ) {\n\t\tvar len = +second.length,\n\t\t\tj = 0,\n\t\t\ti = first.length;\n\n\t\tfor ( ; j < len; j++ ) {\n\t\t\tfirst[ i++ ] = second[ j ];\n\t\t}\n\n\t\tfirst.length = i;\n\n\t\treturn first;\n\t},\n\n\tgrep: function( elems, callback, invert ) {\n\t\tvar callbackInverse,\n\t\t\tmatches = [],\n\t\t\ti = 0,\n\t\t\tlength = elems.length,\n\t\t\tcallbackExpect = !invert;\n\n\t\t// Go through the array, only saving the items\n\t\t// that pass the validator function\n\t\tfor ( ; i < length; i++ ) {\n\t\t\tcallbackInverse = !callback( elems[ i ], i );\n\t\t\tif ( callbackInverse !== callbackExpect ) {\n\t\t\t\tmatches.push( elems[ i ] );\n\t\t\t}\n\t\t}\n\n\t\treturn matches;\n\t},\n\n\t// arg is for internal usage only\n\tmap: function( elems, callback, arg ) {\n\t\tvar length, value,\n\t\t\ti = 0,\n\t\t\tret = [];\n\n\t\t// Go through the array, translating each of the items to their new values\n\t\tif ( isArrayLike( elems ) ) {\n\t\t\tlength = elems.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Go through every key on the object,\n\t\t} else {\n\t\t\tfor ( i in elems ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Flatten any nested arrays\n\t\treturn flat( ret );\n\t},\n\n\t// A global GUID counter for objects\n\tguid: 1,\n\n\t// jQuery.support is not used in Core but other projects attach their\n\t// properties to it so it needs to exist.\n\tsupport: support\n} );\n\nif ( typeof Symbol === \"function\" ) {\n\tjQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];\n}\n\n// Populate the class2type map\njQuery.each( \"Boolean Number String Function Array Date RegExp Object Error Symbol\".split( \" \" ),\n\tfunction( _i, name ) {\n\t\tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n\t} );\n\nfunction isArrayLike( obj ) {\n\n\t// Support: real iOS 8.2 only (not reproducible in simulator)\n\t// `in` check used to prevent JIT error (gh-2145)\n\t// hasOwn isn't used here due to false negatives\n\t// regarding Nodelist length in IE\n\tvar length = !!obj && \"length\" in obj && obj.length,\n\t\ttype = toType( obj );\n\n\tif ( isFunction( obj ) || isWindow( obj ) ) {\n\t\treturn false;\n\t}\n\n\treturn type === \"array\" || length === 0 ||\n\t\ttypeof length === \"number\" && length > 0 && ( length - 1 ) in obj;\n}\n\n\nfunction nodeName( elem, name ) {\n\n\treturn elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n\n}\nvar pop = arr.pop;\n\n\nvar sort = arr.sort;\n\n\nvar splice = arr.splice;\n\n\nvar whitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\";\n\n\nvar rtrimCSS = new RegExp(\n\t\"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\",\n\t\"g\"\n);\n\n\n\n\n// Note: an element does not contain itself\njQuery.contains = function( a, b ) {\n\tvar bup = b && b.parentNode;\n\n\treturn a === bup || !!( bup && bup.nodeType === 1 && (\n\n\t\t// Support: IE 9 - 11+\n\t\t// IE doesn't have `contains` on SVG.\n\t\ta.contains ?\n\t\t\ta.contains( bup ) :\n\t\t\ta.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16\n\t) );\n};\n\n\n\n\n// CSS string/identifier serialization\n// https://drafts.csswg.org/cssom/#common-serializing-idioms\nvar rcssescape = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\x80-\\uFFFF\\w-]/g;\n\nfunction fcssescape( ch, asCodePoint ) {\n\tif ( asCodePoint ) {\n\n\t\t// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\n\t\tif ( ch === \"\\0\" ) {\n\t\t\treturn \"\\uFFFD\";\n\t\t}\n\n\t\t// Control characters and (dependent upon position) numbers get escaped as code points\n\t\treturn ch.slice( 0, -1 ) + \"\\\\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + \" \";\n\t}\n\n\t// Other potentially-special ASCII characters get backslash-escaped\n\treturn \"\\\\\" + ch;\n}\n\njQuery.escapeSelector = function( sel ) {\n\treturn ( sel + \"\" ).replace( rcssescape, fcssescape );\n};\n\n\n\n\nvar preferredDoc = document,\n\tpushNative = push;\n\n( function() {\n\nvar i,\n\tExpr,\n\toutermostContext,\n\tsortInput,\n\thasDuplicate,\n\tpush = pushNative,\n\n\t// Local document vars\n\tdocument,\n\tdocumentElement,\n\tdocumentIsHTML,\n\trbuggyQSA,\n\tmatches,\n\n\t// Instance-specific data\n\texpando = jQuery.expando,\n\tdirruns = 0,\n\tdone = 0,\n\tclassCache = createCache(),\n\ttokenCache = createCache(),\n\tcompilerCache = createCache(),\n\tnonnativeSelectorCache = createCache(),\n\tsortOrder = function( a, b ) {\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t}\n\t\treturn 0;\n\t},\n\n\tbooleans = \"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|\" +\n\t\t\"loop|multiple|open|readonly|required|scoped\",\n\n\t// Regular expressions\n\n\t// https://www.w3.org/TR/css-syntax-3/#ident-token-diagram\n\tidentifier = \"(?:\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace +\n\t\t\"?|\\\\\\\\[^\\\\r\\\\n\\\\f]|[\\\\w-]|[^\\0-\\\\x7f])+\",\n\n\t// Attribute selectors: https://www.w3.org/TR/selectors/#attribute-selectors\n\tattributes = \"\\\\[\" + whitespace + \"*(\" + identifier + \")(?:\" + whitespace +\n\n\t\t// Operator (capture 2)\n\t\t\"*([*^$|!~]?=)\" + whitespace +\n\n\t\t// \"Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]\"\n\t\t\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" +\n\t\twhitespace + \"*\\\\]\",\n\n\tpseudos = \":(\" + identifier + \")(?:\\\\((\" +\n\n\t\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n\t\t// 1. quoted (capture 3; capture 4 or capture 5)\n\t\t\"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" +\n\n\t\t// 2. simple (capture 6)\n\t\t\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\n\n\t\t// 3. anything else (capture 2)\n\t\t\".*\" +\n\t\t\")\\\\)|)\",\n\n\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\trwhitespace = new RegExp( whitespace + \"+\", \"g\" ),\n\n\trcomma = new RegExp( \"^\" + whitespace + \"*,\" + whitespace + \"*\" ),\n\trleadingCombinator = new RegExp( \"^\" + whitespace + \"*([>+~]|\" + whitespace + \")\" +\n\t\twhitespace + \"*\" ),\n\trdescend = new RegExp( whitespace + \"|>\" ),\n\n\trpseudo = new RegExp( pseudos ),\n\tridentifier = new RegExp( \"^\" + identifier + \"$\" ),\n\n\tmatchExpr = {\n\t\tID: new RegExp( \"^#(\" + identifier + \")\" ),\n\t\tCLASS: new RegExp( \"^\\\\.(\" + identifier + \")\" ),\n\t\tTAG: new RegExp( \"^(\" + identifier + \"|[*])\" ),\n\t\tATTR: new RegExp( \"^\" + attributes ),\n\t\tPSEUDO: new RegExp( \"^\" + pseudos ),\n\t\tCHILD: new RegExp(\n\t\t\t\"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" +\n\t\t\t\twhitespace + \"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" +\n\t\t\t\twhitespace + \"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\" ),\n\t\tbool: new RegExp( \"^(?:\" + booleans + \")$\", \"i\" ),\n\n\t\t// For use in libraries implementing .is()\n\t\t// We use this for POS matching in `select`\n\t\tneedsContext: new RegExp( \"^\" + whitespace +\n\t\t\t\"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" + whitespace +\n\t\t\t\"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\" )\n\t},\n\n\trinputs = /^(?:input|select|textarea|button)$/i,\n\trheader = /^h\\d$/i,\n\n\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\trquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\trsibling = /[+~]/,\n\n\t// CSS escapes\n\t// https://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\trunescape = new RegExp( \"\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace +\n\t\t\"?|\\\\\\\\([^\\\\r\\\\n\\\\f])\", \"g\" ),\n\tfunescape = function( escape, nonHex ) {\n\t\tvar high = \"0x\" + escape.slice( 1 ) - 0x10000;\n\n\t\tif ( nonHex ) {\n\n\t\t\t// Strip the backslash prefix from a non-hex escape sequence\n\t\t\treturn nonHex;\n\t\t}\n\n\t\t// Replace a hexadecimal escape sequence with the encoded Unicode code point\n\t\t// Support: IE <=11+\n\t\t// For values outside the Basic Multilingual Plane (BMP), manually construct a\n\t\t// surrogate pair\n\t\treturn high < 0 ?\n\t\t\tString.fromCharCode( high + 0x10000 ) :\n\t\t\tString.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );\n\t},\n\n\t// Used for iframes; see `setDocument`.\n\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t// Removing the function wrapper causes a \"Permission Denied\"\n\t// error in IE/Edge.\n\tunloadHandler = function() {\n\t\tsetDocument();\n\t},\n\n\tinDisabledFieldset = addCombinator(\n\t\tfunction( elem ) {\n\t\t\treturn elem.disabled === true && nodeName( elem, \"fieldset\" );\n\t\t},\n\t\t{ dir: \"parentNode\", next: \"legend\" }\n\t);\n\n// Support: IE <=9 only\n// Accessing document.activeElement can throw unexpectedly\n// https://bugs.jquery.com/ticket/13393\nfunction safeActiveElement() {\n\ttry {\n\t\treturn document.activeElement;\n\t} catch ( err ) { }\n}\n\n// Optimize for push.apply( _, NodeList )\ntry {\n\tpush.apply(\n\t\t( arr = slice.call( preferredDoc.childNodes ) ),\n\t\tpreferredDoc.childNodes\n\t);\n\n\t// Support: Android <=4.0\n\t// Detect silently failing push.apply\n\t// eslint-disable-next-line no-unused-expressions\n\tarr[ preferredDoc.childNodes.length ].nodeType;\n} catch ( e ) {\n\tpush = {\n\t\tapply: function( target, els ) {\n\t\t\tpushNative.apply( target, slice.call( els ) );\n\t\t},\n\t\tcall: function( target ) {\n\t\t\tpushNative.apply( target, slice.call( arguments, 1 ) );\n\t\t}\n\t};\n}\n\nfunction find( selector, context, results, seed ) {\n\tvar m, i, elem, nid, match, groups, newSelector,\n\t\tnewContext = context && context.ownerDocument,\n\n\t\t// nodeType defaults to 9, since context defaults to document\n\t\tnodeType = context ? context.nodeType : 9;\n\n\tresults = results || [];\n\n\t// Return early from calls with invalid selector or context\n\tif ( typeof selector !== \"string\" || !selector ||\n\t\tnodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {\n\n\t\treturn results;\n\t}\n\n\t// Try to shortcut find operations (as opposed to filters) in HTML documents\n\tif ( !seed ) {\n\t\tsetDocument( context );\n\t\tcontext = context || document;\n\n\t\tif ( documentIsHTML ) {\n\n\t\t\t// If the selector is sufficiently simple, try using a \"get*By*\" DOM method\n\t\t\t// (excepting DocumentFragment context, where the methods don't exist)\n\t\t\tif ( nodeType !== 11 && ( match = rquickExpr.exec( selector ) ) ) {\n\n\t\t\t\t// ID selector\n\t\t\t\tif ( ( m = match[ 1 ] ) ) {\n\n\t\t\t\t\t// Document context\n\t\t\t\t\tif ( nodeType === 9 ) {\n\t\t\t\t\t\tif ( ( elem = context.getElementById( m ) ) ) {\n\n\t\t\t\t\t\t\t// Support: IE 9 only\n\t\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\t\tif ( elem.id === m ) {\n\t\t\t\t\t\t\t\tpush.call( results, elem );\n\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t// Element context\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// Support: IE 9 only\n\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\tif ( newContext && ( elem = newContext.getElementById( m ) ) &&\n\t\t\t\t\t\t\tfind.contains( context, elem ) &&\n\t\t\t\t\t\t\telem.id === m ) {\n\n\t\t\t\t\t\t\tpush.call( results, elem );\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t// Type selector\n\t\t\t\t} else if ( match[ 2 ] ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByTagName( selector ) );\n\t\t\t\t\treturn results;\n\n\t\t\t\t// Class selector\n\t\t\t\t} else if ( ( m = match[ 3 ] ) && context.getElementsByClassName ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByClassName( m ) );\n\t\t\t\t\treturn results;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Take advantage of querySelectorAll\n\t\t\tif ( !nonnativeSelectorCache[ selector + \" \" ] &&\n\t\t\t\t( !rbuggyQSA || !rbuggyQSA.test( selector ) ) ) {\n\n\t\t\t\tnewSelector = selector;\n\t\t\t\tnewContext = context;\n\n\t\t\t\t// qSA considers elements outside a scoping root when evaluating child or\n\t\t\t\t// descendant combinators, which is not what we want.\n\t\t\t\t// In such cases, we work around the behavior by prefixing every selector in the\n\t\t\t\t// list with an ID selector referencing the scope context.\n\t\t\t\t// The technique has to be used as well when a leading combinator is used\n\t\t\t\t// as such selectors are not recognized by querySelectorAll.\n\t\t\t\t// Thanks to Andrew Dupont for this technique.\n\t\t\t\tif ( nodeType === 1 &&\n\t\t\t\t\t( rdescend.test( selector ) || rleadingCombinator.test( selector ) ) ) {\n\n\t\t\t\t\t// Expand context for sibling selectors\n\t\t\t\t\tnewContext = rsibling.test( selector ) && testContext( context.parentNode ) ||\n\t\t\t\t\t\tcontext;\n\n\t\t\t\t\t// We can use :scope instead of the ID hack if the browser\n\t\t\t\t\t// supports it & if we're not changing the context.\n\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when\n\t\t\t\t\t// strict-comparing two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tif ( newContext != context || !support.scope ) {\n\n\t\t\t\t\t\t// Capture the context ID, setting it first if necessary\n\t\t\t\t\t\tif ( ( nid = context.getAttribute( \"id\" ) ) ) {\n\t\t\t\t\t\t\tnid = jQuery.escapeSelector( nid );\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcontext.setAttribute( \"id\", ( nid = expando ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prefix every selector in the list\n\t\t\t\t\tgroups = tokenize( selector );\n\t\t\t\t\ti = groups.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tgroups[ i ] = ( nid ? \"#\" + nid : \":scope\" ) + \" \" +\n\t\t\t\t\t\t\ttoSelector( groups[ i ] );\n\t\t\t\t\t}\n\t\t\t\t\tnewSelector = groups.join( \",\" );\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tpush.apply( results,\n\t\t\t\t\t\tnewContext.querySelectorAll( newSelector )\n\t\t\t\t\t);\n\t\t\t\t\treturn results;\n\t\t\t\t} catch ( qsaError ) {\n\t\t\t\t\tnonnativeSelectorCache( selector, true );\n\t\t\t\t} finally {\n\t\t\t\t\tif ( nid === expando ) {\n\t\t\t\t\t\tcontext.removeAttribute( \"id\" );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// All others\n\treturn select( selector.replace( rtrimCSS, \"$1\" ), context, results, seed );\n}\n\n/**\n * Create key-value caches of limited size\n * @returns {function(string, object)} Returns the Object data after storing it on itself with\n *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n *\tdeleting the oldest entry\n */\nfunction createCache() {\n\tvar keys = [];\n\n\tfunction cache( key, value ) {\n\n\t\t// Use (key + \" \") to avoid collision with native prototype properties\n\t\t// (see https://github.com/jquery/sizzle/issues/157)\n\t\tif ( keys.push( key + \" \" ) > Expr.cacheLength ) {\n\n\t\t\t// Only keep the most recent entries\n\t\t\tdelete cache[ keys.shift() ];\n\t\t}\n\t\treturn ( cache[ key + \" \" ] = value );\n\t}\n\treturn cache;\n}\n\n/**\n * Mark a function for special use by jQuery selector module\n * @param {Function} fn The function to mark\n */\nfunction markFunction( fn ) {\n\tfn[ expando ] = true;\n\treturn fn;\n}\n\n/**\n * Support testing using an element\n * @param {Function} fn Passed the created element and returns a boolean result\n */\nfunction assert( fn ) {\n\tvar el = document.createElement( \"fieldset\" );\n\n\ttry {\n\t\treturn !!fn( el );\n\t} catch ( e ) {\n\t\treturn false;\n\t} finally {\n\n\t\t// Remove from its parent by default\n\t\tif ( el.parentNode ) {\n\t\t\tel.parentNode.removeChild( el );\n\t\t}\n\n\t\t// release memory in IE\n\t\tel = null;\n\t}\n}\n\n/**\n * Returns a function to use in pseudos for input types\n * @param {String} type\n */\nfunction createInputPseudo( type ) {\n\treturn function( elem ) {\n\t\treturn nodeName( elem, \"input\" ) && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for buttons\n * @param {String} type\n */\nfunction createButtonPseudo( type ) {\n\treturn function( elem ) {\n\t\treturn ( nodeName( elem, \"input\" ) || nodeName( elem, \"button\" ) ) &&\n\t\t\telem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for :enabled/:disabled\n * @param {Boolean} disabled true for :disabled; false for :enabled\n */\nfunction createDisabledPseudo( disabled ) {\n\n\t// Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable\n\treturn function( elem ) {\n\n\t\t// Only certain elements can match :enabled or :disabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled\n\t\tif ( \"form\" in elem ) {\n\n\t\t\t// Check for inherited disabledness on relevant non-disabled elements:\n\t\t\t// * listed form-associated elements in a disabled fieldset\n\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#category-listed\n\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled\n\t\t\t// * option elements in a disabled optgroup\n\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled\n\t\t\t// All such elements have a \"form\" property.\n\t\t\tif ( elem.parentNode && elem.disabled === false ) {\n\n\t\t\t\t// Option elements defer to a parent optgroup if present\n\t\t\t\tif ( \"label\" in elem ) {\n\t\t\t\t\tif ( \"label\" in elem.parentNode ) {\n\t\t\t\t\t\treturn elem.parentNode.disabled === disabled;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn elem.disabled === disabled;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Support: IE 6 - 11+\n\t\t\t\t// Use the isDisabled shortcut property to check for disabled fieldset ancestors\n\t\t\t\treturn elem.isDisabled === disabled ||\n\n\t\t\t\t\t// Where there is no isDisabled, check manually\n\t\t\t\t\telem.isDisabled !== !disabled &&\n\t\t\t\t\t\tinDisabledFieldset( elem ) === disabled;\n\t\t\t}\n\n\t\t\treturn elem.disabled === disabled;\n\n\t\t// Try to winnow out elements that can't be disabled before trusting the disabled property.\n\t\t// Some victims get caught in our net (label, legend, menu, track), but it shouldn't\n\t\t// even exist on them, let alone have a boolean value.\n\t\t} else if ( \"label\" in elem ) {\n\t\t\treturn elem.disabled === disabled;\n\t\t}\n\n\t\t// Remaining elements are neither :enabled nor :disabled\n\t\treturn false;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for positionals\n * @param {Function} fn\n */\nfunction createPositionalPseudo( fn ) {\n\treturn markFunction( function( argument ) {\n\t\targument = +argument;\n\t\treturn markFunction( function( seed, matches ) {\n\t\t\tvar j,\n\t\t\t\tmatchIndexes = fn( [], seed.length, argument ),\n\t\t\t\ti = matchIndexes.length;\n\n\t\t\t// Match elements found at the specified indexes\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( seed[ ( j = matchIndexes[ i ] ) ] ) {\n\t\t\t\t\tseed[ j ] = !( matches[ j ] = seed[ j ] );\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t} );\n}\n\n/**\n * Checks a node for validity as a jQuery selector context\n * @param {Element|Object=} context\n * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n */\nfunction testContext( context ) {\n\treturn context && typeof context.getElementsByTagName !== \"undefined\" && context;\n}\n\n/**\n * Sets document-related variables once based on the current document\n * @param {Element|Object} [node] An element or document object to use to set the document\n * @returns {Object} Returns the current document\n */\nfunction setDocument( node ) {\n\tvar subWindow,\n\t\tdoc = node ? node.ownerDocument || node : preferredDoc;\n\n\t// Return early if doc is invalid or already selected\n\t// Support: IE 11+, Edge 17 - 18+\n\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( doc == document || doc.nodeType !== 9 || !doc.documentElement ) {\n\t\treturn document;\n\t}\n\n\t// Update global variables\n\tdocument = doc;\n\tdocumentElement = document.documentElement;\n\tdocumentIsHTML = !jQuery.isXMLDoc( document );\n\n\t// Support: iOS 7 only, IE 9 - 11+\n\t// Older browsers didn't support unprefixed `matches`.\n\tmatches = documentElement.matches ||\n\t\tdocumentElement.webkitMatchesSelector ||\n\t\tdocumentElement.msMatchesSelector;\n\n\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t// Accessing iframe documents after unload throws \"permission denied\" errors\n\t// (see trac-13936).\n\t// Limit the fix to IE & Edge Legacy; despite Edge 15+ implementing `matches`,\n\t// all IE 9+ and Edge Legacy versions implement `msMatchesSelector` as well.\n\tif ( documentElement.msMatchesSelector &&\n\n\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t// two documents; shallow comparisons work.\n\t\t// eslint-disable-next-line eqeqeq\n\t\tpreferredDoc != document &&\n\t\t( subWindow = document.defaultView ) && subWindow.top !== subWindow ) {\n\n\t\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t\tsubWindow.addEventListener( \"unload\", unloadHandler );\n\t}\n\n\t// Support: IE <10\n\t// Check if getElementById returns elements by name\n\t// The broken getElementById methods don't pick up programmatically-set names,\n\t// so use a roundabout getElementsByName test\n\tsupport.getById = assert( function( el ) {\n\t\tdocumentElement.appendChild( el ).id = jQuery.expando;\n\t\treturn !document.getElementsByName ||\n\t\t\t!document.getElementsByName( jQuery.expando ).length;\n\t} );\n\n\t// Support: IE 9 only\n\t// Check to see if it's possible to do matchesSelector\n\t// on a disconnected node.\n\tsupport.disconnectedMatch = assert( function( el ) {\n\t\treturn matches.call( el, \"*\" );\n\t} );\n\n\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t// IE/Edge don't support the :scope pseudo-class.\n\tsupport.scope = assert( function() {\n\t\treturn document.querySelectorAll( \":scope\" );\n\t} );\n\n\t// Support: Chrome 105 - 111 only, Safari 15.4 - 16.3 only\n\t// Make sure the `:has()` argument is parsed unforgivingly.\n\t// We include `*` in the test to detect buggy implementations that are\n\t// _selectively_ forgiving (specifically when the list includes at least\n\t// one valid selector).\n\t// Note that we treat complete lack of support for `:has()` as if it were\n\t// spec-compliant support, which is fine because use of `:has()` in such\n\t// environments will fail in the qSA path and fall back to jQuery traversal\n\t// anyway.\n\tsupport.cssHas = assert( function() {\n\t\ttry {\n\t\t\tdocument.querySelector( \":has(*,:jqfake)\" );\n\t\t\treturn false;\n\t\t} catch ( e ) {\n\t\t\treturn true;\n\t\t}\n\t} );\n\n\t// ID filter and find\n\tif ( support.getById ) {\n\t\tExpr.filter.ID = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn elem.getAttribute( \"id\" ) === attrId;\n\t\t\t};\n\t\t};\n\t\tExpr.find.ID = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar elem = context.getElementById( id );\n\t\t\t\treturn elem ? [ elem ] : [];\n\t\t\t}\n\t\t};\n\t} else {\n\t\tExpr.filter.ID =  function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\tvar node = typeof elem.getAttributeNode !== \"undefined\" &&\n\t\t\t\t\telem.getAttributeNode( \"id\" );\n\t\t\t\treturn node && node.value === attrId;\n\t\t\t};\n\t\t};\n\n\t\t// Support: IE 6 - 7 only\n\t\t// getElementById is not reliable as a find shortcut\n\t\tExpr.find.ID = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar node, i, elems,\n\t\t\t\t\telem = context.getElementById( id );\n\n\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t// Verify the id attribute\n\t\t\t\t\tnode = elem.getAttributeNode( \"id\" );\n\t\t\t\t\tif ( node && node.value === id ) {\n\t\t\t\t\t\treturn [ elem ];\n\t\t\t\t\t}\n\n\t\t\t\t\t// Fall back on getElementsByName\n\t\t\t\t\telems = context.getElementsByName( id );\n\t\t\t\t\ti = 0;\n\t\t\t\t\twhile ( ( elem = elems[ i++ ] ) ) {\n\t\t\t\t\t\tnode = elem.getAttributeNode( \"id\" );\n\t\t\t\t\t\tif ( node && node.value === id ) {\n\t\t\t\t\t\t\treturn [ elem ];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn [];\n\t\t\t}\n\t\t};\n\t}\n\n\t// Tag\n\tExpr.find.TAG = function( tag, context ) {\n\t\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\t\treturn context.getElementsByTagName( tag );\n\n\t\t// DocumentFragment nodes don't have gEBTN\n\t\t} else {\n\t\t\treturn context.querySelectorAll( tag );\n\t\t}\n\t};\n\n\t// Class\n\tExpr.find.CLASS = function( className, context ) {\n\t\tif ( typeof context.getElementsByClassName !== \"undefined\" && documentIsHTML ) {\n\t\t\treturn context.getElementsByClassName( className );\n\t\t}\n\t};\n\n\t/* QSA/matchesSelector\n\t---------------------------------------------------------------------- */\n\n\t// QSA and matchesSelector support\n\n\trbuggyQSA = [];\n\n\t// Build QSA regex\n\t// Regex strategy adopted from Diego Perini\n\tassert( function( el ) {\n\n\t\tvar input;\n\n\t\tdocumentElement.appendChild( el ).innerHTML =\n\t\t\t\"<a id='\" + expando + \"' href='' disabled='disabled'></a>\" +\n\t\t\t\"<select id='\" + expando + \"-\\r\\\\' disabled='disabled'>\" +\n\t\t\t\"<option selected=''></option></select>\";\n\n\t\t// Support: iOS <=7 - 8 only\n\t\t// Boolean attributes and \"value\" are not treated correctly in some XML documents\n\t\tif ( !el.querySelectorAll( \"[selected]\" ).length ) {\n\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*(?:value|\" + booleans + \")\" );\n\t\t}\n\n\t\t// Support: iOS <=7 - 8 only\n\t\tif ( !el.querySelectorAll( \"[id~=\" + expando + \"-]\" ).length ) {\n\t\t\trbuggyQSA.push( \"~=\" );\n\t\t}\n\n\t\t// Support: iOS 8 only\n\t\t// https://bugs.webkit.org/show_bug.cgi?id=136851\n\t\t// In-page `selector#id sibling-combinator selector` fails\n\t\tif ( !el.querySelectorAll( \"a#\" + expando + \"+*\" ).length ) {\n\t\t\trbuggyQSA.push( \".#.+[+~]\" );\n\t\t}\n\n\t\t// Support: Chrome <=105+, Firefox <=104+, Safari <=15.4+\n\t\t// In some of the document kinds, these selectors wouldn't work natively.\n\t\t// This is probably OK but for backwards compatibility we want to maintain\n\t\t// handling them through jQuery traversal in jQuery 3.x.\n\t\tif ( !el.querySelectorAll( \":checked\" ).length ) {\n\t\t\trbuggyQSA.push( \":checked\" );\n\t\t}\n\n\t\t// Support: Windows 8 Native Apps\n\t\t// The type and name attributes are restricted during .innerHTML assignment\n\t\tinput = document.createElement( \"input\" );\n\t\tinput.setAttribute( \"type\", \"hidden\" );\n\t\tel.appendChild( input ).setAttribute( \"name\", \"D\" );\n\n\t\t// Support: IE 9 - 11+\n\t\t// IE's :disabled selector does not pick up the children of disabled fieldsets\n\t\t// Support: Chrome <=105+, Firefox <=104+, Safari <=15.4+\n\t\t// In some of the document kinds, these selectors wouldn't work natively.\n\t\t// This is probably OK but for backwards compatibility we want to maintain\n\t\t// handling them through jQuery traversal in jQuery 3.x.\n\t\tdocumentElement.appendChild( el ).disabled = true;\n\t\tif ( el.querySelectorAll( \":disabled\" ).length !== 2 ) {\n\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t}\n\n\t\t// Support: IE 11+, Edge 15 - 18+\n\t\t// IE 11/Edge don't find elements on a `[name='']` query in some cases.\n\t\t// Adding a temporary attribute to the document before the selection works\n\t\t// around the issue.\n\t\t// Interestingly, IE 10 & older don't seem to have the issue.\n\t\tinput = document.createElement( \"input\" );\n\t\tinput.setAttribute( \"name\", \"\" );\n\t\tel.appendChild( input );\n\t\tif ( !el.querySelectorAll( \"[name='']\" ).length ) {\n\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*name\" + whitespace + \"*=\" +\n\t\t\t\twhitespace + \"*(?:''|\\\"\\\")\" );\n\t\t}\n\t} );\n\n\tif ( !support.cssHas ) {\n\n\t\t// Support: Chrome 105 - 110+, Safari 15.4 - 16.3+\n\t\t// Our regular `try-catch` mechanism fails to detect natively-unsupported\n\t\t// pseudo-classes inside `:has()` (such as `:has(:contains(\"Foo\"))`)\n\t\t// in browsers that parse the `:has()` argument as a forgiving selector list.\n\t\t// https://drafts.csswg.org/selectors/#relational now requires the argument\n\t\t// to be parsed unforgivingly, but browsers have not yet fully adjusted.\n\t\trbuggyQSA.push( \":has\" );\n\t}\n\n\trbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join( \"|\" ) );\n\n\t/* Sorting\n\t---------------------------------------------------------------------- */\n\n\t// Document order sorting\n\tsortOrder = function( a, b ) {\n\n\t\t// Flag for duplicate removal\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\t// Sort on method existence if only one input has compareDocumentPosition\n\t\tvar compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\t\tif ( compare ) {\n\t\t\treturn compare;\n\t\t}\n\n\t\t// Calculate position if both inputs belong to the same document\n\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t// two documents; shallow comparisons work.\n\t\t// eslint-disable-next-line eqeqeq\n\t\tcompare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ?\n\t\t\ta.compareDocumentPosition( b ) :\n\n\t\t\t// Otherwise we know they are disconnected\n\t\t\t1;\n\n\t\t// Disconnected nodes\n\t\tif ( compare & 1 ||\n\t\t\t( !support.sortDetached && b.compareDocumentPosition( a ) === compare ) ) {\n\n\t\t\t// Choose the first element that is related to our preferred document\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif ( a === document || a.ownerDocument == preferredDoc &&\n\t\t\t\tfind.contains( preferredDoc, a ) ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif ( b === document || b.ownerDocument == preferredDoc &&\n\t\t\t\tfind.contains( preferredDoc, b ) ) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\t// Maintain original order\n\t\t\treturn sortInput ?\n\t\t\t\t( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) :\n\t\t\t\t0;\n\t\t}\n\n\t\treturn compare & 4 ? -1 : 1;\n\t};\n\n\treturn document;\n}\n\nfind.matches = function( expr, elements ) {\n\treturn find( expr, null, null, elements );\n};\n\nfind.matchesSelector = function( elem, expr ) {\n\tsetDocument( elem );\n\n\tif ( documentIsHTML &&\n\t\t!nonnativeSelectorCache[ expr + \" \" ] &&\n\t\t( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) {\n\n\t\ttry {\n\t\t\tvar ret = matches.call( elem, expr );\n\n\t\t\t// IE 9's matchesSelector returns false on disconnected nodes\n\t\t\tif ( ret || support.disconnectedMatch ||\n\n\t\t\t\t\t// As well, disconnected nodes are said to be in a document\n\t\t\t\t\t// fragment in IE 9\n\t\t\t\t\telem.document && elem.document.nodeType !== 11 ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t} catch ( e ) {\n\t\t\tnonnativeSelectorCache( expr, true );\n\t\t}\n\t}\n\n\treturn find( expr, document, null, [ elem ] ).length > 0;\n};\n\nfind.contains = function( context, elem ) {\n\n\t// Set document vars if needed\n\t// Support: IE 11+, Edge 17 - 18+\n\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( ( context.ownerDocument || context ) != document ) {\n\t\tsetDocument( context );\n\t}\n\treturn jQuery.contains( context, elem );\n};\n\n\nfind.attr = function( elem, name ) {\n\n\t// Set document vars if needed\n\t// Support: IE 11+, Edge 17 - 18+\n\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( ( elem.ownerDocument || elem ) != document ) {\n\t\tsetDocument( elem );\n\t}\n\n\tvar fn = Expr.attrHandle[ name.toLowerCase() ],\n\n\t\t// Don't get fooled by Object.prototype properties (see trac-13807)\n\t\tval = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?\n\t\t\tfn( elem, name, !documentIsHTML ) :\n\t\t\tundefined;\n\n\tif ( val !== undefined ) {\n\t\treturn val;\n\t}\n\n\treturn elem.getAttribute( name );\n};\n\nfind.error = function( msg ) {\n\tthrow new Error( \"Syntax error, unrecognized expression: \" + msg );\n};\n\n/**\n * Document sorting and removing duplicates\n * @param {ArrayLike} results\n */\njQuery.uniqueSort = function( results ) {\n\tvar elem,\n\t\tduplicates = [],\n\t\tj = 0,\n\t\ti = 0;\n\n\t// Unless we *know* we can detect duplicates, assume their presence\n\t//\n\t// Support: Android <=4.0+\n\t// Testing for detecting duplicates is unpredictable so instead assume we can't\n\t// depend on duplicate detection in all browsers without a stable sort.\n\thasDuplicate = !support.sortStable;\n\tsortInput = !support.sortStable && slice.call( results, 0 );\n\tsort.call( results, sortOrder );\n\n\tif ( hasDuplicate ) {\n\t\twhile ( ( elem = results[ i++ ] ) ) {\n\t\t\tif ( elem === results[ i ] ) {\n\t\t\t\tj = duplicates.push( i );\n\t\t\t}\n\t\t}\n\t\twhile ( j-- ) {\n\t\t\tsplice.call( results, duplicates[ j ], 1 );\n\t\t}\n\t}\n\n\t// Clear input after sorting to release objects\n\t// See https://github.com/jquery/sizzle/pull/225\n\tsortInput = null;\n\n\treturn results;\n};\n\njQuery.fn.uniqueSort = function() {\n\treturn this.pushStack( jQuery.uniqueSort( slice.apply( this ) ) );\n};\n\nExpr = jQuery.expr = {\n\n\t// Can be adjusted by the user\n\tcacheLength: 50,\n\n\tcreatePseudo: markFunction,\n\n\tmatch: matchExpr,\n\n\tattrHandle: {},\n\n\tfind: {},\n\n\trelative: {\n\t\t\">\": { dir: \"parentNode\", first: true },\n\t\t\" \": { dir: \"parentNode\" },\n\t\t\"+\": { dir: \"previousSibling\", first: true },\n\t\t\"~\": { dir: \"previousSibling\" }\n\t},\n\n\tpreFilter: {\n\t\tATTR: function( match ) {\n\t\t\tmatch[ 1 ] = match[ 1 ].replace( runescape, funescape );\n\n\t\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\t\tmatch[ 3 ] = ( match[ 3 ] || match[ 4 ] || match[ 5 ] || \"\" )\n\t\t\t\t.replace( runescape, funescape );\n\n\t\t\tif ( match[ 2 ] === \"~=\" ) {\n\t\t\t\tmatch[ 3 ] = \" \" + match[ 3 ] + \" \";\n\t\t\t}\n\n\t\t\treturn match.slice( 0, 4 );\n\t\t},\n\n\t\tCHILD: function( match ) {\n\n\t\t\t/* matches from matchExpr[\"CHILD\"]\n\t\t\t\t1 type (only|nth|...)\n\t\t\t\t2 what (child|of-type)\n\t\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t\t5 sign of xn-component\n\t\t\t\t6 x of xn-component\n\t\t\t\t7 sign of y-component\n\t\t\t\t8 y of y-component\n\t\t\t*/\n\t\t\tmatch[ 1 ] = match[ 1 ].toLowerCase();\n\n\t\t\tif ( match[ 1 ].slice( 0, 3 ) === \"nth\" ) {\n\n\t\t\t\t// nth-* requires argument\n\t\t\t\tif ( !match[ 3 ] ) {\n\t\t\t\t\tfind.error( match[ 0 ] );\n\t\t\t\t}\n\n\t\t\t\t// numeric x and y parameters for Expr.filter.CHILD\n\t\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\t\tmatch[ 4 ] = +( match[ 4 ] ?\n\t\t\t\t\tmatch[ 5 ] + ( match[ 6 ] || 1 ) :\n\t\t\t\t\t2 * ( match[ 3 ] === \"even\" || match[ 3 ] === \"odd\" )\n\t\t\t\t);\n\t\t\t\tmatch[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === \"odd\" );\n\n\t\t\t// other types prohibit arguments\n\t\t\t} else if ( match[ 3 ] ) {\n\t\t\t\tfind.error( match[ 0 ] );\n\t\t\t}\n\n\t\t\treturn match;\n\t\t},\n\n\t\tPSEUDO: function( match ) {\n\t\t\tvar excess,\n\t\t\t\tunquoted = !match[ 6 ] && match[ 2 ];\n\n\t\t\tif ( matchExpr.CHILD.test( match[ 0 ] ) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\t// Accept quoted arguments as-is\n\t\t\tif ( match[ 3 ] ) {\n\t\t\t\tmatch[ 2 ] = match[ 4 ] || match[ 5 ] || \"\";\n\n\t\t\t// Strip excess characters from unquoted arguments\n\t\t\t} else if ( unquoted && rpseudo.test( unquoted ) &&\n\n\t\t\t\t// Get excess from tokenize (recursively)\n\t\t\t\t( excess = tokenize( unquoted, true ) ) &&\n\n\t\t\t\t// advance to the next closing parenthesis\n\t\t\t\t( excess = unquoted.indexOf( \")\", unquoted.length - excess ) - unquoted.length ) ) {\n\n\t\t\t\t// excess is a negative index\n\t\t\t\tmatch[ 0 ] = match[ 0 ].slice( 0, excess );\n\t\t\t\tmatch[ 2 ] = unquoted.slice( 0, excess );\n\t\t\t}\n\n\t\t\t// Return only captures needed by the pseudo filter method (type and argument)\n\t\t\treturn match.slice( 0, 3 );\n\t\t}\n\t},\n\n\tfilter: {\n\n\t\tTAG: function( nodeNameSelector ) {\n\t\t\tvar expectedNodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn nodeNameSelector === \"*\" ?\n\t\t\t\tfunction() {\n\t\t\t\t\treturn true;\n\t\t\t\t} :\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn nodeName( elem, expectedNodeName );\n\t\t\t\t};\n\t\t},\n\n\t\tCLASS: function( className ) {\n\t\t\tvar pattern = classCache[ className + \" \" ];\n\n\t\t\treturn pattern ||\n\t\t\t\t( pattern = new RegExp( \"(^|\" + whitespace + \")\" + className +\n\t\t\t\t\t\"(\" + whitespace + \"|$)\" ) ) &&\n\t\t\t\tclassCache( className, function( elem ) {\n\t\t\t\t\treturn pattern.test(\n\t\t\t\t\t\ttypeof elem.className === \"string\" && elem.className ||\n\t\t\t\t\t\t\ttypeof elem.getAttribute !== \"undefined\" &&\n\t\t\t\t\t\t\t\telem.getAttribute( \"class\" ) ||\n\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t);\n\t\t\t\t} );\n\t\t},\n\n\t\tATTR: function( name, operator, check ) {\n\t\t\treturn function( elem ) {\n\t\t\t\tvar result = find.attr( elem, name );\n\n\t\t\t\tif ( result == null ) {\n\t\t\t\t\treturn operator === \"!=\";\n\t\t\t\t}\n\t\t\t\tif ( !operator ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tresult += \"\";\n\n\t\t\t\tif ( operator === \"=\" ) {\n\t\t\t\t\treturn result === check;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"!=\" ) {\n\t\t\t\t\treturn result !== check;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"^=\" ) {\n\t\t\t\t\treturn check && result.indexOf( check ) === 0;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"*=\" ) {\n\t\t\t\t\treturn check && result.indexOf( check ) > -1;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"$=\" ) {\n\t\t\t\t\treturn check && result.slice( -check.length ) === check;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"~=\" ) {\n\t\t\t\t\treturn ( \" \" + result.replace( rwhitespace, \" \" ) + \" \" )\n\t\t\t\t\t\t.indexOf( check ) > -1;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"|=\" ) {\n\t\t\t\t\treturn result === check || result.slice( 0, check.length + 1 ) === check + \"-\";\n\t\t\t\t}\n\n\t\t\t\treturn false;\n\t\t\t};\n\t\t},\n\n\t\tCHILD: function( type, what, _argument, first, last ) {\n\t\t\tvar simple = type.slice( 0, 3 ) !== \"nth\",\n\t\t\t\tforward = type.slice( -4 ) !== \"last\",\n\t\t\t\tofType = what === \"of-type\";\n\n\t\t\treturn first === 1 && last === 0 ?\n\n\t\t\t\t// Shortcut for :nth-*(n)\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn !!elem.parentNode;\n\t\t\t\t} :\n\n\t\t\t\tfunction( elem, _context, xml ) {\n\t\t\t\t\tvar cache, outerCache, node, nodeIndex, start,\n\t\t\t\t\t\tdir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n\t\t\t\t\t\tparent = elem.parentNode,\n\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\n\t\t\t\t\t\tuseCache = !xml && !ofType,\n\t\t\t\t\t\tdiff = false;\n\n\t\t\t\t\tif ( parent ) {\n\n\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\n\t\t\t\t\t\tif ( simple ) {\n\t\t\t\t\t\t\twhile ( dir ) {\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\twhile ( ( node = node[ dir ] ) ) {\n\t\t\t\t\t\t\t\t\tif ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnodeName( node, name ) :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) {\n\n\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven't yet done so)\n\t\t\t\t\t\t\t\tstart = dir = type === \"only\" && !start && \"nextSibling\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstart = [ forward ? parent.firstChild : parent.lastChild ];\n\n\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\n\t\t\t\t\t\tif ( forward && useCache ) {\n\n\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\t\t\t\t\t\t\touterCache = parent[ expando ] || ( parent[ expando ] = {} );\n\t\t\t\t\t\t\tcache = outerCache[ type ] || [];\n\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\tdiff = nodeIndex && cache[ 2 ];\n\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[ nodeIndex ];\n\n\t\t\t\t\t\t\twhile ( ( node = ++nodeIndex && node && node[ dir ] ||\n\n\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\n\t\t\t\t\t\t\t\t( diff = nodeIndex = 0 ) || start.pop() ) ) {\n\n\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\n\t\t\t\t\t\t\t\tif ( node.nodeType === 1 && ++diff && node === elem ) {\n\t\t\t\t\t\t\t\t\touterCache[ type ] = [ dirruns, nodeIndex, diff ];\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Use previously-cached element index if available\n\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\touterCache = elem[ expando ] || ( elem[ expando ] = {} );\n\t\t\t\t\t\t\t\tcache = outerCache[ type ] || [];\n\t\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\t\tdiff = nodeIndex;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// xml :nth-child(...)\n\t\t\t\t\t\t\t// or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t\tif ( diff === false ) {\n\n\t\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\n\t\t\t\t\t\t\t\twhile ( ( node = ++nodeIndex && node && node[ dir ] ||\n\t\t\t\t\t\t\t\t\t( diff = nodeIndex = 0 ) || start.pop() ) ) {\n\n\t\t\t\t\t\t\t\t\tif ( ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnodeName( node, name ) :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) &&\n\t\t\t\t\t\t\t\t\t\t++diff ) {\n\n\t\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\n\t\t\t\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t\t\t\touterCache = node[ expando ] ||\n\t\t\t\t\t\t\t\t\t\t\t\t( node[ expando ] = {} );\n\t\t\t\t\t\t\t\t\t\t\touterCache[ type ] = [ dirruns, diff ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tif ( node === elem ) {\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\n\t\t\t\t\t\tdiff -= last;\n\t\t\t\t\t\treturn diff === first || ( diff % first === 0 && diff / first >= 0 );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t},\n\n\t\tPSEUDO: function( pseudo, argument ) {\n\n\t\t\t// pseudo-class names are case-insensitive\n\t\t\t// https://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\tvar args,\n\t\t\t\tfn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||\n\t\t\t\t\tfind.error( \"unsupported pseudo: \" + pseudo );\n\n\t\t\t// The user may use createPseudo to indicate that\n\t\t\t// arguments are needed to create the filter function\n\t\t\t// just as jQuery does\n\t\t\tif ( fn[ expando ] ) {\n\t\t\t\treturn fn( argument );\n\t\t\t}\n\n\t\t\t// But maintain support for old signatures\n\t\t\tif ( fn.length > 1 ) {\n\t\t\t\targs = [ pseudo, pseudo, \"\", argument ];\n\t\t\t\treturn Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?\n\t\t\t\t\tmarkFunction( function( seed, matches ) {\n\t\t\t\t\t\tvar idx,\n\t\t\t\t\t\t\tmatched = fn( seed, argument ),\n\t\t\t\t\t\t\ti = matched.length;\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tidx = indexOf.call( seed, matched[ i ] );\n\t\t\t\t\t\t\tseed[ idx ] = !( matches[ idx ] = matched[ i ] );\n\t\t\t\t\t\t}\n\t\t\t\t\t} ) :\n\t\t\t\t\tfunction( elem ) {\n\t\t\t\t\t\treturn fn( elem, 0, args );\n\t\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn fn;\n\t\t}\n\t},\n\n\tpseudos: {\n\n\t\t// Potentially complex pseudos\n\t\tnot: markFunction( function( selector ) {\n\n\t\t\t// Trim the selector passed to compile\n\t\t\t// to avoid treating leading and trailing\n\t\t\t// spaces as combinators\n\t\t\tvar input = [],\n\t\t\t\tresults = [],\n\t\t\t\tmatcher = compile( selector.replace( rtrimCSS, \"$1\" ) );\n\n\t\t\treturn matcher[ expando ] ?\n\t\t\t\tmarkFunction( function( seed, matches, _context, xml ) {\n\t\t\t\t\tvar elem,\n\t\t\t\t\t\tunmatched = matcher( seed, null, xml, [] ),\n\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( ( elem = unmatched[ i ] ) ) {\n\t\t\t\t\t\t\tseed[ i ] = !( matches[ i ] = elem );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} ) :\n\t\t\t\tfunction( elem, _context, xml ) {\n\t\t\t\t\tinput[ 0 ] = elem;\n\t\t\t\t\tmatcher( input, null, xml, results );\n\n\t\t\t\t\t// Don't keep the element\n\t\t\t\t\t// (see https://github.com/jquery/sizzle/issues/299)\n\t\t\t\t\tinput[ 0 ] = null;\n\t\t\t\t\treturn !results.pop();\n\t\t\t\t};\n\t\t} ),\n\n\t\thas: markFunction( function( selector ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn find( selector, elem ).length > 0;\n\t\t\t};\n\t\t} ),\n\n\t\tcontains: markFunction( function( text ) {\n\t\t\ttext = text.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn ( elem.textContent || jQuery.text( elem ) ).indexOf( text ) > -1;\n\t\t\t};\n\t\t} ),\n\n\t\t// \"Whether an element is represented by a :lang() selector\n\t\t// is based solely on the element's language value\n\t\t// being equal to the identifier C,\n\t\t// or beginning with the identifier C immediately followed by \"-\".\n\t\t// The matching of C against the element's language value is performed case-insensitively.\n\t\t// The identifier C does not have to be a valid language name.\"\n\t\t// https://www.w3.org/TR/selectors/#lang-pseudo\n\t\tlang: markFunction( function( lang ) {\n\n\t\t\t// lang value must be a valid identifier\n\t\t\tif ( !ridentifier.test( lang || \"\" ) ) {\n\t\t\t\tfind.error( \"unsupported lang: \" + lang );\n\t\t\t}\n\t\t\tlang = lang.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn function( elem ) {\n\t\t\t\tvar elemLang;\n\t\t\t\tdo {\n\t\t\t\t\tif ( ( elemLang = documentIsHTML ?\n\t\t\t\t\t\telem.lang :\n\t\t\t\t\t\telem.getAttribute( \"xml:lang\" ) || elem.getAttribute( \"lang\" ) ) ) {\n\n\t\t\t\t\t\telemLang = elemLang.toLowerCase();\n\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf( lang + \"-\" ) === 0;\n\t\t\t\t\t}\n\t\t\t\t} while ( ( elem = elem.parentNode ) && elem.nodeType === 1 );\n\t\t\t\treturn false;\n\t\t\t};\n\t\t} ),\n\n\t\t// Miscellaneous\n\t\ttarget: function( elem ) {\n\t\t\tvar hash = window.location && window.location.hash;\n\t\t\treturn hash && hash.slice( 1 ) === elem.id;\n\t\t},\n\n\t\troot: function( elem ) {\n\t\t\treturn elem === documentElement;\n\t\t},\n\n\t\tfocus: function( elem ) {\n\t\t\treturn elem === safeActiveElement() &&\n\t\t\t\tdocument.hasFocus() &&\n\t\t\t\t!!( elem.type || elem.href || ~elem.tabIndex );\n\t\t},\n\n\t\t// Boolean properties\n\t\tenabled: createDisabledPseudo( false ),\n\t\tdisabled: createDisabledPseudo( true ),\n\n\t\tchecked: function( elem ) {\n\n\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t// https://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\treturn ( nodeName( elem, \"input\" ) && !!elem.checked ) ||\n\t\t\t\t( nodeName( elem, \"option\" ) && !!elem.selected );\n\t\t},\n\n\t\tselected: function( elem ) {\n\n\t\t\t// Support: IE <=11+\n\t\t\t// Accessing the selectedIndex property\n\t\t\t// forces the browser to treat the default option as\n\t\t\t// selected when in an optgroup.\n\t\t\tif ( elem.parentNode ) {\n\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t}\n\n\t\t\treturn elem.selected === true;\n\t\t},\n\n\t\t// Contents\n\t\tempty: function( elem ) {\n\n\t\t\t// https://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n\t\t\t//   but not by others (comment: 8; processing instruction: 7; etc.)\n\t\t\t// nodeType < 6 works because attributes (2) do not appear as children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tif ( elem.nodeType < 6 ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\tparent: function( elem ) {\n\t\t\treturn !Expr.pseudos.empty( elem );\n\t\t},\n\n\t\t// Element/input types\n\t\theader: function( elem ) {\n\t\t\treturn rheader.test( elem.nodeName );\n\t\t},\n\n\t\tinput: function( elem ) {\n\t\t\treturn rinputs.test( elem.nodeName );\n\t\t},\n\n\t\tbutton: function( elem ) {\n\t\t\treturn nodeName( elem, \"input\" ) && elem.type === \"button\" ||\n\t\t\t\tnodeName( elem, \"button\" );\n\t\t},\n\n\t\ttext: function( elem ) {\n\t\t\tvar attr;\n\t\t\treturn nodeName( elem, \"input\" ) && elem.type === \"text\" &&\n\n\t\t\t\t// Support: IE <10 only\n\t\t\t\t// New HTML5 attribute values (e.g., \"search\") appear\n\t\t\t\t// with elem.type === \"text\"\n\t\t\t\t( ( attr = elem.getAttribute( \"type\" ) ) == null ||\n\t\t\t\t\tattr.toLowerCase() === \"text\" );\n\t\t},\n\n\t\t// Position-in-collection\n\t\tfirst: createPositionalPseudo( function() {\n\t\t\treturn [ 0 ];\n\t\t} ),\n\n\t\tlast: createPositionalPseudo( function( _matchIndexes, length ) {\n\t\t\treturn [ length - 1 ];\n\t\t} ),\n\n\t\teq: createPositionalPseudo( function( _matchIndexes, length, argument ) {\n\t\t\treturn [ argument < 0 ? argument + length : argument ];\n\t\t} ),\n\n\t\teven: createPositionalPseudo( function( matchIndexes, length ) {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\todd: createPositionalPseudo( function( matchIndexes, length ) {\n\t\t\tvar i = 1;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\tlt: createPositionalPseudo( function( matchIndexes, length, argument ) {\n\t\t\tvar i;\n\n\t\t\tif ( argument < 0 ) {\n\t\t\t\ti = argument + length;\n\t\t\t} else if ( argument > length ) {\n\t\t\t\ti = length;\n\t\t\t} else {\n\t\t\t\ti = argument;\n\t\t\t}\n\n\t\t\tfor ( ; --i >= 0; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\tgt: createPositionalPseudo( function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; ++i < length; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} )\n\t}\n};\n\nExpr.pseudos.nth = Expr.pseudos.eq;\n\n// Add button/input type pseudos\nfor ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {\n\tExpr.pseudos[ i ] = createInputPseudo( i );\n}\nfor ( i in { submit: true, reset: true } ) {\n\tExpr.pseudos[ i ] = createButtonPseudo( i );\n}\n\n// Easy API for creating new setFilters\nfunction setFilters() {}\nsetFilters.prototype = Expr.filters = Expr.pseudos;\nExpr.setFilters = new setFilters();\n\nfunction tokenize( selector, parseOnly ) {\n\tvar matched, match, tokens, type,\n\t\tsoFar, groups, preFilters,\n\t\tcached = tokenCache[ selector + \" \" ];\n\n\tif ( cached ) {\n\t\treturn parseOnly ? 0 : cached.slice( 0 );\n\t}\n\n\tsoFar = selector;\n\tgroups = [];\n\tpreFilters = Expr.preFilter;\n\n\twhile ( soFar ) {\n\n\t\t// Comma and first run\n\t\tif ( !matched || ( match = rcomma.exec( soFar ) ) ) {\n\t\t\tif ( match ) {\n\n\t\t\t\t// Don't consume trailing commas as valid\n\t\t\t\tsoFar = soFar.slice( match[ 0 ].length ) || soFar;\n\t\t\t}\n\t\t\tgroups.push( ( tokens = [] ) );\n\t\t}\n\n\t\tmatched = false;\n\n\t\t// Combinators\n\t\tif ( ( match = rleadingCombinator.exec( soFar ) ) ) {\n\t\t\tmatched = match.shift();\n\t\t\ttokens.push( {\n\t\t\t\tvalue: matched,\n\n\t\t\t\t// Cast descendant combinators to space\n\t\t\t\ttype: match[ 0 ].replace( rtrimCSS, \" \" )\n\t\t\t} );\n\t\t\tsoFar = soFar.slice( matched.length );\n\t\t}\n\n\t\t// Filters\n\t\tfor ( type in Expr.filter ) {\n\t\t\tif ( ( match = matchExpr[ type ].exec( soFar ) ) && ( !preFilters[ type ] ||\n\t\t\t\t( match = preFilters[ type ]( match ) ) ) ) {\n\t\t\t\tmatched = match.shift();\n\t\t\t\ttokens.push( {\n\t\t\t\t\tvalue: matched,\n\t\t\t\t\ttype: type,\n\t\t\t\t\tmatches: match\n\t\t\t\t} );\n\t\t\t\tsoFar = soFar.slice( matched.length );\n\t\t\t}\n\t\t}\n\n\t\tif ( !matched ) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t// Return the length of the invalid excess\n\t// if we're just parsing\n\t// Otherwise, throw an error or return tokens\n\tif ( parseOnly ) {\n\t\treturn soFar.length;\n\t}\n\n\treturn soFar ?\n\t\tfind.error( selector ) :\n\n\t\t// Cache the tokens\n\t\ttokenCache( selector, groups ).slice( 0 );\n}\n\nfunction toSelector( tokens ) {\n\tvar i = 0,\n\t\tlen = tokens.length,\n\t\tselector = \"\";\n\tfor ( ; i < len; i++ ) {\n\t\tselector += tokens[ i ].value;\n\t}\n\treturn selector;\n}\n\nfunction addCombinator( matcher, combinator, base ) {\n\tvar dir = combinator.dir,\n\t\tskip = combinator.next,\n\t\tkey = skip || dir,\n\t\tcheckNonElements = base && key === \"parentNode\",\n\t\tdoneName = done++;\n\n\treturn combinator.first ?\n\n\t\t// Check against closest ancestor/preceding element\n\t\tfunction( elem, context, xml ) {\n\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\treturn matcher( elem, context, xml );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t} :\n\n\t\t// Check against all ancestor/preceding elements\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar oldCache, outerCache,\n\t\t\t\tnewCache = [ dirruns, doneName ];\n\n\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching\n\t\t\tif ( xml ) {\n\t\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\touterCache = elem[ expando ] || ( elem[ expando ] = {} );\n\n\t\t\t\t\t\tif ( skip && nodeName( elem, skip ) ) {\n\t\t\t\t\t\t\telem = elem[ dir ] || elem;\n\t\t\t\t\t\t} else if ( ( oldCache = outerCache[ key ] ) &&\n\t\t\t\t\t\t\toldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {\n\n\t\t\t\t\t\t\t// Assign to newCache so results back-propagate to previous elements\n\t\t\t\t\t\t\treturn ( newCache[ 2 ] = oldCache[ 2 ] );\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Reuse newcache so results back-propagate to previous elements\n\t\t\t\t\t\t\touterCache[ key ] = newCache;\n\n\t\t\t\t\t\t\t// A match means we're done; a fail means we have to keep checking\n\t\t\t\t\t\t\tif ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) {\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n}\n\nfunction elementMatcher( matchers ) {\n\treturn matchers.length > 1 ?\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar i = matchers.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( !matchers[ i ]( elem, context, xml ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t} :\n\t\tmatchers[ 0 ];\n}\n\nfunction multipleContexts( selector, contexts, results ) {\n\tvar i = 0,\n\t\tlen = contexts.length;\n\tfor ( ; i < len; i++ ) {\n\t\tfind( selector, contexts[ i ], results );\n\t}\n\treturn results;\n}\n\nfunction condense( unmatched, map, filter, context, xml ) {\n\tvar elem,\n\t\tnewUnmatched = [],\n\t\ti = 0,\n\t\tlen = unmatched.length,\n\t\tmapped = map != null;\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( ( elem = unmatched[ i ] ) ) {\n\t\t\tif ( !filter || filter( elem, context, xml ) ) {\n\t\t\t\tnewUnmatched.push( elem );\n\t\t\t\tif ( mapped ) {\n\t\t\t\t\tmap.push( i );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn newUnmatched;\n}\n\nfunction setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {\n\tif ( postFilter && !postFilter[ expando ] ) {\n\t\tpostFilter = setMatcher( postFilter );\n\t}\n\tif ( postFinder && !postFinder[ expando ] ) {\n\t\tpostFinder = setMatcher( postFinder, postSelector );\n\t}\n\treturn markFunction( function( seed, results, context, xml ) {\n\t\tvar temp, i, elem, matcherOut,\n\t\t\tpreMap = [],\n\t\t\tpostMap = [],\n\t\t\tpreexisting = results.length,\n\n\t\t\t// Get initial elements from seed or context\n\t\t\telems = seed ||\n\t\t\t\tmultipleContexts( selector || \"*\",\n\t\t\t\t\tcontext.nodeType ? [ context ] : context, [] ),\n\n\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\tmatcherIn = preFilter && ( seed || !selector ) ?\n\t\t\t\tcondense( elems, preMap, preFilter, context, xml ) :\n\t\t\t\telems;\n\n\t\tif ( matcher ) {\n\n\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter\n\t\t\t// or preexisting results,\n\t\t\tmatcherOut = postFinder || ( seed ? preFilter : preexisting || postFilter ) ?\n\n\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t[] :\n\n\t\t\t\t// ...otherwise use results directly\n\t\t\t\tresults;\n\n\t\t\t// Find primary matches\n\t\t\tmatcher( matcherIn, matcherOut, context, xml );\n\t\t} else {\n\t\t\tmatcherOut = matcherIn;\n\t\t}\n\n\t\t// Apply postFilter\n\t\tif ( postFilter ) {\n\t\t\ttemp = condense( matcherOut, postMap );\n\t\t\tpostFilter( temp, [], context, xml );\n\n\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\ti = temp.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( ( elem = temp[ i ] ) ) {\n\t\t\t\t\tmatcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( seed ) {\n\t\t\tif ( postFinder || preFilter ) {\n\t\t\t\tif ( postFinder ) {\n\n\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\n\t\t\t\t\ttemp = [];\n\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( ( elem = matcherOut[ i ] ) ) {\n\n\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\n\t\t\t\t\t\t\ttemp.push( ( matcherIn[ i ] = elem ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpostFinder( null, ( matcherOut = [] ), temp, xml );\n\t\t\t\t}\n\n\t\t\t\t// Move matched elements from seed to results to keep them synchronized\n\t\t\t\ti = matcherOut.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tif ( ( elem = matcherOut[ i ] ) &&\n\t\t\t\t\t\t( temp = postFinder ? indexOf.call( seed, elem ) : preMap[ i ] ) > -1 ) {\n\n\t\t\t\t\t\tseed[ temp ] = !( results[ temp ] = elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Add elements to results, through postFinder if defined\n\t\t} else {\n\t\t\tmatcherOut = condense(\n\t\t\t\tmatcherOut === results ?\n\t\t\t\t\tmatcherOut.splice( preexisting, matcherOut.length ) :\n\t\t\t\t\tmatcherOut\n\t\t\t);\n\t\t\tif ( postFinder ) {\n\t\t\t\tpostFinder( null, results, matcherOut, xml );\n\t\t\t} else {\n\t\t\t\tpush.apply( results, matcherOut );\n\t\t\t}\n\t\t}\n\t} );\n}\n\nfunction matcherFromTokens( tokens ) {\n\tvar checkContext, matcher, j,\n\t\tlen = tokens.length,\n\t\tleadingRelative = Expr.relative[ tokens[ 0 ].type ],\n\t\timplicitRelative = leadingRelative || Expr.relative[ \" \" ],\n\t\ti = leadingRelative ? 1 : 0,\n\n\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\n\t\tmatchContext = addCombinator( function( elem ) {\n\t\t\treturn elem === checkContext;\n\t\t}, implicitRelative, true ),\n\t\tmatchAnyContext = addCombinator( function( elem ) {\n\t\t\treturn indexOf.call( checkContext, elem ) > -1;\n\t\t}, implicitRelative, true ),\n\t\tmatchers = [ function( elem, context, xml ) {\n\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tvar ret = ( !leadingRelative && ( xml || context != outermostContext ) ) || (\n\t\t\t\t( checkContext = context ).nodeType ?\n\t\t\t\t\tmatchContext( elem, context, xml ) :\n\t\t\t\t\tmatchAnyContext( elem, context, xml ) );\n\n\t\t\t// Avoid hanging onto element\n\t\t\t// (see https://github.com/jquery/sizzle/issues/299)\n\t\t\tcheckContext = null;\n\t\t\treturn ret;\n\t\t} ];\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( ( matcher = Expr.relative[ tokens[ i ].type ] ) ) {\n\t\t\tmatchers = [ addCombinator( elementMatcher( matchers ), matcher ) ];\n\t\t} else {\n\t\t\tmatcher = Expr.filter[ tokens[ i ].type ].apply( null, tokens[ i ].matches );\n\n\t\t\t// Return special upon seeing a positional matcher\n\t\t\tif ( matcher[ expando ] ) {\n\n\t\t\t\t// Find the next relative operator (if any) for proper handling\n\t\t\t\tj = ++i;\n\t\t\t\tfor ( ; j < len; j++ ) {\n\t\t\t\t\tif ( Expr.relative[ tokens[ j ].type ] ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn setMatcher(\n\t\t\t\t\ti > 1 && elementMatcher( matchers ),\n\t\t\t\t\ti > 1 && toSelector(\n\n\t\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\t\ttokens.slice( 0, i - 1 )\n\t\t\t\t\t\t\t.concat( { value: tokens[ i - 2 ].type === \" \" ? \"*\" : \"\" } )\n\t\t\t\t\t).replace( rtrimCSS, \"$1\" ),\n\t\t\t\t\tmatcher,\n\t\t\t\t\ti < j && matcherFromTokens( tokens.slice( i, j ) ),\n\t\t\t\t\tj < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ),\n\t\t\t\t\tj < len && toSelector( tokens )\n\t\t\t\t);\n\t\t\t}\n\t\t\tmatchers.push( matcher );\n\t\t}\n\t}\n\n\treturn elementMatcher( matchers );\n}\n\nfunction matcherFromGroupMatchers( elementMatchers, setMatchers ) {\n\tvar bySet = setMatchers.length > 0,\n\t\tbyElement = elementMatchers.length > 0,\n\t\tsuperMatcher = function( seed, context, xml, results, outermost ) {\n\t\t\tvar elem, j, matcher,\n\t\t\t\tmatchedCount = 0,\n\t\t\t\ti = \"0\",\n\t\t\t\tunmatched = seed && [],\n\t\t\t\tsetMatched = [],\n\t\t\t\tcontextBackup = outermostContext,\n\n\t\t\t\t// We must always have either seed elements or outermost context\n\t\t\t\telems = seed || byElement && Expr.find.TAG( \"*\", outermost ),\n\n\t\t\t\t// Use integer dirruns iff this is the outermost matcher\n\t\t\t\tdirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 ),\n\t\t\t\tlen = elems.length;\n\n\t\t\tif ( outermost ) {\n\n\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\toutermostContext = context == document || context || outermost;\n\t\t\t}\n\n\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\t// Support: iOS <=7 - 9 only\n\t\t\t// Tolerate NodeList properties (IE: \"length\"; Safari: <number>) matching\n\t\t\t// elements by id. (see trac-14142)\n\t\t\tfor ( ; i !== len && ( elem = elems[ i ] ) != null; i++ ) {\n\t\t\t\tif ( byElement && elem ) {\n\t\t\t\t\tj = 0;\n\n\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tif ( !context && elem.ownerDocument != document ) {\n\t\t\t\t\t\tsetDocument( elem );\n\t\t\t\t\t\txml = !documentIsHTML;\n\t\t\t\t\t}\n\t\t\t\t\twhile ( ( matcher = elementMatchers[ j++ ] ) ) {\n\t\t\t\t\t\tif ( matcher( elem, context || document, xml ) ) {\n\t\t\t\t\t\t\tpush.call( results, elem );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( outermost ) {\n\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Track unmatched elements for set filters\n\t\t\t\tif ( bySet ) {\n\n\t\t\t\t\t// They will have gone through all possible matchers\n\t\t\t\t\tif ( ( elem = !matcher && elem ) ) {\n\t\t\t\t\t\tmatchedCount--;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Lengthen the array for every element, matched or not\n\t\t\t\t\tif ( seed ) {\n\t\t\t\t\t\tunmatched.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// `i` is now the count of elements visited above, and adding it to `matchedCount`\n\t\t\t// makes the latter nonnegative.\n\t\t\tmatchedCount += i;\n\n\t\t\t// Apply set filters to unmatched elements\n\t\t\t// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`\n\t\t\t// equals `i`), unless we didn't visit _any_ elements in the above loop because we have\n\t\t\t// no element matchers and no seed.\n\t\t\t// Incrementing an initially-string \"0\" `i` allows `i` to remain a string only in that\n\t\t\t// case, which will result in a \"00\" `matchedCount` that differs from `i` but is also\n\t\t\t// numerically zero.\n\t\t\tif ( bySet && i !== matchedCount ) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ( ( matcher = setMatchers[ j++ ] ) ) {\n\t\t\t\t\tmatcher( unmatched, setMatched, context, xml );\n\t\t\t\t}\n\n\t\t\t\tif ( seed ) {\n\n\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\n\t\t\t\t\tif ( matchedCount > 0 ) {\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tif ( !( unmatched[ i ] || setMatched[ i ] ) ) {\n\t\t\t\t\t\t\t\tsetMatched[ i ] = pop.call( results );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Discard index placeholder values to get only actual matches\n\t\t\t\t\tsetMatched = condense( setMatched );\n\t\t\t\t}\n\n\t\t\t\t// Add matches to results\n\t\t\t\tpush.apply( results, setMatched );\n\n\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\n\t\t\t\tif ( outermost && !seed && setMatched.length > 0 &&\n\t\t\t\t\t( matchedCount + setMatchers.length ) > 1 ) {\n\n\t\t\t\t\tjQuery.uniqueSort( results );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override manipulation of globals by nested matchers\n\t\t\tif ( outermost ) {\n\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\toutermostContext = contextBackup;\n\t\t\t}\n\n\t\t\treturn unmatched;\n\t\t};\n\n\treturn bySet ?\n\t\tmarkFunction( superMatcher ) :\n\t\tsuperMatcher;\n}\n\nfunction compile( selector, match /* Internal Use Only */ ) {\n\tvar i,\n\t\tsetMatchers = [],\n\t\telementMatchers = [],\n\t\tcached = compilerCache[ selector + \" \" ];\n\n\tif ( !cached ) {\n\n\t\t// Generate a function of recursive functions that can be used to check each element\n\t\tif ( !match ) {\n\t\t\tmatch = tokenize( selector );\n\t\t}\n\t\ti = match.length;\n\t\twhile ( i-- ) {\n\t\t\tcached = matcherFromTokens( match[ i ] );\n\t\t\tif ( cached[ expando ] ) {\n\t\t\t\tsetMatchers.push( cached );\n\t\t\t} else {\n\t\t\t\telementMatchers.push( cached );\n\t\t\t}\n\t\t}\n\n\t\t// Cache the compiled function\n\t\tcached = compilerCache( selector,\n\t\t\tmatcherFromGroupMatchers( elementMatchers, setMatchers ) );\n\n\t\t// Save selector and tokenization\n\t\tcached.selector = selector;\n\t}\n\treturn cached;\n}\n\n/**\n * A low-level selection function that works with jQuery's compiled\n *  selector functions\n * @param {String|Function} selector A selector or a pre-compiled\n *  selector function built with jQuery selector compile\n * @param {Element} context\n * @param {Array} [results]\n * @param {Array} [seed] A set of elements to match against\n */\nfunction select( selector, context, results, seed ) {\n\tvar i, tokens, token, type, find,\n\t\tcompiled = typeof selector === \"function\" && selector,\n\t\tmatch = !seed && tokenize( ( selector = compiled.selector || selector ) );\n\n\tresults = results || [];\n\n\t// Try to minimize operations if there is only one selector in the list and no seed\n\t// (the latter of which guarantees us context)\n\tif ( match.length === 1 ) {\n\n\t\t// Reduce context if the leading compound selector is an ID\n\t\ttokens = match[ 0 ] = match[ 0 ].slice( 0 );\n\t\tif ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === \"ID\" &&\n\t\t\t\tcontext.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[ 1 ].type ] ) {\n\n\t\t\tcontext = ( Expr.find.ID(\n\t\t\t\ttoken.matches[ 0 ].replace( runescape, funescape ),\n\t\t\t\tcontext\n\t\t\t) || [] )[ 0 ];\n\t\t\tif ( !context ) {\n\t\t\t\treturn results;\n\n\t\t\t// Precompiled matchers will still verify ancestry, so step up a level\n\t\t\t} else if ( compiled ) {\n\t\t\t\tcontext = context.parentNode;\n\t\t\t}\n\n\t\t\tselector = selector.slice( tokens.shift().value.length );\n\t\t}\n\n\t\t// Fetch a seed set for right-to-left matching\n\t\ti = matchExpr.needsContext.test( selector ) ? 0 : tokens.length;\n\t\twhile ( i-- ) {\n\t\t\ttoken = tokens[ i ];\n\n\t\t\t// Abort if we hit a combinator\n\t\t\tif ( Expr.relative[ ( type = token.type ) ] ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( ( find = Expr.find[ type ] ) ) {\n\n\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\tif ( ( seed = find(\n\t\t\t\t\ttoken.matches[ 0 ].replace( runescape, funescape ),\n\t\t\t\t\trsibling.test( tokens[ 0 ].type ) &&\n\t\t\t\t\t\ttestContext( context.parentNode ) || context\n\t\t\t\t) ) ) {\n\n\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\ttokens.splice( i, 1 );\n\t\t\t\t\tselector = seed.length && toSelector( tokens );\n\t\t\t\t\tif ( !selector ) {\n\t\t\t\t\t\tpush.apply( results, seed );\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Compile and execute a filtering function if one is not provided\n\t// Provide `match` to avoid retokenization if we modified the selector above\n\t( compiled || compile( selector, match ) )(\n\t\tseed,\n\t\tcontext,\n\t\t!documentIsHTML,\n\t\tresults,\n\t\t!context || rsibling.test( selector ) && testContext( context.parentNode ) || context\n\t);\n\treturn results;\n}\n\n// One-time assignments\n\n// Support: Android <=4.0 - 4.1+\n// Sort stability\nsupport.sortStable = expando.split( \"\" ).sort( sortOrder ).join( \"\" ) === expando;\n\n// Initialize against the default document\nsetDocument();\n\n// Support: Android <=4.0 - 4.1+\n// Detached nodes confoundingly follow *each other*\nsupport.sortDetached = assert( function( el ) {\n\n\t// Should return 1, but returns 4 (following)\n\treturn el.compareDocumentPosition( document.createElement( \"fieldset\" ) ) & 1;\n} );\n\njQuery.find = find;\n\n// Deprecated\njQuery.expr[ \":\" ] = jQuery.expr.pseudos;\njQuery.unique = jQuery.uniqueSort;\n\n// These have always been private, but they used to be documented as part of\n// Sizzle so let's maintain them for now for backwards compatibility purposes.\nfind.compile = compile;\nfind.select = select;\nfind.setDocument = setDocument;\nfind.tokenize = tokenize;\n\nfind.escape = jQuery.escapeSelector;\nfind.getText = jQuery.text;\nfind.isXML = jQuery.isXMLDoc;\nfind.selectors = jQuery.expr;\nfind.support = jQuery.support;\nfind.uniqueSort = jQuery.uniqueSort;\n\n\t/* eslint-enable */\n\n} )();\n\n\nvar dir = function( elem, dir, until ) {\n\tvar matched = [],\n\t\ttruncate = until !== undefined;\n\n\twhile ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {\n\t\tif ( elem.nodeType === 1 ) {\n\t\t\tif ( truncate && jQuery( elem ).is( until ) ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tmatched.push( elem );\n\t\t}\n\t}\n\treturn matched;\n};\n\n\nvar siblings = function( n, elem ) {\n\tvar matched = [];\n\n\tfor ( ; n; n = n.nextSibling ) {\n\t\tif ( n.nodeType === 1 && n !== elem ) {\n\t\t\tmatched.push( n );\n\t\t}\n\t}\n\n\treturn matched;\n};\n\n\nvar rneedsContext = jQuery.expr.match.needsContext;\n\nvar rsingleTag = ( /^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i );\n\n\n\n// Implement the identical functionality for filter and not\nfunction winnow( elements, qualifier, not ) {\n\tif ( isFunction( qualifier ) ) {\n\t\treturn jQuery.grep( elements, function( elem, i ) {\n\t\t\treturn !!qualifier.call( elem, i, elem ) !== not;\n\t\t} );\n\t}\n\n\t// Single element\n\tif ( qualifier.nodeType ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( elem === qualifier ) !== not;\n\t\t} );\n\t}\n\n\t// Arraylike of elements (jQuery, arguments, Array)\n\tif ( typeof qualifier !== \"string\" ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( indexOf.call( qualifier, elem ) > -1 ) !== not;\n\t\t} );\n\t}\n\n\t// Filtered directly for both simple and complex selectors\n\treturn jQuery.filter( qualifier, elements, not );\n}\n\njQuery.filter = function( expr, elems, not ) {\n\tvar elem = elems[ 0 ];\n\n\tif ( not ) {\n\t\texpr = \":not(\" + expr + \")\";\n\t}\n\n\tif ( elems.length === 1 && elem.nodeType === 1 ) {\n\t\treturn jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [];\n\t}\n\n\treturn jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {\n\t\treturn elem.nodeType === 1;\n\t} ) );\n};\n\njQuery.fn.extend( {\n\tfind: function( selector ) {\n\t\tvar i, ret,\n\t\t\tlen = this.length,\n\t\t\tself = this;\n\n\t\tif ( typeof selector !== \"string\" ) {\n\t\t\treturn this.pushStack( jQuery( selector ).filter( function() {\n\t\t\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\t\t\tif ( jQuery.contains( self[ i ], this ) ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} ) );\n\t\t}\n\n\t\tret = this.pushStack( [] );\n\n\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\tjQuery.find( selector, self[ i ], ret );\n\t\t}\n\n\t\treturn len > 1 ? jQuery.uniqueSort( ret ) : ret;\n\t},\n\tfilter: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], false ) );\n\t},\n\tnot: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], true ) );\n\t},\n\tis: function( selector ) {\n\t\treturn !!winnow(\n\t\t\tthis,\n\n\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n\t\t\ttypeof selector === \"string\" && rneedsContext.test( selector ) ?\n\t\t\t\tjQuery( selector ) :\n\t\t\t\tselector || [],\n\t\t\tfalse\n\t\t).length;\n\t}\n} );\n\n\n// Initialize a jQuery object\n\n\n// A central reference to the root jQuery(document)\nvar rootjQuery,\n\n\t// A simple way to check for HTML strings\n\t// Prioritize #id over <tag> to avoid XSS via location.hash (trac-9521)\n\t// Strict HTML recognition (trac-11290: must start with <)\n\t// Shortcut simple #id case for speed\n\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/,\n\n\tinit = jQuery.fn.init = function( selector, context, root ) {\n\t\tvar match, elem;\n\n\t\t// HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\t\tif ( !selector ) {\n\t\t\treturn this;\n\t\t}\n\n\t\t// Method init() accepts an alternate rootjQuery\n\t\t// so migrate can support jQuery.sub (gh-2101)\n\t\troot = root || rootjQuery;\n\n\t\t// Handle HTML strings\n\t\tif ( typeof selector === \"string\" ) {\n\t\t\tif ( selector[ 0 ] === \"<\" &&\n\t\t\t\tselector[ selector.length - 1 ] === \">\" &&\n\t\t\t\tselector.length >= 3 ) {\n\n\t\t\t\t// Assume that strings that start and end with <> are HTML and skip the regex check\n\t\t\t\tmatch = [ null, selector, null ];\n\n\t\t\t} else {\n\t\t\t\tmatch = rquickExpr.exec( selector );\n\t\t\t}\n\n\t\t\t// Match html or make sure no context is specified for #id\n\t\t\tif ( match && ( match[ 1 ] || !context ) ) {\n\n\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\tif ( match[ 1 ] ) {\n\t\t\t\t\tcontext = context instanceof jQuery ? context[ 0 ] : context;\n\n\t\t\t\t\t// Option to run scripts is true for back-compat\n\t\t\t\t\t// Intentionally let the error be thrown if parseHTML is not present\n\t\t\t\t\tjQuery.merge( this, jQuery.parseHTML(\n\t\t\t\t\t\tmatch[ 1 ],\n\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t) );\n\n\t\t\t\t\t// HANDLE: $(html, props)\n\t\t\t\t\tif ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {\n\t\t\t\t\t\tfor ( match in context ) {\n\n\t\t\t\t\t\t\t// Properties of context are called as methods if possible\n\t\t\t\t\t\t\tif ( isFunction( this[ match ] ) ) {\n\t\t\t\t\t\t\t\tthis[ match ]( context[ match ] );\n\n\t\t\t\t\t\t\t// ...and otherwise set as attributes\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.attr( match, context[ match ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn this;\n\n\t\t\t\t// HANDLE: $(#id)\n\t\t\t\t} else {\n\t\t\t\t\telem = document.getElementById( match[ 2 ] );\n\n\t\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t\t// Inject the element directly into the jQuery object\n\t\t\t\t\t\tthis[ 0 ] = elem;\n\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\n\t\t\t// HANDLE: $(expr, $(...))\n\t\t\t} else if ( !context || context.jquery ) {\n\t\t\t\treturn ( context || root ).find( selector );\n\n\t\t\t// HANDLE: $(expr, context)\n\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t} else {\n\t\t\t\treturn this.constructor( context ).find( selector );\n\t\t\t}\n\n\t\t// HANDLE: $(DOMElement)\n\t\t} else if ( selector.nodeType ) {\n\t\t\tthis[ 0 ] = selector;\n\t\t\tthis.length = 1;\n\t\t\treturn this;\n\n\t\t// HANDLE: $(function)\n\t\t// Shortcut for document ready\n\t\t} else if ( isFunction( selector ) ) {\n\t\t\treturn root.ready !== undefined ?\n\t\t\t\troot.ready( selector ) :\n\n\t\t\t\t// Execute immediately if ready is not present\n\t\t\t\tselector( jQuery );\n\t\t}\n\n\t\treturn jQuery.makeArray( selector, this );\n\t};\n\n// Give the init function the jQuery prototype for later instantiation\ninit.prototype = jQuery.fn;\n\n// Initialize central reference\nrootjQuery = jQuery( document );\n\n\nvar rparentsprev = /^(?:parents|prev(?:Until|All))/,\n\n\t// Methods guaranteed to produce a unique set when starting from a unique set\n\tguaranteedUnique = {\n\t\tchildren: true,\n\t\tcontents: true,\n\t\tnext: true,\n\t\tprev: true\n\t};\n\njQuery.fn.extend( {\n\thas: function( target ) {\n\t\tvar targets = jQuery( target, this ),\n\t\t\tl = targets.length;\n\n\t\treturn this.filter( function() {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tif ( jQuery.contains( this, targets[ i ] ) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\tclosest: function( selectors, context ) {\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\tl = this.length,\n\t\t\tmatched = [],\n\t\t\ttargets = typeof selectors !== \"string\" && jQuery( selectors );\n\n\t\t// Positional selectors never match, since there's no _selection_ context\n\t\tif ( !rneedsContext.test( selectors ) ) {\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tfor ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {\n\n\t\t\t\t\t// Always skip document fragments\n\t\t\t\t\tif ( cur.nodeType < 11 && ( targets ?\n\t\t\t\t\t\ttargets.index( cur ) > -1 :\n\n\t\t\t\t\t\t// Don't pass non-elements to jQuery#find\n\t\t\t\t\t\tcur.nodeType === 1 &&\n\t\t\t\t\t\t\tjQuery.find.matchesSelector( cur, selectors ) ) ) {\n\n\t\t\t\t\t\tmatched.push( cur );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );\n\t},\n\n\t// Determine the position of an element within the set\n\tindex: function( elem ) {\n\n\t\t// No argument, return index in parent\n\t\tif ( !elem ) {\n\t\t\treturn ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;\n\t\t}\n\n\t\t// Index in selector\n\t\tif ( typeof elem === \"string\" ) {\n\t\t\treturn indexOf.call( jQuery( elem ), this[ 0 ] );\n\t\t}\n\n\t\t// Locate the position of the desired element\n\t\treturn indexOf.call( this,\n\n\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\telem.jquery ? elem[ 0 ] : elem\n\t\t);\n\t},\n\n\tadd: function( selector, context ) {\n\t\treturn this.pushStack(\n\t\t\tjQuery.uniqueSort(\n\t\t\t\tjQuery.merge( this.get(), jQuery( selector, context ) )\n\t\t\t)\n\t\t);\n\t},\n\n\taddBack: function( selector ) {\n\t\treturn this.add( selector == null ?\n\t\t\tthis.prevObject : this.prevObject.filter( selector )\n\t\t);\n\t}\n} );\n\nfunction sibling( cur, dir ) {\n\twhile ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}\n\treturn cur;\n}\n\njQuery.each( {\n\tparent: function( elem ) {\n\t\tvar parent = elem.parentNode;\n\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t},\n\tparents: function( elem ) {\n\t\treturn dir( elem, \"parentNode\" );\n\t},\n\tparentsUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"parentNode\", until );\n\t},\n\tnext: function( elem ) {\n\t\treturn sibling( elem, \"nextSibling\" );\n\t},\n\tprev: function( elem ) {\n\t\treturn sibling( elem, \"previousSibling\" );\n\t},\n\tnextAll: function( elem ) {\n\t\treturn dir( elem, \"nextSibling\" );\n\t},\n\tprevAll: function( elem ) {\n\t\treturn dir( elem, \"previousSibling\" );\n\t},\n\tnextUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"nextSibling\", until );\n\t},\n\tprevUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"previousSibling\", until );\n\t},\n\tsiblings: function( elem ) {\n\t\treturn siblings( ( elem.parentNode || {} ).firstChild, elem );\n\t},\n\tchildren: function( elem ) {\n\t\treturn siblings( elem.firstChild );\n\t},\n\tcontents: function( elem ) {\n\t\tif ( elem.contentDocument != null &&\n\n\t\t\t// Support: IE 11+\n\t\t\t// <object> elements with no `data` attribute has an object\n\t\t\t// `contentDocument` with a `null` prototype.\n\t\t\tgetProto( elem.contentDocument ) ) {\n\n\t\t\treturn elem.contentDocument;\n\t\t}\n\n\t\t// Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only\n\t\t// Treat the template element as a regular one in browsers that\n\t\t// don't support it.\n\t\tif ( nodeName( elem, \"template\" ) ) {\n\t\t\telem = elem.content || elem;\n\t\t}\n\n\t\treturn jQuery.merge( [], elem.childNodes );\n\t}\n}, function( name, fn ) {\n\tjQuery.fn[ name ] = function( until, selector ) {\n\t\tvar matched = jQuery.map( this, fn, until );\n\n\t\tif ( name.slice( -5 ) !== \"Until\" ) {\n\t\t\tselector = until;\n\t\t}\n\n\t\tif ( selector && typeof selector === \"string\" ) {\n\t\t\tmatched = jQuery.filter( selector, matched );\n\t\t}\n\n\t\tif ( this.length > 1 ) {\n\n\t\t\t// Remove duplicates\n\t\t\tif ( !guaranteedUnique[ name ] ) {\n\t\t\t\tjQuery.uniqueSort( matched );\n\t\t\t}\n\n\t\t\t// Reverse order for parents* and prev-derivatives\n\t\t\tif ( rparentsprev.test( name ) ) {\n\t\t\t\tmatched.reverse();\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched );\n\t};\n} );\nvar rnothtmlwhite = ( /[^\\x20\\t\\r\\n\\f]+/g );\n\n\n\n// Convert String-formatted options into Object-formatted ones\nfunction createOptions( options ) {\n\tvar object = {};\n\tjQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) {\n\t\tobject[ flag ] = true;\n\t} );\n\treturn object;\n}\n\n/*\n * Create a callback list using the following parameters:\n *\n *\toptions: an optional list of space-separated options that will change how\n *\t\t\tthe callback list behaves or a more traditional option object\n *\n * By default a callback list will act like an event callback list and can be\n * \"fired\" multiple times.\n *\n * Possible options:\n *\n *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n *\n *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n *\t\t\t\t\tvalues (like a Deferred)\n *\n *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n *\n *\tstopOnFalse:\tinterrupt callings when a callback returns false\n *\n */\njQuery.Callbacks = function( options ) {\n\n\t// Convert options from String-formatted to Object-formatted if needed\n\t// (we check in cache first)\n\toptions = typeof options === \"string\" ?\n\t\tcreateOptions( options ) :\n\t\tjQuery.extend( {}, options );\n\n\tvar // Flag to know if list is currently firing\n\t\tfiring,\n\n\t\t// Last fire value for non-forgettable lists\n\t\tmemory,\n\n\t\t// Flag to know if list was already fired\n\t\tfired,\n\n\t\t// Flag to prevent firing\n\t\tlocked,\n\n\t\t// Actual callback list\n\t\tlist = [],\n\n\t\t// Queue of execution data for repeatable lists\n\t\tqueue = [],\n\n\t\t// Index of currently firing callback (modified by add/remove as needed)\n\t\tfiringIndex = -1,\n\n\t\t// Fire callbacks\n\t\tfire = function() {\n\n\t\t\t// Enforce single-firing\n\t\t\tlocked = locked || options.once;\n\n\t\t\t// Execute callbacks for all pending executions,\n\t\t\t// respecting firingIndex overrides and runtime changes\n\t\t\tfired = firing = true;\n\t\t\tfor ( ; queue.length; firingIndex = -1 ) {\n\t\t\t\tmemory = queue.shift();\n\t\t\t\twhile ( ++firingIndex < list.length ) {\n\n\t\t\t\t\t// Run callback and check for early termination\n\t\t\t\t\tif ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&\n\t\t\t\t\t\toptions.stopOnFalse ) {\n\n\t\t\t\t\t\t// Jump to end and forget the data so .add doesn't re-fire\n\t\t\t\t\t\tfiringIndex = list.length;\n\t\t\t\t\t\tmemory = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Forget the data if we're done with it\n\t\t\tif ( !options.memory ) {\n\t\t\t\tmemory = false;\n\t\t\t}\n\n\t\t\tfiring = false;\n\n\t\t\t// Clean up if we're done firing for good\n\t\t\tif ( locked ) {\n\n\t\t\t\t// Keep an empty list if we have data for future add calls\n\t\t\t\tif ( memory ) {\n\t\t\t\t\tlist = [];\n\n\t\t\t\t// Otherwise, this object is spent\n\t\t\t\t} else {\n\t\t\t\t\tlist = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Actual Callbacks object\n\t\tself = {\n\n\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\tadd: function() {\n\t\t\t\tif ( list ) {\n\n\t\t\t\t\t// If we have memory from a past run, we should fire after adding\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfiringIndex = list.length - 1;\n\t\t\t\t\t\tqueue.push( memory );\n\t\t\t\t\t}\n\n\t\t\t\t\t( function add( args ) {\n\t\t\t\t\t\tjQuery.each( args, function( _, arg ) {\n\t\t\t\t\t\t\tif ( isFunction( arg ) ) {\n\t\t\t\t\t\t\t\tif ( !options.unique || !self.has( arg ) ) {\n\t\t\t\t\t\t\t\t\tlist.push( arg );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if ( arg && arg.length && toType( arg ) !== \"string\" ) {\n\n\t\t\t\t\t\t\t\t// Inspect recursively\n\t\t\t\t\t\t\t\tadd( arg );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} );\n\t\t\t\t\t} )( arguments );\n\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Remove a callback from the list\n\t\t\tremove: function() {\n\t\t\t\tjQuery.each( arguments, function( _, arg ) {\n\t\t\t\t\tvar index;\n\t\t\t\t\twhile ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {\n\t\t\t\t\t\tlist.splice( index, 1 );\n\n\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\tif ( index <= firingIndex ) {\n\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Check if a given callback is in the list.\n\t\t\t// If no argument is given, return whether or not list has callbacks attached.\n\t\t\thas: function( fn ) {\n\t\t\t\treturn fn ?\n\t\t\t\t\tjQuery.inArray( fn, list ) > -1 :\n\t\t\t\t\tlist.length > 0;\n\t\t\t},\n\n\t\t\t// Remove all callbacks from the list\n\t\t\tempty: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\tlist = [];\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Disable .fire and .add\n\t\t\t// Abort any current/pending executions\n\t\t\t// Clear all callbacks and values\n\t\t\tdisable: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tlist = memory = \"\";\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tdisabled: function() {\n\t\t\t\treturn !list;\n\t\t\t},\n\n\t\t\t// Disable .fire\n\t\t\t// Also disable .add unless we have memory (since it would have no effect)\n\t\t\t// Abort any pending executions\n\t\t\tlock: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tif ( !memory && !firing ) {\n\t\t\t\t\tlist = memory = \"\";\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tlocked: function() {\n\t\t\t\treturn !!locked;\n\t\t\t},\n\n\t\t\t// Call all callbacks with the given context and arguments\n\t\t\tfireWith: function( context, args ) {\n\t\t\t\tif ( !locked ) {\n\t\t\t\t\targs = args || [];\n\t\t\t\t\targs = [ context, args.slice ? args.slice() : args ];\n\t\t\t\t\tqueue.push( args );\n\t\t\t\t\tif ( !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Call all the callbacks with the given arguments\n\t\t\tfire: function() {\n\t\t\t\tself.fireWith( this, arguments );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// To know if the callbacks have already been called at least once\n\t\t\tfired: function() {\n\t\t\t\treturn !!fired;\n\t\t\t}\n\t\t};\n\n\treturn self;\n};\n\n\nfunction Identity( v ) {\n\treturn v;\n}\nfunction Thrower( ex ) {\n\tthrow ex;\n}\n\nfunction adoptValue( value, resolve, reject, noValue ) {\n\tvar method;\n\n\ttry {\n\n\t\t// Check for promise aspect first to privilege synchronous behavior\n\t\tif ( value && isFunction( ( method = value.promise ) ) ) {\n\t\t\tmethod.call( value ).done( resolve ).fail( reject );\n\n\t\t// Other thenables\n\t\t} else if ( value && isFunction( ( method = value.then ) ) ) {\n\t\t\tmethod.call( value, resolve, reject );\n\n\t\t// Other non-thenables\n\t\t} else {\n\n\t\t\t// Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:\n\t\t\t// * false: [ value ].slice( 0 ) => resolve( value )\n\t\t\t// * true: [ value ].slice( 1 ) => resolve()\n\t\t\tresolve.apply( undefined, [ value ].slice( noValue ) );\n\t\t}\n\n\t// For Promises/A+, convert exceptions into rejections\n\t// Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in\n\t// Deferred#then to conditionally suppress rejection.\n\t} catch ( value ) {\n\n\t\t// Support: Android 4.0 only\n\t\t// Strict mode functions invoked without .call/.apply get global-object context\n\t\treject.apply( undefined, [ value ] );\n\t}\n}\n\njQuery.extend( {\n\n\tDeferred: function( func ) {\n\t\tvar tuples = [\n\n\t\t\t\t// action, add listener, callbacks,\n\t\t\t\t// ... .then handlers, argument index, [final state]\n\t\t\t\t[ \"notify\", \"progress\", jQuery.Callbacks( \"memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"memory\" ), 2 ],\n\t\t\t\t[ \"resolve\", \"done\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 0, \"resolved\" ],\n\t\t\t\t[ \"reject\", \"fail\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 1, \"rejected\" ]\n\t\t\t],\n\t\t\tstate = \"pending\",\n\t\t\tpromise = {\n\t\t\t\tstate: function() {\n\t\t\t\t\treturn state;\n\t\t\t\t},\n\t\t\t\talways: function() {\n\t\t\t\t\tdeferred.done( arguments ).fail( arguments );\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\t\"catch\": function( fn ) {\n\t\t\t\t\treturn promise.then( null, fn );\n\t\t\t\t},\n\n\t\t\t\t// Keep pipe for back-compat\n\t\t\t\tpipe: function( /* fnDone, fnFail, fnProgress */ ) {\n\t\t\t\t\tvar fns = arguments;\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\t\t\t\t\t\tjQuery.each( tuples, function( _i, tuple ) {\n\n\t\t\t\t\t\t\t// Map tuples (progress, done, fail) to arguments (done, fail, progress)\n\t\t\t\t\t\t\tvar fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ];\n\n\t\t\t\t\t\t\t// deferred.progress(function() { bind to newDefer or newDefer.notify })\n\t\t\t\t\t\t\t// deferred.done(function() { bind to newDefer or newDefer.resolve })\n\t\t\t\t\t\t\t// deferred.fail(function() { bind to newDefer or newDefer.reject })\n\t\t\t\t\t\t\tdeferred[ tuple[ 1 ] ]( function() {\n\t\t\t\t\t\t\t\tvar returned = fn && fn.apply( this, arguments );\n\t\t\t\t\t\t\t\tif ( returned && isFunction( returned.promise ) ) {\n\t\t\t\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t\t\t\t.progress( newDefer.notify )\n\t\t\t\t\t\t\t\t\t\t.done( newDefer.resolve )\n\t\t\t\t\t\t\t\t\t\t.fail( newDefer.reject );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tnewDefer[ tuple[ 0 ] + \"With\" ](\n\t\t\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\t\t\tfn ? [ returned ] : arguments\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tfns = null;\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\t\t\t\tthen: function( onFulfilled, onRejected, onProgress ) {\n\t\t\t\t\tvar maxDepth = 0;\n\t\t\t\t\tfunction resolve( depth, deferred, handler, special ) {\n\t\t\t\t\t\treturn function() {\n\t\t\t\t\t\t\tvar that = this,\n\t\t\t\t\t\t\t\targs = arguments,\n\t\t\t\t\t\t\t\tmightThrow = function() {\n\t\t\t\t\t\t\t\t\tvar returned, then;\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.3\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-59\n\t\t\t\t\t\t\t\t\t// Ignore double-resolution attempts\n\t\t\t\t\t\t\t\t\tif ( depth < maxDepth ) {\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\treturned = handler.apply( that, args );\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.1\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-48\n\t\t\t\t\t\t\t\t\tif ( returned === deferred.promise() ) {\n\t\t\t\t\t\t\t\t\t\tthrow new TypeError( \"Thenable self-resolution\" );\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ sections 2.3.3.1, 3.5\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-54\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-75\n\t\t\t\t\t\t\t\t\t// Retrieve `then` only once\n\t\t\t\t\t\t\t\t\tthen = returned &&\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.4\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-64\n\t\t\t\t\t\t\t\t\t\t// Only check objects and functions for thenability\n\t\t\t\t\t\t\t\t\t\t( typeof returned === \"object\" ||\n\t\t\t\t\t\t\t\t\t\t\ttypeof returned === \"function\" ) &&\n\t\t\t\t\t\t\t\t\t\treturned.then;\n\n\t\t\t\t\t\t\t\t\t// Handle a returned thenable\n\t\t\t\t\t\t\t\t\tif ( isFunction( then ) ) {\n\n\t\t\t\t\t\t\t\t\t\t// Special processors (notify) just wait for resolution\n\t\t\t\t\t\t\t\t\t\tif ( special ) {\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special )\n\t\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\t// Normal processors (resolve) also hook into progress\n\t\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t\t// ...and disregard older resolution values\n\t\t\t\t\t\t\t\t\t\t\tmaxDepth++;\n\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity,\n\t\t\t\t\t\t\t\t\t\t\t\t\tdeferred.notifyWith )\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Handle all other returned values\n\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\tif ( handler !== Identity ) {\n\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\targs = [ returned ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t// Process the value(s)\n\t\t\t\t\t\t\t\t\t\t// Default process is resolve\n\t\t\t\t\t\t\t\t\t\t( special || deferred.resolveWith )( that, args );\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\n\t\t\t\t\t\t\t\t// Only normal processors (resolve) catch and reject exceptions\n\t\t\t\t\t\t\t\tprocess = special ?\n\t\t\t\t\t\t\t\t\tmightThrow :\n\t\t\t\t\t\t\t\t\tfunction() {\n\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\tmightThrow();\n\t\t\t\t\t\t\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t\t\t\t\t\t\tif ( jQuery.Deferred.exceptionHook ) {\n\t\t\t\t\t\t\t\t\t\t\t\tjQuery.Deferred.exceptionHook( e,\n\t\t\t\t\t\t\t\t\t\t\t\t\tprocess.error );\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.4.1\n\t\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-61\n\t\t\t\t\t\t\t\t\t\t\t// Ignore post-resolution exceptions\n\t\t\t\t\t\t\t\t\t\t\tif ( depth + 1 >= maxDepth ) {\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\t\t\tif ( handler !== Thrower ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\t\t\targs = [ e ];\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\tdeferred.rejectWith( that, args );\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.1\n\t\t\t\t\t\t\t// https://promisesaplus.com/#point-57\n\t\t\t\t\t\t\t// Re-resolve promises immediately to dodge false rejection from\n\t\t\t\t\t\t\t// subsequent errors\n\t\t\t\t\t\t\tif ( depth ) {\n\t\t\t\t\t\t\t\tprocess();\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Call an optional hook to record the error, in case of exception\n\t\t\t\t\t\t\t\t// since it's otherwise lost when execution goes async\n\t\t\t\t\t\t\t\tif ( jQuery.Deferred.getErrorHook ) {\n\t\t\t\t\t\t\t\t\tprocess.error = jQuery.Deferred.getErrorHook();\n\n\t\t\t\t\t\t\t\t// The deprecated alias of the above. While the name suggests\n\t\t\t\t\t\t\t\t// returning the stack, not an error instance, jQuery just passes\n\t\t\t\t\t\t\t\t// it directly to `console.warn` so both will work; an instance\n\t\t\t\t\t\t\t\t// just better cooperates with source maps.\n\t\t\t\t\t\t\t\t} else if ( jQuery.Deferred.getStackHook ) {\n\t\t\t\t\t\t\t\t\tprocess.error = jQuery.Deferred.getStackHook();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\twindow.setTimeout( process );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\n\t\t\t\t\t\t// progress_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 0 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onProgress ) ?\n\t\t\t\t\t\t\t\t\tonProgress :\n\t\t\t\t\t\t\t\t\tIdentity,\n\t\t\t\t\t\t\t\tnewDefer.notifyWith\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// fulfilled_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 1 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onFulfilled ) ?\n\t\t\t\t\t\t\t\t\tonFulfilled :\n\t\t\t\t\t\t\t\t\tIdentity\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// rejected_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 2 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onRejected ) ?\n\t\t\t\t\t\t\t\t\tonRejected :\n\t\t\t\t\t\t\t\t\tThrower\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\n\t\t\t\t// Get a promise for this deferred\n\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\tpromise: function( obj ) {\n\t\t\t\t\treturn obj != null ? jQuery.extend( obj, promise ) : promise;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdeferred = {};\n\n\t\t// Add list-specific methods\n\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\tvar list = tuple[ 2 ],\n\t\t\t\tstateString = tuple[ 5 ];\n\n\t\t\t// promise.progress = list.add\n\t\t\t// promise.done = list.add\n\t\t\t// promise.fail = list.add\n\t\t\tpromise[ tuple[ 1 ] ] = list.add;\n\n\t\t\t// Handle state\n\t\t\tif ( stateString ) {\n\t\t\t\tlist.add(\n\t\t\t\t\tfunction() {\n\n\t\t\t\t\t\t// state = \"resolved\" (i.e., fulfilled)\n\t\t\t\t\t\t// state = \"rejected\"\n\t\t\t\t\t\tstate = stateString;\n\t\t\t\t\t},\n\n\t\t\t\t\t// rejected_callbacks.disable\n\t\t\t\t\t// fulfilled_callbacks.disable\n\t\t\t\t\ttuples[ 3 - i ][ 2 ].disable,\n\n\t\t\t\t\t// rejected_handlers.disable\n\t\t\t\t\t// fulfilled_handlers.disable\n\t\t\t\t\ttuples[ 3 - i ][ 3 ].disable,\n\n\t\t\t\t\t// progress_callbacks.lock\n\t\t\t\t\ttuples[ 0 ][ 2 ].lock,\n\n\t\t\t\t\t// progress_handlers.lock\n\t\t\t\t\ttuples[ 0 ][ 3 ].lock\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// progress_handlers.fire\n\t\t\t// fulfilled_handlers.fire\n\t\t\t// rejected_handlers.fire\n\t\t\tlist.add( tuple[ 3 ].fire );\n\n\t\t\t// deferred.notify = function() { deferred.notifyWith(...) }\n\t\t\t// deferred.resolve = function() { deferred.resolveWith(...) }\n\t\t\t// deferred.reject = function() { deferred.rejectWith(...) }\n\t\t\tdeferred[ tuple[ 0 ] ] = function() {\n\t\t\t\tdeferred[ tuple[ 0 ] + \"With\" ]( this === deferred ? undefined : this, arguments );\n\t\t\t\treturn this;\n\t\t\t};\n\n\t\t\t// deferred.notifyWith = list.fireWith\n\t\t\t// deferred.resolveWith = list.fireWith\n\t\t\t// deferred.rejectWith = list.fireWith\n\t\t\tdeferred[ tuple[ 0 ] + \"With\" ] = list.fireWith;\n\t\t} );\n\n\t\t// Make the deferred a promise\n\t\tpromise.promise( deferred );\n\n\t\t// Call given func if any\n\t\tif ( func ) {\n\t\t\tfunc.call( deferred, deferred );\n\t\t}\n\n\t\t// All done!\n\t\treturn deferred;\n\t},\n\n\t// Deferred helper\n\twhen: function( singleValue ) {\n\t\tvar\n\n\t\t\t// count of uncompleted subordinates\n\t\t\tremaining = arguments.length,\n\n\t\t\t// count of unprocessed arguments\n\t\t\ti = remaining,\n\n\t\t\t// subordinate fulfillment data\n\t\t\tresolveContexts = Array( i ),\n\t\t\tresolveValues = slice.call( arguments ),\n\n\t\t\t// the primary Deferred\n\t\t\tprimary = jQuery.Deferred(),\n\n\t\t\t// subordinate callback factory\n\t\t\tupdateFunc = function( i ) {\n\t\t\t\treturn function( value ) {\n\t\t\t\t\tresolveContexts[ i ] = this;\n\t\t\t\t\tresolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;\n\t\t\t\t\tif ( !( --remaining ) ) {\n\t\t\t\t\t\tprimary.resolveWith( resolveContexts, resolveValues );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t};\n\n\t\t// Single- and empty arguments are adopted like Promise.resolve\n\t\tif ( remaining <= 1 ) {\n\t\t\tadoptValue( singleValue, primary.done( updateFunc( i ) ).resolve, primary.reject,\n\t\t\t\t!remaining );\n\n\t\t\t// Use .then() to unwrap secondary thenables (cf. gh-3000)\n\t\t\tif ( primary.state() === \"pending\" ||\n\t\t\t\tisFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) {\n\n\t\t\t\treturn primary.then();\n\t\t\t}\n\t\t}\n\n\t\t// Multiple arguments are aggregated like Promise.all array elements\n\t\twhile ( i-- ) {\n\t\t\tadoptValue( resolveValues[ i ], updateFunc( i ), primary.reject );\n\t\t}\n\n\t\treturn primary.promise();\n\t}\n} );\n\n\n// These usually indicate a programmer mistake during development,\n// warn about them ASAP rather than swallowing them by default.\nvar rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;\n\n// If `jQuery.Deferred.getErrorHook` is defined, `asyncError` is an error\n// captured before the async barrier to get the original error cause\n// which may otherwise be hidden.\njQuery.Deferred.exceptionHook = function( error, asyncError ) {\n\n\t// Support: IE 8 - 9 only\n\t// Console exists when dev tools are open, which can happen at any time\n\tif ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) {\n\t\twindow.console.warn( \"jQuery.Deferred exception: \" + error.message,\n\t\t\terror.stack, asyncError );\n\t}\n};\n\n\n\n\njQuery.readyException = function( error ) {\n\twindow.setTimeout( function() {\n\t\tthrow error;\n\t} );\n};\n\n\n\n\n// The deferred used on DOM ready\nvar readyList = jQuery.Deferred();\n\njQuery.fn.ready = function( fn ) {\n\n\treadyList\n\t\t.then( fn )\n\n\t\t// Wrap jQuery.readyException in a function so that the lookup\n\t\t// happens at the time of error handling instead of callback\n\t\t// registration.\n\t\t.catch( function( error ) {\n\t\t\tjQuery.readyException( error );\n\t\t} );\n\n\treturn this;\n};\n\njQuery.extend( {\n\n\t// Is the DOM ready to be used? Set to true once it occurs.\n\tisReady: false,\n\n\t// A counter to track how many items to wait for before\n\t// the ready event fires. See trac-6781\n\treadyWait: 1,\n\n\t// Handle when the DOM is ready\n\tready: function( wait ) {\n\n\t\t// Abort if there are pending holds or we're already ready\n\t\tif ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Remember that the DOM is ready\n\t\tjQuery.isReady = true;\n\n\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\tif ( wait !== true && --jQuery.readyWait > 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If there are functions bound, to execute\n\t\treadyList.resolveWith( document, [ jQuery ] );\n\t}\n} );\n\njQuery.ready.then = readyList.then;\n\n// The ready event handler and self cleanup method\nfunction completed() {\n\tdocument.removeEventListener( \"DOMContentLoaded\", completed );\n\twindow.removeEventListener( \"load\", completed );\n\tjQuery.ready();\n}\n\n// Catch cases where $(document).ready() is called\n// after the browser event has already occurred.\n// Support: IE <=9 - 10 only\n// Older IE sometimes signals \"interactive\" too soon\nif ( document.readyState === \"complete\" ||\n\t( document.readyState !== \"loading\" && !document.documentElement.doScroll ) ) {\n\n\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\twindow.setTimeout( jQuery.ready );\n\n} else {\n\n\t// Use the handy event callback\n\tdocument.addEventListener( \"DOMContentLoaded\", completed );\n\n\t// A fallback to window.onload, that will always work\n\twindow.addEventListener( \"load\", completed );\n}\n\n\n\n\n// Multifunctional method to get and set values of a collection\n// The value/s can optionally be executed if it's a function\nvar access = function( elems, fn, key, value, chainable, emptyGet, raw ) {\n\tvar i = 0,\n\t\tlen = elems.length,\n\t\tbulk = key == null;\n\n\t// Sets many values\n\tif ( toType( key ) === \"object\" ) {\n\t\tchainable = true;\n\t\tfor ( i in key ) {\n\t\t\taccess( elems, fn, i, key[ i ], true, emptyGet, raw );\n\t\t}\n\n\t// Sets one value\n\t} else if ( value !== undefined ) {\n\t\tchainable = true;\n\n\t\tif ( !isFunction( value ) ) {\n\t\t\traw = true;\n\t\t}\n\n\t\tif ( bulk ) {\n\n\t\t\t// Bulk operations run against the entire set\n\t\t\tif ( raw ) {\n\t\t\t\tfn.call( elems, value );\n\t\t\t\tfn = null;\n\n\t\t\t// ...except when executing function values\n\t\t\t} else {\n\t\t\t\tbulk = fn;\n\t\t\t\tfn = function( elem, _key, value ) {\n\t\t\t\t\treturn bulk.call( jQuery( elem ), value );\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tif ( fn ) {\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\tfn(\n\t\t\t\t\telems[ i ], key, raw ?\n\t\t\t\t\t\tvalue :\n\t\t\t\t\t\tvalue.call( elems[ i ], i, fn( elems[ i ], key ) )\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( chainable ) {\n\t\treturn elems;\n\t}\n\n\t// Gets\n\tif ( bulk ) {\n\t\treturn fn.call( elems );\n\t}\n\n\treturn len ? fn( elems[ 0 ], key ) : emptyGet;\n};\n\n\n// Matches dashed string for camelizing\nvar rmsPrefix = /^-ms-/,\n\trdashAlpha = /-([a-z])/g;\n\n// Used by camelCase as callback to replace()\nfunction fcamelCase( _all, letter ) {\n\treturn letter.toUpperCase();\n}\n\n// Convert dashed to camelCase; used by the css and data modules\n// Support: IE <=9 - 11, Edge 12 - 15\n// Microsoft forgot to hump their vendor prefix (trac-9572)\nfunction camelCase( string ) {\n\treturn string.replace( rmsPrefix, \"ms-\" ).replace( rdashAlpha, fcamelCase );\n}\nvar acceptData = function( owner ) {\n\n\t// Accepts only:\n\t//  - Node\n\t//    - Node.ELEMENT_NODE\n\t//    - Node.DOCUMENT_NODE\n\t//  - Object\n\t//    - Any\n\treturn owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );\n};\n\n\n\n\nfunction Data() {\n\tthis.expando = jQuery.expando + Data.uid++;\n}\n\nData.uid = 1;\n\nData.prototype = {\n\n\tcache: function( owner ) {\n\n\t\t// Check if the owner object already has a cache\n\t\tvar value = owner[ this.expando ];\n\n\t\t// If not, create one\n\t\tif ( !value ) {\n\t\t\tvalue = {};\n\n\t\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t\t// but we should not, see trac-8335.\n\t\t\t// Always return an empty object.\n\t\t\tif ( acceptData( owner ) ) {\n\n\t\t\t\t// If it is a node unlikely to be stringify-ed or looped over\n\t\t\t\t// use plain assignment\n\t\t\t\tif ( owner.nodeType ) {\n\t\t\t\t\towner[ this.expando ] = value;\n\n\t\t\t\t// Otherwise secure it in a non-enumerable property\n\t\t\t\t// configurable must be true to allow the property to be\n\t\t\t\t// deleted when data is removed\n\t\t\t\t} else {\n\t\t\t\t\tObject.defineProperty( owner, this.expando, {\n\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\tconfigurable: true\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn value;\n\t},\n\tset: function( owner, data, value ) {\n\t\tvar prop,\n\t\t\tcache = this.cache( owner );\n\n\t\t// Handle: [ owner, key, value ] args\n\t\t// Always use camelCase key (gh-2257)\n\t\tif ( typeof data === \"string\" ) {\n\t\t\tcache[ camelCase( data ) ] = value;\n\n\t\t// Handle: [ owner, { properties } ] args\n\t\t} else {\n\n\t\t\t// Copy the properties one-by-one to the cache object\n\t\t\tfor ( prop in data ) {\n\t\t\t\tcache[ camelCase( prop ) ] = data[ prop ];\n\t\t\t}\n\t\t}\n\t\treturn cache;\n\t},\n\tget: function( owner, key ) {\n\t\treturn key === undefined ?\n\t\t\tthis.cache( owner ) :\n\n\t\t\t// Always use camelCase key (gh-2257)\n\t\t\towner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ];\n\t},\n\taccess: function( owner, key, value ) {\n\n\t\t// In cases where either:\n\t\t//\n\t\t//   1. No key was specified\n\t\t//   2. A string key was specified, but no value provided\n\t\t//\n\t\t// Take the \"read\" path and allow the get method to determine\n\t\t// which value to return, respectively either:\n\t\t//\n\t\t//   1. The entire cache object\n\t\t//   2. The data stored at the key\n\t\t//\n\t\tif ( key === undefined ||\n\t\t\t\t( ( key && typeof key === \"string\" ) && value === undefined ) ) {\n\n\t\t\treturn this.get( owner, key );\n\t\t}\n\n\t\t// When the key is not a string, or both a key and value\n\t\t// are specified, set or extend (existing objects) with either:\n\t\t//\n\t\t//   1. An object of properties\n\t\t//   2. A key and value\n\t\t//\n\t\tthis.set( owner, key, value );\n\n\t\t// Since the \"set\" path can have two possible entry points\n\t\t// return the expected data based on which path was taken[*]\n\t\treturn value !== undefined ? value : key;\n\t},\n\tremove: function( owner, key ) {\n\t\tvar i,\n\t\t\tcache = owner[ this.expando ];\n\n\t\tif ( cache === undefined ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( key !== undefined ) {\n\n\t\t\t// Support array or space separated string of keys\n\t\t\tif ( Array.isArray( key ) ) {\n\n\t\t\t\t// If key is an array of keys...\n\t\t\t\t// We always set camelCase keys, so remove that.\n\t\t\t\tkey = key.map( camelCase );\n\t\t\t} else {\n\t\t\t\tkey = camelCase( key );\n\n\t\t\t\t// If a key with the spaces exists, use it.\n\t\t\t\t// Otherwise, create an array by matching non-whitespace\n\t\t\t\tkey = key in cache ?\n\t\t\t\t\t[ key ] :\n\t\t\t\t\t( key.match( rnothtmlwhite ) || [] );\n\t\t\t}\n\n\t\t\ti = key.length;\n\n\t\t\twhile ( i-- ) {\n\t\t\t\tdelete cache[ key[ i ] ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove the expando if there's no more data\n\t\tif ( key === undefined || jQuery.isEmptyObject( cache ) ) {\n\n\t\t\t// Support: Chrome <=35 - 45\n\t\t\t// Webkit & Blink performance suffers when deleting properties\n\t\t\t// from DOM nodes, so set to undefined instead\n\t\t\t// https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)\n\t\t\tif ( owner.nodeType ) {\n\t\t\t\towner[ this.expando ] = undefined;\n\t\t\t} else {\n\t\t\t\tdelete owner[ this.expando ];\n\t\t\t}\n\t\t}\n\t},\n\thasData: function( owner ) {\n\t\tvar cache = owner[ this.expando ];\n\t\treturn cache !== undefined && !jQuery.isEmptyObject( cache );\n\t}\n};\nvar dataPriv = new Data();\n\nvar dataUser = new Data();\n\n\n\n//\tImplementation Summary\n//\n//\t1. Enforce API surface and semantic compatibility with 1.9.x branch\n//\t2. Improve the module's maintainability by reducing the storage\n//\t\tpaths to a single mechanism.\n//\t3. Use the same single mechanism to support \"private\" and \"user\" data.\n//\t4. _Never_ expose \"private\" data to user code (TODO: Drop _data, _removeData)\n//\t5. Avoid exposing implementation details on user objects (eg. expando properties)\n//\t6. Provide a clear path for implementation upgrade to WeakMap in 2014\n\nvar rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n\trmultiDash = /[A-Z]/g;\n\nfunction getData( data ) {\n\tif ( data === \"true\" ) {\n\t\treturn true;\n\t}\n\n\tif ( data === \"false\" ) {\n\t\treturn false;\n\t}\n\n\tif ( data === \"null\" ) {\n\t\treturn null;\n\t}\n\n\t// Only convert to a number if it doesn't change the string\n\tif ( data === +data + \"\" ) {\n\t\treturn +data;\n\t}\n\n\tif ( rbrace.test( data ) ) {\n\t\treturn JSON.parse( data );\n\t}\n\n\treturn data;\n}\n\nfunction dataAttr( elem, key, data ) {\n\tvar name;\n\n\t// If nothing was found internally, try to fetch any\n\t// data from the HTML5 data-* attribute\n\tif ( data === undefined && elem.nodeType === 1 ) {\n\t\tname = \"data-\" + key.replace( rmultiDash, \"-$&\" ).toLowerCase();\n\t\tdata = elem.getAttribute( name );\n\n\t\tif ( typeof data === \"string\" ) {\n\t\t\ttry {\n\t\t\t\tdata = getData( data );\n\t\t\t} catch ( e ) {}\n\n\t\t\t// Make sure we set the data so it isn't changed later\n\t\t\tdataUser.set( elem, key, data );\n\t\t} else {\n\t\t\tdata = undefined;\n\t\t}\n\t}\n\treturn data;\n}\n\njQuery.extend( {\n\thasData: function( elem ) {\n\t\treturn dataUser.hasData( elem ) || dataPriv.hasData( elem );\n\t},\n\n\tdata: function( elem, name, data ) {\n\t\treturn dataUser.access( elem, name, data );\n\t},\n\n\tremoveData: function( elem, name ) {\n\t\tdataUser.remove( elem, name );\n\t},\n\n\t// TODO: Now that all calls to _data and _removeData have been replaced\n\t// with direct calls to dataPriv methods, these can be deprecated.\n\t_data: function( elem, name, data ) {\n\t\treturn dataPriv.access( elem, name, data );\n\t},\n\n\t_removeData: function( elem, name ) {\n\t\tdataPriv.remove( elem, name );\n\t}\n} );\n\njQuery.fn.extend( {\n\tdata: function( key, value ) {\n\t\tvar i, name, data,\n\t\t\telem = this[ 0 ],\n\t\t\tattrs = elem && elem.attributes;\n\n\t\t// Gets all values\n\t\tif ( key === undefined ) {\n\t\t\tif ( this.length ) {\n\t\t\t\tdata = dataUser.get( elem );\n\n\t\t\t\tif ( elem.nodeType === 1 && !dataPriv.get( elem, \"hasDataAttrs\" ) ) {\n\t\t\t\t\ti = attrs.length;\n\t\t\t\t\twhile ( i-- ) {\n\n\t\t\t\t\t\t// Support: IE 11 only\n\t\t\t\t\t\t// The attrs elements can be null (trac-14894)\n\t\t\t\t\t\tif ( attrs[ i ] ) {\n\t\t\t\t\t\t\tname = attrs[ i ].name;\n\t\t\t\t\t\t\tif ( name.indexOf( \"data-\" ) === 0 ) {\n\t\t\t\t\t\t\t\tname = camelCase( name.slice( 5 ) );\n\t\t\t\t\t\t\t\tdataAttr( elem, name, data[ name ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.set( elem, \"hasDataAttrs\", true );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn data;\n\t\t}\n\n\t\t// Sets multiple values\n\t\tif ( typeof key === \"object\" ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tdataUser.set( this, key );\n\t\t\t} );\n\t\t}\n\n\t\treturn access( this, function( value ) {\n\t\t\tvar data;\n\n\t\t\t// The calling jQuery object (element matches) is not empty\n\t\t\t// (and therefore has an element appears at this[ 0 ]) and the\n\t\t\t// `value` parameter was not undefined. An empty jQuery object\n\t\t\t// will result in `undefined` for elem = this[ 0 ] which will\n\t\t\t// throw an exception if an attempt to read a data cache is made.\n\t\t\tif ( elem && value === undefined ) {\n\n\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t// The key will always be camelCased in Data\n\t\t\t\tdata = dataUser.get( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// Attempt to \"discover\" the data in\n\t\t\t\t// HTML5 custom data-* attrs\n\t\t\t\tdata = dataAttr( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// We tried really hard, but the data doesn't exist.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Set the data...\n\t\t\tthis.each( function() {\n\n\t\t\t\t// We always store the camelCased key\n\t\t\t\tdataUser.set( this, key, value );\n\t\t\t} );\n\t\t}, null, value, arguments.length > 1, null, true );\n\t},\n\n\tremoveData: function( key ) {\n\t\treturn this.each( function() {\n\t\t\tdataUser.remove( this, key );\n\t\t} );\n\t}\n} );\n\n\njQuery.extend( {\n\tqueue: function( elem, type, data ) {\n\t\tvar queue;\n\n\t\tif ( elem ) {\n\t\t\ttype = ( type || \"fx\" ) + \"queue\";\n\t\t\tqueue = dataPriv.get( elem, type );\n\n\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\tif ( data ) {\n\t\t\t\tif ( !queue || Array.isArray( data ) ) {\n\t\t\t\t\tqueue = dataPriv.access( elem, type, jQuery.makeArray( data ) );\n\t\t\t\t} else {\n\t\t\t\t\tqueue.push( data );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn queue || [];\n\t\t}\n\t},\n\n\tdequeue: function( elem, type ) {\n\t\ttype = type || \"fx\";\n\n\t\tvar queue = jQuery.queue( elem, type ),\n\t\t\tstartLength = queue.length,\n\t\t\tfn = queue.shift(),\n\t\t\thooks = jQuery._queueHooks( elem, type ),\n\t\t\tnext = function() {\n\t\t\t\tjQuery.dequeue( elem, type );\n\t\t\t};\n\n\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\tif ( fn === \"inprogress\" ) {\n\t\t\tfn = queue.shift();\n\t\t\tstartLength--;\n\t\t}\n\n\t\tif ( fn ) {\n\n\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t// automatically dequeued\n\t\t\tif ( type === \"fx\" ) {\n\t\t\t\tqueue.unshift( \"inprogress\" );\n\t\t\t}\n\n\t\t\t// Clear up the last queue stop function\n\t\t\tdelete hooks.stop;\n\t\t\tfn.call( elem, next, hooks );\n\t\t}\n\n\t\tif ( !startLength && hooks ) {\n\t\t\thooks.empty.fire();\n\t\t}\n\t},\n\n\t// Not public - generate a queueHooks object, or return the current one\n\t_queueHooks: function( elem, type ) {\n\t\tvar key = type + \"queueHooks\";\n\t\treturn dataPriv.get( elem, key ) || dataPriv.access( elem, key, {\n\t\t\tempty: jQuery.Callbacks( \"once memory\" ).add( function() {\n\t\t\t\tdataPriv.remove( elem, [ type + \"queue\", key ] );\n\t\t\t} )\n\t\t} );\n\t}\n} );\n\njQuery.fn.extend( {\n\tqueue: function( type, data ) {\n\t\tvar setter = 2;\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tdata = type;\n\t\t\ttype = \"fx\";\n\t\t\tsetter--;\n\t\t}\n\n\t\tif ( arguments.length < setter ) {\n\t\t\treturn jQuery.queue( this[ 0 ], type );\n\t\t}\n\n\t\treturn data === undefined ?\n\t\t\tthis :\n\t\t\tthis.each( function() {\n\t\t\t\tvar queue = jQuery.queue( this, type, data );\n\n\t\t\t\t// Ensure a hooks for this queue\n\t\t\t\tjQuery._queueHooks( this, type );\n\n\t\t\t\tif ( type === \"fx\" && queue[ 0 ] !== \"inprogress\" ) {\n\t\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t\t}\n\t\t\t} );\n\t},\n\tdequeue: function( type ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.dequeue( this, type );\n\t\t} );\n\t},\n\tclearQueue: function( type ) {\n\t\treturn this.queue( type || \"fx\", [] );\n\t},\n\n\t// Get a promise resolved when queues of a certain type\n\t// are emptied (fx is the type by default)\n\tpromise: function( type, obj ) {\n\t\tvar tmp,\n\t\t\tcount = 1,\n\t\t\tdefer = jQuery.Deferred(),\n\t\t\telements = this,\n\t\t\ti = this.length,\n\t\t\tresolve = function() {\n\t\t\t\tif ( !( --count ) ) {\n\t\t\t\t\tdefer.resolveWith( elements, [ elements ] );\n\t\t\t\t}\n\t\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tobj = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\ttype = type || \"fx\";\n\n\t\twhile ( i-- ) {\n\t\t\ttmp = dataPriv.get( elements[ i ], type + \"queueHooks\" );\n\t\t\tif ( tmp && tmp.empty ) {\n\t\t\t\tcount++;\n\t\t\t\ttmp.empty.add( resolve );\n\t\t\t}\n\t\t}\n\t\tresolve();\n\t\treturn defer.promise( obj );\n\t}\n} );\nvar pnum = ( /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/ ).source;\n\nvar rcssNum = new RegExp( \"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\" );\n\n\nvar cssExpand = [ \"Top\", \"Right\", \"Bottom\", \"Left\" ];\n\nvar documentElement = document.documentElement;\n\n\n\n\tvar isAttached = function( elem ) {\n\t\t\treturn jQuery.contains( elem.ownerDocument, elem );\n\t\t},\n\t\tcomposed = { composed: true };\n\n\t// Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only\n\t// Check attachment across shadow DOM boundaries when possible (gh-3504)\n\t// Support: iOS 10.0-10.2 only\n\t// Early iOS 10 versions support `attachShadow` but not `getRootNode`,\n\t// leading to errors. We need to check for `getRootNode`.\n\tif ( documentElement.getRootNode ) {\n\t\tisAttached = function( elem ) {\n\t\t\treturn jQuery.contains( elem.ownerDocument, elem ) ||\n\t\t\t\telem.getRootNode( composed ) === elem.ownerDocument;\n\t\t};\n\t}\nvar isHiddenWithinTree = function( elem, el ) {\n\n\t\t// isHiddenWithinTree might be called from jQuery#filter function;\n\t\t// in that case, element will be second argument\n\t\telem = el || elem;\n\n\t\t// Inline style trumps all\n\t\treturn elem.style.display === \"none\" ||\n\t\t\telem.style.display === \"\" &&\n\n\t\t\t// Otherwise, check computed style\n\t\t\t// Support: Firefox <=43 - 45\n\t\t\t// Disconnected elements can have computed display: none, so first confirm that elem is\n\t\t\t// in the document.\n\t\t\tisAttached( elem ) &&\n\n\t\t\tjQuery.css( elem, \"display\" ) === \"none\";\n\t};\n\n\n\nfunction adjustCSS( elem, prop, valueParts, tween ) {\n\tvar adjusted, scale,\n\t\tmaxIterations = 20,\n\t\tcurrentValue = tween ?\n\t\t\tfunction() {\n\t\t\t\treturn tween.cur();\n\t\t\t} :\n\t\t\tfunction() {\n\t\t\t\treturn jQuery.css( elem, prop, \"\" );\n\t\t\t},\n\t\tinitial = currentValue(),\n\t\tunit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" ),\n\n\t\t// Starting value computation is required for potential unit mismatches\n\t\tinitialInUnit = elem.nodeType &&\n\t\t\t( jQuery.cssNumber[ prop ] || unit !== \"px\" && +initial ) &&\n\t\t\trcssNum.exec( jQuery.css( elem, prop ) );\n\n\tif ( initialInUnit && initialInUnit[ 3 ] !== unit ) {\n\n\t\t// Support: Firefox <=54\n\t\t// Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144)\n\t\tinitial = initial / 2;\n\n\t\t// Trust units reported by jQuery.css\n\t\tunit = unit || initialInUnit[ 3 ];\n\n\t\t// Iteratively approximate from a nonzero starting point\n\t\tinitialInUnit = +initial || 1;\n\n\t\twhile ( maxIterations-- ) {\n\n\t\t\t// Evaluate and update our best guess (doubling guesses that zero out).\n\t\t\t// Finish if the scale equals or crosses 1 (making the old*new product non-positive).\n\t\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\t\t\tif ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) {\n\t\t\t\tmaxIterations = 0;\n\t\t\t}\n\t\t\tinitialInUnit = initialInUnit / scale;\n\n\t\t}\n\n\t\tinitialInUnit = initialInUnit * 2;\n\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\n\t\t// Make sure we update the tween properties later on\n\t\tvalueParts = valueParts || [];\n\t}\n\n\tif ( valueParts ) {\n\t\tinitialInUnit = +initialInUnit || +initial || 0;\n\n\t\t// Apply relative offset (+=/-=) if specified\n\t\tadjusted = valueParts[ 1 ] ?\n\t\t\tinitialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :\n\t\t\t+valueParts[ 2 ];\n\t\tif ( tween ) {\n\t\t\ttween.unit = unit;\n\t\t\ttween.start = initialInUnit;\n\t\t\ttween.end = adjusted;\n\t\t}\n\t}\n\treturn adjusted;\n}\n\n\nvar defaultDisplayMap = {};\n\nfunction getDefaultDisplay( elem ) {\n\tvar temp,\n\t\tdoc = elem.ownerDocument,\n\t\tnodeName = elem.nodeName,\n\t\tdisplay = defaultDisplayMap[ nodeName ];\n\n\tif ( display ) {\n\t\treturn display;\n\t}\n\n\ttemp = doc.body.appendChild( doc.createElement( nodeName ) );\n\tdisplay = jQuery.css( temp, \"display\" );\n\n\ttemp.parentNode.removeChild( temp );\n\n\tif ( display === \"none\" ) {\n\t\tdisplay = \"block\";\n\t}\n\tdefaultDisplayMap[ nodeName ] = display;\n\n\treturn display;\n}\n\nfunction showHide( elements, show ) {\n\tvar display, elem,\n\t\tvalues = [],\n\t\tindex = 0,\n\t\tlength = elements.length;\n\n\t// Determine new display value for elements that need to change\n\tfor ( ; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tdisplay = elem.style.display;\n\t\tif ( show ) {\n\n\t\t\t// Since we force visibility upon cascade-hidden elements, an immediate (and slow)\n\t\t\t// check is required in this first loop unless we have a nonempty display value (either\n\t\t\t// inline or about-to-be-restored)\n\t\t\tif ( display === \"none\" ) {\n\t\t\t\tvalues[ index ] = dataPriv.get( elem, \"display\" ) || null;\n\t\t\t\tif ( !values[ index ] ) {\n\t\t\t\t\telem.style.display = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( elem.style.display === \"\" && isHiddenWithinTree( elem ) ) {\n\t\t\t\tvalues[ index ] = getDefaultDisplay( elem );\n\t\t\t}\n\t\t} else {\n\t\t\tif ( display !== \"none\" ) {\n\t\t\t\tvalues[ index ] = \"none\";\n\n\t\t\t\t// Remember what we're overwriting\n\t\t\t\tdataPriv.set( elem, \"display\", display );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Set the display of the elements in a second loop to avoid constant reflow\n\tfor ( index = 0; index < length; index++ ) {\n\t\tif ( values[ index ] != null ) {\n\t\t\telements[ index ].style.display = values[ index ];\n\t\t}\n\t}\n\n\treturn elements;\n}\n\njQuery.fn.extend( {\n\tshow: function() {\n\t\treturn showHide( this, true );\n\t},\n\thide: function() {\n\t\treturn showHide( this );\n\t},\n\ttoggle: function( state ) {\n\t\tif ( typeof state === \"boolean\" ) {\n\t\t\treturn state ? this.show() : this.hide();\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tif ( isHiddenWithinTree( this ) ) {\n\t\t\t\tjQuery( this ).show();\n\t\t\t} else {\n\t\t\t\tjQuery( this ).hide();\n\t\t\t}\n\t\t} );\n\t}\n} );\nvar rcheckableType = ( /^(?:checkbox|radio)$/i );\n\nvar rtagName = ( /<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)/i );\n\nvar rscriptType = ( /^$|^module$|\\/(?:java|ecma)script/i );\n\n\n\n( function() {\n\tvar fragment = document.createDocumentFragment(),\n\t\tdiv = fragment.appendChild( document.createElement( \"div\" ) ),\n\t\tinput = document.createElement( \"input\" );\n\n\t// Support: Android 4.0 - 4.3 only\n\t// Check state lost if the name is set (trac-11217)\n\t// Support: Windows Web Apps (WWA)\n\t// `name` and `type` must use .setAttribute for WWA (trac-14901)\n\tinput.setAttribute( \"type\", \"radio\" );\n\tinput.setAttribute( \"checked\", \"checked\" );\n\tinput.setAttribute( \"name\", \"t\" );\n\n\tdiv.appendChild( input );\n\n\t// Support: Android <=4.1 only\n\t// Older WebKit doesn't clone checked state correctly in fragments\n\tsupport.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;\n\n\t// Support: IE <=11 only\n\t// Make sure textarea (and checkbox) defaultValue is properly cloned\n\tdiv.innerHTML = \"<textarea>x</textarea>\";\n\tsupport.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;\n\n\t// Support: IE <=9 only\n\t// IE <=9 replaces <option> tags with their contents when inserted outside of\n\t// the select element.\n\tdiv.innerHTML = \"<option></option>\";\n\tsupport.option = !!div.lastChild;\n} )();\n\n\n// We have to close these tags to support XHTML (trac-13200)\nvar wrapMap = {\n\n\t// XHTML parsers do not magically insert elements in the\n\t// same way that tag soup parsers do. So we cannot shorten\n\t// this by omitting <tbody> or other required elements.\n\tthead: [ 1, \"<table>\", \"</table>\" ],\n\tcol: [ 2, \"<table><colgroup>\", \"</colgroup></table>\" ],\n\ttr: [ 2, \"<table><tbody>\", \"</tbody></table>\" ],\n\ttd: [ 3, \"<table><tbody><tr>\", \"</tr></tbody></table>\" ],\n\n\t_default: [ 0, \"\", \"\" ]\n};\n\nwrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\nwrapMap.th = wrapMap.td;\n\n// Support: IE <=9 only\nif ( !support.option ) {\n\twrapMap.optgroup = wrapMap.option = [ 1, \"<select multiple='multiple'>\", \"</select>\" ];\n}\n\n\nfunction getAll( context, tag ) {\n\n\t// Support: IE <=9 - 11 only\n\t// Use typeof to avoid zero-argument method invocation on host objects (trac-15151)\n\tvar ret;\n\n\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\tret = context.getElementsByTagName( tag || \"*\" );\n\n\t} else if ( typeof context.querySelectorAll !== \"undefined\" ) {\n\t\tret = context.querySelectorAll( tag || \"*\" );\n\n\t} else {\n\t\tret = [];\n\t}\n\n\tif ( tag === undefined || tag && nodeName( context, tag ) ) {\n\t\treturn jQuery.merge( [ context ], ret );\n\t}\n\n\treturn ret;\n}\n\n\n// Mark scripts as having already been evaluated\nfunction setGlobalEval( elems, refElements ) {\n\tvar i = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\tdataPriv.set(\n\t\t\telems[ i ],\n\t\t\t\"globalEval\",\n\t\t\t!refElements || dataPriv.get( refElements[ i ], \"globalEval\" )\n\t\t);\n\t}\n}\n\n\nvar rhtml = /<|&#?\\w+;/;\n\nfunction buildFragment( elems, context, scripts, selection, ignored ) {\n\tvar elem, tmp, tag, wrap, attached, j,\n\t\tfragment = context.createDocumentFragment(),\n\t\tnodes = [],\n\t\ti = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\telem = elems[ i ];\n\n\t\tif ( elem || elem === 0 ) {\n\n\t\t\t// Add nodes directly\n\t\t\tif ( toType( elem ) === \"object\" ) {\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );\n\n\t\t\t// Convert non-html into a text node\n\t\t\t} else if ( !rhtml.test( elem ) ) {\n\t\t\t\tnodes.push( context.createTextNode( elem ) );\n\n\t\t\t// Convert html into DOM nodes\n\t\t\t} else {\n\t\t\t\ttmp = tmp || fragment.appendChild( context.createElement( \"div\" ) );\n\n\t\t\t\t// Deserialize a standard representation\n\t\t\t\ttag = ( rtagName.exec( elem ) || [ \"\", \"\" ] )[ 1 ].toLowerCase();\n\t\t\t\twrap = wrapMap[ tag ] || wrapMap._default;\n\t\t\t\ttmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];\n\n\t\t\t\t// Descend through wrappers to the right content\n\t\t\t\tj = wrap[ 0 ];\n\t\t\t\twhile ( j-- ) {\n\t\t\t\t\ttmp = tmp.lastChild;\n\t\t\t\t}\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, tmp.childNodes );\n\n\t\t\t\t// Remember the top-level container\n\t\t\t\ttmp = fragment.firstChild;\n\n\t\t\t\t// Ensure the created nodes are orphaned (trac-12392)\n\t\t\t\ttmp.textContent = \"\";\n\t\t\t}\n\t\t}\n\t}\n\n\t// Remove wrapper from fragment\n\tfragment.textContent = \"\";\n\n\ti = 0;\n\twhile ( ( elem = nodes[ i++ ] ) ) {\n\n\t\t// Skip elements already in the context collection (trac-4087)\n\t\tif ( selection && jQuery.inArray( elem, selection ) > -1 ) {\n\t\t\tif ( ignored ) {\n\t\t\t\tignored.push( elem );\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tattached = isAttached( elem );\n\n\t\t// Append to fragment\n\t\ttmp = getAll( fragment.appendChild( elem ), \"script\" );\n\n\t\t// Preserve script evaluation history\n\t\tif ( attached ) {\n\t\t\tsetGlobalEval( tmp );\n\t\t}\n\n\t\t// Capture executables\n\t\tif ( scripts ) {\n\t\t\tj = 0;\n\t\t\twhile ( ( elem = tmp[ j++ ] ) ) {\n\t\t\t\tif ( rscriptType.test( elem.type || \"\" ) ) {\n\t\t\t\t\tscripts.push( elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn fragment;\n}\n\n\nvar rtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n\nfunction returnTrue() {\n\treturn true;\n}\n\nfunction returnFalse() {\n\treturn false;\n}\n\nfunction on( elem, types, selector, data, fn, one ) {\n\tvar origFn, type;\n\n\t// Types can be a map of types/handlers\n\tif ( typeof types === \"object\" ) {\n\n\t\t// ( types-Object, selector, data )\n\t\tif ( typeof selector !== \"string\" ) {\n\n\t\t\t// ( types-Object, data )\n\t\t\tdata = data || selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tfor ( type in types ) {\n\t\t\ton( elem, type, selector, data, types[ type ], one );\n\t\t}\n\t\treturn elem;\n\t}\n\n\tif ( data == null && fn == null ) {\n\n\t\t// ( types, fn )\n\t\tfn = selector;\n\t\tdata = selector = undefined;\n\t} else if ( fn == null ) {\n\t\tif ( typeof selector === \"string\" ) {\n\n\t\t\t// ( types, selector, fn )\n\t\t\tfn = data;\n\t\t\tdata = undefined;\n\t\t} else {\n\n\t\t\t// ( types, data, fn )\n\t\t\tfn = data;\n\t\t\tdata = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t}\n\tif ( fn === false ) {\n\t\tfn = returnFalse;\n\t} else if ( !fn ) {\n\t\treturn elem;\n\t}\n\n\tif ( one === 1 ) {\n\t\torigFn = fn;\n\t\tfn = function( event ) {\n\n\t\t\t// Can use an empty set, since event contains the info\n\t\t\tjQuery().off( event );\n\t\t\treturn origFn.apply( this, arguments );\n\t\t};\n\n\t\t// Use same guid so caller can remove using origFn\n\t\tfn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );\n\t}\n\treturn elem.each( function() {\n\t\tjQuery.event.add( this, types, fn, data, selector );\n\t} );\n}\n\n/*\n * Helper functions for managing events -- not part of the public interface.\n * Props to Dean Edwards' addEvent library for many of the ideas.\n */\njQuery.event = {\n\n\tglobal: {},\n\n\tadd: function( elem, types, handler, data, selector ) {\n\n\t\tvar handleObjIn, eventHandle, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.get( elem );\n\n\t\t// Only attach events to objects that accept data\n\t\tif ( !acceptData( elem ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\tif ( handler.handler ) {\n\t\t\thandleObjIn = handler;\n\t\t\thandler = handleObjIn.handler;\n\t\t\tselector = handleObjIn.selector;\n\t\t}\n\n\t\t// Ensure that invalid selectors throw exceptions at attach time\n\t\t// Evaluate against documentElement in case elem is a non-element node (e.g., document)\n\t\tif ( selector ) {\n\t\t\tjQuery.find.matchesSelector( documentElement, selector );\n\t\t}\n\n\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\tif ( !handler.guid ) {\n\t\t\thandler.guid = jQuery.guid++;\n\t\t}\n\n\t\t// Init the element's event structure and main handler, if this is the first\n\t\tif ( !( events = elemData.events ) ) {\n\t\t\tevents = elemData.events = Object.create( null );\n\t\t}\n\t\tif ( !( eventHandle = elemData.handle ) ) {\n\t\t\teventHandle = elemData.handle = function( e ) {\n\n\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\treturn typeof jQuery !== \"undefined\" && jQuery.event.triggered !== e.type ?\n\t\t\t\t\tjQuery.event.dispatch.apply( elem, arguments ) : undefined;\n\t\t\t};\n\t\t}\n\n\t\t// Handle multiple events separated by a space\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// There *must* be a type, no attaching namespace-only handlers\n\t\t\tif ( !type ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\n\t\t\t// Update special based on newly reset type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// handleObj is passed to all event handlers\n\t\t\thandleObj = jQuery.extend( {\n\t\t\t\ttype: type,\n\t\t\t\torigType: origType,\n\t\t\t\tdata: data,\n\t\t\t\thandler: handler,\n\t\t\t\tguid: handler.guid,\n\t\t\t\tselector: selector,\n\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test( selector ),\n\t\t\t\tnamespace: namespaces.join( \".\" )\n\t\t\t}, handleObjIn );\n\n\t\t\t// Init the event handler queue if we're the first\n\t\t\tif ( !( handlers = events[ type ] ) ) {\n\t\t\t\thandlers = events[ type ] = [];\n\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t// Only use addEventListener if the special events handler returns false\n\t\t\t\tif ( !special.setup ||\n\t\t\t\t\tspecial.setup.call( elem, data, namespaces, eventHandle ) === false ) {\n\n\t\t\t\t\tif ( elem.addEventListener ) {\n\t\t\t\t\t\telem.addEventListener( type, eventHandle );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( special.add ) {\n\t\t\t\tspecial.add.call( elem, handleObj );\n\n\t\t\t\tif ( !handleObj.handler.guid ) {\n\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add to the element's handler list, delegates in front\n\t\t\tif ( selector ) {\n\t\t\t\thandlers.splice( handlers.delegateCount++, 0, handleObj );\n\t\t\t} else {\n\t\t\t\thandlers.push( handleObj );\n\t\t\t}\n\n\t\t\t// Keep track of which events have ever been used, for event optimization\n\t\t\tjQuery.event.global[ type ] = true;\n\t\t}\n\n\t},\n\n\t// Detach an event or set of events from an element\n\tremove: function( elem, types, handler, selector, mappedTypes ) {\n\n\t\tvar j, origCount, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.hasData( elem ) && dataPriv.get( elem );\n\n\t\tif ( !elemData || !( events = elemData.events ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Once for each type.namespace in types; type may be omitted\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\tif ( !type ) {\n\t\t\t\tfor ( type in events ) {\n\t\t\t\t\tjQuery.event.remove( elem, type + types[ t ], handler, selector, true );\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\t\t\thandlers = events[ type ] || [];\n\t\t\ttmp = tmp[ 2 ] &&\n\t\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" );\n\n\t\t\t// Remove matching events\n\t\t\torigCount = j = handlers.length;\n\t\t\twhile ( j-- ) {\n\t\t\t\thandleObj = handlers[ j ];\n\n\t\t\t\tif ( ( mappedTypes || origType === handleObj.origType ) &&\n\t\t\t\t\t( !handler || handler.guid === handleObj.guid ) &&\n\t\t\t\t\t( !tmp || tmp.test( handleObj.namespace ) ) &&\n\t\t\t\t\t( !selector || selector === handleObj.selector ||\n\t\t\t\t\t\tselector === \"**\" && handleObj.selector ) ) {\n\t\t\t\t\thandlers.splice( j, 1 );\n\n\t\t\t\t\tif ( handleObj.selector ) {\n\t\t\t\t\t\thandlers.delegateCount--;\n\t\t\t\t\t}\n\t\t\t\t\tif ( special.remove ) {\n\t\t\t\t\t\tspecial.remove.call( elem, handleObj );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\tif ( origCount && !handlers.length ) {\n\t\t\t\tif ( !special.teardown ||\n\t\t\t\t\tspecial.teardown.call( elem, namespaces, elemData.handle ) === false ) {\n\n\t\t\t\t\tjQuery.removeEvent( elem, type, elemData.handle );\n\t\t\t\t}\n\n\t\t\t\tdelete events[ type ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove data and the expando if it's no longer used\n\t\tif ( jQuery.isEmptyObject( events ) ) {\n\t\t\tdataPriv.remove( elem, \"handle events\" );\n\t\t}\n\t},\n\n\tdispatch: function( nativeEvent ) {\n\n\t\tvar i, j, ret, matched, handleObj, handlerQueue,\n\t\t\targs = new Array( arguments.length ),\n\n\t\t\t// Make a writable jQuery.Event from the native event object\n\t\t\tevent = jQuery.event.fix( nativeEvent ),\n\n\t\t\thandlers = (\n\t\t\t\tdataPriv.get( this, \"events\" ) || Object.create( null )\n\t\t\t)[ event.type ] || [],\n\t\t\tspecial = jQuery.event.special[ event.type ] || {};\n\n\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\targs[ 0 ] = event;\n\n\t\tfor ( i = 1; i < arguments.length; i++ ) {\n\t\t\targs[ i ] = arguments[ i ];\n\t\t}\n\n\t\tevent.delegateTarget = this;\n\n\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\tif ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine handlers\n\t\thandlerQueue = jQuery.event.handlers.call( this, event, handlers );\n\n\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\ti = 0;\n\t\twhile ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\tj = 0;\n\t\t\twhile ( ( handleObj = matched.handlers[ j++ ] ) &&\n\t\t\t\t!event.isImmediatePropagationStopped() ) {\n\n\t\t\t\t// If the event is namespaced, then each handler is only invoked if it is\n\t\t\t\t// specially universal or its namespaces are a superset of the event's.\n\t\t\t\tif ( !event.rnamespace || handleObj.namespace === false ||\n\t\t\t\t\tevent.rnamespace.test( handleObj.namespace ) ) {\n\n\t\t\t\t\tevent.handleObj = handleObj;\n\t\t\t\t\tevent.data = handleObj.data;\n\n\t\t\t\t\tret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||\n\t\t\t\t\t\thandleObj.handler ).apply( matched.elem, args );\n\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\tif ( ( event.result = ret ) === false ) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Call the postDispatch hook for the mapped type\n\t\tif ( special.postDispatch ) {\n\t\t\tspecial.postDispatch.call( this, event );\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\thandlers: function( event, handlers ) {\n\t\tvar i, handleObj, sel, matchedHandlers, matchedSelectors,\n\t\t\thandlerQueue = [],\n\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\tcur = event.target;\n\n\t\t// Find delegate handlers\n\t\tif ( delegateCount &&\n\n\t\t\t// Support: IE <=9\n\t\t\t// Black-hole SVG <use> instance trees (trac-13180)\n\t\t\tcur.nodeType &&\n\n\t\t\t// Support: Firefox <=42\n\t\t\t// Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)\n\t\t\t// https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click\n\t\t\t// Support: IE 11 only\n\t\t\t// ...but not arrow key \"clicks\" of radio inputs, which can have `button` -1 (gh-2343)\n\t\t\t!( event.type === \"click\" && event.button >= 1 ) ) {\n\n\t\t\tfor ( ; cur !== this; cur = cur.parentNode || this ) {\n\n\t\t\t\t// Don't check non-elements (trac-13208)\n\t\t\t\t// Don't process clicks on disabled elements (trac-6911, trac-8165, trac-11382, trac-11764)\n\t\t\t\tif ( cur.nodeType === 1 && !( event.type === \"click\" && cur.disabled === true ) ) {\n\t\t\t\t\tmatchedHandlers = [];\n\t\t\t\t\tmatchedSelectors = {};\n\t\t\t\t\tfor ( i = 0; i < delegateCount; i++ ) {\n\t\t\t\t\t\thandleObj = handlers[ i ];\n\n\t\t\t\t\t\t// Don't conflict with Object.prototype properties (trac-13203)\n\t\t\t\t\t\tsel = handleObj.selector + \" \";\n\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] === undefined ) {\n\t\t\t\t\t\t\tmatchedSelectors[ sel ] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\tjQuery( sel, this ).index( cur ) > -1 :\n\t\t\t\t\t\t\t\tjQuery.find( sel, this, null, [ cur ] ).length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] ) {\n\t\t\t\t\t\t\tmatchedHandlers.push( handleObj );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( matchedHandlers.length ) {\n\t\t\t\t\t\thandlerQueue.push( { elem: cur, handlers: matchedHandlers } );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Add the remaining (directly-bound) handlers\n\t\tcur = this;\n\t\tif ( delegateCount < handlers.length ) {\n\t\t\thandlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } );\n\t\t}\n\n\t\treturn handlerQueue;\n\t},\n\n\taddProp: function( name, hook ) {\n\t\tObject.defineProperty( jQuery.Event.prototype, name, {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true,\n\n\t\t\tget: isFunction( hook ) ?\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\treturn hook( this.originalEvent );\n\t\t\t\t\t}\n\t\t\t\t} :\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\treturn this.originalEvent[ name ];\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\tset: function( value ) {\n\t\t\t\tObject.defineProperty( this, name, {\n\t\t\t\t\tenumerable: true,\n\t\t\t\t\tconfigurable: true,\n\t\t\t\t\twritable: true,\n\t\t\t\t\tvalue: value\n\t\t\t\t} );\n\t\t\t}\n\t\t} );\n\t},\n\n\tfix: function( originalEvent ) {\n\t\treturn originalEvent[ jQuery.expando ] ?\n\t\t\toriginalEvent :\n\t\t\tnew jQuery.Event( originalEvent );\n\t},\n\n\tspecial: {\n\t\tload: {\n\n\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\tnoBubble: true\n\t\t},\n\t\tclick: {\n\n\t\t\t// Utilize native event to ensure correct state for checkable inputs\n\t\t\tsetup: function( data ) {\n\n\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\tvar el = this || data;\n\n\t\t\t\t// Claim the first handler\n\t\t\t\tif ( rcheckableType.test( el.type ) &&\n\t\t\t\t\tel.click && nodeName( el, \"input\" ) ) {\n\n\t\t\t\t\t// dataPriv.set( el, \"click\", ... )\n\t\t\t\t\tleverageNative( el, \"click\", true );\n\t\t\t\t}\n\n\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\ttrigger: function( data ) {\n\n\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\tvar el = this || data;\n\n\t\t\t\t// Force setup before triggering a click\n\t\t\t\tif ( rcheckableType.test( el.type ) &&\n\t\t\t\t\tel.click && nodeName( el, \"input\" ) ) {\n\n\t\t\t\t\tleverageNative( el, \"click\" );\n\t\t\t\t}\n\n\t\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\t\treturn true;\n\t\t\t},\n\n\t\t\t// For cross-browser consistency, suppress native .click() on links\n\t\t\t// Also prevent it if we're currently inside a leveraged native-event stack\n\t\t\t_default: function( event ) {\n\t\t\t\tvar target = event.target;\n\t\t\t\treturn rcheckableType.test( target.type ) &&\n\t\t\t\t\ttarget.click && nodeName( target, \"input\" ) &&\n\t\t\t\t\tdataPriv.get( target, \"click\" ) ||\n\t\t\t\t\tnodeName( target, \"a\" );\n\t\t\t}\n\t\t},\n\n\t\tbeforeunload: {\n\t\t\tpostDispatch: function( event ) {\n\n\t\t\t\t// Support: Firefox 20+\n\t\t\t\t// Firefox doesn't alert if the returnValue field is not set.\n\t\t\t\tif ( event.result !== undefined && event.originalEvent ) {\n\t\t\t\t\tevent.originalEvent.returnValue = event.result;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n};\n\n// Ensure the presence of an event listener that handles manually-triggered\n// synthetic events by interrupting progress until reinvoked in response to\n// *native* events that it fires directly, ensuring that state changes have\n// already occurred before other listeners are invoked.\nfunction leverageNative( el, type, isSetup ) {\n\n\t// Missing `isSetup` indicates a trigger call, which must force setup through jQuery.event.add\n\tif ( !isSetup ) {\n\t\tif ( dataPriv.get( el, type ) === undefined ) {\n\t\t\tjQuery.event.add( el, type, returnTrue );\n\t\t}\n\t\treturn;\n\t}\n\n\t// Register the controller as a special universal handler for all event namespaces\n\tdataPriv.set( el, type, false );\n\tjQuery.event.add( el, type, {\n\t\tnamespace: false,\n\t\thandler: function( event ) {\n\t\t\tvar result,\n\t\t\t\tsaved = dataPriv.get( this, type );\n\n\t\t\tif ( ( event.isTrigger & 1 ) && this[ type ] ) {\n\n\t\t\t\t// Interrupt processing of the outer synthetic .trigger()ed event\n\t\t\t\tif ( !saved ) {\n\n\t\t\t\t\t// Store arguments for use when handling the inner native event\n\t\t\t\t\t// There will always be at least one argument (an event object), so this array\n\t\t\t\t\t// will not be confused with a leftover capture object.\n\t\t\t\t\tsaved = slice.call( arguments );\n\t\t\t\t\tdataPriv.set( this, type, saved );\n\n\t\t\t\t\t// Trigger the native event and capture its result\n\t\t\t\t\tthis[ type ]();\n\t\t\t\t\tresult = dataPriv.get( this, type );\n\t\t\t\t\tdataPriv.set( this, type, false );\n\n\t\t\t\t\tif ( saved !== result ) {\n\n\t\t\t\t\t\t// Cancel the outer synthetic event\n\t\t\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t\t\t\tevent.preventDefault();\n\n\t\t\t\t\t\treturn result;\n\t\t\t\t\t}\n\n\t\t\t\t// If this is an inner synthetic event for an event with a bubbling surrogate\n\t\t\t\t// (focus or blur), assume that the surrogate already propagated from triggering\n\t\t\t\t// the native event and prevent that from happening again here.\n\t\t\t\t// This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the\n\t\t\t\t// bubbling surrogate propagates *after* the non-bubbling base), but that seems\n\t\t\t\t// less bad than duplication.\n\t\t\t\t} else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) {\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t}\n\n\t\t\t// If this is a native event triggered above, everything is now in order\n\t\t\t// Fire an inner synthetic event with the original arguments\n\t\t\t} else if ( saved ) {\n\n\t\t\t\t// ...and capture the result\n\t\t\t\tdataPriv.set( this, type, jQuery.event.trigger(\n\t\t\t\t\tsaved[ 0 ],\n\t\t\t\t\tsaved.slice( 1 ),\n\t\t\t\t\tthis\n\t\t\t\t) );\n\n\t\t\t\t// Abort handling of the native event by all jQuery handlers while allowing\n\t\t\t\t// native handlers on the same element to run. On target, this is achieved\n\t\t\t\t// by stopping immediate propagation just on the jQuery event. However,\n\t\t\t\t// the native event is re-wrapped by a jQuery one on each level of the\n\t\t\t\t// propagation so the only way to stop it for jQuery is to stop it for\n\t\t\t\t// everyone via native `stopPropagation()`. This is not a problem for\n\t\t\t\t// focus/blur which don't bubble, but it does also stop click on checkboxes\n\t\t\t\t// and radios. We accept this limitation.\n\t\t\t\tevent.stopPropagation();\n\t\t\t\tevent.isImmediatePropagationStopped = returnTrue;\n\t\t\t}\n\t\t}\n\t} );\n}\n\njQuery.removeEvent = function( elem, type, handle ) {\n\n\t// This \"if\" is needed for plain objects\n\tif ( elem.removeEventListener ) {\n\t\telem.removeEventListener( type, handle );\n\t}\n};\n\njQuery.Event = function( src, props ) {\n\n\t// Allow instantiation without the 'new' keyword\n\tif ( !( this instanceof jQuery.Event ) ) {\n\t\treturn new jQuery.Event( src, props );\n\t}\n\n\t// Event object\n\tif ( src && src.type ) {\n\t\tthis.originalEvent = src;\n\t\tthis.type = src.type;\n\n\t\t// Events bubbling up the document may have been marked as prevented\n\t\t// by a handler lower down the tree; reflect the correct value.\n\t\tthis.isDefaultPrevented = src.defaultPrevented ||\n\t\t\t\tsrc.defaultPrevented === undefined &&\n\n\t\t\t\t// Support: Android <=2.3 only\n\t\t\t\tsrc.returnValue === false ?\n\t\t\treturnTrue :\n\t\t\treturnFalse;\n\n\t\t// Create target properties\n\t\t// Support: Safari <=6 - 7 only\n\t\t// Target should not be a text node (trac-504, trac-13143)\n\t\tthis.target = ( src.target && src.target.nodeType === 3 ) ?\n\t\t\tsrc.target.parentNode :\n\t\t\tsrc.target;\n\n\t\tthis.currentTarget = src.currentTarget;\n\t\tthis.relatedTarget = src.relatedTarget;\n\n\t// Event type\n\t} else {\n\t\tthis.type = src;\n\t}\n\n\t// Put explicitly provided properties onto the event object\n\tif ( props ) {\n\t\tjQuery.extend( this, props );\n\t}\n\n\t// Create a timestamp if incoming event doesn't have one\n\tthis.timeStamp = src && src.timeStamp || Date.now();\n\n\t// Mark it as fixed\n\tthis[ jQuery.expando ] = true;\n};\n\n// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\njQuery.Event.prototype = {\n\tconstructor: jQuery.Event,\n\tisDefaultPrevented: returnFalse,\n\tisPropagationStopped: returnFalse,\n\tisImmediatePropagationStopped: returnFalse,\n\tisSimulated: false,\n\n\tpreventDefault: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isDefaultPrevented = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.preventDefault();\n\t\t}\n\t},\n\tstopPropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isPropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopPropagation();\n\t\t}\n\t},\n\tstopImmediatePropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isImmediatePropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopImmediatePropagation();\n\t\t}\n\n\t\tthis.stopPropagation();\n\t}\n};\n\n// Includes all common event props including KeyEvent and MouseEvent specific props\njQuery.each( {\n\taltKey: true,\n\tbubbles: true,\n\tcancelable: true,\n\tchangedTouches: true,\n\tctrlKey: true,\n\tdetail: true,\n\teventPhase: true,\n\tmetaKey: true,\n\tpageX: true,\n\tpageY: true,\n\tshiftKey: true,\n\tview: true,\n\t\"char\": true,\n\tcode: true,\n\tcharCode: true,\n\tkey: true,\n\tkeyCode: true,\n\tbutton: true,\n\tbuttons: true,\n\tclientX: true,\n\tclientY: true,\n\toffsetX: true,\n\toffsetY: true,\n\tpointerId: true,\n\tpointerType: true,\n\tscreenX: true,\n\tscreenY: true,\n\ttargetTouches: true,\n\ttoElement: true,\n\ttouches: true,\n\twhich: true\n}, jQuery.event.addProp );\n\njQuery.each( { focus: \"focusin\", blur: \"focusout\" }, function( type, delegateType ) {\n\n\tfunction focusMappedHandler( nativeEvent ) {\n\t\tif ( document.documentMode ) {\n\n\t\t\t// Support: IE 11+\n\t\t\t// Attach a single focusin/focusout handler on the document while someone wants\n\t\t\t// focus/blur. This is because the former are synchronous in IE while the latter\n\t\t\t// are async. In other browsers, all those handlers are invoked synchronously.\n\n\t\t\t// `handle` from private data would already wrap the event, but we need\n\t\t\t// to change the `type` here.\n\t\t\tvar handle = dataPriv.get( this, \"handle\" ),\n\t\t\t\tevent = jQuery.event.fix( nativeEvent );\n\t\t\tevent.type = nativeEvent.type === \"focusin\" ? \"focus\" : \"blur\";\n\t\t\tevent.isSimulated = true;\n\n\t\t\t// First, handle focusin/focusout\n\t\t\thandle( nativeEvent );\n\n\t\t\t// ...then, handle focus/blur\n\t\t\t//\n\t\t\t// focus/blur don't bubble while focusin/focusout do; simulate the former by only\n\t\t\t// invoking the handler at the lower level.\n\t\t\tif ( event.target === event.currentTarget ) {\n\n\t\t\t\t// The setup part calls `leverageNative`, which, in turn, calls\n\t\t\t\t// `jQuery.event.add`, so event handle will already have been set\n\t\t\t\t// by this point.\n\t\t\t\thandle( event );\n\t\t\t}\n\t\t} else {\n\n\t\t\t// For non-IE browsers, attach a single capturing handler on the document\n\t\t\t// while someone wants focusin/focusout.\n\t\t\tjQuery.event.simulate( delegateType, nativeEvent.target,\n\t\t\t\tjQuery.event.fix( nativeEvent ) );\n\t\t}\n\t}\n\n\tjQuery.event.special[ type ] = {\n\n\t\t// Utilize native event if possible so blur/focus sequence is correct\n\t\tsetup: function() {\n\n\t\t\tvar attaches;\n\n\t\t\t// Claim the first handler\n\t\t\t// dataPriv.set( this, \"focus\", ... )\n\t\t\t// dataPriv.set( this, \"blur\", ... )\n\t\t\tleverageNative( this, type, true );\n\n\t\t\tif ( document.documentMode ) {\n\n\t\t\t\t// Support: IE 9 - 11+\n\t\t\t\t// We use the same native handler for focusin & focus (and focusout & blur)\n\t\t\t\t// so we need to coordinate setup & teardown parts between those events.\n\t\t\t\t// Use `delegateType` as the key as `type` is already used by `leverageNative`.\n\t\t\t\tattaches = dataPriv.get( this, delegateType );\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tthis.addEventListener( delegateType, focusMappedHandler );\n\t\t\t\t}\n\t\t\t\tdataPriv.set( this, delegateType, ( attaches || 0 ) + 1 );\n\t\t\t} else {\n\n\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\t\ttrigger: function() {\n\n\t\t\t// Force setup before trigger\n\t\t\tleverageNative( this, type );\n\n\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\treturn true;\n\t\t},\n\n\t\tteardown: function() {\n\t\t\tvar attaches;\n\n\t\t\tif ( document.documentMode ) {\n\t\t\t\tattaches = dataPriv.get( this, delegateType ) - 1;\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tthis.removeEventListener( delegateType, focusMappedHandler );\n\t\t\t\t\tdataPriv.remove( this, delegateType );\n\t\t\t\t} else {\n\t\t\t\t\tdataPriv.set( this, delegateType, attaches );\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// Return false to indicate standard teardown should be applied\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\n\t\t// Suppress native focus or blur if we're currently inside\n\t\t// a leveraged native-event stack\n\t\t_default: function( event ) {\n\t\t\treturn dataPriv.get( event.target, type );\n\t\t},\n\n\t\tdelegateType: delegateType\n\t};\n\n\t// Support: Firefox <=44\n\t// Firefox doesn't have focus(in | out) events\n\t// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787\n\t//\n\t// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1\n\t// focus(in | out) events fire after focus & blur events,\n\t// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order\n\t// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857\n\t//\n\t// Support: IE 9 - 11+\n\t// To preserve relative focusin/focus & focusout/blur event order guaranteed on the 3.x branch,\n\t// attach a single handler for both events in IE.\n\tjQuery.event.special[ delegateType ] = {\n\t\tsetup: function() {\n\n\t\t\t// Handle: regular nodes (via `this.ownerDocument`), window\n\t\t\t// (via `this.document`) & document (via `this`).\n\t\t\tvar doc = this.ownerDocument || this.document || this,\n\t\t\t\tdataHolder = document.documentMode ? this : doc,\n\t\t\t\tattaches = dataPriv.get( dataHolder, delegateType );\n\n\t\t\t// Support: IE 9 - 11+\n\t\t\t// We use the same native handler for focusin & focus (and focusout & blur)\n\t\t\t// so we need to coordinate setup & teardown parts between those events.\n\t\t\t// Use `delegateType` as the key as `type` is already used by `leverageNative`.\n\t\t\tif ( !attaches ) {\n\t\t\t\tif ( document.documentMode ) {\n\t\t\t\t\tthis.addEventListener( delegateType, focusMappedHandler );\n\t\t\t\t} else {\n\t\t\t\t\tdoc.addEventListener( type, focusMappedHandler, true );\n\t\t\t\t}\n\t\t\t}\n\t\t\tdataPriv.set( dataHolder, delegateType, ( attaches || 0 ) + 1 );\n\t\t},\n\t\tteardown: function() {\n\t\t\tvar doc = this.ownerDocument || this.document || this,\n\t\t\t\tdataHolder = document.documentMode ? this : doc,\n\t\t\t\tattaches = dataPriv.get( dataHolder, delegateType ) - 1;\n\n\t\t\tif ( !attaches ) {\n\t\t\t\tif ( document.documentMode ) {\n\t\t\t\t\tthis.removeEventListener( delegateType, focusMappedHandler );\n\t\t\t\t} else {\n\t\t\t\t\tdoc.removeEventListener( type, focusMappedHandler, true );\n\t\t\t\t}\n\t\t\t\tdataPriv.remove( dataHolder, delegateType );\n\t\t\t} else {\n\t\t\t\tdataPriv.set( dataHolder, delegateType, attaches );\n\t\t\t}\n\t\t}\n\t};\n} );\n\n// Create mouseenter/leave events using mouseover/out and event-time checks\n// so that event delegation works in jQuery.\n// Do the same for pointerenter/pointerleave and pointerover/pointerout\n//\n// Support: Safari 7 only\n// Safari sends mouseenter too often; see:\n// https://bugs.chromium.org/p/chromium/issues/detail?id=470258\n// for the description of the bug (it existed in older Chrome versions as well).\njQuery.each( {\n\tmouseenter: \"mouseover\",\n\tmouseleave: \"mouseout\",\n\tpointerenter: \"pointerover\",\n\tpointerleave: \"pointerout\"\n}, function( orig, fix ) {\n\tjQuery.event.special[ orig ] = {\n\t\tdelegateType: fix,\n\t\tbindType: fix,\n\n\t\thandle: function( event ) {\n\t\t\tvar ret,\n\t\t\t\ttarget = this,\n\t\t\t\trelated = event.relatedTarget,\n\t\t\t\thandleObj = event.handleObj;\n\n\t\t\t// For mouseenter/leave call the handler if related is outside the target.\n\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\tif ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {\n\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\tret = handleObj.handler.apply( this, arguments );\n\t\t\t\tevent.type = fix;\n\t\t\t}\n\t\t\treturn ret;\n\t\t}\n\t};\n} );\n\njQuery.fn.extend( {\n\n\ton: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn );\n\t},\n\tone: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn, 1 );\n\t},\n\toff: function( types, selector, fn ) {\n\t\tvar handleObj, type;\n\t\tif ( types && types.preventDefault && types.handleObj ) {\n\n\t\t\t// ( event )  dispatched jQuery.Event\n\t\t\thandleObj = types.handleObj;\n\t\t\tjQuery( types.delegateTarget ).off(\n\t\t\t\thandleObj.namespace ?\n\t\t\t\t\thandleObj.origType + \".\" + handleObj.namespace :\n\t\t\t\t\thandleObj.origType,\n\t\t\t\thandleObj.selector,\n\t\t\t\thandleObj.handler\n\t\t\t);\n\t\t\treturn this;\n\t\t}\n\t\tif ( typeof types === \"object\" ) {\n\n\t\t\t// ( types-object [, selector] )\n\t\t\tfor ( type in types ) {\n\t\t\t\tthis.off( type, selector, types[ type ] );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\tif ( selector === false || typeof selector === \"function\" ) {\n\n\t\t\t// ( types [, fn] )\n\t\t\tfn = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.remove( this, types, fn, selector );\n\t\t} );\n\t}\n} );\n\n\nvar\n\n\t// Support: IE <=10 - 11, Edge 12 - 13 only\n\t// In IE/Edge using regex groups here causes severe slowdowns.\n\t// See https://connect.microsoft.com/IE/feedback/details/1736512/\n\trnoInnerhtml = /<script|<style|<link/i,\n\n\t// checked=\"checked\" or checked\n\trchecked = /checked\\s*(?:[^=]|=\\s*.checked.)/i,\n\n\trcleanScript = /^\\s*<!\\[CDATA\\[|\\]\\]>\\s*$/g;\n\n// Prefer a tbody over its parent table for containing new rows\nfunction manipulationTarget( elem, content ) {\n\tif ( nodeName( elem, \"table\" ) &&\n\t\tnodeName( content.nodeType !== 11 ? content : content.firstChild, \"tr\" ) ) {\n\n\t\treturn jQuery( elem ).children( \"tbody\" )[ 0 ] || elem;\n\t}\n\n\treturn elem;\n}\n\n// Replace/restore the type attribute of script elements for safe DOM manipulation\nfunction disableScript( elem ) {\n\telem.type = ( elem.getAttribute( \"type\" ) !== null ) + \"/\" + elem.type;\n\treturn elem;\n}\nfunction restoreScript( elem ) {\n\tif ( ( elem.type || \"\" ).slice( 0, 5 ) === \"true/\" ) {\n\t\telem.type = elem.type.slice( 5 );\n\t} else {\n\t\telem.removeAttribute( \"type\" );\n\t}\n\n\treturn elem;\n}\n\nfunction cloneCopyEvent( src, dest ) {\n\tvar i, l, type, pdataOld, udataOld, udataCur, events;\n\n\tif ( dest.nodeType !== 1 ) {\n\t\treturn;\n\t}\n\n\t// 1. Copy private data: events, handlers, etc.\n\tif ( dataPriv.hasData( src ) ) {\n\t\tpdataOld = dataPriv.get( src );\n\t\tevents = pdataOld.events;\n\n\t\tif ( events ) {\n\t\t\tdataPriv.remove( dest, \"handle events\" );\n\n\t\t\tfor ( type in events ) {\n\t\t\t\tfor ( i = 0, l = events[ type ].length; i < l; i++ ) {\n\t\t\t\t\tjQuery.event.add( dest, type, events[ type ][ i ] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// 2. Copy user data\n\tif ( dataUser.hasData( src ) ) {\n\t\tudataOld = dataUser.access( src );\n\t\tudataCur = jQuery.extend( {}, udataOld );\n\n\t\tdataUser.set( dest, udataCur );\n\t}\n}\n\n// Fix IE bugs, see support tests\nfunction fixInput( src, dest ) {\n\tvar nodeName = dest.nodeName.toLowerCase();\n\n\t// Fails to persist the checked state of a cloned checkbox or radio button.\n\tif ( nodeName === \"input\" && rcheckableType.test( src.type ) ) {\n\t\tdest.checked = src.checked;\n\n\t// Fails to return the selected option to the default selected state when cloning options\n\t} else if ( nodeName === \"input\" || nodeName === \"textarea\" ) {\n\t\tdest.defaultValue = src.defaultValue;\n\t}\n}\n\nfunction domManip( collection, args, callback, ignored ) {\n\n\t// Flatten any nested arrays\n\targs = flat( args );\n\n\tvar fragment, first, scripts, hasScripts, node, doc,\n\t\ti = 0,\n\t\tl = collection.length,\n\t\tiNoClone = l - 1,\n\t\tvalue = args[ 0 ],\n\t\tvalueIsFunction = isFunction( value );\n\n\t// We can't cloneNode fragments that contain checked, in WebKit\n\tif ( valueIsFunction ||\n\t\t\t( l > 1 && typeof value === \"string\" &&\n\t\t\t\t!support.checkClone && rchecked.test( value ) ) ) {\n\t\treturn collection.each( function( index ) {\n\t\t\tvar self = collection.eq( index );\n\t\t\tif ( valueIsFunction ) {\n\t\t\t\targs[ 0 ] = value.call( this, index, self.html() );\n\t\t\t}\n\t\t\tdomManip( self, args, callback, ignored );\n\t\t} );\n\t}\n\n\tif ( l ) {\n\t\tfragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );\n\t\tfirst = fragment.firstChild;\n\n\t\tif ( fragment.childNodes.length === 1 ) {\n\t\t\tfragment = first;\n\t\t}\n\n\t\t// Require either new content or an interest in ignored elements to invoke the callback\n\t\tif ( first || ignored ) {\n\t\t\tscripts = jQuery.map( getAll( fragment, \"script\" ), disableScript );\n\t\t\thasScripts = scripts.length;\n\n\t\t\t// Use the original fragment for the last item\n\t\t\t// instead of the first because it can end up\n\t\t\t// being emptied incorrectly in certain situations (trac-8070).\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tnode = fragment;\n\n\t\t\t\tif ( i !== iNoClone ) {\n\t\t\t\t\tnode = jQuery.clone( node, true, true );\n\n\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\tif ( hasScripts ) {\n\n\t\t\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\t\tjQuery.merge( scripts, getAll( node, \"script\" ) );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcallback.call( collection[ i ], node, i );\n\t\t\t}\n\n\t\t\tif ( hasScripts ) {\n\t\t\t\tdoc = scripts[ scripts.length - 1 ].ownerDocument;\n\n\t\t\t\t// Re-enable scripts\n\t\t\t\tjQuery.map( scripts, restoreScript );\n\n\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\tfor ( i = 0; i < hasScripts; i++ ) {\n\t\t\t\t\tnode = scripts[ i ];\n\t\t\t\t\tif ( rscriptType.test( node.type || \"\" ) &&\n\t\t\t\t\t\t!dataPriv.access( node, \"globalEval\" ) &&\n\t\t\t\t\t\tjQuery.contains( doc, node ) ) {\n\n\t\t\t\t\t\tif ( node.src && ( node.type || \"\" ).toLowerCase()  !== \"module\" ) {\n\n\t\t\t\t\t\t\t// Optional AJAX dependency, but won't run scripts if not present\n\t\t\t\t\t\t\tif ( jQuery._evalUrl && !node.noModule ) {\n\t\t\t\t\t\t\t\tjQuery._evalUrl( node.src, {\n\t\t\t\t\t\t\t\t\tnonce: node.nonce || node.getAttribute( \"nonce\" )\n\t\t\t\t\t\t\t\t}, doc );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Unwrap a CDATA section containing script contents. This shouldn't be\n\t\t\t\t\t\t\t// needed as in XML documents they're already not visible when\n\t\t\t\t\t\t\t// inspecting element contents and in HTML documents they have no\n\t\t\t\t\t\t\t// meaning but we're preserving that logic for backwards compatibility.\n\t\t\t\t\t\t\t// This will be removed completely in 4.0. See gh-4904.\n\t\t\t\t\t\t\tDOMEval( node.textContent.replace( rcleanScript, \"\" ), node, doc );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn collection;\n}\n\nfunction remove( elem, selector, keepData ) {\n\tvar node,\n\t\tnodes = selector ? jQuery.filter( selector, elem ) : elem,\n\t\ti = 0;\n\n\tfor ( ; ( node = nodes[ i ] ) != null; i++ ) {\n\t\tif ( !keepData && node.nodeType === 1 ) {\n\t\t\tjQuery.cleanData( getAll( node ) );\n\t\t}\n\n\t\tif ( node.parentNode ) {\n\t\t\tif ( keepData && isAttached( node ) ) {\n\t\t\t\tsetGlobalEval( getAll( node, \"script\" ) );\n\t\t\t}\n\t\t\tnode.parentNode.removeChild( node );\n\t\t}\n\t}\n\n\treturn elem;\n}\n\njQuery.extend( {\n\thtmlPrefilter: function( html ) {\n\t\treturn html;\n\t},\n\n\tclone: function( elem, dataAndEvents, deepDataAndEvents ) {\n\t\tvar i, l, srcElements, destElements,\n\t\t\tclone = elem.cloneNode( true ),\n\t\t\tinPage = isAttached( elem );\n\n\t\t// Fix IE cloning issues\n\t\tif ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&\n\t\t\t\t!jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// We eschew jQuery#find here for performance reasons:\n\t\t\t// https://jsperf.com/getall-vs-sizzle/2\n\t\t\tdestElements = getAll( clone );\n\t\t\tsrcElements = getAll( elem );\n\n\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\tfixInput( srcElements[ i ], destElements[ i ] );\n\t\t\t}\n\t\t}\n\n\t\t// Copy the events from the original to the clone\n\t\tif ( dataAndEvents ) {\n\t\t\tif ( deepDataAndEvents ) {\n\t\t\t\tsrcElements = srcElements || getAll( elem );\n\t\t\t\tdestElements = destElements || getAll( clone );\n\n\t\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\t\tcloneCopyEvent( srcElements[ i ], destElements[ i ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcloneCopyEvent( elem, clone );\n\t\t\t}\n\t\t}\n\n\t\t// Preserve script evaluation history\n\t\tdestElements = getAll( clone, \"script\" );\n\t\tif ( destElements.length > 0 ) {\n\t\t\tsetGlobalEval( destElements, !inPage && getAll( elem, \"script\" ) );\n\t\t}\n\n\t\t// Return the cloned set\n\t\treturn clone;\n\t},\n\n\tcleanData: function( elems ) {\n\t\tvar data, elem, type,\n\t\t\tspecial = jQuery.event.special,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {\n\t\t\tif ( acceptData( elem ) ) {\n\t\t\t\tif ( ( data = elem[ dataPriv.expando ] ) ) {\n\t\t\t\t\tif ( data.events ) {\n\t\t\t\t\t\tfor ( type in data.events ) {\n\t\t\t\t\t\t\tif ( special[ type ] ) {\n\t\t\t\t\t\t\t\tjQuery.event.remove( elem, type );\n\n\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tjQuery.removeEvent( elem, type, data.handle );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataPriv.expando ] = undefined;\n\t\t\t\t}\n\t\t\t\tif ( elem[ dataUser.expando ] ) {\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataUser.expando ] = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n} );\n\njQuery.fn.extend( {\n\tdetach: function( selector ) {\n\t\treturn remove( this, selector, true );\n\t},\n\n\tremove: function( selector ) {\n\t\treturn remove( this, selector );\n\t},\n\n\ttext: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\treturn value === undefined ?\n\t\t\t\tjQuery.text( this ) :\n\t\t\t\tthis.empty().each( function() {\n\t\t\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\t\t\tthis.textContent = value;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t}, null, value, arguments.length );\n\t},\n\n\tappend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.appendChild( elem );\n\t\t\t}\n\t\t} );\n\t},\n\n\tprepend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.insertBefore( elem, target.firstChild );\n\t\t\t}\n\t\t} );\n\t},\n\n\tbefore: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this );\n\t\t\t}\n\t\t} );\n\t},\n\n\tafter: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this.nextSibling );\n\t\t\t}\n\t\t} );\n\t},\n\n\tempty: function() {\n\t\tvar elem,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = this[ i ] ) != null; i++ ) {\n\t\t\tif ( elem.nodeType === 1 ) {\n\n\t\t\t\t// Prevent memory leaks\n\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\n\t\t\t\t// Remove any remaining nodes\n\t\t\t\telem.textContent = \"\";\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tclone: function( dataAndEvents, deepDataAndEvents ) {\n\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\treturn this.map( function() {\n\t\t\treturn jQuery.clone( this, dataAndEvents, deepDataAndEvents );\n\t\t} );\n\t},\n\n\thtml: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\tvar elem = this[ 0 ] || {},\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length;\n\n\t\t\tif ( value === undefined && elem.nodeType === 1 ) {\n\t\t\t\treturn elem.innerHTML;\n\t\t\t}\n\n\t\t\t// See if we can take a shortcut and just use innerHTML\n\t\t\tif ( typeof value === \"string\" && !rnoInnerhtml.test( value ) &&\n\t\t\t\t!wrapMap[ ( rtagName.exec( value ) || [ \"\", \"\" ] )[ 1 ].toLowerCase() ] ) {\n\n\t\t\t\tvalue = jQuery.htmlPrefilter( value );\n\n\t\t\t\ttry {\n\t\t\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\t\t\telem = this[ i ] || {};\n\n\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\telem = 0;\n\n\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t} catch ( e ) {}\n\t\t\t}\n\n\t\t\tif ( elem ) {\n\t\t\t\tthis.empty().append( value );\n\t\t\t}\n\t\t}, null, value, arguments.length );\n\t},\n\n\treplaceWith: function() {\n\t\tvar ignored = [];\n\n\t\t// Make the changes, replacing each non-ignored context element with the new content\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tvar parent = this.parentNode;\n\n\t\t\tif ( jQuery.inArray( this, ignored ) < 0 ) {\n\t\t\t\tjQuery.cleanData( getAll( this ) );\n\t\t\t\tif ( parent ) {\n\t\t\t\t\tparent.replaceChild( elem, this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Force callback invocation\n\t\t}, ignored );\n\t}\n} );\n\njQuery.each( {\n\tappendTo: \"append\",\n\tprependTo: \"prepend\",\n\tinsertBefore: \"before\",\n\tinsertAfter: \"after\",\n\treplaceAll: \"replaceWith\"\n}, function( name, original ) {\n\tjQuery.fn[ name ] = function( selector ) {\n\t\tvar elems,\n\t\t\tret = [],\n\t\t\tinsert = jQuery( selector ),\n\t\t\tlast = insert.length - 1,\n\t\t\ti = 0;\n\n\t\tfor ( ; i <= last; i++ ) {\n\t\t\telems = i === last ? this : this.clone( true );\n\t\t\tjQuery( insert[ i ] )[ original ]( elems );\n\n\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t// .get() because push.apply(_, arraylike) throws on ancient WebKit\n\t\t\tpush.apply( ret, elems.get() );\n\t\t}\n\n\t\treturn this.pushStack( ret );\n\t};\n} );\nvar rnumnonpx = new RegExp( \"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\" );\n\nvar rcustomProp = /^--/;\n\n\nvar getStyles = function( elem ) {\n\n\t\t// Support: IE <=11 only, Firefox <=30 (trac-15098, trac-14150)\n\t\t// IE throws on elements created in popups\n\t\t// FF meanwhile throws on frame elements through \"defaultView.getComputedStyle\"\n\t\tvar view = elem.ownerDocument.defaultView;\n\n\t\tif ( !view || !view.opener ) {\n\t\t\tview = window;\n\t\t}\n\n\t\treturn view.getComputedStyle( elem );\n\t};\n\nvar swap = function( elem, options, callback ) {\n\tvar ret, name,\n\t\told = {};\n\n\t// Remember the old values, and insert the new ones\n\tfor ( name in options ) {\n\t\told[ name ] = elem.style[ name ];\n\t\telem.style[ name ] = options[ name ];\n\t}\n\n\tret = callback.call( elem );\n\n\t// Revert the old values\n\tfor ( name in options ) {\n\t\telem.style[ name ] = old[ name ];\n\t}\n\n\treturn ret;\n};\n\n\nvar rboxStyle = new RegExp( cssExpand.join( \"|\" ), \"i\" );\n\n\n\n( function() {\n\n\t// Executing both pixelPosition & boxSizingReliable tests require only one layout\n\t// so they're executed at the same time to save the second computation.\n\tfunction computeStyleTests() {\n\n\t\t// This is a singleton, we need to execute it only once\n\t\tif ( !div ) {\n\t\t\treturn;\n\t\t}\n\n\t\tcontainer.style.cssText = \"position:absolute;left:-11111px;width:60px;\" +\n\t\t\t\"margin-top:1px;padding:0;border:0\";\n\t\tdiv.style.cssText =\n\t\t\t\"position:relative;display:block;box-sizing:border-box;overflow:scroll;\" +\n\t\t\t\"margin:auto;border:1px;padding:1px;\" +\n\t\t\t\"width:60%;top:1%\";\n\t\tdocumentElement.appendChild( container ).appendChild( div );\n\n\t\tvar divStyle = window.getComputedStyle( div );\n\t\tpixelPositionVal = divStyle.top !== \"1%\";\n\n\t\t// Support: Android 4.0 - 4.3 only, Firefox <=3 - 44\n\t\treliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12;\n\n\t\t// Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3\n\t\t// Some styles come back with percentage values, even though they shouldn't\n\t\tdiv.style.right = \"60%\";\n\t\tpixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36;\n\n\t\t// Support: IE 9 - 11 only\n\t\t// Detect misreporting of content dimensions for box-sizing:border-box elements\n\t\tboxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36;\n\n\t\t// Support: IE 9 only\n\t\t// Detect overflow:scroll screwiness (gh-3699)\n\t\t// Support: Chrome <=64\n\t\t// Don't get tricked when zoom affects offsetWidth (gh-4029)\n\t\tdiv.style.position = \"absolute\";\n\t\tscrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12;\n\n\t\tdocumentElement.removeChild( container );\n\n\t\t// Nullify the div so it wouldn't be stored in the memory and\n\t\t// it will also be a sign that checks already performed\n\t\tdiv = null;\n\t}\n\n\tfunction roundPixelMeasures( measure ) {\n\t\treturn Math.round( parseFloat( measure ) );\n\t}\n\n\tvar pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal,\n\t\treliableTrDimensionsVal, reliableMarginLeftVal,\n\t\tcontainer = document.createElement( \"div\" ),\n\t\tdiv = document.createElement( \"div\" );\n\n\t// Finish early in limited (non-browser) environments\n\tif ( !div.style ) {\n\t\treturn;\n\t}\n\n\t// Support: IE <=9 - 11 only\n\t// Style of cloned element affects source element cloned (trac-8908)\n\tdiv.style.backgroundClip = \"content-box\";\n\tdiv.cloneNode( true ).style.backgroundClip = \"\";\n\tsupport.clearCloneStyle = div.style.backgroundClip === \"content-box\";\n\n\tjQuery.extend( support, {\n\t\tboxSizingReliable: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn boxSizingReliableVal;\n\t\t},\n\t\tpixelBoxStyles: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn pixelBoxStylesVal;\n\t\t},\n\t\tpixelPosition: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn pixelPositionVal;\n\t\t},\n\t\treliableMarginLeft: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn reliableMarginLeftVal;\n\t\t},\n\t\tscrollboxSize: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn scrollboxSizeVal;\n\t\t},\n\n\t\t// Support: IE 9 - 11+, Edge 15 - 18+\n\t\t// IE/Edge misreport `getComputedStyle` of table rows with width/height\n\t\t// set in CSS while `offset*` properties report correct values.\n\t\t// Behavior in IE 9 is more subtle than in newer versions & it passes\n\t\t// some versions of this test; make sure not to make it pass there!\n\t\t//\n\t\t// Support: Firefox 70+\n\t\t// Only Firefox includes border widths\n\t\t// in computed dimensions. (gh-4529)\n\t\treliableTrDimensions: function() {\n\t\t\tvar table, tr, trChild, trStyle;\n\t\t\tif ( reliableTrDimensionsVal == null ) {\n\t\t\t\ttable = document.createElement( \"table\" );\n\t\t\t\ttr = document.createElement( \"tr\" );\n\t\t\t\ttrChild = document.createElement( \"div\" );\n\n\t\t\t\ttable.style.cssText = \"position:absolute;left:-11111px;border-collapse:separate\";\n\t\t\t\ttr.style.cssText = \"box-sizing:content-box;border:1px solid\";\n\n\t\t\t\t// Support: Chrome 86+\n\t\t\t\t// Height set through cssText does not get applied.\n\t\t\t\t// Computed height then comes back as 0.\n\t\t\t\ttr.style.height = \"1px\";\n\t\t\t\ttrChild.style.height = \"9px\";\n\n\t\t\t\t// Support: Android 8 Chrome 86+\n\t\t\t\t// In our bodyBackground.html iframe,\n\t\t\t\t// display for all div elements is set to \"inline\",\n\t\t\t\t// which causes a problem only in Android 8 Chrome 86.\n\t\t\t\t// Ensuring the div is `display: block`\n\t\t\t\t// gets around this issue.\n\t\t\t\ttrChild.style.display = \"block\";\n\n\t\t\t\tdocumentElement\n\t\t\t\t\t.appendChild( table )\n\t\t\t\t\t.appendChild( tr )\n\t\t\t\t\t.appendChild( trChild );\n\n\t\t\t\ttrStyle = window.getComputedStyle( tr );\n\t\t\t\treliableTrDimensionsVal = ( parseInt( trStyle.height, 10 ) +\n\t\t\t\t\tparseInt( trStyle.borderTopWidth, 10 ) +\n\t\t\t\t\tparseInt( trStyle.borderBottomWidth, 10 ) ) === tr.offsetHeight;\n\n\t\t\t\tdocumentElement.removeChild( table );\n\t\t\t}\n\t\t\treturn reliableTrDimensionsVal;\n\t\t}\n\t} );\n} )();\n\n\nfunction curCSS( elem, name, computed ) {\n\tvar width, minWidth, maxWidth, ret,\n\t\tisCustomProp = rcustomProp.test( name ),\n\n\t\t// Support: Firefox 51+\n\t\t// Retrieving style before computed somehow\n\t\t// fixes an issue with getting wrong values\n\t\t// on detached elements\n\t\tstyle = elem.style;\n\n\tcomputed = computed || getStyles( elem );\n\n\t// getPropertyValue is needed for:\n\t//   .css('filter') (IE 9 only, trac-12537)\n\t//   .css('--customProperty) (gh-3144)\n\tif ( computed ) {\n\n\t\t// Support: IE <=9 - 11+\n\t\t// IE only supports `\"float\"` in `getPropertyValue`; in computed styles\n\t\t// it's only available as `\"cssFloat\"`. We no longer modify properties\n\t\t// sent to `.css()` apart from camelCasing, so we need to check both.\n\t\t// Normally, this would create difference in behavior: if\n\t\t// `getPropertyValue` returns an empty string, the value returned\n\t\t// by `.css()` would be `undefined`. This is usually the case for\n\t\t// disconnected elements. However, in IE even disconnected elements\n\t\t// with no styles return `\"none\"` for `getPropertyValue( \"float\" )`\n\t\tret = computed.getPropertyValue( name ) || computed[ name ];\n\n\t\tif ( isCustomProp && ret ) {\n\n\t\t\t// Support: Firefox 105+, Chrome <=105+\n\t\t\t// Spec requires trimming whitespace for custom properties (gh-4926).\n\t\t\t// Firefox only trims leading whitespace. Chrome just collapses\n\t\t\t// both leading & trailing whitespace to a single space.\n\t\t\t//\n\t\t\t// Fall back to `undefined` if empty string returned.\n\t\t\t// This collapses a missing definition with property defined\n\t\t\t// and set to an empty string but there's no standard API\n\t\t\t// allowing us to differentiate them without a performance penalty\n\t\t\t// and returning `undefined` aligns with older jQuery.\n\t\t\t//\n\t\t\t// rtrimCSS treats U+000D CARRIAGE RETURN and U+000C FORM FEED\n\t\t\t// as whitespace while CSS does not, but this is not a problem\n\t\t\t// because CSS preprocessing replaces them with U+000A LINE FEED\n\t\t\t// (which *is* CSS whitespace)\n\t\t\t// https://www.w3.org/TR/css-syntax-3/#input-preprocessing\n\t\t\tret = ret.replace( rtrimCSS, \"$1\" ) || undefined;\n\t\t}\n\n\t\tif ( ret === \"\" && !isAttached( elem ) ) {\n\t\t\tret = jQuery.style( elem, name );\n\t\t}\n\n\t\t// A tribute to the \"awesome hack by Dean Edwards\"\n\t\t// Android Browser returns percentage for some values,\n\t\t// but width seems to be reliably pixels.\n\t\t// This is against the CSSOM draft spec:\n\t\t// https://drafts.csswg.org/cssom/#resolved-values\n\t\tif ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) {\n\n\t\t\t// Remember the original values\n\t\t\twidth = style.width;\n\t\t\tminWidth = style.minWidth;\n\t\t\tmaxWidth = style.maxWidth;\n\n\t\t\t// Put in the new values to get a computed value out\n\t\t\tstyle.minWidth = style.maxWidth = style.width = ret;\n\t\t\tret = computed.width;\n\n\t\t\t// Revert the changed values\n\t\t\tstyle.width = width;\n\t\t\tstyle.minWidth = minWidth;\n\t\t\tstyle.maxWidth = maxWidth;\n\t\t}\n\t}\n\n\treturn ret !== undefined ?\n\n\t\t// Support: IE <=9 - 11 only\n\t\t// IE returns zIndex value as an integer.\n\t\tret + \"\" :\n\t\tret;\n}\n\n\nfunction addGetHookIf( conditionFn, hookFn ) {\n\n\t// Define the hook, we'll check on the first run if it's really needed.\n\treturn {\n\t\tget: function() {\n\t\t\tif ( conditionFn() ) {\n\n\t\t\t\t// Hook not needed (or it's not possible to use it due\n\t\t\t\t// to missing dependency), remove it.\n\t\t\t\tdelete this.get;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Hook needed; redefine it so that the support test is not executed again.\n\t\t\treturn ( this.get = hookFn ).apply( this, arguments );\n\t\t}\n\t};\n}\n\n\nvar cssPrefixes = [ \"Webkit\", \"Moz\", \"ms\" ],\n\temptyStyle = document.createElement( \"div\" ).style,\n\tvendorProps = {};\n\n// Return a vendor-prefixed property or undefined\nfunction vendorPropName( name ) {\n\n\t// Check for vendor prefixed names\n\tvar capName = name[ 0 ].toUpperCase() + name.slice( 1 ),\n\t\ti = cssPrefixes.length;\n\n\twhile ( i-- ) {\n\t\tname = cssPrefixes[ i ] + capName;\n\t\tif ( name in emptyStyle ) {\n\t\t\treturn name;\n\t\t}\n\t}\n}\n\n// Return a potentially-mapped jQuery.cssProps or vendor prefixed property\nfunction finalPropName( name ) {\n\tvar final = jQuery.cssProps[ name ] || vendorProps[ name ];\n\n\tif ( final ) {\n\t\treturn final;\n\t}\n\tif ( name in emptyStyle ) {\n\t\treturn name;\n\t}\n\treturn vendorProps[ name ] = vendorPropName( name ) || name;\n}\n\n\nvar\n\n\t// Swappable if display is none or starts with table\n\t// except \"table\", \"table-cell\", or \"table-caption\"\n\t// See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display\n\trdisplayswap = /^(none|table(?!-c[ea]).+)/,\n\tcssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\tcssNormalTransform = {\n\t\tletterSpacing: \"0\",\n\t\tfontWeight: \"400\"\n\t};\n\nfunction setPositiveNumber( _elem, value, subtract ) {\n\n\t// Any relative (+/-) values have already been\n\t// normalized at this point\n\tvar matches = rcssNum.exec( value );\n\treturn matches ?\n\n\t\t// Guard against undefined \"subtract\", e.g., when used as in cssHooks\n\t\tMath.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || \"px\" ) :\n\t\tvalue;\n}\n\nfunction boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) {\n\tvar i = dimension === \"width\" ? 1 : 0,\n\t\textra = 0,\n\t\tdelta = 0,\n\t\tmarginDelta = 0;\n\n\t// Adjustment may not be necessary\n\tif ( box === ( isBorderBox ? \"border\" : \"content\" ) ) {\n\t\treturn 0;\n\t}\n\n\tfor ( ; i < 4; i += 2 ) {\n\n\t\t// Both box models exclude margin\n\t\t// Count margin delta separately to only add it after scroll gutter adjustment.\n\t\t// This is needed to make negative margins work with `outerHeight( true )` (gh-3982).\n\t\tif ( box === \"margin\" ) {\n\t\t\tmarginDelta += jQuery.css( elem, box + cssExpand[ i ], true, styles );\n\t\t}\n\n\t\t// If we get here with a content-box, we're seeking \"padding\" or \"border\" or \"margin\"\n\t\tif ( !isBorderBox ) {\n\n\t\t\t// Add padding\n\t\t\tdelta += jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\n\t\t\t// For \"border\" or \"margin\", add border\n\t\t\tif ( box !== \"padding\" ) {\n\t\t\t\tdelta += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\n\t\t\t// But still keep track of it otherwise\n\t\t\t} else {\n\t\t\t\textra += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\n\t\t// If we get here with a border-box (content + padding + border), we're seeking \"content\" or\n\t\t// \"padding\" or \"margin\"\n\t\t} else {\n\n\t\t\t// For \"content\", subtract padding\n\t\t\tif ( box === \"content\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\t\t\t}\n\n\t\t\t// For \"content\" or \"padding\", subtract border\n\t\t\tif ( box !== \"margin\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Account for positive content-box scroll gutter when requested by providing computedVal\n\tif ( !isBorderBox && computedVal >= 0 ) {\n\n\t\t// offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border\n\t\t// Assuming integer scroll gutter, subtract the rest and round down\n\t\tdelta += Math.max( 0, Math.ceil(\n\t\t\telem[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -\n\t\t\tcomputedVal -\n\t\t\tdelta -\n\t\t\textra -\n\t\t\t0.5\n\n\t\t// If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter\n\t\t// Use an explicit zero to avoid NaN (gh-3964)\n\t\t) ) || 0;\n\t}\n\n\treturn delta + marginDelta;\n}\n\nfunction getWidthOrHeight( elem, dimension, extra ) {\n\n\t// Start with computed style\n\tvar styles = getStyles( elem ),\n\n\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322).\n\t\t// Fake content-box until we know it's needed to know the true value.\n\t\tboxSizingNeeded = !support.boxSizingReliable() || extra,\n\t\tisBorderBox = boxSizingNeeded &&\n\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\tvalueIsBorderBox = isBorderBox,\n\n\t\tval = curCSS( elem, dimension, styles ),\n\t\toffsetProp = \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 );\n\n\t// Support: Firefox <=54\n\t// Return a confounding non-pixel value or feign ignorance, as appropriate.\n\tif ( rnumnonpx.test( val ) ) {\n\t\tif ( !extra ) {\n\t\t\treturn val;\n\t\t}\n\t\tval = \"auto\";\n\t}\n\n\n\t// Support: IE 9 - 11 only\n\t// Use offsetWidth/offsetHeight for when box sizing is unreliable.\n\t// In those cases, the computed value can be trusted to be border-box.\n\tif ( ( !support.boxSizingReliable() && isBorderBox ||\n\n\t\t// Support: IE 10 - 11+, Edge 15 - 18+\n\t\t// IE/Edge misreport `getComputedStyle` of table rows with width/height\n\t\t// set in CSS while `offset*` properties report correct values.\n\t\t// Interestingly, in some cases IE 9 doesn't suffer from this issue.\n\t\t!support.reliableTrDimensions() && nodeName( elem, \"tr\" ) ||\n\n\t\t// Fall back to offsetWidth/offsetHeight when value is \"auto\"\n\t\t// This happens for inline elements with no explicit setting (gh-3571)\n\t\tval === \"auto\" ||\n\n\t\t// Support: Android <=4.1 - 4.3 only\n\t\t// Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602)\n\t\t!parseFloat( val ) && jQuery.css( elem, \"display\", false, styles ) === \"inline\" ) &&\n\n\t\t// Make sure the element is visible & connected\n\t\telem.getClientRects().length ) {\n\n\t\tisBorderBox = jQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\";\n\n\t\t// Where available, offsetWidth/offsetHeight approximate border box dimensions.\n\t\t// Where not available (e.g., SVG), assume unreliable box-sizing and interpret the\n\t\t// retrieved value as a content box dimension.\n\t\tvalueIsBorderBox = offsetProp in elem;\n\t\tif ( valueIsBorderBox ) {\n\t\t\tval = elem[ offsetProp ];\n\t\t}\n\t}\n\n\t// Normalize \"\" and auto\n\tval = parseFloat( val ) || 0;\n\n\t// Adjust for the element's box model\n\treturn ( val +\n\t\tboxModelAdjustment(\n\t\t\telem,\n\t\t\tdimension,\n\t\t\textra || ( isBorderBox ? \"border\" : \"content\" ),\n\t\t\tvalueIsBorderBox,\n\t\t\tstyles,\n\n\t\t\t// Provide the current computed size to request scroll gutter calculation (gh-3589)\n\t\t\tval\n\t\t)\n\t) + \"px\";\n}\n\njQuery.extend( {\n\n\t// Add in style property hooks for overriding the default\n\t// behavior of getting and setting a style property\n\tcssHooks: {\n\t\topacity: {\n\t\t\tget: function( elem, computed ) {\n\t\t\t\tif ( computed ) {\n\n\t\t\t\t\t// We should always get a number back from opacity\n\t\t\t\t\tvar ret = curCSS( elem, \"opacity\" );\n\t\t\t\t\treturn ret === \"\" ? \"1\" : ret;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t// Don't automatically add \"px\" to these possibly-unitless properties\n\tcssNumber: {\n\t\tanimationIterationCount: true,\n\t\taspectRatio: true,\n\t\tborderImageSlice: true,\n\t\tcolumnCount: true,\n\t\tflexGrow: true,\n\t\tflexShrink: true,\n\t\tfontWeight: true,\n\t\tgridArea: true,\n\t\tgridColumn: true,\n\t\tgridColumnEnd: true,\n\t\tgridColumnStart: true,\n\t\tgridRow: true,\n\t\tgridRowEnd: true,\n\t\tgridRowStart: true,\n\t\tlineHeight: true,\n\t\topacity: true,\n\t\torder: true,\n\t\torphans: true,\n\t\tscale: true,\n\t\twidows: true,\n\t\tzIndex: true,\n\t\tzoom: true,\n\n\t\t// SVG-related\n\t\tfillOpacity: true,\n\t\tfloodOpacity: true,\n\t\tstopOpacity: true,\n\t\tstrokeMiterlimit: true,\n\t\tstrokeOpacity: true\n\t},\n\n\t// Add in properties whose names you wish to fix before\n\t// setting or getting the value\n\tcssProps: {},\n\n\t// Get and set the style property on a DOM Node\n\tstyle: function( elem, name, value, extra ) {\n\n\t\t// Don't set styles on text and comment nodes\n\t\tif ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Make sure that we're working with the right name\n\t\tvar ret, type, hooks,\n\t\t\torigName = camelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name ),\n\t\t\tstyle = elem.style;\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to query the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Gets hook for the prefixed version, then unprefixed version\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// Check if we're setting a value\n\t\tif ( value !== undefined ) {\n\t\t\ttype = typeof value;\n\n\t\t\t// Convert \"+=\" or \"-=\" to relative numbers (trac-7345)\n\t\t\tif ( type === \"string\" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {\n\t\t\t\tvalue = adjustCSS( elem, name, ret );\n\n\t\t\t\t// Fixes bug trac-9237\n\t\t\t\ttype = \"number\";\n\t\t\t}\n\n\t\t\t// Make sure that null and NaN values aren't set (trac-7116)\n\t\t\tif ( value == null || value !== value ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If a number was passed in, add the unit (except for certain CSS properties)\n\t\t\t// The isCustomProp check can be removed in jQuery 4.0 when we only auto-append\n\t\t\t// \"px\" to a few hardcoded values.\n\t\t\tif ( type === \"number\" && !isCustomProp ) {\n\t\t\t\tvalue += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? \"\" : \"px\" );\n\t\t\t}\n\n\t\t\t// background-* props affect original clone's values\n\t\t\tif ( !support.clearCloneStyle && value === \"\" && name.indexOf( \"background\" ) === 0 ) {\n\t\t\t\tstyle[ name ] = \"inherit\";\n\t\t\t}\n\n\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\n\t\t\tif ( !hooks || !( \"set\" in hooks ) ||\n\t\t\t\t( value = hooks.set( elem, value, extra ) ) !== undefined ) {\n\n\t\t\t\tif ( isCustomProp ) {\n\t\t\t\t\tstyle.setProperty( name, value );\n\t\t\t\t} else {\n\t\t\t\t\tstyle[ name ] = value;\n\t\t\t\t}\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\tif ( hooks && \"get\" in hooks &&\n\t\t\t\t( ret = hooks.get( elem, false, extra ) ) !== undefined ) {\n\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\t// Otherwise just get the value from the style object\n\t\t\treturn style[ name ];\n\t\t}\n\t},\n\n\tcss: function( elem, name, extra, styles ) {\n\t\tvar val, num, hooks,\n\t\t\torigName = camelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name );\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to modify the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Try prefixed name followed by the unprefixed name\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// If a hook was provided get the computed value from there\n\t\tif ( hooks && \"get\" in hooks ) {\n\t\t\tval = hooks.get( elem, true, extra );\n\t\t}\n\n\t\t// Otherwise, if a way to get the computed value exists, use that\n\t\tif ( val === undefined ) {\n\t\t\tval = curCSS( elem, name, styles );\n\t\t}\n\n\t\t// Convert \"normal\" to computed value\n\t\tif ( val === \"normal\" && name in cssNormalTransform ) {\n\t\t\tval = cssNormalTransform[ name ];\n\t\t}\n\n\t\t// Make numeric if forced or a qualifier was provided and val looks numeric\n\t\tif ( extra === \"\" || extra ) {\n\t\t\tnum = parseFloat( val );\n\t\t\treturn extra === true || isFinite( num ) ? num || 0 : val;\n\t\t}\n\n\t\treturn val;\n\t}\n} );\n\njQuery.each( [ \"height\", \"width\" ], function( _i, dimension ) {\n\tjQuery.cssHooks[ dimension ] = {\n\t\tget: function( elem, computed, extra ) {\n\t\t\tif ( computed ) {\n\n\t\t\t\t// Certain elements can have dimension info if we invisibly show them\n\t\t\t\t// but it must have a current display style that would benefit\n\t\t\t\treturn rdisplayswap.test( jQuery.css( elem, \"display\" ) ) &&\n\n\t\t\t\t\t// Support: Safari 8+\n\t\t\t\t\t// Table columns in Safari have non-zero offsetWidth & zero\n\t\t\t\t\t// getBoundingClientRect().width unless display is changed.\n\t\t\t\t\t// Support: IE <=11 only\n\t\t\t\t\t// Running getBoundingClientRect on a disconnected node\n\t\t\t\t\t// in IE throws an error.\n\t\t\t\t\t( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ?\n\t\t\t\t\tswap( elem, cssShow, function() {\n\t\t\t\t\t\treturn getWidthOrHeight( elem, dimension, extra );\n\t\t\t\t\t} ) :\n\t\t\t\t\tgetWidthOrHeight( elem, dimension, extra );\n\t\t\t}\n\t\t},\n\n\t\tset: function( elem, value, extra ) {\n\t\t\tvar matches,\n\t\t\t\tstyles = getStyles( elem ),\n\n\t\t\t\t// Only read styles.position if the test has a chance to fail\n\t\t\t\t// to avoid forcing a reflow.\n\t\t\t\tscrollboxSizeBuggy = !support.scrollboxSize() &&\n\t\t\t\t\tstyles.position === \"absolute\",\n\n\t\t\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991)\n\t\t\t\tboxSizingNeeded = scrollboxSizeBuggy || extra,\n\t\t\t\tisBorderBox = boxSizingNeeded &&\n\t\t\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\t\t\tsubtract = extra ?\n\t\t\t\t\tboxModelAdjustment(\n\t\t\t\t\t\telem,\n\t\t\t\t\t\tdimension,\n\t\t\t\t\t\textra,\n\t\t\t\t\t\tisBorderBox,\n\t\t\t\t\t\tstyles\n\t\t\t\t\t) :\n\t\t\t\t\t0;\n\n\t\t\t// Account for unreliable border-box dimensions by comparing offset* to computed and\n\t\t\t// faking a content-box to get border and padding (gh-3699)\n\t\t\tif ( isBorderBox && scrollboxSizeBuggy ) {\n\t\t\t\tsubtract -= Math.ceil(\n\t\t\t\t\telem[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -\n\t\t\t\t\tparseFloat( styles[ dimension ] ) -\n\t\t\t\t\tboxModelAdjustment( elem, dimension, \"border\", false, styles ) -\n\t\t\t\t\t0.5\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// Convert to pixels if value adjustment is needed\n\t\t\tif ( subtract && ( matches = rcssNum.exec( value ) ) &&\n\t\t\t\t( matches[ 3 ] || \"px\" ) !== \"px\" ) {\n\n\t\t\t\telem.style[ dimension ] = value;\n\t\t\t\tvalue = jQuery.css( elem, dimension );\n\t\t\t}\n\n\t\t\treturn setPositiveNumber( elem, value, subtract );\n\t\t}\n\t};\n} );\n\njQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,\n\tfunction( elem, computed ) {\n\t\tif ( computed ) {\n\t\t\treturn ( parseFloat( curCSS( elem, \"marginLeft\" ) ) ||\n\t\t\t\telem.getBoundingClientRect().left -\n\t\t\t\t\tswap( elem, { marginLeft: 0 }, function() {\n\t\t\t\t\t\treturn elem.getBoundingClientRect().left;\n\t\t\t\t\t} )\n\t\t\t) + \"px\";\n\t\t}\n\t}\n);\n\n// These hooks are used by animate to expand properties\njQuery.each( {\n\tmargin: \"\",\n\tpadding: \"\",\n\tborder: \"Width\"\n}, function( prefix, suffix ) {\n\tjQuery.cssHooks[ prefix + suffix ] = {\n\t\texpand: function( value ) {\n\t\t\tvar i = 0,\n\t\t\t\texpanded = {},\n\n\t\t\t\t// Assumes a single number if not a string\n\t\t\t\tparts = typeof value === \"string\" ? value.split( \" \" ) : [ value ];\n\n\t\t\tfor ( ; i < 4; i++ ) {\n\t\t\t\texpanded[ prefix + cssExpand[ i ] + suffix ] =\n\t\t\t\t\tparts[ i ] || parts[ i - 2 ] || parts[ 0 ];\n\t\t\t}\n\n\t\t\treturn expanded;\n\t\t}\n\t};\n\n\tif ( prefix !== \"margin\" ) {\n\t\tjQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;\n\t}\n} );\n\njQuery.fn.extend( {\n\tcss: function( name, value ) {\n\t\treturn access( this, function( elem, name, value ) {\n\t\t\tvar styles, len,\n\t\t\t\tmap = {},\n\t\t\t\ti = 0;\n\n\t\t\tif ( Array.isArray( name ) ) {\n\t\t\t\tstyles = getStyles( elem );\n\t\t\t\tlen = name.length;\n\n\t\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\t\tmap[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );\n\t\t\t\t}\n\n\t\t\t\treturn map;\n\t\t\t}\n\n\t\t\treturn value !== undefined ?\n\t\t\t\tjQuery.style( elem, name, value ) :\n\t\t\t\tjQuery.css( elem, name );\n\t\t}, name, value, arguments.length > 1 );\n\t}\n} );\n\n\nfunction Tween( elem, options, prop, end, easing ) {\n\treturn new Tween.prototype.init( elem, options, prop, end, easing );\n}\njQuery.Tween = Tween;\n\nTween.prototype = {\n\tconstructor: Tween,\n\tinit: function( elem, options, prop, end, easing, unit ) {\n\t\tthis.elem = elem;\n\t\tthis.prop = prop;\n\t\tthis.easing = easing || jQuery.easing._default;\n\t\tthis.options = options;\n\t\tthis.start = this.now = this.cur();\n\t\tthis.end = end;\n\t\tthis.unit = unit || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" );\n\t},\n\tcur: function() {\n\t\tvar hooks = Tween.propHooks[ this.prop ];\n\n\t\treturn hooks && hooks.get ?\n\t\t\thooks.get( this ) :\n\t\t\tTween.propHooks._default.get( this );\n\t},\n\trun: function( percent ) {\n\t\tvar eased,\n\t\t\thooks = Tween.propHooks[ this.prop ];\n\n\t\tif ( this.options.duration ) {\n\t\t\tthis.pos = eased = jQuery.easing[ this.easing ](\n\t\t\t\tpercent, this.options.duration * percent, 0, 1, this.options.duration\n\t\t\t);\n\t\t} else {\n\t\t\tthis.pos = eased = percent;\n\t\t}\n\t\tthis.now = ( this.end - this.start ) * eased + this.start;\n\n\t\tif ( this.options.step ) {\n\t\t\tthis.options.step.call( this.elem, this.now, this );\n\t\t}\n\n\t\tif ( hooks && hooks.set ) {\n\t\t\thooks.set( this );\n\t\t} else {\n\t\t\tTween.propHooks._default.set( this );\n\t\t}\n\t\treturn this;\n\t}\n};\n\nTween.prototype.init.prototype = Tween.prototype;\n\nTween.propHooks = {\n\t_default: {\n\t\tget: function( tween ) {\n\t\t\tvar result;\n\n\t\t\t// Use a property on the element directly when it is not a DOM element,\n\t\t\t// or when there is no matching style property that exists.\n\t\t\tif ( tween.elem.nodeType !== 1 ||\n\t\t\t\ttween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {\n\t\t\t\treturn tween.elem[ tween.prop ];\n\t\t\t}\n\n\t\t\t// Passing an empty string as a 3rd parameter to .css will automatically\n\t\t\t// attempt a parseFloat and fallback to a string if the parse fails.\n\t\t\t// Simple values such as \"10px\" are parsed to Float;\n\t\t\t// complex values such as \"rotate(1rad)\" are returned as-is.\n\t\t\tresult = jQuery.css( tween.elem, tween.prop, \"\" );\n\n\t\t\t// Empty strings, null, undefined and \"auto\" are converted to 0.\n\t\t\treturn !result || result === \"auto\" ? 0 : result;\n\t\t},\n\t\tset: function( tween ) {\n\n\t\t\t// Use step hook for back compat.\n\t\t\t// Use cssHook if its there.\n\t\t\t// Use .style if available and use plain properties where available.\n\t\t\tif ( jQuery.fx.step[ tween.prop ] ) {\n\t\t\t\tjQuery.fx.step[ tween.prop ]( tween );\n\t\t\t} else if ( tween.elem.nodeType === 1 && (\n\t\t\t\tjQuery.cssHooks[ tween.prop ] ||\n\t\t\t\t\ttween.elem.style[ finalPropName( tween.prop ) ] != null ) ) {\n\t\t\t\tjQuery.style( tween.elem, tween.prop, tween.now + tween.unit );\n\t\t\t} else {\n\t\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t\t}\n\t\t}\n\t}\n};\n\n// Support: IE <=9 only\n// Panic based approach to setting things on disconnected nodes\nTween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {\n\tset: function( tween ) {\n\t\tif ( tween.elem.nodeType && tween.elem.parentNode ) {\n\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t}\n\t}\n};\n\njQuery.easing = {\n\tlinear: function( p ) {\n\t\treturn p;\n\t},\n\tswing: function( p ) {\n\t\treturn 0.5 - Math.cos( p * Math.PI ) / 2;\n\t},\n\t_default: \"swing\"\n};\n\njQuery.fx = Tween.prototype.init;\n\n// Back compat <1.8 extension point\njQuery.fx.step = {};\n\n\n\n\nvar\n\tfxNow, inProgress,\n\trfxtypes = /^(?:toggle|show|hide)$/,\n\trrun = /queueHooks$/;\n\nfunction schedule() {\n\tif ( inProgress ) {\n\t\tif ( document.hidden === false && window.requestAnimationFrame ) {\n\t\t\twindow.requestAnimationFrame( schedule );\n\t\t} else {\n\t\t\twindow.setTimeout( schedule, jQuery.fx.interval );\n\t\t}\n\n\t\tjQuery.fx.tick();\n\t}\n}\n\n// Animations created synchronously will run synchronously\nfunction createFxNow() {\n\twindow.setTimeout( function() {\n\t\tfxNow = undefined;\n\t} );\n\treturn ( fxNow = Date.now() );\n}\n\n// Generate parameters to create a standard animation\nfunction genFx( type, includeWidth ) {\n\tvar which,\n\t\ti = 0,\n\t\tattrs = { height: type };\n\n\t// If we include width, step value is 1 to do all cssExpand values,\n\t// otherwise step value is 2 to skip over Left and Right\n\tincludeWidth = includeWidth ? 1 : 0;\n\tfor ( ; i < 4; i += 2 - includeWidth ) {\n\t\twhich = cssExpand[ i ];\n\t\tattrs[ \"margin\" + which ] = attrs[ \"padding\" + which ] = type;\n\t}\n\n\tif ( includeWidth ) {\n\t\tattrs.opacity = attrs.width = type;\n\t}\n\n\treturn attrs;\n}\n\nfunction createTween( value, prop, animation ) {\n\tvar tween,\n\t\tcollection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ \"*\" ] ),\n\t\tindex = 0,\n\t\tlength = collection.length;\n\tfor ( ; index < length; index++ ) {\n\t\tif ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {\n\n\t\t\t// We're done with this property\n\t\t\treturn tween;\n\t\t}\n\t}\n}\n\nfunction defaultPrefilter( elem, props, opts ) {\n\tvar prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,\n\t\tisBox = \"width\" in props || \"height\" in props,\n\t\tanim = this,\n\t\torig = {},\n\t\tstyle = elem.style,\n\t\thidden = elem.nodeType && isHiddenWithinTree( elem ),\n\t\tdataShow = dataPriv.get( elem, \"fxshow\" );\n\n\t// Queue-skipping animations hijack the fx hooks\n\tif ( !opts.queue ) {\n\t\thooks = jQuery._queueHooks( elem, \"fx\" );\n\t\tif ( hooks.unqueued == null ) {\n\t\t\thooks.unqueued = 0;\n\t\t\toldfire = hooks.empty.fire;\n\t\t\thooks.empty.fire = function() {\n\t\t\t\tif ( !hooks.unqueued ) {\n\t\t\t\t\toldfire();\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\thooks.unqueued++;\n\n\t\tanim.always( function() {\n\n\t\t\t// Ensure the complete handler is called before this completes\n\t\t\tanim.always( function() {\n\t\t\t\thooks.unqueued--;\n\t\t\t\tif ( !jQuery.queue( elem, \"fx\" ).length ) {\n\t\t\t\t\thooks.empty.fire();\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\t}\n\n\t// Detect show/hide animations\n\tfor ( prop in props ) {\n\t\tvalue = props[ prop ];\n\t\tif ( rfxtypes.test( value ) ) {\n\t\t\tdelete props[ prop ];\n\t\t\ttoggle = toggle || value === \"toggle\";\n\t\t\tif ( value === ( hidden ? \"hide\" : \"show\" ) ) {\n\n\t\t\t\t// Pretend to be hidden if this is a \"show\" and\n\t\t\t\t// there is still data from a stopped show/hide\n\t\t\t\tif ( value === \"show\" && dataShow && dataShow[ prop ] !== undefined ) {\n\t\t\t\t\thidden = true;\n\n\t\t\t\t// Ignore all other no-op show/hide data\n\t\t\t\t} else {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\torig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );\n\t\t}\n\t}\n\n\t// Bail out if this is a no-op like .hide().hide()\n\tpropTween = !jQuery.isEmptyObject( props );\n\tif ( !propTween && jQuery.isEmptyObject( orig ) ) {\n\t\treturn;\n\t}\n\n\t// Restrict \"overflow\" and \"display\" styles during box animations\n\tif ( isBox && elem.nodeType === 1 ) {\n\n\t\t// Support: IE <=9 - 11, Edge 12 - 15\n\t\t// Record all 3 overflow attributes because IE does not infer the shorthand\n\t\t// from identically-valued overflowX and overflowY and Edge just mirrors\n\t\t// the overflowX value there.\n\t\topts.overflow = [ style.overflow, style.overflowX, style.overflowY ];\n\n\t\t// Identify a display type, preferring old show/hide data over the CSS cascade\n\t\trestoreDisplay = dataShow && dataShow.display;\n\t\tif ( restoreDisplay == null ) {\n\t\t\trestoreDisplay = dataPriv.get( elem, \"display\" );\n\t\t}\n\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\tif ( display === \"none\" ) {\n\t\t\tif ( restoreDisplay ) {\n\t\t\t\tdisplay = restoreDisplay;\n\t\t\t} else {\n\n\t\t\t\t// Get nonempty value(s) by temporarily forcing visibility\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t\trestoreDisplay = elem.style.display || restoreDisplay;\n\t\t\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\t\t\tshowHide( [ elem ] );\n\t\t\t}\n\t\t}\n\n\t\t// Animate inline elements as inline-block\n\t\tif ( display === \"inline\" || display === \"inline-block\" && restoreDisplay != null ) {\n\t\t\tif ( jQuery.css( elem, \"float\" ) === \"none\" ) {\n\n\t\t\t\t// Restore the original display value at the end of pure show/hide animations\n\t\t\t\tif ( !propTween ) {\n\t\t\t\t\tanim.done( function() {\n\t\t\t\t\t\tstyle.display = restoreDisplay;\n\t\t\t\t\t} );\n\t\t\t\t\tif ( restoreDisplay == null ) {\n\t\t\t\t\t\tdisplay = style.display;\n\t\t\t\t\t\trestoreDisplay = display === \"none\" ? \"\" : display;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tstyle.display = \"inline-block\";\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( opts.overflow ) {\n\t\tstyle.overflow = \"hidden\";\n\t\tanim.always( function() {\n\t\t\tstyle.overflow = opts.overflow[ 0 ];\n\t\t\tstyle.overflowX = opts.overflow[ 1 ];\n\t\t\tstyle.overflowY = opts.overflow[ 2 ];\n\t\t} );\n\t}\n\n\t// Implement show/hide animations\n\tpropTween = false;\n\tfor ( prop in orig ) {\n\n\t\t// General show/hide setup for this element animation\n\t\tif ( !propTween ) {\n\t\t\tif ( dataShow ) {\n\t\t\t\tif ( \"hidden\" in dataShow ) {\n\t\t\t\t\thidden = dataShow.hidden;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdataShow = dataPriv.access( elem, \"fxshow\", { display: restoreDisplay } );\n\t\t\t}\n\n\t\t\t// Store hidden/visible for toggle so `.stop().toggle()` \"reverses\"\n\t\t\tif ( toggle ) {\n\t\t\t\tdataShow.hidden = !hidden;\n\t\t\t}\n\n\t\t\t// Show elements before animating them\n\t\t\tif ( hidden ) {\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t}\n\n\t\t\t/* eslint-disable no-loop-func */\n\n\t\t\tanim.done( function() {\n\n\t\t\t\t/* eslint-enable no-loop-func */\n\n\t\t\t\t// The final step of a \"hide\" animation is actually hiding the element\n\t\t\t\tif ( !hidden ) {\n\t\t\t\t\tshowHide( [ elem ] );\n\t\t\t\t}\n\t\t\t\tdataPriv.remove( elem, \"fxshow\" );\n\t\t\t\tfor ( prop in orig ) {\n\t\t\t\t\tjQuery.style( elem, prop, orig[ prop ] );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\t// Per-property setup\n\t\tpropTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );\n\t\tif ( !( prop in dataShow ) ) {\n\t\t\tdataShow[ prop ] = propTween.start;\n\t\t\tif ( hidden ) {\n\t\t\t\tpropTween.end = propTween.start;\n\t\t\t\tpropTween.start = 0;\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction propFilter( props, specialEasing ) {\n\tvar index, name, easing, value, hooks;\n\n\t// camelCase, specialEasing and expand cssHook pass\n\tfor ( index in props ) {\n\t\tname = camelCase( index );\n\t\teasing = specialEasing[ name ];\n\t\tvalue = props[ index ];\n\t\tif ( Array.isArray( value ) ) {\n\t\t\teasing = value[ 1 ];\n\t\t\tvalue = props[ index ] = value[ 0 ];\n\t\t}\n\n\t\tif ( index !== name ) {\n\t\t\tprops[ name ] = value;\n\t\t\tdelete props[ index ];\n\t\t}\n\n\t\thooks = jQuery.cssHooks[ name ];\n\t\tif ( hooks && \"expand\" in hooks ) {\n\t\t\tvalue = hooks.expand( value );\n\t\t\tdelete props[ name ];\n\n\t\t\t// Not quite $.extend, this won't overwrite existing keys.\n\t\t\t// Reusing 'index' because we have the correct \"name\"\n\t\t\tfor ( index in value ) {\n\t\t\t\tif ( !( index in props ) ) {\n\t\t\t\t\tprops[ index ] = value[ index ];\n\t\t\t\t\tspecialEasing[ index ] = easing;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tspecialEasing[ name ] = easing;\n\t\t}\n\t}\n}\n\nfunction Animation( elem, properties, options ) {\n\tvar result,\n\t\tstopped,\n\t\tindex = 0,\n\t\tlength = Animation.prefilters.length,\n\t\tdeferred = jQuery.Deferred().always( function() {\n\n\t\t\t// Don't match elem in the :animated selector\n\t\t\tdelete tick.elem;\n\t\t} ),\n\t\ttick = function() {\n\t\t\tif ( stopped ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar currentTime = fxNow || createFxNow(),\n\t\t\t\tremaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),\n\n\t\t\t\t// Support: Android 2.3 only\n\t\t\t\t// Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (trac-12497)\n\t\t\t\ttemp = remaining / animation.duration || 0,\n\t\t\t\tpercent = 1 - temp,\n\t\t\t\tindex = 0,\n\t\t\t\tlength = animation.tweens.length;\n\n\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\tanimation.tweens[ index ].run( percent );\n\t\t\t}\n\n\t\t\tdeferred.notifyWith( elem, [ animation, percent, remaining ] );\n\n\t\t\t// If there's more to do, yield\n\t\t\tif ( percent < 1 && length ) {\n\t\t\t\treturn remaining;\n\t\t\t}\n\n\t\t\t// If this was an empty animation, synthesize a final progress notification\n\t\t\tif ( !length ) {\n\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t}\n\n\t\t\t// Resolve the animation and report its conclusion\n\t\t\tdeferred.resolveWith( elem, [ animation ] );\n\t\t\treturn false;\n\t\t},\n\t\tanimation = deferred.promise( {\n\t\t\telem: elem,\n\t\t\tprops: jQuery.extend( {}, properties ),\n\t\t\topts: jQuery.extend( true, {\n\t\t\t\tspecialEasing: {},\n\t\t\t\teasing: jQuery.easing._default\n\t\t\t}, options ),\n\t\t\toriginalProperties: properties,\n\t\t\toriginalOptions: options,\n\t\t\tstartTime: fxNow || createFxNow(),\n\t\t\tduration: options.duration,\n\t\t\ttweens: [],\n\t\t\tcreateTween: function( prop, end ) {\n\t\t\t\tvar tween = jQuery.Tween( elem, animation.opts, prop, end,\n\t\t\t\t\tanimation.opts.specialEasing[ prop ] || animation.opts.easing );\n\t\t\t\tanimation.tweens.push( tween );\n\t\t\t\treturn tween;\n\t\t\t},\n\t\t\tstop: function( gotoEnd ) {\n\t\t\t\tvar index = 0,\n\n\t\t\t\t\t// If we are going to the end, we want to run all the tweens\n\t\t\t\t\t// otherwise we skip this part\n\t\t\t\t\tlength = gotoEnd ? animation.tweens.length : 0;\n\t\t\t\tif ( stopped ) {\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t\tstopped = true;\n\t\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\t\tanimation.tweens[ index ].run( 1 );\n\t\t\t\t}\n\n\t\t\t\t// Resolve when we played the last frame; otherwise, reject\n\t\t\t\tif ( gotoEnd ) {\n\t\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t\t\tdeferred.resolveWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t} else {\n\t\t\t\t\tdeferred.rejectWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} ),\n\t\tprops = animation.props;\n\n\tpropFilter( props, animation.opts.specialEasing );\n\n\tfor ( ; index < length; index++ ) {\n\t\tresult = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );\n\t\tif ( result ) {\n\t\t\tif ( isFunction( result.stop ) ) {\n\t\t\t\tjQuery._queueHooks( animation.elem, animation.opts.queue ).stop =\n\t\t\t\t\tresult.stop.bind( result );\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t}\n\n\tjQuery.map( props, createTween, animation );\n\n\tif ( isFunction( animation.opts.start ) ) {\n\t\tanimation.opts.start.call( elem, animation );\n\t}\n\n\t// Attach callbacks from options\n\tanimation\n\t\t.progress( animation.opts.progress )\n\t\t.done( animation.opts.done, animation.opts.complete )\n\t\t.fail( animation.opts.fail )\n\t\t.always( animation.opts.always );\n\n\tjQuery.fx.timer(\n\t\tjQuery.extend( tick, {\n\t\t\telem: elem,\n\t\t\tanim: animation,\n\t\t\tqueue: animation.opts.queue\n\t\t} )\n\t);\n\n\treturn animation;\n}\n\njQuery.Animation = jQuery.extend( Animation, {\n\n\ttweeners: {\n\t\t\"*\": [ function( prop, value ) {\n\t\t\tvar tween = this.createTween( prop, value );\n\t\t\tadjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );\n\t\t\treturn tween;\n\t\t} ]\n\t},\n\n\ttweener: function( props, callback ) {\n\t\tif ( isFunction( props ) ) {\n\t\t\tcallback = props;\n\t\t\tprops = [ \"*\" ];\n\t\t} else {\n\t\t\tprops = props.match( rnothtmlwhite );\n\t\t}\n\n\t\tvar prop,\n\t\t\tindex = 0,\n\t\t\tlength = props.length;\n\n\t\tfor ( ; index < length; index++ ) {\n\t\t\tprop = props[ index ];\n\t\t\tAnimation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];\n\t\t\tAnimation.tweeners[ prop ].unshift( callback );\n\t\t}\n\t},\n\n\tprefilters: [ defaultPrefilter ],\n\n\tprefilter: function( callback, prepend ) {\n\t\tif ( prepend ) {\n\t\t\tAnimation.prefilters.unshift( callback );\n\t\t} else {\n\t\t\tAnimation.prefilters.push( callback );\n\t\t}\n\t}\n} );\n\njQuery.speed = function( speed, easing, fn ) {\n\tvar opt = speed && typeof speed === \"object\" ? jQuery.extend( {}, speed ) : {\n\t\tcomplete: fn || !fn && easing ||\n\t\t\tisFunction( speed ) && speed,\n\t\tduration: speed,\n\t\teasing: fn && easing || easing && !isFunction( easing ) && easing\n\t};\n\n\t// Go to the end state if fx are off\n\tif ( jQuery.fx.off ) {\n\t\topt.duration = 0;\n\n\t} else {\n\t\tif ( typeof opt.duration !== \"number\" ) {\n\t\t\tif ( opt.duration in jQuery.fx.speeds ) {\n\t\t\t\topt.duration = jQuery.fx.speeds[ opt.duration ];\n\n\t\t\t} else {\n\t\t\t\topt.duration = jQuery.fx.speeds._default;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Normalize opt.queue - true/undefined/null -> \"fx\"\n\tif ( opt.queue == null || opt.queue === true ) {\n\t\topt.queue = \"fx\";\n\t}\n\n\t// Queueing\n\topt.old = opt.complete;\n\n\topt.complete = function() {\n\t\tif ( isFunction( opt.old ) ) {\n\t\t\topt.old.call( this );\n\t\t}\n\n\t\tif ( opt.queue ) {\n\t\t\tjQuery.dequeue( this, opt.queue );\n\t\t}\n\t};\n\n\treturn opt;\n};\n\njQuery.fn.extend( {\n\tfadeTo: function( speed, to, easing, callback ) {\n\n\t\t// Show any hidden elements after setting opacity to 0\n\t\treturn this.filter( isHiddenWithinTree ).css( \"opacity\", 0 ).show()\n\n\t\t\t// Animate to the value specified\n\t\t\t.end().animate( { opacity: to }, speed, easing, callback );\n\t},\n\tanimate: function( prop, speed, easing, callback ) {\n\t\tvar empty = jQuery.isEmptyObject( prop ),\n\t\t\toptall = jQuery.speed( speed, easing, callback ),\n\t\t\tdoAnimation = function() {\n\n\t\t\t\t// Operate on a copy of prop so per-property easing won't be lost\n\t\t\t\tvar anim = Animation( this, jQuery.extend( {}, prop ), optall );\n\n\t\t\t\t// Empty animations, or finishing resolves immediately\n\t\t\t\tif ( empty || dataPriv.get( this, \"finish\" ) ) {\n\t\t\t\t\tanim.stop( true );\n\t\t\t\t}\n\t\t\t};\n\n\t\tdoAnimation.finish = doAnimation;\n\n\t\treturn empty || optall.queue === false ?\n\t\t\tthis.each( doAnimation ) :\n\t\t\tthis.queue( optall.queue, doAnimation );\n\t},\n\tstop: function( type, clearQueue, gotoEnd ) {\n\t\tvar stopQueue = function( hooks ) {\n\t\t\tvar stop = hooks.stop;\n\t\t\tdelete hooks.stop;\n\t\t\tstop( gotoEnd );\n\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tgotoEnd = clearQueue;\n\t\t\tclearQueue = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\tif ( clearQueue ) {\n\t\t\tthis.queue( type || \"fx\", [] );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar dequeue = true,\n\t\t\t\tindex = type != null && type + \"queueHooks\",\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tdata = dataPriv.get( this );\n\n\t\t\tif ( index ) {\n\t\t\t\tif ( data[ index ] && data[ index ].stop ) {\n\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( index in data ) {\n\t\t\t\t\tif ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {\n\t\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this &&\n\t\t\t\t\t( type == null || timers[ index ].queue === type ) ) {\n\n\t\t\t\t\ttimers[ index ].anim.stop( gotoEnd );\n\t\t\t\t\tdequeue = false;\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Start the next in the queue if the last step wasn't forced.\n\t\t\t// Timers currently will call their complete callbacks, which\n\t\t\t// will dequeue but only if they were gotoEnd.\n\t\t\tif ( dequeue || !gotoEnd ) {\n\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t}\n\t\t} );\n\t},\n\tfinish: function( type ) {\n\t\tif ( type !== false ) {\n\t\t\ttype = type || \"fx\";\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tvar index,\n\t\t\t\tdata = dataPriv.get( this ),\n\t\t\t\tqueue = data[ type + \"queue\" ],\n\t\t\t\thooks = data[ type + \"queueHooks\" ],\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tlength = queue ? queue.length : 0;\n\n\t\t\t// Enable finishing flag on private data\n\t\t\tdata.finish = true;\n\n\t\t\t// Empty the queue first\n\t\t\tjQuery.queue( this, type, [] );\n\n\t\t\tif ( hooks && hooks.stop ) {\n\t\t\t\thooks.stop.call( this, true );\n\t\t\t}\n\n\t\t\t// Look for any active animations, and finish them\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this && timers[ index ].queue === type ) {\n\t\t\t\t\ttimers[ index ].anim.stop( true );\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Look for any animations in the old queue and finish them\n\t\t\tfor ( index = 0; index < length; index++ ) {\n\t\t\t\tif ( queue[ index ] && queue[ index ].finish ) {\n\t\t\t\t\tqueue[ index ].finish.call( this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Turn off finishing flag\n\t\t\tdelete data.finish;\n\t\t} );\n\t}\n} );\n\njQuery.each( [ \"toggle\", \"show\", \"hide\" ], function( _i, name ) {\n\tvar cssFn = jQuery.fn[ name ];\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn speed == null || typeof speed === \"boolean\" ?\n\t\t\tcssFn.apply( this, arguments ) :\n\t\t\tthis.animate( genFx( name, true ), speed, easing, callback );\n\t};\n} );\n\n// Generate shortcuts for custom animations\njQuery.each( {\n\tslideDown: genFx( \"show\" ),\n\tslideUp: genFx( \"hide\" ),\n\tslideToggle: genFx( \"toggle\" ),\n\tfadeIn: { opacity: \"show\" },\n\tfadeOut: { opacity: \"hide\" },\n\tfadeToggle: { opacity: \"toggle\" }\n}, function( name, props ) {\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn this.animate( props, speed, easing, callback );\n\t};\n} );\n\njQuery.timers = [];\njQuery.fx.tick = function() {\n\tvar timer,\n\t\ti = 0,\n\t\ttimers = jQuery.timers;\n\n\tfxNow = Date.now();\n\n\tfor ( ; i < timers.length; i++ ) {\n\t\ttimer = timers[ i ];\n\n\t\t// Run the timer and safely remove it when done (allowing for external removal)\n\t\tif ( !timer() && timers[ i ] === timer ) {\n\t\t\ttimers.splice( i--, 1 );\n\t\t}\n\t}\n\n\tif ( !timers.length ) {\n\t\tjQuery.fx.stop();\n\t}\n\tfxNow = undefined;\n};\n\njQuery.fx.timer = function( timer ) {\n\tjQuery.timers.push( timer );\n\tjQuery.fx.start();\n};\n\njQuery.fx.interval = 13;\njQuery.fx.start = function() {\n\tif ( inProgress ) {\n\t\treturn;\n\t}\n\n\tinProgress = true;\n\tschedule();\n};\n\njQuery.fx.stop = function() {\n\tinProgress = null;\n};\n\njQuery.fx.speeds = {\n\tslow: 600,\n\tfast: 200,\n\n\t// Default speed\n\t_default: 400\n};\n\n\n// Based off of the plugin by Clint Helfers, with permission.\njQuery.fn.delay = function( time, type ) {\n\ttime = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;\n\ttype = type || \"fx\";\n\n\treturn this.queue( type, function( next, hooks ) {\n\t\tvar timeout = window.setTimeout( next, time );\n\t\thooks.stop = function() {\n\t\t\twindow.clearTimeout( timeout );\n\t\t};\n\t} );\n};\n\n\n( function() {\n\tvar input = document.createElement( \"input\" ),\n\t\tselect = document.createElement( \"select\" ),\n\t\topt = select.appendChild( document.createElement( \"option\" ) );\n\n\tinput.type = \"checkbox\";\n\n\t// Support: Android <=4.3 only\n\t// Default value for a checkbox should be \"on\"\n\tsupport.checkOn = input.value !== \"\";\n\n\t// Support: IE <=11 only\n\t// Must access selectedIndex to make default options select\n\tsupport.optSelected = opt.selected;\n\n\t// Support: IE <=11 only\n\t// An input loses its value after becoming a radio\n\tinput = document.createElement( \"input\" );\n\tinput.value = \"t\";\n\tinput.type = \"radio\";\n\tsupport.radioValue = input.value === \"t\";\n} )();\n\n\nvar boolHook,\n\tattrHandle = jQuery.expr.attrHandle;\n\njQuery.fn.extend( {\n\tattr: function( name, value ) {\n\t\treturn access( this, jQuery.attr, name, value, arguments.length > 1 );\n\t},\n\n\tremoveAttr: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.removeAttr( this, name );\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tattr: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set attributes on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Fallback to prop when attributes are not supported\n\t\tif ( typeof elem.getAttribute === \"undefined\" ) {\n\t\t\treturn jQuery.prop( elem, name, value );\n\t\t}\n\n\t\t// Attribute hooks are determined by the lowercase version\n\t\t// Grab necessary hook if one is defined\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\t\t\thooks = jQuery.attrHooks[ name.toLowerCase() ] ||\n\t\t\t\t( jQuery.expr.match.bool.test( name ) ? boolHook : undefined );\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( value === null ) {\n\t\t\t\tjQuery.removeAttr( elem, name );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\telem.setAttribute( name, value + \"\" );\n\t\t\treturn value;\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\tret = jQuery.find.attr( elem, name );\n\n\t\t// Non-existent attributes return null, we normalize to undefined\n\t\treturn ret == null ? undefined : ret;\n\t},\n\n\tattrHooks: {\n\t\ttype: {\n\t\t\tset: function( elem, value ) {\n\t\t\t\tif ( !support.radioValue && value === \"radio\" &&\n\t\t\t\t\tnodeName( elem, \"input\" ) ) {\n\t\t\t\t\tvar val = elem.value;\n\t\t\t\t\telem.setAttribute( \"type\", value );\n\t\t\t\t\tif ( val ) {\n\t\t\t\t\t\telem.value = val;\n\t\t\t\t\t}\n\t\t\t\t\treturn value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tremoveAttr: function( elem, value ) {\n\t\tvar name,\n\t\t\ti = 0,\n\n\t\t\t// Attribute names can contain non-HTML whitespace characters\n\t\t\t// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2\n\t\t\tattrNames = value && value.match( rnothtmlwhite );\n\n\t\tif ( attrNames && elem.nodeType === 1 ) {\n\t\t\twhile ( ( name = attrNames[ i++ ] ) ) {\n\t\t\t\telem.removeAttribute( name );\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Hooks for boolean attributes\nboolHook = {\n\tset: function( elem, value, name ) {\n\t\tif ( value === false ) {\n\n\t\t\t// Remove boolean attributes when set to false\n\t\t\tjQuery.removeAttr( elem, name );\n\t\t} else {\n\t\t\telem.setAttribute( name, name );\n\t\t}\n\t\treturn name;\n\t}\n};\n\njQuery.each( jQuery.expr.match.bool.source.match( /\\w+/g ), function( _i, name ) {\n\tvar getter = attrHandle[ name ] || jQuery.find.attr;\n\n\tattrHandle[ name ] = function( elem, name, isXML ) {\n\t\tvar ret, handle,\n\t\t\tlowercaseName = name.toLowerCase();\n\n\t\tif ( !isXML ) {\n\n\t\t\t// Avoid an infinite loop by temporarily removing this function from the getter\n\t\t\thandle = attrHandle[ lowercaseName ];\n\t\t\tattrHandle[ lowercaseName ] = ret;\n\t\t\tret = getter( elem, name, isXML ) != null ?\n\t\t\t\tlowercaseName :\n\t\t\t\tnull;\n\t\t\tattrHandle[ lowercaseName ] = handle;\n\t\t}\n\t\treturn ret;\n\t};\n} );\n\n\n\n\nvar rfocusable = /^(?:input|select|textarea|button)$/i,\n\trclickable = /^(?:a|area)$/i;\n\njQuery.fn.extend( {\n\tprop: function( name, value ) {\n\t\treturn access( this, jQuery.prop, name, value, arguments.length > 1 );\n\t},\n\n\tremoveProp: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tdelete this[ jQuery.propFix[ name ] || name ];\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tprop: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set properties on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// Fix name and attach hooks\n\t\t\tname = jQuery.propFix[ name ] || name;\n\t\t\thooks = jQuery.propHooks[ name ];\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\treturn ( elem[ name ] = value );\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\treturn elem[ name ];\n\t},\n\n\tpropHooks: {\n\t\ttabIndex: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\t// Support: IE <=9 - 11 only\n\t\t\t\t// elem.tabIndex doesn't always return the\n\t\t\t\t// correct value when it hasn't been explicitly set\n\t\t\t\t// Use proper attribute retrieval (trac-12072)\n\t\t\t\tvar tabindex = jQuery.find.attr( elem, \"tabindex\" );\n\n\t\t\t\tif ( tabindex ) {\n\t\t\t\t\treturn parseInt( tabindex, 10 );\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\trfocusable.test( elem.nodeName ) ||\n\t\t\t\t\trclickable.test( elem.nodeName ) &&\n\t\t\t\t\telem.href\n\t\t\t\t) {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t},\n\n\tpropFix: {\n\t\t\"for\": \"htmlFor\",\n\t\t\"class\": \"className\"\n\t}\n} );\n\n// Support: IE <=11 only\n// Accessing the selectedIndex property\n// forces the browser to respect setting selected\n// on the option\n// The getter ensures a default option is selected\n// when in an optgroup\n// eslint rule \"no-unused-expressions\" is disabled for this code\n// since it considers such accessions noop\nif ( !support.optSelected ) {\n\tjQuery.propHooks.selected = {\n\t\tget: function( elem ) {\n\n\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent && parent.parentNode ) {\n\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\tset: function( elem ) {\n\n\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent ) {\n\t\t\t\tparent.selectedIndex;\n\n\t\t\t\tif ( parent.parentNode ) {\n\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\njQuery.each( [\n\t\"tabIndex\",\n\t\"readOnly\",\n\t\"maxLength\",\n\t\"cellSpacing\",\n\t\"cellPadding\",\n\t\"rowSpan\",\n\t\"colSpan\",\n\t\"useMap\",\n\t\"frameBorder\",\n\t\"contentEditable\"\n], function() {\n\tjQuery.propFix[ this.toLowerCase() ] = this;\n} );\n\n\n\n\n\t// Strip and collapse whitespace according to HTML spec\n\t// https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace\n\tfunction stripAndCollapse( value ) {\n\t\tvar tokens = value.match( rnothtmlwhite ) || [];\n\t\treturn tokens.join( \" \" );\n\t}\n\n\nfunction getClass( elem ) {\n\treturn elem.getAttribute && elem.getAttribute( \"class\" ) || \"\";\n}\n\nfunction classesToArray( value ) {\n\tif ( Array.isArray( value ) ) {\n\t\treturn value;\n\t}\n\tif ( typeof value === \"string\" ) {\n\t\treturn value.match( rnothtmlwhite ) || [];\n\t}\n\treturn [];\n}\n\njQuery.fn.extend( {\n\taddClass: function( value ) {\n\t\tvar classNames, cur, curValue, className, i, finalValue;\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).addClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tclassNames = classesToArray( value );\n\n\t\tif ( classNames.length ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tcurValue = getClass( this );\n\t\t\t\tcur = this.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tfor ( i = 0; i < classNames.length; i++ ) {\n\t\t\t\t\t\tclassName = classNames[ i ];\n\t\t\t\t\t\tif ( cur.indexOf( \" \" + className + \" \" ) < 0 ) {\n\t\t\t\t\t\t\tcur += className + \" \";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\tthis.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tremoveClass: function( value ) {\n\t\tvar classNames, cur, curValue, className, i, finalValue;\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( !arguments.length ) {\n\t\t\treturn this.attr( \"class\", \"\" );\n\t\t}\n\n\t\tclassNames = classesToArray( value );\n\n\t\tif ( classNames.length ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tcurValue = getClass( this );\n\n\t\t\t\t// This expression is here for better compressibility (see addClass)\n\t\t\t\tcur = this.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tfor ( i = 0; i < classNames.length; i++ ) {\n\t\t\t\t\t\tclassName = classNames[ i ];\n\n\t\t\t\t\t\t// Remove *all* instances\n\t\t\t\t\t\twhile ( cur.indexOf( \" \" + className + \" \" ) > -1 ) {\n\t\t\t\t\t\t\tcur = cur.replace( \" \" + className + \" \", \" \" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\tthis.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\ttoggleClass: function( value, stateVal ) {\n\t\tvar classNames, className, i, self,\n\t\t\ttype = typeof value,\n\t\t\tisValidValue = type === \"string\" || Array.isArray( value );\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).toggleClass(\n\t\t\t\t\tvalue.call( this, i, getClass( this ), stateVal ),\n\t\t\t\t\tstateVal\n\t\t\t\t);\n\t\t\t} );\n\t\t}\n\n\t\tif ( typeof stateVal === \"boolean\" && isValidValue ) {\n\t\t\treturn stateVal ? this.addClass( value ) : this.removeClass( value );\n\t\t}\n\n\t\tclassNames = classesToArray( value );\n\n\t\treturn this.each( function() {\n\t\t\tif ( isValidValue ) {\n\n\t\t\t\t// Toggle individual class names\n\t\t\t\tself = jQuery( this );\n\n\t\t\t\tfor ( i = 0; i < classNames.length; i++ ) {\n\t\t\t\t\tclassName = classNames[ i ];\n\n\t\t\t\t\t// Check each className given, space separated list\n\t\t\t\t\tif ( self.hasClass( className ) ) {\n\t\t\t\t\t\tself.removeClass( className );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.addClass( className );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Toggle whole class name\n\t\t\t} else if ( value === undefined || type === \"boolean\" ) {\n\t\t\t\tclassName = getClass( this );\n\t\t\t\tif ( className ) {\n\n\t\t\t\t\t// Store className if set\n\t\t\t\t\tdataPriv.set( this, \"__className__\", className );\n\t\t\t\t}\n\n\t\t\t\t// If the element has a class name or if we're passed `false`,\n\t\t\t\t// then remove the whole classname (if there was one, the above saved it).\n\t\t\t\t// Otherwise bring back whatever was previously saved (if anything),\n\t\t\t\t// falling back to the empty string if nothing was stored.\n\t\t\t\tif ( this.setAttribute ) {\n\t\t\t\t\tthis.setAttribute( \"class\",\n\t\t\t\t\t\tclassName || value === false ?\n\t\t\t\t\t\t\t\"\" :\n\t\t\t\t\t\t\tdataPriv.get( this, \"__className__\" ) || \"\"\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\thasClass: function( selector ) {\n\t\tvar className, elem,\n\t\t\ti = 0;\n\n\t\tclassName = \" \" + selector + \" \";\n\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\tif ( elem.nodeType === 1 &&\n\t\t\t\t( \" \" + stripAndCollapse( getClass( elem ) ) + \" \" ).indexOf( className ) > -1 ) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n} );\n\n\n\n\nvar rreturn = /\\r/g;\n\njQuery.fn.extend( {\n\tval: function( value ) {\n\t\tvar hooks, ret, valueIsFunction,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !arguments.length ) {\n\t\t\tif ( elem ) {\n\t\t\t\thooks = jQuery.valHooks[ elem.type ] ||\n\t\t\t\t\tjQuery.valHooks[ elem.nodeName.toLowerCase() ];\n\n\t\t\t\tif ( hooks &&\n\t\t\t\t\t\"get\" in hooks &&\n\t\t\t\t\t( ret = hooks.get( elem, \"value\" ) ) !== undefined\n\t\t\t\t) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\tret = elem.value;\n\n\t\t\t\t// Handle most common string cases\n\t\t\t\tif ( typeof ret === \"string\" ) {\n\t\t\t\t\treturn ret.replace( rreturn, \"\" );\n\t\t\t\t}\n\n\t\t\t\t// Handle cases where value is null/undef or number\n\t\t\t\treturn ret == null ? \"\" : ret;\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tvalueIsFunction = isFunction( value );\n\n\t\treturn this.each( function( i ) {\n\t\t\tvar val;\n\n\t\t\tif ( this.nodeType !== 1 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( valueIsFunction ) {\n\t\t\t\tval = value.call( this, i, jQuery( this ).val() );\n\t\t\t} else {\n\t\t\t\tval = value;\n\t\t\t}\n\n\t\t\t// Treat null/undefined as \"\"; convert numbers to string\n\t\t\tif ( val == null ) {\n\t\t\t\tval = \"\";\n\n\t\t\t} else if ( typeof val === \"number\" ) {\n\t\t\t\tval += \"\";\n\n\t\t\t} else if ( Array.isArray( val ) ) {\n\t\t\t\tval = jQuery.map( val, function( value ) {\n\t\t\t\t\treturn value == null ? \"\" : value + \"\";\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\thooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];\n\n\t\t\t// If set returns undefined, fall back to normal setting\n\t\t\tif ( !hooks || !( \"set\" in hooks ) || hooks.set( this, val, \"value\" ) === undefined ) {\n\t\t\t\tthis.value = val;\n\t\t\t}\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tvalHooks: {\n\t\toption: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\tvar val = jQuery.find.attr( elem, \"value\" );\n\t\t\t\treturn val != null ?\n\t\t\t\t\tval :\n\n\t\t\t\t\t// Support: IE <=10 - 11 only\n\t\t\t\t\t// option.text throws exceptions (trac-14686, trac-14858)\n\t\t\t\t\t// Strip and collapse whitespace\n\t\t\t\t\t// https://html.spec.whatwg.org/#strip-and-collapse-whitespace\n\t\t\t\t\tstripAndCollapse( jQuery.text( elem ) );\n\t\t\t}\n\t\t},\n\t\tselect: {\n\t\t\tget: function( elem ) {\n\t\t\t\tvar value, option, i,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tindex = elem.selectedIndex,\n\t\t\t\t\tone = elem.type === \"select-one\",\n\t\t\t\t\tvalues = one ? null : [],\n\t\t\t\t\tmax = one ? index + 1 : options.length;\n\n\t\t\t\tif ( index < 0 ) {\n\t\t\t\t\ti = max;\n\n\t\t\t\t} else {\n\t\t\t\t\ti = one ? index : 0;\n\t\t\t\t}\n\n\t\t\t\t// Loop through all the selected options\n\t\t\t\tfor ( ; i < max; i++ ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t// IE8-9 doesn't update selected after form reset (trac-2551)\n\t\t\t\t\tif ( ( option.selected || i === index ) &&\n\n\t\t\t\t\t\t\t// Don't return options that are disabled or in a disabled optgroup\n\t\t\t\t\t\t\t!option.disabled &&\n\t\t\t\t\t\t\t( !option.parentNode.disabled ||\n\t\t\t\t\t\t\t\t!nodeName( option.parentNode, \"optgroup\" ) ) ) {\n\n\t\t\t\t\t\t// Get the specific value for the option\n\t\t\t\t\t\tvalue = jQuery( option ).val();\n\n\t\t\t\t\t\t// We don't need an array for one selects\n\t\t\t\t\t\tif ( one ) {\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Multi-Selects return an array\n\t\t\t\t\t\tvalues.push( value );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn values;\n\t\t\t},\n\n\t\t\tset: function( elem, value ) {\n\t\t\t\tvar optionSet, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tvalues = jQuery.makeArray( value ),\n\t\t\t\t\ti = options.length;\n\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t/* eslint-disable no-cond-assign */\n\n\t\t\t\t\tif ( option.selected =\n\t\t\t\t\t\tjQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1\n\t\t\t\t\t) {\n\t\t\t\t\t\toptionSet = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t/* eslint-enable no-cond-assign */\n\t\t\t\t}\n\n\t\t\t\t// Force browsers to behave consistently when non-matching value is set\n\t\t\t\tif ( !optionSet ) {\n\t\t\t\t\telem.selectedIndex = -1;\n\t\t\t\t}\n\t\t\t\treturn values;\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Radios and checkboxes getter/setter\njQuery.each( [ \"radio\", \"checkbox\" ], function() {\n\tjQuery.valHooks[ this ] = {\n\t\tset: function( elem, value ) {\n\t\t\tif ( Array.isArray( value ) ) {\n\t\t\t\treturn ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );\n\t\t\t}\n\t\t}\n\t};\n\tif ( !support.checkOn ) {\n\t\tjQuery.valHooks[ this ].get = function( elem ) {\n\t\t\treturn elem.getAttribute( \"value\" ) === null ? \"on\" : elem.value;\n\t\t};\n\t}\n} );\n\n\n\n\n// Return jQuery for attributes-only inclusion\nvar location = window.location;\n\nvar nonce = { guid: Date.now() };\n\nvar rquery = ( /\\?/ );\n\n\n\n// Cross-browser xml parsing\njQuery.parseXML = function( data ) {\n\tvar xml, parserErrorElem;\n\tif ( !data || typeof data !== \"string\" ) {\n\t\treturn null;\n\t}\n\n\t// Support: IE 9 - 11 only\n\t// IE throws on parseFromString with invalid input.\n\ttry {\n\t\txml = ( new window.DOMParser() ).parseFromString( data, \"text/xml\" );\n\t} catch ( e ) {}\n\n\tparserErrorElem = xml && xml.getElementsByTagName( \"parsererror\" )[ 0 ];\n\tif ( !xml || parserErrorElem ) {\n\t\tjQuery.error( \"Invalid XML: \" + (\n\t\t\tparserErrorElem ?\n\t\t\t\tjQuery.map( parserErrorElem.childNodes, function( el ) {\n\t\t\t\t\treturn el.textContent;\n\t\t\t\t} ).join( \"\\n\" ) :\n\t\t\t\tdata\n\t\t) );\n\t}\n\treturn xml;\n};\n\n\nvar rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,\n\tstopPropagationCallback = function( e ) {\n\t\te.stopPropagation();\n\t};\n\njQuery.extend( jQuery.event, {\n\n\ttrigger: function( event, data, elem, onlyHandlers ) {\n\n\t\tvar i, cur, tmp, bubbleType, ontype, handle, special, lastElement,\n\t\t\teventPath = [ elem || document ],\n\t\t\ttype = hasOwn.call( event, \"type\" ) ? event.type : event,\n\t\t\tnamespaces = hasOwn.call( event, \"namespace\" ) ? event.namespace.split( \".\" ) : [];\n\n\t\tcur = lastElement = tmp = elem = elem || document;\n\n\t\t// Don't do events on text and comment nodes\n\t\tif ( elem.nodeType === 3 || elem.nodeType === 8 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// focus/blur morphs to focusin/out; ensure we're not firing them right now\n\t\tif ( rfocusMorph.test( type + jQuery.event.triggered ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( type.indexOf( \".\" ) > -1 ) {\n\n\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\n\t\t\tnamespaces = type.split( \".\" );\n\t\t\ttype = namespaces.shift();\n\t\t\tnamespaces.sort();\n\t\t}\n\t\tontype = type.indexOf( \":\" ) < 0 && \"on\" + type;\n\n\t\t// Caller can pass in a jQuery.Event object, Object, or just an event type string\n\t\tevent = event[ jQuery.expando ] ?\n\t\t\tevent :\n\t\t\tnew jQuery.Event( type, typeof event === \"object\" && event );\n\n\t\t// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\t\tevent.isTrigger = onlyHandlers ? 2 : 3;\n\t\tevent.namespace = namespaces.join( \".\" );\n\t\tevent.rnamespace = event.namespace ?\n\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" ) :\n\t\t\tnull;\n\n\t\t// Clean up the event in case it is being reused\n\t\tevent.result = undefined;\n\t\tif ( !event.target ) {\n\t\t\tevent.target = elem;\n\t\t}\n\n\t\t// Clone any incoming data and prepend the event, creating the handler arg list\n\t\tdata = data == null ?\n\t\t\t[ event ] :\n\t\t\tjQuery.makeArray( data, [ event ] );\n\n\t\t// Allow special events to draw outside the lines\n\t\tspecial = jQuery.event.special[ type ] || {};\n\t\tif ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine event propagation path in advance, per W3C events spec (trac-9951)\n\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (trac-9724)\n\t\tif ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) {\n\n\t\t\tbubbleType = special.delegateType || type;\n\t\t\tif ( !rfocusMorph.test( bubbleType + type ) ) {\n\t\t\t\tcur = cur.parentNode;\n\t\t\t}\n\t\t\tfor ( ; cur; cur = cur.parentNode ) {\n\t\t\t\teventPath.push( cur );\n\t\t\t\ttmp = cur;\n\t\t\t}\n\n\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\n\t\t\tif ( tmp === ( elem.ownerDocument || document ) ) {\n\t\t\t\teventPath.push( tmp.defaultView || tmp.parentWindow || window );\n\t\t\t}\n\t\t}\n\n\t\t// Fire handlers on the event path\n\t\ti = 0;\n\t\twhile ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tlastElement = cur;\n\t\t\tevent.type = i > 1 ?\n\t\t\t\tbubbleType :\n\t\t\t\tspecial.bindType || type;\n\n\t\t\t// jQuery handler\n\t\t\thandle = ( dataPriv.get( cur, \"events\" ) || Object.create( null ) )[ event.type ] &&\n\t\t\t\tdataPriv.get( cur, \"handle\" );\n\t\t\tif ( handle ) {\n\t\t\t\thandle.apply( cur, data );\n\t\t\t}\n\n\t\t\t// Native handler\n\t\t\thandle = ontype && cur[ ontype ];\n\t\t\tif ( handle && handle.apply && acceptData( cur ) ) {\n\t\t\t\tevent.result = handle.apply( cur, data );\n\t\t\t\tif ( event.result === false ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tevent.type = type;\n\n\t\t// If nobody prevented the default action, do it now\n\t\tif ( !onlyHandlers && !event.isDefaultPrevented() ) {\n\n\t\t\tif ( ( !special._default ||\n\t\t\t\tspecial._default.apply( eventPath.pop(), data ) === false ) &&\n\t\t\t\tacceptData( elem ) ) {\n\n\t\t\t\t// Call a native DOM method on the target with the same name as the event.\n\t\t\t\t// Don't do default actions on window, that's where global variables be (trac-6170)\n\t\t\t\tif ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) {\n\n\t\t\t\t\t// Don't re-trigger an onFOO event when we call its FOO() method\n\t\t\t\t\ttmp = elem[ ontype ];\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\n\t\t\t\t\tjQuery.event.triggered = type;\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.addEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\telem[ type ]();\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.removeEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\tjQuery.event.triggered = undefined;\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = tmp;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\t// Piggyback on a donor event to simulate a different one\n\t// Used only for `focus(in | out)` events\n\tsimulate: function( type, elem, event ) {\n\t\tvar e = jQuery.extend(\n\t\t\tnew jQuery.Event(),\n\t\t\tevent,\n\t\t\t{\n\t\t\t\ttype: type,\n\t\t\t\tisSimulated: true\n\t\t\t}\n\t\t);\n\n\t\tjQuery.event.trigger( e, null, elem );\n\t}\n\n} );\n\njQuery.fn.extend( {\n\n\ttrigger: function( type, data ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.trigger( type, data, this );\n\t\t} );\n\t},\n\ttriggerHandler: function( type, data ) {\n\t\tvar elem = this[ 0 ];\n\t\tif ( elem ) {\n\t\t\treturn jQuery.event.trigger( type, data, elem, true );\n\t\t}\n\t}\n} );\n\n\nvar\n\trbracket = /\\[\\]$/,\n\trCRLF = /\\r?\\n/g,\n\trsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n\trsubmittable = /^(?:input|select|textarea|keygen)/i;\n\nfunction buildParams( prefix, obj, traditional, add ) {\n\tvar name;\n\n\tif ( Array.isArray( obj ) ) {\n\n\t\t// Serialize array item.\n\t\tjQuery.each( obj, function( i, v ) {\n\t\t\tif ( traditional || rbracket.test( prefix ) ) {\n\n\t\t\t\t// Treat each array item as a scalar.\n\t\t\t\tadd( prefix, v );\n\n\t\t\t} else {\n\n\t\t\t\t// Item is non-scalar (array or object), encode its numeric index.\n\t\t\t\tbuildParams(\n\t\t\t\t\tprefix + \"[\" + ( typeof v === \"object\" && v != null ? i : \"\" ) + \"]\",\n\t\t\t\t\tv,\n\t\t\t\t\ttraditional,\n\t\t\t\t\tadd\n\t\t\t\t);\n\t\t\t}\n\t\t} );\n\n\t} else if ( !traditional && toType( obj ) === \"object\" ) {\n\n\t\t// Serialize object item.\n\t\tfor ( name in obj ) {\n\t\t\tbuildParams( prefix + \"[\" + name + \"]\", obj[ name ], traditional, add );\n\t\t}\n\n\t} else {\n\n\t\t// Serialize scalar item.\n\t\tadd( prefix, obj );\n\t}\n}\n\n// Serialize an array of form elements or a set of\n// key/values into a query string\njQuery.param = function( a, traditional ) {\n\tvar prefix,\n\t\ts = [],\n\t\tadd = function( key, valueOrFunction ) {\n\n\t\t\t// If value is a function, invoke it and use its return value\n\t\t\tvar value = isFunction( valueOrFunction ) ?\n\t\t\t\tvalueOrFunction() :\n\t\t\t\tvalueOrFunction;\n\n\t\t\ts[ s.length ] = encodeURIComponent( key ) + \"=\" +\n\t\t\t\tencodeURIComponent( value == null ? \"\" : value );\n\t\t};\n\n\tif ( a == null ) {\n\t\treturn \"\";\n\t}\n\n\t// If an array was passed in, assume that it is an array of form elements.\n\tif ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {\n\n\t\t// Serialize the form elements\n\t\tjQuery.each( a, function() {\n\t\t\tadd( this.name, this.value );\n\t\t} );\n\n\t} else {\n\n\t\t// If traditional, encode the \"old\" way (the way 1.3.2 or older\n\t\t// did it), otherwise encode params recursively.\n\t\tfor ( prefix in a ) {\n\t\t\tbuildParams( prefix, a[ prefix ], traditional, add );\n\t\t}\n\t}\n\n\t// Return the resulting serialization\n\treturn s.join( \"&\" );\n};\n\njQuery.fn.extend( {\n\tserialize: function() {\n\t\treturn jQuery.param( this.serializeArray() );\n\t},\n\tserializeArray: function() {\n\t\treturn this.map( function() {\n\n\t\t\t// Can add propHook for \"elements\" to filter or add form elements\n\t\t\tvar elements = jQuery.prop( this, \"elements\" );\n\t\t\treturn elements ? jQuery.makeArray( elements ) : this;\n\t\t} ).filter( function() {\n\t\t\tvar type = this.type;\n\n\t\t\t// Use .is( \":disabled\" ) so that fieldset[disabled] works\n\t\t\treturn this.name && !jQuery( this ).is( \":disabled\" ) &&\n\t\t\t\trsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&\n\t\t\t\t( this.checked || !rcheckableType.test( type ) );\n\t\t} ).map( function( _i, elem ) {\n\t\t\tvar val = jQuery( this ).val();\n\n\t\t\tif ( val == null ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tif ( Array.isArray( val ) ) {\n\t\t\t\treturn jQuery.map( val, function( val ) {\n\t\t\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t} ).get();\n\t}\n} );\n\n\nvar\n\tr20 = /%20/g,\n\trhash = /#.*$/,\n\trantiCache = /([?&])_=[^&]*/,\n\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)$/mg,\n\n\t// trac-7653, trac-8125, trac-8152: local protocol detection\n\trlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\n\trnoContent = /^(?:GET|HEAD)$/,\n\trprotocol = /^\\/\\//,\n\n\t/* Prefilters\n\t * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n\t * 2) These are called:\n\t *    - BEFORE asking for a transport\n\t *    - AFTER param serialization (s.data is a string if s.processData is true)\n\t * 3) key is the dataType\n\t * 4) the catchall symbol \"*\" can be used\n\t * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n\t */\n\tprefilters = {},\n\n\t/* Transports bindings\n\t * 1) key is the dataType\n\t * 2) the catchall symbol \"*\" can be used\n\t * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n\t */\n\ttransports = {},\n\n\t// Avoid comment-prolog char sequence (trac-10098); must appease lint and evade compression\n\tallTypes = \"*/\".concat( \"*\" ),\n\n\t// Anchor tag for parsing the document origin\n\toriginAnchor = document.createElement( \"a\" );\n\noriginAnchor.href = location.href;\n\n// Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\nfunction addToPrefiltersOrTransports( structure ) {\n\n\t// dataTypeExpression is optional and defaults to \"*\"\n\treturn function( dataTypeExpression, func ) {\n\n\t\tif ( typeof dataTypeExpression !== \"string\" ) {\n\t\t\tfunc = dataTypeExpression;\n\t\t\tdataTypeExpression = \"*\";\n\t\t}\n\n\t\tvar dataType,\n\t\t\ti = 0,\n\t\t\tdataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || [];\n\n\t\tif ( isFunction( func ) ) {\n\n\t\t\t// For each dataType in the dataTypeExpression\n\t\t\twhile ( ( dataType = dataTypes[ i++ ] ) ) {\n\n\t\t\t\t// Prepend if requested\n\t\t\t\tif ( dataType[ 0 ] === \"+\" ) {\n\t\t\t\t\tdataType = dataType.slice( 1 ) || \"*\";\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );\n\n\t\t\t\t// Otherwise append\n\t\t\t\t} else {\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).push( func );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\n// Base inspection function for prefilters and transports\nfunction inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {\n\n\tvar inspected = {},\n\t\tseekingTransport = ( structure === transports );\n\n\tfunction inspect( dataType ) {\n\t\tvar selected;\n\t\tinspected[ dataType ] = true;\n\t\tjQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {\n\t\t\tvar dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );\n\t\t\tif ( typeof dataTypeOrTransport === \"string\" &&\n\t\t\t\t!seekingTransport && !inspected[ dataTypeOrTransport ] ) {\n\n\t\t\t\toptions.dataTypes.unshift( dataTypeOrTransport );\n\t\t\t\tinspect( dataTypeOrTransport );\n\t\t\t\treturn false;\n\t\t\t} else if ( seekingTransport ) {\n\t\t\t\treturn !( selected = dataTypeOrTransport );\n\t\t\t}\n\t\t} );\n\t\treturn selected;\n\t}\n\n\treturn inspect( options.dataTypes[ 0 ] ) || !inspected[ \"*\" ] && inspect( \"*\" );\n}\n\n// A special extend for ajax options\n// that takes \"flat\" options (not to be deep extended)\n// Fixes trac-9887\nfunction ajaxExtend( target, src ) {\n\tvar key, deep,\n\t\tflatOptions = jQuery.ajaxSettings.flatOptions || {};\n\n\tfor ( key in src ) {\n\t\tif ( src[ key ] !== undefined ) {\n\t\t\t( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];\n\t\t}\n\t}\n\tif ( deep ) {\n\t\tjQuery.extend( true, target, deep );\n\t}\n\n\treturn target;\n}\n\n/* Handles responses to an ajax request:\n * - finds the right dataType (mediates between content-type and expected dataType)\n * - returns the corresponding response\n */\nfunction ajaxHandleResponses( s, jqXHR, responses ) {\n\n\tvar ct, type, finalDataType, firstDataType,\n\t\tcontents = s.contents,\n\t\tdataTypes = s.dataTypes;\n\n\t// Remove auto dataType and get content-type in the process\n\twhile ( dataTypes[ 0 ] === \"*\" ) {\n\t\tdataTypes.shift();\n\t\tif ( ct === undefined ) {\n\t\t\tct = s.mimeType || jqXHR.getResponseHeader( \"Content-Type\" );\n\t\t}\n\t}\n\n\t// Check if we're dealing with a known content-type\n\tif ( ct ) {\n\t\tfor ( type in contents ) {\n\t\t\tif ( contents[ type ] && contents[ type ].test( ct ) ) {\n\t\t\t\tdataTypes.unshift( type );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check to see if we have a response for the expected dataType\n\tif ( dataTypes[ 0 ] in responses ) {\n\t\tfinalDataType = dataTypes[ 0 ];\n\t} else {\n\n\t\t// Try convertible dataTypes\n\t\tfor ( type in responses ) {\n\t\t\tif ( !dataTypes[ 0 ] || s.converters[ type + \" \" + dataTypes[ 0 ] ] ) {\n\t\t\t\tfinalDataType = type;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( !firstDataType ) {\n\t\t\t\tfirstDataType = type;\n\t\t\t}\n\t\t}\n\n\t\t// Or just use first one\n\t\tfinalDataType = finalDataType || firstDataType;\n\t}\n\n\t// If we found a dataType\n\t// We add the dataType to the list if needed\n\t// and return the corresponding response\n\tif ( finalDataType ) {\n\t\tif ( finalDataType !== dataTypes[ 0 ] ) {\n\t\t\tdataTypes.unshift( finalDataType );\n\t\t}\n\t\treturn responses[ finalDataType ];\n\t}\n}\n\n/* Chain conversions given the request and the original response\n * Also sets the responseXXX fields on the jqXHR instance\n */\nfunction ajaxConvert( s, response, jqXHR, isSuccess ) {\n\tvar conv2, current, conv, tmp, prev,\n\t\tconverters = {},\n\n\t\t// Work with a copy of dataTypes in case we need to modify it for conversion\n\t\tdataTypes = s.dataTypes.slice();\n\n\t// Create converters map with lowercased keys\n\tif ( dataTypes[ 1 ] ) {\n\t\tfor ( conv in s.converters ) {\n\t\t\tconverters[ conv.toLowerCase() ] = s.converters[ conv ];\n\t\t}\n\t}\n\n\tcurrent = dataTypes.shift();\n\n\t// Convert to each sequential dataType\n\twhile ( current ) {\n\n\t\tif ( s.responseFields[ current ] ) {\n\t\t\tjqXHR[ s.responseFields[ current ] ] = response;\n\t\t}\n\n\t\t// Apply the dataFilter if provided\n\t\tif ( !prev && isSuccess && s.dataFilter ) {\n\t\t\tresponse = s.dataFilter( response, s.dataType );\n\t\t}\n\n\t\tprev = current;\n\t\tcurrent = dataTypes.shift();\n\n\t\tif ( current ) {\n\n\t\t\t// There's only work to do if current dataType is non-auto\n\t\t\tif ( current === \"*\" ) {\n\n\t\t\t\tcurrent = prev;\n\n\t\t\t// Convert response if prev dataType is non-auto and differs from current\n\t\t\t} else if ( prev !== \"*\" && prev !== current ) {\n\n\t\t\t\t// Seek a direct converter\n\t\t\t\tconv = converters[ prev + \" \" + current ] || converters[ \"* \" + current ];\n\n\t\t\t\t// If none found, seek a pair\n\t\t\t\tif ( !conv ) {\n\t\t\t\t\tfor ( conv2 in converters ) {\n\n\t\t\t\t\t\t// If conv2 outputs current\n\t\t\t\t\t\ttmp = conv2.split( \" \" );\n\t\t\t\t\t\tif ( tmp[ 1 ] === current ) {\n\n\t\t\t\t\t\t\t// If prev can be converted to accepted input\n\t\t\t\t\t\t\tconv = converters[ prev + \" \" + tmp[ 0 ] ] ||\n\t\t\t\t\t\t\t\tconverters[ \"* \" + tmp[ 0 ] ];\n\t\t\t\t\t\t\tif ( conv ) {\n\n\t\t\t\t\t\t\t\t// Condense equivalence converters\n\t\t\t\t\t\t\t\tif ( conv === true ) {\n\t\t\t\t\t\t\t\t\tconv = converters[ conv2 ];\n\n\t\t\t\t\t\t\t\t// Otherwise, insert the intermediate dataType\n\t\t\t\t\t\t\t\t} else if ( converters[ conv2 ] !== true ) {\n\t\t\t\t\t\t\t\t\tcurrent = tmp[ 0 ];\n\t\t\t\t\t\t\t\t\tdataTypes.unshift( tmp[ 1 ] );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Apply converter (if not an equivalence)\n\t\t\t\tif ( conv !== true ) {\n\n\t\t\t\t\t// Unless errors are allowed to bubble, catch and return them\n\t\t\t\t\tif ( conv && s.throws ) {\n\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tstate: \"parsererror\",\n\t\t\t\t\t\t\t\terror: conv ? e : \"No conversion from \" + prev + \" to \" + current\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { state: \"success\", data: response };\n}\n\njQuery.extend( {\n\n\t// Counter for holding the number of active queries\n\tactive: 0,\n\n\t// Last-Modified header cache for next request\n\tlastModified: {},\n\tetag: {},\n\n\tajaxSettings: {\n\t\turl: location.href,\n\t\ttype: \"GET\",\n\t\tisLocal: rlocalProtocol.test( location.protocol ),\n\t\tglobal: true,\n\t\tprocessData: true,\n\t\tasync: true,\n\t\tcontentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n\n\t\t/*\n\t\ttimeout: 0,\n\t\tdata: null,\n\t\tdataType: null,\n\t\tusername: null,\n\t\tpassword: null,\n\t\tcache: null,\n\t\tthrows: false,\n\t\ttraditional: false,\n\t\theaders: {},\n\t\t*/\n\n\t\taccepts: {\n\t\t\t\"*\": allTypes,\n\t\t\ttext: \"text/plain\",\n\t\t\thtml: \"text/html\",\n\t\t\txml: \"application/xml, text/xml\",\n\t\t\tjson: \"application/json, text/javascript\"\n\t\t},\n\n\t\tcontents: {\n\t\t\txml: /\\bxml\\b/,\n\t\t\thtml: /\\bhtml/,\n\t\t\tjson: /\\bjson\\b/\n\t\t},\n\n\t\tresponseFields: {\n\t\t\txml: \"responseXML\",\n\t\t\ttext: \"responseText\",\n\t\t\tjson: \"responseJSON\"\n\t\t},\n\n\t\t// Data converters\n\t\t// Keys separate source (or catchall \"*\") and destination types with a single space\n\t\tconverters: {\n\n\t\t\t// Convert anything to text\n\t\t\t\"* text\": String,\n\n\t\t\t// Text to html (true = no transformation)\n\t\t\t\"text html\": true,\n\n\t\t\t// Evaluate text as a json expression\n\t\t\t\"text json\": JSON.parse,\n\n\t\t\t// Parse text as xml\n\t\t\t\"text xml\": jQuery.parseXML\n\t\t},\n\n\t\t// For options that shouldn't be deep extended:\n\t\t// you can add your own custom options here if\n\t\t// and when you create one that shouldn't be\n\t\t// deep extended (see ajaxExtend)\n\t\tflatOptions: {\n\t\t\turl: true,\n\t\t\tcontext: true\n\t\t}\n\t},\n\n\t// Creates a full fledged settings object into target\n\t// with both ajaxSettings and settings fields.\n\t// If target is omitted, writes into ajaxSettings.\n\tajaxSetup: function( target, settings ) {\n\t\treturn settings ?\n\n\t\t\t// Building a settings object\n\t\t\tajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :\n\n\t\t\t// Extending ajaxSettings\n\t\t\tajaxExtend( jQuery.ajaxSettings, target );\n\t},\n\n\tajaxPrefilter: addToPrefiltersOrTransports( prefilters ),\n\tajaxTransport: addToPrefiltersOrTransports( transports ),\n\n\t// Main method\n\tajax: function( url, options ) {\n\n\t\t// If url is an object, simulate pre-1.5 signature\n\t\tif ( typeof url === \"object\" ) {\n\t\t\toptions = url;\n\t\t\turl = undefined;\n\t\t}\n\n\t\t// Force options to be an object\n\t\toptions = options || {};\n\n\t\tvar transport,\n\n\t\t\t// URL without anti-cache param\n\t\t\tcacheURL,\n\n\t\t\t// Response headers\n\t\t\tresponseHeadersString,\n\t\t\tresponseHeaders,\n\n\t\t\t// timeout handle\n\t\t\ttimeoutTimer,\n\n\t\t\t// Url cleanup var\n\t\t\turlAnchor,\n\n\t\t\t// Request state (becomes false upon send and true upon completion)\n\t\t\tcompleted,\n\n\t\t\t// To know if global events are to be dispatched\n\t\t\tfireGlobals,\n\n\t\t\t// Loop variable\n\t\t\ti,\n\n\t\t\t// uncached part of the url\n\t\t\tuncached,\n\n\t\t\t// Create the final options object\n\t\t\ts = jQuery.ajaxSetup( {}, options ),\n\n\t\t\t// Callbacks context\n\t\t\tcallbackContext = s.context || s,\n\n\t\t\t// Context for global events is callbackContext if it is a DOM node or jQuery collection\n\t\t\tglobalEventContext = s.context &&\n\t\t\t\t( callbackContext.nodeType || callbackContext.jquery ) ?\n\t\t\t\tjQuery( callbackContext ) :\n\t\t\t\tjQuery.event,\n\n\t\t\t// Deferreds\n\t\t\tdeferred = jQuery.Deferred(),\n\t\t\tcompleteDeferred = jQuery.Callbacks( \"once memory\" ),\n\n\t\t\t// Status-dependent callbacks\n\t\t\tstatusCode = s.statusCode || {},\n\n\t\t\t// Headers (they are sent all at once)\n\t\t\trequestHeaders = {},\n\t\t\trequestHeadersNames = {},\n\n\t\t\t// Default abort message\n\t\t\tstrAbort = \"canceled\",\n\n\t\t\t// Fake xhr\n\t\t\tjqXHR = {\n\t\t\t\treadyState: 0,\n\n\t\t\t\t// Builds headers hashtable if needed\n\t\t\t\tgetResponseHeader: function( key ) {\n\t\t\t\t\tvar match;\n\t\t\t\t\tif ( completed ) {\n\t\t\t\t\t\tif ( !responseHeaders ) {\n\t\t\t\t\t\t\tresponseHeaders = {};\n\t\t\t\t\t\t\twhile ( ( match = rheaders.exec( responseHeadersString ) ) ) {\n\t\t\t\t\t\t\t\tresponseHeaders[ match[ 1 ].toLowerCase() + \" \" ] =\n\t\t\t\t\t\t\t\t\t( responseHeaders[ match[ 1 ].toLowerCase() + \" \" ] || [] )\n\t\t\t\t\t\t\t\t\t\t.concat( match[ 2 ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmatch = responseHeaders[ key.toLowerCase() + \" \" ];\n\t\t\t\t\t}\n\t\t\t\t\treturn match == null ? null : match.join( \", \" );\n\t\t\t\t},\n\n\t\t\t\t// Raw string\n\t\t\t\tgetAllResponseHeaders: function() {\n\t\t\t\t\treturn completed ? responseHeadersString : null;\n\t\t\t\t},\n\n\t\t\t\t// Caches the header\n\t\t\t\tsetRequestHeader: function( name, value ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\tname = requestHeadersNames[ name.toLowerCase() ] =\n\t\t\t\t\t\t\trequestHeadersNames[ name.toLowerCase() ] || name;\n\t\t\t\t\t\trequestHeaders[ name ] = value;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Overrides response content-type header\n\t\t\t\toverrideMimeType: function( type ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\ts.mimeType = type;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tstatusCode: function( map ) {\n\t\t\t\t\tvar code;\n\t\t\t\t\tif ( map ) {\n\t\t\t\t\t\tif ( completed ) {\n\n\t\t\t\t\t\t\t// Execute the appropriate callbacks\n\t\t\t\t\t\t\tjqXHR.always( map[ jqXHR.status ] );\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Lazy-add the new callbacks in a way that preserves old ones\n\t\t\t\t\t\t\tfor ( code in map ) {\n\t\t\t\t\t\t\t\tstatusCode[ code ] = [ statusCode[ code ], map[ code ] ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Cancel the request\n\t\t\t\tabort: function( statusText ) {\n\t\t\t\t\tvar finalText = statusText || strAbort;\n\t\t\t\t\tif ( transport ) {\n\t\t\t\t\t\ttransport.abort( finalText );\n\t\t\t\t\t}\n\t\t\t\t\tdone( 0, finalText );\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t};\n\n\t\t// Attach deferreds\n\t\tdeferred.promise( jqXHR );\n\n\t\t// Add protocol if not provided (prefilters might expect it)\n\t\t// Handle falsy url in the settings object (trac-10093: consistency with old signature)\n\t\t// We also use the url parameter if available\n\t\ts.url = ( ( url || s.url || location.href ) + \"\" )\n\t\t\t.replace( rprotocol, location.protocol + \"//\" );\n\n\t\t// Alias method option to type as per ticket trac-12004\n\t\ts.type = options.method || options.type || s.method || s.type;\n\n\t\t// Extract dataTypes list\n\t\ts.dataTypes = ( s.dataType || \"*\" ).toLowerCase().match( rnothtmlwhite ) || [ \"\" ];\n\n\t\t// A cross-domain request is in order when the origin doesn't match the current origin.\n\t\tif ( s.crossDomain == null ) {\n\t\t\turlAnchor = document.createElement( \"a\" );\n\n\t\t\t// Support: IE <=8 - 11, Edge 12 - 15\n\t\t\t// IE throws exception on accessing the href property if url is malformed,\n\t\t\t// e.g. http://example.com:80x/\n\t\t\ttry {\n\t\t\t\turlAnchor.href = s.url;\n\n\t\t\t\t// Support: IE <=8 - 11 only\n\t\t\t\t// Anchor's host property isn't correctly set when s.url is relative\n\t\t\t\turlAnchor.href = urlAnchor.href;\n\t\t\t\ts.crossDomain = originAnchor.protocol + \"//\" + originAnchor.host !==\n\t\t\t\t\turlAnchor.protocol + \"//\" + urlAnchor.host;\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// If there is an error parsing the URL, assume it is crossDomain,\n\t\t\t\t// it can be rejected by the transport if it is invalid\n\t\t\t\ts.crossDomain = true;\n\t\t\t}\n\t\t}\n\n\t\t// Convert data if not already a string\n\t\tif ( s.data && s.processData && typeof s.data !== \"string\" ) {\n\t\t\ts.data = jQuery.param( s.data, s.traditional );\n\t\t}\n\n\t\t// Apply prefilters\n\t\tinspectPrefiltersOrTransports( prefilters, s, options, jqXHR );\n\n\t\t// If request was aborted inside a prefilter, stop there\n\t\tif ( completed ) {\n\t\t\treturn jqXHR;\n\t\t}\n\n\t\t// We can fire global events as of now if asked to\n\t\t// Don't fire events if jQuery.event is undefined in an AMD-usage scenario (trac-15118)\n\t\tfireGlobals = jQuery.event && s.global;\n\n\t\t// Watch for a new set of requests\n\t\tif ( fireGlobals && jQuery.active++ === 0 ) {\n\t\t\tjQuery.event.trigger( \"ajaxStart\" );\n\t\t}\n\n\t\t// Uppercase the type\n\t\ts.type = s.type.toUpperCase();\n\n\t\t// Determine if request has content\n\t\ts.hasContent = !rnoContent.test( s.type );\n\n\t\t// Save the URL in case we're toying with the If-Modified-Since\n\t\t// and/or If-None-Match header later on\n\t\t// Remove hash to simplify url manipulation\n\t\tcacheURL = s.url.replace( rhash, \"\" );\n\n\t\t// More options handling for requests with no content\n\t\tif ( !s.hasContent ) {\n\n\t\t\t// Remember the hash so we can put it back\n\t\t\tuncached = s.url.slice( cacheURL.length );\n\n\t\t\t// If data is available and should be processed, append data to url\n\t\t\tif ( s.data && ( s.processData || typeof s.data === \"string\" ) ) {\n\t\t\t\tcacheURL += ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + s.data;\n\n\t\t\t\t// trac-9682: remove data so that it's not used in an eventual retry\n\t\t\t\tdelete s.data;\n\t\t\t}\n\n\t\t\t// Add or update anti-cache param if needed\n\t\t\tif ( s.cache === false ) {\n\t\t\t\tcacheURL = cacheURL.replace( rantiCache, \"$1\" );\n\t\t\t\tuncached = ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + \"_=\" + ( nonce.guid++ ) +\n\t\t\t\t\tuncached;\n\t\t\t}\n\n\t\t\t// Put hash and anti-cache on the URL that will be requested (gh-1732)\n\t\t\ts.url = cacheURL + uncached;\n\n\t\t// Change '%20' to '+' if this is encoded form body content (gh-2658)\n\t\t} else if ( s.data && s.processData &&\n\t\t\t( s.contentType || \"\" ).indexOf( \"application/x-www-form-urlencoded\" ) === 0 ) {\n\t\t\ts.data = s.data.replace( r20, \"+\" );\n\t\t}\n\n\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\tif ( s.ifModified ) {\n\t\t\tif ( jQuery.lastModified[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-Modified-Since\", jQuery.lastModified[ cacheURL ] );\n\t\t\t}\n\t\t\tif ( jQuery.etag[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-None-Match\", jQuery.etag[ cacheURL ] );\n\t\t\t}\n\t\t}\n\n\t\t// Set the correct header, if data is being sent\n\t\tif ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {\n\t\t\tjqXHR.setRequestHeader( \"Content-Type\", s.contentType );\n\t\t}\n\n\t\t// Set the Accepts header for the server, depending on the dataType\n\t\tjqXHR.setRequestHeader(\n\t\t\t\"Accept\",\n\t\t\ts.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?\n\t\t\t\ts.accepts[ s.dataTypes[ 0 ] ] +\n\t\t\t\t\t( s.dataTypes[ 0 ] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\" ) :\n\t\t\t\ts.accepts[ \"*\" ]\n\t\t);\n\n\t\t// Check for headers option\n\t\tfor ( i in s.headers ) {\n\t\t\tjqXHR.setRequestHeader( i, s.headers[ i ] );\n\t\t}\n\n\t\t// Allow custom headers/mimetypes and early abort\n\t\tif ( s.beforeSend &&\n\t\t\t( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) {\n\n\t\t\t// Abort if not done already and return\n\t\t\treturn jqXHR.abort();\n\t\t}\n\n\t\t// Aborting is no longer a cancellation\n\t\tstrAbort = \"abort\";\n\n\t\t// Install callbacks on deferreds\n\t\tcompleteDeferred.add( s.complete );\n\t\tjqXHR.done( s.success );\n\t\tjqXHR.fail( s.error );\n\n\t\t// Get transport\n\t\ttransport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );\n\n\t\t// If no transport, we auto-abort\n\t\tif ( !transport ) {\n\t\t\tdone( -1, \"No Transport\" );\n\t\t} else {\n\t\t\tjqXHR.readyState = 1;\n\n\t\t\t// Send global event\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxSend\", [ jqXHR, s ] );\n\t\t\t}\n\n\t\t\t// If request was aborted inside ajaxSend, stop there\n\t\t\tif ( completed ) {\n\t\t\t\treturn jqXHR;\n\t\t\t}\n\n\t\t\t// Timeout\n\t\t\tif ( s.async && s.timeout > 0 ) {\n\t\t\t\ttimeoutTimer = window.setTimeout( function() {\n\t\t\t\t\tjqXHR.abort( \"timeout\" );\n\t\t\t\t}, s.timeout );\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tcompleted = false;\n\t\t\t\ttransport.send( requestHeaders, done );\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// Rethrow post-completion exceptions\n\t\t\t\tif ( completed ) {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\n\t\t\t\t// Propagate others as results\n\t\t\t\tdone( -1, e );\n\t\t\t}\n\t\t}\n\n\t\t// Callback for when everything is done\n\t\tfunction done( status, nativeStatusText, responses, headers ) {\n\t\t\tvar isSuccess, success, error, response, modified,\n\t\t\t\tstatusText = nativeStatusText;\n\n\t\t\t// Ignore repeat invocations\n\t\t\tif ( completed ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tcompleted = true;\n\n\t\t\t// Clear timeout if it exists\n\t\t\tif ( timeoutTimer ) {\n\t\t\t\twindow.clearTimeout( timeoutTimer );\n\t\t\t}\n\n\t\t\t// Dereference transport for early garbage collection\n\t\t\t// (no matter how long the jqXHR object will be used)\n\t\t\ttransport = undefined;\n\n\t\t\t// Cache response headers\n\t\t\tresponseHeadersString = headers || \"\";\n\n\t\t\t// Set readyState\n\t\t\tjqXHR.readyState = status > 0 ? 4 : 0;\n\n\t\t\t// Determine if successful\n\t\t\tisSuccess = status >= 200 && status < 300 || status === 304;\n\n\t\t\t// Get response data\n\t\t\tif ( responses ) {\n\t\t\t\tresponse = ajaxHandleResponses( s, jqXHR, responses );\n\t\t\t}\n\n\t\t\t// Use a noop converter for missing script but not if jsonp\n\t\t\tif ( !isSuccess &&\n\t\t\t\tjQuery.inArray( \"script\", s.dataTypes ) > -1 &&\n\t\t\t\tjQuery.inArray( \"json\", s.dataTypes ) < 0 ) {\n\t\t\t\ts.converters[ \"text script\" ] = function() {};\n\t\t\t}\n\n\t\t\t// Convert no matter what (that way responseXXX fields are always set)\n\t\t\tresponse = ajaxConvert( s, response, jqXHR, isSuccess );\n\n\t\t\t// If successful, handle type chaining\n\t\t\tif ( isSuccess ) {\n\n\t\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\t\tif ( s.ifModified ) {\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"Last-Modified\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.lastModified[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"etag\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.etag[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// if no content\n\t\t\t\tif ( status === 204 || s.type === \"HEAD\" ) {\n\t\t\t\t\tstatusText = \"nocontent\";\n\n\t\t\t\t// if not modified\n\t\t\t\t} else if ( status === 304 ) {\n\t\t\t\t\tstatusText = \"notmodified\";\n\n\t\t\t\t// If we have data, let's convert it\n\t\t\t\t} else {\n\t\t\t\t\tstatusText = response.state;\n\t\t\t\t\tsuccess = response.data;\n\t\t\t\t\terror = response.error;\n\t\t\t\t\tisSuccess = !error;\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// Extract error from statusText and normalize for non-aborts\n\t\t\t\terror = statusText;\n\t\t\t\tif ( status || !statusText ) {\n\t\t\t\t\tstatusText = \"error\";\n\t\t\t\t\tif ( status < 0 ) {\n\t\t\t\t\t\tstatus = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set data for the fake xhr object\n\t\t\tjqXHR.status = status;\n\t\t\tjqXHR.statusText = ( nativeStatusText || statusText ) + \"\";\n\n\t\t\t// Success/Error\n\t\t\tif ( isSuccess ) {\n\t\t\t\tdeferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );\n\t\t\t} else {\n\t\t\t\tdeferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );\n\t\t\t}\n\n\t\t\t// Status-dependent callbacks\n\t\t\tjqXHR.statusCode( statusCode );\n\t\t\tstatusCode = undefined;\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( isSuccess ? \"ajaxSuccess\" : \"ajaxError\",\n\t\t\t\t\t[ jqXHR, s, isSuccess ? success : error ] );\n\t\t\t}\n\n\t\t\t// Complete\n\t\t\tcompleteDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxComplete\", [ jqXHR, s ] );\n\n\t\t\t\t// Handle the global AJAX counter\n\t\t\t\tif ( !( --jQuery.active ) ) {\n\t\t\t\t\tjQuery.event.trigger( \"ajaxStop\" );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn jqXHR;\n\t},\n\n\tgetJSON: function( url, data, callback ) {\n\t\treturn jQuery.get( url, data, callback, \"json\" );\n\t},\n\n\tgetScript: function( url, callback ) {\n\t\treturn jQuery.get( url, undefined, callback, \"script\" );\n\t}\n} );\n\njQuery.each( [ \"get\", \"post\" ], function( _i, method ) {\n\tjQuery[ method ] = function( url, data, callback, type ) {\n\n\t\t// Shift arguments if data argument was omitted\n\t\tif ( isFunction( data ) ) {\n\t\t\ttype = type || callback;\n\t\t\tcallback = data;\n\t\t\tdata = undefined;\n\t\t}\n\n\t\t// The url can be an options object (which then must have .url)\n\t\treturn jQuery.ajax( jQuery.extend( {\n\t\t\turl: url,\n\t\t\ttype: method,\n\t\t\tdataType: type,\n\t\t\tdata: data,\n\t\t\tsuccess: callback\n\t\t}, jQuery.isPlainObject( url ) && url ) );\n\t};\n} );\n\njQuery.ajaxPrefilter( function( s ) {\n\tvar i;\n\tfor ( i in s.headers ) {\n\t\tif ( i.toLowerCase() === \"content-type\" ) {\n\t\t\ts.contentType = s.headers[ i ] || \"\";\n\t\t}\n\t}\n} );\n\n\njQuery._evalUrl = function( url, options, doc ) {\n\treturn jQuery.ajax( {\n\t\turl: url,\n\n\t\t// Make this explicit, since user can override this through ajaxSetup (trac-11264)\n\t\ttype: \"GET\",\n\t\tdataType: \"script\",\n\t\tcache: true,\n\t\tasync: false,\n\t\tglobal: false,\n\n\t\t// Only evaluate the response if it is successful (gh-4126)\n\t\t// dataFilter is not invoked for failure responses, so using it instead\n\t\t// of the default converter is kludgy but it works.\n\t\tconverters: {\n\t\t\t\"text script\": function() {}\n\t\t},\n\t\tdataFilter: function( response ) {\n\t\t\tjQuery.globalEval( response, options, doc );\n\t\t}\n\t} );\n};\n\n\njQuery.fn.extend( {\n\twrapAll: function( html ) {\n\t\tvar wrap;\n\n\t\tif ( this[ 0 ] ) {\n\t\t\tif ( isFunction( html ) ) {\n\t\t\t\thtml = html.call( this[ 0 ] );\n\t\t\t}\n\n\t\t\t// The elements to wrap the target around\n\t\t\twrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );\n\n\t\t\tif ( this[ 0 ].parentNode ) {\n\t\t\t\twrap.insertBefore( this[ 0 ] );\n\t\t\t}\n\n\t\t\twrap.map( function() {\n\t\t\t\tvar elem = this;\n\n\t\t\t\twhile ( elem.firstElementChild ) {\n\t\t\t\t\telem = elem.firstElementChild;\n\t\t\t\t}\n\n\t\t\t\treturn elem;\n\t\t\t} ).append( this );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\twrapInner: function( html ) {\n\t\tif ( isFunction( html ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).wrapInner( html.call( this, i ) );\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar self = jQuery( this ),\n\t\t\t\tcontents = self.contents();\n\n\t\t\tif ( contents.length ) {\n\t\t\t\tcontents.wrapAll( html );\n\n\t\t\t} else {\n\t\t\t\tself.append( html );\n\t\t\t}\n\t\t} );\n\t},\n\n\twrap: function( html ) {\n\t\tvar htmlIsFunction = isFunction( html );\n\n\t\treturn this.each( function( i ) {\n\t\t\tjQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html );\n\t\t} );\n\t},\n\n\tunwrap: function( selector ) {\n\t\tthis.parent( selector ).not( \"body\" ).each( function() {\n\t\t\tjQuery( this ).replaceWith( this.childNodes );\n\t\t} );\n\t\treturn this;\n\t}\n} );\n\n\njQuery.expr.pseudos.hidden = function( elem ) {\n\treturn !jQuery.expr.pseudos.visible( elem );\n};\njQuery.expr.pseudos.visible = function( elem ) {\n\treturn !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length );\n};\n\n\n\n\njQuery.ajaxSettings.xhr = function() {\n\ttry {\n\t\treturn new window.XMLHttpRequest();\n\t} catch ( e ) {}\n};\n\nvar xhrSuccessStatus = {\n\n\t\t// File protocol always yields status code 0, assume 200\n\t\t0: 200,\n\n\t\t// Support: IE <=9 only\n\t\t// trac-1450: sometimes IE returns 1223 when it should be 204\n\t\t1223: 204\n\t},\n\txhrSupported = jQuery.ajaxSettings.xhr();\n\nsupport.cors = !!xhrSupported && ( \"withCredentials\" in xhrSupported );\nsupport.ajax = xhrSupported = !!xhrSupported;\n\njQuery.ajaxTransport( function( options ) {\n\tvar callback, errorCallback;\n\n\t// Cross domain only allowed if supported through XMLHttpRequest\n\tif ( support.cors || xhrSupported && !options.crossDomain ) {\n\t\treturn {\n\t\t\tsend: function( headers, complete ) {\n\t\t\t\tvar i,\n\t\t\t\t\txhr = options.xhr();\n\n\t\t\t\txhr.open(\n\t\t\t\t\toptions.type,\n\t\t\t\t\toptions.url,\n\t\t\t\t\toptions.async,\n\t\t\t\t\toptions.username,\n\t\t\t\t\toptions.password\n\t\t\t\t);\n\n\t\t\t\t// Apply custom fields if provided\n\t\t\t\tif ( options.xhrFields ) {\n\t\t\t\t\tfor ( i in options.xhrFields ) {\n\t\t\t\t\t\txhr[ i ] = options.xhrFields[ i ];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Override mime type if needed\n\t\t\t\tif ( options.mimeType && xhr.overrideMimeType ) {\n\t\t\t\t\txhr.overrideMimeType( options.mimeType );\n\t\t\t\t}\n\n\t\t\t\t// X-Requested-With header\n\t\t\t\t// For cross-domain requests, seeing as conditions for a preflight are\n\t\t\t\t// akin to a jigsaw puzzle, we simply never set it to be sure.\n\t\t\t\t// (it can always be set on a per-request basis or even using ajaxSetup)\n\t\t\t\t// For same-domain requests, won't change header if already provided.\n\t\t\t\tif ( !options.crossDomain && !headers[ \"X-Requested-With\" ] ) {\n\t\t\t\t\theaders[ \"X-Requested-With\" ] = \"XMLHttpRequest\";\n\t\t\t\t}\n\n\t\t\t\t// Set headers\n\t\t\t\tfor ( i in headers ) {\n\t\t\t\t\txhr.setRequestHeader( i, headers[ i ] );\n\t\t\t\t}\n\n\t\t\t\t// Callback\n\t\t\t\tcallback = function( type ) {\n\t\t\t\t\treturn function() {\n\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\tcallback = errorCallback = xhr.onload =\n\t\t\t\t\t\t\t\txhr.onerror = xhr.onabort = xhr.ontimeout =\n\t\t\t\t\t\t\t\t\txhr.onreadystatechange = null;\n\n\t\t\t\t\t\t\tif ( type === \"abort\" ) {\n\t\t\t\t\t\t\t\txhr.abort();\n\t\t\t\t\t\t\t} else if ( type === \"error\" ) {\n\n\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t// On a manual native abort, IE9 throws\n\t\t\t\t\t\t\t\t// errors on any property access that is not readyState\n\t\t\t\t\t\t\t\tif ( typeof xhr.status !== \"number\" ) {\n\t\t\t\t\t\t\t\t\tcomplete( 0, \"error\" );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tcomplete(\n\n\t\t\t\t\t\t\t\t\t\t// File: protocol always yields status 0; see trac-8605, trac-14207\n\t\t\t\t\t\t\t\t\t\txhr.status,\n\t\t\t\t\t\t\t\t\t\txhr.statusText\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tcomplete(\n\t\t\t\t\t\t\t\t\txhrSuccessStatus[ xhr.status ] || xhr.status,\n\t\t\t\t\t\t\t\t\txhr.statusText,\n\n\t\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t\t// IE9 has no XHR2 but throws on binary (trac-11426)\n\t\t\t\t\t\t\t\t\t// For XHR2 non-text, let the caller handle it (gh-2498)\n\t\t\t\t\t\t\t\t\t( xhr.responseType || \"text\" ) !== \"text\"  ||\n\t\t\t\t\t\t\t\t\ttypeof xhr.responseText !== \"string\" ?\n\t\t\t\t\t\t\t\t\t\t{ binary: xhr.response } :\n\t\t\t\t\t\t\t\t\t\t{ text: xhr.responseText },\n\t\t\t\t\t\t\t\t\txhr.getAllResponseHeaders()\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t};\n\n\t\t\t\t// Listen to events\n\t\t\t\txhr.onload = callback();\n\t\t\t\terrorCallback = xhr.onerror = xhr.ontimeout = callback( \"error\" );\n\n\t\t\t\t// Support: IE 9 only\n\t\t\t\t// Use onreadystatechange to replace onabort\n\t\t\t\t// to handle uncaught aborts\n\t\t\t\tif ( xhr.onabort !== undefined ) {\n\t\t\t\t\txhr.onabort = errorCallback;\n\t\t\t\t} else {\n\t\t\t\t\txhr.onreadystatechange = function() {\n\n\t\t\t\t\t\t// Check readyState before timeout as it changes\n\t\t\t\t\t\tif ( xhr.readyState === 4 ) {\n\n\t\t\t\t\t\t\t// Allow onerror to be called first,\n\t\t\t\t\t\t\t// but that will not handle a native abort\n\t\t\t\t\t\t\t// Also, save errorCallback to a variable\n\t\t\t\t\t\t\t// as xhr.onerror cannot be accessed\n\t\t\t\t\t\t\twindow.setTimeout( function() {\n\t\t\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\t\t\terrorCallback();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\t// Create the abort callback\n\t\t\t\tcallback = callback( \"abort\" );\n\n\t\t\t\ttry {\n\n\t\t\t\t\t// Do send the request (this may raise an exception)\n\t\t\t\t\txhr.send( options.hasContent && options.data || null );\n\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t// trac-14683: Only rethrow if this hasn't been notified as an error yet\n\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\tthrow e;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\n\n\n\n// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)\njQuery.ajaxPrefilter( function( s ) {\n\tif ( s.crossDomain ) {\n\t\ts.contents.script = false;\n\t}\n} );\n\n// Install script dataType\njQuery.ajaxSetup( {\n\taccepts: {\n\t\tscript: \"text/javascript, application/javascript, \" +\n\t\t\t\"application/ecmascript, application/x-ecmascript\"\n\t},\n\tcontents: {\n\t\tscript: /\\b(?:java|ecma)script\\b/\n\t},\n\tconverters: {\n\t\t\"text script\": function( text ) {\n\t\t\tjQuery.globalEval( text );\n\t\t\treturn text;\n\t\t}\n\t}\n} );\n\n// Handle cache's special case and crossDomain\njQuery.ajaxPrefilter( \"script\", function( s ) {\n\tif ( s.cache === undefined ) {\n\t\ts.cache = false;\n\t}\n\tif ( s.crossDomain ) {\n\t\ts.type = \"GET\";\n\t}\n} );\n\n// Bind script tag hack transport\njQuery.ajaxTransport( \"script\", function( s ) {\n\n\t// This transport only deals with cross domain or forced-by-attrs requests\n\tif ( s.crossDomain || s.scriptAttrs ) {\n\t\tvar script, callback;\n\t\treturn {\n\t\t\tsend: function( _, complete ) {\n\t\t\t\tscript = jQuery( \"<script>\" )\n\t\t\t\t\t.attr( s.scriptAttrs || {} )\n\t\t\t\t\t.prop( { charset: s.scriptCharset, src: s.url } )\n\t\t\t\t\t.on( \"load error\", callback = function( evt ) {\n\t\t\t\t\t\tscript.remove();\n\t\t\t\t\t\tcallback = null;\n\t\t\t\t\t\tif ( evt ) {\n\t\t\t\t\t\t\tcomplete( evt.type === \"error\" ? 404 : 200, evt.type );\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\n\t\t\t\t// Use native DOM manipulation to avoid our domManip AJAX trickery\n\t\t\t\tdocument.head.appendChild( script[ 0 ] );\n\t\t\t},\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\n\n\n\nvar oldCallbacks = [],\n\trjsonp = /(=)\\?(?=&|$)|\\?\\?/;\n\n// Default jsonp settings\njQuery.ajaxSetup( {\n\tjsonp: \"callback\",\n\tjsonpCallback: function() {\n\t\tvar callback = oldCallbacks.pop() || ( jQuery.expando + \"_\" + ( nonce.guid++ ) );\n\t\tthis[ callback ] = true;\n\t\treturn callback;\n\t}\n} );\n\n// Detect, normalize options and install callbacks for jsonp requests\njQuery.ajaxPrefilter( \"json jsonp\", function( s, originalSettings, jqXHR ) {\n\n\tvar callbackName, overwritten, responseContainer,\n\t\tjsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?\n\t\t\t\"url\" :\n\t\t\ttypeof s.data === \"string\" &&\n\t\t\t\t( s.contentType || \"\" )\n\t\t\t\t\t.indexOf( \"application/x-www-form-urlencoded\" ) === 0 &&\n\t\t\t\trjsonp.test( s.data ) && \"data\"\n\t\t);\n\n\t// Handle iff the expected data type is \"jsonp\" or we have a parameter to set\n\tif ( jsonProp || s.dataTypes[ 0 ] === \"jsonp\" ) {\n\n\t\t// Get callback name, remembering preexisting value associated with it\n\t\tcallbackName = s.jsonpCallback = isFunction( s.jsonpCallback ) ?\n\t\t\ts.jsonpCallback() :\n\t\t\ts.jsonpCallback;\n\n\t\t// Insert callback into url or form data\n\t\tif ( jsonProp ) {\n\t\t\ts[ jsonProp ] = s[ jsonProp ].replace( rjsonp, \"$1\" + callbackName );\n\t\t} else if ( s.jsonp !== false ) {\n\t\t\ts.url += ( rquery.test( s.url ) ? \"&\" : \"?\" ) + s.jsonp + \"=\" + callbackName;\n\t\t}\n\n\t\t// Use data converter to retrieve json after script execution\n\t\ts.converters[ \"script json\" ] = function() {\n\t\t\tif ( !responseContainer ) {\n\t\t\t\tjQuery.error( callbackName + \" was not called\" );\n\t\t\t}\n\t\t\treturn responseContainer[ 0 ];\n\t\t};\n\n\t\t// Force json dataType\n\t\ts.dataTypes[ 0 ] = \"json\";\n\n\t\t// Install callback\n\t\toverwritten = window[ callbackName ];\n\t\twindow[ callbackName ] = function() {\n\t\t\tresponseContainer = arguments;\n\t\t};\n\n\t\t// Clean-up function (fires after converters)\n\t\tjqXHR.always( function() {\n\n\t\t\t// If previous value didn't exist - remove it\n\t\t\tif ( overwritten === undefined ) {\n\t\t\t\tjQuery( window ).removeProp( callbackName );\n\n\t\t\t// Otherwise restore preexisting value\n\t\t\t} else {\n\t\t\t\twindow[ callbackName ] = overwritten;\n\t\t\t}\n\n\t\t\t// Save back as free\n\t\t\tif ( s[ callbackName ] ) {\n\n\t\t\t\t// Make sure that re-using the options doesn't screw things around\n\t\t\t\ts.jsonpCallback = originalSettings.jsonpCallback;\n\n\t\t\t\t// Save the callback name for future use\n\t\t\t\toldCallbacks.push( callbackName );\n\t\t\t}\n\n\t\t\t// Call if it was a function and we have a response\n\t\t\tif ( responseContainer && isFunction( overwritten ) ) {\n\t\t\t\toverwritten( responseContainer[ 0 ] );\n\t\t\t}\n\n\t\t\tresponseContainer = overwritten = undefined;\n\t\t} );\n\n\t\t// Delegate to script\n\t\treturn \"script\";\n\t}\n} );\n\n\n\n\n// Support: Safari 8 only\n// In Safari 8 documents created via document.implementation.createHTMLDocument\n// collapse sibling forms: the second one becomes a child of the first one.\n// Because of that, this security measure has to be disabled in Safari 8.\n// https://bugs.webkit.org/show_bug.cgi?id=137337\nsupport.createHTMLDocument = ( function() {\n\tvar body = document.implementation.createHTMLDocument( \"\" ).body;\n\tbody.innerHTML = \"<form></form><form></form>\";\n\treturn body.childNodes.length === 2;\n} )();\n\n\n// Argument \"data\" should be string of html\n// context (optional): If specified, the fragment will be created in this context,\n// defaults to document\n// keepScripts (optional): If true, will include scripts passed in the html string\njQuery.parseHTML = function( data, context, keepScripts ) {\n\tif ( typeof data !== \"string\" ) {\n\t\treturn [];\n\t}\n\tif ( typeof context === \"boolean\" ) {\n\t\tkeepScripts = context;\n\t\tcontext = false;\n\t}\n\n\tvar base, parsed, scripts;\n\n\tif ( !context ) {\n\n\t\t// Stop scripts or inline event handlers from being executed immediately\n\t\t// by using document.implementation\n\t\tif ( support.createHTMLDocument ) {\n\t\t\tcontext = document.implementation.createHTMLDocument( \"\" );\n\n\t\t\t// Set the base href for the created document\n\t\t\t// so any parsed elements with URLs\n\t\t\t// are based on the document's URL (gh-2965)\n\t\t\tbase = context.createElement( \"base\" );\n\t\t\tbase.href = document.location.href;\n\t\t\tcontext.head.appendChild( base );\n\t\t} else {\n\t\t\tcontext = document;\n\t\t}\n\t}\n\n\tparsed = rsingleTag.exec( data );\n\tscripts = !keepScripts && [];\n\n\t// Single tag\n\tif ( parsed ) {\n\t\treturn [ context.createElement( parsed[ 1 ] ) ];\n\t}\n\n\tparsed = buildFragment( [ data ], context, scripts );\n\n\tif ( scripts && scripts.length ) {\n\t\tjQuery( scripts ).remove();\n\t}\n\n\treturn jQuery.merge( [], parsed.childNodes );\n};\n\n\n/**\n * Load a url into a page\n */\njQuery.fn.load = function( url, params, callback ) {\n\tvar selector, type, response,\n\t\tself = this,\n\t\toff = url.indexOf( \" \" );\n\n\tif ( off > -1 ) {\n\t\tselector = stripAndCollapse( url.slice( off ) );\n\t\turl = url.slice( 0, off );\n\t}\n\n\t// If it's a function\n\tif ( isFunction( params ) ) {\n\n\t\t// We assume that it's the callback\n\t\tcallback = params;\n\t\tparams = undefined;\n\n\t// Otherwise, build a param string\n\t} else if ( params && typeof params === \"object\" ) {\n\t\ttype = \"POST\";\n\t}\n\n\t// If we have elements to modify, make the request\n\tif ( self.length > 0 ) {\n\t\tjQuery.ajax( {\n\t\t\turl: url,\n\n\t\t\t// If \"type\" variable is undefined, then \"GET\" method will be used.\n\t\t\t// Make value of this field explicit since\n\t\t\t// user can override it through ajaxSetup method\n\t\t\ttype: type || \"GET\",\n\t\t\tdataType: \"html\",\n\t\t\tdata: params\n\t\t} ).done( function( responseText ) {\n\n\t\t\t// Save response for use in complete callback\n\t\t\tresponse = arguments;\n\n\t\t\tself.html( selector ?\n\n\t\t\t\t// If a selector was specified, locate the right elements in a dummy div\n\t\t\t\t// Exclude scripts to avoid IE 'Permission Denied' errors\n\t\t\t\tjQuery( \"<div>\" ).append( jQuery.parseHTML( responseText ) ).find( selector ) :\n\n\t\t\t\t// Otherwise use the full result\n\t\t\t\tresponseText );\n\n\t\t// If the request succeeds, this function gets \"data\", \"status\", \"jqXHR\"\n\t\t// but they are ignored because response was set above.\n\t\t// If it fails, this function gets \"jqXHR\", \"status\", \"error\"\n\t\t} ).always( callback && function( jqXHR, status ) {\n\t\t\tself.each( function() {\n\t\t\t\tcallback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] );\n\t\t\t} );\n\t\t} );\n\t}\n\n\treturn this;\n};\n\n\n\n\njQuery.expr.pseudos.animated = function( elem ) {\n\treturn jQuery.grep( jQuery.timers, function( fn ) {\n\t\treturn elem === fn.elem;\n\t} ).length;\n};\n\n\n\n\njQuery.offset = {\n\tsetOffset: function( elem, options, i ) {\n\t\tvar curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,\n\t\t\tposition = jQuery.css( elem, \"position\" ),\n\t\t\tcurElem = jQuery( elem ),\n\t\t\tprops = {};\n\n\t\t// Set position first, in-case top/left are set even on static elem\n\t\tif ( position === \"static\" ) {\n\t\t\telem.style.position = \"relative\";\n\t\t}\n\n\t\tcurOffset = curElem.offset();\n\t\tcurCSSTop = jQuery.css( elem, \"top\" );\n\t\tcurCSSLeft = jQuery.css( elem, \"left\" );\n\t\tcalculatePosition = ( position === \"absolute\" || position === \"fixed\" ) &&\n\t\t\t( curCSSTop + curCSSLeft ).indexOf( \"auto\" ) > -1;\n\n\t\t// Need to be able to calculate position if either\n\t\t// top or left is auto and position is either absolute or fixed\n\t\tif ( calculatePosition ) {\n\t\t\tcurPosition = curElem.position();\n\t\t\tcurTop = curPosition.top;\n\t\t\tcurLeft = curPosition.left;\n\n\t\t} else {\n\t\t\tcurTop = parseFloat( curCSSTop ) || 0;\n\t\t\tcurLeft = parseFloat( curCSSLeft ) || 0;\n\t\t}\n\n\t\tif ( isFunction( options ) ) {\n\n\t\t\t// Use jQuery.extend here to allow modification of coordinates argument (gh-1848)\n\t\t\toptions = options.call( elem, i, jQuery.extend( {}, curOffset ) );\n\t\t}\n\n\t\tif ( options.top != null ) {\n\t\t\tprops.top = ( options.top - curOffset.top ) + curTop;\n\t\t}\n\t\tif ( options.left != null ) {\n\t\t\tprops.left = ( options.left - curOffset.left ) + curLeft;\n\t\t}\n\n\t\tif ( \"using\" in options ) {\n\t\t\toptions.using.call( elem, props );\n\n\t\t} else {\n\t\t\tcurElem.css( props );\n\t\t}\n\t}\n};\n\njQuery.fn.extend( {\n\n\t// offset() relates an element's border box to the document origin\n\toffset: function( options ) {\n\n\t\t// Preserve chaining for setter\n\t\tif ( arguments.length ) {\n\t\t\treturn options === undefined ?\n\t\t\t\tthis :\n\t\t\t\tthis.each( function( i ) {\n\t\t\t\t\tjQuery.offset.setOffset( this, options, i );\n\t\t\t\t} );\n\t\t}\n\n\t\tvar rect, win,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !elem ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Return zeros for disconnected and hidden (display: none) elements (gh-2310)\n\t\t// Support: IE <=11 only\n\t\t// Running getBoundingClientRect on a\n\t\t// disconnected node in IE throws an error\n\t\tif ( !elem.getClientRects().length ) {\n\t\t\treturn { top: 0, left: 0 };\n\t\t}\n\n\t\t// Get document-relative position by adding viewport scroll to viewport-relative gBCR\n\t\trect = elem.getBoundingClientRect();\n\t\twin = elem.ownerDocument.defaultView;\n\t\treturn {\n\t\t\ttop: rect.top + win.pageYOffset,\n\t\t\tleft: rect.left + win.pageXOffset\n\t\t};\n\t},\n\n\t// position() relates an element's margin box to its offset parent's padding box\n\t// This corresponds to the behavior of CSS absolute positioning\n\tposition: function() {\n\t\tif ( !this[ 0 ] ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar offsetParent, offset, doc,\n\t\t\telem = this[ 0 ],\n\t\t\tparentOffset = { top: 0, left: 0 };\n\n\t\t// position:fixed elements are offset from the viewport, which itself always has zero offset\n\t\tif ( jQuery.css( elem, \"position\" ) === \"fixed\" ) {\n\n\t\t\t// Assume position:fixed implies availability of getBoundingClientRect\n\t\t\toffset = elem.getBoundingClientRect();\n\n\t\t} else {\n\t\t\toffset = this.offset();\n\n\t\t\t// Account for the *real* offset parent, which can be the document or its root element\n\t\t\t// when a statically positioned element is identified\n\t\t\tdoc = elem.ownerDocument;\n\t\t\toffsetParent = elem.offsetParent || doc.documentElement;\n\t\t\twhile ( offsetParent &&\n\t\t\t\t( offsetParent === doc.body || offsetParent === doc.documentElement ) &&\n\t\t\t\tjQuery.css( offsetParent, \"position\" ) === \"static\" ) {\n\n\t\t\t\toffsetParent = offsetParent.parentNode;\n\t\t\t}\n\t\t\tif ( offsetParent && offsetParent !== elem && offsetParent.nodeType === 1 ) {\n\n\t\t\t\t// Incorporate borders into its offset, since they are outside its content origin\n\t\t\t\tparentOffset = jQuery( offsetParent ).offset();\n\t\t\t\tparentOffset.top += jQuery.css( offsetParent, \"borderTopWidth\", true );\n\t\t\t\tparentOffset.left += jQuery.css( offsetParent, \"borderLeftWidth\", true );\n\t\t\t}\n\t\t}\n\n\t\t// Subtract parent offsets and element margins\n\t\treturn {\n\t\t\ttop: offset.top - parentOffset.top - jQuery.css( elem, \"marginTop\", true ),\n\t\t\tleft: offset.left - parentOffset.left - jQuery.css( elem, \"marginLeft\", true )\n\t\t};\n\t},\n\n\t// This method will return documentElement in the following cases:\n\t// 1) For the element inside the iframe without offsetParent, this method will return\n\t//    documentElement of the parent window\n\t// 2) For the hidden or detached element\n\t// 3) For body or html element, i.e. in case of the html node - it will return itself\n\t//\n\t// but those exceptions were never presented as a real life use-cases\n\t// and might be considered as more preferable results.\n\t//\n\t// This logic, however, is not guaranteed and can change at any point in the future\n\toffsetParent: function() {\n\t\treturn this.map( function() {\n\t\t\tvar offsetParent = this.offsetParent;\n\n\t\t\twhile ( offsetParent && jQuery.css( offsetParent, \"position\" ) === \"static\" ) {\n\t\t\t\toffsetParent = offsetParent.offsetParent;\n\t\t\t}\n\n\t\t\treturn offsetParent || documentElement;\n\t\t} );\n\t}\n} );\n\n// Create scrollLeft and scrollTop methods\njQuery.each( { scrollLeft: \"pageXOffset\", scrollTop: \"pageYOffset\" }, function( method, prop ) {\n\tvar top = \"pageYOffset\" === prop;\n\n\tjQuery.fn[ method ] = function( val ) {\n\t\treturn access( this, function( elem, method, val ) {\n\n\t\t\t// Coalesce documents and windows\n\t\t\tvar win;\n\t\t\tif ( isWindow( elem ) ) {\n\t\t\t\twin = elem;\n\t\t\t} else if ( elem.nodeType === 9 ) {\n\t\t\t\twin = elem.defaultView;\n\t\t\t}\n\n\t\t\tif ( val === undefined ) {\n\t\t\t\treturn win ? win[ prop ] : elem[ method ];\n\t\t\t}\n\n\t\t\tif ( win ) {\n\t\t\t\twin.scrollTo(\n\t\t\t\t\t!top ? val : win.pageXOffset,\n\t\t\t\t\ttop ? val : win.pageYOffset\n\t\t\t\t);\n\n\t\t\t} else {\n\t\t\t\telem[ method ] = val;\n\t\t\t}\n\t\t}, method, val, arguments.length );\n\t};\n} );\n\n// Support: Safari <=7 - 9.1, Chrome <=37 - 49\n// Add the top/left cssHooks using jQuery.fn.position\n// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084\n// Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347\n// getComputedStyle returns percent when specified for top/left/bottom/right;\n// rather than make the css module depend on the offset module, just check for it here\njQuery.each( [ \"top\", \"left\" ], function( _i, prop ) {\n\tjQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,\n\t\tfunction( elem, computed ) {\n\t\t\tif ( computed ) {\n\t\t\t\tcomputed = curCSS( elem, prop );\n\n\t\t\t\t// If curCSS returns percentage, fallback to offset\n\t\t\t\treturn rnumnonpx.test( computed ) ?\n\t\t\t\t\tjQuery( elem ).position()[ prop ] + \"px\" :\n\t\t\t\t\tcomputed;\n\t\t\t}\n\t\t}\n\t);\n} );\n\n\n// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods\njQuery.each( { Height: \"height\", Width: \"width\" }, function( name, type ) {\n\tjQuery.each( {\n\t\tpadding: \"inner\" + name,\n\t\tcontent: type,\n\t\t\"\": \"outer\" + name\n\t}, function( defaultExtra, funcName ) {\n\n\t\t// Margin is only for outerHeight, outerWidth\n\t\tjQuery.fn[ funcName ] = function( margin, value ) {\n\t\t\tvar chainable = arguments.length && ( defaultExtra || typeof margin !== \"boolean\" ),\n\t\t\t\textra = defaultExtra || ( margin === true || value === true ? \"margin\" : \"border\" );\n\n\t\t\treturn access( this, function( elem, type, value ) {\n\t\t\t\tvar doc;\n\n\t\t\t\tif ( isWindow( elem ) ) {\n\n\t\t\t\t\t// $( window ).outerWidth/Height return w/h including scrollbars (gh-1729)\n\t\t\t\t\treturn funcName.indexOf( \"outer\" ) === 0 ?\n\t\t\t\t\t\telem[ \"inner\" + name ] :\n\t\t\t\t\t\telem.document.documentElement[ \"client\" + name ];\n\t\t\t\t}\n\n\t\t\t\t// Get document width or height\n\t\t\t\tif ( elem.nodeType === 9 ) {\n\t\t\t\t\tdoc = elem.documentElement;\n\n\t\t\t\t\t// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],\n\t\t\t\t\t// whichever is greatest\n\t\t\t\t\treturn Math.max(\n\t\t\t\t\t\telem.body[ \"scroll\" + name ], doc[ \"scroll\" + name ],\n\t\t\t\t\t\telem.body[ \"offset\" + name ], doc[ \"offset\" + name ],\n\t\t\t\t\t\tdoc[ \"client\" + name ]\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn value === undefined ?\n\n\t\t\t\t\t// Get width or height on the element, requesting but not forcing parseFloat\n\t\t\t\t\tjQuery.css( elem, type, extra ) :\n\n\t\t\t\t\t// Set width or height on the element\n\t\t\t\t\tjQuery.style( elem, type, value, extra );\n\t\t\t}, type, chainable ? margin : undefined, chainable );\n\t\t};\n\t} );\n} );\n\n\njQuery.each( [\n\t\"ajaxStart\",\n\t\"ajaxStop\",\n\t\"ajaxComplete\",\n\t\"ajaxError\",\n\t\"ajaxSuccess\",\n\t\"ajaxSend\"\n], function( _i, type ) {\n\tjQuery.fn[ type ] = function( fn ) {\n\t\treturn this.on( type, fn );\n\t};\n} );\n\n\n\n\njQuery.fn.extend( {\n\n\tbind: function( types, data, fn ) {\n\t\treturn this.on( types, null, data, fn );\n\t},\n\tunbind: function( types, fn ) {\n\t\treturn this.off( types, null, fn );\n\t},\n\n\tdelegate: function( selector, types, data, fn ) {\n\t\treturn this.on( types, selector, data, fn );\n\t},\n\tundelegate: function( selector, types, fn ) {\n\n\t\t// ( namespace ) or ( selector, types [, fn] )\n\t\treturn arguments.length === 1 ?\n\t\t\tthis.off( selector, \"**\" ) :\n\t\t\tthis.off( types, selector || \"**\", fn );\n\t},\n\n\thover: function( fnOver, fnOut ) {\n\t\treturn this\n\t\t\t.on( \"mouseenter\", fnOver )\n\t\t\t.on( \"mouseleave\", fnOut || fnOver );\n\t}\n} );\n\njQuery.each(\n\t( \"blur focus focusin focusout resize scroll click dblclick \" +\n\t\"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave \" +\n\t\"change select submit keydown keypress keyup contextmenu\" ).split( \" \" ),\n\tfunction( _i, name ) {\n\n\t\t// Handle event binding\n\t\tjQuery.fn[ name ] = function( data, fn ) {\n\t\t\treturn arguments.length > 0 ?\n\t\t\t\tthis.on( name, null, data, fn ) :\n\t\t\t\tthis.trigger( name );\n\t\t};\n\t}\n);\n\n\n\n\n// Support: Android <=4.0 only\n// Make sure we trim BOM and NBSP\n// Require that the \"whitespace run\" starts from a non-whitespace\n// to avoid O(N^2) behavior when the engine would try matching \"\\s+$\" at each space position.\nvar rtrim = /^[\\s\\uFEFF\\xA0]+|([^\\s\\uFEFF\\xA0])[\\s\\uFEFF\\xA0]+$/g;\n\n// Bind a function to a context, optionally partially applying any\n// arguments.\n// jQuery.proxy is deprecated to promote standards (specifically Function#bind)\n// However, it is not slated for removal any time soon\njQuery.proxy = function( fn, context ) {\n\tvar tmp, args, proxy;\n\n\tif ( typeof context === \"string\" ) {\n\t\ttmp = fn[ context ];\n\t\tcontext = fn;\n\t\tfn = tmp;\n\t}\n\n\t// Quick check to determine if target is callable, in the spec\n\t// this throws a TypeError, but we will just return undefined.\n\tif ( !isFunction( fn ) ) {\n\t\treturn undefined;\n\t}\n\n\t// Simulated bind\n\targs = slice.call( arguments, 2 );\n\tproxy = function() {\n\t\treturn fn.apply( context || this, args.concat( slice.call( arguments ) ) );\n\t};\n\n\t// Set the guid of unique handler to the same of original handler, so it can be removed\n\tproxy.guid = fn.guid = fn.guid || jQuery.guid++;\n\n\treturn proxy;\n};\n\njQuery.holdReady = function( hold ) {\n\tif ( hold ) {\n\t\tjQuery.readyWait++;\n\t} else {\n\t\tjQuery.ready( true );\n\t}\n};\njQuery.isArray = Array.isArray;\njQuery.parseJSON = JSON.parse;\njQuery.nodeName = nodeName;\njQuery.isFunction = isFunction;\njQuery.isWindow = isWindow;\njQuery.camelCase = camelCase;\njQuery.type = toType;\n\njQuery.now = Date.now;\n\njQuery.isNumeric = function( obj ) {\n\n\t// As of jQuery 3.0, isNumeric is limited to\n\t// strings and numbers (primitives or objects)\n\t// that can be coerced to finite numbers (gh-2662)\n\tvar type = jQuery.type( obj );\n\treturn ( type === \"number\" || type === \"string\" ) &&\n\n\t\t// parseFloat NaNs numeric-cast false positives (\"\")\n\t\t// ...but misinterprets leading-number strings, particularly hex literals (\"0x...\")\n\t\t// subtraction forces infinities to NaN\n\t\t!isNaN( obj - parseFloat( obj ) );\n};\n\njQuery.trim = function( text ) {\n\treturn text == null ?\n\t\t\"\" :\n\t\t( text + \"\" ).replace( rtrim, \"$1\" );\n};\n\n\n\n// Register as a named AMD module, since jQuery can be concatenated with other\n// files that may use define, but not via a proper concatenation script that\n// understands anonymous AMD modules. A named AMD is safest and most robust\n// way to register. Lowercase jquery is used because AMD module names are\n// derived from file names, and jQuery is normally delivered in a lowercase\n// file name. Do this after creating the global so that if an AMD module wants\n// to call noConflict to hide this version of jQuery, it will work.\n\n// Note that for maximum portability, libraries that are not jQuery should\n// declare themselves as anonymous modules, and avoid setting a global if an\n// AMD loader is present. jQuery is a special case. For more information, see\n// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon\n\nif ( typeof define === \"function\" && define.amd ) {\n\tdefine( \"jquery\", [], function() {\n\t\treturn jQuery;\n\t} );\n}\n\n\n\n\nvar\n\n\t// Map over jQuery in case of overwrite\n\t_jQuery = window.jQuery,\n\n\t// Map over the $ in case of overwrite\n\t_$ = window.$;\n\njQuery.noConflict = function( deep ) {\n\tif ( window.$ === jQuery ) {\n\t\twindow.$ = _$;\n\t}\n\n\tif ( deep && window.jQuery === jQuery ) {\n\t\twindow.jQuery = _jQuery;\n\t}\n\n\treturn jQuery;\n};\n\n// Expose jQuery and $ identifiers, even in AMD\n// (trac-7102#comment:10, https://github.com/jquery/jquery/pull/557)\n// and CommonJS for browser emulators (trac-13566)\nif ( typeof noGlobal === \"undefined\" ) {\n\twindow.jQuery = window.$ = jQuery;\n}\n\n\n\n\nreturn jQuery;\n} );\n","'use strict';\n\nvar _barcodes = require('./barcodes/');\n\nvar _barcodes2 = _interopRequireDefault(_barcodes);\n\nvar _merge = require('./help/merge.js');\n\nvar _merge2 = _interopRequireDefault(_merge);\n\nvar _linearizeEncodings = require('./help/linearizeEncodings.js');\n\nvar _linearizeEncodings2 = _interopRequireDefault(_linearizeEncodings);\n\nvar _fixOptions = require('./help/fixOptions.js');\n\nvar _fixOptions2 = _interopRequireDefault(_fixOptions);\n\nvar _getRenderProperties = require('./help/getRenderProperties.js');\n\nvar _getRenderProperties2 = _interopRequireDefault(_getRenderProperties);\n\nvar _optionsFromStrings = require('./help/optionsFromStrings.js');\n\nvar _optionsFromStrings2 = _interopRequireDefault(_optionsFromStrings);\n\nvar _ErrorHandler = require('./exceptions/ErrorHandler.js');\n\nvar _ErrorHandler2 = _interopRequireDefault(_ErrorHandler);\n\nvar _exceptions = require('./exceptions/exceptions.js');\n\nvar _defaults = require('./options/defaults.js');\n\nvar _defaults2 = _interopRequireDefault(_defaults);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n// The protype of the object returned from the JsBarcode() call\n\n\n// Help functions\nvar API = function API() {};\n\n// The first call of the library API\n// Will return an object with all barcodes calls and the data that is used\n// by the renderers\n\n\n// Default values\n\n\n// Exceptions\n// Import all the barcodes\nvar JsBarcode = function JsBarcode(element, text, options) {\n\tvar api = new API();\n\n\tif (typeof element === \"undefined\") {\n\t\tthrow Error(\"No element to render on was provided.\");\n\t}\n\n\t// Variables that will be pased through the API calls\n\tapi._renderProperties = (0, _getRenderProperties2.default)(element);\n\tapi._encodings = [];\n\tapi._options = _defaults2.default;\n\tapi._errorHandler = new _ErrorHandler2.default(api);\n\n\t// If text is set, use the simple syntax (render the barcode directly)\n\tif (typeof text !== \"undefined\") {\n\t\toptions = options || {};\n\n\t\tif (!options.format) {\n\t\t\toptions.format = autoSelectBarcode();\n\t\t}\n\n\t\tapi.options(options)[options.format](text, options).render();\n\t}\n\n\treturn api;\n};\n\n// To make tests work TODO: remove\nJsBarcode.getModule = function (name) {\n\treturn _barcodes2.default[name];\n};\n\n// Register all barcodes\nfor (var name in _barcodes2.default) {\n\tif (_barcodes2.default.hasOwnProperty(name)) {\n\t\t// Security check if the propery is a prototype property\n\t\tregisterBarcode(_barcodes2.default, name);\n\t}\n}\nfunction registerBarcode(barcodes, name) {\n\tAPI.prototype[name] = API.prototype[name.toUpperCase()] = API.prototype[name.toLowerCase()] = function (text, options) {\n\t\tvar api = this;\n\t\treturn api._errorHandler.wrapBarcodeCall(function () {\n\t\t\t// Ensure text is options.text\n\t\t\toptions.text = typeof options.text === 'undefined' ? undefined : '' + options.text;\n\n\t\t\tvar newOptions = (0, _merge2.default)(api._options, options);\n\t\t\tnewOptions = (0, _optionsFromStrings2.default)(newOptions);\n\t\t\tvar Encoder = barcodes[name];\n\t\t\tvar encoded = encode(text, Encoder, newOptions);\n\t\t\tapi._encodings.push(encoded);\n\n\t\t\treturn api;\n\t\t});\n\t};\n}\n\n// encode() handles the Encoder call and builds the binary string to be rendered\nfunction encode(text, Encoder, options) {\n\t// Ensure that text is a string\n\ttext = \"\" + text;\n\n\tvar encoder = new Encoder(text, options);\n\n\t// If the input is not valid for the encoder, throw error.\n\t// If the valid callback option is set, call it instead of throwing error\n\tif (!encoder.valid()) {\n\t\tthrow new _exceptions.InvalidInputException(encoder.constructor.name, text);\n\t}\n\n\t// Make a request for the binary data (and other infromation) that should be rendered\n\tvar encoded = encoder.encode();\n\n\t// Encodings can be nestled like [[1-1, 1-2], 2, [3-1, 3-2]\n\t// Convert to [1-1, 1-2, 2, 3-1, 3-2]\n\tencoded = (0, _linearizeEncodings2.default)(encoded);\n\n\t// Merge\n\tfor (var i = 0; i < encoded.length; i++) {\n\t\tencoded[i].options = (0, _merge2.default)(options, encoded[i].options);\n\t}\n\n\treturn encoded;\n}\n\nfunction autoSelectBarcode() {\n\t// If CODE128 exists. Use it\n\tif (_barcodes2.default[\"CODE128\"]) {\n\t\treturn \"CODE128\";\n\t}\n\n\t// Else, take the first (probably only) barcode\n\treturn Object.keys(_barcodes2.default)[0];\n}\n\n// Sets global encoder options\n// Added to the api by the JsBarcode function\nAPI.prototype.options = function (options) {\n\tthis._options = (0, _merge2.default)(this._options, options);\n\treturn this;\n};\n\n// Will create a blank space (usually in between barcodes)\nAPI.prototype.blank = function (size) {\n\tvar zeroes = new Array(size + 1).join(\"0\");\n\tthis._encodings.push({ data: zeroes });\n\treturn this;\n};\n\n// Initialize JsBarcode on all HTML elements defined.\nAPI.prototype.init = function () {\n\t// Should do nothing if no elements where found\n\tif (!this._renderProperties) {\n\t\treturn;\n\t}\n\n\t// Make sure renderProperies is an array\n\tif (!Array.isArray(this._renderProperties)) {\n\t\tthis._renderProperties = [this._renderProperties];\n\t}\n\n\tvar renderProperty;\n\tfor (var i in this._renderProperties) {\n\t\trenderProperty = this._renderProperties[i];\n\t\tvar options = (0, _merge2.default)(this._options, renderProperty.options);\n\n\t\tif (options.format == \"auto\") {\n\t\t\toptions.format = autoSelectBarcode();\n\t\t}\n\n\t\tthis._errorHandler.wrapBarcodeCall(function () {\n\t\t\tvar text = options.value;\n\t\t\tvar Encoder = _barcodes2.default[options.format.toUpperCase()];\n\t\t\tvar encoded = encode(text, Encoder, options);\n\n\t\t\trender(renderProperty, encoded, options);\n\t\t});\n\t}\n};\n\n// The render API call. Calls the real render function.\nAPI.prototype.render = function () {\n\tif (!this._renderProperties) {\n\t\tthrow new _exceptions.NoElementException();\n\t}\n\n\tif (Array.isArray(this._renderProperties)) {\n\t\tfor (var i = 0; i < this._renderProperties.length; i++) {\n\t\t\trender(this._renderProperties[i], this._encodings, this._options);\n\t\t}\n\t} else {\n\t\trender(this._renderProperties, this._encodings, this._options);\n\t}\n\n\treturn this;\n};\n\nAPI.prototype._defaults = _defaults2.default;\n\n// Prepares the encodings and calls the renderer\nfunction render(renderProperties, encodings, options) {\n\tencodings = (0, _linearizeEncodings2.default)(encodings);\n\n\tfor (var i = 0; i < encodings.length; i++) {\n\t\tencodings[i].options = (0, _merge2.default)(options, encodings[i].options);\n\t\t(0, _fixOptions2.default)(encodings[i].options);\n\t}\n\n\t(0, _fixOptions2.default)(options);\n\n\tvar Renderer = renderProperties.renderer;\n\tvar renderer = new Renderer(renderProperties.element, encodings, options);\n\trenderer.render();\n\n\tif (renderProperties.afterRender) {\n\t\trenderProperties.afterRender();\n\t}\n}\n\n// Export to browser\nif (typeof window !== \"undefined\") {\n\twindow.JsBarcode = JsBarcode;\n}\n\n// Export to jQuery\n/*global jQuery */\nif (typeof jQuery !== 'undefined') {\n\tjQuery.fn.JsBarcode = function (content, options) {\n\t\tvar elementArray = [];\n\t\tjQuery(this).each(function () {\n\t\t\telementArray.push(this);\n\t\t});\n\t\treturn JsBarcode(elementArray, content, options);\n\t};\n}\n\n// Export to commonJS\nmodule.exports = JsBarcode;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar Barcode = function Barcode(data, options) {\n\t_classCallCheck(this, Barcode);\n\n\tthis.data = data;\n\tthis.text = options.text || data;\n\tthis.options = options;\n};\n\nexports.default = Barcode;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _Barcode2 = require('../Barcode.js');\n\nvar _Barcode3 = _interopRequireDefault(_Barcode2);\n\nvar _constants = require('./constants');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n// This is the master class,\n// it does require the start code to be included in the string\nvar CODE128 = function (_Barcode) {\n\t_inherits(CODE128, _Barcode);\n\n\tfunction CODE128(data, options) {\n\t\t_classCallCheck(this, CODE128);\n\n\t\t// Get array of ascii codes from data\n\t\tvar _this = _possibleConstructorReturn(this, (CODE128.__proto__ || Object.getPrototypeOf(CODE128)).call(this, data.substring(1), options));\n\n\t\t_this.bytes = data.split('').map(function (char) {\n\t\t\treturn char.charCodeAt(0);\n\t\t});\n\t\treturn _this;\n\t}\n\n\t_createClass(CODE128, [{\n\t\tkey: 'valid',\n\t\tvalue: function valid() {\n\t\t\t// ASCII value ranges 0-127, 200-211\n\t\t\treturn (/^[\\x00-\\x7F\\xC8-\\xD3]+$/.test(this.data)\n\t\t\t);\n\t\t}\n\n\t\t// The public encoding function\n\n\t}, {\n\t\tkey: 'encode',\n\t\tvalue: function encode() {\n\t\t\tvar bytes = this.bytes;\n\t\t\t// Remove the start code from the bytes and set its index\n\t\t\tvar startIndex = bytes.shift() - 105;\n\t\t\t// Get start set by index\n\t\t\tvar startSet = _constants.SET_BY_CODE[startIndex];\n\n\t\t\tif (startSet === undefined) {\n\t\t\t\tthrow new RangeError('The encoding does not start with a start character.');\n\t\t\t}\n\n\t\t\tif (this.shouldEncodeAsEan128() === true) {\n\t\t\t\tbytes.unshift(_constants.FNC1);\n\t\t\t}\n\n\t\t\t// Start encode with the right type\n\t\t\tvar encodingResult = CODE128.next(bytes, 1, startSet);\n\n\t\t\treturn {\n\t\t\t\ttext: this.text === this.data ? this.text.replace(/[^\\x20-\\x7E]/g, '') : this.text,\n\t\t\t\tdata:\n\t\t\t\t// Add the start bits\n\t\t\t\tCODE128.getBar(startIndex) +\n\t\t\t\t// Add the encoded bits\n\t\t\t\tencodingResult.result +\n\t\t\t\t// Add the checksum\n\t\t\t\tCODE128.getBar((encodingResult.checksum + startIndex) % _constants.MODULO) +\n\t\t\t\t// Add the end bits\n\t\t\t\tCODE128.getBar(_constants.STOP)\n\t\t\t};\n\t\t}\n\n\t\t// GS1-128/EAN-128\n\n\t}, {\n\t\tkey: 'shouldEncodeAsEan128',\n\t\tvalue: function shouldEncodeAsEan128() {\n\t\t\tvar isEAN128 = this.options.ean128 || false;\n\t\t\tif (typeof isEAN128 === 'string') {\n\t\t\t\tisEAN128 = isEAN128.toLowerCase() === 'true';\n\t\t\t}\n\t\t\treturn isEAN128;\n\t\t}\n\n\t\t// Get a bar symbol by index\n\n\t}], [{\n\t\tkey: 'getBar',\n\t\tvalue: function getBar(index) {\n\t\t\treturn _constants.BARS[index] ? _constants.BARS[index].toString() : '';\n\t\t}\n\n\t\t// Correct an index by a set and shift it from the bytes array\n\n\t}, {\n\t\tkey: 'correctIndex',\n\t\tvalue: function correctIndex(bytes, set) {\n\t\t\tif (set === _constants.SET_A) {\n\t\t\t\tvar charCode = bytes.shift();\n\t\t\t\treturn charCode < 32 ? charCode + 64 : charCode - 32;\n\t\t\t} else if (set === _constants.SET_B) {\n\t\t\t\treturn bytes.shift() - 32;\n\t\t\t} else {\n\t\t\t\treturn (bytes.shift() - 48) * 10 + bytes.shift() - 48;\n\t\t\t}\n\t\t}\n\t}, {\n\t\tkey: 'next',\n\t\tvalue: function next(bytes, pos, set) {\n\t\t\tif (!bytes.length) {\n\t\t\t\treturn { result: '', checksum: 0 };\n\t\t\t}\n\n\t\t\tvar nextCode = void 0,\n\t\t\t    index = void 0;\n\n\t\t\t// Special characters\n\t\t\tif (bytes[0] >= 200) {\n\t\t\t\tindex = bytes.shift() - 105;\n\t\t\t\tvar nextSet = _constants.SWAP[index];\n\n\t\t\t\t// Swap to other set\n\t\t\t\tif (nextSet !== undefined) {\n\t\t\t\t\tnextCode = CODE128.next(bytes, pos + 1, nextSet);\n\t\t\t\t}\n\t\t\t\t// Continue on current set but encode a special character\n\t\t\t\telse {\n\t\t\t\t\t\t// Shift\n\t\t\t\t\t\tif ((set === _constants.SET_A || set === _constants.SET_B) && index === _constants.SHIFT) {\n\t\t\t\t\t\t\t// Convert the next character so that is encoded correctly\n\t\t\t\t\t\t\tbytes[0] = set === _constants.SET_A ? bytes[0] > 95 ? bytes[0] - 96 : bytes[0] : bytes[0] < 32 ? bytes[0] + 96 : bytes[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t\tnextCode = CODE128.next(bytes, pos + 1, set);\n\t\t\t\t\t}\n\t\t\t}\n\t\t\t// Continue encoding\n\t\t\telse {\n\t\t\t\t\tindex = CODE128.correctIndex(bytes, set);\n\t\t\t\t\tnextCode = CODE128.next(bytes, pos + 1, set);\n\t\t\t\t}\n\n\t\t\t// Get the correct binary encoding and calculate the weight\n\t\t\tvar enc = CODE128.getBar(index);\n\t\t\tvar weight = index * pos;\n\n\t\t\treturn {\n\t\t\t\tresult: enc + nextCode.result,\n\t\t\t\tchecksum: weight + nextCode.checksum\n\t\t\t};\n\t\t}\n\t}]);\n\n\treturn CODE128;\n}(_Barcode3.default);\n\nexports.default = CODE128;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _CODE2 = require('./CODE128.js');\n\nvar _CODE3 = _interopRequireDefault(_CODE2);\n\nvar _constants = require('./constants');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar CODE128A = function (_CODE) {\n\t_inherits(CODE128A, _CODE);\n\n\tfunction CODE128A(string, options) {\n\t\t_classCallCheck(this, CODE128A);\n\n\t\treturn _possibleConstructorReturn(this, (CODE128A.__proto__ || Object.getPrototypeOf(CODE128A)).call(this, _constants.A_START_CHAR + string, options));\n\t}\n\n\t_createClass(CODE128A, [{\n\t\tkey: 'valid',\n\t\tvalue: function valid() {\n\t\t\treturn new RegExp('^' + _constants.A_CHARS + '+$').test(this.data);\n\t\t}\n\t}]);\n\n\treturn CODE128A;\n}(_CODE3.default);\n\nexports.default = CODE128A;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _CODE2 = require('./CODE128.js');\n\nvar _CODE3 = _interopRequireDefault(_CODE2);\n\nvar _constants = require('./constants');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar CODE128B = function (_CODE) {\n\t_inherits(CODE128B, _CODE);\n\n\tfunction CODE128B(string, options) {\n\t\t_classCallCheck(this, CODE128B);\n\n\t\treturn _possibleConstructorReturn(this, (CODE128B.__proto__ || Object.getPrototypeOf(CODE128B)).call(this, _constants.B_START_CHAR + string, options));\n\t}\n\n\t_createClass(CODE128B, [{\n\t\tkey: 'valid',\n\t\tvalue: function valid() {\n\t\t\treturn new RegExp('^' + _constants.B_CHARS + '+$').test(this.data);\n\t\t}\n\t}]);\n\n\treturn CODE128B;\n}(_CODE3.default);\n\nexports.default = CODE128B;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _CODE2 = require('./CODE128.js');\n\nvar _CODE3 = _interopRequireDefault(_CODE2);\n\nvar _constants = require('./constants');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar CODE128C = function (_CODE) {\n\t_inherits(CODE128C, _CODE);\n\n\tfunction CODE128C(string, options) {\n\t\t_classCallCheck(this, CODE128C);\n\n\t\treturn _possibleConstructorReturn(this, (CODE128C.__proto__ || Object.getPrototypeOf(CODE128C)).call(this, _constants.C_START_CHAR + string, options));\n\t}\n\n\t_createClass(CODE128C, [{\n\t\tkey: 'valid',\n\t\tvalue: function valid() {\n\t\t\treturn new RegExp('^' + _constants.C_CHARS + '+$').test(this.data);\n\t\t}\n\t}]);\n\n\treturn CODE128C;\n}(_CODE3.default);\n\nexports.default = CODE128C;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\n\nvar _CODE2 = require('./CODE128');\n\nvar _CODE3 = _interopRequireDefault(_CODE2);\n\nvar _auto = require('./auto');\n\nvar _auto2 = _interopRequireDefault(_auto);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar CODE128AUTO = function (_CODE) {\n\t_inherits(CODE128AUTO, _CODE);\n\n\tfunction CODE128AUTO(data, options) {\n\t\t_classCallCheck(this, CODE128AUTO);\n\n\t\t// ASCII value ranges 0-127, 200-211\n\t\tif (/^[\\x00-\\x7F\\xC8-\\xD3]+$/.test(data)) {\n\t\t\tvar _this = _possibleConstructorReturn(this, (CODE128AUTO.__proto__ || Object.getPrototypeOf(CODE128AUTO)).call(this, (0, _auto2.default)(data), options));\n\t\t} else {\n\t\t\tvar _this = _possibleConstructorReturn(this, (CODE128AUTO.__proto__ || Object.getPrototypeOf(CODE128AUTO)).call(this, data, options));\n\t\t}\n\t\treturn _possibleConstructorReturn(_this);\n\t}\n\n\treturn CODE128AUTO;\n}(_CODE3.default);\n\nexports.default = CODE128AUTO;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\n\nvar _constants = require('./constants');\n\n// Match Set functions\nvar matchSetALength = function matchSetALength(string) {\n\treturn string.match(new RegExp('^' + _constants.A_CHARS + '*'))[0].length;\n};\nvar matchSetBLength = function matchSetBLength(string) {\n\treturn string.match(new RegExp('^' + _constants.B_CHARS + '*'))[0].length;\n};\nvar matchSetC = function matchSetC(string) {\n\treturn string.match(new RegExp('^' + _constants.C_CHARS + '*'))[0];\n};\n\n// CODE128A or CODE128B\nfunction autoSelectFromAB(string, isA) {\n\tvar ranges = isA ? _constants.A_CHARS : _constants.B_CHARS;\n\tvar untilC = string.match(new RegExp('^(' + ranges + '+?)(([0-9]{2}){2,})([^0-9]|$)'));\n\n\tif (untilC) {\n\t\treturn untilC[1] + String.fromCharCode(204) + autoSelectFromC(string.substring(untilC[1].length));\n\t}\n\n\tvar chars = string.match(new RegExp('^' + ranges + '+'))[0];\n\n\tif (chars.length === string.length) {\n\t\treturn string;\n\t}\n\n\treturn chars + String.fromCharCode(isA ? 205 : 206) + autoSelectFromAB(string.substring(chars.length), !isA);\n}\n\n// CODE128C\nfunction autoSelectFromC(string) {\n\tvar cMatch = matchSetC(string);\n\tvar length = cMatch.length;\n\n\tif (length === string.length) {\n\t\treturn string;\n\t}\n\n\tstring = string.substring(length);\n\n\t// Select A/B depending on the longest match\n\tvar isA = matchSetALength(string) >= matchSetBLength(string);\n\treturn cMatch + String.fromCharCode(isA ? 206 : 205) + autoSelectFromAB(string, isA);\n}\n\n// Detect Code Set (A, B or C) and format the string\n\nexports.default = function (string) {\n\tvar newString = void 0;\n\tvar cLength = matchSetC(string).length;\n\n\t// Select 128C if the string start with enough digits\n\tif (cLength >= 2) {\n\t\tnewString = _constants.C_START_CHAR + autoSelectFromC(string);\n\t} else {\n\t\t// Select A/B depending on the longest match\n\t\tvar isA = matchSetALength(string) > matchSetBLength(string);\n\t\tnewString = (isA ? _constants.A_START_CHAR : _constants.B_START_CHAR) + autoSelectFromAB(string, isA);\n\t}\n\n\treturn newString.replace(/[\\xCD\\xCE]([^])[\\xCD\\xCE]/, // Any sequence between 205 and 206 characters\n\tfunction (match, char) {\n\t\treturn String.fromCharCode(203) + char;\n\t});\n};","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\n\nvar _SET_BY_CODE;\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n// constants for internal usage\nvar SET_A = exports.SET_A = 0;\nvar SET_B = exports.SET_B = 1;\nvar SET_C = exports.SET_C = 2;\n\n// Special characters\nvar SHIFT = exports.SHIFT = 98;\nvar START_A = exports.START_A = 103;\nvar START_B = exports.START_B = 104;\nvar START_C = exports.START_C = 105;\nvar MODULO = exports.MODULO = 103;\nvar STOP = exports.STOP = 106;\nvar FNC1 = exports.FNC1 = 207;\n\n// Get set by start code\nvar SET_BY_CODE = exports.SET_BY_CODE = (_SET_BY_CODE = {}, _defineProperty(_SET_BY_CODE, START_A, SET_A), _defineProperty(_SET_BY_CODE, START_B, SET_B), _defineProperty(_SET_BY_CODE, START_C, SET_C), _SET_BY_CODE);\n\n// Get next set by code\nvar SWAP = exports.SWAP = {\n\t101: SET_A,\n\t100: SET_B,\n\t99: SET_C\n};\n\nvar A_START_CHAR = exports.A_START_CHAR = String.fromCharCode(208); // START_A + 105\nvar B_START_CHAR = exports.B_START_CHAR = String.fromCharCode(209); // START_B + 105\nvar C_START_CHAR = exports.C_START_CHAR = String.fromCharCode(210); // START_C + 105\n\n// 128A (Code Set A)\n// ASCII characters 00 to 95 (0–9, A–Z and control codes), special characters, and FNC 1–4\nvar A_CHARS = exports.A_CHARS = \"[\\x00-\\x5F\\xC8-\\xCF]\";\n\n// 128B (Code Set B)\n// ASCII characters 32 to 127 (0–9, A–Z, a–z), special characters, and FNC 1–4\nvar B_CHARS = exports.B_CHARS = \"[\\x20-\\x7F\\xC8-\\xCF]\";\n\n// 128C (Code Set C)\n// 00–99 (encodes two digits with a single code point) and FNC1\nvar C_CHARS = exports.C_CHARS = \"(\\xCF*[0-9]{2}\\xCF*)\";\n\n// CODE128 includes 107 symbols:\n// 103 data symbols, 3 start symbols (A, B and C), and 1 stop symbol (the last one)\n// Each symbol consist of three black bars (1) and three white spaces (0).\nvar BARS = exports.BARS = [11011001100, 11001101100, 11001100110, 10010011000, 10010001100, 10001001100, 10011001000, 10011000100, 10001100100, 11001001000, 11001000100, 11000100100, 10110011100, 10011011100, 10011001110, 10111001100, 10011101100, 10011100110, 11001110010, 11001011100, 11001001110, 11011100100, 11001110100, 11101101110, 11101001100, 11100101100, 11100100110, 11101100100, 11100110100, 11100110010, 11011011000, 11011000110, 11000110110, 10100011000, 10001011000, 10001000110, 10110001000, 10001101000, 10001100010, 11010001000, 11000101000, 11000100010, 10110111000, 10110001110, 10001101110, 10111011000, 10111000110, 10001110110, 11101110110, 11010001110, 11000101110, 11011101000, 11011100010, 11011101110, 11101011000, 11101000110, 11100010110, 11101101000, 11101100010, 11100011010, 11101111010, 11001000010, 11110001010, 10100110000, 10100001100, 10010110000, 10010000110, 10000101100, 10000100110, 10110010000, 10110000100, 10011010000, 10011000010, 10000110100, 10000110010, 11000010010, 11001010000, 11110111010, 11000010100, 10001111010, 10100111100, 10010111100, 10010011110, 10111100100, 10011110100, 10011110010, 11110100100, 11110010100, 11110010010, 11011011110, 11011110110, 11110110110, 10101111000, 10100011110, 10001011110, 10111101000, 10111100010, 11110101000, 11110100010, 10111011110, 10111101110, 11101011110, 11110101110, 11010000100, 11010010000, 11010011100, 1100011101011];","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.CODE128C = exports.CODE128B = exports.CODE128A = exports.CODE128 = undefined;\n\nvar _CODE128_AUTO = require('./CODE128_AUTO.js');\n\nvar _CODE128_AUTO2 = _interopRequireDefault(_CODE128_AUTO);\n\nvar _CODE128A = require('./CODE128A.js');\n\nvar _CODE128A2 = _interopRequireDefault(_CODE128A);\n\nvar _CODE128B = require('./CODE128B.js');\n\nvar _CODE128B2 = _interopRequireDefault(_CODE128B);\n\nvar _CODE128C = require('./CODE128C.js');\n\nvar _CODE128C2 = _interopRequireDefault(_CODE128C);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.CODE128 = _CODE128_AUTO2.default;\nexports.CODE128A = _CODE128A2.default;\nexports.CODE128B = _CODE128B2.default;\nexports.CODE128C = _CODE128C2.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\nexports.CODE39 = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _Barcode2 = require(\"../Barcode.js\");\n\nvar _Barcode3 = _interopRequireDefault(_Barcode2);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // Encoding documentation:\n// https://en.wikipedia.org/wiki/Code_39#Encoding\n\nvar CODE39 = function (_Barcode) {\n\t_inherits(CODE39, _Barcode);\n\n\tfunction CODE39(data, options) {\n\t\t_classCallCheck(this, CODE39);\n\n\t\tdata = data.toUpperCase();\n\n\t\t// Calculate mod43 checksum if enabled\n\t\tif (options.mod43) {\n\t\t\tdata += getCharacter(mod43checksum(data));\n\t\t}\n\n\t\treturn _possibleConstructorReturn(this, (CODE39.__proto__ || Object.getPrototypeOf(CODE39)).call(this, data, options));\n\t}\n\n\t_createClass(CODE39, [{\n\t\tkey: \"encode\",\n\t\tvalue: function encode() {\n\t\t\t// First character is always a *\n\t\t\tvar result = getEncoding(\"*\");\n\n\t\t\t// Take every character and add the binary representation to the result\n\t\t\tfor (var i = 0; i < this.data.length; i++) {\n\t\t\t\tresult += getEncoding(this.data[i]) + \"0\";\n\t\t\t}\n\n\t\t\t// Last character is always a *\n\t\t\tresult += getEncoding(\"*\");\n\n\t\t\treturn {\n\t\t\t\tdata: result,\n\t\t\t\ttext: this.text\n\t\t\t};\n\t\t}\n\t}, {\n\t\tkey: \"valid\",\n\t\tvalue: function valid() {\n\t\t\treturn this.data.search(/^[0-9A-Z\\-\\.\\ \\$\\/\\+\\%]+$/) !== -1;\n\t\t}\n\t}]);\n\n\treturn CODE39;\n}(_Barcode3.default);\n\n// All characters. The position in the array is the (checksum) value\n\n\nvar characters = [\"0\", \"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"A\", \"B\", \"C\", \"D\", \"E\", \"F\", \"G\", \"H\", \"I\", \"J\", \"K\", \"L\", \"M\", \"N\", \"O\", \"P\", \"Q\", \"R\", \"S\", \"T\", \"U\", \"V\", \"W\", \"X\", \"Y\", \"Z\", \"-\", \".\", \" \", \"$\", \"/\", \"+\", \"%\", \"*\"];\n\n// The decimal representation of the characters, is converted to the\n// corresponding binary with the getEncoding function\nvar encodings = [20957, 29783, 23639, 30485, 20951, 29813, 23669, 20855, 29789, 23645, 29975, 23831, 30533, 22295, 30149, 24005, 21623, 29981, 23837, 22301, 30023, 23879, 30545, 22343, 30161, 24017, 21959, 30065, 23921, 22385, 29015, 18263, 29141, 17879, 29045, 18293, 17783, 29021, 18269, 17477, 17489, 17681, 20753, 35770];\n\n// Get the binary representation of a character by converting the encodings\n// from decimal to binary\nfunction getEncoding(character) {\n\treturn getBinary(characterValue(character));\n}\n\nfunction getBinary(characterValue) {\n\treturn encodings[characterValue].toString(2);\n}\n\nfunction getCharacter(characterValue) {\n\treturn characters[characterValue];\n}\n\nfunction characterValue(character) {\n\treturn characters.indexOf(character);\n}\n\nfunction mod43checksum(data) {\n\tvar checksum = 0;\n\tfor (var i = 0; i < data.length; i++) {\n\t\tchecksum += characterValue(data[i]);\n\t}\n\n\tchecksum = checksum % 43;\n\treturn checksum;\n}\n\nexports.CODE39 = CODE39;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _constants = require('./constants');\n\nvar _encoder = require('./encoder');\n\nvar _encoder2 = _interopRequireDefault(_encoder);\n\nvar _Barcode2 = require('../Barcode');\n\nvar _Barcode3 = _interopRequireDefault(_Barcode2);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n// Base class for EAN8 & EAN13\nvar EAN = function (_Barcode) {\n\t_inherits(EAN, _Barcode);\n\n\tfunction EAN(data, options) {\n\t\t_classCallCheck(this, EAN);\n\n\t\t// Make sure the font is not bigger than the space between the guard bars\n\t\tvar _this = _possibleConstructorReturn(this, (EAN.__proto__ || Object.getPrototypeOf(EAN)).call(this, data, options));\n\n\t\t_this.fontSize = !options.flat && options.fontSize > options.width * 10 ? options.width * 10 : options.fontSize;\n\n\t\t// Make the guard bars go down half the way of the text\n\t\t_this.guardHeight = options.height + _this.fontSize / 2 + options.textMargin;\n\t\treturn _this;\n\t}\n\n\t_createClass(EAN, [{\n\t\tkey: 'encode',\n\t\tvalue: function encode() {\n\t\t\treturn this.options.flat ? this.encodeFlat() : this.encodeGuarded();\n\t\t}\n\t}, {\n\t\tkey: 'leftText',\n\t\tvalue: function leftText(from, to) {\n\t\t\treturn this.text.substr(from, to);\n\t\t}\n\t}, {\n\t\tkey: 'leftEncode',\n\t\tvalue: function leftEncode(data, structure) {\n\t\t\treturn (0, _encoder2.default)(data, structure);\n\t\t}\n\t}, {\n\t\tkey: 'rightText',\n\t\tvalue: function rightText(from, to) {\n\t\t\treturn this.text.substr(from, to);\n\t\t}\n\t}, {\n\t\tkey: 'rightEncode',\n\t\tvalue: function rightEncode(data, structure) {\n\t\t\treturn (0, _encoder2.default)(data, structure);\n\t\t}\n\t}, {\n\t\tkey: 'encodeGuarded',\n\t\tvalue: function encodeGuarded() {\n\t\t\tvar textOptions = { fontSize: this.fontSize };\n\t\t\tvar guardOptions = { height: this.guardHeight };\n\n\t\t\treturn [{ data: _constants.SIDE_BIN, options: guardOptions }, { data: this.leftEncode(), text: this.leftText(), options: textOptions }, { data: _constants.MIDDLE_BIN, options: guardOptions }, { data: this.rightEncode(), text: this.rightText(), options: textOptions }, { data: _constants.SIDE_BIN, options: guardOptions }];\n\t\t}\n\t}, {\n\t\tkey: 'encodeFlat',\n\t\tvalue: function encodeFlat() {\n\t\t\tvar data = [_constants.SIDE_BIN, this.leftEncode(), _constants.MIDDLE_BIN, this.rightEncode(), _constants.SIDE_BIN];\n\n\t\t\treturn {\n\t\t\t\tdata: data.join(''),\n\t\t\t\ttext: this.text\n\t\t\t};\n\t\t}\n\t}]);\n\n\treturn EAN;\n}(_Barcode3.default);\n\nexports.default = EAN;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _constants = require('./constants');\n\nvar _EAN2 = require('./EAN');\n\nvar _EAN3 = _interopRequireDefault(_EAN2);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // Encoding documentation:\n// https://en.wikipedia.org/wiki/International_Article_Number_(EAN)#Binary_encoding_of_data_digits_into_EAN-13_barcode\n\n// Calculate the checksum digit\n// https://en.wikipedia.org/wiki/International_Article_Number_(EAN)#Calculation_of_checksum_digit\nvar checksum = function checksum(number) {\n\tvar res = number.substr(0, 12).split('').map(function (n) {\n\t\treturn +n;\n\t}).reduce(function (sum, a, idx) {\n\t\treturn idx % 2 ? sum + a * 3 : sum + a;\n\t}, 0);\n\n\treturn (10 - res % 10) % 10;\n};\n\nvar EAN13 = function (_EAN) {\n\t_inherits(EAN13, _EAN);\n\n\tfunction EAN13(data, options) {\n\t\t_classCallCheck(this, EAN13);\n\n\t\t// Add checksum if it does not exist\n\t\tif (data.search(/^[0-9]{12}$/) !== -1) {\n\t\t\tdata += checksum(data);\n\t\t}\n\n\t\t// Adds a last character to the end of the barcode\n\t\tvar _this = _possibleConstructorReturn(this, (EAN13.__proto__ || Object.getPrototypeOf(EAN13)).call(this, data, options));\n\n\t\t_this.lastChar = options.lastChar;\n\t\treturn _this;\n\t}\n\n\t_createClass(EAN13, [{\n\t\tkey: 'valid',\n\t\tvalue: function valid() {\n\t\t\treturn this.data.search(/^[0-9]{13}$/) !== -1 && +this.data[12] === checksum(this.data);\n\t\t}\n\t}, {\n\t\tkey: 'leftText',\n\t\tvalue: function leftText() {\n\t\t\treturn _get(EAN13.prototype.__proto__ || Object.getPrototypeOf(EAN13.prototype), 'leftText', this).call(this, 1, 6);\n\t\t}\n\t}, {\n\t\tkey: 'leftEncode',\n\t\tvalue: function leftEncode() {\n\t\t\tvar data = this.data.substr(1, 6);\n\t\t\tvar structure = _constants.EAN13_STRUCTURE[this.data[0]];\n\t\t\treturn _get(EAN13.prototype.__proto__ || Object.getPrototypeOf(EAN13.prototype), 'leftEncode', this).call(this, data, structure);\n\t\t}\n\t}, {\n\t\tkey: 'rightText',\n\t\tvalue: function rightText() {\n\t\t\treturn _get(EAN13.prototype.__proto__ || Object.getPrototypeOf(EAN13.prototype), 'rightText', this).call(this, 7, 6);\n\t\t}\n\t}, {\n\t\tkey: 'rightEncode',\n\t\tvalue: function rightEncode() {\n\t\t\tvar data = this.data.substr(7, 6);\n\t\t\treturn _get(EAN13.prototype.__proto__ || Object.getPrototypeOf(EAN13.prototype), 'rightEncode', this).call(this, data, 'RRRRRR');\n\t\t}\n\n\t\t// The \"standard\" way of printing EAN13 barcodes with guard bars\n\n\t}, {\n\t\tkey: 'encodeGuarded',\n\t\tvalue: function encodeGuarded() {\n\t\t\tvar data = _get(EAN13.prototype.__proto__ || Object.getPrototypeOf(EAN13.prototype), 'encodeGuarded', this).call(this);\n\n\t\t\t// Extend data with left digit & last character\n\t\t\tif (this.options.displayValue) {\n\t\t\t\tdata.unshift({\n\t\t\t\t\tdata: '000000000000',\n\t\t\t\t\ttext: this.text.substr(0, 1),\n\t\t\t\t\toptions: { textAlign: 'left', fontSize: this.fontSize }\n\t\t\t\t});\n\n\t\t\t\tif (this.options.lastChar) {\n\t\t\t\t\tdata.push({\n\t\t\t\t\t\tdata: '00'\n\t\t\t\t\t});\n\t\t\t\t\tdata.push({\n\t\t\t\t\t\tdata: '00000',\n\t\t\t\t\t\ttext: this.options.lastChar,\n\t\t\t\t\t\toptions: { fontSize: this.fontSize }\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn data;\n\t\t}\n\t}]);\n\n\treturn EAN13;\n}(_EAN3.default);\n\nexports.default = EAN13;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _constants = require('./constants');\n\nvar _encoder = require('./encoder');\n\nvar _encoder2 = _interopRequireDefault(_encoder);\n\nvar _Barcode2 = require('../Barcode');\n\nvar _Barcode3 = _interopRequireDefault(_Barcode2);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // Encoding documentation:\n// https://en.wikipedia.org/wiki/EAN_2#Encoding\n\nvar EAN2 = function (_Barcode) {\n\t_inherits(EAN2, _Barcode);\n\n\tfunction EAN2(data, options) {\n\t\t_classCallCheck(this, EAN2);\n\n\t\treturn _possibleConstructorReturn(this, (EAN2.__proto__ || Object.getPrototypeOf(EAN2)).call(this, data, options));\n\t}\n\n\t_createClass(EAN2, [{\n\t\tkey: 'valid',\n\t\tvalue: function valid() {\n\t\t\treturn this.data.search(/^[0-9]{2}$/) !== -1;\n\t\t}\n\t}, {\n\t\tkey: 'encode',\n\t\tvalue: function encode() {\n\t\t\t// Choose the structure based on the number mod 4\n\t\t\tvar structure = _constants.EAN2_STRUCTURE[parseInt(this.data) % 4];\n\t\t\treturn {\n\t\t\t\t// Start bits + Encode the two digits with 01 in between\n\t\t\t\tdata: '1011' + (0, _encoder2.default)(this.data, structure, '01'),\n\t\t\t\ttext: this.text\n\t\t\t};\n\t\t}\n\t}]);\n\n\treturn EAN2;\n}(_Barcode3.default);\n\nexports.default = EAN2;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _constants = require('./constants');\n\nvar _encoder = require('./encoder');\n\nvar _encoder2 = _interopRequireDefault(_encoder);\n\nvar _Barcode2 = require('../Barcode');\n\nvar _Barcode3 = _interopRequireDefault(_Barcode2);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // Encoding documentation:\n// https://en.wikipedia.org/wiki/EAN_5#Encoding\n\nvar checksum = function checksum(data) {\n\tvar result = data.split('').map(function (n) {\n\t\treturn +n;\n\t}).reduce(function (sum, a, idx) {\n\t\treturn idx % 2 ? sum + a * 9 : sum + a * 3;\n\t}, 0);\n\treturn result % 10;\n};\n\nvar EAN5 = function (_Barcode) {\n\t_inherits(EAN5, _Barcode);\n\n\tfunction EAN5(data, options) {\n\t\t_classCallCheck(this, EAN5);\n\n\t\treturn _possibleConstructorReturn(this, (EAN5.__proto__ || Object.getPrototypeOf(EAN5)).call(this, data, options));\n\t}\n\n\t_createClass(EAN5, [{\n\t\tkey: 'valid',\n\t\tvalue: function valid() {\n\t\t\treturn this.data.search(/^[0-9]{5}$/) !== -1;\n\t\t}\n\t}, {\n\t\tkey: 'encode',\n\t\tvalue: function encode() {\n\t\t\tvar structure = _constants.EAN5_STRUCTURE[checksum(this.data)];\n\t\t\treturn {\n\t\t\t\tdata: '1011' + (0, _encoder2.default)(this.data, structure, '01'),\n\t\t\t\ttext: this.text\n\t\t\t};\n\t\t}\n\t}]);\n\n\treturn EAN5;\n}(_Barcode3.default);\n\nexports.default = EAN5;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _EAN2 = require('./EAN');\n\nvar _EAN3 = _interopRequireDefault(_EAN2);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // Encoding documentation:\n// http://www.barcodeisland.com/ean8.phtml\n\n// Calculate the checksum digit\nvar checksum = function checksum(number) {\n\tvar res = number.substr(0, 7).split('').map(function (n) {\n\t\treturn +n;\n\t}).reduce(function (sum, a, idx) {\n\t\treturn idx % 2 ? sum + a : sum + a * 3;\n\t}, 0);\n\n\treturn (10 - res % 10) % 10;\n};\n\nvar EAN8 = function (_EAN) {\n\t_inherits(EAN8, _EAN);\n\n\tfunction EAN8(data, options) {\n\t\t_classCallCheck(this, EAN8);\n\n\t\t// Add checksum if it does not exist\n\t\tif (data.search(/^[0-9]{7}$/) !== -1) {\n\t\t\tdata += checksum(data);\n\t\t}\n\n\t\treturn _possibleConstructorReturn(this, (EAN8.__proto__ || Object.getPrototypeOf(EAN8)).call(this, data, options));\n\t}\n\n\t_createClass(EAN8, [{\n\t\tkey: 'valid',\n\t\tvalue: function valid() {\n\t\t\treturn this.data.search(/^[0-9]{8}$/) !== -1 && +this.data[7] === checksum(this.data);\n\t\t}\n\t}, {\n\t\tkey: 'leftText',\n\t\tvalue: function leftText() {\n\t\t\treturn _get(EAN8.prototype.__proto__ || Object.getPrototypeOf(EAN8.prototype), 'leftText', this).call(this, 0, 4);\n\t\t}\n\t}, {\n\t\tkey: 'leftEncode',\n\t\tvalue: function leftEncode() {\n\t\t\tvar data = this.data.substr(0, 4);\n\t\t\treturn _get(EAN8.prototype.__proto__ || Object.getPrototypeOf(EAN8.prototype), 'leftEncode', this).call(this, data, 'LLLL');\n\t\t}\n\t}, {\n\t\tkey: 'rightText',\n\t\tvalue: function rightText() {\n\t\t\treturn _get(EAN8.prototype.__proto__ || Object.getPrototypeOf(EAN8.prototype), 'rightText', this).call(this, 4, 4);\n\t\t}\n\t}, {\n\t\tkey: 'rightEncode',\n\t\tvalue: function rightEncode() {\n\t\t\tvar data = this.data.substr(4, 4);\n\t\t\treturn _get(EAN8.prototype.__proto__ || Object.getPrototypeOf(EAN8.prototype), 'rightEncode', this).call(this, data, 'RRRR');\n\t\t}\n\t}]);\n\n\treturn EAN8;\n}(_EAN3.default);\n\nexports.default = EAN8;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nexports.checksum = checksum;\n\nvar _encoder = require(\"./encoder\");\n\nvar _encoder2 = _interopRequireDefault(_encoder);\n\nvar _Barcode2 = require(\"../Barcode.js\");\n\nvar _Barcode3 = _interopRequireDefault(_Barcode2);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // Encoding documentation:\n// https://en.wikipedia.org/wiki/Universal_Product_Code#Encoding\n\nvar UPC = function (_Barcode) {\n\t_inherits(UPC, _Barcode);\n\n\tfunction UPC(data, options) {\n\t\t_classCallCheck(this, UPC);\n\n\t\t// Add checksum if it does not exist\n\t\tif (data.search(/^[0-9]{11}$/) !== -1) {\n\t\t\tdata += checksum(data);\n\t\t}\n\n\t\tvar _this = _possibleConstructorReturn(this, (UPC.__proto__ || Object.getPrototypeOf(UPC)).call(this, data, options));\n\n\t\t_this.displayValue = options.displayValue;\n\n\t\t// Make sure the font is not bigger than the space between the guard bars\n\t\tif (options.fontSize > options.width * 10) {\n\t\t\t_this.fontSize = options.width * 10;\n\t\t} else {\n\t\t\t_this.fontSize = options.fontSize;\n\t\t}\n\n\t\t// Make the guard bars go down half the way of the text\n\t\t_this.guardHeight = options.height + _this.fontSize / 2 + options.textMargin;\n\t\treturn _this;\n\t}\n\n\t_createClass(UPC, [{\n\t\tkey: \"valid\",\n\t\tvalue: function valid() {\n\t\t\treturn this.data.search(/^[0-9]{12}$/) !== -1 && this.data[11] == checksum(this.data);\n\t\t}\n\t}, {\n\t\tkey: \"encode\",\n\t\tvalue: function encode() {\n\t\t\tif (this.options.flat) {\n\t\t\t\treturn this.flatEncoding();\n\t\t\t} else {\n\t\t\t\treturn this.guardedEncoding();\n\t\t\t}\n\t\t}\n\t}, {\n\t\tkey: \"flatEncoding\",\n\t\tvalue: function flatEncoding() {\n\t\t\tvar result = \"\";\n\n\t\t\tresult += \"101\";\n\t\t\tresult += (0, _encoder2.default)(this.data.substr(0, 6), \"LLLLLL\");\n\t\t\tresult += \"01010\";\n\t\t\tresult += (0, _encoder2.default)(this.data.substr(6, 6), \"RRRRRR\");\n\t\t\tresult += \"101\";\n\n\t\t\treturn {\n\t\t\t\tdata: result,\n\t\t\t\ttext: this.text\n\t\t\t};\n\t\t}\n\t}, {\n\t\tkey: \"guardedEncoding\",\n\t\tvalue: function guardedEncoding() {\n\t\t\tvar result = [];\n\n\t\t\t// Add the first digit\n\t\t\tif (this.displayValue) {\n\t\t\t\tresult.push({\n\t\t\t\t\tdata: \"00000000\",\n\t\t\t\t\ttext: this.text.substr(0, 1),\n\t\t\t\t\toptions: { textAlign: \"left\", fontSize: this.fontSize }\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// Add the guard bars\n\t\t\tresult.push({\n\t\t\t\tdata: \"101\" + (0, _encoder2.default)(this.data[0], \"L\"),\n\t\t\t\toptions: { height: this.guardHeight }\n\t\t\t});\n\n\t\t\t// Add the left side\n\t\t\tresult.push({\n\t\t\t\tdata: (0, _encoder2.default)(this.data.substr(1, 5), \"LLLLL\"),\n\t\t\t\ttext: this.text.substr(1, 5),\n\t\t\t\toptions: { fontSize: this.fontSize }\n\t\t\t});\n\n\t\t\t// Add the middle bits\n\t\t\tresult.push({\n\t\t\t\tdata: \"01010\",\n\t\t\t\toptions: { height: this.guardHeight }\n\t\t\t});\n\n\t\t\t// Add the right side\n\t\t\tresult.push({\n\t\t\t\tdata: (0, _encoder2.default)(this.data.substr(6, 5), \"RRRRR\"),\n\t\t\t\ttext: this.text.substr(6, 5),\n\t\t\t\toptions: { fontSize: this.fontSize }\n\t\t\t});\n\n\t\t\t// Add the end bits\n\t\t\tresult.push({\n\t\t\t\tdata: (0, _encoder2.default)(this.data[11], \"R\") + \"101\",\n\t\t\t\toptions: { height: this.guardHeight }\n\t\t\t});\n\n\t\t\t// Add the last digit\n\t\t\tif (this.displayValue) {\n\t\t\t\tresult.push({\n\t\t\t\t\tdata: \"00000000\",\n\t\t\t\t\ttext: this.text.substr(11, 1),\n\t\t\t\t\toptions: { textAlign: \"right\", fontSize: this.fontSize }\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn result;\n\t\t}\n\t}]);\n\n\treturn UPC;\n}(_Barcode3.default);\n\n// Calulate the checksum digit\n// https://en.wikipedia.org/wiki/International_Article_Number_(EAN)#Calculation_of_checksum_digit\n\n\nfunction checksum(number) {\n\tvar result = 0;\n\n\tvar i;\n\tfor (i = 1; i < 11; i += 2) {\n\t\tresult += parseInt(number[i]);\n\t}\n\tfor (i = 0; i < 11; i += 2) {\n\t\tresult += parseInt(number[i]) * 3;\n\t}\n\n\treturn (10 - result % 10) % 10;\n}\n\nexports.default = UPC;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _encoder = require('./encoder');\n\nvar _encoder2 = _interopRequireDefault(_encoder);\n\nvar _Barcode2 = require('../Barcode.js');\n\nvar _Barcode3 = _interopRequireDefault(_Barcode2);\n\nvar _UPC = require('./UPC.js');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // Encoding documentation:\n// https://en.wikipedia.org/wiki/Universal_Product_Code#Encoding\n//\n// UPC-E documentation:\n// https://en.wikipedia.org/wiki/Universal_Product_Code#UPC-E\n\nvar EXPANSIONS = [\"XX00000XXX\", \"XX10000XXX\", \"XX20000XXX\", \"XXX00000XX\", \"XXXX00000X\", \"XXXXX00005\", \"XXXXX00006\", \"XXXXX00007\", \"XXXXX00008\", \"XXXXX00009\"];\n\nvar PARITIES = [[\"EEEOOO\", \"OOOEEE\"], [\"EEOEOO\", \"OOEOEE\"], [\"EEOOEO\", \"OOEEOE\"], [\"EEOOOE\", \"OOEEEO\"], [\"EOEEOO\", \"OEOOEE\"], [\"EOOEEO\", \"OEEOOE\"], [\"EOOOEE\", \"OEEEOO\"], [\"EOEOEO\", \"OEOEOE\"], [\"EOEOOE\", \"OEOEEO\"], [\"EOOEOE\", \"OEEOEO\"]];\n\nvar UPCE = function (_Barcode) {\n\t_inherits(UPCE, _Barcode);\n\n\tfunction UPCE(data, options) {\n\t\t_classCallCheck(this, UPCE);\n\n\t\tvar _this = _possibleConstructorReturn(this, (UPCE.__proto__ || Object.getPrototypeOf(UPCE)).call(this, data, options));\n\t\t// Code may be 6 or 8 digits;\n\t\t// A 7 digit code is ambiguous as to whether the extra digit\n\t\t// is a UPC-A check or number system digit.\n\n\n\t\t_this.isValid = false;\n\t\tif (data.search(/^[0-9]{6}$/) !== -1) {\n\t\t\t_this.middleDigits = data;\n\t\t\t_this.upcA = expandToUPCA(data, \"0\");\n\t\t\t_this.text = options.text || '' + _this.upcA[0] + data + _this.upcA[_this.upcA.length - 1];\n\t\t\t_this.isValid = true;\n\t\t} else if (data.search(/^[01][0-9]{7}$/) !== -1) {\n\t\t\t_this.middleDigits = data.substring(1, data.length - 1);\n\t\t\t_this.upcA = expandToUPCA(_this.middleDigits, data[0]);\n\n\t\t\tif (_this.upcA[_this.upcA.length - 1] === data[data.length - 1]) {\n\t\t\t\t_this.isValid = true;\n\t\t\t} else {\n\t\t\t\t// checksum mismatch\n\t\t\t\treturn _possibleConstructorReturn(_this);\n\t\t\t}\n\t\t} else {\n\t\t\treturn _possibleConstructorReturn(_this);\n\t\t}\n\n\t\t_this.displayValue = options.displayValue;\n\n\t\t// Make sure the font is not bigger than the space between the guard bars\n\t\tif (options.fontSize > options.width * 10) {\n\t\t\t_this.fontSize = options.width * 10;\n\t\t} else {\n\t\t\t_this.fontSize = options.fontSize;\n\t\t}\n\n\t\t// Make the guard bars go down half the way of the text\n\t\t_this.guardHeight = options.height + _this.fontSize / 2 + options.textMargin;\n\t\treturn _this;\n\t}\n\n\t_createClass(UPCE, [{\n\t\tkey: 'valid',\n\t\tvalue: function valid() {\n\t\t\treturn this.isValid;\n\t\t}\n\t}, {\n\t\tkey: 'encode',\n\t\tvalue: function encode() {\n\t\t\tif (this.options.flat) {\n\t\t\t\treturn this.flatEncoding();\n\t\t\t} else {\n\t\t\t\treturn this.guardedEncoding();\n\t\t\t}\n\t\t}\n\t}, {\n\t\tkey: 'flatEncoding',\n\t\tvalue: function flatEncoding() {\n\t\t\tvar result = \"\";\n\n\t\t\tresult += \"101\";\n\t\t\tresult += this.encodeMiddleDigits();\n\t\t\tresult += \"010101\";\n\n\t\t\treturn {\n\t\t\t\tdata: result,\n\t\t\t\ttext: this.text\n\t\t\t};\n\t\t}\n\t}, {\n\t\tkey: 'guardedEncoding',\n\t\tvalue: function guardedEncoding() {\n\t\t\tvar result = [];\n\n\t\t\t// Add the UPC-A number system digit beneath the quiet zone\n\t\t\tif (this.displayValue) {\n\t\t\t\tresult.push({\n\t\t\t\t\tdata: \"00000000\",\n\t\t\t\t\ttext: this.text[0],\n\t\t\t\t\toptions: { textAlign: \"left\", fontSize: this.fontSize }\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// Add the guard bars\n\t\t\tresult.push({\n\t\t\t\tdata: \"101\",\n\t\t\t\toptions: { height: this.guardHeight }\n\t\t\t});\n\n\t\t\t// Add the 6 UPC-E digits\n\t\t\tresult.push({\n\t\t\t\tdata: this.encodeMiddleDigits(),\n\t\t\t\ttext: this.text.substring(1, 7),\n\t\t\t\toptions: { fontSize: this.fontSize }\n\t\t\t});\n\n\t\t\t// Add the end bits\n\t\t\tresult.push({\n\t\t\t\tdata: \"010101\",\n\t\t\t\toptions: { height: this.guardHeight }\n\t\t\t});\n\n\t\t\t// Add the UPC-A check digit beneath the quiet zone\n\t\t\tif (this.displayValue) {\n\t\t\t\tresult.push({\n\t\t\t\t\tdata: \"00000000\",\n\t\t\t\t\ttext: this.text[7],\n\t\t\t\t\toptions: { textAlign: \"right\", fontSize: this.fontSize }\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn result;\n\t\t}\n\t}, {\n\t\tkey: 'encodeMiddleDigits',\n\t\tvalue: function encodeMiddleDigits() {\n\t\t\tvar numberSystem = this.upcA[0];\n\t\t\tvar checkDigit = this.upcA[this.upcA.length - 1];\n\t\t\tvar parity = PARITIES[parseInt(checkDigit)][parseInt(numberSystem)];\n\t\t\treturn (0, _encoder2.default)(this.middleDigits, parity);\n\t\t}\n\t}]);\n\n\treturn UPCE;\n}(_Barcode3.default);\n\nfunction expandToUPCA(middleDigits, numberSystem) {\n\tvar lastUpcE = parseInt(middleDigits[middleDigits.length - 1]);\n\tvar expansion = EXPANSIONS[lastUpcE];\n\n\tvar result = \"\";\n\tvar digitIndex = 0;\n\tfor (var i = 0; i < expansion.length; i++) {\n\t\tvar c = expansion[i];\n\t\tif (c === 'X') {\n\t\t\tresult += middleDigits[digitIndex++];\n\t\t} else {\n\t\t\tresult += c;\n\t\t}\n\t}\n\n\tresult = '' + numberSystem + result;\n\treturn '' + result + (0, _UPC.checksum)(result);\n}\n\nexports.default = UPCE;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\n// Standard start end and middle bits\nvar SIDE_BIN = exports.SIDE_BIN = '101';\nvar MIDDLE_BIN = exports.MIDDLE_BIN = '01010';\n\nvar BINARIES = exports.BINARIES = {\n\t'L': [// The L (left) type of encoding\n\t'0001101', '0011001', '0010011', '0111101', '0100011', '0110001', '0101111', '0111011', '0110111', '0001011'],\n\t'G': [// The G type of encoding\n\t'0100111', '0110011', '0011011', '0100001', '0011101', '0111001', '0000101', '0010001', '0001001', '0010111'],\n\t'R': [// The R (right) type of encoding\n\t'1110010', '1100110', '1101100', '1000010', '1011100', '1001110', '1010000', '1000100', '1001000', '1110100'],\n\t'O': [// The O (odd) encoding for UPC-E\n\t'0001101', '0011001', '0010011', '0111101', '0100011', '0110001', '0101111', '0111011', '0110111', '0001011'],\n\t'E': [// The E (even) encoding for UPC-E\n\t'0100111', '0110011', '0011011', '0100001', '0011101', '0111001', '0000101', '0010001', '0001001', '0010111']\n};\n\n// Define the EAN-2 structure\nvar EAN2_STRUCTURE = exports.EAN2_STRUCTURE = ['LL', 'LG', 'GL', 'GG'];\n\n// Define the EAN-5 structure\nvar EAN5_STRUCTURE = exports.EAN5_STRUCTURE = ['GGLLL', 'GLGLL', 'GLLGL', 'GLLLG', 'LGGLL', 'LLGGL', 'LLLGG', 'LGLGL', 'LGLLG', 'LLGLG'];\n\n// Define the EAN-13 structure\nvar EAN13_STRUCTURE = exports.EAN13_STRUCTURE = ['LLLLLL', 'LLGLGG', 'LLGGLG', 'LLGGGL', 'LGLLGG', 'LGGLLG', 'LGGGLL', 'LGLGLG', 'LGLGGL', 'LGGLGL'];","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\n\nvar _constants = require('./constants');\n\n// Encode data string\nvar encode = function encode(data, structure, separator) {\n\tvar encoded = data.split('').map(function (val, idx) {\n\t\treturn _constants.BINARIES[structure[idx]];\n\t}).map(function (val, idx) {\n\t\treturn val ? val[data[idx]] : '';\n\t});\n\n\tif (separator) {\n\t\tvar last = data.length - 1;\n\t\tencoded = encoded.map(function (val, idx) {\n\t\t\treturn idx < last ? val + separator : val;\n\t\t});\n\t}\n\n\treturn encoded.join('');\n};\n\nexports.default = encode;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.UPCE = exports.UPC = exports.EAN2 = exports.EAN5 = exports.EAN8 = exports.EAN13 = undefined;\n\nvar _EAN = require('./EAN13.js');\n\nvar _EAN2 = _interopRequireDefault(_EAN);\n\nvar _EAN3 = require('./EAN8.js');\n\nvar _EAN4 = _interopRequireDefault(_EAN3);\n\nvar _EAN5 = require('./EAN5.js');\n\nvar _EAN6 = _interopRequireDefault(_EAN5);\n\nvar _EAN7 = require('./EAN2.js');\n\nvar _EAN8 = _interopRequireDefault(_EAN7);\n\nvar _UPC = require('./UPC.js');\n\nvar _UPC2 = _interopRequireDefault(_UPC);\n\nvar _UPCE = require('./UPCE.js');\n\nvar _UPCE2 = _interopRequireDefault(_UPCE);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.EAN13 = _EAN2.default;\nexports.EAN8 = _EAN4.default;\nexports.EAN5 = _EAN6.default;\nexports.EAN2 = _EAN8.default;\nexports.UPC = _UPC2.default;\nexports.UPCE = _UPCE2.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\nexports.GenericBarcode = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _Barcode2 = require(\"../Barcode.js\");\n\nvar _Barcode3 = _interopRequireDefault(_Barcode2);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar GenericBarcode = function (_Barcode) {\n\t_inherits(GenericBarcode, _Barcode);\n\n\tfunction GenericBarcode(data, options) {\n\t\t_classCallCheck(this, GenericBarcode);\n\n\t\treturn _possibleConstructorReturn(this, (GenericBarcode.__proto__ || Object.getPrototypeOf(GenericBarcode)).call(this, data, options)); // Sets this.data and this.text\n\t}\n\n\t// Return the corresponding binary numbers for the data provided\n\n\n\t_createClass(GenericBarcode, [{\n\t\tkey: \"encode\",\n\t\tvalue: function encode() {\n\t\t\treturn {\n\t\t\t\tdata: \"10101010101010101010101010101010101010101\",\n\t\t\t\ttext: this.text\n\t\t\t};\n\t\t}\n\n\t\t// Resturn true/false if the string provided is valid for this encoder\n\n\t}, {\n\t\tkey: \"valid\",\n\t\tvalue: function valid() {\n\t\t\treturn true;\n\t\t}\n\t}]);\n\n\treturn GenericBarcode;\n}(_Barcode3.default);\n\nexports.GenericBarcode = GenericBarcode;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _constants = require('./constants');\n\nvar _Barcode2 = require('../Barcode');\n\nvar _Barcode3 = _interopRequireDefault(_Barcode2);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar ITF = function (_Barcode) {\n\t_inherits(ITF, _Barcode);\n\n\tfunction ITF() {\n\t\t_classCallCheck(this, ITF);\n\n\t\treturn _possibleConstructorReturn(this, (ITF.__proto__ || Object.getPrototypeOf(ITF)).apply(this, arguments));\n\t}\n\n\t_createClass(ITF, [{\n\t\tkey: 'valid',\n\t\tvalue: function valid() {\n\t\t\treturn this.data.search(/^([0-9]{2})+$/) !== -1;\n\t\t}\n\t}, {\n\t\tkey: 'encode',\n\t\tvalue: function encode() {\n\t\t\tvar _this2 = this;\n\n\t\t\t// Calculate all the digit pairs\n\t\t\tvar encoded = this.data.match(/.{2}/g).map(function (pair) {\n\t\t\t\treturn _this2.encodePair(pair);\n\t\t\t}).join('');\n\n\t\t\treturn {\n\t\t\t\tdata: _constants.START_BIN + encoded + _constants.END_BIN,\n\t\t\t\ttext: this.text\n\t\t\t};\n\t\t}\n\n\t\t// Calculate the data of a number pair\n\n\t}, {\n\t\tkey: 'encodePair',\n\t\tvalue: function encodePair(pair) {\n\t\t\tvar second = _constants.BINARIES[pair[1]];\n\n\t\t\treturn _constants.BINARIES[pair[0]].split('').map(function (first, idx) {\n\t\t\t\treturn (first === '1' ? '111' : '1') + (second[idx] === '1' ? '000' : '0');\n\t\t\t}).join('');\n\t\t}\n\t}]);\n\n\treturn ITF;\n}(_Barcode3.default);\n\nexports.default = ITF;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _ITF2 = require('./ITF');\n\nvar _ITF3 = _interopRequireDefault(_ITF2);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n// Calculate the checksum digit\nvar checksum = function checksum(data) {\n\tvar res = data.substr(0, 13).split('').map(function (num) {\n\t\treturn parseInt(num, 10);\n\t}).reduce(function (sum, n, idx) {\n\t\treturn sum + n * (3 - idx % 2 * 2);\n\t}, 0);\n\n\treturn Math.ceil(res / 10) * 10 - res;\n};\n\nvar ITF14 = function (_ITF) {\n\t_inherits(ITF14, _ITF);\n\n\tfunction ITF14(data, options) {\n\t\t_classCallCheck(this, ITF14);\n\n\t\t// Add checksum if it does not exist\n\t\tif (data.search(/^[0-9]{13}$/) !== -1) {\n\t\t\tdata += checksum(data);\n\t\t}\n\t\treturn _possibleConstructorReturn(this, (ITF14.__proto__ || Object.getPrototypeOf(ITF14)).call(this, data, options));\n\t}\n\n\t_createClass(ITF14, [{\n\t\tkey: 'valid',\n\t\tvalue: function valid() {\n\t\t\treturn this.data.search(/^[0-9]{14}$/) !== -1 && +this.data[13] === checksum(this.data);\n\t\t}\n\t}]);\n\n\treturn ITF14;\n}(_ITF3.default);\n\nexports.default = ITF14;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\nvar START_BIN = exports.START_BIN = '1010';\nvar END_BIN = exports.END_BIN = '11101';\n\nvar BINARIES = exports.BINARIES = ['00110', '10001', '01001', '11000', '00101', '10100', '01100', '00011', '10010', '01010'];","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.ITF14 = exports.ITF = undefined;\n\nvar _ITF = require('./ITF');\n\nvar _ITF2 = _interopRequireDefault(_ITF);\n\nvar _ITF3 = require('./ITF14');\n\nvar _ITF4 = _interopRequireDefault(_ITF3);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.ITF = _ITF2.default;\nexports.ITF14 = _ITF4.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _Barcode2 = require(\"../Barcode.js\");\n\nvar _Barcode3 = _interopRequireDefault(_Barcode2);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // Encoding documentation\n// https://en.wikipedia.org/wiki/MSI_Barcode#Character_set_and_binary_lookup\n\nvar MSI = function (_Barcode) {\n\t_inherits(MSI, _Barcode);\n\n\tfunction MSI(data, options) {\n\t\t_classCallCheck(this, MSI);\n\n\t\treturn _possibleConstructorReturn(this, (MSI.__proto__ || Object.getPrototypeOf(MSI)).call(this, data, options));\n\t}\n\n\t_createClass(MSI, [{\n\t\tkey: \"encode\",\n\t\tvalue: function encode() {\n\t\t\t// Start bits\n\t\t\tvar ret = \"110\";\n\n\t\t\tfor (var i = 0; i < this.data.length; i++) {\n\t\t\t\t// Convert the character to binary (always 4 binary digits)\n\t\t\t\tvar digit = parseInt(this.data[i]);\n\t\t\t\tvar bin = digit.toString(2);\n\t\t\t\tbin = addZeroes(bin, 4 - bin.length);\n\n\t\t\t\t// Add 100 for every zero and 110 for every 1\n\t\t\t\tfor (var b = 0; b < bin.length; b++) {\n\t\t\t\t\tret += bin[b] == \"0\" ? \"100\" : \"110\";\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// End bits\n\t\t\tret += \"1001\";\n\n\t\t\treturn {\n\t\t\t\tdata: ret,\n\t\t\t\ttext: this.text\n\t\t\t};\n\t\t}\n\t}, {\n\t\tkey: \"valid\",\n\t\tvalue: function valid() {\n\t\t\treturn this.data.search(/^[0-9]+$/) !== -1;\n\t\t}\n\t}]);\n\n\treturn MSI;\n}(_Barcode3.default);\n\nfunction addZeroes(number, n) {\n\tfor (var i = 0; i < n; i++) {\n\t\tnumber = \"0\" + number;\n\t}\n\treturn number;\n}\n\nexports.default = MSI;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\n\nvar _MSI2 = require('./MSI.js');\n\nvar _MSI3 = _interopRequireDefault(_MSI2);\n\nvar _checksums = require('./checksums.js');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar MSI10 = function (_MSI) {\n\t_inherits(MSI10, _MSI);\n\n\tfunction MSI10(data, options) {\n\t\t_classCallCheck(this, MSI10);\n\n\t\treturn _possibleConstructorReturn(this, (MSI10.__proto__ || Object.getPrototypeOf(MSI10)).call(this, data + (0, _checksums.mod10)(data), options));\n\t}\n\n\treturn MSI10;\n}(_MSI3.default);\n\nexports.default = MSI10;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\n\nvar _MSI2 = require('./MSI.js');\n\nvar _MSI3 = _interopRequireDefault(_MSI2);\n\nvar _checksums = require('./checksums.js');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar MSI1010 = function (_MSI) {\n\t_inherits(MSI1010, _MSI);\n\n\tfunction MSI1010(data, options) {\n\t\t_classCallCheck(this, MSI1010);\n\n\t\tdata += (0, _checksums.mod10)(data);\n\t\tdata += (0, _checksums.mod10)(data);\n\t\treturn _possibleConstructorReturn(this, (MSI1010.__proto__ || Object.getPrototypeOf(MSI1010)).call(this, data, options));\n\t}\n\n\treturn MSI1010;\n}(_MSI3.default);\n\nexports.default = MSI1010;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\n\nvar _MSI2 = require('./MSI.js');\n\nvar _MSI3 = _interopRequireDefault(_MSI2);\n\nvar _checksums = require('./checksums.js');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar MSI11 = function (_MSI) {\n\t_inherits(MSI11, _MSI);\n\n\tfunction MSI11(data, options) {\n\t\t_classCallCheck(this, MSI11);\n\n\t\treturn _possibleConstructorReturn(this, (MSI11.__proto__ || Object.getPrototypeOf(MSI11)).call(this, data + (0, _checksums.mod11)(data), options));\n\t}\n\n\treturn MSI11;\n}(_MSI3.default);\n\nexports.default = MSI11;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\n\nvar _MSI2 = require('./MSI.js');\n\nvar _MSI3 = _interopRequireDefault(_MSI2);\n\nvar _checksums = require('./checksums.js');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar MSI1110 = function (_MSI) {\n\t_inherits(MSI1110, _MSI);\n\n\tfunction MSI1110(data, options) {\n\t\t_classCallCheck(this, MSI1110);\n\n\t\tdata += (0, _checksums.mod11)(data);\n\t\tdata += (0, _checksums.mod10)(data);\n\t\treturn _possibleConstructorReturn(this, (MSI1110.__proto__ || Object.getPrototypeOf(MSI1110)).call(this, data, options));\n\t}\n\n\treturn MSI1110;\n}(_MSI3.default);\n\nexports.default = MSI1110;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\nexports.mod10 = mod10;\nexports.mod11 = mod11;\nfunction mod10(number) {\n\tvar sum = 0;\n\tfor (var i = 0; i < number.length; i++) {\n\t\tvar n = parseInt(number[i]);\n\t\tif ((i + number.length) % 2 === 0) {\n\t\t\tsum += n;\n\t\t} else {\n\t\t\tsum += n * 2 % 10 + Math.floor(n * 2 / 10);\n\t\t}\n\t}\n\treturn (10 - sum % 10) % 10;\n}\n\nfunction mod11(number) {\n\tvar sum = 0;\n\tvar weights = [2, 3, 4, 5, 6, 7];\n\tfor (var i = 0; i < number.length; i++) {\n\t\tvar n = parseInt(number[number.length - 1 - i]);\n\t\tsum += weights[i % weights.length] * n;\n\t}\n\treturn (11 - sum % 11) % 11;\n}","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.MSI1110 = exports.MSI1010 = exports.MSI11 = exports.MSI10 = exports.MSI = undefined;\n\nvar _MSI = require('./MSI.js');\n\nvar _MSI2 = _interopRequireDefault(_MSI);\n\nvar _MSI3 = require('./MSI10.js');\n\nvar _MSI4 = _interopRequireDefault(_MSI3);\n\nvar _MSI5 = require('./MSI11.js');\n\nvar _MSI6 = _interopRequireDefault(_MSI5);\n\nvar _MSI7 = require('./MSI1010.js');\n\nvar _MSI8 = _interopRequireDefault(_MSI7);\n\nvar _MSI9 = require('./MSI1110.js');\n\nvar _MSI10 = _interopRequireDefault(_MSI9);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.MSI = _MSI2.default;\nexports.MSI10 = _MSI4.default;\nexports.MSI11 = _MSI6.default;\nexports.MSI1010 = _MSI8.default;\nexports.MSI1110 = _MSI10.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\nexports.codabar = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _Barcode2 = require(\"../Barcode.js\");\n\nvar _Barcode3 = _interopRequireDefault(_Barcode2);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // Encoding specification:\n// http://www.barcodeisland.com/codabar.phtml\n\nvar codabar = function (_Barcode) {\n\t_inherits(codabar, _Barcode);\n\n\tfunction codabar(data, options) {\n\t\t_classCallCheck(this, codabar);\n\n\t\tif (data.search(/^[0-9\\-\\$\\:\\.\\+\\/]+$/) === 0) {\n\t\t\tdata = \"A\" + data + \"A\";\n\t\t}\n\n\t\tvar _this = _possibleConstructorReturn(this, (codabar.__proto__ || Object.getPrototypeOf(codabar)).call(this, data.toUpperCase(), options));\n\n\t\t_this.text = _this.options.text || _this.text.replace(/[A-D]/g, '');\n\t\treturn _this;\n\t}\n\n\t_createClass(codabar, [{\n\t\tkey: \"valid\",\n\t\tvalue: function valid() {\n\t\t\treturn this.data.search(/^[A-D][0-9\\-\\$\\:\\.\\+\\/]+[A-D]$/) !== -1;\n\t\t}\n\t}, {\n\t\tkey: \"encode\",\n\t\tvalue: function encode() {\n\t\t\tvar result = [];\n\t\t\tvar encodings = this.getEncodings();\n\t\t\tfor (var i = 0; i < this.data.length; i++) {\n\t\t\t\tresult.push(encodings[this.data.charAt(i)]);\n\t\t\t\t// for all characters except the last, append a narrow-space (\"0\")\n\t\t\t\tif (i !== this.data.length - 1) {\n\t\t\t\t\tresult.push(\"0\");\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn {\n\t\t\t\ttext: this.text,\n\t\t\t\tdata: result.join('')\n\t\t\t};\n\t\t}\n\t}, {\n\t\tkey: \"getEncodings\",\n\t\tvalue: function getEncodings() {\n\t\t\treturn {\n\t\t\t\t\"0\": \"101010011\",\n\t\t\t\t\"1\": \"101011001\",\n\t\t\t\t\"2\": \"101001011\",\n\t\t\t\t\"3\": \"110010101\",\n\t\t\t\t\"4\": \"101101001\",\n\t\t\t\t\"5\": \"110101001\",\n\t\t\t\t\"6\": \"100101011\",\n\t\t\t\t\"7\": \"100101101\",\n\t\t\t\t\"8\": \"100110101\",\n\t\t\t\t\"9\": \"110100101\",\n\t\t\t\t\"-\": \"101001101\",\n\t\t\t\t\"$\": \"101100101\",\n\t\t\t\t\":\": \"1101011011\",\n\t\t\t\t\"/\": \"1101101011\",\n\t\t\t\t\".\": \"1101101101\",\n\t\t\t\t\"+\": \"1011011011\",\n\t\t\t\t\"A\": \"1011001001\",\n\t\t\t\t\"B\": \"1001001011\",\n\t\t\t\t\"C\": \"1010010011\",\n\t\t\t\t\"D\": \"1010011001\"\n\t\t\t};\n\t\t}\n\t}]);\n\n\treturn codabar;\n}(_Barcode3.default);\n\nexports.codabar = codabar;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\n\nvar _CODE = require('./CODE39/');\n\nvar _CODE2 = require('./CODE128/');\n\nvar _EAN_UPC = require('./EAN_UPC/');\n\nvar _ITF = require('./ITF/');\n\nvar _MSI = require('./MSI/');\n\nvar _pharmacode = require('./pharmacode/');\n\nvar _codabar = require('./codabar');\n\nvar _GenericBarcode = require('./GenericBarcode/');\n\nexports.default = {\n\tCODE39: _CODE.CODE39,\n\tCODE128: _CODE2.CODE128, CODE128A: _CODE2.CODE128A, CODE128B: _CODE2.CODE128B, CODE128C: _CODE2.CODE128C,\n\tEAN13: _EAN_UPC.EAN13, EAN8: _EAN_UPC.EAN8, EAN5: _EAN_UPC.EAN5, EAN2: _EAN_UPC.EAN2, UPC: _EAN_UPC.UPC, UPCE: _EAN_UPC.UPCE,\n\tITF14: _ITF.ITF14,\n\tITF: _ITF.ITF,\n\tMSI: _MSI.MSI, MSI10: _MSI.MSI10, MSI11: _MSI.MSI11, MSI1010: _MSI.MSI1010, MSI1110: _MSI.MSI1110,\n\tpharmacode: _pharmacode.pharmacode,\n\tcodabar: _codabar.codabar,\n\tGenericBarcode: _GenericBarcode.GenericBarcode\n};","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\nexports.pharmacode = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _Barcode2 = require(\"../Barcode.js\");\n\nvar _Barcode3 = _interopRequireDefault(_Barcode2);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // Encoding documentation\n// http://www.gomaro.ch/ftproot/Laetus_PHARMA-CODE.pdf\n\nvar pharmacode = function (_Barcode) {\n\t_inherits(pharmacode, _Barcode);\n\n\tfunction pharmacode(data, options) {\n\t\t_classCallCheck(this, pharmacode);\n\n\t\tvar _this = _possibleConstructorReturn(this, (pharmacode.__proto__ || Object.getPrototypeOf(pharmacode)).call(this, data, options));\n\n\t\t_this.number = parseInt(data, 10);\n\t\treturn _this;\n\t}\n\n\t_createClass(pharmacode, [{\n\t\tkey: \"encode\",\n\t\tvalue: function encode() {\n\t\t\tvar z = this.number;\n\t\t\tvar result = \"\";\n\n\t\t\t// http://i.imgur.com/RMm4UDJ.png\n\t\t\t// (source: http://www.gomaro.ch/ftproot/Laetus_PHARMA-CODE.pdf, page: 34)\n\t\t\twhile (!isNaN(z) && z != 0) {\n\t\t\t\tif (z % 2 === 0) {\n\t\t\t\t\t// Even\n\t\t\t\t\tresult = \"11100\" + result;\n\t\t\t\t\tz = (z - 2) / 2;\n\t\t\t\t} else {\n\t\t\t\t\t// Odd\n\t\t\t\t\tresult = \"100\" + result;\n\t\t\t\t\tz = (z - 1) / 2;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove the two last zeroes\n\t\t\tresult = result.slice(0, -2);\n\n\t\t\treturn {\n\t\t\t\tdata: result,\n\t\t\t\ttext: this.text\n\t\t\t};\n\t\t}\n\t}, {\n\t\tkey: \"valid\",\n\t\tvalue: function valid() {\n\t\t\treturn this.number >= 3 && this.number <= 131070;\n\t\t}\n\t}]);\n\n\treturn pharmacode;\n}(_Barcode3.default);\n\nexports.pharmacode = pharmacode;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/*eslint no-console: 0 */\n\nvar ErrorHandler = function () {\n\tfunction ErrorHandler(api) {\n\t\t_classCallCheck(this, ErrorHandler);\n\n\t\tthis.api = api;\n\t}\n\n\t_createClass(ErrorHandler, [{\n\t\tkey: \"handleCatch\",\n\t\tvalue: function handleCatch(e) {\n\t\t\t// If babel supported extending of Error in a correct way instanceof would be used here\n\t\t\tif (e.name === \"InvalidInputException\") {\n\t\t\t\tif (this.api._options.valid !== this.api._defaults.valid) {\n\t\t\t\t\tthis.api._options.valid(false);\n\t\t\t\t} else {\n\t\t\t\t\tthrow e.message;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthrow e;\n\t\t\t}\n\n\t\t\tthis.api.render = function () {};\n\t\t}\n\t}, {\n\t\tkey: \"wrapBarcodeCall\",\n\t\tvalue: function wrapBarcodeCall(func) {\n\t\t\ttry {\n\t\t\t\tvar result = func.apply(undefined, arguments);\n\t\t\t\tthis.api._options.valid(true);\n\t\t\t\treturn result;\n\t\t\t} catch (e) {\n\t\t\t\tthis.handleCatch(e);\n\n\t\t\t\treturn this.api;\n\t\t\t}\n\t\t}\n\t}]);\n\n\treturn ErrorHandler;\n}();\n\nexports.default = ErrorHandler;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar InvalidInputException = function (_Error) {\n\t_inherits(InvalidInputException, _Error);\n\n\tfunction InvalidInputException(symbology, input) {\n\t\t_classCallCheck(this, InvalidInputException);\n\n\t\tvar _this = _possibleConstructorReturn(this, (InvalidInputException.__proto__ || Object.getPrototypeOf(InvalidInputException)).call(this));\n\n\t\t_this.name = \"InvalidInputException\";\n\n\t\t_this.symbology = symbology;\n\t\t_this.input = input;\n\n\t\t_this.message = '\"' + _this.input + '\" is not a valid input for ' + _this.symbology;\n\t\treturn _this;\n\t}\n\n\treturn InvalidInputException;\n}(Error);\n\nvar InvalidElementException = function (_Error2) {\n\t_inherits(InvalidElementException, _Error2);\n\n\tfunction InvalidElementException() {\n\t\t_classCallCheck(this, InvalidElementException);\n\n\t\tvar _this2 = _possibleConstructorReturn(this, (InvalidElementException.__proto__ || Object.getPrototypeOf(InvalidElementException)).call(this));\n\n\t\t_this2.name = \"InvalidElementException\";\n\t\t_this2.message = \"Not supported type to render on\";\n\t\treturn _this2;\n\t}\n\n\treturn InvalidElementException;\n}(Error);\n\nvar NoElementException = function (_Error3) {\n\t_inherits(NoElementException, _Error3);\n\n\tfunction NoElementException() {\n\t\t_classCallCheck(this, NoElementException);\n\n\t\tvar _this3 = _possibleConstructorReturn(this, (NoElementException.__proto__ || Object.getPrototypeOf(NoElementException)).call(this));\n\n\t\t_this3.name = \"NoElementException\";\n\t\t_this3.message = \"No element to render on.\";\n\t\treturn _this3;\n\t}\n\n\treturn NoElementException;\n}(Error);\n\nexports.InvalidInputException = InvalidInputException;\nexports.InvalidElementException = InvalidElementException;\nexports.NoElementException = NoElementException;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\nexports.default = fixOptions;\n\n\nfunction fixOptions(options) {\n\t// Fix the margins\n\toptions.marginTop = options.marginTop || options.margin;\n\toptions.marginBottom = options.marginBottom || options.margin;\n\toptions.marginRight = options.marginRight || options.margin;\n\toptions.marginLeft = options.marginLeft || options.margin;\n\n\treturn options;\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\n\nvar _optionsFromStrings = require(\"./optionsFromStrings.js\");\n\nvar _optionsFromStrings2 = _interopRequireDefault(_optionsFromStrings);\n\nvar _defaults = require(\"../options/defaults.js\");\n\nvar _defaults2 = _interopRequireDefault(_defaults);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction getOptionsFromElement(element) {\n\tvar options = {};\n\tfor (var property in _defaults2.default) {\n\t\tif (_defaults2.default.hasOwnProperty(property)) {\n\t\t\t// jsbarcode-*\n\t\t\tif (element.hasAttribute(\"jsbarcode-\" + property.toLowerCase())) {\n\t\t\t\toptions[property] = element.getAttribute(\"jsbarcode-\" + property.toLowerCase());\n\t\t\t}\n\n\t\t\t// data-*\n\t\t\tif (element.hasAttribute(\"data-\" + property.toLowerCase())) {\n\t\t\t\toptions[property] = element.getAttribute(\"data-\" + property.toLowerCase());\n\t\t\t}\n\t\t}\n\t}\n\n\toptions[\"value\"] = element.getAttribute(\"jsbarcode-value\") || element.getAttribute(\"data-value\");\n\n\t// Since all atributes are string they need to be converted to integers\n\toptions = (0, _optionsFromStrings2.default)(options);\n\n\treturn options;\n}\n\nexports.default = getOptionsFromElement;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; /* global HTMLImageElement */\n/* global HTMLCanvasElement */\n/* global SVGElement */\n\nvar _getOptionsFromElement = require(\"./getOptionsFromElement.js\");\n\nvar _getOptionsFromElement2 = _interopRequireDefault(_getOptionsFromElement);\n\nvar _renderers = require(\"../renderers\");\n\nvar _renderers2 = _interopRequireDefault(_renderers);\n\nvar _exceptions = require(\"../exceptions/exceptions.js\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n// Takes an element and returns an object with information about how\n// it should be rendered\n// This could also return an array with these objects\n// {\n//   element: The element that the renderer should draw on\n//   renderer: The name of the renderer\n//   afterRender (optional): If something has to done after the renderer\n//     completed, calls afterRender (function)\n//   options (optional): Options that can be defined in the element\n// }\n\nfunction getRenderProperties(element) {\n\t// If the element is a string, query select call again\n\tif (typeof element === \"string\") {\n\t\treturn querySelectedRenderProperties(element);\n\t}\n\t// If element is array. Recursivly call with every object in the array\n\telse if (Array.isArray(element)) {\n\t\t\tvar returnArray = [];\n\t\t\tfor (var i = 0; i < element.length; i++) {\n\t\t\t\treturnArray.push(getRenderProperties(element[i]));\n\t\t\t}\n\t\t\treturn returnArray;\n\t\t}\n\t\t// If element, render on canvas and set the uri as src\n\t\telse if (typeof HTMLCanvasElement !== 'undefined' && element instanceof HTMLImageElement) {\n\t\t\t\treturn newCanvasRenderProperties(element);\n\t\t\t}\n\t\t\t// If SVG\n\t\t\telse if (element && element.nodeName && element.nodeName.toLowerCase() === 'svg' || typeof SVGElement !== 'undefined' && element instanceof SVGElement) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\telement: element,\n\t\t\t\t\t\toptions: (0, _getOptionsFromElement2.default)(element),\n\t\t\t\t\t\trenderer: _renderers2.default.SVGRenderer\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\t// If canvas (in browser)\n\t\t\t\telse if (typeof HTMLCanvasElement !== 'undefined' && element instanceof HTMLCanvasElement) {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\telement: element,\n\t\t\t\t\t\t\toptions: (0, _getOptionsFromElement2.default)(element),\n\t\t\t\t\t\t\trenderer: _renderers2.default.CanvasRenderer\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\t// If canvas (in node)\n\t\t\t\t\telse if (element && element.getContext) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\telement: element,\n\t\t\t\t\t\t\t\trenderer: _renderers2.default.CanvasRenderer\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t} else if (element && (typeof element === \"undefined\" ? \"undefined\" : _typeof(element)) === 'object' && !element.nodeName) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\telement: element,\n\t\t\t\t\t\t\t\trenderer: _renderers2.default.ObjectRenderer\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthrow new _exceptions.InvalidElementException();\n\t\t\t\t\t\t}\n}\n\nfunction querySelectedRenderProperties(string) {\n\tvar selector = document.querySelectorAll(string);\n\tif (selector.length === 0) {\n\t\treturn undefined;\n\t} else {\n\t\tvar returnArray = [];\n\t\tfor (var i = 0; i < selector.length; i++) {\n\t\t\treturnArray.push(getRenderProperties(selector[i]));\n\t\t}\n\t\treturn returnArray;\n\t}\n}\n\nfunction newCanvasRenderProperties(imgElement) {\n\tvar canvas = document.createElement('canvas');\n\treturn {\n\t\telement: canvas,\n\t\toptions: (0, _getOptionsFromElement2.default)(imgElement),\n\t\trenderer: _renderers2.default.CanvasRenderer,\n\t\tafterRender: function afterRender() {\n\t\t\timgElement.setAttribute(\"src\", canvas.toDataURL());\n\t\t}\n\t};\n}\n\nexports.default = getRenderProperties;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\nexports.default = linearizeEncodings;\n\n// Encodings can be nestled like [[1-1, 1-2], 2, [3-1, 3-2]\n// Convert to [1-1, 1-2, 2, 3-1, 3-2]\n\nfunction linearizeEncodings(encodings) {\n\tvar linearEncodings = [];\n\tfunction nextLevel(encoded) {\n\t\tif (Array.isArray(encoded)) {\n\t\t\tfor (var i = 0; i < encoded.length; i++) {\n\t\t\t\tnextLevel(encoded[i]);\n\t\t\t}\n\t\t} else {\n\t\t\tencoded.text = encoded.text || \"\";\n\t\t\tencoded.data = encoded.data || \"\";\n\t\t\tlinearEncodings.push(encoded);\n\t\t}\n\t}\n\tnextLevel(encodings);\n\n\treturn linearEncodings;\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nexports.default = function (old, replaceObj) {\n  return _extends({}, old, replaceObj);\n};","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\nexports.default = optionsFromStrings;\n\n// Convert string to integers/booleans where it should be\n\nfunction optionsFromStrings(options) {\n\tvar intOptions = [\"width\", \"height\", \"textMargin\", \"fontSize\", \"margin\", \"marginTop\", \"marginBottom\", \"marginLeft\", \"marginRight\"];\n\n\tfor (var intOption in intOptions) {\n\t\tif (intOptions.hasOwnProperty(intOption)) {\n\t\t\tintOption = intOptions[intOption];\n\t\t\tif (typeof options[intOption] === \"string\") {\n\t\t\t\toptions[intOption] = parseInt(options[intOption], 10);\n\t\t\t}\n\t\t}\n\t}\n\n\tif (typeof options[\"displayValue\"] === \"string\") {\n\t\toptions[\"displayValue\"] = options[\"displayValue\"] != \"false\";\n\t}\n\n\treturn options;\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\nvar defaults = {\n\twidth: 2,\n\theight: 100,\n\tformat: \"auto\",\n\tdisplayValue: true,\n\tfontOptions: \"\",\n\tfont: \"monospace\",\n\ttext: undefined,\n\ttextAlign: \"center\",\n\ttextPosition: \"bottom\",\n\ttextMargin: 2,\n\tfontSize: 20,\n\tbackground: \"#ffffff\",\n\tlineColor: \"#000000\",\n\tmargin: 10,\n\tmarginTop: undefined,\n\tmarginBottom: undefined,\n\tmarginLeft: undefined,\n\tmarginRight: undefined,\n\tvalid: function valid() {}\n};\n\nexports.default = defaults;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _merge = require(\"../help/merge.js\");\n\nvar _merge2 = _interopRequireDefault(_merge);\n\nvar _shared = require(\"./shared.js\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar CanvasRenderer = function () {\n\tfunction CanvasRenderer(canvas, encodings, options) {\n\t\t_classCallCheck(this, CanvasRenderer);\n\n\t\tthis.canvas = canvas;\n\t\tthis.encodings = encodings;\n\t\tthis.options = options;\n\t}\n\n\t_createClass(CanvasRenderer, [{\n\t\tkey: \"render\",\n\t\tvalue: function render() {\n\t\t\t// Abort if the browser does not support HTML5 canvas\n\t\t\tif (!this.canvas.getContext) {\n\t\t\t\tthrow new Error('The browser does not support canvas.');\n\t\t\t}\n\n\t\t\tthis.prepareCanvas();\n\t\t\tfor (var i = 0; i < this.encodings.length; i++) {\n\t\t\t\tvar encodingOptions = (0, _merge2.default)(this.options, this.encodings[i].options);\n\n\t\t\t\tthis.drawCanvasBarcode(encodingOptions, this.encodings[i]);\n\t\t\t\tthis.drawCanvasText(encodingOptions, this.encodings[i]);\n\n\t\t\t\tthis.moveCanvasDrawing(this.encodings[i]);\n\t\t\t}\n\n\t\t\tthis.restoreCanvas();\n\t\t}\n\t}, {\n\t\tkey: \"prepareCanvas\",\n\t\tvalue: function prepareCanvas() {\n\t\t\t// Get the canvas context\n\t\t\tvar ctx = this.canvas.getContext(\"2d\");\n\n\t\t\tctx.save();\n\n\t\t\t(0, _shared.calculateEncodingAttributes)(this.encodings, this.options, ctx);\n\t\t\tvar totalWidth = (0, _shared.getTotalWidthOfEncodings)(this.encodings);\n\t\t\tvar maxHeight = (0, _shared.getMaximumHeightOfEncodings)(this.encodings);\n\n\t\t\tthis.canvas.width = totalWidth + this.options.marginLeft + this.options.marginRight;\n\n\t\t\tthis.canvas.height = maxHeight;\n\n\t\t\t// Paint the canvas\n\t\t\tctx.clearRect(0, 0, this.canvas.width, this.canvas.height);\n\t\t\tif (this.options.background) {\n\t\t\t\tctx.fillStyle = this.options.background;\n\t\t\t\tctx.fillRect(0, 0, this.canvas.width, this.canvas.height);\n\t\t\t}\n\n\t\t\tctx.translate(this.options.marginLeft, 0);\n\t\t}\n\t}, {\n\t\tkey: \"drawCanvasBarcode\",\n\t\tvalue: function drawCanvasBarcode(options, encoding) {\n\t\t\t// Get the canvas context\n\t\t\tvar ctx = this.canvas.getContext(\"2d\");\n\n\t\t\tvar binary = encoding.data;\n\n\t\t\t// Creates the barcode out of the encoded binary\n\t\t\tvar yFrom;\n\t\t\tif (options.textPosition == \"top\") {\n\t\t\t\tyFrom = options.marginTop + options.fontSize + options.textMargin;\n\t\t\t} else {\n\t\t\t\tyFrom = options.marginTop;\n\t\t\t}\n\n\t\t\tctx.fillStyle = options.lineColor;\n\n\t\t\tfor (var b = 0; b < binary.length; b++) {\n\t\t\t\tvar x = b * options.width + encoding.barcodePadding;\n\n\t\t\t\tif (binary[b] === \"1\") {\n\t\t\t\t\tctx.fillRect(x, yFrom, options.width, options.height);\n\t\t\t\t} else if (binary[b]) {\n\t\t\t\t\tctx.fillRect(x, yFrom, options.width, options.height * binary[b]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}, {\n\t\tkey: \"drawCanvasText\",\n\t\tvalue: function drawCanvasText(options, encoding) {\n\t\t\t// Get the canvas context\n\t\t\tvar ctx = this.canvas.getContext(\"2d\");\n\n\t\t\tvar font = options.fontOptions + \" \" + options.fontSize + \"px \" + options.font;\n\n\t\t\t// Draw the text if displayValue is set\n\t\t\tif (options.displayValue) {\n\t\t\t\tvar x, y;\n\n\t\t\t\tif (options.textPosition == \"top\") {\n\t\t\t\t\ty = options.marginTop + options.fontSize - options.textMargin;\n\t\t\t\t} else {\n\t\t\t\t\ty = options.height + options.textMargin + options.marginTop + options.fontSize;\n\t\t\t\t}\n\n\t\t\t\tctx.font = font;\n\n\t\t\t\t// Draw the text in the correct X depending on the textAlign option\n\t\t\t\tif (options.textAlign == \"left\" || encoding.barcodePadding > 0) {\n\t\t\t\t\tx = 0;\n\t\t\t\t\tctx.textAlign = 'left';\n\t\t\t\t} else if (options.textAlign == \"right\") {\n\t\t\t\t\tx = encoding.width - 1;\n\t\t\t\t\tctx.textAlign = 'right';\n\t\t\t\t}\n\t\t\t\t// In all other cases, center the text\n\t\t\t\telse {\n\t\t\t\t\t\tx = encoding.width / 2;\n\t\t\t\t\t\tctx.textAlign = 'center';\n\t\t\t\t\t}\n\n\t\t\t\tctx.fillText(encoding.text, x, y);\n\t\t\t}\n\t\t}\n\t}, {\n\t\tkey: \"moveCanvasDrawing\",\n\t\tvalue: function moveCanvasDrawing(encoding) {\n\t\t\tvar ctx = this.canvas.getContext(\"2d\");\n\n\t\t\tctx.translate(encoding.width, 0);\n\t\t}\n\t}, {\n\t\tkey: \"restoreCanvas\",\n\t\tvalue: function restoreCanvas() {\n\t\t\t// Get the canvas context\n\t\t\tvar ctx = this.canvas.getContext(\"2d\");\n\n\t\t\tctx.restore();\n\t\t}\n\t}]);\n\n\treturn CanvasRenderer;\n}();\n\nexports.default = CanvasRenderer;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _canvas = require('./canvas.js');\n\nvar _canvas2 = _interopRequireDefault(_canvas);\n\nvar _svg = require('./svg.js');\n\nvar _svg2 = _interopRequireDefault(_svg);\n\nvar _object = require('./object.js');\n\nvar _object2 = _interopRequireDefault(_object);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = { CanvasRenderer: _canvas2.default, SVGRenderer: _svg2.default, ObjectRenderer: _object2.default };","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar ObjectRenderer = function () {\n\tfunction ObjectRenderer(object, encodings, options) {\n\t\t_classCallCheck(this, ObjectRenderer);\n\n\t\tthis.object = object;\n\t\tthis.encodings = encodings;\n\t\tthis.options = options;\n\t}\n\n\t_createClass(ObjectRenderer, [{\n\t\tkey: \"render\",\n\t\tvalue: function render() {\n\t\t\tthis.object.encodings = this.encodings;\n\t\t}\n\t}]);\n\n\treturn ObjectRenderer;\n}();\n\nexports.default = ObjectRenderer;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\nexports.getTotalWidthOfEncodings = exports.calculateEncodingAttributes = exports.getBarcodePadding = exports.getEncodingHeight = exports.getMaximumHeightOfEncodings = undefined;\n\nvar _merge = require(\"../help/merge.js\");\n\nvar _merge2 = _interopRequireDefault(_merge);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction getEncodingHeight(encoding, options) {\n\treturn options.height + (options.displayValue && encoding.text.length > 0 ? options.fontSize + options.textMargin : 0) + options.marginTop + options.marginBottom;\n}\n\nfunction getBarcodePadding(textWidth, barcodeWidth, options) {\n\tif (options.displayValue && barcodeWidth < textWidth) {\n\t\tif (options.textAlign == \"center\") {\n\t\t\treturn Math.floor((textWidth - barcodeWidth) / 2);\n\t\t} else if (options.textAlign == \"left\") {\n\t\t\treturn 0;\n\t\t} else if (options.textAlign == \"right\") {\n\t\t\treturn Math.floor(textWidth - barcodeWidth);\n\t\t}\n\t}\n\treturn 0;\n}\n\nfunction calculateEncodingAttributes(encodings, barcodeOptions, context) {\n\tfor (var i = 0; i < encodings.length; i++) {\n\t\tvar encoding = encodings[i];\n\t\tvar options = (0, _merge2.default)(barcodeOptions, encoding.options);\n\n\t\t// Calculate the width of the encoding\n\t\tvar textWidth;\n\t\tif (options.displayValue) {\n\t\t\ttextWidth = messureText(encoding.text, options, context);\n\t\t} else {\n\t\t\ttextWidth = 0;\n\t\t}\n\n\t\tvar barcodeWidth = encoding.data.length * options.width;\n\t\tencoding.width = Math.ceil(Math.max(textWidth, barcodeWidth));\n\n\t\tencoding.height = getEncodingHeight(encoding, options);\n\n\t\tencoding.barcodePadding = getBarcodePadding(textWidth, barcodeWidth, options);\n\t}\n}\n\nfunction getTotalWidthOfEncodings(encodings) {\n\tvar totalWidth = 0;\n\tfor (var i = 0; i < encodings.length; i++) {\n\t\ttotalWidth += encodings[i].width;\n\t}\n\treturn totalWidth;\n}\n\nfunction getMaximumHeightOfEncodings(encodings) {\n\tvar maxHeight = 0;\n\tfor (var i = 0; i < encodings.length; i++) {\n\t\tif (encodings[i].height > maxHeight) {\n\t\t\tmaxHeight = encodings[i].height;\n\t\t}\n\t}\n\treturn maxHeight;\n}\n\nfunction messureText(string, options, context) {\n\tvar ctx;\n\n\tif (context) {\n\t\tctx = context;\n\t} else if (typeof document !== \"undefined\") {\n\t\tctx = document.createElement(\"canvas\").getContext(\"2d\");\n\t} else {\n\t\t// If the text cannot be messured we will return 0.\n\t\t// This will make some barcode with big text render incorrectly\n\t\treturn 0;\n\t}\n\tctx.font = options.fontOptions + \" \" + options.fontSize + \"px \" + options.font;\n\n\t// Calculate the width of the encoding\n\tvar measureTextResult = ctx.measureText(string);\n\tif (!measureTextResult) {\n\t\t// Some implementations don't implement measureText and return undefined.\n\t\t// If the text cannot be measured we will return 0.\n\t\t// This will make some barcode with big text render incorrectly\n\t\treturn 0;\n\t}\n\tvar size = measureTextResult.width;\n\treturn size;\n}\n\nexports.getMaximumHeightOfEncodings = getMaximumHeightOfEncodings;\nexports.getEncodingHeight = getEncodingHeight;\nexports.getBarcodePadding = getBarcodePadding;\nexports.calculateEncodingAttributes = calculateEncodingAttributes;\nexports.getTotalWidthOfEncodings = getTotalWidthOfEncodings;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _merge = require(\"../help/merge.js\");\n\nvar _merge2 = _interopRequireDefault(_merge);\n\nvar _shared = require(\"./shared.js\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar svgns = \"http://www.w3.org/2000/svg\";\n\nvar SVGRenderer = function () {\n\tfunction SVGRenderer(svg, encodings, options) {\n\t\t_classCallCheck(this, SVGRenderer);\n\n\t\tthis.svg = svg;\n\t\tthis.encodings = encodings;\n\t\tthis.options = options;\n\t\tthis.document = options.xmlDocument || document;\n\t}\n\n\t_createClass(SVGRenderer, [{\n\t\tkey: \"render\",\n\t\tvalue: function render() {\n\t\t\tvar currentX = this.options.marginLeft;\n\n\t\t\tthis.prepareSVG();\n\t\t\tfor (var i = 0; i < this.encodings.length; i++) {\n\t\t\t\tvar encoding = this.encodings[i];\n\t\t\t\tvar encodingOptions = (0, _merge2.default)(this.options, encoding.options);\n\n\t\t\t\tvar group = this.createGroup(currentX, encodingOptions.marginTop, this.svg);\n\n\t\t\t\tthis.setGroupOptions(group, encodingOptions);\n\n\t\t\t\tthis.drawSvgBarcode(group, encodingOptions, encoding);\n\t\t\t\tthis.drawSVGText(group, encodingOptions, encoding);\n\n\t\t\t\tcurrentX += encoding.width;\n\t\t\t}\n\t\t}\n\t}, {\n\t\tkey: \"prepareSVG\",\n\t\tvalue: function prepareSVG() {\n\t\t\t// Clear the SVG\n\t\t\twhile (this.svg.firstChild) {\n\t\t\t\tthis.svg.removeChild(this.svg.firstChild);\n\t\t\t}\n\n\t\t\t(0, _shared.calculateEncodingAttributes)(this.encodings, this.options);\n\t\t\tvar totalWidth = (0, _shared.getTotalWidthOfEncodings)(this.encodings);\n\t\t\tvar maxHeight = (0, _shared.getMaximumHeightOfEncodings)(this.encodings);\n\n\t\t\tvar width = totalWidth + this.options.marginLeft + this.options.marginRight;\n\t\t\tthis.setSvgAttributes(width, maxHeight);\n\n\t\t\tif (this.options.background) {\n\t\t\t\tthis.drawRect(0, 0, width, maxHeight, this.svg).setAttribute(\"style\", \"fill:\" + this.options.background + \";\");\n\t\t\t}\n\t\t}\n\t}, {\n\t\tkey: \"drawSvgBarcode\",\n\t\tvalue: function drawSvgBarcode(parent, options, encoding) {\n\t\t\tvar binary = encoding.data;\n\n\t\t\t// Creates the barcode out of the encoded binary\n\t\t\tvar yFrom;\n\t\t\tif (options.textPosition == \"top\") {\n\t\t\t\tyFrom = options.fontSize + options.textMargin;\n\t\t\t} else {\n\t\t\t\tyFrom = 0;\n\t\t\t}\n\n\t\t\tvar barWidth = 0;\n\t\t\tvar x = 0;\n\t\t\tfor (var b = 0; b < binary.length; b++) {\n\t\t\t\tx = b * options.width + encoding.barcodePadding;\n\n\t\t\t\tif (binary[b] === \"1\") {\n\t\t\t\t\tbarWidth++;\n\t\t\t\t} else if (barWidth > 0) {\n\t\t\t\t\tthis.drawRect(x - options.width * barWidth, yFrom, options.width * barWidth, options.height, parent);\n\t\t\t\t\tbarWidth = 0;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Last draw is needed since the barcode ends with 1\n\t\t\tif (barWidth > 0) {\n\t\t\t\tthis.drawRect(x - options.width * (barWidth - 1), yFrom, options.width * barWidth, options.height, parent);\n\t\t\t}\n\t\t}\n\t}, {\n\t\tkey: \"drawSVGText\",\n\t\tvalue: function drawSVGText(parent, options, encoding) {\n\t\t\tvar textElem = this.document.createElementNS(svgns, 'text');\n\n\t\t\t// Draw the text if displayValue is set\n\t\t\tif (options.displayValue) {\n\t\t\t\tvar x, y;\n\n\t\t\t\ttextElem.setAttribute(\"style\", \"font:\" + options.fontOptions + \" \" + options.fontSize + \"px \" + options.font);\n\n\t\t\t\tif (options.textPosition == \"top\") {\n\t\t\t\t\ty = options.fontSize - options.textMargin;\n\t\t\t\t} else {\n\t\t\t\t\ty = options.height + options.textMargin + options.fontSize;\n\t\t\t\t}\n\n\t\t\t\t// Draw the text in the correct X depending on the textAlign option\n\t\t\t\tif (options.textAlign == \"left\" || encoding.barcodePadding > 0) {\n\t\t\t\t\tx = 0;\n\t\t\t\t\ttextElem.setAttribute(\"text-anchor\", \"start\");\n\t\t\t\t} else if (options.textAlign == \"right\") {\n\t\t\t\t\tx = encoding.width - 1;\n\t\t\t\t\ttextElem.setAttribute(\"text-anchor\", \"end\");\n\t\t\t\t}\n\t\t\t\t// In all other cases, center the text\n\t\t\t\telse {\n\t\t\t\t\t\tx = encoding.width / 2;\n\t\t\t\t\t\ttextElem.setAttribute(\"text-anchor\", \"middle\");\n\t\t\t\t\t}\n\n\t\t\t\ttextElem.setAttribute(\"x\", x);\n\t\t\t\ttextElem.setAttribute(\"y\", y);\n\n\t\t\t\ttextElem.appendChild(this.document.createTextNode(encoding.text));\n\n\t\t\t\tparent.appendChild(textElem);\n\t\t\t}\n\t\t}\n\t}, {\n\t\tkey: \"setSvgAttributes\",\n\t\tvalue: function setSvgAttributes(width, height) {\n\t\t\tvar svg = this.svg;\n\t\t\tsvg.setAttribute(\"width\", width + \"px\");\n\t\t\tsvg.setAttribute(\"height\", height + \"px\");\n\t\t\tsvg.setAttribute(\"x\", \"0px\");\n\t\t\tsvg.setAttribute(\"y\", \"0px\");\n\t\t\tsvg.setAttribute(\"viewBox\", \"0 0 \" + width + \" \" + height);\n\n\t\t\tsvg.setAttribute(\"xmlns\", svgns);\n\t\t\tsvg.setAttribute(\"version\", \"1.1\");\n\n\t\t\tsvg.setAttribute(\"style\", \"transform: translate(0,0)\");\n\t\t}\n\t}, {\n\t\tkey: \"createGroup\",\n\t\tvalue: function createGroup(x, y, parent) {\n\t\t\tvar group = this.document.createElementNS(svgns, 'g');\n\t\t\tgroup.setAttribute(\"transform\", \"translate(\" + x + \", \" + y + \")\");\n\n\t\t\tparent.appendChild(group);\n\n\t\t\treturn group;\n\t\t}\n\t}, {\n\t\tkey: \"setGroupOptions\",\n\t\tvalue: function setGroupOptions(group, options) {\n\t\t\tgroup.setAttribute(\"style\", \"fill:\" + options.lineColor + \";\");\n\t\t}\n\t}, {\n\t\tkey: \"drawRect\",\n\t\tvalue: function drawRect(x, y, width, height, parent) {\n\t\t\tvar rect = this.document.createElementNS(svgns, 'rect');\n\n\t\t\trect.setAttribute(\"x\", x);\n\t\t\trect.setAttribute(\"y\", y);\n\t\t\trect.setAttribute(\"width\", width);\n\t\t\trect.setAttribute(\"height\", height);\n\n\t\t\tparent.appendChild(rect);\n\n\t\t\treturn rect;\n\t\t}\n\t}]);\n\n\treturn SVGRenderer;\n}();\n\nexports.default = SVGRenderer;","/**\n * @license\n * Lodash <https://lodash.com/>\n * Copyright OpenJS Foundation and other contributors <https://openjsf.org/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n;(function() {\n\n  /** Used as a safe reference for `undefined` in pre-ES5 environments. */\n  var undefined;\n\n  /** Used as the semantic version number. */\n  var VERSION = '4.17.21';\n\n  /** Used as the size to enable large array optimizations. */\n  var LARGE_ARRAY_SIZE = 200;\n\n  /** Error message constants. */\n  var CORE_ERROR_TEXT = 'Unsupported core-js use. Try https://npms.io/search?q=ponyfill.',\n      FUNC_ERROR_TEXT = 'Expected a function',\n      INVALID_TEMPL_VAR_ERROR_TEXT = 'Invalid `variable` option passed into `_.template`';\n\n  /** Used to stand-in for `undefined` hash values. */\n  var HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n  /** Used as the maximum memoize cache size. */\n  var MAX_MEMOIZE_SIZE = 500;\n\n  /** Used as the internal argument placeholder. */\n  var PLACEHOLDER = '__lodash_placeholder__';\n\n  /** Used to compose bitmasks for cloning. */\n  var CLONE_DEEP_FLAG = 1,\n      CLONE_FLAT_FLAG = 2,\n      CLONE_SYMBOLS_FLAG = 4;\n\n  /** Used to compose bitmasks for value comparisons. */\n  var COMPARE_PARTIAL_FLAG = 1,\n      COMPARE_UNORDERED_FLAG = 2;\n\n  /** Used to compose bitmasks for function metadata. */\n  var WRAP_BIND_FLAG = 1,\n      WRAP_BIND_KEY_FLAG = 2,\n      WRAP_CURRY_BOUND_FLAG = 4,\n      WRAP_CURRY_FLAG = 8,\n      WRAP_CURRY_RIGHT_FLAG = 16,\n      WRAP_PARTIAL_FLAG = 32,\n      WRAP_PARTIAL_RIGHT_FLAG = 64,\n      WRAP_ARY_FLAG = 128,\n      WRAP_REARG_FLAG = 256,\n      WRAP_FLIP_FLAG = 512;\n\n  /** Used as default options for `_.truncate`. */\n  var DEFAULT_TRUNC_LENGTH = 30,\n      DEFAULT_TRUNC_OMISSION = '...';\n\n  /** Used to detect hot functions by number of calls within a span of milliseconds. */\n  var HOT_COUNT = 800,\n      HOT_SPAN = 16;\n\n  /** Used to indicate the type of lazy iteratees. */\n  var LAZY_FILTER_FLAG = 1,\n      LAZY_MAP_FLAG = 2,\n      LAZY_WHILE_FLAG = 3;\n\n  /** Used as references for various `Number` constants. */\n  var INFINITY = 1 / 0,\n      MAX_SAFE_INTEGER = 9007199254740991,\n      MAX_INTEGER = 1.7976931348623157e+308,\n      NAN = 0 / 0;\n\n  /** Used as references for the maximum length and index of an array. */\n  var MAX_ARRAY_LENGTH = 4294967295,\n      MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1,\n      HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1;\n\n  /** Used to associate wrap methods with their bit flags. */\n  var wrapFlags = [\n    ['ary', WRAP_ARY_FLAG],\n    ['bind', WRAP_BIND_FLAG],\n    ['bindKey', WRAP_BIND_KEY_FLAG],\n    ['curry', WRAP_CURRY_FLAG],\n    ['curryRight', WRAP_CURRY_RIGHT_FLAG],\n    ['flip', WRAP_FLIP_FLAG],\n    ['partial', WRAP_PARTIAL_FLAG],\n    ['partialRight', WRAP_PARTIAL_RIGHT_FLAG],\n    ['rearg', WRAP_REARG_FLAG]\n  ];\n\n  /** `Object#toString` result references. */\n  var argsTag = '[object Arguments]',\n      arrayTag = '[object Array]',\n      asyncTag = '[object AsyncFunction]',\n      boolTag = '[object Boolean]',\n      dateTag = '[object Date]',\n      domExcTag = '[object DOMException]',\n      errorTag = '[object Error]',\n      funcTag = '[object Function]',\n      genTag = '[object GeneratorFunction]',\n      mapTag = '[object Map]',\n      numberTag = '[object Number]',\n      nullTag = '[object Null]',\n      objectTag = '[object Object]',\n      promiseTag = '[object Promise]',\n      proxyTag = '[object Proxy]',\n      regexpTag = '[object RegExp]',\n      setTag = '[object Set]',\n      stringTag = '[object String]',\n      symbolTag = '[object Symbol]',\n      undefinedTag = '[object Undefined]',\n      weakMapTag = '[object WeakMap]',\n      weakSetTag = '[object WeakSet]';\n\n  var arrayBufferTag = '[object ArrayBuffer]',\n      dataViewTag = '[object DataView]',\n      float32Tag = '[object Float32Array]',\n      float64Tag = '[object Float64Array]',\n      int8Tag = '[object Int8Array]',\n      int16Tag = '[object Int16Array]',\n      int32Tag = '[object Int32Array]',\n      uint8Tag = '[object Uint8Array]',\n      uint8ClampedTag = '[object Uint8ClampedArray]',\n      uint16Tag = '[object Uint16Array]',\n      uint32Tag = '[object Uint32Array]';\n\n  /** Used to match empty string literals in compiled template source. */\n  var reEmptyStringLeading = /\\b__p \\+= '';/g,\n      reEmptyStringMiddle = /\\b(__p \\+=) '' \\+/g,\n      reEmptyStringTrailing = /(__e\\(.*?\\)|\\b__t\\)) \\+\\n'';/g;\n\n  /** Used to match HTML entities and HTML characters. */\n  var reEscapedHtml = /&(?:amp|lt|gt|quot|#39);/g,\n      reUnescapedHtml = /[&<>\"']/g,\n      reHasEscapedHtml = RegExp(reEscapedHtml.source),\n      reHasUnescapedHtml = RegExp(reUnescapedHtml.source);\n\n  /** Used to match template delimiters. */\n  var reEscape = /<%-([\\s\\S]+?)%>/g,\n      reEvaluate = /<%([\\s\\S]+?)%>/g,\n      reInterpolate = /<%=([\\s\\S]+?)%>/g;\n\n  /** Used to match property names within property paths. */\n  var reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n      reIsPlainProp = /^\\w*$/,\n      rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n  /**\n   * Used to match `RegExp`\n   * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n   */\n  var reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g,\n      reHasRegExpChar = RegExp(reRegExpChar.source);\n\n  /** Used to match leading whitespace. */\n  var reTrimStart = /^\\s+/;\n\n  /** Used to match a single whitespace character. */\n  var reWhitespace = /\\s/;\n\n  /** Used to match wrap detail comments. */\n  var reWrapComment = /\\{(?:\\n\\/\\* \\[wrapped with .+\\] \\*\\/)?\\n?/,\n      reWrapDetails = /\\{\\n\\/\\* \\[wrapped with (.+)\\] \\*/,\n      reSplitDetails = /,? & /;\n\n  /** Used to match words composed of alphanumeric characters. */\n  var reAsciiWord = /[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g;\n\n  /**\n   * Used to validate the `validate` option in `_.template` variable.\n   *\n   * Forbids characters which could potentially change the meaning of the function argument definition:\n   * - \"(),\" (modification of function parameters)\n   * - \"=\" (default value)\n   * - \"[]{}\" (destructuring of function parameters)\n   * - \"/\" (beginning of a comment)\n   * - whitespace\n   */\n  var reForbiddenIdentifierChars = /[()=,{}\\[\\]\\/\\s]/;\n\n  /** Used to match backslashes in property paths. */\n  var reEscapeChar = /\\\\(\\\\)?/g;\n\n  /**\n   * Used to match\n   * [ES template delimiters](http://ecma-international.org/ecma-262/7.0/#sec-template-literal-lexical-components).\n   */\n  var reEsTemplate = /\\$\\{([^\\\\}]*(?:\\\\.[^\\\\}]*)*)\\}/g;\n\n  /** Used to match `RegExp` flags from their coerced string values. */\n  var reFlags = /\\w*$/;\n\n  /** Used to detect bad signed hexadecimal string values. */\n  var reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n  /** Used to detect binary string values. */\n  var reIsBinary = /^0b[01]+$/i;\n\n  /** Used to detect host constructors (Safari). */\n  var reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n  /** Used to detect octal string values. */\n  var reIsOctal = /^0o[0-7]+$/i;\n\n  /** Used to detect unsigned integer values. */\n  var reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n  /** Used to match Latin Unicode letters (excluding mathematical operators). */\n  var reLatin = /[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g;\n\n  /** Used to ensure capturing order of template delimiters. */\n  var reNoMatch = /($^)/;\n\n  /** Used to match unescaped characters in compiled string literals. */\n  var reUnescapedString = /['\\n\\r\\u2028\\u2029\\\\]/g;\n\n  /** Used to compose unicode character classes. */\n  var rsAstralRange = '\\\\ud800-\\\\udfff',\n      rsComboMarksRange = '\\\\u0300-\\\\u036f',\n      reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n      rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n      rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n      rsDingbatRange = '\\\\u2700-\\\\u27bf',\n      rsLowerRange = 'a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff',\n      rsMathOpRange = '\\\\xac\\\\xb1\\\\xd7\\\\xf7',\n      rsNonCharRange = '\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf',\n      rsPunctuationRange = '\\\\u2000-\\\\u206f',\n      rsSpaceRange = ' \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000',\n      rsUpperRange = 'A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde',\n      rsVarRange = '\\\\ufe0e\\\\ufe0f',\n      rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange;\n\n  /** Used to compose unicode capture groups. */\n  var rsApos = \"['\\u2019]\",\n      rsAstral = '[' + rsAstralRange + ']',\n      rsBreak = '[' + rsBreakRange + ']',\n      rsCombo = '[' + rsComboRange + ']',\n      rsDigits = '\\\\d+',\n      rsDingbat = '[' + rsDingbatRange + ']',\n      rsLower = '[' + rsLowerRange + ']',\n      rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']',\n      rsFitz = '\\\\ud83c[\\\\udffb-\\\\udfff]',\n      rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',\n      rsNonAstral = '[^' + rsAstralRange + ']',\n      rsRegional = '(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}',\n      rsSurrPair = '[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]',\n      rsUpper = '[' + rsUpperRange + ']',\n      rsZWJ = '\\\\u200d';\n\n  /** Used to compose unicode regexes. */\n  var rsMiscLower = '(?:' + rsLower + '|' + rsMisc + ')',\n      rsMiscUpper = '(?:' + rsUpper + '|' + rsMisc + ')',\n      rsOptContrLower = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?',\n      rsOptContrUpper = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?',\n      reOptMod = rsModifier + '?',\n      rsOptVar = '[' + rsVarRange + ']?',\n      rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',\n      rsOrdLower = '\\\\d*(?:1st|2nd|3rd|(?![123])\\\\dth)(?=\\\\b|[A-Z_])',\n      rsOrdUpper = '\\\\d*(?:1ST|2ND|3RD|(?![123])\\\\dTH)(?=\\\\b|[a-z_])',\n      rsSeq = rsOptVar + reOptMod + rsOptJoin,\n      rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq,\n      rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';\n\n  /** Used to match apostrophes. */\n  var reApos = RegExp(rsApos, 'g');\n\n  /**\n   * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and\n   * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols).\n   */\n  var reComboMark = RegExp(rsCombo, 'g');\n\n  /** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */\n  var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');\n\n  /** Used to match complex or compound words. */\n  var reUnicodeWord = RegExp([\n    rsUpper + '?' + rsLower + '+' + rsOptContrLower + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')',\n    rsMiscUpper + '+' + rsOptContrUpper + '(?=' + [rsBreak, rsUpper + rsMiscLower, '$'].join('|') + ')',\n    rsUpper + '?' + rsMiscLower + '+' + rsOptContrLower,\n    rsUpper + '+' + rsOptContrUpper,\n    rsOrdUpper,\n    rsOrdLower,\n    rsDigits,\n    rsEmoji\n  ].join('|'), 'g');\n\n  /** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */\n  var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange  + rsComboRange + rsVarRange + ']');\n\n  /** Used to detect strings that need a more robust regexp to match words. */\n  var reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/;\n\n  /** Used to assign default `context` object properties. */\n  var contextProps = [\n    'Array', 'Buffer', 'DataView', 'Date', 'Error', 'Float32Array', 'Float64Array',\n    'Function', 'Int8Array', 'Int16Array', 'Int32Array', 'Map', 'Math', 'Object',\n    'Promise', 'RegExp', 'Set', 'String', 'Symbol', 'TypeError', 'Uint8Array',\n    'Uint8ClampedArray', 'Uint16Array', 'Uint32Array', 'WeakMap',\n    '_', 'clearTimeout', 'isFinite', 'parseInt', 'setTimeout'\n  ];\n\n  /** Used to make template sourceURLs easier to identify. */\n  var templateCounter = -1;\n\n  /** Used to identify `toStringTag` values of typed arrays. */\n  var typedArrayTags = {};\n  typedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\n  typedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\n  typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\n  typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\n  typedArrayTags[uint32Tag] = true;\n  typedArrayTags[argsTag] = typedArrayTags[arrayTag] =\n  typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\n  typedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\n  typedArrayTags[errorTag] = typedArrayTags[funcTag] =\n  typedArrayTags[mapTag] = typedArrayTags[numberTag] =\n  typedArrayTags[objectTag] = typedArrayTags[regexpTag] =\n  typedArrayTags[setTag] = typedArrayTags[stringTag] =\n  typedArrayTags[weakMapTag] = false;\n\n  /** Used to identify `toStringTag` values supported by `_.clone`. */\n  var cloneableTags = {};\n  cloneableTags[argsTag] = cloneableTags[arrayTag] =\n  cloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =\n  cloneableTags[boolTag] = cloneableTags[dateTag] =\n  cloneableTags[float32Tag] = cloneableTags[float64Tag] =\n  cloneableTags[int8Tag] = cloneableTags[int16Tag] =\n  cloneableTags[int32Tag] = cloneableTags[mapTag] =\n  cloneableTags[numberTag] = cloneableTags[objectTag] =\n  cloneableTags[regexpTag] = cloneableTags[setTag] =\n  cloneableTags[stringTag] = cloneableTags[symbolTag] =\n  cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =\n  cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\n  cloneableTags[errorTag] = cloneableTags[funcTag] =\n  cloneableTags[weakMapTag] = false;\n\n  /** Used to map Latin Unicode letters to basic Latin letters. */\n  var deburredLetters = {\n    // Latin-1 Supplement block.\n    '\\xc0': 'A',  '\\xc1': 'A', '\\xc2': 'A', '\\xc3': 'A', '\\xc4': 'A', '\\xc5': 'A',\n    '\\xe0': 'a',  '\\xe1': 'a', '\\xe2': 'a', '\\xe3': 'a', '\\xe4': 'a', '\\xe5': 'a',\n    '\\xc7': 'C',  '\\xe7': 'c',\n    '\\xd0': 'D',  '\\xf0': 'd',\n    '\\xc8': 'E',  '\\xc9': 'E', '\\xca': 'E', '\\xcb': 'E',\n    '\\xe8': 'e',  '\\xe9': 'e', '\\xea': 'e', '\\xeb': 'e',\n    '\\xcc': 'I',  '\\xcd': 'I', '\\xce': 'I', '\\xcf': 'I',\n    '\\xec': 'i',  '\\xed': 'i', '\\xee': 'i', '\\xef': 'i',\n    '\\xd1': 'N',  '\\xf1': 'n',\n    '\\xd2': 'O',  '\\xd3': 'O', '\\xd4': 'O', '\\xd5': 'O', '\\xd6': 'O', '\\xd8': 'O',\n    '\\xf2': 'o',  '\\xf3': 'o', '\\xf4': 'o', '\\xf5': 'o', '\\xf6': 'o', '\\xf8': 'o',\n    '\\xd9': 'U',  '\\xda': 'U', '\\xdb': 'U', '\\xdc': 'U',\n    '\\xf9': 'u',  '\\xfa': 'u', '\\xfb': 'u', '\\xfc': 'u',\n    '\\xdd': 'Y',  '\\xfd': 'y', '\\xff': 'y',\n    '\\xc6': 'Ae', '\\xe6': 'ae',\n    '\\xde': 'Th', '\\xfe': 'th',\n    '\\xdf': 'ss',\n    // Latin Extended-A block.\n    '\\u0100': 'A',  '\\u0102': 'A', '\\u0104': 'A',\n    '\\u0101': 'a',  '\\u0103': 'a', '\\u0105': 'a',\n    '\\u0106': 'C',  '\\u0108': 'C', '\\u010a': 'C', '\\u010c': 'C',\n    '\\u0107': 'c',  '\\u0109': 'c', '\\u010b': 'c', '\\u010d': 'c',\n    '\\u010e': 'D',  '\\u0110': 'D', '\\u010f': 'd', '\\u0111': 'd',\n    '\\u0112': 'E',  '\\u0114': 'E', '\\u0116': 'E', '\\u0118': 'E', '\\u011a': 'E',\n    '\\u0113': 'e',  '\\u0115': 'e', '\\u0117': 'e', '\\u0119': 'e', '\\u011b': 'e',\n    '\\u011c': 'G',  '\\u011e': 'G', '\\u0120': 'G', '\\u0122': 'G',\n    '\\u011d': 'g',  '\\u011f': 'g', '\\u0121': 'g', '\\u0123': 'g',\n    '\\u0124': 'H',  '\\u0126': 'H', '\\u0125': 'h', '\\u0127': 'h',\n    '\\u0128': 'I',  '\\u012a': 'I', '\\u012c': 'I', '\\u012e': 'I', '\\u0130': 'I',\n    '\\u0129': 'i',  '\\u012b': 'i', '\\u012d': 'i', '\\u012f': 'i', '\\u0131': 'i',\n    '\\u0134': 'J',  '\\u0135': 'j',\n    '\\u0136': 'K',  '\\u0137': 'k', '\\u0138': 'k',\n    '\\u0139': 'L',  '\\u013b': 'L', '\\u013d': 'L', '\\u013f': 'L', '\\u0141': 'L',\n    '\\u013a': 'l',  '\\u013c': 'l', '\\u013e': 'l', '\\u0140': 'l', '\\u0142': 'l',\n    '\\u0143': 'N',  '\\u0145': 'N', '\\u0147': 'N', '\\u014a': 'N',\n    '\\u0144': 'n',  '\\u0146': 'n', '\\u0148': 'n', '\\u014b': 'n',\n    '\\u014c': 'O',  '\\u014e': 'O', '\\u0150': 'O',\n    '\\u014d': 'o',  '\\u014f': 'o', '\\u0151': 'o',\n    '\\u0154': 'R',  '\\u0156': 'R', '\\u0158': 'R',\n    '\\u0155': 'r',  '\\u0157': 'r', '\\u0159': 'r',\n    '\\u015a': 'S',  '\\u015c': 'S', '\\u015e': 'S', '\\u0160': 'S',\n    '\\u015b': 's',  '\\u015d': 's', '\\u015f': 's', '\\u0161': 's',\n    '\\u0162': 'T',  '\\u0164': 'T', '\\u0166': 'T',\n    '\\u0163': 't',  '\\u0165': 't', '\\u0167': 't',\n    '\\u0168': 'U',  '\\u016a': 'U', '\\u016c': 'U', '\\u016e': 'U', '\\u0170': 'U', '\\u0172': 'U',\n    '\\u0169': 'u',  '\\u016b': 'u', '\\u016d': 'u', '\\u016f': 'u', '\\u0171': 'u', '\\u0173': 'u',\n    '\\u0174': 'W',  '\\u0175': 'w',\n    '\\u0176': 'Y',  '\\u0177': 'y', '\\u0178': 'Y',\n    '\\u0179': 'Z',  '\\u017b': 'Z', '\\u017d': 'Z',\n    '\\u017a': 'z',  '\\u017c': 'z', '\\u017e': 'z',\n    '\\u0132': 'IJ', '\\u0133': 'ij',\n    '\\u0152': 'Oe', '\\u0153': 'oe',\n    '\\u0149': \"'n\", '\\u017f': 's'\n  };\n\n  /** Used to map characters to HTML entities. */\n  var htmlEscapes = {\n    '&': '&amp;',\n    '<': '&lt;',\n    '>': '&gt;',\n    '\"': '&quot;',\n    \"'\": '&#39;'\n  };\n\n  /** Used to map HTML entities to characters. */\n  var htmlUnescapes = {\n    '&amp;': '&',\n    '&lt;': '<',\n    '&gt;': '>',\n    '&quot;': '\"',\n    '&#39;': \"'\"\n  };\n\n  /** Used to escape characters for inclusion in compiled string literals. */\n  var stringEscapes = {\n    '\\\\': '\\\\',\n    \"'\": \"'\",\n    '\\n': 'n',\n    '\\r': 'r',\n    '\\u2028': 'u2028',\n    '\\u2029': 'u2029'\n  };\n\n  /** Built-in method references without a dependency on `root`. */\n  var freeParseFloat = parseFloat,\n      freeParseInt = parseInt;\n\n  /** Detect free variable `global` from Node.js. */\n  var freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n  /** Detect free variable `self`. */\n  var freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n  /** Used as a reference to the global object. */\n  var root = freeGlobal || freeSelf || Function('return this')();\n\n  /** Detect free variable `exports`. */\n  var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n  /** Detect free variable `module`. */\n  var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n  /** Detect the popular CommonJS extension `module.exports`. */\n  var moduleExports = freeModule && freeModule.exports === freeExports;\n\n  /** Detect free variable `process` from Node.js. */\n  var freeProcess = moduleExports && freeGlobal.process;\n\n  /** Used to access faster Node.js helpers. */\n  var nodeUtil = (function() {\n    try {\n      // Use `util.types` for Node.js 10+.\n      var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n      if (types) {\n        return types;\n      }\n\n      // Legacy `process.binding('util')` for Node.js < 10.\n      return freeProcess && freeProcess.binding && freeProcess.binding('util');\n    } catch (e) {}\n  }());\n\n  /* Node.js helper references. */\n  var nodeIsArrayBuffer = nodeUtil && nodeUtil.isArrayBuffer,\n      nodeIsDate = nodeUtil && nodeUtil.isDate,\n      nodeIsMap = nodeUtil && nodeUtil.isMap,\n      nodeIsRegExp = nodeUtil && nodeUtil.isRegExp,\n      nodeIsSet = nodeUtil && nodeUtil.isSet,\n      nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n  /*--------------------------------------------------------------------------*/\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   */\n  function 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 `baseAggregator` for arrays.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} setter The function to set `accumulator` values.\n   * @param {Function} iteratee The iteratee to transform keys.\n   * @param {Object} accumulator The initial aggregated object.\n   * @returns {Function} Returns `accumulator`.\n   */\n  function arrayAggregator(array, setter, iteratee, accumulator) {\n    var index = -1,\n        length = array == null ? 0 : array.length;\n\n    while (++index < length) {\n      var value = array[index];\n      setter(accumulator, value, iteratee(value), array);\n    }\n    return accumulator;\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   */\n  function arrayEach(array, iteratee) {\n    var index = -1,\n        length = array == null ? 0 : array.length;\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 `_.forEachRight` 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   */\n  function arrayEachRight(array, iteratee) {\n    var length = array == null ? 0 : array.length;\n\n    while (length--) {\n      if (iteratee(array[length], length, array) === false) {\n        break;\n      }\n    }\n    return array;\n  }\n\n  /**\n   * A specialized version of `_.every` for arrays without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} predicate The function invoked per iteration.\n   * @returns {boolean} Returns `true` if all elements pass the predicate check,\n   *  else `false`.\n   */\n  function arrayEvery(array, predicate) {\n    var index = -1,\n        length = array == null ? 0 : array.length;\n\n    while (++index < length) {\n      if (!predicate(array[index], index, array)) {\n        return false;\n      }\n    }\n    return true;\n  }\n\n  /**\n   * A specialized version of `_.filter` for arrays without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} predicate The function invoked per iteration.\n   * @returns {Array} Returns the new filtered array.\n   */\n  function arrayFilter(array, predicate) {\n    var index = -1,\n        length = array == null ? 0 : array.length,\n        resIndex = 0,\n        result = [];\n\n    while (++index < length) {\n      var value = array[index];\n      if (predicate(value, index, array)) {\n        result[resIndex++] = value;\n      }\n    }\n    return result;\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   */\n  function arrayIncludes(array, value) {\n    var length = array == null ? 0 : array.length;\n    return !!length && baseIndexOf(array, value, 0) > -1;\n  }\n\n  /**\n   * This function is like `arrayIncludes` except that it accepts a comparator.\n   *\n   * @private\n   * @param {Array} [array] The array to inspect.\n   * @param {*} target The value to search for.\n   * @param {Function} comparator The comparator invoked per element.\n   * @returns {boolean} Returns `true` if `target` is found, else `false`.\n   */\n  function arrayIncludesWith(array, value, comparator) {\n    var index = -1,\n        length = array == null ? 0 : array.length;\n\n    while (++index < length) {\n      if (comparator(value, array[index])) {\n        return true;\n      }\n    }\n    return false;\n  }\n\n  /**\n   * A specialized version of `_.map` for arrays without support for iteratee\n   * 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 the new mapped array.\n   */\n  function arrayMap(array, iteratee) {\n    var index = -1,\n        length = array == null ? 0 : array.length,\n        result = Array(length);\n\n    while (++index < length) {\n      result[index] = iteratee(array[index], index, array);\n    }\n    return result;\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   */\n  function 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  /**\n   * A specialized version of `_.reduce` 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   * @param {*} [accumulator] The initial value.\n   * @param {boolean} [initAccum] Specify using the first element of `array` as\n   *  the initial value.\n   * @returns {*} Returns the accumulated value.\n   */\n  function arrayReduce(array, iteratee, accumulator, initAccum) {\n    var index = -1,\n        length = array == null ? 0 : array.length;\n\n    if (initAccum && length) {\n      accumulator = array[++index];\n    }\n    while (++index < length) {\n      accumulator = iteratee(accumulator, array[index], index, array);\n    }\n    return accumulator;\n  }\n\n  /**\n   * A specialized version of `_.reduceRight` 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   * @param {*} [accumulator] The initial value.\n   * @param {boolean} [initAccum] Specify using the last element of `array` as\n   *  the initial value.\n   * @returns {*} Returns the accumulated value.\n   */\n  function arrayReduceRight(array, iteratee, accumulator, initAccum) {\n    var length = array == null ? 0 : array.length;\n    if (initAccum && length) {\n      accumulator = array[--length];\n    }\n    while (length--) {\n      accumulator = iteratee(accumulator, array[length], length, array);\n    }\n    return accumulator;\n  }\n\n  /**\n   * A specialized version of `_.some` for arrays without support for iteratee\n   * shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} predicate The function invoked per iteration.\n   * @returns {boolean} Returns `true` if any element passes the predicate check,\n   *  else `false`.\n   */\n  function arraySome(array, predicate) {\n    var index = -1,\n        length = array == null ? 0 : array.length;\n\n    while (++index < length) {\n      if (predicate(array[index], index, array)) {\n        return true;\n      }\n    }\n    return false;\n  }\n\n  /**\n   * Gets the size of an ASCII `string`.\n   *\n   * @private\n   * @param {string} string The string inspect.\n   * @returns {number} Returns the string size.\n   */\n  var asciiSize = baseProperty('length');\n\n  /**\n   * Converts an ASCII `string` to an array.\n   *\n   * @private\n   * @param {string} string The string to convert.\n   * @returns {Array} Returns the converted array.\n   */\n  function asciiToArray(string) {\n    return string.split('');\n  }\n\n  /**\n   * Splits an ASCII `string` into an array of its words.\n   *\n   * @private\n   * @param {string} The string to inspect.\n   * @returns {Array} Returns the words of `string`.\n   */\n  function asciiWords(string) {\n    return string.match(reAsciiWord) || [];\n  }\n\n  /**\n   * The base implementation of methods like `_.findKey` and `_.findLastKey`,\n   * without support for iteratee shorthands, which iterates over `collection`\n   * using `eachFunc`.\n   *\n   * @private\n   * @param {Array|Object} collection The collection to inspect.\n   * @param {Function} predicate The function invoked per iteration.\n   * @param {Function} eachFunc The function to iterate over `collection`.\n   * @returns {*} Returns the found element or its key, else `undefined`.\n   */\n  function baseFindKey(collection, predicate, eachFunc) {\n    var result;\n    eachFunc(collection, function(value, key, collection) {\n      if (predicate(value, key, collection)) {\n        result = key;\n        return false;\n      }\n    });\n    return result;\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   */\n  function 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   */\n  function baseIndexOf(array, value, fromIndex) {\n    return value === value\n      ? strictIndexOf(array, value, fromIndex)\n      : baseFindIndex(array, baseIsNaN, fromIndex);\n  }\n\n  /**\n   * This function is like `baseIndexOf` except that it accepts a comparator.\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   * @param {Function} comparator The comparator invoked per element.\n   * @returns {number} Returns the index of the matched value, else `-1`.\n   */\n  function baseIndexOfWith(array, value, fromIndex, comparator) {\n    var index = fromIndex - 1,\n        length = array.length;\n\n    while (++index < length) {\n      if (comparator(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   */\n  function baseIsNaN(value) {\n    return value !== value;\n  }\n\n  /**\n   * The base implementation of `_.mean` and `_.meanBy` 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 {number} Returns the mean.\n   */\n  function baseMean(array, iteratee) {\n    var length = array == null ? 0 : array.length;\n    return length ? (baseSum(array, iteratee) / length) : NAN;\n  }\n\n  /**\n   * The base implementation of `_.property` without support for deep paths.\n   *\n   * @private\n   * @param {string} key The key of the property to get.\n   * @returns {Function} Returns the new accessor function.\n   */\n  function baseProperty(key) {\n    return function(object) {\n      return object == null ? undefined : object[key];\n    };\n  }\n\n  /**\n   * The base implementation of `_.propertyOf` without support for deep paths.\n   *\n   * @private\n   * @param {Object} object The object to query.\n   * @returns {Function} Returns the new accessor function.\n   */\n  function basePropertyOf(object) {\n    return function(key) {\n      return object == null ? undefined : object[key];\n    };\n  }\n\n  /**\n   * The base implementation of `_.reduce` and `_.reduceRight`, without support\n   * for iteratee shorthands, which iterates over `collection` using `eachFunc`.\n   *\n   * @private\n   * @param {Array|Object} collection The collection to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @param {*} accumulator The initial value.\n   * @param {boolean} initAccum Specify using the first or last element of\n   *  `collection` as the initial value.\n   * @param {Function} eachFunc The function to iterate over `collection`.\n   * @returns {*} Returns the accumulated value.\n   */\n  function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) {\n    eachFunc(collection, function(value, index, collection) {\n      accumulator = initAccum\n        ? (initAccum = false, value)\n        : iteratee(accumulator, value, index, collection);\n    });\n    return accumulator;\n  }\n\n  /**\n   * The base implementation of `_.sortBy` which uses `comparer` to define the\n   * sort order of `array` and replaces criteria objects with their corresponding\n   * values.\n   *\n   * @private\n   * @param {Array} array The array to sort.\n   * @param {Function} comparer The function to define sort order.\n   * @returns {Array} Returns `array`.\n   */\n  function baseSortBy(array, comparer) {\n    var length = array.length;\n\n    array.sort(comparer);\n    while (length--) {\n      array[length] = array[length].value;\n    }\n    return array;\n  }\n\n  /**\n   * The base implementation of `_.sum` and `_.sumBy` 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 {number} Returns the sum.\n   */\n  function baseSum(array, iteratee) {\n    var result,\n        index = -1,\n        length = array.length;\n\n    while (++index < length) {\n      var current = iteratee(array[index]);\n      if (current !== undefined) {\n        result = result === undefined ? current : (result + current);\n      }\n    }\n    return result;\n  }\n\n  /**\n   * The base implementation of `_.times` without support for iteratee shorthands\n   * or max array length checks.\n   *\n   * @private\n   * @param {number} n The number of times to invoke `iteratee`.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @returns {Array} Returns the array of results.\n   */\n  function baseTimes(n, iteratee) {\n    var index = -1,\n        result = Array(n);\n\n    while (++index < n) {\n      result[index] = iteratee(index);\n    }\n    return result;\n  }\n\n  /**\n   * The base implementation of `_.toPairs` and `_.toPairsIn` which creates an array\n   * of key-value pairs for `object` corresponding to the property names of `props`.\n   *\n   * @private\n   * @param {Object} object The object to query.\n   * @param {Array} props The property names to get values for.\n   * @returns {Object} Returns the key-value pairs.\n   */\n  function baseToPairs(object, props) {\n    return arrayMap(props, function(key) {\n      return [key, object[key]];\n    });\n  }\n\n  /**\n   * The base implementation of `_.trim`.\n   *\n   * @private\n   * @param {string} string The string to trim.\n   * @returns {string} Returns the trimmed string.\n   */\n  function baseTrim(string) {\n    return string\n      ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n      : string;\n  }\n\n  /**\n   * The base implementation of `_.unary` without support for storing metadata.\n   *\n   * @private\n   * @param {Function} func The function to cap arguments for.\n   * @returns {Function} Returns the new capped function.\n   */\n  function baseUnary(func) {\n    return function(value) {\n      return func(value);\n    };\n  }\n\n  /**\n   * The base implementation of `_.values` and `_.valuesIn` which creates an\n   * array of `object` property values corresponding to the property names\n   * of `props`.\n   *\n   * @private\n   * @param {Object} object The object to query.\n   * @param {Array} props The property names to get values for.\n   * @returns {Object} Returns the array of property values.\n   */\n  function baseValues(object, props) {\n    return arrayMap(props, function(key) {\n      return object[key];\n    });\n  }\n\n  /**\n   * Checks if a `cache` value for `key` exists.\n   *\n   * @private\n   * @param {Object} cache The cache to query.\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   */\n  function cacheHas(cache, key) {\n    return cache.has(key);\n  }\n\n  /**\n   * Used by `_.trim` and `_.trimStart` to get the index of the first string symbol\n   * that is not found in the character symbols.\n   *\n   * @private\n   * @param {Array} strSymbols The string symbols to inspect.\n   * @param {Array} chrSymbols The character symbols to find.\n   * @returns {number} Returns the index of the first unmatched string symbol.\n   */\n  function charsStartIndex(strSymbols, chrSymbols) {\n    var index = -1,\n        length = strSymbols.length;\n\n    while (++index < length && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}\n    return index;\n  }\n\n  /**\n   * Used by `_.trim` and `_.trimEnd` to get the index of the last string symbol\n   * that is not found in the character symbols.\n   *\n   * @private\n   * @param {Array} strSymbols The string symbols to inspect.\n   * @param {Array} chrSymbols The character symbols to find.\n   * @returns {number} Returns the index of the last unmatched string symbol.\n   */\n  function charsEndIndex(strSymbols, chrSymbols) {\n    var index = strSymbols.length;\n\n    while (index-- && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}\n    return index;\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   */\n  function 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   * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A\n   * letters to basic Latin letters.\n   *\n   * @private\n   * @param {string} letter The matched letter to deburr.\n   * @returns {string} Returns the deburred letter.\n   */\n  var deburrLetter = basePropertyOf(deburredLetters);\n\n  /**\n   * Used by `_.escape` to convert characters to HTML entities.\n   *\n   * @private\n   * @param {string} chr The matched character to escape.\n   * @returns {string} Returns the escaped character.\n   */\n  var escapeHtmlChar = basePropertyOf(htmlEscapes);\n\n  /**\n   * Used by `_.template` to escape characters for inclusion in compiled string literals.\n   *\n   * @private\n   * @param {string} chr The matched character to escape.\n   * @returns {string} Returns the escaped character.\n   */\n  function escapeStringChar(chr) {\n    return '\\\\' + stringEscapes[chr];\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   */\n  function getValue(object, key) {\n    return object == null ? undefined : object[key];\n  }\n\n  /**\n   * Checks if `string` contains Unicode symbols.\n   *\n   * @private\n   * @param {string} string The string to inspect.\n   * @returns {boolean} Returns `true` if a symbol is found, else `false`.\n   */\n  function hasUnicode(string) {\n    return reHasUnicode.test(string);\n  }\n\n  /**\n   * Checks if `string` contains a word composed of Unicode symbols.\n   *\n   * @private\n   * @param {string} string The string to inspect.\n   * @returns {boolean} Returns `true` if a word is found, else `false`.\n   */\n  function hasUnicodeWord(string) {\n    return reHasUnicodeWord.test(string);\n  }\n\n  /**\n   * Converts `iterator` to an array.\n   *\n   * @private\n   * @param {Object} iterator The iterator to convert.\n   * @returns {Array} Returns the converted array.\n   */\n  function iteratorToArray(iterator) {\n    var data,\n        result = [];\n\n    while (!(data = iterator.next()).done) {\n      result.push(data.value);\n    }\n    return result;\n  }\n\n  /**\n   * Converts `map` to its key-value pairs.\n   *\n   * @private\n   * @param {Object} map The map to convert.\n   * @returns {Array} Returns the key-value pairs.\n   */\n  function mapToArray(map) {\n    var index = -1,\n        result = Array(map.size);\n\n    map.forEach(function(value, key) {\n      result[++index] = [key, value];\n    });\n    return result;\n  }\n\n  /**\n   * Creates a unary function that invokes `func` with its argument transformed.\n   *\n   * @private\n   * @param {Function} func The function to wrap.\n   * @param {Function} transform The argument transform.\n   * @returns {Function} Returns the new function.\n   */\n  function overArg(func, transform) {\n    return function(arg) {\n      return func(transform(arg));\n    };\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   */\n  function 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  /**\n   * Converts `set` to an array of its values.\n   *\n   * @private\n   * @param {Object} set The set to convert.\n   * @returns {Array} Returns the values.\n   */\n  function setToArray(set) {\n    var index = -1,\n        result = Array(set.size);\n\n    set.forEach(function(value) {\n      result[++index] = value;\n    });\n    return result;\n  }\n\n  /**\n   * Converts `set` to its value-value pairs.\n   *\n   * @private\n   * @param {Object} set The set to convert.\n   * @returns {Array} Returns the value-value pairs.\n   */\n  function setToPairs(set) {\n    var index = -1,\n        result = Array(set.size);\n\n    set.forEach(function(value) {\n      result[++index] = [value, value];\n    });\n    return result;\n  }\n\n  /**\n   * A specialized version of `_.indexOf` which performs strict equality\n   * comparisons of values, i.e. `===`.\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   */\n  function strictIndexOf(array, value, fromIndex) {\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   * A specialized version of `_.lastIndexOf` which performs strict equality\n   * comparisons of values, i.e. `===`.\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   */\n  function strictLastIndexOf(array, value, fromIndex) {\n    var index = fromIndex + 1;\n    while (index--) {\n      if (array[index] === value) {\n        return index;\n      }\n    }\n    return index;\n  }\n\n  /**\n   * Gets the number of symbols in `string`.\n   *\n   * @private\n   * @param {string} string The string to inspect.\n   * @returns {number} Returns the string size.\n   */\n  function stringSize(string) {\n    return hasUnicode(string)\n      ? unicodeSize(string)\n      : asciiSize(string);\n  }\n\n  /**\n   * Converts `string` to an array.\n   *\n   * @private\n   * @param {string} string The string to convert.\n   * @returns {Array} Returns the converted array.\n   */\n  function stringToArray(string) {\n    return hasUnicode(string)\n      ? unicodeToArray(string)\n      : asciiToArray(string);\n  }\n\n  /**\n   * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n   * character of `string`.\n   *\n   * @private\n   * @param {string} string The string to inspect.\n   * @returns {number} Returns the index of the last non-whitespace character.\n   */\n  function trimmedEndIndex(string) {\n    var index = string.length;\n\n    while (index-- && reWhitespace.test(string.charAt(index))) {}\n    return index;\n  }\n\n  /**\n   * Used by `_.unescape` to convert HTML entities to characters.\n   *\n   * @private\n   * @param {string} chr The matched character to unescape.\n   * @returns {string} Returns the unescaped character.\n   */\n  var unescapeHtmlChar = basePropertyOf(htmlUnescapes);\n\n  /**\n   * Gets the size of a Unicode `string`.\n   *\n   * @private\n   * @param {string} string The string inspect.\n   * @returns {number} Returns the string size.\n   */\n  function unicodeSize(string) {\n    var result = reUnicode.lastIndex = 0;\n    while (reUnicode.test(string)) {\n      ++result;\n    }\n    return result;\n  }\n\n  /**\n   * Converts a Unicode `string` to an array.\n   *\n   * @private\n   * @param {string} string The string to convert.\n   * @returns {Array} Returns the converted array.\n   */\n  function unicodeToArray(string) {\n    return string.match(reUnicode) || [];\n  }\n\n  /**\n   * Splits a Unicode `string` into an array of its words.\n   *\n   * @private\n   * @param {string} The string to inspect.\n   * @returns {Array} Returns the words of `string`.\n   */\n  function unicodeWords(string) {\n    return string.match(reUnicodeWord) || [];\n  }\n\n  /*--------------------------------------------------------------------------*/\n\n  /**\n   * Create a new pristine `lodash` function using the `context` object.\n   *\n   * @static\n   * @memberOf _\n   * @since 1.1.0\n   * @category Util\n   * @param {Object} [context=root] The context object.\n   * @returns {Function} Returns a new `lodash` function.\n   * @example\n   *\n   * _.mixin({ 'foo': _.constant('foo') });\n   *\n   * var lodash = _.runInContext();\n   * lodash.mixin({ 'bar': lodash.constant('bar') });\n   *\n   * _.isFunction(_.foo);\n   * // => true\n   * _.isFunction(_.bar);\n   * // => false\n   *\n   * lodash.isFunction(lodash.foo);\n   * // => false\n   * lodash.isFunction(lodash.bar);\n   * // => true\n   *\n   * // Create a suped-up `defer` in Node.js.\n   * var defer = _.runInContext({ 'setTimeout': setImmediate }).defer;\n   */\n  var runInContext = (function runInContext(context) {\n    context = context == null ? root : _.defaults(root.Object(), context, _.pick(root, contextProps));\n\n    /** Built-in constructor references. */\n    var Array = context.Array,\n        Date = context.Date,\n        Error = context.Error,\n        Function = context.Function,\n        Math = context.Math,\n        Object = context.Object,\n        RegExp = context.RegExp,\n        String = context.String,\n        TypeError = context.TypeError;\n\n    /** Used for built-in method references. */\n    var arrayProto = Array.prototype,\n        funcProto = Function.prototype,\n        objectProto = Object.prototype;\n\n    /** Used to detect overreaching core-js shims. */\n    var coreJsData = context['__core-js_shared__'];\n\n    /** Used to resolve the decompiled source of functions. */\n    var funcToString = funcProto.toString;\n\n    /** Used to check objects for own properties. */\n    var hasOwnProperty = objectProto.hasOwnProperty;\n\n    /** Used to generate unique IDs. */\n    var idCounter = 0;\n\n    /** Used to detect methods masquerading as native. */\n    var maskSrcKey = (function() {\n      var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n      return uid ? ('Symbol(src)_1.' + uid) : '';\n    }());\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     */\n    var nativeObjectToString = objectProto.toString;\n\n    /** Used to infer the `Object` constructor. */\n    var objectCtorString = funcToString.call(Object);\n\n    /** Used to restore the original `_` reference in `_.noConflict`. */\n    var oldDash = root._;\n\n    /** Used to detect if a method is native. */\n    var reIsNative = RegExp('^' +\n      funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n      .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n    );\n\n    /** Built-in value references. */\n    var Buffer = moduleExports ? context.Buffer : undefined,\n        Symbol = context.Symbol,\n        Uint8Array = context.Uint8Array,\n        allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined,\n        getPrototype = overArg(Object.getPrototypeOf, Object),\n        objectCreate = Object.create,\n        propertyIsEnumerable = objectProto.propertyIsEnumerable,\n        splice = arrayProto.splice,\n        spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined,\n        symIterator = Symbol ? Symbol.iterator : undefined,\n        symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n    var defineProperty = (function() {\n      try {\n        var func = getNative(Object, 'defineProperty');\n        func({}, '', {});\n        return func;\n      } catch (e) {}\n    }());\n\n    /** Mocked built-ins. */\n    var ctxClearTimeout = context.clearTimeout !== root.clearTimeout && context.clearTimeout,\n        ctxNow = Date && Date.now !== root.Date.now && Date.now,\n        ctxSetTimeout = context.setTimeout !== root.setTimeout && context.setTimeout;\n\n    /* Built-in method references for those with the same name as other `lodash` methods. */\n    var nativeCeil = Math.ceil,\n        nativeFloor = Math.floor,\n        nativeGetSymbols = Object.getOwnPropertySymbols,\n        nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined,\n        nativeIsFinite = context.isFinite,\n        nativeJoin = arrayProto.join,\n        nativeKeys = overArg(Object.keys, Object),\n        nativeMax = Math.max,\n        nativeMin = Math.min,\n        nativeNow = Date.now,\n        nativeParseInt = context.parseInt,\n        nativeRandom = Math.random,\n        nativeReverse = arrayProto.reverse;\n\n    /* Built-in method references that are verified to be native. */\n    var DataView = getNative(context, 'DataView'),\n        Map = getNative(context, 'Map'),\n        Promise = getNative(context, 'Promise'),\n        Set = getNative(context, 'Set'),\n        WeakMap = getNative(context, 'WeakMap'),\n        nativeCreate = getNative(Object, 'create');\n\n    /** Used to store function metadata. */\n    var metaMap = WeakMap && new WeakMap;\n\n    /** Used to lookup unminified function names. */\n    var realNames = {};\n\n    /** Used to detect maps, sets, and weakmaps. */\n    var dataViewCtorString = toSource(DataView),\n        mapCtorString = toSource(Map),\n        promiseCtorString = toSource(Promise),\n        setCtorString = toSource(Set),\n        weakMapCtorString = toSource(WeakMap);\n\n    /** Used to convert symbols to primitives and strings. */\n    var symbolProto = Symbol ? Symbol.prototype : undefined,\n        symbolValueOf = symbolProto ? symbolProto.valueOf : undefined,\n        symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates a `lodash` object which wraps `value` to enable implicit method\n     * chain sequences. Methods that operate on and return arrays, collections,\n     * and functions can be chained together. Methods that retrieve a single value\n     * or may return a primitive value will automatically end the chain sequence\n     * and return the unwrapped value. Otherwise, the value must be unwrapped\n     * with `_#value`.\n     *\n     * Explicit chain sequences, which must be unwrapped with `_#value`, may be\n     * enabled using `_.chain`.\n     *\n     * The execution of chained methods is lazy, that is, it's deferred until\n     * `_#value` is implicitly or explicitly called.\n     *\n     * Lazy evaluation allows several methods to support shortcut fusion.\n     * Shortcut fusion is an optimization to merge iteratee calls; this avoids\n     * the creation of intermediate arrays and can greatly reduce the number of\n     * iteratee executions. Sections of a chain sequence qualify for shortcut\n     * fusion if the section is applied to an array and iteratees accept only\n     * one argument. The heuristic for whether a section qualifies for shortcut\n     * fusion is subject to change.\n     *\n     * Chaining is supported in custom builds as long as the `_#value` method is\n     * directly or indirectly included in the build.\n     *\n     * In addition to lodash methods, wrappers have `Array` and `String` methods.\n     *\n     * The wrapper `Array` methods are:\n     * `concat`, `join`, `pop`, `push`, `shift`, `sort`, `splice`, and `unshift`\n     *\n     * The wrapper `String` methods are:\n     * `replace` and `split`\n     *\n     * The wrapper methods that support shortcut fusion are:\n     * `at`, `compact`, `drop`, `dropRight`, `dropWhile`, `filter`, `find`,\n     * `findLast`, `head`, `initial`, `last`, `map`, `reject`, `reverse`, `slice`,\n     * `tail`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, and `toArray`\n     *\n     * The chainable wrapper methods are:\n     * `after`, `ary`, `assign`, `assignIn`, `assignInWith`, `assignWith`, `at`,\n     * `before`, `bind`, `bindAll`, `bindKey`, `castArray`, `chain`, `chunk`,\n     * `commit`, `compact`, `concat`, `conforms`, `constant`, `countBy`, `create`,\n     * `curry`, `debounce`, `defaults`, `defaultsDeep`, `defer`, `delay`,\n     * `difference`, `differenceBy`, `differenceWith`, `drop`, `dropRight`,\n     * `dropRightWhile`, `dropWhile`, `extend`, `extendWith`, `fill`, `filter`,\n     * `flatMap`, `flatMapDeep`, `flatMapDepth`, `flatten`, `flattenDeep`,\n     * `flattenDepth`, `flip`, `flow`, `flowRight`, `fromPairs`, `functions`,\n     * `functionsIn`, `groupBy`, `initial`, `intersection`, `intersectionBy`,\n     * `intersectionWith`, `invert`, `invertBy`, `invokeMap`, `iteratee`, `keyBy`,\n     * `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`, `matchesProperty`,\n     * `memoize`, `merge`, `mergeWith`, `method`, `methodOf`, `mixin`, `negate`,\n     * `nthArg`, `omit`, `omitBy`, `once`, `orderBy`, `over`, `overArgs`,\n     * `overEvery`, `overSome`, `partial`, `partialRight`, `partition`, `pick`,\n     * `pickBy`, `plant`, `property`, `propertyOf`, `pull`, `pullAll`, `pullAllBy`,\n     * `pullAllWith`, `pullAt`, `push`, `range`, `rangeRight`, `rearg`, `reject`,\n     * `remove`, `rest`, `reverse`, `sampleSize`, `set`, `setWith`, `shuffle`,\n     * `slice`, `sort`, `sortBy`, `splice`, `spread`, `tail`, `take`, `takeRight`,\n     * `takeRightWhile`, `takeWhile`, `tap`, `throttle`, `thru`, `toArray`,\n     * `toPairs`, `toPairsIn`, `toPath`, `toPlainObject`, `transform`, `unary`,\n     * `union`, `unionBy`, `unionWith`, `uniq`, `uniqBy`, `uniqWith`, `unset`,\n     * `unshift`, `unzip`, `unzipWith`, `update`, `updateWith`, `values`,\n     * `valuesIn`, `without`, `wrap`, `xor`, `xorBy`, `xorWith`, `zip`,\n     * `zipObject`, `zipObjectDeep`, and `zipWith`\n     *\n     * The wrapper methods that are **not** chainable by default are:\n     * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clamp`, `clone`,\n     * `cloneDeep`, `cloneDeepWith`, `cloneWith`, `conformsTo`, `deburr`,\n     * `defaultTo`, `divide`, `each`, `eachRight`, `endsWith`, `eq`, `escape`,\n     * `escapeRegExp`, `every`, `find`, `findIndex`, `findKey`, `findLast`,\n     * `findLastIndex`, `findLastKey`, `first`, `floor`, `forEach`, `forEachRight`,\n     * `forIn`, `forInRight`, `forOwn`, `forOwnRight`, `get`, `gt`, `gte`, `has`,\n     * `hasIn`, `head`, `identity`, `includes`, `indexOf`, `inRange`, `invoke`,\n     * `isArguments`, `isArray`, `isArrayBuffer`, `isArrayLike`, `isArrayLikeObject`,\n     * `isBoolean`, `isBuffer`, `isDate`, `isElement`, `isEmpty`, `isEqual`,\n     * `isEqualWith`, `isError`, `isFinite`, `isFunction`, `isInteger`, `isLength`,\n     * `isMap`, `isMatch`, `isMatchWith`, `isNaN`, `isNative`, `isNil`, `isNull`,\n     * `isNumber`, `isObject`, `isObjectLike`, `isPlainObject`, `isRegExp`,\n     * `isSafeInteger`, `isSet`, `isString`, `isUndefined`, `isTypedArray`,\n     * `isWeakMap`, `isWeakSet`, `join`, `kebabCase`, `last`, `lastIndexOf`,\n     * `lowerCase`, `lowerFirst`, `lt`, `lte`, `max`, `maxBy`, `mean`, `meanBy`,\n     * `min`, `minBy`, `multiply`, `noConflict`, `noop`, `now`, `nth`, `pad`,\n     * `padEnd`, `padStart`, `parseInt`, `pop`, `random`, `reduce`, `reduceRight`,\n     * `repeat`, `result`, `round`, `runInContext`, `sample`, `shift`, `size`,\n     * `snakeCase`, `some`, `sortedIndex`, `sortedIndexBy`, `sortedLastIndex`,\n     * `sortedLastIndexBy`, `startCase`, `startsWith`, `stubArray`, `stubFalse`,\n     * `stubObject`, `stubString`, `stubTrue`, `subtract`, `sum`, `sumBy`,\n     * `template`, `times`, `toFinite`, `toInteger`, `toJSON`, `toLength`,\n     * `toLower`, `toNumber`, `toSafeInteger`, `toString`, `toUpper`, `trim`,\n     * `trimEnd`, `trimStart`, `truncate`, `unescape`, `uniqueId`, `upperCase`,\n     * `upperFirst`, `value`, and `words`\n     *\n     * @name _\n     * @constructor\n     * @category Seq\n     * @param {*} value The value to wrap in a `lodash` instance.\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * function square(n) {\n     *   return n * n;\n     * }\n     *\n     * var wrapped = _([1, 2, 3]);\n     *\n     * // Returns an unwrapped value.\n     * wrapped.reduce(_.add);\n     * // => 6\n     *\n     * // Returns a wrapped value.\n     * var squares = wrapped.map(square);\n     *\n     * _.isArray(squares);\n     * // => false\n     *\n     * _.isArray(squares.value());\n     * // => true\n     */\n    function lodash(value) {\n      if (isObjectLike(value) && !isArray(value) && !(value instanceof LazyWrapper)) {\n        if (value instanceof LodashWrapper) {\n          return value;\n        }\n        if (hasOwnProperty.call(value, '__wrapped__')) {\n          return wrapperClone(value);\n        }\n      }\n      return new LodashWrapper(value);\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} proto The object to inherit from.\n     * @returns {Object} Returns the new object.\n     */\n    var baseCreate = (function() {\n      function object() {}\n      return function(proto) {\n        if (!isObject(proto)) {\n          return {};\n        }\n        if (objectCreate) {\n          return objectCreate(proto);\n        }\n        object.prototype = proto;\n        var result = new object;\n        object.prototype = undefined;\n        return result;\n      };\n    }());\n\n    /**\n     * The function whose prototype chain sequence wrappers inherit from.\n     *\n     * @private\n     */\n    function baseLodash() {\n      // No operation performed.\n    }\n\n    /**\n     * The base constructor for creating `lodash` wrapper objects.\n     *\n     * @private\n     * @param {*} value The value to wrap.\n     * @param {boolean} [chainAll] Enable explicit method chain sequences.\n     */\n    function LodashWrapper(value, chainAll) {\n      this.__wrapped__ = value;\n      this.__actions__ = [];\n      this.__chain__ = !!chainAll;\n      this.__index__ = 0;\n      this.__values__ = undefined;\n    }\n\n    /**\n     * By default, the template delimiters used by lodash are like those in\n     * embedded Ruby (ERB) as well as ES2015 template strings. Change the\n     * following template settings to use alternative delimiters.\n     *\n     * @static\n     * @memberOf _\n     * @type {Object}\n     */\n    lodash.templateSettings = {\n\n      /**\n       * Used to detect `data` property values to be HTML-escaped.\n       *\n       * @memberOf _.templateSettings\n       * @type {RegExp}\n       */\n      'escape': reEscape,\n\n      /**\n       * Used to detect code to be evaluated.\n       *\n       * @memberOf _.templateSettings\n       * @type {RegExp}\n       */\n      'evaluate': reEvaluate,\n\n      /**\n       * Used to detect `data` property values to inject.\n       *\n       * @memberOf _.templateSettings\n       * @type {RegExp}\n       */\n      'interpolate': reInterpolate,\n\n      /**\n       * Used to reference the data object in the template text.\n       *\n       * @memberOf _.templateSettings\n       * @type {string}\n       */\n      'variable': '',\n\n      /**\n       * Used to import variables into the compiled template.\n       *\n       * @memberOf _.templateSettings\n       * @type {Object}\n       */\n      'imports': {\n\n        /**\n         * A reference to the `lodash` function.\n         *\n         * @memberOf _.templateSettings.imports\n         * @type {Function}\n         */\n        '_': lodash\n      }\n    };\n\n    // Ensure wrappers are instances of `baseLodash`.\n    lodash.prototype = baseLodash.prototype;\n    lodash.prototype.constructor = lodash;\n\n    LodashWrapper.prototype = baseCreate(baseLodash.prototype);\n    LodashWrapper.prototype.constructor = LodashWrapper;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation.\n     *\n     * @private\n     * @constructor\n     * @param {*} value The value to wrap.\n     */\n    function LazyWrapper(value) {\n      this.__wrapped__ = value;\n      this.__actions__ = [];\n      this.__dir__ = 1;\n      this.__filtered__ = false;\n      this.__iteratees__ = [];\n      this.__takeCount__ = MAX_ARRAY_LENGTH;\n      this.__views__ = [];\n    }\n\n    /**\n     * Creates a clone of the lazy wrapper object.\n     *\n     * @private\n     * @name clone\n     * @memberOf LazyWrapper\n     * @returns {Object} Returns the cloned `LazyWrapper` object.\n     */\n    function lazyClone() {\n      var result = new LazyWrapper(this.__wrapped__);\n      result.__actions__ = copyArray(this.__actions__);\n      result.__dir__ = this.__dir__;\n      result.__filtered__ = this.__filtered__;\n      result.__iteratees__ = copyArray(this.__iteratees__);\n      result.__takeCount__ = this.__takeCount__;\n      result.__views__ = copyArray(this.__views__);\n      return result;\n    }\n\n    /**\n     * Reverses the direction of lazy iteration.\n     *\n     * @private\n     * @name reverse\n     * @memberOf LazyWrapper\n     * @returns {Object} Returns the new reversed `LazyWrapper` object.\n     */\n    function lazyReverse() {\n      if (this.__filtered__) {\n        var result = new LazyWrapper(this);\n        result.__dir__ = -1;\n        result.__filtered__ = true;\n      } else {\n        result = this.clone();\n        result.__dir__ *= -1;\n      }\n      return result;\n    }\n\n    /**\n     * Extracts the unwrapped value from its lazy wrapper.\n     *\n     * @private\n     * @name value\n     * @memberOf LazyWrapper\n     * @returns {*} Returns the unwrapped value.\n     */\n    function lazyValue() {\n      var array = this.__wrapped__.value(),\n          dir = this.__dir__,\n          isArr = isArray(array),\n          isRight = dir < 0,\n          arrLength = isArr ? array.length : 0,\n          view = getView(0, arrLength, this.__views__),\n          start = view.start,\n          end = view.end,\n          length = end - start,\n          index = isRight ? end : (start - 1),\n          iteratees = this.__iteratees__,\n          iterLength = iteratees.length,\n          resIndex = 0,\n          takeCount = nativeMin(length, this.__takeCount__);\n\n      if (!isArr || (!isRight && arrLength == length && takeCount == length)) {\n        return baseWrapperValue(array, this.__actions__);\n      }\n      var result = [];\n\n      outer:\n      while (length-- && resIndex < takeCount) {\n        index += dir;\n\n        var iterIndex = -1,\n            value = array[index];\n\n        while (++iterIndex < iterLength) {\n          var data = iteratees[iterIndex],\n              iteratee = data.iteratee,\n              type = data.type,\n              computed = iteratee(value);\n\n          if (type == LAZY_MAP_FLAG) {\n            value = computed;\n          } else if (!computed) {\n            if (type == LAZY_FILTER_FLAG) {\n              continue outer;\n            } else {\n              break outer;\n            }\n          }\n        }\n        result[resIndex++] = value;\n      }\n      return result;\n    }\n\n    // Ensure `LazyWrapper` is an instance of `baseLodash`.\n    LazyWrapper.prototype = baseCreate(baseLodash.prototype);\n    LazyWrapper.prototype.constructor = LazyWrapper;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates a hash object.\n     *\n     * @private\n     * @constructor\n     * @param {Array} [entries] The key-value pairs to cache.\n     */\n    function 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    /**\n     * Removes all key-value entries from the hash.\n     *\n     * @private\n     * @name clear\n     * @memberOf Hash\n     */\n    function hashClear() {\n      this.__data__ = nativeCreate ? nativeCreate(null) : {};\n      this.size = 0;\n    }\n\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     */\n    function hashDelete(key) {\n      var result = this.has(key) && delete this.__data__[key];\n      this.size -= result ? 1 : 0;\n      return result;\n    }\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     */\n    function 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\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     */\n    function hashHas(key) {\n      var data = this.__data__;\n      return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n    }\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     */\n    function 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\n    // Add methods to `Hash`.\n    Hash.prototype.clear = hashClear;\n    Hash.prototype['delete'] = hashDelete;\n    Hash.prototype.get = hashGet;\n    Hash.prototype.has = hashHas;\n    Hash.prototype.set = hashSet;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates an list cache object.\n     *\n     * @private\n     * @constructor\n     * @param {Array} [entries] The key-value pairs to cache.\n     */\n    function 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    /**\n     * Removes all key-value entries from the list cache.\n     *\n     * @private\n     * @name clear\n     * @memberOf ListCache\n     */\n    function listCacheClear() {\n      this.__data__ = [];\n      this.size = 0;\n    }\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     */\n    function 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\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     */\n    function listCacheGet(key) {\n      var data = this.__data__,\n          index = assocIndexOf(data, key);\n\n      return index < 0 ? undefined : data[index][1];\n    }\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     */\n    function listCacheHas(key) {\n      return assocIndexOf(this.__data__, key) > -1;\n    }\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     */\n    function 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\n    // Add methods to `ListCache`.\n    ListCache.prototype.clear = listCacheClear;\n    ListCache.prototype['delete'] = listCacheDelete;\n    ListCache.prototype.get = listCacheGet;\n    ListCache.prototype.has = listCacheHas;\n    ListCache.prototype.set = listCacheSet;\n\n    /*------------------------------------------------------------------------*/\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     */\n    function 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    /**\n     * Removes all key-value entries from the map.\n     *\n     * @private\n     * @name clear\n     * @memberOf MapCache\n     */\n    function mapCacheClear() {\n      this.size = 0;\n      this.__data__ = {\n        'hash': new Hash,\n        'map': new (Map || ListCache),\n        'string': new Hash\n      };\n    }\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     */\n    function mapCacheDelete(key) {\n      var result = getMapData(this, key)['delete'](key);\n      this.size -= result ? 1 : 0;\n      return result;\n    }\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     */\n    function mapCacheGet(key) {\n      return getMapData(this, key).get(key);\n    }\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     */\n    function mapCacheHas(key) {\n      return getMapData(this, key).has(key);\n    }\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     */\n    function 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\n    // Add methods to `MapCache`.\n    MapCache.prototype.clear = mapCacheClear;\n    MapCache.prototype['delete'] = mapCacheDelete;\n    MapCache.prototype.get = mapCacheGet;\n    MapCache.prototype.has = mapCacheHas;\n    MapCache.prototype.set = mapCacheSet;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     *\n     * Creates an array cache object to store unique values.\n     *\n     * @private\n     * @constructor\n     * @param {Array} [values] The values to cache.\n     */\n    function SetCache(values) {\n      var index = -1,\n          length = values == null ? 0 : values.length;\n\n      this.__data__ = new MapCache;\n      while (++index < length) {\n        this.add(values[index]);\n      }\n    }\n\n    /**\n     * Adds `value` to the array cache.\n     *\n     * @private\n     * @name add\n     * @memberOf SetCache\n     * @alias push\n     * @param {*} value The value to cache.\n     * @returns {Object} Returns the cache instance.\n     */\n    function setCacheAdd(value) {\n      this.__data__.set(value, HASH_UNDEFINED);\n      return this;\n    }\n\n    /**\n     * Checks if `value` is in the array cache.\n     *\n     * @private\n     * @name has\n     * @memberOf SetCache\n     * @param {*} value The value to search for.\n     * @returns {number} Returns `true` if `value` is found, else `false`.\n     */\n    function setCacheHas(value) {\n      return this.__data__.has(value);\n    }\n\n    // Add methods to `SetCache`.\n    SetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\n    SetCache.prototype.has = setCacheHas;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates a stack cache object to store key-value pairs.\n     *\n     * @private\n     * @constructor\n     * @param {Array} [entries] The key-value pairs to cache.\n     */\n    function Stack(entries) {\n      var data = this.__data__ = new ListCache(entries);\n      this.size = data.size;\n    }\n\n    /**\n     * Removes all key-value entries from the stack.\n     *\n     * @private\n     * @name clear\n     * @memberOf Stack\n     */\n    function stackClear() {\n      this.__data__ = new ListCache;\n      this.size = 0;\n    }\n\n    /**\n     * Removes `key` and its value from the stack.\n     *\n     * @private\n     * @name delete\n     * @memberOf Stack\n     * @param {string} key The key of the value to remove.\n     * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n     */\n    function stackDelete(key) {\n      var data = this.__data__,\n          result = data['delete'](key);\n\n      this.size = data.size;\n      return result;\n    }\n\n    /**\n     * Gets the stack value for `key`.\n     *\n     * @private\n     * @name get\n     * @memberOf Stack\n     * @param {string} key The key of the value to get.\n     * @returns {*} Returns the entry value.\n     */\n    function stackGet(key) {\n      return this.__data__.get(key);\n    }\n\n    /**\n     * Checks if a stack value for `key` exists.\n     *\n     * @private\n     * @name has\n     * @memberOf Stack\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     */\n    function stackHas(key) {\n      return this.__data__.has(key);\n    }\n\n    /**\n     * Sets the stack `key` to `value`.\n     *\n     * @private\n     * @name set\n     * @memberOf Stack\n     * @param {string} key The key of the value to set.\n     * @param {*} value The value to set.\n     * @returns {Object} Returns the stack cache instance.\n     */\n    function stackSet(key, value) {\n      var data = this.__data__;\n      if (data instanceof ListCache) {\n        var pairs = data.__data__;\n        if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n          pairs.push([key, value]);\n          this.size = ++data.size;\n          return this;\n        }\n        data = this.__data__ = new MapCache(pairs);\n      }\n      data.set(key, value);\n      this.size = data.size;\n      return this;\n    }\n\n    // Add methods to `Stack`.\n    Stack.prototype.clear = stackClear;\n    Stack.prototype['delete'] = stackDelete;\n    Stack.prototype.get = stackGet;\n    Stack.prototype.has = stackHas;\n    Stack.prototype.set = stackSet;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates an array of the enumerable property names of the array-like `value`.\n     *\n     * @private\n     * @param {*} value The value to query.\n     * @param {boolean} inherited Specify returning inherited property names.\n     * @returns {Array} Returns the array of property names.\n     */\n    function arrayLikeKeys(value, inherited) {\n      var isArr = isArray(value),\n          isArg = !isArr && isArguments(value),\n          isBuff = !isArr && !isArg && isBuffer(value),\n          isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n          skipIndexes = isArr || isArg || isBuff || isType,\n          result = skipIndexes ? baseTimes(value.length, String) : [],\n          length = result.length;\n\n      for (var key in value) {\n        if ((inherited || hasOwnProperty.call(value, key)) &&\n            !(skipIndexes && (\n               // Safari 9 has enumerable `arguments.length` in strict mode.\n               key == 'length' ||\n               // Node.js 0.10 has enumerable non-index properties on buffers.\n               (isBuff && (key == 'offset' || key == 'parent')) ||\n               // PhantomJS 2 has enumerable non-index properties on typed arrays.\n               (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n               // Skip index properties.\n               isIndex(key, length)\n            ))) {\n          result.push(key);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * A specialized version of `_.sample` for arrays.\n     *\n     * @private\n     * @param {Array} array The array to sample.\n     * @returns {*} Returns the random element.\n     */\n    function arraySample(array) {\n      var length = array.length;\n      return length ? array[baseRandom(0, length - 1)] : undefined;\n    }\n\n    /**\n     * A specialized version of `_.sampleSize` for arrays.\n     *\n     * @private\n     * @param {Array} array The array to sample.\n     * @param {number} n The number of elements to sample.\n     * @returns {Array} Returns the random elements.\n     */\n    function arraySampleSize(array, n) {\n      return shuffleSelf(copyArray(array), baseClamp(n, 0, array.length));\n    }\n\n    /**\n     * A specialized version of `_.shuffle` for arrays.\n     *\n     * @private\n     * @param {Array} array The array to shuffle.\n     * @returns {Array} Returns the new shuffled array.\n     */\n    function arrayShuffle(array) {\n      return shuffleSelf(copyArray(array));\n    }\n\n    /**\n     * This function is like `assignValue` except that it doesn't assign\n     * `undefined` values.\n     *\n     * @private\n     * @param {Object} object The object to modify.\n     * @param {string} key The key of the property to assign.\n     * @param {*} value The value to assign.\n     */\n    function assignMergeValue(object, key, value) {\n      if ((value !== undefined && !eq(object[key], value)) ||\n          (value === undefined && !(key in object))) {\n        baseAssignValue(object, key, value);\n      }\n    }\n\n    /**\n     * Assigns `value` to `key` of `object` if the existing value is not equivalent\n     * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons.\n     *\n     * @private\n     * @param {Object} object The object to modify.\n     * @param {string} key The key of the property to assign.\n     * @param {*} value The value to assign.\n     */\n    function assignValue(object, key, value) {\n      var objValue = object[key];\n      if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n          (value === undefined && !(key in object))) {\n        baseAssignValue(object, key, value);\n      }\n    }\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     */\n    function 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\n    /**\n     * Aggregates elements of `collection` on `accumulator` with keys transformed\n     * by `iteratee` and values set by `setter`.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} setter The function to set `accumulator` values.\n     * @param {Function} iteratee The iteratee to transform keys.\n     * @param {Object} accumulator The initial aggregated object.\n     * @returns {Function} Returns `accumulator`.\n     */\n    function baseAggregator(collection, setter, iteratee, accumulator) {\n      baseEach(collection, function(value, key, collection) {\n        setter(accumulator, value, iteratee(value), collection);\n      });\n      return accumulator;\n    }\n\n    /**\n     * The base implementation of `_.assign` without support for multiple sources\n     * or `customizer` functions.\n     *\n     * @private\n     * @param {Object} object The destination object.\n     * @param {Object} source The source object.\n     * @returns {Object} Returns `object`.\n     */\n    function baseAssign(object, source) {\n      return object && copyObject(source, keys(source), object);\n    }\n\n    /**\n     * The base implementation of `_.assignIn` without support for multiple sources\n     * or `customizer` functions.\n     *\n     * @private\n     * @param {Object} object The destination object.\n     * @param {Object} source The source object.\n     * @returns {Object} Returns `object`.\n     */\n    function baseAssignIn(object, source) {\n      return object && copyObject(source, keysIn(source), object);\n    }\n\n    /**\n     * The base implementation of `assignValue` and `assignMergeValue` without\n     * value checks.\n     *\n     * @private\n     * @param {Object} object The object to modify.\n     * @param {string} key The key of the property to assign.\n     * @param {*} value The value to assign.\n     */\n    function baseAssignValue(object, key, value) {\n      if (key == '__proto__' && defineProperty) {\n        defineProperty(object, key, {\n          'configurable': true,\n          'enumerable': true,\n          'value': value,\n          'writable': true\n        });\n      } else {\n        object[key] = value;\n      }\n    }\n\n    /**\n     * The base implementation of `_.at` without support for individual paths.\n     *\n     * @private\n     * @param {Object} object The object to iterate over.\n     * @param {string[]} paths The property paths to pick.\n     * @returns {Array} Returns the picked elements.\n     */\n    function baseAt(object, paths) {\n      var index = -1,\n          length = paths.length,\n          result = Array(length),\n          skip = object == null;\n\n      while (++index < length) {\n        result[index] = skip ? undefined : get(object, paths[index]);\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.clamp` which doesn't coerce arguments.\n     *\n     * @private\n     * @param {number} number The number to clamp.\n     * @param {number} [lower] The lower bound.\n     * @param {number} upper The upper bound.\n     * @returns {number} Returns the clamped number.\n     */\n    function baseClamp(number, lower, upper) {\n      if (number === number) {\n        if (upper !== undefined) {\n          number = number <= upper ? number : upper;\n        }\n        if (lower !== undefined) {\n          number = number >= lower ? number : lower;\n        }\n      }\n      return number;\n    }\n\n    /**\n     * The base implementation of `_.clone` and `_.cloneDeep` which tracks\n     * traversed objects.\n     *\n     * @private\n     * @param {*} value The value to clone.\n     * @param {boolean} bitmask The bitmask flags.\n     *  1 - Deep clone\n     *  2 - Flatten inherited properties\n     *  4 - Clone symbols\n     * @param {Function} [customizer] The function to customize cloning.\n     * @param {string} [key] The key of `value`.\n     * @param {Object} [object] The parent object of `value`.\n     * @param {Object} [stack] Tracks traversed objects and their clone counterparts.\n     * @returns {*} Returns the cloned value.\n     */\n    function baseClone(value, bitmask, customizer, key, object, stack) {\n      var result,\n          isDeep = bitmask & CLONE_DEEP_FLAG,\n          isFlat = bitmask & CLONE_FLAT_FLAG,\n          isFull = bitmask & CLONE_SYMBOLS_FLAG;\n\n      if (customizer) {\n        result = object ? customizer(value, key, object, stack) : customizer(value);\n      }\n      if (result !== undefined) {\n        return result;\n      }\n      if (!isObject(value)) {\n        return value;\n      }\n      var isArr = isArray(value);\n      if (isArr) {\n        result = initCloneArray(value);\n        if (!isDeep) {\n          return copyArray(value, result);\n        }\n      } else {\n        var tag = getTag(value),\n            isFunc = tag == funcTag || tag == genTag;\n\n        if (isBuffer(value)) {\n          return cloneBuffer(value, isDeep);\n        }\n        if (tag == objectTag || tag == argsTag || (isFunc && !object)) {\n          result = (isFlat || isFunc) ? {} : initCloneObject(value);\n          if (!isDeep) {\n            return isFlat\n              ? copySymbolsIn(value, baseAssignIn(result, value))\n              : copySymbols(value, baseAssign(result, value));\n          }\n        } else {\n          if (!cloneableTags[tag]) {\n            return object ? value : {};\n          }\n          result = initCloneByTag(value, tag, isDeep);\n        }\n      }\n      // Check for circular references and return its corresponding clone.\n      stack || (stack = new Stack);\n      var stacked = stack.get(value);\n      if (stacked) {\n        return stacked;\n      }\n      stack.set(value, result);\n\n      if (isSet(value)) {\n        value.forEach(function(subValue) {\n          result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));\n        });\n      } else if (isMap(value)) {\n        value.forEach(function(subValue, key) {\n          result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack));\n        });\n      }\n\n      var keysFunc = isFull\n        ? (isFlat ? getAllKeysIn : getAllKeys)\n        : (isFlat ? keysIn : keys);\n\n      var props = isArr ? undefined : keysFunc(value);\n      arrayEach(props || value, function(subValue, key) {\n        if (props) {\n          key = subValue;\n          subValue = value[key];\n        }\n        // Recursively populate clone (susceptible to call stack limits).\n        assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));\n      });\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.conforms` which doesn't clone `source`.\n     *\n     * @private\n     * @param {Object} source The object of property predicates to conform to.\n     * @returns {Function} Returns the new spec function.\n     */\n    function baseConforms(source) {\n      var props = keys(source);\n      return function(object) {\n        return baseConformsTo(object, source, props);\n      };\n    }\n\n    /**\n     * The base implementation of `_.conformsTo` which accepts `props` to check.\n     *\n     * @private\n     * @param {Object} object The object to inspect.\n     * @param {Object} source The object of property predicates to conform to.\n     * @returns {boolean} Returns `true` if `object` conforms, else `false`.\n     */\n    function baseConformsTo(object, source, props) {\n      var length = props.length;\n      if (object == null) {\n        return !length;\n      }\n      object = Object(object);\n      while (length--) {\n        var key = props[length],\n            predicate = source[key],\n            value = object[key];\n\n        if ((value === undefined && !(key in object)) || !predicate(value)) {\n          return false;\n        }\n      }\n      return true;\n    }\n\n    /**\n     * The base implementation of `_.delay` and `_.defer` which accepts `args`\n     * to provide to `func`.\n     *\n     * @private\n     * @param {Function} func The function to delay.\n     * @param {number} wait The number of milliseconds to delay invocation.\n     * @param {Array} args The arguments to provide to `func`.\n     * @returns {number|Object} Returns the timer id or timeout object.\n     */\n    function baseDelay(func, wait, args) {\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      return setTimeout(function() { func.apply(undefined, args); }, wait);\n    }\n\n    /**\n     * The base implementation of methods like `_.difference` without support\n     * for excluding multiple arrays or iteratee shorthands.\n     *\n     * @private\n     * @param {Array} array The array to inspect.\n     * @param {Array} values The values to exclude.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of filtered values.\n     */\n    function baseDifference(array, values, iteratee, comparator) {\n      var index = -1,\n          includes = arrayIncludes,\n          isCommon = true,\n          length = array.length,\n          result = [],\n          valuesLength = values.length;\n\n      if (!length) {\n        return result;\n      }\n      if (iteratee) {\n        values = arrayMap(values, baseUnary(iteratee));\n      }\n      if (comparator) {\n        includes = arrayIncludesWith;\n        isCommon = false;\n      }\n      else if (values.length >= LARGE_ARRAY_SIZE) {\n        includes = cacheHas;\n        isCommon = false;\n        values = new SetCache(values);\n      }\n      outer:\n      while (++index < length) {\n        var value = array[index],\n            computed = iteratee == null ? value : iteratee(value);\n\n        value = (comparator || value !== 0) ? value : 0;\n        if (isCommon && computed === computed) {\n          var valuesIndex = valuesLength;\n          while (valuesIndex--) {\n            if (values[valuesIndex] === computed) {\n              continue outer;\n            }\n          }\n          result.push(value);\n        }\n        else if (!includes(values, computed, comparator)) {\n          result.push(value);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.forEach` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @returns {Array|Object} Returns `collection`.\n     */\n    var baseEach = createBaseEach(baseForOwn);\n\n    /**\n     * The base implementation of `_.forEachRight` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @returns {Array|Object} Returns `collection`.\n     */\n    var baseEachRight = createBaseEach(baseForOwnRight, true);\n\n    /**\n     * The base implementation of `_.every` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} predicate The function invoked per iteration.\n     * @returns {boolean} Returns `true` if all elements pass the predicate check,\n     *  else `false`\n     */\n    function baseEvery(collection, predicate) {\n      var result = true;\n      baseEach(collection, function(value, index, collection) {\n        result = !!predicate(value, index, collection);\n        return result;\n      });\n      return result;\n    }\n\n    /**\n     * The base implementation of methods like `_.max` and `_.min` which accepts a\n     * `comparator` to determine the extremum value.\n     *\n     * @private\n     * @param {Array} array The array to iterate over.\n     * @param {Function} iteratee The iteratee invoked per iteration.\n     * @param {Function} comparator The comparator used to compare values.\n     * @returns {*} Returns the extremum value.\n     */\n    function baseExtremum(array, iteratee, comparator) {\n      var index = -1,\n          length = array.length;\n\n      while (++index < length) {\n        var value = array[index],\n            current = iteratee(value);\n\n        if (current != null && (computed === undefined\n              ? (current === current && !isSymbol(current))\n              : comparator(current, computed)\n            )) {\n          var computed = current,\n              result = value;\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.fill` without an iteratee call guard.\n     *\n     * @private\n     * @param {Array} array The array to fill.\n     * @param {*} value The value to fill `array` with.\n     * @param {number} [start=0] The start position.\n     * @param {number} [end=array.length] The end position.\n     * @returns {Array} Returns `array`.\n     */\n    function baseFill(array, value, start, end) {\n      var length = array.length;\n\n      start = toInteger(start);\n      if (start < 0) {\n        start = -start > length ? 0 : (length + start);\n      }\n      end = (end === undefined || end > length) ? length : toInteger(end);\n      if (end < 0) {\n        end += length;\n      }\n      end = start > end ? 0 : toLength(end);\n      while (start < end) {\n        array[start++] = value;\n      }\n      return array;\n    }\n\n    /**\n     * The base implementation of `_.filter` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} predicate The function invoked per iteration.\n     * @returns {Array} Returns the new filtered array.\n     */\n    function baseFilter(collection, predicate) {\n      var result = [];\n      baseEach(collection, function(value, index, collection) {\n        if (predicate(value, index, collection)) {\n          result.push(value);\n        }\n      });\n      return result;\n    }\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     */\n    function 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 `baseForOwn` which iterates over `object`\n     * properties returned by `keysFunc` and invokes `iteratee` for each property.\n     * Iteratee functions may exit iteration early by explicitly returning `false`.\n     *\n     * @private\n     * @param {Object} object The object to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @param {Function} keysFunc The function to get the keys of `object`.\n     * @returns {Object} Returns `object`.\n     */\n    var baseFor = createBaseFor();\n\n    /**\n     * This function is like `baseFor` except that it iterates over properties\n     * in the opposite order.\n     *\n     * @private\n     * @param {Object} object The object to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @param {Function} keysFunc The function to get the keys of `object`.\n     * @returns {Object} Returns `object`.\n     */\n    var baseForRight = createBaseFor(true);\n\n    /**\n     * The base implementation of `_.forOwn` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Object} object The object to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @returns {Object} Returns `object`.\n     */\n    function baseForOwn(object, iteratee) {\n      return object && baseFor(object, iteratee, keys);\n    }\n\n    /**\n     * The base implementation of `_.forOwnRight` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Object} object The object to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @returns {Object} Returns `object`.\n     */\n    function baseForOwnRight(object, iteratee) {\n      return object && baseForRight(object, iteratee, keys);\n    }\n\n    /**\n     * The base implementation of `_.functions` which creates an array of\n     * `object` function property names filtered from `props`.\n     *\n     * @private\n     * @param {Object} object The object to inspect.\n     * @param {Array} props The property names to filter.\n     * @returns {Array} Returns the function names.\n     */\n    function baseFunctions(object, props) {\n      return arrayFilter(props, function(key) {\n        return isFunction(object[key]);\n      });\n    }\n\n    /**\n     * The base implementation of `_.get` without support for default values.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path of the property to get.\n     * @returns {*} Returns the resolved value.\n     */\n    function baseGet(object, path) {\n      path = castPath(path, object);\n\n      var index = 0,\n          length = path.length;\n\n      while (object != null && index < length) {\n        object = object[toKey(path[index++])];\n      }\n      return (index && index == length) ? object : undefined;\n    }\n\n    /**\n     * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n     * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n     * symbols of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {Function} keysFunc The function to get the keys of `object`.\n     * @param {Function} symbolsFunc The function to get the symbols of `object`.\n     * @returns {Array} Returns the array of property names and symbols.\n     */\n    function baseGetAllKeys(object, keysFunc, symbolsFunc) {\n      var result = keysFunc(object);\n      return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n    }\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     */\n    function 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\n    /**\n     * The base implementation of `_.gt` which doesn't coerce arguments.\n     *\n     * @private\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if `value` is greater than `other`,\n     *  else `false`.\n     */\n    function baseGt(value, other) {\n      return value > other;\n    }\n\n    /**\n     * The base implementation of `_.has` without support for deep paths.\n     *\n     * @private\n     * @param {Object} [object] The object to query.\n     * @param {Array|string} key The key to check.\n     * @returns {boolean} Returns `true` if `key` exists, else `false`.\n     */\n    function baseHas(object, key) {\n      return object != null && hasOwnProperty.call(object, key);\n    }\n\n    /**\n     * The base implementation of `_.hasIn` without support for deep paths.\n     *\n     * @private\n     * @param {Object} [object] The object to query.\n     * @param {Array|string} key The key to check.\n     * @returns {boolean} Returns `true` if `key` exists, else `false`.\n     */\n    function baseHasIn(object, key) {\n      return object != null && key in Object(object);\n    }\n\n    /**\n     * The base implementation of `_.inRange` which doesn't coerce arguments.\n     *\n     * @private\n     * @param {number} number The number to check.\n     * @param {number} start The start of the range.\n     * @param {number} end The end of the range.\n     * @returns {boolean} Returns `true` if `number` is in the range, else `false`.\n     */\n    function baseInRange(number, start, end) {\n      return number >= nativeMin(start, end) && number < nativeMax(start, end);\n    }\n\n    /**\n     * The base implementation of methods like `_.intersection`, without support\n     * for iteratee shorthands, that accepts an array of arrays to inspect.\n     *\n     * @private\n     * @param {Array} arrays The arrays to inspect.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of shared values.\n     */\n    function baseIntersection(arrays, iteratee, comparator) {\n      var includes = comparator ? arrayIncludesWith : arrayIncludes,\n          length = arrays[0].length,\n          othLength = arrays.length,\n          othIndex = othLength,\n          caches = Array(othLength),\n          maxLength = Infinity,\n          result = [];\n\n      while (othIndex--) {\n        var array = arrays[othIndex];\n        if (othIndex && iteratee) {\n          array = arrayMap(array, baseUnary(iteratee));\n        }\n        maxLength = nativeMin(array.length, maxLength);\n        caches[othIndex] = !comparator && (iteratee || (length >= 120 && array.length >= 120))\n          ? new SetCache(othIndex && array)\n          : undefined;\n      }\n      array = arrays[0];\n\n      var index = -1,\n          seen = caches[0];\n\n      outer:\n      while (++index < length && result.length < maxLength) {\n        var value = array[index],\n            computed = iteratee ? iteratee(value) : value;\n\n        value = (comparator || value !== 0) ? value : 0;\n        if (!(seen\n              ? cacheHas(seen, computed)\n              : includes(result, computed, comparator)\n            )) {\n          othIndex = othLength;\n          while (--othIndex) {\n            var cache = caches[othIndex];\n            if (!(cache\n                  ? cacheHas(cache, computed)\n                  : includes(arrays[othIndex], computed, comparator))\n                ) {\n              continue outer;\n            }\n          }\n          if (seen) {\n            seen.push(computed);\n          }\n          result.push(value);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.invert` and `_.invertBy` which inverts\n     * `object` with values transformed by `iteratee` and set by `setter`.\n     *\n     * @private\n     * @param {Object} object The object to iterate over.\n     * @param {Function} setter The function to set `accumulator` values.\n     * @param {Function} iteratee The iteratee to transform values.\n     * @param {Object} accumulator The initial inverted object.\n     * @returns {Function} Returns `accumulator`.\n     */\n    function baseInverter(object, setter, iteratee, accumulator) {\n      baseForOwn(object, function(value, key, object) {\n        setter(accumulator, iteratee(value), key, object);\n      });\n      return accumulator;\n    }\n\n    /**\n     * The base implementation of `_.invoke` without support for individual\n     * method arguments.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path of the method to invoke.\n     * @param {Array} args The arguments to invoke the method with.\n     * @returns {*} Returns the result of the invoked method.\n     */\n    function baseInvoke(object, path, args) {\n      path = castPath(path, object);\n      object = parent(object, path);\n      var func = object == null ? object : object[toKey(last(path))];\n      return func == null ? undefined : apply(func, object, args);\n    }\n\n    /**\n     * The base implementation of `_.isArguments`.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n     */\n    function baseIsArguments(value) {\n      return isObjectLike(value) && baseGetTag(value) == argsTag;\n    }\n\n    /**\n     * The base implementation of `_.isArrayBuffer` without Node.js optimizations.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.\n     */\n    function baseIsArrayBuffer(value) {\n      return isObjectLike(value) && baseGetTag(value) == arrayBufferTag;\n    }\n\n    /**\n     * The base implementation of `_.isDate` without Node.js optimizations.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a date object, else `false`.\n     */\n    function baseIsDate(value) {\n      return isObjectLike(value) && baseGetTag(value) == dateTag;\n    }\n\n    /**\n     * The base implementation of `_.isEqual` which supports partial comparisons\n     * and tracks traversed objects.\n     *\n     * @private\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @param {boolean} bitmask The bitmask flags.\n     *  1 - Unordered comparison\n     *  2 - Partial comparison\n     * @param {Function} [customizer] The function to customize comparisons.\n     * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n     */\n    function baseIsEqual(value, other, bitmask, customizer, stack) {\n      if (value === other) {\n        return true;\n      }\n      if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n        return value !== value && other !== other;\n      }\n      return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n    }\n\n    /**\n     * A specialized version of `baseIsEqual` for arrays and objects which performs\n     * deep comparisons and tracks traversed objects enabling objects with circular\n     * references to be compared.\n     *\n     * @private\n     * @param {Object} object The object to compare.\n     * @param {Object} other The other object to compare.\n     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n     * @param {Function} customizer The function to customize comparisons.\n     * @param {Function} equalFunc The function to determine equivalents of values.\n     * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n     * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n     */\n    function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n      var objIsArr = isArray(object),\n          othIsArr = isArray(other),\n          objTag = objIsArr ? arrayTag : getTag(object),\n          othTag = othIsArr ? arrayTag : getTag(other);\n\n      objTag = objTag == argsTag ? objectTag : objTag;\n      othTag = othTag == argsTag ? objectTag : othTag;\n\n      var objIsObj = objTag == objectTag,\n          othIsObj = othTag == objectTag,\n          isSameTag = objTag == othTag;\n\n      if (isSameTag && isBuffer(object)) {\n        if (!isBuffer(other)) {\n          return false;\n        }\n        objIsArr = true;\n        objIsObj = false;\n      }\n      if (isSameTag && !objIsObj) {\n        stack || (stack = new Stack);\n        return (objIsArr || isTypedArray(object))\n          ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n          : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n      }\n      if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n        var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n            othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n        if (objIsWrapped || othIsWrapped) {\n          var objUnwrapped = objIsWrapped ? object.value() : object,\n              othUnwrapped = othIsWrapped ? other.value() : other;\n\n          stack || (stack = new Stack);\n          return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n        }\n      }\n      if (!isSameTag) {\n        return false;\n      }\n      stack || (stack = new Stack);\n      return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n    }\n\n    /**\n     * The base implementation of `_.isMap` without Node.js optimizations.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n     */\n    function baseIsMap(value) {\n      return isObjectLike(value) && getTag(value) == mapTag;\n    }\n\n    /**\n     * The base implementation of `_.isMatch` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Object} object The object to inspect.\n     * @param {Object} source The object of property values to match.\n     * @param {Array} matchData The property names, values, and compare flags to match.\n     * @param {Function} [customizer] The function to customize comparisons.\n     * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n     */\n    function baseIsMatch(object, source, matchData, customizer) {\n      var index = matchData.length,\n          length = index,\n          noCustomizer = !customizer;\n\n      if (object == null) {\n        return !length;\n      }\n      object = Object(object);\n      while (index--) {\n        var data = matchData[index];\n        if ((noCustomizer && data[2])\n              ? data[1] !== object[data[0]]\n              : !(data[0] in object)\n            ) {\n          return false;\n        }\n      }\n      while (++index < length) {\n        data = matchData[index];\n        var key = data[0],\n            objValue = object[key],\n            srcValue = data[1];\n\n        if (noCustomizer && data[2]) {\n          if (objValue === undefined && !(key in object)) {\n            return false;\n          }\n        } else {\n          var stack = new Stack;\n          if (customizer) {\n            var result = customizer(objValue, srcValue, key, object, source, stack);\n          }\n          if (!(result === undefined\n                ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack)\n                : result\n              )) {\n            return false;\n          }\n        }\n      }\n      return true;\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     */\n    function 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\n    /**\n     * The base implementation of `_.isRegExp` without Node.js optimizations.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.\n     */\n    function baseIsRegExp(value) {\n      return isObjectLike(value) && baseGetTag(value) == regexpTag;\n    }\n\n    /**\n     * The base implementation of `_.isSet` without Node.js optimizations.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n     */\n    function baseIsSet(value) {\n      return isObjectLike(value) && getTag(value) == setTag;\n    }\n\n    /**\n     * The base implementation of `_.isTypedArray` without Node.js optimizations.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n     */\n    function baseIsTypedArray(value) {\n      return isObjectLike(value) &&\n        isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n    }\n\n    /**\n     * The base implementation of `_.iteratee`.\n     *\n     * @private\n     * @param {*} [value=_.identity] The value to convert to an iteratee.\n     * @returns {Function} Returns the iteratee.\n     */\n    function baseIteratee(value) {\n      // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.\n      // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.\n      if (typeof value == 'function') {\n        return value;\n      }\n      if (value == null) {\n        return identity;\n      }\n      if (typeof value == 'object') {\n        return isArray(value)\n          ? baseMatchesProperty(value[0], value[1])\n          : baseMatches(value);\n      }\n      return property(value);\n    }\n\n    /**\n     * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names.\n     */\n    function baseKeys(object) {\n      if (!isPrototype(object)) {\n        return nativeKeys(object);\n      }\n      var result = [];\n      for (var key in Object(object)) {\n        if (hasOwnProperty.call(object, key) && key != 'constructor') {\n          result.push(key);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names.\n     */\n    function baseKeysIn(object) {\n      if (!isObject(object)) {\n        return nativeKeysIn(object);\n      }\n      var isProto = isPrototype(object),\n          result = [];\n\n      for (var key in object) {\n        if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n          result.push(key);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.lt` which doesn't coerce arguments.\n     *\n     * @private\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if `value` is less than `other`,\n     *  else `false`.\n     */\n    function baseLt(value, other) {\n      return value < other;\n    }\n\n    /**\n     * The base implementation of `_.map` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @returns {Array} Returns the new mapped array.\n     */\n    function baseMap(collection, iteratee) {\n      var index = -1,\n          result = isArrayLike(collection) ? Array(collection.length) : [];\n\n      baseEach(collection, function(value, key, collection) {\n        result[++index] = iteratee(value, key, collection);\n      });\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.matches` which doesn't clone `source`.\n     *\n     * @private\n     * @param {Object} source The object of property values to match.\n     * @returns {Function} Returns the new spec function.\n     */\n    function baseMatches(source) {\n      var matchData = getMatchData(source);\n      if (matchData.length == 1 && matchData[0][2]) {\n        return matchesStrictComparable(matchData[0][0], matchData[0][1]);\n      }\n      return function(object) {\n        return object === source || baseIsMatch(object, source, matchData);\n      };\n    }\n\n    /**\n     * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.\n     *\n     * @private\n     * @param {string} path The path of the property to get.\n     * @param {*} srcValue The value to match.\n     * @returns {Function} Returns the new spec function.\n     */\n    function baseMatchesProperty(path, srcValue) {\n      if (isKey(path) && isStrictComparable(srcValue)) {\n        return matchesStrictComparable(toKey(path), srcValue);\n      }\n      return function(object) {\n        var objValue = get(object, path);\n        return (objValue === undefined && objValue === srcValue)\n          ? hasIn(object, path)\n          : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);\n      };\n    }\n\n    /**\n     * The base implementation of `_.merge` without support for multiple sources.\n     *\n     * @private\n     * @param {Object} object The destination object.\n     * @param {Object} source The source object.\n     * @param {number} srcIndex The index of `source`.\n     * @param {Function} [customizer] The function to customize merged values.\n     * @param {Object} [stack] Tracks traversed source values and their merged\n     *  counterparts.\n     */\n    function baseMerge(object, source, srcIndex, customizer, stack) {\n      if (object === source) {\n        return;\n      }\n      baseFor(source, function(srcValue, key) {\n        stack || (stack = new Stack);\n        if (isObject(srcValue)) {\n          baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack);\n        }\n        else {\n          var newValue = customizer\n            ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack)\n            : undefined;\n\n          if (newValue === undefined) {\n            newValue = srcValue;\n          }\n          assignMergeValue(object, key, newValue);\n        }\n      }, keysIn);\n    }\n\n    /**\n     * A specialized version of `baseMerge` for arrays and objects which performs\n     * deep merges and tracks traversed objects enabling objects with circular\n     * references to be merged.\n     *\n     * @private\n     * @param {Object} object The destination object.\n     * @param {Object} source The source object.\n     * @param {string} key The key of the value to merge.\n     * @param {number} srcIndex The index of `source`.\n     * @param {Function} mergeFunc The function to merge values.\n     * @param {Function} [customizer] The function to customize assigned values.\n     * @param {Object} [stack] Tracks traversed source values and their merged\n     *  counterparts.\n     */\n    function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) {\n      var objValue = safeGet(object, key),\n          srcValue = safeGet(source, key),\n          stacked = stack.get(srcValue);\n\n      if (stacked) {\n        assignMergeValue(object, key, stacked);\n        return;\n      }\n      var newValue = customizer\n        ? customizer(objValue, srcValue, (key + ''), object, source, stack)\n        : undefined;\n\n      var isCommon = newValue === undefined;\n\n      if (isCommon) {\n        var isArr = isArray(srcValue),\n            isBuff = !isArr && isBuffer(srcValue),\n            isTyped = !isArr && !isBuff && isTypedArray(srcValue);\n\n        newValue = srcValue;\n        if (isArr || isBuff || isTyped) {\n          if (isArray(objValue)) {\n            newValue = objValue;\n          }\n          else if (isArrayLikeObject(objValue)) {\n            newValue = copyArray(objValue);\n          }\n          else if (isBuff) {\n            isCommon = false;\n            newValue = cloneBuffer(srcValue, true);\n          }\n          else if (isTyped) {\n            isCommon = false;\n            newValue = cloneTypedArray(srcValue, true);\n          }\n          else {\n            newValue = [];\n          }\n        }\n        else if (isPlainObject(srcValue) || isArguments(srcValue)) {\n          newValue = objValue;\n          if (isArguments(objValue)) {\n            newValue = toPlainObject(objValue);\n          }\n          else if (!isObject(objValue) || isFunction(objValue)) {\n            newValue = initCloneObject(srcValue);\n          }\n        }\n        else {\n          isCommon = false;\n        }\n      }\n      if (isCommon) {\n        // Recursively merge objects and arrays (susceptible to call stack limits).\n        stack.set(srcValue, newValue);\n        mergeFunc(newValue, srcValue, srcIndex, customizer, stack);\n        stack['delete'](srcValue);\n      }\n      assignMergeValue(object, key, newValue);\n    }\n\n    /**\n     * The base implementation of `_.nth` which doesn't coerce arguments.\n     *\n     * @private\n     * @param {Array} array The array to query.\n     * @param {number} n The index of the element to return.\n     * @returns {*} Returns the nth element of `array`.\n     */\n    function baseNth(array, n) {\n      var length = array.length;\n      if (!length) {\n        return;\n      }\n      n += n < 0 ? length : 0;\n      return isIndex(n, length) ? array[n] : undefined;\n    }\n\n    /**\n     * The base implementation of `_.orderBy` without param guards.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by.\n     * @param {string[]} orders The sort orders of `iteratees`.\n     * @returns {Array} Returns the new sorted array.\n     */\n    function baseOrderBy(collection, iteratees, orders) {\n      if (iteratees.length) {\n        iteratees = arrayMap(iteratees, function(iteratee) {\n          if (isArray(iteratee)) {\n            return function(value) {\n              return baseGet(value, iteratee.length === 1 ? iteratee[0] : iteratee);\n            }\n          }\n          return iteratee;\n        });\n      } else {\n        iteratees = [identity];\n      }\n\n      var index = -1;\n      iteratees = arrayMap(iteratees, baseUnary(getIteratee()));\n\n      var result = baseMap(collection, function(value, key, collection) {\n        var criteria = arrayMap(iteratees, function(iteratee) {\n          return iteratee(value);\n        });\n        return { 'criteria': criteria, 'index': ++index, 'value': value };\n      });\n\n      return baseSortBy(result, function(object, other) {\n        return compareMultiple(object, other, orders);\n      });\n    }\n\n    /**\n     * The base implementation of `_.pick` without support for individual\n     * property identifiers.\n     *\n     * @private\n     * @param {Object} object The source object.\n     * @param {string[]} paths The property paths to pick.\n     * @returns {Object} Returns the new object.\n     */\n    function basePick(object, paths) {\n      return basePickBy(object, paths, function(value, path) {\n        return hasIn(object, path);\n      });\n    }\n\n    /**\n     * The base implementation of  `_.pickBy` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Object} object The source object.\n     * @param {string[]} paths The property paths to pick.\n     * @param {Function} predicate The function invoked per property.\n     * @returns {Object} Returns the new object.\n     */\n    function basePickBy(object, paths, predicate) {\n      var index = -1,\n          length = paths.length,\n          result = {};\n\n      while (++index < length) {\n        var path = paths[index],\n            value = baseGet(object, path);\n\n        if (predicate(value, path)) {\n          baseSet(result, castPath(path, object), value);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * A specialized version of `baseProperty` which supports deep paths.\n     *\n     * @private\n     * @param {Array|string} path The path of the property to get.\n     * @returns {Function} Returns the new accessor function.\n     */\n    function basePropertyDeep(path) {\n      return function(object) {\n        return baseGet(object, path);\n      };\n    }\n\n    /**\n     * The base implementation of `_.pullAllBy` without support for iteratee\n     * shorthands.\n     *\n     * @private\n     * @param {Array} array The array to modify.\n     * @param {Array} values The values to remove.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns `array`.\n     */\n    function basePullAll(array, values, iteratee, comparator) {\n      var indexOf = comparator ? baseIndexOfWith : baseIndexOf,\n          index = -1,\n          length = values.length,\n          seen = array;\n\n      if (array === values) {\n        values = copyArray(values);\n      }\n      if (iteratee) {\n        seen = arrayMap(array, baseUnary(iteratee));\n      }\n      while (++index < length) {\n        var fromIndex = 0,\n            value = values[index],\n            computed = iteratee ? iteratee(value) : value;\n\n        while ((fromIndex = indexOf(seen, computed, fromIndex, comparator)) > -1) {\n          if (seen !== array) {\n            splice.call(seen, fromIndex, 1);\n          }\n          splice.call(array, fromIndex, 1);\n        }\n      }\n      return array;\n    }\n\n    /**\n     * The base implementation of `_.pullAt` without support for individual\n     * indexes or capturing the removed elements.\n     *\n     * @private\n     * @param {Array} array The array to modify.\n     * @param {number[]} indexes The indexes of elements to remove.\n     * @returns {Array} Returns `array`.\n     */\n    function basePullAt(array, indexes) {\n      var length = array ? indexes.length : 0,\n          lastIndex = length - 1;\n\n      while (length--) {\n        var index = indexes[length];\n        if (length == lastIndex || index !== previous) {\n          var previous = index;\n          if (isIndex(index)) {\n            splice.call(array, index, 1);\n          } else {\n            baseUnset(array, index);\n          }\n        }\n      }\n      return array;\n    }\n\n    /**\n     * The base implementation of `_.random` without support for returning\n     * floating-point numbers.\n     *\n     * @private\n     * @param {number} lower The lower bound.\n     * @param {number} upper The upper bound.\n     * @returns {number} Returns the random number.\n     */\n    function baseRandom(lower, upper) {\n      return lower + nativeFloor(nativeRandom() * (upper - lower + 1));\n    }\n\n    /**\n     * The base implementation of `_.range` and `_.rangeRight` which doesn't\n     * coerce arguments.\n     *\n     * @private\n     * @param {number} start The start of the range.\n     * @param {number} end The end of the range.\n     * @param {number} step The value to increment or decrement by.\n     * @param {boolean} [fromRight] Specify iterating from right to left.\n     * @returns {Array} Returns the range of numbers.\n     */\n    function baseRange(start, end, step, fromRight) {\n      var index = -1,\n          length = nativeMax(nativeCeil((end - start) / (step || 1)), 0),\n          result = Array(length);\n\n      while (length--) {\n        result[fromRight ? length : ++index] = start;\n        start += step;\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.repeat` which doesn't coerce arguments.\n     *\n     * @private\n     * @param {string} string The string to repeat.\n     * @param {number} n The number of times to repeat the string.\n     * @returns {string} Returns the repeated string.\n     */\n    function baseRepeat(string, n) {\n      var result = '';\n      if (!string || n < 1 || n > MAX_SAFE_INTEGER) {\n        return result;\n      }\n      // Leverage the exponentiation by squaring algorithm for a faster repeat.\n      // See https://en.wikipedia.org/wiki/Exponentiation_by_squaring for more details.\n      do {\n        if (n % 2) {\n          result += string;\n        }\n        n = nativeFloor(n / 2);\n        if (n) {\n          string += string;\n        }\n      } while (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     */\n    function baseRest(func, start) {\n      return setToString(overRest(func, start, identity), func + '');\n    }\n\n    /**\n     * The base implementation of `_.sample`.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to sample.\n     * @returns {*} Returns the random element.\n     */\n    function baseSample(collection) {\n      return arraySample(values(collection));\n    }\n\n    /**\n     * The base implementation of `_.sampleSize` without param guards.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to sample.\n     * @param {number} n The number of elements to sample.\n     * @returns {Array} Returns the random elements.\n     */\n    function baseSampleSize(collection, n) {\n      var array = values(collection);\n      return shuffleSelf(array, baseClamp(n, 0, array.length));\n    }\n\n    /**\n     * The base implementation of `_.set`.\n     *\n     * @private\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to set.\n     * @param {*} value The value to set.\n     * @param {Function} [customizer] The function to customize path creation.\n     * @returns {Object} Returns `object`.\n     */\n    function baseSet(object, path, value, customizer) {\n      if (!isObject(object)) {\n        return object;\n      }\n      path = castPath(path, object);\n\n      var index = -1,\n          length = path.length,\n          lastIndex = length - 1,\n          nested = object;\n\n      while (nested != null && ++index < length) {\n        var key = toKey(path[index]),\n            newValue = value;\n\n        if (key === '__proto__' || key === 'constructor' || key === 'prototype') {\n          return object;\n        }\n\n        if (index != lastIndex) {\n          var objValue = nested[key];\n          newValue = customizer ? customizer(objValue, key, nested) : undefined;\n          if (newValue === undefined) {\n            newValue = isObject(objValue)\n              ? objValue\n              : (isIndex(path[index + 1]) ? [] : {});\n          }\n        }\n        assignValue(nested, key, newValue);\n        nested = nested[key];\n      }\n      return object;\n    }\n\n    /**\n     * The base implementation of `setData` without support for hot loop shorting.\n     *\n     * @private\n     * @param {Function} func The function to associate metadata with.\n     * @param {*} data The metadata.\n     * @returns {Function} Returns `func`.\n     */\n    var baseSetData = !metaMap ? identity : function(func, data) {\n      metaMap.set(func, data);\n      return func;\n    };\n\n    /**\n     * The base implementation of `setToString` without support for hot loop shorting.\n     *\n     * @private\n     * @param {Function} func The function to modify.\n     * @param {Function} string The `toString` result.\n     * @returns {Function} Returns `func`.\n     */\n    var baseSetToString = !defineProperty ? identity : function(func, string) {\n      return defineProperty(func, 'toString', {\n        'configurable': true,\n        'enumerable': false,\n        'value': constant(string),\n        'writable': true\n      });\n    };\n\n    /**\n     * The base implementation of `_.shuffle`.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to shuffle.\n     * @returns {Array} Returns the new shuffled array.\n     */\n    function baseShuffle(collection) {\n      return shuffleSelf(values(collection));\n    }\n\n    /**\n     * The base implementation of `_.slice` without an iteratee call guard.\n     *\n     * @private\n     * @param {Array} array The array to slice.\n     * @param {number} [start=0] The start position.\n     * @param {number} [end=array.length] The end position.\n     * @returns {Array} Returns the slice of `array`.\n     */\n    function baseSlice(array, start, end) {\n      var index = -1,\n          length = array.length;\n\n      if (start < 0) {\n        start = -start > length ? 0 : (length + start);\n      }\n      end = end > length ? length : end;\n      if (end < 0) {\n        end += length;\n      }\n      length = start > end ? 0 : ((end - start) >>> 0);\n      start >>>= 0;\n\n      var result = Array(length);\n      while (++index < length) {\n        result[index] = array[index + start];\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.some` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} predicate The function invoked per iteration.\n     * @returns {boolean} Returns `true` if any element passes the predicate check,\n     *  else `false`.\n     */\n    function baseSome(collection, predicate) {\n      var result;\n\n      baseEach(collection, function(value, index, collection) {\n        result = predicate(value, index, collection);\n        return !result;\n      });\n      return !!result;\n    }\n\n    /**\n     * The base implementation of `_.sortedIndex` and `_.sortedLastIndex` which\n     * performs a binary search of `array` to determine the index at which `value`\n     * should be inserted into `array` in order to maintain its sort order.\n     *\n     * @private\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @param {boolean} [retHighest] Specify returning the highest qualified index.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     */\n    function baseSortedIndex(array, value, retHighest) {\n      var low = 0,\n          high = array == null ? low : array.length;\n\n      if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) {\n        while (low < high) {\n          var mid = (low + high) >>> 1,\n              computed = array[mid];\n\n          if (computed !== null && !isSymbol(computed) &&\n              (retHighest ? (computed <= value) : (computed < value))) {\n            low = mid + 1;\n          } else {\n            high = mid;\n          }\n        }\n        return high;\n      }\n      return baseSortedIndexBy(array, value, identity, retHighest);\n    }\n\n    /**\n     * The base implementation of `_.sortedIndexBy` and `_.sortedLastIndexBy`\n     * which invokes `iteratee` for `value` and each element of `array` to compute\n     * their sort ranking. The iteratee is invoked with one argument; (value).\n     *\n     * @private\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @param {Function} iteratee The iteratee invoked per element.\n     * @param {boolean} [retHighest] Specify returning the highest qualified index.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     */\n    function baseSortedIndexBy(array, value, iteratee, retHighest) {\n      var low = 0,\n          high = array == null ? 0 : array.length;\n      if (high === 0) {\n        return 0;\n      }\n\n      value = iteratee(value);\n      var valIsNaN = value !== value,\n          valIsNull = value === null,\n          valIsSymbol = isSymbol(value),\n          valIsUndefined = value === undefined;\n\n      while (low < high) {\n        var mid = nativeFloor((low + high) / 2),\n            computed = iteratee(array[mid]),\n            othIsDefined = computed !== undefined,\n            othIsNull = computed === null,\n            othIsReflexive = computed === computed,\n            othIsSymbol = isSymbol(computed);\n\n        if (valIsNaN) {\n          var setLow = retHighest || othIsReflexive;\n        } else if (valIsUndefined) {\n          setLow = othIsReflexive && (retHighest || othIsDefined);\n        } else if (valIsNull) {\n          setLow = othIsReflexive && othIsDefined && (retHighest || !othIsNull);\n        } else if (valIsSymbol) {\n          setLow = othIsReflexive && othIsDefined && !othIsNull && (retHighest || !othIsSymbol);\n        } else if (othIsNull || othIsSymbol) {\n          setLow = false;\n        } else {\n          setLow = retHighest ? (computed <= value) : (computed < value);\n        }\n        if (setLow) {\n          low = mid + 1;\n        } else {\n          high = mid;\n        }\n      }\n      return nativeMin(high, MAX_ARRAY_INDEX);\n    }\n\n    /**\n     * The base implementation of `_.sortedUniq` and `_.sortedUniqBy` without\n     * support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array} array The array to inspect.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @returns {Array} Returns the new duplicate free array.\n     */\n    function baseSortedUniq(array, iteratee) {\n      var index = -1,\n          length = array.length,\n          resIndex = 0,\n          result = [];\n\n      while (++index < length) {\n        var value = array[index],\n            computed = iteratee ? iteratee(value) : value;\n\n        if (!index || !eq(computed, seen)) {\n          var seen = computed;\n          result[resIndex++] = value === 0 ? 0 : value;\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.toNumber` which doesn't ensure correct\n     * conversions of binary, hexadecimal, or octal string values.\n     *\n     * @private\n     * @param {*} value The value to process.\n     * @returns {number} Returns the number.\n     */\n    function baseToNumber(value) {\n      if (typeof value == 'number') {\n        return value;\n      }\n      if (isSymbol(value)) {\n        return NAN;\n      }\n      return +value;\n    }\n\n    /**\n     * The base implementation of `_.toString` which doesn't convert nullish\n     * values to empty strings.\n     *\n     * @private\n     * @param {*} value The value to process.\n     * @returns {string} Returns the string.\n     */\n    function baseToString(value) {\n      // Exit early for strings to avoid a performance hit in some environments.\n      if (typeof value == 'string') {\n        return value;\n      }\n      if (isArray(value)) {\n        // Recursively convert values (susceptible to call stack limits).\n        return arrayMap(value, baseToString) + '';\n      }\n      if (isSymbol(value)) {\n        return symbolToString ? symbolToString.call(value) : '';\n      }\n      var result = (value + '');\n      return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n    }\n\n    /**\n     * The base implementation of `_.uniqBy` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array} array The array to inspect.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new duplicate free array.\n     */\n    function baseUniq(array, iteratee, comparator) {\n      var index = -1,\n          includes = arrayIncludes,\n          length = array.length,\n          isCommon = true,\n          result = [],\n          seen = result;\n\n      if (comparator) {\n        isCommon = false;\n        includes = arrayIncludesWith;\n      }\n      else if (length >= LARGE_ARRAY_SIZE) {\n        var set = iteratee ? null : createSet(array);\n        if (set) {\n          return setToArray(set);\n        }\n        isCommon = false;\n        includes = cacheHas;\n        seen = new SetCache;\n      }\n      else {\n        seen = iteratee ? [] : result;\n      }\n      outer:\n      while (++index < length) {\n        var value = array[index],\n            computed = iteratee ? iteratee(value) : value;\n\n        value = (comparator || value !== 0) ? value : 0;\n        if (isCommon && computed === computed) {\n          var seenIndex = seen.length;\n          while (seenIndex--) {\n            if (seen[seenIndex] === computed) {\n              continue outer;\n            }\n          }\n          if (iteratee) {\n            seen.push(computed);\n          }\n          result.push(value);\n        }\n        else if (!includes(seen, computed, comparator)) {\n          if (seen !== result) {\n            seen.push(computed);\n          }\n          result.push(value);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.unset`.\n     *\n     * @private\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The property path to unset.\n     * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n     */\n    function baseUnset(object, path) {\n      path = castPath(path, object);\n      object = parent(object, path);\n      return object == null || delete object[toKey(last(path))];\n    }\n\n    /**\n     * The base implementation of `_.update`.\n     *\n     * @private\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to update.\n     * @param {Function} updater The function to produce the updated value.\n     * @param {Function} [customizer] The function to customize path creation.\n     * @returns {Object} Returns `object`.\n     */\n    function baseUpdate(object, path, updater, customizer) {\n      return baseSet(object, path, updater(baseGet(object, path)), customizer);\n    }\n\n    /**\n     * The base implementation of methods like `_.dropWhile` and `_.takeWhile`\n     * without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array} array The array to query.\n     * @param {Function} predicate The function invoked per iteration.\n     * @param {boolean} [isDrop] Specify dropping elements instead of taking them.\n     * @param {boolean} [fromRight] Specify iterating from right to left.\n     * @returns {Array} Returns the slice of `array`.\n     */\n    function baseWhile(array, predicate, isDrop, fromRight) {\n      var length = array.length,\n          index = fromRight ? length : -1;\n\n      while ((fromRight ? index-- : ++index < length) &&\n        predicate(array[index], index, array)) {}\n\n      return isDrop\n        ? baseSlice(array, (fromRight ? 0 : index), (fromRight ? index + 1 : length))\n        : baseSlice(array, (fromRight ? index + 1 : 0), (fromRight ? length : index));\n    }\n\n    /**\n     * The base implementation of `wrapperValue` which returns the result of\n     * performing a sequence of actions on the unwrapped `value`, where each\n     * successive action is supplied the return value of the previous.\n     *\n     * @private\n     * @param {*} value The unwrapped value.\n     * @param {Array} actions Actions to perform to resolve the unwrapped value.\n     * @returns {*} Returns the resolved value.\n     */\n    function baseWrapperValue(value, actions) {\n      var result = value;\n      if (result instanceof LazyWrapper) {\n        result = result.value();\n      }\n      return arrayReduce(actions, function(result, action) {\n        return action.func.apply(action.thisArg, arrayPush([result], action.args));\n      }, result);\n    }\n\n    /**\n     * The base implementation of methods like `_.xor`, without support for\n     * iteratee shorthands, that accepts an array of arrays to inspect.\n     *\n     * @private\n     * @param {Array} arrays The arrays to inspect.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of values.\n     */\n    function baseXor(arrays, iteratee, comparator) {\n      var length = arrays.length;\n      if (length < 2) {\n        return length ? baseUniq(arrays[0]) : [];\n      }\n      var index = -1,\n          result = Array(length);\n\n      while (++index < length) {\n        var array = arrays[index],\n            othIndex = -1;\n\n        while (++othIndex < length) {\n          if (othIndex != index) {\n            result[index] = baseDifference(result[index] || array, arrays[othIndex], iteratee, comparator);\n          }\n        }\n      }\n      return baseUniq(baseFlatten(result, 1), iteratee, comparator);\n    }\n\n    /**\n     * This base implementation of `_.zipObject` which assigns values using `assignFunc`.\n     *\n     * @private\n     * @param {Array} props The property identifiers.\n     * @param {Array} values The property values.\n     * @param {Function} assignFunc The function to assign values.\n     * @returns {Object} Returns the new object.\n     */\n    function baseZipObject(props, values, assignFunc) {\n      var index = -1,\n          length = props.length,\n          valsLength = values.length,\n          result = {};\n\n      while (++index < length) {\n        var value = index < valsLength ? values[index] : undefined;\n        assignFunc(result, props[index], value);\n      }\n      return result;\n    }\n\n    /**\n     * Casts `value` to an empty array if it's not an array like object.\n     *\n     * @private\n     * @param {*} value The value to inspect.\n     * @returns {Array|Object} Returns the cast array-like object.\n     */\n    function castArrayLikeObject(value) {\n      return isArrayLikeObject(value) ? value : [];\n    }\n\n    /**\n     * Casts `value` to `identity` if it's not a function.\n     *\n     * @private\n     * @param {*} value The value to inspect.\n     * @returns {Function} Returns cast function.\n     */\n    function castFunction(value) {\n      return typeof value == 'function' ? value : identity;\n    }\n\n    /**\n     * Casts `value` to a path array if it's not one.\n     *\n     * @private\n     * @param {*} value The value to inspect.\n     * @param {Object} [object] The object to query keys on.\n     * @returns {Array} Returns the cast property path array.\n     */\n    function castPath(value, object) {\n      if (isArray(value)) {\n        return value;\n      }\n      return isKey(value, object) ? [value] : stringToPath(toString(value));\n    }\n\n    /**\n     * A `baseRest` alias which can be replaced with `identity` by module\n     * replacement plugins.\n     *\n     * @private\n     * @type {Function}\n     * @param {Function} func The function to apply a rest parameter to.\n     * @returns {Function} Returns the new function.\n     */\n    var castRest = baseRest;\n\n    /**\n     * Casts `array` to a slice if it's needed.\n     *\n     * @private\n     * @param {Array} array The array to inspect.\n     * @param {number} start The start position.\n     * @param {number} [end=array.length] The end position.\n     * @returns {Array} Returns the cast slice.\n     */\n    function castSlice(array, start, end) {\n      var length = array.length;\n      end = end === undefined ? length : end;\n      return (!start && end >= length) ? array : baseSlice(array, start, end);\n    }\n\n    /**\n     * A simple wrapper around the global [`clearTimeout`](https://mdn.io/clearTimeout).\n     *\n     * @private\n     * @param {number|Object} id The timer id or timeout object of the timer to clear.\n     */\n    var clearTimeout = ctxClearTimeout || function(id) {\n      return root.clearTimeout(id);\n    };\n\n    /**\n     * Creates a clone of  `buffer`.\n     *\n     * @private\n     * @param {Buffer} buffer The buffer to clone.\n     * @param {boolean} [isDeep] Specify a deep clone.\n     * @returns {Buffer} Returns the cloned buffer.\n     */\n    function cloneBuffer(buffer, isDeep) {\n      if (isDeep) {\n        return buffer.slice();\n      }\n      var length = buffer.length,\n          result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);\n\n      buffer.copy(result);\n      return result;\n    }\n\n    /**\n     * Creates a clone of `arrayBuffer`.\n     *\n     * @private\n     * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n     * @returns {ArrayBuffer} Returns the cloned array buffer.\n     */\n    function cloneArrayBuffer(arrayBuffer) {\n      var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n      new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n      return result;\n    }\n\n    /**\n     * Creates a clone of `dataView`.\n     *\n     * @private\n     * @param {Object} dataView The data view to clone.\n     * @param {boolean} [isDeep] Specify a deep clone.\n     * @returns {Object} Returns the cloned data view.\n     */\n    function cloneDataView(dataView, isDeep) {\n      var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;\n      return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);\n    }\n\n    /**\n     * Creates a clone of `regexp`.\n     *\n     * @private\n     * @param {Object} regexp The regexp to clone.\n     * @returns {Object} Returns the cloned regexp.\n     */\n    function cloneRegExp(regexp) {\n      var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));\n      result.lastIndex = regexp.lastIndex;\n      return result;\n    }\n\n    /**\n     * Creates a clone of the `symbol` object.\n     *\n     * @private\n     * @param {Object} symbol The symbol object to clone.\n     * @returns {Object} Returns the cloned symbol object.\n     */\n    function cloneSymbol(symbol) {\n      return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};\n    }\n\n    /**\n     * Creates a clone of `typedArray`.\n     *\n     * @private\n     * @param {Object} typedArray The typed array to clone.\n     * @param {boolean} [isDeep] Specify a deep clone.\n     * @returns {Object} Returns the cloned typed array.\n     */\n    function cloneTypedArray(typedArray, isDeep) {\n      var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n      return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n    }\n\n    /**\n     * Compares values to sort them in ascending order.\n     *\n     * @private\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {number} Returns the sort order indicator for `value`.\n     */\n    function compareAscending(value, other) {\n      if (value !== other) {\n        var valIsDefined = value !== undefined,\n            valIsNull = value === null,\n            valIsReflexive = value === value,\n            valIsSymbol = isSymbol(value);\n\n        var othIsDefined = other !== undefined,\n            othIsNull = other === null,\n            othIsReflexive = other === other,\n            othIsSymbol = isSymbol(other);\n\n        if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) ||\n            (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) ||\n            (valIsNull && othIsDefined && othIsReflexive) ||\n            (!valIsDefined && othIsReflexive) ||\n            !valIsReflexive) {\n          return 1;\n        }\n        if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) ||\n            (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) ||\n            (othIsNull && valIsDefined && valIsReflexive) ||\n            (!othIsDefined && valIsReflexive) ||\n            !othIsReflexive) {\n          return -1;\n        }\n      }\n      return 0;\n    }\n\n    /**\n     * Used by `_.orderBy` to compare multiple properties of a value to another\n     * and stable sort them.\n     *\n     * If `orders` is unspecified, all values are sorted in ascending order. Otherwise,\n     * specify an order of \"desc\" for descending or \"asc\" for ascending sort order\n     * of corresponding values.\n     *\n     * @private\n     * @param {Object} object The object to compare.\n     * @param {Object} other The other object to compare.\n     * @param {boolean[]|string[]} orders The order to sort by for each property.\n     * @returns {number} Returns the sort order indicator for `object`.\n     */\n    function compareMultiple(object, other, orders) {\n      var index = -1,\n          objCriteria = object.criteria,\n          othCriteria = other.criteria,\n          length = objCriteria.length,\n          ordersLength = orders.length;\n\n      while (++index < length) {\n        var result = compareAscending(objCriteria[index], othCriteria[index]);\n        if (result) {\n          if (index >= ordersLength) {\n            return result;\n          }\n          var order = orders[index];\n          return result * (order == 'desc' ? -1 : 1);\n        }\n      }\n      // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications\n      // that causes it, under certain circumstances, to provide the same value for\n      // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247\n      // for more details.\n      //\n      // This also ensures a stable sort in V8 and other engines.\n      // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details.\n      return object.index - other.index;\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     */\n    function 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     */\n    function 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     */\n    function 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     * Copies properties of `source` to `object`.\n     *\n     * @private\n     * @param {Object} source The object to copy properties from.\n     * @param {Array} props The property identifiers to copy.\n     * @param {Object} [object={}] The object to copy properties to.\n     * @param {Function} [customizer] The function to customize copied values.\n     * @returns {Object} Returns `object`.\n     */\n    function copyObject(source, props, object, customizer) {\n      var isNew = !object;\n      object || (object = {});\n\n      var index = -1,\n          length = props.length;\n\n      while (++index < length) {\n        var key = props[index];\n\n        var newValue = customizer\n          ? customizer(object[key], source[key], key, object, source)\n          : undefined;\n\n        if (newValue === undefined) {\n          newValue = source[key];\n        }\n        if (isNew) {\n          baseAssignValue(object, key, newValue);\n        } else {\n          assignValue(object, key, newValue);\n        }\n      }\n      return object;\n    }\n\n    /**\n     * Copies own symbols of `source` to `object`.\n     *\n     * @private\n     * @param {Object} source The object to copy symbols from.\n     * @param {Object} [object={}] The object to copy symbols to.\n     * @returns {Object} Returns `object`.\n     */\n    function copySymbols(source, object) {\n      return copyObject(source, getSymbols(source), object);\n    }\n\n    /**\n     * Copies own and inherited symbols of `source` to `object`.\n     *\n     * @private\n     * @param {Object} source The object to copy symbols from.\n     * @param {Object} [object={}] The object to copy symbols to.\n     * @returns {Object} Returns `object`.\n     */\n    function copySymbolsIn(source, object) {\n      return copyObject(source, getSymbolsIn(source), object);\n    }\n\n    /**\n     * Creates a function like `_.groupBy`.\n     *\n     * @private\n     * @param {Function} setter The function to set accumulator values.\n     * @param {Function} [initializer] The accumulator object initializer.\n     * @returns {Function} Returns the new aggregator function.\n     */\n    function createAggregator(setter, initializer) {\n      return function(collection, iteratee) {\n        var func = isArray(collection) ? arrayAggregator : baseAggregator,\n            accumulator = initializer ? initializer() : {};\n\n        return func(collection, setter, getIteratee(iteratee, 2), accumulator);\n      };\n    }\n\n    /**\n     * Creates a function like `_.assign`.\n     *\n     * @private\n     * @param {Function} assigner The function to assign values.\n     * @returns {Function} Returns the new assigner function.\n     */\n    function createAssigner(assigner) {\n      return baseRest(function(object, sources) {\n        var index = -1,\n            length = sources.length,\n            customizer = length > 1 ? sources[length - 1] : undefined,\n            guard = length > 2 ? sources[2] : undefined;\n\n        customizer = (assigner.length > 3 && typeof customizer == 'function')\n          ? (length--, customizer)\n          : undefined;\n\n        if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n          customizer = length < 3 ? undefined : customizer;\n          length = 1;\n        }\n        object = Object(object);\n        while (++index < length) {\n          var source = sources[index];\n          if (source) {\n            assigner(object, source, index, customizer);\n          }\n        }\n        return object;\n      });\n    }\n\n    /**\n     * Creates a `baseEach` or `baseEachRight` function.\n     *\n     * @private\n     * @param {Function} eachFunc The function to iterate over a collection.\n     * @param {boolean} [fromRight] Specify iterating from right to left.\n     * @returns {Function} Returns the new base function.\n     */\n    function createBaseEach(eachFunc, fromRight) {\n      return function(collection, iteratee) {\n        if (collection == null) {\n          return collection;\n        }\n        if (!isArrayLike(collection)) {\n          return eachFunc(collection, iteratee);\n        }\n        var length = collection.length,\n            index = fromRight ? length : -1,\n            iterable = Object(collection);\n\n        while ((fromRight ? index-- : ++index < length)) {\n          if (iteratee(iterable[index], index, iterable) === false) {\n            break;\n          }\n        }\n        return collection;\n      };\n    }\n\n    /**\n     * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n     *\n     * @private\n     * @param {boolean} [fromRight] Specify iterating from right to left.\n     * @returns {Function} Returns the new base function.\n     */\n    function createBaseFor(fromRight) {\n      return function(object, iteratee, keysFunc) {\n        var index = -1,\n            iterable = Object(object),\n            props = keysFunc(object),\n            length = props.length;\n\n        while (length--) {\n          var key = props[fromRight ? length : ++index];\n          if (iteratee(iterable[key], key, iterable) === false) {\n            break;\n          }\n        }\n        return object;\n      };\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     */\n    function createBind(func, bitmask, thisArg) {\n      var isBind = bitmask & WRAP_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 like `_.lowerFirst`.\n     *\n     * @private\n     * @param {string} methodName The name of the `String` case method to use.\n     * @returns {Function} Returns the new case function.\n     */\n    function createCaseFirst(methodName) {\n      return function(string) {\n        string = toString(string);\n\n        var strSymbols = hasUnicode(string)\n          ? stringToArray(string)\n          : undefined;\n\n        var chr = strSymbols\n          ? strSymbols[0]\n          : string.charAt(0);\n\n        var trailing = strSymbols\n          ? castSlice(strSymbols, 1).join('')\n          : string.slice(1);\n\n        return chr[methodName]() + trailing;\n      };\n    }\n\n    /**\n     * Creates a function like `_.camelCase`.\n     *\n     * @private\n     * @param {Function} callback The function to combine each word.\n     * @returns {Function} Returns the new compounder function.\n     */\n    function createCompounder(callback) {\n      return function(string) {\n        return arrayReduce(words(deburr(string).replace(reApos, '')), callback, '');\n      };\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     */\n    function 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     */\n    function 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 `_.find` or `_.findLast` function.\n     *\n     * @private\n     * @param {Function} findIndexFunc The function to find the collection index.\n     * @returns {Function} Returns the new find function.\n     */\n    function createFind(findIndexFunc) {\n      return function(collection, predicate, fromIndex) {\n        var iterable = Object(collection);\n        if (!isArrayLike(collection)) {\n          var iteratee = getIteratee(predicate, 3);\n          collection = keys(collection);\n          predicate = function(key) { return iteratee(iterable[key], key, iterable); };\n        }\n        var index = findIndexFunc(collection, predicate, fromIndex);\n        return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined;\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     */\n    function createFlow(fromRight) {\n      return flatRest(function(funcs) {\n        var length = funcs.length,\n            index = length,\n            prereq = LodashWrapper.prototype.thru;\n\n        if (fromRight) {\n          funcs.reverse();\n        }\n        while (index--) {\n          var func = funcs[index];\n          if (typeof func != 'function') {\n            throw new TypeError(FUNC_ERROR_TEXT);\n          }\n          if (prereq && !wrapper && getFuncName(func) == 'wrapper') {\n            var wrapper = new LodashWrapper([], true);\n          }\n        }\n        index = wrapper ? index : length;\n        while (++index < length) {\n          func = funcs[index];\n\n          var funcName = getFuncName(func),\n              data = funcName == 'wrapper' ? getData(func) : undefined;\n\n          if (data && isLaziable(data[0]) &&\n                data[1] == (WRAP_ARY_FLAG | WRAP_CURRY_FLAG | WRAP_PARTIAL_FLAG | WRAP_REARG_FLAG) &&\n                !data[4].length && data[9] == 1\n              ) {\n            wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]);\n          } else {\n            wrapper = (func.length == 1 && isLaziable(func))\n              ? wrapper[funcName]()\n              : wrapper.thru(func);\n          }\n        }\n        return function() {\n          var args = arguments,\n              value = args[0];\n\n          if (wrapper && args.length == 1 && isArray(value)) {\n            return wrapper.plant(value).value();\n          }\n          var index = 0,\n              result = length ? funcs[index].apply(this, args) : value;\n\n          while (++index < length) {\n            result = funcs[index].call(this, result);\n          }\n          return result;\n        };\n      });\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     */\n    function createHybrid(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) {\n      var isAry = bitmask & WRAP_ARY_FLAG,\n          isBind = bitmask & WRAP_BIND_FLAG,\n          isBindKey = bitmask & WRAP_BIND_KEY_FLAG,\n          isCurried = bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG),\n          isFlip = bitmask & WRAP_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 like `_.invertBy`.\n     *\n     * @private\n     * @param {Function} setter The function to set accumulator values.\n     * @param {Function} toIteratee The function to resolve iteratees.\n     * @returns {Function} Returns the new inverter function.\n     */\n    function createInverter(setter, toIteratee) {\n      return function(object, iteratee) {\n        return baseInverter(object, setter, toIteratee(iteratee), {});\n      };\n    }\n\n    /**\n     * Creates a function that performs a mathematical operation on two values.\n     *\n     * @private\n     * @param {Function} operator The function to perform the operation.\n     * @param {number} [defaultValue] The value used for `undefined` arguments.\n     * @returns {Function} Returns the new mathematical operation function.\n     */\n    function createMathOperation(operator, defaultValue) {\n      return function(value, other) {\n        var result;\n        if (value === undefined && other === undefined) {\n          return defaultValue;\n        }\n        if (value !== undefined) {\n          result = value;\n        }\n        if (other !== undefined) {\n          if (result === undefined) {\n            return other;\n          }\n          if (typeof value == 'string' || typeof other == 'string') {\n            value = baseToString(value);\n            other = baseToString(other);\n          } else {\n            value = baseToNumber(value);\n            other = baseToNumber(other);\n          }\n          result = operator(value, other);\n        }\n        return result;\n      };\n    }\n\n    /**\n     * Creates a function like `_.over`.\n     *\n     * @private\n     * @param {Function} arrayFunc The function to iterate over iteratees.\n     * @returns {Function} Returns the new over function.\n     */\n    function createOver(arrayFunc) {\n      return flatRest(function(iteratees) {\n        iteratees = arrayMap(iteratees, baseUnary(getIteratee()));\n        return baseRest(function(args) {\n          var thisArg = this;\n          return arrayFunc(iteratees, function(iteratee) {\n            return apply(iteratee, thisArg, args);\n          });\n        });\n      });\n    }\n\n    /**\n     * Creates the padding for `string` based on `length`. The `chars` string\n     * is truncated if the number of characters exceeds `length`.\n     *\n     * @private\n     * @param {number} length The padding length.\n     * @param {string} [chars=' '] The string used as padding.\n     * @returns {string} Returns the padding for `string`.\n     */\n    function createPadding(length, chars) {\n      chars = chars === undefined ? ' ' : baseToString(chars);\n\n      var charsLength = chars.length;\n      if (charsLength < 2) {\n        return charsLength ? baseRepeat(chars, length) : chars;\n      }\n      var result = baseRepeat(chars, nativeCeil(length / stringSize(chars)));\n      return hasUnicode(chars)\n        ? castSlice(stringToArray(result), 0, length).join('')\n        : result.slice(0, length);\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     */\n    function createPartial(func, bitmask, thisArg, partials) {\n      var isBind = bitmask & WRAP_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 `_.range` or `_.rangeRight` function.\n     *\n     * @private\n     * @param {boolean} [fromRight] Specify iterating from right to left.\n     * @returns {Function} Returns the new range function.\n     */\n    function createRange(fromRight) {\n      return function(start, end, step) {\n        if (step && typeof step != 'number' && isIterateeCall(start, end, step)) {\n          end = step = undefined;\n        }\n        // Ensure the sign of `-0` is preserved.\n        start = toFinite(start);\n        if (end === undefined) {\n          end = start;\n          start = 0;\n        } else {\n          end = toFinite(end);\n        }\n        step = step === undefined ? (start < end ? 1 : -1) : toFinite(step);\n        return baseRange(start, end, step, fromRight);\n      };\n    }\n\n    /**\n     * Creates a function that performs a relational operation on two values.\n     *\n     * @private\n     * @param {Function} operator The function to perform the operation.\n     * @returns {Function} Returns the new relational operation function.\n     */\n    function createRelationalOperation(operator) {\n      return function(value, other) {\n        if (!(typeof value == 'string' && typeof other == 'string')) {\n          value = toNumber(value);\n          other = toNumber(other);\n        }\n        return operator(value, other);\n      };\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     */\n    function createRecurry(func, bitmask, wrapFunc, placeholder, thisArg, partials, holders, argPos, ary, arity) {\n      var isCurry = bitmask & WRAP_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 ? WRAP_PARTIAL_FLAG : WRAP_PARTIAL_RIGHT_FLAG);\n      bitmask &= ~(isCurry ? WRAP_PARTIAL_RIGHT_FLAG : WRAP_PARTIAL_FLAG);\n\n      if (!(bitmask & WRAP_CURRY_BOUND_FLAG)) {\n        bitmask &= ~(WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG);\n      }\n      var newData = [\n        func, bitmask, thisArg, newPartials, newHolders, newPartialsRight,\n        newHoldersRight, argPos, ary, arity\n      ];\n\n      var result = wrapFunc.apply(undefined, newData);\n      if (isLaziable(func)) {\n        setData(result, newData);\n      }\n      result.placeholder = placeholder;\n      return setWrapToString(result, func, bitmask);\n    }\n\n    /**\n     * Creates a function like `_.round`.\n     *\n     * @private\n     * @param {string} methodName The name of the `Math` method to use when rounding.\n     * @returns {Function} Returns the new round function.\n     */\n    function createRound(methodName) {\n      var func = Math[methodName];\n      return function(number, precision) {\n        number = toNumber(number);\n        precision = precision == null ? 0 : nativeMin(toInteger(precision), 292);\n        if (precision && nativeIsFinite(number)) {\n          // Shift with exponential notation to avoid floating-point issues.\n          // See [MDN](https://mdn.io/round#Examples) for more details.\n          var pair = (toString(number) + 'e').split('e'),\n              value = func(pair[0] + 'e' + (+pair[1] + precision));\n\n          pair = (toString(value) + 'e').split('e');\n          return +(pair[0] + 'e' + (+pair[1] - precision));\n        }\n        return func(number);\n      };\n    }\n\n    /**\n     * Creates a set object of `values`.\n     *\n     * @private\n     * @param {Array} values The values to add to the set.\n     * @returns {Object} Returns the new set.\n     */\n    var createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) {\n      return new Set(values);\n    };\n\n    /**\n     * Creates a `_.toPairs` or `_.toPairsIn` function.\n     *\n     * @private\n     * @param {Function} keysFunc The function to get the keys of a given object.\n     * @returns {Function} Returns the new pairs function.\n     */\n    function createToPairs(keysFunc) {\n      return function(object) {\n        var tag = getTag(object);\n        if (tag == mapTag) {\n          return mapToArray(object);\n        }\n        if (tag == setTag) {\n          return setToPairs(object);\n        }\n        return baseToPairs(object, keysFunc(object));\n      };\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     *    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     */\n    function createWrap(func, bitmask, thisArg, partials, holders, argPos, ary, arity) {\n      var isBindKey = bitmask & WRAP_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 &= ~(WRAP_PARTIAL_FLAG | WRAP_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 & WRAP_PARTIAL_RIGHT_FLAG) {\n        var partialsRight = partials,\n            holdersRight = holders;\n\n        partials = holders = undefined;\n      }\n      var data = isBindKey ? undefined : getData(func);\n\n      var newData = [\n        func, bitmask, thisArg, partials, holders, partialsRight, holdersRight,\n        argPos, ary, arity\n      ];\n\n      if (data) {\n        mergeData(newData, data);\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] === undefined\n        ? (isBindKey ? 0 : func.length)\n        : nativeMax(newData[9] - length, 0);\n\n      if (!arity && bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG)) {\n        bitmask &= ~(WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG);\n      }\n      if (!bitmask || bitmask == WRAP_BIND_FLAG) {\n        var result = createBind(func, bitmask, thisArg);\n      } else if (bitmask == WRAP_CURRY_FLAG || bitmask == WRAP_CURRY_RIGHT_FLAG) {\n        result = createCurry(func, bitmask, arity);\n      } else if ((bitmask == WRAP_PARTIAL_FLAG || bitmask == (WRAP_BIND_FLAG | WRAP_PARTIAL_FLAG)) && !holders.length) {\n        result = createPartial(func, bitmask, thisArg, partials);\n      } else {\n        result = createHybrid.apply(undefined, newData);\n      }\n      var setter = data ? baseSetData : setData;\n      return setWrapToString(setter(result, newData), func, bitmask);\n    }\n\n    /**\n     * Used by `_.defaults` to customize its `_.assignIn` use to assign properties\n     * of source objects to the destination object for all destination properties\n     * that resolve to `undefined`.\n     *\n     * @private\n     * @param {*} objValue The destination value.\n     * @param {*} srcValue The source value.\n     * @param {string} key The key of the property to assign.\n     * @param {Object} object The parent object of `objValue`.\n     * @returns {*} Returns the value to assign.\n     */\n    function customDefaultsAssignIn(objValue, srcValue, key, object) {\n      if (objValue === undefined ||\n          (eq(objValue, objectProto[key]) && !hasOwnProperty.call(object, key))) {\n        return srcValue;\n      }\n      return objValue;\n    }\n\n    /**\n     * Used by `_.defaultsDeep` to customize its `_.merge` use to merge source\n     * objects into destination objects that are passed thru.\n     *\n     * @private\n     * @param {*} objValue The destination value.\n     * @param {*} srcValue The source value.\n     * @param {string} key The key of the property to merge.\n     * @param {Object} object The parent object of `objValue`.\n     * @param {Object} source The parent object of `srcValue`.\n     * @param {Object} [stack] Tracks traversed source values and their merged\n     *  counterparts.\n     * @returns {*} Returns the value to assign.\n     */\n    function customDefaultsMerge(objValue, srcValue, key, object, source, stack) {\n      if (isObject(objValue) && isObject(srcValue)) {\n        // Recursively merge objects and arrays (susceptible to call stack limits).\n        stack.set(srcValue, objValue);\n        baseMerge(objValue, srcValue, undefined, customDefaultsMerge, stack);\n        stack['delete'](srcValue);\n      }\n      return objValue;\n    }\n\n    /**\n     * Used by `_.omit` to customize its `_.cloneDeep` use to only clone plain\n     * objects.\n     *\n     * @private\n     * @param {*} value The value to inspect.\n     * @param {string} key The key of the property to inspect.\n     * @returns {*} Returns the uncloned value or `undefined` to defer cloning to `_.cloneDeep`.\n     */\n    function customOmitClone(value) {\n      return isPlainObject(value) ? undefined : value;\n    }\n\n    /**\n     * A specialized version of `baseIsEqualDeep` for arrays with support for\n     * partial deep comparisons.\n     *\n     * @private\n     * @param {Array} array The array to compare.\n     * @param {Array} other The other array to compare.\n     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n     * @param {Function} customizer The function to customize comparisons.\n     * @param {Function} equalFunc The function to determine equivalents of values.\n     * @param {Object} stack Tracks traversed `array` and `other` objects.\n     * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n     */\n    function equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n      var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n          arrLength = array.length,\n          othLength = other.length;\n\n      if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n        return false;\n      }\n      // Check that cyclic values are equal.\n      var arrStacked = stack.get(array);\n      var othStacked = stack.get(other);\n      if (arrStacked && othStacked) {\n        return arrStacked == other && othStacked == array;\n      }\n      var index = -1,\n          result = true,\n          seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;\n\n      stack.set(array, other);\n      stack.set(other, array);\n\n      // Ignore non-index properties.\n      while (++index < arrLength) {\n        var arrValue = array[index],\n            othValue = other[index];\n\n        if (customizer) {\n          var compared = isPartial\n            ? customizer(othValue, arrValue, index, other, array, stack)\n            : customizer(arrValue, othValue, index, array, other, stack);\n        }\n        if (compared !== undefined) {\n          if (compared) {\n            continue;\n          }\n          result = false;\n          break;\n        }\n        // Recursively compare arrays (susceptible to call stack limits).\n        if (seen) {\n          if (!arraySome(other, function(othValue, othIndex) {\n                if (!cacheHas(seen, othIndex) &&\n                    (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n                  return seen.push(othIndex);\n                }\n              })) {\n            result = false;\n            break;\n          }\n        } else if (!(\n              arrValue === othValue ||\n                equalFunc(arrValue, othValue, bitmask, customizer, stack)\n            )) {\n          result = false;\n          break;\n        }\n      }\n      stack['delete'](array);\n      stack['delete'](other);\n      return result;\n    }\n\n    /**\n     * A specialized version of `baseIsEqualDeep` for comparing objects of\n     * the same `toStringTag`.\n     *\n     * **Note:** This function only supports comparing values with tags of\n     * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n     *\n     * @private\n     * @param {Object} object The object to compare.\n     * @param {Object} other The other object to compare.\n     * @param {string} tag The `toStringTag` of the objects to compare.\n     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n     * @param {Function} customizer The function to customize comparisons.\n     * @param {Function} equalFunc The function to determine equivalents of values.\n     * @param {Object} stack Tracks traversed `object` and `other` objects.\n     * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n     */\n    function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n      switch (tag) {\n        case dataViewTag:\n          if ((object.byteLength != other.byteLength) ||\n              (object.byteOffset != other.byteOffset)) {\n            return false;\n          }\n          object = object.buffer;\n          other = other.buffer;\n\n        case arrayBufferTag:\n          if ((object.byteLength != other.byteLength) ||\n              !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n            return false;\n          }\n          return true;\n\n        case boolTag:\n        case dateTag:\n        case numberTag:\n          // Coerce booleans to `1` or `0` and dates to milliseconds.\n          // Invalid dates are coerced to `NaN`.\n          return eq(+object, +other);\n\n        case errorTag:\n          return object.name == other.name && object.message == other.message;\n\n        case regexpTag:\n        case stringTag:\n          // Coerce regexes to strings and treat strings, primitives and objects,\n          // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n          // for more details.\n          return object == (other + '');\n\n        case mapTag:\n          var convert = mapToArray;\n\n        case setTag:\n          var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n          convert || (convert = setToArray);\n\n          if (object.size != other.size && !isPartial) {\n            return false;\n          }\n          // Assume cyclic values are equal.\n          var stacked = stack.get(object);\n          if (stacked) {\n            return stacked == other;\n          }\n          bitmask |= COMPARE_UNORDERED_FLAG;\n\n          // Recursively compare objects (susceptible to call stack limits).\n          stack.set(object, other);\n          var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n          stack['delete'](object);\n          return result;\n\n        case symbolTag:\n          if (symbolValueOf) {\n            return symbolValueOf.call(object) == symbolValueOf.call(other);\n          }\n      }\n      return false;\n    }\n\n    /**\n     * A specialized version of `baseIsEqualDeep` for objects with support for\n     * partial deep comparisons.\n     *\n     * @private\n     * @param {Object} object The object to compare.\n     * @param {Object} other The other object to compare.\n     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n     * @param {Function} customizer The function to customize comparisons.\n     * @param {Function} equalFunc The function to determine equivalents of values.\n     * @param {Object} stack Tracks traversed `object` and `other` objects.\n     * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n     */\n    function equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n      var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n          objProps = getAllKeys(object),\n          objLength = objProps.length,\n          othProps = getAllKeys(other),\n          othLength = othProps.length;\n\n      if (objLength != othLength && !isPartial) {\n        return false;\n      }\n      var index = objLength;\n      while (index--) {\n        var key = objProps[index];\n        if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n          return false;\n        }\n      }\n      // Check that cyclic values are equal.\n      var objStacked = stack.get(object);\n      var othStacked = stack.get(other);\n      if (objStacked && othStacked) {\n        return objStacked == other && othStacked == object;\n      }\n      var result = true;\n      stack.set(object, other);\n      stack.set(other, object);\n\n      var skipCtor = isPartial;\n      while (++index < objLength) {\n        key = objProps[index];\n        var objValue = object[key],\n            othValue = other[key];\n\n        if (customizer) {\n          var compared = isPartial\n            ? customizer(othValue, objValue, key, other, object, stack)\n            : customizer(objValue, othValue, key, object, other, stack);\n        }\n        // Recursively compare objects (susceptible to call stack limits).\n        if (!(compared === undefined\n              ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))\n              : compared\n            )) {\n          result = false;\n          break;\n        }\n        skipCtor || (skipCtor = key == 'constructor');\n      }\n      if (result && !skipCtor) {\n        var objCtor = object.constructor,\n            othCtor = other.constructor;\n\n        // Non `Object` object instances with different constructors are not equal.\n        if (objCtor != othCtor &&\n            ('constructor' in object && 'constructor' in other) &&\n            !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n              typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n          result = false;\n        }\n      }\n      stack['delete'](object);\n      stack['delete'](other);\n      return result;\n    }\n\n    /**\n     * A specialized version of `baseRest` which flattens the rest array.\n     *\n     * @private\n     * @param {Function} func The function to apply a rest parameter to.\n     * @returns {Function} Returns the new function.\n     */\n    function flatRest(func) {\n      return setToString(overRest(func, undefined, flatten), func + '');\n    }\n\n    /**\n     * Creates an array of own enumerable property names and symbols of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names and symbols.\n     */\n    function getAllKeys(object) {\n      return baseGetAllKeys(object, keys, getSymbols);\n    }\n\n    /**\n     * Creates an array of own and inherited enumerable property names and\n     * symbols of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names and symbols.\n     */\n    function getAllKeysIn(object) {\n      return baseGetAllKeys(object, keysIn, getSymbolsIn);\n    }\n\n    /**\n     * Gets metadata for `func`.\n     *\n     * @private\n     * @param {Function} func The function to query.\n     * @returns {*} Returns the metadata for `func`.\n     */\n    var getData = !metaMap ? noop : function(func) {\n      return metaMap.get(func);\n    };\n\n    /**\n     * Gets the name of `func`.\n     *\n     * @private\n     * @param {Function} func The function to query.\n     * @returns {string} Returns the function name.\n     */\n    function getFuncName(func) {\n      var result = (func.name + ''),\n          array = realNames[result],\n          length = hasOwnProperty.call(realNames, result) ? array.length : 0;\n\n      while (length--) {\n        var data = array[length],\n            otherFunc = data.func;\n        if (otherFunc == null || otherFunc == func) {\n          return data.name;\n        }\n      }\n      return result;\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     */\n    function getHolder(func) {\n      var object = hasOwnProperty.call(lodash, 'placeholder') ? lodash : func;\n      return object.placeholder;\n    }\n\n    /**\n     * Gets the appropriate \"iteratee\" function. If `_.iteratee` is customized,\n     * this function returns the custom method, otherwise it returns `baseIteratee`.\n     * If arguments are provided, the chosen function is invoked with them and\n     * its result is returned.\n     *\n     * @private\n     * @param {*} [value] The value to convert to an iteratee.\n     * @param {number} [arity] The arity of the created iteratee.\n     * @returns {Function} Returns the chosen function or its result.\n     */\n    function getIteratee() {\n      var result = lodash.iteratee || iteratee;\n      result = result === iteratee ? baseIteratee : result;\n      return arguments.length ? result(arguments[0], arguments[1]) : result;\n    }\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     */\n    function getMapData(map, key) {\n      var data = map.__data__;\n      return isKeyable(key)\n        ? data[typeof key == 'string' ? 'string' : 'hash']\n        : data.map;\n    }\n\n    /**\n     * Gets the property names, values, and compare flags of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the match data of `object`.\n     */\n    function getMatchData(object) {\n      var result = keys(object),\n          length = result.length;\n\n      while (length--) {\n        var key = result[length],\n            value = object[key];\n\n        result[length] = [key, value, isStrictComparable(value)];\n      }\n      return result;\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     */\n    function getNative(object, key) {\n      var value = getValue(object, key);\n      return baseIsNative(value) ? value : undefined;\n    }\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     */\n    function 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\n    /**\n     * Creates an array of the own enumerable symbols of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of symbols.\n     */\n    var getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n      if (object == null) {\n        return [];\n      }\n      object = Object(object);\n      return arrayFilter(nativeGetSymbols(object), function(symbol) {\n        return propertyIsEnumerable.call(object, symbol);\n      });\n    };\n\n    /**\n     * Creates an array of the own and inherited enumerable symbols of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of symbols.\n     */\n    var getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {\n      var result = [];\n      while (object) {\n        arrayPush(result, getSymbols(object));\n        object = getPrototype(object);\n      }\n      return result;\n    };\n\n    /**\n     * Gets the `toStringTag` of `value`.\n     *\n     * @private\n     * @param {*} value The value to query.\n     * @returns {string} Returns the `toStringTag`.\n     */\n    var getTag = baseGetTag;\n\n    // Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\n    if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n        (Map && getTag(new Map) != mapTag) ||\n        (Promise && getTag(Promise.resolve()) != promiseTag) ||\n        (Set && getTag(new Set) != setTag) ||\n        (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n      getTag = function(value) {\n        var result = baseGetTag(value),\n            Ctor = result == objectTag ? value.constructor : undefined,\n            ctorString = Ctor ? toSource(Ctor) : '';\n\n        if (ctorString) {\n          switch (ctorString) {\n            case dataViewCtorString: return dataViewTag;\n            case mapCtorString: return mapTag;\n            case promiseCtorString: return promiseTag;\n            case setCtorString: return setTag;\n            case weakMapCtorString: return weakMapTag;\n          }\n        }\n        return result;\n      };\n    }\n\n    /**\n     * Gets the view, applying any `transforms` to the `start` and `end` positions.\n     *\n     * @private\n     * @param {number} start The start of the view.\n     * @param {number} end The end of the view.\n     * @param {Array} transforms The transformations to apply to the view.\n     * @returns {Object} Returns an object containing the `start` and `end`\n     *  positions of the view.\n     */\n    function getView(start, end, transforms) {\n      var index = -1,\n          length = transforms.length;\n\n      while (++index < length) {\n        var data = transforms[index],\n            size = data.size;\n\n        switch (data.type) {\n          case 'drop':      start += size; break;\n          case 'dropRight': end -= size; break;\n          case 'take':      end = nativeMin(end, start + size); break;\n          case 'takeRight': start = nativeMax(start, end - size); break;\n        }\n      }\n      return { 'start': start, 'end': end };\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     */\n    function getWrapDetails(source) {\n      var match = source.match(reWrapDetails);\n      return match ? match[1].split(reSplitDetails) : [];\n    }\n\n    /**\n     * Checks if `path` exists on `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path to check.\n     * @param {Function} hasFunc The function to check properties.\n     * @returns {boolean} Returns `true` if `path` exists, else `false`.\n     */\n    function hasPath(object, path, hasFunc) {\n      path = castPath(path, object);\n\n      var index = -1,\n          length = path.length,\n          result = false;\n\n      while (++index < length) {\n        var key = toKey(path[index]);\n        if (!(result = object != null && hasFunc(object, key))) {\n          break;\n        }\n        object = object[key];\n      }\n      if (result || ++index != length) {\n        return result;\n      }\n      length = object == null ? 0 : object.length;\n      return !!length && isLength(length) && isIndex(key, length) &&\n        (isArray(object) || isArguments(object));\n    }\n\n    /**\n     * Initializes an array clone.\n     *\n     * @private\n     * @param {Array} array The array to clone.\n     * @returns {Array} Returns the initialized clone.\n     */\n    function initCloneArray(array) {\n      var length = array.length,\n          result = new array.constructor(length);\n\n      // Add properties assigned by `RegExp#exec`.\n      if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {\n        result.index = array.index;\n        result.input = array.input;\n      }\n      return result;\n    }\n\n    /**\n     * Initializes an object clone.\n     *\n     * @private\n     * @param {Object} object The object to clone.\n     * @returns {Object} Returns the initialized clone.\n     */\n    function initCloneObject(object) {\n      return (typeof object.constructor == 'function' && !isPrototype(object))\n        ? baseCreate(getPrototype(object))\n        : {};\n    }\n\n    /**\n     * Initializes an object clone based on its `toStringTag`.\n     *\n     * **Note:** This function only supports cloning values with tags of\n     * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`.\n     *\n     * @private\n     * @param {Object} object The object to clone.\n     * @param {string} tag The `toStringTag` of the object to clone.\n     * @param {boolean} [isDeep] Specify a deep clone.\n     * @returns {Object} Returns the initialized clone.\n     */\n    function initCloneByTag(object, tag, isDeep) {\n      var Ctor = object.constructor;\n      switch (tag) {\n        case arrayBufferTag:\n          return cloneArrayBuffer(object);\n\n        case boolTag:\n        case dateTag:\n          return new Ctor(+object);\n\n        case dataViewTag:\n          return cloneDataView(object, isDeep);\n\n        case float32Tag: case float64Tag:\n        case int8Tag: case int16Tag: case int32Tag:\n        case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:\n          return cloneTypedArray(object, isDeep);\n\n        case mapTag:\n          return new Ctor;\n\n        case numberTag:\n        case stringTag:\n          return new Ctor(object);\n\n        case regexpTag:\n          return cloneRegExp(object);\n\n        case setTag:\n          return new Ctor;\n\n        case symbolTag:\n          return cloneSymbol(object);\n      }\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     */\n    function insertWrapDetails(source, details) {\n      var length = details.length;\n      if (!length) {\n        return source;\n      }\n      var lastIndex = length - 1;\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 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     */\n    function isFlattenable(value) {\n      return isArray(value) || isArguments(value) ||\n        !!(spreadableSymbol && value && value[spreadableSymbol]);\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     */\n    function isIndex(value, length) {\n      var type = typeof value;\n      length = length == null ? MAX_SAFE_INTEGER : length;\n\n      return !!length &&\n        (type == 'number' ||\n          (type != 'symbol' && reIsUint.test(value))) &&\n            (value > -1 && value % 1 == 0 && value < length);\n    }\n\n    /**\n     * Checks if the given arguments are from an iteratee call.\n     *\n     * @private\n     * @param {*} value The potential iteratee value argument.\n     * @param {*} index The potential iteratee index or key argument.\n     * @param {*} object The potential iteratee object argument.\n     * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n     *  else `false`.\n     */\n    function isIterateeCall(value, index, object) {\n      if (!isObject(object)) {\n        return false;\n      }\n      var type = typeof index;\n      if (type == 'number'\n            ? (isArrayLike(object) && isIndex(index, object.length))\n            : (type == 'string' && index in object)\n          ) {\n        return eq(object[index], value);\n      }\n      return false;\n    }\n\n    /**\n     * Checks if `value` is a property name and not a property path.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @param {Object} [object] The object to query keys on.\n     * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n     */\n    function isKey(value, object) {\n      if (isArray(value)) {\n        return false;\n      }\n      var type = typeof value;\n      if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n          value == null || isSymbol(value)) {\n        return true;\n      }\n      return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n        (object != null && value in Object(object));\n    }\n\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     */\n    function 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\n    /**\n     * Checks if `func` has a lazy counterpart.\n     *\n     * @private\n     * @param {Function} func The function to check.\n     * @returns {boolean} Returns `true` if `func` has a lazy counterpart,\n     *  else `false`.\n     */\n    function isLaziable(func) {\n      var funcName = getFuncName(func),\n          other = lodash[funcName];\n\n      if (typeof other != 'function' || !(funcName in LazyWrapper.prototype)) {\n        return false;\n      }\n      if (func === other) {\n        return true;\n      }\n      var data = getData(other);\n      return !!data && func === data[0];\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     */\n    function isMasked(func) {\n      return !!maskSrcKey && (maskSrcKey in func);\n    }\n\n    /**\n     * Checks if `func` is capable of being masked.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `func` is maskable, else `false`.\n     */\n    var isMaskable = coreJsData ? isFunction : stubFalse;\n\n    /**\n     * Checks if `value` is likely a prototype object.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n     */\n    function isPrototype(value) {\n      var Ctor = value && value.constructor,\n          proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n      return value === proto;\n    }\n\n    /**\n     * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` if suitable for strict\n     *  equality comparisons, else `false`.\n     */\n    function isStrictComparable(value) {\n      return value === value && !isObject(value);\n    }\n\n    /**\n     * A specialized version of `matchesProperty` for source values suitable\n     * for strict equality comparisons, i.e. `===`.\n     *\n     * @private\n     * @param {string} key The key of the property to get.\n     * @param {*} srcValue The value to match.\n     * @returns {Function} Returns the new spec function.\n     */\n    function matchesStrictComparable(key, srcValue) {\n      return function(object) {\n        if (object == null) {\n          return false;\n        }\n        return object[key] === srcValue &&\n          (srcValue !== undefined || (key in Object(object)));\n      };\n    }\n\n    /**\n     * A specialized version of `_.memoize` which clears the memoized function's\n     * cache when it exceeds `MAX_MEMOIZE_SIZE`.\n     *\n     * @private\n     * @param {Function} func The function to have its output memoized.\n     * @returns {Function} Returns the new memoized function.\n     */\n    function memoizeCapped(func) {\n      var result = memoize(func, function(key) {\n        if (cache.size === MAX_MEMOIZE_SIZE) {\n          cache.clear();\n        }\n        return key;\n      });\n\n      var cache = result.cache;\n      return result;\n    }\n\n    /**\n     * Merges the function metadata of `source` into `data`.\n     *\n     * Merging metadata reduces the number of wrappers used to invoke a function.\n     * This is possible because methods like `_.bind`, `_.curry`, and `_.partial`\n     * may be applied regardless of execution order. Methods like `_.ary` and\n     * `_.rearg` modify function arguments, making the order in which they are\n     * executed important, preventing the merging of metadata. However, we make\n     * an exception for a safe combined case where curried functions have `_.ary`\n     * and or `_.rearg` applied.\n     *\n     * @private\n     * @param {Array} data The destination metadata.\n     * @param {Array} source The source metadata.\n     * @returns {Array} Returns `data`.\n     */\n    function mergeData(data, source) {\n      var bitmask = data[1],\n          srcBitmask = source[1],\n          newBitmask = bitmask | srcBitmask,\n          isCommon = newBitmask < (WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG | WRAP_ARY_FLAG);\n\n      var isCombo =\n        ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_CURRY_FLAG)) ||\n        ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_REARG_FLAG) && (data[7].length <= source[8])) ||\n        ((srcBitmask == (WRAP_ARY_FLAG | WRAP_REARG_FLAG)) && (source[7].length <= source[8]) && (bitmask == WRAP_CURRY_FLAG));\n\n      // Exit early if metadata can't be merged.\n      if (!(isCommon || isCombo)) {\n        return data;\n      }\n      // Use source `thisArg` if available.\n      if (srcBitmask & WRAP_BIND_FLAG) {\n        data[2] = source[2];\n        // Set when currying a bound function.\n        newBitmask |= bitmask & WRAP_BIND_FLAG ? 0 : WRAP_CURRY_BOUND_FLAG;\n      }\n      // Compose partial arguments.\n      var value = source[3];\n      if (value) {\n        var partials = data[3];\n        data[3] = partials ? composeArgs(partials, value, source[4]) : value;\n        data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : source[4];\n      }\n      // Compose partial right arguments.\n      value = source[5];\n      if (value) {\n        partials = data[5];\n        data[5] = partials ? composeArgsRight(partials, value, source[6]) : value;\n        data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : source[6];\n      }\n      // Use source `argPos` if available.\n      value = source[7];\n      if (value) {\n        data[7] = value;\n      }\n      // Use source `ary` if it's smaller.\n      if (srcBitmask & WRAP_ARY_FLAG) {\n        data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]);\n      }\n      // Use source `arity` if one is not provided.\n      if (data[9] == null) {\n        data[9] = source[9];\n      }\n      // Use source `func` and merge bitmasks.\n      data[0] = source[0];\n      data[1] = newBitmask;\n\n      return data;\n    }\n\n    /**\n     * This function is like\n     * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n     * except that it includes inherited enumerable properties.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names.\n     */\n    function nativeKeysIn(object) {\n      var result = [];\n      if (object != null) {\n        for (var key in Object(object)) {\n          result.push(key);\n        }\n      }\n      return result;\n    }\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     */\n    function objectToString(value) {\n      return nativeObjectToString.call(value);\n    }\n\n    /**\n     * A specialized version of `baseRest` which transforms the rest array.\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     * @param {Function} transform The rest array transform.\n     * @returns {Function} Returns the new function.\n     */\n    function overRest(func, start, transform) {\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] = transform(array);\n        return apply(func, this, otherArgs);\n      };\n    }\n\n    /**\n     * Gets the parent value at `path` of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {Array} path The path to get the parent value of.\n     * @returns {*} Returns the parent value.\n     */\n    function parent(object, path) {\n      return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1));\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     */\n    function 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     * Gets the value at `key`, unless `key` is \"__proto__\" or \"constructor\".\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     */\n    function safeGet(object, key) {\n      if (key === 'constructor' && typeof object[key] === 'function') {\n        return;\n      }\n\n      if (key == '__proto__') {\n        return;\n      }\n\n      return object[key];\n    }\n\n    /**\n     * Sets metadata for `func`.\n     *\n     * **Note:** If this function becomes hot, i.e. is invoked a lot in a short\n     * period of time, it will trip its breaker and transition to an identity\n     * function to avoid garbage collection pauses in V8. See\n     * [V8 issue 2070](https://bugs.chromium.org/p/v8/issues/detail?id=2070)\n     * for more details.\n     *\n     * @private\n     * @param {Function} func The function to associate metadata with.\n     * @param {*} data The metadata.\n     * @returns {Function} Returns `func`.\n     */\n    var setData = shortOut(baseSetData);\n\n    /**\n     * A simple wrapper around the global [`setTimeout`](https://mdn.io/setTimeout).\n     *\n     * @private\n     * @param {Function} func The function to delay.\n     * @param {number} wait The number of milliseconds to delay invocation.\n     * @returns {number|Object} Returns the timer id or timeout object.\n     */\n    var setTimeout = ctxSetTimeout || function(func, wait) {\n      return root.setTimeout(func, wait);\n    };\n\n    /**\n     * Sets the `toString` method of `func` to return `string`.\n     *\n     * @private\n     * @param {Function} func The function to modify.\n     * @param {Function} string The `toString` result.\n     * @returns {Function} Returns `func`.\n     */\n    var setToString = shortOut(baseSetToString);\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     */\n    function setWrapToString(wrapper, reference, bitmask) {\n      var source = (reference + '');\n      return setToString(wrapper, insertWrapDetails(source, updateWrapDetails(getWrapDetails(source), bitmask)));\n    }\n\n    /**\n     * Creates a function that'll short out and invoke `identity` instead\n     * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`\n     * milliseconds.\n     *\n     * @private\n     * @param {Function} func The function to restrict.\n     * @returns {Function} Returns the new shortable function.\n     */\n    function shortOut(func) {\n      var count = 0,\n          lastCalled = 0;\n\n      return function() {\n        var stamp = nativeNow(),\n            remaining = HOT_SPAN - (stamp - lastCalled);\n\n        lastCalled = stamp;\n        if (remaining > 0) {\n          if (++count >= HOT_COUNT) {\n            return arguments[0];\n          }\n        } else {\n          count = 0;\n        }\n        return func.apply(undefined, arguments);\n      };\n    }\n\n    /**\n     * A specialized version of `_.shuffle` which mutates and sets the size of `array`.\n     *\n     * @private\n     * @param {Array} array The array to shuffle.\n     * @param {number} [size=array.length] The size of `array`.\n     * @returns {Array} Returns `array`.\n     */\n    function shuffleSelf(array, size) {\n      var index = -1,\n          length = array.length,\n          lastIndex = length - 1;\n\n      size = size === undefined ? length : size;\n      while (++index < size) {\n        var rand = baseRandom(index, lastIndex),\n            value = array[rand];\n\n        array[rand] = array[index];\n        array[index] = value;\n      }\n      array.length = size;\n      return array;\n    }\n\n    /**\n     * Converts `string` to a property path array.\n     *\n     * @private\n     * @param {string} string The string to convert.\n     * @returns {Array} Returns the property path array.\n     */\n    var stringToPath = memoizeCapped(function(string) {\n      var result = [];\n      if (string.charCodeAt(0) === 46 /* . */) {\n        result.push('');\n      }\n      string.replace(rePropName, function(match, number, quote, subString) {\n        result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));\n      });\n      return result;\n    });\n\n    /**\n     * Converts `value` to a string key if it's not a string or symbol.\n     *\n     * @private\n     * @param {*} value The value to inspect.\n     * @returns {string|symbol} Returns the key.\n     */\n    function toKey(value) {\n      if (typeof value == 'string' || isSymbol(value)) {\n        return value;\n      }\n      var result = (value + '');\n      return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n    }\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     */\n    function 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     */\n    function 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 clone of `wrapper`.\n     *\n     * @private\n     * @param {Object} wrapper The wrapper to clone.\n     * @returns {Object} Returns the cloned wrapper.\n     */\n    function wrapperClone(wrapper) {\n      if (wrapper instanceof LazyWrapper) {\n        return wrapper.clone();\n      }\n      var result = new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__);\n      result.__actions__ = copyArray(wrapper.__actions__);\n      result.__index__  = wrapper.__index__;\n      result.__values__ = wrapper.__values__;\n      return result;\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates an array of elements split into groups the length of `size`.\n     * If `array` can't be split evenly, the final chunk will be the remaining\n     * elements.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to process.\n     * @param {number} [size=1] The length of each chunk\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the new array of chunks.\n     * @example\n     *\n     * _.chunk(['a', 'b', 'c', 'd'], 2);\n     * // => [['a', 'b'], ['c', 'd']]\n     *\n     * _.chunk(['a', 'b', 'c', 'd'], 3);\n     * // => [['a', 'b', 'c'], ['d']]\n     */\n    function chunk(array, size, guard) {\n      if ((guard ? isIterateeCall(array, size, guard) : size === undefined)) {\n        size = 1;\n      } else {\n        size = nativeMax(toInteger(size), 0);\n      }\n      var length = array == null ? 0 : array.length;\n      if (!length || size < 1) {\n        return [];\n      }\n      var index = 0,\n          resIndex = 0,\n          result = Array(nativeCeil(length / size));\n\n      while (index < length) {\n        result[resIndex++] = baseSlice(array, index, (index += size));\n      }\n      return result;\n    }\n\n    /**\n     * Creates an array with all falsey values removed. The values `false`, `null`,\n     * `0`, `\"\"`, `undefined`, and `NaN` are falsey.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to compact.\n     * @returns {Array} Returns the new array of filtered values.\n     * @example\n     *\n     * _.compact([0, 1, false, 2, '', 3]);\n     * // => [1, 2, 3]\n     */\n    function compact(array) {\n      var index = -1,\n          length = array == null ? 0 : array.length,\n          resIndex = 0,\n          result = [];\n\n      while (++index < length) {\n        var value = array[index];\n        if (value) {\n          result[resIndex++] = value;\n        }\n      }\n      return result;\n    }\n\n    /**\n     * Creates a new array concatenating `array` with any additional arrays\n     * and/or values.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to concatenate.\n     * @param {...*} [values] The values to concatenate.\n     * @returns {Array} Returns the new concatenated array.\n     * @example\n     *\n     * var array = [1];\n     * var other = _.concat(array, 2, [3], [[4]]);\n     *\n     * console.log(other);\n     * // => [1, 2, 3, [4]]\n     *\n     * console.log(array);\n     * // => [1]\n     */\n    function concat() {\n      var length = arguments.length;\n      if (!length) {\n        return [];\n      }\n      var args = Array(length - 1),\n          array = arguments[0],\n          index = length;\n\n      while (index--) {\n        args[index - 1] = arguments[index];\n      }\n      return arrayPush(isArray(array) ? copyArray(array) : [array], baseFlatten(args, 1));\n    }\n\n    /**\n     * Creates an array of `array` values not included in the other given arrays\n     * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons. The order and references of result values are\n     * determined by the first array.\n     *\n     * **Note:** Unlike `_.pullAll`, this method returns a new array.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {...Array} [values] The values to exclude.\n     * @returns {Array} Returns the new array of filtered values.\n     * @see _.without, _.xor\n     * @example\n     *\n     * _.difference([2, 1], [2, 3]);\n     * // => [1]\n     */\n    var difference = baseRest(function(array, values) {\n      return isArrayLikeObject(array)\n        ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true))\n        : [];\n    });\n\n    /**\n     * This method is like `_.difference` except that it accepts `iteratee` which\n     * is invoked for each element of `array` and `values` to generate the criterion\n     * by which they're compared. The order and references of result values are\n     * determined by the first array. The iteratee is invoked with one argument:\n     * (value).\n     *\n     * **Note:** Unlike `_.pullAllBy`, this method returns a new array.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {...Array} [values] The values to exclude.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Array} Returns the new array of filtered values.\n     * @example\n     *\n     * _.differenceBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n     * // => [1.2]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.differenceBy([{ 'x': 2 }, { 'x': 1 }], [{ 'x': 1 }], 'x');\n     * // => [{ 'x': 2 }]\n     */\n    var differenceBy = baseRest(function(array, values) {\n      var iteratee = last(values);\n      if (isArrayLikeObject(iteratee)) {\n        iteratee = undefined;\n      }\n      return isArrayLikeObject(array)\n        ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), getIteratee(iteratee, 2))\n        : [];\n    });\n\n    /**\n     * This method is like `_.difference` except that it accepts `comparator`\n     * which is invoked to compare elements of `array` to `values`. The order and\n     * references of result values are determined by the first array. The comparator\n     * is invoked with two arguments: (arrVal, othVal).\n     *\n     * **Note:** Unlike `_.pullAllWith`, this method returns a new array.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {...Array} [values] The values to exclude.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of filtered values.\n     * @example\n     *\n     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n     *\n     * _.differenceWith(objects, [{ 'x': 1, 'y': 2 }], _.isEqual);\n     * // => [{ 'x': 2, 'y': 1 }]\n     */\n    var differenceWith = baseRest(function(array, values) {\n      var comparator = last(values);\n      if (isArrayLikeObject(comparator)) {\n        comparator = undefined;\n      }\n      return isArrayLikeObject(array)\n        ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), undefined, comparator)\n        : [];\n    });\n\n    /**\n     * Creates a slice of `array` with `n` elements dropped from the beginning.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.5.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {number} [n=1] The number of elements to drop.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.drop([1, 2, 3]);\n     * // => [2, 3]\n     *\n     * _.drop([1, 2, 3], 2);\n     * // => [3]\n     *\n     * _.drop([1, 2, 3], 5);\n     * // => []\n     *\n     * _.drop([1, 2, 3], 0);\n     * // => [1, 2, 3]\n     */\n    function drop(array, n, guard) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return [];\n      }\n      n = (guard || n === undefined) ? 1 : toInteger(n);\n      return baseSlice(array, n < 0 ? 0 : n, length);\n    }\n\n    /**\n     * Creates a slice of `array` with `n` elements dropped from the end.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {number} [n=1] The number of elements to drop.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.dropRight([1, 2, 3]);\n     * // => [1, 2]\n     *\n     * _.dropRight([1, 2, 3], 2);\n     * // => [1]\n     *\n     * _.dropRight([1, 2, 3], 5);\n     * // => []\n     *\n     * _.dropRight([1, 2, 3], 0);\n     * // => [1, 2, 3]\n     */\n    function dropRight(array, n, guard) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return [];\n      }\n      n = (guard || n === undefined) ? 1 : toInteger(n);\n      n = length - n;\n      return baseSlice(array, 0, n < 0 ? 0 : n);\n    }\n\n    /**\n     * Creates a slice of `array` excluding elements dropped from the end.\n     * Elements are dropped until `predicate` returns falsey. The predicate is\n     * invoked with three arguments: (value, index, array).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': true },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': false }\n     * ];\n     *\n     * _.dropRightWhile(users, function(o) { return !o.active; });\n     * // => objects for ['barney']\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.dropRightWhile(users, { 'user': 'pebbles', 'active': false });\n     * // => objects for ['barney', 'fred']\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.dropRightWhile(users, ['active', false]);\n     * // => objects for ['barney']\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.dropRightWhile(users, 'active');\n     * // => objects for ['barney', 'fred', 'pebbles']\n     */\n    function dropRightWhile(array, predicate) {\n      return (array && array.length)\n        ? baseWhile(array, getIteratee(predicate, 3), true, true)\n        : [];\n    }\n\n    /**\n     * Creates a slice of `array` excluding elements dropped from the beginning.\n     * Elements are dropped until `predicate` returns falsey. The predicate is\n     * invoked with three arguments: (value, index, array).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': false },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': true }\n     * ];\n     *\n     * _.dropWhile(users, function(o) { return !o.active; });\n     * // => objects for ['pebbles']\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.dropWhile(users, { 'user': 'barney', 'active': false });\n     * // => objects for ['fred', 'pebbles']\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.dropWhile(users, ['active', false]);\n     * // => objects for ['pebbles']\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.dropWhile(users, 'active');\n     * // => objects for ['barney', 'fred', 'pebbles']\n     */\n    function dropWhile(array, predicate) {\n      return (array && array.length)\n        ? baseWhile(array, getIteratee(predicate, 3), true)\n        : [];\n    }\n\n    /**\n     * Fills elements of `array` with `value` from `start` up to, but not\n     * including, `end`.\n     *\n     * **Note:** This method mutates `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.2.0\n     * @category Array\n     * @param {Array} array The array to fill.\n     * @param {*} value The value to fill `array` with.\n     * @param {number} [start=0] The start position.\n     * @param {number} [end=array.length] The end position.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = [1, 2, 3];\n     *\n     * _.fill(array, 'a');\n     * console.log(array);\n     * // => ['a', 'a', 'a']\n     *\n     * _.fill(Array(3), 2);\n     * // => [2, 2, 2]\n     *\n     * _.fill([4, 6, 8, 10], '*', 1, 3);\n     * // => [4, '*', '*', 10]\n     */\n    function fill(array, value, start, end) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return [];\n      }\n      if (start && typeof start != 'number' && isIterateeCall(array, value, start)) {\n        start = 0;\n        end = length;\n      }\n      return baseFill(array, value, start, end);\n    }\n\n    /**\n     * This method is like `_.find` except that it returns the index of the first\n     * element `predicate` returns truthy for instead of the element itself.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.1.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @param {number} [fromIndex=0] The index to search from.\n     * @returns {number} Returns the index of the found element, else `-1`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': false },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': true }\n     * ];\n     *\n     * _.findIndex(users, function(o) { return o.user == 'barney'; });\n     * // => 0\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.findIndex(users, { 'user': 'fred', 'active': false });\n     * // => 1\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.findIndex(users, ['active', false]);\n     * // => 0\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.findIndex(users, 'active');\n     * // => 2\n     */\n    function findIndex(array, predicate, fromIndex) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return -1;\n      }\n      var index = fromIndex == null ? 0 : toInteger(fromIndex);\n      if (index < 0) {\n        index = nativeMax(length + index, 0);\n      }\n      return baseFindIndex(array, getIteratee(predicate, 3), index);\n    }\n\n    /**\n     * This method is like `_.findIndex` except that it iterates over elements\n     * of `collection` from right to left.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @param {number} [fromIndex=array.length-1] The index to search from.\n     * @returns {number} Returns the index of the found element, else `-1`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': true },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': false }\n     * ];\n     *\n     * _.findLastIndex(users, function(o) { return o.user == 'pebbles'; });\n     * // => 2\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.findLastIndex(users, { 'user': 'barney', 'active': true });\n     * // => 0\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.findLastIndex(users, ['active', false]);\n     * // => 2\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.findLastIndex(users, 'active');\n     * // => 0\n     */\n    function findLastIndex(array, predicate, fromIndex) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return -1;\n      }\n      var index = length - 1;\n      if (fromIndex !== undefined) {\n        index = toInteger(fromIndex);\n        index = fromIndex < 0\n          ? nativeMax(length + index, 0)\n          : nativeMin(index, length - 1);\n      }\n      return baseFindIndex(array, getIteratee(predicate, 3), index, true);\n    }\n\n    /**\n     * Flattens `array` a single level deep.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to flatten.\n     * @returns {Array} Returns the new flattened array.\n     * @example\n     *\n     * _.flatten([1, [2, [3, [4]], 5]]);\n     * // => [1, 2, [3, [4]], 5]\n     */\n    function flatten(array) {\n      var length = array == null ? 0 : array.length;\n      return length ? baseFlatten(array, 1) : [];\n    }\n\n    /**\n     * Recursively flattens `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to flatten.\n     * @returns {Array} Returns the new flattened array.\n     * @example\n     *\n     * _.flattenDeep([1, [2, [3, [4]], 5]]);\n     * // => [1, 2, 3, 4, 5]\n     */\n    function flattenDeep(array) {\n      var length = array == null ? 0 : array.length;\n      return length ? baseFlatten(array, INFINITY) : [];\n    }\n\n    /**\n     * Recursively flatten `array` up to `depth` times.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.4.0\n     * @category Array\n     * @param {Array} array The array to flatten.\n     * @param {number} [depth=1] The maximum recursion depth.\n     * @returns {Array} Returns the new flattened array.\n     * @example\n     *\n     * var array = [1, [2, [3, [4]], 5]];\n     *\n     * _.flattenDepth(array, 1);\n     * // => [1, 2, [3, [4]], 5]\n     *\n     * _.flattenDepth(array, 2);\n     * // => [1, 2, 3, [4], 5]\n     */\n    function flattenDepth(array, depth) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return [];\n      }\n      depth = depth === undefined ? 1 : toInteger(depth);\n      return baseFlatten(array, depth);\n    }\n\n    /**\n     * The inverse of `_.toPairs`; this method returns an object composed\n     * from key-value `pairs`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} pairs The key-value pairs.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * _.fromPairs([['a', 1], ['b', 2]]);\n     * // => { 'a': 1, 'b': 2 }\n     */\n    function fromPairs(pairs) {\n      var index = -1,\n          length = pairs == null ? 0 : pairs.length,\n          result = {};\n\n      while (++index < length) {\n        var pair = pairs[index];\n        result[pair[0]] = pair[1];\n      }\n      return result;\n    }\n\n    /**\n     * Gets the first element of `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @alias first\n     * @category Array\n     * @param {Array} array The array to query.\n     * @returns {*} Returns the first element of `array`.\n     * @example\n     *\n     * _.head([1, 2, 3]);\n     * // => 1\n     *\n     * _.head([]);\n     * // => undefined\n     */\n    function head(array) {\n      return (array && array.length) ? array[0] : undefined;\n    }\n\n    /**\n     * Gets the index at which the first occurrence of `value` is found in `array`\n     * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons. If `fromIndex` is negative, it's used as the\n     * offset from the end of `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {*} value The value to search for.\n     * @param {number} [fromIndex=0] The index to search from.\n     * @returns {number} Returns the index of the matched value, else `-1`.\n     * @example\n     *\n     * _.indexOf([1, 2, 1, 2], 2);\n     * // => 1\n     *\n     * // Search from the `fromIndex`.\n     * _.indexOf([1, 2, 1, 2], 2, 2);\n     * // => 3\n     */\n    function indexOf(array, value, fromIndex) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return -1;\n      }\n      var index = fromIndex == null ? 0 : toInteger(fromIndex);\n      if (index < 0) {\n        index = nativeMax(length + index, 0);\n      }\n      return baseIndexOf(array, value, index);\n    }\n\n    /**\n     * Gets all but the last element of `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.initial([1, 2, 3]);\n     * // => [1, 2]\n     */\n    function initial(array) {\n      var length = array == null ? 0 : array.length;\n      return length ? baseSlice(array, 0, -1) : [];\n    }\n\n    /**\n     * Creates an array of unique values that are included in all given arrays\n     * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons. The order and references of result values are\n     * determined by the first array.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @returns {Array} Returns the new array of intersecting values.\n     * @example\n     *\n     * _.intersection([2, 1], [2, 3]);\n     * // => [2]\n     */\n    var intersection = baseRest(function(arrays) {\n      var mapped = arrayMap(arrays, castArrayLikeObject);\n      return (mapped.length && mapped[0] === arrays[0])\n        ? baseIntersection(mapped)\n        : [];\n    });\n\n    /**\n     * This method is like `_.intersection` except that it accepts `iteratee`\n     * which is invoked for each element of each `arrays` to generate the criterion\n     * by which they're compared. The order and references of result values are\n     * determined by the first array. The iteratee is invoked with one argument:\n     * (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Array} Returns the new array of intersecting values.\n     * @example\n     *\n     * _.intersectionBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n     * // => [2.1]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.intersectionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n     * // => [{ 'x': 1 }]\n     */\n    var intersectionBy = baseRest(function(arrays) {\n      var iteratee = last(arrays),\n          mapped = arrayMap(arrays, castArrayLikeObject);\n\n      if (iteratee === last(mapped)) {\n        iteratee = undefined;\n      } else {\n        mapped.pop();\n      }\n      return (mapped.length && mapped[0] === arrays[0])\n        ? baseIntersection(mapped, getIteratee(iteratee, 2))\n        : [];\n    });\n\n    /**\n     * This method is like `_.intersection` except that it accepts `comparator`\n     * which is invoked to compare elements of `arrays`. The order and references\n     * of result values are determined by the first array. The comparator is\n     * invoked with two arguments: (arrVal, othVal).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of intersecting values.\n     * @example\n     *\n     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n     * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n     *\n     * _.intersectionWith(objects, others, _.isEqual);\n     * // => [{ 'x': 1, 'y': 2 }]\n     */\n    var intersectionWith = baseRest(function(arrays) {\n      var comparator = last(arrays),\n          mapped = arrayMap(arrays, castArrayLikeObject);\n\n      comparator = typeof comparator == 'function' ? comparator : undefined;\n      if (comparator) {\n        mapped.pop();\n      }\n      return (mapped.length && mapped[0] === arrays[0])\n        ? baseIntersection(mapped, undefined, comparator)\n        : [];\n    });\n\n    /**\n     * Converts all elements in `array` into a string separated by `separator`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to convert.\n     * @param {string} [separator=','] The element separator.\n     * @returns {string} Returns the joined string.\n     * @example\n     *\n     * _.join(['a', 'b', 'c'], '~');\n     * // => 'a~b~c'\n     */\n    function join(array, separator) {\n      return array == null ? '' : nativeJoin.call(array, separator);\n    }\n\n    /**\n     * Gets the last element of `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @returns {*} Returns the last element of `array`.\n     * @example\n     *\n     * _.last([1, 2, 3]);\n     * // => 3\n     */\n    function last(array) {\n      var length = array == null ? 0 : array.length;\n      return length ? array[length - 1] : undefined;\n    }\n\n    /**\n     * This method is like `_.indexOf` except that it iterates over elements of\n     * `array` from right to left.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {*} value The value to search for.\n     * @param {number} [fromIndex=array.length-1] The index to search from.\n     * @returns {number} Returns the index of the matched value, else `-1`.\n     * @example\n     *\n     * _.lastIndexOf([1, 2, 1, 2], 2);\n     * // => 3\n     *\n     * // Search from the `fromIndex`.\n     * _.lastIndexOf([1, 2, 1, 2], 2, 2);\n     * // => 1\n     */\n    function lastIndexOf(array, value, fromIndex) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return -1;\n      }\n      var index = length;\n      if (fromIndex !== undefined) {\n        index = toInteger(fromIndex);\n        index = index < 0 ? nativeMax(length + index, 0) : nativeMin(index, length - 1);\n      }\n      return value === value\n        ? strictLastIndexOf(array, value, index)\n        : baseFindIndex(array, baseIsNaN, index, true);\n    }\n\n    /**\n     * Gets the element at index `n` of `array`. If `n` is negative, the nth\n     * element from the end is returned.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.11.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {number} [n=0] The index of the element to return.\n     * @returns {*} Returns the nth element of `array`.\n     * @example\n     *\n     * var array = ['a', 'b', 'c', 'd'];\n     *\n     * _.nth(array, 1);\n     * // => 'b'\n     *\n     * _.nth(array, -2);\n     * // => 'c';\n     */\n    function nth(array, n) {\n      return (array && array.length) ? baseNth(array, toInteger(n)) : undefined;\n    }\n\n    /**\n     * Removes all given values from `array` using\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons.\n     *\n     * **Note:** Unlike `_.without`, this method mutates `array`. Use `_.remove`\n     * to remove elements from an array by predicate.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @param {...*} [values] The values to remove.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = ['a', 'b', 'c', 'a', 'b', 'c'];\n     *\n     * _.pull(array, 'a', 'c');\n     * console.log(array);\n     * // => ['b', 'b']\n     */\n    var pull = baseRest(pullAll);\n\n    /**\n     * This method is like `_.pull` except that it accepts an array of values to remove.\n     *\n     * **Note:** Unlike `_.difference`, this method mutates `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @param {Array} values The values to remove.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = ['a', 'b', 'c', 'a', 'b', 'c'];\n     *\n     * _.pullAll(array, ['a', 'c']);\n     * console.log(array);\n     * // => ['b', 'b']\n     */\n    function pullAll(array, values) {\n      return (array && array.length && values && values.length)\n        ? basePullAll(array, values)\n        : array;\n    }\n\n    /**\n     * This method is like `_.pullAll` except that it accepts `iteratee` which is\n     * invoked for each element of `array` and `values` to generate the criterion\n     * by which they're compared. The iteratee is invoked with one argument: (value).\n     *\n     * **Note:** Unlike `_.differenceBy`, this method mutates `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @param {Array} values The values to remove.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = [{ 'x': 1 }, { 'x': 2 }, { 'x': 3 }, { 'x': 1 }];\n     *\n     * _.pullAllBy(array, [{ 'x': 1 }, { 'x': 3 }], 'x');\n     * console.log(array);\n     * // => [{ 'x': 2 }]\n     */\n    function pullAllBy(array, values, iteratee) {\n      return (array && array.length && values && values.length)\n        ? basePullAll(array, values, getIteratee(iteratee, 2))\n        : array;\n    }\n\n    /**\n     * This method is like `_.pullAll` except that it accepts `comparator` which\n     * is invoked to compare elements of `array` to `values`. The comparator is\n     * invoked with two arguments: (arrVal, othVal).\n     *\n     * **Note:** Unlike `_.differenceWith`, this method mutates `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.6.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @param {Array} values The values to remove.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = [{ 'x': 1, 'y': 2 }, { 'x': 3, 'y': 4 }, { 'x': 5, 'y': 6 }];\n     *\n     * _.pullAllWith(array, [{ 'x': 3, 'y': 4 }], _.isEqual);\n     * console.log(array);\n     * // => [{ 'x': 1, 'y': 2 }, { 'x': 5, 'y': 6 }]\n     */\n    function pullAllWith(array, values, comparator) {\n      return (array && array.length && values && values.length)\n        ? basePullAll(array, values, undefined, comparator)\n        : array;\n    }\n\n    /**\n     * Removes elements from `array` corresponding to `indexes` and returns an\n     * array of removed elements.\n     *\n     * **Note:** Unlike `_.at`, this method mutates `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @param {...(number|number[])} [indexes] The indexes of elements to remove.\n     * @returns {Array} Returns the new array of removed elements.\n     * @example\n     *\n     * var array = ['a', 'b', 'c', 'd'];\n     * var pulled = _.pullAt(array, [1, 3]);\n     *\n     * console.log(array);\n     * // => ['a', 'c']\n     *\n     * console.log(pulled);\n     * // => ['b', 'd']\n     */\n    var pullAt = flatRest(function(array, indexes) {\n      var length = array == null ? 0 : array.length,\n          result = baseAt(array, indexes);\n\n      basePullAt(array, arrayMap(indexes, function(index) {\n        return isIndex(index, length) ? +index : index;\n      }).sort(compareAscending));\n\n      return result;\n    });\n\n    /**\n     * Removes all elements from `array` that `predicate` returns truthy for\n     * and returns an array of the removed elements. The predicate is invoked\n     * with three arguments: (value, index, array).\n     *\n     * **Note:** Unlike `_.filter`, this method mutates `array`. Use `_.pull`\n     * to pull elements from an array by value.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the new array of removed elements.\n     * @example\n     *\n     * var array = [1, 2, 3, 4];\n     * var evens = _.remove(array, function(n) {\n     *   return n % 2 == 0;\n     * });\n     *\n     * console.log(array);\n     * // => [1, 3]\n     *\n     * console.log(evens);\n     * // => [2, 4]\n     */\n    function remove(array, predicate) {\n      var result = [];\n      if (!(array && array.length)) {\n        return result;\n      }\n      var index = -1,\n          indexes = [],\n          length = array.length;\n\n      predicate = getIteratee(predicate, 3);\n      while (++index < length) {\n        var value = array[index];\n        if (predicate(value, index, array)) {\n          result.push(value);\n          indexes.push(index);\n        }\n      }\n      basePullAt(array, indexes);\n      return result;\n    }\n\n    /**\n     * Reverses `array` so that the first element becomes the last, the second\n     * element becomes the second to last, and so on.\n     *\n     * **Note:** This method mutates `array` and is based on\n     * [`Array#reverse`](https://mdn.io/Array/reverse).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = [1, 2, 3];\n     *\n     * _.reverse(array);\n     * // => [3, 2, 1]\n     *\n     * console.log(array);\n     * // => [3, 2, 1]\n     */\n    function reverse(array) {\n      return array == null ? array : nativeReverse.call(array);\n    }\n\n    /**\n     * Creates a slice of `array` from `start` up to, but not including, `end`.\n     *\n     * **Note:** This method is used instead of\n     * [`Array#slice`](https://mdn.io/Array/slice) to ensure dense arrays are\n     * returned.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to slice.\n     * @param {number} [start=0] The start position.\n     * @param {number} [end=array.length] The end position.\n     * @returns {Array} Returns the slice of `array`.\n     */\n    function slice(array, start, end) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return [];\n      }\n      if (end && typeof end != 'number' && isIterateeCall(array, start, end)) {\n        start = 0;\n        end = length;\n      }\n      else {\n        start = start == null ? 0 : toInteger(start);\n        end = end === undefined ? length : toInteger(end);\n      }\n      return baseSlice(array, start, end);\n    }\n\n    /**\n     * Uses a binary search to determine the lowest index at which `value`\n     * should be inserted into `array` in order to maintain its sort order.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     * @example\n     *\n     * _.sortedIndex([30, 50], 40);\n     * // => 1\n     */\n    function sortedIndex(array, value) {\n      return baseSortedIndex(array, value);\n    }\n\n    /**\n     * This method is like `_.sortedIndex` except that it accepts `iteratee`\n     * which is invoked for `value` and each element of `array` to compute their\n     * sort ranking. The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     * @example\n     *\n     * var objects = [{ 'x': 4 }, { 'x': 5 }];\n     *\n     * _.sortedIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });\n     * // => 0\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.sortedIndexBy(objects, { 'x': 4 }, 'x');\n     * // => 0\n     */\n    function sortedIndexBy(array, value, iteratee) {\n      return baseSortedIndexBy(array, value, getIteratee(iteratee, 2));\n    }\n\n    /**\n     * This method is like `_.indexOf` except that it performs a binary\n     * search on a sorted `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {*} value The value to search for.\n     * @returns {number} Returns the index of the matched value, else `-1`.\n     * @example\n     *\n     * _.sortedIndexOf([4, 5, 5, 5, 6], 5);\n     * // => 1\n     */\n    function sortedIndexOf(array, value) {\n      var length = array == null ? 0 : array.length;\n      if (length) {\n        var index = baseSortedIndex(array, value);\n        if (index < length && eq(array[index], value)) {\n          return index;\n        }\n      }\n      return -1;\n    }\n\n    /**\n     * This method is like `_.sortedIndex` except that it returns the highest\n     * index at which `value` should be inserted into `array` in order to\n     * maintain its sort order.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     * @example\n     *\n     * _.sortedLastIndex([4, 5, 5, 5, 6], 5);\n     * // => 4\n     */\n    function sortedLastIndex(array, value) {\n      return baseSortedIndex(array, value, true);\n    }\n\n    /**\n     * This method is like `_.sortedLastIndex` except that it accepts `iteratee`\n     * which is invoked for `value` and each element of `array` to compute their\n     * sort ranking. The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     * @example\n     *\n     * var objects = [{ 'x': 4 }, { 'x': 5 }];\n     *\n     * _.sortedLastIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });\n     * // => 1\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.sortedLastIndexBy(objects, { 'x': 4 }, 'x');\n     * // => 1\n     */\n    function sortedLastIndexBy(array, value, iteratee) {\n      return baseSortedIndexBy(array, value, getIteratee(iteratee, 2), true);\n    }\n\n    /**\n     * This method is like `_.lastIndexOf` except that it performs a binary\n     * search on a sorted `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {*} value The value to search for.\n     * @returns {number} Returns the index of the matched value, else `-1`.\n     * @example\n     *\n     * _.sortedLastIndexOf([4, 5, 5, 5, 6], 5);\n     * // => 3\n     */\n    function sortedLastIndexOf(array, value) {\n      var length = array == null ? 0 : array.length;\n      if (length) {\n        var index = baseSortedIndex(array, value, true) - 1;\n        if (eq(array[index], value)) {\n          return index;\n        }\n      }\n      return -1;\n    }\n\n    /**\n     * This method is like `_.uniq` except that it's designed and optimized\n     * for sorted arrays.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @returns {Array} Returns the new duplicate free array.\n     * @example\n     *\n     * _.sortedUniq([1, 1, 2]);\n     * // => [1, 2]\n     */\n    function sortedUniq(array) {\n      return (array && array.length)\n        ? baseSortedUniq(array)\n        : [];\n    }\n\n    /**\n     * This method is like `_.uniqBy` except that it's designed and optimized\n     * for sorted arrays.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @returns {Array} Returns the new duplicate free array.\n     * @example\n     *\n     * _.sortedUniqBy([1.1, 1.2, 2.3, 2.4], Math.floor);\n     * // => [1.1, 2.3]\n     */\n    function sortedUniqBy(array, iteratee) {\n      return (array && array.length)\n        ? baseSortedUniq(array, getIteratee(iteratee, 2))\n        : [];\n    }\n\n    /**\n     * Gets all but the first element of `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.tail([1, 2, 3]);\n     * // => [2, 3]\n     */\n    function tail(array) {\n      var length = array == null ? 0 : array.length;\n      return length ? baseSlice(array, 1, length) : [];\n    }\n\n    /**\n     * Creates a slice of `array` with `n` elements taken from the beginning.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {number} [n=1] The number of elements to take.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.take([1, 2, 3]);\n     * // => [1]\n     *\n     * _.take([1, 2, 3], 2);\n     * // => [1, 2]\n     *\n     * _.take([1, 2, 3], 5);\n     * // => [1, 2, 3]\n     *\n     * _.take([1, 2, 3], 0);\n     * // => []\n     */\n    function take(array, n, guard) {\n      if (!(array && array.length)) {\n        return [];\n      }\n      n = (guard || n === undefined) ? 1 : toInteger(n);\n      return baseSlice(array, 0, n < 0 ? 0 : n);\n    }\n\n    /**\n     * Creates a slice of `array` with `n` elements taken from the end.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {number} [n=1] The number of elements to take.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.takeRight([1, 2, 3]);\n     * // => [3]\n     *\n     * _.takeRight([1, 2, 3], 2);\n     * // => [2, 3]\n     *\n     * _.takeRight([1, 2, 3], 5);\n     * // => [1, 2, 3]\n     *\n     * _.takeRight([1, 2, 3], 0);\n     * // => []\n     */\n    function takeRight(array, n, guard) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return [];\n      }\n      n = (guard || n === undefined) ? 1 : toInteger(n);\n      n = length - n;\n      return baseSlice(array, n < 0 ? 0 : n, length);\n    }\n\n    /**\n     * Creates a slice of `array` with elements taken from the end. Elements are\n     * taken until `predicate` returns falsey. The predicate is invoked with\n     * three arguments: (value, index, array).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': true },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': false }\n     * ];\n     *\n     * _.takeRightWhile(users, function(o) { return !o.active; });\n     * // => objects for ['fred', 'pebbles']\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.takeRightWhile(users, { 'user': 'pebbles', 'active': false });\n     * // => objects for ['pebbles']\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.takeRightWhile(users, ['active', false]);\n     * // => objects for ['fred', 'pebbles']\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.takeRightWhile(users, 'active');\n     * // => []\n     */\n    function takeRightWhile(array, predicate) {\n      return (array && array.length)\n        ? baseWhile(array, getIteratee(predicate, 3), false, true)\n        : [];\n    }\n\n    /**\n     * Creates a slice of `array` with elements taken from the beginning. Elements\n     * are taken until `predicate` returns falsey. The predicate is invoked with\n     * three arguments: (value, index, array).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': false },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': true }\n     * ];\n     *\n     * _.takeWhile(users, function(o) { return !o.active; });\n     * // => objects for ['barney', 'fred']\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.takeWhile(users, { 'user': 'barney', 'active': false });\n     * // => objects for ['barney']\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.takeWhile(users, ['active', false]);\n     * // => objects for ['barney', 'fred']\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.takeWhile(users, 'active');\n     * // => []\n     */\n    function takeWhile(array, predicate) {\n      return (array && array.length)\n        ? baseWhile(array, getIteratee(predicate, 3))\n        : [];\n    }\n\n    /**\n     * Creates an array of unique values, in order, from all given arrays using\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @returns {Array} Returns the new array of combined values.\n     * @example\n     *\n     * _.union([2], [1, 2]);\n     * // => [2, 1]\n     */\n    var union = baseRest(function(arrays) {\n      return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true));\n    });\n\n    /**\n     * This method is like `_.union` except that it accepts `iteratee` which is\n     * invoked for each element of each `arrays` to generate the criterion by\n     * which uniqueness is computed. Result values are chosen from the first\n     * array in which the value occurs. The iteratee is invoked with one argument:\n     * (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Array} Returns the new array of combined values.\n     * @example\n     *\n     * _.unionBy([2.1], [1.2, 2.3], Math.floor);\n     * // => [2.1, 1.2]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.unionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n     * // => [{ 'x': 1 }, { 'x': 2 }]\n     */\n    var unionBy = baseRest(function(arrays) {\n      var iteratee = last(arrays);\n      if (isArrayLikeObject(iteratee)) {\n        iteratee = undefined;\n      }\n      return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), getIteratee(iteratee, 2));\n    });\n\n    /**\n     * This method is like `_.union` except that it accepts `comparator` which\n     * is invoked to compare elements of `arrays`. Result values are chosen from\n     * the first array in which the value occurs. The comparator is invoked\n     * with two arguments: (arrVal, othVal).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of combined values.\n     * @example\n     *\n     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n     * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n     *\n     * _.unionWith(objects, others, _.isEqual);\n     * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]\n     */\n    var unionWith = baseRest(function(arrays) {\n      var comparator = last(arrays);\n      comparator = typeof comparator == 'function' ? comparator : undefined;\n      return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), undefined, comparator);\n    });\n\n    /**\n     * Creates a duplicate-free version of an array, using\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons, in which only the first occurrence of each element\n     * is kept. The order of result values is determined by the order they occur\n     * in the array.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @returns {Array} Returns the new duplicate free array.\n     * @example\n     *\n     * _.uniq([2, 1, 2]);\n     * // => [2, 1]\n     */\n    function uniq(array) {\n      return (array && array.length) ? baseUniq(array) : [];\n    }\n\n    /**\n     * This method is like `_.uniq` except that it accepts `iteratee` which is\n     * invoked for each element in `array` to generate the criterion by which\n     * uniqueness is computed. The order of result values is determined by the\n     * order they occur in the array. The iteratee is invoked with one argument:\n     * (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Array} Returns the new duplicate free array.\n     * @example\n     *\n     * _.uniqBy([2.1, 1.2, 2.3], Math.floor);\n     * // => [2.1, 1.2]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x');\n     * // => [{ 'x': 1 }, { 'x': 2 }]\n     */\n    function uniqBy(array, iteratee) {\n      return (array && array.length) ? baseUniq(array, getIteratee(iteratee, 2)) : [];\n    }\n\n    /**\n     * This method is like `_.uniq` except that it accepts `comparator` which\n     * is invoked to compare elements of `array`. The order of result values is\n     * determined by the order they occur in the array.The comparator is invoked\n     * with two arguments: (arrVal, othVal).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new duplicate free array.\n     * @example\n     *\n     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 2 }];\n     *\n     * _.uniqWith(objects, _.isEqual);\n     * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]\n     */\n    function uniqWith(array, comparator) {\n      comparator = typeof comparator == 'function' ? comparator : undefined;\n      return (array && array.length) ? baseUniq(array, undefined, comparator) : [];\n    }\n\n    /**\n     * This method is like `_.zip` except that it accepts an array of grouped\n     * elements and creates an array regrouping the elements to their pre-zip\n     * configuration.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.2.0\n     * @category Array\n     * @param {Array} array The array of grouped elements to process.\n     * @returns {Array} Returns the new array of regrouped elements.\n     * @example\n     *\n     * var zipped = _.zip(['a', 'b'], [1, 2], [true, false]);\n     * // => [['a', 1, true], ['b', 2, false]]\n     *\n     * _.unzip(zipped);\n     * // => [['a', 'b'], [1, 2], [true, false]]\n     */\n    function unzip(array) {\n      if (!(array && array.length)) {\n        return [];\n      }\n      var length = 0;\n      array = arrayFilter(array, function(group) {\n        if (isArrayLikeObject(group)) {\n          length = nativeMax(group.length, length);\n          return true;\n        }\n      });\n      return baseTimes(length, function(index) {\n        return arrayMap(array, baseProperty(index));\n      });\n    }\n\n    /**\n     * This method is like `_.unzip` except that it accepts `iteratee` to specify\n     * how regrouped values should be combined. The iteratee is invoked with the\n     * elements of each group: (...group).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.8.0\n     * @category Array\n     * @param {Array} array The array of grouped elements to process.\n     * @param {Function} [iteratee=_.identity] The function to combine\n     *  regrouped values.\n     * @returns {Array} Returns the new array of regrouped elements.\n     * @example\n     *\n     * var zipped = _.zip([1, 2], [10, 20], [100, 200]);\n     * // => [[1, 10, 100], [2, 20, 200]]\n     *\n     * _.unzipWith(zipped, _.add);\n     * // => [3, 30, 300]\n     */\n    function unzipWith(array, iteratee) {\n      if (!(array && array.length)) {\n        return [];\n      }\n      var result = unzip(array);\n      if (iteratee == null) {\n        return result;\n      }\n      return arrayMap(result, function(group) {\n        return apply(iteratee, undefined, group);\n      });\n    }\n\n    /**\n     * Creates an array excluding all given values using\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons.\n     *\n     * **Note:** Unlike `_.pull`, this method returns a new array.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {...*} [values] The values to exclude.\n     * @returns {Array} Returns the new array of filtered values.\n     * @see _.difference, _.xor\n     * @example\n     *\n     * _.without([2, 1, 2, 3], 1, 2);\n     * // => [3]\n     */\n    var without = baseRest(function(array, values) {\n      return isArrayLikeObject(array)\n        ? baseDifference(array, values)\n        : [];\n    });\n\n    /**\n     * Creates an array of unique values that is the\n     * [symmetric difference](https://en.wikipedia.org/wiki/Symmetric_difference)\n     * of the given arrays. The order of result values is determined by the order\n     * they occur in the arrays.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.4.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @returns {Array} Returns the new array of filtered values.\n     * @see _.difference, _.without\n     * @example\n     *\n     * _.xor([2, 1], [2, 3]);\n     * // => [1, 3]\n     */\n    var xor = baseRest(function(arrays) {\n      return baseXor(arrayFilter(arrays, isArrayLikeObject));\n    });\n\n    /**\n     * This method is like `_.xor` except that it accepts `iteratee` which is\n     * invoked for each element of each `arrays` to generate the criterion by\n     * which by which they're compared. The order of result values is determined\n     * by the order they occur in the arrays. The iteratee is invoked with one\n     * argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Array} Returns the new array of filtered values.\n     * @example\n     *\n     * _.xorBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n     * // => [1.2, 3.4]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.xorBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n     * // => [{ 'x': 2 }]\n     */\n    var xorBy = baseRest(function(arrays) {\n      var iteratee = last(arrays);\n      if (isArrayLikeObject(iteratee)) {\n        iteratee = undefined;\n      }\n      return baseXor(arrayFilter(arrays, isArrayLikeObject), getIteratee(iteratee, 2));\n    });\n\n    /**\n     * This method is like `_.xor` except that it accepts `comparator` which is\n     * invoked to compare elements of `arrays`. The order of result values is\n     * determined by the order they occur in the arrays. The comparator is invoked\n     * with two arguments: (arrVal, othVal).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of filtered values.\n     * @example\n     *\n     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n     * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n     *\n     * _.xorWith(objects, others, _.isEqual);\n     * // => [{ 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]\n     */\n    var xorWith = baseRest(function(arrays) {\n      var comparator = last(arrays);\n      comparator = typeof comparator == 'function' ? comparator : undefined;\n      return baseXor(arrayFilter(arrays, isArrayLikeObject), undefined, comparator);\n    });\n\n    /**\n     * Creates an array of grouped elements, the first of which contains the\n     * first elements of the given arrays, the second of which contains the\n     * second elements of the given arrays, and so on.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to process.\n     * @returns {Array} Returns the new array of grouped elements.\n     * @example\n     *\n     * _.zip(['a', 'b'], [1, 2], [true, false]);\n     * // => [['a', 1, true], ['b', 2, false]]\n     */\n    var zip = baseRest(unzip);\n\n    /**\n     * This method is like `_.fromPairs` except that it accepts two arrays,\n     * one of property identifiers and one of corresponding values.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.4.0\n     * @category Array\n     * @param {Array} [props=[]] The property identifiers.\n     * @param {Array} [values=[]] The property values.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * _.zipObject(['a', 'b'], [1, 2]);\n     * // => { 'a': 1, 'b': 2 }\n     */\n    function zipObject(props, values) {\n      return baseZipObject(props || [], values || [], assignValue);\n    }\n\n    /**\n     * This method is like `_.zipObject` except that it supports property paths.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.1.0\n     * @category Array\n     * @param {Array} [props=[]] The property identifiers.\n     * @param {Array} [values=[]] The property values.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * _.zipObjectDeep(['a.b[0].c', 'a.b[1].d'], [1, 2]);\n     * // => { 'a': { 'b': [{ 'c': 1 }, { 'd': 2 }] } }\n     */\n    function zipObjectDeep(props, values) {\n      return baseZipObject(props || [], values || [], baseSet);\n    }\n\n    /**\n     * This method is like `_.zip` except that it accepts `iteratee` to specify\n     * how grouped values should be combined. The iteratee is invoked with the\n     * elements of each group: (...group).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.8.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to process.\n     * @param {Function} [iteratee=_.identity] The function to combine\n     *  grouped values.\n     * @returns {Array} Returns the new array of grouped elements.\n     * @example\n     *\n     * _.zipWith([1, 2], [10, 20], [100, 200], function(a, b, c) {\n     *   return a + b + c;\n     * });\n     * // => [111, 222]\n     */\n    var zipWith = baseRest(function(arrays) {\n      var length = arrays.length,\n          iteratee = length > 1 ? arrays[length - 1] : undefined;\n\n      iteratee = typeof iteratee == 'function' ? (arrays.pop(), iteratee) : undefined;\n      return unzipWith(arrays, iteratee);\n    });\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates a `lodash` wrapper instance that wraps `value` with explicit method\n     * chain sequences enabled. The result of such sequences must be unwrapped\n     * with `_#value`.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.3.0\n     * @category Seq\n     * @param {*} value The value to wrap.\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'age': 36 },\n     *   { 'user': 'fred',    'age': 40 },\n     *   { 'user': 'pebbles', 'age': 1 }\n     * ];\n     *\n     * var youngest = _\n     *   .chain(users)\n     *   .sortBy('age')\n     *   .map(function(o) {\n     *     return o.user + ' is ' + o.age;\n     *   })\n     *   .head()\n     *   .value();\n     * // => 'pebbles is 1'\n     */\n    function chain(value) {\n      var result = lodash(value);\n      result.__chain__ = true;\n      return result;\n    }\n\n    /**\n     * This method invokes `interceptor` and returns `value`. The interceptor\n     * is invoked with one argument; (value). The purpose of this method is to\n     * \"tap into\" a method chain sequence in order to modify intermediate results.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Seq\n     * @param {*} value The value to provide to `interceptor`.\n     * @param {Function} interceptor The function to invoke.\n     * @returns {*} Returns `value`.\n     * @example\n     *\n     * _([1, 2, 3])\n     *  .tap(function(array) {\n     *    // Mutate input array.\n     *    array.pop();\n     *  })\n     *  .reverse()\n     *  .value();\n     * // => [2, 1]\n     */\n    function tap(value, interceptor) {\n      interceptor(value);\n      return value;\n    }\n\n    /**\n     * This method is like `_.tap` except that it returns the result of `interceptor`.\n     * The purpose of this method is to \"pass thru\" values replacing intermediate\n     * results in a method chain sequence.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Seq\n     * @param {*} value The value to provide to `interceptor`.\n     * @param {Function} interceptor The function to invoke.\n     * @returns {*} Returns the result of `interceptor`.\n     * @example\n     *\n     * _('  abc  ')\n     *  .chain()\n     *  .trim()\n     *  .thru(function(value) {\n     *    return [value];\n     *  })\n     *  .value();\n     * // => ['abc']\n     */\n    function thru(value, interceptor) {\n      return interceptor(value);\n    }\n\n    /**\n     * This method is the wrapper version of `_.at`.\n     *\n     * @name at\n     * @memberOf _\n     * @since 1.0.0\n     * @category Seq\n     * @param {...(string|string[])} [paths] The property paths to pick.\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };\n     *\n     * _(object).at(['a[0].b.c', 'a[1]']).value();\n     * // => [3, 4]\n     */\n    var wrapperAt = flatRest(function(paths) {\n      var length = paths.length,\n          start = length ? paths[0] : 0,\n          value = this.__wrapped__,\n          interceptor = function(object) { return baseAt(object, paths); };\n\n      if (length > 1 || this.__actions__.length ||\n          !(value instanceof LazyWrapper) || !isIndex(start)) {\n        return this.thru(interceptor);\n      }\n      value = value.slice(start, +start + (length ? 1 : 0));\n      value.__actions__.push({\n        'func': thru,\n        'args': [interceptor],\n        'thisArg': undefined\n      });\n      return new LodashWrapper(value, this.__chain__).thru(function(array) {\n        if (length && !array.length) {\n          array.push(undefined);\n        }\n        return array;\n      });\n    });\n\n    /**\n     * Creates a `lodash` wrapper instance with explicit method chain sequences enabled.\n     *\n     * @name chain\n     * @memberOf _\n     * @since 0.1.0\n     * @category Seq\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney', 'age': 36 },\n     *   { 'user': 'fred',   'age': 40 }\n     * ];\n     *\n     * // A sequence without explicit chaining.\n     * _(users).head();\n     * // => { 'user': 'barney', 'age': 36 }\n     *\n     * // A sequence with explicit chaining.\n     * _(users)\n     *   .chain()\n     *   .head()\n     *   .pick('user')\n     *   .value();\n     * // => { 'user': 'barney' }\n     */\n    function wrapperChain() {\n      return chain(this);\n    }\n\n    /**\n     * Executes the chain sequence and returns the wrapped result.\n     *\n     * @name commit\n     * @memberOf _\n     * @since 3.2.0\n     * @category Seq\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * var array = [1, 2];\n     * var wrapped = _(array).push(3);\n     *\n     * console.log(array);\n     * // => [1, 2]\n     *\n     * wrapped = wrapped.commit();\n     * console.log(array);\n     * // => [1, 2, 3]\n     *\n     * wrapped.last();\n     * // => 3\n     *\n     * console.log(array);\n     * // => [1, 2, 3]\n     */\n    function wrapperCommit() {\n      return new LodashWrapper(this.value(), this.__chain__);\n    }\n\n    /**\n     * Gets the next value on a wrapped object following the\n     * [iterator protocol](https://mdn.io/iteration_protocols#iterator).\n     *\n     * @name next\n     * @memberOf _\n     * @since 4.0.0\n     * @category Seq\n     * @returns {Object} Returns the next iterator value.\n     * @example\n     *\n     * var wrapped = _([1, 2]);\n     *\n     * wrapped.next();\n     * // => { 'done': false, 'value': 1 }\n     *\n     * wrapped.next();\n     * // => { 'done': false, 'value': 2 }\n     *\n     * wrapped.next();\n     * // => { 'done': true, 'value': undefined }\n     */\n    function wrapperNext() {\n      if (this.__values__ === undefined) {\n        this.__values__ = toArray(this.value());\n      }\n      var done = this.__index__ >= this.__values__.length,\n          value = done ? undefined : this.__values__[this.__index__++];\n\n      return { 'done': done, 'value': value };\n    }\n\n    /**\n     * Enables the wrapper to be iterable.\n     *\n     * @name Symbol.iterator\n     * @memberOf _\n     * @since 4.0.0\n     * @category Seq\n     * @returns {Object} Returns the wrapper object.\n     * @example\n     *\n     * var wrapped = _([1, 2]);\n     *\n     * wrapped[Symbol.iterator]() === wrapped;\n     * // => true\n     *\n     * Array.from(wrapped);\n     * // => [1, 2]\n     */\n    function wrapperToIterator() {\n      return this;\n    }\n\n    /**\n     * Creates a clone of the chain sequence planting `value` as the wrapped value.\n     *\n     * @name plant\n     * @memberOf _\n     * @since 3.2.0\n     * @category Seq\n     * @param {*} value The value to plant.\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * function square(n) {\n     *   return n * n;\n     * }\n     *\n     * var wrapped = _([1, 2]).map(square);\n     * var other = wrapped.plant([3, 4]);\n     *\n     * other.value();\n     * // => [9, 16]\n     *\n     * wrapped.value();\n     * // => [1, 4]\n     */\n    function wrapperPlant(value) {\n      var result,\n          parent = this;\n\n      while (parent instanceof baseLodash) {\n        var clone = wrapperClone(parent);\n        clone.__index__ = 0;\n        clone.__values__ = undefined;\n        if (result) {\n          previous.__wrapped__ = clone;\n        } else {\n          result = clone;\n        }\n        var previous = clone;\n        parent = parent.__wrapped__;\n      }\n      previous.__wrapped__ = value;\n      return result;\n    }\n\n    /**\n     * This method is the wrapper version of `_.reverse`.\n     *\n     * **Note:** This method mutates the wrapped array.\n     *\n     * @name reverse\n     * @memberOf _\n     * @since 0.1.0\n     * @category Seq\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * var array = [1, 2, 3];\n     *\n     * _(array).reverse().value()\n     * // => [3, 2, 1]\n     *\n     * console.log(array);\n     * // => [3, 2, 1]\n     */\n    function wrapperReverse() {\n      var value = this.__wrapped__;\n      if (value instanceof LazyWrapper) {\n        var wrapped = value;\n        if (this.__actions__.length) {\n          wrapped = new LazyWrapper(this);\n        }\n        wrapped = wrapped.reverse();\n        wrapped.__actions__.push({\n          'func': thru,\n          'args': [reverse],\n          'thisArg': undefined\n        });\n        return new LodashWrapper(wrapped, this.__chain__);\n      }\n      return this.thru(reverse);\n    }\n\n    /**\n     * Executes the chain sequence to resolve the unwrapped value.\n     *\n     * @name value\n     * @memberOf _\n     * @since 0.1.0\n     * @alias toJSON, valueOf\n     * @category Seq\n     * @returns {*} Returns the resolved unwrapped value.\n     * @example\n     *\n     * _([1, 2, 3]).value();\n     * // => [1, 2, 3]\n     */\n    function wrapperValue() {\n      return baseWrapperValue(this.__wrapped__, this.__actions__);\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates an object composed of keys generated from the results of running\n     * each element of `collection` thru `iteratee`. The corresponding value of\n     * each key is the number of times the key was returned by `iteratee`. The\n     * iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.5.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n     * @returns {Object} Returns the composed aggregate object.\n     * @example\n     *\n     * _.countBy([6.1, 4.2, 6.3], Math.floor);\n     * // => { '4': 1, '6': 2 }\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.countBy(['one', 'two', 'three'], 'length');\n     * // => { '3': 2, '5': 1 }\n     */\n    var countBy = createAggregator(function(result, value, key) {\n      if (hasOwnProperty.call(result, key)) {\n        ++result[key];\n      } else {\n        baseAssignValue(result, key, 1);\n      }\n    });\n\n    /**\n     * Checks if `predicate` returns truthy for **all** elements of `collection`.\n     * Iteration is stopped once `predicate` returns falsey. The predicate is\n     * invoked with three arguments: (value, index|key, collection).\n     *\n     * **Note:** This method returns `true` for\n     * [empty collections](https://en.wikipedia.org/wiki/Empty_set) because\n     * [everything is true](https://en.wikipedia.org/wiki/Vacuous_truth) of\n     * elements of empty collections.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {boolean} Returns `true` if all elements pass the predicate check,\n     *  else `false`.\n     * @example\n     *\n     * _.every([true, 1, null, 'yes'], Boolean);\n     * // => false\n     *\n     * var users = [\n     *   { 'user': 'barney', 'age': 36, 'active': false },\n     *   { 'user': 'fred',   'age': 40, 'active': false }\n     * ];\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.every(users, { 'user': 'barney', 'active': false });\n     * // => false\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.every(users, ['active', false]);\n     * // => true\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.every(users, 'active');\n     * // => false\n     */\n    function every(collection, predicate, guard) {\n      var func = isArray(collection) ? arrayEvery : baseEvery;\n      if (guard && isIterateeCall(collection, predicate, guard)) {\n        predicate = undefined;\n      }\n      return func(collection, getIteratee(predicate, 3));\n    }\n\n    /**\n     * Iterates over elements of `collection`, returning an array of all elements\n     * `predicate` returns truthy for. The predicate is invoked with three\n     * arguments: (value, index|key, collection).\n     *\n     * **Note:** Unlike `_.remove`, this method returns a new array.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the new filtered array.\n     * @see _.reject\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney', 'age': 36, 'active': true },\n     *   { 'user': 'fred',   'age': 40, 'active': false }\n     * ];\n     *\n     * _.filter(users, function(o) { return !o.active; });\n     * // => objects for ['fred']\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.filter(users, { 'age': 36, 'active': true });\n     * // => objects for ['barney']\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.filter(users, ['active', false]);\n     * // => objects for ['fred']\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.filter(users, 'active');\n     * // => objects for ['barney']\n     *\n     * // Combining several predicates using `_.overEvery` or `_.overSome`.\n     * _.filter(users, _.overSome([{ 'age': 36 }, ['age', 40]]));\n     * // => objects for ['fred', 'barney']\n     */\n    function filter(collection, predicate) {\n      var func = isArray(collection) ? arrayFilter : baseFilter;\n      return func(collection, getIteratee(predicate, 3));\n    }\n\n    /**\n     * Iterates over elements of `collection`, returning the first element\n     * `predicate` returns truthy for. The predicate is invoked with three\n     * arguments: (value, index|key, collection).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to inspect.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @param {number} [fromIndex=0] The index to search from.\n     * @returns {*} Returns the matched element, else `undefined`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'age': 36, 'active': true },\n     *   { 'user': 'fred',    'age': 40, 'active': false },\n     *   { 'user': 'pebbles', 'age': 1,  'active': true }\n     * ];\n     *\n     * _.find(users, function(o) { return o.age < 40; });\n     * // => object for 'barney'\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.find(users, { 'age': 1, 'active': true });\n     * // => object for 'pebbles'\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.find(users, ['active', false]);\n     * // => object for 'fred'\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.find(users, 'active');\n     * // => object for 'barney'\n     */\n    var find = createFind(findIndex);\n\n    /**\n     * This method is like `_.find` except that it iterates over elements of\n     * `collection` from right to left.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to inspect.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @param {number} [fromIndex=collection.length-1] The index to search from.\n     * @returns {*} Returns the matched element, else `undefined`.\n     * @example\n     *\n     * _.findLast([1, 2, 3, 4], function(n) {\n     *   return n % 2 == 1;\n     * });\n     * // => 3\n     */\n    var findLast = createFind(findLastIndex);\n\n    /**\n     * Creates a flattened array of values by running each element in `collection`\n     * thru `iteratee` and flattening the mapped results. The iteratee is invoked\n     * with three arguments: (value, index|key, collection).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the new flattened array.\n     * @example\n     *\n     * function duplicate(n) {\n     *   return [n, n];\n     * }\n     *\n     * _.flatMap([1, 2], duplicate);\n     * // => [1, 1, 2, 2]\n     */\n    function flatMap(collection, iteratee) {\n      return baseFlatten(map(collection, iteratee), 1);\n    }\n\n    /**\n     * This method is like `_.flatMap` except that it recursively flattens the\n     * mapped results.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.7.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the new flattened array.\n     * @example\n     *\n     * function duplicate(n) {\n     *   return [[[n, n]]];\n     * }\n     *\n     * _.flatMapDeep([1, 2], duplicate);\n     * // => [1, 1, 2, 2]\n     */\n    function flatMapDeep(collection, iteratee) {\n      return baseFlatten(map(collection, iteratee), INFINITY);\n    }\n\n    /**\n     * This method is like `_.flatMap` except that it recursively flattens the\n     * mapped results up to `depth` times.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.7.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @param {number} [depth=1] The maximum recursion depth.\n     * @returns {Array} Returns the new flattened array.\n     * @example\n     *\n     * function duplicate(n) {\n     *   return [[[n, n]]];\n     * }\n     *\n     * _.flatMapDepth([1, 2], duplicate, 2);\n     * // => [[1, 1], [2, 2]]\n     */\n    function flatMapDepth(collection, iteratee, depth) {\n      depth = depth === undefined ? 1 : toInteger(depth);\n      return baseFlatten(map(collection, iteratee), depth);\n    }\n\n    /**\n     * Iterates over elements of `collection` and invokes `iteratee` for each element.\n     * The iteratee is invoked with three arguments: (value, index|key, collection).\n     * Iteratee functions may exit iteration early by explicitly returning `false`.\n     *\n     * **Note:** As with other \"Collections\" methods, objects with a \"length\"\n     * property are iterated like arrays. To avoid this behavior use `_.forIn`\n     * or `_.forOwn` for object iteration.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @alias each\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Array|Object} Returns `collection`.\n     * @see _.forEachRight\n     * @example\n     *\n     * _.forEach([1, 2], function(value) {\n     *   console.log(value);\n     * });\n     * // => Logs `1` then `2`.\n     *\n     * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) {\n     *   console.log(key);\n     * });\n     * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n     */\n    function forEach(collection, iteratee) {\n      var func = isArray(collection) ? arrayEach : baseEach;\n      return func(collection, getIteratee(iteratee, 3));\n    }\n\n    /**\n     * This method is like `_.forEach` except that it iterates over elements of\n     * `collection` from right to left.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @alias eachRight\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Array|Object} Returns `collection`.\n     * @see _.forEach\n     * @example\n     *\n     * _.forEachRight([1, 2], function(value) {\n     *   console.log(value);\n     * });\n     * // => Logs `2` then `1`.\n     */\n    function forEachRight(collection, iteratee) {\n      var func = isArray(collection) ? arrayEachRight : baseEachRight;\n      return func(collection, getIteratee(iteratee, 3));\n    }\n\n    /**\n     * Creates an object composed of keys generated from the results of running\n     * each element of `collection` thru `iteratee`. The order of grouped values\n     * is determined by the order they occur in `collection`. The corresponding\n     * value of each key is an array of elements responsible for generating the\n     * key. The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n     * @returns {Object} Returns the composed aggregate object.\n     * @example\n     *\n     * _.groupBy([6.1, 4.2, 6.3], Math.floor);\n     * // => { '4': [4.2], '6': [6.1, 6.3] }\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.groupBy(['one', 'two', 'three'], 'length');\n     * // => { '3': ['one', 'two'], '5': ['three'] }\n     */\n    var groupBy = createAggregator(function(result, value, key) {\n      if (hasOwnProperty.call(result, key)) {\n        result[key].push(value);\n      } else {\n        baseAssignValue(result, key, [value]);\n      }\n    });\n\n    /**\n     * Checks if `value` is in `collection`. If `collection` is a string, it's\n     * checked for a substring of `value`, otherwise\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * is used for equality comparisons. If `fromIndex` is negative, it's used as\n     * the offset from the end of `collection`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object|string} collection The collection to inspect.\n     * @param {*} value The value to search for.\n     * @param {number} [fromIndex=0] The index to search from.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\n     * @returns {boolean} Returns `true` if `value` is found, else `false`.\n     * @example\n     *\n     * _.includes([1, 2, 3], 1);\n     * // => true\n     *\n     * _.includes([1, 2, 3], 1, 2);\n     * // => false\n     *\n     * _.includes({ 'a': 1, 'b': 2 }, 1);\n     * // => true\n     *\n     * _.includes('abcd', 'bc');\n     * // => true\n     */\n    function includes(collection, value, fromIndex, guard) {\n      collection = isArrayLike(collection) ? collection : values(collection);\n      fromIndex = (fromIndex && !guard) ? toInteger(fromIndex) : 0;\n\n      var length = collection.length;\n      if (fromIndex < 0) {\n        fromIndex = nativeMax(length + fromIndex, 0);\n      }\n      return isString(collection)\n        ? (fromIndex <= length && collection.indexOf(value, fromIndex) > -1)\n        : (!!length && baseIndexOf(collection, value, fromIndex) > -1);\n    }\n\n    /**\n     * Invokes the method at `path` of each element in `collection`, returning\n     * an array of the results of each invoked method. Any additional arguments\n     * are provided to each invoked method. If `path` is a function, it's invoked\n     * for, and `this` bound to, each element in `collection`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Array|Function|string} path The path of the method to invoke or\n     *  the function invoked per iteration.\n     * @param {...*} [args] The arguments to invoke each method with.\n     * @returns {Array} Returns the array of results.\n     * @example\n     *\n     * _.invokeMap([[5, 1, 7], [3, 2, 1]], 'sort');\n     * // => [[1, 5, 7], [1, 2, 3]]\n     *\n     * _.invokeMap([123, 456], String.prototype.split, '');\n     * // => [['1', '2', '3'], ['4', '5', '6']]\n     */\n    var invokeMap = baseRest(function(collection, path, args) {\n      var index = -1,\n          isFunc = typeof path == 'function',\n          result = isArrayLike(collection) ? Array(collection.length) : [];\n\n      baseEach(collection, function(value) {\n        result[++index] = isFunc ? apply(path, value, args) : baseInvoke(value, path, args);\n      });\n      return result;\n    });\n\n    /**\n     * Creates an object composed of keys generated from the results of running\n     * each element of `collection` thru `iteratee`. The corresponding value of\n     * each key is the last element responsible for generating the key. The\n     * iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n     * @returns {Object} Returns the composed aggregate object.\n     * @example\n     *\n     * var array = [\n     *   { 'dir': 'left', 'code': 97 },\n     *   { 'dir': 'right', 'code': 100 }\n     * ];\n     *\n     * _.keyBy(array, function(o) {\n     *   return String.fromCharCode(o.code);\n     * });\n     * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } }\n     *\n     * _.keyBy(array, 'dir');\n     * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } }\n     */\n    var keyBy = createAggregator(function(result, value, key) {\n      baseAssignValue(result, key, value);\n    });\n\n    /**\n     * Creates an array of values by running each element in `collection` thru\n     * `iteratee`. The iteratee is invoked with three arguments:\n     * (value, index|key, collection).\n     *\n     * Many lodash methods are guarded to work as iteratees for methods like\n     * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`.\n     *\n     * The guarded methods are:\n     * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`,\n     * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`,\n     * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`,\n     * `template`, `trim`, `trimEnd`, `trimStart`, and `words`\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the new mapped array.\n     * @example\n     *\n     * function square(n) {\n     *   return n * n;\n     * }\n     *\n     * _.map([4, 8], square);\n     * // => [16, 64]\n     *\n     * _.map({ 'a': 4, 'b': 8 }, square);\n     * // => [16, 64] (iteration order is not guaranteed)\n     *\n     * var users = [\n     *   { 'user': 'barney' },\n     *   { 'user': 'fred' }\n     * ];\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.map(users, 'user');\n     * // => ['barney', 'fred']\n     */\n    function map(collection, iteratee) {\n      var func = isArray(collection) ? arrayMap : baseMap;\n      return func(collection, getIteratee(iteratee, 3));\n    }\n\n    /**\n     * This method is like `_.sortBy` except that it allows specifying the sort\n     * orders of the iteratees to sort by. If `orders` is unspecified, all values\n     * are sorted in ascending order. Otherwise, specify an order of \"desc\" for\n     * descending or \"asc\" for ascending sort order of corresponding values.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Array[]|Function[]|Object[]|string[]} [iteratees=[_.identity]]\n     *  The iteratees to sort by.\n     * @param {string[]} [orders] The sort orders of `iteratees`.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\n     * @returns {Array} Returns the new sorted array.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'fred',   'age': 48 },\n     *   { 'user': 'barney', 'age': 34 },\n     *   { 'user': 'fred',   'age': 40 },\n     *   { 'user': 'barney', 'age': 36 }\n     * ];\n     *\n     * // Sort by `user` in ascending order and by `age` in descending order.\n     * _.orderBy(users, ['user', 'age'], ['asc', 'desc']);\n     * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]]\n     */\n    function orderBy(collection, iteratees, orders, guard) {\n      if (collection == null) {\n        return [];\n      }\n      if (!isArray(iteratees)) {\n        iteratees = iteratees == null ? [] : [iteratees];\n      }\n      orders = guard ? undefined : orders;\n      if (!isArray(orders)) {\n        orders = orders == null ? [] : [orders];\n      }\n      return baseOrderBy(collection, iteratees, orders);\n    }\n\n    /**\n     * Creates an array of elements split into two groups, the first of which\n     * contains elements `predicate` returns truthy for, the second of which\n     * contains elements `predicate` returns falsey for. The predicate is\n     * invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the array of grouped elements.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'age': 36, 'active': false },\n     *   { 'user': 'fred',    'age': 40, 'active': true },\n     *   { 'user': 'pebbles', 'age': 1,  'active': false }\n     * ];\n     *\n     * _.partition(users, function(o) { return o.active; });\n     * // => objects for [['fred'], ['barney', 'pebbles']]\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.partition(users, { 'age': 1, 'active': false });\n     * // => objects for [['pebbles'], ['barney', 'fred']]\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.partition(users, ['active', false]);\n     * // => objects for [['barney', 'pebbles'], ['fred']]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.partition(users, 'active');\n     * // => objects for [['fred'], ['barney', 'pebbles']]\n     */\n    var partition = createAggregator(function(result, value, key) {\n      result[key ? 0 : 1].push(value);\n    }, function() { return [[], []]; });\n\n    /**\n     * Reduces `collection` to a value which is the accumulated result of running\n     * each element in `collection` thru `iteratee`, where each successive\n     * invocation is supplied the return value of the previous. If `accumulator`\n     * is not given, the first element of `collection` is used as the initial\n     * value. The iteratee is invoked with four arguments:\n     * (accumulator, value, index|key, collection).\n     *\n     * Many lodash methods are guarded to work as iteratees for methods like\n     * `_.reduce`, `_.reduceRight`, and `_.transform`.\n     *\n     * The guarded methods are:\n     * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`,\n     * and `sortBy`\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @param {*} [accumulator] The initial value.\n     * @returns {*} Returns the accumulated value.\n     * @see _.reduceRight\n     * @example\n     *\n     * _.reduce([1, 2], function(sum, n) {\n     *   return sum + n;\n     * }, 0);\n     * // => 3\n     *\n     * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n     *   (result[value] || (result[value] = [])).push(key);\n     *   return result;\n     * }, {});\n     * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed)\n     */\n    function reduce(collection, iteratee, accumulator) {\n      var func = isArray(collection) ? arrayReduce : baseReduce,\n          initAccum = arguments.length < 3;\n\n      return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEach);\n    }\n\n    /**\n     * This method is like `_.reduce` except that it iterates over elements of\n     * `collection` from right to left.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @param {*} [accumulator] The initial value.\n     * @returns {*} Returns the accumulated value.\n     * @see _.reduce\n     * @example\n     *\n     * var array = [[0, 1], [2, 3], [4, 5]];\n     *\n     * _.reduceRight(array, function(flattened, other) {\n     *   return flattened.concat(other);\n     * }, []);\n     * // => [4, 5, 2, 3, 0, 1]\n     */\n    function reduceRight(collection, iteratee, accumulator) {\n      var func = isArray(collection) ? arrayReduceRight : baseReduce,\n          initAccum = arguments.length < 3;\n\n      return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEachRight);\n    }\n\n    /**\n     * The opposite of `_.filter`; this method returns the elements of `collection`\n     * that `predicate` does **not** return truthy for.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the new filtered array.\n     * @see _.filter\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney', 'age': 36, 'active': false },\n     *   { 'user': 'fred',   'age': 40, 'active': true }\n     * ];\n     *\n     * _.reject(users, function(o) { return !o.active; });\n     * // => objects for ['fred']\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.reject(users, { 'age': 40, 'active': true });\n     * // => objects for ['barney']\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.reject(users, ['active', false]);\n     * // => objects for ['fred']\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.reject(users, 'active');\n     * // => objects for ['barney']\n     */\n    function reject(collection, predicate) {\n      var func = isArray(collection) ? arrayFilter : baseFilter;\n      return func(collection, negate(getIteratee(predicate, 3)));\n    }\n\n    /**\n     * Gets a random element from `collection`.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to sample.\n     * @returns {*} Returns the random element.\n     * @example\n     *\n     * _.sample([1, 2, 3, 4]);\n     * // => 2\n     */\n    function sample(collection) {\n      var func = isArray(collection) ? arraySample : baseSample;\n      return func(collection);\n    }\n\n    /**\n     * Gets `n` random elements at unique keys from `collection` up to the\n     * size of `collection`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to sample.\n     * @param {number} [n=1] The number of elements to sample.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the random elements.\n     * @example\n     *\n     * _.sampleSize([1, 2, 3], 2);\n     * // => [3, 1]\n     *\n     * _.sampleSize([1, 2, 3], 4);\n     * // => [2, 3, 1]\n     */\n    function sampleSize(collection, n, guard) {\n      if ((guard ? isIterateeCall(collection, n, guard) : n === undefined)) {\n        n = 1;\n      } else {\n        n = toInteger(n);\n      }\n      var func = isArray(collection) ? arraySampleSize : baseSampleSize;\n      return func(collection, n);\n    }\n\n    /**\n     * Creates an array of shuffled values, using a version of the\n     * [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to shuffle.\n     * @returns {Array} Returns the new shuffled array.\n     * @example\n     *\n     * _.shuffle([1, 2, 3, 4]);\n     * // => [4, 1, 3, 2]\n     */\n    function shuffle(collection) {\n      var func = isArray(collection) ? arrayShuffle : baseShuffle;\n      return func(collection);\n    }\n\n    /**\n     * Gets the size of `collection` by returning its length for array-like\n     * values or the number of own enumerable string keyed properties for objects.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object|string} collection The collection to inspect.\n     * @returns {number} Returns the collection size.\n     * @example\n     *\n     * _.size([1, 2, 3]);\n     * // => 3\n     *\n     * _.size({ 'a': 1, 'b': 2 });\n     * // => 2\n     *\n     * _.size('pebbles');\n     * // => 7\n     */\n    function size(collection) {\n      if (collection == null) {\n        return 0;\n      }\n      if (isArrayLike(collection)) {\n        return isString(collection) ? stringSize(collection) : collection.length;\n      }\n      var tag = getTag(collection);\n      if (tag == mapTag || tag == setTag) {\n        return collection.size;\n      }\n      return baseKeys(collection).length;\n    }\n\n    /**\n     * Checks if `predicate` returns truthy for **any** element of `collection`.\n     * Iteration is stopped once `predicate` returns truthy. The predicate is\n     * invoked with three arguments: (value, index|key, collection).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {boolean} Returns `true` if any element passes the predicate check,\n     *  else `false`.\n     * @example\n     *\n     * _.some([null, 0, 'yes', false], Boolean);\n     * // => true\n     *\n     * var users = [\n     *   { 'user': 'barney', 'active': true },\n     *   { 'user': 'fred',   'active': false }\n     * ];\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.some(users, { 'user': 'barney', 'active': false });\n     * // => false\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.some(users, ['active', false]);\n     * // => true\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.some(users, 'active');\n     * // => true\n     */\n    function some(collection, predicate, guard) {\n      var func = isArray(collection) ? arraySome : baseSome;\n      if (guard && isIterateeCall(collection, predicate, guard)) {\n        predicate = undefined;\n      }\n      return func(collection, getIteratee(predicate, 3));\n    }\n\n    /**\n     * Creates an array of elements, sorted in ascending order by the results of\n     * running each element in a collection thru each iteratee. This method\n     * performs a stable sort, that is, it preserves the original sort order of\n     * equal elements. The iteratees are invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {...(Function|Function[])} [iteratees=[_.identity]]\n     *  The iteratees to sort by.\n     * @returns {Array} Returns the new sorted array.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'fred',   'age': 48 },\n     *   { 'user': 'barney', 'age': 36 },\n     *   { 'user': 'fred',   'age': 30 },\n     *   { 'user': 'barney', 'age': 34 }\n     * ];\n     *\n     * _.sortBy(users, [function(o) { return o.user; }]);\n     * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 30]]\n     *\n     * _.sortBy(users, ['user', 'age']);\n     * // => objects for [['barney', 34], ['barney', 36], ['fred', 30], ['fred', 48]]\n     */\n    var sortBy = baseRest(function(collection, iteratees) {\n      if (collection == null) {\n        return [];\n      }\n      var length = iteratees.length;\n      if (length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) {\n        iteratees = [];\n      } else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) {\n        iteratees = [iteratees[0]];\n      }\n      return baseOrderBy(collection, baseFlatten(iteratees, 1), []);\n    });\n\n    /*------------------------------------------------------------------------*/\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     */\n    var now = ctxNow || function() {\n      return root.Date.now();\n    };\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * The opposite of `_.before`; this method creates a function that invokes\n     * `func` once it's called `n` or more times.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {number} n The number of calls before `func` is invoked.\n     * @param {Function} func The function to restrict.\n     * @returns {Function} Returns the new restricted function.\n     * @example\n     *\n     * var saves = ['profile', 'settings'];\n     *\n     * var done = _.after(saves.length, function() {\n     *   console.log('done saving!');\n     * });\n     *\n     * _.forEach(saves, function(type) {\n     *   asyncSave({ 'type': type, 'complete': done });\n     * });\n     * // => Logs 'done saving!' after the two async saves have completed.\n     */\n    function after(n, func) {\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      n = toInteger(n);\n      return function() {\n        if (--n < 1) {\n          return func.apply(this, arguments);\n        }\n      };\n    }\n\n    /**\n     * Creates a function that invokes `func`, with up to `n` arguments,\n     * ignoring any additional arguments.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Function\n     * @param {Function} func The function to cap arguments for.\n     * @param {number} [n=func.length] The arity cap.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Function} Returns the new capped function.\n     * @example\n     *\n     * _.map(['6', '8', '10'], _.ary(parseInt, 1));\n     * // => [6, 8, 10]\n     */\n    function ary(func, n, guard) {\n      n = guard ? undefined : n;\n      n = (func && n == null) ? func.length : n;\n      return createWrap(func, WRAP_ARY_FLAG, undefined, undefined, undefined, undefined, n);\n    }\n\n    /**\n     * Creates a function that invokes `func`, with the `this` binding and arguments\n     * of the created function, while it's called less than `n` times. Subsequent\n     * calls to the created function return the result of the last `func` invocation.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Function\n     * @param {number} n The number of calls at which `func` is no longer invoked.\n     * @param {Function} func The function to restrict.\n     * @returns {Function} Returns the new restricted function.\n     * @example\n     *\n     * jQuery(element).on('click', _.before(5, addContactToList));\n     * // => Allows adding up to 4 contacts to the list.\n     */\n    function before(n, func) {\n      var result;\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      n = toInteger(n);\n      return function() {\n        if (--n > 0) {\n          result = func.apply(this, arguments);\n        }\n        if (n <= 1) {\n          func = undefined;\n        }\n        return result;\n      };\n    }\n\n    /**\n     * Creates a function that invokes `func` with the `this` binding of `thisArg`\n     * and `partials` prepended to the arguments it receives.\n     *\n     * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds,\n     * may be used as a placeholder for partially applied arguments.\n     *\n     * **Note:** Unlike native `Function#bind`, this method doesn't set the \"length\"\n     * property of bound functions.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to bind.\n     * @param {*} thisArg The `this` binding of `func`.\n     * @param {...*} [partials] The arguments to be partially applied.\n     * @returns {Function} Returns the new bound function.\n     * @example\n     *\n     * function greet(greeting, punctuation) {\n     *   return greeting + ' ' + this.user + punctuation;\n     * }\n     *\n     * var object = { 'user': 'fred' };\n     *\n     * var bound = _.bind(greet, object, 'hi');\n     * bound('!');\n     * // => 'hi fred!'\n     *\n     * // Bound with placeholders.\n     * var bound = _.bind(greet, object, _, '!');\n     * bound('hi');\n     * // => 'hi fred!'\n     */\n    var bind = baseRest(function(func, thisArg, partials) {\n      var bitmask = WRAP_BIND_FLAG;\n      if (partials.length) {\n        var holders = replaceHolders(partials, getHolder(bind));\n        bitmask |= WRAP_PARTIAL_FLAG;\n      }\n      return createWrap(func, bitmask, thisArg, partials, holders);\n    });\n\n    /**\n     * Creates a function that invokes the method at `object[key]` with `partials`\n     * prepended to the arguments it receives.\n     *\n     * This method differs from `_.bind` by allowing bound functions to reference\n     * methods that may be redefined or don't yet exist. See\n     * [Peter Michaux's article](http://peter.michaux.ca/articles/lazy-function-definition-pattern)\n     * for more details.\n     *\n     * The `_.bindKey.placeholder` value, which defaults to `_` in monolithic\n     * builds, may be used as a placeholder for partially applied arguments.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.10.0\n     * @category Function\n     * @param {Object} object The object to invoke the method on.\n     * @param {string} key The key of the method.\n     * @param {...*} [partials] The arguments to be partially applied.\n     * @returns {Function} Returns the new bound function.\n     * @example\n     *\n     * var object = {\n     *   'user': 'fred',\n     *   'greet': function(greeting, punctuation) {\n     *     return greeting + ' ' + this.user + punctuation;\n     *   }\n     * };\n     *\n     * var bound = _.bindKey(object, 'greet', 'hi');\n     * bound('!');\n     * // => 'hi fred!'\n     *\n     * object.greet = function(greeting, punctuation) {\n     *   return greeting + 'ya ' + this.user + punctuation;\n     * };\n     *\n     * bound('!');\n     * // => 'hiya fred!'\n     *\n     * // Bound with placeholders.\n     * var bound = _.bindKey(object, 'greet', _, '!');\n     * bound('hi');\n     * // => 'hiya fred!'\n     */\n    var bindKey = baseRest(function(object, key, partials) {\n      var bitmask = WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG;\n      if (partials.length) {\n        var holders = replaceHolders(partials, getHolder(bindKey));\n        bitmask |= WRAP_PARTIAL_FLAG;\n      }\n      return createWrap(key, bitmask, object, partials, holders);\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     */\n    function curry(func, arity, guard) {\n      arity = guard ? undefined : arity;\n      var result = createWrap(func, WRAP_CURRY_FLAG, undefined, undefined, undefined, undefined, undefined, arity);\n      result.placeholder = curry.placeholder;\n      return result;\n    }\n\n    /**\n     * This method is like `_.curry` except that arguments are applied to `func`\n     * in the manner of `_.partialRight` instead of `_.partial`.\n     *\n     * The `_.curryRight.placeholder` value, which defaults to `_` in monolithic\n     * builds, 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 3.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 = _.curryRight(abc);\n     *\n     * curried(3)(2)(1);\n     * // => [1, 2, 3]\n     *\n     * curried(2, 3)(1);\n     * // => [1, 2, 3]\n     *\n     * curried(1, 2, 3);\n     * // => [1, 2, 3]\n     *\n     * // Curried with placeholders.\n     * curried(3)(1, _)(2);\n     * // => [1, 2, 3]\n     */\n    function curryRight(func, arity, guard) {\n      arity = guard ? undefined : arity;\n      var result = createWrap(func, WRAP_CURRY_RIGHT_FLAG, undefined, undefined, undefined, undefined, undefined, arity);\n      result.placeholder = curryRight.placeholder;\n      return result;\n    }\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     */\n    function 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\n    /**\n     * Defers invoking the `func` until the current call stack has cleared. Any\n     * additional arguments are provided to `func` when it's invoked.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to defer.\n     * @param {...*} [args] The arguments to invoke `func` with.\n     * @returns {number} Returns the timer id.\n     * @example\n     *\n     * _.defer(function(text) {\n     *   console.log(text);\n     * }, 'deferred');\n     * // => Logs 'deferred' after one millisecond.\n     */\n    var defer = baseRest(function(func, args) {\n      return baseDelay(func, 1, args);\n    });\n\n    /**\n     * Invokes `func` after `wait` milliseconds. Any additional arguments are\n     * provided to `func` when it's invoked.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to delay.\n     * @param {number} wait The number of milliseconds to delay invocation.\n     * @param {...*} [args] The arguments to invoke `func` with.\n     * @returns {number} Returns the timer id.\n     * @example\n     *\n     * _.delay(function(text) {\n     *   console.log(text);\n     * }, 1000, 'later');\n     * // => Logs 'later' after one second.\n     */\n    var delay = baseRest(function(func, wait, args) {\n      return baseDelay(func, toNumber(wait) || 0, args);\n    });\n\n    /**\n     * Creates a function that invokes `func` with arguments reversed.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Function\n     * @param {Function} func The function to flip arguments for.\n     * @returns {Function} Returns the new flipped function.\n     * @example\n     *\n     * var flipped = _.flip(function() {\n     *   return _.toArray(arguments);\n     * });\n     *\n     * flipped('a', 'b', 'c', 'd');\n     * // => ['d', 'c', 'b', 'a']\n     */\n    function flip(func) {\n      return createWrap(func, WRAP_FLIP_FLAG);\n    }\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     */\n    function 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`.\n    memoize.Cache = MapCache;\n\n    /**\n     * Creates a function that negates the result of the predicate `func`. The\n     * `func` predicate is invoked with the `this` binding and arguments of the\n     * created function.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Function\n     * @param {Function} predicate The predicate to negate.\n     * @returns {Function} Returns the new negated function.\n     * @example\n     *\n     * function isEven(n) {\n     *   return n % 2 == 0;\n     * }\n     *\n     * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven));\n     * // => [1, 3, 5]\n     */\n    function negate(predicate) {\n      if (typeof predicate != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      return function() {\n        var args = arguments;\n        switch (args.length) {\n          case 0: return !predicate.call(this);\n          case 1: return !predicate.call(this, args[0]);\n          case 2: return !predicate.call(this, args[0], args[1]);\n          case 3: return !predicate.call(this, args[0], args[1], args[2]);\n        }\n        return !predicate.apply(this, args);\n      };\n    }\n\n    /**\n     * Creates a function that is restricted to invoking `func` once. Repeat calls\n     * to the function return the value of the first invocation. The `func` is\n     * invoked with the `this` binding and arguments of the created function.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to restrict.\n     * @returns {Function} Returns the new restricted function.\n     * @example\n     *\n     * var initialize = _.once(createApplication);\n     * initialize();\n     * initialize();\n     * // => `createApplication` is invoked once\n     */\n    function once(func) {\n      return before(2, func);\n    }\n\n    /**\n     * Creates a function that invokes `func` with its arguments transformed.\n     *\n     * @static\n     * @since 4.0.0\n     * @memberOf _\n     * @category Function\n     * @param {Function} func The function to wrap.\n     * @param {...(Function|Function[])} [transforms=[_.identity]]\n     *  The argument transforms.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * function doubled(n) {\n     *   return n * 2;\n     * }\n     *\n     * function square(n) {\n     *   return n * n;\n     * }\n     *\n     * var func = _.overArgs(function(x, y) {\n     *   return [x, y];\n     * }, [square, doubled]);\n     *\n     * func(9, 3);\n     * // => [81, 6]\n     *\n     * func(10, 5);\n     * // => [100, 10]\n     */\n    var overArgs = castRest(function(func, transforms) {\n      transforms = (transforms.length == 1 && isArray(transforms[0]))\n        ? arrayMap(transforms[0], baseUnary(getIteratee()))\n        : arrayMap(baseFlatten(transforms, 1), baseUnary(getIteratee()));\n\n      var funcsLength = transforms.length;\n      return baseRest(function(args) {\n        var index = -1,\n            length = nativeMin(args.length, funcsLength);\n\n        while (++index < length) {\n          args[index] = transforms[index].call(this, args[index]);\n        }\n        return apply(func, this, args);\n      });\n    });\n\n    /**\n     * Creates a function that invokes `func` with `partials` prepended to the\n     * arguments it receives. This method is like `_.bind` except it does **not**\n     * alter the `this` binding.\n     *\n     * The `_.partial.placeholder` value, which defaults to `_` in monolithic\n     * builds, may be used as a placeholder for partially applied arguments.\n     *\n     * **Note:** This method doesn't set the \"length\" property of partially\n     * applied functions.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.2.0\n     * @category Function\n     * @param {Function} func The function to partially apply arguments to.\n     * @param {...*} [partials] The arguments to be partially applied.\n     * @returns {Function} Returns the new partially applied function.\n     * @example\n     *\n     * function greet(greeting, name) {\n     *   return greeting + ' ' + name;\n     * }\n     *\n     * var sayHelloTo = _.partial(greet, 'hello');\n     * sayHelloTo('fred');\n     * // => 'hello fred'\n     *\n     * // Partially applied with placeholders.\n     * var greetFred = _.partial(greet, _, 'fred');\n     * greetFred('hi');\n     * // => 'hi fred'\n     */\n    var partial = baseRest(function(func, partials) {\n      var holders = replaceHolders(partials, getHolder(partial));\n      return createWrap(func, WRAP_PARTIAL_FLAG, undefined, partials, holders);\n    });\n\n    /**\n     * This method is like `_.partial` except that partially applied arguments\n     * are appended to the arguments it receives.\n     *\n     * The `_.partialRight.placeholder` value, which defaults to `_` in monolithic\n     * builds, may be used as a placeholder for partially applied arguments.\n     *\n     * **Note:** This method doesn't set the \"length\" property of partially\n     * applied functions.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.0.0\n     * @category Function\n     * @param {Function} func The function to partially apply arguments to.\n     * @param {...*} [partials] The arguments to be partially applied.\n     * @returns {Function} Returns the new partially applied function.\n     * @example\n     *\n     * function greet(greeting, name) {\n     *   return greeting + ' ' + name;\n     * }\n     *\n     * var greetFred = _.partialRight(greet, 'fred');\n     * greetFred('hi');\n     * // => 'hi fred'\n     *\n     * // Partially applied with placeholders.\n     * var sayHelloTo = _.partialRight(greet, 'hello', _);\n     * sayHelloTo('fred');\n     * // => 'hello fred'\n     */\n    var partialRight = baseRest(function(func, partials) {\n      var holders = replaceHolders(partials, getHolder(partialRight));\n      return createWrap(func, WRAP_PARTIAL_RIGHT_FLAG, undefined, partials, holders);\n    });\n\n    /**\n     * Creates a function that invokes `func` with arguments arranged according\n     * to the specified `indexes` where the argument value at the first index is\n     * provided as the first argument, the argument value at the second index is\n     * provided as the second argument, and so on.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Function\n     * @param {Function} func The function to rearrange arguments for.\n     * @param {...(number|number[])} indexes The arranged argument indexes.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var rearged = _.rearg(function(a, b, c) {\n     *   return [a, b, c];\n     * }, [2, 0, 1]);\n     *\n     * rearged('b', 'c', 'a')\n     * // => ['a', 'b', 'c']\n     */\n    var rearg = flatRest(function(func, indexes) {\n      return createWrap(func, WRAP_REARG_FLAG, undefined, undefined, undefined, indexes);\n    });\n\n    /**\n     * Creates a function that invokes `func` with the `this` binding of the\n     * created function and arguments from `start` and beyond provided as\n     * an array.\n     *\n     * **Note:** This method is based on the\n     * [rest parameter](https://mdn.io/rest_parameters).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Function\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     * @example\n     *\n     * var say = _.rest(function(what, names) {\n     *   return what + ' ' + _.initial(names).join(', ') +\n     *     (_.size(names) > 1 ? ', & ' : '') + _.last(names);\n     * });\n     *\n     * say('hello', 'fred', 'barney', 'pebbles');\n     * // => 'hello fred, barney, & pebbles'\n     */\n    function rest(func, start) {\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      start = start === undefined ? start : toInteger(start);\n      return baseRest(func, start);\n    }\n\n    /**\n     * Creates a function that invokes `func` with the `this` binding of the\n     * create function and an array of arguments much like\n     * [`Function#apply`](http://www.ecma-international.org/ecma-262/7.0/#sec-function.prototype.apply).\n     *\n     * **Note:** This method is based on the\n     * [spread operator](https://mdn.io/spread_operator).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.2.0\n     * @category Function\n     * @param {Function} func The function to spread arguments over.\n     * @param {number} [start=0] The start position of the spread.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var say = _.spread(function(who, what) {\n     *   return who + ' says ' + what;\n     * });\n     *\n     * say(['fred', 'hello']);\n     * // => 'fred says hello'\n     *\n     * var numbers = Promise.all([\n     *   Promise.resolve(40),\n     *   Promise.resolve(36)\n     * ]);\n     *\n     * numbers.then(_.spread(function(x, y) {\n     *   return x + y;\n     * }));\n     * // => a Promise of 76\n     */\n    function spread(func, start) {\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      start = start == null ? 0 : nativeMax(toInteger(start), 0);\n      return baseRest(function(args) {\n        var array = args[start],\n            otherArgs = castSlice(args, 0, start);\n\n        if (array) {\n          arrayPush(otherArgs, array);\n        }\n        return apply(func, this, otherArgs);\n      });\n    }\n\n    /**\n     * Creates a throttled function that only invokes `func` at most once per\n     * every `wait` milliseconds. The throttled function comes with a `cancel`\n     * method to cancel delayed `func` invocations and a `flush` method to\n     * immediately invoke them. Provide `options` to indicate whether `func`\n     * should be invoked on the leading and/or trailing edge of the `wait`\n     * timeout. The `func` is invoked with the last arguments provided to the\n     * throttled function. Subsequent calls to the throttled function return the\n     * result of the last `func` 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 throttled 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 `_.throttle` and `_.debounce`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to throttle.\n     * @param {number} [wait=0] The number of milliseconds to throttle invocations to.\n     * @param {Object} [options={}] The options object.\n     * @param {boolean} [options.leading=true]\n     *  Specify invoking on the leading edge of the timeout.\n     * @param {boolean} [options.trailing=true]\n     *  Specify invoking on the trailing edge of the timeout.\n     * @returns {Function} Returns the new throttled function.\n     * @example\n     *\n     * // Avoid excessively updating the position while scrolling.\n     * jQuery(window).on('scroll', _.throttle(updatePosition, 100));\n     *\n     * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.\n     * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });\n     * jQuery(element).on('click', throttled);\n     *\n     * // Cancel the trailing throttled invocation.\n     * jQuery(window).on('popstate', throttled.cancel);\n     */\n    function throttle(func, wait, options) {\n      var leading = true,\n          trailing = true;\n\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      if (isObject(options)) {\n        leading = 'leading' in options ? !!options.leading : leading;\n        trailing = 'trailing' in options ? !!options.trailing : trailing;\n      }\n      return debounce(func, wait, {\n        'leading': leading,\n        'maxWait': wait,\n        'trailing': trailing\n      });\n    }\n\n    /**\n     * Creates a function that accepts up to one argument, ignoring any\n     * additional arguments.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Function\n     * @param {Function} func The function to cap arguments for.\n     * @returns {Function} Returns the new capped function.\n     * @example\n     *\n     * _.map(['6', '8', '10'], _.unary(parseInt));\n     * // => [6, 8, 10]\n     */\n    function unary(func) {\n      return ary(func, 1);\n    }\n\n    /**\n     * Creates a function that provides `value` to `wrapper` as its first\n     * argument. Any additional arguments provided to the function are appended\n     * to those provided to the `wrapper`. The wrapper is invoked with the `this`\n     * binding of the created function.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {*} value The value to wrap.\n     * @param {Function} [wrapper=identity] The wrapper function.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var p = _.wrap(_.escape, function(func, text) {\n     *   return '<p>' + func(text) + '</p>';\n     * });\n     *\n     * p('fred, barney, & pebbles');\n     * // => '<p>fred, barney, &amp; pebbles</p>'\n     */\n    function wrap(value, wrapper) {\n      return partial(castFunction(wrapper), value);\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Casts `value` as an array if it's not one.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.4.0\n     * @category Lang\n     * @param {*} value The value to inspect.\n     * @returns {Array} Returns the cast array.\n     * @example\n     *\n     * _.castArray(1);\n     * // => [1]\n     *\n     * _.castArray({ 'a': 1 });\n     * // => [{ 'a': 1 }]\n     *\n     * _.castArray('abc');\n     * // => ['abc']\n     *\n     * _.castArray(null);\n     * // => [null]\n     *\n     * _.castArray(undefined);\n     * // => [undefined]\n     *\n     * _.castArray();\n     * // => []\n     *\n     * var array = [1, 2, 3];\n     * console.log(_.castArray(array) === array);\n     * // => true\n     */\n    function castArray() {\n      if (!arguments.length) {\n        return [];\n      }\n      var value = arguments[0];\n      return isArray(value) ? value : [value];\n    }\n\n    /**\n     * Creates a shallow clone of `value`.\n     *\n     * **Note:** This method is loosely based on the\n     * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm)\n     * and supports cloning arrays, array buffers, booleans, date objects, maps,\n     * numbers, `Object` objects, regexes, sets, strings, symbols, and typed\n     * arrays. The own enumerable properties of `arguments` objects are cloned\n     * as plain objects. An empty object is returned for uncloneable values such\n     * as error objects, functions, DOM nodes, and WeakMaps.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to clone.\n     * @returns {*} Returns the cloned value.\n     * @see _.cloneDeep\n     * @example\n     *\n     * var objects = [{ 'a': 1 }, { 'b': 2 }];\n     *\n     * var shallow = _.clone(objects);\n     * console.log(shallow[0] === objects[0]);\n     * // => true\n     */\n    function clone(value) {\n      return baseClone(value, CLONE_SYMBOLS_FLAG);\n    }\n\n    /**\n     * This method is like `_.clone` except that it accepts `customizer` which\n     * is invoked to produce the cloned value. If `customizer` returns `undefined`,\n     * cloning is handled by the method instead. The `customizer` is invoked with\n     * up to four arguments; (value [, index|key, object, stack]).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to clone.\n     * @param {Function} [customizer] The function to customize cloning.\n     * @returns {*} Returns the cloned value.\n     * @see _.cloneDeepWith\n     * @example\n     *\n     * function customizer(value) {\n     *   if (_.isElement(value)) {\n     *     return value.cloneNode(false);\n     *   }\n     * }\n     *\n     * var el = _.cloneWith(document.body, customizer);\n     *\n     * console.log(el === document.body);\n     * // => false\n     * console.log(el.nodeName);\n     * // => 'BODY'\n     * console.log(el.childNodes.length);\n     * // => 0\n     */\n    function cloneWith(value, customizer) {\n      customizer = typeof customizer == 'function' ? customizer : undefined;\n      return baseClone(value, CLONE_SYMBOLS_FLAG, customizer);\n    }\n\n    /**\n     * This method is like `_.clone` except that it recursively clones `value`.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.0.0\n     * @category Lang\n     * @param {*} value The value to recursively clone.\n     * @returns {*} Returns the deep cloned value.\n     * @see _.clone\n     * @example\n     *\n     * var objects = [{ 'a': 1 }, { 'b': 2 }];\n     *\n     * var deep = _.cloneDeep(objects);\n     * console.log(deep[0] === objects[0]);\n     * // => false\n     */\n    function cloneDeep(value) {\n      return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG);\n    }\n\n    /**\n     * This method is like `_.cloneWith` except that it recursively clones `value`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to recursively clone.\n     * @param {Function} [customizer] The function to customize cloning.\n     * @returns {*} Returns the deep cloned value.\n     * @see _.cloneWith\n     * @example\n     *\n     * function customizer(value) {\n     *   if (_.isElement(value)) {\n     *     return value.cloneNode(true);\n     *   }\n     * }\n     *\n     * var el = _.cloneDeepWith(document.body, customizer);\n     *\n     * console.log(el === document.body);\n     * // => false\n     * console.log(el.nodeName);\n     * // => 'BODY'\n     * console.log(el.childNodes.length);\n     * // => 20\n     */\n    function cloneDeepWith(value, customizer) {\n      customizer = typeof customizer == 'function' ? customizer : undefined;\n      return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG, customizer);\n    }\n\n    /**\n     * Checks if `object` conforms to `source` by invoking the predicate\n     * properties of `source` with the corresponding property values of `object`.\n     *\n     * **Note:** This method is equivalent to `_.conforms` when `source` is\n     * partially applied.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.14.0\n     * @category Lang\n     * @param {Object} object The object to inspect.\n     * @param {Object} source The object of property predicates to conform to.\n     * @returns {boolean} Returns `true` if `object` conforms, else `false`.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': 2 };\n     *\n     * _.conformsTo(object, { 'b': function(n) { return n > 1; } });\n     * // => true\n     *\n     * _.conformsTo(object, { 'b': function(n) { return n > 2; } });\n     * // => false\n     */\n    function conformsTo(object, source) {\n      return source == null || baseConformsTo(object, source, keys(source));\n    }\n\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     */\n    function eq(value, other) {\n      return value === other || (value !== value && other !== other);\n    }\n\n    /**\n     * Checks if `value` is greater than `other`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.9.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 `value` is greater than `other`,\n     *  else `false`.\n     * @see _.lt\n     * @example\n     *\n     * _.gt(3, 1);\n     * // => true\n     *\n     * _.gt(3, 3);\n     * // => false\n     *\n     * _.gt(1, 3);\n     * // => false\n     */\n    var gt = createRelationalOperation(baseGt);\n\n    /**\n     * Checks if `value` is greater than or equal to `other`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.9.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 `value` is greater than or equal to\n     *  `other`, else `false`.\n     * @see _.lte\n     * @example\n     *\n     * _.gte(3, 1);\n     * // => true\n     *\n     * _.gte(3, 3);\n     * // => true\n     *\n     * _.gte(1, 3);\n     * // => false\n     */\n    var gte = createRelationalOperation(function(value, other) {\n      return value >= other;\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     */\n    var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n      return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n        !propertyIsEnumerable.call(value, 'callee');\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     */\n    var isArray = Array.isArray;\n\n    /**\n     * Checks if `value` is classified as an `ArrayBuffer` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.3.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.\n     * @example\n     *\n     * _.isArrayBuffer(new ArrayBuffer(2));\n     * // => true\n     *\n     * _.isArrayBuffer(new Array(2));\n     * // => false\n     */\n    var isArrayBuffer = nodeIsArrayBuffer ? baseUnary(nodeIsArrayBuffer) : baseIsArrayBuffer;\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     */\n    function 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     */\n    function isArrayLikeObject(value) {\n      return isObjectLike(value) && isArrayLike(value);\n    }\n\n    /**\n     * Checks if `value` is classified as a boolean primitive or 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 boolean, else `false`.\n     * @example\n     *\n     * _.isBoolean(false);\n     * // => true\n     *\n     * _.isBoolean(null);\n     * // => false\n     */\n    function isBoolean(value) {\n      return value === true || value === false ||\n        (isObjectLike(value) && baseGetTag(value) == boolTag);\n    }\n\n    /**\n     * Checks if `value` is a buffer.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.3.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n     * @example\n     *\n     * _.isBuffer(new Buffer(2));\n     * // => true\n     *\n     * _.isBuffer(new Uint8Array(2));\n     * // => false\n     */\n    var isBuffer = nativeIsBuffer || stubFalse;\n\n    /**\n     * Checks if `value` is classified as a `Date` 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 date object, else `false`.\n     * @example\n     *\n     * _.isDate(new Date);\n     * // => true\n     *\n     * _.isDate('Mon April 23 2012');\n     * // => false\n     */\n    var isDate = nodeIsDate ? baseUnary(nodeIsDate) : baseIsDate;\n\n    /**\n     * Checks if `value` is likely a DOM element.\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 DOM element, else `false`.\n     * @example\n     *\n     * _.isElement(document.body);\n     * // => true\n     *\n     * _.isElement('<body>');\n     * // => false\n     */\n    function isElement(value) {\n      return isObjectLike(value) && value.nodeType === 1 && !isPlainObject(value);\n    }\n\n    /**\n     * Checks if `value` is an empty object, collection, map, or set.\n     *\n     * Objects are considered empty if they have no own enumerable string keyed\n     * properties.\n     *\n     * Array-like values such as `arguments` objects, arrays, buffers, strings, or\n     * jQuery-like collections are considered empty if they have a `length` of `0`.\n     * Similarly, maps and sets are considered empty if they have a `size` of `0`.\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 empty, else `false`.\n     * @example\n     *\n     * _.isEmpty(null);\n     * // => true\n     *\n     * _.isEmpty(true);\n     * // => true\n     *\n     * _.isEmpty(1);\n     * // => true\n     *\n     * _.isEmpty([1, 2, 3]);\n     * // => false\n     *\n     * _.isEmpty({ 'a': 1 });\n     * // => false\n     */\n    function isEmpty(value) {\n      if (value == null) {\n        return true;\n      }\n      if (isArrayLike(value) &&\n          (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' ||\n            isBuffer(value) || isTypedArray(value) || isArguments(value))) {\n        return !value.length;\n      }\n      var tag = getTag(value);\n      if (tag == mapTag || tag == setTag) {\n        return !value.size;\n      }\n      if (isPrototype(value)) {\n        return !baseKeys(value).length;\n      }\n      for (var key in value) {\n        if (hasOwnProperty.call(value, key)) {\n          return false;\n        }\n      }\n      return true;\n    }\n\n    /**\n     * Performs a deep comparison between two values to determine if they are\n     * equivalent.\n     *\n     * **Note:** This method supports comparing arrays, array buffers, booleans,\n     * date objects, error objects, maps, numbers, `Object` objects, regexes,\n     * sets, strings, symbols, and typed arrays. `Object` objects are compared\n     * by their own, not inherited, enumerable properties. Functions and DOM\n     * nodes are compared by strict equality, i.e. `===`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.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     * _.isEqual(object, other);\n     * // => true\n     *\n     * object === other;\n     * // => false\n     */\n    function isEqual(value, other) {\n      return baseIsEqual(value, other);\n    }\n\n    /**\n     * This method is like `_.isEqual` except that it accepts `customizer` which\n     * is invoked to compare values. If `customizer` returns `undefined`, comparisons\n     * are handled by the method instead. The `customizer` is invoked with up to\n     * six arguments: (objValue, othValue [, index|key, object, other, stack]).\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     * @param {Function} [customizer] The function to customize comparisons.\n     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n     * @example\n     *\n     * function isGreeting(value) {\n     *   return /^h(?:i|ello)$/.test(value);\n     * }\n     *\n     * function customizer(objValue, othValue) {\n     *   if (isGreeting(objValue) && isGreeting(othValue)) {\n     *     return true;\n     *   }\n     * }\n     *\n     * var array = ['hello', 'goodbye'];\n     * var other = ['hi', 'goodbye'];\n     *\n     * _.isEqualWith(array, other, customizer);\n     * // => true\n     */\n    function isEqualWith(value, other, customizer) {\n      customizer = typeof customizer == 'function' ? customizer : undefined;\n      var result = customizer ? customizer(value, other) : undefined;\n      return result === undefined ? baseIsEqual(value, other, undefined, customizer) : !!result;\n    }\n\n    /**\n     * Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`,\n     * `SyntaxError`, `TypeError`, or `URIError` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an error object, else `false`.\n     * @example\n     *\n     * _.isError(new Error);\n     * // => true\n     *\n     * _.isError(Error);\n     * // => false\n     */\n    function isError(value) {\n      if (!isObjectLike(value)) {\n        return false;\n      }\n      var tag = baseGetTag(value);\n      return tag == errorTag || tag == domExcTag ||\n        (typeof value.message == 'string' && typeof value.name == 'string' && !isPlainObject(value));\n    }\n\n    /**\n     * Checks if `value` is a finite primitive number.\n     *\n     * **Note:** This method is based on\n     * [`Number.isFinite`](https://mdn.io/Number/isFinite).\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 finite number, else `false`.\n     * @example\n     *\n     * _.isFinite(3);\n     * // => true\n     *\n     * _.isFinite(Number.MIN_VALUE);\n     * // => true\n     *\n     * _.isFinite(Infinity);\n     * // => false\n     *\n     * _.isFinite('3');\n     * // => false\n     */\n    function isFinite(value) {\n      return typeof value == 'number' && nativeIsFinite(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     */\n    function 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\n    /**\n     * Checks if `value` is an integer.\n     *\n     * **Note:** This method is based on\n     * [`Number.isInteger`](https://mdn.io/Number/isInteger).\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 integer, else `false`.\n     * @example\n     *\n     * _.isInteger(3);\n     * // => true\n     *\n     * _.isInteger(Number.MIN_VALUE);\n     * // => false\n     *\n     * _.isInteger(Infinity);\n     * // => false\n     *\n     * _.isInteger('3');\n     * // => false\n     */\n    function isInteger(value) {\n      return typeof value == 'number' && value == toInteger(value);\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     */\n    function 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     */\n    function isObject(value) {\n      var type = typeof value;\n      return value != null && (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     */\n    function isObjectLike(value) {\n      return value != null && typeof value == 'object';\n    }\n\n    /**\n     * Checks if `value` is classified as a `Map` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.3.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n     * @example\n     *\n     * _.isMap(new Map);\n     * // => true\n     *\n     * _.isMap(new WeakMap);\n     * // => false\n     */\n    var isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;\n\n    /**\n     * Performs a partial deep comparison between `object` and `source` to\n     * determine if `object` contains equivalent property values.\n     *\n     * **Note:** This method is equivalent to `_.matches` when `source` is\n     * partially applied.\n     *\n     * Partial comparisons will match empty array and empty object `source`\n     * values against any array or object value, respectively. See `_.isEqual`\n     * for a list of supported value comparisons.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Lang\n     * @param {Object} object The object to inspect.\n     * @param {Object} source The object of property values to match.\n     * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': 2 };\n     *\n     * _.isMatch(object, { 'b': 2 });\n     * // => true\n     *\n     * _.isMatch(object, { 'b': 1 });\n     * // => false\n     */\n    function isMatch(object, source) {\n      return object === source || baseIsMatch(object, source, getMatchData(source));\n    }\n\n    /**\n     * This method is like `_.isMatch` except that it accepts `customizer` which\n     * is invoked to compare values. If `customizer` returns `undefined`, comparisons\n     * are handled by the method instead. The `customizer` is invoked with five\n     * arguments: (objValue, srcValue, index|key, object, source).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {Object} object The object to inspect.\n     * @param {Object} source The object of property values to match.\n     * @param {Function} [customizer] The function to customize comparisons.\n     * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n     * @example\n     *\n     * function isGreeting(value) {\n     *   return /^h(?:i|ello)$/.test(value);\n     * }\n     *\n     * function customizer(objValue, srcValue) {\n     *   if (isGreeting(objValue) && isGreeting(srcValue)) {\n     *     return true;\n     *   }\n     * }\n     *\n     * var object = { 'greeting': 'hello' };\n     * var source = { 'greeting': 'hi' };\n     *\n     * _.isMatchWith(object, source, customizer);\n     * // => true\n     */\n    function isMatchWith(object, source, customizer) {\n      customizer = typeof customizer == 'function' ? customizer : undefined;\n      return baseIsMatch(object, source, getMatchData(source), customizer);\n    }\n\n    /**\n     * Checks if `value` is `NaN`.\n     *\n     * **Note:** This method is based on\n     * [`Number.isNaN`](https://mdn.io/Number/isNaN) and is not the same as\n     * global [`isNaN`](https://mdn.io/isNaN) which returns `true` for\n     * `undefined` and other non-number values.\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 `NaN`, else `false`.\n     * @example\n     *\n     * _.isNaN(NaN);\n     * // => true\n     *\n     * _.isNaN(new Number(NaN));\n     * // => true\n     *\n     * isNaN(undefined);\n     * // => true\n     *\n     * _.isNaN(undefined);\n     * // => false\n     */\n    function isNaN(value) {\n      // An `NaN` primitive is the only value that is not equal to itself.\n      // Perform the `toStringTag` check first to avoid errors with some\n      // ActiveX objects in IE.\n      return isNumber(value) && value != +value;\n    }\n\n    /**\n     * Checks if `value` is a pristine native function.\n     *\n     * **Note:** This method can't reliably detect native functions in the presence\n     * of the core-js package because core-js circumvents this kind of detection.\n     * Despite multiple requests, the core-js maintainer has made it clear: any\n     * attempt to fix the detection will be obstructed. As a result, we're left\n     * with little choice but to throw an error. Unfortunately, this also affects\n     * packages, like [babel-polyfill](https://www.npmjs.com/package/babel-polyfill),\n     * which rely on core-js.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a native function,\n     *  else `false`.\n     * @example\n     *\n     * _.isNative(Array.prototype.push);\n     * // => true\n     *\n     * _.isNative(_);\n     * // => false\n     */\n    function isNative(value) {\n      if (isMaskable(value)) {\n        throw new Error(CORE_ERROR_TEXT);\n      }\n      return baseIsNative(value);\n    }\n\n    /**\n     * Checks if `value` is `null`.\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 `null`, else `false`.\n     * @example\n     *\n     * _.isNull(null);\n     * // => true\n     *\n     * _.isNull(void 0);\n     * // => false\n     */\n    function isNull(value) {\n      return value === null;\n    }\n\n    /**\n     * Checks if `value` is `null` or `undefined`.\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 nullish, else `false`.\n     * @example\n     *\n     * _.isNil(null);\n     * // => true\n     *\n     * _.isNil(void 0);\n     * // => true\n     *\n     * _.isNil(NaN);\n     * // => false\n     */\n    function isNil(value) {\n      return value == null;\n    }\n\n    /**\n     * Checks if `value` is classified as a `Number` primitive or object.\n     *\n     * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are\n     * classified as numbers, use the `_.isFinite` method.\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 number, else `false`.\n     * @example\n     *\n     * _.isNumber(3);\n     * // => true\n     *\n     * _.isNumber(Number.MIN_VALUE);\n     * // => true\n     *\n     * _.isNumber(Infinity);\n     * // => true\n     *\n     * _.isNumber('3');\n     * // => false\n     */\n    function isNumber(value) {\n      return typeof value == 'number' ||\n        (isObjectLike(value) && baseGetTag(value) == numberTag);\n    }\n\n    /**\n     * Checks if `value` is a plain object, that is, an object created by the\n     * `Object` constructor or one with a `[[Prototype]]` of `null`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.8.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     * }\n     *\n     * _.isPlainObject(new Foo);\n     * // => false\n     *\n     * _.isPlainObject([1, 2, 3]);\n     * // => false\n     *\n     * _.isPlainObject({ 'x': 0, 'y': 0 });\n     * // => true\n     *\n     * _.isPlainObject(Object.create(null));\n     * // => true\n     */\n    function isPlainObject(value) {\n      if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n        return false;\n      }\n      var proto = getPrototype(value);\n      if (proto === null) {\n        return true;\n      }\n      var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n      return typeof Ctor == 'function' && Ctor instanceof Ctor &&\n        funcToString.call(Ctor) == objectCtorString;\n    }\n\n    /**\n     * Checks if `value` is classified as a `RegExp` 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 regexp, else `false`.\n     * @example\n     *\n     * _.isRegExp(/abc/);\n     * // => true\n     *\n     * _.isRegExp('/abc/');\n     * // => false\n     */\n    var isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp;\n\n    /**\n     * Checks if `value` is a safe integer. An integer is safe if it's an IEEE-754\n     * double precision number which isn't the result of a rounded unsafe integer.\n     *\n     * **Note:** This method is based on\n     * [`Number.isSafeInteger`](https://mdn.io/Number/isSafeInteger).\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 safe integer, else `false`.\n     * @example\n     *\n     * _.isSafeInteger(3);\n     * // => true\n     *\n     * _.isSafeInteger(Number.MIN_VALUE);\n     * // => false\n     *\n     * _.isSafeInteger(Infinity);\n     * // => false\n     *\n     * _.isSafeInteger('3');\n     * // => false\n     */\n    function isSafeInteger(value) {\n      return isInteger(value) && value >= -MAX_SAFE_INTEGER && value <= MAX_SAFE_INTEGER;\n    }\n\n    /**\n     * Checks if `value` is classified as a `Set` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.3.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n     * @example\n     *\n     * _.isSet(new Set);\n     * // => true\n     *\n     * _.isSet(new WeakSet);\n     * // => false\n     */\n    var isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;\n\n    /**\n     * Checks if `value` is classified as a `String` primitive or object.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a string, else `false`.\n     * @example\n     *\n     * _.isString('abc');\n     * // => true\n     *\n     * _.isString(1);\n     * // => false\n     */\n    function isString(value) {\n      return typeof value == 'string' ||\n        (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag);\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     */\n    function isSymbol(value) {\n      return typeof value == 'symbol' ||\n        (isObjectLike(value) && baseGetTag(value) == symbolTag);\n    }\n\n    /**\n     * Checks if `value` is classified as a typed array.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n     * @example\n     *\n     * _.isTypedArray(new Uint8Array);\n     * // => true\n     *\n     * _.isTypedArray([]);\n     * // => false\n     */\n    var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\n    /**\n     * Checks if `value` is `undefined`.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`.\n     * @example\n     *\n     * _.isUndefined(void 0);\n     * // => true\n     *\n     * _.isUndefined(null);\n     * // => false\n     */\n    function isUndefined(value) {\n      return value === undefined;\n    }\n\n    /**\n     * Checks if `value` is classified as a `WeakMap` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.3.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a weak map, else `false`.\n     * @example\n     *\n     * _.isWeakMap(new WeakMap);\n     * // => true\n     *\n     * _.isWeakMap(new Map);\n     * // => false\n     */\n    function isWeakMap(value) {\n      return isObjectLike(value) && getTag(value) == weakMapTag;\n    }\n\n    /**\n     * Checks if `value` is classified as a `WeakSet` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.3.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a weak set, else `false`.\n     * @example\n     *\n     * _.isWeakSet(new WeakSet);\n     * // => true\n     *\n     * _.isWeakSet(new Set);\n     * // => false\n     */\n    function isWeakSet(value) {\n      return isObjectLike(value) && baseGetTag(value) == weakSetTag;\n    }\n\n    /**\n     * Checks if `value` is less than `other`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.9.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 `value` is less than `other`,\n     *  else `false`.\n     * @see _.gt\n     * @example\n     *\n     * _.lt(1, 3);\n     * // => true\n     *\n     * _.lt(3, 3);\n     * // => false\n     *\n     * _.lt(3, 1);\n     * // => false\n     */\n    var lt = createRelationalOperation(baseLt);\n\n    /**\n     * Checks if `value` is less than or equal to `other`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.9.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 `value` is less than or equal to\n     *  `other`, else `false`.\n     * @see _.gte\n     * @example\n     *\n     * _.lte(1, 3);\n     * // => true\n     *\n     * _.lte(3, 3);\n     * // => true\n     *\n     * _.lte(3, 1);\n     * // => false\n     */\n    var lte = createRelationalOperation(function(value, other) {\n      return value <= other;\n    });\n\n    /**\n     * Converts `value` to an array.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {Array} Returns the converted array.\n     * @example\n     *\n     * _.toArray({ 'a': 1, 'b': 2 });\n     * // => [1, 2]\n     *\n     * _.toArray('abc');\n     * // => ['a', 'b', 'c']\n     *\n     * _.toArray(1);\n     * // => []\n     *\n     * _.toArray(null);\n     * // => []\n     */\n    function toArray(value) {\n      if (!value) {\n        return [];\n      }\n      if (isArrayLike(value)) {\n        return isString(value) ? stringToArray(value) : copyArray(value);\n      }\n      if (symIterator && value[symIterator]) {\n        return iteratorToArray(value[symIterator]());\n      }\n      var tag = getTag(value),\n          func = tag == mapTag ? mapToArray : (tag == setTag ? setToArray : values);\n\n      return func(value);\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     */\n    function 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     */\n    function 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 an integer suitable for use as the length of an\n     * array-like object.\n     *\n     * **Note:** This method is 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 convert.\n     * @returns {number} Returns the converted integer.\n     * @example\n     *\n     * _.toLength(3.2);\n     * // => 3\n     *\n     * _.toLength(Number.MIN_VALUE);\n     * // => 0\n     *\n     * _.toLength(Infinity);\n     * // => 4294967295\n     *\n     * _.toLength('3.2');\n     * // => 3\n     */\n    function toLength(value) {\n      return value ? baseClamp(toInteger(value), 0, MAX_ARRAY_LENGTH) : 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     */\n    function 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 = baseTrim(value);\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     * Converts `value` to a plain object flattening inherited enumerable string\n     * keyed properties of `value` to own properties of the plain object.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {Object} Returns the converted plain object.\n     * @example\n     *\n     * function Foo() {\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.assign({ 'a': 1 }, new Foo);\n     * // => { 'a': 1, 'b': 2 }\n     *\n     * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));\n     * // => { 'a': 1, 'b': 2, 'c': 3 }\n     */\n    function toPlainObject(value) {\n      return copyObject(value, keysIn(value));\n    }\n\n    /**\n     * Converts `value` to a safe integer. A safe integer can be compared and\n     * represented correctly.\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     * _.toSafeInteger(3.2);\n     * // => 3\n     *\n     * _.toSafeInteger(Number.MIN_VALUE);\n     * // => 0\n     *\n     * _.toSafeInteger(Infinity);\n     * // => 9007199254740991\n     *\n     * _.toSafeInteger('3.2');\n     * // => 3\n     */\n    function toSafeInteger(value) {\n      return value\n        ? baseClamp(toInteger(value), -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER)\n        : (value === 0 ? value : 0);\n    }\n\n    /**\n     * Converts `value` to a string. An empty string is returned for `null`\n     * and `undefined` values. The sign of `-0` is preserved.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {string} Returns the converted string.\n     * @example\n     *\n     * _.toString(null);\n     * // => ''\n     *\n     * _.toString(-0);\n     * // => '-0'\n     *\n     * _.toString([1, 2, 3]);\n     * // => '1,2,3'\n     */\n    function toString(value) {\n      return value == null ? '' : baseToString(value);\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Assigns own enumerable string keyed properties of source objects to the\n     * destination object. Source objects are applied from left to right.\n     * Subsequent sources overwrite property assignments of previous sources.\n     *\n     * **Note:** This method mutates `object` and is loosely based on\n     * [`Object.assign`](https://mdn.io/Object/assign).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.10.0\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} [sources] The source objects.\n     * @returns {Object} Returns `object`.\n     * @see _.assignIn\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     * }\n     *\n     * function Bar() {\n     *   this.c = 3;\n     * }\n     *\n     * Foo.prototype.b = 2;\n     * Bar.prototype.d = 4;\n     *\n     * _.assign({ 'a': 0 }, new Foo, new Bar);\n     * // => { 'a': 1, 'c': 3 }\n     */\n    var assign = createAssigner(function(object, source) {\n      if (isPrototype(source) || isArrayLike(source)) {\n        copyObject(source, keys(source), object);\n        return;\n      }\n      for (var key in source) {\n        if (hasOwnProperty.call(source, key)) {\n          assignValue(object, key, source[key]);\n        }\n      }\n    });\n\n    /**\n     * This method is like `_.assign` except that it iterates over own and\n     * inherited source properties.\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @alias extend\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} [sources] The source objects.\n     * @returns {Object} Returns `object`.\n     * @see _.assign\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     * }\n     *\n     * function Bar() {\n     *   this.c = 3;\n     * }\n     *\n     * Foo.prototype.b = 2;\n     * Bar.prototype.d = 4;\n     *\n     * _.assignIn({ 'a': 0 }, new Foo, new Bar);\n     * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 }\n     */\n    var assignIn = createAssigner(function(object, source) {\n      copyObject(source, keysIn(source), object);\n    });\n\n    /**\n     * This method is like `_.assignIn` except that it accepts `customizer`\n     * which is invoked to produce the assigned values. If `customizer` returns\n     * `undefined`, assignment is handled by the method instead. The `customizer`\n     * is invoked with five arguments: (objValue, srcValue, key, object, source).\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @alias extendWith\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} sources The source objects.\n     * @param {Function} [customizer] The function to customize assigned values.\n     * @returns {Object} Returns `object`.\n     * @see _.assignWith\n     * @example\n     *\n     * function customizer(objValue, srcValue) {\n     *   return _.isUndefined(objValue) ? srcValue : objValue;\n     * }\n     *\n     * var defaults = _.partialRight(_.assignInWith, customizer);\n     *\n     * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n     * // => { 'a': 1, 'b': 2 }\n     */\n    var assignInWith = createAssigner(function(object, source, srcIndex, customizer) {\n      copyObject(source, keysIn(source), object, customizer);\n    });\n\n    /**\n     * This method is like `_.assign` except that it accepts `customizer`\n     * which is invoked to produce the assigned values. If `customizer` returns\n     * `undefined`, assignment is handled by the method instead. The `customizer`\n     * is invoked with five arguments: (objValue, srcValue, key, object, source).\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} sources The source objects.\n     * @param {Function} [customizer] The function to customize assigned values.\n     * @returns {Object} Returns `object`.\n     * @see _.assignInWith\n     * @example\n     *\n     * function customizer(objValue, srcValue) {\n     *   return _.isUndefined(objValue) ? srcValue : objValue;\n     * }\n     *\n     * var defaults = _.partialRight(_.assignWith, customizer);\n     *\n     * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n     * // => { 'a': 1, 'b': 2 }\n     */\n    var assignWith = createAssigner(function(object, source, srcIndex, customizer) {\n      copyObject(source, keys(source), object, customizer);\n    });\n\n    /**\n     * Creates an array of values corresponding to `paths` of `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.0.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {...(string|string[])} [paths] The property paths to pick.\n     * @returns {Array} Returns the picked values.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };\n     *\n     * _.at(object, ['a[0].b.c', 'a[1]']);\n     * // => [3, 4]\n     */\n    var at = flatRest(baseAt);\n\n    /**\n     * Creates an object that inherits from the `prototype` object. If a\n     * `properties` object is given, its own enumerable string keyed properties\n     * are assigned to the created object.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.3.0\n     * @category Object\n     * @param {Object} prototype The object to inherit from.\n     * @param {Object} [properties] The properties to assign to the object.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * function Shape() {\n     *   this.x = 0;\n     *   this.y = 0;\n     * }\n     *\n     * function Circle() {\n     *   Shape.call(this);\n     * }\n     *\n     * Circle.prototype = _.create(Shape.prototype, {\n     *   'constructor': Circle\n     * });\n     *\n     * var circle = new Circle;\n     * circle instanceof Circle;\n     * // => true\n     *\n     * circle instanceof Shape;\n     * // => true\n     */\n    function create(prototype, properties) {\n      var result = baseCreate(prototype);\n      return properties == null ? result : baseAssign(result, properties);\n    }\n\n    /**\n     * Assigns own and inherited enumerable string keyed properties of source\n     * objects to the destination object for all destination properties that\n     * resolve to `undefined`. Source objects are applied from left to right.\n     * Once a property is set, additional values of the same property are ignored.\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} [sources] The source objects.\n     * @returns {Object} Returns `object`.\n     * @see _.defaultsDeep\n     * @example\n     *\n     * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n     * // => { 'a': 1, 'b': 2 }\n     */\n    var defaults = baseRest(function(object, sources) {\n      object = Object(object);\n\n      var index = -1;\n      var length = sources.length;\n      var guard = length > 2 ? sources[2] : undefined;\n\n      if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n        length = 1;\n      }\n\n      while (++index < length) {\n        var source = sources[index];\n        var props = keysIn(source);\n        var propsIndex = -1;\n        var propsLength = props.length;\n\n        while (++propsIndex < propsLength) {\n          var key = props[propsIndex];\n          var value = object[key];\n\n          if (value === undefined ||\n              (eq(value, objectProto[key]) && !hasOwnProperty.call(object, key))) {\n            object[key] = source[key];\n          }\n        }\n      }\n\n      return object;\n    });\n\n    /**\n     * This method is like `_.defaults` except that it recursively assigns\n     * default properties.\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.10.0\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} [sources] The source objects.\n     * @returns {Object} Returns `object`.\n     * @see _.defaults\n     * @example\n     *\n     * _.defaultsDeep({ 'a': { 'b': 2 } }, { 'a': { 'b': 1, 'c': 3 } });\n     * // => { 'a': { 'b': 2, 'c': 3 } }\n     */\n    var defaultsDeep = baseRest(function(args) {\n      args.push(undefined, customDefaultsMerge);\n      return apply(mergeWith, undefined, args);\n    });\n\n    /**\n     * This method is like `_.find` except that it returns the key of the first\n     * element `predicate` returns truthy for instead of the element itself.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.1.0\n     * @category Object\n     * @param {Object} object The object to inspect.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {string|undefined} Returns the key of the matched element,\n     *  else `undefined`.\n     * @example\n     *\n     * var users = {\n     *   'barney':  { 'age': 36, 'active': true },\n     *   'fred':    { 'age': 40, 'active': false },\n     *   'pebbles': { 'age': 1,  'active': true }\n     * };\n     *\n     * _.findKey(users, function(o) { return o.age < 40; });\n     * // => 'barney' (iteration order is not guaranteed)\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.findKey(users, { 'age': 1, 'active': true });\n     * // => 'pebbles'\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.findKey(users, ['active', false]);\n     * // => 'fred'\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.findKey(users, 'active');\n     * // => 'barney'\n     */\n    function findKey(object, predicate) {\n      return baseFindKey(object, getIteratee(predicate, 3), baseForOwn);\n    }\n\n    /**\n     * This method is like `_.findKey` except that it iterates over elements of\n     * a collection in the opposite order.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Object\n     * @param {Object} object The object to inspect.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {string|undefined} Returns the key of the matched element,\n     *  else `undefined`.\n     * @example\n     *\n     * var users = {\n     *   'barney':  { 'age': 36, 'active': true },\n     *   'fred':    { 'age': 40, 'active': false },\n     *   'pebbles': { 'age': 1,  'active': true }\n     * };\n     *\n     * _.findLastKey(users, function(o) { return o.age < 40; });\n     * // => returns 'pebbles' assuming `_.findKey` returns 'barney'\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.findLastKey(users, { 'age': 36, 'active': true });\n     * // => 'barney'\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.findLastKey(users, ['active', false]);\n     * // => 'fred'\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.findLastKey(users, 'active');\n     * // => 'pebbles'\n     */\n    function findLastKey(object, predicate) {\n      return baseFindKey(object, getIteratee(predicate, 3), baseForOwnRight);\n    }\n\n    /**\n     * Iterates over own and inherited enumerable string keyed properties of an\n     * object and invokes `iteratee` for each property. The iteratee is invoked\n     * with three arguments: (value, key, object). Iteratee functions may exit\n     * iteration early by explicitly returning `false`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.3.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Object} Returns `object`.\n     * @see _.forInRight\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.forIn(new Foo, function(value, key) {\n     *   console.log(key);\n     * });\n     * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed).\n     */\n    function forIn(object, iteratee) {\n      return object == null\n        ? object\n        : baseFor(object, getIteratee(iteratee, 3), keysIn);\n    }\n\n    /**\n     * This method is like `_.forIn` except that it iterates over properties of\n     * `object` in the opposite order.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Object} Returns `object`.\n     * @see _.forIn\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.forInRight(new Foo, function(value, key) {\n     *   console.log(key);\n     * });\n     * // => Logs 'c', 'b', then 'a' assuming `_.forIn` logs 'a', 'b', then 'c'.\n     */\n    function forInRight(object, iteratee) {\n      return object == null\n        ? object\n        : baseForRight(object, getIteratee(iteratee, 3), keysIn);\n    }\n\n    /**\n     * Iterates over own enumerable string keyed properties of an object and\n     * invokes `iteratee` for each property. The iteratee is invoked with three\n     * arguments: (value, key, object). Iteratee functions may exit iteration\n     * early by explicitly returning `false`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.3.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Object} Returns `object`.\n     * @see _.forOwnRight\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.forOwn(new Foo, function(value, key) {\n     *   console.log(key);\n     * });\n     * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n     */\n    function forOwn(object, iteratee) {\n      return object && baseForOwn(object, getIteratee(iteratee, 3));\n    }\n\n    /**\n     * This method is like `_.forOwn` except that it iterates over properties of\n     * `object` in the opposite order.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Object} Returns `object`.\n     * @see _.forOwn\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.forOwnRight(new Foo, function(value, key) {\n     *   console.log(key);\n     * });\n     * // => Logs 'b' then 'a' assuming `_.forOwn` logs 'a' then 'b'.\n     */\n    function forOwnRight(object, iteratee) {\n      return object && baseForOwnRight(object, getIteratee(iteratee, 3));\n    }\n\n    /**\n     * Creates an array of function property names from own enumerable properties\n     * of `object`.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The object to inspect.\n     * @returns {Array} Returns the function names.\n     * @see _.functionsIn\n     * @example\n     *\n     * function Foo() {\n     *   this.a = _.constant('a');\n     *   this.b = _.constant('b');\n     * }\n     *\n     * Foo.prototype.c = _.constant('c');\n     *\n     * _.functions(new Foo);\n     * // => ['a', 'b']\n     */\n    function functions(object) {\n      return object == null ? [] : baseFunctions(object, keys(object));\n    }\n\n    /**\n     * Creates an array of function property names from own and inherited\n     * enumerable properties of `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The object to inspect.\n     * @returns {Array} Returns the function names.\n     * @see _.functions\n     * @example\n     *\n     * function Foo() {\n     *   this.a = _.constant('a');\n     *   this.b = _.constant('b');\n     * }\n     *\n     * Foo.prototype.c = _.constant('c');\n     *\n     * _.functionsIn(new Foo);\n     * // => ['a', 'b', 'c']\n     */\n    function functionsIn(object) {\n      return object == null ? [] : baseFunctions(object, keysIn(object));\n    }\n\n    /**\n     * Gets the value at `path` of `object`. If the resolved value is\n     * `undefined`, the `defaultValue` is returned in its place.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.7.0\n     * @category Object\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path of the property to get.\n     * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n     * @returns {*} Returns the resolved value.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n     *\n     * _.get(object, 'a[0].b.c');\n     * // => 3\n     *\n     * _.get(object, ['a', '0', 'b', 'c']);\n     * // => 3\n     *\n     * _.get(object, 'a.b.c', 'default');\n     * // => 'default'\n     */\n    function get(object, path, defaultValue) {\n      var result = object == null ? undefined : baseGet(object, path);\n      return result === undefined ? defaultValue : result;\n    }\n\n    /**\n     * Checks if `path` is a direct property of `object`.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path to check.\n     * @returns {boolean} Returns `true` if `path` exists, else `false`.\n     * @example\n     *\n     * var object = { 'a': { 'b': 2 } };\n     * var other = _.create({ 'a': _.create({ 'b': 2 }) });\n     *\n     * _.has(object, 'a');\n     * // => true\n     *\n     * _.has(object, 'a.b');\n     * // => true\n     *\n     * _.has(object, ['a', 'b']);\n     * // => true\n     *\n     * _.has(other, 'a');\n     * // => false\n     */\n    function has(object, path) {\n      return object != null && hasPath(object, path, baseHas);\n    }\n\n    /**\n     * Checks if `path` is a direct or inherited property of `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path to check.\n     * @returns {boolean} Returns `true` if `path` exists, else `false`.\n     * @example\n     *\n     * var object = _.create({ 'a': _.create({ 'b': 2 }) });\n     *\n     * _.hasIn(object, 'a');\n     * // => true\n     *\n     * _.hasIn(object, 'a.b');\n     * // => true\n     *\n     * _.hasIn(object, ['a', 'b']);\n     * // => true\n     *\n     * _.hasIn(object, 'b');\n     * // => false\n     */\n    function hasIn(object, path) {\n      return object != null && hasPath(object, path, baseHasIn);\n    }\n\n    /**\n     * Creates an object composed of the inverted keys and values of `object`.\n     * If `object` contains duplicate values, subsequent values overwrite\n     * property assignments of previous values.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.7.0\n     * @category Object\n     * @param {Object} object The object to invert.\n     * @returns {Object} Returns the new inverted object.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': 2, 'c': 1 };\n     *\n     * _.invert(object);\n     * // => { '1': 'c', '2': 'b' }\n     */\n    var invert = createInverter(function(result, value, key) {\n      if (value != null &&\n          typeof value.toString != 'function') {\n        value = nativeObjectToString.call(value);\n      }\n\n      result[value] = key;\n    }, constant(identity));\n\n    /**\n     * This method is like `_.invert` except that the inverted object is generated\n     * from the results of running each element of `object` thru `iteratee`. The\n     * corresponding inverted value of each inverted key is an array of keys\n     * responsible for generating the inverted value. The iteratee is invoked\n     * with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.1.0\n     * @category Object\n     * @param {Object} object The object to invert.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Object} Returns the new inverted object.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': 2, 'c': 1 };\n     *\n     * _.invertBy(object);\n     * // => { '1': ['a', 'c'], '2': ['b'] }\n     *\n     * _.invertBy(object, function(value) {\n     *   return 'group' + value;\n     * });\n     * // => { 'group1': ['a', 'c'], 'group2': ['b'] }\n     */\n    var invertBy = createInverter(function(result, value, key) {\n      if (value != null &&\n          typeof value.toString != 'function') {\n        value = nativeObjectToString.call(value);\n      }\n\n      if (hasOwnProperty.call(result, value)) {\n        result[value].push(key);\n      } else {\n        result[value] = [key];\n      }\n    }, getIteratee);\n\n    /**\n     * Invokes the method at `path` of `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path of the method to invoke.\n     * @param {...*} [args] The arguments to invoke the method with.\n     * @returns {*} Returns the result of the invoked method.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': [1, 2, 3, 4] } }] };\n     *\n     * _.invoke(object, 'a[0].b.c.slice', 1, 3);\n     * // => [2, 3]\n     */\n    var invoke = baseRest(baseInvoke);\n\n    /**\n     * Creates an array of the own enumerable property names of `object`.\n     *\n     * **Note:** Non-object values are coerced to objects. See the\n     * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n     * for more details.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.keys(new Foo);\n     * // => ['a', 'b'] (iteration order is not guaranteed)\n     *\n     * _.keys('hi');\n     * // => ['0', '1']\n     */\n    function keys(object) {\n      return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n    }\n\n    /**\n     * Creates an array of the own and inherited enumerable property names of `object`.\n     *\n     * **Note:** Non-object values are coerced to objects.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Object\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.keysIn(new Foo);\n     * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n     */\n    function keysIn(object) {\n      return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n    }\n\n    /**\n     * The opposite of `_.mapValues`; this method creates an object with the\n     * same values as `object` and keys generated by running each own enumerable\n     * string keyed property of `object` thru `iteratee`. The iteratee is invoked\n     * with three arguments: (value, key, object).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.8.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Object} Returns the new mapped object.\n     * @see _.mapValues\n     * @example\n     *\n     * _.mapKeys({ 'a': 1, 'b': 2 }, function(value, key) {\n     *   return key + value;\n     * });\n     * // => { 'a1': 1, 'b2': 2 }\n     */\n    function mapKeys(object, iteratee) {\n      var result = {};\n      iteratee = getIteratee(iteratee, 3);\n\n      baseForOwn(object, function(value, key, object) {\n        baseAssignValue(result, iteratee(value, key, object), value);\n      });\n      return result;\n    }\n\n    /**\n     * Creates an object with the same keys as `object` and values generated\n     * by running each own enumerable string keyed property of `object` thru\n     * `iteratee`. The iteratee is invoked with three arguments:\n     * (value, key, object).\n     *\n     * @static\n     * @memberOf _\n     * @since 2.4.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Object} Returns the new mapped object.\n     * @see _.mapKeys\n     * @example\n     *\n     * var users = {\n     *   'fred':    { 'user': 'fred',    'age': 40 },\n     *   'pebbles': { 'user': 'pebbles', 'age': 1 }\n     * };\n     *\n     * _.mapValues(users, function(o) { return o.age; });\n     * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.mapValues(users, 'age');\n     * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n     */\n    function mapValues(object, iteratee) {\n      var result = {};\n      iteratee = getIteratee(iteratee, 3);\n\n      baseForOwn(object, function(value, key, object) {\n        baseAssignValue(result, key, iteratee(value, key, object));\n      });\n      return result;\n    }\n\n    /**\n     * This method is like `_.assign` except that it recursively merges own and\n     * inherited enumerable string keyed properties of source objects into the\n     * destination object. Source properties that resolve to `undefined` are\n     * skipped if a destination value exists. Array and plain object properties\n     * are merged recursively. Other objects and value types are overridden by\n     * assignment. Source objects are applied from left to right. Subsequent\n     * sources overwrite property assignments of previous sources.\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.5.0\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} [sources] The source objects.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var object = {\n     *   'a': [{ 'b': 2 }, { 'd': 4 }]\n     * };\n     *\n     * var other = {\n     *   'a': [{ 'c': 3 }, { 'e': 5 }]\n     * };\n     *\n     * _.merge(object, other);\n     * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }\n     */\n    var merge = createAssigner(function(object, source, srcIndex) {\n      baseMerge(object, source, srcIndex);\n    });\n\n    /**\n     * This method is like `_.merge` except that it accepts `customizer` which\n     * is invoked to produce the merged values of the destination and source\n     * properties. If `customizer` returns `undefined`, merging is handled by the\n     * method instead. The `customizer` is invoked with six arguments:\n     * (objValue, srcValue, key, object, source, stack).\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} sources The source objects.\n     * @param {Function} customizer The function to customize assigned values.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * function customizer(objValue, srcValue) {\n     *   if (_.isArray(objValue)) {\n     *     return objValue.concat(srcValue);\n     *   }\n     * }\n     *\n     * var object = { 'a': [1], 'b': [2] };\n     * var other = { 'a': [3], 'b': [4] };\n     *\n     * _.mergeWith(object, other, customizer);\n     * // => { 'a': [1, 3], 'b': [2, 4] }\n     */\n    var mergeWith = createAssigner(function(object, source, srcIndex, customizer) {\n      baseMerge(object, source, srcIndex, customizer);\n    });\n\n    /**\n     * The opposite of `_.pick`; this method creates an object composed of the\n     * own and inherited enumerable property paths of `object` that are not omitted.\n     *\n     * **Note:** This method is considerably slower than `_.pick`.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The source object.\n     * @param {...(string|string[])} [paths] The property paths to omit.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': '2', 'c': 3 };\n     *\n     * _.omit(object, ['a', 'c']);\n     * // => { 'b': '2' }\n     */\n    var omit = flatRest(function(object, paths) {\n      var result = {};\n      if (object == null) {\n        return result;\n      }\n      var isDeep = false;\n      paths = arrayMap(paths, function(path) {\n        path = castPath(path, object);\n        isDeep || (isDeep = path.length > 1);\n        return path;\n      });\n      copyObject(object, getAllKeysIn(object), result);\n      if (isDeep) {\n        result = baseClone(result, CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG, customOmitClone);\n      }\n      var length = paths.length;\n      while (length--) {\n        baseUnset(result, paths[length]);\n      }\n      return result;\n    });\n\n    /**\n     * The opposite of `_.pickBy`; this method creates an object composed of\n     * the own and inherited enumerable string keyed properties of `object` that\n     * `predicate` doesn't return truthy for. The predicate is invoked with two\n     * arguments: (value, key).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The source object.\n     * @param {Function} [predicate=_.identity] The function invoked per property.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': '2', 'c': 3 };\n     *\n     * _.omitBy(object, _.isNumber);\n     * // => { 'b': '2' }\n     */\n    function omitBy(object, predicate) {\n      return pickBy(object, negate(getIteratee(predicate)));\n    }\n\n    /**\n     * Creates an object composed of the picked `object` properties.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The source object.\n     * @param {...(string|string[])} [paths] The property paths to pick.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': '2', 'c': 3 };\n     *\n     * _.pick(object, ['a', 'c']);\n     * // => { 'a': 1, 'c': 3 }\n     */\n    var pick = flatRest(function(object, paths) {\n      return object == null ? {} : basePick(object, paths);\n    });\n\n    /**\n     * Creates an object composed of the `object` properties `predicate` returns\n     * truthy for. The predicate is invoked with two arguments: (value, key).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The source object.\n     * @param {Function} [predicate=_.identity] The function invoked per property.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': '2', 'c': 3 };\n     *\n     * _.pickBy(object, _.isNumber);\n     * // => { 'a': 1, 'c': 3 }\n     */\n    function pickBy(object, predicate) {\n      if (object == null) {\n        return {};\n      }\n      var props = arrayMap(getAllKeysIn(object), function(prop) {\n        return [prop];\n      });\n      predicate = getIteratee(predicate);\n      return basePickBy(object, props, function(value, path) {\n        return predicate(value, path[0]);\n      });\n    }\n\n    /**\n     * This method is like `_.get` except that if the resolved value is a\n     * function it's invoked with the `this` binding of its parent object and\n     * its result is returned.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path of the property to resolve.\n     * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n     * @returns {*} Returns the resolved value.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] };\n     *\n     * _.result(object, 'a[0].b.c1');\n     * // => 3\n     *\n     * _.result(object, 'a[0].b.c2');\n     * // => 4\n     *\n     * _.result(object, 'a[0].b.c3', 'default');\n     * // => 'default'\n     *\n     * _.result(object, 'a[0].b.c3', _.constant('default'));\n     * // => 'default'\n     */\n    function result(object, path, defaultValue) {\n      path = castPath(path, object);\n\n      var index = -1,\n          length = path.length;\n\n      // Ensure the loop is entered when path is empty.\n      if (!length) {\n        length = 1;\n        object = undefined;\n      }\n      while (++index < length) {\n        var value = object == null ? undefined : object[toKey(path[index])];\n        if (value === undefined) {\n          index = length;\n          value = defaultValue;\n        }\n        object = isFunction(value) ? value.call(object) : value;\n      }\n      return object;\n    }\n\n    /**\n     * Sets the value at `path` of `object`. If a portion of `path` doesn't exist,\n     * it's created. Arrays are created for missing index properties while objects\n     * are created for all other missing properties. Use `_.setWith` to customize\n     * `path` creation.\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.7.0\n     * @category Object\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to set.\n     * @param {*} value The value to set.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n     *\n     * _.set(object, 'a[0].b.c', 4);\n     * console.log(object.a[0].b.c);\n     * // => 4\n     *\n     * _.set(object, ['x', '0', 'y', 'z'], 5);\n     * console.log(object.x[0].y.z);\n     * // => 5\n     */\n    function set(object, path, value) {\n      return object == null ? object : baseSet(object, path, value);\n    }\n\n    /**\n     * This method is like `_.set` except that it accepts `customizer` which is\n     * invoked to produce the objects of `path`.  If `customizer` returns `undefined`\n     * path creation is handled by the method instead. The `customizer` is invoked\n     * with three arguments: (nsValue, key, nsObject).\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to set.\n     * @param {*} value The value to set.\n     * @param {Function} [customizer] The function to customize assigned values.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var object = {};\n     *\n     * _.setWith(object, '[0][1]', 'a', Object);\n     * // => { '0': { '1': 'a' } }\n     */\n    function setWith(object, path, value, customizer) {\n      customizer = typeof customizer == 'function' ? customizer : undefined;\n      return object == null ? object : baseSet(object, path, value, customizer);\n    }\n\n    /**\n     * Creates an array of own enumerable string keyed-value pairs for `object`\n     * which can be consumed by `_.fromPairs`. If `object` is a map or set, its\n     * entries are returned.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @alias entries\n     * @category Object\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the key-value pairs.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.toPairs(new Foo);\n     * // => [['a', 1], ['b', 2]] (iteration order is not guaranteed)\n     */\n    var toPairs = createToPairs(keys);\n\n    /**\n     * Creates an array of own and inherited enumerable string keyed-value pairs\n     * for `object` which can be consumed by `_.fromPairs`. If `object` is a map\n     * or set, its entries are returned.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @alias entriesIn\n     * @category Object\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the key-value pairs.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.toPairsIn(new Foo);\n     * // => [['a', 1], ['b', 2], ['c', 3]] (iteration order is not guaranteed)\n     */\n    var toPairsIn = createToPairs(keysIn);\n\n    /**\n     * An alternative to `_.reduce`; this method transforms `object` to a new\n     * `accumulator` object which is the result of running each of its own\n     * enumerable string keyed properties thru `iteratee`, with each invocation\n     * potentially mutating the `accumulator` object. If `accumulator` is not\n     * provided, a new object with the same `[[Prototype]]` will be used. The\n     * iteratee is invoked with four arguments: (accumulator, value, key, object).\n     * Iteratee functions may exit iteration early by explicitly returning `false`.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.3.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @param {*} [accumulator] The custom accumulator value.\n     * @returns {*} Returns the accumulated value.\n     * @example\n     *\n     * _.transform([2, 3, 4], function(result, n) {\n     *   result.push(n *= n);\n     *   return n % 2 == 0;\n     * }, []);\n     * // => [4, 9]\n     *\n     * _.transform({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n     *   (result[value] || (result[value] = [])).push(key);\n     * }, {});\n     * // => { '1': ['a', 'c'], '2': ['b'] }\n     */\n    function transform(object, iteratee, accumulator) {\n      var isArr = isArray(object),\n          isArrLike = isArr || isBuffer(object) || isTypedArray(object);\n\n      iteratee = getIteratee(iteratee, 4);\n      if (accumulator == null) {\n        var Ctor = object && object.constructor;\n        if (isArrLike) {\n          accumulator = isArr ? new Ctor : [];\n        }\n        else if (isObject(object)) {\n          accumulator = isFunction(Ctor) ? baseCreate(getPrototype(object)) : {};\n        }\n        else {\n          accumulator = {};\n        }\n      }\n      (isArrLike ? arrayEach : baseForOwn)(object, function(value, index, object) {\n        return iteratee(accumulator, value, index, object);\n      });\n      return accumulator;\n    }\n\n    /**\n     * Removes the property at `path` of `object`.\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to unset.\n     * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': 7 } }] };\n     * _.unset(object, 'a[0].b.c');\n     * // => true\n     *\n     * console.log(object);\n     * // => { 'a': [{ 'b': {} }] };\n     *\n     * _.unset(object, ['a', '0', 'b', 'c']);\n     * // => true\n     *\n     * console.log(object);\n     * // => { 'a': [{ 'b': {} }] };\n     */\n    function unset(object, path) {\n      return object == null ? true : baseUnset(object, path);\n    }\n\n    /**\n     * This method is like `_.set` except that accepts `updater` to produce the\n     * value to set. Use `_.updateWith` to customize `path` creation. The `updater`\n     * is invoked with one argument: (value).\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.6.0\n     * @category Object\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to set.\n     * @param {Function} updater The function to produce the updated value.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n     *\n     * _.update(object, 'a[0].b.c', function(n) { return n * n; });\n     * console.log(object.a[0].b.c);\n     * // => 9\n     *\n     * _.update(object, 'x[0].y.z', function(n) { return n ? n + 1 : 0; });\n     * console.log(object.x[0].y.z);\n     * // => 0\n     */\n    function update(object, path, updater) {\n      return object == null ? object : baseUpdate(object, path, castFunction(updater));\n    }\n\n    /**\n     * This method is like `_.update` except that it accepts `customizer` which is\n     * invoked to produce the objects of `path`.  If `customizer` returns `undefined`\n     * path creation is handled by the method instead. The `customizer` is invoked\n     * with three arguments: (nsValue, key, nsObject).\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.6.0\n     * @category Object\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to set.\n     * @param {Function} updater The function to produce the updated value.\n     * @param {Function} [customizer] The function to customize assigned values.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var object = {};\n     *\n     * _.updateWith(object, '[0][1]', _.constant('a'), Object);\n     * // => { '0': { '1': 'a' } }\n     */\n    function updateWith(object, path, updater, customizer) {\n      customizer = typeof customizer == 'function' ? customizer : undefined;\n      return object == null ? object : baseUpdate(object, path, castFunction(updater), customizer);\n    }\n\n    /**\n     * Creates an array of the own enumerable string keyed property values of `object`.\n     *\n     * **Note:** Non-object values are coerced to objects.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property values.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.values(new Foo);\n     * // => [1, 2] (iteration order is not guaranteed)\n     *\n     * _.values('hi');\n     * // => ['h', 'i']\n     */\n    function values(object) {\n      return object == null ? [] : baseValues(object, keys(object));\n    }\n\n    /**\n     * Creates an array of the own and inherited enumerable string keyed property\n     * values of `object`.\n     *\n     * **Note:** Non-object values are coerced to objects.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Object\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property values.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.valuesIn(new Foo);\n     * // => [1, 2, 3] (iteration order is not guaranteed)\n     */\n    function valuesIn(object) {\n      return object == null ? [] : baseValues(object, keysIn(object));\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Clamps `number` within the inclusive `lower` and `upper` bounds.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Number\n     * @param {number} number The number to clamp.\n     * @param {number} [lower] The lower bound.\n     * @param {number} upper The upper bound.\n     * @returns {number} Returns the clamped number.\n     * @example\n     *\n     * _.clamp(-10, -5, 5);\n     * // => -5\n     *\n     * _.clamp(10, -5, 5);\n     * // => 5\n     */\n    function clamp(number, lower, upper) {\n      if (upper === undefined) {\n        upper = lower;\n        lower = undefined;\n      }\n      if (upper !== undefined) {\n        upper = toNumber(upper);\n        upper = upper === upper ? upper : 0;\n      }\n      if (lower !== undefined) {\n        lower = toNumber(lower);\n        lower = lower === lower ? lower : 0;\n      }\n      return baseClamp(toNumber(number), lower, upper);\n    }\n\n    /**\n     * Checks if `n` is between `start` and up to, but not including, `end`. If\n     * `end` is not specified, it's set to `start` with `start` then set to `0`.\n     * If `start` is greater than `end` the params are swapped to support\n     * negative ranges.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.3.0\n     * @category Number\n     * @param {number} number The number to check.\n     * @param {number} [start=0] The start of the range.\n     * @param {number} end The end of the range.\n     * @returns {boolean} Returns `true` if `number` is in the range, else `false`.\n     * @see _.range, _.rangeRight\n     * @example\n     *\n     * _.inRange(3, 2, 4);\n     * // => true\n     *\n     * _.inRange(4, 8);\n     * // => true\n     *\n     * _.inRange(4, 2);\n     * // => false\n     *\n     * _.inRange(2, 2);\n     * // => false\n     *\n     * _.inRange(1.2, 2);\n     * // => true\n     *\n     * _.inRange(5.2, 4);\n     * // => false\n     *\n     * _.inRange(-3, -2, -6);\n     * // => true\n     */\n    function inRange(number, start, end) {\n      start = toFinite(start);\n      if (end === undefined) {\n        end = start;\n        start = 0;\n      } else {\n        end = toFinite(end);\n      }\n      number = toNumber(number);\n      return baseInRange(number, start, end);\n    }\n\n    /**\n     * Produces a random number between the inclusive `lower` and `upper` bounds.\n     * If only one argument is provided a number between `0` and the given number\n     * is returned. If `floating` is `true`, or either `lower` or `upper` are\n     * floats, a floating-point number is returned instead of an integer.\n     *\n     * **Note:** JavaScript follows the IEEE-754 standard for resolving\n     * floating-point values which can produce unexpected results.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.7.0\n     * @category Number\n     * @param {number} [lower=0] The lower bound.\n     * @param {number} [upper=1] The upper bound.\n     * @param {boolean} [floating] Specify returning a floating-point number.\n     * @returns {number} Returns the random number.\n     * @example\n     *\n     * _.random(0, 5);\n     * // => an integer between 0 and 5\n     *\n     * _.random(5);\n     * // => also an integer between 0 and 5\n     *\n     * _.random(5, true);\n     * // => a floating-point number between 0 and 5\n     *\n     * _.random(1.2, 5.2);\n     * // => a floating-point number between 1.2 and 5.2\n     */\n    function random(lower, upper, floating) {\n      if (floating && typeof floating != 'boolean' && isIterateeCall(lower, upper, floating)) {\n        upper = floating = undefined;\n      }\n      if (floating === undefined) {\n        if (typeof upper == 'boolean') {\n          floating = upper;\n          upper = undefined;\n        }\n        else if (typeof lower == 'boolean') {\n          floating = lower;\n          lower = undefined;\n        }\n      }\n      if (lower === undefined && upper === undefined) {\n        lower = 0;\n        upper = 1;\n      }\n      else {\n        lower = toFinite(lower);\n        if (upper === undefined) {\n          upper = lower;\n          lower = 0;\n        } else {\n          upper = toFinite(upper);\n        }\n      }\n      if (lower > upper) {\n        var temp = lower;\n        lower = upper;\n        upper = temp;\n      }\n      if (floating || lower % 1 || upper % 1) {\n        var rand = nativeRandom();\n        return nativeMin(lower + (rand * (upper - lower + freeParseFloat('1e-' + ((rand + '').length - 1)))), upper);\n      }\n      return baseRandom(lower, upper);\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the camel cased string.\n     * @example\n     *\n     * _.camelCase('Foo Bar');\n     * // => 'fooBar'\n     *\n     * _.camelCase('--foo-bar--');\n     * // => 'fooBar'\n     *\n     * _.camelCase('__FOO_BAR__');\n     * // => 'fooBar'\n     */\n    var camelCase = createCompounder(function(result, word, index) {\n      word = word.toLowerCase();\n      return result + (index ? capitalize(word) : word);\n    });\n\n    /**\n     * Converts the first character of `string` to upper case and the remaining\n     * to lower case.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to capitalize.\n     * @returns {string} Returns the capitalized string.\n     * @example\n     *\n     * _.capitalize('FRED');\n     * // => 'Fred'\n     */\n    function capitalize(string) {\n      return upperFirst(toString(string).toLowerCase());\n    }\n\n    /**\n     * Deburrs `string` by converting\n     * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table)\n     * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A)\n     * letters to basic Latin letters and removing\n     * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to deburr.\n     * @returns {string} Returns the deburred string.\n     * @example\n     *\n     * _.deburr('déjà vu');\n     * // => 'deja vu'\n     */\n    function deburr(string) {\n      string = toString(string);\n      return string && string.replace(reLatin, deburrLetter).replace(reComboMark, '');\n    }\n\n    /**\n     * Checks if `string` ends with the given target string.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to inspect.\n     * @param {string} [target] The string to search for.\n     * @param {number} [position=string.length] The position to search up to.\n     * @returns {boolean} Returns `true` if `string` ends with `target`,\n     *  else `false`.\n     * @example\n     *\n     * _.endsWith('abc', 'c');\n     * // => true\n     *\n     * _.endsWith('abc', 'b');\n     * // => false\n     *\n     * _.endsWith('abc', 'b', 2);\n     * // => true\n     */\n    function endsWith(string, target, position) {\n      string = toString(string);\n      target = baseToString(target);\n\n      var length = string.length;\n      position = position === undefined\n        ? length\n        : baseClamp(toInteger(position), 0, length);\n\n      var end = position;\n      position -= target.length;\n      return position >= 0 && string.slice(position, end) == target;\n    }\n\n    /**\n     * Converts the characters \"&\", \"<\", \">\", '\"', and \"'\" in `string` to their\n     * corresponding HTML entities.\n     *\n     * **Note:** No other characters are escaped. To escape additional\n     * characters use a third-party library like [_he_](https://mths.be/he).\n     *\n     * Though the \">\" character is escaped for symmetry, characters like\n     * \">\" and \"/\" don't need escaping in HTML and have no special meaning\n     * unless they're part of a tag or unquoted attribute value. See\n     * [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands)\n     * (under \"semi-related fun fact\") for more details.\n     *\n     * When working with HTML you should always\n     * [quote attribute values](http://wonko.com/post/html-escaping) to reduce\n     * XSS vectors.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category String\n     * @param {string} [string=''] The string to escape.\n     * @returns {string} Returns the escaped string.\n     * @example\n     *\n     * _.escape('fred, barney, & pebbles');\n     * // => 'fred, barney, &amp; pebbles'\n     */\n    function escape(string) {\n      string = toString(string);\n      return (string && reHasUnescapedHtml.test(string))\n        ? string.replace(reUnescapedHtml, escapeHtmlChar)\n        : string;\n    }\n\n    /**\n     * Escapes the `RegExp` special characters \"^\", \"$\", \"\\\", \".\", \"*\", \"+\",\n     * \"?\", \"(\", \")\", \"[\", \"]\", \"{\", \"}\", and \"|\" in `string`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to escape.\n     * @returns {string} Returns the escaped string.\n     * @example\n     *\n     * _.escapeRegExp('[lodash](https://lodash.com/)');\n     * // => '\\[lodash\\]\\(https://lodash\\.com/\\)'\n     */\n    function escapeRegExp(string) {\n      string = toString(string);\n      return (string && reHasRegExpChar.test(string))\n        ? string.replace(reRegExpChar, '\\\\$&')\n        : string;\n    }\n\n    /**\n     * Converts `string` to\n     * [kebab case](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the kebab cased string.\n     * @example\n     *\n     * _.kebabCase('Foo Bar');\n     * // => 'foo-bar'\n     *\n     * _.kebabCase('fooBar');\n     * // => 'foo-bar'\n     *\n     * _.kebabCase('__FOO_BAR__');\n     * // => 'foo-bar'\n     */\n    var kebabCase = createCompounder(function(result, word, index) {\n      return result + (index ? '-' : '') + word.toLowerCase();\n    });\n\n    /**\n     * Converts `string`, as space separated words, to lower case.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the lower cased string.\n     * @example\n     *\n     * _.lowerCase('--Foo-Bar--');\n     * // => 'foo bar'\n     *\n     * _.lowerCase('fooBar');\n     * // => 'foo bar'\n     *\n     * _.lowerCase('__FOO_BAR__');\n     * // => 'foo bar'\n     */\n    var lowerCase = createCompounder(function(result, word, index) {\n      return result + (index ? ' ' : '') + word.toLowerCase();\n    });\n\n    /**\n     * Converts the first character of `string` to lower case.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the converted string.\n     * @example\n     *\n     * _.lowerFirst('Fred');\n     * // => 'fred'\n     *\n     * _.lowerFirst('FRED');\n     * // => 'fRED'\n     */\n    var lowerFirst = createCaseFirst('toLowerCase');\n\n    /**\n     * Pads `string` on the left and right sides if it's shorter than `length`.\n     * Padding characters are truncated if they can't be evenly divided by `length`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to pad.\n     * @param {number} [length=0] The padding length.\n     * @param {string} [chars=' '] The string used as padding.\n     * @returns {string} Returns the padded string.\n     * @example\n     *\n     * _.pad('abc', 8);\n     * // => '  abc   '\n     *\n     * _.pad('abc', 8, '_-');\n     * // => '_-abc_-_'\n     *\n     * _.pad('abc', 3);\n     * // => 'abc'\n     */\n    function pad(string, length, chars) {\n      string = toString(string);\n      length = toInteger(length);\n\n      var strLength = length ? stringSize(string) : 0;\n      if (!length || strLength >= length) {\n        return string;\n      }\n      var mid = (length - strLength) / 2;\n      return (\n        createPadding(nativeFloor(mid), chars) +\n        string +\n        createPadding(nativeCeil(mid), chars)\n      );\n    }\n\n    /**\n     * Pads `string` on the right side if it's shorter than `length`. Padding\n     * characters are truncated if they exceed `length`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to pad.\n     * @param {number} [length=0] The padding length.\n     * @param {string} [chars=' '] The string used as padding.\n     * @returns {string} Returns the padded string.\n     * @example\n     *\n     * _.padEnd('abc', 6);\n     * // => 'abc   '\n     *\n     * _.padEnd('abc', 6, '_-');\n     * // => 'abc_-_'\n     *\n     * _.padEnd('abc', 3);\n     * // => 'abc'\n     */\n    function padEnd(string, length, chars) {\n      string = toString(string);\n      length = toInteger(length);\n\n      var strLength = length ? stringSize(string) : 0;\n      return (length && strLength < length)\n        ? (string + createPadding(length - strLength, chars))\n        : string;\n    }\n\n    /**\n     * Pads `string` on the left side if it's shorter than `length`. Padding\n     * characters are truncated if they exceed `length`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to pad.\n     * @param {number} [length=0] The padding length.\n     * @param {string} [chars=' '] The string used as padding.\n     * @returns {string} Returns the padded string.\n     * @example\n     *\n     * _.padStart('abc', 6);\n     * // => '   abc'\n     *\n     * _.padStart('abc', 6, '_-');\n     * // => '_-_abc'\n     *\n     * _.padStart('abc', 3);\n     * // => 'abc'\n     */\n    function padStart(string, length, chars) {\n      string = toString(string);\n      length = toInteger(length);\n\n      var strLength = length ? stringSize(string) : 0;\n      return (length && strLength < length)\n        ? (createPadding(length - strLength, chars) + string)\n        : string;\n    }\n\n    /**\n     * Converts `string` to an integer of the specified radix. If `radix` is\n     * `undefined` or `0`, a `radix` of `10` is used unless `value` is a\n     * hexadecimal, in which case a `radix` of `16` is used.\n     *\n     * **Note:** This method aligns with the\n     * [ES5 implementation](https://es5.github.io/#x15.1.2.2) of `parseInt`.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.1.0\n     * @category String\n     * @param {string} string The string to convert.\n     * @param {number} [radix=10] The radix to interpret `value` by.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {number} Returns the converted integer.\n     * @example\n     *\n     * _.parseInt('08');\n     * // => 8\n     *\n     * _.map(['6', '08', '10'], _.parseInt);\n     * // => [6, 8, 10]\n     */\n    function parseInt(string, radix, guard) {\n      if (guard || radix == null) {\n        radix = 0;\n      } else if (radix) {\n        radix = +radix;\n      }\n      return nativeParseInt(toString(string).replace(reTrimStart, ''), radix || 0);\n    }\n\n    /**\n     * Repeats the given string `n` times.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to repeat.\n     * @param {number} [n=1] The number of times to repeat the string.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {string} Returns the repeated string.\n     * @example\n     *\n     * _.repeat('*', 3);\n     * // => '***'\n     *\n     * _.repeat('abc', 2);\n     * // => 'abcabc'\n     *\n     * _.repeat('abc', 0);\n     * // => ''\n     */\n    function repeat(string, n, guard) {\n      if ((guard ? isIterateeCall(string, n, guard) : n === undefined)) {\n        n = 1;\n      } else {\n        n = toInteger(n);\n      }\n      return baseRepeat(toString(string), n);\n    }\n\n    /**\n     * Replaces matches for `pattern` in `string` with `replacement`.\n     *\n     * **Note:** This method is based on\n     * [`String#replace`](https://mdn.io/String/replace).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to modify.\n     * @param {RegExp|string} pattern The pattern to replace.\n     * @param {Function|string} replacement The match replacement.\n     * @returns {string} Returns the modified string.\n     * @example\n     *\n     * _.replace('Hi Fred', 'Fred', 'Barney');\n     * // => 'Hi Barney'\n     */\n    function replace() {\n      var args = arguments,\n          string = toString(args[0]);\n\n      return args.length < 3 ? string : string.replace(args[1], args[2]);\n    }\n\n    /**\n     * Converts `string` to\n     * [snake case](https://en.wikipedia.org/wiki/Snake_case).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the snake cased string.\n     * @example\n     *\n     * _.snakeCase('Foo Bar');\n     * // => 'foo_bar'\n     *\n     * _.snakeCase('fooBar');\n     * // => 'foo_bar'\n     *\n     * _.snakeCase('--FOO-BAR--');\n     * // => 'foo_bar'\n     */\n    var snakeCase = createCompounder(function(result, word, index) {\n      return result + (index ? '_' : '') + word.toLowerCase();\n    });\n\n    /**\n     * Splits `string` by `separator`.\n     *\n     * **Note:** This method is based on\n     * [`String#split`](https://mdn.io/String/split).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to split.\n     * @param {RegExp|string} separator The separator pattern to split by.\n     * @param {number} [limit] The length to truncate results to.\n     * @returns {Array} Returns the string segments.\n     * @example\n     *\n     * _.split('a-b-c', '-', 2);\n     * // => ['a', 'b']\n     */\n    function split(string, separator, limit) {\n      if (limit && typeof limit != 'number' && isIterateeCall(string, separator, limit)) {\n        separator = limit = undefined;\n      }\n      limit = limit === undefined ? MAX_ARRAY_LENGTH : limit >>> 0;\n      if (!limit) {\n        return [];\n      }\n      string = toString(string);\n      if (string && (\n            typeof separator == 'string' ||\n            (separator != null && !isRegExp(separator))\n          )) {\n        separator = baseToString(separator);\n        if (!separator && hasUnicode(string)) {\n          return castSlice(stringToArray(string), 0, limit);\n        }\n      }\n      return string.split(separator, limit);\n    }\n\n    /**\n     * Converts `string` to\n     * [start case](https://en.wikipedia.org/wiki/Letter_case#Stylistic_or_specialised_usage).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.1.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the start cased string.\n     * @example\n     *\n     * _.startCase('--foo-bar--');\n     * // => 'Foo Bar'\n     *\n     * _.startCase('fooBar');\n     * // => 'Foo Bar'\n     *\n     * _.startCase('__FOO_BAR__');\n     * // => 'FOO BAR'\n     */\n    var startCase = createCompounder(function(result, word, index) {\n      return result + (index ? ' ' : '') + upperFirst(word);\n    });\n\n    /**\n     * Checks if `string` starts with the given target string.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to inspect.\n     * @param {string} [target] The string to search for.\n     * @param {number} [position=0] The position to search from.\n     * @returns {boolean} Returns `true` if `string` starts with `target`,\n     *  else `false`.\n     * @example\n     *\n     * _.startsWith('abc', 'a');\n     * // => true\n     *\n     * _.startsWith('abc', 'b');\n     * // => false\n     *\n     * _.startsWith('abc', 'b', 1);\n     * // => true\n     */\n    function startsWith(string, target, position) {\n      string = toString(string);\n      position = position == null\n        ? 0\n        : baseClamp(toInteger(position), 0, string.length);\n\n      target = baseToString(target);\n      return string.slice(position, position + target.length) == target;\n    }\n\n    /**\n     * Creates a compiled template function that can interpolate data properties\n     * in \"interpolate\" delimiters, HTML-escape interpolated data properties in\n     * \"escape\" delimiters, and execute JavaScript in \"evaluate\" delimiters. Data\n     * properties may be accessed as free variables in the template. If a setting\n     * object is given, it takes precedence over `_.templateSettings` values.\n     *\n     * **Note:** In the development build `_.template` utilizes\n     * [sourceURLs](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl)\n     * for easier debugging.\n     *\n     * For more information on precompiling templates see\n     * [lodash's custom builds documentation](https://lodash.com/custom-builds).\n     *\n     * For more information on Chrome extension sandboxes see\n     * [Chrome's extensions documentation](https://developer.chrome.com/extensions/sandboxingEval).\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category String\n     * @param {string} [string=''] The template string.\n     * @param {Object} [options={}] The options object.\n     * @param {RegExp} [options.escape=_.templateSettings.escape]\n     *  The HTML \"escape\" delimiter.\n     * @param {RegExp} [options.evaluate=_.templateSettings.evaluate]\n     *  The \"evaluate\" delimiter.\n     * @param {Object} [options.imports=_.templateSettings.imports]\n     *  An object to import into the template as free variables.\n     * @param {RegExp} [options.interpolate=_.templateSettings.interpolate]\n     *  The \"interpolate\" delimiter.\n     * @param {string} [options.sourceURL='lodash.templateSources[n]']\n     *  The sourceURL of the compiled template.\n     * @param {string} [options.variable='obj']\n     *  The data object variable name.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Function} Returns the compiled template function.\n     * @example\n     *\n     * // Use the \"interpolate\" delimiter to create a compiled template.\n     * var compiled = _.template('hello <%= user %>!');\n     * compiled({ 'user': 'fred' });\n     * // => 'hello fred!'\n     *\n     * // Use the HTML \"escape\" delimiter to escape data property values.\n     * var compiled = _.template('<b><%- value %></b>');\n     * compiled({ 'value': '<script>' });\n     * // => '<b>&lt;script&gt;</b>'\n     *\n     * // Use the \"evaluate\" delimiter to execute JavaScript and generate HTML.\n     * var compiled = _.template('<% _.forEach(users, function(user) { %><li><%- user %></li><% }); %>');\n     * compiled({ 'users': ['fred', 'barney'] });\n     * // => '<li>fred</li><li>barney</li>'\n     *\n     * // Use the internal `print` function in \"evaluate\" delimiters.\n     * var compiled = _.template('<% print(\"hello \" + user); %>!');\n     * compiled({ 'user': 'barney' });\n     * // => 'hello barney!'\n     *\n     * // Use the ES template literal delimiter as an \"interpolate\" delimiter.\n     * // Disable support by replacing the \"interpolate\" delimiter.\n     * var compiled = _.template('hello ${ user }!');\n     * compiled({ 'user': 'pebbles' });\n     * // => 'hello pebbles!'\n     *\n     * // Use backslashes to treat delimiters as plain text.\n     * var compiled = _.template('<%= \"\\\\<%- value %\\\\>\" %>');\n     * compiled({ 'value': 'ignored' });\n     * // => '<%- value %>'\n     *\n     * // Use the `imports` option to import `jQuery` as `jq`.\n     * var text = '<% jq.each(users, function(user) { %><li><%- user %></li><% }); %>';\n     * var compiled = _.template(text, { 'imports': { 'jq': jQuery } });\n     * compiled({ 'users': ['fred', 'barney'] });\n     * // => '<li>fred</li><li>barney</li>'\n     *\n     * // Use the `sourceURL` option to specify a custom sourceURL for the template.\n     * var compiled = _.template('hello <%= user %>!', { 'sourceURL': '/basic/greeting.jst' });\n     * compiled(data);\n     * // => Find the source of \"greeting.jst\" under the Sources tab or Resources panel of the web inspector.\n     *\n     * // Use the `variable` option to ensure a with-statement isn't used in the compiled template.\n     * var compiled = _.template('hi <%= data.user %>!', { 'variable': 'data' });\n     * compiled.source;\n     * // => function(data) {\n     * //   var __t, __p = '';\n     * //   __p += 'hi ' + ((__t = ( data.user )) == null ? '' : __t) + '!';\n     * //   return __p;\n     * // }\n     *\n     * // Use custom template delimiters.\n     * _.templateSettings.interpolate = /{{([\\s\\S]+?)}}/g;\n     * var compiled = _.template('hello {{ user }}!');\n     * compiled({ 'user': 'mustache' });\n     * // => 'hello mustache!'\n     *\n     * // Use the `source` property to inline compiled templates for meaningful\n     * // line numbers in error messages and stack traces.\n     * fs.writeFileSync(path.join(process.cwd(), 'jst.js'), '\\\n     *   var JST = {\\\n     *     \"main\": ' + _.template(mainText).source + '\\\n     *   };\\\n     * ');\n     */\n    function template(string, options, guard) {\n      // Based on John Resig's `tmpl` implementation\n      // (http://ejohn.org/blog/javascript-micro-templating/)\n      // and Laura Doktorova's doT.js (https://github.com/olado/doT).\n      var settings = lodash.templateSettings;\n\n      if (guard && isIterateeCall(string, options, guard)) {\n        options = undefined;\n      }\n      string = toString(string);\n      options = assignInWith({}, options, settings, customDefaultsAssignIn);\n\n      var imports = assignInWith({}, options.imports, settings.imports, customDefaultsAssignIn),\n          importsKeys = keys(imports),\n          importsValues = baseValues(imports, importsKeys);\n\n      var isEscaping,\n          isEvaluating,\n          index = 0,\n          interpolate = options.interpolate || reNoMatch,\n          source = \"__p += '\";\n\n      // Compile the regexp to match each delimiter.\n      var reDelimiters = RegExp(\n        (options.escape || reNoMatch).source + '|' +\n        interpolate.source + '|' +\n        (interpolate === reInterpolate ? reEsTemplate : reNoMatch).source + '|' +\n        (options.evaluate || reNoMatch).source + '|$'\n      , 'g');\n\n      // Use a sourceURL for easier debugging.\n      // The sourceURL gets injected into the source that's eval-ed, so be careful\n      // to normalize all kinds of whitespace, so e.g. newlines (and unicode versions of it) can't sneak in\n      // and escape the comment, thus injecting code that gets evaled.\n      var sourceURL = '//# sourceURL=' +\n        (hasOwnProperty.call(options, 'sourceURL')\n          ? (options.sourceURL + '').replace(/\\s/g, ' ')\n          : ('lodash.templateSources[' + (++templateCounter) + ']')\n        ) + '\\n';\n\n      string.replace(reDelimiters, function(match, escapeValue, interpolateValue, esTemplateValue, evaluateValue, offset) {\n        interpolateValue || (interpolateValue = esTemplateValue);\n\n        // Escape characters that can't be included in string literals.\n        source += string.slice(index, offset).replace(reUnescapedString, escapeStringChar);\n\n        // Replace delimiters with snippets.\n        if (escapeValue) {\n          isEscaping = true;\n          source += \"' +\\n__e(\" + escapeValue + \") +\\n'\";\n        }\n        if (evaluateValue) {\n          isEvaluating = true;\n          source += \"';\\n\" + evaluateValue + \";\\n__p += '\";\n        }\n        if (interpolateValue) {\n          source += \"' +\\n((__t = (\" + interpolateValue + \")) == null ? '' : __t) +\\n'\";\n        }\n        index = offset + match.length;\n\n        // The JS engine embedded in Adobe products needs `match` returned in\n        // order to produce the correct `offset` value.\n        return match;\n      });\n\n      source += \"';\\n\";\n\n      // If `variable` is not specified wrap a with-statement around the generated\n      // code to add the data object to the top of the scope chain.\n      var variable = hasOwnProperty.call(options, 'variable') && options.variable;\n      if (!variable) {\n        source = 'with (obj) {\\n' + source + '\\n}\\n';\n      }\n      // Throw an error if a forbidden character was found in `variable`, to prevent\n      // potential command injection attacks.\n      else if (reForbiddenIdentifierChars.test(variable)) {\n        throw new Error(INVALID_TEMPL_VAR_ERROR_TEXT);\n      }\n\n      // Cleanup code by stripping empty strings.\n      source = (isEvaluating ? source.replace(reEmptyStringLeading, '') : source)\n        .replace(reEmptyStringMiddle, '$1')\n        .replace(reEmptyStringTrailing, '$1;');\n\n      // Frame code as the function body.\n      source = 'function(' + (variable || 'obj') + ') {\\n' +\n        (variable\n          ? ''\n          : 'obj || (obj = {});\\n'\n        ) +\n        \"var __t, __p = ''\" +\n        (isEscaping\n           ? ', __e = _.escape'\n           : ''\n        ) +\n        (isEvaluating\n          ? ', __j = Array.prototype.join;\\n' +\n            \"function print() { __p += __j.call(arguments, '') }\\n\"\n          : ';\\n'\n        ) +\n        source +\n        'return __p\\n}';\n\n      var result = attempt(function() {\n        return Function(importsKeys, sourceURL + 'return ' + source)\n          .apply(undefined, importsValues);\n      });\n\n      // Provide the compiled function's source by its `toString` method or\n      // the `source` property as a convenience for inlining compiled templates.\n      result.source = source;\n      if (isError(result)) {\n        throw result;\n      }\n      return result;\n    }\n\n    /**\n     * Converts `string`, as a whole, to lower case just like\n     * [String#toLowerCase](https://mdn.io/toLowerCase).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the lower cased string.\n     * @example\n     *\n     * _.toLower('--Foo-Bar--');\n     * // => '--foo-bar--'\n     *\n     * _.toLower('fooBar');\n     * // => 'foobar'\n     *\n     * _.toLower('__FOO_BAR__');\n     * // => '__foo_bar__'\n     */\n    function toLower(value) {\n      return toString(value).toLowerCase();\n    }\n\n    /**\n     * Converts `string`, as a whole, to upper case just like\n     * [String#toUpperCase](https://mdn.io/toUpperCase).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the upper cased string.\n     * @example\n     *\n     * _.toUpper('--foo-bar--');\n     * // => '--FOO-BAR--'\n     *\n     * _.toUpper('fooBar');\n     * // => 'FOOBAR'\n     *\n     * _.toUpper('__foo_bar__');\n     * // => '__FOO_BAR__'\n     */\n    function toUpper(value) {\n      return toString(value).toUpperCase();\n    }\n\n    /**\n     * Removes leading and trailing whitespace or specified characters from `string`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to trim.\n     * @param {string} [chars=whitespace] The characters to trim.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {string} Returns the trimmed string.\n     * @example\n     *\n     * _.trim('  abc  ');\n     * // => 'abc'\n     *\n     * _.trim('-_-abc-_-', '_-');\n     * // => 'abc'\n     *\n     * _.map(['  foo  ', '  bar  '], _.trim);\n     * // => ['foo', 'bar']\n     */\n    function trim(string, chars, guard) {\n      string = toString(string);\n      if (string && (guard || chars === undefined)) {\n        return baseTrim(string);\n      }\n      if (!string || !(chars = baseToString(chars))) {\n        return string;\n      }\n      var strSymbols = stringToArray(string),\n          chrSymbols = stringToArray(chars),\n          start = charsStartIndex(strSymbols, chrSymbols),\n          end = charsEndIndex(strSymbols, chrSymbols) + 1;\n\n      return castSlice(strSymbols, start, end).join('');\n    }\n\n    /**\n     * Removes trailing whitespace or specified characters from `string`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to trim.\n     * @param {string} [chars=whitespace] The characters to trim.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {string} Returns the trimmed string.\n     * @example\n     *\n     * _.trimEnd('  abc  ');\n     * // => '  abc'\n     *\n     * _.trimEnd('-_-abc-_-', '_-');\n     * // => '-_-abc'\n     */\n    function trimEnd(string, chars, guard) {\n      string = toString(string);\n      if (string && (guard || chars === undefined)) {\n        return string.slice(0, trimmedEndIndex(string) + 1);\n      }\n      if (!string || !(chars = baseToString(chars))) {\n        return string;\n      }\n      var strSymbols = stringToArray(string),\n          end = charsEndIndex(strSymbols, stringToArray(chars)) + 1;\n\n      return castSlice(strSymbols, 0, end).join('');\n    }\n\n    /**\n     * Removes leading whitespace or specified characters from `string`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to trim.\n     * @param {string} [chars=whitespace] The characters to trim.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {string} Returns the trimmed string.\n     * @example\n     *\n     * _.trimStart('  abc  ');\n     * // => 'abc  '\n     *\n     * _.trimStart('-_-abc-_-', '_-');\n     * // => 'abc-_-'\n     */\n    function trimStart(string, chars, guard) {\n      string = toString(string);\n      if (string && (guard || chars === undefined)) {\n        return string.replace(reTrimStart, '');\n      }\n      if (!string || !(chars = baseToString(chars))) {\n        return string;\n      }\n      var strSymbols = stringToArray(string),\n          start = charsStartIndex(strSymbols, stringToArray(chars));\n\n      return castSlice(strSymbols, start).join('');\n    }\n\n    /**\n     * Truncates `string` if it's longer than the given maximum string length.\n     * The last characters of the truncated string are replaced with the omission\n     * string which defaults to \"...\".\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to truncate.\n     * @param {Object} [options={}] The options object.\n     * @param {number} [options.length=30] The maximum string length.\n     * @param {string} [options.omission='...'] The string to indicate text is omitted.\n     * @param {RegExp|string} [options.separator] The separator pattern to truncate to.\n     * @returns {string} Returns the truncated string.\n     * @example\n     *\n     * _.truncate('hi-diddly-ho there, neighborino');\n     * // => 'hi-diddly-ho there, neighbo...'\n     *\n     * _.truncate('hi-diddly-ho there, neighborino', {\n     *   'length': 24,\n     *   'separator': ' '\n     * });\n     * // => 'hi-diddly-ho there,...'\n     *\n     * _.truncate('hi-diddly-ho there, neighborino', {\n     *   'length': 24,\n     *   'separator': /,? +/\n     * });\n     * // => 'hi-diddly-ho there...'\n     *\n     * _.truncate('hi-diddly-ho there, neighborino', {\n     *   'omission': ' [...]'\n     * });\n     * // => 'hi-diddly-ho there, neig [...]'\n     */\n    function truncate(string, options) {\n      var length = DEFAULT_TRUNC_LENGTH,\n          omission = DEFAULT_TRUNC_OMISSION;\n\n      if (isObject(options)) {\n        var separator = 'separator' in options ? options.separator : separator;\n        length = 'length' in options ? toInteger(options.length) : length;\n        omission = 'omission' in options ? baseToString(options.omission) : omission;\n      }\n      string = toString(string);\n\n      var strLength = string.length;\n      if (hasUnicode(string)) {\n        var strSymbols = stringToArray(string);\n        strLength = strSymbols.length;\n      }\n      if (length >= strLength) {\n        return string;\n      }\n      var end = length - stringSize(omission);\n      if (end < 1) {\n        return omission;\n      }\n      var result = strSymbols\n        ? castSlice(strSymbols, 0, end).join('')\n        : string.slice(0, end);\n\n      if (separator === undefined) {\n        return result + omission;\n      }\n      if (strSymbols) {\n        end += (result.length - end);\n      }\n      if (isRegExp(separator)) {\n        if (string.slice(end).search(separator)) {\n          var match,\n              substring = result;\n\n          if (!separator.global) {\n            separator = RegExp(separator.source, toString(reFlags.exec(separator)) + 'g');\n          }\n          separator.lastIndex = 0;\n          while ((match = separator.exec(substring))) {\n            var newEnd = match.index;\n          }\n          result = result.slice(0, newEnd === undefined ? end : newEnd);\n        }\n      } else if (string.indexOf(baseToString(separator), end) != end) {\n        var index = result.lastIndexOf(separator);\n        if (index > -1) {\n          result = result.slice(0, index);\n        }\n      }\n      return result + omission;\n    }\n\n    /**\n     * The inverse of `_.escape`; this method converts the HTML entities\n     * `&amp;`, `&lt;`, `&gt;`, `&quot;`, and `&#39;` in `string` to\n     * their corresponding characters.\n     *\n     * **Note:** No other HTML entities are unescaped. To unescape additional\n     * HTML entities use a third-party library like [_he_](https://mths.be/he).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.6.0\n     * @category String\n     * @param {string} [string=''] The string to unescape.\n     * @returns {string} Returns the unescaped string.\n     * @example\n     *\n     * _.unescape('fred, barney, &amp; pebbles');\n     * // => 'fred, barney, & pebbles'\n     */\n    function unescape(string) {\n      string = toString(string);\n      return (string && reHasEscapedHtml.test(string))\n        ? string.replace(reEscapedHtml, unescapeHtmlChar)\n        : string;\n    }\n\n    /**\n     * Converts `string`, as space separated words, to upper case.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the upper cased string.\n     * @example\n     *\n     * _.upperCase('--foo-bar');\n     * // => 'FOO BAR'\n     *\n     * _.upperCase('fooBar');\n     * // => 'FOO BAR'\n     *\n     * _.upperCase('__foo_bar__');\n     * // => 'FOO BAR'\n     */\n    var upperCase = createCompounder(function(result, word, index) {\n      return result + (index ? ' ' : '') + word.toUpperCase();\n    });\n\n    /**\n     * Converts the first character of `string` to upper case.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the converted string.\n     * @example\n     *\n     * _.upperFirst('fred');\n     * // => 'Fred'\n     *\n     * _.upperFirst('FRED');\n     * // => 'FRED'\n     */\n    var upperFirst = createCaseFirst('toUpperCase');\n\n    /**\n     * Splits `string` into an array of its words.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to inspect.\n     * @param {RegExp|string} [pattern] The pattern to match words.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the words of `string`.\n     * @example\n     *\n     * _.words('fred, barney, & pebbles');\n     * // => ['fred', 'barney', 'pebbles']\n     *\n     * _.words('fred, barney, & pebbles', /[^, ]+/g);\n     * // => ['fred', 'barney', '&', 'pebbles']\n     */\n    function words(string, pattern, guard) {\n      string = toString(string);\n      pattern = guard ? undefined : pattern;\n\n      if (pattern === undefined) {\n        return hasUnicodeWord(string) ? unicodeWords(string) : asciiWords(string);\n      }\n      return string.match(pattern) || [];\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Attempts to invoke `func`, returning either the result or the caught error\n     * object. Any additional arguments are provided to `func` when it's invoked.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Util\n     * @param {Function} func The function to attempt.\n     * @param {...*} [args] The arguments to invoke `func` with.\n     * @returns {*} Returns the `func` result or error object.\n     * @example\n     *\n     * // Avoid throwing errors for invalid selectors.\n     * var elements = _.attempt(function(selector) {\n     *   return document.querySelectorAll(selector);\n     * }, '>_>');\n     *\n     * if (_.isError(elements)) {\n     *   elements = [];\n     * }\n     */\n    var attempt = baseRest(function(func, args) {\n      try {\n        return apply(func, undefined, args);\n      } catch (e) {\n        return isError(e) ? e : new Error(e);\n      }\n    });\n\n    /**\n     * Binds methods of an object to the object itself, overwriting the existing\n     * method.\n     *\n     * **Note:** This method doesn't set the \"length\" property of bound functions.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @param {Object} object The object to bind and assign the bound methods to.\n     * @param {...(string|string[])} methodNames The object method names to bind.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var view = {\n     *   'label': 'docs',\n     *   'click': function() {\n     *     console.log('clicked ' + this.label);\n     *   }\n     * };\n     *\n     * _.bindAll(view, ['click']);\n     * jQuery(element).on('click', view.click);\n     * // => Logs 'clicked docs' when clicked.\n     */\n    var bindAll = flatRest(function(object, methodNames) {\n      arrayEach(methodNames, function(key) {\n        key = toKey(key);\n        baseAssignValue(object, key, bind(object[key], object));\n      });\n      return object;\n    });\n\n    /**\n     * Creates a function that iterates over `pairs` and invokes the corresponding\n     * function of the first predicate to return truthy. The predicate-function\n     * pairs are invoked with the `this` binding and arguments of the created\n     * function.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {Array} pairs The predicate-function pairs.\n     * @returns {Function} Returns the new composite function.\n     * @example\n     *\n     * var func = _.cond([\n     *   [_.matches({ 'a': 1 }),           _.constant('matches A')],\n     *   [_.conforms({ 'b': _.isNumber }), _.constant('matches B')],\n     *   [_.stubTrue,                      _.constant('no match')]\n     * ]);\n     *\n     * func({ 'a': 1, 'b': 2 });\n     * // => 'matches A'\n     *\n     * func({ 'a': 0, 'b': 1 });\n     * // => 'matches B'\n     *\n     * func({ 'a': '1', 'b': '2' });\n     * // => 'no match'\n     */\n    function cond(pairs) {\n      var length = pairs == null ? 0 : pairs.length,\n          toIteratee = getIteratee();\n\n      pairs = !length ? [] : arrayMap(pairs, function(pair) {\n        if (typeof pair[1] != 'function') {\n          throw new TypeError(FUNC_ERROR_TEXT);\n        }\n        return [toIteratee(pair[0]), pair[1]];\n      });\n\n      return baseRest(function(args) {\n        var index = -1;\n        while (++index < length) {\n          var pair = pairs[index];\n          if (apply(pair[0], this, args)) {\n            return apply(pair[1], this, args);\n          }\n        }\n      });\n    }\n\n    /**\n     * Creates a function that invokes the predicate properties of `source` with\n     * the corresponding property values of a given object, returning `true` if\n     * all predicates return truthy, else `false`.\n     *\n     * **Note:** The created function is equivalent to `_.conformsTo` with\n     * `source` partially applied.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {Object} source The object of property predicates to conform to.\n     * @returns {Function} Returns the new spec function.\n     * @example\n     *\n     * var objects = [\n     *   { 'a': 2, 'b': 1 },\n     *   { 'a': 1, 'b': 2 }\n     * ];\n     *\n     * _.filter(objects, _.conforms({ 'b': function(n) { return n > 1; } }));\n     * // => [{ 'a': 1, 'b': 2 }]\n     */\n    function conforms(source) {\n      return baseConforms(baseClone(source, CLONE_DEEP_FLAG));\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     */\n    function constant(value) {\n      return function() {\n        return value;\n      };\n    }\n\n    /**\n     * Checks `value` to determine whether a default value should be returned in\n     * its place. The `defaultValue` is returned if `value` is `NaN`, `null`,\n     * or `undefined`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.14.0\n     * @category Util\n     * @param {*} value The value to check.\n     * @param {*} defaultValue The default value.\n     * @returns {*} Returns the resolved value.\n     * @example\n     *\n     * _.defaultTo(1, 10);\n     * // => 1\n     *\n     * _.defaultTo(undefined, 10);\n     * // => 10\n     */\n    function defaultTo(value, defaultValue) {\n      return (value == null || value !== value) ? defaultValue : value;\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     */\n    var flow = createFlow();\n\n    /**\n     * This method is like `_.flow` except that it creates a function that\n     * invokes the given functions from right to left.\n     *\n     * @static\n     * @since 3.0.0\n     * @memberOf _\n     * @category Util\n     * @param {...(Function|Function[])} [funcs] The functions to invoke.\n     * @returns {Function} Returns the new composite function.\n     * @see _.flow\n     * @example\n     *\n     * function square(n) {\n     *   return n * n;\n     * }\n     *\n     * var addSquare = _.flowRight([square, _.add]);\n     * addSquare(1, 2);\n     * // => 9\n     */\n    var flowRight = createFlow(true);\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     */\n    function identity(value) {\n      return value;\n    }\n\n    /**\n     * Creates a function that invokes `func` with the arguments of the created\n     * function. If `func` is a property name, the created function returns the\n     * property value for a given element. If `func` is an array or object, the\n     * created function returns `true` for elements that contain the equivalent\n     * source properties, otherwise it returns `false`.\n     *\n     * @static\n     * @since 4.0.0\n     * @memberOf _\n     * @category Util\n     * @param {*} [func=_.identity] The value to convert to a callback.\n     * @returns {Function} Returns the callback.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney', 'age': 36, 'active': true },\n     *   { 'user': 'fred',   'age': 40, 'active': false }\n     * ];\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.filter(users, _.iteratee({ 'user': 'barney', 'active': true }));\n     * // => [{ 'user': 'barney', 'age': 36, 'active': true }]\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.filter(users, _.iteratee(['user', 'fred']));\n     * // => [{ 'user': 'fred', 'age': 40 }]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.map(users, _.iteratee('user'));\n     * // => ['barney', 'fred']\n     *\n     * // Create custom iteratee shorthands.\n     * _.iteratee = _.wrap(_.iteratee, function(iteratee, func) {\n     *   return !_.isRegExp(func) ? iteratee(func) : function(string) {\n     *     return func.test(string);\n     *   };\n     * });\n     *\n     * _.filter(['abc', 'def'], /ef/);\n     * // => ['def']\n     */\n    function iteratee(func) {\n      return baseIteratee(typeof func == 'function' ? func : baseClone(func, CLONE_DEEP_FLAG));\n    }\n\n    /**\n     * Creates a function that performs a partial deep comparison between a given\n     * object and `source`, returning `true` if the given object has equivalent\n     * property values, else `false`.\n     *\n     * **Note:** The created function is equivalent to `_.isMatch` with `source`\n     * partially applied.\n     *\n     * Partial comparisons will match empty array and empty object `source`\n     * values against any array or object value, respectively. See `_.isEqual`\n     * for a list of supported value comparisons.\n     *\n     * **Note:** Multiple values can be checked by combining several matchers\n     * using `_.overSome`\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Util\n     * @param {Object} source The object of property values to match.\n     * @returns {Function} Returns the new spec function.\n     * @example\n     *\n     * var objects = [\n     *   { 'a': 1, 'b': 2, 'c': 3 },\n     *   { 'a': 4, 'b': 5, 'c': 6 }\n     * ];\n     *\n     * _.filter(objects, _.matches({ 'a': 4, 'c': 6 }));\n     * // => [{ 'a': 4, 'b': 5, 'c': 6 }]\n     *\n     * // Checking for several possible values\n     * _.filter(objects, _.overSome([_.matches({ 'a': 1 }), _.matches({ 'a': 4 })]));\n     * // => [{ 'a': 1, 'b': 2, 'c': 3 }, { 'a': 4, 'b': 5, 'c': 6 }]\n     */\n    function matches(source) {\n      return baseMatches(baseClone(source, CLONE_DEEP_FLAG));\n    }\n\n    /**\n     * Creates a function that performs a partial deep comparison between the\n     * value at `path` of a given object to `srcValue`, returning `true` if the\n     * object value is equivalent, else `false`.\n     *\n     * **Note:** Partial comparisons will match empty array and empty object\n     * `srcValue` values against any array or object value, respectively. See\n     * `_.isEqual` for a list of supported value comparisons.\n     *\n     * **Note:** Multiple values can be checked by combining several matchers\n     * using `_.overSome`\n     *\n     * @static\n     * @memberOf _\n     * @since 3.2.0\n     * @category Util\n     * @param {Array|string} path The path of the property to get.\n     * @param {*} srcValue The value to match.\n     * @returns {Function} Returns the new spec function.\n     * @example\n     *\n     * var objects = [\n     *   { 'a': 1, 'b': 2, 'c': 3 },\n     *   { 'a': 4, 'b': 5, 'c': 6 }\n     * ];\n     *\n     * _.find(objects, _.matchesProperty('a', 4));\n     * // => { 'a': 4, 'b': 5, 'c': 6 }\n     *\n     * // Checking for several possible values\n     * _.filter(objects, _.overSome([_.matchesProperty('a', 1), _.matchesProperty('a', 4)]));\n     * // => [{ 'a': 1, 'b': 2, 'c': 3 }, { 'a': 4, 'b': 5, 'c': 6 }]\n     */\n    function matchesProperty(path, srcValue) {\n      return baseMatchesProperty(path, baseClone(srcValue, CLONE_DEEP_FLAG));\n    }\n\n    /**\n     * Creates a function that invokes the method at `path` of a given object.\n     * Any additional arguments are provided to the invoked method.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.7.0\n     * @category Util\n     * @param {Array|string} path The path of the method to invoke.\n     * @param {...*} [args] The arguments to invoke the method with.\n     * @returns {Function} Returns the new invoker function.\n     * @example\n     *\n     * var objects = [\n     *   { 'a': { 'b': _.constant(2) } },\n     *   { 'a': { 'b': _.constant(1) } }\n     * ];\n     *\n     * _.map(objects, _.method('a.b'));\n     * // => [2, 1]\n     *\n     * _.map(objects, _.method(['a', 'b']));\n     * // => [2, 1]\n     */\n    var method = baseRest(function(path, args) {\n      return function(object) {\n        return baseInvoke(object, path, args);\n      };\n    });\n\n    /**\n     * The opposite of `_.method`; this method creates a function that invokes\n     * the method at a given path of `object`. Any additional arguments are\n     * provided to the invoked method.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.7.0\n     * @category Util\n     * @param {Object} object The object to query.\n     * @param {...*} [args] The arguments to invoke the method with.\n     * @returns {Function} Returns the new invoker function.\n     * @example\n     *\n     * var array = _.times(3, _.constant),\n     *     object = { 'a': array, 'b': array, 'c': array };\n     *\n     * _.map(['a[2]', 'c[0]'], _.methodOf(object));\n     * // => [2, 0]\n     *\n     * _.map([['a', '2'], ['c', '0']], _.methodOf(object));\n     * // => [2, 0]\n     */\n    var methodOf = baseRest(function(object, args) {\n      return function(path) {\n        return baseInvoke(object, path, args);\n      };\n    });\n\n    /**\n     * Adds all own enumerable string keyed function properties of a source\n     * object to the destination object. If `object` is a function, then methods\n     * are added to its prototype as well.\n     *\n     * **Note:** Use `_.runInContext` to create a pristine `lodash` function to\n     * avoid conflicts caused by modifying the original.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @param {Function|Object} [object=lodash] The destination object.\n     * @param {Object} source The object of functions to add.\n     * @param {Object} [options={}] The options object.\n     * @param {boolean} [options.chain=true] Specify whether mixins are chainable.\n     * @returns {Function|Object} Returns `object`.\n     * @example\n     *\n     * function vowels(string) {\n     *   return _.filter(string, function(v) {\n     *     return /[aeiou]/i.test(v);\n     *   });\n     * }\n     *\n     * _.mixin({ 'vowels': vowels });\n     * _.vowels('fred');\n     * // => ['e']\n     *\n     * _('fred').vowels().value();\n     * // => ['e']\n     *\n     * _.mixin({ 'vowels': vowels }, { 'chain': false });\n     * _('fred').vowels();\n     * // => ['e']\n     */\n    function mixin(object, source, options) {\n      var props = keys(source),\n          methodNames = baseFunctions(source, props);\n\n      if (options == null &&\n          !(isObject(source) && (methodNames.length || !props.length))) {\n        options = source;\n        source = object;\n        object = this;\n        methodNames = baseFunctions(source, keys(source));\n      }\n      var chain = !(isObject(options) && 'chain' in options) || !!options.chain,\n          isFunc = isFunction(object);\n\n      arrayEach(methodNames, function(methodName) {\n        var func = source[methodName];\n        object[methodName] = func;\n        if (isFunc) {\n          object.prototype[methodName] = function() {\n            var chainAll = this.__chain__;\n            if (chain || chainAll) {\n              var result = object(this.__wrapped__),\n                  actions = result.__actions__ = copyArray(this.__actions__);\n\n              actions.push({ 'func': func, 'args': arguments, 'thisArg': object });\n              result.__chain__ = chainAll;\n              return result;\n            }\n            return func.apply(object, arrayPush([this.value()], arguments));\n          };\n        }\n      });\n\n      return object;\n    }\n\n    /**\n     * Reverts the `_` variable to its previous value and returns a reference to\n     * the `lodash` function.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @returns {Function} Returns the `lodash` function.\n     * @example\n     *\n     * var lodash = _.noConflict();\n     */\n    function noConflict() {\n      if (root._ === this) {\n        root._ = oldDash;\n      }\n      return this;\n    }\n\n    /**\n     * This method returns `undefined`.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.3.0\n     * @category Util\n     * @example\n     *\n     * _.times(2, _.noop);\n     * // => [undefined, undefined]\n     */\n    function noop() {\n      // No operation performed.\n    }\n\n    /**\n     * Creates a function that gets the argument at index `n`. If `n` is negative,\n     * the nth argument from the end is returned.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {number} [n=0] The index of the argument to return.\n     * @returns {Function} Returns the new pass-thru function.\n     * @example\n     *\n     * var func = _.nthArg(1);\n     * func('a', 'b', 'c', 'd');\n     * // => 'b'\n     *\n     * var func = _.nthArg(-2);\n     * func('a', 'b', 'c', 'd');\n     * // => 'c'\n     */\n    function nthArg(n) {\n      n = toInteger(n);\n      return baseRest(function(args) {\n        return baseNth(args, n);\n      });\n    }\n\n    /**\n     * Creates a function that invokes `iteratees` with the arguments it receives\n     * and returns their results.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {...(Function|Function[])} [iteratees=[_.identity]]\n     *  The iteratees to invoke.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var func = _.over([Math.max, Math.min]);\n     *\n     * func(1, 2, 3, 4);\n     * // => [4, 1]\n     */\n    var over = createOver(arrayMap);\n\n    /**\n     * Creates a function that checks if **all** of the `predicates` return\n     * truthy when invoked with the arguments it receives.\n     *\n     * Following shorthands are possible for providing predicates.\n     * Pass an `Object` and it will be used as an parameter for `_.matches` to create the predicate.\n     * Pass an `Array` of parameters for `_.matchesProperty` and the predicate will be created using them.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {...(Function|Function[])} [predicates=[_.identity]]\n     *  The predicates to check.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var func = _.overEvery([Boolean, isFinite]);\n     *\n     * func('1');\n     * // => true\n     *\n     * func(null);\n     * // => false\n     *\n     * func(NaN);\n     * // => false\n     */\n    var overEvery = createOver(arrayEvery);\n\n    /**\n     * Creates a function that checks if **any** of the `predicates` return\n     * truthy when invoked with the arguments it receives.\n     *\n     * Following shorthands are possible for providing predicates.\n     * Pass an `Object` and it will be used as an parameter for `_.matches` to create the predicate.\n     * Pass an `Array` of parameters for `_.matchesProperty` and the predicate will be created using them.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {...(Function|Function[])} [predicates=[_.identity]]\n     *  The predicates to check.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var func = _.overSome([Boolean, isFinite]);\n     *\n     * func('1');\n     * // => true\n     *\n     * func(null);\n     * // => true\n     *\n     * func(NaN);\n     * // => false\n     *\n     * var matchesFunc = _.overSome([{ 'a': 1 }, { 'a': 2 }])\n     * var matchesPropertyFunc = _.overSome([['a', 1], ['a', 2]])\n     */\n    var overSome = createOver(arraySome);\n\n    /**\n     * Creates a function that returns the value at `path` of a given object.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.4.0\n     * @category Util\n     * @param {Array|string} path The path of the property to get.\n     * @returns {Function} Returns the new accessor function.\n     * @example\n     *\n     * var objects = [\n     *   { 'a': { 'b': 2 } },\n     *   { 'a': { 'b': 1 } }\n     * ];\n     *\n     * _.map(objects, _.property('a.b'));\n     * // => [2, 1]\n     *\n     * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b');\n     * // => [1, 2]\n     */\n    function property(path) {\n      return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path);\n    }\n\n    /**\n     * The opposite of `_.property`; this method creates a function that returns\n     * the value at a given path of `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Util\n     * @param {Object} object The object to query.\n     * @returns {Function} Returns the new accessor function.\n     * @example\n     *\n     * var array = [0, 1, 2],\n     *     object = { 'a': array, 'b': array, 'c': array };\n     *\n     * _.map(['a[2]', 'c[0]'], _.propertyOf(object));\n     * // => [2, 0]\n     *\n     * _.map([['a', '2'], ['c', '0']], _.propertyOf(object));\n     * // => [2, 0]\n     */\n    function propertyOf(object) {\n      return function(path) {\n        return object == null ? undefined : baseGet(object, path);\n      };\n    }\n\n    /**\n     * Creates an array of numbers (positive and/or negative) progressing from\n     * `start` up to, but not including, `end`. A step of `-1` is used if a negative\n     * `start` is specified without an `end` or `step`. If `end` is not specified,\n     * it's set to `start` with `start` then set to `0`.\n     *\n     * **Note:** JavaScript follows the IEEE-754 standard for resolving\n     * floating-point values which can produce unexpected results.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @param {number} [start=0] The start of the range.\n     * @param {number} end The end of the range.\n     * @param {number} [step=1] The value to increment or decrement by.\n     * @returns {Array} Returns the range of numbers.\n     * @see _.inRange, _.rangeRight\n     * @example\n     *\n     * _.range(4);\n     * // => [0, 1, 2, 3]\n     *\n     * _.range(-4);\n     * // => [0, -1, -2, -3]\n     *\n     * _.range(1, 5);\n     * // => [1, 2, 3, 4]\n     *\n     * _.range(0, 20, 5);\n     * // => [0, 5, 10, 15]\n     *\n     * _.range(0, -4, -1);\n     * // => [0, -1, -2, -3]\n     *\n     * _.range(1, 4, 0);\n     * // => [1, 1, 1]\n     *\n     * _.range(0);\n     * // => []\n     */\n    var range = createRange();\n\n    /**\n     * This method is like `_.range` except that it populates values in\n     * descending order.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {number} [start=0] The start of the range.\n     * @param {number} end The end of the range.\n     * @param {number} [step=1] The value to increment or decrement by.\n     * @returns {Array} Returns the range of numbers.\n     * @see _.inRange, _.range\n     * @example\n     *\n     * _.rangeRight(4);\n     * // => [3, 2, 1, 0]\n     *\n     * _.rangeRight(-4);\n     * // => [-3, -2, -1, 0]\n     *\n     * _.rangeRight(1, 5);\n     * // => [4, 3, 2, 1]\n     *\n     * _.rangeRight(0, 20, 5);\n     * // => [15, 10, 5, 0]\n     *\n     * _.rangeRight(0, -4, -1);\n     * // => [-3, -2, -1, 0]\n     *\n     * _.rangeRight(1, 4, 0);\n     * // => [1, 1, 1]\n     *\n     * _.rangeRight(0);\n     * // => []\n     */\n    var rangeRight = createRange(true);\n\n    /**\n     * This method returns a new empty array.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.13.0\n     * @category Util\n     * @returns {Array} Returns the new empty array.\n     * @example\n     *\n     * var arrays = _.times(2, _.stubArray);\n     *\n     * console.log(arrays);\n     * // => [[], []]\n     *\n     * console.log(arrays[0] === arrays[1]);\n     * // => false\n     */\n    function stubArray() {\n      return [];\n    }\n\n    /**\n     * This method returns `false`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.13.0\n     * @category Util\n     * @returns {boolean} Returns `false`.\n     * @example\n     *\n     * _.times(2, _.stubFalse);\n     * // => [false, false]\n     */\n    function stubFalse() {\n      return false;\n    }\n\n    /**\n     * This method returns a new empty object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.13.0\n     * @category Util\n     * @returns {Object} Returns the new empty object.\n     * @example\n     *\n     * var objects = _.times(2, _.stubObject);\n     *\n     * console.log(objects);\n     * // => [{}, {}]\n     *\n     * console.log(objects[0] === objects[1]);\n     * // => false\n     */\n    function stubObject() {\n      return {};\n    }\n\n    /**\n     * This method returns an empty string.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.13.0\n     * @category Util\n     * @returns {string} Returns the empty string.\n     * @example\n     *\n     * _.times(2, _.stubString);\n     * // => ['', '']\n     */\n    function stubString() {\n      return '';\n    }\n\n    /**\n     * This method returns `true`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.13.0\n     * @category Util\n     * @returns {boolean} Returns `true`.\n     * @example\n     *\n     * _.times(2, _.stubTrue);\n     * // => [true, true]\n     */\n    function stubTrue() {\n      return true;\n    }\n\n    /**\n     * Invokes the iteratee `n` times, returning an array of the results of\n     * each invocation. The iteratee is invoked with one argument; (index).\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @param {number} n The number of times to invoke `iteratee`.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the array of results.\n     * @example\n     *\n     * _.times(3, String);\n     * // => ['0', '1', '2']\n     *\n     *  _.times(4, _.constant(0));\n     * // => [0, 0, 0, 0]\n     */\n    function times(n, iteratee) {\n      n = toInteger(n);\n      if (n < 1 || n > MAX_SAFE_INTEGER) {\n        return [];\n      }\n      var index = MAX_ARRAY_LENGTH,\n          length = nativeMin(n, MAX_ARRAY_LENGTH);\n\n      iteratee = getIteratee(iteratee);\n      n -= MAX_ARRAY_LENGTH;\n\n      var result = baseTimes(length, iteratee);\n      while (++index < n) {\n        iteratee(index);\n      }\n      return result;\n    }\n\n    /**\n     * Converts `value` to a property path array.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {*} value The value to convert.\n     * @returns {Array} Returns the new property path array.\n     * @example\n     *\n     * _.toPath('a.b.c');\n     * // => ['a', 'b', 'c']\n     *\n     * _.toPath('a[0].b.c');\n     * // => ['a', '0', 'b', 'c']\n     */\n    function toPath(value) {\n      if (isArray(value)) {\n        return arrayMap(value, toKey);\n      }\n      return isSymbol(value) ? [value] : copyArray(stringToPath(toString(value)));\n    }\n\n    /**\n     * Generates a unique ID. If `prefix` is given, the ID is appended to it.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @param {string} [prefix=''] The value to prefix the ID with.\n     * @returns {string} Returns the unique ID.\n     * @example\n     *\n     * _.uniqueId('contact_');\n     * // => 'contact_104'\n     *\n     * _.uniqueId();\n     * // => '105'\n     */\n    function uniqueId(prefix) {\n      var id = ++idCounter;\n      return toString(prefix) + id;\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Adds two numbers.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.4.0\n     * @category Math\n     * @param {number} augend The first number in an addition.\n     * @param {number} addend The second number in an addition.\n     * @returns {number} Returns the total.\n     * @example\n     *\n     * _.add(6, 4);\n     * // => 10\n     */\n    var add = createMathOperation(function(augend, addend) {\n      return augend + addend;\n    }, 0);\n\n    /**\n     * Computes `number` rounded up to `precision`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.10.0\n     * @category Math\n     * @param {number} number The number to round up.\n     * @param {number} [precision=0] The precision to round up to.\n     * @returns {number} Returns the rounded up number.\n     * @example\n     *\n     * _.ceil(4.006);\n     * // => 5\n     *\n     * _.ceil(6.004, 2);\n     * // => 6.01\n     *\n     * _.ceil(6040, -2);\n     * // => 6100\n     */\n    var ceil = createRound('ceil');\n\n    /**\n     * Divide two numbers.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.7.0\n     * @category Math\n     * @param {number} dividend The first number in a division.\n     * @param {number} divisor The second number in a division.\n     * @returns {number} Returns the quotient.\n     * @example\n     *\n     * _.divide(6, 4);\n     * // => 1.5\n     */\n    var divide = createMathOperation(function(dividend, divisor) {\n      return dividend / divisor;\n    }, 1);\n\n    /**\n     * Computes `number` rounded down to `precision`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.10.0\n     * @category Math\n     * @param {number} number The number to round down.\n     * @param {number} [precision=0] The precision to round down to.\n     * @returns {number} Returns the rounded down number.\n     * @example\n     *\n     * _.floor(4.006);\n     * // => 4\n     *\n     * _.floor(0.046, 2);\n     * // => 0.04\n     *\n     * _.floor(4060, -2);\n     * // => 4000\n     */\n    var floor = createRound('floor');\n\n    /**\n     * Computes the maximum value of `array`. If `array` is empty or falsey,\n     * `undefined` is returned.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @returns {*} Returns the maximum value.\n     * @example\n     *\n     * _.max([4, 2, 8, 6]);\n     * // => 8\n     *\n     * _.max([]);\n     * // => undefined\n     */\n    function max(array) {\n      return (array && array.length)\n        ? baseExtremum(array, identity, baseGt)\n        : undefined;\n    }\n\n    /**\n     * This method is like `_.max` except that it accepts `iteratee` which is\n     * invoked for each element in `array` to generate the criterion by which\n     * the value is ranked. The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {*} Returns the maximum value.\n     * @example\n     *\n     * var objects = [{ 'n': 1 }, { 'n': 2 }];\n     *\n     * _.maxBy(objects, function(o) { return o.n; });\n     * // => { 'n': 2 }\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.maxBy(objects, 'n');\n     * // => { 'n': 2 }\n     */\n    function maxBy(array, iteratee) {\n      return (array && array.length)\n        ? baseExtremum(array, getIteratee(iteratee, 2), baseGt)\n        : undefined;\n    }\n\n    /**\n     * Computes the mean of the values in `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @returns {number} Returns the mean.\n     * @example\n     *\n     * _.mean([4, 2, 8, 6]);\n     * // => 5\n     */\n    function mean(array) {\n      return baseMean(array, identity);\n    }\n\n    /**\n     * This method is like `_.mean` except that it accepts `iteratee` which is\n     * invoked for each element in `array` to generate the value to be averaged.\n     * The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.7.0\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {number} Returns the mean.\n     * @example\n     *\n     * var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }];\n     *\n     * _.meanBy(objects, function(o) { return o.n; });\n     * // => 5\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.meanBy(objects, 'n');\n     * // => 5\n     */\n    function meanBy(array, iteratee) {\n      return baseMean(array, getIteratee(iteratee, 2));\n    }\n\n    /**\n     * Computes the minimum value of `array`. If `array` is empty or falsey,\n     * `undefined` is returned.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @returns {*} Returns the minimum value.\n     * @example\n     *\n     * _.min([4, 2, 8, 6]);\n     * // => 2\n     *\n     * _.min([]);\n     * // => undefined\n     */\n    function min(array) {\n      return (array && array.length)\n        ? baseExtremum(array, identity, baseLt)\n        : undefined;\n    }\n\n    /**\n     * This method is like `_.min` except that it accepts `iteratee` which is\n     * invoked for each element in `array` to generate the criterion by which\n     * the value is ranked. The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {*} Returns the minimum value.\n     * @example\n     *\n     * var objects = [{ 'n': 1 }, { 'n': 2 }];\n     *\n     * _.minBy(objects, function(o) { return o.n; });\n     * // => { 'n': 1 }\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.minBy(objects, 'n');\n     * // => { 'n': 1 }\n     */\n    function minBy(array, iteratee) {\n      return (array && array.length)\n        ? baseExtremum(array, getIteratee(iteratee, 2), baseLt)\n        : undefined;\n    }\n\n    /**\n     * Multiply two numbers.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.7.0\n     * @category Math\n     * @param {number} multiplier The first number in a multiplication.\n     * @param {number} multiplicand The second number in a multiplication.\n     * @returns {number} Returns the product.\n     * @example\n     *\n     * _.multiply(6, 4);\n     * // => 24\n     */\n    var multiply = createMathOperation(function(multiplier, multiplicand) {\n      return multiplier * multiplicand;\n    }, 1);\n\n    /**\n     * Computes `number` rounded to `precision`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.10.0\n     * @category Math\n     * @param {number} number The number to round.\n     * @param {number} [precision=0] The precision to round to.\n     * @returns {number} Returns the rounded number.\n     * @example\n     *\n     * _.round(4.006);\n     * // => 4\n     *\n     * _.round(4.006, 2);\n     * // => 4.01\n     *\n     * _.round(4060, -2);\n     * // => 4100\n     */\n    var round = createRound('round');\n\n    /**\n     * Subtract two numbers.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Math\n     * @param {number} minuend The first number in a subtraction.\n     * @param {number} subtrahend The second number in a subtraction.\n     * @returns {number} Returns the difference.\n     * @example\n     *\n     * _.subtract(6, 4);\n     * // => 2\n     */\n    var subtract = createMathOperation(function(minuend, subtrahend) {\n      return minuend - subtrahend;\n    }, 0);\n\n    /**\n     * Computes the sum of the values in `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.4.0\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @returns {number} Returns the sum.\n     * @example\n     *\n     * _.sum([4, 2, 8, 6]);\n     * // => 20\n     */\n    function sum(array) {\n      return (array && array.length)\n        ? baseSum(array, identity)\n        : 0;\n    }\n\n    /**\n     * This method is like `_.sum` except that it accepts `iteratee` which is\n     * invoked for each element in `array` to generate the value to be summed.\n     * The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {number} Returns the sum.\n     * @example\n     *\n     * var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }];\n     *\n     * _.sumBy(objects, function(o) { return o.n; });\n     * // => 20\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.sumBy(objects, 'n');\n     * // => 20\n     */\n    function sumBy(array, iteratee) {\n      return (array && array.length)\n        ? baseSum(array, getIteratee(iteratee, 2))\n        : 0;\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    // Add methods that return wrapped values in chain sequences.\n    lodash.after = after;\n    lodash.ary = ary;\n    lodash.assign = assign;\n    lodash.assignIn = assignIn;\n    lodash.assignInWith = assignInWith;\n    lodash.assignWith = assignWith;\n    lodash.at = at;\n    lodash.before = before;\n    lodash.bind = bind;\n    lodash.bindAll = bindAll;\n    lodash.bindKey = bindKey;\n    lodash.castArray = castArray;\n    lodash.chain = chain;\n    lodash.chunk = chunk;\n    lodash.compact = compact;\n    lodash.concat = concat;\n    lodash.cond = cond;\n    lodash.conforms = conforms;\n    lodash.constant = constant;\n    lodash.countBy = countBy;\n    lodash.create = create;\n    lodash.curry = curry;\n    lodash.curryRight = curryRight;\n    lodash.debounce = debounce;\n    lodash.defaults = defaults;\n    lodash.defaultsDeep = defaultsDeep;\n    lodash.defer = defer;\n    lodash.delay = delay;\n    lodash.difference = difference;\n    lodash.differenceBy = differenceBy;\n    lodash.differenceWith = differenceWith;\n    lodash.drop = drop;\n    lodash.dropRight = dropRight;\n    lodash.dropRightWhile = dropRightWhile;\n    lodash.dropWhile = dropWhile;\n    lodash.fill = fill;\n    lodash.filter = filter;\n    lodash.flatMap = flatMap;\n    lodash.flatMapDeep = flatMapDeep;\n    lodash.flatMapDepth = flatMapDepth;\n    lodash.flatten = flatten;\n    lodash.flattenDeep = flattenDeep;\n    lodash.flattenDepth = flattenDepth;\n    lodash.flip = flip;\n    lodash.flow = flow;\n    lodash.flowRight = flowRight;\n    lodash.fromPairs = fromPairs;\n    lodash.functions = functions;\n    lodash.functionsIn = functionsIn;\n    lodash.groupBy = groupBy;\n    lodash.initial = initial;\n    lodash.intersection = intersection;\n    lodash.intersectionBy = intersectionBy;\n    lodash.intersectionWith = intersectionWith;\n    lodash.invert = invert;\n    lodash.invertBy = invertBy;\n    lodash.invokeMap = invokeMap;\n    lodash.iteratee = iteratee;\n    lodash.keyBy = keyBy;\n    lodash.keys = keys;\n    lodash.keysIn = keysIn;\n    lodash.map = map;\n    lodash.mapKeys = mapKeys;\n    lodash.mapValues = mapValues;\n    lodash.matches = matches;\n    lodash.matchesProperty = matchesProperty;\n    lodash.memoize = memoize;\n    lodash.merge = merge;\n    lodash.mergeWith = mergeWith;\n    lodash.method = method;\n    lodash.methodOf = methodOf;\n    lodash.mixin = mixin;\n    lodash.negate = negate;\n    lodash.nthArg = nthArg;\n    lodash.omit = omit;\n    lodash.omitBy = omitBy;\n    lodash.once = once;\n    lodash.orderBy = orderBy;\n    lodash.over = over;\n    lodash.overArgs = overArgs;\n    lodash.overEvery = overEvery;\n    lodash.overSome = overSome;\n    lodash.partial = partial;\n    lodash.partialRight = partialRight;\n    lodash.partition = partition;\n    lodash.pick = pick;\n    lodash.pickBy = pickBy;\n    lodash.property = property;\n    lodash.propertyOf = propertyOf;\n    lodash.pull = pull;\n    lodash.pullAll = pullAll;\n    lodash.pullAllBy = pullAllBy;\n    lodash.pullAllWith = pullAllWith;\n    lodash.pullAt = pullAt;\n    lodash.range = range;\n    lodash.rangeRight = rangeRight;\n    lodash.rearg = rearg;\n    lodash.reject = reject;\n    lodash.remove = remove;\n    lodash.rest = rest;\n    lodash.reverse = reverse;\n    lodash.sampleSize = sampleSize;\n    lodash.set = set;\n    lodash.setWith = setWith;\n    lodash.shuffle = shuffle;\n    lodash.slice = slice;\n    lodash.sortBy = sortBy;\n    lodash.sortedUniq = sortedUniq;\n    lodash.sortedUniqBy = sortedUniqBy;\n    lodash.split = split;\n    lodash.spread = spread;\n    lodash.tail = tail;\n    lodash.take = take;\n    lodash.takeRight = takeRight;\n    lodash.takeRightWhile = takeRightWhile;\n    lodash.takeWhile = takeWhile;\n    lodash.tap = tap;\n    lodash.throttle = throttle;\n    lodash.thru = thru;\n    lodash.toArray = toArray;\n    lodash.toPairs = toPairs;\n    lodash.toPairsIn = toPairsIn;\n    lodash.toPath = toPath;\n    lodash.toPlainObject = toPlainObject;\n    lodash.transform = transform;\n    lodash.unary = unary;\n    lodash.union = union;\n    lodash.unionBy = unionBy;\n    lodash.unionWith = unionWith;\n    lodash.uniq = uniq;\n    lodash.uniqBy = uniqBy;\n    lodash.uniqWith = uniqWith;\n    lodash.unset = unset;\n    lodash.unzip = unzip;\n    lodash.unzipWith = unzipWith;\n    lodash.update = update;\n    lodash.updateWith = updateWith;\n    lodash.values = values;\n    lodash.valuesIn = valuesIn;\n    lodash.without = without;\n    lodash.words = words;\n    lodash.wrap = wrap;\n    lodash.xor = xor;\n    lodash.xorBy = xorBy;\n    lodash.xorWith = xorWith;\n    lodash.zip = zip;\n    lodash.zipObject = zipObject;\n    lodash.zipObjectDeep = zipObjectDeep;\n    lodash.zipWith = zipWith;\n\n    // Add aliases.\n    lodash.entries = toPairs;\n    lodash.entriesIn = toPairsIn;\n    lodash.extend = assignIn;\n    lodash.extendWith = assignInWith;\n\n    // Add methods to `lodash.prototype`.\n    mixin(lodash, lodash);\n\n    /*------------------------------------------------------------------------*/\n\n    // Add methods that return unwrapped values in chain sequences.\n    lodash.add = add;\n    lodash.attempt = attempt;\n    lodash.camelCase = camelCase;\n    lodash.capitalize = capitalize;\n    lodash.ceil = ceil;\n    lodash.clamp = clamp;\n    lodash.clone = clone;\n    lodash.cloneDeep = cloneDeep;\n    lodash.cloneDeepWith = cloneDeepWith;\n    lodash.cloneWith = cloneWith;\n    lodash.conformsTo = conformsTo;\n    lodash.deburr = deburr;\n    lodash.defaultTo = defaultTo;\n    lodash.divide = divide;\n    lodash.endsWith = endsWith;\n    lodash.eq = eq;\n    lodash.escape = escape;\n    lodash.escapeRegExp = escapeRegExp;\n    lodash.every = every;\n    lodash.find = find;\n    lodash.findIndex = findIndex;\n    lodash.findKey = findKey;\n    lodash.findLast = findLast;\n    lodash.findLastIndex = findLastIndex;\n    lodash.findLastKey = findLastKey;\n    lodash.floor = floor;\n    lodash.forEach = forEach;\n    lodash.forEachRight = forEachRight;\n    lodash.forIn = forIn;\n    lodash.forInRight = forInRight;\n    lodash.forOwn = forOwn;\n    lodash.forOwnRight = forOwnRight;\n    lodash.get = get;\n    lodash.gt = gt;\n    lodash.gte = gte;\n    lodash.has = has;\n    lodash.hasIn = hasIn;\n    lodash.head = head;\n    lodash.identity = identity;\n    lodash.includes = includes;\n    lodash.indexOf = indexOf;\n    lodash.inRange = inRange;\n    lodash.invoke = invoke;\n    lodash.isArguments = isArguments;\n    lodash.isArray = isArray;\n    lodash.isArrayBuffer = isArrayBuffer;\n    lodash.isArrayLike = isArrayLike;\n    lodash.isArrayLikeObject = isArrayLikeObject;\n    lodash.isBoolean = isBoolean;\n    lodash.isBuffer = isBuffer;\n    lodash.isDate = isDate;\n    lodash.isElement = isElement;\n    lodash.isEmpty = isEmpty;\n    lodash.isEqual = isEqual;\n    lodash.isEqualWith = isEqualWith;\n    lodash.isError = isError;\n    lodash.isFinite = isFinite;\n    lodash.isFunction = isFunction;\n    lodash.isInteger = isInteger;\n    lodash.isLength = isLength;\n    lodash.isMap = isMap;\n    lodash.isMatch = isMatch;\n    lodash.isMatchWith = isMatchWith;\n    lodash.isNaN = isNaN;\n    lodash.isNative = isNative;\n    lodash.isNil = isNil;\n    lodash.isNull = isNull;\n    lodash.isNumber = isNumber;\n    lodash.isObject = isObject;\n    lodash.isObjectLike = isObjectLike;\n    lodash.isPlainObject = isPlainObject;\n    lodash.isRegExp = isRegExp;\n    lodash.isSafeInteger = isSafeInteger;\n    lodash.isSet = isSet;\n    lodash.isString = isString;\n    lodash.isSymbol = isSymbol;\n    lodash.isTypedArray = isTypedArray;\n    lodash.isUndefined = isUndefined;\n    lodash.isWeakMap = isWeakMap;\n    lodash.isWeakSet = isWeakSet;\n    lodash.join = join;\n    lodash.kebabCase = kebabCase;\n    lodash.last = last;\n    lodash.lastIndexOf = lastIndexOf;\n    lodash.lowerCase = lowerCase;\n    lodash.lowerFirst = lowerFirst;\n    lodash.lt = lt;\n    lodash.lte = lte;\n    lodash.max = max;\n    lodash.maxBy = maxBy;\n    lodash.mean = mean;\n    lodash.meanBy = meanBy;\n    lodash.min = min;\n    lodash.minBy = minBy;\n    lodash.stubArray = stubArray;\n    lodash.stubFalse = stubFalse;\n    lodash.stubObject = stubObject;\n    lodash.stubString = stubString;\n    lodash.stubTrue = stubTrue;\n    lodash.multiply = multiply;\n    lodash.nth = nth;\n    lodash.noConflict = noConflict;\n    lodash.noop = noop;\n    lodash.now = now;\n    lodash.pad = pad;\n    lodash.padEnd = padEnd;\n    lodash.padStart = padStart;\n    lodash.parseInt = parseInt;\n    lodash.random = random;\n    lodash.reduce = reduce;\n    lodash.reduceRight = reduceRight;\n    lodash.repeat = repeat;\n    lodash.replace = replace;\n    lodash.result = result;\n    lodash.round = round;\n    lodash.runInContext = runInContext;\n    lodash.sample = sample;\n    lodash.size = size;\n    lodash.snakeCase = snakeCase;\n    lodash.some = some;\n    lodash.sortedIndex = sortedIndex;\n    lodash.sortedIndexBy = sortedIndexBy;\n    lodash.sortedIndexOf = sortedIndexOf;\n    lodash.sortedLastIndex = sortedLastIndex;\n    lodash.sortedLastIndexBy = sortedLastIndexBy;\n    lodash.sortedLastIndexOf = sortedLastIndexOf;\n    lodash.startCase = startCase;\n    lodash.startsWith = startsWith;\n    lodash.subtract = subtract;\n    lodash.sum = sum;\n    lodash.sumBy = sumBy;\n    lodash.template = template;\n    lodash.times = times;\n    lodash.toFinite = toFinite;\n    lodash.toInteger = toInteger;\n    lodash.toLength = toLength;\n    lodash.toLower = toLower;\n    lodash.toNumber = toNumber;\n    lodash.toSafeInteger = toSafeInteger;\n    lodash.toString = toString;\n    lodash.toUpper = toUpper;\n    lodash.trim = trim;\n    lodash.trimEnd = trimEnd;\n    lodash.trimStart = trimStart;\n    lodash.truncate = truncate;\n    lodash.unescape = unescape;\n    lodash.uniqueId = uniqueId;\n    lodash.upperCase = upperCase;\n    lodash.upperFirst = upperFirst;\n\n    // Add aliases.\n    lodash.each = forEach;\n    lodash.eachRight = forEachRight;\n    lodash.first = head;\n\n    mixin(lodash, (function() {\n      var source = {};\n      baseForOwn(lodash, function(func, methodName) {\n        if (!hasOwnProperty.call(lodash.prototype, methodName)) {\n          source[methodName] = func;\n        }\n      });\n      return source;\n    }()), { 'chain': false });\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * The semantic version number.\n     *\n     * @static\n     * @memberOf _\n     * @type {string}\n     */\n    lodash.VERSION = VERSION;\n\n    // Assign default placeholders.\n    arrayEach(['bind', 'bindKey', 'curry', 'curryRight', 'partial', 'partialRight'], function(methodName) {\n      lodash[methodName].placeholder = lodash;\n    });\n\n    // Add `LazyWrapper` methods for `_.drop` and `_.take` variants.\n    arrayEach(['drop', 'take'], function(methodName, index) {\n      LazyWrapper.prototype[methodName] = function(n) {\n        n = n === undefined ? 1 : nativeMax(toInteger(n), 0);\n\n        var result = (this.__filtered__ && !index)\n          ? new LazyWrapper(this)\n          : this.clone();\n\n        if (result.__filtered__) {\n          result.__takeCount__ = nativeMin(n, result.__takeCount__);\n        } else {\n          result.__views__.push({\n            'size': nativeMin(n, MAX_ARRAY_LENGTH),\n            'type': methodName + (result.__dir__ < 0 ? 'Right' : '')\n          });\n        }\n        return result;\n      };\n\n      LazyWrapper.prototype[methodName + 'Right'] = function(n) {\n        return this.reverse()[methodName](n).reverse();\n      };\n    });\n\n    // Add `LazyWrapper` methods that accept an `iteratee` value.\n    arrayEach(['filter', 'map', 'takeWhile'], function(methodName, index) {\n      var type = index + 1,\n          isFilter = type == LAZY_FILTER_FLAG || type == LAZY_WHILE_FLAG;\n\n      LazyWrapper.prototype[methodName] = function(iteratee) {\n        var result = this.clone();\n        result.__iteratees__.push({\n          'iteratee': getIteratee(iteratee, 3),\n          'type': type\n        });\n        result.__filtered__ = result.__filtered__ || isFilter;\n        return result;\n      };\n    });\n\n    // Add `LazyWrapper` methods for `_.head` and `_.last`.\n    arrayEach(['head', 'last'], function(methodName, index) {\n      var takeName = 'take' + (index ? 'Right' : '');\n\n      LazyWrapper.prototype[methodName] = function() {\n        return this[takeName](1).value()[0];\n      };\n    });\n\n    // Add `LazyWrapper` methods for `_.initial` and `_.tail`.\n    arrayEach(['initial', 'tail'], function(methodName, index) {\n      var dropName = 'drop' + (index ? '' : 'Right');\n\n      LazyWrapper.prototype[methodName] = function() {\n        return this.__filtered__ ? new LazyWrapper(this) : this[dropName](1);\n      };\n    });\n\n    LazyWrapper.prototype.compact = function() {\n      return this.filter(identity);\n    };\n\n    LazyWrapper.prototype.find = function(predicate) {\n      return this.filter(predicate).head();\n    };\n\n    LazyWrapper.prototype.findLast = function(predicate) {\n      return this.reverse().find(predicate);\n    };\n\n    LazyWrapper.prototype.invokeMap = baseRest(function(path, args) {\n      if (typeof path == 'function') {\n        return new LazyWrapper(this);\n      }\n      return this.map(function(value) {\n        return baseInvoke(value, path, args);\n      });\n    });\n\n    LazyWrapper.prototype.reject = function(predicate) {\n      return this.filter(negate(getIteratee(predicate)));\n    };\n\n    LazyWrapper.prototype.slice = function(start, end) {\n      start = toInteger(start);\n\n      var result = this;\n      if (result.__filtered__ && (start > 0 || end < 0)) {\n        return new LazyWrapper(result);\n      }\n      if (start < 0) {\n        result = result.takeRight(-start);\n      } else if (start) {\n        result = result.drop(start);\n      }\n      if (end !== undefined) {\n        end = toInteger(end);\n        result = end < 0 ? result.dropRight(-end) : result.take(end - start);\n      }\n      return result;\n    };\n\n    LazyWrapper.prototype.takeRightWhile = function(predicate) {\n      return this.reverse().takeWhile(predicate).reverse();\n    };\n\n    LazyWrapper.prototype.toArray = function() {\n      return this.take(MAX_ARRAY_LENGTH);\n    };\n\n    // Add `LazyWrapper` methods to `lodash.prototype`.\n    baseForOwn(LazyWrapper.prototype, function(func, methodName) {\n      var checkIteratee = /^(?:filter|find|map|reject)|While$/.test(methodName),\n          isTaker = /^(?:head|last)$/.test(methodName),\n          lodashFunc = lodash[isTaker ? ('take' + (methodName == 'last' ? 'Right' : '')) : methodName],\n          retUnwrapped = isTaker || /^find/.test(methodName);\n\n      if (!lodashFunc) {\n        return;\n      }\n      lodash.prototype[methodName] = function() {\n        var value = this.__wrapped__,\n            args = isTaker ? [1] : arguments,\n            isLazy = value instanceof LazyWrapper,\n            iteratee = args[0],\n            useLazy = isLazy || isArray(value);\n\n        var interceptor = function(value) {\n          var result = lodashFunc.apply(lodash, arrayPush([value], args));\n          return (isTaker && chainAll) ? result[0] : result;\n        };\n\n        if (useLazy && checkIteratee && typeof iteratee == 'function' && iteratee.length != 1) {\n          // Avoid lazy use if the iteratee has a \"length\" value other than `1`.\n          isLazy = useLazy = false;\n        }\n        var chainAll = this.__chain__,\n            isHybrid = !!this.__actions__.length,\n            isUnwrapped = retUnwrapped && !chainAll,\n            onlyLazy = isLazy && !isHybrid;\n\n        if (!retUnwrapped && useLazy) {\n          value = onlyLazy ? value : new LazyWrapper(this);\n          var result = func.apply(value, args);\n          result.__actions__.push({ 'func': thru, 'args': [interceptor], 'thisArg': undefined });\n          return new LodashWrapper(result, chainAll);\n        }\n        if (isUnwrapped && onlyLazy) {\n          return func.apply(this, args);\n        }\n        result = this.thru(interceptor);\n        return isUnwrapped ? (isTaker ? result.value()[0] : result.value()) : result;\n      };\n    });\n\n    // Add `Array` methods to `lodash.prototype`.\n    arrayEach(['pop', 'push', 'shift', 'sort', 'splice', 'unshift'], function(methodName) {\n      var func = arrayProto[methodName],\n          chainName = /^(?:push|sort|unshift)$/.test(methodName) ? 'tap' : 'thru',\n          retUnwrapped = /^(?:pop|shift)$/.test(methodName);\n\n      lodash.prototype[methodName] = function() {\n        var args = arguments;\n        if (retUnwrapped && !this.__chain__) {\n          var value = this.value();\n          return func.apply(isArray(value) ? value : [], args);\n        }\n        return this[chainName](function(value) {\n          return func.apply(isArray(value) ? value : [], args);\n        });\n      };\n    });\n\n    // Map minified method names to their real names.\n    baseForOwn(LazyWrapper.prototype, function(func, methodName) {\n      var lodashFunc = lodash[methodName];\n      if (lodashFunc) {\n        var key = lodashFunc.name + '';\n        if (!hasOwnProperty.call(realNames, key)) {\n          realNames[key] = [];\n        }\n        realNames[key].push({ 'name': methodName, 'func': lodashFunc });\n      }\n    });\n\n    realNames[createHybrid(undefined, WRAP_BIND_KEY_FLAG).name] = [{\n      'name': 'wrapper',\n      'func': undefined\n    }];\n\n    // Add methods to `LazyWrapper`.\n    LazyWrapper.prototype.clone = lazyClone;\n    LazyWrapper.prototype.reverse = lazyReverse;\n    LazyWrapper.prototype.value = lazyValue;\n\n    // Add chain sequence methods to the `lodash` wrapper.\n    lodash.prototype.at = wrapperAt;\n    lodash.prototype.chain = wrapperChain;\n    lodash.prototype.commit = wrapperCommit;\n    lodash.prototype.next = wrapperNext;\n    lodash.prototype.plant = wrapperPlant;\n    lodash.prototype.reverse = wrapperReverse;\n    lodash.prototype.toJSON = lodash.prototype.valueOf = lodash.prototype.value = wrapperValue;\n\n    // Add lazy aliases.\n    lodash.prototype.first = lodash.prototype.head;\n\n    if (symIterator) {\n      lodash.prototype[symIterator] = wrapperToIterator;\n    }\n    return lodash;\n  });\n\n  /*--------------------------------------------------------------------------*/\n\n  // Export lodash.\n  var _ = runInContext();\n\n  // Some AMD build optimizers, like r.js, check for condition patterns like:\n  if (typeof define == 'function' && typeof define.amd == 'object' && define.amd) {\n    // Expose Lodash on the global object to prevent errors when Lodash is\n    // loaded by a script tag in the presence of an AMD loader.\n    // See http://requirejs.org/docs/errors.html#mismatch for more details.\n    // Use `_.noConflict` to remove Lodash from the global object.\n    root._ = _;\n\n    // Define as an anonymous module so, through path mapping, it can be\n    // referenced as the \"underscore\" module.\n    define(function() {\n      return _;\n    });\n  }\n  // Check for `exports` after `define` in case a build optimizer adds it.\n  else if (freeModule) {\n    // Export for Node.js.\n    (freeModule.exports = _)._ = _;\n    // Export for CommonJS support.\n    freeExports._ = _;\n  }\n  else {\n    // Export to the global object.\n    root._ = _;\n  }\n}.call(this));\n","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// define __esModule on exports\n/******/ \t__webpack_require__.r = function(exports) {\n/******/ \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t}\n/******/ \t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t};\n/******/\n/******/ \t// create a fake namespace object\n/******/ \t// mode & 1: value is a module id, require it\n/******/ \t// mode & 2: merge all properties of value into the ns\n/******/ \t// mode & 4: return value when already ns object\n/******/ \t// mode & 8|1: behave like require\n/******/ \t__webpack_require__.t = function(value, mode) {\n/******/ \t\tif(mode & 1) value = __webpack_require__(value);\n/******/ \t\tif(mode & 8) return value;\n/******/ \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n/******/ \t\tvar ns = Object.create(null);\n/******/ \t\t__webpack_require__.r(ns);\n/******/ \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n/******/ \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n/******/ \t\treturn ns;\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 0);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ \"./node_modules/@babel/runtime/helpers/arrayLikeToArray.js\":\n/*!*****************************************************************!*\\\n  !*** ./node_modules/@babel/runtime/helpers/arrayLikeToArray.js ***!\n  \\*****************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\nfunction _arrayLikeToArray(arr, len) {\n  if (len == null || len > arr.length) len = arr.length;\n\n  for (var i = 0, arr2 = new Array(len); i < len; i++) {\n    arr2[i] = arr[i];\n  }\n\n  return arr2;\n}\n\nmodule.exports = _arrayLikeToArray;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;\n\n/***/ }),\n\n/***/ \"./node_modules/@babel/runtime/helpers/arrayWithoutHoles.js\":\n/*!******************************************************************!*\\\n  !*** ./node_modules/@babel/runtime/helpers/arrayWithoutHoles.js ***!\n  \\******************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar arrayLikeToArray = __webpack_require__(/*! ./arrayLikeToArray.js */ \"./node_modules/@babel/runtime/helpers/arrayLikeToArray.js\");\n\nfunction _arrayWithoutHoles(arr) {\n  if (Array.isArray(arr)) return arrayLikeToArray(arr);\n}\n\nmodule.exports = _arrayWithoutHoles;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;\n\n/***/ }),\n\n/***/ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\":\n/*!***************************************************************!*\\\n  !*** ./node_modules/@babel/runtime/helpers/classCallCheck.js ***!\n  \\***************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\nfunction _classCallCheck(instance, Constructor) {\n  if (!(instance instanceof Constructor)) {\n    throw new TypeError(\"Cannot call a class as a function\");\n  }\n}\n\nmodule.exports = _classCallCheck;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;\n\n/***/ }),\n\n/***/ \"./node_modules/@babel/runtime/helpers/createClass.js\":\n/*!************************************************************!*\\\n  !*** ./node_modules/@babel/runtime/helpers/createClass.js ***!\n  \\************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\nfunction _defineProperties(target, props) {\n  for (var i = 0; i < props.length; i++) {\n    var descriptor = props[i];\n    descriptor.enumerable = descriptor.enumerable || false;\n    descriptor.configurable = true;\n    if (\"value\" in descriptor) descriptor.writable = true;\n    Object.defineProperty(target, descriptor.key, descriptor);\n  }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n  if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n  if (staticProps) _defineProperties(Constructor, staticProps);\n  return Constructor;\n}\n\nmodule.exports = _createClass;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;\n\n/***/ }),\n\n/***/ \"./node_modules/@babel/runtime/helpers/defineProperty.js\":\n/*!***************************************************************!*\\\n  !*** ./node_modules/@babel/runtime/helpers/defineProperty.js ***!\n  \\***************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\nfunction _defineProperty(obj, key, value) {\n  if (key in obj) {\n    Object.defineProperty(obj, key, {\n      value: value,\n      enumerable: true,\n      configurable: true,\n      writable: true\n    });\n  } else {\n    obj[key] = value;\n  }\n\n  return obj;\n}\n\nmodule.exports = _defineProperty;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;\n\n/***/ }),\n\n/***/ \"./node_modules/@babel/runtime/helpers/interopRequireDefault.js\":\n/*!**********************************************************************!*\\\n  !*** ./node_modules/@babel/runtime/helpers/interopRequireDefault.js ***!\n  \\**********************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\nfunction _interopRequireDefault(obj) {\n  return obj && obj.__esModule ? obj : {\n    \"default\": obj\n  };\n}\n\nmodule.exports = _interopRequireDefault;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;\n\n/***/ }),\n\n/***/ \"./node_modules/@babel/runtime/helpers/interopRequireWildcard.js\":\n/*!***********************************************************************!*\\\n  !*** ./node_modules/@babel/runtime/helpers/interopRequireWildcard.js ***!\n  \\***********************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ \"./node_modules/@babel/runtime/helpers/typeof.js\")[\"default\"];\n\nfunction _getRequireWildcardCache(nodeInterop) {\n  if (typeof WeakMap !== \"function\") return null;\n  var cacheBabelInterop = new WeakMap();\n  var cacheNodeInterop = new WeakMap();\n  return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) {\n    return nodeInterop ? cacheNodeInterop : cacheBabelInterop;\n  })(nodeInterop);\n}\n\nfunction _interopRequireWildcard(obj, nodeInterop) {\n  if (!nodeInterop && obj && obj.__esModule) {\n    return obj;\n  }\n\n  if (obj === null || _typeof(obj) !== \"object\" && typeof obj !== \"function\") {\n    return {\n      \"default\": obj\n    };\n  }\n\n  var cache = _getRequireWildcardCache(nodeInterop);\n\n  if (cache && cache.has(obj)) {\n    return cache.get(obj);\n  }\n\n  var newObj = {};\n  var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;\n\n  for (var key in obj) {\n    if (key !== \"default\" && Object.prototype.hasOwnProperty.call(obj, key)) {\n      var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;\n\n      if (desc && (desc.get || desc.set)) {\n        Object.defineProperty(newObj, key, desc);\n      } else {\n        newObj[key] = obj[key];\n      }\n    }\n  }\n\n  newObj[\"default\"] = obj;\n\n  if (cache) {\n    cache.set(obj, newObj);\n  }\n\n  return newObj;\n}\n\nmodule.exports = _interopRequireWildcard;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;\n\n/***/ }),\n\n/***/ \"./node_modules/@babel/runtime/helpers/iterableToArray.js\":\n/*!****************************************************************!*\\\n  !*** ./node_modules/@babel/runtime/helpers/iterableToArray.js ***!\n  \\****************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\nfunction _iterableToArray(iter) {\n  if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}\n\nmodule.exports = _iterableToArray;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;\n\n/***/ }),\n\n/***/ \"./node_modules/@babel/runtime/helpers/nonIterableSpread.js\":\n/*!******************************************************************!*\\\n  !*** ./node_modules/@babel/runtime/helpers/nonIterableSpread.js ***!\n  \\******************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\nfunction _nonIterableSpread() {\n  throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nmodule.exports = _nonIterableSpread;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;\n\n/***/ }),\n\n/***/ \"./node_modules/@babel/runtime/helpers/objectWithoutProperties.js\":\n/*!************************************************************************!*\\\n  !*** ./node_modules/@babel/runtime/helpers/objectWithoutProperties.js ***!\n  \\************************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar objectWithoutPropertiesLoose = __webpack_require__(/*! ./objectWithoutPropertiesLoose.js */ \"./node_modules/@babel/runtime/helpers/objectWithoutPropertiesLoose.js\");\n\nfunction _objectWithoutProperties(source, excluded) {\n  if (source == null) return {};\n  var target = objectWithoutPropertiesLoose(source, excluded);\n  var key, i;\n\n  if (Object.getOwnPropertySymbols) {\n    var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n\n    for (i = 0; i < sourceSymbolKeys.length; i++) {\n      key = sourceSymbolKeys[i];\n      if (excluded.indexOf(key) >= 0) continue;\n      if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n      target[key] = source[key];\n    }\n  }\n\n  return target;\n}\n\nmodule.exports = _objectWithoutProperties;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;\n\n/***/ }),\n\n/***/ \"./node_modules/@babel/runtime/helpers/objectWithoutPropertiesLoose.js\":\n/*!*****************************************************************************!*\\\n  !*** ./node_modules/@babel/runtime/helpers/objectWithoutPropertiesLoose.js ***!\n  \\*****************************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n  if (source == null) return {};\n  var target = {};\n  var sourceKeys = Object.keys(source);\n  var key, i;\n\n  for (i = 0; i < sourceKeys.length; i++) {\n    key = sourceKeys[i];\n    if (excluded.indexOf(key) >= 0) continue;\n    target[key] = source[key];\n  }\n\n  return target;\n}\n\nmodule.exports = _objectWithoutPropertiesLoose;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;\n\n/***/ }),\n\n/***/ \"./node_modules/@babel/runtime/helpers/toConsumableArray.js\":\n/*!******************************************************************!*\\\n  !*** ./node_modules/@babel/runtime/helpers/toConsumableArray.js ***!\n  \\******************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar arrayWithoutHoles = __webpack_require__(/*! ./arrayWithoutHoles.js */ \"./node_modules/@babel/runtime/helpers/arrayWithoutHoles.js\");\n\nvar iterableToArray = __webpack_require__(/*! ./iterableToArray.js */ \"./node_modules/@babel/runtime/helpers/iterableToArray.js\");\n\nvar unsupportedIterableToArray = __webpack_require__(/*! ./unsupportedIterableToArray.js */ \"./node_modules/@babel/runtime/helpers/unsupportedIterableToArray.js\");\n\nvar nonIterableSpread = __webpack_require__(/*! ./nonIterableSpread.js */ \"./node_modules/@babel/runtime/helpers/nonIterableSpread.js\");\n\nfunction _toConsumableArray(arr) {\n  return arrayWithoutHoles(arr) || iterableToArray(arr) || unsupportedIterableToArray(arr) || nonIterableSpread();\n}\n\nmodule.exports = _toConsumableArray;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;\n\n/***/ }),\n\n/***/ \"./node_modules/@babel/runtime/helpers/typeof.js\":\n/*!*******************************************************!*\\\n  !*** ./node_modules/@babel/runtime/helpers/typeof.js ***!\n  \\*******************************************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\nfunction _typeof(obj) {\n  \"@babel/helpers - typeof\";\n\n  if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n    module.exports = _typeof = function _typeof(obj) {\n      return typeof obj;\n    };\n\n    module.exports[\"default\"] = module.exports, module.exports.__esModule = true;\n  } else {\n    module.exports = _typeof = function _typeof(obj) {\n      return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n    };\n\n    module.exports[\"default\"] = module.exports, module.exports.__esModule = true;\n  }\n\n  return _typeof(obj);\n}\n\nmodule.exports = _typeof;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;\n\n/***/ }),\n\n/***/ \"./node_modules/@babel/runtime/helpers/unsupportedIterableToArray.js\":\n/*!***************************************************************************!*\\\n  !*** ./node_modules/@babel/runtime/helpers/unsupportedIterableToArray.js ***!\n  \\***************************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar arrayLikeToArray = __webpack_require__(/*! ./arrayLikeToArray.js */ \"./node_modules/@babel/runtime/helpers/arrayLikeToArray.js\");\n\nfunction _unsupportedIterableToArray(o, minLen) {\n  if (!o) return;\n  if (typeof o === \"string\") return arrayLikeToArray(o, minLen);\n  var n = Object.prototype.toString.call(o).slice(8, -1);\n  if (n === \"Object\" && o.constructor) n = o.constructor.name;\n  if (n === \"Map\" || n === \"Set\") return Array.from(o);\n  if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return arrayLikeToArray(o, minLen);\n}\n\nmodule.exports = _unsupportedIterableToArray;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;\n\n/***/ }),\n\n/***/ \"./node_modules/webpack/buildin/global.js\":\n/*!***********************************!*\\\n  !*** (webpack)/buildin/global.js ***!\n  \\***********************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\nvar g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n\n\n/***/ }),\n\n/***/ \"./packages/@apphub:logrocket-console/src/index.js\":\n/*!*********************************************************!*\\\n  !*** ./packages/@apphub:logrocket-console/src/index.js ***!\n  \\*********************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ \"./node_modules/@babel/runtime/helpers/interopRequireDefault.js\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _registerConsole = _interopRequireDefault(__webpack_require__(/*! ./registerConsole */ \"./packages/@apphub:logrocket-console/src/registerConsole.js\"));\n\nvar _default = _registerConsole.default;\nexports.default = _default;\nmodule.exports = exports.default;\n\n/***/ }),\n\n/***/ \"./packages/@apphub:logrocket-console/src/registerConsole.js\":\n/*!*******************************************************************!*\\\n  !*** ./packages/@apphub:logrocket-console/src/registerConsole.js ***!\n  \\*******************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ \"./node_modules/@babel/runtime/helpers/interopRequireDefault.js\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = registerConsole;\n\nvar _typeof2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/typeof */ \"./node_modules/@babel/runtime/helpers/typeof.js\"));\n\nvar _enhanceFunc = _interopRequireDefault(__webpack_require__(/*! @apphub/logrocket-utils/src/enhanceFunc */ \"./packages/@apphub:logrocket-utils/src/enhanceFunc.js\"));\n\nvar _logrocketExceptions = __webpack_require__(/*! @apphub/logrocket-exceptions */ \"./packages/@apphub:logrocket-exceptions/src/index.js\");\n\nfunction registerConsole(logger) {\n  var unsubFunctions = [];\n  var methods = ['log', 'warn', 'info', 'error', 'debug'];\n  methods.forEach(function (method) {\n    unsubFunctions.push((0, _enhanceFunc.default)(console, method, function () {\n      for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n        args[_key] = arguments[_key];\n      }\n\n      logger.addEvent('lr.core.LogEvent', function () {\n        var consoleOptions = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n        var isEnabled = consoleOptions.isEnabled;\n\n        if ((0, _typeof2.default)(isEnabled) === 'object' && isEnabled[method] === false || isEnabled === false) {\n          return null;\n        }\n\n        if (method === 'error' && consoleOptions.shouldAggregateConsoleErrors) {\n          _logrocketExceptions.Capture.captureMessage(logger, args[0], {}, true);\n        }\n\n        return {\n          logLevel: method.toUpperCase(),\n          args: args\n        };\n      });\n    }));\n  });\n  return function () {\n    unsubFunctions.forEach(function (unsubFunction) {\n      return unsubFunction();\n    });\n  };\n}\n\nmodule.exports = exports.default;\n\n/***/ }),\n\n/***/ \"./packages/@apphub:logrocket-exceptions/src/Capture.js\":\n/*!**************************************************************!*\\\n  !*** ./packages/@apphub:logrocket-exceptions/src/Capture.js ***!\n  \\**************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ \"./node_modules/@babel/runtime/helpers/interopRequireDefault.js\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.captureMessage = captureMessage;\nexports.captureException = captureException;\n\nvar _typeof2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/typeof */ \"./node_modules/@babel/runtime/helpers/typeof.js\"));\n\nvar _TraceKit = _interopRequireDefault(__webpack_require__(/*! @apphub/logrocket-utils/src/TraceKit */ \"./packages/@apphub:logrocket-utils/src/TraceKit.js\"));\n\nvar _stackTraceFromError = _interopRequireDefault(__webpack_require__(/*! ./stackTraceFromError */ \"./packages/@apphub:logrocket-exceptions/src/stackTraceFromError.js\"));\n\n/* eslint-disable no-param-reassign */\nfunction isScalar(value) {\n  return /boolean|number|string/.test((0, _typeof2.default)(value));\n}\n\nfunction scrub(data, options) {\n  if (options) {\n    var optionalScalars = [// Valid values for 'level' are 'fatal', 'error', 'warning', 'info',\n    // and 'debug'. Defaults to 'error'.\n    'level', 'logger'];\n\n    for (var _i = 0, _optionalScalars = optionalScalars; _i < _optionalScalars.length; _i++) {\n      var field = _optionalScalars[_i];\n      var value = options[field];\n\n      if (isScalar(value)) {\n        data[field] = value.toString();\n      }\n    }\n\n    var optionalMaps = ['tags', 'extra'];\n\n    for (var _i2 = 0, _optionalMaps = optionalMaps; _i2 < _optionalMaps.length; _i2++) {\n      var _field = _optionalMaps[_i2];\n      var dirty = options[_field] || {};\n      var scrubbed = {};\n\n      for (var _i3 = 0, _Object$keys = Object.keys(dirty); _i3 < _Object$keys.length; _i3++) {\n        var key = _Object$keys[_i3];\n        var _value = dirty[key];\n\n        if (isScalar(_value)) {\n          scrubbed[key.toString()] = _value.toString();\n        }\n      }\n\n      data[_field] = scrubbed;\n    }\n  }\n}\n\nfunction captureMessage(logger, message) {\n  var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n  var isConsole = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n  var data = {\n    exceptionType: isConsole ? 'CONSOLE' : 'MESSAGE',\n    message: message,\n    browserHref: window.location ? window.location.href : ''\n  };\n  scrub(data, options);\n  logger.addEvent('lr.core.Exception', function () {\n    return data;\n  });\n}\n\nfunction captureException(logger, exception) {\n  var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n  var preppedTrace = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;\n\n  var trace = preppedTrace || _TraceKit.default.computeStackTrace(exception);\n\n  var data = {\n    exceptionType: 'WINDOW',\n    errorType: trace.name,\n    message: trace.message,\n    browserHref: window.location ? window.location.href : ''\n  };\n  scrub(data, options);\n  var addEventOptions = {\n    _stackTrace: (0, _stackTraceFromError.default)(trace)\n  };\n  logger.addEvent('lr.core.Exception', function () {\n    return data;\n  }, addEventOptions);\n}\n\n/***/ }),\n\n/***/ \"./packages/@apphub:logrocket-exceptions/src/index.js\":\n/*!************************************************************!*\\\n  !*** ./packages/@apphub:logrocket-exceptions/src/index.js ***!\n  \\************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireWildcard = __webpack_require__(/*! @babel/runtime/helpers/interopRequireWildcard */ \"./node_modules/@babel/runtime/helpers/interopRequireWildcard.js\");\n\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ \"./node_modules/@babel/runtime/helpers/interopRequireDefault.js\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nObject.defineProperty(exports, \"registerExceptions\", {\n  enumerable: true,\n  get: function get() {\n    return _registerExceptions.default;\n  }\n});\nexports.Capture = void 0;\n\nvar _registerExceptions = _interopRequireDefault(__webpack_require__(/*! ./registerExceptions */ \"./packages/@apphub:logrocket-exceptions/src/registerExceptions.js\"));\n\nvar Capture = _interopRequireWildcard(__webpack_require__(/*! ./Capture */ \"./packages/@apphub:logrocket-exceptions/src/Capture.js\"));\n\nexports.Capture = Capture;\n\n/***/ }),\n\n/***/ \"./packages/@apphub:logrocket-exceptions/src/raven/raven.js\":\n/*!******************************************************************!*\\\n  !*** ./packages/@apphub:logrocket-exceptions/src/raven/raven.js ***!\n  \\******************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function(global) {\n\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ \"./node_modules/@babel/runtime/helpers/interopRequireDefault.js\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _classCallCheck2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\"));\n\nvar _createClass2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/createClass */ \"./node_modules/@babel/runtime/helpers/createClass.js\"));\n\nvar _TraceKit = _interopRequireDefault(__webpack_require__(/*! @apphub/logrocket-utils/src/TraceKit */ \"./packages/@apphub:logrocket-utils/src/TraceKit.js\"));\n\n/* eslint-disable */\n\n/*\nSome contents of this file were originaly from raven-js, BSD-2 Clause\n\nCopyright (c) 2018 Sentry (https://sentry.io) and individual contributors.\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:\n\n* Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.\n* Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\nvar objectPrototype = Object.prototype;\n\nfunction isUndefined(what) {\n  return what === void 0;\n}\n\nfunction isFunction(what) {\n  return typeof what === 'function';\n}\n\nfunction each(obj, callback) {\n  var i, j;\n\n  if (isUndefined(obj.length)) {\n    for (i in obj) {\n      if (hasKey(obj, i)) {\n        callback.call(null, i, obj[i]);\n      }\n    }\n  } else {\n    j = obj.length;\n\n    if (j) {\n      for (i = 0; i < j; i++) {\n        callback.call(null, i, obj[i]);\n      }\n    }\n  }\n}\n/**\n * hasKey, a better form of hasOwnProperty\n * Example: hasKey(MainHostObject, property) === true/false\n *\n * @param {Object} host object to check property\n * @param {string} key to check\n */\n\n\nfunction hasKey(object, key) {\n  return objectPrototype.hasOwnProperty.call(object, key);\n}\n/**\n * Polyfill a method\n * @param obj object e.g. `document`\n * @param name method name present on object e.g. `addEventListener`\n * @param replacement replacement function\n * @param track {optional} record instrumentation to an array\n */\n\n\nfunction fill(obj, name, replacement, track) {\n  var orig = obj[name];\n  obj[name] = replacement(orig);\n\n  if (track) {\n    track.push([obj, name, orig]);\n  }\n}\n\nvar _window = typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\n\nvar _document = _window.document;\n\nvar Handler = /*#__PURE__*/function () {\n  function Handler(_ref) {\n    var captureException = _ref.captureException;\n    (0, _classCallCheck2.default)(this, Handler);\n    this._errorHandler = this._errorHandler.bind(this);\n    this._ignoreOnError = 0;\n    this._wrappedBuiltIns = [];\n    this.captureException = captureException;\n\n    _TraceKit.default.report.subscribe(this._errorHandler);\n\n    this._instrumentTryCatch();\n  }\n\n  (0, _createClass2.default)(Handler, [{\n    key: \"uninstall\",\n    value: function uninstall() {\n      _TraceKit.default.report.unsubscribe(this._errorHandler); // restore any wrapped builtins\n\n\n      var builtin;\n\n      while (this._wrappedBuiltIns.length) {\n        builtin = this._wrappedBuiltIns.shift();\n        var obj = builtin[0],\n            name = builtin[1],\n            orig = builtin[2];\n        obj[name] = orig;\n      }\n    }\n  }, {\n    key: \"_errorHandler\",\n    value: function _errorHandler(report) {\n      if (!this._ignoreOnError) {\n        this.captureException(report);\n      }\n    }\n  }, {\n    key: \"_ignoreNextOnError\",\n    value: function _ignoreNextOnError() {\n      var _this = this;\n\n      this._ignoreOnError += 1;\n      setTimeout(function () {\n        // onerror should trigger before setTimeout\n        _this._ignoreOnError -= 1;\n      });\n    }\n    /*\n     * Wrap code within a context so Handler can capture errors\n     * reliably across domains that is executed immediately.\n     *\n     * @param {object} options A specific set of options for this context [optional]\n     * @param {function} func The callback to be immediately executed within the context\n     * @param {array} args An array of arguments to be called with the callback [optional]\n     */\n\n  }, {\n    key: \"context\",\n    value: function context(options, func, args) {\n      if (isFunction(options)) {\n        args = func || [];\n        func = options;\n        options = undefined;\n      }\n\n      return this.wrap(options, func).apply(this, args);\n    }\n  }, {\n    key: \"wrap\",\n    value:\n    /*\n     * Wrap code within a context and returns back a new function to be executed\n     *\n     * @param {object} options A specific set of options for this context [optional]\n     * @param {function} func The function to be wrapped in a new context\n     * @param {function} func A function to call before the try/catch wrapper [optional, private]\n     * @return {function} The newly wrapped functions with a context\n     */\n    function wrap(options, func, _before) {\n      var self = this; // 1 argument has been passed, and it's not a function\n      // so just return it\n\n      if (isUndefined(func) && !isFunction(options)) {\n        return options;\n      } // options is optional\n\n\n      if (isFunction(options)) {\n        func = options;\n        options = undefined;\n      } // At this point, we've passed along 2 arguments, and the second one\n      // is not a function either, so we'll just return the second argument.\n\n\n      if (!isFunction(func)) {\n        return func;\n      } // We don't wanna wrap it twice!\n\n\n      try {\n        if (func.__lr__) {\n          return func;\n        } // If this has already been wrapped in the past, return that\n\n\n        if (func.__lr_wrapper__) {\n          return func.__lr_wrapper__;\n        } // If func is not extensible, return the function as-is to prevent TypeErrors\n        // when trying to add new props & to assure immutable funcs aren't changed\n\n\n        if (!Object.isExtensible(func)) {\n          return func;\n        }\n      } catch (e) {\n        // Just accessing custom props in some Selenium environments\n        // can cause a \"Permission denied\" exception (see lr-js#495).\n        // Bail on wrapping and return the function as-is (defers to window.onerror).\n        return func;\n      }\n\n      function wrapped() {\n        var args = [],\n            i = arguments.length,\n            deep = !options || options && options.deep !== false;\n\n        if (_before && isFunction(_before)) {\n          _before.apply(this, arguments);\n        } // Recursively wrap all of a function's arguments that are\n        // functions themselves.\n\n\n        while (i--) {\n          args[i] = deep ? self.wrap(options, arguments[i]) : arguments[i];\n        }\n\n        try {\n          // Attempt to invoke user-land function. This is part of the LogRocket SDK.\n          // If you're seeing this frame in a stack trace, it means that LogRocket caught\n          // an unhandled error thrown by your application code, reported it, then bubbled\n          // it up. This is expected behavior and is not a bug with LogRocket.\n          return func.apply(this, args);\n        } catch (e) {\n          self._ignoreNextOnError();\n\n          self.captureException(_TraceKit.default.computeStackTrace(e), options);\n          throw e;\n        }\n      } // copy over properties of the old function\n\n\n      for (var property in func) {\n        if (hasKey(func, property)) {\n          wrapped[property] = func[property];\n        }\n      }\n\n      wrapped.prototype = func.prototype;\n      func.__lr_wrapper__ = wrapped; // Signal that this function has been wrapped already\n      // for both debugging and to prevent it to being wrapped twice\n\n      wrapped.__lr__ = true;\n      wrapped.__inner__ = func;\n      return wrapped;\n    }\n  }, {\n    key: \"_instrumentTryCatch\",\n    value:\n    /**\n     * Install any queued plugins\n     */\n    function _instrumentTryCatch() {\n      var self = this;\n      var wrappedBuiltIns = self._wrappedBuiltIns;\n\n      function wrapTimeFn(orig) {\n        return function (fn, t) {\n          // preserve arity\n          // Make a copy of the arguments to prevent deoptimization\n          // https://github.com/petkaantonov/bluebird/wiki/Optimization-killers#32-leaking-arguments\n          var args = new Array(arguments.length);\n\n          for (var i = 0; i < args.length; ++i) {\n            args[i] = arguments[i];\n          }\n\n          var originalCallback = args[0];\n\n          if (isFunction(originalCallback)) {\n            args[0] = self.wrap(originalCallback);\n          } // IE < 9 doesn't support .call/.apply on setInterval/setTimeout, but it\n          // also supports only two arguments and doesn't care what this is, so we\n          // can just call the original function directly.\n\n\n          if (orig.apply) {\n            return orig.apply(this, args);\n          } else {\n            return orig(args[0], args[1]);\n          }\n        };\n      }\n\n      function wrapEventTarget(global) {\n        var proto = _window[global] && _window[global].prototype;\n\n        if (proto && proto.hasOwnProperty && proto.hasOwnProperty('addEventListener')) {\n          fill(proto, 'addEventListener', function (orig) {\n            return function (evtName, fn, capture, secure) {\n              // preserve arity\n              try {\n                if (fn && fn.handleEvent) {\n                  fn.handleEvent = self.wrap(fn.handleEvent);\n                }\n              } catch (err) {// can sometimes get 'Permission denied to access property \"handle Event'\n              } // More breadcrumb DOM capture ... done here and not in `_instrumentBreadcrumbs`\n              // so that we don't have more than one wrapper function\n\n\n              var before;\n              return orig.call(this, evtName, self.wrap(fn, undefined, before), capture, secure);\n            };\n          }, wrappedBuiltIns);\n          fill(proto, 'removeEventListener', function (orig) {\n            return function (evt, fn, capture, secure) {\n              try {\n                fn = fn && (fn.__lr_wrapper__ ? fn.__lr_wrapper__ : fn);\n              } catch (e) {// ignore, accessing __lr_wrapper__ will throw in some Selenium environments\n              }\n\n              return orig.call(this, evt, fn, capture, secure);\n            };\n          }, wrappedBuiltIns);\n        }\n      }\n\n      fill(_window, 'setTimeout', wrapTimeFn, wrappedBuiltIns);\n      fill(_window, 'setInterval', wrapTimeFn, wrappedBuiltIns);\n\n      if (_window.requestAnimationFrame) {\n        fill(_window, 'requestAnimationFrame', function (orig) {\n          return function (cb) {\n            return orig(self.wrap(cb));\n          };\n        }, wrappedBuiltIns);\n      } // event targets borrowed from bugsnag-js:\n      // https://github.com/bugsnag/bugsnag-js/blob/master/src/bugsnag.js#L666\n\n\n      var eventTargets = ['EventTarget', 'Window', 'Node', 'ApplicationCache', 'AudioTrackList', 'ChannelMergerNode', 'CryptoOperation', 'EventSource', 'FileReader', 'HTMLUnknownElement', 'IDBDatabase', 'IDBRequest', 'IDBTransaction', 'KeyOperation', 'MediaController', 'MessagePort', 'ModalWindow', 'Notification', 'SVGElementInstance', 'Screen', 'TextTrack', 'TextTrackCue', 'TextTrackList', 'WebSocket', 'WebSocketWorker', 'Worker', 'XMLHttpRequest', 'XMLHttpRequestEventTarget', 'XMLHttpRequestUpload'];\n\n      for (var i = 0; i < eventTargets.length; i++) {\n        wrapEventTarget(eventTargets[i]);\n      }\n\n      var $ = _window.jQuery || _window.$;\n\n      if ($ && $.fn && $.fn.ready) {\n        fill($.fn, 'ready', function (orig) {\n          return function (fn) {\n            return orig.call(this, self.wrap(fn));\n          };\n        }, wrappedBuiltIns);\n      }\n    }\n  }]);\n  return Handler;\n}();\n\nexports.default = Handler;\n;\nmodule.exports = exports.default;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../../node_modules/webpack/buildin/global.js */ \"./node_modules/webpack/buildin/global.js\")))\n\n/***/ }),\n\n/***/ \"./packages/@apphub:logrocket-exceptions/src/registerExceptions.js\":\n/*!*************************************************************************!*\\\n  !*** ./packages/@apphub:logrocket-exceptions/src/registerExceptions.js ***!\n  \\*************************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireWildcard = __webpack_require__(/*! @babel/runtime/helpers/interopRequireWildcard */ \"./node_modules/@babel/runtime/helpers/interopRequireWildcard.js\");\n\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ \"./node_modules/@babel/runtime/helpers/interopRequireDefault.js\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = registerCore;\n\nvar _raven = _interopRequireDefault(__webpack_require__(/*! ./raven/raven */ \"./packages/@apphub:logrocket-exceptions/src/raven/raven.js\"));\n\nvar Capture = _interopRequireWildcard(__webpack_require__(/*! ./Capture */ \"./packages/@apphub:logrocket-exceptions/src/Capture.js\"));\n\nfunction registerCore(logger) {\n  var raven = new _raven.default({\n    captureException: function captureException(errorReport) {\n      Capture.captureException(logger, null, null, errorReport);\n    }\n  });\n\n  var rejectionHandler = function rejectionHandler(evt) {\n    // http://2ality.com/2016/04/unhandled-rejections.html\n    logger.addEvent('lr.core.Exception', function () {\n      return {\n        exceptionType: 'UNHANDLED_REJECTION',\n        message: evt.reason || 'Unhandled Promise rejection'\n      };\n    });\n  };\n\n  window.addEventListener('unhandledrejection', rejectionHandler);\n  return function () {\n    window.removeEventListener('unhandledrejection', rejectionHandler);\n    raven.uninstall();\n  };\n}\n\nmodule.exports = exports.default;\n\n/***/ }),\n\n/***/ \"./packages/@apphub:logrocket-exceptions/src/stackTraceFromError.js\":\n/*!**************************************************************************!*\\\n  !*** ./packages/@apphub:logrocket-exceptions/src/stackTraceFromError.js ***!\n  \\**************************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = stackTraceFromError;\n\nfunction stackTraceFromError(errorReport) {\n  function makeNotNull(val) {\n    return val === null ? undefined : val;\n  }\n\n  return errorReport.stack ? errorReport.stack.map(function (frame) {\n    return {\n      lineNumber: makeNotNull(frame.line),\n      columnNumber: makeNotNull(frame.column),\n      fileName: makeNotNull(frame.url),\n      functionName: makeNotNull(frame.func)\n    };\n  }) : undefined;\n}\n\nmodule.exports = exports.default;\n\n/***/ }),\n\n/***/ \"./packages/@apphub:logrocket-network/src/fetchIntercept.js\":\n/*!******************************************************************!*\\\n  !*** ./packages/@apphub:logrocket-network/src/fetchIntercept.js ***!\n  \\******************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ \"./node_modules/@babel/runtime/helpers/interopRequireDefault.js\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _toConsumableArray2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/toConsumableArray */ \"./node_modules/@babel/runtime/helpers/toConsumableArray.js\"));\n\nvar _registerXHR = __webpack_require__(/*! ./registerXHR */ \"./packages/@apphub:logrocket-network/src/registerXHR.js\");\n\nvar interceptors = [];\n\nfunction makeInterceptor(fetch, fetchId) {\n  var reversedInterceptors = interceptors.reduce(function (array, interceptor) {\n    return [interceptor].concat(array);\n  }, []);\n\n  for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n    args[_key - 2] = arguments[_key];\n  }\n\n  var promise = Promise.resolve(args); // Register request interceptors\n\n  reversedInterceptors.forEach(function (_ref) {\n    var request = _ref.request,\n        requestError = _ref.requestError;\n\n    if (request || requestError) {\n      promise = promise.then(function (args) {\n        return request.apply(void 0, [fetchId].concat((0, _toConsumableArray2.default)(args)));\n      }, function (args) {\n        return requestError.apply(void 0, [fetchId].concat((0, _toConsumableArray2.default)(args)));\n      });\n    }\n  });\n  promise = promise.then(function (args) {\n    (0, _registerXHR.setActive)(false);\n    var res;\n    var err;\n\n    try {\n      res = fetch.apply(void 0, (0, _toConsumableArray2.default)(args));\n    } catch (_err) {\n      err = _err;\n    }\n\n    (0, _registerXHR.setActive)(true);\n\n    if (err) {\n      throw err;\n    }\n\n    return res;\n  });\n  reversedInterceptors.forEach(function (_ref2) {\n    var response = _ref2.response,\n        responseError = _ref2.responseError;\n\n    if (response || responseError) {\n      promise = promise.then(function (res) {\n        return response(fetchId, res);\n      }, function (err) {\n        return responseError && responseError(fetchId, err);\n      });\n    }\n  });\n  return promise;\n}\n\nfunction attach(env) {\n  if (!env.fetch || !env.Promise) {\n    // Make sure fetch is available in the given environment. If it's not, then\n    // default to using XHR intercept.\n    return;\n  }\n\n  var isPolyfill = env.fetch.polyfill; // eslint-disable-next-line no-param-reassign\n\n  env.fetch = function (fetch) {\n    var fetchId = 0;\n    return function () {\n      for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n        args[_key2] = arguments[_key2];\n      }\n\n      return makeInterceptor.apply(void 0, [fetch, fetchId++].concat(args));\n    };\n  }(env.fetch); // Forward the polyfill properly from fetch (set by github/whatwg-fetch).\n\n\n  if (isPolyfill) {\n    // eslint-disable-next-line no-param-reassign\n    env.fetch.polyfill = isPolyfill;\n  }\n} // TODO: React Native\n//   attach(global);\n\n\nvar didAttach = false;\nvar _default = {\n  register: function register(interceptor) {\n    if (!didAttach) {\n      didAttach = true;\n      attach(window);\n    }\n\n    interceptors.push(interceptor);\n    return function () {\n      var index = interceptors.indexOf(interceptor);\n\n      if (index >= 0) {\n        interceptors.splice(index, 1);\n      }\n    };\n  },\n  clear: function clear() {\n    interceptors = [];\n  }\n};\nexports.default = _default;\nmodule.exports = exports.default;\n\n/***/ }),\n\n/***/ \"./packages/@apphub:logrocket-network/src/index.js\":\n/*!*********************************************************!*\\\n  !*** ./packages/@apphub:logrocket-network/src/index.js ***!\n  \\*********************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ \"./node_modules/@babel/runtime/helpers/interopRequireDefault.js\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = registerNetwork;\n\nvar _defineProperty2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/defineProperty */ \"./node_modules/@babel/runtime/helpers/defineProperty.js\"));\n\nvar _typeof2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/typeof */ \"./node_modules/@babel/runtime/helpers/typeof.js\"));\n\nvar _registerFetch = _interopRequireDefault(__webpack_require__(/*! ./registerFetch */ \"./packages/@apphub:logrocket-network/src/registerFetch.js\"));\n\nvar _registerNetworkInformation = _interopRequireDefault(__webpack_require__(/*! ./registerNetworkInformation */ \"./packages/@apphub:logrocket-network/src/registerNetworkInformation.js\"));\n\nvar _registerXHR = _interopRequireDefault(__webpack_require__(/*! ./registerXHR */ \"./packages/@apphub:logrocket-network/src/registerXHR.js\"));\n\nvar _mapValues = _interopRequireDefault(__webpack_require__(/*! @apphub/logrocket-utils/src/mapValues */ \"./packages/@apphub:logrocket-utils/src/mapValues.js\"));\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction registerNetwork(logger) {\n  var config = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n    isReactNative: false\n  };\n  var isReactNative = config.isReactNative,\n      shouldAugmentNPS = config.shouldAugmentNPS;\n  var ignoredNetwork = {}; // truncate if > 4MB in size\n\n  var truncate = function truncate(data) {\n    var limit = 1024 * 1000 * 4;\n    var str = data;\n\n    if ((0, _typeof2.default)(data) === 'object' && data != null) {\n      var proto = Object.getPrototypeOf(data);\n\n      if (proto === Object.prototype || proto === null) {\n        // plain object - jsonify for the size check\n        str = JSON.stringify(data);\n      }\n    }\n\n    if (str && str.length && str.length > limit && typeof str === 'string') {\n      var beginning = str.substring(0, 1000);\n      return \"\".concat(beginning, \" ... LogRocket truncating to first 1000 characters.\\n      Keep data under 4MB to prevent truncation. https://docs.logrocket.com/reference#network\");\n    }\n\n    return data;\n  };\n\n  var addRequest = function addRequest(reqId, request) {\n    var method = request.method;\n    logger.addEvent('lr.network.RequestEvent', function () {\n      var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n          _ref$isEnabled = _ref.isEnabled,\n          isEnabled = _ref$isEnabled === void 0 ? true : _ref$isEnabled,\n          _ref$requestSanitizer = _ref.requestSanitizer,\n          requestSanitizer = _ref$requestSanitizer === void 0 ? function (f) {\n        return f;\n      } : _ref$requestSanitizer;\n\n      if (!isEnabled) {\n        return null;\n      }\n\n      var sanitized = null;\n\n      try {\n        // only try catch user defined functions\n        sanitized = requestSanitizer(_objectSpread(_objectSpread({}, request), {}, {\n          reqId: reqId\n        }));\n      } catch (err) {\n        console.error(err);\n      }\n\n      if (sanitized) {\n        var url = sanitized.url;\n\n        if (typeof document !== 'undefined' && typeof document.createElement === 'function') {\n          // Writing and then reading from an a tag turns a relative\n          // url into an absolute one.\n          var a = document.createElement('a');\n          a.href = sanitized.url;\n          url = a.href;\n        }\n\n        return {\n          reqId: reqId,\n          // default\n          url: url,\n          // sanitized\n          headers: (0, _mapValues.default)(sanitized.headers, function (headerValue) {\n            // sanitized\n            return \"\".concat(headerValue);\n          }),\n          body: truncate(sanitized.body),\n          // sanitized\n          method: method,\n          // default\n          referrer: sanitized.referrer || undefined,\n          // sanitized\n          mode: sanitized.mode || undefined,\n          // sanitized\n          credentials: sanitized.credentials || undefined // sanitized\n\n        };\n      }\n\n      ignoredNetwork[reqId] = true;\n      return null;\n    });\n  };\n\n  var addResponse = function addResponse(reqId, response) {\n    var method = response.method,\n        status = response.status;\n    logger.addEvent('lr.network.ResponseEvent', function () {\n      var _ref2 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n          _ref2$isEnabled = _ref2.isEnabled,\n          isEnabled = _ref2$isEnabled === void 0 ? true : _ref2$isEnabled,\n          _ref2$responseSanitiz = _ref2.responseSanitizer,\n          responseSanitizer = _ref2$responseSanitiz === void 0 ? function (f) {\n        return f;\n      } : _ref2$responseSanitiz;\n\n      if (!isEnabled) {\n        return null;\n      } else if (ignoredNetwork[reqId]) {\n        delete ignoredNetwork[reqId];\n        return null;\n      }\n\n      var sanitized = null;\n\n      try {\n        // only try catch user defined functions\n        sanitized = responseSanitizer(_objectSpread(_objectSpread({}, response), {}, {\n          reqId: reqId\n        }));\n      } catch (err) {\n        console.error(err); // fall through to redacted log\n      }\n\n      if (sanitized) {\n        return {\n          reqId: reqId,\n          // default\n          status: sanitized.status,\n          // sanitized\n          headers: (0, _mapValues.default)(sanitized.headers, function (headerValue) {\n            // sanitized\n            return \"\".concat(headerValue);\n          }),\n          body: truncate(sanitized.body),\n          // sanitized\n          method: method // default\n\n        };\n      }\n\n      return {\n        reqId: reqId,\n        // default\n        status: status,\n        // default\n        headers: {},\n        // redacted\n        body: null,\n        // redacted\n        method: method // default\n\n      };\n    });\n  };\n\n  var isIgnored = function isIgnored(reqId) {\n    return logger.isDisabled || ignoredNetwork[reqId] === true;\n  };\n\n  var unsubFetch = (0, _registerFetch.default)({\n    addRequest: addRequest,\n    addResponse: addResponse,\n    isIgnored: isIgnored\n  });\n  var unsubXHR = (0, _registerXHR.default)({\n    addRequest: addRequest,\n    addResponse: addResponse,\n    isIgnored: isIgnored,\n    logger: logger,\n    shouldAugmentNPS: shouldAugmentNPS\n  });\n  var unsubNetworkInformation = isReactNative ? function () {} : (0, _registerNetworkInformation.default)(logger);\n  return function () {\n    unsubNetworkInformation();\n    unsubFetch();\n    unsubXHR();\n  };\n}\n\nmodule.exports = exports.default;\n\n/***/ }),\n\n/***/ \"./packages/@apphub:logrocket-network/src/registerFetch.js\":\n/*!*****************************************************************!*\\\n  !*** ./packages/@apphub:logrocket-network/src/registerFetch.js ***!\n  \\*****************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ \"./node_modules/@babel/runtime/helpers/interopRequireDefault.js\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = registerFetch;\n\nvar _defineProperty2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/defineProperty */ \"./node_modules/@babel/runtime/helpers/defineProperty.js\"));\n\nvar _mapValues = _interopRequireDefault(__webpack_require__(/*! @apphub/logrocket-utils/src/mapValues */ \"./packages/@apphub:logrocket-utils/src/mapValues.js\"));\n\nvar _fetchIntercept = _interopRequireDefault(__webpack_require__(/*! ./fetchIntercept */ \"./packages/@apphub:logrocket-network/src/fetchIntercept.js\"));\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction makeObjectFromHeaders(headers) {\n  // If using real fetch, we must stringify the Headers object.\n  if (headers == null || typeof headers.forEach !== 'function') {\n    return headers;\n  }\n\n  var result = {};\n  headers.forEach(function (value, key) {\n    if (result[key]) {\n      result[key] = \"\".concat(result[key], \",\").concat(value);\n    } else {\n      result[key] = \"\".concat(value);\n    }\n  });\n  return result;\n} // XHR specification is unclear of what types to allow in value so using toString method for now\n\n\nvar stringifyHeaders = function stringifyHeaders(headers) {\n  return (0, _mapValues.default)(makeObjectFromHeaders(headers), function (value) {\n    return \"\".concat(value);\n  });\n};\n\nfunction pluckFetchFields() {\n  var arg = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n  return {\n    url: arg.url,\n    headers: stringifyHeaders(arg.headers),\n    method: arg.method && arg.method.toUpperCase(),\n    referrer: arg.referrer || undefined,\n    mode: arg.mode || undefined,\n    credentials: arg.credentials || undefined\n  };\n}\n\nfunction registerFetch(_ref) {\n  var addRequest = _ref.addRequest,\n      addResponse = _ref.addResponse,\n      isIgnored = _ref.isIgnored;\n  var LOGROCKET_FETCH_LABEL = 'fetch-';\n  var fetchMethodMap = {};\n\n  var unregister = _fetchIntercept.default.register({\n    request: function request(fetchId) {\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      var p;\n\n      if (typeof Request !== 'undefined' && args[0] instanceof Request) {\n        var clonedText; // Request.clone() and Request.text() may throw in Safari (e.g., when\n        // request body contains FormData)\n\n        try {\n          clonedText = args[0].clone().text();\n        } catch (err) {\n          clonedText = Promise.resolve(\"LogRocket fetch error: \".concat(err.message));\n        }\n\n        p = clonedText.then(function (body) {\n          return _objectSpread(_objectSpread({}, pluckFetchFields(args[0])), {}, {\n            body: body\n          });\n        }, function (err) {\n          return _objectSpread(_objectSpread({}, pluckFetchFields(args[0])), {}, {\n            body: \"LogRocket fetch error: \".concat(err.message)\n          });\n        });\n      } else {\n        p = Promise.resolve(_objectSpread(_objectSpread({}, pluckFetchFields(args[1])), {}, {\n          url: \"\".concat(args[0]),\n          body: (args[1] || {}).body\n        }));\n      }\n\n      return p.then(function (req) {\n        fetchMethodMap[fetchId] = req.method;\n        addRequest(\"\".concat(LOGROCKET_FETCH_LABEL).concat(fetchId), req);\n        return args;\n      });\n    },\n    requestError: function requestError(fetchId, error) {\n      return Promise.reject(error);\n    },\n    response: function response(fetchId, _response) {\n      var clonedText;\n\n      if (isIgnored(\"\".concat(LOGROCKET_FETCH_LABEL).concat(fetchId))) {\n        // Don't even try to read ignored requests\n        return _response;\n      }\n\n      try {\n        // TODO: enhance function on original response and future clones for:\n        // text(), json(), blob(), formdata(), arraybuffer()\n        clonedText = _response.clone().text();\n      } catch (err) {\n        // safari has a bug where cloning can fail\n        clonedText = Promise.resolve(\"LogRocket fetch error: \".concat(err.message));\n      }\n\n      return clonedText.then(function (data) {\n        var responseHash = {\n          url: _response.url,\n          status: _response.status,\n          headers: stringifyHeaders(_response.headers),\n          body: data,\n          method: fetchMethodMap[fetchId]\n        };\n        delete fetchMethodMap[fetchId];\n        addResponse(\"\".concat(LOGROCKET_FETCH_LABEL).concat(fetchId), responseHash);\n        return _response;\n      });\n    },\n    responseError: function responseError(fetchId, error) {\n      var response = {\n        url: undefined,\n        status: 0,\n        headers: {},\n        body: \"\".concat(error)\n      };\n      addResponse(\"\".concat(LOGROCKET_FETCH_LABEL).concat(fetchId), response);\n      return Promise.reject(error);\n    }\n  });\n\n  return unregister;\n}\n\nmodule.exports = exports.default;\n\n/***/ }),\n\n/***/ \"./packages/@apphub:logrocket-network/src/registerNetworkInformation.js\":\n/*!******************************************************************************!*\\\n  !*** ./packages/@apphub:logrocket-network/src/registerNetworkInformation.js ***!\n  \\******************************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = registerNetworkInformation;\nvar EFFECTIVE_TYPE_VALS = {\n  'slow-2g': 'SLOW2G',\n  '2g': 'TWOG',\n  '3g': 'THREEG',\n  '4g': 'FOURG'\n};\n\nfunction registerNetworkInformation(logger) {\n  var lastStatus = undefined;\n\n  function sendNetworkInformation() {\n    var newStatus = {\n      online: window.navigator.onLine,\n      effectiveType: 'UNKOWN'\n    };\n\n    if (!window.navigator.onLine) {\n      newStatus.effectiveType = 'NONE';\n    } else if (window.navigator.connection && window.navigator.connection.effectiveType) {\n      newStatus.effectiveType = EFFECTIVE_TYPE_VALS[window.navigator.connection.effectiveType] || 'UNKNOWN';\n    }\n\n    if (lastStatus && newStatus.online === lastStatus.online && newStatus.effectiveType === lastStatus.effectiveType) {\n      return;\n    }\n\n    lastStatus = newStatus;\n    logger.addEvent('lr.network.NetworkStatusEvent', function () {\n      return newStatus;\n    });\n  }\n\n  setTimeout(sendNetworkInformation);\n\n  if (window.navigator.connection && typeof window.navigator.connection.addEventListener === 'function') {\n    window.navigator.connection.addEventListener('change', sendNetworkInformation);\n  }\n\n  window.addEventListener('online', sendNetworkInformation);\n  window.addEventListener('offline', sendNetworkInformation);\n  return function () {\n    window.removeEventListener('offline', sendNetworkInformation);\n    window.removeEventListener('online', sendNetworkInformation);\n\n    if (window.navigator.connection && typeof window.navigator.connection.removeEventListener === 'function') {\n      window.navigator.connection.removeEventListener('change', sendNetworkInformation);\n    }\n  };\n}\n\nmodule.exports = exports.default;\n\n/***/ }),\n\n/***/ \"./packages/@apphub:logrocket-network/src/registerXHR.js\":\n/*!***************************************************************!*\\\n  !*** ./packages/@apphub:logrocket-network/src/registerXHR.js ***!\n  \\***************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ \"./node_modules/@babel/runtime/helpers/interopRequireDefault.js\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.setActive = setActive;\nexports.default = registerXHR;\n\nvar _mapValues = _interopRequireDefault(__webpack_require__(/*! @apphub/logrocket-utils/src/mapValues */ \"./packages/@apphub:logrocket-utils/src/mapValues.js\"));\n\nvar _enhanceFunc = _interopRequireDefault(__webpack_require__(/*! @apphub/logrocket-utils/src/enhanceFunc */ \"./packages/@apphub:logrocket-utils/src/enhanceFunc.js\"));\n\nvar _startsWith = _interopRequireDefault(__webpack_require__(/*! @apphub/logrocket-utils/src/startsWith */ \"./packages/@apphub:logrocket-utils/src/startsWith.js\"));\n\nvar _nps = __webpack_require__(/*! @apphub/logrocket-utils/src/constants/nps */ \"./packages/@apphub:logrocket-utils/src/constants/nps.js\");\n\nvar isActive = true;\n\nfunction setActive(shouldBeActive) {\n  isActive = shouldBeActive;\n}\n\nvar currentXHRId = 0;\n\nfunction registerXHR(_ref) {\n  var addRequest = _ref.addRequest,\n      addResponse = _ref.addResponse,\n      isIgnored = _ref.isIgnored,\n      logger = _ref.logger,\n      _ref$shouldAugmentNPS = _ref.shouldAugmentNPS,\n      shouldAugmentNPS = _ref$shouldAugmentNPS === void 0 ? true : _ref$shouldAugmentNPS;\n  var _XHR = XMLHttpRequest;\n  var xhrMap = new WeakMap();\n  var unsubscribedFromXhr = false;\n  var LOGROCKET_XHR_LABEL = 'xhr-';\n  window._lrXMLHttpRequest = XMLHttpRequest; // eslint-disable-next-line no-native-reassign\n\n  XMLHttpRequest = function XMLHttpRequest(mozAnon, mozSystem) {\n    var xhrObject = new _XHR(mozAnon, mozSystem);\n\n    if (!isActive) {\n      return xhrObject;\n    }\n\n    xhrMap.set(xhrObject, {\n      xhrId: ++currentXHRId,\n      headers: {}\n    });\n    var openOriginal = xhrObject.open;\n\n    function openShim() {\n      for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n        args[_key] = arguments[_key];\n      }\n\n      try {\n        var url = args[1];\n\n        if (window.URL && typeof window.URL === 'function' && url.search(_nps.WOOTRIC_RESPONSES_REGEX) === 0) {\n          var logrocketSessionURL = new window.URL(logger.recordingURL);\n          logrocketSessionURL.searchParams.set('nps', 'wootric');\n          var urlObj = new window.URL(url);\n          var responseText = urlObj.searchParams.get('response[text]');\n          var feedback = responseText ? \"\".concat(responseText, \"\\n\\n\") : '';\n          urlObj.searchParams.set('response[text]', \"\".concat(feedback, \"<\").concat(logrocketSessionURL.href, \"|View LogRocket session>\"));\n          args[1] = urlObj.href; // eslint-disable-line no-param-reassign\n        }\n      } catch (e) {\n        /* do nothing */\n      }\n\n      return openOriginal.apply(this, args);\n    }\n\n    var sendOriginal = xhrObject.send;\n\n    function sendShim() {\n      for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n        args[_key2] = arguments[_key2];\n      }\n\n      try {\n        var currentXHR = xhrMap.get(xhrObject);\n\n        if (window.URL && typeof window.URL === 'function' && currentXHR && currentXHR.url && currentXHR.url.search(_nps.DELIGHTED_RESPONSES_REGEX) === 0 && args.length && args[0].indexOf(_nps.DELIGHTED_FEEDBACK_PREFIX) !== -1) {\n          var recordingURL = new window.URL(logger.recordingURL);\n          recordingURL.searchParams.set('nps', 'delighted');\n          var logrocketSessionURL = encodeURIComponent(recordingURL.href);\n          var data = args[0].split('&').map(function (dataString) {\n            if ((0, _startsWith.default)(dataString, _nps.DELIGHTED_FEEDBACK_PREFIX)) {\n              var isEmpty = dataString === _nps.DELIGHTED_FEEDBACK_PREFIX;\n              return \"\".concat(dataString).concat(isEmpty ? '' : '\\n\\n', \"<\").concat(logrocketSessionURL, \"|View LogRocket session>\");\n            }\n\n            return dataString;\n          }).join('&');\n          args[0] = data; // eslint-disable-line no-param-reassign\n        }\n      } catch (e) {\n        /* do nothing */\n      }\n\n      return sendOriginal.apply(this, args);\n    }\n\n    if (shouldAugmentNPS) {\n      xhrObject.open = openShim;\n      xhrObject.send = sendShim;\n    } // ..., 'open', (method, url, async, username, password) => {\n\n\n    (0, _enhanceFunc.default)(xhrObject, 'open', function (method, url) {\n      if (unsubscribedFromXhr) {\n        return;\n      }\n\n      var currentXHR = xhrMap.get(xhrObject);\n      currentXHR.method = method;\n      currentXHR.url = url;\n    });\n    (0, _enhanceFunc.default)(xhrObject, 'send', function (data) {\n      if (unsubscribedFromXhr) {\n        return;\n      }\n\n      var currentXHR = xhrMap.get(xhrObject);\n\n      if (!currentXHR) {\n        return;\n      }\n\n      var request = {\n        url: currentXHR.url,\n        method: currentXHR.method && currentXHR.method.toUpperCase(),\n        headers: (0, _mapValues.default)(currentXHR.headers || {}, function (headerValues) {\n          return headerValues.join(', ');\n        }),\n        body: data\n      };\n      addRequest(\"\".concat(LOGROCKET_XHR_LABEL).concat(currentXHR.xhrId), request);\n    });\n    (0, _enhanceFunc.default)(xhrObject, 'setRequestHeader', function (header, value) {\n      if (unsubscribedFromXhr) {\n        return;\n      }\n\n      var currentXHR = xhrMap.get(xhrObject);\n\n      if (!currentXHR) {\n        return;\n      }\n\n      currentXHR.headers = currentXHR.headers || {};\n      currentXHR.headers[header] = currentXHR.headers[header] || [];\n      currentXHR.headers[header].push(value);\n    });\n    var xhrListeners = {\n      readystatechange: function readystatechange() {\n        if (unsubscribedFromXhr) {\n          return;\n        }\n\n        if (xhrObject.readyState === 4) {\n          var currentXHR = xhrMap.get(xhrObject);\n\n          if (!currentXHR) {\n            return;\n          } // Do not read ignored requests at all.\n\n\n          if (isIgnored(\"\".concat(LOGROCKET_XHR_LABEL).concat(currentXHR.xhrId))) {\n            return;\n          }\n\n          var headerString = xhrObject.getAllResponseHeaders();\n          var headers = headerString.split(/[\\r\\n]+/).reduce(function (previous, current) {\n            var next = previous;\n            var headerParts = current.split(': ');\n\n            if (headerParts.length > 0) {\n              var key = headerParts.shift(); // first index of the array\n\n              var value = headerParts.join(': '); // rest of the array repaired\n\n              if (previous[key]) {\n                next[key] += \", \".concat(value);\n              } else {\n                next[key] = value;\n              }\n            }\n\n            return next;\n          }, {});\n          var body; // IE 11 sometimes throws when trying to access large responses\n\n          try {\n            switch (xhrObject.responseType) {\n              case 'json':\n                body = logger._shouldCloneResponse ? JSON.parse(JSON.stringify(xhrObject.response)) : xhrObject.response;\n                break;\n\n              case 'arraybuffer':\n              case 'blob':\n                {\n                  body = xhrObject.response;\n                  break;\n                }\n\n              case 'document':\n                {\n                  body = xhrObject.responseXML;\n                  break;\n                }\n\n              case 'text':\n              case '':\n                {\n                  body = xhrObject.responseText;\n                  break;\n                }\n\n              default:\n                {\n                  body = '';\n                }\n            }\n          } catch (err) {\n            body = 'LogRocket: Error accessing response.';\n          }\n\n          var response = {\n            url: currentXHR.url,\n            status: xhrObject.status,\n            headers: headers,\n            body: body,\n            method: (currentXHR.method || '').toUpperCase()\n          };\n          addResponse(\"\".concat(LOGROCKET_XHR_LABEL).concat(currentXHR.xhrId), response);\n        }\n      } // // Unused Event Listeners\n      // loadstart: () => {},\n      // progress: () => {},\n      // abort: () => {},\n      // error: () => {},\n      // load: () => {},\n      // timeout: () => {},\n      // loadend: () => {},\n\n    };\n    Object.keys(xhrListeners).forEach(function (key) {\n      xhrObject.addEventListener(key, xhrListeners[key]);\n    });\n    return xhrObject;\n  }; // this allows \"instanceof XMLHttpRequest\" to work\n\n\n  XMLHttpRequest.prototype = _XHR.prototype; // Persist the static variables.\n\n  ['UNSENT', 'OPENED', 'HEADERS_RECEIVED', 'LOADING', 'DONE'].forEach(function (variable) {\n    XMLHttpRequest[variable] = _XHR[variable];\n  });\n  return function () {\n    unsubscribedFromXhr = true; // eslint-disable-next-line no-native-reassign\n\n    XMLHttpRequest = _XHR;\n  };\n}\n\n/***/ }),\n\n/***/ \"./packages/@apphub:logrocket-redux/src/createEnhancer.js\":\n/*!****************************************************************!*\\\n  !*** ./packages/@apphub:logrocket-redux/src/createEnhancer.js ***!\n  \\****************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ \"./node_modules/@babel/runtime/helpers/interopRequireDefault.js\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = createEnhancer;\n\nvar _defineProperty2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/defineProperty */ \"./node_modules/@babel/runtime/helpers/defineProperty.js\"));\n\nvar _now = _interopRequireDefault(__webpack_require__(/*! @apphub/now */ \"./packages/@apphub:now/src/index.js\"));\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nvar storeIdCounter = 0;\n\nfunction createEnhancer(logger) {\n  var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n      _ref$stateSanitizer = _ref.stateSanitizer,\n      stateSanitizer = _ref$stateSanitizer === void 0 ? function (f) {\n    return f;\n  } : _ref$stateSanitizer,\n      _ref$actionSanitizer = _ref.actionSanitizer,\n      actionSanitizer = _ref$actionSanitizer === void 0 ? function (f) {\n    return f;\n  } : _ref$actionSanitizer;\n\n  // an enhancer is a function that returns a Store\n  return function (createStore) {\n    return function (reducer, initialState, enhancer) {\n      var store = createStore(reducer, initialState, enhancer);\n      var originalDispatch = store.dispatch;\n      var storeId = storeIdCounter++;\n      logger.addEvent('lr.redux.InitialState', function () {\n        var sanitizedState;\n\n        try {\n          // only try catch user defined functions\n          sanitizedState = stateSanitizer(store.getState());\n        } catch (err) {\n          console.error(err.toString());\n        }\n\n        return {\n          state: sanitizedState,\n          storeId: storeId\n        };\n      });\n\n      var dispatch = function dispatch(action) {\n        var start = (0, _now.default)();\n        var err;\n        var res;\n\n        try {\n          res = originalDispatch(action);\n        } catch (_err) {\n          err = _err;\n        } finally {\n          var duration = (0, _now.default)() - start;\n          logger.addEvent('lr.redux.ReduxAction', function () {\n            var sanitizedState = null;\n            var sanitizedAction = null;\n\n            try {\n              // only try catch user defined functions\n              sanitizedState = stateSanitizer(store.getState());\n              sanitizedAction = actionSanitizer(action);\n            } catch (err) {\n              console.error(err.toString());\n            }\n\n            if (sanitizedState && sanitizedAction) {\n              return {\n                storeId: storeId,\n                action: sanitizedAction,\n                duration: duration,\n                stateDelta: sanitizedState\n              };\n            }\n\n            return null;\n          });\n        }\n\n        if (err) {\n          throw err;\n        }\n\n        return res;\n      };\n\n      return _objectSpread(_objectSpread({}, store), {}, {\n        dispatch: dispatch\n      });\n    };\n  };\n}\n\nmodule.exports = exports.default;\n\n/***/ }),\n\n/***/ \"./packages/@apphub:logrocket-redux/src/createMiddleware.js\":\n/*!******************************************************************!*\\\n  !*** ./packages/@apphub:logrocket-redux/src/createMiddleware.js ***!\n  \\******************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ \"./node_modules/@babel/runtime/helpers/interopRequireDefault.js\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = createMiddleware;\n\nvar _now = _interopRequireDefault(__webpack_require__(/*! @apphub/now */ \"./packages/@apphub:now/src/index.js\"));\n\nvar storeIdCounter = 0;\n\nfunction createMiddleware(logger) {\n  var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n      _ref$stateSanitizer = _ref.stateSanitizer,\n      stateSanitizer = _ref$stateSanitizer === void 0 ? function (f) {\n    return f;\n  } : _ref$stateSanitizer,\n      _ref$actionSanitizer = _ref.actionSanitizer,\n      actionSanitizer = _ref$actionSanitizer === void 0 ? function (f) {\n    return f;\n  } : _ref$actionSanitizer;\n\n  return function (store) {\n    var storeId = storeIdCounter++;\n    logger.addEvent('lr.redux.InitialState', function () {\n      var sanitizedState;\n\n      try {\n        // only try catch user defined functions\n        sanitizedState = stateSanitizer(store.getState());\n      } catch (err) {\n        console.error(err.toString());\n      }\n\n      return {\n        state: sanitizedState,\n        storeId: storeId\n      };\n    });\n    return function (next) {\n      return function (action) {\n        var start = (0, _now.default)();\n        var err;\n        var res;\n\n        try {\n          res = next(action);\n        } catch (_err) {\n          err = _err;\n        } finally {\n          var duration = (0, _now.default)() - start;\n          logger.addEvent('lr.redux.ReduxAction', function () {\n            var sanitizedState = null;\n            var sanitizedAction = null;\n\n            try {\n              // only try catch user defined functions\n              sanitizedState = stateSanitizer(store.getState());\n              sanitizedAction = actionSanitizer(action);\n            } catch (err) {\n              console.error(err.toString());\n            }\n\n            if (sanitizedState && sanitizedAction) {\n              return {\n                storeId: storeId,\n                action: sanitizedAction,\n                duration: duration,\n                stateDelta: sanitizedState\n              };\n            }\n\n            return null;\n          });\n        }\n\n        if (err) {\n          throw err;\n        }\n\n        return res;\n      };\n    };\n  };\n}\n\nmodule.exports = exports.default;\n\n/***/ }),\n\n/***/ \"./packages/@apphub:logrocket-redux/src/index.js\":\n/*!*******************************************************!*\\\n  !*** ./packages/@apphub:logrocket-redux/src/index.js ***!\n  \\*******************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ \"./node_modules/@babel/runtime/helpers/interopRequireDefault.js\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nObject.defineProperty(exports, \"createEnhancer\", {\n  enumerable: true,\n  get: function get() {\n    return _createEnhancer.default;\n  }\n});\nObject.defineProperty(exports, \"createMiddleware\", {\n  enumerable: true,\n  get: function get() {\n    return _createMiddleware.default;\n  }\n});\n\nvar _createEnhancer = _interopRequireDefault(__webpack_require__(/*! ./createEnhancer */ \"./packages/@apphub:logrocket-redux/src/createEnhancer.js\"));\n\nvar _createMiddleware = _interopRequireDefault(__webpack_require__(/*! ./createMiddleware */ \"./packages/@apphub:logrocket-redux/src/createMiddleware.js\"));\n\n/***/ }),\n\n/***/ \"./packages/@apphub:logrocket-utils/src/TraceKit.js\":\n/*!**********************************************************!*\\\n  !*** ./packages/@apphub:logrocket-utils/src/TraceKit.js ***!\n  \\**********************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function(global) {/* eslint-disable */\n\n/*\n TraceKit - Cross brower stack traces - github.com/occ/TraceKit\n\n This was originally forked from github.com/occ/TraceKit, but has since been\n largely re-written and is now maintained as part of raven-js.  Tests for\n this are in test/vendor.\n\n MIT license\n*/\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\nvar TraceKit = {\n  collectWindowErrors: true,\n  debug: false\n}; // This is to be defensive in environments where window does not exist (see https://github.com/getsentry/raven-js/pull/785)\n\nvar _window = typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {}; // global reference to slice\n\n\nvar _slice = [].slice;\nvar UNKNOWN_FUNCTION = '?'; // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error#Error_types\n\nvar ERROR_TYPES_RE = /^(?:Uncaught (?:exception: )?)?((?:Eval|Internal|Range|Reference|Syntax|Type|URI)Error): ?(.*)$/;\n\nfunction getLocationHref() {\n  if (typeof document === 'undefined' || typeof document.location === 'undefined') return '';\n  return document.location.href;\n}\n/**\n * TraceKit.report: cross-browser processing of unhandled exceptions\n *\n * Syntax:\n *   TraceKit.report.subscribe(function(stackInfo) { ... })\n *   TraceKit.report.unsubscribe(function(stackInfo) { ... })\n *   TraceKit.report(exception)\n *   try { ...code... } catch(ex) { TraceKit.report(ex); }\n *\n * Supports:\n *   - Firefox: full stack trace with line numbers, plus column number\n *              on top frame; column number is not guaranteed\n *   - Opera:   full stack trace with line and column numbers\n *   - Chrome:  full stack trace with line and column numbers\n *   - Safari:  line and column number for the top frame only; some frames\n *              may be missing, and column number is not guaranteed\n *   - IE:      line and column number for the top frame only; some frames\n *              may be missing, and column number is not guaranteed\n *\n * In theory, TraceKit should work on all of the following versions:\n *   - IE5.5+ (only 8.0 tested)\n *   - Firefox 0.9+ (only 3.5+ tested)\n *   - Opera 7+ (only 10.50 tested; versions 9 and earlier may require\n *     Exceptions Have Stacktrace to be enabled in opera:config)\n *   - Safari 3+ (only 4+ tested)\n *   - Chrome 1+ (only 5+ tested)\n *   - Konqueror 3.5+ (untested)\n *\n * Requires TraceKit.computeStackTrace.\n *\n * Tries to catch all unhandled exceptions and report them to the\n * subscribed handlers. Please note that TraceKit.report will rethrow the\n * exception. This is REQUIRED in order to get a useful stack trace in IE.\n * If the exception does not reach the top of the browser, you will only\n * get a stack trace from the point where TraceKit.report was called.\n *\n * Handlers receive a stackInfo object as described in the\n * TraceKit.computeStackTrace docs.\n */\n\n\nTraceKit.report = function reportModuleWrapper() {\n  var handlers = [],\n      lastArgs = null,\n      lastException = null,\n      lastExceptionStack = null;\n  /**\n   * Add a crash handler.\n   * @param {Function} handler\n   */\n\n  function subscribe(handler) {\n    installGlobalHandler();\n    handlers.push(handler);\n  }\n  /**\n   * Remove a crash handler.\n   * @param {Function} handler\n   */\n\n\n  function unsubscribe(handler) {\n    for (var i = handlers.length - 1; i >= 0; --i) {\n      if (handlers[i] === handler) {\n        handlers.splice(i, 1);\n      }\n    }\n  }\n  /**\n   * Remove all crash handlers.\n   */\n\n\n  function unsubscribeAll() {\n    uninstallGlobalHandler();\n    handlers = [];\n  }\n  /**\n   * Dispatch stack information to all handlers.\n   * @param {Object.<string, *>} stack\n   */\n\n\n  function notifyHandlers(stack, isWindowError) {\n    var exception = null;\n\n    if (isWindowError && !TraceKit.collectWindowErrors) {\n      return;\n    }\n\n    for (var i in handlers) {\n      if (handlers.hasOwnProperty(i)) {\n        try {\n          handlers[i].apply(null, [stack].concat(_slice.call(arguments, 2)));\n        } catch (inner) {\n          exception = inner;\n        }\n      }\n    }\n\n    if (exception) {\n      throw exception;\n    }\n  }\n\n  var _oldOnerrorHandler, _onErrorHandlerInstalled;\n  /**\n   * Ensures all global unhandled exceptions are recorded.\n   * Supported by Gecko and IE.\n   * @param {string} message Error message.\n   * @param {string} url URL of script that generated the exception.\n   * @param {(number|string)} lineNo The line number at which the error\n   * occurred.\n   * @param {?(number|string)} colNo The column number at which the error\n   * occurred.\n   * @param {?Error} ex The actual Error object.\n   */\n\n\n  function traceKitWindowOnError(message, url, lineNo, colNo, ex) {\n    var stack = null;\n\n    if (lastExceptionStack) {\n      TraceKit.computeStackTrace.augmentStackTraceWithInitialElement(lastExceptionStack, url, lineNo, message);\n      processLastException();\n    } else if (ex) {\n      // New chrome and blink send along a real error object\n      // Let's just report that like a normal error.\n      // See: https://mikewest.org/2013/08/debugging-runtime-errors-with-window-onerror\n      stack = TraceKit.computeStackTrace(ex);\n      notifyHandlers(stack, true);\n    } else {\n      var location = {\n        'url': url,\n        'line': lineNo,\n        'column': colNo\n      };\n      var name = undefined;\n      var msg = message; // must be new var or will modify original `arguments`\n\n      var groups;\n\n      if ({}.toString.call(message) === '[object String]') {\n        var groups = message.match(ERROR_TYPES_RE);\n\n        if (groups) {\n          name = groups[1];\n          msg = groups[2];\n        }\n      }\n\n      location.func = UNKNOWN_FUNCTION;\n      stack = {\n        'name': name,\n        'message': msg,\n        'url': getLocationHref(),\n        'stack': [location]\n      };\n      notifyHandlers(stack, true);\n    }\n\n    if (_oldOnerrorHandler) {\n      return _oldOnerrorHandler.apply(this, arguments);\n    }\n\n    return false;\n  }\n\n  function installGlobalHandler() {\n    if (_onErrorHandlerInstalled) {\n      return;\n    }\n\n    _oldOnerrorHandler = _window.onerror;\n    _window.onerror = traceKitWindowOnError;\n    _onErrorHandlerInstalled = true;\n  }\n\n  function uninstallGlobalHandler() {\n    if (!_onErrorHandlerInstalled) {\n      return;\n    }\n\n    _window.onerror = _oldOnerrorHandler;\n    _onErrorHandlerInstalled = false;\n    _oldOnerrorHandler = undefined;\n  }\n\n  function processLastException() {\n    var _lastExceptionStack = lastExceptionStack,\n        _lastArgs = lastArgs;\n    lastArgs = null;\n    lastExceptionStack = null;\n    lastException = null;\n    notifyHandlers.apply(null, [_lastExceptionStack, false].concat(_lastArgs));\n  }\n  /**\n   * Reports an unhandled Error to TraceKit.\n   * @param {Error} ex\n   * @param {?boolean} rethrow If false, do not re-throw the exception.\n   * Only used for window.onerror to not cause an infinite loop of\n   * rethrowing.\n   */\n\n\n  function report(ex, rethrow) {\n    var args = _slice.call(arguments, 1);\n\n    if (lastExceptionStack) {\n      if (lastException === ex) {\n        return; // already caught by an inner catch block, ignore\n      } else {\n        processLastException();\n      }\n    }\n\n    var stack = TraceKit.computeStackTrace(ex);\n    lastExceptionStack = stack;\n    lastException = ex;\n    lastArgs = args; // If the stack trace is incomplete, wait for 2 seconds for\n    // slow slow IE to see if onerror occurs or not before reporting\n    // this exception; otherwise, we will end up with an incomplete\n    // stack trace\n\n    setTimeout(function () {\n      if (lastException === ex) {\n        processLastException();\n      }\n    }, stack.incomplete ? 2000 : 0);\n\n    if (rethrow !== false) {\n      throw ex; // re-throw to propagate to the top level (and cause window.onerror)\n    }\n  }\n\n  report.subscribe = subscribe;\n  report.unsubscribe = unsubscribe;\n  report.uninstall = unsubscribeAll;\n  return report;\n}();\n/**\n * TraceKit.computeStackTrace: cross-browser stack traces in JavaScript\n *\n * Syntax:\n *   s = TraceKit.computeStackTrace(exception) // consider using TraceKit.report instead (see below)\n * Returns:\n *   s.name              - exception name\n *   s.message           - exception message\n *   s.stack[i].url      - JavaScript or HTML file URL\n *   s.stack[i].func     - function name, or empty for anonymous functions (if guessing did not work)\n *   s.stack[i].args     - arguments passed to the function, if known\n *   s.stack[i].line     - line number, if known\n *   s.stack[i].column   - column number, if known\n *\n * Supports:\n *   - Firefox:  full stack trace with line numbers and unreliable column\n *               number on top frame\n *   - Opera 10: full stack trace with line and column numbers\n *   - Opera 9-: full stack trace with line numbers\n *   - Chrome:   full stack trace with line and column numbers\n *   - Safari:   line and column number for the topmost stacktrace element\n *               only\n *   - IE:       no line numbers whatsoever\n *\n * Tries to guess names of anonymous functions by looking for assignments\n * in the source code. In IE and Safari, we have to guess source file names\n * by searching for function bodies inside all page scripts. This will not\n * work for scripts that are loaded cross-domain.\n * Here be dragons: some function names may be guessed incorrectly, and\n * duplicate functions may be mismatched.\n *\n * TraceKit.computeStackTrace should only be used for tracing purposes.\n * Logging of unhandled exceptions should be done with TraceKit.report,\n * which builds on top of TraceKit.computeStackTrace and provides better\n * IE support by utilizing the window.onerror event to retrieve information\n * about the top of the stack.\n *\n * Note: In IE and Safari, no stack trace is recorded on the Error object,\n * so computeStackTrace instead walks its *own* chain of callers.\n * This means that:\n *  * in Safari, some methods may be missing from the stack trace;\n *  * in IE, the topmost function in the stack trace will always be the\n *    caller of computeStackTrace.\n *\n * This is okay for tracing (because you are likely to be calling\n * computeStackTrace from the function you want to be the topmost element\n * of the stack trace anyway), but not okay for logging unhandled\n * exceptions (because your catch block will likely be far away from the\n * inner function that actually caused the exception).\n *\n */\n\n\nTraceKit.computeStackTrace = function computeStackTraceWrapper() {\n  /**\n   * Escapes special characters, except for whitespace, in a string to be\n   * used inside a regular expression as a string literal.\n   * @param {string} text The string.\n   * @return {string} The escaped string literal.\n   */\n  function escapeRegExp(text) {\n    return text.replace(/[\\-\\[\\]{}()*+?.,\\\\\\^$|#]/g, '\\\\$&');\n  }\n  /**\n   * Escapes special characters in a string to be used inside a regular\n   * expression as a string literal. Also ensures that HTML entities will\n   * be matched the same as their literal friends.\n   * @param {string} body The string.\n   * @return {string} The escaped string.\n   */\n\n\n  function escapeCodeAsRegExpForMatchingInsideHTML(body) {\n    return escapeRegExp(body).replace('<', '(?:<|&lt;)').replace('>', '(?:>|&gt;)').replace('&', '(?:&|&amp;)').replace('\"', '(?:\"|&quot;)').replace(/\\s+/g, '\\\\s+');\n  } // Contents of Exception in various browsers.\n  //\n  // SAFARI:\n  // ex.message = Can't find variable: qq\n  // ex.line = 59\n  // ex.sourceId = 580238192\n  // ex.sourceURL = http://...\n  // ex.expressionBeginOffset = 96\n  // ex.expressionCaretOffset = 98\n  // ex.expressionEndOffset = 98\n  // ex.name = ReferenceError\n  //\n  // FIREFOX:\n  // ex.message = qq is not defined\n  // ex.fileName = http://...\n  // ex.lineNumber = 59\n  // ex.columnNumber = 69\n  // ex.stack = ...stack trace... (see the example below)\n  // ex.name = ReferenceError\n  //\n  // CHROME:\n  // ex.message = qq is not defined\n  // ex.name = ReferenceError\n  // ex.type = not_defined\n  // ex.arguments = ['aa']\n  // ex.stack = ...stack trace...\n  //\n  // INTERNET EXPLORER:\n  // ex.message = ...\n  // ex.name = ReferenceError\n  //\n  // OPERA:\n  // ex.message = ...message... (see the example below)\n  // ex.name = ReferenceError\n  // ex.opera#sourceloc = 11  (pretty much useless, duplicates the info in ex.message)\n  // ex.stacktrace = n/a; see 'opera:config#UserPrefs|Exceptions Have Stacktrace'\n\n  /**\n   * Computes stack trace information from the stack property.\n   * Chrome and Gecko use this property.\n   * @param {Error} ex\n   * @return {?Object.<string, *>} Stack trace information.\n   */\n\n\n  function computeStackTraceFromStackProp(ex) {\n    if (typeof ex.stack === 'undefined' || !ex.stack) return;\n    var chrome = /^\\s*at (.*?) ?\\(((?:file|https?|blob|chrome-extension|native|eval|<anonymous>).*?)(?::(\\d+))?(?::(\\d+))?\\)?\\s*$/i,\n        gecko = /^\\s*(.*?)(?:\\((.*?)\\))?(?:^|@)((?:file|https?|blob|chrome|resource|\\[native).*?)(?::(\\d+))?(?::(\\d+))?\\s*$/i,\n        winjs = /^\\s*at (?:((?:\\[object object\\])?.+) )?\\(?((?:file|ms-appx|https?|blob):.*?):(\\d+)(?::(\\d+))?\\)?\\s*$/i,\n        lines = ex.stack.split('\\n'),\n        stack = [],\n        parts,\n        element,\n        reference = /^(.*) is undefined$/.exec(ex.message);\n\n    for (var i = 0, j = lines.length; i < j; ++i) {\n      if (parts = chrome.exec(lines[i])) {\n        var isNative = parts[2] && parts[2].indexOf('native') !== -1;\n        element = {\n          'url': !isNative ? parts[2] : null,\n          'func': parts[1] || UNKNOWN_FUNCTION,\n          'args': isNative ? [parts[2]] : [],\n          'line': parts[3] ? +parts[3] : null,\n          'column': parts[4] ? +parts[4] : null\n        };\n      } else if (parts = winjs.exec(lines[i])) {\n        element = {\n          'url': parts[2],\n          'func': parts[1] || UNKNOWN_FUNCTION,\n          'args': [],\n          'line': +parts[3],\n          'column': parts[4] ? +parts[4] : null\n        };\n      } else if (parts = gecko.exec(lines[i])) {\n        element = {\n          'url': parts[3],\n          'func': parts[1] || UNKNOWN_FUNCTION,\n          'args': parts[2] ? parts[2].split(',') : [],\n          'line': parts[4] ? +parts[4] : null,\n          'column': parts[5] ? +parts[5] : null\n        };\n      } else {\n        continue;\n      }\n\n      if (!element.func && element.line) {\n        element.func = UNKNOWN_FUNCTION;\n      }\n\n      stack.push(element);\n    }\n\n    if (!stack.length) {\n      return null;\n    }\n\n    if (!stack[0].column && typeof ex.columnNumber !== 'undefined') {\n      // FireFox uses this awesome columnNumber property for its top frame\n      // Also note, Firefox's column number is 0-based and everything else expects 1-based,\n      // so adding 1\n      stack[0].column = ex.columnNumber + 1;\n    }\n\n    return {\n      'name': ex.name,\n      'message': ex.message,\n      'url': getLocationHref(),\n      'stack': stack\n    };\n  }\n  /**\n   * Adds information about the first frame to incomplete stack traces.\n   * Safari and IE require this to get complete data on the first frame.\n   * @param {Object.<string, *>} stackInfo Stack trace information from\n   * one of the compute* methods.\n   * @param {string} url The URL of the script that caused an error.\n   * @param {(number|string)} lineNo The line number of the script that\n   * caused an error.\n   * @param {string=} message The error generated by the browser, which\n   * hopefully contains the name of the object that caused the error.\n   * @return {boolean} Whether or not the stack information was\n   * augmented.\n   */\n\n\n  function augmentStackTraceWithInitialElement(stackInfo, url, lineNo, message) {\n    var initial = {\n      'url': url,\n      'line': lineNo\n    };\n\n    if (initial.url && initial.line) {\n      stackInfo.incomplete = false;\n\n      if (!initial.func) {\n        initial.func = UNKNOWN_FUNCTION;\n      }\n\n      if (stackInfo.stack.length > 0) {\n        if (stackInfo.stack[0].url === initial.url) {\n          if (stackInfo.stack[0].line === initial.line) {\n            return false; // already in stack trace\n          } else if (!stackInfo.stack[0].line && stackInfo.stack[0].func === initial.func) {\n            stackInfo.stack[0].line = initial.line;\n            return false;\n          }\n        }\n      }\n\n      stackInfo.stack.unshift(initial);\n      stackInfo.partial = true;\n      return true;\n    } else {\n      stackInfo.incomplete = true;\n    }\n\n    return false;\n  }\n  /**\n   * Computes stack trace information by walking the arguments.caller\n   * chain at the time the exception occurred. This will cause earlier\n   * frames to be missed but is the only way to get any stack trace in\n   * Safari and IE. The top frame is restored by\n   * {@link augmentStackTraceWithInitialElement}.\n   * @param {Error} ex\n   * @return {?Object.<string, *>} Stack trace information.\n   */\n\n\n  function computeStackTraceByWalkingCallerChain(ex, depth) {\n    var functionName = /function\\s+([_$a-zA-Z\\xA0-\\uFFFF][_$a-zA-Z0-9\\xA0-\\uFFFF]*)?\\s*\\(/i,\n        stack = [],\n        funcs = {},\n        recursion = false,\n        parts,\n        item,\n        source;\n\n    for (var curr = computeStackTraceByWalkingCallerChain.caller; curr && !recursion; curr = curr.caller) {\n      if (curr === computeStackTrace || curr === TraceKit.report) {\n        // console.log('skipping internal function');\n        continue;\n      }\n\n      item = {\n        'url': null,\n        'func': UNKNOWN_FUNCTION,\n        'line': null,\n        'column': null\n      };\n\n      if (curr.name) {\n        item.func = curr.name;\n      } else if (parts = functionName.exec(curr.toString())) {\n        item.func = parts[1];\n      }\n\n      if (typeof item.func === 'undefined') {\n        try {\n          item.func = parts.input.substring(0, parts.input.indexOf('{'));\n        } catch (e) {}\n      }\n\n      if (funcs['' + curr]) {\n        recursion = true;\n      } else {\n        funcs['' + curr] = true;\n      }\n\n      stack.push(item);\n    }\n\n    if (depth) {\n      // console.log('depth is ' + depth);\n      // console.log('stack is ' + stack.length);\n      stack.splice(0, depth);\n    }\n\n    var result = {\n      'name': ex.name,\n      'message': ex.message,\n      'url': getLocationHref(),\n      'stack': stack\n    };\n    augmentStackTraceWithInitialElement(result, ex.sourceURL || ex.fileName, ex.line || ex.lineNumber, ex.message || ex.description);\n    return result;\n  }\n  /**\n   * Computes a stack trace for an exception.\n   * @param {Error} ex\n   * @param {(string|number)=} depth\n   */\n\n\n  function computeStackTrace(ex, depth) {\n    var stack = null;\n    depth = depth == null ? 0 : +depth;\n\n    try {\n      stack = computeStackTraceFromStackProp(ex);\n\n      if (stack) {\n        return stack;\n      }\n    } catch (e) {\n      if (TraceKit.debug) {\n        throw e;\n      }\n    }\n\n    try {\n      stack = computeStackTraceByWalkingCallerChain(ex, depth + 1);\n\n      if (stack) {\n        return stack;\n      }\n    } catch (e) {\n      if (TraceKit.debug) {\n        throw e;\n      }\n    }\n\n    return {\n      'name': ex.name,\n      'message': ex.message,\n      'url': getLocationHref()\n    };\n  }\n\n  computeStackTrace.augmentStackTraceWithInitialElement = augmentStackTraceWithInitialElement;\n  computeStackTrace.computeStackTraceFromStackProp = computeStackTraceFromStackProp;\n  return computeStackTrace;\n}();\n\nvar _default = TraceKit;\nexports.default = _default;\nmodule.exports = exports.default;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../node_modules/webpack/buildin/global.js */ \"./node_modules/webpack/buildin/global.js\")))\n\n/***/ }),\n\n/***/ \"./packages/@apphub:logrocket-utils/src/constants/nps.js\":\n/*!***************************************************************!*\\\n  !*** ./packages/@apphub:logrocket-utils/src/constants/nps.js ***!\n  \\***************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.DELIGHTED_FEEDBACK_PREFIX = exports.DELIGHTED_RESPONSES_REGEX = exports.WOOTRIC_RESPONSES_REGEX = void 0;\nvar WOOTRIC_RESPONSES_REGEX = /^https:\\/\\/production.wootric.com\\/responses/;\nexports.WOOTRIC_RESPONSES_REGEX = WOOTRIC_RESPONSES_REGEX;\nvar DELIGHTED_RESPONSES_REGEX = /^https:\\/\\/web.delighted.com\\/e\\/[a-zA-Z-]*\\/c/;\nexports.DELIGHTED_RESPONSES_REGEX = DELIGHTED_RESPONSES_REGEX;\nvar DELIGHTED_FEEDBACK_PREFIX = 'comment=';\nexports.DELIGHTED_FEEDBACK_PREFIX = DELIGHTED_FEEDBACK_PREFIX;\n\n/***/ }),\n\n/***/ \"./packages/@apphub:logrocket-utils/src/enhanceFunc.js\":\n/*!*************************************************************!*\\\n  !*** ./packages/@apphub:logrocket-utils/src/enhanceFunc.js ***!\n  \\*************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = enhanceFunc;\n\n/* eslint no-param-reassign: [\"error\", { \"props\": false }] */\nfunction enhanceFunc(obj, method, handler) {\n  var original = obj[method];\n\n  function shim() {\n    var res;\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    if (original) {\n      res = original.apply(this, args);\n    }\n\n    handler.apply(this, args);\n    return res;\n  }\n\n  obj[method] = shim;\n  return function () {\n    obj[method] = original;\n  };\n}\n\nmodule.exports = exports.default;\n\n/***/ }),\n\n/***/ \"./packages/@apphub:logrocket-utils/src/mapValues.js\":\n/*!***********************************************************!*\\\n  !*** ./packages/@apphub:logrocket-utils/src/mapValues.js ***!\n  \\***********************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = mapValues;\n\nfunction mapValues(obj, f) {\n  if (obj == null) {\n    return {};\n  }\n\n  var res = {};\n  Object.keys(obj).forEach(function (key) {\n    res[key] = f(obj[key]);\n  });\n  return res;\n}\n\nmodule.exports = exports.default;\n\n/***/ }),\n\n/***/ \"./packages/@apphub:logrocket-utils/src/startsWith.js\":\n/*!************************************************************!*\\\n  !*** ./packages/@apphub:logrocket-utils/src/startsWith.js ***!\n  \\************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = startsWith;\n\nfunction startsWith(value, search) {\n  var pos = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n  return value && search && value.substring(pos, pos + search.length) === search;\n}\n\nmodule.exports = exports.default;\n\n/***/ }),\n\n/***/ \"./packages/@apphub:now/src/index.js\":\n/*!*******************************************!*\\\n  !*** ./packages/@apphub:now/src/index.js ***!\n  \\*******************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\nvar dateNow = Date.now.bind(Date);\nvar loadTime = dateNow();\n\nvar _default = typeof performance !== 'undefined' && performance.now ? performance.now.bind(performance) : function () {\n  return dateNow() - loadTime;\n};\n\nexports.default = _default;\nmodule.exports = exports.default;\n\n/***/ }),\n\n/***/ \"./packages/logrocket/src/LogRocket.js\":\n/*!*********************************************!*\\\n  !*** ./packages/logrocket/src/LogRocket.js ***!\n  \\*********************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ \"./node_modules/@babel/runtime/helpers/interopRequireDefault.js\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = exports.MAX_QUEUE_SIZE = void 0;\n\nvar _classCallCheck2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\"));\n\nvar _createClass2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/createClass */ \"./node_modules/@babel/runtime/helpers/createClass.js\"));\n\nvar _defineProperty2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/defineProperty */ \"./node_modules/@babel/runtime/helpers/defineProperty.js\"));\n\nvar _objectWithoutProperties2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/objectWithoutProperties */ \"./node_modules/@babel/runtime/helpers/objectWithoutProperties.js\"));\n\nvar _logrocketNetwork = _interopRequireDefault(__webpack_require__(/*! @apphub/logrocket-network */ \"./packages/@apphub:logrocket-network/src/index.js\"));\n\nvar _logrocketExceptions = __webpack_require__(/*! @apphub/logrocket-exceptions */ \"./packages/@apphub:logrocket-exceptions/src/index.js\");\n\nvar _logrocketConsole = _interopRequireDefault(__webpack_require__(/*! @apphub/logrocket-console */ \"./packages/@apphub:logrocket-console/src/index.js\"));\n\nvar _logrocketRedux = __webpack_require__(/*! @apphub/logrocket-redux */ \"./packages/@apphub:logrocket-redux/src/index.js\");\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nvar MAX_QUEUE_SIZE = 1000;\nexports.MAX_QUEUE_SIZE = MAX_QUEUE_SIZE;\n\nvar considerIngestServerOption = function considerIngestServerOption() {\n  var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n      ingestServer = _ref.ingestServer,\n      options = (0, _objectWithoutProperties2.default)(_ref, [\"ingestServer\"]);\n\n  if (ingestServer) {\n    return _objectSpread({\n      serverURL: \"\".concat(ingestServer, \"/i\"),\n      statsURL: \"\".concat(ingestServer, \"/s\")\n    }, options);\n  }\n\n  return options;\n};\n\nvar LogRocket = /*#__PURE__*/function () {\n  function LogRocket() {\n    var _this = this;\n\n    (0, _classCallCheck2.default)(this, LogRocket);\n    this._buffer = [];\n    // TODO: tests for these exposed methods.\n    ['log', 'info', 'warn', 'error', 'debug'].forEach(function (method) {\n      _this[method] = function () {\n        for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n          args[_key] = arguments[_key];\n        }\n\n        _this.addEvent('lr.core.LogEvent', function () {\n          var consoleOptions = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n          if (method === 'error' && consoleOptions.shouldAggregateConsoleErrors) {\n            _logrocketExceptions.Capture.captureMessage(_this, args[0], {}, true);\n          }\n\n          return {\n            logLevel: method.toUpperCase(),\n            args: args\n          };\n        }, {\n          shouldCaptureStackTrace: true\n        });\n      };\n    });\n    this._isInitialized = false;\n    this._installed = [];\n  }\n\n  (0, _createClass2.default)(LogRocket, [{\n    key: \"addEvent\",\n    value: function addEvent(type, getMessage) {\n      var opts = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n      var time = Date.now();\n\n      this._run(function (logger) {\n        logger.addEvent(type, getMessage, _objectSpread(_objectSpread({}, opts), {}, {\n          timeOverride: time\n        }));\n      });\n    }\n  }, {\n    key: \"onLogger\",\n    value: function onLogger(logger) {\n      this._logger = logger;\n\n      while (this._buffer.length > 0) {\n        var f = this._buffer.shift();\n\n        f(this._logger);\n      }\n    }\n  }, {\n    key: \"_run\",\n    value: function _run(f) {\n      if (this._isDisabled) {\n        return;\n      }\n\n      if (this._logger) {\n        f(this._logger);\n      } else {\n        if (this._buffer.length >= MAX_QUEUE_SIZE) {\n          this._isDisabled = true;\n          console.warn('LogRocket: script did not load. Check that you have a valid network connection.');\n          this.uninstall();\n          return;\n        }\n\n        this._buffer.push(f.bind(this));\n      }\n    }\n  }, {\n    key: \"init\",\n    value: function init(appID) {\n      var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n      if (!this._isInitialized) {\n        var _opts$shouldAugmentNP = opts.shouldAugmentNPS,\n            shouldAugmentNPS = _opts$shouldAugmentNP === void 0 ? true : _opts$shouldAugmentNP;\n\n        this._installed.push((0, _logrocketExceptions.registerExceptions)(this));\n\n        this._installed.push((0, _logrocketNetwork.default)(this, {\n          shouldAugmentNPS: !!shouldAugmentNPS\n        }));\n\n        this._installed.push((0, _logrocketConsole.default)(this));\n\n        this._isInitialized = true;\n\n        this._run(function (logger) {\n          logger.init(appID, considerIngestServerOption(opts));\n        });\n      }\n    }\n  }, {\n    key: \"start\",\n    value: function start() {\n      this._run(function (logger) {\n        logger.start();\n      });\n    }\n  }, {\n    key: \"uninstall\",\n    value: function uninstall() {\n      this._installed.forEach(function (f) {\n        return f();\n      });\n\n      this._buffer = [];\n\n      this._run(function (logger) {\n        logger.uninstall();\n      });\n    }\n  }, {\n    key: \"identify\",\n    value: function identify(id, opts) {\n      this._run(function (logger) {\n        logger.identify(id, opts);\n      });\n    }\n  }, {\n    key: \"startNewSession\",\n    value: function startNewSession() {\n      this._run(function (logger) {\n        logger.startNewSession();\n      });\n    }\n  }, {\n    key: \"track\",\n    value: function track(customEventName, eventProperties) {\n      this._run(function (logger) {\n        logger.track(customEventName, eventProperties);\n      });\n    }\n  }, {\n    key: \"getSessionURL\",\n    value: function getSessionURL(cb) {\n      if (typeof cb !== 'function') {\n        throw new Error('LogRocket: must pass callback to getSessionURL()');\n      }\n\n      this._run(function (logger) {\n        if (logger.getSessionURL) {\n          logger.getSessionURL(cb);\n        } else {\n          cb(logger.recordingURL);\n        }\n      });\n    }\n  }, {\n    key: \"getVersion\",\n    value: function getVersion(cb) {\n      this._run(function (logger) {\n        cb(logger.version);\n      });\n    }\n  }, {\n    key: \"captureMessage\",\n    value: function captureMessage(message) {\n      var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n      _logrocketExceptions.Capture.captureMessage(this, message, options);\n    }\n  }, {\n    key: \"captureException\",\n    value: function captureException(exception) {\n      var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n      _logrocketExceptions.Capture.captureException(this, exception, options);\n    }\n  }, {\n    key: \"version\",\n    get: function get() {\n      return this._logger && this._logger.version;\n    }\n  }, {\n    key: \"sessionURL\",\n    get: function get() {\n      return this._logger && this._logger.recordingURL;\n    }\n  }, {\n    key: \"recordingURL\",\n    get: function get() {\n      return this._logger && this._logger.recordingURL;\n    }\n  }, {\n    key: \"recordingID\",\n    get: function get() {\n      return this._logger && this._logger.recordingID;\n    }\n  }, {\n    key: \"threadID\",\n    get: function get() {\n      return this._logger && this._logger.threadID;\n    }\n  }, {\n    key: \"tabID\",\n    get: function get() {\n      return this._logger && this._logger.tabID;\n    }\n  }, {\n    key: \"reduxEnhancer\",\n    value: function reduxEnhancer() {\n      var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n      return (0, _logrocketRedux.createEnhancer)(this, options);\n    }\n  }, {\n    key: \"reduxMiddleware\",\n    value: function reduxMiddleware() {\n      var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n      return (0, _logrocketRedux.createMiddleware)(this, options);\n    }\n  }, {\n    key: \"isDisabled\",\n    get: function get() {\n      return !!(this._isDisabled || this._logger && this._logger._isDisabled);\n    }\n  }]);\n  return LogRocket;\n}();\n\nexports.default = LogRocket;\n\n/***/ }),\n\n/***/ \"./packages/logrocket/src/makeLogRocket.js\":\n/*!*************************************************!*\\\n  !*** ./packages/logrocket/src/makeLogRocket.js ***!\n  \\*************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ \"./node_modules/@babel/runtime/helpers/interopRequireDefault.js\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = makeLogRocket;\n\nvar _LogRocket = _interopRequireDefault(__webpack_require__(/*! ./LogRocket */ \"./packages/logrocket/src/LogRocket.js\"));\n\nvar REACT_NATIVE_NOTICE = 'LogRocket does not yet support React Native.';\n\nvar makeNoopPolyfill = function makeNoopPolyfill() {\n  return {\n    init: function init() {},\n    uninstall: function uninstall() {},\n    log: function log() {},\n    info: function info() {},\n    warn: function warn() {},\n    error: function error() {},\n    debug: function debug() {},\n    addEvent: function addEvent() {},\n    identify: function identify() {},\n    start: function start() {},\n\n    get threadID() {\n      return null;\n    },\n\n    get recordingID() {\n      return null;\n    },\n\n    get recordingURL() {\n      return null;\n    },\n\n    reduxEnhancer: function reduxEnhancer() {\n      return function (store) {\n        return function () {\n          return store.apply(void 0, arguments);\n        };\n      };\n    },\n    reduxMiddleware: function reduxMiddleware() {\n      return function () {\n        return function (next) {\n          return function (action) {\n            return next(action);\n          };\n        };\n      };\n    },\n    track: function track() {},\n    getSessionURL: function getSessionURL() {},\n    getVersion: function getVersion() {},\n    startNewSession: function startNewSession() {},\n    onLogger: function onLogger() {},\n    setClock: function setClock() {},\n    captureMessage: function captureMessage() {},\n    captureException: function captureException() {}\n  };\n};\n\nfunction makeLogRocket() {\n  var getLogger = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : function () {};\n\n  if (typeof navigator !== 'undefined' && navigator.product === 'ReactNative') {\n    throw new Error(REACT_NATIVE_NOTICE);\n  }\n\n  if (typeof window !== 'undefined') {\n    if (window._disableLogRocket) {\n      return makeNoopPolyfill();\n    }\n\n    if (window.MutationObserver && window.WeakMap) {\n      // Save window globals that we rely on.\n      window._lrMutationObserver = window.MutationObserver;\n      var instance = new _LogRocket.default();\n      getLogger(instance);\n      return instance;\n    }\n  }\n\n  return makeNoopPolyfill();\n}\n\nmodule.exports = exports.default;\n\n/***/ }),\n\n/***/ \"./packages/logrocket/src/module-npm.js\":\n/*!**********************************************!*\\\n  !*** ./packages/logrocket/src/module-npm.js ***!\n  \\**********************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ \"./node_modules/@babel/runtime/helpers/interopRequireDefault.js\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _setup = _interopRequireDefault(__webpack_require__(/*! ./setup */ \"./packages/logrocket/src/setup.js\"));\n\nvar instance = (0, _setup.default)();\nvar _default = instance;\nexports.default = _default;\nmodule.exports = exports.default;\n\n/***/ }),\n\n/***/ \"./packages/logrocket/src/setup.js\":\n/*!*****************************************!*\\\n  !*** ./packages/logrocket/src/setup.js ***!\n  \\*****************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ \"./node_modules/@babel/runtime/helpers/interopRequireDefault.js\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = setup;\n\nvar _objectWithoutProperties2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/objectWithoutProperties */ \"./node_modules/@babel/runtime/helpers/objectWithoutProperties.js\"));\n\nvar _makeLogRocket = _interopRequireDefault(__webpack_require__(/*! ./makeLogRocket */ \"./packages/logrocket/src/makeLogRocket.js\"));\n\nvar CDN_SERVER_MAP = {\n  'cdn.logrocket.io': 'https://r.logrocket.io',\n  'cdn.lr-ingest.io': 'https://r.lr-ingest.io',\n  'cdn-staging.logrocket.io': 'https://staging-i.logrocket.io',\n  'cdn-staging.lr-ingest.io': 'https://staging-i.lr-ingest.io'\n};\n\nfunction setup() {\n  var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n      enterpriseServer = _ref.enterpriseServer,\n      _ref$sdkVersion = _ref.sdkVersion,\n      sdkVersion = _ref$sdkVersion === void 0 ? \"1.3.0\" : _ref$sdkVersion,\n      opts = (0, _objectWithoutProperties2.default)(_ref, [\"enterpriseServer\", \"sdkVersion\"]);\n\n  var scriptOrigin = undefined === 'staging' ? 'https://cdn-staging.logrocket.io' : 'https://cdn.logrocket.io';\n  var scriptIngest;\n\n  if (sdkVersion === 'script') {\n    try {\n      var scriptTag = document.currentScript;\n      var matches = scriptTag.src.match(/^(https?:\\/\\/([^\\\\]+))\\/.+$/);\n      var scriptHostname = matches && matches[2];\n\n      if (scriptHostname && CDN_SERVER_MAP[scriptHostname]) {\n        scriptOrigin = matches && matches[1];\n        scriptIngest = CDN_SERVER_MAP[scriptHostname];\n      }\n    } catch (_) {\n      /* no-op */\n    }\n  } else {\n    // NPM\n    scriptOrigin = undefined === 'staging' ? 'https://cdn-staging.lr-ingest.io' : 'https://cdn.lr-ingest.io';\n    scriptIngest = undefined === 'staging' ? 'https://staging-i.lr-ingest.io' : 'https://r.lr-ingest.io';\n  }\n\n  var sdkServer = opts.sdkServer || enterpriseServer;\n  var ingestServer = opts.ingestServer || enterpriseServer || scriptIngest;\n  var instance = (0, _makeLogRocket.default)(function () {\n    var script = document.createElement('script');\n\n    if (ingestServer) {\n      if (typeof window.__SDKCONFIG__ === 'undefined') {\n        window.__SDKCONFIG__ = {};\n      }\n\n      window.__SDKCONFIG__.serverURL = \"\".concat(ingestServer, \"/i\");\n      window.__SDKCONFIG__.statsURL = \"\".concat(ingestServer, \"/s\");\n    }\n\n    if (sdkServer) {\n      script.src = \"\".concat(sdkServer, \"/logger.min.js\");\n    } else if (window.__SDKCONFIG__ && window.__SDKCONFIG__.loggerURL) {\n      script.src = window.__SDKCONFIG__.loggerURL;\n    } else if (window._lrAsyncScript) {\n      script.src = window._lrAsyncScript;\n    } else {\n      script.src = \"\".concat(scriptOrigin, \"/logger-1.min.js\");\n    }\n\n    script.async = true;\n    document.head.appendChild(script);\n\n    script.onload = function () {\n      // Brave browser: Advertises its user-agent as Chrome ##.##... then\n      // loads logger.min.js, but blocks the execution of the script\n      // causing _LRlogger to be undefined.  Let's make sure its there first.\n      if (typeof window._LRLogger === 'function') {\n        instance.onLogger(new window._LRLogger({\n          sdkVersion: sdkVersion\n        }));\n      } else {\n        console.warn('LogRocket: script execution has been blocked by a product or service.');\n        instance.uninstall();\n      }\n    };\n\n    script.onerror = function () {\n      console.warn('LogRocket: script could not load. Check that you have a valid network connection.');\n      instance.uninstall();\n    };\n  });\n  return instance;\n}\n\nmodule.exports = exports.default;\n\n/***/ }),\n\n/***/ 0:\n/*!****************************************************!*\\\n  !*** multi ./packages/logrocket/src/module-npm.js ***!\n  \\****************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\nmodule.exports = __webpack_require__(/*! /root/project/packages/logrocket/src/module-npm.js */\"./packages/logrocket/src/module-npm.js\");\n\n\n/***/ })\n\n/******/ });\n});","'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","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","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","//! moment.js\n//! version : 2.30.1\n//! authors : Tim Wood, Iskren Chernev, Moment.js contributors\n//! license : MIT\n//! momentjs.com\n\n;(function (global, factory) {\n    typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n    typeof define === 'function' && define.amd ? define(factory) :\n    global.moment = factory()\n}(this, (function () { 'use strict';\n\n    var hookCallback;\n\n    function hooks() {\n        return hookCallback.apply(null, arguments);\n    }\n\n    // This is done to register the method called with moment()\n    // without creating circular dependencies.\n    function setHookCallback(callback) {\n        hookCallback = callback;\n    }\n\n    function isArray(input) {\n        return (\n            input instanceof Array ||\n            Object.prototype.toString.call(input) === '[object Array]'\n        );\n    }\n\n    function isObject(input) {\n        // IE8 will treat undefined and null as object if it wasn't for\n        // input != null\n        return (\n            input != null &&\n            Object.prototype.toString.call(input) === '[object Object]'\n        );\n    }\n\n    function hasOwnProp(a, b) {\n        return Object.prototype.hasOwnProperty.call(a, b);\n    }\n\n    function isObjectEmpty(obj) {\n        if (Object.getOwnPropertyNames) {\n            return Object.getOwnPropertyNames(obj).length === 0;\n        } else {\n            var k;\n            for (k in obj) {\n                if (hasOwnProp(obj, k)) {\n                    return false;\n                }\n            }\n            return true;\n        }\n    }\n\n    function isUndefined(input) {\n        return input === void 0;\n    }\n\n    function isNumber(input) {\n        return (\n            typeof input === 'number' ||\n            Object.prototype.toString.call(input) === '[object Number]'\n        );\n    }\n\n    function isDate(input) {\n        return (\n            input instanceof Date ||\n            Object.prototype.toString.call(input) === '[object Date]'\n        );\n    }\n\n    function map(arr, fn) {\n        var res = [],\n            i,\n            arrLen = arr.length;\n        for (i = 0; i < arrLen; ++i) {\n            res.push(fn(arr[i], i));\n        }\n        return res;\n    }\n\n    function extend(a, b) {\n        for (var i in b) {\n            if (hasOwnProp(b, i)) {\n                a[i] = b[i];\n            }\n        }\n\n        if (hasOwnProp(b, 'toString')) {\n            a.toString = b.toString;\n        }\n\n        if (hasOwnProp(b, 'valueOf')) {\n            a.valueOf = b.valueOf;\n        }\n\n        return a;\n    }\n\n    function createUTC(input, format, locale, strict) {\n        return createLocalOrUTC(input, format, locale, strict, true).utc();\n    }\n\n    function defaultParsingFlags() {\n        // We need to deep clone this object.\n        return {\n            empty: false,\n            unusedTokens: [],\n            unusedInput: [],\n            overflow: -2,\n            charsLeftOver: 0,\n            nullInput: false,\n            invalidEra: null,\n            invalidMonth: null,\n            invalidFormat: false,\n            userInvalidated: false,\n            iso: false,\n            parsedDateParts: [],\n            era: null,\n            meridiem: null,\n            rfc2822: false,\n            weekdayMismatch: false,\n        };\n    }\n\n    function getParsingFlags(m) {\n        if (m._pf == null) {\n            m._pf = defaultParsingFlags();\n        }\n        return m._pf;\n    }\n\n    var some;\n    if (Array.prototype.some) {\n        some = Array.prototype.some;\n    } else {\n        some = function (fun) {\n            var t = Object(this),\n                len = t.length >>> 0,\n                i;\n\n            for (i = 0; i < len; i++) {\n                if (i in t && fun.call(this, t[i], i, t)) {\n                    return true;\n                }\n            }\n\n            return false;\n        };\n    }\n\n    function isValid(m) {\n        var flags = null,\n            parsedParts = false,\n            isNowValid = m._d && !isNaN(m._d.getTime());\n        if (isNowValid) {\n            flags = getParsingFlags(m);\n            parsedParts = some.call(flags.parsedDateParts, function (i) {\n                return i != null;\n            });\n            isNowValid =\n                flags.overflow < 0 &&\n                !flags.empty &&\n                !flags.invalidEra &&\n                !flags.invalidMonth &&\n                !flags.invalidWeekday &&\n                !flags.weekdayMismatch &&\n                !flags.nullInput &&\n                !flags.invalidFormat &&\n                !flags.userInvalidated &&\n                (!flags.meridiem || (flags.meridiem && parsedParts));\n            if (m._strict) {\n                isNowValid =\n                    isNowValid &&\n                    flags.charsLeftOver === 0 &&\n                    flags.unusedTokens.length === 0 &&\n                    flags.bigHour === undefined;\n            }\n        }\n        if (Object.isFrozen == null || !Object.isFrozen(m)) {\n            m._isValid = isNowValid;\n        } else {\n            return isNowValid;\n        }\n        return m._isValid;\n    }\n\n    function createInvalid(flags) {\n        var m = createUTC(NaN);\n        if (flags != null) {\n            extend(getParsingFlags(m), flags);\n        } else {\n            getParsingFlags(m).userInvalidated = true;\n        }\n\n        return m;\n    }\n\n    // Plugins that add properties should also add the key here (null value),\n    // so we can properly clone ourselves.\n    var momentProperties = (hooks.momentProperties = []),\n        updateInProgress = false;\n\n    function copyConfig(to, from) {\n        var i,\n            prop,\n            val,\n            momentPropertiesLen = momentProperties.length;\n\n        if (!isUndefined(from._isAMomentObject)) {\n            to._isAMomentObject = from._isAMomentObject;\n        }\n        if (!isUndefined(from._i)) {\n            to._i = from._i;\n        }\n        if (!isUndefined(from._f)) {\n            to._f = from._f;\n        }\n        if (!isUndefined(from._l)) {\n            to._l = from._l;\n        }\n        if (!isUndefined(from._strict)) {\n            to._strict = from._strict;\n        }\n        if (!isUndefined(from._tzm)) {\n            to._tzm = from._tzm;\n        }\n        if (!isUndefined(from._isUTC)) {\n            to._isUTC = from._isUTC;\n        }\n        if (!isUndefined(from._offset)) {\n            to._offset = from._offset;\n        }\n        if (!isUndefined(from._pf)) {\n            to._pf = getParsingFlags(from);\n        }\n        if (!isUndefined(from._locale)) {\n            to._locale = from._locale;\n        }\n\n        if (momentPropertiesLen > 0) {\n            for (i = 0; i < momentPropertiesLen; i++) {\n                prop = momentProperties[i];\n                val = from[prop];\n                if (!isUndefined(val)) {\n                    to[prop] = val;\n                }\n            }\n        }\n\n        return to;\n    }\n\n    // Moment prototype object\n    function Moment(config) {\n        copyConfig(this, config);\n        this._d = new Date(config._d != null ? config._d.getTime() : NaN);\n        if (!this.isValid()) {\n            this._d = new Date(NaN);\n        }\n        // Prevent infinite loop in case updateOffset creates new moment\n        // objects.\n        if (updateInProgress === false) {\n            updateInProgress = true;\n            hooks.updateOffset(this);\n            updateInProgress = false;\n        }\n    }\n\n    function isMoment(obj) {\n        return (\n            obj instanceof Moment || (obj != null && obj._isAMomentObject != null)\n        );\n    }\n\n    function warn(msg) {\n        if (\n            hooks.suppressDeprecationWarnings === false &&\n            typeof console !== 'undefined' &&\n            console.warn\n        ) {\n            console.warn('Deprecation warning: ' + msg);\n        }\n    }\n\n    function deprecate(msg, fn) {\n        var firstTime = true;\n\n        return extend(function () {\n            if (hooks.deprecationHandler != null) {\n                hooks.deprecationHandler(null, msg);\n            }\n            if (firstTime) {\n                var args = [],\n                    arg,\n                    i,\n                    key,\n                    argLen = arguments.length;\n                for (i = 0; i < argLen; i++) {\n                    arg = '';\n                    if (typeof arguments[i] === 'object') {\n                        arg += '\\n[' + i + '] ';\n                        for (key in arguments[0]) {\n                            if (hasOwnProp(arguments[0], key)) {\n                                arg += key + ': ' + arguments[0][key] + ', ';\n                            }\n                        }\n                        arg = arg.slice(0, -2); // Remove trailing comma and space\n                    } else {\n                        arg = arguments[i];\n                    }\n                    args.push(arg);\n                }\n                warn(\n                    msg +\n                        '\\nArguments: ' +\n                        Array.prototype.slice.call(args).join('') +\n                        '\\n' +\n                        new Error().stack\n                );\n                firstTime = false;\n            }\n            return fn.apply(this, arguments);\n        }, fn);\n    }\n\n    var deprecations = {};\n\n    function deprecateSimple(name, msg) {\n        if (hooks.deprecationHandler != null) {\n            hooks.deprecationHandler(name, msg);\n        }\n        if (!deprecations[name]) {\n            warn(msg);\n            deprecations[name] = true;\n        }\n    }\n\n    hooks.suppressDeprecationWarnings = false;\n    hooks.deprecationHandler = null;\n\n    function isFunction(input) {\n        return (\n            (typeof Function !== 'undefined' && input instanceof Function) ||\n            Object.prototype.toString.call(input) === '[object Function]'\n        );\n    }\n\n    function set(config) {\n        var prop, i;\n        for (i in config) {\n            if (hasOwnProp(config, i)) {\n                prop = config[i];\n                if (isFunction(prop)) {\n                    this[i] = prop;\n                } else {\n                    this['_' + i] = prop;\n                }\n            }\n        }\n        this._config = config;\n        // Lenient ordinal parsing accepts just a number in addition to\n        // number + (possibly) stuff coming from _dayOfMonthOrdinalParse.\n        // TODO: Remove \"ordinalParse\" fallback in next major release.\n        this._dayOfMonthOrdinalParseLenient = new RegExp(\n            (this._dayOfMonthOrdinalParse.source || this._ordinalParse.source) +\n                '|' +\n                /\\d{1,2}/.source\n        );\n    }\n\n    function mergeConfigs(parentConfig, childConfig) {\n        var res = extend({}, parentConfig),\n            prop;\n        for (prop in childConfig) {\n            if (hasOwnProp(childConfig, prop)) {\n                if (isObject(parentConfig[prop]) && isObject(childConfig[prop])) {\n                    res[prop] = {};\n                    extend(res[prop], parentConfig[prop]);\n                    extend(res[prop], childConfig[prop]);\n                } else if (childConfig[prop] != null) {\n                    res[prop] = childConfig[prop];\n                } else {\n                    delete res[prop];\n                }\n            }\n        }\n        for (prop in parentConfig) {\n            if (\n                hasOwnProp(parentConfig, prop) &&\n                !hasOwnProp(childConfig, prop) &&\n                isObject(parentConfig[prop])\n            ) {\n                // make sure changes to properties don't modify parent config\n                res[prop] = extend({}, res[prop]);\n            }\n        }\n        return res;\n    }\n\n    function Locale(config) {\n        if (config != null) {\n            this.set(config);\n        }\n    }\n\n    var keys;\n\n    if (Object.keys) {\n        keys = Object.keys;\n    } else {\n        keys = function (obj) {\n            var i,\n                res = [];\n            for (i in obj) {\n                if (hasOwnProp(obj, i)) {\n                    res.push(i);\n                }\n            }\n            return res;\n        };\n    }\n\n    var defaultCalendar = {\n        sameDay: '[Today at] LT',\n        nextDay: '[Tomorrow at] LT',\n        nextWeek: 'dddd [at] LT',\n        lastDay: '[Yesterday at] LT',\n        lastWeek: '[Last] dddd [at] LT',\n        sameElse: 'L',\n    };\n\n    function calendar(key, mom, now) {\n        var output = this._calendar[key] || this._calendar['sameElse'];\n        return isFunction(output) ? output.call(mom, now) : output;\n    }\n\n    function zeroFill(number, targetLength, forceSign) {\n        var absNumber = '' + Math.abs(number),\n            zerosToFill = targetLength - absNumber.length,\n            sign = number >= 0;\n        return (\n            (sign ? (forceSign ? '+' : '') : '-') +\n            Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) +\n            absNumber\n        );\n    }\n\n    var formattingTokens =\n            /(\\[[^\\[]*\\])|(\\\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,\n        localFormattingTokens = /(\\[[^\\[]*\\])|(\\\\)?(LTS|LT|LL?L?L?|l{1,4})/g,\n        formatFunctions = {},\n        formatTokenFunctions = {};\n\n    // token:    'M'\n    // padded:   ['MM', 2]\n    // ordinal:  'Mo'\n    // callback: function () { this.month() + 1 }\n    function addFormatToken(token, padded, ordinal, callback) {\n        var func = callback;\n        if (typeof callback === 'string') {\n            func = function () {\n                return this[callback]();\n            };\n        }\n        if (token) {\n            formatTokenFunctions[token] = func;\n        }\n        if (padded) {\n            formatTokenFunctions[padded[0]] = function () {\n                return zeroFill(func.apply(this, arguments), padded[1], padded[2]);\n            };\n        }\n        if (ordinal) {\n            formatTokenFunctions[ordinal] = function () {\n                return this.localeData().ordinal(\n                    func.apply(this, arguments),\n                    token\n                );\n            };\n        }\n    }\n\n    function removeFormattingTokens(input) {\n        if (input.match(/\\[[\\s\\S]/)) {\n            return input.replace(/^\\[|\\]$/g, '');\n        }\n        return input.replace(/\\\\/g, '');\n    }\n\n    function makeFormatFunction(format) {\n        var array = format.match(formattingTokens),\n            i,\n            length;\n\n        for (i = 0, length = array.length; i < length; i++) {\n            if (formatTokenFunctions[array[i]]) {\n                array[i] = formatTokenFunctions[array[i]];\n            } else {\n                array[i] = removeFormattingTokens(array[i]);\n            }\n        }\n\n        return function (mom) {\n            var output = '',\n                i;\n            for (i = 0; i < length; i++) {\n                output += isFunction(array[i])\n                    ? array[i].call(mom, format)\n                    : array[i];\n            }\n            return output;\n        };\n    }\n\n    // format date using native date object\n    function formatMoment(m, format) {\n        if (!m.isValid()) {\n            return m.localeData().invalidDate();\n        }\n\n        format = expandFormat(format, m.localeData());\n        formatFunctions[format] =\n            formatFunctions[format] || makeFormatFunction(format);\n\n        return formatFunctions[format](m);\n    }\n\n    function expandFormat(format, locale) {\n        var i = 5;\n\n        function replaceLongDateFormatTokens(input) {\n            return locale.longDateFormat(input) || input;\n        }\n\n        localFormattingTokens.lastIndex = 0;\n        while (i >= 0 && localFormattingTokens.test(format)) {\n            format = format.replace(\n                localFormattingTokens,\n                replaceLongDateFormatTokens\n            );\n            localFormattingTokens.lastIndex = 0;\n            i -= 1;\n        }\n\n        return format;\n    }\n\n    var defaultLongDateFormat = {\n        LTS: 'h:mm:ss A',\n        LT: 'h:mm A',\n        L: 'MM/DD/YYYY',\n        LL: 'MMMM D, YYYY',\n        LLL: 'MMMM D, YYYY h:mm A',\n        LLLL: 'dddd, MMMM D, YYYY h:mm A',\n    };\n\n    function longDateFormat(key) {\n        var format = this._longDateFormat[key],\n            formatUpper = this._longDateFormat[key.toUpperCase()];\n\n        if (format || !formatUpper) {\n            return format;\n        }\n\n        this._longDateFormat[key] = formatUpper\n            .match(formattingTokens)\n            .map(function (tok) {\n                if (\n                    tok === 'MMMM' ||\n                    tok === 'MM' ||\n                    tok === 'DD' ||\n                    tok === 'dddd'\n                ) {\n                    return tok.slice(1);\n                }\n                return tok;\n            })\n            .join('');\n\n        return this._longDateFormat[key];\n    }\n\n    var defaultInvalidDate = 'Invalid date';\n\n    function invalidDate() {\n        return this._invalidDate;\n    }\n\n    var defaultOrdinal = '%d',\n        defaultDayOfMonthOrdinalParse = /\\d{1,2}/;\n\n    function ordinal(number) {\n        return this._ordinal.replace('%d', number);\n    }\n\n    var defaultRelativeTime = {\n        future: 'in %s',\n        past: '%s ago',\n        s: 'a few seconds',\n        ss: '%d seconds',\n        m: 'a minute',\n        mm: '%d minutes',\n        h: 'an hour',\n        hh: '%d hours',\n        d: 'a day',\n        dd: '%d days',\n        w: 'a week',\n        ww: '%d weeks',\n        M: 'a month',\n        MM: '%d months',\n        y: 'a year',\n        yy: '%d years',\n    };\n\n    function relativeTime(number, withoutSuffix, string, isFuture) {\n        var output = this._relativeTime[string];\n        return isFunction(output)\n            ? output(number, withoutSuffix, string, isFuture)\n            : output.replace(/%d/i, number);\n    }\n\n    function pastFuture(diff, output) {\n        var format = this._relativeTime[diff > 0 ? 'future' : 'past'];\n        return isFunction(format) ? format(output) : format.replace(/%s/i, output);\n    }\n\n    var aliases = {\n        D: 'date',\n        dates: 'date',\n        date: 'date',\n        d: 'day',\n        days: 'day',\n        day: 'day',\n        e: 'weekday',\n        weekdays: 'weekday',\n        weekday: 'weekday',\n        E: 'isoWeekday',\n        isoweekdays: 'isoWeekday',\n        isoweekday: 'isoWeekday',\n        DDD: 'dayOfYear',\n        dayofyears: 'dayOfYear',\n        dayofyear: 'dayOfYear',\n        h: 'hour',\n        hours: 'hour',\n        hour: 'hour',\n        ms: 'millisecond',\n        milliseconds: 'millisecond',\n        millisecond: 'millisecond',\n        m: 'minute',\n        minutes: 'minute',\n        minute: 'minute',\n        M: 'month',\n        months: 'month',\n        month: 'month',\n        Q: 'quarter',\n        quarters: 'quarter',\n        quarter: 'quarter',\n        s: 'second',\n        seconds: 'second',\n        second: 'second',\n        gg: 'weekYear',\n        weekyears: 'weekYear',\n        weekyear: 'weekYear',\n        GG: 'isoWeekYear',\n        isoweekyears: 'isoWeekYear',\n        isoweekyear: 'isoWeekYear',\n        w: 'week',\n        weeks: 'week',\n        week: 'week',\n        W: 'isoWeek',\n        isoweeks: 'isoWeek',\n        isoweek: 'isoWeek',\n        y: 'year',\n        years: 'year',\n        year: 'year',\n    };\n\n    function normalizeUnits(units) {\n        return typeof units === 'string'\n            ? aliases[units] || aliases[units.toLowerCase()]\n            : undefined;\n    }\n\n    function normalizeObjectUnits(inputObject) {\n        var normalizedInput = {},\n            normalizedProp,\n            prop;\n\n        for (prop in inputObject) {\n            if (hasOwnProp(inputObject, prop)) {\n                normalizedProp = normalizeUnits(prop);\n                if (normalizedProp) {\n                    normalizedInput[normalizedProp] = inputObject[prop];\n                }\n            }\n        }\n\n        return normalizedInput;\n    }\n\n    var priorities = {\n        date: 9,\n        day: 11,\n        weekday: 11,\n        isoWeekday: 11,\n        dayOfYear: 4,\n        hour: 13,\n        millisecond: 16,\n        minute: 14,\n        month: 8,\n        quarter: 7,\n        second: 15,\n        weekYear: 1,\n        isoWeekYear: 1,\n        week: 5,\n        isoWeek: 5,\n        year: 1,\n    };\n\n    function getPrioritizedUnits(unitsObj) {\n        var units = [],\n            u;\n        for (u in unitsObj) {\n            if (hasOwnProp(unitsObj, u)) {\n                units.push({ unit: u, priority: priorities[u] });\n            }\n        }\n        units.sort(function (a, b) {\n            return a.priority - b.priority;\n        });\n        return units;\n    }\n\n    var match1 = /\\d/, //       0 - 9\n        match2 = /\\d\\d/, //      00 - 99\n        match3 = /\\d{3}/, //     000 - 999\n        match4 = /\\d{4}/, //    0000 - 9999\n        match6 = /[+-]?\\d{6}/, // -999999 - 999999\n        match1to2 = /\\d\\d?/, //       0 - 99\n        match3to4 = /\\d\\d\\d\\d?/, //     999 - 9999\n        match5to6 = /\\d\\d\\d\\d\\d\\d?/, //   99999 - 999999\n        match1to3 = /\\d{1,3}/, //       0 - 999\n        match1to4 = /\\d{1,4}/, //       0 - 9999\n        match1to6 = /[+-]?\\d{1,6}/, // -999999 - 999999\n        matchUnsigned = /\\d+/, //       0 - inf\n        matchSigned = /[+-]?\\d+/, //    -inf - inf\n        matchOffset = /Z|[+-]\\d\\d:?\\d\\d/gi, // +00:00 -00:00 +0000 -0000 or Z\n        matchShortOffset = /Z|[+-]\\d\\d(?::?\\d\\d)?/gi, // +00 -00 +00:00 -00:00 +0000 -0000 or Z\n        matchTimestamp = /[+-]?\\d+(\\.\\d{1,3})?/, // 123456789 123456789.123\n        // any word (or two) characters or numbers including two/three word month in arabic.\n        // includes scottish gaelic two word and hyphenated months\n        matchWord =\n            /[0-9]{0,256}['a-z\\u00A0-\\u05FF\\u0700-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFF07\\uFF10-\\uFFEF]{1,256}|[\\u0600-\\u06FF\\/]{1,256}(\\s*?[\\u0600-\\u06FF]{1,256}){1,2}/i,\n        match1to2NoLeadingZero = /^[1-9]\\d?/, //         1-99\n        match1to2HasZero = /^([1-9]\\d|\\d)/, //           0-99\n        regexes;\n\n    regexes = {};\n\n    function addRegexToken(token, regex, strictRegex) {\n        regexes[token] = isFunction(regex)\n            ? regex\n            : function (isStrict, localeData) {\n                  return isStrict && strictRegex ? strictRegex : regex;\n              };\n    }\n\n    function getParseRegexForToken(token, config) {\n        if (!hasOwnProp(regexes, token)) {\n            return new RegExp(unescapeFormat(token));\n        }\n\n        return regexes[token](config._strict, config._locale);\n    }\n\n    // Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript\n    function unescapeFormat(s) {\n        return regexEscape(\n            s\n                .replace('\\\\', '')\n                .replace(\n                    /\\\\(\\[)|\\\\(\\])|\\[([^\\]\\[]*)\\]|\\\\(.)/g,\n                    function (matched, p1, p2, p3, p4) {\n                        return p1 || p2 || p3 || p4;\n                    }\n                )\n        );\n    }\n\n    function regexEscape(s) {\n        return s.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n    }\n\n    function absFloor(number) {\n        if (number < 0) {\n            // -0 -> 0\n            return Math.ceil(number) || 0;\n        } else {\n            return Math.floor(number);\n        }\n    }\n\n    function toInt(argumentForCoercion) {\n        var coercedNumber = +argumentForCoercion,\n            value = 0;\n\n        if (coercedNumber !== 0 && isFinite(coercedNumber)) {\n            value = absFloor(coercedNumber);\n        }\n\n        return value;\n    }\n\n    var tokens = {};\n\n    function addParseToken(token, callback) {\n        var i,\n            func = callback,\n            tokenLen;\n        if (typeof token === 'string') {\n            token = [token];\n        }\n        if (isNumber(callback)) {\n            func = function (input, array) {\n                array[callback] = toInt(input);\n            };\n        }\n        tokenLen = token.length;\n        for (i = 0; i < tokenLen; i++) {\n            tokens[token[i]] = func;\n        }\n    }\n\n    function addWeekParseToken(token, callback) {\n        addParseToken(token, function (input, array, config, token) {\n            config._w = config._w || {};\n            callback(input, config._w, config, token);\n        });\n    }\n\n    function addTimeToArrayFromToken(token, input, config) {\n        if (input != null && hasOwnProp(tokens, token)) {\n            tokens[token](input, config._a, config, token);\n        }\n    }\n\n    function isLeapYear(year) {\n        return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;\n    }\n\n    var YEAR = 0,\n        MONTH = 1,\n        DATE = 2,\n        HOUR = 3,\n        MINUTE = 4,\n        SECOND = 5,\n        MILLISECOND = 6,\n        WEEK = 7,\n        WEEKDAY = 8;\n\n    // FORMATTING\n\n    addFormatToken('Y', 0, 0, function () {\n        var y = this.year();\n        return y <= 9999 ? zeroFill(y, 4) : '+' + y;\n    });\n\n    addFormatToken(0, ['YY', 2], 0, function () {\n        return this.year() % 100;\n    });\n\n    addFormatToken(0, ['YYYY', 4], 0, 'year');\n    addFormatToken(0, ['YYYYY', 5], 0, 'year');\n    addFormatToken(0, ['YYYYYY', 6, true], 0, 'year');\n\n    // PARSING\n\n    addRegexToken('Y', matchSigned);\n    addRegexToken('YY', match1to2, match2);\n    addRegexToken('YYYY', match1to4, match4);\n    addRegexToken('YYYYY', match1to6, match6);\n    addRegexToken('YYYYYY', match1to6, match6);\n\n    addParseToken(['YYYYY', 'YYYYYY'], YEAR);\n    addParseToken('YYYY', function (input, array) {\n        array[YEAR] =\n            input.length === 2 ? hooks.parseTwoDigitYear(input) : toInt(input);\n    });\n    addParseToken('YY', function (input, array) {\n        array[YEAR] = hooks.parseTwoDigitYear(input);\n    });\n    addParseToken('Y', function (input, array) {\n        array[YEAR] = parseInt(input, 10);\n    });\n\n    // HELPERS\n\n    function daysInYear(year) {\n        return isLeapYear(year) ? 366 : 365;\n    }\n\n    // HOOKS\n\n    hooks.parseTwoDigitYear = function (input) {\n        return toInt(input) + (toInt(input) > 68 ? 1900 : 2000);\n    };\n\n    // MOMENTS\n\n    var getSetYear = makeGetSet('FullYear', true);\n\n    function getIsLeapYear() {\n        return isLeapYear(this.year());\n    }\n\n    function makeGetSet(unit, keepTime) {\n        return function (value) {\n            if (value != null) {\n                set$1(this, unit, value);\n                hooks.updateOffset(this, keepTime);\n                return this;\n            } else {\n                return get(this, unit);\n            }\n        };\n    }\n\n    function get(mom, unit) {\n        if (!mom.isValid()) {\n            return NaN;\n        }\n\n        var d = mom._d,\n            isUTC = mom._isUTC;\n\n        switch (unit) {\n            case 'Milliseconds':\n                return isUTC ? d.getUTCMilliseconds() : d.getMilliseconds();\n            case 'Seconds':\n                return isUTC ? d.getUTCSeconds() : d.getSeconds();\n            case 'Minutes':\n                return isUTC ? d.getUTCMinutes() : d.getMinutes();\n            case 'Hours':\n                return isUTC ? d.getUTCHours() : d.getHours();\n            case 'Date':\n                return isUTC ? d.getUTCDate() : d.getDate();\n            case 'Day':\n                return isUTC ? d.getUTCDay() : d.getDay();\n            case 'Month':\n                return isUTC ? d.getUTCMonth() : d.getMonth();\n            case 'FullYear':\n                return isUTC ? d.getUTCFullYear() : d.getFullYear();\n            default:\n                return NaN; // Just in case\n        }\n    }\n\n    function set$1(mom, unit, value) {\n        var d, isUTC, year, month, date;\n\n        if (!mom.isValid() || isNaN(value)) {\n            return;\n        }\n\n        d = mom._d;\n        isUTC = mom._isUTC;\n\n        switch (unit) {\n            case 'Milliseconds':\n                return void (isUTC\n                    ? d.setUTCMilliseconds(value)\n                    : d.setMilliseconds(value));\n            case 'Seconds':\n                return void (isUTC ? d.setUTCSeconds(value) : d.setSeconds(value));\n            case 'Minutes':\n                return void (isUTC ? d.setUTCMinutes(value) : d.setMinutes(value));\n            case 'Hours':\n                return void (isUTC ? d.setUTCHours(value) : d.setHours(value));\n            case 'Date':\n                return void (isUTC ? d.setUTCDate(value) : d.setDate(value));\n            // case 'Day': // Not real\n            //    return void (isUTC ? d.setUTCDay(value) : d.setDay(value));\n            // case 'Month': // Not used because we need to pass two variables\n            //     return void (isUTC ? d.setUTCMonth(value) : d.setMonth(value));\n            case 'FullYear':\n                break; // See below ...\n            default:\n                return; // Just in case\n        }\n\n        year = value;\n        month = mom.month();\n        date = mom.date();\n        date = date === 29 && month === 1 && !isLeapYear(year) ? 28 : date;\n        void (isUTC\n            ? d.setUTCFullYear(year, month, date)\n            : d.setFullYear(year, month, date));\n    }\n\n    // MOMENTS\n\n    function stringGet(units) {\n        units = normalizeUnits(units);\n        if (isFunction(this[units])) {\n            return this[units]();\n        }\n        return this;\n    }\n\n    function stringSet(units, value) {\n        if (typeof units === 'object') {\n            units = normalizeObjectUnits(units);\n            var prioritized = getPrioritizedUnits(units),\n                i,\n                prioritizedLen = prioritized.length;\n            for (i = 0; i < prioritizedLen; i++) {\n                this[prioritized[i].unit](units[prioritized[i].unit]);\n            }\n        } else {\n            units = normalizeUnits(units);\n            if (isFunction(this[units])) {\n                return this[units](value);\n            }\n        }\n        return this;\n    }\n\n    function mod(n, x) {\n        return ((n % x) + x) % x;\n    }\n\n    var indexOf;\n\n    if (Array.prototype.indexOf) {\n        indexOf = Array.prototype.indexOf;\n    } else {\n        indexOf = function (o) {\n            // I know\n            var i;\n            for (i = 0; i < this.length; ++i) {\n                if (this[i] === o) {\n                    return i;\n                }\n            }\n            return -1;\n        };\n    }\n\n    function daysInMonth(year, month) {\n        if (isNaN(year) || isNaN(month)) {\n            return NaN;\n        }\n        var modMonth = mod(month, 12);\n        year += (month - modMonth) / 12;\n        return modMonth === 1\n            ? isLeapYear(year)\n                ? 29\n                : 28\n            : 31 - ((modMonth % 7) % 2);\n    }\n\n    // FORMATTING\n\n    addFormatToken('M', ['MM', 2], 'Mo', function () {\n        return this.month() + 1;\n    });\n\n    addFormatToken('MMM', 0, 0, function (format) {\n        return this.localeData().monthsShort(this, format);\n    });\n\n    addFormatToken('MMMM', 0, 0, function (format) {\n        return this.localeData().months(this, format);\n    });\n\n    // PARSING\n\n    addRegexToken('M', match1to2, match1to2NoLeadingZero);\n    addRegexToken('MM', match1to2, match2);\n    addRegexToken('MMM', function (isStrict, locale) {\n        return locale.monthsShortRegex(isStrict);\n    });\n    addRegexToken('MMMM', function (isStrict, locale) {\n        return locale.monthsRegex(isStrict);\n    });\n\n    addParseToken(['M', 'MM'], function (input, array) {\n        array[MONTH] = toInt(input) - 1;\n    });\n\n    addParseToken(['MMM', 'MMMM'], function (input, array, config, token) {\n        var month = config._locale.monthsParse(input, token, config._strict);\n        // if we didn't find a month name, mark the date as invalid.\n        if (month != null) {\n            array[MONTH] = month;\n        } else {\n            getParsingFlags(config).invalidMonth = input;\n        }\n    });\n\n    // LOCALES\n\n    var defaultLocaleMonths =\n            'January_February_March_April_May_June_July_August_September_October_November_December'.split(\n                '_'\n            ),\n        defaultLocaleMonthsShort =\n            'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n        MONTHS_IN_FORMAT = /D[oD]?(\\[[^\\[\\]]*\\]|\\s)+MMMM?/,\n        defaultMonthsShortRegex = matchWord,\n        defaultMonthsRegex = matchWord;\n\n    function localeMonths(m, format) {\n        if (!m) {\n            return isArray(this._months)\n                ? this._months\n                : this._months['standalone'];\n        }\n        return isArray(this._months)\n            ? this._months[m.month()]\n            : this._months[\n                  (this._months.isFormat || MONTHS_IN_FORMAT).test(format)\n                      ? 'format'\n                      : 'standalone'\n              ][m.month()];\n    }\n\n    function localeMonthsShort(m, format) {\n        if (!m) {\n            return isArray(this._monthsShort)\n                ? this._monthsShort\n                : this._monthsShort['standalone'];\n        }\n        return isArray(this._monthsShort)\n            ? this._monthsShort[m.month()]\n            : this._monthsShort[\n                  MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone'\n              ][m.month()];\n    }\n\n    function handleStrictParse(monthName, format, strict) {\n        var i,\n            ii,\n            mom,\n            llc = monthName.toLocaleLowerCase();\n        if (!this._monthsParse) {\n            // this is not used\n            this._monthsParse = [];\n            this._longMonthsParse = [];\n            this._shortMonthsParse = [];\n            for (i = 0; i < 12; ++i) {\n                mom = createUTC([2000, i]);\n                this._shortMonthsParse[i] = this.monthsShort(\n                    mom,\n                    ''\n                ).toLocaleLowerCase();\n                this._longMonthsParse[i] = this.months(mom, '').toLocaleLowerCase();\n            }\n        }\n\n        if (strict) {\n            if (format === 'MMM') {\n                ii = indexOf.call(this._shortMonthsParse, llc);\n                return ii !== -1 ? ii : null;\n            } else {\n                ii = indexOf.call(this._longMonthsParse, llc);\n                return ii !== -1 ? ii : null;\n            }\n        } else {\n            if (format === 'MMM') {\n                ii = indexOf.call(this._shortMonthsParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._longMonthsParse, llc);\n                return ii !== -1 ? ii : null;\n            } else {\n                ii = indexOf.call(this._longMonthsParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._shortMonthsParse, llc);\n                return ii !== -1 ? ii : null;\n            }\n        }\n    }\n\n    function localeMonthsParse(monthName, format, strict) {\n        var i, mom, regex;\n\n        if (this._monthsParseExact) {\n            return handleStrictParse.call(this, monthName, format, strict);\n        }\n\n        if (!this._monthsParse) {\n            this._monthsParse = [];\n            this._longMonthsParse = [];\n            this._shortMonthsParse = [];\n        }\n\n        // TODO: add sorting\n        // Sorting makes sure if one month (or abbr) is a prefix of another\n        // see sorting in computeMonthsParse\n        for (i = 0; i < 12; i++) {\n            // make the regex if we don't have it already\n            mom = createUTC([2000, i]);\n            if (strict && !this._longMonthsParse[i]) {\n                this._longMonthsParse[i] = new RegExp(\n                    '^' + this.months(mom, '').replace('.', '') + '$',\n                    'i'\n                );\n                this._shortMonthsParse[i] = new RegExp(\n                    '^' + this.monthsShort(mom, '').replace('.', '') + '$',\n                    'i'\n                );\n            }\n            if (!strict && !this._monthsParse[i]) {\n                regex =\n                    '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, '');\n                this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i');\n            }\n            // test the regex\n            if (\n                strict &&\n                format === 'MMMM' &&\n                this._longMonthsParse[i].test(monthName)\n            ) {\n                return i;\n            } else if (\n                strict &&\n                format === 'MMM' &&\n                this._shortMonthsParse[i].test(monthName)\n            ) {\n                return i;\n            } else if (!strict && this._monthsParse[i].test(monthName)) {\n                return i;\n            }\n        }\n    }\n\n    // MOMENTS\n\n    function setMonth(mom, value) {\n        if (!mom.isValid()) {\n            // No op\n            return mom;\n        }\n\n        if (typeof value === 'string') {\n            if (/^\\d+$/.test(value)) {\n                value = toInt(value);\n            } else {\n                value = mom.localeData().monthsParse(value);\n                // TODO: Another silent failure?\n                if (!isNumber(value)) {\n                    return mom;\n                }\n            }\n        }\n\n        var month = value,\n            date = mom.date();\n\n        date = date < 29 ? date : Math.min(date, daysInMonth(mom.year(), month));\n        void (mom._isUTC\n            ? mom._d.setUTCMonth(month, date)\n            : mom._d.setMonth(month, date));\n        return mom;\n    }\n\n    function getSetMonth(value) {\n        if (value != null) {\n            setMonth(this, value);\n            hooks.updateOffset(this, true);\n            return this;\n        } else {\n            return get(this, 'Month');\n        }\n    }\n\n    function getDaysInMonth() {\n        return daysInMonth(this.year(), this.month());\n    }\n\n    function monthsShortRegex(isStrict) {\n        if (this._monthsParseExact) {\n            if (!hasOwnProp(this, '_monthsRegex')) {\n                computeMonthsParse.call(this);\n            }\n            if (isStrict) {\n                return this._monthsShortStrictRegex;\n            } else {\n                return this._monthsShortRegex;\n            }\n        } else {\n            if (!hasOwnProp(this, '_monthsShortRegex')) {\n                this._monthsShortRegex = defaultMonthsShortRegex;\n            }\n            return this._monthsShortStrictRegex && isStrict\n                ? this._monthsShortStrictRegex\n                : this._monthsShortRegex;\n        }\n    }\n\n    function monthsRegex(isStrict) {\n        if (this._monthsParseExact) {\n            if (!hasOwnProp(this, '_monthsRegex')) {\n                computeMonthsParse.call(this);\n            }\n            if (isStrict) {\n                return this._monthsStrictRegex;\n            } else {\n                return this._monthsRegex;\n            }\n        } else {\n            if (!hasOwnProp(this, '_monthsRegex')) {\n                this._monthsRegex = defaultMonthsRegex;\n            }\n            return this._monthsStrictRegex && isStrict\n                ? this._monthsStrictRegex\n                : this._monthsRegex;\n        }\n    }\n\n    function computeMonthsParse() {\n        function cmpLenRev(a, b) {\n            return b.length - a.length;\n        }\n\n        var shortPieces = [],\n            longPieces = [],\n            mixedPieces = [],\n            i,\n            mom,\n            shortP,\n            longP;\n        for (i = 0; i < 12; i++) {\n            // make the regex if we don't have it already\n            mom = createUTC([2000, i]);\n            shortP = regexEscape(this.monthsShort(mom, ''));\n            longP = regexEscape(this.months(mom, ''));\n            shortPieces.push(shortP);\n            longPieces.push(longP);\n            mixedPieces.push(longP);\n            mixedPieces.push(shortP);\n        }\n        // Sorting makes sure if one month (or abbr) is a prefix of another it\n        // will match the longer piece.\n        shortPieces.sort(cmpLenRev);\n        longPieces.sort(cmpLenRev);\n        mixedPieces.sort(cmpLenRev);\n\n        this._monthsRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n        this._monthsShortRegex = this._monthsRegex;\n        this._monthsStrictRegex = new RegExp(\n            '^(' + longPieces.join('|') + ')',\n            'i'\n        );\n        this._monthsShortStrictRegex = new RegExp(\n            '^(' + shortPieces.join('|') + ')',\n            'i'\n        );\n    }\n\n    function createDate(y, m, d, h, M, s, ms) {\n        // can't just apply() to create a date:\n        // https://stackoverflow.com/q/181348\n        var date;\n        // the date constructor remaps years 0-99 to 1900-1999\n        if (y < 100 && y >= 0) {\n            // preserve leap years using a full 400 year cycle, then reset\n            date = new Date(y + 400, m, d, h, M, s, ms);\n            if (isFinite(date.getFullYear())) {\n                date.setFullYear(y);\n            }\n        } else {\n            date = new Date(y, m, d, h, M, s, ms);\n        }\n\n        return date;\n    }\n\n    function createUTCDate(y) {\n        var date, args;\n        // the Date.UTC function remaps years 0-99 to 1900-1999\n        if (y < 100 && y >= 0) {\n            args = Array.prototype.slice.call(arguments);\n            // preserve leap years using a full 400 year cycle, then reset\n            args[0] = y + 400;\n            date = new Date(Date.UTC.apply(null, args));\n            if (isFinite(date.getUTCFullYear())) {\n                date.setUTCFullYear(y);\n            }\n        } else {\n            date = new Date(Date.UTC.apply(null, arguments));\n        }\n\n        return date;\n    }\n\n    // start-of-first-week - start-of-year\n    function firstWeekOffset(year, dow, doy) {\n        var // first-week day -- which january is always in the first week (4 for iso, 1 for other)\n            fwd = 7 + dow - doy,\n            // first-week day local weekday -- which local weekday is fwd\n            fwdlw = (7 + createUTCDate(year, 0, fwd).getUTCDay() - dow) % 7;\n\n        return -fwdlw + fwd - 1;\n    }\n\n    // https://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday\n    function dayOfYearFromWeeks(year, week, weekday, dow, doy) {\n        var localWeekday = (7 + weekday - dow) % 7,\n            weekOffset = firstWeekOffset(year, dow, doy),\n            dayOfYear = 1 + 7 * (week - 1) + localWeekday + weekOffset,\n            resYear,\n            resDayOfYear;\n\n        if (dayOfYear <= 0) {\n            resYear = year - 1;\n            resDayOfYear = daysInYear(resYear) + dayOfYear;\n        } else if (dayOfYear > daysInYear(year)) {\n            resYear = year + 1;\n            resDayOfYear = dayOfYear - daysInYear(year);\n        } else {\n            resYear = year;\n            resDayOfYear = dayOfYear;\n        }\n\n        return {\n            year: resYear,\n            dayOfYear: resDayOfYear,\n        };\n    }\n\n    function weekOfYear(mom, dow, doy) {\n        var weekOffset = firstWeekOffset(mom.year(), dow, doy),\n            week = Math.floor((mom.dayOfYear() - weekOffset - 1) / 7) + 1,\n            resWeek,\n            resYear;\n\n        if (week < 1) {\n            resYear = mom.year() - 1;\n            resWeek = week + weeksInYear(resYear, dow, doy);\n        } else if (week > weeksInYear(mom.year(), dow, doy)) {\n            resWeek = week - weeksInYear(mom.year(), dow, doy);\n            resYear = mom.year() + 1;\n        } else {\n            resYear = mom.year();\n            resWeek = week;\n        }\n\n        return {\n            week: resWeek,\n            year: resYear,\n        };\n    }\n\n    function weeksInYear(year, dow, doy) {\n        var weekOffset = firstWeekOffset(year, dow, doy),\n            weekOffsetNext = firstWeekOffset(year + 1, dow, doy);\n        return (daysInYear(year) - weekOffset + weekOffsetNext) / 7;\n    }\n\n    // FORMATTING\n\n    addFormatToken('w', ['ww', 2], 'wo', 'week');\n    addFormatToken('W', ['WW', 2], 'Wo', 'isoWeek');\n\n    // PARSING\n\n    addRegexToken('w', match1to2, match1to2NoLeadingZero);\n    addRegexToken('ww', match1to2, match2);\n    addRegexToken('W', match1to2, match1to2NoLeadingZero);\n    addRegexToken('WW', match1to2, match2);\n\n    addWeekParseToken(\n        ['w', 'ww', 'W', 'WW'],\n        function (input, week, config, token) {\n            week[token.substr(0, 1)] = toInt(input);\n        }\n    );\n\n    // HELPERS\n\n    // LOCALES\n\n    function localeWeek(mom) {\n        return weekOfYear(mom, this._week.dow, this._week.doy).week;\n    }\n\n    var defaultLocaleWeek = {\n        dow: 0, // Sunday is the first day of the week.\n        doy: 6, // The week that contains Jan 6th is the first week of the year.\n    };\n\n    function localeFirstDayOfWeek() {\n        return this._week.dow;\n    }\n\n    function localeFirstDayOfYear() {\n        return this._week.doy;\n    }\n\n    // MOMENTS\n\n    function getSetWeek(input) {\n        var week = this.localeData().week(this);\n        return input == null ? week : this.add((input - week) * 7, 'd');\n    }\n\n    function getSetISOWeek(input) {\n        var week = weekOfYear(this, 1, 4).week;\n        return input == null ? week : this.add((input - week) * 7, 'd');\n    }\n\n    // FORMATTING\n\n    addFormatToken('d', 0, 'do', 'day');\n\n    addFormatToken('dd', 0, 0, function (format) {\n        return this.localeData().weekdaysMin(this, format);\n    });\n\n    addFormatToken('ddd', 0, 0, function (format) {\n        return this.localeData().weekdaysShort(this, format);\n    });\n\n    addFormatToken('dddd', 0, 0, function (format) {\n        return this.localeData().weekdays(this, format);\n    });\n\n    addFormatToken('e', 0, 0, 'weekday');\n    addFormatToken('E', 0, 0, 'isoWeekday');\n\n    // PARSING\n\n    addRegexToken('d', match1to2);\n    addRegexToken('e', match1to2);\n    addRegexToken('E', match1to2);\n    addRegexToken('dd', function (isStrict, locale) {\n        return locale.weekdaysMinRegex(isStrict);\n    });\n    addRegexToken('ddd', function (isStrict, locale) {\n        return locale.weekdaysShortRegex(isStrict);\n    });\n    addRegexToken('dddd', function (isStrict, locale) {\n        return locale.weekdaysRegex(isStrict);\n    });\n\n    addWeekParseToken(['dd', 'ddd', 'dddd'], function (input, week, config, token) {\n        var weekday = config._locale.weekdaysParse(input, token, config._strict);\n        // if we didn't get a weekday name, mark the date as invalid\n        if (weekday != null) {\n            week.d = weekday;\n        } else {\n            getParsingFlags(config).invalidWeekday = input;\n        }\n    });\n\n    addWeekParseToken(['d', 'e', 'E'], function (input, week, config, token) {\n        week[token] = toInt(input);\n    });\n\n    // HELPERS\n\n    function parseWeekday(input, locale) {\n        if (typeof input !== 'string') {\n            return input;\n        }\n\n        if (!isNaN(input)) {\n            return parseInt(input, 10);\n        }\n\n        input = locale.weekdaysParse(input);\n        if (typeof input === 'number') {\n            return input;\n        }\n\n        return null;\n    }\n\n    function parseIsoWeekday(input, locale) {\n        if (typeof input === 'string') {\n            return locale.weekdaysParse(input) % 7 || 7;\n        }\n        return isNaN(input) ? null : input;\n    }\n\n    // LOCALES\n    function shiftWeekdays(ws, n) {\n        return ws.slice(n, 7).concat(ws.slice(0, n));\n    }\n\n    var defaultLocaleWeekdays =\n            'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n        defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n        defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n        defaultWeekdaysRegex = matchWord,\n        defaultWeekdaysShortRegex = matchWord,\n        defaultWeekdaysMinRegex = matchWord;\n\n    function localeWeekdays(m, format) {\n        var weekdays = isArray(this._weekdays)\n            ? this._weekdays\n            : this._weekdays[\n                  m && m !== true && this._weekdays.isFormat.test(format)\n                      ? 'format'\n                      : 'standalone'\n              ];\n        return m === true\n            ? shiftWeekdays(weekdays, this._week.dow)\n            : m\n              ? weekdays[m.day()]\n              : weekdays;\n    }\n\n    function localeWeekdaysShort(m) {\n        return m === true\n            ? shiftWeekdays(this._weekdaysShort, this._week.dow)\n            : m\n              ? this._weekdaysShort[m.day()]\n              : this._weekdaysShort;\n    }\n\n    function localeWeekdaysMin(m) {\n        return m === true\n            ? shiftWeekdays(this._weekdaysMin, this._week.dow)\n            : m\n              ? this._weekdaysMin[m.day()]\n              : this._weekdaysMin;\n    }\n\n    function handleStrictParse$1(weekdayName, format, strict) {\n        var i,\n            ii,\n            mom,\n            llc = weekdayName.toLocaleLowerCase();\n        if (!this._weekdaysParse) {\n            this._weekdaysParse = [];\n            this._shortWeekdaysParse = [];\n            this._minWeekdaysParse = [];\n\n            for (i = 0; i < 7; ++i) {\n                mom = createUTC([2000, 1]).day(i);\n                this._minWeekdaysParse[i] = this.weekdaysMin(\n                    mom,\n                    ''\n                ).toLocaleLowerCase();\n                this._shortWeekdaysParse[i] = this.weekdaysShort(\n                    mom,\n                    ''\n                ).toLocaleLowerCase();\n                this._weekdaysParse[i] = this.weekdays(mom, '').toLocaleLowerCase();\n            }\n        }\n\n        if (strict) {\n            if (format === 'dddd') {\n                ii = indexOf.call(this._weekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            } else if (format === 'ddd') {\n                ii = indexOf.call(this._shortWeekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            } else {\n                ii = indexOf.call(this._minWeekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            }\n        } else {\n            if (format === 'dddd') {\n                ii = indexOf.call(this._weekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._shortWeekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._minWeekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            } else if (format === 'ddd') {\n                ii = indexOf.call(this._shortWeekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._weekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._minWeekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            } else {\n                ii = indexOf.call(this._minWeekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._weekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._shortWeekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            }\n        }\n    }\n\n    function localeWeekdaysParse(weekdayName, format, strict) {\n        var i, mom, regex;\n\n        if (this._weekdaysParseExact) {\n            return handleStrictParse$1.call(this, weekdayName, format, strict);\n        }\n\n        if (!this._weekdaysParse) {\n            this._weekdaysParse = [];\n            this._minWeekdaysParse = [];\n            this._shortWeekdaysParse = [];\n            this._fullWeekdaysParse = [];\n        }\n\n        for (i = 0; i < 7; i++) {\n            // make the regex if we don't have it already\n\n            mom = createUTC([2000, 1]).day(i);\n            if (strict && !this._fullWeekdaysParse[i]) {\n                this._fullWeekdaysParse[i] = new RegExp(\n                    '^' + this.weekdays(mom, '').replace('.', '\\\\.?') + '$',\n                    'i'\n                );\n                this._shortWeekdaysParse[i] = new RegExp(\n                    '^' + this.weekdaysShort(mom, '').replace('.', '\\\\.?') + '$',\n                    'i'\n                );\n                this._minWeekdaysParse[i] = new RegExp(\n                    '^' + this.weekdaysMin(mom, '').replace('.', '\\\\.?') + '$',\n                    'i'\n                );\n            }\n            if (!this._weekdaysParse[i]) {\n                regex =\n                    '^' +\n                    this.weekdays(mom, '') +\n                    '|^' +\n                    this.weekdaysShort(mom, '') +\n                    '|^' +\n                    this.weekdaysMin(mom, '');\n                this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i');\n            }\n            // test the regex\n            if (\n                strict &&\n                format === 'dddd' &&\n                this._fullWeekdaysParse[i].test(weekdayName)\n            ) {\n                return i;\n            } else if (\n                strict &&\n                format === 'ddd' &&\n                this._shortWeekdaysParse[i].test(weekdayName)\n            ) {\n                return i;\n            } else if (\n                strict &&\n                format === 'dd' &&\n                this._minWeekdaysParse[i].test(weekdayName)\n            ) {\n                return i;\n            } else if (!strict && this._weekdaysParse[i].test(weekdayName)) {\n                return i;\n            }\n        }\n    }\n\n    // MOMENTS\n\n    function getSetDayOfWeek(input) {\n        if (!this.isValid()) {\n            return input != null ? this : NaN;\n        }\n\n        var day = get(this, 'Day');\n        if (input != null) {\n            input = parseWeekday(input, this.localeData());\n            return this.add(input - day, 'd');\n        } else {\n            return day;\n        }\n    }\n\n    function getSetLocaleDayOfWeek(input) {\n        if (!this.isValid()) {\n            return input != null ? this : NaN;\n        }\n        var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7;\n        return input == null ? weekday : this.add(input - weekday, 'd');\n    }\n\n    function getSetISODayOfWeek(input) {\n        if (!this.isValid()) {\n            return input != null ? this : NaN;\n        }\n\n        // behaves the same as moment#day except\n        // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6)\n        // as a setter, sunday should belong to the previous week.\n\n        if (input != null) {\n            var weekday = parseIsoWeekday(input, this.localeData());\n            return this.day(this.day() % 7 ? weekday : weekday - 7);\n        } else {\n            return this.day() || 7;\n        }\n    }\n\n    function weekdaysRegex(isStrict) {\n        if (this._weekdaysParseExact) {\n            if (!hasOwnProp(this, '_weekdaysRegex')) {\n                computeWeekdaysParse.call(this);\n            }\n            if (isStrict) {\n                return this._weekdaysStrictRegex;\n            } else {\n                return this._weekdaysRegex;\n            }\n        } else {\n            if (!hasOwnProp(this, '_weekdaysRegex')) {\n                this._weekdaysRegex = defaultWeekdaysRegex;\n            }\n            return this._weekdaysStrictRegex && isStrict\n                ? this._weekdaysStrictRegex\n                : this._weekdaysRegex;\n        }\n    }\n\n    function weekdaysShortRegex(isStrict) {\n        if (this._weekdaysParseExact) {\n            if (!hasOwnProp(this, '_weekdaysRegex')) {\n                computeWeekdaysParse.call(this);\n            }\n            if (isStrict) {\n                return this._weekdaysShortStrictRegex;\n            } else {\n                return this._weekdaysShortRegex;\n            }\n        } else {\n            if (!hasOwnProp(this, '_weekdaysShortRegex')) {\n                this._weekdaysShortRegex = defaultWeekdaysShortRegex;\n            }\n            return this._weekdaysShortStrictRegex && isStrict\n                ? this._weekdaysShortStrictRegex\n                : this._weekdaysShortRegex;\n        }\n    }\n\n    function weekdaysMinRegex(isStrict) {\n        if (this._weekdaysParseExact) {\n            if (!hasOwnProp(this, '_weekdaysRegex')) {\n                computeWeekdaysParse.call(this);\n            }\n            if (isStrict) {\n                return this._weekdaysMinStrictRegex;\n            } else {\n                return this._weekdaysMinRegex;\n            }\n        } else {\n            if (!hasOwnProp(this, '_weekdaysMinRegex')) {\n                this._weekdaysMinRegex = defaultWeekdaysMinRegex;\n            }\n            return this._weekdaysMinStrictRegex && isStrict\n                ? this._weekdaysMinStrictRegex\n                : this._weekdaysMinRegex;\n        }\n    }\n\n    function computeWeekdaysParse() {\n        function cmpLenRev(a, b) {\n            return b.length - a.length;\n        }\n\n        var minPieces = [],\n            shortPieces = [],\n            longPieces = [],\n            mixedPieces = [],\n            i,\n            mom,\n            minp,\n            shortp,\n            longp;\n        for (i = 0; i < 7; i++) {\n            // make the regex if we don't have it already\n            mom = createUTC([2000, 1]).day(i);\n            minp = regexEscape(this.weekdaysMin(mom, ''));\n            shortp = regexEscape(this.weekdaysShort(mom, ''));\n            longp = regexEscape(this.weekdays(mom, ''));\n            minPieces.push(minp);\n            shortPieces.push(shortp);\n            longPieces.push(longp);\n            mixedPieces.push(minp);\n            mixedPieces.push(shortp);\n            mixedPieces.push(longp);\n        }\n        // Sorting makes sure if one weekday (or abbr) is a prefix of another it\n        // will match the longer piece.\n        minPieces.sort(cmpLenRev);\n        shortPieces.sort(cmpLenRev);\n        longPieces.sort(cmpLenRev);\n        mixedPieces.sort(cmpLenRev);\n\n        this._weekdaysRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n        this._weekdaysShortRegex = this._weekdaysRegex;\n        this._weekdaysMinRegex = this._weekdaysRegex;\n\n        this._weekdaysStrictRegex = new RegExp(\n            '^(' + longPieces.join('|') + ')',\n            'i'\n        );\n        this._weekdaysShortStrictRegex = new RegExp(\n            '^(' + shortPieces.join('|') + ')',\n            'i'\n        );\n        this._weekdaysMinStrictRegex = new RegExp(\n            '^(' + minPieces.join('|') + ')',\n            'i'\n        );\n    }\n\n    // FORMATTING\n\n    function hFormat() {\n        return this.hours() % 12 || 12;\n    }\n\n    function kFormat() {\n        return this.hours() || 24;\n    }\n\n    addFormatToken('H', ['HH', 2], 0, 'hour');\n    addFormatToken('h', ['hh', 2], 0, hFormat);\n    addFormatToken('k', ['kk', 2], 0, kFormat);\n\n    addFormatToken('hmm', 0, 0, function () {\n        return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2);\n    });\n\n    addFormatToken('hmmss', 0, 0, function () {\n        return (\n            '' +\n            hFormat.apply(this) +\n            zeroFill(this.minutes(), 2) +\n            zeroFill(this.seconds(), 2)\n        );\n    });\n\n    addFormatToken('Hmm', 0, 0, function () {\n        return '' + this.hours() + zeroFill(this.minutes(), 2);\n    });\n\n    addFormatToken('Hmmss', 0, 0, function () {\n        return (\n            '' +\n            this.hours() +\n            zeroFill(this.minutes(), 2) +\n            zeroFill(this.seconds(), 2)\n        );\n    });\n\n    function meridiem(token, lowercase) {\n        addFormatToken(token, 0, 0, function () {\n            return this.localeData().meridiem(\n                this.hours(),\n                this.minutes(),\n                lowercase\n            );\n        });\n    }\n\n    meridiem('a', true);\n    meridiem('A', false);\n\n    // PARSING\n\n    function matchMeridiem(isStrict, locale) {\n        return locale._meridiemParse;\n    }\n\n    addRegexToken('a', matchMeridiem);\n    addRegexToken('A', matchMeridiem);\n    addRegexToken('H', match1to2, match1to2HasZero);\n    addRegexToken('h', match1to2, match1to2NoLeadingZero);\n    addRegexToken('k', match1to2, match1to2NoLeadingZero);\n    addRegexToken('HH', match1to2, match2);\n    addRegexToken('hh', match1to2, match2);\n    addRegexToken('kk', match1to2, match2);\n\n    addRegexToken('hmm', match3to4);\n    addRegexToken('hmmss', match5to6);\n    addRegexToken('Hmm', match3to4);\n    addRegexToken('Hmmss', match5to6);\n\n    addParseToken(['H', 'HH'], HOUR);\n    addParseToken(['k', 'kk'], function (input, array, config) {\n        var kInput = toInt(input);\n        array[HOUR] = kInput === 24 ? 0 : kInput;\n    });\n    addParseToken(['a', 'A'], function (input, array, config) {\n        config._isPm = config._locale.isPM(input);\n        config._meridiem = input;\n    });\n    addParseToken(['h', 'hh'], function (input, array, config) {\n        array[HOUR] = toInt(input);\n        getParsingFlags(config).bigHour = true;\n    });\n    addParseToken('hmm', function (input, array, config) {\n        var pos = input.length - 2;\n        array[HOUR] = toInt(input.substr(0, pos));\n        array[MINUTE] = toInt(input.substr(pos));\n        getParsingFlags(config).bigHour = true;\n    });\n    addParseToken('hmmss', function (input, array, config) {\n        var pos1 = input.length - 4,\n            pos2 = input.length - 2;\n        array[HOUR] = toInt(input.substr(0, pos1));\n        array[MINUTE] = toInt(input.substr(pos1, 2));\n        array[SECOND] = toInt(input.substr(pos2));\n        getParsingFlags(config).bigHour = true;\n    });\n    addParseToken('Hmm', function (input, array, config) {\n        var pos = input.length - 2;\n        array[HOUR] = toInt(input.substr(0, pos));\n        array[MINUTE] = toInt(input.substr(pos));\n    });\n    addParseToken('Hmmss', function (input, array, config) {\n        var pos1 = input.length - 4,\n            pos2 = input.length - 2;\n        array[HOUR] = toInt(input.substr(0, pos1));\n        array[MINUTE] = toInt(input.substr(pos1, 2));\n        array[SECOND] = toInt(input.substr(pos2));\n    });\n\n    // LOCALES\n\n    function localeIsPM(input) {\n        // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays\n        // Using charAt should be more compatible.\n        return (input + '').toLowerCase().charAt(0) === 'p';\n    }\n\n    var defaultLocaleMeridiemParse = /[ap]\\.?m?\\.?/i,\n        // Setting the hour should keep the time, because the user explicitly\n        // specified which hour they want. So trying to maintain the same hour (in\n        // a new timezone) makes sense. Adding/subtracting hours does not follow\n        // this rule.\n        getSetHour = makeGetSet('Hours', true);\n\n    function localeMeridiem(hours, minutes, isLower) {\n        if (hours > 11) {\n            return isLower ? 'pm' : 'PM';\n        } else {\n            return isLower ? 'am' : 'AM';\n        }\n    }\n\n    var baseConfig = {\n        calendar: defaultCalendar,\n        longDateFormat: defaultLongDateFormat,\n        invalidDate: defaultInvalidDate,\n        ordinal: defaultOrdinal,\n        dayOfMonthOrdinalParse: defaultDayOfMonthOrdinalParse,\n        relativeTime: defaultRelativeTime,\n\n        months: defaultLocaleMonths,\n        monthsShort: defaultLocaleMonthsShort,\n\n        week: defaultLocaleWeek,\n\n        weekdays: defaultLocaleWeekdays,\n        weekdaysMin: defaultLocaleWeekdaysMin,\n        weekdaysShort: defaultLocaleWeekdaysShort,\n\n        meridiemParse: defaultLocaleMeridiemParse,\n    };\n\n    // internal storage for locale config files\n    var locales = {},\n        localeFamilies = {},\n        globalLocale;\n\n    function commonPrefix(arr1, arr2) {\n        var i,\n            minl = Math.min(arr1.length, arr2.length);\n        for (i = 0; i < minl; i += 1) {\n            if (arr1[i] !== arr2[i]) {\n                return i;\n            }\n        }\n        return minl;\n    }\n\n    function normalizeLocale(key) {\n        return key ? key.toLowerCase().replace('_', '-') : key;\n    }\n\n    // pick the locale from the array\n    // try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each\n    // substring from most specific to least, but move to the next array item if it's a more specific variant than the current root\n    function chooseLocale(names) {\n        var i = 0,\n            j,\n            next,\n            locale,\n            split;\n\n        while (i < names.length) {\n            split = normalizeLocale(names[i]).split('-');\n            j = split.length;\n            next = normalizeLocale(names[i + 1]);\n            next = next ? next.split('-') : null;\n            while (j > 0) {\n                locale = loadLocale(split.slice(0, j).join('-'));\n                if (locale) {\n                    return locale;\n                }\n                if (\n                    next &&\n                    next.length >= j &&\n                    commonPrefix(split, next) >= j - 1\n                ) {\n                    //the next array item is better than a shallower substring of this one\n                    break;\n                }\n                j--;\n            }\n            i++;\n        }\n        return globalLocale;\n    }\n\n    function isLocaleNameSane(name) {\n        // Prevent names that look like filesystem paths, i.e contain '/' or '\\'\n        // Ensure name is available and function returns boolean\n        return !!(name && name.match('^[^/\\\\\\\\]*$'));\n    }\n\n    function loadLocale(name) {\n        var oldLocale = null,\n            aliasedRequire;\n        // TODO: Find a better way to register and load all the locales in Node\n        if (\n            locales[name] === undefined &&\n            typeof module !== 'undefined' &&\n            module &&\n            module.exports &&\n            isLocaleNameSane(name)\n        ) {\n            try {\n                oldLocale = globalLocale._abbr;\n                aliasedRequire = require;\n                aliasedRequire('./locale/' + name);\n                getSetGlobalLocale(oldLocale);\n            } catch (e) {\n                // mark as not found to avoid repeating expensive file require call causing high CPU\n                // when trying to find en-US, en_US, en-us for every format call\n                locales[name] = null; // null means not found\n            }\n        }\n        return locales[name];\n    }\n\n    // This function will load locale and then set the global locale.  If\n    // no arguments are passed in, it will simply return the current global\n    // locale key.\n    function getSetGlobalLocale(key, values) {\n        var data;\n        if (key) {\n            if (isUndefined(values)) {\n                data = getLocale(key);\n            } else {\n                data = defineLocale(key, values);\n            }\n\n            if (data) {\n                // moment.duration._locale = moment._locale = data;\n                globalLocale = data;\n            } else {\n                if (typeof console !== 'undefined' && console.warn) {\n                    //warn user if arguments are passed but the locale could not be set\n                    console.warn(\n                        'Locale ' + key + ' not found. Did you forget to load it?'\n                    );\n                }\n            }\n        }\n\n        return globalLocale._abbr;\n    }\n\n    function defineLocale(name, config) {\n        if (config !== null) {\n            var locale,\n                parentConfig = baseConfig;\n            config.abbr = name;\n            if (locales[name] != null) {\n                deprecateSimple(\n                    'defineLocaleOverride',\n                    'use moment.updateLocale(localeName, config) to change ' +\n                        'an existing locale. moment.defineLocale(localeName, ' +\n                        'config) should only be used for creating a new locale ' +\n                        'See http://momentjs.com/guides/#/warnings/define-locale/ for more info.'\n                );\n                parentConfig = locales[name]._config;\n            } else if (config.parentLocale != null) {\n                if (locales[config.parentLocale] != null) {\n                    parentConfig = locales[config.parentLocale]._config;\n                } else {\n                    locale = loadLocale(config.parentLocale);\n                    if (locale != null) {\n                        parentConfig = locale._config;\n                    } else {\n                        if (!localeFamilies[config.parentLocale]) {\n                            localeFamilies[config.parentLocale] = [];\n                        }\n                        localeFamilies[config.parentLocale].push({\n                            name: name,\n                            config: config,\n                        });\n                        return null;\n                    }\n                }\n            }\n            locales[name] = new Locale(mergeConfigs(parentConfig, config));\n\n            if (localeFamilies[name]) {\n                localeFamilies[name].forEach(function (x) {\n                    defineLocale(x.name, x.config);\n                });\n            }\n\n            // backwards compat for now: also set the locale\n            // make sure we set the locale AFTER all child locales have been\n            // created, so we won't end up with the child locale set.\n            getSetGlobalLocale(name);\n\n            return locales[name];\n        } else {\n            // useful for testing\n            delete locales[name];\n            return null;\n        }\n    }\n\n    function updateLocale(name, config) {\n        if (config != null) {\n            var locale,\n                tmpLocale,\n                parentConfig = baseConfig;\n\n            if (locales[name] != null && locales[name].parentLocale != null) {\n                // Update existing child locale in-place to avoid memory-leaks\n                locales[name].set(mergeConfigs(locales[name]._config, config));\n            } else {\n                // MERGE\n                tmpLocale = loadLocale(name);\n                if (tmpLocale != null) {\n                    parentConfig = tmpLocale._config;\n                }\n                config = mergeConfigs(parentConfig, config);\n                if (tmpLocale == null) {\n                    // updateLocale is called for creating a new locale\n                    // Set abbr so it will have a name (getters return\n                    // undefined otherwise).\n                    config.abbr = name;\n                }\n                locale = new Locale(config);\n                locale.parentLocale = locales[name];\n                locales[name] = locale;\n            }\n\n            // backwards compat for now: also set the locale\n            getSetGlobalLocale(name);\n        } else {\n            // pass null for config to unupdate, useful for tests\n            if (locales[name] != null) {\n                if (locales[name].parentLocale != null) {\n                    locales[name] = locales[name].parentLocale;\n                    if (name === getSetGlobalLocale()) {\n                        getSetGlobalLocale(name);\n                    }\n                } else if (locales[name] != null) {\n                    delete locales[name];\n                }\n            }\n        }\n        return locales[name];\n    }\n\n    // returns locale data\n    function getLocale(key) {\n        var locale;\n\n        if (key && key._locale && key._locale._abbr) {\n            key = key._locale._abbr;\n        }\n\n        if (!key) {\n            return globalLocale;\n        }\n\n        if (!isArray(key)) {\n            //short-circuit everything else\n            locale = loadLocale(key);\n            if (locale) {\n                return locale;\n            }\n            key = [key];\n        }\n\n        return chooseLocale(key);\n    }\n\n    function listLocales() {\n        return keys(locales);\n    }\n\n    function checkOverflow(m) {\n        var overflow,\n            a = m._a;\n\n        if (a && getParsingFlags(m).overflow === -2) {\n            overflow =\n                a[MONTH] < 0 || a[MONTH] > 11\n                    ? MONTH\n                    : a[DATE] < 1 || a[DATE] > daysInMonth(a[YEAR], a[MONTH])\n                      ? DATE\n                      : a[HOUR] < 0 ||\n                          a[HOUR] > 24 ||\n                          (a[HOUR] === 24 &&\n                              (a[MINUTE] !== 0 ||\n                                  a[SECOND] !== 0 ||\n                                  a[MILLISECOND] !== 0))\n                        ? HOUR\n                        : a[MINUTE] < 0 || a[MINUTE] > 59\n                          ? MINUTE\n                          : a[SECOND] < 0 || a[SECOND] > 59\n                            ? SECOND\n                            : a[MILLISECOND] < 0 || a[MILLISECOND] > 999\n                              ? MILLISECOND\n                              : -1;\n\n            if (\n                getParsingFlags(m)._overflowDayOfYear &&\n                (overflow < YEAR || overflow > DATE)\n            ) {\n                overflow = DATE;\n            }\n            if (getParsingFlags(m)._overflowWeeks && overflow === -1) {\n                overflow = WEEK;\n            }\n            if (getParsingFlags(m)._overflowWeekday && overflow === -1) {\n                overflow = WEEKDAY;\n            }\n\n            getParsingFlags(m).overflow = overflow;\n        }\n\n        return m;\n    }\n\n    // iso 8601 regex\n    // 0000-00-00 0000-W00 or 0000-W00-0 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000 or +00)\n    var extendedIsoRegex =\n            /^\\s*((?:[+-]\\d{6}|\\d{4})-(?:\\d\\d-\\d\\d|W\\d\\d-\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?::\\d\\d(?::\\d\\d(?:[.,]\\d+)?)?)?)([+-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/,\n        basicIsoRegex =\n            /^\\s*((?:[+-]\\d{6}|\\d{4})(?:\\d\\d\\d\\d|W\\d\\d\\d|W\\d\\d|\\d\\d\\d|\\d\\d|))(?:(T| )(\\d\\d(?:\\d\\d(?:\\d\\d(?:[.,]\\d+)?)?)?)([+-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/,\n        tzRegex = /Z|[+-]\\d\\d(?::?\\d\\d)?/,\n        isoDates = [\n            ['YYYYYY-MM-DD', /[+-]\\d{6}-\\d\\d-\\d\\d/],\n            ['YYYY-MM-DD', /\\d{4}-\\d\\d-\\d\\d/],\n            ['GGGG-[W]WW-E', /\\d{4}-W\\d\\d-\\d/],\n            ['GGGG-[W]WW', /\\d{4}-W\\d\\d/, false],\n            ['YYYY-DDD', /\\d{4}-\\d{3}/],\n            ['YYYY-MM', /\\d{4}-\\d\\d/, false],\n            ['YYYYYYMMDD', /[+-]\\d{10}/],\n            ['YYYYMMDD', /\\d{8}/],\n            ['GGGG[W]WWE', /\\d{4}W\\d{3}/],\n            ['GGGG[W]WW', /\\d{4}W\\d{2}/, false],\n            ['YYYYDDD', /\\d{7}/],\n            ['YYYYMM', /\\d{6}/, false],\n            ['YYYY', /\\d{4}/, false],\n        ],\n        // iso time formats and regexes\n        isoTimes = [\n            ['HH:mm:ss.SSSS', /\\d\\d:\\d\\d:\\d\\d\\.\\d+/],\n            ['HH:mm:ss,SSSS', /\\d\\d:\\d\\d:\\d\\d,\\d+/],\n            ['HH:mm:ss', /\\d\\d:\\d\\d:\\d\\d/],\n            ['HH:mm', /\\d\\d:\\d\\d/],\n            ['HHmmss.SSSS', /\\d\\d\\d\\d\\d\\d\\.\\d+/],\n            ['HHmmss,SSSS', /\\d\\d\\d\\d\\d\\d,\\d+/],\n            ['HHmmss', /\\d\\d\\d\\d\\d\\d/],\n            ['HHmm', /\\d\\d\\d\\d/],\n            ['HH', /\\d\\d/],\n        ],\n        aspNetJsonRegex = /^\\/?Date\\((-?\\d+)/i,\n        // RFC 2822 regex: For details see https://tools.ietf.org/html/rfc2822#section-3.3\n        rfc2822 =\n            /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\\s)?(\\d{1,2})\\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\\s(\\d{2,4})\\s(\\d\\d):(\\d\\d)(?::(\\d\\d))?\\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\\d{4}))$/,\n        obsOffsets = {\n            UT: 0,\n            GMT: 0,\n            EDT: -4 * 60,\n            EST: -5 * 60,\n            CDT: -5 * 60,\n            CST: -6 * 60,\n            MDT: -6 * 60,\n            MST: -7 * 60,\n            PDT: -7 * 60,\n            PST: -8 * 60,\n        };\n\n    // date from iso format\n    function configFromISO(config) {\n        var i,\n            l,\n            string = config._i,\n            match = extendedIsoRegex.exec(string) || basicIsoRegex.exec(string),\n            allowTime,\n            dateFormat,\n            timeFormat,\n            tzFormat,\n            isoDatesLen = isoDates.length,\n            isoTimesLen = isoTimes.length;\n\n        if (match) {\n            getParsingFlags(config).iso = true;\n            for (i = 0, l = isoDatesLen; i < l; i++) {\n                if (isoDates[i][1].exec(match[1])) {\n                    dateFormat = isoDates[i][0];\n                    allowTime = isoDates[i][2] !== false;\n                    break;\n                }\n            }\n            if (dateFormat == null) {\n                config._isValid = false;\n                return;\n            }\n            if (match[3]) {\n                for (i = 0, l = isoTimesLen; i < l; i++) {\n                    if (isoTimes[i][1].exec(match[3])) {\n                        // match[2] should be 'T' or space\n                        timeFormat = (match[2] || ' ') + isoTimes[i][0];\n                        break;\n                    }\n                }\n                if (timeFormat == null) {\n                    config._isValid = false;\n                    return;\n                }\n            }\n            if (!allowTime && timeFormat != null) {\n                config._isValid = false;\n                return;\n            }\n            if (match[4]) {\n                if (tzRegex.exec(match[4])) {\n                    tzFormat = 'Z';\n                } else {\n                    config._isValid = false;\n                    return;\n                }\n            }\n            config._f = dateFormat + (timeFormat || '') + (tzFormat || '');\n            configFromStringAndFormat(config);\n        } else {\n            config._isValid = false;\n        }\n    }\n\n    function extractFromRFC2822Strings(\n        yearStr,\n        monthStr,\n        dayStr,\n        hourStr,\n        minuteStr,\n        secondStr\n    ) {\n        var result = [\n            untruncateYear(yearStr),\n            defaultLocaleMonthsShort.indexOf(monthStr),\n            parseInt(dayStr, 10),\n            parseInt(hourStr, 10),\n            parseInt(minuteStr, 10),\n        ];\n\n        if (secondStr) {\n            result.push(parseInt(secondStr, 10));\n        }\n\n        return result;\n    }\n\n    function untruncateYear(yearStr) {\n        var year = parseInt(yearStr, 10);\n        if (year <= 49) {\n            return 2000 + year;\n        } else if (year <= 999) {\n            return 1900 + year;\n        }\n        return year;\n    }\n\n    function preprocessRFC2822(s) {\n        // Remove comments and folding whitespace and replace multiple-spaces with a single space\n        return s\n            .replace(/\\([^()]*\\)|[\\n\\t]/g, ' ')\n            .replace(/(\\s\\s+)/g, ' ')\n            .replace(/^\\s\\s*/, '')\n            .replace(/\\s\\s*$/, '');\n    }\n\n    function checkWeekday(weekdayStr, parsedInput, config) {\n        if (weekdayStr) {\n            // TODO: Replace the vanilla JS Date object with an independent day-of-week check.\n            var weekdayProvided = defaultLocaleWeekdaysShort.indexOf(weekdayStr),\n                weekdayActual = new Date(\n                    parsedInput[0],\n                    parsedInput[1],\n                    parsedInput[2]\n                ).getDay();\n            if (weekdayProvided !== weekdayActual) {\n                getParsingFlags(config).weekdayMismatch = true;\n                config._isValid = false;\n                return false;\n            }\n        }\n        return true;\n    }\n\n    function calculateOffset(obsOffset, militaryOffset, numOffset) {\n        if (obsOffset) {\n            return obsOffsets[obsOffset];\n        } else if (militaryOffset) {\n            // the only allowed military tz is Z\n            return 0;\n        } else {\n            var hm = parseInt(numOffset, 10),\n                m = hm % 100,\n                h = (hm - m) / 100;\n            return h * 60 + m;\n        }\n    }\n\n    // date and time from ref 2822 format\n    function configFromRFC2822(config) {\n        var match = rfc2822.exec(preprocessRFC2822(config._i)),\n            parsedArray;\n        if (match) {\n            parsedArray = extractFromRFC2822Strings(\n                match[4],\n                match[3],\n                match[2],\n                match[5],\n                match[6],\n                match[7]\n            );\n            if (!checkWeekday(match[1], parsedArray, config)) {\n                return;\n            }\n\n            config._a = parsedArray;\n            config._tzm = calculateOffset(match[8], match[9], match[10]);\n\n            config._d = createUTCDate.apply(null, config._a);\n            config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n\n            getParsingFlags(config).rfc2822 = true;\n        } else {\n            config._isValid = false;\n        }\n    }\n\n    // date from 1) ASP.NET, 2) ISO, 3) RFC 2822 formats, or 4) optional fallback if parsing isn't strict\n    function configFromString(config) {\n        var matched = aspNetJsonRegex.exec(config._i);\n        if (matched !== null) {\n            config._d = new Date(+matched[1]);\n            return;\n        }\n\n        configFromISO(config);\n        if (config._isValid === false) {\n            delete config._isValid;\n        } else {\n            return;\n        }\n\n        configFromRFC2822(config);\n        if (config._isValid === false) {\n            delete config._isValid;\n        } else {\n            return;\n        }\n\n        if (config._strict) {\n            config._isValid = false;\n        } else {\n            // Final attempt, use Input Fallback\n            hooks.createFromInputFallback(config);\n        }\n    }\n\n    hooks.createFromInputFallback = deprecate(\n        'value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), ' +\n            'which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are ' +\n            'discouraged. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.',\n        function (config) {\n            config._d = new Date(config._i + (config._useUTC ? ' UTC' : ''));\n        }\n    );\n\n    // Pick the first defined of two or three arguments.\n    function defaults(a, b, c) {\n        if (a != null) {\n            return a;\n        }\n        if (b != null) {\n            return b;\n        }\n        return c;\n    }\n\n    function currentDateArray(config) {\n        // hooks is actually the exported moment object\n        var nowValue = new Date(hooks.now());\n        if (config._useUTC) {\n            return [\n                nowValue.getUTCFullYear(),\n                nowValue.getUTCMonth(),\n                nowValue.getUTCDate(),\n            ];\n        }\n        return [nowValue.getFullYear(), nowValue.getMonth(), nowValue.getDate()];\n    }\n\n    // convert an array to a date.\n    // the array should mirror the parameters below\n    // note: all values past the year are optional and will default to the lowest possible value.\n    // [year, month, day , hour, minute, second, millisecond]\n    function configFromArray(config) {\n        var i,\n            date,\n            input = [],\n            currentDate,\n            expectedWeekday,\n            yearToUse;\n\n        if (config._d) {\n            return;\n        }\n\n        currentDate = currentDateArray(config);\n\n        //compute day of the year from weeks and weekdays\n        if (config._w && config._a[DATE] == null && config._a[MONTH] == null) {\n            dayOfYearFromWeekInfo(config);\n        }\n\n        //if the day of the year is set, figure out what it is\n        if (config._dayOfYear != null) {\n            yearToUse = defaults(config._a[YEAR], currentDate[YEAR]);\n\n            if (\n                config._dayOfYear > daysInYear(yearToUse) ||\n                config._dayOfYear === 0\n            ) {\n                getParsingFlags(config)._overflowDayOfYear = true;\n            }\n\n            date = createUTCDate(yearToUse, 0, config._dayOfYear);\n            config._a[MONTH] = date.getUTCMonth();\n            config._a[DATE] = date.getUTCDate();\n        }\n\n        // Default to current date.\n        // * if no year, month, day of month are given, default to today\n        // * if day of month is given, default month and year\n        // * if month is given, default only year\n        // * if year is given, don't default anything\n        for (i = 0; i < 3 && config._a[i] == null; ++i) {\n            config._a[i] = input[i] = currentDate[i];\n        }\n\n        // Zero out whatever was not defaulted, including time\n        for (; i < 7; i++) {\n            config._a[i] = input[i] =\n                config._a[i] == null ? (i === 2 ? 1 : 0) : config._a[i];\n        }\n\n        // Check for 24:00:00.000\n        if (\n            config._a[HOUR] === 24 &&\n            config._a[MINUTE] === 0 &&\n            config._a[SECOND] === 0 &&\n            config._a[MILLISECOND] === 0\n        ) {\n            config._nextDay = true;\n            config._a[HOUR] = 0;\n        }\n\n        config._d = (config._useUTC ? createUTCDate : createDate).apply(\n            null,\n            input\n        );\n        expectedWeekday = config._useUTC\n            ? config._d.getUTCDay()\n            : config._d.getDay();\n\n        // Apply timezone offset from input. The actual utcOffset can be changed\n        // with parseZone.\n        if (config._tzm != null) {\n            config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n        }\n\n        if (config._nextDay) {\n            config._a[HOUR] = 24;\n        }\n\n        // check for mismatching day of week\n        if (\n            config._w &&\n            typeof config._w.d !== 'undefined' &&\n            config._w.d !== expectedWeekday\n        ) {\n            getParsingFlags(config).weekdayMismatch = true;\n        }\n    }\n\n    function dayOfYearFromWeekInfo(config) {\n        var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow, curWeek;\n\n        w = config._w;\n        if (w.GG != null || w.W != null || w.E != null) {\n            dow = 1;\n            doy = 4;\n\n            // TODO: We need to take the current isoWeekYear, but that depends on\n            // how we interpret now (local, utc, fixed offset). So create\n            // a now version of current config (take local/utc/offset flags, and\n            // create now).\n            weekYear = defaults(\n                w.GG,\n                config._a[YEAR],\n                weekOfYear(createLocal(), 1, 4).year\n            );\n            week = defaults(w.W, 1);\n            weekday = defaults(w.E, 1);\n            if (weekday < 1 || weekday > 7) {\n                weekdayOverflow = true;\n            }\n        } else {\n            dow = config._locale._week.dow;\n            doy = config._locale._week.doy;\n\n            curWeek = weekOfYear(createLocal(), dow, doy);\n\n            weekYear = defaults(w.gg, config._a[YEAR], curWeek.year);\n\n            // Default to current week.\n            week = defaults(w.w, curWeek.week);\n\n            if (w.d != null) {\n                // weekday -- low day numbers are considered next week\n                weekday = w.d;\n                if (weekday < 0 || weekday > 6) {\n                    weekdayOverflow = true;\n                }\n            } else if (w.e != null) {\n                // local weekday -- counting starts from beginning of week\n                weekday = w.e + dow;\n                if (w.e < 0 || w.e > 6) {\n                    weekdayOverflow = true;\n                }\n            } else {\n                // default to beginning of week\n                weekday = dow;\n            }\n        }\n        if (week < 1 || week > weeksInYear(weekYear, dow, doy)) {\n            getParsingFlags(config)._overflowWeeks = true;\n        } else if (weekdayOverflow != null) {\n            getParsingFlags(config)._overflowWeekday = true;\n        } else {\n            temp = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy);\n            config._a[YEAR] = temp.year;\n            config._dayOfYear = temp.dayOfYear;\n        }\n    }\n\n    // constant that refers to the ISO standard\n    hooks.ISO_8601 = function () {};\n\n    // constant that refers to the RFC 2822 form\n    hooks.RFC_2822 = function () {};\n\n    // date from string and format string\n    function configFromStringAndFormat(config) {\n        // TODO: Move this to another part of the creation flow to prevent circular deps\n        if (config._f === hooks.ISO_8601) {\n            configFromISO(config);\n            return;\n        }\n        if (config._f === hooks.RFC_2822) {\n            configFromRFC2822(config);\n            return;\n        }\n        config._a = [];\n        getParsingFlags(config).empty = true;\n\n        // This array is used to make a Date, either with `new Date` or `Date.UTC`\n        var string = '' + config._i,\n            i,\n            parsedInput,\n            tokens,\n            token,\n            skipped,\n            stringLength = string.length,\n            totalParsedInputLength = 0,\n            era,\n            tokenLen;\n\n        tokens =\n            expandFormat(config._f, config._locale).match(formattingTokens) || [];\n        tokenLen = tokens.length;\n        for (i = 0; i < tokenLen; i++) {\n            token = tokens[i];\n            parsedInput = (string.match(getParseRegexForToken(token, config)) ||\n                [])[0];\n            if (parsedInput) {\n                skipped = string.substr(0, string.indexOf(parsedInput));\n                if (skipped.length > 0) {\n                    getParsingFlags(config).unusedInput.push(skipped);\n                }\n                string = string.slice(\n                    string.indexOf(parsedInput) + parsedInput.length\n                );\n                totalParsedInputLength += parsedInput.length;\n            }\n            // don't parse if it's not a known token\n            if (formatTokenFunctions[token]) {\n                if (parsedInput) {\n                    getParsingFlags(config).empty = false;\n                } else {\n                    getParsingFlags(config).unusedTokens.push(token);\n                }\n                addTimeToArrayFromToken(token, parsedInput, config);\n            } else if (config._strict && !parsedInput) {\n                getParsingFlags(config).unusedTokens.push(token);\n            }\n        }\n\n        // add remaining unparsed input length to the string\n        getParsingFlags(config).charsLeftOver =\n            stringLength - totalParsedInputLength;\n        if (string.length > 0) {\n            getParsingFlags(config).unusedInput.push(string);\n        }\n\n        // clear _12h flag if hour is <= 12\n        if (\n            config._a[HOUR] <= 12 &&\n            getParsingFlags(config).bigHour === true &&\n            config._a[HOUR] > 0\n        ) {\n            getParsingFlags(config).bigHour = undefined;\n        }\n\n        getParsingFlags(config).parsedDateParts = config._a.slice(0);\n        getParsingFlags(config).meridiem = config._meridiem;\n        // handle meridiem\n        config._a[HOUR] = meridiemFixWrap(\n            config._locale,\n            config._a[HOUR],\n            config._meridiem\n        );\n\n        // handle era\n        era = getParsingFlags(config).era;\n        if (era !== null) {\n            config._a[YEAR] = config._locale.erasConvertYear(era, config._a[YEAR]);\n        }\n\n        configFromArray(config);\n        checkOverflow(config);\n    }\n\n    function meridiemFixWrap(locale, hour, meridiem) {\n        var isPm;\n\n        if (meridiem == null) {\n            // nothing to do\n            return hour;\n        }\n        if (locale.meridiemHour != null) {\n            return locale.meridiemHour(hour, meridiem);\n        } else if (locale.isPM != null) {\n            // Fallback\n            isPm = locale.isPM(meridiem);\n            if (isPm && hour < 12) {\n                hour += 12;\n            }\n            if (!isPm && hour === 12) {\n                hour = 0;\n            }\n            return hour;\n        } else {\n            // this is not supposed to happen\n            return hour;\n        }\n    }\n\n    // date from string and array of format strings\n    function configFromStringAndArray(config) {\n        var tempConfig,\n            bestMoment,\n            scoreToBeat,\n            i,\n            currentScore,\n            validFormatFound,\n            bestFormatIsValid = false,\n            configfLen = config._f.length;\n\n        if (configfLen === 0) {\n            getParsingFlags(config).invalidFormat = true;\n            config._d = new Date(NaN);\n            return;\n        }\n\n        for (i = 0; i < configfLen; i++) {\n            currentScore = 0;\n            validFormatFound = false;\n            tempConfig = copyConfig({}, config);\n            if (config._useUTC != null) {\n                tempConfig._useUTC = config._useUTC;\n            }\n            tempConfig._f = config._f[i];\n            configFromStringAndFormat(tempConfig);\n\n            if (isValid(tempConfig)) {\n                validFormatFound = true;\n            }\n\n            // if there is any input that was not parsed add a penalty for that format\n            currentScore += getParsingFlags(tempConfig).charsLeftOver;\n\n            //or tokens\n            currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10;\n\n            getParsingFlags(tempConfig).score = currentScore;\n\n            if (!bestFormatIsValid) {\n                if (\n                    scoreToBeat == null ||\n                    currentScore < scoreToBeat ||\n                    validFormatFound\n                ) {\n                    scoreToBeat = currentScore;\n                    bestMoment = tempConfig;\n                    if (validFormatFound) {\n                        bestFormatIsValid = true;\n                    }\n                }\n            } else {\n                if (currentScore < scoreToBeat) {\n                    scoreToBeat = currentScore;\n                    bestMoment = tempConfig;\n                }\n            }\n        }\n\n        extend(config, bestMoment || tempConfig);\n    }\n\n    function configFromObject(config) {\n        if (config._d) {\n            return;\n        }\n\n        var i = normalizeObjectUnits(config._i),\n            dayOrDate = i.day === undefined ? i.date : i.day;\n        config._a = map(\n            [i.year, i.month, dayOrDate, i.hour, i.minute, i.second, i.millisecond],\n            function (obj) {\n                return obj && parseInt(obj, 10);\n            }\n        );\n\n        configFromArray(config);\n    }\n\n    function createFromConfig(config) {\n        var res = new Moment(checkOverflow(prepareConfig(config)));\n        if (res._nextDay) {\n            // Adding is smart enough around DST\n            res.add(1, 'd');\n            res._nextDay = undefined;\n        }\n\n        return res;\n    }\n\n    function prepareConfig(config) {\n        var input = config._i,\n            format = config._f;\n\n        config._locale = config._locale || getLocale(config._l);\n\n        if (input === null || (format === undefined && input === '')) {\n            return createInvalid({ nullInput: true });\n        }\n\n        if (typeof input === 'string') {\n            config._i = input = config._locale.preparse(input);\n        }\n\n        if (isMoment(input)) {\n            return new Moment(checkOverflow(input));\n        } else if (isDate(input)) {\n            config._d = input;\n        } else if (isArray(format)) {\n            configFromStringAndArray(config);\n        } else if (format) {\n            configFromStringAndFormat(config);\n        } else {\n            configFromInput(config);\n        }\n\n        if (!isValid(config)) {\n            config._d = null;\n        }\n\n        return config;\n    }\n\n    function configFromInput(config) {\n        var input = config._i;\n        if (isUndefined(input)) {\n            config._d = new Date(hooks.now());\n        } else if (isDate(input)) {\n            config._d = new Date(input.valueOf());\n        } else if (typeof input === 'string') {\n            configFromString(config);\n        } else if (isArray(input)) {\n            config._a = map(input.slice(0), function (obj) {\n                return parseInt(obj, 10);\n            });\n            configFromArray(config);\n        } else if (isObject(input)) {\n            configFromObject(config);\n        } else if (isNumber(input)) {\n            // from milliseconds\n            config._d = new Date(input);\n        } else {\n            hooks.createFromInputFallback(config);\n        }\n    }\n\n    function createLocalOrUTC(input, format, locale, strict, isUTC) {\n        var c = {};\n\n        if (format === true || format === false) {\n            strict = format;\n            format = undefined;\n        }\n\n        if (locale === true || locale === false) {\n            strict = locale;\n            locale = undefined;\n        }\n\n        if (\n            (isObject(input) && isObjectEmpty(input)) ||\n            (isArray(input) && input.length === 0)\n        ) {\n            input = undefined;\n        }\n        // object construction must be done this way.\n        // https://github.com/moment/moment/issues/1423\n        c._isAMomentObject = true;\n        c._useUTC = c._isUTC = isUTC;\n        c._l = locale;\n        c._i = input;\n        c._f = format;\n        c._strict = strict;\n\n        return createFromConfig(c);\n    }\n\n    function createLocal(input, format, locale, strict) {\n        return createLocalOrUTC(input, format, locale, strict, false);\n    }\n\n    var prototypeMin = deprecate(\n            'moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/',\n            function () {\n                var other = createLocal.apply(null, arguments);\n                if (this.isValid() && other.isValid()) {\n                    return other < this ? this : other;\n                } else {\n                    return createInvalid();\n                }\n            }\n        ),\n        prototypeMax = deprecate(\n            'moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/',\n            function () {\n                var other = createLocal.apply(null, arguments);\n                if (this.isValid() && other.isValid()) {\n                    return other > this ? this : other;\n                } else {\n                    return createInvalid();\n                }\n            }\n        );\n\n    // Pick a moment m from moments so that m[fn](other) is true for all\n    // other. This relies on the function fn to be transitive.\n    //\n    // moments should either be an array of moment objects or an array, whose\n    // first element is an array of moment objects.\n    function pickBy(fn, moments) {\n        var res, i;\n        if (moments.length === 1 && isArray(moments[0])) {\n            moments = moments[0];\n        }\n        if (!moments.length) {\n            return createLocal();\n        }\n        res = moments[0];\n        for (i = 1; i < moments.length; ++i) {\n            if (!moments[i].isValid() || moments[i][fn](res)) {\n                res = moments[i];\n            }\n        }\n        return res;\n    }\n\n    // TODO: Use [].sort instead?\n    function min() {\n        var args = [].slice.call(arguments, 0);\n\n        return pickBy('isBefore', args);\n    }\n\n    function max() {\n        var args = [].slice.call(arguments, 0);\n\n        return pickBy('isAfter', args);\n    }\n\n    var now = function () {\n        return Date.now ? Date.now() : +new Date();\n    };\n\n    var ordering = [\n        'year',\n        'quarter',\n        'month',\n        'week',\n        'day',\n        'hour',\n        'minute',\n        'second',\n        'millisecond',\n    ];\n\n    function isDurationValid(m) {\n        var key,\n            unitHasDecimal = false,\n            i,\n            orderLen = ordering.length;\n        for (key in m) {\n            if (\n                hasOwnProp(m, key) &&\n                !(\n                    indexOf.call(ordering, key) !== -1 &&\n                    (m[key] == null || !isNaN(m[key]))\n                )\n            ) {\n                return false;\n            }\n        }\n\n        for (i = 0; i < orderLen; ++i) {\n            if (m[ordering[i]]) {\n                if (unitHasDecimal) {\n                    return false; // only allow non-integers for smallest unit\n                }\n                if (parseFloat(m[ordering[i]]) !== toInt(m[ordering[i]])) {\n                    unitHasDecimal = true;\n                }\n            }\n        }\n\n        return true;\n    }\n\n    function isValid$1() {\n        return this._isValid;\n    }\n\n    function createInvalid$1() {\n        return createDuration(NaN);\n    }\n\n    function Duration(duration) {\n        var normalizedInput = normalizeObjectUnits(duration),\n            years = normalizedInput.year || 0,\n            quarters = normalizedInput.quarter || 0,\n            months = normalizedInput.month || 0,\n            weeks = normalizedInput.week || normalizedInput.isoWeek || 0,\n            days = normalizedInput.day || 0,\n            hours = normalizedInput.hour || 0,\n            minutes = normalizedInput.minute || 0,\n            seconds = normalizedInput.second || 0,\n            milliseconds = normalizedInput.millisecond || 0;\n\n        this._isValid = isDurationValid(normalizedInput);\n\n        // representation for dateAddRemove\n        this._milliseconds =\n            +milliseconds +\n            seconds * 1e3 + // 1000\n            minutes * 6e4 + // 1000 * 60\n            hours * 1000 * 60 * 60; //using 1000 * 60 * 60 instead of 36e5 to avoid floating point rounding errors https://github.com/moment/moment/issues/2978\n        // Because of dateAddRemove treats 24 hours as different from a\n        // day when working around DST, we need to store them separately\n        this._days = +days + weeks * 7;\n        // It is impossible to translate months into days without knowing\n        // which months you are are talking about, so we have to store\n        // it separately.\n        this._months = +months + quarters * 3 + years * 12;\n\n        this._data = {};\n\n        this._locale = getLocale();\n\n        this._bubble();\n    }\n\n    function isDuration(obj) {\n        return obj instanceof Duration;\n    }\n\n    function absRound(number) {\n        if (number < 0) {\n            return Math.round(-1 * number) * -1;\n        } else {\n            return Math.round(number);\n        }\n    }\n\n    // compare two arrays, return the number of differences\n    function compareArrays(array1, array2, dontConvert) {\n        var len = Math.min(array1.length, array2.length),\n            lengthDiff = Math.abs(array1.length - array2.length),\n            diffs = 0,\n            i;\n        for (i = 0; i < len; i++) {\n            if (\n                (dontConvert && array1[i] !== array2[i]) ||\n                (!dontConvert && toInt(array1[i]) !== toInt(array2[i]))\n            ) {\n                diffs++;\n            }\n        }\n        return diffs + lengthDiff;\n    }\n\n    // FORMATTING\n\n    function offset(token, separator) {\n        addFormatToken(token, 0, 0, function () {\n            var offset = this.utcOffset(),\n                sign = '+';\n            if (offset < 0) {\n                offset = -offset;\n                sign = '-';\n            }\n            return (\n                sign +\n                zeroFill(~~(offset / 60), 2) +\n                separator +\n                zeroFill(~~offset % 60, 2)\n            );\n        });\n    }\n\n    offset('Z', ':');\n    offset('ZZ', '');\n\n    // PARSING\n\n    addRegexToken('Z', matchShortOffset);\n    addRegexToken('ZZ', matchShortOffset);\n    addParseToken(['Z', 'ZZ'], function (input, array, config) {\n        config._useUTC = true;\n        config._tzm = offsetFromString(matchShortOffset, input);\n    });\n\n    // HELPERS\n\n    // timezone chunker\n    // '+10:00' > ['10',  '00']\n    // '-1530'  > ['-15', '30']\n    var chunkOffset = /([\\+\\-]|\\d\\d)/gi;\n\n    function offsetFromString(matcher, string) {\n        var matches = (string || '').match(matcher),\n            chunk,\n            parts,\n            minutes;\n\n        if (matches === null) {\n            return null;\n        }\n\n        chunk = matches[matches.length - 1] || [];\n        parts = (chunk + '').match(chunkOffset) || ['-', 0, 0];\n        minutes = +(parts[1] * 60) + toInt(parts[2]);\n\n        return minutes === 0 ? 0 : parts[0] === '+' ? minutes : -minutes;\n    }\n\n    // Return a moment from input, that is local/utc/zone equivalent to model.\n    function cloneWithOffset(input, model) {\n        var res, diff;\n        if (model._isUTC) {\n            res = model.clone();\n            diff =\n                (isMoment(input) || isDate(input)\n                    ? input.valueOf()\n                    : createLocal(input).valueOf()) - res.valueOf();\n            // Use low-level api, because this fn is low-level api.\n            res._d.setTime(res._d.valueOf() + diff);\n            hooks.updateOffset(res, false);\n            return res;\n        } else {\n            return createLocal(input).local();\n        }\n    }\n\n    function getDateOffset(m) {\n        // On Firefox.24 Date#getTimezoneOffset returns a floating point.\n        // https://github.com/moment/moment/pull/1871\n        return -Math.round(m._d.getTimezoneOffset());\n    }\n\n    // HOOKS\n\n    // This function will be called whenever a moment is mutated.\n    // It is intended to keep the offset in sync with the timezone.\n    hooks.updateOffset = function () {};\n\n    // MOMENTS\n\n    // keepLocalTime = true means only change the timezone, without\n    // affecting the local hour. So 5:31:26 +0300 --[utcOffset(2, true)]-->\n    // 5:31:26 +0200 It is possible that 5:31:26 doesn't exist with offset\n    // +0200, so we adjust the time as needed, to be valid.\n    //\n    // Keeping the time actually adds/subtracts (one hour)\n    // from the actual represented time. That is why we call updateOffset\n    // a second time. In case it wants us to change the offset again\n    // _changeInProgress == true case, then we have to adjust, because\n    // there is no such time in the given timezone.\n    function getSetOffset(input, keepLocalTime, keepMinutes) {\n        var offset = this._offset || 0,\n            localAdjust;\n        if (!this.isValid()) {\n            return input != null ? this : NaN;\n        }\n        if (input != null) {\n            if (typeof input === 'string') {\n                input = offsetFromString(matchShortOffset, input);\n                if (input === null) {\n                    return this;\n                }\n            } else if (Math.abs(input) < 16 && !keepMinutes) {\n                input = input * 60;\n            }\n            if (!this._isUTC && keepLocalTime) {\n                localAdjust = getDateOffset(this);\n            }\n            this._offset = input;\n            this._isUTC = true;\n            if (localAdjust != null) {\n                this.add(localAdjust, 'm');\n            }\n            if (offset !== input) {\n                if (!keepLocalTime || this._changeInProgress) {\n                    addSubtract(\n                        this,\n                        createDuration(input - offset, 'm'),\n                        1,\n                        false\n                    );\n                } else if (!this._changeInProgress) {\n                    this._changeInProgress = true;\n                    hooks.updateOffset(this, true);\n                    this._changeInProgress = null;\n                }\n            }\n            return this;\n        } else {\n            return this._isUTC ? offset : getDateOffset(this);\n        }\n    }\n\n    function getSetZone(input, keepLocalTime) {\n        if (input != null) {\n            if (typeof input !== 'string') {\n                input = -input;\n            }\n\n            this.utcOffset(input, keepLocalTime);\n\n            return this;\n        } else {\n            return -this.utcOffset();\n        }\n    }\n\n    function setOffsetToUTC(keepLocalTime) {\n        return this.utcOffset(0, keepLocalTime);\n    }\n\n    function setOffsetToLocal(keepLocalTime) {\n        if (this._isUTC) {\n            this.utcOffset(0, keepLocalTime);\n            this._isUTC = false;\n\n            if (keepLocalTime) {\n                this.subtract(getDateOffset(this), 'm');\n            }\n        }\n        return this;\n    }\n\n    function setOffsetToParsedOffset() {\n        if (this._tzm != null) {\n            this.utcOffset(this._tzm, false, true);\n        } else if (typeof this._i === 'string') {\n            var tZone = offsetFromString(matchOffset, this._i);\n            if (tZone != null) {\n                this.utcOffset(tZone);\n            } else {\n                this.utcOffset(0, true);\n            }\n        }\n        return this;\n    }\n\n    function hasAlignedHourOffset(input) {\n        if (!this.isValid()) {\n            return false;\n        }\n        input = input ? createLocal(input).utcOffset() : 0;\n\n        return (this.utcOffset() - input) % 60 === 0;\n    }\n\n    function isDaylightSavingTime() {\n        return (\n            this.utcOffset() > this.clone().month(0).utcOffset() ||\n            this.utcOffset() > this.clone().month(5).utcOffset()\n        );\n    }\n\n    function isDaylightSavingTimeShifted() {\n        if (!isUndefined(this._isDSTShifted)) {\n            return this._isDSTShifted;\n        }\n\n        var c = {},\n            other;\n\n        copyConfig(c, this);\n        c = prepareConfig(c);\n\n        if (c._a) {\n            other = c._isUTC ? createUTC(c._a) : createLocal(c._a);\n            this._isDSTShifted =\n                this.isValid() && compareArrays(c._a, other.toArray()) > 0;\n        } else {\n            this._isDSTShifted = false;\n        }\n\n        return this._isDSTShifted;\n    }\n\n    function isLocal() {\n        return this.isValid() ? !this._isUTC : false;\n    }\n\n    function isUtcOffset() {\n        return this.isValid() ? this._isUTC : false;\n    }\n\n    function isUtc() {\n        return this.isValid() ? this._isUTC && this._offset === 0 : false;\n    }\n\n    // ASP.NET json date format regex\n    var aspNetRegex = /^(-|\\+)?(?:(\\d*)[. ])?(\\d+):(\\d+)(?::(\\d+)(\\.\\d*)?)?$/,\n        // from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html\n        // somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere\n        // and further modified to allow for strings containing both week and day\n        isoRegex =\n            /^(-|\\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;\n\n    function createDuration(input, key) {\n        var duration = input,\n            // matching against regexp is expensive, do it on demand\n            match = null,\n            sign,\n            ret,\n            diffRes;\n\n        if (isDuration(input)) {\n            duration = {\n                ms: input._milliseconds,\n                d: input._days,\n                M: input._months,\n            };\n        } else if (isNumber(input) || !isNaN(+input)) {\n            duration = {};\n            if (key) {\n                duration[key] = +input;\n            } else {\n                duration.milliseconds = +input;\n            }\n        } else if ((match = aspNetRegex.exec(input))) {\n            sign = match[1] === '-' ? -1 : 1;\n            duration = {\n                y: 0,\n                d: toInt(match[DATE]) * sign,\n                h: toInt(match[HOUR]) * sign,\n                m: toInt(match[MINUTE]) * sign,\n                s: toInt(match[SECOND]) * sign,\n                ms: toInt(absRound(match[MILLISECOND] * 1000)) * sign, // the millisecond decimal point is included in the match\n            };\n        } else if ((match = isoRegex.exec(input))) {\n            sign = match[1] === '-' ? -1 : 1;\n            duration = {\n                y: parseIso(match[2], sign),\n                M: parseIso(match[3], sign),\n                w: parseIso(match[4], sign),\n                d: parseIso(match[5], sign),\n                h: parseIso(match[6], sign),\n                m: parseIso(match[7], sign),\n                s: parseIso(match[8], sign),\n            };\n        } else if (duration == null) {\n            // checks for null or undefined\n            duration = {};\n        } else if (\n            typeof duration === 'object' &&\n            ('from' in duration || 'to' in duration)\n        ) {\n            diffRes = momentsDifference(\n                createLocal(duration.from),\n                createLocal(duration.to)\n            );\n\n            duration = {};\n            duration.ms = diffRes.milliseconds;\n            duration.M = diffRes.months;\n        }\n\n        ret = new Duration(duration);\n\n        if (isDuration(input) && hasOwnProp(input, '_locale')) {\n            ret._locale = input._locale;\n        }\n\n        if (isDuration(input) && hasOwnProp(input, '_isValid')) {\n            ret._isValid = input._isValid;\n        }\n\n        return ret;\n    }\n\n    createDuration.fn = Duration.prototype;\n    createDuration.invalid = createInvalid$1;\n\n    function parseIso(inp, sign) {\n        // We'd normally use ~~inp for this, but unfortunately it also\n        // converts floats to ints.\n        // inp may be undefined, so careful calling replace on it.\n        var res = inp && parseFloat(inp.replace(',', '.'));\n        // apply sign while we're at it\n        return (isNaN(res) ? 0 : res) * sign;\n    }\n\n    function positiveMomentsDifference(base, other) {\n        var res = {};\n\n        res.months =\n            other.month() - base.month() + (other.year() - base.year()) * 12;\n        if (base.clone().add(res.months, 'M').isAfter(other)) {\n            --res.months;\n        }\n\n        res.milliseconds = +other - +base.clone().add(res.months, 'M');\n\n        return res;\n    }\n\n    function momentsDifference(base, other) {\n        var res;\n        if (!(base.isValid() && other.isValid())) {\n            return { milliseconds: 0, months: 0 };\n        }\n\n        other = cloneWithOffset(other, base);\n        if (base.isBefore(other)) {\n            res = positiveMomentsDifference(base, other);\n        } else {\n            res = positiveMomentsDifference(other, base);\n            res.milliseconds = -res.milliseconds;\n            res.months = -res.months;\n        }\n\n        return res;\n    }\n\n    // TODO: remove 'name' arg after deprecation is removed\n    function createAdder(direction, name) {\n        return function (val, period) {\n            var dur, tmp;\n            //invert the arguments, but complain about it\n            if (period !== null && !isNaN(+period)) {\n                deprecateSimple(\n                    name,\n                    'moment().' +\n                        name +\n                        '(period, number) is deprecated. Please use moment().' +\n                        name +\n                        '(number, period). ' +\n                        'See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.'\n                );\n                tmp = val;\n                val = period;\n                period = tmp;\n            }\n\n            dur = createDuration(val, period);\n            addSubtract(this, dur, direction);\n            return this;\n        };\n    }\n\n    function addSubtract(mom, duration, isAdding, updateOffset) {\n        var milliseconds = duration._milliseconds,\n            days = absRound(duration._days),\n            months = absRound(duration._months);\n\n        if (!mom.isValid()) {\n            // No op\n            return;\n        }\n\n        updateOffset = updateOffset == null ? true : updateOffset;\n\n        if (months) {\n            setMonth(mom, get(mom, 'Month') + months * isAdding);\n        }\n        if (days) {\n            set$1(mom, 'Date', get(mom, 'Date') + days * isAdding);\n        }\n        if (milliseconds) {\n            mom._d.setTime(mom._d.valueOf() + milliseconds * isAdding);\n        }\n        if (updateOffset) {\n            hooks.updateOffset(mom, days || months);\n        }\n    }\n\n    var add = createAdder(1, 'add'),\n        subtract = createAdder(-1, 'subtract');\n\n    function isString(input) {\n        return typeof input === 'string' || input instanceof String;\n    }\n\n    // type MomentInput = Moment | Date | string | number | (number | string)[] | MomentInputObject | void; // null | undefined\n    function isMomentInput(input) {\n        return (\n            isMoment(input) ||\n            isDate(input) ||\n            isString(input) ||\n            isNumber(input) ||\n            isNumberOrStringArray(input) ||\n            isMomentInputObject(input) ||\n            input === null ||\n            input === undefined\n        );\n    }\n\n    function isMomentInputObject(input) {\n        var objectTest = isObject(input) && !isObjectEmpty(input),\n            propertyTest = false,\n            properties = [\n                'years',\n                'year',\n                'y',\n                'months',\n                'month',\n                'M',\n                'days',\n                'day',\n                'd',\n                'dates',\n                'date',\n                'D',\n                'hours',\n                'hour',\n                'h',\n                'minutes',\n                'minute',\n                'm',\n                'seconds',\n                'second',\n                's',\n                'milliseconds',\n                'millisecond',\n                'ms',\n            ],\n            i,\n            property,\n            propertyLen = properties.length;\n\n        for (i = 0; i < propertyLen; i += 1) {\n            property = properties[i];\n            propertyTest = propertyTest || hasOwnProp(input, property);\n        }\n\n        return objectTest && propertyTest;\n    }\n\n    function isNumberOrStringArray(input) {\n        var arrayTest = isArray(input),\n            dataTypeTest = false;\n        if (arrayTest) {\n            dataTypeTest =\n                input.filter(function (item) {\n                    return !isNumber(item) && isString(input);\n                }).length === 0;\n        }\n        return arrayTest && dataTypeTest;\n    }\n\n    function isCalendarSpec(input) {\n        var objectTest = isObject(input) && !isObjectEmpty(input),\n            propertyTest = false,\n            properties = [\n                'sameDay',\n                'nextDay',\n                'lastDay',\n                'nextWeek',\n                'lastWeek',\n                'sameElse',\n            ],\n            i,\n            property;\n\n        for (i = 0; i < properties.length; i += 1) {\n            property = properties[i];\n            propertyTest = propertyTest || hasOwnProp(input, property);\n        }\n\n        return objectTest && propertyTest;\n    }\n\n    function getCalendarFormat(myMoment, now) {\n        var diff = myMoment.diff(now, 'days', true);\n        return diff < -6\n            ? 'sameElse'\n            : diff < -1\n              ? 'lastWeek'\n              : diff < 0\n                ? 'lastDay'\n                : diff < 1\n                  ? 'sameDay'\n                  : diff < 2\n                    ? 'nextDay'\n                    : diff < 7\n                      ? 'nextWeek'\n                      : 'sameElse';\n    }\n\n    function calendar$1(time, formats) {\n        // Support for single parameter, formats only overload to the calendar function\n        if (arguments.length === 1) {\n            if (!arguments[0]) {\n                time = undefined;\n                formats = undefined;\n            } else if (isMomentInput(arguments[0])) {\n                time = arguments[0];\n                formats = undefined;\n            } else if (isCalendarSpec(arguments[0])) {\n                formats = arguments[0];\n                time = undefined;\n            }\n        }\n        // We want to compare the start of today, vs this.\n        // Getting start-of-today depends on whether we're local/utc/offset or not.\n        var now = time || createLocal(),\n            sod = cloneWithOffset(now, this).startOf('day'),\n            format = hooks.calendarFormat(this, sod) || 'sameElse',\n            output =\n                formats &&\n                (isFunction(formats[format])\n                    ? formats[format].call(this, now)\n                    : formats[format]);\n\n        return this.format(\n            output || this.localeData().calendar(format, this, createLocal(now))\n        );\n    }\n\n    function clone() {\n        return new Moment(this);\n    }\n\n    function isAfter(input, units) {\n        var localInput = isMoment(input) ? input : createLocal(input);\n        if (!(this.isValid() && localInput.isValid())) {\n            return false;\n        }\n        units = normalizeUnits(units) || 'millisecond';\n        if (units === 'millisecond') {\n            return this.valueOf() > localInput.valueOf();\n        } else {\n            return localInput.valueOf() < this.clone().startOf(units).valueOf();\n        }\n    }\n\n    function isBefore(input, units) {\n        var localInput = isMoment(input) ? input : createLocal(input);\n        if (!(this.isValid() && localInput.isValid())) {\n            return false;\n        }\n        units = normalizeUnits(units) || 'millisecond';\n        if (units === 'millisecond') {\n            return this.valueOf() < localInput.valueOf();\n        } else {\n            return this.clone().endOf(units).valueOf() < localInput.valueOf();\n        }\n    }\n\n    function isBetween(from, to, units, inclusivity) {\n        var localFrom = isMoment(from) ? from : createLocal(from),\n            localTo = isMoment(to) ? to : createLocal(to);\n        if (!(this.isValid() && localFrom.isValid() && localTo.isValid())) {\n            return false;\n        }\n        inclusivity = inclusivity || '()';\n        return (\n            (inclusivity[0] === '('\n                ? this.isAfter(localFrom, units)\n                : !this.isBefore(localFrom, units)) &&\n            (inclusivity[1] === ')'\n                ? this.isBefore(localTo, units)\n                : !this.isAfter(localTo, units))\n        );\n    }\n\n    function isSame(input, units) {\n        var localInput = isMoment(input) ? input : createLocal(input),\n            inputMs;\n        if (!(this.isValid() && localInput.isValid())) {\n            return false;\n        }\n        units = normalizeUnits(units) || 'millisecond';\n        if (units === 'millisecond') {\n            return this.valueOf() === localInput.valueOf();\n        } else {\n            inputMs = localInput.valueOf();\n            return (\n                this.clone().startOf(units).valueOf() <= inputMs &&\n                inputMs <= this.clone().endOf(units).valueOf()\n            );\n        }\n    }\n\n    function isSameOrAfter(input, units) {\n        return this.isSame(input, units) || this.isAfter(input, units);\n    }\n\n    function isSameOrBefore(input, units) {\n        return this.isSame(input, units) || this.isBefore(input, units);\n    }\n\n    function diff(input, units, asFloat) {\n        var that, zoneDelta, output;\n\n        if (!this.isValid()) {\n            return NaN;\n        }\n\n        that = cloneWithOffset(input, this);\n\n        if (!that.isValid()) {\n            return NaN;\n        }\n\n        zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4;\n\n        units = normalizeUnits(units);\n\n        switch (units) {\n            case 'year':\n                output = monthDiff(this, that) / 12;\n                break;\n            case 'month':\n                output = monthDiff(this, that);\n                break;\n            case 'quarter':\n                output = monthDiff(this, that) / 3;\n                break;\n            case 'second':\n                output = (this - that) / 1e3;\n                break; // 1000\n            case 'minute':\n                output = (this - that) / 6e4;\n                break; // 1000 * 60\n            case 'hour':\n                output = (this - that) / 36e5;\n                break; // 1000 * 60 * 60\n            case 'day':\n                output = (this - that - zoneDelta) / 864e5;\n                break; // 1000 * 60 * 60 * 24, negate dst\n            case 'week':\n                output = (this - that - zoneDelta) / 6048e5;\n                break; // 1000 * 60 * 60 * 24 * 7, negate dst\n            default:\n                output = this - that;\n        }\n\n        return asFloat ? output : absFloor(output);\n    }\n\n    function monthDiff(a, b) {\n        if (a.date() < b.date()) {\n            // end-of-month calculations work correct when the start month has more\n            // days than the end month.\n            return -monthDiff(b, a);\n        }\n        // difference in months\n        var wholeMonthDiff = (b.year() - a.year()) * 12 + (b.month() - a.month()),\n            // b is in (anchor - 1 month, anchor + 1 month)\n            anchor = a.clone().add(wholeMonthDiff, 'months'),\n            anchor2,\n            adjust;\n\n        if (b - anchor < 0) {\n            anchor2 = a.clone().add(wholeMonthDiff - 1, 'months');\n            // linear across the month\n            adjust = (b - anchor) / (anchor - anchor2);\n        } else {\n            anchor2 = a.clone().add(wholeMonthDiff + 1, 'months');\n            // linear across the month\n            adjust = (b - anchor) / (anchor2 - anchor);\n        }\n\n        //check for negative zero, return zero if negative zero\n        return -(wholeMonthDiff + adjust) || 0;\n    }\n\n    hooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ';\n    hooks.defaultFormatUtc = 'YYYY-MM-DDTHH:mm:ss[Z]';\n\n    function toString() {\n        return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ');\n    }\n\n    function toISOString(keepOffset) {\n        if (!this.isValid()) {\n            return null;\n        }\n        var utc = keepOffset !== true,\n            m = utc ? this.clone().utc() : this;\n        if (m.year() < 0 || m.year() > 9999) {\n            return formatMoment(\n                m,\n                utc\n                    ? 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]'\n                    : 'YYYYYY-MM-DD[T]HH:mm:ss.SSSZ'\n            );\n        }\n        if (isFunction(Date.prototype.toISOString)) {\n            // native implementation is ~50x faster, use it when we can\n            if (utc) {\n                return this.toDate().toISOString();\n            } else {\n                return new Date(this.valueOf() + this.utcOffset() * 60 * 1000)\n                    .toISOString()\n                    .replace('Z', formatMoment(m, 'Z'));\n            }\n        }\n        return formatMoment(\n            m,\n            utc ? 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYY-MM-DD[T]HH:mm:ss.SSSZ'\n        );\n    }\n\n    /**\n     * Return a human readable representation of a moment that can\n     * also be evaluated to get a new moment which is the same\n     *\n     * @link https://nodejs.org/dist/latest/docs/api/util.html#util_custom_inspect_function_on_objects\n     */\n    function inspect() {\n        if (!this.isValid()) {\n            return 'moment.invalid(/* ' + this._i + ' */)';\n        }\n        var func = 'moment',\n            zone = '',\n            prefix,\n            year,\n            datetime,\n            suffix;\n        if (!this.isLocal()) {\n            func = this.utcOffset() === 0 ? 'moment.utc' : 'moment.parseZone';\n            zone = 'Z';\n        }\n        prefix = '[' + func + '(\"]';\n        year = 0 <= this.year() && this.year() <= 9999 ? 'YYYY' : 'YYYYYY';\n        datetime = '-MM-DD[T]HH:mm:ss.SSS';\n        suffix = zone + '[\")]';\n\n        return this.format(prefix + year + datetime + suffix);\n    }\n\n    function format(inputString) {\n        if (!inputString) {\n            inputString = this.isUtc()\n                ? hooks.defaultFormatUtc\n                : hooks.defaultFormat;\n        }\n        var output = formatMoment(this, inputString);\n        return this.localeData().postformat(output);\n    }\n\n    function from(time, withoutSuffix) {\n        if (\n            this.isValid() &&\n            ((isMoment(time) && time.isValid()) || createLocal(time).isValid())\n        ) {\n            return createDuration({ to: this, from: time })\n                .locale(this.locale())\n                .humanize(!withoutSuffix);\n        } else {\n            return this.localeData().invalidDate();\n        }\n    }\n\n    function fromNow(withoutSuffix) {\n        return this.from(createLocal(), withoutSuffix);\n    }\n\n    function to(time, withoutSuffix) {\n        if (\n            this.isValid() &&\n            ((isMoment(time) && time.isValid()) || createLocal(time).isValid())\n        ) {\n            return createDuration({ from: this, to: time })\n                .locale(this.locale())\n                .humanize(!withoutSuffix);\n        } else {\n            return this.localeData().invalidDate();\n        }\n    }\n\n    function toNow(withoutSuffix) {\n        return this.to(createLocal(), withoutSuffix);\n    }\n\n    // If passed a locale key, it will set the locale for this\n    // instance.  Otherwise, it will return the locale configuration\n    // variables for this instance.\n    function locale(key) {\n        var newLocaleData;\n\n        if (key === undefined) {\n            return this._locale._abbr;\n        } else {\n            newLocaleData = getLocale(key);\n            if (newLocaleData != null) {\n                this._locale = newLocaleData;\n            }\n            return this;\n        }\n    }\n\n    var lang = deprecate(\n        'moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.',\n        function (key) {\n            if (key === undefined) {\n                return this.localeData();\n            } else {\n                return this.locale(key);\n            }\n        }\n    );\n\n    function localeData() {\n        return this._locale;\n    }\n\n    var MS_PER_SECOND = 1000,\n        MS_PER_MINUTE = 60 * MS_PER_SECOND,\n        MS_PER_HOUR = 60 * MS_PER_MINUTE,\n        MS_PER_400_YEARS = (365 * 400 + 97) * 24 * MS_PER_HOUR;\n\n    // actual modulo - handles negative numbers (for dates before 1970):\n    function mod$1(dividend, divisor) {\n        return ((dividend % divisor) + divisor) % divisor;\n    }\n\n    function localStartOfDate(y, m, d) {\n        // the date constructor remaps years 0-99 to 1900-1999\n        if (y < 100 && y >= 0) {\n            // preserve leap years using a full 400 year cycle, then reset\n            return new Date(y + 400, m, d) - MS_PER_400_YEARS;\n        } else {\n            return new Date(y, m, d).valueOf();\n        }\n    }\n\n    function utcStartOfDate(y, m, d) {\n        // Date.UTC remaps years 0-99 to 1900-1999\n        if (y < 100 && y >= 0) {\n            // preserve leap years using a full 400 year cycle, then reset\n            return Date.UTC(y + 400, m, d) - MS_PER_400_YEARS;\n        } else {\n            return Date.UTC(y, m, d);\n        }\n    }\n\n    function startOf(units) {\n        var time, startOfDate;\n        units = normalizeUnits(units);\n        if (units === undefined || units === 'millisecond' || !this.isValid()) {\n            return this;\n        }\n\n        startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;\n\n        switch (units) {\n            case 'year':\n                time = startOfDate(this.year(), 0, 1);\n                break;\n            case 'quarter':\n                time = startOfDate(\n                    this.year(),\n                    this.month() - (this.month() % 3),\n                    1\n                );\n                break;\n            case 'month':\n                time = startOfDate(this.year(), this.month(), 1);\n                break;\n            case 'week':\n                time = startOfDate(\n                    this.year(),\n                    this.month(),\n                    this.date() - this.weekday()\n                );\n                break;\n            case 'isoWeek':\n                time = startOfDate(\n                    this.year(),\n                    this.month(),\n                    this.date() - (this.isoWeekday() - 1)\n                );\n                break;\n            case 'day':\n            case 'date':\n                time = startOfDate(this.year(), this.month(), this.date());\n                break;\n            case 'hour':\n                time = this._d.valueOf();\n                time -= mod$1(\n                    time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE),\n                    MS_PER_HOUR\n                );\n                break;\n            case 'minute':\n                time = this._d.valueOf();\n                time -= mod$1(time, MS_PER_MINUTE);\n                break;\n            case 'second':\n                time = this._d.valueOf();\n                time -= mod$1(time, MS_PER_SECOND);\n                break;\n        }\n\n        this._d.setTime(time);\n        hooks.updateOffset(this, true);\n        return this;\n    }\n\n    function endOf(units) {\n        var time, startOfDate;\n        units = normalizeUnits(units);\n        if (units === undefined || units === 'millisecond' || !this.isValid()) {\n            return this;\n        }\n\n        startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;\n\n        switch (units) {\n            case 'year':\n                time = startOfDate(this.year() + 1, 0, 1) - 1;\n                break;\n            case 'quarter':\n                time =\n                    startOfDate(\n                        this.year(),\n                        this.month() - (this.month() % 3) + 3,\n                        1\n                    ) - 1;\n                break;\n            case 'month':\n                time = startOfDate(this.year(), this.month() + 1, 1) - 1;\n                break;\n            case 'week':\n                time =\n                    startOfDate(\n                        this.year(),\n                        this.month(),\n                        this.date() - this.weekday() + 7\n                    ) - 1;\n                break;\n            case 'isoWeek':\n                time =\n                    startOfDate(\n                        this.year(),\n                        this.month(),\n                        this.date() - (this.isoWeekday() - 1) + 7\n                    ) - 1;\n                break;\n            case 'day':\n            case 'date':\n                time = startOfDate(this.year(), this.month(), this.date() + 1) - 1;\n                break;\n            case 'hour':\n                time = this._d.valueOf();\n                time +=\n                    MS_PER_HOUR -\n                    mod$1(\n                        time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE),\n                        MS_PER_HOUR\n                    ) -\n                    1;\n                break;\n            case 'minute':\n                time = this._d.valueOf();\n                time += MS_PER_MINUTE - mod$1(time, MS_PER_MINUTE) - 1;\n                break;\n            case 'second':\n                time = this._d.valueOf();\n                time += MS_PER_SECOND - mod$1(time, MS_PER_SECOND) - 1;\n                break;\n        }\n\n        this._d.setTime(time);\n        hooks.updateOffset(this, true);\n        return this;\n    }\n\n    function valueOf() {\n        return this._d.valueOf() - (this._offset || 0) * 60000;\n    }\n\n    function unix() {\n        return Math.floor(this.valueOf() / 1000);\n    }\n\n    function toDate() {\n        return new Date(this.valueOf());\n    }\n\n    function toArray() {\n        var m = this;\n        return [\n            m.year(),\n            m.month(),\n            m.date(),\n            m.hour(),\n            m.minute(),\n            m.second(),\n            m.millisecond(),\n        ];\n    }\n\n    function toObject() {\n        var m = this;\n        return {\n            years: m.year(),\n            months: m.month(),\n            date: m.date(),\n            hours: m.hours(),\n            minutes: m.minutes(),\n            seconds: m.seconds(),\n            milliseconds: m.milliseconds(),\n        };\n    }\n\n    function toJSON() {\n        // new Date(NaN).toJSON() === null\n        return this.isValid() ? this.toISOString() : null;\n    }\n\n    function isValid$2() {\n        return isValid(this);\n    }\n\n    function parsingFlags() {\n        return extend({}, getParsingFlags(this));\n    }\n\n    function invalidAt() {\n        return getParsingFlags(this).overflow;\n    }\n\n    function creationData() {\n        return {\n            input: this._i,\n            format: this._f,\n            locale: this._locale,\n            isUTC: this._isUTC,\n            strict: this._strict,\n        };\n    }\n\n    addFormatToken('N', 0, 0, 'eraAbbr');\n    addFormatToken('NN', 0, 0, 'eraAbbr');\n    addFormatToken('NNN', 0, 0, 'eraAbbr');\n    addFormatToken('NNNN', 0, 0, 'eraName');\n    addFormatToken('NNNNN', 0, 0, 'eraNarrow');\n\n    addFormatToken('y', ['y', 1], 'yo', 'eraYear');\n    addFormatToken('y', ['yy', 2], 0, 'eraYear');\n    addFormatToken('y', ['yyy', 3], 0, 'eraYear');\n    addFormatToken('y', ['yyyy', 4], 0, 'eraYear');\n\n    addRegexToken('N', matchEraAbbr);\n    addRegexToken('NN', matchEraAbbr);\n    addRegexToken('NNN', matchEraAbbr);\n    addRegexToken('NNNN', matchEraName);\n    addRegexToken('NNNNN', matchEraNarrow);\n\n    addParseToken(\n        ['N', 'NN', 'NNN', 'NNNN', 'NNNNN'],\n        function (input, array, config, token) {\n            var era = config._locale.erasParse(input, token, config._strict);\n            if (era) {\n                getParsingFlags(config).era = era;\n            } else {\n                getParsingFlags(config).invalidEra = input;\n            }\n        }\n    );\n\n    addRegexToken('y', matchUnsigned);\n    addRegexToken('yy', matchUnsigned);\n    addRegexToken('yyy', matchUnsigned);\n    addRegexToken('yyyy', matchUnsigned);\n    addRegexToken('yo', matchEraYearOrdinal);\n\n    addParseToken(['y', 'yy', 'yyy', 'yyyy'], YEAR);\n    addParseToken(['yo'], function (input, array, config, token) {\n        var match;\n        if (config._locale._eraYearOrdinalRegex) {\n            match = input.match(config._locale._eraYearOrdinalRegex);\n        }\n\n        if (config._locale.eraYearOrdinalParse) {\n            array[YEAR] = config._locale.eraYearOrdinalParse(input, match);\n        } else {\n            array[YEAR] = parseInt(input, 10);\n        }\n    });\n\n    function localeEras(m, format) {\n        var i,\n            l,\n            date,\n            eras = this._eras || getLocale('en')._eras;\n        for (i = 0, l = eras.length; i < l; ++i) {\n            switch (typeof eras[i].since) {\n                case 'string':\n                    // truncate time\n                    date = hooks(eras[i].since).startOf('day');\n                    eras[i].since = date.valueOf();\n                    break;\n            }\n\n            switch (typeof eras[i].until) {\n                case 'undefined':\n                    eras[i].until = +Infinity;\n                    break;\n                case 'string':\n                    // truncate time\n                    date = hooks(eras[i].until).startOf('day').valueOf();\n                    eras[i].until = date.valueOf();\n                    break;\n            }\n        }\n        return eras;\n    }\n\n    function localeErasParse(eraName, format, strict) {\n        var i,\n            l,\n            eras = this.eras(),\n            name,\n            abbr,\n            narrow;\n        eraName = eraName.toUpperCase();\n\n        for (i = 0, l = eras.length; i < l; ++i) {\n            name = eras[i].name.toUpperCase();\n            abbr = eras[i].abbr.toUpperCase();\n            narrow = eras[i].narrow.toUpperCase();\n\n            if (strict) {\n                switch (format) {\n                    case 'N':\n                    case 'NN':\n                    case 'NNN':\n                        if (abbr === eraName) {\n                            return eras[i];\n                        }\n                        break;\n\n                    case 'NNNN':\n                        if (name === eraName) {\n                            return eras[i];\n                        }\n                        break;\n\n                    case 'NNNNN':\n                        if (narrow === eraName) {\n                            return eras[i];\n                        }\n                        break;\n                }\n            } else if ([name, abbr, narrow].indexOf(eraName) >= 0) {\n                return eras[i];\n            }\n        }\n    }\n\n    function localeErasConvertYear(era, year) {\n        var dir = era.since <= era.until ? +1 : -1;\n        if (year === undefined) {\n            return hooks(era.since).year();\n        } else {\n            return hooks(era.since).year() + (year - era.offset) * dir;\n        }\n    }\n\n    function getEraName() {\n        var i,\n            l,\n            val,\n            eras = this.localeData().eras();\n        for (i = 0, l = eras.length; i < l; ++i) {\n            // truncate time\n            val = this.clone().startOf('day').valueOf();\n\n            if (eras[i].since <= val && val <= eras[i].until) {\n                return eras[i].name;\n            }\n            if (eras[i].until <= val && val <= eras[i].since) {\n                return eras[i].name;\n            }\n        }\n\n        return '';\n    }\n\n    function getEraNarrow() {\n        var i,\n            l,\n            val,\n            eras = this.localeData().eras();\n        for (i = 0, l = eras.length; i < l; ++i) {\n            // truncate time\n            val = this.clone().startOf('day').valueOf();\n\n            if (eras[i].since <= val && val <= eras[i].until) {\n                return eras[i].narrow;\n            }\n            if (eras[i].until <= val && val <= eras[i].since) {\n                return eras[i].narrow;\n            }\n        }\n\n        return '';\n    }\n\n    function getEraAbbr() {\n        var i,\n            l,\n            val,\n            eras = this.localeData().eras();\n        for (i = 0, l = eras.length; i < l; ++i) {\n            // truncate time\n            val = this.clone().startOf('day').valueOf();\n\n            if (eras[i].since <= val && val <= eras[i].until) {\n                return eras[i].abbr;\n            }\n            if (eras[i].until <= val && val <= eras[i].since) {\n                return eras[i].abbr;\n            }\n        }\n\n        return '';\n    }\n\n    function getEraYear() {\n        var i,\n            l,\n            dir,\n            val,\n            eras = this.localeData().eras();\n        for (i = 0, l = eras.length; i < l; ++i) {\n            dir = eras[i].since <= eras[i].until ? +1 : -1;\n\n            // truncate time\n            val = this.clone().startOf('day').valueOf();\n\n            if (\n                (eras[i].since <= val && val <= eras[i].until) ||\n                (eras[i].until <= val && val <= eras[i].since)\n            ) {\n                return (\n                    (this.year() - hooks(eras[i].since).year()) * dir +\n                    eras[i].offset\n                );\n            }\n        }\n\n        return this.year();\n    }\n\n    function erasNameRegex(isStrict) {\n        if (!hasOwnProp(this, '_erasNameRegex')) {\n            computeErasParse.call(this);\n        }\n        return isStrict ? this._erasNameRegex : this._erasRegex;\n    }\n\n    function erasAbbrRegex(isStrict) {\n        if (!hasOwnProp(this, '_erasAbbrRegex')) {\n            computeErasParse.call(this);\n        }\n        return isStrict ? this._erasAbbrRegex : this._erasRegex;\n    }\n\n    function erasNarrowRegex(isStrict) {\n        if (!hasOwnProp(this, '_erasNarrowRegex')) {\n            computeErasParse.call(this);\n        }\n        return isStrict ? this._erasNarrowRegex : this._erasRegex;\n    }\n\n    function matchEraAbbr(isStrict, locale) {\n        return locale.erasAbbrRegex(isStrict);\n    }\n\n    function matchEraName(isStrict, locale) {\n        return locale.erasNameRegex(isStrict);\n    }\n\n    function matchEraNarrow(isStrict, locale) {\n        return locale.erasNarrowRegex(isStrict);\n    }\n\n    function matchEraYearOrdinal(isStrict, locale) {\n        return locale._eraYearOrdinalRegex || matchUnsigned;\n    }\n\n    function computeErasParse() {\n        var abbrPieces = [],\n            namePieces = [],\n            narrowPieces = [],\n            mixedPieces = [],\n            i,\n            l,\n            erasName,\n            erasAbbr,\n            erasNarrow,\n            eras = this.eras();\n\n        for (i = 0, l = eras.length; i < l; ++i) {\n            erasName = regexEscape(eras[i].name);\n            erasAbbr = regexEscape(eras[i].abbr);\n            erasNarrow = regexEscape(eras[i].narrow);\n\n            namePieces.push(erasName);\n            abbrPieces.push(erasAbbr);\n            narrowPieces.push(erasNarrow);\n            mixedPieces.push(erasName);\n            mixedPieces.push(erasAbbr);\n            mixedPieces.push(erasNarrow);\n        }\n\n        this._erasRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n        this._erasNameRegex = new RegExp('^(' + namePieces.join('|') + ')', 'i');\n        this._erasAbbrRegex = new RegExp('^(' + abbrPieces.join('|') + ')', 'i');\n        this._erasNarrowRegex = new RegExp(\n            '^(' + narrowPieces.join('|') + ')',\n            'i'\n        );\n    }\n\n    // FORMATTING\n\n    addFormatToken(0, ['gg', 2], 0, function () {\n        return this.weekYear() % 100;\n    });\n\n    addFormatToken(0, ['GG', 2], 0, function () {\n        return this.isoWeekYear() % 100;\n    });\n\n    function addWeekYearFormatToken(token, getter) {\n        addFormatToken(0, [token, token.length], 0, getter);\n    }\n\n    addWeekYearFormatToken('gggg', 'weekYear');\n    addWeekYearFormatToken('ggggg', 'weekYear');\n    addWeekYearFormatToken('GGGG', 'isoWeekYear');\n    addWeekYearFormatToken('GGGGG', 'isoWeekYear');\n\n    // ALIASES\n\n    // PARSING\n\n    addRegexToken('G', matchSigned);\n    addRegexToken('g', matchSigned);\n    addRegexToken('GG', match1to2, match2);\n    addRegexToken('gg', match1to2, match2);\n    addRegexToken('GGGG', match1to4, match4);\n    addRegexToken('gggg', match1to4, match4);\n    addRegexToken('GGGGG', match1to6, match6);\n    addRegexToken('ggggg', match1to6, match6);\n\n    addWeekParseToken(\n        ['gggg', 'ggggg', 'GGGG', 'GGGGG'],\n        function (input, week, config, token) {\n            week[token.substr(0, 2)] = toInt(input);\n        }\n    );\n\n    addWeekParseToken(['gg', 'GG'], function (input, week, config, token) {\n        week[token] = hooks.parseTwoDigitYear(input);\n    });\n\n    // MOMENTS\n\n    function getSetWeekYear(input) {\n        return getSetWeekYearHelper.call(\n            this,\n            input,\n            this.week(),\n            this.weekday() + this.localeData()._week.dow,\n            this.localeData()._week.dow,\n            this.localeData()._week.doy\n        );\n    }\n\n    function getSetISOWeekYear(input) {\n        return getSetWeekYearHelper.call(\n            this,\n            input,\n            this.isoWeek(),\n            this.isoWeekday(),\n            1,\n            4\n        );\n    }\n\n    function getISOWeeksInYear() {\n        return weeksInYear(this.year(), 1, 4);\n    }\n\n    function getISOWeeksInISOWeekYear() {\n        return weeksInYear(this.isoWeekYear(), 1, 4);\n    }\n\n    function getWeeksInYear() {\n        var weekInfo = this.localeData()._week;\n        return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy);\n    }\n\n    function getWeeksInWeekYear() {\n        var weekInfo = this.localeData()._week;\n        return weeksInYear(this.weekYear(), weekInfo.dow, weekInfo.doy);\n    }\n\n    function getSetWeekYearHelper(input, week, weekday, dow, doy) {\n        var weeksTarget;\n        if (input == null) {\n            return weekOfYear(this, dow, doy).year;\n        } else {\n            weeksTarget = weeksInYear(input, dow, doy);\n            if (week > weeksTarget) {\n                week = weeksTarget;\n            }\n            return setWeekAll.call(this, input, week, weekday, dow, doy);\n        }\n    }\n\n    function setWeekAll(weekYear, week, weekday, dow, doy) {\n        var dayOfYearData = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy),\n            date = createUTCDate(dayOfYearData.year, 0, dayOfYearData.dayOfYear);\n\n        this.year(date.getUTCFullYear());\n        this.month(date.getUTCMonth());\n        this.date(date.getUTCDate());\n        return this;\n    }\n\n    // FORMATTING\n\n    addFormatToken('Q', 0, 'Qo', 'quarter');\n\n    // PARSING\n\n    addRegexToken('Q', match1);\n    addParseToken('Q', function (input, array) {\n        array[MONTH] = (toInt(input) - 1) * 3;\n    });\n\n    // MOMENTS\n\n    function getSetQuarter(input) {\n        return input == null\n            ? Math.ceil((this.month() + 1) / 3)\n            : this.month((input - 1) * 3 + (this.month() % 3));\n    }\n\n    // FORMATTING\n\n    addFormatToken('D', ['DD', 2], 'Do', 'date');\n\n    // PARSING\n\n    addRegexToken('D', match1to2, match1to2NoLeadingZero);\n    addRegexToken('DD', match1to2, match2);\n    addRegexToken('Do', function (isStrict, locale) {\n        // TODO: Remove \"ordinalParse\" fallback in next major release.\n        return isStrict\n            ? locale._dayOfMonthOrdinalParse || locale._ordinalParse\n            : locale._dayOfMonthOrdinalParseLenient;\n    });\n\n    addParseToken(['D', 'DD'], DATE);\n    addParseToken('Do', function (input, array) {\n        array[DATE] = toInt(input.match(match1to2)[0]);\n    });\n\n    // MOMENTS\n\n    var getSetDayOfMonth = makeGetSet('Date', true);\n\n    // FORMATTING\n\n    addFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear');\n\n    // PARSING\n\n    addRegexToken('DDD', match1to3);\n    addRegexToken('DDDD', match3);\n    addParseToken(['DDD', 'DDDD'], function (input, array, config) {\n        config._dayOfYear = toInt(input);\n    });\n\n    // HELPERS\n\n    // MOMENTS\n\n    function getSetDayOfYear(input) {\n        var dayOfYear =\n            Math.round(\n                (this.clone().startOf('day') - this.clone().startOf('year')) / 864e5\n            ) + 1;\n        return input == null ? dayOfYear : this.add(input - dayOfYear, 'd');\n    }\n\n    // FORMATTING\n\n    addFormatToken('m', ['mm', 2], 0, 'minute');\n\n    // PARSING\n\n    addRegexToken('m', match1to2, match1to2HasZero);\n    addRegexToken('mm', match1to2, match2);\n    addParseToken(['m', 'mm'], MINUTE);\n\n    // MOMENTS\n\n    var getSetMinute = makeGetSet('Minutes', false);\n\n    // FORMATTING\n\n    addFormatToken('s', ['ss', 2], 0, 'second');\n\n    // PARSING\n\n    addRegexToken('s', match1to2, match1to2HasZero);\n    addRegexToken('ss', match1to2, match2);\n    addParseToken(['s', 'ss'], SECOND);\n\n    // MOMENTS\n\n    var getSetSecond = makeGetSet('Seconds', false);\n\n    // FORMATTING\n\n    addFormatToken('S', 0, 0, function () {\n        return ~~(this.millisecond() / 100);\n    });\n\n    addFormatToken(0, ['SS', 2], 0, function () {\n        return ~~(this.millisecond() / 10);\n    });\n\n    addFormatToken(0, ['SSS', 3], 0, 'millisecond');\n    addFormatToken(0, ['SSSS', 4], 0, function () {\n        return this.millisecond() * 10;\n    });\n    addFormatToken(0, ['SSSSS', 5], 0, function () {\n        return this.millisecond() * 100;\n    });\n    addFormatToken(0, ['SSSSSS', 6], 0, function () {\n        return this.millisecond() * 1000;\n    });\n    addFormatToken(0, ['SSSSSSS', 7], 0, function () {\n        return this.millisecond() * 10000;\n    });\n    addFormatToken(0, ['SSSSSSSS', 8], 0, function () {\n        return this.millisecond() * 100000;\n    });\n    addFormatToken(0, ['SSSSSSSSS', 9], 0, function () {\n        return this.millisecond() * 1000000;\n    });\n\n    // PARSING\n\n    addRegexToken('S', match1to3, match1);\n    addRegexToken('SS', match1to3, match2);\n    addRegexToken('SSS', match1to3, match3);\n\n    var token, getSetMillisecond;\n    for (token = 'SSSS'; token.length <= 9; token += 'S') {\n        addRegexToken(token, matchUnsigned);\n    }\n\n    function parseMs(input, array) {\n        array[MILLISECOND] = toInt(('0.' + input) * 1000);\n    }\n\n    for (token = 'S'; token.length <= 9; token += 'S') {\n        addParseToken(token, parseMs);\n    }\n\n    getSetMillisecond = makeGetSet('Milliseconds', false);\n\n    // FORMATTING\n\n    addFormatToken('z', 0, 0, 'zoneAbbr');\n    addFormatToken('zz', 0, 0, 'zoneName');\n\n    // MOMENTS\n\n    function getZoneAbbr() {\n        return this._isUTC ? 'UTC' : '';\n    }\n\n    function getZoneName() {\n        return this._isUTC ? 'Coordinated Universal Time' : '';\n    }\n\n    var proto = Moment.prototype;\n\n    proto.add = add;\n    proto.calendar = calendar$1;\n    proto.clone = clone;\n    proto.diff = diff;\n    proto.endOf = endOf;\n    proto.format = format;\n    proto.from = from;\n    proto.fromNow = fromNow;\n    proto.to = to;\n    proto.toNow = toNow;\n    proto.get = stringGet;\n    proto.invalidAt = invalidAt;\n    proto.isAfter = isAfter;\n    proto.isBefore = isBefore;\n    proto.isBetween = isBetween;\n    proto.isSame = isSame;\n    proto.isSameOrAfter = isSameOrAfter;\n    proto.isSameOrBefore = isSameOrBefore;\n    proto.isValid = isValid$2;\n    proto.lang = lang;\n    proto.locale = locale;\n    proto.localeData = localeData;\n    proto.max = prototypeMax;\n    proto.min = prototypeMin;\n    proto.parsingFlags = parsingFlags;\n    proto.set = stringSet;\n    proto.startOf = startOf;\n    proto.subtract = subtract;\n    proto.toArray = toArray;\n    proto.toObject = toObject;\n    proto.toDate = toDate;\n    proto.toISOString = toISOString;\n    proto.inspect = inspect;\n    if (typeof Symbol !== 'undefined' && Symbol.for != null) {\n        proto[Symbol.for('nodejs.util.inspect.custom')] = function () {\n            return 'Moment<' + this.format() + '>';\n        };\n    }\n    proto.toJSON = toJSON;\n    proto.toString = toString;\n    proto.unix = unix;\n    proto.valueOf = valueOf;\n    proto.creationData = creationData;\n    proto.eraName = getEraName;\n    proto.eraNarrow = getEraNarrow;\n    proto.eraAbbr = getEraAbbr;\n    proto.eraYear = getEraYear;\n    proto.year = getSetYear;\n    proto.isLeapYear = getIsLeapYear;\n    proto.weekYear = getSetWeekYear;\n    proto.isoWeekYear = getSetISOWeekYear;\n    proto.quarter = proto.quarters = getSetQuarter;\n    proto.month = getSetMonth;\n    proto.daysInMonth = getDaysInMonth;\n    proto.week = proto.weeks = getSetWeek;\n    proto.isoWeek = proto.isoWeeks = getSetISOWeek;\n    proto.weeksInYear = getWeeksInYear;\n    proto.weeksInWeekYear = getWeeksInWeekYear;\n    proto.isoWeeksInYear = getISOWeeksInYear;\n    proto.isoWeeksInISOWeekYear = getISOWeeksInISOWeekYear;\n    proto.date = getSetDayOfMonth;\n    proto.day = proto.days = getSetDayOfWeek;\n    proto.weekday = getSetLocaleDayOfWeek;\n    proto.isoWeekday = getSetISODayOfWeek;\n    proto.dayOfYear = getSetDayOfYear;\n    proto.hour = proto.hours = getSetHour;\n    proto.minute = proto.minutes = getSetMinute;\n    proto.second = proto.seconds = getSetSecond;\n    proto.millisecond = proto.milliseconds = getSetMillisecond;\n    proto.utcOffset = getSetOffset;\n    proto.utc = setOffsetToUTC;\n    proto.local = setOffsetToLocal;\n    proto.parseZone = setOffsetToParsedOffset;\n    proto.hasAlignedHourOffset = hasAlignedHourOffset;\n    proto.isDST = isDaylightSavingTime;\n    proto.isLocal = isLocal;\n    proto.isUtcOffset = isUtcOffset;\n    proto.isUtc = isUtc;\n    proto.isUTC = isUtc;\n    proto.zoneAbbr = getZoneAbbr;\n    proto.zoneName = getZoneName;\n    proto.dates = deprecate(\n        'dates accessor is deprecated. Use date instead.',\n        getSetDayOfMonth\n    );\n    proto.months = deprecate(\n        'months accessor is deprecated. Use month instead',\n        getSetMonth\n    );\n    proto.years = deprecate(\n        'years accessor is deprecated. Use year instead',\n        getSetYear\n    );\n    proto.zone = deprecate(\n        'moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/',\n        getSetZone\n    );\n    proto.isDSTShifted = deprecate(\n        'isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information',\n        isDaylightSavingTimeShifted\n    );\n\n    function createUnix(input) {\n        return createLocal(input * 1000);\n    }\n\n    function createInZone() {\n        return createLocal.apply(null, arguments).parseZone();\n    }\n\n    function preParsePostFormat(string) {\n        return string;\n    }\n\n    var proto$1 = Locale.prototype;\n\n    proto$1.calendar = calendar;\n    proto$1.longDateFormat = longDateFormat;\n    proto$1.invalidDate = invalidDate;\n    proto$1.ordinal = ordinal;\n    proto$1.preparse = preParsePostFormat;\n    proto$1.postformat = preParsePostFormat;\n    proto$1.relativeTime = relativeTime;\n    proto$1.pastFuture = pastFuture;\n    proto$1.set = set;\n    proto$1.eras = localeEras;\n    proto$1.erasParse = localeErasParse;\n    proto$1.erasConvertYear = localeErasConvertYear;\n    proto$1.erasAbbrRegex = erasAbbrRegex;\n    proto$1.erasNameRegex = erasNameRegex;\n    proto$1.erasNarrowRegex = erasNarrowRegex;\n\n    proto$1.months = localeMonths;\n    proto$1.monthsShort = localeMonthsShort;\n    proto$1.monthsParse = localeMonthsParse;\n    proto$1.monthsRegex = monthsRegex;\n    proto$1.monthsShortRegex = monthsShortRegex;\n    proto$1.week = localeWeek;\n    proto$1.firstDayOfYear = localeFirstDayOfYear;\n    proto$1.firstDayOfWeek = localeFirstDayOfWeek;\n\n    proto$1.weekdays = localeWeekdays;\n    proto$1.weekdaysMin = localeWeekdaysMin;\n    proto$1.weekdaysShort = localeWeekdaysShort;\n    proto$1.weekdaysParse = localeWeekdaysParse;\n\n    proto$1.weekdaysRegex = weekdaysRegex;\n    proto$1.weekdaysShortRegex = weekdaysShortRegex;\n    proto$1.weekdaysMinRegex = weekdaysMinRegex;\n\n    proto$1.isPM = localeIsPM;\n    proto$1.meridiem = localeMeridiem;\n\n    function get$1(format, index, field, setter) {\n        var locale = getLocale(),\n            utc = createUTC().set(setter, index);\n        return locale[field](utc, format);\n    }\n\n    function listMonthsImpl(format, index, field) {\n        if (isNumber(format)) {\n            index = format;\n            format = undefined;\n        }\n\n        format = format || '';\n\n        if (index != null) {\n            return get$1(format, index, field, 'month');\n        }\n\n        var i,\n            out = [];\n        for (i = 0; i < 12; i++) {\n            out[i] = get$1(format, i, field, 'month');\n        }\n        return out;\n    }\n\n    // ()\n    // (5)\n    // (fmt, 5)\n    // (fmt)\n    // (true)\n    // (true, 5)\n    // (true, fmt, 5)\n    // (true, fmt)\n    function listWeekdaysImpl(localeSorted, format, index, field) {\n        if (typeof localeSorted === 'boolean') {\n            if (isNumber(format)) {\n                index = format;\n                format = undefined;\n            }\n\n            format = format || '';\n        } else {\n            format = localeSorted;\n            index = format;\n            localeSorted = false;\n\n            if (isNumber(format)) {\n                index = format;\n                format = undefined;\n            }\n\n            format = format || '';\n        }\n\n        var locale = getLocale(),\n            shift = localeSorted ? locale._week.dow : 0,\n            i,\n            out = [];\n\n        if (index != null) {\n            return get$1(format, (index + shift) % 7, field, 'day');\n        }\n\n        for (i = 0; i < 7; i++) {\n            out[i] = get$1(format, (i + shift) % 7, field, 'day');\n        }\n        return out;\n    }\n\n    function listMonths(format, index) {\n        return listMonthsImpl(format, index, 'months');\n    }\n\n    function listMonthsShort(format, index) {\n        return listMonthsImpl(format, index, 'monthsShort');\n    }\n\n    function listWeekdays(localeSorted, format, index) {\n        return listWeekdaysImpl(localeSorted, format, index, 'weekdays');\n    }\n\n    function listWeekdaysShort(localeSorted, format, index) {\n        return listWeekdaysImpl(localeSorted, format, index, 'weekdaysShort');\n    }\n\n    function listWeekdaysMin(localeSorted, format, index) {\n        return listWeekdaysImpl(localeSorted, format, index, 'weekdaysMin');\n    }\n\n    getSetGlobalLocale('en', {\n        eras: [\n            {\n                since: '0001-01-01',\n                until: +Infinity,\n                offset: 1,\n                name: 'Anno Domini',\n                narrow: 'AD',\n                abbr: 'AD',\n            },\n            {\n                since: '0000-12-31',\n                until: -Infinity,\n                offset: 1,\n                name: 'Before Christ',\n                narrow: 'BC',\n                abbr: 'BC',\n            },\n        ],\n        dayOfMonthOrdinalParse: /\\d{1,2}(th|st|nd|rd)/,\n        ordinal: function (number) {\n            var b = number % 10,\n                output =\n                    toInt((number % 100) / 10) === 1\n                        ? 'th'\n                        : b === 1\n                          ? 'st'\n                          : b === 2\n                            ? 'nd'\n                            : b === 3\n                              ? 'rd'\n                              : 'th';\n            return number + output;\n        },\n    });\n\n    // Side effect imports\n\n    hooks.lang = deprecate(\n        'moment.lang is deprecated. Use moment.locale instead.',\n        getSetGlobalLocale\n    );\n    hooks.langData = deprecate(\n        'moment.langData is deprecated. Use moment.localeData instead.',\n        getLocale\n    );\n\n    var mathAbs = Math.abs;\n\n    function abs() {\n        var data = this._data;\n\n        this._milliseconds = mathAbs(this._milliseconds);\n        this._days = mathAbs(this._days);\n        this._months = mathAbs(this._months);\n\n        data.milliseconds = mathAbs(data.milliseconds);\n        data.seconds = mathAbs(data.seconds);\n        data.minutes = mathAbs(data.minutes);\n        data.hours = mathAbs(data.hours);\n        data.months = mathAbs(data.months);\n        data.years = mathAbs(data.years);\n\n        return this;\n    }\n\n    function addSubtract$1(duration, input, value, direction) {\n        var other = createDuration(input, value);\n\n        duration._milliseconds += direction * other._milliseconds;\n        duration._days += direction * other._days;\n        duration._months += direction * other._months;\n\n        return duration._bubble();\n    }\n\n    // supports only 2.0-style add(1, 's') or add(duration)\n    function add$1(input, value) {\n        return addSubtract$1(this, input, value, 1);\n    }\n\n    // supports only 2.0-style subtract(1, 's') or subtract(duration)\n    function subtract$1(input, value) {\n        return addSubtract$1(this, input, value, -1);\n    }\n\n    function absCeil(number) {\n        if (number < 0) {\n            return Math.floor(number);\n        } else {\n            return Math.ceil(number);\n        }\n    }\n\n    function bubble() {\n        var milliseconds = this._milliseconds,\n            days = this._days,\n            months = this._months,\n            data = this._data,\n            seconds,\n            minutes,\n            hours,\n            years,\n            monthsFromDays;\n\n        // if we have a mix of positive and negative values, bubble down first\n        // check: https://github.com/moment/moment/issues/2166\n        if (\n            !(\n                (milliseconds >= 0 && days >= 0 && months >= 0) ||\n                (milliseconds <= 0 && days <= 0 && months <= 0)\n            )\n        ) {\n            milliseconds += absCeil(monthsToDays(months) + days) * 864e5;\n            days = 0;\n            months = 0;\n        }\n\n        // The following code bubbles up values, see the tests for\n        // examples of what that means.\n        data.milliseconds = milliseconds % 1000;\n\n        seconds = absFloor(milliseconds / 1000);\n        data.seconds = seconds % 60;\n\n        minutes = absFloor(seconds / 60);\n        data.minutes = minutes % 60;\n\n        hours = absFloor(minutes / 60);\n        data.hours = hours % 24;\n\n        days += absFloor(hours / 24);\n\n        // convert days to months\n        monthsFromDays = absFloor(daysToMonths(days));\n        months += monthsFromDays;\n        days -= absCeil(monthsToDays(monthsFromDays));\n\n        // 12 months -> 1 year\n        years = absFloor(months / 12);\n        months %= 12;\n\n        data.days = days;\n        data.months = months;\n        data.years = years;\n\n        return this;\n    }\n\n    function daysToMonths(days) {\n        // 400 years have 146097 days (taking into account leap year rules)\n        // 400 years have 12 months === 4800\n        return (days * 4800) / 146097;\n    }\n\n    function monthsToDays(months) {\n        // the reverse of daysToMonths\n        return (months * 146097) / 4800;\n    }\n\n    function as(units) {\n        if (!this.isValid()) {\n            return NaN;\n        }\n        var days,\n            months,\n            milliseconds = this._milliseconds;\n\n        units = normalizeUnits(units);\n\n        if (units === 'month' || units === 'quarter' || units === 'year') {\n            days = this._days + milliseconds / 864e5;\n            months = this._months + daysToMonths(days);\n            switch (units) {\n                case 'month':\n                    return months;\n                case 'quarter':\n                    return months / 3;\n                case 'year':\n                    return months / 12;\n            }\n        } else {\n            // handle milliseconds separately because of floating point math errors (issue #1867)\n            days = this._days + Math.round(monthsToDays(this._months));\n            switch (units) {\n                case 'week':\n                    return days / 7 + milliseconds / 6048e5;\n                case 'day':\n                    return days + milliseconds / 864e5;\n                case 'hour':\n                    return days * 24 + milliseconds / 36e5;\n                case 'minute':\n                    return days * 1440 + milliseconds / 6e4;\n                case 'second':\n                    return days * 86400 + milliseconds / 1000;\n                // Math.floor prevents floating point math errors here\n                case 'millisecond':\n                    return Math.floor(days * 864e5) + milliseconds;\n                default:\n                    throw new Error('Unknown unit ' + units);\n            }\n        }\n    }\n\n    function makeAs(alias) {\n        return function () {\n            return this.as(alias);\n        };\n    }\n\n    var asMilliseconds = makeAs('ms'),\n        asSeconds = makeAs('s'),\n        asMinutes = makeAs('m'),\n        asHours = makeAs('h'),\n        asDays = makeAs('d'),\n        asWeeks = makeAs('w'),\n        asMonths = makeAs('M'),\n        asQuarters = makeAs('Q'),\n        asYears = makeAs('y'),\n        valueOf$1 = asMilliseconds;\n\n    function clone$1() {\n        return createDuration(this);\n    }\n\n    function get$2(units) {\n        units = normalizeUnits(units);\n        return this.isValid() ? this[units + 's']() : NaN;\n    }\n\n    function makeGetter(name) {\n        return function () {\n            return this.isValid() ? this._data[name] : NaN;\n        };\n    }\n\n    var milliseconds = makeGetter('milliseconds'),\n        seconds = makeGetter('seconds'),\n        minutes = makeGetter('minutes'),\n        hours = makeGetter('hours'),\n        days = makeGetter('days'),\n        months = makeGetter('months'),\n        years = makeGetter('years');\n\n    function weeks() {\n        return absFloor(this.days() / 7);\n    }\n\n    var round = Math.round,\n        thresholds = {\n            ss: 44, // a few seconds to seconds\n            s: 45, // seconds to minute\n            m: 45, // minutes to hour\n            h: 22, // hours to day\n            d: 26, // days to month/week\n            w: null, // weeks to month\n            M: 11, // months to year\n        };\n\n    // helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize\n    function substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) {\n        return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture);\n    }\n\n    function relativeTime$1(posNegDuration, withoutSuffix, thresholds, locale) {\n        var duration = createDuration(posNegDuration).abs(),\n            seconds = round(duration.as('s')),\n            minutes = round(duration.as('m')),\n            hours = round(duration.as('h')),\n            days = round(duration.as('d')),\n            months = round(duration.as('M')),\n            weeks = round(duration.as('w')),\n            years = round(duration.as('y')),\n            a =\n                (seconds <= thresholds.ss && ['s', seconds]) ||\n                (seconds < thresholds.s && ['ss', seconds]) ||\n                (minutes <= 1 && ['m']) ||\n                (minutes < thresholds.m && ['mm', minutes]) ||\n                (hours <= 1 && ['h']) ||\n                (hours < thresholds.h && ['hh', hours]) ||\n                (days <= 1 && ['d']) ||\n                (days < thresholds.d && ['dd', days]);\n\n        if (thresholds.w != null) {\n            a =\n                a ||\n                (weeks <= 1 && ['w']) ||\n                (weeks < thresholds.w && ['ww', weeks]);\n        }\n        a = a ||\n            (months <= 1 && ['M']) ||\n            (months < thresholds.M && ['MM', months]) ||\n            (years <= 1 && ['y']) || ['yy', years];\n\n        a[2] = withoutSuffix;\n        a[3] = +posNegDuration > 0;\n        a[4] = locale;\n        return substituteTimeAgo.apply(null, a);\n    }\n\n    // This function allows you to set the rounding function for relative time strings\n    function getSetRelativeTimeRounding(roundingFunction) {\n        if (roundingFunction === undefined) {\n            return round;\n        }\n        if (typeof roundingFunction === 'function') {\n            round = roundingFunction;\n            return true;\n        }\n        return false;\n    }\n\n    // This function allows you to set a threshold for relative time strings\n    function getSetRelativeTimeThreshold(threshold, limit) {\n        if (thresholds[threshold] === undefined) {\n            return false;\n        }\n        if (limit === undefined) {\n            return thresholds[threshold];\n        }\n        thresholds[threshold] = limit;\n        if (threshold === 's') {\n            thresholds.ss = limit - 1;\n        }\n        return true;\n    }\n\n    function humanize(argWithSuffix, argThresholds) {\n        if (!this.isValid()) {\n            return this.localeData().invalidDate();\n        }\n\n        var withSuffix = false,\n            th = thresholds,\n            locale,\n            output;\n\n        if (typeof argWithSuffix === 'object') {\n            argThresholds = argWithSuffix;\n            argWithSuffix = false;\n        }\n        if (typeof argWithSuffix === 'boolean') {\n            withSuffix = argWithSuffix;\n        }\n        if (typeof argThresholds === 'object') {\n            th = Object.assign({}, thresholds, argThresholds);\n            if (argThresholds.s != null && argThresholds.ss == null) {\n                th.ss = argThresholds.s - 1;\n            }\n        }\n\n        locale = this.localeData();\n        output = relativeTime$1(this, !withSuffix, th, locale);\n\n        if (withSuffix) {\n            output = locale.pastFuture(+this, output);\n        }\n\n        return locale.postformat(output);\n    }\n\n    var abs$1 = Math.abs;\n\n    function sign(x) {\n        return (x > 0) - (x < 0) || +x;\n    }\n\n    function toISOString$1() {\n        // for ISO strings we do not use the normal bubbling rules:\n        //  * milliseconds bubble up until they become hours\n        //  * days do not bubble at all\n        //  * months bubble up until they become years\n        // This is because there is no context-free conversion between hours and days\n        // (think of clock changes)\n        // and also not between days and months (28-31 days per month)\n        if (!this.isValid()) {\n            return this.localeData().invalidDate();\n        }\n\n        var seconds = abs$1(this._milliseconds) / 1000,\n            days = abs$1(this._days),\n            months = abs$1(this._months),\n            minutes,\n            hours,\n            years,\n            s,\n            total = this.asSeconds(),\n            totalSign,\n            ymSign,\n            daysSign,\n            hmsSign;\n\n        if (!total) {\n            // this is the same as C#'s (Noda) and python (isodate)...\n            // but not other JS (goog.date)\n            return 'P0D';\n        }\n\n        // 3600 seconds -> 60 minutes -> 1 hour\n        minutes = absFloor(seconds / 60);\n        hours = absFloor(minutes / 60);\n        seconds %= 60;\n        minutes %= 60;\n\n        // 12 months -> 1 year\n        years = absFloor(months / 12);\n        months %= 12;\n\n        // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js\n        s = seconds ? seconds.toFixed(3).replace(/\\.?0+$/, '') : '';\n\n        totalSign = total < 0 ? '-' : '';\n        ymSign = sign(this._months) !== sign(total) ? '-' : '';\n        daysSign = sign(this._days) !== sign(total) ? '-' : '';\n        hmsSign = sign(this._milliseconds) !== sign(total) ? '-' : '';\n\n        return (\n            totalSign +\n            'P' +\n            (years ? ymSign + years + 'Y' : '') +\n            (months ? ymSign + months + 'M' : '') +\n            (days ? daysSign + days + 'D' : '') +\n            (hours || minutes || seconds ? 'T' : '') +\n            (hours ? hmsSign + hours + 'H' : '') +\n            (minutes ? hmsSign + minutes + 'M' : '') +\n            (seconds ? hmsSign + s + 'S' : '')\n        );\n    }\n\n    var proto$2 = Duration.prototype;\n\n    proto$2.isValid = isValid$1;\n    proto$2.abs = abs;\n    proto$2.add = add$1;\n    proto$2.subtract = subtract$1;\n    proto$2.as = as;\n    proto$2.asMilliseconds = asMilliseconds;\n    proto$2.asSeconds = asSeconds;\n    proto$2.asMinutes = asMinutes;\n    proto$2.asHours = asHours;\n    proto$2.asDays = asDays;\n    proto$2.asWeeks = asWeeks;\n    proto$2.asMonths = asMonths;\n    proto$2.asQuarters = asQuarters;\n    proto$2.asYears = asYears;\n    proto$2.valueOf = valueOf$1;\n    proto$2._bubble = bubble;\n    proto$2.clone = clone$1;\n    proto$2.get = get$2;\n    proto$2.milliseconds = milliseconds;\n    proto$2.seconds = seconds;\n    proto$2.minutes = minutes;\n    proto$2.hours = hours;\n    proto$2.days = days;\n    proto$2.weeks = weeks;\n    proto$2.months = months;\n    proto$2.years = years;\n    proto$2.humanize = humanize;\n    proto$2.toISOString = toISOString$1;\n    proto$2.toString = toISOString$1;\n    proto$2.toJSON = toISOString$1;\n    proto$2.locale = locale;\n    proto$2.localeData = localeData;\n\n    proto$2.toIsoString = deprecate(\n        'toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)',\n        toISOString$1\n    );\n    proto$2.lang = lang;\n\n    // FORMATTING\n\n    addFormatToken('X', 0, 0, 'unix');\n    addFormatToken('x', 0, 0, 'valueOf');\n\n    // PARSING\n\n    addRegexToken('x', matchSigned);\n    addRegexToken('X', matchTimestamp);\n    addParseToken('X', function (input, array, config) {\n        config._d = new Date(parseFloat(input) * 1000);\n    });\n    addParseToken('x', function (input, array, config) {\n        config._d = new Date(toInt(input));\n    });\n\n    //! moment.js\n\n    hooks.version = '2.30.1';\n\n    setHookCallback(createLocal);\n\n    hooks.fn = proto;\n    hooks.min = min;\n    hooks.max = max;\n    hooks.now = now;\n    hooks.utc = createUTC;\n    hooks.unix = createUnix;\n    hooks.months = listMonths;\n    hooks.isDate = isDate;\n    hooks.locale = getSetGlobalLocale;\n    hooks.invalid = createInvalid;\n    hooks.duration = createDuration;\n    hooks.isMoment = isMoment;\n    hooks.weekdays = listWeekdays;\n    hooks.parseZone = createInZone;\n    hooks.localeData = getLocale;\n    hooks.isDuration = isDuration;\n    hooks.monthsShort = listMonthsShort;\n    hooks.weekdaysMin = listWeekdaysMin;\n    hooks.defineLocale = defineLocale;\n    hooks.updateLocale = updateLocale;\n    hooks.locales = listLocales;\n    hooks.weekdaysShort = listWeekdaysShort;\n    hooks.normalizeUnits = normalizeUnits;\n    hooks.relativeTimeRounding = getSetRelativeTimeRounding;\n    hooks.relativeTimeThreshold = getSetRelativeTimeThreshold;\n    hooks.calendarFormat = getCalendarFormat;\n    hooks.prototype = proto;\n\n    // currently HTML5 input type only supports 24-hour formats\n    hooks.HTML5_FMT = {\n        DATETIME_LOCAL: 'YYYY-MM-DDTHH:mm', // <input type=\"datetime-local\" />\n        DATETIME_LOCAL_SECONDS: 'YYYY-MM-DDTHH:mm:ss', // <input type=\"datetime-local\" step=\"1\" />\n        DATETIME_LOCAL_MS: 'YYYY-MM-DDTHH:mm:ss.SSS', // <input type=\"datetime-local\" step=\"0.001\" />\n        DATE: 'YYYY-MM-DD', // <input type=\"date\" />\n        TIME: 'HH:mm', // <input type=\"time\" />\n        TIME_SECONDS: 'HH:mm:ss', // <input type=\"time\" step=\"1\" />\n        TIME_MS: 'HH:mm:ss.SSS', // <input type=\"time\" step=\"0.001\" />\n        WEEK: 'GGGG-[W]WW', // <input type=\"week\" />\n        MONTH: 'YYYY-MM', // <input type=\"month\" />\n    };\n\n    return hooks;\n\n})));\n","/*!\n * ngToast v2.0.0 (http://tameraydin.github.io/ngToast)\n * Copyright 2016 Tamer Aydin (http://tamerayd.in)\n * Licensed under MIT (http://tameraydin.mit-license.org/)\n */\n\n(function(window, angular, undefined) {\n  'use strict';\n\n  angular.module('ngToast.provider', [])\n    .provider('ngToast', [\n      function() {\n        var messages = [],\n            messageStack = [];\n\n        var defaults = {\n          animation: false,\n          className: 'success',\n          additionalClasses: null,\n          dismissOnTimeout: true,\n          timeout: 4000,\n          dismissButton: false,\n          dismissButtonHtml: '&times;',\n          dismissOnClick: true,\n          onDismiss: null,\n          compileContent: false,\n          combineDuplications: false,\n          horizontalPosition: 'right', // right, center, left\n          verticalPosition: 'top', // top, bottom,\n          maxNumber: 0,\n          newestOnTop: true\n        };\n\n        function Message(msg) {\n          var id = Math.floor(Math.random()*1000);\n          while (messages.indexOf(id) > -1) {\n            id = Math.floor(Math.random()*1000);\n          }\n\n          this.id = id;\n          this.count = 0;\n          this.animation = defaults.animation;\n          this.className = defaults.className;\n          this.additionalClasses = defaults.additionalClasses;\n          this.dismissOnTimeout = defaults.dismissOnTimeout;\n          this.timeout = defaults.timeout;\n          this.dismissButton = defaults.dismissButton;\n          this.dismissButtonHtml = defaults.dismissButtonHtml;\n          this.dismissOnClick = defaults.dismissOnClick;\n          this.onDismiss = defaults.onDismiss;\n          this.compileContent = defaults.compileContent;\n\n          angular.extend(this, msg);\n        }\n\n        this.configure = function(config) {\n          angular.extend(defaults, config);\n        };\n\n        this.$get = [function() {\n          var _createWithClassName = function(className, msg) {\n            msg = (typeof msg === 'object') ? msg : {content: msg};\n            msg.className = className;\n\n            return this.create(msg);\n          };\n\n          return {\n            settings: defaults,\n            messages: messages,\n            dismiss: function(id) {\n              if (id) {\n                for (var i = messages.length - 1; i >= 0; i--) {\n                  if (messages[i].id === id) {\n                    messages.splice(i, 1);\n                    messageStack.splice(messageStack.indexOf(id), 1);\n                    return;\n                  }\n                }\n\n              } else {\n                while(messages.length > 0) {\n                  messages.pop();\n                }\n                messageStack = [];\n              }\n            },\n            create: function(msg) {\n              msg = (typeof msg === 'object') ? msg : {content: msg};\n\n              if (defaults.combineDuplications) {\n                for (var i = messageStack.length - 1; i >= 0; i--) {\n                  var _msg = messages[i];\n                  var _className = msg.className || 'success';\n\n                  if (_msg.content === msg.content &&\n                      _msg.className === _className) {\n                    messages[i].count++;\n                    return;\n                  }\n                }\n              }\n\n              if (defaults.maxNumber > 0 &&\n                  messageStack.length >= defaults.maxNumber) {\n                this.dismiss(messageStack[0]);\n              }\n\n              var newMsg = new Message(msg);\n              messages[defaults.newestOnTop ? 'unshift' : 'push'](newMsg);\n              messageStack.push(newMsg.id);\n\n              return newMsg.id;\n            },\n            success: function(msg) {\n              return _createWithClassName.call(this, 'success', msg);\n            },\n            info: function(msg) {\n              return _createWithClassName.call(this, 'info', msg);\n            },\n            warning: function(msg) {\n              return _createWithClassName.call(this, 'warning', msg);\n            },\n            danger: function(msg) {\n              return _createWithClassName.call(this, 'danger', msg);\n            }\n          };\n        }];\n      }\n    ]);\n\n})(window, window.angular);\n\n(function(window, angular) {\n  'use strict';\n\n  angular.module('ngToast.directives', ['ngToast.provider'])\n    .run(['$templateCache',\n      function($templateCache) {\n        $templateCache.put('ngToast/toast.html',\n          '<div class=\"ng-toast ng-toast--{{hPos}} ng-toast--{{vPos}} {{animation ? \\'ng-toast--animate-\\' + animation : \\'\\'}}\">' +\n            '<ul class=\"ng-toast__list\">' +\n              '<toast-message ng-repeat=\"message in messages\" ' +\n                'message=\"message\" count=\"message.count\">' +\n                '<span ng-bind-html=\"message.content\"></span>' +\n              '</toast-message>' +\n            '</ul>' +\n          '</div>');\n        $templateCache.put('ngToast/toastMessage.html',\n          '<li class=\"ng-toast__message {{message.additionalClasses}}\"' +\n            'ng-mouseenter=\"onMouseEnter()\"' +\n            'ng-mouseleave=\"onMouseLeave()\">' +\n            '<div class=\"alert alert-{{message.className}}\" ' +\n              'ng-class=\"{\\'alert-dismissible\\': message.dismissButton}\">' +\n              '<button type=\"button\" class=\"close\" ' +\n                'ng-if=\"message.dismissButton\" ' +\n                'ng-bind-html=\"message.dismissButtonHtml\" ' +\n                'ng-click=\"!message.dismissOnClick && dismiss()\">' +\n              '</button>' +\n              '<span ng-if=\"count\" class=\"ng-toast__message__count\">' +\n                '{{count + 1}}' +\n              '</span>' +\n              '<span ng-if=\"!message.compileContent\" ng-transclude></span>' +\n            '</div>' +\n          '</li>');\n      }\n    ])\n    .directive('toast', ['ngToast', '$templateCache', '$log',\n      function(ngToast, $templateCache, $log) {\n        return {\n          replace: true,\n          restrict: 'EA',\n          templateUrl: 'ngToast/toast.html',\n          compile: function(tElem, tAttrs) {\n            if (tAttrs.template) {\n              var template = $templateCache.get(tAttrs.template);\n              if (template) {\n                tElem.replaceWith(template);\n              } else {\n                $log.warn('ngToast: Provided template could not be loaded. ' +\n                  'Please be sure that it is populated before the <toast> element is represented.');\n              }\n            }\n\n            return function(scope) {\n              scope.hPos = ngToast.settings.horizontalPosition;\n              scope.vPos = ngToast.settings.verticalPosition;\n              scope.animation = ngToast.settings.animation;\n              scope.messages = ngToast.messages;\n            };\n          }\n        };\n      }\n    ])\n    .directive('toastMessage', ['$timeout', '$compile', 'ngToast',\n      function($timeout, $compile, ngToast) {\n        return {\n          replace: true,\n          transclude: true,\n          restrict: 'EA',\n          scope: {\n            message: '=',\n            count: '='\n          },\n          controller: ['$scope', 'ngToast', function($scope, ngToast) {\n            $scope.dismiss = function() {\n              ngToast.dismiss($scope.message.id);\n            };\n          }],\n          templateUrl: 'ngToast/toastMessage.html',\n          link: function(scope, element, attrs, ctrl, transclude) {\n            element.attr('data-message-id', scope.message.id);\n\n            var dismissTimeout;\n            var scopeToBind = scope.message.compileContent;\n\n            scope.cancelTimeout = function() {\n              $timeout.cancel(dismissTimeout);\n            };\n\n            scope.startTimeout = function() {\n              if (scope.message.dismissOnTimeout) {\n                dismissTimeout = $timeout(function() {\n                  ngToast.dismiss(scope.message.id);\n                }, scope.message.timeout);\n              }\n            };\n\n            scope.onMouseEnter = function() {\n              scope.cancelTimeout();\n            };\n\n            scope.onMouseLeave = function() {\n              scope.startTimeout();\n            };\n\n            if (scopeToBind) {\n              var transcludedEl;\n\n              transclude(scope, function(clone) {\n                transcludedEl = clone;\n                element.children().append(transcludedEl);\n              });\n\n              $timeout(function() {\n                $compile(transcludedEl.contents())\n                  (typeof scopeToBind === 'boolean' ?\n                    scope.$parent : scopeToBind, function(compiledClone) {\n                    transcludedEl.replaceWith(compiledClone);\n                  });\n              }, 0);\n            }\n\n            scope.startTimeout();\n\n            if (scope.message.dismissOnClick) {\n              element.bind('click', function() {\n                ngToast.dismiss(scope.message.id);\n                scope.$apply();\n              });\n            }\n\n            if (scope.message.onDismiss) {\n              scope.$on('$destroy',\n                scope.message.onDismiss.bind(scope.message));\n            }\n          }\n        };\n      }\n    ]);\n\n})(window, window.angular);\n\n(function(window, angular) {\n  'use strict';\n\n  angular\n    .module('ngToast', [\n      'ngSanitize',\n      'ngToast.directives',\n      'ngToast.provider'\n    ]);\n\n})(window, window.angular);\n","//     uuid.js\n//\n//     Copyright (c) 2010-2012 Robert Kieffer\n//     MIT License - http://opensource.org/licenses/mit-license.php\n\n/*global window, require, define */\n(function(_window) {\n  'use strict';\n\n  // Unique ID creation requires a high quality random # generator.  We feature\n  // detect to determine the best RNG source, normalizing to a function that\n  // returns 128-bits of randomness, since that's what's usually required\n  var _rng, _mathRNG, _nodeRNG, _whatwgRNG, _previousRoot;\n\n  function setupBrowser() {\n    // Allow for MSIE11 msCrypto\n    var _crypto = _window.crypto || _window.msCrypto;\n\n    if (!_rng && _crypto && _crypto.getRandomValues) {\n      // WHATWG crypto-based RNG - http://wiki.whatwg.org/wiki/Crypto\n      //\n      // Moderately fast, high quality\n      try {\n        var _rnds8 = new Uint8Array(16);\n        _whatwgRNG = _rng = function whatwgRNG() {\n          _crypto.getRandomValues(_rnds8);\n          return _rnds8;\n        };\n        _rng();\n      } catch(e) {}\n    }\n\n    if (!_rng) {\n      // Math.random()-based (RNG)\n      //\n      // If all else fails, use Math.random().  It's fast, but is of unspecified\n      // quality.\n      var  _rnds = new Array(16);\n      _mathRNG = _rng = function() {\n        for (var i = 0, r; i < 16; i++) {\n          if ((i & 0x03) === 0) { r = Math.random() * 0x100000000; }\n          _rnds[i] = r >>> ((i & 0x03) << 3) & 0xff;\n        }\n\n        return _rnds;\n      };\n      if ('undefined' !== typeof console && console.warn) {\n        console.warn(\"[SECURITY] node-uuid: crypto not usable, falling back to insecure Math.random()\");\n      }\n    }\n  }\n\n  function setupNode() {\n    // Node.js crypto-based RNG - http://nodejs.org/docs/v0.6.2/api/crypto.html\n    //\n    // Moderately fast, high quality\n    if ('function' === typeof require) {\n      try {\n        var _rb = require('crypto').randomBytes;\n        _nodeRNG = _rng = _rb && function() {return _rb(16);};\n        _rng();\n      } catch(e) {}\n    }\n  }\n\n  if (_window) {\n    setupBrowser();\n  } else {\n    setupNode();\n  }\n\n  // Buffer class to use\n  var BufferClass = ('function' === typeof Buffer) ? Buffer : Array;\n\n  // Maps for number <-> hex string conversion\n  var _byteToHex = [];\n  var _hexToByte = {};\n  for (var i = 0; i < 256; i++) {\n    _byteToHex[i] = (i + 0x100).toString(16).substr(1);\n    _hexToByte[_byteToHex[i]] = i;\n  }\n\n  // **`parse()` - Parse a UUID into it's component bytes**\n  function parse(s, buf, offset) {\n    var i = (buf && offset) || 0, ii = 0;\n\n    buf = buf || [];\n    s.toLowerCase().replace(/[0-9a-f]{2}/g, function(oct) {\n      if (ii < 16) { // Don't overflow!\n        buf[i + ii++] = _hexToByte[oct];\n      }\n    });\n\n    // Zero out remaining bytes if string was short\n    while (ii < 16) {\n      buf[i + ii++] = 0;\n    }\n\n    return buf;\n  }\n\n  // **`unparse()` - Convert UUID byte array (ala parse()) into a string**\n  function unparse(buf, offset) {\n    var i = offset || 0, bth = _byteToHex;\n    return  bth[buf[i++]] + bth[buf[i++]] +\n            bth[buf[i++]] + bth[buf[i++]] + '-' +\n            bth[buf[i++]] + bth[buf[i++]] + '-' +\n            bth[buf[i++]] + bth[buf[i++]] + '-' +\n            bth[buf[i++]] + bth[buf[i++]] + '-' +\n            bth[buf[i++]] + bth[buf[i++]] +\n            bth[buf[i++]] + bth[buf[i++]] +\n            bth[buf[i++]] + bth[buf[i++]];\n  }\n\n  // **`v1()` - Generate time-based UUID**\n  //\n  // Inspired by https://github.com/LiosK/UUID.js\n  // and http://docs.python.org/library/uuid.html\n\n  // random #'s we need to init node and clockseq\n  var _seedBytes = _rng();\n\n  // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1)\n  var _nodeId = [\n    _seedBytes[0] | 0x01,\n    _seedBytes[1], _seedBytes[2], _seedBytes[3], _seedBytes[4], _seedBytes[5]\n  ];\n\n  // Per 4.2.2, randomize (14 bit) clockseq\n  var _clockseq = (_seedBytes[6] << 8 | _seedBytes[7]) & 0x3fff;\n\n  // Previous uuid creation time\n  var _lastMSecs = 0, _lastNSecs = 0;\n\n  // See https://github.com/broofa/node-uuid for API details\n  function v1(options, buf, offset) {\n    var i = buf && offset || 0;\n    var b = buf || [];\n\n    options = options || {};\n\n    var clockseq = (options.clockseq != null) ? options.clockseq : _clockseq;\n\n    // UUID timestamps are 100 nano-second units since the Gregorian epoch,\n    // (1582-10-15 00:00).  JSNumbers aren't precise enough for this, so\n    // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs'\n    // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00.\n    var msecs = (options.msecs != null) ? options.msecs : new Date().getTime();\n\n    // Per 4.2.1.2, use count of uuid's generated during the current clock\n    // cycle to simulate higher resolution clock\n    var nsecs = (options.nsecs != null) ? options.nsecs : _lastNSecs + 1;\n\n    // Time since last uuid creation (in msecs)\n    var dt = (msecs - _lastMSecs) + (nsecs - _lastNSecs)/10000;\n\n    // Per 4.2.1.2, Bump clockseq on clock regression\n    if (dt < 0 && options.clockseq == null) {\n      clockseq = clockseq + 1 & 0x3fff;\n    }\n\n    // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new\n    // time interval\n    if ((dt < 0 || msecs > _lastMSecs) && options.nsecs == null) {\n      nsecs = 0;\n    }\n\n    // Per 4.2.1.2 Throw error if too many uuids are requested\n    if (nsecs >= 10000) {\n      throw new Error('uuid.v1(): Can\\'t create more than 10M uuids/sec');\n    }\n\n    _lastMSecs = msecs;\n    _lastNSecs = nsecs;\n    _clockseq = clockseq;\n\n    // Per 4.1.4 - Convert from unix epoch to Gregorian epoch\n    msecs += 12219292800000;\n\n    // `time_low`\n    var tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000;\n    b[i++] = tl >>> 24 & 0xff;\n    b[i++] = tl >>> 16 & 0xff;\n    b[i++] = tl >>> 8 & 0xff;\n    b[i++] = tl & 0xff;\n\n    // `time_mid`\n    var tmh = (msecs / 0x100000000 * 10000) & 0xfffffff;\n    b[i++] = tmh >>> 8 & 0xff;\n    b[i++] = tmh & 0xff;\n\n    // `time_high_and_version`\n    b[i++] = tmh >>> 24 & 0xf | 0x10; // include version\n    b[i++] = tmh >>> 16 & 0xff;\n\n    // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant)\n    b[i++] = clockseq >>> 8 | 0x80;\n\n    // `clock_seq_low`\n    b[i++] = clockseq & 0xff;\n\n    // `node`\n    var node = options.node || _nodeId;\n    for (var n = 0; n < 6; n++) {\n      b[i + n] = node[n];\n    }\n\n    return buf ? buf : unparse(b);\n  }\n\n  // **`v4()` - Generate random UUID**\n\n  // See https://github.com/broofa/node-uuid for API details\n  function v4(options, buf, offset) {\n    // Deprecated - 'format' argument, as supported in v1.2\n    var i = buf && offset || 0;\n\n    if (typeof(options) === 'string') {\n      buf = (options === 'binary') ? new BufferClass(16) : null;\n      options = null;\n    }\n    options = options || {};\n\n    var rnds = options.random || (options.rng || _rng)();\n\n    // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n    rnds[6] = (rnds[6] & 0x0f) | 0x40;\n    rnds[8] = (rnds[8] & 0x3f) | 0x80;\n\n    // Copy bytes to buffer, if provided\n    if (buf) {\n      for (var ii = 0; ii < 16; ii++) {\n        buf[i + ii] = rnds[ii];\n      }\n    }\n\n    return buf || unparse(rnds);\n  }\n\n  // Export public API\n  var uuid = v4;\n  uuid.v1 = v1;\n  uuid.v4 = v4;\n  uuid.parse = parse;\n  uuid.unparse = unparse;\n  uuid.BufferClass = BufferClass;\n  uuid._rng = _rng;\n  uuid._mathRNG = _mathRNG;\n  uuid._nodeRNG = _nodeRNG;\n  uuid._whatwgRNG = _whatwgRNG;\n\n  if (('undefined' !== typeof module) && module.exports) {\n    // Publish as node.js module\n    module.exports = uuid;\n  } else if (typeof define === 'function' && define.amd) {\n    // Publish as AMD module\n    define(function() {return uuid;});\n\n\n  } else {\n    // Publish as global (in browsers)\n    _previousRoot = _window.uuid;\n\n    // **`noConflict()` - (browser only) to reset global 'uuid' var**\n    uuid.noConflict = function() {\n      _window.uuid = _previousRoot;\n      return uuid;\n    };\n\n    _window.uuid = uuid;\n  }\n})('undefined' !== typeof window ? window : null);\n","// from https://github.com/indutny/self-signed/blob/gh-pages/lib/asn1.js\n// Fedor, you are amazing.\n\n'use strict';\n\nvar asn1 = require('asn1.js');\n\nexports.certificate = require('./certificate');\n\nvar RSAPrivateKey = asn1.define('RSAPrivateKey', function () {\n\tthis.seq().obj(\n\t\tthis.key('version')['int'](),\n\t\tthis.key('modulus')['int'](),\n\t\tthis.key('publicExponent')['int'](),\n\t\tthis.key('privateExponent')['int'](),\n\t\tthis.key('prime1')['int'](),\n\t\tthis.key('prime2')['int'](),\n\t\tthis.key('exponent1')['int'](),\n\t\tthis.key('exponent2')['int'](),\n\t\tthis.key('coefficient')['int']()\n\t);\n});\nexports.RSAPrivateKey = RSAPrivateKey;\n\nvar RSAPublicKey = asn1.define('RSAPublicKey', function () {\n\tthis.seq().obj(\n\t\tthis.key('modulus')['int'](),\n\t\tthis.key('publicExponent')['int']()\n\t);\n});\nexports.RSAPublicKey = RSAPublicKey;\n\nvar AlgorithmIdentifier = asn1.define('AlgorithmIdentifier', function () {\n\tthis.seq().obj(\n\t\tthis.key('algorithm').objid(),\n\t\tthis.key('none').null_().optional(),\n\t\tthis.key('curve').objid().optional(),\n\t\tthis.key('params').seq().obj(\n\t\t\tthis.key('p')['int'](),\n\t\t\tthis.key('q')['int'](),\n\t\t\tthis.key('g')['int']()\n\t\t).optional()\n\t);\n});\n\nvar PublicKey = asn1.define('SubjectPublicKeyInfo', function () {\n\tthis.seq().obj(\n\t\tthis.key('algorithm').use(AlgorithmIdentifier),\n\t\tthis.key('subjectPublicKey').bitstr()\n\t);\n});\nexports.PublicKey = PublicKey;\n\nvar PrivateKeyInfo = asn1.define('PrivateKeyInfo', function () {\n\tthis.seq().obj(\n\t\tthis.key('version')['int'](),\n\t\tthis.key('algorithm').use(AlgorithmIdentifier),\n\t\tthis.key('subjectPrivateKey').octstr()\n\t);\n});\nexports.PrivateKey = PrivateKeyInfo;\nvar EncryptedPrivateKeyInfo = asn1.define('EncryptedPrivateKeyInfo', function () {\n\tthis.seq().obj(\n\t\tthis.key('algorithm').seq().obj(\n\t\t\tthis.key('id').objid(),\n\t\t\tthis.key('decrypt').seq().obj(\n\t\t\t\tthis.key('kde').seq().obj(\n\t\t\t\t\tthis.key('id').objid(),\n\t\t\t\t\tthis.key('kdeparams').seq().obj(\n\t\t\t\t\t\tthis.key('salt').octstr(),\n\t\t\t\t\t\tthis.key('iters')['int']()\n\t\t\t\t\t)\n\t\t\t\t),\n\t\t\t\tthis.key('cipher').seq().obj(\n\t\t\t\t\tthis.key('algo').objid(),\n\t\t\t\t\tthis.key('iv').octstr()\n\t\t\t\t)\n\t\t\t)\n\t\t),\n\t\tthis.key('subjectPrivateKey').octstr()\n\t);\n});\n\nexports.EncryptedPrivateKey = EncryptedPrivateKeyInfo;\n\nvar DSAPrivateKey = asn1.define('DSAPrivateKey', function () {\n\tthis.seq().obj(\n\t\tthis.key('version')['int'](),\n\t\tthis.key('p')['int'](),\n\t\tthis.key('q')['int'](),\n\t\tthis.key('g')['int'](),\n\t\tthis.key('pub_key')['int'](),\n\t\tthis.key('priv_key')['int']()\n\t);\n});\nexports.DSAPrivateKey = DSAPrivateKey;\n\nexports.DSAparam = asn1.define('DSAparam', function () {\n\tthis['int']();\n});\n\nvar ECParameters = asn1.define('ECParameters', function () {\n\tthis.choice({\n\t\tnamedCurve: this.objid()\n\t});\n});\n\nvar ECPrivateKey = asn1.define('ECPrivateKey', function () {\n\tthis.seq().obj(\n\t\tthis.key('version')['int'](),\n\t\tthis.key('privateKey').octstr(),\n\t\tthis.key('parameters').optional().explicit(0).use(ECParameters),\n\t\tthis.key('publicKey').optional().explicit(1).bitstr()\n\t);\n});\nexports.ECPrivateKey = ECPrivateKey;\n\nexports.signature = asn1.define('signature', function () {\n\tthis.seq().obj(\n\t\tthis.key('r')['int'](),\n\t\tthis.key('s')['int']()\n\t);\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\tthis.choice({\n\t\tutcTime: this.utctime(),\n\t\tgeneralTime: this.gentime()\n\t});\n});\n\nvar AttributeTypeValue = asn.define('AttributeTypeValue', function () {\n\tthis.seq().obj(\n\t\tthis.key('type').objid(),\n\t\tthis.key('value').any()\n\t);\n});\n\nvar AlgorithmIdentifier = asn.define('AlgorithmIdentifier', function () {\n\tthis.seq().obj(\n\t\tthis.key('algorithm').objid(),\n\t\tthis.key('parameters').optional(),\n\t\tthis.key('curve').objid().optional()\n\t);\n});\n\nvar SubjectPublicKeyInfo = asn.define('SubjectPublicKeyInfo', function () {\n\tthis.seq().obj(\n\t\tthis.key('algorithm').use(AlgorithmIdentifier),\n\t\tthis.key('subjectPublicKey').bitstr()\n\t);\n});\n\nvar RelativeDistinguishedName = asn.define('RelativeDistinguishedName', function () {\n\tthis.setof(AttributeTypeValue);\n});\n\nvar RDNSequence = asn.define('RDNSequence', function () {\n\tthis.seqof(RelativeDistinguishedName);\n});\n\nvar Name = asn.define('Name', function () {\n\tthis.choice({\n\t\trdnSequence: this.use(RDNSequence)\n\t});\n});\n\nvar Validity = asn.define('Validity', function () {\n\tthis.seq().obj(\n\t\tthis.key('notBefore').use(Time),\n\t\tthis.key('notAfter').use(Time)\n\t);\n});\n\nvar Extension = asn.define('Extension', function () {\n\tthis.seq().obj(\n\t\tthis.key('extnID').objid(),\n\t\tthis.key('critical').bool().def(false),\n\t\tthis.key('extnValue').octstr()\n\t);\n});\n\nvar TBSCertificate = asn.define('TBSCertificate', function () {\n\tthis.seq().obj(\n\t\tthis.key('version').explicit(0)['int']().optional(),\n\t\tthis.key('serialNumber')['int'](),\n\t\tthis.key('signature').use(AlgorithmIdentifier),\n\t\tthis.key('issuer').use(Name),\n\t\tthis.key('validity').use(Validity),\n\t\tthis.key('subject').use(Name),\n\t\tthis.key('subjectPublicKeyInfo').use(SubjectPublicKeyInfo),\n\t\tthis.key('issuerUniqueID').implicit(1).bitstr().optional(),\n\t\tthis.key('subjectUniqueID').implicit(2).bitstr().optional(),\n\t\tthis.key('extensions').explicit(3).seqof(Extension).optional()\n\t);\n});\n\nvar X509Certificate = asn.define('X509Certificate', function () {\n\tthis.seq().obj(\n\t\tthis.key('tbsCertificate').use(TBSCertificate),\n\t\tthis.key('signatureAlgorithm').use(AlgorithmIdentifier),\n\t\tthis.key('signatureValue').bitstr()\n\t);\n});\n\nmodule.exports = X509Certificate;\n","'use strict';\n\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\tvar key = okey.toString();\n\tvar match = key.match(findProc);\n\tvar decrypted;\n\tif (!match) {\n\t\tvar match2 = key.match(fullRegex);\n\t\tdecrypted = Buffer.from(match2[2].replace(/[\\r\\n]/g, ''), 'base64');\n\t} else {\n\t\tvar suite = 'aes' + match[1];\n\t\tvar iv = Buffer.from(match[2], 'hex');\n\t\tvar cipherText = Buffer.from(match[3].replace(/[\\r\\n]/g, ''), 'base64');\n\t\tvar cipherKey = evp(password, iv.slice(0, 8), parseInt(match[1], 10)).key;\n\t\tvar out = [];\n\t\tvar cipher = ciphers.createDecipheriv(suite, cipherKey, iv);\n\t\tout.push(cipher.update(cipherText));\n\t\tout.push(cipher['final']());\n\t\tdecrypted = Buffer.concat(out);\n\t}\n\tvar tag = key.match(startRegex)[1];\n\treturn {\n\t\ttag: tag,\n\t\tdata: decrypted\n\t};\n};\n","'use strict';\n\nvar 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;\n\nfunction decrypt(data, password) {\n\tvar salt = data.algorithm.decrypt.kde.kdeparams.salt;\n\tvar iters = parseInt(data.algorithm.decrypt.kde.kdeparams.iters.toString(), 10);\n\tvar algo = aesid[data.algorithm.decrypt.cipher.algo.join('.')];\n\tvar iv = data.algorithm.decrypt.cipher.iv;\n\tvar cipherText = data.subjectPrivateKey;\n\tvar keylen = parseInt(algo.split('-')[1], 10) / 8;\n\tvar key = compat.pbkdf2Sync(password, salt, iters, keylen, 'sha1');\n\tvar cipher = ciphers.createDecipheriv(algo, key, iv);\n\tvar out = [];\n\tout.push(cipher.update(cipherText));\n\tout.push(cipher['final']());\n\treturn Buffer.concat(out);\n}\n\nfunction parseKeys(buffer) {\n\tvar password;\n\tif (typeof buffer === 'object' && !Buffer.isBuffer(buffer)) {\n\t\tpassword = buffer.passphrase;\n\t\tbuffer = buffer.key;\n\t}\n\tif (typeof buffer === 'string') {\n\t\tbuffer = Buffer.from(buffer);\n\t}\n\n\tvar stripped = fixProc(buffer, password);\n\n\tvar type = stripped.tag;\n\tvar data = stripped.data;\n\tvar subtype, ndata;\n\tswitch (type) {\n\t\tcase 'CERTIFICATE':\n\t\t\tndata = asn1.certificate.decode(data, 'der').tbsCertificate.subjectPublicKeyInfo;\n\t\t\t// falls through\n\t\tcase 'PUBLIC KEY':\n\t\t\tif (!ndata) {\n\t\t\t\tndata = asn1.PublicKey.decode(data, 'der');\n\t\t\t}\n\t\t\tsubtype = ndata.algorithm.algorithm.join('.');\n\t\t\tswitch (subtype) {\n\t\t\t\tcase '1.2.840.113549.1.1.1':\n\t\t\t\t\treturn asn1.RSAPublicKey.decode(ndata.subjectPublicKey.data, 'der');\n\t\t\t\tcase '1.2.840.10045.2.1':\n\t\t\t\t\tndata.subjectPrivateKey = ndata.subjectPublicKey;\n\t\t\t\t\treturn {\n\t\t\t\t\t\ttype: 'ec',\n\t\t\t\t\t\tdata: ndata\n\t\t\t\t\t};\n\t\t\t\tcase '1.2.840.10040.4.1':\n\t\t\t\t\tndata.algorithm.params.pub_key = asn1.DSAparam.decode(ndata.subjectPublicKey.data, 'der');\n\t\t\t\t\treturn {\n\t\t\t\t\t\ttype: 'dsa',\n\t\t\t\t\t\tdata: ndata.algorithm.params\n\t\t\t\t\t};\n\t\t\t\tdefault: throw new Error('unknown key id ' + subtype);\n\t\t\t}\n\t\t\t// throw new Error('unknown key type ' + type)\n\t\tcase 'ENCRYPTED PRIVATE KEY':\n\t\t\tdata = asn1.EncryptedPrivateKey.decode(data, 'der');\n\t\t\tdata = decrypt(data, password);\n\t\t\t// falls through\n\t\tcase 'PRIVATE KEY':\n\t\t\tndata = asn1.PrivateKey.decode(data, 'der');\n\t\t\tsubtype = ndata.algorithm.algorithm.join('.');\n\t\t\tswitch (subtype) {\n\t\t\t\tcase '1.2.840.113549.1.1.1':\n\t\t\t\t\treturn asn1.RSAPrivateKey.decode(ndata.subjectPrivateKey, 'der');\n\t\t\t\tcase '1.2.840.10045.2.1':\n\t\t\t\t\treturn {\n\t\t\t\t\t\tcurve: ndata.algorithm.curve,\n\t\t\t\t\t\tprivateKey: asn1.ECPrivateKey.decode(ndata.subjectPrivateKey, 'der').privateKey\n\t\t\t\t\t};\n\t\t\t\tcase '1.2.840.10040.4.1':\n\t\t\t\t\tndata.algorithm.params.priv_key = asn1.DSAparam.decode(ndata.subjectPrivateKey, 'der');\n\t\t\t\t\treturn {\n\t\t\t\t\t\ttype: 'dsa',\n\t\t\t\t\t\tparams: ndata.algorithm.params\n\t\t\t\t\t};\n\t\t\t\tdefault: throw new Error('unknown key id ' + subtype);\n\t\t\t}\n\t\t\t// throw new Error('unknown key type ' + type)\n\t\tcase 'RSA PUBLIC KEY':\n\t\t\treturn asn1.RSAPublicKey.decode(data, 'der');\n\t\tcase 'RSA PRIVATE KEY':\n\t\t\treturn asn1.RSAPrivateKey.decode(data, 'der');\n\t\tcase 'DSA PRIVATE KEY':\n\t\t\treturn {\n\t\t\t\ttype: 'dsa',\n\t\t\t\tparams: asn1.DSAPrivateKey.decode(data, 'der')\n\t\t\t};\n\t\tcase 'EC PRIVATE KEY':\n\t\t\tdata = asn1.ECPrivateKey.decode(data, 'der');\n\t\t\treturn {\n\t\t\t\tcurve: data.parameters.value,\n\t\t\t\tprivateKey: data.privateKey\n\t\t\t};\n\t\tdefault: throw new Error('unknown key type ' + type);\n\t}\n}\nparseKeys.signature = asn1.signature;\n\nmodule.exports = parseKeys;\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}\nvar nextTick\nfunction getNextTick () {\n  if (nextTick) {\n    return nextTick\n  }\n  if (global.process && global.process.nextTick) {\n    nextTick = global.process.nextTick\n  } else if (global.queueMicrotask) {\n    nextTick = global.queueMicrotask\n  } else if (global.setImmediate) {\n    nextTick = global.setImmediate\n  } else {\n    nextTick = global.setTimeout\n  }\n  return nextTick\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    getNextTick()(function () {\n      callback(null, out)\n    })\n  }, function (e) {\n    getNextTick()(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    getNextTick()(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    return\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 (global.process && global.process.browser) {\n  defaultEncoding = 'utf-8'\n} else if (global.process && global.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","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","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(t,e){\"object\"==typeof exports&&\"object\"==typeof module?module.exports=e(e.toString()).default:\"object\"==typeof exports?exports.Quagga=e(e.toString()).default:t.Quagga=e(e.toString()).default}(this,function(t){return function(t){function e(r){if(n[r])return n[r].exports;var o=n[r]={i:r,l:!1,exports:{}};return t[r].call(o.exports,o,o.exports,e),o.l=!0,o.exports}var n={};return e.m=t,e.c=n,e.i=function(t){return t},e.d=function(t,n,r){e.o(t,n)||Object.defineProperty(t,n,{configurable:!1,enumerable:!0,get:r})},e.n=function(t){var n=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(n,\"a\",n),n},e.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},e.p=\"/\",e(e.s=166)}([function(t,e){function n(t){var e=typeof t;return null!=t&&(\"object\"==e||\"function\"==e)}t.exports=n},function(t,e,n){\"use strict\";function r(t,e){return this._row=[],this.config=t||{},this.supplements=e,this}var o=n(3);r.prototype._nextUnset=function(t,e){var n;for(void 0===e&&(e=0),n=e;n<t.length;n++)if(!t[n])return n;return t.length},r.prototype._matchPattern=function(t,e,n){var r,o,i,a,u=0,c=0,s=0,f=0;for(n=n||this.SINGLE_CODE_ERROR||1,r=0;r<t.length;r++)s+=t[r],f+=e[r];if(s<f)return Number.MAX_VALUE;for(o=s/f,n*=o,r=0;r<t.length;r++){if(i=t[r],a=e[r]*o,(c=Math.abs(i-a)/a)>n)return Number.MAX_VALUE;u+=c}return u/f},r.prototype._nextSet=function(t,e){var n;for(e=e||0,n=e;n<t.length;n++)if(t[n])return n;return t.length},r.prototype._correctBars=function(t,e,n){for(var r=n.length,o=0;r--;)(o=t[n[r]]*(1-(1-e)/2))>1&&(t[n[r]]=o)},r.prototype._matchTrace=function(t,e){var n,r,o=[],i=this,a=i._nextSet(i._row),u=!i._row[a],c=0,s={error:Number.MAX_VALUE,code:-1,start:0};if(t){for(n=0;n<t.length;n++)o.push(0);for(n=a;n<i._row.length;n++)if(i._row[n]^u)o[c]++;else{if(c===o.length-1)return r=i._matchPattern(o,t),r<e?(s.start=n-a,s.end=n,s.counter=o,s):null;c++,o[c]=1,u=!u}}else for(o.push(0),n=a;n<i._row.length;n++)i._row[n]^u?o[c]++:(c++,o.push(0),o[c]=1,u=!u);return s.start=a,s.end=i._row.length-1,s.counter=o,s},r.prototype.decodePattern=function(t){var e,n=this;return n._row=t,e=n._decode(),null===e?(n._row.reverse(),(e=n._decode())&&(e.direction=r.DIRECTION.REVERSE,e.start=n._row.length-e.start,e.end=n._row.length-e.end)):e.direction=r.DIRECTION.FORWARD,e&&(e.format=n.FORMAT),e},r.prototype._matchRange=function(t,e,n){var r;for(t=t<0?0:t,r=t;r<e;r++)if(this._row[r]!==n)return!1;return!0},r.prototype._fillCounters=function(t,e,n){var r,o=this,i=0,a=[];for(n=void 0===n||n,t=void 0!==t?t:o._nextUnset(o._row),e=e||o._row.length,a[i]=0,r=t;r<e;r++)o._row[r]^n?a[i]++:(i++,a[i]=1,n=!n);return a},r.prototype._toCounters=function(t,e){var n,r=this,i=e.length,a=r._row.length,u=!r._row[t],c=0;for(o.a.init(e,0),n=t;n<a;n++)if(r._row[n]^u)e[c]++;else{if(++c===i)break;e[c]=1,u=!u}return e},Object.defineProperty(r.prototype,\"FORMAT\",{value:\"unknown\",writeable:!1}),r.DIRECTION={FORWARD:1,REVERSE:-1},r.Exception={StartNotFoundException:\"Start-Info was not found!\",CodeNotFoundException:\"Code could not be found!\",PatternNotFoundException:\"Pattern could not be found!\"},r.CONFIG_KEYS={},e.a=r},function(t,e){var n=Array.isArray;t.exports=n},function(t,e,n){\"use strict\";e.a={init:function(t,e){for(var n=t.length;n--;)t[n]=e},shuffle:function(t){var e,n,r=t.length-1;for(r;r>=0;r--)e=Math.floor(Math.random()*r),n=t[r],t[r]=t[e],t[e]=n;return t},toPointList:function(t){var e,n,r=[],o=[];for(e=0;e<t.length;e++){for(r=[],n=0;n<t[e].length;n++)r[n]=t[e][n];o[e]=\"[\"+r.join(\",\")+\"]\"}return\"[\"+o.join(\",\\r\\n\")+\"]\"},threshold:function(t,e,n){var r,o=[];for(r=0;r<t.length;r++)n.apply(t,[t[r]])>=e&&o.push(t[r]);return o},maxIndex:function(t){var e,n=0;for(e=0;e<t.length;e++)t[e]>t[n]&&(n=e);return n},max:function t(e){var n,t=0;for(n=0;n<e.length;n++)e[n]>t&&(t=e[n]);return t},sum:function t(e){for(var n=e.length,t=0;n--;)t+=e[n];return t}}},function(t,e,n){\"use strict\";function r(t,e){t=a()(o(),t),u.a.call(this,t,e)}function o(){var t={};return Object.keys(r.CONFIG_KEYS).forEach(function(e){t[e]=r.CONFIG_KEYS[e].default}),t}var i=n(28),a=n.n(i),u=n(1),c=Object.assign||function(t){for(var e=1;e<arguments.length;e++){var n=arguments[e];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(t[r]=n[r])}return t},s={CODE_L_START:{value:0},CODE_G_START:{value:10},START_PATTERN:{value:[1,1,1]},STOP_PATTERN:{value:[1,1,1]},MIDDLE_PATTERN:{value:[1,1,1,1,1]},EXTENSION_START_PATTERN:{value:[1,1,2]},CODE_PATTERN:{value:[[3,2,1,1],[2,2,2,1],[2,1,2,2],[1,4,1,1],[1,1,3,2],[1,2,3,1],[1,1,1,4],[1,3,1,2],[1,2,1,3],[3,1,1,2],[1,1,2,3],[1,2,2,2],[2,2,1,2],[1,1,4,1],[2,3,1,1],[1,3,2,1],[4,1,1,1],[2,1,3,1],[3,1,2,1],[2,1,1,3]]},CODE_FREQUENCY:{value:[0,11,13,14,19,25,28,21,22,26]},SINGLE_CODE_ERROR:{value:.7},AVG_CODE_ERROR:{value:.48},FORMAT:{value:\"ean_13\",writeable:!1}};r.prototype=Object.create(u.a.prototype,s),r.prototype.constructor=r,r.prototype._decodeCode=function(t,e){var n,r,o,i=[0,0,0,0],a=this,u=t,c=!a._row[u],s=0,f={error:Number.MAX_VALUE,code:-1,start:t,end:t};for(e||(e=a.CODE_PATTERN.length),n=u;n<a._row.length;n++)if(a._row[n]^c)i[s]++;else{if(s===i.length-1){for(r=0;r<e;r++)(o=a._matchPattern(i,a.CODE_PATTERN[r]))<f.error&&(f.code=r,f.error=o);return f.end=n,f.error>a.AVG_CODE_ERROR?null:f}s++,i[s]=1,c=!c}return null},r.prototype._findPattern=function(t,e,n,r,o){var i,a,u,c,s=[],f=this,l=0,d={error:Number.MAX_VALUE,code:-1,start:0,end:0};for(e||(e=f._nextSet(f._row)),void 0===n&&(n=!1),void 0===r&&(r=!0),void 0===o&&(o=f.AVG_CODE_ERROR),i=0;i<t.length;i++)s[i]=0;for(i=e;i<f._row.length;i++)if(f._row[i]^n)s[l]++;else{if(l===s.length-1){for(c=0,u=0;u<s.length;u++)c+=s[u];if((a=f._matchPattern(s,t))<o)return d.error=a,d.start=i-c,d.end=i,d;if(!r)return null;for(u=0;u<s.length-2;u++)s[u]=s[u+2];s[s.length-2]=0,s[s.length-1]=0,l--}else l++;s[l]=1,n=!n}return null},r.prototype._findStart=function(){for(var t,e,n=this,r=n._nextSet(n._row);!e;){if(!(e=n._findPattern(n.START_PATTERN,r)))return null;if((t=e.start-(e.end-e.start))>=0&&n._matchRange(t,e.start,0))return e;r=e.end,e=null}},r.prototype._verifyTrailingWhitespace=function(t){var e,n=this;return e=t.end+(t.end-t.start),e<n._row.length&&n._matchRange(t.end,e,0)?t:null},r.prototype._findEnd=function(t,e){var n=this,r=n._findPattern(n.STOP_PATTERN,t,e,!1);return null!==r?n._verifyTrailingWhitespace(r):null},r.prototype._calculateFirstDigit=function(t){var e,n=this;for(e=0;e<n.CODE_FREQUENCY.length;e++)if(t===n.CODE_FREQUENCY[e])return e;return null},r.prototype._decodePayload=function(t,e,n){var r,o,i=this,a=0;for(r=0;r<6;r++){if(!(t=i._decodeCode(t.end)))return null;t.code>=i.CODE_G_START?(t.code=t.code-i.CODE_G_START,a|=1<<5-r):a|=0<<5-r,e.push(t.code),n.push(t)}if(null===(o=i._calculateFirstDigit(a)))return null;if(e.unshift(o),null===(t=i._findPattern(i.MIDDLE_PATTERN,t.end,!0,!1)))return null;for(n.push(t),r=0;r<6;r++){if(!(t=i._decodeCode(t.end,i.CODE_G_START)))return null;n.push(t),e.push(t.code)}return t},r.prototype._decode=function(){var t,e,n=this,r=[],o=[],i={};if(!(t=n._findStart()))return null;if(e={code:t.code,start:t.start,end:t.end},o.push(e),!(e=n._decodePayload(e,r,o)))return null;if(!(e=n._findEnd(e.end,!1)))return null;if(o.push(e),!n._checksum(r))return null;if(this.supplements.length>0){var a=this._decodeExtensions(e.end);if(!a)return null;var u=a.decodedCodes[a.decodedCodes.length-1],s={start:u.start+((u.end-u.start)/2|0),end:u.end};if(!n._verifyTrailingWhitespace(s))return null;i={supplement:a,code:r.join(\"\")+a.code}}return c({code:r.join(\"\"),start:t.start,end:e.end,codeset:\"\",startInfo:t,decodedCodes:o},i)},r.prototype._decodeExtensions=function(t){var e,n,r=this._nextSet(this._row,t),o=this._findPattern(this.EXTENSION_START_PATTERN,r,!1,!1);if(null===o)return null;for(e=0;e<this.supplements.length;e++)if(null!==(n=this.supplements[e].decode(this._row,o.end)))return{code:n.code,start:r,startInfo:o,end:n.end,codeset:\"\",decodedCodes:n.decodedCodes};return null},r.prototype._checksum=function(t){var e,n=0;for(e=t.length-2;e>=0;e-=2)n+=t[e];for(n*=3,e=t.length-1;e>=0;e-=2)n+=t[e];return n%10==0},r.CONFIG_KEYS={supplements:{type:\"arrayOf(string)\",default:[],description:\"Allowed extensions to be decoded (2 and/or 5)\"}},e.a=r},function(t,e,n){var r=n(38),o=\"object\"==typeof self&&self&&self.Object===Object&&self,i=r||o||Function(\"return this\")();t.exports=i},function(t,e){function n(t){return null!=t&&\"object\"==typeof t}t.exports=n},function(t,e){function n(t){var e=new Float32Array(2);return e[0]=t[0],e[1]=t[1],e}t.exports=n},function(t,e,n){function r(t){return null==t?void 0===t?c:u:s&&s in Object(t)?i(t):a(t)}var o=n(11),i=n(119),a=n(146),u=\"[object Null]\",c=\"[object Undefined]\",s=o?o.toStringTag:void 0;t.exports=r},function(t,e,n){\"use strict\";e.a={drawRect:function(t,e,n,r){n.strokeStyle=r.color,n.fillStyle=r.color,n.lineWidth=1,n.beginPath(),n.strokeRect(t.x,t.y,e.x,e.y)},drawPath:function(t,e,n,r){n.strokeStyle=r.color,n.fillStyle=r.color,n.lineWidth=r.lineWidth,n.beginPath(),n.moveTo(t[0][e.x],t[0][e.y]);for(var o=1;o<t.length;o++)n.lineTo(t[o][e.x],t[o][e.y]);n.closePath(),n.stroke()},drawImage:function(t,e,n){var r,o=n.getImageData(0,0,e.x,e.y),i=o.data,a=t.length,u=i.length;if(u/a!=4)return!1;for(;a--;)r=t[a],i[--u]=255,i[--u]=r,i[--u]=r,i[--u]=r;return n.putImageData(o,0,0),!0}}},function(t,e,n){function r(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}var o=n(133),i=n(134),a=n(135),u=n(136),c=n(137);r.prototype.clear=o,r.prototype.delete=i,r.prototype.get=a,r.prototype.has=u,r.prototype.set=c,t.exports=r},function(t,e,n){var r=n(5),o=r.Symbol;t.exports=o},function(t,e,n){function r(t,e){for(var n=t.length;n--;)if(o(t[n][0],e))return n;return-1}var o=n(17);t.exports=r},function(t,e,n){function r(t,e){return o(t)?t:i(t,e)?[t]:a(u(t))}var o=n(2),i=n(130),a=n(154),u=n(165);t.exports=r},function(t,e,n){function r(t,e){var n=t.__data__;return o(e)?n[\"string\"==typeof e?\"string\":\"hash\"]:n.map}var o=n(131);t.exports=r},function(t,e){function n(t,e){return!!(e=null==e?r:e)&&(\"number\"==typeof t||o.test(t))&&t>-1&&t%1==0&&t<e}var r=9007199254740991,o=/^(?:0|[1-9]\\d*)$/;t.exports=n},function(t,e,n){var r=n(22),o=r(Object,\"create\");t.exports=o},function(t,e){function n(t,e){return t===e||t!==t&&e!==e}t.exports=n},function(t,e,n){var r=n(96),o=n(6),i=Object.prototype,a=i.hasOwnProperty,u=i.propertyIsEnumerable,c=r(function(){return arguments}())?r:function(t){return o(t)&&a.call(t,\"callee\")&&!u.call(t,\"callee\")};t.exports=c},function(t,e,n){\"use strict\";function r(t,e){return{x:t,y:e,toVec2:function(){return b.clone([this.x,this.y])},toVec3:function(){return E.clone([this.x,this.y,1])},round:function(){return this.x=this.x>0?Math.floor(this.x+.5):Math.floor(this.x-.5),this.y=this.y>0?Math.floor(this.y+.5):Math.floor(this.y-.5),this}}}function o(t,e,n){n||(n=t);for(var r=t.data,o=r.length,i=n.data;o--;)i[o]=r[o]<e?1:0}function i(t,e){e||(e=8);for(var n=t.data,r=n.length,o=8-e,i=1<<e,a=new Int32Array(i);r--;)a[n[r]>>o]++;return a}function a(t,e){function n(t,e){var n,r=0;for(n=t;n<=e;n++)r+=a[n];return r}function r(t,e){var n,r=0;for(n=t;n<=e;n++)r+=n*a[n];return r}function o(){var o,u,c,s,f,l,d,h=[0],p=(1<<e)-1;for(a=i(t,e),s=1;s<p;s++)o=n(0,s),u=n(s+1,p),c=o*u,0===c&&(c=1),f=r(0,s)*u,l=r(s+1,p)*o,d=f-l,h[s]=d*d/c;return x.a.maxIndex(h)}e||(e=8);var a,u=8-e;return o()<<u}function u(t,e){var n=a(t);return o(t,n,e),n}function c(t,e,n){function r(t){var e=!1;for(i=0;i<c.length;i++)a=c[i],a.fits(t)&&(a.add(t),e=!0);return e}var o,i,a,u,c=[];for(n||(n=\"rad\"),o=0;o<t.length;o++)u=m.a.createPoint(t[o],o,n),r(u)||c.push(m.a.create(u,e));return c}function s(t,e,n){var r,o,i,a,u=0,c=0,s=[];for(r=0;r<e;r++)s[r]={score:0,item:null};for(r=0;r<t.length;r++)if((o=n.apply(this,[t[r]]))>c)for(i=s[u],i.score=o,i.item=t[r],c=Number.MAX_VALUE,a=0;a<e;a++)s[a].score<c&&(c=s[a].score,u=a);return s}function f(t,e,n){for(var r,o=0,i=e.x,a=Math.floor(t.length/4),u=e.x/2,c=0,s=e.x;i<a;){for(r=0;r<u;r++)n[c]=(.299*t[4*o+0]+.587*t[4*o+1]+.114*t[4*o+2]+(.299*t[4*(o+1)+0]+.587*t[4*(o+1)+1]+.114*t[4*(o+1)+2])+(.299*t[4*i+0]+.587*t[4*i+1]+.114*t[4*i+2])+(.299*t[4*(i+1)+0]+.587*t[4*(i+1)+1]+.114*t[4*(i+1)+2]))/4,c++,o+=2,i+=2;o+=s,i+=s}}function l(t,e,n){var r,o=t.length/4|0;if(n&&n.singleChannel===!0)for(r=0;r<o;r++)e[r]=t[4*r+0];else for(r=0;r<o;r++)e[r]=.299*t[4*r+0]+.587*t[4*r+1]+.114*t[4*r+2]}function d(t,e){for(var n=t.data,r=t.size.x,o=e.data,i=0,a=r,u=n.length,c=r/2,s=0;a<u;){for(var f=0;f<c;f++)o[s]=Math.floor((n[i]+n[i+1]+n[a]+n[a+1])/4),s++,i+=2,a+=2;i+=r,a+=r}}function h(t,e){var n=t[0],r=t[1],o=t[2],i=o*r,a=i*(1-Math.abs(n/60%2-1)),u=o-i,c=0,s=0,f=0;return e=e||[0,0,0],n<60?(c=i,s=a):n<120?(c=a,s=i):n<180?(s=i,f=a):n<240?(s=a,f=i):n<300?(c=a,f=i):n<360&&(c=i,f=a),e[0]=255*(c+u)|0,e[1]=255*(s+u)|0,e[2]=255*(f+u)|0,e}function p(t){var e,n=[],r=[];for(e=1;e<Math.sqrt(t)+1;e++)t%e==0&&(r.push(e),e!==t/e&&n.unshift(Math.floor(t/e)));return r.concat(n)}function v(t,e){for(var n=0,r=0,o=[];n<t.length&&r<e.length;)t[n]===e[r]?(o.push(t[n]),n++,r++):t[n]>e[r]?r++:n++;return o}function _(t,e){function n(t){for(var e=0,n=t[Math.floor(t.length/2)];e<t.length-1&&t[e]<d;)e++;return e>0&&(n=Math.abs(t[e]-d)>Math.abs(t[e-1]-d)?t[e-1]:t[e]),d/n<c[f+1]/c[f]&&d/n>c[f-1]/c[f]?{x:n,y:n}:null}var r,o=p(e.x),i=p(e.y),a=Math.max(e.x,e.y),u=v(o,i),c=[8,10,15,20,32,60,80],s={\"x-small\":5,small:4,medium:3,large:2,\"x-large\":1},f=s[t]||s.medium,l=c[f],d=Math.floor(a/l);return r=n(u),r||(r=n(p(a)))||(r=n(p(d*l))),r}function g(t){return{value:parseFloat(t),unit:(t.indexOf(\"%\"),t.length,\"%\")}}function y(t,e,n){var r={width:t,height:e},o=Object.keys(n).reduce(function(t,e){var o=n[e],i=g(o),a=C[e](i,r);return t[e]=a,t},{});return{sx:o.left,sy:o.top,sw:o.right-o.left,sh:o.bottom-o.top}}var m=n(50),x=n(3);e.b=r,e.f=u,e.g=c,e.h=s,e.c=f,e.d=l,e.i=d,e.a=h,e.e=_,e.j=y;var b={clone:n(7)},E={clone:n(83)},C={top:function(t,e){if(\"%\"===t.unit)return Math.floor(e.height*(t.value/100))},right:function(t,e){if(\"%\"===t.unit)return Math.floor(e.width-e.width*(t.value/100))},bottom:function(t,e){if(\"%\"===t.unit)return Math.floor(e.height-e.height*(t.value/100))},left:function(t,e){if(\"%\"===t.unit)return Math.floor(e.width*(t.value/100))}}},function(t,e,n){\"use strict\";function r(t,e,n,r){e?this.data=e:n?(this.data=new n(t.x*t.y),n===Array&&r&&a.a.init(this.data,0)):(this.data=new Uint8Array(t.x*t.y),Uint8Array===Array&&r&&a.a.init(this.data,0)),this.size=t}var o=n(53),i=n(19),a=n(3),u={clone:n(7)};r.prototype.inImageWithBorder=function(t,e){return t.x>=e&&t.y>=e&&t.x<this.size.x-e&&t.y<this.size.y-e},r.sample=function(t,e,n){var r=Math.floor(e),o=Math.floor(n),i=t.size.x,a=o*t.size.x+r,u=t.data[a+0],c=t.data[a+1],s=t.data[a+i],f=t.data[a+i+1],l=u-c;return e-=r,n-=o,Math.floor(e*(n*(l-s+f)-l)+n*(s-u)+u)},r.clearArray=function(t){for(var e=t.length;e--;)t[e]=0},r.prototype.subImage=function(t,e){return new o.a(t,e,this)},r.prototype.subImageAsCopy=function(t,e){var n,r,o=t.size.y,i=t.size.x;for(n=0;n<i;n++)for(r=0;r<o;r++)t.data[r*i+n]=this.data[(e.y+r)*this.size.x+e.x+n]},r.prototype.copyTo=function(t){for(var e=this.data.length,n=this.data,r=t.data;e--;)r[e]=n[e]},r.prototype.get=function(t,e){return this.data[e*this.size.x+t]},r.prototype.getSafe=function(t,e){var n;if(!this.indexMapping){for(this.indexMapping={x:[],y:[]},n=0;n<this.size.x;n++)this.indexMapping.x[n]=n,this.indexMapping.x[n+this.size.x]=n;for(n=0;n<this.size.y;n++)this.indexMapping.y[n]=n,this.indexMapping.y[n+this.size.y]=n}return this.data[this.indexMapping.y[e+this.size.y]*this.size.x+this.indexMapping.x[t+this.size.x]]},r.prototype.set=function(t,e,n){return this.data[e*this.size.x+t]=n,this},r.prototype.zeroBorder=function(){var t,e=this.size.x,n=this.size.y,r=this.data;for(t=0;t<e;t++)r[t]=r[(n-1)*e+t]=0;for(t=1;t<n-1;t++)r[t*e]=r[t*e+(e-1)]=0},r.prototype.invert=function(){for(var t=this.data,e=t.length;e--;)t[e]=t[e]?0:1},r.prototype.convolve=function(t){var e,n,r,o,i=t.length/2|0,a=0;for(n=0;n<this.size.y;n++)for(e=0;e<this.size.x;e++){for(a=0,o=-i;o<=i;o++)for(r=-i;r<=i;r++)a+=t[o+i][r+i]*this.getSafe(e+r,n+o);this.data[n*this.size.x+e]=a}},r.prototype.moments=function(t){var e,n,r,o,i,a,c,s,f,l,d,h,p=this.data,v=this.size.y,_=this.size.x,g=[],y=[],m=Math.PI,x=m/4;if(t<=0)return y;for(i=0;i<t;i++)g[i]={m00:0,m01:0,m10:0,m11:0,m02:0,m20:0,theta:0,rad:0};for(n=0;n<v;n++)for(o=n*n,e=0;e<_;e++)(r=p[n*_+e])>0&&(a=g[r-1],a.m00+=1,a.m01+=n,a.m10+=e,a.m11+=e*n,a.m02+=o,a.m20+=e*e);for(i=0;i<t;i++)a=g[i],isNaN(a.m00)||0===a.m00||(l=a.m10/a.m00,d=a.m01/a.m00,c=a.m11/a.m00-l*d,s=a.m02/a.m00-d*d,f=a.m20/a.m00-l*l,h=(s-f)/(2*c),h=.5*Math.atan(h)+(c>=0?x:-x)+m,a.theta=(180*h/m+90)%180-90,a.theta<0&&(a.theta+=180),a.rad=h>m?h-m:h,a.vec=u.clone([Math.cos(h),Math.sin(h)]),y.push(a));return y},r.prototype.show=function(t,e){var n,r,o,i,a,u,c;for(e||(e=1),n=t.getContext(\"2d\"),t.width=this.size.x,t.height=this.size.y,r=n.getImageData(0,0,t.width,t.height),o=r.data,i=0,c=0;c<this.size.y;c++)for(u=0;u<this.size.x;u++)a=c*this.size.x+u,i=this.get(u,c)*e,o[4*a+0]=i,o[4*a+1]=i,o[4*a+2]=i,o[4*a+3]=255;n.putImageData(r,0,0)},r.prototype.overlay=function(t,e,r){(!e||e<0||e>360)&&(e=360);for(var o=[0,1,1],a=[0,0,0],u=[255,255,255],c=[0,0,0],s=[],f=t.getContext(\"2d\"),l=f.getImageData(r.x,r.y,this.size.x,this.size.y),d=l.data,h=this.data.length;h--;)o[0]=this.data[h]*e,s=o[0]<=0?u:o[0]>=360?c:n.i(i.a)(o,a),d[4*h+0]=s[0],d[4*h+1]=s[1],d[4*h+2]=s[2],d[4*h+3]=255;f.putImageData(l,r.x,r.y)},e.a=r},function(t,e,n){function r(t,e,n){\"__proto__\"==e&&o?o(t,e,{configurable:!0,enumerable:!0,value:n,writable:!0}):t[e]=n}var o=n(37);t.exports=r},function(t,e,n){function r(t,e){var n=i(t,e);return o(n)?n:void 0}var o=n(97),i=n(120);t.exports=r},function(t,e,n){function r(t){if(\"string\"==typeof t||o(t))return t;var e=t+\"\";return\"0\"==e&&1/t==-i?\"-0\":e}var o=n(27),i=1/0;t.exports=r},function(t,e,n){function r(t){return null!=t&&i(t.length)&&!o(t)}var o=n(25),i=n(26);t.exports=r},function(t,e,n){function r(t){if(!i(t))return!1;var e=o(t);return e==u||e==c||e==a||e==s}var o=n(8),i=n(0),a=\"[object AsyncFunction]\",u=\"[object Function]\",c=\"[object GeneratorFunction]\",s=\"[object Proxy]\";t.exports=r},function(t,e){function n(t){return\"number\"==typeof t&&t>-1&&t%1==0&&t<=r}var r=9007199254740991;t.exports=n},function(t,e,n){function r(t){return\"symbol\"==typeof t||i(t)&&o(t)==a}var o=n(8),i=n(6),a=\"[object Symbol]\";t.exports=r},function(t,e,n){var r=n(100),o=n(116),i=o(function(t,e,n){r(t,e,n)});t.exports=i},function(t,e){t.exports=function(t){return t.webpackPolyfill||(t.deprecate=function(){},t.paths=[],t.children||(t.children=[]),Object.defineProperty(t,\"loaded\",{enumerable:!0,get:function(){return t.l}}),Object.defineProperty(t,\"id\",{enumerable:!0,get:function(){return t.i}}),t.webpackPolyfill=1),t}},function(t,e,n){\"use strict\";var r={searchDirections:[[0,1],[1,1],[1,0],[1,-1],[0,-1],[-1,-1],[-1,0],[-1,1]],create:function(t,e){function n(t,e,n,r){var o,f,l;for(o=0;o<7;o++){if(f=t.cy+c[t.dir][0],l=t.cx+c[t.dir][1],i=f*s+l,a[i]===e&&(0===u[i]||u[i]===n))return u[i]=n,t.cy=f,t.cx=l,!0;0===u[i]&&(u[i]=r),t.dir=(t.dir+1)%8}return!1}function r(t,e,n){return{dir:n,x:t,y:e,next:null,prev:null}}function o(t,e,o,i,a){var u,c,s,f=null,l={cx:e,cy:t,dir:0};if(n(l,i,o,a)){f=r(e,t,l.dir),u=f,s=l.dir,c=r(l.cx,l.cy,0),c.prev=u,u.next=c,c.next=null,u=c;do l.dir=(l.dir+6)%8,n(l,i,o,a),s!==l.dir?(u.dir=l.dir,c=r(l.cx,l.cy,0),c.prev=u,u.next=c,c.next=null,u=c):(u.dir=s,u.x=l.cx,u.y=l.cy),s=l.dir;while(l.cx!==e||l.cy!==t);f.prev=u.prev,u.prev.next=f}return f}var i,a=t.data,u=e.data,c=this.searchDirections,s=t.size.x;return{trace:function(t,e,r,o){return n(t,e,r,o)},contourTracing:function(t,e,n,r,i){return o(t,e,n,r,i)}}}};e.a=r},function(t,e,n){\"use strict\";function r(){o.a.call(this)}var o=n(1),i=n(3),a={ALPHABETH_STRING:{value:\"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. *$/+%\"},ALPHABET:{value:[48,49,50,51,52,53,54,55,56,57,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,45,46,32,42,36,47,43,37]},CHARACTER_ENCODINGS:{value:[52,289,97,352,49,304,112,37,292,100,265,73,328,25,280,88,13,268,76,28,259,67,322,19,274,82,7,262,70,22,385,193,448,145,400,208,133,388,196,148,168,162,138,42]},ASTERISK:{value:148},FORMAT:{value:\"code_39\",writeable:!1}};r.prototype=Object.create(o.a.prototype,a),r.prototype.constructor=r,r.prototype._decode=function(){var t,e,n,r,o=this,a=[0,0,0,0,0,0,0,0,0],u=[],c=o._findStart();if(!c)return null;r=o._nextSet(o._row,c.end);do{if(a=o._toCounters(r,a),(n=o._toPattern(a))<0)return null;if((t=o._patternToChar(n))<0)return null;u.push(t),e=r,r+=i.a.sum(a),r=o._nextSet(o._row,r)}while(\"*\"!==t);return u.pop(),u.length&&o._verifyTrailingWhitespace(e,r,a)?{code:u.join(\"\"),start:c.start,end:r,startInfo:c,decodedCodes:u}:null},r.prototype._verifyTrailingWhitespace=function(t,e,n){var r=i.a.sum(n);return 3*(e-t-r)>=r},r.prototype._patternToChar=function(t){var e,n=this;for(e=0;e<n.CHARACTER_ENCODINGS.length;e++)if(n.CHARACTER_ENCODINGS[e]===t)return String.fromCharCode(n.ALPHABET[e]);return-1},r.prototype._findNextWidth=function(t,e){var n,r=Number.MAX_VALUE;for(n=0;n<t.length;n++)t[n]<r&&t[n]>e&&(r=t[n]);return r},r.prototype._toPattern=function(t){for(var e,n,r=t.length,o=0,i=r,a=0,u=this;i>3;){for(o=u._findNextWidth(t,o),i=0,e=0,n=0;n<r;n++)t[n]>o&&(e|=1<<r-1-n,i++,a+=t[n]);if(3===i){for(n=0;n<r&&i>0;n++)if(t[n]>o&&(i--,2*t[n]>=a))return-1;return e}}return-1},r.prototype._findStart=function(){var t,e,n,r=this,o=r._nextSet(r._row),i=o,a=[0,0,0,0,0,0,0,0,0],u=0,c=!1;for(t=o;t<r._row.length;t++)if(r._row[t]^c)a[u]++;else{if(u===a.length-1){if(r._toPattern(a)===r.ASTERISK&&(n=Math.floor(Math.max(0,i-(t-i)/4)),r._matchRange(n,i,0)))return{start:i,end:t};for(i+=a[0]+a[1],e=0;e<7;e++)a[e]=a[e+2];a[7]=0,a[8]=0,u--}else u++;a[u]=1,c=!c}return null},e.a=r},function(t,e){function n(t,e){return t[0]*e[0]+t[1]*e[1]}t.exports=n},function(t,e,n){var r=n(22),o=n(5),i=r(o,\"Map\");t.exports=i},function(t,e,n){function r(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}var o=n(138),i=n(139),a=n(140),u=n(141),c=n(142);r.prototype.clear=o,r.prototype.delete=i,r.prototype.get=a,r.prototype.has=u,r.prototype.set=c,t.exports=r},function(t,e,n){function r(t,e,n){(void 0===n||i(t[e],n))&&(void 0!==n||e in t)||o(t,e,n)}var o=n(21),i=n(17);t.exports=r},function(t,e,n){function r(t,e,n){var r=t[e];u.call(t,e)&&i(r,n)&&(void 0!==n||e in t)||o(t,e,n)}var o=n(21),i=n(17),a=Object.prototype,u=a.hasOwnProperty;t.exports=r},function(t,e,n){var r=n(22),o=function(){try{var t=r(Object,\"defineProperty\");return t({},\"\",{}),t}catch(t){}}();t.exports=o},function(t,e,n){(function(e){var n=\"object\"==typeof e&&e&&e.Object===Object&&e;t.exports=n}).call(e,n(47))},function(t,e,n){var r=n(147),o=r(Object.getPrototypeOf,Object);t.exports=o},function(t,e){function n(t){var e=t&&t.constructor;return t===(\"function\"==typeof e&&e.prototype||r)}var r=Object.prototype;t.exports=n},function(t,e,n){function r(t,e,n){return e=i(void 0===e?t.length-1:e,0),function(){for(var r=arguments,a=-1,u=i(r.length-e,0),c=Array(u);++a<u;)c[a]=r[e+a];a=-1;for(var s=Array(e+1);++a<e;)s[a]=r[a];return s[e]=n(c),o(t,this,s)}}var o=n(87),i=Math.max;t.exports=r},function(t,e,n){var r=n(106),o=n(148),i=o(r);t.exports=i},function(t,e){function n(t){return t}t.exports=n},function(t,e,n){(function(t){var r=n(5),o=n(163),i=\"object\"==typeof e&&e&&!e.nodeType&&e,a=i&&\"object\"==typeof t&&t&&!t.nodeType&&t,u=a&&a.exports===i,c=u?r.Buffer:void 0,s=c?c.isBuffer:void 0,f=s||o;t.exports=f}).call(e,n(29)(t))},function(t,e,n){var r=n(98),o=n(109),i=n(145),a=i&&i.isTypedArray,u=a?o(a):r;t.exports=u},function(t,e,n){function r(t){return a(t)?o(t,!0):i(t)}var o=n(88),i=n(99),a=n(24);t.exports=r},function(t,e){var n;n=function(){return this}();try{n=n||Function(\"return this\")()||(0,eval)(\"this\")}catch(t){\"object\"==typeof window&&(n=window)}t.exports=n},function(e,n,r){\"use strict\";function o(t){f(t),P=k.a.create($.decoder,S)}function i(t){var e;if(\"VideoStream\"===$.inputStream.type)e=document.createElement(\"video\"),R=H.a.createVideoStream(e);else if(\"ImageStream\"===$.inputStream.type)R=H.a.createImageStream();else if(\"LiveStream\"===$.inputStream.type){var n=a();n&&((e=n.querySelector(\"video\"))||(e=document.createElement(\"video\"),n.appendChild(e))),R=H.a.createLiveStream(e),F.a.request(e,$.inputStream.constraints).then(function(){R.trigger(\"canrecord\")}).catch(function(e){return t(e)})}R.setAttribute(\"preload\",\"auto\"),R.setInputStream($.inputStream),R.addEventListener(\"canrecord\",u.bind(void 0,t))}function a(){var t=$.inputStream.target;if(t&&t.nodeName&&1===t.nodeType)return t;var e=\"string\"==typeof t?t:\"#interactive.viewport\";return document.querySelector(e)}function u(t){U.a.checkImageConstraints(R,$.locator),s($),w=V.a.create(R,K.dom.image),A($.numOfWorkers,function(){0===$.numOfWorkers&&o(),c(t)})}function c(t){R.play(),t()}function s(){if(\"undefined\"!=typeof document){var t=a();if(K.dom.image=document.querySelector(\"canvas.imgBuffer\"),K.dom.image||(K.dom.image=document.createElement(\"canvas\"),K.dom.image.className=\"imgBuffer\",t&&\"ImageStream\"===$.inputStream.type&&t.appendChild(K.dom.image)),K.ctx.image=K.dom.image.getContext(\"2d\"),K.dom.image.width=R.getCanvasSize().x,K.dom.image.height=R.getCanvasSize().y,K.dom.overlay=document.querySelector(\"canvas.drawingBuffer\"),!K.dom.overlay){K.dom.overlay=document.createElement(\"canvas\"),K.dom.overlay.className=\"drawingBuffer\",t&&t.appendChild(K.dom.overlay);var e=document.createElement(\"br\");e.setAttribute(\"clear\",\"all\"),t&&t.appendChild(e)}K.ctx.overlay=K.dom.overlay.getContext(\"2d\"),K.dom.overlay.width=R.getCanvasSize().x,K.dom.overlay.height=R.getCanvasSize().y}}function f(t){S=t?t:new j.a({x:R.getWidth(),y:R.getHeight()}),D=[q.clone([0,0]),q.clone([0,S.size.y]),q.clone([S.size.x,S.size.y]),q.clone([S.size.x,0])],U.a.init(S,$.locator)}function l(){return $.locate?U.a.locate():[[q.clone(D[0]),q.clone(D[1]),q.clone(D[2]),q.clone(D[3])]]}function d(t){function e(t){for(var e=t.length;e--;)t[e][0]+=i,t[e][1]+=a}function n(t){t[0].x+=i,t[0].y+=a,t[1].x+=i,t[1].y+=a}var r,o=R.getTopRight(),i=o.x,a=o.y;if(0!==i||0!==a){if(t.barcodes)for(r=0;r<t.barcodes.length;r++)d(t.barcodes[r]);if(t.line&&2===t.line.length&&n(t.line),t.box&&e(t.box),t.boxes&&t.boxes.length>0)for(r=0;r<t.boxes.length;r++)e(t.boxes[r])}}function h(t,e){e&&I&&(t.barcodes?t.barcodes.filter(function(t){return t.codeResult}).forEach(function(t){return h(t,e)}):t.codeResult&&I.addResult(e,R.getCanvasSize(),t.codeResult))}function p(t){return t&&(t.barcodes?t.barcodes.some(function(t){return t.codeResult}):t.codeResult)}function v(t,e){var n=t;t&&Q&&(d(t),h(t,e),n=t.barcodes||t),L.a.publish(\"processed\",n),p(t)&&L.a.publish(\"detected\",n)}function _(){var t,e;e=l(),e?(t=P.decodeFromBoundingBoxes(e),t=t||{},t.boxes=e,v(t,S.data)):v()}function g(){var t;if(Q){if(Y.length>0){if(!(t=Y.filter(function(t){return!t.busy})[0]))return;w.attachData(t.imageData)}else w.attachData(S.data);w.grab()&&(t?(t.busy=!0,t.worker.postMessage({cmd:\"process\",imageData:t.imageData},[t.imageData.buffer])):_())}else _()}function y(){var t=null,e=1e3/($.frequency||60);T=!1,function n(r){t=t||r,T||(r>=t&&(t+=e,g()),window.requestAnimFrame(n))}(performance.now())}function m(){Q&&\"LiveStream\"===$.inputStream.type?y():g()}function x(t){var e,n={worker:void 0,imageData:new Uint8Array(R.getWidth()*R.getHeight()),busy:!0};e=C(),n.worker=new Worker(e),n.worker.onmessage=function(r){if(\"initialized\"===r.data.event)return URL.revokeObjectURL(e),n.busy=!1,n.imageData=new Uint8Array(r.data.imageData),t(n);\"processed\"===r.data.event?(n.imageData=new Uint8Array(r.data.imageData),n.busy=!1,v(r.data.result,n.imageData)):r.data.event},n.worker.postMessage({cmd:\"init\",size:{x:R.getWidth(),y:R.getHeight()},imageData:n.imageData,config:b($)},[n.imageData.buffer])}function b(t){return X({},t,{inputStream:X({},t.inputStream,{target:null})})}function E(t){function e(t){self.postMessage({event:\"processed\",imageData:o.data,result:t},[o.data.buffer])}function n(){self.postMessage({event:\"initialized\",imageData:o.data},[o.data.buffer])}if(t){var r=t().default;if(!r)return void self.postMessage({event:\"error\",message:\"Quagga could not be created\"})}var o;self.onmessage=function(t){if(\"init\"===t.data.cmd){var i=t.data.config;i.numOfWorkers=0,o=new r.ImageWrapper({x:t.data.size.x,y:t.data.size.y},new Uint8Array(t.data.imageData)),r.init(i,n,o),r.onProcessed(e)}else\"process\"===t.data.cmd?(o.data=new Uint8Array(t.data.imageData),r.start()):\"setReaders\"===t.data.cmd&&r.setReaders(t.data.readers)}}function C(){var e,n;return void 0!==t&&(n=t),e=new Blob([\"(\"+E.toString()+\")(\"+n+\");\"],{type:\"text/javascript\"}),window.URL.createObjectURL(e)}function O(t){P?P.setReaders(t):Q&&Y.length>0&&Y.forEach(function(e){e.worker.postMessage({cmd:\"setReaders\",readers:t})})}function A(t,e){var n=t-Y.length;if(0===n)return e&&e();if(n<0){return Y.slice(n).forEach(function(t){t.worker.terminate()}),Y=Y.slice(0,n),e&&e()}for(var r=function(n){Y.push(n),Y.length>=t&&e&&e()},o=0;o<n;o++)x(r)}Object.defineProperty(n,\"__esModule\",{value:!0});var R,w,T,S,D,P,I,M=r(28),N=r.n(M),z=r(54),j=(r.n(z),r(20)),U=r(64),k=r(57),L=r(51),F=r(59),W=r(9),B=r(49),G=r(55),H=r(63),V=r(61),X=Object.assign||function(t){for(var e=1;e<arguments.length;e++){var n=arguments[e];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(t[r]=n[r])}return t},q={clone:r(7)},K={ctx:{image:null,overlay:null},dom:{image:null,overlay:null}},Y=[],Q=!0,$={};n.default={init:function(t,e,n){if($=N()({},G.a,t),n)return Q=!1,o(n),e();i(e)},start:function(){m()},stop:function(){T=!0,A(0),\"LiveStream\"===$.inputStream.type&&(F.a.release(),R.clearEventHandlers())},pause:function(){T=!0},onDetected:function(t){L.a.subscribe(\"detected\",t)},offDetected:function(t){L.a.unsubscribe(\"detected\",t)},onProcessed:function(t){L.a.subscribe(\"processed\",t)},offProcessed:function(t){L.a.unsubscribe(\"processed\",t)},setReaders:function(t){O(t)},registerResultCollector:function(t){t&&\"function\"==typeof t.addResult&&(I=t)},canvas:K,decodeSingle:function(t,e){var n=this;t=N()({inputStream:{type:\"ImageStream\",sequence:!1,size:800,src:t.src},numOfWorkers:1,locator:{halfSample:!1}},t),this.init(t,function(){L.a.once(\"processed\",function(t){n.stop(),e.call(null,t)},!0),m()})},ImageWrapper:j.a,ImageDebug:W.a,ResultCollector:B.a,CameraAccess:F.a}},function(t,e,n){\"use strict\";function r(t,e){return!!e&&e.some(function(e){return Object.keys(e).every(function(n){return e[n]===t[n]})})}function o(t,e){return\"function\"!=typeof e||e(t)}var i=n(9);e.a={create:function(t){function e(e){return c&&e&&!r(e,t.blacklist)&&o(e,t.filter)}var n=document.createElement(\"canvas\"),a=n.getContext(\"2d\"),u=[],c=t.capacity||20,s=t.capture===!0;return{addResult:function(t,r,o){var f={};e(o)&&(c--,f.codeResult=o,s&&(n.width=r.x,n.height=r.y,i.a.drawImage(t,r,a),f.frame=n.toDataURL()),u.push(f))},getResults:function(){return u}}}}},function(t,e,n){\"use strict\";var r={clone:n(7),dot:n(32)};e.a={create:function(t,e){function n(){o(t),i()}function o(t){c[t.id]=t,a.push(t)}function i(){var t,e=0;for(t=0;t<a.length;t++)e+=a[t].rad;u.rad=e/a.length,u.vec=r.clone([Math.cos(u.rad),Math.sin(u.rad)])}var a=[],u={rad:0,vec:r.clone([0,0])},c={};return n(),{add:function(t){c[t.id]||(o(t),i())},fits:function(t){return Math.abs(r.dot(t.point.vec,u.vec))>e},getPoints:function(){return a},getCenter:function(){return u}}},createPoint:function(t,e,n){return{rad:t[n],point:t,id:e}}}},function(t,e,n){\"use strict\";e.a=function(){function t(t){return o[t]||(o[t]={subscribers:[]}),o[t]}function e(){o={}}function n(t,e){t.async?setTimeout(function(){t.callback(e)},4):t.callback(e)}function r(e,n,r){var o;if(\"function\"==typeof n)o={callback:n,async:r};else if(o=n,!o.callback)throw\"Callback was not specified on options\";t(e).subscribers.push(o)}var o={};return{subscribe:function(t,e,n){return r(t,e,n)},publish:function(e,r){var o=t(e),i=o.subscribers;i.filter(function(t){return!!t.once}).forEach(function(t){n(t,r)}),o.subscribers=i.filter(function(t){return!t.once}),o.subscribers.forEach(function(t){n(t,r)})},once:function(t,e,n){r(t,{callback:e,async:n,once:!0})},unsubscribe:function(n,r){var o;n?(o=t(n),o.subscribers=o&&r?o.subscribers.filter(function(t){return t.callback!==r}):[]):e()}}}()},function(t,e,n){\"use strict\";function r(){return navigator.mediaDevices&&\"function\"==typeof navigator.mediaDevices.enumerateDevices?navigator.mediaDevices.enumerateDevices():Promise.reject(new Error(\"enumerateDevices is not defined\"))}function o(t){return navigator.mediaDevices&&\"function\"==typeof navigator.mediaDevices.getUserMedia?navigator.mediaDevices.getUserMedia(t):Promise.reject(new Error(\"getUserMedia is not defined\"))}e.b=r,e.a=o},function(t,e,n){\"use strict\";function r(t,e,n){n||(n={data:null,size:e}),this.data=n.data,this.originalSize=n.size,this.I=n,this.from=t,this.size=e}r.prototype.show=function(t,e){var n,r,o,i,a,u,c;for(e||(e=1),n=t.getContext(\"2d\"),t.width=this.size.x,t.height=this.size.y,r=n.getImageData(0,0,t.width,t.height),o=r.data,i=0,a=0;a<this.size.y;a++)for(u=0;u<this.size.x;u++)c=a*this.size.x+u,i=this.get(u,a)*e,o[4*c+0]=i,o[4*c+1]=i,o[4*c+2]=i,o[4*c+3]=255;r.data=o,n.putImageData(r,0,0)},r.prototype.get=function(t,e){return this.data[(this.from.y+e)*this.originalSize.x+this.from.x+t]},r.prototype.updateData=function(t){this.originalSize=t.size,this.data=t.data},r.prototype.updateFrom=function(t){return this.from=t,this},e.a=r},function(t,e){\"undefined\"!=typeof window&&(window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){window.setTimeout(t,1e3/60)}}()),Math.imul=Math.imul||function(t,e){var n=t>>>16&65535,r=65535&t,o=e>>>16&65535,i=65535&e;return r*i+(n*i+r*o<<16>>>0)|0},\"function\"!=typeof Object.assign&&(Object.assign=function(t){\"use strict\";if(null===t)throw new TypeError(\"Cannot convert undefined or null to object\");for(var e=Object(t),n=1;n<arguments.length;n++){var r=arguments[n];if(null!==r)for(var o in r)Object.prototype.hasOwnProperty.call(r,o)&&(e[o]=r[o])}return e})},function(t,e,n){\"use strict\";var r=void 0;r=n(56),e.a=r},function(t,e){t.exports={inputStream:{name:\"Live\",type:\"LiveStream\",constraints:{width:640,height:480,facingMode:\"environment\"},area:{top:\"0%\",right:\"0%\",left:\"0%\",bottom:\"0%\"},singleChannel:!1},locate:!0,numOfWorkers:4,decoder:{readers:[\"code_128_reader\"]},locator:{halfSample:!0,patchSize:\"medium\"}}},function(t,e,n){\"use strict\";var r=n(58),o=(n(9),n(69)),i=n(4),a=n(31),u=n(70),c=n(68),s=n(77),f=n(74),l=n(72),d=n(73),h=n(76),p=n(75),v=n(67),_=n(71),g=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&\"function\"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?\"symbol\":typeof t},y={code_128_reader:o.a,ean_reader:i.a,ean_5_reader:d.a,ean_2_reader:l.a,ean_8_reader:f.a,code_39_reader:a.a,code_39_vin_reader:u.a,codabar_reader:c.a,upc_reader:s.a,upc_e_reader:h.a,i2of5_reader:p.a,\"2of5_reader\":v.a,code_93_reader:_.a};e.a={create:function(t,e){function n(){}function o(){t.readers.forEach(function(t){var e,n={},r=[];\"object\"===(void 0===t?\"undefined\":g(t))?(e=t.format,n=t.config):\"string\"==typeof t&&(e=t),n.supplements&&(r=n.supplements.map(function(t){return new y[t]})),h.push(new y[e](n,r))})}function i(){}function a(t,n,r){function o(e){var r={y:e*Math.sin(n),x:e*Math.cos(n)};t[0].y-=r.y,t[0].x-=r.x,t[1].y+=r.y,t[1].x+=r.x}for(o(r);r>1&&(!e.inImageWithBorder(t[0],0)||!e.inImageWithBorder(t[1],0));)r-=Math.ceil(r/2),o(-r);return t}function u(t){return[{x:(t[1][0]-t[0][0])/2+t[0][0],y:(t[1][1]-t[0][1])/2+t[0][1]},{x:(t[3][0]-t[2][0])/2+t[2][0],y:(t[3][1]-t[2][1])/2+t[2][1]}]}function c(t){var n,o=null,i=r.a.getBarcodeLine(e,t[0],t[1]);for(r.a.toBinaryLine(i),n=0;n<h.length&&null===o;n++)o=h[n].decodePattern(i.line);return null===o?null:{codeResult:o,barcodeLine:i}}function s(t,e,n){var r,o,i,a=Math.sqrt(Math.pow(t[1][0]-t[0][0],2)+Math.pow(t[1][1]-t[0][1],2)),u=16,s=null,f=Math.sin(n),l=Math.cos(n);for(r=1;r<u&&null===s;r++)o=a/u*r*(r%2==0?-1:1),i={y:o*f,x:o*l},e[0].y+=i.x,e[0].x-=i.y,e[1].y+=i.x,e[1].x-=i.y,s=c(e);return s}function f(t){return Math.sqrt(Math.pow(Math.abs(t[1].y-t[0].y),2)+Math.pow(Math.abs(t[1].x-t[0].x),2))}function l(t){var e,n,r,o;d.ctx.overlay;return e=u(t),o=f(e),n=Math.atan2(e[1].y-e[0].y,e[1].x-e[0].x),null===(e=a(e,n,Math.floor(.1*o)))?null:(r=c(e),null===r&&(r=s(t,e,n)),null===r?null:{codeResult:r.codeResult,line:e,angle:n,pattern:r.barcodeLine.line,threshold:r.barcodeLine.threshold})}var d={ctx:{frequency:null,pattern:null,overlay:null},dom:{frequency:null,pattern:null,overlay:null}},h=[];return n(),o(),i(),{decodeFromBoundingBox:function(t){return l(t)},decodeFromBoundingBoxes:function(e){var n,r,o=[],i=t.multiple;for(n=0;n<e.length;n++){var a=e[n];if(r=l(a)||{},r.box=a,i)o.push(r);else if(r.codeResult)return r}if(i)return{barcodes:o}},setReaders:function(e){t.readers=e,h.length=0,o()}}}}},function(t,e,n){\"use strict\";var r=(n(20),{}),o={DIR:{UP:1,DOWN:-1}};r.getBarcodeLine=function(t,e,n){function r(t,e){l=y[e*m+t],x+=l,b=l<b?l:b,E=l>E?l:E,g.push(l)}var o,i,a,u,c,s,f,l,d=0|e.x,h=0|e.y,p=0|n.x,v=0|n.y,_=Math.abs(v-h)>Math.abs(p-d),g=[],y=t.data,m=t.size.x,x=0,b=255,E=0;for(_&&(s=d,d=h,h=s,s=p,p=v,v=s),d>p&&(s=d,d=p,p=s,s=h,h=v,v=s),o=p-d,i=Math.abs(v-h),a=o/2|0,c=h,u=h<v?1:-1,f=d;f<p;f++)_?r(c,f):r(f,c),(a-=i)<0&&(c+=u,a+=o);return{line:g,min:b,max:E}},r.toBinaryLine=function(t){var e,n,r,i,a,u,c=t.min,s=t.max,f=t.line,l=c+(s-c)/2,d=[],h=(s-c)/12,p=-h;for(r=f[0]>l?o.DIR.UP:o.DIR.DOWN,d.push({pos:0,val:f[0]}),a=0;a<f.length-2;a++)e=f[a+1]-f[a],n=f[a+2]-f[a+1],i=e+n<p&&f[a+1]<1.5*l?o.DIR.DOWN:e+n>h&&f[a+1]>.5*l?o.DIR.UP:r,r!==i&&(d.push({pos:a,val:f[a]}),r=i);for(d.push({pos:f.length,val:f[f.length-1]}),u=d[0].pos;u<d[1].pos;u++)f[u]=f[u]>l?0:1;for(a=1;a<d.length-1;a++)for(h=d[a+1].val>d[a].val?d[a].val+(d[a+1].val-d[a].val)/3*2|0:d[a+1].val+(d[a].val-d[a+1].val)/3|0,u=d[a].pos;u<d[a+1].pos;u++)f[u]=f[u]>h?0:1;return{line:f,threshold:h}},r.debug={printFrequency:function(t,e){var n,r=e.getContext(\"2d\");for(e.width=t.length,e.height=256,r.beginPath(),r.strokeStyle=\"blue\",n=0;n<t.length;n++)r.moveTo(n,255),r.lineTo(n,255-t[n]);r.stroke(),r.closePath()},printPattern:function(t,e){var n,r=e.getContext(\"2d\");for(e.width=t.length,r.fillColor=\"black\",n=0;n<t.length;n++)1===t[n]&&r.fillRect(n,0,1,100)}},e.a=r},function(t,e,n){\"use strict\";function r(t){return new Promise(function(e,n){function r(){o>0?t.videoWidth>10&&t.videoHeight>10?e():window.setTimeout(r,500):n(\"Unable to play video stream. Is webcam working?\"),o--}var o=10;r()})}function o(t,e){return n.i(d.a)(e).then(function(e){return new Promise(function(n){s=e,t.setAttribute(\"autoplay\",!0),t.setAttribute(\"muted\",!0),t.setAttribute(\"playsinline\",!0),t.srcObject=e,t.addEventListener(\"loadedmetadata\",function(){t.play(),n()})})}).then(r.bind(null,t))}function i(t){var e=l()(t,[\"width\",\"height\",\"facingMode\",\"aspectRatio\",\"deviceId\"]);return void 0!==t.minAspectRatio&&t.minAspectRatio>0&&(e.aspectRatio=t.minAspectRatio,console.log(\"WARNING: Constraint 'minAspectRatio' is deprecated; Use 'aspectRatio' instead\")),void 0!==t.facing&&(e.facingMode=t.facing,console.log(\"WARNING: Constraint 'facing' is deprecated. Use 'facingMode' instead'\")),e}function a(t){var e={audio:!1,video:i(t)};return e.video.deviceId&&e.video.facingMode&&delete e.video.facingMode,Promise.resolve(e)}function u(){return n.i(d.b)().then(function(t){return t.filter(function(t){return\"videoinput\"===t.kind})})}function c(){if(s){var t=s.getVideoTracks();if(t&&t.length)return t[0]}}var s,f=n(162),l=n.n(f),d=n(52);e.a={request:function(t,e){return a(e).then(o.bind(null,t))},release:function(){var t=s&&s.getVideoTracks();t&&t.length&&t[0].stop(),s=null},enumerateVideoDevices:u,getActiveStreamLabel:function(){var t=c();return t?t.label:\"\"},getActiveTrack:c}},function(t,e,n){\"use strict\";function r(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:d;return/^blob\\:/i.test(t)?i(t).then(o).then(function(t){return a(t,e)}):Promise.resolve(null)}function o(t){return new Promise(function(e){var n=new FileReader;n.onload=function(t){return e(t.target.result)},n.readAsArrayBuffer(t)})}function i(t){return new Promise(function(e,n){var r=new XMLHttpRequest;r.open(\"GET\",t,!0),r.responseType=\"blob\",r.onreadystatechange=function(){r.readyState!==XMLHttpRequest.DONE||200!==r.status&&0!==r.status||e(this.response)},r.onerror=n,r.send()})}function a(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:d,n=new DataView(t),r=t.byteLength,o=e.reduce(function(t,e){var n=Object.keys(l).filter(function(t){return l[t]===e})[0];return n&&(t[n]=e),t},{}),i=2;if(255!==n.getUint8(0)||216!==n.getUint8(1))return!1;for(;i<r;){if(255!==n.getUint8(i))return!1;if(225===n.getUint8(i+1))return u(n,i+4,o);i+=2+n.getUint16(i+2)}}function u(t,e,n){if(\"Exif\"!==f(t,e,4))return!1;var r=e+6,o=void 0;if(18761===t.getUint16(r))o=!1;else{if(19789!==t.getUint16(r))return!1;o=!0}if(42!==t.getUint16(r+2,!o))return!1;var i=t.getUint32(r+4,!o);return!(i<8)&&c(t,r,r+i,n,o)}function c(t,e,n,r,o){for(var i=t.getUint16(n,!o),a={},u=0;u<i;u++){var c=n+12*u+2,f=r[t.getUint16(c,!o)];f&&(a[f]=s(t,c,e,n,o))}return a}function s(t,e,n,r,o){var i=t.getUint16(e+2,!o),a=t.getUint32(e+4,!o);switch(i){case 3:if(1===a)return t.getUint16(e+8,!o)}}function f(t,e,n){for(var r=\"\",o=e;o<e+n;o++)r+=String.fromCharCode(t.getUint8(o));return r}e.a=r;var l={274:\"orientation\"},d=Object.keys(l).map(function(t){return l[t]})},function(t,e,n){\"use strict\";function r(t,e){t.width!==e.x&&(t.width=e.x),t.height!==e.y&&(t.height=e.y)}var o=n(19),i=Math.PI/180,a={};a.create=function(t,e){var a,u={},c=t.getConfig(),s=(n.i(o.b)(t.getRealWidth(),t.getRealHeight()),t.getCanvasSize()),f=n.i(o.b)(t.getWidth(),t.getHeight()),l=t.getTopRight(),d=l.x,h=l.y,p=null,v=null;return a=e?e:document.createElement(\"canvas\"),a.width=s.x,a.height=s.y,p=a.getContext(\"2d\"),v=new Uint8Array(f.x*f.y),u.attachData=function(t){v=t},u.getData=function(){return v},u.grab=function(){var e,u=c.halfSample,l=t.getFrame(),_=l,g=0;if(_){if(r(a,s),\"ImageStream\"===c.type&&(_=l.img,l.tags&&l.tags.orientation))switch(l.tags.orientation){case 6:g=90*i;break;case 8:g=-90*i}return 0!==g?(p.translate(s.x/2,s.y/2),p.rotate(g),p.drawImage(_,-s.y/2,-s.x/2,s.y,s.x),p.rotate(-g),p.translate(-s.x/2,-s.y/2)):p.drawImage(_,0,0,s.x,s.y),e=p.getImageData(d,h,f.x,f.y).data,u?n.i(o.c)(e,f,v):n.i(o.d)(e,v,c),!0}return!1},u.getSize=function(){return f},u},e.a=a},function(t,e,n){\"use strict\";function r(t,e){t.onload=function(){e.loaded(this)}}var o=n(60),i={};i.load=function(t,e,i,a,u){var c,s,f,l=new Array(a),d=new Array(l.length);if(u===!1)l[0]=t;else for(c=0;c<l.length;c++)f=i+c,l[c]=t+\"image-\"+(\"00\"+f).slice(-3)+\".jpg\";for(d.notLoaded=[],d.addImage=function(t){d.notLoaded.push(t)},d.loaded=function(r){for(var i=d.notLoaded,a=0;a<i.length;a++)if(i[a]===r){i.splice(a,1);for(var c=0;c<l.length;c++){var s=l[c].substr(l[c].lastIndexOf(\"/\"));if(r.src.lastIndexOf(s)!==-1){d[c]={img:r};break}}break}0===i.length&&(u===!1?n.i(o.a)(t,[\"orientation\"]).then(function(t){d[0].tags=t,e(d)}).catch(function(t){console.log(t),e(d)}):e(d))},c=0;c<l.length;c++)s=new Image,d.addImage(s),r(s,d),s.src=l[c]},e.a=i},function(t,e,n){\"use strict\";var r=n(62),o={};o.createVideoStream=function(t){function e(){var e=t.videoWidth,o=t.videoHeight;n=i.size?e/o>1?i.size:Math.floor(e/o*i.size):e,r=i.size?e/o>1?Math.floor(o/e*i.size):i.size:o,s.x=n,s.y=r}var n,r,o={},i=null,a=[\"canrecord\",\"ended\"],u={},c={x:0,y:0},s={x:0,y:0};return o.getRealWidth=function(){return t.videoWidth},o.getRealHeight=function(){return t.videoHeight},o.getWidth=function(){return n},o.getHeight=function(){return r},o.setWidth=function(t){n=t},o.setHeight=function(t){r=t},o.setInputStream=function(e){i=e,t.src=void 0!==e.src?e.src:\"\"},o.ended=function(){return t.ended},o.getConfig=function(){return i},o.setAttribute=function(e,n){t.setAttribute(e,n)},o.pause=function(){t.pause()},o.play=function(){t.play()},o.setCurrentTime=function(e){\"LiveStream\"!==i.type&&(t.currentTime=e)},o.addEventListener=function(e,n,r){a.indexOf(e)!==-1?(u[e]||(u[e]=[]),u[e].push(n)):t.addEventListener(e,n,r)},o.clearEventHandlers=function(){a.forEach(function(e){var n=u[e];n&&n.length>0&&n.forEach(function(n){t.removeEventListener(e,n)})})},o.trigger=function(t,n){var r,i=u[t];if(\"canrecord\"===t&&e(),i&&i.length>0)for(r=0;r<i.length;r++)i[r].apply(o,n)},o.setTopRight=function(t){c.x=t.x,c.y=t.y},o.getTopRight=function(){return c},o.setCanvasSize=function(t){s.x=t.x,s.y=t.y},o.getCanvasSize=function(){return s},o.getFrame=function(){return t},o},o.createLiveStream=function(t){t.setAttribute(\"autoplay\",!0);var e=o.createVideoStream(t);return e.ended=function(){return!1},e},o.createImageStream=function(){function t(){l=!1,r.a.load(v,function(t){if(d=t,t[0].tags&&t[0].tags.orientation)switch(t[0].tags.orientation){case 6:case 8:u=t[0].img.height,c=t[0].img.width;break;default:u=t[0].img.width,c=t[0].img.height}else u=t[0].img.width,c=t[0].img.height;n=a.size?u/c>1?a.size:Math.floor(u/c*a.size):u,o=a.size?u/c>1?Math.floor(c/u*a.size):a.size:c,x.x=n,x.y=o,l=!0,s=0,setTimeout(function(){e(\"canrecord\",[])},0)},p,h,a.sequence)}function e(t,e){var n,r=y[t];if(r&&r.length>0)for(n=0;n<r.length;n++)r[n].apply(i,e)}var n,o,i={},a=null,u=0,c=0,s=0,f=!0,l=!1,d=null,h=0,p=1,v=null,_=!1,g=[\"canrecord\",\"ended\"],y={},m={x:0,y:0},x={x:0,y:0};return i.trigger=e,i.getWidth=function(){return n},i.getHeight=function(){return o},i.setWidth=function(t){n=t},i.setHeight=function(t){o=t},i.getRealWidth=function(){return u},i.getRealHeight=function(){return c},i.setInputStream=function(e){a=e,e.sequence===!1?(v=e.src,h=1):(v=e.src,h=e.length),t()},i.ended=function(){return _},i.setAttribute=function(){},i.getConfig=function(){return a},i.pause=function(){f=!0},i.play=function(){f=!1},i.setCurrentTime=function(t){s=t},i.addEventListener=function(t,e){g.indexOf(t)!==-1&&(y[t]||(y[t]=[]),y[t].push(e))},i.setTopRight=function(t){m.x=t.x,m.y=t.y},i.getTopRight=function(){return m},i.setCanvasSize=function(t){x.x=t.x,x.y=t.y},i.getCanvasSize=function(){return x},i.getFrame=function(){var t;return l?(f||(t=d[s],s<h-1?s++:setTimeout(function(){_=!0,e(\"ended\",[])},0)),t):null},i},e.a=o},function(t,e,n){\"use strict\";(function(t){function r(){var e;v=p.halfSample?new R.a({x:O.size.x/2|0,y:O.size.y/2|0}):O,C=n.i(w.e)(p.patchSize,v.size),z.x=v.size.x/C.x|0,z.y=v.size.y/C.y|0,E=new R.a(v.size,void 0,Uint8Array,!1),y=new R.a(C,void 0,Array,!0),e=new ArrayBuffer(65536),g=new R.a(C,new Uint8Array(e,0,C.x*C.y)),_=new R.a(C,new Uint8Array(e,C.x*C.y*3,C.x*C.y),void 0,!0),A=n.i(P.a)(\"undefined\"!=typeof window?window:\"undefined\"!=typeof self?self:t,{size:C.x},e),b=new R.a({x:v.size.x/g.size.x|0,y:v.size.y/g.size.y|0},void 0,Array,!0),m=new R.a(b.size,void 0,void 0,!0),x=new R.a(b.size,void 0,Int32Array,!0)}function o(){p.useWorker||\"undefined\"==typeof document||(N.dom.binary=document.createElement(\"canvas\"),N.dom.binary.className=\"binaryBuffer\",N.ctx.binary=N.dom.binary.getContext(\"2d\"),N.dom.binary.width=E.size.x,N.dom.binary.height=E.size.y)}function i(t){var e,n,r,o,i,a,u,c=E.size.x,s=E.size.y,f=-E.size.x,l=-E.size.y;for(e=0,n=0;n<t.length;n++)o=t[n],e+=o.rad;for(e/=t.length,e=(180*e/Math.PI+90)%180-90,e<0&&(e+=180),e=(180-e)*Math.PI/180,i=M.copy(M.create(),[Math.cos(e),Math.sin(e),-Math.sin(e),Math.cos(e)]),n=0;n<t.length;n++)for(o=t[n],r=0;r<4;r++)I.transformMat2(o.box[r],o.box[r],i);for(n=0;n<t.length;n++)for(o=t[n],r=0;r<4;r++)o.box[r][0]<c&&(c=o.box[r][0]),o.box[r][0]>f&&(f=o.box[r][0]),o.box[r][1]<s&&(s=o.box[r][1]),o.box[r][1]>l&&(l=o.box[r][1]);for(a=[[c,s],[f,s],[f,l],[c,l]],u=p.halfSample?2:1,i=M.invert(i,i),r=0;r<4;r++)I.transformMat2(a[r],a[r],i);for(r=0;r<4;r++)I.scale(a[r],a[r],u);return a}function a(){n.i(w.f)(v,E),E.zeroBorder()}function u(){var t,e,n,r,o,i,a,u=[];for(t=0;t<z.x;t++)for(e=0;e<z.y;e++)n=g.size.x*t,r=g.size.y*e,l(n,r),_.zeroBorder(),T.a.init(y.data,0),i=S.a.create(_,y),a=i.rasterize(0),o=y.moments(a.count),u=u.concat(d(o,[t,e],n,r));return u}function c(t){var e,n,r=[];for(e=0;e<t;e++)r.push(0);for(n=x.data.length;n--;)x.data[n]>0&&r[x.data[n]-1]++;return r=r.map(function(t,e){return{val:t,label:e+1}}),r.sort(function(t,e){return e.val-t.val}),r.filter(function(t){return t.val>=5})}function s(t,e){var n,r,o,a,u=[],c=[];for(n=0;n<t.length;n++){for(r=x.data.length,u.length=0;r--;)x.data[r]===t[n].label&&(o=b.data[r],u.push(o));a=i(u),a&&c.push(a)}return c}function f(t){var e=n.i(w.g)(t,.9),r=n.i(w.h)(e,1,function(t){return t.getPoints().length}),o=[],i=[];if(1===r.length){o=r[0].item.getPoints();for(var a=0;a<o.length;a++)i.push(o[a].point)}return i}function l(t,e){E.subImageAsCopy(g,n.i(w.b)(t,e)),A.skeletonize()}function d(t,e,n,r){var o,i,a,u,c=[],s=[],l=Math.ceil(C.x/3);if(t.length>=2){for(o=0;o<t.length;o++)t[o].m00>l&&c.push(t[o]);if(c.length>=2){for(a=f(c),i=0,o=0;o<a.length;o++)i+=a[o].rad;a.length>1&&a.length>=c.length/4*3&&a.length>t.length/4&&(i/=a.length,u={index:e[1]*z.x+e[0],pos:{x:n,y:r},box:[I.clone([n,r]),I.clone([n+g.size.x,r]),I.clone([n+g.size.x,r+g.size.y]),I.clone([n,r+g.size.y])],moments:a,rad:i,vec:I.clone([Math.cos(i),Math.sin(i)])},s.push(u))}}return s}function h(t){function e(){var t;for(t=0;t<x.data.length;t++)if(0===x.data[t]&&1===m.data[t])return t;return x.length}function n(t){var e,r,o,u,c,s={x:t%x.size.x,y:t/x.size.x|0};if(t<x.data.length)for(o=b.data[t],x.data[t]=i,c=0;c<D.a.searchDirections.length;c++)r=s.y+D.a.searchDirections[c][0],e=s.x+D.a.searchDirections[c][1],u=r*x.size.x+e,0!==m.data[u]?0===x.data[u]&&Math.abs(I.dot(b.data[u].vec,o.vec))>a&&n(u):x.data[u]=Number.MAX_VALUE}var r,o,i=0,a=.95,u=0;for(T.a.init(m.data,0),T.a.init(x.data,0),T.a.init(b.data,null),r=0;r<t.length;r++)o=t[r],b.data[o.index]=o,m.data[o.index]=1;for(m.zeroBorder();(u=e())<x.data.length;)i++,n(u);return i}var p,v,_,g,y,m,x,b,E,C,O,A,R=n(20),w=n(19),T=n(3),S=(n(9),n(65)),D=n(30),P=n(66),I={clone:n(7),dot:n(32),scale:n(81),transformMat2:n(82)},M={copy:n(78),create:n(79),invert:n(80)},N={ctx:{binary:null},dom:{binary:null}},z={x:0,y:0};e.a={init:function(t,e){p=e,O=t,r(),o()},locate:function(){var t,e;if(p.halfSample&&n.i(w.i)(O,v),a(),t=u(),t.length<z.x*z.y*.05)return null;var r=h(t);return r<1?null:(e=c(r),0===e.length?null:s(e,r))},checkImageConstraints:function(t,e){var r,o,i,a=t.getWidth(),u=t.getHeight(),c=e.halfSample?.5:1;if(t.getConfig().area&&(i=n.i(w.j)(a,u,t.getConfig().area),t.setTopRight({x:i.sx,y:i.sy}),t.setCanvasSize({x:a,y:u}),a=i.sw,u=i.sh),o={x:Math.floor(a*c),y:Math.floor(u*c)},r=n.i(w.e)(e.patchSize,o),t.setWidth(Math.floor(Math.floor(o.x/r.x)*(1/c)*r.x)),t.setHeight(Math.floor(Math.floor(o.y/r.y)*(1/c)*r.y)),t.getWidth()%r.x==0&&t.getHeight()%r.y==0)return!0;throw new Error(\"Image dimensions do not comply with the current settings: Width (\"+a+\" )and height (\"+u+\") must a multiple of \"+r.x)}}}).call(e,n(47))},function(t,e,n){\"use strict\";var r=n(30),o={createContour2D:function(){return{dir:null,index:null,firstVertex:null,insideContours:null,nextpeer:null,prevpeer:null}},CONTOUR_DIR:{CW_DIR:0,CCW_DIR:1,UNKNOWN_DIR:2},DIR:{OUTSIDE_EDGE:-32767,INSIDE_EDGE:-32766},create:function(t,e){var n=t.data,i=e.data,a=t.size.x,u=t.size.y,c=r.a.create(t,e);return{rasterize:function(t){var e,r,s,f,l,d,h,p,v,_,g,y,m=[],x=0;for(y=0;y<400;y++)m[y]=0;for(m[0]=n[0],v=null,d=1;d<u-1;d++)for(f=0,r=m[0],l=1;l<a-1;l++)if(g=d*a+l,0===i[g])if((e=n[g])!==r){if(0===f)s=x+1,m[s]=e,r=e,null!==(h=c.contourTracing(d,l,s,e,o.DIR.OUTSIDE_EDGE))&&(x++,f=s,p=o.createContour2D(),p.dir=o.CONTOUR_DIR.CW_DIR,p.index=f,p.firstVertex=h,p.nextpeer=v,p.insideContours=null,null!==v&&(v.prevpeer=p),v=p);else if(null!==(h=c.contourTracing(d,l,o.DIR.INSIDE_EDGE,e,f))){for(p=o.createContour2D(),p.firstVertex=h,p.insideContours=null,p.dir=0===t?o.CONTOUR_DIR.CCW_DIR:o.CONTOUR_DIR.CW_DIR,p.index=t,_=v;null!==_&&_.index!==f;)_=_.nextpeer;null!==_&&(p.nextpeer=_.insideContours,null!==_.insideContours&&(_.insideContours.prevpeer=p),_.insideContours=p)}}else i[g]=f;else i[g]===o.DIR.OUTSIDE_EDGE||i[g]===o.DIR.INSIDE_EDGE?(f=0,r=i[g]===o.DIR.INSIDE_EDGE?n[g]:m[0]):(f=i[g],r=m[f]);for(_=v;null!==_;)_.index=t,_=_.nextpeer;return{cc:v,count:x}},debug:{drawContour:function(t,e){var n,r,i,a=t.getContext(\"2d\"),u=e;for(a.strokeStyle=\"red\",a.fillStyle=\"red\",a.lineWidth=1,n=null!==u?u.insideContours:null;null!==u;){switch(null!==n?(r=n,n=n.nextpeer):(r=u,u=u.nextpeer,n=null!==u?u.insideContours:null),r.dir){case o.CONTOUR_DIR.CW_DIR:a.strokeStyle=\"red\";break;case o.CONTOUR_DIR.CCW_DIR:a.strokeStyle=\"blue\";break;case o.CONTOUR_DIR.UNKNOWN_DIR:a.strokeStyle=\"green\"}i=r.firstVertex,a.beginPath(),a.moveTo(i.x,i.y);do i=i.next,a.lineTo(i.x,i.y);while(i!==r.firstVertex);a.stroke()}}}}}};e.a=o},function(module, __webpack_exports__, __webpack_require__) {\"use strict\";function Skeletonizer(stdlib, foreign, buffer) {\"use asm\";var images=new stdlib.Uint8Array(buffer),size=foreign.size|0,imul=stdlib.Math.imul;function erode(inImagePtr, outImagePtr) {inImagePtr=inImagePtr|0;outImagePtr=outImagePtr|0;var v=0,u=0,sum=0,yStart1=0,yStart2=0,xStart1=0,xStart2=0,offset=0;for (v=1; (v|0)<(size - 1|0); v=v+1|0) {offset=offset+size|0;for (u=1; (u|0)<(size - 1|0); u=u+1|0) {yStart1=offset - size|0;yStart2=offset+size|0;xStart1=u - 1|0;xStart2=u+1|0;sum=(images[inImagePtr+yStart1+xStart1|0]|0)+(images[inImagePtr+yStart1+xStart2|0]|0)+(images[inImagePtr+offset+u|0]|0)+(images[inImagePtr+yStart2+xStart1|0]|0)+(images[inImagePtr+yStart2+xStart2|0]|0)|0;if ((sum|0) == (5|0)) {images[outImagePtr+offset+u|0]=1;} else {images[outImagePtr+offset+u|0]=0;}}}return;}function subtract(aImagePtr, bImagePtr, outImagePtr) {aImagePtr=aImagePtr|0;bImagePtr=bImagePtr|0;outImagePtr=outImagePtr|0;var length=0;length=imul(size, size)|0;while ((length|0)>0) {length=length - 1|0;images[outImagePtr+length|0]=(images[aImagePtr+length|0]|0) - (images[bImagePtr+length|0]|0)|0;}}function bitwiseOr(aImagePtr, bImagePtr, outImagePtr) {aImagePtr=aImagePtr|0;bImagePtr=bImagePtr|0;outImagePtr=outImagePtr|0;var length=0;length=imul(size, size)|0;while ((length|0)>0) {length=length - 1|0;images[outImagePtr+length|0]=images[aImagePtr+length|0]|0|(images[bImagePtr+length|0]|0)|0;}}function countNonZero(imagePtr) {imagePtr=imagePtr|0;var sum=0,length=0;length=imul(size, size)|0;while ((length|0)>0) {length=length - 1|0;sum=(sum|0)+(images[imagePtr+length|0]|0)|0;}return sum|0;}function init(imagePtr, value) {imagePtr=imagePtr|0;value=value|0;var length=0;length=imul(size, size)|0;while ((length|0)>0) {length=length - 1|0;images[imagePtr+length|0]=value;}}function dilate(inImagePtr, outImagePtr) {inImagePtr=inImagePtr|0;outImagePtr=outImagePtr|0;var v=0,u=0,sum=0,yStart1=0,yStart2=0,xStart1=0,xStart2=0,offset=0;for (v=1; (v|0)<(size - 1|0); v=v+1|0) {offset=offset+size|0;for (u=1; (u|0)<(size - 1|0); u=u+1|0) {yStart1=offset - size|0;yStart2=offset+size|0;xStart1=u - 1|0;xStart2=u+1|0;sum=(images[inImagePtr+yStart1+xStart1|0]|0)+(images[inImagePtr+yStart1+xStart2|0]|0)+(images[inImagePtr+offset+u|0]|0)+(images[inImagePtr+yStart2+xStart1|0]|0)+(images[inImagePtr+yStart2+xStart2|0]|0)|0;if ((sum|0)>(0|0)) {images[outImagePtr+offset+u|0]=1;} else {images[outImagePtr+offset+u|0]=0;}}}return;}function memcpy(srcImagePtr, dstImagePtr) {srcImagePtr=srcImagePtr|0;dstImagePtr=dstImagePtr|0;var length=0;length=imul(size, size)|0;while ((length|0)>0) {length=length - 1|0;images[dstImagePtr+length|0]=images[srcImagePtr+length|0]|0;}}function zeroBorder(imagePtr) {imagePtr=imagePtr|0;var x=0,y=0;for (x=0; (x|0)<(size - 1|0); x=x+1|0) {images[imagePtr+x|0]=0;images[imagePtr+y|0]=0;y=y+size - 1|0;images[imagePtr+y|0]=0;y=y+1|0;}for (x=0; (x|0)<(size|0); x=x+1|0) {images[imagePtr+y|0]=0;y=y+1|0;}}function skeletonize() {var subImagePtr=0,erodedImagePtr=0,tempImagePtr=0,skelImagePtr=0,sum=0,done=0;erodedImagePtr=imul(size, size)|0;tempImagePtr=erodedImagePtr+erodedImagePtr|0;skelImagePtr=tempImagePtr+erodedImagePtr|0;init(skelImagePtr, 0);zeroBorder(subImagePtr);do {erode(subImagePtr, erodedImagePtr);dilate(erodedImagePtr, tempImagePtr);subtract(subImagePtr, tempImagePtr, tempImagePtr);bitwiseOr(skelImagePtr, tempImagePtr, skelImagePtr);memcpy(erodedImagePtr, subImagePtr);sum=countNonZero(subImagePtr)|0;done=(sum|0) == 0|0;} while (!done);}return {skeletonize: skeletonize};} __webpack_exports__[\"a\"]=Skeletonizer; },function(t,e,n){\"use strict\";function r(t){o.a.call(this,t),this.barSpaceRatio=[1,1]}var o=n(1),i=1,a=3,u={START_PATTERN:{value:[a,i,a,i,i,i]},STOP_PATTERN:{value:[a,i,i,i,a]},CODE_PATTERN:{value:[[i,i,a,a,i],[a,i,i,i,a],[i,a,i,i,a],[a,a,i,i,i],[i,i,a,i,a],[a,i,a,i,i],[i,a,a,i,i],[i,i,i,a,a],[a,i,i,a,i],[i,a,i,a,i]]},SINGLE_CODE_ERROR:{value:.78,writable:!0},AVG_CODE_ERROR:{value:.3,writable:!0},FORMAT:{value:\"2of5\"}},c=u.START_PATTERN.value.reduce(function(t,e){return t+e},0);r.prototype=Object.create(o.a.prototype,u),r.prototype.constructor=r,r.prototype._findPattern=function(t,e,n,r){var o,i,a,u,c=[],s=this,f=0,l={error:Number.MAX_VALUE,code:-1,start:0,end:0},d=s.AVG_CODE_ERROR;for(n=n||!1,r=r||!1,e||(e=s._nextSet(s._row)),o=0;o<t.length;o++)c[o]=0;for(o=e;o<s._row.length;o++)if(s._row[o]^n)c[f]++;else{if(f===c.length-1){for(u=0,a=0;a<c.length;a++)u+=c[a];if((i=s._matchPattern(c,t))<d)return l.error=i,l.start=o-u,l.end=o,l;if(!r)return null;for(a=0;a<c.length-2;a++)c[a]=c[a+2];c[c.length-2]=0,c[c.length-1]=0,f--}else f++;c[f]=1,n=!n}return null},r.prototype._findStart=function(){for(var t,e,n=this,r=n._nextSet(n._row),o=1;!e;){if(!(e=n._findPattern(n.START_PATTERN,r,!1,!0)))return null;if(o=Math.floor((e.end-e.start)/c),(t=e.start-5*o)>=0&&n._matchRange(t,e.start,0))return e;r=e.end,e=null}},r.prototype._verifyTrailingWhitespace=function(t){var e,n=this;return e=t.end+(t.end-t.start)/2,e<n._row.length&&n._matchRange(t.end,e,0)?t:null},r.prototype._findEnd=function(){var t,e,n,r=this;return r._row.reverse(),n=r._nextSet(r._row),t=r._findPattern(r.STOP_PATTERN,n,!1,!0),r._row.reverse(),null===t?null:(e=t.start,t.start=r._row.length-t.end,t.end=r._row.length-e,null!==t?r._verifyTrailingWhitespace(t):null)},r.prototype._decodeCode=function(t){var e,n,r,o=this,i=0,a=o.AVG_CODE_ERROR,u={error:Number.MAX_VALUE,code:-1,start:0,end:0};for(e=0;e<t.length;e++)i+=t[e];for(r=0;r<o.CODE_PATTERN.length;r++)(n=o._matchPattern(t,o.CODE_PATTERN[r]))<u.error&&(u.code=r,u.error=n);if(u.error<a)return u},r.prototype._decodePayload=function(t,e,n){for(var r,o,i=this,a=0,u=t.length,c=[0,0,0,0,0];a<u;){for(r=0;r<5;r++)c[r]=t[a]*this.barSpaceRatio[0],a+=2;if(!(o=i._decodeCode(c)))return null;e.push(o.code+\"\"),n.push(o)}return o},r.prototype._verifyCounterLength=function(t){return t.length%10==0},r.prototype._decode=function(){var t,e,n,r=this,o=[],i=[];return(t=r._findStart())?(i.push(t),(e=r._findEnd())?(n=r._fillCounters(t.end,e.start,!1),r._verifyCounterLength(n)&&r._decodePayload(n,o,i)?o.length<5?null:(i.push(e),{code:o.join(\"\"),start:t.start,end:e.end,startInfo:t,decodedCodes:i}):null):null):null},e.a=r},function(t,e,n){\"use strict\";function r(){o.a.call(this),this._counters=[]}var o=n(1),i={ALPHABETH_STRING:{value:\"0123456789-$:/.+ABCD\"},ALPHABET:{value:[48,49,50,51,52,53,54,55,56,57,45,36,58,47,46,43,65,66,67,68]},CHARACTER_ENCODINGS:{value:[3,6,9,96,18,66,33,36,48,72,12,24,69,81,84,21,26,41,11,14]},START_END:{value:[26,41,11,14]},MIN_ENCODED_CHARS:{value:4},MAX_ACCEPTABLE:{value:2},PADDING:{value:1.5},FORMAT:{value:\"codabar\",writeable:!1}};r.prototype=Object.create(o.a.prototype,i),r.prototype.constructor=r,r.prototype._decode=function(){var t,e,n,r,o,i=this,a=[];if(this._counters=i._fillCounters(),!(t=i._findStart()))return null;r=t.startCounter;do{if((n=i._toPattern(r))<0)return null;if((e=i._patternToChar(n))<0)return null;if(a.push(e),r+=8,a.length>1&&i._isStartEnd(n))break}while(r<i._counters.length);return a.length-2<i.MIN_ENCODED_CHARS||!i._isStartEnd(n)?null:i._verifyWhitespace(t.startCounter,r-8)&&i._validateResult(a,t.startCounter)?(r=r>i._counters.length?i._counters.length:r,o=t.start+i._sumCounters(t.startCounter,r-8),{code:a.join(\"\"),start:t.start,end:o,startInfo:t,decodedCodes:a}):null},r.prototype._verifyWhitespace=function(t,e){return(t-1<=0||this._counters[t-1]>=this._calculatePatternLength(t)/2)&&(e+8>=this._counters.length||this._counters[e+7]>=this._calculatePatternLength(e)/2)},r.prototype._calculatePatternLength=function(t){var e,n=0;for(e=t;e<t+7;e++)n+=this._counters[e];return n},r.prototype._thresholdResultPattern=function(t,e){var n,r,o,i,a,u=this,c={space:{narrow:{size:0,counts:0,min:0,max:Number.MAX_VALUE},wide:{size:0,counts:0,min:0,max:Number.MAX_VALUE}},bar:{narrow:{size:0,counts:0,min:0,max:Number.MAX_VALUE},wide:{size:0,counts:0,min:0,max:Number.MAX_VALUE}}},s=e;for(o=0;o<t.length;o++){for(a=u._charToPattern(t[o]),i=6;i>=0;i--)n=2==(1&i)?c.bar:c.space,r=1==(1&a)?n.wide:n.narrow,r.size+=u._counters[s+i],r.counts++,a>>=1;s+=8}return[\"space\",\"bar\"].forEach(function(t){var e=c[t];e.wide.min=Math.floor((e.narrow.size/e.narrow.counts+e.wide.size/e.wide.counts)/2),e.narrow.max=Math.ceil(e.wide.min),e.wide.max=Math.ceil((e.wide.size*u.MAX_ACCEPTABLE+u.PADDING)/e.wide.counts)}),c},r.prototype._charToPattern=function(t){var e,n=this,r=t.charCodeAt(0);for(e=0;e<n.ALPHABET.length;e++)if(n.ALPHABET[e]===r)return n.CHARACTER_ENCODINGS[e];return 0},r.prototype._validateResult=function(t,e){var n,r,o,i,a,u,c=this,s=c._thresholdResultPattern(t,e),f=e;for(n=0;n<t.length;n++){for(u=c._charToPattern(t[n]),r=6;r>=0;r--){if(o=0==(1&r)?s.bar:s.space,i=1==(1&u)?o.wide:o.narrow,(a=c._counters[f+r])<i.min||a>i.max)return!1;u>>=1}f+=8}return!0},r.prototype._patternToChar=function(t){var e,n=this;for(e=0;e<n.CHARACTER_ENCODINGS.length;e++)if(n.CHARACTER_ENCODINGS[e]===t)return String.fromCharCode(n.ALPHABET[e]);return-1},r.prototype._computeAlternatingThreshold=function(t,e){var n,r,o=Number.MAX_VALUE,i=0;for(n=t;n<e;n+=2)r=this._counters[n],r>i&&(i=r),r<o&&(o=r);return(o+i)/2|0},r.prototype._toPattern=function(t){var e,n,r,o,i=7,a=t+i,u=1<<i-1,c=0;if(a>this._counters.length)return-1;for(e=this._computeAlternatingThreshold(t,a),n=this._computeAlternatingThreshold(t+1,a),r=0;r<i;r++)o=0==(1&r)?e:n,this._counters[t+r]>o&&(c|=u),u>>=1;return c},r.prototype._isStartEnd=function(t){var e;for(e=0;e<this.START_END.length;e++)if(this.START_END[e]===t)return!0;return!1},r.prototype._sumCounters=function(t,e){var n,r=0;for(n=t;n<e;n++)r+=this._counters[n];return r},r.prototype._findStart=function(){var t,e,n,r=this,o=r._nextUnset(r._row);for(t=1;t<this._counters.length;t++)if((e=r._toPattern(t))!==-1&&r._isStartEnd(e))return o+=r._sumCounters(0,t),n=o+r._sumCounters(t,t+8),{start:o,end:n,startCounter:t,endCounter:t+8}},e.a=r},function(t,e,n){\"use strict\";function r(){i.a.call(this)}function o(t,e,n){for(var r=n.length,o=0,i=0;r--;)i+=t[n[r]],o+=e[n[r]];return i/o}var i=n(1),a={CODE_SHIFT:{value:98},CODE_C:{value:99},CODE_B:{value:100},CODE_A:{value:101},START_CODE_A:{value:103},START_CODE_B:{value:104},START_CODE_C:{value:105},STOP_CODE:{value:106},CODE_PATTERN:{value:[[2,1,2,2,2,2],[2,2,2,1,2,2],[2,2,2,2,2,1],[1,2,1,2,2,3],[1,2,1,3,2,2],[1,3,1,2,2,2],[1,2,2,2,1,3],[1,2,2,3,1,2],[1,3,2,2,1,2],[2,2,1,2,1,3],[2,2,1,3,1,2],[2,3,1,2,1,2],[1,1,2,2,3,2],[1,2,2,1,3,2],[1,2,2,2,3,1],[1,1,3,2,2,2],[1,2,3,1,2,2],[1,2,3,2,2,1],[2,2,3,2,1,1],[2,2,1,1,3,2],[2,2,1,2,3,1],[2,1,3,2,1,2],[2,2,3,1,1,2],[3,1,2,1,3,1],[3,1,1,2,2,2],[3,2,1,1,2,2],[3,2,1,2,2,1],[3,1,2,2,1,2],[3,2,2,1,1,2],[3,2,2,2,1,1],[2,1,2,1,2,3],[2,1,2,3,2,1],[2,3,2,1,2,1],[1,1,1,3,2,3],[1,3,1,1,2,3],[1,3,1,3,2,1],[1,1,2,3,1,3],[1,3,2,1,1,3],[1,3,2,3,1,1],[2,1,1,3,1,3],[2,3,1,1,1,3],[2,3,1,3,1,1],[1,1,2,1,3,3],[1,1,2,3,3,1],[1,3,2,1,3,1],[1,1,3,1,2,3],[1,1,3,3,2,1],[1,3,3,1,2,1],[3,1,3,1,2,1],[2,1,1,3,3,1],[2,3,1,1,3,1],[2,1,3,1,1,3],[2,1,3,3,1,1],[2,1,3,1,3,1],[3,1,1,1,2,3],[3,1,1,3,2,1],[3,3,1,1,2,1],[3,1,2,1,1,3],[3,1,2,3,1,1],[3,3,2,1,1,1],[3,1,4,1,1,1],[2,2,1,4,1,1],[4,3,1,1,1,1],[1,1,1,2,2,4],[1,1,1,4,2,2],[1,2,1,1,2,4],[1,2,1,4,2,1],[1,4,1,1,2,2],[1,4,1,2,2,1],[1,1,2,2,1,4],[1,1,2,4,1,2],[1,2,2,1,1,4],[1,2,2,4,1,1],[1,4,2,1,1,2],[1,4,2,2,1,1],[2,4,1,2,1,1],[2,2,1,1,1,4],[4,1,3,1,1,1],[2,4,1,1,1,2],[1,3,4,1,1,1],[1,1,1,2,4,2],[1,2,1,1,4,2],[1,2,1,2,4,1],[1,1,4,2,1,2],[1,2,4,1,1,2],[1,2,4,2,1,1],[4,1,1,2,1,2],[4,2,1,1,1,2],[4,2,1,2,1,1],[2,1,2,1,4,1],[2,1,4,1,2,1],[4,1,2,1,2,1],[1,1,1,1,4,3],[1,1,1,3,4,1],[1,3,1,1,4,1],[1,1,4,1,1,3],[1,1,4,3,1,1],[4,1,1,1,1,3],[4,1,1,3,1,1],[1,1,3,1,4,1],[1,1,4,1,3,1],[3,1,1,1,4,1],[4,1,1,1,3,1],[2,1,1,4,1,2],[2,1,1,2,1,4],[2,1,1,2,3,2],[2,3,3,1,1,1,2]]},SINGLE_CODE_ERROR:{value:.64},AVG_CODE_ERROR:{value:.3},FORMAT:{value:\"code_128\",writeable:!1},MODULE_INDICES:{value:{bar:[0,2,4],space:[1,3,5]}}};r.prototype=Object.create(i.a.prototype,a),r.prototype.constructor=r,r.prototype._decodeCode=function(t,e){var n,r,i,a=[0,0,0,0,0,0],u=this,c=t,s=!u._row[c],f=0,l={error:Number.MAX_VALUE,code:-1,start:t,end:t,correction:{bar:1,space:1}};for(n=c;n<u._row.length;n++)if(u._row[n]^s)a[f]++;else{if(f===a.length-1){for(e&&u._correct(a,e),r=0;r<u.CODE_PATTERN.length;r++)(i=u._matchPattern(a,u.CODE_PATTERN[r]))<l.error&&(l.code=r,l.error=i);return l.end=n,l.code===-1||l.error>u.AVG_CODE_ERROR?null:(u.CODE_PATTERN[l.code]&&(l.correction.bar=o(u.CODE_PATTERN[l.code],a,this.MODULE_INDICES.bar),l.correction.space=o(u.CODE_PATTERN[l.code],a,this.MODULE_INDICES.space)),l)}f++,a[f]=1,s=!s}return null},r.prototype._correct=function(t,e){this._correctBars(t,e.bar,this.MODULE_INDICES.bar),this._correctBars(t,e.space,this.MODULE_INDICES.space)},r.prototype._findStart=function(){var t,e,n,r,i,a=[0,0,0,0,0,0],u=this,c=u._nextSet(u._row),s=!1,f=0,l={error:Number.MAX_VALUE,code:-1,start:0,end:0,correction:{bar:1,space:1}};for(t=c;t<u._row.length;t++)if(u._row[t]^s)a[f]++;else{if(f===a.length-1){for(i=0,r=0;r<a.length;r++)i+=a[r];for(e=u.START_CODE_A;e<=u.START_CODE_C;e++)(n=u._matchPattern(a,u.CODE_PATTERN[e]))<l.error&&(l.code=e,l.error=n);if(l.error<u.AVG_CODE_ERROR)return l.start=t-i,l.end=t,l.correction.bar=o(u.CODE_PATTERN[l.code],a,this.MODULE_INDICES.bar),l.correction.space=o(u.CODE_PATTERN[l.code],a,this.MODULE_INDICES.space),l;for(r=0;r<4;r++)a[r]=a[r+2];a[4]=0,a[5]=0,f--}else f++;a[f]=1,s=!s}return null},r.prototype._decode=function(){var t,e,n=this,r=n._findStart(),o=null,i=!1,a=[],u=0,c=0,s=[],f=[],l=!1,d=!0;if(null===r)return null;switch(o={code:r.code,start:r.start,end:r.end,correction:{bar:r.correction.bar,space:r.correction.space}},f.push(o),c=o.code,o.code){case n.START_CODE_A:t=n.CODE_A;break;case n.START_CODE_B:t=n.CODE_B;break;case n.START_CODE_C:t=n.CODE_C;break;default:return null}for(;!i;){if(e=l,l=!1,null!==(o=n._decodeCode(o.end,o.correction)))switch(o.code!==n.STOP_CODE&&(d=!0),o.code!==n.STOP_CODE&&(s.push(o.code),u++,c+=u*o.code),f.push(o),t){case n.CODE_A:if(o.code<64)a.push(String.fromCharCode(32+o.code));else if(o.code<96)a.push(String.fromCharCode(o.code-64));else switch(o.code!==n.STOP_CODE&&(d=!1),o.code){case n.CODE_SHIFT:l=!0,t=n.CODE_B;break;case n.CODE_B:t=n.CODE_B;break;case n.CODE_C:t=n.CODE_C;break;case n.STOP_CODE:i=!0}break;case n.CODE_B:if(o.code<96)a.push(String.fromCharCode(32+o.code));else switch(o.code!==n.STOP_CODE&&(d=!1),o.code){case n.CODE_SHIFT:l=!0,t=n.CODE_A;break;case n.CODE_A:t=n.CODE_A;break;case n.CODE_C:t=n.CODE_C;break;case n.STOP_CODE:i=!0}break;case n.CODE_C:if(o.code<100)a.push(o.code<10?\"0\"+o.code:o.code);else switch(o.code!==n.STOP_CODE&&(d=!1),o.code){case n.CODE_A:t=n.CODE_A;break;case n.CODE_B:t=n.CODE_B;break;case n.STOP_CODE:i=!0}}else i=!0;e&&(t=t===n.CODE_A?n.CODE_B:n.CODE_A)}return null===o?null:(o.end=n._nextUnset(n._row,o.end),n._verifyTrailingWhitespace(o)?(c-=u*s[s.length-1])%103!==s[s.length-1]?null:a.length?(d&&a.splice(a.length-1,1),{code:a.join(\"\"),start:r.start,end:o.end,codeset:t,startInfo:r,decodedCodes:f,endInfo:o}):null:null)},i.a.prototype._verifyTrailingWhitespace=function(t){var e,n=this;return e=t.end+(t.end-t.start)/2,e<n._row.length&&n._matchRange(t.end,e,0)?t:null},e.a=r},function(t,e,n){\"use strict\";function r(){o.a.call(this)}var o=n(31),i={IOQ:/[IOQ]/g,AZ09:/[A-Z0-9]{17}/};r.prototype=Object.create(o.a.prototype),r.prototype.constructor=r,r.prototype._decode=function(){var t=o.a.prototype._decode.apply(this);if(!t)return null;var e=t.code;return e?(e=e.replace(i.IOQ,\"\"),e.match(i.AZ09)&&this._checkChecksum(e)?(t.code=e,t):null):null},r.prototype._checkChecksum=function(t){return!!t},e.a=r},function(t,e,n){\"use strict\";function r(){o.a.call(this)}var o=n(1),i=n(3),a=\"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%abcd*\",u={ALPHABETH_STRING:{value:a},ALPHABET:{value:a.split(\"\").map(function(t){return t.charCodeAt(0)})},CHARACTER_ENCODINGS:{value:[276,328,324,322,296,292,290,336,274,266,424,420,418,404,402,394,360,356,354,308,282,344,332,326,300,278,436,434,428,422,406,410,364,358,310,314,302,468,466,458,366,374,430,294,474,470,306,350]},ASTERISK:{value:350},FORMAT:{value:\"code_93\",writeable:!1}};r.prototype=Object.create(o.a.prototype,u),r.prototype.constructor=r,r.prototype._decode=function(){var t,e,n,r,o=this,a=[0,0,0,0,0,0],u=[],c=o._findStart();if(!c)return null;r=o._nextSet(o._row,c.end);do{if(a=o._toCounters(r,a),(n=o._toPattern(a))<0)return null;if((t=o._patternToChar(n))<0)return null;u.push(t),e=r,r+=i.a.sum(a),r=o._nextSet(o._row,r)}while(\"*\"!==t);return u.pop(),u.length&&o._verifyEnd(e,r,a)&&o._verifyChecksums(u)?(u=u.slice(0,u.length-2),null===(u=o._decodeExtended(u))?null:{code:u.join(\"\"),start:c.start,end:r,startInfo:c,decodedCodes:u}):null},r.prototype._verifyEnd=function(t,e){return!(t===e||!this._row[e])},r.prototype._patternToChar=function(t){var e,n=this;for(e=0;e<n.CHARACTER_ENCODINGS.length;e++)if(n.CHARACTER_ENCODINGS[e]===t)return String.fromCharCode(n.ALPHABET[e]);return-1},r.prototype._toPattern=function(t){for(var e=t.length,n=0,r=0,o=0;o<e;o++)r+=t[o];for(var i=0;i<e;i++){var a=Math.round(9*t[i]/r);if(a<1||a>4)return-1;if(0==(1&i))for(var u=0;u<a;u++)n=n<<1|1;else n<<=a}return n},r.prototype._findStart=function(){var t,e,n,r=this,o=r._nextSet(r._row),i=o,a=[0,0,0,0,0,0],u=0,c=!1;for(t=o;t<r._row.length;t++)if(r._row[t]^c)a[u]++;else{if(u===a.length-1){if(r._toPattern(a)===r.ASTERISK&&(n=Math.floor(Math.max(0,i-(t-i)/4)),r._matchRange(n,i,0)))return{start:i,end:t};for(i+=a[0]+a[1],e=0;e<4;e++)a[e]=a[e+2];a[4]=0,a[5]=0,u--}else u++;a[u]=1,c=!c}return null},r.prototype._decodeExtended=function(t){for(var e=t.length,n=[],r=0;r<e;r++){var o=t[r];if(o>=\"a\"&&o<=\"d\"){if(r>e-2)return null;var i=t[++r],a=i.charCodeAt(0),u=void 0;switch(o){case\"a\":if(!(i>=\"A\"&&i<=\"Z\"))return null;u=String.fromCharCode(a-64);break;case\"b\":if(i>=\"A\"&&i<=\"E\")u=String.fromCharCode(a-38);else if(i>=\"F\"&&i<=\"J\")u=String.fromCharCode(a-11);else if(i>=\"K\"&&i<=\"O\")u=String.fromCharCode(a+16);else if(i>=\"P\"&&i<=\"S\")u=String.fromCharCode(a+43);else{if(!(i>=\"T\"&&i<=\"Z\"))return null;u=String.fromCharCode(127)}break;case\"c\":if(i>=\"A\"&&i<=\"O\")u=String.fromCharCode(a-32);else{if(\"Z\"!==i)return null;u=\":\"}break;case\"d\":if(!(i>=\"A\"&&i<=\"Z\"))return null;u=String.fromCharCode(a+32)}n.push(u)}else n.push(o)}return n},r.prototype._verifyChecksums=function(t){return this._matchCheckChar(t,t.length-2,20)&&this._matchCheckChar(t,t.length-1,15)},r.prototype._matchCheckChar=function(t,e,n){var r=this,o=t.slice(0,e),i=o.length,a=o.reduce(function(t,e,o){return t+((o*-1+(i-1))%n+1)*r.ALPHABET.indexOf(e.charCodeAt(0))},0);return this.ALPHABET[a%47]===t[e].charCodeAt(0)},e.a=r},function(t,e,n){\"use strict\";function r(){o.a.call(this)}var o=n(4),i={FORMAT:{value:\"ean_2\",writeable:!1}};r.prototype=Object.create(o.a.prototype,i),r.prototype.constructor=r,r.prototype.decode=function(t,e){this._row=t;var n,r=0,o=0,i=e,a=this._row.length,u=[],c=[];for(o=0;o<2&&i<a;o++){if(!(n=this._decodeCode(i)))return null;c.push(n),u.push(n.code%10),n.code>=this.CODE_G_START&&(r|=1<<1-o),1!=o&&(i=this._nextSet(this._row,n.end),i=this._nextUnset(this._row,i))}return 2!=u.length||parseInt(u.join(\"\"))%4!==r?null:{code:u.join(\"\"),decodedCodes:c,end:n.end}},e.a=r},function(t,e,n){\"use strict\";function r(){a.a.call(this)}function o(t){var e;for(e=0;e<10;e++)if(t===c[e])return e;return null}function i(t){var e,n=t.length,r=0;for(e=n-2;e>=0;e-=2)r+=t[e];for(r*=3,e=n-1;e>=0;e-=2)r+=t[e];return(r*=3)%10}var a=n(4),u={FORMAT:{value:\"ean_5\",writeable:!1}},c=[24,20,18,17,12,6,3,10,9,5];r.prototype=Object.create(a.a.prototype,u),r.prototype.constructor=r,r.prototype.decode=function(t,e){this._row=t;var n,r=0,a=0,u=e,c=this._row.length,s=[],f=[];for(a=0;a<5&&u<c;a++){if(!(n=this._decodeCode(u)))return null;f.push(n),s.push(n.code%10),n.code>=this.CODE_G_START&&(r|=1<<4-a),4!=a&&(u=this._nextSet(this._row,n.end),u=this._nextUnset(this._row,u))}return 5!=s.length?null:i(s)!==o(r)?null:{code:s.join(\"\"),decodedCodes:f,end:n.end}},e.a=r},function(t,e,n){\"use strict\";function r(t,e){o.a.call(this,t,e)}var o=n(4),i={FORMAT:{value:\"ean_8\",writeable:!1}};r.prototype=Object.create(o.a.prototype,i),r.prototype.constructor=r,r.prototype._decodePayload=function(t,e,n){var r,o=this;for(r=0;r<4;r++){if(!(t=o._decodeCode(t.end,o.CODE_G_START)))return null;e.push(t.code),n.push(t)}if(null===(t=o._findPattern(o.MIDDLE_PATTERN,t.end,!0,!1)))return null;for(n.push(t),r=0;r<4;r++){if(!(t=o._decodeCode(t.end,o.CODE_G_START)))return null;n.push(t),e.push(t.code)}return t},e.a=r},function(t,e,n){\"use strict\";function r(t){t=a()(o(),t),u.a.call(this,t),this.barSpaceRatio=[1,1],t.normalizeBarSpaceWidth&&(this.SINGLE_CODE_ERROR=.38,this.AVG_CODE_ERROR=.09)}function o(){var t={};return Object.keys(r.CONFIG_KEYS).forEach(function(e){t[e]=r.CONFIG_KEYS[e].default}),t}var i=n(28),a=n.n(i),u=n(1),c=1,s=3,f={START_PATTERN:{value:[c,c,c,c]},STOP_PATTERN:{value:[c,c,s]},CODE_PATTERN:{value:[[c,c,s,s,c],[s,c,c,c,s],[c,s,c,c,s],[s,s,c,c,c],[c,c,s,c,s],[s,c,s,c,c],[c,s,s,c,c],[c,c,c,s,s],[s,c,c,s,c],[c,s,c,s,c]]},SINGLE_CODE_ERROR:{value:.78,writable:!0},AVG_CODE_ERROR:{value:.38,writable:!0},MAX_CORRECTION_FACTOR:{value:5},FORMAT:{value:\"i2of5\"}};r.prototype=Object.create(u.a.prototype,f),r.prototype.constructor=r,r.prototype._matchPattern=function(t,e){if(this.config.normalizeBarSpaceWidth){var n,r=[0,0],o=[0,0],i=[0,0],a=this.MAX_CORRECTION_FACTOR,c=1/a;for(n=0;n<t.length;n++)r[n%2]+=t[n],o[n%2]+=e[n];for(i[0]=o[0]/r[0],i[1]=o[1]/r[1],i[0]=Math.max(Math.min(i[0],a),c),i[1]=Math.max(Math.min(i[1],a),c),this.barSpaceRatio=i,n=0;n<t.length;n++)t[n]*=this.barSpaceRatio[n%2]}return u.a.prototype._matchPattern.call(this,t,e)},r.prototype._findPattern=function(t,e,n,r){var o,i,a,u,c=[],s=this,f=0,l={error:Number.MAX_VALUE,code:-1,start:0,end:0},d=s.AVG_CODE_ERROR;for(n=n||!1,r=r||!1,e||(e=s._nextSet(s._row)),o=0;o<t.length;o++)c[o]=0;for(o=e;o<s._row.length;o++)if(s._row[o]^n)c[f]++;else{if(f===c.length-1){for(u=0,a=0;a<c.length;a++)u+=c[a];if((i=s._matchPattern(c,t))<d)return l.error=i,l.start=o-u,l.end=o,l;if(!r)return null;for(a=0;a<c.length-2;a++)c[a]=c[a+2];c[c.length-2]=0,c[c.length-1]=0,f--}else f++;c[f]=1,n=!n}return null},r.prototype._findStart=function(){for(var t,e,n=this,r=n._nextSet(n._row),o=1;!e;){if(!(e=n._findPattern(n.START_PATTERN,r,!1,!0)))return null;if(o=Math.floor((e.end-e.start)/4),(t=e.start-10*o)>=0&&n._matchRange(t,e.start,0))return e;r=e.end,e=null}},r.prototype._verifyTrailingWhitespace=function(t){var e,n=this;return e=t.end+(t.end-t.start)/2,e<n._row.length&&n._matchRange(t.end,e,0)?t:null},r.prototype._findEnd=function(){var t,e,n=this;return n._row.reverse(),t=n._findPattern(n.STOP_PATTERN),n._row.reverse(),null===t?null:(e=t.start,t.start=n._row.length-t.end,t.end=n._row.length-e,null!==t?n._verifyTrailingWhitespace(t):null)},r.prototype._decodePair=function(t){var e,n,r=[],o=this;for(e=0;e<t.length;e++){if(!(n=o._decodeCode(t[e])))return null;r.push(n)}return r},r.prototype._decodeCode=function(t){var e,n,r,o=this,i=0,a=o.AVG_CODE_ERROR,u={error:Number.MAX_VALUE,code:-1,start:0,end:0};for(e=0;e<t.length;e++)i+=t[e];for(r=0;r<o.CODE_PATTERN.length;r++)(n=o._matchPattern(t,o.CODE_PATTERN[r]))<u.error&&(u.code=r,u.error=n);if(u.error<a)return u},r.prototype._decodePayload=function(t,e,n){for(var r,o,i=this,a=0,u=t.length,c=[[0,0,0,0,0],[0,0,0,0,0]];a<u;){for(r=0;r<5;r++)c[0][r]=t[a]*this.barSpaceRatio[0],c[1][r]=t[a+1]*this.barSpaceRatio[1],a+=2;if(!(o=i._decodePair(c)))return null;for(r=0;r<o.length;r++)e.push(o[r].code+\"\"),n.push(o[r])}return o},r.prototype._verifyCounterLength=function(t){return t.length%10==0},r.prototype._decode=function(){var t,e,n,r=this,o=[],i=[];return(t=r._findStart())?(i.push(t),(e=r._findEnd())?(n=r._fillCounters(t.end,e.start,!1),r._verifyCounterLength(n)&&r._decodePayload(n,o,i)?o.length%2!=0||o.length<6?null:(i.push(e),{code:o.join(\"\"),start:t.start,end:e.end,startInfo:t,decodedCodes:i}):null):null):null},r.CONFIG_KEYS={normalizeBarSpaceWidth:{type:\"boolean\",default:!1,description:\"If true, the reader tries to normalize thewidth-difference between bars and spaces\"}},e.a=r},function(t,e,n){\"use strict\";function r(t,e){o.a.call(this,t,e)}var o=n(4),i={CODE_FREQUENCY:{value:[[56,52,50,49,44,38,35,42,41,37],[7,11,13,14,19,25,28,21,22,26]]},STOP_PATTERN:{value:[1/6*7,1/6*7,1/6*7,1/6*7,1/6*7,1/6*7]},FORMAT:{value:\"upc_e\",writeable:!1}};r.prototype=Object.create(o.a.prototype,i),r.prototype.constructor=r,r.prototype._decodePayload=function(t,e,n){var r,o=this,i=0;for(r=0;r<6;r++){if(!(t=o._decodeCode(t.end)))return null;t.code>=o.CODE_G_START&&(t.code=t.code-o.CODE_G_START,i|=1<<5-r),e.push(t.code),n.push(t)}return o._determineParity(i,e)?t:null},r.prototype._determineParity=function(t,e){var n,r;for(r=0;r<this.CODE_FREQUENCY.length;r++)for(n=0;n<this.CODE_FREQUENCY[r].length;n++)if(t===this.CODE_FREQUENCY[r][n])return e.unshift(r),e.push(n),!0;return!1},r.prototype._convertToUPCA=function(t){var e=[t[0]],n=t[t.length-2];return e=n<=2?e.concat(t.slice(1,3)).concat([n,0,0,0,0]).concat(t.slice(3,6)):3===n?e.concat(t.slice(1,4)).concat([0,0,0,0,0]).concat(t.slice(4,6)):4===n?e.concat(t.slice(1,5)).concat([0,0,0,0,0,t[5]]):e.concat(t.slice(1,6)).concat([0,0,0,0,n]),e.push(t[t.length-1]),e},r.prototype._checksum=function(t){return o.a.prototype._checksum.call(this,this._convertToUPCA(t))},r.prototype._findEnd=function(t,e){return e=!0,o.a.prototype._findEnd.call(this,t,e)},r.prototype._verifyTrailingWhitespace=function(t){var e,n=this;if((e=t.end+(t.end-t.start)/2)<n._row.length&&n._matchRange(t.end,e,0))return t},e.a=r},function(t,e,n){\"use strict\";function r(t,e){o.a.call(this,t,e)}var o=n(4),i={FORMAT:{value:\"upc_a\",writeable:!1}};r.prototype=Object.create(o.a.prototype,i),r.prototype.constructor=r,r.prototype._decode=function(){var t=o.a.prototype._decode.call(this);return t&&t.code&&13===t.code.length&&\"0\"===t.code.charAt(0)?(t.code=t.code.substring(1),t):null},e.a=r},function(t,e){function n(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t}t.exports=n},function(t,e){function n(){var t=new Float32Array(4);return t[0]=1,t[1]=0,t[2]=0,t[3]=1,t}t.exports=n},function(t,e){function n(t,e){var n=e[0],r=e[1],o=e[2],i=e[3],a=n*i-o*r;return a?(a=1/a,t[0]=i*a,t[1]=-r*a,t[2]=-o*a,t[3]=n*a,t):null}t.exports=n},function(t,e){function n(t,e,n){return t[0]=e[0]*n,t[1]=e[1]*n,t}t.exports=n},function(t,e){function n(t,e,n){var r=e[0],o=e[1];return t[0]=n[0]*r+n[2]*o,t[1]=n[1]*r+n[3]*o,t}t.exports=n},function(t,e){function n(t){var e=new Float32Array(3);return e[0]=t[0],e[1]=t[1],e[2]=t[2],e}t.exports=n},function(t,e,n){function r(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}var o=n(122),i=n(123),a=n(124),u=n(125),c=n(126);r.prototype.clear=o,r.prototype.delete=i,r.prototype.get=a,r.prototype.has=u,r.prototype.set=c,t.exports=r},function(t,e,n){function r(t){var e=this.__data__=new o(t);this.size=e.size}var o=n(10),i=n(149),a=n(150),u=n(151),c=n(152),s=n(153);r.prototype.clear=i,r.prototype.delete=a,r.prototype.get=u,r.prototype.has=c,r.prototype.set=s,t.exports=r},function(t,e,n){var r=n(5),o=r.Uint8Array;t.exports=o},function(t,e){function n(t,e,n){switch(n.length){case 0:return t.call(e);case 1:return t.call(e,n[0]);case 2:return t.call(e,n[0],n[1]);case 3:return t.call(e,n[0],n[1],n[2])}return t.apply(e,n)}t.exports=n},function(t,e,n){function r(t,e){var n=a(t),r=!n&&i(t),f=!n&&!r&&u(t),d=!n&&!r&&!f&&s(t),h=n||r||f||d,p=h?o(t.length,String):[],v=p.length;for(var _ in t)!e&&!l.call(t,_)||h&&(\"length\"==_||f&&(\"offset\"==_||\"parent\"==_)||d&&(\"buffer\"==_||\"byteLength\"==_||\"byteOffset\"==_)||c(_,v))||p.push(_);return p}var o=n(107),i=n(18),a=n(2),u=n(44),c=n(15),s=n(45),f=Object.prototype,l=f.hasOwnProperty;t.exports=r},function(t,e){function n(t,e){for(var n=-1,r=null==t?0:t.length,o=Array(r);++n<r;)o[n]=e(t[n],n,t);return o}t.exports=n},function(t,e){function n(t,e){for(var n=-1,r=e.length,o=t.length;++n<r;)t[o+n]=e[n];return t}t.exports=n},function(t,e,n){var r=n(0),o=Object.create,i=function(){function t(){}return function(e){if(!r(e))return{};if(o)return o(e);t.prototype=e;var n=new t;return t.prototype=void 0,n}}();t.exports=i},function(t,e,n){function r(t,e,n,a,u){var c=-1,s=t.length;for(n||(n=i),u||(u=[]);++c<s;){var f=t[c];e>0&&n(f)?e>1?r(f,e-1,n,a,u):o(u,f):a||(u[u.length]=f)}return u}var o=n(90),i=n(128);t.exports=r},function(t,e,n){var r=n(117),o=r();t.exports=o},function(t,e,n){function r(t,e){e=o(e,t);for(var n=0,r=e.length;null!=t&&n<r;)t=t[i(e[n++])];return n&&n==r?t:void 0}var o=n(13),i=n(23);t.exports=r},function(t,e){function n(t,e){return null!=t&&e in Object(t)}t.exports=n},function(t,e,n){function r(t){return i(t)&&o(t)==a}var o=n(8),i=n(6),a=\"[object Arguments]\";t.exports=r},function(t,e,n){function r(t){return!(!a(t)||i(t))&&(o(t)?p:s).test(u(t))}var o=n(25),i=n(132),a=n(0),u=n(155),c=/[\\\\^$.*+?()[\\]{}|]/g,s=/^\\[object .+?Constructor\\]$/,f=Function.prototype,l=Object.prototype,d=f.toString,h=l.hasOwnProperty,p=RegExp(\"^\"+d.call(h).replace(c,\"\\\\$&\").replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g,\"$1.*?\")+\"$\");t.exports=r},function(t,e,n){function r(t){return a(t)&&i(t.length)&&!!u[o(t)]}var o=n(8),i=n(26),a=n(6),u={};u[\"[object Float32Array]\"]=u[\"[object Float64Array]\"]=u[\"[object Int8Array]\"]=u[\"[object Int16Array]\"]=u[\"[object Int32Array]\"]=u[\"[object Uint8Array]\"]=u[\"[object Uint8ClampedArray]\"]=u[\"[object Uint16Array]\"]=u[\"[object Uint32Array]\"]=!0,u[\"[object Arguments]\"]=u[\"[object Array]\"]=u[\"[object ArrayBuffer]\"]=u[\"[object Boolean]\"]=u[\"[object DataView]\"]=u[\"[object Date]\"]=u[\"[object Error]\"]=u[\"[object Function]\"]=u[\"[object Map]\"]=u[\"[object Number]\"]=u[\"[object Object]\"]=u[\"[object RegExp]\"]=u[\"[object Set]\"]=u[\"[object String]\"]=u[\"[object WeakMap]\"]=!1,t.exports=r},function(t,e,n){function r(t){if(!o(t))return a(t);var e=i(t),n=[];for(var r in t)(\"constructor\"!=r||!e&&c.call(t,r))&&n.push(r);return n}var o=n(0),i=n(40),a=n(144),u=Object.prototype,c=u.hasOwnProperty;t.exports=r},function(t,e,n){function r(t,e,n,f,l){t!==e&&a(e,function(a,s){if(c(a))l||(l=new o),u(t,e,s,n,r,f,l);else{var d=f?f(t[s],a,s+\"\",t,e,l):void 0;void 0===d&&(d=a),i(t,s,d)}},s)}var o=n(85),i=n(35),a=n(93),u=n(101),c=n(0),s=n(46);t.exports=r},function(t,e,n){function r(t,e,n,r,y,m,x){var b=t[n],E=e[n],C=x.get(E);if(C)return void o(t,n,C);var O=m?m(b,E,n+\"\",t,e,x):void 0,A=void 0===O;if(A){var R=f(E),w=!R&&d(E),T=!R&&!w&&_(E);O=E,R||w||T?f(b)?O=b:l(b)?O=u(b):w?(A=!1,O=i(E,!0)):T?(A=!1,O=a(E,!0)):O=[]:v(E)||s(E)?(O=b,s(b)?O=g(b):(!p(b)||r&&h(b))&&(O=c(E))):A=!1}A&&(x.set(E,O),y(O,E,r,m,x),x.delete(E)),o(t,n,O)}var o=n(35),i=n(111),a=n(112),u=n(113),c=n(127),s=n(18),f=n(2),l=n(159),d=n(44),h=n(25),p=n(0),v=n(160),_=n(45),g=n(164);t.exports=r},function(t,e,n){function r(t,e){return o(t,e,function(e,n){return i(t,n)})}var o=n(103),i=n(158);t.exports=r},function(t,e,n){function r(t,e,n){for(var r=-1,u=e.length,c={};++r<u;){var s=e[r],f=o(t,s);n(f,s)&&i(c,a(s,t),f)}return c}var o=n(94),i=n(105),a=n(13);t.exports=r},function(t,e,n){function r(t,e){return a(i(t,e,o),t+\"\")}var o=n(43),i=n(41),a=n(42);t.exports=r},function(t,e,n){function r(t,e,n,r){if(!u(t))return t;e=i(e,t);for(var s=-1,f=e.length,l=f-1,d=t;null!=d&&++s<f;){var h=c(e[s]),p=n;if(s!=l){var v=d[h];p=r?r(v,h,d):void 0,void 0===p&&(p=u(v)?v:a(e[s+1])?[]:{})}o(d,h,p),d=d[h]}return t}var o=n(36),i=n(13),a=n(15),u=n(0),c=n(23);t.exports=r},function(t,e,n){var r=n(156),o=n(37),i=n(43),a=o?function(t,e){return o(t,\"toString\",{configurable:!0,enumerable:!1,value:r(e),writable:!0})}:i;t.exports=a},function(t,e){function n(t,e){for(var n=-1,r=Array(t);++n<t;)r[n]=e(n);return r}t.exports=n},function(t,e,n){function r(t){if(\"string\"==typeof t)return t;if(a(t))return i(t,r)+\"\";if(u(t))return f?f.call(t):\"\";var e=t+\"\";return\"0\"==e&&1/t==-c?\"-0\":e}var o=n(11),i=n(89),a=n(2),u=n(27),c=1/0,s=o?o.prototype:void 0,f=s?s.toString:void 0;t.exports=r},function(t,e){function n(t){return function(e){return t(e)}}t.exports=n},function(t,e,n){function r(t){var e=new t.constructor(t.byteLength);return new o(e).set(new o(t)),e}var o=n(86);t.exports=r},function(t,e,n){(function(t){function r(t,e){if(e)return t.slice();var n=t.length,r=s?s(n):new t.constructor(n);return t.copy(r),r}var o=n(5),i=\"object\"==typeof e&&e&&!e.nodeType&&e,a=i&&\"object\"==typeof t&&t&&!t.nodeType&&t,u=a&&a.exports===i,c=u?o.Buffer:void 0,s=c?c.allocUnsafe:void 0;t.exports=r}).call(e,n(29)(t))},function(t,e,n){function r(t,e){var n=e?o(t.buffer):t.buffer;return new t.constructor(n,t.byteOffset,t.length)}var o=n(110);t.exports=r},function(t,e){function n(t,e){var n=-1,r=t.length;for(e||(e=Array(r));++n<r;)e[n]=t[n];return e}t.exports=n},function(t,e,n){function r(t,e,n,r){var a=!n;n||(n={});for(var u=-1,c=e.length;++u<c;){var s=e[u],f=r?r(n[s],t[s],s,n,t):void 0;void 0===f&&(f=t[s]),a?i(n,s,f):o(n,s,f)}return n}var o=n(36),i=n(21);t.exports=r},function(t,e,n){var r=n(5),o=r[\"__core-js_shared__\"];t.exports=o},function(t,e,n){function r(t){return o(function(e,n){var r=-1,o=n.length,a=o>1?n[o-1]:void 0,u=o>2?n[2]:void 0;for(a=t.length>3&&\"function\"==typeof a?(o--,a):void 0,u&&i(n[0],n[1],u)&&(a=o<3?void 0:a,o=1),e=Object(e);++r<o;){var c=n[r];c&&t(e,c,r,a)}return e})}var o=n(104),i=n(129);t.exports=r},function(t,e){function n(t){return function(e,n,r){for(var o=-1,i=Object(e),a=r(e),u=a.length;u--;){var c=a[t?u:++o];if(n(i[c],c,i)===!1)break}return e}}t.exports=n},function(t,e,n){function r(t){return a(i(t,void 0,o),t+\"\")}var o=n(157),i=n(41),a=n(42);t.exports=r},function(t,e,n){function r(t){var e=a.call(t,c),n=t[c];try{t[c]=void 0;var r=!0}catch(t){}var o=u.call(t);return r&&(e?t[c]=n:delete t[c]),o}var o=n(11),i=Object.prototype,a=i.hasOwnProperty,u=i.toString,c=o?o.toStringTag:void 0;t.exports=r},function(t,e){function n(t,e){return null==t?void 0:t[e]}t.exports=n},function(t,e,n){function r(t,e,n){e=o(e,t);for(var r=-1,f=e.length,l=!1;++r<f;){var d=s(e[r]);if(!(l=null!=t&&n(t,d)))break;t=t[d]}return l||++r!=f?l:!!(f=null==t?0:t.length)&&c(f)&&u(d,f)&&(a(t)||i(t))}var o=n(13),i=n(18),a=n(2),u=n(15),c=n(26),s=n(23);t.exports=r},function(t,e,n){function r(){this.__data__=o?o(null):{},this.size=0}var o=n(16);t.exports=r},function(t,e){function n(t){var e=this.has(t)&&delete this.__data__[t];return this.size-=e?1:0,e}t.exports=n},function(t,e,n){function r(t){var e=this.__data__;if(o){var n=e[t];return n===i?void 0:n}return u.call(e,t)?e[t]:void 0}var o=n(16),i=\"__lodash_hash_undefined__\",a=Object.prototype,u=a.hasOwnProperty;t.exports=r},function(t,e,n){function r(t){var e=this.__data__;return o?void 0!==e[t]:a.call(e,t)}var o=n(16),i=Object.prototype,a=i.hasOwnProperty;t.exports=r},function(t,e,n){function r(t,e){var n=this.__data__;return this.size+=this.has(t)?0:1,n[t]=o&&void 0===e?i:e,this}var o=n(16),i=\"__lodash_hash_undefined__\";t.exports=r},function(t,e,n){function r(t){return\"function\"!=typeof t.constructor||a(t)?{}:o(i(t))}var o=n(91),i=n(39),a=n(40);t.exports=r},function(t,e,n){function r(t){return a(t)||i(t)||!!(u&&t&&t[u])}var o=n(11),i=n(18),a=n(2),u=o?o.isConcatSpreadable:void 0;t.exports=r},function(t,e,n){function r(t,e,n){if(!u(n))return!1;var r=typeof e;return!!(\"number\"==r?i(n)&&a(e,n.length):\"string\"==r&&e in n)&&o(n[e],t)}var o=n(17),i=n(24),a=n(15),u=n(0);t.exports=r},function(t,e,n){function r(t,e){if(o(t))return!1;var n=typeof t;return!(\"number\"!=n&&\"symbol\"!=n&&\"boolean\"!=n&&null!=t&&!i(t))||(u.test(t)||!a.test(t)||null!=e&&t in Object(e))}var o=n(2),i=n(27),a=/\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,u=/^\\w*$/;t.exports=r},function(t,e){function n(t){var e=typeof t;return\"string\"==e||\"number\"==e||\"symbol\"==e||\"boolean\"==e?\"__proto__\"!==t:null===t}t.exports=n},function(t,e,n){function r(t){return!!i&&i in t}var o=n(115),i=function(){var t=/[^.]+$/.exec(o&&o.keys&&o.keys.IE_PROTO||\"\");return t?\"Symbol(src)_1.\"+t:\"\"}();t.exports=r},function(t,e){function n(){this.__data__=[],this.size=0}t.exports=n},function(t,e,n){function r(t){var e=this.__data__,n=o(e,t);return!(n<0)&&(n==e.length-1?e.pop():a.call(e,n,1),--this.size,!0)}var o=n(12),i=Array.prototype,a=i.splice;t.exports=r},function(t,e,n){function r(t){var e=this.__data__,n=o(e,t);return n<0?void 0:e[n][1]}var o=n(12);t.exports=r},function(t,e,n){function r(t){return o(this.__data__,t)>-1}var o=n(12);t.exports=r},function(t,e,n){function r(t,e){var n=this.__data__,r=o(n,t);return r<0?(++this.size,n.push([t,e])):n[r][1]=e,this}var o=n(12);t.exports=r},function(t,e,n){function r(){this.size=0,this.__data__={hash:new o,map:new(a||i),string:new o}}var o=n(84),i=n(10),a=n(33);t.exports=r},function(t,e,n){function r(t){var e=o(this,t).delete(t);return this.size-=e?1:0,e}var o=n(14);t.exports=r},function(t,e,n){function r(t){return o(this,t).get(t)}var o=n(14);t.exports=r},function(t,e,n){function r(t){return o(this,t).has(t)}var o=n(14);t.exports=r},function(t,e,n){function r(t,e){var n=o(this,t),r=n.size;return n.set(t,e),this.size+=n.size==r?0:1,this}var o=n(14);t.exports=r},function(t,e,n){function r(t){var e=o(t,function(t){return n.size===i&&n.clear(),t}),n=e.cache;return e}var o=n(161),i=500;t.exports=r},function(t,e){function n(t){var e=[];if(null!=t)for(var n in Object(t))e.push(n);return e}t.exports=n},function(t,e,n){(function(t){var r=n(38),o=\"object\"==typeof e&&e&&!e.nodeType&&e,i=o&&\"object\"==typeof t&&t&&!t.nodeType&&t,a=i&&i.exports===o,u=a&&r.process,c=function(){try{return u&&u.binding&&u.binding(\"util\")}catch(t){}}();t.exports=c}).call(e,n(29)(t))},function(t,e){function n(t){return o.call(t)}var r=Object.prototype,o=r.toString;t.exports=n},function(t,e){function n(t,e){return function(n){return t(e(n))}}t.exports=n},function(t,e){function n(t){var e=0,n=0;return function(){var a=i(),u=o-(a-n);if(n=a,u>0){if(++e>=r)return arguments[0]}else e=0;return t.apply(void 0,arguments)}}var r=800,o=16,i=Date.now;t.exports=n},function(t,e,n){function r(){this.__data__=new o,this.size=0}var o=n(10);t.exports=r},function(t,e){function n(t){var e=this.__data__,n=e.delete(t);return this.size=e.size,n}t.exports=n},function(t,e){function n(t){return this.__data__.get(t)}t.exports=n},function(t,e){function n(t){return this.__data__.has(t)}t.exports=n},function(t,e,n){function r(t,e){var n=this.__data__;if(n instanceof o){var r=n.__data__;if(!i||r.length<u-1)return r.push([t,e]),this.size=++n.size,this;n=this.__data__=new a(r)}return n.set(t,e),this.size=n.size,this}var o=n(10),i=n(33),a=n(34),u=200;t.exports=r},function(t,e,n){var r=n(143),o=/^\\./,i=/[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g,a=/\\\\(\\\\)?/g,u=r(function(t){var e=[];return o.test(t)&&e.push(\"\"),t.replace(i,function(t,n,r,o){e.push(r?o.replace(a,\"$1\"):n||t)}),e});t.exports=u},function(t,e){function n(t){if(null!=t){try{return o.call(t)}catch(t){}try{return t+\"\"}catch(t){}}return\"\"}var r=Function.prototype,o=r.toString;t.exports=n},function(t,e){function n(t){return function(){return t}}t.exports=n},function(t,e,n){function r(t){return(null==t?0:t.length)?o(t,1):[]}var o=n(92);t.exports=r},function(t,e,n){function r(t,e){return null!=t&&i(t,e,o)}var o=n(95),i=n(121);t.exports=r},function(t,e,n){function r(t){return i(t)&&o(t)}var o=n(24),i=n(6);t.exports=r},function(t,e,n){function r(t){if(!a(t)||o(t)!=u)return!1;var e=i(t);if(null===e)return!0;var n=l.call(e,\"constructor\")&&e.constructor;return\"function\"==typeof n&&n instanceof n&&f.call(n)==d}var o=n(8),i=n(39),a=n(6),u=\"[object Object]\",c=Function.prototype,s=Object.prototype,f=c.toString,l=s.hasOwnProperty,d=f.call(Object);t.exports=r},function(t,e,n){function r(t,e){if(\"function\"!=typeof t||null!=e&&\"function\"!=typeof e)throw new TypeError(i);var n=function(){var r=arguments,o=e?e.apply(this,r):r[0],i=n.cache;if(i.has(o))return i.get(o);var a=t.apply(this,r);return n.cache=i.set(o,a)||i,a};return n.cache=new(r.Cache||o),n}var o=n(34),i=\"Expected a function\";r.Cache=o,t.exports=r},function(t,e,n){var r=n(102),o=n(118),i=o(function(t,e){return null==t?{}:r(t,e)});t.exports=i},function(t,e){function n(){return!1}t.exports=n},function(t,e,n){function r(t){return o(t,i(t))}var o=n(114),i=n(46);t.exports=r},function(t,e,n){function r(t){return null==t?\"\":o(t)}var o=n(108);t.exports=r},function(t,e,n){t.exports=n(48)}])});","'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","module.exports = require('./lib/_stream_duplex.js');\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// a duplex stream is just a stream that is both readable and writable.\n// Since JS doesn't have multiple prototypal inheritance, this class\n// prototypally inherits from Readable, and then parasitically from\n// Writable.\n\n'use strict';\n\n/*<replacement>*/\n\nvar pna = require('process-nextick-args');\n/*</replacement>*/\n\n/*<replacement>*/\nvar objectKeys = Object.keys || function (obj) {\n  var keys = [];\n  for (var key in obj) {\n    keys.push(key);\n  }return keys;\n};\n/*</replacement>*/\n\nmodule.exports = Duplex;\n\n/*<replacement>*/\nvar util = Object.create(require('core-util-is'));\nutil.inherits = require('inherits');\n/*</replacement>*/\n\nvar Readable = require('./_stream_readable');\nvar Writable = require('./_stream_writable');\n\nutil.inherits(Duplex, Readable);\n\n{\n  // avoid scope creep, the keys array can then be collected\n  var keys = objectKeys(Writable.prototype);\n  for (var v = 0; v < keys.length; v++) {\n    var method = keys[v];\n    if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];\n  }\n}\n\nfunction Duplex(options) {\n  if (!(this instanceof Duplex)) return new Duplex(options);\n\n  Readable.call(this, options);\n  Writable.call(this, options);\n\n  if (options && options.readable === false) this.readable = false;\n\n  if (options && options.writable === false) this.writable = false;\n\n  this.allowHalfOpen = true;\n  if (options && options.allowHalfOpen === false) this.allowHalfOpen = false;\n\n  this.once('end', onend);\n}\n\nObject.defineProperty(Duplex.prototype, 'writableHighWaterMark', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function () {\n    return this._writableState.highWaterMark;\n  }\n});\n\n// the no-half-open enforcer\nfunction onend() {\n  // if we allow half-open state, or if the writable side ended,\n  // then we're ok.\n  if (this.allowHalfOpen || this._writableState.ended) return;\n\n  // no more data can be written.\n  // But allow more writes to happen in this tick.\n  pna.nextTick(onEndNT, this);\n}\n\nfunction onEndNT(self) {\n  self.end();\n}\n\nObject.defineProperty(Duplex.prototype, 'destroyed', {\n  get: function () {\n    if (this._readableState === undefined || this._writableState === undefined) {\n      return false;\n    }\n    return this._readableState.destroyed && this._writableState.destroyed;\n  },\n  set: function (value) {\n    // we ignore the value if the stream\n    // has not been initialized yet\n    if (this._readableState === undefined || this._writableState === undefined) {\n      return;\n    }\n\n    // backward compatibility, the user is explicitly\n    // managing destroyed\n    this._readableState.destroyed = value;\n    this._writableState.destroyed = value;\n  }\n});\n\nDuplex.prototype._destroy = function (err, cb) {\n  this.push(null);\n  this.end();\n\n  pna.nextTick(cb, err);\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// a passthrough stream.\n// basically just the most minimal sort of Transform stream.\n// Every written chunk gets output as-is.\n\n'use strict';\n\nmodule.exports = PassThrough;\n\nvar Transform = require('./_stream_transform');\n\n/*<replacement>*/\nvar util = Object.create(require('core-util-is'));\nutil.inherits = require('inherits');\n/*</replacement>*/\n\nutil.inherits(PassThrough, Transform);\n\nfunction PassThrough(options) {\n  if (!(this instanceof PassThrough)) return new PassThrough(options);\n\n  Transform.call(this, options);\n}\n\nPassThrough.prototype._transform = function (chunk, encoding, cb) {\n  cb(null, chunk);\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\n/*<replacement>*/\n\nvar pna = require('process-nextick-args');\n/*</replacement>*/\n\nmodule.exports = Readable;\n\n/*<replacement>*/\nvar isArray = require('isarray');\n/*</replacement>*/\n\n/*<replacement>*/\nvar Duplex;\n/*</replacement>*/\n\nReadable.ReadableState = ReadableState;\n\n/*<replacement>*/\nvar EE = require('events').EventEmitter;\n\nvar EElistenerCount = function (emitter, type) {\n  return emitter.listeners(type).length;\n};\n/*</replacement>*/\n\n/*<replacement>*/\nvar Stream = require('./internal/streams/stream');\n/*</replacement>*/\n\n/*<replacement>*/\n\nvar Buffer = require('safe-buffer').Buffer;\nvar OurUint8Array = (typeof global !== 'undefined' ? global : typeof window !== 'undefined' ? window : typeof self !== 'undefined' ? self : {}).Uint8Array || function () {};\nfunction _uint8ArrayToBuffer(chunk) {\n  return Buffer.from(chunk);\n}\nfunction _isUint8Array(obj) {\n  return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n\n/*</replacement>*/\n\n/*<replacement>*/\nvar util = Object.create(require('core-util-is'));\nutil.inherits = require('inherits');\n/*</replacement>*/\n\n/*<replacement>*/\nvar debugUtil = require('util');\nvar debug = void 0;\nif (debugUtil && debugUtil.debuglog) {\n  debug = debugUtil.debuglog('stream');\n} else {\n  debug = function () {};\n}\n/*</replacement>*/\n\nvar BufferList = require('./internal/streams/BufferList');\nvar destroyImpl = require('./internal/streams/destroy');\nvar StringDecoder;\n\nutil.inherits(Readable, Stream);\n\nvar kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume'];\n\nfunction prependListener(emitter, event, fn) {\n  // Sadly this is not cacheable as some libraries bundle their own\n  // event emitter implementation with them.\n  if (typeof emitter.prependListener === 'function') return emitter.prependListener(event, fn);\n\n  // This is a hack to make sure that our error handler is attached before any\n  // userland ones.  NEVER DO THIS. This is here only because this code needs\n  // to continue to work with older versions of Node.js that do not include\n  // the prependListener() method. The goal is to eventually remove this hack.\n  if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]];\n}\n\nfunction ReadableState(options, stream) {\n  Duplex = Duplex || require('./_stream_duplex');\n\n  options = options || {};\n\n  // Duplex streams are both readable and writable, but share\n  // the same options object.\n  // However, some cases require setting options to different\n  // values for the readable and the writable sides of the duplex stream.\n  // These options can be provided separately as readableXXX and writableXXX.\n  var isDuplex = stream instanceof Duplex;\n\n  // object stream flag. Used to make read(n) ignore n and to\n  // make all the buffer merging and length checks go away\n  this.objectMode = !!options.objectMode;\n\n  if (isDuplex) this.objectMode = this.objectMode || !!options.readableObjectMode;\n\n  // the point at which it stops calling _read() to fill the buffer\n  // Note: 0 is a valid value, means \"don't call _read preemptively ever\"\n  var hwm = options.highWaterMark;\n  var readableHwm = options.readableHighWaterMark;\n  var defaultHwm = this.objectMode ? 16 : 16 * 1024;\n\n  if (hwm || hwm === 0) this.highWaterMark = hwm;else if (isDuplex && (readableHwm || readableHwm === 0)) this.highWaterMark = readableHwm;else this.highWaterMark = defaultHwm;\n\n  // cast to ints.\n  this.highWaterMark = Math.floor(this.highWaterMark);\n\n  // A linked list is used to store data chunks instead of an array because the\n  // linked list can remove elements from the beginning faster than\n  // array.shift()\n  this.buffer = new BufferList();\n  this.length = 0;\n  this.pipes = null;\n  this.pipesCount = 0;\n  this.flowing = null;\n  this.ended = false;\n  this.endEmitted = false;\n  this.reading = false;\n\n  // a flag to be able to tell if the event 'readable'/'data' is emitted\n  // immediately, or on a later tick.  We set this to true at first, because\n  // any actions that shouldn't happen until \"later\" should generally also\n  // not happen before the first read call.\n  this.sync = true;\n\n  // whenever we return null, then we set a flag to say\n  // that we're awaiting a 'readable' event emission.\n  this.needReadable = false;\n  this.emittedReadable = false;\n  this.readableListening = false;\n  this.resumeScheduled = false;\n\n  // has it been destroyed\n  this.destroyed = false;\n\n  // Crypto is kind of old and crusty.  Historically, its default string\n  // encoding is 'binary' so we have to make this configurable.\n  // Everything else in the universe uses 'utf8', though.\n  this.defaultEncoding = options.defaultEncoding || 'utf8';\n\n  // the number of writers that are awaiting a drain event in .pipe()s\n  this.awaitDrain = 0;\n\n  // if true, a maybeReadMore has been scheduled\n  this.readingMore = false;\n\n  this.decoder = null;\n  this.encoding = null;\n  if (options.encoding) {\n    if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n    this.decoder = new StringDecoder(options.encoding);\n    this.encoding = options.encoding;\n  }\n}\n\nfunction Readable(options) {\n  Duplex = Duplex || require('./_stream_duplex');\n\n  if (!(this instanceof Readable)) return new Readable(options);\n\n  this._readableState = new ReadableState(options, this);\n\n  // legacy\n  this.readable = true;\n\n  if (options) {\n    if (typeof options.read === 'function') this._read = options.read;\n\n    if (typeof options.destroy === 'function') this._destroy = options.destroy;\n  }\n\n  Stream.call(this);\n}\n\nObject.defineProperty(Readable.prototype, 'destroyed', {\n  get: function () {\n    if (this._readableState === undefined) {\n      return false;\n    }\n    return this._readableState.destroyed;\n  },\n  set: function (value) {\n    // we ignore the value if the stream\n    // has not been initialized yet\n    if (!this._readableState) {\n      return;\n    }\n\n    // backward compatibility, the user is explicitly\n    // managing destroyed\n    this._readableState.destroyed = value;\n  }\n});\n\nReadable.prototype.destroy = destroyImpl.destroy;\nReadable.prototype._undestroy = destroyImpl.undestroy;\nReadable.prototype._destroy = function (err, cb) {\n  this.push(null);\n  cb(err);\n};\n\n// Manually shove something into the read() buffer.\n// This returns true if the highWaterMark has not been hit yet,\n// similar to how Writable.write() returns true if you should\n// write() some more.\nReadable.prototype.push = function (chunk, encoding) {\n  var state = this._readableState;\n  var skipChunkCheck;\n\n  if (!state.objectMode) {\n    if (typeof chunk === 'string') {\n      encoding = encoding || state.defaultEncoding;\n      if (encoding !== state.encoding) {\n        chunk = Buffer.from(chunk, encoding);\n        encoding = '';\n      }\n      skipChunkCheck = true;\n    }\n  } else {\n    skipChunkCheck = true;\n  }\n\n  return readableAddChunk(this, chunk, encoding, false, skipChunkCheck);\n};\n\n// Unshift should *always* be something directly out of read()\nReadable.prototype.unshift = function (chunk) {\n  return readableAddChunk(this, chunk, null, true, false);\n};\n\nfunction readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) {\n  var state = stream._readableState;\n  if (chunk === null) {\n    state.reading = false;\n    onEofChunk(stream, state);\n  } else {\n    var er;\n    if (!skipChunkCheck) er = chunkInvalid(state, chunk);\n    if (er) {\n      stream.emit('error', er);\n    } else if (state.objectMode || chunk && chunk.length > 0) {\n      if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) {\n        chunk = _uint8ArrayToBuffer(chunk);\n      }\n\n      if (addToFront) {\n        if (state.endEmitted) stream.emit('error', new Error('stream.unshift() after end event'));else addChunk(stream, state, chunk, true);\n      } else if (state.ended) {\n        stream.emit('error', new Error('stream.push() after EOF'));\n      } else {\n        state.reading = false;\n        if (state.decoder && !encoding) {\n          chunk = state.decoder.write(chunk);\n          if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false);else maybeReadMore(stream, state);\n        } else {\n          addChunk(stream, state, chunk, false);\n        }\n      }\n    } else if (!addToFront) {\n      state.reading = false;\n    }\n  }\n\n  return needMoreData(state);\n}\n\nfunction addChunk(stream, state, chunk, addToFront) {\n  if (state.flowing && state.length === 0 && !state.sync) {\n    stream.emit('data', chunk);\n    stream.read(0);\n  } else {\n    // update the buffer info.\n    state.length += state.objectMode ? 1 : chunk.length;\n    if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);\n\n    if (state.needReadable) emitReadable(stream);\n  }\n  maybeReadMore(stream, state);\n}\n\nfunction chunkInvalid(state, chunk) {\n  var er;\n  if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {\n    er = new TypeError('Invalid non-string/buffer chunk');\n  }\n  return er;\n}\n\n// if it's past the high water mark, we can push in some more.\n// Also, if we have no data yet, we can stand some\n// more bytes.  This is to work around cases where hwm=0,\n// such as the repl.  Also, if the push() triggered a\n// readable event, and the user called read(largeNumber) such that\n// needReadable was set, then we ought to push more, so that another\n// 'readable' event will be triggered.\nfunction needMoreData(state) {\n  return !state.ended && (state.needReadable || state.length < state.highWaterMark || state.length === 0);\n}\n\nReadable.prototype.isPaused = function () {\n  return this._readableState.flowing === false;\n};\n\n// backwards compatibility.\nReadable.prototype.setEncoding = function (enc) {\n  if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n  this._readableState.decoder = new StringDecoder(enc);\n  this._readableState.encoding = enc;\n  return this;\n};\n\n// Don't raise the hwm > 8MB\nvar MAX_HWM = 0x800000;\nfunction computeNewHighWaterMark(n) {\n  if (n >= MAX_HWM) {\n    n = MAX_HWM;\n  } else {\n    // Get the next highest power of 2 to prevent increasing hwm excessively in\n    // tiny amounts\n    n--;\n    n |= n >>> 1;\n    n |= n >>> 2;\n    n |= n >>> 4;\n    n |= n >>> 8;\n    n |= n >>> 16;\n    n++;\n  }\n  return n;\n}\n\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction howMuchToRead(n, state) {\n  if (n <= 0 || state.length === 0 && state.ended) return 0;\n  if (state.objectMode) return 1;\n  if (n !== n) {\n    // Only flow one buffer at a time\n    if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;\n  }\n  // If we're asking for more than the current hwm, then raise the hwm.\n  if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);\n  if (n <= state.length) return n;\n  // Don't have enough\n  if (!state.ended) {\n    state.needReadable = true;\n    return 0;\n  }\n  return state.length;\n}\n\n// you can override either this method, or the async _read(n) below.\nReadable.prototype.read = function (n) {\n  debug('read', n);\n  n = parseInt(n, 10);\n  var state = this._readableState;\n  var nOrig = n;\n\n  if (n !== 0) state.emittedReadable = false;\n\n  // if we're doing read(0) to trigger a readable event, but we\n  // already have a bunch of data in the buffer, then just trigger\n  // the 'readable' event and move on.\n  if (n === 0 && state.needReadable && (state.length >= state.highWaterMark || state.ended)) {\n    debug('read: emitReadable', state.length, state.ended);\n    if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);\n    return null;\n  }\n\n  n = howMuchToRead(n, state);\n\n  // if we've ended, and we're now clear, then finish it up.\n  if (n === 0 && state.ended) {\n    if (state.length === 0) endReadable(this);\n    return null;\n  }\n\n  // All the actual chunk generation logic needs to be\n  // *below* the call to _read.  The reason is that in certain\n  // synthetic stream cases, such as passthrough streams, _read\n  // may be a completely synchronous operation which may change\n  // the state of the read buffer, providing enough data when\n  // before there was *not* enough.\n  //\n  // So, the steps are:\n  // 1. Figure out what the state of things will be after we do\n  // a read from the buffer.\n  //\n  // 2. If that resulting state will trigger a _read, then call _read.\n  // Note that this may be asynchronous, or synchronous.  Yes, it is\n  // deeply ugly to write APIs this way, but that still doesn't mean\n  // that the Readable class should behave improperly, as streams are\n  // designed to be sync/async agnostic.\n  // Take note if the _read call is sync or async (ie, if the read call\n  // has returned yet), so that we know whether or not it's safe to emit\n  // 'readable' etc.\n  //\n  // 3. Actually pull the requested chunks out of the buffer and return.\n\n  // if we need a readable event, then we need to do some reading.\n  var doRead = state.needReadable;\n  debug('need readable', doRead);\n\n  // if we currently have less than the highWaterMark, then also read some\n  if (state.length === 0 || state.length - n < state.highWaterMark) {\n    doRead = true;\n    debug('length less than watermark', doRead);\n  }\n\n  // however, if we've ended, then there's no point, and if we're already\n  // reading, then it's unnecessary.\n  if (state.ended || state.reading) {\n    doRead = false;\n    debug('reading or ended', doRead);\n  } else if (doRead) {\n    debug('do read');\n    state.reading = true;\n    state.sync = true;\n    // if the length is currently zero, then we *need* a readable event.\n    if (state.length === 0) state.needReadable = true;\n    // call internal read method\n    this._read(state.highWaterMark);\n    state.sync = false;\n    // If _read pushed data synchronously, then `reading` will be false,\n    // and we need to re-evaluate how much data we can return to the user.\n    if (!state.reading) n = howMuchToRead(nOrig, state);\n  }\n\n  var ret;\n  if (n > 0) ret = fromList(n, state);else ret = null;\n\n  if (ret === null) {\n    state.needReadable = true;\n    n = 0;\n  } else {\n    state.length -= n;\n  }\n\n  if (state.length === 0) {\n    // If we have nothing in the buffer, then we want to know\n    // as soon as we *do* get something into the buffer.\n    if (!state.ended) state.needReadable = true;\n\n    // If we tried to read() past the EOF, then emit end on the next tick.\n    if (nOrig !== n && state.ended) endReadable(this);\n  }\n\n  if (ret !== null) this.emit('data', ret);\n\n  return ret;\n};\n\nfunction onEofChunk(stream, state) {\n  if (state.ended) return;\n  if (state.decoder) {\n    var chunk = state.decoder.end();\n    if (chunk && chunk.length) {\n      state.buffer.push(chunk);\n      state.length += state.objectMode ? 1 : chunk.length;\n    }\n  }\n  state.ended = true;\n\n  // emit 'readable' now to make sure it gets picked up.\n  emitReadable(stream);\n}\n\n// Don't emit readable right away in sync mode, because this can trigger\n// another read() call => stack overflow.  This way, it might trigger\n// a nextTick recursion warning, but that's not so bad.\nfunction emitReadable(stream) {\n  var state = stream._readableState;\n  state.needReadable = false;\n  if (!state.emittedReadable) {\n    debug('emitReadable', state.flowing);\n    state.emittedReadable = true;\n    if (state.sync) pna.nextTick(emitReadable_, stream);else emitReadable_(stream);\n  }\n}\n\nfunction emitReadable_(stream) {\n  debug('emit readable');\n  stream.emit('readable');\n  flow(stream);\n}\n\n// at this point, the user has presumably seen the 'readable' event,\n// and called read() to consume some data.  that may have triggered\n// in turn another _read(n) call, in which case reading = true if\n// it's in progress.\n// However, if we're not ended, or reading, and the length < hwm,\n// then go ahead and try to read some more preemptively.\nfunction maybeReadMore(stream, state) {\n  if (!state.readingMore) {\n    state.readingMore = true;\n    pna.nextTick(maybeReadMore_, stream, state);\n  }\n}\n\nfunction maybeReadMore_(stream, state) {\n  var len = state.length;\n  while (!state.reading && !state.flowing && !state.ended && state.length < state.highWaterMark) {\n    debug('maybeReadMore read 0');\n    stream.read(0);\n    if (len === state.length)\n      // didn't get any data, stop spinning.\n      break;else len = state.length;\n  }\n  state.readingMore = false;\n}\n\n// abstract method.  to be overridden in specific implementation classes.\n// call cb(er, data) where data is <= n in length.\n// for virtual (non-string, non-buffer) streams, \"length\" is somewhat\n// arbitrary, and perhaps not very meaningful.\nReadable.prototype._read = function (n) {\n  this.emit('error', new Error('_read() is not implemented'));\n};\n\nReadable.prototype.pipe = function (dest, pipeOpts) {\n  var src = this;\n  var state = this._readableState;\n\n  switch (state.pipesCount) {\n    case 0:\n      state.pipes = dest;\n      break;\n    case 1:\n      state.pipes = [state.pipes, dest];\n      break;\n    default:\n      state.pipes.push(dest);\n      break;\n  }\n  state.pipesCount += 1;\n  debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);\n\n  var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;\n\n  var endFn = doEnd ? onend : unpipe;\n  if (state.endEmitted) pna.nextTick(endFn);else src.once('end', endFn);\n\n  dest.on('unpipe', onunpipe);\n  function onunpipe(readable, unpipeInfo) {\n    debug('onunpipe');\n    if (readable === src) {\n      if (unpipeInfo && unpipeInfo.hasUnpiped === false) {\n        unpipeInfo.hasUnpiped = true;\n        cleanup();\n      }\n    }\n  }\n\n  function onend() {\n    debug('onend');\n    dest.end();\n  }\n\n  // when the dest drains, it reduces the awaitDrain counter\n  // on the source.  This would be more elegant with a .once()\n  // handler in flow(), but adding and removing repeatedly is\n  // too slow.\n  var ondrain = pipeOnDrain(src);\n  dest.on('drain', ondrain);\n\n  var cleanedUp = false;\n  function cleanup() {\n    debug('cleanup');\n    // cleanup event handlers once the pipe is broken\n    dest.removeListener('close', onclose);\n    dest.removeListener('finish', onfinish);\n    dest.removeListener('drain', ondrain);\n    dest.removeListener('error', onerror);\n    dest.removeListener('unpipe', onunpipe);\n    src.removeListener('end', onend);\n    src.removeListener('end', unpipe);\n    src.removeListener('data', ondata);\n\n    cleanedUp = true;\n\n    // if the reader is waiting for a drain event from this\n    // specific writer, then it would cause it to never start\n    // flowing again.\n    // So, if this is awaiting a drain, then we just call it now.\n    // If we don't know, then assume that we are waiting for one.\n    if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();\n  }\n\n  // If the user pushes more data while we're writing to dest then we'll end up\n  // in ondata again. However, we only want to increase awaitDrain once because\n  // dest will only emit one 'drain' event for the multiple writes.\n  // => Introduce a guard on increasing awaitDrain.\n  var increasedAwaitDrain = false;\n  src.on('data', ondata);\n  function ondata(chunk) {\n    debug('ondata');\n    increasedAwaitDrain = false;\n    var ret = dest.write(chunk);\n    if (false === ret && !increasedAwaitDrain) {\n      // If the user unpiped during `dest.write()`, it is possible\n      // to get stuck in a permanently paused state if that write\n      // also returned false.\n      // => Check whether `dest` is still a piping destination.\n      if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {\n        debug('false write response, pause', state.awaitDrain);\n        state.awaitDrain++;\n        increasedAwaitDrain = true;\n      }\n      src.pause();\n    }\n  }\n\n  // if the dest has an error, then stop piping into it.\n  // however, don't suppress the throwing behavior for this.\n  function onerror(er) {\n    debug('onerror', er);\n    unpipe();\n    dest.removeListener('error', onerror);\n    if (EElistenerCount(dest, 'error') === 0) dest.emit('error', er);\n  }\n\n  // Make sure our error handler is attached before userland ones.\n  prependListener(dest, 'error', onerror);\n\n  // Both close and finish should trigger unpipe, but only once.\n  function onclose() {\n    dest.removeListener('finish', onfinish);\n    unpipe();\n  }\n  dest.once('close', onclose);\n  function onfinish() {\n    debug('onfinish');\n    dest.removeListener('close', onclose);\n    unpipe();\n  }\n  dest.once('finish', onfinish);\n\n  function unpipe() {\n    debug('unpipe');\n    src.unpipe(dest);\n  }\n\n  // tell the dest that it's being piped to\n  dest.emit('pipe', src);\n\n  // start the flow if it hasn't been started already.\n  if (!state.flowing) {\n    debug('pipe resume');\n    src.resume();\n  }\n\n  return dest;\n};\n\nfunction pipeOnDrain(src) {\n  return function () {\n    var state = src._readableState;\n    debug('pipeOnDrain', state.awaitDrain);\n    if (state.awaitDrain) state.awaitDrain--;\n    if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {\n      state.flowing = true;\n      flow(src);\n    }\n  };\n}\n\nReadable.prototype.unpipe = function (dest) {\n  var state = this._readableState;\n  var unpipeInfo = { hasUnpiped: false };\n\n  // if we're not piping anywhere, then do nothing.\n  if (state.pipesCount === 0) return this;\n\n  // just one destination.  most common case.\n  if (state.pipesCount === 1) {\n    // passed in one, but it's not the right one.\n    if (dest && dest !== state.pipes) return this;\n\n    if (!dest) dest = state.pipes;\n\n    // got a match.\n    state.pipes = null;\n    state.pipesCount = 0;\n    state.flowing = false;\n    if (dest) dest.emit('unpipe', this, unpipeInfo);\n    return this;\n  }\n\n  // slow case. multiple pipe destinations.\n\n  if (!dest) {\n    // remove all.\n    var dests = state.pipes;\n    var len = state.pipesCount;\n    state.pipes = null;\n    state.pipesCount = 0;\n    state.flowing = false;\n\n    for (var i = 0; i < len; i++) {\n      dests[i].emit('unpipe', this, { hasUnpiped: false });\n    }return this;\n  }\n\n  // try to find the right one.\n  var index = indexOf(state.pipes, dest);\n  if (index === -1) return this;\n\n  state.pipes.splice(index, 1);\n  state.pipesCount -= 1;\n  if (state.pipesCount === 1) state.pipes = state.pipes[0];\n\n  dest.emit('unpipe', this, unpipeInfo);\n\n  return this;\n};\n\n// set up data events if they are asked for\n// Ensure readable listeners eventually get something\nReadable.prototype.on = function (ev, fn) {\n  var res = Stream.prototype.on.call(this, ev, fn);\n\n  if (ev === 'data') {\n    // Start flowing on next tick if stream isn't explicitly paused\n    if (this._readableState.flowing !== false) this.resume();\n  } else if (ev === 'readable') {\n    var state = this._readableState;\n    if (!state.endEmitted && !state.readableListening) {\n      state.readableListening = state.needReadable = true;\n      state.emittedReadable = false;\n      if (!state.reading) {\n        pna.nextTick(nReadingNextTick, this);\n      } else if (state.length) {\n        emitReadable(this);\n      }\n    }\n  }\n\n  return res;\n};\nReadable.prototype.addListener = Readable.prototype.on;\n\nfunction nReadingNextTick(self) {\n  debug('readable nexttick read 0');\n  self.read(0);\n}\n\n// pause() and resume() are remnants of the legacy readable stream API\n// If the user uses them, then switch into old mode.\nReadable.prototype.resume = function () {\n  var state = this._readableState;\n  if (!state.flowing) {\n    debug('resume');\n    state.flowing = true;\n    resume(this, state);\n  }\n  return this;\n};\n\nfunction resume(stream, state) {\n  if (!state.resumeScheduled) {\n    state.resumeScheduled = true;\n    pna.nextTick(resume_, stream, state);\n  }\n}\n\nfunction resume_(stream, state) {\n  if (!state.reading) {\n    debug('resume read 0');\n    stream.read(0);\n  }\n\n  state.resumeScheduled = false;\n  state.awaitDrain = 0;\n  stream.emit('resume');\n  flow(stream);\n  if (state.flowing && !state.reading) stream.read(0);\n}\n\nReadable.prototype.pause = function () {\n  debug('call pause flowing=%j', this._readableState.flowing);\n  if (false !== this._readableState.flowing) {\n    debug('pause');\n    this._readableState.flowing = false;\n    this.emit('pause');\n  }\n  return this;\n};\n\nfunction flow(stream) {\n  var state = stream._readableState;\n  debug('flow', state.flowing);\n  while (state.flowing && stream.read() !== null) {}\n}\n\n// wrap an old-style stream as the async data source.\n// This is *not* part of the readable stream interface.\n// It is an ugly unfortunate mess of history.\nReadable.prototype.wrap = function (stream) {\n  var _this = this;\n\n  var state = this._readableState;\n  var paused = false;\n\n  stream.on('end', function () {\n    debug('wrapped end');\n    if (state.decoder && !state.ended) {\n      var chunk = state.decoder.end();\n      if (chunk && chunk.length) _this.push(chunk);\n    }\n\n    _this.push(null);\n  });\n\n  stream.on('data', function (chunk) {\n    debug('wrapped data');\n    if (state.decoder) chunk = state.decoder.write(chunk);\n\n    // don't skip over falsy values in objectMode\n    if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;\n\n    var ret = _this.push(chunk);\n    if (!ret) {\n      paused = true;\n      stream.pause();\n    }\n  });\n\n  // proxy all the other methods.\n  // important when wrapping filters and duplexes.\n  for (var i in stream) {\n    if (this[i] === undefined && typeof stream[i] === 'function') {\n      this[i] = function (method) {\n        return function () {\n          return stream[method].apply(stream, arguments);\n        };\n      }(i);\n    }\n  }\n\n  // proxy certain important events.\n  for (var n = 0; n < kProxyEvents.length; n++) {\n    stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n]));\n  }\n\n  // when we try to consume some more bytes, simply unpause the\n  // underlying stream.\n  this._read = function (n) {\n    debug('wrapped _read', n);\n    if (paused) {\n      paused = false;\n      stream.resume();\n    }\n  };\n\n  return this;\n};\n\nObject.defineProperty(Readable.prototype, 'readableHighWaterMark', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function () {\n    return this._readableState.highWaterMark;\n  }\n});\n\n// exposed for testing purposes only.\nReadable._fromList = fromList;\n\n// Pluck off n bytes from an array of buffers.\n// Length is the combined lengths of all the buffers in the list.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction fromList(n, state) {\n  // nothing buffered\n  if (state.length === 0) return null;\n\n  var ret;\n  if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {\n    // read it all, truncate the list\n    if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.head.data;else ret = state.buffer.concat(state.length);\n    state.buffer.clear();\n  } else {\n    // read part of list\n    ret = fromListPartial(n, state.buffer, state.decoder);\n  }\n\n  return ret;\n}\n\n// Extracts only enough buffered data to satisfy the amount requested.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction fromListPartial(n, list, hasStrings) {\n  var ret;\n  if (n < list.head.data.length) {\n    // slice is the same for buffers and strings\n    ret = list.head.data.slice(0, n);\n    list.head.data = list.head.data.slice(n);\n  } else if (n === list.head.data.length) {\n    // first chunk is a perfect match\n    ret = list.shift();\n  } else {\n    // result spans more than one buffer\n    ret = hasStrings ? copyFromBufferString(n, list) : copyFromBuffer(n, list);\n  }\n  return ret;\n}\n\n// Copies a specified amount of characters from the list of buffered data\n// chunks.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction copyFromBufferString(n, list) {\n  var p = list.head;\n  var c = 1;\n  var ret = p.data;\n  n -= ret.length;\n  while (p = p.next) {\n    var str = p.data;\n    var nb = n > str.length ? str.length : n;\n    if (nb === str.length) ret += str;else ret += str.slice(0, n);\n    n -= nb;\n    if (n === 0) {\n      if (nb === str.length) {\n        ++c;\n        if (p.next) list.head = p.next;else list.head = list.tail = null;\n      } else {\n        list.head = p;\n        p.data = str.slice(nb);\n      }\n      break;\n    }\n    ++c;\n  }\n  list.length -= c;\n  return ret;\n}\n\n// Copies a specified amount of bytes from the list of buffered data chunks.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction copyFromBuffer(n, list) {\n  var ret = Buffer.allocUnsafe(n);\n  var p = list.head;\n  var c = 1;\n  p.data.copy(ret);\n  n -= p.data.length;\n  while (p = p.next) {\n    var buf = p.data;\n    var nb = n > buf.length ? buf.length : n;\n    buf.copy(ret, ret.length - n, 0, nb);\n    n -= nb;\n    if (n === 0) {\n      if (nb === buf.length) {\n        ++c;\n        if (p.next) list.head = p.next;else list.head = list.tail = null;\n      } else {\n        list.head = p;\n        p.data = buf.slice(nb);\n      }\n      break;\n    }\n    ++c;\n  }\n  list.length -= c;\n  return ret;\n}\n\nfunction endReadable(stream) {\n  var state = stream._readableState;\n\n  // If we get here before consuming all the bytes, then that is a\n  // bug in node.  Should never happen.\n  if (state.length > 0) throw new Error('\"endReadable()\" called on non-empty stream');\n\n  if (!state.endEmitted) {\n    state.ended = true;\n    pna.nextTick(endReadableNT, state, stream);\n  }\n}\n\nfunction endReadableNT(state, stream) {\n  // Check that we didn't get one last unshift.\n  if (!state.endEmitted && state.length === 0) {\n    state.endEmitted = true;\n    stream.readable = false;\n    stream.emit('end');\n  }\n}\n\nfunction indexOf(xs, x) {\n  for (var i = 0, l = xs.length; i < l; i++) {\n    if (xs[i] === x) return i;\n  }\n  return -1;\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// a transform stream is a readable/writable stream where you do\n// something with the data.  Sometimes it's called a \"filter\",\n// but that's not a great name for it, since that implies a thing where\n// some bits pass through, and others are simply ignored.  (That would\n// be a valid example of a transform, of course.)\n//\n// While the output is causally related to the input, it's not a\n// necessarily symmetric or synchronous transformation.  For example,\n// a zlib stream might take multiple plain-text writes(), and then\n// emit a single compressed chunk some time in the future.\n//\n// Here's how this works:\n//\n// The Transform stream has all the aspects of the readable and writable\n// stream classes.  When you write(chunk), that calls _write(chunk,cb)\n// internally, and returns false if there's a lot of pending writes\n// buffered up.  When you call read(), that calls _read(n) until\n// there's enough pending readable data buffered up.\n//\n// In a transform stream, the written data is placed in a buffer.  When\n// _read(n) is called, it transforms the queued up data, calling the\n// buffered _write cb's as it consumes chunks.  If consuming a single\n// written chunk would result in multiple output chunks, then the first\n// outputted bit calls the readcb, and subsequent chunks just go into\n// the read buffer, and will cause it to emit 'readable' if necessary.\n//\n// This way, back-pressure is actually determined by the reading side,\n// since _read has to be called to start processing a new chunk.  However,\n// a pathological inflate type of transform can cause excessive buffering\n// here.  For example, imagine a stream where every byte of input is\n// interpreted as an integer from 0-255, and then results in that many\n// bytes of output.  Writing the 4 bytes {ff,ff,ff,ff} would result in\n// 1kb of data being output.  In this case, you could write a very small\n// amount of input, and end up with a very large amount of output.  In\n// such a pathological inflating mechanism, there'd be no way to tell\n// the system to stop doing the transform.  A single 4MB write could\n// cause the system to run out of memory.\n//\n// However, even in such a pathological case, only a single written chunk\n// would be consumed, and then the rest would wait (un-transformed) until\n// the results of the previous transformed chunk were consumed.\n\n'use strict';\n\nmodule.exports = Transform;\n\nvar Duplex = require('./_stream_duplex');\n\n/*<replacement>*/\nvar util = Object.create(require('core-util-is'));\nutil.inherits = require('inherits');\n/*</replacement>*/\n\nutil.inherits(Transform, Duplex);\n\nfunction afterTransform(er, data) {\n  var ts = this._transformState;\n  ts.transforming = false;\n\n  var cb = ts.writecb;\n\n  if (!cb) {\n    return this.emit('error', new Error('write callback called multiple times'));\n  }\n\n  ts.writechunk = null;\n  ts.writecb = null;\n\n  if (data != null) // single equals check for both `null` and `undefined`\n    this.push(data);\n\n  cb(er);\n\n  var rs = this._readableState;\n  rs.reading = false;\n  if (rs.needReadable || rs.length < rs.highWaterMark) {\n    this._read(rs.highWaterMark);\n  }\n}\n\nfunction Transform(options) {\n  if (!(this instanceof Transform)) return new Transform(options);\n\n  Duplex.call(this, options);\n\n  this._transformState = {\n    afterTransform: afterTransform.bind(this),\n    needTransform: false,\n    transforming: false,\n    writecb: null,\n    writechunk: null,\n    writeencoding: null\n  };\n\n  // start out asking for a readable event once data is transformed.\n  this._readableState.needReadable = true;\n\n  // we have implemented the _read method, and done the other things\n  // that Readable wants before the first _read call, so unset the\n  // sync guard flag.\n  this._readableState.sync = false;\n\n  if (options) {\n    if (typeof options.transform === 'function') this._transform = options.transform;\n\n    if (typeof options.flush === 'function') this._flush = options.flush;\n  }\n\n  // When the writable side finishes, then flush out anything remaining.\n  this.on('prefinish', prefinish);\n}\n\nfunction prefinish() {\n  var _this = this;\n\n  if (typeof this._flush === 'function') {\n    this._flush(function (er, data) {\n      done(_this, er, data);\n    });\n  } else {\n    done(this, null, null);\n  }\n}\n\nTransform.prototype.push = function (chunk, encoding) {\n  this._transformState.needTransform = false;\n  return Duplex.prototype.push.call(this, chunk, encoding);\n};\n\n// This is the part where you do stuff!\n// override this function in implementation classes.\n// 'chunk' is an input chunk.\n//\n// Call `push(newChunk)` to pass along transformed output\n// to the readable side.  You may call 'push' zero or more times.\n//\n// Call `cb(err)` when you are done with this chunk.  If you pass\n// an error, then that'll put the hurt on the whole operation.  If you\n// never call cb(), then you'll never get another chunk.\nTransform.prototype._transform = function (chunk, encoding, cb) {\n  throw new Error('_transform() is not implemented');\n};\n\nTransform.prototype._write = function (chunk, encoding, cb) {\n  var ts = this._transformState;\n  ts.writecb = cb;\n  ts.writechunk = chunk;\n  ts.writeencoding = encoding;\n  if (!ts.transforming) {\n    var rs = this._readableState;\n    if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);\n  }\n};\n\n// Doesn't matter what the args are here.\n// _transform does all the work.\n// That we got here means that the readable side wants more data.\nTransform.prototype._read = function (n) {\n  var ts = this._transformState;\n\n  if (ts.writechunk !== null && ts.writecb && !ts.transforming) {\n    ts.transforming = true;\n    this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);\n  } else {\n    // mark that we need a transform, so that any data that comes in\n    // will get processed, now that we've asked for it.\n    ts.needTransform = true;\n  }\n};\n\nTransform.prototype._destroy = function (err, cb) {\n  var _this2 = this;\n\n  Duplex.prototype._destroy.call(this, err, function (err2) {\n    cb(err2);\n    _this2.emit('close');\n  });\n};\n\nfunction done(stream, er, data) {\n  if (er) return stream.emit('error', er);\n\n  if (data != null) // single equals check for both `null` and `undefined`\n    stream.push(data);\n\n  // if there's nothing in the write buffer, then that means\n  // that nothing more will ever be provided\n  if (stream._writableState.length) throw new Error('Calling transform done when ws.length != 0');\n\n  if (stream._transformState.transforming) throw new Error('Calling transform done when still transforming');\n\n  return stream.push(null);\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// A bit simpler than readable streams.\n// Implement an async ._write(chunk, encoding, cb), and it'll handle all\n// the drain event emission and buffering.\n\n'use strict';\n\n/*<replacement>*/\n\nvar pna = require('process-nextick-args');\n/*</replacement>*/\n\nmodule.exports = Writable;\n\n/* <replacement> */\nfunction WriteReq(chunk, encoding, cb) {\n  this.chunk = chunk;\n  this.encoding = encoding;\n  this.callback = cb;\n  this.next = null;\n}\n\n// It seems a linked list but it is not\n// there will be only 2 of these for each stream\nfunction CorkedRequest(state) {\n  var _this = this;\n\n  this.next = null;\n  this.entry = null;\n  this.finish = function () {\n    onCorkedFinish(_this, state);\n  };\n}\n/* </replacement> */\n\n/*<replacement>*/\nvar asyncWrite = !process.browser && ['v0.10', 'v0.9.'].indexOf(process.version.slice(0, 5)) > -1 ? setImmediate : pna.nextTick;\n/*</replacement>*/\n\n/*<replacement>*/\nvar Duplex;\n/*</replacement>*/\n\nWritable.WritableState = WritableState;\n\n/*<replacement>*/\nvar util = Object.create(require('core-util-is'));\nutil.inherits = require('inherits');\n/*</replacement>*/\n\n/*<replacement>*/\nvar internalUtil = {\n  deprecate: require('util-deprecate')\n};\n/*</replacement>*/\n\n/*<replacement>*/\nvar Stream = require('./internal/streams/stream');\n/*</replacement>*/\n\n/*<replacement>*/\n\nvar Buffer = require('safe-buffer').Buffer;\nvar OurUint8Array = (typeof global !== 'undefined' ? global : typeof window !== 'undefined' ? window : typeof self !== 'undefined' ? self : {}).Uint8Array || function () {};\nfunction _uint8ArrayToBuffer(chunk) {\n  return Buffer.from(chunk);\n}\nfunction _isUint8Array(obj) {\n  return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n\n/*</replacement>*/\n\nvar destroyImpl = require('./internal/streams/destroy');\n\nutil.inherits(Writable, Stream);\n\nfunction nop() {}\n\nfunction WritableState(options, stream) {\n  Duplex = Duplex || require('./_stream_duplex');\n\n  options = options || {};\n\n  // Duplex streams are both readable and writable, but share\n  // the same options object.\n  // However, some cases require setting options to different\n  // values for the readable and the writable sides of the duplex stream.\n  // These options can be provided separately as readableXXX and writableXXX.\n  var isDuplex = stream instanceof Duplex;\n\n  // object stream flag to indicate whether or not this stream\n  // contains buffers or objects.\n  this.objectMode = !!options.objectMode;\n\n  if (isDuplex) this.objectMode = this.objectMode || !!options.writableObjectMode;\n\n  // the point at which write() starts returning false\n  // Note: 0 is a valid value, means that we always return false if\n  // the entire buffer is not flushed immediately on write()\n  var hwm = options.highWaterMark;\n  var writableHwm = options.writableHighWaterMark;\n  var defaultHwm = this.objectMode ? 16 : 16 * 1024;\n\n  if (hwm || hwm === 0) this.highWaterMark = hwm;else if (isDuplex && (writableHwm || writableHwm === 0)) this.highWaterMark = writableHwm;else this.highWaterMark = defaultHwm;\n\n  // cast to ints.\n  this.highWaterMark = Math.floor(this.highWaterMark);\n\n  // if _final has been called\n  this.finalCalled = false;\n\n  // drain event flag.\n  this.needDrain = false;\n  // at the start of calling end()\n  this.ending = false;\n  // when end() has been called, and returned\n  this.ended = false;\n  // when 'finish' is emitted\n  this.finished = false;\n\n  // has it been destroyed\n  this.destroyed = false;\n\n  // should we decode strings into buffers before passing to _write?\n  // this is here so that some node-core streams can optimize string\n  // handling at a lower level.\n  var noDecode = options.decodeStrings === false;\n  this.decodeStrings = !noDecode;\n\n  // Crypto is kind of old and crusty.  Historically, its default string\n  // encoding is 'binary' so we have to make this configurable.\n  // Everything else in the universe uses 'utf8', though.\n  this.defaultEncoding = options.defaultEncoding || 'utf8';\n\n  // not an actual buffer we keep track of, but a measurement\n  // of how much we're waiting to get pushed to some underlying\n  // socket or file.\n  this.length = 0;\n\n  // a flag to see when we're in the middle of a write.\n  this.writing = false;\n\n  // when true all writes will be buffered until .uncork() call\n  this.corked = 0;\n\n  // a flag to be able to tell if the onwrite cb is called immediately,\n  // or on a later tick.  We set this to true at first, because any\n  // actions that shouldn't happen until \"later\" should generally also\n  // not happen before the first write call.\n  this.sync = true;\n\n  // a flag to know if we're processing previously buffered items, which\n  // may call the _write() callback in the same tick, so that we don't\n  // end up in an overlapped onwrite situation.\n  this.bufferProcessing = false;\n\n  // the callback that's passed to _write(chunk,cb)\n  this.onwrite = function (er) {\n    onwrite(stream, er);\n  };\n\n  // the callback that the user supplies to write(chunk,encoding,cb)\n  this.writecb = null;\n\n  // the amount that is being written when _write is called.\n  this.writelen = 0;\n\n  this.bufferedRequest = null;\n  this.lastBufferedRequest = null;\n\n  // number of pending user-supplied write callbacks\n  // this must be 0 before 'finish' can be emitted\n  this.pendingcb = 0;\n\n  // emit prefinish if the only thing we're waiting for is _write cbs\n  // This is relevant for synchronous Transform streams\n  this.prefinished = false;\n\n  // True if the error was already emitted and should not be thrown again\n  this.errorEmitted = false;\n\n  // count buffered requests\n  this.bufferedRequestCount = 0;\n\n  // allocate the first CorkedRequest, there is always\n  // one allocated and free to use, and we maintain at most two\n  this.corkedRequestsFree = new CorkedRequest(this);\n}\n\nWritableState.prototype.getBuffer = function getBuffer() {\n  var current = this.bufferedRequest;\n  var out = [];\n  while (current) {\n    out.push(current);\n    current = current.next;\n  }\n  return out;\n};\n\n(function () {\n  try {\n    Object.defineProperty(WritableState.prototype, 'buffer', {\n      get: internalUtil.deprecate(function () {\n        return this.getBuffer();\n      }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003')\n    });\n  } catch (_) {}\n})();\n\n// Test _writableState for inheritance to account for Duplex streams,\n// whose prototype chain only points to Readable.\nvar realHasInstance;\nif (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {\n  realHasInstance = Function.prototype[Symbol.hasInstance];\n  Object.defineProperty(Writable, Symbol.hasInstance, {\n    value: function (object) {\n      if (realHasInstance.call(this, object)) return true;\n      if (this !== Writable) return false;\n\n      return object && object._writableState instanceof WritableState;\n    }\n  });\n} else {\n  realHasInstance = function (object) {\n    return object instanceof this;\n  };\n}\n\nfunction Writable(options) {\n  Duplex = Duplex || require('./_stream_duplex');\n\n  // Writable ctor is applied to Duplexes, too.\n  // `realHasInstance` is necessary because using plain `instanceof`\n  // would return false, as no `_writableState` property is attached.\n\n  // Trying to use the custom `instanceof` for Writable here will also break the\n  // Node.js LazyTransform implementation, which has a non-trivial getter for\n  // `_writableState` that would lead to infinite recursion.\n  if (!realHasInstance.call(Writable, this) && !(this instanceof Duplex)) {\n    return new Writable(options);\n  }\n\n  this._writableState = new WritableState(options, this);\n\n  // legacy.\n  this.writable = true;\n\n  if (options) {\n    if (typeof options.write === 'function') this._write = options.write;\n\n    if (typeof options.writev === 'function') this._writev = options.writev;\n\n    if (typeof options.destroy === 'function') this._destroy = options.destroy;\n\n    if (typeof options.final === 'function') this._final = options.final;\n  }\n\n  Stream.call(this);\n}\n\n// Otherwise people can pipe Writable streams, which is just wrong.\nWritable.prototype.pipe = function () {\n  this.emit('error', new Error('Cannot pipe, not readable'));\n};\n\nfunction writeAfterEnd(stream, cb) {\n  var er = new Error('write after end');\n  // TODO: defer error events consistently everywhere, not just the cb\n  stream.emit('error', er);\n  pna.nextTick(cb, er);\n}\n\n// Checks that a user-supplied chunk is valid, especially for the particular\n// mode the stream is in. Currently this means that `null` is never accepted\n// and undefined/non-string values are only allowed in object mode.\nfunction validChunk(stream, state, chunk, cb) {\n  var valid = true;\n  var er = false;\n\n  if (chunk === null) {\n    er = new TypeError('May not write null values to stream');\n  } else if (typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {\n    er = new TypeError('Invalid non-string/buffer chunk');\n  }\n  if (er) {\n    stream.emit('error', er);\n    pna.nextTick(cb, er);\n    valid = false;\n  }\n  return valid;\n}\n\nWritable.prototype.write = function (chunk, encoding, cb) {\n  var state = this._writableState;\n  var ret = false;\n  var isBuf = !state.objectMode && _isUint8Array(chunk);\n\n  if (isBuf && !Buffer.isBuffer(chunk)) {\n    chunk = _uint8ArrayToBuffer(chunk);\n  }\n\n  if (typeof encoding === 'function') {\n    cb = encoding;\n    encoding = null;\n  }\n\n  if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;\n\n  if (typeof cb !== 'function') cb = nop;\n\n  if (state.ended) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) {\n    state.pendingcb++;\n    ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb);\n  }\n\n  return ret;\n};\n\nWritable.prototype.cork = function () {\n  var state = this._writableState;\n\n  state.corked++;\n};\n\nWritable.prototype.uncork = function () {\n  var state = this._writableState;\n\n  if (state.corked) {\n    state.corked--;\n\n    if (!state.writing && !state.corked && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);\n  }\n};\n\nWritable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {\n  // node::ParseEncoding() requires lower case.\n  if (typeof encoding === 'string') encoding = encoding.toLowerCase();\n  if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new TypeError('Unknown encoding: ' + encoding);\n  this._writableState.defaultEncoding = encoding;\n  return this;\n};\n\nfunction decodeChunk(state, chunk, encoding) {\n  if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {\n    chunk = Buffer.from(chunk, encoding);\n  }\n  return chunk;\n}\n\nObject.defineProperty(Writable.prototype, 'writableHighWaterMark', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function () {\n    return this._writableState.highWaterMark;\n  }\n});\n\n// if we're already writing something, then just put this\n// in the queue, and wait our turn.  Otherwise, call _write\n// If we return false, then we need a drain event, so set that flag.\nfunction writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) {\n  if (!isBuf) {\n    var newChunk = decodeChunk(state, chunk, encoding);\n    if (chunk !== newChunk) {\n      isBuf = true;\n      encoding = 'buffer';\n      chunk = newChunk;\n    }\n  }\n  var len = state.objectMode ? 1 : chunk.length;\n\n  state.length += len;\n\n  var ret = state.length < state.highWaterMark;\n  // we must ensure that previous needDrain will not be reset to false.\n  if (!ret) state.needDrain = true;\n\n  if (state.writing || state.corked) {\n    var last = state.lastBufferedRequest;\n    state.lastBufferedRequest = {\n      chunk: chunk,\n      encoding: encoding,\n      isBuf: isBuf,\n      callback: cb,\n      next: null\n    };\n    if (last) {\n      last.next = state.lastBufferedRequest;\n    } else {\n      state.bufferedRequest = state.lastBufferedRequest;\n    }\n    state.bufferedRequestCount += 1;\n  } else {\n    doWrite(stream, state, false, len, chunk, encoding, cb);\n  }\n\n  return ret;\n}\n\nfunction doWrite(stream, state, writev, len, chunk, encoding, cb) {\n  state.writelen = len;\n  state.writecb = cb;\n  state.writing = true;\n  state.sync = true;\n  if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);\n  state.sync = false;\n}\n\nfunction onwriteError(stream, state, sync, er, cb) {\n  --state.pendingcb;\n\n  if (sync) {\n    // defer the callback if we are being called synchronously\n    // to avoid piling up things on the stack\n    pna.nextTick(cb, er);\n    // this can emit finish, and it will always happen\n    // after error\n    pna.nextTick(finishMaybe, stream, state);\n    stream._writableState.errorEmitted = true;\n    stream.emit('error', er);\n  } else {\n    // the caller expect this to happen before if\n    // it is async\n    cb(er);\n    stream._writableState.errorEmitted = true;\n    stream.emit('error', er);\n    // this can emit finish, but finish must\n    // always follow error\n    finishMaybe(stream, state);\n  }\n}\n\nfunction onwriteStateUpdate(state) {\n  state.writing = false;\n  state.writecb = null;\n  state.length -= state.writelen;\n  state.writelen = 0;\n}\n\nfunction onwrite(stream, er) {\n  var state = stream._writableState;\n  var sync = state.sync;\n  var cb = state.writecb;\n\n  onwriteStateUpdate(state);\n\n  if (er) onwriteError(stream, state, sync, er, cb);else {\n    // Check if we're actually ready to finish, but don't emit yet\n    var finished = needFinish(state);\n\n    if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {\n      clearBuffer(stream, state);\n    }\n\n    if (sync) {\n      /*<replacement>*/\n      asyncWrite(afterWrite, stream, state, finished, cb);\n      /*</replacement>*/\n    } else {\n      afterWrite(stream, state, finished, cb);\n    }\n  }\n}\n\nfunction afterWrite(stream, state, finished, cb) {\n  if (!finished) onwriteDrain(stream, state);\n  state.pendingcb--;\n  cb();\n  finishMaybe(stream, state);\n}\n\n// Must force callback to be called on nextTick, so that we don't\n// emit 'drain' before the write() consumer gets the 'false' return\n// value, and has a chance to attach a 'drain' listener.\nfunction onwriteDrain(stream, state) {\n  if (state.length === 0 && state.needDrain) {\n    state.needDrain = false;\n    stream.emit('drain');\n  }\n}\n\n// if there's something in the buffer waiting, then process it\nfunction clearBuffer(stream, state) {\n  state.bufferProcessing = true;\n  var entry = state.bufferedRequest;\n\n  if (stream._writev && entry && entry.next) {\n    // Fast case, write everything using _writev()\n    var l = state.bufferedRequestCount;\n    var buffer = new Array(l);\n    var holder = state.corkedRequestsFree;\n    holder.entry = entry;\n\n    var count = 0;\n    var allBuffers = true;\n    while (entry) {\n      buffer[count] = entry;\n      if (!entry.isBuf) allBuffers = false;\n      entry = entry.next;\n      count += 1;\n    }\n    buffer.allBuffers = allBuffers;\n\n    doWrite(stream, state, true, state.length, buffer, '', holder.finish);\n\n    // doWrite is almost always async, defer these to save a bit of time\n    // as the hot path ends with doWrite\n    state.pendingcb++;\n    state.lastBufferedRequest = null;\n    if (holder.next) {\n      state.corkedRequestsFree = holder.next;\n      holder.next = null;\n    } else {\n      state.corkedRequestsFree = new CorkedRequest(state);\n    }\n    state.bufferedRequestCount = 0;\n  } else {\n    // Slow case, write chunks one-by-one\n    while (entry) {\n      var chunk = entry.chunk;\n      var encoding = entry.encoding;\n      var cb = entry.callback;\n      var len = state.objectMode ? 1 : chunk.length;\n\n      doWrite(stream, state, false, len, chunk, encoding, cb);\n      entry = entry.next;\n      state.bufferedRequestCount--;\n      // if we didn't call the onwrite immediately, then\n      // it means that we need to wait until it does.\n      // also, that means that the chunk and cb are currently\n      // being processed, so move the buffer counter past them.\n      if (state.writing) {\n        break;\n      }\n    }\n\n    if (entry === null) state.lastBufferedRequest = null;\n  }\n\n  state.bufferedRequest = entry;\n  state.bufferProcessing = false;\n}\n\nWritable.prototype._write = function (chunk, encoding, cb) {\n  cb(new Error('_write() is not implemented'));\n};\n\nWritable.prototype._writev = null;\n\nWritable.prototype.end = function (chunk, encoding, cb) {\n  var state = this._writableState;\n\n  if (typeof chunk === 'function') {\n    cb = chunk;\n    chunk = null;\n    encoding = null;\n  } else if (typeof encoding === 'function') {\n    cb = encoding;\n    encoding = null;\n  }\n\n  if (chunk !== null && chunk !== undefined) this.write(chunk, encoding);\n\n  // .end() fully uncorks\n  if (state.corked) {\n    state.corked = 1;\n    this.uncork();\n  }\n\n  // ignore unnecessary end() calls.\n  if (!state.ending) endWritable(this, state, cb);\n};\n\nfunction needFinish(state) {\n  return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;\n}\nfunction callFinal(stream, state) {\n  stream._final(function (err) {\n    state.pendingcb--;\n    if (err) {\n      stream.emit('error', err);\n    }\n    state.prefinished = true;\n    stream.emit('prefinish');\n    finishMaybe(stream, state);\n  });\n}\nfunction prefinish(stream, state) {\n  if (!state.prefinished && !state.finalCalled) {\n    if (typeof stream._final === 'function') {\n      state.pendingcb++;\n      state.finalCalled = true;\n      pna.nextTick(callFinal, stream, state);\n    } else {\n      state.prefinished = true;\n      stream.emit('prefinish');\n    }\n  }\n}\n\nfunction finishMaybe(stream, state) {\n  var need = needFinish(state);\n  if (need) {\n    prefinish(stream, state);\n    if (state.pendingcb === 0) {\n      state.finished = true;\n      stream.emit('finish');\n    }\n  }\n  return need;\n}\n\nfunction endWritable(stream, state, cb) {\n  state.ending = true;\n  finishMaybe(stream, state);\n  if (cb) {\n    if (state.finished) pna.nextTick(cb);else stream.once('finish', cb);\n  }\n  state.ended = true;\n  stream.writable = false;\n}\n\nfunction onCorkedFinish(corkReq, state, err) {\n  var entry = corkReq.entry;\n  corkReq.entry = null;\n  while (entry) {\n    var cb = entry.callback;\n    state.pendingcb--;\n    cb(err);\n    entry = entry.next;\n  }\n\n  // reuse the free corkReq.\n  state.corkedRequestsFree.next = corkReq;\n}\n\nObject.defineProperty(Writable.prototype, 'destroyed', {\n  get: function () {\n    if (this._writableState === undefined) {\n      return false;\n    }\n    return this._writableState.destroyed;\n  },\n  set: function (value) {\n    // we ignore the value if the stream\n    // has not been initialized yet\n    if (!this._writableState) {\n      return;\n    }\n\n    // backward compatibility, the user is explicitly\n    // managing destroyed\n    this._writableState.destroyed = value;\n  }\n});\n\nWritable.prototype.destroy = destroyImpl.destroy;\nWritable.prototype._undestroy = destroyImpl.undestroy;\nWritable.prototype._destroy = function (err, cb) {\n  this.end();\n  cb(err);\n};","'use strict';\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar Buffer = require('safe-buffer').Buffer;\nvar util = require('util');\n\nfunction copyBuffer(src, target, offset) {\n  src.copy(target, offset);\n}\n\nmodule.exports = function () {\n  function BufferList() {\n    _classCallCheck(this, BufferList);\n\n    this.head = null;\n    this.tail = null;\n    this.length = 0;\n  }\n\n  BufferList.prototype.push = function push(v) {\n    var entry = { data: v, next: null };\n    if (this.length > 0) this.tail.next = entry;else this.head = entry;\n    this.tail = entry;\n    ++this.length;\n  };\n\n  BufferList.prototype.unshift = function unshift(v) {\n    var entry = { data: v, next: this.head };\n    if (this.length === 0) this.tail = entry;\n    this.head = entry;\n    ++this.length;\n  };\n\n  BufferList.prototype.shift = function shift() {\n    if (this.length === 0) return;\n    var ret = this.head.data;\n    if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;\n    --this.length;\n    return ret;\n  };\n\n  BufferList.prototype.clear = function clear() {\n    this.head = this.tail = null;\n    this.length = 0;\n  };\n\n  BufferList.prototype.join = function join(s) {\n    if (this.length === 0) return '';\n    var p = this.head;\n    var ret = '' + p.data;\n    while (p = p.next) {\n      ret += s + p.data;\n    }return ret;\n  };\n\n  BufferList.prototype.concat = function concat(n) {\n    if (this.length === 0) return Buffer.alloc(0);\n    var ret = Buffer.allocUnsafe(n >>> 0);\n    var p = this.head;\n    var i = 0;\n    while (p) {\n      copyBuffer(p.data, ret, i);\n      i += p.data.length;\n      p = p.next;\n    }\n    return ret;\n  };\n\n  return BufferList;\n}();\n\nif (util && util.inspect && util.inspect.custom) {\n  module.exports.prototype[util.inspect.custom] = function () {\n    var obj = util.inspect({ length: this.length });\n    return this.constructor.name + ' ' + obj;\n  };\n}","'use strict';\n\n/*<replacement>*/\n\nvar pna = require('process-nextick-args');\n/*</replacement>*/\n\n// undocumented cb() API, needed for core, not for public API\nfunction destroy(err, cb) {\n  var _this = this;\n\n  var readableDestroyed = this._readableState && this._readableState.destroyed;\n  var writableDestroyed = this._writableState && this._writableState.destroyed;\n\n  if (readableDestroyed || writableDestroyed) {\n    if (cb) {\n      cb(err);\n    } else if (err) {\n      if (!this._writableState) {\n        pna.nextTick(emitErrorNT, this, err);\n      } else if (!this._writableState.errorEmitted) {\n        this._writableState.errorEmitted = true;\n        pna.nextTick(emitErrorNT, this, err);\n      }\n    }\n\n    return this;\n  }\n\n  // we set destroyed to true before firing error callbacks in order\n  // to make it re-entrance safe in case destroy() is called within callbacks\n\n  if (this._readableState) {\n    this._readableState.destroyed = true;\n  }\n\n  // if this is a duplex stream mark the writable part as destroyed as well\n  if (this._writableState) {\n    this._writableState.destroyed = true;\n  }\n\n  this._destroy(err || null, function (err) {\n    if (!cb && err) {\n      if (!_this._writableState) {\n        pna.nextTick(emitErrorNT, _this, err);\n      } else if (!_this._writableState.errorEmitted) {\n        _this._writableState.errorEmitted = true;\n        pna.nextTick(emitErrorNT, _this, err);\n      }\n    } else if (cb) {\n      cb(err);\n    }\n  });\n\n  return this;\n}\n\nfunction undestroy() {\n  if (this._readableState) {\n    this._readableState.destroyed = false;\n    this._readableState.reading = false;\n    this._readableState.ended = false;\n    this._readableState.endEmitted = false;\n  }\n\n  if (this._writableState) {\n    this._writableState.destroyed = false;\n    this._writableState.ended = false;\n    this._writableState.ending = false;\n    this._writableState.finalCalled = false;\n    this._writableState.prefinished = false;\n    this._writableState.finished = false;\n    this._writableState.errorEmitted = false;\n  }\n}\n\nfunction emitErrorNT(self, err) {\n  self.emit('error', err);\n}\n\nmodule.exports = {\n  destroy: destroy,\n  undestroy: undestroy\n};","module.exports = require('events').EventEmitter;\n","/* eslint-disable node/no-deprecated-api */\nvar buffer = require('buffer')\nvar Buffer = buffer.Buffer\n\n// alternative to using Object.keys for old browsers\nfunction copyProps (src, dst) {\n  for (var key in src) {\n    dst[key] = src[key]\n  }\n}\nif (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {\n  module.exports = buffer\n} else {\n  // Copy properties from require('buffer')\n  copyProps(buffer, exports)\n  exports.Buffer = SafeBuffer\n}\n\nfunction SafeBuffer (arg, encodingOrOffset, length) {\n  return Buffer(arg, encodingOrOffset, length)\n}\n\n// Copy static methods from Buffer\ncopyProps(Buffer, SafeBuffer)\n\nSafeBuffer.from = function (arg, encodingOrOffset, length) {\n  if (typeof arg === 'number') {\n    throw new TypeError('Argument must not be a number')\n  }\n  return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.alloc = function (size, fill, encoding) {\n  if (typeof size !== 'number') {\n    throw new TypeError('Argument must be a number')\n  }\n  var buf = Buffer(size)\n  if (fill !== undefined) {\n    if (typeof encoding === 'string') {\n      buf.fill(fill, encoding)\n    } else {\n      buf.fill(fill)\n    }\n  } else {\n    buf.fill(0)\n  }\n  return buf\n}\n\nSafeBuffer.allocUnsafe = function (size) {\n  if (typeof size !== 'number') {\n    throw new TypeError('Argument must be a number')\n  }\n  return Buffer(size)\n}\n\nSafeBuffer.allocUnsafeSlow = function (size) {\n  if (typeof size !== 'number') {\n    throw new TypeError('Argument must be a number')\n  }\n  return buffer.SlowBuffer(size)\n}\n","module.exports = require('./readable').PassThrough\n","exports = module.exports = require('./lib/_stream_readable.js');\nexports.Stream = exports;\nexports.Readable = exports;\nexports.Writable = require('./lib/_stream_writable.js');\nexports.Duplex = require('./lib/_stream_duplex.js');\nexports.Transform = require('./lib/_stream_transform.js');\nexports.PassThrough = require('./lib/_stream_passthrough.js');\n","module.exports = require('./readable').Transform\n","module.exports = require('./lib/_stream_writable.js');\n","/**\n * Copyright (c) 2014-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\nvar runtime = (function (exports) {\n  \"use strict\";\n\n  var Op = Object.prototype;\n  var hasOwn = Op.hasOwnProperty;\n  var defineProperty = Object.defineProperty || function (obj, key, desc) { obj[key] = desc.value; };\n  var undefined; // More compressible than void 0.\n  var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n  var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n  var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n  var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n  function define(obj, key, value) {\n    Object.defineProperty(obj, key, {\n      value: value,\n      enumerable: true,\n      configurable: true,\n      writable: true\n    });\n    return obj[key];\n  }\n  try {\n    // IE 8 has a broken Object.defineProperty that only works on DOM objects.\n    define({}, \"\");\n  } catch (err) {\n    define = function(obj, key, value) {\n      return obj[key] = value;\n    };\n  }\n\n  function wrap(innerFn, outerFn, self, tryLocsList) {\n    // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n    var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n    var generator = Object.create(protoGenerator.prototype);\n    var context = new Context(tryLocsList || []);\n\n    // The ._invoke method unifies the implementations of the .next,\n    // .throw, and .return methods.\n    defineProperty(generator, \"_invoke\", { value: makeInvokeMethod(innerFn, self, context) });\n\n    return generator;\n  }\n  exports.wrap = wrap;\n\n  // Try/catch helper to minimize deoptimizations. Returns a completion\n  // record like context.tryEntries[i].completion. This interface could\n  // have been (and was previously) designed to take a closure to be\n  // invoked without arguments, but in all the cases we care about we\n  // already have an existing method we want to call, so there's no need\n  // to create a new function object. We can even get away with assuming\n  // the method takes exactly one argument, since that happens to be true\n  // in every case, so we don't have to touch the arguments object. The\n  // only additional allocation required is the completion record, which\n  // has a stable shape and so hopefully should be cheap to allocate.\n  function tryCatch(fn, obj, arg) {\n    try {\n      return { type: \"normal\", arg: fn.call(obj, arg) };\n    } catch (err) {\n      return { type: \"throw\", arg: err };\n    }\n  }\n\n  var GenStateSuspendedStart = \"suspendedStart\";\n  var GenStateSuspendedYield = \"suspendedYield\";\n  var GenStateExecuting = \"executing\";\n  var GenStateCompleted = \"completed\";\n\n  // Returning this object from the innerFn has the same effect as\n  // breaking out of the dispatch switch statement.\n  var ContinueSentinel = {};\n\n  // Dummy constructor functions that we use as the .constructor and\n  // .constructor.prototype properties for functions that return Generator\n  // objects. For full spec compliance, you may wish to configure your\n  // minifier not to mangle the names of these two functions.\n  function Generator() {}\n  function GeneratorFunction() {}\n  function GeneratorFunctionPrototype() {}\n\n  // This is a polyfill for %IteratorPrototype% for environments that\n  // don't natively support it.\n  var IteratorPrototype = {};\n  define(IteratorPrototype, iteratorSymbol, function () {\n    return this;\n  });\n\n  var getProto = Object.getPrototypeOf;\n  var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n  if (NativeIteratorPrototype &&\n      NativeIteratorPrototype !== Op &&\n      hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n    // This environment has a native %IteratorPrototype%; use it instead\n    // of the polyfill.\n    IteratorPrototype = NativeIteratorPrototype;\n  }\n\n  var Gp = GeneratorFunctionPrototype.prototype =\n    Generator.prototype = Object.create(IteratorPrototype);\n  GeneratorFunction.prototype = GeneratorFunctionPrototype;\n  defineProperty(Gp, \"constructor\", { value: GeneratorFunctionPrototype, configurable: true });\n  defineProperty(\n    GeneratorFunctionPrototype,\n    \"constructor\",\n    { value: GeneratorFunction, configurable: true }\n  );\n  GeneratorFunction.displayName = define(\n    GeneratorFunctionPrototype,\n    toStringTagSymbol,\n    \"GeneratorFunction\"\n  );\n\n  // Helper for defining the .next, .throw, and .return methods of the\n  // Iterator interface in terms of a single ._invoke method.\n  function defineIteratorMethods(prototype) {\n    [\"next\", \"throw\", \"return\"].forEach(function(method) {\n      define(prototype, method, function(arg) {\n        return this._invoke(method, arg);\n      });\n    });\n  }\n\n  exports.isGeneratorFunction = function(genFun) {\n    var ctor = typeof genFun === \"function\" && genFun.constructor;\n    return ctor\n      ? ctor === GeneratorFunction ||\n        // For the native GeneratorFunction constructor, the best we can\n        // do is to check its .name property.\n        (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n      : false;\n  };\n\n  exports.mark = function(genFun) {\n    if (Object.setPrototypeOf) {\n      Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n    } else {\n      genFun.__proto__ = GeneratorFunctionPrototype;\n      define(genFun, toStringTagSymbol, \"GeneratorFunction\");\n    }\n    genFun.prototype = Object.create(Gp);\n    return genFun;\n  };\n\n  // Within the body of any async function, `await x` is transformed to\n  // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n  // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n  // meant to be awaited.\n  exports.awrap = function(arg) {\n    return { __await: arg };\n  };\n\n  function AsyncIterator(generator, PromiseImpl) {\n    function invoke(method, arg, resolve, reject) {\n      var record = tryCatch(generator[method], generator, arg);\n      if (record.type === \"throw\") {\n        reject(record.arg);\n      } else {\n        var result = record.arg;\n        var value = result.value;\n        if (value &&\n            typeof value === \"object\" &&\n            hasOwn.call(value, \"__await\")) {\n          return PromiseImpl.resolve(value.__await).then(function(value) {\n            invoke(\"next\", value, resolve, reject);\n          }, function(err) {\n            invoke(\"throw\", err, resolve, reject);\n          });\n        }\n\n        return PromiseImpl.resolve(value).then(function(unwrapped) {\n          // When a yielded Promise is resolved, its final value becomes\n          // the .value of the Promise<{value,done}> result for the\n          // current iteration.\n          result.value = unwrapped;\n          resolve(result);\n        }, function(error) {\n          // If a rejected Promise was yielded, throw the rejection back\n          // into the async generator function so it can be handled there.\n          return invoke(\"throw\", error, resolve, reject);\n        });\n      }\n    }\n\n    var previousPromise;\n\n    function enqueue(method, arg) {\n      function callInvokeWithMethodAndArg() {\n        return new PromiseImpl(function(resolve, reject) {\n          invoke(method, arg, resolve, reject);\n        });\n      }\n\n      return previousPromise =\n        // If enqueue has been called before, then we want to wait until\n        // all previous Promises have been resolved before calling invoke,\n        // so that results are always delivered in the correct order. If\n        // enqueue has not been called before, then it is important to\n        // call invoke immediately, without waiting on a callback to fire,\n        // so that the async generator function has the opportunity to do\n        // any necessary setup in a predictable way. This predictability\n        // is why the Promise constructor synchronously invokes its\n        // executor callback, and why async functions synchronously\n        // execute code before the first await. Since we implement simple\n        // async functions in terms of async generators, it is especially\n        // important to get this right, even though it requires care.\n        previousPromise ? previousPromise.then(\n          callInvokeWithMethodAndArg,\n          // Avoid propagating failures to Promises returned by later\n          // invocations of the iterator.\n          callInvokeWithMethodAndArg\n        ) : callInvokeWithMethodAndArg();\n    }\n\n    // Define the unified helper method that is used to implement .next,\n    // .throw, and .return (see defineIteratorMethods).\n    defineProperty(this, \"_invoke\", { value: enqueue });\n  }\n\n  defineIteratorMethods(AsyncIterator.prototype);\n  define(AsyncIterator.prototype, asyncIteratorSymbol, function () {\n    return this;\n  });\n  exports.AsyncIterator = AsyncIterator;\n\n  // Note that simple async functions are implemented on top of\n  // AsyncIterator objects; they just return a Promise for the value of\n  // the final result produced by the iterator.\n  exports.async = function(innerFn, outerFn, self, tryLocsList, PromiseImpl) {\n    if (PromiseImpl === void 0) PromiseImpl = Promise;\n\n    var iter = new AsyncIterator(\n      wrap(innerFn, outerFn, self, tryLocsList),\n      PromiseImpl\n    );\n\n    return exports.isGeneratorFunction(outerFn)\n      ? iter // If outerFn is a generator, return the full iterator.\n      : iter.next().then(function(result) {\n          return result.done ? result.value : iter.next();\n        });\n  };\n\n  function makeInvokeMethod(innerFn, self, context) {\n    var state = GenStateSuspendedStart;\n\n    return function invoke(method, arg) {\n      if (state === GenStateExecuting) {\n        throw new Error(\"Generator is already running\");\n      }\n\n      if (state === GenStateCompleted) {\n        if (method === \"throw\") {\n          throw arg;\n        }\n\n        // Be forgiving, per 25.3.3.3.3 of the spec:\n        // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n        return doneResult();\n      }\n\n      context.method = method;\n      context.arg = arg;\n\n      while (true) {\n        var delegate = context.delegate;\n        if (delegate) {\n          var delegateResult = maybeInvokeDelegate(delegate, context);\n          if (delegateResult) {\n            if (delegateResult === ContinueSentinel) continue;\n            return delegateResult;\n          }\n        }\n\n        if (context.method === \"next\") {\n          // Setting context._sent for legacy support of Babel's\n          // function.sent implementation.\n          context.sent = context._sent = context.arg;\n\n        } else if (context.method === \"throw\") {\n          if (state === GenStateSuspendedStart) {\n            state = GenStateCompleted;\n            throw context.arg;\n          }\n\n          context.dispatchException(context.arg);\n\n        } else if (context.method === \"return\") {\n          context.abrupt(\"return\", context.arg);\n        }\n\n        state = GenStateExecuting;\n\n        var record = tryCatch(innerFn, self, context);\n        if (record.type === \"normal\") {\n          // If an exception is thrown from innerFn, we leave state ===\n          // GenStateExecuting and loop back for another invocation.\n          state = context.done\n            ? GenStateCompleted\n            : GenStateSuspendedYield;\n\n          if (record.arg === ContinueSentinel) {\n            continue;\n          }\n\n          return {\n            value: record.arg,\n            done: context.done\n          };\n\n        } else if (record.type === \"throw\") {\n          state = GenStateCompleted;\n          // Dispatch the exception by looping back around to the\n          // context.dispatchException(context.arg) call above.\n          context.method = \"throw\";\n          context.arg = record.arg;\n        }\n      }\n    };\n  }\n\n  // Call delegate.iterator[context.method](context.arg) and handle the\n  // result, either by returning a { value, done } result from the\n  // delegate iterator, or by modifying context.method and context.arg,\n  // setting context.delegate to null, and returning the ContinueSentinel.\n  function maybeInvokeDelegate(delegate, context) {\n    var methodName = context.method;\n    var method = delegate.iterator[methodName];\n    if (method === undefined) {\n      // A .throw or .return when the delegate iterator has no .throw\n      // method, or a missing .next mehtod, always terminate the\n      // yield* loop.\n      context.delegate = null;\n\n      // Note: [\"return\"] must be used for ES3 parsing compatibility.\n      if (methodName === \"throw\" && delegate.iterator[\"return\"]) {\n        // If the delegate iterator has a return method, give it a\n        // chance to clean up.\n        context.method = \"return\";\n        context.arg = undefined;\n        maybeInvokeDelegate(delegate, context);\n\n        if (context.method === \"throw\") {\n          // If maybeInvokeDelegate(context) changed context.method from\n          // \"return\" to \"throw\", let that override the TypeError below.\n          return ContinueSentinel;\n        }\n      }\n      if (methodName !== \"return\") {\n        context.method = \"throw\";\n        context.arg = new TypeError(\n          \"The iterator does not provide a '\" + methodName + \"' method\");\n      }\n\n      return ContinueSentinel;\n    }\n\n    var record = tryCatch(method, delegate.iterator, context.arg);\n\n    if (record.type === \"throw\") {\n      context.method = \"throw\";\n      context.arg = record.arg;\n      context.delegate = null;\n      return ContinueSentinel;\n    }\n\n    var info = record.arg;\n\n    if (! info) {\n      context.method = \"throw\";\n      context.arg = new TypeError(\"iterator result is not an object\");\n      context.delegate = null;\n      return ContinueSentinel;\n    }\n\n    if (info.done) {\n      // Assign the result of the finished delegate to the temporary\n      // variable specified by delegate.resultName (see delegateYield).\n      context[delegate.resultName] = info.value;\n\n      // Resume execution at the desired location (see delegateYield).\n      context.next = delegate.nextLoc;\n\n      // If context.method was \"throw\" but the delegate handled the\n      // exception, let the outer generator proceed normally. If\n      // context.method was \"next\", forget context.arg since it has been\n      // \"consumed\" by the delegate iterator. If context.method was\n      // \"return\", allow the original .return call to continue in the\n      // outer generator.\n      if (context.method !== \"return\") {\n        context.method = \"next\";\n        context.arg = undefined;\n      }\n\n    } else {\n      // Re-yield the result returned by the delegate method.\n      return info;\n    }\n\n    // The delegate iterator is finished, so forget it and continue with\n    // the outer generator.\n    context.delegate = null;\n    return ContinueSentinel;\n  }\n\n  // Define Generator.prototype.{next,throw,return} in terms of the\n  // unified ._invoke helper method.\n  defineIteratorMethods(Gp);\n\n  define(Gp, toStringTagSymbol, \"Generator\");\n\n  // A Generator should always return itself as the iterator object when the\n  // @@iterator function is called on it. Some browsers' implementations of the\n  // iterator prototype chain incorrectly implement this, causing the Generator\n  // object to not be returned from this call. This ensures that doesn't happen.\n  // See https://github.com/facebook/regenerator/issues/274 for more details.\n  define(Gp, iteratorSymbol, function() {\n    return this;\n  });\n\n  define(Gp, \"toString\", function() {\n    return \"[object Generator]\";\n  });\n\n  function pushTryEntry(locs) {\n    var entry = { tryLoc: locs[0] };\n\n    if (1 in locs) {\n      entry.catchLoc = locs[1];\n    }\n\n    if (2 in locs) {\n      entry.finallyLoc = locs[2];\n      entry.afterLoc = locs[3];\n    }\n\n    this.tryEntries.push(entry);\n  }\n\n  function resetTryEntry(entry) {\n    var record = entry.completion || {};\n    record.type = \"normal\";\n    delete record.arg;\n    entry.completion = record;\n  }\n\n  function Context(tryLocsList) {\n    // The root entry object (effectively a try statement without a catch\n    // or a finally block) gives us a place to store values thrown from\n    // locations where there is no enclosing try statement.\n    this.tryEntries = [{ tryLoc: \"root\" }];\n    tryLocsList.forEach(pushTryEntry, this);\n    this.reset(true);\n  }\n\n  exports.keys = function(val) {\n    var object = Object(val);\n    var keys = [];\n    for (var key in object) {\n      keys.push(key);\n    }\n    keys.reverse();\n\n    // Rather than returning an object with a next method, we keep\n    // things simple and return the next function itself.\n    return function next() {\n      while (keys.length) {\n        var key = keys.pop();\n        if (key in object) {\n          next.value = key;\n          next.done = false;\n          return next;\n        }\n      }\n\n      // To avoid creating an additional object, we just hang the .value\n      // and .done properties off the next function object itself. This\n      // also ensures that the minifier will not anonymize the function.\n      next.done = true;\n      return next;\n    };\n  };\n\n  function values(iterable) {\n    if (iterable) {\n      var iteratorMethod = iterable[iteratorSymbol];\n      if (iteratorMethod) {\n        return iteratorMethod.call(iterable);\n      }\n\n      if (typeof iterable.next === \"function\") {\n        return iterable;\n      }\n\n      if (!isNaN(iterable.length)) {\n        var i = -1, next = function next() {\n          while (++i < iterable.length) {\n            if (hasOwn.call(iterable, i)) {\n              next.value = iterable[i];\n              next.done = false;\n              return next;\n            }\n          }\n\n          next.value = undefined;\n          next.done = true;\n\n          return next;\n        };\n\n        return next.next = next;\n      }\n    }\n\n    // Return an iterator with no values.\n    return { next: doneResult };\n  }\n  exports.values = values;\n\n  function doneResult() {\n    return { value: undefined, done: true };\n  }\n\n  Context.prototype = {\n    constructor: Context,\n\n    reset: function(skipTempReset) {\n      this.prev = 0;\n      this.next = 0;\n      // Resetting context._sent for legacy support of Babel's\n      // function.sent implementation.\n      this.sent = this._sent = undefined;\n      this.done = false;\n      this.delegate = null;\n\n      this.method = \"next\";\n      this.arg = undefined;\n\n      this.tryEntries.forEach(resetTryEntry);\n\n      if (!skipTempReset) {\n        for (var name in this) {\n          // Not sure about the optimal order of these conditions:\n          if (name.charAt(0) === \"t\" &&\n              hasOwn.call(this, name) &&\n              !isNaN(+name.slice(1))) {\n            this[name] = undefined;\n          }\n        }\n      }\n    },\n\n    stop: function() {\n      this.done = true;\n\n      var rootEntry = this.tryEntries[0];\n      var rootRecord = rootEntry.completion;\n      if (rootRecord.type === \"throw\") {\n        throw rootRecord.arg;\n      }\n\n      return this.rval;\n    },\n\n    dispatchException: function(exception) {\n      if (this.done) {\n        throw exception;\n      }\n\n      var context = this;\n      function handle(loc, caught) {\n        record.type = \"throw\";\n        record.arg = exception;\n        context.next = loc;\n\n        if (caught) {\n          // If the dispatched exception was caught by a catch block,\n          // then let that catch block handle the exception normally.\n          context.method = \"next\";\n          context.arg = undefined;\n        }\n\n        return !! caught;\n      }\n\n      for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n        var entry = this.tryEntries[i];\n        var record = entry.completion;\n\n        if (entry.tryLoc === \"root\") {\n          // Exception thrown outside of any try block that could handle\n          // it, so set the completion value of the entire function to\n          // throw the exception.\n          return handle(\"end\");\n        }\n\n        if (entry.tryLoc <= this.prev) {\n          var hasCatch = hasOwn.call(entry, \"catchLoc\");\n          var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n          if (hasCatch && hasFinally) {\n            if (this.prev < entry.catchLoc) {\n              return handle(entry.catchLoc, true);\n            } else if (this.prev < entry.finallyLoc) {\n              return handle(entry.finallyLoc);\n            }\n\n          } else if (hasCatch) {\n            if (this.prev < entry.catchLoc) {\n              return handle(entry.catchLoc, true);\n            }\n\n          } else if (hasFinally) {\n            if (this.prev < entry.finallyLoc) {\n              return handle(entry.finallyLoc);\n            }\n\n          } else {\n            throw new Error(\"try statement without catch or finally\");\n          }\n        }\n      }\n    },\n\n    abrupt: function(type, arg) {\n      for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n        var entry = this.tryEntries[i];\n        if (entry.tryLoc <= this.prev &&\n            hasOwn.call(entry, \"finallyLoc\") &&\n            this.prev < entry.finallyLoc) {\n          var finallyEntry = entry;\n          break;\n        }\n      }\n\n      if (finallyEntry &&\n          (type === \"break\" ||\n           type === \"continue\") &&\n          finallyEntry.tryLoc <= arg &&\n          arg <= finallyEntry.finallyLoc) {\n        // Ignore the finally entry if control is not jumping to a\n        // location outside the try/catch block.\n        finallyEntry = null;\n      }\n\n      var record = finallyEntry ? finallyEntry.completion : {};\n      record.type = type;\n      record.arg = arg;\n\n      if (finallyEntry) {\n        this.method = \"next\";\n        this.next = finallyEntry.finallyLoc;\n        return ContinueSentinel;\n      }\n\n      return this.complete(record);\n    },\n\n    complete: function(record, afterLoc) {\n      if (record.type === \"throw\") {\n        throw record.arg;\n      }\n\n      if (record.type === \"break\" ||\n          record.type === \"continue\") {\n        this.next = record.arg;\n      } else if (record.type === \"return\") {\n        this.rval = this.arg = record.arg;\n        this.method = \"return\";\n        this.next = \"end\";\n      } else if (record.type === \"normal\" && afterLoc) {\n        this.next = afterLoc;\n      }\n\n      return ContinueSentinel;\n    },\n\n    finish: function(finallyLoc) {\n      for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n        var entry = this.tryEntries[i];\n        if (entry.finallyLoc === finallyLoc) {\n          this.complete(entry.completion, entry.afterLoc);\n          resetTryEntry(entry);\n          return ContinueSentinel;\n        }\n      }\n    },\n\n    \"catch\": function(tryLoc) {\n      for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n        var entry = this.tryEntries[i];\n        if (entry.tryLoc === tryLoc) {\n          var record = entry.completion;\n          if (record.type === \"throw\") {\n            var thrown = record.arg;\n            resetTryEntry(entry);\n          }\n          return thrown;\n        }\n      }\n\n      // The context.catch method must only be called with a location\n      // argument that corresponds to a known catch block.\n      throw new Error(\"illegal catch attempt\");\n    },\n\n    delegateYield: function(iterable, resultName, nextLoc) {\n      this.delegate = {\n        iterator: values(iterable),\n        resultName: resultName,\n        nextLoc: nextLoc\n      };\n\n      if (this.method === \"next\") {\n        // Deliberately forget the last sent value so that we don't\n        // accidentally pass it on to the delegate.\n        this.arg = undefined;\n      }\n\n      return ContinueSentinel;\n    }\n  };\n\n  // Regardless of whether this script is executing as a CommonJS module\n  // or not, return the runtime object so that we can declare the variable\n  // regeneratorRuntime in the outer scope, which allows this module to be\n  // injected easily by `bin/regenerator --include-runtime script.js`.\n  return exports;\n\n}(\n  // If this script is executing as a CommonJS module, use module.exports\n  // as the regeneratorRuntime namespace. Otherwise create a new empty\n  // object. Either way, the resulting object will be used to initialize\n  // the regeneratorRuntime variable at the top of this file.\n  typeof module === \"object\" ? module.exports : {}\n));\n\ntry {\n  regeneratorRuntime = runtime;\n} catch (accidentalStrictMode) {\n  // This module should not be running in strict mode, so the above\n  // assignment should always work unless something is misconfigured. Just\n  // in case runtime.js accidentally runs in strict mode, in modern engines\n  // we can explicitly access globalThis. In older engines we can escape\n  // strict mode using a global Function call. This could conceivably fail\n  // if a Content Security Policy forbids using Function, but in that case\n  // the proper solution is to fix the accidental strict mode problem. If\n  // you've misconfigured your bundler to force strict mode and applied a\n  // CSP to forbid Function, and you're not willing to fix either of those\n  // problems, please detail your unique predicament in a GitHub issue.\n  if (typeof globalThis === \"object\") {\n    globalThis.regeneratorRuntime = runtime;\n  } else {\n    Function(\"r\", \"regeneratorRuntime = r\")(runtime);\n  }\n}\n","'use strict'\nvar Buffer = require('buffer').Buffer\nvar inherits = require('inherits')\nvar HashBase = require('hash-base')\n\nvar ARRAY16 = new Array(16)\n\nvar zl = [\n  0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n  7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,\n  3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,\n  1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,\n  4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13\n]\n\nvar zr = [\n  5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,\n  6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,\n  15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,\n  8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,\n  12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11\n]\n\nvar sl = [\n  11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,\n  7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,\n  11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,\n  11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,\n  9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6\n]\n\nvar sr = [\n  8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,\n  9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,\n  9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,\n  15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,\n  8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11\n]\n\nvar hl = [0x00000000, 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xa953fd4e]\nvar hr = [0x50a28be6, 0x5c4dd124, 0x6d703ef3, 0x7a6d76e9, 0x00000000]\n\nfunction RIPEMD160 () {\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  this._e = 0xc3d2e1f0\n}\n\ninherits(RIPEMD160, HashBase)\n\nRIPEMD160.prototype._update = function () {\n  var words = ARRAY16\n  for (var j = 0; j < 16; ++j) words[j] = this._block.readInt32LE(j * 4)\n\n  var al = this._a | 0\n  var bl = this._b | 0\n  var cl = this._c | 0\n  var dl = this._d | 0\n  var el = this._e | 0\n\n  var ar = this._a | 0\n  var br = this._b | 0\n  var cr = this._c | 0\n  var dr = this._d | 0\n  var er = this._e | 0\n\n  // computation\n  for (var i = 0; i < 80; i += 1) {\n    var tl\n    var tr\n    if (i < 16) {\n      tl = fn1(al, bl, cl, dl, el, words[zl[i]], hl[0], sl[i])\n      tr = fn5(ar, br, cr, dr, er, words[zr[i]], hr[0], sr[i])\n    } else if (i < 32) {\n      tl = fn2(al, bl, cl, dl, el, words[zl[i]], hl[1], sl[i])\n      tr = fn4(ar, br, cr, dr, er, words[zr[i]], hr[1], sr[i])\n    } else if (i < 48) {\n      tl = fn3(al, bl, cl, dl, el, words[zl[i]], hl[2], sl[i])\n      tr = fn3(ar, br, cr, dr, er, words[zr[i]], hr[2], sr[i])\n    } else if (i < 64) {\n      tl = fn4(al, bl, cl, dl, el, words[zl[i]], hl[3], sl[i])\n      tr = fn2(ar, br, cr, dr, er, words[zr[i]], hr[3], sr[i])\n    } else { // if (i<80) {\n      tl = fn5(al, bl, cl, dl, el, words[zl[i]], hl[4], sl[i])\n      tr = fn1(ar, br, cr, dr, er, words[zr[i]], hr[4], sr[i])\n    }\n\n    al = el\n    el = dl\n    dl = rotl(cl, 10)\n    cl = bl\n    bl = tl\n\n    ar = er\n    er = dr\n    dr = rotl(cr, 10)\n    cr = br\n    br = tr\n  }\n\n  // update state\n  var t = (this._b + cl + dr) | 0\n  this._b = (this._c + dl + er) | 0\n  this._c = (this._d + el + ar) | 0\n  this._d = (this._e + al + br) | 0\n  this._e = (this._a + bl + cr) | 0\n  this._a = t\n}\n\nRIPEMD160.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.alloc ? Buffer.alloc(20) : new Buffer(20)\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  buffer.writeInt32LE(this._e, 16)\n  return buffer\n}\n\nfunction rotl (x, n) {\n  return (x << n) | (x >>> (32 - n))\n}\n\nfunction fn1 (a, b, c, d, e, m, k, s) {\n  return (rotl((a + (b ^ c ^ d) + m + k) | 0, s) + e) | 0\n}\n\nfunction fn2 (a, b, c, d, e, m, k, s) {\n  return (rotl((a + ((b & c) | ((~b) & d)) + m + k) | 0, s) + e) | 0\n}\n\nfunction fn3 (a, b, c, d, e, m, k, s) {\n  return (rotl((a + ((b | (~c)) ^ d) + m + k) | 0, s) + e) | 0\n}\n\nfunction fn4 (a, b, c, d, e, m, k, s) {\n  return (rotl((a + ((b & d) | (c & (~d))) + m + k) | 0, s) + e) | 0\n}\n\nfunction fn5 (a, b, c, d, e, m, k, s) {\n  return (rotl((a + (b ^ (c | (~d))) + m + k) | 0, s) + e) | 0\n}\n\nmodule.exports = RIPEMD160\n","/*! safe-buffer. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */\n/* eslint-disable node/no-deprecated-api */\nvar buffer = require('buffer')\nvar Buffer = buffer.Buffer\n\n// alternative to using Object.keys for old browsers\nfunction copyProps (src, dst) {\n  for (var key in src) {\n    dst[key] = src[key]\n  }\n}\nif (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {\n  module.exports = buffer\n} else {\n  // Copy properties from require('buffer')\n  copyProps(buffer, exports)\n  exports.Buffer = SafeBuffer\n}\n\nfunction SafeBuffer (arg, encodingOrOffset, length) {\n  return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.prototype = Object.create(Buffer.prototype)\n\n// Copy static methods from Buffer\ncopyProps(Buffer, SafeBuffer)\n\nSafeBuffer.from = function (arg, encodingOrOffset, length) {\n  if (typeof arg === 'number') {\n    throw new TypeError('Argument must not be a number')\n  }\n  return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.alloc = function (size, fill, encoding) {\n  if (typeof size !== 'number') {\n    throw new TypeError('Argument must be a number')\n  }\n  var buf = Buffer(size)\n  if (fill !== undefined) {\n    if (typeof encoding === 'string') {\n      buf.fill(fill, encoding)\n    } else {\n      buf.fill(fill)\n    }\n  } else {\n    buf.fill(0)\n  }\n  return buf\n}\n\nSafeBuffer.allocUnsafe = function (size) {\n  if (typeof size !== 'number') {\n    throw new TypeError('Argument must be a number')\n  }\n  return Buffer(size)\n}\n\nSafeBuffer.allocUnsafeSlow = function (size) {\n  if (typeof size !== 'number') {\n    throw new TypeError('Argument must be a number')\n  }\n  return buffer.SlowBuffer(size)\n}\n","var Buffer = require('safe-buffer').Buffer\n\n// prototype class for hash functions\nfunction Hash (blockSize, finalSize) {\n  this._block = Buffer.alloc(blockSize)\n  this._finalSize = finalSize\n  this._blockSize = blockSize\n  this._len = 0\n}\n\nHash.prototype.update = function (data, enc) {\n  if (typeof data === 'string') {\n    enc = enc || 'utf8'\n    data = Buffer.from(data, enc)\n  }\n\n  var block = this._block\n  var blockSize = this._blockSize\n  var length = data.length\n  var accum = this._len\n\n  for (var offset = 0; offset < length;) {\n    var assigned = accum % blockSize\n    var remainder = Math.min(length - offset, blockSize - assigned)\n\n    for (var i = 0; i < remainder; i++) {\n      block[assigned + i] = data[offset + i]\n    }\n\n    accum += remainder\n    offset += remainder\n\n    if ((accum % blockSize) === 0) {\n      this._update(block)\n    }\n  }\n\n  this._len += length\n  return this\n}\n\nHash.prototype.digest = function (enc) {\n  var rem = this._len % this._blockSize\n\n  this._block[rem] = 0x80\n\n  // zero (rem + 1) trailing bits, where (rem + 1) is the smallest\n  // non-negative solution to the equation (length + 1 + (rem + 1)) === finalSize mod blockSize\n  this._block.fill(0, rem + 1)\n\n  if (rem >= this._finalSize) {\n    this._update(this._block)\n    this._block.fill(0)\n  }\n\n  var bits = this._len * 8\n\n  // uint32\n  if (bits <= 0xffffffff) {\n    this._block.writeUInt32BE(bits, this._blockSize - 4)\n\n  // uint64\n  } else {\n    var lowBits = (bits & 0xffffffff) >>> 0\n    var highBits = (bits - lowBits) / 0x100000000\n\n    this._block.writeUInt32BE(highBits, this._blockSize - 8)\n    this._block.writeUInt32BE(lowBits, this._blockSize - 4)\n  }\n\n  this._update(this._block)\n  var hash = this._hash()\n\n  return enc ? hash.toString(enc) : hash\n}\n\nHash.prototype._update = function () {\n  throw new Error('_update must be implemented by subclass')\n}\n\nmodule.exports = Hash\n","var exports = module.exports = function SHA (algorithm) {\n  algorithm = algorithm.toLowerCase()\n\n  var Algorithm = exports[algorithm]\n  if (!Algorithm) throw new Error(algorithm + ' is not supported (we accept pull requests)')\n\n  return new Algorithm()\n}\n\nexports.sha = require('./sha')\nexports.sha1 = require('./sha1')\nexports.sha224 = require('./sha224')\nexports.sha256 = require('./sha256')\nexports.sha384 = require('./sha384')\nexports.sha512 = require('./sha512')\n","/*\n * A JavaScript implementation of the Secure Hash Algorithm, SHA-0, as defined\n * in FIPS PUB 180-1\n * This source code is derived from sha1.js of the same repository.\n * The difference between SHA-0 and SHA-1 is just a bitwise rotate left\n * operation was added.\n */\n\nvar inherits = require('inherits')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar K = [\n  0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0\n]\n\nvar W = new Array(80)\n\nfunction Sha () {\n  this.init()\n  this._w = W\n\n  Hash.call(this, 64, 56)\n}\n\ninherits(Sha, Hash)\n\nSha.prototype.init = function () {\n  this._a = 0x67452301\n  this._b = 0xefcdab89\n  this._c = 0x98badcfe\n  this._d = 0x10325476\n  this._e = 0xc3d2e1f0\n\n  return this\n}\n\nfunction rotl5 (num) {\n  return (num << 5) | (num >>> 27)\n}\n\nfunction rotl30 (num) {\n  return (num << 30) | (num >>> 2)\n}\n\nfunction ft (s, b, c, d) {\n  if (s === 0) return (b & c) | ((~b) & d)\n  if (s === 2) return (b & c) | (b & d) | (c & d)\n  return b ^ c ^ d\n}\n\nSha.prototype._update = function (M) {\n  var W = this._w\n\n  var a = this._a | 0\n  var b = this._b | 0\n  var c = this._c | 0\n  var d = this._d | 0\n  var e = this._e | 0\n\n  for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)\n  for (; i < 80; ++i) W[i] = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16]\n\n  for (var j = 0; j < 80; ++j) {\n    var s = ~~(j / 20)\n    var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0\n\n    e = d\n    d = c\n    c = rotl30(b)\n    b = a\n    a = t\n  }\n\n  this._a = (a + this._a) | 0\n  this._b = (b + this._b) | 0\n  this._c = (c + this._c) | 0\n  this._d = (d + this._d) | 0\n  this._e = (e + this._e) | 0\n}\n\nSha.prototype._hash = function () {\n  var H = Buffer.allocUnsafe(20)\n\n  H.writeInt32BE(this._a | 0, 0)\n  H.writeInt32BE(this._b | 0, 4)\n  H.writeInt32BE(this._c | 0, 8)\n  H.writeInt32BE(this._d | 0, 12)\n  H.writeInt32BE(this._e | 0, 16)\n\n  return H\n}\n\nmodule.exports = Sha\n","/*\n * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined\n * in FIPS PUB 180-1\n * Version 2.1a Copyright Paul Johnston 2000 - 2002.\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n * Distributed under the BSD License\n * See http://pajhome.org.uk/crypt/md5 for details.\n */\n\nvar inherits = require('inherits')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar K = [\n  0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0\n]\n\nvar W = new Array(80)\n\nfunction Sha1 () {\n  this.init()\n  this._w = W\n\n  Hash.call(this, 64, 56)\n}\n\ninherits(Sha1, Hash)\n\nSha1.prototype.init = function () {\n  this._a = 0x67452301\n  this._b = 0xefcdab89\n  this._c = 0x98badcfe\n  this._d = 0x10325476\n  this._e = 0xc3d2e1f0\n\n  return this\n}\n\nfunction rotl1 (num) {\n  return (num << 1) | (num >>> 31)\n}\n\nfunction rotl5 (num) {\n  return (num << 5) | (num >>> 27)\n}\n\nfunction rotl30 (num) {\n  return (num << 30) | (num >>> 2)\n}\n\nfunction ft (s, b, c, d) {\n  if (s === 0) return (b & c) | ((~b) & d)\n  if (s === 2) return (b & c) | (b & d) | (c & d)\n  return b ^ c ^ d\n}\n\nSha1.prototype._update = function (M) {\n  var W = this._w\n\n  var a = this._a | 0\n  var b = this._b | 0\n  var c = this._c | 0\n  var d = this._d | 0\n  var e = this._e | 0\n\n  for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)\n  for (; i < 80; ++i) W[i] = rotl1(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16])\n\n  for (var j = 0; j < 80; ++j) {\n    var s = ~~(j / 20)\n    var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0\n\n    e = d\n    d = c\n    c = rotl30(b)\n    b = a\n    a = t\n  }\n\n  this._a = (a + this._a) | 0\n  this._b = (b + this._b) | 0\n  this._c = (c + this._c) | 0\n  this._d = (d + this._d) | 0\n  this._e = (e + this._e) | 0\n}\n\nSha1.prototype._hash = function () {\n  var H = Buffer.allocUnsafe(20)\n\n  H.writeInt32BE(this._a | 0, 0)\n  H.writeInt32BE(this._b | 0, 4)\n  H.writeInt32BE(this._c | 0, 8)\n  H.writeInt32BE(this._d | 0, 12)\n  H.writeInt32BE(this._e | 0, 16)\n\n  return H\n}\n\nmodule.exports = Sha1\n","/**\n * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined\n * in FIPS 180-2\n * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n *\n */\n\nvar inherits = require('inherits')\nvar Sha256 = require('./sha256')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar W = new Array(64)\n\nfunction Sha224 () {\n  this.init()\n\n  this._w = W // new Array(64)\n\n  Hash.call(this, 64, 56)\n}\n\ninherits(Sha224, Sha256)\n\nSha224.prototype.init = function () {\n  this._a = 0xc1059ed8\n  this._b = 0x367cd507\n  this._c = 0x3070dd17\n  this._d = 0xf70e5939\n  this._e = 0xffc00b31\n  this._f = 0x68581511\n  this._g = 0x64f98fa7\n  this._h = 0xbefa4fa4\n\n  return this\n}\n\nSha224.prototype._hash = function () {\n  var H = Buffer.allocUnsafe(28)\n\n  H.writeInt32BE(this._a, 0)\n  H.writeInt32BE(this._b, 4)\n  H.writeInt32BE(this._c, 8)\n  H.writeInt32BE(this._d, 12)\n  H.writeInt32BE(this._e, 16)\n  H.writeInt32BE(this._f, 20)\n  H.writeInt32BE(this._g, 24)\n\n  return H\n}\n\nmodule.exports = Sha224\n","/**\n * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined\n * in FIPS 180-2\n * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n *\n */\n\nvar inherits = require('inherits')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar K = [\n  0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5,\n  0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5,\n  0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3,\n  0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174,\n  0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC,\n  0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA,\n  0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7,\n  0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967,\n  0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13,\n  0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85,\n  0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3,\n  0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070,\n  0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5,\n  0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3,\n  0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208,\n  0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2\n]\n\nvar W = new Array(64)\n\nfunction Sha256 () {\n  this.init()\n\n  this._w = W // new Array(64)\n\n  Hash.call(this, 64, 56)\n}\n\ninherits(Sha256, Hash)\n\nSha256.prototype.init = function () {\n  this._a = 0x6a09e667\n  this._b = 0xbb67ae85\n  this._c = 0x3c6ef372\n  this._d = 0xa54ff53a\n  this._e = 0x510e527f\n  this._f = 0x9b05688c\n  this._g = 0x1f83d9ab\n  this._h = 0x5be0cd19\n\n  return this\n}\n\nfunction ch (x, y, z) {\n  return z ^ (x & (y ^ z))\n}\n\nfunction maj (x, y, z) {\n  return (x & y) | (z & (x | y))\n}\n\nfunction sigma0 (x) {\n  return (x >>> 2 | x << 30) ^ (x >>> 13 | x << 19) ^ (x >>> 22 | x << 10)\n}\n\nfunction sigma1 (x) {\n  return (x >>> 6 | x << 26) ^ (x >>> 11 | x << 21) ^ (x >>> 25 | x << 7)\n}\n\nfunction gamma0 (x) {\n  return (x >>> 7 | x << 25) ^ (x >>> 18 | x << 14) ^ (x >>> 3)\n}\n\nfunction gamma1 (x) {\n  return (x >>> 17 | x << 15) ^ (x >>> 19 | x << 13) ^ (x >>> 10)\n}\n\nSha256.prototype._update = function (M) {\n  var W = this._w\n\n  var a = this._a | 0\n  var b = this._b | 0\n  var c = this._c | 0\n  var d = this._d | 0\n  var e = this._e | 0\n  var f = this._f | 0\n  var g = this._g | 0\n  var h = this._h | 0\n\n  for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)\n  for (; i < 64; ++i) W[i] = (gamma1(W[i - 2]) + W[i - 7] + gamma0(W[i - 15]) + W[i - 16]) | 0\n\n  for (var j = 0; j < 64; ++j) {\n    var T1 = (h + sigma1(e) + ch(e, f, g) + K[j] + W[j]) | 0\n    var T2 = (sigma0(a) + maj(a, b, c)) | 0\n\n    h = g\n    g = f\n    f = e\n    e = (d + T1) | 0\n    d = c\n    c = b\n    b = a\n    a = (T1 + T2) | 0\n  }\n\n  this._a = (a + this._a) | 0\n  this._b = (b + this._b) | 0\n  this._c = (c + this._c) | 0\n  this._d = (d + this._d) | 0\n  this._e = (e + this._e) | 0\n  this._f = (f + this._f) | 0\n  this._g = (g + this._g) | 0\n  this._h = (h + this._h) | 0\n}\n\nSha256.prototype._hash = function () {\n  var H = Buffer.allocUnsafe(32)\n\n  H.writeInt32BE(this._a, 0)\n  H.writeInt32BE(this._b, 4)\n  H.writeInt32BE(this._c, 8)\n  H.writeInt32BE(this._d, 12)\n  H.writeInt32BE(this._e, 16)\n  H.writeInt32BE(this._f, 20)\n  H.writeInt32BE(this._g, 24)\n  H.writeInt32BE(this._h, 28)\n\n  return H\n}\n\nmodule.exports = Sha256\n","var inherits = require('inherits')\nvar SHA512 = require('./sha512')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar W = new Array(160)\n\nfunction Sha384 () {\n  this.init()\n  this._w = W\n\n  Hash.call(this, 128, 112)\n}\n\ninherits(Sha384, SHA512)\n\nSha384.prototype.init = function () {\n  this._ah = 0xcbbb9d5d\n  this._bh = 0x629a292a\n  this._ch = 0x9159015a\n  this._dh = 0x152fecd8\n  this._eh = 0x67332667\n  this._fh = 0x8eb44a87\n  this._gh = 0xdb0c2e0d\n  this._hh = 0x47b5481d\n\n  this._al = 0xc1059ed8\n  this._bl = 0x367cd507\n  this._cl = 0x3070dd17\n  this._dl = 0xf70e5939\n  this._el = 0xffc00b31\n  this._fl = 0x68581511\n  this._gl = 0x64f98fa7\n  this._hl = 0xbefa4fa4\n\n  return this\n}\n\nSha384.prototype._hash = function () {\n  var H = Buffer.allocUnsafe(48)\n\n  function writeInt64BE (h, l, offset) {\n    H.writeInt32BE(h, offset)\n    H.writeInt32BE(l, offset + 4)\n  }\n\n  writeInt64BE(this._ah, this._al, 0)\n  writeInt64BE(this._bh, this._bl, 8)\n  writeInt64BE(this._ch, this._cl, 16)\n  writeInt64BE(this._dh, this._dl, 24)\n  writeInt64BE(this._eh, this._el, 32)\n  writeInt64BE(this._fh, this._fl, 40)\n\n  return H\n}\n\nmodule.exports = Sha384\n","var inherits = require('inherits')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar K = [\n  0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,\n  0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,\n  0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,\n  0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,\n  0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,\n  0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,\n  0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,\n  0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,\n  0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,\n  0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,\n  0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,\n  0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,\n  0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,\n  0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,\n  0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,\n  0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,\n  0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,\n  0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,\n  0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,\n  0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,\n  0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,\n  0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,\n  0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,\n  0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,\n  0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,\n  0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,\n  0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,\n  0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,\n  0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,\n  0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,\n  0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,\n  0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,\n  0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,\n  0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,\n  0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,\n  0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,\n  0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,\n  0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,\n  0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,\n  0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817\n]\n\nvar W = new Array(160)\n\nfunction Sha512 () {\n  this.init()\n  this._w = W\n\n  Hash.call(this, 128, 112)\n}\n\ninherits(Sha512, Hash)\n\nSha512.prototype.init = function () {\n  this._ah = 0x6a09e667\n  this._bh = 0xbb67ae85\n  this._ch = 0x3c6ef372\n  this._dh = 0xa54ff53a\n  this._eh = 0x510e527f\n  this._fh = 0x9b05688c\n  this._gh = 0x1f83d9ab\n  this._hh = 0x5be0cd19\n\n  this._al = 0xf3bcc908\n  this._bl = 0x84caa73b\n  this._cl = 0xfe94f82b\n  this._dl = 0x5f1d36f1\n  this._el = 0xade682d1\n  this._fl = 0x2b3e6c1f\n  this._gl = 0xfb41bd6b\n  this._hl = 0x137e2179\n\n  return this\n}\n\nfunction Ch (x, y, z) {\n  return z ^ (x & (y ^ z))\n}\n\nfunction maj (x, y, z) {\n  return (x & y) | (z & (x | y))\n}\n\nfunction sigma0 (x, xl) {\n  return (x >>> 28 | xl << 4) ^ (xl >>> 2 | x << 30) ^ (xl >>> 7 | x << 25)\n}\n\nfunction sigma1 (x, xl) {\n  return (x >>> 14 | xl << 18) ^ (x >>> 18 | xl << 14) ^ (xl >>> 9 | x << 23)\n}\n\nfunction Gamma0 (x, xl) {\n  return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7)\n}\n\nfunction Gamma0l (x, xl) {\n  return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7 | xl << 25)\n}\n\nfunction Gamma1 (x, xl) {\n  return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6)\n}\n\nfunction Gamma1l (x, xl) {\n  return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6 | xl << 26)\n}\n\nfunction getCarry (a, b) {\n  return (a >>> 0) < (b >>> 0) ? 1 : 0\n}\n\nSha512.prototype._update = function (M) {\n  var W = this._w\n\n  var ah = this._ah | 0\n  var bh = this._bh | 0\n  var ch = this._ch | 0\n  var dh = this._dh | 0\n  var eh = this._eh | 0\n  var fh = this._fh | 0\n  var gh = this._gh | 0\n  var hh = this._hh | 0\n\n  var al = this._al | 0\n  var bl = this._bl | 0\n  var cl = this._cl | 0\n  var dl = this._dl | 0\n  var el = this._el | 0\n  var fl = this._fl | 0\n  var gl = this._gl | 0\n  var hl = this._hl | 0\n\n  for (var i = 0; i < 32; i += 2) {\n    W[i] = M.readInt32BE(i * 4)\n    W[i + 1] = M.readInt32BE(i * 4 + 4)\n  }\n  for (; i < 160; i += 2) {\n    var xh = W[i - 15 * 2]\n    var xl = W[i - 15 * 2 + 1]\n    var gamma0 = Gamma0(xh, xl)\n    var gamma0l = Gamma0l(xl, xh)\n\n    xh = W[i - 2 * 2]\n    xl = W[i - 2 * 2 + 1]\n    var gamma1 = Gamma1(xh, xl)\n    var gamma1l = Gamma1l(xl, xh)\n\n    // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]\n    var Wi7h = W[i - 7 * 2]\n    var Wi7l = W[i - 7 * 2 + 1]\n\n    var Wi16h = W[i - 16 * 2]\n    var Wi16l = W[i - 16 * 2 + 1]\n\n    var Wil = (gamma0l + Wi7l) | 0\n    var Wih = (gamma0 + Wi7h + getCarry(Wil, gamma0l)) | 0\n    Wil = (Wil + gamma1l) | 0\n    Wih = (Wih + gamma1 + getCarry(Wil, gamma1l)) | 0\n    Wil = (Wil + Wi16l) | 0\n    Wih = (Wih + Wi16h + getCarry(Wil, Wi16l)) | 0\n\n    W[i] = Wih\n    W[i + 1] = Wil\n  }\n\n  for (var j = 0; j < 160; j += 2) {\n    Wih = W[j]\n    Wil = W[j + 1]\n\n    var majh = maj(ah, bh, ch)\n    var majl = maj(al, bl, cl)\n\n    var sigma0h = sigma0(ah, al)\n    var sigma0l = sigma0(al, ah)\n    var sigma1h = sigma1(eh, el)\n    var sigma1l = sigma1(el, eh)\n\n    // t1 = h + sigma1 + ch + K[j] + W[j]\n    var Kih = K[j]\n    var Kil = K[j + 1]\n\n    var chh = Ch(eh, fh, gh)\n    var chl = Ch(el, fl, gl)\n\n    var t1l = (hl + sigma1l) | 0\n    var t1h = (hh + sigma1h + getCarry(t1l, hl)) | 0\n    t1l = (t1l + chl) | 0\n    t1h = (t1h + chh + getCarry(t1l, chl)) | 0\n    t1l = (t1l + Kil) | 0\n    t1h = (t1h + Kih + getCarry(t1l, Kil)) | 0\n    t1l = (t1l + Wil) | 0\n    t1h = (t1h + Wih + getCarry(t1l, Wil)) | 0\n\n    // t2 = sigma0 + maj\n    var t2l = (sigma0l + majl) | 0\n    var t2h = (sigma0h + majh + getCarry(t2l, sigma0l)) | 0\n\n    hh = gh\n    hl = gl\n    gh = fh\n    gl = fl\n    fh = eh\n    fl = el\n    el = (dl + t1l) | 0\n    eh = (dh + t1h + getCarry(el, dl)) | 0\n    dh = ch\n    dl = cl\n    ch = bh\n    cl = bl\n    bh = ah\n    bl = al\n    al = (t1l + t2l) | 0\n    ah = (t1h + t2h + getCarry(al, t1l)) | 0\n  }\n\n  this._al = (this._al + al) | 0\n  this._bl = (this._bl + bl) | 0\n  this._cl = (this._cl + cl) | 0\n  this._dl = (this._dl + dl) | 0\n  this._el = (this._el + el) | 0\n  this._fl = (this._fl + fl) | 0\n  this._gl = (this._gl + gl) | 0\n  this._hl = (this._hl + hl) | 0\n\n  this._ah = (this._ah + ah + getCarry(this._al, al)) | 0\n  this._bh = (this._bh + bh + getCarry(this._bl, bl)) | 0\n  this._ch = (this._ch + ch + getCarry(this._cl, cl)) | 0\n  this._dh = (this._dh + dh + getCarry(this._dl, dl)) | 0\n  this._eh = (this._eh + eh + getCarry(this._el, el)) | 0\n  this._fh = (this._fh + fh + getCarry(this._fl, fl)) | 0\n  this._gh = (this._gh + gh + getCarry(this._gl, gl)) | 0\n  this._hh = (this._hh + hh + getCarry(this._hl, hl)) | 0\n}\n\nSha512.prototype._hash = function () {\n  var H = Buffer.allocUnsafe(64)\n\n  function writeInt64BE (h, l, offset) {\n    H.writeInt32BE(h, offset)\n    H.writeInt32BE(l, offset + 4)\n  }\n\n  writeInt64BE(this._ah, this._al, 0)\n  writeInt64BE(this._bh, this._bl, 8)\n  writeInt64BE(this._ch, this._cl, 16)\n  writeInt64BE(this._dh, this._dl, 24)\n  writeInt64BE(this._eh, this._el, 32)\n  writeInt64BE(this._fh, this._fl, 40)\n  writeInt64BE(this._gh, this._gl, 48)\n  writeInt64BE(this._hh, this._hl, 56)\n\n  return H\n}\n\nmodule.exports = Sha512\n","(function(root, factory) {\n    'use strict';\n    // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n    /* istanbul ignore next */\n    if (typeof define === 'function' && define.amd) {\n        define('stackframe', [], factory);\n    } else if (typeof exports === 'object') {\n        module.exports = factory();\n    } else {\n        root.StackFrame = factory();\n    }\n}(this, function() {\n    'use strict';\n    function _isNumber(n) {\n        return !isNaN(parseFloat(n)) && isFinite(n);\n    }\n\n    function _capitalize(str) {\n        return str.charAt(0).toUpperCase() + str.substring(1);\n    }\n\n    function _getter(p) {\n        return function() {\n            return this[p];\n        };\n    }\n\n    var booleanProps = ['isConstructor', 'isEval', 'isNative', 'isToplevel'];\n    var numericProps = ['columnNumber', 'lineNumber'];\n    var stringProps = ['fileName', 'functionName', 'source'];\n    var arrayProps = ['args'];\n    var objectProps = ['evalOrigin'];\n\n    var props = booleanProps.concat(numericProps, stringProps, arrayProps, objectProps);\n\n    function StackFrame(obj) {\n        if (!obj) return;\n        for (var i = 0; i < props.length; i++) {\n            if (obj[props[i]] !== undefined) {\n                this['set' + _capitalize(props[i])](obj[props[i]]);\n            }\n        }\n    }\n\n    StackFrame.prototype = {\n        getArgs: function() {\n            return this.args;\n        },\n        setArgs: function(v) {\n            if (Object.prototype.toString.call(v) !== '[object Array]') {\n                throw new TypeError('Args must be an Array');\n            }\n            this.args = v;\n        },\n\n        getEvalOrigin: function() {\n            return this.evalOrigin;\n        },\n        setEvalOrigin: function(v) {\n            if (v instanceof StackFrame) {\n                this.evalOrigin = v;\n            } else if (v instanceof Object) {\n                this.evalOrigin = new StackFrame(v);\n            } else {\n                throw new TypeError('Eval Origin must be an Object or StackFrame');\n            }\n        },\n\n        toString: function() {\n            var fileName = this.getFileName() || '';\n            var lineNumber = this.getLineNumber() || '';\n            var columnNumber = this.getColumnNumber() || '';\n            var functionName = this.getFunctionName() || '';\n            if (this.getIsEval()) {\n                if (fileName) {\n                    return '[eval] (' + fileName + ':' + lineNumber + ':' + columnNumber + ')';\n                }\n                return '[eval]:' + lineNumber + ':' + columnNumber;\n            }\n            if (functionName) {\n                return functionName + ' (' + fileName + ':' + lineNumber + ':' + columnNumber + ')';\n            }\n            return fileName + ':' + lineNumber + ':' + columnNumber;\n        }\n    };\n\n    StackFrame.fromString = function StackFrame$$fromString(str) {\n        var argsStartIndex = str.indexOf('(');\n        var argsEndIndex = str.lastIndexOf(')');\n\n        var functionName = str.substring(0, argsStartIndex);\n        var args = str.substring(argsStartIndex + 1, argsEndIndex).split(',');\n        var locationString = str.substring(argsEndIndex + 1);\n\n        if (locationString.indexOf('@') === 0) {\n            var parts = /@(.+?)(?::(\\d+))?(?::(\\d+))?$/.exec(locationString, '');\n            var fileName = parts[1];\n            var lineNumber = parts[2];\n            var columnNumber = parts[3];\n        }\n\n        return new StackFrame({\n            functionName: functionName,\n            args: args || undefined,\n            fileName: fileName,\n            lineNumber: lineNumber || undefined,\n            columnNumber: columnNumber || undefined\n        });\n    };\n\n    for (var i = 0; i < booleanProps.length; i++) {\n        StackFrame.prototype['get' + _capitalize(booleanProps[i])] = _getter(booleanProps[i]);\n        StackFrame.prototype['set' + _capitalize(booleanProps[i])] = (function(p) {\n            return function(v) {\n                this[p] = Boolean(v);\n            };\n        })(booleanProps[i]);\n    }\n\n    for (var j = 0; j < numericProps.length; j++) {\n        StackFrame.prototype['get' + _capitalize(numericProps[j])] = _getter(numericProps[j]);\n        StackFrame.prototype['set' + _capitalize(numericProps[j])] = (function(p) {\n            return function(v) {\n                if (!_isNumber(v)) {\n                    throw new TypeError(p + ' must be a Number');\n                }\n                this[p] = Number(v);\n            };\n        })(numericProps[j]);\n    }\n\n    for (var k = 0; k < stringProps.length; k++) {\n        StackFrame.prototype['get' + _capitalize(stringProps[k])] = _getter(stringProps[k]);\n        StackFrame.prototype['set' + _capitalize(stringProps[k])] = (function(p) {\n            return function(v) {\n                this[p] = String(v);\n            };\n        })(stringProps[k]);\n    }\n\n    return StackFrame;\n}));\n","(function (root, factory) {\n    'use strict';\n    // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n    /* istanbul ignore next */\n    if (typeof define === 'function' && define.amd) {\n        define('stack-generator', ['stackframe'], factory);\n    } else if (typeof exports === 'object') {\n        module.exports = factory(require('stackframe'));\n    } else {\n        root.StackGenerator = factory(root.StackFrame);\n    }\n}(this, function (StackFrame) {\n    return {\n        backtrace: function StackGenerator$$backtrace(opts) {\n            var stack = [];\n            var maxStackSize = 10;\n\n            if (typeof opts === 'object' && typeof opts.maxStackSize === 'number') {\n                maxStackSize = opts.maxStackSize;\n            }\n\n            var curr = arguments.callee;\n            while (curr && stack.length < maxStackSize) {\n                // Allow V8 optimizations\n                var args = new Array(curr['arguments'].length);\n                for(var i = 0; i < args.length; ++i) {\n                    args[i] = curr['arguments'][i];\n                }\n                if (/function(?:\\s+([\\w$]+))+\\s*\\(/.test(curr.toString())) {\n                    stack.push(new StackFrame({functionName: RegExp.$1 || undefined, args: args}));\n                } else {\n                    stack.push(new StackFrame({args: args}));\n                }\n\n                try {\n                    curr = curr.caller;\n                } catch (e) {\n                    break;\n                }\n            }\n            return stack;\n        }\n    };\n}));\n","(function (root, factory) {\n    'use strict';\n    // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n    /* istanbul ignore next */\n    if (typeof define === 'function' && define.amd) {\n        define('stackframe', [], factory);\n    } else if (typeof exports === 'object') {\n        module.exports = factory();\n    } else {\n        root.StackFrame = factory();\n    }\n}(this, function () {\n    'use strict';\n    function _isNumber(n) {\n        return !isNaN(parseFloat(n)) && isFinite(n);\n    }\n\n    function StackFrame(functionName, args, fileName, lineNumber, columnNumber, source) {\n        if (functionName !== undefined) {\n            this.setFunctionName(functionName);\n        }\n        if (args !== undefined) {\n            this.setArgs(args);\n        }\n        if (fileName !== undefined) {\n            this.setFileName(fileName);\n        }\n        if (lineNumber !== undefined) {\n            this.setLineNumber(lineNumber);\n        }\n        if (columnNumber !== undefined) {\n            this.setColumnNumber(columnNumber);\n        }\n        if (source !== undefined) {\n            this.setSource(source);\n        }\n    }\n\n    StackFrame.prototype = {\n        getFunctionName: function () {\n            return this.functionName;\n        },\n        setFunctionName: function (v) {\n            this.functionName = String(v);\n        },\n\n        getArgs: function () {\n            return this.args;\n        },\n        setArgs: function (v) {\n            if (Object.prototype.toString.call(v) !== '[object Array]') {\n                throw new TypeError('Args must be an Array');\n            }\n            this.args = v;\n        },\n\n        // NOTE: Property name may be misleading as it includes the path,\n        // but it somewhat mirrors V8's JavaScriptStackTraceApi\n        // https://code.google.com/p/v8/wiki/JavaScriptStackTraceApi and Gecko's\n        // http://mxr.mozilla.org/mozilla-central/source/xpcom/base/nsIException.idl#14\n        getFileName: function () {\n            return this.fileName;\n        },\n        setFileName: function (v) {\n            this.fileName = String(v);\n        },\n\n        getLineNumber: function () {\n            return this.lineNumber;\n        },\n        setLineNumber: function (v) {\n            if (!_isNumber(v)) {\n                throw new TypeError('Line Number must be a Number');\n            }\n            this.lineNumber = Number(v);\n        },\n\n        getColumnNumber: function () {\n            return this.columnNumber;\n        },\n        setColumnNumber: function (v) {\n            if (!_isNumber(v)) {\n                throw new TypeError('Column Number must be a Number');\n            }\n            this.columnNumber = Number(v);\n        },\n\n        getSource: function () {\n            return this.source;\n        },\n        setSource: function (v) {\n            this.source = String(v);\n        },\n\n        toString: function() {\n            var functionName = this.getFunctionName() || '{anonymous}';\n            var args = '(' + (this.getArgs() || []).join(',') + ')';\n            var fileName = this.getFileName() ? ('@' + this.getFileName()) : '';\n            var lineNumber = _isNumber(this.getLineNumber()) ? (':' + this.getLineNumber()) : '';\n            var columnNumber = _isNumber(this.getColumnNumber()) ? (':' + this.getColumnNumber()) : '';\n            return functionName + args + fileName + lineNumber + columnNumber;\n        }\n    };\n\n    return StackFrame;\n}));\n","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar util = require('./util');\nvar has = Object.prototype.hasOwnProperty;\n\n/**\n * A data structure which is a combination of an array and a set. Adding a new\n * member is O(1), testing for membership is O(1), and finding the index of an\n * element is O(1). Removing elements from the set is not supported. Only\n * strings are supported for membership.\n */\nfunction ArraySet() {\n  this._array = [];\n  this._set = Object.create(null);\n}\n\n/**\n * Static method for creating ArraySet instances from an existing array.\n */\nArraySet.fromArray = function ArraySet_fromArray(aArray, aAllowDuplicates) {\n  var set = new ArraySet();\n  for (var i = 0, len = aArray.length; i < len; i++) {\n    set.add(aArray[i], aAllowDuplicates);\n  }\n  return set;\n};\n\n/**\n * Return how many unique items are in this ArraySet. If duplicates have been\n * added, than those do not count towards the size.\n *\n * @returns Number\n */\nArraySet.prototype.size = function ArraySet_size() {\n  return Object.getOwnPropertyNames(this._set).length;\n};\n\n/**\n * Add the given string to this set.\n *\n * @param String aStr\n */\nArraySet.prototype.add = function ArraySet_add(aStr, aAllowDuplicates) {\n  var sStr = util.toSetString(aStr);\n  var isDuplicate = has.call(this._set, sStr);\n  var idx = this._array.length;\n  if (!isDuplicate || aAllowDuplicates) {\n    this._array.push(aStr);\n  }\n  if (!isDuplicate) {\n    this._set[sStr] = idx;\n  }\n};\n\n/**\n * Is the given string a member of this set?\n *\n * @param String aStr\n */\nArraySet.prototype.has = function ArraySet_has(aStr) {\n  var sStr = util.toSetString(aStr);\n  return has.call(this._set, sStr);\n};\n\n/**\n * What is the index of the given string in the array?\n *\n * @param String aStr\n */\nArraySet.prototype.indexOf = function ArraySet_indexOf(aStr) {\n  var sStr = util.toSetString(aStr);\n  if (has.call(this._set, sStr)) {\n    return this._set[sStr];\n  }\n  throw new Error('\"' + aStr + '\" is not in the set.');\n};\n\n/**\n * What is the element at the given index?\n *\n * @param Number aIdx\n */\nArraySet.prototype.at = function ArraySet_at(aIdx) {\n  if (aIdx >= 0 && aIdx < this._array.length) {\n    return this._array[aIdx];\n  }\n  throw new Error('No element indexed by ' + aIdx);\n};\n\n/**\n * Returns the array representation of this set (which has the proper indices\n * indicated by indexOf). Note that this is a copy of the internal array used\n * for storing the members so that no one can mess with internal state.\n */\nArraySet.prototype.toArray = function ArraySet_toArray() {\n  return this._array.slice();\n};\n\nexports.ArraySet = ArraySet;\n","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n *\n * Based on the Base 64 VLQ implementation in Closure Compiler:\n * https://code.google.com/p/closure-compiler/source/browse/trunk/src/com/google/debugging/sourcemap/Base64VLQ.java\n *\n * Copyright 2011 The Closure Compiler Authors. All rights reserved.\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n *  * Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n *  * Redistributions in binary form must reproduce the above\n *    copyright notice, this list of conditions and the following\n *    disclaimer in the documentation and/or other materials provided\n *    with the distribution.\n *  * Neither the name of Google Inc. nor the names of its\n *    contributors may be used to endorse or promote products derived\n *    from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\nvar base64 = require('./base64');\n\n// A single base 64 digit can contain 6 bits of data. For the base 64 variable\n// length quantities we use in the source map spec, the first bit is the sign,\n// the next four bits are the actual value, and the 6th bit is the\n// continuation bit. The continuation bit tells us whether there are more\n// digits in this value following this digit.\n//\n//   Continuation\n//   |    Sign\n//   |    |\n//   V    V\n//   101011\n\nvar VLQ_BASE_SHIFT = 5;\n\n// binary: 100000\nvar VLQ_BASE = 1 << VLQ_BASE_SHIFT;\n\n// binary: 011111\nvar VLQ_BASE_MASK = VLQ_BASE - 1;\n\n// binary: 100000\nvar VLQ_CONTINUATION_BIT = VLQ_BASE;\n\n/**\n * Converts from a two-complement value to a value where the sign bit is\n * placed in the least significant bit.  For example, as decimals:\n *   1 becomes 2 (10 binary), -1 becomes 3 (11 binary)\n *   2 becomes 4 (100 binary), -2 becomes 5 (101 binary)\n */\nfunction toVLQSigned(aValue) {\n  return aValue < 0\n    ? ((-aValue) << 1) + 1\n    : (aValue << 1) + 0;\n}\n\n/**\n * Converts to a two-complement value from a value where the sign bit is\n * placed in the least significant bit.  For example, as decimals:\n *   2 (10 binary) becomes 1, 3 (11 binary) becomes -1\n *   4 (100 binary) becomes 2, 5 (101 binary) becomes -2\n */\nfunction fromVLQSigned(aValue) {\n  var isNegative = (aValue & 1) === 1;\n  var shifted = aValue >> 1;\n  return isNegative\n    ? -shifted\n    : shifted;\n}\n\n/**\n * Returns the base 64 VLQ encoded value.\n */\nexports.encode = function base64VLQ_encode(aValue) {\n  var encoded = \"\";\n  var digit;\n\n  var vlq = toVLQSigned(aValue);\n\n  do {\n    digit = vlq & VLQ_BASE_MASK;\n    vlq >>>= VLQ_BASE_SHIFT;\n    if (vlq > 0) {\n      // There are still more digits in this value, so we must make sure the\n      // continuation bit is marked.\n      digit |= VLQ_CONTINUATION_BIT;\n    }\n    encoded += base64.encode(digit);\n  } while (vlq > 0);\n\n  return encoded;\n};\n\n/**\n * Decodes the next base 64 VLQ value from the given string and returns the\n * value and the rest of the string via the out parameter.\n */\nexports.decode = function base64VLQ_decode(aStr, aIndex, aOutParam) {\n  var strLen = aStr.length;\n  var result = 0;\n  var shift = 0;\n  var continuation, digit;\n\n  do {\n    if (aIndex >= strLen) {\n      throw new Error(\"Expected more digits in base 64 VLQ value.\");\n    }\n\n    digit = base64.decode(aStr.charCodeAt(aIndex++));\n    if (digit === -1) {\n      throw new Error(\"Invalid base64 digit: \" + aStr.charAt(aIndex - 1));\n    }\n\n    continuation = !!(digit & VLQ_CONTINUATION_BIT);\n    digit &= VLQ_BASE_MASK;\n    result = result + (digit << shift);\n    shift += VLQ_BASE_SHIFT;\n  } while (continuation);\n\n  aOutParam.value = fromVLQSigned(result);\n  aOutParam.rest = aIndex;\n};\n","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar intToCharMap = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split('');\n\n/**\n * Encode an integer in the range of 0 to 63 to a single base 64 digit.\n */\nexports.encode = function (number) {\n  if (0 <= number && number < intToCharMap.length) {\n    return intToCharMap[number];\n  }\n  throw new TypeError(\"Must be between 0 and 63: \" + number);\n};\n\n/**\n * Decode a single base 64 character code digit to an integer. Returns -1 on\n * failure.\n */\nexports.decode = function (charCode) {\n  var bigA = 65;     // 'A'\n  var bigZ = 90;     // 'Z'\n\n  var littleA = 97;  // 'a'\n  var littleZ = 122; // 'z'\n\n  var zero = 48;     // '0'\n  var nine = 57;     // '9'\n\n  var plus = 43;     // '+'\n  var slash = 47;    // '/'\n\n  var littleOffset = 26;\n  var numberOffset = 52;\n\n  // 0 - 25: ABCDEFGHIJKLMNOPQRSTUVWXYZ\n  if (bigA <= charCode && charCode <= bigZ) {\n    return (charCode - bigA);\n  }\n\n  // 26 - 51: abcdefghijklmnopqrstuvwxyz\n  if (littleA <= charCode && charCode <= littleZ) {\n    return (charCode - littleA + littleOffset);\n  }\n\n  // 52 - 61: 0123456789\n  if (zero <= charCode && charCode <= nine) {\n    return (charCode - zero + numberOffset);\n  }\n\n  // 62: +\n  if (charCode == plus) {\n    return 62;\n  }\n\n  // 63: /\n  if (charCode == slash) {\n    return 63;\n  }\n\n  // Invalid base64 digit.\n  return -1;\n};\n","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nexports.GREATEST_LOWER_BOUND = 1;\nexports.LEAST_UPPER_BOUND = 2;\n\n/**\n * Recursive implementation of binary search.\n *\n * @param aLow Indices here and lower do not contain the needle.\n * @param aHigh Indices here and higher do not contain the needle.\n * @param aNeedle The element being searched for.\n * @param aHaystack The non-empty array being searched.\n * @param aCompare Function which takes two elements and returns -1, 0, or 1.\n * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or\n *     'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the\n *     closest element that is smaller than or greater than the one we are\n *     searching for, respectively, if the exact element cannot be found.\n */\nfunction recursiveSearch(aLow, aHigh, aNeedle, aHaystack, aCompare, aBias) {\n  // This function terminates when one of the following is true:\n  //\n  //   1. We find the exact element we are looking for.\n  //\n  //   2. We did not find the exact element, but we can return the index of\n  //      the next-closest element.\n  //\n  //   3. We did not find the exact element, and there is no next-closest\n  //      element than the one we are searching for, so we return -1.\n  var mid = Math.floor((aHigh - aLow) / 2) + aLow;\n  var cmp = aCompare(aNeedle, aHaystack[mid], true);\n  if (cmp === 0) {\n    // Found the element we are looking for.\n    return mid;\n  }\n  else if (cmp > 0) {\n    // Our needle is greater than aHaystack[mid].\n    if (aHigh - mid > 1) {\n      // The element is in the upper half.\n      return recursiveSearch(mid, aHigh, aNeedle, aHaystack, aCompare, aBias);\n    }\n\n    // The exact needle element was not found in this haystack. Determine if\n    // we are in termination case (3) or (2) and return the appropriate thing.\n    if (aBias == exports.LEAST_UPPER_BOUND) {\n      return aHigh < aHaystack.length ? aHigh : -1;\n    } else {\n      return mid;\n    }\n  }\n  else {\n    // Our needle is less than aHaystack[mid].\n    if (mid - aLow > 1) {\n      // The element is in the lower half.\n      return recursiveSearch(aLow, mid, aNeedle, aHaystack, aCompare, aBias);\n    }\n\n    // we are in termination case (3) or (2) and return the appropriate thing.\n    if (aBias == exports.LEAST_UPPER_BOUND) {\n      return mid;\n    } else {\n      return aLow < 0 ? -1 : aLow;\n    }\n  }\n}\n\n/**\n * This is an implementation of binary search which will always try and return\n * the index of the closest element if there is no exact hit. This is because\n * mappings between original and generated line/col pairs are single points,\n * and there is an implicit region between each of them, so a miss just means\n * that you aren't on the very start of a region.\n *\n * @param aNeedle The element you are looking for.\n * @param aHaystack The array that is being searched.\n * @param aCompare A function which takes the needle and an element in the\n *     array and returns -1, 0, or 1 depending on whether the needle is less\n *     than, equal to, or greater than the element, respectively.\n * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or\n *     'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the\n *     closest element that is smaller than or greater than the one we are\n *     searching for, respectively, if the exact element cannot be found.\n *     Defaults to 'binarySearch.GREATEST_LOWER_BOUND'.\n */\nexports.search = function search(aNeedle, aHaystack, aCompare, aBias) {\n  if (aHaystack.length === 0) {\n    return -1;\n  }\n\n  var index = recursiveSearch(-1, aHaystack.length, aNeedle, aHaystack,\n                              aCompare, aBias || exports.GREATEST_LOWER_BOUND);\n  if (index < 0) {\n    return -1;\n  }\n\n  // We have found either the exact element, or the next-closest element than\n  // the one we are searching for. However, there may be more than one such\n  // element. Make sure we always return the smallest of these.\n  while (index - 1 >= 0) {\n    if (aCompare(aHaystack[index], aHaystack[index - 1], true) !== 0) {\n      break;\n    }\n    --index;\n  }\n\n  return index;\n};\n","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\n// It turns out that some (most?) JavaScript engines don't self-host\n// `Array.prototype.sort`. This makes sense because C++ will likely remain\n// faster than JS when doing raw CPU-intensive sorting. However, when using a\n// custom comparator function, calling back and forth between the VM's C++ and\n// JIT'd JS is rather slow *and* loses JIT type information, resulting in\n// worse generated code for the comparator function than would be optimal. In\n// fact, when sorting with a comparator, these costs outweigh the benefits of\n// sorting in C++. By using our own JS-implemented Quick Sort (below), we get\n// a ~3500ms mean speed-up in `bench/bench.html`.\n\n/**\n * Swap the elements indexed by `x` and `y` in the array `ary`.\n *\n * @param {Array} ary\n *        The array.\n * @param {Number} x\n *        The index of the first item.\n * @param {Number} y\n *        The index of the second item.\n */\nfunction swap(ary, x, y) {\n  var temp = ary[x];\n  ary[x] = ary[y];\n  ary[y] = temp;\n}\n\n/**\n * Returns a random integer within the range `low .. high` inclusive.\n *\n * @param {Number} low\n *        The lower bound on the range.\n * @param {Number} high\n *        The upper bound on the range.\n */\nfunction randomIntInRange(low, high) {\n  return Math.round(low + (Math.random() * (high - low)));\n}\n\n/**\n * The Quick Sort algorithm.\n *\n * @param {Array} ary\n *        An array to sort.\n * @param {function} comparator\n *        Function to use to compare two items.\n * @param {Number} p\n *        Start index of the array\n * @param {Number} r\n *        End index of the array\n */\nfunction doQuickSort(ary, comparator, p, r) {\n  // If our lower bound is less than our upper bound, we (1) partition the\n  // array into two pieces and (2) recurse on each half. If it is not, this is\n  // the empty array and our base case.\n\n  if (p < r) {\n    // (1) Partitioning.\n    //\n    // The partitioning chooses a pivot between `p` and `r` and moves all\n    // elements that are less than or equal to the pivot to the before it, and\n    // all the elements that are greater than it after it. The effect is that\n    // once partition is done, the pivot is in the exact place it will be when\n    // the array is put in sorted order, and it will not need to be moved\n    // again. This runs in O(n) time.\n\n    // Always choose a random pivot so that an input array which is reverse\n    // sorted does not cause O(n^2) running time.\n    var pivotIndex = randomIntInRange(p, r);\n    var i = p - 1;\n\n    swap(ary, pivotIndex, r);\n    var pivot = ary[r];\n\n    // Immediately after `j` is incremented in this loop, the following hold\n    // true:\n    //\n    //   * Every element in `ary[p .. i]` is less than or equal to the pivot.\n    //\n    //   * Every element in `ary[i+1 .. j-1]` is greater than the pivot.\n    for (var j = p; j < r; j++) {\n      if (comparator(ary[j], pivot) <= 0) {\n        i += 1;\n        swap(ary, i, j);\n      }\n    }\n\n    swap(ary, i + 1, j);\n    var q = i + 1;\n\n    // (2) Recurse on each half.\n\n    doQuickSort(ary, comparator, p, q - 1);\n    doQuickSort(ary, comparator, q + 1, r);\n  }\n}\n\n/**\n * Sort the given array in-place with the given comparator function.\n *\n * @param {Array} ary\n *        An array to sort.\n * @param {function} comparator\n *        Function to use to compare two items.\n */\nexports.quickSort = function (ary, comparator) {\n  doQuickSort(ary, comparator, 0, ary.length - 1);\n};\n","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar util = require('./util');\nvar binarySearch = require('./binary-search');\nvar ArraySet = require('./array-set').ArraySet;\nvar base64VLQ = require('./base64-vlq');\nvar quickSort = require('./quick-sort').quickSort;\n\nfunction SourceMapConsumer(aSourceMap) {\n  var sourceMap = aSourceMap;\n  if (typeof aSourceMap === 'string') {\n    sourceMap = JSON.parse(aSourceMap.replace(/^\\)\\]\\}'/, ''));\n  }\n\n  return sourceMap.sections != null\n    ? new IndexedSourceMapConsumer(sourceMap)\n    : new BasicSourceMapConsumer(sourceMap);\n}\n\nSourceMapConsumer.fromSourceMap = function(aSourceMap) {\n  return BasicSourceMapConsumer.fromSourceMap(aSourceMap);\n}\n\n/**\n * The version of the source mapping spec that we are consuming.\n */\nSourceMapConsumer.prototype._version = 3;\n\n// `__generatedMappings` and `__originalMappings` are arrays that hold the\n// parsed mapping coordinates from the source map's \"mappings\" attribute. They\n// are lazily instantiated, accessed via the `_generatedMappings` and\n// `_originalMappings` getters respectively, and we only parse the mappings\n// and create these arrays once queried for a source location. We jump through\n// these hoops because there can be many thousands of mappings, and parsing\n// them is expensive, so we only want to do it if we must.\n//\n// Each object in the arrays is of the form:\n//\n//     {\n//       generatedLine: The line number in the generated code,\n//       generatedColumn: The column number in the generated code,\n//       source: The path to the original source file that generated this\n//               chunk of code,\n//       originalLine: The line number in the original source that\n//                     corresponds to this chunk of generated code,\n//       originalColumn: The column number in the original source that\n//                       corresponds to this chunk of generated code,\n//       name: The name of the original symbol which generated this chunk of\n//             code.\n//     }\n//\n// All properties except for `generatedLine` and `generatedColumn` can be\n// `null`.\n//\n// `_generatedMappings` is ordered by the generated positions.\n//\n// `_originalMappings` is ordered by the original positions.\n\nSourceMapConsumer.prototype.__generatedMappings = null;\nObject.defineProperty(SourceMapConsumer.prototype, '_generatedMappings', {\n  get: function () {\n    if (!this.__generatedMappings) {\n      this._parseMappings(this._mappings, this.sourceRoot);\n    }\n\n    return this.__generatedMappings;\n  }\n});\n\nSourceMapConsumer.prototype.__originalMappings = null;\nObject.defineProperty(SourceMapConsumer.prototype, '_originalMappings', {\n  get: function () {\n    if (!this.__originalMappings) {\n      this._parseMappings(this._mappings, this.sourceRoot);\n    }\n\n    return this.__originalMappings;\n  }\n});\n\nSourceMapConsumer.prototype._charIsMappingSeparator =\n  function SourceMapConsumer_charIsMappingSeparator(aStr, index) {\n    var c = aStr.charAt(index);\n    return c === \";\" || c === \",\";\n  };\n\n/**\n * Parse the mappings in a string in to a data structure which we can easily\n * query (the ordered arrays in the `this.__generatedMappings` and\n * `this.__originalMappings` properties).\n */\nSourceMapConsumer.prototype._parseMappings =\n  function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {\n    throw new Error(\"Subclasses must implement _parseMappings\");\n  };\n\nSourceMapConsumer.GENERATED_ORDER = 1;\nSourceMapConsumer.ORIGINAL_ORDER = 2;\n\nSourceMapConsumer.GREATEST_LOWER_BOUND = 1;\nSourceMapConsumer.LEAST_UPPER_BOUND = 2;\n\n/**\n * Iterate over each mapping between an original source/line/column and a\n * generated line/column in this source map.\n *\n * @param Function aCallback\n *        The function that is called with each mapping.\n * @param Object aContext\n *        Optional. If specified, this object will be the value of `this` every\n *        time that `aCallback` is called.\n * @param aOrder\n *        Either `SourceMapConsumer.GENERATED_ORDER` or\n *        `SourceMapConsumer.ORIGINAL_ORDER`. Specifies whether you want to\n *        iterate over the mappings sorted by the generated file's line/column\n *        order or the original's source/line/column order, respectively. Defaults to\n *        `SourceMapConsumer.GENERATED_ORDER`.\n */\nSourceMapConsumer.prototype.eachMapping =\n  function SourceMapConsumer_eachMapping(aCallback, aContext, aOrder) {\n    var context = aContext || null;\n    var order = aOrder || SourceMapConsumer.GENERATED_ORDER;\n\n    var mappings;\n    switch (order) {\n    case SourceMapConsumer.GENERATED_ORDER:\n      mappings = this._generatedMappings;\n      break;\n    case SourceMapConsumer.ORIGINAL_ORDER:\n      mappings = this._originalMappings;\n      break;\n    default:\n      throw new Error(\"Unknown order of iteration.\");\n    }\n\n    var sourceRoot = this.sourceRoot;\n    mappings.map(function (mapping) {\n      var source = mapping.source === null ? null : this._sources.at(mapping.source);\n      if (source != null && sourceRoot != null) {\n        source = util.join(sourceRoot, source);\n      }\n      return {\n        source: source,\n        generatedLine: mapping.generatedLine,\n        generatedColumn: mapping.generatedColumn,\n        originalLine: mapping.originalLine,\n        originalColumn: mapping.originalColumn,\n        name: mapping.name === null ? null : this._names.at(mapping.name)\n      };\n    }, this).forEach(aCallback, context);\n  };\n\n/**\n * Returns all generated line and column information for the original source,\n * line, and column provided. If no column is provided, returns all mappings\n * corresponding to a either the line we are searching for or the next\n * closest line that has any mappings. Otherwise, returns all mappings\n * corresponding to the given line and either the column we are searching for\n * or the next closest column that has any offsets.\n *\n * The only argument is an object with the following properties:\n *\n *   - source: The filename of the original source.\n *   - line: The line number in the original source.\n *   - column: Optional. the column number in the original source.\n *\n * and an array of objects is returned, each with the following properties:\n *\n *   - line: The line number in the generated source, or null.\n *   - column: The column number in the generated source, or null.\n */\nSourceMapConsumer.prototype.allGeneratedPositionsFor =\n  function SourceMapConsumer_allGeneratedPositionsFor(aArgs) {\n    var line = util.getArg(aArgs, 'line');\n\n    // When there is no exact match, BasicSourceMapConsumer.prototype._findMapping\n    // returns the index of the closest mapping less than the needle. By\n    // setting needle.originalColumn to 0, we thus find the last mapping for\n    // the given line, provided such a mapping exists.\n    var needle = {\n      source: util.getArg(aArgs, 'source'),\n      originalLine: line,\n      originalColumn: util.getArg(aArgs, 'column', 0)\n    };\n\n    if (this.sourceRoot != null) {\n      needle.source = util.relative(this.sourceRoot, needle.source);\n    }\n    if (!this._sources.has(needle.source)) {\n      return [];\n    }\n    needle.source = this._sources.indexOf(needle.source);\n\n    var mappings = [];\n\n    var index = this._findMapping(needle,\n                                  this._originalMappings,\n                                  \"originalLine\",\n                                  \"originalColumn\",\n                                  util.compareByOriginalPositions,\n                                  binarySearch.LEAST_UPPER_BOUND);\n    if (index >= 0) {\n      var mapping = this._originalMappings[index];\n\n      if (aArgs.column === undefined) {\n        var originalLine = mapping.originalLine;\n\n        // Iterate until either we run out of mappings, or we run into\n        // a mapping for a different line than the one we found. Since\n        // mappings are sorted, this is guaranteed to find all mappings for\n        // the line we found.\n        while (mapping && mapping.originalLine === originalLine) {\n          mappings.push({\n            line: util.getArg(mapping, 'generatedLine', null),\n            column: util.getArg(mapping, 'generatedColumn', null),\n            lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)\n          });\n\n          mapping = this._originalMappings[++index];\n        }\n      } else {\n        var originalColumn = mapping.originalColumn;\n\n        // Iterate until either we run out of mappings, or we run into\n        // a mapping for a different line than the one we were searching for.\n        // Since mappings are sorted, this is guaranteed to find all mappings for\n        // the line we are searching for.\n        while (mapping &&\n               mapping.originalLine === line &&\n               mapping.originalColumn == originalColumn) {\n          mappings.push({\n            line: util.getArg(mapping, 'generatedLine', null),\n            column: util.getArg(mapping, 'generatedColumn', null),\n            lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)\n          });\n\n          mapping = this._originalMappings[++index];\n        }\n      }\n    }\n\n    return mappings;\n  };\n\nexports.SourceMapConsumer = SourceMapConsumer;\n\n/**\n * A BasicSourceMapConsumer instance represents a parsed source map which we can\n * query for information about the original file positions by giving it a file\n * position in the generated source.\n *\n * The only parameter is the raw source map (either as a JSON string, or\n * already parsed to an object). According to the spec, source maps have the\n * following attributes:\n *\n *   - version: Which version of the source map spec this map is following.\n *   - sources: An array of URLs to the original source files.\n *   - names: An array of identifiers which can be referrenced by individual mappings.\n *   - sourceRoot: Optional. The URL root from which all sources are relative.\n *   - sourcesContent: Optional. An array of contents of the original source files.\n *   - mappings: A string of base64 VLQs which contain the actual mappings.\n *   - file: Optional. The generated file this source map is associated with.\n *\n * Here is an example source map, taken from the source map spec[0]:\n *\n *     {\n *       version : 3,\n *       file: \"out.js\",\n *       sourceRoot : \"\",\n *       sources: [\"foo.js\", \"bar.js\"],\n *       names: [\"src\", \"maps\", \"are\", \"fun\"],\n *       mappings: \"AA,AB;;ABCDE;\"\n *     }\n *\n * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit?pli=1#\n */\nfunction BasicSourceMapConsumer(aSourceMap) {\n  var sourceMap = aSourceMap;\n  if (typeof aSourceMap === 'string') {\n    sourceMap = JSON.parse(aSourceMap.replace(/^\\)\\]\\}'/, ''));\n  }\n\n  var version = util.getArg(sourceMap, 'version');\n  var sources = util.getArg(sourceMap, 'sources');\n  // Sass 3.3 leaves out the 'names' array, so we deviate from the spec (which\n  // requires the array) to play nice here.\n  var names = util.getArg(sourceMap, 'names', []);\n  var sourceRoot = util.getArg(sourceMap, 'sourceRoot', null);\n  var sourcesContent = util.getArg(sourceMap, 'sourcesContent', null);\n  var mappings = util.getArg(sourceMap, 'mappings');\n  var file = util.getArg(sourceMap, 'file', null);\n\n  // Once again, Sass deviates from the spec and supplies the version as a\n  // string rather than a number, so we use loose equality checking here.\n  if (version != this._version) {\n    throw new Error('Unsupported version: ' + version);\n  }\n\n  sources = sources\n    .map(String)\n    // Some source maps produce relative source paths like \"./foo.js\" instead of\n    // \"foo.js\".  Normalize these first so that future comparisons will succeed.\n    // See bugzil.la/1090768.\n    .map(util.normalize)\n    // Always ensure that absolute sources are internally stored relative to\n    // the source root, if the source root is absolute. Not doing this would\n    // be particularly problematic when the source root is a prefix of the\n    // source (valid, but why??). See github issue #199 and bugzil.la/1188982.\n    .map(function (source) {\n      return sourceRoot && util.isAbsolute(sourceRoot) && util.isAbsolute(source)\n        ? util.relative(sourceRoot, source)\n        : source;\n    });\n\n  // Pass `true` below to allow duplicate names and sources. While source maps\n  // are intended to be compressed and deduplicated, the TypeScript compiler\n  // sometimes generates source maps with duplicates in them. See Github issue\n  // #72 and bugzil.la/889492.\n  this._names = ArraySet.fromArray(names.map(String), true);\n  this._sources = ArraySet.fromArray(sources, true);\n\n  this.sourceRoot = sourceRoot;\n  this.sourcesContent = sourcesContent;\n  this._mappings = mappings;\n  this.file = file;\n}\n\nBasicSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype);\nBasicSourceMapConsumer.prototype.consumer = SourceMapConsumer;\n\n/**\n * Create a BasicSourceMapConsumer from a SourceMapGenerator.\n *\n * @param SourceMapGenerator aSourceMap\n *        The source map that will be consumed.\n * @returns BasicSourceMapConsumer\n */\nBasicSourceMapConsumer.fromSourceMap =\n  function SourceMapConsumer_fromSourceMap(aSourceMap) {\n    var smc = Object.create(BasicSourceMapConsumer.prototype);\n\n    var names = smc._names = ArraySet.fromArray(aSourceMap._names.toArray(), true);\n    var sources = smc._sources = ArraySet.fromArray(aSourceMap._sources.toArray(), true);\n    smc.sourceRoot = aSourceMap._sourceRoot;\n    smc.sourcesContent = aSourceMap._generateSourcesContent(smc._sources.toArray(),\n                                                            smc.sourceRoot);\n    smc.file = aSourceMap._file;\n\n    // Because we are modifying the entries (by converting string sources and\n    // names to indices into the sources and names ArraySets), we have to make\n    // a copy of the entry or else bad things happen. Shared mutable state\n    // strikes again! See github issue #191.\n\n    var generatedMappings = aSourceMap._mappings.toArray().slice();\n    var destGeneratedMappings = smc.__generatedMappings = [];\n    var destOriginalMappings = smc.__originalMappings = [];\n\n    for (var i = 0, length = generatedMappings.length; i < length; i++) {\n      var srcMapping = generatedMappings[i];\n      var destMapping = new Mapping;\n      destMapping.generatedLine = srcMapping.generatedLine;\n      destMapping.generatedColumn = srcMapping.generatedColumn;\n\n      if (srcMapping.source) {\n        destMapping.source = sources.indexOf(srcMapping.source);\n        destMapping.originalLine = srcMapping.originalLine;\n        destMapping.originalColumn = srcMapping.originalColumn;\n\n        if (srcMapping.name) {\n          destMapping.name = names.indexOf(srcMapping.name);\n        }\n\n        destOriginalMappings.push(destMapping);\n      }\n\n      destGeneratedMappings.push(destMapping);\n    }\n\n    quickSort(smc.__originalMappings, util.compareByOriginalPositions);\n\n    return smc;\n  };\n\n/**\n * The version of the source mapping spec that we are consuming.\n */\nBasicSourceMapConsumer.prototype._version = 3;\n\n/**\n * The list of original sources.\n */\nObject.defineProperty(BasicSourceMapConsumer.prototype, 'sources', {\n  get: function () {\n    return this._sources.toArray().map(function (s) {\n      return this.sourceRoot != null ? util.join(this.sourceRoot, s) : s;\n    }, this);\n  }\n});\n\n/**\n * Provide the JIT with a nice shape / hidden class.\n */\nfunction Mapping() {\n  this.generatedLine = 0;\n  this.generatedColumn = 0;\n  this.source = null;\n  this.originalLine = null;\n  this.originalColumn = null;\n  this.name = null;\n}\n\n/**\n * Parse the mappings in a string in to a data structure which we can easily\n * query (the ordered arrays in the `this.__generatedMappings` and\n * `this.__originalMappings` properties).\n */\nBasicSourceMapConsumer.prototype._parseMappings =\n  function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {\n    var generatedLine = 1;\n    var previousGeneratedColumn = 0;\n    var previousOriginalLine = 0;\n    var previousOriginalColumn = 0;\n    var previousSource = 0;\n    var previousName = 0;\n    var length = aStr.length;\n    var index = 0;\n    var cachedSegments = {};\n    var temp = {};\n    var originalMappings = [];\n    var generatedMappings = [];\n    var mapping, str, segment, end, value;\n\n    while (index < length) {\n      if (aStr.charAt(index) === ';') {\n        generatedLine++;\n        index++;\n        previousGeneratedColumn = 0;\n      }\n      else if (aStr.charAt(index) === ',') {\n        index++;\n      }\n      else {\n        mapping = new Mapping();\n        mapping.generatedLine = generatedLine;\n\n        // Because each offset is encoded relative to the previous one,\n        // many segments often have the same encoding. We can exploit this\n        // fact by caching the parsed variable length fields of each segment,\n        // allowing us to avoid a second parse if we encounter the same\n        // segment again.\n        for (end = index; end < length; end++) {\n          if (this._charIsMappingSeparator(aStr, end)) {\n            break;\n          }\n        }\n        str = aStr.slice(index, end);\n\n        segment = cachedSegments[str];\n        if (segment) {\n          index += str.length;\n        } else {\n          segment = [];\n          while (index < end) {\n            base64VLQ.decode(aStr, index, temp);\n            value = temp.value;\n            index = temp.rest;\n            segment.push(value);\n          }\n\n          if (segment.length === 2) {\n            throw new Error('Found a source, but no line and column');\n          }\n\n          if (segment.length === 3) {\n            throw new Error('Found a source and line, but no column');\n          }\n\n          cachedSegments[str] = segment;\n        }\n\n        // Generated column.\n        mapping.generatedColumn = previousGeneratedColumn + segment[0];\n        previousGeneratedColumn = mapping.generatedColumn;\n\n        if (segment.length > 1) {\n          // Original source.\n          mapping.source = previousSource + segment[1];\n          previousSource += segment[1];\n\n          // Original line.\n          mapping.originalLine = previousOriginalLine + segment[2];\n          previousOriginalLine = mapping.originalLine;\n          // Lines are stored 0-based\n          mapping.originalLine += 1;\n\n          // Original column.\n          mapping.originalColumn = previousOriginalColumn + segment[3];\n          previousOriginalColumn = mapping.originalColumn;\n\n          if (segment.length > 4) {\n            // Original name.\n            mapping.name = previousName + segment[4];\n            previousName += segment[4];\n          }\n        }\n\n        generatedMappings.push(mapping);\n        if (typeof mapping.originalLine === 'number') {\n          originalMappings.push(mapping);\n        }\n      }\n    }\n\n    quickSort(generatedMappings, util.compareByGeneratedPositionsDeflated);\n    this.__generatedMappings = generatedMappings;\n\n    quickSort(originalMappings, util.compareByOriginalPositions);\n    this.__originalMappings = originalMappings;\n  };\n\n/**\n * Find the mapping that best matches the hypothetical \"needle\" mapping that\n * we are searching for in the given \"haystack\" of mappings.\n */\nBasicSourceMapConsumer.prototype._findMapping =\n  function SourceMapConsumer_findMapping(aNeedle, aMappings, aLineName,\n                                         aColumnName, aComparator, aBias) {\n    // To return the position we are searching for, we must first find the\n    // mapping for the given position and then return the opposite position it\n    // points to. Because the mappings are sorted, we can use binary search to\n    // find the best mapping.\n\n    if (aNeedle[aLineName] <= 0) {\n      throw new TypeError('Line must be greater than or equal to 1, got '\n                          + aNeedle[aLineName]);\n    }\n    if (aNeedle[aColumnName] < 0) {\n      throw new TypeError('Column must be greater than or equal to 0, got '\n                          + aNeedle[aColumnName]);\n    }\n\n    return binarySearch.search(aNeedle, aMappings, aComparator, aBias);\n  };\n\n/**\n * Compute the last column for each generated mapping. The last column is\n * inclusive.\n */\nBasicSourceMapConsumer.prototype.computeColumnSpans =\n  function SourceMapConsumer_computeColumnSpans() {\n    for (var index = 0; index < this._generatedMappings.length; ++index) {\n      var mapping = this._generatedMappings[index];\n\n      // Mappings do not contain a field for the last generated columnt. We\n      // can come up with an optimistic estimate, however, by assuming that\n      // mappings are contiguous (i.e. given two consecutive mappings, the\n      // first mapping ends where the second one starts).\n      if (index + 1 < this._generatedMappings.length) {\n        var nextMapping = this._generatedMappings[index + 1];\n\n        if (mapping.generatedLine === nextMapping.generatedLine) {\n          mapping.lastGeneratedColumn = nextMapping.generatedColumn - 1;\n          continue;\n        }\n      }\n\n      // The last mapping for each line spans the entire line.\n      mapping.lastGeneratedColumn = Infinity;\n    }\n  };\n\n/**\n * Returns the original source, line, and column information for the generated\n * source's line and column positions provided. The only argument is an object\n * with the following properties:\n *\n *   - line: The line number in the generated source.\n *   - column: The column number in the generated source.\n *   - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or\n *     'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the\n *     closest element that is smaller than or greater than the one we are\n *     searching for, respectively, if the exact element cannot be found.\n *     Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'.\n *\n * and an object is returned with the following properties:\n *\n *   - source: The original source file, or null.\n *   - line: The line number in the original source, or null.\n *   - column: The column number in the original source, or null.\n *   - name: The original identifier, or null.\n */\nBasicSourceMapConsumer.prototype.originalPositionFor =\n  function SourceMapConsumer_originalPositionFor(aArgs) {\n    var needle = {\n      generatedLine: util.getArg(aArgs, 'line'),\n      generatedColumn: util.getArg(aArgs, 'column')\n    };\n\n    var index = this._findMapping(\n      needle,\n      this._generatedMappings,\n      \"generatedLine\",\n      \"generatedColumn\",\n      util.compareByGeneratedPositionsDeflated,\n      util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND)\n    );\n\n    if (index >= 0) {\n      var mapping = this._generatedMappings[index];\n\n      if (mapping.generatedLine === needle.generatedLine) {\n        var source = util.getArg(mapping, 'source', null);\n        if (source !== null) {\n          source = this._sources.at(source);\n          if (this.sourceRoot != null) {\n            source = util.join(this.sourceRoot, source);\n          }\n        }\n        var name = util.getArg(mapping, 'name', null);\n        if (name !== null) {\n          name = this._names.at(name);\n        }\n        return {\n          source: source,\n          line: util.getArg(mapping, 'originalLine', null),\n          column: util.getArg(mapping, 'originalColumn', null),\n          name: name\n        };\n      }\n    }\n\n    return {\n      source: null,\n      line: null,\n      column: null,\n      name: null\n    };\n  };\n\n/**\n * Return true if we have the source content for every source in the source\n * map, false otherwise.\n */\nBasicSourceMapConsumer.prototype.hasContentsOfAllSources =\n  function BasicSourceMapConsumer_hasContentsOfAllSources() {\n    if (!this.sourcesContent) {\n      return false;\n    }\n    return this.sourcesContent.length >= this._sources.size() &&\n      !this.sourcesContent.some(function (sc) { return sc == null; });\n  };\n\n/**\n * Returns the original source content. The only argument is the url of the\n * original source file. Returns null if no original source content is\n * available.\n */\nBasicSourceMapConsumer.prototype.sourceContentFor =\n  function SourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {\n    if (!this.sourcesContent) {\n      return null;\n    }\n\n    if (this.sourceRoot != null) {\n      aSource = util.relative(this.sourceRoot, aSource);\n    }\n\n    if (this._sources.has(aSource)) {\n      return this.sourcesContent[this._sources.indexOf(aSource)];\n    }\n\n    var url;\n    if (this.sourceRoot != null\n        && (url = util.urlParse(this.sourceRoot))) {\n      // XXX: file:// URIs and absolute paths lead to unexpected behavior for\n      // many users. We can help them out when they expect file:// URIs to\n      // behave like it would if they were running a local HTTP server. See\n      // https://bugzilla.mozilla.org/show_bug.cgi?id=885597.\n      var fileUriAbsPath = aSource.replace(/^file:\\/\\//, \"\");\n      if (url.scheme == \"file\"\n          && this._sources.has(fileUriAbsPath)) {\n        return this.sourcesContent[this._sources.indexOf(fileUriAbsPath)]\n      }\n\n      if ((!url.path || url.path == \"/\")\n          && this._sources.has(\"/\" + aSource)) {\n        return this.sourcesContent[this._sources.indexOf(\"/\" + aSource)];\n      }\n    }\n\n    // This function is used recursively from\n    // IndexedSourceMapConsumer.prototype.sourceContentFor. In that case, we\n    // don't want to throw if we can't find the source - we just want to\n    // return null, so we provide a flag to exit gracefully.\n    if (nullOnMissing) {\n      return null;\n    }\n    else {\n      throw new Error('\"' + aSource + '\" is not in the SourceMap.');\n    }\n  };\n\n/**\n * Returns the generated line and column information for the original source,\n * line, and column positions provided. The only argument is an object with\n * the following properties:\n *\n *   - source: The filename of the original source.\n *   - line: The line number in the original source.\n *   - column: The column number in the original source.\n *   - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or\n *     'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the\n *     closest element that is smaller than or greater than the one we are\n *     searching for, respectively, if the exact element cannot be found.\n *     Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'.\n *\n * and an object is returned with the following properties:\n *\n *   - line: The line number in the generated source, or null.\n *   - column: The column number in the generated source, or null.\n */\nBasicSourceMapConsumer.prototype.generatedPositionFor =\n  function SourceMapConsumer_generatedPositionFor(aArgs) {\n    var source = util.getArg(aArgs, 'source');\n    if (this.sourceRoot != null) {\n      source = util.relative(this.sourceRoot, source);\n    }\n    if (!this._sources.has(source)) {\n      return {\n        line: null,\n        column: null,\n        lastColumn: null\n      };\n    }\n    source = this._sources.indexOf(source);\n\n    var needle = {\n      source: source,\n      originalLine: util.getArg(aArgs, 'line'),\n      originalColumn: util.getArg(aArgs, 'column')\n    };\n\n    var index = this._findMapping(\n      needle,\n      this._originalMappings,\n      \"originalLine\",\n      \"originalColumn\",\n      util.compareByOriginalPositions,\n      util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND)\n    );\n\n    if (index >= 0) {\n      var mapping = this._originalMappings[index];\n\n      if (mapping.source === needle.source) {\n        return {\n          line: util.getArg(mapping, 'generatedLine', null),\n          column: util.getArg(mapping, 'generatedColumn', null),\n          lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)\n        };\n      }\n    }\n\n    return {\n      line: null,\n      column: null,\n      lastColumn: null\n    };\n  };\n\nexports.BasicSourceMapConsumer = BasicSourceMapConsumer;\n\n/**\n * An IndexedSourceMapConsumer instance represents a parsed source map which\n * we can query for information. It differs from BasicSourceMapConsumer in\n * that it takes \"indexed\" source maps (i.e. ones with a \"sections\" field) as\n * input.\n *\n * The only parameter is a raw source map (either as a JSON string, or already\n * parsed to an object). According to the spec for indexed source maps, they\n * have the following attributes:\n *\n *   - version: Which version of the source map spec this map is following.\n *   - file: Optional. The generated file this source map is associated with.\n *   - sections: A list of section definitions.\n *\n * Each value under the \"sections\" field has two fields:\n *   - offset: The offset into the original specified at which this section\n *       begins to apply, defined as an object with a \"line\" and \"column\"\n *       field.\n *   - map: A source map definition. This source map could also be indexed,\n *       but doesn't have to be.\n *\n * Instead of the \"map\" field, it's also possible to have a \"url\" field\n * specifying a URL to retrieve a source map from, but that's currently\n * unsupported.\n *\n * Here's an example source map, taken from the source map spec[0], but\n * modified to omit a section which uses the \"url\" field.\n *\n *  {\n *    version : 3,\n *    file: \"app.js\",\n *    sections: [{\n *      offset: {line:100, column:10},\n *      map: {\n *        version : 3,\n *        file: \"section.js\",\n *        sources: [\"foo.js\", \"bar.js\"],\n *        names: [\"src\", \"maps\", \"are\", \"fun\"],\n *        mappings: \"AAAA,E;;ABCDE;\"\n *      }\n *    }],\n *  }\n *\n * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit#heading=h.535es3xeprgt\n */\nfunction IndexedSourceMapConsumer(aSourceMap) {\n  var sourceMap = aSourceMap;\n  if (typeof aSourceMap === 'string') {\n    sourceMap = JSON.parse(aSourceMap.replace(/^\\)\\]\\}'/, ''));\n  }\n\n  var version = util.getArg(sourceMap, 'version');\n  var sections = util.getArg(sourceMap, 'sections');\n\n  if (version != this._version) {\n    throw new Error('Unsupported version: ' + version);\n  }\n\n  this._sources = new ArraySet();\n  this._names = new ArraySet();\n\n  var lastOffset = {\n    line: -1,\n    column: 0\n  };\n  this._sections = sections.map(function (s) {\n    if (s.url) {\n      // The url field will require support for asynchronicity.\n      // See https://github.com/mozilla/source-map/issues/16\n      throw new Error('Support for url field in sections not implemented.');\n    }\n    var offset = util.getArg(s, 'offset');\n    var offsetLine = util.getArg(offset, 'line');\n    var offsetColumn = util.getArg(offset, 'column');\n\n    if (offsetLine < lastOffset.line ||\n        (offsetLine === lastOffset.line && offsetColumn < lastOffset.column)) {\n      throw new Error('Section offsets must be ordered and non-overlapping.');\n    }\n    lastOffset = offset;\n\n    return {\n      generatedOffset: {\n        // The offset fields are 0-based, but we use 1-based indices when\n        // encoding/decoding from VLQ.\n        generatedLine: offsetLine + 1,\n        generatedColumn: offsetColumn + 1\n      },\n      consumer: new SourceMapConsumer(util.getArg(s, 'map'))\n    }\n  });\n}\n\nIndexedSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype);\nIndexedSourceMapConsumer.prototype.constructor = SourceMapConsumer;\n\n/**\n * The version of the source mapping spec that we are consuming.\n */\nIndexedSourceMapConsumer.prototype._version = 3;\n\n/**\n * The list of original sources.\n */\nObject.defineProperty(IndexedSourceMapConsumer.prototype, 'sources', {\n  get: function () {\n    var sources = [];\n    for (var i = 0; i < this._sections.length; i++) {\n      for (var j = 0; j < this._sections[i].consumer.sources.length; j++) {\n        sources.push(this._sections[i].consumer.sources[j]);\n      }\n    }\n    return sources;\n  }\n});\n\n/**\n * Returns the original source, line, and column information for the generated\n * source's line and column positions provided. The only argument is an object\n * with the following properties:\n *\n *   - line: The line number in the generated source.\n *   - column: The column number in the generated source.\n *\n * and an object is returned with the following properties:\n *\n *   - source: The original source file, or null.\n *   - line: The line number in the original source, or null.\n *   - column: The column number in the original source, or null.\n *   - name: The original identifier, or null.\n */\nIndexedSourceMapConsumer.prototype.originalPositionFor =\n  function IndexedSourceMapConsumer_originalPositionFor(aArgs) {\n    var needle = {\n      generatedLine: util.getArg(aArgs, 'line'),\n      generatedColumn: util.getArg(aArgs, 'column')\n    };\n\n    // Find the section containing the generated position we're trying to map\n    // to an original position.\n    var sectionIndex = binarySearch.search(needle, this._sections,\n      function(needle, section) {\n        var cmp = needle.generatedLine - section.generatedOffset.generatedLine;\n        if (cmp) {\n          return cmp;\n        }\n\n        return (needle.generatedColumn -\n                section.generatedOffset.generatedColumn);\n      });\n    var section = this._sections[sectionIndex];\n\n    if (!section) {\n      return {\n        source: null,\n        line: null,\n        column: null,\n        name: null\n      };\n    }\n\n    return section.consumer.originalPositionFor({\n      line: needle.generatedLine -\n        (section.generatedOffset.generatedLine - 1),\n      column: needle.generatedColumn -\n        (section.generatedOffset.generatedLine === needle.generatedLine\n         ? section.generatedOffset.generatedColumn - 1\n         : 0),\n      bias: aArgs.bias\n    });\n  };\n\n/**\n * Return true if we have the source content for every source in the source\n * map, false otherwise.\n */\nIndexedSourceMapConsumer.prototype.hasContentsOfAllSources =\n  function IndexedSourceMapConsumer_hasContentsOfAllSources() {\n    return this._sections.every(function (s) {\n      return s.consumer.hasContentsOfAllSources();\n    });\n  };\n\n/**\n * Returns the original source content. The only argument is the url of the\n * original source file. Returns null if no original source content is\n * available.\n */\nIndexedSourceMapConsumer.prototype.sourceContentFor =\n  function IndexedSourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {\n    for (var i = 0; i < this._sections.length; i++) {\n      var section = this._sections[i];\n\n      var content = section.consumer.sourceContentFor(aSource, true);\n      if (content) {\n        return content;\n      }\n    }\n    if (nullOnMissing) {\n      return null;\n    }\n    else {\n      throw new Error('\"' + aSource + '\" is not in the SourceMap.');\n    }\n  };\n\n/**\n * Returns the generated line and column information for the original source,\n * line, and column positions provided. The only argument is an object with\n * the following properties:\n *\n *   - source: The filename of the original source.\n *   - line: The line number in the original source.\n *   - column: The column number in the original source.\n *\n * and an object is returned with the following properties:\n *\n *   - line: The line number in the generated source, or null.\n *   - column: The column number in the generated source, or null.\n */\nIndexedSourceMapConsumer.prototype.generatedPositionFor =\n  function IndexedSourceMapConsumer_generatedPositionFor(aArgs) {\n    for (var i = 0; i < this._sections.length; i++) {\n      var section = this._sections[i];\n\n      // Only consider this section if the requested source is in the list of\n      // sources of the consumer.\n      if (section.consumer.sources.indexOf(util.getArg(aArgs, 'source')) === -1) {\n        continue;\n      }\n      var generatedPosition = section.consumer.generatedPositionFor(aArgs);\n      if (generatedPosition) {\n        var ret = {\n          line: generatedPosition.line +\n            (section.generatedOffset.generatedLine - 1),\n          column: generatedPosition.column +\n            (section.generatedOffset.generatedLine === generatedPosition.line\n             ? section.generatedOffset.generatedColumn - 1\n             : 0)\n        };\n        return ret;\n      }\n    }\n\n    return {\n      line: null,\n      column: null\n    };\n  };\n\n/**\n * Parse the mappings in a string in to a data structure which we can easily\n * query (the ordered arrays in the `this.__generatedMappings` and\n * `this.__originalMappings` properties).\n */\nIndexedSourceMapConsumer.prototype._parseMappings =\n  function IndexedSourceMapConsumer_parseMappings(aStr, aSourceRoot) {\n    this.__generatedMappings = [];\n    this.__originalMappings = [];\n    for (var i = 0; i < this._sections.length; i++) {\n      var section = this._sections[i];\n      var sectionMappings = section.consumer._generatedMappings;\n      for (var j = 0; j < sectionMappings.length; j++) {\n        var mapping = sectionMappings[j];\n\n        var source = section.consumer._sources.at(mapping.source);\n        if (section.consumer.sourceRoot !== null) {\n          source = util.join(section.consumer.sourceRoot, source);\n        }\n        this._sources.add(source);\n        source = this._sources.indexOf(source);\n\n        var name = section.consumer._names.at(mapping.name);\n        this._names.add(name);\n        name = this._names.indexOf(name);\n\n        // The mappings coming from the consumer for the section have\n        // generated positions relative to the start of the section, so we\n        // need to offset them to be relative to the start of the concatenated\n        // generated file.\n        var adjustedMapping = {\n          source: source,\n          generatedLine: mapping.generatedLine +\n            (section.generatedOffset.generatedLine - 1),\n          generatedColumn: mapping.generatedColumn +\n            (section.generatedOffset.generatedLine === mapping.generatedLine\n            ? section.generatedOffset.generatedColumn - 1\n            : 0),\n          originalLine: mapping.originalLine,\n          originalColumn: mapping.originalColumn,\n          name: name\n        };\n\n        this.__generatedMappings.push(adjustedMapping);\n        if (typeof adjustedMapping.originalLine === 'number') {\n          this.__originalMappings.push(adjustedMapping);\n        }\n      }\n    }\n\n    quickSort(this.__generatedMappings, util.compareByGeneratedPositionsDeflated);\n    quickSort(this.__originalMappings, util.compareByOriginalPositions);\n  };\n\nexports.IndexedSourceMapConsumer = IndexedSourceMapConsumer;\n","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\n/**\n * This is a helper function for getting values from parameter/options\n * objects.\n *\n * @param args The object we are extracting values from\n * @param name The name of the property we are getting.\n * @param defaultValue An optional value to return if the property is missing\n * from the object. If this is not specified and the property is missing, an\n * error will be thrown.\n */\nfunction getArg(aArgs, aName, aDefaultValue) {\n  if (aName in aArgs) {\n    return aArgs[aName];\n  } else if (arguments.length === 3) {\n    return aDefaultValue;\n  } else {\n    throw new Error('\"' + aName + '\" is a required argument.');\n  }\n}\nexports.getArg = getArg;\n\nvar urlRegexp = /^(?:([\\w+\\-.]+):)?\\/\\/(?:(\\w+:\\w+)@)?([\\w.]*)(?::(\\d+))?(\\S*)$/;\nvar dataUrlRegexp = /^data:.+\\,.+$/;\n\nfunction urlParse(aUrl) {\n  var match = aUrl.match(urlRegexp);\n  if (!match) {\n    return null;\n  }\n  return {\n    scheme: match[1],\n    auth: match[2],\n    host: match[3],\n    port: match[4],\n    path: match[5]\n  };\n}\nexports.urlParse = urlParse;\n\nfunction urlGenerate(aParsedUrl) {\n  var url = '';\n  if (aParsedUrl.scheme) {\n    url += aParsedUrl.scheme + ':';\n  }\n  url += '//';\n  if (aParsedUrl.auth) {\n    url += aParsedUrl.auth + '@';\n  }\n  if (aParsedUrl.host) {\n    url += aParsedUrl.host;\n  }\n  if (aParsedUrl.port) {\n    url += \":\" + aParsedUrl.port\n  }\n  if (aParsedUrl.path) {\n    url += aParsedUrl.path;\n  }\n  return url;\n}\nexports.urlGenerate = urlGenerate;\n\n/**\n * Normalizes a path, or the path portion of a URL:\n *\n * - Replaces consecutive slashes with one slash.\n * - Removes unnecessary '.' parts.\n * - Removes unnecessary '<dir>/..' parts.\n *\n * Based on code in the Node.js 'path' core module.\n *\n * @param aPath The path or url to normalize.\n */\nfunction normalize(aPath) {\n  var path = aPath;\n  var url = urlParse(aPath);\n  if (url) {\n    if (!url.path) {\n      return aPath;\n    }\n    path = url.path;\n  }\n  var isAbsolute = exports.isAbsolute(path);\n\n  var parts = path.split(/\\/+/);\n  for (var part, up = 0, i = parts.length - 1; i >= 0; i--) {\n    part = parts[i];\n    if (part === '.') {\n      parts.splice(i, 1);\n    } else if (part === '..') {\n      up++;\n    } else if (up > 0) {\n      if (part === '') {\n        // The first part is blank if the path is absolute. Trying to go\n        // above the root is a no-op. Therefore we can remove all '..' parts\n        // directly after the root.\n        parts.splice(i + 1, up);\n        up = 0;\n      } else {\n        parts.splice(i, 2);\n        up--;\n      }\n    }\n  }\n  path = parts.join('/');\n\n  if (path === '') {\n    path = isAbsolute ? '/' : '.';\n  }\n\n  if (url) {\n    url.path = path;\n    return urlGenerate(url);\n  }\n  return path;\n}\nexports.normalize = normalize;\n\n/**\n * Joins two paths/URLs.\n *\n * @param aRoot The root path or URL.\n * @param aPath The path or URL to be joined with the root.\n *\n * - If aPath is a URL or a data URI, aPath is returned, unless aPath is a\n *   scheme-relative URL: Then the scheme of aRoot, if any, is prepended\n *   first.\n * - Otherwise aPath is a path. If aRoot is a URL, then its path portion\n *   is updated with the result and aRoot is returned. Otherwise the result\n *   is returned.\n *   - If aPath is absolute, the result is aPath.\n *   - Otherwise the two paths are joined with a slash.\n * - Joining for example 'http://' and 'www.example.com' is also supported.\n */\nfunction join(aRoot, aPath) {\n  if (aRoot === \"\") {\n    aRoot = \".\";\n  }\n  if (aPath === \"\") {\n    aPath = \".\";\n  }\n  var aPathUrl = urlParse(aPath);\n  var aRootUrl = urlParse(aRoot);\n  if (aRootUrl) {\n    aRoot = aRootUrl.path || '/';\n  }\n\n  // `join(foo, '//www.example.org')`\n  if (aPathUrl && !aPathUrl.scheme) {\n    if (aRootUrl) {\n      aPathUrl.scheme = aRootUrl.scheme;\n    }\n    return urlGenerate(aPathUrl);\n  }\n\n  if (aPathUrl || aPath.match(dataUrlRegexp)) {\n    return aPath;\n  }\n\n  // `join('http://', 'www.example.com')`\n  if (aRootUrl && !aRootUrl.host && !aRootUrl.path) {\n    aRootUrl.host = aPath;\n    return urlGenerate(aRootUrl);\n  }\n\n  var joined = aPath.charAt(0) === '/'\n    ? aPath\n    : normalize(aRoot.replace(/\\/+$/, '') + '/' + aPath);\n\n  if (aRootUrl) {\n    aRootUrl.path = joined;\n    return urlGenerate(aRootUrl);\n  }\n  return joined;\n}\nexports.join = join;\n\nexports.isAbsolute = function (aPath) {\n  return aPath.charAt(0) === '/' || !!aPath.match(urlRegexp);\n};\n\n/**\n * Make a path relative to a URL or another path.\n *\n * @param aRoot The root path or URL.\n * @param aPath The path or URL to be made relative to aRoot.\n */\nfunction relative(aRoot, aPath) {\n  if (aRoot === \"\") {\n    aRoot = \".\";\n  }\n\n  aRoot = aRoot.replace(/\\/$/, '');\n\n  // It is possible for the path to be above the root. In this case, simply\n  // checking whether the root is a prefix of the path won't work. Instead, we\n  // need to remove components from the root one by one, until either we find\n  // a prefix that fits, or we run out of components to remove.\n  var level = 0;\n  while (aPath.indexOf(aRoot + '/') !== 0) {\n    var index = aRoot.lastIndexOf(\"/\");\n    if (index < 0) {\n      return aPath;\n    }\n\n    // If the only part of the root that is left is the scheme (i.e. http://,\n    // file:///, etc.), one or more slashes (/), or simply nothing at all, we\n    // have exhausted all components, so the path is not relative to the root.\n    aRoot = aRoot.slice(0, index);\n    if (aRoot.match(/^([^\\/]+:\\/)?\\/*$/)) {\n      return aPath;\n    }\n\n    ++level;\n  }\n\n  // Make sure we add a \"../\" for each component we removed from the root.\n  return Array(level + 1).join(\"../\") + aPath.substr(aRoot.length + 1);\n}\nexports.relative = relative;\n\nvar supportsNullProto = (function () {\n  var obj = Object.create(null);\n  return !('__proto__' in obj);\n}());\n\nfunction identity (s) {\n  return s;\n}\n\n/**\n * Because behavior goes wacky when you set `__proto__` on objects, we\n * have to prefix all the strings in our set with an arbitrary character.\n *\n * See https://github.com/mozilla/source-map/pull/31 and\n * https://github.com/mozilla/source-map/issues/30\n *\n * @param String aStr\n */\nfunction toSetString(aStr) {\n  if (isProtoString(aStr)) {\n    return '$' + aStr;\n  }\n\n  return aStr;\n}\nexports.toSetString = supportsNullProto ? identity : toSetString;\n\nfunction fromSetString(aStr) {\n  if (isProtoString(aStr)) {\n    return aStr.slice(1);\n  }\n\n  return aStr;\n}\nexports.fromSetString = supportsNullProto ? identity : fromSetString;\n\nfunction isProtoString(s) {\n  if (!s) {\n    return false;\n  }\n\n  var length = s.length;\n\n  if (length < 9 /* \"__proto__\".length */) {\n    return false;\n  }\n\n  if (s.charCodeAt(length - 1) !== 95  /* '_' */ ||\n      s.charCodeAt(length - 2) !== 95  /* '_' */ ||\n      s.charCodeAt(length - 3) !== 111 /* 'o' */ ||\n      s.charCodeAt(length - 4) !== 116 /* 't' */ ||\n      s.charCodeAt(length - 5) !== 111 /* 'o' */ ||\n      s.charCodeAt(length - 6) !== 114 /* 'r' */ ||\n      s.charCodeAt(length - 7) !== 112 /* 'p' */ ||\n      s.charCodeAt(length - 8) !== 95  /* '_' */ ||\n      s.charCodeAt(length - 9) !== 95  /* '_' */) {\n    return false;\n  }\n\n  for (var i = length - 10; i >= 0; i--) {\n    if (s.charCodeAt(i) !== 36 /* '$' */) {\n      return false;\n    }\n  }\n\n  return true;\n}\n\n/**\n * Comparator between two mappings where the original positions are compared.\n *\n * Optionally pass in `true` as `onlyCompareGenerated` to consider two\n * mappings with the same original source/line/column, but different generated\n * line and column the same. Useful when searching for a mapping with a\n * stubbed out mapping.\n */\nfunction compareByOriginalPositions(mappingA, mappingB, onlyCompareOriginal) {\n  var cmp = mappingA.source - mappingB.source;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.originalLine - mappingB.originalLine;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.originalColumn - mappingB.originalColumn;\n  if (cmp !== 0 || onlyCompareOriginal) {\n    return cmp;\n  }\n\n  cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.generatedLine - mappingB.generatedLine;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  return mappingA.name - mappingB.name;\n}\nexports.compareByOriginalPositions = compareByOriginalPositions;\n\n/**\n * Comparator between two mappings with deflated source and name indices where\n * the generated positions are compared.\n *\n * Optionally pass in `true` as `onlyCompareGenerated` to consider two\n * mappings with the same generated line and column, but different\n * source/name/original line and column the same. Useful when searching for a\n * mapping with a stubbed out mapping.\n */\nfunction compareByGeneratedPositionsDeflated(mappingA, mappingB, onlyCompareGenerated) {\n  var cmp = mappingA.generatedLine - mappingB.generatedLine;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n  if (cmp !== 0 || onlyCompareGenerated) {\n    return cmp;\n  }\n\n  cmp = mappingA.source - mappingB.source;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.originalLine - mappingB.originalLine;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.originalColumn - mappingB.originalColumn;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  return mappingA.name - mappingB.name;\n}\nexports.compareByGeneratedPositionsDeflated = compareByGeneratedPositionsDeflated;\n\nfunction strcmp(aStr1, aStr2) {\n  if (aStr1 === aStr2) {\n    return 0;\n  }\n\n  if (aStr1 > aStr2) {\n    return 1;\n  }\n\n  return -1;\n}\n\n/**\n * Comparator between two mappings with inflated source and name strings where\n * the generated positions are compared.\n */\nfunction compareByGeneratedPositionsInflated(mappingA, mappingB) {\n  var cmp = mappingA.generatedLine - mappingB.generatedLine;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = strcmp(mappingA.source, mappingB.source);\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.originalLine - mappingB.originalLine;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.originalColumn - mappingB.originalColumn;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  return strcmp(mappingA.name, mappingB.name);\n}\nexports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflated;\n","(function(root, factory) {\n    'use strict';\n    // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n    /* istanbul ignore next */\n    if (typeof define === 'function' && define.amd) {\n        define('stacktrace-gps', ['source-map', 'stackframe'], factory);\n    } else if (typeof exports === 'object') {\n        module.exports = factory(require('source-map/lib/source-map-consumer'), require('stackframe'));\n    } else {\n        root.StackTraceGPS = factory(root.SourceMap || root.sourceMap, root.StackFrame);\n    }\n}(this, function(SourceMap, StackFrame) {\n    'use strict';\n\n    /**\n     * Make a X-Domain request to url and callback.\n     *\n     * @param {String} url\n     * @returns {Promise} with response text if fulfilled\n     */\n    function _xdr(url) {\n        return new Promise(function(resolve, reject) {\n            var req = new XMLHttpRequest();\n            req.open('get', url);\n            req.onerror = reject;\n            req.onreadystatechange = function onreadystatechange() {\n                if (req.readyState === 4) {\n                    if (req.status >= 200 && req.status < 300) {\n                        resolve(req.responseText);\n                    } else {\n                        reject(new Error('HTTP status: ' + req.status + ' retrieving ' + url));\n                    }\n                }\n            };\n            req.send();\n        });\n\n    }\n\n    /**\n     * Convert a Base64-encoded string into its original representation.\n     * Used for inline sourcemaps.\n     *\n     * @param {String} b64str Base-64 encoded string\n     * @returns {String} original representation of the base64-encoded string.\n     */\n    function _atob(b64str) {\n        if (typeof window !== 'undefined' && window.atob) {\n            return window.atob(b64str);\n        } else {\n            throw new Error('You must supply a polyfill for window.atob in this environment');\n        }\n    }\n\n    function _parseJson(string) {\n        if (typeof JSON !== 'undefined' && JSON.parse) {\n            return JSON.parse(string);\n        } else {\n            throw new Error('You must supply a polyfill for JSON.parse in this environment');\n        }\n    }\n\n    function _findFunctionName(source, lineNumber/*, columnNumber*/) {\n        // function {name}({args}) m[1]=name m[2]=args\n        var reFunctionDeclaration = /function\\s+([^(]*?)\\s*\\(([^)]*)\\)/;\n        // {name} = function ({args}) TODO args capture\n        var reFunctionExpression = /['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*function\\b/;\n        // {name} = eval()\n        var reFunctionEvaluation = /['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*(?:eval|new Function)\\b/;\n        var lines = source.split('\\n');\n\n        // Walk backwards in the source lines until we find the line which matches one of the patterns above\n        var code = '';\n        var maxLines = Math.min(lineNumber, 20);\n        var m;\n        for (var i = 0; i < maxLines; ++i) {\n            // lineNo is 1-based, source[] is 0-based\n            var line = lines[lineNumber - i - 1];\n            var commentPos = line.indexOf('//');\n            if (commentPos >= 0) {\n                line = line.substr(0, commentPos);\n            }\n\n            if (line) {\n                code = line + code;\n                m = reFunctionExpression.exec(code);\n                if (m && m[1]) {\n                    return m[1];\n                }\n                m = reFunctionDeclaration.exec(code);\n                if (m && m[1]) {\n                    return m[1];\n                }\n                m = reFunctionEvaluation.exec(code);\n                if (m && m[1]) {\n                    return m[1];\n                }\n            }\n        }\n        return undefined;\n    }\n\n    function _ensureSupportedEnvironment() {\n        if (typeof Object.defineProperty !== 'function' || typeof Object.create !== 'function') {\n            throw new Error('Unable to consume source maps in older browsers');\n        }\n    }\n\n    function _ensureStackFrameIsLegit(stackframe) {\n        if (typeof stackframe !== 'object') {\n            throw new TypeError('Given StackFrame is not an object');\n        } else if (typeof stackframe.fileName !== 'string') {\n            throw new TypeError('Given file name is not a String');\n        } else if (typeof stackframe.lineNumber !== 'number' ||\n            stackframe.lineNumber % 1 !== 0 ||\n            stackframe.lineNumber < 1) {\n            throw new TypeError('Given line number must be a positive integer');\n        } else if (typeof stackframe.columnNumber !== 'number' ||\n            stackframe.columnNumber % 1 !== 0 ||\n            stackframe.columnNumber < 0) {\n            throw new TypeError('Given column number must be a non-negative integer');\n        }\n        return true;\n    }\n\n    function _findSourceMappingURL(source) {\n        var m = /\\/\\/[#@] ?sourceMappingURL=([^\\s'\"]+)\\s*$/.exec(source);\n        if (m && m[1]) {\n            return m[1];\n        } else {\n            throw new Error('sourceMappingURL not found');\n        }\n    }\n\n    function _extractLocationInfoFromSourceMap(stackframe, rawSourceMap, sourceCache) {\n        return new Promise(function(resolve, reject) {\n            var mapConsumer = new SourceMap.SourceMapConsumer(rawSourceMap);\n\n            var loc = mapConsumer.originalPositionFor({\n                line: stackframe.lineNumber,\n                column: stackframe.columnNumber\n            });\n\n            if (loc.source) {\n                var mappedSource = mapConsumer.sourceContentFor(loc.source);\n                if (mappedSource) {\n                    sourceCache[loc.source] = mappedSource;\n                }\n                resolve(\n                    new StackFrame(\n                        loc.name || stackframe.functionName,\n                        stackframe.args,\n                        loc.source,\n                        loc.line,\n                        loc.column));\n            } else {\n                reject(new Error('Could not get original source for given stackframe and source map'));\n            }\n        });\n    }\n\n    /**\n     * @constructor\n     * @param {Object} opts\n     *      opts.sourceCache = {url: \"Source String\"} => preload source cache\n     *      opts.offline = True to prevent network requests.\n     *              Best effort without sources or source maps.\n     *      opts.ajax = Promise returning function to make X-Domain requests\n     */\n    return function StackTraceGPS(opts) {\n        if (!(this instanceof StackTraceGPS)) {\n            return new StackTraceGPS(opts);\n        }\n        opts = opts || {};\n\n        this.sourceCache = opts.sourceCache || {};\n\n        this.ajax = opts.ajax || _xdr;\n\n        this._atob = opts.atob || _atob;\n\n        this._get = function _get(location) {\n            return new Promise(function(resolve, reject) {\n                var isDataUrl = location.substr(0, 5) === 'data:';\n                if (this.sourceCache[location]) {\n                    resolve(this.sourceCache[location]);\n                } else if (opts.offline && !isDataUrl) {\n                    reject(new Error('Cannot make network requests in offline mode'));\n                } else {\n                    if (isDataUrl) {\n                        // data URLs can have parameters.\n                        // see http://tools.ietf.org/html/rfc2397\n                        var supportedEncodingRegexp =\n                            /^data:application\\/json;([\\w=:\"-]+;)*base64,/;\n                        var match = location.match(supportedEncodingRegexp);\n                        if (match) {\n                            var sourceMapStart = match[0].length;\n                            var encodedSource = location.substr(sourceMapStart);\n                            var source = this._atob(encodedSource);\n                            this.sourceCache[location] = source;\n                            resolve(source);\n                        } else {\n                            reject(new Error('The encoding of the inline sourcemap is not supported'));\n                        }\n                    } else {\n                        var xhrPromise = this.ajax(location, {method: 'get'});\n                        // Cache the Promise to prevent duplicate in-flight requests\n                        this.sourceCache[location] = xhrPromise;\n                        xhrPromise.then(resolve, reject);\n                    }\n                }\n            }.bind(this));\n        };\n\n        /**\n         * Given a StackFrame, enhance function name and use source maps for a\n         * better StackFrame.\n         *\n         * @param {StackFrame} stackframe object\n         * @returns {Promise} that resolves with with source-mapped StackFrame\n         */\n        this.pinpoint = function StackTraceGPS$$pinpoint(stackframe) {\n            return new Promise(function(resolve, reject) {\n                this.getMappedLocation(stackframe).then(function(mappedStackFrame) {\n                    function resolveMappedStackFrame() {\n                        resolve(mappedStackFrame);\n                    }\n\n                    this.findFunctionName(mappedStackFrame)\n                        .then(resolve, resolveMappedStackFrame)\n                        ['catch'](resolveMappedStackFrame);\n                }.bind(this), reject);\n            }.bind(this));\n        };\n\n        /**\n         * Given a StackFrame, guess function name from location information.\n         *\n         * @param {StackFrame} stackframe\n         * @returns {Promise} that resolves with enhanced StackFrame.\n         */\n        this.findFunctionName = function StackTraceGPS$$findFunctionName(stackframe) {\n            return new Promise(function(resolve, reject) {\n                _ensureStackFrameIsLegit(stackframe);\n                this._get(stackframe.fileName).then(function getSourceCallback(source) {\n                    var lineNumber = stackframe.lineNumber;\n                    var columnNumber = stackframe.columnNumber;\n                    var guessedFunctionName = _findFunctionName(source, lineNumber, columnNumber);\n                    // Only replace functionName if we found something\n                    if (guessedFunctionName) {\n                        resolve(new StackFrame(guessedFunctionName,\n                            stackframe.args,\n                            stackframe.fileName,\n                            lineNumber,\n                            columnNumber));\n                    } else {\n                        resolve(stackframe);\n                    }\n                }, reject)['catch'](reject);\n            }.bind(this));\n        };\n\n        /**\n         * Given a StackFrame, seek source-mapped location and return new enhanced StackFrame.\n         *\n         * @param {StackFrame} stackframe\n         * @returns {Promise} that resolves with enhanced StackFrame.\n         */\n        this.getMappedLocation = function StackTraceGPS$$getMappedLocation(stackframe) {\n            return new Promise(function(resolve, reject) {\n                _ensureSupportedEnvironment();\n                _ensureStackFrameIsLegit(stackframe);\n\n                var sourceCache = this.sourceCache;\n                var fileName = stackframe.fileName;\n                this._get(fileName).then(function(source) {\n                    var sourceMappingURL = _findSourceMappingURL(source);\n                    var isDataUrl = sourceMappingURL.substr(0, 5) === 'data:';\n                    var base = fileName.substring(0, fileName.lastIndexOf('/') + 1);\n\n                    if (sourceMappingURL[0] !== '/' && !isDataUrl && !(/^https?:\\/\\/|^\\/\\//i).test(sourceMappingURL)) {\n                        sourceMappingURL = base + sourceMappingURL;\n                    }\n\n                    this._get(sourceMappingURL).then(function(sourceMap) {\n                        if (typeof sourceMap === 'string') {\n                            sourceMap = _parseJson(sourceMap.replace(/^\\)\\]\\}'/, ''));\n                        }\n                        if (typeof sourceMap.sourceRoot === 'undefined') {\n                            sourceMap.sourceRoot = base;\n                        }\n\n                        _extractLocationInfoFromSourceMap(stackframe, sourceMap, sourceCache)\n                            .then(resolve)['catch'](function() {\n                            resolve(stackframe);\n                        });\n                    }, reject)['catch'](reject);\n                }.bind(this), reject)['catch'](reject);\n            }.bind(this));\n        };\n    };\n}));\n","(function(root, factory) {\n    'use strict';\n    // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n    /* istanbul ignore next */\n    if (typeof define === 'function' && define.amd) {\n        define('stacktrace', ['error-stack-parser', 'stack-generator', 'stacktrace-gps'], factory);\n    } else if (typeof exports === 'object') {\n        module.exports = factory(require('error-stack-parser'), require('stack-generator'), require('stacktrace-gps'));\n    } else {\n        root.StackTrace = factory(root.ErrorStackParser, root.StackGenerator, root.StackTraceGPS);\n    }\n}(this, function StackTrace(ErrorStackParser, StackGenerator, StackTraceGPS) {\n    var _options = {\n        filter: function(stackframe) {\n            // Filter out stackframes for this library by default\n            return (stackframe.functionName || '').indexOf('StackTrace$$') === -1 &&\n                (stackframe.functionName || '').indexOf('ErrorStackParser$$') === -1 &&\n                (stackframe.functionName || '').indexOf('StackTraceGPS$$') === -1 &&\n                (stackframe.functionName || '').indexOf('StackGenerator$$') === -1;\n        },\n        sourceCache: {}\n    };\n\n    var _generateError = function StackTrace$$GenerateError() {\n        try {\n            // Error must be thrown to get stack in IE\n            throw new Error();\n        } catch (err) {\n            return err;\n        }\n    };\n\n    /**\n     * Merge 2 given Objects. If a conflict occurs the second object wins.\n     * Does not do deep merges.\n     *\n     * @param {Object} first base object\n     * @param {Object} second overrides\n     * @returns {Object} merged first and second\n     * @private\n     */\n    function _merge(first, second) {\n        var target = {};\n\n        [first, second].forEach(function(obj) {\n            for (var prop in obj) {\n                if (obj.hasOwnProperty(prop)) {\n                    target[prop] = obj[prop];\n                }\n            }\n            return target;\n        });\n\n        return target;\n    }\n\n    function _isShapedLikeParsableError(err) {\n        return err.stack || err['opera#sourceloc'];\n    }\n\n    function _filtered(stackframes, filter) {\n        if (typeof filter === 'function') {\n            return stackframes.filter(filter);\n        }\n        return stackframes;\n    }\n\n    return {\n        /**\n         * Get a backtrace from invocation point.\n         *\n         * @param {Object} opts\n         * @returns {Array} of StackFrame\n         */\n        get: function StackTrace$$get(opts) {\n            var err = _generateError();\n            return _isShapedLikeParsableError(err) ? this.fromError(err, opts) : this.generateArtificially(opts);\n        },\n\n        /**\n         * Get a backtrace from invocation point.\n         * IMPORTANT: Does not handle source maps or guess function names!\n         *\n         * @param {Object} opts\n         * @returns {Array} of StackFrame\n         */\n        getSync: function StackTrace$$getSync(opts) {\n            opts = _merge(_options, opts);\n            var err = _generateError();\n            var stack = _isShapedLikeParsableError(err) ? ErrorStackParser.parse(err) : StackGenerator.backtrace(opts);\n            return _filtered(stack, opts.filter);\n        },\n\n        /**\n         * Given an error object, parse it.\n         *\n         * @param {Error} error object\n         * @param {Object} opts\n         * @returns {Promise} for Array[StackFrame}\n         */\n        fromError: function StackTrace$$fromError(error, opts) {\n            opts = _merge(_options, opts);\n            var gps = new StackTraceGPS(opts);\n            return new Promise(function(resolve) {\n                var stackframes = _filtered(ErrorStackParser.parse(error), opts.filter);\n                resolve(Promise.all(stackframes.map(function(sf) {\n                    return new Promise(function(resolve) {\n                        function resolveOriginal() {\n                            resolve(sf);\n                        }\n\n                        gps.pinpoint(sf).then(resolve, resolveOriginal)['catch'](resolveOriginal);\n                    });\n                })));\n            }.bind(this));\n        },\n\n        /**\n         * Use StackGenerator to generate a backtrace.\n         *\n         * @param {Object} opts\n         * @returns {Promise} of Array[StackFrame]\n         */\n        generateArtificially: function StackTrace$$generateArtificially(opts) {\n            opts = _merge(_options, opts);\n            var stackFrames = StackGenerator.backtrace(opts);\n            if (typeof opts.filter === 'function') {\n                stackFrames = stackFrames.filter(opts.filter);\n            }\n            return Promise.resolve(stackFrames);\n        },\n\n        /**\n         * Given a function, wrap it such that invocations trigger a callback that\n         * is called with a stack trace.\n         *\n         * @param {Function} fn to be instrumented\n         * @param {Function} callback function to call with a stack trace on invocation\n         * @param {Function} errback optional function to call with error if unable to get stack trace.\n         * @param {Object} thisArg optional context object (e.g. window)\n         */\n        instrument: function StackTrace$$instrument(fn, callback, errback, thisArg) {\n            if (typeof fn !== 'function') {\n                throw new Error('Cannot instrument non-function object');\n            } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n                // Already instrumented, return given Function\n                return fn;\n            }\n\n            var instrumented = function StackTrace$$instrumented() {\n                try {\n                    this.get().then(callback, errback)['catch'](errback);\n                    return fn.apply(thisArg || this, arguments);\n                } catch (e) {\n                    if (_isShapedLikeParsableError(e)) {\n                        this.fromError(e).then(callback, errback)['catch'](errback);\n                    }\n                    throw e;\n                }\n            }.bind(this);\n            instrumented.__stacktraceOriginalFn = fn;\n\n            return instrumented;\n        },\n\n        /**\n         * Given a function that has been instrumented,\n         * revert the function to it's original (non-instrumented) state.\n         *\n         * @param {Function} fn to de-instrument\n         */\n        deinstrument: function StackTrace$$deinstrument(fn) {\n            if (typeof fn !== 'function') {\n                throw new Error('Cannot de-instrument non-function object');\n            } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n                return fn.__stacktraceOriginalFn;\n            } else {\n                // Function not instrumented, return original\n                return fn;\n            }\n        },\n\n        /**\n         * Given an error message and Array of StackFrames, serialize and POST to given URL.\n         *\n         * @param {Array} stackframes\n         * @param {String} url\n         * @param {String} errorMsg\n         */\n        report: function StackTrace$$report(stackframes, url, errorMsg) {\n            return new Promise(function(resolve, reject) {\n                var req = new XMLHttpRequest();\n                req.onerror = reject;\n                req.onreadystatechange = function onreadystatechange() {\n                    if (req.readyState === 4) {\n                        if (req.status >= 200 && req.status < 400) {\n                            resolve(req.responseText);\n                        } else {\n                            reject(new Error('POST to ' + url + ' failed with status: ' + req.status));\n                        }\n                    }\n                };\n                req.open('post', url);\n                req.setRequestHeader('Content-Type', 'application/json');\n\n                var reportPayload = {stack: stackframes};\n                if (errorMsg !== undefined) {\n                    reportPayload.message = errorMsg;\n                }\n\n                req.send(JSON.stringify(reportPayload));\n            });\n        }\n    };\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\nmodule.exports = Stream;\n\nvar EE = require('events').EventEmitter;\nvar inherits = require('inherits');\n\ninherits(Stream, EE);\nStream.Readable = require('readable-stream/readable.js');\nStream.Writable = require('readable-stream/writable.js');\nStream.Duplex = require('readable-stream/duplex.js');\nStream.Transform = require('readable-stream/transform.js');\nStream.PassThrough = require('readable-stream/passthrough.js');\n\n// Backwards-compat with node 0.4.x\nStream.Stream = Stream;\n\n\n\n// old-style streams.  Note that the pipe method (the only relevant\n// part of this class) is overridden in the Readable class.\n\nfunction Stream() {\n  EE.call(this);\n}\n\nStream.prototype.pipe = function(dest, options) {\n  var source = this;\n\n  function ondata(chunk) {\n    if (dest.writable) {\n      if (false === dest.write(chunk) && source.pause) {\n        source.pause();\n      }\n    }\n  }\n\n  source.on('data', ondata);\n\n  function ondrain() {\n    if (source.readable && source.resume) {\n      source.resume();\n    }\n  }\n\n  dest.on('drain', ondrain);\n\n  // If the 'end' option is not supplied, dest.end() will be called when\n  // source gets the 'end' or 'close' events.  Only dest.end() once.\n  if (!dest._isStdio && (!options || options.end !== false)) {\n    source.on('end', onend);\n    source.on('close', onclose);\n  }\n\n  var didOnEnd = false;\n  function onend() {\n    if (didOnEnd) return;\n    didOnEnd = true;\n\n    dest.end();\n  }\n\n\n  function onclose() {\n    if (didOnEnd) return;\n    didOnEnd = true;\n\n    if (typeof dest.destroy === 'function') dest.destroy();\n  }\n\n  // don't leave dangling pipes when there are errors.\n  function onerror(er) {\n    cleanup();\n    if (EE.listenerCount(this, 'error') === 0) {\n      throw er; // Unhandled stream error in pipe.\n    }\n  }\n\n  source.on('error', onerror);\n  dest.on('error', onerror);\n\n  // remove all the event listeners that were added.\n  function cleanup() {\n    source.removeListener('data', ondata);\n    dest.removeListener('drain', ondrain);\n\n    source.removeListener('end', onend);\n    source.removeListener('close', onclose);\n\n    source.removeListener('error', onerror);\n    dest.removeListener('error', onerror);\n\n    source.removeListener('end', cleanup);\n    source.removeListener('close', cleanup);\n\n    dest.removeListener('close', cleanup);\n  }\n\n  source.on('end', cleanup);\n  source.on('close', cleanup);\n\n  dest.on('close', cleanup);\n\n  dest.emit('pipe', source);\n\n  // Allow for unix-like usage: A.pipe(B).pipe(C)\n  return dest;\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\n/*<replacement>*/\n\nvar Buffer = require('safe-buffer').Buffer;\n/*</replacement>*/\n\nvar isEncoding = Buffer.isEncoding || function (encoding) {\n  encoding = '' + encoding;\n  switch (encoding && encoding.toLowerCase()) {\n    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':\n      return true;\n    default:\n      return false;\n  }\n};\n\nfunction _normalizeEncoding(enc) {\n  if (!enc) return 'utf8';\n  var retried;\n  while (true) {\n    switch (enc) {\n      case 'utf8':\n      case 'utf-8':\n        return 'utf8';\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return 'utf16le';\n      case 'latin1':\n      case 'binary':\n        return 'latin1';\n      case 'base64':\n      case 'ascii':\n      case 'hex':\n        return enc;\n      default:\n        if (retried) return; // undefined\n        enc = ('' + enc).toLowerCase();\n        retried = true;\n    }\n  }\n};\n\n// Do not cache `Buffer.isEncoding` when checking encoding names as some\n// modules monkey-patch it to support additional encodings\nfunction normalizeEncoding(enc) {\n  var nenc = _normalizeEncoding(enc);\n  if (typeof nenc !== 'string' && (Buffer.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc);\n  return nenc || enc;\n}\n\n// StringDecoder provides an interface for efficiently splitting a series of\n// buffers into a series of JS strings without breaking apart multi-byte\n// characters.\nexports.StringDecoder = StringDecoder;\nfunction StringDecoder(encoding) {\n  this.encoding = normalizeEncoding(encoding);\n  var nb;\n  switch (this.encoding) {\n    case 'utf16le':\n      this.text = utf16Text;\n      this.end = utf16End;\n      nb = 4;\n      break;\n    case 'utf8':\n      this.fillLast = utf8FillLast;\n      nb = 4;\n      break;\n    case 'base64':\n      this.text = base64Text;\n      this.end = base64End;\n      nb = 3;\n      break;\n    default:\n      this.write = simpleWrite;\n      this.end = simpleEnd;\n      return;\n  }\n  this.lastNeed = 0;\n  this.lastTotal = 0;\n  this.lastChar = Buffer.allocUnsafe(nb);\n}\n\nStringDecoder.prototype.write = function (buf) {\n  if (buf.length === 0) return '';\n  var r;\n  var i;\n  if (this.lastNeed) {\n    r = this.fillLast(buf);\n    if (r === undefined) return '';\n    i = this.lastNeed;\n    this.lastNeed = 0;\n  } else {\n    i = 0;\n  }\n  if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i);\n  return r || '';\n};\n\nStringDecoder.prototype.end = utf8End;\n\n// Returns only complete characters in a Buffer\nStringDecoder.prototype.text = utf8Text;\n\n// Attempts to complete a partial non-UTF-8 character using bytes from a Buffer\nStringDecoder.prototype.fillLast = function (buf) {\n  if (this.lastNeed <= buf.length) {\n    buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed);\n    return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n  }\n  buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length);\n  this.lastNeed -= buf.length;\n};\n\n// Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a\n// continuation byte. If an invalid byte is detected, -2 is returned.\nfunction utf8CheckByte(byte) {\n  if (byte <= 0x7F) return 0;else if (byte >> 5 === 0x06) return 2;else if (byte >> 4 === 0x0E) return 3;else if (byte >> 3 === 0x1E) return 4;\n  return byte >> 6 === 0x02 ? -1 : -2;\n}\n\n// Checks at most 3 bytes at the end of a Buffer in order to detect an\n// incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4)\n// needed to complete the UTF-8 character (if applicable) are returned.\nfunction utf8CheckIncomplete(self, buf, i) {\n  var j = buf.length - 1;\n  if (j < i) return 0;\n  var nb = utf8CheckByte(buf[j]);\n  if (nb >= 0) {\n    if (nb > 0) self.lastNeed = nb - 1;\n    return nb;\n  }\n  if (--j < i || nb === -2) return 0;\n  nb = utf8CheckByte(buf[j]);\n  if (nb >= 0) {\n    if (nb > 0) self.lastNeed = nb - 2;\n    return nb;\n  }\n  if (--j < i || nb === -2) return 0;\n  nb = utf8CheckByte(buf[j]);\n  if (nb >= 0) {\n    if (nb > 0) {\n      if (nb === 2) nb = 0;else self.lastNeed = nb - 3;\n    }\n    return nb;\n  }\n  return 0;\n}\n\n// Validates as many continuation bytes for a multi-byte UTF-8 character as\n// needed or are available. If we see a non-continuation byte where we expect\n// one, we \"replace\" the validated continuation bytes we've seen so far with\n// a single UTF-8 replacement character ('\\ufffd'), to match v8's UTF-8 decoding\n// behavior. The continuation byte check is included three times in the case\n// where all of the continuation bytes for a character exist in the same buffer.\n// It is also done this way as a slight performance increase instead of using a\n// loop.\nfunction utf8CheckExtraBytes(self, buf, p) {\n  if ((buf[0] & 0xC0) !== 0x80) {\n    self.lastNeed = 0;\n    return '\\ufffd';\n  }\n  if (self.lastNeed > 1 && buf.length > 1) {\n    if ((buf[1] & 0xC0) !== 0x80) {\n      self.lastNeed = 1;\n      return '\\ufffd';\n    }\n    if (self.lastNeed > 2 && buf.length > 2) {\n      if ((buf[2] & 0xC0) !== 0x80) {\n        self.lastNeed = 2;\n        return '\\ufffd';\n      }\n    }\n  }\n}\n\n// Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer.\nfunction utf8FillLast(buf) {\n  var p = this.lastTotal - this.lastNeed;\n  var r = utf8CheckExtraBytes(this, buf, p);\n  if (r !== undefined) return r;\n  if (this.lastNeed <= buf.length) {\n    buf.copy(this.lastChar, p, 0, this.lastNeed);\n    return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n  }\n  buf.copy(this.lastChar, p, 0, buf.length);\n  this.lastNeed -= buf.length;\n}\n\n// Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a\n// partial character, the character's bytes are buffered until the required\n// number of bytes are available.\nfunction utf8Text(buf, i) {\n  var total = utf8CheckIncomplete(this, buf, i);\n  if (!this.lastNeed) return buf.toString('utf8', i);\n  this.lastTotal = total;\n  var end = buf.length - (total - this.lastNeed);\n  buf.copy(this.lastChar, 0, end);\n  return buf.toString('utf8', i, end);\n}\n\n// For UTF-8, a replacement character is added when ending on a partial\n// character.\nfunction utf8End(buf) {\n  var r = buf && buf.length ? this.write(buf) : '';\n  if (this.lastNeed) return r + '\\ufffd';\n  return r;\n}\n\n// UTF-16LE typically needs two bytes per character, but even if we have an even\n// number of bytes available, we need to check if we end on a leading/high\n// surrogate. In that case, we need to wait for the next two bytes in order to\n// decode the last character properly.\nfunction utf16Text(buf, i) {\n  if ((buf.length - i) % 2 === 0) {\n    var r = buf.toString('utf16le', i);\n    if (r) {\n      var c = r.charCodeAt(r.length - 1);\n      if (c >= 0xD800 && c <= 0xDBFF) {\n        this.lastNeed = 2;\n        this.lastTotal = 4;\n        this.lastChar[0] = buf[buf.length - 2];\n        this.lastChar[1] = buf[buf.length - 1];\n        return r.slice(0, -1);\n      }\n    }\n    return r;\n  }\n  this.lastNeed = 1;\n  this.lastTotal = 2;\n  this.lastChar[0] = buf[buf.length - 1];\n  return buf.toString('utf16le', i, buf.length - 1);\n}\n\n// For UTF-16LE we do not explicitly append special replacement characters if we\n// end on a partial character, we simply let v8 handle that.\nfunction utf16End(buf) {\n  var r = buf && buf.length ? this.write(buf) : '';\n  if (this.lastNeed) {\n    var end = this.lastTotal - this.lastNeed;\n    return r + this.lastChar.toString('utf16le', 0, end);\n  }\n  return r;\n}\n\nfunction base64Text(buf, i) {\n  var n = (buf.length - i) % 3;\n  if (n === 0) return buf.toString('base64', i);\n  this.lastNeed = 3 - n;\n  this.lastTotal = 3;\n  if (n === 1) {\n    this.lastChar[0] = buf[buf.length - 1];\n  } else {\n    this.lastChar[0] = buf[buf.length - 2];\n    this.lastChar[1] = buf[buf.length - 1];\n  }\n  return buf.toString('base64', i, buf.length - n);\n}\n\nfunction base64End(buf) {\n  var r = buf && buf.length ? this.write(buf) : '';\n  if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed);\n  return r;\n}\n\n// Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex)\nfunction simpleWrite(buf) {\n  return buf.toString(this.encoding);\n}\n\nfunction simpleEnd(buf) {\n  return buf && buf.length ? this.write(buf) : '';\n}","/* eslint-disable node/no-deprecated-api */\nvar buffer = require('buffer')\nvar Buffer = buffer.Buffer\n\n// alternative to using Object.keys for old browsers\nfunction copyProps (src, dst) {\n  for (var key in src) {\n    dst[key] = src[key]\n  }\n}\nif (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {\n  module.exports = buffer\n} else {\n  // Copy properties from require('buffer')\n  copyProps(buffer, exports)\n  exports.Buffer = SafeBuffer\n}\n\nfunction SafeBuffer (arg, encodingOrOffset, length) {\n  return Buffer(arg, encodingOrOffset, length)\n}\n\n// Copy static methods from Buffer\ncopyProps(Buffer, SafeBuffer)\n\nSafeBuffer.from = function (arg, encodingOrOffset, length) {\n  if (typeof arg === 'number') {\n    throw new TypeError('Argument must not be a number')\n  }\n  return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.alloc = function (size, fill, encoding) {\n  if (typeof size !== 'number') {\n    throw new TypeError('Argument must be a number')\n  }\n  var buf = Buffer(size)\n  if (fill !== undefined) {\n    if (typeof encoding === 'string') {\n      buf.fill(fill, encoding)\n    } else {\n      buf.fill(fill)\n    }\n  } else {\n    buf.fill(0)\n  }\n  return buf\n}\n\nSafeBuffer.allocUnsafe = function (size) {\n  if (typeof size !== 'number') {\n    throw new TypeError('Argument must be a number')\n  }\n  return Buffer(size)\n}\n\nSafeBuffer.allocUnsafeSlow = function (size) {\n  if (typeof size !== 'number') {\n    throw new TypeError('Argument must be a number')\n  }\n  return buffer.SlowBuffer(size)\n}\n","var nextTick = require('process/browser.js').nextTick;\nvar apply = Function.prototype.apply;\nvar slice = Array.prototype.slice;\nvar immediateIds = {};\nvar nextImmediateId = 0;\n\n// DOM APIs, for completeness\n\nexports.setTimeout = function() {\n  return new Timeout(apply.call(setTimeout, window, arguments), clearTimeout);\n};\nexports.setInterval = function() {\n  return new Timeout(apply.call(setInterval, window, arguments), clearInterval);\n};\nexports.clearTimeout =\nexports.clearInterval = function(timeout) { timeout.close(); };\n\nfunction Timeout(id, clearFn) {\n  this._id = id;\n  this._clearFn = clearFn;\n}\nTimeout.prototype.unref = Timeout.prototype.ref = function() {};\nTimeout.prototype.close = function() {\n  this._clearFn.call(window, this._id);\n};\n\n// Does not start the time, just sets up the members needed.\nexports.enroll = function(item, msecs) {\n  clearTimeout(item._idleTimeoutId);\n  item._idleTimeout = msecs;\n};\n\nexports.unenroll = function(item) {\n  clearTimeout(item._idleTimeoutId);\n  item._idleTimeout = -1;\n};\n\nexports._unrefActive = exports.active = function(item) {\n  clearTimeout(item._idleTimeoutId);\n\n  var msecs = item._idleTimeout;\n  if (msecs >= 0) {\n    item._idleTimeoutId = setTimeout(function onTimeout() {\n      if (item._onTimeout)\n        item._onTimeout();\n    }, msecs);\n  }\n};\n\n// That's not how node.js implements it but the exposed api is the same.\nexports.setImmediate = typeof setImmediate === \"function\" ? setImmediate : function(fn) {\n  var id = nextImmediateId++;\n  var args = arguments.length < 2 ? false : slice.call(arguments, 1);\n\n  immediateIds[id] = true;\n\n  nextTick(function onNextTick() {\n    if (immediateIds[id]) {\n      // fn.call() is faster so we optimize for the common use-case\n      // @see http://jsperf.com/call-apply-segu\n      if (args) {\n        fn.apply(null, args);\n      } else {\n        fn.call(null);\n      }\n      // Prevent ids from leaking\n      exports.clearImmediate(id);\n    }\n  });\n\n  return id;\n};\n\nexports.clearImmediate = typeof clearImmediate === \"function\" ? clearImmediate : function(id) {\n  delete immediateIds[id];\n};","\n/**\n * Module exports.\n */\n\nmodule.exports = deprecate;\n\n/**\n * Mark that a method should not be used.\n * Returns a modified function which warns once by default.\n *\n * If `localStorage.noDeprecation = true` is set, then it is a no-op.\n *\n * If `localStorage.throwDeprecation = true` is set, then deprecated functions\n * will throw an Error when invoked.\n *\n * If `localStorage.traceDeprecation = true` is set, then deprecated functions\n * will invoke `console.trace()` instead of `console.error()`.\n *\n * @param {Function} fn - the function to deprecate\n * @param {String} msg - the string to print to the console when `fn` is invoked\n * @returns {Function} a new \"deprecated\" version of `fn`\n * @api public\n */\n\nfunction deprecate (fn, msg) {\n  if (config('noDeprecation')) {\n    return fn;\n  }\n\n  var warned = false;\n  function deprecated() {\n    if (!warned) {\n      if (config('throwDeprecation')) {\n        throw new Error(msg);\n      } else if (config('traceDeprecation')) {\n        console.trace(msg);\n      } else {\n        console.warn(msg);\n      }\n      warned = true;\n    }\n    return fn.apply(this, arguments);\n  }\n\n  return deprecated;\n}\n\n/**\n * Checks `localStorage` for boolean values for the given `name`.\n *\n * @param {String} name\n * @returns {Boolean}\n * @api private\n */\n\nfunction config (name) {\n  // accessing global.localStorage can trigger a DOMException in sandboxed iframes\n  try {\n    if (!global.localStorage) return false;\n  } catch (_) {\n    return false;\n  }\n  var val = global.localStorage[name];\n  if (null == val) return false;\n  return String(val).toLowerCase() === 'true';\n}\n","var indexOf = function (xs, item) {\n    if (xs.indexOf) return xs.indexOf(item);\n    else for (var i = 0; i < xs.length; i++) {\n        if (xs[i] === item) return i;\n    }\n    return -1;\n};\nvar Object_keys = function (obj) {\n    if (Object.keys) return Object.keys(obj)\n    else {\n        var res = [];\n        for (var key in obj) res.push(key)\n        return res;\n    }\n};\n\nvar forEach = function (xs, fn) {\n    if (xs.forEach) return xs.forEach(fn)\n    else for (var i = 0; i < xs.length; i++) {\n        fn(xs[i], i, xs);\n    }\n};\n\nvar defineProp = (function() {\n    try {\n        Object.defineProperty({}, '_', {});\n        return function(obj, name, value) {\n            Object.defineProperty(obj, name, {\n                writable: true,\n                enumerable: false,\n                configurable: true,\n                value: value\n            })\n        };\n    } catch(e) {\n        return function(obj, name, value) {\n            obj[name] = value;\n        };\n    }\n}());\n\nvar globals = ['Array', 'Boolean', 'Date', 'Error', 'EvalError', 'Function',\n'Infinity', 'JSON', 'Math', 'NaN', 'Number', 'Object', 'RangeError',\n'ReferenceError', 'RegExp', 'String', 'SyntaxError', 'TypeError', 'URIError',\n'decodeURI', 'decodeURIComponent', 'encodeURI', 'encodeURIComponent', 'escape',\n'eval', 'isFinite', 'isNaN', 'parseFloat', 'parseInt', 'undefined', 'unescape'];\n\nfunction Context() {}\nContext.prototype = {};\n\nvar Script = exports.Script = function NodeScript (code) {\n    if (!(this instanceof Script)) return new Script(code);\n    this.code = code;\n};\n\nScript.prototype.runInContext = function (context) {\n    if (!(context instanceof Context)) {\n        throw new TypeError(\"needs a 'context' argument.\");\n    }\n    \n    var iframe = document.createElement('iframe');\n    if (!iframe.style) iframe.style = {};\n    iframe.style.display = 'none';\n    \n    document.body.appendChild(iframe);\n    \n    var win = iframe.contentWindow;\n    var wEval = win.eval, wExecScript = win.execScript;\n\n    if (!wEval && wExecScript) {\n        // win.eval() magically appears when this is called in IE:\n        wExecScript.call(win, 'null');\n        wEval = win.eval;\n    }\n    \n    forEach(Object_keys(context), function (key) {\n        win[key] = context[key];\n    });\n    forEach(globals, function (key) {\n        if (context[key]) {\n            win[key] = context[key];\n        }\n    });\n    \n    var winKeys = Object_keys(win);\n\n    var res = wEval.call(win, this.code);\n    \n    forEach(Object_keys(win), function (key) {\n        // Avoid copying circular objects like `top` and `window` by only\n        // updating existing context properties or new properties in the `win`\n        // that was only introduced after the eval.\n        if (key in context || indexOf(winKeys, key) === -1) {\n            context[key] = win[key];\n        }\n    });\n\n    forEach(globals, function (key) {\n        if (!(key in context)) {\n            defineProp(context, key, win[key]);\n        }\n    });\n    \n    document.body.removeChild(iframe);\n    \n    return res;\n};\n\nScript.prototype.runInThisContext = function () {\n    return eval(this.code); // maybe...\n};\n\nScript.prototype.runInNewContext = function (context) {\n    var ctx = Script.createContext(context);\n    var res = this.runInContext(ctx);\n\n    if (context) {\n        forEach(Object_keys(ctx), function (key) {\n            context[key] = ctx[key];\n        });\n    }\n\n    return res;\n};\n\nforEach(Object_keys(Script.prototype), function (name) {\n    exports[name] = Script[name] = function (code) {\n        var s = Script(code);\n        return s[name].apply(s, [].slice.call(arguments, 1));\n    };\n});\n\nexports.isContext = function (context) {\n    return context instanceof Context;\n};\n\nexports.createScript = function (code) {\n    return exports.Script(code);\n};\n\nexports.createContext = Script.createContext = function (context) {\n    var copy = new Context();\n    if(typeof context === 'object') {\n        forEach(Object_keys(context), function (key) {\n            copy[key] = context[key];\n        });\n    }\n    return copy;\n};\n"]}